mirror of
https://github.com/HarbourMasters/2ship2harkinian.git
synced 2025-02-17 12:48:41 +00:00
EnItem00 OK (#519)
* Match three nonmatchings * Remove duplicate parens * turn u32 into s32 * fix thiefbird * Remove some unnessesary casts * Fix merge
This commit is contained in:
parent
06a08a3322
commit
8cd978585e
@ -493,8 +493,8 @@ void* __osMemcpy(void* dst, void* src, size_t size);
|
||||
// void EnItem00_DrawHeartContainer(EnItem00* this, GlobalContext* globalCtx);
|
||||
// void EnItem00_DrawHeartPiece(EnItem00* this, GlobalContext* globalCtx);
|
||||
// s16 func_800A7650(s16 dropId);
|
||||
EnItem00* Item_DropCollectible(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params);
|
||||
Actor* Item_DropCollectible2(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params);
|
||||
Actor* Item_DropCollectible(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params);
|
||||
Actor* Item_DropCollectible2(GlobalContext* globalCtx, Vec3f* spawnPos, s32 params);
|
||||
void Item_DropCollectibleRandom(GlobalContext* globalCtx, Actor* fromActor, Vec3f* spawnPos, s16 params);
|
||||
s32 func_800A8150(s32 index);
|
||||
s32 func_800A817C(s32 index);
|
||||
|
@ -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))) {
|
||||
|
@ -401,12 +401,12 @@ s32 func_80C10E98(GlobalContext* globalCtx) {
|
||||
sp64.y = player->actor.world.pos.y + 20.0f;
|
||||
sp64.z = (Math_CosS(phi_s3) * 40.0f) + player->actor.world.pos.z;
|
||||
if (dropItem00Ids[i] != ITEM00_NO_DROP) {
|
||||
EnItem00* temp_s1_5 = Item_DropCollectible(globalCtx, &sp64, dropItem00Ids[i]);
|
||||
Actor* temp_s1_5 = Item_DropCollectible(globalCtx, &sp64, dropItem00Ids[i]);
|
||||
|
||||
if (temp_s1_5 != NULL) {
|
||||
temp_s1_5->actor.velocity.y = Rand_ZeroFloat(3.0f) + 6.0f;
|
||||
temp_s1_5->actor.speedXZ = Rand_ZeroFloat(3.0f) + 3.0f;
|
||||
temp_s1_5->actor.world.rot.y = phi_s3;
|
||||
temp_s1_5->velocity.y = Rand_ZeroFloat(3.0f) + 6.0f;
|
||||
temp_s1_5->speedXZ = Rand_ZeroFloat(3.0f) + 3.0f;
|
||||
temp_s1_5->world.rot.y = phi_s3;
|
||||
}
|
||||
phi_s3 += (s16)(0x10000 / (spB0 + spAC + phi_s0_2 + spA0 + phi_s2 + spA8));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user