mirror of
https://github.com/zeldaret/mm.git
synced 2026-08-18 05:08:48 -04:00
ovl_En_Test4 with 1 non-matching (#319)
* Decompile update and stuff * Decompile some more * func_80A41FA4 non_matching * init is a disaster * Import bss * match func_80A41D70 * Improve func_80A42AB8 a bit * equivalent EnTest4_Init * Import data * CLOCK_TIME * Run formatter * func_80A42AB8 may be equivalent now, not completely sure * match func_80A42AB8 * Some minor renames * Name some struct members * Format * format in bigpo * fix merge issue * Apply suggestions from code review Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Description: Day transition effects * Un-rename unk_144 * Update include/macros.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * sIsLoaded * Update src/overlays/actors/ovl_En_Test4/z_en_test4.c Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> * review * format * daytemp Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
This commit is contained in:
@@ -7,7 +7,9 @@ struct EnHorse;
|
||||
|
||||
typedef struct EnHorse {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x450];
|
||||
/* 0x144 */ char unk_144[0x00C];
|
||||
/* 0x150 */ s32 unk_150;
|
||||
/* 0x154 */ char unk_154[0x440];
|
||||
} EnHorse; // size = 0x594
|
||||
|
||||
extern const ActorInit En_Horse_InitVars;
|
||||
|
||||
@@ -1,4 +1,12 @@
|
||||
/*
|
||||
* File: z_en_test4.c
|
||||
* Overlay: ovl_En_Test4
|
||||
* Description: Day transition effects
|
||||
*/
|
||||
|
||||
#include "z_en_test4.h"
|
||||
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
|
||||
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
|
||||
|
||||
#define FLAGS 0x00100030
|
||||
|
||||
@@ -11,7 +19,6 @@ void EnTest4_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void func_80A42AB8(EnTest4* this, GlobalContext* globalCtx);
|
||||
void func_80A42F20(EnTest4* this, GlobalContext* globalCtx);
|
||||
|
||||
#if 0
|
||||
const ActorInit En_Test4_InitVars = {
|
||||
ACTOR_EN_TEST4,
|
||||
ACTORCAT_SWITCH,
|
||||
@@ -24,28 +31,558 @@ const ActorInit En_Test4_InitVars = {
|
||||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
static s32 sIsLoaded = false;
|
||||
// "Night of ..."
|
||||
static s16 sNightMessages1[] = { 0x1BB4, 0x1BB5, 0x1BB6 };
|
||||
// "Dawn of ..." (Note: first two message are the same)
|
||||
static s16 sDayMessages1[] = { 0x1BB2, 0x1BB2, 0x1BB3 };
|
||||
// "Night of ..."
|
||||
static s16 sNightMessages2[] = { 0x1BB4, 0x1BB5, 0x1BB6 };
|
||||
// "Dawn of ..." (Note: first two message are the same)
|
||||
static s16 sDayMessages2[] = { 0x1BB2, 0x1BB2, 0x1BB3 };
|
||||
static u16 D_80A43364[] = { CLOCK_TIME(6, 0), CLOCK_TIME(18, 0) };
|
||||
|
||||
static s16 sCutscenes[2];
|
||||
static s16 sCurrentCs;
|
||||
|
||||
void func_80A41D70(EnTest4* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_144 != 0) {
|
||||
func_80151A68(globalCtx, sNightMessages1[CURRENT_DAY - 1]);
|
||||
} else if ((sCutscenes[this->unk_144] < 0) || ((globalCtx->actorCtx.unk5 & 2) != 0)) {
|
||||
if (globalCtx->actorCtx.unk5 & 2) {
|
||||
Sram_IncrementDay();
|
||||
gSaveContext.time = CLOCK_TIME(6, 0);
|
||||
func_80151A68(globalCtx, sDayMessages1[CURRENT_DAY - 1]);
|
||||
} else {
|
||||
this->unk_144 = 0;
|
||||
this->unk_146 = gSaveContext.time += CLOCK_TIME_MINUTE;
|
||||
}
|
||||
|
||||
func_8010EE74(globalCtx, CURRENT_DAY);
|
||||
D_801BDBC8 = 0xFE;
|
||||
func_800FB758(globalCtx);
|
||||
func_800FEAF4(&globalCtx->envCtx);
|
||||
this->actionFunc = func_80A42AB8;
|
||||
}
|
||||
|
||||
if (gSaveContext.cutsceneTrigger == 0) {
|
||||
if ((sCutscenes[this->unk_144] >= 0) && !(globalCtx->actorCtx.unk5 & 2)) {
|
||||
this->actionFunc = func_80A42F20;
|
||||
sCurrentCs = sCutscenes[this->unk_144];
|
||||
this->transitionCsTimer = 0;
|
||||
gSaveContext.eventInf[1] |= 0x80;
|
||||
} else if (this->unk_144 == 0) {
|
||||
play_sound(NA_SE_EV_CHICKEN_CRY_M);
|
||||
} else {
|
||||
func_8019F128(NA_SE_EV_DOG_CRY_EVENING);
|
||||
}
|
||||
} else {
|
||||
this->actionFunc = func_80A42AB8;
|
||||
if (this->unk_144 == 0) {
|
||||
this->unk_144 = 1;
|
||||
} else {
|
||||
this->unk_144 = 0;
|
||||
}
|
||||
|
||||
this->unk_146 = gSaveContext.time += CLOCK_TIME_MINUTE;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A41FA4(EnTest4* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_144 != 0) {
|
||||
func_80151A68(globalCtx, sNightMessages2[CURRENT_DAY - 1]);
|
||||
} else if ((sCutscenes[this->unk_144] < 0) || ((globalCtx->actorCtx.unk5 & 2) != 0)) {
|
||||
Sram_IncrementDay();
|
||||
gSaveContext.time = CLOCK_TIME(6, 0);
|
||||
func_8010EE74(globalCtx, CURRENT_DAY);
|
||||
func_80151A68(globalCtx, sDayMessages2[CURRENT_DAY - 1]);
|
||||
D_801BDBC8 = 0xFE;
|
||||
func_800FB758(globalCtx);
|
||||
func_800FEAF4(&globalCtx->envCtx);
|
||||
this->actionFunc = func_80A42AB8;
|
||||
}
|
||||
|
||||
if (gSaveContext.cutsceneTrigger == 0) {
|
||||
if ((sCutscenes[this->unk_144] >= 0) && ((globalCtx->actorCtx.unk5 & 2) == 0)) {
|
||||
this->actionFunc = func_80A42F20;
|
||||
sCurrentCs = sCutscenes[this->unk_144];
|
||||
this->transitionCsTimer = 0;
|
||||
gSaveContext.eventInf[1] |= 0x80;
|
||||
} else if (this->unk_144 == 0) {
|
||||
play_sound(NA_SE_EV_CHICKEN_CRY_M);
|
||||
} else {
|
||||
func_8019F128(NA_SE_EV_DOG_CRY_EVENING);
|
||||
}
|
||||
} else {
|
||||
this->actionFunc = func_80A42AB8;
|
||||
if (this->unk_144 == 0) {
|
||||
this->unk_144 = 1;
|
||||
} else {
|
||||
this->unk_144 = 0;
|
||||
}
|
||||
|
||||
this->unk_146 = gSaveContext.time += CLOCK_TIME_MINUTE;
|
||||
}
|
||||
}
|
||||
|
||||
// Bells on last day
|
||||
void func_80A42198(EnTest4* this) {
|
||||
if ((gSaveContext.time >= CLOCK_TIME(6, 0)) && (gSaveContext.time <= CLOCK_TIME(18, 0))) {
|
||||
if (gSaveContext.time < CLOCK_TIME(17, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 36)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 36);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 42)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 42);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 48)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 48);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 54)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 54);
|
||||
} else {
|
||||
this->nextBellTime = CLOCK_TIME(0, 0);
|
||||
}
|
||||
} else if (gSaveContext.time > CLOCK_TIME(6, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(0, 0);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(0, 10)) {
|
||||
this->nextBellTime = CLOCK_TIME(0, 10);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(0, 20)) {
|
||||
this->nextBellTime = CLOCK_TIME(0, 20);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(0, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(0, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(0, 40)) {
|
||||
this->nextBellTime = CLOCK_TIME(0, 40);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(0, 50)) {
|
||||
this->nextBellTime = CLOCK_TIME(0, 50);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(1, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(1, 0);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(1, 10)) {
|
||||
this->nextBellTime = CLOCK_TIME(1, 10);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(1, 20)) {
|
||||
this->nextBellTime = CLOCK_TIME(1, 20);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(1, 30) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(1, 30) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(1, 40) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(1, 40) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(1, 50) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(1, 50) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(2, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(2, 0);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(2, 10)) {
|
||||
this->nextBellTime = CLOCK_TIME(2, 10);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(2, 20)) {
|
||||
this->nextBellTime = CLOCK_TIME(2, 20);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(2, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(2, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(2, 40)) {
|
||||
this->nextBellTime = CLOCK_TIME(2, 40);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(2, 50)) {
|
||||
this->nextBellTime = CLOCK_TIME(2, 50);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(3, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(3, 0);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(3, 10)) {
|
||||
this->nextBellTime = CLOCK_TIME(3, 10);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(3, 20)) {
|
||||
this->nextBellTime = CLOCK_TIME(3, 20);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(3, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(3, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(3, 40)) {
|
||||
this->nextBellTime = CLOCK_TIME(3, 40);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(3, 50)) {
|
||||
this->nextBellTime = CLOCK_TIME(3, 50);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(4, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(4, 0);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(4, 10)) {
|
||||
this->nextBellTime = CLOCK_TIME(4, 10);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(4, 20)) {
|
||||
this->nextBellTime = CLOCK_TIME(4, 20);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(4, 30) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(4, 30) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(4, 40) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(4, 40) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(4, 50) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(4, 50) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 0);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 5)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 5);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 10)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 10);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 15) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 15) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 20)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 20);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 25) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 25) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 33) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 33) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 36)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 36);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 39) - 1) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 39) - 1;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 42)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 42);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 45)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 45);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 48)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 48);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 51)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 51);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 54)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 54);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 57)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 57);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(6, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(6, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Bells on first and second day
|
||||
void func_80A425E4(EnTest4* this, GlobalContext* globalCtx) {
|
||||
gSaveContext.unk_3F64 = 1000.0f;
|
||||
|
||||
if ((gSaveContext.time >= CLOCK_TIME(6, 0)) && (gSaveContext.time < CLOCK_TIME(18, 0))) {
|
||||
if (gSaveContext.time < CLOCK_TIME(17, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 36)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 36);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 42)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 42);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 48)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 48);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(17, 54)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 54);
|
||||
} else {
|
||||
this->nextBellTime = CLOCK_TIME(5, 30);
|
||||
}
|
||||
} else {
|
||||
if (gSaveContext.time < CLOCK_TIME(5, 30)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 30);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 36)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 36);
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 42)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 42);
|
||||
gSaveContext.unk_3F64 -= 50.0f;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 48)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 48);
|
||||
gSaveContext.unk_3F64 -= 100.0f;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(5, 54)) {
|
||||
this->nextBellTime = CLOCK_TIME(5, 54);
|
||||
gSaveContext.unk_3F64 -= 150.0f;
|
||||
} else if (gSaveContext.time < CLOCK_TIME(6, 0)) {
|
||||
this->nextBellTime = CLOCK_TIME(17, 30);
|
||||
gSaveContext.unk_3F64 -= 200.0f;
|
||||
} else {
|
||||
this->nextBellTime = CLOCK_TIME(17, 30);
|
||||
}
|
||||
|
||||
if ((sCutscenes[this->unk_144] < 0) || ((globalCtx->actorCtx.unk5 & 2) != 0) || (CURRENT_DAY == 3) ||
|
||||
(gSaveContext.time >= CLOCK_TIME(17, 0))) {
|
||||
gSaveContext.unk_3F64 = 1000.0f;
|
||||
}
|
||||
if (gSaveContext.unk_3F64 != 1000.0f) {
|
||||
gSaveContext.unk_3F60 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// 1 instruction in the wrong place
|
||||
void EnTest4_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s32 dayTemp;
|
||||
EnTest4* this = THIS;
|
||||
Player* player = PLAYER;
|
||||
s8 temp_v0 = this->actor.cutscene;
|
||||
|
||||
sCutscenes[0] = temp_v0;
|
||||
if (temp_v0 >= 0) {
|
||||
ActorCutscene* temp_v0_2 = ActorCutscene_GetCutscene(sCutscenes[0]);
|
||||
|
||||
gSaveContext.eventInf[5] |= 0x4;
|
||||
sCutscenes[1] = temp_v0_2->additionalCutscene;
|
||||
} else {
|
||||
gSaveContext.eventInf[5] &= (u8)~0x4;
|
||||
sCutscenes[1] = sCutscenes[0];
|
||||
}
|
||||
|
||||
if (sIsLoaded || (gSaveContext.eventInf[2] & 0x80)) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
} else {
|
||||
sIsLoaded = true;
|
||||
this->actor.room = -1;
|
||||
gSaveContext.unk_3F60 = 0;
|
||||
gSaveContext.unk_3F64 = 1000.0f;
|
||||
if (CURRENT_DAY == 0) {
|
||||
if (gSaveContext.time < CLOCK_TIME(6, 1)) {
|
||||
gSaveContext.time = CLOCK_TIME(6, 0);
|
||||
gSaveContext.gameMode = 0;
|
||||
do {
|
||||
GameState* state = &globalCtx->state;
|
||||
state->running = false;
|
||||
} while (0);
|
||||
SET_NEXT_GAMESTATE(&globalCtx->state, Daytelop_Init, DaytelopContext);
|
||||
this->unk_144 = 1;
|
||||
gSaveContext.time = CLOCK_TIME(6, 0);
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
} else {
|
||||
gSaveContext.day = 1;
|
||||
dayTemp = gSaveContext.day;
|
||||
gSaveContext.daysElapsed = dayTemp;
|
||||
this->unk_144 = 1;
|
||||
this->unk_146 = gSaveContext.time;
|
||||
this->actionFunc = func_80A42AB8;
|
||||
}
|
||||
} else if (gSaveContext.time == CLOCK_TIME(6, 0)) {
|
||||
this->unk_144 = 0;
|
||||
func_80A41D70(this, globalCtx);
|
||||
if ((gSaveContext.cutsceneTrigger == 0) && (sCutscenes[this->unk_144] >= 0) &&
|
||||
!(globalCtx->actorCtx.unk5 & 2)) {
|
||||
player->stateFlags1 |= 0x200;
|
||||
}
|
||||
} else {
|
||||
if ((gSaveContext.time > CLOCK_TIME(18, 0)) || (gSaveContext.time < CLOCK_TIME(6, 0))) {
|
||||
this->unk_144 = 0;
|
||||
} else {
|
||||
this->unk_144 = 1;
|
||||
}
|
||||
this->unk_146 = gSaveContext.time;
|
||||
this->actionFunc = func_80A42AB8;
|
||||
}
|
||||
}
|
||||
|
||||
if (CURRENT_DAY == 3) {
|
||||
func_80A42198(this);
|
||||
} else {
|
||||
func_80A425E4(this, globalCtx);
|
||||
}
|
||||
|
||||
this->lastBellTime = gSaveContext.time;
|
||||
if ((sCutscenes[this->unk_144] < 0) || (globalCtx->actorCtx.unk5 & 2)) {
|
||||
gSaveContext.unk_3F60 = 0;
|
||||
gSaveContext.unk_3F64 = 1000.0f;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/EnTest4_Init.s")
|
||||
#endif
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A41D70.s")
|
||||
void EnTest4_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A41FA4.s")
|
||||
void func_80A42AB8(EnTest4* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A42198.s")
|
||||
if ((globalCtx->unk_18B4A == 0) && (func_801690CC(globalCtx) == 0) && (globalCtx->numSetupActors <= 0) &&
|
||||
(globalCtx->roomCtx.unk31 == 0) && (func_8016A168() == 0)) {
|
||||
s16 temp_a2;
|
||||
u16 temp_a0 = D_80A43364[this->unk_144];
|
||||
s16 temp_a3;
|
||||
s16 bellDiff;
|
||||
s16 new_var;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A425E4.s")
|
||||
temp_a3 = gSaveContext.time - temp_a0;
|
||||
temp_a2 = this->unk_146 - temp_a0;
|
||||
bellDiff = this->lastBellTime - this->nextBellTime;
|
||||
new_var = gSaveContext.time - this->nextBellTime;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/EnTest4_Init.s")
|
||||
if ((temp_a3 * temp_a2) <= 0) {
|
||||
gSaveContext.unk_3CA7 = 1;
|
||||
if (globalCtx->actorCtx.unk5 & 0x4) {
|
||||
globalCtx->actorCtx.unk5 &= ~0x4;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/EnTest4_Destroy.s")
|
||||
if (temp_a0 != CLOCK_TIME(6, 0)) {
|
||||
func_80A41FA4(this, globalCtx);
|
||||
} else if (temp_a0 == CLOCK_TIME(6, 0)) {
|
||||
if (CURRENT_DAY == 3) {
|
||||
func_8011C808(globalCtx);
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
gSaveContext.eventInf[1] |= 0x80;
|
||||
} else if (((sCutscenes[this->unk_144] < 0) || (globalCtx->actorCtx.unk5 & 2)) && CURRENT_DAY != 3) {
|
||||
func_80A41FA4(this, globalCtx);
|
||||
} else {
|
||||
gSaveContext.unk_3F64 = 0.0f;
|
||||
func_80169DCC(globalCtx, 0, Entrance_CreateIndexFromSpawn(0), player->unk_3CE, 0xBFF,
|
||||
&player->unk_3C0, player->unk_3CC);
|
||||
func_80169EFC(globalCtx);
|
||||
if (player->stateFlags1 & 0x800000) {
|
||||
EnHorse* rideActor = (EnHorse*)player->rideActor;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A42AB8.s")
|
||||
if ((rideActor->unk_150 == 0) || (rideActor->unk_150 == 2)) {
|
||||
if (CURRENT_DAY < 3) {
|
||||
D_801BDA9C = 1;
|
||||
} else {
|
||||
D_801BDA9C = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A42F20.s")
|
||||
gSaveContext.respawnFlag = -4;
|
||||
gSaveContext.eventInf[2] |= 0x80;
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A430C8.s")
|
||||
if ((sCutscenes[this->unk_144] >= 0) && ((globalCtx->actorCtx.unk5 & 2) == 0)) {
|
||||
player->stateFlags1 |= 0x200;
|
||||
this->unk_146 = gSaveContext.time;
|
||||
} else {
|
||||
if (this->unk_144 == 0) {
|
||||
this->unk_144 = 1;
|
||||
} else {
|
||||
this->unk_144 = 0;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A431C8.s")
|
||||
this->unk_146 = gSaveContext.time += CLOCK_TIME_MINUTE;
|
||||
}
|
||||
} else if ((new_var * bellDiff) <= 0) {
|
||||
func_801A0124(&this->actor.projectedPos, (this->actor.params >> 5) & 0xF);
|
||||
this->lastBellTime = gSaveContext.time;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/func_80A4323C.s")
|
||||
if (CURRENT_DAY == 3) {
|
||||
if ((this->nextBellTime == CLOCK_TIME(0, 0)) &&
|
||||
((gSaveContext.inventory.items[ITEM_OCARINA] == ITEM_NONE) ||
|
||||
(globalCtx->sceneNum == SCENE_CLOCKTOWER))) {
|
||||
s32 phi_v0;
|
||||
u32 entranceIndex = gSaveContext.entranceIndex;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Test4/EnTest4_Update.s")
|
||||
if ((globalCtx->actorCtx.unk5 & 2)) {
|
||||
phi_v0 = 0xCFF;
|
||||
} else {
|
||||
phi_v0 = 0xBFF;
|
||||
}
|
||||
func_80169DCC(globalCtx, 1, entranceIndex, player->unk_3CE, phi_v0, &player->unk_3C0,
|
||||
player->unk_3CC);
|
||||
|
||||
if ((globalCtx->sceneNum == SCENE_TENMON_DAI) || (globalCtx->sceneNum == SCENE_00KEIKOKU)) {
|
||||
globalCtx->nextEntranceIndex = 0x5400;
|
||||
} else {
|
||||
globalCtx->nextEntranceIndex = 0xD800;
|
||||
}
|
||||
gSaveContext.nextCutsceneIndex = 0xFFF1;
|
||||
globalCtx->sceneLoadFlag = 0x14;
|
||||
globalCtx->unk_1887F = 2;
|
||||
player->stateFlags1 |= 0x200;
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
func_80A42198(this);
|
||||
} else {
|
||||
func_80A425E4(this, globalCtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A42F20(EnTest4* this, GlobalContext* globalCtx) {
|
||||
if (!this->transitionCsTimer) {
|
||||
if (sCurrentCs >= 0) {
|
||||
if (ActorCutscene_GetCanPlayNext(sCurrentCs) == 0) {
|
||||
ActorCutscene_SetIntentToPlay(sCurrentCs);
|
||||
} else {
|
||||
ActorCutscene_Start(sCurrentCs, &this->actor);
|
||||
this->transitionCsTimer = 1;
|
||||
}
|
||||
} else {
|
||||
this->transitionCsTimer = 1;
|
||||
}
|
||||
} else if (this->transitionCsTimer < 60) {
|
||||
this->transitionCsTimer++;
|
||||
if (this->transitionCsTimer == 10) {
|
||||
if (this->unk_144 == 0) {
|
||||
play_sound(NA_SE_EV_CHICKEN_CRY_M);
|
||||
} else {
|
||||
func_8019F128(NA_SE_EV_DOG_CRY_EVENING);
|
||||
}
|
||||
}
|
||||
if (this->transitionCsTimer == 60) {
|
||||
Player* player = PLAYER;
|
||||
|
||||
gSaveContext.time += CLOCK_TIME_MINUTE;
|
||||
this->unk_146 = gSaveContext.time;
|
||||
globalCtx->numSetupActors = -globalCtx->numSetupActors;
|
||||
player->stateFlags1 &= ~0x200;
|
||||
}
|
||||
} else {
|
||||
this->actionFunc = func_80A42AB8;
|
||||
if (this->unk_144 == 0) {
|
||||
this->unk_144 = 1;
|
||||
} else {
|
||||
this->unk_144 = 0;
|
||||
}
|
||||
|
||||
if (sCurrentCs >= 0) {
|
||||
ActorCutscene_Stop(sCurrentCs);
|
||||
}
|
||||
gSaveContext.unk_3F22 = 0;
|
||||
gSaveContext.eventInf[1] &= (u8)~0x80;
|
||||
Interface_ChangeAlpha(50);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A430C8(EnTest4* this, GlobalContext* globalCtx) {
|
||||
if ((CURRENT_DAY == 2) && (gSaveContext.time >= CLOCK_TIME(7, 0)) && (gSaveContext.time < CLOCK_TIME(17, 30)) &&
|
||||
(globalCtx->envCtx.unk_F2[2] == 0)) {
|
||||
// rain?
|
||||
|
||||
D_801BDBB0 = 1;
|
||||
func_800FD78C(globalCtx);
|
||||
globalCtx->envCtx.unk_E3 = 1;
|
||||
globalCtx->envCtx.unk_F2[0] = 0x3C;
|
||||
} else {
|
||||
if (globalCtx->envCtx.unk_F2[0] != 0) {
|
||||
if ((globalCtx->state.frames % 4) == 0) {
|
||||
globalCtx->envCtx.unk_F2[0]--;
|
||||
if ((globalCtx->envCtx.unk_F2[0]) == 8) {
|
||||
func_800FD858(globalCtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (D_801BDBB0 == 1) {
|
||||
this->state = TEST4_STATE_1;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A431C8(EnTest4* this, GlobalContext* globalCtx) {
|
||||
if (((gSaveContext.time >= CLOCK_TIME(17, 30)) && (gSaveContext.time < CLOCK_TIME(23, 0)) &&
|
||||
(globalCtx->envCtx.unk_F2[0] != 0)) ||
|
||||
(globalCtx->envCtx.unk_F2[2] != 0)) {
|
||||
D_801BDBB0 = 0;
|
||||
globalCtx->envCtx.unk_E3 = 2;
|
||||
}
|
||||
|
||||
if (D_801BDBB0 == 0) {
|
||||
this->state = TEST4_STATE_0;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A4323C(EnTest4* this, GlobalContext* globalCtx) {
|
||||
s32 temp_v0 = (this->actor.params >> 0xA) * 0x64;
|
||||
|
||||
if (temp_v0 > 0) {
|
||||
D_801F4E7A = temp_v0;
|
||||
}
|
||||
}
|
||||
|
||||
void EnTest4_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnTest4* this = THIS;
|
||||
Player* player = PLAYER;
|
||||
|
||||
if (!(player->stateFlags1 & 2)) {
|
||||
this->actionFunc(this, globalCtx);
|
||||
|
||||
if (func_800FE4B8(globalCtx) != 0) {
|
||||
switch (this->state) {
|
||||
case TEST4_STATE_0:
|
||||
func_80A430C8(this, globalCtx);
|
||||
break;
|
||||
case TEST4_STATE_1:
|
||||
func_80A431C8(this, globalCtx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
func_80A4323C(this, globalCtx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,10 +9,20 @@ typedef void (*EnTest4ActionFunc)(struct EnTest4*, GlobalContext*);
|
||||
|
||||
typedef struct EnTest4 {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_144[0xC];
|
||||
/* 0x0144 */ s8 unk_144; // 0 on night, 1 on day
|
||||
/* 0x0145 */ u8 transitionCsTimer;
|
||||
/* 0x0146 */ u16 unk_146;
|
||||
/* 0x0148 */ u16 nextBellTime; // Next time the bell will sound
|
||||
/* 0x014A */ u16 lastBellTime; // Last time the bell sounded
|
||||
/* 0x014C */ u8 state;
|
||||
/* 0x0150 */ EnTest4ActionFunc actionFunc;
|
||||
} EnTest4; // size = 0x154
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ TEST4_STATE_0,
|
||||
/* 1 */ TEST4_STATE_1
|
||||
} EnTest4State;
|
||||
|
||||
extern const ActorInit En_Test4_InitVars;
|
||||
|
||||
#endif // Z_EN_TEST4_H
|
||||
|
||||
Reference in New Issue
Block a user