diff --git a/assets/xml/objects/object_boj.xml b/assets/xml/objects/object_boj.xml index cfb10e97a..20c661bb5 100644 --- a/assets/xml/objects/object_boj.xml +++ b/assets/xml/objects/object_boj.xml @@ -87,8 +87,8 @@ - - - + + + diff --git a/include/z64player.h b/include/z64player.h index 6cf7296b8..2f101b558 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -76,7 +76,7 @@ typedef enum { /* 2 */ PLAYER_ENV_TIMER_UNDERWATER_FLOOR, /* 3 */ PLAYER_ENV_TIMER_SWIMMING, /* 4 */ PLAYER_ENV_TIMER_UNDERWATER_FREE -} PlayerEnvTimer; +} PlayerEnvTimerType; typedef enum PlayerActionParam { /* -1 */ PLAYER_AP_MINUS1 = -1, diff --git a/include/z64save.h b/include/z64save.h index b557f4306..f5b3bb93c 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -2,6 +2,7 @@ #define Z64SAVE_H #include "ultra64.h" +#include "z64item.h" #include "z64math.h" #include "z64item.h" #include "os.h" diff --git a/spec b/spec index 8cfc30556..c894dabef 100644 --- a/spec +++ b/spec @@ -4567,8 +4567,7 @@ beginseg name "ovl_En_Nimotsu" compress include "build/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.o" - include "build/data/ovl_En_Nimotsu/ovl_En_Nimotsu.data.o" - include "build/data/ovl_En_Nimotsu/ovl_En_Nimotsu.reloc.o" + include "build/src/overlays/actors/ovl_En_Nimotsu/ovl_En_Nimotsu_reloc.o" endseg beginseg @@ -5097,8 +5096,7 @@ beginseg name "ovl_Obj_Swprize" compress include "build/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.o" - include "build/data/ovl_Obj_Swprize/ovl_Obj_Swprize.data.o" - include "build/data/ovl_Obj_Swprize/ovl_Obj_Swprize.reloc.o" + include "build/src/overlays/actors/ovl_Obj_Swprize/ovl_Obj_Swprize_reloc.o" endseg beginseg diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 0b9ccf1ae..8d2c3a075 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -192,7 +192,7 @@ s16 sExtraItemBases[] = { s16 sEnvTimerType = PLAYER_ENV_TIMER_NONE; s16 sEnvTimerActive = false; -s16 sPostmanBunnyHoodState = 0; +s16 sPostmanBunnyHoodState = POSTMAN_MINIGAME_BUNNY_HOOD_OFF; OSTime sTimerPausedOsTime = 0; OSTime sBottleTimerPausedOsTime = 0; OSTime D_801BF8F8[] = { diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 8c1617ccf..5d018a995 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -894,12 +894,12 @@ void func_80144A94(SramContext* sramCtx) { gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; } - for (i = 0; i < ARRAY_COUNT(gSaveContext.timerStates); i++) { + for (i = 0; i < TIMER_ID_MAX; i++) { gSaveContext.timerStates[i] = TIMER_STATE_OFF; gSaveContext.timerCurTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerTimeLimits[i] = SECONDS_TO_TIMER(0); gSaveContext.timerStartOsTimes[i] = 0; - gSaveContext.timerStopTimes[i] = 0; + gSaveContext.timerStopTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerPausedOsTimes[i] = 0; } @@ -969,12 +969,12 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; } - for (i = 0; i < ARRAY_COUNT(gSaveContext.timerStates); i++) { + for (i = 0; i < TIMER_ID_MAX; i++) { gSaveContext.timerStates[i] = TIMER_STATE_OFF; gSaveContext.timerCurTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerTimeLimits[i] = SECONDS_TO_TIMER(0); gSaveContext.timerStartOsTimes[i] = 0; - gSaveContext.timerStopTimes[i] = 0; + gSaveContext.timerStopTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerPausedOsTimes[i] = 0; } diff --git a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c index 1066162eb..b90cc04bb 100644 --- a/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c +++ b/src/overlays/actors/ovl_En_Mt_tag/z_en_mt_tag.c @@ -502,6 +502,7 @@ void EnMttag_Init(Actor* thisx, PlayState* play) { void EnMttag_Destroy(Actor* thisx, PlayState* play) { EnMttag* this = THIS; + if (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_6) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; } @@ -509,5 +510,6 @@ void EnMttag_Destroy(Actor* thisx, PlayState* play) { void EnMttag_Update(Actor* thisx, PlayState* play) { EnMttag* this = THIS; + this->actionFunc(this, play); } diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c index 966f3671b..11872a0a1 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c @@ -5,6 +5,7 @@ */ #include "z_en_nimotsu.h" +#include "assets/objects/object_boj/object_boj.h" #define FLAGS (ACTOR_FLAG_10) @@ -15,7 +16,8 @@ void EnNimotsu_Destroy(Actor* thisx, PlayState* play); void EnNimotsu_Update(Actor* thisx, PlayState* play); void EnNimotsu_Draw(Actor* thisx, PlayState* play); -#if 0 +void EnNimotsu_UpdateCollision(EnNimotsu* this, PlayState* play); + const ActorInit En_Nimotsu_InitVars = { ACTOR_EN_NIMOTSU, ACTORCAT_PROP, @@ -28,25 +30,93 @@ const ActorInit En_Nimotsu_InitVars = { (ActorFunc)EnNimotsu_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80BE1FB0 = { - { COLTYPE_NONE, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_NONE, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_2, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK4, + { 0x00000000, 0x00, 0x00 }, + { 0x00000000, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_NONE, + OCELEM_ON, + }, { 10, 30, 0, { 0, 0, 0 } }, }; -#endif +void EnNimotsu_UpdateCollision(EnNimotsu* this, PlayState* play) { + Collider_UpdateCylinder(&this->actor, &this->collider); + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4); +} -extern ColliderCylinderInit D_80BE1FB0; +void EnNimotsu_Init(Actor* thisx, PlayState* play) { + EnNimotsu* this = THIS; -extern UNK_TYPE D_06013380; + Collider_InitCylinder(play, &this->collider); + Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nimotsu/func_80BE1C80.s") + this->timer = 10; + this->actor.gravity = -0.5f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nimotsu/EnNimotsu_Init.s") + Actor_SetScale(&this->actor, 0.01f); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nimotsu/EnNimotsu_Destroy.s") +void EnNimotsu_Destroy(Actor* thisx, PlayState* play) { + EnNimotsu* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nimotsu/EnNimotsu_Update.s") + Collider_DestroyCylinder(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Nimotsu/EnNimotsu_Draw.s") +void EnNimotsu_Update(Actor* thisx, PlayState* play) { + s32 pad; + EnNimotsu* this = THIS; + Vec3f dustPosition; + + Actor_MoveWithGravity(&this->actor); + + if (!(this->dustDone & 1) && (this->actor.bgCheckFlags & 1)) { + if (DECR(this->timer) == 0) { + this->dustDone |= 1; + } + + if ((play->state.frames % 3) == 0) { + dustPosition.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f); + dustPosition.y = this->actor.world.pos.y; + dustPosition.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f); + Actor_SpawnFloorDustRing(play, &this->actor, &dustPosition, 20.0f, 0, 2.0f, 0, 0, 0); + } + } + + EnNimotsu_UpdateCollision(this, play); +} + +void EnNimotsu_Draw(Actor* thisx, PlayState* play) { + s32 pad; + EnNimotsu* this = THIS; + Vec3f position; + Vec3f scale; + + OPEN_DISPS(play->state.gfxCtx); + func_8012C28C(play->state.gfxCtx); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, &gBombShopBagDL); + func_8012C2DC(play->state.gfxCtx); + + position.x = this->actor.world.pos.x + 7.0f; + position.y = this->actor.world.pos.y; + position.z = this->actor.world.pos.z + 2.0f; + + scale.x = 0.2f; + scale.y = 0.2f; + scale.z = 0.2f; + + func_800BC620(&position, &scale, 255, play); + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h index 634697736..e839c9393 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.h @@ -7,7 +7,10 @@ struct EnNimotsu; typedef struct EnNimotsu { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x98]; + /* 0x144 */ UNK_TYPE1 unk_144[0x48]; + /* 0x18C */ ColliderCylinder collider; + /* 0x1D8 */ u16 dustDone; + /* 0x1DA */ s16 timer; } EnNimotsu; // size = 0x1DC extern const ActorInit En_Nimotsu_InitVars; diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index 10cdec079..fbacce266 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -1542,7 +1542,7 @@ void EnSuttari_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* } else { func_8012C28C(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); - gSPDisplayList(POLY_OPA_DISP++, object_boj_DL_013380); + gSPDisplayList(POLY_OPA_DISP++, gBombShopBagDL); CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index 852316b9b..b59a2ba33 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -154,7 +154,7 @@ static s32 sSwampTargetActorListLengths[] = { }; static Vec3f sSwampPlayerPos = { 0.0f, 10.0f, 140.0f }; -static Vec3f sTownFierceDietyPlayerPos = { -20.0f, 20.0f, 198.0f }; +static Vec3f sTownFierceDeityPlayerPos = { -20.0f, 20.0f, 198.0f }; static Vec3f sTownPlayerPos = { -20.0f, 40.0f, 175.0f }; /** @@ -1156,7 +1156,7 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) { this->actionFunc = EnSyatekiMan_Swamp_EndGame; sBonusTimer = 0; } else if (sBonusTimer > 10) { - gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] += 100; + gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] += SECONDS_TO_TIMER(1); play->interfaceCtx.unk_25C += 10; this->score += 10; Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); @@ -1171,7 +1171,7 @@ void EnSyatekiMan_Town_MovePlayerAndSayHighScore(EnSyatekiMan* this, PlayState* Vec3f targetPlayerPos; if (gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY) { - targetPlayerPos = sTownFierceDietyPlayerPos; + targetPlayerPos = sTownFierceDeityPlayerPos; } else { targetPlayerPos = sTownPlayerPos; } @@ -1198,7 +1198,7 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) { if (sGameStartTimer == 30) { if (player->transformation == PLAYER_FORM_FIERCE_DEITY) { - player->actor.world.pos = sTownFierceDietyPlayerPos; + player->actor.world.pos = sTownFierceDeityPlayerPos; } else { player->actor.world.pos = sTownPlayerPos; } diff --git a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c index b287539b7..0ce2f38a1 100644 --- a/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c +++ b/src/overlays/actors/ovl_Obj_Roomtimer/z_obj_roomtimer.c @@ -45,7 +45,7 @@ void ObjRoomtimer_Init(Actor* thisx, PlayState* play) { void ObjRoomtimer_Destroy(Actor* thisx, PlayState* play) { ObjRoomtimer* this = THIS; - if (this->actor.params != 0x1FF && gSaveContext.timerStates[TIMER_ID_MINIGAME_2] >= TIMER_STATE_START) { + if ((this->actor.params != 0x1FF) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] >= TIMER_STATE_START)) { gSaveContext.timerStates[TIMER_ID_MINIGAME_2] = TIMER_STATE_STOP; } } @@ -66,7 +66,7 @@ void func_80973D3C(ObjRoomtimer* this, PlayState* play) { } ActorCutscene_SetIntentToPlay(this->actor.cutscene); this->actionFunc = func_80973DE0; - } else if (this->actor.params != 0x1FF && gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF) { + } else if ((this->actor.params != 0x1FF) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_OFF)) { play_sound(NA_SE_OC_ABYSS); func_80169EFC(&play->state); Actor_MarkForDeath(&this->actor); diff --git a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c index 4472c4fc3..6a50a018f 100644 --- a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c +++ b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.c @@ -14,12 +14,15 @@ void ObjSwprize_Init(Actor* thisx, PlayState* play); void ObjSwprize_Destroy(Actor* thisx, PlayState* play); void ObjSwprize_Update(Actor* thisx, PlayState* play); +void ObjSwprize_DoNothing(ObjSwprize* this, PlayState* play); void func_80C25654(ObjSwprize* this, PlayState* play); +void func_80C25640(ObjSwprize* this); +void func_80C25698(ObjSwprize* this); void func_80C256AC(ObjSwprize* this, PlayState* play); +void func_80C25710(ObjSwprize* this); void func_80C2572C(ObjSwprize* this, PlayState* play); -void func_80C25794(ObjSwprize* this, PlayState* play); +void ObjSwprize_SetupDoNothing(ObjSwprize* this); -#if 0 const ActorInit Obj_Swprize_InitVars = { ACTOR_OBJ_SWPRIZE, ACTORCAT_PROP, @@ -32,30 +35,113 @@ const ActorInit Obj_Swprize_InitVars = { (ActorFunc)NULL, }; -#endif +s16 D_80C257F0[] = { 2, 0x14, 1, 8 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25360.s") +s16 D_80C257F8[] = { -0x888, 0, 0x888 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C253D0.s") +void func_80C25360(ObjSwprize* this, Vec3f* vec) { + Matrix_Push(); + Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_NEW); + Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); + Matrix_MultVecY(1.0f, vec); + Matrix_Pop(); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/ObjSwprize_Init.s") +void func_80C253D0(ObjSwprize* this, PlayState* play) { + Actor* thisx = &this->actor; + s32 i; + Actor* collectible; + Vec3f sp78; + s32 type = OBJ_SWPRIZE_GET_TYPE(thisx); + s32 temp_s0 = D_80C257F0[type]; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/ObjSwprize_Destroy.s") + func_80C25360(this, &sp78); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25640.s") + if (type == 2) { + for (i = 0; i < 3; i++) { + collectible = Item_DropCollectible(play, &thisx->world.pos, temp_s0); + if (collectible != NULL) { + if (sp78.y < 0.98f) { + collectible->velocity.y = (sp78.y + 1.0f) * 4.0f; + collectible->speedXZ = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f; + collectible->world.rot.y = Math_FAtan2F(sp78.z, sp78.x) + D_80C257F8[i]; + } else { + collectible->world.rot.y = i * (0x10000 / 3); + } + } + } + } else { + collectible = Item_DropCollectible(play, &thisx->world.pos, temp_s0); + if ((collectible != NULL) && (sp78.y < 0.98f)) { + collectible->velocity.y = (sp78.y + 1.0f) * 4.0f; + collectible->speedXZ = (2.0f * (1.0f - fabsf(sp78.y))) + 2.0f; + collectible->world.rot.y = Math_FAtan2F(sp78.z, sp78.x); + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25654.s") +void ObjSwprize_Init(Actor* thisx, PlayState* play) { + ObjSwprize* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25698.s") + if (Flags_GetSwitch(play, OBJ_SWPRIZE_GET_SWITCH_FLAG(&this->actor))) { + ObjSwprize_SetupDoNothing(this); + } else { + func_80C25640(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C256AC.s") +void ObjSwprize_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25710.s") +void func_80C25640(ObjSwprize* this) { + this->actionFunc = func_80C25654; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C2572C.s") +void func_80C25654(ObjSwprize* this, PlayState* play) { + if (Flags_GetSwitch(play, OBJ_SWPRIZE_GET_SWITCH_FLAG(&this->actor))) { + func_80C25698(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25780.s") +void func_80C25698(ObjSwprize* this) { + this->actionFunc = func_80C256AC; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/func_80C25794.s") +void func_80C256AC(ObjSwprize* this, PlayState* play) { + if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) { + ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor); + func_80C253D0(this, play); + func_80C25710(this); + } else { + ActorCutscene_SetIntentToPlay(this->actor.cutscene); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Swprize/ObjSwprize_Update.s") +void func_80C25710(ObjSwprize* this) { + this->timer = 40; + this->actionFunc = func_80C2572C; +} + +void func_80C2572C(ObjSwprize* this, PlayState* play) { + if (this->timer > 0) { + this->timer--; + if (this->timer == 0) { + ActorCutscene_Stop(this->actor.cutscene); + ObjSwprize_SetupDoNothing(this); + } + } +} + +void ObjSwprize_SetupDoNothing(ObjSwprize* this) { + this->actionFunc = ObjSwprize_DoNothing; +} + +void ObjSwprize_DoNothing(ObjSwprize* this, PlayState* play) { +} + +void ObjSwprize_Update(Actor* thisx, PlayState* play) { + ObjSwprize* this = THIS; + + this->actionFunc(this, play); +} diff --git a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h index 29654f992..5b7cd2e09 100644 --- a/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h +++ b/src/overlays/actors/ovl_Obj_Swprize/z_obj_swprize.h @@ -3,6 +3,9 @@ #include "global.h" +#define OBJ_SWPRIZE_GET_SWITCH_FLAG(thisx) ((thisx)->params & 0x7F) +#define OBJ_SWPRIZE_GET_TYPE(thisx) (((thisx)->params >> 8) & 3) + struct ObjSwprize; typedef void (*ObjSwprizeActionFunc)(struct ObjSwprize*, PlayState*); @@ -10,7 +13,7 @@ typedef void (*ObjSwprizeActionFunc)(struct ObjSwprize*, PlayState*); typedef struct ObjSwprize { /* 0x000 */ Actor actor; /* 0x144 */ ObjSwprizeActionFunc actionFunc; - /* 0x148 */ char unk_148[0x4]; + /* 0x148 */ s16 timer; } ObjSwprize; // size = 0x14C extern const ActorInit Obj_Swprize_InitVars; diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 93b873de5..5d418c0fc 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -507,12 +507,12 @@ void MapSelect_UpdateMenu(MapSelectState* this) { if (this->verticalInputAccumulator == 0) { if (CHECK_BTN_ALL(controller1->press.button, BTN_A) || CHECK_BTN_ALL(controller1->press.button, BTN_START)) { - for (i = 0; i < ARRAY_COUNT(gSaveContext.timerPausedOsTimes); i++) { + for (i = 0; i < TIMER_ID_MAX; i++) { gSaveContext.timerStates[i] = TIMER_STATE_OFF; - gSaveContext.timerCurTimes[i] = 0; + gSaveContext.timerCurTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerTimeLimits[i] = SECONDS_TO_TIMER(0); gSaveContext.timerStartOsTimes[i] = 0; - gSaveContext.timerStopTimes[i] = 0; + gSaveContext.timerStopTimes[i] = SECONDS_TO_TIMER(0); gSaveContext.timerPausedOsTimes[i] = 0; } gSaveContext.minigameState = 0; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index f34d83fc9..9a930c6a8 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -16061,7 +16061,7 @@ 0x80BE16B4:("EnTab_PostLimbDraw",), 0x80BE1704:("EnTab_TransformLimbDraw",), 0x80BE1810:("EnTab_Draw",), - 0x80BE1C80:("func_80BE1C80",), + 0x80BE1C80:("EnNimotsu_UpdateCollision",), 0x80BE1CEC:("EnNimotsu_Init",), 0x80BE1D5C:("EnNimotsu_Destroy",), 0x80BE1D88:("EnNimotsu_Update",), @@ -17125,8 +17125,8 @@ 0x80C256AC:("func_80C256AC",), 0x80C25710:("func_80C25710",), 0x80C2572C:("func_80C2572C",), - 0x80C25780:("func_80C25780",), - 0x80C25794:("func_80C25794",), + 0x80C25780:("ObjSwprize_SetupDoNothing",), + 0x80C25794:("ObjSwprize_DoNothing",), 0x80C257A4:("ObjSwprize_Update",), 0x80C258A0:("func_80C258A0",), 0x80C2590C:("func_80C2590C",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 5b14feed5..958b202c9 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -9920,7 +9920,7 @@ 0x809C9464:("sSwampTargetActorLists","UNK_PTR","",0x4), 0x809C946C:("sSwampTargetActorListLengths","UNK_TYPE1","",0x1), 0x809C9474:("sSwampPlayerPos","UNK_TYPE4","",0x4), - 0x809C9480:("sTownFierceDietyPlayerPos","UNK_TYPE4","",0x4), + 0x809C9480:("sTownFierceDeityPlayerPos","UNK_TYPE4","",0x4), 0x809C948C:("sTownPlayerPos","UNK_TYPE4","",0x4), 0x809C9498:("sGameStartTimer","s16","",0x2), 0x809C949C:("sHasSpawnedGuaysForThisWave","UNK_TYPE2","",0x2), diff --git a/tools/namefixer.py b/tools/namefixer.py index 4a3d87608..3d6d08783 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -483,6 +483,9 @@ wordReplace = { "func_80169E6C": "Play_SetupRespawnPoint", "func_8016A0AC": "Play_IsUnderwater", "func_801690CC": "Play_InCsMode", + "func_8010E9F0": "Interface_StartTimer", + "func_8010EA9C": "Interface_StartPostmanTimer", + "func_80121F94": "Interface_Destroy", "Interface_ChangeAlpha": "Interface_SetHudVisibility", "func_80112B40": "Interface_LoadItemIconImpl", "func_80112BE4": "Interface_LoadItemIcon", @@ -702,6 +705,7 @@ wordReplace = { "player->unk_394": "player->csMode", "player->swordQuads": "player->meleeWeaponQuads", "player->blureEffectIndex": "player->meleeWeaponEffectIndex", + "player->unk_AD8": "player->underwaterTimer", "player->swordAnimation": "player->meleeWeaponAnimation", "player->swordState": "player->meleeWeaponState", "player->swordInfo": "player->meleeWeaponInfo", @@ -731,6 +735,15 @@ wordReplace = { "play->actorCtx.unk4": "play->actorCtx.lensMaskSize", "play->nextEntranceIndex": "play->nextEntrance", + "gSaveContext.unk_3DC8": "gSaveContext.timerOsTime", + "gSaveContext.unk_3DD0": "gSaveContext.timerStates", + "gSaveContext.unk_3DD7": "gSaveContext.timerDirections", + "gSaveContext.unk_3DE0": "gSaveContext.timerCurTimes", + "gSaveContext.unk_3E18": "gSaveContext.timerTimeLimits", + "gSaveContext.unk_3E50": "gSaveContext.timerStartOsTimes", + "gSaveContext.unk_3E88": "gSaveContext.timerStopTimes", + "gSaveContext.unk_3EC0": "gSaveContext.timerPausedOsTimes", + "play->sceneLoadFlag": "play->transitionTrigger", "play->unk_18B4A": "play->transitionMode", "play->unk_1887F": "play->transitionType", diff --git a/undefined_syms.txt b/undefined_syms.txt index 658dd5f05..aae06790f 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1223,10 +1223,6 @@ D_06008C40 = 0x06008C40; D_060001E4 = 0x060001E4; D_06001EE8 = 0x06001EE8; -// ovl_En_Nimotsu - -D_06013380 = 0x06013380; - // ovl_En_Nwc D_060000E8 = 0x060000E8;