From 036a68cb3e3477b31a29ee377ad81a012897327e Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 29 Mar 2022 12:52:37 -0700 Subject: [PATCH] Effects Stick and Kakera cleanup (#752) * cleanup * cleanup * idx -> index --- assets/xml/objects/gameplay_keep.xml | 4 +- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 183 ++++++++++-------- .../ovl_Effect_Ss_Stick/z_eff_ss_stick.c | 23 ++- tools/disasm/functions.txt | 2 +- 4 files changed, 117 insertions(+), 95 deletions(-) diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 3e74b3ace..009bc87ae 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -38,7 +38,7 @@ - + @@ -68,7 +68,7 @@ - + diff --git a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c index fe070b28d..d2ea02f7c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c @@ -6,43 +6,59 @@ #include "z_eff_ss_kakera.h" +#define rReg0 regs[0] +#define rGravity regs[1] +#define rPitch regs[2] +#define rYaw regs[3] +#define rReg4 regs[4] +#define rReg5 regs[5] +#define rReg6 regs[6] +#define rScale regs[7] +#define rReg8 regs[8] +#define rReg9 regs[9] +#define rObjId regs[10] +#define rObjBankIndex regs[11] +#define rColorIndex regs[12] + #define PARAMS ((EffectSsKakeraInitParams*)initParamsx) u32 EffectSsKakera_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx); void EffectSsKakera_Update(GlobalContext* globalCtx, u32 index, EffectSs* this); void EffectSsKakera_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this); -void func_8097E130(EffectSs* this, GlobalContext* globalCtx); +void EffectSsKakera_CheckForObject(EffectSs* this, GlobalContext* globalCtx); const EffectSsInit Effect_Ss_Kakera_InitVars = { EFFECT_SS_KAKERA, EffectSsKakera_Init, }; + KakeraColorStruct D_8097EAD8[] = { { 0, { 255, 255, 255 } }, { 0, { 235, 170, 130 } }, { 1, { 210, 190, 170 } }, }; + f32 D_8097EAE4[] = { 1.0f, 100.0f, 40.0f, 5.0f, 100.0f, 40.0f, 5.0f, 100.0f, 40.0f, 5.0f }; u32 EffectSsKakera_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx) { - EffectSsKakeraInitParams* params = PARAMS; + EffectSsKakeraInitParams* initParams = PARAMS; - this->pos = params->pos; - this->velocity = params->velocity; - this->life = params->life; + this->pos = initParams->pos; + this->velocity = initParams->velocity; + this->life = initParams->life; this->priority = 101; - if (params->dList != NULL) { - this->gfx = params->dList; - switch (params->objId) { + if (initParams->dList != NULL) { + this->gfx = initParams->dList; + switch (initParams->objId) { case GAMEPLAY_KEEP: case GAMEPLAY_FIELD_KEEP: case GAMEPLAY_DANGEON_KEEP: - this->regs[10] = KAKERA_OBJECT_DEFAULT; + this->rObjId = KAKERA_OBJECT_DEFAULT; break; default: - this->regs[10] = params->objId; - func_8097E130(this, globalCtx); + this->rObjId = initParams->objId; + EffectSsKakera_CheckForObject(this, globalCtx); break; } } else { @@ -50,18 +66,18 @@ u32 EffectSsKakera_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, voi } this->draw = EffectSsKakera_Draw; this->update = EffectSsKakera_Update; - this->vec = params->unk_18; - this->regs[0] = params->unk_2C; - this->regs[1] = params->gravity; - this->regs[2] = Rand_ZeroOne() * 0x8000; - this->regs[3] = Rand_ZeroOne() * 0x8000; - this->regs[4] = params->unk_26; - this->regs[5] = params->unk_28; - this->regs[6] = params->unk_2A; - this->regs[7] = params->scale; - this->regs[8] = params->unk_30; - this->regs[9] = params->unk_32; - this->regs[12] = params->colorIdx; + this->vec = initParams->unk_18; + this->rReg0 = initParams->unk_2C; + this->rGravity = initParams->gravity; + this->rPitch = Rand_ZeroOne() * 0x8000; + this->rYaw = Rand_ZeroOne() * 0x8000; + this->rReg4 = initParams->unk_26; + this->rReg5 = initParams->unk_28; + this->rReg6 = initParams->unk_2A; + this->rScale = initParams->scale; + this->rReg8 = initParams->unk_30; + this->rReg9 = initParams->unk_32; + this->rColorIndex = initParams->colorIdx; return 1; } @@ -72,24 +88,24 @@ f32 func_8097DE30(f32 center, f32 range) { void EffectSsKakera_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this) { GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; s16 pad; - f32 scale = this->regs[7] / 256.0f; - s32 colorIndex = this->regs[12]; + f32 scale = this->rScale / 256.0f; + s32 colorIndex = this->rColorIndex; OPEN_DISPS(gfxCtx); - if (this->regs[10] != KAKERA_OBJECT_DEFAULT) { - if ((((this->regs[4] >> 7) & 1) << 7) == 0x80) { - gSPSegment(POLY_XLU_DISP++, 0x06, globalCtx->objectCtx.status[this->regs[11]].segment); + if (this->rObjId != KAKERA_OBJECT_DEFAULT) { + if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) { + gSPSegment(POLY_XLU_DISP++, 0x06, globalCtx->objectCtx.status[this->rObjBankIndex].segment); } else { - gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->regs[11]].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->rObjBankIndex].segment); } } Matrix_InsertTranslation(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); - Matrix_RotateY(this->regs[3], MTXMODE_APPLY); - Matrix_InsertXRotation_s(this->regs[2], MTXMODE_APPLY); + Matrix_RotateY(this->rYaw, MTXMODE_APPLY); + Matrix_InsertXRotation_s(this->rPitch, MTXMODE_APPLY); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - if ((((this->regs[4] >> 7) & 1) << 7) == 0x80) { + if ((((this->rReg4 >> 7) & 1) << 7) == 0x80) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); func_8012C2DC(globalCtx->state.gfxCtx); if (colorIndex >= 0) { @@ -109,9 +125,9 @@ void EffectSsKakera_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this) { CLOSE_DISPS(gfxCtx); } -void func_8097E130(EffectSs* this, GlobalContext* globalCtx) { - this->regs[11] = Object_GetIndex(&globalCtx->objectCtx, this->regs[10]); - if ((this->regs[11] < 0) || (!Object_IsLoaded(&globalCtx->objectCtx, this->regs[11]))) { +void EffectSsKakera_CheckForObject(EffectSs* this, GlobalContext* globalCtx) { + this->rObjBankIndex = Object_GetIndex(&globalCtx->objectCtx, this->rObjId); + if ((this->rObjBankIndex < 0) || (!Object_IsLoaded(&globalCtx->objectCtx, this->rObjBankIndex))) { this->life = 0; this->draw = NULL; } @@ -127,9 +143,9 @@ void func_8097E19C(EffectSs* this) { f32 temp_f20; f32 temp_f2_2; - temp_f18 = this->regs[5] / 1024.0f; - temp_f20 = this->regs[6] / 1024.0f; - range = (this->regs[9] / 1024.0f) * 4.0f; + temp_f18 = this->rReg5 / 1024.0f; + temp_f20 = this->rReg6 / 1024.0f; + range = (this->rReg9 / 1024.0f) * 4.0f; temp_f2 = this->velocity.x - func_8097DE30(0.0f, range); temp_f16 = this->velocity.y - func_8097DE30(0.0f, range); temp_f12 = this->velocity.z - func_8097DE30(0.0f, range); @@ -187,7 +203,7 @@ f32 func_8097E400(f32 arg0, s32 index) { s32 func_8097E420(EffectSs* this, Vec3f* diff, f32 distance) { static f32 D_8097EB0C[] = { 0.05f, 1.0f }; f32 phi_f0; - s32 index = this->regs[0] & 3; + s32 index = this->rReg0 & 3; if (index != 0) { if (distance > 1.0f) { @@ -198,23 +214,23 @@ s32 func_8097E420(EffectSs* this, Vec3f* diff, f32 distance) { this->accel.x += D_8097EB0C[index - 1] * diff->z * phi_f0; this->accel.z -= D_8097EB0C[index - 1] * diff->x * phi_f0; } - return 1; + return true; } s32 func_8097E4B0(EffectSs* this, Vec3f* diff, f32 distance) { static f32 D_8097EB14[] = { 4.0f, 0.1f, 0.3f, 0.9f, -0.1f, -0.3f, -0.9f }; - s32 index = (this->regs[0] >> 2) & 7; + s32 index = (this->rReg0 >> 2) & 7; if (index != 0) { this->accel.y += D_8097EB14[index]; } - return 1; + return true; } s32 func_8097E4F0(EffectSs* this, Vec3f* diff, f32 distance) { static f32 D_8097EB30[] = { 0.1f, 1.0f, 6.0f }; f32 phi_f0; - s32 index = (this->regs[0] >> 5) & 3; + s32 index = (this->rReg0 >> 5) & 3; if (index != 0) { if (distance > 1.0f) { @@ -225,32 +241,33 @@ s32 func_8097E4F0(EffectSs* this, Vec3f* diff, f32 distance) { this->accel.x -= diff->x * D_8097EB30[index - 1] * phi_f0; this->accel.z -= diff->z * D_8097EB30[index - 1] * phi_f0; } - return 1; + return true; } s32 func_8097E584(EffectSs* this, Vec3f* diff, f32 distance) { - static f32 (*D_8097EB3C[])(f32, - s32) = { func_8097E368, func_8097E384, func_8097E384, func_8097E384, func_8097E3C0, - func_8097E3C0, func_8097E3C0, func_8097E400, func_8097E400, func_8097E400 }; + static f32 (*D_8097EB3C[])(f32, s32) = { + func_8097E368, func_8097E384, func_8097E384, func_8097E384, func_8097E3C0, + func_8097E3C0, func_8097E3C0, func_8097E400, func_8097E400, func_8097E400, + }; f32 center; f32 rand; s32 index; - index = (this->regs[0] >> 7) & 0xF; + index = (this->rReg0 >> 7) & 0xF; center = D_8097EB3C[index](distance, index); - rand = func_8097DE30(center, (this->regs[9] * center) / 1024.0f); + rand = func_8097DE30(center, (this->rReg9 * center) / 1024.0f); this->accel.x *= rand; this->accel.y *= rand; this->accel.z *= rand; this->accel.x += rand * 0.01f; this->accel.y += rand * 0.01f; this->accel.z += rand * 0.01f; - return 1; + return true; } s32 func_8097E660(EffectSs* this, Vec3f* diff, f32 distance) { - this->accel.y += this->regs[1] / 256.0f; - return 1; + this->accel.y += this->rGravity / 256.0f; + return true; } s32 func_8097E698(EffectSs* this) { @@ -265,21 +282,21 @@ s32 func_8097E698(EffectSs* this) { if (distance > 1000.0f) { return false; } - if (this->regs[0] != 0) { - if (func_8097E420(this, &diff, distance) == 0) { + if (this->rReg0 != 0) { + if (!func_8097E420(this, &diff, distance)) { return false; } - if (func_8097E4B0(this, &diff, distance) == 0) { + if (!func_8097E4B0(this, &diff, distance)) { return false; } - if (func_8097E4F0(this, &diff, distance) == 0) { + if (!func_8097E4F0(this, &diff, distance)) { return false; } - if (func_8097E584(this, &diff, distance) == 0) { + if (!func_8097E584(this, &diff, distance)) { return false; } } - if (func_8097E660(this, &diff, distance) == 0) { + if (!func_8097E660(this, &diff, distance)) { return false; } else { return true; @@ -290,41 +307,41 @@ void func_8097E7E0(EffectSs* this, GlobalContext* globalCtx) { static f32 D_8097EB64[] = { 10.0f, 20.0f, 40.0f }; Player* player = GET_PLAYER(globalCtx); - if (this->regs[8] == 0) { - if ((((this->regs[4] >> 4) & 1) << 4) == (1 << 4)) { - if (this->pos.y <= (player->actor.floorHeight - ((this->regs[4] >> 2) & 3))) { - this->regs[9] = 0; - this->regs[0] = 0; - this->regs[4] &= ~0x60; + if (this->rReg8 == 0) { + if ((((this->rReg4 >> 4) & 1) << 4) == (1 << 4)) { + if (this->pos.y <= (player->actor.floorHeight - ((this->rReg4 >> 2) & 3))) { + this->rReg9 = 0; + this->rReg0 = 0; + this->rReg4 &= ~0x60; this->accel.x = this->accel.y = this->accel.z = 0.0f; this->velocity.x = this->velocity.y = this->velocity.z = 0.0f; - this->regs[5] = this->regs[9]; - this->regs[1] = this->regs[9]; + this->rReg5 = this->rReg9; + this->rGravity = this->rReg9; } } else { - if (this->pos.y <= ((player->actor.floorHeight - ((this->regs[4] >> 2) & 3)) - 600.0f)) { + if (this->pos.y <= ((player->actor.floorHeight - ((this->rReg4 >> 2) & 3)) - 600.0f)) { this->life = 0; } } } else { - switch (this->regs[4] & 3) { + switch (this->rReg4 & 3) { case 0: - this->regs[8] = 0; + this->rReg8 = 0; break; case 1: if ((this->velocity.y < 0.0f) && - (BgCheck_SphVsFirstPoly(&globalCtx->colCtx, &this->pos, D_8097EB64[(this->regs[4] >> 2) & 3]))) { + (BgCheck_SphVsFirstPoly(&globalCtx->colCtx, &this->pos, D_8097EB64[(this->rReg4 >> 2) & 3]))) { this->velocity.x *= func_8097DE30(0.9f, 0.2f); this->velocity.y *= -0.8f; this->velocity.z *= func_8097DE30(0.9f, 0.2f); - if (this->regs[8] > 0) { - this->regs[8]--; + if (this->rReg8 > 0) { + this->rReg8--; } } break; case 2: - if (BgCheck_SphVsFirstPoly(&globalCtx->colCtx, &this->pos, D_8097EB64[(this->regs[4] >> 2) & 3])) { - this->regs[8] = 0; + if (BgCheck_SphVsFirstPoly(&globalCtx->colCtx, &this->pos, D_8097EB64[(this->rReg4 >> 2) & 3])) { + this->rReg8 = 0; } break; } @@ -332,18 +349,18 @@ void func_8097E7E0(EffectSs* this, GlobalContext* globalCtx) { } void EffectSsKakera_Update(GlobalContext* globalCtx, u32 index, EffectSs* this) { - switch (((this->regs[4] >> 5) & 3) << 5) { + switch (((this->rReg4 >> 5) & 3) << 5) { case 0x20: - this->regs[2] += 0x47B; - this->regs[3] += 0x139; + this->rPitch += 0x47B; + this->rYaw += 0x139; break; case 0x40: - this->regs[2] += 0x1A7C; - this->regs[3] += 0x47B; + this->rPitch += 0x1A7C; + this->rYaw += 0x47B; break; case 0x60: - this->regs[2] += 0x3F27; - this->regs[3] += 0xCA1; + this->rPitch += 0x3F27; + this->rYaw += 0xCA1; break; } func_8097E19C(this); @@ -351,7 +368,7 @@ void EffectSsKakera_Update(GlobalContext* globalCtx, u32 index, EffectSs* this) this->life = 0; } func_8097E7E0(this, globalCtx); - if (this->regs[10] != KAKERA_OBJECT_DEFAULT) { - func_8097E130(this, globalCtx); + if (this->rObjId != KAKERA_OBJECT_DEFAULT) { + EffectSsKakera_CheckForObject(this, globalCtx); } } diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c index c49059262..d26135729 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c @@ -7,6 +7,9 @@ #include "z_eff_ss_stick.h" #include "objects/gameplay_keep/gameplay_keep.h" +#define rObjBankIndex regs[0] +#define rYaw regs[1] + #define PARAMS ((EffectSsStickInitParams*)initParamsx) u32 EffectSsStick_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx); @@ -19,16 +22,16 @@ const EffectSsInit Effect_Ss_Stick_InitVars = { }; u32 EffectSsStick_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx) { - EffectSsStickInitParams* params = PARAMS; + EffectSsStickInitParams* initParams = PARAMS; Vec3f pos; - this->regs[0] = Object_GetIndex(&globalCtx->objectCtx, GAMEPLAY_KEEP); - pos = params->pos; + this->rObjBankIndex = Object_GetIndex(&globalCtx->objectCtx, GAMEPLAY_KEEP); + pos = initParams->pos; this->pos = pos; this->vec = pos; - this->regs[1] = params->yaw; - this->velocity.x = Math_SinS(params->yaw) * 6.0f; - this->velocity.z = Math_CosS(params->yaw) * 6.0f; + this->rYaw = initParams->yaw; + this->velocity.x = Math_SinS(initParams->yaw) * 6.0f; + this->velocity.z = Math_CosS(initParams->yaw) * 6.0f; this->life = 20; this->draw = EffectSsStick_Draw; this->update = EffectSsStick_Update; @@ -42,14 +45,16 @@ void EffectSsStick_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this) { GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; OPEN_DISPS(gfxCtx); + Matrix_InsertTranslation(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(0.01f, 0.0025f, 0.01f, MTXMODE_APPLY); - Matrix_InsertRotation(0, this->regs[1], 0, MTXMODE_APPLY); + Matrix_InsertRotation(0, this->rYaw, 0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); func_8012C28C(gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->regs[0]].segment); + gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->rObjBankIndex].segment); gSPSegment(POLY_OPA_DISP++, 0x0C, D_801C0850); - gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_0032B0); + gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); + CLOSE_DISPS(gfxCtx); } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 2ca5d4dd1..9ff9270d7 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -8201,7 +8201,7 @@ 0x8097DCA0:("EffectSsKakera_Init",), 0x8097DE30:("func_8097DE30",), 0x8097DE6C:("EffectSsKakera_Draw",), - 0x8097E130:("func_8097E130",), + 0x8097E130:("EffectSsKakera_CheckForObject",), 0x8097E19C:("func_8097E19C",), 0x8097E34C:("func_8097E34C",), 0x8097E368:("func_8097E368",),