summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2022-01-03 21:44:57 -0800
committerGitHub <noreply@github.com>2022-01-04 05:44:57 +0000
commit8cd978585e1570383c401d6fcd439d9a3f9440f5 (patch)
tree6298dfe84e1f10d9134472db01a9bddda5260021 /src/code
parent06a08a3322a4958e95c8e1de357ebfbfd6852c86 (diff)
EnItem00 OK (#519)
* Match three nonmatchings * Remove duplicate parens * turn u32 into s32 * fix thiefbird * Remove some unnessesary casts * Fix merge
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_en_item00.c192
1 files changed, 85 insertions, 107 deletions
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index acd827f8e..f2fb0e45a 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -828,29 +828,22 @@ s16 func_800A7650(s16 dropId) {
return dropId;
}
-#ifdef NON_MATCHING
-// Reordering issues
-EnItem00* Item_DropCollectible(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params) {
+Actor* Item_DropCollectible(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params) {
s32 pad;
- EnItem00* spawnedActor = NULL;
- s32 pad2;
- s32 param10000;
- s16 param8000;
- s16 param7F00;
- s32 param20000;
- s32 paramFF;
+ Actor* spawnedActor = NULL;
+ s32 newParamFF;
+ s32 param10000 = params & 0x10000;
+ s16 param8000 = params & 0x8000;
+ s16 param7F00 = params & 0x7F00;
+ s32 param20000 = params & 0x20000;
+ s32 paramFF = params & 0xFF;
s32 i;
- param10000 = params & 0x10000;
- param8000 = params & 0x8000;
- param7F00 = params & 0x7F00;
- param20000 = params & 0x20000;
- paramFF = params & 0xFF;
-
params &= 0x7FFF;
+ newParamFF = params & 0xFF;
if (paramFF == ITEM00_3_HEARTS) {
- for (i = 0; i != 3; i++) {
+ for (i = 0; i < 3; i++) {
spawnedActor = Item_DropCollectible(globalCtx, spawnPos, param7F00 | ITEM00_HEART | param8000);
}
} else if (paramFF == ITEM00_MUSHROOM_CLOUD) {
@@ -859,20 +852,18 @@ EnItem00* Item_DropCollectible(GlobalContext* globalCtx, Vec3f* spawnPos, u32 pa
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_OBJ_KINOKO, spawnPos->x, spawnPos->y, spawnPos->z, 0, 0,
0, param7F00);
}
- } else if (((paramFF == ITEM00_FLEXIBLE) || ((params & 0xFF) == ITEM00_BIG_FAIRY)) && (param10000 == 0)) {
- if ((params & 0xFF) == ITEM00_FLEXIBLE) {
- // TODO: fix cast, this actor is not an EnItem00
- spawnedActor =
- (EnItem00*)Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
+ } else if (((paramFF == ITEM00_FLEXIBLE) || (newParamFF == ITEM00_BIG_FAIRY)) && (param10000 == 0)) {
+ newParamFF = params & 0xFF;
+ if (newParamFF == ITEM00_FLEXIBLE) {
+ spawnedActor = Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102);
if (!Actor_GetCollectibleFlag(globalCtx, (param7F00 >> 8) & 0x7F)) {
Audio_PlaySoundAtPosition(globalCtx, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
}
} else {
- // TODO: fix cast, this actor is not an EnItem00
- spawnedActor = (EnItem00*)Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ELFORG, spawnPos->x,
- spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
- ((((param7F00 >> 8) & 0x7F) & 0x7F) << 9) | 7);
+ spawnedActor =
+ Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f,
+ spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) & 0x7F) << 9) | 7);
if (param20000 == 0) {
if (!Actor_GetCollectibleFlag(globalCtx, (param7F00 >> 8) & 0x7F)) {
Audio_PlaySoundAtPosition(globalCtx, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
@@ -881,59 +872,50 @@ EnItem00* Item_DropCollectible(GlobalContext* globalCtx, Vec3f* spawnPos, u32 pa
}
} else {
if (param8000 == 0) {
- params = func_800A7650(params & 0xFF);
+ params = func_800A7650(newParamFF);
}
- if (params != (u32)ITEM00_NO_DROP) {
- spawnedActor = (EnItem00*)Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ITEM00, spawnPos->x,
- spawnPos->y, spawnPos->z, 0, 0, 0, params | param8000 | param7F00);
+ if ((s32)params != ITEM00_NO_DROP) {
+ spawnedActor = Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ITEM00, spawnPos->x, spawnPos->y,
+ spawnPos->z, 0, 0, 0, (s32)params | param8000 | param7F00);
if ((spawnedActor != NULL) && (param8000 == 0)) {
if (param10000 == 0) {
- spawnedActor->actor.velocity.y = 8.0f;
+ spawnedActor->velocity.y = 8.0f;
} else {
- spawnedActor->actor.velocity.y = -2.0f;
+ spawnedActor->velocity.y = -2.0f;
}
- spawnedActor->actor.speedXZ = 2.0f;
- spawnedActor->actor.gravity = -0.9f;
- spawnedActor->actor.world.rot.y = randPlusMinusPoint5Scaled(65536.0f);
- Actor_SetScale(&spawnedActor->actor, 0.0f);
- spawnedActor->actionFunc = func_800A6780;
- spawnedActor->unk152 = 0xDC;
- if ((spawnedActor->actor.params != ITEM00_SMALL_KEY) &&
- (spawnedActor->actor.params != ITEM00_HEART_PIECE) &&
- (spawnedActor->actor.params != ITEM00_HEART_CONTAINER)) {
- spawnedActor->actor.room = -1;
+ spawnedActor->speedXZ = 2.0f;
+ spawnedActor->gravity = -0.9f;
+ spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(65536.0f);
+ Actor_SetScale(spawnedActor, 0.0f);
+ ((EnItem00*)spawnedActor)->actionFunc = func_800A6780;
+ ((EnItem00*)spawnedActor)->unk152 = 0xDC;
+ if ((spawnedActor->params != ITEM00_SMALL_KEY) && (spawnedActor->params != ITEM00_HEART_PIECE) &&
+ (spawnedActor->params != ITEM00_HEART_CONTAINER)) {
+ spawnedActor->room = -1;
}
- spawnedActor->actor.flags |= 0x0010;
+ spawnedActor->flags |= 0x0010;
}
}
}
return spawnedActor;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_en_item00/Item_DropCollectible.s")
-#endif
-#ifdef NON_MATCHING
-// Regalloc, minor reordering
-Actor* Item_DropCollectible2(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params) {
+Actor* Item_DropCollectible2(GlobalContext* globalCtx, Vec3f* spawnPos, s32 params) {
Actor* spawnedActor = NULL;
- u32 pad;
- u32 param10000;
- s16 param8000;
- s16 param7F00;
+ s32 pad;
+ s32 param10000 = params & 0x10000;
+ s16 param8000 = params & 0x8000;
+ s16 param7F00 = params & 0x7F00;
- param10000 = params & 0x10000;
- param8000 = params & 0x8000;
- param7F00 = params & 0x7F00;
params &= 0xFF;
- if (params == ITEM00_3_HEARTS) {
+ if ((params & 0xFF) == ITEM00_3_HEARTS) {
return NULL;
}
- if (((params == ITEM00_FLEXIBLE) || (params == ITEM00_BIG_FAIRY)) && (param10000 == 0)) {
- if (params == ITEM00_FLEXIBLE) {
+ if ((((params & 0xFF) == ITEM00_FLEXIBLE) || ((params & 0xFF) == ITEM00_BIG_FAIRY)) && (param10000 == 0)) {
+ if ((params & 0xFF) == ITEM00_FLEXIBLE) {
spawnedActor = Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102);
} else {
@@ -945,10 +927,10 @@ Actor* Item_DropCollectible2(GlobalContext* globalCtx, Vec3f* spawnPos, u32 para
Audio_PlaySoundAtPosition(globalCtx, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
}
} else {
- params = func_800A7650(params);
- if (params != (u32)ITEM00_NO_DROP) {
+ params = func_800A7650(params & 0xFF);
+ if (params != ITEM00_NO_DROP) {
spawnedActor = Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ITEM00, spawnPos->x, spawnPos->y,
- spawnPos->z, 0, 0, 0, params | param8000 | param7F00);
+ spawnPos->z, 0, 0, 0, (s32)params | param8000 | param7F00);
if (spawnedActor != NULL) {
if (param8000 == 0) {
spawnedActor->velocity.y = 0.0f;
@@ -967,9 +949,6 @@ Actor* Item_DropCollectible2(GlobalContext* globalCtx, Vec3f* spawnPos, u32 para
return spawnedActor;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_en_item00/Item_DropCollectible2.s")
-#endif
u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = {
ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
@@ -1047,17 +1026,14 @@ u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = {
0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
};
-#ifdef NON_MATCHING
-// Many regalloc and reordering issues
void Item_DropCollectibleRandom(GlobalContext* globalCtx, Actor* fromActor, Vec3f* spawnPos, s16 params) {
EnItem00* spawnedActor;
u8 dropId;
s32 dropQuantity;
- s16 dropTableIndex;
- s16 param8000;
+ s16 dropTableIndex = Rand_ZeroOne() * 16.0f;
+ s16 param8000 = params & 0x8000;
+ u8 dropFlag;
- dropTableIndex = Rand_ZeroOne() * 16.0f;
- param8000 = params & 0x8000;
params &= 0x1F0;
if (params < 0x101) {
@@ -1065,50 +1041,54 @@ void Item_DropCollectibleRandom(GlobalContext* globalCtx, Actor* fromActor, Vec3
dropQuantity = sDropTableAmounts[params + dropTableIndex];
if (dropId == ITEM00_MASK) {
- dropQuantity = 1;
- if (gSaveContext.playerForm != PLAYER_FORM_GORON) {
- if (gSaveContext.playerForm != PLAYER_FORM_ZORA) {
- if (gSaveContext.playerForm != PLAYER_FORM_HUMAN) {
- dropId = ITEM00_RUPEE_GREEN;
- } else {
- dropId = ITEM00_ARROWS_10;
- }
- } else {
+ switch (gSaveContext.playerForm) {
+ case PLAYER_FORM_HUMAN:
+ dropId = ITEM00_ARROWS_10;
+ break;
+ case PLAYER_FORM_ZORA:
dropId = ITEM00_HEART;
- }
- } else {
- dropId = ITEM00_MAGIC_SMALL;
+ break;
+ case PLAYER_FORM_GORON:
+ dropId = ITEM00_MAGIC_SMALL;
+ break;
+ default:
+ dropId = ITEM00_RUPEE_GREEN;
+ break;
}
+ dropQuantity = 1;
}
if (fromActor != NULL) {
- if (fromActor->dropFlag != 0) {
- if ((fromActor->dropFlag & 1) != 0) {
+ dropFlag = fromActor->dropFlag;
+ if (dropFlag != 0) {
+ if (fromActor->dropFlag & 1) {
+ params = 0x10;
dropId = ITEM00_ARROWS_30;
+ dropQuantity = 1;
+ } else if (fromActor->dropFlag & 2) {
params = 0x10;
- } else if ((fromActor->dropFlag & 2) != 0) {
dropId = ITEM00_HEART;
- params = 0x10;
- } else if ((fromActor->dropFlag & 0x20) != 0) {
+ dropQuantity = 1;
+ } else if (fromActor->dropFlag & 0x20) {
dropId = ITEM00_RUPEE_PURPLE;
+ dropQuantity = 1;
}
- dropQuantity = 1;
}
}
if (dropId == ITEM00_FLEXIBLE) {
- if (gSaveContext.health < 0x11) {
+ if (gSaveContext.health <= 0x10) {
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
spawnPos->z, 0, 0, 0, 2);
Audio_PlaySoundAtPosition(globalCtx, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
return;
}
- if (gSaveContext.health < 0x31) {
+ if (gSaveContext.health <= 0x30) {
params = 0x10;
dropId = ITEM00_HEART;
dropQuantity = 3;
- } else if (gSaveContext.health < 0x51) {
+ } else if (gSaveContext.health <= 0x50) {
params = 0x10;
dropId = ITEM00_HEART;
dropQuantity = 1;
@@ -1132,6 +1112,8 @@ void Item_DropCollectibleRandom(GlobalContext* globalCtx, Actor* fromActor, Vec3
params = 0xA0;
dropId = ITEM00_RUPEE_RED;
dropQuantity = 1;
+ } else {
+ return;
}
}
@@ -1167,18 +1149,16 @@ void Item_DropCollectibleRandom(GlobalContext* globalCtx, Actor* fromActor, Vec3
}
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_en_item00/Item_DropCollectibleRandom.s")
-#endif
-
-s32 D_801AE194[32] = { ITEM00_NO_DROP, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP,
- ITEM00_RUPEE_RED, ITEM00_RUPEE_PURPLE, ITEM00_NO_DROP, ITEM00_RUPEE_HUGE,
- ITEM00_COMPASS, ITEM00_MUSHROOM_CLOUD, ITEM00_HEART, ITEM00_3_HEARTS,
- ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
- ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_NUTS_10,
- ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_ARROWS_10, ITEM00_ARROWS_30 };
+
+s32 D_801AE194[32] = {
+ ITEM00_NO_DROP, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_PURPLE, ITEM00_NO_DROP, ITEM00_RUPEE_HUGE, ITEM00_COMPASS, ITEM00_MUSHROOM_CLOUD,
+ ITEM00_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_LARGE, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_NUTS_10,
+ ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_ARROWS_10, ITEM00_ARROWS_30,
+};
s32 func_800A8150(s32 index) {
if ((index < 0) || (index >= ARRAY_COUNT(D_801AE194))) {
@@ -1188,9 +1168,7 @@ s32 func_800A8150(s32 index) {
return D_801AE194[index];
}
-u8 D_801AE214[32] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
+u8 D_801AE214[32] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
s32 func_800A817C(s32 index) {
if ((index < 0) || (index >= ARRAY_COUNT(D_801AE214))) {