`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:
Anghelo Carvajal 2021-09-29 00:08:54 -03:00 committed by GitHub
parent 2f000058f5
commit 96cd49b6d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 596 additions and 42 deletions

View File

@ -1768,7 +1768,7 @@ void func_800FAAB4(GlobalContext* globalCtx, u8 arg1);
// void func_800FB010(void);
void func_800FB320(GlobalContext* globalCtx, u8 param_2);
// void func_800FB388(void);
// void func_800FB758(void);
void func_800FB758(GlobalContext* globalCtx);
// void func_800FB9B4(void);
// void func_800FBCBC(void);
// void func_800FBDEC(void);
@ -1814,7 +1814,7 @@ void func_800FE658(f32 arg0);
// void func_800FEA50(void);
void func_800FEAB0(void);
// void func_800FEAC0(void);
// void func_800FEAF4(void);
void func_800FEAF4(EnvironmentContext* envCtx);
void* Lib_MemCpy(void* dest, void* src, size_t size);
void* Lib_MemSet(void* buffer, s32 value, size_t size);
f32 Math_CosS(s16 angle);
@ -2127,7 +2127,7 @@ void func_8010E9F0(s16 arg0, s16 arg1);
// void func_8010EB50(void);
// void func_8010EBA0(void);
// void func_8010EC54(void);
// void func_8010EE74(void);
void func_8010EE74(GlobalContext* globalCtx, s32 day);
void Interface_ChangeAlpha(u16 param_1);
// void func_8010EF9C(void);
// void func_8010F0D4(void);
@ -2879,7 +2879,7 @@ void func_80150D08(GlobalContext* globalCtx, u32 uParm2);
// void func_801514B0(void);
void func_801518B0(GlobalContext* globalCtx, u16 textId, Actor* Actor);
void func_80151938(GlobalContext* globalCtx, u16 textId);
void func_80151A68(GlobalContext* globalCtx, u16 param_2);
void func_80151A68(GlobalContext* globalCtx, u16 textId);
void func_80151BB4(GlobalContext* globalCtx, u32 uParm2);
// void func_80151C9C(void);
// void func_80151DA4(void);
@ -3058,7 +3058,7 @@ void func_80169EFC(GlobalContext* globalCtx);
s32 FrameAdvance_IsEnabled(GlobalContext* globalCtx);
// UNK_TYPE4 func_8016A02C(s32 param_1, s32 param_2, s16* param_3);
// void func_8016A0AC(void);
// void func_8016A168(void);
s32 func_8016A168(void);
// void func_8016A178(void);
// void func_8016A268(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6);
void Play_Init(GameState* gameState);
@ -3871,7 +3871,7 @@ void func_8019FDC8(UNK_PTR arg0, u16 sfxId, UNK_TYPE arg2);
// void func_8019FF9C(void);
// void func_801A0048(void);
// void func_801A00EC(void);
// void func_801A0124(void);
void func_801A0124(Vec3f* pos, u8 arg1);
// void func_801A0184(void);
// void func_801A01C4(void);
void func_801A0204(UNK_TYPE);

View File

@ -49,6 +49,7 @@
#define CURRENT_DAY (((void)0, gSaveContext.day) % 5)
#define CLOCK_TIME(hr, min) ((s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60)))
#define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1))
#define SLOT(item) gItemSlots[item]
#define AMMO(item) gSaveContext.inventory.ammo[SLOT(item)]

View File

@ -949,7 +949,7 @@ extern GameStateOverlay daytelopGameStateInfo;
// extern UNK_TYPE2 D_801BDA74;
// extern UNK_TYPE2 D_801BDA78;
// extern UNK_TYPE2 D_801BDA7C;
// extern UNK_TYPE4 D_801BDA9C;
extern s32 D_801BDA9C;
extern UNK_TYPE4 D_801BDAA0;
// extern UNK_TYPE4 D_801BDAA4;
// extern UNK_TYPE2 D_801BDAA8;
@ -3312,7 +3312,7 @@ extern u8 actorCutsceneNextCutscenes[16];
extern f32 D_801F4E70;
// extern UNK_TYPE1 D_801F4E74;
// extern UNK_TYPE1 D_801F4E78;
// extern UNK_TYPE1 D_801F4E7A;
extern s16 D_801F4E7A;
// extern UNK_TYPE1 D_801F4E80;
// extern UNK_TYPE1 D_801F4EE0;
// extern UNK_TYPE1 D_801F4EE8;

View File

@ -20,7 +20,8 @@ typedef enum {
} UpgradeType;
typedef enum {
/* 0x01 */ ITEM_BOW = 0x01,
/* 0x00 */ ITEM_OCARINA,
/* 0x01 */ ITEM_BOW,
/* 0x06 */ ITEM_BOMB = 0x06,
/* 0x07 */ ITEM_BOMBCHU,
/* 0x08 */ ITEM_STICK,

View File

@ -93,9 +93,7 @@ typedef enum LightType {
/* 0x02 */ LIGHT_POINT_GLOW
} LightType;
typedef struct GlobalContext GlobalContext;
typedef void (*LightsBindFunc)(Lights* lights, LightParams* params, Vec3f* vec);
typedef void (*LightsPosBindFunc)(Lights* lights, LightParams* params, GlobalContext* globalCtx);
typedef void (*LightsPosBindFunc)(Lights* lights, LightParams* params, struct GlobalContext* globalCtx);
#endif

View File

@ -176,7 +176,7 @@ typedef struct Player {
/* 0x386 */ u16 unk_386;
/* 0x388 */ Actor* unk_388;
/* 0x38C */ s16 unk_38C;
/* 0x390 */ Actor* unk_390;
/* 0x390 */ Actor* rideActor;
/* 0x394 */ u8 unk_394;
/* 0x395 */ u8 unk_395;
/* 0x396 */ u8 unk_396;

6
spec
View File

@ -2913,9 +2913,11 @@ beginseg
name "ovl_En_Test4"
compress
include "build/src/overlays/actors/ovl_En_Test4/z_en_test4.o"
include "build/data/ovl_En_Test4/ovl_En_Test4.data.o"
include "build/data/ovl_En_Test4/ovl_En_Test4.bss.o"
#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_En_Test4/ovl_En_Test4_reloc.o"
#else
include "build/data/ovl_En_Test4/ovl_En_Test4.reloc.o"
#endif
endseg
beginseg

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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

View File

@ -978,13 +978,13 @@
0x801BDBA0:("D_801BDBA0","UNK_TYPE1","",0x1),
0x801BDBA4:("D_801BDBA4","UNK_TYPE1","",0x1),
0x801BDBA8:("D_801BDBA8","UNK_TYPE1","",0x1),
0x801BDBB0:("D_801BDBB0","UNK_TYPE1","",0x1),
0x801BDBB0:("D_801BDBB0","u8","",0x1),
0x801BDBB4:("D_801BDBB4","UNK_TYPE1","",0x1),
0x801BDBB8:("D_801BDBB8","UNK_TYPE1","",0x1),
0x801BDBBC:("D_801BDBBC","UNK_TYPE1","",0x1),
0x801BDBC0:("D_801BDBC0","UNK_TYPE1","",0x1),
0x801BDBC4:("D_801BDBC4","UNK_TYPE1","",0x1),
0x801BDBC8:("D_801BDBC8","UNK_TYPE1","",0x1),
0x801BDBC8:("D_801BDBC8","u8","",0x1),
0x801BDBCC:("D_801BDBCC","UNK_TYPE1","",0x1),
0x801BDCF4:("D_801BDCF4","UNK_TYPE1","",0x1),
0x801BE38E:("D_801BE38E","UNK_TYPE1","",0x1),
@ -4064,7 +4064,7 @@
0x801F4E70:("D_801F4E70","UNK_TYPE1","",0x1),
0x801F4E74:("D_801F4E74","UNK_TYPE1","",0x1),
0x801F4E78:("D_801F4E78","UNK_TYPE1","",0x1),
0x801F4E7A:("D_801F4E7A","UNK_TYPE1","",0x1),
0x801F4E7A:("D_801F4E7A","s16","",0x2),
0x801F4E80:("D_801F4E80","UNK_TYPE1","",0x1),
0x801F4EE0:("D_801F4EE0","UNK_TYPE1","",0x1),
0x801F4EE8:("D_801F4EE8","UNK_TYPE1","",0x1),
@ -11773,14 +11773,14 @@
0x80A41D68:("D_80A41D68","UNK_TYPE1","",0x1),
0x80A41D6C:("D_80A41D6C","UNK_TYPE1","",0x1),
0x80A43320:("En_Test4_InitVars","ActorInit","",0x20),
0x80A43340:("D_80A43340","UNK_TYPE4","",0x4),
0x80A43342:("D_80A43342","UNK_TYPE1","",0x1),
0x80A4334A:("D_80A4334A","UNK_TYPE1","",0x1),
0x80A43352:("D_80A43352","UNK_TYPE1","",0x1),
0x80A4335A:("D_80A4335A","UNK_TYPE1","",0x1),
0x80A43364:("D_80A43364","UNK_TYPE1","",0x1),
0x80A434D0:("D_80A434D0","s16","[2]",0x4),
0x80A434D4:("D_80A434D4","UNK_TYPE1","",0x1),
0x80A43340:("sIsLoaded","s32","[3]",0x6),
0x80A43342:("sNightMessages1","s16","[3]",0x6),
0x80A4334A:("sDayMessages1","s16","[3]",0x6),
0x80A43352:("sNightMessages2","s16","[3]",0x6),
0x80A4335A:("sDayMessages2","s16","[3]",0x6),
0x80A43364:("D_80A43364","u16","[2]",0x4),
0x80A434D0:("sCutscenes","s16","[2]",0x4),
0x80A434D4:("sCurrentCs","s16","",0x2),
0x80A449E0:("En_Bat_InitVars","UNK_TYPE1","",0x1),
0x80A44A00:("D_80A44A00","UNK_TYPE1","",0x1),
0x80A44A2C:("D_80A44A2C","UNK_TYPE1","",0x1),

View File

@ -12,6 +12,7 @@ ABS = "int"
SQ = "int"
CLAMP = "int"
CLOCK_TIME = "int"
CURRENT_DAY = "int"
[decompme.compilers]
"tools/ido_recomp/linux/7.1/cc" = "ido7.1"

View File

@ -61,7 +61,9 @@ def fix_sfx_flag(id):
if(id.endswith(' - SFX_FLAG')):
splitdata = id.split('-')
return splitdata[0].strip(), ' -' + splitdata[1]
if not(int(id,16) & 0x800):
if id.endswith("U"):
id = id[:-1]
if not(int(id, 16) & 0x800):
newid = '0x' + format(int(id,16) + 0x800,'X')
sfxFlag = ' - SFX_FLAG'
else :