diff options
| author | Sirius902 <10891979+Sirius902@users.noreply.github.com> | 2020-08-27 08:48:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-27 11:48:38 -0400 |
| commit | dfaa4dc0cb2753475789fdc7e0ce178ed18bfdaf (patch) | |
| tree | 1e5235ef15f496124962e9c14dd3687b157d2215 /src | |
| parent | 01122ed3e8c6bf87f78879a3740977643c1a8c97 (diff) | |
Decompiled ovl_Bg_Haka (#346)
* Progress
* match func_8087B7E8
* combine into else if
* match func_8087B938
* reorder condition to be more readable
* SFX macros
* clang fmt
* func_8087BAAC and func_8087BAE4
* match BgHaka_Draw
* attempt to remove dependency on asm data
* match file and remove asm
* reorder comparison
* clang format
* use bitwise not
* merge upstream
* fix ZAP2
* Update src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* Update src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* Update src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* implement fig's suggestions
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c | 141 |
1 files changed, 130 insertions, 11 deletions
diff --git a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c index 5a64ef29e..5584a75e1 100644 --- a/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c +++ b/src/overlays/actors/ovl_Bg_Haka/z_bg_haka.c @@ -20,7 +20,7 @@ void func_8087B7E8(BgHaka* this, GlobalContext* globalCtx); void func_8087B938(BgHaka* this, GlobalContext* globalCtx); void func_8087BAAC(BgHaka* this, GlobalContext* globalCtx); void func_8087BAE4(BgHaka* this, GlobalContext* globalCtx); -/* + const ActorInit Bg_Haka_InitVars = { ACTOR_BG_HAKA, ACTORTYPE_BG, @@ -32,21 +32,140 @@ const ActorInit Bg_Haka_InitVars = { (ActorFunc)BgHaka_Update, (ActorFunc)BgHaka_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/BgHaka_Init.s") -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/BgHaka_Destroy.s") +static InitChainEntry sInitChain[] = { + ICHAIN_F32(minVelocityY, 0, ICHAIN_CONTINUE), + ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), +}; + +extern UNK_TYPE D_06000428; +extern Gfx D_060001B0[]; +extern Gfx D_060002A8[]; + +void BgHaka_Init(Actor* thisx, GlobalContext* globalCtx) { + BgHaka* this = THIS; + s32 pad; + s32 sp24 = 0; + + Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + DynaPolyInfo_SetActorMove(&this->dyna, 0); + DynaPolyInfo_Alloc(&D_06000428, &sp24); + this->dyna.dynaPolyId = DynaPolyInfo_RegisterActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, sp24); + this->actionFunc = func_8087B7E8; +} + +void BgHaka_Destroy(Actor* thisx, GlobalContext* globalCtx) { + BgHaka* this = THIS; + + DynaPolyInfo_Free(globalCtx, &globalCtx->colCtx.dyna, this->dyna.dynaPolyId); +} + +void func_8087B758(BgHaka* this, Player* player) { + Vec3f sp1C; + + func_8002DBD0(&this->dyna.actor, &sp1C, &player->actor.posRot.pos); + if (fabsf(sp1C.x) < 34.6f && sp1C.z > -112.8f && sp1C.z < -36.0f) { + player->stateFlags2 |= 0x200; + } +} + +void func_8087B7E8(BgHaka* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + + if (this->dyna.unk_150 != 0.0f) { + if (globalCtx->sceneNum == SCENE_SPOT02 && LINK_IS_CHILD && !gSaveContext.nightFlag) { + this->dyna.unk_150 = 0.0f; + player->stateFlags2 &= ~0x10; + if (!Gameplay_InCsMode(globalCtx)) { + func_8010B680(globalCtx, 0x5073, NULL); + this->dyna.actor.params = 100; + this->actionFunc = func_8087BAE4; + } + } else if (0.0f < this->dyna.unk_150 || + (globalCtx->sceneNum == SCENE_SPOT06 && LINK_IS_CHILD && !Flags_GetSwitch(globalCtx, 0x23))) { + this->dyna.unk_150 = 0.0f; + player->stateFlags2 &= ~0x10; + } else { + this->dyna.actor.posRot.rot.y = this->dyna.actor.shape.rot.y + 0x8000; + this->actionFunc = func_8087B938; + } + } + func_8087B758(this, player); +} + +void func_8087B938(BgHaka* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + s32 sp38; + + this->dyna.actor.speedXZ += 0.05f; + this->dyna.actor.speedXZ = CLAMP_MAX(this->dyna.actor.speedXZ, 1.5f); + sp38 = Math_ApproxF(&this->dyna.actor.minVelocityY, 60.0f, this->dyna.actor.speedXZ); + this->dyna.actor.posRot.pos.x = + Math_Sins(this->dyna.actor.posRot.rot.y) * this->dyna.actor.minVelocityY + this->dyna.actor.initPosRot.pos.x; + this->dyna.actor.posRot.pos.z = + Math_Coss(this->dyna.actor.posRot.rot.y) * this->dyna.actor.minVelocityY + this->dyna.actor.initPosRot.pos.z; + if (sp38 != 0) { + this->dyna.unk_150 = 0.0f; + player->stateFlags2 &= ~0x10; + if (this->dyna.actor.params == 1) { + func_80078884(NA_SE_SY_CORRECT_CHIME); + } else if (gSaveContext.nightFlag && globalCtx->sceneNum == SCENE_SPOT02) { + Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_POH, this->dyna.actor.initPosRot.pos.x, + this->dyna.actor.initPosRot.pos.y, this->dyna.actor.initPosRot.pos.z, 0, + this->dyna.actor.shape.rot.y, 0, 1); + } + this->actionFunc = func_8087BAAC; + } + func_8002F974(&this->dyna.actor, NA_SE_EV_ROCK_SLIDE - SFX_FLAG); +} + +void func_8087BAAC(BgHaka* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + + if (this->dyna.unk_150 != 0.0f) { + this->dyna.unk_150 = 0.0f; + player->stateFlags2 &= ~0x10; + } +} + +void func_8087BAE4(BgHaka* this, GlobalContext* globalCtx) { + Player* player = PLAYER; + s32 pad; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/func_8087B758.s") + if (this->dyna.actor.params != 0) { + this->dyna.actor.params -= 1; + } + if (this->dyna.unk_150 != 0.0f) { + this->dyna.unk_150 = 0.0f; + player->stateFlags2 &= ~0x10; + } + if (this->dyna.actor.params == 0) { + this->actionFunc = func_8087B7E8; + } + func_8087B758(this, player); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/func_8087B7E8.s") +void BgHaka_Update(Actor* thisx, GlobalContext* globalCtx) { + BgHaka* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/func_8087B938.s") + this->actionFunc(this, globalCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/func_8087BAAC.s") +void BgHaka_Draw(Actor* thisx, GlobalContext* globalCtx) { + GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; + Gfx* dispRefs[4]; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/func_8087BAE4.s") + Graph_OpenDisps(dispRefs, globalCtx->state.gfxCtx, "../z_bg_haka.c", 401); + func_80093D18(globalCtx->state.gfxCtx); + func_80093D84(globalCtx->state.gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/BgHaka_Update.s") + gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_haka.c", 406), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfxCtx->polyOpa.p++, D_060001B0); + Matrix_Translate(0.0f, 0.0f, thisx->minVelocityY * 10.0f, MTXMODE_APPLY); + gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_bg_haka.c", 416), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfxCtx->polyXlu.p++, D_060002A8); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Bg_Haka/BgHaka_Draw.s") + Graph_CloseDisps(dispRefs, globalCtx->state.gfxCtx, "../z_bg_haka.c", 421); +} |
