From 6d20839ab0f6e439d159b279acf780061d5183a5 Mon Sep 17 00:00:00 2001 From: Tharo <17233964+Thar0@users.noreply.github.com> Date: Fri, 26 May 2023 18:57:44 +0100 Subject: [PATCH 01/36] Decompile padmgr.c (#1246) * Decompile padmgr.c * Format * Enum names * Update namefixer * Suggested changes Co-authored-by: Anghelo Carvajal * Suggested changes, improve motor.c Co-authored-by: Derek Hensley * Further suggested changes * Format * Fix `controller.h` comment Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: Anghelo Carvajal Co-authored-by: Derek Hensley Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 32 +- include/io/controller.h | 80 +- include/irqmgr.h | 9 +- include/padmgr.h | 97 +++ include/ultra64/motor.h | 13 +- include/ultra64/rcp.h | 8 + include/variables.h | 6 +- include/z64.h | 33 +- include/z64frameadvance.h | 3 +- spec | 1 - src/audio/code_8019AF00.c | 4 +- src/boot_O2_g3/fault.c | 6 +- src/code/game.c | 2 +- src/code/main.c | 1 - src/code/padmgr.c | 795 +++++++++++++++++++- src/code/sys_rumble.c | 10 +- src/code/z_parameter.c | 12 +- src/code/z_rumble.c | 4 +- src/libultra/io/motor.c | 89 ++- src/overlays/gamestates/ovl_title/z_title.c | 2 +- tools/disasm/functions.txt | 50 +- tools/disasm/variables.txt | 10 +- tools/namefixer.py | 22 + tools/sizes/code_functions.csv | 50 +- 24 files changed, 1103 insertions(+), 236 deletions(-) create mode 100644 include/padmgr.h diff --git a/include/functions.h b/include/functions.h index 11c79548a..35010d601 100644 --- a/include/functions.h +++ b/include/functions.h @@ -328,7 +328,7 @@ OSTime osGetTime(void); void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z); void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); void __osSetGlobalIntMask(u32 mask); -// void osVoiceInit(void); +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* handle, s32 channel); s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); // void __osVoiceSetADConverter(void); s32 osAiSetFrequency(u32 frequency); @@ -2098,34 +2098,6 @@ ListAlloc* ListAlloc_Init(ListAlloc* this); // void ListAlloc_Free(void); void ListAlloc_FreeAll(ListAlloc* this); void Main(void* arg); -u32 Padmgr_GetControllerBitmask(void); -void func_80174F24(void (*arg0)(void*), void* arg1); -void func_80174F44(void (*arg0)(void*), void* arg1); -void func_80174F7C(void (*arg0)(s32), void* arg1); -void func_80174F9C(void (*arg0)(s32), void* arg1); -// OSMesgQueue* Padmgr_GetEventCallback(void); -// void func_80175008(void); -void Padmgr_SetEventCallback(OSMesg pvParm1); -// void func_8017506C(void); -// void Padmgr_Lock(void); -// void Padmgr_Unlock(void); -// void func_801750FC(void); -// void func_80175364(void); -void func_80175434(void); -void func_8017544C(s32 port, s32 rumbleOn); -void PadMgr_RumbleSet(u8 rumbleEnabled[MAXCONTROLLERS]); -s32 PadMgr_ControllerHasRumblePak(s32 port); -void Padmgr_CalcStickEdges(Input* input); -// void Padmgr_ParseState(void); -// void func_801759BC(void); -// void func_80175AE0(void); -// void Padmgr_Update(void); -// void Padmgr_Stop(void); -void func_80175E68(Input* input, s32 param_2); -void Padmgr_GetInput(Input* input, s32 param_2); -void Padmgr_GetInput2(Input* input, s32 param_2); -void Padmgr_ThreadEntry(PadMgr* padmgr); -void PadMgr_Init(OSMesgQueue* siEventCallbackQueue, IrqMgr* irqmgr, OSId threadId, OSPri threadPri, void* stack); void Sched_SwapFramebuffer(CfbInfo* cfbInfo); void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo); void Sched_HandleReset(SchedContext* sched); @@ -2614,7 +2586,7 @@ void Audio_ResetForAudioHeapStep3(void); void Audio_ResetForAudioHeapStep2(void); void Audio_ResetForAudioHeapStep1(s32 specId); -// void func_801A4EB0(void); +void func_801A4EB0(void); // void func_801A4EB8(void); void func_801A4FD8(void); void func_801A5080(u16 arg0); diff --git a/include/io/controller.h b/include/io/controller.h index 4321df096..b588b4198 100644 --- a/include/io/controller.h +++ b/include/io/controller.h @@ -35,10 +35,6 @@ #define CONT_CMD_WRITE_EEPROM_RX 1 #define CONT_CMD_RESET_RX 3 -#define CONT_CMD_NOP 0xFF -#define CONT_CMD_END 0xFE // Indicates end of a command -#define CONT_CMD_EXE 1 // Set pif ram status byte to this to do a command - #define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */ #define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */ #define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */ @@ -48,6 +44,52 @@ #define CONT_ERR_VOICE_WORD 14 #define CONT_ERR_VOICE_NO_RESPONSE 15 +// Joybus commands +#define CONT_CMD_REQUEST_STATUS 0 +#define CONT_CMD_READ_BUTTON 1 +#define CONT_CMD_READ_PAK 2 +#define CONT_CMD_WRITE_PAK 3 +#define CONT_CMD_READ_EEPROM 4 +#define CONT_CMD_WRITE_EEPROM 5 +#define CONT_CMD_READ36_VOICE 9 +#define CONT_CMD_WRITE20_VOICE 10 +#define CONT_CMD_READ2_VOICE 11 +#define CONT_CMD_WRITE4_VOICE 12 +#define CONT_CMD_SWRITE_VOICE 13 +#define CONT_CMD_CHANNEL_RESET 0xFD +#define CONT_CMD_RESET 0xFF + +// Bytes transmitted for each joybus command +#define CONT_CMD_REQUEST_STATUS_TX 1 +#define CONT_CMD_READ_BUTTON_TX 1 +#define CONT_CMD_READ_PAK_TX 3 +#define CONT_CMD_WRITE_PAK_TX 35 +#define CONT_CMD_READ_EEPROM_TX 2 +#define CONT_CMD_WRITE_EEPROM_TX 10 +#define CONT_CMD_READ36_VOICE_TX 3 +#define CONT_CMD_WRITE20_VOICE_TX 23 +#define CONT_CMD_READ2_VOICE_TX 3 +#define CONT_CMD_WRITE4_VOICE_TX 7 +#define CONT_CMD_SWRITE_VOICE_TX 3 +#define CONT_CMD_RESET_TX 1 + +// Bytes received for each joybus command +#define CONT_CMD_REQUEST_STATUS_RX 3 +#define CONT_CMD_READ_BUTTON_RX 4 +#define CONT_CMD_READ_PAK_RX 33 +#define CONT_CMD_WRITE_PAK_RX 1 +#define CONT_CMD_READ_EEPROM_RX 8 +#define CONT_CMD_WRITE_EEPROM_RX 1 +#define CONT_CMD_READ36_VOICE_RX 37 +#define CONT_CMD_WRITE20_VOICE_RX 1 +#define CONT_CMD_READ2_VOICE_RX 3 +#define CONT_CMD_WRITE4_VOICE_RX 1 +#define CONT_CMD_SWRITE_VOICE_RX 1 +#define CONT_CMD_RESET_RX 3 + +#define CONT_CMD_NOP 0xFF +#define CONT_CMD_END 0xFE // Indicates end of a command +#define CONT_CMD_EXE 1 // Set pif ram status byte to this to do a command #define DIR_STATUS_EMPTY 0 #define DIR_STATUS_UNKNOWN 1 @@ -81,6 +123,26 @@ #define CONT_ADDR_CRC_ER 0x04 #define CONT_EEPROM_BUSY 0x80 +// Accessory detection +#define CONT_ADDR_DETECT 0x8000 +// Rumble +#define CONT_ADDR_RUMBLE 0xC000 +// Controller Pak +// Transfer Pak +#define CONT_ADDR_GB_POWER 0x8000 // Same as the detection address, but semantically different +#define CONT_ADDR_GB_BANK 0xA000 +#define CONT_ADDR_GB_STATUS 0xB000 + +// Addresses sent to controller accessories are in blocks, not bytes +#define CONT_BLOCKS(x) ((x) / BLOCKSIZE) + +// Block addresses of the above +#define CONT_BLOCK_DETECT CONT_BLOCKS(CONT_ADDR_DETECT) +#define CONT_BLOCK_RUMBLE CONT_BLOCKS(CONT_ADDR_RUMBLE) +#define CONT_BLOCK_GB_POWER CONT_BLOCKS(CONT_ADDR_GB_POWER) +#define CONT_BLOCK_GB_BANK CONT_BLOCKS(CONT_ADDR_GB_BANK) +#define CONT_BLOCK_GB_STATUS CONT_BLOCKS(CONT_ADDR_GB_STATUS) + /* Buttons */ #define BTN_CRIGHT 0x0001 #define BTN_CLEFT 0x0002 @@ -88,6 +150,7 @@ #define BTN_CUP 0x0008 #define BTN_R 0x0010 #define BTN_L 0x0020 +#define BTN_RESET 0x0080 #define BTN_DRIGHT 0x0100 #define BTN_DLEFT 0x0200 #define BTN_DDOWN 0x0400 @@ -146,6 +209,8 @@ typedef struct { /* 0x26 */ u8 datacrc; } __OSContRamReadFormat; +#define READFORMAT(ptr) ((__OSContRamReadFormat*)(ptr)) + extern OSPifRam __osContPifRam; // extern UNK_TYPE1 D_8009CF0C; extern u8 __osContLastPoll; @@ -153,11 +218,4 @@ extern u8 __osMaxControllers; // extern OSMesgQueue D_8009CF38; // extern OSMesg D_8009CF50; -typedef struct { - /* 0x00 */ OSContPad cur; - /* 0x06 */ OSContPad prev; - /* 0x0C */ OSContPad press; // X/Y store delta from last frame - /* 0x12 */ OSContPad rel; // X/Y store adjusted -} Input; // size = 0x18 - #endif diff --git a/include/irqmgr.h b/include/irqmgr.h index 40ed322d1..ac2c74960 100644 --- a/include/irqmgr.h +++ b/include/irqmgr.h @@ -1,9 +1,14 @@ #ifndef IRQMGR_H #define IRQMGR_H -#include "PR/ultratypes.h" #include "PR/sched.h" -#include "ultra64/message.h" +#include "os.h" +#include "ultra64.h" + +#define OS_SC_RETRACE_MSG 1 +#define OS_SC_DONE_MSG 2 +#define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c +#define OS_SC_PRE_NMI_MSG 4 typedef struct IrqMgrClient { /* 0x0 */ struct IrqMgrClient* next; diff --git a/include/padmgr.h b/include/padmgr.h new file mode 100644 index 000000000..674c9bc4e --- /dev/null +++ b/include/padmgr.h @@ -0,0 +1,97 @@ +#ifndef PADMGR_H +#define PADMGR_H + +#include "libc/stdbool.h" +#include "io/controller.h" +#include "irqmgr.h" + +typedef struct { + /* 0x00 */ OSContPad cur; + /* 0x06 */ OSContPad prev; + /* 0x0C */ OSContPad press; // X/Y store delta from last frame + /* 0x12 */ OSContPad rel; // X/Y store adjusted +} Input; // size = 0x18 + +typedef enum { + /* 0 */ PADMGR_CONT_NONE, + /* 1 */ PADMGR_CONT_NORMAL, + /* 3 */ PADMGR_CONT_MOUSE = 3, + /* 4 */ PADMGR_CONT_VOICE_PLUGGED, // VRU plugged but not initialized + /* 5 */ PADMGR_CONT_VOICE, + /* -1 */ PADMGR_CONT_UNK = 0xFF +} ControllerDeviceType; + +typedef enum { + /* 0 */ CONT_PAK_NONE, + /* 1 */ CONT_PAK_RUMBLE, + /* 2 */ CONT_PAK_OTHER +} ControllerPakType; + +typedef struct { + /* 0x000 */ u8 validCtrlrsMask; + /* 0x004 */ void (*rumbleRetraceCallback)(void*); + /* 0x008 */ void* rumbleRetraceArg; + /* 0x00C */ void (*inputRetraceCallback)(void*); + /* 0x010 */ void* inputRetraceArg; + /* 0x014 */ OSContStatus padStatus[MAXCONTROLLERS]; + /* 0x024 */ OSMesg serialMsg; + /* 0x028 */ OSMesg lockMsg; + /* 0x02C */ OSMesg interruptMsgBuf[8]; + /* 0x04C */ OSMesgQueue serialLockQueue; + /* 0x064 */ OSMesgQueue lockQueue; + /* 0x07C */ OSMesgQueue interruptQueue; + /* 0x094 */ IrqMgrClient irqClient; + /* 0x09C */ IrqMgr* irqMgr; + /* 0x0A0 */ OSThread thread; + /* 0x250 */ Input inputs[MAXCONTROLLERS]; + /* 0x2B0 */ OSContPad pads[MAXCONTROLLERS]; + /* 0x2C8 */ u8 nControllers; + /* 0x2C9 */ u8 ctrlrType[MAXCONTROLLERS]; // type of controller currently connected to each port + /* 0x2CD */ u8 pakType[MAXCONTROLLERS]; // type of controller pak for each port (if applicable) + /* 0x2D1 */ u8 rumbleEnable[MAXCONTROLLERS]; // whether rumble is active for each port + /* 0x2D5 */ u8 rumbleTimer[MAXCONTROLLERS]; + /* 0x2DC */ OSPfs rumblePfs[MAXCONTROLLERS]; + /* 0x47C */ vu8 rumbleOffTimer; // amount of VI retraces to not rumble for, takes priority over rumbleOnTimer + /* 0x47D */ vu8 rumbleOnTimer; // amount of VI retraces to rumble for + /* 0x47E */ u8 isResetting; +} PadMgr; // size = 0x480 + +extern PadMgr gPadMgr; + +// Initialization + +s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status); +void PadMgr_Init(OSMesgQueue* siEvtQ, IrqMgr* irqMgr, OSId threadId, OSPri pri, void* stack); + +// Fetching inputs + +void PadMgr_GetInputNoLock(Input* inputs, s32 gameRequest); +void PadMgr_GetInput(Input* inputs, s32 gameRequest); +void PadMgr_GetInput2(Input* inputs, s32 gameRequest); + +// Callbacks + +void PadMgr_SetRumbleRetraceCallback(void (*callback)(void*), void* arg); +void PadMgr_UnsetRumbleRetraceCallback(void (*callback)(void*), void* arg); + +void PadMgr_SetInputRetraceCallback(void (*callback)(void*), void* arg); +void PadMgr_UnsetInputRetraceCallback(void (*callback)(void*), void* arg); + +// Valid controllers + +u8 PadMgr_GetValidControllersMask(void); + +// Voice queue + +OSMesgQueue* PadMgr_VoiceAcquireSerialEventQueue(void); +void PadMgr_VoiceReleaseSerialEventQueue(OSMesgQueue* serialEventQueue); + +// Rumble + +void PadMgr_RumbleStop(void); +void PadMgr_RumblePause(void); +void PadMgr_RumbleSetSingle(s32 port, s32 enable); +void PadMgr_RumbleSet(u8 enable[MAXCONTROLLERS]); +s32 PadMgr_ControllerHasRumblePak(s32 port); + +#endif diff --git a/include/ultra64/motor.h b/include/ultra64/motor.h index ad6828132..ed969b3de 100644 --- a/include/ultra64/motor.h +++ b/include/ultra64/motor.h @@ -5,13 +5,14 @@ #include "PR/pfs.h" #include "ultra64/message.h" -#define MOTOR_START 1 -#define MOTOR_STOP 0 +#define MOTOR_START 1 +#define MOTOR_STOP 0 -#define osMotorStart(x) __osMotorAccess((x), MOTOR_START) -#define osMotorStop(x) __osMotorAccess((x), MOTOR_STOP) +#define osMotorStart(x) __osMotorAccess((x), MOTOR_START) +#define osMotorStop(x) __osMotorAccess((x), MOTOR_STOP) -s32 __osMotorAccess(OSPfs* pfs, u32 vibrate); -s32 osMotorInit(OSMesgQueue* ctrlrqueue, OSPfs* pfs, s32 channel); +s32 __osMotorAccess(OSPfs* pfs, s32 flag); + +s32 osMotorInit(OSMesgQueue* mq, OSPfs* pfs, s32 channel); #endif diff --git a/include/ultra64/rcp.h b/include/ultra64/rcp.h index 6bd778ccf..7a336be28 100644 --- a/include/ultra64/rcp.h +++ b/include/ultra64/rcp.h @@ -11,4 +11,12 @@ #define DEVICE_TYPE_SRAM 3 /* SRAM */ #define DEVICE_TYPE_INIT 7 /* initial value */ + +#define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */ +#define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */ +#define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */ +#define CHNL_ERR_COLLISION 0x40 /* Bit 6 (Tx): Collision error */ + +#define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ + #endif diff --git a/include/variables.h b/include/variables.h index f540107b3..c8b511a7e 100644 --- a/include/variables.h +++ b/include/variables.h @@ -795,9 +795,6 @@ extern u32 cfbIdx[3]; extern s32 gScreenWidth; extern s32 gScreenHeight; extern u32 startHeapSize; -extern PadMgr* padmgrContext; -// extern UNK_TYPE4 controllerInputsCaptured; -// extern UNK_TYPE4 D_801D1538; extern UNK_PTR D_801D1540; // extern f32 sFactorialTbl[13]; extern Vec3f gZeroVec3f; @@ -2410,7 +2407,6 @@ extern u32 gSegments[NUM_SEGMENTS]; extern SchedContext gSchedContext; extern OSThread gGraphThread; -extern PadMgr gPadMgr; extern FaultClient sSchedFaultClient; extern OSTime sRSPGFXStartTime; @@ -2616,7 +2612,7 @@ extern s32 D_801FD120; // extern UNK_TYPE1 D_801FD598; // extern UNK_TYPE1 D_801FD5A0; // extern UNK_TYPE1 D_801FD5A4; -// extern UNK_TYPE1 D_801FD5B8; +extern OSVoiceHandle gVoiceHandle; // extern UNK_TYPE1 D_801FD5C4; // extern UNK_TYPE1 D_801FD5C8; // extern UNK_TYPE1 D_801FD5E8; diff --git a/include/z64.h b/include/z64.h index 95af2c157..e9bdcfe62 100644 --- a/include/z64.h +++ b/include/z64.h @@ -14,6 +14,7 @@ #include "osint.h" #include "os.h" #include "irqmgr.h" +#include "padmgr.h" #include "scheduler.h" #include "xstdio.h" @@ -481,7 +482,7 @@ typedef struct { /* 0x7D8 */ FaultClient* clients; /* 0x7DC */ FaultAddrConvClient* addrConvClients; /* 0x7E0 */ UNK_TYPE1 pad7E0[0x4]; - /* 0x7E4 */ Input padInput[4]; + /* 0x7E4 */ Input padInput[MAXCONTROLLERS]; /* 0x844 */ void* fb; } FaultThreadStruct; // size = 0x848 @@ -522,7 +523,7 @@ typedef struct GameState { /* 0x08 */ GameStateFunc destroy; /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load. /* 0x10 */ size_t size; - /* 0x14 */ Input input[4]; + /* 0x14 */ Input input[MAXCONTROLLERS]; /* 0x74 */ TwoHeadArena heap; /* 0x84 */ GameAlloc alloc; /* 0x98 */ UNK_TYPE1 pad98[0x3]; @@ -541,34 +542,6 @@ typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Colli typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*); typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*); -typedef struct { - /* 0x000 */ u8 controllers; // bit 0 is set if controller 1 is plugged in, etc. - /* 0x001 */ UNK_TYPE1 pad1[0x13]; - /* 0x014 */ OSContStatus statuses[4]; - /* 0x024 */ UNK_TYPE4 unk24; - /* 0x028 */ OSMesg lockMesg[1]; - /* 0x02C */ OSMesg interrupts[8]; - /* 0x04C */ OSMesgQueue sSiIntMsgQ; - /* 0x064 */ OSMesgQueue lock; - /* 0x07C */ OSMesgQueue irqmgrCallbackQueue; - /* 0x094 */ IrqMgrClient irqmgrCallbackQueueNode; - /* 0x09C */ IrqMgr* irqmgr; - /* 0x0A0 */ OSThread thread; - /* 0x250 */ Input input[4]; - /* 0x2B0 */ OSContPad controllerState1[4]; - /* 0x2C8 */ u8 maxNumControllers; - /* 0x2C9 */ UNK_TYPE1 pad2C9[0x1B3]; - /* 0x47C */ u8 unk47C; - /* 0x47D */ u8 unk47D; - /* 0x47E */ u8 hasStopped; - /* 0x47F */ UNK_TYPE1 pad47F[0x1]; -} PadMgr; // size = 0x480 - -#define OS_SC_RETRACE_MSG 1 -#define OS_SC_DONE_MSG 2 -#define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c -#define OS_SC_PRE_NMI_MSG 4 - typedef struct { /* 0x000 */ IrqMgr* irqMgr; /* 0x004 */ SchedContext* sched; diff --git a/include/z64frameadvance.h b/include/z64frameadvance.h index c0feaed59..179a1adba 100644 --- a/include/z64frameadvance.h +++ b/include/z64frameadvance.h @@ -1,8 +1,7 @@ #ifndef Z64FRAMEADVANCE_H #define Z64FRAMEADVANCE_H -#include "ultra64.h" -#include "io/controller.h" +#include "padmgr.h" typedef struct FrameAdvanceContext { /* 0x0 */ s32 enabled; diff --git a/spec b/spec index 57fca6cda..ef85a1764 100644 --- a/spec +++ b/spec @@ -567,7 +567,6 @@ beginseg include "build/data/code/main.data.o" include "build/data/code/main.bss.o" include "build/src/code/padmgr.o" - include "build/data/code/padmgr.data.o" include "build/src/code/sched.o" include "build/src/code/speed_meter.o" include "build/data/code/speed_meter.data.o" diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index d107e65b7..287149c91 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -2058,11 +2058,11 @@ const char sAudioOcarinaUnusedText6[] = "last key step is too short !!! %d:%d %d const char sAudioOcarinaUnusedText7[] = "check is over!!! %d %d %d\n"; void AudioOcarina_ReadControllerInput(void) { - Input inputs[4]; + Input inputs[MAXCONTROLLERS]; Input* input = &inputs[0]; u32 ocarinaInputButtonPrev = sOcarinaInputButtonCur; - Padmgr_GetInput2(inputs, 0); + PadMgr_GetInput2(inputs, false); sOcarinaInputButtonCur = input->cur.button; sOcarinaInputButtonPrev = ocarinaInputButtonPrev; sOcarinaInputStickRel.x = input->rel.stick_x; diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 2c8f4a667..6e1656170 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -204,7 +204,7 @@ void Fault_Sleep(u32 duration) { } void Fault_PadCallback(Input* input) { - Padmgr_GetInput2(input, 0); + PadMgr_GetInput2(input, false); } void Fault_UpdatePadImpl() { @@ -474,7 +474,7 @@ void Fault_WaitForButtonCombo(void) { do { Fault_Sleep(0x10); Fault_UpdatePadImpl(); - } while (!CHECK_BTN_ALL(input->press.button, 0x80)); + } while (!CHECK_BTN_ALL(input->press.button, BTN_RESET)); } while (!CHECK_BTN_ALL(input->cur.button, BTN_DLEFT | BTN_L | BTN_R | BTN_CRIGHT)); } @@ -763,7 +763,7 @@ void Fault_SetOptionsFromController3(void) { u32 graphRA; u32 graphSP; - if (CHECK_BTN_ALL(input3->press.button, 0x80)) { + if (CHECK_BTN_ALL(input3->press.button, BTN_RESET)) { faultCustomOptions = !faultCustomOptions; } diff --git a/src/code/game.c b/src/code/game.c index 3ff4f9962..bc8b9e39f 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -128,7 +128,7 @@ void func_801736DC(GraphicsContext* gfxCtx) { } void Game_UpdateInput(GameState* gameState) { - Padmgr_GetInput(gameState->input, 1); + PadMgr_GetInput(gameState->input, true); } void Game_Update(GameState* gameState) { diff --git a/src/code/main.c b/src/code/main.c index 7fbb5ba39..6eadd591a 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -26,7 +26,6 @@ extern StackEntry sSchedStackInfo; extern StackEntry sAudioStackInfo; extern StackEntry sPadMgrStackInfo; extern AudioMgr sAudioMgr; -extern PadMgr gPadMgr; void Main(void* arg) { intptr_t fb; diff --git a/src/code/padmgr.c b/src/code/padmgr.c index 077ef1b2b..a04a14f57 100644 --- a/src/code/padmgr.c +++ b/src/code/padmgr.c @@ -1,58 +1,797 @@ +/** + * @file padmgr.c + * + * This file implements communicating with joybus devices at a high level and serving the results to other threads. + * + * Any device that can be plugged into one of the four controller ports such as a standard N64 controller is a joybus + * device. Some joybus devices are also located inside the cartridge such as EEPROM for save data or the Real-Time + * Clock, however neither of these are used in Zelda64 and so this type of communication is unimplemented. Unlike the + * padmgr implementation in OoT, there are three controller types supported: + * - Standard N64 Controller + * - N64 Mouse + * - Voice Recognition Unit + * + * Communicating with these devices is broken down into various layers: + * + * Other threads : The rest of the program that will use the polled data + * | + * PadMgr : Manages devices, submits polling commands at vertical retrace + * | + * Libultra osCont* routines : Interface for building commands and safely using the Serial Interface + * | + * Serial Interface : Hardware unit for sending joybus commands and receiving data via DMA + * | + * PIF : Forwards joybus commands and receives response data from the devices + * |---¬---¬---¬-------¬ + * 1 2 3 4 5 : The joybus devices plugged into the four controller ports or on the cartridge + * + * Joybus communication is handled on another thread as polling and receiving controller data is a slow process; the + * N64 programming manual section 26.2.4.1 quotes 2 milliseconds as the expected delay from calling + * `osContStartReadData` to receiving the data. By running this on a separate thread to the game state, work can be + * done while waiting for this operation to complete. + */ #include "global.h" +#include "io/controller.h" #include "ultra64/motor.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetControllerBitmask.s") +#define PADMGR_RETRACE_MSG (1 << 0) +#define PADMGR_PRE_NMI_MSG (1 << 1) +#define PADMGR_NMI_MSG (1 << 2) -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F24.s") +typedef enum { + /* 0 */ VOICE_INIT_FAILED, // voice initialization failed + /* 1 */ VOICE_INIT_TRY, // try to initialize voice + /* 2 */ VOICE_INIT_SUCCESS // voice initialized +} VoiceInitStatus; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F44.s") +PadMgr* sPadMgrInstance = &gPadMgr; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F7C.s") +s32 sPadMgrRetraceCount = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80174F9C.s") +s32 sVoiceInitStatus = VOICE_INIT_TRY; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetEventCallback.s") +/** + * Returns the bitmask of valid controllers. + * + * bit n set = controller (n+1) available. + */ +u8 PadMgr_GetValidControllersMask(void) { + return sPadMgrInstance->validCtrlrsMask; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175008.s") +/** + * Sets the callback function intended to be used to modify the rumble pak state on each VI with + * calls to `PadMgr_RumbleSetSingle`. The callback may be passed a single user-provided argument. + * + * @param callback callback to run before rumble state is updated for the current VI + * @param arg the argument to pass to the callback + * + * @see PadMgr_RumbleSetSingle + * @see PadMgr_UnsetRumbleRetraceCallback + */ +void PadMgr_SetRumbleRetraceCallback(void (*callback)(void*), void* arg) { + sPadMgrInstance->rumbleRetraceCallback = callback; + sPadMgrInstance->rumbleRetraceArg = arg; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_SetEventCallback.s") +/** + * Unsets the rumble retrace callback if the provided function and argument are the same as those already registered. + * + * @param callback the callback to test against + * @param arg the argument to test against + * + * @see PadMgr_SetRumbleRetraceCallback + */ +void PadMgr_UnsetRumbleRetraceCallback(void (*callback)(void*), void* arg) { + if ((sPadMgrInstance->rumbleRetraceCallback == callback) && (sPadMgrInstance->rumbleRetraceArg == arg)) { + sPadMgrInstance->rumbleRetraceCallback = NULL; + sPadMgrInstance->rumbleRetraceArg = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_8017506C.s") +/** + * Sets the callback function intended to be used to test for particular inputs on each VI, immediately after new + * inputs have been polled. + * + * This is useful for the rare cases where additional resolution is needed in the timings of player inputs, + * while the game is still updating comparatively slower. + * + * @param callback callback to run as soon as new inputs are obtained + * @param arg the argument to pass to the callback + * + * @see PadMgr_UnsetInputRetraceCallback + */ +void PadMgr_SetInputRetraceCallback(void (*callback)(void*), void* arg) { + sPadMgrInstance->inputRetraceCallback = callback; + sPadMgrInstance->inputRetraceArg = arg; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Lock.s") +/** + * Unsets the input retrace callback if the provided function and argument are the same as those already registered. + * + * @param callback the callback to test against + * @param arg the argument to test against + * + * @see PadMgr_SetInputRetraceCallback + */ +void PadMgr_UnsetInputRetraceCallback(void (*callback)(void*), void* arg) { + if ((sPadMgrInstance->inputRetraceCallback == callback) && (sPadMgrInstance->inputRetraceArg == arg)) { + sPadMgrInstance->inputRetraceCallback = NULL; + sPadMgrInstance->inputRetraceArg = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Unlock.s") +/** + * Acquires exclusive access to the serial event queue. + * + * When a DMA to/from PIF RAM completes, an SI interrupt is generated to notify the process that the DMA has completed + * and a message is posted to the serial event queue. If multiple processes are trying to use the SI at the same time + * it becomes ambiguous as to which DMA has completed, so a locking system is required to arbitrate access to the SI. + * + * Once the task requiring the serial event queue is complete, it should be released with a call to + * `PadMgr_ReleaseSerialEventQueue()`. + * + * If another process tries to acquire the event queue, the current thread will be blocked until the event queue is + * released. Note the possibility for a deadlock, if the thread that already holds the serial event queue attempts to + * acquire it again it will block forever. + * + * @return The message queue to which SI interrupt events are posted. + * + * @see PadMgr_ReleaseSerialEventQueue + */ +OSMesgQueue* PadMgr_AcquireSerialEventQueue(void) { + OSMesgQueue* serialEventQueue; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_801750FC.s") + osRecvMesg(&sPadMgrInstance->serialLockQueue, (OSMesg*)&serialEventQueue, OS_MESG_BLOCK); + return serialEventQueue; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175364.s") +/** + * Like `PadMgr_AcquireSerialEventQueue` but for Voice access. + * + * @see PadMgr_AcquireSerialEventQueue + * @see PadMgr_VoiceReleaseSerialEventQueue + */ +OSMesgQueue* PadMgr_VoiceAcquireSerialEventQueue(void) { + OSMesgQueue* serialEventQueue; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175434.s") + osRecvMesg(&sPadMgrInstance->serialLockQueue, (OSMesg*)&serialEventQueue, OS_MESG_BLOCK); + return serialEventQueue; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_8017544C.s") +/** + * Relinquishes access to the serial message queue, allowing another process to acquire and use it. + * + * @param serialEventQueue The serial message queue acquired by `PadMgr_AcquireSerialEventQueue` + * + * @see PadMgr_AcquireSerialEventQueue + */ +void PadMgr_ReleaseSerialEventQueue(OSMesgQueue* serialEventQueue) { + osSendMesg(&sPadMgrInstance->serialLockQueue, (OSMesg)serialEventQueue, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RumbleSet.s") +/** + * Like `PadMgr_ReleaseSerialEventQueue` but for Voice access. + * + * @see PadMgr_VoiceAcquireSerialEventQueue + */ +void PadMgr_VoiceReleaseSerialEventQueue(OSMesgQueue* serialEventQueue) { + osSendMesg(&sPadMgrInstance->serialLockQueue, (OSMesg)serialEventQueue, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_ControllerHasRumblePak.s") +/** + * Locks controller input data while padmgr is reading new inputs or another thread is using the current inputs. + * This prevents new inputs overwriting the current inputs while they are in use. + * + * @see PadMgr_UnlockPadData + */ +void PadMgr_LockPadData(void) { + osRecvMesg(&sPadMgrInstance->lockQueue, NULL, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_CalcStickEdges.s") +/** + * Unlocks controller input data, allowing padmgr to read new inputs or another thread to access the most recently + * polled inputs. + * + * @see PadMgr_LockPadData + */ +void PadMgr_UnlockPadData(void) { + osSendMesg(&sPadMgrInstance->lockQueue, NULL, OS_MESG_BLOCK); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_ParseState.s") +/** + * Activates the rumble pak for all controllers it is enabled on, stops it for all controllers it is disabled on and + * attempts to initialize it for a controller if it is not already initialized. + */ +void PadMgr_UpdateRumble(void) { + s32 i; + s32 ret; + OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(); + s32 triedRumbleComm = false; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_801759BC.s") + for (i = 0; i < MAXCONTROLLERS; i++) { + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL) { + // Check status for whether a controller pak is connected + if (sPadMgrInstance->padStatus[i].status & CONT_CARD_ON) { + if (sPadMgrInstance->pakType[i] == CONT_PAK_RUMBLE) { + if (sPadMgrInstance->rumbleEnable[i]) { + if (sPadMgrInstance->rumbleTimer[i] < 3) { + // Rumble pak start -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175AE0.s") + if (osMotorStart(&sPadMgrInstance->rumblePfs[i]) != 0) { + // error + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } else { + sPadMgrInstance->rumbleTimer[i] = 3; + } + triedRumbleComm = true; + } + } else { + if (sPadMgrInstance->rumbleTimer[i] != 0) { + // Rumble Pak stop -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Update.s") + if (osMotorStop(&sPadMgrInstance->rumblePfs[i]) != 0) { + // error + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } else { + sPadMgrInstance->rumbleTimer[i]--; + } + triedRumbleComm = true; + } + } + } + } else if (sPadMgrInstance->pakType[i] != CONT_PAK_NONE) { + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_Stop.s") + if (!triedRumbleComm) { + // Try to initialize the rumble pak for controller port `i` if a controller pak is connected and not already + // known to be an initialized a rumble pak + i = sPadMgrRetraceCount % MAXCONTROLLERS; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/func_80175E68.s") + if ((sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL) && + (sPadMgrInstance->padStatus[i].status & CONT_CARD_ON) && (sPadMgrInstance->pakType[i] != CONT_PAK_RUMBLE)) { + ret = osMotorInit(serialEventQueue, &sPadMgrInstance->rumblePfs[i], i); -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetInput.s") + if (ret == 0) { + // Got rumble pak + sPadMgrInstance->pakType[i] = CONT_PAK_RUMBLE; + sPadMgrInstance->rumbleTimer[i] = 2; + } else if (ret == PFS_ERR_DEVICE) { + // Not a rumble pak + if (sPadMgrInstance->pakType[i] != CONT_PAK_OTHER) { + sPadMgrInstance->pakType[i] = CONT_PAK_OTHER; + } + } else if (ret == PFS_ERR_CONTRFAIL) { + // Pak communication error + } else if (ret == PFS_ERR_NOPACK) { + // No controller pak + } else { + // Unrecognized return code + Fault_AddHungupAndCrash("../padmgr.c", 594); + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_GetInput2.s") + PadMgr_ReleaseSerialEventQueue(serialEventQueue); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/Padmgr_ThreadEntry.s") +/** + * Immediately stops rumble on all controllers + */ +void PadMgr_RumbleStop(void) { + OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(); + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_Init.s") + for (i = 0; i < MAXCONTROLLERS; i++) { + if ((sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL) && + (osMotorInit(serialEventQueue, &sPadMgrInstance->rumblePfs[i], i) == 0)) { + // If there is a rumble pak attached to this controller, stop it + osMotorStop(&sPadMgrInstance->rumblePfs[i]); + } + } + PadMgr_ReleaseSerialEventQueue(serialEventQueue); +} + +/** + * Prevents rumble for 12 VI, ~0.2 seconds at 60 VI/sec + */ +void PadMgr_RumblePause(void) { + sPadMgrInstance->rumbleOffTimer = 12; +} + +/** + * Enables or disables rumble on controller port `port` for 24 VI, + * ~0.4 seconds at 60 VI/sec and ~0.48 seconds at 50 VI/sec + */ +void PadMgr_RumbleSetSingle(s32 port, s32 enable) { + sPadMgrInstance->rumbleEnable[port] = enable; + sPadMgrInstance->rumbleOnTimer = 24; +} + +/** + * Enables or disables rumble on all controller ports for 24 VI, + * ~0.4 seconds at 60 VI/sec and ~0.48 seconds at 50 VI/sec + * + * @param enable Array of u8 of length MAXCONTROLLERS containing either true or false to enable or disable rumble + * for that controller + */ +void PadMgr_RumbleSet(u8 enable[MAXCONTROLLERS]) { + s32 i; + + for (i = 0; i < MAXCONTROLLERS; i++) { + sPadMgrInstance->rumbleEnable[i] = enable[i]; + } + sPadMgrInstance->rumbleOnTimer = 24; +} + +s32 PadMgr_ControllerHasRumblePak(s32 port) { + return sPadMgrInstance->pakType[port] == CONT_PAK_RUMBLE; +} + +void PadMgr_AdjustInput(Input* input) { + s32 plus; + s32 minus; + s32 pressX; + s32 pressX2; + s32 pressY; + s32 pressY2; + s32 pad1; + s32 pad2; + s32 pad3; + f32 pad4; + f32 newX; + f32 newY; + f32 magnitude; + f32 angle; + s8 curX = input->cur.stick_x; + s8 curY = input->cur.stick_y; + + if (CHECK_BTN_ANY(input->press.button, BTN_RESET) || (input->press.stick_x == 0)) { + input->press.stick_x = 61; + input->press.errno = -61; + input->press.stick_y = 63; + input->rel.errno = -63; + } + pressX = input->press.stick_x; + pressX2 = (s8)input->press.errno; + pressY = input->press.stick_y; + pressY2 = (s8)input->rel.errno; + + if (CHECK_BTN_ANY(input->cur.button, BTN_RESET)) { + minus = curX - 7; + plus = curX + 7; + + if (minus > 0) { + if (pressX < minus - 3) { + pressX = minus - 3; + input->press.stick_x = minus - 3; + } + } else if (plus < 0) { + if (pressX2 > plus + 3) { + pressX2 = plus + 3; + input->press.errno = plus + 3; + } + } + + minus = curY - 7; + plus = curY + 7; + + if (minus > 0) { + if (pressY < minus - 3) { + pressY = minus - 3; + input->press.stick_y = minus - 3; + } + } else if (plus < 0) { + if (pressY2 > plus + 3) { + pressY2 = plus + 3; + input->rel.errno = plus + 3; + } + } + } + + minus = curX - 7; + plus = curX + 7; + + if (minus > 0) { + newX = (pressX < minus) ? 1.0f : (f32)minus / pressX; + } else if (plus < 0) { + newX = (pressX2 > plus) ? -1.0f : -(f32)plus / pressX2; + } else { + newX = 0.0f; + } + + minus = curY - 7; + plus = curY + 7; + + if (minus > 0) { + newY = (pressY < minus) ? 1.0f : (f32)minus / pressY; + } else if (plus < 0) { + newY = (pressY2 > plus) ? -1.0f : -(f32)plus / pressY2; + } else { + newY = 0.0f; + } + + if (1) { + s32 pad; + + magnitude = sqrtf(SQ(newX) + SQ(newY)); + if (magnitude > 1.0f) { + magnitude = 1.0f; + } + angle = Math_Atan2F_XY(curY, -curX); + newX = -sinf(angle) * magnitude; + newY = cosf(angle) * magnitude; + } + input->rel.stick_x = newX * 60.5f; + input->rel.stick_y = newY * 60.5f; +} + +/** + * Updates `sPadMgrInstance->inputs` based on the error response of each controller + */ +void PadMgr_UpdateInputs(void) { + s32 diff; + Input* input = &sPadMgrInstance->inputs[0]; + s32 i; + OSContPad* pad = &sPadMgrInstance->pads[0]; + + for (i = 0; i < sPadMgrInstance->nControllers; i++, input++, pad++) { + s32 isStandardController; + + input->prev = input->cur; + isStandardController = sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NORMAL; + if (isStandardController) { + switch (pad->errno) { + case 0: + // No error, copy inputs + input->cur = *pad; + break; + + case CHNL_ERR_OVERRUN >> 4: + // Overrun error, reuse previous inputs + input->cur = input->prev; + break; + + case CHNL_ERR_NORESP >> 4: + // No response error, take inputs as 0 + input->cur.button = 0; + input->cur.stick_x = 0; + input->cur.stick_y = 0; + input->cur.errno = pad->errno; + if (sPadMgrInstance->ctrlrType[i] != PADMGR_CONT_NONE) { + // If we get no response, consider the controller disconnected + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_NONE; + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + sPadMgrInstance->rumbleTimer[i] = 0xFF; + } + break; + + default: + // Unknown error response + Fault_AddHungupAndCrash("../padmgr.c", 1098); + break; + } + } else { + input->cur.button = 0; + input->cur.stick_x = 0; + input->cur.stick_y = 0; + input->cur.errno = pad->errno; + } + + // If opposed directions on the D-Pad are pressed at the same time, mask both out + if ((input->cur.button & (BTN_DDOWN | BTN_DUP)) == (BTN_DDOWN | BTN_DUP)) { + input->cur.button &= ~(BTN_DDOWN | BTN_DUP); + } + if ((input->cur.button & (BTN_DRIGHT | BTN_DLEFT)) == (BTN_DRIGHT | BTN_DLEFT)) { + input->cur.button &= ~(BTN_DRIGHT | BTN_DLEFT); + } + + // Calculate pressed and relative inputs + diff = input->prev.button ^ input->cur.button; + input->press.button |= (u16)(diff & input->cur.button); + input->rel.button |= (u16)(diff & input->prev.button); + + if (1) {} + PadMgr_AdjustInput(input); + } +} + +/** + * Looks for plugged in voice recognition units and initializes them. + * + * This runs only on startup, there will be no attempts to initialize + * a VRU other than on the first VI retrace. + */ +void PadMgr_InitVoice(void) { + s32 i; + OSMesgQueue* serialEventQueue; + s32 ret; + + for (i = 0; i < sPadMgrInstance->nControllers; i++) { + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_VOICE_PLUGGED) { + serialEventQueue = PadMgr_AcquireSerialEventQueue(); + + ret = osVoiceInit(serialEventQueue, &gVoiceHandle, i); + + PadMgr_ReleaseSerialEventQueue(serialEventQueue); + + if (ret != 0) { + // error + } else { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_VOICE; + sVoiceInitStatus = VOICE_INIT_SUCCESS; + func_801A4EB0(); + } + } + } + // If sVoiceInitStatus is still VOICE_INIT_TRY after the first attempt to initialize a VRU, don't try again + if (sVoiceInitStatus == VOICE_INIT_TRY) { + sVoiceInitStatus = VOICE_INIT_FAILED; + } +} + +/** + * Update the state of connected controllers + */ +void PadMgr_UpdateConnections(void) { + s32 ctrlrMask = 0; + s32 i; + char msg[50]; + + for (i = 0; i < MAXCONTROLLERS; i++) { + if (sPadMgrInstance->padStatus[i].errno == 0) { + switch (sPadMgrInstance->padStatus[i].type & CONT_TYPE_MASK) { + case CONT_TYPE_NORMAL: + // Standard N64 Controller + ctrlrMask |= (1 << i); + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_NORMAL; + } + break; + + case CONT_TYPE_MOUSE: + // N64 Mouse + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_MOUSE; + } + break; + + case CONT_TYPE_VOICE: + // Voice Recognition Unit + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_VOICE_PLUGGED; + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + } + break; + + default: + // Other/Unrecognized + if (sPadMgrInstance->ctrlrType[i] == PADMGR_CONT_NONE) { + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_UNK; + // "Recognized an unknown type of controller (%04x)" + sprintf(msg, "知らない種類のコントローラ(%04x)を認識しました", + sPadMgrInstance->padStatus[i].type); + } + // Missing break required for matching + } + } else if (sPadMgrInstance->ctrlrType[i] != PADMGR_CONT_NONE) { + // Plugged controller errored + sPadMgrInstance->ctrlrType[i] = PADMGR_CONT_NONE; + sPadMgrInstance->pakType[i] = CONT_PAK_NONE; + sPadMgrInstance->rumbleTimer[i] = 0xFF; + } + } + sPadMgrInstance->validCtrlrsMask = ctrlrMask; +} + +void PadMgr_HandleRetrace(void) { + OSMesgQueue* serialEventQueue = PadMgr_AcquireSerialEventQueue(); + + // Begin reading controller data + osContStartReadData(serialEventQueue); + + // Execute rumble callback + if (sPadMgrInstance->rumbleRetraceCallback != NULL) { + sPadMgrInstance->rumbleRetraceCallback(sPadMgrInstance->rumbleRetraceArg); + } + + // Wait for controller data + osRecvMesg(serialEventQueue, NULL, OS_MESG_BLOCK); + osContGetReadData(sPadMgrInstance->pads); + + // Clear all but controller 1 + bzero(&sPadMgrInstance->pads[1], sizeof(*sPadMgrInstance->pads) * (MAXCONTROLLERS - 1)); + + // If in PreNMI, clear all controllers + if (sPadMgrInstance->isResetting) { + bzero(sPadMgrInstance->pads, sizeof(sPadMgrInstance->pads)); + } + + // Query controller statuses + osContStartQuery(serialEventQueue); + osRecvMesg(serialEventQueue, NULL, OS_MESG_BLOCK); + osContGetQuery(sPadMgrInstance->padStatus); + + // Lock serial message queue + PadMgr_ReleaseSerialEventQueue(serialEventQueue); + + // Update connections + PadMgr_UpdateConnections(); + + // Lock input data + PadMgr_LockPadData(); + + // Update input data + PadMgr_UpdateInputs(); + + // Execute input callback + if (sPadMgrInstance->inputRetraceCallback != NULL) { + sPadMgrInstance->inputRetraceCallback(sPadMgrInstance->inputRetraceArg); + } + + // Unlock input data + PadMgr_UnlockPadData(); + + // Try and initialize a Voice Recognition Unit if not already attempted + if (sVoiceInitStatus != VOICE_INIT_FAILED) { + PadMgr_InitVoice(); + } + + // Rumble Pak + if (gFaultStruct.msgId != 0) { + // If fault is active, no rumble + PadMgr_RumbleStop(); + } else if (sPadMgrInstance->rumbleOffTimer > 0) { + // If the rumble off timer is active, no rumble + --sPadMgrInstance->rumbleOffTimer; + PadMgr_RumbleStop(); + } else if (sPadMgrInstance->rumbleOnTimer == 0) { + // If the rumble on timer is inactive, no rumble + PadMgr_RumbleStop(); + } else if (!sPadMgrInstance->isResetting) { + // If not resetting, update rumble + PadMgr_UpdateRumble(); + --sPadMgrInstance->rumbleOnTimer; + } + + sPadMgrRetraceCount++; +} + +void PadMgr_HandlePreNMI(void) { + sPadMgrInstance->isResetting = true; + PadMgr_RumblePause(); +} + +/** + * Fetches the most recently polled inputs from padmgr. + * + * NOTE: This function does not lock the inputs while reading them. + * The padmgr thread may interrupt this function and poll new inputs while the thread running this function is + * currently copying the old inputs potentially resulting in a mix of newly polled and old inputs being used. + * It is preferable to use `PadMgr_GetInput` or `PadMgr_GetInput2`. + * + * @param inputs Array of Input of length MAXCONTROLLERS to copy inputs into + * @param gameRequest True if polling inputs for updating the game state + */ +void PadMgr_GetInputNoLock(Input* inputs, s32 gameRequest) { + s32 i; + Input* input = &sPadMgrInstance->inputs[0]; + Input* inputOut = &inputs[0]; + s32 buttonDiff; + + for (i = 0; i < MAXCONTROLLERS; i++) { + if (gameRequest) { + // Copy inputs as-is, press and rel are calculated prior in `PadMgr_UpdateInputs` + *inputOut = *input; + // Zero parts of the press and rel inputs in the polled inputs so they are not read more than once + input->press.button = 0; + input->rel.button = 0; + } else { + // Take as the previous inputs the inputs that are currently in the destination array + inputOut->prev = inputOut->cur; + // Copy current inputs from the polled inputs + inputOut->cur = input->cur; + // Calculate press and rel from these + buttonDiff = inputOut->prev.button ^ inputOut->cur.button; + inputOut->press.button = inputOut->cur.button & buttonDiff; + inputOut->rel.button = inputOut->prev.button & buttonDiff; + PadUtils_UpdateRelXY(inputOut); + } + input++; + inputOut++; + } +} + +/** + * Fetches the most recently polled inputs from padmgr. + * + * @param inputs Array of Input of length MAXCONTROLLERS to copy inputs into + * @param gameRequest True if polling inputs for updating the game state + */ +void PadMgr_GetInput(Input* inputs, s32 gameRequest) { + PadMgr_LockPadData(); + PadMgr_GetInputNoLock(inputs, gameRequest); + PadMgr_UnlockPadData(); +} + +/** + * Copy of `PadMgr_GetInput` + * + * @see PadMgr_GetInput + */ +void PadMgr_GetInput2(Input* inputs, s32 gameRequest) { + PadMgr_LockPadData(); + PadMgr_GetInputNoLock(inputs, gameRequest); + PadMgr_UnlockPadData(); +} + +void PadMgr_ThreadEntry() { + s16* interruptMsg = NULL; + s32 actionBits; + s32 exit; + + osCreateMesgQueue(&sPadMgrInstance->interruptQueue, sPadMgrInstance->interruptMsgBuf, + ARRAY_COUNT(sPadMgrInstance->interruptMsgBuf)); + IrqMgr_AddClient(sPadMgrInstance->irqMgr, &sPadMgrInstance->irqClient, &sPadMgrInstance->interruptQueue); + + actionBits = 0; + exit = false; + + while (!exit) { + // Process all messages currently in the queue, instead of only a single mssage. + // Deduplicates the same message. + do { + osRecvMesg(&sPadMgrInstance->interruptQueue, (OSMesg*)&interruptMsg, OS_MESG_BLOCK); + switch (*interruptMsg) { + case OS_SC_RETRACE_MSG: + actionBits |= PADMGR_RETRACE_MSG; + break; + + case OS_SC_PRE_NMI_MSG: + actionBits |= PADMGR_PRE_NMI_MSG; + break; + + case OS_SC_NMI_MSG: + actionBits |= PADMGR_NMI_MSG; + break; + } + } while (!MQ_IS_EMPTY(&sPadMgrInstance->interruptQueue)); + + // Act on received messages + while (actionBits != 0) { + if (actionBits & PADMGR_NMI_MSG) { + actionBits &= ~PADMGR_NMI_MSG; + exit = true; + } else if (actionBits & PADMGR_PRE_NMI_MSG) { + actionBits &= ~PADMGR_PRE_NMI_MSG; + PadMgr_HandlePreNMI(); + } else if (actionBits & PADMGR_RETRACE_MSG) { + actionBits &= ~PADMGR_RETRACE_MSG; + PadMgr_HandleRetrace(); + } + } + } + + IrqMgr_RemoveClient(sPadMgrInstance->irqMgr, &sPadMgrInstance->irqClient); +} + +void PadMgr_Init(OSMesgQueue* siEvtQ, IrqMgr* irqMgr, OSId threadId, OSPri pri, void* stack) { + bzero(sPadMgrInstance, sizeof(PadMgr)); + sPadMgrInstance->irqMgr = irqMgr; + + // These are unique access tokens, there should only ever be room for one OSMesg in these queues + osCreateMesgQueue(&sPadMgrInstance->serialLockQueue, &sPadMgrInstance->serialMsg, 1); + osCreateMesgQueue(&sPadMgrInstance->lockQueue, &sPadMgrInstance->lockMsg, 1); + + PadMgr_UnlockPadData(); + PadSetup_Init(siEvtQ, &sPadMgrInstance->validCtrlrsMask, sPadMgrInstance->padStatus); + sPadMgrInstance->nControllers = MAXCONTROLLERS; + osContSetCh(sPadMgrInstance->nControllers); + PadMgr_ReleaseSerialEventQueue(siEvtQ); + + osCreateThread(&sPadMgrInstance->thread, threadId, PadMgr_ThreadEntry, sPadMgrInstance, stack, pri); + osStartThread(&sPadMgrInstance->thread); +} diff --git a/src/code/sys_rumble.c b/src/code/sys_rumble.c index 4101758be..06bef6e34 100644 --- a/src/code/sys_rumble.c +++ b/src/code/sys_rumble.c @@ -24,12 +24,12 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { if (D_801D1E70) { for (i = 0; i < MAXCONTROLLERS; i++) { - func_8017544C(i, false); + PadMgr_RumbleSetSingle(i, false); } } D_801D1E70 = rumbleMgr->updateEnabled; - func_80175434(); + PadMgr_RumblePause(); return; } @@ -39,7 +39,7 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { // Start up the manager by wiping old requests if (rumbleMgr->state == RUMBLEMANAGER_STATE_INITIAL) { for (i = 0; i < MAXCONTROLLERS; i++) { - func_8017544C(i, false); + PadMgr_RumbleSetSingle(i, false); } for (i = 0; i < RUMBLE_REQUEST_BUFFER_SIZE; i++) { @@ -59,7 +59,7 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { rumbleMgr->state = RUMBLEMANAGER_STATE_RUNNING; - func_80175434(); + PadMgr_RumblePause(); } if (rumbleMgr->state != RUMBLEMANAGER_STATE_WIPE) { @@ -146,7 +146,7 @@ void RumbleManager_Update(RumbleManager* rumbleMgr) { rumbleMgr->overrideDecayStep = 0; rumbleMgr->overrideAccumulator = 0; - func_80175434(); + PadMgr_RumblePause(); } } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 41441f3a2..fe4ca5ef8 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -29,7 +29,7 @@ typedef struct { /* 0x03 */ u8 flags3; } RestrictionFlags; -Input sPostmanTimerInput[4]; +Input sPostmanTimerInput[MAXCONTROLLERS]; #define RESTRICTIONS_TABLE_END 0xFF @@ -887,10 +887,10 @@ void Interface_SetVertices(PlayState* play) { s32 sPostmanTimerInputBtnAPressed = false; -void Interface_PostmanTimerCallback(s32 arg0) { +void Interface_PostmanTimerCallback(void* arg) { s32 btnAPressed; - func_80175E68(&sPostmanTimerInput[0], 0); + PadMgr_GetInputNoLock(sPostmanTimerInput, false); btnAPressed = CHECK_BTN_ALL(sPostmanTimerInput[0].cur.button, BTN_A); if ((btnAPressed != sPostmanTimerInputBtnAPressed) && btnAPressed) { gSaveContext.postmanTimerStopOsTime = osGetTime(); @@ -5654,7 +5654,7 @@ void Interface_DrawTimers(PlayState* play) { } gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_POSTMAN_COUNTING; sPostmanTimerInputBtnAPressed = true; - func_80174F7C(Interface_PostmanTimerCallback, NULL); + PadMgr_SetInputRetraceCallback(Interface_PostmanTimerCallback, NULL); break; case TIMER_STATE_POSTMAN_STOP: @@ -5663,7 +5663,7 @@ void Interface_DrawTimers(PlayState* play) { postmanTimerStopOsTime - ((void)0, gSaveContext.timerStartOsTimes[TIMER_ID_POSTMAN]) - ((void)0, gSaveContext.timerPausedOsTimes[TIMER_ID_POSTMAN])); gSaveContext.timerStates[TIMER_ID_POSTMAN] = TIMER_STATE_POSTMAN_END; - func_80174F9C(Interface_PostmanTimerCallback, NULL); + PadMgr_UnsetInputRetraceCallback(Interface_PostmanTimerCallback, NULL); break; case TIMER_STATE_POSTMAN_COUNTING: @@ -7211,7 +7211,7 @@ void Interface_Update(PlayState* play) { void Interface_Destroy(PlayState* play) { Map_Destroy(play); - func_80174F9C(Interface_PostmanTimerCallback, NULL); + PadMgr_UnsetInputRetraceCallback(Interface_PostmanTimerCallback, NULL); } void Interface_Init(PlayState* play) { diff --git a/src/code/z_rumble.c b/src/code/z_rumble.c index ce5cc16b4..3cca1d432 100644 --- a/src/code/z_rumble.c +++ b/src/code/z_rumble.c @@ -68,11 +68,11 @@ void Rumble_Request(f32 distSq, u8 sourceIntensity, u8 decayTimer, u8 decayStep) void Rumble_Init(void) { RumbleManager_Init(&gRumbleMgr); - func_80174F24(Rumble_Update, NULL); + PadMgr_SetRumbleRetraceCallback(Rumble_Update, NULL); } void Rumble_Destroy(void) { - func_80174F44(Rumble_Update, NULL); + PadMgr_UnsetRumbleRetraceCallback(Rumble_Update, NULL); RumbleManager_Destroy(&gRumbleMgr); } diff --git a/src/libultra/io/motor.c b/src/libultra/io/motor.c index 649a8b368..9e0eb127e 100644 --- a/src/libultra/io/motor.c +++ b/src/libultra/io/motor.c @@ -6,40 +6,40 @@ #define BANK_ADDR 0x400 #define MOTOR_ID 0x80 -OSPifRam osPifBuffers[MAXCONTROLLERS]; +OSPifRam __MotorDataBuf[MAXCONTROLLERS]; s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); -s32 __osMotorAccess(OSPfs* pfs, u32 vibrate) { +s32 __osMotorAccess(OSPfs* pfs, s32 flag) { s32 i; s32 ret; - u8* buf = (u8*)&osPifBuffers[pfs->channel]; + u8* ptr = (u8*)&__MotorDataBuf[pfs->channel]; - if (!(pfs->status & 8)) { - return 5; + if (!(pfs->status & PFS_MOTOR_INITIALIZED)) { + return PFS_ERR_INVALID; } __osSiGetAccess(); - osPifBuffers[pfs->channel].status = 1; - buf += pfs->channel; + __MotorDataBuf[pfs->channel].status = CONT_CMD_EXE; + ptr += pfs->channel; for (i = 0; i < BLOCKSIZE; i++) { - ((__OSContRamReadFormat*)buf)->data[i] = vibrate; + READFORMAT(ptr)->data[i] = flag; } __osContLastPoll = CONT_CMD_END; - __osSiRawStartDma(OS_WRITE, &osPifBuffers[pfs->channel]); + __osSiRawStartDma(OS_WRITE, &__MotorDataBuf[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); - __osSiRawStartDma(OS_READ, &osPifBuffers[pfs->channel]); + __osSiRawStartDma(OS_READ, &__MotorDataBuf[pfs->channel]); osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK); - ret = ((__OSContRamReadFormat*)buf)->rxsize & 0xC0; + ret = READFORMAT(ptr)->rxsize & CHNL_ERR_MASK; if (!ret) { - if (!vibrate) { - if (((__OSContRamReadFormat*)buf)->datacrc != 0) { + if (!flag) { + if (READFORMAT(ptr)->datacrc != 0) { ret = PFS_ERR_CONTRFAIL; } } else { - if (((__OSContRamReadFormat*)buf)->datacrc != 0xEB) { + if (READFORMAT(ptr)->datacrc != 0xEB) { ret = PFS_ERR_CONTRFAIL; } } @@ -50,76 +50,75 @@ s32 __osMotorAccess(OSPfs* pfs, u32 vibrate) { return ret; } -void _MakeMotorData(s32 channel, OSPifRam* buf) { - u8* bufptr = (u8*)buf; - __OSContRamReadFormat mempakwr; +void _MakeMotorData(s32 channel, OSPifRam* mdata) { + u8* ptr = (u8*)mdata->ramarray; + __OSContRamReadFormat ramreadformat; s32 i; - mempakwr.dummy = 0xFF; - mempakwr.txsize = 0x23; - mempakwr.rxsize = 1; - mempakwr.cmd = 3; // write mempak - mempakwr.hi = 0x600 >> 3; - mempakwr.lo = (u8)(__osContAddressCrc(0x600) | (0x600 << 5)); + ramreadformat.dummy = CONT_CMD_NOP; + ramreadformat.txsize = CONT_CMD_WRITE_PAK_TX; + ramreadformat.rxsize = CONT_CMD_WRITE_PAK_RX; + ramreadformat.cmd = CONT_CMD_WRITE_PAK; + ramreadformat.hi = CONT_BLOCK_RUMBLE >> 3; + ramreadformat.lo = (u8)(__osContAddressCrc(CONT_BLOCK_RUMBLE) | (CONT_BLOCK_RUMBLE << 5)); if (channel != 0) { for (i = 0; i < channel; i++) { - *bufptr++ = 0; + *ptr++ = 0; } } - *(__OSContRamReadFormat*)bufptr = mempakwr; - bufptr += sizeof(mempakwr); - *bufptr = 0xFE; + *READFORMAT(ptr) = ramreadformat; + ptr += sizeof(ramreadformat); + *ptr = CONT_CMD_END; } -s32 osMotorInit(OSMesgQueue* ctrlrqueue, OSPfs* pfs, s32 channel) { +s32 osMotorInit(OSMesgQueue* mq, OSPfs* pfs, s32 channel) { s32 ret; - u8 sp24[BLOCKSIZE]; + u8 temp[BLOCKSIZE]; - pfs->queue = ctrlrqueue; + pfs->queue = mq; pfs->channel = channel; pfs->activebank = 0xFF; pfs->status = 0; ret = __osPfsSelectBank(pfs, 0xFE); - if (ret == 2) { + if (ret == PFS_ERR_NEW_PACK) { ret = __osPfsSelectBank(pfs, MOTOR_ID); } if (ret != 0) { return ret; } - ret = __osContRamRead(ctrlrqueue, channel, 0x400, sp24); - if (ret == 2) { - ret = 4; // "Controller pack communication error" + ret = __osContRamRead(mq, channel, CONT_BLOCK_DETECT, temp); + if (ret == PFS_ERR_NEW_PACK) { + ret = PFS_ERR_CONTRFAIL; } if (ret != 0) { return ret; } - if (sp24[BLOCKSIZE - 1] == 0xFE) { - return 0xB; + if (temp[BLOCKSIZE - 1] == 0xFE) { + return PFS_ERR_DEVICE; } ret = __osPfsSelectBank(pfs, MOTOR_ID); if (ret == 2) { - ret = 4; // "Controller pack communication error" + ret = PFS_ERR_CONTRFAIL; } if (ret != 0) { return ret; } - ret = __osContRamRead(ctrlrqueue, channel, BANK_ADDR, sp24); - if (ret == 2) { - ret = 4; // "Controller pack communication error" + ret = __osContRamRead(mq, channel, BANK_ADDR, temp); + if (ret == PFS_ERR_NEW_PACK) { + ret = PFS_ERR_CONTRFAIL; } if (ret != 0) { return ret; } - if (sp24[BLOCKSIZE - 1] != MOTOR_ID) { - return 0xB; + if (temp[BLOCKSIZE - 1] != MOTOR_ID) { + return PFS_ERR_DEVICE; } if (!(pfs->status & PFS_MOTOR_INITIALIZED)) { - _MakeMotorData(channel, &osPifBuffers[channel]); + _MakeMotorData(channel, &__MotorDataBuf[channel]); } pfs->status = PFS_MOTOR_INITIALIZED; - - return 0; // "Recognized rumble pak" + return 0; } diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 01e29668e..59b1bed02 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -165,7 +165,7 @@ void ConsoleLogo_Init(GameState* thisx) { this->state.destroy = ConsoleLogo_Destroy; this->exit = false; - if (!(Padmgr_GetControllerBitmask() & 1)) { + if (!(PadMgr_GetValidControllersMask() & 1)) { gSaveContext.fileNum = 0xFEDC; } else { gSaveContext.fileNum = 0xFF; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c3c12979b..6d9916fd7 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3164,33 +3164,33 @@ 0x80174B20:("ListAlloc_Free",), 0x80174BA0:("ListAlloc_FreeAll",), 0x80174BF0:("Main",), - 0x80174F10:("Padmgr_GetControllerBitmask",), - 0x80174F24:("func_80174F24",), - 0x80174F44:("func_80174F44",), - 0x80174F7C:("func_80174F7C",), - 0x80174F9C:("func_80174F9C",), - 0x80174FD4:("Padmgr_GetEventCallback",), - 0x80175008:("func_80175008",), - 0x8017503C:("Padmgr_SetEventCallback",), - 0x8017506C:("func_8017506C",), - 0x8017509C:("Padmgr_Lock",), - 0x801750CC:("Padmgr_Unlock",), - 0x801750FC:("func_801750FC",), - 0x80175364:("func_80175364",), - 0x80175434:("func_80175434",), - 0x8017544C:("func_8017544C",), + 0x80174F10:("PadMgr_GetValidControllersMask",), + 0x80174F24:("PadMgr_SetRumbleRetraceCallback",), + 0x80174F44:("PadMgr_UnsetRumbleRetraceCallback",), + 0x80174F7C:("PadMgr_SetInputRetraceCallback",), + 0x80174F9C:("PadMgr_UnsetInputRetraceCallback",), + 0x80174FD4:("PadMgr_AcquireSerialEventQueue",), + 0x80175008:("PadMgr_VoiceAcquireSerialEventQueue",), + 0x8017503C:("PadMgr_ReleaseSerialEventQueue",), + 0x8017506C:("PadMgr_VoiceReleaseSerialEventQueue",), + 0x8017509C:("PadMgr_LockPadData",), + 0x801750CC:("PadMgr_UnlockPadData",), + 0x801750FC:("PadMgr_UpdateRumble",), + 0x80175364:("PadMgr_RumbleStop",), + 0x80175434:("PadMgr_RumblePause",), + 0x8017544C:("PadMgr_RumbleSetSingle",), 0x80175474:("PadMgr_RumbleSet",), 0x801754C0:("PadMgr_ControllerHasRumblePak",), - 0x801754E0:("Padmgr_CalcStickEdges",), - 0x801757A4:("Padmgr_ParseState",), - 0x801759BC:("func_801759BC",), - 0x80175AE0:("func_80175AE0",), - 0x80175C80:("Padmgr_Update",), - 0x80175E3C:("Padmgr_Stop",), - 0x80175E68:("func_80175E68",), - 0x80175F98:("Padmgr_GetInput",), - 0x80175FD4:("Padmgr_GetInput2",), - 0x80176010:("Padmgr_ThreadEntry",), + 0x801754E0:("PadMgr_AdjustInput",), + 0x801757A4:("PadMgr_UpdateInputs",), + 0x801759BC:("PadMgr_InitVoice",), + 0x80175AE0:("PadMgr_UpdateConnections",), + 0x80175C80:("PadMgr_HandleRetrace",), + 0x80175E3C:("PadMgr_HandlePreNMI",), + 0x80175E68:("PadMgr_GetInputNoLock",), + 0x80175F98:("PadMgr_GetInput",), + 0x80175FD4:("PadMgr_GetInput2",), + 0x80176010:("PadMgr_ThreadEntry",), 0x80176194:("PadMgr_Init",), 0x80176280:("Sched_SwapFramebuffer",), 0x80176314:("Sched_RetraceUpdateFramebuffer",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b69ab2ff4..f40abb468 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -328,7 +328,7 @@ 0x8009CD50:("sRandFloat","f32","",0x4), 0x8009CD60:("sArenaLockMsg","OSMesg","[1]",0x4), 0x8009CD70:("tmp_task","OSTask","",0x40), - 0x8009CDB0:("osPifBuffers","OSPifRam","[4]",0x100), + 0x8009CDB0:("__MotorDataBuf","OSPifRam","[4]",0x100), 0x8009CEB0:("siAccessBuf","OSMesg","[1]",0x4), 0x8009CEB8:("__osSiAccessQueue","OSMesgQueue","",0x18), 0x8009CED0:("__osContPifRam","OSPifRam","",0x40), @@ -2180,9 +2180,9 @@ 0x801D1520:("gScreenWidth","s32","",0x4), 0x801D1524:("gScreenHeight","s32","",0x4), 0x801D1528:("startHeapSize","UNK_TYPE4","",0x4), - 0x801D1530:("padmgrContext","PadMgr*","",0x4), - 0x801D1534:("controllerInputsCaptured","UNK_TYPE4","",0x4), - 0x801D1538:("D_801D1538","UNK_TYPE4","",0x4), + 0x801D1530:("sPadMgrInstance","PadMgr*","",0x4), + 0x801D1534:("sPadMgrRetraceCount","UNK_TYPE4","",0x4), + 0x801D1538:("sVoiceInitStatus","UNK_TYPE4","",0x4), 0x801D1540:("D_801D1540","UNK_PTR","",0x4), 0x801D1570:("D_801D1570","f32","[13]",0x34), 0x801D15B0:("gZeroVec3f","Vec3f","",0xC), @@ -4292,7 +4292,7 @@ 0x801FD598:("sCustomSequencePc","UNK_TYPE1","",0x1), 0x801FD5A0:("D_801FD5A0","UNK_TYPE1","",0x1), 0x801FD5A4:("D_801FD5A4","UNK_TYPE1","",0x1), - 0x801FD5B8:("D_801FD5B8","UNK_TYPE1","",0x1), + 0x801FD5B8:("gVoiceHandle","UNK_TYPE1","",0x1), 0x801FD5C4:("D_801FD5C4","UNK_TYPE1","",0x1), 0x801FD5C8:("D_801FD5C8","UNK_TYPE1","",0x1), 0x801FD5E8:("D_801FD5E8","UNK_TYPE1","",0x1), diff --git a/tools/namefixer.py b/tools/namefixer.py index a0aa4b315..a3fbddec9 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -742,6 +742,28 @@ wordReplace = { "func_80102544": "LightContext_SetFog", + "Padmgr_GetControllerBitmask": "PadMgr_GetValidControllersMask", + "func_80174F24": "PadMgr_SetRumbleRetraceCallback", + "func_80174F44": "PadMgr_UnsetRumbleRetraceCallback", + "func_80174F7C": "PadMgr_SetInputRetraceCallback", + "func_80174F9C": "PadMgr_UnsetInputRetraceCallback", + "Padmgr_GetEventCallback": "PadMgr_AcquireSerialEventQueue", + "func_80175008": "PadMgr_VoiceAcquireSerialEventQueue", + "Padmgr_SetEventCallback": "PadMgr_ReleaseSerialEventQueue", + "func_8017506C": "PadMgr_VoiceReleaseSerialEventQueue", + "Padmgr_Lock": "PadMgr_LockPadData", + "Padmgr_Unlock": "PadMgr_UnlockPadData", + "func_801750FC": "PadMgr_UpdateRumble", + "func_80175364": "PadMgr_RumbleStop", + "func_80175434": "PadMgr_RumblePause", + "func_8017544C": "PadMgr_RumbleSetSingle", + "Padmgr_ParseState": "PadMgr_UpdateInputs", + "func_801759BC": "PadMgr_InitVoice", + "func_80175AE0": "PadMgr_UpdateConnections", + "Padmgr_Update": "PadMgr_HandleRetrace", + "Padmgr_Stop": "PadMgr_HandlePreNMI", + "func_80175E68": "PadMgr_GetInputNoLock", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index d6821e4aa..ba751f02a 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2678,33 +2678,33 @@ asm/non_matchings/code/listalloc/func_80174AB4.s,func_80174AB4,0x80174AB4,0x1B asm/non_matchings/code/listalloc/func_80174B20.s,func_80174B20,0x80174B20,0x20 asm/non_matchings/code/listalloc/func_80174BA0.s,func_80174BA0,0x80174BA0,0x14 asm/non_matchings/code/main/main.s,main,0x80174BF0,0xC8 -asm/non_matchings/code/padmgr/Padmgr_GetControllerBitmask.s,Padmgr_GetControllerBitmask,0x80174F10,0x5 -asm/non_matchings/code/padmgr/func_80174F24.s,func_80174F24,0x80174F24,0x8 -asm/non_matchings/code/padmgr/func_80174F44.s,func_80174F44,0x80174F44,0xE -asm/non_matchings/code/padmgr/func_80174F7C.s,func_80174F7C,0x80174F7C,0x8 -asm/non_matchings/code/padmgr/func_80174F9C.s,func_80174F9C,0x80174F9C,0xE -asm/non_matchings/code/padmgr/Padmgr_GetEventCallback.s,Padmgr_GetEventCallback,0x80174FD4,0xD -asm/non_matchings/code/padmgr/func_80175008.s,func_80175008,0x80175008,0xD -asm/non_matchings/code/padmgr/Padmgr_SetEventCallback.s,Padmgr_SetEventCallback,0x8017503C,0xC -asm/non_matchings/code/padmgr/func_8017506C.s,func_8017506C,0x8017506C,0xC -asm/non_matchings/code/padmgr/Padmgr_Lock.s,Padmgr_Lock,0x8017509C,0xC -asm/non_matchings/code/padmgr/Padmgr_Unlock.s,Padmgr_Unlock,0x801750CC,0xC -asm/non_matchings/code/padmgr/func_801750FC.s,func_801750FC,0x801750FC,0x9A -asm/non_matchings/code/padmgr/func_80175364.s,func_80175364,0x80175364,0x34 -asm/non_matchings/code/padmgr/func_80175434.s,func_80175434,0x80175434,0x6 -asm/non_matchings/code/padmgr/func_8017544C.s,func_8017544C,0x8017544C,0xA +asm/non_matchings/code/padmgr/PadMgr_GetValidControllersMask.s,PadMgr_GetValidControllersMask,0x80174F10,0x5 +asm/non_matchings/code/padmgr/PadMgr_SetRumbleRetraceCallback.s,PadMgr_SetRumbleRetraceCallback,0x80174F24,0x8 +asm/non_matchings/code/padmgr/PadMgr_UnsetRumbleRetraceCallback.s,PadMgr_UnsetRumbleRetraceCallback,0x80174F44,0xE +asm/non_matchings/code/padmgr/PadMgr_SetInputRetraceCallback.s,PadMgr_SetInputRetraceCallback,0x80174F7C,0x8 +asm/non_matchings/code/padmgr/PadMgr_UnsetInputRetraceCallback.s,PadMgr_UnsetInputRetraceCallback,0x80174F9C,0xE +asm/non_matchings/code/padmgr/PadMgr_AcquireSerialEventQueue.s,PadMgr_AcquireSerialEventQueue,0x80174FD4,0xD +asm/non_matchings/code/padmgr/PadMgr_VoiceAcquireSerialEventQueue.s,PadMgr_VoiceAcquireSerialEventQueue,0x80175008,0xD +asm/non_matchings/code/padmgr/PadMgr_ReleaseSerialEventQueue.s,PadMgr_ReleaseSerialEventQueue,0x8017503C,0xC +asm/non_matchings/code/padmgr/PadMgr_VoiceReleaseSerialEventQueue.s,PadMgr_VoiceReleaseSerialEventQueue,0x8017506C,0xC +asm/non_matchings/code/padmgr/PadMgr_LockPadData.s,PadMgr_LockPadData,0x8017509C,0xC +asm/non_matchings/code/padmgr/PadMgr_UnlockPadData.s,PadMgr_UnlockPadData,0x801750CC,0xC +asm/non_matchings/code/padmgr/PadMgr_UpdateRumble.s,PadMgr_UpdateRumble,0x801750FC,0x9A +asm/non_matchings/code/padmgr/PadMgr_RumbleStop.s,PadMgr_RumbleStop,0x80175364,0x34 +asm/non_matchings/code/padmgr/PadMgr_RumblePause.s,PadMgr_RumblePause,0x80175434,0x6 +asm/non_matchings/code/padmgr/PadMgr_RumbleSetSingle.s,PadMgr_RumbleSetSingle,0x8017544C,0xA asm/non_matchings/code/padmgr/PadMgr_RumbleSet.s,PadMgr_RumbleSet,0x80175474,0x13 asm/non_matchings/code/padmgr/PadMgr_ControllerHasRumblePak.s,PadMgr_ControllerHasRumblePak,0x801754C0,0x8 -asm/non_matchings/code/padmgr/Padmgr_CalcStickEdges.s,Padmgr_CalcStickEdges,0x801754E0,0xB1 -asm/non_matchings/code/padmgr/Padmgr_ParseState.s,Padmgr_ParseState,0x801757A4,0x86 -asm/non_matchings/code/padmgr/func_801759BC.s,func_801759BC,0x801759BC,0x49 -asm/non_matchings/code/padmgr/func_80175AE0.s,func_80175AE0,0x80175AE0,0x68 -asm/non_matchings/code/padmgr/Padmgr_Update.s,Padmgr_Update,0x80175C80,0x6F -asm/non_matchings/code/padmgr/Padmgr_Stop.s,Padmgr_Stop,0x80175E3C,0xB -asm/non_matchings/code/padmgr/func_80175E68.s,func_80175E68,0x80175E68,0x4C -asm/non_matchings/code/padmgr/Padmgr_GetInput.s,Padmgr_GetInput,0x80175F98,0xF -asm/non_matchings/code/padmgr/Padmgr_GetInput2.s,Padmgr_GetInput2,0x80175FD4,0xF -asm/non_matchings/code/padmgr/Padmgr_ThreadEntry.s,Padmgr_ThreadEntry,0x80176010,0x61 +asm/non_matchings/code/padmgr/PadMgr_AdjustInput.s,PadMgr_AdjustInput,0x801754E0,0xB1 +asm/non_matchings/code/padmgr/PadMgr_UpdateInputs.s,PadMgr_UpdateInputs,0x801757A4,0x86 +asm/non_matchings/code/padmgr/PadMgr_InitVoice.s,PadMgr_InitVoice,0x801759BC,0x49 +asm/non_matchings/code/padmgr/PadMgr_UpdateConnections.s,PadMgr_UpdateConnections,0x80175AE0,0x68 +asm/non_matchings/code/padmgr/PadMgr_HandleRetrace.s,PadMgr_HandleRetrace,0x80175C80,0x6F +asm/non_matchings/code/padmgr/PadMgr_HandlePreNMI.s,PadMgr_HandlePreNMI,0x80175E3C,0xB +asm/non_matchings/code/padmgr/PadMgr_GetInputNoLock.s,PadMgr_GetInputNoLock,0x80175E68,0x4C +asm/non_matchings/code/padmgr/PadMgr_GetInput.s,PadMgr_GetInput,0x80175F98,0xF +asm/non_matchings/code/padmgr/PadMgr_GetInput2.s,PadMgr_GetInput2,0x80175FD4,0xF +asm/non_matchings/code/padmgr/PadMgr_ThreadEntry.s,PadMgr_ThreadEntry,0x80176010,0x61 asm/non_matchings/code/padmgr/PadMgr_Init.s,PadMgr_Init,0x80176194,0x3B asm/non_matchings/code/sched/Sched_SwapFramebuffer.s,Sched_SwapFramebuffer,0x80176280,0x25 asm/non_matchings/code/sched/Sched_RetraceUpdateFramebuffer.s,Sched_RetraceUpdateFramebuffer,0x80176314,0x14 From c84eab6efbb10651ef99b8850588df48ed1e1559 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Fri, 26 May 2023 17:28:27 -0700 Subject: [PATCH 02/36] `z_fbdemo_wipe1` OK and assorted asset cleanup (#1244) --- ...{ovl_Arrow_fire.xml => ovl_Arrow_Fire.xml} | 0 .../ovl_fbdemo_triforce.xml} | 0 assets/xml/overlays/ovl_fbdemo_wipe1.xml | 9 ++ spec | 3 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 2 +- .../ovl_fbdemo_triforce/z_fbdemo_triforce.c | 2 +- .../fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c | 127 +++++++++++++++--- .../fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h | 12 +- 8 files changed, 130 insertions(+), 25 deletions(-) rename assets/xml/overlays/{ovl_Arrow_fire.xml => ovl_Arrow_Fire.xml} (100%) rename assets/xml/{objects/object_fbdemo_triforce.xml => overlays/ovl_fbdemo_triforce.xml} (100%) create mode 100644 assets/xml/overlays/ovl_fbdemo_wipe1.xml diff --git a/assets/xml/overlays/ovl_Arrow_fire.xml b/assets/xml/overlays/ovl_Arrow_Fire.xml similarity index 100% rename from assets/xml/overlays/ovl_Arrow_fire.xml rename to assets/xml/overlays/ovl_Arrow_Fire.xml diff --git a/assets/xml/objects/object_fbdemo_triforce.xml b/assets/xml/overlays/ovl_fbdemo_triforce.xml similarity index 100% rename from assets/xml/objects/object_fbdemo_triforce.xml rename to assets/xml/overlays/ovl_fbdemo_triforce.xml diff --git a/assets/xml/overlays/ovl_fbdemo_wipe1.xml b/assets/xml/overlays/ovl_fbdemo_wipe1.xml new file mode 100644 index 000000000..281c8ebfb --- /dev/null +++ b/assets/xml/overlays/ovl_fbdemo_wipe1.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/spec b/spec index ef85a1764..4b8481a73 100644 --- a/spec +++ b/spec @@ -3194,8 +3194,7 @@ beginseg name "ovl_fbdemo_wipe1" compress include "build/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.o" - include "build/data/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1.data.o" - include "build/data/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1.reloc.o" + include "build/src/overlays/fbdemos/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index 971b778be..c356a5f17 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -19,7 +19,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play); void FireArrow_ChargeAndWait(ArrowFire* this, PlayState* play); void FireArrow_Fly(ArrowFire* this, PlayState* play); -#include "overlays/ovl_Arrow_fire/ovl_Arrow_Fire.c" +#include "overlays/ovl_Arrow_Fire/ovl_Arrow_Fire.c" ActorInit Arrow_Fire_InitVars = { ACTOR_ARROW_FIRE, diff --git a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c index c4eb826c7..cf1000add 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c +++ b/src/overlays/fbdemos/ovl_fbdemo_triforce/z_fbdemo_triforce.c @@ -6,7 +6,7 @@ #include "global.h" #include "z_fbdemo_triforce.h" -#include "assets/objects/object_fbdemo_triforce/ovl_fbdemo_triforce.c" +#include "assets/overlays/ovl_fbdemo_triforce/ovl_fbdemo_triforce.c" void* TransitionTriforce_Init(void* thisx); void TransitionTriforce_Destroy(void* thisx); diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c index 1ce5f0d59..94285c45b 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.c @@ -7,6 +7,8 @@ #include "global.h" #include "z_fbdemo_wipe1.h" +#define THIS ((TransitionWipe1*)thisx) + void* TransitionWipe1_Init(void* thisx); void TransitionWipe1_Destroy(void* thisx); void TransitionWipe1_Update(void* thisx, s32 updateRate); @@ -17,35 +19,120 @@ void TransitionWipe1_SetColor(void* thisx, u32 color); void TransitionWipe1_SetEnvColor(void* thisx, u32 color); s32 TransitionWipe1_IsDone(void* thisx); -#if 0 +#include "assets/overlays/ovl_fbdemo_wipe1/ovl_fbdemo_wipe1.c" + TransitionInit TransitionWipe1_InitVars = { - TransitionWipe1_Init, - TransitionWipe1_Destroy, - TransitionWipe1_Update, - TransitionWipe1_Draw, - TransitionWipe1_Start, - TransitionWipe1_SetType, - TransitionWipe1_SetColor, - TransitionWipe1_SetEnvColor, - TransitionWipe1_IsDone, + TransitionWipe1_Init, TransitionWipe1_Destroy, TransitionWipe1_Update, + TransitionWipe1_Draw, TransitionWipe1_Start, TransitionWipe1_SetType, + TransitionWipe1_SetColor, TransitionWipe1_SetEnvColor, TransitionWipe1_IsDone, }; -#endif +typedef enum { + /* 0 */ TRANS_WIPE1_DIR_IN, + /* 1 */ TRANS_WIPE1_DIR_OUT +} TransitionWipe1Direction; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Start.s") +void TransitionWipe1_Start(void* thisx) { + TransitionWipe1* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Init.s") + this->isDone = false; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Destroy.s") + if (this->direction != TRANS_WIPE1_DIR_IN) { + this->texY = (s32)(83.25f * (1 << 2)); + } else { + this->texY = (s32)(153.0f * (1 << 2)); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Update.s") + guPerspective(&this->projection, &this->normal, 60.0f, (4.0f / 3.0f), 10.0f, 12800.0f, 1.0f); + guLookAt(&this->lookAt, 0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_Draw.s") +void* TransitionWipe1_Init(void* thisx) { + TransitionWipe1* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_IsDone.s") + bzero(this, sizeof(TransitionWipe1)); + return this; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_SetType.s") +void TransitionWipe1_Destroy(void* thisx) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_SetColor.s") +void TransitionWipe1_Update(void* thisx, s32 updateRate) { + TransitionWipe1* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe1/TransitionWipe1_SetEnvColor.s") + if (this->direction != TRANS_WIPE1_DIR_IN) { + this->texY += (((void)0, gSaveContext.transWipeSpeed) * 3) / updateRate; + if (this->texY >= (s32)(153.0f * (1 << 2))) { + this->texY = (s32)(153.0f * (1 << 2)); + this->isDone = true; + } + } else { + this->texY -= (((void)0, gSaveContext.transWipeSpeed) * 3) / updateRate; + if (this->texY <= (s32)(83.25f * (1 << 2))) { + this->texY = (s32)(83.25f * (1 << 2)); + this->isDone = true; + } + } +} + +void TransitionWipe1_Draw(void* thisx, Gfx** gfxP) { + Gfx* gfx = *gfxP; + Mtx* modelView; + TransitionWipe1* this = THIS; + Gfx* texScroll; + s32 pad[4]; + + modelView = this->modelView[this->frame]; + this->frame ^= 1; + + guScale(&modelView[0], 0.56f, 0.56f, 1.0f); + guRotate(&modelView[1], 0.0f, 0.0f, 0.0f, 1.0f); + guTranslate(&modelView[2], 0.0f, 0.0f, 0.0f); + gDPPipeSync(gfx++); + texScroll = Gfx_BranchTexScroll(&gfx, this->texX, this->texY, 0, 0); + gSPSegment(gfx++, 8, texScroll); + gDPSetPrimColor(gfx++, 0, 0x80, this->primColor.r, this->primColor.g, this->primColor.b, 255); + gSPMatrix(gfx++, &this->projection, G_MTX_LOAD | G_MTX_PROJECTION); + gSPPerspNormalize(gfx++, this->normal); + gSPMatrix(gfx++, &this->lookAt, G_MTX_MUL | G_MTX_PROJECTION); + gSPMatrix(gfx++, &modelView[0], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(gfx++, &modelView[1], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPMatrix(gfx++, &modelView[2], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, sTransWipe1DL); + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +s32 TransitionWipe1_IsDone(void* thisx) { + TransitionWipe1* this = THIS; + + return this->isDone; +} + +void TransitionWipe1_SetType(void* thisx, s32 type) { + TransitionWipe1* this = THIS; + + if (type == TRANS_INSTANCE_TYPE_FILL_OUT) { + this->direction = TRANS_WIPE1_DIR_OUT; + } else { + this->direction = TRANS_WIPE1_DIR_IN; + } + + if (this->direction != TRANS_WIPE1_DIR_IN) { + this->texY = (s32)(83.25f * (1 << 2)); + } else { + this->texY = (s32)(153.0f * (1 << 2)); + } +} + +void TransitionWipe1_SetColor(void* thisx, u32 color) { + TransitionWipe1* this = THIS; + + this->primColor.rgba = color; +} + +void TransitionWipe1_SetEnvColor(void* thisx, u32 color) { + TransitionWipe1* this = THIS; + + this->envColor.rgba = color; +} diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h index 39f881b39..4906e531c 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe1/z_fbdemo_wipe1.h @@ -5,7 +5,17 @@ #include "color.h" typedef struct { - /* 0x000 */ char unk_0[0x218]; + /* 0x000 */ Color_RGBA8_u32 primColor; + /* 0x004 */ Color_RGBA8_u32 envColor; + /* 0x008 */ u8 direction; + /* 0x009 */ u8 frame; + /* 0x00A */ u8 isDone; + /* 0x00C */ u16 texX; + /* 0x00E */ u16 texY; + /* 0x010 */ u16 normal; + /* 0x018 */ Mtx projection; + /* 0x058 */ Mtx lookAt; + /* 0x098 */ Mtx modelView[2][3]; } TransitionWipe1; // size = 0x218 #endif From 74d881e92168b467fced28c47c3d8de17bf32d38 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Fri, 26 May 2023 20:54:30 -0400 Subject: [PATCH 03/36] `gfx.h` (#1248) * gfx.h * move rcp functions and variables to gfx.h * minor cleanup * Update include/gfx.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * format --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 81 ------- include/gfx.h | 197 ++++++++++++++++++ include/macros.h | 37 ---- include/variables.h | 3 - include/z64.h | 84 +------- src/code/z_rcp.c | 4 +- src/code/z_room.c | 4 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- 8 files changed, 203 insertions(+), 209 deletions(-) create mode 100644 include/gfx.h diff --git a/include/functions.h b/include/functions.h index 35010d601..292c5e210 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1597,87 +1597,6 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist); void Player_SetFeetPos(PlayState* play, Player* player, s32 limbIndex); void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor); -Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i); -Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i); -void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i); -Gfx* func_8012BFC4(Gfx* gfx); -Gfx* func_8012BFEC(Gfx* gfx); -Gfx* func_8012C014(Gfx* gfx); -void func_8012C058(GraphicsContext* gfxCtx); -void func_8012C080(GraphicsContext* gfxCtx); -void func_8012C0A8(GraphicsContext* gfxCtx); -void func_8012C0D0(GraphicsContext* gfxCtx); -void func_8012C0F8(GraphicsContext* gfxCtx); -void func_8012C120(GraphicsContext* gfxCtx); -void func_8012C148(GraphicsContext* gfxCtx); -void func_8012C170(GraphicsContext* gfxCtx); -Gfx* func_8012C198(Gfx* gfx); -void func_8012C1C0(GraphicsContext* gfxCtx); -Gfx* func_8012C1EC(Gfx* gfx); -void func_8012C214(GraphicsContext* gfxCtx); -void func_8012C240(GraphicsContext* gfxCtx); -void func_8012C268(PlayState* play); -void func_8012C28C(GraphicsContext* gfxCtx); -Gfx* func_8012C2B4(Gfx* gfx); -void func_8012C2DC(GraphicsContext* gfxCtx); -Gfx* func_8012C304(Gfx* gfx); -void func_8012C32C(GraphicsContext* gfxCtx); -void func_8012C354(GraphicsContext* gfxCtx); -void func_8012C37C(GraphicsContext* gfxCtx); -Gfx* func_8012C3A4(Gfx* gfx); -Gfx* func_8012C3CC(Gfx* gfx); -void func_8012C3F4(GraphicsContext* gfxCtx); -void func_8012C420(GraphicsContext* gfxCtx); -void func_8012C448(GraphicsContext* gfxCtx); -void func_8012C470(GraphicsContext* gfxCtx); -Gfx* func_8012C498(Gfx* gfx); -void func_8012C4C0(GraphicsContext* gfxCtx); -void func_8012C4E8(GraphicsContext* gfxCtx); -void func_8012C510(GraphicsContext* gfxCtx); -void func_8012C538(GraphicsContext* gfxCtx); -void func_8012C560(GraphicsContext* gfxCtx); -void func_8012C588(GraphicsContext* gfxCtx); -void func_8012C5B0(GraphicsContext* gfxCtx); -void func_8012C5D8(GraphicsContext* gfxCtx); -Gfx* func_8012C600(Gfx* gfx); -void func_8012C628(GraphicsContext* gfxCtx); -void func_8012C654(GraphicsContext* gfxCtx); -void func_8012C680(Gfx** gfxp); -void func_8012C6AC(GraphicsContext* gfxCtx); -void func_8012C6D4(GraphicsContext* gfxCtx); -void func_8012C6FC(GraphicsContext* gfxCtx); -Gfx* func_8012C724(Gfx* gfx); -Gfx* func_8012C74C(Gfx* gfx); -Gfx* func_8012C774(Gfx* gfx); -Gfx* func_8012C7B8(Gfx* gfx); -Gfx* func_8012C7FC(Gfx* gfx); -Gfx* func_8012C840(Gfx* gfx); -Gfx* func_8012C868(Gfx* gfx); -void func_8012C8AC(GraphicsContext* gfxCtx); -void func_8012C8D4(GraphicsContext* gfxCtx); -void func_8012C8FC(GraphicsContext* gfxCtx); -void func_8012C924(GraphicsContext* gfxCtx); -void func_8012C94C(GraphicsContext* gfxCtx); -void func_8012C974(GraphicsContext* gfxCtx); -void func_8012C9BC(GraphicsContext* gfxCtx); -void func_8012C9E4(GraphicsContext* gfxCtx); -void func_8012CA0C(Gfx** gfxp); -void func_8012CA38(GraphicsContext* gfxCtx); -Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); -void func_8012CB04(Gfx** gfxp, u32 x, u32 y); -Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y); -Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height); -Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2); -Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a); -Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a); -Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s32 a); -void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b); -void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); -void func_8012D40C(f32* param_1, f32* param_2, s16* param_3); - void Room_Noop(PlayState* play, Room* room, Input* input, s32 arg3); void Room_Init(PlayState* play, RoomContext* roomCtx); size_t Room_AllocateAndLoad(PlayState* play, RoomContext* roomCtx); diff --git a/include/gfx.h b/include/gfx.h new file mode 100644 index 000000000..e08df2013 --- /dev/null +++ b/include/gfx.h @@ -0,0 +1,197 @@ +#ifndef GFX_H +#define GFX_H + +#include "ultra64.h" +#include "PR/sched.h" +#include "thga.h" +#include "alignment.h" + +struct GameState; + +typedef struct { + /* 0x000 */ Gfx taskStart[9]; + /* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl + /* 0x088 */ Gfx clearFrameBuffer[5]; // original name: clear_fb_dl + /* 0x0B0 */ Gfx setupBuffers[6]; // setup framebuffer and zbuffer + /* 0x0E0 */ Gfx unk_E0[12]; // unused + /* 0x140 */ Gfx syncSegments[17]; + /* 0x1C8 */ Gfx setScissor[2]; + /* 0x1D8 */ Gfx unk_1D8[25]; // unused + /* 0x2A0 */ Gfx disps[5]; + /* 0x2C8 */ Gfx clearFillRect[3]; // fillrect for clearing buffers + /* 0x2E0 */ Gfx fillRect[3]; // fillrect for general purpose + /* 0x2F8 */ Gfx debugDisp[1]; +} GfxMasterList; // size = 0x300 + +#define GFXPOOL_HEAD_MAGIC 0x1234 +#define GFXPOOL_TAIL_MAGIC 0x5678 + +typedef struct GfxPool { + /* 0x00000 */ u16 headMagic; // GFXPOOL_HEAD_MAGIC + /* 0x00008 */ GfxMasterList master; + /* 0x00308 */ Gfx polyXluBuffer[0x800]; + /* 0x04308 */ Gfx overlayBuffer[0x400]; + /* 0x06308 */ Gfx workBuffer[0x40]; + /* 0x06508 */ Gfx debugBuffer[0x40]; + /* 0x06708 */ Gfx polyOpaBuffer[0x3380]; + /* 0x20308 */ u16 tailMagic; // GFXPOOL_TAIL_MAGIC +} GfxPool; // size = 0x20310 + +typedef struct GraphicsContext { + /* 0x000 */ Gfx* polyOpaBuffer; // Pointer to "Zelda 0" + /* 0x004 */ Gfx* polyXluBuffer; // Pointer to "Zelda 1" + /* 0x008 */ char unk_8[0x8]; // Unused, could this be pointers to "Zelda 2" / "Zelda 3" + /* 0x010 */ Gfx* overlayBuffer; // Pointer to "Zelda 4" + /* 0x014 */ u32 unk_14; + /* 0x018 */ char unk_18[0x20]; + /* 0x038 */ OSMesg msgBuff[8]; + /* 0x058 */ OSMesgQueue* schedMsgQ; + /* 0x05C */ OSMesgQueue queue; + /* 0x074 */ char unk_74[0x04]; + /* 0x078 */ OSScTask task; + /* 0x0E0 */ char unk_E0[0xD0]; + /* 0x1B0 */ Gfx* workBuffer; + /* 0x1B4 */ TwoHeadGfxArena work; + /* 0x1C4 */ Gfx* debugBuffer; + /* 0x1C8 */ TwoHeadGfxArena debug; + /* 0x1D8 */ UNK_TYPE1 unk_1D8[0xAC]; + /* 0x284 */ OSViMode* viMode; + /* 0x288 */ void* zbuffer; + /* 0x28C */ char unk_28C[0x1C]; + /* 0x2A8 */ TwoHeadGfxArena overlay; // "Zelda 4" + /* 0x2B8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" + /* 0x2C8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" + /* 0x2D8 */ u32 gfxPoolIdx; + /* 0x2DC */ u16* curFrameBuffer; + /* 0x2E0 */ char unk_2E0[0x4]; + /* 0x2E4 */ u32 viConfigFeatures; + /* 0x2E8 */ char unk_2E8[0x2]; + /* 0x2EA */ u8 updateViMode; + /* 0x2EB */ u8 framebufferIndex; + /* 0x2EC */ void (*callback)(struct GraphicsContext*, u32); + /* 0x2F0 */ u32 callbackArg; + /* 0x2F4 */ f32 xScale; + /* 0x2F8 */ f32 yScale; + /* 0x2FC */ GfxMasterList* masterList; +} GraphicsContext; // size = 0x300 + +Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); +Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); +Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); +Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i); +Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i); +void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i); +Gfx* func_8012BFC4(Gfx* gfx); +Gfx* func_8012BFEC(Gfx* gfx); +Gfx* func_8012C014(Gfx* gfx); +void func_8012C058(GraphicsContext* gfxCtx); +void func_8012C080(GraphicsContext* gfxCtx); +void func_8012C0A8(GraphicsContext* gfxCtx); +void func_8012C0D0(GraphicsContext* gfxCtx); +void func_8012C0F8(GraphicsContext* gfxCtx); +void func_8012C120(GraphicsContext* gfxCtx); +void func_8012C148(GraphicsContext* gfxCtx); +void func_8012C170(GraphicsContext* gfxCtx); +Gfx* func_8012C198(Gfx* gfx); +void func_8012C1C0(GraphicsContext* gfxCtx); +Gfx* func_8012C1EC(Gfx* gfx); +void func_8012C214(GraphicsContext* gfxCtx); +void func_8012C240(GraphicsContext* gfxCtx); +void func_8012C268(struct GameState* gameState); +void func_8012C28C(GraphicsContext* gfxCtx); +Gfx* func_8012C2B4(Gfx* gfx); +void func_8012C2DC(GraphicsContext* gfxCtx); +Gfx* func_8012C304(Gfx* gfx); +void func_8012C32C(GraphicsContext* gfxCtx); +void func_8012C354(GraphicsContext* gfxCtx); +void func_8012C37C(GraphicsContext* gfxCtx); +Gfx* func_8012C3A4(Gfx* gfx); +Gfx* func_8012C3CC(Gfx* gfx); +void func_8012C3F4(GraphicsContext* gfxCtx); +void func_8012C420(GraphicsContext* gfxCtx); +void func_8012C448(GraphicsContext* gfxCtx); +void func_8012C470(GraphicsContext* gfxCtx); +Gfx* func_8012C498(Gfx* gfx); +void func_8012C4C0(GraphicsContext* gfxCtx); +void func_8012C4E8(GraphicsContext* gfxCtx); +void func_8012C510(GraphicsContext* gfxCtx); +void func_8012C538(GraphicsContext* gfxCtx); +void func_8012C560(GraphicsContext* gfxCtx); +void func_8012C588(GraphicsContext* gfxCtx); +void func_8012C5B0(GraphicsContext* gfxCtx); +void func_8012C5D8(GraphicsContext* gfxCtx); +Gfx* func_8012C600(Gfx* gfx); +void func_8012C628(GraphicsContext* gfxCtx); +void func_8012C654(GraphicsContext* gfxCtx); +void func_8012C680(Gfx** gfxp); +void func_8012C6AC(GraphicsContext* gfxCtx); +void func_8012C6D4(GraphicsContext* gfxCtx); +void func_8012C6FC(GraphicsContext* gfxCtx); +Gfx* func_8012C724(Gfx* gfx); +Gfx* func_8012C74C(Gfx* gfx); +Gfx* func_8012C774(Gfx* gfx); +Gfx* func_8012C7B8(Gfx* gfx); +Gfx* func_8012C7FC(Gfx* gfx); +Gfx* func_8012C840(Gfx* gfx); +Gfx* func_8012C868(Gfx* gfx); +void func_8012C8AC(GraphicsContext* gfxCtx); +void func_8012C8D4(GraphicsContext* gfxCtx); +void func_8012C8FC(GraphicsContext* gfxCtx); +void func_8012C924(GraphicsContext* gfxCtx); +void func_8012C94C(GraphicsContext* gfxCtx); +void func_8012C974(GraphicsContext* gfxCtx); +void func_8012C9BC(GraphicsContext* gfxCtx); +void func_8012C9E4(GraphicsContext* gfxCtx); +void func_8012CA0C(Gfx** gfxp); +void func_8012CA38(GraphicsContext* gfxCtx); +Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); +void func_8012CB04(Gfx** gfxp, u32 x, u32 y); +Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y); +Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height); +Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2); +Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a); +Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a); +Gfx* Gfx_PrimColor(GraphicsContext* gfxCtx, s32 lodfrac, s32 r, s32 g, s32 b, s32 a); +void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g, u8 b); +void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); +void func_8012D40C(f32* param_1, f32* param_2, s16* param_3); + +extern Gfx sSetupDL[73 * 6]; +extern Gfx gEmptyDL[]; + +#define WORK_DISP __gfxCtx->work.p +#define POLY_OPA_DISP __gfxCtx->polyOpa.p +#define POLY_XLU_DISP __gfxCtx->polyXlu.p +#define OVERLAY_DISP __gfxCtx->overlay.p +#define DEBUG_DISP __gfxCtx->debug.p + +// __gfxCtx shouldn't be used directly. +// Use the DISP macros defined above when writing to display buffers. +#define OPEN_DISPS(gfxCtx) \ + { \ + GraphicsContext* __gfxCtx = gfxCtx; \ + s32 __dispPad + +#define CLOSE_DISPS(gfxCtx) \ + (void)0; \ + } \ + (void)0 + +#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - ALIGN16(size)))) + +// Custom gbi macro +#define gDPSetTileCustom(pkt, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ + { \ + gDPPipeSync(pkt); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, \ + masks, shifts); \ + gDPTileSync(pkt); \ + gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, \ + cms, masks, shifts); \ + gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ + } \ + (void)0 + +#endif diff --git a/include/macros.h b/include/macros.h index 70e07259f..9e74c40cd 100644 --- a/include/macros.h +++ b/include/macros.h @@ -77,26 +77,6 @@ #define ALIGN64(val) (((val) + 0x3F) & ~0x3F) #define ALIGN256(val) (((val) + 0xFF) & ~0xFF) -extern GraphicsContext* __gfxCtx; - -#define WORK_DISP __gfxCtx->work.p -#define POLY_OPA_DISP __gfxCtx->polyOpa.p -#define POLY_XLU_DISP __gfxCtx->polyXlu.p -#define OVERLAY_DISP __gfxCtx->overlay.p -#define DEBUG_DISP __gfxCtx->debug.p - -// __gfxCtx shouldn't be used directly. -// Use the DISP macros defined above when writing to display buffers. -#define OPEN_DISPS(gfxCtx) \ - { \ - GraphicsContext* __gfxCtx = gfxCtx; \ - s32 __dispPad - -#define CLOSE_DISPS(gfxCtx) \ - (void)0; \ - } \ - (void)0 - /** * `x` vertex x * `y` vertex y @@ -114,23 +94,6 @@ extern GraphicsContext* __gfxCtx; #define VTX_T(x, y, z, s, t, cr, cg, cb, a) \ { { x, y, z }, 0, { s, t }, { cr, cg, cb, a }, } -#define GRAPH_ALLOC(gfxCtx, size) ((void*)((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - ALIGN16(size)))) - -// Custom gbi macro -#define gDPSetTileCustom(pkt, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ - { \ - gDPPipeSync(pkt); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, \ - masks, shifts); \ - gDPTileSync(pkt); \ - gDPSetTile(pkt, fmt, siz, (((width)*siz##_TILE_BYTES) + 7) >> 3, 0, G_TX_RENDERTILE, pal, cmt, maskt, shiftt, \ - cms, masks, shifts); \ - gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ - } \ - (void)0 - #define SQ(x) ((x) * (x)) #define ABS(x) ((x) >= 0 ? (x) : -(x)) #define ABS_ALT(x) ((x) < 0 ? -(x) : (x)) diff --git a/include/variables.h b/include/variables.h index c8b511a7e..4e3559077 100644 --- a/include/variables.h +++ b/include/variables.h @@ -561,9 +561,6 @@ extern struct_80124618 D_801C0490[]; extern Gfx gCullBackDList[]; extern Gfx gCullFrontDList[]; -extern Gfx sSetupDL[438]; -extern Gfx sFillSetupDL[12]; -extern Gfx gEmptyDL[1]; extern u32 gBitFlags[32]; extern u16 gEquipMasks[]; extern u16 gEquipNegMasks[]; diff --git a/include/z64.h b/include/z64.h index e9bdcfe62..6388bc120 100644 --- a/include/z64.h +++ b/include/z64.h @@ -25,6 +25,7 @@ #include "sfx.h" #include "message_data_static.h" +#include "gfx.h" #include "gfxprint.h" #include "sys_matrix.h" #include "tha.h" @@ -108,89 +109,6 @@ typedef struct { /* 0x8 */ void* end; } PolygonType2; // size = 0xC -typedef struct { - /* 0x000 */ Gfx taskStart[9]; - /* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl - /* 0x088 */ Gfx clearFrameBuffer[5]; // original name: clear_fb_dl - /* 0x0B0 */ Gfx setupBuffers[6]; // setup framebuffer and zbuffer - /* 0x0E0 */ Gfx unk_E0[12]; // unused - /* 0x140 */ Gfx syncSegments[17]; - /* 0x1C8 */ Gfx setScissor[2]; - /* 0x1D8 */ Gfx unk_1D8[25]; // unused - /* 0x2A0 */ Gfx disps[5]; - /* 0x2C8 */ Gfx clearFillRect[3]; // fillrect for clearing buffers - /* 0x2E0 */ Gfx fillRect[3]; // fillrect for general purpose - /* 0x2F8 */ Gfx debugDisp[1]; -} GfxMasterList; // size = 0x300 - -#define GFXPOOL_HEAD_MAGIC 0x1234 -#define GFXPOOL_TAIL_MAGIC 0x5678 - -typedef struct { - /* 0x00000 */ u16 headMagic; // 1234 - /* 0x00008 */ GfxMasterList master; - /* 0x00308 */ Gfx polyXluBuffer[2048]; - /* 0x04308 */ Gfx overlayBuffer[1024]; - /* 0x06308 */ Gfx workBuffer[64]; - /* 0x06508 */ Gfx debugBuffer[64]; - /* 0x06708 */ Gfx polyOpaBuffer[13184]; - /* 0x20308 */ u16 tailMagic; // 5678 -} GfxPool; // size = 0x20310 - -typedef struct GraphicsContext { - /* 0x000 */ Gfx* polyOpaBuffer; // Pointer to "Zelda 0" - /* 0x004 */ Gfx* polyXluBuffer; // Pointer to "Zelda 1" - /* 0x008 */ char unk_8[0x8]; // Unused, could this be pointers to "Zelda 2" / "Zelda 3" - /* 0x010 */ Gfx* overlayBuffer; // Pointer to "Zelda 4" - /* 0x014 */ u32 unk_14; - /* 0x018 */ char unk_18[0x20]; - /* 0x038 */ OSMesg msgBuff[8]; - /* 0x058 */ OSMesgQueue* schedMsgQ; - /* 0x05C */ OSMesgQueue queue; - /* 0x074 */ char unk_74[0x04]; - /* 0x078 */ OSScTask task; - /* 0x0E0 */ char unk_E0[0xD0]; - /* 0x1B0 */ Gfx* workBuffer; - /* 0x1B4 */ TwoHeadGfxArena work; - /* 0x1C4 */ Gfx* debugBuffer; - /* 0x1C8 */ TwoHeadGfxArena debug; - /* 0x1D8 */ char unk_1D8[0xAC]; - /* 0x284 */ OSViMode* viMode; - /* 0x288 */ void* zbuffer; - /* 0x28C */ char unk_28C[0x1C]; - /* 0x2A8 */ TwoHeadGfxArena overlay; // "Zelda 4" - /* 0x2B8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" - /* 0x2C8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" - /* 0x2D8 */ u32 gfxPoolIdx; - /* 0x2DC */ u16* curFrameBuffer; - /* 0x2E0 */ char unk_2E0[0x4]; - /* 0x2E4 */ u32 viConfigFeatures; - /* 0x2E8 */ char unk_2E8[0x2]; - /* 0x2EA */ u8 updateViMode; - /* 0x2EB */ u8 framebufferIndex; - /* 0x2EC */ void (*callback)(struct GraphicsContext*, u32); - /* 0x2F0 */ u32 callbackArg; - /* 0x2F4 */ f32 xScale; - /* 0x2F8 */ f32 yScale; - /* 0x2FC */ GfxMasterList* masterList; -} GraphicsContext; // size = 0x300 - -typedef enum IRQ_MSG_TYPE { - IRQ_VERTICAL_RETRACE_MSG = 0x1, - IRQ_PRENMI_2_MSG = 0x3, - IRQ_PRENMI_1_MSG = 0x4 -} IRQ_MSG_TYPE; - -typedef enum IRQ_TYPE { - IRQ_VERTICAL_RETRACE = 0x29A, - IRQ_SP = 0x29B, - IRQ_DP = 0x29C, - IRQ_PRENMI_1 = 0x29D, - IRQ_PRENMI_2 = 0x29F, - IRQ_PRENMI_3 = 0x2A0, - IRQ_PRENMI_4 = 0x2A1 -} IRQ_TYPE; - typedef struct { /* 0x00 */ u32 resetting; /* 0x04 */ u32 resetCount; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index b4bb6ea7d..ab972159c 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -897,8 +897,8 @@ void func_8012C240(GraphicsContext* gfxCtx) { gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]); } -void func_8012C268(PlayState* play) { - func_8012C28C(play->state.gfxCtx); +void func_8012C268(GameState* gameState) { + func_8012C28C(gameState->gfxCtx); } void func_8012C28C(GraphicsContext* gfxCtx) { diff --git a/src/code/z_room.c b/src/code/z_room.c index da221ccd4..9fb21dfa2 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -18,7 +18,7 @@ void Room_DrawNormal(PlayState* play, Room* room, u32 flags) { if (flags & ROOM_DRAW_OPA) { func_800BCBF4(&sZeroVec, play); gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); - func_8012C268(play); + func_8012C268(&play->state); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } @@ -85,7 +85,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { if (play->roomCtx.unk74 != NULL) { gSPSegment(POLY_OPA_DISP++, 0x06, play->roomCtx.unk74); } - func_8012C268(play); + func_8012C268(&play->state); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 83d3ce8e1..cedf00861 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -1257,7 +1257,7 @@ void EnTest3_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C268(play); + func_8012C268(&play->state); if (this->player.invincibilityTimer > 0) { s32 temp2; // Must exist for stack order. Could hold the result of CLAMP instead. From 7a5cbf2e208b378848cbdfff6adfb825a92284dd Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sat, 27 May 2023 18:49:19 -0700 Subject: [PATCH 04/36] Namefixer Fixes (#1252) * Fixes * gSaveContext.save.playerData.doubleMagic --- .../kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c | 2 +- tools/namefixer.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 3d7e08221..d5d0368dd 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -605,7 +605,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202); // Magic - //! @bug should be gSaveContext.save.saveInfo.playerData.doubleMagic + //! @bug should be gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 75, 202); // Lottery diff --git a/tools/namefixer.py b/tools/namefixer.py index a3fbddec9..a03cc06cf 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -18,7 +18,7 @@ simpleReplace = { wordReplace = { # Functions "Actor_GetSwitchFlag": "Flags_GetSwitch", - "Math_FAtan2F": "Math_Atan2S_XY", + # "Math_FAtan2F": "Math_Atan2S_XY", // All old Math_FAtan2F should be renamed, so func_80086B30 can be renamed to Math_FAtan2F "Math_Acot2F": "Math_Atan2F_XY", "atan_flip": "Math_Atan2F_XY", "atans": "Math_Atan2S", @@ -830,9 +830,8 @@ wordReplace = { "gSaveContext.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags", "gSaveContext.bomberCode": "gSaveContext.save.saveInfo.bomberCode", "gSaveContext.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount", - "gSaveContext.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", - "gSaveContext.save.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", - "gSaveContext.save.saveInfo.cutscene": "gSaveContext.save.saveInfo.cutsceneIndex", + "gSaveContext.cutscene": "gSaveContext.save.cutsceneIndex", + "gSaveContext.save.cutscene": "gSaveContext.save.cutsceneIndex", "gSaveContext.health": "gSaveContext.save.saveInfo.playerData.health", "gSaveContext.equips": "gSaveContext.save.saveInfo.equips", "gSaveContext.unk_1016": "gSaveContext.jinxTimer", @@ -840,7 +839,7 @@ wordReplace = { "gSaveContext.equips.buttonItems": "gSaveContext.save.equips.buttonItems", "gSaveContext.unk_48C8": "gSaveContext.dungeonIndex", "gSaveContext.save.saveInfo.playerData.magicAcquired": "gSaveContext.save.saveInfo.playerData.isMagicAcquired", - "gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired", + "gSaveContext.save.playerData.doubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired", "gSaveContext.unk_3F28": "gSaveContext.magicState", "gSaveContext.unk_3F30": "gSaveContext.magicFillTarget", "gSaveContext.unk_3F2C": "gSaveContext.magicFlag", From 20f7e2199ac4c53095f3bc60ec30958f1bfb5e41 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 28 May 2023 12:19:53 -0600 Subject: [PATCH 05/36] ovl_Bg_Tobira01 OK and documented (#1247) * Decompiled source of tobira01 * Documented and formatted in prep for merge request * Added spacing, renamed unused back to what it was, added definitions, changed 1.6666 to division * Ran weekeventreg script, added additional spaces throughout the file, removed the macros for 0 and 60, updated some missed this casts, renamed spot11 out names * Converted gSaveContext calls over to CLEAR_WEEKEVENTREG calls from review feedback * Reformatted some files * More review feedback * Removed _tex --- assets/xml/objects/object_spot11_obj.xml | 18 ++--- spec | 3 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 3 +- .../actors/ovl_Bg_Tobira01/z_bg_tobira01.c | 79 +++++++++++++++++-- .../actors/ovl_Bg_Tobira01/z_bg_tobira01.h | 11 ++- undefined_syms.txt | 4 - 6 files changed, 92 insertions(+), 26 deletions(-) diff --git a/assets/xml/objects/object_spot11_obj.xml b/assets/xml/objects/object_spot11_obj.xml index c049bb337..58d146203 100644 --- a/assets/xml/objects/object_spot11_obj.xml +++ b/assets/xml/objects/object_spot11_obj.xml @@ -1,13 +1,13 @@  - - - - - - - - - + + + + + + + + + diff --git a/spec b/spec index 4b8481a73..81f25e374 100644 --- a/spec +++ b/spec @@ -3589,8 +3589,7 @@ beginseg name "ovl_Bg_Tobira01" compress include "build/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.o" - include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.data.o" - include "build/data/ovl_Bg_Tobira01/ovl_Bg_Tobira01.reloc.o" + include "build/src/overlays/actors/ovl_Bg_Tobira01/ovl_Bg_Tobira01_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index b2e59a51b..be9413567 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -84,8 +84,7 @@ BgBreakwallStruct D_808B8140[] = { func_808B77D0, NULL }, { OBJECT_IKNINSIDE_OBJ, NULL, object_ikninside_obj_DL_00AEC0, object_ikninside_obj_Matanimheader_00BCB8, NULL, func_808B751C, func_808B7A10, func_808B7D34 }, - { OBJECT_SPOT11_OBJ, object_spot11_obj_DL_0013F0, NULL, NULL, &object_spot11_obj_Colheader_001EB8, func_808B736C, - func_808B77D0, NULL }, + { OBJECT_SPOT11_OBJ, gWoodStepDL, NULL, NULL, &gWoodStepCol, func_808B736C, func_808B77D0, NULL }, }; static InitChainEntry sInitChain[] = { diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index 17722bda2..2eb95f6bb 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -16,7 +16,6 @@ void BgTobira01_Destroy(Actor* thisx, PlayState* play); void BgTobira01_Update(Actor* thisx, PlayState* play); void BgTobira01_Draw(Actor* thisx, PlayState* play); -/* const ActorInit Bg_Tobira01_InitVars = { ACTOR_BG_TOBIRA01, ACTORCAT_PROP, @@ -28,14 +27,80 @@ const ActorInit Bg_Tobira01_InitVars = { (ActorFunc)BgTobira01_Update, (ActorFunc)BgTobira01_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/func_80B12430.s") +void BgTobira01_Action(BgTobira01* this, PlayState* play) { + Player* player = GET_PLAYER(play); + s16 csId = this->dyna.actor.csId; + s16 prevPosYTick; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Init.s") + if (this->cutsceneRequested) { + if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + } else if (CutsceneManager_IsNext(csId)) { + CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); + SET_WEEKEVENTREG(WEEKEVENTREG_88_40); + this->cutsceneRequested = false; + } else { + CutsceneManager_Queue(csId); + } + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (this->posYTick == 0) && + (play->actorCtx.playerImpact.timer != 0) && + (play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND) && + (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) { + this->cutsceneRequested = true; + this->unk16C = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Destroy.s") + prevPosYTick = this->posYTick; + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) { + this->posYTick++; + } else { + this->posYTick--; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Update.s") + this->posYTick = CLAMP(this->posYTick, 0, 60); + if (prevPosYTick != this->posYTick) { + Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_STONEDOOR_OPEN_S - SFX_FLAG); + this->dyna.actor.world.pos.y = this->posY = (this->posYTick * (5.0f / 3.0f)) + this->dyna.actor.home.pos.y; + this->timer = 180; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Tobira01/BgTobira01_Draw.s") + if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && + (DECR(this->timer) == 0)) { + CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + } +} + +void BgTobira01_Init(Actor* thisx, PlayState* play) { + BgTobira01* this = THIS; + + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); + DynaPolyActor_LoadMesh(play, &this->dyna, &gGoronDoorCol); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + Actor_SetScale(&this->dyna.actor, 1.0f); + this->timer = gSaveContext.save.isNight; + this->posYTick = 0; + this->actionFunc = BgTobira01_Action; +} + +void BgTobira01_Destroy(Actor* thisx, PlayState* play) { + BgTobira01* this = THIS; + + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); +} + +void BgTobira01_Update(Actor* thisx, PlayState* play) { + BgTobira01* this = THIS; + + this->actionFunc(this, play); +} + +void BgTobira01_Draw(Actor* thisx, PlayState* play) { + 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++, gGoronDoorDL); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h index 9ddd0233d..b53c2302e 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.h @@ -5,9 +5,16 @@ struct BgTobira01; +typedef void (*BgTobira01ActionFunc)(struct BgTobira01*, PlayState*); + typedef struct BgTobira01 { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x2C]; + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ BgTobira01ActionFunc actionFunc; + /* 0x160 */ s16 posYTick; + /* 0x162 */ s16 timer; + /* 0x164 */ f32 posY; + /* 0x168 */ s32 cutsceneRequested; + /* 0x16C */ s32 unk16C; } BgTobira01; // size = 0x170 #endif // Z_BG_TOBIRA01_H diff --git a/undefined_syms.txt b/undefined_syms.txt index 1e09ceaab..2187673fc 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -586,10 +586,6 @@ D_060005F8 = 0x060005F8; D_06000A20 = 0x06000A20; D_06000040 = 0x06000040; -/* ovl_Bg_Tobira01 */ -D_060011C0 = 0x060011C0; -D_06000088 = 0x06000088; - // ovl_Boss_01 D_06000C44 = 0x06000C44; From efc9df3f56046bf11097715204aee96d433a952e Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 28 May 2023 17:41:37 -0400 Subject: [PATCH 06/36] `ovl_player_actor`: Dawn of a new PR (#1227) * Rename Player_UpdateBottleHeld * Match func_808497A0 * func_80852290 NON_MATCHING * Match func_8083B3B4 * Params cleanup * Match func_8083FBC4 * sfxId cleanups and others * Fix declaration of functions from D_8085D990 * Change D_8085BE84 to be a 2D array * ARRAY_COUNT_2D * Match func_8085ADA0 * func_808426F0 nonmatching * Match func_80852290 * Match func_808426F0 Co-authored-by: engineer124 * Add notes to Player_SetDoAction * Name putAwayCountdown * rebase * Match func_80856918 * format * func_8084933C nonmatching small amount of boomerang documentation * Progress on moving data near where it is used * finish moving data * format * cleanup up remaining data * more match * Some minor cleanups * PlayerCsMode enum * func_80851F18 nonmatching * Fix unk_B10 * Purge ExchangeItemID enum * Rename `targetActor` to `talkActor` * Name `targetedActor` * PLAYER_LIMB_BUF_SIZE Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Change SkelAnime Player functions to take a void pointer for the corresponding buffers * Use PlayerAnimationFrame on Player_DrawImpl * Match func_8082F1AC * Match func_8083D23C * cleanup * Match and clean up func_808373F8 * Match and document func_8083A98C * PLAYER_PARAMS macro and PlayerInitMode enum * Preliminary names for InitMode functions * Match func_8083C8E8 * remove redundant externs * Match func_8084933C * cleanup func_8084933C * Access D_8085BE84 directly instead of using a macro * Match func_8084AC84 * Fix boomearng typo * OK boomerang * cleanup func_8083D168 * untargetedRotY * this->unk_14E = ABS_ALT(var_v1); * GIFIELD macros * sort of a match * Match func_8084C16C Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Use the same trick to match func_808573A4 * Add note on Deku spinning * Match func_8084D18C * Match func_80850D68 * Improve func_80832660 * Match func_80854EFC Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Rename unk_B2A to getItemDrawId * Some cleanup * fix merge issues * format * minor anim docs * Match func_808553F4 * Cleanup func_808553F4 * func_8083D860 nonmatching * Match func_8083D860 * Defake func_80859BA8 * () * Add notes to PlayerAnimGroup enum * underwaterTimer Co-authored-by: engineer124 * some stateFlags cleaning * more stateFlags cleaning * some notes and minor cleanups * more general cleanups * Slightly less fake func_80832CAC * Document some melee weapon damage stuff * Mark lunge storage * Note PCS patch * match * add notes to bss * yeet extra indentation * add reloc as nonmatching to spec * floorSfxOffset * Player_GetFloorSfx * Player_GetFloorSfxByAge * Comments for AnimSfx dunctions * Name some AnimSfx functions * Name AnimSfx stuff * Some PlayerAgeProperties notes * use animflag defines * Player_SpawnExplosive * fix enum and some other minor fixes * Bit more misc. cleanup * Use OoT's version of func_808333CC * Note on quickspin buffer * Final nonmatching, func_80851F18 Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> * RIP player.c * Name Player_StopHorizontalMovement * misc fixes * Actor_DeactivateLens * fixes * typos and tweaks * minor stuff * add names as comments on the animgoup array * Correct some function names and data type * add anim commets to ageproperties * some notes * De-fake func_80840F90 * Defake & clean up func_8085ADA0 * Improve func_80859BA8 * Enums in func_80852B28 * Name some secret-related things * 3 small things * stuff * Player_TalkWithPlayer * SurfaceType_GetFloorType * SurfaceType_GetWallFlags * and more bgcheck stuff * more bss naming * sPlayerControlInput * clean up func_80836F10 a bit * name the parameters of func_80835BF8 * door stuff * remove NON_MATCHING * remove D_8085D2B0 padding * Name some Player_Cutscene_ functions * various cleanups * format * remainingHopsCounter * some cleanups on the struct * Actor_RequestRumble * this->exchangeItemId = PLAYER_AP_NONE; * fix merge stuff * format * PlayerUnkAA5 * Name two cylinder-related functions * BSS * Add MagicConsume's enum, treat lensActive as bool * Update func_808332A0 based on better info * fix merge * fix merge issues * remove redundant comments * Name Player_AddQuake * ANIM_FLAG_UPDATE*_*Y * Format * AT_TYPE_ENEMY * fix merge issues * format * fix uintptr_ts * Rename * Name leftHandMf * fix merge issues * format * exchangeItemId <= PLAYER_IA_MINUS1 * getItemDrawIdPlusOne * currentActorCsIndex * <= PLAYER_IA_MINUS1 * fix merge issues * format * namefixer and bss * fix build * bombs parameters cleanup * bss * Fix building * fix building * Fix building * Fix building and cleanups * Pre-PR cleanup * really... * format * review * stateFlag Mistakes * 268 * 0.1f * z64door.h * fix cutscene stuff * bss * Update include/z64player.h Co-authored-by: EllipticEllipsis * Update include/z64player.h Co-authored-by: EllipticEllipsis * reiew * PR Review * collision * review * format and a few stuff i missed * EnBomExplosiveType * weekeventregconvert and eventinfconvert * more review * review * bss * review * re format sGetItemTable * Entangle PlayerMask and PlayerItemAction * a few extra cases i missed * bss * review * EnArrow stuff * ARROW_MAGIC_DEKU_BUBBLE * minor format * merge * fix bss * review * !ARROW_IS_ARROW * review * bool cleanup * fix merge * review * Player_StopCutscene * Player_RequestQuake * quakeIndex * Player_RequestQuakeAndRumble * knobDoor and slidingDoor * bss * fix * review * dog and float --------- Co-authored-by: Elliptic Ellipsis Co-authored-by: engineer124 Co-authored-by: petrie911 Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> --- Makefile | 2 +- diff_settings.py | 0 include/functions.h | 5 +- include/macros.h | 2 + include/z64.h | 13 +- include/z64actor.h | 5 + include/z64animation.h | 7 +- include/z64door.h | 24 + include/z64effect.h | 8 +- include/z64item.h | 64 +- include/z64player.h | 212 +- include/z64save.h | 2 +- spec | 4 +- src/boot_O2_g3/boot_main.c | 1 + src/code/z_actor.c | 75 +- src/code/z_camera.c | 10 +- src/code/z_eff_blure.c | 84 +- src/code/z_en_hy_code.c | 16 +- src/code/z_play.c | 4 +- src/code/z_player_lib.c | 58 +- src/code/z_skelanime.c | 2 +- src/code/z_sub_s.c | 4 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 1 + .../actors/ovl_Arms_Hook/z_arms_hook.h | 2 +- .../z_bg_dblue_waterfall.c | 4 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 59 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.h | 6 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 8 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 188 +- .../actors/ovl_Door_Shutter/z_door_shutter.h | 9 +- .../actors/ovl_Door_Spiral/z_door_spiral.h | 3 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 4 +- .../z_eff_kamejima_wave.c | 1 - src/overlays/actors/ovl_En_Am/z_en_am.c | 5 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 109 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.h | 35 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 8 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 53 +- src/overlays/actors/ovl_En_Boom/z_en_boom.h | 7 +- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 3 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 5 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 3 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 161 +- src/overlays/actors/ovl_En_Door/z_en_door.h | 25 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 61 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.h | 7 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 3 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 10 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 38 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 6 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 4 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 3 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 4 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 12 - src/overlays/actors/ovl_En_Horse/z_en_horse.h | 16 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 6 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 10 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 10 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 11 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 36 +- .../actors/ovl_En_Maruta/z_en_maruta.c | 10 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 1 + .../actors/ovl_En_Peehat/z_en_peehat.c | 5 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 6 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 3 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 5 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 4 +- .../actors/ovl_En_Stream/z_en_stream.c | 6 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 18 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 7 +- src/overlays/actors/ovl_En_Toto/z_en_toto.h | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 5 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 6 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 4 +- .../actors/ovl_player_actor/z_player.c | 21475 +++++++++++++++- .../z_eff_ss_g_splash.c | 20 +- .../z_eff_ss_g_splash.h | 6 + tools/disasm/disasm.py | 4 +- tools/disasm/functions.txt | 140 +- tools/disasm/variables.txt | 185 +- tools/gitable.py | 1171 + tools/namefixer.py | 5 + undefined_syms.txt | 12 - 87 files changed, 22423 insertions(+), 2223 deletions(-) mode change 100755 => 100644 diff_settings.py create mode 100644 include/z64door.h create mode 100755 tools/gitable.py diff --git a/Makefile b/Makefile index 892d0355b..8782c02ad 100644 --- a/Makefile +++ b/Makefile @@ -102,7 +102,7 @@ endif # Check code syntax with host compiler ifneq ($(RUN_CC_CHECK),0) - CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-label + CHECK_WARNINGS := -Wall -Wextra -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable -Wno-missing-braces -Wno-int-conversion -Wno-unused-but-set-variable -Wno-unused-label -Wno-sign-compare -Wno-tautological-compare CC_CHECK := gcc -fno-builtin -fsyntax-only -funsigned-char -fdiagnostics-color -std=gnu89 -D _LANGUAGE_C -D NON_MATCHING $(IINC) -nostdinc $(CHECK_WARNINGS) ifneq ($(WERROR), 0) CC_CHECK += -Werror diff --git a/diff_settings.py b/diff_settings.py old mode 100755 new mode 100644 diff --git a/include/functions.h b/include/functions.h index 292c5e210..bcc79f9e5 100644 --- a/include/functions.h +++ b/include/functions.h @@ -726,8 +726,9 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params); void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx); void Enemy_StartFinishingBlow(PlayState* play, Actor* actor); -s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3); -s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3); +s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3); +s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3); +s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3); void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList); void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 radius, s32 countMinusOne, f32 randAccelWeight, s16 scale, s16 scaleStep, u8 useLighting); void func_800BBFB0(PlayState* play, Vec3f* position, f32 arg2, s32 arg3, s16 arg4, s16 scaleStep, u8 arg6); diff --git a/include/macros.h b/include/macros.h index 9e74c40cd..f2bcb07dd 100644 --- a/include/macros.h +++ b/include/macros.h @@ -17,6 +17,8 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) +#define ARRAY_COUNT_2D(arr) (ARRAY_COUNT(arr) * ARRAY_COUNT(arr[0])) + // TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address rather than add/sub 0x80000000 #define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) + RDRAM_CACHED) #define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - RDRAM_CACHED) diff --git a/include/z64.h b/include/z64.h index 6388bc120..05aad655e 100644 --- a/include/z64.h +++ b/include/z64.h @@ -82,11 +82,12 @@ #define Z_PRIORITY_IRQMGR 18 typedef enum { - /* 0 */ EQUIP_SLOT_B, - /* 1 */ EQUIP_SLOT_C_LEFT, - /* 2 */ EQUIP_SLOT_C_DOWN, - /* 3 */ EQUIP_SLOT_C_RIGHT, - /* 4 */ EQUIP_SLOT_A + /* -1 */ EQUIP_SLOT_NONE = -1, + /* 0 */ EQUIP_SLOT_B, + /* 1 */ EQUIP_SLOT_C_LEFT, + /* 2 */ EQUIP_SLOT_C_DOWN, + /* 3 */ EQUIP_SLOT_C_RIGHT, + /* 4 */ EQUIP_SLOT_A } EquipSlot; typedef struct { @@ -517,7 +518,7 @@ typedef struct PlayState { /* 0x18770 */ void (*unk_18770)(struct PlayState* play, Player* player); /* 0x18774 */ s32 (*startPlayerFishing)(struct PlayState* play); /* 0x18778 */ s32 (*grabPlayer)(struct PlayState* play, Player* player); - /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, s32 mode); + /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, PlayerCsMode csMode); /* 0x18780 */ void (*func_18780)(Player* player, struct PlayState* play); /* 0x18784 */ s32 (*damagePlayer)(struct PlayState* play, s32 damage); /* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor); diff --git a/include/z64actor.h b/include/z64actor.h index 3a646fe8f..f58716401 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -739,6 +739,11 @@ typedef struct NpcInteractInfo { /* 0x24 */ UNK_TYPE1 unk_24[0x4]; } NpcInteractInfo; // size = 0x28 +typedef struct BlinkInfo { + /* 0x0 */ s16 eyeTexIndex; + /* 0x2 */ s16 blinkTimer; +} BlinkInfo; // size = 0x4 + extern TargetRangeParams gTargetRanges[]; extern s16 D_801AED48[8]; extern Gfx D_801AEF88[]; diff --git a/include/z64animation.h b/include/z64animation.h index 44c35312d..316dfe341 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -14,9 +14,13 @@ struct PlayerAnimationFrame; #define LIMB_DONE 0xFF #define ANIM_FLAG_1 (1 << 0) -#define ANIM_FLAG_UPDATEY (1 << 1) +#define ANIM_FLAG_UPDATE_Y (1 << 1) #define ANIM_FLAG_4 (1 << 2) +#define ANIM_FLAG_8 (1 << 3) #define ANIM_FLAG_NOMOVE (1 << 4) +#define ANIM_FLAG_80 (1 << 7) +#define ANIM_FLAG_100 (1 << 8) +#define ANIM_FLAG_200 (1 << 9) typedef enum AnimationMode { /* 0 */ ANIMMODE_LOOP, @@ -326,6 +330,7 @@ void AnimationContext_Update(struct PlayState* play, AnimationContext* animation void SkelAnime_InitPlayer(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount); void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime); s32 PlayerAnimation_Update(struct PlayState* play, SkelAnime* skelAnime); +void PlayerAnimation_AnimateFrame(struct PlayState* play, SkelAnime* skelAnime); void Animation_SetMorph(struct PlayState* play, SkelAnime* skelAnime, f32 morphFrames); void PlayerAnimation_Change(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); void PlayerAnimation_PlayOnce(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation); diff --git a/include/z64door.h b/include/z64door.h new file mode 100644 index 000000000..26653c308 --- /dev/null +++ b/include/z64door.h @@ -0,0 +1,24 @@ +#ifndef Z64_DOOR_H +#define Z64_DOOR_H + +#include "ultra64.h" +#include "z64actor.h" + +typedef struct KnobDoorActor { + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ SkelAnime skelAnime; + /* 0x1A0 */ u8 animIndex; + /* 0x1A1 */ u8 playOpenAnim; + /* 0x1A2 */ s8 requiredObjBankIndex; + /* 0x1A3 */ s8 dlIndex; +} KnobDoorActor; // size = 0x1A4 + +typedef struct SlidingDoorActor { + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ s16 unk_15C; + /* 0x15E */ s16 unk_15E; +} SlidingDoorActor; // size = 0x160 + +#define DOOR_GET_TRANSITION_ID(thisx) ((u16)(thisx)->params >> 10) + +#endif diff --git a/include/z64effect.h b/include/z64effect.h index d6ab8b3b5..71ad80510 100644 --- a/include/z64effect.h +++ b/include/z64effect.h @@ -118,10 +118,10 @@ typedef struct { /* 0x188 */ u16 flags; /* 0x18A */ s16 addAngleChange; /* 0x18C */ s16 addAngle; - /* 0x18E */ Color_RGBA8 p1StartColor; - /* 0x192 */ Color_RGBA8 p2StartColor; - /* 0x196 */ Color_RGBA8 p1EndColor; - /* 0x19A */ Color_RGBA8 p2EndColor; + /* 0x18E */ u8 p1StartColor[4]; + /* 0x192 */ u8 p2StartColor[4]; + /* 0x196 */ u8 p1EndColor[4]; + /* 0x19A */ u8 p2EndColor[4]; /* 0x19E */ u8 numElements; // "now_edge_num" /* 0x19F */ u8 elemDuration; /* 0x1A0 */ u8 unkFlag; diff --git a/include/z64item.h b/include/z64item.h index d1d36ebba..345a22897 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -332,12 +332,16 @@ typedef enum GetItemId { /* 0x08 */ GI_WALLET_ADULT, /* 0x09 */ GI_WALLET_GIANT, /* 0x0A */ GI_RECOVERY_HEART, - /* 0x0C */ GI_HEART_PIECE = 0x0C, + /* 0x0B */ GI_0B, + /* 0x0C */ GI_HEART_PIECE, /* 0x0D */ GI_HEART_CONTAINER, /* 0x0E */ GI_MAGIC_SMALL, /* 0x0F */ GI_MAGIC_LARGE, - /* 0x11 */ GI_STRAY_FAIRY = 0x11, - /* 0x14 */ GI_BOMBS_1 = 0x14, + /* 0x10 */ GI_10, + /* 0x11 */ GI_STRAY_FAIRY, + /* 0x12 */ GI_12, + /* 0x13 */ GI_13, + /* 0x14 */ GI_BOMBS_1, /* 0x15 */ GI_BOMBS_5, /* 0x16 */ GI_BOMBS_10, /* 0x17 */ GI_BOMBS_20, @@ -360,8 +364,14 @@ typedef enum GetItemId { /* 0x28 */ GI_NUTS_1, /* 0x29 */ GI_NUTS_5, /* 0x2A */ GI_NUTS_10, - /* 0x2E */ GI_BOMBCHUS_20 = 0x2E, - /* 0x32 */ GI_SHIELD_HERO = 0x32, + /* 0x2B */ GI_2B, + /* 0x2C */ GI_2C, + /* 0x2D */ GI_2D, + /* 0x2E */ GI_BOMBCHUS_20, + /* 0x2F */ GI_2F, + /* 0x30 */ GI_30, + /* 0x31 */ GI_31, + /* 0x32 */ GI_SHIELD_HERO, /* 0x33 */ GI_SHIELD_MIRROR, /* 0x34 */ GI_POWDER_KEG, /* 0x35 */ GI_MAGIC_BEANS, @@ -379,10 +389,24 @@ typedef enum GetItemId { /* 0x41 */ GI_HOOKSHOT, /* 0x42 */ GI_LENS, /* 0x43 */ GI_PICTO_BOX, - /* 0x4C */ GI_OCARINA = 0x4C, - /* 0x50 */ GI_BOMBERS_NOTEBOOK = 0x50, - /* 0x52 */ GI_SKULL_TOKEN = 0x52, - /* 0x55 */ GI_REMAINS_ODOLWA = 0x55, + /* 0x44 */ GI_44, + /* 0x45 */ GI_45, + /* 0x46 */ GI_46, + /* 0x47 */ GI_47, + /* 0x48 */ GI_48, + /* 0x49 */ GI_49, + /* 0x4A */ GI_4A, + /* 0x4B */ GI_4B, + /* 0x4C */ GI_OCARINA, + /* 0x4D */ GI_4D, + /* 0x4E */ GI_4E, + /* 0x4F */ GI_4F, + /* 0x50 */ GI_BOMBERS_NOTEBOOK, + /* 0x51 */ GI_51, + /* 0x52 */ GI_SKULL_TOKEN, + /* 0x53 */ GI_53, + /* 0x54 */ GI_54, + /* 0x55 */ GI_REMAINS_ODOLWA, /* 0x56 */ GI_REMAINS_GOHT, /* 0x57 */ GI_REMAINS_GYORG, /* 0x58 */ GI_REMAINS_TWINMOLD, @@ -410,9 +434,14 @@ typedef enum GetItemId { /* 0x6E */ GI_SEAHORSE, /* 0x6F */ GI_CHATEAU_BOTTLE, /* 0x70 */ GI_HYLIAN_LOACH, - /* 0x75 */ GI_75 = 0x75, + /* 0x71 */ GI_71, + /* 0x72 */ GI_72, + /* 0x73 */ GI_73, + /* 0x74 */ GI_74, + /* 0x75 */ GI_75, /* 0x76 */ GI_ICE_TRAP, - /* 0x78 */ GI_MASK_DEKU = 0x78, + /* 0x77 */ GI_77, + /* 0x78 */ GI_MASK_DEKU, /* 0x79 */ GI_MASK_GORON, /* 0x7A */ GI_MASK_ZORA, /* 0x7B */ GI_MASK_FIERCE_DEITY, @@ -436,7 +465,8 @@ typedef enum GetItemId { /* 0x8D */ GI_MASK_BLAST, /* 0x8E */ GI_MASK_SCENTS, /* 0x8F */ GI_MASK_KAFEIS_MASK, - /* 0x91 */ GI_CHATEAU = 0x91, + /* 0x90 */ GI_90, + /* 0x91 */ GI_CHATEAU, /* 0x92 */ GI_MILK, /* 0x93 */ GI_GOLD_DUST_2, /* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel @@ -463,7 +493,15 @@ typedef enum GetItemId { /* 0xA9 */ GI_BOTTLE_STOLEN, // buy back stolen bottle /* 0xAA */ GI_LETTER_TO_KAFEI, /* 0xAB */ GI_PENDANT_OF_MEMORIES, - /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN = 0xB4, + /* 0xAC */ GI_AC, + /* 0xAD */ GI_AD, + /* 0xAE */ GI_AE, + /* 0xAF */ GI_AF, + /* 0xB0 */ GI_B0, + /* 0xB1 */ GI_B1, + /* 0xB2 */ GI_B2, + /* 0xB3 */ GI_B3, + /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN, /* 0xB5 */ GI_TINGLE_MAP_WOODFALL, /* 0xB6 */ GI_TINGLE_MAP_SNOWHEAD, /* 0xB7 */ GI_TINGLE_MAP_ROMANI_RANCH, diff --git a/include/z64player.h b/include/z64player.h index 3bcc53fde..d9c80384f 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -43,35 +43,6 @@ typedef enum PlayerTransformation { /* 5 */ PLAYER_FORM_MAX } PlayerTransformation; -typedef enum PlayerMask { - /* 0x00 */ PLAYER_MASK_NONE, - /* 0x01 */ PLAYER_MASK_TRUTH, - /* 0x02 */ PLAYER_MASK_KAFEIS_MASK, - /* 0x03 */ PLAYER_MASK_ALL_NIGHT, - /* 0x04 */ PLAYER_MASK_BUNNY, - /* 0x05 */ PLAYER_MASK_KEATON, - /* 0x06 */ PLAYER_MASK_GARO, - /* 0x07 */ PLAYER_MASK_ROMANI, - /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER, - /* 0x09 */ PLAYER_MASK_POSTMAN, - /* 0x0A */ PLAYER_MASK_COUPLE, - /* 0x0B */ PLAYER_MASK_GREAT_FAIRY, - /* 0x0C */ PLAYER_MASK_GIBDO, - /* 0x0D */ PLAYER_MASK_DON_GERO, - /* 0x0E */ PLAYER_MASK_KAMARO, - /* 0x0F */ PLAYER_MASK_CAPTAIN, - /* 0x10 */ PLAYER_MASK_STONE, - /* 0x11 */ PLAYER_MASK_BREMEN, - /* 0x12 */ PLAYER_MASK_BLAST, - /* 0x13 */ PLAYER_MASK_SCENTS, - /* 0x14 */ PLAYER_MASK_GIANT, - /* 0x15 */ PLAYER_MASK_FIERCE_DEITY, - /* 0x16 */ PLAYER_MASK_GORON, - /* 0x17 */ PLAYER_MASK_ZORA, - /* 0x18 */ PLAYER_MASK_DEKU, - /* 0x19 */ PLAYER_MASK_MAX -} PlayerMask; - typedef enum { /* 0 */ PLAYER_ENV_HAZARD_NONE, /* 1 */ PLAYER_ENV_HAZARD_HOTROOM, @@ -89,7 +60,7 @@ typedef enum PlayerItemAction { /* 0x03 */ PLAYER_IA_SWORD_KOKIRI = PLAYER_IA_SWORD_MIN, /* 0x04 */ PLAYER_IA_SWORD_RAZOR, /* 0x05 */ PLAYER_IA_SWORD_GILDED, - /* 0x06 */ PLAYER_IA_SWORD_GREAT_FAIRY, + /* 0x06 */ PLAYER_IA_SWORD_TWO_HANDED, /* 0x07 */ PLAYER_IA_STICK, /* 0x08 */ PLAYER_IA_ZORA_FINS, /* 0x09 */ PLAYER_IA_BOW, @@ -143,7 +114,8 @@ typedef enum PlayerItemAction { /* 0x37 */ PLAYER_IA_37, /* 0x38 */ PLAYER_IA_38, /* 0x39 */ PLAYER_IA_39, - /* 0x3A */ PLAYER_IA_MASK_TRUTH, + /* 0x3A */ PLAYER_IA_MASK_MIN, + /* 0x3A */ PLAYER_IA_MASK_TRUTH = PLAYER_IA_MASK_MIN, /* 0x3B */ PLAYER_IA_MASK_KAFEIS_MASK, /* 0x3C */ PLAYER_IA_MASK_ALL_NIGHT, /* 0x3D */ PLAYER_IA_MASK_BUNNY, @@ -163,10 +135,12 @@ typedef enum PlayerItemAction { /* 0x4B */ PLAYER_IA_MASK_BLAST, /* 0x4C */ PLAYER_IA_MASK_SCENTS, /* 0x4D */ PLAYER_IA_MASK_GIANT, - /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY, + /* 0x4E */ PLAYER_IA_MASK_TRANSFORMATION_MIN, + /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY = PLAYER_IA_MASK_TRANSFORMATION_MIN, /* 0x4F */ PLAYER_IA_MASK_GORON, /* 0x50 */ PLAYER_IA_MASK_ZORA, /* 0x51 */ PLAYER_IA_MASK_DEKU, + /* 0x51 */ PLAYER_IA_MASK_MAX = PLAYER_IA_MASK_DEKU, /* 0x52 */ PLAYER_IA_LENS, /* 0x53 */ PLAYER_IA_MAX } PlayerItemAction; @@ -190,12 +164,45 @@ typedef enum PlayerMeleeWeapon { /* 1 */ PLAYER_MELEEWEAPON_SWORD_KOKIRI = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_KOKIRI), /* 2 */ PLAYER_MELEEWEAPON_SWORD_RAZOR = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_RAZOR), /* 3 */ PLAYER_MELEEWEAPON_SWORD_GILDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GILDED), - /* 4 */ PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY), + /* 4 */ PLAYER_MELEEWEAPON_SWORD_TWO_HANDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED), /* 5 */ PLAYER_MELEEWEAPON_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_STICK), /* 6 */ PLAYER_MELEEWEAPON_ZORA_FINS = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_ZORA_FINS), /* 7 */ PLAYER_MELEEWEAPON_MAX } PlayerMeleeWeapon; +// Relies on mask item actions to be contiguous +#define GET_MASK_FROM_IA(itemAction) ((itemAction) - (PLAYER_IA_MASK_MIN - 1)) +#define GET_IA_FROM_MASK(mask) ((mask) + (PLAYER_IA_MASK_MIN - 1)) + +typedef enum PlayerMask { + /* 0x00 */ PLAYER_MASK_NONE, + /* 0x01 */ PLAYER_MASK_TRUTH = GET_MASK_FROM_IA(PLAYER_IA_MASK_TRUTH), + /* 0x02 */ PLAYER_MASK_KAFEIS_MASK = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAFEIS_MASK), + /* 0x03 */ PLAYER_MASK_ALL_NIGHT = GET_MASK_FROM_IA(PLAYER_IA_MASK_ALL_NIGHT), + /* 0x04 */ PLAYER_MASK_BUNNY = GET_MASK_FROM_IA(PLAYER_IA_MASK_BUNNY), + /* 0x05 */ PLAYER_MASK_KEATON = GET_MASK_FROM_IA(PLAYER_IA_MASK_KEATON), + /* 0x06 */ PLAYER_MASK_GARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GARO), + /* 0x07 */ PLAYER_MASK_ROMANI = GET_MASK_FROM_IA(PLAYER_IA_MASK_ROMANI), + /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER = GET_MASK_FROM_IA(PLAYER_IA_MASK_CIRCUS_LEADER), + /* 0x09 */ PLAYER_MASK_POSTMAN = GET_MASK_FROM_IA(PLAYER_IA_MASK_POSTMAN), + /* 0x0A */ PLAYER_MASK_COUPLE = GET_MASK_FROM_IA(PLAYER_IA_MASK_COUPLE), + /* 0x0B */ PLAYER_MASK_GREAT_FAIRY = GET_MASK_FROM_IA(PLAYER_IA_MASK_GREAT_FAIRY), + /* 0x0C */ PLAYER_MASK_GIBDO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIBDO), + /* 0x0D */ PLAYER_MASK_DON_GERO = GET_MASK_FROM_IA(PLAYER_IA_MASK_DON_GERO), + /* 0x0E */ PLAYER_MASK_KAMARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAMARO), + /* 0x0F */ PLAYER_MASK_CAPTAIN = GET_MASK_FROM_IA(PLAYER_IA_MASK_CAPTAIN), + /* 0x10 */ PLAYER_MASK_STONE = GET_MASK_FROM_IA(PLAYER_IA_MASK_STONE), + /* 0x11 */ PLAYER_MASK_BREMEN = GET_MASK_FROM_IA(PLAYER_IA_MASK_BREMEN), + /* 0x12 */ PLAYER_MASK_BLAST = GET_MASK_FROM_IA(PLAYER_IA_MASK_BLAST), + /* 0x13 */ PLAYER_MASK_SCENTS = GET_MASK_FROM_IA(PLAYER_IA_MASK_SCENTS), + /* 0x14 */ PLAYER_MASK_GIANT = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIANT), + /* 0x15 */ PLAYER_MASK_FIERCE_DEITY = GET_MASK_FROM_IA(PLAYER_IA_MASK_FIERCE_DEITY), + /* 0x16 */ PLAYER_MASK_GORON = GET_MASK_FROM_IA(PLAYER_IA_MASK_GORON), + /* 0x17 */ PLAYER_MASK_ZORA = GET_MASK_FROM_IA(PLAYER_IA_MASK_ZORA), + /* 0x18 */ PLAYER_MASK_DEKU = GET_MASK_FROM_IA(PLAYER_IA_MASK_DEKU), + /* 0x19 */ PLAYER_MASK_MAX +} PlayerMask; + // Relies on bottle-related item actions to be contiguous #define GET_BOTTLE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_BOTTLE_MIN) @@ -244,7 +251,7 @@ typedef enum PlayerSword { /* 0 */ PLAYER_SWORD_KOKIRI = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI), /* 1 */ PLAYER_SWORD_RAZOR = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR), /* 2 */ PLAYER_SWORD_GILDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED), - /* 3 */ PLAYER_SWORD_GREAT_FAIRY = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY), + /* 3 */ PLAYER_SWORD_TWO_HANDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED), /* 4 */ PLAYER_SWORD_MAX } PlayerSword; @@ -287,6 +294,12 @@ typedef enum PlayerMeleeWeaponAnimation { /* 34 */ PLAYER_MWA_MAX } PlayerMeleeWeaponAnimation; +typedef enum PlayerMeleeWeaponState { + /* -1 */ PLAYER_MELEE_WEAPON_STATE_MINUS_1 = -1, + /* 0 */ PLAYER_MELEE_WEAPON_STATE_0, + /* 1 */ PLAYER_MELEE_WEAPON_STATE_1 +} PlayerMeleeWeaponState; + typedef enum PlayerDoorType { /* -1 */ PLAYER_DOORTYPE_TALKING = -1, // Displays a message instead of opening /* 0 */ PLAYER_DOORTYPE_NONE, @@ -300,13 +313,61 @@ typedef enum PlayerDoorType { typedef enum PlayerAnimType { /* 0 */ PLAYER_ANIMTYPE_DEFAULT, // DEFAULT /* 1 */ PLAYER_ANIMTYPE_1, - /* 2 */ PLAYER_ANIMTYPE_2, + /* 2 */ PLAYER_ANIMTYPE_2, // Shield but no sword? /* 3 */ PLAYER_ANIMTYPE_3, // Two hand weapon /* 4 */ PLAYER_ANIMTYPE_4, /* 5 */ PLAYER_ANIMTYPE_5, /* 6 */ PLAYER_ANIMTYPE_MAX } PlayerAnimType; +typedef enum PlayerAnimGroup { + /* 0 */ PLAYER_ANIMGROUP_0, // STANDING_IDLE + /* 1 */ PLAYER_ANIMGROUP_1, // WALKING + /* 2 */ PLAYER_ANIMGROUP_2, // RUNNING + /* 3 */ PLAYER_ANIMGROUP_3, + /* 4 */ PLAYER_ANIMGROUP_4, + /* 5 */ PLAYER_ANIMGROUP_5, // Z-Targeting ? + /* 6 */ PLAYER_ANIMGROUP_6, // Start or finishing some animation + /* 7 */ PLAYER_ANIMGROUP_7, // DRAW_MELEE_WEAPON + /* 8 */ PLAYER_ANIMGROUP_8, // OPEN_DOOR_LEFT_FIERCE_DEITY + /* 9 */ PLAYER_ANIMGROUP_9, // OPEN_DOOR_LEFT_HUMAN + /* 10 */ PLAYER_ANIMGROUP_10, // OPEN_DOOR_RIGHT_FIERCE_DEITY + /* 11 */ PLAYER_ANIMGROUP_11, // OPEN_DOOR_RIGHT_HUMAN + /* 12 */ PLAYER_ANIMGROUP_12, // GRABBING + /* 13 */ PLAYER_ANIMGROUP_13, // FALLING/LANDING? + /* 14 */ PLAYER_ANIMGROUP_14, // landing from short distances? + /* 15 */ PLAYER_ANIMGROUP_15, // ROLLING + /* 16 */ PLAYER_ANIMGROUP_16, // BONK/BONKING + /* 17 */ PLAYER_ANIMGROUP_17, + /* 18 */ PLAYER_ANIMGROUP_18, + /* 19 */ PLAYER_ANIMGROUP_19, // START_SHIELDING + /* 20 */ PLAYER_ANIMGROUP_20, // SHIELDING + /* 21 */ PLAYER_ANIMGROUP_21, // STOP_SHIELDING/END_SHIELDING + /* 22 */ PLAYER_ANIMGROUP_22, // SLOW_SIDE_WALK? + /* 23 */ PLAYER_ANIMGROUP_23, // SIDE_WALK + /* 24 */ PLAYER_ANIMGROUP_24, // SIDE_WALK_RIGHT + /* 25 */ PLAYER_ANIMGROUP_25, + /* 26 */ PLAYER_ANIMGROUP_26, + /* 27 */ PLAYER_ANIMGROUP_27, + /* 28 */ PLAYER_ANIMGROUP_28, // THROWING + /* 29 */ PLAYER_ANIMGROUP_29, // PUT_DOWN_OBJECT? + /* 30 */ PLAYER_ANIMGROUP_30, // back walking slow? + /* 31 */ PLAYER_ANIMGROUP_31, + /* 32 */ PLAYER_ANIMGROUP_32, + /* 33 */ PLAYER_ANIMGROUP_33, + /* 34 */ PLAYER_ANIMGROUP_34, // PULLING_START + /* 35 */ PLAYER_ANIMGROUP_35, // PULLING + /* 36 */ PLAYER_ANIMGROUP_36, // PULLING_END + /* 37 */ PLAYER_ANIMGROUP_37, // climbing from a ledge? + /* 38 */ PLAYER_ANIMGROUP_38, // ledge + /* 39 */ PLAYER_ANIMGROUP_39, // ledge + /* 40 */ PLAYER_ANIMGROUP_40, // climbing from a ledge + /* 41 */ PLAYER_ANIMGROUP_41, + /* 42 */ PLAYER_ANIMGROUP_42, + /* 43 */ PLAYER_ANIMGROUP_43, + /* 44 */ PLAYER_ANIMGROUP_MAX +} PlayerAnimGroup; + typedef enum PlayerModelType { // left hand /* 0 */ PLAYER_MODELTYPE_LH_OPEN, @@ -464,7 +525,7 @@ typedef struct PlayerAnimationFrame { #define GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0x0F00) typedef struct PlayerAgeProperties { - /* 0x00 */ f32 unk_00; // ceilingCheckHeight? + /* 0x00 */ f32 unk_00; // ceilingCheckHeight /* 0x04 */ f32 shadowScale; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; @@ -478,7 +539,7 @@ typedef struct PlayerAgeProperties { /* 0x2C */ f32 unk_2C; // water stuff // depthInWater /* 0x30 */ f32 unk_30; // water stuff // depthInWater /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; // wallCheckHeight? + /* 0x38 */ f32 unk_38; // wallCheckHeight /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ Vec3s unk_44; @@ -489,9 +550,9 @@ typedef struct PlayerAgeProperties { /* 0x94 */ u16 surfaceSfxIdOffset; /* 0x98 */ f32 unk_98; /* 0x9C */ f32 unk_9C; - /* 0xA0 */ PlayerAnimationHeader* unk_A0; - /* 0xA4 */ PlayerAnimationHeader* unk_A4; - /* 0xA8 */ PlayerAnimationHeader* unk_A8; + /* 0xA0 */ PlayerAnimationHeader* openChestAnim; + /* 0xA4 */ PlayerAnimationHeader* unk_A4; // OoT leftovers to interact with the Master Sword + /* 0xA8 */ PlayerAnimationHeader* unk_A8; // OoT leftovers to interact with the Master Sword /* 0xAC */ PlayerAnimationHeader* unk_AC; /* 0xB0 */ PlayerAnimationHeader* unk_B0; /* 0xB4 */ PlayerAnimationHeader* unk_B4[4]; @@ -547,7 +608,7 @@ typedef enum PlayerCsMode { /* 0x0F */ PLAYER_CSMODE_15, /* 0x10 */ PLAYER_CSMODE_16, /* 0x11 */ PLAYER_CSMODE_17, - /* 0x12 */ PLAYER_CSMODE_18, + /* 0x12 */ PLAYER_CSMODE_18, // Strangled by Wallmaster /* 0x13 */ PLAYER_CSMODE_19, /* 0x14 */ PLAYER_CSMODE_20, /* 0x15 */ PLAYER_CSMODE_21, @@ -555,7 +616,7 @@ typedef enum PlayerCsMode { /* 0x17 */ PLAYER_CSMODE_23, /* 0x18 */ PLAYER_CSMODE_24, /* 0x19 */ PLAYER_CSMODE_25, - /* 0x1A */ PLAYER_CSMODE_26, + /* 0x1A */ PLAYER_CSMODE_26, // Halt! /* 0x1B */ PLAYER_CSMODE_27, /* 0x1C */ PLAYER_CSMODE_28, /* 0x1D */ PLAYER_CSMODE_29, @@ -613,7 +674,7 @@ typedef enum PlayerCsMode { /* 0x51 */ PLAYER_CSMODE_81, /* 0x52 */ PLAYER_CSMODE_82, /* 0x53 */ PLAYER_CSMODE_83, - /* 0x54 */ PLAYER_CSMODE_84, + /* 0x54 */ PLAYER_CSMODE_84, // Sucked by the moon /* 0x55 */ PLAYER_CSMODE_85, /* 0x56 */ PLAYER_CSMODE_86, /* 0x57 */ PLAYER_CSMODE_87, @@ -867,10 +928,11 @@ typedef enum PlayerCsMode { #define PLAYER_STATE3_20000000 (1 << 29) // #define PLAYER_STATE3_40000000 (1 << 30) -// +// TARGETING_HOSTILE? #define PLAYER_STATE3_80000000 (1 << 31) +#define PLAYER_GET_BG_CAM_INDEX(thisx) ((thisx)->params & 0xFF) #define PLAYER_GET_INITMODE(thisx) (((thisx)->params & 0xF00) >> 8) typedef enum PlayerInitMode { @@ -894,6 +956,15 @@ typedef enum PlayerInitMode { #define PLAYER_PARAMS(startBgCamIndex, initMode) ((startBgCamIndex & 0xFF) | ((initMode & 0xF) << 8)) +typedef enum PlayerUnkAA5 { + /* 0 */ PLAYER_UNKAA5_0, + /* 1 */ PLAYER_UNKAA5_1, + /* 2 */ PLAYER_UNKAA5_2, + /* 3 */ PLAYER_UNKAA5_3, + /* 4 */ PLAYER_UNKAA5_4, + /* 5 */ PLAYER_UNKAA5_5, +} PlayerUnkAA5; + typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play); typedef s32 (*PlayerFuncAC4)(struct Player* this, struct PlayState* play); typedef void (*PlayerFuncD58)(struct PlayState* play, struct Player* this); @@ -917,31 +988,13 @@ typedef struct Player { /* 0x151 */ u8 rightHandType; /* 0x152 */ u8 sheathType; /* 0x153 */ u8 currentMask; // PlayerMask enum - /* 0x154 */ s8 unk_154; + /* 0x154 */ s8 unk_154; // EquipSlot enum // Last pressed equip slot? /* 0x155 */ u8 prevMask; /* 0x158 */ Gfx** rightHandDLists; /* 0x15C */ Gfx** leftHandDLists; /* 0x160 */ Gfx** sheathDLists; /* 0x164 */ Gfx** waistDLists; - /* 0x168 */ f32 unk_168; - /* 0x16C */ f32 unk_16C; - /* 0x170 */ f32 unk_170; - /* 0x174 */ f32 unk_174; - /* 0x178 */ f32 unk_178; - /* 0x17C */ f32 unk_17C; - /* 0x180 */ f32 unk_180; - /* 0x184 */ f32 unk_184; - /* 0x188 */ f32 unk_188; - /* 0x18C */ f32 unk_18C; - /* 0x190 */ f32 unk_190; - /* 0x194 */ f32 unk_194; - /* 0x198 */ f32 unk_198; - /* 0x19C */ f32 unk_19C; - /* 0x1A0 */ f32 unk_1A0; - /* 0x1A4 */ f32 unk_1A4; - /* 0x1A8 */ f32 unk_1A8; - /* 0x1AC */ f32 unk_1AC; - /* 0x1B0 */ f32 unk_1B0; + /* 0x168 */ UNK_TYPE1 unk_168[0x4C]; /* 0x1B4 */ s16 unk_1B4; /* 0x1B6 */ char unk_1B6[2]; /* 0x1B8 */ u8 giObjectLoading; @@ -960,8 +1013,7 @@ typedef struct Player { /* 0x2C8 */ SkelAnime unk_2C8; /* 0x30C */ Vec3s jointTable[5]; /* 0x32A */ Vec3s morphTable[5]; - /* 0x348 */ s16 eyeTexId; - /* 0x34A */ s16 eyeAnimTimer; + /* 0x348 */ BlinkInfo blinkInfo; /* 0x34C */ Actor* heldActor; /* 0x350 */ PosRot leftHandWorld; /* 0x364 */ Actor* rightHandActor; @@ -980,12 +1032,12 @@ typedef struct Player { /* 0x395 */ u8 prevCsMode; // PlayerCsMode enum /* 0x396 */ u8 unk_396; // currentActorActionId? /* 0x397 */ u8 unk_397; // PlayerDoorType enum - /* 0x398 */ Actor* unk_398; + /* 0x398 */ Actor* unk_398; // csActor? /* 0x39C */ UNK_TYPE1 unk_39C[0x4]; /* 0x3A0 */ Vec3f unk_3A0; /* 0x3AC */ Vec3f unk_3AC; /* 0x3B8 */ u16 unk_3B8; - /* 0x3BA */ s16 unk_3BA; + /* 0x3BA */ s16 doorBgCamIndex; /* 0x3BC */ s16 subCamId; /* 0x3BE */ char unk_3BE[2]; /* 0x3C0 */ Vec3f unk_3C0; @@ -1028,7 +1080,7 @@ typedef struct Player { /* 0xA9C */ f32 secretRumbleCharge; // builds per frame until discharges with a rumble request /* 0xAA0 */ f32 closestSecretDistSq; // Used to augment `secretRumbleCharge`. Cleared every frame /* 0xAA4 */ s8 unk_AA4; - /* 0xAA5 */ u8 unk_AA5; + /* 0xAA5 */ u8 unk_AA5; // PlayerUnkAA5 enum /* 0xAA6 */ u16 unk_AA6; // flags of some kind /* 0xAA8 */ s16 unk_AA8; /* 0xAAA */ s16 unk_AAA; @@ -1049,20 +1101,21 @@ typedef struct Player { /* 0xADA */ s8 meleeWeaponAnimation; /* 0xADB */ s8 meleeWeaponState; /* 0xADC */ s8 unk_ADC; - /* 0xADD */ s8 unk_ADD; + /* 0xADD */ s8 unk_ADD; // Some sort of combo counter /* 0xADE */ u8 unk_ADE; /* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin /* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ? - /* 0xAE7 */ s8 unk_AE7; // a timer + /* 0xAE7 */ s8 unk_AE7; // a timer, used as an index for multiple kinds of animations too, room index?, etc /* 0xAE8 */ s16 unk_AE8; // multipurpose timer /* 0xAEC */ f32 unk_AEC; - /* 0xAF0 */ union { // TODO: this may be an union of two structs + /* 0xAF0 */ union { Vec3f unk_AF0[2]; f32 arr_AF0[6]; }; - /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array + /* 0xB08 */ f32 unk_B08; + /* 0xB0C */ f32 unk_B0C; /* 0xB10 */ f32 unk_B10[6]; - /* 0xB28 */ s16 unk_B28; //Burning stick timer? + /* 0xB28 */ s16 unk_B28; // Burning stick timer? /* 0xB2A */ s8 getItemDrawIdPlusOne; /* 0xB2B */ s8 unk_B2B; /* 0xB2C */ f32 windSpeed; @@ -1088,7 +1141,7 @@ typedef struct Player { /* 0xB64 */ u8 unk_B64; /* 0xB65 */ u8 shockTimer; /* 0xB66 */ u8 unk_B66; - /* 0xB67 */ u8 unk_B67; // deku remaining hops counter + /* 0xB67 */ u8 remainingHopsCounter; // Deku hopping on water /* 0xB68 */ s16 fallStartHeight; // last truncated Y position before falling /* 0xB6A */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down) /* 0xB6C */ s16 unk_B6C; @@ -1100,8 +1153,8 @@ typedef struct Player { /* 0xB76 */ s16 unk_B76; /* 0xB78 */ f32 unk_B78; /* 0xB7C */ f32 unk_B7C; - /* 0xB80 */ f32 unk_B80; - /* 0xB84 */ s16 unk_B84; + /* 0xB80 */ f32 pushedSpeed; // Pushing player, examples include water currents, floor conveyors, climbing sloped surfaces + /* 0xB84 */ s16 pushedYaw; // Yaw of direction in which player is being pushed /* 0xB86 */ s16 unk_B86[2]; // unknown length /* 0xB8A */ s16 unk_B8A; /* 0xB8C */ s16 unk_B8C; @@ -1112,7 +1165,7 @@ typedef struct Player { /* 0xB96 */ s16 unk_B96; /* 0xB98 */ WeaponInfo meleeWeaponInfo[3]; /* 0xBEC */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX]; - /* 0xCC4 */ MtxF mf_CC4; + /* 0xCC4 */ MtxF leftHandMf; /* 0xD04 */ MtxF shieldMf; /* 0xD44 */ u8 isBurning; /* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; // one flame per body part @@ -1120,8 +1173,7 @@ typedef struct Player { /* 0xD58 */ PlayerFuncD58 unk_D58; /* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame) /* 0xD5D */ u8 unk_D5D; - /* 0xD5E */ u8 unk_D5E; - /* 0xD5F */ u8 unk_D5F; + /* 0xD5E */ u8 floorProperty; // FloorProperty enum /* 0xD60 */ f32 unk_D60; /* 0xD64 */ s16 unk_D64; /* 0xD66 */ u16 unk_D66; // sfx diff --git a/include/z64save.h b/include/z64save.h index 9d580803f..01acfed0e 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -338,7 +338,7 @@ typedef struct SaveContext { /* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE" /* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item" /* 0x3DBB */ u8 unk_3DBB; // "next_walk" - /* 0x3DBC */ s16 dogParams; // "dog_flag" + /* 0x3DBC */ s16 dogParams; // OoT leftover. "dog_flag" /* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status" /* 0x3DBF */ u8 showTitleCard; // "name_display" /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer" diff --git a/spec b/spec index 81f25e374..003c76dd4 100644 --- a/spec +++ b/spec @@ -700,9 +700,7 @@ beginseg name "ovl_player_actor" compress include "build/src/overlays/actors/ovl_player_actor/z_player.o" - include "build/data/ovl_player_actor/ovl_player_actor.data.o" - include "build/data/ovl_player_actor/ovl_player_actor.bss.o" - include "build/data/ovl_player_actor/ovl_player_actor.reloc.o" + include "build/src/overlays/actors/ovl_player_actor/ovl_player_actor_reloc.o" endseg beginseg diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 7b8d7126b..6a561992b 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index a5ca767dc..ffa77e9bf 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1374,7 +1374,7 @@ s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { player->csMode = csMode; player->unk_398 = actor; - player->unk_3BA = 0; + player->doorBgCamIndex = 0; return true; } @@ -1382,7 +1382,7 @@ s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) { Player* player = GET_PLAYER(play); if (func_800B724C(play, actor, csMode)) { - player->unk_3BA = 1; + player->doorBgCamIndex = 1; return true; } return false; @@ -3490,49 +3490,50 @@ void Enemy_StartFinishingBlow(PlayState* play, Actor* actor) { } // blinking routine -s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) { - if (DECR(arg0[1]) == 0) { - arg0[1] = Rand_S16Offset(arg1, arg2); +s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) { + if (DECR(info->blinkTimer) == 0) { + info->blinkTimer = Rand_S16Offset(arg1, arg2); } - if (arg0[1] - arg3 > 0) { - arg0[0] = 0; - } else if ((arg0[1] - arg3 >= -1) || (arg0[1] < 2)) { - arg0[0] = 1; + if (info->blinkTimer - arg3 > 0) { + info->eyeTexIndex = 0; + } else if ((info->blinkTimer - arg3 >= -1) || (info->blinkTimer < 2)) { + info->eyeTexIndex = 1; } else { - arg0[0] = 2; + info->eyeTexIndex = 2; } - return arg0[0]; + return info->eyeTexIndex; } // blinking routine -s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) { - if (DECR(arg0[1]) == 0) { - arg0[1] = Rand_S16Offset(arg1, arg2); +s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) { + if (DECR(info->blinkTimer) == 0) { + info->blinkTimer = Rand_S16Offset(arg1, arg2); } - if (arg0[1] - arg3 > 0) { - arg0[0] = 0; - } else if (arg0[1] - arg3 == 0) { - arg0[0] = 1; + if (info->blinkTimer - arg3 > 0) { + info->eyeTexIndex = 0; + } else if (info->blinkTimer - arg3 == 0) { + info->eyeTexIndex = 1; } else { - arg0[0] = 2; + info->eyeTexIndex = 2; } - return arg0[0]; + return info->eyeTexIndex; } // unused blinking routine -s16 func_800BBC20(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3) { - if (DECR(arg0[1]) == 0) { - arg0[1] = Rand_S16Offset(arg1, arg2); - arg0[0]++; - if ((arg0[0] % 3) == 0) { - arg0[0] = (s32)(Rand_ZeroOne() * arg3) * 3; +s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3) { + if (DECR(info->blinkTimer) == 0) { + info->blinkTimer = Rand_S16Offset(arg1, arg2); + info->eyeTexIndex++; + if ((info->eyeTexIndex % 3) == 0) { + info->eyeTexIndex = (s32)(Rand_ZeroOne() * arg3) * 3; } } - return arg0[0]; + + return info->eyeTexIndex; } void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList) { @@ -3614,15 +3615,15 @@ void func_800BC154(PlayState* play, ActorContext* actorCtx, Actor* actor, u8 act // Damage flags for EnArrow u32 sArrowDmgFlags[] = { - DMG_FIRE_ARROW, // ENARROW_0 - DMG_NORMAL_ARROW, // ENARROW_1 - DMG_NORMAL_ARROW, // ENARROW_2 - DMG_FIRE_ARROW, // ENARROW_3 - DMG_ICE_ARROW, // ENARROW_4 - DMG_LIGHT_ARROW, // ENARROW_5 - DMG_DEKU_NUT, // ENARROW_6 - DMG_DEKU_BUBBLE, // ENARROW_7 - DMG_DEKU_NUT, // ENARROW_8 + DMG_FIRE_ARROW, // ARROW_TYPE_NORMAL_LIT + DMG_NORMAL_ARROW, // ARROW_TYPE_NORMAL_HORSE + DMG_NORMAL_ARROW, // ARROW_TYPE_NORMAL + DMG_FIRE_ARROW, // ARROW_TYPE_FIRE + DMG_ICE_ARROW, // ARROW_TYPE_ICE + DMG_LIGHT_ARROW, // ARROW_TYPE_LIGHT + DMG_DEKU_NUT, // ARROW_TYPE_SLINGSHOT + DMG_DEKU_BUBBLE, // ARROW_TYPE_DEKU_BUBBLE + DMG_DEKU_NUT, // ARROW_TYPE_DEKU_NUT }; u32 Actor_GetArrowDmgFlags(s32 params) { @@ -4476,7 +4477,7 @@ s32 func_800BE184(PlayState* play, Actor* actor, f32 xzDist, s16 arg3, s16 arg4, s16 phi_v0 = BINANG_SUB(BINANG_ROT180(actor->yawTowardsPlayer), player->actor.shape.rot.y); s16 temp_t0 = actor->yawTowardsPlayer - arg5; - if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != 0)) { + if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0)) { if ((arg4 >= ABS_ALT(phi_v0)) && (arg3 >= ABS_ALT(temp_t0))) { return true; } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index ea600b30e..89b148942 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -465,13 +465,13 @@ s32 func_800CBA7C(Camera* camera) { } } -s32 func_800CBAAC(Camera* camera) { +PlayerMeleeWeaponState func_800CBAAC(Camera* camera) { Actor* focalActor = camera->focalActor; if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { return ((Player*)focalActor)->meleeWeaponState; } else { - return 0; + return PLAYER_MELEE_WEAPON_STATE_0; } } @@ -506,13 +506,13 @@ s32 func_800CBB88(Camera* camera) { Actor* focalActor = camera->focalActor; if (camera->focalActor == &GET_PLAYER(camera->play)->actor) { - if ((((Player*)focalActor)->meleeWeaponState != 0) && + if ((((Player*)focalActor)->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (((Player*)focalActor)->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT)) { return 3; } if ((((Player*)focalActor)->stateFlags2 & PLAYER_STATE2_20000) || - ((((Player*)focalActor)->meleeWeaponState != 0) && + ((((Player*)focalActor)->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (((Player*)focalActor)->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK))) { return 1; } @@ -3958,7 +3958,7 @@ s32 Camera_Battle1(Camera* camera) { } camera->roll = Camera_ScaledStepToCeilS(sp88, camera->roll, 0.06f, 5); - if (func_800CBAAC(camera) != 0) { + if (func_800CBAAC(camera) != PLAYER_MELEE_WEAPON_STATE_0) { phi_f12 = ((camera->play->state.frames & 8) != 0) ? roData->unk_20 - (roData->unk_20 * 0.5f) : roData->unk_20; } else { phi_f12 = ((gSaveContext.save.saveInfo.playerData.health <= 16) ? 0.8f : 1.0f) * (sp78 - (sp78 * 0.05f * spEC)); diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 5f0221969..520431401 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -114,23 +114,17 @@ void EffectBlure_Init1(void* thisx, void* initParamsx) { EffectBlureInit1* initParams = (EffectBlureInit1*)initParamsx; if ((this != NULL) && (initParams != NULL)) { + s32 i; + EffectBlure_InitElements(this); - this->p1StartColor.r = initParams->p1StartColor[0]; - this->p2StartColor.r = initParams->p2StartColor[0]; - this->p1EndColor.r = initParams->p1EndColor[0]; - this->p2EndColor.r = initParams->p2EndColor[0]; - this->p1StartColor.g = initParams->p1StartColor[1]; - this->p2StartColor.g = initParams->p2StartColor[1]; - this->p1EndColor.g = initParams->p1EndColor[1]; - this->p2EndColor.g = initParams->p2EndColor[1]; - this->p1StartColor.b = initParams->p1StartColor[2]; - this->p2StartColor.b = initParams->p2StartColor[2]; - this->p1EndColor.b = initParams->p1EndColor[2]; - this->p2EndColor.b = initParams->p2EndColor[2]; - this->p1StartColor.a = initParams->p1StartColor[3]; - this->p2StartColor.a = initParams->p2StartColor[3]; - this->p1EndColor.a = initParams->p1EndColor[3]; - this->p2EndColor.a = initParams->p2EndColor[3]; + + for (i = 0; i < 4; i++) { + this->p1StartColor[i] = initParams->p1StartColor[i]; + this->p2StartColor[i] = initParams->p2StartColor[i]; + this->p1EndColor[i] = initParams->p1EndColor[i]; + this->p2EndColor[i] = initParams->p2EndColor[i]; + } + this->elemDuration = initParams->elemDuration; this->unkFlag = initParams->unkFlag; this->calcMode = initParams->calcMode; @@ -155,23 +149,17 @@ void EffectBlure_Init2(void* thisx, void* initParamsx) { EffectBlureInit2* initParams = (EffectBlureInit2*)initParamsx; if ((this != NULL) && (initParams != NULL)) { + s32 i; + EffectBlure_InitElements(this); - this->p1StartColor.r = initParams->p1StartColor[0]; - this->p2StartColor.r = initParams->p2StartColor[0]; - this->p1EndColor.r = initParams->p1EndColor[0]; - this->p2EndColor.r = initParams->p2EndColor[0]; - this->p1StartColor.g = initParams->p1StartColor[1]; - this->p2StartColor.g = initParams->p2StartColor[1]; - this->p1EndColor.g = initParams->p1EndColor[1]; - this->p2EndColor.g = initParams->p2EndColor[1]; - this->p1StartColor.b = initParams->p1StartColor[2]; - this->p2StartColor.b = initParams->p2StartColor[2]; - this->p1EndColor.b = initParams->p1EndColor[2]; - this->p2EndColor.b = initParams->p2EndColor[2]; - this->p1StartColor.a = initParams->p1StartColor[3]; - this->p2StartColor.a = initParams->p2StartColor[3]; - this->p1EndColor.a = initParams->p1EndColor[3]; - this->p2EndColor.a = initParams->p2EndColor[3]; + + for (i = 0; i < 4; i++) { + this->p1StartColor[i] = initParams->p1StartColor[i]; + this->p2StartColor[i] = initParams->p2StartColor[i]; + this->p1EndColor[i] = initParams->p1EndColor[i]; + this->p2EndColor[i] = initParams->p2EndColor[i]; + } + this->elemDuration = initParams->elemDuration; this->unkFlag = initParams->unkFlag; this->calcMode = initParams->calcMode; @@ -372,14 +360,14 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3 color1->r = color1->g = color1->b = color1->a = 255; color2->r = color2->g = color2->b = color2->a = 255; } else { - color1->r = func_800B0A24(this->p1StartColor.r, this->p1EndColor.r, ratio); - color1->g = func_800B0A24(this->p1StartColor.g, this->p1EndColor.g, ratio); - color1->b = func_800B0A24(this->p1StartColor.b, this->p1EndColor.b, ratio); - color1->a = func_800B0A24(this->p1StartColor.a, this->p1EndColor.a, ratio); - color2->r = func_800B0A24(this->p2StartColor.r, this->p2EndColor.r, ratio); - color2->g = func_800B0A24(this->p2StartColor.g, this->p2EndColor.g, ratio); - color2->b = func_800B0A24(this->p2StartColor.b, this->p2EndColor.b, ratio); - color2->a = func_800B0A24(this->p2StartColor.a, this->p2EndColor.a, ratio); + color1->r = func_800B0A24(this->p1StartColor[0], this->p1EndColor[0], ratio); + color1->g = func_800B0A24(this->p1StartColor[1], this->p1EndColor[1], ratio); + color1->b = func_800B0A24(this->p1StartColor[2], this->p1EndColor[2], ratio); + color1->a = func_800B0A24(this->p1StartColor[3], this->p1EndColor[3], ratio); + color2->r = func_800B0A24(this->p2StartColor[0], this->p2EndColor[0], ratio); + color2->g = func_800B0A24(this->p2StartColor[1], this->p2EndColor[1], ratio); + color2->b = func_800B0A24(this->p2StartColor[2], this->p2EndColor[2], ratio); + color2->a = func_800B0A24(this->p2StartColor[3], this->p2EndColor[3], ratio); } } @@ -992,19 +980,19 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) { vtx[j].v.flag = 0; vtx[j].v.tc[0] = 0; vtx[j].v.tc[1] = 0; - vtx[j].v.cn[0] = func_800B0A24(this->p1StartColor.r, this->p1EndColor.r, ratio); - vtx[j].v.cn[1] = func_800B0A24(this->p1StartColor.g, this->p1EndColor.g, ratio); - vtx[j].v.cn[2] = func_800B0A24(this->p1StartColor.b, this->p1EndColor.b, ratio); - vtx[j].v.cn[3] = func_800B0A24(this->p1StartColor.a, this->p1EndColor.a, ratio); + vtx[j].v.cn[0] = func_800B0A24(this->p1StartColor[0], this->p1EndColor[0], ratio); + vtx[j].v.cn[1] = func_800B0A24(this->p1StartColor[1], this->p1EndColor[1], ratio); + vtx[j].v.cn[2] = func_800B0A24(this->p1StartColor[2], this->p1EndColor[2], ratio); + vtx[j].v.cn[3] = func_800B0A24(this->p1StartColor[3], this->p1EndColor[3], ratio); j++; vtx[j].v.flag = 0; vtx[j].v.tc[0] = 0; vtx[j].v.tc[1] = 0; - vtx[j].v.cn[0] = func_800B0A24(this->p2StartColor.r, this->p2EndColor.r, ratio); - vtx[j].v.cn[1] = func_800B0A24(this->p2StartColor.g, this->p2EndColor.g, ratio); - vtx[j].v.cn[2] = func_800B0A24(this->p2StartColor.b, this->p2EndColor.b, ratio); - vtx[j].v.cn[3] = func_800B0A24(this->p2StartColor.a, this->p2EndColor.a, ratio); + vtx[j].v.cn[0] = func_800B0A24(this->p2StartColor[0], this->p2EndColor[0], ratio); + vtx[j].v.cn[1] = func_800B0A24(this->p2StartColor[1], this->p2EndColor[1], ratio); + vtx[j].v.cn[2] = func_800B0A24(this->p2StartColor[2], this->p2EndColor[2], ratio); + vtx[j].v.cn[3] = func_800B0A24(this->p2StartColor[3], this->p2EndColor[3], ratio); j++; } } diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index 674f4bfa4..b5992dec4 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -69,13 +69,13 @@ EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) { do { doorIter = SubS_FindActor(play, doorIter, ACTORCAT_DOOR, ACTOR_EN_DOOR); door = (EnDoor*)doorIter; - dist = Actor_WorldDistXYZToActor(actor, &door->dyna.actor); + dist = Actor_WorldDistXYZToActor(actor, &door->knobDoor.dyna.actor); if (!isSetup || (dist < minDist)) { nearestDoor = door; minDist = dist; isSetup = true; } - doorIter = door->dyna.actor.next; + doorIter = door->knobDoor.dyna.actor.next; } while (doorIter != NULL); if (1) {} @@ -134,16 +134,16 @@ void func_800F0BB4(EnHy* enHy, PlayState* play, EnDoor* door, s16 arg3, s16 arg4 Vec3f offset; f32 phi_f0; - Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &enHy->actor.world.pos); + Actor_OffsetOfPointInActorCoords(&door->knobDoor.dyna.actor, &offset, &enHy->actor.world.pos); phi_f0 = (offset.z >= 0.0f) ? 1.0f : -1.0f; animIndex = ((s8)phi_f0 < 0) ? 0 : 2; EnHy_ChangeObjectAndAnim(enHy, play, (animIndex == 0) ? arg3 : arg4); enHy->skelAnime.baseTransl = *enHy->skelAnime.jointTable; enHy->skelAnime.prevTransl = *enHy->skelAnime.jointTable; - enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATEY | ANIM_FLAG_1); + enHy->skelAnime.moveFlags |= (ANIM_FLAG_UPDATE_Y | ANIM_FLAG_1); AnimationContext_SetMoveActor(play, &enHy->actor, &enHy->skelAnime, 1.0f); - door->unk_1A1 = 1; - door->animIndex = animIndex; + door->knobDoor.playOpenAnim = true; + door->knobDoor.animIndex = animIndex; } s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg4, f32 arg5) { @@ -157,7 +157,7 @@ s32 func_800F0CE4(EnHy* enHy, PlayState* play, ActorFunc draw, s16 arg3, s16 arg if (door != NULL) { ret = true; func_800F0BB4(enHy, play, door, arg3, arg4); - yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos); + yaw = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos); enHy->actor.world.pos.x += arg5 * Math_SinS(yaw); enHy->actor.world.pos.z += arg5 * Math_CosS(yaw); enHy->actor.world.rot.y = -yaw; @@ -179,7 +179,7 @@ s32 func_800F0DD4(EnHy* enHy, PlayState* play, s16 arg2, s16 arg3) { if (door != NULL) { ret = true; func_800F0BB4(enHy, play, door, arg2, arg3); - enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->dyna.actor.world.pos); + enHy->actor.shape.rot.y = Math_Vec3f_Yaw(&enHy->actor.world.pos, &door->knobDoor.dyna.actor.world.pos); enHy->actor.world.rot.y = enHy->actor.shape.rot.y; enHy->actor.gravity = 0.0f; enHy->actor.flags &= ~ACTOR_FLAG_1; diff --git a/src/code/z_play.c b/src/code/z_play.c index 7f615018e..e25b50b4b 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -2327,8 +2327,8 @@ void Play_Init(GameState* thisx) { Camera_InitFocalActorSettings(&this->mainCamera, &player->actor); gDbgCamEnabled = false; - if ((player->actor.params & 0xFF) != 0xFF) { - Camera_ChangeActorCsCamIndex(&this->mainCamera, player->actor.params & 0xFF); + if (PLAYER_GET_BG_CAM_INDEX(&player->actor) != 0xFF) { + Camera_ChangeActorCsCamIndex(&this->mainCamera, PLAYER_GET_BG_CAM_INDEX(&player->actor)); } CutsceneManager_StoreCamera(&this->mainCamera); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index f8b33b853..5509fd4a1 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -472,7 +472,7 @@ void func_80123140(PlayState* play, Player* player) { REG(39) = bootRegs[8]; REG(43) = bootRegs[9]; R_RUN_SPEED_LIMIT = bootRegs[10]; - REG(68) = bootRegs[11]; + REG(68) = bootRegs[11]; // gravity REG(69) = bootRegs[12]; IREG(66) = bootRegs[13]; IREG(67) = bootRegs[14]; @@ -503,7 +503,7 @@ s32 Player_InBlockingCsMode(PlayState* play, Player* player) { s32 Player_InCsMode(PlayState* play) { Player* player = GET_PLAYER(play); - return Player_InBlockingCsMode(play, player) || player->unk_AA5 == 5; + return Player_InBlockingCsMode(play, player) || (player->unk_AA5 == PLAYER_UNKAA5_5); } s32 func_80123420(Player* player) { @@ -556,8 +556,8 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) { Player* player = GET_PLAYER(play); if (player->stateFlags3 & PLAYER_STATE3_1000) { - player->unk_B08[0] = arg1; - player->unk_B08[1] += arg1 * 0.05f; + player->unk_B08 = arg1; + player->unk_B0C += arg1 * 0.05f; player->currentYaw = arg2; player->actor.home.rot.y = arg2; player->actor.shape.rot.y = arg2; @@ -659,7 +659,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_KOKIRI PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_RAZOR PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_GILDED - PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_GREAT_FAIRY + PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_TWO_HANDED PLAYER_MODELGROUP_STICK, // PLAYER_IA_STICK PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW @@ -1316,6 +1316,7 @@ void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, Pla player->itemAction = itemAction; } +// Player_Untarget / Player_StopTargeting? void func_80123DA4(Player* player) { player->targetedActor = NULL; player->stateFlags2 &= ~PLAYER_STATE2_2000; @@ -1445,7 +1446,7 @@ PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) { s32 Player_IsHoldingTwoHandedWeapon(Player* player) { // Relies on the itemActions for two-handed weapons being contiguous. - if ((player->heldItemAction >= PLAYER_IA_SWORD_GREAT_FAIRY) && (player->heldItemAction <= PLAYER_IA_STICK)) { + if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_STICK)) { return true; } @@ -2038,7 +2039,7 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** pos->x *= player->ageProperties->unk_08; pos->z *= player->ageProperties->unk_08; } - if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) { + if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y)) { pos->y *= player->ageProperties->unk_08; } } @@ -2552,14 +2553,16 @@ void func_8012669C(PlayState* play, Player* player, Vec3f* arg2, Vec3f* arg3) { Matrix_MultVec3f(arg2, &sp3C); Matrix_MultVec3f(arg3, &sp30); - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if (func_80126440(play, NULL, &player->meleeWeaponInfo[0], &sp3C, &sp30) && (player->transformation != PLAYER_FORM_GORON) && (!(player->stateFlags1 & PLAYER_STATE1_400000))) { EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[0]), &player->meleeWeaponInfo[0].tip, &player->meleeWeaponInfo[0].base); } - if ((player->meleeWeaponState > 0) && ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) || - (player->stateFlags2 & PLAYER_STATE2_20000))) { + + if ((player->meleeWeaponState >= PLAYER_MELEE_WEAPON_STATE_1) && + ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) || + (player->stateFlags2 & PLAYER_STATE2_20000))) { Matrix_MultVec3f(&arg2[1], &sp3C); Matrix_MultVec3f(&arg3[1], &sp30); func_80126440(play, &player->meleeWeaponQuads[0], &player->meleeWeaponInfo[1], &sp3C, &sp30); @@ -2714,7 +2717,7 @@ void func_80126BD0(PlayState* play, Player* player, s32 arg2) { gSPDisplayList(POLY_OPA_DISP++, D_801C0AB4[arg2]); - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if ((((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT)) && (arg2 == 0)) || ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) && (arg2 != 0))) { func_8012669C(play, player, D_801C0A00, D_801C09DC); @@ -3296,7 +3299,7 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) { Matrix_Push(); Matrix_Translate(-428.26f, 267.2f, -33.82f, MTXMODE_APPLY); Matrix_RotateZYX(-0x8000, 0, 0x4000, MTXMODE_APPLY); - Matrix_Scale(1.0f, player->unk_B08[1], 1.0f, MTXMODE_APPLY); + Matrix_Scale(1.0f, player->unk_B0C, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); @@ -3413,7 +3416,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G 3000.0f, // PLAYER_MELEEWEAPON_SWORD_KOKIRI 3000.0f, // PLAYER_MELEEWEAPON_SWORD_RAZOR 4000.0f, // PLAYER_MELEEWEAPON_SWORD_GILDED - 5500.0f, // PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY + 5500.0f, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED -1.0f, // PLAYER_MELEEWEAPON_STICK 2500.0f, // PLAYER_MELEEWEAPON_ZORA_FINS }; @@ -3421,19 +3424,19 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) || ((player->transformation != PLAYER_FORM_ZORA) && ((player->itemAction == PLAYER_IA_STICK) || - ((player->meleeWeaponState != 0) && + ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_RIGHT) && (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))))) { if (player->itemAction == PLAYER_IA_STICK) { - D_801C0994->x = player->unk_B08[1] * 5000.0f; + D_801C0994->x = player->unk_B0C * 5000.0f; } else { D_801C0994->x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(player)]; } func_80126B8C(play, player); } - Matrix_Get(&player->mf_CC4); - Matrix_MtxFToYXZRot(&player->mf_CC4, &player->leftHandWorld.rot, false); + Matrix_Get(&player->leftHandMf); + Matrix_MtxFToYXZRot(&player->leftHandMf, &player->leftHandWorld.rot, false); } } } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) { @@ -3458,18 +3461,18 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G Matrix_MultZero(&sp20C); temp_fv0 = Math_Vec3f_DistXYZ(sPlayerCurBodyPartPos, &sp20C); - player->unk_B08[0] = temp_fv0 - 3.0f; + player->unk_B08 = temp_fv0 - 3.0f; if (temp_fv0 < 3.0f) { - player->unk_B08[0] = 0.0f; + player->unk_B08 = 0.0f; } else { - player->unk_B08[0] *= 1.6f; - if (player->unk_B08[0] > 1.0f) { - player->unk_B08[0] = 1.0f; + player->unk_B08 *= 1.6f; + if (player->unk_B08 > 1.0f) { + player->unk_B08 = 1.0f; } } - player->unk_B08[1] = -0.5f; + player->unk_B0C = -0.5f; } - Matrix_Scale(1.0f, player->unk_B08[0], 1.0f, MTXMODE_APPLY); + Matrix_Scale(1.0f, player->unk_B08, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -3518,7 +3521,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G Player_DrawHookshotReticle(play, player, 77600.0f); } } - } else if (player->meleeWeaponState != 0) { + } else if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT) { func_80126B8C(play, player); } @@ -3590,6 +3593,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G for (i = 0; i < ARRAY_COUNT(sp178); i++) { Matrix_Push(); Matrix_Scale(sp178[i].x, sp178[i].y, sp178[i].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -3811,7 +3815,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G &player->meleeWeaponInfo[0].base); } } else if (limbIndex == PLAYER_LIMB_RIGHT_SHIN) { - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) || (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_START) || (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { @@ -3819,7 +3823,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G } } } else if (limbIndex == PLAYER_LIMB_WAIST) { - if (player->meleeWeaponState != 0) { + if (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) { if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT) { Math_Vec3f_Copy(&player->unk_AF0[1], &player->meleeWeaponInfo[0].base); func_8012669C(play, player, D_801C0A90, D_801C0A6C); diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 085cb4de2..cff66dacb 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1944,7 +1944,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) { skelAnime->jointTable->x = skelAnime->baseTransl.x; skelAnime->prevTransl.z = skelAnime->jointTable->z; skelAnime->jointTable->z = skelAnime->baseTransl.z; - if (skelAnime->moveFlags & ANIM_FLAG_UPDATEY) { + if (skelAnime->moveFlags & ANIM_FLAG_UPDATE_Y) { if (skelAnime->moveFlags & ANIM_FLAG_NOMOVE) { diff->y = 0.0f; } else { diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index a4d95af64..d19253df5 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -15,7 +15,7 @@ Vec3f gOneVec3f = { 1.0f, 1.0f, 1.0f }; s32 D_801C5DBC[] = { 0, 1 }; // Unused /** - * Finds the first EnDoor instance with unk_1A4 == 5 and the specified switchFlag. + * Finds the first EnDoor instance with doorType == ENDOOR_TYPE_5 and the specified switchFlag. */ EnDoor* SubS_FindDoor(PlayState* play, s32 switchFlag) { Actor* actor = NULL; @@ -29,7 +29,7 @@ EnDoor* SubS_FindDoor(PlayState* play, s32 switchFlag) { break; } - if ((door->unk_1A4 == 5) && (door->switchFlag == (u8)switchFlag)) { + if ((door->doorType == ENDOOR_TYPE_5) && (door->switchFlag == (u8)switchFlag)) { break; } diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index e271449b5..49525c864 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -141,6 +141,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { if (this->timer != 0 && (this->collider.base.atFlags & AT_HIT) && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) { Actor* touchedActor = this->collider.base.at; + if ((touchedActor->update != NULL) && (touchedActor->flags & (ACTOR_FLAG_200 | ACTOR_FLAG_400))) { if (this->collider.info.atHitInfo->bumperFlags & BUMP_HOOKABLE) { ArmsHook_AttachHookToActor(this, touchedActor); diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h index 31b675f41..bde007da1 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h @@ -15,7 +15,7 @@ typedef struct ArmsHook { /* 0x1EC */ Vec3f unk1EC; /* 0x1F8 */ Actor* grabbed; /* 0x1FC */ Vec3f unk1FC; - /* 0x208 */ UNK_TYPE1 unk208[0x2]; + /* 0x208 */ s8 unk_208; /* 0x20A */ s16 timer; /* 0x20C */ ArmsHookActionFunc actionFunc; } ArmsHook; // size = 0x210 diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c index 8f3de2b2e..db2c79e39 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c @@ -321,8 +321,8 @@ void func_80B84610(BgDblueWaterfall* this, PlayState* play) { player->actor.world.pos.x += sp34.x; player->actor.world.pos.z += sp34.z; if (this && this && this) {} - player->unk_B80 = 8.0f; - player->unk_B84 = this->actor.yawTowardsPlayer; + player->pushedSpeed = 8.0f; + player->pushedYaw = this->actor.yawTowardsPlayer; } static InitChainEntry sInitChain[] = { diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 9a3bbabdf..119c3854a 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -68,10 +68,10 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) { f32 temp_fv0; s16 temp_v0; - if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer < 100.0f)) { - temp_fv0 = func_80ACAB10(play, &this->dyna.actor, 0.0f, 65.0f, 15.0f); + if (!Player_InCsMode(play) && (this->slidingDoor.dyna.actor.xzDistToPlayer < 100.0f)) { + temp_fv0 = func_80ACAB10(play, &this->slidingDoor.dyna.actor, 0.0f, 65.0f, 15.0f); if (fabsf(temp_fv0) < 50.0f) { - temp_v0 = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y; + temp_v0 = player->actor.shape.rot.y - this->slidingDoor.dyna.actor.shape.rot.y; if (temp_fv0 > 0.0f) { temp_v0 = (0x8000 - temp_v0); } @@ -91,31 +91,32 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) { void BgOpenShutter_Init(Actor* thisx, PlayState* play) { BgOpenShutter* this = THIS; - Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_open_obj_Colheader_001640); + Actor_ProcessInitChain(&this->slidingDoor.dyna.actor, sInitChain); + DynaPolyActor_Init(&this->slidingDoor.dyna, DYNA_TRANSFORM_POS); + DynaPolyActor_LoadMesh(play, &this->slidingDoor.dyna, &object_open_obj_Colheader_001640); this->actionFunc = func_80ACAD88; } void BgOpenShutter_Destroy(Actor* thisx, PlayState* play) { BgOpenShutter* this = THIS; - s32 params = BGOPENSHUTTER_GET_A(thisx); + s32 transition = DOOR_GET_TRANSITION_ID(thisx); - play->doorCtx.transitionActorList[params].id = -play->doorCtx.transitionActorList[params].id; - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); + play->doorCtx.transitionActorList[transition].id = -play->doorCtx.transitionActorList[transition].id; + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->slidingDoor.dyna.bgId); } void func_80ACAD88(BgOpenShutter* this, PlayState* play) { s32 doorDirection; - if (this->unk_15C != 0) { + if (this->slidingDoor.unk_15C != 0) { Player* player = GET_PLAYER(play); - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); - Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->dyna.actor, player->unk_3BA, 0.0f, 12, 15, 10); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); + Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->slidingDoor.dyna.actor, player->doorBgCamIndex, 0.0f, + 12, 15, 10); this->unk_164 = 0; this->actionFunc = func_80ACAE5C; - this->dyna.actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; } else { Player* player = GET_PLAYER(play); @@ -123,20 +124,20 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) { if (doorDirection > 0) { player->doorType = PLAYER_DOORTYPE_SLIDING; player->doorDirection = doorDirection; - player->doorActor = &this->dyna.actor; + player->doorActor = &this->slidingDoor.dyna.actor; func_80122F28(player); } } } void func_80ACAE5C(BgOpenShutter* this, PlayState* play) { - Math_StepToF(&this->dyna.actor.velocity.y, 15.0f, 3.0f); - if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y + 120.0f, - this->dyna.actor.velocity.y)) { + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 15.0f, 3.0f); + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y + 120.0f, + this->slidingDoor.dyna.actor.velocity.y)) { this->unk_164++; } if (this->unk_164 >= 10) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); this->actionFunc = func_80ACAEF0; } } @@ -145,20 +146,22 @@ void func_80ACAEF0(BgOpenShutter* this, PlayState* play) { s32 pad; s16 quakeIndex; - Math_StepToF(&this->dyna.actor.velocity.y, 20.0f, 8.0f); - if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, this->dyna.actor.velocity.y)) { - this->dyna.actor.floorHeight = this->dyna.actor.home.pos.y; - Actor_SpawnFloorDustRing(play, &this->dyna.actor, &this->dyna.actor.world.pos, 60.0f, 10, 8.0f, 500, 10, true); - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BIGWALL_BOUND); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 20.0f, 8.0f); + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y, + this->slidingDoor.dyna.actor.velocity.y)) { + this->slidingDoor.dyna.actor.floorHeight = this->slidingDoor.dyna.actor.home.pos.y; + Actor_SpawnFloorDustRing(play, &this->slidingDoor.dyna.actor, &this->slidingDoor.dyna.actor.world.pos, 60.0f, + 10, 8.0f, 500, 10, true); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_BIGWALL_BOUND); quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, -32536); Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); Quake_SetDuration(quakeIndex, 10); - Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 180, 20, 100); + Rumble_Request(this->slidingDoor.dyna.actor.xyzDistToPlayerSq, 180, 20, 100); - this->unk_15C = 0; + this->slidingDoor.unk_15C = 0; this->actionFunc = func_80ACAD88; } } @@ -172,14 +175,14 @@ void BgOpenShutter_Update(Actor* thisx, PlayState* play2) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_124); if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_OPEN) { if (this->actionFunc == func_80ACAD88) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); this->actionFunc = func_80ACAE5C; - this->dyna.actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; } this->unk_164 = 0; } else if (play->csCtx.actorCues[cueChannel]->id == BGOPENSHUTTER_DOOR_CLOSED) { if (this->actionFunc == func_80ACAE5C) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); this->actionFunc = func_80ACAEF0; } } diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h index f6c6067d4..c035606b1 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.h @@ -2,16 +2,14 @@ #define Z_BG_OPEN_SHUTTER_H #include "global.h" - -#define BGOPENSHUTTER_GET_A(thisx) ((u16)((thisx)->params) >> 0xA) +#include "z64door.h" struct BgOpenShutter; typedef void (*BgOpenShutterActionFunc)(struct BgOpenShutter*, PlayState*); typedef struct BgOpenShutter { - /* 0x000 */ DynaPolyActor dyna; - /* 0x15C */ s16 unk_15C; + /* 0x000 */ SlidingDoorActor slidingDoor; /* 0x160 */ BgOpenShutterActionFunc actionFunc; /* 0x164 */ s32 unk_164; } BgOpenShutter; // size = 0x168 diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index 054b612bc..c8ceed19b 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -1842,16 +1842,16 @@ void Boss03_UpdateCollision(Boss03* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sHeadJntSphElementsInit); i++) { if (this->headCollider.elements[i].info.toucherFlags & TOUCH_HIT) { this->headCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT; - player->unk_B84 = this->actor.shape.rot.y; - player->unk_B80 = 20.0f; + player->pushedYaw = this->actor.shape.rot.y; + player->pushedSpeed = 20.0f; } } for (i = 0; i < ARRAY_COUNT(sBodyJntSphElementsInit); i++) { if (this->bodyCollider.elements[i].info.toucherFlags & TOUCH_HIT) { this->bodyCollider.elements[i].info.toucherFlags &= ~TOUCH_HIT; - player->unk_B84 = this->actor.shape.rot.y; - player->unk_B80 = 20.0f; + player->pushedYaw = this->actor.shape.rot.y; + player->pushedSpeed = 20.0f; } } } diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index fcc183ef9..eac8b10ab 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -139,15 +139,17 @@ void DoorShutter_SetupAction(DoorShutter* this, DoorShutterActionFunc actionFunc } s32 func_808A0900(DoorShutter* this, PlayState* play) { - TransitionActorEntry* transitionEntry = &play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)]; + TransitionActorEntry* transitionEntry = + &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]; s8 frontRoom = transitionEntry->sides[0].room; if (frontRoom == transitionEntry->sides[1].room) { - if (ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, this->actor.yawTowardsPlayer)) < 0x4000) { + if (ABS_ALT(BINANG_SUB(this->slidingDoor.dyna.actor.shape.rot.y, + this->slidingDoor.dyna.actor.yawTowardsPlayer)) < 0x4000) { frontRoom = -1; } } - return frontRoom == this->actor.room; + return frontRoom == this->slidingDoor.dyna.actor.room; } s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) { @@ -173,13 +175,13 @@ s32 DoorShutter_SetupDoor(DoorShutter* this, PlayState* play) { } if (doorType == 1) { - if (!Flags_GetClear(play, this->actor.room)) { + if (!Flags_GetClear(play, this->slidingDoor.dyna.actor.room)) { DoorShutter_SetupAction(this, func_808A0F88); this->unk_168 = 1.0f; return true; } } else if ((doorType == 2) || (doorType == 7)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); this->unk_168 = 1.0f; return true; @@ -201,8 +203,8 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { s32 sp24; s32 i; - Actor_ProcessInitChain(&this->actor, sInitChain); - this->doorType = DOORSHUTTER_GET_380(&this->actor); + Actor_ProcessInitChain(&this->slidingDoor.dyna.actor, sInitChain); + this->doorType = DOORSHUTTER_GET_380(&this->slidingDoor.dyna.actor); sp24 = D_808A2240[this->doorType]; if (sp24 < 0) { @@ -216,7 +218,7 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { sp24 = shutterSceneInfo->index; if (sp24 == 6) { - this->actor.flags |= ACTOR_FLAG_10000000; + this->slidingDoor.dyna.actor.flags |= ACTOR_FLAG_10000000; } } else if (sp24 == 0) { BossDoorInfo* bossDoorInfo = &D_808A22A0[0]; @@ -227,13 +229,13 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { } } - this->unk_15E = bossDoorInfo->index; + this->slidingDoor.unk_15E = bossDoorInfo->index; } else { - this->actor.room = -1; + this->slidingDoor.dyna.actor.room = -1; } if ((this->requiredObjBankIndex = Object_GetIndex(&play->objectCtx, D_808A2180[sp24].objectId)) < 0) { - Actor_Kill(&this->actor); + Actor_Kill(&this->slidingDoor.dyna.actor); return; } @@ -241,19 +243,19 @@ void DoorShutter_Init(Actor* thisx, PlayState* play2) { this->unk_163 = sp24; if ((this->doorType == 4) || (this->doorType == 5)) { - if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) { + if (!Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { this->unk_166 = 10; } } - Actor_SetFocus(&this->actor, 60.0f); + Actor_SetFocus(&this->slidingDoor.dyna.actor, 60.0f); } void DoorShutter_Destroy(Actor* thisx, PlayState* play) { DoorShutter* this = THIS; - if (this->actor.room >= 0) { - s32 transitionActorId = DOORSHUTTER_GET_FC00(&this->actor); + if (this->slidingDoor.dyna.actor.room >= 0) { + s32 transitionActorId = DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor); play->doorCtx.transitionActorList[transitionActorId].id = -play->doorCtx.transitionActorList[transitionActorId].id; @@ -263,8 +265,8 @@ void DoorShutter_Destroy(Actor* thisx, PlayState* play) { void DoorShutter_SetupType(DoorShutter* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex) && (!R_PLAY_FILL_SCREEN_ON || (R_PLAY_FILL_SCREEN_ALPHA == 0))) { - this->actor.objBankIndex = this->requiredObjBankIndex; - this->actor.draw = DoorShutter_Draw; + this->slidingDoor.dyna.actor.objBankIndex = this->requiredObjBankIndex; + this->slidingDoor.dyna.actor.draw = DoorShutter_Draw; DoorShutter_SetupDoor(this, play); } } @@ -278,7 +280,7 @@ f32 func_808A0D90(PlayState* play, DoorShutter* this, f32 arg2, f32 arg3, f32 ar sp28.y = player->actor.world.pos.y + arg2; sp28.z = player->actor.world.pos.z; - Actor_OffsetOfPointInActorCoords(&this->actor, &sp1C, &sp28); + Actor_OffsetOfPointInActorCoords(&this->slidingDoor.dyna.actor, &sp1C, &sp28); if ((arg3 < fabsf(sp1C.x)) || (arg4 < fabsf(sp1C.y))) { return FLT_MAX; @@ -294,7 +296,7 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { f32 temp_f0 = func_808A0D90(play, this, 0.0f, shutterInfo->unk_0A, shutterInfo->unk_0B); if (fabsf(temp_f0) < 50.0f) { - s16 temp_v0_2 = BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y); + s16 temp_v0_2 = BINANG_SUB(player->actor.shape.rot.y, this->slidingDoor.dyna.actor.shape.rot.y); if (temp_f0 > 0.0f) { temp_v0_2 = 0x8000 - temp_v0_2; @@ -309,8 +311,9 @@ s32 func_808A0E28(DoorShutter* this, PlayState* play) { } void func_808A0F88(DoorShutter* this, PlayState* play) { - if (Flags_GetClear(play, this->actor.room) || Flags_GetClearTemp(play, this->actor.room)) { - this->csId = this->actor.csId; + if (Flags_GetClear(play, this->slidingDoor.dyna.actor.room) || + Flags_GetClearTemp(play, this->slidingDoor.dyna.actor.room)) { + this->csId = this->slidingDoor.dyna.actor.csId; if (this->doorType == 7) { if (this->csId != CS_ID_NONE) { this->csId = CutsceneManager_GetAdditionalCsId(this->csId); @@ -318,8 +321,8 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { } if (CutsceneManager_IsNext(this->csId)) { - CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); - Flags_SetClear(play, this->actor.room); + CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor); + Flags_SetClear(play, this->slidingDoor.dyna.actor.room); DoorShutter_SetupAction(this, func_808A1784); this->unk_167 = -1; } else { @@ -329,8 +332,8 @@ void func_808A0F88(DoorShutter* this, PlayState* play) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; - player->doorActor = &this->actor; - this->actor.textId = 0x1801; + player->doorActor = &this->slidingDoor.dyna.actor; + this->slidingDoor.dyna.actor.textId = 0x1801; func_80122F28(player); } } @@ -339,16 +342,16 @@ void func_808A1080(DoorShutter* this, PlayState* play) { } void func_808A1090(DoorShutter* this, PlayState* play) { - if (this->unk_15C != 0) { + if (this->slidingDoor.unk_15C != 0) { DoorShutter_SetupAction(this, func_808A1684); - this->actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; if (this->unk_166 != 0) { - Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->actor)); + Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor)); if (this->doorType != 5) { gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; - Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { - Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); } } } else { @@ -359,7 +362,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { player->doorType = PLAYER_DOORTYPE_SLIDING; player->doorDirection = doorDirection; - player->doorActor = &this->actor; + player->doorActor = &this->slidingDoor.dyna.actor; if (this->unk_163 == 7) { player->doorTimer = 12; @@ -368,20 +371,21 @@ void func_808A1090(DoorShutter* this, PlayState* play) { } if (this->doorType == 6) { - if (gSaveContext.save.saveInfo.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity < + (DOORSHUTTER_GET_1F(&this->slidingDoor.dyna.actor) * 0x10)) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->actor.textId = 0x14FC; + this->slidingDoor.dyna.actor.textId = 0x14FC; } } else if (this->unk_166 != 0) { if (this->doorType == 5) { if (!CHECK_DUNGEON_ITEM(DUNGEON_BOSS_KEY, gSaveContext.mapIndex)) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->actor.textId = 0x1803; + this->slidingDoor.dyna.actor.textId = 0x1803; } player->doorTimer += 10; } else if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->actor.textId = 0x1802; + this->slidingDoor.dyna.actor.textId = 0x1802; } else { player->doorTimer += 10; } @@ -392,7 +396,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { } void func_808A1288(DoorShutter* this, PlayState* play) { - if (this->actor.category == ACTORCAT_DOOR) { + if (this->slidingDoor.dyna.actor.category == ACTORCAT_DOOR) { Player* player = GET_PLAYER(play); s32 sp38 = this->unk_164; s32 sp34 = 0xF; @@ -406,17 +410,18 @@ void func_808A1288(DoorShutter* this, PlayState* play) { this->unk_164 = sp38; this->unk_168 = 0.0f; - Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->actor, player->unk_3BA, this->unk_168, 12, sp34, 10); + Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->slidingDoor.dyna.actor, player->doorBgCamIndex, + this->unk_168, 12, sp34, 10); } } s32 func_808A1340(DoorShutter* this, PlayState* play) { Vec3f sp2C; - if (this->actor.velocity.y == 0.0f) { + if (this->slidingDoor.dyna.actor.velocity.y == 0.0f) { func_808A1288(this, play); if (this->unk_163 != 7) { - Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_OPEN); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN); } } @@ -424,20 +429,22 @@ s32 func_808A1340(DoorShutter* this, PlayState* play) { s32 pad; if (this->unk_163 == 7) { - func_800B9010(&this->actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG); + func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_OPEN - SFX_FLAG); } - Lib_Vec3f_TranslateAndRotateY(&this->actor.home.pos, this->actor.shape.rot.y, + Lib_Vec3f_TranslateAndRotateY(&this->slidingDoor.dyna.actor.home.pos, this->slidingDoor.dyna.actor.shape.rot.y, (this->unk_163 == 7) ? &D_808A22C4 : &D_808A22D0, &sp2C); - Math_StepToF(&this->actor.velocity.y, 5.0f, 0.5f); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f); - if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &sp2C, this->actor.velocity.y) == 0.0f) { + if (Math_Vec3f_StepToXZ(&this->slidingDoor.dyna.actor.world.pos, &sp2C, + this->slidingDoor.dyna.actor.velocity.y) == 0.0f) { return true; } } else { - Math_StepToF(&this->actor.velocity.y, 15.0f, 3.0f); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 15.0f, 3.0f); - if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y + 200.0f, this->actor.velocity.y)) { + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y + 200.0f, + this->slidingDoor.dyna.actor.velocity.y)) { return true; } } @@ -449,13 +456,13 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { if (temp == this->unk_168) { if (arg2 == 1.0f) { - Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_METALDOOR_CLOSE); } else { - Actor_PlaySfx(&this->actor, NA_SE_EV_METALDOOR_OPEN); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_METALDOOR_OPEN); } if ((this->csId != CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() == this->csId)) { - func_800B724C(play, &this->actor, PLAYER_CSMODE_1); + func_800B724C(play, &this->slidingDoor.dyna.actor, PLAYER_CSMODE_1); } } @@ -467,10 +474,10 @@ s32 func_808A1478(DoorShutter* this, PlayState* play, f32 arg2) { void func_808A1548(DoorShutter* this, PlayState* play) { if (func_808A1478(this, play, 1.0f)) { - if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) { - this->csId = this->actor.csId; + if (Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { + this->csId = this->slidingDoor.dyna.actor.csId; if (CutsceneManager_IsNext(this->csId)) { - CutsceneManager_StartWithPlayerCs(this->csId, &this->actor); + CutsceneManager_StartWithPlayerCs(this->csId, &this->slidingDoor.dyna.actor); DoorShutter_SetupAction(this, func_808A1784); this->unk_167 = -1; } else { @@ -480,15 +487,15 @@ void func_808A1548(DoorShutter* this, PlayState* play) { Player* player = GET_PLAYER(play); player->doorType = PLAYER_DOORTYPE_TALKING; - player->doorActor = &this->actor; - this->actor.textId = 0x1800; + player->doorActor = &this->slidingDoor.dyna.actor; + this->slidingDoor.dyna.actor.textId = 0x1800; func_80122F28(player); } } } void func_808A1618(DoorShutter* this, PlayState* play) { - if ((this->unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->actor))) { + if ((this->slidingDoor.unk_15C == 0) && !Flags_GetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor))) { DoorShutter_SetupAction(this, func_808A1548); } else { func_808A1090(this, play); @@ -505,14 +512,14 @@ void func_808A1684(DoorShutter* this, PlayState* play) { phi_f0 = 50.0f; } - if (phi_f0 < this->actor.xzDistToPlayer) { + if (phi_f0 < this->slidingDoor.dyna.actor.xzDistToPlayer) { if (this->unk_163 == 7) { - this->actor.velocity.y = 0.0f; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; } else { if (DoorShutter_SetupDoor(this, play)) { - this->actor.velocity.y = 30.0f; + this->slidingDoor.dyna.actor.velocity.y = 30.0f; } - Actor_PlaySfx(&this->actor, NA_SE_EV_SLIDE_DOOR_CLOSE); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_SLIDE_DOOR_CLOSE); } DoorShutter_SetupAction(this, func_808A1B48); } @@ -521,7 +528,7 @@ void func_808A1684(DoorShutter* this, PlayState* play) { void func_808A1784(DoorShutter* this, PlayState* play) { if (this->unk_167 != 0) { - if (func_800F22C4(this->csId, &this->actor) != 0) { + if (func_800F22C4(this->csId, &this->slidingDoor.dyna.actor) != 0) { if (this->unk_167 < 0) { if ((play->state.frames % 2) != 0) { this->unk_167++; @@ -545,16 +552,18 @@ void func_808A1784(DoorShutter* this, PlayState* play) { void func_808A1884(DoorShutter* this, PlayState* play) { Player* player = GET_PLAYER(play); - s8 room = this->actor.room; + s8 room = this->slidingDoor.dyna.actor.room; Vec3f sp44; - if (this->actor.room >= 0) { - Actor_OffsetOfPointInActorCoords(&this->actor, &sp44, &player->actor.world.pos); + if (this->slidingDoor.dyna.actor.room >= 0) { + Actor_OffsetOfPointInActorCoords(&this->slidingDoor.dyna.actor, &sp44, &player->actor.world.pos); - this->actor.room = - play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)].sides[(sp44.z < 0.0f) ? 0 : 1].room; + this->slidingDoor.dyna.actor.room = + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)] + .sides[(sp44.z < 0.0f) ? 0 : 1] + .room; - if (room != this->actor.room) { + if (room != this->slidingDoor.dyna.actor.room) { Room temp = play->roomCtx.curRoom; play->roomCtx.curRoom = play->roomCtx.prevRoom; @@ -564,8 +573,8 @@ void func_808A1884(DoorShutter* this, PlayState* play) { func_8012EBF8(play, &play->roomCtx); } - this->unk_15C = 0; - this->actor.velocity.y = 0.0f; + this->slidingDoor.unk_15C = 0; + this->slidingDoor.dyna.actor.velocity.y = 0.0f; if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_800)) { DoorShutter_SetupAction(this, func_808A1C50); @@ -580,20 +589,22 @@ void func_808A1884(DoorShutter* this, PlayState* play) { s32 func_808A1A70(DoorShutter* this) { if (this->unk_163 == 7) { if (this->unk_163 == 7) { - func_800B9010(&this->actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG); + func_800B9010(&this->slidingDoor.dyna.actor, NA_SE_EV_IKANA_DOOR_CLOSE - SFX_FLAG); } - Math_StepToF(&this->actor.velocity.y, 5.0f, 0.5f); + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 5.0f, 0.5f); - if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &this->actor.home.pos, this->actor.velocity.y) == 0.0f) { + if (Math_Vec3f_StepToXZ(&this->slidingDoor.dyna.actor.world.pos, &this->slidingDoor.dyna.actor.home.pos, + this->slidingDoor.dyna.actor.velocity.y) == 0.0f) { return true; } } else { - if (this->actor.velocity.y < 20.0f) { - Math_StepToF(&this->actor.velocity.y, 20.0f, 8.0f); + if (this->slidingDoor.dyna.actor.velocity.y < 20.0f) { + Math_StepToF(&this->slidingDoor.dyna.actor.velocity.y, 20.0f, 8.0f); } - if (Math_StepToF(&this->actor.world.pos.y, this->actor.home.pos.y, this->actor.velocity.y)) { + if (Math_StepToF(&this->slidingDoor.dyna.actor.world.pos.y, this->slidingDoor.dyna.actor.home.pos.y, + this->slidingDoor.dyna.actor.velocity.y)) { return true; } } @@ -604,18 +615,19 @@ void func_808A1B48(DoorShutter* this, PlayState* play) { s16 quakeIndex; if (func_808A1A70(this)) { - if (this->actor.velocity.y > 20.0f) { - this->actor.floorHeight = this->actor.home.pos.y; - Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, 45.0f, 10, 8.0f, 500, 10, 0); + if (this->slidingDoor.dyna.actor.velocity.y > 20.0f) { + this->slidingDoor.dyna.actor.floorHeight = this->slidingDoor.dyna.actor.home.pos.y; + Actor_SpawnFloorDustRing(play, &this->slidingDoor.dyna.actor, &this->slidingDoor.dyna.actor.world.pos, + 45.0f, 10, 8.0f, 500, 10, 0); } - Actor_PlaySfx(&this->actor, NA_SE_EV_BIGWALL_BOUND); + Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_BIGWALL_BOUND); quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); Quake_SetSpeed(quakeIndex, -32536); Quake_SetPerturbations(quakeIndex, 2, 0, 0, 0); Quake_SetDuration(quakeIndex, 10); - Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100); + Rumble_Request(this->slidingDoor.dyna.actor.xyzDistToPlayerSq, 180, 20, 100); func_808A1884(this, play); } @@ -639,7 +651,9 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_163 == 7) { - this->actor.home.rot.z = Math_Vec3f_DistXZ(&this->actor.home.pos, &this->actor.world.pos) * -100.0f; + this->slidingDoor.dyna.actor.home.rot.z = + Math_Vec3f_DistXZ(&this->slidingDoor.dyna.actor.home.pos, &this->slidingDoor.dyna.actor.world.pos) * + -100.0f; } } } @@ -652,8 +666,9 @@ s32 func_808A1D68(DoorShutter* this, PlayState* play) { return true; } - temp_a0 = BINANG_SUB(Actor_WorldYawTowardPoint(&this->actor, &play->view.eye), this->actor.shape.rot.y); - temp_a1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); + temp_a0 = BINANG_SUB(Actor_WorldYawTowardPoint(&this->slidingDoor.dyna.actor, &play->view.eye), + this->slidingDoor.dyna.actor.shape.rot.y); + temp_a1 = BINANG_SUB(this->slidingDoor.dyna.actor.yawTowardsPlayer, this->slidingDoor.dyna.actor.shape.rot.y); temp_a0 = ABS_ALT(temp_a0); temp_a1 = ABS_ALT(temp_a1); @@ -678,26 +693,27 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { if (this->unk_164 == 7) { Matrix_Translate(0.0f, 64.96f, 0.0f, MTXMODE_APPLY); - Matrix_RotateZS(this->actor.home.rot.z, MTXMODE_APPLY); + Matrix_RotateZS(this->slidingDoor.dyna.actor.home.rot.z, MTXMODE_APPLY); Matrix_Translate(0.0f, -64.96f, 0.0f, MTXMODE_APPLY); } if (sp44->unk_04 != 0) { TransitionActorEntry* transitionEntry = - &play->doorCtx.transitionActorList[DOORSHUTTER_GET_FC00(&this->actor)]; + &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->slidingDoor.dyna.actor)]; if ((play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { - s16 yaw = this->actor.shape.rot.y - Math_Vec3f_Yaw(&play->view.eye, &this->actor.world.pos); + s16 yaw = this->slidingDoor.dyna.actor.shape.rot.y - + Math_Vec3f_Yaw(&play->view.eye, &this->slidingDoor.dyna.actor.world.pos); if (ABS_ALT(yaw) < 0x4000) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } - } else if (this->actor.room == transitionEntry->sides[0].room) { + } else if (this->slidingDoor.dyna.actor.room == transitionEntry->sides[0].room) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } } else if (this->doorType == 5) { - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808A22DC[this->unk_15E])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_808A22DC[this->slidingDoor.unk_15E])); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h index 7f18e0546..abdf0ce84 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h @@ -2,6 +2,7 @@ #define Z_DOOR_SHUTTER_H #include "global.h" +#include "z64door.h" struct DoorShutter; @@ -10,14 +11,10 @@ typedef void (*DoorShutterActionFunc)(struct DoorShutter*, PlayState*); #define DOORSHUTTER_GET_1F(thisx) ((thisx)->params & 0x1F) #define DOORSHUTTER_GET_7F(thisx) ((thisx)->params & 0x7F) #define DOORSHUTTER_GET_380(thisx) (((thisx)->params >> 7) & 7) -#define DOORSHUTTER_GET_FC00(thisx) ((u16)(thisx)->params >> 0xA) typedef struct DoorShutter { - /* 0x0000 */ Actor actor; - /* 0x0144 */ UNK_TYPE1 unk144[0x18]; - /* 0x015C */ s16 unk_15C; - /* 0x015E */ s16 unk_15E; - /* 0x0160 */ s16 csId; + /* 0x000 */ SlidingDoorActor slidingDoor; + /* 0x160 */ s16 csId; /* 0x0162 */ u8 doorType; /* 0x0163 */ u8 unk_163; /* 0x0164 */ u8 unk_164; diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h index 701b38639..af4f27aea 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.h @@ -7,7 +7,8 @@ struct DoorSpiral; typedef struct DoorSpiral { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0xC]; + /* 0x144 */ u8 shouldClimb; + /* 0x145 */ UNK_TYPE1 unk_145[0xB]; } DoorSpiral; // size = 0x150 #endif // Z_DOOR_SPIRAL_H diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index 2833477e4..02dad6c0c 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -326,7 +326,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { distanceTraveled = this->distanceTraveled; gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); - if (player->unk_B08[0] >= 0.85f) { + if (player->unk_B08 >= 0.85f) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0); } else { gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 0); @@ -339,7 +339,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (*distanceTraveled * 255.0f)); aux = 1.0f - SQ(*distanceTraveled); - Matrix_Mult(&player->mf_CC4, MTXMODE_NEW); + Matrix_Mult(&player->leftHandMf, MTXMODE_NEW); Matrix_Translate(initialPositions->x * ((this->dx * aux) + (1.0f - this->dx)), (initialPositions->y * (1.0f - *distanceTraveled)) + 320.0f, (initialPositions->z * (1.0f - *distanceTraveled)) + -20.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c index fbe4c27cf..03123fedc 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c @@ -4,7 +4,6 @@ * Description: Wave Created by Turtle Awakening */ -#include "prevent_bss_reordering.h" #include "z_eff_kamejima_wave.h" #include "objects/object_kamejima/object_kamejima.h" diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c index 31d137299..261b47bd4 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -422,8 +422,9 @@ void func_808B0894(EnAm* this, PlayState* play) { this->armosYaw = this->actor.yawTowardsPlayer; func_808B0208(this, play); if (this->explodeTimer == 1) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 2, 0); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 2, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; } diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index b94e3ecb5..aff4a9de6 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -78,26 +78,26 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { EnArrow* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - if (this->actor.params == -ENARROW_8) { + if (this->actor.params == -ARROW_TYPE_DEKU_NUT) { this->unk_263 = 1; - this->actor.params = ENARROW_8; + this->actor.params = ARROW_TYPE_DEKU_NUT; } - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { SkelAnime_Init(play, &this->arrow.skelAnime, &gameplay_keep_Skel_014560, &gameplay_keep_Anim_0128BC, this->arrow.jointTable, this->arrow.jointTable, 5); - if (this->actor.params < ENARROW_3) { - if (this->actor.params == ENARROW_1) { + if (this->actor.params < ARROW_TYPE_FIRE) { + if (this->actor.params == ARROW_TYPE_NORMAL_HORSE) { D_8088C234.elemDuration = 4; } else { D_8088C234.elemDuration = 16; } Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C234); - } else if (this->actor.params == ENARROW_3) { + } else if (this->actor.params == ARROW_TYPE_FIRE) { Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C258); - } else if (this->actor.params == ENARROW_4) { + } else if (this->actor.params == ARROW_TYPE_ICE) { Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C27C); - } else if (this->actor.params == ENARROW_5) { + } else if (this->actor.params == ARROW_TYPE_LIGHT) { Effect_Add(play, &this->unk_240, EFFECT_BLURE2, 0, 0, &D_8088C2A0); } } @@ -105,20 +105,20 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { Collider_InitQuad(play, &this->collider); Collider_SetQuad(play, &this->collider, &this->actor, &sQuadInit); - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { this->collider.info.toucherFlags &= ~(TOUCH_SFX_WOOD | TOUCH_SFX_HARD); this->collider.info.toucherFlags |= 0; } - if (this->actor.params < ENARROW_0) { + if (this->actor.params < ARROW_TYPE_NORMAL_LIT) { this->collider.base.atFlags = (AT_TYPE_ENEMY | AT_ON); } else { this->collider.info.toucher.dmgFlags = Actor_GetArrowDmgFlags(this->actor.params); - if (this->actor.params == ENARROW_8) { + if (this->actor.params == ARROW_TYPE_DEKU_NUT) { this->collider.info.toucher.damage = 1; } - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { Actor_SetScale(&this->actor, 1.0f); } } @@ -128,7 +128,7 @@ void EnArrow_Init(Actor* thisx, PlayState* play) { void EnArrow_Destroy(Actor* thisx, PlayState* play) { EnArrow* this = THIS; - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { Effect_Destroy(play, this->unk_240); } @@ -138,7 +138,7 @@ void EnArrow_Destroy(Actor* thisx, PlayState* play) { this->unk_264->flags &= ~ACTOR_FLAG_8000; } - if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6) && (this->actor.child == NULL)) { + if (ARROW_IS_MAGICAL(this->actor.params) && (this->actor.child == NULL)) { Magic_Reset(play); } } @@ -153,7 +153,7 @@ void func_8088A594(EnArrow* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->actor.parent != NULL) { - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (Math_SmoothStepToF(&this->bubble.unk_144, 16.0f, 0.07f, 1.8f, 0.0f) > 0.5f) { func_800B9010(&this->actor, NA_SE_PL_DEKUNUTS_BUBLE_BREATH - SFX_FLAG); return; @@ -166,8 +166,8 @@ void func_8088A594(EnArrow* this, PlayState* play) { } } } else { - if ((this->actor.params != ENARROW_8) && (player->unk_D57 == 0)) { - if (this->actor.params == ENARROW_7) { + if ((this->actor.params != ARROW_TYPE_DEKU_NUT) && (player->unk_D57 == 0)) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { Magic_Reset(play); } Actor_Kill(&this->actor); @@ -175,22 +175,22 @@ void func_8088A594(EnArrow* this, PlayState* play) { } switch (this->actor.params) { - case ENARROW_6: + case ARROW_TYPE_SLINGSHOT: Player_PlaySfx(player, NA_SE_IT_SLING_SHOT); break; - case ENARROW_0: - case ENARROW_1: - case ENARROW_2: + case ARROW_TYPE_NORMAL_LIT: + case ARROW_TYPE_NORMAL_HORSE: + case ARROW_TYPE_NORMAL: Player_PlaySfx(player, NA_SE_IT_ARROW_SHOT); break; - case ENARROW_3: - case ENARROW_4: - case ENARROW_5: + case ARROW_TYPE_FIRE: + case ARROW_TYPE_ICE: + case ARROW_TYPE_LIGHT: Player_PlaySfx(player, NA_SE_IT_MAGIC_ARROW_SHOT); - case ENARROW_7: + case ARROW_TYPE_DEKU_BUBBLE: Player_PlaySfx(player, NA_SE_PL_DEKUNUTS_FIRE); break; } @@ -198,13 +198,13 @@ void func_8088A594(EnArrow* this, PlayState* play) { this->actionFunc = func_8088ACE0; Math_Vec3f_Copy(&this->unk_228, &this->actor.world.pos); - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { this->bubble.unk_144 = CLAMP_MIN(this->bubble.unk_144, 3.5f); func_8088A514(this); this->unk_260 = 99; Magic_Reset(play); - } else if (this->actor.params >= ENARROW_6) { - if ((this->actor.params == ENARROW_8) && (this->actor.world.rot.x < 0)) { + } else if (!ARROW_IS_ARROW(this->actor.params)) { + if ((this->actor.params == ARROW_TYPE_DEKU_NUT) && (this->actor.world.rot.x < 0)) { Actor_SetScale(&this->actor, 0.009f); this->unk_260 = 40; } else { @@ -295,14 +295,14 @@ void func_8088AA98(EnArrow* this, PlayState* play) { EffectSsGRipple_Spawn(play, &sp44, 100, 500, 4); EffectSsGRipple_Spawn(play, &sp44, 100, 500, 8); - if ((this->actor.params == ENARROW_4) || (this->actor.params == ENARROW_3)) { - if ((this->actor.params == ENARROW_4) && (func_8088B6B0 != this->actionFunc)) { + if ((this->actor.params == ARROW_TYPE_ICE) || (this->actor.params == ARROW_TYPE_FIRE)) { + if ((this->actor.params == ARROW_TYPE_ICE) && (func_8088B6B0 != this->actionFunc)) { Actor_Spawn(&play->actorCtx, play, ACTOR_BG_ICEFLOE, sp44.x, sp44.y, sp44.z, 0, 0, 0, 300); Actor_Kill(&this->actor); return; } - this->actor.params = ENARROW_2; + this->actor.params = ARROW_TYPE_NORMAL; this->collider.info.toucher.dmgFlags = 0x20; if (this->actor.child != NULL) { @@ -329,9 +329,9 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { s32 sp50; if ((DECR(this->unk_260) == 0) || - ((this->actor.params == ENARROW_7) && + ((this->actor.params == ARROW_TYPE_DEKU_BUBBLE) && ((this->unk_262 != 0) || (phi_a2 = (this->collider.base.atFlags & AT_HIT) != 0)))) { - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (phi_a2 && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4) && (this->collider.base.atFlags & AT_BOUNCED)) { if ((this->collider.base.at != NULL) && (this->collider.base.at->id != ACTOR_OBJ_SYOKUDAI)) { @@ -361,18 +361,18 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { return; } - sp50 = - (this->actor.params != ENARROW_0) && (this->actor.params < ENARROW_8) && (this->collider.base.atFlags & AT_HIT); + sp50 = (this->actor.params != ARROW_TYPE_NORMAL_LIT) && (this->actor.params < ARROW_TYPE_DEKU_NUT) && + (this->collider.base.atFlags & AT_HIT); if (sp50 || (this->unk_262 != 0)) { - if (this->actor.params >= ENARROW_6) { + if (!ARROW_IS_ARROW(this->actor.params)) { if (sp50) { this->actor.world.pos.x = (this->actor.world.pos.x + this->actor.prevPos.x) * 0.5f; this->actor.world.pos.y = (this->actor.world.pos.y + this->actor.prevPos.y) * 0.5f; this->actor.world.pos.z = (this->actor.world.pos.z + this->actor.prevPos.z) * 0.5f; } - if (this->actor.params == ENARROW_8) { + if (this->actor.params == ARROW_TYPE_DEKU_NUT) { R_TRANS_FADE_FLASH_ALPHA_STEP = -1; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_M_FIRE1, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, this->actor.speed == 0.0f); @@ -408,12 +408,12 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { } else if (this->unk_262 != 0) { this->actionFunc = func_8088B630; Animation_PlayOnce(&this->arrow.skelAnime, &gameplay_keep_Anim_0128BC); - if (this->actor.params >= ENARROW_0) { + if (this->actor.params >= ARROW_TYPE_NORMAL_LIT) { this->unk_260 = 60; } else { this->unk_260 = 20; } - if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) { + if (ARROW_IS_MAGICAL(this->actor.params)) { this->actor.draw = NULL; } Actor_PlaySfx(&this->actor, NA_SE_IT_ARROW_STICK_OBJ); @@ -422,7 +422,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { } } else { func_8088AA98(this, play); - if (this->actor.params == ENARROW_7) { + if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { if (this->bubble.unk_149 == 0) { sp78 = sqrtf(SQ(this->actor.speed) + SQ(this->actor.velocity.y)); sp74 = Math_SinS(this->actor.world.rot.y) * this->actor.speed; @@ -473,7 +473,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { this->actor.wallBgId = spA8; } - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { this->actor.shape.rot.x = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y); } } @@ -540,21 +540,27 @@ void EnArrow_Update(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); if ((this->unk_263 != 0) || - ((this->actor.params >= ENARROW_0) && ((this->actor.params == ENARROW_7) || (player->unk_D57 != 0))) || + ((this->actor.params >= ARROW_TYPE_NORMAL_LIT) && + ((this->actor.params == ARROW_TYPE_DEKU_BUBBLE) || (player->unk_D57 != 0))) || !Player_InBlockingCsMode(play, player)) { this->actionFunc(this, play); } - if ((this->actor.params >= ENARROW_3) && (this->actor.params < ENARROW_6)) { - s16 sp44[] = { ACTOR_ARROW_FIRE, ACTOR_ARROW_ICE, ACTOR_ARROW_LIGHT }; + if (ARROW_IS_MAGICAL(this->actor.params)) { + s16 sp44[] = { + ACTOR_ARROW_FIRE, // ARROW_MAGIC_FIRE + ACTOR_ARROW_ICE, // ARROW_MAGIC_ICE + ACTOR_ARROW_LIGHT, // ARROW_MAGIC_LIGHT + }; if (this->actor.child == NULL) { - Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, sp44[this->actor.params - ENARROW_3], + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, sp44[ARROW_GET_MAGIC_FROM_TYPE(this->actor.params)], this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } - } else if (this->actor.params == ENARROW_0) { + } else if (this->actor.params == ARROW_TYPE_NORMAL_LIT) { func_800B0EB0(play, &this->unk_234, &D_8088C2CC, &D_8088C2D8, &D_8088C2E4, &D_8088C2E8, 100, 0, 8); } + Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.prevPos); } @@ -579,8 +585,8 @@ void func_8088B88C(PlayState* play, EnArrow* this, EnArrowUnkStruct* arg2) { } Matrix_MultVec3f(&sp4C[0], &sp40); Matrix_MultVec3f(&sp4C[1], &sp34); - if (this->actor.params < ENARROW_8) { - sp30 = this->actor.params < ENARROW_6; + if (this->actor.params < ARROW_TYPE_DEKU_NUT) { + sp30 = ARROW_IS_ARROW(this->actor.params); if (this->unk_264 == NULL) { sp30 &= func_80126440(play, &this->collider, &this->unk_244, &sp40, &sp34); } else if (sp30 && (sp40.x == this->unk_244.tip.x) && (sp40.y == this->unk_244.tip.y) && @@ -635,11 +641,11 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { EnArrow* this = THIS; s32 phi_v0; - if (this->actor.params < ENARROW_6) { + if (ARROW_IS_ARROW(this->actor.params)) { func_8012C28C(play->state.gfxCtx); SkelAnime_DrawLod(play, this->arrow.skelAnime.skeleton, this->arrow.skelAnime.jointTable, NULL, NULL, &this->actor, this->actor.projectedPos.z < 160.0f ? 0 : 1); - } else if (this->actor.params == ENARROW_7) { + } else if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { s32 spA4 = 255 - (s32)(this->bubble.unk_144 * 4.0f); f32 spA0 = (this->actor.speed * 0.1f) + 1.0f; f32 sp9C = (1.0f / spA0); @@ -697,7 +703,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { gSPClearGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING); - if (this->actor.params == ENARROW_6) { + if (this->actor.params == ARROW_TYPE_SLINGSHOT) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 0, 255, 255, sp63); sp5C = 50.0f; @@ -737,5 +743,6 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } + func_8088B88C(play, this, &D_8088C2EC[0]); } diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h index 313dd86bb..14d5bef94 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.h @@ -7,17 +7,30 @@ struct EnArrow; typedef void (*EnArrowActionFunc)(struct EnArrow*, PlayState*); -enum { - /* 0 */ ENARROW_0, // Lit arrow - /* 1 */ ENARROW_1, // Horse arrow - /* 2 */ ENARROW_2, // Normal arrow - /* 3 */ ENARROW_3, // Fire arrow - /* 4 */ ENARROW_4, // Ice arrow - /* 5 */ ENARROW_5, // Light arrow - /* 6 */ ENARROW_6, // ? - /* 7 */ ENARROW_7, // Deku bubble - /* 8 */ ENARROW_8, // Deku Nut -}; +typedef enum ArrowType { + /* 0 */ ARROW_TYPE_NORMAL_LIT, // Normal arrow lit on fire + /* 1 */ ARROW_TYPE_NORMAL_HORSE, // Normal arrow shot while riding a horse + /* 2 */ ARROW_TYPE_NORMAL, + /* 3 */ ARROW_TYPE_FIRE, + /* 4 */ ARROW_TYPE_ICE, + /* 5 */ ARROW_TYPE_LIGHT, + /* 6 */ ARROW_TYPE_SLINGSHOT, + /* 7 */ ARROW_TYPE_DEKU_BUBBLE, + /* 8 */ ARROW_TYPE_DEKU_NUT +} ArrowType; + +#define ARROW_IS_MAGICAL(arrowType) (((arrowType) >= ARROW_TYPE_FIRE) && ((arrowType) <= ARROW_TYPE_LIGHT)) +#define ARROW_GET_MAGIC_FROM_TYPE(arrowType) (s32)((arrowType) - ARROW_TYPE_FIRE) +#define ARROW_IS_ARROW(arrowType) ((arrowType) < ARROW_TYPE_SLINGSHOT) + +typedef enum ArrowMagic { + /* -1 */ ARROW_MAGIC_INVALID = -1, + /* 0 */ ARROW_MAGIC_FIRE = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_FIRE), + /* 1 */ ARROW_MAGIC_ICE = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_ICE), + /* 2 */ ARROW_MAGIC_LIGHT = ARROW_GET_MAGIC_FROM_TYPE(ARROW_TYPE_LIGHT), + /* 3 */ ARROW_MAGIC_DEKU_BUBBLE // Only used in Player. Does not map to ARROW_TYPE_SLINGSHOT +} ArrowMagic; + typedef struct { /* 0x144 */ SkelAnime skelAnime; diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index 17ebe10f7..cb9c6e3ec 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -348,7 +348,7 @@ void EnBom_Explode(EnBom* this, PlayState* play) { this->collider2.elements->dim.worldSphere.radius = D_80872E8C[this->isPowderKeg]; if (this->timer == 7) { - this->collider2.base.atFlags &= ~OC1_TYPE_1; + this->collider2.base.atFlags &= ~AT_TYPE_ENEMY; } if (this->actor.params == BOMB_TYPE_EXPLOSION) { diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h index bf568cd6a..40558a919 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -11,11 +11,17 @@ typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*); #define ENBOM_GETZ_80(thisx) ((thisx)->shape.rot.z & 0x80) #define ENBOM_GETZ_FF00(thisx) (((thisx)->shape.rot.z & 0xFF00) >> 8) -typedef enum { +typedef enum BombType { /* 0 */ BOMB_TYPE_BODY, /* 1 */ BOMB_TYPE_EXPLOSION, } BombType; +// Passed via x rotation +typedef enum EnBomExplosiveType { + /* 0 */ BOMB_EXPLOSIVE_TYPE_BOMB, + /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG, +} EnBomExplosiveType; + typedef struct EnBom { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider1; diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index a2246b442..8d2461649 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -326,7 +326,7 @@ void EnBomChu_Explode(EnBomChu* this, PlayState* play) { s32 i; bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); this->shouldTimerCountDown = true; this->isMoving = false; diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index 4abfad7b1..eacaa3dce 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -164,7 +164,7 @@ void EnBoom_Destroy(Actor* thisx, PlayState* play) { } void func_808A2918(EnBoom* this, PlayState* play) { - Actor* sp7C; + Actor* targetActor; Player* player = GET_PLAYER(play); s32 sp74; s16 sp72; @@ -175,25 +175,26 @@ void func_808A2918(EnBoom* this, PlayState* play) { f32 sp64; f32 distXYZ; - sp7C = this->player; + targetActor = this->moveTo; - if (sp7C != NULL) { - sp72 = Actor_WorldYawTowardPoint(&this->actor, &sp7C->focus.pos); + if (targetActor != NULL) { + sp72 = Actor_WorldYawTowardPoint(&this->actor, &targetActor->focus.pos); sp70 = this->actor.world.rot.y - sp72; - sp6E = Actor_WorldPitchTowardPoint(&this->actor, &sp7C->focus.pos); + sp6E = Actor_WorldPitchTowardPoint(&this->actor, &targetActor->focus.pos); sp6C = this->actor.world.rot.x - sp6E; - sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &sp7C->focus.pos)) * 0.005f; + sp64 = (200.0f - Math_Vec3f_DistXYZ(&this->actor.world.pos, &targetActor->focus.pos)) * 0.005f; if (sp64 < 0.12f) { sp64 = 0.12f; } - if ((&player->actor != sp7C) && ((sp7C->update == NULL) || ((this->unk_1CF < 0) && (ABS_ALT(sp70) > 0x4000)))) { - this->player = NULL; + if ((&player->actor != targetActor) && + ((targetActor->update == NULL) || ((this->unk_1CF < 0) && (ABS_ALT(sp70) > 0x4000)))) { + this->moveTo = NULL; } else { if (this->unk_1CE != 0) { this->unk_1CE--; - this->actor.world.rot.y += (this->actor.params == 0) ? 0x190 : -0x190; + this->actor.world.rot.y += (this->actor.params == ZORA_BOOMERANG_LEFT) ? 0x190 : -0x190; } else { if (this->unk_1CF > 0) { this->unk_1CF--; @@ -242,7 +243,7 @@ void func_808A2918(EnBoom* this, PlayState* play) { if (sp74 != 0) { this->actor.world.rot.x = -this->actor.world.rot.x; this->actor.world.rot.y += 0x8000; - this->player = &player->actor; + this->moveTo = &player->actor; this->unk_1CC = 0; } } @@ -250,34 +251,34 @@ void func_808A2918(EnBoom* this, PlayState* play) { if (this->unk_1CC <= 16) { distXYZ = Math_Vec3f_DistXYZ(&this->actor.world.pos, &player->actor.focus.pos); - if (&player->actor != this->player) { - if (this->player == 0) { + if (&player->actor != this->moveTo) { + if (this->moveTo == 0) { this->unk_1CE = 8; } - this->player = &player->actor; + this->moveTo = &player->actor; } if (distXYZ < 40.0f) { - sp7C = this->unk_1C8; - if (sp7C != NULL) { - Math_Vec3f_Copy(&sp7C->world.pos, &player->actor.world.pos); - if (sp7C->id == ACTOR_EN_ITEM00) { - sp7C->gravity = -0.9f; - sp7C->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH); + targetActor = this->unk_1C8; + if (targetActor != NULL) { + Math_Vec3f_Copy(&targetActor->world.pos, &player->actor.world.pos); + if (targetActor->id == ACTOR_EN_ITEM00) { + targetActor->gravity = -0.9f; + targetActor->bgCheckFlags &= ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH); } else { - sp7C->flags &= ~ACTOR_FLAG_2000; + targetActor->flags &= ~ACTOR_FLAG_2000; } } Actor_Kill(&this->actor); } } - sp7C = this->unk_1C8; - if (sp7C != NULL) { - if (sp7C->update == NULL) { + targetActor = this->unk_1C8; + if (targetActor != NULL) { + if (targetActor->update == NULL) { this->unk_1C8 = NULL; } else { - Math_Vec3f_Copy(&sp7C->world.pos, &this->actor.world.pos); + Math_Vec3f_Copy(&targetActor->world.pos, &this->actor.world.pos); } } } @@ -298,7 +299,7 @@ void EnBoom_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, 0.0f); } - if (this->actor.params != 0) { + if (this->actor.params != ZORA_BOOMERANG_LEFT) { this->unk_1CD--; } else { this->unk_1CD++; @@ -326,7 +327,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Matrix_RotateYS(this->actor.world.rot.y, MTXMODE_APPLY); - Matrix_RotateZS((this->actor.params != 0) ? 0x1F40 : -0x1F40, MTXMODE_APPLY); + Matrix_RotateZS((this->actor.params != ZORA_BOOMERANG_LEFT) ? 0x1F40 : -0x1F40, MTXMODE_APPLY); Matrix_RotateXS(this->actor.world.rot.x, MTXMODE_APPLY); Matrix_MultVec3f(&sp58->unk_04, &sp4C); Matrix_MultVec3f(&sp58->unk_10, &sp40); diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.h b/src/overlays/actors/ovl_En_Boom/z_en_boom.h index e5e3fa2b3..7bae2b150 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.h +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.h @@ -3,6 +3,11 @@ #include "global.h" +typedef enum { + /* 0 */ ZORA_BOOMERANG_LEFT, + /* 1 */ ZORA_BOOMERANG_RIGHT +} EnBoomType; + struct EnBoom; typedef void (*EnBoomActionFunc)(struct EnBoom*, PlayState*); @@ -10,7 +15,7 @@ typedef void (*EnBoomActionFunc)(struct EnBoom*, PlayState*); typedef struct EnBoom { /* 0x000 */ Actor actor; /* 0x144 */ ColliderQuad collider; - /* 0x1C4 */ Actor* player; + /* 0x1C4 */ Actor* moveTo; /* 0x1C8 */ Actor* unk_1C8; /* 0x1CC */ u8 unk_1CC; /* 0x1CD */ u8 unk_1CD; diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index 05072da72..4055399e2 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -416,7 +416,7 @@ void EnButte_Update(Actor* thisx, PlayState* play) { this->unk_258 += 0x600; if (ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) { - if (GET_PLAYER(play)->meleeWeaponState == 0) { + if (GET_PLAYER(play)->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) { if (this->unk_252 > 0) { this->unk_252--; } diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index 6f7d32de1..def6dd27a 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -203,7 +203,8 @@ void func_80AFE25C(EnColMan* this, PlayState* play) { CLEAR_TAG_SMALL_EXPLOSION); } else { EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.y, this->actor.world.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 535b0d65f..8446ff413 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -438,8 +438,9 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) { return true; } - if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && this->actor.isTargeted && - (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && Player_IsFacingActor(&this->actor, 0x2000, play)) { + if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + this->actor.isTargeted && (Rand_ZeroOne() < 0.5f) && func_8089A968(this) && + Player_IsFacingActor(&this->actor, 0x2000, play)) { if (Rand_ZeroOne() < 0.5f) { func_8089C024(this, 2); } else { diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index a57814337..c2fd7acf1 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -914,7 +914,8 @@ void func_808787B0(EnDodongo* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { if (this->timer == 0) { EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); + this->actor.world.pos.y, this->actor.world.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; } diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index e2b225e23..47a7bcd34 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -15,7 +15,6 @@ #include "objects/object_wdor03/object_wdor03.h" #include "objects/object_wdor04/object_wdor04.h" #include "objects/object_wdor05/object_wdor05.h" -#include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_numa_obj/object_numa_obj.h" #include "objects/object_kaizoku_obj/object_kaizoku_obj.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" @@ -387,21 +386,22 @@ static Gfx* D_808679A4[14][2] = { void EnDoor_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; s32 objectBankIndex; - EnDoorInfo* objectInfo = sObjInfo; + EnDoorInfo* objectInfo = &sObjInfo[0]; EnDoor* this = THIS; s32 i; - Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + Actor_ProcessInitChain(&this->knobDoor.dyna.actor, sInitChain); - this->unk_1A4 = ENDOOR_GET_PARAMS_7(thisx); + this->doorType = ENDOOR_GET_TYPE(thisx); this->switchFlag = ENDOOR_GET_PARAMS_7F(thisx); - if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) { - DynaPolyActor_Init(&this->dyna, 0); - DynaPolyActor_LoadMesh(play, &this->dyna, &gDoorCol); + if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { + DynaPolyActor_Init(&this->knobDoor.dyna, 0); + DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol); } - SkelAnime_Init(play, &this->skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable, this->limbTable, 5); - if (this->unk_1A4 == 5) { + SkelAnime_Init(play, &this->knobDoor.skelAnime, &gDoorSkel, &gameplay_keep_Anim_020658, this->limbTable, + this->limbTable, DOOR_LIMB_MAX); + if (this->doorType == ENDOOR_TYPE_5) { objectInfo = &sObjInfo[17 + this->switchFlag]; } else { for (i = 0; i < ARRAY_COUNT(sObjInfo) - 34; i++, objectInfo++) { @@ -414,52 +414,53 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { } } - this->dlIndex = objectInfo->dListIndex; + this->knobDoor.dlIndex = objectInfo->dListIndex; objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); if (objectBankIndex < 0) { objectInfo = &sObjInfo[15]; objectBankIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); if (objectBankIndex != 0) { - Actor_Kill(&this->dyna.actor); + Actor_Kill(&this->knobDoor.dyna.actor); return; } } - this->requiredObjBankIndex = objectBankIndex; - this->dlIndex = objectInfo->dListIndex; // Set twice? - if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) { + this->knobDoor.requiredObjBankIndex = objectBankIndex; + this->knobDoor.dlIndex = objectInfo->dListIndex; // Set twice? + if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { func_80866A5C(this, play); } else { this->actionFunc = func_80866A5C; } - Actor_SetFocus(&this->dyna.actor, 35.0f); + Actor_SetFocus(&this->knobDoor.dyna.actor, 35.0f); } void EnDoor_Destroy(Actor* thisx, PlayState* play) { EnDoor* this = (EnDoor*)thisx; - if (this->unk_1A4 != 7) { - TransitionActorEntry* transitionEntry = &play->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA]; + if (this->doorType != ENDOOR_TYPE_7) { + TransitionActorEntry* transitionEntry = + &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->knobDoor.dyna.actor)]; if (transitionEntry->id < 0) { transitionEntry->id = -transitionEntry->id; } } else if (this->switchFlag == 0) { - DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->knobDoor.dyna.bgId); } } void func_80866A5C(EnDoor* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->requiredObjBankIndex)) { - this->dyna.actor.objBankIndex = this->requiredObjBankIndex; + if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) { + this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex; this->actionFunc = func_80866B20; - this->dyna.actor.world.rot.y = 0; - if (this->unk_1A4 == 1) { + this->knobDoor.dyna.actor.world.rot.y = 0; + if (this->doorType == ENDOOR_TYPE_1) { if (!Flags_GetSwitch(play, this->switchFlag)) { this->unk_1A6 = 10; } - } else if ((this->unk_1A4 == 4) && - (Actor_WorldDistXZToActor(&this->dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) { + } else if ((this->doorType == ENDOOR_TYPE_4) && + (Actor_WorldDistXZToActor(&this->knobDoor.dyna.actor, &GET_PLAYER(play)->actor) > 120.0f)) { this->actionFunc = func_8086704C; - this->dyna.actor.world.rot.y = -0x1800; + this->knobDoor.dyna.actor.world.rot.y = -0x1800; } } } @@ -468,28 +469,29 @@ void func_80866B20(EnDoor* this, PlayState* play) { static s32 D_80867BC0; Player* player = GET_PLAYER(play); - if (Actor_ProcessTalkRequest(&this->dyna.actor, &play->state) && (this->dyna.actor.textId == 0x1821)) { + if (Actor_ProcessTalkRequest(&this->knobDoor.dyna.actor, &play->state) && + (this->knobDoor.dyna.actor.textId == 0x1821)) { D_80867BC0 = true; } - if (this->unk_1A1 != 0) { + if (this->knobDoor.playOpenAnim) { this->actionFunc = func_80867144; - Animation_PlayOnceSetSpeed(&this->skelAnime, sAnimations[this->animIndex], + Animation_PlayOnceSetSpeed(&this->knobDoor.skelAnime, sAnimations[this->knobDoor.animIndex], (player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f); if (this->unk_1A6 != 0) { gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; Flags_SetSwitch(play, this->switchFlag); - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } } else if (this->unk_1A7 != 0) { this->actionFunc = func_80866F94; - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN); + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_OPEN); } else if (!Player_InCsMode(play)) { Vec3f playerPosRelToDoor; - Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos); + Actor_OffsetOfPointInActorCoords(&this->knobDoor.dyna.actor, &playerPosRelToDoor, &player->actor.world.pos); if (D_80867BC0 || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) && (fabsf(playerPosRelToDoor.z) < 50.0f))) { - s16 yawDiff = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y; + s16 yawDiff = player->actor.shape.rot.y - this->knobDoor.dyna.actor.shape.rot.y; if (playerPosRelToDoor.z > 0.0f) { yawDiff = (0x8000 - yawDiff); @@ -497,51 +499,52 @@ void func_80866B20(EnDoor* this, PlayState* play) { if (ABS_ALT(yawDiff) < 0x3000) { player->doorType = PLAYER_DOORTYPE_HANDLE; player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f; - player->doorActor = &this->dyna.actor; + player->doorActor = &this->knobDoor.dyna.actor; if (this->unk_1A6 != 0) { if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->dyna.actor.textId = 0x1802; + this->knobDoor.dyna.actor.textId = 0x1802; } else { player->doorTimer = 10; } - } else if (this->unk_1A4 == 4) { + } else if (this->doorType == ENDOOR_TYPE_4) { player->doorType = PLAYER_DOORTYPE_TALKING; - this->dyna.actor.textId = 0x1800; - } else if ((this->unk_1A4 == 0) || (this->unk_1A4 == 2) || (this->unk_1A4 == 3)) { + this->knobDoor.dyna.actor.textId = 0x1800; + } else if ((this->doorType == ENDOOR_TYPE_0) || (this->doorType == ENDOOR_TYPE_2) || + (this->doorType == ENDOOR_TYPE_3)) { s32 halfDaysDayBit = (play->actorCtx.halfDaysBit & HALFDAYBIT_DAWNS) >> 1; s32 halfDaysNightBit = play->actorCtx.halfDaysBit & HALFDAYBIT_NIGHTS; s16 temp_a2 = D_801AED48[this->switchFlag & 7]; s32 textIdOffset = (this->switchFlag >> 3) & 0xF; - if (((this->unk_1A4 == 0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) || - ((this->unk_1A4 == 2) && !(halfDaysNightBit & temp_a2)) || - ((this->unk_1A4 == 3) && !(halfDaysDayBit & temp_a2))) { + if (((this->doorType == ENDOOR_TYPE_0) && !((halfDaysDayBit | halfDaysNightBit) & temp_a2)) || + ((this->doorType == ENDOOR_TYPE_2) && !(halfDaysNightBit & temp_a2)) || + ((this->doorType == ENDOOR_TYPE_3) && !(halfDaysDayBit & temp_a2))) { s16 baseTextId = 0x182D; - if (this->unk_1A4 == 3) { + if (this->doorType == ENDOOR_TYPE_3) { baseTextId = 0x180D; - } else if (this->unk_1A4 == 2) { + } else if (this->doorType == ENDOOR_TYPE_2) { baseTextId = 0x181D; } player->doorType = PLAYER_DOORTYPE_TALKING; - this->dyna.actor.textId = baseTextId + textIdOffset; + this->knobDoor.dyna.actor.textId = baseTextId + textIdOffset; } - } else if ((this->unk_1A4 == 5) && (playerPosRelToDoor.z > 0.0f)) { + } else if ((this->doorType == ENDOOR_TYPE_5) && (playerPosRelToDoor.z > 0.0f)) { ScheduleOutput scheduleOutput; if (Schedule_RunScript(play, D_8086778C[this->switchFlag], &scheduleOutput)) { - this->dyna.actor.textId = scheduleOutput.result + 0x1800; + this->knobDoor.dyna.actor.textId = scheduleOutput.result + 0x1800; - player->doorType = ((this->dyna.actor.textId == 0x1821) && D_80867BC0) + player->doorType = ((this->knobDoor.dyna.actor.textId == 0x1821) && D_80867BC0) ? PLAYER_DOORTYPE_PROXIMITY : PLAYER_DOORTYPE_TALKING; } } func_80122F28(player); } - } else if ((this->unk_1A4 == 4) && (this->dyna.actor.xzDistToPlayer > 240.0f)) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_OPEN); + } else if ((this->doorType == ENDOOR_TYPE_4) && (this->knobDoor.dyna.actor.xzDistToPlayer > 240.0f)) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_OPEN); this->actionFunc = func_80867080; } } @@ -556,34 +559,34 @@ void func_80866F94(EnDoor* this, PlayState* play) { } else { direction = -1; } - if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) { + if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, direction * 0x3E80, 0x7D0)) { Math_StepToC(&this->unk_1A7, 0, 1); } } else { - if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x7D0)) { + if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, 0, 0x7D0)) { this->actionFunc = func_80866B20; - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE); + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_AUTO_DOOR_CLOSE); } } } void func_8086704C(EnDoor* this, PlayState* play) { - if (this->dyna.actor.xzDistToPlayer < 120.0f) { + if (this->knobDoor.dyna.actor.xzDistToPlayer < 120.0f) { this->actionFunc = func_808670F0; } } void func_80867080(EnDoor* this, PlayState* play) { - if (this->dyna.actor.xzDistToPlayer < 120.0f) { + if (this->knobDoor.dyna.actor.xzDistToPlayer < 120.0f) { this->actionFunc = func_808670F0; - } else if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, -0x1800, 0x100)) { + } else if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, -0x1800, 0x100)) { this->actionFunc = func_8086704C; } } void func_808670F0(EnDoor* this, PlayState* play) { - if (Math_ScaledStepToS(&this->dyna.actor.world.rot.y, 0, 0x700)) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE); + if (Math_ScaledStepToS(&this->knobDoor.dyna.actor.world.rot.y, 0, 0x700)) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_CLOSE); this->actionFunc = func_80866B20; } } @@ -593,19 +596,19 @@ void func_80867144(EnDoor* this, PlayState* play) { s32 i; if (DECR(this->unk_1A6) == 0) { - if (SkelAnime_Update(&this->skelAnime) != 0) { + if (SkelAnime_Update(&this->knobDoor.skelAnime)) { this->actionFunc = func_80866B20; - this->unk_1A1 = 0; - } else if (Animation_OnFrame(&this->skelAnime, sAnimOpenFrames[this->animIndex])) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_OC_DOOR_OPEN); - if (this->skelAnime.playSpeed < 1.5f) { + this->knobDoor.playOpenAnim = false; + } else if (Animation_OnFrame(&this->knobDoor.skelAnime, sAnimOpenFrames[this->knobDoor.animIndex])) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_OC_DOOR_OPEN); + if (this->knobDoor.skelAnime.playSpeed < 1.5f) { numEffects = (s32)(Rand_ZeroOne() * 30.0f) + 50; for (i = 0; i < numEffects; i++) { - EffectSsBubble_Spawn(play, &this->dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f); + EffectSsBubble_Spawn(play, &this->knobDoor.dyna.actor.world.pos, 60.0, 100.0f, 50.0f, 0.15f); } } - } else if (Animation_OnFrame(&this->skelAnime, sAnimCloseFrames[this->animIndex])) { - Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DOOR_CLOSE); + } else if (Animation_OnFrame(&this->knobDoor.skelAnime, sAnimCloseFrames[this->knobDoor.animIndex])) { + Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_DOOR_CLOSE); } } } @@ -620,28 +623,28 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* TransitionActorEntry* transitionEntry; EnDoor* this = THIS; - if (limbIndex == 4) { - Gfx** dl = D_808679A4[this->dlIndex]; + if (limbIndex == DOOR_LIMB_4) { + Gfx** dl = D_808679A4[this->knobDoor.dlIndex]; s16 temp; s32 dlIndex; transitionEntry = NULL; - if (this->unk_1A4 != 7) { - transitionEntry = &play->doorCtx.transitionActorList[(u16)this->dyna.actor.params >> 0xA]; + if (this->doorType != ENDOOR_TYPE_7) { + transitionEntry = &play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&this->knobDoor.dyna.actor)]; } - rot->z += this->dyna.actor.world.rot.y; - if ((this->unk_1A4 == 7) || (play->roomCtx.prevRoom.num >= 0) || + rot->z += this->knobDoor.dyna.actor.world.rot.y; + if ((this->doorType == ENDOOR_TYPE_7) || (play->roomCtx.prevRoom.num >= 0) || (transitionEntry->sides[0].room == transitionEntry->sides[1].room)) { s32 pad; - temp = (this->dyna.actor.shape.rot.y + this->skelAnime.jointTable[3].z + rot->z) - - Math_Vec3f_Yaw(&play->view.eye, &this->dyna.actor.world.pos); + temp = (this->knobDoor.dyna.actor.shape.rot.y + this->knobDoor.skelAnime.jointTable[3].z + rot->z) - + Math_Vec3f_Yaw(&play->view.eye, &this->knobDoor.dyna.actor.world.pos); *dList = (ABS_ALT(temp) < 0x4000) ? dl[0] : dl[1]; } else { dlIndex = 0; - if (transitionEntry->sides[0].room != this->dyna.actor.room) { + if (transitionEntry->sides[0].room != this->knobDoor.dyna.actor.room) { dlIndex = 1; } *dList = dl[dlIndex]; @@ -653,17 +656,17 @@ s32 EnDoor_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnDoor_Draw(Actor* thisx, PlayState* play) { EnDoor* this = THIS; - if (this->dyna.actor.objBankIndex == this->requiredObjBankIndex) { + if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { OPEN_DISPS(play->state.gfxCtx); - if ((this->unk_1A4 == 7) && (this->switchFlag == 0)) { + if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8); } else { func_8012C28C(play->state.gfxCtx); } - SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDoor_OverrideLimbDraw, NULL, - &this->dyna.actor); - if (this->dyna.actor.world.rot.y != 0) { - if (this->dyna.actor.world.rot.y > 0) { + SkelAnime_DrawOpa(play, this->knobDoor.skelAnime.skeleton, this->knobDoor.skelAnime.jointTable, + EnDoor_OverrideLimbDraw, NULL, &this->knobDoor.dyna.actor); + if (this->knobDoor.dyna.actor.world.rot.y != 0) { + if (this->knobDoor.dyna.actor.world.rot.y > 0) { gSPDisplayList(POLY_OPA_DISP++, gDoorRightDL); } else { gSPDisplayList(POLY_OPA_DISP++, gDoorLeftDL); diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.h b/src/overlays/actors/ovl_En_Door/z_en_door.h index bea44a122..b6fc7c254 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.h +++ b/src/overlays/actors/ovl_En_Door/z_en_door.h @@ -2,27 +2,34 @@ #define Z_EN_DOOR_H #include "global.h" +#include "z64door.h" +#include "objects/gameplay_keep/gameplay_keep.h" struct EnDoor; typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*); -#define ENDOOR_GET_PARAMS_7(thisx) (((thisx)->params >> 7) & 7) +#define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7) #define ENDOOR_GET_PARAMS_7F(thisx) (((thisx)->params) & 0x7F) +typedef enum EnDoorType { + /* 0 */ ENDOOR_TYPE_0, + /* 1 */ ENDOOR_TYPE_1, + /* 2 */ ENDOOR_TYPE_2, + /* 3 */ ENDOOR_TYPE_3, + /* 4 */ ENDOOR_TYPE_4, + /* 5 */ ENDOOR_TYPE_5, + /* 6 */ ENDOOR_TYPE_6, + /* 7 */ ENDOOR_TYPE_7 +} EnDoorType; typedef struct EnDoor { - /* 0x000 */ DynaPolyActor dyna; - /* 0x15C */ SkelAnime skelAnime; - /* 0x1A0 */ u8 animIndex; - /* 0x1A1 */ u8 unk_1A1; - /* 0x1A2 */ s8 requiredObjBankIndex; - /* 0x1A3 */ s8 dlIndex; - /* 0x1A4 */ u8 unk_1A4; + /* 0x000 */ KnobDoorActor knobDoor; + /* 0x1A4 */ u8 doorType; /* 0x1A5 */ u8 switchFlag; /* 0x1A6 */ u8 unk_1A6; /* 0x1A7 */ s8 unk_1A7; - /* 0x1A8 */ Vec3s limbTable[5]; + /* 0x1A8 */ Vec3s limbTable[DOOR_LIMB_MAX]; /* 0x1C8 */ EnDoorActionFunc actionFunc; } EnDoor; diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index 8959dde7a..84902f540 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -92,9 +92,9 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { s32 i; EnDoorEtc* this = THIS; - Actor_ProcessInitChain(&this->actor, sInitChain); - Actor_SetScale(&this->actor, 0.01f); - this->actor.shape.rot.x = -0x4000; + Actor_ProcessInitChain(&this->knobDoor.dyna.actor, sInitChain); + Actor_SetScale(&this->knobDoor.dyna.actor, 0.01f); + this->knobDoor.dyna.actor.shape.rot.x = -0x4000; this->angle = 0; for (i = 0; i < 15; i++, objectInfo++) { if (play->sceneId == objectInfo->sceneId) { @@ -106,19 +106,19 @@ void EnDoorEtc_Init(Actor* thisx, PlayState* play2) { } objectIndex = Object_GetIndex(&play->objectCtx, objectInfo->objectId); if (objectIndex < 0) { - Actor_Kill(&this->actor); + Actor_Kill(&this->knobDoor.dyna.actor); } else { - this->objectIndex = objectIndex; - this->dListIndex = objectInfo->dListIndex; - if (this->actor.objBankIndex == this->objectIndex) { + this->knobDoor.requiredObjBankIndex = objectIndex; + this->knobDoor.dlIndex = objectInfo->dListIndex; + if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { EnDoorEtc_WaitForObject(this, play); } else { this->actionFunc = EnDoorEtc_WaitForObject; } } Collider_InitCylinder(play, &this->collider); - Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.colChkInfo.mass = MASS_IMMOVABLE; + Collider_SetCylinder(play, &this->collider, &this->knobDoor.dyna.actor, &sCylinderInit); + this->knobDoor.dyna.actor.colChkInfo.mass = MASS_IMMOVABLE; } void EnDoorEtc_Destroy(Actor* thisx, PlayState* play) { @@ -139,11 +139,11 @@ s32 EnDoorEtc_IsDistanceGreater(Vec3f* a, Vec3f* b, f32 c) { } void EnDoorEtc_WaitForObject(EnDoorEtc* this, PlayState* play) { - if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) { - this->actor.flags &= ~ACTOR_FLAG_10; - this->actor.objBankIndex = this->objectIndex; + if (Object_IsLoaded(&play->objectCtx, this->knobDoor.requiredObjBankIndex)) { + this->knobDoor.dyna.actor.flags &= ~ACTOR_FLAG_10; + this->knobDoor.dyna.actor.objBankIndex = this->knobDoor.requiredObjBankIndex; this->actionFunc = func_80AC2354; - this->actor.draw = EnDoorEtc_Draw; + this->knobDoor.dyna.actor.draw = EnDoorEtc_Draw; } } @@ -175,27 +175,28 @@ void func_80AC21A0(EnDoorEtc* this, PlayState* play) { s16 yawDiff; s32 yawDiffAbs; - Actor_OffsetOfPointInActorCoords(&this->actor, &playerOffsetFromDoor, &player->actor.world.pos); - if (this->unk_1A1 == 0) { + Actor_OffsetOfPointInActorCoords(&this->knobDoor.dyna.actor, &playerOffsetFromDoor, &player->actor.world.pos); + if (!this->knobDoor.playOpenAnim) { if ((!Player_InCsMode(play)) && ((fabsf(playerOffsetFromDoor.y) < 20.0f) && fabsf(playerOffsetFromDoor.x) < 20.0f) && (fabsf(playerOffsetFromDoor.z) < 50.0f)) { - yawDiff = player->actor.shape.rot.y - this->actor.shape.rot.y; + yawDiff = player->actor.shape.rot.y - this->knobDoor.dyna.actor.shape.rot.y; if (playerOffsetFromDoor.z > 0.0f) { yawDiff = 0x8000 - yawDiff; } yawDiffAbs = ABS_ALT(yawDiff); if (yawDiffAbs < 0x3000) { player->doorDirection = (playerOffsetFromDoor.z >= 0.0f) ? 1.0f : -1.0f; - player->doorActor = &this->actor; - player->doorType = -1; + player->doorActor = &this->knobDoor.dyna.actor; + player->doorType = PLAYER_DOORTYPE_TALKING; } } } - if ((this->actor.textId == 0x239B) && Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->actor))) { - Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->actor)); + if ((this->knobDoor.dyna.actor.textId == 0x239B) && + Flags_GetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor))) { + Flags_UnsetSwitch(play, ENDOORETC_GET_SWITCHFLAG(&this->knobDoor.dyna.actor)); this->actionFunc = func_80AC2154; - this->actor.textId = 0x1800; // "It won't budge!" + this->knobDoor.dyna.actor.textId = 0x1800; // "It won't budge!" this->unk_1F4 |= 1; this->timer = 0x5A; } @@ -206,18 +207,18 @@ void func_80AC2354(EnDoorEtc* this, PlayState* play) { while (door != NULL) { if ((door->id != ACTOR_EN_DOOR) || - !EnDoorEtc_IsDistanceGreater(&door->world.pos, &this->actor.world.pos, 10.0f)) { + !EnDoorEtc_IsDistanceGreater(&door->world.pos, &this->knobDoor.dyna.actor.world.pos, 10.0f)) { door = door->next; } else { - this->actor.world.pos.x = door->world.pos.x; - this->actor.world.pos.y = door->world.pos.y; - this->actor.world.pos.z = door->world.pos.z; - this->actor.shape.rot.y = door->shape.rot.y; - this->actor.world.rot.y = door->world.rot.y; + this->knobDoor.dyna.actor.world.pos.x = door->world.pos.x; + this->knobDoor.dyna.actor.world.pos.y = door->world.pos.y; + this->knobDoor.dyna.actor.world.pos.z = door->world.pos.z; + this->knobDoor.dyna.actor.shape.rot.y = door->shape.rot.y; + this->knobDoor.dyna.actor.world.rot.y = door->world.rot.y; Actor_Kill(door); this->actionFunc = func_80AC21A0; - this->actor.textId = 0x239B; - Actor_SetFocus(&this->actor, 70.0f); + this->knobDoor.dyna.actor.textId = 0x239B; + Actor_SetFocus(&this->knobDoor.dyna.actor, 70.0f); break; } } @@ -229,7 +230,7 @@ void EnDoorEtc_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (this->unk_1F4 & 1) { - Collider_UpdateCylinder(&this->actor, &this->collider); + Collider_UpdateCylinder(&this->knobDoor.dyna.actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h index 49ca83f2a..9cd63248f 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.h @@ -2,6 +2,7 @@ #define Z_EN_DOOR_ETC_H #include "global.h" +#include "z64door.h" struct EnDoorEtc; @@ -10,11 +11,7 @@ struct EnDoorEtc; typedef void (*EnDoorEtcActionFunc)(struct EnDoorEtc*, PlayState*); typedef struct EnDoorEtc { - /* 0x000 */ Actor actor; - /* 0x144 */ char pad_144[0x5D]; - /* 0x1A1 */ u8 unk_1A1; - /* 0x1A2 */ s8 objectIndex; - /* 0x1A3 */ u8 dListIndex; // Never read, inferred from ovl_En_Door + /* 0x000 */ KnobDoorActor knobDoor; /* 0x1A4 */ s16 angle; /* 0x1A6 */ s16 timer; /* 0x1A8 */ ColliderCylinder collider; diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 2c7fdc030..0f9b4c766 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1268,7 +1268,8 @@ void EnEgol_Update(Actor* thisx, PlayState* play) { // last argument is DMG_ZORA_BOOMERANG | DMG_HOOKSHOT | DMG_NORMAL_ARROW | DMG_FIRE_ARROW | DMG_ICE_ARROW | // DMG_LIGHT_ARROW | DMG_DEKU_BUBBLE - if ((projectile != NULL) && !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ENARROW_5))) { + if ((projectile != NULL) && + !((projectile->id == ACTOR_EN_ARROW) && (projectile->params == ARROW_TYPE_LIGHT))) { this->eyelidRotTarget = 0xFA0; this->eyeShutTimer = 20; if (this->action == EYEGORE_ACTION_LASER) { diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index 3d68d34d7..097822dd1 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -489,7 +489,7 @@ void EnFamos_SetupChase(EnFamos* this) { void EnFamos_Chase(EnFamos* this, PlayState* play) { Player* player = GET_PLAYER(play); Vec3f abovePlayerPos; - u32 surfaceType; + FloorProperty surfaceType; EnFamos_UpdateBobbingHeight(this); Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800); @@ -502,7 +502,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) { surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && // close enough - (surfaceType != 0xC && surfaceType != 0xD)) { + (surfaceType != FLOOR_PROPERTY_12 && surfaceType != FLOOR_PROPERTY_13)) { EnFamos_SetupAttackAim(this); } else if ((Player_GetMask(play) == PLAYER_MASK_STONE) || @@ -689,9 +689,9 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) { this->actor.world.pos.x = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.x; this->actor.world.pos.z = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.z; if (this->stateTimer == 1) { - EnBom* explosion = - (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY); + EnBom* explosion = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, + this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (explosion != NULL) { explosion->timer = 0; // instant explosion } diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 306f1d94d..d9645885e 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1949,25 +1949,25 @@ void EnFishing_DrawRod(PlayState* play) { D_8090CD34 = 0.0f; } - spC8 = player->unk_B08[1]; - Math_SmoothStepToF(&player->unk_B08[1], input->rel.stick_y * 0.02f, 0.3f, 5.0f, 0.0f); - spC8 = player->unk_B08[1] - spC8; + spC8 = player->unk_B0C; + Math_SmoothStepToF(&player->unk_B0C, input->rel.stick_y * 0.02f, 0.3f, 5.0f, 0.0f); + spC8 = player->unk_B0C - spC8; - spC4 = player->unk_B08[0]; - Math_SmoothStepToF(&player->unk_B08[0], input->rel.stick_x * 0.02f, 0.3f, 5.0f, 0.0f); - spC4 = player->unk_B08[0] - spC4; + spC4 = player->unk_B08; + Math_SmoothStepToF(&player->unk_B08, input->rel.stick_x * 0.02f, 0.3f, 5.0f, 0.0f); + spC4 = player->unk_B08 - spC4; - if (player->unk_B08[0] > 1.0f) { - player->unk_B08[0] = 1.0f; + if (player->unk_B08 > 1.0f) { + player->unk_B08 = 1.0f; } - if (player->unk_B08[1] > 1.0f) { - player->unk_B08[1] = 1.0f; + if (player->unk_B0C > 1.0f) { + player->unk_B0C = 1.0f; } - if (player->unk_B08[0] < -1.0f) { - player->unk_B08[0] = -1.0f; + if (player->unk_B08 < -1.0f) { + player->unk_B08 = -1.0f; } - if (player->unk_B08[1] < -1.0f) { - player->unk_B08[1] = -1.0f; + if (player->unk_B0C < -1.0f) { + player->unk_B0C = -1.0f; } Math_ApproachF(&D_8090CD28, spC4 * 70.0f * -0.01f, 1.0f, D_8090CD30); @@ -1976,8 +1976,8 @@ void EnFishing_DrawRod(PlayState* play) { Math_ApproachF(&D_8090CD34, 1.0f, 1.0f, 0.1f); Math_ApproachZeroF(&D_8090CD38, 1.0f, 0.05f); } else { - Math_ApproachZeroF(&player->unk_B08[1], 1.0f, 0.1f); - Math_ApproachZeroF(&player->unk_B08[0], 1.0f, 0.1f); + Math_ApproachZeroF(&player->unk_B0C, 1.0f, 0.1f); + Math_ApproachZeroF(&player->unk_B08, 1.0f, 0.1f); Math_ApproachF(&D_8090CD2C, (Math_SinS(D_809171FE * 3000) * 0.025f) + -0.03f, 1.0f, 0.05f); Math_ApproachZeroF(&D_8090CD28, 1.0f, 0.05f); @@ -1994,7 +1994,7 @@ void EnFishing_DrawRod(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 155, 0, 255); - Matrix_Mult(&player->mf_CC4, MTXMODE_NEW); + Matrix_Mult(&player->leftHandMf, MTXMODE_NEW); if (sLinkAge != 1) { Matrix_Translate(0.0f, 400.0f, 0.0f, MTXMODE_APPLY); @@ -2009,11 +2009,11 @@ void EnFishing_DrawRod(PlayState* play) { } Matrix_RotateXFApply(-0.6283185f); - Matrix_RotateZF((player->unk_B08[0] * 0.5f) + 0.4712389f, MTXMODE_APPLY); + Matrix_RotateZF((player->unk_B08 * 0.5f) + 0.4712389f, MTXMODE_APPLY); Matrix_RotateXFApply((D_8090CD40 + 20.0f) * 0.01f * M_PI); Matrix_Scale(0.70000005f, 0.70000005f, 0.70000005f, MTXMODE_APPLY); - spC0 = (D_8090CD3C * (((player->unk_B08[1] - 1.0f) * -0.25f) + 0.5f)) + (D_8090CD2C + D_8090CD38); + spC0 = (D_8090CD3C * (((player->unk_B0C - 1.0f) * -0.25f) + 0.5f)) + (D_8090CD2C + D_8090CD38); Matrix_Translate(0.0f, 0.0f, -1300.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index f31dd7cd2..573b911c4 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -1019,7 +1019,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = SubS_GetAdditionalPath(play, sp55, D_80951A0C[scheduleOutput->result]); } - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != NULL) { sp4C = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp40, &sp4C[0]); @@ -1029,7 +1029,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); Math_Vec3f_Copy(&this->actor.world.pos, &sp40); - if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) { + if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->knobDoor.dyna.actor.shape.rot.y)) <= 0x4000) { this->unk_261 = -75; } else { this->unk_261 = 75; @@ -1450,7 +1450,7 @@ s32 func_80950804(EnGm* this, PlayState* play) { door = func_8094DF90(play, this->unk_258); if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) { - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if ((this->unk_3BA / (f32)this->unk_3B8) <= 0.9f) { door->unk_1A7 = this->unk_261; } else { diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 3f993ae3a..edf1cb104 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -6,6 +6,7 @@ #include "z_en_go.h" #include "z64quake.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/object_oF1d_map/object_oF1d_map.h" #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/object_taisou/object_taisou.h" @@ -1249,7 +1250,8 @@ s32 func_80A13E80(EnGo* this, PlayState* play) { func_80A12C48(this, play, 1); Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166A4, &sp48); gSaveContext.powderKegTimer = 2400; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, 1, 0, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, + 0, 0, BOMB_TYPE_BODY); func_80A134B0(this, play, 1); this->unk_3C2 = 0; this->unk_3C0++; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index 6d8e64931..b9f6acb68 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -5,6 +5,7 @@ */ #include "z_en_gs.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/object_gs/object_gs.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -871,7 +872,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { if (this->actor.playerHeightRel < -12000.0f) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, - this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 0); + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, this->actor.world.rot.y, 0, BOMB_TYPE_BODY); Actor_Kill(&this->actor); sp7C = 0; } diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index 44e42d01a..a88c8bb38 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -279,8 +279,8 @@ void func_80B22500(EnHakurock* this, PlayState* play) { } else if ((&player->actor == this->collider.base.oc) && (player->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) && (player->linearVelocity > 8.0f)) { - player->unk_B08[0] = player->linearVelocity = -5.0f; - player->unk_B08[1] += (player->linearVelocity * 0.05f); + player->unk_B08 = player->linearVelocity = -5.0f; + player->unk_B0C += (player->linearVelocity * 0.05f); player->actor.velocity.y = 5.0f; player->currentYaw = player->actor.world.rot.y; player->actor.home.rot.y = player->actor.world.rot.y; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index f12599df7..2e68c75d6 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -108,18 +108,6 @@ typedef struct { RaceWaypoint* waypoints; } RaceInfo; -typedef enum { - /* 0 */ ENHORSE_ANIM_IDLE, - /* 1 */ ENHORSE_ANIM_WHINNY, - /* 2 */ ENHORSE_ANIM_STOPPING, - /* 3 */ ENHORSE_ANIM_REARING, - /* 4 */ ENHORSE_ANIM_WALK, - /* 5 */ ENHORSE_ANIM_TROT, - /* 6 */ ENHORSE_ANIM_GALLOP, - /* 7 */ ENHORSE_ANIM_LOW_JUMP, - /* 8 */ ENHORSE_ANIM_HIGH_JUMP -} EnHorseAnimation; - static AnimationHeader* sEponaAnimations[] = { &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_005F64, &object_horse_link_child_Anim_004DE8, &object_horse_link_child_Anim_007D50, &object_horse_link_child_Anim_0043AC, diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index b2c58bcad..9f8cd2063 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -75,7 +75,7 @@ typedef enum EnHorseAction { /* 25 */ ENHORSE_ACTION_25 } EnHorseAction; -typedef enum { +typedef enum EnHorsePlayerDir { /* 0 */ PLAYER_DIR_FRONT_R, /* 1 */ PLAYER_DIR_FRONT_L, /* 2 */ PLAYER_DIR_BACK_R, @@ -84,7 +84,19 @@ typedef enum { /* 5 */ PLAYER_DIR_SIDE_L } EnHorsePlayerDir; -typedef enum { +typedef enum EnHorseAnimation { + /* 0 */ ENHORSE_ANIM_IDLE, + /* 1 */ ENHORSE_ANIM_WHINNY, + /* 2 */ ENHORSE_ANIM_STOPPING, + /* 3 */ ENHORSE_ANIM_REARING, + /* 4 */ ENHORSE_ANIM_WALK, + /* 5 */ ENHORSE_ANIM_TROT, + /* 6 */ ENHORSE_ANIM_GALLOP, + /* 7 */ ENHORSE_ANIM_LOW_JUMP, + /* 8 */ ENHORSE_ANIM_HIGH_JUMP +} EnHorseAnimation; + +typedef enum HorseType { /* 0 */ HORSE_TYPE_EPONA, /* 1 */ HORSE_TYPE_HNI, /* 2 */ HORSE_TYPE_2, diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index e053a8528..a0960a60f 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -556,7 +556,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = SubS_GetAdditionalPath(play, sp55, D_80BF3318[scheduleOutput->result]); } - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != NULL) { sp4C = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp40, &sp4C[0]); @@ -566,7 +566,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); Math_Vec3f_Copy(&this->actor.world.pos, &sp40); - if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->dyna.actor.shape.rot.y)) <= 0x4000) { + if (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, door->knobDoor.dyna.actor.shape.rot.y)) <= 0x4000) { this->unk_2A4 = -75; } else { this->unk_2A4 = 75; @@ -735,7 +735,7 @@ s32 func_80BF2470(EnIg* this, PlayState* play) { s32 pad; if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) { - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (((f32)this->unk_3E2 / this->unk_3E0) <= 0.9f) { door->unk_1A7 = this->unk_2A4; } else { diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 8f48622c8..2134ded5b 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -377,7 +377,7 @@ void EnJs_TakeMask(s32 itemActions, s32 childType) { s32 temp = 0; if ((childType >= 0) && (childType < 9)) { - itemActions -= PLAYER_IA_MASK_TRUTH; + itemActions -= PLAYER_IA_MASK_MIN; childType *= 3; if (itemActions < 8) { masksGivenOnMoon[childType] |= 1 << itemActions; @@ -543,7 +543,7 @@ void func_80969748(EnJs* this, PlayState* play) { } if (itemAction > PLAYER_IA_NONE) { Message_CloseTextbox(play); - if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) { + if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_TRANSFORMATION_MIN)) { EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor)); Inventory_UnequipItem(itemAction - 4); if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) { @@ -551,7 +551,7 @@ void func_80969748(EnJs* this, PlayState* play) { } else { player->actor.textId = 0x2213; } - } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) { + } else if ((itemAction >= PLAYER_IA_MASK_TRANSFORMATION_MIN) && (itemAction <= PLAYER_IA_MASK_MAX)) { player->actor.textId = 0x2211; } else { player->actor.textId = 0x2210; @@ -692,7 +692,7 @@ void func_80969C54(EnJs* this, PlayState* play) { if (itemAction > PLAYER_IA_NONE) { Message_CloseTextbox(play); - if ((itemAction >= PLAYER_IA_MASK_TRUTH) && (itemAction <= PLAYER_IA_MASK_GIANT)) { + if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction < PLAYER_IA_MASK_TRANSFORMATION_MIN)) { EnJs_TakeMask(itemAction, ENJS_GET_TYPE(&this->actor)); Inventory_UnequipItem(itemAction - 4); if (!func_809692A8(ENJS_GET_TYPE(&this->actor))) { @@ -700,7 +700,7 @@ void func_80969C54(EnJs* this, PlayState* play) { } else { player->actor.textId = 0x2222; } - } else if ((itemAction >= PLAYER_IA_MASK_FIERCE_DEITY) && (itemAction <= PLAYER_IA_MASK_DEKU)) { + } else if ((itemAction >= PLAYER_IA_MASK_TRANSFORMATION_MIN) && (itemAction <= PLAYER_IA_MASK_MAX)) { player->actor.textId = 0x2220; } else { player->actor.textId = 0x221D; diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index 7d8f46f91..e90b14f82 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -902,7 +902,8 @@ void func_80B872F4(EnKaizoku* this, PlayState* play) { if ((this->lookTimer == 0) && !func_80B85858(this, play) && !func_80B85A00(this, play, false)) { s16 yawDiff = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; - if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && (yawDiff >= 0x1F40)) { + if ((this->picto.actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + (yawDiff >= 0x1F40)) { this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; func_80B88CD8(this); } else if (Actor_IsFacingPlayer(&this->picto.actor, 0xBB8)) { @@ -1285,7 +1286,8 @@ void func_80B88378(EnKaizoku* this, PlayState* play) { this->skelAnime.playSpeed = 1.0f; sp2A = ABS_ALT(player->actor.shape.rot.y - this->picto.actor.shape.rot.y); - if (this->picto.actor.xzDistToPlayer < 150.0f && player->meleeWeaponState != 0 && sp2A >= 0x2000) { + if ((this->picto.actor.xzDistToPlayer < 150.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + (sp2A >= 0x2000)) { this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y = this->picto.actor.yawTowardsPlayer; if (Rand_ZeroOne() > 0.7f) { func_80B88CD8(this); @@ -1938,8 +1940,8 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { pos.z = this->bodyCollider.info.bumper.hitPos.z; if (player->transformation != PLAYER_FORM_HUMAN) { - player->unk_B84 = this->picto.actor.yawTowardsPlayer; - player->unk_B80 = 15.0f; + player->pushedYaw = this->picto.actor.yawTowardsPlayer; + player->pushedSpeed = 15.0f; } this->bodyCollider.base.acFlags &= ~AC_HIT; diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index c3cdeae33..24147b0d1 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -359,8 +359,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 0; } - if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) || - (player->stateFlags2 & PLAYER_STATE2_80000)) { + if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + (player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) { return 1; } break; @@ -370,7 +370,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 0; } - if ((player->meleeWeaponState != 0) || (player->stateFlags2 & PLAYER_STATE2_80000)) { + if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + (player->stateFlags2 & PLAYER_STATE2_80000)) { return 1; } break; @@ -380,8 +381,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) { return 0; } - if ((player->meleeWeaponState != 0) || (player->stateFlags3 & PLAYER_STATE3_8000000) || - (player->stateFlags2 & PLAYER_STATE2_80000)) { + if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + (player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) { return 1; } this->unk_28E = 0; diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index 0586b2111..1b9cb743a 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -144,7 +144,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { this->isCharging = false; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) { - player->unk_B08[0] = 1.0f; + player->unk_B08 = 1.0f; this->collider.info.toucher.damage = sDamages[this->type + ENMTHUNDER_TYPE_MAX]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_GREAT; if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { @@ -155,7 +155,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { this->scaleTarget = 3; } } else { - player->unk_B08[0] = 0.5f; + player->unk_B08 = 0.5f; this->collider.info.toucher.damage = sDamages[this->type]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR; if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { @@ -229,11 +229,11 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { Player* player = GET_PLAYER(play); Actor* child = this->actor.child; - this->unk1B0 = player->unk_B08[0]; + this->unk1B0 = player->unk_B08; this->actor.world.pos = player->bodyPartsPos[0]; this->actor.shape.rot.y = player->actor.shape.rot.y + 0x8000; - if (!this->isCharging && (player->unk_B08[0] >= 0.1f)) { + if (!this->isCharging && (player->unk_B08 >= 0.1f)) { if ((gSaveContext.magicState != MAGIC_STATE_IDLE) || ((ENMTHUNDER_GET_MAGIC_COST(&this->actor) != 0) && !Magic_Consume(play, ENMTHUNDER_GET_MAGIC_COST(&this->actor), MAGIC_CONSUME_WAIT_PREVIEW))) { @@ -247,8 +247,8 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { this->isCharging = true; } - if (player->unk_B08[0] >= 0.1f) { - Rumble_Request(0.0f, (s32)(player->unk_B08[0] * 150.0f), 2, (s32)(player->unk_B08[0] * 150.0f)); + if (player->unk_B08 >= 0.1f) { + Rumble_Request(0.0f, (s32)(player->unk_B08 * 150.0f), 2, (s32)(player->unk_B08 * 150.0f)); } if (player->stateFlags2 & PLAYER_STATE2_20000) { @@ -256,8 +256,8 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { child->parent = NULL; } - if (player->unk_B08[0] <= 0.15f) { - if ((player->unk_B08[0] >= 0.1f) && (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) { + if (player->unk_B08 <= 0.15f) { + if ((player->unk_B08 >= 0.1f) && (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) { AudioSfx_PlaySfx(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); AudioSfx_PlaySfx(NA_SE_IT_SWORD_SWING_HARD, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, @@ -273,7 +273,7 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP; } - if (player->unk_B08[0] < 0.85f) { + if (player->unk_B08 < 0.85f) { this->collider.info.toucher.damage = sDamages[this->type]; this->subtype = ENMTHUNDER_SUBTYPE_SPIN_REGULAR; if (this->type == ENMTHUNDER_TYPE_GREAT_FAIRY_SWORD) { @@ -320,26 +320,26 @@ void EnMThunder_Charge(EnMThunder* this, PlayState* play) { return; } - if (player->unk_B08[0] > 0.15f) { + if (player->unk_B08 > 0.15f) { this->chargingAlpha = 255; if (this->actor.child == NULL) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_DUST, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, EFF_DUST_TYPE_SPIN_ATTACK_CHARGE); } - this->adjustLightsArg1 += (((player->unk_B08[0] - 0.15f) * 1.5f) - this->adjustLightsArg1) * 0.5f; - } else if (player->unk_B08[0] > .1f) { - this->chargingAlpha = (s32)((player->unk_B08[0] - .1f) * 255.0f * 20.0f); - this->lightColorFrac = (player->unk_B08[0] - .1f) * 10.0f; + this->adjustLightsArg1 += (((player->unk_B08 - 0.15f) * 1.5f) - this->adjustLightsArg1) * 0.5f; + } else if (player->unk_B08 > .1f) { + this->chargingAlpha = (s32)((player->unk_B08 - .1f) * 255.0f * 20.0f); + this->lightColorFrac = (player->unk_B08 - .1f) * 10.0f; } else { this->chargingAlpha = 0; } - if (player->unk_B08[0] > 0.85f) { + if (player->unk_B08 > 0.85f) { func_8019F900(&player->actor.projectedPos, 2); - } else if (player->unk_B08[0] > 0.15f) { + } else if (player->unk_B08 > 0.15f) { func_8019F900(&player->actor.projectedPos, 1); - } else if (player->unk_B08[0] > 0.1f) { + } else if (player->unk_B08 > 0.1f) { func_8019F900(&player->actor.projectedPos, 0); } @@ -540,7 +540,7 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) { break; } - Matrix_Mult(&player->mf_CC4, MTXMODE_NEW); + Matrix_Mult(&player->leftHandMf, MTXMODE_NEW); if (this->type == ENMTHUNDER_TYPE_GILDED_SWORD) { Matrix_Translate(0.0f, 220.0f, 0.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c index 95890455c..7d79bcd75 100644 --- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c +++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c @@ -491,11 +491,11 @@ s32 func_80B37B78(EnMaruta* this, PlayState* play) { s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, 0x8000); temp_v1 = BINANG_SUB(temp_v1, player->actor.shape.rot.y); - if ((ABS_ALT(temp_v1) < 0x1555) || - ((player->meleeWeaponState != 0) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) || - (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) || - (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) || - (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) { + if ((ABS_ALT(temp_v1) < 0x1555) || ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) || + (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) || + (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) || + (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) { return true; } return false; diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index a4d820364..aefebdfc4 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -4,6 +4,7 @@ * Description: Seahorse */ +#include "prevent_bss_reordering.h" #include "z_en_ot.h" #include "objects/object_ot/object_ot.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index 2f4678b8d..d45cacbae 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -660,8 +660,9 @@ void func_80898654(EnPeehat* this) { void func_808986A4(EnPeehat* this, PlayState* play) { if (this->unk_2B0 == 5) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0x602, 0); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0x602, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index 088d5c8a4..f00d64fca 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1242,7 +1242,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = SubS_GetAdditionalPath(play, sp55, D_80AFB430[scheduleOutput->result]); } - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (this->timePath != 0) { sp4C = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp40, &sp4C[0]); @@ -1251,7 +1251,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { Math_Vec3f_Copy(&this->unk_278, &sp34); this->actor.world.rot.y = Math_Vec3f_Yaw(&sp40, &sp34); Math_Vec3f_Copy(&this->actor.world.pos, &sp40); - temp = this->actor.world.rot.y - door->dyna.actor.shape.rot.y; + temp = this->actor.world.rot.y - door->knobDoor.dyna.actor.shape.rot.y; if (ABS_ALT(temp) <= 0x4000) { this->unk_260 = -0x4B; } else { @@ -1704,7 +1704,7 @@ s32 func_80AF9D04(EnPm* this, PlayState* play) { f32 temp; if (!SubS_InCsMode(play) && (this->timePathTimeSpeed != 0)) { - if ((door != NULL) && (door->dyna.actor.update != NULL)) { + if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { if (((f32)this->unk_36E / this->unk_36C) <= 0.9f) { door->unk_1A7 = this->unk_260; } else { diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c index 53ae73479..3516364ba 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c @@ -243,7 +243,8 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) { f32 dist; if (this->megCloneId == POE_SISTERS_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) { - if ((player->meleeWeaponState == 0 || player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) && + if ((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0 || + player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) && ((player->actor.world.pos.y - player->actor.floorHeight) < 1.0f)) { Math_StepToF(&this->megDistToPlayer, 110.0f, 3.0f); } else { diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 81898dfa6..8badfe741 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -740,8 +740,9 @@ void EnRat_Bounced(EnRat* this, PlayState* play) { } void EnRat_Explode(EnRat* this, PlayState* play) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, BOMB_TYPE_BODY); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c index d552c5605..0acd6fbf9 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -589,8 +589,8 @@ void func_80BF4AB8(EnRg* this, PlayState* play) { this->unk_326 = 0x28; if (player->stateFlags3 & PLAYER_STATE3_1000) { player->linearVelocity *= 0.5f; - player->unk_B08[0] = player->linearVelocity; - player->unk_B08[1] += player->linearVelocity * 0.05f; + player->unk_B08 = player->linearVelocity; + player->unk_B0C += player->linearVelocity * 0.05f; if (BINANG_SUB(this->actor.yawTowardsPlayer, player->currentYaw) > 0) { player->currentYaw += 0x2000; } else { diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c index 11e5ce7d6..912a700f8 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c @@ -93,11 +93,11 @@ void EnStream_SuckPlayer(EnStream* this, PlayState* play) { this->actor.scale.y) != EN_STREAM_PLAYER_OUTSIDE_RANGE) { xzDist = sqrtf(SQ(posDifference.x) + SQ(posDifference.z)); yDistWithOffset = player->actor.world.pos.y - (this->actor.world.pos.y - 90.0f); - player->unk_B84 = Math_Atan2S(-posDifference.x, -posDifference.z); + player->pushedYaw = Math_Atan2S(-posDifference.x, -posDifference.z); if (xzDist > 3.0f) { - Math_SmoothStepToF(&player->unk_B80, 3.0f, 0.5f, xzDist, 0.0f); + Math_SmoothStepToF(&player->pushedSpeed, 3.0f, 0.5f, xzDist, 0.0f); } else { - player->unk_B80 = 0.0f; + player->pushedSpeed = 0.0f; Math_SmoothStepToF(&player->actor.world.pos.x, this->actor.world.pos.x, 0.5f, 3.0f, 0.0f); Math_SmoothStepToF(&player->actor.world.pos.z, this->actor.world.pos.z, 0.5f, 3.0f, 0.0f); } diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index cedf00861..444142715 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -589,13 +589,13 @@ s32 func_80A3F384(EnTest3* this, PlayState* play) { EnDoor* door = (EnDoor*)func_80A3F2BC(play, this, ACTOR_EN_DOOR, ACTORCAT_DOOR, 55.0f, 20.0f); Vec3f offset; - if ((door != NULL) && (door->unk_1A1 == 0) && - ((player->doorType == 0) || (&door->dyna.actor != player->doorActor)) && - Actor_ActorAIsFacingActorB(&this->player.actor, &door->dyna.actor, 0x3000)) { - Actor_OffsetOfPointInActorCoords(&door->dyna.actor, &offset, &this->player.actor.world.pos); - this->player.doorType = 1; + if ((door != NULL) && !door->knobDoor.playOpenAnim && + ((player->doorType == PLAYER_DOORTYPE_NONE) || (&door->knobDoor.dyna.actor != player->doorActor)) && + Actor_ActorAIsFacingActorB(&this->player.actor, &door->knobDoor.dyna.actor, 0x3000)) { + Actor_OffsetOfPointInActorCoords(&door->knobDoor.dyna.actor, &offset, &this->player.actor.world.pos); + this->player.doorType = PLAYER_DOORTYPE_HANDLE; this->player.doorDirection = (offset.z >= 0.0f) ? 1.0f : -1.0f; - this->player.doorActor = &door->dyna.actor; + this->player.doorActor = &door->knobDoor.dyna.actor; this->player.csId = CS_ID_NONE; return true; } @@ -1103,7 +1103,7 @@ s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos->z *= this->player.ageProperties->unk_08; } if (!(this->player.skelAnime.moveFlags & ANIM_FLAG_4) || - (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) { + (this->player.skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y)) { pos->y *= this->player.ageProperties->unk_08; } pos->y -= this->player.unk_AB8; @@ -1176,8 +1176,8 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL leftHandActor->world.rot.y = this->player.actor.shape.rot.y + this->player.leftHandWorld.rot.y; leftHandActor->shape.rot.y = leftHandActor->world.rot.y; } else { - Matrix_Get(&this->player.mf_CC4); - Matrix_MtxFToYXZRot(&this->player.mf_CC4, &this->player.leftHandWorld.rot, false); + Matrix_Get(&this->player.leftHandMf); + Matrix_MtxFToYXZRot(&this->player.leftHandMf, &this->player.leftHandWorld.rot, false); func_80126B8C(play, &this->player); } diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index d434bacaa..01fa7c7cd 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -471,7 +471,7 @@ s32 func_80AECE60(EnTk* this, PlayState* play) { if ((door != NULL) && (this->unk_2CA & 0x400)) { Vec3f sp5C; - Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->dyna.actor.world.pos); + Actor_OffsetOfPointInActorCoords(&this->actor, &sp5C, &door->knobDoor.dyna.actor.world.pos); door->unk_1A7 = 2; if (sp5C.z < -20.0f) { this->unk_2CA &= ~0x400; diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 3a563ab60..6c0733979 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -214,7 +214,7 @@ void func_80BA383C(EnToto* this, PlayState* play) { } Animation_PlayOnce(&this->skelAnime, D_80BA5078[this->unk2B4]); } - func_800BBB74(this->unk260, 0x14, 0x50, 3); + func_800BBB74(&this->blinkInfo, 20, 80, 3); } void func_80BA3930(EnToto* this, PlayState* play) { @@ -316,7 +316,7 @@ void func_80BA3D38(EnToto* this, PlayState* play) { this->text = ENTOTO_WEEK_EVENT_FLAGS ? D_80BA50BC : D_80BA5088; func_80BA4C0C(this, play); play->actorCtx.flags |= ACTORCTX_FLAG_5; - this->unk260[0] = 0; + this->blinkInfo.eyeTexIndex = 0; } void func_80BA3DBC(EnToto* this, PlayState* play) { @@ -586,6 +586,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { if (gSaveContext.save.playerForm != (i + 1) && (D_80BA5128[i] & this->unk2B3)) { Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6); + Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_F) | 0xFFFFF000); } @@ -728,7 +729,7 @@ void EnToto_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); func_8012C28C(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->unk260[0]])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->blinkInfo.eyeTexIndex])); Scene_SetRenderModeXlu(play, 0, 1); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.h b/src/overlays/actors/ovl_En_Toto/z_en_toto.h index cf9f3c718..dc2b0947e 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h @@ -26,7 +26,7 @@ typedef struct EnToto { /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ Vec3s jointTable[18]; /* 0x1F4 */ Vec3s morphTable[18]; - /* 0x260 */ s16 unk260[2]; + /* 0x260 */ BlinkInfo blinkInfo; /* 0x264 */ ColliderCylinder collider; /* 0x2B0 */ u8 actionFuncIndex; /* 0x2B1 */ u8 unk2B1; diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c index 505df7f11..29778ec71 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -391,8 +391,9 @@ void func_808CCCF0(EnVm* this, PlayState* play) { this->unk_214--; if (this->unk_214 == 1) { - EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0x6FF, 0); + EnBom* bomb = + (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0x6FF, BOMB_TYPE_BODY); if (bomb != NULL) { bomb->timer = 0; diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c index 44a50e99d..ed3ec36f9 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -616,7 +616,8 @@ void func_80991280(EnWf* this, PlayState* play) { if (!func_8099408C(play, this) && !func_80990948(play, this, 0)) { phi_v1 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y)); - if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != 0) && (phi_v1 >= 0x1F40)) { + if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && + (phi_v1 >= 0x1F40)) { this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.yawTowardsPlayer; func_80991948(this); @@ -666,7 +667,8 @@ void func_8099149C(EnWf* this, PlayState* play) { sp28 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y)); - if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && (player->meleeWeaponState != 0) && (sp28 >= 0x1F40)) { + if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && + (player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) && (sp28 >= 0x1F40)) { this->actor.shape.rot.y = this->actor.yawTowardsPlayer; this->actor.world.rot.y = this->actor.yawTowardsPlayer; if (Rand_ZeroOne() > 0.7f) { diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c index 41cdd8369..336076199 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -184,8 +184,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { Math_ApproachF(&this->unk_1A0, 3.0f, 1.0f, 1.0f); Math_ApproachF(&this->unk_19C, this->unk_1A0, 1.0f, 0.1f); } - player->unk_B84 = this->unk_1A4; - player->unk_B80 = this->unk_19C; + player->pushedYaw = this->unk_1A4; + player->pushedSpeed = this->unk_19C; } } else { if (this->unk_172 & 8) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 1f92e8825..5147f8732 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -9,1297 +9,20198 @@ #include "z64rumble.h" #include "z64shrink_window.h" -#define THIS ((Player*)thisx) +#include "overlays/actors/ovl_Arms_Hook/z_arms_hook.h" +#include "overlays/actors/ovl_Door_Spiral/z_door_spiral.h" +#include "overlays/actors/ovl_Door_Shutter/z_door_shutter.h" +#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h" +#include "overlays/actors/ovl_En_Bom/z_en_bom.h" +#include "overlays/actors/ovl_En_Boom/z_en_boom.h" +#include "overlays/actors/ovl_En_Box/z_en_box.h" +#include "overlays/actors/ovl_En_Door/z_en_door.h" +#include "overlays/actors/ovl_En_Horse/z_en_horse.h" +#include "overlays/actors/ovl_En_Ishi/z_en_ishi.h" +#include "overlays/actors/ovl_En_Test3/z_en_test3.h" +#include "overlays/actors/ovl_En_Test7/z_en_test7.h" +#include "overlays/actors/ovl_En_Torch2/z_en_torch2.h" -extern UNK_TYPE D_06008860; -extern UNK_TYPE D_0600BDD8; -extern UNK_TYPE D_060178D0; +#include "overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h" + +#include "objects/gameplay_keep/gameplay_keep.h" + +#include "objects/object_link_boy/object_link_boy.h" +#include "objects/object_link_goron/object_link_goron.h" +#include "objects/object_link_zora/object_link_zora.h" +#include "objects/object_link_nuts/object_link_nuts.h" +#include "objects/object_link_child/object_link_child.h" + +#define THIS ((Player*)thisx) void Player_Init(Actor* thisx, PlayState* play); void Player_Destroy(Actor* thisx, PlayState* play); void Player_Update(Actor* thisx, PlayState* play); void Player_Draw(Actor* thisx, PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DA90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DABC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DAD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DAFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DB90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DBC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DC64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DCA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DD2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE14.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DE88.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF48.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082DF8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E00C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E078.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E0CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E0F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E12C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E188.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E1BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E1F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E224.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E438.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E4A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E514.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E55C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E5A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E5EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E634.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E67C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E6D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E6F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E784.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E794.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E820.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E920.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082E9C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EA80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EAC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EAF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EB18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EB38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EC9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ECCC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ECE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ED20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082ED94.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EEA4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EEE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF54.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EF9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082EFE4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F02C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F09C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F0E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F164.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F1AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F43C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F470.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F524.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F594.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F5FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F62C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F7F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F8A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F8BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082F938.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FA5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FB68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FBE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FC78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FCC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FD0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FDC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8082FE0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808302CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808304BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808305BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808306F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808308DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808309CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830A58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830AE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830B38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830B88.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830CE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830D40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830DF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830E30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830F9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80830FD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831010.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831124.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831194.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083133C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808313A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808313F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831454.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831494.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083172C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831760.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808317C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831814.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808318C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831944.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831990.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80831F34.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832090.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083213C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083216C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808323C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832444.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083249C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808324EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832558.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832578.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832660.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832754.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832888.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832CAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832F24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80832F78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833058.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808331FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808332A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808333CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808334D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808335B0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808335F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833728.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083375C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833864.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833998.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808339B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808339D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833A64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833AA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80833B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808340AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808340D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834104.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834140.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808341F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808344C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834534.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083456C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808345A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808345C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834600.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834CD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834D50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834DB8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80834DFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835324.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808353DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835428.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808354A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808355D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083562C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835BC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835BF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835C64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835CD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835D2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835D58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835DF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80835EAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083604C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836258.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808365DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836888.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083692C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836988.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808369F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836A5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836A98.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836AD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836B3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836C70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836D8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836DC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836EA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80836F10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808370D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837134.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808373A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808373F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837730.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083784C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808378FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083798C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808379C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837B60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837BD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837BF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837C20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837C78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837CEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80837DEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808381A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808381F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083827C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083868C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838760.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808387A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838830.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808388B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808389BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838A20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80838A90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808391D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839518.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808395F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808396B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839770.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839800.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839860.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839978.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839A10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839A84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839CD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839E3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839E74.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839ED0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80839F98.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A04C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A0CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A114.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A274.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A4A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A548.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A580.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A658.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A6C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A794.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A844.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A878.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083A98C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AD04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AD8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083ADB8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083ADF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AE38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AECC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AF30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083AF8C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B030.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B090.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B0E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B1A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B23C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B29C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B2E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B32C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B3B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B73C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B798.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B850.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B8D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083B930.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083BB4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083BF54.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C62C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C6E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C85C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083C8E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CB04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CB58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CBC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CCB4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083CF68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D168.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D23C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D6DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D738.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D78C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083D860.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DCC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DD1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DEE4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DF38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083DFC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E14C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E234.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E28C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E2F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E354.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E404.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E514.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E758.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E7F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E8E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E958.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083E9C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EA44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EBD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083EE60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F144.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F190.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F230.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F27C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F358.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F57C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F828.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083F8A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FBC4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FCF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FD80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FE38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FE90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FEF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FF30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8083FFEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808400CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808401F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840770.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840980.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808409A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840A30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840CD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840DEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840E24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840E5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840EC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840F34.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80840F90.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808411D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808412A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808412BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841358.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841408.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808414E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841528.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808415A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808415E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841624.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841744.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084182C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80841A50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Init.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80842510.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808425B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808426F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808430E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80843178.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80843EC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808442D8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808445C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808446F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844784.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844D80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80844EF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Update.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808463C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80846460.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Draw.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/Player_Destroy.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847190.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084748C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808475B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808477D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847880.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847994.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808479F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847A50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847A94.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847BF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847E2C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847ED4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847F1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80847FF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848048.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848094.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808481CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848250.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848294.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808482E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808484CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808484F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848570.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848640.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848780.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808487B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848808.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084894C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848A0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848AB0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848B6C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848BF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80848E4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849054.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808490B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808491B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084923C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808492C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084933C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849570.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849620.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808496AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808497A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849A9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849DD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80849FE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A26C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A5C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A794.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A884.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084A8E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AB4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AC84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AEEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084AF9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B0EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B288.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B3B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B4A8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084B5C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BAA4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BBF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BC64.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BE40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BF28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084BFDC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C124.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C16C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C6EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084C94C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CA24.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CB58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CCEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084CE84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D18C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D4EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D770.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084D820.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E034.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E25C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E334.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E434.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E4E4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E58C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E65C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E724.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084E980.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084ED9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084EE50.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084EF9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F1B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F3DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084F4E8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FC0C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FD7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FE48.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8084FE7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808505D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850734.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850854.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808508C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850B18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850BA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850BF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850D20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80850D68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808513EC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851588.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808516B4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808519FC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851B58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851BD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851C40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851D30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851EAC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851EC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80851F18.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808521E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852290.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085255C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808525C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085269C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852B28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852C04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80852FD4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808530E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853194.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808534C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853754.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853850.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853A5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853CC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80853D68.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854010.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808540A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854118.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085421C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085437C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085439C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854430.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854614.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808546D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854800.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808548B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854C70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854CD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80854EFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808550D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855218.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808553F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855818.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855A7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855AF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855B9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855C28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855E08.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80855F9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856000.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856074.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856110.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808561B0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808566C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085687C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856888.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80856918.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808573A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857640.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808576BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808577E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857950.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857A44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857AEC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80857BE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858C84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858CC8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858D48.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DB4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DDC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858DFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858E80.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EC0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858EFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F3C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F7C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858F9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858FBC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80858FE8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859028.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859168.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808591BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859210.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859248.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085929C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859300.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859414.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808594D0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808595B8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085968C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859708.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085978C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859890.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859990.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_808599DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859A10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859A44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859AD0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859AF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859B28.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859B54.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859BA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859C60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859CFC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859D44.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859D70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859EBC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859F4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859FCC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_80859FF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A04C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A120.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A144.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A19C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A1D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A24C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A2AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A330.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A364.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A40C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A4A4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A530.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A5DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A66C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A6C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A710.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A768.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A7C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A8C4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085A940.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA10.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA60.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AA84.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AACC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AB58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085ABA8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AC9C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085AD5C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085ADA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B08C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B134.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B170.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B1F0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B28C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B384.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B3E0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B460.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B74C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B820.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B854.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_player_actor/func_8085B930.s") +s32 Player_GrabPlayer(PlayState* play, Player* player); +s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode); +void func_8085B384(Player* this, PlayState* play); +s32 Player_InflictDamage(PlayState* play, s32 damage); +void Player_TalkWithPlayer(PlayState* play, Actor* actor); +void func_8085B74C(PlayState* play); +void func_8085B820(PlayState* play, s16 arg1); +PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId); +s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode); + +void Player_UpdateCommon(Player* this, PlayState* play, Input* input); +s32 Player_StartFishing(PlayState* play); +void func_8085B170(PlayState* play, Player* this); +s32 func_8083A658(PlayState* play, Player* this); +void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction); + +void func_80831990(PlayState* play, Player* this, ItemId item); + +s32 func_80848BF4(Player* this, PlayState* play); + +void func_80836988(Player* this, PlayState* play); + +void func_808484F0(Player* this); + +void func_80838A20(PlayState* play, Player* this); +void func_80839978(PlayState* play, Player* this); +void func_80839A10(PlayState* play, Player* this); + +typedef enum AnimSfxType { + /* 1 */ ANIMSFX_TYPE_GENERAL = 1, + /* 2 */ ANIMSFX_TYPE_FLOOR, + /* 3 */ ANIMSFX_TYPE_FLOOR_BY_AGE, + /* 4 */ ANIMSFX_TYPE_VOICE, + /* 5 */ ANIMSFX_TYPE_FLOOR_LAND, // does not use sfxId + /* 6 */ ANIMSFX_TYPE_6, // FLOOR_WALK_Something // does not use sfxId + /* 7 */ ANIMSFX_TYPE_FLOOR_JUMP, // does not use sfxId + /* 8 */ ANIMSFX_TYPE_8, // FLOOR_WALK_Something2 // does not use sfxId + /* 9 */ ANIMSFX_TYPE_9, // Uses NA_SE_PL_WALK_LADDER // does not use sfxId, unused + /* 10 */ ANIMSFX_TYPE_SURFACE, +} AnimSfxType; + +#define ANIMSFX_SHIFT_TYPE(type) ((type) << 11) + +#define ANIMSFX_CONTINUE (1) +#define ANIMSFX_STOP (0) + +#define ANIMSFX_FLAGS(type, frame, cont) \ + (((ANIMSFX_##cont) == ANIMSFX_STOP ? -1 : 1) * (ANIMSFX_SHIFT_TYPE(type) | ((frame)&0x7FF))) + +#define ANIMSFX(type, frame, sfxId, cont) \ + { (sfxId), ANIMSFX_FLAGS(type, frame, cont) } + +#define ANIMSFX_GET_TYPE(data) ((data)&0x7800) +#define ANIMSFX_GET_FRAME(data) ((data)&0x7FF) + +typedef struct AnimSfxEntry { + /* 0x0 */ u16 sfxId; + /* 0x2 */ s16 flags; // negative marks the end +} AnimSfxEntry; // size = 0x4 + +/* action funcs */ +void func_808496AC(Player* this, PlayState* play); +void func_808497A0(Player* this, PlayState* play); +void func_80849A9C(Player* this, PlayState* play); +void func_80849DD0(Player* this, PlayState* play); +void func_80849FE0(Player* this, PlayState* play); +void func_8084A26C(Player* this, PlayState* play); +void func_8084A5C0(Player* this, PlayState* play); +void func_8084A794(Player* this, PlayState* play); +void func_8084A884(Player* this, PlayState* play); +void func_8084A8E8(Player* this, PlayState* play); +void func_8084AB4C(Player* this, PlayState* play); +void func_8084AC84(Player* this, PlayState* play); +void func_8084AEEC(Player* this, PlayState* play); +void func_8084AF9C(Player* this, PlayState* play); +void func_8084B0EC(Player* this, PlayState* play); +void func_8084B288(Player* this, PlayState* play); +void func_8084B3B8(Player* this, PlayState* play); +void func_8084B4A8(Player* this, PlayState* play); +void func_8084B5C0(Player* this, PlayState* play); +void func_8084BAA4(Player* this, PlayState* play); +void func_8084BBF0(Player* this, PlayState* play); +void func_8084BC64(Player* this, PlayState* play); +void func_8084BE40(Player* this, PlayState* play); +void func_8084BF28(Player* this, PlayState* play); +void func_8084BFDC(Player* this, PlayState* play); +void func_8084C16C(Player* this, PlayState* play); +void func_8084C6EC(Player* this, PlayState* play); +void func_8084C94C(Player* this, PlayState* play); +void func_8084CA24(Player* this, PlayState* play); +void func_8084CB58(Player* this, PlayState* play); +void func_8084CCEC(Player* this, PlayState* play); +void func_8084CE84(Player* this, PlayState* play); +void func_8084D18C(Player* this, PlayState* play); +void func_8084D4EC(Player* this, PlayState* play); +void func_8084D770(Player* this, PlayState* play); +void func_8084D820(Player* this, PlayState* play); +void func_8084E034(Player* this, PlayState* play); +void func_8084E25C(Player* this, PlayState* play); +void func_8084E334(Player* this, PlayState* play); +void func_8084E434(Player* this, PlayState* play); +void func_8084E4E4(Player* this, PlayState* play); +void func_8084E58C(Player* this, PlayState* play); +void func_8084E65C(Player* this, PlayState* play); +void func_8084E724(Player* this, PlayState* play); +void func_8084E980(Player* this, PlayState* play); +void func_8084ED9C(Player* this, PlayState* play); +void func_8084EE50(Player* this, PlayState* play); +void func_8084EF9C(Player* this, PlayState* play); +void func_8084F1B8(Player* this, PlayState* play); +void func_8084F3DC(Player* this, PlayState* play); +void func_8084F4E8(Player* this, PlayState* play); +void func_8084FC0C(Player* this, PlayState* play); +void func_8084FE7C(Player* this, PlayState* play); +void func_808505D0(Player* this, PlayState* play); +void func_808508C8(Player* this, PlayState* play); +void func_80850B18(Player* this, PlayState* play); +void func_80850D68(Player* this, PlayState* play); +void func_808513EC(Player* this, PlayState* play); +void func_80851588(Player* this, PlayState* play); +void func_808516B4(Player* this, PlayState* play); +void func_808519FC(Player* this, PlayState* play); +void func_80851B58(Player* this, PlayState* play); +void func_80851BD4(Player* this, PlayState* play); +void func_8085269C(Player* this, PlayState* play); +void func_80852B28(Player* this, PlayState* play); +void func_80852C04(Player* this, PlayState* play); +void func_80852FD4(Player* this, PlayState* play); +void func_80853194(Player* this, PlayState* play); +void func_808534C0(Player* this, PlayState* play); +void func_80853754(Player* this, PlayState* play); +void func_80853850(Player* this, PlayState* play); +void func_80853A5C(Player* this, PlayState* play); +void func_80853CC0(Player* this, PlayState* play); +void func_80853D68(Player* this, PlayState* play); +void func_80854010(Player* this, PlayState* play); +void func_808540A0(Player* this, PlayState* play); +void func_80854118(Player* this, PlayState* play); +void func_8085421C(Player* this, PlayState* play); +void func_8085437C(Player* this, PlayState* play); +void func_8085439C(Player* this, PlayState* play); +void func_80854430(Player* this, PlayState* play); +void func_80854614(Player* this, PlayState* play); +void func_808546D0(Player* this, PlayState* play); +void func_80854800(Player* this, PlayState* play); +void func_808548B8(Player* this, PlayState* play); +void func_80854C70(Player* this, PlayState* play); +void func_808553F4(Player* this, PlayState* play); +void func_80855818(Player* this, PlayState* play); +void func_80855A7C(Player* this, PlayState* play); +void func_80855AF4(Player* this, PlayState* play); +void func_80855B9C(Player* this, PlayState* play); +void func_80855C28(Player* this, PlayState* play); +void func_80855E08(Player* this, PlayState* play); +void func_808561B0(Player* this, PlayState* play); +void func_80856918(Player* this, PlayState* play); +void func_808573A4(Player* this, PlayState* play); +void func_80857BE8(Player* this, PlayState* play); +void func_8085B08C(Player* this, PlayState* play); + +s32 func_80839518(Player* this, PlayState* play); +s32 func_808365DC(Player* this, PlayState* play); +s32 func_8083D23C(Player* this, PlayState* play); +s32 func_8083CCB4(Player* this, PlayState* play); +s32 func_808391D8(Player* this, PlayState* play); +s32 func_8083DFC4(Player* this, PlayState* play); +s32 func_8083A114(Player* this, PlayState* play); +s32 func_80848570(Player* this, PlayState* play); +s32 func_8083A580(Player* this, PlayState* play); +s32 func_8083D78C(Player* this, PlayState* play); +s32 func_80839B18(Player* this, PlayState* play); +s32 func_8083A274(Player* this, PlayState* play); +s32 func_80834DFC(Player* this, PlayState* play); +s32 func_80838A90(Player* this, PlayState* play); +s32 func_8083A0CC(Player* this, PlayState* play); + +s32 func_80848780(Player* this, PlayState* play); +s32 func_808487B8(Player* this, PlayState* play); +s32 func_80848B6C(Player* this, PlayState* play); +s32 func_808490B4(Player* this, PlayState* play); +s32 func_808491B4(Player* this, PlayState* play); +s32 func_80848808(Player* this, PlayState* play); +s32 func_8084894C(Player* this, PlayState* play); +s32 func_80848A0C(Player* this, PlayState* play); +s32 func_80848AB0(Player* this, PlayState* play); +s32 func_80848E4C(Player* this, PlayState* play); +s32 func_80849054(Player* this, PlayState* play); +s32 func_8084923C(Player* this, PlayState* play); +s32 func_808492C4(Player* this, PlayState* play); +s32 func_8084933C(Player* this, PlayState* play); +s32 func_80849570(Player* this, PlayState* play); +s32 func_80849620(Player* this, PlayState* play); + +/* Init Mode functions */ +void Player_InitMode_0(PlayState* play, Player* this); +void Player_InitMode_1(PlayState* play, Player* this); +void Player_InitMode_2(PlayState* play, Player* this); +void Player_InitMode_3(PlayState* play, Player* this); +void Player_InitMode_4(PlayState* play, Player* this); +void Player_InitMode_5(PlayState* play, Player* this); +void Player_InitMode_6(PlayState* play, Player* this); +void Player_InitMode_7(PlayState* play, Player* this); +void func_80841744(PlayState* play, Player* this); +void func_80841744(PlayState* play, Player* this); +void func_8083ADF0(PlayState* play, Player* this); +void Player_InitMode_B(PlayState* play, Player* this); +void Player_InitMode_Telescope(PlayState* play, Player* this); +void Player_InitMode_D(PlayState* play, Player* this); +void func_8083ADF0(PlayState* play, Player* this); +void Player_InitMode_F(PlayState* play, Player* this); + +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2); + +void func_80859EBC(PlayState* play, Player* this, s32 arg2); + +void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859AD0(PlayState* play, Player* this, void* arg2); +void func_80859B28(PlayState* play, Player* this, void* arg2); +void func_8085ADA0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859C60(PlayState* play, Player* this, void* arg2); +void func_8085A710(PlayState* play, Player* this, void* anim); +void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A6C0(PlayState* play, Player* this, void* anim); +void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2); +void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg); +void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A364(PlayState* play, Player* this, void* arg2); +void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A40C(PlayState* play, Player* this, void* arg2); +void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A4A4(PlayState* play, Player* this, void* arg2); +void func_8085A5DC(PlayState* play, Player* this, void* arg2); +void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859AF8(PlayState* play, Player* this, void* arg2); +void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859EBC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2); + +void func_8085A768(PlayState* play, Player* this, void* arg2); +void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2); + +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859CA0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A66C(PlayState* play, Player* this, void* arg2); +void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2); +void func_8085A530(PlayState* play, Player* this, void* arg2); +void func_8085A768(PlayState* play, Player* this, void* arg2); +void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2); +void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2); + +// ItemActions +void func_8082F594(PlayState* play, Player* this); +void func_8082F5A4(PlayState* play, Player* this); +void func_8082F8A0(PlayState* play, Player* this); +void func_8082F5C0(PlayState* play, Player* this); +void func_8082F7F4(PlayState* play, Player* this); +void Player_SpawnExplosive(PlayState* play, Player* this); + +void func_80858DB4(PlayState* play, Player* this, void* anim); +void func_80858DDC(PlayState* play, Player* this, void* anim); +void func_80858E40(PlayState* play, Player* this, void* anim); +void func_80858E60(PlayState* play, Player* this, void* anim); +void func_80858E80(PlayState* play, Player* this, void* anim); +void func_80858EA0(PlayState* play, Player* this, void* anim); +void func_80858EFC(PlayState* play, Player* this, void* anim); +void func_80858F1C(PlayState* play, Player* this, void* anim); +void func_80858F3C(PlayState* play, Player* this, void* anim); +void func_80858F5C(PlayState* play, Player* this, void* anim); +void func_80858FBC(PlayState* play, Player* this, void* anim); +void func_80859028(PlayState* play, Player* this, void* anim); +void func_808591BC(PlayState* play, Player* this, void* anim); +void func_80858DFC(PlayState* play, Player* this, void* anim); +void func_80858EC0(PlayState* play, Player* this, void* anim); +void func_80858F7C(PlayState* play, Player* this, void* anim); +void func_80858F9C(PlayState* play, Player* this, void* anim); +void func_80859168(PlayState* play, Player* this, void* anim); +void func_80859210(PlayState* play, Player* this, void* arg2); + +typedef struct struct_8085C2A4 { + /* 0x0 */ PlayerAnimationHeader* unk_0; + /* 0x4 */ PlayerAnimationHeader* unk_4; + /* 0x8 */ PlayerAnimationHeader* unk_8; +} struct_8085C2A4; // size = 0xC + +typedef struct BlureColors { + /* 0x0 */ u8 p1StartColor[4]; + /* 0x4 */ u8 p2StartColor[4]; + /* 0x8 */ u8 p1EndColor[4]; + /* 0xC */ u8 p2EndColor[4]; +} BlureColors; // size = 0x10 + +typedef void (*PlayerCueInterpreter)(PlayState*, Player*, CsCmdActorCue*); + +typedef struct struct_8085DA94 { + /* 0x0 */ s8 type; + /* 0x4 */ union { + void* ptr; // Do not use, required in the absence of designated initialisors + PlayerAnimationHeader* anim; + PlayerCueInterpreter func; + AnimSfxEntry* entry; + }; +} struct_8085DA94; // size = 0x8 + +typedef struct struct_8085E368 { + /* 0x0 */ Vec3s base; + /* 0x6 */ Vec3s range; +} struct_8085E368; // size = 0xC + +typedef struct struct_8085D910 { + /* 0x0 */ u8 unk_0; + /* 0x1 */ u8 unk_1; + /* 0x2 */ u8 unk_2; + /* 0x3 */ u8 unk_3; +} struct_8085D910; // size = 0x4 + +typedef struct struct_8085D848_unk_00 { + /* 0x0 */ s16 fogNear; + /* 0x2 */ u8 fogColor[3]; + /* 0x5 */ u8 ambientColor[3]; +} struct_8085D848_unk_00; // size = 0x8 + +typedef struct struct_8085D848_unk_18 { + /* 0x00 */ Vec3f pos; + /* 0x0C */ u8 color[3]; + /* 0x10 */ s16 radius; +} struct_8085D848_unk_18; // size = 0x14 + +typedef struct struct_8085D848 { + /* 0x00 */ struct_8085D848_unk_00 unk_00[3]; + /* 0x18 */ struct_8085D848_unk_18 light[3]; +} struct_8085D848; // size = 0x54 + +typedef struct struct_8085D80C { + /* 0x0 */ s16 actorId; + /* 0x2 */ s16 params; +} struct_8085D80C; // size = 0x4 + +typedef struct struct_8085D798 { + /* 0x0 */ s16 actorId; + /* 0x2 */ s8 actorParams; + /* 0x3 */ u8 itemId; + /* 0x4 */ u8 itemAction; + /* 0x5 */ u8 textId; +} struct_8085D798; // size = 0x6 + +typedef struct struct_8085D714 { + /* 0x0 */ u8 unk_0; + /* 0x4 */ PlayerAnimationHeader* unk_4; +} struct_8085D714; // size = 0x8 + +typedef struct struct_8085D224 { + /* 0x0 */ PlayerAnimationHeader* anim; + /* 0x4 */ f32 unk_4; + /* 0x8 */ f32 unk_8; +} struct_8085D224; // size = 0xC + +typedef struct FallImpactInfo { + /* 0x0 */ s8 damage; + /* 0x1 */ u8 sourceIntensity; + /* 0x2 */ u8 decayTimer; + /* 0x3 */ u8 decayStep; + /* 0x4 */ u16 sfxId; +} FallImpactInfo; // size = 0x6 + +typedef struct AttackAnimInfo { + /* 0x00 */ PlayerAnimationHeader* unk_0; + /* 0x04 */ PlayerAnimationHeader* unk_4; + /* 0x08 */ PlayerAnimationHeader* unk_8; + /* 0x0C */ u8 unk_C; + /* 0x0D */ u8 unk_D; +} AttackAnimInfo; // size = 0x10 + +typedef struct MeleeWeaponDamageInfo { + /* 0x0 */ s32 dmgFlags; + // Presumably these two fields are intended for Fierce Deity, but will also work for Deku if it can equip a sword + /* 0x4 */ u8 dmgTransformedNormal; + /* 0x5 */ u8 dmgTransformedStrong; + /* 0x6 */ u8 dmgHumanNormal; + /* 0x7 */ u8 dmgHumanStrong; +} MeleeWeaponDamageInfo; // size = 0x8 + +typedef struct struct_8085CC88 { + /* 0x0 */ PlayerAnimationHeader* anim; + /* 0x4 */ u8 frame; +} struct_8085CC88; // size = 0x8 + +typedef struct { + /* 0x0 */ u8 itemId; + /* 0x2 */ s16 actorId; +} ExplosiveInfo; // size = 0x4 + +typedef struct { + /* 0x0 */ Color_RGB8 unk_0; + /* 0x3 */ Color_RGB8 unk_3; + /* 0x6 */ Color_RGB8 unk_6; + /* 0xA */ s16 unk_A; + /* 0xC */ s16 unk_C; +} struct_8082F02C_arg1; // size = 0xE + +typedef struct GetItemEntry { + /* 0x0 */ u8 itemId; + /* 0x1 */ u8 field; // various bit-packed data + /* 0x2 */ s8 gid; // defines the draw id and chest opening animation + /* 0x3 */ u8 textId; + /* 0x4 */ u16 objectId; +} GetItemEntry; // size = 0x6 + +typedef struct struct_8085D200 { + /* 0x0 */ PlayerAnimationHeader* unk_0; + /* 0x4 */ PlayerAnimationHeader* unk_4; + /* 0x8 */ u8 unk_8; + /* 0x9 */ u8 unk_9; +} struct_8085D200; // size = 0xC + +f32 D_80862AFC; // distance of the analog stick to its center +s16 D_80862B00; // analog stick angle/yaw +s16 D_80862B02; // analog stick yaw + camera yaw +s32 D_80862B04; // boolean, set to the return value of func_8083216C +FloorType sPlayerCurrentFloorType; +u32 sPlayerCurrentWallFlags; +ConveyorSpeed sPlayerConveyorSpeedIndex; +s16 sPlayerIsOnFloorConveyor; +s16 D_80862B16; // SurfaceType_GetConveyorDirection << 0xA +f32 D_80862B18; // D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight; +FloorProperty sPlayerPrevFloorProperty; +s32 D_80862B20; // ABS_ALT(this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000)) +s32 D_80862B24; // ABS_ALT(BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000))) +s16 D_80862B28; +s32 D_80862B2C; // D_80862B2C = player->currentMask; +Vec3f D_80862B30; +f32 D_80862B3C; +FloorEffect D_80862B40; // SurfaceType_GetFloorEffect +Input* sPlayerControlInput; +s32 D_80862B48; +s32 D_80862B4C; +EnvLightSettings D_80862B50; // backup of play->envCtx.lightSettings +s32 D_80862B6C; // this->skelAnime.moveFlags // sPlayerSkelMoveFlags? + +s32 func_8082DA90(PlayState* play) { + return (play->transitionTrigger != TRANS_TRIGGER_OFF) || (play->transitionMode != TRANS_MODE_OFF); +} + +void Player_StopHorizontalMovement(Player* this) { + this->linearVelocity = 0.0f; + this->actor.speed = 0.0f; +} + +void func_8082DAD4(Player* this) { + Player_StopHorizontalMovement(this); + this->unk_AA5 = PLAYER_UNKAA5_0; +} + +s32 func_8082DAFC(PlayState* play) { + Player* player = GET_PLAYER(play); + + return CHECK_FLAG_ALL(player->actor.flags, ACTOR_FLAG_TALK_REQUESTED); +} + +void Player_AnimationPlayOnce(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayOnce(play, &this->skelAnime, anim); +} + +void Player_AnimationPlayLoop(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayLoop(play, &this->skelAnime, anim); +} + +void func_8082DB60(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayLoopSetSpeed(play, &this->skelAnime, anim, 2.0f / 3.0f); +} + +void func_8082DB90(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 2.0f / 3.0f); +} + +void Player_AnimationPlayOnceReverse(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, -2.0f / 3.0f, Animation_GetLastFrame(anim), 0.0f, + ANIMMODE_ONCE, 0.0f); +} + +void func_8082DC28(Player* this) { + this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y = 0; +} + +void func_8082DC38(Player* this) { + this->stateFlags2 &= ~PLAYER_STATE2_20000; + this->meleeWeaponState = PLAYER_MELEE_WEAPON_STATE_0; + this->meleeWeaponInfo[2].active = false; + this->meleeWeaponInfo[1].active = false; + this->meleeWeaponInfo[0].active = false; +} + +void func_8082DC64(PlayState* play, Player* this) { + if ((this->subCamId != CAM_ID_NONE) && (play->cameraPtrs[this->subCamId] != NULL)) { + this->subCamId = CAM_ID_NONE; + } + + this->stateFlags2 &= ~(PLAYER_STATE2_400 | PLAYER_STATE2_800); +} + +void func_8082DCA0(PlayState* play, Player* this) { + Actor* heldActor = this->heldActor; + + if ((heldActor != NULL) && !Player_IsHoldingHookshot(this)) { + this->actor.child = NULL; + this->heldActor = NULL; + this->interactRangeActor = NULL; + heldActor->parent = NULL; + this->stateFlags1 &= ~PLAYER_STATE1_800; + } + + if (Player_GetExplosiveHeld(this) > PLAYER_EXPLOSIVE_NONE) { + func_8082F8BC(play, this, PLAYER_IA_NONE); + this->heldItemId = ITEM_FE; + } +} + +void func_8082DD2C(PlayState* play, Player* this) { + if ((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor == NULL)) { + if (this->interactRangeActor != NULL) { + if (this->getItemId == GI_NONE) { + this->stateFlags1 &= ~PLAYER_STATE1_800; + this->interactRangeActor = NULL; + } + } else { + this->stateFlags1 &= ~PLAYER_STATE1_800; + } + } + + func_8082DC38(this); + this->unk_AA5 = PLAYER_UNKAA5_0; + func_8082DC64(play, this); + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + this->stateFlags1 &= + ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000); + this->stateFlags2 &= ~(PLAYER_STATE2_10 | PLAYER_STATE2_80); + this->unk_ADD = 0; + this->unk_ADC = 0; + this->actor.shape.rot.x = 0; + this->actor.shape.rot.z = 0; + this->unk_ABC = 0.0f; + this->unk_AC0 = 0.0f; +} + +s32 func_8082DE14(PlayState* play, Player* this) { + if (this->heldItemAction > PLAYER_IA_LAST_USED) { + func_80831990(play, this, ITEM_NONE); + return true; + } else { + return false; + } +} + +void func_8082DE50(PlayState* play, Player* this) { + func_8082DD2C(play, this); + func_8082DCA0(play, this); +} + +s32 func_8082DE88(Player* this, s32 arg1, s32 arg2) { + s16 temp_v0 = this->unk_D64 - D_80862B00; + + this->unk_AE8 += arg1 + (s16)(ABS_ALT(temp_v0) * fabsf(D_80862AFC) * (1.0f / 0x600F0)); + if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B | BTN_A)) { + this->unk_AE8 += 5; + } + + return this->unk_AE8 >= arg2; +} + +void func_8082DF2C(PlayState* play) { + if (play->actorCtx.freezeFlashTimer == 0) { + play->actorCtx.freezeFlashTimer = 1; + } +} + +u8 D_8085B9F0[PLAYER_LIMB_MAX] = { + false, // PLAYER_LIMB_NONE + false, // PLAYER_LIMB_ROOT + false, // PLAYER_LIMB_WAIST + false, // PLAYER_LIMB_LOWER_ROOT + false, // PLAYER_LIMB_R_THIGH + false, // PLAYER_LIMB_R_SHIN + false, // PLAYER_LIMB_R_FOOT + false, // PLAYER_LIMB_L_THIGH + false, // PLAYER_LIMB_L_SHIN + false, // PLAYER_LIMB_L_FOOT + true, // PLAYER_LIMB_UPPER_ROOT + true, // PLAYER_LIMB_HEAD + true, // PLAYER_LIMB_HAT + true, // PLAYER_LIMB_COLLAR + true, // PLAYER_LIMB_L_SHOULDER + true, // PLAYER_LIMB_L_FOREARM + true, // PLAYER_LIMB_L_HAND + true, // PLAYER_LIMB_R_SHOULDER + true, // PLAYER_LIMB_R_FOREARM + true, // PLAYER_LIMB_R_HAND + true, // PLAYER_LIMB_SHEATH + true, // PLAYER_LIMB_TORSO +}; +u8 D_8085BA08[PLAYER_LIMB_MAX] = { + false, // PLAYER_LIMB_NONE + false, // PLAYER_LIMB_ROOT + false, // PLAYER_LIMB_WAIST + false, // PLAYER_LIMB_LOWER_ROOT + false, // PLAYER_LIMB_R_THIGH + false, // PLAYER_LIMB_R_SHIN + false, // PLAYER_LIMB_R_FOOT + false, // PLAYER_LIMB_L_THIGH + false, // PLAYER_LIMB_L_SHIN + false, // PLAYER_LIMB_L_FOOT + false, // PLAYER_LIMB_UPPER_ROOT + false, // PLAYER_LIMB_HEAD + false, // PLAYER_LIMB_HAT + false, // PLAYER_LIMB_COLLAR + true, // PLAYER_LIMB_L_SHOULDER + true, // PLAYER_LIMB_L_FOREARM + true, // PLAYER_LIMB_L_HAND + false, // PLAYER_LIMB_R_SHOULDER + false, // PLAYER_LIMB_R_FOREARM + false, // PLAYER_LIMB_R_HAND + false, // PLAYER_LIMB_SHEATH + false, // PLAYER_LIMB_TORSO +}; +u8 D_8085BA20[PLAYER_LIMB_MAX] = { + false, // PLAYER_LIMB_NONE + false, // PLAYER_LIMB_ROOT + false, // PLAYER_LIMB_WAIST + false, // PLAYER_LIMB_LOWER_ROOT + false, // PLAYER_LIMB_R_THIGH + false, // PLAYER_LIMB_R_SHIN + false, // PLAYER_LIMB_R_FOOT + false, // PLAYER_LIMB_L_THIGH + false, // PLAYER_LIMB_L_SHIN + false, // PLAYER_LIMB_L_FOOT + false, // PLAYER_LIMB_UPPER_ROOT + false, // PLAYER_LIMB_HEAD + false, // PLAYER_LIMB_HAT + false, // PLAYER_LIMB_COLLAR + false, // PLAYER_LIMB_L_SHOULDER + false, // PLAYER_LIMB_L_FOREARM + false, // PLAYER_LIMB_L_HAND + true, // PLAYER_LIMB_R_SHOULDER + true, // PLAYER_LIMB_R_FOREARM + true, // PLAYER_LIMB_R_HAND + false, // PLAYER_LIMB_SHEATH + false, // PLAYER_LIMB_TORSO +}; + +void Player_RequestRumble(PlayState* play, Player* this, s32 sourceIntensity, s32 decayTimer, s32 decayStep, + s32 distSq) { + if (this == GET_PLAYER(play)) { + Rumble_Request(distSq, sourceIntensity, decayTimer, decayStep); + } +} + +// TODO: less dumb name +#define SFX_VOICE_BANK_SIZE 0x20 + +PlayerAgeProperties sPlayerAgeProperties[PLAYER_FORM_MAX] = { + { + // unk_00; + 84.0f, + // shadowScale; + 90.0f, + // unk_08; + 1.5f, + // unk_0C; + 166.5f, + // unk_10; + 105.0f, + // unk_14; + 119.100006f, + // unk_18; + 88.5f, + // unk_1C; + 61.5f, + // unk_20; + 28.5f, + // unk_24; + 54.0f, + // unk_28; + 75.0f, + // unk_2C; + 84.0f, + // unk_30; + 102.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 27.0f, + // unk_3C; + 24.75f, + // unk_40; + 105.0f, + // unk_44 + { 9, 0x123F, 0x167 }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + }, + { + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 0, + // surfaceSfxIdOffset; + 0x80, + // unk_98; + 33.0f, + // unk_9C; + 44.15145f, + // openChestAnim + &gPlayerAnim_link_demo_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_link_normal_climb_startA, + // unk_B0 + &gPlayerAnim_link_normal_climb_startB, + // unk_B4 + { + &gPlayerAnim_link_normal_climb_upL, + &gPlayerAnim_link_normal_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_link_normal_climb_endAL, + &gPlayerAnim_link_normal_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_link_normal_climb_endBR, + &gPlayerAnim_link_normal_climb_endBL, + }, + }, + { + // unk_00; + 70.0f, + // shadowScale; + 90.0f, + // unk_08; + 0.74f, + // unk_0C; + 111.0f, + // unk_10; + 70.0f, + // unk_14; + 79.4f, + // unk_18; + 59.0f, + // unk_1C; + 41.0f, + // unk_20; + 19.0f, + // unk_24; + 36.0f, + // unk_28; + 50.0f, + // unk_2C; + 56.0f, + // unk_30; + 68.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 19.5f, + // unk_3C; + 18.2f, + // unk_40; + 80.0f, + // unk_44 + { 0x17, 0xF3B, 0xDF }, + { + { 0x18, 0xF3B, 0xDF }, + { 0x17, 0x14CF, 0xDF }, + { 0x18, 0xF3B, 0xDF }, + { 0x17, 0x14CF, 0xDF }, + }, + { + { 0x17, 0x14CF, 0xDF }, + { 0x18, 0x1AF2, 0xDF }, + { 0x17, 0x14CF, 0xDF }, + { 0x18, 0x1AF2, 0xDF }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 6, + // surfaceSfxIdOffset; + 0x150, + // unk_98; + -25.0f, + // unk_9C; + 42.0f, + // openChestAnim + &gPlayerAnim_pg_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_pg_climb_startA, + // unk_B0 + &gPlayerAnim_pg_climb_startB, + // unk_B4 + { + &gPlayerAnim_pg_climb_upL, + &gPlayerAnim_pg_climb_upR, + &gPlayerAnim_pg_climb_upL, + &gPlayerAnim_pg_climb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_pg_climb_endAL, + &gPlayerAnim_pg_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_pg_climb_endBR, + &gPlayerAnim_pg_climb_endBL, + }, + }, + { + // unk_00; + 56.0f, + // shadowScale; + 90.0f, + // unk_08; + 1.0f, + // unk_0C; + 111.0f, + // unk_10; + 70.0f, + // unk_14; + 79.4f, + // unk_18; + 59.0f, + // unk_1C; + 41.0f, + // unk_20; + 19.0f, + // unk_24; + 36.0f, + // unk_28; + 50.0f, + // unk_2C; + 56.0f, + // unk_30; + 68.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 18.0f, + // unk_3C; + 23.0f, + // unk_40; + 70.0f, + // unk_44 + { 0x17, 0x1323, -0x6D }, + { + { 0x17, 0x1323, -0x58 }, + { 0x17, 0x18B7, -0x6D }, + { 0x17, 0x1323, -0x58 }, + { 0x17, 0x18B7, -0x6D }, + }, + { + { 0x17, 0x18B7, -0x6D }, + { 0x18, 0x1EDA, -0x58 }, + { 0x17, 0x18B7, -0x6D }, + { 0x18, 0x1EDA, -0x58 }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 5, + // surfaceSfxIdOffset; + 0x120, + // unk_98; + 22.0f, + // unk_9C; + 36.0f, + // openChestAnim + &gPlayerAnim_pz_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_pz_climb_startA, + // unk_B0 + &gPlayerAnim_pz_climb_startB, + // unk_B4 + { + &gPlayerAnim_pz_climb_upL, + &gPlayerAnim_pz_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_pz_climb_endAL, + &gPlayerAnim_pz_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_pz_climb_endBR, + &gPlayerAnim_pz_climb_endBL, + }, + }, + { + // unk_00; + 35.0f, + // shadowScale; + 50.0f, + // unk_08; + 0.3f, + // unk_0C; + 71.0f, + // unk_10; + 50.0f, + // unk_14; + 49.0f, + // unk_18; + 39.0f, + // unk_1C; + 27.0f, + // unk_20; + 19.0f, + // unk_24; + 8.0f, + // unk_28; + 13.6f, + // unk_2C; + 24.0f, + // unk_30; + 24.0f, + // unk_34; // height? + 70.0f, + // unk_38; + 14.0f, + // unk_3C; + 12.0f, + // unk_40; + 55.0f, + // unk_44 + { -0x18, 0xDED, 0x36C }, + { + { -0x18, 0xD92, 0x35E }, + { -0x18, 0x1371, 0x3A9 }, + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + }, + { + { -0x18, 0x1371, 0x3A9 }, + { -0x18, 0x195F, 0x3A9 }, + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 4, + // surfaceSfxIdOffset; + 0xF0, + // unk_98; + -21.0f, + // unk_9C; + 33.0f, + // openChestAnim + &gPlayerAnim_pn_Tbox_open, + // unk_A4 + &gPlayerAnim_link_demo_back_to_past, + // unk_A8 + &gPlayerAnim_link_demo_return_to_past, + // unk_AC + &gPlayerAnim_clink_normal_climb_startA, + // unk_B0 + &gPlayerAnim_clink_normal_climb_startB, + // unk_B4 + { + &gPlayerAnim_clink_normal_climb_upL, + &gPlayerAnim_clink_normal_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_clink_normal_climb_endAL, + &gPlayerAnim_clink_normal_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_clink_normal_climb_endBR, + &gPlayerAnim_clink_normal_climb_endBL, + }, + }, + { + // unk_00; + 40.0f, + // shadowScale; + 60.0f, + // unk_08; + 11.0f / 17.0f, + // unk_0C; + 71.0f, + // unk_10; + 50.0f, + // unk_14; + 49.0f, + // unk_18; + 39.0f, + // unk_1C; + 27.0f, + // unk_20; + 19.0f, + // unk_24; + 22.0f, + // unk_28; + 32.4f, + // unk_2C; + 32.0f, + // unk_30; + 48.0f, + // unk_34; // height? + 11.0f / 17.0f * 70.0f, + // unk_38; + 14.0f, + // unk_3C; + 12.0f, + // unk_40; + 55.0f, + // unk_44 + { -0x18, 0xDED, 0x36C }, + { + { -0x18, 0xD92, 0x35E }, + { -0x18, 0x1371, 0x3A9 }, + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + }, + { + { -0x18, 0x1371, 0x3A9 }, + { -0x18, 0x195F, 0x3A9 }, + { 9, 0x17EA, 0x167 }, + { 9, 0x1E0D, 0x17C }, + }, + { + { 8, 0x1256, 0x17C }, + { 9, 0x17EA, 0x167 }, + { -0x638, 0x1256, 0x17C }, + { -0x637, 0x17EA, 0x167 }, + }, + // voiceSfxIdOffset; + SFX_VOICE_BANK_SIZE * 1, + // surfaceSfxIdOffset; + 0, + // unk_98; + 22.0f, + // unk_9C; + 29.4343f, + // openChestAnim + &gPlayerAnim_clink_demo_Tbox_open, + // unk_A4 + &gPlayerAnim_clink_demo_goto_future, + // unk_A8 + &gPlayerAnim_clink_demo_return_to_future, + // unk_AC + &gPlayerAnim_clink_normal_climb_startA, + // unk_B0 + &gPlayerAnim_clink_normal_climb_startB, + // unk_B4 + { + &gPlayerAnim_clink_normal_climb_upL, + &gPlayerAnim_clink_normal_climb_upR, + &gPlayerAnim_link_normal_Fclimb_upL, + &gPlayerAnim_link_normal_Fclimb_upR, + }, + // unk_C4 + { + &gPlayerAnim_link_normal_Fclimb_sideL, + &gPlayerAnim_link_normal_Fclimb_sideR, + }, + // unk_CC + { + &gPlayerAnim_clink_normal_climb_endAL, + &gPlayerAnim_clink_normal_climb_endAR, + }, + // unk_D4 + { + &gPlayerAnim_clink_normal_climb_endBR, + &gPlayerAnim_clink_normal_climb_endBL, + }, + }, +}; + +PlayerAnimationHeader* D_8085BE84[PLAYER_ANIMGROUP_MAX][PLAYER_ANIMTYPE_MAX] = { + // PLAYER_ANIMGROUP_0 + { + &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward + &gPlayerAnim_link_normal_wait, // Default idle standing, looking forward, sword and shield + &gPlayerAnim_link_normal_wait, // Default idle standing, looking forward, sword and shield + &gPlayerAnim_link_fighter_wait_long, // Default idle standing, looking forward, two hand weapon + &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward + &gPlayerAnim_link_normal_wait_free, // Default idle standing, looking forward + }, + // PLAYER_ANIMGROUP_1 + { + &gPlayerAnim_link_normal_walk_free, + &gPlayerAnim_link_normal_walk, + &gPlayerAnim_link_normal_walk, + &gPlayerAnim_link_fighter_walk_long, + &gPlayerAnim_link_normal_walk_free, + &gPlayerAnim_link_normal_walk_free, + }, + // PLAYER_ANIMGROUP_2 + { + &gPlayerAnim_link_normal_run_free, // Running with empty hands + &gPlayerAnim_link_fighter_run, // Running with Sword and Shield in hands + &gPlayerAnim_link_normal_run, + &gPlayerAnim_link_fighter_run_long, // Running with Two handed weapon + &gPlayerAnim_link_normal_run_free, // Running with empty hands + &gPlayerAnim_link_normal_run_free, // Running with empty hands + }, + // PLAYER_ANIMGROUP_3 + { + &gPlayerAnim_link_normal_damage_run_free, + &gPlayerAnim_link_fighter_damage_run, + &gPlayerAnim_link_normal_damage_run_free, + &gPlayerAnim_link_fighter_damage_run_long, + &gPlayerAnim_link_normal_damage_run_free, + &gPlayerAnim_link_normal_damage_run_free, + }, + // PLAYER_ANIMGROUP_4 + { + &gPlayerAnim_link_normal_waitL_free, + &gPlayerAnim_link_anchor_waitL, + &gPlayerAnim_link_anchor_waitL, + &gPlayerAnim_link_fighter_waitL_long, + &gPlayerAnim_link_normal_waitL_free, + &gPlayerAnim_link_normal_waitL_free, + }, + // PLAYER_ANIMGROUP_5 + { + &gPlayerAnim_link_normal_waitR_free, + &gPlayerAnim_link_anchor_waitR, + &gPlayerAnim_link_anchor_waitR, + &gPlayerAnim_link_fighter_waitR_long, + &gPlayerAnim_link_normal_waitR_free, + &gPlayerAnim_link_normal_waitR_free, + }, + // PLAYER_ANIMGROUP_6 + { + &gPlayerAnim_link_fighter_wait2waitR_long, + &gPlayerAnim_link_normal_wait2waitR, + &gPlayerAnim_link_normal_wait2waitR, + &gPlayerAnim_link_fighter_wait2waitR_long, + &gPlayerAnim_link_fighter_wait2waitR_long, + &gPlayerAnim_link_fighter_wait2waitR_long, + }, + // PLAYER_ANIMGROUP_7 + { + &gPlayerAnim_link_normal_normal2fighter_free, + &gPlayerAnim_link_fighter_normal2fighter, + &gPlayerAnim_link_fighter_normal2fighter, + &gPlayerAnim_link_normal_normal2fighter_free, + &gPlayerAnim_link_normal_normal2fighter_free, + &gPlayerAnim_link_normal_normal2fighter_free, + }, + // PLAYER_ANIMGROUP_8 + { + &gPlayerAnim_link_demo_doorA_link_free, + &gPlayerAnim_link_demo_doorA_link, + &gPlayerAnim_link_demo_doorA_link, + &gPlayerAnim_link_demo_doorA_link_free, + &gPlayerAnim_link_demo_doorA_link_free, + &gPlayerAnim_link_demo_doorA_link_free, + }, + // PLAYER_ANIMGROUP_9 + { + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + &gPlayerAnim_clink_demo_doorA_link, + }, + // PLAYER_ANIMGROUP_10 + { + &gPlayerAnim_link_demo_doorB_link_free, + &gPlayerAnim_link_demo_doorB_link, + &gPlayerAnim_link_demo_doorB_link, + &gPlayerAnim_link_demo_doorB_link_free, + &gPlayerAnim_link_demo_doorB_link_free, + &gPlayerAnim_link_demo_doorB_link_free, + }, + // PLAYER_ANIMGROUP_11 + { + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + &gPlayerAnim_clink_demo_doorB_link, + }, + // PLAYER_ANIMGROUP_12 + { + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + &gPlayerAnim_link_normal_carryB, // + &gPlayerAnim_link_normal_carryB, // + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + &gPlayerAnim_link_normal_carryB_free, // Grabbing something from the floor + }, + // PLAYER_ANIMGROUP_13 + { + &gPlayerAnim_link_normal_landing_free, + &gPlayerAnim_link_normal_landing, + &gPlayerAnim_link_normal_landing, + &gPlayerAnim_link_normal_landing_free, + &gPlayerAnim_link_normal_landing_free, + &gPlayerAnim_link_normal_landing_free, + }, + // PLAYER_ANIMGROUP_14 + { + &gPlayerAnim_link_normal_short_landing_free, + &gPlayerAnim_link_normal_short_landing, + &gPlayerAnim_link_normal_short_landing, + &gPlayerAnim_link_normal_short_landing_free, + &gPlayerAnim_link_normal_short_landing_free, + &gPlayerAnim_link_normal_short_landing_free, + }, + // PLAYER_ANIMGROUP_15 + { + &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands + &gPlayerAnim_link_normal_landing_roll, // Rolling with sword and shield + &gPlayerAnim_link_normal_landing_roll, // Rolling with sword and shield + &gPlayerAnim_link_fighter_landing_roll_long, // Rolling with two hand weapon + &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands + &gPlayerAnim_link_normal_landing_roll_free, // Rolling with nothing in hands + }, + // PLAYER_ANIMGROUP_16 + { + &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk + &gPlayerAnim_link_normal_hip_down, // Rolling bonk swrod and shield + &gPlayerAnim_link_normal_hip_down, // Rolling bonk swrod and shield + &gPlayerAnim_link_normal_hip_down_long, // Rolling bonk two hand weapon + &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk + &gPlayerAnim_link_normal_hip_down_free, // Rolling bonk + }, + // PLAYER_ANIMGROUP_17 + { + &gPlayerAnim_link_normal_walk_endL_free, + &gPlayerAnim_link_normal_walk_endL, + &gPlayerAnim_link_normal_walk_endL, + &gPlayerAnim_link_fighter_walk_endL_long, + &gPlayerAnim_link_normal_walk_endL_free, + &gPlayerAnim_link_normal_walk_endL_free, + }, + // PLAYER_ANIMGROUP_18 + { + &gPlayerAnim_link_normal_walk_endR_free, + &gPlayerAnim_link_normal_walk_endR, + &gPlayerAnim_link_normal_walk_endR, + &gPlayerAnim_link_fighter_walk_endR_long, + &gPlayerAnim_link_normal_walk_endR_free, + &gPlayerAnim_link_normal_walk_endR_free, + }, + // PLAYER_ANIMGROUP_19 + { + &gPlayerAnim_link_normal_defense_free, + &gPlayerAnim_link_normal_defense, + &gPlayerAnim_link_normal_defense, + &gPlayerAnim_link_normal_defense_free, + &gPlayerAnim_link_bow_defense, + &gPlayerAnim_link_normal_defense_free, + }, + // PLAYER_ANIMGROUP_20 + { + &gPlayerAnim_link_normal_defense_wait_free, + &gPlayerAnim_link_normal_defense_wait, + &gPlayerAnim_link_normal_defense_wait, + &gPlayerAnim_link_normal_defense_wait_free, + &gPlayerAnim_link_bow_defense_wait, + &gPlayerAnim_link_normal_defense_wait_free, + }, + // PLAYER_ANIMGROUP_21 + { + &gPlayerAnim_link_normal_defense_end_free, + &gPlayerAnim_link_normal_defense_end, + &gPlayerAnim_link_normal_defense_end, + &gPlayerAnim_link_normal_defense_end_free, + &gPlayerAnim_link_normal_defense_end_free, + &gPlayerAnim_link_normal_defense_end_free, + }, + // PLAYER_ANIMGROUP_22 + { + &gPlayerAnim_link_normal_side_walk_free, + &gPlayerAnim_link_normal_side_walk, + &gPlayerAnim_link_normal_side_walk, + &gPlayerAnim_link_fighter_side_walk_long, + &gPlayerAnim_link_normal_side_walk_free, + &gPlayerAnim_link_normal_side_walk_free, + }, + // PLAYER_ANIMGROUP_23 + { + &gPlayerAnim_link_normal_side_walkL_free, // Side walking + &gPlayerAnim_link_anchor_side_walkL, // Side walking with sword and shield in hands + &gPlayerAnim_link_anchor_side_walkL, // Side walking with sword and shield in hands + &gPlayerAnim_link_fighter_side_walkL_long, + &gPlayerAnim_link_normal_side_walkL_free, // Side walking + &gPlayerAnim_link_normal_side_walkL_free, // Side walking + }, + // PLAYER_ANIMGROUP_24 + { + &gPlayerAnim_link_normal_side_walkR_free, + &gPlayerAnim_link_anchor_side_walkR, + &gPlayerAnim_link_anchor_side_walkR, + &gPlayerAnim_link_fighter_side_walkR_long, + &gPlayerAnim_link_normal_side_walkR_free, + &gPlayerAnim_link_normal_side_walkR_free, + }, + // PLAYER_ANIMGROUP_25 + { + &gPlayerAnim_link_normal_45_turn_free, + &gPlayerAnim_link_normal_45_turn, + &gPlayerAnim_link_normal_45_turn, + &gPlayerAnim_link_normal_45_turn_free, + &gPlayerAnim_link_normal_45_turn_free, + &gPlayerAnim_link_normal_45_turn_free, + }, + // PLAYER_ANIMGROUP_26 + { + &gPlayerAnim_link_normal_waitL2wait, + &gPlayerAnim_link_normal_waitL2wait, + &gPlayerAnim_link_normal_waitL2wait, + &gPlayerAnim_link_fighter_waitL2wait_long, + &gPlayerAnim_link_fighter_waitL2wait_long, + &gPlayerAnim_link_fighter_waitL2wait_long, + }, + // PLAYER_ANIMGROUP_27 + { + &gPlayerAnim_link_normal_waitR2wait, + &gPlayerAnim_link_normal_waitR2wait, + &gPlayerAnim_link_normal_waitR2wait, + &gPlayerAnim_link_fighter_waitR2wait_long, + &gPlayerAnim_link_fighter_waitR2wait_long, + &gPlayerAnim_link_fighter_waitR2wait_long, + }, + // PLAYER_ANIMGROUP_28 + { + &gPlayerAnim_link_normal_throw_free, + &gPlayerAnim_link_normal_throw, + &gPlayerAnim_link_normal_throw, + &gPlayerAnim_link_normal_throw_free, + &gPlayerAnim_link_normal_throw_free, + &gPlayerAnim_link_normal_throw_free, + }, + // PLAYER_ANIMGROUP_29 + { + &gPlayerAnim_link_normal_put_free, + &gPlayerAnim_link_normal_put, + &gPlayerAnim_link_normal_put, + &gPlayerAnim_link_normal_put_free, + &gPlayerAnim_link_normal_put_free, + &gPlayerAnim_link_normal_put_free, + }, + // PLAYER_ANIMGROUP_30 + { + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + &gPlayerAnim_link_normal_back_walk, + }, + // PLAYER_ANIMGROUP_31 + { + &gPlayerAnim_link_normal_check_free, + &gPlayerAnim_link_normal_check, + &gPlayerAnim_link_normal_check, + &gPlayerAnim_link_normal_check_free, + &gPlayerAnim_link_normal_check_free, + &gPlayerAnim_link_normal_check_free, + }, + // PLAYER_ANIMGROUP_32 + { + &gPlayerAnim_link_normal_check_wait_free, + &gPlayerAnim_link_normal_check_wait, + &gPlayerAnim_link_normal_check_wait, + &gPlayerAnim_link_normal_check_wait_free, + &gPlayerAnim_link_normal_check_wait_free, + &gPlayerAnim_link_normal_check_wait_free, + }, + // PLAYER_ANIMGROUP_33 + { + &gPlayerAnim_link_normal_check_end_free, + &gPlayerAnim_link_normal_check_end, + &gPlayerAnim_link_normal_check_end, + &gPlayerAnim_link_normal_check_end_free, + &gPlayerAnim_link_normal_check_end_free, + &gPlayerAnim_link_normal_check_end_free, + }, + // PLAYER_ANIMGROUP_34 + { + &gPlayerAnim_link_normal_pull_start_free, + &gPlayerAnim_link_normal_pull_start, + &gPlayerAnim_link_normal_pull_start, + &gPlayerAnim_link_normal_pull_start_free, + &gPlayerAnim_link_normal_pull_start_free, + &gPlayerAnim_link_normal_pull_start_free, + }, + // PLAYER_ANIMGROUP_35 + { + &gPlayerAnim_link_normal_pulling_free, + &gPlayerAnim_link_normal_pulling, + &gPlayerAnim_link_normal_pulling, + &gPlayerAnim_link_normal_pulling_free, + &gPlayerAnim_link_normal_pulling_free, + &gPlayerAnim_link_normal_pulling_free, + }, + // PLAYER_ANIMGROUP_36 + { + &gPlayerAnim_link_normal_pull_end_free, + &gPlayerAnim_link_normal_pull_end, + &gPlayerAnim_link_normal_pull_end, + &gPlayerAnim_link_normal_pull_end_free, + &gPlayerAnim_link_normal_pull_end_free, + &gPlayerAnim_link_normal_pull_end_free, + }, + // PLAYER_ANIMGROUP_37 + { + &gPlayerAnim_link_normal_fall_up_free, + &gPlayerAnim_link_normal_fall_up, + &gPlayerAnim_link_normal_fall_up, + &gPlayerAnim_link_normal_fall_up_free, + &gPlayerAnim_link_normal_fall_up_free, + &gPlayerAnim_link_normal_fall_up_free, + }, + // PLAYER_ANIMGROUP_38 + { + &gPlayerAnim_link_normal_jump_climb_hold_free, + &gPlayerAnim_link_normal_jump_climb_hold, + &gPlayerAnim_link_normal_jump_climb_hold, + &gPlayerAnim_link_normal_jump_climb_hold_free, + &gPlayerAnim_link_normal_jump_climb_hold_free, + &gPlayerAnim_link_normal_jump_climb_hold_free, + }, + // PLAYER_ANIMGROUP_39 + { + &gPlayerAnim_link_normal_jump_climb_wait_free, + &gPlayerAnim_link_normal_jump_climb_wait, + &gPlayerAnim_link_normal_jump_climb_wait, + &gPlayerAnim_link_normal_jump_climb_wait_free, + &gPlayerAnim_link_normal_jump_climb_wait_free, + &gPlayerAnim_link_normal_jump_climb_wait_free, + }, + // PLAYER_ANIMGROUP_40 + { + &gPlayerAnim_link_normal_jump_climb_up_free, + &gPlayerAnim_link_normal_jump_climb_up, + &gPlayerAnim_link_normal_jump_climb_up, + &gPlayerAnim_link_normal_jump_climb_up_free, + &gPlayerAnim_link_normal_jump_climb_up_free, + &gPlayerAnim_link_normal_jump_climb_up_free, + }, + // PLAYER_ANIMGROUP_41 + { + &gPlayerAnim_link_normal_down_slope_slip_end_free, + &gPlayerAnim_link_normal_down_slope_slip_end, + &gPlayerAnim_link_normal_down_slope_slip_end, + &gPlayerAnim_link_normal_down_slope_slip_end_long, + &gPlayerAnim_link_normal_down_slope_slip_end_free, + &gPlayerAnim_link_normal_down_slope_slip_end_free, + }, + // PLAYER_ANIMGROUP_42 + { + &gPlayerAnim_link_normal_up_slope_slip_end_free, + &gPlayerAnim_link_normal_up_slope_slip_end, + &gPlayerAnim_link_normal_up_slope_slip_end, + &gPlayerAnim_link_normal_up_slope_slip_end_long, + &gPlayerAnim_link_normal_up_slope_slip_end_free, + &gPlayerAnim_link_normal_up_slope_slip_end_free, + }, + // PLAYER_ANIMGROUP_43 + { + &gPlayerAnim_sude_nwait, + &gPlayerAnim_lkt_nwait, + &gPlayerAnim_lkt_nwait, + &gPlayerAnim_sude_nwait, + &gPlayerAnim_sude_nwait, + &gPlayerAnim_sude_nwait, + } +}; + +struct_8085C2A4 D_8085C2A4[] = { + /* 0 / Forward */ + { + &gPlayerAnim_link_fighter_front_jump, + &gPlayerAnim_link_fighter_front_jump_end, + &gPlayerAnim_link_fighter_front_jump_endR, + }, + /* 1 / Left */ + { + &gPlayerAnim_link_fighter_Lside_jump, + &gPlayerAnim_link_fighter_Lside_jump_end, + &gPlayerAnim_link_fighter_Lside_jump_endL, + }, + /* 2 / Back */ + { + &gPlayerAnim_link_fighter_backturn_jump, + &gPlayerAnim_link_fighter_backturn_jump_end, + &gPlayerAnim_link_fighter_backturn_jump_endR, + }, + /* 3 / Right */ + { + &gPlayerAnim_link_fighter_Rside_jump, + &gPlayerAnim_link_fighter_Rside_jump_end, + &gPlayerAnim_link_fighter_Rside_jump_endR, + }, + /* 4 / */ + { + &gPlayerAnim_link_normal_newroll_jump_20f, + &gPlayerAnim_link_normal_newroll_jump_end_20f, + &gPlayerAnim_link_normal_newroll_jump_end_20f, + }, + /* 5 / */ + { + &gPlayerAnim_link_normal_newside_jump_20f, + &gPlayerAnim_link_normal_newside_jump_end_20f, + &gPlayerAnim_link_normal_newside_jump_end_20f, + }, +}; + +// sCylinderInit +ColliderCylinderInit D_8085C2EC = { + { + COLTYPE_HIT5, + AT_NONE, + AC_ON | AC_TYPE_ENEMY, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_PLAYER, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK1, + { 0x00000000, 0x00, 0x00 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { 12, 60, 0, { 0, 0, 0 } }, +}; + +// sShieldCylinderInit +ColliderCylinderInit D_8085C318 = { + { + COLTYPE_METAL, + AT_ON | AT_TYPE_PLAYER, + AC_ON | AC_HARD | AC_TYPE_ENEMY, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK2, + { 0x00100000, 0x00, 0x02 }, + { 0xD7CFFFFF, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, + { 25, 60, 0, { 0, 0, 0 } }, +}; + +// sMeleeWeaponQuadInit +ColliderQuadInit D_8085C344 = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_PLAYER, + AC_NONE, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK2, + { 0x00000000, 0x00, 0x01 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_NONE, + OCELEM_NONE, + }, + { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } }, +}; + +// sShieldQuadInit +ColliderQuadInit D_8085C394 = { + { + COLTYPE_METAL, + AT_ON | AT_TYPE_PLAYER, + AC_ON | AC_HARD | AC_TYPE_ENEMY, + OC1_NONE, + OC2_TYPE_PLAYER, + COLSHAPE_QUAD, + }, + { + ELEMTYPE_UNK2, + { 0x00100000, 0x00, 0x00 }, + { 0xD7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_NONE, + }, + { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } } }, +}; + +f32 D_8085C3E4 = 1.0f; +f32 D_8085C3E8 = 1.0f; + +// ANIMSFX_TYPE_VOICE +void Player_AnimSfx_PlayVoice(Player* this, u16 sfxId) { + u16 sfxOffset; + + if (this->currentMask == PLAYER_MASK_GIANT) { + func_8019F830(&this->actor.projectedPos, sfxId); + } else if (this->actor.id == ACTOR_PLAYER) { + if (this->currentMask == PLAYER_MASK_SCENTS) { + sfxOffset = SFX_VOICE_BANK_SIZE * 7; + } else { + sfxOffset = this->ageProperties->voiceSfxIdOffset; + } + + Player_PlaySfx(this, sfxOffset + sfxId); + } +} + +u16 D_8085C3EC[] = { + NA_SE_VO_LI_SWEAT, + NA_SE_VO_LI_SNEEZE, + NA_SE_VO_LI_RELAX, + NA_SE_VO_LI_FALL_L, +}; + +void func_8082E00C(Player* this) { + s32 i; + u16* sfxIdPtr = D_8085C3EC; + + for (i = 0; i < ARRAY_COUNT(D_8085C3EC); i++) { + AudioSfx_StopById((u16)(*sfxIdPtr + this->ageProperties->voiceSfxIdOffset)); + sfxIdPtr++; + } +} + +u16 Player_GetFloorSfx(Player* this, u16 sfxId) { + return sfxId + this->floorSfxOffset; +} + +// ANIMSFX_TYPE_FLOOR +void Player_AnimSfx_PlayFloor(Player* this, u16 sfxId) { + Player_PlaySfx(this, Player_GetFloorSfx(this, sfxId)); +} + +u16 Player_GetFloorSfxByAge(Player* this, u16 sfxId) { + return sfxId + this->floorSfxOffset + this->ageProperties->surfaceSfxIdOffset; +} + +// ANIMSFX_TYPE_FLOOR_BY_AGE +void Player_AnimSfx_PlayFloorByAge(Player* this, u16 sfxId) { + Player_PlaySfx(this, Player_GetFloorSfxByAge(this, sfxId)); +} + +// ANIMSFX_TYPE_6 and ANIMSFX_TYPE_8 +void Player_AnimSfx_PlayFloorWalk(Player* this, f32 freqVolumeLerp) { + s32 sfxId; + + if (this->currentMask == PLAYER_MASK_GIANT) { + sfxId = NA_SE_PL_GIANT_WALK; + } else { + sfxId = Player_GetFloorSfxByAge(this, NA_SE_PL_WALK_GROUND); + } + + // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume + func_8019F638(&this->actor.projectedPos, sfxId, freqVolumeLerp); +} + +// ANIMSFX_TYPE_FLOOR_JUMP +void Player_AnimSfx_PlayFloorJump(Player* this) { + Player_PlaySfx(this, Player_GetFloorSfxByAge(this, NA_SE_PL_JUMP_GROUND)); +} + +// ANIMSFX_TYPE_FLOOR_LAND +void Player_AnimSfx_PlayFloorLand(Player* this) { + Player_PlaySfx(this, Player_GetFloorSfxByAge(this, NA_SE_PL_LAND_GROUND)); +} + +void func_8082E1F0(Player* this, u16 sfxId) { + Player_PlaySfx(this, sfxId); + this->stateFlags2 |= PLAYER_STATE2_8; +} + +void Player_PlayAnimSfx(Player* this, AnimSfxEntry* entry) { + s32 cond; + + do { + s32 data = ABS_ALT(entry->flags); + s32 type = ANIMSFX_GET_TYPE(data); + + if (PlayerAnimation_OnFrame(&this->skelAnime, fabsf(ANIMSFX_GET_FRAME(data)))) { + if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_GENERAL)) { + Player_PlaySfx(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR)) { + Player_AnimSfx_PlayFloor(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_BY_AGE)) { + Player_AnimSfx_PlayFloorByAge(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_VOICE)) { + Player_AnimSfx_PlayVoice(this, entry->sfxId); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_LAND)) { + Player_AnimSfx_PlayFloorLand(this); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_6)) { + Player_AnimSfx_PlayFloorWalk(this, 6.0f); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_FLOOR_JUMP)) { + Player_AnimSfx_PlayFloorJump(this); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_8)) { + Player_AnimSfx_PlayFloorWalk(this, 0.0f); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_9)) { + // Audio_PlaySfx_AtPosForMetalEffectsWithSyncedFreqAndVolume + func_8019F638(&this->actor.projectedPos, this->ageProperties->surfaceSfxIdOffset + NA_SE_PL_WALK_LADDER, + 0.0f); + } else if (type == ANIMSFX_SHIFT_TYPE(ANIMSFX_TYPE_SURFACE)) { + Player_PlaySfx(this, entry->sfxId + this->ageProperties->surfaceSfxIdOffset); + } + } + + cond = entry->flags >= 0; + entry++; + } while (cond); +} + +void func_8082E438(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -6.0f); +} + +void func_8082E4A4(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -6.0f); +} + +void func_8082E514(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f); +} + +void func_8082E55C(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -6.0f); +} + +void func_8082E5A8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); +} + +void func_8082E5EC(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f); +} + +void func_8082E634(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_Change(play, &this->skelAnime, anim, 3.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -16.0f); +} + +// Player_AnimationPlayLoopIfCurrentFinished +s32 func_8082E67C(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, anim); + return true; + } else { + return false; + } +} + +void func_8082E6D0(Player* this) { + this->skelAnime.prevTransl = this->skelAnime.baseTransl; + this->skelAnime.prevRot = this->actor.shape.rot.y; +} + +void func_8082E6F8(Player* this) { + func_8082E6D0(this); + this->skelAnime.prevTransl.x *= this->ageProperties->unk_08; + this->skelAnime.prevTransl.y *= this->ageProperties->unk_08; + this->skelAnime.prevTransl.z *= this->ageProperties->unk_08; +} + +void func_8082E784(Player* this) { + this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y = 0; +} + +void func_8082E794(Player* this) { + if (this->skelAnime.moveFlags) { + func_8082DC28(this); + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = this->skelAnime.baseTransl.x; + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = this->skelAnime.baseTransl.z; + + if (this->skelAnime.moveFlags & ANIM_FLAG_8) { + if (this->skelAnime.moveFlags & ANIM_FLAG_UPDATE_Y) { + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = this->skelAnime.prevTransl.y; + } + } else { + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = this->skelAnime.baseTransl.y; + } + func_8082E6D0(this); + this->skelAnime.moveFlags = 0; + } +} + +void func_8082E820(Player* this, s32 moveFlags) { + Vec3f pos; + + this->skelAnime.moveFlags = moveFlags; + this->skelAnime.prevTransl = this->skelAnime.baseTransl; + SkelAnime_UpdateTranslation(&this->skelAnime, &pos, this->actor.shape.rot.y); + + if (moveFlags & ANIM_FLAG_1) { + pos.x *= this->ageProperties->unk_08; + pos.z *= this->ageProperties->unk_08; + this->actor.world.pos.x += pos.x * this->actor.scale.x; + this->actor.world.pos.z += pos.z * this->actor.scale.z; + } + + if (moveFlags & ANIM_FLAG_UPDATE_Y) { + if (!(moveFlags & ANIM_FLAG_4)) { + pos.y *= this->ageProperties->unk_08; + } + this->actor.world.pos.y += pos.y * this->actor.scale.y; + } + + func_8082DC28(this); +} + +void func_8082E920(PlayState* play, Player* this, s32 moveFlags) { + if (moveFlags & ANIM_FLAG_200) { + func_8082E6F8(this); + } else if ((moveFlags & ANIM_FLAG_100) || this->skelAnime.moveFlags) { + func_8082E6D0(this); + } else { + this->skelAnime.prevTransl = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1]; + this->skelAnime.prevRot = this->actor.shape.rot.y; + } + + this->skelAnime.moveFlags = moveFlags; + Player_StopHorizontalMovement(this); + AnimationContext_DisableQueue(play); +} + +void func_8082E9C8(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags, f32 playSpeed) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, playSpeed); + func_8082E920(play, this, moveFlags); +} + +void func_8082EA10(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082E9C8(play, this, anim, moveFlags, 3.0f / 3.0f); +} + +void func_8082EA38(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082E9C8(play, this, anim, moveFlags, 2.0f / 3.0f); +} + +void func_8082EA60(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082EA38(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_200); +} + +void func_8082EA80(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags, f32 playSpeed) { + PlayerAnimation_PlayLoopSetSpeed(play, &this->skelAnime, anim, playSpeed); + func_8082E920(play, this, moveFlags); +} + +void func_8082EAC8(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082EA80(play, this, anim, moveFlags, 3.0f / 3.0f); +} + +void func_8082EAF0(PlayState* play, Player* this, PlayerAnimationHeader* anim, s32 moveFlags) { + func_8082EA80(play, this, anim, moveFlags, 2.0f / 3.0f); +} + +void func_8082EB18(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082EAF0(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE); +} + +void func_8082EB38(PlayState* play, Player* this) { + s8 var_v0; + s8 var_v1; + + this->unk_D60 = D_80862AFC; + this->unk_D64 = D_80862B00; + func_800FF3A0(&D_80862AFC, &D_80862B00, sPlayerControlInput); + + if (D_80862AFC < 8.0f) { + D_80862AFC = 0.0f; + } + + D_80862B02 = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]) + D_80862B00; + this->unk_ADE = (this->unk_ADE + 1) % ARRAY_COUNT(this->unk_ADF); + if (D_80862AFC < 55.0f) { + var_v0 = -1; + var_v1 = -1; + } else { + var_v1 = ((u16)(D_80862B00 + 0x2000)) >> 9; + var_v0 = ((u16)(BINANG_SUB(D_80862B02, this->actor.shape.rot.y) + 0x2000)) >> 14; + } + this->unk_ADF[this->unk_ADE] = var_v1; + this->unk_AE3[this->unk_ADE] = var_v0; +} + +void func_8082EC9C(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, D_8085C3E4); +} + +s32 func_8082ECCC(Player* this) { + return this->stateFlags1 & PLAYER_STATE1_1000000; +} + +#define CHEST_ANIM_SHORT 0 +#define CHEST_ANIM_LONG 1 + +// TODO: consider what to do with the NONEs: cannot use a zero-argument macro like OoT since the text id is involved. +#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim) \ + { itemId, field, (chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1), textId, objectId } + +#define GIFIELD_GET_DROP_TYPE(field) ((field)&0x1F) +#define GIFIELD_20 (1 << 5) +#define GIFIELD_40 (1 << 6) +#define GIFIELD_NO_COLLECTIBLE (1 << 7) +/** + * `flags` must be 0, GIFIELD_20, GIFIELD_40 or GIFIELD_NO_COLLECTIBLE (which can be or'ed together) + * `dropType` must be either a value from the `Item00Type` enum or 0 if the `GIFIELD_NO_COLLECTIBLE` flag was used + */ +#define GIFIELD(flags, dropType) ((flags) | (dropType)) + +GetItemEntry sGetItemTable[GI_MAX - 1] = { + // GI_RUPEE_GREEN + GET_ITEM(ITEM_RUPEE_GREEN, OBJECT_GI_RUPY, GID_RUPEE_GREEN, 0xC4, GIFIELD(0, ITEM00_RUPEE_GREEN), CHEST_ANIM_SHORT), + // GI_RUPEE_BLUE + GET_ITEM(ITEM_RUPEE_BLUE, OBJECT_GI_RUPY, GID_RUPEE_BLUE, 0x2, GIFIELD(0, ITEM00_RUPEE_BLUE), CHEST_ANIM_SHORT), + // GI_RUPEE_10 + GET_ITEM(ITEM_RUPEE_10, OBJECT_GI_RUPY, GID_RUPEE_RED, 0x3, GIFIELD(0, ITEM00_RUPEE_RED), CHEST_ANIM_SHORT), + // GI_RUPEE_RED + GET_ITEM(ITEM_RUPEE_RED, OBJECT_GI_RUPY, GID_RUPEE_RED, 0x4, GIFIELD(0, ITEM00_RUPEE_RED), CHEST_ANIM_SHORT), + // GI_RUPEE_PURPLE + GET_ITEM(ITEM_RUPEE_PURPLE, OBJECT_GI_RUPY, GID_RUPEE_PURPLE, 0x5, GIFIELD(0, ITEM00_RUPEE_PURPLE), + CHEST_ANIM_SHORT), + // GI_RUPEE_SILVER + GET_ITEM(ITEM_RUPEE_SILVER, OBJECT_GI_RUPY, GID_RUPEE_SILVER, 0x6, GIFIELD(0, ITEM00_RUPEE_PURPLE), + CHEST_ANIM_SHORT), + // GI_RUPEE_HUGE + GET_ITEM(ITEM_RUPEE_HUGE, OBJECT_GI_RUPY, GID_RUPEE_HUGE, 0x7, GIFIELD(0, ITEM00_RUPEE_HUGE), CHEST_ANIM_SHORT), + // GI_WALLET_ADULT + GET_ITEM(ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x8, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_WALLET_GIANT + GET_ITEM(ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x9, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_RECOVERY_HEART + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0xA, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_0B + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0xB, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_HEART_PIECE + GET_ITEM(ITEM_HEART_PIECE_2, OBJECT_GI_HEARTS, GID_HEART_PIECE, 0xC, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_HEART_CONTAINER + GET_ITEM(ITEM_HEART_CONTAINER, OBJECT_GI_HEARTS, GID_HEART_CONTAINER, 0xD, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MAGIC_SMALL + GET_ITEM(ITEM_MAGIC_SMALL, OBJECT_GI_MAGICPOT, GID_MAGIC_SMALL, 0xE, + GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_SMALL), CHEST_ANIM_SHORT), + // GI_MAGIC_LARGE + GET_ITEM(ITEM_MAGIC_LARGE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xF, + GIFIELD(GIFIELD_20 | GIFIELD_40, ITEM00_MAGIC_LARGE), CHEST_ANIM_SHORT), + // GI_10 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x10, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_STRAY_FAIRY + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x11, 0, 0), + // GI_12 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x12, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_13 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x13, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_BOMBS_1 + GET_ITEM(ITEM_BOMB, OBJECT_GI_BOMB_1, GID_BOMB, 0x14, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_5 + GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x15, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_10 + GET_ITEM(ITEM_BOMBS_10, OBJECT_GI_BOMB_1, GID_BOMB, 0x16, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_20 + GET_ITEM(ITEM_BOMBS_20, OBJECT_GI_BOMB_1, GID_BOMB, 0x17, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_BOMBS_30 + GET_ITEM(ITEM_BOMBS_30, OBJECT_GI_BOMB_1, GID_BOMB, 0x18, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), CHEST_ANIM_SHORT), + // GI_STICKS_1 + GET_ITEM(ITEM_STICK, OBJECT_GI_STICK, GID_STICK, 0x19, GIFIELD(0, ITEM00_STICK), CHEST_ANIM_SHORT), + // GI_BOMBCHUS_10 + GET_ITEM(ITEM_BOMBCHUS_10, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x1A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_BOMB_BAG_20 + GET_ITEM(ITEM_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_20, 0x1B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOMB_BAG_30 + GET_ITEM(ITEM_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_30, 0x1C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOMB_BAG_40 + GET_ITEM(ITEM_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, 0x1D, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_ARROWS_10 + GET_ITEM(ITEM_ARROWS_10, OBJECT_GI_ARROW, GID_ARROWS_SMALL, 0x1E, GIFIELD(GIFIELD_40, ITEM00_ARROWS_30), + CHEST_ANIM_SHORT), + // GI_ARROWS_30 + GET_ITEM(ITEM_ARROWS_30, OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, 0x1F, GIFIELD(GIFIELD_40, ITEM00_ARROWS_40), + CHEST_ANIM_SHORT), + // GI_ARROWS_40 + GET_ITEM(ITEM_ARROWS_40, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0x20, GIFIELD(GIFIELD_40, ITEM00_ARROWS_50), + CHEST_ANIM_SHORT), + // GI_ARROWS_50 + GET_ITEM(ITEM_ARROWS_40, OBJECT_GI_ARROW, GID_ARROWS_LARGE, 0x21, GIFIELD(GIFIELD_40, ITEM00_ARROWS_50), + CHEST_ANIM_SHORT), + // GI_QUIVER_30 + GET_ITEM(ITEM_BOW, OBJECT_GI_BOW, GID_BOW, 0x22, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_QUIVER_40 + GET_ITEM(ITEM_QUIVER_40, OBJECT_GI_ARROWCASE, GID_QUIVER_40, 0x23, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_QUIVER_50 + GET_ITEM(ITEM_QUIVER_50, OBJECT_GI_ARROWCASE, GID_QUIVER_50, 0x24, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_ARROW_FIRE + GET_ITEM(ITEM_ARROW_FIRE, OBJECT_GI_M_ARROW, GID_ARROW_FIRE, 0x25, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_ARROW_ICE + GET_ITEM(ITEM_ARROW_ICE, OBJECT_GI_M_ARROW, GID_ARROW_ICE, 0x26, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_ARROW_LIGHT + GET_ITEM(ITEM_ARROW_LIGHT, OBJECT_GI_M_ARROW, GID_ARROW_LIGHT, 0x27, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_NUTS_1 + GET_ITEM(ITEM_NUT, OBJECT_GI_NUTS, GID_NUTS, 0x28, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_NUTS_5 + GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x29, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_NUTS_10 + GET_ITEM(ITEM_NUTS_10, OBJECT_GI_NUTS, GID_NUTS, 0x2A, GIFIELD(0, ITEM00_NUTS_1), CHEST_ANIM_SHORT), + // GI_2B + GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2B, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_2C + GET_ITEM(ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0x2C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_2D + GET_ITEM(ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0x2D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_BOMBCHUS_20 + GET_ITEM(ITEM_BOMBCHUS_20, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x2E, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_2F + GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x2F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_30 + GET_ITEM(ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x30, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_31 + GET_ITEM(ITEM_STICK_UPGRADE_30, OBJECT_GI_STICK, GID_STICK, 0x31, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_SHIELD_HERO + GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x32, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), + // GI_SHIELD_MIRROR + GET_ITEM(ITEM_SHIELD_MIRROR, OBJECT_GI_SHIELD_3, GID_SHIELD_MIRROR, 0x33, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_POWDER_KEG + GET_ITEM(ITEM_POWDER_KEG, OBJECT_GI_BIGBOMB, GID_POWDER_KEG, 0x34, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MAGIC_BEANS + GET_ITEM(ITEM_MAGIC_BEANS, OBJECT_GI_BEAN, GID_MAGIC_BEANS, 0x35, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_BOMBCHUS_1 + GET_ITEM(ITEM_BOMBCHUS_1, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x36, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_SWORD_KOKIRI + GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0x37, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_RAZOR + GET_ITEM(ITEM_SWORD_RAZOR, OBJECT_GI_SWORD_2, GID_SWORD_RAZOR, 0x38, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_GILDED + GET_ITEM(ITEM_SWORD_GILDED, OBJECT_GI_SWORD_3, GID_SWORD_GILDED, 0x39, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOMBCHUS_5 + GET_ITEM(ITEM_BOMBCHUS_5, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x3A, GIFIELD(GIFIELD_40 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_SWORD_GREAT_FAIRY + GET_ITEM(ITEM_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4, GID_SWORD_GREAT_FAIRY, 0x3B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_KEY_SMALL + GET_ITEM(ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0x3C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_KEY_BOSS + GET_ITEM(ITEM_KEY_BOSS, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, 0x3D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MAP + GET_ITEM(ITEM_DUNGEON_MAP, OBJECT_GI_MAP, GID_DUNGEON_MAP, 0x3E, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_COMPASS + GET_ITEM(ITEM_COMPASS, OBJECT_GI_COMPASS, GID_COMPASS, 0x3F, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_40 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x40, 0, 0), + // GI_HOOKSHOT + GET_ITEM(ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x41, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_LENS + GET_ITEM(ITEM_LENS, OBJECT_GI_GLASSES, GID_LENS, 0x42, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_PICTO_BOX + GET_ITEM(ITEM_PICTO_BOX, OBJECT_GI_CAMERA, GID_PICTO_BOX, 0x43, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_44 + GET_ITEM(ITEM_PICTO_BOX, OBJECT_UNSET_0, GID_NONE, 0x44, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_45 + GET_ITEM(ITEM_RECOVERY_HEART, OBJECT_GI_HEART, GID_RECOVERY_HEART, 0x45, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_46 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x46, 0, 0), + // GI_47 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x47, 0, 0), + // GI_48 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x48, 0, 0), + // GI_49 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x49, 0, 0), + // GI_4A + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4A, 0, 0), + // GI_4B + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4B, 0, 0), + // GI_OCARINA + GET_ITEM(ITEM_OCARINA, OBJECT_GI_OCARINA, GID_OCARINA, 0x4C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_4D + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4D, 0, 0), + // GI_4E + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4E, 0, 0), + // GI_4F + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x4F, 0, 0), + // GI_BOMBERS_NOTEBOOK + GET_ITEM(ITEM_BOMBERS_NOTEBOOK, OBJECT_GI_SCHEDULE, GID_BOMBERS_NOTEBOOK, 0x50, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_51 + GET_ITEM(ITEM_NONE, OBJECT_GI_MAP, GID_STONE_OF_AGONY, 0x51, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_SKULL_TOKEN + GET_ITEM(ITEM_SKULL_TOKEN, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, 0x52, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_SHORT), + // GI_53 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x53, 0, 0), + // GI_54 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x54, 0, 0), + // GI_REMAINS_ODOLWA + GET_ITEM(ITEM_REMAINS_ODOLWA, OBJECT_UNSET_0, GID_REMAINS_ODOLWA, 0x55, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_REMAINS_GOHT + GET_ITEM(ITEM_REMAINS_GOHT, OBJECT_UNSET_0, GID_REMAINS_GOHT, 0x56, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_REMAINS_GYORG + GET_ITEM(ITEM_REMAINS_GYORG, OBJECT_UNSET_0, GID_REMAINS_GYORG, 0x57, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_REMAINS_TWINMOLD + GET_ITEM(ITEM_REMAINS_TWINMOLD, OBJECT_UNSET_0, GID_REMAINS_TWINMOLD, 0x58, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_POTION_RED_BOTTLE + GET_ITEM(ITEM_LONGSHOT, OBJECT_GI_BOTTLE_RED, GID_57, GIFIELD(GIFIELD_40, ITEM00_BOMBS_0), + GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BOTTLE + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x5A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_POTION_RED + GET_ITEM(ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x5B, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_POTION_GREEN + GET_ITEM(ITEM_POTION_GREEN, OBJECT_GI_LIQUID, GID_POTION_GREEN, 0x5C, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_POTION_BLUE + GET_ITEM(ITEM_POTION_BLUE, OBJECT_GI_LIQUID, GID_POTION_BLUE, 0x5D, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_FAIRY + GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE_04, GID_FAIRY, 0x5E, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_DEKU_PRINCESS + GET_ITEM(ITEM_FAIRY, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x5F, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MILK_BOTTLE + GET_ITEM(ITEM_MILK_BOTTLE, OBJECT_GI_MILK, GID_MILK, 0x60, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MILK_HALF + GET_ITEM(ITEM_MILK_HALF, OBJECT_GI_MILK, GID_MILK, 0x61, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_FISH + GET_ITEM(ITEM_FISH, OBJECT_GI_FISH, GID_FISH, 0x62, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BUG + GET_ITEM(ITEM_BUG, OBJECT_GI_INSECT, GID_BUG, 0x63, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BLUE_FIRE + GET_ITEM(ITEM_BLUE_FIRE, OBJECT_UNSET_0, GID_NONE, 0x64, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_POE + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x65, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_BIG_POE + GET_ITEM(ITEM_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0x66, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SPRING_WATER + GET_ITEM(ITEM_SPRING_WATER, OBJECT_UNSET_0, GID_NONE, 0x67, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_HOT_SPRING_WATER + GET_ITEM(ITEM_HOT_SPRING_WATER, OBJECT_UNSET_0, GID_NONE, 0x68, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_ZORA_EGG + GET_ITEM(ITEM_ZORA_EGG, OBJECT_GI_BOTTLE_15, GID_ZORA_EGG, 0x69, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_GOLD_DUST + GET_ITEM(ITEM_GOLD_DUST, OBJECT_GI_BOTTLE_16, GID_SEAHORSE, 0x6A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MUSHROOM + GET_ITEM(ITEM_MUSHROOM, OBJECT_GI_MAGICMUSHROOM, GID_MUSHROOM, 0x6B, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_6C + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x6C, GIFIELD(0, ITEM00_RUPEE_GREEN), 0), + // GI_6D + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x6D, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SEAHORSE + GET_ITEM(ITEM_SEAHORSE, OBJECT_GI_BOTTLE_16, GID_SEAHORSE, 0x6E, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_CHATEAU_BOTTLE + GET_ITEM(ITEM_CHATEAU, OBJECT_GI_BOTTLE_21, GID_CHATEAU, 0x6F, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_HYLIAN_LOACH + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0x70, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_71 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x71, 0, 0), + // GI_72 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x72, 0, 0), + // GI_73 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x73, 0, 0), + // GI_74 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x74, 0, 0), + // GI_75 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x75, 0, 0), + // GI_ICE_TRAP + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x76, 0, 0), + // GI_77 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x77, 0, 0), + // GI_MASK_DEKU + GET_ITEM(ITEM_MASK_DEKU, OBJECT_GI_NUTSMASK, GID_MASK_DEKU, 0x78, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_GORON + GET_ITEM(ITEM_MASK_GORON, OBJECT_GI_GOLONMASK, GID_MASK_GORON, 0x79, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_ZORA + GET_ITEM(ITEM_MASK_ZORA, OBJECT_GI_ZORAMASK, GID_MASK_ZORA, 0x7A, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_FIERCE_DEITY + GET_ITEM(ITEM_MASK_FIERCE_DEITY, OBJECT_GI_MASK03, GID_MASK_FIERCE_DEITY, 0x7B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_CAPTAIN + GET_ITEM(ITEM_MASK_CAPTAIN, OBJECT_GI_MASK18, GID_MASK_CAPTAIN, 0x7C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_GIANT + GET_ITEM(ITEM_MASK_GIANT, OBJECT_GI_MASK23, GID_MASK_GIANT, 0x7D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_ALL_NIGHT + GET_ITEM(ITEM_MASK_ALL_NIGHT, OBJECT_GI_MASK06, GID_MASK_ALL_NIGHT, 0x7E, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_BUNNY + GET_ITEM(ITEM_MASK_BUNNY, OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, 0x7F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_KEATON + GET_ITEM(ITEM_MASK_KEATON, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0x80, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_GARO + GET_ITEM(ITEM_MASK_GARO, OBJECT_GI_MASK09, GID_MASK_GARO, 0x81, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_ROMANI + GET_ITEM(ITEM_MASK_ROMANI, OBJECT_GI_MASK10, GID_MASK_ROMANI, 0x82, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_CIRCUS_LEADER + GET_ITEM(ITEM_MASK_CIRCUS_LEADER, OBJECT_GI_MASK11, GID_MASK_CIRCUS_LEADER, 0x83, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_POSTMAN + GET_ITEM(ITEM_MASK_POSTMAN, OBJECT_GI_MASK12, GID_MASK_POSTMAN, 0x84, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_COUPLE + GET_ITEM(ITEM_MASK_COUPLE, OBJECT_GI_MASK13, GID_MASK_COUPLE, 0x85, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_GREAT_FAIRY + GET_ITEM(ITEM_MASK_GREAT_FAIRY, OBJECT_GI_MASK14, GID_MASK_GREAT_FAIRY, 0x86, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_GIBDO + GET_ITEM(ITEM_MASK_GIBDO, OBJECT_GI_MASK15, GID_MASK_GIBDO, 0x87, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_DON_GERO + GET_ITEM(ITEM_MASK_DON_GERO, OBJECT_GI_MASK16, GID_MASK_DON_GERO, 0x88, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_KAMARO + GET_ITEM(ITEM_MASK_KAMARO, OBJECT_GI_MASK17, GID_MASK_KAMARO, 0x89, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_TRUTH + GET_ITEM(ITEM_MASK_TRUTH, OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, 0x8A, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_STONE + GET_ITEM(ITEM_MASK_STONE, OBJECT_GI_STONEMASK, GID_MASK_STONE, 0x8B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_MASK_BREMEN + GET_ITEM(ITEM_MASK_BREMEN, OBJECT_GI_MASK20, GID_MASK_BREMEN, 0x8C, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_BLAST + GET_ITEM(ITEM_MASK_BLAST, OBJECT_GI_MASK21, GID_MASK_BLAST, 0x8D, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_SCENTS + GET_ITEM(ITEM_MASK_SCENTS, OBJECT_GI_MASK22, GID_MASK_SCENTS, 0x8E, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MASK_KAFEIS_MASK + GET_ITEM(ITEM_MASK_KAFEIS_MASK, OBJECT_GI_MASK05, GID_MASK_KAFEIS_MASK, 0x8F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_90 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0x90, 0, 0), + // GI_CHATEAU + GET_ITEM(ITEM_CHATEAU_2, OBJECT_GI_BOTTLE_21, GID_CHATEAU, 0x91, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MILK + GET_ITEM(ITEM_MILK, OBJECT_GI_MILK, GID_MILK, 0x92, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_GOLD_DUST_2 + GET_ITEM(ITEM_GOLD_DUST_2, OBJECT_GI_GOLD_DUST, GID_GOLD_DUST, 0x93, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_HYLIAN_LOACH_2 + GET_ITEM(ITEM_HYLIAN_LOACH_2, OBJECT_GI_LOACH, GID_HYLIAN_LOACH, 0x94, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_SEAHORSE_CAUGHT + GET_ITEM(ITEM_SEAHORSE_CAUGHT, OBJECT_GI_SEAHORSE, GID_SEAHORSE_CAUGHT, 0x95, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_MOON_TEAR + GET_ITEM(ITEM_MOON_TEAR, OBJECT_GI_RESERVE00, GID_MOON_TEAR, 0x96, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_LAND + GET_ITEM(ITEM_DEED_LAND, OBJECT_GI_RESERVE01, GID_DEED_LAND, 0x97, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_SWAMP + GET_ITEM(ITEM_DEED_SWAMP, OBJECT_GI_RESERVE01, GID_DEED_SWAMP, 0x98, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_MOUNTAIN + GET_ITEM(ITEM_DEED_MOUNTAIN, OBJECT_GI_RESERVE01, GID_DEED_MOUNTAIN, 0x99, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_DEED_OCEAN + GET_ITEM(ITEM_DEED_OCEAN, OBJECT_GI_RESERVE01, GID_DEED_OCEAN, 0x9A, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_SWORD_GREAT_FAIRY_STOLEN + GET_ITEM(ITEM_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4, GID_SWORD_GREAT_FAIRY, 0x9B, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_KOKIRI_STOLEN + GET_ITEM(ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0x9C, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_RAZOR_STOLEN + GET_ITEM(ITEM_SWORD_RAZOR, OBJECT_GI_SWORD_2, GID_SWORD_RAZOR, 0x9D, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SWORD_GILDED_STOLEN + GET_ITEM(ITEM_SWORD_GILDED, OBJECT_GI_SWORD_3, GID_SWORD_GILDED, 0x9E, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_SHIELD_HERO_STOLEN + GET_ITEM(ITEM_SHIELD_HERO, OBJECT_GI_SHIELD_2, GID_SHIELD_HERO, 0x9F, + GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_SHORT), + // GI_ROOM_KEY + GET_ITEM(ITEM_ROOM_KEY, OBJECT_GI_RESERVE_B_00, GID_ROOM_KEY, 0xA0, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_LETTER_TO_MAMA + GET_ITEM(ITEM_LETTER_MAMA, OBJECT_GI_RESERVE_B_01, GID_LETTER_MAMA, 0xA1, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_A2 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA2, 0, 0), + // GI_A3 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA3, 0, 0), + // GI_A4 + GET_ITEM(ITEM_NONE, OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, 0xA4, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_A5 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA5, 0, 0), + // GI_A6 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA6, 0, 0), + // GI_A7 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA7, 0, 0), + // GI_A8 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xA8, 0, 0), + // GI_BOTTLE_STOLEN + GET_ITEM(ITEM_BOTTLE, OBJECT_GI_BOTTLE, GID_BOTTLE, 0xA9, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_LETTER_TO_KAFEI + GET_ITEM(ITEM_LETTER_TO_KAFEI, OBJECT_GI_RESERVE_C_00, GID_LETTER_TO_KAFEI, 0xAA, + GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_PENDANT_OF_MEMORIES + GET_ITEM(ITEM_PENDANT_OF_MEMORIES, OBJECT_GI_RESERVE_C_01, GID_PENDANT_OF_MEMORIES, 0xAB, + GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_AC + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAC, 0, 0), + // GI_AD + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAD, 0, 0), + // GI_AE + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAE, 0, 0), + // GI_AF + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xAF, 0, 0), + // GI_B0 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB0, 0, 0), + // GI_B1 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB1, 0, 0), + // GI_B2 + GET_ITEM(ITEM_NONE, OBJECT_UNSET_0, GID_NONE, 0xB2, 0, 0), + // GI_B3 + GET_ITEM(ITEM_NONE, OBJECT_GI_MSSA, GID_MASK_SUN, 0xB3, GIFIELD(GIFIELD_NO_COLLECTIBLE, 0), CHEST_ANIM_LONG), + // GI_TINGLE_MAP_CLOCK_TOWN + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB4, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_WOODFALL + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB5, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_SNOWHEAD + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB6, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_ROMANI_RANCH + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB7, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_GREAT_BAY + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB8, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), + // GI_TINGLE_MAP_STONE_TOWER + GET_ITEM(ITEM_TINGLE_MAP, OBJECT_GI_FIELDMAP, GID_TINGLE_MAP, 0xB9, GIFIELD(GIFIELD_20 | GIFIELD_NO_COLLECTIBLE, 0), + CHEST_ANIM_LONG), +}; + +// Player_UpdateCurrentGetItemDrawId? +void func_8082ECE0(Player* this) { + GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; + + this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); +} + +PlayerAnimationHeader* func_8082ED20(Player* this) { + if ((this->transformation == PLAYER_FORM_ZORA) || (this->actor.id != ACTOR_PLAYER)) { + return &gPlayerAnim_pz_wait; + } + if (this->transformation == PLAYER_FORM_GORON) { + return &gPlayerAnim_pg_wait; + } + if (this->currentMask == PLAYER_MASK_SCENTS) { + return &gPlayerAnim_cl_msbowait; + } + return D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]; +} + +PlayerAnimationHeader* sPlayerIdleAnimations[][2] = { + { &gPlayerAnim_link_normal_wait_typeA_20f, &gPlayerAnim_link_normal_waitF_typeA_20f }, // ROOM_BEHAVIOR_TYPE2_0 + { &gPlayerAnim_link_normal_wait_typeC_20f, &gPlayerAnim_link_normal_waitF_typeC_20f }, // ROOM_BEHAVIOR_TYPE2_1 + { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, // ROOM_BEHAVIOR_TYPE2_2 + { &gPlayerAnim_link_normal_wait_typeB_20f, &gPlayerAnim_link_normal_waitF_typeB_20f }, // ROOM_BEHAVIOR_TYPE2_HOT + { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_4 + { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_5 + { &gPlayerAnim_link_wait_typeD_20f, &gPlayerAnim_link_waitF_typeD_20f }, // ROOM_BEHAVIOR_TYPE2_6 + { &gPlayerAnim_link_wait_heat1_20f, &gPlayerAnim_link_waitF_heat1_20f }, + { &gPlayerAnim_link_wait_heat2_20f, &gPlayerAnim_link_waitF_heat2_20f }, + { &gPlayerAnim_link_wait_itemD1_20f, &gPlayerAnim_link_wait_itemD1_20f }, + { &gPlayerAnim_link_wait_itemA_20f, &gPlayerAnim_link_waitF_itemA_20f }, + { &gPlayerAnim_link_wait_itemB_20f, &gPlayerAnim_link_waitF_itemB_20f }, + { &gPlayerAnim_link_wait_itemC_20f, &gPlayerAnim_link_wait_itemC_20f }, + { &gPlayerAnim_link_wait_itemD2_20f, &gPlayerAnim_link_wait_itemD2_20f }, + { &gPlayerAnim_cl_msbowait, &gPlayerAnim_cl_msbowait }, +}; + +AnimSfxEntry D_8085C8C4[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 8, NA_SE_VO_LI_SNEEZE, STOP), +}; +AnimSfxEntry D_8085C8C8[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 18, NA_SE_VO_LI_SWEAT, STOP), +}; +AnimSfxEntry D_8085C8CC[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_BREATH_REST, STOP), +}; +AnimSfxEntry D_8085C8D0[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 10, NA_SE_VO_LI_BREATH_REST, STOP), +}; + +AnimSfxEntry D_8085C8D4[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 44, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 48, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 52, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 56, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 60, NA_SE_PL_CALM_HIT, STOP), +}; + +AnimSfxEntry D_8085C8E8[] = { + ANIMSFX(ANIMSFX_TYPE_8, 25, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 44, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 48, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 52, NA_SE_NONE, CONTINUE), ANIMSFX(ANIMSFX_TYPE_8, 56, NA_SE_NONE, STOP), +}; + +AnimSfxEntry D_8085C900[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 16, NA_SE_IT_SHIELD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 20, NA_SE_IT_SHIELD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 70, NA_SE_IT_SHIELD_SWING, STOP), +}; + +AnimSfxEntry D_8085C90C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 10, NA_SE_IT_HAMMER_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 10, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 22, NA_SE_IT_SWORD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 22, NA_SE_VO_LI_SWORD_N, STOP), +}; + +AnimSfxEntry D_8085C91C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 39, NA_SE_IT_SWORD_SWING, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 39, NA_SE_VO_LI_SWORD_N, STOP), +}; +AnimSfxEntry D_8085C924[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 20, NA_SE_VO_LI_RELAX, STOP), +}; + +AnimSfxEntry D_8085C928[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 12, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 61, NA_SE_VO_LI_POO_WAIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 68, NA_SE_VO_LI_POO_WAIT, STOP), +}; + +AnimSfxEntry* D_8085C93C[] = { + D_8085C8C4, D_8085C8C8, D_8085C8CC, D_8085C8D0, D_8085C8D4, D_8085C8E8, + D_8085C900, D_8085C90C, D_8085C91C, D_8085C924, D_8085C928, NULL, +}; + +// Used to index into D_8085C93C +u8 D_8085C96C[] = { + 0, 0, 1, 1, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 3, 3, 4, 4, 8, 8, 5, 5, 6, 6, 7, 7, 9, 9, 11, 11, +}; + +s32 func_8082ED94(Player* this) { + PlayerAnimationHeader** entry; + s32 i; + + if ((this->skelAnime.animation != &gPlayerAnim_link_normal_newroll_jump_end_20f) && + (this->skelAnime.animation != &gPlayerAnim_link_normal_newside_jump_end_20f)) { + if ((this->skelAnime.animation != func_8082ED20(this)) || + (this->skelAnime.animation == &gPlayerAnim_cl_msbowait)) { + for (i = 0, entry = &sPlayerIdleAnimations[0][0]; i < ARRAY_COUNT_2D(sPlayerIdleAnimations); i++) { + if (this->skelAnime.animation == *entry) { + return i + 1; + } + entry++; + } + + return 0; + } + } + + return -1; +} + +void func_8082EEA4(Player* this, s32 arg1) { + u8 temp_v0 = D_8085C96C[arg1]; + + if (temp_v0 != 0) { + Player_PlayAnimSfx(this, D_8085C93C[temp_v0 - 1]); + } +} + +PlayerAnimationHeader* func_8082EEE0(Player* this) { + if (this->unk_B64 != 0) { + return D_8085BE84[PLAYER_ANIMGROUP_3][this->modelAnimType]; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType]; + } +} + +s32 func_8082EF20(Player* this) { + return func_8082ECCC(this) && (this->unk_ACC != 0); +} + +PlayerAnimationHeader* func_8082EF54(Player* this) { + if (func_8082EF20(this)) { + return &gPlayerAnim_link_boom_throw_waitR; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_5][this->modelAnimType]; + } +} + +PlayerAnimationHeader* func_8082EF9C(Player* this) { + if (func_8082EF20(this)) { + return &gPlayerAnim_link_boom_throw_waitL; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_4][this->modelAnimType]; + } +} + +PlayerAnimationHeader* func_8082EFE4(Player* this) { + if (func_800B7128(this)) { + return &gPlayerAnim_link_bow_side_walk; + } else { + return D_8085BE84[PLAYER_ANIMGROUP_22][this->modelAnimType]; + } +} + +void func_8082F02C(PlayState* play, struct_8082F02C_arg1* arg1, f32 arg2) { + func_800FD59C(play, &arg1->unk_0, arg2); + func_800FD5E0(play, &arg1->unk_3, arg2); + func_800FD654(play, &arg1->unk_6, arg2); + func_800FD698(play, arg1->unk_A, arg1->unk_C, arg2); +} + +/** + * Revert cylinder to normal properties + */ +void Player_ResetCylinder(Player* this) { + this->cylinder.base.colType = COLTYPE_HIT5; + this->cylinder.base.atFlags = AT_NONE; + this->cylinder.base.acFlags = AC_ON | AC_TYPE_ENEMY; + this->cylinder.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL; + this->cylinder.info.elemType = ELEMTYPE_UNK1; + this->cylinder.info.toucher.dmgFlags = 0; + this->cylinder.info.bumper.dmgFlags = 0xF7CFFFFF; + this->cylinder.info.toucherFlags = TOUCH_NONE | TOUCH_SFX_NORMAL; + this->cylinder.dim.radius = 12; +} + +/** + * Give cylinder special properties for attacks, uses include + * - Normal roll + * - Deku spin + * - Deku launch + * - Goron pound + * - Goron spike roll + * - Zora barrier + * + * and possibly more. + * + * @param dmgFlags Damage flags (DMGFLAG defines) + * @param damage to do + * @param radius of cylinder + */ +void Player_SetCylinderForAttack(Player* this, u32 dmgFlags, s32 damage, s32 radius) { + this->cylinder.base.atFlags = AT_ON | AT_TYPE_PLAYER; + if (radius > 30) { + this->cylinder.base.ocFlags1 = OC1_NONE; + } else { + this->cylinder.base.ocFlags1 = OC1_ON | OC1_TYPE_ALL; + } + + this->cylinder.info.elemType = ELEMTYPE_UNK2; + this->cylinder.info.toucherFlags = TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_NORMAL; + this->cylinder.dim.radius = radius; + this->cylinder.info.toucher.dmgFlags = dmgFlags; + this->cylinder.info.toucher.damage = damage; + + if (dmgFlags & DMG_GORON_POUND) { + this->cylinder.base.acFlags = AC_NONE; + } else { + this->cylinder.base.colType = COLTYPE_NONE; + this->cylinder.info.bumper.dmgFlags = 0xF7CFFFFF; + + if (dmgFlags & DMG_ZORA_BARRIER) { + this->cylinder.base.acFlags = AC_NONE; + } else { + this->cylinder.base.acFlags = AC_ON | AC_TYPE_ENEMY; + } + } +} + +// Check for starting Zora barrier +void func_8082F164(Player* this, u16 button) { + if ((this->transformation == PLAYER_FORM_ZORA) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, button)) { + this->stateFlags1 |= PLAYER_STATE1_10; + } +} + +struct_8082F02C_arg1 D_8085C98C = { + { 0, 0, 0 }, { 255, 255, 155 }, { 20, 20, 50 }, 940, 5000, +}; + +// Run Zora Barrier +void func_8082F1AC(PlayState* play, Player* this) { + s32 sp4C = this->unk_B62; + f32 temp; + s16 sp46; + s16 sp44; + f32 sp40; + f32 sp3C; + s32 var_v0; + + if ((gSaveContext.save.saveInfo.playerData.magic != 0) && (this->stateFlags1 & PLAYER_STATE1_10)) { + if (gSaveContext.magicState == MAGIC_STATE_IDLE) { + Magic_Consume(play, 0, MAGIC_CONSUME_GORON_ZORA); + } + + temp = 16.0f; + if (gSaveContext.save.saveInfo.playerData.magic >= 16) { + var_v0 = 255; + } else { + var_v0 = (gSaveContext.save.saveInfo.playerData.magic / temp) * 255.0f; + } + Math_StepToS(&this->unk_B62, var_v0, 50); + } else if (Math_StepToS(&this->unk_B62, 0, 50) && (gSaveContext.magicState != MAGIC_STATE_IDLE)) { + Magic_Reset(play); + } + + if ((this->unk_B62 != 0) || (sp4C != 0)) { + f32 sp34; + f32 new_var; + + sp46 = play->gameplayFrames * 7000; + sp44 = play->gameplayFrames * 14000; + func_8082F02C(play, &D_8085C98C, this->unk_B62 / 255.0f); + + sp34 = Math_SinS(sp44) * 40.0f; + sp40 = Math_CosS(sp44) * 40.0f; + sp3C = Math_SinS(sp46) * sp34; + new_var = Math_CosS(sp46) * sp34; + + Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x + sp40, this->actor.world.pos.y + sp3C, + this->actor.world.pos.z + new_var, 100, 200, 255, 600); + + Player_PlaySfx(this, NA_SE_PL_ZORA_SPARK_BARRIER - SFX_FLAG); + Actor_SetPlayerImpact(play, PLAYER_IMPACT_ZORA_BARRIER, 2, 100.0f, &this->actor.world.pos); + } +} + +void func_8082F43C(PlayState* play, Player* this, PlayerFuncAC4 arg2) { + this->unk_AC4 = arg2; + this->unk_ACE = 0; + this->unk_AC8 = 0.0f; + func_8082E00C(this); +} + +#define GET_PLAYER_ANIM(group, type) ((PlayerAnimationHeader**)D_8085BE84)[group * PLAYER_ANIMTYPE_MAX + type] + +void func_8082F470(PlayState* play, Player* this, PlayerItemAction itemAction) { + PlayerAnimationHeader* curAnim = this->skelAnime.animation; + PlayerAnimationHeader*(*iter)[PLAYER_ANIMTYPE_MAX] = (void*)&D_8085BE84[0][this->modelAnimType]; + s32 i; + + this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000000); + + for (i = 0; i < PLAYER_ANIMGROUP_MAX; i++) { + if (curAnim == **iter) { + break; + } + iter++; + } + + func_8082F8BC(play, this, itemAction); + + if (i < PLAYER_ANIMGROUP_MAX) { + this->skelAnime.animation = GET_PLAYER_ANIM(i, this->modelAnimType); + } +} + +s8 sItemItemActions[] = { + PLAYER_IA_OCARINA, // ITEM_OCARINA, + PLAYER_IA_BOW, // ITEM_BOW, + PLAYER_IA_BOW_FIRE, // ITEM_ARROW_FIRE, + PLAYER_IA_BOW_ICE, // ITEM_ARROW_ICE, + PLAYER_IA_BOW_LIGHT, // ITEM_ARROW_LIGHT, + PLAYER_IA_PICTO_BOX, // ITEM_OCARINA_FAIRY, + PLAYER_IA_BOMB, // ITEM_BOMB, + PLAYER_IA_BOMBCHU, // ITEM_BOMBCHU, + PLAYER_IA_STICK, // ITEM_STICK, + PLAYER_IA_NUT, // ITEM_NUT, + PLAYER_IA_MAGIC_BEANS, // ITEM_MAGIC_BEANS, + PLAYER_IA_PICTO_BOX, // ITEM_SLINGSHOT, + PLAYER_IA_POWDER_KEG, // ITEM_POWDER_KEG, + PLAYER_IA_PICTO_BOX, // ITEM_PICTO_BOX, + PLAYER_IA_LENS, // ITEM_LENS, + PLAYER_IA_HOOKSHOT, // ITEM_HOOKSHOT, + PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_GREAT_FAIRY, + PLAYER_IA_PICTO_BOX, // ITEM_LONGSHOT, // OoT Leftover + PLAYER_IA_BOTTLE_EMPTY, // ITEM_BOTTLE, + PLAYER_IA_BOTTLE_POTION_RED, // ITEM_POTION_RED, + PLAYER_IA_BOTTLE_POTION_GREEN, // ITEM_POTION_GREEN, + PLAYER_IA_BOTTLE_POTION_BLUE, // ITEM_POTION_BLUE, + PLAYER_IA_BOTTLE_FAIRY, // ITEM_FAIRY, + PLAYER_IA_BOTTLE_DEKU_PRINCESS, // ITEM_DEKU_PRINCESS, + PLAYER_IA_BOTTLE_MILK, // ITEM_MILK_BOTTLE, + PLAYER_IA_BOTTLE_MILK_HALF, // ITEM_MILK_HALF, + PLAYER_IA_BOTTLE_FISH, // ITEM_FISH, + PLAYER_IA_BOTTLE_BUG, // ITEM_BUG, + PLAYER_IA_BOTTLE_BUG, // ITEM_BLUE_FIRE, // ! + PLAYER_IA_BOTTLE_POE, // ITEM_POE, + PLAYER_IA_BOTTLE_BIG_POE, // ITEM_BIG_POE, + PLAYER_IA_BOTTLE_SPRING_WATER, // ITEM_SPRING_WATER, + PLAYER_IA_BOTTLE_HOT_SPRING_WATER, // ITEM_HOT_SPRING_WATER, + PLAYER_IA_BOTTLE_ZORA_EGG, // ITEM_ZORA_EGG, + PLAYER_IA_BOTTLE_GOLD_DUST, // ITEM_GOLD_DUST, + PLAYER_IA_BOTTLE_MUSHROOM, // ITEM_MUSHROOM, + PLAYER_IA_BOTTLE_SEAHORSE, // ITEM_SEA_HORSE, + PLAYER_IA_BOTTLE_CHATEAU, // ITEM_CHATEAU, + PLAYER_IA_BOTTLE_HYLIAN_LOACH, // ITEM_HYLIAN_LOACH, + PLAYER_IA_BOTTLE_POE, // ITEM_OBABA_DRINK, // ! + PLAYER_IA_MOON_TEAR, // ITEM_MOON_TEAR, + PLAYER_IA_DEED_LAND, // ITEM_DEED_LAND, + PLAYER_IA_DEED_SWAMP, // ITEM_DEED_SWAMP, + PLAYER_IA_DEED_MOUNTAIN, // ITEM_DEED_MOUNTAIN, + PLAYER_IA_DEED_OCEAN, // ITEM_DEED_OCEAN, + PLAYER_IA_ROOM_KEY, // ITEM_ROOM_KEY, + PLAYER_IA_LETTER_MAMA, // ITEM_LETTER_MAMA, + PLAYER_IA_LETTER_TO_KAFEI, // ITEM_LETTER_TO_KAFEI, + PLAYER_IA_PENDANT_OF_MEMORIES, // ITEM_PENDANT_MEMORIES, + PLAYER_IA_38, // ITEM_TINGLE_MAP, // ! + PLAYER_IA_MASK_DEKU, // ITEM_MASK_DEKU, + PLAYER_IA_MASK_GORON, // ITEM_MASK_GORON, + PLAYER_IA_MASK_ZORA, // ITEM_MASK_ZORA, + PLAYER_IA_MASK_FIERCE_DEITY, // ITEM_MASK_FIERCE_DEITY, + PLAYER_IA_MASK_TRUTH, // ITEM_MASK_TRUTH, + PLAYER_IA_MASK_KAFEIS_MASK, // ITEM_MASK_KAFEIS_MASK, + PLAYER_IA_MASK_ALL_NIGHT, // ITEM_MASK_ALL_NIGHT, + PLAYER_IA_MASK_BUNNY, // ITEM_MASK_BUNNY, + PLAYER_IA_MASK_KEATON, // ITEM_MASK_KEATON, + PLAYER_IA_MASK_GARO, // ITEM_MASK_GARO, + PLAYER_IA_MASK_ROMANI, // ITEM_MASK_ROMANI, + PLAYER_IA_MASK_CIRCUS_LEADER, // ITEM_MASK_CIRCUS_LEADER, + PLAYER_IA_MASK_POSTMAN, // ITEM_MASK_POSTMAN, + PLAYER_IA_MASK_COUPLE, // ITEM_MASK_COUPLE, + PLAYER_IA_MASK_GREAT_FAIRY, // ITEM_MASK_GREAT_FAIRY, + PLAYER_IA_MASK_GIBDO, // ITEM_MASK_GIBDO, + PLAYER_IA_MASK_DON_GERO, // ITEM_MASK_DON_GERO, + PLAYER_IA_MASK_KAMARO, // ITEM_MASK_KAMARO, + PLAYER_IA_MASK_CAPTAIN, // ITEM_MASK_CAPTAIN, + PLAYER_IA_MASK_STONE, // ITEM_MASK_STONE, + PLAYER_IA_MASK_BREMEN, // ITEM_MASK_BREMEN, + PLAYER_IA_MASK_BLAST, // ITEM_MASK_BLAST, + PLAYER_IA_MASK_SCENTS, // ITEM_MASK_SCENTS, + PLAYER_IA_MASK_GIANT, // ITEM_MASK_GIANT, + PLAYER_IA_BOW_FIRE, // ITEM_BOW_ARROW_FIRE, + PLAYER_IA_BOW_ICE, // ITEM_BOW_ARROW_ICE, + PLAYER_IA_BOW_LIGHT, // ITEM_BOW_ARROW_LIGHT, + PLAYER_IA_SWORD_KOKIRI, // ITEM_SWORD_KOKIRI, + PLAYER_IA_SWORD_RAZOR, // ITEM_SWORD_RAZOR, + PLAYER_IA_SWORD_GILDED, // ITEM_SWORD_GILDED, + PLAYER_IA_SWORD_TWO_HANDED, // ITEM_SWORD_DEITY, +}; + +PlayerItemAction Player_ItemToItemAction(Player* this, ItemId item) { + if (item >= ITEM_FD) { + return PLAYER_IA_NONE; + } else if (item == ITEM_FC) { + return PLAYER_IA_LAST_USED; + } else if (item == ITEM_FISHING_ROD) { + return PLAYER_IA_FISHING_ROD; + } else if ((item == ITEM_SWORD_KOKIRI) && (this->transformation == PLAYER_FORM_ZORA)) { + return PLAYER_IA_ZORA_FINS; + } else { + return sItemItemActions[item]; + } +} + +void func_8082F594(PlayState* play, Player* this) { +} + +void func_8082F5A4(PlayState* play, Player* this) { + this->unk_B28 = 0; + this->unk_B0C = 1.0f; +} + +void func_8082F5C0(PlayState* play, Player* this) { + this->stateFlags1 |= PLAYER_STATE1_8; + + if (this->heldItemAction == PLAYER_IA_NUT) { + this->unk_B28 = -2; + } else { + this->unk_B28 = -1; + } + this->unk_ACC = 0; +} + +PlayerFuncAC4 D_8085C9F0[PLAYER_IA_MAX] = { + func_80848780, // PLAYER_IA_NONE + func_80848780, // PLAYER_IA_LAST_USED + func_80848780, // PLAYER_IA_FISHING_ROD + func_808487B8, // PLAYER_IA_SWORD_KOKIRI + func_808487B8, // PLAYER_IA_SWORD_RAZOR + func_808487B8, // PLAYER_IA_SWORD_GILDED + func_808487B8, // PLAYER_IA_SWORD_TWO_HANDED + func_80848780, // PLAYER_IA_STICK + func_80848780, // PLAYER_IA_ZORA_FINS + func_80848B6C, // PLAYER_IA_BOW + func_80848B6C, // PLAYER_IA_BOW_FIRE + func_80848B6C, // PLAYER_IA_BOW_ICE + func_80848B6C, // PLAYER_IA_BOW_LIGHT + func_80848B6C, // PLAYER_IA_HOOKSHOT + func_808490B4, // PLAYER_IA_BOMB + func_808490B4, // PLAYER_IA_POWDER_KEG + func_808490B4, // PLAYER_IA_BOMBCHU + func_808491B4, // PLAYER_IA_11 + func_80848B6C, // PLAYER_IA_NUT + func_80848780, // PLAYER_IA_PICTO_BOX + func_80848780, // PLAYER_IA_OCARINA + func_80848780, // PLAYER_IA_BOTTLE_EMPTY + func_80848780, // PLAYER_IA_BOTTLE_FISH + func_80848780, // PLAYER_IA_BOTTLE_SPRING_WATER + func_80848780, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + func_80848780, // PLAYER_IA_BOTTLE_ZORA_EGG + func_80848780, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + func_80848780, // PLAYER_IA_BOTTLE_GOLD_DUST + func_80848780, // PLAYER_IA_BOTTLE_1C + func_80848780, // PLAYER_IA_BOTTLE_SEA_HORSE + func_80848780, // PLAYER_IA_BOTTLE_MUSHROOM + func_80848780, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + func_80848780, // PLAYER_IA_BOTTLE_BUG + func_80848780, // PLAYER_IA_BOTTLE_POE + func_80848780, // PLAYER_IA_BOTTLE_BIG_POE + func_80848780, // PLAYER_IA_BOTTLE_POTION_RED + func_80848780, // PLAYER_IA_BOTTLE_POTION_BLUE + func_80848780, // PLAYER_IA_BOTTLE_POTION_GREEN + func_80848780, // PLAYER_IA_BOTTLE_MILK + func_80848780, // PLAYER_IA_BOTTLE_MILK_HALF + func_80848780, // PLAYER_IA_BOTTLE_CHATEAU + func_80848780, // PLAYER_IA_BOTTLE_FAIRY + func_80848780, // PLAYER_IA_MOON_TEAR + func_80848780, // PLAYER_IA_DEED_LAND + func_80848780, // PLAYER_IA_ROOM_KEY + func_80848780, // PLAYER_IA_LETTER_TO_KAFEI + func_80848780, // PLAYER_IA_MAGIC_BEANS + func_80848780, // PLAYER_IA_DEED_SWAMP + func_80848780, // PLAYER_IA_DEED_MOUNTAIN + func_80848780, // PLAYER_IA_DEED_OCEAN + func_80848780, // PLAYER_IA_32 + func_80848780, // PLAYER_IA_LETTER_MAMA + func_80848780, // PLAYER_IA_34 + func_80848780, // PLAYER_IA_35 + func_80848780, // PLAYER_IA_PENDANT_MEMORIES + func_80848780, // PLAYER_IA_37 + func_80848780, // PLAYER_IA_38 + func_80848780, // PLAYER_IA_39 + func_80848780, // PLAYER_IA_MASK_TRUTH + func_80848780, // PLAYER_IA_MASK_KAFEIS_MASK + func_80848780, // PLAYER_IA_MASK_ALL_NIGHT + func_80848780, // PLAYER_IA_MASK_BUNNY + func_80848780, // PLAYER_IA_MASK_KEATON + func_80848780, // PLAYER_IA_MASK_GARO + func_80848780, // PLAYER_IA_MASK_ROMANI + func_80848780, // PLAYER_IA_MASK_CIRCUS_LEADER + func_80848780, // PLAYER_IA_MASK_POSTMAN + func_80848780, // PLAYER_IA_MASK_COUPLE + func_80848780, // PLAYER_IA_MASK_GREAT_FAIRY + func_80848780, // PLAYER_IA_MASK_GIBDO + func_80848780, // PLAYER_IA_MASK_DON_GERO + func_80848780, // PLAYER_IA_MASK_KAMARO + func_80848780, // PLAYER_IA_MASK_CAPTAIN + func_80848780, // PLAYER_IA_MASK_STONE + func_80848780, // PLAYER_IA_MASK_BREMEN + func_80848780, // PLAYER_IA_MASK_BLAST + func_80848780, // PLAYER_IA_MASK_SCENTS + func_80848780, // PLAYER_IA_MASK_GIANT + func_80848780, // PLAYER_IA_MASK_FIERCE_DEITY + func_80848780, // PLAYER_IA_MASK_GORON + func_80848780, // PLAYER_IA_MASK_ZORA + func_80848780, // PLAYER_IA_MASK_DEKU + func_80848780, // PLAYER_IA_LENS +}; + +// sPlayerItemActionInits? +void (*D_8085CB3C[PLAYER_IA_MAX])(PlayState*, Player*) = { + func_8082F594, // PLAYER_IA_NONE + func_8082F594, // PLAYER_IA_LAST_USED + func_8082F594, // PLAYER_IA_FISHING_ROD + func_8082F594, // PLAYER_IA_SWORD_KOKIRI + func_8082F594, // PLAYER_IA_SWORD_RAZOR + func_8082F594, // PLAYER_IA_SWORD_GILDED + func_8082F594, // PLAYER_IA_SWORD_TWO_HANDED + func_8082F5A4, // PLAYER_IA_STICK + func_8082F8A0, // PLAYER_IA_ZORA_FINS + func_8082F5C0, // PLAYER_IA_BOW + func_8082F5C0, // PLAYER_IA_BOW_FIRE + func_8082F5C0, // PLAYER_IA_BOW_ICE + func_8082F5C0, // PLAYER_IA_BOW_LIGHT + func_8082F7F4, // PLAYER_IA_HOOKSHOT + Player_SpawnExplosive, // PLAYER_IA_BOMB + Player_SpawnExplosive, // PLAYER_IA_POWDER_KEG + Player_SpawnExplosive, // PLAYER_IA_BOMBCHU + func_8082F8A0, // PLAYER_IA_11 + func_8082F5C0, // PLAYER_IA_NUT + func_8082F594, // PLAYER_IA_PICTO_BOX + func_8082F594, // PLAYER_IA_OCARINA + func_8082F594, // PLAYER_IA_BOTTLE_EMPTY + func_8082F594, // PLAYER_IA_BOTTLE_FISH + func_8082F594, // PLAYER_IA_BOTTLE_SPRING_WATER + func_8082F594, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + func_8082F594, // PLAYER_IA_BOTTLE_ZORA_EGG + func_8082F594, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + func_8082F594, // PLAYER_IA_BOTTLE_GOLD_DUST + func_8082F594, // PLAYER_IA_BOTTLE_1C + func_8082F594, // PLAYER_IA_BOTTLE_SEA_HORSE + func_8082F594, // PLAYER_IA_BOTTLE_MUSHROOM + func_8082F594, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + func_8082F594, // PLAYER_IA_BOTTLE_BUG + func_8082F594, // PLAYER_IA_BOTTLE_POE + func_8082F594, // PLAYER_IA_BOTTLE_BIG_POE + func_8082F594, // PLAYER_IA_BOTTLE_POTION_RED + func_8082F594, // PLAYER_IA_BOTTLE_POTION_BLUE + func_8082F594, // PLAYER_IA_BOTTLE_POTION_GREEN + func_8082F594, // PLAYER_IA_BOTTLE_MILK + func_8082F594, // PLAYER_IA_BOTTLE_MILK_HALF + func_8082F594, // PLAYER_IA_BOTTLE_CHATEAU + func_8082F594, // PLAYER_IA_BOTTLE_FAIRY + func_8082F594, // PLAYER_IA_MOON_TEAR + func_8082F594, // PLAYER_IA_DEED_LAND + func_8082F594, // PLAYER_IA_ROOM_KEY + func_8082F594, // PLAYER_IA_LETTER_TO_KAFEI + func_8082F594, // PLAYER_IA_MAGIC_BEANS + func_8082F594, // PLAYER_IA_DEED_SWAMP + func_8082F594, // PLAYER_IA_DEED_MOUNTAIN + func_8082F594, // PLAYER_IA_DEED_OCEAN + func_8082F594, // PLAYER_IA_32 + func_8082F594, // PLAYER_IA_LETTER_MAMA + func_8082F594, // PLAYER_IA_34 + func_8082F594, // PLAYER_IA_35 + func_8082F594, // PLAYER_IA_PENDANT_MEMORIES + func_8082F594, // PLAYER_IA_37 + func_8082F594, // PLAYER_IA_38 + func_8082F594, // PLAYER_IA_39 + func_8082F594, // PLAYER_IA_MASK_TRUTH + func_8082F594, // PLAYER_IA_MASK_KAFEIS_MASK + func_8082F594, // PLAYER_IA_MASK_ALL_NIGHT + func_8082F594, // PLAYER_IA_MASK_BUNNY + func_8082F594, // PLAYER_IA_MASK_KEATON + func_8082F594, // PLAYER_IA_MASK_GARO + func_8082F594, // PLAYER_IA_MASK_ROMANI + func_8082F594, // PLAYER_IA_MASK_CIRCUS_LEADER + func_8082F594, // PLAYER_IA_MASK_POSTMAN + func_8082F594, // PLAYER_IA_MASK_COUPLE + func_8082F594, // PLAYER_IA_MASK_GREAT_FAIRY + func_8082F594, // PLAYER_IA_MASK_GIBDO + func_8082F594, // PLAYER_IA_MASK_DON_GERO + func_8082F594, // PLAYER_IA_MASK_KAMARO + func_8082F594, // PLAYER_IA_MASK_CAPTAIN + func_8082F594, // PLAYER_IA_MASK_STONE + func_8082F594, // PLAYER_IA_MASK_BREMEN + func_8082F594, // PLAYER_IA_MASK_BLAST + func_8082F594, // PLAYER_IA_MASK_SCENTS + func_8082F594, // PLAYER_IA_MASK_GIANT + func_8082F594, // PLAYER_IA_MASK_FIERCE_DEITY + func_8082F594, // PLAYER_IA_MASK_GORON + func_8082F594, // PLAYER_IA_MASK_ZORA + func_8082F594, // PLAYER_IA_MASK_DEKU + func_8082F594, // PLAYER_IA_LENS +}; + +void func_8082F5FC(Player* this, Actor* actor) { + this->heldActor = actor; + this->interactRangeActor = actor; + this->getItemId = GI_NONE; + this->leftHandWorld.rot.y = actor->shape.rot.y - this->actor.shape.rot.y; + this->stateFlags1 |= PLAYER_STATE1_800; +} + +struct_8085CC88 D_8085CC88[] = { + { &gPlayerAnim_link_normal_free2free, 12 }, + { &gPlayerAnim_link_normal_normal2fighter, 6 }, + { &gPlayerAnim_link_hammer_normal2long, 8 }, + { &gPlayerAnim_link_normal_normal2free, 8 }, + { &gPlayerAnim_link_fighter_fighter2long, 8 }, + { &gPlayerAnim_link_normal_fighter2free, 10 }, + { &gPlayerAnim_link_hammer_long2free, 7 }, + { &gPlayerAnim_link_hammer_long2long, 11 }, + { &gPlayerAnim_link_normal_free2free, 12 }, + { &gPlayerAnim_link_normal_normal2bom, 4 }, + { &gPlayerAnim_link_normal_long2bom, 4 }, + { &gPlayerAnim_link_normal_free2bom, 4 }, + { &gPlayerAnim_link_anchor_anchor2fighter, 5 }, + { &gPlayerAnim_link_normal_free2freeB, 13 }, + { &gPlayerAnim_pz_bladeon, 4 }, +}; + +s8 D_8085CD00[PLAYER_ANIMTYPE_MAX][PLAYER_ANIMTYPE_MAX] = { + { 8, -5, -3, -6, 8, 0xB }, { 5, 0, -1, 4, 5, 9 }, { 3, 1, 0, 2, 3, 9 }, + { 6, -4, -2, 7, 6, 0xA }, { 8, -5, -3, -6, 8, 0xB }, { 8, -5, -3, -6, 8, 0xB }, +}; + +ExplosiveInfo sPlayerExplosiveInfo[PLAYER_EXPLOSIVE_MAX] = { + { ITEM_BOMB, ACTOR_EN_BOM }, // PLAYER_EXPLOSIVE_BOMB + { ITEM_POWDER_KEG, ACTOR_EN_BOM }, // PLAYER_EXPLOSIVE_POWDER_KEG + { ITEM_BOMBCHU, ACTOR_EN_BOM_CHU }, // PLAYER_EXPLOSIVE_BOMBCHU +}; + +void Player_SpawnExplosive(PlayState* play, Player* this) { + PlayerExplosive explosiveType; + ExplosiveInfo* explosiveInfo; + Actor* explosiveActor; + + if (this->stateFlags1 & PLAYER_STATE1_800) { + func_8082DE14(play, this); + return; + } + + explosiveType = Player_GetExplosiveHeld(this); + explosiveInfo = &sPlayerExplosiveInfo[explosiveType]; + if ((explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) && (gSaveContext.powderKegTimer == 0)) { + gSaveContext.powderKegTimer = 200; + } + + explosiveActor = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, explosiveInfo->actorId, + this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, + (explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) ? BOMB_EXPLOSIVE_TYPE_POWDER_KEG + : BOMB_EXPLOSIVE_TYPE_BOMB, + this->actor.shape.rot.y, 0, BOMB_TYPE_BODY); + if (explosiveActor != NULL) { + if ((explosiveType == PLAYER_EXPLOSIVE_BOMB) && (play->unk_1887E != 0)) { + play->unk_1887E--; + if (play->unk_1887E == 0) { + play->unk_1887E = -1; + } + } else if ((explosiveType == PLAYER_EXPLOSIVE_BOMBCHU) && (play->unk_1887D != 0)) { + play->unk_1887D--; + if (play->unk_1887D == 0) { + play->unk_1887D = -1; + } + } else { + Inventory_ChangeAmmo(explosiveInfo->itemId, -1); + } + func_8082F5FC(this, explosiveActor); + } else if (explosiveType == PLAYER_EXPLOSIVE_POWDER_KEG) { + gSaveContext.powderKegTimer = 0; + } +} + +// SpawnHookshot? +void func_8082F7F4(PlayState* play, Player* this) { + ArmsHook* armsHook; + + this->stateFlags1 |= PLAYER_STATE1_8; + this->unk_B28 = -3; + this->unk_B48 = 0.0f; + + this->heldActor = + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_ARMS_HOOK, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0); + + if (this->heldActor == NULL) { + func_80831990(play, this, ITEM_NONE); + return; + } + armsHook = (ArmsHook*)this->heldActor; + armsHook->actor.objBankIndex = this->actor.objBankIndex; + armsHook->unk_208 = this->transformation; +} + +void func_8082F8A0(PlayState* play, Player* this) { + this->stateFlags1 |= PLAYER_STATE1_1000000; +} + +void func_8082F8BC(PlayState* play, Player* this, PlayerItemAction itemAction) { + this->itemAction = this->heldItemAction = itemAction; + this->modelGroup = this->nextModelGroup; + + this->stateFlags1 &= ~(PLAYER_STATE1_1000000 | PLAYER_STATE1_8); + + this->unk_B08 = 0.0f; + this->unk_B0C = 0.0f; + this->unk_B28 = 0; + + D_8085CB3C[itemAction](play, this); + Player_SetModelGroup(this, this->modelGroup); +} + +// AttackAnimInfo sMeleeAttackAnimInfo +AttackAnimInfo sMeleeAttackAnimInfo[PLAYER_MWA_MAX] = { + // PLAYER_MWA_FORWARD_SLASH_1H + { &gPlayerAnim_link_fighter_normal_kiru, &gPlayerAnim_link_fighter_normal_kiru_end, + &gPlayerAnim_link_fighter_normal_kiru_endR, 1, 4 }, + // PLAYER_MWA_FORWARD_SLASH_2H + { &gPlayerAnim_link_fighter_Lnormal_kiru, &gPlayerAnim_link_fighter_Lnormal_kiru_end, + &gPlayerAnim_link_anchor_Lnormal_kiru_endR, 1, 4 }, + // PLAYER_MWA_FORWARD_COMBO_1H + { &gPlayerAnim_link_fighter_normal_kiru_finsh, &gPlayerAnim_link_fighter_normal_kiru_finsh_end, + &gPlayerAnim_link_anchor_normal_kiru_finsh_endR, 0, 5 }, + // PLAYER_MWA_FORWARD_COMBO_2H + { &gPlayerAnim_link_fighter_Lnormal_kiru_finsh, &gPlayerAnim_link_fighter_Lnormal_kiru_finsh_end, + &gPlayerAnim_link_anchor_Lnormal_kiru_finsh_endR, 1, 7 }, + // PLAYER_MWA_RIGHT_SLASH_1H + { &gPlayerAnim_link_fighter_Lside_kiru, &gPlayerAnim_link_fighter_Lside_kiru_end, + &gPlayerAnim_link_anchor_Lside_kiru_endR, 1, 4 }, + // PLAYER_MWA_RIGHT_SLASH_2H + { &gPlayerAnim_link_fighter_LLside_kiru, &gPlayerAnim_link_fighter_LLside_kiru_end, + &gPlayerAnim_link_anchor_LLside_kiru_endL, 0, 5 }, + // PLAYER_MWA_RIGHT_COMBO_1H + { &gPlayerAnim_link_fighter_Lside_kiru_finsh, &gPlayerAnim_link_fighter_Lside_kiru_finsh_end, + &gPlayerAnim_link_anchor_Lside_kiru_finsh_endR, 2, 8 }, + // PLAYER_MWA_RIGHT_COMBO_2H + { &gPlayerAnim_link_fighter_LLside_kiru_finsh, &gPlayerAnim_link_fighter_LLside_kiru_finsh_end, + &gPlayerAnim_link_anchor_LLside_kiru_finsh_endR, 3, 8 }, + // PLAYER_MWA_LEFT_SLASH_1H + { &gPlayerAnim_link_fighter_Rside_kiru, &gPlayerAnim_link_fighter_Rside_kiru_end, + &gPlayerAnim_link_anchor_Rside_kiru_endR, 0, 4 }, + // PLAYER_MWA_LEFT_SLASH_2H + { &gPlayerAnim_link_fighter_LRside_kiru, &gPlayerAnim_link_fighter_LRside_kiru_end, + &gPlayerAnim_link_anchor_LRside_kiru_endR, 0, 5 }, + // PLAYER_MWA_LEFT_COMBO_1H + { &gPlayerAnim_link_fighter_Rside_kiru_finsh, &gPlayerAnim_link_fighter_Rside_kiru_finsh_end, + &gPlayerAnim_link_anchor_Rside_kiru_finsh_endR, 0, 6 }, + // PLAYER_MWA_LEFT_COMBO_2H + { &gPlayerAnim_link_fighter_LRside_kiru_finsh, &gPlayerAnim_link_fighter_LRside_kiru_finsh_end, + &gPlayerAnim_link_anchor_LRside_kiru_finsh_endL, 1, 5 }, + // PLAYER_MWA_STAB_1H + { &gPlayerAnim_link_fighter_pierce_kiru, &gPlayerAnim_link_fighter_pierce_kiru_end, + &gPlayerAnim_link_anchor_pierce_kiru_endR, 0, 3 }, + // PLAYER_MWA_STAB_2H + { &gPlayerAnim_link_fighter_Lpierce_kiru, &gPlayerAnim_link_fighter_Lpierce_kiru_end, + &gPlayerAnim_link_anchor_Lpierce_kiru_endL, 0, 3 }, + // PLAYER_MWA_STAB_COMBO_1H + { &gPlayerAnim_link_fighter_pierce_kiru_finsh, &gPlayerAnim_link_fighter_pierce_kiru_finsh_end, + &gPlayerAnim_link_anchor_pierce_kiru_finsh_endR, 1, 9 }, + // PLAYER_MWA_STAB_COMBO_2H + { &gPlayerAnim_link_fighter_Lpierce_kiru_finsh, &gPlayerAnim_link_fighter_Lpierce_kiru_finsh_end, + &gPlayerAnim_link_anchor_Lpierce_kiru_finsh_endR, 1, 8 }, + // PLAYER_MWA_FLIPSLASH_START + { &gPlayerAnim_link_fighter_jump_rollkiru, &gPlayerAnim_link_fighter_jump_kiru_finsh, + &gPlayerAnim_link_fighter_jump_kiru_finsh, 7, 99 }, + // PLAYER_MWA_JUMPSLASH_START + { &gPlayerAnim_link_fighter_Lpower_jump_kiru, &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, + &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, 7, 99 }, + // PLAYER_MWA_ZORA_JUMPKICK_START + { &gPlayerAnim_pz_jumpAT, &gPlayerAnim_pz_jumpATend, &gPlayerAnim_pz_jumpATend, 8, 99 }, + // PLAYER_MWA_FLIPSLASH_FINISH + { &gPlayerAnim_link_fighter_jump_kiru_finsh, &gPlayerAnim_link_fighter_jump_kiru_finsh_end, + &gPlayerAnim_link_fighter_jump_kiru_finsh_end, 1, 2 }, + // PLAYER_MWA_JUMPSLASH_FINISH + { &gPlayerAnim_link_fighter_Lpower_jump_kiru_hit, &gPlayerAnim_link_fighter_Lpower_jump_kiru_end, + &gPlayerAnim_link_fighter_Lpower_jump_kiru_end, 1, 2 }, + // PLAYER_MWA_ZORA_JUMPKICK_FINISH + { &gPlayerAnim_pz_jumpATend, &gPlayerAnim_pz_wait, &gPlayerAnim_link_normal_waitR_free, 1, 2 }, + // PLAYER_MWA_BACKSLASH_RIGHT + { &gPlayerAnim_link_fighter_turn_kiruR, &gPlayerAnim_link_fighter_turn_kiruR_end, + &gPlayerAnim_link_fighter_turn_kiruR_end, 1, 5 }, + // PLAYER_MWA_BACKSLASH_LEFT + { &gPlayerAnim_link_fighter_turn_kiruL, &gPlayerAnim_link_fighter_turn_kiruL_end, + &gPlayerAnim_link_fighter_turn_kiruL_end, 1, 4 }, + // PLAYER_MWA_GORON_PUNCH_LEFT + { &gPlayerAnim_pg_punchA, &gPlayerAnim_pg_punchAend, &gPlayerAnim_pg_punchAendR, 6, 8 }, + // PLAYER_MWA_GORON_PUNCH_RIGHT + { &gPlayerAnim_pg_punchB, &gPlayerAnim_pg_punchBend, &gPlayerAnim_pg_punchBendR, 12, 18 }, + // PLAYER_MWA_GORON_PUNCH_BUTT + { &gPlayerAnim_pg_punchC, &gPlayerAnim_pg_punchCend, &gPlayerAnim_pg_punchCendR, 8, 14 }, + // PLAYER_MWA_ZORA_PUNCH_LEFT + { &gPlayerAnim_pz_attackA, &gPlayerAnim_pz_attackAend, &gPlayerAnim_pz_attackAendR, 2, 5 }, + // PLAYER_MWA_ZORA_PUNCH_COMBO + { &gPlayerAnim_pz_attackB, &gPlayerAnim_pz_attackBend, &gPlayerAnim_pz_attackBendR, 3, 8 }, + // PLAYER_MWA_ZORA_PUNCH_KICK + { &gPlayerAnim_pz_attackC, &gPlayerAnim_pz_attackCend, &gPlayerAnim_pz_attackCendR, 3, 10 }, + // PLAYER_MWA_SPIN_ATTACK_1H + { &gPlayerAnim_link_fighter_rolling_kiru, &gPlayerAnim_link_fighter_rolling_kiru_end, + &gPlayerAnim_link_anchor_rolling_kiru_endR, 0, 12 }, + // PLAYER_MWA_SPIN_ATTACK_2H + { &gPlayerAnim_link_fighter_Lrolling_kiru, &gPlayerAnim_link_fighter_Lrolling_kiru_end, + &gPlayerAnim_link_anchor_Lrolling_kiru_endR, 0, 15 }, + // PLAYER_MWA_BIG_SPIN_1H + { &gPlayerAnim_link_fighter_Wrolling_kiru, &gPlayerAnim_link_fighter_Wrolling_kiru_end, + &gPlayerAnim_link_anchor_rolling_kiru_endR, 0, 16 }, + // PLAYER_MWA_BIG_SPIN_2H + { &gPlayerAnim_link_fighter_Wrolling_kiru, &gPlayerAnim_link_fighter_Wrolling_kiru_end, + &gPlayerAnim_link_anchor_Lrolling_kiru_endR, 0, 16 }, +}; + +PlayerAnimationHeader* D_8085CF50[] = { + &gPlayerAnim_link_fighter_power_kiru_start, + &gPlayerAnim_link_fighter_Lpower_kiru_start, +}; +PlayerAnimationHeader* D_8085CF58[] = { + &gPlayerAnim_link_fighter_power_kiru_startL, + &gPlayerAnim_link_fighter_Lpower_kiru_start, +}; +PlayerAnimationHeader* D_8085CF60[] = { + &gPlayerAnim_link_fighter_power_kiru_wait, + &gPlayerAnim_link_fighter_Lpower_kiru_wait, +}; +PlayerAnimationHeader* D_8085CF68[] = { + &gPlayerAnim_link_fighter_power_kiru_wait_end, + &gPlayerAnim_link_fighter_Lpower_kiru_wait_end, +}; +PlayerAnimationHeader* D_8085CF70[] = { + &gPlayerAnim_link_fighter_power_kiru_walk, + &gPlayerAnim_link_fighter_Lpower_kiru_walk, +}; +PlayerAnimationHeader* D_8085CF78[] = { + &gPlayerAnim_link_fighter_power_kiru_side_walk, + &gPlayerAnim_link_fighter_Lpower_kiru_side_walk, +}; + +u8 D_8085CF80[] = { + PLAYER_MWA_SPIN_ATTACK_1H, + PLAYER_MWA_SPIN_ATTACK_2H, +}; +u8 D_8085CF84[] = { + PLAYER_MWA_BIG_SPIN_1H, + PLAYER_MWA_BIG_SPIN_2H, +}; + +// sBlureColors +BlureColors D_8085CF88[] = { + { { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 } }, + { { 165, 185, 255, 185 }, { 205, 225, 255, 50 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 } }, +}; + +void Player_OverrideBlureColors(PlayState* play, Player* this, s32 colorType, s32 elemDuration) { + EffectBlure* blure0 = Effect_GetByIndex(this->meleeWeaponEffectIndex[0]); + EffectBlure* blure1 = Effect_GetByIndex(this->meleeWeaponEffectIndex[1]); + s32 i; + + for (i = 0; i < 4; i++) { + blure0->p1StartColor[i] = D_8085CF88[colorType].p1StartColor[i]; + blure0->p2StartColor[i] = D_8085CF88[colorType].p2StartColor[i]; + blure0->p1EndColor[i] = D_8085CF88[colorType].p1EndColor[i]; + blure0->p2EndColor[i] = D_8085CF88[colorType].p2EndColor[i]; + blure1->p1StartColor[i] = D_8085CF88[colorType].p1StartColor[i]; + blure1->p2StartColor[i] = D_8085CF88[colorType].p2StartColor[i]; + blure1->p1EndColor[i] = D_8085CF88[colorType].p1EndColor[i]; + blure1->p2EndColor[i] = D_8085CF88[colorType].p2EndColor[i]; + } + + if (this->transformation == PLAYER_FORM_DEKU) { + elemDuration = 8; + } + blure0->elemDuration = elemDuration; + blure1->elemDuration = elemDuration; +} + +void func_8082FA5C(PlayState* play, Player* this, PlayerMeleeWeaponState meleeWeaponState) { + u16 voiceSfxId; + u16 itemSfxId; + + if (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) { + voiceSfxId = NA_SE_VO_LI_SWORD_N; + if (this->transformation == PLAYER_FORM_GORON) { + itemSfxId = NA_SE_IT_GORON_PUNCH_SWING; + } else { + itemSfxId = NA_SE_NONE; + if (this->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) { + voiceSfxId = NA_SE_VO_LI_SWORD_L; + } else if (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) { + itemSfxId = NA_SE_IT_GORON_PUNCH_SWING; + } else { + itemSfxId = NA_SE_IT_SWORD_SWING_HARD; + if (this->unk_ADD >= 3) { + voiceSfxId = NA_SE_VO_LI_SWORD_L; + } else { + itemSfxId = (this->heldItemAction == PLAYER_IA_SWORD_TWO_HANDED) ? NA_SE_IT_HAMMER_SWING + : NA_SE_IT_SWORD_SWING; + } + } + } + + if (itemSfxId != NA_SE_NONE) { + func_8082E1F0(this, itemSfxId); + } + + if (!((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_START) && + (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH))) { + Player_AnimSfx_PlayVoice(this, voiceSfxId); + } + + Player_OverrideBlureColors(play, this, 0, 4); + } + + this->meleeWeaponState = meleeWeaponState; +} + +s32 func_8082FB68(Player* this) { + if ((this->targetedActor != NULL) && CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + this->stateFlags3 |= PLAYER_STATE3_80000000; + return true; + } + + if (this->stateFlags3 & PLAYER_STATE3_80000000) { + this->stateFlags3 &= ~PLAYER_STATE3_80000000; + if (this->linearVelocity == 0.0f) { + this->currentYaw = this->actor.shape.rot.y; + } + } + + return false; +} + +s32 func_8082FBE8(Player* this) { + return func_80123420(this) || func_80123434(this); +} + +s32 func_8082FC24(Player* this) { + return func_8082FB68(this) || func_80123434(this); +} + +void func_8082FC60(Player* this) { + this->unk_B44 = 0.0f; + this->unk_B40 = 0.0f; +} + +s32 func_8082FC78(Player* this, ItemId item) { + if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->itemAction)) { + return true; + } else { + return false; + } +} + +s32 func_8082FCC4(Player* this, ItemId item, PlayerItemAction itemAction) { + if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == itemAction)) { + return true; + } else { + return false; + } +} + +EquipSlot func_8082FD0C(Player* this, PlayerItemAction itemAction) { + s32 btn; + + for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) { + if (func_8082FCC4(this, GET_CUR_FORM_BTN_ITEM(btn), itemAction)) { + return btn; + } + } + + return EQUIP_SLOT_NONE; +} + +u16 D_8085CFA8[] = { + BTN_B, + BTN_CLEFT, + BTN_CDOWN, + BTN_CRIGHT, +}; + +// Return currently-pressed button, in order of priority B, CLEFT, CDOWN, CRIGHT. +EquipSlot func_8082FDC4(void) { + EquipSlot i; + + for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, D_8085CFA8[i])) { + break; + } + } + + return i; +} + +void func_8082FE0C(Player* this, PlayState* play) { + if (this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000)) { + return; + } + if (this->stateFlags2 & PLAYER_STATE2_2000000) { + return; + } + if (this->stateFlags3 & PLAYER_STATE3_20000000) { + return; + } + if (func_801240DC(this)) { + return; + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + if (this->currentMask != PLAYER_MASK_NONE) { + PlayerItemAction maskItemAction = GET_IA_FROM_MASK(this->currentMask); + EquipSlot btn = func_8082FD0C(this, maskItemAction); + + if (btn <= EQUIP_SLOT_NONE) { + s32 maskIdMinusOne = + GET_MASK_FROM_IA(Player_ItemToItemAction(this, GET_CUR_FORM_BTN_ITEM(this->unk_154))) - 1; + + if ((maskIdMinusOne < PLAYER_MASK_TRUTH - 1) || (maskIdMinusOne >= PLAYER_MASK_MAX - 1)) { + maskIdMinusOne = this->currentMask - 1; + } + func_80831990(play, this, Player_MaskIdToItemId(maskIdMinusOne)); + return; + } + + if ((this->currentMask == PLAYER_MASK_GIANT) && (gSaveContext.save.saveInfo.playerData.magic == 0)) { + func_80838A20(play, this); + } + + this->unk_154 = btn; + } + } + + if (((this->actor.id == ACTOR_PLAYER) && (this->itemAction >= PLAYER_IA_FISHING_ROD)) && + !(((Player_GetHeldBButtonSword(this) == PLAYER_B_SWORD_NONE) || (gSaveContext.jinxTimer == 0)) && + (func_8082FC78(this, (IREG(1) != 0) ? ITEM_FISHING_ROD : Inventory_GetBtnBItem(play)) || + func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_LEFT)) || func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_DOWN)) || + func_8082FC78(this, C_BTN_ITEM(EQUIP_SLOT_C_RIGHT))))) { + func_80831990(play, this, ITEM_NONE); + } else { + s32 pad; + ItemId item; + EquipSlot i = func_8082FDC4(); + + i = ((i >= EQUIP_SLOT_A) && (this->transformation == PLAYER_FORM_FIERCE_DEITY) && + (this->heldItemAction != PLAYER_IA_SWORD_TWO_HANDED)) + ? EQUIP_SLOT_B + : i; + + item = func_8012364C(play, this, i); + if (item >= ITEM_FD) { + for (i = 0; i < ARRAY_COUNT(D_8085CFA8); i++) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, D_8085CFA8[i])) { + break; + } + } + + item = func_8012364C(play, this, i); + if ((item < ITEM_FD) && (Player_ItemToItemAction(this, item) == this->heldItemAction)) { + D_80862B4C = 1; + } + } else if (item == ITEM_F0) { + if (this->blastMaskTimer == 0) { + EnBom* bomb = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.focus.pos.x, + this->actor.focus.pos.y, this->actor.focus.pos.z, + BOMB_EXPLOSIVE_TYPE_BOMB, 0, 0, BOMB_TYPE_BODY); + + if (bomb != NULL) { + bomb->timer = 0; + this->blastMaskTimer = 310; + } + } + } else if (item == ITEM_F1) { + func_80839978(play, this); + } else if (item == ITEM_F2) { + func_80839A10(play, this); + } else if ((Player_BButtonSwordFromIA(this, Player_ItemToItemAction(this, item)) != PLAYER_B_SWORD_NONE) && + (gSaveContext.jinxTimer != 0)) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + Message_StartTextbox(play, 0xF7, NULL); + } + } else { + this->heldItemButton = i; + func_80831990(play, this, item); + } + } +} + +void func_808302CC(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + s32 pad[3]; + u8 nextModelAnimType; + s32 var_v1; + s8 itemAction = Player_ItemToItemAction(this, this->heldItemId); + s32 pad3; + f32 startFrame; + f32 endFrame; + f32 frameSpeed; + + func_8082F43C(play, this, func_80848808); + + nextModelAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; + var_v1 = D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextModelAnimType]; + + if ((itemAction == PLAYER_IA_ZORA_FINS) || (this->heldItemAction == PLAYER_IA_ZORA_FINS)) { + var_v1 = (itemAction == PLAYER_IA_NONE) ? -14 : 14; + } else if ((itemAction == PLAYER_IA_BOTTLE_EMPTY) || (itemAction == PLAYER_IA_11) || + ((itemAction == PLAYER_IA_NONE) && + ((this->heldItemAction == PLAYER_IA_BOTTLE_EMPTY) || (this->heldItemAction == PLAYER_IA_11)))) { + var_v1 = (itemAction == PLAYER_IA_NONE) ? -13 : 13; + } + + this->unk_14E = ABS_ALT(var_v1); + anim = D_8085CC88[this->unk_14E].anim; + if ((anim == &gPlayerAnim_link_normal_fighter2free) && (this->currentShield == PLAYER_SHIELD_NONE)) { + anim = &gPlayerAnim_link_normal_free2fighter_free; + } + + endFrame = Animation_GetLastFrame(anim); + + if (var_v1 >= 0) { + frameSpeed = 1.2f; + startFrame = 0.0f; + } else { + frameSpeed = -1.2f; + startFrame = endFrame; + endFrame = 0.0f; + } + + if (itemAction != PLAYER_IA_NONE) { + frameSpeed *= 2.0f; + } + + PlayerAnimation_Change(play, &this->unk_284, anim, frameSpeed, startFrame, endFrame, ANIMMODE_ONCE, 0.0f); + this->stateFlags3 &= ~PLAYER_STATE3_40000000; +} + +void func_808304BC(Player* this, PlayState* play) { + if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags3 & PLAYER_STATE3_40000000)) { + if ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_400000)) { + if ((gSaveContext.save.saveInfo.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE)) { + if ((this->csMode == PLAYER_CSMODE_0) && (play->unk_1887C == 0) && (play->activeCamId == CAM_ID_MAIN)) { + if (!func_8082DA90(play) && (gSaveContext.timerStates[TIMER_ID_MINIGAME_2] != TIMER_STATE_STOP)) { + func_8082FE0C(this, play); + } + } + } + } + } + + if (this->stateFlags3 & PLAYER_STATE3_40000000) { + func_808302CC(this, play); + } +} + +// EN_ARROW ammo related? +s32 func_808305BC(PlayState* play, Player* this, ItemId* item, ArrowType* typeParam) { + if (this->heldItemAction == PLAYER_IA_NUT) { + *item = ITEM_NUT; + *typeParam = (this->transformation == PLAYER_FORM_DEKU) ? ARROW_TYPE_DEKU_BUBBLE : ARROW_TYPE_SLINGSHOT; + } else { + *item = ITEM_BOW; + *typeParam = (this->stateFlags1 & PLAYER_STATE1_800000) + ? ARROW_TYPE_NORMAL_HORSE + : (this->heldItemAction - PLAYER_IA_BOW + ARROW_TYPE_NORMAL); + } + + if (this->transformation == PLAYER_FORM_DEKU) { + return ((gSaveContext.save.saveInfo.playerData.magic >= 2) || + (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) && (play->sceneId == SCENE_BOWLING))) + ? 1 + : 0; + } + if (this->stateFlags3 & PLAYER_STATE3_400) { + return 1; + } + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + return play->interfaceCtx.minigameAmmo; + } + if (play->unk_1887C != 0) { + return play->unk_1887C; + } + + return AMMO(*item); +} + +u16 D_8085CFB0[] = { + NA_SE_PL_BOW_DRAW, + NA_SE_NONE, + NA_SE_IT_HOOKSHOT_READY, +}; + +u8 sMagicArrowCosts[] = { + 4, // ARROW_MAGIC_FIRE + 4, // ARROW_MAGIC_ICE + 8, // ARROW_MAGIC_LIGHT + 2, // ARROW_MAGIC_DEKU_BUBBLE +}; + +// Draw bow or hookshot / first person items? +s32 func_808306F8(Player* this, PlayState* play) { + if ((this->heldItemAction >= PLAYER_IA_BOW_FIRE) && (this->heldItemAction <= PLAYER_IA_BOW_LIGHT) && + (gSaveContext.magicState != MAGIC_STATE_IDLE)) { + play_sound(NA_SE_SY_ERROR); + } else { + func_8082F43C(play, this, func_80848BF4); + + this->stateFlags3 |= PLAYER_STATE3_40; + this->unk_ACC = 14; + + if (this->unk_B28 >= 0) { + s32 var_v1 = ABS_ALT(this->unk_B28); + ItemId item; + ArrowType arrowType; + ArrowMagic magicArrowType; + + if (var_v1 != 2) { + Player_PlaySfx(this, D_8085CFB0[var_v1 - 1]); + } + + if (!Player_IsHoldingHookshot(this) && (func_808305BC(play, this, &item, &arrowType) > 0)) { + if (this->unk_B28 >= 0) { + magicArrowType = ARROW_GET_MAGIC_FROM_TYPE(arrowType); + + if ((ARROW_GET_MAGIC_FROM_TYPE(arrowType) >= ARROW_MAGIC_FIRE) && + (ARROW_GET_MAGIC_FROM_TYPE(arrowType) <= ARROW_MAGIC_LIGHT)) { + if (((void)0, gSaveContext.save.saveInfo.playerData.magic) < sMagicArrowCosts[magicArrowType]) { + arrowType = ARROW_TYPE_NORMAL; + magicArrowType = ARROW_MAGIC_INVALID; + } + } else if ((arrowType == ARROW_TYPE_DEKU_BUBBLE) && + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) || (play->sceneId != SCENE_BOWLING))) { + magicArrowType = ARROW_MAGIC_DEKU_BUBBLE; + } else { + magicArrowType = ARROW_MAGIC_INVALID; + } + + this->heldActor = Actor_SpawnAsChild( + &play->actorCtx, &this->actor, play, ACTOR_EN_ARROW, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, arrowType); + + if ((this->heldActor != NULL) && (magicArrowType > ARROW_MAGIC_INVALID)) { + Magic_Consume(play, sMagicArrowCosts[magicArrowType], MAGIC_CONSUME_NOW); + } + } + } + } + + return true; + } + + return false; +} + +// Take out / put away sounds? +void func_808308DC(PlayState* play, Player* this) { + s32 isGoronOrDeku = (this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU); + + if ((this->heldItemAction != PLAYER_IA_NONE) && !isGoronOrDeku) { + if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) { + func_8082E1F0(this, NA_SE_IT_SWORD_PUTAWAY); + } else { + func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS); + } + } + + func_80831990(play, this, this->heldItemId); + + if (!isGoronOrDeku) { + if (Player_SwordFromIA(this, this->heldItemAction) > PLAYER_SWORD_NONE) { + func_8082E1F0(this, NA_SE_IT_SWORD_PICKOUT); + } else if (this->heldItemAction != PLAYER_IA_NONE) { + func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS); + } + } +} + +void func_808309CC(PlayState* play, Player* this) { + if (func_80848808 == this->unk_AC4) { + func_808308DC(play, this); + } + + func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + this->unk_ACC = 0; + this->unk_AA4 = 0; + func_8082DCA0(play, this); + this->stateFlags3 &= ~PLAYER_STATE3_40000000; +} + +PlayerAnimationHeader* D_8085CFBC[2] = { + &gPlayerAnim_link_anchor_waitR2defense, + &gPlayerAnim_link_anchor_waitR2defense_long, +}; +PlayerAnimationHeader* D_8085CFC4[2] = { + &gPlayerAnim_link_anchor_waitL2defense, + &gPlayerAnim_link_anchor_waitL2defense_long, +}; +PlayerAnimationHeader* D_8085CFCC[2] = { + &gPlayerAnim_link_anchor_defense_hit, + &gPlayerAnim_link_anchor_defense_long_hitL, +}; +PlayerAnimationHeader* D_8085CFD4[2] = { + &gPlayerAnim_link_anchor_defense_hit, + &gPlayerAnim_link_anchor_defense_long_hitR, +}; +PlayerAnimationHeader* D_8085CFDC[2] = { + &gPlayerAnim_link_normal_defense_hit, + &gPlayerAnim_link_fighter_defense_long_hit, +}; + +PlayerAnimationHeader* func_80830A58(PlayState* play, Player* this) { + func_8082F43C(play, this, func_8084894C); + func_8082DCA0(play, this); + + if (this->unk_B40 < 0.5f) { + return D_8085CFBC[Player_IsHoldingTwoHandedWeapon(this)]; + } else { + return D_8085CFC4[Player_IsHoldingTwoHandedWeapon(this)]; + } +} + +void func_80830AE8(Player* this) { + s32 sfxId = (this->transformation == PLAYER_FORM_GORON) + ? NA_SE_PL_GORON_SQUAT + : ((this->transformation == PLAYER_FORM_DEKU) ? NA_SE_PL_CHANGE_ARMS : NA_SE_IT_SHIELD_SWING); + + Player_PlaySfx(this, sfxId); +} + +void func_80830B38(Player* this) { + s32 sfxId = (this->transformation == PLAYER_FORM_GORON) + ? NA_SE_PL_BALL_TO_GORON + : ((this->transformation == PLAYER_FORM_DEKU) ? NA_SE_PL_TAKE_OUT_SHIELD : NA_SE_IT_SHIELD_REMOVE); + + Player_PlaySfx(this, sfxId); +} + +s32 func_80830B88(PlayState* play, Player* this) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_400000 | PLAYER_STATE1_800000 | PLAYER_STATE1_20000000))) { + if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || ((this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if ((play->unk_1887C == 0) && (this->heldItemAction == this->itemAction)) { + if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) || + (!Player_IsGoronOrDeku(this) && + ((((this->transformation == PLAYER_FORM_ZORA)) && + !(this->stateFlags1 & PLAYER_STATE1_2000000)) || + ((this->transformation == PLAYER_FORM_HUMAN) && + (this->currentShield != PLAYER_SHIELD_NONE))) && + func_8082FBE8(this))) { + PlayerAnimationHeader* anim = func_80830A58(play, this); + f32 lastFrame = Animation_GetLastFrame(anim); + + PlayerAnimation_Change(play, &this->unk_284, anim, 3.0f / 3.0f, lastFrame, lastFrame, + ANIMMODE_ONCE, 0.0f); + func_80830AE8(this); + return true; + } + } + } + } + } + + return false; +} + +void func_80830CE8(PlayState* play, Player* this) { + func_8082F43C(play, this, func_80848AB0); + + if (this->itemAction <= PLAYER_IA_MINUS1) { + func_80123C58(this); + } + + Animation_Reverse(&this->unk_284); + func_80830B38(this); +} + +void func_80830D40(PlayState* play, Player* this) { + struct_8085CC88* entry = &D_8085CC88[this->unk_14E]; + f32 frame = entry->frame; + + if (this->unk_284.playSpeed < 0.0f) { + frame -= 1.0f; + } + if (PlayerAnimation_OnFrame(&this->unk_284, frame)) { + func_808308DC(play, this); + } + func_8082FB68(this); +} + +s32 func_80830DF0(Player* this, PlayState* play) { + if (this->stateFlags3 & PLAYER_STATE3_40000000) { + func_808302CC(this, play); + } else { + return false; + } + return true; +} + +s32 func_80830E30(Player* this, PlayState* play) { + if ((this->heldItemAction == PLAYER_IA_11) || (this->transformation == PLAYER_FORM_ZORA)) { + func_8082F43C(play, this, func_8084923C); + + PlayerAnimation_PlayOnce(play, &this->unk_284, + (this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT) + ? &gPlayerAnim_pz_cutterwaitA + : ((this->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) + ? &gPlayerAnim_pz_cutterwaitB + : &gPlayerAnim_pz_cutterwaitC)); + this->unk_ACC = 0xA; + } else { + if (!func_808306F8(this, play)) { + return false; + } + + PlayerAnimation_PlayOnce(play, &this->unk_284, + (Player_IsHoldingHookshot(this)) + ? &gPlayerAnim_link_hook_shot_ready + : ((this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf + : &gPlayerAnim_link_bow_bow_ready)); + } + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_uma_anim_walk); + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->transformation != PLAYER_FORM_ZORA)) { + Player_AnimationPlayLoop(play, this, func_8082ED20(this)); + } + + return true; +} + +s32 func_80830F9C(PlayState* play) { + return (play->unk_1887C > 0) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B); +} + +s32 func_80830FD4(PlayState* play) { + return (play->unk_1887C != 0) && + (play->unk_1887C < 0 || CHECK_BTN_ANY(sPlayerControlInput->cur.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)); +} + +s32 func_80831010(Player* this, PlayState* play) { + if ((this->unk_AA5 == PLAYER_UNKAA5_0) || (this->unk_AA5 == PLAYER_UNKAA5_3)) { + if (func_8082FBE8(this) || (this->targetedActor != NULL) || + (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_BOWARROW) == 0)) { + return true; + } + this->unk_AA5 = PLAYER_UNKAA5_3; + } + return false; +} + +s32 func_80831094(Player* this, PlayState* play) { + if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) { + if ((D_80862B48 != 0) || func_80830F9C(play)) { + if (func_80830E30(this, play)) { + return func_80831010(this, play); + } + } + } + return false; +} + +s32 func_80831124(PlayState* play, Player* this) { + if (this->actor.child != NULL) { + if (this->heldActor == NULL) { + this->heldActor = this->actor.child; + Player_RequestRumble(play, this, 255, 10, 250, SQ(0)); + Player_PlaySfx(this, NA_SE_IT_HOOKSHOT_RECEIVE); + } + return true; + } + return false; +} + +s32 func_80831194(PlayState* play, Player* this) { + if (this->heldActor != NULL) { + if (!Player_IsHoldingHookshot(this)) { + ItemId item; + ArrowType arrowType; + + func_808305BC(play, this, &item, &arrowType); + if ((this->transformation != PLAYER_FORM_DEKU) && !(this->stateFlags3 & PLAYER_STATE3_400)) { + if (gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) { + if ((play->sceneId != SCENE_SYATEKI_MIZU) && (play->sceneId != SCENE_F01) && + (play->sceneId != SCENE_SYATEKI_MORI)) { + play->interfaceCtx.minigameAmmo--; + } + } else if (play->unk_1887C != 0) { + play->unk_1887C--; + } else { + Inventory_ChangeAmmo(item, -1); + } + } + + if (play->unk_1887C == 1) { + play->unk_1887C = -10; + } + + Player_RequestRumble(play, this, 150, 10, 150, SQ(0)); + } else { + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + this->unk_B48 = 0.0f; + } + + this->unk_D57 = (this->transformation == PLAYER_FORM_DEKU) ? 20 : 4; + + this->heldActor->parent = NULL; + this->actor.child = NULL; + this->heldActor = NULL; + return true; + } + + return false; +} + +void func_8083133C(Player* this) { + this->stateFlags1 |= PLAYER_STATE1_20000; + + if (!(this->skelAnime.moveFlags & ANIM_FLAG_80) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + (D_80862B20 < 0x2000)) { + this->currentYaw = this->actor.shape.rot.y = this->actor.wallYaw + 0x8000; + } + + this->targetYaw = this->actor.shape.rot.y; +} + +s32 func_808313A8(PlayState* play, Player* this, Actor* actor) { + if (actor == NULL) { + func_8082DE50(play, this); + func_80836988(this, play); + return true; + } + + return false; +} + +void func_808313F0(Player* this, PlayState* play) { + if (!func_808313A8(play, this, this->heldActor)) { + func_8082F43C(play, this, func_808490B4); + PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + } +} + +// Stops the current fanfare if a stateflag is set; these two are Kamaro Dancing and Bremen Marching. +void func_80831454(Player* this) { + if ((this->stateFlags3 & PLAYER_STATE3_20000000) || (this->stateFlags2 & PLAYER_STATE2_2000000)) { + SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0); + } +} + +s32 Player_SetAction(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { + s32 i; + f32* ptr; + + if (actionFunc == this->actionFunc) { + return false; + } + + play->actorCtx.flags &= ~ACTORCTX_FLAG_PICTO_BOX_ON; + + if (this->actor.flags & ACTOR_FLAG_20000000) { + AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); + this->actor.flags &= ~ACTOR_FLAG_20000000; + } else if ((func_80857BE8 == this->actionFunc) || (func_808561B0 == this->actionFunc)) { + this->actor.shape.shadowDraw = ActorShadow_DrawFeet; + this->actor.shape.shadowScale = this->ageProperties->shadowScale; + this->unk_ABC = 0.0f; + if (func_80857BE8 == this->actionFunc) { + if (this->stateFlags3 & PLAYER_STATE3_80000) { + Magic_Reset(play); + } + func_8082DD2C(play, this); + this->actor.shape.rot.x = 0; + this->actor.shape.rot.z = 0; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_800; + } else { + Actor_SetScale(&this->actor, 0.01f); + } + } else if ((this->transformation == PLAYER_FORM_GORON) && + (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { + func_80831990(play, this, ITEM_NONE); + } + + func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); + this->actionFunc = actionFunc; + + if ((this->itemAction != this->heldItemAction) && (!(arg3 & 1) || !(this->stateFlags1 & PLAYER_STATE1_400000))) { + func_80123C58(this); + } + + if (!(arg3 & 1) && !(this->stateFlags1 & PLAYER_STATE1_800)) { + func_808309CC(play, this); + PlayerAnimation_PlayLoop(play, &this->unk_284, func_8082ED20(this)); + this->stateFlags1 &= ~PLAYER_STATE1_400000; + } + + func_80831454(this); + func_8082E794(this); + + this->stateFlags1 &= ~(PLAYER_STATE1_40 | PLAYER_STATE1_4000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000 | + PLAYER_STATE1_80000000); + this->stateFlags2 &= ~(PLAYER_STATE2_80000 | PLAYER_STATE2_800000 | PLAYER_STATE2_2000000 | PLAYER_STATE2_8000000 | + PLAYER_STATE2_10000000); + this->stateFlags3 &= + ~(PLAYER_STATE3_2 | PLAYER_STATE3_8 | PLAYER_STATE3_80 | PLAYER_STATE3_200 | PLAYER_STATE3_2000 | + PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | PLAYER_STATE3_20000 | PLAYER_STATE3_40000 | PLAYER_STATE3_80000 | + PLAYER_STATE3_200000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_20000000); + + this->unk_AE7 = 0; + this->unk_AE8 = 0; + this->unk_AA4 = 0; + this->unk_B86[0] = 0; + this->unk_B86[1] = 0; + this->unk_B8A = 0; + this->unk_B8C = 0; + this->unk_B8E = 0; + + // TODO: Is there no other way to write this that works? + i = 0; + ptr = this->unk_B10; + do { + *ptr = 0.0f; + ptr++; + i++; + } while (i < ARRAY_COUNT(this->unk_B10)); + + this->actor.shape.rot.z = 0; + + Player_ResetCylinder(this); + func_8082E00C(this); + + return true; +} + +void func_8083172C(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { + s32 moveFlags = this->skelAnime.moveFlags; + + this->skelAnime.moveFlags = 0; + Player_SetAction(play, this, actionFunc, arg3); + this->skelAnime.moveFlags = moveFlags; +} + +void func_80831760(PlayState* play, Player* this, PlayerActionFunc actionFunc, s32 arg3) { + if (this->itemAction > PLAYER_IA_MINUS1) { + PlayerItemAction heldItemAction = this->itemAction; + + this->itemAction = this->heldItemAction; + Player_SetAction(play, this, actionFunc, arg3); + this->itemAction = heldItemAction; + + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); + } +} + +void func_808317C4(Player* this) { + if (Player_IsHoldingHookshot(this)) { + if (this->heldActor != NULL) { + Actor_Kill(this->heldActor); + this->actor.child = NULL; + this->heldActor = NULL; + } + } +} + +s32 func_80831814(Player* this, PlayState* play, PlayerUnkAA5 arg2) { + if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_800 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000))) { + if (Camera_CheckValidMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_FIRSTPERSON) != 0) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (func_801242B4(this) && (this->actor.depthInWater < this->ageProperties->unk_2C))) { + this->unk_AA5 = arg2; + return true; + } + } + } + return false; +} + +// Toggle Lens +void func_808318C0(PlayState* play) { + if (Magic_Consume(play, 0, MAGIC_CONSUME_LENS)) { + if (play->actorCtx.lensActive) { + Actor_DeactivateLens(play); + } else { + play->actorCtx.lensActive = true; + } + + play_sound(play->actorCtx.lensActive ? NA_SE_SY_GLASSMODE_ON : NA_SE_SY_GLASSMODE_OFF); + } else { + play_sound(NA_SE_SY_ERROR); + } +} + +// Toggle Lens from a button press +void func_80831944(PlayState* play, Player* this) { + if (func_8012364C(play, this, func_8082FDC4()) == ITEM_LENS) { + func_808318C0(play); + } +} + +// Proposed name: Player_UseItem +void func_80831990(PlayState* play, Player* this, ItemId item) { + PlayerItemAction itemAction = Player_ItemToItemAction(this, item); + + if ((((this->heldItemAction == this->itemAction) && + (!(this->stateFlags1 & PLAYER_STATE1_400000) || + (Player_MeleeWeaponFromIA(itemAction) != PLAYER_MELEEWEAPON_NONE) || (itemAction == PLAYER_IA_NONE))) || + ((this->itemAction <= PLAYER_IA_MINUS1) && + ((Player_MeleeWeaponFromIA(itemAction) != PLAYER_MELEEWEAPON_NONE) || (itemAction == PLAYER_IA_NONE)))) && + ((itemAction == PLAYER_IA_NONE) || !(this->stateFlags1 & PLAYER_STATE1_8000000) || + (itemAction == PLAYER_IA_MASK_ZORA) || + ((this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)))) { + s32 var_v1 = ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) && + ((this->transformation != PLAYER_FORM_HUMAN) || (itemAction >= PLAYER_IA_MASK_GIANT))); + CollisionPoly* sp5C; + s32 sp58; + f32 sp54; + PlayerExplosive explosiveType; + + if (var_v1 || + (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) && (itemAction != PLAYER_IA_NONE)) || + (itemAction == PLAYER_IA_OCARINA) || + ((itemAction > PLAYER_IA_BOTTLE_MIN) && itemAction < PLAYER_IA_MASK_MIN) || + ((itemAction == PLAYER_IA_PICTO_BOX) && (this->talkActor != NULL) && + (this->exchangeItemId > PLAYER_IA_NONE))) { + if (var_v1) { + PlayerTransformation playerForm = (itemAction < PLAYER_IA_MASK_FIERCE_DEITY) + ? PLAYER_FORM_HUMAN + : itemAction - PLAYER_IA_MASK_FIERCE_DEITY; + + if (((this->currentMask != PLAYER_MASK_GIANT) && (itemAction == PLAYER_IA_MASK_GIANT) && + ((gSaveContext.magicState != MAGIC_STATE_IDLE) || + (gSaveContext.save.saveInfo.playerData.magic == 0))) || + (!(this->stateFlags1 & PLAYER_STATE1_8000000) && + BgCheck_EntityCheckCeiling(&play->colCtx, &sp54, &this->actor.world.pos, + sPlayerAgeProperties[playerForm].unk_00, &sp5C, &sp58, &this->actor))) { + play_sound(NA_SE_SY_ERROR); + return; + } + } + if ((itemAction == PLAYER_IA_MAGIC_BEANS) && (AMMO(ITEM_MAGIC_BEANS) == 0)) { + play_sound(NA_SE_SY_ERROR); + } else { + this->itemAction = itemAction; + this->unk_AA5 = PLAYER_UNKAA5_5; + } + } else if (((itemAction == PLAYER_IA_STICK) && (AMMO(ITEM_STICK) == 0)) || + (((play->unk_1887D != 0) || (play->unk_1887E != 0)) && + (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 5)) || + ((play->unk_1887D == 0) && (play->unk_1887E == 0) && + ((explosiveType = Player_ExplosiveFromIA(this, itemAction)) > PLAYER_EXPLOSIVE_NONE) && + ((AMMO(sPlayerExplosiveInfo[explosiveType].itemId) == 0) || + (play->actorCtx.actorLists[ACTORCAT_EXPLOSIVES].length >= 3)))) { + play_sound(NA_SE_SY_ERROR); + } else if (itemAction == PLAYER_IA_LENS) { + func_808318C0(play); + } else if (itemAction == PLAYER_IA_PICTO_BOX) { + if (!func_80831814(this, play, PLAYER_UNKAA5_2)) { + play_sound(NA_SE_SY_ERROR); + } + } else if ((itemAction == PLAYER_IA_NUT) && + ((this->transformation != PLAYER_FORM_DEKU) || (this->heldItemButton != 0))) { + if (AMMO(ITEM_NUT) != 0) { + func_8083A658(play, this); + } else { + play_sound(NA_SE_SY_ERROR); + } + } else if ((this->transformation == PLAYER_FORM_HUMAN) && (itemAction >= PLAYER_IA_MASK_MIN) && + (itemAction < PLAYER_IA_MASK_GIANT)) { + PlayerMask maskId = GET_MASK_FROM_IA(itemAction); + + this->prevMask = this->currentMask; + if (maskId == this->currentMask) { + this->currentMask = PLAYER_MASK_NONE; + func_8082E1F0(this, NA_SE_PL_TAKE_OUT_SHIELD); + } else { + this->currentMask = maskId; + func_8082E1F0(this, NA_SE_PL_CHANGE_ARMS); + } + gSaveContext.save.equippedMask = this->currentMask; + } else if ((itemAction != this->heldItemAction) || + ((this->heldActor == NULL) && (Player_ExplosiveFromIA(this, itemAction) > PLAYER_EXPLOSIVE_NONE))) { + u8 nextAnimType; + + this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); + nextAnimType = gPlayerModelTypes[this->nextModelGroup].modelAnimType; + var_v1 = ((this->transformation != PLAYER_FORM_GORON) || (itemAction == PLAYER_IA_POWDER_KEG)); + + if (var_v1 && (this->heldItemAction >= 0) && (item != this->heldItemId) && + (D_8085CD00[gPlayerModelTypes[this->modelGroup].modelAnimType][nextAnimType] != 0)) { + this->heldItemId = item; + this->stateFlags3 |= PLAYER_STATE3_40000000; + } else { + func_808317C4(this); + func_8082DCA0(play, this); + func_8082F470(play, this, itemAction); + if (!var_v1) { + D_80862B48 = 1; + D_80862B4C = 1; + } + } + } else { + D_80862B48 = 1; + D_80862B4C = 1; + } + } +} + +void func_80831F34(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + s32 sp24 = func_801242B4(this); + + func_8082DE50(play, this); + Player_SetAction(play, this, sp24 ? func_80851BD4 : func_8084BFDC, 0); + Player_AnimationPlayOnce(play, this, anim); + + if (anim == &gPlayerAnim_link_derth_rebirth) { + this->skelAnime.endFrame = 84.0f; + } + + this->stateFlags1 |= PLAYER_STATE1_80; + + func_8082DAD4(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DOWN); + + if (this == GET_PLAYER(play)) { + this->csId = play->playerCsIds[PLAYER_CS_ID_DEATH]; + Audio_SetBgmVolumeOff(); + gSaveContext.powderKegTimer = 0; + gSaveContext.unk_1014 = 0; + gSaveContext.jinxTimer = 0; + + if (Inventory_ConsumeFairy(play)) { + play->gameOverCtx.state = GAMEOVER_REVIVE_START; + this->unk_AE7 = 1; + } else { + play->gameOverCtx.state = GAMEOVER_DEATH_START; + func_801A41F8(0); + Audio_PlayFanfare(NA_BGM_GAME_OVER); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } + + ShrinkWindow_Letterbox_SetSizeTarget(32); + } +} + +s32 func_80832090(Player* this) { + return (!(func_8084D770 == this->actionFunc) || + (((this->stateFlags3 & PLAYER_STATE3_40000000)) && + ((this->heldItemId == ITEM_FC) || (this->heldItemId == ITEM_NONE)))) && + (!(func_80848808 == this->unk_AC4) || + Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction); +} + +// Whether action is Bremen marching or Kamaro dancing +s32 func_8083213C(Player* this) { + return (func_8084AC84 == this->actionFunc) || (func_8084AEEC == this->actionFunc); +} + +s32 func_8083216C(Player* this, PlayState* play) { + if (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->actor.parent != NULL) && Player_IsHoldingHookshot(this)) { + Player_SetAction(play, this, func_80855E08, 1); + this->stateFlags3 |= PLAYER_STATE3_80; + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_hook_fly_start); + func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80)); + func_8082DAD4(this); + this->currentYaw = this->actor.shape.rot.y; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + this->unk_AA6 |= 0x43; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); + return true; + } + + if (func_80832090(this)) { + func_808304BC(this, play); + if (func_80852B28 == this->actionFunc) { + return true; + } + } + + if (!this->unk_AC4(this, play)) { + return false; + } + + if (this->unk_AC8 != 0.0f) { + if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f)) { + AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->unk_284.jointTable, + this->skelAnime.jointTable, D_8085B9F0); + } + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) { + Math_StepToF(&this->unk_AC8, 0.0f, 0.25f); + AnimationContext_SetInterp(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable, 1.0f - this->unk_AC8); + } + } else if ((func_8082ED94(this) == 0) || (this->linearVelocity != 0.0f) || + (this->skelAnime.moveFlags & ANIM_FLAG_8)) { + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable, D_8085B9F0); + } else { + AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable); + } + + return true; +} + +s32 func_808323C0(Player* this, s16 csId) { + if ((csId > CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != csId)) { + if (!CutsceneManager_IsNext(csId)) { + CutsceneManager_Queue(csId); + + return false; + } + CutsceneManager_Start(csId, &this->actor); + } + this->csId = csId; + + return true; +} + +s32 func_80832444(Player* this) { + if (this->csId > CS_ID_NONE) { + if (!CutsceneManager_IsNext(this->csId)) { + CutsceneManager_Queue(this->csId); + return false; + } + + CutsceneManager_Start(this->csId, &this->actor); + } + return true; +} + +s32 func_8083249C(Player* this) { + if ((this->csId > CS_ID_NONE) && (CutsceneManager_GetCurrentCsId() != this->csId)) { + return func_80832444(this); + } + return true; +} + +s32 func_808324EC(PlayState* play, Player* this, PlayerFuncD58 arg2, s32 csId) { + this->unk_D58 = arg2; + this->csId = csId; + Player_SetAction(play, this, func_8084D770, 0); + func_8083249C(this); + this->stateFlags2 |= PLAYER_STATE2_40; + return func_8082DE14(play, this); +} + +s32 func_80832558(PlayState* play, Player* this, PlayerFuncD58 arg2) { + return func_808324EC(play, this, arg2, CS_ID_NONE); +} + +// To do with turning, related to targeting +void func_80832578(Player* this, PlayState* play) { + s16 previousYaw = this->actor.shape.rot.y; + + if (!(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) { + Actor* targetedActor = this->targetedActor; + + if ((targetedActor != NULL) && ((play->actorCtx.targetContext.unk4B != 0) || (this != GET_PLAYER(play))) && + (targetedActor->id != ACTOR_OBJ_NOZOKI)) { + Math_ScaledStepToS(&this->actor.shape.rot.y, + Math_Vec3f_Yaw(&this->actor.world.pos, &targetedActor->focus.pos), 0xFA0); + } else if ((this->stateFlags1 & PLAYER_STATE1_20000) && + !(this->stateFlags2 & (PLAYER_STATE2_20 | PLAYER_STATE2_40))) { + Math_ScaledStepToS(&this->actor.shape.rot.y, this->targetYaw, 0xFA0); + } + } else if (!(this->stateFlags2 & PLAYER_STATE2_40)) { + Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x7D0); + } + + this->unk_B4C = this->actor.shape.rot.y - previousYaw; +} + +s16 func_80832660(s16* pValue, s16 target, s16 step, s16 arg3, s16 arg4, s16 arg5) { + s16 temp1; + s16 temp2; + s16 temp3; + + temp1 = temp2 = arg4 - *pValue; + temp2 = CLAMP(temp2, -arg5, arg5); + *pValue += BINANG_SUB(temp1, temp2); + + Math_ScaledStepToS(pValue, target, step); + + temp3 = *pValue; + if (*pValue < -arg3) { + *pValue = -arg3; + } else if (arg3 < *pValue) { + *pValue = arg3; + } + return temp3 - *pValue; +} + +s16 func_80832754(Player* this, s32 arg1) { + s16 sp36; + s16 var_s1 = this->actor.shape.rot.y; + + if (arg1) { + this->upperLimbRot.x = this->actor.focus.rot.x; + var_s1 = this->actor.focus.rot.y; + this->unk_AA6 |= 0x41; + } else { + s16 temp = + func_80832660(&this->headLimbRot.x, this->actor.focus.rot.x, 0x258, 0x2710, this->actor.focus.rot.x, 0); + + func_80832660(&this->upperLimbRot.x, temp, 0xC8, 0xFA0, this->headLimbRot.x, 0x2710); + + sp36 = this->actor.focus.rot.y - var_s1; + func_80832660(&sp36, 0, 0xC8, 0x5DC0, this->upperLimbRot.y, 0x1F40); + var_s1 = this->actor.focus.rot.y - sp36; + func_80832660(&this->headLimbRot.y, (sp36 - this->upperLimbRot.y), 0xC8, 0x1F40, sp36, 0x1F40); + func_80832660(&this->upperLimbRot.y, sp36, 0xC8, 0x1F40, this->headLimbRot.y, 0x1F40); + this->unk_AA6 |= 0xD9; + } + + return var_s1; +} + +void func_80832888(Player* this, PlayState* play) { + s32 var_v1 = 0; + Actor* var_v1_2; + s32 heldZ = CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_Z); + s32 temp_v0_3; + s32 var_a1; + + if (!heldZ) { + this->stateFlags1 &= ~PLAYER_STATE1_40000000; + } + + if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0) || + (this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (this->stateFlags3 & PLAYER_STATE3_80)) { + this->unk_738 = 0; + } else if (heldZ || (this->stateFlags2 & PLAYER_STATE2_2000) || (this->unk_A78 != NULL)) { + if (this->unk_738 <= 5) { + this->unk_738 = 5; + } else { + this->unk_738--; + } + } else if (this->stateFlags1 & PLAYER_STATE1_20000) { + this->unk_738 = 0; + } else if (this->unk_738 != 0) { + this->unk_738--; + } + + if (this->unk_738 > 5) { + var_v1 = 1; + } + + temp_v0_3 = func_8082DAFC(play); + if (temp_v0_3 || (this->unk_738 != 0) || (this->stateFlags1 & (PLAYER_STATE1_1000 | PLAYER_STATE1_2000000))) { + if (!temp_v0_3) { + if (!(this->stateFlags1 & PLAYER_STATE1_2000000) && + ((this->heldItemAction != PLAYER_IA_FISHING_ROD) || (this->unk_B28 == 0)) && + CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_Z)) { + var_v1_2 = (this == GET_PLAYER(play)) ? play->actorCtx.targetContext.arrowPointedActor + : &GET_PLAYER(play)->actor; + var_a1 = (gSaveContext.options.zTargetSetting != 0) || (this != GET_PLAYER(play)); + this->stateFlags1 |= PLAYER_STATE1_8000; + if ((this->currentMask != PLAYER_MASK_GIANT) && (var_v1_2 != NULL) && + !(var_v1_2->flags & ACTOR_FLAG_CANT_LOCK_ON) && + !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { + if ((var_v1_2 == this->targetedActor) && (this == GET_PLAYER(play))) { + var_v1_2 = play->actorCtx.targetContext.unk_94; + } + + if ((var_v1_2 != NULL) && + (((var_v1_2 != this->targetedActor)) || (var_v1_2->flags & ACTOR_FLAG_80000))) { + var_v1_2->flags &= ~ACTOR_FLAG_80000; + if (!var_a1) { + this->stateFlags2 |= PLAYER_STATE2_2000; + } + this->targetedActor = var_v1_2; + this->unk_738 = 0xF; + this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); + } else if (!var_a1) { + func_80123DA4(this); + } + this->stateFlags1 &= ~PLAYER_STATE1_40000000; + } else if (!(this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) && + (func_808573A4 != this->actionFunc)) { + func_8083133C(this); + } + } + + if (this->targetedActor != NULL) { + if ((this == GET_PLAYER(play)) && (this->targetedActor != this->unk_A78) && + func_800B83F8(this->targetedActor, this, var_v1)) { + func_80123DA4(this); + this->stateFlags1 |= PLAYER_STATE1_40000000; + } else if (this->targetedActor != NULL) { + this->targetedActor->targetPriority = 0x28; + } + } else if (this->unk_A78 != NULL) { + this->targetedActor = this->unk_A78; + } + } + + if ((this->targetedActor != NULL) && !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) { + this->stateFlags1 &= ~(PLAYER_STATE1_10000 | PLAYER_STATE1_20000); + if ((this->stateFlags1 & PLAYER_STATE1_800) || + !CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + this->stateFlags1 |= PLAYER_STATE1_10000; + } + } else if (this->stateFlags1 & PLAYER_STATE1_20000) { + this->stateFlags2 &= ~PLAYER_STATE2_2000; + } else { + func_80123DC0(this); + } + } else { + func_80123DC0(this); + } +} + +s32 func_80832CAC(PlayState* play, Player* this, f32* arg2, s16* outYaw, f32 arg4) { + f32 temp_fv1_2; + + if ((this->unk_AA5 != PLAYER_UNKAA5_0) || func_8082DA90(play) || (this->stateFlags1 & PLAYER_STATE1_1)) { + *arg2 = 0.0f; + *outYaw = this->actor.shape.rot.y; + } else { + *arg2 = D_80862AFC; + *outYaw = D_80862B00; + if (arg4 != 0.0f) { + *arg2 -= 20.0f; + if (*arg2 < 0.0f) { + *arg2 = 0.0f; + } else { + temp_fv1_2 = 1.0f - Math_CosS(*arg2 * 450.0f); + *arg2 = (SQ(temp_fv1_2) * 30.0f) + 7.0f; + } + } else { + *arg2 *= 0.8f; + } + + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + *arg2 *= 1.5f; + } + + if (D_80862AFC != 0.0f) { + f32 temp_fv0 = Math_SinS(this->unk_B6C); + f32 var_fa0 = this->unk_B50; + f32 var_fa1; + + if (this->unk_AB8 != 0.0f) { + var_fa1 = (this->targetedActor != NULL) ? 0.002f : 0.008f; + + var_fa0 -= this->unk_AB8 * var_fa1; + var_fa0 = CLAMP_MIN(var_fa0, 2.0f); + } + *arg2 = (*arg2 * 0.14f) - (8.0f * temp_fv0 * temp_fv0); + *arg2 = CLAMP(*arg2, 0.0f, var_fa0); + if (temp_fv0) {} //! FAKE + return true; + } + } + + return false; +} + +s32 func_80832F24(Player* this) { + return Math_StepToF(&this->linearVelocity, 0.0f, REG(43) / 100.0f); +} + +s32 func_80832F78(Player* this, f32* arg1, s16* outYaw, f32 arg3, PlayState* play) { + if (!func_80832CAC(play, this, arg1, outYaw, arg3)) { + *outYaw = this->actor.shape.rot.y; + + if (this->targetedActor != NULL) { + if ((play->actorCtx.targetContext.unk4B != 0) && !(this->stateFlags2 & PLAYER_STATE2_40)) { + *outYaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->targetedActor->focus.pos); + } + } else if (func_80123434(this)) { + *outYaw = this->targetYaw; + } + + return false; + } + + *outYaw += Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + return true; +} + +/** + * The values of following arrays are used as indices for the `D_8085D054` array. + * Each index correspond to a function which will be called sequentially until any of them return `true`. + * Negative marks the end of the array. + */ +s8 D_8085CFE4[] = { 13, 2, 4, 9, 10, 11, 8, -7 }; +s8 D_8085CFEC[] = { 13, 1, 2, 5, 3, 4, 9, 10, 11, 7, 8, -6 }; +s8 D_8085CFF8[] = { 13, 1, 2, 3, 4, 9, 10, 11, 8, 7, -6 }; +s8 D_8085D004[] = { 13, 2, 4, 9, 10, 11, 8, -7 }; +s8 D_8085D00C[] = { 13, 2, 4, 9, 10, 11, 12, 8, -7 }; +s8 D_8085D018[] = { -7 }; +s8 D_8085D01C[] = { 0, 11, 1, 2, 3, 5, 4, 9, 8, 7, -6 }; +s8 D_8085D028[] = { 0, 11, 1, 2, 3, 12, 5, 4, 9, 8, 7, -6 }; +s8 D_8085D034[] = { 13, 1, 2, 3, 12, 5, 4, 9, 10, 11, 8, 7, -6 }; +s8 D_8085D044[] = { 10, 8, -7 }; +s8 D_8085D048[] = { 0, 12, 5, 4, -14 }; +s8 D_8085D050[] = { 13, 2, -4 }; + +s32 (*D_8085D054[])(Player*, PlayState*) = { + func_80839518, func_808365DC, func_8083D23C, func_8083CCB4, func_808391D8, + func_8083DFC4, func_8083A114, func_80848570, func_8083A580, func_8083D78C, + func_80839B18, func_8083A274, func_80834DFC, func_80838A90, func_8083A0CC, +}; + +s32 func_80833058(PlayState* play, Player* this, s8* arg2, s32 arg3) { + if (!(this->stateFlags1 & (PLAYER_STATE1_1 | PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && !func_8082DA90(play)) { + if (arg3) { + D_80862B04 = func_8083216C(this, play); + if (func_80852B28 == this->actionFunc) { + return true; + } + } + + if (func_801240DC(this)) { + this->unk_AA6 |= 0x41; + return true; + } + + if (!(this->stateFlags3 & PLAYER_STATE3_40000000) && (func_80848808 != this->unk_AC4)) { + while (*arg2 >= 0) { + if (D_8085D054[*arg2](this, play)) { + return true; + } + arg2++; + } + + if (D_8085D054[-*arg2](this, play)) { + return true; + } + } + + if (func_8083213C(this)) { + return true; + } + } else if (this->stateFlags1 & PLAYER_STATE1_800) { + func_8083216C(this, play); + } + + return false; +} + +s32 func_808331FC(PlayState* play, Player* this, SkelAnime* skelAnime, f32 frame) { + if ((skelAnime->endFrame - frame) <= skelAnime->curFrame) { + f32 sp24; + s16 sp22; + + if (func_80833058(play, this, D_8085D01C, 1)) { + return 0; + } + + if (D_80862B04 || func_80832F78(this, &sp24, &sp22, 0.018f, play)) { + return 1; + } + } + return -1; +} + +void func_808332A0(PlayState* play, Player* this, s32 magicCost, s32 isSwordBeam) { + if (magicCost != 0) { + this->unk_B08 = 0.0f; + } else { + this->unk_B08 = 0.5f; + } + + this->stateFlags1 |= PLAYER_STATE1_1000; + if ((this->actor.id == ACTOR_PLAYER) && (isSwordBeam || (this->transformation == PLAYER_FORM_HUMAN))) { + s16 pitch = 0; + Actor* thunder; + + if (isSwordBeam) { + if (this->targetedActor != NULL) { + pitch = Math_Vec3f_Pitch(&this->bodyPartsPos[PLAYER_BODYPART_WAIST], &this->targetedActor->focus.pos); + } + if (gSaveContext.save.saveInfo.playerData.magic == 0) { + return; + } + } + + thunder = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_M_THUNDER, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x, + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y, this->bodyPartsPos[PLAYER_BODYPART_WAIST].z, + pitch, 0, 0, (this->heldItemAction - PLAYER_IA_SWORD_KOKIRI) | magicCost); + + if ((thunder != NULL) && isSwordBeam) { + Magic_Consume(play, 1, MAGIC_CONSUME_DEITY_BEAM); + this->unk_D57 = 4; + } + } +} + +// Check for inputs for quickspin +s32 func_808333CC(Player* this) { + s8 sp3C[4]; + s8* iter; + s8* iter2; + s8 temp1; + s8 temp2; + s32 i; + + if (this->heldItemAction == PLAYER_IA_STICK) { + return false; + } + + iter = &this->unk_ADF[0]; + iter2 = &sp3C[0]; + for (i = 0; i < 4; i++, iter++, iter2++) { + if ((*iter2 = *iter) < 0) { + return false; + } + *iter2 *= 2; + } + + temp1 = sp3C[0] - sp3C[1]; + if (ABS_ALT(temp1) < 10) { + return false; + } + + iter2 = &sp3C[1]; + for (i = 1; i < 3; i++, iter2++) { + temp2 = *iter2 - *(iter2 + 1); + if ((ABS_ALT(temp2) < 10) || (temp2 * temp1 < 0)) { + return false; + } + } + + return true; +} + +void func_808334D4(PlayState* play, Player* this) { + PlayerAnimationHeader* anim; + + if ((this->meleeWeaponAnimation >= PLAYER_MWA_RIGHT_SLASH_1H) && + (this->meleeWeaponAnimation <= PLAYER_MWA_RIGHT_COMBO_2H)) { + anim = D_8085CF58[Player_IsHoldingTwoHandedWeapon(this)]; + } else { + anim = D_8085CF50[Player_IsHoldingTwoHandedWeapon(this)]; + } + + func_8082DC38(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 8.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -9.0f); + func_808332A0(play, this, 2 << 8, false); +} + +void func_808335B0(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8084CCEC, 1); + func_808334D4(play, this); +} + +s8 D_8085D090[] = { + PLAYER_MWA_STAB_1H, + PLAYER_MWA_RIGHT_SLASH_1H, + PLAYER_MWA_RIGHT_SLASH_1H, + PLAYER_MWA_LEFT_SLASH_1H, +}; + +s8 D_8085D094[][3] = { + { PLAYER_MWA_ZORA_PUNCH_LEFT, PLAYER_MWA_ZORA_PUNCH_COMBO, PLAYER_MWA_ZORA_PUNCH_KICK }, + { PLAYER_MWA_GORON_PUNCH_LEFT, PLAYER_MWA_GORON_PUNCH_RIGHT, PLAYER_MWA_GORON_PUNCH_BUTT }, +}; + +PlayerMeleeWeaponAnimation func_808335F4(Player* this) { + s32 temp_a1; + PlayerMeleeWeaponAnimation meleeWeaponAnim; + + temp_a1 = this->unk_AE3[this->unk_ADE]; + if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_GORON)) { + s32 requiredScopeTemp; + + // yikes + meleeWeaponAnim = ((this->transformation == PLAYER_FORM_ZORA) ? D_8085D094[0] : D_8085D094[1])[this->unk_ADD]; + + if (this->unk_ADD != 0) { + this->meleeWeaponAnimation = meleeWeaponAnim; + if (this->unk_ADD >= 2) { + this->unk_ADD = -1; + } + } + } else { + if (func_808333CC(this)) { + meleeWeaponAnim = PLAYER_MWA_SPIN_ATTACK_1H; + } else { + if (temp_a1 < 0) { + meleeWeaponAnim = func_8082FBE8(this) ? PLAYER_MWA_FORWARD_SLASH_1H : PLAYER_MWA_RIGHT_SLASH_1H; + } else { + meleeWeaponAnim = D_8085D090[temp_a1]; + if (meleeWeaponAnim == PLAYER_MWA_STAB_1H) { + this->stateFlags2 |= PLAYER_STATE2_40000000; + if (!func_8082FBE8(this)) { + meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H; + } + } + } + + if (this->heldItemAction == PLAYER_IA_STICK) { + meleeWeaponAnim = PLAYER_MWA_FORWARD_SLASH_1H; + } + } + + if (Player_IsHoldingTwoHandedWeapon(this)) { + meleeWeaponAnim++; + } + } + return meleeWeaponAnim; +} + +void func_80833728(Player* this, s32 index, u32 dmgFlags, s32 damage) { + this->meleeWeaponQuads[index].info.toucher.dmgFlags = dmgFlags; + this->meleeWeaponQuads[index].info.toucher.damage = damage; + + if (dmgFlags == DMG_DEKU_STICK) { + this->meleeWeaponQuads[index].info.toucherFlags = (TOUCH_ON | TOUCH_NEAREST | TOUCH_SFX_WOOD); + } else { + this->meleeWeaponQuads[index].info.toucherFlags = (TOUCH_ON | TOUCH_NEAREST); + } +} + +MeleeWeaponDamageInfo D_8085D09C[PLAYER_MELEEWEAPON_MAX] = { + { DMG_GORON_PUNCH, 2, 2, 0, 0 }, // PLAYER_MELEEWEAPON_NONE + { DMG_SWORD, 4, 8, 1, 2 }, // PLAYER_MELEEWEAPON_SWORD_KOKIRI + { DMG_SWORD, 4, 8, 2, 4 }, // PLAYER_MELEEWEAPON_SWORD_RAZOR + { DMG_SWORD, 4, 8, 3, 6 }, // PLAYER_MELEEWEAPON_SWORD_GILDED + { DMG_SWORD, 4, 8, 4, 8 }, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED + { DMG_DEKU_STICK, 0, 0, 2, 4 }, // PLAYER_MELEEWEAPON_STICK + { DMG_ZORA_PUNCH, 1, 2, 0, 0 }, // PLAYER_MELEEWEAPON_ZORA_FINS +}; + +// New function in NE0: split out of func_80833864 to be able to call it to patch Power Crouch Stab. +void func_8083375C(Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { + MeleeWeaponDamageInfo* dmgInfo = &D_8085D09C[0]; + s32 damage; + + if (this->actor.id == ACTOR_EN_TEST3) { + // Was Kafei originally intended to be able to punch? + meleeWeaponAnim = PLAYER_MWA_GORON_PUNCH_LEFT; + this->meleeWeaponAnimation = -1; + } else { + //! @bug Quick Put Away Damage: Since 0 is also the "no weapon" value, producing a weapon quad without a weapon + //! in hand, such as during Quick Put Away, produced a quad with the Goron punch properties, which does 0 damage + //! as human. + dmgInfo = &D_8085D09C[(this->transformation == PLAYER_FORM_GORON) ? PLAYER_MELEEWEAPON_NONE + : Player_GetMeleeWeaponHeld(this)]; + } + + //! @bug Great Deku Sword: Presumably the dmgTransformed fields are intended for Fierce Deity, but also work for + //! Deku if it is able to equip a sword (such as with the "0th day" glitch), giving Great Fairy's Sword damage. + damage = + ((meleeWeaponAnim >= PLAYER_MWA_FLIPSLASH_START) && (meleeWeaponAnim <= PLAYER_MWA_ZORA_JUMPKICK_FINISH)) + ? ((this->transformation == PLAYER_FORM_HUMAN) ? dmgInfo->dmgHumanStrong : dmgInfo->dmgTransformedStrong) + : ((this->transformation == PLAYER_FORM_HUMAN) ? dmgInfo->dmgHumanNormal : dmgInfo->dmgTransformedNormal); + + func_80833728(this, 0, dmgInfo->dmgFlags, damage); + func_80833728(this, 1, dmgInfo->dmgFlags, damage); +} + +void func_80833864(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim) { + func_8083375C(this, meleeWeaponAnim); + Player_SetAction(play, this, func_808548B8, 0); + this->unk_AE8 = 0; + + if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_FINISH) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { + func_8082DC38(this); + } + + // Accumulate consecutive slashes to do the "third slash" types + if ((meleeWeaponAnim != this->meleeWeaponAnimation) || (this->unk_ADD >= 3)) { + this->unk_ADD = 0; + } + + this->unk_ADD++; + if (this->unk_ADD >= 3) { + meleeWeaponAnim += 2; + } + + this->meleeWeaponAnimation = meleeWeaponAnim; + func_8082DB90(play, this, sMeleeAttackAnimInfo[meleeWeaponAnim].unk_0); + this->unk_ADC = this->skelAnime.animLength + 4.0f; + + if ((meleeWeaponAnim < PLAYER_MWA_FLIPSLASH_START) || (meleeWeaponAnim > PLAYER_MWA_ZORA_JUMPKICK_START)) { + func_8082E920(play, this, (ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE)); + } + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80833998(Player* this, s32 invincibilityTimer) { + if (this->invincibilityTimer >= 0) { + this->invincibilityTimer = invincibilityTimer; + this->unk_B5F = 0; + } +} + +void func_808339B4(Player* this, s32 invincibilityTimer) { + if (this->invincibilityTimer > invincibilityTimer) { + this->invincibilityTimer = invincibilityTimer; + } + this->unk_B5F = 0; +} + +// Player_InflictDamageImpl? +s32 func_808339D4(PlayState* play, Player* this, s32 damage) { + if ((this->invincibilityTimer != 0) || (this->stateFlags3 & PLAYER_STATE3_400000) || + (this->actor.id != ACTOR_PLAYER)) { + return 1; + } + + if (this->actor.category != ACTORCAT_PLAYER) { + this->actor.colChkInfo.damage = -damage; + return Actor_ApplyDamage(&this->actor); + } + + if (this->currentMask == PLAYER_MASK_GIANT) { + damage >>= 2; + } + + return Health_ChangeBy(play, damage); +} + +void func_80833A64(Player* this) { + this->skelAnime.prevTransl = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1]; + func_8082E820(this, 1 | ANIM_FLAG_UPDATE_Y); +} + +void func_80833AA0(Player* this, PlayState* play) { + if (Player_SetAction(play, this, func_8084C16C, 0)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); + this->unk_AE8 = 1; + } + if (this->unk_AA5 != PLAYER_UNKAA5_4) { + this->unk_AA5 = PLAYER_UNKAA5_0; + } +} + +// TODO: this can be one array, but should it be? +PlayerAnimationHeader* D_8085D0D4[] = { + &gPlayerAnim_link_normal_front_shit, + &gPlayerAnim_link_normal_front_shitR, + &gPlayerAnim_link_normal_back_shit, + &gPlayerAnim_link_normal_back_shitR, + // }; + // PlayerAnimationHeader* D_8085D0E4[] = { + &gPlayerAnim_link_normal_front_hit, + &gPlayerAnim_link_anchor_front_hitR, + &gPlayerAnim_link_normal_back_hit, + &gPlayerAnim_link_anchor_back_hitR, +}; + +void func_80833B18(PlayState* play, Player* this, s32 arg2, f32 speed, f32 velocityY, s16 arg5, + s32 invincibilityTimer) { + PlayerAnimationHeader* anim = NULL; + + if (this->stateFlags1 & PLAYER_STATE1_2000) { + func_80833A64(this); + } + + this->unk_B64 = 0; + + Player_PlaySfx(this, NA_SE_PL_DAMAGE); + + if (func_808339D4(play, this, -this->actor.colChkInfo.damage) == 0) { + this->stateFlags2 &= ~PLAYER_STATE2_80; + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->stateFlags1 & PLAYER_STATE1_8000000)) { + return; + } + } + + if (this->actor.colChkInfo.damage != 0) { + func_80833998(this, invincibilityTimer); + } + + if (this->stateFlags2 & PLAYER_STATE2_10) { + return; + } + + if (arg2 == 3) { + Player_SetAction(play, this, func_808546D0, 0); + anim = &gPlayerAnim_link_normal_ice_down; + func_8082DAD4(this); + this->actor.velocity.y = 0.0f; + + Player_RequestRumble(play, this, 255, 10, 40, SQ(0)); + + Player_PlaySfx(this, NA_SE_PL_FREEZE_S); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE); + } else if (arg2 == 4) { + Player_SetAction(play, this, func_80854800, 0); + func_8082DB60(play, this, &gPlayerAnim_link_normal_electric_shock); + func_8082DAD4(this); + + this->unk_AE8 = 20; + this->actor.velocity.y = 0.0f; + + Player_RequestRumble(play, this, 255, 80, 150, SQ(0)); + } else { + arg5 -= this->actor.shape.rot.y; + + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + Player_SetAction(play, this, func_80851B58, 0); + Player_RequestRumble(play, this, 180, 20, 50, SQ(0)); + + if (arg2 == 1) { + this->linearVelocity = speed * 1.5f; + this->actor.velocity.y = velocityY * 0.7f; + } else { + this->linearVelocity = 4.0f; + this->actor.velocity.y = 0.0f; + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + anim = &gPlayerAnim_link_swimer_swim_hit; + } else if ((arg2 == 1) || (arg2 == 2) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (this->stateFlags1 & + (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) { + Player_SetAction(play, this, func_8084BC64, 0); + + this->stateFlags3 |= PLAYER_STATE3_2; + + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + func_8082DAD4(this); + + if (arg2 == 2) { + this->unk_AE8 = 4; + + this->actor.speed = 3.0f; + this->linearVelocity = 3.0f; + this->actor.velocity.y = 6.0f; + + func_8082E5A8(play, this, D_8085BE84[PLAYER_ANIMGROUP_3][this->modelAnimType]); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } else { + this->actor.speed = speed; + this->linearVelocity = speed; + this->actor.velocity.y = velocityY; + + if (ABS_ALT(arg5) > 0x4000) { + anim = &gPlayerAnim_link_normal_front_downA; + } else { + anim = &gPlayerAnim_link_normal_back_downA; + } + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_L); + } + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } else if ((this->linearVelocity > 4.0f) && !func_80123420(this)) { + this->unk_B64 = 20; + + Player_RequestRumble(play, this, 120, 20, 10, SQ(0)); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + + return; + } else { + PlayerAnimationHeader** animPtr = D_8085D0D4; + + Player_SetAction(play, this, func_8084BBF0, 0); + func_8082FC60(this); + + if (this->actor.colChkInfo.damage < 5) { + Player_RequestRumble(play, this, 120, 20, 10, SQ(0)); + } else { + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + this->linearVelocity = 23.0f; + + animPtr += 4; + } + + if (ABS_ALT(arg5) <= 0x4000) { + animPtr += 2; + } + + if (func_80123420(this)) { + animPtr++; + } + + anim = *animPtr; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } + + this->actor.shape.rot.y += arg5; + this->currentYaw = this->actor.shape.rot.y; + this->actor.world.rot.y = this->actor.shape.rot.y; + + if (ABS_ALT(arg5) > 0x4000) { + this->actor.shape.rot.y += 0x8000; + } + } + + func_8082DE50(play, this); + + this->stateFlags1 |= PLAYER_STATE1_4000000; + + if (anim != NULL) { + func_8082DB90(play, this, anim); + } +} + +s32 func_808340AC(FloorType floorType) { + s32 temp_v0 = floorType - FLOOR_TYPE_2; + + if ((temp_v0 >= FLOOR_TYPE_2 - FLOOR_TYPE_2) && (temp_v0 <= FLOOR_TYPE_3 - FLOOR_TYPE_2)) { + return temp_v0; + } + return -1; +} + +s32 func_808340D4(FloorType floorType) { + return (floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_7) || (floorType == FLOOR_TYPE_12); +} + +void func_80834104(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8085421C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000; +} + +void func_80834140(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + if (!(this->stateFlags1 & PLAYER_STATE1_80)) { + func_80834104(play, this); + if (func_8082DA90(play)) { + this->unk_AE8 = -30; + } + this->stateFlags1 |= PLAYER_STATE1_80; + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, 84.0f, ANIMMODE_ONCE, -6.0f); + this->unk_AE7 = 1; + this->linearVelocity = 0.0f; + } +} + +s32 func_808341F4(PlayState* play, Player* this) { + f32 temp_fv0; + f32 flameScale; + f32 flameIntensity; + s32 i; + s32 timerStep; + s32 spawnedFlame = false; + s32 var_v0; + s32 var_v1; + u8* timerPtr = this->flameTimers; + + if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) { + timerStep = 0; + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->cylinder.base.ocFlags1 & OC1_HIT) { + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); + this->linearVelocity = 0.0f; + } + func_80834140(play, this, &gPlayerAnim_link_derth_rebirth); + } + } else { + if (this->transformation == PLAYER_FORM_GORON) { + var_v1 = 20; + } else { + var_v1 = (s32)(this->linearVelocity * 0.4f) + 1; + } + + if (this->stateFlags2 & PLAYER_STATE2_8) { + var_v0 = 100; + } else { + var_v0 = 0; + } + + timerStep = var_v0 + var_v1; + } + + for (i = 0; i < PLAYER_BODYPART_MAX; i++, timerPtr++) { + if (*timerPtr <= timerStep) { + *timerPtr = 0; + } else { + spawnedFlame = true; + *timerPtr -= timerStep; + if (*timerPtr > 20.0f) { + temp_fv0 = (*timerPtr - 20.0f) * 0.01f; + flameScale = CLAMP(temp_fv0, 0.19999999f, 0.2f); + } else { + flameScale = *timerPtr * 0.01f; + } + + flameIntensity = (*timerPtr - 25.0f) * 0.02f; + flameIntensity = CLAMP(flameIntensity, 0.0f, 1.0f); + EffectSsFireTail_SpawnFlameOnPlayer(play, flameScale, i, flameIntensity); + } + } + + if (spawnedFlame) { + Player_PlaySfx(this, NA_SE_EV_TORCH - SFX_FLAG); + if ((play->gameplayFrames % 4) == 0) { + Player_InflictDamage(play, -1); + } + } else { + this->isBurning = false; + } + + return this->stateFlags1 & PLAYER_STATE1_80; +} + +s32 func_808344C0(PlayState* play, Player* this) { + s32 i = 0; + + while (i < ARRAY_COUNT(this->flameTimers)) { + this->flameTimers[i] = Rand_S16Offset(0, 200); + i++; + } + + this->isBurning = true; + return func_808341F4(play, this); +} + +s32 func_80834534(PlayState* play, Player* this) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_L); + return func_808344C0(play, this); +} + +s32 func_8083456C(PlayState* play, Player* this) { + if (this->actor.colChkInfo.acHitEffect == 1) { + return func_80834534(play, this); + } + return false; +} + +void func_808345A8(Player* this) { + if ((this->invincibilityTimer > 0) && (this->invincibilityTimer < 20)) { + this->invincibilityTimer = 20; + } +} + +void func_808345C8(void) { + if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + gSaveContext.save.equippedMask = PLAYER_MASK_NONE; + } +} + +s32 func_80834600(Player* this, PlayState* play) { + s32 pad74; + s32 var_v0; + + if (this->unk_D6A != 0) { + if (!Player_InBlockingCsMode(play, this)) { + Player_InflictDamage(play, -16); + this->unk_D6A = 0; + } + } else if ((var_v0 = ((Player_GetHeight(this) - 8.0f) < (this->unk_AB8 * this->actor.scale.y))) || + (this->actor.bgCheckFlags & BGCHECKFLAG_CRUSHED) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + (this->stateFlags2 & PLAYER_STATE2_80000000)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + + if (var_v0) { + func_80169FDC(&play->state); + func_808345C8(); + Scene_SetExitFade(play); + } else { + func_80169EFC(&play->state); + func_808345C8(); + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_TAKEN_AWAY); + play->haltAllActors = true; + play_sound(NA_SE_OC_ABYSS); + } else if ((this->unk_B75 != 0) && ((this->unk_B75 >= 3) || (this->invincibilityTimer == 0))) { + u8 sp6C[] = { 0, 2, 1, 1 }; + + if (!func_8083456C(play, this)) { + if (this->unk_B75 == 4) { + this->shockTimer = 40; + } + + this->actor.colChkInfo.damage += this->unk_B74; + func_80833B18(play, this, sp6C[this->unk_B75 - 1], this->unk_B78, this->unk_B7C, this->unk_B76, 20); + } + } else if ((this->shieldQuad.base.acFlags & AC_BOUNCED) || (this->shieldCylinder.base.acFlags & AC_BOUNCED) || + ((this->invincibilityTimer < 0) && (this->cylinder.base.acFlags & AC_HIT) && + (this->cylinder.info.acHitInfo != NULL) && + (this->cylinder.info.acHitInfo->toucher.dmgFlags != DMG_UNBLOCKABLE))) { + PlayerAnimationHeader* var_a2; + s32 sp64; + + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + if ((this->invincibilityTimer >= 0) && !Player_IsGoronOrDeku(this)) { + sp64 = (func_8084B5C0 == this->actionFunc); + if (!func_801242B4(this)) { + Player_SetAction(play, this, func_8084BAA4, 0); + } + + this->unk_AE7 = sp64; + if ((s8)sp64 == 0) { + func_8082F43C(play, this, func_80848A0C); + var_a2 = (this->unk_B40 < 0.5f) ? D_8085CFD4[Player_IsHoldingTwoHandedWeapon(this)] + : D_8085CFCC[Player_IsHoldingTwoHandedWeapon(this)]; + PlayerAnimation_PlayOnce(play, &this->unk_284, var_a2); + } else { + Player_AnimationPlayOnce(play, this, D_8085CFDC[Player_IsHoldingTwoHandedWeapon(this)]); + } + } + + if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000))) { + this->linearVelocity = -18.0f; + this->currentYaw = this->actor.shape.rot.y; + } + + return false; + } else if ((this->unk_D6B != 0) || (this->invincibilityTimer > 0) || (this->stateFlags1 & PLAYER_STATE1_4000000) || + (this->csMode != PLAYER_CSMODE_0) || (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) || + (this->meleeWeaponQuads[1].base.atFlags & AT_HIT) || (this->cylinder.base.atFlags & AT_HIT) || + (this->shieldCylinder.base.atFlags & AT_HIT)) { + return false; + } else if (this->cylinder.base.acFlags & AC_HIT) { + Actor* sp60 = this->cylinder.base.ac; + s32 var_a2_2; + + if (sp60->flags & ACTOR_FLAG_1000000) { + Player_PlaySfx(this, NA_SE_PL_BODY_HIT); + } + + if (this->actor.colChkInfo.acHitEffect == 2) { + var_a2_2 = 3; + } else if (this->actor.colChkInfo.acHitEffect == 3) { + var_a2_2 = 4; + } else if (this->actor.colChkInfo.acHitEffect == 7) { + var_a2_2 = 1; + this->shockTimer = 40; + } else if (this->actor.colChkInfo.acHitEffect == 9) { + var_a2_2 = 1; + if (func_80834534(play, this)) { + return true; + } + + } else if (((this->actor.colChkInfo.acHitEffect == 4) && (this->currentMask != PLAYER_MASK_GIANT)) || + (this->stateFlags3 & PLAYER_STATE3_1000)) { + var_a2_2 = 1; + } else { + var_a2_2 = 0; + if (func_8083456C(play, this)) { + return true; + } + } + func_80833B18(play, this, var_a2_2, 4.0f, 5.0f, Actor_WorldYawTowardActor(sp60, &this->actor), 20); + } else if (this->invincibilityTimer != 0) { + return false; + } else { + s32 sp58 = func_808340AC(sPlayerCurrentFloorType); + u32 sp54 = SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + s32 var_a1 = 0; + s32 var_v1_2; + s32 pad48; + + if ((sp58 < 0) || + ((sp54 == 0) && (this->transformation == PLAYER_FORM_GORON) && !(this->actor.depthInWater > 0.0f))) { + var_a1 = (this->actor.wallPoly != NULL) && + SurfaceType_IsWallDamage(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); + if (var_a1 == 0) { + //! FAKE? + goto label; + } + } + var_v1_2 = (var_a1 != 0) ? this->actor.wallBgId : this->actor.floorBgId; + if (((this->transformation == PLAYER_FORM_DEKU) || (this->transformation == PLAYER_FORM_ZORA)) && + ((sp58 >= 0) && (sp54 == 0) && !(this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < -30.0f))) { + func_80834534(play, this); + } else { + this->actor.colChkInfo.damage = 4; + func_80833B18(play, this, (var_v1_2 == BGCHECK_SCENE) ? 0 : 1, 4.0f, 5.0f, + (var_a1 != 0) ? this->actor.wallYaw : this->actor.shape.rot.y, 20); + return true; + } + } + + //! FAKE? + if (0) { + label: + return false; + } + + return true; +} + +void func_80834CD0(Player* this, f32 arg1, u16 sfxId) { + this->actor.velocity.y = arg1 * D_8085C3E4; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + + if (sfxId != NA_SE_NONE) { + Player_AnimSfx_PlayFloorJump(this); + Player_AnimSfx_PlayVoice(this, sfxId); + } + + this->stateFlags1 |= PLAYER_STATE1_40000; + this->fallStartHeight = this->actor.world.pos.y; +} + +void func_80834D50(PlayState* play, Player* this, PlayerAnimationHeader* anim, f32 speed, u16 sfxId) { + Player_SetAction(play, this, func_8084C16C, 1); + if (anim != NULL) { + func_8082DB90(play, this, anim); + } + func_80834CD0(this, speed, sfxId); +} + +void func_80834DB8(Player* this, PlayerAnimationHeader* anim, f32 speed, PlayState* play) { + func_80834D50(play, this, anim, speed, NA_SE_VO_LI_SWORD_N); +} + +s32 func_80834DFC(Player* this, PlayState* play) { + if ((this->transformation != PLAYER_FORM_GORON) && + ((this->transformation != PLAYER_FORM_DEKU) || func_801242B4(this) || (this->unk_B5C < 4)) && + !(this->stateFlags1 & PLAYER_STATE1_800) && (this->unk_B5C >= 2) && + (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->wallHeight < this->ageProperties->unk_14))) { + s32 var_v1 = false; + PlayerAnimationHeader* anim; + f32 wallHeight; + + if (func_801242B4(this)) { + f32 depth = (this->transformation == PLAYER_FORM_FIERCE_DEITY) ? 80.0f : 50.0f; + + if (this->actor.depthInWater < depth) { + if ((this->unk_B5C < 2) || (this->ageProperties->unk_10 < this->wallHeight)) { + return false; + } + } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || (this->unk_B5C >= 3)) { + return false; + } + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + ((this->ageProperties->unk_14 <= this->wallHeight) && (this->stateFlags1 & PLAYER_STATE1_8000000))) { + return false; + } + + if ((this->actor.wallBgId != BGCHECK_SCENE) && (sPlayerCurrentWallFlags & WALL_FLAG_6)) { + if (this->unk_B5D >= 6) { + this->stateFlags2 |= PLAYER_STATE2_4; + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + var_v1 = true; + } + } + } else if ((this->unk_B5D >= 6) || CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + var_v1 = true; + } + + if (var_v1) { + Player_SetAction(play, this, func_8084D4EC, 0); + wallHeight = this->wallHeight; + + if (this->ageProperties->unk_14 <= wallHeight) { + anim = &gPlayerAnim_link_normal_250jump_start; + this->linearVelocity = 1.0f; + } else { + CollisionPoly* poly; + s32 bgId; + f32 wallPolyNormalX = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.x); + f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.z); + f32 var_fv1 = this->wallDistance + 0.5f; // wallDistance + f32 yIntersect; + s32 pad; + + this->stateFlags1 |= PLAYER_STATE1_4; + + if (func_801242B4(this)) { + wallHeight -= 60.0f * this->ageProperties->unk_08; + anim = &gPlayerAnim_link_swimer_swim_15step_up; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + } else if (this->ageProperties->unk_18 <= wallHeight) { + wallHeight -= 59.0f * this->ageProperties->unk_08; + anim = &gPlayerAnim_link_normal_150step_up; + } else { + wallHeight -= 41.0f * this->ageProperties->unk_08; + anim = &gPlayerAnim_link_normal_100step_up; + } + + this->unk_ABC -= wallHeight * 100.0f; + + this->actor.world.pos.x -= var_fv1 * wallPolyNormalX; + this->actor.world.pos.y += this->wallHeight + 10.0f; + this->actor.world.pos.z -= var_fv1 * wallPolyNormalZ; + + yIntersect = + BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &this->actor.world.pos); + if ((this->actor.world.pos.y - yIntersect) <= 20.0f) { + this->actor.world.pos.y = yIntersect; + if (bgId != BGCHECK_SCENE) { + DynaPoly_SetPlayerOnTop(&play->colCtx, bgId); + } + } + + func_8082DAD4(this); + this->actor.velocity.y = 0.0f; + } + + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND; + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f); + AnimationContext_DisableQueue(play); + this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; + return true; + } + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->unk_B5C == 1) && (this->unk_B5D >= 3)) { + f32 temp = (this->wallHeight * 0.08f) + 5.5f; + + func_80834DB8(this, &gPlayerAnim_link_normal_jump, temp, play); + this->linearVelocity = 2.5f; + return true; + } + + return false; +} + +void func_80835324(PlayState* play, Player* this, f32 arg2, s16 arg3) { + Player_SetAction(play, this, func_8084D820, 0); + func_8082DD2C(play, this); + + this->csId = CS_ID_NONE; + this->unk_AE7 = 1; + this->unk_AE8 = 1; + + this->unk_3A0.x = Math_SinS(arg3) * arg2 + this->actor.world.pos.x; + this->unk_3A0.z = Math_CosS(arg3) * arg2 + this->actor.world.pos.z; + + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); +} + +void func_808353DC(PlayState* play, Player* this) { + Player_SetAction(play, this, func_808508C8, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); +} + +s32 func_80835428(PlayState* play, Player* this) { + if (!func_8082DA90(play) && (this->stateFlags1 & PLAYER_STATE1_80000000)) { + func_80834104(play, this); + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FALL_S); + func_8019F128(NA_SE_OC_SECRET_WARP_IN); + return true; + } + return false; +} + +/** + * The actual entrances each "return entrance" value can map to. + * This is used by scenes that are shared between locations. + * + * This 1D array is split into groups of entrances. + * The start of each group is indexed by `sReturnEntranceGroupIndices` values. + * The resulting groups are then indexed by the spawn value. + * + * The spawn value (`PlayState.curSpawn`) is set to a different value depending on the entrance used to enter the + * scene, which allows these dynamic "return entrances" to link back to the previous scene. + * + * Seems unused in MM + */ +u16 sReturnEntranceGroupData[] = { + // 0xFE00 + /* 0 */ 0x1000, +}; + +/** + * The values are indices into `sReturnEntranceGroupData` marking the start of each group + */ +u8 sReturnEntranceGroupIndices[] = { + 0, // 0xFE00 +}; + +// subfunction of OoT's func_80839034 +void func_808354A4(PlayState* play, s32 arg1, s32 arg2) { + play->nextEntrance = play->setupExitList[arg1]; + + if (play->nextEntrance == 0xFFFF) { + gSaveContext.respawnFlag = 4; + play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_UNK_3].entrance; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + } else if (play->nextEntrance >= 0xFE00) { + play->nextEntrance = + sReturnEntranceGroupData[sReturnEntranceGroupIndices[play->nextEntrance - 0xFE00] + play->curSpawn]; + + Scene_SetExitFade(play); + } else { + if (arg2) { + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = play->nextEntrance; + func_80169EFC(&play->state); + gSaveContext.respawnFlag = -2; + } + + gSaveContext.unk_3DBB = 1; + Scene_SetExitFade(play); + } + + play->transitionTrigger = TRANS_TRIGGER_START; +} + +void func_808355D8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_80833AA0(this, play); + this->unk_AE8 = -2; + func_8082E5EC(play, this, anim); + func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_CLOSE); +} + +// related to grottos (?) +s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) { + s32 var_a3; + FloorType floorType; + s32 sp34; + s32 sp30; + + if ((this == GET_PLAYER(play)) && !(this->stateFlags1 & PLAYER_STATE1_80) && !func_8082DA90(play) && + (this->csMode == PLAYER_CSMODE_0) && !(this->stateFlags1 & PLAYER_STATE1_1)) { + var_a3 = 0; + if (((poly != NULL) && (var_a3 = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), (var_a3 != 0)) && + (((play->sceneId != SCENE_GORONRACE) && (play->sceneId != SCENE_DEKU_KING)) || (var_a3 < 3)) && + (((play->sceneId != SCENE_20SICHITAI) && (play->sceneId != SCENE_20SICHITAI2)) || (var_a3 < 0x15)) && + ((play->sceneId != SCENE_11GORONNOSATO) || (var_a3 < 6))) || + (func_808340D4(sPlayerCurrentFloorType) && (this->floorProperty == FLOOR_PROPERTY_12))) { + sp34 = this->unk_D68 - (s32)this->actor.world.pos.y; + if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sp34 < 400) && (D_80862B18 > 100.0f)) { + if ((this->floorProperty != FLOOR_PROPERTY_5) && (this->floorProperty != FLOOR_PROPERTY_12)) { + this->linearVelocity = 0.0f; + } + + return false; + } else { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } + + if (var_a3 == 0) { + func_80169EFC(&play->state); + Scene_SetExitFade(play); + } else { + func_808354A4(play, var_a3 - 1, + SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2); + if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->floorProperty == FLOOR_PROPERTY_5)) { + func_8019F128(NA_SE_OC_TUNAMI); + func_801A4058(5); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + (this->floorProperty == FLOOR_PROPERTY_12)) { + func_8019F128(NA_SE_OC_SECRET_WARP_IN); + } + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + if (D_801BDAA0) { + D_801BDAA0 = false; + } else { + D_801BDA9C = true; + } + } + } + + if (!(this->stateFlags1 & (PLAYER_STATE1_800000 | PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + ((floorType = SurfaceType_GetFloorType(&play->colCtx, poly, bgId)) != FLOOR_TYPE_10) && + ((sp34 < 100) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (floorType == FLOOR_TYPE_11) { + func_8019F128(NA_SE_OC_SECRET_HOLE_OUT); + func_801A4058(5); + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } else { + func_8085B74C(play); + } + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_StopHorizontalMovement(this); + } + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0); + this->stateFlags1 |= PLAYER_STATE1_1 | PLAYER_STATE1_20000000; + return true; + } + } else { + if ((this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.floorPoly == NULL)) { + BgCheck_EntityRaycastFloor7(&play->colCtx, &this->actor.floorPoly, &sp30, &this->actor, + &this->actor.world.pos); + if (this->actor.floorPoly == NULL) { + func_80169EFC(&play->state); + return false; + } + //! FAKE + if (1) {} + } + + if (!(this->stateFlags1 & PLAYER_STATE1_80000000)) { + if (((this->actor.world.pos.y < -4000.0f) || + (((this->floorProperty == FLOOR_PROPERTY_5) || (this->floorProperty == FLOOR_PROPERTY_12) || + (this->floorProperty == FLOOR_PROPERTY_13)) && + ((D_80862B18 < 100.0f) || (this->fallDistance > 400))))) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->floorProperty == FLOOR_PROPERTY_5) { + func_80169FDC(&play->state); + func_808345C8(); + } else { + func_80169EFC(&play->state); + } + if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + gSaveContext.respawnFlag = -5; + } + + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + play_sound(NA_SE_OC_ABYSS); + } else { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } + + if (this->floorProperty == FLOOR_PROPERTY_13) { + Player_SetAction(play, this, func_808497A0, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } else { + func_80834104(play, this); + this->unk_AE8 = 9999; + if (this->floorProperty == FLOOR_PROPERTY_5) { + this->unk_AE7 = -1; + } else { + this->unk_AE7 = 1; + } + } + } + } + } + + this->unk_D68 = this->actor.world.pos.y; + } + } + + return false; +} + +void Player_TranslateAndRotateY(Player* this, Vec3f* translation, Vec3f* src, Vec3f* dst) { + Lib_Vec3f_TranslateAndRotateY(translation, this->actor.shape.rot.y, src, dst); +} + +// Player_GetPosInACertainDirectionFromARadiusAway +void func_80835BF8(Vec3f* srcPos, s16 rotY, f32 radius, Vec3f* dstPos) { + dstPos->x = Math_SinS(rotY) * radius + srcPos->x; + dstPos->z = Math_CosS(rotY) * radius + srcPos->z; +} + +Actor* Player_SpawnFairy(PlayState* play, Player* this, Vec3f* translation, Vec3f* arg3, s32 elfParams) { + Vec3f pos; + + Player_TranslateAndRotateY(this, translation, arg3, &pos); + + return Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, pos.x, pos.y, pos.z, 0, 0, 0, elfParams); +} + +f32 func_80835CD8(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos, CollisionPoly** outPoly, s32* outBgId) { + Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, pos); + return BgCheck_EntityRaycastFloor5(&play->colCtx, outPoly, outBgId, &this->actor, pos); +} + +f32 func_80835D2C(PlayState* play, Player* this, Vec3f* arg2, Vec3f* pos) { + CollisionPoly* poly; + s32 bgId; + + return func_80835CD8(play, this, arg2, pos, &poly, &bgId); +} + +s32 func_80835D58(PlayState* play, Player* this, Vec3f* arg2, CollisionPoly** outPoly, s32* bgId, Vec3f* posResult) { + Vec3f posA; + Vec3f posB; + + posA.x = this->actor.world.pos.x; + posA.y = this->actor.world.pos.y + arg2->y; + posA.z = this->actor.world.pos.z; + Player_TranslateAndRotateY(this, &this->actor.world.pos, arg2, &posB); + + return BgCheck_EntityLineTest2(&play->colCtx, &posA, &posB, posResult, outPoly, true, false, false, true, bgId, + &this->actor); +} + +Vec3f D_8085D100 = { 0.0f, 50.0f, 0.0f }; + +s32 func_80835DF8(PlayState* play, Player* this, CollisionPoly** outPoly, s32* outBgId) { + Vec3f pos; + f32 yIntersect = func_80835CD8(play, this, &D_8085D100, &pos, outPoly, outBgId); + + if ((*outBgId == BGCHECK_SCENE) && (fabsf(this->actor.world.pos.y - yIntersect) < 10.0f)) { + func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, *outPoly, *outBgId)); + return true; + } + return false; +} + +/** + * PLAYER_DOORTYPE_STAIRCASE: DoorSpiral + */ +void Player_Door_Staircase(PlayState* play, Player* this, Actor* door) { + static Vec3f D_8085D10C = { 20.0f, 0.0f, 20.0f }; + DoorSpiral* doorStaircase = (DoorSpiral*)door; + + this->currentYaw = doorStaircase->actor.home.rot.y + 0x8000; + this->actor.shape.rot.y = this->currentYaw; + if (this->linearVelocity <= 0.0f) { + this->linearVelocity = 0.1f; + } + func_80835324(play, this, 50.0f, this->actor.shape.rot.y); + + this->unk_397 = this->doorType; + this->unk_AE7 = 0; + this->stateFlags1 |= PLAYER_STATE1_20000000; + func_80835BF8(&doorStaircase->actor.world.pos, doorStaircase->actor.shape.rot.y, -140.0f, &this->unk_3A0); + + D_8085D10C.x = (this->doorDirection != 0) ? -400.0f : 400.0f; + D_8085D10C.z = 200.0f; + Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D10C, &this->unk_3AC); + + doorStaircase->shouldClimb = true; + + func_8082DAD4(this); + + if (this->doorTimer != 0) { + this->unk_AE8 = 0; + func_8082E438(play, this, func_8082ED20(this)); + this->skelAnime.endFrame = 0.0f; + } else { + this->linearVelocity = 0.1f; + } + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_SCENE0); + this->doorBgCamIndex = + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorStaircase->actor)].sides[0].bgCamIndex; + Actor_DeactivateLens(play); + this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG; +} + +/** + * PLAYER_DOORTYPE_SLIDING: DoorShutter, BgOpenShutter + */ +void Player_Door_Sliding(PlayState* play, Player* this, Actor* door) { + SlidingDoorActor* doorSliding = (SlidingDoorActor*)door; + Vec3f sp38; + + this->currentYaw = doorSliding->dyna.actor.home.rot.y; + if (this->doorDirection > 0) { + this->currentYaw -= 0x8000; + } + this->actor.shape.rot.y = this->currentYaw; + if (this->linearVelocity <= 0.0f) { + this->linearVelocity = 0.1f; + } + + func_80835324(play, this, 50.0f, this->actor.shape.rot.y); + this->unk_AE7 = 0; + this->unk_397 = this->doorType; + this->stateFlags1 |= PLAYER_STATE1_20000000; + Actor_OffsetOfPointInActorCoords(&doorSliding->dyna.actor, &sp38, &this->actor.world.pos); + + func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, + (42.0f - fabsf(sp38.z)) * this->doorDirection, &this->actor.world.pos); + func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, this->doorDirection * 20.0f, + &this->unk_3A0); + func_80835BF8(&this->actor.world.pos, doorSliding->dyna.actor.shape.rot.y, this->doorDirection * -120.0f, + &this->unk_3AC); + + doorSliding->unk_15C = 1; + func_8082DAD4(this); + + if (this->doorTimer != 0) { + this->unk_AE8 = 0; + func_8082E438(play, this, func_8082ED20(this)); + this->skelAnime.endFrame = 0.0f; + } else { + this->linearVelocity = 0.1f; + } + + if (doorSliding->dyna.actor.category == ACTORCAT_DOOR) { + this->doorBgCamIndex = play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorSliding->dyna.actor)] + .sides[this->doorDirection > 0 ? 0 : 1] + .bgCamIndex; + Actor_DeactivateLens(play); + } +} + +// sPlayerOpenDoorLeftAnimPerForm +PlayerAnimationHeader* D_8085D118[] = { + &gPlayerAnim_pg_doorA_open, // PLAYER_FORM_GORON + &gPlayerAnim_pz_doorA_open, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_doorA_open, // PLAYER_FORM_DEKU +}; +// sPlayerOpenDoorRightAnimPerForm +PlayerAnimationHeader* D_8085D124[] = { + &gPlayerAnim_pg_doorB_open, // PLAYER_FORM_GORON + &gPlayerAnim_pz_doorB_open, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_doorB_open, // PLAYER_FORM_DEKU +}; + +/** + * PLAYER_DOORTYPE_TALKING: EnDoorEtc + * PLAYER_DOORTYPE_HANDLE: EnDoor + * PLAYER_DOORTYPE_FAKE: + * PLAYER_DOORTYPE_PROXIMITY: EnDoor + */ +void Player_Door_Knob(PlayState* play, Player* this, Actor* door) { + s32 temp = this->transformation - 1; + PlayerAnimationHeader* anim; + f32 temp_fv0; // sp5C + KnobDoorActor* doorHandle = (KnobDoorActor*)door; + + doorHandle->animIndex = this->transformation; + + if (this->doorDirection < 0) { + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + anim = D_8085BE84[PLAYER_ANIMGROUP_8][this->modelAnimType]; + } else if (this->transformation == PLAYER_FORM_HUMAN) { + anim = D_8085BE84[PLAYER_ANIMGROUP_9][this->modelAnimType]; + } else { + anim = D_8085D118[temp]; + } + } else { + doorHandle->animIndex += 5; + + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + anim = D_8085BE84[PLAYER_ANIMGROUP_10][this->modelAnimType]; + } else if (this->transformation == PLAYER_FORM_HUMAN) { + anim = D_8085BE84[PLAYER_ANIMGROUP_11][this->modelAnimType]; + } else { + anim = D_8085D124[temp]; + } + } + + Player_SetAction(play, this, func_8084E034, 0); + this->stateFlags2 |= PLAYER_STATE2_800000; + func_8082DE14(play, this); + if (this->doorDirection < 0) { + this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y; + } else { + this->actor.shape.rot.y = doorHandle->dyna.actor.shape.rot.y - 0x8000; + } + + this->currentYaw = this->actor.shape.rot.y; + temp_fv0 = this->doorDirection * 22.0f; + func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, temp_fv0, + &this->actor.world.pos); + func_8082EC9C(play, this, anim); + + if (this->doorTimer != 0) { + this->skelAnime.endFrame = 0.0f; + } + + func_8082DAD4(this); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200); + doorHandle->playOpenAnim = true; + if (this->doorType != PLAYER_DOORTYPE_FAKE) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + s32 enDoorType = ENDOOR_GET_TYPE(&doorHandle->dyna.actor); + + this->stateFlags1 |= PLAYER_STATE1_20000000; + + if (this->actor.category == ACTORCAT_PLAYER) { + Actor_DeactivateLens(play); + func_80835BF8(&doorHandle->dyna.actor.world.pos, doorHandle->dyna.actor.shape.rot.y, -temp_fv0, &pos); + pos.y = doorHandle->dyna.actor.world.pos.y + 10.0f; + BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); + + if (func_8083562C(play, this, poly, BGCHECK_SCENE)) { + gSaveContext.entranceSpeed = 2.0f; + } else if (enDoorType != ENDOOR_TYPE_7) { + Camera* mainCam; + + this->unk_AE7 = 38.0f * D_8085C3E8; + mainCam = Play_GetCamera(play, CAM_ID_MAIN); + + Camera_ChangeDoorCam(mainCam, &doorHandle->dyna.actor, + play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(&doorHandle->dyna.actor)] + .sides[(this->doorDirection > 0) ? 0 : 1] + .bgCamIndex, + 0.0f, this->unk_AE7, 26.0f * D_8085C3E8, 10.0f * D_8085C3E8); + } + } + } +} + +// door stuff +s32 func_808365DC(Player* this, PlayState* play) { + if ((gSaveContext.save.saveInfo.playerData.health != 0) && (this->doorType != PLAYER_DOORTYPE_NONE)) { + if ((this->actor.category != ACTORCAT_PLAYER) || + ((((this->doorType <= PLAYER_DOORTYPE_TALKING) && CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) || + ((this->doorType >= PLAYER_DOORTYPE_HANDLE) && CutsceneManager_IsNext(CS_ID_GLOBAL_DOOR))) && + (!(this->stateFlags1 & PLAYER_STATE1_800) && + (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || (func_8085437C == this->actionFunc) || + (this->doorType == PLAYER_DOORTYPE_STAIRCASE) || (this->doorType == PLAYER_DOORTYPE_PROXIMITY))))) { + Actor* doorActor = this->doorActor; + Actor* var_v0_3; + + if (this->doorType <= PLAYER_DOORTYPE_TALKING) { + Player_TalkWithPlayer(play, doorActor); + if (doorActor->textId == 0x1821) { + doorActor->flags |= ACTOR_FLAG_TALK_REQUESTED; + } + return true; + } + + gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 0; + + if (this->doorType == PLAYER_DOORTYPE_STAIRCASE) { + Player_Door_Staircase(play, this, doorActor); + } else if (this->doorType == PLAYER_DOORTYPE_SLIDING) { + Player_Door_Sliding(play, this, doorActor); + } else { + Player_Door_Knob(play, this, doorActor); + } + + if (this->actor.category == ACTORCAT_PLAYER) { + this->csId = CS_ID_GLOBAL_DOOR; + CutsceneManager_Start(this->csId, &this->actor); + } + + if (this->actor.category == ACTORCAT_PLAYER) { + if ((this->doorType < PLAYER_DOORTYPE_FAKE) && (doorActor->category == ACTORCAT_DOOR) && + ((this->doorType != PLAYER_DOORTYPE_HANDLE) || (ENDOOR_GET_TYPE(doorActor) != ENDOOR_TYPE_7))) { + s8 roomNum = play->doorCtx.transitionActorList[DOOR_GET_TRANSITION_ID(doorActor)] + .sides[(this->doorDirection > 0) ? 0 : 1] + .room; + + if ((roomNum >= 0) && (roomNum != play->roomCtx.curRoom.num)) { + Room_StartRoomTransition(play, &play->roomCtx, roomNum); + } + } + } + + doorActor->room = play->roomCtx.curRoom.num; + if (((var_v0_3 = doorActor->child) != NULL) || ((var_v0_3 = doorActor->parent) != NULL)) { + var_v0_3->room = play->roomCtx.curRoom.num; + } + return true; + } + } + + return false; +} + +void func_80836888(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + + Player_SetAction(play, this, func_80849A9C, 1); + + if (this->unk_B40 < 0.5f) { + anim = func_8082EF54(this); + this->unk_B40 = 0.0f; + } else { + anim = func_8082EF9C(this); + this->unk_B40 = 1.0f; + } + + this->unk_B44 = this->unk_B40; + Player_AnimationPlayLoop(play, this, anim); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8083692C(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849DD0, 1); + func_8082E438(play, this, func_8082ED20(this)); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80836988(Player* this, PlayState* play) { + if (func_80123420(this)) { + func_80836888(this, play); + } else if (func_80123434(this)) { + func_8083692C(this, play); + } else { + func_8085B384(this, play); + } +} + +void func_808369F4(Player* this, PlayState* play) { + PlayerActionFunc actionFunc; + + if (func_80123420(this)) { + actionFunc = func_80849A9C; + } else if (func_80123434(this)) { + actionFunc = func_80849DD0; + } else { + actionFunc = func_80849FE0; + } + Player_SetAction(play, this, actionFunc, 1); +} + +void func_80836A5C(Player* this, PlayState* play) { + func_808369F4(this, play); + if (func_80123420(this)) { + this->unk_AE8 = 1; + } +} + +void func_80836A98(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + func_80836A5C(this, play); + func_8082EC9C(play, this, anim); +} + +void func_80836AD8(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80857BE8, 0); + this->unk_B28 = 0; + this->unk_B86[1] = 0; + this->unk_AF0[0].x = 0.0f; + this->unk_AF0[0].y = 0.0f; + this->unk_AF0[0].z = 0.0f; + this->unk_B08 = 0.0f; + this->unk_B0C = 0.0f; + Player_PlaySfx(this, NA_SE_PL_GORON_TO_BALL); +} + +void func_80836B3C(PlayState* play, Player* this, f32 arg2) { + this->currentYaw = this->actor.shape.rot.y; + this->actor.world.rot.y = this->actor.shape.rot.y; + + if (this->transformation == PLAYER_FORM_GORON) { + func_80836AD8(play, this); + PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType], + 1.5f * D_8085C3E4, 0.0f, 6.0f, ANIMMODE_ONCE, 0.0f); + } else { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_15][this->modelAnimType]; + + Player_SetAction(play, this, func_8084C6EC, 0); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.25f * D_8085C3E4, arg2, Animation_GetLastFrame(anim), + ANIMMODE_ONCE, 0.0f); + } +} + +void func_80836C70(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex) { + static Vec3f D_8085D130 = { 0, 0, 0 }; + s32 i; + + for (i = 0; i < 4; i++) { + Vec3f velocity; + + velocity.x = randPlusMinusPoint5Scaled(4.0f); + velocity.y = Rand_ZeroFloat(2.0f); + velocity.z = randPlusMinusPoint5Scaled(4.0f); + D_8085D130.y = -0.2f; + EffectSsHahen_Spawn(play, &this->bodyPartsPos[bodyPartIndex], &velocity, &D_8085D130, 0, 10, OBJECT_LINK_NUTS, + 16, object_link_nuts_DL_008860); + } +} + +void func_80836D8C(Player* this) { + this->actor.focus.rot.x = 0; + this->actor.focus.rot.z = 0; + this->headLimbRot.x = 0; + this->headLimbRot.y = 0; + this->headLimbRot.z = 0; + this->upperLimbRot.x = 0; + this->upperLimbRot.y = 0; + this->upperLimbRot.z = 0; + this->actor.shape.rot.y = this->actor.focus.rot.y; + this->currentYaw = this->actor.focus.rot.y; +} + +s32 func_80836DC0(PlayState* play, Player* this) { + if ((MREG(48) != 0) || func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + Player_SetAction(play, this, func_808561B0, 0); + this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); + func_8082E438(play, this, &gPlayerAnim_pn_attack); + Player_StopHorizontalMovement(this); + func_80836D8C(this); + this->actor.shape.shadowDraw = ActorShadow_DrawCircle; + this->unk_B48 = -2000.0f; + this->actor.shape.shadowScale = 13.0f; + func_8082E1F0(this, NA_SE_PL_DEKUNUTS_IN_GRD); + return true; + } + + return false; +} + +void Player_RequestQuake(PlayState* play, u16 speed, s16 y, s16 duration) { + s16 quakeIndex = Quake_Request(Play_GetCamera(play, CAM_ID_MAIN), QUAKE_TYPE_3); + + Quake_SetSpeed(quakeIndex, speed); + Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); + Quake_SetDuration(quakeIndex, duration); +} + +FallImpactInfo sFallImpactInfos[] = { + { -8, 180, 40, 100, NA_SE_VO_LI_LAND_DAMAGE_S }, + { -16, 255, 140, 150, NA_SE_VO_LI_LAND_DAMAGE_S }, +}; + +// Player_FallAgainstTheFloor, Player_LetTheBodiesHitTheFloor, Player_ImpactFloor, Player_ProcessFallDamage, +// Player_DamageOnFloorImpact, Player_CalculateFallDamage +s32 func_80836F10(PlayState* play, Player* this) { + s32 fallDistance; + + if ((sPlayerCurrentFloorType == FLOOR_TYPE_6) || (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + (this->csMode != PLAYER_CSMODE_0)) { + fallDistance = 0; + } else { + fallDistance = this->fallDistance; + } + + Math_StepToF(&this->linearVelocity, 0.0f, 1.0f); + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + + // Height enough for fall damage + if (fallDistance >= 400) { + s32 index; + FallImpactInfo* entry; + + if (this->fallDistance < 800) { + // small fall + index = 0; + } else { + // big fall + index = 1; + } + + Player_PlaySfx(this, NA_SE_PL_BODY_HIT); + + entry = &sFallImpactInfos[index]; + Player_AnimSfx_PlayVoice(this, entry->sfxId); + + if (Player_InflictDamage(play, entry->damage)) { + // Player's dead + return -1; + } + + func_80833998(this, 40); + Player_RequestQuake(play, 32967, 2, 30); + Player_RequestRumble(play, this, entry->sourceIntensity, entry->decayTimer, entry->decayStep, SQ(0)); + + return index + 1; + } + + // Tiny fall, won't damage player + if (fallDistance > 200) { + fallDistance = fallDistance * 2; + fallDistance = CLAMP_MAX(fallDistance, 255); + + Player_RequestRumble(play, this, fallDistance, fallDistance * 0.1f, fallDistance, SQ(0)); + if (sPlayerCurrentFloorType == FLOOR_TYPE_6) { + //! @bug unreachable code: When sPlayerCurrentFloorType is equal to FLOOR_TYPE_6 then fallDistance is + //! ignored (set to zero), so the previous check based on said variable will always fail, producing this + //! current check to always be false. + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + } + } + + Player_AnimSfx_PlayFloorLand(this); + return 0; +} + +s32 func_808370D4(PlayState* play, Player* this) { + if ((this->fallDistance < 800) && (this->unk_AE3[this->unk_ADE] == 0) && !(this->stateFlags1 & PLAYER_STATE1_800)) { + func_80836B3C(play, this, 0.0f); + + return true; + } + return false; +} + +void func_80837134(PlayState* play, Player* this) { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_13][this->modelAnimType]; + s32 temp_v0_2; // sp28 + + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + + if (this->transformation == PLAYER_FORM_DEKU) { + s32 var_v1 = false; + + if ((this->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) || + (this->skelAnime.animation == &gPlayerAnim_pn_kakkufinish)) { + func_80836C70(play, this, PLAYER_BODYPART_LEFT_HAND); + func_80836C70(play, this, PLAYER_BODYPART_RIGHT_HAND); + var_v1 = true; + } + + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && func_80836DC0(play, this)) { + return; + } + + if (var_v1) { + func_80836A98(this, anim, play); + Player_AnimSfx_PlayFloorLand(this); + return; + } + } else if (this->stateFlags2 & PLAYER_STATE2_80000) { + if (func_80123420(this)) { + anim = D_8085C2A4[this->unk_AE7].unk_8; + } else { + anim = D_8085C2A4[this->unk_AE7].unk_4; + } + } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_run_jump) { + anim = &gPlayerAnim_link_normal_run_jump_end; + } else if (func_80123420(this)) { + anim = &gPlayerAnim_link_anchor_landingR; + func_8082FC60(this); + } else if (this->fallDistance <= 80) { + anim = D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType]; + } else if (func_808370D4(play, this)) { + return; + } + + temp_v0_2 = func_80836F10(play, this); + if (temp_v0_2 > 0) { // Player suffered damage because of this fall + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_13][this->modelAnimType], play); + this->skelAnime.endFrame = 8.0f; + + if (temp_v0_2 == 1) { + this->unk_AE8 = 0xA; + } else { + this->unk_AE8 = 0x14; + } + } else if (temp_v0_2 == 0) { + func_80836A98(this, anim, play); + } +} + +void func_808373A4(PlayState* play, Player* this) { + func_8082E438(play, this, &gPlayerAnim_pn_attack); + this->unk_B10[0] = 20000.0f; + this->unk_B10[1] = 0x30000; + Player_PlaySfx(this, NA_SE_PL_DEKUNUTS_ATTACK); +} + +s32 func_808373F8(PlayState* play, Player* this, u16 sfxId) { + PlayerAnimationHeader* anim; + f32 speed; + s16 yawDiff = this->currentYaw - this->actor.shape.rot.y; + + if ((IREG(66) / 100.0f) < this->linearVelocity) { + speed = IREG(67) / 100.0f; + } else { + speed = (IREG(68) / 100.0f + (IREG(69) * this->linearVelocity) / 1000.0f); + + if ((this->transformation == PLAYER_FORM_DEKU) && (speed < 8.0f)) { + speed = 8.0f; + } else if (speed < 5.0f) { + speed = 5.0f; + } + } + + if ((ABS_ALT(yawDiff) >= 0x1000) || (this->linearVelocity <= 4.0f)) { + anim = &gPlayerAnim_link_normal_jump; + } else { + s32 var_v1; + + if ((this->transformation != PLAYER_FORM_DEKU) && + (((sPlayerPrevFloorProperty == FLOOR_PROPERTY_1)) || (sPlayerPrevFloorProperty == FLOOR_PROPERTY_2))) { + if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_1) { + var_v1 = 4; + } else { + var_v1 = 5; + } + + func_80834D50(play, this, D_8085C2A4[var_v1].unk_0, speed, ((var_v1 == 4) ? NA_SE_VO_LI_SWORD_N : sfxId)); + this->unk_AE8 = -1; + this->stateFlags2 |= PLAYER_STATE2_80000; + this->unk_AE7 = var_v1; + return true; + } + anim = &gPlayerAnim_link_normal_run_jump; + } + + // Deku hopping + if (this->transformation == PLAYER_FORM_DEKU) { + speed *= 0.3f + ((5 - this->remainingHopsCounter) * 0.18f); + if (speed < 4.0f) { + speed = 4.0f; + } + + if ((this->actor.depthInWater > 0.0f) && (this->remainingHopsCounter != 0)) { + this->actor.world.pos.y += this->actor.depthInWater; + func_80834D50(play, this, anim, speed, NA_SE_NONE); + this->unk_AE8 = 1; + this->stateFlags3 |= PLAYER_STATE3_200000; + Player_PlaySfx(this, (NA_SE_PL_DEKUNUTS_JUMP5 + 1 - this->remainingHopsCounter)); + Player_AnimSfx_PlayVoice(this, sfxId); + this->remainingHopsCounter--; + if (this->remainingHopsCounter == 0) { + this->stateFlags2 |= PLAYER_STATE2_80000; + func_808373A4(play, this); + } + + return true; + } + + if (this->actor.velocity.y > 0.0f) { + sfxId = NA_SE_NONE; + } + } + + func_80834D50(play, this, anim, speed, sfxId); + this->unk_AE8 = 1; + + return true; +} + +s32 func_80837730(PlayState* play, Player* this, f32 arg2, s32 scale) { + f32 sp3C = fabsf(arg2); + + if (sp3C > 2.0f) { + WaterBox* waterBox; + f32 sp34; + Vec3f pos; + + Math_Vec3f_Copy(&pos, &this->bodyPartsPos[PLAYER_BODYPART_WAIST]); + pos.y += 20.0f; + if (WaterBox_GetSurface1(play, &play->colCtx, pos.x, pos.z, &pos.y, &waterBox)) { + sp34 = pos.y - this->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y; + if ((sp34 > -2.0f) && (sp34 < 100.0f)) { + EffectSsGSplash_Spawn(play, &pos, NULL, NULL, + (sp3C <= 10.0f) ? EFFSSGSPLASH_TYPE_0 : EFFSSGSPLASH_TYPE_1, scale); + return true; + } + } + } + + return false; +} + +s32 func_8083784C(Player* this) { + if (this->actor.velocity.y < 0.0f) { + if ((this->actor.depthInWater > 0.0f) && + ((this->ageProperties->unk_2C - this->actor.depthInWater) < D_80862B18)) { + if ((this->remainingHopsCounter != 0) && (gSaveContext.save.saveInfo.playerData.health != 0) && + !(this->stateFlags1 & PLAYER_STATE1_4000000)) { + if (((this->talkActor == NULL) || !(this->talkActor->flags & ACTOR_FLAG_10000))) { + return true; + } + } + } + } + + return false; +} + +void func_808378FC(PlayState* play, Player* this) { + if (!func_8082FC24(this)) { + this->stateFlags2 |= PLAYER_STATE2_20; + } + + if (func_8083784C(this) && func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP)) { + func_80837730(play, this, 20.0f, this->actor.velocity.y * 50.0f); + } +} + +s32 func_8083798C(Player* this) { + return (this->interactRangeActor != NULL) && (this->heldActor == NULL) && + (this->transformation != PLAYER_FORM_DEKU); +} + +void func_808379C0(PlayState* play, Player* this) { + if (func_8083798C(this)) { + Actor* interactRangeActor = this->interactRangeActor; + PlayerAnimationHeader* anim; + + if ((interactRangeActor->id == ACTOR_EN_ISHI) && (ENISHI_GET_1(interactRangeActor) != 0)) { + Player_SetAction(play, this, func_8084E334, 0); + anim = &gPlayerAnim_link_silver_carry; + } else if (((interactRangeActor->id == ACTOR_EN_BOMBF) || (interactRangeActor->id == ACTOR_EN_KUSA) || + (interactRangeActor->id == ACTOR_EN_KUSA2) || (interactRangeActor->id == ACTOR_OBJ_GRASS_CARRY)) && + (Player_GetStrength() <= PLAYER_STRENGTH_DEKU)) { + Player_SetAction(play, this, func_8084E4E4, 0); + anim = &gPlayerAnim_link_normal_nocarry_free; + + this->actor.world.pos.x = + (Math_SinS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.x; + this->actor.world.pos.z = + (Math_CosS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.z; + + this->currentYaw = this->actor.shape.rot.y = interactRangeActor->yawTowardsPlayer + 0x8000; + } else { + Player_SetAction(play, this, func_8084E25C, 0); + anim = D_8085BE84[PLAYER_ANIMGROUP_12][this->modelAnimType]; + } + + Player_AnimationPlayOnce(play, this, anim); + } else { + func_80836988(this, play); + this->stateFlags1 &= ~PLAYER_STATE1_800; + } +} + +void func_80837B60(PlayState* play, Player* this) { + func_8083172C(play, this, func_8084E980, 0); + + this->exchangeItemId = PLAYER_IA_NONE; + this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); + if (this->actor.textId != 0) { + Message_StartTextbox(play, this->actor.textId, this->talkActor); + } + this->targetedActor = this->talkActor; +} + +void func_80837BD0(PlayState* play, Player* this) { + func_8083172C(play, this, func_8084FE7C, 0); +} + +void func_80837BF8(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8084ED9C, 0); +} + +void func_80837C20(PlayState* play, Player* this) { + s32 sp1C = this->unk_AE8; + s32 sp18 = this->unk_AE7; + + func_8083172C(play, this, func_8084F4E8, 0); + this->actor.velocity.y = 0.0f; + + this->unk_AE8 = sp1C; + this->unk_AE7 = sp18; +} + +void func_80837C78(PlayState* play, Player* this) { + func_8083172C(play, this, func_80852C04, 0); + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_20000000); + + if (this->getItemId == GI_HEART_CONTAINER) { + this->unk_AE8 = 20; + } else if (this->getItemId >= GI_NONE) { + this->unk_AE8 = 1; + } else { + this->getItemId = -this->getItemId; + } +} + +void func_80837CEC(PlayState* play, Player* this, CollisionPoly* arg2, f32 arg3, PlayerAnimationHeader* anim) { + f32 nx = COLPOLY_GET_NORMAL(arg2->normal.x); + f32 nz = COLPOLY_GET_NORMAL(arg2->normal.z); + + Player_SetAction(play, this, func_8084F1B8, 0); + func_8082DE50(play, this); + Player_AnimationPlayOnce(play, this, anim); + + this->actor.world.pos.x -= (arg3 + 1.0f) * nx; + this->actor.world.pos.z -= (arg3 + 1.0f) * nz; + this->actor.shape.rot.y = Math_Atan2S_XY(nz, nx); + this->currentYaw = this->actor.shape.rot.y; + + func_8082DAD4(this); + this->actor.velocity.y = 0.0f; + func_8082E6D0(this); +} + +s32 func_80837DEC(Player* this, PlayState* play) { + if ((this->transformation != PLAYER_FORM_GORON) && (this->transformation != PLAYER_FORM_DEKU) && + (this->actor.depthInWater < -80.0f)) { + if ((ABS_ALT(this->unk_B6C)) < 0xAAA && (ABS_ALT(this->unk_B6E) < 0xAAA)) { + CollisionPoly* entityPoly; + CollisionPoly* sp90; + s32 entityBgId; + s32 sp88; + Vec3f sp7C; + Vec3f sp70; + f32 temp_fv1_2; + f32 entityNormalX; + f32 entityNormalY; + f32 entityNormalZ; + f32 temp_fv0_2; + f32 var_fv1; + + sp7C.x = this->actor.prevPos.x - this->actor.world.pos.x; + sp7C.z = this->actor.prevPos.z - this->actor.world.pos.z; + + var_fv1 = sqrtf(SQXZ(sp7C)); + if (var_fv1 != 0.0f) { + var_fv1 = 5.0f / var_fv1; + } else { + var_fv1 = 0.0f; + } + + sp7C.x = this->actor.prevPos.x + (sp7C.x * var_fv1); + sp7C.y = this->actor.world.pos.y; + sp7C.z = this->actor.prevPos.z + (sp7C.z * var_fv1); + + if (BgCheck_EntityLineTest2(&play->colCtx, &this->actor.world.pos, &sp7C, &sp70, &entityPoly, true, false, + false, true, &entityBgId, &this->actor)) { + if (ABS_ALT(entityPoly->normal.y) < 0x258) { + s32 var_v1_2; // sp54 + + entityNormalX = COLPOLY_GET_NORMAL(entityPoly->normal.x); + entityNormalY = COLPOLY_GET_NORMAL(entityPoly->normal.y); + entityNormalZ = COLPOLY_GET_NORMAL(entityPoly->normal.z); + + temp_fv0_2 = Math3D_UDistPlaneToPos(entityNormalX, entityNormalY, entityNormalZ, entityPoly->dist, + &this->actor.world.pos); + + sp70.x = this->actor.world.pos.x - ((temp_fv0_2 + 1.0f) * entityNormalX); + sp70.z = this->actor.world.pos.z - ((temp_fv0_2 + 1.0f) * entityNormalZ); + sp70.y = this->actor.world.pos.y + 268 * 0.1f; + + temp_fv1_2 = this->actor.world.pos.y - + BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp88, &this->actor, &sp70); + if ((temp_fv1_2 >= -11.0f) && (temp_fv1_2 <= 0.0f)) { + var_v1_2 = sPlayerPrevFloorProperty == FLOOR_PROPERTY_6; + if (!var_v1_2) { + if (SurfaceType_GetWallFlags(&play->colCtx, entityPoly, entityBgId) & WALL_FLAG_3) { + var_v1_2 = true; + } + } + + func_80837CEC(play, this, entityPoly, temp_fv0_2, + var_v1_2 ? &gPlayerAnim_link_normal_Fclimb_startB + : &gPlayerAnim_link_normal_fall); + if (var_v1_2) { + func_80832558(play, this, func_80837C20); + + this->actor.shape.rot.y = this->currentYaw += 0x8000; + this->stateFlags1 |= PLAYER_STATE1_200000; + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | + ANIM_FLAG_NOMOVE | ANIM_FLAG_80); + this->unk_AE8 = -1; + this->unk_AE7 = var_v1_2; + } else { + this->stateFlags1 |= PLAYER_STATE1_2000; + this->stateFlags1 &= ~PLAYER_STATE1_20000; + } + + Player_PlaySfx(this, NA_SE_PL_SLIPDOWN); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); + return true; + } + } + } + } + } + + return false; +} + +void func_808381A0(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + Player_SetAction(play, this, func_8084F3DC, 0); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 1.3f); +} + +Vec3f D_8085D148 = { 0.0f, 50.0f, 0.0f }; + +s32 func_808381F8(PlayState* play, Player* this) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + f32 yIntersect; + + Player_TranslateAndRotateY(this, &this->actor.prevPos, &D_8085D148, &pos); + + yIntersect = BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos); + + return fabsf(yIntersect - this->actor.world.pos.y) < 10.0f; +} + +Vec3f D_8085D154 = { 0.0f, 0.0f, 100.0f }; + +void func_8083827C(Player* this, PlayState* play) { + s32 temp_t0; // sp64 + CollisionPoly* sp60; + s32 sp5C; + WaterBox* sp58; + Vec3f sp4C; + f32 sp48; + f32 sp44; + + this->fallDistance = this->fallStartHeight - (s32)this->actor.world.pos.y; + if (!(this->stateFlags1 & (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000)) && + ((this->stateFlags1 & PLAYER_STATE1_80000000) || + !(this->stateFlags3 & (PLAYER_STATE3_200 | PLAYER_STATE3_2000))) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + if (func_80835428(play, this)) { + return; + } + + if (sPlayerPrevFloorProperty == FLOOR_PROPERTY_8) { + this->actor.world.pos.x = this->actor.prevPos.x; + this->actor.world.pos.z = this->actor.prevPos.z; + return; + } + + if ((this->stateFlags3 & PLAYER_STATE3_2) || (this->skelAnime.moveFlags & ANIM_FLAG_80)) { + return; + } + + if ((func_8084C16C == this->actionFunc) || (func_8084C94C == this->actionFunc) || + (func_8084CA24 == this->actionFunc) || (func_80857BE8 == this->actionFunc) || + (func_808546D0 == this->actionFunc) || (func_80854800 == this->actionFunc)) { + return; + } + + if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_7) || (this->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) || + ((this->skelAnime.moveFlags & ANIM_FLAG_8) && func_808381F8(play, this))) { + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); + if (this->linearVelocity > 0.0f) { + Player_StopHorizontalMovement(this); + } + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH; + return; + } + + temp_t0 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y); + Player_SetAction(play, this, func_8084C16C, 1); + func_8082DD2C(play, this); + + this->floorSfxOffset = this->unk_D66; + if ((this->transformation != PLAYER_FORM_GORON) && + ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0)) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_LEAVE)) { + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + if ((sPlayerPrevFloorProperty != FLOOR_PROPERTY_6) && (sPlayerPrevFloorProperty != FLOOR_PROPERTY_9) && + (D_80862B18 > 20.0f) && (this->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0)) { + if ((ABS_ALT(temp_t0) < 0x2000) && (this->linearVelocity > 3.0f)) { + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + if (((this->transformation == PLAYER_FORM_ZORA) && + CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || + ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_11) && + (this->transformation != PLAYER_FORM_GORON) && + (this->transformation != PLAYER_FORM_DEKU))) { + + sp48 = func_80835CD8(play, this, &D_8085D154, &sp4C, &sp60, &sp5C); + sp44 = this->actor.world.pos.y; + + if (WaterBox_GetSurface1(play, &play->colCtx, sp4C.x, sp4C.z, &sp44, &sp58) && + ((sp44 - sp48) > 50.0f)) { + func_80834DB8(this, &gPlayerAnim_link_normal_run_jump_water_fall, 6.0f, play); + Player_SetAction(play, this, func_8084C94C, 0); + return; + } + } + } + func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP); + return; + } + } + } + } + + // Checking if the ledge is tall enough for Player to hang from + if ((sPlayerPrevFloorProperty == FLOOR_PROPERTY_9) || (D_80862B18 <= this->ageProperties->unk_34) || + !func_80837DEC(this, play)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait); + } + } else { + this->fallStartHeight = this->actor.world.pos.y; + this->remainingHopsCounter = 5; + } +} + +s32 func_8083868C(PlayState* play, Player* this) { + s32 camMode; + Camera* camera; + + if (this->unk_AA5 == PLAYER_UNKAA5_3) { + if (func_800B7118(this)) { + if (this->transformation == PLAYER_FORM_HUMAN) { + camMode = CAM_MODE_SLINGSHOT; + } else if (this->transformation == PLAYER_FORM_DEKU) { + camMode = CAM_MODE_DEKUSHOOT; + } else { + camMode = CAM_MODE_BOWARROW; + } + } else { + camMode = CAM_MODE_ZORAFIN; + } + } else { + camMode = CAM_MODE_FIRSTPERSON; + } + + camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN) + : Play_GetCamera(play, ((EnTest3*)this)->subCamId); + + return Camera_ChangeMode(camera, camMode); +} + +void Player_StopCutscene(Player* this) { + if (this->csId > CS_ID_NONE) { + CutsceneManager_Stop(this->csId); + this->csId = CS_ID_NONE; + } +} + +s32 func_808387A0(PlayState* play, Player* this) { + if (this->unk_AA5 == PLAYER_UNKAA5_4) { + Player_StopCutscene(this); + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + Player_SetAction(play, this, func_8085B08C, 0); + if (this->doorBgCamIndex != 0) { + this->stateFlags1 |= PLAYER_STATE1_20000000; + } + func_8082DC38(this); + + return true; + } + return false; +} + +void func_80838830(Player* this, s16 objectId) { + s32 pad[2]; + + if (objectId != OBJECT_UNSET_0) { + this->giObjectLoading = true; + osCreateMesgQueue(&this->giObjectLoadQueue, &this->giObjectLoadMsg, 1); + DmaMgr_SendRequestImpl(&this->giObjectDmaRequest, this->giObjectSegment, gObjectTable[objectId].vromStart, + gObjectTable[objectId].vromEnd - gObjectTable[objectId].vromStart, 0, + &this->giObjectLoadQueue, NULL); + } +} + +PlayerAnimationHeader* D_8085D160[PLAYER_FORM_MAX] = { + &gPlayerAnim_pz_maskoffstart, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_pg_maskoffstart, // PLAYER_FORM_GORON + &gPlayerAnim_pz_maskoffstart, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_maskoffstart, // PLAYER_FORM_DEKU + &gPlayerAnim_cl_setmask, // PLAYER_FORM_HUMAN +}; + +void func_808388B8(PlayState* play, Player* this, PlayerTransformation playerForm) { + func_8082DE50(play, this); + func_80831760(play, this, func_808553F4, 0); + func_8082E4A4(play, this, D_8085D160[this->transformation]); + gSaveContext.save.playerForm = playerForm; + this->stateFlags1 |= PLAYER_STATE1_2; + + D_80862B50 = play->envCtx.lightSettings; + this->actor.velocity.y = 0.0f; + Actor_DeactivateLens(play); +} + +void func_808389BC(PlayState* play, Player* this) { + func_80831760(play, this, func_80855AF4, 0); + func_8082E4A4(play, this, &gPlayerAnim_cl_setmask); + this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000); + func_8082DAD4(this); +} + +void func_80838A20(PlayState* play, Player* this) { + func_80831760(play, this, func_80855B9C, 0); + func_8082DB90(play, this, &gPlayerAnim_cl_maskoff); + this->currentMask = PLAYER_MASK_NONE; + this->stateFlags1 |= (PLAYER_STATE1_100 | PLAYER_STATE1_20000000); + func_8082DAD4(this); + Magic_Reset(play); +} + +u8 sPlayerMass[PLAYER_FORM_MAX] = { + 100, // PLAYER_FORM_FIERCE_DEITY + 200, // PLAYER_FORM_GORON + 80, // PLAYER_FORM_ZORA + 20, // PLAYER_FORM_DEKU + 50, // PLAYER_FORM_HUMAN +}; + +PlayerAnimationHeader* D_8085D17C[PLAYER_FORM_MAX] = { + &gPlayerAnim_link_normal_okarina_start, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_pg_gakkistart, // PLAYER_FORM_GORON + &gPlayerAnim_pz_gakkistart, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_gakkistart, // PLAYER_FORM_DEKU + &gPlayerAnim_link_normal_okarina_start, // PLAYER_FORM_HUMAN +}; +PlayerAnimationHeader* D_8085D190[PLAYER_FORM_MAX] = { + &gPlayerAnim_link_normal_okarina_swing, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_pg_gakkiplay, // PLAYER_FORM_GORON + &gPlayerAnim_pz_gakkiplay, // PLAYER_FORM_ZORA + &gPlayerAnim_pn_gakkiplay, // PLAYER_FORM_DEKU + &gPlayerAnim_link_normal_okarina_swing, // PLAYER_FORM_HUMAN +}; + +u8 D_8085D1A4[PLAYER_IA_MAX] = { + GI_NONE, // PLAYER_IA_NONE + GI_NONE, // PLAYER_IA_LAST_USED + GI_NONE, // PLAYER_IA_FISHING_ROD + GI_SWORD_KOKIRI, // PLAYER_IA_SWORD_KOKIRI + GI_SWORD_RAZOR, // PLAYER_IA_SWORD_RAZOR + GI_SWORD_GILDED, // PLAYER_IA_SWORD_GILDED + GI_SWORD_GREAT_FAIRY, // PLAYER_IA_SWORD_TWO_HANDED + GI_STICKS_1, // PLAYER_IA_STICK + GI_SWORD_KOKIRI, // PLAYER_IA_ZORA_FINS + GI_QUIVER_30, // PLAYER_IA_BOW + GI_ARROW_FIRE, // PLAYER_IA_BOW_FIRE + GI_ARROW_ICE, // PLAYER_IA_BOW_ICE + GI_ARROW_LIGHT, // PLAYER_IA_BOW_LIGHT + GI_HOOKSHOT, // PLAYER_IA_HOOKSHOT + GI_BOMBS_1, // PLAYER_IA_BOMB + GI_POWDER_KEG, // PLAYER_IA_POWDER_KEG + GI_BOMBCHUS_10, // PLAYER_IA_BOMBCHU + GI_40, // PLAYER_IA_11 + GI_NUTS_1, // PLAYER_IA_NUT + GI_PICTO_BOX, // PLAYER_IA_PICTO_BOX + GI_OCARINA, // PLAYER_IA_OCARINA + GI_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY + GI_FISH, // PLAYER_IA_BOTTLE_FISH + GI_75, // PLAYER_IA_BOTTLE_SPRING_WATER + GI_ICE_TRAP, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER + GI_ZORA_EGG, // PLAYER_IA_BOTTLE_ZORA_EGG + GI_GOLD_DUST, // PLAYER_IA_BOTTLE_DEKU_PRINCESS + GI_6C, // PLAYER_IA_BOTTLE_GOLD_DUST + GI_SEAHORSE, // PLAYER_IA_BOTTLE_1C + GI_MUSHROOM, // PLAYER_IA_BOTTLE_SEAHORSE + GI_HYLIAN_LOACH, // PLAYER_IA_BOTTLE_MUSHROOM + GI_DEKU_PRINCESS, // PLAYER_IA_BOTTLE_HYLIAN_LOACH + GI_BUG, // PLAYER_IA_BOTTLE_BUG + GI_POE, // PLAYER_IA_BOTTLE_POE + GI_BIG_POE, // PLAYER_IA_BOTTLE_BIG_POE + GI_POTION_RED, // PLAYER_IA_BOTTLE_POTION_RED + GI_POTION_BLUE, // PLAYER_IA_BOTTLE_POTION_BLUE + GI_POTION_GREEN, // PLAYER_IA_BOTTLE_POTION_GREEN + GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK + GI_MILK_HALF, // PLAYER_IA_BOTTLE_MILK_HALF + GI_CHATEAU, // PLAYER_IA_BOTTLE_CHATEAU + GI_FAIRY, // PLAYER_IA_BOTTLE_FAIRY + GI_MOON_TEAR, // PLAYER_IA_MOON_TEAR + GI_DEED_LAND, // PLAYER_IA_DEED_LAND + GI_ROOM_KEY, // PLAYER_IA_ROOM_KEY + GI_LETTER_TO_KAFEI, // PLAYER_IA_LETTER_TO_KAFEI + GI_MAGIC_BEANS, // PLAYER_IA_MAGIC_BEANS + GI_DEED_SWAMP, // PLAYER_IA_DEED_SWAMP + GI_DEED_MOUNTAIN, // PLAYER_IA_DEED_MOUNTAIN + GI_DEED_OCEAN, // PLAYER_IA_DEED_OCEAN + GI_MOON_TEAR, // PLAYER_IA_32 + GI_LETTER_TO_MAMA, // PLAYER_IA_LETTER_MAMA + GI_A7, // PLAYER_IA_34 + GI_A8, // PLAYER_IA_35 + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_PENDANT_OF_MEMORIES + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_37 + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_38 + GI_PENDANT_OF_MEMORIES, // PLAYER_IA_39 + GI_MASK_TRUTH, // PLAYER_IA_MASK_TRUTH + GI_MASK_KAFEIS_MASK, // PLAYER_IA_MASK_KAFEIS_MASK + GI_MASK_ALL_NIGHT, // PLAYER_IA_MASK_ALL_NIGHT + GI_MASK_BUNNY, // PLAYER_IA_MASK_BUNNY + GI_MASK_KEATON, // PLAYER_IA_MASK_KEATON + GI_MASK_GARO, // PLAYER_IA_MASK_GARO + GI_MASK_ROMANI, // PLAYER_IA_MASK_ROMANI + GI_MASK_CIRCUS_LEADER, // PLAYER_IA_MASK_CIRCUS_LEADER + GI_MASK_POSTMAN, // PLAYER_IA_MASK_POSTMAN + GI_MASK_COUPLE, // PLAYER_IA_MASK_COUPLE + GI_MASK_GREAT_FAIRY, // PLAYER_IA_MASK_GREAT_FAIRY + GI_MASK_GIBDO, // PLAYER_IA_MASK_GIBDO + GI_MASK_DON_GERO, // PLAYER_IA_MASK_DON_GERO + GI_MASK_KAMARO, // PLAYER_IA_MASK_KAMARO + GI_MASK_CAPTAIN, // PLAYER_IA_MASK_CAPTAIN + GI_MASK_STONE, // PLAYER_IA_MASK_STONE + GI_MASK_BREMEN, // PLAYER_IA_MASK_BREMEN + GI_MASK_BLAST, // PLAYER_IA_MASK_BLAST + GI_MASK_SCENTS, // PLAYER_IA_MASK_SCENTS + GI_MASK_GIANT, // PLAYER_IA_MASK_GIANT + GI_MASK_FIERCE_DEITY, // PLAYER_IA_MASK_FIERCE_DEITY + GI_MASK_GORON, // PLAYER_IA_MASK_GORON + GI_MASK_ZORA, // PLAYER_IA_MASK_ZORA + GI_MASK_DEKU, // PLAYER_IA_MASK_DEKU + GI_LENS, // PLAYER_IA_LENS +}; + +PlayerAnimationHeader* D_8085D1F8[] = { + &gPlayerAnim_link_normal_give_other, + &gPlayerAnim_link_normal_take_out, // Hold up cutscene item; "this item doesn't work here" +}; + +s32 func_80838A90(Player* this, PlayState* play) { + PlayerBottle bottleAction; + + if (this->unk_AA5 != PLAYER_UNKAA5_0) { + if (!(this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) && + !(this->stateFlags1 & PLAYER_STATE1_8000000) && !(this->stateFlags1 & PLAYER_STATE1_800000) && + !(this->stateFlags3 & PLAYER_STATE3_8) && !(this->skelAnime.moveFlags & ANIM_FLAG_8)) { + Player_StopCutscene(this); + func_80833AA0(this, play); + return true; + } + if (!func_808387A0(play, this)) { + if (this->unk_AA5 == PLAYER_UNKAA5_5) { + if ((this->itemAction >= PLAYER_IA_MASK_MIN) && (this->itemAction <= PLAYER_IA_MASK_MAX)) { + PlayerMask maskId = GET_MASK_FROM_IA(this->itemAction); + + this->prevMask = this->currentMask; + if (((maskId == this->currentMask) != 0) || (this->itemAction < PLAYER_IA_MASK_GIANT) || + ((this->itemAction == PLAYER_IA_MASK_GIANT) && (this->transformation != PLAYER_FORM_HUMAN))) { + if (maskId == this->currentMask) { + this->currentMask = PLAYER_MASK_NONE; + } else { + this->currentMask = maskId; + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + func_80838A20(play, this); + return true; + } + + func_808388B8(play, this, PLAYER_FORM_HUMAN); + } else { + this->currentMask = maskId; + if (this->currentMask == PLAYER_MASK_GIANT) { + func_808389BC(play, this); + return true; + } + func_808388B8(play, this, this->itemAction - PLAYER_IA_MASK_FIERCE_DEITY); + } + gSaveContext.save.equippedMask = this->currentMask; + } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED) || + (this->itemAction == PLAYER_IA_PICTO_BOX) || + ((this->itemAction != this->unk_B2B) && + ((this->itemAction == PLAYER_IA_BOTTLE_BIG_POE) || + ((this->itemAction >= PLAYER_IA_BOTTLE_ZORA_EGG) && + (this->itemAction <= PLAYER_IA_BOTTLE_HYLIAN_LOACH)) || + (this->itemAction > PLAYER_IA_BOTTLE_FAIRY) || + ((this->talkActor != NULL) && (this->exchangeItemId > PLAYER_IA_NONE) && + (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) && + (this->itemAction == PLAYER_IA_MAGIC_BEANS)) || + ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) && + (Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE))))))) { + Actor* talkActor; + s32 heldItemTemp = this->itemAction; + + Player_StopCutscene(this); + this->itemAction = PLAYER_IA_NONE; + func_80831760(play, this, func_80853A5C, 0); + talkActor = this->talkActor; + this->itemAction = heldItemTemp; + this->csId = CS_ID_NONE; + + if ((talkActor != NULL) && (((this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) && + (this->itemAction == PLAYER_IA_MAGIC_BEANS)) || + ((this->exchangeItemId != PLAYER_IA_MAGIC_BEANS) && + (this->exchangeItemId > PLAYER_IA_NONE)))) { + this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_40); + if (this->exchangeItemId == PLAYER_IA_MAGIC_BEANS) { + Inventory_ChangeAmmo(ITEM_MAGIC_BEANS, -1); + func_80831760(play, this, func_8084B4A8, 0); + this->currentYaw = talkActor->yawTowardsPlayer + 0x8000; + this->actor.shape.rot.y = this->currentYaw; + if (talkActor->xzDistToPlayer < 40.0f) { + func_8082DB90(play, this, &gPlayerAnim_link_normal_backspace); + func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE); + } else { + func_8082E438(play, this, D_8085BE84[31][this->modelAnimType]); + } + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_AE8 = 80; + this->unk_AE7 = -1; + this->targetedActor = this->talkActor; + } else { + this->csId = CS_ID_GLOBAL_TALK; + } + + talkActor->flags |= ACTOR_FLAG_TALK_REQUESTED; + this->actor.textId = 0; + this->targetedActor = this->talkActor; + } else { + this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000 | PLAYER_STATE1_40); + this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]; + this->unk_AE7 = 1; + this->actor.textId = 0xFE; + } + this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; + this->exchangeItemId = this->itemAction; + if (this->unk_AE7 >= 0) { + Player_AnimationPlayOnce(play, this, D_8085D1F8[this->unk_AE7]); + } + func_8082DAD4(this); + return true; + } else { + bottleAction = Player_BottleFromIA(this, this->itemAction); + + if (bottleAction > PLAYER_BOTTLE_NONE) { + Player_StopCutscene(this); + if (bottleAction >= PLAYER_BOTTLE_FAIRY) { + func_80831760(play, this, func_80853754, 0); + func_8082DB90(play, this, &gPlayerAnim_link_bottle_bug_out); + } else if ((bottleAction > PLAYER_BOTTLE_EMPTY) && (bottleAction < PLAYER_BOTTLE_POE)) { + func_80831760(play, this, func_80853850, 0); + func_8082DB90(play, this, &gPlayerAnim_link_bottle_fish_out); + this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]; + } else { + func_80831760(play, this, func_80853194, 0); + func_8082E4A4(play, this, + (this->transformation == PLAYER_FORM_DEKU) + ? &gPlayerAnim_pn_drinkstart + : &gPlayerAnim_link_bottle_drink_demo_start); + } + } else { + Actor* actorUnkA90 = this->unk_A90; + + if ((actorUnkA90 == NULL) || (actorUnkA90->id == ACTOR_EN_ZOT) || + (actorUnkA90->csId == CS_ID_NONE)) { + if (!func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA])) { + return false; + } + } else { + this->csId = CS_ID_NONE; + } + func_80831760(play, this, func_8085269C, 0); + if ((this->skelAnime.playSpeed < 0.0f) || + ((this->skelAnime.animation != D_8085D17C[this->transformation]) && + (this->skelAnime.animation != D_8085D190[this->transformation]))) { + func_8082DB90(play, this, D_8085D17C[this->transformation]); + } + this->stateFlags2 |= PLAYER_STATE2_8000000; + if (actorUnkA90 != NULL) { + this->actor.flags |= ACTOR_FLAG_20000000; + if (actorUnkA90->id == ACTOR_EN_ZOT) { + this->unk_A94 = -1.0f; + } else { + actorUnkA90->flags |= ACTOR_FLAG_20000000; + } + } + } + } + } else { + if (func_8083868C(play, this) != CAM_MODE_NORMAL) { + Player_StopCutscene(this); + if (!(this->stateFlags1 & PLAYER_STATE1_800000)) { + Player_SetAction(play, this, func_8084E724, 1); + this->unk_AE8 = 13; + func_80836D8C(this); + if (this->unk_AA5 == PLAYER_UNKAA5_2) { + play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; + } + } + this->stateFlags1 |= PLAYER_STATE1_100000; + play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + Player_StopHorizontalMovement(this); + return true; + } + this->unk_AA5 = PLAYER_UNKAA5_0; + play_sound(NA_SE_SY_ERROR); + return false; + } + this->stateFlags1 |= (PLAYER_STATE1_20000000 | PLAYER_STATE1_10000000); + func_8082DAD4(this); + } + return true; + } + return false; +} + +s32 func_808391D8(Player* this, PlayState* play) { + if (gSaveContext.save.saveInfo.playerData.health != 0) { + Actor* talkActor = this->talkActor; + Actor* targetedActor = this->targetedActor; + Actor* var_a1 = NULL; + s32 var_t1 = false; + s32 var_t2 = false; + + if (this->tatlActor != NULL) { + var_t2 = + (targetedActor != NULL) && (CHECK_FLAG_ALL(targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) || + (targetedActor->hintId != TATL_HINT_ID_NONE)); + + if (var_t2 || (this->tatlTextId != 0)) { + //! @bug The comparison `((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000)` always evaluates to `true` + var_t1 = (this->tatlTextId < 0) && ((ABS_ALT(this->tatlTextId) & 0xFF00) != 0x10000); + + if (var_t1 || !var_t2) { + var_a1 = this->tatlActor; + if (var_t1) { + targetedActor = NULL; + talkActor = NULL; + } + } else { + var_a1 = targetedActor; + } + } + } + + if ((talkActor != NULL) || (var_a1 != NULL)) { + if ((targetedActor == NULL) || (targetedActor == talkActor) || (targetedActor == var_a1)) { + if (!(this->stateFlags1 & PLAYER_STATE1_800) || + ((this->heldActor != NULL) && + (var_t1 || (talkActor == this->heldActor) || (var_a1 == this->heldActor) || + ((talkActor != NULL) && (talkActor->flags & ACTOR_FLAG_10000))))) { + if (((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (this->stateFlags1 & PLAYER_STATE1_800000) || func_801242B4(this))) { + if (talkActor != NULL) { + if ((targetedActor == NULL) || (targetedActor == talkActor)) { + this->stateFlags2 |= PLAYER_STATE2_2; + } + + if (!CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + return false; + } + + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) || + (talkActor->flags & ACTOR_FLAG_10000)) { + var_a1 = NULL; + } else if (var_a1 == NULL) { + return false; + } + } + + if (var_a1 != NULL) { + if (!var_t1) { + this->stateFlags2 |= PLAYER_STATE2_200000; + if (!CutsceneManager_IsNext(CS_ID_GLOBAL_TALK) || + !CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP)) { + return false; + } + } + + talkActor = var_a1; + this->talkActor = NULL; + + if (var_t1 || !var_t2) { + var_a1->textId = ABS_ALT(this->tatlTextId); + } else if (var_a1->hintId != 0xFF) { + var_a1->textId = var_a1->hintId + 0x1900; + } + } + + this->currentMask = D_80862B2C; + gSaveContext.save.equippedMask = this->currentMask; + Player_TalkWithPlayer(play, talkActor); + return true; + } + } + } + } + } + + return false; +} + +s32 func_80839518(Player* this, PlayState* play) { + if (this->unk_AA5 != PLAYER_UNKAA5_0) { + func_80838A90(this, play); + return true; + } else if ((this->targetedActor != NULL) && + (CHECK_FLAG_ALL(this->targetedActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000) || + (this->targetedActor->hintId != TATL_HINT_ID_NONE))) { + this->stateFlags2 |= PLAYER_STATE2_200000; + } else if ((this->tatlTextId == 0) && !func_80123420(this) && + CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_CUP) && + !func_80831814(this, play, PLAYER_UNKAA5_1)) { + play_sound(NA_SE_SY_ERROR); + } + return false; +} + +// Jumpslash/Jumpkick start +void func_808395F0(PlayState* play, Player* this, PlayerMeleeWeaponAnimation meleeWeaponAnim, f32 linearVelocity, + f32 yVelocity) { + if (this->transformation == PLAYER_FORM_ZORA) { + linearVelocity *= 1.1f; + meleeWeaponAnim = PLAYER_MWA_ZORA_JUMPKICK_START; + yVelocity *= 0.9f; + } + + func_80833864(play, this, meleeWeaponAnim); + Player_SetAction(play, this, func_8084CB58, 0); + this->stateFlags3 |= PLAYER_STATE3_2; + this->linearVelocity = linearVelocity; + this->currentYaw = this->actor.shape.rot.y; + this->actor.velocity.y = yVelocity; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + Player_AnimSfx_PlayFloorJump(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L); +} + +s32 func_808396B8(PlayState* play, Player* this) { + if (!(this->stateFlags1 & PLAYER_STATE1_400000) && + (((this->actor.id != ACTOR_PLAYER) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) || + ((Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && + ((this->transformation != PLAYER_FORM_GORON) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) && + ((this->transformation != PLAYER_FORM_ZORA) || !(this->stateFlags1 & PLAYER_STATE1_2000000)) && + (D_80862B48 != 0)))) { + return true; + } + + return false; +} + +s32 func_80839770(Player* this, PlayState* play) { + if (func_808396B8(play, this)) { + if ((this->transformation != PLAYER_FORM_GORON) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) { + func_808395F0(play, this, + (this->transformation == PLAYER_FORM_ZORA) ? PLAYER_MWA_ZORA_JUMPKICK_START + : PLAYER_MWA_JUMPSLASH_START, + 3.0f, 4.5f); + return true; + } + } + return false; +} + +s32 func_80839800(Player* this, PlayState* play) { + if ((this->unk_AE3[this->unk_ADE] == 0) && (sPlayerCurrentFloorType != FLOOR_TYPE_7)) { + func_80836B3C(play, this, 0.0f); + return true; + } + return false; +} + +void func_80839860(Player* this, PlayState* play, s32 arg2) { + s32 pad; + f32 speed = (!(arg2 & 1) ? 5.8f : 3.5f); + + if (this->currentBoots == PLAYER_BOOTS_GIANT) { + speed /= 2.0f; + } + + //! FAKE + if (arg2 == 2) {} + + func_80834D50(play, this, D_8085C2A4[arg2].unk_0, speed, NA_SE_VO_LI_SWORD_N); + + this->unk_AE8 = 1; + this->unk_AE7 = arg2; + + this->currentYaw = this->actor.shape.rot.y + (arg2 << 0xE); + this->linearVelocity = !(arg2 & 1) ? 6.0f : 8.5f; + + this->stateFlags2 |= PLAYER_STATE2_80000; + Player_PlaySfx(this, ((arg2 << 0xE) == 0x8000) ? NA_SE_PL_ROLL : NA_SE_PL_SKIP); +} + +void func_80839978(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->itemAction = PLAYER_IA_OCARINA; + func_80831760(play, this, func_8084AC84, 0); + func_8082DB60(play, this, &gPlayerAnim_clink_normal_okarina_walk); + func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_200); + this->stateFlags3 |= PLAYER_STATE3_20000000; + this->unk_B48 = this->linearVelocity; + Audio_PlayFanfare(NA_BGM_BREMEN_MARCH); + } +} + +void func_80839A10(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->itemAction = PLAYER_IA_NONE; + func_80831760(play, this, func_8084AEEC, 0); + func_8082DB60(play, this, &gPlayerAnim_alink_dance_loop); + this->stateFlags2 |= PLAYER_STATE2_2000000; + Audio_PlayFanfare(NA_BGM_KAMARO_DANCE); + } +} + +s32 func_80839A84(PlayState* play, Player* this) { + if (this->transformation == PLAYER_FORM_DEKU) { + if (func_80836DC0(play, this)) { + return true; + } + } else { + return false; + } + + Player_SetAction(play, this, func_808573A4, 0); + this->stateFlags1 &= ~(PLAYER_STATE1_20000 | PLAYER_STATE1_40000000); + this->unk_ADC = 4; + func_808373A4(play, this); + return true; +} + +s32 func_80839B18(Player* this, PlayState* play) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && + (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sPlayerCurrentFloorType != FLOOR_TYPE_7) && + (D_80862B40 != FLOOR_EFFECT_1)) { + s32 temp_a2 = this->unk_AE3[this->unk_ADE]; + + if (temp_a2 <= 0) { + if (func_8082FBE8(this)) { + if (this->actor.category != ACTORCAT_PLAYER) { + if (temp_a2 < 0) { + func_80834DB8(this, &gPlayerAnim_link_normal_jump, REG(69) / 100.0f, play); + } else { + func_80836B3C(play, this, 0.0f); + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) && + (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && func_80832090(this) && + (this->transformation != PLAYER_FORM_GORON)) { + func_808395F0(play, this, PLAYER_MWA_JUMPSLASH_START, 5.0f, 5.0f); + } else if (!func_80839A84(play, this)) { + func_80836B3C(play, this, 0.0f); + } + + return true; + } + } else { + func_80839860(this, play, temp_a2); + return true; + } + } + + return false; +} + +void func_80839CD8(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + f32 var_fv0 = this->unk_B38 - 3.0f; + + if (var_fv0 < 0.0f) { + var_fv0 += 29.0f; + } + + if (var_fv0 < 14.0f) { + anim = D_8085BE84[PLAYER_ANIMGROUP_17][this->modelAnimType]; + var_fv0 = 11.0f - var_fv0; + if (var_fv0 < 0.0f) { + var_fv0 = -var_fv0 * 1.375f; + } + var_fv0 = var_fv0 / 11.0f; + } else { + anim = D_8085BE84[PLAYER_ANIMGROUP_18][this->modelAnimType]; + var_fv0 = 26.0f - var_fv0; + if (var_fv0 < 0.0f) { + var_fv0 = -var_fv0 * 2; + } + var_fv0 = var_fv0 / 12.0f; + } + + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + 4.0f * var_fv0); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80839E3C(Player* this, PlayState* play) { + func_808369F4(this, play); + func_80839CD8(this, play); +} + +void func_80839E74(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849FE0, 1); + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80839ED0(Player* this, PlayState* play) { + if (!(this->stateFlags3 & PLAYER_STATE3_80) && (func_80852B28 != this->actionFunc) && !func_8083213C(this)) { + func_80836D8C(this); + if (!(this->stateFlags1 & PLAYER_STATE1_40)) { + if (func_801242B4(this)) { + func_808353DC(play, this); + } else { + func_80836988(this, play); + } + } + if (this->unk_AA5 < PLAYER_UNKAA5_5) { + this->unk_AA5 = PLAYER_UNKAA5_0; + } + } + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000); +} + +s32 func_80839F98(PlayState* play, Player* this) { + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + if (this->linearVelocity != 0.0f) { + func_80836B3C(play, this, 0.0f); + return true; + } + func_80836AD8(play, this); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, 2.0f / 3.0f, 0.0f, 7.0f, + ANIMMODE_ONCE, 0.0f); + return true; + } + return false; +} + +// Toggles swimming/walking underwater as Zora +void func_8083A04C(Player* this) { + if (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + } + if (func_808508C8 == this->actionFunc) { + this->unk_AE8 = 20; + } + } else { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + this->currentBoots = PLAYER_BOOTS_ZORA_UNDERWATER; + } + } +} + +s32 func_8083A0CC(Player* this, PlayState* play) { + if (!D_80862B04 && (this->transformation == PLAYER_FORM_ZORA)) { + func_8083A04C(this); + } + return false; +} + +s32 func_8083A114(Player* this, PlayState* play) { + if (!D_80862B04 && !(this->stateFlags1 & PLAYER_STATE1_800000) && !func_8082FB68(this)) { + if ((this->transformation == PLAYER_FORM_ZORA) && (this->stateFlags1 & PLAYER_STATE1_8000000)) { + func_8083A04C(this); + } else if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && !func_8082FB68(this)) { + if (this->transformation == PLAYER_FORM_GORON) { + if (func_80839F98(play, this)) { + return true; + } + } else if (func_80839A84(play, this) || func_80839800(this, play)) { + return true; + } + + if ((this->putAwayCountdown == 0) && (this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) && + (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { + func_80831990(play, this, ITEM_NONE); + } else { + this->stateFlags2 ^= PLAYER_STATE2_100000; + } + } + } + + return false; +} + +s32 func_8083A274(Player* this, PlayState* play) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R) && (this->unk_AA5 == PLAYER_UNKAA5_0) && + (play->unk_1887C == 0)) { + if (Player_IsGoronOrDeku(this) || + ((((this->transformation == PLAYER_FORM_ZORA) && !(this->stateFlags1 & PLAYER_STATE1_2000000)) || + ((this->transformation == PLAYER_FORM_HUMAN) && (this->currentShield != PLAYER_SHIELD_NONE))) && + !func_80123434(this) && (this->targetedActor == NULL))) { + func_8082DC38(this); + func_8082DCA0(play, this); + if (Player_SetAction(play, this, func_8084B5C0, 0)) { + this->stateFlags1 |= PLAYER_STATE1_400000; + if (this->transformation != PLAYER_FORM_GORON) { + PlayerAnimationHeader* anim; + f32 endFrame; + + if (!Player_IsGoronOrDeku(this)) { + Player_SetModelsForHoldingShield(this); + anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType]; + } else { + anim = (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_gurd + : &gPlayerAnim_clink_normal_defense_ALL; + } + + if (anim != this->skelAnime.animation) { + if (func_80123420(this)) { + this->unk_B3C = 1.0f; + } else { + this->unk_B3C = 0.0f; + func_8082FC60(this); + } + this->upperLimbRot.x = 0; + this->upperLimbRot.y = 0; + this->upperLimbRot.z = 0; + } + + endFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, + (anim == &gPlayerAnim_pn_gurd) ? 0.0f : endFrame, endFrame, ANIMMODE_ONCE, + 0.0f); + } + func_80830AE8(this); + } + + return true; + } + } + + return false; +} + +s32 func_8083A4A4(Player* this, f32* arg1, s16* arg2, f32 arg3) { + s16 yaw = this->currentYaw - *arg2; + + if (ABS_ALT(yaw) > 0x6000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, arg3)) { + *arg1 = 0.0f; + *arg2 = this->currentYaw; + } else { + return true; + } + } + return false; +} + +void func_8083A548(Player* this) { + if ((this->unk_ADC > 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + this->unk_ADC = -this->unk_ADC; + } +} + +s32 func_8083A580(Player* this, PlayState* play) { + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + if (!(this->stateFlags1 & PLAYER_STATE1_400000) && + (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)) { + if ((this->unk_ADC > 0) && (((this->transformation == PLAYER_FORM_ZORA)) || + ((this->unk_ADC == 1) && (this->heldItemAction != PLAYER_IA_STICK)))) { + if (this->transformation == PLAYER_FORM_ZORA) { + func_80830E30(this, play); + } else { + func_808335B0(play, this); + } + return true; + } + } + } else { + func_8083A548(this); + } + return false; +} + +s32 func_8083A658(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + Player_SetAction(play, this, func_80852B28, 0); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_light_bom); + this->unk_AA5 = PLAYER_UNKAA5_0; + return true; + } + return false; +} + +struct_8085D200 D_8085D200[] = { + { &gPlayerAnim_link_bottle_bug_miss, &gPlayerAnim_link_bottle_bug_in, 2, 3 }, + { &gPlayerAnim_link_bottle_fish_miss, &gPlayerAnim_link_bottle_fish_in, 5, 3 }, +}; + +s32 func_8083A6C0(PlayState* play, Player* this) { + if (D_80862B48 != 0) { + if (Player_GetBottleHeld(this) > PLAYER_BOTTLE_NONE) { + Player_SetAction(play, this, func_808534C0, 0); + if (this->actor.depthInWater > 12.0f) { + this->unk_AE8 = 1; + } + func_8082DB90(play, this, D_8085D200[this->unk_AE8].unk_0); + Player_PlaySfx(this, NA_SE_IT_SWORD_SWING); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); + return true; + } + return false; + } + return false; +} + +void func_8083A794(Player* this, PlayState* play) { + if ((func_8084AF9C != this->actionFunc) && (func_8084B0EC != this->actionFunc)) { + this->unk_B70 = 0; + this->unk_B34 = 0.0f; + this->unk_B38 = 0.0f; + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_2][this->modelAnimType]); + } + + Player_SetAction(play, this, func_8082FBE8(this) ? func_8084B0EC : func_8084AF9C, 1); +} + +void func_8083A844(Player* this, PlayState* play, s16 currentYaw) { + this->currentYaw = currentYaw; + this->actor.shape.rot.y = this->currentYaw; + func_8083A794(this, play); +} + +s32 func_8083A878(PlayState* play, Player* this, f32 arg2) { + WaterBox* waterBox; + f32 ySurface = this->actor.world.pos.y; + + if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &ySurface, + &waterBox)) { + ySurface -= this->actor.world.pos.y; + if (this->ageProperties->unk_24 <= ySurface) { + Player_SetAction(play, this, func_80850B18, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); + this->stateFlags1 |= (PLAYER_STATE1_8000000 | PLAYER_STATE1_20000000); + this->unk_AE8 = 20; + this->linearVelocity = 2.0f; + func_80123140(play, this); + return false; + } + } + func_80835324(play, this, arg2, this->actor.shape.rot.y); + this->stateFlags1 |= PLAYER_STATE1_20000000; + return true; +} + +/** + * Update for using telescopes. SCENE_AYASHIISHOP acts quite differently: it has a different camera mode and cannot use + * zooming. + * + * - Stick inputs move the view; shape.rot.y is used as a base position which cannot be looked too far away from. (This + * is not necessarily the same as the original angle of the spawn.) + * - A can be used to zoom (except in SCENE_AYASHIISHOP) + * - B exits, using the RESPAWN_MODE_DOWN entrance + */ +void func_8083A98C(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + Player* this = THIS; + s32 camMode; + + if (play->csCtx.state != CS_STATE_IDLE) { + return; + } + + if (DECR(this->unk_AE8) != 0) { + camMode = (play->sceneId != SCENE_AYASHIISHOP) ? CAM_MODE_FIRSTPERSON : CAM_MODE_DEKUHIDE; + + // Show controls overlay. SCENE_AYASHIISHOP does not have Zoom, so has a different one. + if (this->unk_AE8 == 1) { + Message_StartTextbox(play, (play->sceneId == SCENE_AYASHIISHOP) ? 0x2A00 : 0x5E6, NULL); + } + } else { + sPlayerControlInput = play->state.input; + if (play->view.fovy >= 25.0f) { + s16 prevFocusX = thisx->focus.rot.x; + s16 prevFocusY = thisx->focus.rot.y; + s16 inputY; + s16 inputX; + s16 newYaw; // from base position shape.rot.y + + // Pitch: + inputY = sPlayerControlInput->rel.stick_y * 4; + // Add input, clamped to prevent turning too fast + thisx->focus.rot.x += CLAMP(inputY, -0x12C, 0x12C); + // Prevent looking too far up or down + thisx->focus.rot.x = CLAMP(thisx->focus.rot.x, -0x2EE0, 0x2EE0); + + // Yaw: shape.rot.y is used as a fixed starting position + inputX = sPlayerControlInput->rel.stick_x * -4; + // Start from current position: no input -> no change + newYaw = thisx->focus.rot.y - thisx->shape.rot.y; + // Add input, clamped to prevent turning too fast + newYaw += CLAMP(inputX, -0x12C, 0x12C); + // Prevent looking too far left or right of base position + newYaw = CLAMP(newYaw, -0x3E80, 0x3E80); + thisx->focus.rot.y = thisx->shape.rot.y + newYaw; + + if (play->sceneId == SCENE_00KEIKOKU) { + f32 focusDeltaX = (s16)(thisx->focus.rot.x - prevFocusX); + f32 focusDeltaY = (s16)(thisx->focus.rot.y - prevFocusY); + + func_8019FAD8(&gSfxDefaultPos, NA_SE_PL_TELESCOPE_MOVEMENT - SFX_FLAG, + sqrtf(SQ(focusDeltaX) + SQ(focusDeltaY)) / 300.0f); + } + } + + if (play->sceneId == SCENE_AYASHIISHOP) { + camMode = CAM_MODE_DEKUHIDE; + } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { // Zoom + camMode = CAM_MODE_TARGET; + } else { + camMode = CAM_MODE_NORMAL; + } + + // Exit + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + Message_CloseTextbox(play); + + if (play->sceneId == SCENE_00KEIKOKU) { + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTRANCE(ASTRAL_OBSERVATORY, 2); + } else { + u16 entrance; + + if (play->sceneId == SCENE_AYASHIISHOP) { + entrance = ENTRANCE(CURIOSITY_SHOP, 3); + } else { + entrance = ENTRANCE(PIRATES_FORTRESS_INTERIOR, 8); + } + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = entrance; + } + + func_80169EFC(&play->state); + gSaveContext.respawnFlag = -2; + play->transitionType = TRANS_TYPE_CIRCLE; + } + } + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_TELESCOPE); + Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), camMode); +} + +// Set up using a telescope +void Player_InitMode_Telescope(PlayState* play, Player* this) { + this->actor.update = func_8083A98C; + this->actor.draw = NULL; + if (play->sceneId == SCENE_00KEIKOKU) { + this->actor.focus.rot.x = 0xBD8; + this->actor.focus.rot.y = -0x4D74; + this->unk_AE8 = 20; + } else if (play->sceneId == SCENE_AYASHIISHOP) { + this->actor.focus.rot.x = 0x9A6; + this->actor.focus.rot.y = 0x2102; + this->unk_AE8 = 2; + } else { + this->actor.focus.rot.x = 0x9A6; + this->actor.focus.rot.y = 0x2102; + this->unk_AE8 = 20; + } + play->actorCtx.flags |= ACTORCTX_FLAG_1; +} + +void Player_InitMode_B(PlayState* play, Player* this) { + func_8085B384(this, play); +} + +void Player_InitMode_D(PlayState* play, Player* this) { + if (func_8083A878(play, this, 180.0f)) { + this->unk_AE8 = -20; + } +} + +// InitModes 0xA and 0xE +void func_8083ADF0(PlayState* play, Player* this) { + this->linearVelocity = 2.0f; + gSaveContext.entranceSpeed = 2.0f; + + if (func_8083A878(play, this, 120.0f)) { + this->unk_AE8 = -15; + } +} + +void Player_InitMode_F(PlayState* play, Player* this) { + if (gSaveContext.entranceSpeed < 0.1f) { + gSaveContext.entranceSpeed = 0.1f; + } + + this->linearVelocity = gSaveContext.entranceSpeed; + if (func_8083A878(play, this, 800.0f)) { + this->unk_AE8 = -80.0f / this->linearVelocity; + if (this->unk_AE8 < -20) { + this->unk_AE8 = -20; + } + } +} + +void func_8083AECC(Player* this, s16 currentYaw, PlayState* play) { + Player_SetAction(play, this, func_8084A5C0, 1); + PlayerAnimation_CopyJointToMorph(play, &this->skelAnime); + this->unk_B38 = 0.0f; + this->unk_B34 = 0.0f; + this->currentYaw = currentYaw; +} + +void func_8083AF30(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A26C, 1); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType]); +} + +void func_8083AF8C(Player* this, s16 currentYaw, PlayState* play) { + Player_SetAction(play, this, func_8084B288, 1); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_walk, 1.0f, 0.0f, + Animation_GetLastFrame(&gPlayerAnim_link_anchor_back_walk), ANIMMODE_ONCE, -6.0f); + this->linearVelocity = 8.0f; + this->currentYaw = currentYaw; +} + +void func_8083B030(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A8E8, 1); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType]); + this->unk_B38 = 0.0f; +} + +void func_8083B090(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084B3B8, 1); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, &gPlayerAnim_link_anchor_back_brake, 6.0f / 3.0f); +} + +void func_8083B0E4(PlayState* play, Player* this, s16 currentYaw) { + this->currentYaw = currentYaw; + Player_SetAction(play, this, func_8084AB4C, 1); + this->unk_B4E = 1200; + this->unk_B4E *= D_8085C3E4; + PlayerAnimation_Change(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 1.0f, 0.0f, + 0.0f, ANIMMODE_LOOP, -6.0f); +} + +void func_8083B1A0(Player* this, PlayState* play) { + PlayerAnimationHeader* anim; + + Player_SetAction(play, this, func_80849FE0, 1); + if (this->unk_B40 < 0.5f) { + anim = D_8085BE84[PLAYER_ANIMGROUP_27][this->modelAnimType]; + } else { + anim = D_8085BE84[PLAYER_ANIMGROUP_26][this->modelAnimType]; + } + Player_AnimationPlayOnce(play, this, anim); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8083B23C(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849A9C, 1); + func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_6][this->modelAnimType]); + this->unk_AE8 = 1; +} + +void func_8083B29C(Player* this, PlayState* play) { + if (this->linearVelocity != 0.0f) { + func_8083A794(this, play); + } else { + func_8083B1A0(this, play); + } +} + +void func_8083B2E4(Player* this, PlayState* play) { + if (this->linearVelocity != 0.0f) { + func_8083A794(this, play); + } else { + func_80836988(this, play); + } +} + +void func_8083B32C(PlayState* play, Player* this, f32 arg2) { + this->stateFlags1 |= PLAYER_STATE1_40000; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + func_8082DC64(play, this); + + if (func_80837730(play, this, arg2, 500)) { + Player_PlaySfx(this, NA_SE_EV_JUMP_OUT_WATER); + } + func_80123140(play, this); +} + +s32 func_8083B3B4(PlayState* play, Player* this, Input* input) { + if ((!(this->stateFlags1 & PLAYER_STATE1_400) && !(this->stateFlags2 & PLAYER_STATE2_400) && + (this->transformation != PLAYER_FORM_ZORA)) && + ((input == NULL) || + ((((this->interactRangeActor == NULL) || (this->interactRangeActor->id != ACTOR_EN_ZOG)) && + CHECK_BTN_ALL(input->press.button, BTN_A)) && + ((ABS_ALT(this->unk_AAA) < 0x2EE0) && (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && + ((s32)SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) <= + CONVEYOR_SPEED_SLOW))))) { + if (func_8085B08C != this->actionFunc) { + Player_SetAction(play, this, func_808516B4, 0); + } + + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_swimer_swim_deep_start); + this->unk_AAA = 0; + this->stateFlags2 |= PLAYER_STATE2_400; + this->actor.velocity.y = 0.0f; + if (input != NULL) { + this->stateFlags2 |= PLAYER_STATE2_800; + Player_PlaySfx(this, NA_SE_PL_DIVE_BUBBLE); + } + + return true; + } + + if ((this->transformation != PLAYER_FORM_DEKU) && + ((this->stateFlags1 & PLAYER_STATE1_400) || + ((this->stateFlags2 & PLAYER_STATE2_400) && + (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || + (this->unk_AAA < -0x1555)))) && + ((this->actor.depthInWater - this->actor.velocity.y) < this->ageProperties->unk_30)) { + s32 temp_v0_3; + s16 sp2A; + f32 sp24; + + this->stateFlags2 &= ~PLAYER_STATE2_400; + func_8082DC64(play, this); + temp_v0_3 = func_80837730(play, this, this->actor.velocity.y, 0x1F4); + if (this->stateFlags3 & PLAYER_STATE3_8000) { + sp2A = this->unk_B86[1]; + sp24 = this->unk_B48 * 1.5f; + Player_SetAction(play, this, func_8084CA24, 1); + this->stateFlags3 |= PLAYER_STATE3_8000; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + sp24 = CLAMP_MAX(sp24, 13.5f); + this->linearVelocity = Math_CosS(this->unk_AAA) * sp24; + this->actor.velocity.y = -Math_SinS(this->unk_AAA) * sp24; + this->unk_B86[1] = sp2A; + Player_PlaySfx(this, NA_SE_EV_JUMP_OUT_WATER); + return true; + } + + if (temp_v0_3) { + Player_PlaySfx(this, NA_SE_PL_FACE_UP); + } else { + Player_PlaySfx(this, NA_SE_PL_FACE_UP); + } + + if (input != NULL) { + Player_SetAction(play, this, func_808519FC, 1); + if (this->stateFlags1 & PLAYER_STATE1_400) { + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); + } + this->unk_AE8 = 2; + } + + func_8082E438(play, this, + (this->stateFlags1 & PLAYER_STATE1_800) ? &gPlayerAnim_link_swimer_swim_get + : &gPlayerAnim_link_swimer_swim_deep_end); + return true; + } + + return false; +} + +void func_8083B73C(PlayState* play, Player* this, s16 currentYaw) { + Player_SetAction(play, this, func_808513EC, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); + this->actor.shape.rot.y = currentYaw; + this->currentYaw = currentYaw; +} + +void func_8083B798(PlayState* play, Player* this) { + if (this->transformation == PLAYER_FORM_ZORA) { + Player_SetAction(play, this, func_808513EC, 0); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim, 1.0f, + Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim), 0.0f, ANIMMODE_LOOP, 0.0f); + this->unk_B48 = 2.0f; + } else { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim); + this->unk_AE8 = 1; + } + + this->unk_AAA = 0x3E80; +} + +void func_8083B850(PlayState* play, Player* this) { + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + this->prevBoots = PLAYER_BOOTS_ZORA_LAND; + Player_SetAction(play, this, func_80850D68, 0); + this->unk_B48 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)); + Player_OverrideBlureColors(play, this, 1, 8); + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + this->prevBoots = PLAYER_BOOTS_ZORA_LAND; +} + +void func_8083B8D0(PlayState* play, Player* this) { + if (func_80837730(play, this, this->actor.velocity.y, 500)) { + Player_PlaySfx(this, NA_SE_EV_DIVE_INTO_WATER); + if (this->fallDistance > 800) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + } + } +} + +void func_8083B930(PlayState* play, Player* this) { + PlayerAnimationHeader* var_a2; + + if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (func_80857BE8 == this->actionFunc)) { + func_8082DE50(play, this); + + if (func_8084CA24 == this->actionFunc) { + func_8083B850(play, this); + this->stateFlags3 |= PLAYER_STATE3_8000; + } else if ((this->transformation == PLAYER_FORM_ZORA) && (func_8084C94C == this->actionFunc)) { + func_8083B850(play, this); + this->stateFlags3 |= PLAYER_STATE3_8000; + func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); + } else if ((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && (this->stateFlags2 & PLAYER_STATE2_400)) { + this->stateFlags2 &= ~PLAYER_STATE2_400; + func_8083B3B4(play, this, NULL); + this->unk_AE7 = 1; + } else if (func_8084C94C == this->actionFunc) { + Player_SetAction(play, this, func_808516B4, 0); + func_8083B798(play, this); + } else { + Player_SetAction(play, this, func_808508C8, 1); + func_8082E438(play, this, + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) ? &gPlayerAnim_link_swimer_wait2swim_wait + : &gPlayerAnim_link_swimer_land2swim_wait); + } + } + if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->actor.depthInWater < this->ageProperties->unk_2C)) { + func_8083B8D0(play, this); + } + + this->stateFlags1 |= PLAYER_STATE1_8000000; + this->stateFlags2 |= PLAYER_STATE2_400; + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + + this->unk_AEC = 0.0f; + func_80123140(play, this); +} + +void func_8083BB4C(PlayState* play, Player* this) { + f32 sp1C = this->actor.depthInWater - this->ageProperties->unk_2C; + + if (sp1C < 0.0f) { + this->underwaterTimer = 0; + if ((this->transformation == PLAYER_FORM_ZORA) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + this->currentBoots = PLAYER_BOOTS_ZORA_LAND; + } + func_801A3E38(0); + } else { + func_801A3E38(0x20); + if ((this->transformation == PLAYER_FORM_ZORA) || (sp1C < 10.0f)) { + this->underwaterTimer = 0; + } else if (this->underwaterTimer < 300) { + this->underwaterTimer++; + } + } + + if ((this->actor.parent == NULL) && (func_8084D4EC != this->actionFunc) && (func_8084F3DC != this->actionFunc) && + ((func_8084CA24 != this->actionFunc) || (this->actor.velocity.y < -2.0f))) { + if (this->ageProperties->unk_2C < this->actor.depthInWater) { + if (this->transformation == PLAYER_FORM_GORON) { + func_80834140(play, this, &gPlayerAnim_link_swimer_swim_down); + func_808345C8(); + func_8083B8D0(play, this); + } else if (this->transformation == PLAYER_FORM_DEKU) { + if (this->remainingHopsCounter != 0) { + func_808373F8(play, this, NA_SE_VO_LI_AUTO_JUMP); + } else { + if ((play->sceneId == SCENE_20SICHITAI) && (this->unk_3CF == 0)) { + if (CHECK_EVENTINF(EVENTINF_50)) { + play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 2); + } else { + play->nextEntrance = ENTRANCE(TOURIST_INFORMATION, 1); + } + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + this->stateFlags1 |= PLAYER_STATE1_200; + play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED); + } else if ((this->unk_3CF == 0) && + ((play->sceneId == SCENE_30GYOSON) || (play->sceneId == SCENE_31MISAKI) || + (play->sceneId == SCENE_TORIDE))) { + func_80169EFC(&play->state); + func_808345C8(); + } else { + Player_SetAction(play, this, func_808497A0, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } + func_8083B8D0(play, this); + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) || + (((this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) || + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) && + (func_8084E724 != this->actionFunc) && (func_80851B58 != this->actionFunc) && + (func_80851BD4 != this->actionFunc) && (func_808508C8 != this->actionFunc) && + (func_808513EC != this->actionFunc) && (func_80851588 != this->actionFunc) && + (func_808516B4 != this->actionFunc) && (func_808519FC != this->actionFunc) && + (func_80850B18 != this->actionFunc) && (func_80850D68 != this->actionFunc))) { + func_8083B930(play, this); + } + } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->actor.depthInWater < this->ageProperties->unk_24) && + (((func_80850D68 != this->actionFunc) && !(this->stateFlags3 & PLAYER_STATE3_8000)) || + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (this->skelAnime.moveFlags == 0) { + func_8083B0E4(play, this, this->actor.shape.rot.y); + } + func_8083B32C(play, this, this->actor.velocity.y); + } + } +} + +void func_8083BF54(PlayState* play, Player* this) { + Vec3f sp84; + s32 temp_v0; + s32 var_a2; + + this->actor.terminalVelocity = -20.0f; + this->actor.gravity = REG(68) / 100.0f; + + var_a2 = false; + temp_v0 = func_808340D4(sPlayerCurrentFloorType); + + if (temp_v0 || + (((var_a2 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) || (sPlayerCurrentFloorType == FLOOR_TYPE_15))) || + (sPlayerCurrentFloorType == FLOOR_TYPE_13))) { + f32 temp_fv1_2; + f32 var_fa1; + f32 var_ft4; + f32 var_fv0; + u16 sfxId; + + var_ft4 = fabsf(this->linearVelocity + D_80862B3C) * 20.0f; + if (temp_v0) { + if (sPlayerCurrentFloorType == FLOOR_TYPE_4) { + var_fa1 = 1300.0f; + } else if (sPlayerCurrentFloorType == FLOOR_TYPE_7) { + var_fa1 = 20000.0f; + var_ft4 = 0.0f; + } else { + var_fa1 = 10000.0f; + var_ft4 *= 1.6f; + } + sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG; + } else if (var_a2) { + if (sPlayerCurrentFloorType == FLOOR_TYPE_14) { + var_fa1 = 400.0f; + var_ft4 *= 10.0f; + } else { + var_fa1 = 1300.0f; + var_ft4 = 0.0f; + } + sfxId = NA_SE_PL_SINK_ON_SNOW - SFX_FLAG; + } else { + var_fa1 = (this->transformation == PLAYER_FORM_GORON) ? 10000.0f : 1000.0f; + var_ft4 = 0.0f; + sfxId = NA_SE_PL_SINK_ON_SAND - SFX_FLAG; + } + + var_fa1 = CLAMP_MIN(var_fa1, this->unk_AB8); + + var_fv0 = (sPlayerCurrentFloorType == FLOOR_TYPE_14) ? 200.0f : (var_fa1 - this->unk_AB8) * 0.02f; + var_fv0 = CLAMP(var_fv0, 0.0f, 300.0f); + + temp_fv1_2 = this->unk_AB8; + this->unk_AB8 += var_fv0 - var_ft4; + this->unk_AB8 = CLAMP(this->unk_AB8, 0.0f, var_fa1); + + if ((this->linearVelocity == 0.0f) && (fabsf(this->unk_AB8 - temp_fv1_2) > 2.0f)) { + func_800B8F98(&this->actor, sfxId); + } + + this->actor.gravity -= this->unk_AB8 * 0.004f; + } else { + this->unk_AB8 = 0.0f; + } + + if ((this->stateFlags3 & PLAYER_STATE3_10) && (this->actor.bgCheckFlags & BGCHECKFLAG_WATER)) { + if (this->actor.depthInWater < 50.0f) { + f32 temp_fv1_5; + Vec3f* bodyPartsPos; + f32 var_fa0_3; + f32 var_ft4_2; + + var_ft4_2 = fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].x - this->unk_D6C.x) + + fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].y - this->unk_D6C.y) + + fabsf(this->bodyPartsPos[PLAYER_BODYPART_WAIST].z - this->unk_D6C.z); + var_ft4_2 = CLAMP_MAX(var_ft4_2, 4.0f); + + this->unk_AEC += var_ft4_2; + if (this->unk_AEC > 15.0f) { + this->unk_AEC = 0.0f; + sp84.x = (Rand_ZeroOne() * 10.0f) + this->actor.world.pos.x; + sp84.y = this->actor.world.pos.y + this->actor.depthInWater; + sp84.z = (Rand_ZeroOne() * 10.0f) + this->actor.world.pos.z; + + EffectSsGRipple_Spawn(play, &sp84, 100, 500, 0); + + if ((this->linearVelocity > 4.0f) && !func_801242B4(this) && + ((this->actor.world.pos.y + this->actor.depthInWater) < + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y)) { + func_80837730(play, this, 20.0f, + (fabsf(this->linearVelocity) * 50.0f) + (this->actor.depthInWater * 5.0f)); + } else if (this->stateFlags3 & PLAYER_STATE3_8000) { + s32 i; + + var_fa0_3 = (this->actor.world.pos.y + this->actor.depthInWater) - 5.0f; + bodyPartsPos = this->bodyPartsPos; + + for (i = 0; i < PLAYER_BODYPART_MAX; i++, bodyPartsPos++) { + temp_fv1_5 = bodyPartsPos->y - var_fa0_3; + + if (temp_fv1_5 > 0.0f) { + func_80837730(play, this, 20.0f, + fabsf(this->linearVelocity) * 20.0f + (temp_fv1_5 * 10.0f)); + } + } + } + } + } + + if (this->ageProperties->unk_2C < this->actor.depthInWater) { + s32 numBubbles = 0; + s32 i; + f32 var_fv1; + + var_fv1 = (this->stateFlags1 & PLAYER_STATE1_4000000) + ? -fabsf(this->linearVelocity) + : ((func_80850D68 == this->actionFunc) + ? (ABS_ALT(this->unk_B8A) * -0.004f) + (this->unk_B48 * -0.38f) + : this->actor.velocity.y); + + if ((var_fv1 > -1.0f) || ((this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + if (Rand_ZeroOne() < 0.2f) { + numBubbles = 1; + } + } else { + numBubbles = var_fv1 * -0.3f; + if (numBubbles > 8) { + numBubbles = 8; + } + } + + for (i = 0; i < numBubbles; i++) { + EffectSsBubble_Spawn(play, &this->actor.world.pos, 20.0f, 10.0f, 20.0f, 0.13f); + } + } + } +} + +s32 func_8083C62C(Player* this, s32 arg1) { + Actor* targetedActor = this->targetedActor; + Vec3f headPos; + s16 pitchTarget; + s16 yawTarget; + + headPos.x = this->actor.world.pos.x; + headPos.y = this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f; + headPos.z = this->actor.world.pos.z; + + pitchTarget = Math_Vec3f_Pitch(&headPos, &targetedActor->focus.pos); + yawTarget = Math_Vec3f_Yaw(&headPos, &targetedActor->focus.pos); + + Math_SmoothStepToS(&this->actor.focus.rot.y, yawTarget, 4, 0x2710, 0); + Math_SmoothStepToS(&this->actor.focus.rot.x, pitchTarget, 4, 0x2710, 0); + + this->unk_AA6 |= 2; + + return func_80832754(this, arg1); +} + +Vec3f D_8085D218 = { 0.0f, 100.0f, 40.0f }; + +void func_8083C6E8(Player* this, PlayState* play) { + if (this->targetedActor != NULL) { + if (func_800B7128(this) || func_8082EF20(this)) { + func_8083C62C(this, true); + } else { + func_8083C62C(this, false); + } + return; + } + + if (sPlayerCurrentFloorType == FLOOR_TYPE_11) { + Math_SmoothStepToS(&this->actor.focus.rot.x, -20000, 10, 4000, 800); + } else { + s16 sp46 = 0; + f32 yIntersect; + Vec3f pos; + s16 temp_v0; + + yIntersect = func_80835D2C(play, this, &D_8085D218, &pos); + if (yIntersect > BGCHECK_Y_MIN) { + temp_v0 = Math_Atan2S_XY(40.0f, this->actor.world.pos.y - yIntersect); + sp46 = CLAMP(temp_v0, -4000, 4000); + } + this->actor.focus.rot.y = this->actor.shape.rot.y; + Math_SmoothStepToS(&this->actor.focus.rot.x, sp46, 14, 4000, 30); + } + + func_80832754(this, func_800B7128(this) || func_8082EF20(this)); +} + +void func_8083C85C(Player* this) { + Math_ScaledStepToS(&this->upperLimbRot.x, D_80862B3C * -500.0f, 900); + this->headLimbRot.x = (-(f32)this->upperLimbRot.x * 0.5f); + this->unk_AA6 |= 0x48; +} + +void func_8083C8E8(Player* this, PlayState* play) { + if ((func_800B7128(this) == 0) && (func_8082EF20(this) == 0) && + ((this->linearVelocity > 5.0f) || (D_80862B3C != 0.0f))) { + s16 temp1; + s16 temp2; + + temp1 = this->linearVelocity * 200.0f; + temp2 = BINANG_SUB(this->currentYaw, this->actor.shape.rot.y) * this->linearVelocity * 0.1f; + + temp1 = CLAMP(temp1, -0xFA0, 0xFA0); + + temp1 += (s16)(s32)(D_80862B3C * -500.0f); + + temp1 = CLAMP(temp1, -0x2EE0, 0x2EE0); + + temp2 = CLAMP(-temp2, -0xFA0, 0xFA0); + + Math_ScaledStepToS(&this->upperLimbRot.x, temp1, 0x384); + this->headLimbRot.x = -(f32)this->upperLimbRot.x * 0.5f; + Math_ScaledStepToS(&this->headLimbRot.z, temp2, 0x12C); + Math_ScaledStepToS(&this->upperLimbRot.z, temp2, 0xC8); + this->unk_AA6 |= 0x168; + } else { + func_8083C6E8(this, play); + } +} + +void func_8083CB04(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, s16 arg5) { + Math_AsymStepToF(&this->linearVelocity, arg1, arg3, arg4); + Math_ScaledStepToS(&this->currentYaw, arg2, arg5); +} + +void func_8083CB58(Player* this, f32 arg1, s16 arg2) { + func_8083CB04(this, arg1, arg2, REG(19) / 100.0f, 1.5f, REG(27)); +} + +s32 func_8083CBC4(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, f32 arg5, s16 arg6) { + s16 temp_v0 = this->currentYaw - arg2; + + if ((this->unk_B50 * 1.5f) < fabsf(this->linearVelocity)) { + arg5 *= 4.0f; + arg3 *= 4.0f; + } + + if (ABS_ALT(temp_v0) > 0x6000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, arg3) == 0) { + return false; + } + + this->currentYaw = arg2; + } else { + Math_AsymStepToF(&this->linearVelocity, arg1, arg4, arg5); + Math_ScaledStepToS(&this->currentYaw, arg2, arg6); + } + + return true; +} + +struct_8085D224 D_8085D224[][2] = { + { + { &gPlayerAnim_link_uma_left_up, 35.17f, 6.6099997f }, + { &gPlayerAnim_link_uma_right_up, -34.16f, 7.91f }, + }, + { + { &gPlayerAnim_cl_uma_leftup, 22.718237f, 2.3294117f }, + { &gPlayerAnim_cl_uma_rightup, -22.0f, 1.9800001f }, + }, +}; + +u16 D_8085D254[] = { + 0x1804, // PLAYER_FORM_GORON + 0x1805, // PLAYER_FORM_ZORA + 0x1806, // PLAYER_FORM_DEKU + 0x1806, // PLAYER_FORM_HUMAN +}; + +u16 D_8085D25C[] = { + 0x1804, // PLAYER_FORM_FIERCE_DEITY + 0x1804, // PLAYER_FORM_GORON + 0x1805, // PLAYER_FORM_ZORA + 0x1806, // PLAYER_FORM_DEKU +}; + +// Player_MountHorse +s32 func_8083CCB4(Player* this, PlayState* play) { + EnHorse* rideActor = (EnHorse*)this->rideActor; + + if (rideActor != NULL) { + if ((rideActor->type != HORSE_TYPE_2) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + rideActor->actor.textId = D_8085D254[this->transformation - 1]; + Player_TalkWithPlayer(play, &rideActor->actor); + return true; + } + } + + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + } else if ((rideActor->type == HORSE_TYPE_2) && (this->transformation != PLAYER_FORM_HUMAN)) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { + rideActor->actor.textId = D_8085D25C[this->transformation]; + Player_TalkWithPlayer(play, &rideActor->actor); + return true; + } + } + + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + } else { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + s32 pad[2]; + f32 sp28 = Math_CosS(rideActor->actor.shape.rot.y); + f32 sp24 = Math_SinS(rideActor->actor.shape.rot.y); + struct_8085D224* entry; + f32 temp_fv0; + f32 temp_fv1; + + func_80832558(play, this, func_80837BD0); + + this->stateFlags1 |= PLAYER_STATE1_800000; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER; + this->isBurning = false; + + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + entry = D_8085D224[0]; + } else { + entry = D_8085D224[1]; + } + if (this->mountSide >= 0) { + entry++; + } + + temp_fv0 = entry->unk_4; + temp_fv1 = entry->unk_8; + this->actor.world.pos.x = + rideActor->actor.world.pos.x + rideActor->riderPos.x + ((temp_fv0 * sp28) + (temp_fv1 * sp24)); + this->actor.world.pos.z = + rideActor->actor.world.pos.z + rideActor->riderPos.z + ((temp_fv1 * sp28) - (temp_fv0 * sp24)); + this->unk_B48 = rideActor->actor.world.pos.y - this->actor.world.pos.y; + + this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; + + Actor_MountHorse(play, this, &rideActor->actor); + Player_AnimationPlayOnce(play, this, entry->anim); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); + this->actor.parent = this->rideActor; + func_8082DAD4(this); + Actor_DeactivateLens(play); + + return true; + } + } + } + + return false; +} + +PlayerAnimationHeader* D_8085D264[] = { + &gPlayerAnim_link_normal_down_slope_slip, + &gPlayerAnim_link_normal_up_slope_slip, +}; + +s32 func_8083CF68(PlayState* play, Player* this) { + if (!Player_InBlockingCsMode(play, this) && !(this->cylinder.base.ocFlags1 & OC1_HIT)) { + if ((func_80853D68 != this->actionFunc) && (func_80857BE8 != this->actionFunc) && + (D_80862B40 == FLOOR_EFFECT_1)) { + s16 playerVelYaw = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); + Vec3f slopeNormal; + s16 downwardSlopeYaw; + s16 velYawToDownwardSlope; + f32 slopeSlowdownSpeed; + f32 temp_fv1; + f32 var_fa1; + f32 slopeSlowdownSpeedStep; + + Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw); + velYawToDownwardSlope = downwardSlopeYaw - playerVelYaw; + + if (ABS_ALT(velYawToDownwardSlope) > 0x3E80) { // 87.9 degrees + var_fa1 = (func_80857BE8 == this->actionFunc) ? Math_CosS(this->unk_B6C) : slopeNormal.y; + slopeSlowdownSpeed = (1.0f - var_fa1) * 40.0f; + temp_fv1 = fabsf(this->actor.speed) + slopeSlowdownSpeed; + slopeSlowdownSpeedStep = SQ(temp_fv1) * 0.011f; + slopeSlowdownSpeedStep = CLAMP_MIN(slopeSlowdownSpeedStep, 2.2f); + + // slows down speed as player is climbing a slope + this->pushedYaw = downwardSlopeYaw; + Math_StepToF(&this->pushedSpeed, slopeSlowdownSpeed, slopeSlowdownSpeedStep); + } else { + Player_SetAction(play, this, func_80853D68, 0); + func_8082DE50(play, this); + func_8082E514(play, this, D_8085D264[this->unk_AE7]); + this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); + this->currentYaw = downwardSlopeYaw; + if (D_80862B28 >= 0) { + this->unk_AE7 = 1; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); + } + + return true; + } + } + } + + return false; +} + +void func_8083D168(PlayState* play, Player* this, GetItemEntry* giEntry) { + Item00Type dropType = GIFIELD_GET_DROP_TYPE(giEntry->field); + + if (!(giEntry->field & GIFIELD_NO_COLLECTIBLE)) { + Item_DropCollectible(play, &this->actor.world.pos, dropType | 0x8000); + + if ((dropType == ITEM00_BOMBS_A) || (dropType == ITEM00_ARROWS_30) || (dropType == ITEM00_ARROWS_40) || + (dropType == ITEM00_ARROWS_50) || (dropType == ITEM00_RUPEE_GREEN) || (dropType == ITEM00_RUPEE_BLUE) || + (dropType == ITEM00_RUPEE_RED) || (dropType == ITEM00_RUPEE_PURPLE) || (dropType == ITEM00_RUPEE_HUGE)) { + return; + } + } + + Item_Give(play, giEntry->itemId); + play_sound((this->getItemId < GI_NONE) ? NA_SE_SY_GET_BOXITEM : NA_SE_SY_GET_ITEM); +} + +s32 func_8083D23C(Player* this, PlayState* play) { + if (gSaveContext.save.saveInfo.playerData.health != 0) { + Actor* interactRangeActor = this->interactRangeActor; + + if (interactRangeActor != NULL) { + if (this->getItemId > GI_NONE) { + if (this->getItemId < GI_MAX) { + GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; + + interactRangeActor->parent = &this->actor; + if ((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) || + ((s16)giEntry->objectId == OBJECT_GI_BOMB_2)) { + func_8082DCA0(play, this); + func_80838830(this, giEntry->objectId); + + if (!(this->stateFlags2 & PLAYER_STATE2_400) || + (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER)) { + Player_StopCutscene(this); + func_808324EC(play, this, func_80837C78, play->playerCsIds[PLAYER_CS_ID_ITEM_GET]); + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) + ? &gPlayerAnim_pn_getB + : &gPlayerAnim_link_demo_get_itemB); + } + + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); + func_8082DAD4(this); + + return true; + } + + func_8083D168(play, this, giEntry); + this->getItemId = GI_NONE; + } + } else if (this->csMode == PLAYER_CSMODE_0) { + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + if (this->getItemId != GI_NONE) { + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + GetItemEntry* giEntry = &sGetItemTable[-this->getItemId - 1]; + EnBox* chest = (EnBox*)interactRangeActor; + + if ((giEntry->itemId != ITEM_NONE) && + (((Item_CheckObtainability(giEntry->itemId) == ITEM_NONE) && + (giEntry->field & GIFIELD_40)) || + (((Item_CheckObtainability(giEntry->itemId) != ITEM_NONE)) && + (giEntry->field & GIFIELD_20)))) { + this->getItemId = + (giEntry->itemId == ITEM_MASK_CAPTAIN) ? -GI_RECOVERY_HEART : -GI_RUPEE_BLUE; + giEntry = &sGetItemTable[-this->getItemId - 1]; + } + + func_80832558(play, this, func_80837C78); + this->stateFlags1 |= (PLAYER_STATE1_400 | PLAYER_STATE1_800 | PLAYER_STATE1_20000000); + func_80838830(this, giEntry->objectId); + + this->actor.world.pos.x = + interactRangeActor->world.pos.x - + (Math_SinS(interactRangeActor->shape.rot.y) * this->ageProperties->unk_9C); + this->actor.world.pos.z = + interactRangeActor->world.pos.z - + (Math_CosS(interactRangeActor->shape.rot.y) * this->ageProperties->unk_9C); + this->actor.world.pos.y = interactRangeActor->world.pos.y; + this->currentYaw = this->actor.shape.rot.y = interactRangeActor->shape.rot.y; + + func_8082DAD4(this); + if ((giEntry->itemId != ITEM_NONE) && (giEntry->gid >= 0) && + (Item_CheckObtainability(giEntry->itemId) == ITEM_NONE)) { + this->csId = chest->csId2; + func_8082DB90(play, this, this->ageProperties->openChestAnim); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | + ANIM_FLAG_NOMOVE | ANIM_FLAG_80); + this->actor.bgCheckFlags &= ~BGCHECKFLAG_WATER; + chest->unk_1EC = 1; + } else { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_box_kick); + chest->unk_1EC = -1; + } + + return true; + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->transformation != PLAYER_FORM_DEKU)) { + if ((this->heldActor == NULL) || Player_IsHoldingHookshot(this)) { + EnBom* bomb = (EnBom*)interactRangeActor; + + if (((this->transformation != PLAYER_FORM_GORON) && + (((bomb->actor.id == ACTOR_EN_BOM) && bomb->isPowderKeg) || + ((interactRangeActor->id == ACTOR_EN_ISHI) && (interactRangeActor->params & 1)) || + (interactRangeActor->id == ACTOR_EN_MM)))) { + return false; + } + + this->stateFlags2 |= PLAYER_STATE2_10000; + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + func_80832558(play, this, func_808379C0); + func_8082DAD4(this); + this->stateFlags1 |= PLAYER_STATE1_800; + + return true; + } + } + } + } + } + } + } + + return false; +} + +// Player_SetAction_Throwing +void func_8083D6DC(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084E65C, 1); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_28][this->modelAnimType]); +} + +// Determines whether a held actor should be dropped or thrown: false implies droppable. +s32 func_8083D738(Player* this, Actor* heldActor) { + if ((heldActor != NULL) && !(heldActor->flags & ACTOR_FLAG_800000) && + ((this->linearVelocity < 1.1f) || (heldActor->id == ACTOR_EN_BOM_CHU))) { + return false; + } + return true; +} + +s32 func_8083D78C(Player* this, PlayState* play) { + if (this->stateFlags1 & PLAYER_STATE1_800) { + if ((this->heldActor != NULL) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { + if (!func_808313A8(play, this, this->heldActor)) { + if (!func_8083D738(this, this->heldActor)) { + Player_SetAction(play, this, func_8084E58C, 1); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_29][this->modelAnimType]); + return true; + } + func_8083D6DC(this, play); + } + + return true; + } + } + return false; +} + +s32 func_8083D860(Player* this, PlayState* play) { + if ((this->wallHeight >= 79.0f) && + (!(this->stateFlags1 & PLAYER_STATE1_8000000) || (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) || + (this->actor.depthInWater < this->ageProperties->unk_2C))) { + s32 var_t0 = (sPlayerCurrentWallFlags & WALL_FLAG_3) ? 2 : 0; + s32 temp_t2 = sPlayerCurrentWallFlags & WALL_FLAG_1; + + if ((var_t0 != 0) || temp_t2 || + SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { + CollisionPoly* wallPoly = this->actor.wallPoly; + f32 sp78; + f32 sp74; + f32 zOut; + f32 yOut; + Vec3f sp48[3]; + s32 i; + f32 sp40; + Vec3f* sp3C; + f32 xOut; + + yOut = xOut = 0.0f; + if (var_t0 != 0) { + sp78 = this->actor.world.pos.x; + sp74 = this->actor.world.pos.z; + } else { + sp3C = sp48; + CollisionPoly_GetVerticesByBgId(wallPoly, this->actor.wallBgId, &play->colCtx, sp48); + sp78 = xOut = sp48[0].x; + sp74 = zOut = sp48[0].z; + yOut = sp48[0].y; + + for (i = 1; i < ARRAY_COUNT(sp48); i++) { + sp3C++; + + if (sp78 > sp3C->x) { + sp78 = sp3C->x; + } else if (xOut < sp3C->x) { + xOut = sp3C->x; + } + + if (sp74 > sp3C->z) { + sp74 = sp3C->z; + } else if (zOut < sp3C->z) { + zOut = sp3C->z; + } + + if (yOut > sp3C->y) { + yOut = sp3C->y; + } + } + + sp78 = (sp78 + xOut) * 0.5f; + sp74 = (sp74 + zOut) * 0.5f; + + xOut = ((this->actor.world.pos.x - sp78) * COLPOLY_GET_NORMAL(wallPoly->normal.z)) - + ((this->actor.world.pos.z - sp74) * COLPOLY_GET_NORMAL(wallPoly->normal.x)); + + sp40 = this->actor.world.pos.y - yOut; + yOut = ((s32)((sp40 / 15.0f) + 0.5f) * 15.0f) - sp40; + xOut = fabsf(xOut); + } + + if (xOut < 8.0f) { + f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); + f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); + f32 wallDistance = this->wallDistance; + PlayerAnimationHeader* anim; + + func_80832558(play, this, func_80837C20); + + this->stateFlags1 |= PLAYER_STATE1_200000; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + + if ((var_t0 != 0) || temp_t2) { + if ((this->unk_AE7 = var_t0) != 0) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + anim = &gPlayerAnim_link_normal_Fclimb_startA; + + } else { + anim = &gPlayerAnim_link_normal_Fclimb_hold2upL; + } + wallDistance = (this->ageProperties->unk_3C + 4.0f) - wallDistance; + } else { + anim = this->ageProperties->unk_AC; + wallDistance = 20.5f; + } + + this->unk_AE8 = -2; + this->actor.world.pos.y += yOut; + + this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; + } else { + anim = this->ageProperties->unk_B0; + wallDistance = (this->ageProperties->unk_38 - this->ageProperties->unk_3C) + 17.0f; + this->unk_AE8 = -4; + + this->actor.shape.rot.y = this->currentYaw = i = this->actor.wallYaw; //! FAKE + } + + this->actor.world.pos.x = (wallDistance * wallPolyNormalX) + sp78; + this->actor.world.pos.z = (wallDistance * wallPolyNormalZ) + sp74; + func_8082DAD4(this); + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + Player_AnimationPlayOnce(play, this, anim); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | + ANIM_FLAG_80); + return true; + } + } + } + + return false; +} + +void func_8083DCC4(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + func_8083172C(play, this, func_8084FC0C, 0); + PlayerAnimation_PlayOnceSetSpeed(play, &this->skelAnime, anim, 4.0f / 3.0f); +} + +s32 func_8083DD1C(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { + CollisionPoly* wallPoly; + s32 bgId; + Vec3f sp74; + Vec3f sp68; + Vec3f sp5C; + f32 cos = Math_CosS(this->actor.shape.rot.y); + f32 sin = Math_SinS(this->actor.shape.rot.y); + + sp74.x = this->actor.world.pos.x + (arg5 * sin); + sp74.z = this->actor.world.pos.z + (arg5 * cos); + sp68.x = this->actor.world.pos.x + (arg4 * sin); + sp68.z = this->actor.world.pos.z + (arg4 * cos); + sp74.y = sp68.y = this->actor.world.pos.y + arg2; + + if (BgCheck_EntityLineTest2(&play->colCtx, &sp74, &sp68, &sp5C, &this->actor.wallPoly, true, false, false, true, + &bgId, &this->actor)) { + f32 wallPolyNormalX; + f32 wallPolyNormalZ; + + wallPoly = this->actor.wallPoly; + this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT; + this->actor.wallBgId = bgId; + sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, wallPoly, bgId); + + wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); + wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); + + Math_ScaledStepToS(&this->actor.shape.rot.y, Math_Atan2S_XY(-wallPolyNormalZ, -wallPolyNormalX), 0x320); + + this->currentYaw = this->actor.shape.rot.y; + this->actor.world.pos.x = sp5C.x - (Math_SinS(this->actor.shape.rot.y) * arg3); + this->actor.world.pos.z = sp5C.z - (Math_CosS(this->actor.shape.rot.y) * arg3); + + return true; + } + + this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT; + return false; +} + +void func_8083DEE4(PlayState* play, Player* this) { + f32 temp_fv0 = this->ageProperties->unk_38; + + func_8083DD1C(play, this, 268 * 0.1f, temp_fv0 + 5.0f, temp_fv0 + 15.0f, 0.0f); +} + +void func_8083DF38(Player* this, PlayerAnimationHeader* anim, PlayState* play) { + if (!func_80832558(play, this, func_80837BF8)) { + Player_SetAction(play, this, func_8084ED9C, 0); + } + + Player_AnimationPlayOnce(play, this, anim); + func_8082DAD4(this); + + this->actor.shape.rot.y = this->currentYaw = this->actor.wallYaw + 0x8000; +} + +s32 func_8083DFC4(Player* this, PlayState* play) { + if (!(this->stateFlags1 & PLAYER_STATE1_800) && (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + (D_80862B20 < 0x3000)) { + if ((this->linearVelocity > 0.0f) && func_8083D860(this, play)) { + return true; + } + + if (!func_801242B4(this) && ((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_4)) && + (sPlayerCurrentWallFlags & WALL_FLAG_6) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + (this->wallHeight >= 39.0f)) { + this->stateFlags2 |= PLAYER_STATE2_1; + + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { + DynaPolyActor* dyna; + + if ((this->actor.wallBgId != BGCHECK_SCENE) && + ((dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId)) != NULL)) { + this->rightHandActor = &dyna->actor; + } else { + this->rightHandActor = NULL; + } + + func_8083DF38(this, &gPlayerAnim_link_normal_push_wait, play); + return true; + } + } + } + + return false; +} + +s32 func_8083E14C(PlayState* play, Player* this) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + ((this->stateFlags2 & PLAYER_STATE2_10) || CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) { + DynaPolyActor* var_v1 = NULL; + + if (this->actor.wallBgId != BGCHECK_SCENE) { + var_v1 = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + } + + if (&var_v1->actor == this->rightHandActor) { + if (this->stateFlags2 & PLAYER_STATE2_10) { + return true; + } + return false; + } + } + + func_808369F4(this, play); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_wait_end); + this->stateFlags2 &= ~PLAYER_STATE2_10; + return true; +} + +void func_8083E234(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084EE50, 0); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_push_start); + this->stateFlags2 |= PLAYER_STATE2_10; +} + +void func_8083E28C(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084EF9C, 0); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_34][this->modelAnimType]); + this->stateFlags2 |= PLAYER_STATE2_10; +} + +void func_8083E2F4(Player* this, PlayState* play) { + this->stateFlags1 &= ~(PLAYER_STATE1_200000 | PLAYER_STATE1_8000000); + func_80833AA0(this, play); + + if (this->transformation == PLAYER_FORM_DEKU) { + this->linearVelocity = -1.7f; + } else { + this->linearVelocity = -0.4f; + } +} + +s32 func_8083E354(Player* this, PlayState* play) { + if (!CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A) && + (this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT)) { + if ((sPlayerCurrentWallFlags & WALL_FLAG_3) || (sPlayerCurrentWallFlags & WALL_FLAG_1) || + SurfaceType_CheckWallFlag2(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) { + return false; + } + } + + func_8083E2F4(this, play); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); + return true; +} + +s32 func_8083E404(Player* this, f32 arg1, s16 arg2) { + f32 sp1C = BINANG_SUB(arg2, this->actor.shape.rot.y); + f32 temp_fv1; + + if (this->targetedActor != NULL) { + func_8083C62C(this, func_800B7128(this) || func_8082EF20(this)); + } + + temp_fv1 = fabsf(sp1C) / 0x8000; + if (((SQ(temp_fv1) * 50.0f) + 6.0f) < arg1) { + return 1; + } + + if ((((1.0f - temp_fv1) * 10.0f) + 6.8f) < arg1) { + return -1; + } + return 0; +} + +s32 func_8083E514(Player* this, f32* arg2, s16* arg3, PlayState* play) { + s16 temp_v1 = *arg3 - this->targetYaw; + u16 var_a2 = ABS_ALT(temp_v1); + + if ((func_800B7128(this) || func_8082EF20(this)) && (this->targetedActor == NULL)) { + *arg2 *= Math_SinS(var_a2); + + if (*arg2 != 0.0f) { + *arg3 = (((temp_v1 >= 0) ? 1 : -1) * 0x4000) + this->actor.shape.rot.y; + } else { + *arg3 = this->actor.shape.rot.y; + } + + if (this->targetedActor != NULL) { + func_8083C62C(this, true); + } else { + Math_SmoothStepToS(&this->actor.focus.rot.x, (sPlayerControlInput->rel.stick_y * 240.0f), 0xE, 0xFA0, 0x1E); + func_80832754(this, true); + } + } else { + if (this->targetedActor != NULL) { + return func_8083E404(this, *arg2, *arg3); + } + + func_8083C6E8(this, play); + if ((*arg2 != 0.0f) && (var_a2 < 0x1770)) { + return 1; + } + + if ((Math_SinS(0x4000 - (var_a2 >> 1)) * 200.0f) < *arg2) { + return -1; + } + } + return 0; +} + +s32 func_8083E758(Player* this, f32* arg1, s16* arg2) { + f32 temp_fv0; + u16 temp_v0; + s16 var_v1; + + var_v1 = *arg2 - this->actor.shape.rot.y; + temp_v0 = ABS_ALT(var_v1); + temp_fv0 = Math_CosS(temp_v0); + *arg1 *= temp_fv0; + + // Can't be (*arg1 != 0.0f) + if (*arg1 != 0) { + if (temp_fv0 > 0.0f) { + return 1; + } + return -1; + } + return 0; +} + +s32 func_8083E7F8(Player* this, f32* arg1, s16* arg2, PlayState* play) { + func_8083C6E8(this, play); + + if ((*arg1 != 0.0f) || (ABS_ALT(this->unk_B4C) > 0x190)) { + s16 temp_a0 = *arg2 - (u16)Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + u16 temp; + + temp = (ABS_ALT(temp_a0) - 0x2000); + if ((temp < 0x4000) || (this->unk_B4C != 0)) { + return -1; + } + return 1; + } + + return 0; +} + +void func_8083E8E0(Player* this, f32 arg1, s16 arg2) { + s16 temp = arg2 - this->actor.shape.rot.y; + + if (arg1 > 0.0f) { + if (temp < 0) { + this->unk_B44 = 0.0f; + } else { + this->unk_B44 = 1.0f; + } + } + + Math_StepToF(&this->unk_B40, this->unk_B44, 0.3f); +} + +void func_8083E958(PlayState* play, Player* this) { + PlayerAnimation_BlendToJoint(play, &this->skelAnime, func_8082EF54(this), this->unk_B38, func_8082EF9C(this), + this->unk_B38, this->unk_B40, this->blendTableBuffer); +} + +s32 func_8083E9C4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { + f32 temp_fv0; + + if ((arg3 == 0.0f) && (arg1 > 0.0f)) { + arg3 = arg2; + } + temp_fv0 = (arg0 + arg1) - arg3; + if (((temp_fv0 * arg1) >= 0.0f) && (((temp_fv0 - arg1) * arg1) < 0.0f)) { + return true; + } + return false; +} + +void func_8083EA44(Player* this, f32 arg1) { + s32 sp24; + f32 updateScale = R_UPDATE_RATE / 2.0f; + + arg1 *= updateScale; + if (arg1 < -7.25f) { + arg1 = -7.25f; + } else if (arg1 > 7.25f) { + arg1 = 7.25f; + } + + sp24 = func_8083E9C4(this->unk_B38, arg1, 29.0f, 10.0f); + + if (sp24 || func_8083E9C4(this->unk_B38, arg1, 29.0f, 24.0f)) { + Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity); + if (this->linearVelocity > 4.0f) { + this->stateFlags2 |= PLAYER_STATE2_8; + } + this->actor.shape.unk_17 = sp24 ? 1 : 2; + } + + this->unk_B38 += arg1; + if (this->unk_B38 < 0.0f) { + this->unk_B38 += 29.0f; + } else if (this->unk_B38 >= 29.0f) { + this->unk_B38 -= 29.0f; + } +} + +void Player_ChooseIdleAnim(PlayState* play, Player* this) { + PlayerAnimationHeader* anim; + u32 healthIsCritical; + PlayerAnimationHeader** animPtr; + s32 animIndex; + s32 rand; + f32 morphFrames; + s16 lastFrame; + + if (((this->actor.id != ACTOR_PLAYER) && !(healthIsCritical = (this->actor.colChkInfo.health < 0x64))) || + ((this->actor.id == ACTOR_PLAYER) && + (((this->targetedActor != NULL) || + ((this->transformation != PLAYER_FORM_FIERCE_DEITY) && (this->transformation != PLAYER_FORM_HUMAN)) || + (this->currentMask == PLAYER_MASK_SCENTS)) || + (!(healthIsCritical = LifeMeter_IsCritical()) && (this->unk_AA4 = ((this->unk_AA4 + 1) & 1)))))) { + this->stateFlags2 &= ~PLAYER_STATE2_10000000; + anim = func_8082ED20(this); + } else { + this->stateFlags2 |= PLAYER_STATE2_10000000; + + if (this->stateFlags1 & PLAYER_STATE1_800) { + anim = func_8082ED20(this); + } else { + animIndex = play->roomCtx.curRoom.behaviorType2; + + if (healthIsCritical) { + if (this->unk_AA4 >= 0) { + animIndex = 7; + this->unk_AA4 = -1; + } else { + animIndex = 8; + } + } else { + rand = Rand_ZeroOne() * 5.0f; + if (rand < 4) { + if (((rand != 0) && (rand != 3)) || + ((this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) && + ((rand == 3) || (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE)))) { + if ((rand == 0) && Player_IsHoldingTwoHandedWeapon(this)) { + rand = 4; + } + animIndex = rand + 9; + } + } + } + + animPtr = &sPlayerIdleAnimations[animIndex][0]; + if (this->modelAnimType != PLAYER_ANIMTYPE_1) { + animPtr = &sPlayerIdleAnimations[animIndex][1]; + } + anim = *animPtr; + } + } + + lastFrame = Animation_GetLastFrame(anim); + if ((this->skelAnime.animation == anim) || (this->skelAnime.animation == &gPlayerAnim_pz_attackAend) || + (this->skelAnime.animation == &gPlayerAnim_pz_attackBend) || + (this->skelAnime.animation == &gPlayerAnim_pz_attackCend)) { + morphFrames = 0.0f; + } else { + morphFrames = -6.0f; + } + + PlayerAnimation_Change(play, &this->skelAnime, anim, (2.0f / 3.0f) * D_8085C3E4, 0.0f, lastFrame, ANIMMODE_ONCE, + morphFrames); +} + +void func_8083EE60(Player* this, PlayState* play) { + f32 temp_fv0; + f32 var_fs0; + + if (this->unk_B34 < 1.0f) { + f32 temp_fs0 = R_UPDATE_RATE / 2.0f; + + func_8083EA44(this, REG(35) / 1000.0f); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType], + this->unk_B38); + this->unk_B34 += (1.0f * 1.0f) * temp_fs0; + if (this->unk_B34 >= 1.0f) { + this->unk_B34 = 1.0f; + } + var_fs0 = this->unk_B34; + } else { + temp_fv0 = this->linearVelocity - (REG(48) / 100.0f); + + if (temp_fv0 < 0.0f) { + var_fs0 = 1.0f; + func_8083EA44(this, ((REG(35)) / 1000.0f) + (((REG(36)) / 1000.0f) * this->linearVelocity)); + + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType], + this->unk_B38); + } else { + var_fs0 = (REG(37) / 1000.0f) * temp_fv0; + if (var_fs0 < 1.0f) { + func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); + } else { + var_fs0 = 1.0f; + func_8083EA44(this, (REG(39) / 100.0f) + ((REG(38) / 1000.0f) * temp_fv0)); + } + + PlayerAnimation_LoadToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_30][this->modelAnimType], + this->unk_B38); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, &gPlayerAnim_link_normal_back_run, + this->unk_B38 * (16.0f / 29.0f)); + } + } + if (var_fs0 < 1.0f) { + PlayerAnimation_InterpJointMorph(play, &this->skelAnime, 1.0f - var_fs0); + } +} + +void func_8083F144(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A794, 1); + func_8082E438(play, this, &gPlayerAnim_link_normal_back_brake); +} + +s32 func_8083F190(Player* this, f32* arg1, s16* arg2, PlayState* play) { + if (this->linearVelocity > 6.0f) { + func_8083F144(this, play); + return true; + } + + if (*arg1 != 0.0f) { + if (func_80832F24(this)) { + *arg1 = 0.0f; + *arg2 = this->currentYaw; + } else { + return true; + } + } + return false; +} + +void func_8083F230(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084A884, 1); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_brake_end); +} + +void func_8083F27C(PlayState* play, Player* this) { + f32 temp_fv0; + PlayerAnimationHeader* sp38; + PlayerAnimationHeader* sp34; + + sp38 = D_8085BE84[PLAYER_ANIMGROUP_23][this->modelAnimType]; + sp34 = D_8085BE84[PLAYER_ANIMGROUP_24][this->modelAnimType]; + + this->skelAnime.animation = sp38; + + func_8083EA44(this, (REG(30) / 1000.0f) + ((REG(32) / 1000.0f) * this->linearVelocity)); + + temp_fv0 = this->unk_B38 * (16.0f / 29.0f); + PlayerAnimation_BlendToJoint(play, &this->skelAnime, sp34, temp_fv0, sp38, temp_fv0, this->unk_B40, + this->blendTableBuffer); +} + +void func_8083F358(Player* this, s32 arg1, PlayState* play) { + PlayerAnimationHeader* var_v0; + f32 var_fv1; + s16 var_a1; + + if (ABS_ALT(D_80862B28) < 0xE38) { + var_a1 = 0; + } else { + var_a1 = CLAMP(D_80862B28, -0x2AAA, 0x2AAA); + } + + Math_ScaledStepToS(&this->unk_B70, var_a1, 0x190); + if ((this->modelAnimType == PLAYER_ANIMTYPE_3) || ((this->unk_B70 == 0) && (this->unk_AB8 <= 0.0f))) { + if (arg1 == 0) { + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38); + } else { + PlayerAnimation_LoadToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38); + } + return; + } + + if (this->unk_B70 != 0) { + var_fv1 = this->unk_B70 / (f32)0x2AAA; + } else { + var_fv1 = this->unk_AB8 * 0.0006f; + } + + var_fv1 *= fabsf(this->linearVelocity) * 0.5f; + if (var_fv1 > 1.0f) { + var_fv1 = 1.0f; + } + + if (var_fv1 < 0.0f) { + var_v0 = &gPlayerAnim_link_normal_climb_down; + var_fv1 = -var_fv1; + } else { + var_v0 = &gPlayerAnim_link_normal_climb_up; + } + + if (arg1 == 0) { + PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38, var_v0, this->unk_B38, var_fv1, this->blendTableBuffer); + } else { + PlayerAnimation_BlendToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38, var_v0, this->unk_B38, var_fv1, this->blendTableBuffer); + } +} + +void func_8083F57C(Player* this, PlayState* play) { + f32 temp_fv0; + f32 var_fs0; + + if (this->unk_B34 < 1.0f) { + f32 temp_fs0; + + temp_fs0 = R_UPDATE_RATE / 2.0f; + func_8083EA44(this, REG(35) / 1000.0f); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], + this->unk_B38); + + // required + this->unk_B34 += 1 * temp_fs0; + if (this->unk_B34 >= 1.0f) { + this->unk_B34 = 1.0f; + } + var_fs0 = this->unk_B34; + } else { + temp_fv0 = (this->linearVelocity - (REG(48) / 100.0f)); + if (temp_fv0 < 0.0f) { + var_fs0 = 1.0f; + func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); + func_8083F358(this, 0, play); + } else { + var_fs0 = (REG(37) / 1000.0f) * temp_fv0; + if (var_fs0 < 1.0f) { + func_8083EA44(this, (REG(35) / 1000.0f) + ((REG(36) / 1000.0f) * this->linearVelocity)); + } else { + var_fs0 = 1.0f; + func_8083EA44(this, (REG(39) / 100.0f) + ((REG(38) / 1000.0f) * temp_fv0)); + } + func_8083F358(this, 1, play); + PlayerAnimation_LoadToJoint(play, &this->skelAnime, func_8082EEE0(this), this->unk_B38 * (20.0f / 29.0f)); + } + } + + if (var_fs0 < 1.0f) { + PlayerAnimation_InterpJointMorph(play, &this->skelAnime, 1.0f - var_fs0); + } +} + +void func_8083F828(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) { + arg1->x = randPlusMinusPoint5Scaled(arg3) + arg0->x; + arg1->y = randPlusMinusPoint5Scaled(arg4) + (arg0->y + arg2); + arg1->z = randPlusMinusPoint5Scaled(arg3) + arg0->z; +} + +Color_RGBA8 D_8085D26C = { 255, 255, 255, 255 }; +Vec3f D_8085D270 = { 0.0f, 0.04f, 0.0f }; + +s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 randAccelWeight, s32 scale, + s32 scaleStep, s32 useLighting) { + static Vec3f D_8085D27C = { 0.0f, 0.0f, 0.0f }; + static Vec3f D_8085D288 = { 0.0f, 0.0f, 0.0f }; + + if ((countMax < 0) || (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG)) { + s32 count = func_80173B48(&play->state) / 20000000; + Vec3f pos; + s32 i; + + count = (count >= ABS_ALT(countMax)) ? ABS_ALT(countMax) : count; + for (i = 0; i < count; i++) { + func_8083F828(&this->actor.world.pos, &pos, 0.0f, 40.0f, 10.0f); + D_8085D27C.x = randPlusMinusPoint5Scaled(3.0f); + D_8085D27C.z = randPlusMinusPoint5Scaled(3.0f); + EffectSsDust_Spawn(play, 0, &pos, &D_8085D27C, &D_8085D270, &D_8085D26C, &D_8085D26C, scale, scaleStep, 42, + 0); + } + + return true; + } else if ((this->floorSfxOffset == NA_SE_PL_WALK_GROUND - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG)) { + s32 count = func_80173B48(&play->state) / 12000000; + + if (count > 0) { + Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, radius, + (count < countMax) ? count : countMax, randAccelWeight, scale, scaleStep, + useLighting); + + return true; + } + } else if (this->floorSfxOffset == NA_SE_PL_WALK_GRASS - SFX_FLAG) { + s32 count = func_80173B48(&play->state) / 12000000; + Vec3f velocity; + Vec3f pos; + s32 i; + + count = (count >= countMax) ? countMax : count; + for (i = 0; i < count; i++) { + func_8083F828(&this->actor.world.pos, &pos, 0.0f, 20.0f, 20.0f); + velocity.x = randPlusMinusPoint5Scaled(3.0f); + velocity.y = Rand_ZeroFloat(2.0f); + velocity.z = randPlusMinusPoint5Scaled(3.0f); + D_8085D288.y = -0.1f; + EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip); + } + } + + return false; +} + +s32 func_8083FBC4(PlayState* play, Player* this) { + if ((this->floorSfxOffset == NA_SE_PL_WALK_GROUND - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG)) { + Vec3f* feetPos = this->actor.shape.feetPos; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->actor.shape.feetPos); i++) { + func_800B1210(play, feetPos, &gZeroVec3f, &gZeroVec3f, 50, 30); + feetPos++; + } + + return true; + } + + if (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) { + Vec3f* feetPos = this->actor.shape.feetPos; + s32 i; + + for (i = 0; i < ARRAY_COUNT(this->actor.shape.feetPos); i++) { + EffectSsDust_Spawn(play, 0, feetPos, &gZeroVec3f, &D_8085D270, &D_8085D26C, &D_8085D26C, 100, 40, 17, 0); + feetPos++; + } + + return true; + } + + return false; +} + +s32 func_8083FCF0(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4) { + if (arg4 < this->skelAnime.curFrame) { + func_8082DC38(this); + } else if (arg2 <= this->skelAnime.curFrame) { + this->stateFlags3 |= PLAYER_STATE3_2000000; + func_8082FA5C(play, this, + (arg3 <= this->skelAnime.curFrame) ? PLAYER_MELEE_WEAPON_STATE_1 + : PLAYER_MELEE_WEAPON_STATE_MINUS_1); + return true; + } + return false; +} + +// Crouch-stabbing +s32 func_8083FD80(Player* this, PlayState* play) { + if (!Player_IsGoronOrDeku(this) && (Player_GetMeleeWeaponHeld(this) != PLAYER_MELEEWEAPON_NONE) && + (this->transformation != PLAYER_FORM_ZORA) && (D_80862B48 != 0)) { + //! Calling this function sets the meleeWeaponQuads' damage properties correctly, patching "Power Crouch Stab". + func_8083375C(this, PLAYER_MWA_STAB_1H); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_defense_kiru); + this->unk_AE7 = 1; + this->meleeWeaponAnimation = PLAYER_MWA_STAB_1H; + this->currentYaw = this->actor.shape.rot.y + this->upperLimbRot.y; + this->unk_ADD = 0; + return true; + } + return false; +} + +s32 func_8083FE38(Player* this, PlayState* play) { + return func_80838A90(this, play) || func_808391D8(this, play) || func_8083D23C(this, play); +} + +void Player_RequestQuakeAndRumble(PlayState* play, Player* this, u16 sfxId) { + Player_RequestQuake(play, 27767, 7, 20); + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + Player_PlaySfx(this, sfxId); +} + +void func_8083FEF4(PlayState* play, Player* this) { + Inventory_ChangeAmmo(ITEM_STICK, -1); + func_80831990(play, this, ITEM_NONE); +} + +s32 func_8083FF30(PlayState* play, Player* this) { + if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B0C > 0.5f)) { + if (AMMO(ITEM_STICK) != 0) { + EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND], + BINANG_ADD(this->actor.shape.rot.y, 0x8000)); + this->unk_B0C = 0.5f; + func_8083FEF4(play, this); + Player_PlaySfx(this, NA_SE_IT_WOODSTICK_BROKEN); + } + return true; + } + + return false; +} + +// handles razor sword health and breaking +s32 func_8083FFEC(PlayState* play, Player* this) { + if (this->heldItemAction == PLAYER_IA_SWORD_RAZOR) { + if (gSaveContext.save.saveInfo.playerData.swordHealth > 0) { + gSaveContext.save.saveInfo.playerData.swordHealth--; + if (gSaveContext.save.saveInfo.playerData.swordHealth <= 0) { + Item_Give(play, ITEM_SWORD_KOKIRI); + func_80831990(play, this, ITEM_SWORD_KOKIRI); + Player_PlaySfx(this, NA_SE_IT_MAJIN_SWORD_BROKEN); + if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + Message_StartTextbox(play, 0xF9, NULL); + } + } + } + return true; + } + return false; +} + +// Could return the last function, but never used as such +void func_80840094(PlayState* play, Player* this) { + func_8083FF30(play, this); + func_8083FFEC(play, this); +} + +PlayerAnimationHeader* D_8085D294[] = { + &gPlayerAnim_link_fighter_rebound, + &gPlayerAnim_link_fighter_rebound_long, + &gPlayerAnim_link_fighter_reboundR, + &gPlayerAnim_link_fighter_rebound_longR, +}; + +void func_808400CC(PlayState* play, Player* this) { + if (func_8084B5C0 != this->actionFunc) { + func_8082DD2C(play, this); + if ((this->transformation != PLAYER_FORM_HUMAN) && (this->transformation != PLAYER_FORM_FIERCE_DEITY)) { + u8 moveFlags = this->skelAnime.moveFlags; + s32 pad; + + this->skelAnime.moveFlags = 0; + Player_SetAction(play, this, func_80854C70, 0); + this->skelAnime.moveFlags = moveFlags; + } else { + s32 var_v1; + s32 pad; + + Player_SetAction(play, this, func_80854C70, 0); + if (func_80123420(this)) { + var_v1 = 2; + } else { + var_v1 = 0; + } + func_8082DB90(play, this, D_8085D294[Player_IsHoldingTwoHandedWeapon(this) + var_v1]); + } + } + + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + this->linearVelocity = -18.0f; + func_80840094(play, this); +} + +s32 func_808401F4(PlayState* play, Player* this) { + if (this->meleeWeaponState >= PLAYER_MELEE_WEAPON_STATE_1) { + s32 temp_v0_3; + + if (this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) { + if (!(this->meleeWeaponQuads[0].base.atFlags & AT_BOUNCED) && + !(this->meleeWeaponQuads[1].base.atFlags & AT_BOUNCED)) { + if (this->skelAnime.curFrame >= 2.0f) { + CollisionPoly* poly; + s32 bgId; + Vec3f spC8; + Vec3f pos; + Vec3f spB0; + Vec3f* var_a1; + Vec3f* temp_a0 = &this->meleeWeaponInfo[0].tip; + f32 var_fv1; + + if (this->linearVelocity >= 0.0f) { + var_a1 = &this->meleeWeaponInfo[0].base; + if ((this->transformation == PLAYER_FORM_GORON) || (this->actor.id == ACTOR_EN_TEST3)) { + var_a1 = &this->unk_AF0[1]; + } + + var_fv1 = Math_Vec3f_DistXYZAndStoreDiff(temp_a0, var_a1, &spB0); + if (var_fv1 != 0.0f) { + var_fv1 = (var_fv1 + 10.0f) / var_fv1; + } + + spC8.x = temp_a0->x + (spB0.x * var_fv1); + spC8.y = temp_a0->y + (spB0.y * var_fv1); + spC8.z = temp_a0->z + (spB0.z * var_fv1); + if (BgCheck_EntityLineTest2(&play->colCtx, &spC8, temp_a0, &pos, &poly, 1, 0, 0, 1, &bgId, + &this->actor)) { + if (!SurfaceType_IsIgnoredByEntities(&play->colCtx, poly, bgId) && + (SurfaceType_GetFloorType(&play->colCtx, poly, bgId) != FLOOR_TYPE_6) && + !func_800B90AC(play, &this->actor, poly, bgId, &pos)) { + if (this->transformation == PLAYER_FORM_GORON) { + MtxF sp64; + Vec3s actorRot; + DynaPolyActor* temp_v0; + + func_8082DF2C(play); + Player_RequestQuakeAndRumble(play, this, NA_SE_IT_HAMMER_HIT); + if (this->transformation == PLAYER_FORM_GORON) { + Actor_SetPlayerImpact(play, PLAYER_IMPACT_BONK, 2, 100.0f, + &this->actor.world.pos); + func_800C0094(poly, pos.x, pos.y, pos.z, &sp64); + Matrix_MtxFToYXZRot(&sp64, &actorRot, true); + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, pos.x, pos.y, pos.z, + actorRot.x, actorRot.y, actorRot.z, 500); + } + + if (bgId != BGCHECK_SCENE) { + temp_v0 = DynaPoly_GetActor(&play->colCtx, bgId); + + if (((this->meleeWeaponQuads[0].base.atFlags & AT_HIT) && + (&temp_v0->actor == this->meleeWeaponQuads[0].base.at)) || + ((this->meleeWeaponQuads[1].base.atFlags & AT_HIT) && + (&temp_v0->actor == this->meleeWeaponQuads[1].base.at))) { + return false; + } + } + + func_808400CC(play, this); + if (this->transformation != PLAYER_FORM_GORON) { + return true; + } + return false; + } + + if (this->linearVelocity >= 0.0f) { + SurfaceMaterial surfaceMaterial = + SurfaceType_GetMaterial(&play->colCtx, poly, bgId); + + if (surfaceMaterial == SURFACE_MATERIAL_WOOD) { + CollisionCheck_SpawnShieldParticlesWood(play, &pos, &this->actor.projectedPos); + } else { + pos.x += 8.0f * COLPOLY_GET_NORMAL(poly->normal.x); + pos.y += 8.0f * COLPOLY_GET_NORMAL(poly->normal.y); + pos.x += 8.0f * COLPOLY_GET_NORMAL(poly->normal.z); + CollisionCheck_SpawnShieldParticles(play, &pos); + + if (surfaceMaterial == SURFACE_MATERIAL_DIRT_SOFT) { + Player_PlaySfx(this, NA_SE_IT_WALL_HIT_SOFT); + } else { + Player_PlaySfx(this, NA_SE_IT_WALL_HIT_HARD); + } + } + + func_80840094(play, this); + Player_RequestRumble(play, this, 180, 20, 100, SQ(0)); + this->linearVelocity = -14.0f; + } + } + } + } + } + } else { + func_808400CC(play, this); + func_8082DF2C(play); + return true; + } + } + + temp_v0_3 = (this->meleeWeaponQuads[0].base.atFlags & AT_HIT) != 0; + if (temp_v0_3 || (this->meleeWeaponQuads[1].base.atFlags & AT_HIT)) { + if ((this->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) && + (this->transformation != PLAYER_FORM_GORON)) { + Actor* temp_v1 = this->meleeWeaponQuads[temp_v0_3 ? 0 : 1].base.at; + + if ((temp_v1 != NULL) && (temp_v1->id != ACTOR_EN_KANBAN)) { + func_8082DF2C(play); + } + } + + if (!func_8083FF30(play, this)) { + func_8083FFEC(play, this); + if (this->actor.colChkInfo.atHitEffect == 1) { + this->actor.colChkInfo.damage = 8; + func_80833B18(play, this, 4, 0.0f, 0.0f, this->actor.shape.rot.y, 20); + return true; + } + } + } + } + + return false; +} + +Vec3f D_8085D2A4 = { 0.0f, 0.0f, 5.0f }; + +void func_80840770(PlayState* play, Player* this) { + if (this->unk_AE8 != 0) { + if (this->unk_AE8 > 0) { + this->unk_AE8--; + if (this->unk_AE8 == 0) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_swimer_swim_wait, 1.0f, 0.0f, + Animation_GetLastFrame(&gPlayerAnim_link_swimer_swim_wait), ANIMMODE_ONCE, + -16.0f); + } else { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_derth_rebirth, 1.0f, 99.0f, + Animation_GetLastFrame(&gPlayerAnim_link_derth_rebirth), ANIMMODE_ONCE, + 0.0f); + } + gSaveContext.healthAccumulator = 0xA0; + this->unk_AE8 = -1; + } + } else if (gSaveContext.healthAccumulator == 0) { + Player_StopCutscene(this); + + this->stateFlags1 &= ~PLAYER_STATE1_80; + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_808353DC(play, this); + } else { + func_8085B384(this, play); + } + + this->unk_D6B = 20; + func_808339B4(this, -20); + Audio_SetBgmVolumeOn(); + } + } else if (this->unk_AE7 != 0) { + Player_StopCutscene(this); + this->csId = play->playerCsIds[PLAYER_CS_ID_REVIVE]; + this->unk_AE8 = 60; + Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D2A4, 5); + Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); + } else if (play->gameOverCtx.state == GAMEOVER_DEATH_WAIT_GROUND) { + play->gameOverCtx.state = GAMEOVER_DEATH_FADE_OUT; + } +} + +void func_80840980(Player* this, u16 sfxId) { + Player_AnimSfx_PlayVoice(this, sfxId); +} + +void func_808409A8(PlayState* play, Player* this, f32 speed, f32 yVelocity) { + Actor* heldActor = this->heldActor; + + if (!func_808313A8(play, this, heldActor)) { + heldActor->world.rot.y = this->actor.shape.rot.y; + heldActor->speed = speed; + heldActor->velocity.y = yVelocity; + func_808309CC(play, this); + Player_PlaySfx(this, NA_SE_PL_THROW); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } +} + +// Check if bonked and if so, rumble, play sound, etc. +s32 func_80840A30(PlayState* play, Player* this, f32* arg2, f32 arg3) { + Actor* cylinderOc = NULL; + + if (arg3 <= *arg2) { + // If interacting with a wall and close to facing it + if (((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B24 < 0x1C00)) || + // or, impacting something's cylinder + (((this->cylinder.base.ocFlags1 & OC1_HIT) && (cylinderOc = this->cylinder.base.oc) != NULL) && + // and that something is a Beaver Race ring, + ((cylinderOc->id == ACTOR_EN_TWIG) || + // or something is a tree and `this` is close to facing it (note the this actor's facing direction would + // be antiparallel to the cylinder's actor's yaw if this was directly facing it) + (((cylinderOc->id == ACTOR_EN_WOOD02) || (cylinderOc->id == ACTOR_EN_SNOWWD) || + (cylinderOc->id == ACTOR_OBJ_TREE)) && + (ABS_ALT(BINANG_SUB(this->actor.world.rot.y, cylinderOc->yawTowardsPlayer)) > 0x6000))))) { + + if (!func_8082DA90(play)) { + if (this->doorType == PLAYER_DOORTYPE_STAIRCASE) { + func_8085B384(this, play); + return true; + } + + if (cylinderOc != NULL) { + cylinderOc->home.rot.y = 1; + } else if (this->actor.wallBgId != BGCHECK_SCENE) { // i.e. was an actor + DynaPolyActor* wallPolyActor = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + + // Large crates, barrels and palm trees + if ((wallPolyActor != NULL) && + ((wallPolyActor->actor.id == ACTOR_OBJ_KIBAKO2) || + (wallPolyActor->actor.id == ACTOR_OBJ_TARU) || (wallPolyActor->actor.id == ACTOR_OBJ_YASI))) { + wallPolyActor->actor.home.rot.z = 1; + } + } + + if (!(this->stateFlags3 & PLAYER_STATE3_1000)) { + if ((this->stateFlags3 & PLAYER_STATE3_8000) && (func_8084CA24 != this->actionFunc)) { + Player_SetAction(play, this, func_80851B58, 0); + func_8082DB90(play, this, &gPlayerAnim_link_swimer_swim_hit); + func_8082DD2C(play, this); + this->linearVelocity *= 0.2f; + } else { + Player_SetAction(play, this, func_8084C6EC, 0); + Player_AnimationPlayOnce(play, this, D_8085BE84[PLAYER_ANIMGROUP_16][this->modelAnimType]); + this->unk_AE8 = 1; + } + } + + this->linearVelocity = -this->linearVelocity; + Player_RequestQuake(play, 33267, 3, 12); + Player_RequestRumble(play, this, 255, 20, 150, SQ(0)); + Actor_SetPlayerImpact(play, PLAYER_IMPACT_BONK, 2, 100.0f, &this->actor.world.pos); + Player_PlaySfx(this, NA_SE_PL_BODY_HIT); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + return true; + } + } + } + return false; +} + +s32 func_80840CD4(Player* this, PlayState* play) { + if (func_808387A0(play, this)) { + this->stateFlags2 |= PLAYER_STATE2_20000; + } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + PlayerMeleeWeaponAnimation meleeWeaponAnim; + + if ((this->unk_B08 >= 0.85f) || func_808333CC(this)) { + meleeWeaponAnim = D_8085CF84[Player_IsHoldingTwoHandedWeapon(this)]; + } else { + meleeWeaponAnim = D_8085CF80[Player_IsHoldingTwoHandedWeapon(this)]; + } + func_80833864(play, this, meleeWeaponAnim); + func_808339B4(this, -8); + this->stateFlags2 |= PLAYER_STATE2_20000; + if (this->unk_AE3[this->unk_ADE] == 0) { + this->stateFlags2 |= PLAYER_STATE2_40000000; + } + } else { + return false; + } + + return true; +} + +void func_80840DEC(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084CE84, 1); +} + +void func_80840E24(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084D18C, 1); +} + +void func_80840E5C(Player* this, PlayState* play) { + func_808369F4(this, play); + func_8082DC38(this); + func_8082E438(play, this, D_8085CF68[Player_IsHoldingTwoHandedWeapon(this)]); + this->currentYaw = this->actor.shape.rot.y; +} + +void func_80840EC0(Player* this, PlayState* play) { + Player_SetAction(play, this, func_8084CCEC, 1); + Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); + this->unk_AE8 = 1; + this->unk_B38 = 0.0f; +} + +// Spin attack size +void func_80840F34(Player* this) { + Math_StepToF(&this->unk_B08, (CHECK_WEEKEVENTREG(WEEKEVENTREG_23_02)) ? 1.0f : 0.5f, 0.02f); +} + +s32 func_80840F90(PlayState* play, Player* this, CsCmdActorCue* playerAction, f32 arg3, s16 arg4, s32 arg5) { + if ((arg5 != 0) && (this->linearVelocity == 0.0f)) { + return PlayerAnimation_Update(play, &this->skelAnime); + } + + if (arg5 != 2) { + f32 halfUpdateRate = R_UPDATE_RATE / 2.0f; + f32 curDiffX = playerAction->endPos.x - this->actor.world.pos.x; + f32 curDiffZ = playerAction->endPos.z - this->actor.world.pos.z; + f32 scaledCurDist = sqrtf(SQ(curDiffX) + SQ(curDiffZ)) / halfUpdateRate; + s32 framesLeft = (playerAction->endFrame - play->csCtx.curFrame) + 1; + + arg4 = Math_Atan2S_XY(curDiffZ, curDiffX); + + if (arg5 == 1) { + f32 distX = playerAction->endPos.x - playerAction->startPos.x; + f32 distZ = playerAction->endPos.z - playerAction->startPos.z; + s32 temp = (((sqrtf(SQ(distX) + SQ(distZ)) / halfUpdateRate) / + (playerAction->endFrame - playerAction->startFrame)) / + 1.5f) * + 4.0f; + if (temp >= framesLeft) { + arg3 = 0.0f; + arg4 = this->actor.shape.rot.y; + } else { + arg3 = scaledCurDist / ((framesLeft - temp) + 1); + } + } else { + arg3 = scaledCurDist / framesLeft; + } + } + + this->stateFlags2 |= PLAYER_STATE2_20; + func_8083F57C(this, play); + func_8083CB58(this, arg3, arg4); + if ((arg3 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_80839CD8(this, play); + } + + return false; +} + +s32 func_808411D4(PlayState* play, Player* this, f32* arg2, s32 arg3) { + f32 xDiff = this->unk_3A0.x - this->actor.world.pos.x; + f32 yDiff = this->unk_3A0.z - this->actor.world.pos.z; + s32 sp2C; + s32 pad2; + s16 var_v1; + + sp2C = sqrtf(SQ(xDiff) + SQ(yDiff)); + var_v1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_3A0); + if (sp2C < arg3) { + *arg2 = 0.0f; + var_v1 = this->actor.shape.rot.y; + } + if (func_80840F90(play, this, NULL, *arg2, var_v1, 2)) { + return 0; + } + return sp2C; +} + +void Player_InitMode_0(PlayState* play, Player* this) { + this->actor.update = func_801229EC; + this->actor.draw = NULL; +} + +void Player_InitMode_2(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80854118, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_okarina_warp_goal, 2.0f / 3.0f, 0.0f, 24.0f, + ANIMMODE_ONCE, 0.0f); + this->actor.world.pos.y += 800.0f; +} + +u8 D_8085D2B0[] = { + ITEM_SWORD_RAZOR, + ITEM_SWORD_KOKIRI, +}; + +// OoT leftover? +void func_80841358(PlayState* play, Player* this, s32 arg2) { + ItemId item; + PlayerItemAction itemAction; + + //! @bug OoB read if player is goron, deku or human + item = D_8085D2B0[this->transformation]; + itemAction = sItemItemActions[item]; + func_808317C4(this); + func_8082DCA0(play, this); + this->heldItemId = item; + this->nextModelGroup = Player_ActionToModelGroup(this, itemAction); + func_8082F8BC(play, this, itemAction); + func_808309CC(play, this); + if (arg2) { + Player_PlaySfx(this, NA_SE_IT_SWORD_PICKOUT); + } +} + +Vec3f D_8085D2B4 = { -1.0f, 69.0f, 20.0f }; + +void Player_InitMode_1(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80852FD4, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + Math_Vec3f_Copy(&this->actor.world.pos, &D_8085D2B4); + this->currentYaw = this->actor.shape.rot.y = -0x8000; + PlayerAnimation_Change(play, &this->skelAnime, this->ageProperties->unk_A8, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_ONCE, + 0.0f); + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_80 | ANIM_FLAG_200); + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) { + func_80841358(play, this, false); + } + this->unk_AE8 = 20; +} + +void Player_InitMode_3(PlayState* play, Player* this) { + Player_SetAction(play, this, func_8085437C, 0); + func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void Player_InitMode_4(PlayState* play, Player* this) { + func_80834DB8(this, &gPlayerAnim_link_normal_jump, 12.0f, play); + Player_SetAction(play, this, func_8085439C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->fallStartHeight = this->actor.world.pos.y; +} + +void Player_InitMode_7(PlayState* play, Player* this) { + func_80833B18(play, this, 1, 2.0f, 2.0f, this->actor.shape.rot.y + 0x8000, 0); +} + +void Player_InitMode_5(PlayState* play, Player* this) { + Player_SetAction(play, this, func_808540A0, 0); + this->actor.draw = NULL; + this->stateFlags1 |= PLAYER_STATE1_20000000; +} + +void Player_InitMode_6(PlayState* play, Player* this) { + if (gSaveContext.save.isOwlSave) { + Player_SetAction(play, this, func_808496AC, 0); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_AE8 = 0x28; + gSaveContext.save.isOwlSave = false; + } else { + Player_SetAction(play, this, func_80849FE0, 0); + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->stateFlags2 |= PLAYER_STATE2_20000000; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST7, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, 0, 0, ENTEST7_MINUS1); + } +} + +// InitModes 0x8 and 0x9 +void func_80841744(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80855C28, 0); + if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) { + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); + this->itemAction = PLAYER_IA_OCARINA; + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); + } else { + func_8082DB60(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + } + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_ABC = -10000.0f; + this->unk_AE8 = 0x2710; + this->unk_B10[5] = 8.0f; +} + +static InitChainEntry sInitChain[] = { + ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP), +}; + +Vec3s D_8085D2C4 = { -57, 3377, 0 }; + +void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) { + Actor_ProcessInitChain(&this->actor, sInitChain); + this->currentYaw = this->actor.world.rot.y; + + if ((PLAYER_GET_INITMODE(&this->actor) != PLAYER_INITMODE_TELESCOPE) && + ((gSaveContext.respawnFlag != 2) || + (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams != PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)))) { + func_808309CC(play, this); + SkelAnime_InitPlayer(play, &this->skelAnime, skelHeader, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType], + 1 | 8, this->jointTableBuffer, this->morphTableBuffer, PLAYER_LIMB_MAX); + this->skelAnime.baseTransl = D_8085D2C4; + + SkelAnime_InitPlayer(play, &this->unk_284, skelHeader, func_8082ED20(this), 1 | 8, this->unk_929, this->unk_9C8, + PLAYER_LIMB_MAX); + this->unk_284.baseTransl = D_8085D2C4; + + if (this->transformation == PLAYER_FORM_GORON) { + SkelAnime_InitFlex(play, &this->unk_2C8, &gLinkGoronShieldingSkel, &gLinkGoronShieldingAnim, + this->jointTable, this->morphTable, LINK_GORON_SHIELDING_LIMB_MAX); + } + + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawFeet, this->ageProperties->shadowScale); + } + + this->subCamId = CAM_ID_NONE; + Collider_InitAndSetCylinder(play, &this->cylinder, &this->actor, &D_8085C2EC); + Collider_InitAndSetCylinder(play, &this->shieldCylinder, &this->actor, &D_8085C318); + Collider_InitAndSetQuad(play, &this->meleeWeaponQuads[0], &this->actor, &D_8085C344); + Collider_InitAndSetQuad(play, &this->meleeWeaponQuads[1], &this->actor, &D_8085C344); + Collider_InitAndSetQuad(play, &this->shieldQuad, &this->actor, &D_8085C394); +} + +void func_80841A50(PlayState* play, Player* this) { + if ((play->roomCtx.curRoom.num >= 0) && (play->roomCtx.prevRoom.num < 0)) { + Math_Vec3f_Copy(&this->unk_3C0, &this->actor.world.pos); + this->unk_3CC = this->actor.shape.rot.y; + this->unk_3CE = play->roomCtx.curRoom.num; + this->unk_3CF = 1; + } +} + +typedef void (*PlayerInitModeFunc)(PlayState*, Player*); + +// Initialisation functions for various gameplay modes depending on spawn params. There may be at most 0x10 due to it +// using a single nybble. +// sInitModeFuncs +PlayerInitModeFunc D_8085D2CC[0x10] = { + /* 0x0 */ Player_InitMode_0, + /* 0x1 */ Player_InitMode_1, + /* 0x2 */ Player_InitMode_2, + /* 0x3 */ Player_InitMode_3, + /* 0x4 */ Player_InitMode_4, + /* 0x5 */ Player_InitMode_5, + /* 0x6 */ Player_InitMode_6, + /* 0x7 */ Player_InitMode_7, + /* 0x8 */ func_80841744, + /* 0x9 */ func_80841744, + /* 0xA */ func_8083ADF0, + /* 0xB */ Player_InitMode_B, + /* 0xC */ Player_InitMode_Telescope, + /* 0xD */ Player_InitMode_D, + /* 0xE */ func_8083ADF0, + /* 0xF */ Player_InitMode_F, +}; + +// sBlureInit +EffectBlureInit2 D_8085D30C = { + 0, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 4, + 0, 2, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, +}; + +// sTireMarkInit ? +EffectTireMarkInit D_8085D330 = { 0, 63, { 0, 0, 15, 100 } }; + +// sTireMarkGoronColor ? +Color_RGBA8 D_8085D338 = { 0, 0, 15, 100 }; +// sTireMarkOtherColor ? +Color_RGBA8 D_8085D33C = { 0, 0, 0, 150 }; +Vec3f D_8085D340 = { 0.0f, 50.0f, 0.0f }; + +void Player_Init(Actor* thisx, PlayState* play) { + s32 pad; + Player* this = THIS; + s8 objBankIndex; + s32 respawnFlag; + s32 var_a1; + PlayerInitMode initMode; + + play->playerInit = Player_InitCommon; + play->playerUpdate = Player_UpdateCommon; + play->unk_18770 = func_8085B170; + play->startPlayerFishing = Player_StartFishing; + play->grabPlayer = Player_GrabPlayer; + play->startPlayerCutscene = func_8085B28C; + play->func_18780 = func_8085B384; + play->damagePlayer = Player_InflictDamage; + play->talkWithPlayer = Player_TalkWithPlayer; + play->unk_1878C = func_8085B74C; + play->unk_18790 = func_8085B820; + play->unk_18794 = func_8085B854; + play->setPlayerTalkAnim = func_8085B930; + + gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = GAMEPLAY_KEEP; + + this->actor.room = -1; + this->csId = CS_ID_NONE; + + if (this->actor.shape.rot.x != 0) { + this->transformation = this->actor.shape.rot.x - 1; + + objBankIndex = Object_GetIndex(&play->objectCtx, gPlayerFormObjectIndices[this->transformation]); + this->actor.objBankIndex = objBankIndex; + if (objBankIndex < 0) { + Actor_Kill(&this->actor); + return; + } + + Actor_SetObjectDependency(play, &this->actor); + } else { + this->transformation = gSaveContext.save.playerForm; + if (this->transformation == PLAYER_FORM_HUMAN) { + if (gSaveContext.save.equippedMask == PLAYER_MASK_GIANT) { + gSaveContext.save.equippedMask = PLAYER_MASK_NONE; + } + this->currentMask = gSaveContext.save.equippedMask; + } else { + this->currentMask = this->transformation + PLAYER_MASK_FIERCE_DEITY; + gSaveContext.save.equippedMask = PLAYER_MASK_NONE; + } + + Inventory_UpdateDeitySwordEquip(play); + + this->unk_B28 = 0; + this->unk_B90 = 0; + this->unk_B92 = 0; + this->unk_B94 = 0; + this->unk_B96 = 0; + this->stateFlags1 &= ~(PLAYER_STATE1_8 | PLAYER_STATE1_1000 | PLAYER_STATE1_1000000 | PLAYER_STATE1_2000000); + this->stateFlags2 &= ~(PLAYER_STATE2_20000 | PLAYER_STATE2_1000000 | PLAYER_STATE2_40000000); + this->stateFlags3 &= + ~(PLAYER_STATE3_8 | PLAYER_STATE3_40 | PLAYER_STATE3_80 | PLAYER_STATE3_100 | PLAYER_STATE3_200 | + PLAYER_STATE3_800 | PLAYER_STATE3_1000 | PLAYER_STATE3_2000 | PLAYER_STATE3_8000 | PLAYER_STATE3_10000 | + PLAYER_STATE3_40000 | PLAYER_STATE3_80000 | PLAYER_STATE3_100000 | PLAYER_STATE3_200000 | + PLAYER_STATE3_800000 | PLAYER_STATE3_1000000 | PLAYER_STATE3_2000000); + this->unk_B08 = 0.0f; + this->unk_B0C = 0.0f; + } + + if (this->transformation == PLAYER_FORM_ZORA) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + this->unk_B10[0] = 1.0f; + } else { + this->unk_B10[0] = 0.0f; + } + } + + this->actor.flags &= ~(ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH | ACTOR_FLAG_CAN_PRESS_SWITCH); + if (this->transformation != PLAYER_FORM_DEKU) { + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH; + if (this->transformation == PLAYER_FORM_GORON) { + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH; + } + } + + this->ageProperties = &sPlayerAgeProperties[this->transformation]; + + this->itemAction = PLAYER_IA_NONE; + this->heldItemAction = PLAYER_IA_NONE; + this->heldItemId = ITEM_NONE; + + func_80831990(play, this, ITEM_NONE); + Player_SetEquipmentData(play, this); + this->prevBoots = this->currentBoots; + Player_InitCommon(this, play, gPlayerSkeletons[this->transformation]); + + if (this->actor.shape.rot.z != 0) { + EffectTireMark* tireMark; + + this->actor.shape.rot.z = 0; + Player_OverrideBlureColors(play, this, 0, 4); + + tireMark = Effect_GetByIndex(this->meleeWeaponEffectIndex[2]); + if (this->transformation == PLAYER_FORM_GORON) { + tireMark->color = D_8085D338; + } else { + tireMark->color = D_8085D33C; + } + + if ((this->csMode == PLAYER_CSMODE_9) || (this->csMode == PLAYER_CSMODE_93)) { + Player_SetAction(play, this, func_8085B08C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } else { + Player_SetAction(play, this, func_80855818, 0); + this->actor.shape.rot.y = this->currentYaw; + + if (this->prevMask != PLAYER_MASK_NONE) { + func_8082DB90(play, this, &gPlayerAnim_cl_maskoff); + } else if (this->transformation == PLAYER_FORM_HUMAN) { + PlayerAnimation_Change(play, &this->skelAnime, D_8085D160[this->transformation], -2.0f / 3.0f, 9.0f, + 0.0f, ANIMMODE_ONCE, 0.0f); + } else { + func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend); + } + + this->stateFlags1 |= (PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000); + this->stateFlags3 |= PLAYER_STATE3_20000; + this->unk_B10[5] = 3.0f; + } + return; + } + + this->prevMask = this->currentMask; + + Effect_Add(play, &this->meleeWeaponEffectIndex[0], EFFECT_BLURE2, 0, 0, &D_8085D30C); + Effect_Add(play, &this->meleeWeaponEffectIndex[1], EFFECT_BLURE2, 0, 0, &D_8085D30C); + + Player_OverrideBlureColors(play, this, 0, 4); + if (this->transformation == PLAYER_FORM_GORON) { + D_8085D330.color = D_8085D338; + } else { + D_8085D330.color = D_8085D33C; + } + Effect_Add(play, &this->meleeWeaponEffectIndex[2], EFFECT_TIRE_MARK, 0, 0, &D_8085D330); + + if (this->actor.shape.rot.x != 0) { + this->actor.shape.rot.x = 0; + this->csMode = PLAYER_CSMODE_68; + Player_SetAction(play, this, func_8085B08C, 0); + this->stateFlags1 |= PLAYER_STATE1_20000000; + return; + } + + play->unk_1887C = 0; + play->unk_1887D = 0; + play->unk_1887E = 0; + this->giObjectSegment = ZeldaArena_Malloc(0x2000); + this->maskObjectSegment = ZeldaArena_Malloc(0x3800); + + Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 255, 128, 0, -1); + this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo); + Play_AssignPlayerCsIdsFromScene(&play->state, this->actor.csId); + + respawnFlag = gSaveContext.respawnFlag; + if (respawnFlag != 0) { + if (respawnFlag == -3) { + this->actor.params = gSaveContext.respawn[RESPAWN_MODE_UNK_3].playerParams; + } else { + if ((respawnFlag == 1) || (respawnFlag == -1)) { + this->unk_D6A = -2; + } + + if (respawnFlag != -7) { + s32 respawnIndex; + + if ((respawnFlag == -8) || (respawnFlag == -5) || (respawnFlag == -4)) { + respawnFlag = 1; + } + + if ((respawnFlag < 0) && (respawnFlag != -1) && (respawnFlag != -6)) { + respawnIndex = RESPAWN_MODE_DOWN; + } else { + respawnIndex = (respawnFlag < 0) ? RESPAWN_MODE_TOP : respawnFlag - 1; + + Math_Vec3f_Copy(&this->actor.world.pos, &gSaveContext.respawn[respawnIndex].pos); + Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos); + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos); + + this->fallStartHeight = this->actor.world.pos.y; + + this->currentYaw = this->actor.shape.rot.y = gSaveContext.respawn[respawnIndex].yaw; + this->actor.params = gSaveContext.respawn[respawnIndex].playerParams; + } + + play->actorCtx.sceneFlags.switches[2] = gSaveContext.respawn[respawnIndex].tempSwitchFlags; + play->actorCtx.sceneFlags.collectible[1] = gSaveContext.respawn[respawnIndex].unk_18; + play->actorCtx.sceneFlags.collectible[2] = gSaveContext.respawn[respawnIndex].tempCollectFlags; + } + } + } + + var_a1 = ((respawnFlag == 4) || (gSaveContext.respawnFlag == -4)) ? 1 : 0; + if (func_801226E0(play, var_a1) == 0) { + gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = PLAYER_PARAMS(thisx->params, PLAYER_INITMODE_D); + } + + gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1; + if (respawnFlag == 0) { + gSaveContext.respawn[RESPAWN_MODE_TOP] = gSaveContext.respawn[RESPAWN_MODE_DOWN]; + } + gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = + PLAYER_PARAMS(gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams, PLAYER_INITMODE_D); + + initMode = PLAYER_GET_INITMODE(&this->actor); + if (((initMode == PLAYER_INITMODE_5) || (initMode == PLAYER_INITMODE_6)) && + (gSaveContext.save.cutsceneIndex >= 0xFFF0)) { + initMode = PLAYER_INITMODE_D; + } + + D_8085D2CC[initMode](play, this); + + if ((this->actor.draw != NULL) && gSaveContext.save.hasTatl && + ((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && + (play->sceneId != SCENE_SPOT00)) { + this->tatlActor = Player_SpawnFairy(play, this, &this->actor.world.pos, &D_8085D340, 0); + + if (gSaveContext.dogParams != 0) { + gSaveContext.dogParams |= 0x8000; + } + + if (gSaveContext.powderKegTimer != 0) { + this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_POWDER_KEG); + this->heldItemId = ITEM_POWDER_KEG; + func_8082F8BC(play, this, PLAYER_IA_POWDER_KEG); + func_808313F0(this, play); + } else if (gSaveContext.unk_1014 != 0) { + func_8082F5FC(this, Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MM, + this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, 0x8000)); + func_808313F0(this, play); + } + } + + Minimap_SavePlayerRoomInitInfo(play); + func_80841A50(play, this); + this->unk_3CF = 0; + R_PLAY_FILL_SCREEN_ON = 0; +} + +void func_80842510(s16* arg0) { + s16 temp_ft0; + + temp_ft0 = (ABS_ALT(*arg0) * 100.0f) / 1000.0f; + temp_ft0 = CLAMP(temp_ft0, 0x190, 0xFA0); + + Math_ScaledStepToS(arg0, 0, temp_ft0); +} + +void func_808425B4(Player* this) { + if (!(this->unk_AA6 & 2)) { + s16 sp26 = this->actor.focus.rot.y - this->actor.shape.rot.y; + + func_80842510(&sp26); + this->actor.focus.rot.y = this->actor.shape.rot.y + sp26; + } + if (!(this->unk_AA6 & 1)) { + func_80842510(&this->actor.focus.rot.x); + } + if (!(this->unk_AA6 & 8)) { + func_80842510(&this->headLimbRot.x); + } + if (!(this->unk_AA6 & 0x40)) { + func_80842510(&this->upperLimbRot.x); + } + if (!(this->unk_AA6 & 4)) { + func_80842510(&this->actor.focus.rot.z); + } + if (!(this->unk_AA6 & 0x10)) { + func_80842510(&this->headLimbRot.y); + } + if (!(this->unk_AA6 & 0x20)) { + func_80842510(&this->headLimbRot.z); + } + if (!(this->unk_AA6 & 0x80)) { + if (this->unk_AA8 != 0) { + func_80842510(&this->unk_AA8); + } else { + func_80842510(&this->upperLimbRot.y); + } + } + if (!(this->unk_AA6 & 0x100)) { + func_80842510(&this->upperLimbRot.z); + } + + this->unk_AA6 = 0; +} + +/** + * Sets the DoAction for the interface A/B buttons, depending on a significant number of things + */ +void Player_SetDoAction(PlayState* play, Player* this) { + DoAction doActionB; + s32 sp38; + + if (this != GET_PLAYER(play)) { + return; + } + + doActionB = -1; + sp38 = func_801242B4(this) || (func_8084CA24 == this->actionFunc); + + // Set B do action + if (this->transformation == PLAYER_FORM_GORON) { + if (this->stateFlags3 & PLAYER_STATE3_80000) { + doActionB = DO_ACTION_NONE; + } else if (this->stateFlags3 & PLAYER_STATE3_1000) { + doActionB = DO_ACTION_POUND; + } else { + doActionB = DO_ACTION_PUNCH; + } + } else if (this->transformation == PLAYER_FORM_ZORA) { + if ((!(this->stateFlags1 & PLAYER_STATE1_8000000)) || + (!sp38 && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + doActionB = DO_ACTION_PUNCH; + } else { + doActionB = DO_ACTION_DIVE; + } + } else if (this->transformation == PLAYER_FORM_DEKU) { + doActionB = DO_ACTION_SHOOT; + } else { // PLAYER_FORM_HUMAN + if (this->currentMask == PLAYER_MASK_BLAST) { + doActionB = DO_ACTION_EXPLODE; + } else if (this->currentMask == PLAYER_MASK_BREMEN) { + doActionB = DO_ACTION_MARCH; + } else if (this->currentMask == PLAYER_MASK_KAMARO) { + doActionB = DO_ACTION_DANCE; + } + } + + if (doActionB > -1) { + func_801155B4(play, doActionB); + } else if (play->interfaceCtx.unk_21C != 0) { + play->interfaceCtx.unk_21C = 0; + play->interfaceCtx.bButtonDoAction = 0; + } + + // Set A do action + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) || + ((play->msgCtx.currentTextId >= 0x100) && (play->msgCtx.currentTextId <= 0x200)) || + ((play->msgCtx.currentTextId >= 0x1BB2) && (play->msgCtx.currentTextId < 0x1BB7))) { + Actor* heldActor = this->heldActor; + Actor* interactRangeActor = this->interactRangeActor; + s32 pad; + s32 sp28 = this->unk_AE3[this->unk_ADE]; + s32 sp24; + DoAction doActionA = + ((this->transformation == PLAYER_FORM_GORON) && !(this->stateFlags1 & PLAYER_STATE1_400000)) + ? DO_ACTION_CURL + : DO_ACTION_NONE; + + if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { + doActionA = DO_ACTION_SNAP; + } else if (Player_InBlockingCsMode(play, this) || (this->actor.flags & ACTOR_FLAG_20000000) || + (this->stateFlags1 & PLAYER_STATE1_1000) || (this->stateFlags3 & PLAYER_STATE3_80000) || + (func_80854430 == this->actionFunc)) { + doActionA = DO_ACTION_NONE; + } else if (this->stateFlags1 & PLAYER_STATE1_100000) { + doActionA = DO_ACTION_RETURN; + } else if ((this->heldItemAction == PLAYER_IA_FISHING_ROD) && (this->unk_B28 != 0)) { + doActionA = (this->unk_B28 == 2) ? DO_ACTION_REEL : DO_ACTION_NONE; + doActionA = (this->unk_B28 == 2) ? DO_ACTION_REEL : DO_ACTION_NONE; //! FAKE: duplicated statement + } else if (this->stateFlags3 & PLAYER_STATE3_2000) { + doActionA = DO_ACTION_DOWN; + } else if ((this->doorType != PLAYER_DOORTYPE_NONE) && (this->doorType != PLAYER_DOORTYPE_STAIRCASE) && + !(this->stateFlags1 & PLAYER_STATE1_800)) { + doActionA = DO_ACTION_OPEN; + } else if (this->stateFlags3 & PLAYER_STATE3_200000) { + static u8 D_8085D34C[] = { + DO_ACTION_1, DO_ACTION_2, DO_ACTION_3, DO_ACTION_4, DO_ACTION_5, DO_ACTION_6, DO_ACTION_7, DO_ACTION_8, + }; + + doActionA = D_8085D34C[this->remainingHopsCounter]; + } else if ((!(this->stateFlags1 & PLAYER_STATE1_800) || (heldActor == NULL)) && (interactRangeActor != NULL) && + (this->getItemId < GI_NONE)) { + doActionA = DO_ACTION_OPEN; + } else if (!sp38 && (this->stateFlags2 & PLAYER_STATE2_1)) { + doActionA = DO_ACTION_GRAB; + } else if ((this->stateFlags2 & PLAYER_STATE2_4) || + (!(this->stateFlags1 & PLAYER_STATE1_800000) && (this->rideActor != NULL))) { + doActionA = DO_ACTION_CLIMB; + } else if ((this->stateFlags1 & PLAYER_STATE1_800000) && + (!EN_HORSE_CHECK_4((EnHorse*)this->rideActor) && (func_808505D0 != this->actionFunc))) { + if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) { + if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->id == ACTOR_DM_CHAR08)) { + doActionA = DO_ACTION_SPEAK; + } else { + doActionA = DO_ACTION_CHECK; + } + } else if (!func_8082DA90(play) && !func_800B7128(this) && !(this->stateFlags1 & PLAYER_STATE1_100000)) { + doActionA = DO_ACTION_FASTER; + } else { + doActionA = DO_ACTION_NONE; + } + } else if ((this->stateFlags2 & PLAYER_STATE2_2) && (this->talkActor != NULL)) { + if ((this->talkActor->category == ACTORCAT_NPC) || (this->talkActor->category == ACTORCAT_ENEMY) || + (this->talkActor->id == ACTOR_DM_CHAR08)) { + doActionA = DO_ACTION_SPEAK; + } else { + doActionA = DO_ACTION_CHECK; + } + } else if ((this->stateFlags1 & (PLAYER_STATE1_2000 | PLAYER_STATE1_200000)) || + ((this->stateFlags1 & PLAYER_STATE1_800000) && (this->stateFlags2 & PLAYER_STATE2_400000))) { + doActionA = DO_ACTION_DOWN; + } else if ((this->stateFlags1 & PLAYER_STATE1_800) && (this->getItemId == GI_NONE) && (heldActor != NULL)) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (heldActor->id == ACTOR_EN_NIW)) { + if (!func_8083D738(this, heldActor)) { + doActionA = DO_ACTION_DROP; + } else { + doActionA = DO_ACTION_THROW; + } + } else { + doActionA = DO_ACTION_NONE; + } + } else if (this->stateFlags2 & PLAYER_STATE2_10000) { + doActionA = DO_ACTION_GRAB; + } else if (this->stateFlags2 & PLAYER_STATE2_800) { + static u8 D_8085D354[] = { DO_ACTION_1, DO_ACTION_2 }; + s32 var_v0; + + var_v0 = ((120.0f - this->actor.depthInWater) / 40.0f); + var_v0 = CLAMP(var_v0, 0, ARRAY_COUNT(D_8085D354) - 1); + + doActionA = D_8085D354[var_v0]; + } else if (this->stateFlags3 & PLAYER_STATE3_100) { + doActionA = DO_ACTION_JUMP; + } else if (this->stateFlags3 & PLAYER_STATE3_1000) { + doActionA = DO_ACTION_RETURN; + } else if (!func_8082FBE8(this) && (this->stateFlags1 & PLAYER_STATE1_8000000) && !sp38) { + doActionA = DO_ACTION_SURFACE; + } else if (((this->transformation != PLAYER_FORM_DEKU) && + (sp38 || ((this->stateFlags1 & PLAYER_STATE1_8000000) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)))) || + ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + func_800C9DDC(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) { + doActionA = (this->transformation == PLAYER_FORM_ZORA) ? DO_ACTION_SWIM + : ((this->stateFlags1 & PLAYER_STATE1_8000000) && (interactRangeActor != NULL) && + (interactRangeActor->id == ACTOR_EN_ZOG)) + ? DO_ACTION_GRAB + : DO_ACTION_DIVE; + } else { + sp24 = func_8082FBE8(this); + if ((sp24 && (this->transformation != PLAYER_FORM_DEKU)) || !(this->stateFlags1 & PLAYER_STATE1_400000) || + !Player_IsGoronOrDeku(this)) { + if ((this->transformation != PLAYER_FORM_GORON) && + !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_4000)) && (sp28 <= 0) && + ((func_80123420(this)) || + ((sPlayerCurrentFloorType != FLOOR_TYPE_7) && + ((func_80123434(this)) || ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && + !(this->stateFlags1 & PLAYER_STATE1_400000) && (sp28 == 0)))))) { + doActionA = DO_ACTION_ATTACK; + } else if ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && sp24 && (sp28 > 0)) { + doActionA = DO_ACTION_JUMP; + } else if ((this->transformation == PLAYER_FORM_DEKU) && !(this->stateFlags1 & PLAYER_STATE1_8000000) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + doActionA = DO_ACTION_ATTACK; + } else if (((this->transformation == PLAYER_FORM_HUMAN) || + (this->transformation == PLAYER_FORM_ZORA)) && + ((this->heldItemAction >= PLAYER_IA_SWORD_KOKIRI) || + ((this->stateFlags2 & PLAYER_STATE2_100000) && + (play->actorCtx.targetContext.arrowPointedActor == NULL)))) { + doActionA = DO_ACTION_PUTAWAY; + + if (play->msgCtx.currentTextId == 0) {} //! FAKE + } + } + } + + if (doActionA != DO_ACTION_PUTAWAY) { + this->putAwayCountdown = 20; + } else if (this->putAwayCountdown != 0) { + doActionA = DO_ACTION_NONE; + this->putAwayCountdown--; + } + + func_8011552C(play, doActionA); + + // Set Tatl state + if (!Play_InCsMode(play) && (this->stateFlags2 & PLAYER_STATE2_200000) && + !(this->stateFlags3 & PLAYER_STATE3_100)) { + if (this->targetedActor != NULL) { + func_80115764(play, 0x2B); + } else { + func_80115764(play, 0x2A); + } + CutsceneManager_Queue(CS_ID_GLOBAL_TALK); + } else { + func_80115764(play, 0x2C); + } + } +} + +s32 func_808430E0(Player* this) { + if ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && + func_8083784C(this)) { + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + return false; + } + + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + sPlayerCurrentFloorType = FLOOR_TYPE_0; + } + this->unk_B6C = 0; + this->unk_B6E = 0; + D_80862B28 = 0; + return true; +} + +void func_80843178(PlayState* play, Player* this) { + u8 spC7 = 0; + CollisionPoly* floorPoly; + f32 temp_fv0; + f32 temp_fv0_3; + f32 temp_fv1; + u32 updBgCheckInfoFlags; + s32 spAC = (func_8084D820 == this->actionFunc) && (this->unk_397 == 4); + + sPlayerPrevFloorProperty = this->floorProperty; + + temp_fv0 = this->ageProperties->unk_38; + temp_fv1 = this->ageProperties->unk_00; + + if (this->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_80000000)) { + if ((!(this->stateFlags1 & PLAYER_STATE1_80) && !(this->stateFlags2 & PLAYER_STATE2_4000) && + (this->stateFlags1 & PLAYER_STATE1_80000000)) || + spAC) { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } else { + if ((this->stateFlags1 & 1) && (play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) && + ((this->unk_D68 - (s32)this->actor.world.pos.y) >= 100)) { + updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } else if (!(this->stateFlags1 & PLAYER_STATE1_1) && + ((func_8084E034 == this->actionFunc) || (func_8084D820 == this->actionFunc))) { + updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + this->actor.bgCheckFlags &= ~(BGCHECKFLAG_WALL | BGCHECKFLAG_PLAYER_WALL_INTERACT); + } else { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } + } + } else { + if (func_808561B0 == this->actionFunc) { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_800; + } else if ((this->stateFlags3 & (PLAYER_STATE3_1000 | PLAYER_STATE3_80000)) && (this->linearVelocity >= 8.0f)) { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20 | UPDBGCHECKINFO_FLAG_100 | + UPDBGCHECKINFO_FLAG_200; + } else { + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_20; + } + } + + if (this->stateFlags3 & PLAYER_STATE3_1) { + updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); + } + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4) { + this->stateFlags3 |= PLAYER_STATE3_10; + } + + if (func_801242B4(this)) { + updBgCheckInfoFlags &= ~(UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); + } + + Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, temp_fv0, temp_fv1, updBgCheckInfoFlags); + + this->unk_AC0 -= (this->actor.world.pos.y - this->actor.prevPos.y) / this->actor.scale.y; + this->unk_AC0 = CLAMP(this->unk_AC0, -1000.0f, 1000.0f); + + if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) { + this->actor.velocity.y = 0.0f; + } + + D_80862B18 = this->actor.world.pos.y - this->actor.floorHeight; + sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; + floorPoly = this->actor.floorPoly; + + if ((floorPoly != NULL) && (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4)) { + this->floorProperty = SurfaceType_GetFloorProperty(&play->colCtx, floorPoly, this->actor.floorBgId); + if (this == GET_PLAYER(play)) { + func_801A3CF4(SurfaceType_GetEcho(&play->colCtx, floorPoly, this->actor.floorBgId)); + if (this->actor.floorBgId == BGCHECK_SCENE) { + func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, this->actor.floorBgId)); + } else { + DynaPoly_SetPlayerAbove(&play->colCtx, this->actor.floorBgId); + } + } + + sPlayerConveyorSpeedIndex = SurfaceType_GetConveyorSpeed(&play->colCtx, floorPoly, this->actor.floorBgId); + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { + sPlayerIsOnFloorConveyor = SurfaceType_IsFloorConveyor(&play->colCtx, floorPoly, this->actor.floorBgId); + if ((!sPlayerIsOnFloorConveyor && (this->actor.depthInWater > 20.0f)) || + (sPlayerIsOnFloorConveyor && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + D_80862B16 = SurfaceType_GetConveyorDirection(&play->colCtx, floorPoly, this->actor.floorBgId) << 0xA; + } else { + sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; + } + } + } + + this->actor.bgCheckFlags &= ~BGCHECKFLAG_PLAYER_WALL_INTERACT; + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + static Vec3f D_8085D358 = { 0.0f, 0.0f, 0.0f }; + CollisionPoly* spA8; + s32 spA4; + s16 temp_v1_3; + f32 sp9C; + + D_8085D358.y = 178.0f * 0.1f; + D_8085D358.z = this->ageProperties->unk_38 + 10.0f; + + if (func_80835D58(play, this, &D_8085D358, &spA8, &spA4, &D_80862B30)) { + this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_WALL_INTERACT; + if (spA8 != this->actor.wallPoly) { + this->actor.wallPoly = spA8; + this->actor.wallBgId = spA4; + this->actor.wallYaw = Math_Atan2S_XY(spA8->normal.z, spA8->normal.x); + } + } + + temp_v1_3 = this->actor.shape.rot.y - BINANG_ADD(this->actor.wallYaw, 0x8000); + sPlayerCurrentWallFlags = SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); + D_80862B20 = ABS_ALT(temp_v1_3); + temp_v1_3 = BINANG_SUB(this->currentYaw, BINANG_ADD(this->actor.wallYaw, 0x8000)); + D_80862B24 = ABS_ALT(temp_v1_3); + + temp_fv0_3 = D_80862B24 * 0.00008f; + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (temp_fv0_3 >= 1.0f)) { + this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f; + } else { + temp_fv1 = (R_RUN_SPEED_LIMIT / 100.0f) * temp_fv0_3; + + this->unk_B50 = temp_fv1; + if (temp_fv1 < 0.1f) { + this->unk_B50 = 0.1f; + } + } + + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && (D_80862B20 < 0x3000)) { + CollisionPoly* wallPoly = this->actor.wallPoly; + + if (ABS_ALT(wallPoly->normal.y) < 0x258) { + f32 wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x); + f32 wallPolyNormalY = COLPOLY_GET_NORMAL(wallPoly->normal.y); + f32 wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z); + f32 temp_fv1_3; + CollisionPoly* sp84; + CollisionPoly* sp80; + s32 sp7C; + Vec3f sp70; + f32 temp_fv0_5; + f32 sp68; + s32 temp_v1_6; + + this->wallDistance = Math3D_UDistPlaneToPos(wallPolyNormalX, wallPolyNormalY, wallPolyNormalZ, + wallPoly->dist, &this->actor.world.pos); + temp_fv1_3 = this->wallDistance + 10.0f; + sp70.x = this->actor.world.pos.x - (temp_fv1_3 * wallPolyNormalX); + sp70.z = this->actor.world.pos.z - (temp_fv1_3 * wallPolyNormalZ); + sp70.y = this->actor.world.pos.y + this->ageProperties->unk_0C; + temp_fv0_5 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp84, &sp7C, &this->actor, &sp70); + + this->wallHeight = temp_fv0_5 - this->actor.world.pos.y; + if ((this->wallHeight < 178.0f * 0.1f) || + ((BgCheck_EntityCheckCeiling(&play->colCtx, &sp68, &this->actor.world.pos, + (temp_fv0_5 - this->actor.world.pos.y) + 20.0f, &sp80, &sp7C, + &this->actor) != 0))) { + this->wallHeight = 399.96002f; + } else { + D_8085D358.y = (temp_fv0_5 + 5.0f) - this->actor.world.pos.y; + + if ((func_80835D58(play, this, &D_8085D358, &sp80, &sp7C, &D_80862B30)) && + (temp_v1_6 = this->actor.wallYaw - Math_Atan2S_XY(sp80->normal.z, sp80->normal.x), + ABS_ALT(temp_v1_6) < 0x4000) && + !(SurfaceType_CheckWallFlag1(&play->colCtx, sp80, sp7C))) { + this->wallHeight = 399.96002f; + } else if (SurfaceType_CheckWallFlag0(&play->colCtx, wallPoly, this->actor.wallBgId) == 0) { + if (this->ageProperties->unk_1C <= this->wallHeight) { + if (ABS_ALT(sp84->normal.y) > 0x5DC0) { + if ((this->ageProperties->unk_14 <= this->wallHeight) || func_801242B4(this)) { + spC7 = 4; + } else if (this->ageProperties->unk_18 <= this->wallHeight) { + spC7 = 3; + } else { + spC7 = 2; + } + } + } else { + spC7 = 1; + } + } + } + } + } + } else { + this->unk_B50 = R_RUN_SPEED_LIMIT / 100.0f; + this->wallHeight = 0.0f; + this->unk_B5D = 0; + } + + if (spC7 == this->unk_B5C) { + if (this->linearVelocity != 0.0f) { + if (this->unk_B5D < 0x64) { + this->unk_B5D++; + } + } + } else { + this->unk_B5C = spC7; + this->unk_B5D = 0; + } + + sPlayerCurrentFloorType = SurfaceType_GetFloorType(&play->colCtx, floorPoly, this->actor.floorBgId); + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + f32 floorPolyNormalX; + f32 floorPolyNormalY; + f32 floorPolyNormalZ; + f32 sp54; + s32 pad; + f32 sp4C; + + D_80862B40 = SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + if (func_808430E0(this) == 0) { + floorPolyNormalY = COLPOLY_GET_NORMAL(floorPoly->normal.y); + + if (this->actor.floorBgId != BGCHECK_SCENE) { + DynaPoly_SetPlayerOnTop(&play->colCtx, this->actor.floorBgId); + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) && (this->actor.depthInWater <= 24.0f) && + (D_80862B40 != FLOOR_EFFECT_1) && (sPlayerConveyorSpeedIndex == CONVEYOR_SPEED_DISABLED) && + (floorPolyNormalY > 0.5f)) { + if (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_SONG_WARP]) { + func_80841A50(play, this); + } + } + + floorPolyNormalX = COLPOLY_GET_NORMAL(floorPoly->normal.x); + floorPolyNormalY = 1.0f / floorPolyNormalY; + floorPolyNormalZ = COLPOLY_GET_NORMAL(floorPoly->normal.z); + + sp54 = Math_SinS(this->currentYaw); + sp4C = Math_CosS(this->currentYaw); + this->unk_B6C = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY); + this->unk_B6E = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp4C) - (floorPolyNormalZ * sp54)) * floorPolyNormalY); + sp54 = Math_SinS(this->actor.shape.rot.y); + sp4C = Math_CosS(this->actor.shape.rot.y); + D_80862B28 = + Math_Atan2S_XY(1.0f, (-(floorPolyNormalX * sp54) - (floorPolyNormalZ * sp4C)) * floorPolyNormalY); + func_8083CF68(play, this); + } + } else { + func_808430E0(this); + D_80862B40 = FLOOR_EFFECT_0; + } + + if (floorPoly != NULL) { + this->unk_D66 = this->floorSfxOffset; + if (spAC != 0) { + this->floorSfxOffset = NA_SE_PL_WALK_CONCRETE - SFX_FLAG; + return; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) { + if (this->actor.depthInWater < 50.0f) { + if (this->actor.depthInWater < 20.0f) { + this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_SE_PL_WALK_DIRT - SFX_FLAG + : NA_SE_PL_WALK_WATER0 - SFX_FLAG; + } else { + this->floorSfxOffset = (sPlayerCurrentFloorType == FLOOR_TYPE_13) ? NA_CODE_DIRT_DEEP - SFX_FLAG + : NA_SE_PL_WALK_WATER1 - SFX_FLAG; + } + + return; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_200) { + this->floorSfxOffset = NA_SE_PL_WALK_SAND - SFX_FLAG; + } else if (COLPOLY_GET_NORMAL(floorPoly->normal.y) > 0.5f) { + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, floorPoly, this->actor.floorBgId); + } + } +} + +void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) { + u8 seqMode; + s32 pad[2]; + Camera* camera; + s32 camMode; + + if (this == GET_PLAYER(play)) { + seqMode = SEQ_MODE_DEFAULT; + if (this->stateFlags1 & PLAYER_STATE1_100000) { + seqMode = SEQ_MODE_STILL; + } else if (this->csMode != PLAYER_CSMODE_0) { + Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_NORMAL); + } else { + camera = (this->actor.id == ACTOR_PLAYER) ? Play_GetCamera(play, CAM_ID_MAIN) + : Play_GetCamera(play, ((EnTest3*)this)->subCamId); + if ((this->actor.parent != NULL) && (this->stateFlags3 & PLAYER_STATE3_80)) { + camMode = CAM_MODE_HOOKSHOT; + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->actor.parent); + } else if (func_8084BC64 == this->actionFunc) { + camMode = CAM_MODE_STILL; + } else if (this->stateFlags3 & PLAYER_STATE3_8000) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + camMode = CAM_MODE_GORONDASH; + } else { + camMode = CAM_MODE_FREEFALL; + } + } else if (this->stateFlags3 & PLAYER_STATE3_80000) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + camMode = CAM_MODE_GORONDASH; + } else { + camMode = CAM_MODE_GORONJUMP; + } + } else if (this->stateFlags2 & PLAYER_STATE2_100) { + camMode = CAM_MODE_PUSHPULL; + } else if (this->targetedActor != NULL) { + if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK_REQUESTED)) { + camMode = CAM_MODE_TALK; + } else if (this->stateFlags1 & PLAYER_STATE1_10000) { + if (this->stateFlags1 & PLAYER_STATE1_2000000) { + camMode = CAM_MODE_FOLLOWBOOMERANG; + } else { + camMode = CAM_MODE_FOLLOWTARGET; + } + } else { + camMode = CAM_MODE_BATTLE; + } + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->targetedActor); + } else if (this->stateFlags1 & PLAYER_STATE1_1000) { + camMode = CAM_MODE_CHARGE; + } else if (this->stateFlags3 & PLAYER_STATE3_100) { + camMode = CAM_MODE_DEKUHIDE; + } else if (this->stateFlags1 & PLAYER_STATE1_2000000) { + camMode = CAM_MODE_FOLLOWBOOMERANG; + Camera_SetViewParam(camera, CAM_VIEW_TARGET, this->boomerangActor); + } else if (this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000)) { + if (func_80123434(this)) { + camMode = CAM_MODE_HANGZ; + } else { + camMode = CAM_MODE_HANG; + } + } else if ((this->stateFlags3 & PLAYER_STATE3_2000) && (this->actor.velocity.y < 0.0f)) { + if (this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) { + camMode = CAM_MODE_DEKUFLYZ; + } else { + camMode = CAM_MODE_DEKUFLY; + } + } else if (this->stateFlags1 & (PLAYER_STATE1_20000 | PLAYER_STATE1_40000000)) { + if (func_800B7128(this) || func_8082EF20(this)) { + camMode = CAM_MODE_BOWARROWZ; + } else if (this->stateFlags1 & PLAYER_STATE1_200000) { + camMode = CAM_MODE_CLIMBZ; + } else { + camMode = CAM_MODE_TARGET; + } + } else if ((this->stateFlags1 & PLAYER_STATE1_400000) && (this->transformation != 0)) { + camMode = CAM_MODE_STILL; + } else if (this->stateFlags1 & PLAYER_STATE1_40000) { + camMode = CAM_MODE_JUMP; + } else if (this->stateFlags1 & PLAYER_STATE1_200000) { + camMode = CAM_MODE_CLIMB; + } else if (this->stateFlags1 & PLAYER_STATE1_80000) { + camMode = CAM_MODE_FREEFALL; + } else if (((func_808548B8 == this->actionFunc) && + (this->meleeWeaponAnimation >= PLAYER_MWA_FORWARD_SLASH_1H) && + (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_PUNCH_KICK)) || + (this->stateFlags3 & PLAYER_STATE3_8) || + ((func_8084FE7C == this->actionFunc) && (this->unk_AE8 == 0)) || + (func_808505D0 == this->actionFunc)) { + camMode = CAM_MODE_STILL; + } else { + camMode = CAM_MODE_NORMAL; + if ((this->linearVelocity == 0.0f) && + (!(this->stateFlags1 & PLAYER_STATE1_800000) || (this->rideActor->speed == 0.0f))) { + seqMode = SEQ_MODE_STILL; + } + } + + Camera_ChangeMode(camera, camMode); + } + + if (play->actorCtx.targetContext.bgmEnemy != NULL) { + seqMode = SEQ_MODE_ENEMY; + Audio_UpdateEnemyBgmVolume(sqrtf(play->actorCtx.targetContext.bgmEnemy->xyzDistToPlayerSq)); + } + + Audio_SetSequenceMode(seqMode); + } +} + +Vec3f D_8085D364 = { 0.0f, 0.5f, 0.0f }; +Vec3f D_8085D370 = { 0.0f, 0.5f, 0.0f }; +Color_RGBA8 D_8085D37C = { 255, 255, 100, 255 }; +Color_RGBA8 D_8085D380 = { 255, 50, 0, 0 }; + +void func_808442D8(PlayState* play, Player* this) { + f32 var_fa0; + f32 temp_fv1; + + if (this->unk_B0C == 0.0f) { + func_80831990(play, this, ITEM_NONE); + return; + } + + var_fa0 = 1.0f; + if (DECR(this->unk_B28) == 0) { + Inventory_ChangeAmmo(ITEM_STICK, -1); + this->unk_B28 = 1; + this->unk_B0C = 0.0f; + var_fa0 = 0.0f; + } else if (this->unk_B28 >= 0xC9) { + var_fa0 = (0xD2 - this->unk_B28) / 10.0f; + } else if (this->unk_B28 < 0x14) { + var_fa0 = this->unk_B28 / 20.0f; + this->unk_B0C = var_fa0; + } + + if (var_fa0 > 0.0f) { + func_800B0EB0(play, &this->meleeWeaponInfo[0].tip, &D_8085D364, &D_8085D370, &D_8085D37C, &D_8085D380, + (var_fa0 * 200.0f), 0, 8); + if (((play->roomCtx.curRoom.enablePosLights != 0)) || (MREG(93) != 0)) { + temp_fv1 = (Rand_ZeroOne() * 30.0f) + 225.0f; + Lights_PointSetColorAndRadius(&this->lightInfo, temp_fv1, temp_fv1 * 0.7f, 0, var_fa0 * 300.0f); + } + } +} + +void func_808445C4(PlayState* play, Player* this) { + this->shockTimer--; + this->unk_B66 += this->shockTimer; + if (this->unk_B66 > 20) { + Vec3f pos; + Vec3f* bodyPartsPos; + s32 scale; + s32 randIndex; + + this->unk_B66 -= 20; + scale = this->shockTimer * 2; + if (scale > 40) { + scale = 40; + } + + randIndex = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); + bodyPartsPos = randIndex + this->bodyPartsPos; + + pos.x = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; + pos.y = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; + pos.z = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; + EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1); + func_800B8F98(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); + } +} + +/** + * Rumbles the controller when close to a secret. + */ +void Player_DetectSecrets(PlayState* play, Player* this) { + f32 step = (SQ(200.0f) * 5.0f) - (this->closestSecretDistSq * 5.0f); + + if (step < 0.0f) { + step = 0.0f; + } + + this->secretRumbleCharge += step; + if (this->secretRumbleCharge > SQ(2000.0f)) { + this->secretRumbleCharge = 0.0f; + Player_RequestRumble(play, this, 120, 20, 10, SQ(0)); + } +} + +s8 D_8085D384[92] = { + /* 0 */ PLAYER_CSMODE_0, + /* 1 */ PLAYER_CSMODE_2, + /* 2 */ PLAYER_CSMODE_2, + /* 3 */ PLAYER_CSMODE_4, + /* 4 */ PLAYER_CSMODE_3, + /* 5 */ PLAYER_CSMODE_56, + /* 6 */ PLAYER_CSMODE_8, + /* 7 */ PLAYER_CSMODE_0, + /* 8 */ PLAYER_CSMODE_0, + /* 9 */ PLAYER_CSMODE_135, + /* 10 */ PLAYER_CSMODE_21, + /* 11 */ PLAYER_CSMODE_61, + /* 12 */ PLAYER_CSMODE_62, + /* 13 */ PLAYER_CSMODE_60, + /* 14 */ PLAYER_CSMODE_63, + /* 15 */ PLAYER_CSMODE_64, + /* 16 */ PLAYER_CSMODE_65, + /* 17 */ PLAYER_CSMODE_66, + /* 18 */ PLAYER_CSMODE_70, + /* 19 */ PLAYER_CSMODE_19, + /* 20 */ PLAYER_CSMODE_71, + /* 21 */ PLAYER_CSMODE_72, + /* 22 */ PLAYER_CSMODE_67, + /* 23 */ PLAYER_CSMODE_73, + /* 24 */ PLAYER_CSMODE_74, + /* 25 */ PLAYER_CSMODE_75, + /* 26 */ PLAYER_CSMODE_68, + /* 27 */ PLAYER_CSMODE_69, + /* 28 */ PLAYER_CSMODE_76, + /* 29 */ PLAYER_CSMODE_116, + /* 30 */ PLAYER_CSMODE_0, + /* 31 */ PLAYER_CSMODE_40, + /* 32 */ PLAYER_CSMODE_0, + /* 33 */ -PLAYER_CSMODE_52, // the only negative one + /* 34 */ PLAYER_CSMODE_42, + /* 35 */ PLAYER_CSMODE_43, + /* 36 */ PLAYER_CSMODE_57, + /* 37 */ PLAYER_CSMODE_81, + /* 38 */ PLAYER_CSMODE_41, + /* 39 */ PLAYER_CSMODE_53, + /* 40 */ PLAYER_CSMODE_54, + /* 41 */ PLAYER_CSMODE_44, + /* 42 */ PLAYER_CSMODE_55, + /* 43 */ PLAYER_CSMODE_45, + /* 44 */ PLAYER_CSMODE_46, + /* 45 */ PLAYER_CSMODE_47, + /* 46 */ PLAYER_CSMODE_48, + /* 47 */ PLAYER_CSMODE_49, + /* 48 */ PLAYER_CSMODE_50, + /* 49 */ PLAYER_CSMODE_51, + /* 50 */ PLAYER_CSMODE_77, + /* 51 */ PLAYER_CSMODE_78, + /* 52 */ PLAYER_CSMODE_79, + /* 53 */ PLAYER_CSMODE_80, + /* 54 */ PLAYER_CSMODE_81, + /* 55 */ PLAYER_CSMODE_82, + /* 56 */ PLAYER_CSMODE_83, + /* 57 */ PLAYER_CSMODE_84, + /* 58 */ PLAYER_CSMODE_85, + /* 59 */ PLAYER_CSMODE_86, + /* 60 */ PLAYER_CSMODE_87, + /* 61 */ PLAYER_CSMODE_88, + /* 62 */ PLAYER_CSMODE_89, + /* 63 */ PLAYER_CSMODE_90, + /* 64 */ PLAYER_CSMODE_91, + /* 65 */ PLAYER_CSMODE_92, + /* 66 */ PLAYER_CSMODE_94, + /* 67 */ PLAYER_CSMODE_95, + /* 68 */ PLAYER_CSMODE_100, + /* 69 */ PLAYER_CSMODE_101, + /* 70 */ PLAYER_CSMODE_98, + /* 71 */ PLAYER_CSMODE_99, + /* 72 */ PLAYER_CSMODE_102, + /* 73 */ PLAYER_CSMODE_103, + /* 74 */ PLAYER_CSMODE_104, + /* 75 */ PLAYER_CSMODE_112, + /* 76 */ PLAYER_CSMODE_113, + /* 77 */ PLAYER_CSMODE_117, + /* 78 */ PLAYER_CSMODE_104, + /* 79 */ PLAYER_CSMODE_104, + /* 80 */ PLAYER_CSMODE_105, + /* 81 */ PLAYER_CSMODE_106, + /* 82 */ PLAYER_CSMODE_107, + /* 83 */ PLAYER_CSMODE_108, + /* 84 */ PLAYER_CSMODE_109, + /* 85 */ PLAYER_CSMODE_110, + /* 86 */ PLAYER_CSMODE_118, + /* 87 */ PLAYER_CSMODE_119, + /* 88 */ PLAYER_CSMODE_120, + /* 89 */ PLAYER_CSMODE_114, + /* 90 */ PLAYER_CSMODE_111, + /* 91 */ PLAYER_CSMODE_122, +}; + +f32 D_8085D3E0[PLAYER_FORM_MAX] = { + 0.8f, // PLAYER_FORM_FIERCE_DEITY + 0.6f, // PLAYER_FORM_GORON + 0.8f, // PLAYER_FORM_ZORA + 1.5f, // PLAYER_FORM_DEKU + 1.0f, // PLAYER_FORM_HUMAN +}; + +void func_80844784(PlayState* play, Player* this) { + f32 var_fv0; + s16 var_a3; + f32 temp_ft4; + s32 temp_ft2; + f32 temp_fv1_2; + f32 sp58; + f32 sp54; + f32 sp50; + f32 sp4C; + f32 sp48; + f32 sp44; + f32 temp_fa0; + f32 temp_fa1; + s16 temp_v0; + f32 temp_fv0_2; + + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (sPlayerCurrentFloorType == FLOOR_TYPE_5) && + (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)) { + var_a3 = this->currentYaw; + var_fv0 = this->linearVelocity; + temp_v0 = this->actor.world.rot.y - var_a3; + + if ((ABS_ALT(temp_v0) > 0x6000) && (this->actor.speed != 0.0f)) { + var_fv0 = 0.0f; + var_a3 += 0x8000; + } + + if ((Math_StepToF(&this->actor.speed, var_fv0, 0.35f) != 0) && (var_fv0 == 0.0f)) { + this->actor.world.rot.y = this->currentYaw; + } + + if (this->linearVelocity != 0.0f) { + temp_ft2 = (fabsf(this->linearVelocity) * 700.0f) - (fabsf(this->actor.speed) * 100.0f); + temp_ft2 = CLAMP(temp_ft2, 0, 0x546); + + Math_ScaledStepToS(&this->actor.world.rot.y, var_a3, temp_ft2); + } + if ((this->linearVelocity == 0.0f) && (this->actor.speed != 0.0f)) { + func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + this->actor.speed); + } + } else { + this->actor.speed = this->linearVelocity; + this->actor.world.rot.y = this->currentYaw; + } + + Actor_UpdateVelocityWithGravity(&this->actor); + D_80862B3C = 0.0f; + if ((gSaveContext.save.saveInfo.playerData.health != 0) && + ((this->pushedSpeed != 0.0f) || (this->windSpeed != 0.0f) || (play->envCtx.windSpeed >= 50.0f)) && + (!Player_InCsMode(play)) && + !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) && + !(this->stateFlags3 & PLAYER_STATE3_100) && (func_8084D4EC != this->actionFunc) && + (this->actor.id == ACTOR_PLAYER)) { + this->actor.velocity.x += this->pushedSpeed * Math_SinS(this->pushedYaw); + this->actor.velocity.z += this->pushedSpeed * Math_CosS(this->pushedYaw); + temp_fv1_2 = 10.0f - this->actor.velocity.y; + if (temp_fv1_2 > 0.0f) { + sp58 = D_8085D3E0[this->transformation]; + sp54 = this->windSpeed * sp58; + sp50 = Math_SinS(this->windAngleX) * sp54; + sp4C = Math_CosS(this->windAngleX) * sp54; + sp48 = Math_SinS(this->windAngleY) * sp4C; + sp44 = Math_CosS(this->windAngleY) * sp4C; + + if ((sp50 > 0.0f) && (this->transformation == PLAYER_FORM_DEKU) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + if (Player_SetAction(play, this, func_80856918, 1)) { + this->stateFlags3 |= PLAYER_STATE3_2000 | PLAYER_STATE3_1000000; + func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); + func_8019FD90(4, 2); + } + + this->unk_AE8 = 0x270F; + Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos); + } + + if (play->envCtx.windSpeed >= 50.0f) { + temp_fa0 = play->envCtx.windDir.x; + temp_fa1 = play->envCtx.windDir.y; + temp_ft4 = play->envCtx.windDir.z; + + temp_fv0_2 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1) + SQ(temp_ft4)); + if (temp_fv0_2 != 0.0f) { + temp_fv0_2 = ((play->envCtx.windSpeed - 50.0f) * 0.1f * sp58) / temp_fv0_2; + + sp48 -= temp_fa0 * temp_fv0_2; + sp50 -= temp_fa1 * temp_fv0_2; + sp44 -= temp_ft4 * temp_fv0_2; + } + } + + if (temp_fv1_2 < sp50) { + temp_fv1_2 /= sp50; + + sp48 *= temp_fv1_2; + sp50 *= temp_fv1_2; + sp44 *= temp_fv1_2; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + D_80862B3C = (sp44 * Math_CosS(this->currentYaw)) + (Math_SinS(this->currentYaw) * sp48); + if (fabsf(D_80862B3C) > 4.0f) { + func_8083FBC4(play, this); + } + + func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + fabsf(D_80862B3C)); + } + + this->actor.velocity.x += sp48; + this->actor.velocity.z += sp44; + this->actor.velocity.y += sp50; + } + } + + Actor_UpdatePos(&this->actor); +} + +Color_RGBA8 D_8085D3F4 = { 100, 255, 255, 0 }; +Color_RGBA8 D_8085D3F8 = { 0, 100, 100, 0 }; + +void func_80844D80(PlayState* play, Player* this) { + Vec3f pos; + Vec3f spA0; + Vec3f velocity; + Vec3f accel; + Vec3f sp7C; + s32 i; + + Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, &this->meleeWeaponInfo[0].base, &sp7C); + Math_Vec3f_SumScaled(&this->meleeWeaponInfo[0].base, &sp7C, 0.3f, &spA0); + + for (i = 0; i < 2; i++) { + Math_Vec3f_SumScaled(&this->meleeWeaponInfo[0].base, &sp7C, Rand_ZeroOne(), &pos); + Math_Vec3f_AddRand(&pos, 15.0f, &pos); + Math_Vec3f_DistXYZAndStoreNormDiff(&spA0, &pos, 1.7f, &velocity); + Math_Vec3f_ScaleAndStore(&velocity, 0.01f, &accel); + EffectSsKirakira_SpawnDispersed(play, &pos, &velocity, &accel, &D_8085D3F4, &D_8085D3F8, + Rand_S16Offset(-20, -120), 15); + } +} + +f32 D_8085D3FC[] = { 0.005f, 0.05f }; + +f32 sWaterConveyorSpeeds[CONVEYOR_SPEED_MAX - 1] = { + 2.0f, // CONVEYOR_SPEED_SLOW + 4.0f, // CONVEYOR_SPEED_MEDIUM + 11.0f, // CONVEYOR_SPEED_FAST +}; +f32 sFloorConveyorSpeeds[CONVEYOR_SPEED_MAX - 1] = { + 0.5f, // CONVEYOR_SPEED_SLOW + 1.0f, // CONVEYOR_SPEED_MEDIUM + 3.0f, // CONVEYOR_SPEED_FAST +}; + +void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { + f32 temp_fv0; + f32 temp_fv1; + + sPlayerControlInput = input; + if (this->unk_D6A < 0) { + this->unk_D6A++; + if (this->unk_D6A == 0) { + this->unk_D6A = 1; + play_sound(NA_SE_OC_REVENGE); + } + } + + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.home.pos); + + temp_fv1 = fabsf(this->linearVelocity) * (fabsf(Math_SinS(this->unk_B6C) * 800.0f) + 100.0f); + + Math_StepToF(&this->unk_AC0, 0.0f, CLAMP_MIN(temp_fv1, 300.0f)); + + if (this->unk_D57 != 0) { + this->unk_D57--; + } + + if (this->unk_B5E != 0) { + this->unk_B5E--; + } + + if (this->unk_D6B != 0) { + this->unk_D6B--; + } + + if (this->invincibilityTimer < 0) { + this->invincibilityTimer++; + } else if (this->invincibilityTimer > 0) { + this->invincibilityTimer--; + } + + if (this->unk_B64 != 0) { + this->unk_B64--; + } + + if (this->blastMaskTimer != 0) { + this->blastMaskTimer--; + } + + if (gSaveContext.jinxTimer != 0) { + gSaveContext.jinxTimer--; + } + + func_80122C20(play, &this->unk_3D0); + if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && func_8082FBE8(this)) { + func_80844D80(play, this); + } + if (this->transformation == PLAYER_FORM_ZORA) { + s32 var_v0 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 1 : 0; + + Math_StepToF(&this->unk_B10[0], var_v0, D_8085D3FC[var_v0]); + } + func_80832888(this, play); + if (play->roomCtx.curRoom.enablePosLights != 0) { + Lights_PointSetColorAndRadius(&this->lightInfo, 255, 255, 255, 60); + } else { + this->lightInfo.params.point.radius = -1; + } + + if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) { + func_808442D8(play, this); + } else if (this->heldItemAction == PLAYER_IA_FISHING_ROD) { + if (this->unk_B28 < 0) { + this->unk_B28++; + } + } + + if (this->shockTimer != 0) { + func_808445C4(play, this); + } + if (this->isBurning) { + func_808341F4(play, this); + } + + if (this->stateFlags2 & PLAYER_STATE2_8000) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_StopHorizontalMovement(this); + Actor_MoveWithGravity(&this->actor); + } + func_80843178(play, this); + } else { + f32 temp_fa0; + f32 var_fv1_2; + s32 var_v1; + s32 pad; + + if (this->currentBoots != this->prevBoots) { + if (this->currentBoots == PLAYER_BOOTS_ZORA_UNDERWATER) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_8082DC64(play, this); + if (this->ageProperties->unk_2C < this->actor.depthInWater) { + this->stateFlags2 |= PLAYER_STATE2_400; + } + } + } else if ((this->stateFlags1 & PLAYER_STATE1_8000000) && + ((this->prevBoots == PLAYER_BOOTS_ZORA_UNDERWATER) || + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND))) { + func_8083B930(play, this); + this->stateFlags2 &= ~PLAYER_STATE2_400; + if (func_808508C8 == this->actionFunc) { + this->unk_AE8 = 20; + } + } + this->prevBoots = this->currentBoots; + } + if ((this->actor.parent == NULL) && (this->stateFlags1 & PLAYER_STATE1_800000)) { + this->actor.parent = this->rideActor; + func_80837BD0(play, this); + this->unk_AE8 = -1; + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_1); + func_8082E920(play, this, ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); + } + + if (this->unk_ADC == 0) { + this->unk_ADD = 0; + } else if (this->unk_ADC < 0) { + this->unk_ADC++; + } else { + this->unk_ADC--; + } + + if (!(this->stateFlags3 & PLAYER_STATE3_2000)) { + Math_ScaledStepToS(&this->unk_AAA, 0, 0x190); + } + + if ((this->transformation >= PLAYER_FORM_GORON) && (this->transformation <= PLAYER_FORM_DEKU)) { + func_800BBB74(&this->blinkInfo, 20, 80, 3); + } else { + func_800BBAC0(&this->blinkInfo, 20, 80, 6); + } + + this->actor.shape.face = ((play->gameplayFrames & 0x20) ? 0 : 3) + this->blinkInfo.eyeTexIndex; + + if (this->currentMask == PLAYER_MASK_BUNNY) { + Player_UpdateBunnyEars(this); + } + + if (func_800B7118(this)) { + func_808484F0(this); + } + + if ((play->unk_18844 == 0) && !(this->skelAnime.moveFlags & ANIM_FLAG_80)) { + if (!(this->stateFlags1 & PLAYER_STATE1_2) && (this->actor.parent == NULL)) { + func_80844784(play, this); + } + func_80843178(play, this); + } else { + sPlayerCurrentFloorType = FLOOR_TYPE_0; + this->floorProperty = FLOOR_PROPERTY_0; + if (this->stateFlags1 & PLAYER_STATE1_800000) { + this->actor.floorPoly = this->rideActor->floorPoly; + this->actor.floorBgId = this->rideActor->floorBgId; + } + sPlayerConveyorSpeedIndex = CONVEYOR_SPEED_DISABLED; + this->pushedSpeed = 0.0f; + } + + func_8083562C(play, this, this->actor.floorPoly, this->actor.floorBgId); + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { + f32 conveyorSpeed; + s32 pad2; + + sPlayerConveyorSpeedIndex--; + if (!sPlayerIsOnFloorConveyor) { + conveyorSpeed = sWaterConveyorSpeeds[sPlayerConveyorSpeedIndex]; + if (!(this->stateFlags1 & PLAYER_STATE1_8000000)) { + conveyorSpeed /= 4.0f; + } + } else { + conveyorSpeed = sFloorConveyorSpeeds[sPlayerConveyorSpeedIndex]; + } + + Math_StepToF(&this->pushedSpeed, conveyorSpeed, conveyorSpeed * 0.1f); + Math_ScaledStepToS(&this->pushedYaw, D_80862B16, + ((this->stateFlags1 & PLAYER_STATE1_8000000) ? 400.0f : 800.0f) * conveyorSpeed); + } else if (this->pushedSpeed != 0.0f) { + Math_StepToF(&this->pushedSpeed, 0.0f, (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 2.0f); + } + if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) && + !(this->stateFlags3 & PLAYER_STATE3_80) && (func_80854430 != this->actionFunc)) { + func_8083BB4C(play, this); + if (!Play_InCsMode(play)) { + if ((this->actor.id == ACTOR_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_80000000) && + (gSaveContext.save.saveInfo.playerData.health == 0) && + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_DEATH])) { + if (this->stateFlags3 & PLAYER_STATE3_1000000) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } else if (this->stateFlags1 & + (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_200000)) { + func_8082DD2C(play, this); + func_80833AA0(this, play); + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || + (this->stateFlags1 & PLAYER_STATE1_8000000)) { + func_80831F34(play, this, + func_801242B4(this) + ? &gPlayerAnim_link_swimer_swim_down + : ((this->shockTimer != 0) ? &gPlayerAnim_link_normal_electric_shock_end + : &gPlayerAnim_link_derth_rebirth)); + } + } else { + if ((this->actor.parent == NULL) && + (func_8082DA90(play) || (this->unk_D6B != 0) || !func_80834600(this, play))) { + func_8083827C(this, play); + } else { + this->fallStartHeight = this->actor.world.pos.y; + } + + Player_DetectSecrets(play, this); + } + } + } else if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (func_8084D820 == this->actionFunc) && + (this->unk_397 == 4)) { + this->actor.world.pos.y = this->actor.prevPos.y; + } + + if (play->csCtx.state != CS_STATE_IDLE) { + if ((this->csMode != PLAYER_CSMODE_5) && !(this->stateFlags1 & PLAYER_STATE1_800000)) { + if (!(this->stateFlags2 & PLAYER_STATE2_80) && (this->actor.id == ACTOR_PLAYER)) { + if ((play->csCtx.playerCue != NULL) && (D_8085D384[play->csCtx.playerCue->id] != 0)) { + func_800B7298(play, NULL, PLAYER_CSMODE_5); + Player_StopHorizontalMovement(this); + } else if (((u32)this->csMode == PLAYER_CSMODE_0) && + !(this->stateFlags2 & (PLAYER_STATE2_400 | PLAYER_STATE2_8000000)) && + (play->csCtx.state != CS_STATE_STOP)) { + func_800B7298(play, NULL, PLAYER_CSMODE_20); + Player_StopHorizontalMovement(this); + } + } + } + } + + if ((u32)this->csMode != PLAYER_CSMODE_0) { + if ((this->csMode != PLAYER_CSMODE_END) || + !(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | + PLAYER_STATE1_200000 | PLAYER_STATE1_4000000))) { + if (func_8085B08C != this->actionFunc) { + this->unk_AA5 = PLAYER_UNKAA5_4; + if (this->csMode == PLAYER_CSMODE_5) { + func_808387A0(play, this); + func_8082DAD4(this); + } + } + } else if (func_8085B08C != this->actionFunc) { + func_8085AACC(play, this, 0); + } + } else { + this->prevCsMode = PLAYER_CSMODE_0; + } + + func_8083BF54(play, this); + Lights_PointSetPosition(&this->lightInfo, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, + this->actor.world.pos.z); + + if (((this->targetedActor == NULL) || (this->targetedActor == this->talkActor) || + (this->targetedActor->hintId == TATL_HINT_ID_NONE)) && + (this->tatlTextId == 0)) { + this->stateFlags2 &= ~(PLAYER_STATE2_2 | PLAYER_STATE2_200000); + } + + this->stateFlags1 &= ~(PLAYER_STATE1_10 | PLAYER_STATE1_1000 | PLAYER_STATE1_400000); + this->stateFlags2 &= ~(PLAYER_STATE2_1 | PLAYER_STATE2_4 | PLAYER_STATE2_8 | PLAYER_STATE2_20 | + PLAYER_STATE2_40 | PLAYER_STATE2_100 | PLAYER_STATE2_200 | PLAYER_STATE2_1000 | + PLAYER_STATE2_4000 | PLAYER_STATE2_10000 | PLAYER_STATE2_400000 | PLAYER_STATE2_4000000); + this->stateFlags3 &= ~(PLAYER_STATE3_10 | PLAYER_STATE3_40 | PLAYER_STATE3_100 | PLAYER_STATE3_800 | + PLAYER_STATE3_1000 | PLAYER_STATE3_100000 | PLAYER_STATE3_2000000 | + PLAYER_STATE3_4000000 | PLAYER_STATE3_8000000 | PLAYER_STATE3_10000000); + func_808425B4(this); + func_8082EB38(play, this); + + D_8085C3E4 = (this->stateFlags1 & PLAYER_STATE1_8000000) ? 0.5f : 1.0f; + D_8085C3E8 = 1.0f / D_8085C3E4; + + D_80862B48 = D_80862B4C = 0; + + var_v1 = Play_InCsMode(play); + D_80862B2C = this->currentMask; + if (!(this->stateFlags3 & PLAYER_STATE3_4)) { + this->actionFunc(this, play); + } + + if (!var_v1) { + Player_SetDoAction(play, this); + } + + Player_UpdateCamAndSeqModes(play, this); + + if (this->skelAnime.moveFlags & ANIM_FLAG_8) { + AnimationContext_SetMoveActor(play, &this->actor, &this->skelAnime, + (this->skelAnime.moveFlags & ANIM_FLAG_4) ? 1.0f + : this->ageProperties->unk_08); + } + + func_80832578(this, play); + if (this->actor.flags & ACTOR_FLAG_TALK_REQUESTED) { + this->talkActorDistance = 0.0f; + } else { + this->talkActor = NULL; + this->exchangeItemId = PLAYER_IA_NONE; + this->talkActorDistance = FLT_MAX; + } + if (!(this->actor.flags & ACTOR_FLAG_20000000) && (this->unk_AA5 != PLAYER_UNKAA5_5)) { + this->unk_A90 = NULL; + this->unk_A94 = FLT_MAX; + } + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + this->interactRangeActor = NULL; + this->getItemDirection = 0x6000; + } + if (this->actor.parent == NULL) { + this->rideActor = NULL; + } + + this->tatlTextId = 0; + this->unk_B2B = -1; + this->closestSecretDistSq = FLT_MAX; + this->doorType = PLAYER_DOORTYPE_NONE; + this->unk_B75 = 0; + this->unk_A78 = NULL; + + Math_StepToF(&this->windSpeed, 0.0f, 0.5f); + if ((this->unk_B62 != 0) || + ((gSaveContext.magicState == MAGIC_STATE_IDLE) && (gSaveContext.save.saveInfo.playerData.magic != 0) && + (this->stateFlags1 & PLAYER_STATE1_10))) { + func_8082F1AC(play, this); + } + + temp_fv0 = this->actor.world.pos.y - this->actor.prevPos.y; + var_fv1_2 = + temp_fv0 + + ((this->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].y) * + 0.5f); + temp_fv0 += this->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 10.0f; + + if (this->cylinder.info.toucher.dmgFlags == 0x80000) { + this->cylinder.dim.height = 80; + var_fv1_2 = ((temp_fv0 + var_fv1_2) * 0.5f) - 40.0f; + } else { + this->cylinder.dim.height = temp_fv0 - var_fv1_2; + + if (this->cylinder.dim.height < 0) { + temp_fa0 = temp_fv0; + temp_fv0 = var_fv1_2; + var_fv1_2 = temp_fa0; + this->cylinder.dim.height = -this->cylinder.dim.height; + } + } + + this->cylinder.dim.yShift = var_fv1_2 - this->actor.world.pos.y; + + if (this->unk_B62 != 0) { + this->shieldCylinder.base.acFlags = AC_NONE; + this->shieldCylinder.info.toucher.dmgFlags = 0x80000; + this->shieldCylinder.info.toucherFlags = TOUCH_ON; + this->shieldCylinder.info.bumperFlags = BUMP_NONE; + this->shieldCylinder.dim.height = 80; + this->shieldCylinder.dim.radius = 50; + this->shieldCylinder.dim.yShift = ((temp_fv0 + var_fv1_2) * 0.5f - 40.0f) - this->actor.world.pos.y; + + Collider_UpdateCylinder(&this->actor, &this->shieldCylinder); + CollisionCheck_SetAT(play, &play->colChkCtx, &this->shieldCylinder.base); + } else if (this->stateFlags1 & PLAYER_STATE1_400000) { + if ((this->transformation == PLAYER_FORM_GORON) || (this->transformation == PLAYER_FORM_DEKU)) { + this->shieldCylinder.base.acFlags = AC_ON | AC_HARD | AC_TYPE_ENEMY; + this->shieldCylinder.info.toucher.dmgFlags = 0x100000; + this->shieldCylinder.info.toucherFlags = TOUCH_NONE; + this->shieldCylinder.info.bumperFlags = BUMP_ON; + + if (this->transformation == PLAYER_FORM_GORON) { + this->shieldCylinder.dim.height = 35; + } else { + this->shieldCylinder.dim.height = 30; + } + + if (this->transformation == PLAYER_FORM_GORON) { + this->shieldCylinder.dim.radius = 30; + } else { + this->shieldCylinder.dim.radius = 20; + } + + this->shieldCylinder.dim.yShift = 0; + Collider_UpdateCylinder(&this->actor, &this->shieldCylinder); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->shieldCylinder.base); + this->cylinder.dim.yShift = 0; + this->cylinder.dim.height = this->shieldCylinder.dim.height; + } else { + this->cylinder.dim.height = this->cylinder.dim.height * 0.8f; + } + } + + Collider_UpdateCylinder(&this->actor, &this->cylinder); + if (!(this->stateFlags2 & PLAYER_STATE2_4000)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_4 | PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | + PLAYER_STATE1_800000)) && + !(this->stateFlags3 & PLAYER_STATE3_10000000)) { + if ((func_808561B0 != this->actionFunc) && (func_80853D68 != this->actionFunc) && + (this->actor.draw != NULL)) { + if ((this->actor.id != ACTOR_PLAYER) && (this->csMode == PLAYER_CSMODE_110)) { + this->cylinder.dim.radius = 8; + } + CollisionCheck_SetOC(play, &play->colChkCtx, &this->cylinder.base); + } + } + if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_4000000)) && (this->invincibilityTimer <= 0)) { + if ((func_808561B0 != this->actionFunc) && + ((func_80857BE8 != this->actionFunc) || (this->unk_AE7 != 1))) { + if (this->cylinder.base.atFlags != AT_NONE) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinder.base); + } + CollisionCheck_SetAC(play, &play->colChkCtx, &this->cylinder.base); + } + } + } + + AnimationContext_SetNextQueue(play); + } + + func_801229FC(this); + Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos); + + if ((this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000)) || + (this != GET_PLAYER(play))) { + this->actor.colChkInfo.mass = MASS_IMMOVABLE; + } else { + this->actor.colChkInfo.mass = sPlayerMass[this->transformation]; + } + + this->stateFlags3 &= ~(PLAYER_STATE3_4 | PLAYER_STATE3_400); + Collider_ResetCylinderAC(play, &this->cylinder.base); + Collider_ResetCylinderAC(play, &this->shieldCylinder.base); + Collider_ResetCylinderAT(play, &this->shieldCylinder.base); + Collider_ResetQuadAT(play, &this->meleeWeaponQuads[0].base); + Collider_ResetQuadAT(play, &this->meleeWeaponQuads[1].base); + Collider_ResetQuadAC(play, &this->shieldQuad.base); + + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) || + (this->actor.floorBgId != BGCHECK_SCENE)) { + this->unk_AC0 = 0.0f; + } + this->actor.shape.yOffset = this->unk_ABC + this->unk_AC0; +} + +Vec3f D_8085D41C = { 0.0f, 0.0f, -30.0f }; + +void Player_Update(Actor* thisx, PlayState* play) { + static Vec3f sDogSpawnPos; + Player* this = (Player*)thisx; + s32 dogParams; + s32 pad; + Input input; + s32 pad2; + + this->stateFlags3 &= ~PLAYER_STATE3_10; + + // This block is a leftover dog-following mechanic from OoT + if (gSaveContext.dogParams < 0) { + if (Object_GetIndex(&play->objectCtx, OBJECT_DOG) < 0) { + gSaveContext.dogParams = 0; + } else { + Actor* dog; + + gSaveContext.dogParams &= (u16)~0x8000; + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D41C, &sDogSpawnPos); + + dogParams = gSaveContext.dogParams; + + dog = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_DG, sDogSpawnPos.x, sDogSpawnPos.y, sDogSpawnPos.z, 0, + this->actor.shape.rot.y, 0, dogParams | 0x8000); + if (dog != NULL) { + dog->room = -1; + } + } + } + + if ((this->interactRangeActor != NULL) && (this->interactRangeActor->update == NULL)) { + this->interactRangeActor = NULL; + } + + if ((this->heldActor != NULL) && (this->heldActor->update == NULL)) { + func_8082DCA0(play, this); + } + + if ((play->actorCtx.unk268 != 0) && (this == GET_PLAYER(play))) { + input = play->actorCtx.unk_26C; + } else if ((this->csMode == PLAYER_CSMODE_5) || (this->stateFlags1 & (PLAYER_STATE1_20 | PLAYER_STATE1_20000000)) || + (this != GET_PLAYER(play)) || func_8082DA90(play) || + (gSaveContext.save.saveInfo.playerData.health == 0)) { + bzero(&input, sizeof(Input)); + this->fallStartHeight = this->actor.world.pos.y; + } else { + input = *CONTROLLER1(&play->state); + if (this->unk_B5E != 0) { + input.cur.button &= ~(BTN_CUP | BTN_B | BTN_A); + input.press.button &= ~(BTN_CUP | BTN_B | BTN_A); + } + } + + Player_UpdateCommon(this, play, &input); + play->actorCtx.unk268 = 0; + bzero(&play->actorCtx.unk_26C, sizeof(Input)); + + MREG(52) = this->actor.world.pos.x; + MREG(53) = this->actor.world.pos.y; + MREG(54) = this->actor.world.pos.z; + MREG(55) = this->actor.world.rot.y; +} + +void Player_DrawGameplay(PlayState* play, Player* this, s32 lod, Gfx* cullDList, + OverrideLimbDrawFlex overrideLimbDraw) { + OPEN_DISPS(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x0C, cullDList); + gSPSegment(POLY_XLU_DISP++, 0x0C, cullDList); + + Player_DrawImpl(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, lod, + this->transformation, 0, this->actor.shape.face, overrideLimbDraw, Player_PostLimbDrawGameplay, + &this->actor); + + CLOSE_DISPS(play->state.gfxCtx); +} + +void func_80846460(Player* this) { + Vec3f* pos; + Vec3f* bodyPartsPos; + s32 i; + + this->actor.focus.pos.x = this->actor.world.pos.x; + this->actor.focus.pos.z = this->actor.world.pos.z; + this->actor.focus.pos.y = this->actor.world.pos.y + 24.0f; + + pos = &this->actor.world.pos; + bodyPartsPos = this->bodyPartsPos; + for (i = 0; i < ARRAY_COUNT(this->bodyPartsPos); i++) { + Math_Vec3f_Copy(bodyPartsPos, pos); + bodyPartsPos++; + } + + this->bodyPartsPos[PLAYER_BODYPART_HEAD].y = this->actor.world.pos.y + 24.0f; + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y = this->actor.world.pos.y + 60.0f; + Math_Vec3f_Copy(this->actor.shape.feetPos, pos); + Math_Vec3f_Copy(&this->actor.shape.feetPos[1], pos); +} + +struct_80124618 D_8085D428[] = { + { 0, { 0, 0, 0 } }, { 1, { 80, 170, 80 } }, { 3, { 100, 80, 100 } }, + { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D450[] = { + { 0, { 0, 0, 0 } }, { 1, { 80, 170, 80 } }, { 3, { 100, 80, 100 } }, + { 7, { 100, 100, 100 } }, { 8, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D478[] = { + { 0, { 0, 0, 0 } }, + { 8, { 0, 0, 0 } }, +}; +struct_80124618 D_8085D488[] = { + { 0, { 100, 100, 100 } }, { 1, { 100, 60, 100 } }, { 3, { 100, 140, 100 } }, + { 7, { 100, 80, 100 } }, { 9, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D4B0[] = { + { 0, { 100, 100, 100 } }, { 1, { 100, 70, 100 } }, { 3, { 100, 120, 100 } }, + { 6, { 100, 80, 100 } }, { 8, { 100, 100, 100 } }, { 9, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D4E0[] = { + { 0, { 0, 0, 0 } }, { 1, { 0, 0, 0 } }, { 3, { 100, 130, 100 } }, + { 5, { 130, 130, 130 } }, { 7, { 80, 90, 80 } }, { 9, { 100, 100, 100 } }, +}; +struct_80124618 D_8085D510[] = { + { 0, { 0, 50, 0 } }, + { 1, { 0, 50, 0 } }, +}; +struct_80124618 D_8085D520[] = { + { 0, { 100, 120, 100 } }, + { 1, { 100, 120, 100 } }, +}; +struct_80124618 D_8085D530[] = { + { 0, { 160, 120, 160 } }, + { 1, { 160, 120, 160 } }, +}; +struct_80124618 D_8085D540[] = { + { 0, { 0, 0, 0 } }, + { 2, { 100, 100, 100 } }, +}; + +struct_80124618* D_8085D550[3] = { + D_8085D488, + D_8085D4B0, + D_8085D4E0, +}; +struct_80124618* D_8085D55C[3] = { + D_8085D428, + D_8085D450, + D_8085D478, +}; +struct_80124618* D_8085D568[3] = { + D_8085D510, + D_8085D520, + D_8085D530, +}; + +Gfx* D_8085D574[] = { + object_link_nuts_DL_009C48, + object_link_nuts_DL_009AB8, + object_link_nuts_DL_009DB8, +}; + +Color_RGB8 D_8085D580 = { 255, 255, 255 }; +Color_RGB8 D_8085D584 = { 80, 80, 200 }; + +void Player_Draw(Actor* thisx, PlayState* play) { + Player* this = THIS; + f32 one = 1.0f; + s32 spEC = false; + + Math_Vec3f_Copy(&this->unk_D6C, &this->bodyPartsPos[PLAYER_BODYPART_WAIST]); + if (this->stateFlags3 & (PLAYER_STATE3_100 | PLAYER_STATE3_40000)) { + struct_80124618** spE8 = D_8085D550; + struct_80124618** spE4; + f32 spE0; + Gfx** spDC; + s32 i; + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + func_8012C268(&play->state); + spEC = true; + if (this->stateFlags3 & PLAYER_STATE3_40000) { + Matrix_SetTranslateRotateYXZ(this->unk_AF0[0].x, this->unk_AF0[0].y, this->unk_AF0[0].z, &gZeroVec3s); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + spE8 = D_8085D568; + spE0 = 0.0f; + } else { + Matrix_Translate(0.0f, -this->unk_ABC, 0.0f, MTXMODE_APPLY); + spE0 = this->unk_AE8 - 6; + if (spE0 < 0.0f) { + spE8 = D_8085D55C; + spE0 = this->unk_B86[0]; + } + } + + spE4 = spE8; + spDC = D_8085D574; + + for (i = 0; i < 3; i++, spE4++, spDC++) { + Matrix_Push(); + func_80124618(*spE4, spE0, &this->unk_AF0[1]); + Matrix_Scale(this->unk_AF0[1].x, this->unk_AF0[1].y, this->unk_AF0[1].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, *spDC); + + Matrix_Pop(); + } + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } + + if (!(this->stateFlags2 & PLAYER_STATE2_20000000) && (this->unk_ABC > -3900.0f)) { + OPEN_DISPS(play->state.gfxCtx); + + if (!spEC) { + func_8012C268(&play->state); + } + + func_8012C2DC(play->state.gfxCtx); + + func_800B8050(&this->actor, play, 0); + func_800B8118(&this->actor, play, 0); + func_80122868(play, this); + + if (this->stateFlags3 & PLAYER_STATE3_1000) { + Color_RGB8 spBC; + f32 spB8 = this->unk_ABC + 1.0f; + f32 spB4 = 1.0f - (this->unk_ABC * 0.5f); + + func_80846460(this); + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (1200.0f * this->actor.scale.y * spB8), + this->actor.world.pos.z, MTXMODE_NEW); + + if (this->unk_B86[0] != 0) { + Matrix_RotateYS(this->unk_B28, MTXMODE_APPLY); + Matrix_RotateXS(this->unk_B86[0], MTXMODE_APPLY); + Matrix_RotateYS(-this->unk_B28, MTXMODE_APPLY); + } + + Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); + Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); + + Matrix_Scale(this->actor.scale.x * spB4 * 1.15f, this->actor.scale.y * spB8 * 1.15f, + CLAMP_MIN(spB8, spB4) * this->actor.scale.z * 1.15f, MTXMODE_APPLY); + Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); + Scene_SetRenderModeXlu(play, 0, 1); + Lib_LerpRGB(&D_8085D580, &D_8085D584, this->unk_B10[0], &spBC); + + gDPSetEnvColor(POLY_OPA_DISP++, spBC.r, spBC.g, spBC.b, 255); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gLinkGoronCurledDL); + + if (this->unk_B86[1] != 0) { + if (this->unk_B86[1] < 3) { + func_80124618(D_8085D540, this->unk_B86[1], this->unk_AF0); + Matrix_Scale(this->unk_AF0[0].x, this->unk_AF0[0].y, this->unk_AF0[0].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } + + gSPDisplayList(POLY_OPA_DISP++, object_link_goron_DL_00C540); + } + + func_80122BA4(play, &this->unk_3D0, 1, 255); + func_80122BA4(play, &this->unk_3D0, 2, 255); + + if (this->unk_B86[1] < 3) { + if (this->unk_AE7 >= 5) { + f32 var_fa1; + u8 sp9B; + + var_fa1 = (this->unk_AE7 - 4) * 0.02f; + + if (this->unk_B86[1] != 0) { + sp9B = (-this->unk_B86[1] * 0x55) + 0xFF; + } else { + sp9B = (200.0f * var_fa1); + } + + if (this->unk_B86[1] != 0) { + var_fa1 = 0.65f; + } else { + var_fa1 *= one; + } + + Matrix_Scale(1.0f, var_fa1, var_fa1, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_013138)); + gDPSetEnvColor(POLY_XLU_DISP++, 155, 0, 0, sp9B); + gSPDisplayList(POLY_XLU_DISP++, object_link_goron_DL_0127B0); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_014684)); + gSPDisplayList(POLY_XLU_DISP++, object_link_goron_DL_0134D0); + } + } + } else if ((this->transformation == PLAYER_FORM_GORON) && (this->stateFlags1 & PLAYER_STATE1_400000)) { + func_80846460(this); + SkelAnime_DrawFlexOpa(play, this->unk_2C8.skeleton, this->unk_2C8.jointTable, this->unk_2C8.dListCount, + NULL, NULL, NULL); + } else { + OverrideLimbDrawFlex sp84 = Player_OverrideLimbDrawGameplayDefault; + s32 lod = ((this->csMode != PLAYER_CSMODE_0) || (this->actor.projectedPos.z < 320.0f)) ? 0 : 1; + Vec3f sp74; + + //! FAKE + if (this->transformation == PLAYER_FORM_FIERCE_DEITY) {} + + if (this->stateFlags1 & PLAYER_STATE1_100000) { + SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &this->actor.focus.pos, &sp74); + if (sp74.z < -4.0f) { + sp84 = Player_OverrideLimbDrawGameplayFirstPerson; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_4000000) { + s16 temp_s0_2 = play->gameplayFrames * 600; + s16 sp70 = (play->gameplayFrames * 1000) & 0xFFFF; + + Matrix_Push(); + + this->actor.scale.y = -this->actor.scale.y; + Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, + this->actor.world.pos.y + (2.0f * this->actor.depthInWater) + + (this->unk_ABC * this->actor.scale.y), + this->actor.world.pos.z, &this->actor.shape.rot); + Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); + Matrix_RotateXS(temp_s0_2, MTXMODE_APPLY); + Matrix_RotateYS(sp70, MTXMODE_APPLY); + Matrix_Scale(1.1f, 0.95f, 1.05f, MTXMODE_APPLY); + Matrix_RotateYS(-sp70, MTXMODE_APPLY); + Matrix_RotateXS(-temp_s0_2, MTXMODE_APPLY); + Player_DrawGameplay(play, this, lod, gCullFrontDList, sp84); + this->actor.scale.y = -this->actor.scale.y; + + Matrix_Pop(); + } + + gSPClearGeometryMode(POLY_OPA_DISP++, G_CULL_BOTH); + + gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BOTH); + + if ((this->transformation == PLAYER_FORM_ZORA) && (this->unk_B62 != 0) && + !(this->stateFlags3 & PLAYER_STATE3_8000)) { + Matrix_Push(); + Matrix_RotateXS(-0x4000, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -1800.0f, MTXMODE_APPLY); + Player_DrawZoraShield(play, this); + Matrix_Pop(); + } + + Player_DrawGameplay(play, this, lod, gCullBackDList, sp84); + } + + func_801229A0(play, this); + if (this->stateFlags2 & PLAYER_STATE2_4000) { + f32 temp_fa0 = this->unk_B48; + + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, -(s32)play->gameplayFrames & 0x7F, 0x20, 0x20, 1, 0, + ((s32)play->gameplayFrames * -2) & 0x7F, 0x20, 0x20)); + + Matrix_Scale(temp_fa0, temp_fa0, temp_fa0, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, 255); + + gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL); + } + + if (this->getItemDrawIdPlusOne > GID_NONE + 1) { + Player_DrawGetItem(play, this); + } + + func_80122D44(play, &this->unk_3D0); + + CLOSE_DISPS(play->state.gfxCtx); + } + + play->actorCtx.flags &= ~ACTORCTX_FLAG_3; +} + +void Player_Destroy(Actor* thisx, PlayState* play) { + Player* this = (Player*)thisx; + + Effect_Destroy(play, this->meleeWeaponEffectIndex[0]); + Effect_Destroy(play, this->meleeWeaponEffectIndex[1]); + Effect_Destroy(play, this->meleeWeaponEffectIndex[2]); + LightContext_RemoveLight(play, &play->lightCtx, this->lightNode); + Collider_DestroyCylinder(play, &this->cylinder); + Collider_DestroyCylinder(play, &this->shieldCylinder); + Collider_DestroyQuad(play, &this->meleeWeaponQuads[0]); + Collider_DestroyQuad(play, &this->meleeWeaponQuads[1]); + Collider_DestroyQuad(play, &this->shieldQuad); + ZeldaArena_Free(this->giObjectSegment); + ZeldaArena_Free(this->maskObjectSegment); + Magic_Reset(play); + func_80831454(this); +} + +s32 func_80847190(PlayState* play, Player* this, s32 arg2) { + s32 pad; + s16 var_s0; + + if (!func_800B7128(this) && !func_8082EF20(this) && !arg2) { + var_s0 = sPlayerControlInput->rel.stick_y * 0xF0; + Math_SmoothStepToS(&this->actor.focus.rot.x, var_s0, 0xE, 0xFA0, 0x1E); + + var_s0 = sPlayerControlInput->rel.stick_x * -0x10; + var_s0 = CLAMP(var_s0, -0xBB8, 0xBB8); + this->actor.focus.rot.y += var_s0; + } else { + s16 temp3; + + temp3 = ((sPlayerControlInput->rel.stick_y >= 0) ? 1 : -1) * + (s32)((1.0f - Math_CosS(sPlayerControlInput->rel.stick_y * 0xC8)) * 1500.0f); + this->actor.focus.rot.x += temp3; + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + this->actor.focus.rot.x = CLAMP(this->actor.focus.rot.x, -0x1F40, 0xFA0); + } else { + this->actor.focus.rot.x = CLAMP(this->actor.focus.rot.x, -0x36B0, 0x36B0); + } + + var_s0 = this->actor.focus.rot.y - this->actor.shape.rot.y; + temp3 = ((sPlayerControlInput->rel.stick_x >= 0) ? 1 : -1) * + (s32)((1.0f - Math_CosS(sPlayerControlInput->rel.stick_x * 0xC8)) * -1500.0f); + var_s0 += temp3; + + this->actor.focus.rot.y = CLAMP(var_s0, -0x4AAA, 0x4AAA) + this->actor.shape.rot.y; + } + + this->unk_AA6 |= 2; + + return func_80832754(this, (play->unk_1887C != 0) || func_800B7128(this) || func_8082EF20(this)); +} + +void func_8084748C(Player* this, f32* speed, f32 speedTarget, s16 yawTarget) { + f32 incrStep = this->skelAnime.curFrame - 10.0f; + f32 maxSpeed = (R_RUN_SPEED_LIMIT / 100.0f) * 0.8f; + + if (*speed > maxSpeed) { + *speed = maxSpeed; + } + + if ((0.0f < incrStep) && (incrStep < 16.0f)) { + incrStep = fabsf(incrStep) * 0.5f; + } else { + speedTarget = 0.0f; + incrStep = 0.0f; + } + + Math_AsymStepToF(speed, speedTarget * 0.8f, incrStep, (fabsf(*speed) * 0.02f) + 0.05f); + Math_ScaledStepToS(&this->currentYaw, yawTarget, 1600); // 1 ESS turn, also one frame of first-person rotation +} + +void func_808475B4(Player* this) { + f32 sp4; + f32 temp_fa1; + f32 temp_fv0; + f32 var_ft4 = -5.0f; + f32 var_ft5 = this->ageProperties->unk_28; + f32 var_ft5_4; + + temp_fv0 = this->actor.depthInWater - var_ft5; + if (this->actor.velocity.y < 0.0f) { + var_ft5 += 1.0f; + } + + if (this->actor.depthInWater < var_ft5) { + temp_fv0 = CLAMP(temp_fv0, -0.4f, -0.1f); + sp4 = temp_fv0 - ((this->actor.velocity.y <= 0.0f) ? 0.0f : this->actor.velocity.y * 0.5f); + } else { + if (!(this->stateFlags1 & PLAYER_STATE1_80) && (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) && + (this->actor.velocity.y >= -5.0f)) { + sp4 = -0.3f; + } else if ((this->transformation == PLAYER_FORM_DEKU) && (this->actor.velocity.y < 0.0f)) { + var_ft4 = 0.0f; + sp4 = -this->actor.velocity.y; + } else { + var_ft4 = 2.0f; + var_ft5_4 = CLAMP(temp_fv0, 0.1f, 0.4f); + sp4 = ((this->actor.velocity.y >= 0.0f) ? 0.0f : this->actor.velocity.y * -0.3f) + var_ft5_4; + } + + if (this->actor.depthInWater > 100.0f) { + this->stateFlags2 |= PLAYER_STATE2_400; + } + } + + this->actor.velocity.y += sp4; + if (((this->actor.velocity.y - var_ft4) * sp4) > 0.0f) { + this->actor.velocity.y = var_ft4; + } + this->actor.gravity = 0.0f; +} + +void func_808477D0(PlayState* play, Player* this, Input* input, f32 arg3) { + f32 var_fv0; + + if ((input != NULL) && CHECK_BTN_ANY(input->press.button, BTN_B | BTN_A)) { + var_fv0 = 1.0f; + } else { + var_fv0 = 0.5f; + } + + var_fv0 = var_fv0 * arg3; + var_fv0 = CLAMP(var_fv0, 1.0f, 2.5f); + this->skelAnime.playSpeed = var_fv0; + + PlayerAnimation_Update(play, &this->skelAnime); +} + +s32 func_80847880(PlayState* play, Player* this) { + if (play->unk_1887C != 0) { + if (play->sceneId == SCENE_20SICHITAI) { + Player_SetAction(play, this, func_80854430, 0); + play->unk_1887C = 0; + this->csMode = PLAYER_CSMODE_0; + return true; + } + + func_8082DE50(play, this); + Player_SetAction(play, this, func_80854614, 0); + if (!func_800B7118(this) || Player_IsHoldingHookshot(this)) { + func_80831990(play, this, ITEM_BOW); + } + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->csMode = PLAYER_CSMODE_0; + this->stateFlags1 |= PLAYER_STATE1_100000; + Player_StopHorizontalMovement(this); + func_80836D8C(this); + + return true; + } + return false; +} + +s32 func_80847994(PlayState* play, Player* this) { + if (this->stateFlags3 & PLAYER_STATE3_20) { + this->stateFlags3 &= ~PLAYER_STATE3_20; + this->itemAction = PLAYER_IA_OCARINA; + this->unk_AA5 = PLAYER_UNKAA5_5; + func_80838A90(this, play); + return true; + } + return false; +} + +void func_808479F4(PlayState* play, Player* this, f32 arg2) { + if (this->actor.wallBgId != BGCHECK_SCENE) { + DynaPolyActor* actor = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + + if (actor != NULL) { + func_800B72F8(actor, arg2, this->actor.world.rot.y); + } + } +} + +void func_80847A50(Player* this) { + Player_PlaySfx(this, ((this->unk_AE7 != 0) ? NA_SE_PL_WALK_METAL1 : NA_SE_PL_WALK_LADDER) + + this->ageProperties->surfaceSfxIdOffset); +} + +Vec3f D_8085D588[] = { + { 30.0f, 0.0f, 0.0f }, + { -30.0f, 0.0f, 0.0f }, +}; +Vec3f D_8085D5A0[] = { + { 60.0f, 20.0f, 0.0f }, + { -60.0f, 20.0f, 0.0f }, +}; +Vec3f D_8085D5B8[] = { + { 60.0f, -20.0f, 0.0f }, + { -60.0f, -20.0f, 0.0f }, +}; +Vec3f D_8085D5D0 = { 0.0f, 0.0f, -30.0f }; + +// related to mounting/unmounting the horse +s32 func_80847A94(PlayState* play, Player* this, s32 arg2, f32* arg3) { + Actor* rideActor = this->rideActor; + f32 sp60 = rideActor->world.pos.y + 20.0f; + f32 sp5C = rideActor->world.pos.y - 20.0f; + Vec3f sp50; + Vec3f sp44; + CollisionPoly* sp40; + CollisionPoly* sp3C; + s32 sp38; + s32 sp34; + + *arg3 = func_80835CD8(play, this, &D_8085D588[arg2], &sp50, &sp3C, &sp34); + + if ((sp5C < *arg3) && (*arg3 < sp60)) { + if (!func_80835D58(play, this, &D_8085D5A0[arg2], &sp40, &sp38, &sp44)) { + if (!func_80835D58(play, this, &D_8085D5B8[arg2], &sp40, &sp38, &sp44)) { + this->actor.floorPoly = sp3C; + this->actor.floorBgId = sp38; + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, sp3C, sp34); + return true; + } + } + } + return false; +} + +s32 func_80847BF0(Player* this, PlayState* play) { + EnHorse* rideActor = (EnHorse*)this->rideActor; + s32 var_a2; + f32 sp34; + + if (this->unk_AE8 < 0) { + this->unk_AE8 = 0x63; + } else { + var_a2 = (this->mountSide < 0) ? 0 : 1; + + if (!func_80847A94(play, this, var_a2, &sp34)) { + var_a2 ^= 1; + if (!func_80847A94(play, this, var_a2, &sp34)) { + return false; + } + + this->mountSide = -this->mountSide; + } + + if (play->csCtx.state == CS_STATE_IDLE) { + if (!func_8082DA90(play)) { + if (EN_HORSE_CHECK_1(rideActor) || EN_HORSE_CHECK_4(rideActor)) { + this->stateFlags2 |= PLAYER_STATE2_400000; + + if (EN_HORSE_CHECK_1(rideActor) || + (EN_HORSE_CHECK_4(rideActor) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A))) { + rideActor->actor.child = NULL; + + func_8083172C(play, this, func_808505D0, 0); + this->unk_B48 = sp34 - rideActor->actor.world.pos.y; + + Player_AnimationPlayOnce(play, this, + (this->mountSide < 0) ? &gPlayerAnim_link_uma_left_down + : &gPlayerAnim_link_uma_right_down); + + return true; + } + } + } + } + } + + return false; +} + +// Used in 2 horse-related functions +void func_80847E2C(Player* this, f32 arg1, f32 minFrame) { + f32 addend; + f32 dir; + + if ((this->unk_B48 != 0.0f) && (minFrame <= this->skelAnime.curFrame)) { + if (arg1 < fabsf(this->unk_B48)) { + dir = (this->unk_B48 >= 0.0f) ? 1 : -1; + addend = dir * arg1; + } else { + addend = this->unk_B48; + } + this->actor.world.pos.y += addend; + this->unk_B48 -= addend; + } +} + +s32 func_80847ED4(Player* this) { + return (this->interactRangeActor != NULL) && (this->interactRangeActor->id == ACTOR_EN_ZOG) && + CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A); +} + +void func_80847F1C(Player* this) { + s32 pad; + f32 yPos; + s16 yaw; + Actor* interactRangeActor = this->interactRangeActor; + + if (func_80847ED4(this)) { + yPos = this->actor.world.pos.y; + yaw = this->currentYaw - interactRangeActor->shape.rot.y; + Lib_Vec3f_TranslateAndRotateY(&interactRangeActor->world.pos, interactRangeActor->shape.rot.y, &D_8085D5D0, + &this->actor.world.pos); + this->actor.world.pos.y = yPos; + this->actor.shape.rot.y = interactRangeActor->shape.rot.y; + + interactRangeActor->speed = Math_CosS(ABS_ALT(yaw)) * this->linearVelocity * 0.5f; + if (interactRangeActor->speed < 0.0f) { + interactRangeActor->speed = 0.0f; + } + func_8083133C(this); + } +} + +AnimSfxEntry D_8085D5DC[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 0, NA_SE_PL_SWIM, STOP), +}; + +void func_80847FF8(Player* this, f32* arg1, f32 arg2, s16 arg3) { + func_8084748C(this, arg1, arg2, arg3); + Player_PlayAnimSfx(this, D_8085D5DC); + func_80847F1C(this); +} + +void func_80848048(PlayState* play, Player* this) { + Player_SetAction(play, this, func_80851588, 0); + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); +} + +s32 func_80848094(PlayState* play, Player* this, f32* arg2, s16* arg3) { + PlayerAnimationHeader* anim; + s16 temp_v0 = this->currentYaw - *arg3; + s32 temp_v0_2; + + if (ABS_ALT(temp_v0) > 0x6000) { + anim = &gPlayerAnim_link_swimer_swim_wait; + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + this->currentYaw = *arg3; + } else { + *arg2 = 0.0f; + *arg3 = this->currentYaw; + } + } else { + temp_v0_2 = func_8083E514(this, arg2, arg3, play); + if (temp_v0_2 > 0) { + anim = &gPlayerAnim_link_swimer_swim; + } else if (temp_v0_2 < 0) { + anim = &gPlayerAnim_link_swimer_back_swim; + } else { + s16 diff = BINANG_SUB(this->actor.shape.rot.y, *arg3); + + if (diff > 0) { + anim = &gPlayerAnim_link_swimer_Rside_swim; + } else { + anim = &gPlayerAnim_link_swimer_Lside_swim; + } + } + } + + if (anim != this->skelAnime.animation) { + func_8082E634(play, this, anim); + return true; + } + return false; +} + +void func_808481CC(PlayState* play, Player* this, f32 arg2) { + f32 sp2C; + s16 sp2A; + + func_80832F78(this, &sp2C, &sp2A, 0.0f, play); + func_8084748C(this, &this->linearVelocity, sp2C / 2.0f, sp2A); + func_8084748C(this, &this->actor.velocity.y, arg2, this->currentYaw); +} + +void func_80848250(PlayState* play, Player* this) { + this->getItemDrawIdPlusOne = GID_NONE + 1; + this->stateFlags1 &= ~(PLAYER_STATE1_400 | PLAYER_STATE1_800); + this->getItemId = GI_NONE; + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); +} + +void func_80848294(PlayState* play, Player* this) { + func_80848250(play, this); + func_8082DC28(this); + func_80839E74(this, play); + this->currentYaw = this->actor.shape.rot.y; +} + +// Player_GetItem? +s32 func_808482E0(PlayState* play, Player* this) { + if (this->getItemId == GI_NONE) { + return true; + } + + if (this->unk_AE7 == 0) { + GetItemEntry* giEntry = &sGetItemTable[this->getItemId - 1]; + + this->unk_AE7 = 1; + Message_StartTextbox(play, giEntry->textId, &this->actor); + Item_Give(play, giEntry->itemId); + + if ((this->getItemId >= GI_MASK_DEKU) && (this->getItemId <= GI_MASK_KAFEIS_MASK)) { + Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); + } else if (((this->getItemId >= GI_RUPEE_GREEN) && (this->getItemId <= GI_RUPEE_10)) || + (this->getItemId == GI_RECOVERY_HEART)) { + play_sound(NA_SE_SY_GET_BOXITEM); + } else { + s32 seqId; + + if ((this->getItemId == GI_HEART_CONTAINER) || + ((this->getItemId == GI_HEART_PIECE) && EQ_MAX_QUEST_HEART_PIECE_COUNT)) { + seqId = NA_BGM_GET_HEART | 0x900; + } else { + s32 var_v1; + + if ((this->getItemId == GI_HEART_PIECE) || + ((this->getItemId >= GI_RUPEE_PURPLE) && (this->getItemId <= GI_RUPEE_HUGE))) { + var_v1 = NA_BGM_GET_SMALL_ITEM; + } else { + var_v1 = NA_BGM_GET_ITEM | 0x900; + } + seqId = var_v1; + } + + Audio_PlayFanfare(seqId); + } + } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + if (this->getItemId == GI_OCARINA) { + // zelda teaching song of time cs? + play->nextEntrance = ENTRANCE(CUTSCENE, 0); + gSaveContext.nextCutsceneIndex = 0xFFF2; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_FADE_WHITE; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + func_8085B28C(play, NULL, PLAYER_CSMODE_WAIT); + } + this->getItemId = GI_NONE; + } + + return false; +} + +AnimSfxEntry D_8085D5E0[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 60, NA_SE_IT_MASTER_SWORD_SWING, STOP), +}; + +void func_808484CC(Player* this) { + Player_PlayAnimSfx(this, D_8085D5E0); +} + +void func_808484F0(Player* this) { + this->unk_B08 += this->unk_B0C; + this->unk_B0C -= this->unk_B08 * 5.0f; + this->unk_B0C *= 0.3f; + + if (fabsf(this->unk_B0C) < 0.00001f) { + this->unk_B0C = 0.0f; + if (fabsf(this->unk_B08) < 0.00001f) { + this->unk_B08 = 0.0f; + } + } +} + +s32 func_80848570(Player* this, PlayState* play) { + if (!func_8083A6C0(play, this)) { + if (func_808396B8(play, this)) { + PlayerMeleeWeaponAnimation meleeWeaponAnim = func_808335F4(this); + + func_80833864(play, this, meleeWeaponAnim); + if ((meleeWeaponAnim >= PLAYER_MWA_SPIN_ATTACK_1H) || + ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && func_8082FBE8(this))) { + this->stateFlags2 |= PLAYER_STATE2_20000; + func_808332A0(play, this, 0, meleeWeaponAnim < PLAYER_MWA_SPIN_ATTACK_1H); + } + } else { + return false; + } + } + return true; +} + +// elegy of emptiness +void func_80848640(PlayState* play, Player* this) { + EnTorch2* torch2; + Actor* effChange; + + torch2 = play->actorCtx.elegyShells[this->transformation]; + if (torch2 != NULL) { + Math_Vec3f_Copy(&torch2->actor.home.pos, &this->actor.world.pos); + torch2->actor.home.rot.y = this->actor.shape.rot.y; + torch2->state = 0; + torch2->framesUntilNextState = 20; + } else { + torch2 = (EnTorch2*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TORCH2, this->actor.world.pos.x, + this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, + this->transformation); + } + + if (torch2 != NULL) { + play->actorCtx.elegyShells[this->transformation] = torch2; + Play_SetupRespawnPoint(&play->state, this->transformation + 3, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B)); + } + + effChange = Actor_Spawn(&play->actorCtx, play, ACTOR_EFF_CHANGE, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0, + (GET_PLAYER_FORM << 3) | this->transformation); + if (effChange != NULL) { + //! @bug: This function should only pass Player*: it uses *(this + 0x153), which is meant to be + //! player->currentMask, but in this case is garbage in the skelAnime + Player_PlaySfx((Player*)effChange, NA_SE_PL_TRANSFORM); + } +} + +s32 func_80848780(Player* this, PlayState* play) { + if (func_80830B88(play, this)) { + return true; + } + return false; +} + +s32 func_808487B8(Player* this, PlayState* play) { + if (func_80830B88(play, this) || func_80830DF0(this, play)) { + return true; + } + return false; +} + +s32 func_80848808(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284) || + ((Player_ItemToItemAction(this, this->heldItemId) == this->heldItemAction) && + (D_80862B48 = D_80862B48 || ((this->modelAnimType != PLAYER_ANIMTYPE_3) && + (this->heldItemAction != PLAYER_IA_STICK) && (play->unk_1887C == 0))))) { + func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + this->unk_ACC = 0; + this->unk_AA4 = 0; + D_80862B4C = D_80862B48; + return this->unk_AC4(this, play); + } + + if (func_8082ED94(this) != 0) { + func_80830D40(play, this); + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->unk_AA4 = 0; + } else { + func_80830D40(play, this); + } + return true; +} + +s32 func_8084894C(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->unk_284); + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_R)) { + func_80830CE8(play, this); + } else { + this->stateFlags1 |= PLAYER_STATE1_400000; + Player_SetModelsForHoldingShield(this); + if ((this->transformation == PLAYER_FORM_ZORA) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_8082F164(this, BTN_R | BTN_B); + } + } + return true; +} + +s32 func_80848A0C(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + PlayerAnimationHeader* anim; + f32 lastFrame; + + anim = func_80830A58(play, this); + lastFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->unk_284, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + } + + this->stateFlags1 |= PLAYER_STATE1_400000; + Player_SetModelsForHoldingShield(this); + return true; +} + +s32 func_80848AB0(Player* this, PlayState* play) { + // possibly a case of if ((D_80862B48 = D_80862B4C) || PlayerAnimation_Update(play, &this->unk_284)) + D_80862B48 = D_80862B4C; + if ((D_80862B48 != 0) || PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, D_8085C9F0[this->heldItemAction]); + PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_0][this->modelAnimType]); + this->unk_AA4 = 0; + this->unk_AC4(this, play); + return false; + } + return true; +} + +s32 func_80848B6C(Player* this, PlayState* play) { + if (this->unk_B28 >= 0) { + this->unk_B28 = -this->unk_B28; + } + + if (!Player_IsHoldingHookshot(this) || func_80831124(play, this)) { + if (!func_80830B88(play, this) && !func_80831094(this, play)) { + return false; + } + } + return true; +} + +PlayerAnimationHeader* D_8085D5E4[] = { + &gPlayerAnim_link_hook_walk2ready, + &gPlayerAnim_link_bow_walk2ready, + &gPlayerAnim_pn_tamahakidf, +}; + +PlayerAnimationHeader* D_8085D5F0[] = { + &gPlayerAnim_link_hook_wait, + &gPlayerAnim_link_bow_bow_wait, + &gPlayerAnim_pn_tamahakidf, +}; + +u16 D_8085D5FC[] = { + NA_SE_IT_BOW_FLICK, + NA_SE_PL_DEKUNUTS_MISS_FIRE, + NA_SE_NONE, + NA_SE_NONE, +}; + +s32 func_80848BF4(Player* this, PlayState* play) { + s32 index; + s32 temp; + + if (Player_IsHoldingHookshot(this)) { + index = 0; + } else { + temp = (this->transformation != PLAYER_FORM_DEKU) ? 1 : 2; + index = temp; + } + + if (this->transformation != PLAYER_FORM_DEKU) { + Math_ScaledStepToS(&this->upperLimbRot.z, 0x4B0, 0x190); + this->unk_AA6 |= 0x100; + } + + if ((this->unk_ACE == 0) && (func_8082ED94(this) == 0) && + (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk)) { + PlayerAnimation_PlayOnce(play, &this->unk_284, D_8085D5E4[index]); + this->unk_ACE = -1; + } else if (PlayerAnimation_Update(play, &this->unk_284)) { + PlayerAnimation_PlayLoop(play, &this->unk_284, D_8085D5F0[index]); + this->unk_ACE = 1; + } else if (this->unk_ACE == 1) { + this->unk_ACE = 2; + } + + if (this->unk_ACC >= 0xB) { + this->unk_ACC--; + } + + func_80831010(this, play); + if ((this->unk_ACE > 0) && ((this->unk_B28 < 0) || ((D_80862B4C == 0) && !func_80830FD4(play)))) { + func_8082F43C(play, this, func_80848E4C); + if (this->unk_B28 >= 0) { + if (index != 0) { + if (!func_80831194(play, this)) { + Player_PlaySfx(this, D_8085D5FC[this->unk_B28 - 1]); + } + + if (this->transformation == PLAYER_FORM_DEKU) { + PlayerAnimation_PlayOnceSetSpeed(play, &this->unk_284, &gPlayerAnim_pn_tamahaki, 2.0f / 3.0f); + } + } else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80831194(play, this); + } + } + this->unk_ACC = 0xA; + Player_StopHorizontalMovement(this); + } else { + this->stateFlags3 |= PLAYER_STATE3_40; + } + + return 1; +} + +s32 func_80848E4C(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->unk_284); + + if (Player_IsHoldingHookshot(this) && !func_80831124(play, this)) { + return true; + } + + if (!func_80830B88(play, this) && + ((((this->unk_B28 < 0) && (D_80862B4C != 0)) || + ((animFinished || (this->transformation != PLAYER_FORM_DEKU)) && (D_80862B48 != 0))) || + func_80830F9C(play))) { + + this->unk_B28 = ABS_ALT(this->unk_B28); + if (func_808306F8(this, play)) { + if (Player_IsHoldingHookshot(this)) { + this->unk_ACE = 1; + } else { + PlayerAnimation_PlayOnce(play, &this->unk_284, + (this->transformation == PLAYER_FORM_DEKU) + ? &gPlayerAnim_pn_tamahakidf + : &gPlayerAnim_link_bow_bow_shoot_next); + } + } + } else { + if (this->unk_ACC != 0) { + this->unk_ACC--; + } + + if ((func_8082FBE8(this)) || (this->unk_AA5 != PLAYER_UNKAA5_0) || (this->stateFlags1 & PLAYER_STATE1_100000)) { + if (this->unk_ACC == 0) { + this->unk_ACC++; + } + return true; + } + + if (Player_IsHoldingHookshot(this)) { + func_8082F43C(play, this, func_80848B6C); + } else { + func_8082F43C(play, this, func_80849054); + PlayerAnimation_PlayOnce(play, &this->unk_284, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_tamahakidf + : &gPlayerAnim_link_bow_bow_shoot_end); + } + this->unk_ACC = 0; + } + + return true; +} + +s32 func_80849054(Player* this, PlayState* play) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, func_80848B6C); + } + return true; +} + +s32 func_808490B4(Player* this, PlayState* play) { + Actor* heldActor = this->heldActor; + + if (heldActor == NULL) { + func_808309CC(play, this); + } + + if (func_80830B88(play, this)) { + return true; + } + + if (this->stateFlags1 & PLAYER_STATE1_800) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_link_normal_carryB_wait); + } + + if ((heldActor->id == ACTOR_EN_NIW) && (this->actor.velocity.y <= 0.0f)) { + this->actor.terminalVelocity = -2.0f; + this->actor.gravity = -0.5f; + this->fallStartHeight = this->actor.world.pos.y; + } + return true; + } + return func_80848780(this, play); +} + +s32 func_808491B4(Player* this, PlayState* play) { + if (func_80830B88(play, this)) { + return true; + } + + if (this->stateFlags1 & PLAYER_STATE1_2000000) { + func_8082F43C(play, this, func_80849570); + } else if (func_80831094(this, play)) { + return true; + } + + return false; +} + +s32 func_8084923C(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, func_808492C4); + PlayerAnimation_PlayLoop(play, &this->unk_284, &gPlayerAnim_pz_cutterwaitanim); + } + if (this->unk_284.animation == &gPlayerAnim_pz_cutterwaitanim) { + func_80831010(this, play); + } + return true; +} + +s32 func_808492C4(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->unk_284); + func_80831010(this, play); + if (D_80862B4C == 0) { + func_8082F43C(play, this, func_8084933C); + PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cutterattack); + } + return true; +} + +s32 func_8084933C(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + func_8082F43C(play, this, func_80849570); + this->unk_ACC = 0; + } else if (PlayerAnimation_OnFrame(&this->unk_284, 6.0f)) { + Vec3f pos; + s16 untargetedRotY; + + func_80835BF8(&this->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND], this->actor.shape.rot.y, 0.0f, &pos); + pos.y = this->actor.world.pos.y + 50.0f; + + untargetedRotY = this->actor.shape.rot.y - 0x190; + this->boomerangActor = Actor_Spawn( + &play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x, + (this->targetedActor != NULL) ? this->actor.shape.rot.y + 0x36B0 : untargetedRotY, 0, ZORA_BOOMERANG_LEFT); + + if (this->boomerangActor != NULL) { + EnBoom* leftBoomerang = (EnBoom*)this->boomerangActor; + EnBoom* rightBoomerang; + + leftBoomerang->moveTo = this->targetedActor; + if (leftBoomerang->moveTo != NULL) { + leftBoomerang->unk_1CF = 0x10; + } + leftBoomerang->unk_1CC = leftBoomerang->unk_1CF + 0x24; + + func_80835BF8(&this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND], this->actor.shape.rot.y, 0.0f, &pos); + + untargetedRotY = (this->actor.shape.rot.y + 0x190); + rightBoomerang = + (EnBoom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOOM, pos.x, pos.y, pos.z, this->actor.focus.rot.x, + (this->targetedActor != NULL) ? this->actor.shape.rot.y - 0x36B0 : untargetedRotY, + 0, ZORA_BOOMERANG_RIGHT); + + if (rightBoomerang != NULL) { + rightBoomerang->moveTo = this->targetedActor; + if (rightBoomerang->moveTo != NULL) { + rightBoomerang->unk_1CF = 0x10; + } + + rightBoomerang->unk_1CC = rightBoomerang->unk_1CF + 0x24; + leftBoomerang->actor.child = &rightBoomerang->actor; + rightBoomerang->actor.parent = &leftBoomerang->actor; + } + + this->stateFlags1 |= PLAYER_STATE1_2000000; + this->stateFlags3 &= ~PLAYER_STATE3_800000; + if (!func_80123420(this)) { + func_8083133C(this); + } + + this->unk_D57 = 20; + + Player_PlaySfx(this, NA_SE_IT_BOOMERANG_THROW); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } + } + + return true; +} + +s32 func_80849570(Player* this, PlayState* play) { + if (func_80830B88(play, this)) { + return true; + } + + if (this->stateFlags3 & PLAYER_STATE3_800000) { + func_8082F43C(play, this, func_80849620); + PlayerAnimation_PlayOnce(play, &this->unk_284, &gPlayerAnim_pz_cuttercatch); + this->stateFlags3 &= ~PLAYER_STATE3_800000; + Player_PlaySfx(this, NA_SE_PL_CATCH_BOOMERANG); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + return true; + } + + return false; +} + +s32 func_80849620(Player* this, PlayState* play) { + if (!func_808491B4(this, play) && PlayerAnimation_Update(play, &this->unk_284)) { + if (this->stateFlags1 & PLAYER_STATE1_2000000) { + func_8082F43C(play, this, func_80849570); + this->unk_ACC = 0; + } else { + func_8082F43C(play, this, func_80848780); + } + } + return true; +} + +void func_808496AC(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->skelAnime); + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); + + if (DECR(this->unk_AE8) == 0) { + if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { + Player_StopCutscene(this); + Player_SetAction(play, this, func_80849FE0, 0); + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + } + } else if (this->unk_AE8 == 30) { + if (Message_GetState(&play->msgCtx) != TEXT_STATE_NONE) { + this->unk_AE8++; + } else { + Message_StartTextbox(play, 0xC03, NULL); + } + } +} + +void func_808497A0(Player* this, PlayState* play) { + this->stateFlags3 |= PLAYER_STATE3_10000000; + PlayerAnimation_Update(play, &this->skelAnime); + func_8083216C(this, play); + + if (R_PLAY_FILL_SCREEN_ON == 0) { + R_PLAY_FILL_SCREEN_ON = 20; + R_PLAY_FILL_SCREEN_ALPHA = 0; + R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA; + play_sound(NA_SE_SY_DEKUNUTS_JUMP_FAILED); + } else if (R_PLAY_FILL_SCREEN_ON > 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ALPHA = 255; + if (this->unk_B86[0] == 0) { + this->unk_B86[0] = 1; + func_8082DE50(play, this); + } else { + R_PLAY_FILL_SCREEN_ON = -20; + this->stateFlags1 &= ~PLAYER_STATE1_8000000; + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + Player_SetEquipmentData(play, this); + this->prevBoots = this->currentBoots; + + if (this->unk_3CF != 0) { + Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_3C0); + this->actor.shape.rot.y = this->unk_3CC; + } else { + Math_Vec3f_Copy(&this->actor.world.pos, &gSaveContext.respawn[RESPAWN_MODE_DOWN].pos); + this->actor.shape.rot.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw; + } + + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + this->linearVelocity = 0.0f; + this->currentYaw = this->actor.shape.rot.y; + this->actor.velocity.y = 0.0f; + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + + if ((play->roomCtx.curRoom.num == this->unk_3CE) && (play->roomCtx.prevRoom.num < 0)) { + this->unk_AE8 = 5; + } else { + play->roomCtx.curRoom.num = -1; + play->roomCtx.prevRoom.num = -1; + play->roomCtx.curRoom.segment = NULL; + play->roomCtx.prevRoom.segment = NULL; + + func_8012EBF8(play, &play->roomCtx); + this->unk_AE8 = -1; + this->unk_AE7 = this->unk_3CE; + } + } + } + } else if (this->unk_AE8 < 0) { + if (Room_StartRoomTransition(play, &play->roomCtx, this->unk_AE7)) { + Map_InitRoomData(play, play->roomCtx.curRoom.num); + Minimap_SavePlayerRoomInitInfo(play); + this->unk_AE8 = 5; + } + } else if (this->unk_AE8 > 0) { + this->unk_AE8--; + } else { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ALPHA = 0; + R_PLAY_FILL_SCREEN_ON = 0; + func_808339B4(this, -40); + func_8085B384(this, play); + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND; + } + } +} + +void func_80849A9C(Player* this, PlayState* play) { + f32 sp44; + s16 sp42; + s32 temp_v0; + + if (this->unk_AE8 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + Player_AnimationPlayLoop(play, this, func_8082EF54(this)); + this->unk_AE8 = 0; + this->stateFlags3 &= ~PLAYER_STATE3_8; + } + func_8082FC60(this); + } else { + func_8083E958(play, this); + } + + func_80832F24(this); + if (func_80833058(play, this, D_8085CFE4, 1)) { + return; + } + + if (!func_8082FB68(this) && (!func_80123434(this) || (func_8084894C != this->unk_AC4))) { + func_8083B29C(this, play); + return; + } + + func_80832F78(this, &sp44, &sp42, 0.0f, play); + + temp_v0 = func_8083E404(this, sp44, sp42); + if (temp_v0 > 0) { + func_8083A844(this, play, sp42); + } else if (temp_v0 < 0) { + func_8083AF8C(this, sp42, play); + } else if (sp44 > 4.0f) { + func_8083B030(this, play); + } else { + u32 temp_v0_2; + + func_8083EA44(this, this->linearVelocity * 0.3f + 1.0f); + func_8083E8E0(this, sp44, sp42); + + temp_v0_2 = this->unk_B38; + if ((temp_v0_2 < 6) || ((temp_v0_2 - 0xE) < 6)) { + Math_StepToF(&this->linearVelocity, 0.0f, 1.5f); + } else { + s16 temp_v0_3 = sp42 - this->currentYaw; + s32 var_v1 = ABS_ALT(temp_v0_3); + + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.5f)) { + this->currentYaw = sp42; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp44 * 0.3f, 2.0f, 1.5f); + Math_ScaledStepToS(&this->currentYaw, sp42, var_v1 * 0.1f); + } + } + } +} + +void func_80849DD0(Player* this, PlayState* play) { + f32 sp3C; + s16 sp3A; + s32 temp_v0; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + Player_AnimationPlayOnce(play, this, func_8082ED20(this)); + this->stateFlags3 &= ~PLAYER_STATE3_8; + } + + func_80832F24(this); + if (func_80833058(play, this, D_8085CFEC, 1)) { + return; + } + + if (func_8082FB68(this)) { + func_8083B23C(this, play); + return; + } + if (!func_80123434(this)) { + func_8083172C(play, this, func_80849FE0, 1); + this->currentYaw = this->actor.shape.rot.y; + return; + } + if (func_8084894C == this->unk_AC4) { + func_8083B23C(this, play); + return; + } + + func_80832F78(this, &sp3C, &sp3A, 0.0f, play); + + temp_v0 = func_8083E514(this, &sp3C, &sp3A, play); + if (temp_v0 > 0) { + func_8083A844(this, play, sp3A); + } else if (temp_v0 < 0) { + func_8083AECC(this, sp3A, play); + } else if (sp3C > 4.9f) { + func_8083B030(this, play); + func_8082FC60(this); + } else if (sp3C != 0.0f) { + func_8083AF30(this, play); + } else { + s16 temp_v0_2 = sp3A - this->actor.shape.rot.y; + + if (ABS_ALT(temp_v0_2) > 0x320) { + func_8083B0E4(play, this, sp3A); + } + } +} + +void func_80849FE0(Player* this, PlayState* play) { + s32 temp_v0 = func_8082ED94(this); + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp3C; + s16 sp3A; + s16 temp_v1_2; + + func_8083C85C(this); + if (temp_v0 > 0) { + func_8082EEA4(this, temp_v0 - 1); + } + + if (animFinished || + ((this->currentMask == PLAYER_MASK_SCENTS) && (this->skelAnime.animation != &gPlayerAnim_cl_msbowait)) || + ((this->currentMask != PLAYER_MASK_SCENTS) && (this->skelAnime.animation == &gPlayerAnim_cl_msbowait))) { + if (this->unk_AE8 != 0) { + if (DECR(this->unk_AE8) == 0) { + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } + + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y = + (this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].y + ((this->unk_AE8 & 1) * 0x50)) - 0x28; + } else { + func_8082E794(this); + Player_ChooseIdleAnim(play, this); + } + this->stateFlags3 &= ~PLAYER_STATE3_8; + } + + func_80832F24(this); + if ((this->unk_AE8 == 0) && !func_80847880(play, this) && !func_80833058(play, this, D_8085D01C, 1)) { + if (func_8082FB68(this)) { + func_8083B23C(this, play); + return; + } + if (func_80123434(this)) { + func_8083692C(this, play); + return; + } + func_80832F78(this, &sp3C, &sp3A, 0.018f, play); + if (sp3C != 0.0f) { + func_8083A844(this, play, sp3A); + return; + } + temp_v1_2 = sp3A - this->actor.shape.rot.y; + + if (ABS_ALT(temp_v1_2) > 0x320) { + func_8083B0E4(play, this, sp3A); + } else { + Math_ScaledStepToS(&this->actor.shape.rot.y, sp3A, 0x4B0); + this->currentYaw = this->actor.shape.rot.y; + if (func_8082ED20(this) == this->skelAnime.animation) { + func_8083C6E8(this, play); + } + } + } +} + +void func_8084A26C(Player* this, PlayState* play) { + f32 var_fv0; + s16 temp_v0_3; + f32 sp44; + s16 sp42; + s32 var_v0; + s32 temp_v0_2; + s32 var_v1; + f32 var_fv1; + + this->skelAnime.mode = 0; + PlayerAnimation_SetUpdateFunction(&this->skelAnime); + + this->skelAnime.animation = func_8082EFE4(this); + if (this->skelAnime.animation == &gPlayerAnim_link_bow_side_walk) { + var_fv0 = 24.0f; + var_fv1 = -(MREG(95) / 100.0f); + } else { + var_fv0 = 29.0f; + var_fv1 = MREG(95) / 100.0f; + } + + this->skelAnime.animLength = var_fv0; + this->skelAnime.endFrame = var_fv0 - 1.0f; + if (BINANG_SUB(this->currentYaw, this->actor.shape.rot.y) >= 0) { + var_v0 = 1; + } else { + var_v0 = -1; + } + + this->skelAnime.playSpeed = var_v0 * (this->linearVelocity * var_fv1); + + PlayerAnimation_Update(play, &this->skelAnime); + if (PlayerAnimation_OnFrame(&this->skelAnime, 0.0f) || PlayerAnimation_OnFrame(&this->skelAnime, var_fv0 / 2.0f)) { + Player_AnimSfx_PlayFloorWalk(this, this->linearVelocity); + } + + if (func_80833058(play, this, D_8085CFF8, 1)) { + return; + } + + if (func_8082FB68(this)) { + func_8083B23C(this, play); + return; + } + if (!func_80123434(this)) { + func_8085B384(this, play); + return; + } + func_80832F78(this, &sp44, &sp42, 0.0f, play); + + temp_v0_2 = func_8083E514(this, &sp44, &sp42, play); + if (temp_v0_2 > 0) { + func_8083A844(this, play, sp42); + return; + } + if (temp_v0_2 < 0) { + func_8083AECC(this, sp42, play); + return; + } + if (sp44 > 4.9f) { + func_8083B030(this, play); + func_8082FC60(this); + return; + } + if ((sp44 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_8083692C(this, play); + return; + } + + temp_v0_3 = sp42 - this->currentYaw; + var_v1 = ABS_ALT(temp_v0_3); + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.5f)) { + this->currentYaw = sp42; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp44 * 0.4f, 1.5f, 1.5f); + Math_ScaledStepToS(&this->currentYaw, sp42, var_v1 * 0.1f); + } +} + +void func_8084A5C0(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s32 sp2C; + + func_8083EE60(this, play); + if (func_80833058(play, this, D_8085D004, 1)) { + return; + } + + if (func_8082FC24(this) == 0) { + func_8083A844(this, play, this->currentYaw); + return; + } + + func_80832F78(this, &sp34, &sp32, 0.0f, play); + + sp2C = func_8083E514(this, &sp34, &sp32, play); + if (sp2C >= 0) { + if (!func_8083F190(this, &sp34, &sp32, play)) { + if (sp2C != 0) { + func_8083A794(this, play); + } else if (sp34 > 4.9f) { + func_8083B030(this, play); + } else { + func_8083AF30(this, play); + } + } + } else { + s16 sp2A = sp32 - this->currentYaw; + + Math_AsymStepToF(&this->linearVelocity, sp34 * 1.5f, 1.5f, 2.0f); + Math_ScaledStepToS(&this->currentYaw, sp32, sp2A * 0.1f); + if ((sp34 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_8083692C(this, play); + } + } +} + +void func_8084A794(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp30; + s16 sp2E; + + func_80832F24(this); + + if (func_80833058(play, this, D_8085D004, 1)) { + return; + } + + func_80832F78(this, &sp30, &sp2E, 0.0f, play); + if (this->linearVelocity != 0.0f) { + return; + } + + this->currentYaw = this->actor.shape.rot.y; + if (func_8083E514(this, &sp30, &sp2E, play) > 0) { + func_8083A794(this, play); + } else if ((sp30 != 0.0f) || animFinished) { + func_8083F230(this, play); + } +} + +void func_8084A884(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + + if (func_80833058(play, this, D_8085D004, 1)) { + return; + } + + if (animFinished) { + func_8083692C(this, play); + } +} + +void func_8084A8E8(Player* this, PlayState* play) { + f32 sp3C; + s16 sp3A; + s32 var_v0; + + func_8083F27C(play, this); + if (func_80833058(play, this, D_8085D00C, 1)) { + return; + } + + if (!func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp3C, &sp3A, 0.0f, play); + if (func_80123434(this)) { + var_v0 = func_8083E514(this, &sp3C, &sp3A, play); + } else { + var_v0 = func_8083E404(this, sp3C, sp3A); + } + + if (var_v0 > 0) { + func_8083A794(this, play); + } else if (var_v0 < 0) { + if (func_80123434(this)) { + func_8083AECC(this, sp3A, play); + } else { + func_8083AF8C(this, sp3A, play); + } + } else if ((this->linearVelocity < 3.6f) && (sp3C < 4.0f)) { + if ((func_80123420(this) == 0) && (func_80123434(this))) { + func_8083AF30(this, play); + } else { + func_80836988(this, play); + } + } else { + s16 temp_v0; + s32 var_v1; + s32 pad; + + func_8083E8E0(this, sp3C, sp3A); + + temp_v0 = sp3A - this->currentYaw; + var_v1 = ABS_ALT(temp_v0); + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 3.0f)) { + this->currentYaw = sp3A; + } + } else { + sp3C = sp3C * 0.9f; + Math_AsymStepToF(&this->linearVelocity, sp3C, 2.0f, 3.0f); + Math_ScaledStepToS(&this->currentYaw, sp3A, var_v1 * 0.1f); + } + } +} + +void func_8084AB4C(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + + PlayerAnimation_Update(play, &this->skelAnime); + if (Player_IsHoldingTwoHandedWeapon(this)) { + AnimationContext_SetLoadFrame(play, func_8082ED20(this), 0, this->skelAnime.limbCount, + this->skelAnime.morphTable); + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->skelAnime.morphTable, D_8085B9F0); + } + + func_80832F78(this, &sp34, &sp32, 0.018f, play); + if ((this != GET_PLAYER(play)) && (this->targetedActor == NULL)) { + sp32 = this->actor.home.rot.y; + } + + if (func_80833058(play, this, D_8085D018, 1)) { + return; + } + + if (sp34 != 0.0f) { + this->actor.shape.rot.y = sp32; + func_8083A794(this, play); + } else if (Math_ScaledStepToS(&this->actor.shape.rot.y, sp32, this->unk_B4E)) { + func_80839E74(this, play); + } + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8084AC84(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (this->linearVelocity < 1.0f) { + this->skelAnime.animation = &gPlayerAnim_clink_normal_okarina_walk; + } else { + this->skelAnime.animation = &gPlayerAnim_clink_normal_okarina_walkB; + } + PlayerAnimation_Update(play, &this->skelAnime); + + if (!func_80847880(play, this) && + (!func_80833058(play, this, D_8085D01C, 1) || (func_8084AC84 == this->actionFunc))) { + f32 sp3C; + f32 temp_fv0; + f32 temp_fv1; + s16 sp32; + s16 sp30; + + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_80839E74(this, play); + return; + } + + this->linearVelocity = this->unk_B48; + func_80832F78(this, &sp3C, &sp32, 0.018f, play); + sp30 = sp32; + + if (!func_8083A4A4(this, &sp3C, &sp32, REG(43) / 100.0f)) { + func_8083CB04(this, sp3C, sp32, REG(19) / 100.0f, 1.5f, 0x3E8); + func_8083C8E8(this, play); + if ((this->linearVelocity == 0.0f) && (sp3C == 0.0f)) { + this->currentYaw = sp30; + this->actor.shape.rot.y = this->currentYaw; + } + } + + this->unk_B48 = this->linearVelocity; + temp_fv0 = this->skelAnime.curFrame + 5.0f; + temp_fv1 = this->skelAnime.animLength / 2.0f; + + // effectively an fmodf + temp_fv0 -= temp_fv1 * (s32)(temp_fv0 / temp_fv1); + this->linearVelocity *= Math_CosS(temp_fv0 * 1000.0f) * 0.4f; + } +} + +void func_8084AEEC(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + PlayerAnimation_Update(play, &this->skelAnime); + func_80832F24(this); + if (!func_80847880(play, this)) { + if (!func_80833058(play, this, D_8085D01C, 0) || (func_8084AEEC == this->actionFunc)) { + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_80839E74(this, play); + } + } + } +} + +void func_8084AF9C(Player* this, PlayState* play) { + f32 sp2C; // player speed? + s16 sp2A; + + this->stateFlags2 |= PLAYER_STATE2_20; + func_8083F57C(this, play); + if (func_80833058(play, this, D_8085D028, 1)) { + return; + } + + if (func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp2C, &sp2A, 0.018f, play); + if (this->currentMask == PLAYER_MASK_BUNNY) { + sp2C *= 1.5f; + } + + if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) { + func_8083CB58(this, sp2C, sp2A); + func_8083C8E8(this, play); + if ((this->linearVelocity == 0.0f) && (sp2C == 0.0f)) { + func_80839E3C(this, play); + } + } +} + +void func_8084B0EC(Player* this, PlayState* play) { + f32 sp2C; + s16 sp2A; + + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8083F57C(this, play); + if (func_80833058(play, this, D_8085D034, 1)) { + return; + } + + if (!func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp2C, &sp2A, 0.0f, play); + if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) { + if (((func_80123434(this) != 0) && (sp2C != 0) && (func_8083E514(this, &sp2C, &sp2A, play) <= 0)) || + (!func_80123434(this) && (func_8083E404(this, sp2C, sp2A) <= 0))) { + func_80836988(this, play); + } else { + func_8083CB58(this, sp2C, sp2A); + func_8083C8E8(this, play); + if ((this->linearVelocity == 0.0f) && (sp2C == 0.0f)) { + func_80836988(this, play); + } + } + } +} + +void func_8084B288(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp30; + s16 sp2E; + + if (func_80833058(play, this, D_8085D00C, 1)) { + return; + } + + if (!func_8082FC24(this)) { + func_8083A794(this, play); + return; + } + + func_80832F78(this, &sp30, &sp2E, 0.0f, play); + if ((this->skelAnime.morphWeight == 0.0f) && (this->skelAnime.curFrame > 5.0f)) { + func_80832F24(this); + if ((this->skelAnime.curFrame > 10.0f) && (func_8083E404(this, sp30, sp2E) < 0)) { + func_8083AF8C(this, sp2E, play); + } else if (animFinished) { + func_8083B090(this, play); + } + } +} + +void func_8084B3B8(Player* this, PlayState* play) { + s32 animFinished = PlayerAnimation_Update(play, &this->skelAnime); + f32 sp30; + s16 sp2E; + + func_80832F24(this); + if (func_80833058(play, this, D_8085D044, 1)) { + return; + } + + func_80832F78(this, &sp30, &sp2E, 0.0f, play); + if (this->linearVelocity == 0.0f) { + this->currentYaw = this->actor.shape.rot.y; + if (func_8083E404(this, sp30, sp2E) > 0) { + func_8083A794(this, play); + } else if ((sp30 != 0.0f) || animFinished) { + func_80836988(this, play); + } + } +} + +void func_8084B4A8(Player* this, PlayState* play) { + if (this->skelAnime.animation == &gPlayerAnim_link_normal_backspace) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + func_8082E438(play, this, D_8085BE84[PLAYER_ANIMGROUP_31][this->modelAnimType]); + } + } else { + func_8082E67C(play, this, D_8085BE84[PLAYER_ANIMGROUP_32][this->modelAnimType]); + } + + if (DECR(this->unk_AE8) == 0) { + if (!func_80838A90(this, play)) { + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_33][this->modelAnimType], play); + } + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + } +} + +// Player_Action_Shielding +void func_8084B5C0(Player* this, PlayState* play) { + func_80832F24(this); + + if (this->transformation == PLAYER_FORM_GORON) { + SkelAnime_Update(&this->unk_2C8); + + if (!func_8083FE38(this, play)) { + if (!func_8083A274(this, play)) { + this->stateFlags1 &= ~PLAYER_STATE1_400000; + + if (this->itemAction <= PLAYER_IA_MINUS1) { + func_80123C58(this); + } + + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_21][this->modelAnimType], play); + func_80830B38(this); + } else { + this->stateFlags1 |= PLAYER_STATE1_400000; + } + } + + return; + } + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (!Player_IsGoronOrDeku(this)) { + Player_AnimationPlayLoop(play, this, D_8085BE84[PLAYER_ANIMGROUP_20][this->modelAnimType]); + } + + this->unk_AE8 = 1; + this->unk_AE7 = 0; + } + + if (!Player_IsGoronOrDeku(this)) { + this->stateFlags1 |= PLAYER_STATE1_400000; + func_8083216C(this, play); + this->stateFlags1 &= ~PLAYER_STATE1_400000; + if (this->transformation == PLAYER_FORM_ZORA) { + func_8082F164(this, BTN_R | BTN_B); + } + } + + if (this->unk_AE8 != 0) { + f32 yStick = sPlayerControlInput->rel.stick_y * 180; + f32 xStick = sPlayerControlInput->rel.stick_x * -120; + s16 temp_a0 = this->actor.shape.rot.y - Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + s16 var_a1; + s16 temp_ft5; + s16 var_a2; + s16 var_a3; + + var_a1 = (yStick * Math_CosS(temp_a0)) + (Math_SinS(temp_a0) * xStick); + temp_ft5 = (xStick * Math_CosS(temp_a0)) - (Math_SinS(temp_a0) * yStick); + + var_a1 = CLAMP_MAX(var_a1, 0xDAC); + var_a2 = ABS_ALT(var_a1 - this->actor.focus.rot.x) * 0.25f; + var_a2 = CLAMP_MIN(var_a2, 0x64); + + var_a3 = ABS_ALT(temp_ft5 - this->upperLimbRot.y) * 0.25f; + var_a3 = CLAMP_MIN(var_a3, 0x32); + Math_ScaledStepToS(&this->actor.focus.rot.x, var_a1, var_a2); + + this->upperLimbRot.x = this->actor.focus.rot.x; + Math_ScaledStepToS(&this->upperLimbRot.y, temp_ft5, var_a3); + + if (this->unk_AE7 != 0) { + if (!func_808401F4(play, this)) { + if (this->skelAnime.curFrame < 2.0f) { + func_8082FA5C(play, this, PLAYER_MELEE_WEAPON_STATE_1); + } + } else { + this->unk_AE8 = 1; + this->unk_AE7 = 0; + } + } else if (!func_8083FE38(this, play)) { + if (func_8083A274(this, play) != 0) { + func_8083FD80(this, play); + } else { + this->stateFlags1 &= ~PLAYER_STATE1_400000; + func_8082DC38(this); + + if (Player_IsGoronOrDeku(this)) { + func_80836A5C(this, play); + PlayerAnimation_Change(play, &this->skelAnime, this->skelAnime.animation, 1.0f, + Animation_GetLastFrame(this->skelAnime.animation), 0.0f, 2, 0.0f); + } else { + if (this->itemAction <= PLAYER_IA_MINUS1) { + func_80123C58(this); + } + + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_21][this->modelAnimType], play); + } + + Player_PlaySfx(this, NA_SE_IT_SHIELD_REMOVE); + return; + } + } else { + return; + } + } + + this->stateFlags1 |= PLAYER_STATE1_400000; + Player_SetModelsForHoldingShield(this); + this->unk_AA6 |= 0xC1; +} + +void func_8084BAA4(Player* this, PlayState* play) { + func_80832F24(this); + if (this->unk_AE7 == 0) { + D_80862B04 = func_8083216C(this, play); + if ((func_8084894C == this->unk_AC4) || (func_808331FC(play, this, &this->unk_284, 4.0f) > 0)) { + Player_SetAction(play, this, func_80849A9C, 1); + } + } else { + s32 temp_v0; + + this->stateFlags1 |= PLAYER_STATE1_400000; + temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); + if ((temp_v0 != 0) && ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime))) { + PlayerAnimationHeader* anim; + f32 lastFrame; + + Player_SetAction(play, this, func_8084B5C0, 1); + Player_SetModelsForHoldingShield(this); + anim = D_8085BE84[PLAYER_ANIMGROUP_19][this->modelAnimType]; + lastFrame = Animation_GetLastFrame(anim); + PlayerAnimation_Change(play, &this->skelAnime, anim, 1.0f, lastFrame, lastFrame, ANIMMODE_ONCE, 0.0f); + } + } +} + +void func_8084BBF0(Player* this, PlayState* play) { + s32 temp_v0; + + func_80832F24(this); + temp_v0 = func_808331FC(play, this, &this->skelAnime, 16.0f); + if (temp_v0 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime) || (temp_v0 > 0)) { + func_80836988(this, play); + } + } +} + +void func_8084BC64(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; + func_808345A8(this); + + if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && (this->unk_AE8 == 0) && (this->unk_B75 != 0)) { + s16 temp_v0 = this->unk_B76; + s16 temp_v1 = this->actor.shape.rot.y - temp_v0; + + this->actor.shape.rot.y = temp_v0; + this->currentYaw = temp_v0; + this->linearVelocity = this->unk_B78; + + if (ABS_ALT(temp_v1) > 0x4000) { + this->actor.shape.rot.y = temp_v0 + 0x8000; + } + + if (this->actor.velocity.y < 0.0f) { + this->actor.gravity = 0.0f; + this->actor.velocity.y = 0.0f; + } + } + + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + if (this->unk_AE8 != 0) { + this->unk_AE8--; + if (this->unk_AE8 == 0) { + func_8085B384(this, play); + } + } else if ((this->stateFlags1 & PLAYER_STATE1_20000000) || + (!(this->cylinder.base.acFlags & AC_HIT) && (this->unk_B75 == 0))) { + if (this->stateFlags1 & PLAYER_STATE1_20000000) { + this->unk_AE8++; + } else { + Player_SetAction(play, this, func_8084BE40, 0); + this->stateFlags1 |= PLAYER_STATE1_4000000; + } + + Player_AnimationPlayOnce(play, this, + (this->currentYaw != this->actor.shape.rot.y) + ? &gPlayerAnim_link_normal_front_downB + : &gPlayerAnim_link_normal_back_downB); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_FREEZE); + } + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND); + } +} + +void func_8084BE40(Player* this, PlayState* play) { + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + func_808345A8(this); + func_80832F24(this); + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity == 0.0f)) { + if (this->stateFlags1 & PLAYER_STATE1_20000000) { + this->unk_AE8++; + } else { + Player_SetAction(play, this, func_8084BF28, 0); + this->stateFlags1 |= PLAYER_STATE1_4000000; + } + + func_8082DB90(play, this, + (this->currentYaw != this->actor.shape.rot.y) ? &gPlayerAnim_link_normal_front_down_wake + : &gPlayerAnim_link_normal_back_down_wake); + this->currentYaw = this->actor.shape.rot.y; + } +} + +AnimSfxEntry D_8085D604[] = { + ANIMSFX(ANIMSFX_TYPE_8, 20, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 30, NA_SE_NONE, STOP), +}; + +void func_8084BF28(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + func_808345A8(this); + if (this->stateFlags1 & PLAYER_STATE1_20000000) { + PlayerAnimation_Update(play, &this->skelAnime); + } else { + s32 temp_v0 = func_808331FC(play, this, &this->skelAnime, 16.0f); + + if (temp_v0 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime) || (temp_v0 > 0)) { + func_80836988(this, play); + } + } + } + + Player_PlayAnimSfx(this, D_8085D604); +} + +AnimSfxEntry D_8085D60C[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 60, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 140, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 164, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_8, 170, NA_SE_NONE, STOP), +}; + +void func_8084BFDC(Player* this, PlayState* play) { + if ((this->transformation != PLAYER_FORM_GORON) && (this->actor.depthInWater <= 0.0f)) { + if ((play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_HOT) || + (sPlayerCurrentFloorType == FLOOR_TYPE_9) || + ((func_808340AC(sPlayerCurrentFloorType) >= 0) && + !SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId))) { + func_808344C0(play, this); + } + } + + func_80832F24(this); + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this == GET_PLAYER(play)) { + func_80840770(play, this); + } + } else if (this->skelAnime.animation == &gPlayerAnim_link_derth_rebirth) { + Player_PlayAnimSfx(this, D_8085D60C); + } else if ((this->skelAnime.animation == &gPlayerAnim_link_normal_electric_shock_end) && + PlayerAnimation_OnFrame(&this->skelAnime, 88.0f)) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND); + } +} + +s32 func_8084C124(PlayState* play, Player* this) { + if (func_80837730(play, this, 3.0f, 500)) { + Player_PlaySfx(this, NA_SE_EV_DIVE_INTO_WATER); + return true; + } + return false; +} + +void func_8084C16C(Player* this, PlayState* play) { + f32 sp44; + s16 sp42; + Actor* heldActor; + + if (func_80123420(this) != 0) { + this->actor.gravity = -1.2f; + } + + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + func_80832F78(this, &sp44, &sp42, 0.0f, play); + if (this->stateFlags1 & PLAYER_STATE1_800) { + heldActor = this->heldActor; + if (!func_808313A8(play, this, heldActor) && (heldActor->id == ACTOR_EN_NIW) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { + func_808409A8(play, this, this->linearVelocity + 2.0f, this->actor.velocity.y + 2.0f); + } + } + + PlayerAnimation_Update(play, &this->skelAnime); + if ((this->skelAnime.animation == &gPlayerAnim_link_normal_newroll_jump_20f) && + PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + Player_PlaySfx(this, NA_SE_PL_ROLL); + } + + if (this->transformation == PLAYER_FORM_DEKU) { + s16 prevYaw = this->currentYaw; + + func_808378FC(play, this); + func_8083CBC4(this, sp44 * 0.5f, sp42, 2.0f, 0.2f, 0.1f, 0x190); + + if (this->skelAnime.animation == &gPlayerAnim_pn_attack) { + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + + this->unk_B10[0] += -800.0f; + this->actor.shape.rot.y += BINANG_ADD((s16)this->unk_B10[0], BINANG_SUB(this->currentYaw, prevYaw)); + Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0]); + } + } else { + func_8083CBC4(this, sp44, sp42, 1.0f, 0.05f, 0.1f, 0xC8); + } + + func_8083216C(this, play); + if ((((this->stateFlags2 & PLAYER_STATE2_80000) && ((this->unk_AE7 == 2) || (this->unk_AE7 >= 4))) || + !func_80839770(this, play)) && + (this->actor.velocity.y < 0.0f)) { + if (this->unk_AE8 >= 0) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) || (this->unk_AE8 == 0) || (this->fallDistance > 0)) { + if ((D_80862B18 > 800.0f) || (this->stateFlags3 & PLAYER_STATE3_10000)) { + func_80840980(this, NA_SE_VO_LI_FALL_S); + this->stateFlags3 &= ~PLAYER_STATE3_10000; + } + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_landing, 1.0f, 0.0f, 0.0f, + ANIMMODE_ONCE, 8.0f); + this->unk_AE8 = -1; + } + } else { + if ((this->unk_AE8 == -1) && (this->fallDistance > 120) && (D_80862B18 > 280.0f)) { + this->unk_AE8 = -2; + func_80840980(this, NA_SE_VO_LI_FALL_L); + } + + if ((this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) && + !(this->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_8000000)) && + (this->linearVelocity > 0.0f)) { + if ((this->transformation != PLAYER_FORM_GORON) && + ((this->transformation != PLAYER_FORM_DEKU) || (this->remainingHopsCounter != 0))) { + if ((this->wallHeight >= 150.0f) && (this->unk_AE3[this->unk_ADE] == 0)) { + if (func_8083D860(this, play)) { + func_8084C124(play, this); + } + } else if ((this->unk_B5C >= 2) && + ((this->wallHeight < (150.0f * this->ageProperties->unk_08)) && + (((this->actor.world.pos.y - this->actor.floorHeight) + this->wallHeight)) > + (70.0f * this->ageProperties->unk_08))) { + AnimationContext_DisableQueue(play); + if (this->stateFlags3 & PLAYER_STATE3_10000) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HOOKSHOT_HANG); + } else { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HANG); + } + + this->actor.world.pos.y += this->wallHeight; + func_80837CEC(play, this, this->actor.wallPoly, this->wallDistance, + GET_PLAYER_ANIM(PLAYER_ANIMGROUP_38, this->modelAnimType)); + this->currentYaw += 0x8000; + this->actor.shape.rot.y = this->currentYaw; + this->stateFlags1 |= PLAYER_STATE1_2000; + + func_8084C124(play, this); + } + } + } + } + } + } else { + func_80837134(play, this); + func_8083216C(this, play); + } + + func_80838A90(this, play); +} + +// sPlayerRollingAnimSfx +AnimSfxEntry D_8085D61C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_SWORD_N, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 6, NA_SE_PL_WALK_GROUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 6, NA_SE_PL_ROLL, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 18, NA_SE_NONE, STOP), +}; + +// Player_Action_Rolling // Handles bonking too? +void func_8084C6EC(Player* this, PlayState* play) { + s32 animFinished; + + this->stateFlags2 |= PLAYER_STATE2_20; + this->stateFlags3 |= PLAYER_STATE3_8000000; + + animFinished = PlayerAnimation_Update(play, &this->skelAnime); + if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { + func_808339B4(this, -10); + } + + if (this->skelAnime.curFrame >= 8.0f) { + if (this->skelAnime.curFrame < 18.0f) { + Player_SetCylinderForAttack(this, DMG_NORMAL_ROLL, 1, 12); + } else { + Player_ResetCylinder(this); + } + } + + if (func_8083FE38(this, play)) { + return; + } + + if (this->unk_AE8 != 0) { + s32 temp_v0; + + Math_StepToF(&this->linearVelocity, 0.0f, 2.0f); + temp_v0 = func_808331FC(play, this, &this->skelAnime, 5.0f); + if (temp_v0 != 0) { + if ((temp_v0 > 0) || animFinished) { + func_80836A5C(this, play); + } + } + } else if (!func_80840A30(play, this, &this->linearVelocity, 6.0f)) { + if ((this->skelAnime.curFrame < 15.0f) || !func_80848570(this, play)) { + f32 sp3C; + s16 yaw; + + if (this->skelAnime.curFrame >= 20.0f) { + func_80836A5C(this, play); + return; + } + + func_80832F78(this, &sp3C, &yaw, 0.018f, play); + sp3C *= 1.5f; + if ((sp3C < 3.0f) || (this->unk_AE3[this->unk_ADE] != 0)) { + sp3C = 3.0f; + } + func_8083CB58(this, sp3C, this->actor.shape.rot.y); + + if (func_8083FBC4(play, this)) { + func_800B8F98(&this->actor, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) + ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG + : NA_SE_PL_ROLL_DUST - SFX_FLAG); + } + + Player_PlayAnimSfx(this, D_8085D61C); + } + } +} + +void func_8084C94C(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_run_jump_water_fall_wait); + } + + Math_StepToF(&this->linearVelocity, 0.0f, 0.05f); + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->fallDistance >= 400) { + this->actor.colChkInfo.damage = 0x10; + func_80833B18(play, this, 1, 4.0f, 5.0f, this->actor.shape.rot.y, 20); + } else { + func_80836B3C(play, this, 4.0f); + } + } +} + +void func_8084CA24(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); + } + + Math_SmoothStepToS(&this->unk_B86[1], 0, 6, 0x7D0, 0x190); + if (!func_80840A30(play, this, &this->linearVelocity, 0.0f)) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + if (this->unk_AAA > 0x36B0) { + this->actor.colChkInfo.damage = 0x10; + func_80833B18(play, this, 1, 4.0f, 5.0f, this->actor.shape.rot.y, 20); + } else { + func_80836B3C(play, this, 4.0f); + } + } else { + this->actor.gravity = -1.0f; + this->unk_AAA = Math_Atan2S_XY(this->actor.speed, -this->actor.velocity.y); + func_8082F164(this, BTN_R); + } + } +} + +void func_8084CB58(Player* this, PlayState* play) { + AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation]; + f32 sp38; + s16 sp36; + + this->stateFlags2 |= PLAYER_STATE2_20; + + if (this->transformation == PLAYER_FORM_ZORA) { + this->actor.gravity = -0.8f; + } else { + this->actor.gravity = -1.2f; + } + + PlayerAnimation_Update(play, &this->skelAnime); + + if (!func_808401F4(play, this)) { + func_8083FCF0(play, this, 6.0f, attackInfoEntry->unk_C, attackInfoEntry->unk_D); + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + func_80832F78(this, &sp38, &sp36, 0.0f, play); + func_8083CBC4(this, sp38, this->currentYaw, 1.0f, 0.05f, 0.1f, 200); + } else if (func_80836F10(play, this) >= 0) { // Player didn't die because of this fall + this->meleeWeaponAnimation += 3; + func_80833864(play, this, this->meleeWeaponAnimation); + this->unk_ADD = 3; + this->meleeWeaponState = PLAYER_MELEE_WEAPON_STATE_0; + Player_AnimSfx_PlayFloorLand(this); + } + } +} + +void func_8084CCEC(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s32 temp_v0; + + this->stateFlags1 |= PLAYER_STATE1_1000; + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + func_8083133C(this); + this->stateFlags1 &= ~PLAYER_STATE1_20000; + Player_AnimationPlayLoop(play, this, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)]); + this->unk_AE8 = -1; + } + + func_80832F24(this); + if (!func_8083FE38(this, play) && (this->unk_AE8 != 0)) { + func_80840F34(this); + if (this->unk_AE8 < 0) { + if (this->unk_B08 >= 0.1f) { + this->unk_ADD = 0; + this->unk_AE8 = 1; + } else if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_B)) { + func_80840E5C(this, play); + } + } else if (!func_80840CD4(this, play)) { + func_80832F78(this, &sp34, &sp32, 0.0f, play); + temp_v0 = func_8083E7F8(this, &sp34, &sp32, play); + if (temp_v0 > 0) { + func_80840DEC(this, play); + } else if (temp_v0 < 0) { + func_80840E24(this, play); + } + } + } +} + +void func_8084CE84(Player* this, PlayState* play) { + s32 var_v1; + s32 temp_v0_2; + f32 temp_ft4; + f32 var_fa0; + f32 sp54; + s16 sp52; + s16 temp_v0; + f32 temp_fv1; + s32 pad; + s32 sp44; + + temp_v0 = this->currentYaw - this->actor.shape.rot.y; + var_v1 = ABS_ALT(temp_v0); + + temp_ft4 = fabsf(this->linearVelocity); + this->stateFlags1 |= PLAYER_STATE1_1000; + + var_fa0 = temp_ft4 * 1.5f; + var_fa0 = CLAMP_MIN(var_fa0, 1.5f); + + var_fa0 = ((var_v1 < 0x4000) ? -1.0f : 1.0f) * var_fa0; + + func_8083EA44(this, var_fa0); + + var_fa0 = CLAMP(temp_ft4 * 0.5f, 0.5f, 1.0f); + + PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)], 0.0f, + D_8085CF70[Player_IsHoldingTwoHandedWeapon(this)], this->unk_B38 * 0.7241379f, var_fa0, + this->blendTableBuffer); + if (!func_8083FE38(this, play) && !func_80840CD4(this, play)) { + func_80840F34(this); + func_80832F78(this, &sp54, &sp52, 0.0f, play); + + temp_v0_2 = func_8083E7F8(this, &sp54, &sp52, play); + if (temp_v0_2 < 0) { + func_80840E24(this, play); + return; + } + + if (temp_v0_2 == 0) { + sp54 = 0.0f; + sp52 = this->currentYaw; + } + + sp44 = ABS_ALT(BINANG_SUB(sp52, this->currentYaw)); + if (sp44 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + this->currentYaw = sp52; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp54 * 0.2f, 1.0f, 0.5f); + Math_ScaledStepToS(&this->currentYaw, sp52, sp44 * 0.1f); + if ((sp54 == 0.0f) && (this->linearVelocity == 0.0f)) { + func_80840EC0(this, play); + } + } + } +} + +void func_8084D18C(Player* this, PlayState* play) { + f32 sp5C = fabsf(this->linearVelocity); + f32 var_fa0; + + this->stateFlags1 |= PLAYER_STATE1_1000; + + if (sp5C == 0.0f) { + sp5C = ABS_ALT(this->unk_B4C) * 0.0015f; + if (sp5C < 400.0f) { + sp5C = 0.0f; + } + + func_8083EA44(this, ((this->unk_B4C >= 0) ? 1 : -1) * sp5C); + } else { + var_fa0 = sp5C * 1.5f; + var_fa0 = CLAMP_MIN(var_fa0, 1.5f); + func_8083EA44(this, var_fa0); + } + + var_fa0 = CLAMP(sp5C * 0.5f, 0.5f, 1.0f); + + PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085CF60[Player_IsHoldingTwoHandedWeapon(this)], 0.0f, + D_8085CF78[Player_IsHoldingTwoHandedWeapon(this)], this->unk_B38 * 0.7241379f, var_fa0, + this->blendTableBuffer); + if (!func_8083FE38(this, play) && !func_80840CD4(this, play)) { + f32 sp54; + s16 sp52; + s32 temp_v0; + s16 temp_v0_2; + s32 var_v1; + + func_80840F34(this); + func_80832F78(this, &sp54, &sp52, 0.0f, play); + temp_v0 = func_8083E7F8(this, &sp54, &sp52, play); + if (temp_v0 > 0) { + func_80840DEC(this, play); + return; + } + + if (temp_v0 == 0) { + sp54 = 0.0f; + sp52 = this->currentYaw; + } + + var_v1 = ABS_ALT(BINANG_SUB(sp52, this->currentYaw)); + if (var_v1 > 0x4000) { + if (Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + this->currentYaw = sp52; + } + } else { + Math_AsymStepToF(&this->linearVelocity, sp54 * 0.2f, 1.0f, 0.5f); + Math_ScaledStepToS(&this->currentYaw, sp52, var_v1 * 0.1f); + if ((sp54 == 0.0f) && (this->linearVelocity == 0.0f) && (sp5C == 0.0f)) { + func_80840EC0(this, play); + } + } + } +} + +void func_8084D4EC(Player* this, PlayState* play) { + s32 animFinished; + f32 frame; + s32 temp_v0; + + this->stateFlags2 |= PLAYER_STATE2_20; + animFinished = PlayerAnimation_Update(play, &this->skelAnime); + + if (this->skelAnime.animation == &gPlayerAnim_link_normal_250jump_start) { + this->linearVelocity = 1.0f; + if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { + f32 speed = this->wallHeight; + + speed = CLAMP_MAX(speed, this->ageProperties->unk_0C); + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + speed *= 0.085f; + } else { + speed *= 0.072f; + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + speed += 1.0f; + } + + func_80834D50(play, this, NULL, speed, NA_SE_VO_LI_AUTO_JUMP); + this->unk_AE8 = -1; + } + } else { + temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); + if (temp_v0 == 0) { + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000); + return; + } + if (animFinished || (temp_v0 > 0)) { + func_80839E74(this, play); + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000); + this->unk_ABC = 0.0f; + return; + } + + frame = 0.0f; + if (this->skelAnime.animation == &gPlayerAnim_link_swimer_swim_15step_up) { + if (PlayerAnimation_OnFrame(&this->skelAnime, 30.0f)) { + func_8083B32C(play, this, 10.0f); + } + frame = 50.0f; + } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_150step_up) { + frame = 30.0f; + } else if (this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) { + frame = 16.0f; + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) { + Player_AnimSfx_PlayFloorLand(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + } + + if ((this->skelAnime.animation == &gPlayerAnim_link_normal_100step_up) || (this->skelAnime.curFrame > 5.0f)) { + if (this->unk_AE8 == 0) { + Player_AnimSfx_PlayFloorJump(this); + this->unk_AE8 = 1; + } + Math_SmoothStepToF(&this->unk_ABC, 0.0f, 0.1f, 400.0f, 150.0f); + } + } +} + +void func_8084D770(Player* this, PlayState* play) { + s32 temp_v0; + + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + if (this->unk_D58 == func_80837BF8) { + this->stateFlags2 |= PLAYER_STATE2_1; + } + + PlayerAnimation_Update(play, &this->skelAnime); + func_8083249C(this); + + temp_v0 = func_8083216C(this, play); + if (((this->stateFlags1 & PLAYER_STATE1_800) && (this->heldActor != NULL) && (this->getItemId == GI_NONE)) || + (temp_v0 == 0)) { + this->unk_D58(play, this); + } +} + +void func_8084D820(Player* this, PlayState* play) { + if (func_80838A90(this, play) == 0) { + if ((this->stateFlags3 & PLAYER_STATE3_10) && !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + func_80833AA0(this, play); + this->stateFlags1 |= PLAYER_STATE1_20000000; + } else if (this->unk_AE8 == 0) { + PlayerAnimation_Update(play, &this->skelAnime); + if (DECR(this->doorTimer) == 0) { + this->linearVelocity = 0.1f; + this->unk_AE8 = 1; + } + } else if (this->unk_AE7 == 0) { + f32 sp6C = 5.0f * D_8085C3E4; + s32 var_t0 = func_808411D4(play, this, &sp6C, -1); + + if (this->unk_397 == 4) { + if (R_PLAY_FILL_SCREEN_ON < 0) { + if (play->roomCtx.status != 1) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + + this->actor.world.pos.y += (this->doorDirection != 0) ? 3.0f : -3.0f; + this->actor.prevPos.y = this->actor.world.pos.y; + } + } else if (R_PLAY_FILL_SCREEN_ON == 0) { + CollisionPoly* sp64; + s32 sp60; + + if (func_80835DF8(play, this, &sp64, &sp60)) { + this->actor.floorPoly = sp64; + this->actor.floorBgId = sp60; + } + } + } + + if (var_t0 < 0x1E) { + this->unk_AE7 = 1; + this->stateFlags1 |= PLAYER_STATE1_20000000; + this->unk_3A0.x = this->unk_3AC.x; + this->unk_3A0.z = this->unk_3AC.z; + } + } else { + f32 sp5C = 5.0f; + s32 sp58 = 0x14; + s32 temp_v0_8; + + if (this->stateFlags1 & PLAYER_STATE1_1) { + sp5C = gSaveContext.entranceSpeed; + if (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) { + this->unk_3A0.x = (Math_SinS(D_80862B16) * 400.0f) + this->actor.world.pos.x; + this->unk_3A0.z = (Math_CosS(D_80862B16) * 400.0f) + this->actor.world.pos.z; + } + } else { + if (this->unk_AE8 < 0) { + this->unk_AE8++; + sp5C = gSaveContext.entranceSpeed; + sp58 = -1; + } else if (this->unk_397 == 4) { + if (R_PLAY_FILL_SCREEN_ON == 0) { + R_PLAY_FILL_SCREEN_ON = 16; + R_PLAY_FILL_SCREEN_ALPHA = 0; + + R_PLAY_FILL_SCREEN_R = R_PLAY_FILL_SCREEN_G = R_PLAY_FILL_SCREEN_B = R_PLAY_FILL_SCREEN_ALPHA; + } else if (R_PLAY_FILL_SCREEN_ON >= 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + TransitionActorEntry* temp_v1_4; // sp50 + s32 roomNum; + + temp_v1_4 = &play->doorCtx.transitionActorList[this->doorNext]; + roomNum = temp_v1_4->sides[0].room; + R_PLAY_FILL_SCREEN_ALPHA = 255; + + if ((roomNum != play->roomCtx.curRoom.num) && (play->roomCtx.curRoom.num >= 0)) { + play->roomCtx.prevRoom = play->roomCtx.curRoom; + + play->roomCtx.curRoom.num = -1; + play->roomCtx.curRoom.segment = NULL; + func_8012EBF8(play, &play->roomCtx); + } else { + static Vec3f D_8085D62C = { 0.0f, 0.0f, 0.0f }; + static Vec3f D_8085D638 = { 0.0f, 0.0f, 0.0f }; + static Vec3f D_8085D644 = { 0.0f, 0.0f, 0.0f }; + + R_PLAY_FILL_SCREEN_ON = -16; + if (play->roomCtx.curRoom.num < 0) { + Room_StartRoomTransition(play, &play->roomCtx, temp_v1_4->sides[0].room); + play->roomCtx.prevRoom.num = -1; + play->roomCtx.prevRoom.segment = NULL; + } + + this->actor.world.pos.x = temp_v1_4->pos.x; + this->actor.world.pos.y = temp_v1_4->pos.y; + this->actor.world.pos.z = temp_v1_4->pos.z; + + this->actor.shape.rot.y = ((((temp_v1_4->rotY >> 7) & 0x1FF) / 180.0f) * 0x8000); + + D_8085D62C.x = (this->doorDirection != 0) ? -120.0f : 120.0f; + D_8085D62C.y = (this->doorDirection != 0) ? -75.0f : 75.0f; + D_8085D62C.z = -240.0f; + if (this->doorDirection != 0) { + Camera_ChangeDoorCam(play->cameraPtrs[0], &this->actor, -2, 0.0f, + temp_v1_4->pos.x + 0x32, temp_v1_4->pos.y + 0x5F, + temp_v1_4->pos.z - 0x32); + } else { + Camera_ChangeDoorCam(play->cameraPtrs[0], &this->actor, -2, 0.0f, + temp_v1_4->pos.x - 0x32, temp_v1_4->pos.y + 5, + temp_v1_4->pos.z - 0x32); + } + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D62C, + &this->actor.world.pos); + + D_8085D638.x = (this->doorDirection != 0) ? 130.0f : -130.0f; + D_8085D638.z = 160.0f; + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D638, &this->unk_3A0); + D_8085D644.z = 160.0f; + Player_TranslateAndRotateY(this, &this->unk_3A0, &D_8085D644, &this->unk_3AC); + + this->actor.shape.rot.y += (this->doorDirection != 0) ? 0x4000 : -0x4000; + this->unk_AE7 = 0; + + this->actor.world.rot.y = this->currentYaw = this->actor.shape.rot.y; + } + } + + this->actor.world.pos.y += (this->doorDirection != 0) ? 3.0f : -3.0f; + this->actor.prevPos.y = this->actor.world.pos.y; + } + } + } + + temp_v0_8 = func_808411D4(play, this, &sp5C, sp58); + if ((this->unk_AE8 == 0) || ((temp_v0_8 == 0) && (this->linearVelocity == 0.0f) && + (Play_GetCamera(play, CAM_ID_MAIN)->stateFlags & CAM_STATE_4))) { + if (this->unk_397 == 4) { + Map_InitRoomData(play, play->roomCtx.curRoom.num); + Minimap_SavePlayerRoomInitInfo(play); + } + + R_PLAY_FILL_SCREEN_ON = 0; + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + Player_StopCutscene(this); + if (!(this->stateFlags3 & PLAYER_STATE3_20000)) { + func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data)); + } + + if (play->unk_1887C != 0) { + play->func_18780(this, play); + Player_SetAction(play, this, func_80854430, 0); + if (play->sceneId == 0x45) { + play->unk_1887C = 0; + } + } else if (!func_808391D8(this, play)) { + func_8083B2E4(this, play); + } + } + } + } + + if (this->stateFlags1 & PLAYER_STATE1_800) { + func_8083216C(this, play); + } +} + +// door stuff +void func_8084E034(Player* this, PlayState* play) { + EnDoor* doorActor = (EnDoor*)this->doorActor; + s32 sp38 = (doorActor != NULL) && (doorActor->doorType == ENDOOR_TYPE_7); + s32 animFinished; + CollisionPoly* poly; + s32 bgId; + + this->stateFlags2 |= PLAYER_STATE2_20; + + if (DECR(this->unk_AE7) == 0) { + func_80835DF8(play, this, &poly, &bgId); + } + + animFinished = PlayerAnimation_Update(play, &this->skelAnime); + func_8083216C(this, play); + + if (animFinished) { + if (this->unk_AE8 == 0) { + if (DECR(this->doorTimer) == 0) { + this->unk_AE8 = 1; + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } + } else { + Player_StopCutscene(this); + func_80839E74(this, play); + + if ((this->actor.category == ACTORCAT_PLAYER) && !sp38) { + if (play->roomCtx.prevRoom.num >= 0) { + func_8012EBF8(play, &play->roomCtx); + } + + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B)); + } + } + } else if (!(this->stateFlags1 & PLAYER_STATE1_20000000) && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) { + Player_StopCutscene(this); + play->func_18780(this, play); + } else if (sp38 && PlayerAnimation_OnFrame(&this->skelAnime, 15.0f)) { + s16 doorRot = (this->doorDirection < 0) ? doorActor->knobDoor.dyna.actor.world.rot.x + : doorActor->knobDoor.dyna.actor.world.rot.z; + + if (doorRot != 0) { + func_808354A4(play, doorRot - 1, false); + } + } +} + +// grab/hold an actor (?) +void func_8084E25C(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + func_808313F0(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + Actor* interactRangeActor = this->interactRangeActor; + + if (!func_808313A8(play, this, interactRangeActor)) { + this->actor.child = interactRangeActor; + this->heldActor = interactRangeActor; + interactRangeActor->parent = &this->actor; + interactRangeActor->bgCheckFlags &= + ~(BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_GROUND_LEAVE | BGCHECKFLAG_WALL | + BGCHECKFLAG_CEILING | BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH | BGCHECKFLAG_GROUND_STRICT); + this->leftHandWorld.rot.y = interactRangeActor->shape.rot.y - this->actor.shape.rot.y; + } + } else { + Math_ScaledStepToS(&this->leftHandWorld.rot.y, 0, 0xFA0); + } +} + +// grab/hold an actor (?) +void func_8084E334(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_silver_wait); + this->unk_AE8 = 1; + } else if (this->unk_AE8 == 0) { + if (PlayerAnimation_OnFrame(&this->skelAnime, 27.0f)) { + Actor* interactRangeActor = this->interactRangeActor; + + this->heldActor = interactRangeActor; + this->actor.child = interactRangeActor; + interactRangeActor->parent = &this->actor; + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 25.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_L); + } + } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_B | BTN_A)) { + Player_SetAction(play, this, func_8084E434, 1); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_silver_throw); + } +} + +// throw held actor (?) +void func_8084E434(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) { + Actor* heldActor = this->heldActor; + + heldActor->world.rot.y = this->actor.shape.rot.y; + heldActor->speed = 10.0f; + heldActor->velocity.y = 20.0f; + func_808309CC(play, this); + Player_PlaySfx(this, NA_SE_PL_THROW); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } +} + +void func_8084E4E4(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_nocarry_free_wait); + this->unk_AE8 = 15; + } else if (this->unk_AE8 != 0) { + this->unk_AE8--; + if (this->unk_AE8 == 0) { + func_80836A98(this, &gPlayerAnim_link_normal_nocarry_free_end, play); + this->stateFlags1 &= ~PLAYER_STATE1_800; + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } + } +} + +// Player_Action_PutDownObject? +void func_8084E58C(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + Actor* heldActor = this->heldActor; + + if (!func_808313A8(play, this, heldActor)) { + heldActor->velocity.y = 0.0f; + heldActor->speed = 0.0f; + func_808309CC(play, this); + if (heldActor->id == ACTOR_EN_BOM_CHU) { + func_80831814(this, play, PLAYER_UNKAA5_0); + } + } + } +} + +// Player_Action_Throwing +void func_8084E65C(Player* this, PlayState* play) { + f32 sp34; + s16 yaw; + + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime) || + ((this->skelAnime.curFrame >= 8.0f) && func_80832F78(this, &sp34, &yaw, 0.018f, play))) { + func_80836988(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 3.0f)) { + func_808409A8(play, this, this->linearVelocity + 8.0f, 12.0f); + } +} + +void func_8084E724(Player* this, PlayState* play) { + u8 temp_v1; + u32 new_var; + + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_808475B4(this); + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); + } else { + func_80832F24(this); + } + + if (this->unk_AA5 == PLAYER_UNKAA5_3) { + if (func_800B7118(this) || func_8082ECCC(this)) { + func_8083216C(this, play); + } + } + + temp_v1 = this->unk_AA5; + new_var = temp_v1; + + if (((temp_v1 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || + ((temp_v1 != PLAYER_UNKAA5_2) && + (((((((((this->csMode != PLAYER_CSMODE_0) || (new_var == 0)) || (temp_v1 >= PLAYER_UNKAA5_5)) || + (func_8082FB68(this) != 0)) || + (this->targetedActor != NULL)) || + (func_8083868C(play, this) == 0)) || + ((this->unk_AA5 == PLAYER_UNKAA5_3) && + (((((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B)) || + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_R | BTN_A)) || + (func_80123434(this) != 0)) || + (!func_800B7128(this) && (func_8082EF20(this) == 0))))) || + ((this->unk_AA5 == PLAYER_UNKAA5_1) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) || + func_808391D8(this, play)))) { + func_80839ED0(this, play); + play_sound(NA_SE_SY_CAMERA_ZOOM_UP); + } else if ((DECR(this->unk_AE8) == 0) || (this->unk_AA5 != PLAYER_UNKAA5_3)) { + if (func_801240DC(this)) { + this->unk_AA6 |= 0x43; + } else { + this->actor.shape.rot.y = func_80847190(play, this, 0); + } + } + + this->currentYaw = this->actor.shape.rot.y; +} + +void func_8084E980(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8083249C(this); + func_8083216C(this, play); + if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_4)) { + this->stateFlags2 &= ~PLAYER_STATE2_2000; + } + + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + CutsceneManager_Stop(CS_ID_GLOBAL_TALK); + if (this->stateFlags1 & PLAYER_STATE1_800000) { + s32 sp44 = this->unk_AE8; + + func_80837BD0(play, this); + this->unk_AE8 = sp44; + } else if (!func_80847994(play, this) && !func_80847880(play, this) && !func_808387A0(play, this) && + ((this->talkActor != this->interactRangeActor) || !func_8083D23C(this, play))) { + if (func_801242B4(this)) { + func_808353DC(play, this); + } else { + func_8085B384(this, play); + } + } + + this->unk_B5E = 0xA; + return; + } + + if (this->stateFlags1 & PLAYER_STATE1_800000) { + func_8084FE7C(this, play); + } else if (func_801242B4(this)) { + func_808508C8(this, play); + if (this->actor.depthInWater > 100.0f) { + this->actor.velocity.y = 0.0f; + this->actor.gravity = 0.0f; + } + } else if (!func_80123420(this) && PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->skelAnime.moveFlags != 0) { + func_8082E794(this); + if ((this->talkActor->category == ACTORCAT_NPC) && (this->heldItemAction != PLAYER_IA_FISHING_ROD)) { + func_8082DB90(play, this, &gPlayerAnim_link_normal_talk_free); + } else { + Player_AnimationPlayLoop(play, this, func_8082ED20(this)); + } + } else { + func_8082DB60(play, this, &gPlayerAnim_link_normal_talk_free_wait); + } + } + + if (this->targetedActor != NULL) { + this->currentYaw = func_8083C62C(this, false); + this->actor.shape.rot.y = this->currentYaw; + if (this->unk_AE7 != 0) { + if (!(this->stateFlags1 & PLAYER_STATE1_800)) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + this->unk_AE7--; + if (this->unk_AE7 != 0) { + PlayerAnimation_Change(play, &this->unk_284, &gPlayerAnim_link_normal_talk_free, 1.0f, 0.0f, + Animation_GetLastFrame(&gPlayerAnim_link_normal_talk_free), + ANIMMODE_ONCE, -6.0f); + } + } + } + AnimationContext_SetCopyFalse(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable, D_8085B9F0); + } else if (!(this->stateFlags1 & PLAYER_STATE1_800) && + (this->skelAnime.animation == &gPlayerAnim_link_normal_talk_free_wait)) { + s32 temp_v0 = this->actor.focus.rot.y - this->actor.shape.rot.y; + + if (ABS_ALT(temp_v0) > 0xFA0) { + PlayerAnimation_Change( + play, &this->unk_284, D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType], 0.4f, 0.0f, + Animation_GetLastFrame(D_8085BE84[PLAYER_ANIMGROUP_25][this->modelAnimType]), ANIMMODE_ONCE, -6.0f); + this->unk_AE7 = 2; + } + } + } +} + +void func_8084ED9C(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s32 temp_v0; + + this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); + func_8083DEE4(play, this); + + if (PlayerAnimation_Update(play, &this->skelAnime) && !func_8083E14C(play, this)) { + func_80832F78(this, &sp34, &sp32, 0.0f, play); + temp_v0 = func_8083E758(this, &sp34, &sp32); + if (temp_v0 > 0) { + func_8083E234(this, play); + } else if (temp_v0 < 0) { + func_8083E28C(this, play); + } + } +} + +AnimSfxEntry D_8085D650[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 3, NA_SE_PL_SLIP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 21, NA_SE_PL_SLIP, STOP), +}; + +void func_8084EE50(Player* this, PlayState* play) { + this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); + + if (func_8082E67C(play, this, &gPlayerAnim_link_normal_pushing)) { + this->unk_AE8 = 1; + } else if ((this->unk_AE8 == 0) && PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); + } + + Player_PlayAnimSfx(this, D_8085D650); + func_8083DEE4(play, this); + + if (!func_8083E14C(play, this)) { + f32 sp34; + s16 sp32; + s32 temp_v0; + + func_80832F78(this, &sp34, &sp32, 0.0f, play); + temp_v0 = func_8083E758(this, &sp34, &sp32); + if (temp_v0 < 0) { + func_8083E28C(this, play); + } else if (temp_v0 == 0) { + func_8083DF38(this, &gPlayerAnim_link_normal_push_end, play); + } else { + this->stateFlags2 |= PLAYER_STATE2_10; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_10) { + func_808479F4(play, this, 2.0f); + this->linearVelocity = 2.0f; + } +} + +AnimSfxEntry D_8085D658[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 4, NA_SE_PL_SLIP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 24, NA_SE_PL_SLIP, STOP), +}; + +Vec3f D_8085D660 = { 0.0f, 268 * 0.1f, -60.0f }; + +void func_8084EF9C(Player* this, PlayState* play) { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_35][this->modelAnimType]; + + this->stateFlags2 |= (PLAYER_STATE2_1 | PLAYER_STATE2_40 | PLAYER_STATE2_100); + + if (func_8082E67C(play, this, anim)) { + this->unk_AE8 = 1; + } else if (this->unk_AE8 == 0) { + if (PlayerAnimation_OnFrame(&this->skelAnime, 11.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_PUSH); + } + + //! FAKE + if (1) {} + } else { + Player_PlayAnimSfx(this, D_8085D658); + } + + func_8083DEE4(play, this); + if (!func_8083E14C(play, this)) { + f32 sp78; + s16 sp76; + s32 temp_v0; + + func_80832F78(this, &sp78, &sp76, 0.0f, play); + + temp_v0 = func_8083E758(this, &sp78, &sp76); + if (temp_v0 > 0) { + func_8083E234(this, play); + } else if (temp_v0 == 0) { + func_8083DF38(this, D_8085BE84[PLAYER_ANIMGROUP_36][this->modelAnimType], play); + } else { + this->stateFlags2 |= PLAYER_STATE2_10; + } + } + + if (this->stateFlags2 & PLAYER_STATE2_10) { + Vec3f sp64; + f32 yIntersect = func_80835D2C(play, this, &D_8085D660, &sp64) - this->actor.world.pos.y; + CollisionPoly* poly; + s32 bgId; + Vec3f sp4C; + Vec3f sp40; + + if (fabsf(yIntersect) < 268 * 0.1f) { + sp64.y -= 7.0f; + sp4C.x = this->actor.world.pos.x; + sp4C.z = this->actor.world.pos.z; + sp4C.y = sp64.y; + if (!BgCheck_EntityLineTest2(&play->colCtx, &sp4C, &sp64, &sp40, &poly, 1, 0, 0, 1, &bgId, &this->actor)) { + func_808479F4(play, this, -2.0f); + return; + } + } + this->stateFlags2 &= ~PLAYER_STATE2_10; + } +} + +void func_8084F1B8(Player* this, PlayState* play) { + f32 sp3C; + s16 sp3A; + + this->stateFlags2 |= PLAYER_STATE2_40; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, + (this->unk_AE7 > 0) ? &gPlayerAnim_link_normal_fall_wait + : D_8085BE84[PLAYER_ANIMGROUP_39][this->modelAnimType]); + } else if (this->unk_AE7 == 0) { + f32 frame; + + if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { + frame = 11.0f; + } else { + frame = 1.0f; + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, frame)) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_WALK_GROUND); + if (this->skelAnime.animation == &gPlayerAnim_link_normal_fall) { + this->unk_AE7 = 1; + } else { + this->unk_AE7 = -1; + } + } + } + + Math_ScaledStepToS(&this->actor.shape.rot.y, this->currentYaw, 0x800); + if (this->unk_AE7 != 0) { + func_80832F78(this, &sp3C, &sp3A, 0.0f, play); + if (this->unk_ADF[this->unk_ADE] >= 0) { + func_808381A0(this, + (this->unk_AE7 > 0) ? D_8085BE84[PLAYER_ANIMGROUP_37][this->modelAnimType] + : D_8085BE84[PLAYER_ANIMGROUP_40][this->modelAnimType], + play); + } else if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (this->actor.shape.feetFloorFlags != 0)) { + func_80833A64(this); + + if (this->unk_AE7 < 0) { + this->linearVelocity = -0.8f; + } else { + this->linearVelocity = 0.8f; + } + + func_80833AA0(this, play); + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000); + this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; + } + } +} + +void func_8084F3DC(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->currentYaw = this->skelAnime.jointTable[PLAYER_LIMB_WAIST - 1].y + this->actor.shape.rot.y; + func_8082E820(this, 1); + this->actor.shape.rot.y = this->currentYaw; + func_80839E74(this, play); + this->stateFlags1 &= ~(PLAYER_STATE1_4 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, this->skelAnime.endFrame - 6.0f)) { + Player_AnimSfx_PlayFloorLand(this); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, this->skelAnime.endFrame - 34.0f)) { + Player_PlaySfx(this, NA_SE_PL_CLIMB_CLIFF); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_CLIMB_END); + func_8084C124(play, this); + } +} + +void func_8084F4E8(Player* this, PlayState* play) { + s32 yStick = sPlayerControlInput->rel.stick_y; + s32 xStick = sPlayerControlInput->rel.stick_x; + f32 var_fv0; + f32 var_fv1; + Vec3f sp7C; + s32 sp78; + Vec3f sp6C; + Vec3f sp60; + DynaPolyActor* dyna; + PlayerAnimationHeader* anim1; + PlayerAnimationHeader* anim2; + + this->fallStartHeight = this->actor.world.pos.y; + + this->stateFlags2 |= PLAYER_STATE2_40; + + if ((this->unk_AE7 != 0) && (ABS_ALT(yStick) < ABS_ALT(xStick))) { + var_fv0 = ABS_ALT(xStick) * 0.0325f; + yStick = 0; + } else { + var_fv0 = ABS_ALT(yStick) * 0.05f; + xStick = 0; + } + + if (var_fv0 < 1.0f) { + var_fv0 = 1.0f; + } else if (var_fv0 > 3.35f) { + var_fv0 = 3.35f; + } + + if (this->skelAnime.playSpeed >= 0.0f) { + var_fv1 = 1.0f; + } else { + var_fv1 = -1.0f; + } + + this->skelAnime.playSpeed = var_fv1 * var_fv0; + + if (this->unk_AE8 >= 0) { + if ((this->actor.wallPoly != NULL) && (this->actor.wallBgId != BGCHECK_SCENE)) { + dyna = DynaPoly_GetActor(&play->colCtx, this->actor.wallBgId); + + if (dyna != NULL) { + Math_Vec3f_Diff(&dyna->actor.world.pos, &dyna->actor.prevPos, &sp7C); + Math_Vec3f_Sum(&this->actor.world.pos, &sp7C, &this->actor.world.pos); + } + } + + Actor_UpdateBgCheckInfo(play, &this->actor, 268 * 0.1f, 6.0f, this->ageProperties->unk_00 + 15.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); + func_8083DD1C(play, this, 268 * 0.1f, this->ageProperties->unk_3C, 50.0f, -20.0f); + } + + func_80831944(play, this); + + if ((this->unk_AE8 < 0) || !func_8083E354(this, play)) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 < 0) { + this->unk_AE8 = ABS_ALT(this->unk_AE8) & 1; + } else if (yStick != 0) { + f32 yIntersect; + + sp78 = this->unk_AE7 + this->unk_AE8; + + if (yStick > 0) { + sp6C.x = 0.0f; + sp6C.y = this->ageProperties->unk_40; + sp6C.z = this->ageProperties->unk_3C + 10.0f; + + yIntersect = func_80835D2C(play, this, &sp6C, &sp60); + + if (this->actor.world.pos.y < yIntersect) { + if (this->unk_AE7 != 0) { + this->actor.world.pos.y = yIntersect; + this->stateFlags1 &= ~PLAYER_STATE1_200000; + func_80837CEC(play, this, this->actor.wallPoly, this->ageProperties->unk_3C, + &gPlayerAnim_link_normal_jump_climb_up_free); + this->currentYaw += 0x8000; + this->actor.shape.rot.y = this->currentYaw; + func_808381A0(this, &gPlayerAnim_link_normal_jump_climb_up_free, play); + this->stateFlags1 |= PLAYER_STATE1_4000; + } else { + func_8083DCC4(this, this->ageProperties->unk_D4[this->unk_AE8], play); + } + } else { + this->skelAnime.prevTransl = this->ageProperties->unk_4A[sp78]; + Player_AnimationPlayOnce(play, this, this->ageProperties->unk_B4[sp78]); + } + } else if ((this->actor.world.pos.y - this->actor.floorHeight) < 15.0f) { + if (this->unk_AE7 != 0) { + func_8083E2F4(this, play); + } else { + if (this->unk_AE8 != 0) { + this->skelAnime.prevTransl = this->ageProperties->unk_44; + } + + func_8083DCC4(this, this->ageProperties->unk_CC[this->unk_AE8], play); + this->unk_AE8 = 1; + } + } else { + sp78 ^= 1; + this->skelAnime.prevTransl = this->ageProperties->unk_62[sp78]; + anim1 = this->ageProperties->unk_B4[sp78]; + PlayerAnimation_Change(play, &this->skelAnime, anim1, -1.0f, Animation_GetLastFrame(anim1), 0.0f, 2, + 0.0f); + } + + this->unk_AE8 ^= 1; + } else if ((this->unk_AE7 != 0) && (xStick != 0)) { + anim2 = this->ageProperties->unk_C4[this->unk_AE8]; + + if (xStick > 0) { + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8]; + Player_AnimationPlayOnce(play, this, anim2); + } else { + this->skelAnime.prevTransl = this->ageProperties->unk_7A[this->unk_AE8 + 2]; + PlayerAnimation_Change(play, &this->skelAnime, anim2, -1.0f, Animation_GetLastFrame(anim2), 0.0f, 2, + 0.0f); + } + } else { + this->stateFlags2 |= PLAYER_STATE2_1000; + } + + return; + } + } + + if (this->unk_AE8 < 0) { + if (((this->unk_AE8 == -2) && + (PlayerAnimation_OnFrame(&this->skelAnime, 14.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 29.0f))) || + ((this->unk_AE8 == -4) && + (PlayerAnimation_OnFrame(&this->skelAnime, 22.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 35.0f) || + PlayerAnimation_OnFrame(&this->skelAnime, 49.0f) || PlayerAnimation_OnFrame(&this->skelAnime, 55.0f)))) { + func_80847A50(this); + } + } else if (PlayerAnimation_OnFrame(&this->skelAnime, (this->skelAnime.playSpeed > 0.0f) ? 20.0f : 0.0f)) { + func_80847A50(this); + } +} + +f32 D_8085D66C[] = { 11.0f, 21.0f }; +f32 D_8085D674[] = { 40.0f, 50.0f }; + +AnimSfxEntry D_8085D67C[] = { + ANIMSFX(ANIMSFX_TYPE_SURFACE, 10, NA_SE_PL_WALK_LADDER, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_SURFACE, 20, NA_SE_PL_WALK_LADDER, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_SURFACE, 30, NA_SE_PL_WALK_LADDER, STOP), +}; + +void func_8084FC0C(Player* this, PlayState* play) { + s32 temp_v0; + + this->stateFlags2 |= PLAYER_STATE2_40; + + temp_v0 = func_808331FC(play, this, &this->skelAnime, 4.0f); + if (temp_v0 == 0) { + this->stateFlags1 &= ~PLAYER_STATE1_200000; + } else if ((temp_v0 > 0) || PlayerAnimation_Update(play, &this->skelAnime)) { + func_80839E74(this, play); + this->stateFlags1 &= ~PLAYER_STATE1_200000; + } else { + f32* var_v1 = D_8085D66C; + + if (this->unk_AE8 != 0) { + Player_PlayAnimSfx(this, D_8085D67C); + var_v1 = D_8085D674; + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, var_v1[0]) || + PlayerAnimation_OnFrame(&this->skelAnime, var_v1[1])) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + 20.0f; + pos.z = this->actor.world.pos.z; + if (BgCheck_EntityRaycastFloor5(&play->colCtx, &poly, &bgId, &this->actor, &pos) != 0.0f) { + this->floorSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, poly, bgId); + Player_AnimSfx_PlayFloorLand(this); + } + } + } +} + +void func_8084FD7C(PlayState* play, Player* this, Actor* actor) { + s16 var_a3; + + if (this->unk_B86[0] != 0) { + this->unk_B86[0]--; + return; + } + + this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y; + + var_a3 = ABS_ALT(this->upperLimbRot.y) - 0x4000; + if (var_a3 > 0) { + var_a3 = CLAMP_MAX(var_a3, 0x15E); + actor->shape.rot.y += var_a3 * ((this->upperLimbRot.y >= 0) ? 1 : -1); + actor->world.rot.y = actor->shape.rot.y; + } + + this->upperLimbRot.y += 0x2710; + this->unk_AA8 = -0x1388; +} + +s32 func_8084FE48(Player* this) { + return this->targetedActor == NULL && !func_8082FC24(this); +} + +PlayerAnimationHeader* D_8085D688[] = { + &gPlayerAnim_link_uma_anim_stop, &gPlayerAnim_link_uma_anim_stand, &gPlayerAnim_link_uma_anim_walk, + &gPlayerAnim_link_uma_anim_slowrun, &gPlayerAnim_link_uma_anim_fastrun, &gPlayerAnim_link_uma_anim_jump100, + &gPlayerAnim_link_uma_anim_jump200, +}; + +PlayerAnimationHeader* D_8085D6A4[] = { + NULL, + NULL, + &gPlayerAnim_link_uma_anim_walk_muti, + &gPlayerAnim_link_uma_anim_walk_muti, + &gPlayerAnim_link_uma_anim_walk_muti, + &gPlayerAnim_link_uma_anim_slowrun_muti, + &gPlayerAnim_link_uma_anim_fastrun_muti, + &gPlayerAnim_link_uma_anim_fastrun_muti, + &gPlayerAnim_link_uma_anim_fastrun_muti, + NULL, + NULL, +}; + +PlayerAnimationHeader* D_8085D6D0[] = { + &gPlayerAnim_link_uma_wait_3, + &gPlayerAnim_link_uma_wait_1, + &gPlayerAnim_link_uma_wait_2, +}; + +u8 D_8085D6DC[][2] = { + { 32, 58 }, + { 25, 42 }, +}; + +Vec3s D_8085D6E0 = { -0x45, 0x1BEA, -0x10A }; + +AnimSfxEntry D_8085D6E8[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 48, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 58, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 68, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 92, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 110, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 126, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 132, NA_SE_PL_CALM_PAT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 136, NA_SE_PL_CALM_PAT, STOP), +}; + +void func_8084FE7C(Player* this, PlayState* play) { + EnHorse* rideActor = (EnHorse*)this->rideActor; + + this->stateFlags2 |= PLAYER_STATE2_40; + + func_80847E2C(this, 1.0f, 10.0f); + if (this->unk_AE8 == 0) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->skelAnime.animation = &gPlayerAnim_link_uma_wait_1; + this->unk_AE8 = 0x63; + } else { + s32 var_v0 = (this->mountSide < 0) ? 0 : 1; + + if (PlayerAnimation_OnFrame(&this->skelAnime, D_8085D6DC[var_v0][0])) { + Actor_SetCameraHorseSetting(play, this); + Player_PlaySfx(this, NA_SE_PL_CLIMB_CLIFF); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, D_8085D6DC[var_v0][1])) { + Player_PlaySfx(this, NA_SE_PL_SIT_ON_HORSE); + } + } + } else { + if (rideActor->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80841A50(play, this); + } + + Actor_SetCameraHorseSetting(play, this); + + this->skelAnime.prevTransl = D_8085D6E0; + + if ((this->unk_AE8 < 0) || ((rideActor->animIndex != (this->unk_AE8 & 0xFFFF)) && + ((rideActor->animIndex >= ENHORSE_ANIM_STOPPING) || (this->unk_AE8 >= 2)))) { + s32 animIndex = rideActor->animIndex; + + if (animIndex < ENHORSE_ANIM_STOPPING) { + f32 temp_fv0 = Rand_ZeroOne(); + s32 index = 0; + + animIndex = ENHORSE_ANIM_WHINNY; + if (temp_fv0 < 0.1f) { + index = 2; + } else if (temp_fv0 < 0.2f) { + index = 1; + } + + Player_AnimationPlayOnce(play, this, D_8085D6D0[index]); + } else { + this->skelAnime.animation = D_8085D688[animIndex - 2]; + if (this->unk_AE8 >= 0) { + Animation_SetMorph(play, &this->skelAnime, 8.0f); + } + + if (animIndex < ENHORSE_ANIM_WALK) { + func_808309CC(play, this); + this->unk_AE7 = 0; + } + } + + this->unk_AE8 = animIndex; + } + + if (this->unk_AE8 == 1) { + if (D_80862B04 || func_8082DAFC(play)) { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_uma_wait_3); + } else if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->unk_AE8 = 0x63; + } else if (this->skelAnime.animation == &gPlayerAnim_link_uma_wait_1) { + Player_PlayAnimSfx(this, D_8085D6E8); + } + } else { + this->skelAnime.curFrame = rideActor->curFrame; + PlayerAnimation_AnimateFrame(play, &this->skelAnime); + } + + AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.morphTable, + this->skelAnime.jointTable); + + if ((play->csCtx.state != CS_STATE_IDLE) || (this->csMode != PLAYER_CSMODE_0)) { + this->unk_AA5 = PLAYER_UNKAA5_0; + this->unk_AE7 = 0; + } else if ((this->unk_AE8 < 2) || (this->unk_AE8 >= 4)) { + D_80862B04 = func_8083216C(this, play); + if (D_80862B04) { + this->unk_AE7 = 0; + } + } + + this->actor.world.pos.x = rideActor->actor.world.pos.x + rideActor->riderPos.x; + this->actor.world.pos.y = rideActor->actor.world.pos.y + rideActor->riderPos.y - 27.0f; + this->actor.world.pos.z = rideActor->actor.world.pos.z + rideActor->riderPos.z; + + this->currentYaw = this->actor.shape.rot.y = rideActor->actor.shape.rot.y; + + if (!D_80862B04) { + if (this->unk_AE7 != 0) { + if (PlayerAnimation_Update(play, &this->unk_284)) { + rideActor->stateFlags &= ~ENHORSE_FLAG_8; + this->unk_AE7 = 0; + } + + if (this->unk_284.animation == &gPlayerAnim_link_uma_stop_muti) { + if (PlayerAnimation_OnFrame(&this->unk_284, 23.0f)) { + Player_PlaySfx(this, NA_SE_IT_LASH); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); + } + + AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable); + } else { + if (PlayerAnimation_OnFrame(&this->unk_284, 10.0f)) { + Player_PlaySfx(this, NA_SE_IT_LASH); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_LASH); + } + + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->unk_284.jointTable, D_8085B9F0); + } + } else if (!CHECK_FLAG_ALL(this->actor.flags, 0x100)) { + PlayerAnimationHeader* anim = NULL; + + if (EN_HORSE_CHECK_3(rideActor)) { + anim = &gPlayerAnim_link_uma_stop_muti; + } else if (EN_HORSE_CHECK_2(rideActor)) { + if ((this->unk_AE8 >= 2) && (this->unk_AE8 != 0x63)) { + anim = D_8085D6A4[this->unk_AE8]; + } + } + + if (anim != NULL) { + PlayerAnimation_PlayOnce(play, &this->unk_284, anim); + this->unk_AE7 = 1; + } + } + } + + if (this->stateFlags1 & PLAYER_STATE1_100000) { + if (CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_A) || !func_8084FE48(this)) { + this->unk_AA5 = PLAYER_UNKAA5_0; + this->stateFlags1 &= ~PLAYER_STATE1_100000; + } else { + func_8084FD7C(play, this, &rideActor->actor); + } + } else if ((this->csMode != PLAYER_CSMODE_0) || + (!func_8082DAFC(play) && ((rideActor->actor.speed != 0.0f) || !func_808391D8(this, play)) && + !func_80847BF0(this, play) && !func_80838A90(this, play))) { + if (this->targetedActor != NULL) { + if (func_800B7128(this)) { + this->upperLimbRot.y = func_8083C62C(this, true) - this->actor.shape.rot.y; + this->upperLimbRot.y = CLAMP(this->upperLimbRot.y, -0x4AAA, 0x4AAA); + this->actor.focus.rot.y = this->actor.shape.rot.y + this->upperLimbRot.y; + this->upperLimbRot.y += 0xFA0; + this->unk_AA6 |= 0x80; + } else { + func_8083C62C(this, false); + } + + this->unk_AA8 = 0; + } else if (func_8084FE48(this)) { + if (func_800B7128(this)) { + func_80831010(this, play); + } + + this->unk_B86[0] = 0xC; + } else if (func_800B7128(this)) { + func_8084FD7C(play, this, &rideActor->actor); + } + } + } + + if (this->csMode == PLAYER_CSMODE_END) { + this->csMode = PLAYER_CSMODE_0; + } +} + +AnimSfxEntry D_8085D708[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 0, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 10, NA_SE_PL_GET_OFF_HORSE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 25, NA_SE_PL_SLIPDOWN, STOP), +}; + +void func_808505D0(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + func_80847E2C(this, 1.0f, 10.0f); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Actor* rideActor = this->rideActor; + + Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0); + func_80839E74(this, play); + + this->stateFlags1 &= ~PLAYER_STATE1_800000; + this->actor.parent = NULL; + D_801BDA9C = false; + + if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) || (DREG(1) != 0)) { + gSaveContext.save.saveInfo.horseData.sceneId = play->sceneId; + gSaveContext.save.saveInfo.horseData.pos.x = rideActor->world.pos.x; + gSaveContext.save.saveInfo.horseData.pos.y = rideActor->world.pos.y; + gSaveContext.save.saveInfo.horseData.pos.z = rideActor->world.pos.z; + gSaveContext.save.saveInfo.horseData.yaw = rideActor->shape.rot.y; + } + } else { + if (this->mountSide < 0) { + D_8085D708[0].flags = ANIMSFX_FLAGS(ANIMSFX_TYPE_FLOOR_LAND, 40, CONTINUE); + } else { + D_8085D708[0].flags = ANIMSFX_FLAGS(ANIMSFX_TYPE_FLOOR_LAND, 29, CONTINUE); + } + + Player_PlayAnimSfx(this, D_8085D708); + } +} + +s32 func_80850734(PlayState* play, Player* this) { + if ((this->transformation == PLAYER_FORM_ZORA) && (this->windSpeed == 0.0f) && + (this->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER) && CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { + func_8083B850(play, this); + this->stateFlags2 |= PLAYER_STATE2_400; + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_waterroll, 2.0f / 3.0f, 4.0f, + Animation_GetLastFrame(&gPlayerAnim_pz_waterroll), ANIMMODE_ONCE, -6.0f); + this->unk_AE8 = 5; + this->unk_B86[0] = 0; + this->unk_B48 = this->linearVelocity; + this->actor.velocity.y = 0.0f; + Player_PlaySfx(this, NA_SE_PL_ZORA_SWIM_DASH); + return true; + } + return false; +} + +s32 func_80850854(PlayState* play, Player* this) { + if ((this->transformation == PLAYER_FORM_DEKU) && (this->remainingHopsCounter != 0) && + (gSaveContext.save.saveInfo.playerData.health != 0) && (D_80862AFC != 0.0f)) { + func_808373F8(play, this, 0); + return true; + } + return false; +} + +void func_808508C8(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8082E67C(play, this, &gPlayerAnim_link_swimer_swim_wait); + func_808475B4(this); + + if (this->unk_AE8 != 0) { + this->unk_AE8--; + } + + func_8082F164(this, BTN_R); + + if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + this->unk_AE8 = 0; + } + + if (!func_8082DAFC(play) && !func_80833058(play, this, D_8085D048, 1) && + !func_8083B3B4(play, this, sPlayerControlInput) && ((this->unk_AE8 != 0) || !func_80850734(play, this))) { + sp34 = 0.0f; + sp32 = this->actor.shape.rot.y; + + if (this->unk_AA5 > PLAYER_UNKAA5_2) { + this->unk_AA5 = PLAYER_UNKAA5_0; + } + + if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80836A98(this, D_8085BE84[PLAYER_ANIMGROUP_14][this->modelAnimType], play); + Player_AnimSfx_PlayFloorLand(this); + } + } else if ((func_80850854(play, this) == 0) && + (func_80832F78(this, &sp34, &sp32, 0.0f, play), (sp34 != 0.0f))) { + if ((ABS_ALT(BINANG_SUB(this->actor.shape.rot.y, sp32)) > 0x6000) && + !Math_StepToF(&this->linearVelocity, 0.0f, 1.0f)) { + return; + } + + if (func_8082FC24(this) || func_80847ED4(this)) { + func_80848048(play, this); + } else { + func_8083B73C(play, this, sp32); + } + } + + func_8084748C(this, &this->linearVelocity, sp34, sp32); + func_80847F1C(this); + } +} + +void func_80850B18(Player* this, PlayState* play) { + if (!func_80838A90(this, play)) { + this->stateFlags2 |= PLAYER_STATE2_20; + func_808477D0(play, this, NULL, this->linearVelocity); + func_808475B4(this); + + if (DECR(this->unk_AE8) == 0) { + func_808353DC(play, this); + } + } +} + +void func_80850BA8(Player* this) { + this->linearVelocity = Math_CosS(this->unk_AAA) * this->unk_B48; + this->actor.velocity.y = -Math_SinS(this->unk_AAA) * this->unk_B48; +} + +void func_80850BF8(Player* this, f32 arg1) { + f32 temp_fv0; + s16 temp_ft0; + + Math_AsymStepToF(&this->unk_B48, arg1, 1.0f, (fabsf(this->unk_B48) * 0.01f) + 0.4f); + temp_fv0 = Math_CosS(sPlayerControlInput->rel.stick_x * 0x10E); + + temp_ft0 = (((sPlayerControlInput->rel.stick_x >= 0) ? 1 : -1) * (1.0f - temp_fv0) * -1100.0f); + temp_ft0 = CLAMP(temp_ft0, -0x1F40, 0x1F40); + + this->currentYaw += temp_ft0; +} + +void func_80850D20(PlayState* play, Player* this) { + func_8083F8A8(play, this, 12.0f, -1, 1.0f, 160, 20, true); +} + +void func_80850D68(Player* this, PlayState* play) { + f32 sp44; + s16 sp42; + s16 sp40; + s16 sp3E; + s16 sp3C; + s16 sp3A; + + this->stateFlags2 |= PLAYER_STATE2_20; + + func_808475B4(this); + func_8082F164(this, BTN_R); + + if (func_80833058(play, this, D_8085D048, false)) { + return; + } + + if (func_8083B3B4(play, this, sPlayerControlInput)) { + return; + } + + if (func_80840A30(play, this, &this->linearVelocity, 0.0f)) { + return; + } + + sp44 = 0.0f; + + if (this->unk_AE8 != 0) { + if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || + (this->currentBoots != PLAYER_BOOTS_ZORA_LAND)) { + this->unk_B86[0] = 1; + } + + if (PlayerAnimation_Update(play, &this->skelAnime) && (DECR(this->unk_AE8) == 0)) { + if (this->unk_B86[0] != 0) { + this->stateFlags3 &= ~PLAYER_STATE3_8000; + func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait); + } else { + func_8082DB60(play, this, &gPlayerAnim_pz_fishswim); + } + } else { + func_80832F78(this, &sp44, &sp40, 0.0f, play); + Math_ScaledStepToS(&this->currentYaw, sp40, 0x640); + + if (this->skelAnime.curFrame >= 13.0f) { + sp44 = 12.0f; + + if (PlayerAnimation_OnFrame(&this->skelAnime, 13.0f)) { + this->unk_B48 = 16.0f; + } + this->stateFlags3 |= PLAYER_STATE3_8000; + } else { + sp44 = 0.0f; + } + } + + Math_SmoothStepToS(&this->unk_B86[1], sPlayerControlInput->rel.stick_x * 0xC8, 0xA, 0x3E8, 0x64); + Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(40) + 1, IREG(41), IREG(42)); + } else if (this->unk_B86[0] == 0) { + PlayerAnimation_Update(play, &this->skelAnime); + + if ((!func_8082DA90(play) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || + (this->currentBoots != PLAYER_BOOTS_ZORA_LAND) || (this->windSpeed > 9.0f)) { + this->stateFlags3 &= ~PLAYER_STATE3_8000; + func_8082DB90(play, this, &gPlayerAnim_pz_swimtowait); + this->unk_B86[0] = 1; + } else { + sp44 = 9.0f; + func_800B8F98(&this->actor, NA_SE_PL_ZORA_SWIM_LV - SFX_FLAG); + } + + // Y + sp3E = sPlayerControlInput->rel.stick_y * 0xC8; + if (this->unk_B8C != 0) { + this->unk_B8C--; + sp3E = CLAMP_MAX(sp3E, (s16)(this->unk_B6C - 0xFA0)); + } + + if ((this->unk_AAA >= -0x1555) && (this->actor.depthInWater < (this->ageProperties->unk_24 + 10.0f))) { + sp3E = CLAMP_MIN(sp3E, 0x7D0); + } + Math_SmoothStepToS(&this->unk_AAA, sp3E, 4, 0xFA0, 0x190); + + // X + sp42 = sPlayerControlInput->rel.stick_x * 0x64; + if (Math_ScaledStepToS(&this->unk_B8A, sp42, 0x384) && (sp42 == 0)) { + Math_SmoothStepToS(&this->unk_B86[1], 0, 4, 0x5DC, 0x64); + Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(44) + 1, IREG(45), IREG(46)); + } else { + sp3C = this->unk_B86[1]; + sp3A = (this->unk_B8A < 0) ? -0x3A98 : 0x3A98; + this->unk_B86[1] += this->unk_B8A; + Math_SmoothStepToS(&this->unk_B8E, this->unk_B86[1], IREG(47) + 1, IREG(48), IREG(49)); + + if ((ABS_ALT(this->unk_B8A) > 0xFA0) && ((((sp3C + this->unk_B8A) - sp3A) * (sp3C - sp3A)) <= 0)) { + Player_PlaySfx(this, NA_SE_PL_ZORA_SWIM_ROLL); + } + } + + if (D_80862B18 < 20.0f) { + func_80850D20(play, this); + } + } else { + Math_SmoothStepToS(&this->unk_B86[1], 0, 4, 0xFA0, 0x190); + if ((this->skelAnime.curFrame <= 5.0f) || !func_80850734(play, this)) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_808353DC(play, this); + } + } + + Player_ResetCylinder(this); + } + + if ((this->unk_B8C < 8) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + DynaPolyActor* dynaActor; + + if ((this->actor.floorBgId == BGCHECK_SCENE) || + ((dynaActor = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId)) == NULL) || + (dynaActor->actor.id != ACTOR_EN_TWIG)) { + this->unk_AAA += (s16)((-this->unk_B6C - this->unk_AAA) * 2); + this->unk_B8C = 0xF; + } + + func_80850D20(play, this); + Player_PlaySfx(this, NA_SE_PL_BODY_BOUND); + } + + func_80850BF8(this, sp44); + func_80850BA8(this); +} + +void func_808513EC(Player* this, PlayState* play) { + f32 sp34; + s16 sp32; + s16 sp30; + s16 var_v0; + + this->stateFlags2 |= PLAYER_STATE2_20; + func_808475B4(this); + func_8082F164(this, BTN_R); + if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput) && + !func_80850854(play, this)) { + func_808477D0(play, this, sPlayerControlInput, this->linearVelocity); + if (func_8082DA90(play)) { + sp34 = this->linearVelocity; + sp32 = this->actor.shape.rot.y; + } else { + func_80832F78(this, &sp34, &sp32, 0.0f, play); + } + sp30 = this->actor.shape.rot.y - sp32; + if (!func_80850734(play, this)) { + if (func_8082FC24(this) || func_80847ED4(this)) { + func_80848048(play, this); + } else { + if ((sp34 == 0.0f) || (ABS_ALT(sp30) > 0x6000) || + (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER)) { + func_808353DC(play, this); + } + } + func_80847FF8(this, &this->linearVelocity, sp34, sp32); + } + } +} + +void func_80851588(Player* this, PlayState* play) { + f32 sp2C; + s16 sp2A; + + func_808477D0(play, this, sPlayerControlInput, this->linearVelocity); + func_808475B4(this); + func_8082F164(this, BTN_R); + + if (!func_80833058(play, this, D_8085D048, 1) && !func_8083B3B4(play, this, sPlayerControlInput)) { + func_80832F78(this, &sp2C, &sp2A, 0.0f, play); + + if (sp2C == 0.0f) { + func_808353DC(play, this); + } else if (!func_8082FC24(this) && !func_80847ED4(this)) { + func_8083B73C(play, this, sp2A); + } else { + func_80848094(play, this, &sp2C, &sp2A); + } + + func_80847FF8(this, &this->linearVelocity, sp2C, sp2A); + } +} + +void func_808516B4(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + this->actor.gravity = 0.0f; + func_8083216C(this, play); + func_8082F164(this, BTN_R); + + if (func_80838A90(this, play)) { + return; + } + + if (this->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) { + func_808353DC(play, this); + } else if (this->unk_AE7 == 0) { + f32 temp_fv0; + + if (this->unk_AE8 == 0) { + if (PlayerAnimation_Update(play, &this->skelAnime) || + ((this->skelAnime.curFrame >= 22.0f) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A))) { + func_8083B798(play, this); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 20.0f)) { + this->actor.velocity.y = -2.0f; + } + func_80832F24(this); + } else { + func_808477D0(play, this, sPlayerControlInput, this->actor.velocity.y); + this->unk_AAA = 0x3E80; + + if (CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) && !func_8083D23C(this, play) && + !(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < 120.0f)) { + func_808481CC(play, this, -2.0f); + } else { + this->unk_AE7++; + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); + } + } + + temp_fv0 = (this->actor.depthInWater - this->ageProperties->unk_30) * 0.04f; + if (temp_fv0 < this->actor.velocity.y) { + this->actor.velocity.y = temp_fv0; + } + } else if (this->unk_AE7 == 1) { + PlayerAnimation_Update(play, &this->skelAnime); + func_808475B4(this); + if (this->unk_AAA < 0x2710) { + this->unk_AE7++; + this->unk_AE8 = this->actor.depthInWater; + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim); + } + } else if (!func_8083B3B4(play, this, sPlayerControlInput)) { + f32 var_fv1 = (this->unk_AE8 * 0.018f) + 4.0f; + + if (this->stateFlags1 & PLAYER_STATE1_800) { + sPlayerControlInput = NULL; + } + + func_808477D0(play, this, sPlayerControlInput, fabsf(this->actor.velocity.y)); + Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320); + + var_fv1 = CLAMP_MAX(var_fv1, 8.0f); + func_808481CC(play, this, var_fv1); + } +} + +void func_808519FC(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + func_8082F164(this, BTN_R); + if (((this->stateFlags1 & PLAYER_STATE1_400) || (this->skelAnime.curFrame <= 1.0f) || !func_80850734(play, this)) && + PlayerAnimation_Update(play, &this->skelAnime)) { + if (!(this->stateFlags1 & PLAYER_STATE1_400) || func_808482E0(play, this)) { + func_80848250(play, this); + func_808353DC(play, this); + func_8082DC64(play, this); + } + } else { + if ((this->stateFlags1 & PLAYER_STATE1_400) && PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) { + func_8082ECE0(this); + func_8082DC64(play, this); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 5.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK); + } + } + + func_808475B4(this); + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); +} + +void func_80851B58(Player* this, PlayState* play) { + func_808475B4(this); + Math_StepToF(&this->linearVelocity, 0.0f, 0.4f); + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->linearVelocity < 10.0f)) { + func_808353DC(play, this); + } +} + +void func_80851BD4(Player* this, PlayState* play) { + func_808475B4(this); + if (PlayerAnimation_Update(play, &this->skelAnime) && (this == GET_PLAYER(play))) { + func_80840770(play, this); + } + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); +} + +s32 func_80851C40(PlayState* play, Player* this) { + return ((play->sceneId == SCENE_MILK_BAR) && Audio_IsSequencePlaying(NA_BGM_BALLAD_OF_THE_WIND_FISH)) || + (((play->sceneId != SCENE_MILK_BAR) && (this->csMode == PLAYER_CSMODE_68)) || + ((play->msgCtx.msgMode == 0x12) || (play->msgCtx.msgMode == 0x13) || (play->msgCtx.msgMode == 0x14) || + ((play->msgCtx.ocarinaMode != 1) && + ((this->csMode == PLAYER_CSMODE_5) || (play->msgCtx.ocarinaMode == 3) || + play->msgCtx.ocarinaAction == 0x32)))); +} + +// Deku playing the pipes? The loops both overwrite unk_AF0[0].y,z and unk_AF0[1].x,y,z +void func_80851D30(PlayState* play, Player* this) { + f32* var_s0 = &this->unk_AF0[0].y; // TODO: what is going on around here in the struct? + Vec3f sp50; + + if (func_80851C40(play, this)) { + s32 i; + + if (this->skelAnime.mode != ANIMMODE_LOOP) { + func_8082DB60(play, this, D_8085D190[this->transformation]); + } + func_80124618(D_801C03A0, this->skelAnime.curFrame, &sp50); + + for (i = 0; i < 5; i++) { + *var_s0 = sp50.x; + var_s0++; + } + } else if (play->msgCtx.ocarinaMode == 1) { + if (play->msgCtx.unk12048 != 0xFF) { + var_s0[play->msgCtx.unk12048] = 1.2f; + func_8082DB90(play, this, D_8085D190[this->transformation]); + } else { + s32 i; + + for (i = 0; i < 5; i++) { + Math_StepToF(var_s0++, 1.0f, 0.04000001f); + } + } + } +} + +void func_80851EAC(Player* this) { + this->unk_B86[0] = -1; + this->unk_B86[1] = -1; + this->unk_B10[0] = 0.0f; +} + +struct_8085D714 D_8085D714[] = { + { 1, &gPlayerAnim_pg_gakkiplayA }, { 1, &gPlayerAnim_pg_gakkiplayL }, { 1, &gPlayerAnim_pg_gakkiplayD }, + { 0, &gPlayerAnim_pg_gakkiplayU }, { 0, &gPlayerAnim_pg_gakkiplayR }, +}; + +void func_80851EC8(PlayState* play, Player* this) { + struct_8085D714* temp3 = &D_8085D714[play->msgCtx.unk12048]; + f32* temp2 = &this->unk_B10[play->msgCtx.unk12048]; + s16* temp_a3 = &this->unk_B86[temp3->unk_0]; + + temp_a3[0] = play->msgCtx.unk12048; + temp2[0] = 3.0f; +} + +void func_80851F18(PlayState* play, Player* this) { + struct_8085D714* temp; + f32* temp_v0; + s32 i; + + i = this->unk_B86[0]; + if (i >= 0) { + temp = &D_8085D714[i]; + i = 0; + temp_v0 = &this->unk_B10[this->unk_B86[i]]; + + AnimationContext_SetLoadFrame(play, temp->unk_4, *temp_v0, this->skelAnime.limbCount, + this->skelAnime.morphTable); + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + this->skelAnime.morphTable, D_8085BA08); + } + i = this->unk_B86[1]; + if (i >= 0) { + temp = &D_8085D714[i]; + i = 1; + temp_v0 = &this->unk_B10[this->unk_B86[i]]; + + AnimationContext_SetLoadFrame(play, temp->unk_4, *temp_v0, this->skelAnime.limbCount, + ALIGN16((uintptr_t)this->blendTableBuffer)); + AnimationContext_SetCopyTrue(play, this->skelAnime.limbCount, this->skelAnime.jointTable, + ALIGN16((uintptr_t)this->blendTableBuffer), D_8085BA20); + } + + temp_v0 = this->unk_B10; + for (i = 0; i < 5; i++) { + *temp_v0 += 1.0f; + if (*temp_v0 >= 9.0f) { + *temp_v0 = 8.0f; + if (this->unk_B86[0] == i) { + this->unk_B86[0] = -1; + } else if (this->unk_B86[1] == i) { + this->unk_B86[1] = -1; + } + } + temp_v0++; + } +} + +// Goron playing the drums? +void func_808521E0(PlayState* play, Player* this) { + if (func_80851C40(play, this)) { + if (this->skelAnime.animation != &gPlayerAnim_pg_gakkiplay) { + func_8082DB60(play, this, &gPlayerAnim_pg_gakkiplay); + } + + func_80124618(D_801C0490, this->skelAnime.curFrame, &this->unk_AF0[1]); + } else if (play->msgCtx.ocarinaMode == 1) { + if (play->msgCtx.unk12048 != 0xFF) { + func_80851EC8(play, this); + } + + func_80851F18(play, this); + } +} + +// Zora playing the guitar? +void func_80852290(PlayState* play, Player* this) { + if (func_80851C40(play, this)) { + if (this->skelAnime.mode != ANIMMODE_LOOP) { + func_8082DB60(play, this, D_8085D190[this->transformation]); + } + + this->unk_B8A = 8; + } else { + f32 sp3C; + s16 var_a1_3; + s16 sp38; + + if ((play->msgCtx.ocarinaMode == 1) && (play->msgCtx.unk12048 != 0xFF)) { + if ((this->unk_A90 != NULL) && (this->unk_A94 < 0.0f)) { + this->unk_A90->flags |= ACTOR_FLAG_20000000; + this->unk_A94 = 0.0f; + } + + func_8082DB90(play, this, D_8085D190[this->transformation]); + this->unk_B8A = 8; + } + + sPlayerControlInput = play->state.input; + func_800FF3A0(&sp3C, &sp38, sPlayerControlInput); + + if (BINANG_ADD(sp38, 0x4000) < 0) { + sp38 -= 0x8000; + sp3C = -sp3C; + } + + if (sp38 < -0x1F40) { + sp38 = -0x1F40; + } else if (sp38 > 0x2EE0) { + sp38 = 0x2EE0; + } + + var_a1_3 = (sp3C * -100.0f); + var_a1_3 = CLAMP_MAX(var_a1_3, 0xFA0); + Math_SmoothStepToS(&this->upperLimbRot.x, var_a1_3, 4, 0x7D0, 0); + Math_SmoothStepToS(&this->upperLimbRot.y, sp38, 4, 0x7D0, 0); + this->headLimbRot.x = -this->upperLimbRot.x; + this->unk_AA6 |= 0xC8; + + var_a1_3 = ABS_ALT(this->upperLimbRot.x); + if (var_a1_3 < 0x7D0) { + this->actor.shape.face = 0; + } else if (var_a1_3 < 0xFA0) { + this->actor.shape.face = 13; + } else { + this->actor.shape.face = 8; + } + } + + if (DECR(this->unk_B8A) != 0) { + this->unk_B86[0] += (s16)(this->upperLimbRot.x * 2.5f); + this->unk_B86[1] += (s16)(this->upperLimbRot.y * 3.0f); + } else { + this->unk_B86[0] = 0; + this->unk_B86[1] = 0; + } +} + +void func_8085255C(PlayState* play, Player* this) { + if (this->transformation == PLAYER_FORM_DEKU) { + func_80851D30(play, this); + } else if (this->transformation == PLAYER_FORM_GORON) { + func_808521E0(play, this); + } else if (this->transformation == PLAYER_FORM_ZORA) { + func_80852290(play, this); + } +} + +void func_808525C4(PlayState* play, Player* this) { + if (this->unk_AE8++ >= 3) { + if ((this->transformation == PLAYER_FORM_ZORA) || (this->transformation == PLAYER_FORM_DEKU)) { + func_8082E5A8(play, this, D_8085D190[this->transformation]); + } else if (this->transformation == PLAYER_FORM_GORON) { + func_80851EAC(this); + func_8082DB60(play, this, &gPlayerAnim_pg_gakkiwait); + } else { + func_8082DB60(play, this, D_8085D190[this->transformation]); + } + + this->unk_B48 = 1.0f; + } +} + +void func_8085269C(Player* this, PlayState* play) { + if ((this->unk_AA5 != PLAYER_UNKAA5_4) && ((PlayerAnimation_Update(play, &this->skelAnime) && + (this->skelAnime.animation == D_8085D17C[this->transformation])) || + ((this->skelAnime.mode == 0) && (this->unk_AE8 == 0)))) { + func_808525C4(play, this); + if (!(this->actor.flags & ACTOR_FLAG_20000000) || (this->unk_A90->id == ACTOR_EN_ZOT)) { + func_80152434(play, 1); + } + } else if (this->unk_AE8 != 0) { + if (play->msgCtx.ocarinaMode == 4) { + play->interfaceCtx.unk_222 = 0; + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); + this->actor.flags &= ~ACTOR_FLAG_20000000; + + if ((this->talkActor != NULL) && (this->talkActor == this->unk_A90) && (this->unk_A94 >= 0.0f)) { + Player_TalkWithPlayer(play, this->talkActor); + } else if (this->tatlTextId < 0) { + this->talkActor = this->tatlActor; + this->tatlActor->textId = -this->tatlTextId; + Player_TalkWithPlayer(play, this->talkActor); + } else if (!func_80838A90(this, play)) { + func_80836A5C(this, play); + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); + } + } else { + s32 var_v1 = (play->msgCtx.ocarinaMode >= 0x1C) && (play->msgCtx.ocarinaMode < 0x27); + s32 pad[2]; + + if (var_v1 || (play->msgCtx.ocarinaMode == 0x16) || (play->msgCtx.ocarinaMode == 0x1A) || + (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) { + if (play->msgCtx.ocarinaMode == 0x16) { + if (!func_8082DA90(play)) { + if (gSaveContext.save.saveInfo.playerData.deaths == 1) { + play->nextEntrance = ENTRANCE(CUTSCENE, 1); + } else { + play->nextEntrance = ENTRANCE(CUTSCENE, 0); + } + + gSaveContext.nextCutsceneIndex = 0xFFF7; + play->transitionTrigger = TRANS_TRIGGER_START; + } + } else { + Actor* actor; + + play->interfaceCtx.unk_222 = 0; + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); + this->actor.flags &= ~ACTOR_FLAG_20000000; + + actor = Actor_Spawn(&play->actorCtx, play, var_v1 ? ACTOR_EN_TEST7 : ACTOR_EN_TEST6, + this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, + 0, play->msgCtx.ocarinaMode); + if (actor != NULL) { + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + this->csMode = PLAYER_CSMODE_0; + func_8085B28C(play, NULL, PLAYER_CSMODE_19); + this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; + } else { + func_80836A5C(this, play); + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); + } + } + } else if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_ELEGY)) { + play->interfaceCtx.unk_222 = 0; + CutsceneManager_Stop(play->playerCsIds[PLAYER_CS_ID_ITEM_OCARINA]); + + this->actor.flags &= ~ACTOR_FLAG_20000000; + func_80831760(play, this, func_80855A7C, 0); + this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; + } else if (this->unk_AA5 == PLAYER_UNKAA5_4) { + f32 temp_fa0 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x; + f32 temp_fa1 = this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z; + f32 var_fv1; + + var_fv1 = sqrtf(SQ(temp_fa0) + SQ(temp_fa1)); + if (var_fv1 != 0.0f) { + var_fv1 = (var_fv1 - 100.0f) / var_fv1; + var_fv1 = CLAMP_MIN(var_fv1, 0.0f); + } + + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = temp_fa0 * var_fv1; + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = temp_fa1 * var_fv1; + } else { + func_8085255C(play, this); + } + } + } +} + +void func_80852B28(Player* this, PlayState* play) { + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836A98(this, &gPlayerAnim_link_normal_light_bom_end, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 3.0f)) { + if (Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x, + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y, + this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z, 0xFA0, this->actor.shape.rot.y, 0, + ARROW_TYPE_DEKU_NUT) != NULL) { + Inventory_ChangeAmmo(ITEM_NUT, -1); + this->unk_D57 = 4; + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } +} + +AnimSfxEntry D_8085D73C[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 87, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 87, NA_SE_VO_LI_CLIMB_END, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 69, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 123, NA_SE_NONE, STOP), +}; + +AnimSfxEntry D_8085D74C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 13, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 73, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 120, NA_SE_NONE, STOP), +}; + +void func_80852C04(Player* this, PlayState* play) { + func_8083249C(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 != 0) { + if (this->unk_AE8 > 1) { + this->unk_AE8--; + } + + if (func_808482E0(play, this) && (this->unk_AE8 == 1)) { + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); + + if ((this->getItemDrawIdPlusOne == GID_REMAINS_ODOLWA + 1) || + (this->getItemDrawIdPlusOne == GID_REMAINS_GOHT + 1) || + (this->getItemDrawIdPlusOne == GID_REMAINS_GYORG + 1) || + (this->getItemDrawIdPlusOne == GID_REMAINS_TWINMOLD + 1)) { + Player_StopCutscene(this); + func_80848250(play, this); + this->stateFlags1 &= ~PLAYER_STATE1_20000000; + func_8085B28C(play, NULL, PLAYER_CSMODE_93); + } else { + s32 var_a2 = ((this->talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) || + (this->stateFlags3 & PLAYER_STATE3_20); + + if (var_a2 || (gSaveContext.healthAccumulator == 0)) { + Player_StopCutscene(this); + if (var_a2) { + func_80848250(play, this); + this->exchangeItemId = PLAYER_IA_NONE; + if (!func_80847994(play, this)) { + Player_TalkWithPlayer(play, this->talkActor); + } + } else { + func_80848294(play, this); + } + } + } + } + } else { + func_8082E794(this); + + if ((this->getItemId == GI_STRAY_FAIRY) || (this->getItemId == GI_SKULL_TOKEN) || + (this->getItemId == GI_ICE_TRAP)) { + Player_StopCutscene(this); + this->stateFlags1 &= ~(PLAYER_STATE1_400 | PLAYER_STATE1_800); + if (this->getItemId == GI_STRAY_FAIRY) { + func_80839E74(this, play); + } else { + this->actor.colChkInfo.damage = 0; + func_80833B18(play, this, 3, 0.0f, 0.0f, 0, 20); + } + } else { + if (this->skelAnime.animation == &gPlayerAnim_link_normal_box_kick) { + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getB + : &gPlayerAnim_link_demo_get_itemB); + } else { + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA + : &gPlayerAnim_link_demo_get_itemA); + } + + func_8082E920(play, this, + ANIM_FLAG_1 | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | + ANIM_FLAG_80); + Player_StopCutscene(this); + this->csId = play->playerCsIds[PLAYER_CS_ID_ITEM_GET]; + this->unk_AE8 = 2; + } + } + } else if (this->unk_AE8 == 0) { + if (this->transformation == PLAYER_FORM_HUMAN) { + Player_PlayAnimSfx(this, D_8085D73C); + } else if (this->transformation == PLAYER_FORM_DEKU) { + Player_PlayAnimSfx(this, D_8085D74C); + } + } else { + if ((this->skelAnime.animation == &gPlayerAnim_link_demo_get_itemB) || + (this->skelAnime.animation == &gPlayerAnim_pn_getB)) { + Math_ScaledStepToS(&this->actor.shape.rot.y, + BINANG_ADD(Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]), 0x8000), 0xFA0); + } else if ((this->skelAnime.animation == &gPlayerAnim_pn_getA) && + PlayerAnimation_OnFrame(&this->skelAnime, 10.0f)) { + Player_AnimSfx_PlayFloorLand(this); + } + + if (PlayerAnimation_OnFrame(&this->skelAnime, 21.0f)) { + func_8082ECE0(this); + } + } +} + +AnimSfxEntry D_8085D75C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 5, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 15, NA_SE_NONE, STOP), +}; + +void func_80852FD4(Player* this, PlayState* play) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE7 == 0) { + if (DECR(this->unk_AE8) == 0) { + this->unk_AE7 = 1; + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } + } else { + func_80839E74(this, play); + } + } else if ((this->transformation == PLAYER_FORM_FIERCE_DEITY) && + PlayerAnimation_OnFrame(&this->skelAnime, 158.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_SWORD_N); + } else if (this->transformation != PLAYER_FORM_FIERCE_DEITY) { + Player_PlayAnimSfx(this, D_8085D75C); + } else { + func_808484CC(this); + } +} + +Vec3f D_8085D764 = { 0.0f, 24.0f, 19.0f }; +Vec3f D_8085D770 = { 0.0f, 0.0f, 2.0f }; +Vec3f D_8085D77C = { 0.0f, 0.0f, -0.2f }; + +Color_RGBA8 D_8085D788 = { 255, 255, 255, 255 }; +Color_RGBA8 D_8085D78C = { 255, 255, 255, 255 }; + +void func_808530E0(PlayState* play, Player* this) { + Vec3f pos; + Vec3f velocity; + Vec3f accel; + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D764, &pos); + Player_TranslateAndRotateY(this, &gZeroVec3f, &D_8085D770, &velocity); + Player_TranslateAndRotateY(this, &gZeroVec3f, &D_8085D77C, &accel); + func_800B0EB0(play, &pos, &velocity, &accel, &D_8085D788, &D_8085D78C, 40, 10, 10); +} + +u8 D_8085D790[] = { + 1, // PLAYER_IA_BOTTLE_POTION_RED + 1 | 2, // PLAYER_IA_BOTTLE_POTION_BLUE + 2, // PLAYER_IA_BOTTLE_POTION_GREEN + 4, // PLAYER_IA_BOTTLE_MILK + 4, // PLAYER_IA_BOTTLE_MILK_HALF + 1 | 2, // PLAYER_IA_BOTTLE_CHATEAU +}; + +void func_80853194(Player* this, PlayState* play) { + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 == 0) { + if (this->itemAction == PLAYER_IA_BOTTLE_POE) { + s32 health = Rand_S16Offset(-1, 3); + + if (health == 0) { + health = 3; + } + if ((health < 0) && (gSaveContext.save.saveInfo.playerData.health <= 0x10)) { + health = 3; + } + + if (health < 0) { + Health_ChangeBy(play, -0x10); + } else { + gSaveContext.healthAccumulator = health * 0x10; + } + } else { + s32 temp_v1 = D_8085D790[this->itemAction - PLAYER_IA_BOTTLE_POTION_RED]; + + if (temp_v1 & 1) { + gSaveContext.healthAccumulator = 0x140; + } + if (temp_v1 & 2) { + Magic_Add(play, MAGIC_FILL_TO_CAPACITY); + } + if (temp_v1 & 4) { + gSaveContext.healthAccumulator = 0x50; + } + + if (this->itemAction == PLAYER_IA_BOTTLE_CHATEAU) { + SET_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI); + } + + gSaveContext.jinxTimer = 0; + } + + func_8082DB60(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_drink + : &gPlayerAnim_link_bottle_drink_demo_wait); + this->unk_AE8 = 1; + + //! FAKE + dummy_label_235515:; + } else if (this->unk_AE8 < 0) { + this->unk_AE8++; + if (this->unk_AE8 == 0) { + this->unk_AE8 = 3; + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + } else if (this->unk_AE8 == -6) { + func_808530E0(play, this); + } + } else { + Player_StopCutscene(this); + func_80839E74(this, play); + } + } else if (this->unk_AE8 == 1) { + if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { + if (this->transformation == PLAYER_FORM_DEKU) { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pn_drinkend, 2.0f / 3.0f, 0.0f, 5.0f, 2, + -6.0f); + this->unk_AE8 = -7; + } else { + func_8082E4A4(play, this, &gPlayerAnim_link_bottle_drink_demo_end); + this->unk_AE8 = 2; + } + + Player_UpdateBottleHeld(play, this, + (this->itemAction == PLAYER_IA_BOTTLE_MILK) ? ITEM_MILK_HALF : ITEM_BOTTLE, + PLAYER_IA_BOTTLE_EMPTY); + } + + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DRINK - SFX_FLAG); + } else if ((this->unk_AE8 == 2) && PlayerAnimation_OnFrame(&this->skelAnime, 29.0f)) { + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_BREATH_DRINK); + } +} + +struct_8085D798 D_8085D798[] = { + { ACTOR_EN_ELF, 2, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, + { ACTOR_EN_FISH, -1, ITEM_FISH, PLAYER_IA_BOTTLE_FISH, 0x62 }, + { ACTOR_EN_INSECT, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, + { ACTOR_EN_MUSHI2, -1, ITEM_BUG, PLAYER_IA_BOTTLE_BUG, 0x63 }, + { ACTOR_EN_TEST5, 0, ITEM_SPRING_WATER, PLAYER_IA_BOTTLE_SPRING_WATER, 0x67 }, + { ACTOR_EN_TEST5, 1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, + { ACTOR_BG_GORON_OYU, -1, ITEM_HOT_SPRING_WATER, PLAYER_IA_BOTTLE_HOT_SPRING_WATER, 0x68 }, + { ACTOR_EN_ZORAEGG, -1, ITEM_ZORA_EGG, PLAYER_IA_BOTTLE_ZORA_EGG, 0x69 }, + { ACTOR_EN_DNP, -1, ITEM_DEKU_PRINCESS, PLAYER_IA_BOTTLE_DEKU_PRINCESS, 0x5F }, + { ACTOR_EN_OT, -1, ITEM_SEAHORSE, PLAYER_IA_BOTTLE_SEAHORSE, 0x6E }, + { ACTOR_OBJ_KINOKO, -1, ITEM_MUSHROOM, PLAYER_IA_BOTTLE_SEAHORSE, 0x6B }, + { ACTOR_EN_POH, -1, ITEM_POE, PLAYER_IA_BOTTLE_POE, 0x65 }, + { ACTOR_EN_BIGPO, -1, ITEM_BIG_POE, PLAYER_IA_BOTTLE_BIG_POE, 0x66 }, + { ACTOR_EN_ELF, 6, ITEM_FAIRY, PLAYER_IA_BOTTLE_FAIRY, 0x5E }, +}; + +void func_808534C0(Player* this, PlayState* play) { + struct_8085D200* sp24 = &D_8085D200[this->unk_AE8]; + + func_80832F24(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE7 != 0) { + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_SHOW]); + + if (this->unk_AE8 == 0) { + Message_StartTextbox(play, D_8085D798[this->unk_AE7 - 1].textId, &this->actor); + + Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); + this->unk_AE8 = 1; + } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + Actor* talkActor; + + this->unk_AE7 = 0; + Player_StopCutscene(this); + func_800E0238(Play_GetCamera(play, CAM_ID_MAIN)); + + talkActor = this->talkActor; + if ((talkActor != NULL) && (this->exchangeItemId <= PLAYER_IA_MINUS1)) { + Player_TalkWithPlayer(play, talkActor); + } + } + } else { + func_80839E74(this, play); + } + } else { + if (this->unk_AE7 == 0) { + s32 temp_ft5 = this->skelAnime.curFrame - sp24->unk_8; + + if ((temp_ft5 >= 0) && (sp24->unk_9 >= temp_ft5)) { + if ((this->unk_AE8 != 0) && (temp_ft5 == 0)) { + Player_PlaySfx(this, NA_SE_IT_SCOOP_UP_WATER); + } + + if (func_8012364C(play, this, this->heldItemButton) == ITEM_BOTTLE) { + Actor* interactRangeActor = this->interactRangeActor; + + if (interactRangeActor != NULL) { + struct_8085D798* entry = D_8085D798; + s32 i; + + for (i = 0; i < ARRAY_COUNT(D_8085D798); i++) { + if (((interactRangeActor->id == entry->actorId) && + ((entry->actorParams < 0) || (interactRangeActor->params == entry->actorParams)))) { + break; + } + entry++; + } + + if (i < ARRAY_COUNT(D_8085D798)) { + this->unk_AE7 = i + 1; + this->unk_AE8 = 0; + this->stateFlags1 |= PLAYER_STATE1_10000000 | PLAYER_STATE1_20000000; + interactRangeActor->parent = &this->actor; + Player_UpdateBottleHeld(play, this, entry->itemId, entry->itemAction); + func_8082DB90(play, this, sp24->unk_4); + } + } + } + } + } + + if (this->skelAnime.curFrame <= 7.0f) { + this->stateFlags3 |= PLAYER_STATE3_800; + } + } +} + +Vec3f D_8085D7EC = { 0.0f, 0.0f, 5.0f }; + +void func_80853754(Player* this, PlayState* play) { + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_ITEM_BOTTLE]); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_StopCutscene(this); + func_80839E74(this, play); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 37.0f)) { + s32 sp2C = 8; + + Player_PlaySfx(this, NA_SE_EV_BOTTLE_CAP_OPEN); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_AUTO_JUMP); + if (this->itemAction == PLAYER_IA_BOTTLE_FAIRY) { + Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); + Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); + sp2C = 1; + } + + Player_SpawnFairy(play, this, &this->leftHandWorld.pos, &D_8085D7EC, sp2C); + } +} + +void func_80853850(Player* this, PlayState* play) { + static Vec3f D_8085D7F8 = { 10.0f, 268 * 0.1f, 30.0f }; + static s8 D_8085D804[PLAYER_FORM_MAX] = { + 0x2D, // PLAYER_FORM_FIERCE_DEITY + 0x4B, // PLAYER_FORM_GORON + 0x37, // PLAYER_FORM_ZORA + 0x23, // PLAYER_FORM_DEKU + 0x28, // PLAYER_FORM_HUMAN + }; + static struct_8085D80C D_8085D80C[] = { + { ACTOR_EN_FISH, 0 }, // PLAYER_BOTTLE_FISH + { ACTOR_OBJ_AQUA, 0 }, // PLAYER_BOTTLE_SPRING_WATER + { ACTOR_OBJ_AQUA, 1 }, // PLAYER_BOTTLE_HOT_SPRING_WATER + { ACTOR_EN_ZORAEGG, 0x11 }, // PLAYER_BOTTLE_ZORA_EGG + { ACTOR_EN_DNP, 1 }, // PLAYER_BOTTLE_DEKU_PRINCESS + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_GOLD_DUST + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_1C + { ACTOR_EN_OT, 0x8000 }, // PLAYER_BOTTLE_SEAHORSE + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_MUSHROOM + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_HYLIAN_LOACH + { ACTOR_EN_MUSHI2, 0 }, // PLAYER_BOTTLE_BUG + }; + static AnimSfxEntry D_8085D838[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 38, NA_SE_VO_LI_AUTO_JUMP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 40, NA_SE_EV_BOTTLE_CAP_OPEN, STOP), + }; + + CollisionPoly* sp6C; + s32 sp68; + Vec3f sp5C; + f32 temp_fa0; + f32 temp_fv0; + f32 temp_fv1; + struct_8085D80C* sp4C; + + D_8085D7F8.z = D_8085D804[this->transformation]; + if (func_80835D58(play, this, &D_8085D7F8, &sp6C, &sp68, &sp5C)) { + temp_fv1 = this->actor.world.pos.x - sp5C.x; + temp_fa0 = this->actor.world.pos.z - sp5C.z; + temp_fv0 = sqrtf(SQ(temp_fv1) + SQ(temp_fa0)); + + if (temp_fv0 != 0.0f) { + temp_fv0 = 3.0f / temp_fv0; + + this->actor.world.pos.x = this->actor.world.pos.x + (temp_fv1 * temp_fv0); + this->actor.world.pos.z = this->actor.world.pos.z + (temp_fa0 * temp_fv0); + } + } + + func_80832F24(this); + func_8083249C(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_StopCutscene(this); + if (!func_80838A90(this, play)) { + func_80839E74(this, play); + } + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 76.0f)) { + sp4C = &D_8085D80C[GET_BOTTLE_FROM_IA(this->itemAction) - 1]; + + Actor_Spawn(&play->actorCtx, play, sp4C->actorId, + (Math_SinS(this->actor.shape.rot.y) * 5.0f) + this->leftHandWorld.pos.x, this->leftHandWorld.pos.y, + (Math_CosS(this->actor.shape.rot.y) * 5.0f) + this->leftHandWorld.pos.z, 0x4000, + this->actor.shape.rot.y, 0, sp4C->params); + Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); + } else { + Player_PlayAnimSfx(this, D_8085D838); + } +} + +AnimSfxEntry D_8085D840[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_PUT_OUT_ITEM, STOP), +}; + +void func_80853A5C(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + this->stateFlags3 |= PLAYER_STATE3_4000000; + + func_8083249C(this); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->exchangeItemId == PLAYER_IA_NONE) { + Actor* talkActor = this->talkActor; + + Player_StopCutscene(this); + this->getItemDrawIdPlusOne = GID_NONE + 1; + + if ((talkActor->textId != 0) && (talkActor->textId != 0xFFFF)) { + this->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; + } + Player_TalkWithPlayer(play, talkActor); + } else { + GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->exchangeItemId] - 1]; + + if (Player_BottleFromIA(this, this->itemAction) <= PLAYER_BOTTLE_NONE) { + this->getItemDrawIdPlusOne = ABS_ALT(giEntry->gid); + } + + if (this->unk_AE8 == 0) { + if ((this->actor.textId != 0) && (this->actor.textId != 0xFFFF)) { + Message_StartTextbox(play, this->actor.textId, &this->actor); + } + + this->unk_AE8 = 1; + } else if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) { + Player_StopCutscene(this); + this->getItemDrawIdPlusOne = GID_NONE + 1; + this->actor.flags &= ~ACTOR_FLAG_TALK_REQUESTED; + func_80839E74(this, play); + this->unk_B5E = 0xA; + } + } + } else if (this->unk_AE8 >= 0) { + if ((Player_BottleFromIA(this, this->itemAction) > PLAYER_BOTTLE_NONE) && + PlayerAnimation_OnFrame(&this->skelAnime, 36.0f)) { + Player_SetModels(this, PLAYER_MODELGROUP_BOTTLE); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 2.0f)) { + GetItemEntry* giEntry = &sGetItemTable[D_8085D1A4[this->itemAction] - 1]; + + func_80838830(this, giEntry->objectId); + } + Player_PlayAnimSfx(this, D_8085D840); + } + + if ((this->unk_AE7 == 0) && (this->targetedActor != NULL)) { + this->currentYaw = func_8083C62C(this, 0); + this->actor.shape.rot.y = this->currentYaw; + } +} + +void func_80853CC0(Player* this, PlayState* play) { + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_normal_re_dead_attack_wait); + } + + if (play->sceneId != SCENE_SEA_BS) { + func_8082F164(this, BTN_R); + } + + if (func_8082DE88(this, 0, 0x64)) { + func_80836988(this, play); + this->stateFlags2 &= ~PLAYER_STATE2_80; + } +} + +void func_80853D68(Player* this, PlayState* play) { + CollisionPoly* floorPoly; + f32 var_fv0; + f32 temp_fv1; + f32 var_fa0; + s16 downwardSlopeYaw; + s16 var_v0; + Vec3f slopeNormal; + + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + PlayerAnimation_Update(play, &this->skelAnime); + func_8083FBC4(play, this); + func_8019F780(&this->actor.projectedPos, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG), + this->actor.speed); + + if (func_80838A90(this, play)) { + return; + } + + if ((this->transformation == PLAYER_FORM_GORON) && func_8083A114(this, play)) { + return; + } + + floorPoly = this->actor.floorPoly; + if (floorPoly == NULL) { + func_80833AA0(this, play); + return; + } + + Actor_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw); + var_v0 = downwardSlopeYaw; + if (this->unk_AE7 != 0) { + var_v0 = downwardSlopeYaw + 0x8000; + } + if (this->linearVelocity < 0.0f) { + downwardSlopeYaw += 0x8000; + } + + var_fv0 = (1.0f - slopeNormal.y) * 40.0f; + var_fv0 = CLAMP(var_fv0, 0.0f, 10.0f); + + temp_fv1 = var_fv0 * var_fv0 * 0.015f; + var_fa0 = slopeNormal.y * 0.01f; + if (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) != FLOOR_EFFECT_1) { + var_fv0 = 0.0f; + var_fa0 = slopeNormal.y * 10.0f; + } + temp_fv1 = CLAMP_MIN(temp_fv1, 1.0f); + + if (Math_AsymStepToF(&this->linearVelocity, var_fv0, temp_fv1, var_fa0) && (var_fv0 == 0.0f)) { + func_80836A98(this, + (this->unk_AE7 == 0) ? D_8085BE84[PLAYER_ANIMGROUP_41][this->modelAnimType] + : D_8085BE84[PLAYER_ANIMGROUP_42][this->modelAnimType], + play); + } + + Math_SmoothStepToS(&this->currentYaw, downwardSlopeYaw, 0xA, 0xFA0, 0x320); + Math_ScaledStepToS(&this->actor.shape.rot.y, var_v0, 0x7D0); +} + +void func_80859CE0(PlayState* play, Player* this, s32 arg2); + +void func_80854010(Player* this, PlayState* play) { + if ((DECR(this->unk_AE8) == 0) && func_808387A0(play, this)) { + func_80859CE0(play, this, 0); + Player_SetAction(play, this, func_8085B08C, 0); + func_8085B08C(this, play); + } +} + +void func_808540A0(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80854010, 0); + this->unk_AE8 = 0x28; + Actor_Spawn(&play->actorCtx, play, ACTOR_DEMO_KANKYO, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0x10); +} + +void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction); + +void func_80854118(Player* this, PlayState* play) { + if (D_80862B18 < 150.0f) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 == 0) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->skelAnime.endFrame = this->skelAnime.animLength - 1.0f; + Player_AnimSfx_PlayFloorLand(this); + this->unk_AE8 = 1; + } + } else { + func_8085B384(this, play); + } + } + + Math_SmoothStepToF(&this->actor.velocity.y, 2.0f, 0.3f, 8.0f, 0.5f); + } + + if (play->csCtx.state != CS_STATE_IDLE) { + if (play->csCtx.playerCue != NULL) { + s32 pad; + f32 sp28 = this->actor.world.pos.y; + + Player_Cutscene_SetPosAndYawToStart(this, play->csCtx.playerCue); + this->actor.world.pos.y = sp28; + } + } +} + +void func_8085421C(Player* this, PlayState* play) { + if (this->skelAnime.animation == NULL) { + this->stateFlags2 |= PLAYER_STATE2_4000; + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if ((this->skelAnime.animation == &gPlayerAnim_link_derth_rebirth) && + PlayerAnimation_OnFrame(&this->skelAnime, 60.0f)) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_BOUND); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_DAMAGE_S); + } + } + + if ((this->unk_AE8++ >= 9) && !func_8082DA90(play)) { + if (this->unk_AE7 != 0) { + if (this->unk_AE7 < 0) { + func_80169FDC(&play->state); + } else { + func_80169EFC(&play->state); + } + if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + gSaveContext.respawnFlag = -5; + } + + play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; + play_sound(NA_SE_OC_ABYSS); + } else { + play->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + } + + play->transitionTrigger = TRANS_TRIGGER_START; + } +} + +void func_8085437C(Player* this, PlayState* play) { + func_808365DC(this, play); +} + +void func_8085439C(Player* this, PlayState* play) { + this->actor.gravity = -1.0f; + PlayerAnimation_Update(play, &this->skelAnime); + + if (this->actor.velocity.y < 0.0f) { + func_80833AA0(this, play); + } else if (this->actor.velocity.y < 6.0f) { + Math_StepToF(&this->linearVelocity, 3.0f, 0.5f); + } +} + +void func_80854430(Player* this, PlayState* play) { + if (play->unk_1887C < 0) { + play->unk_1887C = 0; + func_80839ED0(this, play); + } else if (this->unk_AE7 == 0) { + if ((play->sceneId != SCENE_20SICHITAI) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + play->unk_1887C = 10; + func_80847880(play, this); + Player_SetAction(play, this, func_80854430, 1); + this->unk_AE7 = 1; + } else { + play->unk_1887C = 0; + func_80847190(play, this, 0); + + if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { + this->stateFlags1 |= PLAYER_STATE1_100000; + func_8083868C(play, this); + } else { + this->stateFlags1 &= ~PLAYER_STATE1_100000; + if ((play->sceneId == SCENE_20SICHITAI) && + (func_8012364C(play, this, func_8082FDC4()) == ITEM_PICTO_BOX)) { + s32 requiredScopeTemp; + + play->actorCtx.flags |= ACTORCTX_FLAG_PICTO_BOX_ON; + } + } + } + } else if (CHECK_BTN_ANY(sPlayerControlInput->press.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_A)) { + play->unk_1887C = -1; + func_80854614(this, play); + Player_SetAction(play, this, func_80854430, 0); + this->unk_AE7 = 0; + } else { + play->unk_1887C = 10; + func_80854614(this, play); + } +} + +void func_80854614(Player* this, PlayState* play) { + this->unk_AA5 = PLAYER_UNKAA5_3; + func_8083868C(play, this); + PlayerAnimation_Update(play, &this->skelAnime); + func_8083216C(this, play); + this->upperLimbRot.y = func_80847190(play, this, 1) - this->actor.shape.rot.y; + this->unk_AA6 |= 0x80; + + if (play->unk_1887C < 0) { + play->unk_1887C++; + if (play->unk_1887C == 0) { + func_80839ED0(this, play); + } + } +} + +void func_808546D0(Player* this, PlayState* play) { + if (this->unk_AE7 >= 0) { + if (this->unk_AE7 < 6) { + this->unk_AE7++; + } else { + this->unk_B48 = (this->unk_AE7 >> 1) * 22.0f; + if (func_8082DE88(this, 1, 0x64)) { + this->unk_AE7 = -1; + EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x); + Player_PlaySfx(this, NA_SE_PL_ICE_BROKEN); + } + + if (this->transformation == PLAYER_FORM_ZORA) { + func_80834104(play, this); + this->skelAnime.animation = NULL; + this->unk_AE8 = -0x28; + this->unk_AE7 = 1; + this->linearVelocity = 0.0f; + } else if (play->gameplayFrames % 4 == 0) { + Player_InflictDamage(play, -1); + } + } + + this->stateFlags2 |= PLAYER_STATE2_4000; + } else if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80836988(this, play); + func_808339B4(this, 20); + } +} + +void func_80854800(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->skelAnime); + func_808345A8(this); + + if (((this->unk_AE8 % 25) != 0) || (func_808339D4(play, this, -1) != 0)) { + if (DECR(this->unk_AE8) == 0) { + func_80836988(this, play); + } + } + + this->shockTimer = 40; + func_800B8F98(&this->actor, this->ageProperties->voiceSfxIdOffset + (NA_SE_VO_LI_TAKEN_AWAY - SFX_FLAG)); +} + +void func_808548B8(Player* this, PlayState* play) { + AttackAnimInfo* attackInfoEntry = &sMeleeAttackAnimInfo[this->meleeWeaponAnimation]; + + if (this->skelAnime.curFrame < (this->skelAnime.endFrame - 6.0f)) { + this->stateFlags2 |= PLAYER_STATE2_20; + } + + if (func_808401F4(play, this)) { + return; + } + + if (this->linearVelocity >= 0.0f) { + func_8083FCF0(play, this, (this->transformation == PLAYER_FORM_GORON) ? 5.0f : 0.0f, attackInfoEntry->unk_C, + attackInfoEntry->unk_D); + } + + if ((this->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_LEFT) || + (this->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT)) { + this->unk_3D0.unk_00 = 3; + } + + //! @bug Lunge Storage: If this block is prevented from running at the end of an animation that produces a lunge, + //! the prepared lunge will be retained until next time execution passes through here, which usually means the next + //! sword slash. + if ((this->stateFlags2 & PLAYER_STATE2_40000000) && PlayerAnimation_OnFrame(&this->skelAnime, 0.0f)) { + this->linearVelocity = 15.0f; + this->stateFlags2 &= ~PLAYER_STATE2_40000000; + } + + if (this->linearVelocity > 12.0f) { + func_8083FBC4(play, this); + } + + Math_StepToF(&this->linearVelocity, 0.0f, 5.0f); + func_8083A548(this); + + if (PlayerAnimation_Update(play, &this->skelAnime) || + ((this->meleeWeaponAnimation >= PLAYER_MWA_FLIPSLASH_FINISH) && + (this->meleeWeaponAnimation <= PLAYER_MWA_ZORA_JUMPKICK_FINISH) && (this->skelAnime.curFrame > 2.0f) && + func_808333CC(this))) { + D_80862B48 = this->unk_AE8; + + if (!func_80848570(this, play)) { + PlayerAnimationHeader* anim = func_80123420(this) ? attackInfoEntry->unk_8 : attackInfoEntry->unk_4; + + func_8082DC38(this); + + if (anim == NULL) { + this->skelAnime.moveFlags &= ~8; + func_8085B384(this, play); + } else { + u8 moveFlags = this->skelAnime.moveFlags; + + if (this->transformation == PLAYER_FORM_ZORA) { + if (func_8083A580(this, play)) { + anim = this->unk_284.animation; + } + this->unk_ADC = 0; + } else if ((anim == &gPlayerAnim_link_fighter_Lpower_jump_kiru_end) && + (this->modelAnimType != PLAYER_ANIMTYPE_3)) { + anim = &gPlayerAnim_link_fighter_power_jump_kiru_end; + } + + this->skelAnime.moveFlags = 0; + Player_SetAction(play, this, func_80849FE0, 1); + func_8082EC9C(play, this, anim); + this->currentYaw = this->actor.shape.rot.y; + this->skelAnime.moveFlags = moveFlags; + } + this->stateFlags3 |= PLAYER_STATE3_8; + } + } else if (((this->transformation == PLAYER_FORM_ZORA) && + (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_PUNCH_KICK) && + (this->meleeWeaponAnimation != PLAYER_MWA_ZORA_JUMPKICK_FINISH)) || + ((this->transformation == PLAYER_FORM_GORON) && + (this->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))) { + this->unk_AE8 |= CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) ? 1 : 0; + } +} + +void func_80854C70(Player* this, PlayState* play) { + PlayerAnimation_Update(play, &this->skelAnime); + func_80832F24(this); + + if (this->skelAnime.curFrame >= 6.0f) { + func_80836988(this, play); + } +} + +// Array colour interpolation +// arg0 is the interpolation parameter +// arg1,5,9 are out colours +// arg2,6,0xA are first values +// arg3,7,0xB are second values +// arg4,8,0xC are subtracted after interpolation +void func_80854CD0(f32 arg0, s16* arg1, u8* arg2, u8* arg3, u8* arg4, s16* arg5, u8* arg6, u8* arg7, u8* arg8, + s16* arg9, u8* argA, u8* argB, u8* argC) { + s32 i; + + for (i = 0; i < 3; i++) { + *arg1 = ((s32)((*arg2 - *arg3) * arg0) + *arg3) - *arg4; + *arg5 = ((s32)((*arg6 - *arg7) * arg0) + *arg7) - *arg8; + *arg9 = ((s32)((*argA - *argB) * arg0) + *argB) - *argC; + + arg1++; + arg2++; + arg3++; + arg4++; + arg5++; + arg6++; + arg7++; + arg8++; + arg9++; + argA++; + argB++; + argC++; + } +} + +// Black, probably in-function static +u8 D_8085D844[] = { 0, 0, 0 }; + +// arg1 is the colour interpolation parameter +void func_80854EFC(PlayState* play, f32 arg1, struct_8085D848_unk_00* arg2) { + struct_8085D848_unk_00 sp70; + struct_8085D848_unk_00* var_t0; + struct_8085D848_unk_00* var_v1; + u8* var_t3; + u8* var_t4; + u8* new_var; + s32 pad[4]; + + new_var = play->envCtx.unk_C4.diffuseColor1; + sp70.fogNear = play->envCtx.unk_C4.fogNear; + sp70.fogColor[0] = play->envCtx.unk_C4.fogColor[0]; + sp70.fogColor[1] = play->envCtx.unk_C4.fogColor[1]; + sp70.fogColor[2] = play->envCtx.unk_C4.fogColor[2]; + sp70.ambientColor[0] = play->envCtx.unk_C4.ambientColor[0]; + sp70.ambientColor[1] = play->envCtx.unk_C4.ambientColor[1]; + sp70.ambientColor[2] = play->envCtx.unk_C4.ambientColor[2]; + + if (arg1 <= 1.0f) { + arg1 -= 0.0f; + + var_v1 = &arg2[0]; + var_t0 = &sp70; + var_t3 = D_8085D844; + var_t4 = new_var; + } else if (arg1 <= 2.0f) { + arg1 -= 1.0f; + var_v1 = &arg2[1]; + var_t0 = &arg2[0]; + var_t3 = D_8085D844; + var_t4 = D_8085D844; + + } else if (arg1 <= 3.0f) { + arg1 -= 2.0f; + var_v1 = &arg2[2]; + var_t0 = &arg2[1]; + var_t3 = D_8085D844; + var_t4 = D_8085D844; + + } else { + arg1 -= 3.0f; + var_v1 = &sp70; + var_t0 = &arg2[2]; + var_t3 = new_var; + var_t4 = D_8085D844; + } + + play->envCtx.lightSettings.fogNear = + ((s16)((var_v1->fogNear - var_t0->fogNear) * arg1) + var_t0->fogNear) - play->envCtx.unk_C4.fogNear; + + func_80854CD0(arg1, play->envCtx.lightSettings.fogColor, var_v1->fogColor, var_t0->fogColor, + play->envCtx.unk_C4.fogColor, play->envCtx.lightSettings.ambientColor, var_v1->ambientColor, + var_t0->ambientColor, play->envCtx.unk_C4.ambientColor, play->envCtx.lightSettings.diffuseColor1, + var_t3, var_t4, new_var); +} + +struct_8085D848 D_8085D848[] = { + { + { + { 650, { 0, 0, 0 }, { 10, 0, 30 } }, + { 300, { 200, 200, 255 }, { 0, 0, 0 } }, + { 600, { 0, 0, 0 }, { 0, 0, 200 } }, + }, + { + { { -40.0f, 20.0f, -10.0f }, { 120, 200, 255 }, 1000 }, + { { 0.0f, -10.0f, 0.0f }, { 255, 255, 255 }, 5000 }, + { { -10.0f, 4.0f, 3.0f }, { 200, 200, 255 }, 5000 }, + }, + }, + { + { + { 650, { 0, 0, 0 }, { 10, 0, 30 } }, + { 300, { 200, 200, 255 }, { 0, 0, 0 } }, + { 600, { 0, 0, 0 }, { 0, 0, 200 } }, + }, + { + { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 }, + { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 }, + { { 0.0f, 0.0f, 5.0f }, { 155, 255, 255 }, 100 }, + }, + }, +}; + +// arg2 is the colour interpolation parameter +// arg3 both selects the light to use and scales the radius +// arg4 selects the env fog/colour info +void func_808550D0(PlayState* play, Player* this, f32 arg2, f32 arg3, s32 arg4) { + struct_8085D848* temp_a2 = &D_8085D848[arg4]; + struct_8085D848_unk_18* lightInit = temp_a2->light; + Vec3f pos; + + func_80854EFC(play, arg2, temp_a2->unk_00); + + if (arg3 > 2.0f) { + arg3 -= 2.0f; + lightInit += 2; + } else if (arg3 > 1.0f) { + arg3 -= 1.0f; + lightInit++; + } + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &lightInit->pos, &pos); + Lights_PointNoGlowSetInfo(&this->lightInfo, pos.x, pos.y, pos.z, lightInit->color[0], lightInit->color[1], + lightInit->color[2], lightInit->radius * arg3); +} + +AnimSfxEntry D_8085D8F0[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 2, NA_SE_PL_PUT_OUT_ITEM, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_IT_SET_TRANSFORM_MASK, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 11, NA_SE_PL_FREEZE_S, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 30, NA_SE_PL_TRANSFORM_VOICE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 20, NA_SE_IT_TRANSFORM_MASK_BROKEN, STOP), +}; + +AnimSfxEntry D_8085D904[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 8, NA_SE_IT_SET_TRANSFORM_MASK, STOP), +}; + +void func_80855218(PlayState* play, Player* this, struct_8085D910** arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->skelAnime.animation == &gPlayerAnim_cl_setmask)) { + func_8082DB60(play, this, &gPlayerAnim_cl_setmaskend); + } else if ((this->skelAnime.animation == &gPlayerAnim_cl_setmask) || + (this->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) { + if (this->unk_AE7 >= 58) { + Math_StepToS(&this->unk_AE8, 255, 50); + } + + if (this->unk_AE7 >= 64) { + Math_StepToF(&this->unk_B10[2], 0.0f, 0.015f); + } else if (this->unk_AE7 >= 0xE) { + Math_StepToF(&this->unk_B10[2], 0.3f, 0.3f); + } + + if (this->unk_AE7 > 65) { + Math_StepToF(&this->unk_B10[3], 0.0f, 0.02f); + } else if (this->unk_AE7 >= 0x10) { + Math_StepToF(&this->unk_B10[3], -0.1f, 0.1f); + } + + if ((R_PLAY_FILL_SCREEN_ON == 0) && (this->skelAnime.animation == &gPlayerAnim_cl_setmask)) { + Player_PlayAnimSfx(this, D_8085D8F0); + } + } else { + if (this->unk_AE7 >= 20) { + Math_StepToS(&this->unk_AE8, 255, 20); + } + + if (R_PLAY_FILL_SCREEN_ON == 0) { + Player_PlayAnimSfx(this, D_8085D904); + if (this->unk_AE7 == 15) { + Player_PlaySfx(this, NA_SE_PL_FACE_CHANGE); + } + } + } +} + +u16 D_8085D908[] = { + WEEKEVENTREG_30_80, // PLAYER_FORM_FIERCE_DEITY + WEEKEVENTREG_30_20, // PLAYER_FORM_GORON + WEEKEVENTREG_30_40, // PLAYER_FORM_ZORA + WEEKEVENTREG_30_10, // PLAYER_FORM_DEKU +}; +struct_8085D910 D_8085D910[] = { + { 0x10, 0xA, 0x3B, 0x3F }, + { 9, 0x32, 0xA, 0xD }, +}; + +void func_808553F4(Player* this, PlayState* play) { + struct_8085D910* sp4C = D_8085D910; + s32 sp48 = false; + + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]); + sPlayerControlInput = play->state.input; + + Camera_ChangeMode(play->cameraPtrs[play->activeCamId], + (this->transformation == PLAYER_FORM_HUMAN) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); + this->stateFlags2 |= PLAYER_STATE2_40; + this->actor.shape.rot.y = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamId]) + 0x8000; + + func_80855218(play, this, &sp4C); + + if (this->unk_AE7 == 0x14) { + Play_EnableMotionBlurPriority(100); + } + + if (R_PLAY_FILL_SCREEN_ON != 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ALPHA = 255; + this->actor.update = func_8012301C; + this->actor.draw = NULL; + this->unk_AE7 = 0; + Play_DisableMotionBlurPriority(); + SET_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm]); + } + } else if ((this->unk_AE7++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || + ((this->unk_AE7 >= 5) && + (sp48 = ((this->transformation != PLAYER_FORM_HUMAN) || + CHECK_WEEKEVENTREG(D_8085D908[gSaveContext.save.playerForm])) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)))) { + R_PLAY_FILL_SCREEN_ON = 45; + R_PLAY_FILL_SCREEN_R = 220; + R_PLAY_FILL_SCREEN_G = 220; + R_PLAY_FILL_SCREEN_B = 220; + R_PLAY_FILL_SCREEN_ALPHA = 0; + + if (sp48) { + if (CutsceneManager_GetCurrentCsId() == this->csId) { + func_800E0348(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId))); + } + + if (this->transformation == PLAYER_FORM_HUMAN) { + AudioSfx_StopById(NA_SE_PL_TRANSFORM_VOICE); + AudioSfx_StopById(NA_SE_IT_TRANSFORM_MASK_BROKEN); + } else { + AudioSfx_StopById(NA_SE_PL_FACE_CHANGE); + } + } + + Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH); + } + + if (this->unk_AE7 >= sp4C->unk_0) { + if (this->unk_AE7 < sp4C->unk_2) { + Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f); + } else if (this->unk_AE7 < sp4C->unk_3) { + if (this->unk_AE7 == sp4C->unk_2) { + func_801000CC(NA_SE_EV_LIGHTNING_HARD); + } + + Math_StepToF(&this->unk_B10[4], 2.0f, 0.5f); + } else { + Math_StepToF(&this->unk_B10[4], 3.0f, 0.2f); + } + } + + if (this->unk_AE7 >= 0x10) { + if (this->unk_AE7 < 0x40) { + Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f); + } else if (this->unk_AE7 < 0x37) { + Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f); + } else { + Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f); + } + } + + func_808550D0(play, this, this->unk_B10[4], this->unk_B10[5], (this->transformation == PLAYER_FORM_HUMAN) ? 0 : 1); +} + +void func_80855818(Player* this, PlayState* play) { + Camera_ChangeMode(play->cameraPtrs[play->activeCamId], + (this->prevMask == PLAYER_MASK_NONE) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); + + if (R_PLAY_FILL_SCREEN_ON != 0) { + R_PLAY_FILL_SCREEN_ALPHA -= R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ON = 0; + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + } + + if (this->unk_AE7++ < 4) { + if ((this->prevMask == PLAYER_MASK_NONE) && (this->unk_AE7 == 4)) { + PlayerAnimation_Change(play, &this->skelAnime, func_8082ED20(this), 1.0f, 0.0f, 20.0f, ANIMMODE_ONCE, + 20.0f); + } + } else { + s32 pad; + f32 dist; + s16 angle; + + func_800FF3A0(&dist, &angle, play->state.input); + if (PlayerAnimation_Update(play, &this->skelAnime) || ((this->unk_AE7 > 10) && (dist != 0.0f))) { + if (R_PLAY_FILL_SCREEN_ON == 0) { + this->stateFlags1 &= ~PLAYER_STATE1_2; + this->prevMask = this->currentMask; + this->csId = play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]; + Player_StopCutscene(this); + play->envCtx.lightSettings = D_80862B50; + func_8085B384(this, play); + return; + } + } + + Math_StepToF(&this->unk_B10[5], 4.0f, 0.2f); + } + + func_808550D0(play, this, 0, this->unk_B10[5], (this->prevMask == PLAYER_MASK_NONE) ? 0 : 1); +} + +void func_80855A7C(Player* this, PlayState* play) { + if (this->unk_AE8++ > 90) { + play->msgCtx.ocarinaMode = 4; + func_8085B384(this, play); + } else if (this->unk_AE8 == 10) { + func_80848640(play, this); + } +} + +// Giant's Mask +void func_80855AF4(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + + func_80855218(play, this, NULL); + this->unk_AE7++; + + if (!(this->stateFlags1 & PLAYER_STATE1_100)) { + this->prevMask = this->currentMask; + gSaveContext.save.equippedMask = this->currentMask = PLAYER_MASK_GIANT; + Magic_Consume(play, 0, MAGIC_CONSUME_GIANTS_MASK); + this->currentBoots = PLAYER_BOOTS_GIANT; + this->prevBoots = PLAYER_BOOTS_GIANT; + func_80123140(play, this); + func_8085B384(this, play); + } +} + +void func_80855B9C(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_40; + + PlayerAnimation_Update(play, &this->skelAnime); + + if (!(this->stateFlags1 & PLAYER_STATE1_100)) { + this->prevMask = this->currentMask; + + gSaveContext.save.equippedMask = this->currentMask = PLAYER_MASK_NONE; + + this->currentBoots = PLAYER_BOOTS_HYLIAN; + this->prevBoots = PLAYER_BOOTS_HYLIAN; + func_80123140(play, this); + func_8085B384(this, play); + } +} + +void func_80855C28(Player* this, PlayState* play) { + s16 sp3E; + s32 pad; + PlayerAnimationHeader* sp34; + s32 var_a0; + + func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]); + sp3E = BINANG_SUB(this->actor.shape.rot.y, this->actor.world.rot.y); + + var_a0 = 0; + if ((this->actor.floorHeight - this->actor.world.pos.y) < 60.0f) { + Math_StepToF(&this->unk_B10[5], 200.0f, 150.0f); + var_a0 = Math_StepToS(&this->unk_AE8, 0xFA0, 0x15E); + } + + this->actor.shape.rot.y += this->unk_AE8; + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].x = 0; + this->skelAnime.jointTable[PLAYER_LIMB_ROOT - 1].z = 0; + this->unk_ABC += this->unk_B10[5]; + + if (this->unk_ABC >= 0.0f) { + this->unk_ABC = 0.0f; + if ((var_a0 != 0) && (sp3E < 0)) { + if (BINANG_SUB(this->actor.shape.rot.y, this->actor.world.rot.y) >= 0) { + this->actor.shape.rot.y = this->actor.world.rot.y; + Player_StopCutscene(this); + if (PLAYER_GET_INITMODE(&this->actor) == PLAYER_INITMODE_8) { + sp34 = D_8085D17C[this->transformation]; + func_80836A5C(this, play); + PlayerAnimation_Change(play, &this->skelAnime, sp34, -2.0f / 3.0f, Animation_GetLastFrame(sp34), + 0.0f, ANIMMODE_ONCE, -6.0f); + } else { + func_80839E74(this, play); + } + } + } + } else if (this->unk_AE7 == 0) { + Player_PlaySfx(this, NA_SE_PL_WARP_PLATE_OUT); + this->unk_AE7 = 1; + } +} + +void func_80855E08(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20; + + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_hook_fly_wait); + } + + Math_Vec3f_Sum(&this->actor.world.pos, &this->actor.velocity, &this->actor.world.pos); + if (func_80831124(play, this)) { + f32 var_fv0; + + Math_Vec3f_Copy(&this->actor.prevPos, &this->actor.world.pos); + func_80843178(play, this); + + var_fv0 = this->actor.world.pos.y - this->actor.floorHeight; + var_fv0 = CLAMP_MAX(var_fv0, 20.0f); + + this->actor.world.pos.y = this->actor.world.pos.y - var_fv0; + this->actor.shape.rot.x = 0; + this->linearVelocity = 1.0f; + this->actor.velocity.y = 0.0f; + this->actor.world.rot.x = this->actor.shape.rot.x; + func_80833AA0(this, play); + this->stateFlags2 &= ~PLAYER_STATE2_400; + this->actor.bgCheckFlags |= BGCHECKFLAG_GROUND; + this->stateFlags3 |= PLAYER_STATE3_10000; + } else if ((this->skelAnime.animation != &gPlayerAnim_link_hook_fly_start) || (this->skelAnime.curFrame >= 4.0f)) { + this->actor.gravity = 0.0f; + Math_ScaledStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x, 0x800); + Player_RequestRumble(play, this, 100, 2, 100, SQ(0)); + } +} + +void func_80855F9C(PlayState* play, Player* this) { + f32 sp24; + s16 sp22; + + this->stateFlags2 |= PLAYER_STATE2_20; + func_80832F78(this, &sp24, &sp22, 0.018f, play); + Math_ScaledStepToS(&this->currentYaw, sp22, 0x258); +} + +s32 func_80856000(PlayState* play, Player* this) { + CollisionPoly* poly; + s32 bgId; + Vec3f pos; + f32 sp28; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y - 20.0f; + pos.z = this->actor.world.pos.z; + return BgCheck_EntityCheckCeiling(&play->colCtx, &sp28, &pos, 30.0f, &poly, &bgId, &this->actor); +} + +void func_80856074(PlayState* play, Player* this) { + if (func_8083F8A8(play, this, 12.0f, 4, 0.0f, 10, 50, true)) { + EffectSsHahen_SpawnBurst(play, &this->actor.world.pos, 3.0f, 0, 4, 8, 2, -1, 10, NULL); + } +} + +void func_80856110(PlayState* play, Player* this, f32 arg2, f32 arg3, f32 arg4, s16 scale, s16 scaleStep, s16 life) { + static Vec3f D_8085D918 = { 0.0f, 0.5f, 0.0f }; // velocity + static Vec3f D_8085D924 = { 0.0f, 0.5f, 0.0f }; // accel + static Color_RGBA8 D_8085D930 = { 255, 255, 55, 255 }; // primColor + static Color_RGBA8 D_8085D934 = { 100, 50, 0, 0 }; // envColor + Vec3f pos; + + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + arg2; + pos.z = this->actor.world.pos.z; + + D_8085D918.y = arg3; + D_8085D924.y = arg4; + + func_800B0EB0(play, &pos, &D_8085D918, &D_8085D924, &D_8085D930, &D_8085D934, scale, scaleStep, life); +} + +// Deku Flower related +void func_808561B0(Player* this, PlayState* play) { + DynaPolyActor* dyna; + s32 aux = 0xAE; + f32 temp_fv0_2; + s32 sp38; + s32 var_v1; + + PlayerAnimation_Update(play, &this->skelAnime); + + if (func_80838A90(this, play)) { + return; + } + + if (this->unk_AE7 == 0) { + this->unk_ABC += this->unk_B48; + if (this->unk_ABC < -1000.0f) { + this->unk_ABC = -1000.0f; + this->unk_AE7 = 1; + this->unk_B48 = 0.0f; + } + func_80856074(play, this); + } else if (this->unk_AE7 == 1) { + this->unk_B48 += -22.0f; + if (this->unk_B48 < -170.0f) { + this->unk_B48 = -170.0f; + } + this->unk_ABC += this->unk_B48; + if (this->unk_ABC < -3900.0f) { + this->unk_ABC = -3900.0f; + this->unk_AE7 = 2; + this->actor.shape.rot.y = Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamId]); + this->actor.scale.y = 0.01f; + this->currentYaw = this->actor.world.rot.y = this->actor.shape.rot.y; + } else { + temp_fv0_2 = Math_SinS((1000.0f + this->unk_ABC) * (-30.0f)) * 0.004f; + this->actor.scale.y = 0.01f + temp_fv0_2; + this->actor.scale.z = this->actor.scale.x = 0.01f - (this->unk_B48 * -0.000015f); + + this->actor.shape.rot.y += (s16)(this->unk_B48 * 130.0f); + if (this->actor.floorBgId != BGCHECK_SCENE) { + dyna = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId); + + if (dyna != NULL) { + Math_Vec3f_StepToXZ(&this->actor.world.pos, &dyna->actor.world.pos, 1.0f); + } + } + } + + func_80856074(play, this); + } else if (this->unk_AE7 == 2) { + if (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) { + if (func_80856000(play, this)) { + this->unk_AE8 = 0; + } else { + this->unk_AE7 = 3; + if (this->unk_AE8 >= 10) { + this->unk_B48 = 2700.0f; + } else { + this->unk_B48 = 1450.0f; + } + func_8082E1F0(this, NA_SE_PL_DEKUNUTS_OUT_GRD); + } + } else if (this->unk_AE8 < 15) { + this->unk_AE8++; + if (this->unk_AE8 == 10) { + func_80856110(play, this, 20.0f, 3.8f, -0.1f, 140, 23, 15); + } + } + func_80855F9C(play, this); + } else { + this->unk_ABC += this->unk_B48; + + temp_fv0_2 = this->unk_ABC; + if (temp_fv0_2 >= 0.0f) { + f32 speed; + + sp38 = (this->unk_AE8 >= 10); + var_v1 = -1; + speed = this->unk_B48 * this->actor.scale.y; + if (this->actor.floorBgId != BGCHECK_SCENE) { + dyna = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId); + var_v1 = 0; + if ((dyna != NULL) && (dyna->actor.id == ACTOR_OBJ_ETCETERA) && (dyna->actor.params & 0x100)) { + var_v1 = 1; + speed *= aux / 100.0f; + } + } + + Math_Vec3f_Copy(this->unk_AF0, &this->actor.world.pos); + this->unk_ABC = 0.0f; + this->actor.world.pos.y += temp_fv0_2 * this->actor.scale.y; + func_80834DB8(this, &gPlayerAnim_pn_kakku, speed, play); + Player_SetAction(play, this, func_80856918, 1); + this->boomerangActor = NULL; + + this->stateFlags3 |= PLAYER_STATE3_200; + if (sp38 != 0) { + this->stateFlags3 |= PLAYER_STATE3_2000; + } + if (var_v1 < 0) { + this->stateFlags3 |= PLAYER_STATE3_40000; + } + + this->unk_AE7 = var_v1; + this->unk_AE8 = 9999; + Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20); + } else if (this->unk_ABC < 0.0f) { + func_80856074(play, this); + } + } + + if (this->unk_ABC < -1500.0f) { + this->stateFlags3 |= PLAYER_STATE3_100; + if (this->unk_B86[0] < 8) { + this->unk_B86[0]++; + if (this->unk_B86[0] == 8) { + func_8082E1F0(this, NA_SE_PL_DEKUNUTS_BUD); + } + } + } +} + +void func_808566C0(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex, f32 arg3, f32 arg4, f32 arg5, + s32 life) { + Color_RGBA8 primColor = { 255, 200, 200, 0 }; + Color_RGBA8 envColor = { 255, 255, 0, 0 }; + static Vec3f D_8085D940 = { 0.0f, 0.3f, 0.0f }; + static Vec3f D_8085D94C = { 0.0f, -0.025f, 0.0f }; + Vec3f pos; + s32 scale; + f32 sp34; + Vec3f* temp_v0; + + if (Rand_ZeroOne() < 0.5f) { + sp34 = -1.0f; + } else { + sp34 = 1.0f; + } + + D_8085D940.x = (Rand_ZeroFloat(arg4) + arg3) * sp34; + D_8085D94C.x = arg5 * sp34; + if (Rand_ZeroOne() < 0.5f) { + sp34 = -1.0f; + } else { + sp34 = 1.0f; + } + + temp_v0 = &this->bodyPartsPos[bodyPartIndex]; + D_8085D940.z = (Rand_ZeroFloat(arg4) + arg3) * sp34; + D_8085D94C.z = arg5 * sp34; + pos.x = temp_v0->x; + pos.y = Rand_ZeroFloat(15.0f) + temp_v0->y; + pos.z = temp_v0->z; + if (Rand_ZeroOne() < 0.5f) { + scale = 2000; + } else { + scale = -150; + } + + EffectSsKirakira_SpawnDispersed(play, &pos, &D_8085D940, &D_8085D94C, &primColor, &envColor, scale, life); +} + +void func_8085687C(Player* this) { +} + +s32 func_80856888(f32* arg0, f32 arg1, f32 arg2) { + if (arg2 != 0.0f) { + if (arg1 < *arg0) { + arg2 = -arg2; + } + + *arg0 += arg2; + if (((*arg0 - arg1) * arg2) >= 0.0f) { + *arg0 = arg1; + return true; + } + } else if (arg1 == *arg0) { + return true; + } + + return false; +} + +f32 D_8085D958[] = { 600.0f, 960.0f }; +Vec3f D_8085D960 = { -30.0f, 50.0f, 0.0f }; +Vec3f D_8085D96C = { 30.0f, 50.0f, 0.0f }; + +// Flying as Deku? +void func_80856918(Player* this, PlayState* play) { + if ((this->boomerangActor != NULL) && (this->boomerangActor->update == NULL)) { + this->boomerangActor = NULL; + } + + if (func_80838A90(this, play)) { + return; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80837134(play, this); + return; + } + + if ((this->actor.velocity.y > 0.0f) && (this->stateFlags3 & PLAYER_STATE3_200)) { + this->actor.terminalVelocity = -20.0f; + this->actor.gravity = -5.5f; + Player_SetCylinderForAttack(this, DMG_DEKU_LAUNCH, 2, 20); + func_80856110(play, this, 0.0f, 0.0f, -1.0f, 500, 0, 8); + + if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) { + func_80833AA0(this, play); + } + } else if (!(this->stateFlags3 & PLAYER_STATE3_2000)) { + func_80833AA0(this, play); + } else if (this->stateFlags3 & PLAYER_STATE3_200) { + if (this->actor.velocity.y < 0.0f) { + if (this->unk_AE7 < 0) { + func_80833AA0(this, play); + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if (this->skelAnime.curFrame > 6.0f) { + this->actor.velocity.y = 6.0f; + this->stateFlags3 &= ~PLAYER_STATE3_200; + this->stateFlags3 |= PLAYER_STATE3_1000000; + func_8082E1F0(this, NA_SE_IT_DEKUNUTS_FLOWER_OPEN); + func_8019FD90(4, 2); + } + } + } + + this->actor.terminalVelocity = -10.0f; + this->actor.gravity = -0.5f; + Player_ResetCylinder(this); + } else if (CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_A)) { + func_808355D8(play, this, &gPlayerAnim_pn_kakkufinish); + } else { + s16 temp_a0; + f32 temp_fv1; + s16 sp76; + s16 var_v1; + s16 var_a1; + f32 sp6C; + f32 sp68; + s16 sp66; + s16 temp_ft0; + s32 temp; + s16 var_v1_4; + + this->linearVelocity = sqrtf(SQXZ(this->actor.velocity)); + if (this->linearVelocity != 0.0f) { + var_a1 = Math_Atan2S_XY(this->actor.velocity.z, this->actor.velocity.x); + + temp_a0 = this->actor.shape.rot.y - var_a1; + if (ABS_ALT(temp_a0) > 0x4000) { + this->linearVelocity = -this->linearVelocity; + var_a1 = var_a1 + 0x8000; + } + this->currentYaw = var_a1; + } + + if (this->windSpeed != 0.0f) { + Math_SmoothStepToS(&this->unk_B8C, this->windAngleX, 3, 0x1F40, 0x190); + } + + func_8085687C(this); + + if (this->unk_AE8 != 0) { + this->unk_AE8--; + } + + temp_fv1 = D_8085D958[this->unk_AE7] - Math_Vec3f_DistXZ(&this->actor.world.pos, this->unk_AF0); + PlayerAnimation_Update(play, &this->skelAnime); + + if ((this->unk_AE8 != 0) && (temp_fv1 > 300.0f)) { + sp76 = 0x1770; + if (this->skelAnime.animation != &gPlayerAnim_pn_kakku) { + func_8082E5EC(play, this, &gPlayerAnim_pn_kakkufinish); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 8.0f)) { + s32 i; + + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D960, + &this->bodyPartsPos[PLAYER_BODYPART_LEFT_HAND]); + Player_TranslateAndRotateY(this, &this->actor.world.pos, &D_8085D96C, + &this->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND]); + + for (i = 0; i < 13; i++) { + func_808566C0(play, this, PLAYER_BODYPART_LEFT_HAND, 0.6f, 1.0f, 0.8f, 17); + func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.6f, 1.0f, 0.8f, 17); + } + } + } else if ((this->unk_AE8 == 0) || (temp_fv1 < 0.0f)) { + sp76 = 0; + func_808355D8(play, this, &gPlayerAnim_pn_rakkafinish); + } else { + sp76 = 0x1770 - (s32)((300.0f - temp_fv1) * 10.0f); + + if (this->skelAnime.animation != &gPlayerAnim_pn_batabata) { + func_8082E55C(play, this, &gPlayerAnim_pn_batabata); + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 6.0f)) { + Player_PlaySfx(this, NA_SE_PL_DEKUNUTS_STRUGGLE); + } + } + + Math_AsymStepToS(&this->unk_B86[1], sp76, 0x190, 0x190); + + this->unk_B8A += this->unk_B86[1]; + temp = ABS_ALT(this->unk_B86[1]); + if (temp > 0xFA0) { + this->unk_B66 += (u8)(ABS_ALT(this->unk_B86[1]) * 0.01f); + } + + if (this->unk_B66 > 200) { + this->unk_B66 -= 200; + func_808566C0(play, this, PLAYER_BODYPART_LEFT_HAND, 0.0f, 1.0f, 0.0f, 32); + func_808566C0(play, this, PLAYER_BODYPART_RIGHT_HAND, 0.0f, 1.0f, 0.0f, 32); + } + + func_8019FCB8(&this->actor.projectedPos, 0x1851, 2.0f * (this->unk_B86[1] * (1.0f / 6000.0f))); + if ((this->boomerangActor == NULL) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B)) { + if (AMMO(ITEM_NUT) == 0) { + play_sound(NA_SE_SY_ERROR); + } else { + this->boomerangActor = + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ARROW, this->bodyPartsPos[PLAYER_BODYPART_WAIST].x, + this->bodyPartsPos[PLAYER_BODYPART_WAIST].y, + this->bodyPartsPos[PLAYER_BODYPART_WAIST].z, -1, 0, 0, ARROW_TYPE_DEKU_NUT); + if (this->boomerangActor != NULL) { + this->boomerangActor->velocity.x = this->actor.velocity.x * 1.5f; + this->boomerangActor->velocity.z = this->actor.velocity.z * 1.5f; + Inventory_ChangeAmmo(ITEM_NUT, -1); + Actor_PlaySfx(this->boomerangActor, NA_SE_PL_DEKUNUTS_DROP_BOMB); + } + } + } + + if (this->actor.velocity.y < 0.0f) { + if (sp76 != 0) { + this->actor.terminalVelocity = -0.38f; + this->actor.gravity = -0.2f; + } else { + this->actor.terminalVelocity = (this->unk_B86[1] * 0.0033f) + -20.0f; + this->actor.gravity = (this->unk_B86[1] * 0.00004f) + (REG(68) / 100.0f); + } + } + + this->fallStartHeight = this->actor.world.pos.y; + func_80832F78(this, &sp6C, &sp66, 0.0f, play); + if (sp6C == 0.0f) { + sp68 = 0.1f; + } else { + s16 temp_v0_6 = this->currentYaw - sp66; + + if (ABS_ALT(temp_v0_6) > 0x4000) { + sp6C = -sp6C; + sp66 += 0x8000; + } + sp68 = 0.25f; + } + + Math_SmoothStepToS(&this->unk_B8C, sp6C * 600.0f, 8, 0xFA0, 0x64); + Math_ScaledStepToS(&this->currentYaw, sp66, 0xFA); + + temp_ft0 = BINANG_SUB(sp66, this->currentYaw) * -2.0f; + temp_ft0 = CLAMP(temp_ft0, -0x1F40, 0x1F40); + Math_SmoothStepToS(&this->unk_B8E, temp_ft0, 0x14, 0x320, 0x14); + sp6C = (sp6C * (this->unk_B86[1] * 0.0004f)) * fabsf(Math_SinS(this->unk_B8C)); + func_80856888(&this->linearVelocity, sp6C, sp68); + + sp6C = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)); + if (sp6C > 8.0f) { + sp6C = 8.0f / sp6C; + this->linearVelocity *= sp6C; + this->actor.velocity.y *= sp6C; + } + } + + func_808378FC(play, this); +} + +// Deku spinning related +void func_808573A4(Player* this, PlayState* play) { + this->stateFlags2 |= PLAYER_STATE2_20 | PLAYER_STATE2_40; + + PlayerAnimation_Update(play, &this->skelAnime); + Player_SetCylinderForAttack(this, DMG_DEKU_SPIN, 1, 30); + + if (!func_80838A90(this, play)) { + s16 prevYaw = this->currentYaw; + f32 sp40; + s16 sp3E; + + func_80832F78(this, &sp40, &sp3E, 0.018f, play); + sp40 *= 1.0f - (0.9f * ((11100.0f - this->unk_B10[0]) / 11100.0f)); + if (!func_8083A4A4(this, &sp40, &sp3E, REG(43) / 100.0f)) { + func_8083CB58(this, sp40, sp3E); + } + + this->unk_B10[0] += -800.0f; + this->actor.shape.rot.y += BINANG_ADD((s16)this->unk_B10[0], BINANG_SUB(this->currentYaw, prevYaw)); + + if (Math_StepToF(&this->unk_B10[1], 0.0f, this->unk_B10[0])) { + this->actor.shape.rot.y = this->currentYaw; + func_8083B2E4(this, play); + } else if (this->skelAnime.animation == &gPlayerAnim_pn_attack) { + this->stateFlags3 |= PLAYER_STATE3_100000; + + if (this->unk_B10[1] < 0.0f) { + func_8082E438(play, this, func_8082ED20(this)); + } + } + + func_808566C0(play, this, PLAYER_BODYPART_WAIST, 1.0f, 0.5f, 0.0f, 32); + + if (this->unk_B10[0] > 9500.0f) { + func_8083F8A8(play, this, 2.0f, 1, 2.5f, 10, 18, true); + } + + func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos, 2.0f, + this->currentYaw, this->actor.floorPoly, this->actor.floorBgId); + func_800B8F98(&this->actor, Player_GetFloorSfx(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG)); + } +} + +void func_80857640(Player* this, f32 arg1, s32 arg2) { + func_80834CD0(this, arg1, NA_SE_VO_LI_SWORD_N); + Player_PlaySfx(this, NA_SE_PL_GORON_BALLJUMP); + Player_StopHorizontalMovement(this); + if (this->unk_AE8 < arg2) { + this->unk_AE8 = arg2; + } + this->unk_AE7 = 1; + this->unk_B48 = 1.0f; +} + +void func_808576BC(PlayState* play, Player* this) { + s32 var_v0 = ((this->actor.velocity.z * Math_CosS(this->currentYaw)) + + (this->actor.velocity.x * Math_SinS(this->currentYaw))) * + 800.0f; + + var_v0 -= this->unk_AE8; + var_v0 = ABS_ALT(var_v0); + + if (var_v0 <= 0x7D0) { + return; + } + + if (var_v0 > 0x1770) { + func_800B8F98(&this->actor, NA_SE_PL_GORON_SLIP - SFX_FLAG); + } + + if (func_8083F8A8(play, this, 12.0f, -1 - (var_v0 >> 0xC), (var_v0 >> 0xA) + 1.0f, (var_v0 >> 7) + 160, 20, true)) { + Player_PlaySfx(this, (this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) + ? NA_SE_PL_ROLL_SNOW_DUST - SFX_FLAG + : NA_SE_PL_ROLL_DUST - SFX_FLAG); + } +} + +void func_808577E0(Player* this) { + f32 temp_fa1 = ABS_ALT(this->unk_AE8) * 0.00004f; + + if (this->unk_ABC < temp_fa1) { + this->unk_B48 += 0.08f; + } else { + this->unk_B48 += -0.07f; + } + + this->unk_B48 = CLAMP(this->unk_B48, -0.2f, 0.14f); + if (fabsf(this->unk_B48) < 0.12f) { + if (Math_StepUntilF(&this->unk_ABC, temp_fa1, this->unk_B48)) { + this->unk_B48 = 0.0f; + } + } else { + this->unk_ABC += this->unk_B48; + this->unk_ABC = CLAMP(this->unk_ABC, -0.7f, 0.3f); + } +} + +s32 func_80857950(PlayState* play, Player* this) { + if (((this->unk_B86[1] == 0) && !CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A)) || + ((this->unk_AE7 == 3) && (this->actor.velocity.y < 0.0f))) { + Player_SetAction(play, this, func_80849FE0, 1); + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pg_maru_change, -2.0f / 3.0f, 7.0f, 0.0f, + ANIMMODE_ONCE, 0.0f); + Player_PlaySfx(this, NA_SE_PL_BALL_TO_GORON); + return true; + } + + return false; +} + +s32 func_80857A44(PlayState* play, Player* this) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + + this->actor.shape.shadowDraw = ActorShadow_DrawCircle; + this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_800; + this->unk_AE7 = 4; + this->actor.shape.shadowScale = 30.0f; + this->unk_AE8 = this->linearVelocity * 500.0f; + this->unk_B08 = this->linearVelocity; + this->unk_B0C = 0.0f; + this->actor.home.rot.y = this->currentYaw; + + return true; + } + + return false; +} + +void func_80857AEC(PlayState* play, Player* this) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { + this->unk_B0C += this->unk_B08 * 0.05f; + + if (this->unk_B86[1] == 0) { + if (this->unk_AE7 == 1) { + this->unk_AE7 = 2; + Player_RequestQuakeAndRumble(play, this, NA_SE_PL_GORON_PUNCH); + play->actorCtx.unk2 = 4; + EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f); + this->unk_AE8 = 0; + this->unk_B08 = 0.0f; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, 0, 0, 0); + } else { + this->unk_AE7 = 4; + } + } + + Player_AnimSfx_PlayFloorLand(this); + } +} + +// Goron rolling related +void func_80857BE8(Player* this, PlayState* play) { + if (func_80833058(play, this, D_8085D050, 0)) { + return; + } + + if ((this->unk_AE7 == 0) && !func_80857A44(play, this)) { + return; + } + + this->stateFlags3 |= PLAYER_STATE3_1000; + func_808577E0(this); + + if (!func_80857950(play, this)) { + f32 spE4 = 0.0f; + s16 spE2 = this->currentYaw; + u16 spE0; + s32 spDC; + s32 spD8; + + if (func_80840A30(play, this, &this->unk_B08, (this->doorType == PLAYER_DOORTYPE_STAIRCASE) ? 0.0f : 12.0f)) { + if (func_80857BE8 != this->actionFunc) { + return; + } + + this->linearVelocity *= 0.1f; + func_80834CD0(this, 10.0f, 0); + if (this->unk_B86[1] != 0) { + this->unk_B86[1] = 0; + this->unk_AE7 = 3; + } + } else if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (this->unk_B08 >= 12.0f)) { + s16 temp_v0 = this->currentYaw - BINANG_ADD(this->actor.wallYaw, 0x8000); + s16 temp_v2; + s32 var_a2 = ABS_ALT(temp_v0); + + this->unk_B0C += this->unk_B08 * 0.05f; + temp_v2 = ((temp_v0 >= 0) ? 1 : -1) * ((var_a2 + 0x100) & ~0x1FF); + this->currentYaw += BINANG_SUB(0x8000, (s16)(temp_v2 * 2)); + this->actor.home.rot.y = this->currentYaw; + this->actor.shape.rot.y = this->currentYaw; + + this->unk_B8C = 4; + Player_PlaySfx(this, NA_SE_IT_GORON_ROLLING_REFLECTION); + } + + this->stateFlags2 |= (PLAYER_STATE2_20 | PLAYER_STATE2_40); + + if (this->unk_B8E != 0) { + this->unk_B8E--; + } else { + func_80832F78(this, &spE4, &spE2, 0.0f, play); + spE4 *= 2.6f; + } + + if (this->unk_B8C != 0) { + this->unk_B8C--; + spE2 = this->currentYaw; + } + + if (this->unk_B86[1] != 0) { + spE4 = 18.0f; + Math_StepToC(&this->unk_AE7, 4, 1); + + if ((this->stateFlags3 & PLAYER_STATE3_80000) && (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || + (gSaveContext.save.saveInfo.playerData.magic == 0) || + ((this->unk_AE7 == 4) && (this->unk_B08 < 12.0f)))) { + if (Math_StepToS(&this->unk_B86[1], 0, 1) != 0) { + this->stateFlags3 &= ~PLAYER_STATE3_80000; + Magic_Reset(play); + Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED); + } + this->unk_AE7 = 4; + } else if (this->unk_B86[1] < 7) { + if (!(this->stateFlags3 & PLAYER_STATE3_80000)) { + this->unk_3D0.unk_00 = 2; + } + this->unk_B86[1]++; + } + } + + spDC = spE4 * 900.0f; + + Math_AsymStepToF(&this->unk_B10[0], (this->unk_B8A != 0) ? 1.0f : 0.0f, 0.8f, 0.05f); + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + func_80857AEC(play, this); + if (this->unk_AE7 == 2) { + if (this->unk_B8A == 0) { + this->unk_AE7 = 4; + } else { + this->unk_B8A--; + this->unk_ABC = 0.0f; + this->unk_B48 = 0.14f; + } + } else if ((this->unk_B86[1] == 0) && CHECK_BTN_ALL(sPlayerControlInput->press.button, BTN_B) && + (Inventory_GetBtnBItem(play) < ITEM_FD)) { + func_80857640(this, 14.0f, 0x1F40); + } else { + f32 spCC; + s16 spCA; + s16 spC8; + s32 var_a0; + s32 spC0; + f32 spBC; + f32 spB8; + f32 spB4; + f32 spB0; + f32 spAC; + f32 spA8; + f32 spA4; + f32 spA0; + Vec3f slopeNormal; + s16 downwardSlopeYaw; + s16 sp90 = this->currentYaw; + s16 sp8E = this->currentYaw - this->actor.home.rot.y; + f32 sp88 = Math_CosS(sp8E); + + if (this->unk_B86[1] == 0) { + this->unk_B0C = 0.0f; + if (this->unk_AE7 >= 0x36) { + Magic_Consume(play, 2, MAGIC_CONSUME_GORON_ZORA); + this->unk_B08 = 18.0f; + this->unk_B86[1] = 1; + this->stateFlags3 |= PLAYER_STATE3_80000; + func_8082E1F0(this, NA_SE_PL_GORON_BALL_CHARGE_DASH); + } + } else { + this->unk_B0C = CLAMP(this->unk_B0C, 0.0f, 0.9f); + } + + spBC = (1.0f - this->unk_B0C) * this->unk_B08 * sp88; + if ((spBC < 0.0f) || ((spE4 == 0.0f) && (ABS_ALT(sp8E) > 0xFA0))) { + spBC = 0.0f; + } + + Math_StepToF(&this->unk_B0C, 0.0f, fabsf(sp88) * 20.0f); + var_a0 = spBC * 500.0f; + var_a0 = CLAMP_MIN(var_a0, 0); + + spC0 = (s32)(spE4 * 400.0f) - var_a0; + spC0 = CLAMP_MIN(spC0, 0); + + spDC = CLAMP_MIN(spDC, var_a0); + + spAC = spBC * Math_SinS(this->actor.home.rot.y); + spA8 = spBC * Math_CosS(this->actor.home.rot.y); + spB4 = this->unk_B08 * Math_SinS(this->currentYaw); + spB0 = this->unk_B08 * Math_CosS(this->currentYaw); + + spA4 = spB4 - spAC; + spA0 = spB0 - spA8; + this->linearVelocity = spBC; + this->currentYaw = this->actor.home.rot.y; + spCC = spE4; + spCA = spE2; + + if (func_8083A4A4(this, &spCC, &spCA, (this->unk_AE7 >= 5) ? 0.0f : 1.0f)) { + if (this->unk_B86[1] == 0) { + this->unk_AE7 = 4; + } + + if (this->unk_AE7 == 4) { + spDC = -0xFA0; + } + } else { + static Vec3f D_8085D978 = { -30.0f, 60.0f, 0.0f }; + static Vec3f D_8085D984 = { 30.0f, 60.0f, 0.0f }; + f32 sp84 = (((this->floorSfxOffset == NA_SE_PL_WALK_SNOW - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_ICE - SFX_FLAG) || + (this->floorSfxOffset == NA_SE_PL_WALK_SAND - SFX_FLAG) || + (sPlayerCurrentFloorType == FLOOR_TYPE_5)) && + (spC0 >= 0x7D0)) + ? 0.08f + : this->unk_AE8 * 0.0003f; + f32 sp80 = (Math_SinS(this->unk_B6C) * 8.0f) + 0.6f; + s16 var_a3; + s16 sp7C; + Vec3f sp70; + f32 sp6C; + f32 var_fa1; + + if (this->unk_B86[1] == 0) { + if ((gSaveContext.magicState == MAGIC_STATE_IDLE) && + (gSaveContext.save.saveInfo.playerData.magic >= 2) && (this->unk_AE8 >= 0x36B0)) { + this->unk_AE7++; + func_800B8F98(&this->actor, NA_SE_PL_GORON_BALL_CHARGE - SFX_FLAG); + } else { + this->unk_AE7 = 4; + } + } + + if (spE4 != spCC) { + this->currentYaw = spE2; + } + + sp84 = CLAMP_MIN(sp84, 0.0f); + sp80 = CLAMP_MIN(sp80, 0.0f); + + Math_AsymStepToF(&this->linearVelocity, spE4, sp84, sp80); + spC8 = (s16)(fabsf(this->actor.speed) * 20.0f) + 300; + spC8 = CLAMP_MIN(spC8, 100); + + sp7C = (s32)(BINANG_SUB(spE2, this->currentYaw) * -0.5f); + this->unk_B0C += (f32)(SQ(sp7C)) * 8e-9f; + Math_ScaledStepToS(&this->currentYaw, spE2, spC8); + sp6C = func_80835D2C(play, this, &D_8085D978, &sp70); + + var_fa1 = func_80835D2C(play, this, &D_8085D984, &sp70) - sp6C; + if (fabsf(var_fa1) > 100.0f) { + var_fa1 = 0.0f; + } + + var_a3 = Math_Atan2S_XY(60.0f, var_fa1); + if (ABS_ALT(var_a3) > 0x2AAA) { + var_a3 = 0; + } + + Math_ScaledStepToS(&this->actor.shape.rot.z, var_a3 + sp7C, spC8); + } + + spBC = this->linearVelocity; + this->actor.home.rot.y = this->currentYaw; + this->currentYaw = sp90; + Actor_GetSlopeDirection(this->actor.floorPoly, &slopeNormal, &downwardSlopeYaw); + + spB8 = sqrtf(SQ(spA4) + SQ(spA0)); + if (this->unk_B86[1] != 0) { + if ((ABS_ALT(sp8E) + ABS_ALT(this->unk_B6C)) > 15000) { + this->unk_B86[1] = 0; + this->unk_AE7 = 4; + this->unk_B8E = 0x14; + this->unk_AE8 = 0; + this->stateFlags3 &= ~PLAYER_STATE3_80000; + Magic_Reset(play); + } + } else { + f32 temp_ft4_2 = (0.6f * slopeNormal.x) + spA4; + f32 temp_ft5 = (0.6f * slopeNormal.z) + spA0; + f32 temp_fv0_3 = sqrtf(SQ(temp_ft4_2) + SQ(temp_ft5)); + + if ((temp_fv0_3 < spB8) || (temp_fv0_3 < 6.0f)) { + spA4 = temp_ft4_2; + spA0 = temp_ft5; + spB8 = temp_fv0_3; + } + } + + if (spB8 != 0.0f) { + f32 pad; + f32 sp54 = spB8 - 0.3f; + + sp54 = CLAMP_MIN(sp54, 0.0f); + + spB8 = sp54 / spB8; + + spA4 *= spB8; + spA0 *= spB8; + + if (sp54 != 0.0f) { + this->unk_B28 = Math_Atan2S_XY(spA0, spA4); + } + + if (this->unk_AE8 == 0) { + s32 temp_v0_10 = this->unk_B86[0]; + s32 temp_ft3_2 = sp54 * 800.0f; + + this->unk_B86[0] += (s16)temp_ft3_2; + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (temp_ft3_2 != 0) && + (((temp_v0_10 + temp_ft3_2) * temp_v0_10) <= 0)) { + spE0 = Player_GetFloorSfx(this, NA_SE_PL_GORON_ROLL); + func_8019F780(&this->actor.projectedPos, spE0, sp54); + } + } + } + + spAC = Math_SinS(this->actor.home.rot.y) * spBC; + spA8 = Math_CosS(this->actor.home.rot.y) * spBC; + + spB4 = spAC + spA4; + spB0 = spA8 + spA0; + + this->unk_B08 = sqrtf(SQ(spB4) + SQ(spB0)); + this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f); + + this->currentYaw = Math_Atan2S_XY(spB0, spB4); + } + + func_808576BC(play, this); + + if (ABS_ALT(this->unk_AE8) > 0xFA0) { + this->stateFlags2 |= PLAYER_STATE2_8; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->linearVelocity = this->unk_B08 * Math_CosS(this->unk_B6C); + this->actor.velocity.y = this->unk_B08 * Math_SinS(this->unk_B6C); + } + + if ((this->unk_B86[1] != 0) || + SurfaceType_HasMaterialProperty(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId, + MATERIAL_PROPERTY_SOFT_IMPRINT)) { + func_800AE930(&play->colCtx, Effect_GetByIndex(this->meleeWeaponEffectIndex[2]), &this->actor.world.pos, + 15.0f, this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId); + } else { + func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); + } + } else { + Math_ScaledStepToS(&this->actor.shape.rot.z, 0, 0x190); + + this->unk_B86[0] = 0; + if (this->unk_B86[1] != 0) { + this->actor.gravity = -1.0f; + Math_ScaledStepToS(&this->actor.home.rot.y, spE2, 0x190); + + this->unk_B08 = sqrtf(SQ(this->linearVelocity) + SQ(this->actor.velocity.y)) * + ((this->linearVelocity >= 0.0f) ? 1.0f : -1.0f); + this->unk_B08 = CLAMP_MAX(this->unk_B08, 18.0f); + } else { + this->unk_B48 += this->actor.velocity.y * 0.005f; + if (this->unk_AE7 == 1) { + if (this->actor.velocity.y > 0.0f) { + if ((this->actor.velocity.y + this->actor.gravity) < 0.0f) { + this->actor.velocity.y = -this->actor.gravity; + } + } else { + this->unk_B8A = 0xA; + if (this->actor.velocity.y > -1.0f) { + this->actor.gravity = -0.2f; + } else { + this->unk_3D0.unk_00 = 1; + this->actor.gravity = -10.0f; + } + } + } + this->unk_B08 = this->linearVelocity; + } + + func_800AEF44(Effect_GetByIndex(this->meleeWeaponEffectIndex[2])); + } + + Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 0x7D0); + + Math_AsymStepToS(&this->unk_AE8, spDC, (spDC >= 0) ? 0x7D0 : 0x3E8, 0x4B0); + + if (this->unk_AE8 != 0) { + spD8 = this->actor.shape.rot.x; + this->actor.shape.rot.x += this->unk_AE8; + + Math_ScaledStepToS(&this->unk_B86[0], 0, ABS_ALT(this->unk_AE8)); + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (((this->unk_AE8 + spD8) * spD8) <= 0)) { + spE0 = + Player_GetFloorSfx(this, (this->unk_B86[1] != 0) ? NA_SE_PL_GORON_CHG_ROLL : NA_SE_PL_GORON_ROLL); + func_8019F780(&this->actor.projectedPos, spE0, this->unk_B08); + } + } + + if (this->unk_AE7 == 2) { + Player_SetCylinderForAttack(this, DMG_GORON_POUND, 4, 60); + Actor_SetPlayerImpact(play, PLAYER_IMPACT_GORON_GROUND_POUND, 2, 100.0f, &this->actor.world.pos); + } else if (this->unk_B86[1] != 0) { + Player_SetCylinderForAttack(this, DMG_GORON_SPIKES, 1, 25); + } else { + Player_SetCylinderForAttack(this, DMG_NORMAL_ROLL, 1, 25); + } + } +} + +void func_80858C84(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082E784(this); + func_8082E438(play, this, anim); + Player_StopHorizontalMovement(this); +} + +void func_80858CC8(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082E784(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_ONCE, + -8.0f); + Player_StopHorizontalMovement(this); +} + +void func_80858D48(PlayState* play, Player* this, PlayerAnimationHeader* anim) { + func_8082E784(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f); + Player_StopHorizontalMovement(this); +} + +void func_80858DB4(PlayState* play, Player* this, void* anim) { + Player_StopHorizontalMovement(this); +} + +void func_80858DDC(PlayState* play, Player* this, void* anim) { + func_80858C84(play, this, anim); +} + +void func_80858DFC(PlayState* play, Player* this, void* anim) { + func_8082E784(this); + func_8082E5A8(play, this, anim); + Player_StopHorizontalMovement(this); +} + +void func_80858E40(PlayState* play, Player* this, void* anim) { + func_80858CC8(play, this, anim); +} + +void func_80858E60(PlayState* play, Player* this, void* anim) { + func_80858D48(play, this, anim); +} + +void func_80858E80(PlayState* play, Player* this, void* anim) { + func_8082EA60(play, this, anim); +} + +void func_80858EA0(PlayState* play, Player* this, void* anim) { + func_8082EA10(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void func_80858EC0(PlayState* play, Player* this, void* anim) { + Player_AnimationPlayOnceReverse(play, this, anim); + func_8082E920(play, this, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void func_80858EFC(PlayState* play, Player* this, void* anim) { + func_8082EB18(play, this, anim); +} + +void func_80858F1C(PlayState* play, Player* this, void* anim) { + func_8082EAC8(play, this, anim, ANIM_FLAG_4 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE | ANIM_FLAG_80); +} + +void func_80858F3C(PlayState* play, Player* this, void* anim) { + Player_AnimationPlayOnce(play, this, anim); +} + +void func_80858F5C(PlayState* play, Player* this, void* anim) { + Player_AnimationPlayLoop(play, this, anim); +} + +void func_80858F7C(PlayState* play, Player* this, void* anim) { + func_8082DB90(play, this, anim); +} + +void func_80858F9C(PlayState* play, Player* this, void* anim) { + func_8082DB60(play, this, anim); +} + +void func_80858FBC(PlayState* play, Player* this, void* anim) { + PlayerAnimation_Update(play, &this->skelAnime); +} + +void func_80858FE8(Player* this) { + if (this->skelAnime.animation == &gPlayerAnim_lost_horse_wait) { + Player_AnimSfx_PlayFloor(this, NA_SE_PL_SLIP_LEVEL - SFX_FLAG); + Player_PlaySfx(this, NA_SE_VO_LK_DRAGGED_DAMAGE - SFX_FLAG); + } +} + +void (*D_8085D990[])(PlayState*, Player*, void*) = { + /* 0 */ NULL, + /* 1 */ func_80858DB4, + /* 2 */ func_80858DDC, + /* 3 */ func_80858E40, + /* 4 */ func_80858E60, + /* 5 */ func_80858E80, + /* 6 */ func_80858EA0, + /* 7 */ func_80858EFC, + /* 8 */ func_80858F1C, + /* 9 */ func_80858F3C, + /* 10 */ func_80858F5C, + /* 11 */ func_80858FBC, + /* 12 */ func_80859028, + /* 13 */ func_808591BC, + /* 14 */ func_80858DFC, + /* 15 */ func_80858F7C, + /* 16 */ func_80858F9C, + /* 17 */ func_80859168, + /* 18 */ func_80859210, + /* 19 */ func_80858EC0, +}; + +AnimSfxEntry D_8085D9E0[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 34, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 45, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 51, NA_SE_PL_CALM_HIT, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 64, NA_SE_PL_CALM_HIT, STOP), +}; +AnimSfxEntry D_8085D9F0[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 7, NA_SE_VO_LI_DEMO_DAMAGE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 18, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 18, NA_SE_VO_LI_FREEZE, STOP), +}; +AnimSfxEntry D_8085D9FC[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 14, NA_SE_PL_LAND_GROUND, STOP), +}; +AnimSfxEntry D_8085DA00[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 6, NA_SE_PL_GET_UP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_VO_LK_WAKE_UP, STOP), +}; +AnimSfxEntry D_8085DA08[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 26, NA_SE_PL_LAND_GROUND, STOP), +}; +AnimSfxEntry D_8085DA0C[] = { + ANIMSFX(ANIMSFX_TYPE_8, 16, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 36, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA14[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 55, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_GENERAL, 55, NA_SE_VO_LK_CATCH_DEMO, STOP), +}; +AnimSfxEntry D_8085DA1C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 4, NA_SE_VO_LK_USING_UP_ENERGY, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 16, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 16, NA_SE_VO_LI_DAMAGE_S, STOP), +}; +AnimSfxEntry D_8085DA28[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 28, NA_SE_PL_LAND_GROUND, STOP), +}; +AnimSfxEntry D_8085DA2C[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 1, NA_SE_VO_LK_USING_UP_ENERGY, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_JUMP, 42, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 44, NA_SE_VO_LI_FALL_L, STOP), +}; +AnimSfxEntry D_8085DA38[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 1, NA_SE_PL_BOUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_DAMAGE_S, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_BY_AGE, 39, NA_SE_PL_LAND_GROUND, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 49, NA_SE_NONE, STOP), +}; + +// gPlayerAnim_cl_nigeru +AnimSfxEntry D_8085DA48[] = { + ANIMSFX(ANIMSFX_TYPE_6, 1, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 5, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA50[] = { + ANIMSFX(ANIMSFX_TYPE_6, 10, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 13, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 16, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 19, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 22, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR, 22, NA_SE_PL_SLIP, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_VOICE, 55, NA_SE_VO_LI_DAMAGE_S, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 62, NA_SE_NONE, STOP), +}; + +AnimSfxEntry D_8085DA70[] = { + ANIMSFX(ANIMSFX_TYPE_6, 42, NA_SE_NONE, CONTINUE), + ANIMSFX(ANIMSFX_TYPE_6, 48, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA78[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR, 2, NA_SE_PL_BOUND, STOP), +}; +AnimSfxEntry D_8085DA7C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 5, NA_SE_VO_LI_FREEZE, STOP), +}; +AnimSfxEntry D_8085DA80[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 1, NA_SE_VO_LI_FALL_L, STOP), +}; +AnimSfxEntry D_8085DA84[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 13, NA_SE_VO_LI_HANG, STOP), +}; +AnimSfxEntry D_8085DA88[] = { + ANIMSFX(ANIMSFX_TYPE_FLOOR_LAND, 26, NA_SE_NONE, STOP), +}; +AnimSfxEntry D_8085DA8C[] = { + ANIMSFX(ANIMSFX_TYPE_VOICE, 4, NA_SE_VO_LI_SURPRISE, STOP), +}; +AnimSfxEntry D_8085DA90[] = { + ANIMSFX(ANIMSFX_TYPE_GENERAL, 18, NA_SE_PL_SIT_ON_HORSE, STOP), +}; + +void func_80859028(PlayState* play, Player* this, void* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80858D48(play, this, anim); + this->unk_AE8 = 1; + } + + if (this->skelAnime.animation == &gPlayerAnim_okiagaru_tatu) { + Player_PlayAnimSfx(this, D_8085DA08); + } else if (this->skelAnime.animation == &gPlayerAnim_lost_horse) { + Player_PlayAnimSfx(this, D_8085DA14); + } else if (this->skelAnime.animation == &gPlayerAnim_sirimochi) { + Player_PlayAnimSfx(this, D_8085DA38); + } else if (this->skelAnime.animation == &gPlayerAnim_alink_somukeru) { + Player_PlayAnimSfx(this, D_8085DA7C); + } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa) { + Player_PlayAnimSfx(this, D_8085DA84); + } else if (this->skelAnime.animation == &gPlayerAnim_cl_umanoru) { + Player_PlayAnimSfx(this, D_8085DA90); + } else { + func_80858FE8(this); + } +} + +void func_80859168(PlayState* play, Player* this, void* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082E794(this); + func_8082DB60(play, this, anim); + } +} + +void func_808591BC(PlayState* play, Player* this, void* anim) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082EB18(play, this, anim); + this->unk_AE8 = 1; + } +} + +void func_80859210(PlayState* play, Player* this, void* arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + Player_PlayAnimSfx(this, arg2); +} + +void func_80859248(Player* this) { + if ((this->unk_398 == NULL) || (this->unk_398->update == NULL)) { + this->unk_398 = NULL; + } + this->targetedActor = this->unk_398; + if (this->unk_398 != NULL) { + this->actor.shape.rot.y = func_8083C62C(this, 0); + } +} + +void func_8085929C(PlayState* play, Player* this, UNK_TYPE arg2) { + this->stateFlags1 |= PLAYER_STATE1_8000000; + this->stateFlags2 |= PLAYER_STATE2_400; + this->stateFlags1 &= ~(PLAYER_STATE1_40000 | PLAYER_STATE1_80000); + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim); + this->linearVelocity = 0.0f; +} + +void func_80859300(PlayState* play, Player* this, UNK_TYPE arg2) { + this->actor.gravity = 0.0f; + + if (this->unk_AE7 == 0) { + if ((this->transformation == PLAYER_FORM_DEKU) || func_8083B3B4(play, this, NULL)) { + this->unk_AE7 = 1; + } else { + func_808477D0(play, this, NULL, fabsf(this->actor.velocity.y)); + Math_ScaledStepToS(&this->unk_AAA, -0x2710, 0x320); + func_8084748C(this, &this->actor.velocity.y, 4.0f, this->currentYaw); + } + } else { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE7 == 1) { + func_8082E634(play, this, &gPlayerAnim_link_swimer_swim_wait); + } else { + Player_AnimationPlayLoop(play, this, &gPlayerAnim_link_swimer_swim_wait); + } + } + func_808475B4(this); + func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); + } +} + +void func_80859414(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80859248(this); + + if (func_801242B4(this)) { + func_80859300(play, this, 0); + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { + func_8083216C(this, play); + } else if ((this->interactRangeActor != NULL) && (this->interactRangeActor->textId == 0xFFFF)) { + func_8083D23C(this, play); + } + } +} + +void func_808594D0(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_8085929C(play, this, 0); + } else { + PlayerAnimationHeader* anim = D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]; + + if ((this->unk_396 == 6) || (this->unk_396 == 0x2E)) { + Player_AnimationPlayOnce(play, this, anim); + } else { + func_8082E784(this); + PlayerAnimation_Change(play, &this->skelAnime, anim, 2.0f / 3.0f, 0.0f, Animation_GetLastFrame(anim), + ANIMMODE_LOOP, -4.0f); + } + Player_StopHorizontalMovement(this); + } +} + +void func_808595B8(PlayState* play, Player* this, UNK_TYPE arg2) { + if (func_80847880(play, this)) { + return; + } + + if ((this->csMode == PLAYER_CSMODE_20) && (play->csCtx.state == CS_STATE_IDLE)) { + func_800B7298(play, NULL, PLAYER_CSMODE_END); + } else if (this->stateFlags1 & PLAYER_STATE1_8000000) { + func_80859300(play, this, 0); + this->actor.velocity.y = 0.0f; + } else { + PlayerAnimation_Update(play, &this->skelAnime); + if (func_801240DC(this) || (this->stateFlags1 & PLAYER_STATE1_800)) { + func_8083216C(this, play); + } + } +} + +void func_8085968C(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->actor.id == ACTOR_EN_TEST3) { + func_80838830(this, OBJECT_GI_MSSA); + this->stateFlags1 |= PLAYER_STATE1_400; + } + + func_8082DB90(play, this, + (this->transformation == PLAYER_FORM_DEKU) ? &gPlayerAnim_pn_getA : &gPlayerAnim_link_demo_get_itemA); +} + +void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { + this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; + func_80151BB4(play, 0x1B); + Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); + } +} + +void func_8085978C(PlayState* play, Player* this, UNK_TYPE arg2) { + f32 linearVelocity; + s16 yaw; + + this->stateFlags1 &= ~PLAYER_STATE1_2000000; + + yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_3A0); + linearVelocity = this->linearVelocity; + this->actor.world.rot.y = yaw; + this->actor.shape.rot.y = yaw; + this->currentYaw = yaw; + if (linearVelocity <= 0.0f) { + this->linearVelocity = 0.1f; + } else if (linearVelocity > 2.5f) { + this->linearVelocity = 2.5f; + } + + if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) { + R_PLAY_FILL_SCREEN_ON = 45; + R_PLAY_FILL_SCREEN_R = 255; + R_PLAY_FILL_SCREEN_G = 255; + R_PLAY_FILL_SCREEN_B = 255; + R_PLAY_FILL_SCREEN_ALPHA = 0; + play_sound(NA_SE_SY_WHITE_OUT_T); + } +} + +void func_80859890(PlayState* play, Player* this, UNK_TYPE arg2) { + f32 sp24; + + if (R_PLAY_FILL_SCREEN_ON > 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ON = -64; + R_PLAY_FILL_SCREEN_ALPHA = 255; + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + this->actor.update = func_8012301C; + this->actor.draw = NULL; + this->unk_AE7 = 0; + } + } else if (R_PLAY_FILL_SCREEN_ON < 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ON = 0; + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + } else { + sp24 = 2.5f; + func_808411D4(play, this, &sp24, 0xA); + this->unk_AE8++; + if (this->unk_AE8 >= 0x15) { + this->csMode = PLAYER_CSMODE_10; + } + } +} + +void func_80859990(PlayState* play, Player* this, UNK_TYPE arg2) { + this->linearVelocity = 2.5f; + func_80835BF8(&this->actor.world.pos, this->actor.shape.rot.y, 180.0f, &this->unk_3A0); +} + +void func_808599DC(PlayState* play, Player* this, UNK_TYPE arg2) { + f32 sp1C = 2.5f; + + func_808411D4(play, this, &sp1C, 0xA); +} + +void func_80859A10(PlayState* play, Player* this, UNK_TYPE arg2) { + func_8083B23C(this, play); +} + +void func_80859A44(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80859248(this); + if (this->unk_AE8 != 0) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + Player_AnimationPlayLoop(play, this, func_8082EF54(this)); + this->unk_AE8 = 0; + } + func_8082FC60(this); + } else { + func_8083E958(play, this); + } +} + +void func_80859AD0(PlayState* play, Player* this, UNK_PTR arg2) { + func_80840F90(play, this, arg2, 0.0f, 0, 0); +} + +void func_80859AF8(PlayState* play, Player* this, UNK_PTR arg2) { + this->actor.shape.face = 0xF; + func_80840F90(play, this, arg2, 0.0f, 0, 0); +} + +void func_80859B28(PlayState* play, Player* this, UNK_PTR arg2) { + func_80840F90(play, this, arg2, 0.0f, 0, 1); +} + +void func_80859B54(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80858CC8(play, this, &gPlayerAnim_link_normal_okarina_start); + this->itemAction = PLAYER_IA_OCARINA; + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); +} + +void Player_Cutscene_Translate(PlayState* play, Player* this, CsCmdActorCue* playerAction) { + f32 startX = playerAction->startPos.x; + f32 startY = playerAction->startPos.y; + f32 startZ = playerAction->startPos.z; + f32 diffX = playerAction->endPos.x - startX; + f32 diffY = playerAction->endPos.y - startY; + f32 diffZ = playerAction->endPos.z - startZ; + f32 progress = (((f32)(play->csCtx.curFrame - playerAction->startFrame)) / + ((f32)(playerAction->endFrame - playerAction->startFrame))); + + this->actor.world.pos.x = (diffX * progress) + startX; + this->actor.world.pos.y = (diffY * progress) + startY; + this->actor.world.pos.z = (diffZ * progress) + startZ; +} + +void func_80859C60(PlayState* play, Player* this, void* arg2) { + if (arg2 != NULL) { + Player_Cutscene_Translate(play, this, arg2); + } + + PlayerAnimation_Update(play, &this->skelAnime); +} + +void func_80859CA0(PlayState* play, Player* this, s32 arg2) { + func_8082E514(play, this, D_8085BE84[PLAYER_ANIMGROUP_43][this->modelAnimType]); + Player_StopHorizontalMovement(this); +} + +void func_80859CE0(PlayState* play, Player* this, s32 arg2) { + this->actor.draw = Player_Draw; +} + +void func_80859CFC(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80841358(play, this, false); + func_8082DB90(play, this, &gPlayerAnim_link_demo_return_to_past); +} + +void func_80859D44(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); +} + +struct_8085DA94 D_8085DA94[PLAYER_CSMODE_MAX] = { + /* PLAYER_CSMODE_0 */ { 0, { NULL } }, + /* PLAYER_CSMODE_1 */ { -1, { func_808594D0 } }, + /* PLAYER_CSMODE_2 */ { 0, { NULL } }, + /* PLAYER_CSMODE_3 */ { 0, { NULL } }, + /* PLAYER_CSMODE_4 */ { 3, { &gPlayerAnim_link_demo_bikkuri } }, + /* PLAYER_CSMODE_5 */ { 0, { NULL } }, + /* PLAYER_CSMODE_END */ { 0, { NULL } }, + /* PLAYER_CSMODE_WAIT */ { -1, { func_808594D0 } }, + /* PLAYER_CSMODE_8 */ { 2, { &gPlayerAnim_link_demo_furimuki } }, + /* PLAYER_CSMODE_9 */ { -1, { func_8085978C } }, + /* PLAYER_CSMODE_10 */ { 3, { &gPlayerAnim_link_demo_warp } }, + /* PLAYER_CSMODE_11 */ { 5, { &gPlayerAnim_clink_demo_standup } }, + /* PLAYER_CSMODE_12 */ { 7, { &gPlayerAnim_clink_demo_standup_wait } }, + /* PLAYER_CSMODE_13 */ { 2, { &gPlayerAnim_link_demo_baru_op3 } }, + /* PLAYER_CSMODE_14 */ { 0, { NULL } }, + /* PLAYER_CSMODE_15 */ { 3, { &gPlayerAnim_link_demo_jibunmiru } }, + /* PLAYER_CSMODE_16 */ { -1, { func_80859B54 } }, + /* PLAYER_CSMODE_17 */ { 2, { &gPlayerAnim_link_normal_okarina_end } }, + /* PLAYER_CSMODE_18 */ { 16, { &gPlayerAnim_link_normal_hang_up_down } }, + /* PLAYER_CSMODE_19 */ { -1, { func_80859CA0 } }, + /* PLAYER_CSMODE_20 */ { -1, { func_808594D0 } }, + /* PLAYER_CSMODE_21 */ { 3, { &gPlayerAnim_clink_demo_mimawasi } }, + /* PLAYER_CSMODE_22 */ { 6, { &gPlayerAnim_om_get_mae } }, + /* PLAYER_CSMODE_23 */ { 3, { &gPlayerAnim_link_demo_look_hand } }, + /* PLAYER_CSMODE_24 */ { 3, { &gPlayerAnim_link_normal_wait_typeB_20f } }, + /* PLAYER_CSMODE_25 */ { -1, { func_80859CFC } }, + /* PLAYER_CSMODE_26 */ { -1, { func_8085A66C } }, + /* PLAYER_CSMODE_27 */ { 3, { &gPlayerAnim_link_demo_zeldamiru } }, + /* PLAYER_CSMODE_28 */ { 3, { &gPlayerAnim_link_demo_kenmiru1 } }, + /* PLAYER_CSMODE_29 */ { 3, { &gPlayerAnim_link_demo_kenmiru2 } }, + /* PLAYER_CSMODE_30 */ { 3, { &gPlayerAnim_link_demo_kenmiru2_modori } }, + /* PLAYER_CSMODE_31 */ { 6, { &gameplay_keep_Linkanim_00D310 } }, + /* PLAYER_CSMODE_32 */ { -1, { func_80859FCC } }, + /* PLAYER_CSMODE_33 */ { 3, { &gPlayerAnim_demo_rakka } }, + /* PLAYER_CSMODE_34 */ { 4, { &gPlayerAnim_demo_pikupiku } }, + /* PLAYER_CSMODE_35 */ { 3, { &gameplay_keep_Linkanim_00D2B8 } }, + /* PLAYER_CSMODE_36 */ { -1, { func_8085A120 } }, + /* PLAYER_CSMODE_37 */ { -1, { func_8085A19C } }, + /* PLAYER_CSMODE_38 */ { 6, { &gameplay_keep_Linkanim_00D278 } }, + /* PLAYER_CSMODE_39 */ { 6, { &gameplay_keep_Linkanim_00D288 } }, + /* PLAYER_CSMODE_40 */ { 5, { &gPlayerAnim_rakuba } }, + /* PLAYER_CSMODE_41 */ { 5, { &gPlayerAnim_bajyo_furikaeru } }, + /* PLAYER_CSMODE_42 */ { 5, { &gPlayerAnim_okiagaru } }, + /* PLAYER_CSMODE_43 */ { 5, { &gPlayerAnim_okiagaru_tatu } }, + /* PLAYER_CSMODE_44 */ { 7, { &gPlayerAnim_bajyo_walk } }, + /* PLAYER_CSMODE_45 */ { 5, { &gPlayerAnim_rakka } }, + /* PLAYER_CSMODE_46 */ { 5, { &gPlayerAnim_sirimochi } }, + /* PLAYER_CSMODE_47 */ { 5, { &gPlayerAnim_spotlight } }, + /* PLAYER_CSMODE_48 */ { 3, { &gPlayerAnim_al_hensin } }, + /* PLAYER_CSMODE_49 */ { 5, { &gPlayerAnim_dl_jibunmiru } }, + /* PLAYER_CSMODE_50 */ { 5, { &gPlayerAnim_vs_yousei } }, + /* PLAYER_CSMODE_51 */ { 5, { &gPlayerAnim_urusai } }, + /* PLAYER_CSMODE_52 */ { 5, { &gPlayerAnim_okarinatori } }, + /* PLAYER_CSMODE_53 */ { 5, { &gPlayerAnim_lost_horse } }, + /* PLAYER_CSMODE_54 */ { 4, { &gPlayerAnim_lost_horse_wait } }, + /* PLAYER_CSMODE_55 */ { 5, { &gPlayerAnim_lost_horse2 } }, + /* PLAYER_CSMODE_56 */ { 14, { &gPlayerAnim_okarinatori } }, + /* PLAYER_CSMODE_57 */ { 5, { &gPlayerAnim_cl_tobikakaru } }, + /* PLAYER_CSMODE_58 */ { -1, { func_8085978C } }, + /* PLAYER_CSMODE_59 */ { 5, { &gameplay_keep_Linkanim_00D0A0 } }, + /* PLAYER_CSMODE_60 */ { 2, { &gPlayerAnim_cl_furafura } }, + /* PLAYER_CSMODE_61 */ { 7, { &gPlayerAnim_cl_nigeru } }, + /* PLAYER_CSMODE_62 */ { 5, { &gPlayerAnim_cl_ononoki } }, + /* PLAYER_CSMODE_63 */ { 3, { &gPlayerAnim_al_gaku } }, + /* PLAYER_CSMODE_64 */ { 3, { &gPlayerAnim_al_fuwafuwa } }, + /* PLAYER_CSMODE_65 */ { 3, { &gPlayerAnim_al_fuwafuwa_modori } }, + /* PLAYER_CSMODE_66 */ { 3, { &gPlayerAnim_al_elf_tobidasi } }, + /* PLAYER_CSMODE_67 */ { -1, { func_8085968C } }, + /* PLAYER_CSMODE_68 */ { -1, { func_8085A24C } }, + /* PLAYER_CSMODE_69 */ { -1, { func_8085A330 } }, + /* PLAYER_CSMODE_70 */ { 7, { &gPlayerAnim_cl_tewofuru } }, + /* PLAYER_CSMODE_71 */ { 5, { &gPlayerAnim_cl_jibun_miru } }, + /* PLAYER_CSMODE_72 */ { 5, { &gPlayerAnim_cl_hoo } }, + /* PLAYER_CSMODE_73 */ { 3, { &gPlayerAnim_al_yareyare } }, + /* PLAYER_CSMODE_74 */ { 3, { &gPlayerAnim_al_yes } }, + /* PLAYER_CSMODE_75 */ { 3, { &gPlayerAnim_al_no } }, + /* PLAYER_CSMODE_76 */ { 3, { &gPlayerAnim_al_unun } }, + /* PLAYER_CSMODE_77 */ { 7, { &gPlayerAnim_dl_yusaburu } }, + /* PLAYER_CSMODE_78 */ { 5, { &gPlayerAnim_dl_kokeru } }, + /* PLAYER_CSMODE_79 */ { 3, { &gPlayerAnim_alink_powerup } }, + /* PLAYER_CSMODE_80 */ { 4, { &gPlayerAnim_alink_rakkatyu } }, + /* PLAYER_CSMODE_81 */ { 3, { &gPlayerAnim_alink_kyoro } }, + /* PLAYER_CSMODE_82 */ { 4, { &gPlayerAnim_alink_yurayura } }, + /* PLAYER_CSMODE_83 */ { 3, { &gPlayerAnim_alink_somukeru } }, + /* PLAYER_CSMODE_84 */ { 5, { &gPlayerAnim_alink_fukitobu } }, + /* PLAYER_CSMODE_85 */ { 3, { &gameplay_keep_Linkanim_00CFC8 } }, + /* PLAYER_CSMODE_86 */ { 4, { &gPlayerAnim_alink_tereru } }, + /* PLAYER_CSMODE_87 */ { 5, { &gameplay_keep_Linkanim_00D1D0 } }, + /* PLAYER_CSMODE_88 */ { 3, { &gPlayerAnim_alink_kaitenmiss } }, + /* PLAYER_CSMODE_89 */ { 4, { &gameplay_keep_Linkanim_00CFC0 } }, + /* PLAYER_CSMODE_90 */ { 4, { &gameplay_keep_Linkanim_00CFB8 } }, + /* PLAYER_CSMODE_91 */ { 4, { &gameplay_keep_Linkanim_00D050 } }, + /* PLAYER_CSMODE_92 */ { 4, { &gameplay_keep_Linkanim_00D048 } }, + /* PLAYER_CSMODE_93 */ { -1, { func_8085A8C4 } }, + /* PLAYER_CSMODE_94 */ { 3, { &gPlayerAnim_alink_ozigi } }, + /* PLAYER_CSMODE_95 */ { 3, { &gPlayerAnim_alink_ozigi_modori } }, + /* PLAYER_CSMODE_96 */ { 9, { &gPlayerAnim_link_normal_back_downA } }, + /* PLAYER_CSMODE_97 */ { -1, { func_8085A530 } }, + /* PLAYER_CSMODE_98 */ { 15, { &gPlayerAnim_cl_maskoff } }, + /* PLAYER_CSMODE_99 */ { 7, { &gPlayerAnim_cl_kubisime } }, + /* PLAYER_CSMODE_100 */ { 3, { &gPlayerAnim_alink_ee } }, + /* PLAYER_CSMODE_101 */ { 3, { &gameplay_keep_Linkanim_00CFF0 } }, + /* PLAYER_CSMODE_102 */ { -1, { func_8085A768 } }, + /* PLAYER_CSMODE_103 */ { -1, { func_8085AA60 } }, + /* PLAYER_CSMODE_104 */ { 5, { &gPlayerAnim_cl_dakisime } }, + /* PLAYER_CSMODE_105 */ { 5, { &gPlayerAnim_kf_omen } }, + /* PLAYER_CSMODE_106 */ { 5, { &gPlayerAnim_kf_dakiau } }, + /* PLAYER_CSMODE_107 */ { 5, { &gPlayerAnim_kf_hanare } }, + /* PLAYER_CSMODE_108 */ { 5, { &gPlayerAnim_kf_miseau } }, + /* PLAYER_CSMODE_109 */ { 5, { &gPlayerAnim_kf_awase } }, + /* PLAYER_CSMODE_110 */ { 7, { &gPlayerAnim_kf_tetunagu_loop } }, + /* PLAYER_CSMODE_111 */ { 3, { &gPlayerAnim_link_keirei } }, + /* PLAYER_CSMODE_112 */ { 5, { &gPlayerAnim_cl_umanoru } }, + /* PLAYER_CSMODE_113 */ { 5, { &gPlayerAnim_cl_wakare } }, + /* PLAYER_CSMODE_114 */ { 4, { &gPlayerAnim_alink_dance_loop } }, + /* PLAYER_CSMODE_115 */ { 2, { &gPlayerAnim_link_demo_goma_furimuki } }, + /* PLAYER_CSMODE_116 */ { 7, { &gPlayerAnim_link_uma_anim_fastrun } }, + /* PLAYER_CSMODE_117 */ { 5, { &gPlayerAnim_cl_umamiage } }, + /* PLAYER_CSMODE_118 */ { 7, { &gPlayerAnim_demo_suwari1 } }, + /* PLAYER_CSMODE_119 */ { 7, { &gPlayerAnim_demo_suwari2 } }, + /* PLAYER_CSMODE_120 */ { 7, { &gPlayerAnim_demo_suwari3 } }, + /* PLAYER_CSMODE_121 */ { -1, { func_80859990 } }, + /* PLAYER_CSMODE_122 */ { 0, { NULL } }, + /* PLAYER_CSMODE_123 */ { -1, { func_80859A10 } }, + /* PLAYER_CSMODE_124 */ { 7, { &gPlayerAnim_clink_demo_get1 } }, + /* PLAYER_CSMODE_125 */ { 5, { &gPlayerAnim_clink_demo_get2 } }, + /* PLAYER_CSMODE_126 */ { 5, { &gPlayerAnim_clink_demo_get3 } }, + /* PLAYER_CSMODE_127 */ { 3, { &gPlayerAnim_link_demo_gurad } }, + /* PLAYER_CSMODE_128 */ { 4, { &gPlayerAnim_link_demo_sita_wait } }, + /* PLAYER_CSMODE_129 */ { 3, { &gPlayerAnim_L_1kyoro } }, + /* PLAYER_CSMODE_130 */ { 3, { &gPlayerAnim_L_2kyoro } }, + /* PLAYER_CSMODE_131 */ { 3, { &gPlayerAnim_L_sagaru } }, + /* PLAYER_CSMODE_132 */ { 3, { &gPlayerAnim_L_bouzen } }, + /* PLAYER_CSMODE_133 */ { 3, { &gPlayerAnim_L_kamaeru } }, + /* PLAYER_CSMODE_134 */ { 3, { &gPlayerAnim_L_hajikareru } }, + /* PLAYER_CSMODE_135 */ { 3, { &gPlayerAnim_L_ken_miru } }, + /* PLAYER_CSMODE_136 */ { 3, { &gPlayerAnim_L_mukinaoru } }, + /* PLAYER_CSMODE_137 */ { 3, { &gPlayerAnim_link_demo_return_to_past } }, + /* PLAYER_CSMODE_138 */ { 3, { &gPlayerAnim_link_last_hit_motion1 } }, + /* PLAYER_CSMODE_139 */ { 3, { &gPlayerAnim_link_last_hit_motion2 } }, +}; + +struct_8085DA94 D_8085DEF4[PLAYER_CSMODE_MAX] = { + /* PLAYER_CSMODE_0 */ { 0, { NULL } }, + /* PLAYER_CSMODE_1 */ { -1, { func_80859414 } }, + /* PLAYER_CSMODE_2 */ { -1, { func_80859AD0 } }, + /* PLAYER_CSMODE_3 */ { -1, { func_80859B28 } }, + /* PLAYER_CSMODE_4 */ { 11, { NULL } }, + /* PLAYER_CSMODE_5 */ { -1, { func_8085ADA0 } }, + /* PLAYER_CSMODE_END */ { -1, { func_8085AACC } }, + /* PLAYER_CSMODE_WAIT */ { -1, { func_808595B8 } }, + /* PLAYER_CSMODE_8 */ { 18, { D_8085DA70 } }, + /* PLAYER_CSMODE_9 */ { -1, { func_80859890 } }, + /* PLAYER_CSMODE_10 */ { -1, { func_80859C60 } }, + /* PLAYER_CSMODE_11 */ { 18, { D_8085D9E0 } }, + /* PLAYER_CSMODE_12 */ { 11, { NULL } }, + /* PLAYER_CSMODE_13 */ { 11, { NULL } }, + /* PLAYER_CSMODE_14 */ { 0, { NULL } }, + /* PLAYER_CSMODE_15 */ { 11, { NULL } }, + /* PLAYER_CSMODE_16 */ { 17, { &gPlayerAnim_link_normal_okarina_swing } }, + /* PLAYER_CSMODE_17 */ { 11, { NULL } }, + /* PLAYER_CSMODE_18 */ { 11, { NULL } }, + /* PLAYER_CSMODE_19 */ { -1, { func_8085A710 } }, + /* PLAYER_CSMODE_20 */ { -1, { func_808595B8 } }, + /* PLAYER_CSMODE_21 */ { 12, { &gPlayerAnim_clink_demo_mimawasi_wait } }, + /* PLAYER_CSMODE_22 */ { -1, { func_80859D70 } }, + /* PLAYER_CSMODE_23 */ { 12, { &gPlayerAnim_link_demo_look_hand_wait } }, + /* PLAYER_CSMODE_24 */ { 11, { NULL } }, + /* PLAYER_CSMODE_25 */ { 11, { NULL } }, + /* PLAYER_CSMODE_26 */ { -1, { func_8085A6C0 } }, + /* PLAYER_CSMODE_27 */ { 12, { &gPlayerAnim_link_demo_zeldamiru_wait } }, + /* PLAYER_CSMODE_28 */ { 12, { &gPlayerAnim_link_demo_kenmiru1_wait } }, + /* PLAYER_CSMODE_29 */ { 12, { &gPlayerAnim_link_demo_kenmiru2_wait } }, + /* PLAYER_CSMODE_30 */ { 12, { &gPlayerAnim_demo_link_nwait } }, + /* PLAYER_CSMODE_31 */ { 12, { &gameplay_keep_Linkanim_00D318 } }, + /* PLAYER_CSMODE_32 */ { -1, { func_80859FF4 } }, + /* PLAYER_CSMODE_33 */ { -1, { Player_Cutscene_TranslateReverse } }, + /* PLAYER_CSMODE_34 */ { 11, { NULL } }, + /* PLAYER_CSMODE_35 */ { 12, { &gameplay_keep_Linkanim_00D2C0 } }, + /* PLAYER_CSMODE_36 */ { -1, { func_8085A144 } }, + /* PLAYER_CSMODE_37 */ { -1, { func_8085A1D4 } }, + /* PLAYER_CSMODE_38 */ { 12, { &gameplay_keep_Linkanim_00D280 } }, + /* PLAYER_CSMODE_39 */ { 12, { &gameplay_keep_Linkanim_00D290 } }, + /* PLAYER_CSMODE_40 */ { 18, { D_8085D9F0 } }, + /* PLAYER_CSMODE_41 */ { 11, { NULL } }, + /* PLAYER_CSMODE_42 */ { 18, { D_8085DA00 } }, + /* PLAYER_CSMODE_43 */ { 13, { &gPlayerAnim_okiagaru_wait } }, + /* PLAYER_CSMODE_44 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_45 */ { 18, { D_8085DA2C } }, + /* PLAYER_CSMODE_46 */ { 12, { &gPlayerAnim_sirimochi_wait } }, + /* PLAYER_CSMODE_47 */ { 12, { &gPlayerAnim_spotlight_wait } }, + /* PLAYER_CSMODE_48 */ { 12, { &gPlayerAnim_al_hensin_loop } }, + /* PLAYER_CSMODE_49 */ { 12, { &gPlayerAnim_dl_jibunmiru_wait } }, + /* PLAYER_CSMODE_50 */ { 18, { D_8085DA50 } }, + /* PLAYER_CSMODE_51 */ { 11, { NULL } }, + /* PLAYER_CSMODE_52 */ { 18, { D_8085D9FC } }, + /* PLAYER_CSMODE_53 */ { 12, { &gPlayerAnim_lost_horse_wait } }, + /* PLAYER_CSMODE_54 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_55 */ { 18, { D_8085DA1C } }, + /* PLAYER_CSMODE_56 */ { 11, { NULL } }, + /* PLAYER_CSMODE_57 */ { 18, { D_8085DA0C } }, + /* PLAYER_CSMODE_58 */ { -1, { func_808599DC } }, + /* PLAYER_CSMODE_59 */ { 11, { NULL } }, + /* PLAYER_CSMODE_60 */ { 18, { D_8085DA28 } }, + /* PLAYER_CSMODE_61 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_62 */ { 11, { NULL } }, + /* PLAYER_CSMODE_63 */ { 11, { NULL } }, + /* PLAYER_CSMODE_64 */ { 12, { &gPlayerAnim_al_fuwafuwa_loop } }, + /* PLAYER_CSMODE_65 */ { -1, { func_8085A40C } }, + /* PLAYER_CSMODE_66 */ { 11, { NULL } }, + /* PLAYER_CSMODE_67 */ { -1, { func_80859708 } }, + /* PLAYER_CSMODE_68 */ { -1, { func_8085A2AC } }, + /* PLAYER_CSMODE_69 */ { 11, { NULL } }, + /* PLAYER_CSMODE_70 */ { 11, { NULL } }, + /* PLAYER_CSMODE_71 */ { -1, { func_8085A40C } }, + /* PLAYER_CSMODE_72 */ { 11, { NULL } }, + /* PLAYER_CSMODE_73 */ { 11, { NULL } }, + /* PLAYER_CSMODE_74 */ { 11, { NULL } }, + /* PLAYER_CSMODE_75 */ { 11, { NULL } }, + /* PLAYER_CSMODE_76 */ { 11, { NULL } }, + /* PLAYER_CSMODE_77 */ { 11, { NULL } }, + /* PLAYER_CSMODE_78 */ { 18, { D_8085DA78 } }, + /* PLAYER_CSMODE_79 */ { 12, { &gPlayerAnim_alink_powerup_loop } }, + /* PLAYER_CSMODE_80 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_81 */ { 12, { &gPlayerAnim_alink_kyoro_loop } }, + /* PLAYER_CSMODE_82 */ { 11, { NULL } }, + /* PLAYER_CSMODE_83 */ { 12, { &gPlayerAnim_alink_somukeru_loop } }, + /* PLAYER_CSMODE_84 */ { 18, { D_8085DA80 } }, + /* PLAYER_CSMODE_85 */ { 12, { &gameplay_keep_Linkanim_00CFD0 } }, + /* PLAYER_CSMODE_86 */ { 11, { NULL } }, + /* PLAYER_CSMODE_87 */ { 11, { NULL } }, + /* PLAYER_CSMODE_88 */ { 11, { NULL } }, + /* PLAYER_CSMODE_89 */ { 11, { NULL } }, + /* PLAYER_CSMODE_90 */ { 11, { NULL } }, + /* PLAYER_CSMODE_91 */ { 11, { NULL } }, + /* PLAYER_CSMODE_92 */ { 11, { NULL } }, + /* PLAYER_CSMODE_93 */ { -1, { func_8085A940 } }, + /* PLAYER_CSMODE_94 */ { 12, { &gPlayerAnim_alink_ozigi_loop } }, + /* PLAYER_CSMODE_95 */ { 11, { NULL } }, + /* PLAYER_CSMODE_96 */ { -1, { func_8085A4A4 } }, + /* PLAYER_CSMODE_97 */ { -1, { func_8085A5DC } }, + /* PLAYER_CSMODE_98 */ { -1, { func_8085AA84 } }, + /* PLAYER_CSMODE_99 */ { 11, { NULL } }, + /* PLAYER_CSMODE_100 */ { 12, { &gPlayerAnim_alink_ee_loop } }, + /* PLAYER_CSMODE_101 */ { 12, { &gameplay_keep_Linkanim_00CFF8 } }, + /* PLAYER_CSMODE_102 */ { -1, { func_8085A7C0 } }, + /* PLAYER_CSMODE_103 */ { 11, { NULL } }, + /* PLAYER_CSMODE_104 */ { 13, { &gPlayerAnim_cl_dakisime_loop } }, + /* PLAYER_CSMODE_105 */ { 13, { &gPlayerAnim_kf_omen_loop } }, + /* PLAYER_CSMODE_106 */ { 13, { &gPlayerAnim_kf_dakiau_loop } }, + /* PLAYER_CSMODE_107 */ { 13, { &gPlayerAnim_kf_hanare_loop } }, + /* PLAYER_CSMODE_108 */ { 11, { NULL } }, + /* PLAYER_CSMODE_109 */ { 11, { NULL } }, + /* PLAYER_CSMODE_110 */ { 11, { NULL } }, + /* PLAYER_CSMODE_111 */ { 12, { &gPlayerAnim_link_kei_wait } }, + /* PLAYER_CSMODE_112 */ { 13, { &gPlayerAnim_cl_umanoru_loop } }, + /* PLAYER_CSMODE_113 */ { 13, { &gPlayerAnim_cl_wakare_loop } }, + /* PLAYER_CSMODE_114 */ { 11, { NULL } }, + /* PLAYER_CSMODE_115 */ { -1, { func_8085AA10 } }, + /* PLAYER_CSMODE_116 */ { 11, { NULL } }, + /* PLAYER_CSMODE_117 */ { -1, { func_8085A364 } }, + /* PLAYER_CSMODE_118 */ { 11, { NULL } }, + /* PLAYER_CSMODE_119 */ { 11, { NULL } }, + /* PLAYER_CSMODE_120 */ { 11, { NULL } }, + /* PLAYER_CSMODE_121 */ { -1, { func_808599DC } }, + /* PLAYER_CSMODE_122 */ { -1, { func_80859AF8 } }, + /* PLAYER_CSMODE_123 */ { -1, { func_80859A44 } }, + /* PLAYER_CSMODE_124 */ { 11, { NULL } }, + /* PLAYER_CSMODE_125 */ { 11, { NULL } }, + /* PLAYER_CSMODE_126 */ { 11, { NULL } }, + /* PLAYER_CSMODE_127 */ { 12, { &gPlayerAnim_link_demo_gurad_wait } }, + /* PLAYER_CSMODE_128 */ { 11, { NULL } }, + /* PLAYER_CSMODE_129 */ { 12, { &gPlayerAnim_L_kw } }, + /* PLAYER_CSMODE_130 */ { 11, { NULL } }, + /* PLAYER_CSMODE_131 */ { 11, { NULL } }, + /* PLAYER_CSMODE_132 */ { 11, { NULL } }, + /* PLAYER_CSMODE_133 */ { 11, { NULL } }, + /* PLAYER_CSMODE_134 */ { -1, { func_80859D44 } }, + /* PLAYER_CSMODE_135 */ { 11, { NULL } }, + /* PLAYER_CSMODE_136 */ { 12, { &gPlayerAnim_L_kennasi_w } }, + /* PLAYER_CSMODE_137 */ { -1, { func_80859EBC } }, + /* PLAYER_CSMODE_138 */ { -1, { func_80859F4C } }, + /* PLAYER_CSMODE_139 */ { -1, { func_80859F4C } }, +}; + +PlayerAnimationHeader* D_8085E354[PLAYER_FORM_MAX] = { + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_FIERCE_DEITY + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_GORON + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_ZORA + &gPlayerAnim_L_okarina_get, // PLAYER_FORM_DEKU + &gPlayerAnim_om_get, // PLAYER_FORM_HUMAN +}; + +struct_8085E368 D_8085E368[PLAYER_FORM_MAX] = { + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_FIERCE_DEITY + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_GORON + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_ZORA + { { -200, 700, 100 }, { 800, 600, 800 } }, // PLAYER_FORM_DEKU + { { -200, 500, 0 }, { 600, 400, 600 } }, // PLAYER_FORM_HUMAN +}; + +Color_RGBA8 D_8085E3A4 = { 255, 255, 255, 0 }; +Color_RGBA8 D_8085E3A8 = { 0, 128, 128, 0 }; + +void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) { + struct_8085E368* posInfo; + Vec3f effectPos; + Vec3f randPos; + + func_808591BC(play, this, D_8085E354[this->transformation]); + + if (this->rightHandType != 0xFF) { + this->rightHandType = 0xFF; + } else { + posInfo = &D_8085E368[this->transformation]; + randPos.x = randPlusMinusPoint5Scaled(posInfo->range.x) + posInfo->base.x; + randPos.y = randPlusMinusPoint5Scaled(posInfo->range.y) + posInfo->base.y; + randPos.z = randPlusMinusPoint5Scaled(posInfo->range.z) + posInfo->base.z; + SkinMatrix_Vec3fMtxFMultXYZ(&this->shieldMf, &randPos, &effectPos); + EffectSsKirakira_SpawnDispersed(play, &effectPos, &gZeroVec3f, &gZeroVec3f, &D_8085E3A4, &D_8085E3A8, 600, -10); + } +} + +void func_80859EBC(PlayState* play, Player* this, s32 arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8085AACC(play, this, arg2); + } else if (this->unk_AE8 == 0) { + Item_Give(play, ITEM_SWORD_RAZOR); + func_80841358(play, this, false); + } else { + func_808484CC(this); + } +} + +void func_80859F4C(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8083FCF0(play, this, 0.0f, 99.0f, this->skelAnime.endFrame - 8.0f); + } + if (this->heldItemAction != PLAYER_IA_SWORD_GILDED) { + func_80841358(play, this, true); + } +} + +void func_80859FCC(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->transformation != PLAYER_FORM_DEKU) { + gSaveContext.save.playerForm = PLAYER_FORM_DEKU; + } +} + +void func_80859FF4(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + if (gSaveContext.save.playerForm != this->transformation) { + this->actor.update = func_8012301C; + this->actor.draw = NULL; + } +} + +void Player_Cutscene_TranslateReverse(PlayState* play, Player* this, void* arg) { + CsCmdActorCue* playerAction = arg; + f32 xEnd = playerAction->endPos.x; + f32 yEnd = playerAction->endPos.y; + f32 zEnd = playerAction->endPos.z; + f32 xDiff; + f32 yDiff; + f32 zDiff; + f32 progress; + + xDiff = playerAction->startPos.x - xEnd; + yDiff = playerAction->startPos.y - yEnd; + zDiff = playerAction->startPos.z - zEnd; + + progress = ((f32)(playerAction->endFrame - play->csCtx.curFrame)) / + ((f32)(playerAction->endFrame - playerAction->startFrame)); + + this->actor.world.pos.x = (xDiff * progress) + xEnd; + this->actor.world.pos.y = (yDiff * progress) + yEnd; + this->actor.world.pos.z = (zDiff * progress) + zEnd; + PlayerAnimation_Update(play, &this->skelAnime); +} + +void func_8085A120(PlayState* play, Player* this, UNK_TYPE arg2) { + if (this->transformation != PLAYER_FORM_FIERCE_DEITY) { + gSaveContext.save.playerForm = PLAYER_FORM_FIERCE_DEITY; + } +} + +void func_8085A144(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + if (gSaveContext.save.playerForm != this->transformation) { + this->actor.update = func_8012301C; + this->actor.draw = NULL; + } +} + +void func_8085A19C(PlayState* play, Player* this, UNK_TYPE arg2) { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_demo_rakka); + this->unk_AAA = -0x8000; +} + +void func_8085A1D4(PlayState* play, Player* this, UNK_TYPE arg2) { + PlayerAnimation_Update(play, &this->skelAnime); + this->actor.gravity = 0.0f; + Math_StepToF(&this->actor.velocity.y, -this->actor.terminalVelocity, -((f32)REG(68) / 100.0f)); +} + +void func_8085A24C(PlayState* play, Player* this, UNK_TYPE arg2) { + func_8082DB90(play, this, D_8085D17C[this->transformation]); + this->itemAction = PLAYER_IA_OCARINA; + Player_SetModels(this, Player_ActionToModelGroup(this, this->itemAction)); +} + +void func_8085A2AC(PlayState* play, Player* this, UNK_TYPE arg2) { + if ((PlayerAnimation_Update(play, &this->skelAnime)) && + (this->skelAnime.animation == D_8085D17C[this->transformation])) { + func_808525C4(play, this); + return; + } + if (this->unk_AE8 != 0) { + func_8085255C(play, this); + } +} + +void func_8085A330(PlayState* play, Player* this, UNK_TYPE arg2) { + Player_AnimationPlayOnceReverse(play, this, D_8085D17C[this->transformation]); +} + +void func_8085A364(PlayState* play, Player* this, void* arg2) { + Player_Cutscene_Translate(play, this, arg2); + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_8082EB18(play, this, &gPlayerAnim_cl_umamiage_loop); + } + + if (this->skelAnime.animation == &gPlayerAnim_cl_nigeru) { + Player_PlayAnimSfx(this, D_8085DA48); + } else if (this->skelAnime.animation == &gPlayerAnim_alink_rakkatyu) { + func_800B8F98(&this->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); + } else { + func_80858FE8(this); + } +} + +void func_8085A40C(PlayState* play, Player* this, void* arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + func_80859CA0(play, this, arg2); + } else if (this->skelAnime.animation == &gPlayerAnim_al_fuwafuwa_modori) { + Player_PlayAnimSfx(this, D_8085DA88); + } else if (this->skelAnime.animation == &gPlayerAnim_cl_jibun_miru) { + Player_PlayAnimSfx(this, D_8085DA8C); + } +} + +void func_8085A4A4(PlayState* play, Player* this, void* arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (this->unk_AE8 == 0) && + (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_back_downB); + this->unk_AE8 = 1; + } + if (this->unk_AE8 != 0) { + func_80832F24(this); + } +} + +void func_8085A530(PlayState* play, Player* this, void* arg2) { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_normal_give_other, 1.0f, + (play->sceneId == SCENE_ALLEY) ? IREG(56) : 0.0f, + Animation_GetLastFrame(&gPlayerAnim_link_normal_give_other), ANIMMODE_ONCE, -8.0f); +} + +void func_8085A5DC(PlayState* play, Player* this, void* arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8++ >= 0x15) { + PlayerAnimation_Change(play, &this->skelAnime, &gPlayerAnim_pz_wait, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, + -16.0f); + } + } +} + +void func_8085A66C(PlayState* play, Player* this, void* arg2) { + if (func_801242B4(this)) { + func_8085929C(play, this, 0); + } else { + func_80858E40(play, this, &gPlayerAnim_link_demo_kousan); + } +} + +void func_8085A6C0(PlayState* play, Player* this, void* anim) { + if (func_801242B4(this)) { + func_80859300(play, this, 0); + } else { + func_80858FBC(play, this, anim); + } +} + +void func_8085A710(PlayState* play, Player* this, void* anim) { + func_80858FBC(play, this, anim); + if (func_8083D23C(this, play)) { + play->csCtx.state = CS_STATE_STOP; + CutsceneManager_Stop(CutsceneManager_GetCurrentCsId()); + } +} + +void func_8085A768(PlayState* play, Player* this, void* arg2) { + func_80838830(this, OBJECT_GI_RESERVE_C_01); + func_80858E40(play, this, &gPlayerAnim_link_normal_give_other); + this->stateFlags2 &= ~PLAYER_STATE2_1000000; +} + +void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + if (this->unk_AE8 == 0) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) || + (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) { + this->getItemDrawIdPlusOne = GID_NONE + 1; + this->unk_AE8 = -1; + } else { + this->getItemDrawIdPlusOne = GID_PENDANT_OF_MEMORIES + 1; + } + } else if (this->unk_AE8 < 0) { + if (Actor_HasParent(&this->actor, play)) { + this->actor.parent = NULL; + this->unk_AE8 = 1; + } else { + Actor_OfferGetItem(&this->actor, play, GI_PENDANT_OF_MEMORIES, 9999.9f, 9999.9f); + } + } + } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { + SET_WEEKEVENTREG(WEEKEVENTREG_50_80); + } +} + +void func_8085A8C4(PlayState* play, Player* this, UNK_TYPE arg2) { + if ((this->transformation != PLAYER_FORM_HUMAN) && (play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_5)) { + R_PLAY_FILL_SCREEN_ON = 45; + R_PLAY_FILL_SCREEN_R = 255; + R_PLAY_FILL_SCREEN_G = 255; + R_PLAY_FILL_SCREEN_B = 255; + R_PLAY_FILL_SCREEN_ALPHA = 0; + play_sound(NA_SE_SY_WHITE_OUT_T); + } +} + +void func_8085A940(PlayState* play, Player* this, UNK_TYPE arg2) { + if (R_PLAY_FILL_SCREEN_ON > 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA > 255) { + R_PLAY_FILL_SCREEN_ON = -64; + R_PLAY_FILL_SCREEN_ALPHA = 255; + gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; + this->actor.update = func_8012301C; + this->actor.draw = NULL; + this->unk_AE7 = 0; + } + } else if (R_PLAY_FILL_SCREEN_ON < 0) { + R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; + if (R_PLAY_FILL_SCREEN_ALPHA < 0) { + R_PLAY_FILL_SCREEN_ON = 0; + R_PLAY_FILL_SCREEN_ALPHA = 0; + } + } else { + PlayerAnimation_Update(play, &this->skelAnime); + } +} + +void func_8085AA10(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime) && (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_DOOR)) { + CutsceneManager_Stop(CS_ID_GLOBAL_DOOR); + } +} + +void func_8085AA60(PlayState* play, Player* this, UNK_TYPE arg2) { + func_80848640(play, this); +} + +void func_8085AA84(PlayState* play, Player* this, UNK_TYPE arg2) { + if (PlayerAnimation_Update(play, &this->skelAnime)) { + this->stateFlags2 |= PLAYER_STATE2_1000000; + } +} + +void func_8085AACC(PlayState* play, Player* this, UNK_TYPE arg2) { + if (func_801242B4(this)) { + func_808353DC(play, this); + func_8082DC64(play, this); + } else { + func_80839ED0(this, play); + if (!func_808391D8(this, play)) { + func_8083D23C(this, play); + } + } + + this->csMode = PLAYER_CSMODE_0; + this->unk_AA5 = PLAYER_UNKAA5_0; +} + +void Player_Cutscene_SetPosAndYawToStart(Player* this, CsCmdActorCue* playerAction) { + this->actor.world.pos.x = playerAction->startPos.x; + this->actor.world.pos.y = playerAction->startPos.y; + this->actor.world.pos.z = playerAction->startPos.z; + + this->currentYaw = this->actor.shape.rot.y = playerAction->rot.y; +} + +void Player_Cutscene_8085ABA8(Player* this, CsCmdActorCue* playerAction) { + f32 xDiff = playerAction->startPos.x - (s32)this->actor.world.pos.x; + f32 yDiff = playerAction->startPos.y - (s32)this->actor.world.pos.y; + f32 zDiff = playerAction->startPos.z - (s32)this->actor.world.pos.z; + f32 dist; + s16 temp_v0; + + temp_v0 = (s16)playerAction->rot.y - this->actor.shape.rot.y; + dist = sqrtf(SQ(xDiff) + SQ(yDiff) + SQ(zDiff)); + if (this->linearVelocity == 0.0f) { + if ((dist > 50.0f) || (ABS_ALT(temp_v0) > 0x4000)) { + Player_Cutscene_SetPosAndYawToStart(this, playerAction); + } + } + + this->skelAnime.moveFlags = 0; + func_8082E784(this); +} + +void func_8085AC9C(PlayState* play, Player* this, CsCmdActorCue* cue, struct_8085DA94* arg3) { + if (arg3->type > 0) { + D_8085D990[arg3->type](play, this, arg3->anim); + } else if (arg3->type < 0) { + arg3->func(play, this, cue); + } + + if ((D_80862B6C & 4) && !(this->skelAnime.moveFlags & ANIM_FLAG_4)) { + this->skelAnime.morphTable[PLAYER_LIMB_ROOT - 1].y /= this->ageProperties->unk_08; + D_80862B6C = 0; + } +} + +void func_8085AD5C(PlayState* play, Player* this, PlayerCsMode csMode) { + if ((csMode != PLAYER_CSMODE_1) && (csMode != PLAYER_CSMODE_WAIT) && (csMode != PLAYER_CSMODE_20) && + (csMode != PLAYER_CSMODE_END)) { + func_8082DCA0(play, this); + } +} + +void func_8085ADA0(PlayState* play, Player* this, s32 arg2) { + CsCmdActorCue* cue = (this->actor.id == ACTOR_EN_TEST3) + ? play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_506)] + : play->csCtx.playerCue; + s32 var_a0 = false; + s32 pad; + s32 csMode; + + if ((play->csCtx.state == CS_STATE_IDLE) || (play->csCtx.state == CS_STATE_STOP) || + (play->csCtx.state == CS_STATE_RUN_UNSTOPPABLE)) { + if ((D_8085D384[this->unk_396] == PLAYER_CSMODE_68) && (play->sceneId == SCENE_OKUJOU)) { + this->unk_AA5 = PLAYER_UNKAA5_5; + + if (func_80838A90(this, play)) { + this->csMode = PLAYER_CSMODE_0; + } + return; + } else { + var_a0 = true; + + if (D_8085D384[this->unk_396] != PLAYER_CSMODE_16) { + this->csMode = PLAYER_CSMODE_END; + func_800B7298(play, NULL, PLAYER_CSMODE_END); + this->unk_396 = 0; + Player_StopHorizontalMovement(this); + return; + } + } + } + + if (!var_a0 && (cue == NULL)) { + this->actor.flags &= ~ACTOR_FLAG_40; + return; + } + + if (!var_a0 && (this->unk_396 != cue->id)) { + csMode = D_8085D384[cue->id]; + + if ((csMode >= PLAYER_CSMODE_0) && (gDisablePlayerCsModeStartPos == 0)) { + if ((csMode == PLAYER_CSMODE_2) || (csMode == PLAYER_CSMODE_3)) { + Player_Cutscene_8085ABA8(this, cue); + } else { + Player_Cutscene_SetPosAndYawToStart(this, cue); + } + } + + if (csMode == PLAYER_CSMODE_108) { + this->stateFlags3 |= PLAYER_STATE3_20000000; + } else if (csMode == PLAYER_CSMODE_110) { + this->stateFlags3 &= ~PLAYER_STATE3_20000000; + } + + D_80862B6C = this->skelAnime.moveFlags; + + func_8082E794(this); + func_8085AD5C(play, this, ABS_ALT(csMode)); + func_8085AC9C(play, this, cue, &D_8085DA94[ABS_ALT(csMode)]); + + this->unk_AE8 = 0; + this->unk_AE7 = 0; + this->unk_396 = cue->id; + } + + csMode = D_8085D384[this->unk_396]; + func_8085AC9C(play, this, cue, &D_8085DEF4[ABS_ALT(csMode)]); + + if ((u16)cue->rot.x != 0) { + Math_SmoothStepToS(&this->actor.focus.rot.x, (u16)cue->rot.x, 4, 0x2710, 0); + func_80832754(this, false); + } +} + +void func_8085B08C(Player* this, PlayState* play) { + if (this->csMode != this->prevCsMode) { + D_80862B6C = this->skelAnime.moveFlags; + func_8082E794(this); + + this->prevCsMode = this->csMode; + func_8085AD5C(play, this, this->csMode); + func_8085AC9C(play, this, NULL, &D_8085DA94[this->csMode]); + } + + func_8085AC9C(play, this, NULL, &D_8085DEF4[this->csMode]); +} + +s32 Player_StartFishing(PlayState* play) { + Player* player = GET_PLAYER(play); + + func_8082DE50(play, player); + func_80831990(play, player, ITEM_FISHING_ROD); + return 1; +} + +// Player_GrabPlayerImpl? Player_GrabPlayerNoChecks? +void func_8085B170(PlayState* play, Player* this) { + func_8082DE50(play, this); + Player_SetAction(play, this, func_80853CC0, 0); + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_re_dead_attack); + this->stateFlags2 |= PLAYER_STATE2_80; + func_8082DAD4(this); + Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HELD); +} + +s32 Player_GrabPlayer(PlayState* play, Player* player) { + if (!Player_InBlockingCsMode(play, player) && (player->invincibilityTimer >= 0) && !func_801240DC(player)) { + if (!(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | + PLAYER_STATE1_200000 | PLAYER_STATE1_800000))) { + if (!(player->stateFlags2 & PLAYER_STATE2_80) && !(player->stateFlags3 & PLAYER_STATE3_80)) { + func_8085B170(play, player); + return true; + } + } + } + + return false; +} + +s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode) { + Player* player = GET_PLAYER(play); + + if (this != NULL) { + if (csMode == PLAYER_CSMODE_0) { + return func_8084E034 == this->actionFunc; + } + + if ((this->actor.id == ACTOR_EN_TEST3) && (csMode < 0)) { + func_8083B0E4(play, this, this->actor.home.rot.y); + return false; + } + + if (this->actor.id == ACTOR_EN_TEST3) { + player = this; + } + } + + if ((player->actor.id == ACTOR_EN_TEST3) || !Player_InBlockingCsMode(play, player)) { + func_8082DE50(play, player); + Player_SetAction(play, player, func_8085B08C, 0); + player->csMode = csMode; + player->unk_398 = &this->actor; + func_8082DAD4(player); + + return true; + } + + return false; +} + +void func_8085B384(Player* this, PlayState* play) { + Player_SetAction(play, this, func_80849FE0, 1); + func_8082E438(play, this, func_8082ED20(this)); + this->currentYaw = this->actor.shape.rot.y; +} + +/** + * Returns true if Player's health reaches zero + */ +s32 Player_InflictDamage(PlayState* play, s32 damage) { + Player* player = GET_PLAYER(play); + + if ((player->stateFlags2 & PLAYER_STATE2_80) || !Player_InBlockingCsMode(play, player)) { + if (func_808339D4(play, player, damage) == 0) { + player->stateFlags2 &= ~PLAYER_STATE2_80; + return true; + } + } + + return false; +} + +// Start talking with the given actor +void Player_TalkWithPlayer(PlayState* play, Actor* actor) { + s32 pad; + Player* player = GET_PLAYER(play); + + func_808323C0(player, CS_ID_GLOBAL_TALK); + if ((player->talkActor != NULL) || (actor == player->tatlActor) || + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_1 | ACTOR_FLAG_40000)) { + actor->flags |= ACTOR_FLAG_TALK_REQUESTED; + } + + player->talkActor = actor; + player->exchangeItemId = PLAYER_IA_NONE; + player->targetedActor = actor; + + if (actor->textId == 0xFFFF) { + func_800B7298(play, actor, PLAYER_CSMODE_1); + actor->flags |= ACTOR_FLAG_TALK_REQUESTED; + func_8082DE14(play, player); + } else { + if (player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) { + player->actor.textId = 0; + } else { + player->actor.flags |= ACTOR_FLAG_TALK_REQUESTED; + player->actor.textId = actor->textId; + } + + if (player->stateFlags1 & PLAYER_STATE1_800000) { + s32 sp24 = player->unk_AE8; + + func_8082DE14(play, player); + func_80837B60(play, player); + player->unk_AE8 = sp24; + } else { + if (func_801242B4(player)) { + func_80832558(play, player, func_80837B60); + func_8082E634(play, player, &gPlayerAnim_link_swimer_swim_wait); + } else if ((actor->category != ACTORCAT_NPC) || (player->heldItemAction == PLAYER_IA_FISHING_ROD)) { + func_80837B60(play, player); + + if (!func_80123420(player)) { + if ((actor != player->tatlActor) && (actor->xzDistToPlayer < (actor->colChkInfo.cylRadius + 40))) { + func_8082DB90(play, player, &gPlayerAnim_link_normal_backspace); + } else { + Player_AnimationPlayLoop(play, player, func_8082ED20(player)); + } + } + } else { + func_80832558(play, player, func_80837B60); + func_8082DB90(play, player, + (actor->xzDistToPlayer < (actor->colChkInfo.cylRadius + 40)) + ? &gPlayerAnim_link_normal_backspace + : &gPlayerAnim_link_normal_talk_free); + } + + if (player->skelAnime.animation == &gPlayerAnim_link_normal_backspace) { + func_8082E920(play, player, ANIM_FLAG_1 | ANIM_FLAG_8 | ANIM_FLAG_NOMOVE); + } + func_8082DAD4(player); + } + + player->stateFlags1 |= PLAYER_STATE1_40 | PLAYER_STATE1_20000000; + } + + if ((player->tatlActor == player->talkActor) && ((player->talkActor->textId & 0xFF00) != 0x200)) { + player->tatlActor->flags |= ACTOR_FLAG_TALK_REQUESTED; + } +} + +void func_8085B74C(PlayState* play) { + Player* player = GET_PLAYER(play); + f32 temp_fv1; + f32 linearVelocity = player->linearVelocity; + + if (linearVelocity < 0.0f) { + linearVelocity = -linearVelocity; + player->actor.world.rot.y += 0x8000; + } + + temp_fv1 = R_RUN_SPEED_LIMIT / 100.0f; + + if (temp_fv1 < linearVelocity) { + gSaveContext.entranceSpeed = temp_fv1; + } else { + gSaveContext.entranceSpeed = linearVelocity; + } + + func_80835324(play, player, 400.0f, + (sPlayerConveyorSpeedIndex != CONVEYOR_SPEED_DISABLED) ? D_80862B16 : player->actor.world.rot.y); + player->stateFlags1 |= (PLAYER_STATE1_1 | PLAYER_STATE1_20000000); +} + +void func_8085B820(PlayState* play, s16 arg1) { + Player* player = GET_PLAYER(play); + + player->actor.focus.rot.y = arg1; + func_80836D8C(player); +} + +PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId) { + PlayerItemAction itemAction = Player_ItemToItemAction(player, itemId); + + if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) && + (itemAction == GET_IA_FROM_MASK(player->currentMask))) { + itemAction = PLAYER_IA_NONE; + } + + if ((itemAction <= PLAYER_IA_NONE) || (itemAction >= PLAYER_IA_MAX)) { + return PLAYER_IA_MINUS1; + } + + player->itemAction = PLAYER_IA_NONE; + player->actionFunc = NULL; + func_80831760(play, player, func_80853A5C, 0); + player->csId = CS_ID_GLOBAL_TALK; + player->itemAction = itemAction; + Player_AnimationPlayOnce(play, player, &gPlayerAnim_link_normal_give_other); + player->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); + player->getItemDrawIdPlusOne = GID_NONE + 1; + player->exchangeItemId = itemAction; + + return itemAction; +} + +s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode) { + Player* player = GET_PLAYER(play); + + if (!(player->actor.flags & ACTOR_FLAG_TALK_REQUESTED)) { + return false; + } + + PlayerAnimation_Change(play, &player->skelAnime, (talkAnim == NULL) ? func_8082ED20(player) : talkAnim, 2.0f / 3.0f, + 0.0f, Animation_GetLastFrame(talkAnim), animMode, -6.0f); + return true; +} diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c index 8d7647bfe..46397dc19 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.c @@ -58,7 +58,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rType = initParams->type; } else { switch (initParams->type) { - case 0: + case EFFSSGSPLASH_TYPE_0: this->rgPrimColorR = 255; this->rgPrimColorG = 255; this->rgPrimColorB = 255; @@ -67,9 +67,9 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rgEnvColorG = 255; this->rgEnvColorB = 255; this->rgEnvColorA = 200; - this->rType = 0; + this->rType = EFFSSGSPLASH_TYPE_0; break; - case 1: + case EFFSSGSPLASH_TYPE_1: this->rgPrimColorR = 255; this->rgPrimColorG = 255; this->rgPrimColorB = 255; @@ -78,9 +78,9 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rgEnvColorG = 255; this->rgEnvColorB = 255; this->rgEnvColorA = 255; - this->rType = 1; + this->rType = EFFSSGSPLASH_TYPE_1; break; - case 2: + case EFFSSGSPLASH_TYPE_2: this->rgPrimColorR = 255; this->rgPrimColorG = 255; this->rgPrimColorB = 255; @@ -89,7 +89,7 @@ u32 EffectSsGSplash_Init(PlayState* play, u32 index, EffectSs* this, void* initP this->rgEnvColorG = 255; this->rgEnvColorB = 255; this->rgEnvColorA = 200; - this->rType = 2; + this->rType = EFFSSGSPLASH_TYPE_2; break; } } @@ -100,7 +100,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { s16 texIndex; switch (this->rType) { - case 0: + case EFFSSGSPLASH_TYPE_0: texIndex = this->rgTexIndex / 100; if (texIndex > 7) { texIndex = 7; @@ -108,7 +108,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { EffectSs_DrawGEffect(play, this, waterSplashTextures[texIndex]); break; - case 1: + case EFFSSGSPLASH_TYPE_1: texIndex = this->rgTexIndex / 100; if (texIndex > 7) { texIndex = 7; @@ -116,7 +116,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { EffectSs_DrawGEffect(play, this, waterSplashTextures[texIndex]); break; - case 2: + case EFFSSGSPLASH_TYPE_2: texIndex = this->rgTexIndex / 100; if (texIndex > 7) { texIndex = 7; @@ -129,7 +129,7 @@ void EffectSsGSplash_Draw(PlayState* play, u32 index, EffectSs* this) { void EffectSsGSplash_Update(PlayState* play, u32 index, EffectSs* this) { Vec3f newSplashPos; - if ((this->rType == 1) && (this->life == 5)) { + if ((this->rType == EFFSSGSPLASH_TYPE_1) && (this->life == 5)) { newSplashPos = this->pos; newSplashPos.y += ((this->rgScale * 20) * 0.002f); EffectSsGSplash_Spawn(play, &newSplashPos, 0, 0, 2, this->rgScale / 2); diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h index 9d3fbcd13..363db3e5a 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h +++ b/src/overlays/effects/ovl_Effect_Ss_G_Splash/z_eff_ss_g_splash.h @@ -3,6 +3,12 @@ #include "global.h" +typedef enum EffSsGSplashType { + /* 0 */ EFFSSGSPLASH_TYPE_0, + /* 1 */ EFFSSGSPLASH_TYPE_1, + /* 2 */ EFFSSGSPLASH_TYPE_2 +} EffSsGSplashType; + typedef struct { /* 0x00 */ Vec3f pos; /* 0x0C */ u8 type; diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py index e7b0f4d81..37ba8b45e 100755 --- a/tools/disasm/disasm.py +++ b/tools/disasm/disasm.py @@ -186,9 +186,9 @@ def proper_name(symbol, in_data=False, is_symbol=True): # bg_ikana_mirror symbol with large addend folded into %lo elif symbol == 0x80B80248: return variables_ast[0x80B801A8][0] + f" + 0x{0x80B80248 - 0x80B801A8:X}" - # player symbol with very large addend folded into %lo, since we don't know the real symbol just use the first data symbol for now + # player symbol with very large addend folded into %lo elif symbol == 0x8084D2FC: - return variables_ast[0x8085B9F0][0] + f" - 0x{0x8085B9F0 - 0x8084D2FC:X}" + return variables_ast[0x8085D0FA][0] + f" - 0x{0x8085D0FA - 0x8084D2FC:X}" # OS_K0_TO_PHYSICAL on rspS2DEX text and data symbols elif symbol == 0x001ABAB0 or symbol == 0x001E3BB0: return variables_ast[symbol + 0x80000000][0] + " - 0x80000000" diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 6d9916fd7..0559d0a82 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4245,14 +4245,14 @@ 0x80828788:("KaleidoScope_UpdateOpening",), 0x8082895C:("KaleidoScope_Update",), 0x8082DA90:("func_8082DA90",), - 0x8082DABC:("func_8082DABC",), + 0x8082DABC:("Player_StopHorizontalMovement",), 0x8082DAD4:("func_8082DAD4",), 0x8082DAFC:("func_8082DAFC",), - 0x8082DB18:("func_8082DB18",), - 0x8082DB3C:("func_8082DB3C",), + 0x8082DB18:("Player_AnimationPlayOnce",), + 0x8082DB3C:("Player_AnimationPlayLoop",), 0x8082DB60:("func_8082DB60",), 0x8082DB90:("func_8082DB90",), - 0x8082DBC0:("func_8082DBC0",), + 0x8082DBC0:("Player_AnimationPlayOnceReverse",), 0x8082DC28:("func_8082DC28",), 0x8082DC38:("func_8082DC38",), 0x8082DC64:("func_8082DC64",), @@ -4262,18 +4262,18 @@ 0x8082DE50:("func_8082DE50",), 0x8082DE88:("func_8082DE88",), 0x8082DF2C:("func_8082DF2C",), - 0x8082DF48:("func_8082DF48",), - 0x8082DF8C:("func_8082DF8C",), + 0x8082DF48:("Player_RequestRumble",), + 0x8082DF8C:("Player_AnimSfx_PlayVoice",), 0x8082E00C:("func_8082E00C",), - 0x8082E078:("func_8082E078",), - 0x8082E094:("func_8082E094",), - 0x8082E0CC:("func_8082E0CC",), - 0x8082E0F4:("func_8082E0F4",), - 0x8082E12C:("func_8082E12C",), - 0x8082E188:("func_8082E188",), - 0x8082E1BC:("func_8082E1BC",), + 0x8082E078:("Player_GetFloorSfx",), + 0x8082E094:("Player_AnimSfx_PlayFloor",), + 0x8082E0CC:("Player_GetFloorSfxByAge",), + 0x8082E0F4:("Player_AnimSfx_PlayFloorByAge",), + 0x8082E12C:("Player_AnimSfx_PlayFloorWalk",), + 0x8082E188:("Player_AnimSfx_PlayFloorJump",), + 0x8082E1BC:("Player_AnimSfx_PlayFloorLand",), 0x8082E1F0:("func_8082E1F0",), - 0x8082E224:("func_8082E224",), + 0x8082E224:("Player_PlayAnimSfx",), 0x8082E438:("func_8082E438",), 0x8082E4A4:("func_8082E4A4",), 0x8082E514:("func_8082E514",), @@ -4309,22 +4309,22 @@ 0x8082EF9C:("func_8082EF9C",), 0x8082EFE4:("func_8082EFE4",), 0x8082F02C:("func_8082F02C",), - 0x8082F09C:("func_8082F09C",), - 0x8082F0E4:("func_8082F0E4",), + 0x8082F09C:("Player_ResetCylinder",), + 0x8082F0E4:("Player_SetCylinderForAttack",), 0x8082F164:("func_8082F164",), 0x8082F1AC:("func_8082F1AC",), 0x8082F43C:("func_8082F43C",), 0x8082F470:("func_8082F470",), - 0x8082F524:("func_8082F524",), + 0x8082F524:("Player_ItemToItemAction",), 0x8082F594:("func_8082F594",), 0x8082F5A4:("func_8082F5A4",), 0x8082F5C0:("func_8082F5C0",), 0x8082F5FC:("func_8082F5FC",), - 0x8082F62C:("func_8082F62C",), + 0x8082F62C:("Player_SpawnExplosive",), 0x8082F7F4:("func_8082F7F4",), 0x8082F8A0:("func_8082F8A0",), 0x8082F8BC:("func_8082F8BC",), - 0x8082F938:("func_8082F938",), + 0x8082F938:("Player_OverrideBlureColors",), 0x8082FA5C:("func_8082FA5C",), 0x8082FB68:("func_8082FB68",), 0x8082FBE8:("func_8082FBE8",), @@ -4359,7 +4359,7 @@ 0x808313A8:("func_808313A8",), 0x808313F0:("func_808313F0",), 0x80831454:("func_80831454",), - 0x80831494:("func_80831494",), + 0x80831494:("Player_SetAction",), 0x8083172C:("func_8083172C",), 0x80831760:("func_80831760",), 0x808317C4:("func_808317C4",), @@ -4420,16 +4420,16 @@ 0x808354A4:("func_808354A4",), 0x808355D8:("func_808355D8",), 0x8083562C:("func_8083562C",), - 0x80835BC8:("func_80835BC8",), + 0x80835BC8:("Player_TranslateAndRotateY",), 0x80835BF8:("func_80835BF8",), - 0x80835C64:("func_80835C64",), + 0x80835C64:("Player_SpawnFairy",), 0x80835CD8:("func_80835CD8",), 0x80835D2C:("func_80835D2C",), 0x80835D58:("func_80835D58",), 0x80835DF8:("func_80835DF8",), - 0x80835EAC:("func_80835EAC",), - 0x8083604C:("func_8083604C",), - 0x80836258:("func_80836258",), + 0x80835EAC:("Player_Door_Staircase",), + 0x8083604C:("Player_Door_Sliding",), + 0x80836258:("Player_Door_Knob",), 0x808365DC:("func_808365DC",), 0x80836888:("func_80836888",), 0x8083692C:("func_8083692C",), @@ -4442,7 +4442,7 @@ 0x80836C70:("func_80836C70",), 0x80836D8C:("func_80836D8C",), 0x80836DC0:("func_80836DC0",), - 0x80836EA0:("func_80836EA0",), + 0x80836EA0:("Player_RequestQuake",), 0x80836F10:("func_80836F10",), 0x808370D4:("func_808370D4",), 0x80837134:("func_80837134",), @@ -4464,7 +4464,7 @@ 0x808381F8:("func_808381F8",), 0x8083827C:("func_8083827C",), 0x8083868C:("func_8083868C",), - 0x80838760:("func_80838760",), + 0x80838760:("Player_StopCutscene",), 0x808387A0:("func_808387A0",), 0x80838830:("func_80838830",), 0x808388B8:("func_808388B8",), @@ -4500,11 +4500,11 @@ 0x8083A844:("func_8083A844",), 0x8083A878:("func_8083A878",), 0x8083A98C:("func_8083A98C",), - 0x8083AD04:("func_8083AD04",), - 0x8083AD8C:("func_8083AD8C",), - 0x8083ADB8:("func_8083ADB8",), + 0x8083AD04:("Player_InitMode_Telescope",), + 0x8083AD8C:("Player_InitMode_B",), + 0x8083ADB8:("Player_InitMode_D",), 0x8083ADF0:("func_8083ADF0",), - 0x8083AE38:("func_8083AE38",), + 0x8083AE38:("Player_InitMode_F",), 0x8083AECC:("func_8083AECC",), 0x8083AF30:("func_8083AF30",), 0x8083AF8C:("func_8083AF8C",), @@ -4557,7 +4557,7 @@ 0x8083E958:("func_8083E958",), 0x8083E9C4:("func_8083E9C4",), 0x8083EA44:("func_8083EA44",), - 0x8083EBD0:("func_8083EBD0",), + 0x8083EBD0:("Player_ChooseIdleAnim",), 0x8083EE60:("func_8083EE60",), 0x8083F144:("func_8083F144",), 0x8083F190:("func_8083F190",), @@ -4571,7 +4571,7 @@ 0x8083FCF0:("func_8083FCF0",), 0x8083FD80:("func_8083FD80",), 0x8083FE38:("func_8083FE38",), - 0x8083FE90:("func_8083FE90",), + 0x8083FE90:("Player_RequestQuakeAndRumble",), 0x8083FEF4:("func_8083FEF4",), 0x8083FF30:("func_8083FF30",), 0x8083FFEC:("func_8083FFEC",), @@ -4590,33 +4590,33 @@ 0x80840F34:("func_80840F34",), 0x80840F90:("func_80840F90",), 0x808411D4:("func_808411D4",), - 0x808412A0:("func_808412A0",), - 0x808412BC:("func_808412BC",), + 0x808412A0:("Player_InitMode_0",), + 0x808412BC:("Player_InitMode_2",), 0x80841358:("func_80841358",), - 0x80841408:("func_80841408",), - 0x808414E0:("func_808414E0",), - 0x80841528:("func_80841528",), - 0x808415A0:("func_808415A0",), - 0x808415E4:("func_808415E4",), - 0x80841624:("func_80841624",), + 0x80841408:("Player_InitMode_1",), + 0x808414E0:("Player_InitMode_3",), + 0x80841528:("Player_InitMode_4",), + 0x808415A0:("Player_InitMode_7",), + 0x808415E4:("Player_InitMode_5",), + 0x80841624:("Player_InitMode_6",), 0x80841744:("func_80841744",), - 0x8084182C:("func_8084182C",), + 0x8084182C:("Player_InitCommon",), 0x80841A50:("func_80841A50",), 0x80841AC4:("Player_Init",), 0x80842510:("func_80842510",), 0x808425B4:("func_808425B4",), - 0x808426F0:("func_808426F0",), + 0x808426F0:("Player_SetDoAction",), 0x808430E0:("func_808430E0",), 0x80843178:("func_80843178",), - 0x80843EC0:("func_80843EC0",), + 0x80843EC0:("Player_UpdateCamAndSeqModes",), 0x808442D8:("func_808442D8",), 0x808445C4:("func_808445C4",), - 0x808446F4:("func_808446F4",), + 0x808446F4:("Player_DetectSecrets",), 0x80844784:("func_80844784",), 0x80844D80:("func_80844D80",), - 0x80844EF8:("func_80844EF8",), + 0x80844EF8:("Player_UpdateCommon",), 0x808460B8:("Player_Update",), - 0x808463C0:("func_808463C0",), + 0x808463C0:("Player_DrawGameplay",), 0x80846460:("func_80846460",), 0x80846528:("Player_Draw",), 0x808470D4:("Player_Destroy",), @@ -4834,7 +4834,7 @@ 0x80859AF8:("func_80859AF8",), 0x80859B28:("func_80859B28",), 0x80859B54:("func_80859B54",), - 0x80859BA8:("func_80859BA8",), + 0x80859BA8:("Player_Cutscene_Translate",), 0x80859C60:("func_80859C60",), 0x80859CA0:("func_80859CA0",), 0x80859CE0:("func_80859CE0",), @@ -4845,7 +4845,7 @@ 0x80859F4C:("func_80859F4C",), 0x80859FCC:("func_80859FCC",), 0x80859FF4:("func_80859FF4",), - 0x8085A04C:("func_8085A04C",), + 0x8085A04C:("Player_Cutscene_TranslateReverse",), 0x8085A120:("func_8085A120",), 0x8085A144:("func_8085A144",), 0x8085A19C:("func_8085A19C",), @@ -4869,19 +4869,19 @@ 0x8085AA60:("func_8085AA60",), 0x8085AA84:("func_8085AA84",), 0x8085AACC:("func_8085AACC",), - 0x8085AB58:("func_8085AB58",), - 0x8085ABA8:("func_8085ABA8",), + 0x8085AB58:("Player_Cutscene_SetPosAndYawToStart",), + 0x8085ABA8:("Player_Cutscene_8085ABA8",), 0x8085AC9C:("func_8085AC9C",), 0x8085AD5C:("func_8085AD5C",), 0x8085ADA0:("func_8085ADA0",), 0x8085B08C:("func_8085B08C",), - 0x8085B134:("func_8085B134",), + 0x8085B134:("Player_StartFishing",), 0x8085B170:("func_8085B170",), - 0x8085B1F0:("func_8085B1F0",), + 0x8085B1F0:("Player_GrabPlayer",), 0x8085B28C:("func_8085B28C",), 0x8085B384:("func_8085B384",), - 0x8085B3E0:("func_8085B3E0",), - 0x8085B460:("func_8085B460",), + 0x8085B3E0:("Player_InflictDamage",), + 0x8085B460:("Player_TalkWithPlayer",), 0x8085B74C:("func_8085B74C",), 0x8085B820:("func_8085B820",), 0x8085B854:("func_8085B854",), @@ -8591,24 +8591,24 @@ 0x8099BE48:("EnCrow_OverrideLimbDraw",), 0x8099BF20:("EnCrow_PostLimbDraw",), 0x8099BFA4:("EnCrow_Draw",), - 0x8099C290:("func_8099C290",), - 0x8099C328:("func_8099C328",), - 0x8099C41C:("func_8099C41C",), + 0x8099C290:("EnCow_RotatePoint",), + 0x8099C328:("EnCow_SetColliderPos",), + 0x8099C41C:("EnCow_SetTailPos",), 0x8099C498:("EnCow_Init",), 0x8099C834:("EnCow_Destroy",), - 0x8099C880:("func_8099C880",), - 0x8099CAA8:("func_8099CAA8",), - 0x8099CB20:("func_8099CB20",), - 0x8099CB68:("func_8099CB68",), - 0x8099CBCC:("func_8099CBCC",), - 0x8099CC68:("func_8099CC68",), - 0x8099CCF8:("func_8099CCF8",), - 0x8099CDA0:("func_8099CDA0",), - 0x8099CFAC:("func_8099CFAC",), + 0x8099C880:("EnCow_UpdateAnimation",), + 0x8099CAA8:("EnCow_TalkEnd",), + 0x8099CB20:("EnCow_GiveMilkEnd",), + 0x8099CB68:("EnCow_GiveMilkWait",), + 0x8099CBCC:("EnCow_GiveMilk",), + 0x8099CC68:("EnCow_CheckForEmptyBottle",), + 0x8099CCF8:("EnCow_Talk",), + 0x8099CDA0:("EnCow_Idle",), + 0x8099CFAC:("EnCow_DoTail",), 0x8099D144:("EnCow_Update",), - 0x8099D3C0:("func_8099D3C0",), - 0x8099D4AC:("func_8099D4AC",), - 0x8099D4FC:("func_8099D4FC",), + 0x8099D3C0:("EnCow_UpdateTail",), + 0x8099D4AC:("EnCow_OverrideLimbDraw",), + 0x8099D4FC:("EnCow_PostLimbDraw",), 0x8099D53C:("EnCow_Draw",), 0x8099D59C:("func_8099D59C",), 0x8099D780:("OceffWipe4_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f40abb468..be8c6e08f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4941,52 +4941,9 @@ 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1), 0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1), 0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1), - 0x8085BA38:("D_8085BA38","UNK_TYPE1","",0x1), - 0x8085BE84:("D_8085BE84","UNK_TYPE1","",0x1), - 0x8085BE9C:("D_8085BE9C","UNK_TYPE1","",0x1), - 0x8085BEB4:("D_8085BEB4","UNK_TYPE1","",0x1), - 0x8085BECC:("D_8085BECC","UNK_TYPE1","",0x1), - 0x8085BEE4:("D_8085BEE4","UNK_TYPE1","",0x1), - 0x8085BEFC:("D_8085BEFC","UNK_TYPE1","",0x1), - 0x8085BF14:("D_8085BF14","UNK_TYPE1","",0x1), - 0x8085BF44:("D_8085BF44","UNK_TYPE1","",0x1), - 0x8085BF5C:("D_8085BF5C","UNK_TYPE1","",0x1), - 0x8085BF74:("D_8085BF74","UNK_TYPE1","",0x1), - 0x8085BF8C:("D_8085BF8C","UNK_TYPE1","",0x1), - 0x8085BFA4:("D_8085BFA4","UNK_TYPE1","",0x1), - 0x8085BFBC:("D_8085BFBC","UNK_TYPE1","",0x1), - 0x8085BFD4:("D_8085BFD4","UNK_TYPE1","",0x1), - 0x8085BFEC:("D_8085BFEC","UNK_TYPE1","",0x1), - 0x8085C004:("D_8085C004","UNK_TYPE1","",0x1), - 0x8085C01C:("D_8085C01C","UNK_TYPE1","",0x1), - 0x8085C034:("D_8085C034","UNK_TYPE1","",0x1), - 0x8085C04C:("D_8085C04C","UNK_TYPE1","",0x1), - 0x8085C064:("D_8085C064","UNK_TYPE1","",0x1), - 0x8085C07C:("D_8085C07C","UNK_TYPE1","",0x1), - 0x8085C094:("D_8085C094","UNK_TYPE1","",0x1), - 0x8085C0C4:("D_8085C0C4","UNK_TYPE1","",0x1), - 0x8085C0DC:("D_8085C0DC","UNK_TYPE1","",0x1), - 0x8085C0F4:("D_8085C0F4","UNK_TYPE1","",0x1), - 0x8085C10C:("D_8085C10C","UNK_TYPE1","",0x1), - 0x8085C124:("D_8085C124","UNK_TYPE1","",0x1), - 0x8085C13C:("D_8085C13C","UNK_TYPE1","",0x1), - 0x8085C154:("D_8085C154","UNK_TYPE1","",0x1), - 0x8085C16C:("D_8085C16C","UNK_TYPE1","",0x1), - 0x8085C184:("D_8085C184","UNK_TYPE1","",0x1), - 0x8085C19C:("D_8085C19C","UNK_TYPE1","",0x1), - 0x8085C1B4:("D_8085C1B4","UNK_TYPE1","",0x1), - 0x8085C1CC:("D_8085C1CC","UNK_TYPE1","",0x1), - 0x8085C1E4:("D_8085C1E4","UNK_TYPE1","",0x1), - 0x8085C1FC:("D_8085C1FC","UNK_TYPE1","",0x1), - 0x8085C214:("D_8085C214","UNK_TYPE1","",0x1), - 0x8085C22C:("D_8085C22C","UNK_TYPE1","",0x1), - 0x8085C244:("D_8085C244","UNK_TYPE1","",0x1), - 0x8085C25C:("D_8085C25C","UNK_TYPE1","",0x1), - 0x8085C274:("D_8085C274","UNK_TYPE1","",0x1), - 0x8085C28C:("D_8085C28C","UNK_TYPE1","",0x1), - 0x8085C2A4:("D_8085C2A4","UNK_TYPE4","",0x4), - 0x8085C2A8:("D_8085C2A8","UNK_TYPE4","",0x4), - 0x8085C2AC:("D_8085C2AC","UNK_TYPE4","",0x4), + 0x8085BA38:("sPlayerAgeProperties","UNK_TYPE1","",0x1), + 0x8085BE84:("D_8085BE84","LinkAnimationHeader*","[264]",0x420), + 0x8085C2A4:("D_8085C2A4","struct_8085C2A4","[6]",0x48), 0x8085C2EC:("D_8085C2EC","UNK_TYPE1","",0x1), 0x8085C318:("D_8085C318","UNK_TYPE1","",0x1), 0x8085C344:("D_8085C344","UNK_TYPE1","",0x1), @@ -4994,9 +4951,8 @@ 0x8085C3E4:("D_8085C3E4","f32","",0x4), 0x8085C3E8:("D_8085C3E8","f32","",0x4), 0x8085C3EC:("D_8085C3EC","UNK_TYPE2","",0x2), - 0x8085C3F4:("D_8085C3F4","UNK_TYPE1","",0x1), - 0x8085C84C:("D_8085C84C","UNK_TYPE4","",0x4), - 0x8085C850:("D_8085C850","UNK_TYPE4","",0x4), + 0x8085C3F4:("sGetItemTable","GetItemEntry","[0xB9]",0x456), + 0x8085C84C:("sPlayerIdleAnimations","UNK_TYPE4","",0x78), 0x8085C8C4:("D_8085C8C4","UNK_TYPE1","",0x1), 0x8085C8C8:("D_8085C8C8","UNK_TYPE1","",0x1), 0x8085C8CC:("D_8085C8CC","UNK_TYPE1","",0x1), @@ -5007,19 +4963,17 @@ 0x8085C90C:("D_8085C90C","UNK_TYPE1","",0x1), 0x8085C91C:("D_8085C91C","UNK_TYPE1","",0x1), 0x8085C924:("D_8085C924","UNK_TYPE1","",0x1), - 0x8085C928:("D_8085C928","UNK_TYPE1","",0x1), - 0x8085C938:("D_8085C938","UNK_TYPE1","",0x1), + 0x8085C928:("D_8085C928","UNK_TYPE1","",0x14), + 0x8085C93C:("D_8085C93C","UNK_TYPE1","",0x1), 0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1), 0x8085C98C:("D_8085C98C","UNK_TYPE1","",0x1), - 0x8085C99C:("D_8085C99C","UNK_TYPE1","",0x1), + 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1), 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4), 0x8085CB3C:("D_8085CB3C","UNK_PTR","",0x4), 0x8085CC88:("D_8085CC88","UNK_TYPE1","",0x1), - 0x8085CD00:("D_8085CD00","UNK_TYPE1","",0x1), - 0x8085CD24:("D_8085CD24","UNK_TYPE1","",0x1), - 0x8085CD30:("D_8085CD30","UNK_TYPE1","",0x1), - 0x8085CE30:("D_8085CE30","UNK_TYPE1","",0x1), - 0x8085CE60:("D_8085CE60","UNK_TYPE1","",0x1), + 0x8085CD00:("D_8085CD00","s8","[36]",0x24), + 0x8085CD24:("sPlayerExplosiveInfo","UNK_TYPE1","",0x1), + 0x8085CD30:("sMeleeAttackAnimInfo","UNK_TYPE1","",0x220), 0x8085CF50:("D_8085CF50","UNK_TYPE1","",0x1), 0x8085CF58:("D_8085CF58","UNK_TYPE1","",0x1), 0x8085CF60:("D_8085CF60","UNK_TYPE1","",0x1), @@ -5028,10 +4982,10 @@ 0x8085CF78:("D_8085CF78","UNK_TYPE1","",0x1), 0x8085CF80:("D_8085CF80","UNK_TYPE1","",0x1), 0x8085CF84:("D_8085CF84","UNK_TYPE1","",0x1), - 0x8085CF88:("D_8085CF88","UNK_TYPE1","",0x1), - 0x8085CFA8:("D_8085CFA8","UNK_TYPE2","",0x2), - 0x8085CFAE:("D_8085CFAE","UNK_TYPE1","",0x1), - 0x8085CFB8:("D_8085CFB8","UNK_TYPE1","",0x1), + 0x8085CF88:("D_8085CF88","BlureColors","[2]",0x20), + 0x8085CFA8:("D_8085CFA8","u16","[4]",0x8), + 0x8085CFB0:("D_8085CFB0","UNK_TYPE1","",0x1), + 0x8085CFB8:("sMagicArrowCosts","u8","[4]",0x4), 0x8085CFBC:("D_8085CFBC","UNK_TYPE1","",0x1), 0x8085CFC4:("D_8085CFC4","UNK_TYPE1","",0x1), 0x8085CFCC:("D_8085CFCC","UNK_TYPE1","",0x1), @@ -5051,47 +5005,42 @@ 0x8085D050:("D_8085D050","UNK_TYPE1","",0x1), 0x8085D054:("D_8085D054","UNK_PTR","",0x4), 0x8085D090:("D_8085D090","UNK_TYPE1","",0x1), - 0x8085D094:("D_8085D094","UNK_TYPE1","",0x1), - 0x8085D097:("D_8085D097","UNK_TYPE1","",0x1), + 0x8085D094:("D_8085D094","UNK_TYPE1","",0x6), 0x8085D09C:("D_8085D09C","UNK_TYPE4","",0x4), 0x8085D0D4:("D_8085D0D4","UNK_TYPE1","",0x1), 0x8085D0E4:("D_8085D0E4","UNK_TYPE1","",0x1), 0x8085D0F4:("D_8085D0F4","UNK_TYPE4","",0x4), - 0x8085D0F8:("D_8085D0F8","UNK_TYPE1","",0x1), + 0x8085D0F8:("sReturnEntranceGroupData","s16","[1]",0x2), + 0x8085D0FA:("sReturnEntranceGroupIndices","u8","[1]",0x1), 0x8085D100:("D_8085D100","UNK_TYPE1","",0x1), - 0x8085D10C:("D_8085D10C","f32","",0x4), - 0x8085D114:("D_8085D114","f32","",0x4), + 0x8085D10C:("D_8085D10C","Vec3f","",0xC), 0x8085D118:("D_8085D118","UNK_TYPE1","",0x1), 0x8085D124:("D_8085D124","UNK_TYPE1","",0x1), - 0x8085D130:("D_8085D130","UNK_TYPE1","",0x1), - 0x8085D134:("D_8085D134","f32","",0x4), - 0x8085D13C:("D_8085D13C","UNK_TYPE1","",0x1), + 0x8085D130:("D_8085D130","Vec3f","",0xC), + 0x8085D13C:("sFallImpactInfos","UNK_TYPE1","",0x1), 0x8085D148:("D_8085D148","UNK_TYPE1","",0x1), 0x8085D154:("D_8085D154","UNK_TYPE1","",0x1), 0x8085D160:("D_8085D160","UNK_TYPE1","",0x1), - 0x8085D174:("D_8085D174","UNK_TYPE1","",0x1), + 0x8085D174:("sPlayerMass","u8","[5]",0x5), 0x8085D17C:("D_8085D17C","UNK_TYPE1","",0x1), 0x8085D190:("D_8085D190","UNK_TYPE1","",0x1), 0x8085D1A4:("D_8085D1A4","UNK_TYPE1","",0x1), 0x8085D1F8:("D_8085D1F8","UNK_TYPE1","",0x1), 0x8085D200:("D_8085D200","UNK_TYPE4","",0x4), 0x8085D218:("D_8085D218","UNK_TYPE1","",0x1), - 0x8085D224:("D_8085D224","UNK_TYPE1","",0x1), - 0x8085D23C:("D_8085D23C","UNK_TYPE1","",0x1), - 0x8085D252:("D_8085D252","UNK_TYPE1","",0x1), + 0x8085D224:("D_8085D224","UNK_TYPE1","",0x30), + 0x8085D254:("D_8085D254","u16","[4]",0x8), 0x8085D25C:("D_8085D25C","UNK_TYPE1","",0x1), 0x8085D264:("D_8085D264","UNK_TYPE1","",0x1), 0x8085D26C:("D_8085D26C","UNK_TYPE1","",0x1), 0x8085D270:("D_8085D270","UNK_TYPE1","",0x1), - 0x8085D27C:("D_8085D27C","f32","",0x4), - 0x8085D284:("D_8085D284","f32","",0x4), - 0x8085D288:("D_8085D288","UNK_TYPE1","",0x1), - 0x8085D28C:("D_8085D28C","f32","",0x4), + 0x8085D27C:("D_8085D27C","Vec3f","",0xC), + 0x8085D288:("D_8085D288","Vec3f","",0xC), 0x8085D294:("D_8085D294","UNK_TYPE1","",0x1), 0x8085D2A4:("D_8085D2A4","UNK_TYPE1","",0x1), 0x8085D2B0:("D_8085D2B0","UNK_TYPE1","",0x1), 0x8085D2B4:("D_8085D2B4","UNK_TYPE1","",0x1), - 0x8085D2C0:("D_8085D2C0","ActorInitVar","",0x4), + 0x8085D2C0:("sInitChain","ActorInitVar","",0x4), 0x8085D2C4:("D_8085D2C4","UNK_TYPE4","",0x4), 0x8085D2CC:("D_8085D2CC","UNK_PTR","",0x4), 0x8085D30C:("D_8085D30C","EffectBlureInit2","",0x24), @@ -5101,9 +5050,7 @@ 0x8085D340:("D_8085D340","UNK_TYPE1","",0x1), 0x8085D34C:("D_8085D34C","UNK_TYPE1","",0x1), 0x8085D354:("D_8085D354","UNK_TYPE1","",0x1), - 0x8085D358:("D_8085D358","UNK_TYPE1","",0x1), - 0x8085D35C:("D_8085D35C","f32","",0x4), - 0x8085D360:("D_8085D360","f32","",0x4), + 0x8085D358:("D_8085D358","Vec3f","",0xC), 0x8085D364:("D_8085D364","UNK_TYPE1","",0x1), 0x8085D370:("D_8085D370","UNK_TYPE1","",0x1), 0x8085D37C:("D_8085D37C","UNK_TYPE1","",0x1), @@ -5113,8 +5060,8 @@ 0x8085D3F4:("D_8085D3F4","UNK_TYPE1","",0x1), 0x8085D3F8:("D_8085D3F8","UNK_TYPE1","",0x1), 0x8085D3FC:("D_8085D3FC","UNK_TYPE4","",0x4), - 0x8085D404:("D_8085D404","UNK_TYPE1","",0x1), - 0x8085D410:("D_8085D410","UNK_TYPE1","",0x1), + 0x8085D404:("sWaterConveyorSpeeds","UNK_TYPE1","",0x1), + 0x8085D410:("sFloorConveyorSpeeds","UNK_TYPE1","",0x1), 0x8085D41C:("D_8085D41C","UNK_TYPE1","",0x1), 0x8085D428:("D_8085D428","UNK_TYPE1","",0x1), 0x8085D450:("D_8085D450","UNK_TYPE1","",0x1), @@ -5132,32 +5079,28 @@ 0x8085D574:("D_8085D574","UNK_TYPE4","",0x4), 0x8085D580:("D_8085D580","UNK_TYPE1","",0x1), 0x8085D584:("D_8085D584","UNK_TYPE1","",0x1), - 0x8085D588:("D_8085D588","UNK_TYPE1","",0x1), - 0x8085D5A0:("D_8085D5A0","UNK_TYPE1","",0x1), - 0x8085D5B8:("D_8085D5B8","UNK_TYPE1","",0x1), + 0x8085D588:("D_8085D588","Vec3f","[2]",0x18), + 0x8085D5A0:("D_8085D5A0","Vec3f","[2]",0x18), + 0x8085D5B8:("D_8085D5B8","Vec3f","[2]",0x18), 0x8085D5D0:("D_8085D5D0","UNK_TYPE1","",0x1), 0x8085D5DC:("D_8085D5DC","UNK_TYPE1","",0x1), 0x8085D5E0:("D_8085D5E0","UNK_TYPE1","",0x1), 0x8085D5E4:("D_8085D5E4","UNK_TYPE1","",0x1), - 0x8085D5F0:("D_8085D5F0","UNK_TYPE1","",0x1), - 0x8085D5FA:("D_8085D5FA","UNK_TYPE1","",0x1), - 0x8085D604:("D_8085D604","UNK_TYPE1","",0x1), - 0x8085D60C:("D_8085D60C","UNK_TYPE1","",0x1), - 0x8085D61C:("D_8085D61C","UNK_TYPE1","",0x1), - 0x8085D62C:("D_8085D62C","f32","",0x4), - 0x8085D630:("D_8085D630","f32","",0x4), - 0x8085D634:("D_8085D634","f32","",0x4), - 0x8085D638:("D_8085D638","f32","",0x4), - 0x8085D640:("D_8085D640","f32","",0x4), - 0x8085D644:("D_8085D644","UNK_TYPE1","",0x1), - 0x8085D64C:("D_8085D64C","f32","",0x4), + 0x8085D5F0:("D_8085D5F0","UNK_TYPE1","",0xC), + 0x8085D5FC:("D_8085D5FC","UNK_TYPE1","",0x1), + 0x8085D604:("D_8085D604","UNK_TYPE1","",0x8), + 0x8085D60C:("D_8085D60C","UNK_TYPE1","",0x10), + 0x8085D61C:("D_8085D61C","UNK_TYPE1","",0x10), + 0x8085D62C:("D_8085D62C","Vec3f","",0xC), + 0x8085D638:("D_8085D638","Vec3f","",0xC), + 0x8085D644:("D_8085D644","Vec3f","",0xC), 0x8085D650:("D_8085D650","UNK_TYPE1","",0x1), 0x8085D658:("D_8085D658","UNK_TYPE1","",0x1), 0x8085D660:("D_8085D660","UNK_TYPE1","",0x1), 0x8085D66C:("D_8085D66C","UNK_TYPE4","",0x4), 0x8085D674:("D_8085D674","UNK_TYPE4","",0x4), - 0x8085D67C:("D_8085D67C","UNK_TYPE1","",0x1), - 0x8085D680:("D_8085D680","UNK_TYPE1","",0x1), + 0x8085D67C:("D_8085D67C","UNK_TYPE1","",0xC), + 0x8085D688:("D_8085D688","UNK_TYPE1","",0x1), 0x8085D6A4:("D_8085D6A4","UNK_TYPE1","",0x1), 0x8085D6D0:("D_8085D6D0","UNK_PTR","",0x4), 0x8085D6DC:("D_8085D6DC","UNK_TYPE1","",0x1), @@ -5168,18 +5111,16 @@ 0x8085D73C:("D_8085D73C","UNK_TYPE1","",0x1), 0x8085D74C:("D_8085D74C","UNK_TYPE1","",0x1), 0x8085D75C:("D_8085D75C","UNK_TYPE1","",0x1), - 0x8085D764:("D_8085D764","UNK_TYPE1","",0x1), - 0x8085D76D:("D_8085D76D","UNK_TYPE1","",0x1), + 0x8085D764:("D_8085D764","Vec3f","",0xC), 0x8085D770:("D_8085D770","UNK_TYPE1","",0x1), 0x8085D77C:("D_8085D77C","UNK_TYPE1","",0x1), 0x8085D788:("D_8085D788","UNK_TYPE1","",0x1), - 0x8085D78C:("D_8085D78C","UNK_TYPE1","",0x1), - 0x8085D797:("D_8085D797","UNK_TYPE1","",0x1), + 0x8085D78C:("D_8085D78C","Color_RGBA8","",0x4), + 0x8085D790:("D_8085D790","u8","[6]",0x6), 0x8085D798:("D_8085D798","UNK_TYPE2","",0x2), - 0x8085D7EC:("D_8085D7EC","UNK_TYPE1","",0x1), - 0x8085D7F8:("D_8085D7F8","UNK_TYPE1","",0x1), - 0x8085D800:("D_8085D800","f32","",0x4), - 0x8085D804:("D_8085D804","UNK_TYPE1","",0x1), + 0x8085D7EC:("D_8085D7EC","Vec3f","",0xC), + 0x8085D7F8:("D_8085D7F8","Vec3f","",0xC), + 0x8085D804:("D_8085D804","s8","[5]",0x5), 0x8085D80C:("D_8085D80C","UNK_TYPE1","",0x1), 0x8085D838:("D_8085D838","UNK_TYPE1","",0x1), 0x8085D840:("D_8085D840","UNK_TYPE1","",0x1), @@ -5189,18 +5130,14 @@ 0x8085D904:("D_8085D904","UNK_TYPE1","",0x1), 0x8085D908:("D_8085D908","UNK_TYPE1","",0x1), 0x8085D910:("D_8085D910","UNK_TYPE1","",0x1), - 0x8085D918:("D_8085D918","UNK_TYPE1","",0x1), - 0x8085D91C:("D_8085D91C","f32","",0x4), - 0x8085D924:("D_8085D924","UNK_TYPE1","",0x1), - 0x8085D928:("D_8085D928","f32","",0x4), + 0x8085D918:("D_8085D918","Vec3f","",0xC), + 0x8085D924:("D_8085D924","Vec3f","",0xC), 0x8085D930:("D_8085D930","UNK_TYPE1","",0x1), 0x8085D934:("D_8085D934","UNK_TYPE1","",0x1), 0x8085D938:("D_8085D938","UNK_TYPE4","",0x4), 0x8085D93C:("D_8085D93C","UNK_TYPE4","",0x4), - 0x8085D940:("D_8085D940","f32","",0x4), - 0x8085D948:("D_8085D948","f32","",0x4), - 0x8085D94C:("D_8085D94C","f32","",0x4), - 0x8085D954:("D_8085D954","f32","",0x4), + 0x8085D940:("D_8085D940","Vec3f","",0xC), + 0x8085D94C:("D_8085D94C","Vec3f","",0xC), 0x8085D958:("D_8085D958","UNK_TYPE1","",0x1), 0x8085D960:("D_8085D960","UNK_TYPE1","",0x1), 0x8085D96C:("D_8085D96C","UNK_TYPE1","",0x1), @@ -5444,20 +5381,18 @@ 0x8085E6EC:("D_8085E6EC","f32","",0x4), 0x8085E6F0:("D_8085E6F0","f32","",0x4), 0x8085E6F4:("D_8085E6F4","f32","",0x4), - 0x80862AF0:("D_80862AF0","UNK_TYPE1","",0x1), - 0x80862AF4:("D_80862AF4","f32","",0x4), - 0x80862AF8:("D_80862AF8","f32","",0x4), + 0x80862AF0:("sDogSpawnPos","Vec3f","",0xC), 0x80862AFC:("D_80862AFC","f32","",0x4), 0x80862B00:("D_80862B00","UNK_TYPE1","",0x1), 0x80862B02:("D_80862B02","UNK_TYPE1","",0x1), 0x80862B04:("D_80862B04","UNK_TYPE1","",0x1), - 0x80862B08:("D_80862B08","UNK_TYPE1","",0x1), - 0x80862B0C:("D_80862B0C","UNK_TYPE1","",0x1), - 0x80862B10:("D_80862B10","UNK_TYPE1","",0x1), - 0x80862B14:("D_80862B14","UNK_TYPE1","",0x1), + 0x80862B08:("sPlayerCurrentFloorType","UNK_TYPE1","",0x1), + 0x80862B0C:("sPlayerCurrentWallFlags","UNK_TYPE1","",0x1), + 0x80862B10:("sPlayerConveyorSpeedIndex","UNK_TYPE1","",0x1), + 0x80862B14:("sPlayerIsOnFloorConveyor","UNK_TYPE1","",0x1), 0x80862B16:("D_80862B16","UNK_TYPE1","",0x1), 0x80862B18:("D_80862B18","f32","",0x4), - 0x80862B1C:("D_80862B1C","UNK_TYPE1","",0x1), + 0x80862B1C:("sPlayerPrevFloorProperty","UNK_TYPE1","",0x1), 0x80862B20:("D_80862B20","UNK_TYPE1","",0x1), 0x80862B24:("D_80862B24","UNK_TYPE1","",0x1), 0x80862B28:("D_80862B28","UNK_TYPE1","",0x1), @@ -5465,7 +5400,7 @@ 0x80862B30:("D_80862B30","UNK_TYPE1","",0x1), 0x80862B3C:("D_80862B3C","f32","",0x4), 0x80862B40:("D_80862B40","UNK_TYPE1","",0x1), - 0x80862B44:("D_80862B44","UNK_TYPE1","",0x1), + 0x80862B44:("sPlayerControlInput","UNK_TYPE1","",0x1), 0x80862B48:("D_80862B48","UNK_TYPE1","",0x1), 0x80862B4C:("D_80862B4C","UNK_TYPE1","",0x1), 0x80862B50:("D_80862B50","UNK_TYPE1","",0x1), diff --git a/tools/gitable.py b/tools/gitable.py new file mode 100755 index 000000000..dad39638f --- /dev/null +++ b/tools/gitable.py @@ -0,0 +1,1171 @@ +#!/usr/bin/env python3 +import argparse +from cgitb import text +import dataclasses +import os +import struct +import sys +import typing + +GETITEMENTRY_FORMAT = ">BBbBH" +GETITEMENTRY_LENGTH = struct.calcsize(GETITEMENTRY_FORMAT) + +# MM US: 0x2E964 + +itemId_names = { + 0x00: "ITEM_OCARINA", + 0x01: "ITEM_BOW", + 0x02: "ITEM_ARROW_FIRE", + 0x03: "ITEM_ARROW_ICE", + 0x04: "ITEM_ARROW_LIGHT", + 0x05: "ITEM_OCARINA_FAIRY", + 0x06: "ITEM_BOMB", + 0x07: "ITEM_BOMBCHU", + 0x08: "ITEM_STICK", + 0x09: "ITEM_NUT", + 0x0A: "ITEM_MAGIC_BEANS", + 0x0B: "ITEM_SLINGSHOT", + 0x0C: "ITEM_POWDER_KEG", + 0x0D: "ITEM_PICTO_BOX", + 0x0E: "ITEM_LENS", + 0x0F: "ITEM_HOOKSHOT", + 0x10: "ITEM_SWORD_GREAT_FAIRY", + 0x11: "ITEM_LONGSHOT", + 0x12: "ITEM_BOTTLE", + 0x13: "ITEM_POTION_RED", + 0x14: "ITEM_POTION_GREEN", + 0x15: "ITEM_POTION_BLUE", + 0x16: "ITEM_FAIRY", + 0x17: "ITEM_DEKU_PRINCESS", + 0x18: "ITEM_MILK_BOTTLE", + 0x19: "ITEM_MILK_HALF", + 0x1A: "ITEM_FISH", + 0x1B: "ITEM_BUG", + 0x1C: "ITEM_BLUE_FIRE", + 0x1D: "ITEM_POE", + 0x1E: "ITEM_BIG_POE", + 0x1F: "ITEM_SPRING_WATER", + 0x20: "ITEM_HOT_SPRING_WATER", + 0x21: "ITEM_ZORA_EGG", + 0x22: "ITEM_GOLD_DUST", + 0x23: "ITEM_MUSHROOM", + 0x24: "ITEM_SEAHORSE", + 0x25: "ITEM_CHATEAU", + 0x26: "ITEM_HYLIAN_LOACH", + 0x27: "ITEM_OBABA_DRINK", + 0x28: "ITEM_MOON_TEAR", + 0x29: "ITEM_DEED_LAND", + 0x2A: "ITEM_DEED_SWAMP", + 0x2B: "ITEM_DEED_MOUNTAIN", + 0x2C: "ITEM_DEED_OCEAN", + 0x2D: "ITEM_ROOM_KEY", + 0x2E: "ITEM_LETTER_MAMA", + 0x2F: "ITEM_LETTER_TO_KAFEI", + 0x30: "ITEM_PENDANT_OF_MEMORIES", + 0x31: "ITEM_TINGLE_MAP", + 0x32: "ITEM_MASK_DEKU", + 0x33: "ITEM_MASK_GORON", + 0x34: "ITEM_MASK_ZORA", + 0x35: "ITEM_MASK_FIERCE_DEITY", + 0x36: "ITEM_MASK_TRUTH", + 0x37: "ITEM_MASK_KAFEIS_MASK", + 0x38: "ITEM_MASK_ALL_NIGHT", + 0x39: "ITEM_MASK_BUNNY", + 0x3A: "ITEM_MASK_KEATON", + 0x3B: "ITEM_MASK_GARO", + 0x3C: "ITEM_MASK_ROMANI", + 0x3D: "ITEM_MASK_CIRCUS_LEADER", + 0x3E: "ITEM_MASK_POSTMAN", + 0x3F: "ITEM_MASK_COUPLE", + 0x40: "ITEM_MASK_GREAT_FAIRY", + 0x41: "ITEM_MASK_GIBDO", + 0x42: "ITEM_MASK_DON_GERO", + 0x43: "ITEM_MASK_KAMARO", + 0x44: "ITEM_MASK_CAPTAIN", + 0x45: "ITEM_MASK_STONE", + 0x46: "ITEM_MASK_BREMEN", + 0x47: "ITEM_MASK_BLAST", + 0x48: "ITEM_MASK_SCENTS", + 0x49: "ITEM_MASK_GIANT", + 0x4A: "ITEM_BOW_ARROW_FIRE", + 0x4B: "ITEM_BOW_ARROW_ICE", + 0x4C: "ITEM_BOW_ARROW_LIGHT", + 0x4D: "ITEM_SWORD_KOKIRI", + 0x4E: "ITEM_SWORD_RAZOR", + 0x4F: "ITEM_SWORD_GILDED", + 0x50: "ITEM_SWORD_DEITY", + 0x51: "ITEM_SHIELD_HERO", + 0x52: "ITEM_SHIELD_MIRROR", + 0x53: "ITEM_QUIVER_30", + 0x54: "ITEM_QUIVER_40", + 0x55: "ITEM_QUIVER_50", + 0x56: "ITEM_BOMB_BAG_20", + 0x57: "ITEM_BOMB_BAG_30", + 0x58: "ITEM_BOMB_BAG_40", + 0x59: "ITEM_WALLET_DEFAULT", + 0x5A: "ITEM_WALLET_ADULT", + 0x5B: "ITEM_WALLET_GIANT", + 0x5C: "ITEM_FISHING_POLE", + 0x5D: "ITEM_REMAINS_ODOLWA", + 0x5E: "ITEM_REMAINS_GOHT", + 0x5F: "ITEM_REMAINS_GYORG", + 0x60: "ITEM_REMAINS_TWINMOLD", + 0x61: "ITEM_SONG_SONATA", + 0x62: "ITEM_SONG_LULLABY", + 0x63: "ITEM_SONG_NOVA", + 0x64: "ITEM_SONG_ELEGY", + 0x65: "ITEM_SONG_OATH", + 0x66: "ITEM_SONG_SARIA", + 0x67: "ITEM_SONG_TIME", + 0x68: "ITEM_SONG_HEALING", + 0x69: "ITEM_SONG_EPONA", + 0x6A: "ITEM_SONG_SOARING", + 0x6B: "ITEM_SONG_STORMS", + 0x6C: "ITEM_SONG_SUN", + 0x6D: "ITEM_BOMBERS_NOTEBOOK", + 0x6E: "ITEM_SKULL_TOKEN", + 0x6F: "ITEM_HEART_CONTAINER", + 0x70: "ITEM_HEART_PIECE", + 0x73: "ITEM_SONG_LULLABY_INTRO" , + 0x74: "ITEM_KEY_BOSS", + 0x75: "ITEM_COMPASS", + 0x76: "ITEM_DUNGEON_MAP", + 0x77: "ITEM_STRAY_FAIRIES", + 0x78: "ITEM_KEY_SMALL", + 0x79: "ITEM_MAGIC_SMALL", + 0x7A: "ITEM_MAGIC_LARGE", + 0x7B: "ITEM_HEART_PIECE_2", + 0x7C: "ITEM_INVALID_1", + 0x7D: "ITEM_INVALID_2", + 0x7E: "ITEM_INVALID_3", + 0x7F: "ITEM_INVALID_4", + 0x80: "ITEM_INVALID_5", + 0x81: "ITEM_INVALID_6", + 0x82: "ITEM_INVALID_7", + 0x83: "ITEM_RECOVERY_HEART", + 0x84: "ITEM_RUPEE_GREEN", + 0x85: "ITEM_RUPEE_BLUE", + 0x86: "ITEM_RUPEE_10", + 0x87: "ITEM_RUPEE_RED", + 0x88: "ITEM_RUPEE_PURPLE", + 0x89: "ITEM_RUPEE_SILVER", + 0x8A: "ITEM_RUPEE_HUGE", + 0x8B: "ITEM_STICKS_5", + 0x8C: "ITEM_STICKS_10", + 0x8D: "ITEM_NUTS_5", + 0x8E: "ITEM_NUTS_10", + 0x8F: "ITEM_BOMBS_5", + 0x90: "ITEM_BOMBS_10", + 0x91: "ITEM_BOMBS_20", + 0x92: "ITEM_BOMBS_30", + 0x93: "ITEM_ARROWS_10", + 0x94: "ITEM_ARROWS_30", + 0x95: "ITEM_ARROWS_40", + 0x96: "ITEM_ARROWS_50", + 0x97: "ITEM_BOMBCHUS_20", + 0x98: "ITEM_BOMBCHUS_10", + 0x99: "ITEM_BOMBCHUS_1", + 0x9A: "ITEM_BOMBCHUS_5", + 0x9B: "ITEM_STICK_UPGRADE_20", + 0x9C: "ITEM_STICK_UPGRADE_30", + 0x9D: "ITEM_NUT_UPGRADE_30", + 0x9E: "ITEM_NUT_UPGRADE_40", + 0x9F: "ITEM_CHATEAU_2", + 0xA0: "ITEM_MILK", + 0xA1: "ITEM_GOLD_DUST_2", + 0xA2: "ITEM_HYLIAN_LOACH_2", + 0xA3: "ITEM_SEAHORSE_CAUGHT", + 0xF0: "ITEM_F0" , + 0xF1: "ITEM_F1", + 0xF2: "ITEM_F2", + 0xFC: "ITEM_FC" , + 0xFD: "ITEM_FD", + 0xFE: "ITEM_FE", + 0xFF: "ITEM_NONE", +} + +getItemId_names = { + 0x00: "GI_NONE", + 0x01: "GI_RUPEE_GREEN", + 0x02: "GI_RUPEE_BLUE", + 0x03: "GI_RUPEE_10", + 0x04: "GI_RUPEE_RED", + 0x05: "GI_RUPEE_PURPLE", + 0x06: "GI_RUPEE_SILVER", + 0x07: "GI_RUPEE_HUGE", + 0x08: "GI_WALLET_ADULT", + 0x09: "GI_WALLET_GIANT", + 0x0A: "GI_RECOVERY_HEART", + 0x0C: "GI_HEART_PIECE", + 0x0D: "GI_HEART_CONTAINER", + 0x0E: "GI_MAGIC_SMALL", + 0x0F: "GI_MAGIC_LARGE", + 0x11: "GI_STRAY_FAIRY", + 0x14: "GI_BOMBS_1", + 0x15: "GI_BOMBS_5", + 0x16: "GI_BOMBS_10", + 0x17: "GI_BOMBS_20", + 0x18: "GI_BOMBS_30", + 0x19: "GI_STICKS_1", + 0x1A: "GI_BOMBCHUS_10", + 0x1B: "GI_BOMB_BAG_20", + 0x1C: "GI_BOMB_BAG_30", + 0x1D: "GI_BOMB_BAG_40", + 0x1E: "GI_ARROWS_10", + 0x1F: "GI_ARROWS_30", + 0x20: "GI_ARROWS_40", + 0x21: "GI_ARROWS_50", + 0x22: "GI_QUIVER_30", + 0x23: "GI_QUIVER_40", + 0x24: "GI_QUIVER_50", + 0x25: "GI_ARROW_FIRE", + 0x26: "GI_ARROW_ICE", + 0x27: "GI_ARROW_LIGHT", + 0x28: "GI_NUTS_1", + 0x29: "GI_NUTS_5", + 0x2A: "GI_NUTS_10", + 0x2E: "GI_BOMBCHUS_20", + 0x32: "GI_SHIELD_HERO", + 0x33: "GI_SHIELD_MIRROR", + 0x34: "GI_POWDER_KEG", + 0x35: "GI_MAGIC_BEANS", + 0x36: "GI_BOMBCHUS_1", + 0x37: "GI_SWORD_KOKIRI", + 0x38: "GI_SWORD_RAZOR", + 0x39: "GI_SWORD_GILDED", + 0x3A: "GI_BOMBCHUS_5", + 0x3B: "GI_SWORD_GREAT_FAIRY", + 0x3C: "GI_KEY_SMALL", + 0x3D: "GI_KEY_BOSS", + 0x3E: "GI_MAP", + 0x3F: "GI_COMPASS", + 0x40: "GI_40", + 0x41: "GI_HOOKSHOT", + 0x42: "GI_LENS", + 0x43: "GI_PICTO_BOX", + 0x4C: "GI_OCARINA", + 0x50: "GI_BOMBERS_NOTEBOOK", + 0x52: "GI_SKULL_TOKEN", + 0x55: "GI_REMAINS_ODOLWA", + 0x56: "GI_REMAINS_GOHT", + 0x57: "GI_REMAINS_GYORG", + 0x58: "GI_REMAINS_TWINMOLD", + 0x59: "GI_POTION_RED_BOTTLE", + 0x5A: "GI_BOTTLE", + 0x5B: "GI_POTION_RED", + 0x5C: "GI_POTION_GREEN", + 0x5D: "GI_POTION_BLUE", + 0x5E: "GI_FAIRY", + 0x5F: "GI_DEKU_PRINCESS", + 0x60: "GI_MILK_BOTTLE", + 0x61: "GI_MILK_HALF", + 0x62: "GI_FISH", + 0x63: "GI_BUG", + 0x64: "GI_BLUE_FIRE", + 0x65: "GI_POE", + 0x66: "GI_BIG_POE", + 0x67: "GI_SPRING_WATER", + 0x68: "GI_HOT_SPRING_WATER", + 0x69: "GI_ZORA_EGG", + 0x6A: "GI_GOLD_DUST", + 0x6B: "GI_MUSHROOM", + 0x6C: "GI_6C", + 0x6D: "GI_6D", + 0x6E: "GI_SEAHORSE", + 0x6F: "GI_CHATEAU_BOTTLE", + 0x70: "GI_70", + 0x75: "GI_75", + 0x76: "GI_ICE_TRAP", + 0x78: "GI_MASK_DEKU", + 0x79: "GI_MASK_GORON", + 0x7A: "GI_MASK_ZORA", + 0x7B: "GI_MASK_FIERCE_DEITY", + 0x7C: "GI_MASK_CAPTAIN", + 0x7D: "GI_MASK_GIANT", + 0x7E: "GI_MASK_ALL_NIGHT", + 0x7F: "GI_MASK_BUNNY", + 0x80: "GI_MASK_KEATON", + 0x81: "GI_MASK_GARO", + 0x82: "GI_MASK_ROMANI", + 0x83: "GI_MASK_CIRCUS_LEADER", + 0x84: "GI_MASK_POSTMAN", + 0x85: "GI_MASK_COUPLE", + 0x86: "GI_MASK_GREAT_FAIRY", + 0x87: "GI_MASK_GIBDO", + 0x88: "GI_MASK_DON_GERO", + 0x89: "GI_MASK_KAMARO", + 0x8A: "GI_MASK_TRUTH", + 0x8B: "GI_MASK_STONE", + 0x8C: "GI_MASK_BREMEN", + 0x8D: "GI_MASK_BLAST", + 0x8E: "GI_MASK_SCENTS", + 0x8F: "GI_MASK_KAFEIS_MASK", + 0x91: "GI_CHATEAU", + 0x92: "GI_MILK", + 0x93: "GI_GOLD_DUST_2", + 0x94: "GI_HYLIAN_LOACH", + 0x95: "GI_SEAHORSE_CAUGHT", + 0x96: "GI_MOON_TEAR", + 0x97: "GI_DEED_LAND", + 0x98: "GI_DEED_SWAMP", + 0x99: "GI_DEED_MOUNTAIN", + 0x9A: "GI_DEED_OCEAN", + 0x9B: "GI_SWORD_GREAT_FAIRY_STOLEN", + 0x9C: "GI_SWORD_KOKIRI_STOLEN", + 0x9D: "GI_SWORD_RAZOR_STOLEN", + 0x9E: "GI_SWORD_GILDED_STOLEN", + 0x9F: "GI_SHIELD_HERO_STOLEN", + 0xA0: "GI_ROOM_KEY", + 0xA1: "GI_LETTER_TO_MAMA", + 0xA2: "GI_A2", + 0xA3: "GI_A3", + 0xA4: "GI_A4", + 0xA5: "GI_A5", + 0xA6: "GI_A6", + 0xA7: "GI_A7", + 0xA8: "GI_A8", + 0xA9: "GI_BOTTLE_STOLEN", + 0xAA: "GI_LETTER_TO_KAFEI", + 0xAB: "GI_PENDANT_OF_MEMORIES", + 0xB4: "GI_TINGLE_MAP_CLOCK_TOWN", + 0xB5: "GI_TINGLE_MAP_WOODFALL", + 0xB6: "GI_TINGLE_MAP_SNOWHEAD", + 0xB7: "GI_TINGLE_MAP_ROMANI_RANCH", + 0xB8: "GI_TINGLE_MAP_GREAT_BAY", + 0xB9: "GI_TINGLE_MAP_STONE_TOWER", + 0xBA: "GI_MAX" # I pity the fool +} + +getItemDrawId_names = { + 0x00: "GID_BOTTLE", + 0x01: "GID_KEY_SMALL", + 0x02: "GID_MASK_KAMARO", + 0x03: "GID_MASK_COUPLE", + 0x04: "GID_04", + 0x05: "GID_05", + 0x06: "GID_06", + 0x07: "GID_07", + 0x08: "GID_RECOVERY_HEART", + 0x09: "GID_KEY_BOSS", + 0x0A: "GID_COMPASS", + 0x0B: "GID_BOMBERS_NOTEBOOK", + 0x0C: "GID_MASK_STONE", + 0x0D: "GID_MASK_KAFEIS_MASK", + 0x0E: "GID_MASK_CIRCUS_LEADER", + 0x0F: "GID_MASK_BREMEN", + 0x10: "GID_MASK_ALL_NIGHT", + 0x11: "GID_NUTS", + 0x12: "GID_HEART_CONTAINER", + 0x13: "GID_HEART_PIECE", + 0x14: "GID_QUIVER_30", + 0x15: "GID_QUIVER_40", + 0x16: "GID_QUIVER_50", + 0x17: "GID_BOMB_BAG_20", + 0x18: "GID_BOMB_BAG_30", + 0x19: "GID_BOMB_BAG_40", + 0x1A: "GID_STICK", + 0x1B: "GID_DUNGEON_MAP", + 0x1C: "GID_MAGIC_SMALL", + 0x1D: "GID_MAGIC_LARGE", + 0x1E: "GID_BOMB", + 0x1F: "GID_STONE_OF_AGONY", + 0x20: "GID_WALLET_ADULT", + 0x21: "GID_WALLET_GIANT", + 0x22: "GID_MASK_DON_GERO", + 0x23: "GID_ARROWS_SMALL", + 0x24: "GID_ARROWS_MEDIUM", + 0x25: "GID_ARROWS_LARGE", + 0x26: "GID_BOMBCHU", + 0x27: "GID_SHIELD_HERO", + 0x28: "GID_HOOKSHOT", + 0x29: "GID_29", + 0x2A: "GID_OCARINA", + 0x2B: "GID_MILK", + 0x2C: "GID_MASK_KEATON", + 0x2D: "GID_TINGLE_MAP", + 0x2E: "GID_BOW", + 0x2F: "GID_LENS", + 0x30: "GID_POTION_GREEN", + 0x31: "GID_POTION_RED", + 0x32: "GID_POTION_BLUE", + 0x33: "GID_SHIELD_MIRROR", + 0x34: "GID_MAGIC_BEANS", + 0x35: "GID_FISH", + 0x36: "GID_LETTER_MAMA", + 0x37: "GID_37", + 0x38: "GID_SWORD_BGS", + 0x39: "GID_MASK_SUN", + 0x3A: "GID_MASK_BLAST", + 0x3B: "GID_FAIRY", + 0x3C: "GID_MASK_SCENTS", + 0x3D: "GID_MASK_CAPTAIN", + 0x3E: "GID_MASK_BUNNY", + 0x3F: "GID_MASK_TRUTH", + 0x40: "GID_DEED_SWAMP", + 0x41: "GID_DEED_MOUNTAIN", + 0x42: "GID_RUPEE_HUGE", + 0x43: "GID_DEED_OCEAN", + 0x44: "GID_MASK_GORON", + 0x45: "GID_MASK_ZORA", + 0x46: "GID_46", + 0x47: "GID_ARROW_FIRE", + 0x48: "GID_ARROW_ICE", + 0x49: "GID_ARROW_LIGHT", + 0x4A: "GID_SKULL_TOKEN", + 0x4B: "GID_BUG", + 0x4C: "GID_4C", + 0x4D: "GID_POE", + 0x4E: "GID_FAIRY_2", + 0x4F: "GID_RUPEE_GREEN", + 0x50: "GID_RUPEE_BLUE", + 0x51: "GID_RUPEE_RED", + 0x52: "GID_BIG_POE", + 0x53: "GID_RUPEE_PURPLE", + 0x54: "GID_RUPEE_SILVER", + 0x55: "GID_SWORD_KOKIRI", + 0x56: "GID_SKULL_TOKEN_2", + 0x57: "GID_57", + 0x58: "GID_ZORA_EGG", + 0x59: "GID_MOON_TEAR", + 0x5A: "GID_DEED_LAND", + 0x5B: "GID_MASK_DEKU", + 0x5C: "GID_REMAINS_ODOLWA", + 0x5D: "GID_POWDER_KEG", + 0x5E: "GID_GOLD_DUST", + 0x5F: "GID_SEAHORSE", + 0x60: "GID_60", + 0x61: "GID_HYLIAN_LOACH", + 0x62: "GID_SEAHORSE_CAUGHT", + 0x63: "GID_REMAINS_GOHT", + 0x64: "GID_REMAINS_GYORG", + 0x65: "GID_REMAINS_TWINMOLD", + 0x66: "GID_SWORD_RAZOR", + 0x67: "GID_SWORD_GILDED", + 0x68: "GID_SWORD_GREAT_FAIRY", + 0x69: "GID_MASK_GARO", + 0x6A: "GID_MASK_GREAT_FAIRY", + 0x6B: "GID_MASK_GIBDO", + 0x6C: "GID_ROOM_KEY", + 0x6D: "GID_LETTER_TO_KAFEI", + 0x6E: "GID_PENDANT_OF_MEMORIES", + 0x6F: "GID_MUSHROOM", + 0x70: "GID_MASK_ROMANI", + 0x71: "GID_MASK_POSTMAN", + 0x72: "GID_MASK_GIANT", + 0x73: "GID_CHATEAU", + 0x74: "GID_PICTO_BOX", + 0x75: "GID_MASK_FIERCE_DEITY", + 0x76: "GID_MAX", + -1: "GID_NONE", +} + +objectId_names = { + 0x000: "OBJECT_UNSET_0", + 0x001: "GAMEPLAY_KEEP", + 0x002: "GAMEPLAY_FIELD_KEEP", + 0x003: "GAMEPLAY_DANGEON_KEEP", + 0x004: "OBJECT_NB", + 0x005: "OBJECT_OKUTA", + 0x006: "OBJECT_CROW", + 0x007: "OBJECT_AH", + 0x008: "OBJECT_DY_OBJ", + 0x009: "OBJECT_WALLMASTER", + 0x00A: "OBJECT_DODONGO", + 0x00B: "OBJECT_FIREFLY", + 0x00C: "OBJECT_BOX", + 0x00D: "OBJECT_AL", + 0x00E: "OBJECT_BUBBLE", + 0x00F: "OBJECT_NIW", + 0x010: "OBJECT_LINK_BOY", + 0x011: "OBJECT_LINK_CHILD", + 0x012: "OBJECT_TITE", + 0x013: "OBJECT_TAB", + 0x014: "OBJECT_PH", + 0x015: "OBJECT_AND", + 0x016: "OBJECT_MSMO", + 0x017: "OBJECT_DINOFOS", + 0x018: "OBJECT_DRS", + 0x019: "OBJECT_ZL1", + 0x01A: "OBJECT_AN4", + 0x01B: "OBJECT_UNSET_1B", + 0x01C: "OBJECT_TEST3", + 0x01D: "OBJECT_FAMOS", + 0x01E: "OBJECT_UNSET_1E", + 0x01F: "OBJECT_UNSET_1F", + 0x020: "OBJECT_ST", + 0x021: "OBJECT_UNSET_21", + 0x022: "OBJECT_THIEFBIRD", + 0x023: "OBJECT_UNSET_23", + 0x024: "OBJECT_UNSET_24", + 0x025: "OBJECT_UNSET_25", + 0x026: "OBJECT_UNSET_26", + 0x027: "OBJECT_UNSET_27", + 0x028: "OBJECT_UNSET_28", + 0x029: "OBJECT_UNSET_29", + 0x02A: "OBJECT_BOMBF", + 0x02B: "OBJECT_UNSET_2B", + 0x02C: "OBJECT_UNSET_2C", + 0x02D: "OBJECT_UNSET_2D", + 0x02E: "OBJECT_UNSET_2E", + 0x02F: "OBJECT_UNSET_2F", + 0x030: "OBJECT_AM", + 0x031: "OBJECT_DEKUBABA", + 0x032: "OBJECT_UNSET_32", + 0x033: "OBJECT_UNSET_33", + 0x034: "OBJECT_UNSET_34", + 0x035: "OBJECT_UNSET_35", + 0x036: "OBJECT_UNSET_36", + 0x037: "OBJECT_UNSET_37", + 0x038: "OBJECT_UNSET_38", + 0x039: "OBJECT_UNSET_39", + 0x03A: "OBJECT_UNSET_3A", + 0x03B: "OBJECT_UNSET_3B", + 0x03C: "OBJECT_UNSET_3C", + 0x03D: "OBJECT_UNSET_3D", + 0x03E: "OBJECT_WARP1", + 0x03F: "OBJECT_B_HEART", + 0x040: "OBJECT_DEKUNUTS", + 0x041: "OBJECT_UNSET_41", + 0x042: "OBJECT_UNSET_42", + 0x043: "OBJECT_UNSET_43", + 0x044: "OBJECT_UNSET_44", + 0x045: "OBJECT_UNSET_45", + 0x046: "OBJECT_UNSET_46", + 0x047: "OBJECT_UNSET_47", + 0x048: "OBJECT_UNSET_48", + 0x049: "OBJECT_UNSET_49", + 0x04A: "OBJECT_UNSET_4A", + 0x04B: "OBJECT_UNSET_4B", + 0x04C: "OBJECT_UNSET_4C", + 0x04D: "OBJECT_UNSET_4D", + 0x04E: "OBJECT_UNSET_4E", + 0x04F: "OBJECT_UNSET_4F", + 0x050: "OBJECT_UNSET_50", + 0x051: "OBJECT_BB", + 0x052: "OBJECT_DEATH", + 0x053: "OBJECT_UNSET_53", + 0x054: "OBJECT_UNSET_54", + 0x055: "OBJECT_UNSET_55", + 0x056: "OBJECT_UNSET_56", + 0x057: "OBJECT_UNSET_57", + 0x058: "OBJECT_UNSET_58", + 0x059: "OBJECT_UNSET_59", + 0x05A: "OBJECT_UNSET_5A", + 0x05B: "OBJECT_UNSET_5B", + 0x05C: "OBJECT_F40_OBJ", + 0x05D: "OBJECT_PO_COMPOSER", + 0x05E: "OBJECT_UNSET_5E", + 0x05F: "OBJECT_HATA", + 0x060: "OBJECT_UNSET_60", + 0x061: "OBJECT_WOOD02", + 0x062: "OBJECT_UNSET_62", + 0x063: "OBJECT_UNSET_63", + 0x064: "OBJECT_TRAP", + 0x065: "OBJECT_UNSET_65", + 0x066: "OBJECT_UNSET_66", + 0x067: "OBJECT_UNSET_67", + 0x068: "OBJECT_UNSET_68", + 0x069: "OBJECT_UNSET_69", + 0x06A: "OBJECT_VM", + 0x06B: "OBJECT_UNSET_6B", + 0x06C: "OBJECT_UNSET_6C", + 0x06D: "OBJECT_UNSET_6D", + 0x06E: "OBJECT_UNSET_6E", + 0x06F: "OBJECT_UNSET_6F", + 0x070: "OBJECT_EFC_STAR_FIELD", + 0x071: "OBJECT_UNSET_71", + 0x072: "OBJECT_UNSET_72", + 0x073: "OBJECT_UNSET_73", + 0x074: "OBJECT_UNSET_74", + 0x075: "OBJECT_RD", + 0x076: "OBJECT_YUKIMURA_OBJ", + 0x077: "OBJECT_HEAVY_OBJECT", + 0x078: "OBJECT_UNSET_78", + 0x079: "OBJECT_UNSET_79", + 0x07A: "OBJECT_UNSET_7A", + 0x07B: "OBJECT_UNSET_7B", + 0x07C: "OBJECT_UNSET_7C", + 0x07D: "OBJECT_HORSE_LINK_CHILD", + 0x07E: "OBJECT_UNSET_7E", + 0x07F: "OBJECT_UNSET_7F", + 0x080: "OBJECT_SYOKUDAI", + 0x081: "OBJECT_UNSET_81", + 0x082: "OBJECT_UNSET_82", + 0x083: "OBJECT_UNSET_83", + 0x084: "OBJECT_EFC_TW", + 0x085: "OBJECT_UNSET_85", + 0x086: "OBJECT_GI_KEY", + 0x087: "OBJECT_MIR_RAY", + 0x088: "OBJECT_CTOWER_ROT", + 0x089: "OBJECT_UNSET_89", + 0x08A: "OBJECT_BDOOR", + 0x08B: "OBJECT_UNSET_8B", + 0x08C: "OBJECT_UNSET_8C", + 0x08D: "OBJECT_UNSET_8D", + 0x08E: "OBJECT_SB", + 0x08F: "OBJECT_GI_MELODY", + 0x090: "OBJECT_GI_HEART", + 0x091: "OBJECT_GI_COMPASS", + 0x092: "OBJECT_GI_BOSSKEY", + 0x093: "OBJECT_UNSET_93", + 0x094: "OBJECT_GI_NUTS", + 0x095: "OBJECT_UNSET_95", + 0x096: "OBJECT_GI_HEARTS", + 0x097: "OBJECT_GI_ARROWCASE", + 0x098: "OBJECT_GI_BOMBPOUCH", + 0x099: "OBJECT_IN", + 0x09A: "OBJECT_UNSET_9A", + 0x09B: "OBJECT_UNSET_9B", + 0x09C: "OBJECT_UNSET_9C", + 0x09D: "OBJECT_OS_ANIME", + 0x09E: "OBJECT_GI_BOTTLE", + 0x09F: "OBJECT_GI_STICK", + 0x0A0: "OBJECT_GI_MAP", + 0x0A1: "OBJECT_OF1D_MAP", + 0x0A2: "OBJECT_RU2", + 0x0A3: "OBJECT_UNSET_A3", + 0x0A4: "OBJECT_GI_MAGICPOT", + 0x0A5: "OBJECT_GI_BOMB_1", + 0x0A6: "OBJECT_UNSET_A6", + 0x0A7: "OBJECT_MA2", + 0x0A8: "OBJECT_GI_PURSE", + 0x0A9: "OBJECT_UNSET_A9", + 0x0AA: "OBJECT_UNSET_AA", + 0x0AB: "OBJECT_RR", + 0x0AC: "OBJECT_UNSET_AC", + 0x0AD: "OBJECT_UNSET_AD", + 0x0AE: "OBJECT_UNSET_AE", + 0x0AF: "OBJECT_GI_ARROW", + 0x0B0: "OBJECT_GI_BOMB_2", + 0x0B1: "OBJECT_UNSET_B1", + 0x0B2: "OBJECT_UNSET_B2", + 0x0B3: "OBJECT_GI_SHIELD_2", + 0x0B4: "OBJECT_GI_HOOKSHOT", + 0x0B5: "OBJECT_GI_OCARINA", + 0x0B6: "OBJECT_GI_MILK", + 0x0B7: "OBJECT_MA1", + 0x0B8: "OBJECT_UNSET_B8", + 0x0B9: "OBJECT_UNSET_B9", + 0x0BA: "OBJECT_UNSET_BA", + 0x0BB: "OBJECT_NY", + 0x0BC: "OBJECT_FR", + 0x0BD: "OBJECT_UNSET_BD", + 0x0BE: "OBJECT_UNSET_BE", + 0x0BF: "OBJECT_GI_BOW", + 0x0C0: "OBJECT_GI_GLASSES", + 0x0C1: "OBJECT_GI_LIQUID", + 0x0C2: "OBJECT_ANI", + 0x0C3: "OBJECT_GI_SHIELD_3", + 0x0C4: "OBJECT_UNSET_C4", + 0x0C5: "OBJECT_UNSET_C5", + 0x0C6: "OBJECT_GI_BEAN", + 0x0C7: "OBJECT_GI_FISH", + 0x0C8: "OBJECT_UNSET_C8", + 0x0C9: "OBJECT_UNSET_C9", + 0x0CA: "OBJECT_UNSET_CA", + 0x0CB: "OBJECT_GI_LONGSWORD", + 0x0CC: "OBJECT_UNSET_CC", + 0x0CD: "OBJECT_UNSET_CD", + 0x0CE: "OBJECT_UNSET_CE", + 0x0CF: "OBJECT_UNSET_CF", + 0x0D0: "OBJECT_ZO", + 0x0D1: "OBJECT_UNSET_D1", + 0x0D2: "OBJECT_UMAJUMP", + 0x0D3: "OBJECT_UNSET_D3", + 0x0D4: "OBJECT_UNSET_D4", + 0x0D5: "OBJECT_MASTERGOLON", + 0x0D6: "OBJECT_MASTERZOORA", + 0x0D7: "OBJECT_AOB", + 0x0D8: "OBJECT_IK", + 0x0D9: "OBJECT_AHG", + 0x0DA: "OBJECT_CNE", + 0x0DB: "OBJECT_UNSET_DB", + 0x0DC: "OBJECT_UNSET_DC", + 0x0DD: "OBJECT_AN3", + 0x0DE: "OBJECT_BJI", + 0x0DF: "OBJECT_BBA", + 0x0E0: "OBJECT_AN2", + 0x0E1: "OBJECT_UNSET_E1", + 0x0E2: "OBJECT_AN1", + 0x0E3: "OBJECT_BOJ", + 0x0E4: "OBJECT_FZ", + 0x0E5: "OBJECT_BOB", + 0x0E6: "OBJECT_GE1", + 0x0E7: "OBJECT_YABUSAME_POINT", + 0x0E8: "OBJECT_UNSET_E8", + 0x0E9: "OBJECT_UNSET_E9", + 0x0EA: "OBJECT_UNSET_EA", + 0x0EB: "OBJECT_UNSET_EB", + 0x0EC: "OBJECT_D_HSBLOCK", + 0x0ED: "OBJECT_D_LIFT", + 0x0EE: "OBJECT_MAMENOKI", + 0x0EF: "OBJECT_GOROIWA", + 0x0F0: "OBJECT_TORYO", + 0x0F1: "OBJECT_DAIKU", + 0x0F2: "OBJECT_NWC", + 0x0F3: "OBJECT_GM", + 0x0F4: "OBJECT_MS", + 0x0F5: "OBJECT_HS", + 0x0F6: "OBJECT_UNSET_F6", + 0x0F7: "OBJECT_LIGHTSWITCH", + 0x0F8: "OBJECT_KUSA", + 0x0F9: "OBJECT_TSUBO", + 0x0FA: "OBJECT_UNSET_FA", + 0x0FB: "OBJECT_UNSET_FB", + 0x0FC: "OBJECT_KANBAN", + 0x0FD: "OBJECT_OWL", + 0x0FE: "OBJECT_MK", + 0x0FF: "OBJECT_FU", + 0x100: "OBJECT_GI_KI_TAN_MASK", + 0x101: "OBJECT_UNSET_101", + 0x102: "OBJECT_GI_MASK18", + 0x103: "OBJECT_GI_RABIT_MASK", + 0x104: "OBJECT_GI_TRUTH_MASK", + 0x105: "OBJECT_UNSET_105", + 0x106: "OBJECT_STREAM", + 0x107: "OBJECT_MM", + 0x108: "OBJECT_UNSET_108", + 0x109: "OBJECT_UNSET_109", + 0x10A: "OBJECT_UNSET_10A", + 0x10B: "OBJECT_UNSET_10B", + 0x10C: "OBJECT_UNSET_10C", + 0x10D: "OBJECT_UNSET_10D", + 0x10E: "OBJECT_UNSET_10E", + 0x10F: "OBJECT_JS", + 0x110: "OBJECT_CS", + 0x111: "OBJECT_UNSET_111", + 0x112: "OBJECT_UNSET_112", + 0x113: "OBJECT_GI_SOLDOUT", + 0x114: "OBJECT_UNSET_114", + 0x115: "OBJECT_MAG", + 0x116: "OBJECT_UNSET_116", + 0x117: "OBJECT_UNSET_117", + 0x118: "OBJECT_UNSET_118", + 0x119: "OBJECT_GI_GOLONMASK", + 0x11A: "OBJECT_GI_ZORAMASK", + 0x11B: "OBJECT_UNSET_11B", + 0x11C: "OBJECT_UNSET_11C", + 0x11D: "OBJECT_KA", + 0x11E: "OBJECT_UNSET_11E", + 0x11F: "OBJECT_ZG", + 0x120: "OBJECT_UNSET_120", + 0x121: "OBJECT_GI_M_ARROW", + 0x122: "OBJECT_DS2", + 0x123: "OBJECT_UNSET_123", + 0x124: "OBJECT_FISH", + 0x125: "OBJECT_GI_SUTARU", + 0x126: "OBJECT_UNSET_126", + 0x127: "OBJECT_SSH", + 0x128: "OBJECT_BIGSLIME", + 0x129: "OBJECT_BG", + 0x12A: "OBJECT_BOMBIWA", + 0x12B: "OBJECT_HINTNUTS", + 0x12C: "OBJECT_RS", + 0x12D: "OBJECT_UNSET_12D", + 0x12E: "OBJECT_GLA", + 0x12F: "OBJECT_UNSET_12F", + 0x130: "OBJECT_GELDB", + 0x131: "OBJECT_UNSET_131", + 0x132: "OBJECT_DOG", + 0x133: "OBJECT_KIBAKO2", + 0x134: "OBJECT_DNS", + 0x135: "OBJECT_DNK", + 0x136: "OBJECT_UNSET_136", + 0x137: "OBJECT_GI_INSECT", + 0x138: "OBJECT_UNSET_138", + 0x139: "OBJECT_GI_GHOST", + 0x13A: "OBJECT_GI_SOUL", + 0x13B: "OBJECT_UNSET_13B", + 0x13C: "OBJECT_UNSET_13C", + 0x13D: "OBJECT_UNSET_13D", + 0x13E: "OBJECT_UNSET_13E", + 0x13F: "OBJECT_GI_RUPY", + 0x140: "OBJECT_MU", + 0x141: "OBJECT_WF", + 0x142: "OBJECT_SKB", + 0x143: "OBJECT_GS", + 0x144: "OBJECT_PS", + 0x145: "OBJECT_OMOYA_OBJ", + 0x146: "OBJECT_COW", + 0x147: "OBJECT_UNSET_147", + 0x148: "OBJECT_GI_SWORD_1", + 0x149: "OBJECT_UNSET_149", + 0x14A: "OBJECT_UNSET_14A", + 0x14B: "OBJECT_ZL4", + 0x14C: "OBJECT_LINK_GORON", + 0x14D: "OBJECT_LINK_ZORA", + 0x14E: "OBJECT_GRASSHOPPER", + 0x14F: "OBJECT_BOYO", + 0x150: "OBJECT_UNSET_150", + 0x151: "OBJECT_UNSET_151", + 0x152: "OBJECT_UNSET_152", + 0x153: "OBJECT_FWALL", + 0x154: "OBJECT_LINK_NUTS", + 0x155: "OBJECT_JSO", + 0x156: "OBJECT_KNIGHT", + 0x157: "OBJECT_ICICLE", + 0x158: "OBJECT_SPDWEB", + 0x159: "OBJECT_UNSET_159", + 0x15A: "OBJECT_BOSS01", + 0x15B: "OBJECT_BOSS02", + 0x15C: "OBJECT_BOSS03", + 0x15D: "OBJECT_BOSS04", + 0x15E: "OBJECT_BOSS05", + 0x15F: "OBJECT_BOSS06", + 0x160: "OBJECT_BOSS07", + 0x161: "OBJECT_RAF", + 0x162: "OBJECT_FUNEN", + 0x163: "OBJECT_RAILLIFT", + 0x164: "OBJECT_NUMA_OBJ", + 0x165: "OBJECT_FLOWERPOT", + 0x166: "OBJECT_SPINYROLL", + 0x167: "OBJECT_ICE_BLOCK", + 0x168: "OBJECT_UNSET_168", + 0x169: "OBJECT_KEIKOKU_DEMO", + 0x16A: "OBJECT_SLIME", + 0x16B: "OBJECT_PR", + 0x16C: "OBJECT_F52_OBJ", + 0x16D: "OBJECT_F53_OBJ", + 0x16E: "OBJECT_UNSET_16E", + 0x16F: "OBJECT_KIBAKO", + 0x170: "OBJECT_SEK", + 0x171: "OBJECT_GMO", + 0x172: "OBJECT_BAT", + 0x173: "OBJECT_SEKIHIL", + 0x174: "OBJECT_SEKIHIG", + 0x175: "OBJECT_SEKIHIN", + 0x176: "OBJECT_SEKIHIZ", + 0x177: "OBJECT_UNSET_177", + 0x178: "OBJECT_WIZ", + 0x179: "OBJECT_LADDER", + 0x17A: "OBJECT_MKK", + 0x17B: "OBJECT_UNSET_17B", + 0x17C: "OBJECT_UNSET_17C", + 0x17D: "OBJECT_UNSET_17D", + 0x17E: "OBJECT_KEIKOKU_OBJ", + 0x17F: "OBJECT_SICHITAI_OBJ", + 0x180: "OBJECT_DEKUCITY_ANA_OBJ", + 0x181: "OBJECT_RAT", + 0x182: "OBJECT_WATER_EFFECT", + 0x183: "OBJECT_UNSET_183", + 0x184: "OBJECT_DBLUE_OBJECT", + 0x185: "OBJECT_BAL", + 0x186: "OBJECT_WARP_UZU", + 0x187: "OBJECT_DRIFTICE", + 0x188: "OBJECT_FALL", + 0x189: "OBJECT_HANAREYAMA_OBJ", + 0x18A: "OBJECT_CRACE_OBJECT", + 0x18B: "OBJECT_DNQ", + 0x18C: "OBJECT_OBJ_TOKEIDAI", + 0x18D: "OBJECT_EG", + 0x18E: "OBJECT_TRU", + 0x18F: "OBJECT_TRT", + 0x190: "OBJECT_HAKUGIN_OBJ", + 0x191: "OBJECT_HORSE_GAME_CHECK", + 0x192: "OBJECT_STK", + 0x193: "OBJECT_UNSET_193", + 0x194: "OBJECT_UNSET_194", + 0x195: "OBJECT_MNK", + 0x196: "OBJECT_GI_BOTTLE_RED", + 0x197: "OBJECT_TOKEI_TOBIRA", + 0x198: "OBJECT_AZ", + 0x199: "OBJECT_TWIG", + 0x19A: "OBJECT_DEKUCITY_OBJ", + 0x19B: "OBJECT_PO_FUSEN", + 0x19C: "OBJECT_RACETSUBO", + 0x19D: "OBJECT_HA", + 0x19E: "OBJECT_BIGOKUTA", + 0x19F: "OBJECT_OPEN_OBJ", + 0x1A0: "OBJECT_FU_KAITEN", + 0x1A1: "OBJECT_FU_MATO", + 0x1A2: "OBJECT_MTORIDE", + 0x1A3: "OBJECT_OSN", + 0x1A4: "OBJECT_TOKEI_STEP", + 0x1A5: "OBJECT_LOTUS", + 0x1A6: "OBJECT_TL", + 0x1A7: "OBJECT_DKJAIL_OBJ", + 0x1A8: "OBJECT_VISIBLOCK", + 0x1A9: "OBJECT_TSN", + 0x1AA: "OBJECT_DS2N", + 0x1AB: "OBJECT_FSN", + 0x1AC: "OBJECT_SHN", + 0x1AD: "OBJECT_BIGICICLE", + 0x1AE: "OBJECT_GI_BOTTLE_15", + 0x1AF: "OBJECT_TK", + 0x1B0: "OBJECT_MARKET_OBJ", + 0x1B1: "OBJECT_GI_RESERVE00", + 0x1B2: "OBJECT_GI_RESERVE01", + 0x1B3: "OBJECT_LIGHTBLOCK", + 0x1B4: "OBJECT_TAKARAYA_OBJECTS", + 0x1B5: "OBJECT_WDHAND", + 0x1B6: "OBJECT_SDN", + 0x1B7: "OBJECT_SNOWWD", + 0x1B8: "OBJECT_GIANT", + 0x1B9: "OBJECT_COMB", + 0x1BA: "OBJECT_HANA", + 0x1BB: "OBJECT_BOSS_HAKUGIN", + 0x1BC: "OBJECT_MEGANEANA_OBJ", + 0x1BD: "OBJECT_GI_NUTSMASK", + 0x1BE: "OBJECT_STK2", + 0x1BF: "OBJECT_SPOT11_OBJ", + 0x1C0: "OBJECT_DANPEI_OBJECT", + 0x1C1: "OBJECT_DHOUSE", + 0x1C2: "OBJECT_HAKAISI", + 0x1C3: "OBJECT_PO", + 0x1C4: "OBJECT_SNOWMAN", + 0x1C5: "OBJECT_PO_SISTERS", + 0x1C6: "OBJECT_PP", + 0x1C7: "OBJECT_GORONSWITCH", + 0x1C8: "OBJECT_DELF", + 0x1C9: "OBJECT_BOTIHASIRA", + 0x1CA: "OBJECT_GI_BIGBOMB", + 0x1CB: "OBJECT_PST", + 0x1CC: "OBJECT_BSMASK", + 0x1CD: "OBJECT_SPIDERTENT", + 0x1CE: "OBJECT_ZORAEGG", + 0x1CF: "OBJECT_KBT", + 0x1D0: "OBJECT_GG", + 0x1D1: "OBJECT_MARUTA", + 0x1D2: "OBJECT_GHAKA", + 0x1D3: "OBJECT_OYU", + 0x1D4: "OBJECT_DNP", + 0x1D5: "OBJECT_DAI", + 0x1D6: "OBJECT_KGY", + 0x1D7: "OBJECT_FB", + 0x1D8: "OBJECT_TAISOU", + 0x1D9: "OBJECT_MASK_BU_SAN", + 0x1DA: "OBJECT_MASK_KI_TAN", + 0x1DB: "OBJECT_MASK_RABIT", + 0x1DC: "OBJECT_MASK_SKJ", + 0x1DD: "OBJECT_MASK_BAKURETU", + 0x1DE: "OBJECT_MASK_TRUTH", + 0x1DF: "OBJECT_GK", + 0x1E0: "OBJECT_HAKA_OBJ", + 0x1E1: "OBJECT_MASK_GORON", + 0x1E2: "OBJECT_MASK_ZORA", + 0x1E3: "OBJECT_MASK_NUTS", + 0x1E4: "OBJECT_MASK_BOY", + 0x1E5: "OBJECT_DNT", + 0x1E6: "OBJECT_YUKIYAMA", + 0x1E7: "OBJECT_ICEFLOE", + 0x1E8: "OBJECT_GI_GOLD_DUST", + 0x1E9: "OBJECT_GI_BOTTLE_16", + 0x1EA: "OBJECT_GI_BOTTLE_22", + 0x1EB: "OBJECT_BEE", + 0x1EC: "OBJECT_OT", + 0x1ED: "OBJECT_UTUBO", + 0x1EE: "OBJECT_DORA", + 0x1EF: "OBJECT_GI_LOACH", + 0x1F0: "OBJECT_GI_SEAHORSE", + 0x1F1: "OBJECT_BIGPO", + 0x1F2: "OBJECT_HARIKO", + 0x1F3: "OBJECT_DNO", + 0x1F4: "OBJECT_SINKAI_KABE", + 0x1F5: "OBJECT_KIN2_OBJ", + 0x1F6: "OBJECT_ISHI", + 0x1F7: "OBJECT_HAKUGIN_DEMO", + 0x1F8: "OBJECT_JG", + 0x1F9: "OBJECT_GI_SWORD_2", + 0x1FA: "OBJECT_GI_SWORD_3", + 0x1FB: "OBJECT_GI_SWORD_4", + 0x1FC: "OBJECT_UM", + 0x1FD: "OBJECT_MASK_GIBUDO", + 0x1FE: "OBJECT_MASK_JSON", + 0x1FF: "OBJECT_MASK_KERFAY", + 0x200: "OBJECT_MASK_BIGELF", + 0x201: "OBJECT_RB", + 0x202: "OBJECT_MBAR_OBJ", + 0x203: "OBJECT_IKANA_OBJ", + 0x204: "OBJECT_KZ", + 0x205: "OBJECT_TOKEI_TURRET", + 0x206: "OBJECT_ZOG", + 0x207: "OBJECT_ROTLIFT", + 0x208: "OBJECT_POSTHOUSE_OBJ", + 0x209: "OBJECT_GI_MASK09", + 0x20A: "OBJECT_GI_MASK14", + 0x20B: "OBJECT_GI_MASK15", + 0x20C: "OBJECT_INIBS_OBJECT", + 0x20D: "OBJECT_TREE", + 0x20E: "OBJECT_KAIZOKU_OBJ", + 0x20F: "OBJECT_GI_RESERVE_B_00", + 0x210: "OBJECT_GI_RESERVE_C_00", + 0x211: "OBJECT_ZOB", + 0x212: "OBJECT_MILKBAR", + 0x213: "OBJECT_DMASK", + 0x214: "OBJECT_MASK_KYOJIN", + 0x215: "OBJECT_GI_RESERVE_C_01", + 0x216: "OBJECT_ZOD", + 0x217: "OBJECT_KUMO30", + 0x218: "OBJECT_OBJ_YASI", + 0x219: "OBJECT_MASK_ROMERNY", + 0x21A: "OBJECT_TANRON1", + 0x21B: "OBJECT_TANRON2", + 0x21C: "OBJECT_TANRON3", + 0x21D: "OBJECT_GI_MAGICMUSHROOM", + 0x21E: "OBJECT_OBJ_CHAN", + 0x21F: "OBJECT_GI_MASK10", + 0x220: "OBJECT_ZOS", + 0x221: "OBJECT_MASK_POSTHAT", + 0x222: "OBJECT_F40_SWITCH", + 0x223: "OBJECT_LODMOON", + 0x224: "OBJECT_TRO", + 0x225: "OBJECT_GI_MASK12", + 0x226: "OBJECT_GI_MASK23", + 0x227: "OBJECT_GI_BOTTLE_21", + 0x228: "OBJECT_GI_CAMERA", + 0x229: "OBJECT_KAMEJIMA", + 0x22A: "OBJECT_HARFGIBUD", + 0x22B: "OBJECT_ZOV", + 0x22C: "OBJECT_HGDOOR", + 0x22D: "OBJECT_UNSET_22D", + 0x22E: "OBJECT_UNSET_22E", + 0x22F: "OBJECT_UNSET_22F", + 0x230: "OBJECT_DOR01", + 0x231: "OBJECT_DOR02", + 0x232: "OBJECT_DOR03", + 0x233: "OBJECT_DOR04", + 0x234: "OBJECT_LAST_OBJ", + 0x235: "OBJECT_REDEAD_OBJ", + 0x236: "OBJECT_IKNINSIDE_OBJ", + 0x237: "OBJECT_IKNV_OBJ", + 0x238: "OBJECT_PAMERA", + 0x239: "OBJECT_HSSTUMP", + 0x23A: "OBJECT_ZM", + 0x23B: "OBJECT_BIG_FWALL", + 0x23C: "OBJECT_SECOM_OBJ", + 0x23D: "OBJECT_HUNSUI", + 0x23E: "OBJECT_UCH", + 0x23F: "OBJECT_TANRON4", + 0x240: "OBJECT_TANRON5", + 0x241: "OBJECT_DT", + 0x242: "OBJECT_GI_MASK03", + 0x243: "OBJECT_CHA", + 0x244: "OBJECT_OBJ_DINNER", + 0x245: "OBJECT_GI_RESERVE_B_01", + 0x246: "OBJECT_LASTDAY", + 0x247: "OBJECT_BAI", + 0x248: "OBJECT_IN2", + 0x249: "OBJECT_IKN_DEMO", + 0x24A: "OBJECT_YB", + 0x24B: "OBJECT_RZ", + 0x24C: "OBJECT_MASK_ZACHO", + 0x24D: "OBJECT_GI_FIELDMAP", + 0x24E: "OBJECT_MASK_STONE", + 0x24F: "OBJECT_BJT", + 0x250: "OBJECT_TARU", + 0x251: "OBJECT_MOONSTON", + 0x252: "OBJECT_MASK_BREE", + 0x253: "OBJECT_GI_SCHEDULE", + 0x254: "OBJECT_GI_STONEMASK", + 0x255: "OBJECT_ZORABAND", + 0x256: "OBJECT_KEPN_KOYA", + 0x257: "OBJECT_OBJ_USIYANE", + 0x258: "OBJECT_GI_MASK05", + 0x259: "OBJECT_GI_MASK11", + 0x25A: "OBJECT_GI_MASK20", + 0x25B: "OBJECT_NNH", + 0x25C: "OBJECT_MASK_GERO", + 0x25D: "OBJECT_MASK_YOFUKASI", + 0x25E: "OBJECT_MASK_MEOTO", + 0x25F: "OBJECT_MASK_DANCER", + 0x260: "OBJECT_KZSAKU", + 0x261: "OBJECT_OBJ_MILK_BIN", + 0x262: "OBJECT_RANDOM_OBJ", + 0x263: "OBJECT_KUJIYA", + 0x264: "OBJECT_KITAN", + 0x265: "OBJECT_GI_MASK06", + 0x266: "OBJECT_GI_MASK16", + 0x267: "OBJECT_ASTR_OBJ", + 0x268: "OBJECT_BSB", + 0x269: "OBJECT_FALL2", + 0x26A: "OBJECT_STH", + 0x26B: "OBJECT_GI_MSSA", + 0x26C: "OBJECT_SMTOWER", + 0x26D: "OBJECT_GI_MASK21", + 0x26E: "OBJECT_YADO_OBJ", + 0x26F: "OBJECT_SYOTEN", + 0x270: "OBJECT_MOONEND", + 0x271: "OBJECT_OB", + 0x272: "OBJECT_GI_BOTTLE_04", + 0x273: "OBJECT_OBJ_DANPEILIFT", + 0x274: "OBJECT_WDOR01", + 0x275: "OBJECT_WDOR02", + 0x276: "OBJECT_WDOR03", + 0x277: "OBJECT_STK3", + 0x278: "OBJECT_KINSTA1_OBJ", + 0x279: "OBJECT_KINSTA2_OBJ", + 0x27A: "OBJECT_BH", + 0x27B: "OBJECT_WDOR04", + 0x27C: "OBJECT_WDOR05", + 0x27D: "OBJECT_GI_MASK17", + 0x27E: "OBJECT_GI_MASK22", + 0x27F: "OBJECT_LBFSHOT", + 0x280: "OBJECT_FUSEN", + 0x281: "OBJECT_ENDING_OBJ", + 0x282: "OBJECT_GI_MASK13", + 0x283: "OBJECT_ID_MAX", +} + +@dataclasses.dataclass +class GetItemEntry: + getItemId: int + itemId: int + field: int + gi: int + textId: int + objectId: int + + def __str__(self) -> str: + itemId_name = itemId_names.get(self.itemId, f"NOT FOUND: 0x{self.itemId:X}") + gid = abs(self.gi) - 1 + getitemDrawId_name = getItemDrawId_names.get(gid, f"NOT FOUND: 0x{abs(self.gi) - 1:X}") + + if self.gi == 0: + chest_anim = 0 + else: + chest_anim = "CHEST_ANIM_SHORT" if self.gi < 0 else "CHEST_ANIM_LONG" + + objectId_name = objectId_names.get(self.objectId, f"NOT FOUND: 0x{abs(self.objectId):X}") + + ret = f"/* 0x{self.getItemId:02X} */ GET_ITEM({itemId_name}, {objectId_name}, {getitemDrawId_name}, 0x{self.textId:X}, 0x{self.field:X}, {chest_anim})" + + return ret + +def main() -> None: + description = "Extract and print the GetItem table" + epilog = "" + + parser = argparse.ArgumentParser(description=description, epilog=epilog, formatter_class=argparse.RawTextHelpFormatter) + parser.add_argument("file", help="binary file to read") + parser.add_argument("offset", help="offset at which to start reading") + parser.add_argument("count", help="number of entries to extract") + parser.add_argument("-g", help="look further back for glitched items from Get Item Manipulation", action="store_true") + + args = parser.parse_args() + + start = int(args.offset, 0) + count = int(args.count, 0) + glitched = args.g + pos_start = 0 + + with open(args.file, "rb") as f: + if glitched: + start -= GETITEMENTRY_LENGTH * count + pos_start -= count + count *= 2 + + f.seek(start, os.SEEK_SET) + data = f.read(GETITEMENTRY_LENGTH * count) + unpacked_data = struct.iter_unpack(GETITEMENTRY_FORMAT, data) + get_item_entries: typing.List[GetItemEntry] = [] + + for i,entry in enumerate(unpacked_data): + get_item_entries.append(GetItemEntry(pos_start + i+1, *entry)) + + for entry in get_item_entries: + print(f"{entry},") + + + +if __name__ == "__main__": + main() diff --git a/tools/namefixer.py b/tools/namefixer.py index a03cc06cf..54edb5644 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -222,6 +222,7 @@ wordReplace = { "SkelAnime_InitLink": "SkelAnime_InitPlayer", "LinkAnimation_SetUpdateFunction": "PlayerAnimation_SetUpdateFunction", "LinkAnimation_Update": "PlayerAnimation_Update", + "LinkAnimation_AnimateFrame": "PlayerAnimation_AnimateFrame", "SkelAnime_SetTransition": "Animation_SetMorph", "LinkAnimation_Change": "PlayerAnimation_Change", "LinkAnimation_PlayOnce": "PlayerAnimation_PlayOnce", @@ -903,6 +904,7 @@ wordReplace = { "player->swordInfo": "player->meleeWeaponInfo", "player->itemActionParam": "player->heldItemAction", "player->heldItemActionParam": "player->itemAction", + "player->unk_A86": "player->currentActorCsIndex", "player->unk_A9C": "player->secretRumbleCharge", "player->unk_AA0": "player->closestSecretDistSq", "player->unk_AAC": "player->headLimbRot", @@ -911,6 +913,8 @@ wordReplace = { "player->getItemDrawId": "player->getItemDrawIdPlusOne", "player->unk_B68": "player->fallStartHeight", "player->unk_B6A": "player->fallDistance", + "player->unk_B80": "player->pushedSpeed", + "player->unk_B84": "player->pushedYaw", "player->targetActor": "player->talkActor", "player->targetActorDistance": "player->talkActorDistance", "player->unk_730": "player->targetedActor", @@ -991,6 +995,7 @@ wordReplace = { "play->sceneLoadFlag": "play->transitionTrigger", "play->unk_18B4A": "play->transitionMode", "play->unk_1887F": "play->transitionType", + "play->roomCtx.currRoom": "play->roomCtx.curRoom", "gSaveContext.nextTransition": "gSaveContext.nextTransitionType", "gSaveContext.unk_3F48": "gSaveContext.cutsceneTransitionControl", "gSaveContext.fadeDuration": "gSaveContext.transFadeDuration", diff --git a/undefined_syms.txt b/undefined_syms.txt index 2187673fc..7ef51ef24 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1103,18 +1103,6 @@ D_06002188 = 0x06002188; D_06000B70 = 0x06000B70; D_06000D60 = 0x06000D60; -// ovl_player_actor - -D_06008860 = 0x06008860; -D_0600BDD8 = 0x0600BDD8; -D_0600C540 = 0x0600C540; -D_060127B0 = 0x060127B0; -D_06013138 = 0x06013138; -D_060134D0 = 0x060134D0; -D_06014684 = 0x06014684; -D_060177B8 = 0x060177B8; -D_060178D0 = 0x060178D0; - // segment 0x07 From 92bdfe68c212d50ac6569fdb871b93be6230b3ad Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 29 May 2023 09:08:29 +1000 Subject: [PATCH 07/36] z_rcp.c setupDL docs/cleanup (#1253) * SetupDL enum * name functions * namefixer * cleanup * small cleanup * PR Review * don't need address of array * PR Suggestion --- docs/tutorial/advanced_control_flow.md | 2 +- docs/tutorial/documenting.md | 2 +- docs/tutorial/draw_functions.md | 8 +- include/gfx.h | 209 +- src/code/z_actor.c | 24 +- src/code/z_cheap_proc.c | 4 +- src/code/z_debug_display.c | 6 +- src/code/z_draw.c | 70 +- src/code/z_eff_blure.c | 8 +- src/code/z_eff_footmark.c | 2 +- src/code/z_eff_shield_particle.c | 2 +- src/code/z_eff_spark.c | 2 +- src/code/z_eff_tire_mark.c | 2 +- src/code/z_effect_soft_sprite_old_init.c | 2 +- src/code/z_en_item00.c | 8 +- src/code/z_fireobj.c | 2 +- src/code/z_lifemeter.c | 8 +- src/code/z_lights.c | 2 +- src/code/z_parameter.c | 30 +- src/code/z_player_lib.c | 2 +- src/code/z_prenmi.c | 2 +- src/code/z_rcp.c | 2017 +++++++++-------- src/code/z_room.c | 12 +- src/code/z_sub_s.c | 2 +- src/code/z_vr_box_draw.c | 2 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 2 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 4 +- .../actors/ovl_Arrow_Ice/z_arrow_ice.c | 4 +- .../actors/ovl_Arrow_Light/z_arrow_light.c | 4 +- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 +- .../ovl_Bg_Botihasira/z_bg_botihasira.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 6 +- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 4 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 4 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 8 +- .../z_bg_dblue_waterfall.c | 4 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 2 +- .../actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c | 2 +- .../actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c | 2 +- .../actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c | 2 +- .../actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c | 4 +- .../z_bg_hakugin_elvpole.c | 2 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 2 +- .../ovl_Bg_Ikana_Block/z_bg_ikana_block.c | 2 +- .../ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c | 5 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.c | 2 +- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c | 14 +- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c | 4 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 2 +- .../ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 2 +- .../actors/ovl_Bg_Open_Spot/z_bg_open_spot.c | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 2 +- .../ovl_Bg_Spout_Fire/z_bg_spout_fire.c | 2 +- .../actors/ovl_Bg_Tobira01/z_bg_tobira01.c | 2 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 6 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 12 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 4 +- src/overlays/actors/ovl_Boss_06/z_boss_06.c | 4 +- .../actors/ovl_Demo_Effect/z_demo_effect.c | 6 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 5 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.c | 6 +- .../actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 4 +- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 2 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 4 +- .../actors/ovl_Dm_Char00/z_dm_char00.c | 2 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 6 +- .../actors/ovl_Dm_Char02/z_dm_char02.c | 2 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 2 +- .../actors/ovl_Dm_Char04/z_dm_char04.c | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.c | 8 +- .../actors/ovl_Dm_Char06/z_dm_char06.c | 2 +- .../actors/ovl_Dm_Char07/z_dm_char07.c | 4 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 6 +- .../actors/ovl_Dm_Char09/z_dm_char09.c | 4 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 2 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 2 +- src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 4 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 2 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 8 +- .../actors/ovl_Eff_Change/z_eff_change.c | 2 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 5 +- .../z_eff_kamejima_wave.c | 2 +- .../actors/ovl_Eff_Zoraband/z_eff_zoraband.c | 2 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 2 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 4 +- src/overlays/actors/ovl_En_And/z_en_and.c | 2 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 2 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 4 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 6 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 6 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 4 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 4 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 2 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 2 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 4 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 2 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 4 +- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 2 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 4 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 6 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 12 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 16 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 4 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../actors/ovl_En_Bombal/z_en_bombal.c | 6 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 6 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 2 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 4 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 4 +- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 6 +- .../actors/ovl_En_Bubble/z_en_bubble.c | 2 +- src/overlays/actors/ovl_En_Butte/z_en_butte.c | 4 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 7 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 27 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 4 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Dai/z_en_dai.c | 8 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 2 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 6 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 4 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 2 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 4 +- src/overlays/actors/ovl_En_Dnb/z_en_dnb.c | 8 +- src/overlays/actors/ovl_En_Dnk/z_en_dnk.c | 4 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 4 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 2 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 4 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 2 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 2 +- .../actors/ovl_En_Door_Etc/z_en_door_etc.c | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 4 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 2 +- src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c | 2 +- .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 2 +- .../actors/ovl_En_Egblock/z_en_egblock.c | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 6 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 2 +- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 2 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 2 +- .../actors/ovl_En_Encount2/z_en_encount2.c | 8 +- .../ovl_En_Ending_Hero/z_en_ending_hero.c | 5 +- .../ovl_En_Ending_Hero2/z_en_ending_hero2.c | 4 +- .../ovl_En_Ending_Hero3/z_en_ending_hero3.c | 4 +- .../ovl_En_Ending_Hero4/z_en_ending_hero4.c | 4 +- .../ovl_En_Ending_Hero5/z_en_ending_hero5.c | 5 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 4 +- .../actors/ovl_En_Estone/z_en_estone.c | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 16 +- src/overlays/actors/ovl_En_Fall2/z_en_fall2.c | 4 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 5 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 8 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 2 +- src/overlays/actors/ovl_En_Fish/z_en_fish.c | 2 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 6 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 24 +- .../actors/ovl_En_Floormas/z_en_floormas.c | 4 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 6 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 4 +- .../actors/ovl_En_Fu_Kago/z_en_fu_kago.c | 4 +- .../actors/ovl_En_Fu_Mato/z_en_fu_mato.c | 6 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 4 +- .../actors/ovl_En_Gamelupy/z_en_gamelupy.c | 2 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 4 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 2 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 2 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 6 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 12 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 6 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 6 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 14 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 2 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 4 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 4 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 6 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 8 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 4 +- src/overlays/actors/ovl_En_Hata/z_en_hata.c | 2 +- .../actors/ovl_En_Heishi/z_en_heishi.c | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 4 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 4 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 2 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 26 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 2 +- .../z_en_horse_link_child.c | 2 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 2 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 4 +- src/overlays/actors/ovl_En_In/z_en_in.c | 4 +- .../actors/ovl_En_Insect/z_en_insect.c | 2 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 6 +- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 2 +- .../actors/ovl_En_Jc_Mato/z_en_jc_mato.c | 4 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 2 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 4 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 2 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 4 +- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 4 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 4 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 2 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 4 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 2 +- src/overlays/actors/ovl_En_Light/z_en_light.c | 2 +- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 2 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 2 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 2 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 6 +- src/overlays/actors/ovl_En_Mag/z_en_mag.c | 14 +- .../actors/ovl_En_Maruta/z_en_maruta.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 4 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 6 +- src/overlays/actors/ovl_En_Mm/z_en_mm.c | 4 +- src/overlays/actors/ovl_En_Mm2/z_en_mm2.c | 2 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 2 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 2 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 2 +- src/overlays/actors/ovl_En_Muto/z_en_muto.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 5 +- .../actors/ovl_En_Nimotsu/z_en_nimotsu.c | 6 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 5 +- src/overlays/actors/ovl_En_Nnh/z_en_nnh.c | 2 +- .../actors/ovl_En_Nutsball/z_en_nutsball.c | 4 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 4 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 4 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 4 +- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 8 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 8 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 6 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 4 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 2 +- src/overlays/actors/ovl_En_Paper/z_en_paper.c | 2 +- src/overlays/actors/ovl_En_Part/z_en_part.c | 2 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 2 +- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 4 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 10 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 6 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 4 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 2 +- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 2 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 4 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 6 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 4 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 4 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 4 +- .../actors/ovl_En_Recepgirl/z_en_recepgirl.c | 2 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 8 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 2 +- src/overlays/actors/ovl_En_Rsn/z_en_rsn.c | 4 +- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 8 +- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c | 2 +- .../actors/ovl_En_Scopecoin/z_en_scopecoin.c | 2 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- src/overlays/actors/ovl_En_Sda/z_en_sda.c | 2 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 4 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Shn/z_en_shn.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 6 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 4 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 12 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_St/z_en_st.c | 6 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 2 +- src/overlays/actors/ovl_En_Sth2/z_en_sth2.c | 2 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 6 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../actors/ovl_En_Stream/z_en_stream.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 9 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 2 +- .../z_en_syateki_dekunuts.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 +- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 4 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 2 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 4 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 2 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 6 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 2 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 6 +- src/overlays/actors/ovl_En_Test/z_en_test.c | 4 +- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 2 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 10 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 2 +- src/overlays/actors/ovl_En_Tg/z_en_tg.c | 5 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 4 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 3 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 2 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 2 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 6 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 2 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 14 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 4 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 2 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 4 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 4 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 2 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 24 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 12 +- .../actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c | 4 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 16 +- .../actors/ovl_En_Wood02/z_en_wood02.c | 6 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 6 +- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 4 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 2 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 2 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 6 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 9 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 2 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 8 +- src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c | 2 +- src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c | 2 +- src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c | 3 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 4 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 2 +- src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c | 15 +- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 10 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 11 +- .../actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 2 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 2 +- .../actors/ovl_Obj_Dinner/z_obj_dinner.c | 3 +- src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c | 3 +- .../actors/ovl_Obj_Entotu/z_obj_entotu.c | 4 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 4 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 2 +- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 2 +- .../actors/ovl_Obj_Funen/z_obj_funen.c | 2 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 6 +- .../actors/ovl_Obj_Grass/z_obj_grass.c | 4 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 4 +- .../actors/ovl_Obj_Hamishi/z_obj_hamishi.c | 4 +- .../actors/ovl_Obj_Hariko/z_obj_hariko.c | 4 +- .../actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c | 3 +- .../actors/ovl_Obj_Hsblock/z_obj_hsblock.c | 2 +- .../ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c | 11 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 2 +- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 2 +- .../ovl_Obj_Jgame_Light/z_obj_jgame_light.c | 6 +- .../ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c | 2 +- .../actors/ovl_Obj_Kinoko/z_obj_kinoko.c | 2 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 2 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 6 +- .../ovl_Obj_Lightswitch/z_obj_lightswitch.c | 4 +- .../ovl_Obj_Moon_Stone/z_obj_moon_stone.c | 6 +- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c | 2 +- .../actors/ovl_Obj_Purify/z_obj_purify.c | 8 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 4 +- .../actors/ovl_Obj_Shutter/z_obj_shutter.c | 2 +- .../ovl_Obj_Skateblock/z_obj_skateblock.c | 2 +- .../actors/ovl_Obj_Smork/z_obj_smork.c | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 2 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 2 +- .../ovl_Obj_Spinyroll/z_obj_spinyroll.c | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 12 +- .../actors/ovl_Obj_Syokudai/z_obj_syokudai.c | 6 +- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 4 +- .../ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 12 +- .../actors/ovl_Obj_Toudai/z_obj_toudai.c | 4 +- src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 2 +- .../ovl_Obj_Vspinyroll/z_obj_vspinyroll.c | 2 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 4 +- .../ovl_Object_Kankyo/z_object_kankyo.c | 8 +- .../actors/ovl_Oceff_Spot/z_oceff_spot.c | 2 +- .../actors/ovl_Oceff_Storm/z_oceff_storm.c | 4 +- .../actors/ovl_Oceff_Wipe/z_oceff_wipe.c | 2 +- .../actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c | 2 +- .../actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c | 2 +- .../actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c | 2 +- .../actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c | 2 +- .../actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c | 2 +- .../actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c | 2 +- .../actors/ovl_player_actor/z_player.c | 2 +- .../z_eff_en_ice_block.c | 2 +- .../ovl_Effect_Ss_Blast/z_eff_ss_blast.c | 2 +- .../ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c | 4 +- .../ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c | 2 +- .../ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c | 2 +- .../ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c | 2 +- .../ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c | 2 +- .../ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c | 2 +- .../z_eff_ss_dt_bubble.c | 2 +- .../ovl_Effect_Ss_Dust/z_eff_ss_dust.c | 2 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c | 2 +- .../ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c | 2 +- .../ovl_Effect_Ss_Extra/z_eff_ss_extra.c | 2 +- .../z_eff_ss_fhg_flash.c | 4 +- .../z_eff_ss_fire_tail.c | 2 +- .../z_eff_ss_g_ripple.c | 2 +- .../ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c | 2 +- .../ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c | 4 +- .../ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c | 2 +- .../z_eff_ss_ice_piece.c | 2 +- .../z_eff_ss_ice_smoke.c | 2 +- .../ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c | 2 +- .../ovl_Effect_Ss_Kakera/z_eff_ss_kakera.c | 4 +- .../z_eff_ss_kirakira.c | 2 +- .../z_eff_ss_lightning.c | 2 +- .../effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c | 4 +- .../ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c | 2 +- .../z_eff_ss_solder_srch_ball.c | 6 +- .../ovl_Effect_Ss_Stick/z_eff_ss_stick.c | 2 +- .../ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c | 2 +- .../gamestates/ovl_daytelop/z_daytelop.c | 5 +- src/overlays/gamestates/ovl_select/z_select.c | 4 +- src/overlays/gamestates/ovl_title/z_title.c | 4 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 2 +- .../ovl_kaleido_scope/z_kaleido_item.c | 6 +- .../ovl_kaleido_scope/z_kaleido_map.c | 20 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 2 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 4 +- tools/disasm/functions.txt | 130 +- tools/disasm/variables.txt | 2 +- tools/namefixer.py | 65 + tools/sizes/code_functions.csv | 130 +- 459 files changed, 2502 insertions(+), 1979 deletions(-) diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md index 43e9e6d46..aa4ba3621 100644 --- a/docs/tutorial/advanced_control_flow.md +++ b/docs/tutorial/advanced_control_flow.md @@ -136,7 +136,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) { void EnMs_Draw(Actor* thisx, PlayState* play) { EnMs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md index 71f3347e3..11d8b3546 100644 --- a/docs/tutorial/documenting.md +++ b/docs/tutorial/documenting.md @@ -244,7 +244,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80C106B0[this->unk_2AC]); diff --git a/docs/tutorial/draw_functions.md b/docs/tutorial/draw_functions.md index ccc738219..43fe8579c 100644 --- a/docs/tutorial/draw_functions.md +++ b/docs/tutorial/draw_functions.md @@ -29,7 +29,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { temp_a0 = play->state.gfxCtx; sp30 = temp_a0; - func_8012C28C(temp_a0); + Gfx_SetupDL25_Opa(temp_a0); temp_v1 = sp30->polyOpa.p; sp30->polyOpa.p = temp_v1 + 8; temp_v1->words.w0 = 0xDB060020; @@ -105,7 +105,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80C106B0[this->unk_2AC]); @@ -217,7 +217,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { sp34 = (s16) (s32) (f32) thisx->shape.rot.z; temp_a0 = play->state.gfxCtx; temp_s0 = temp_a0; - func_8012C28C(temp_a0); + Gfx_SetupDL25_Opa(temp_a0); temp_v0 = temp_s0->polyOpa.p; temp_s0->polyOpa.p = temp_v0 + 8; temp_v0->words.w0 = 0xDA380003; @@ -309,7 +309,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, D_06000680); diff --git a/include/gfx.h b/include/gfx.h index e08df2013..dfbd78d74 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -8,6 +8,83 @@ struct GameState; +typedef enum SetupDL { + /* 0x00 */ SETUPDL_0, + /* 0x01 */ SETUPDL_1, + /* 0x02 */ SETUPDL_2, + /* 0x03 */ SETUPDL_3, + /* 0x04 */ SETUPDL_4, + /* 0x05 */ SETUPDL_5, + /* 0x06 */ SETUPDL_6, + /* 0x07 */ SETUPDL_7, + /* 0x08 */ SETUPDL_8, + /* 0x09 */ SETUPDL_9, + /* 0x0A */ SETUPDL_10, + /* 0x0B */ SETUPDL_11, + /* 0x0C */ SETUPDL_12, + /* 0x0D */ SETUPDL_13, + /* 0x0E */ SETUPDL_14, + /* 0x0F */ SETUPDL_15, + /* 0x10 */ SETUPDL_16, + /* 0x11 */ SETUPDL_17, + /* 0x12 */ SETUPDL_18, + /* 0x13 */ SETUPDL_19, + /* 0x14 */ SETUPDL_20, + /* 0x15 */ SETUPDL_21, + /* 0x16 */ SETUPDL_22, + /* 0x17 */ SETUPDL_23, + /* 0x18 */ SETUPDL_24, + /* 0x19 */ SETUPDL_25, + /* 0x1A */ SETUPDL_26, + /* 0x1B */ SETUPDL_27, + /* 0x1C */ SETUPDL_28, + /* 0x1D */ SETUPDL_29, + /* 0x1E */ SETUPDL_30, + /* 0x1F */ SETUPDL_31, + /* 0x20 */ SETUPDL_32, + /* 0x21 */ SETUPDL_33, + /* 0x22 */ SETUPDL_34, + /* 0x23 */ SETUPDL_35, + /* 0x24 */ SETUPDL_36, + /* 0x25 */ SETUPDL_37, + /* 0x26 */ SETUPDL_38, + /* 0x27 */ SETUPDL_39, + /* 0x28 */ SETUPDL_40, + /* 0x29 */ SETUPDL_41, + /* 0x2A */ SETUPDL_42, + /* 0x2B */ SETUPDL_43, + /* 0x2C */ SETUPDL_44, + /* 0x2D */ SETUPDL_45, + /* 0x2E */ SETUPDL_46, + /* 0x2F */ SETUPDL_47, + /* 0x30 */ SETUPDL_48, + /* 0x31 */ SETUPDL_49, + /* 0x32 */ SETUPDL_50, + /* 0x33 */ SETUPDL_51, + /* 0x34 */ SETUPDL_52, + /* 0x35 */ SETUPDL_53, + /* 0x36 */ SETUPDL_54, + /* 0x37 */ SETUPDL_55, + /* 0x38 */ SETUPDL_56, + /* 0x39 */ SETUPDL_57, + /* 0x3A */ SETUPDL_58, + /* 0x3B */ SETUPDL_59, + /* 0x3C */ SETUPDL_60, + /* 0x3D */ SETUPDL_61, + /* 0x3E */ SETUPDL_62, + /* 0x3F */ SETUPDL_63, + /* 0x40 */ SETUPDL_64, + /* 0x41 */ SETUPDL_65, + /* 0x42 */ SETUPDL_66, + /* 0x43 */ SETUPDL_67, + /* 0x44 */ SETUPDL_68, + /* 0x45 */ SETUPDL_69, + /* 0x46 */ SETUPDL_70, + /* 0x47 */ SETUPDL_71, + /* 0x48 */ SETUPDL_72, + /* 0x49 */ SETUPDL_MAX +} SetupDL; + typedef struct { /* 0x000 */ Gfx taskStart[9]; /* 0x048 */ Gfx clearZBuffer[8]; // original name: clear_zb_dl @@ -78,72 +155,72 @@ typedef struct GraphicsContext { Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); -Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i); -Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i); -void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i); -Gfx* func_8012BFC4(Gfx* gfx); -Gfx* func_8012BFEC(Gfx* gfx); -Gfx* func_8012C014(Gfx* gfx); -void func_8012C058(GraphicsContext* gfxCtx); -void func_8012C080(GraphicsContext* gfxCtx); -void func_8012C0A8(GraphicsContext* gfxCtx); -void func_8012C0D0(GraphicsContext* gfxCtx); -void func_8012C0F8(GraphicsContext* gfxCtx); -void func_8012C120(GraphicsContext* gfxCtx); -void func_8012C148(GraphicsContext* gfxCtx); -void func_8012C170(GraphicsContext* gfxCtx); -Gfx* func_8012C198(Gfx* gfx); -void func_8012C1C0(GraphicsContext* gfxCtx); -Gfx* func_8012C1EC(Gfx* gfx); -void func_8012C214(GraphicsContext* gfxCtx); -void func_8012C240(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDLImpl(Gfx* gfx, u32 i); +Gfx* Gfx_SetupDL(Gfx* gfx, u32 i); +void Gfx_SetupDLAtPtr(Gfx** gfxp, u32 i); +Gfx* Gfx_SetupDL57(Gfx* gfx); +Gfx* Gfx_SetupDL57_b(Gfx* gfx); +Gfx* Gfx_SetupDL52_NoCD(Gfx* gfx); +void Gfx_SetupDL58_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL57_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL50_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL51_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL52_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL53_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL54_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL55_Xlu(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL26(Gfx* gfx); +void Gfx_SetupDL26_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL23(Gfx* gfx); +void Gfx_SetupDL23_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL25_Xlu2(GraphicsContext* gfxCtx); void func_8012C268(struct GameState* gameState); -void func_8012C28C(GraphicsContext* gfxCtx); -Gfx* func_8012C2B4(Gfx* gfx); -void func_8012C2DC(GraphicsContext* gfxCtx); -Gfx* func_8012C304(Gfx* gfx); -void func_8012C32C(GraphicsContext* gfxCtx); -void func_8012C354(GraphicsContext* gfxCtx); -void func_8012C37C(GraphicsContext* gfxCtx); -Gfx* func_8012C3A4(Gfx* gfx); -Gfx* func_8012C3CC(Gfx* gfx); -void func_8012C3F4(GraphicsContext* gfxCtx); -void func_8012C420(GraphicsContext* gfxCtx); -void func_8012C448(GraphicsContext* gfxCtx); -void func_8012C470(GraphicsContext* gfxCtx); -Gfx* func_8012C498(Gfx* gfx); -void func_8012C4C0(GraphicsContext* gfxCtx); -void func_8012C4E8(GraphicsContext* gfxCtx); -void func_8012C510(GraphicsContext* gfxCtx); -void func_8012C538(GraphicsContext* gfxCtx); -void func_8012C560(GraphicsContext* gfxCtx); -void func_8012C588(GraphicsContext* gfxCtx); -void func_8012C5B0(GraphicsContext* gfxCtx); -void func_8012C5D8(GraphicsContext* gfxCtx); -Gfx* func_8012C600(Gfx* gfx); -void func_8012C628(GraphicsContext* gfxCtx); -void func_8012C654(GraphicsContext* gfxCtx); -void func_8012C680(Gfx** gfxp); -void func_8012C6AC(GraphicsContext* gfxCtx); -void func_8012C6D4(GraphicsContext* gfxCtx); -void func_8012C6FC(GraphicsContext* gfxCtx); -Gfx* func_8012C724(Gfx* gfx); -Gfx* func_8012C74C(Gfx* gfx); -Gfx* func_8012C774(Gfx* gfx); -Gfx* func_8012C7B8(Gfx* gfx); -Gfx* func_8012C7FC(Gfx* gfx); -Gfx* func_8012C840(Gfx* gfx); -Gfx* func_8012C868(Gfx* gfx); -void func_8012C8AC(GraphicsContext* gfxCtx); -void func_8012C8D4(GraphicsContext* gfxCtx); -void func_8012C8FC(GraphicsContext* gfxCtx); -void func_8012C924(GraphicsContext* gfxCtx); -void func_8012C94C(GraphicsContext* gfxCtx); -void func_8012C974(GraphicsContext* gfxCtx); -void func_8012C9BC(GraphicsContext* gfxCtx); -void func_8012C9E4(GraphicsContext* gfxCtx); -void func_8012CA0C(Gfx** gfxp); -void func_8012CA38(GraphicsContext* gfxCtx); +void Gfx_SetupDL25_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL71(Gfx* gfx); +void Gfx_SetupDL25_Xlu(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL72(Gfx* gfx); +void Gfx_SetupDL31_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL32_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL33_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL64(Gfx* gfx); +Gfx* Gfx_SetupDL34(Gfx* gfx); +void Gfx_SetupDL34_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL35_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL44_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL36_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL28(Gfx* gfx); +void Gfx_SetupDL28_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL43_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL45_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL46_Overlay(GraphicsContext* gfxCtx); +void Gfx_SetupDL38_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL4_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL37_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL2_Opa(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL39(Gfx* gfx); +void Gfx_SetupDL39_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL39_Overlay(GraphicsContext* gfxCtx); +void Gfx_SetupDL39_Ptr(Gfx** gfxp); +void Gfx_SetupDL40_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL41_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL47_Xlu(GraphicsContext* gfxCtx); +Gfx* Gfx_SetupDL66(Gfx* gfx); +Gfx* Gfx_SetupDL67(Gfx* gfx); +Gfx* Gfx_SetupDL68_NoCD(Gfx* gfx); +Gfx* Gfx_SetupDL69_NoCD(Gfx* gfx); +Gfx* Gfx_SetupDL65_NoCD(Gfx* gfx); +Gfx* Gfx_SetupDL70(Gfx* gfx); +Gfx* Gfx_SetupDL20_NoCD(Gfx* gfx); +void Gfx_SetupDL42_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL42_Overlay(GraphicsContext* gfxCtx); +void Gfx_SetupDL48_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL49_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL27_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL60_XluNoCD(GraphicsContext* gfxCtx); +void Gfx_SetupDL61_Xlu(GraphicsContext* gfxCtx); +void Gfx_SetupDL56_Opa(GraphicsContext* gfxCtx); +void Gfx_SetupDL56_Ptr(Gfx** gfxp); +void Gfx_SetupDL59_Opa(GraphicsContext* gfxCtx); Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); void func_8012CB04(Gfx** gfxp, u32 x, u32 y); Gfx* func_8012CB28(GraphicsContext* gfxCtx, u32 x, u32 y); @@ -156,7 +233,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g void func_8012D374(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); void func_8012D40C(f32* param_1, f32* param_2, s16* param_3); -extern Gfx sSetupDL[73 * 6]; +extern Gfx gSetupDLs[SETUPDL_MAX][6]; extern Gfx gEmptyDL[]; #define WORK_DISP __gfxCtx->work.p diff --git a/src/code/z_actor.c b/src/code/z_actor.c index ffa77e9bf..e86a341fd 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -76,7 +76,7 @@ void ActorShadow_Draw(Actor* actor, Lights* lights, PlayState* play, Gfx* dlist, OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); @@ -218,7 +218,7 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); actor->shape.feetFloorFlags = 0; spB8 = 2; @@ -360,7 +360,7 @@ void func_800B4B50(Actor* actor, Lights* mapper, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); func_800C0094(actor->floorPoly, actor->world.pos.x, actor->floorHeight, actor->world.pos.z, &sp94); temp_f22 = (f32)actor->shape.shadowAlpha * (1.0f - (spEC * (1.0f / 30.0f))); @@ -522,7 +522,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { Target_SetPos(targetCtx, targetCtx->unk4C, projectedPos.x, projectedPos.y, projectedPos.z); if ((!(player->stateFlags1 & PLAYER_STATE1_40)) || (actor != player->targetedActor)) { - OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x39); + OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_57); for (spB0 = 0, spAC = targetCtx->unk4C; spB0 < spB8; spB0++, spAC = (spAC + 1) % 3) { entry = &targetCtx->unk50[spAC]; @@ -564,7 +564,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_CANT_LOCK_ON)) { TatlColor* color = &sTatlColorList[actor->category]; - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x07); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7); Matrix_Translate(actor->focus.pos.x, actor->focus.pos.y + (actor->targetArrowOffset * actor->scale.y) + 17.0f, @@ -869,7 +869,7 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) { spB4 = spB8 + (height * 4); - OVERLAY_DISP = func_8012C014(OVERLAY_DISP); + OVERLAY_DISP = Gfx_SetupDL52_NoCD(OVERLAY_DISP); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->alpha); @@ -3769,7 +3769,7 @@ void func_800BC620(Vec3f* pos, Vec3f* scale, u8 alpha, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha); adjustedPos.x = pos->x; @@ -4373,26 +4373,30 @@ Gfx* func_800BD9A0(GraphicsContext* gfxCtx) { void func_800BD9E0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, alpha); gSPSegment(POLY_OPA_DISP++, 0x0C, gEmptyDL); POLY_OPA_DISP = SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, overrideLimbDraw, postLimbDraw, actor, POLY_OPA_DISP); + CLOSE_DISPS(play->state.gfxCtx); } void func_800BDAA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, s16 alpha) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, alpha); gSPSegment(POLY_XLU_DISP++, 0x0C, func_800BD9A0(play->state.gfxCtx)); POLY_XLU_DISP = SkelAnime_DrawFlex(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, overrideLimbDraw, postLimbDraw, actor, POLY_XLU_DISP); + CLOSE_DISPS(play->state.gfxCtx); } @@ -4654,7 +4658,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); switch (type) { case ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX: diff --git a/src/code/z_cheap_proc.c b/src/code/z_cheap_proc.c index 2b4f67cae..82303a172 100644 --- a/src/code/z_cheap_proc.c +++ b/src/code/z_cheap_proc.c @@ -10,7 +10,7 @@ void Gfx_DrawDListOpa(PlayState* play, Gfx* dlist) { dl = POLY_OPA_DISP; - gSPDisplayList(&dl[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dl[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&dl[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&dl[2], dlist); @@ -29,7 +29,7 @@ void Gfx_DrawDListXlu(PlayState* play, Gfx* dlist) { dl = POLY_XLU_DISP; - gSPDisplayList(&dl[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dl[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&dl[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&dl[2], dlist); diff --git a/src/code/z_debug_display.c b/src/code/z_debug_display.c index d9f20d72b..9dd4d86b2 100644 --- a/src/code/z_debug_display.c +++ b/src/code/z_debug_display.c @@ -67,7 +67,7 @@ void DebugDisplay_DrawObjects(PlayState* play) { void DebugDisplay_DrawSpriteI8(DebugDispObject* dispObj, void* texture, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C6FC(play->state.gfxCtx); + Gfx_SetupDL47_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, dispObj->color.r, dispObj->color.g, dispObj->color.b, dispObj->color.a); Matrix_Translate(dispObj->pos.x, dispObj->pos.y, dispObj->pos.z, MTXMODE_NEW); @@ -90,7 +90,7 @@ Lights1 sDebugDisplayLight1 = gdSPDefLights1(128, 128, 128, 255, 255, 255, 73, 7 void DebugDisplay_DrawPolygon(DebugDispObject* dispObj, void* dList, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C588(play->state.gfxCtx); + Gfx_SetupDL4_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, dispObj->color.r, dispObj->color.g, dispObj->color.b, dispObj->color.a); @@ -113,7 +113,7 @@ void DebugDisplay_DrawPath(PlayState* play, Path* path) { OPEN_DISPS(play->state.gfxCtx); - func_8012C560(play->state.gfxCtx); + Gfx_SetupDL38_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, DebugDisplay_PathDisplayList(play->state.gfxCtx, path)); diff --git a/src/code/z_draw.c b/src/code/z_draw.c index a2686be8e..ace56a965 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -386,7 +386,7 @@ void GetItem_DrawBombchu(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C214(play->state.gfxCtx); + Gfx_SetupDL23_Opa(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++, sDrawItemTable[drawId].drawResources[0]); @@ -399,12 +399,12 @@ void GetItem_DrawPoes(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -430,12 +430,12 @@ void GetItem_DrawFairyBottle(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -459,12 +459,12 @@ void GetItem_DrawSkullToken(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 5), @@ -480,12 +480,12 @@ void GetItem_DrawCompass(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 5); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_5); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -498,7 +498,7 @@ void GetItem_DrawPotion(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, -play->state.frames, play->state.frames, 32, 32, 1, @@ -509,7 +509,7 @@ void GetItem_DrawPotion(PlayState* play, s16 drawId) { gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[2]); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[3]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[4]); @@ -523,7 +523,7 @@ void GetItem_DrawGoronSword(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 1, play->state.frames * 0, 32, @@ -539,7 +539,7 @@ void GetItem_DrawDekuNuts(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 6, play->state.frames * 6, 32, @@ -555,7 +555,7 @@ void GetItem_DrawRecoveryHeart(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 3), @@ -571,7 +571,7 @@ void GetItem_DrawFish(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, play->state.frames * 1, 32, @@ -590,7 +590,7 @@ void GetItem_DrawOpa0(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); @@ -606,12 +606,12 @@ void GetItem_DrawOpa0Xlu1(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -627,7 +627,7 @@ void GetItem_DrawOpa01(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); @@ -644,7 +644,7 @@ void GetItem_DrawXlu01(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[0]); @@ -659,12 +659,12 @@ void GetItem_DrawSeahorse(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -685,8 +685,8 @@ void GetItem_DrawFairyContainer(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiFairyBottleTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -710,8 +710,8 @@ void GetItem_DrawMoonsTear(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -730,12 +730,12 @@ void GetItem_DrawMagicArrow(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]); @@ -749,7 +749,7 @@ void GetItem_DrawUpgrades(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[1]); @@ -765,13 +765,13 @@ void GetItem_DrawRupee(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[1]); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]); @@ -786,13 +786,13 @@ void GetItem_DrawSmallRupee(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); Matrix_Scale(0.7f, 0.7f, 0.7f, MTXMODE_APPLY); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[1]); gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]); @@ -806,7 +806,7 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sDrawItemTable[drawId].drawResources[1]); @@ -831,7 +831,7 @@ void GetItem_DrawRemains(PlayState* play, s16 drawId) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 520431401..f25273279 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -374,7 +374,7 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3 void EffectBlure_SetupSmooth(EffectBlure* this, GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); CLOSE_DISPS(gfxCtx); } @@ -693,7 +693,7 @@ void EffectBlure_DrawSmooth(EffectBlure* this2, GraphicsContext* gfxCtx) { void EffectBlure_SetupSimple(GraphicsContext* gfxCtx, EffectBlure* this, Vtx* vtx) { OPEN_DISPS(gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); CLOSE_DISPS(gfxCtx); } @@ -702,7 +702,7 @@ void EffectBlure_SetupSimpleAlt(GraphicsContext* gfxCtx, EffectBlure* this, Vtx* OPEN_DISPS(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE); gDPSetTextureLUT(POLY_XLU_DISP++, G_TT_NONE); @@ -926,7 +926,7 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) { if (this->numElements != 0) { if (this->flags == 0) { - func_8012C560(gfxCtx); + Gfx_SetupDL38_Xlu(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); vtx = GRAPH_ALLOC(gfxCtx, 32 * sizeof(Vtx)); diff --git a/src/code/z_eff_footmark.c b/src/code/z_eff_footmark.c index bcf6ff824..806cc45e0 100644 --- a/src/code/z_eff_footmark.c +++ b/src/code/z_eff_footmark.c @@ -105,7 +105,7 @@ void EffFootmark_Draw(PlayState* play) { s32 i; GraphicsContext* gfxCtx = play->state.gfxCtx; - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gSPDisplayList(gfxCtx->polyXlu.p++, gEffFootprintMaterialDL); diff --git a/src/code/z_eff_shield_particle.c b/src/code/z_eff_shield_particle.c index 90833947b..e15874a78 100644 --- a/src/code/z_eff_shield_particle.c +++ b/src/code/z_eff_shield_particle.c @@ -149,7 +149,7 @@ void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); if (this != NULL) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/code/z_eff_spark.c b/src/code/z_eff_spark.c index fdd25a6b4..77b40e3ed 100644 --- a/src/code/z_eff_spark.c +++ b/src/code/z_eff_spark.c @@ -148,7 +148,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) { if (this != NULL) { gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_38); gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c index d7754c5a7..d14d6926c 100644 --- a/src/code/z_eff_tire_mark.c +++ b/src/code/z_eff_tire_mark.c @@ -231,7 +231,7 @@ void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx) { if (vtx != NULL) { gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP++, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP++, SETUPDL_44); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_ZB_CLD_SURF2); gDPLoadTextureBlock(POLY_OPA_DISP++, gameplay_keep_Tex_014570, G_IM_FMT_I, G_IM_SIZ_8b, 64, 32, 0, diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c index 0b08f4dd0..17852c4c1 100644 --- a/src/code/z_effect_soft_sprite_old_init.c +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -58,7 +58,7 @@ void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, TexturePtr texture) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(texture)); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rgPrimColorR, this->rgPrimColorG, this->rgPrimColorB, this->rgPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rgEnvColorR, this->rgEnvColorG, this->rgEnvColorB, this->rgEnvColorA); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 44e8703a2..7b9e2ca34 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -783,7 +783,7 @@ void EnItem00_DrawRupee(EnItem00* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); if (this->actor.params <= ITEM00_RUPEE_RED) { @@ -834,7 +834,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) { } } - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sItemDropTextures[texIndex])); @@ -851,7 +851,7 @@ void EnItem00_DrawHeartContainer(EnItem00* this, PlayState* play) { if (Object_GetIndex(&play->objectCtx, OBJECT_GI_HEARTS) == this->actor.objBankIndex) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(20.0f, 20.0f, 20.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); @@ -868,7 +868,7 @@ void EnItem00_DrawHeartPiece(EnItem00* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index 114e62cc7..5e93e1187 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -142,7 +142,7 @@ void FireObj_Draw(PlayState* play, FireObj* fire) { Vec3s vec; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->timer * -20) % 512U, 32, 128)); diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index d6f2edf2a..c6c1501ba 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -340,13 +340,13 @@ void LifeMeter_Draw(PlayState* play) { if ((ddCount < 0) || (i > ddCount)) { if (curCombineModeSet != 1) { curCombineModeSet = 1; - func_8012C654(gfxCtx); + Gfx_SetupDL39_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); } } else if (curCombineModeSet != 3) { curCombineModeSet = 3; - func_8012C654(gfxCtx); + Gfx_SetupDL39_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); } @@ -366,7 +366,7 @@ void LifeMeter_Draw(PlayState* play) { if ((ddCount < 0) || (ddCount < i)) { if (curCombineModeSet != 2) { curCombineModeSet = 2; - func_8012C8D4(gfxCtx); + Gfx_SetupDL42_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); @@ -374,7 +374,7 @@ void LifeMeter_Draw(PlayState* play) { } else { if (curCombineModeSet != 4) { curCombineModeSet = 4; - func_8012C8D4(gfxCtx); + Gfx_SetupDL42_Overlay(gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 6a31c7e94..860d04ae9 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -414,7 +414,7 @@ void Lights_DrawGlow(PlayState* play) { if (light != NULL) { OPEN_DISPS(play->state.gfxCtx); - dl = func_8012C7FC(POLY_XLU_DISP); + dl = Gfx_SetupDL65_NoCD(POLY_XLU_DISP); gDPSetDither(dl++, G_CD_NOISE); diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index fe4ca5ef8..1c03f5cb1 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -3850,7 +3850,7 @@ void Magic_DrawMeter(PlayState* play) { magicBarY = 34; // one row of hearts } - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255); @@ -4287,7 +4287,7 @@ void Interface_DrawAButton(PlayState* play) { aAlpha = 100; } - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); Interface_SetPerspectiveView(play, 25 + R_A_BTN_Y_OFFSET, 70 + R_A_BTN_Y_OFFSET, 192, 237); @@ -4362,7 +4362,7 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) { (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_MASK))) { // Inventory Equip Effects gSPSegment(OVERLAY_DISP++, 0x08, pauseCtx->iconItemSegment); - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4525,7 +4525,7 @@ void Interface_DrawClock(PlayState* play) { if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); /** * Draw Clock's Hour Lines @@ -4556,7 +4556,7 @@ void Interface_DrawClock(PlayState* play) { if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); } else { /** @@ -4667,7 +4667,7 @@ void Interface_DrawClock(PlayState* play) { timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4864,7 +4864,7 @@ void Interface_DrawClock(PlayState* play) { sp1E6 = 255; } - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); /** * Draws Final-Hours Clock's Frame @@ -5499,7 +5499,7 @@ void Interface_DrawPerfectLetters(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, @@ -6136,7 +6136,7 @@ void Interface_DrawMinigameIcons(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { // Carrots rendering if the action corresponds to riding a horse @@ -6311,7 +6311,7 @@ void Interface_Draw(PlayState* play) { // Draw Grandma's Story if (interfaceCtx->storyDmaStatus == STORY_DMA_DONE) { gSPSegment(OVERLAY_DISP++, 0x07, interfaceCtx->storySegment); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -6336,7 +6336,7 @@ void Interface_Draw(PlayState* play) { LifeMeter_Draw(play); - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); // Draw Rupee Icon gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sRupeeCounterIconPrimColors[CUR_UPG_VALUE(UPG_WALLET)].r, @@ -6521,7 +6521,7 @@ void Interface_Draw(PlayState* play) { Actor_DrawZTarget(&play->actorCtx.targetContext, play); } - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); Interface_DrawItemButtons(play); @@ -6553,7 +6553,7 @@ void Interface_Draw(PlayState* play) { interfaceCtx->actionVtx[40 + 2].v.tc[1] = interfaceCtx->actionVtx[40 + 3].v.tc[1] = 32 << 5; - func_8012C8D4(play->state.gfxCtx); + Gfx_SetupDL42_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); @@ -6588,7 +6588,7 @@ void Interface_Draw(PlayState* play) { // Draw pictograph focus icons if (sPictoState == PICTO_BOX_STATE_LENS) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); @@ -6656,7 +6656,7 @@ void Interface_Draw(PlayState* play) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 200, 200, 250); gDPFillRectangle(OVERLAY_DISP++, 70, 22, 251, 151); - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetRenderMode(OVERLAY_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM); diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 5509fd4a1..f7ccd5230 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1855,7 +1855,7 @@ void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDis OPEN_DISPS(play->state.gfxCtx); - OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 7); + OVERLAY_DISP = Gfx_SetupDL(OVERLAY_DISP, SETUPDL_7); SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &sp58, &sp54); diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c index e0381153a..94d235a37 100644 --- a/src/code/z_prenmi.c +++ b/src/code/z_prenmi.c @@ -22,7 +22,7 @@ void PreNMI_Draw(PreNMIState* this) { OPEN_DISPS(gfxCtx); - func_8012C470(gfxCtx); + Gfx_SetupDL36_Opa(gfxCtx); gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 255, 1) << 16) | GPACK_RGBA5551(255, 255, 255, 1)); gDPFillRectangle(POLY_OPA_DISP++, 0, this->timer + 100, SCREEN_WIDTH - 1, this->timer + 100); diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index ab972159c..299639e98 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1,758 +1,834 @@ #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" -Gfx sSetupDL[438] = { - /* 0x00 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0, 0, 0, - COMBINED), - gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x01 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x02 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x03 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x04 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x05 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x06 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_TEX_EDGE2), - gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x07 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x08 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x09 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x0F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x10 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x11 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x12 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x13 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x14 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x15 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x16 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x17 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x18 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x19 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_LINE | G_RM_AA_ZB_XLU_LINE2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x1F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x20 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | - G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x21 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, - ENVIRONMENT, COMBINED, TEXEL0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | - G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x22 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x23 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_DECAL | G_RM_AA_ZB_XLU_DECAL2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x24 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x25 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x26 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x27 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x28 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0, COMBINED, 0, - 0, 0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_FRONT | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x29 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x2F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x30 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x31 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x32 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x33 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x34 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x35 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x36 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x37 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_CULL_BACK), - gsSPEndDisplayList(), - - /* 0x38 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x39 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), - gsSPLoadGeometryMode(G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3A */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3B */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, - ENVIRONMENT, COMBINED, TEXEL0, COMBINED), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_OPA_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3C */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, - TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3D */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, - TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), - gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3E */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x3F */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL | - GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x40 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), - gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x41 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), - gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x42 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x43 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x44 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x45 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | - GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x46 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, - G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | - ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x47 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), - - /* 0x48 */ - gsDPPipeSync(), - gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), - gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), - gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | - G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), - gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), - gsSPEndDisplayList(), +Gfx gSetupDLs[SETUPDL_MAX][6] = { + { + /* SETUPDL_0 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, COMBINED, 0, + 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_1 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_2 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_3 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_4 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_5 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_6 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_TEX_EDGE2), + gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_7 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_8 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_9 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_10 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_11 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_12 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_OPA_SURF | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_13 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_14 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_15 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_16 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_17 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_TEX_EDGE | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_18 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_TEX_EDGE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_19 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | AA_EN | Z_CMP | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_20 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_21 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_22 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_23 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_24 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_25 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_26 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_27 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_28 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_AA_TEX_EDGE | G_RM_AA_TEX_EDGE2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_29 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_30 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_LINE | G_RM_AA_ZB_XLU_LINE2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_31 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_32 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_HILITERGBA, G_CC_HILITERGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | + G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_33 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, + ENVIRONMENT, COMBINED, TEXEL0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | + G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_34 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_35 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_DECAL | G_RM_AA_ZB_XLU_DECAL2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_36 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_37 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_38 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_XLU_SURF | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_39 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_40 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, PRIMITIVE_ALPHA, TEXEL0, TEXEL1, TEXEL0, PRIMITIVE, TEXEL0, 0, 0, 0, + COMBINED, 0, 0, 0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_FRONT | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_41 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_42 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_43 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_44 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_OVL_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_45 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_46 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_47 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_XLU_SURF | G_RM_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_48 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_49 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, SHADE, 0, 0, 0, 0, PRIMITIVE), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_XLU_SURF | G_RM_AA_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_50 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_51 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_52 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_53 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, + ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_OPA_SURF | G_RM_OPA_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_54 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, + ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_55 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, PRIMITIVE, + ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_CULL_BACK), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_56 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_XLU_SURF | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_57 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPLoadGeometryMode(G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_58 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, 0, PRIMITIVE, 0, SHADE, + 0), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_59 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE, SHADE, 1, 0, TEXEL0, SHADE, ENVIRONMENT, COMBINED, TEXEL0, COMBINED, + ENVIRONMENT, COMBINED, TEXEL0, COMBINED), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_PASS | G_RM_AA_OPA_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | + G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_60 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_61 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0), + gsDPSetOtherMode(G_AD_NOISE | G_CD_NOISE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_ZB_CLD_SURF | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_62 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_OPA_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_63 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_64 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_PASS | G_RM_XLU_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_65 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPLoadGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_66 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_67 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_68 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_69 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_70 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_THRESHOLD | G_ZS_PIXEL | Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | + ALPHA_CVG_SEL | G_RM_PASS | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_71 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_AA_ZB_XLU_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, + { + /* SETUPDL_72 */ + gsDPPipeSync(), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_BAYER | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_FOG_SHADE_A | G_RM_ZB_CLD_SURF2), + gsSPLoadGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPEndDisplayList(), + }, }; Gfx sFillSetupDL[] = { @@ -814,297 +890,470 @@ Gfx* Gfx_SetFog2(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f) { return Gfx_SetFog(gfx, r, g, b, a, n, f); } -Gfx* Gfx_CallSetupDLImpl(Gfx* gfx, u32 i) { - gSPDisplayList(gfx++, &sSetupDL[6 * i]); +Gfx* Gfx_SetupDLImpl(Gfx* gfx, u32 i) { + s32 dListIndex = i * ARRAY_COUNT(gSetupDLs[i]); + + // Equivalent to gSPDisplayList(gfx++, gSetupDLs[i]) + gSPDisplayList(gfx++, &((Gfx*)gSetupDLs)[dListIndex]); return gfx; } -Gfx* Gfx_CallSetupDL(Gfx* gfx, u32 i) { - return Gfx_CallSetupDLImpl(gfx, i); +Gfx* Gfx_SetupDL(Gfx* gfx, u32 i) { + return Gfx_SetupDLImpl(gfx, i); } -void Gfx_CallSetupDLAtPtr(Gfx** gfxp, u32 i) { - *gfxp = Gfx_CallSetupDL(*gfxp, i); +void Gfx_SetupDLAtPtr(Gfx** gfxp, u32 i) { + *gfxp = Gfx_SetupDL(*gfxp, i); } -Gfx* func_8012BFC4(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x39]); +Gfx* Gfx_SetupDL57(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_57]); return gfx; } -Gfx* func_8012BFEC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x39]); +Gfx* Gfx_SetupDL57_b(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_57]); return gfx; } -Gfx* func_8012C014(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x34]); +Gfx* Gfx_SetupDL52_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_52]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -void func_8012C058(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x3A]); +void Gfx_SetupDL58_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_58]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C080(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x39]); +void Gfx_SetupDL57_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_57]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C0A8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x32]); +void Gfx_SetupDL50_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_50]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C0D0(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x33]); +void Gfx_SetupDL51_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_51]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C0F8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x34]); +void Gfx_SetupDL52_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_52]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C120(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x35]); +void Gfx_SetupDL53_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_53]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C148(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x36]); +void Gfx_SetupDL54_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_54]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C170(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x37]); +void Gfx_SetupDL55_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_55]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C198(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x1A]); +Gfx* Gfx_SetupDL26(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_26]); return gfx; } -void func_8012C1C0(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C198(gfxCtx->polyOpa.p); +void Gfx_SetupDL26_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL26(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C1EC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x17]); +Gfx* Gfx_SetupDL23(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_23]); return gfx; } -void func_8012C214(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C1EC(gfxCtx->polyOpa.p); +void Gfx_SetupDL23_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL23(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C240(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]); +void Gfx_SetupDL25_Xlu2(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_25]); + + CLOSE_DISPS(gfxCtx); } void func_8012C268(GameState* gameState) { - func_8012C28C(gameState->gfxCtx); + Gfx_SetupDL25_Opa(gameState->gfxCtx); } -void func_8012C28C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x19]); +void Gfx_SetupDL25_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_25]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C2B4(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x47]); +Gfx* Gfx_SetupDL71(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_71]); return gfx; } -void func_8012C2DC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x19]); +void Gfx_SetupDL25_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_25]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C304(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x48]); +Gfx* Gfx_SetupDL72(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_72]); return gfx; } -void func_8012C32C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x1F]); +void Gfx_SetupDL31_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_31]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C354(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x20]); +void Gfx_SetupDL32_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_32]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C37C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x21]); +void Gfx_SetupDL33_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_33]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C3A4(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x40]); +Gfx* Gfx_SetupDL64(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_64]); return gfx; } -Gfx* func_8012C3CC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x22]); +Gfx* Gfx_SetupDL34(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_34]); return gfx; } -void func_8012C3F4(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C3CC(gfxCtx->polyOpa.p); +void Gfx_SetupDL34_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL34(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C420(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x23]); +void Gfx_SetupDL35_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_35]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C448(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x2C]); +void Gfx_SetupDL44_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_44]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C470(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x24]); +void Gfx_SetupDL36_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_36]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C498(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x1C]); +Gfx* Gfx_SetupDL28(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_28]); return gfx; } -void func_8012C4C0(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x1C]); +void Gfx_SetupDL28_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_28]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C4E8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2B]); +void Gfx_SetupDL43_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_43]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C510(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2D]); +void Gfx_SetupDL45_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_45]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C538(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->overlay.p++, &sSetupDL[6 * 0x2E]); +void Gfx_SetupDL46_Overlay(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(OVERLAY_DISP++, gSetupDLs[SETUPDL_46]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C560(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x26]); +void Gfx_SetupDL38_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_38]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C588(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x4]); +void Gfx_SetupDL4_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_4]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C5B0(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x25]); +void Gfx_SetupDL37_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_37]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C5D8(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2]); +void Gfx_SetupDL2_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_2]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C600(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x27]); +Gfx* Gfx_SetupDL39(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_39]); return gfx; } -void func_8012C628(GraphicsContext* gfxCtx) { - gfxCtx->polyOpa.p = func_8012C600(gfxCtx->polyOpa.p); +void Gfx_SetupDL39_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + POLY_OPA_DISP = Gfx_SetupDL39(POLY_OPA_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C654(GraphicsContext* gfxCtx) { - gfxCtx->overlay.p = func_8012C600(gfxCtx->overlay.p); +void Gfx_SetupDL39_Overlay(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + OVERLAY_DISP = Gfx_SetupDL39(OVERLAY_DISP); + + CLOSE_DISPS(gfxCtx); } -void func_8012C680(Gfx** gfxp) { +void Gfx_SetupDL39_Ptr(Gfx** gfxp) { Gfx* gfx = *gfxp; - gSPDisplayList(gfx++, &sSetupDL[6 * 0x27]); + + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_39]); *gfxp = gfx; } -void func_8012C6AC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x28]); +void Gfx_SetupDL40_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_40]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C6D4(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x29]); +void Gfx_SetupDL41_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_41]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C6FC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x2F]); +void Gfx_SetupDL47_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_47]); + + CLOSE_DISPS(gfxCtx); } -Gfx* func_8012C724(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x42]); +Gfx* Gfx_SetupDL66(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_66]); return gfx; } -Gfx* func_8012C74C(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x43]); +Gfx* Gfx_SetupDL67(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_67]); return gfx; } -Gfx* func_8012C774(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x44]); +Gfx* Gfx_SetupDL68_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_68]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -Gfx* func_8012C7B8(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x45]); +Gfx* Gfx_SetupDL69_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_69]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -Gfx* func_8012C7FC(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x41]); +Gfx* Gfx_SetupDL65_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_65]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -Gfx* func_8012C840(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x46]); +Gfx* Gfx_SetupDL70(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_70]); return gfx; } -Gfx* func_8012C868(Gfx* gfx) { - gSPDisplayList(gfx++, &sSetupDL[6 * 0x14]); +Gfx* Gfx_SetupDL20_NoCD(Gfx* gfx) { + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_20]); gDPSetColorDither(gfx++, G_CD_DISABLE); return gfx; } -void func_8012C8AC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x2A]); +void Gfx_SetupDL42_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_42]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C8D4(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->overlay.p++, &sSetupDL[6 * 0x2A]); +void Gfx_SetupDL42_Overlay(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(OVERLAY_DISP++, gSetupDLs[SETUPDL_42]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C8FC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x30]); +void Gfx_SetupDL48_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_48]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C924(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x31]); +void Gfx_SetupDL49_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_49]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C94C(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x1B]); +void Gfx_SetupDL27_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_27]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C974(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x3C]); - gDPSetColorDither(gfxCtx->polyXlu.p++, G_CD_DISABLE); +void Gfx_SetupDL60_XluNoCD(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_60]); + gDPSetColorDither(POLY_XLU_DISP++, G_CD_DISABLE); + + CLOSE_DISPS(gfxCtx); } -void func_8012C9BC(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyXlu.p++, &sSetupDL[6 * 0x3D]); +void Gfx_SetupDL61_Xlu(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_XLU_DISP++, gSetupDLs[SETUPDL_61]); + + CLOSE_DISPS(gfxCtx); } -void func_8012C9E4(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x38]); +void Gfx_SetupDL56_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_56]); + + CLOSE_DISPS(gfxCtx); } -void func_8012CA0C(Gfx** gfxp) { +void Gfx_SetupDL56_Ptr(Gfx** gfxp) { Gfx* gfx = *gfxp; - gSPDisplayList(gfx++, &sSetupDL[6 * 0x38]); + + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_56]); *gfxp = gfx; } -void func_8012CA38(GraphicsContext* gfxCtx) { - gSPDisplayList(gfxCtx->polyOpa.p++, &sSetupDL[6 * 0x3B]); +void Gfx_SetupDL59_Opa(GraphicsContext* gfxCtx) { + OPEN_DISPS(gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gSetupDLs[SETUPDL_59]); + + CLOSE_DISPS(gfxCtx); } Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height) { diff --git a/src/code/z_room.c b/src/code/z_room.c index 9fb21dfa2..89cf47935 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -25,7 +25,7 @@ void Room_DrawNormal(PlayState* play, Room* room, u32 flags) { if (flags & ROOM_DRAW_XLU) { func_800BCC68(&sZeroVec, play); gSPSegment(POLY_XLU_DISP++, 0x03, room->segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } @@ -95,7 +95,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { if (play->roomCtx.unk74 != NULL) { gSPSegment(POLY_XLU_DISP++, 0x06, play->roomCtx.unk74); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } @@ -317,7 +317,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) { gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); if (drawOpa) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, entry->opa); } @@ -347,7 +347,7 @@ void Room_DrawImageSingle(PlayState* play, Room* room, u32 flags) { if (drawXlu) { gSPSegment(POLY_XLU_DISP++, 0x03, room->segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, entry->xlu); } @@ -416,7 +416,7 @@ void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) { gSPSegment(POLY_OPA_DISP++, 0x03, room->segment); if (drawOpa) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, dListsEntry->opa); } @@ -445,7 +445,7 @@ void Room_DrawImageMulti(PlayState* play, Room* room, u32 flags) { if (drawXlu) { gSPSegment(POLY_XLU_DISP++, 0x03, room->segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, dListsEntry->xlu); } diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index d19253df5..09897fbb9 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -994,7 +994,7 @@ void SubS_DrawShadowTex(Actor* actor, GameState* gameState, u8* tex) { OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 100); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); Matrix_Translate(actor->world.pos.x, 0.0f, actor->world.pos.z, MTXMODE_NEW); diff --git a/src/code/z_vr_box_draw.c b/src/code/z_vr_box_draw.c index 489f596e5..656f6cad3 100644 --- a/src/code/z_vr_box_draw.c +++ b/src/code/z_vr_box_draw.c @@ -23,7 +23,7 @@ void Skybox_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 void Skybox_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z) { OPEN_DISPS(gfxCtx); - func_8012C6AC(gfxCtx); + Gfx_SetupDL40_Opa(gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x0B, skyboxCtx->paletteStaticSegment); gSPTexture(POLY_OPA_DISP++, 0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON); diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index 49525c864..e06d51313 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -315,7 +315,7 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) { Matrix_MultVec3f(&D_808C1C4C, &sp50); } func_80126440(play, &this->collider, &this->weaponInfo, &sp5C, &sp50); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_80122868(play, player); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index c356a5f17..7af684201 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -256,7 +256,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) { Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); if (this->screenFillIntensity > 0.0f) { - POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (s32)(this->screenFillIntensity * 40.0f) & 0xFF, 0, 0, (s32)(150.0f * this->screenFillIntensity) & 0xFF); @@ -266,7 +266,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, D_0E000000.fillRect); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 200, 0, this->alpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128); diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c index 62c97ccde..83c37fa6c 100644 --- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c +++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c @@ -204,7 +204,7 @@ void ArrowIce_Draw(Actor* thisx, PlayState* play) { // Draw blue effect over the screen when arrow hits if (this->blueingEffectMagnitude > 0.0f) { - POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(this->blueingEffectMagnitude * 10.0f) & 0xFF, (s32)(50.0f * this->blueingEffectMagnitude) & 0xFF, (s32)(150.0f * this->blueingEffectMagnitude) & 0xFF); @@ -214,7 +214,7 @@ void ArrowIce_Draw(Actor* thisx, PlayState* play) { } // Draw ice on the arrow - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 170, 255, 255, (s32)(this->alpha * 0.5f) & 0xFF); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 128); Matrix_RotateZYX(0x4000, 0, 0, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c index 360afa4ac..b650533da 100644 --- a/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c +++ b/src/overlays/actors/ovl_Arrow_Light/z_arrow_light.c @@ -196,7 +196,7 @@ void ArrowLight_Draw(Actor* thisx, PlayState* play) { Matrix_RotateZS(transform->shape.rot.z, MTXMODE_APPLY); Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); if (this->screenFillIntensity > 0.0f) { - POLY_XLU_DISP = func_8012BFC4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL57(POLY_XLU_DISP); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (s32)(this->screenFillIntensity * 30.0f) & 0xFF, (s32)(40.0f * this->screenFillIntensity) & 0xFF, 0, (s32)(150.0f * this->screenFillIntensity) & 0xFF); @@ -205,7 +205,7 @@ void ArrowLight_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, D_0E000000.fillRect); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 170, this->alpha); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 128); diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c index 59348962a..18e2eb5d0 100644 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c @@ -203,7 +203,7 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); opa = POLY_OPA_DISP; - gSPDisplayList(&opa[0], &sSetupDL[25 * 6]); + gSPDisplayList(&opa[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&opa[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&opa[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&opa[3], object_astr_obj_DL_002380); @@ -215,7 +215,7 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); xlu = POLY_XLU_DISP; - gSPDisplayList(&xlu[0], &sSetupDL[25 * 6]); + gSPDisplayList(&xlu[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&xlu[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&xlu[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&xlu[3], object_astr_obj_DL_0022E0); diff --git a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c index a5168eb24..f1394a32e 100644 --- a/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c +++ b/src/overlays/actors/ovl_Bg_Botihasira/z_bg_botihasira.c @@ -95,7 +95,7 @@ void BgBotihasira_Update(Actor* thisx, PlayState* play2) { void BgBotihasira_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_botihasira_DL_000638); diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index be9413567..ef35a34ed 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -354,7 +354,7 @@ void func_808B7B54(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -422,14 +422,14 @@ void BgBreakwall_Draw(Actor* thisx, PlayState* play) { } if (temp_s2->unk_04 != NULL) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, temp_s2->unk_04); } if (temp_s2->unk_08 != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, temp_s2->unk_08); diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c index adf9b3c96..22998a34e 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c @@ -191,10 +191,10 @@ void BgCtowerGear_Draw(Actor* thisx, PlayState* play) { void BgCtowerGear_DrawOrgan(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gClockTowerOrganDL); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gClockTowerOrganPipesDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c index 2a59a9b8f..79ed63188 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c @@ -663,7 +663,7 @@ void BgDblueBalance_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetEnvColor(gfx++, 0, 0, 0, this->unk_183); gSPDisplayList(gfx++, gGreatBayTempleObjectSeesawSplashDL); @@ -705,7 +705,7 @@ void func_80B83758(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0, ptr = &this->unk_188[0]; i < ARRAY_COUNT(this->unk_188); i++, ptr++) { if (ptr->unk_0E != 0) { diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c index 570369f07..de7e7eb32 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c @@ -752,7 +752,7 @@ void func_80A2B308(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, this->opaDList); @@ -778,7 +778,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { } if ((this->opaDList != NULL) || (this->unk_160 == 6)) { - gfx2 = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + gfx2 = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&gfx2[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -797,7 +797,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { } if (this->xluDList != NULL) { - gfx = func_8012C2B4(POLY_XLU_DISP); + gfx = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&gfx[1], this->xluDList); @@ -820,7 +820,7 @@ void BgDblueMovebg_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_APPLY); Matrix_RotateXS(this->dyna.actor.shape.rot.x, MTXMODE_APPLY); Matrix_RotateZS(this->dyna.actor.shape.rot.z, MTXMODE_APPLY); - gfx = func_8012C2B4(POLY_XLU_DISP); + gfx = Gfx_SetupDL71(POLY_XLU_DISP); for (i = 0; i < ARRAY_COUNT(this->unk_1D8[0]); i++) { for (j = 0; j < ARRAY_COUNT(this->unk_1D8); j++) { diff --git a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c index db2c79e39..d0d0f0c3c 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Waterfall/z_bg_dblue_waterfall.c @@ -590,7 +590,7 @@ void BgDblueWaterfall_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -609,7 +609,7 @@ void BgDblueWaterfall_Draw(Actor* thisx, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x9B, 255, 255, 255, this->unk_19F); gSPDisplayList(POLY_XLU_DISP++, gGreatBayTempleObjectIceStalactiteDL); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x9B, 255, 255, 255, 255); diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c index e9f8916d0..70bc5931f 100644 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c +++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c @@ -200,7 +200,7 @@ void BgDkjailIvy_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0xFF, 255, 255, 255, this->alpha); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c index 40b8c78a7..e15c87f42 100644 --- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c +++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.c @@ -205,7 +205,7 @@ void BgFireWall_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sFlameTextures[this->texIndex])); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x01, 255, 255, 0, 150); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 255); diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c index bec649b57..7b63081c0 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c +++ b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c @@ -77,7 +77,7 @@ void BgFuKaiten_Update(Actor* thisx, PlayState* play) { void BgFuKaiten_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_fu_kaiten_DL_0005D0); diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c index 7f485be1d..9da3cc5f6 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c +++ b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c @@ -87,7 +87,7 @@ void BgFuMizu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_fu_kaiten_DL_002FC0); diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c index 7d0ed6a1a..fd46e16e5 100644 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c +++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c @@ -183,10 +183,12 @@ void BgGoronOyu_Update(Actor* thisx, PlayState* play) { void BgGoronOyu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_oyu_Matanimheader_000968)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000158); gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000080); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c index 7cd94bd86..10f045617 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Elvpole/z_bg_hakugin_elvpole.c @@ -126,7 +126,7 @@ void BgHakuginElvpole_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, object_hakugin_obj_DL_00ACB8); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c index c784c1318..7bddd548f 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c @@ -1012,7 +1012,7 @@ void func_80A9D61C(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c index 401d3543e..93d605320 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c @@ -375,7 +375,7 @@ void func_80B7F564(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_DrawStep(play, this->unk_15C, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c index 5fc28c5a5..02ba3b1f4 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Mirror/z_bg_ikana_mirror.c @@ -380,8 +380,9 @@ void BgIkanaMirror_Draw(Actor* thisx, PlayState* play) { BgIkanaMirror* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(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++, gStoneTowerTempleMirrorDL); diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c index 36f8e94fc..07968e801 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c @@ -150,7 +150,7 @@ void BgIkninside_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, object_ikninside_obj_DL_00CC78); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c index 2c24a5580..84bdc4169 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.c @@ -172,8 +172,8 @@ void BgIknvDoukutu_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_00DDD8); @@ -205,9 +205,9 @@ void func_80BD7538(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 1, 2); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (s32)(255.0f * sp54)); gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_00DDD8); @@ -226,7 +226,7 @@ void func_80BD7768(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPDisplayList(POLY_OPA_DISP++, object_iknv_obj_DL_010D98); @@ -243,7 +243,7 @@ void func_80BD7820(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, object_iknv_obj_DL_012700); @@ -261,7 +261,7 @@ void func_80BD78C4(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, (s32)(140.0f * sp30)); diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c index cca6b17ee..de6be9266 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.c @@ -211,8 +211,10 @@ void BgIknvObj_Draw(Actor* thisx, PlayState* play) { BgIknvObj* this = THIS; OPEN_DISPS(play->state.gfxCtx); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->displayListPtr); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index 502b29086..3129d9411 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -384,7 +384,7 @@ void BgIngate_Update(Actor* thisx, PlayState* play) { void BgIngate_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gSichitaiBoat); diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c index 282a43925..ff0227f70 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c +++ b/src/overlays/actors/ovl_Bg_Keikoku_Saku/z_bg_keikoku_saku.c @@ -94,7 +94,7 @@ void BgKeikokuSaku_Update(Actor* thisx, PlayState* play) { void BgKeikokuSaku_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_001640); diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c index 208babf77..63e7b5974 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -143,7 +143,7 @@ void BgLadder_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; } - gSPDisplayList(&gfx[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha); gSPMatrix(&gfx[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&gfx[3], sLadderDLists[this->dyna.actor.params]); diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c index 3a11a2fdf..2e924efd3 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c @@ -383,7 +383,7 @@ void BgNumaHana_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gWoodenFlowerStalkDL); diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c index 275b1b565..ffb260bf3 100644 --- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c +++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c @@ -66,7 +66,7 @@ void BgOpenSpot_Draw(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, this->texScrolls); OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER); gSPDisplayList(POLY_XLU_DISP++, gSpotlightLeftDL); diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c index 0ebae5c1e..fa80cbf90 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -496,7 +496,7 @@ void BgSpdweb_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); if (thisx->params == BGSPDWEB_FF_1) { gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c index fdf56d87c..9349b8188 100644 --- a/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c +++ b/src/overlays/actors/ovl_Bg_Spout_Fire/z_bg_spout_fire.c @@ -189,7 +189,7 @@ void BgSpoutFire_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - gfx = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + gfx = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); POLY_XLU_DISP = gfx; gSPSegment(&gfx[0], 0x08, sFlameTextures[this->flameTexIndex]); gDPSetPrimColor(&gfx[1], 0, 1, 255, 255, 0, 150); diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index 2eb95f6bb..920842b0b 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -98,7 +98,7 @@ void BgTobira01_Update(Actor* thisx, PlayState* play) { void BgTobira01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gGoronDoorDL); diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index eae9fe0b3..76889e41e 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -1349,7 +1349,7 @@ void Boss02_Twinmold_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actor.params == 0) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gTwinmoldRedSkinTex)); @@ -1521,8 +1521,8 @@ void Boss02_DrawEffects(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(sEffects); i++, effect++) { if (effect->type == TWINMOLD_EFFECT_SAND) { diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index c8ceed19b..a9096048a 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2263,7 +2263,7 @@ void Boss03_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (!this->unk_2D5) { if ((this->unk_25E % 2) != 0) { @@ -2394,8 +2394,8 @@ void Boss03_DrawEffects(PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); for (i = 0; i < GYORG_EFFECT_COUNT; i++, eff++) { if (eff->type == GYORG_EFFECT_BUBBLE) { @@ -2426,7 +2426,7 @@ void Boss03_DrawEffects(PlayState* play) { if ((eff->type == GYORG_EFFECT_DROPLET) || (eff->type == GYORG_EFFECT_SPLASH)) { if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gSPDisplayList(POLY_XLU_DISP++, object_water_effect_DL_004260); @@ -2460,7 +2460,7 @@ void Boss03_DrawEffects(PlayState* play) { for (i = 0; i < GYORG_EFFECT_COUNT; i++, eff++) { if (eff->type == GYORG_EFFECT_WET_SPOT) { if (!flag) { - func_8012C448(gfxCtx); + Gfx_SetupDL44_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0); @@ -2597,7 +2597,7 @@ void Boss03_SeaweedDraw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x0D, mtx); diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c index 80fc52a22..bf250ca18 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -818,7 +818,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_200 & 1) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099); @@ -832,7 +832,7 @@ void Boss04_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); if (this->actionFunc != func_809EC568) { - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150); gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL); diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index 3d8beb79d..aa6291aae 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -516,8 +516,8 @@ void Boss06_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); temp_v0 = gSaveContext.save.time; if (temp_v0 > CLOCK_TIME(12, 0)) { diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index cb34f8ff8..cba240947 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -258,7 +258,7 @@ s32 func_808CDE78(PlayState* play, SkelCurve* skelCurve, s32 limbIndex, Actor* t OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255); @@ -284,7 +284,7 @@ void func_808CDFF8(Actor* thisx, PlayState* play) { OPEN_DISPS(gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 25); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25); Matrix_Scale(2.0f, 2.0f, 2.0f, MTXMODE_APPLY); SkelCurve_Draw(&this->actor, play, &this->skelCurve, func_808CDE78, NULL, 1, &this->actor); @@ -299,7 +299,7 @@ void func_808CE078(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255); diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index 629f49398..1ee2b1c9d 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -506,7 +506,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) { if (!(play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER)) { OPEN_DISPS(play->state.gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); @@ -598,7 +598,8 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(gfxCtx); - func_8012C2DC(gfxCtx); + + Gfx_SetupDL25_Xlu(gfxCtx); for (i = 0; i < play->envCtx.unk_F2[3]; i++) { worldPos.x = this->effects[i].posBase.x + this->effects[i].posOffset.x; diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c index 111ce284f..2d0aa27cd 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.c @@ -487,7 +487,7 @@ void func_80C173B4(Actor* thisx, PlayState* play) { mtx = GRAPH_ALLOC(play->state.gfxCtx, this->unk_144.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); func_8018450C(play, &this->unk_144, mtx, (void*)func_80C170F8, 0, &this->actor); } @@ -514,7 +514,7 @@ void DemoSyoten_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->unk_3E4 & 4) { Matrix_RotateZS(-this->actor.shape.rot.z, MTXMODE_APPLY); @@ -553,7 +553,7 @@ void func_80C17690(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY); if (this->unk_3E4 & 8) { diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index b2b8e0077..56bc60a4d 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -168,10 +168,12 @@ void DemoTreLgt_Draw(Actor* thisx, PlayState* play) { DemoTreLgt* this = THIS; OPEN_DISPS(gfxCtx); + if (this->action == DEMO_TRE_LGT_ACTION_ANIMATE) { - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 200, 255, 0, 0); SkelCurve_Draw(&this->actor, play, &this->skelCurve, DemoTreLgt_OverrideLimbDraw, NULL, 1, &this->actor); } + CLOSE_DISPS(gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c index 12815a044..721d1de60 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -245,7 +245,7 @@ void DmAh_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1DE28[this->unk_284])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1DE20[0])); diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c index 43ca006f2..a7e3e4993 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -152,7 +152,7 @@ void DmAl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmAl_OverrideLimbDraw, DmAl_PostLimbDraw, DmAl_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index 2d474d111..2d8175bda 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -356,7 +356,7 @@ void func_80C1D0B0(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1D2F4[this->unk_2B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1D2E8[0])); diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c index 9e5ffed89..c6d93945b 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -195,9 +195,11 @@ void DmBal_Draw(Actor* thisx, PlayState* play) { DmBal* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmBal_OverrideLimbDraw, DmBal_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c index 8657a9dc9..fe4a83a91 100644 --- a/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c +++ b/src/overlays/actors/ovl_Dm_Char00/z_dm_char00.c @@ -922,7 +922,7 @@ void DmChar00_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C94C(play->state.gfxCtx); + Gfx_SetupDL27_Xlu(play->state.gfxCtx); do { phi_a0 = (this->unk_262 * 50) & 511; diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c index 7b700f4eb..767d4c827 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -423,7 +423,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if ((u8)this->unk_348 == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gDPPipeSync(POLY_OPA_DISP++); @@ -435,7 +435,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gWoodfallSceneryDynamicPoisonWaterDL); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); gDPPipeSync(POLY_XLU_DISP++); @@ -482,7 +482,7 @@ void DmChar01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPPipeSync(POLY_XLU_DISP++); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)this->unk_348); diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index ec1e12a8f..f49820f03 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -185,7 +185,7 @@ void DmChar02_Draw(Actor* thisx, PlayState* play) { } if (shouldDraw) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmChar02_OverrideLimbDraw, DmChar02_PostLimbDraw, DmChar02_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index 21b9f94df..aa3a8b0e6 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -165,7 +165,7 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) { if (!this->unk_18E) { if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id != 1)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmChar03_OverrideLimbDraw, DmChar03_PostLimbDraw, DmChar03_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c index ac479344d..3375b522d 100644 --- a/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c +++ b/src/overlays/actors/ovl_Dm_Char04/z_dm_char04.c @@ -136,7 +136,7 @@ void DmChar04_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C94C(play->state.gfxCtx); + Gfx_SetupDL27_Xlu(play->state.gfxCtx); alpha = (this->timer * 50) & 0x1FF; if (alpha > 255) { alpha = 511 - alpha; diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c index 6b85df5d3..e3dcec911 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.c @@ -611,7 +611,7 @@ void func_80AAD998(Actor* thisx, PlayState* play) { (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_109)]->id != 1)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, this->unk_19C, this->unk_1A0, this->unk_1A4, this->unk_1A8, this->unk_1AC, this->unk_1B0); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, @@ -630,7 +630,7 @@ void func_80AADA90(Actor* thisx, PlayState* play) { if (this->unk_18E == 0) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_473) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_473)]->id != 1)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, DmChar05_PostLimbDraw, &this->actor); } @@ -645,7 +645,7 @@ void func_80AADB4C(Actor* thisx, PlayState* play) { if (this->unk_18E == 0) { if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_518) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_518)]->id != 1)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } @@ -663,7 +663,7 @@ void func_80AADC00(Actor* thisx, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_559); if ((play->csCtx.actorCues[cueChannel]->id != 1) && (play->csCtx.actorCues[cueChannel]->id != 4)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar05_OverrideLimbDraw, DmChar05_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c index 747b2e0c9..591249c77 100644 --- a/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c +++ b/src/overlays/actors/ovl_Dm_Char06/z_dm_char06.c @@ -78,7 +78,7 @@ void DmChar06_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 1, 2); gDPPipeSync(POLY_XLU_DISP++); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); diff --git a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c index 844be223e..c5c06958e 100644 --- a/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c +++ b/src/overlays/actors/ovl_Dm_Char07/z_dm_char07.c @@ -75,7 +75,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); switch (this->dyna.actor.params) { case DMCHAR07_STAGE: @@ -112,7 +112,7 @@ void DmChar07_Draw(Actor* thisx, PlayState* play) { break; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); switch (this->dyna.actor.params) { case DMCHAR07_STAGE: diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index 35611375b..9bd85db3a 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -1093,7 +1093,8 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) { DmChar08* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sBigTurtleEyeTextures[this->eyeIndex])); @@ -1113,11 +1114,12 @@ void DmChar08_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gTurtleAsleepDL); } else if (this->unk_1FF == 1) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 2, 2); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gTurtleAsleepDL); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 93fa0e94c..0f53193d1 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -218,8 +218,8 @@ void DmChar09_Draw(Actor* thisx, PlayState* play) { DmChar09* this = THIS; if ((play->csCtx.state != CS_STATE_IDLE) && this->unk_22E) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, DmChar09_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 2cdddbf19..9f8cd237f 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -356,7 +356,7 @@ void func_80C25000(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C25244[this->unk_2B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C25238[0])); diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c index c42ad3c2b..0eb622b49 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -96,7 +96,7 @@ void DmNb_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { void DmNb_Draw(Actor* thisx, PlayState* play) { DmNb* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, DmNb_TransformLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c index dc6d8bcef..83f635777 100644 --- a/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c +++ b/src/overlays/actors/ovl_Dm_Sa/z_dm_sa.c @@ -108,7 +108,7 @@ void DmSa_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->alpha < 0xFF) { gSPSegment(POLY_OPA_DISP++, 0x0C, func_80A2EB58(play->state.gfxCtx, this->alpha)); diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 9a9e14dbc..66f70d9c6 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -2033,10 +2033,10 @@ void DmStk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); this->alpha = this->alpha; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->alpha < 255) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 1, 2); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index 4d2b4a54a..e875d8ab8 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -289,7 +289,7 @@ void DmZl_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTextureIndex])); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, DmZl_OverrideLimbDraw, DmZl_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index eac8b10ab..e7eba8fa2 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -689,7 +689,7 @@ void DoorShutter_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_164 == 7) { Matrix_Translate(0.0f, 64.96f, 0.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 0b4b59f1c..64899a807 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -931,7 +931,7 @@ void func_808BACCC(DoorWarp1* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0xFF, 0xFF, 200, 255, 255, (u8)this->unk_1B8); gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, (u8)this->unk_1B8); @@ -969,7 +969,7 @@ void func_808BAE9C(DoorWarp1* this, PlayState* play) { sp84 = 1.0f - ((2.0f - this->unk_1A4) / 1.7f); this->unk_1AC += sp84 * 15.0f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255.0f * sp84, 255, 255, (u8)this->unk_1B4); gDPSetEnvColor(POLY_XLU_DISP++, 0, 255.0f * sp84, 255, 255); @@ -1059,7 +1059,7 @@ void func_808BB4F4(DoorWarp1* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, sp64[sp60].r, sp64[sp60].g, sp64[sp60].b, 255); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); @@ -1076,7 +1076,7 @@ void func_808BB4F4(DoorWarp1* this, PlayState* play2) { Matrix_RotateYS(this->dyna.actor.world.rot.y, MTXMODE_APPLY); Matrix_Scale(1.0f, 0.0f, 1.0f, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, sp64[sp60].r, sp64[sp60].g, sp64[sp60].b, 255); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->unk_203); diff --git a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c index 65fb8da2f..bc95d4312 100644 --- a/src/overlays/actors/ovl_Eff_Change/z_eff_change.c +++ b/src/overlays/actors/ovl_Eff_Change/z_eff_change.c @@ -133,7 +133,7 @@ void EffChange_Draw(Actor* thisx, PlayState* play) { mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index 02dad6c0c..0cf8d76d1 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -268,7 +268,8 @@ void func_80919768(Actor* thisx, PlayState* play2) { sp92 = Math_Vec3f_Yaw(&activeCamEye, &thisx->world.pos); OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); + + Gfx_SetupDL25_Opa(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); @@ -318,7 +319,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c index 03123fedc..d45d669a7 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c @@ -159,7 +159,7 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(6.0f, 5.0f, 5.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); AnimatedMat_Draw(play, D_80BCF1C4); diff --git a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c index 2b1c01c59..3a57149a7 100644 --- a/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c +++ b/src/overlays/actors/ovl_Eff_Zoraband/z_eff_zoraband.c @@ -79,7 +79,7 @@ void EffZoraband_Draw(Actor* thisx, PlayState* play2) { if (this->alpha != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_zoraband_Matanimheader_000F38)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c index d9fbeb6f0..61f493b83 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -619,7 +619,7 @@ void EnAh_Draw(Actor* thisx, PlayState* play) { if (this->unk_1DC != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BD3F14[this->unk_2FA])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80BD3F0C[this->unk_2FC])); diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 41dba0aab..839022d2c 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -1705,7 +1705,7 @@ void EnAkindonuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx void EnAkindonuts_Draw(Actor* thisx, PlayState* play) { EnAkindonuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnAkindonuts_OverrideLimbDraw, EnAkindonuts_PostLimbDraw, EnAkindonuts_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 87b83e670..0bbb53686 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -907,7 +907,7 @@ void EnAl_Draw(Actor* thisx, PlayState* play) { if (this->unk_35C != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(0.0f, 0.0f, 850.0f, MTXMODE_APPLY); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnAl_OverrideLimbDraw, EnAl_PostLimbDraw, diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c index 261b47bd4..b6d32f6ec 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -564,13 +564,15 @@ void EnAm_Draw(Actor* thisx, PlayState* play) { EnAm* this = THIS; OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 0, 0, 0, this->textureBlend); POLY_OPA_DISP = &gfx[2]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnAm_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_And/z_en_and.c b/src/overlays/actors/ovl_En_And/z_en_and.c index c1f229751..d3c9adcec 100644 --- a/src/overlays/actors/ovl_En_And/z_en_and.c +++ b/src/overlays/actors/ovl_En_And/z_en_and.c @@ -179,7 +179,7 @@ void EnAnd_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[0])); diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index d978d8380..90d31b601 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -345,7 +345,7 @@ void EnAni_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Matrix_Translate(0.0f, 0.0f, -1000.0f, MTXMODE_APPLY); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index 45a413c26..64adaa49b 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -1215,7 +1215,7 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); @@ -1226,7 +1226,7 @@ void EnAob01_Draw(Actor* thisx, PlayState* play) { EnAob01_TransformLimbDraw, &this->actor); if (this->actor.draw != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos = this->actor.world.pos; scale.x = 0.5f; scale.y = 0.5f; diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index aff4a9de6..e4a83a6d0 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -642,7 +642,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { s32 phi_v0; if (ARROW_IS_ARROW(this->actor.params)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawLod(play, this->arrow.skelAnime.skeleton, this->arrow.skelAnime.jointTable, NULL, NULL, &this->actor, this->actor.projectedPos.z < 160.0f ? 0 : 1); } else if (this->actor.params == ARROW_TYPE_DEKU_BUBBLE) { @@ -699,7 +699,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C240(play->state.gfxCtx); + Gfx_SetupDL25_Xlu2(play->state.gfxCtx); gSPClearGeometryMode(POLY_XLU_DISP++, G_FOG | G_LIGHTING); @@ -735,7 +735,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { } else if (this->actor.velocity.y != 0.0f) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c index bb3e2f23a..5eb0d0351 100644 --- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c +++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c @@ -446,7 +446,7 @@ s32 EnAttackNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve void EnAttackNiw_Draw(Actor* thisx, PlayState* play) { EnAttackNiw* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnAttackNiw_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 1c2cdf533..96a4fed1c 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1784,7 +1784,9 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { EnAz* this = THIS; OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); + CLOSE_DISPS(play->state.gfxCtx); if (this->unk_374 & 2) { @@ -1806,7 +1808,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); Matrix_RotateXS(this->unk_39E, MTXMODE_APPLY); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->unk_374 & 2) { s32 i; Vec3f sp98; diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index 5296260f9..e303fe1c5 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -810,7 +810,7 @@ void EnBaba_Draw(Actor* thisx, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_VISIBLE) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBbaEyeTex)); @@ -821,7 +821,7 @@ void EnBaba_Draw(Actor* thisx, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_DRAW_SHADOW) { if ((this->animIndex == BOMB_SHOP_LADY_ANIM_KNOCKED_OVER) || (this->animIndex == BOMB_SHOP_LADY_ANIM_LYING_DOWN)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos.x = this->actor.world.pos.x + 20.0f; pos.y = this->actor.world.pos.y; pos.z = this->actor.world.pos.z + 20.0f; diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c index 14f4112eb..df47a5f67 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -419,7 +419,7 @@ void EnBaguo_DrawBody(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gfx = POLY_OPA_DISP; @@ -496,7 +496,7 @@ void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c index 5479d6c1e..7ff5da288 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -281,7 +281,7 @@ s32 EnBaisen_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f void EnBaisen_Draw(Actor* thisx, PlayState* play) { EnBaisen* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnBaisen_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.c b/src/overlays/actors/ovl_En_Bat/z_en_bat.c index 138b7287b..549a2c4bd 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -530,7 +530,7 @@ void EnBat_Draw(Actor* thisx, PlayState* play) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&gfx[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(&gfx[2], gBadBatSetupDL); gSPDisplayList(&gfx[3], gBadBatBodyDL); diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c index 071515919..048fbfc95 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -682,14 +682,14 @@ void EnBb_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_OPA_DISP = &gfx[1]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnBb_OverrideLimbDraw, EnBb_PostLimbDraw, &this->actor); if (this->flameScaleX > 0.0f) { currentMatrixState = Matrix_GetCurrent(); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000), MTXMODE_APPLY); Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index b751a50d5..2653fb685 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -318,7 +318,7 @@ void EnBba01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 255, 255, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 55, 55, 255, 0)); gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c index a1e2798df..11dace3a5 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -718,13 +718,13 @@ void EnBbfall_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_OPA_DISP = &gfx[1]; SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnBbfall_OverrideLimbDraw, EnBbfall_PostLimbDraw, &this->actor); if (this->flameOpacity > 0) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000), MTXMODE_APPLY); Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.c b/src/overlays/actors/ovl_En_Bee/z_en_bee.c index f93d18bf5..c03cc005d 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -284,7 +284,7 @@ void EnBee_Update(Actor* thisx, PlayState* play) { void EnBee_Draw(Actor* thisx, PlayState* play) { EnBee* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c index da6bc06a3..cdd7abee3 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -114,7 +114,7 @@ void EnBh_Update(Actor* thisx, PlayState* play) { void EnBh_Draw(Actor* thisx, PlayState* play) { EnBh* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateZS(this->unk1E2, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index f331666d3..887fb68d5 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -660,7 +660,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { if ((this->actionFunc != EnBigokuta_PlayDeathEffects) || (this->timer != 0)) { Scene_SetRenderModeXlu(play, 0, 1); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, 255); POLY_OPA_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, @@ -668,7 +668,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { } else { Scene_SetRenderModeXlu(play, 1, 2); gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 0, 0, 0, (this->picto.actor.scale.y * 7727.273f)); POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c index 915bf85ba..a77733d31 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -790,7 +790,7 @@ void func_80A292A8(EnBigpamet* this, PlayState* play) { if (this->unk_2A2 > 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); @@ -834,7 +834,7 @@ void EnBigpamet_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80A29754[this->unk_29C]); @@ -874,7 +874,7 @@ void EnBigpamet_PostLimbDraw1(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s void func_80A2966C(Actor* thisx, PlayState* play) { EnBigpamet* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime1.skeleton, this->skelAnime1.jointTable, this->skelAnime1.dListCount, EnBigpamet_OverrideLimbDraw1, EnBigpamet_PostLimbDraw1, &this->actor); func_80A292A8(this, play); diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index f6061d096..06bcd3b84 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -1291,7 +1291,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) { if ((this->mainColor.a == 255) || (this->mainColor.a == 0)) { // fully visible OR fully transparent dispHead = POLY_OPA_DISP; - gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]); + gSPDisplayList(dispHead, gSetupDLs[SETUPDL_25]); gSPSegment(&dispHead[1], 0x0C, &D_801AEFA0); // empty display list for no transparency gSPSegment(&dispHead[2], 0x08, Gfx_EnvColor(play->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b, @@ -1301,7 +1301,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, PlayState* play) { } else { dispHead = POLY_XLU_DISP; - gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]); + gSPDisplayList(dispHead, gSetupDLs[SETUPDL_25]); gSPSegment(&dispHead[1], 0x0C, &D_801AEF88); // transparency display list gSPSegment(&dispHead[2], 0x08, Gfx_EnvColor(play->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b, @@ -1330,7 +1330,7 @@ void EnBigpo_DrawScoopSoul(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (play->gameplayFrames * -15) % 512, 0x20, @@ -1382,7 +1382,7 @@ void EnBigpo_DrawLantern(Actor* thisx, PlayState* play) { dispHead = POLY_XLU_DISP; } - gSPDisplayList(&dispHead[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dispHead[0], gSetupDLs[SETUPDL_25]); gSPSegment(&dispHead[1], 0x0A, Gfx_EnvColor(play->state.gfxCtx, 160, 0, 255, this->mainColor.a)); @@ -1418,7 +1418,7 @@ void EnBigpo_DrawCircleFlames(Actor* thisx, PlayState* play) { mtfxPtr = Matrix_GetCurrent(); OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_NEW); if (this->actionFunc == EnBigpo_SpawnCutsceneStage6) { Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); @@ -1458,7 +1458,7 @@ void EnBigpo_RevealedFire(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (play->gameplayFrames * -20) % 512, 0x20, diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 3992cd02a..75e6fa38e 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -2884,7 +2884,8 @@ void EnBigslime_SetSysMatrix(Vec3f* pos, PlayState* play, Gfx* shadowDList, f32 zx = 1.0f - (yDistMinY * (1.0f / 1550.0f)); OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); sysMatrix->xx = zx; sysMatrix->yy = 1.0f; sysMatrix->zz = zx; @@ -2907,6 +2908,7 @@ void EnBigslime_SetSysMatrix(Vec3f* pos, PlayState* play, Gfx* shadowDList, f32 gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, (u8)(alpha * zx)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, shadowDList); + CLOSE_DISPS(play->state.gfxCtx); } @@ -2936,12 +2938,13 @@ void EnBigslime_DrawMinislime(EnBigslime* this, PlayState* play2) { } OPEN_DISPS(play->state.gfxCtx); + for (i = 0; i < MINISLIME_NUM_SPAWN; i++) { minislime = this->minislime[indices[i]]; lights = LightContext_NewLights(&play->lightCtx, play->state.gfxCtx); Lights_BindAll(lights, play->lightCtx.listHead, &minislime->actor.world.pos, play); Lights_Draw(lights, play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&minislime->actor, play, 0); Matrix_SetTranslateRotateYXZ(minislime->actor.world.pos.x, minislime->actor.world.pos.y, minislime->actor.world.pos.z, &minislime->actor.shape.rot); @@ -2963,6 +2966,7 @@ void EnBigslime_DrawMinislime(EnBigslime* this, PlayState* play2) { minislime->actor.scale.y * 400.0f, minislime->actor.shape.rot.y, minislime->actor.shape.shadowAlpha * (175.0f / 255.0f)); } + CLOSE_DISPS(play->state.gfxCtx); } @@ -2980,8 +2984,9 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { MtxF* billboardMtxF; s32 i; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); + OPEN_DISPS(play->state.gfxCtx); // Draw Bigslime @@ -3018,6 +3023,7 @@ void EnBigslime_DrawBigslime(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gBigslimeBubbleDL); } } + CLOSE_DISPS(play->state.gfxCtx); EnBigslime_SetSysMatrix(&this->actor.world.pos, play, gBigslimeShadowDL, this->vtxScaleX, this->vtxScaleZ, @@ -3070,7 +3076,7 @@ void EnBigslime_DrawGekko(Actor* thisx, PlayState* play) { EnBigslime* this = THIS; s32 pad; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actionFunc == EnBigslime_DamageGekko) { func_800AE434(play, &gekkoDamageColor, this->damageSpinTimer, 20); } else if ((this->actionFunc == EnBigslime_CutsceneDefeat) || (this->actionFunc == EnBigslime_GekkoDespawn)) { @@ -3123,7 +3129,7 @@ void EnBigslime_DrawShatteringEffects(EnBigslime* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); // Draw Shockwave if (this->shockwaveAlpha > 0) { diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c index 43e87a90a..745e3b3e7 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c @@ -434,9 +434,11 @@ void EnBji01_Draw(Actor* thisx, PlayState* play) { EnBji01* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnBji01_OverrideLimbDraw, EnBji01_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index 5ebfca40f..6aa9f9e35 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -456,7 +456,7 @@ void EnBjt_Draw(Actor* thisx, PlayState* play) { EnBjt* this = THIS; if (this->scheduleResult != TOILET_HAND_SCH_NONE) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index cb9c6e3ec..b388421b7 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -616,7 +616,7 @@ void EnBom_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->actor.params == BOMB_TYPE_BODY) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Collider_UpdateSpheres(0, &this->collider2); diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index ae45b0cc5..8d104842a 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -678,8 +678,8 @@ void EnBomBowlMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_809C6214[this->unk_2F0])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_809C6220[this->unk_2F4])); diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index 8d2461649..4355759c7 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -542,7 +542,7 @@ void EnBomChu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); if (this->timer >= 40) { diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c index b67ca6820..ef30692e6 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -249,15 +249,15 @@ void EnBombal_DrawEffects(EnBombal* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { if (sPtr->isEnabled != 0) { Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW); Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(&gSun1Tex)); diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index 64f900f32..86cad7219 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -519,8 +519,8 @@ void EnBombers_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C0482C[this->unk_2B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C04838[this->unk_2BE])); diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c index b47a9630f..81e8723e0 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -425,12 +425,12 @@ s32 func_80C056D4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s } void EnBombers2_Draw(Actor* thisx, PlayState* play) { - EnBombers2* this = THIS; + OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C05920)); gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(sSetPrimColorDlPtr)); diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c index 2493d819b..cc9ac1e2c 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -473,7 +473,7 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (ENBOMBF_GET(&this->actor) <= ENBOMBF_0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (ENBOMBF_GET(&this->actor) != ENBOMBF_0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index aad6d9bc3..8260386df 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -1098,8 +1098,8 @@ void EnBomjima_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C00B3C[this->unk_2E0])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C00B48[this->unk_2E4])); diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c index 7cc78d9cf..3c0f0da54 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -912,8 +912,8 @@ void EnBomjimb_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C03274[this->unk_2C2])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C03280[this->unk_2C8])); diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index eacaa3dce..e18751369 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -336,7 +336,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) { EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &sp4C, &sp40); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateYS(this->unk_1CD * 0x2EE0, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index 302547c26..a32f2f410 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -143,7 +143,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { Matrix_Scale(temp_f26, temp_f26, temp_f26, MTXMODE_APPLY); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); @@ -704,12 +704,12 @@ void EnBox_Draw(Actor* thisx, PlayState* play) { gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, EnBox_SetRenderMode1(play->state.gfxCtx)); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnBox_PostLimbDraw, &this->dyna.actor, POLY_OPA_DISP); } else if (this->alpha != 0) { gDPPipeSync(POLY_XLU_DISP++); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); if ((this->type == ENBOX_TYPE_BIG_INVISIBLE) || (this->type == ENBOX_TYPE_SMALL_INVISIBLE)) { gSPSegment(POLY_XLU_DISP++, 0x08, EnBox_SetRenderMode3(play->state.gfxCtx)); diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c index 1c0c2cfc4..92d56eec5 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -405,7 +405,7 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->actionFunc != EnBubble_Disappear) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Math_SmoothStepToF(&this->modelRotSpeed, 16.0f, 0.2f, 1000.0f, 0.0f); Math_SmoothStepToF(&this->modelEllipticity, 0.08f, 0.2f, 1000.0f, 0.0f); Matrix_ReplaceRotation(&play->billboardMtxF); diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c index 4055399e2..ce859ad53 100644 --- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c +++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c @@ -139,7 +139,7 @@ void func_8091C178(EnButte* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C240(play->state.gfxCtx); + Gfx_SetupDL25_Xlu2(play->state.gfxCtx); sp48 = Math_SinS(D_8091D3A0) * 250.0f; sp48 = CLAMP(sp48, 0, 255); @@ -446,7 +446,7 @@ void EnButte_Draw(Actor* thisx, PlayState* play) { EnButte* this = THIS; if (this->unk_250 != 0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); } diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c index 21278af9f..7666f8e12 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c @@ -807,8 +807,9 @@ void EnClearTag_DrawEffects(Actor* thisx, PlayState* play) { EnClearTagEffect* firstEffect = this->effect; OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); // Draw all Debris effects. for (i = 0; i < ARRAY_COUNT(this->effect); i++, effect++) { @@ -981,7 +982,7 @@ void EnClearTag_DrawEffects(Actor* thisx, PlayState* play) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 200); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 200); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sWaterSplashTextures[effect->actionTimer])); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BACK); isMaterialApplied++; diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index 7fc741ebe..8d841fdd2 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -310,7 +310,7 @@ void EnCne01_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x0A, Gfx_EnvColor(play->state.gfxCtx, 160, 180, 255, 0)); diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index def6dd27a..703585dd4 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -234,45 +234,56 @@ void func_80AFE414(Actor* thisx, PlayState* play) { EnColMan* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gHeartPieceInteriorDL); + CLOSE_DISPS(play->state.gfxCtx); } void func_80AFE4AC(Actor* thisx, PlayState* play) { EnColMan* this = THIS; - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); + CLOSE_DISPS(play->state.gfxCtx); } void func_80AFE584(Actor* thisx, PlayState* play) { - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30); + CLOSE_DISPS(play->state.gfxCtx); } void func_80AFE650(Actor* thisx, PlayState* play) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropBombTex)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index beed3fb26..677c029cb 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -421,7 +421,7 @@ void EnCow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnCow_Draw(Actor* thisx, PlayState* play) { EnCow* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnCow_OverrideLimbDraw, EnCow_PostLimbDraw, &this->actor); } @@ -429,7 +429,7 @@ void EnCow_Draw(Actor* thisx, PlayState* play) { void EnCow_DrawTail(Actor* thisx, PlayState* play) { EnCow* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index 3238069cc..f524e6d5e 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -574,7 +574,7 @@ void EnCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot void EnCrow_Draw(Actor* thisx, PlayState* play) { EnCrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnCrow_OverrideLimbDraw, EnCrow_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), diff --git a/src/overlays/actors/ovl_En_Dai/z_en_dai.c b/src/overlays/actors/ovl_En_Dai/z_en_dai.c index 7b3f97ded..25013327a 100644 --- a/src/overlays/actors/ovl_En_Dai/z_en_dai.c +++ b/src/overlays/actors/ovl_En_Dai/z_en_dai.c @@ -62,7 +62,7 @@ void func_80B3E168(EnDaiEffect* effect, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < EN_DAI_EFFECT_COUNT; i++, effect++) { if (effect->isEnabled == true) { @@ -649,7 +649,7 @@ void func_80B3F78C(EnDai* this, PlayState* play) { this->unk_1CE &= ~0x40; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -683,7 +683,7 @@ void func_80B3F920(EnDai* this, PlayState* play) { this->unk_1CE |= 0x40; if (this->unk_1CD == 0xFF) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -701,7 +701,7 @@ void func_80B3F920(EnDai* this, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index b988155c7..558824ad8 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -324,7 +324,7 @@ void EnDaiku_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); switch (this->unk_278) { case 0: diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index d8a8a78e8..be45cfac6 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -466,7 +466,7 @@ void EnDaiku2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (limbIndex == 14) { Matrix_Scale(this->unk_260, this->unk_260, this->unk_260, MTXMODE_APPLY); @@ -486,7 +486,7 @@ void EnDaiku2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnDaiku2_PostLimbDraw, &this->actor); @@ -544,7 +544,7 @@ void func_80BE7718(EnDaiku2* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); objectIdx = Object_GetIndex(&play->objectCtx, OBJECT_BOMBIWA); if ((objectIdx >= 0) && Object_IsLoaded(&play->objectCtx, objectIdx)) { diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c index e969abffa..186494268 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -1319,7 +1319,7 @@ void EnDekubaba_DrawShadow(EnDekubaba* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255); @@ -1347,7 +1347,7 @@ void EnDekubaba_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Math_Vec3f_Copy(&this->bodyPartsPos[0], &this->actor.world.pos); if (this->actionFunc != EnDekubaba_DeadStickDrop) { diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c index 986953d0f..5b5857c94 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c @@ -188,7 +188,7 @@ s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V void EnDemoheishi_Draw(Actor* thisx, PlayState* play) { EnDemoheishi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnDemoheishi_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index 8a6ae63e8..0c84f91bc 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -1379,7 +1379,7 @@ void EnDg_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 8446ff413..5b268f1f8 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -1475,7 +1475,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->unk_288 == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPSegment(POLY_OPA_DISP++, 0x08, D_8089E33C[this->unk_289]); @@ -1486,7 +1486,7 @@ void EnDinofos_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, func_8089DC4C, func_8089DC84, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPSegment(POLY_XLU_DISP++, 0x08, D_8089E33C[this->unk_289]); diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c index 8edd1b580..2a5198d1f 100644 --- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c +++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c @@ -156,7 +156,7 @@ void func_80A50510(EnDnb* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++) { Matrix_Push(); @@ -180,7 +180,7 @@ void func_80A5063C(EnDnb* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++) { Matrix_Push(); @@ -263,12 +263,12 @@ s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 256; i++, arg0++) { if (arg0->isEnabled == 1) { if (!isGfxSetup) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); isGfxSetup = true; diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c index 7d59ebeec..216ca0031 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.c @@ -334,7 +334,7 @@ void func_80A51CB8(EnDnk* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A5245C[this->unk_2A0])); gDPPipeSync(POLY_OPA_DISP++); @@ -402,7 +402,7 @@ void func_80A51DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto } void func_80A51FC0(EnDnk* this, PlayState* play) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, func_80A51D78, func_80A51DA4, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index a9128b1bd..b7eb08743 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -1032,7 +1032,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (phi_v0 == true) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (limbIndex == 13) { Matrix_Scale(this->unk_454, this->unk_454, this->unk_454, MTXMODE_APPLY); Matrix_RotateXS(this->unk_45C, MTXMODE_APPLY); @@ -1058,7 +1058,7 @@ void EnDno_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(0.15f, 0.15f, 1.0f, MTXMODE_APPLY); Matrix_Translate(0.0f, -3200.0f, 0.0f, MTXMODE_APPLY); - gfxXlu = func_8012C2B4(POLY_XLU_DISP); + gfxXlu = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(gfxXlu, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(&gfxXlu[1], 0x08, diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c index fd1557e3f..0b3c5ac85 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -542,7 +542,7 @@ void EnDnp_Draw(Actor* thisx, PlayState* play) { if (this->unk_322 & 0x100) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c index c328b02d6..667f1eafb 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -469,7 +469,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { void EnDnq_Draw(Actor* thisx, PlayState* play) { EnDnq* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->picto.actor); } diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 1f754f1d5..f481f3d6b 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -377,7 +377,7 @@ s32 func_8092D068(EnDns* this) { void func_8092D108(EnDns* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_SetTranslateRotateYXZ(this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z, &this->actor.home.rot); @@ -640,7 +640,7 @@ void EnDns_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index c2fd7acf1..3f149049a 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -1103,7 +1103,7 @@ void EnDodongo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnDodongo_Draw(Actor* thisx, PlayState* play) { EnDodongo* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDodongo_OverrideLimbDraw, EnDodongo_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 47a7bcd34..be946b872 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -661,7 +661,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) { if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); } SkelAnime_DrawOpa(play, this->knobDoor.skelAnime.skeleton, this->knobDoor.skelAnime.jointTable, EnDoor_OverrideLimbDraw, NULL, &this->knobDoor.dyna.actor); diff --git a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c index 84902f540..d48bfd359 100644 --- a/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c +++ b/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.c @@ -240,7 +240,7 @@ void EnDoorEtc_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(-2900.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateZS(this->angle, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index 9efb11474..f03b2702e 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -835,8 +835,8 @@ void EnDragon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r void EnDragon_Draw(Actor* thisx, PlayState* play) { EnDragon* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnDragon_OverrideLimbDraw, EnDragon_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index 7e232d5bd..d5dc8d250 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -120,7 +120,7 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot void EnDrs_Draw(Actor* thisx, PlayState* play) { EnDrs* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnDrs_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c index 67dff9c41..6c6b40318 100644 --- a/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c +++ b/src/overlays/actors/ovl_En_Ds2n/z_en_ds2n.c @@ -121,7 +121,7 @@ void EnDs2n_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->blinkState])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->blinkState])); diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index b25e4eb47..50e9303d7 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -114,7 +114,7 @@ void EnDyExtra_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, play->state.frames * 2, 0, 0x20, 0x40, 1, play->state.frames, play->state.frames * -8, 0x10, 0x10)); diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 509e4fa9a..6f67950ab 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -110,7 +110,7 @@ void EnEgblock_Draw(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnEgblock* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->inactive != true) { OPEN_DISPS(play->state.gfxCtx); @@ -193,7 +193,7 @@ void EnEgblock_DrawEffects(EnEgblock* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isActive) { diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 0f9b4c766..2d03fccf2 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1452,7 +1452,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->action != EYEGORE_ACTION_DEAD) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gEyegoreEyeLaserTexAnim)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, @@ -1477,7 +1477,7 @@ void EnEgol_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_OPA_DISP++, gEyegoreLaserDL); } if (((this->action == EYEGORE_ACTION_LASER) && (this->laserState >= EYEGORE_LASER_FIRE)) || this->chargingLaser) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL); if (!this->chargingLaser) { s32 i; @@ -1600,7 +1600,7 @@ void EnEgol_DrawEffects(EnEgol* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isActive) { Matrix_Push(); diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 615d59196..503ce584e 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1588,7 +1588,7 @@ void EnElf_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C94C(play->state.gfxCtx); + Gfx_SetupDL27_Xlu(play->state.gfxCtx); envAlpha = (this->timer * 50) & 0x1FF; envAlpha = (envAlpha >= 0x100) ? 511 - envAlpha : envAlpha; diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index 12026b8b9..e2a5f69e3 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -151,7 +151,7 @@ void EnElfbub_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(0.0f, 0.0f, 1.0f, MTXMODE_APPLY); Matrix_ReplaceRotation(&play->billboardMtxF); diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index 871665cc6..e19e8d522 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -626,7 +626,7 @@ void EnElforg_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); switch (this->area) { case STRAY_FAIRY_AREA_WOODFALL: AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gStrayFairyWoodfallTexAnim)); diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c index 7450e3427..ad2f48c7f 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -270,14 +270,15 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(gfxCtx); + sPtr = this->effects; - func_8012C28C(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, sPtr++) { if (sPtr->isEnabled) { Matrix_Translate(sPtr->pos.x, sPtr->pos.y, sPtr->pos.z, MTXMODE_NEW); Matrix_Scale(sPtr->scale, sPtr->scale, sPtr->scale, MTXMODE_APPLY); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); gDPPipeSync(POLY_XLU_DISP++); @@ -289,5 +290,6 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL); } } + CLOSE_DISPS(gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c index 2996ccc23..6121cce9d 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c +++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c @@ -87,8 +87,9 @@ void EnEndingHero_Draw(Actor* thisx, PlayState* play) { s32 index = 0; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->unk242])); diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c index 0cc20358a..604bcd583 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c +++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c @@ -69,8 +69,8 @@ void EnEndingHero2_Update(Actor* thisx, PlayState* play) { void EnEndingHero2_Draw(Actor* thisx, PlayState* play) { EnEndingHero2* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c index aba7c4488..e95d8a6a7 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c +++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c @@ -69,8 +69,8 @@ void EnEndingHero3_Update(Actor* thisx, PlayState* play) { void EnEndingHero3_Draw(Actor* thisx, PlayState* play) { EnEndingHero3* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c index 39e920b9e..39fd515b1 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c +++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c @@ -69,8 +69,8 @@ void EnEndingHero4_Update(Actor* thisx, PlayState* play) { void EnEndingHero4_Draw(Actor* thisx, PlayState* play) { EnEndingHero4* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c index ddf866f94..03eb40786 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c +++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c @@ -85,8 +85,9 @@ void EnEndingHero5_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnEndingHero5_Draw(Actor* thisx, PlayState* play) { EnEndingHero5* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); switch (this->unk25C) { diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index 5324518de..6a7e96b81 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -133,8 +133,8 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { if (this->isIdle == 1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->objectIndex >= 0 && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment); diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 4081bd8e7..85d0527fa 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -266,7 +266,7 @@ void EnEstone_DrawEffects(EnEstone* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isActive) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index a43d39c7c..d21b30b60 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -736,7 +736,7 @@ void EnFall_Moon_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Matrix_MultVec3f(sFocusOffset, &this->actor.focus.pos); @@ -754,7 +754,7 @@ void EnFall_OpenMouthMoon_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); primColor = (this->eyeGlowIntensity * 200.0f) + 40.0f; @@ -772,7 +772,7 @@ void EnFall_LodMoon_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 20, 25, 30, 0, 0x3E7, 0x3200); @@ -826,7 +826,7 @@ void EnFall_Fireball_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); this->fireballYTexScroll1 += (s32)(4.0f + (this->fireballIntensity * 12.0f)); this->fireballYTexScroll2 += (s32)(2.0f + (this->fireballIntensity * 6.0f)); @@ -864,7 +864,7 @@ void EnFall_RisingDebris_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gMoonDebrisMaterialDL); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); @@ -894,7 +894,7 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play) { AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gMoonFireRingTexAnim)); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE); @@ -914,13 +914,13 @@ void EnFall_MoonsTear_Draw(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gFallingMoonsTearTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gFallingMoonsTearDL); Matrix_Scale(3.0f, 3.0f, 6.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gFallingMoonsTearFireDL); diff --git a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c index 28a6cc74c..bdf742ec3 100644 --- a/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c +++ b/src/overlays/actors/ovl_En_Fall2/z_en_fall2.c @@ -153,13 +153,13 @@ void EnFall2_Draw(Actor* thisx, PlayState* play) { Mtx* mtx; if (!(this->alphaLevel <= 0.0f)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_fall2_Matanimheader_008840)); mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); func_8018450C(play, &this->skeletonInfo, mtx, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index 097822dd1..d23e6b9ee 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -829,9 +829,10 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) { EnFamosRock* rock; OPEN_DISPS(play->state.gfxCtx); + dispOpa = POLY_OPA_DISP; - gSPDisplayList(&dispOpa[0], &sSetupDL[6 * 0x19]); + gSPDisplayList(&dispOpa[0], gSetupDLs[SETUPDL_25]); gDPSetPrimColor(&dispOpa[1], 0, 0x80, 255, 255, 255, 255); @@ -858,7 +859,7 @@ void EnFamos_DrawDebris(EnFamos* this, PlayState* play) { void EnFamos_Draw(Actor* thisx, PlayState* play) { EnFamos* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actionFunc != EnFamos_DeathFade) { AnimatedMat_Draw(play, sEmblemAnimatedMats[this->animatedMaterialIndex]); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnFamos_OverrideLimbDraw, diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.c b/src/overlays/actors/ovl_En_Fg/z_en_fg.c index 868c43533..925dc93df 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -403,7 +403,8 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, envColor[this->actor.params].r, envColor[this->actor.params].g, envColor[this->actor.params].b, envColor[this->actor.params].a); @@ -411,6 +412,7 @@ void EnFg_Draw(Actor* thisx, PlayState* play) { gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(object_fr_Tex_0059A0)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnFg_OverrideLimbDraw, EnFg_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } @@ -456,12 +458,12 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { s16 firstDone = false; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 10; i++, dustEffect++) { if (dustEffect->type) { if (!firstDone) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); firstDone = true; diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c index 434ee1b86..b26592ac0 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -828,7 +828,7 @@ void EnFirefly_Draw(Actor* thisx, PlayState* play) { gfx = POLY_OPA_DISP; } - gSPDisplayList(gfx, &sSetupDL[6 * 25]); + gSPDisplayList(gfx, gSetupDLs[SETUPDL_25]); if (this->currentType == KEESE_FIRE) { gDPSetEnvColor(&gfx[1], 0, 0, 0, 0); diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c index b70ce1ae7..0331ec347 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c @@ -948,7 +948,7 @@ void EnFish_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, colour->r, colour->g, colour->b, 255); diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c index b7952c1bc..ac3a4246b 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -1078,8 +1078,8 @@ void EnFish2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro void EnFish2_Draw(Actor* thisx, PlayState* play) { EnFish2* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnFish2_OverrideLimbDraw, EnFish2_PostLimbDraw, &this->actor); func_80B2B180(this, play); @@ -1157,7 +1157,7 @@ void func_80B2B180(EnFish2* this, PlayState* play) { OPEN_DISPS(gfxCtx); ptr = &this->unk_3F8[0]; - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++, ptr++) { if (ptr->unk_00) { diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index d9645885e..ef15c27a9 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1252,7 +1252,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { for (i = 30; i < EFFECT_COUNT; i++) { if (effect->type == FS_EFF_RAIN_DROP) { if (flag == 0) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gDPSetCombineMode(POLY_XLU_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 30); flag++; @@ -1271,7 +1271,7 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { effect++; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); effect = firstEffect + 30; flag = 0; @@ -1708,7 +1708,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) { EnFishing_UpdateSinkingLure(play); if (sLurePos.y < WATER_SURFACE_Y(play)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gFishingSinkingLureSegmentMaterialDL); @@ -1725,7 +1725,7 @@ void EnFishing_DrawSinkingLure(PlayState* play) { } } } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gFishingSinkingLureSegmentMaterialDL); @@ -1757,7 +1757,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Push(); if (D_8090CD54 != 0) { @@ -1800,7 +1800,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) Matrix_RotateZF(M_PI / 2, MTXMODE_APPLY); Matrix_RotateYF(M_PI / 2, MTXMODE_APPLY); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gFishingLureFloatDL); @@ -1821,7 +1821,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) EnFishing_DrawLureHook(play, &hookPos[1], &sLureHookRefPos[1], 1); } - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x14); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gDPSetCombineMode(POLY_XLU_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 55); @@ -1893,7 +1893,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) } Matrix_Pop(); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx); } @@ -1988,7 +1988,7 @@ void EnFishing_DrawRod(PlayState* play) { } } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gFishingRodSetupDL); @@ -4225,7 +4225,7 @@ void EnFishing_LoachPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve void EnFishing_DrawFish(Actor* thisx, PlayState* play) { EnFishing* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYF(BINANG_TO_RAD_ALT(this->unk_15A + this->actor.shape.rot.y), MTXMODE_APPLY); @@ -5618,8 +5618,8 @@ void EnFishing_DrawOwner(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->actor.projectedPos.z < 1500.0f) && (fabsf(this->actor.projectedPos.x) < (100.0f + this->actor.projectedPos.z))) { diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c index ffd456af4..3cf6385e0 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -1188,7 +1188,7 @@ void EnFloormas_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->collider.base.colType == COLTYPE_HARD) { func_800AE2A0(play, &D_808D3958, this->unk_190 % 40, 40); } @@ -1213,7 +1213,7 @@ void func_808D3754(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->collider.base.colType == COLTYPE_HARD) { func_800AE5E4(play, &D_808D3958, this->unk_190 % 40, 40); } diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index 8130f3cc9..636cd892e 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -1470,7 +1470,7 @@ void EnFsn_DrawCursor(EnFsn* this, PlayState* play, f32 x, f32 y, f32 z, u8 draw OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1527,7 +1527,7 @@ void EnFsn_DrawStickDirectionPrompts(EnFsn* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1622,7 +1622,7 @@ void EnFsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 97f996ff1..3866c4fb1 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -1385,7 +1385,7 @@ void EnFu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 0, 50, 160, 0)); @@ -1449,7 +1449,7 @@ void func_80964950(PlayState* play, EnFuUnkStruct* ptr, s32 len) { OPEN_DISPS(play->state.gfxCtx); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < len; i++, ptr++) { if (ptr->unk_36 == 1) { diff --git a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c index e976e01dc..576e307b2 100644 --- a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c +++ b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c @@ -364,7 +364,7 @@ void func_80AD0340(EnFuKago* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(D_80AD061C); i++, ptr++) { Matrix_Push(); @@ -390,7 +390,7 @@ void EnFuKago_Draw(Actor* thisx, PlayState* play) { if (this->unk_33A == 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_fu_mato_DL_0006A0); diff --git a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c index c42278805..52e947dbd 100644 --- a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c +++ b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c @@ -406,7 +406,7 @@ void func_80ACF1F4(EnFuMato* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < 2; i++) { Matrix_Push(); @@ -449,7 +449,7 @@ void func_80ACF3F4(EnFuMato* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(D_80ACF63C); i++, ptr++) { Matrix_Push(); @@ -471,7 +471,7 @@ void EnFuMato_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c index fe4e6636b..150f3c8c1 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -846,7 +846,7 @@ void EnFz_Draw(Actor* thisx, PlayState* play) { if (this->unk_BD7 != 0) { func_800B8118(&this->actor, play, 0); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, play->state.frames % 128, 0x20, 0x20, 1, 0, @@ -993,7 +993,7 @@ void func_80934464(EnFz* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_PATTERN); diff --git a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c index 9f45748df..b9936c53c 100644 --- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c +++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c @@ -181,7 +181,7 @@ void EnGamelupy_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeTextures[this->rupeeIndex])); diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 9c2d7fe37..8d3cf44a5 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -1007,7 +1007,7 @@ void EnGb2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->unk_28A == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); @@ -1016,7 +1016,7 @@ void EnGb2_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGb2_OverrideLimbDraw, EnGb2_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, this->unk_28A); diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 6cfbb4718..99a2808f5 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -457,7 +457,7 @@ void EnGe1_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGe1_OverrideLimbDraw, EnGe1_PostLimbDraw, &this->picto.actor); diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index 922472f9a..15c151789 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -767,7 +767,7 @@ void EnGe2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex])); func_800B8050(&this->picto.actor, play, 0); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index 4b5e8e311..0362fb4e3 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -951,7 +951,7 @@ void EnGeg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (limbIndex == 17) { if (!(this->unk_230 & 0x40)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -1045,7 +1045,7 @@ void func_80BB3BE0(EnGeg* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BB4088[this->unk_23E])); gDPPipeSync(POLY_OPA_DISP++); @@ -1062,7 +1062,7 @@ void func_80BB3CB4(EnGeg* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index 81d1c6bb6..e9e37ddb4 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -527,7 +527,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -551,7 +551,7 @@ void func_80B35C84(EnGgStruct* ptr, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -604,7 +604,7 @@ void func_80B3610C(EnGgStruct* ptr, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 150, 0, 255); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -791,7 +791,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_19_80)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2])); @@ -799,7 +799,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGg_OverrideLimbDraw, EnGg_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_308 == 1)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B36DFC[this->unk_2E2])); @@ -807,7 +807,7 @@ void EnGg_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGg_OverrideLimbDraw, EnGg_PostLimbDraw, &this->actor, POLY_XLU_DISP); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index fdd099fff..76e3d69da 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -479,7 +479,7 @@ void EnGg2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) || (this->unk_2F0 == 1)) { gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B3C0AC[this->unk_2EA])); diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c index 07c01b288..cc15fcbce 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -509,7 +509,7 @@ void EnGiant_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->alpha >= 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sFaceTextures[this->faceIndex])); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); Scene_SetRenderModeXlu(play, 0, 1); @@ -517,10 +517,10 @@ void EnGiant_Draw(Actor* thisx, PlayState* play) { this->skelAnime.dListCount, NULL, EnGiant_PostLimbDrawOpa, thisx); } else if (this->alpha > 0) { if (this->alpha >= 129) { - func_8012C2B4(POLY_XLU_DISP++); + Gfx_SetupDL71(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 2, 2); } else { - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 1, 2); } gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sFaceTextures[this->faceIndex])); diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index fba0c1118..a76d89e7b 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -668,7 +668,7 @@ void EnGinkoMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 50, 80, 0, 0)); diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 40cf72a98..c561035aa 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -1233,7 +1233,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { Matrix_RotateXS(-0x4000, MTXMODE_APPLY); @@ -1242,7 +1242,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, object_gk_DL_006688); gSPDisplayList(POLY_OPA_DISP++, object_gk_DL_006680); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos = this->actor.world.pos; scale.x = 0.2f; @@ -1258,7 +1258,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { EnGk_TransformLimbDraw, &this->actor); if (ENGK_GET_F(&this->actor) != ENGK_F_2) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->unk_2E4 == 0) || (this->unk_2E4 == 1) || (this->unk_2E4 == 2) || (this->unk_2E4 == 3) || (this->unk_2E4 == 4)) { pos.x = this->actor.world.pos.x - 15.0f; diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 573b911c4..4c4aa474b 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -1832,7 +1832,7 @@ void EnGm_Draw(Actor* thisx, PlayState* play) { if ((this->unk_258 != 0) && (this->unk_262 >= 0)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80951E30[this->unk_3CE])); diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index edf1cb104..67cbf327a 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -243,7 +243,7 @@ void func_80A11144(EnGoStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 32; i++, ptr++) { @@ -320,12 +320,12 @@ void func_80A115B4(EnGoStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 32; i++, ptr++) { if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) { if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); flag = true; } @@ -456,7 +456,7 @@ void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 ar OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < 16; i++, ptr++) { if (ptr->unk_00 == arg4) { @@ -1072,7 +1072,7 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_Scale(arg2 * 0.7f, arg2 * 0.8f, arg2, MTXMODE_APPLY); @@ -1952,7 +1952,7 @@ void func_80A15B80(EnGo* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); @@ -2070,7 +2070,7 @@ void func_80A15FEC(Actor* thisx, PlayState* play) { if (!(this->unk_390 & 0x300)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A1670C[this->unk_3BE])); diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c index c947d3334..148b2d116 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -1575,7 +1575,7 @@ void func_80942B1C(EnGoroiwa* this, PlayState* play) { if ((ptr->unk_28 != 0) && (ptr->unk_2C > 0)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index 2bd6fec69..c4ff0959c 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -1007,7 +1007,7 @@ void EnGrasshopper_Draw(Actor* thisx, PlayState* play) { u8* shadowTex = GRAPH_ALLOC(play->state.gfxCtx, SUBS_SHADOW_TEX_SIZE); u8* shadowTexIter; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnGrasshopper_PostLimbDraw, &this->actor); if ((this->type != EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM) && @@ -1134,7 +1134,7 @@ void EnGrasshopper_DrawEffects(EnGrasshopper* this, PlayState* play) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C9BC(play->state.gfxCtx); + Gfx_SetupDL61_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sLightningTextures[effect->lightningIndex])); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 200, 255, 255, 255); diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index b9f6acb68..30a6709a2 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -1070,7 +1070,7 @@ void EnGs_Draw(Actor* thisx, PlayState* play) { frames = play->gameplayFrames; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Push(); if (this->unk_19A & 1) { @@ -1092,7 +1092,7 @@ void EnGs_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); if (this->unk_19A & 2) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(0.05f, -0.05f, 1.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index f5925f524..d27dd5a59 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -370,7 +370,7 @@ void EnGuardNuts_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index a6f5f98b3..78a2aa4d1 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -385,11 +385,13 @@ void EnGuruguru_Draw(Actor* thisx, PlayState* play) { EnGuruguru* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->texIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->texIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnGuruguru_OverrideLimbDraw, NULL, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index a88c8bb38..bcc5882a2 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -342,19 +342,23 @@ void EnHakurock_Update(Actor* thisx, PlayState* play) { void func_80B228F4(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 185, 24, 255); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_06AB30); + CLOSE_DISPS(play->state.gfxCtx); } void EnHakurock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(-100.0f, 0.0f, 0.0f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteMaterialDL); gSPDisplayList(POLY_OPA_DISP++, gGohtStalactiteModelDL); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c index c54703ef9..ce60a0187 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -141,9 +141,9 @@ void func_80B22FA8(EnHanabiStruct* arg0, PlayState* play2) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); diff --git a/src/overlays/actors/ovl_En_Hata/z_en_hata.c b/src/overlays/actors/ovl_En_Hata/z_en_hata.c index 4a01b663e..e5b806b90 100644 --- a/src/overlays/actors/ovl_En_Hata/z_en_hata.c +++ b/src/overlays/actors/ovl_En_Hata/z_en_hata.c @@ -94,7 +94,7 @@ s32 EnHata_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnHata_Draw(Actor* thisx, PlayState* play) { EnHata* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHata_OverrideLimbDraw, NULL, &this->dyna.actor); } diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c index 5fa9f5ea2..a335e39d2 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -186,7 +186,7 @@ s32 EnHeishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f void EnHeishi_Draw(Actor* thisx, PlayState* play) { EnHeishi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHeishi_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index 34e1d1e15..0992aa9d9 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -448,11 +448,13 @@ void EnHg_Draw(Actor* thisx, PlayState* play) { EnHg* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHg_OverrideLimbDraw, EnHg_PostLimbDraw, &this->actor); Matrix_Put(&this->mf); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherGibdoEyebrowsDL); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index bbef58b1a..37d5a61f9 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -416,12 +416,14 @@ void EnHgo_Draw(Actor* thisx, PlayState* play) { EnHgo* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHgo_OverrideLimbDraw, &EnHgo_PostLimbDraw, &this->actor); Matrix_Put(&this->mf); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherHumanEyebrowsDL); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index 29a7c6a8e..630ae405f 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -435,6 +435,6 @@ void EnHiddenNuts_Update(Actor* thisx, PlayState* play) { void EnHiddenNuts_Draw(Actor* thisx, PlayState* play) { EnHiddenNuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index 09a110dbf..7c01fa788 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -905,7 +905,7 @@ void EnHintSkb_Draw(Actor* thisx, PlayState* play) { EnHintSkb* this = THIS; this->limbCount = 0; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHintSkb_OverrideLimbDraw, EnHintSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index 096b92fdd..9b196c2fc 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -319,30 +319,32 @@ void EnHoll_Update(Actor* thisx, PlayState* play) { void EnHoll_Draw(Actor* thisx, PlayState* play) { EnHoll* this = THIS; - Gfx* dl; - u32 dlIndex; + Gfx* dList; + u32 setupDListIndex; if (this->alpha != 0) { OPEN_DISPS(play->state.gfxCtx); + if (this->alpha == 255) { - dl = POLY_OPA_DISP; - dlIndex = 37; + dList = POLY_OPA_DISP; + setupDListIndex = SETUPDL_37; } else { - dl = POLY_XLU_DISP; - dlIndex = 0; + dList = POLY_XLU_DISP; + setupDListIndex = SETUPDL_0; } - dl = Gfx_CallSetupDL(dl, dlIndex); + dList = Gfx_SetupDL(dList, setupDListIndex); if (this->playerSide == EN_HOLL_BEHIND) { Matrix_RotateYF(M_PI, MTXMODE_APPLY); } - gSPMatrix(dl++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(dl++, 0, 0, 0, 0, 0, this->alpha); - gSPDisplayList(dl++, gEnHollCentralPlaneDL); + gSPMatrix(dList++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(dList++, 0, 0, 0, 0, 0, this->alpha); + gSPDisplayList(dList++, gEnHollCentralPlaneDL); if (this->alpha == 255) { - POLY_OPA_DISP = dl; + POLY_OPA_DISP = dList; } else { - POLY_XLU_DISP = dl; + POLY_XLU_DISP = dList; } + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 2e68c75d6..2f2be8c64 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -4671,7 +4671,7 @@ void EnHorse_Draw(Actor* thisx, PlayState* play) { EnHorse* this = THIS; if (!(this->stateFlags & ENHORSE_INACTIVE) && (this->actor.update != func_8087D540)) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); this->stateFlags |= ENHORSE_DRAW; if (!(this->unk_1EC & 1)) { if (this->stateFlags & ENHORSE_JUMPING) { diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index 8c77bb2a0..10d4a6826 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -593,7 +593,7 @@ s32 EnHorseLinkChild_OverrideSkinDraw(Actor* thisx, PlayState* play, s32 limbInd void EnHorseLinkChild_Draw(Actor* thisx, PlayState* play) { EnHorseLinkChild* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_80138258(&this->actor, play, &this->skin, EnHorseLinkChild_PostSkinDraw, EnHorseLinkChild_OverrideSkinDraw, true); } diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index 4d535292f..5c06e292a 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -356,7 +356,7 @@ void EnHs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnHs_Draw(Actor* thisx, PlayState* play) { EnHs* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnHs_OverrideLimbDraw, EnHs_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index a0960a60f..86d6309b6 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -1036,7 +1036,7 @@ void EnIg_Draw(Actor* thisx, PlayState* play) { EnIg* this = THIS; if (this->scheduleResult != 0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index fc7fafdcf..8cff778fd 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -1077,10 +1077,10 @@ void EnIk_Draw(Actor* thisx, PlayState* play) { func_800B8050(&this->actor, play, 0); func_800B8118(&this->actor, play, 0); gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_XLU_DISP = &gfx[1]; gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gfxArmorType = sIronKnuckleArmorType[this->actor.params]; gSPSegment(&gfx[1], 0x08, gfxArmorType[0]); gSPSegment(&gfx[2], 0x09, gfxArmorType[1]); diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 71c512418..0e103de63 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -1615,9 +1615,11 @@ void EnIn_Draw(Actor* thisx, PlayState* play) { EnIn* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnIn_OverrideLimbDraw, EnIn_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c index 866f1d1b8..6a51e9486 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c @@ -506,7 +506,7 @@ void EnInsect_Update(Actor* thisx, PlayState* play) { void EnInsect_Draw(Actor* thisx, PlayState* play) { EnInsect* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); D_8091BD60 = 0; } diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index 22ef1282a..202ed6637 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -710,7 +710,7 @@ void func_8095F210(EnIshi* this, PlayState* play) { if (this->actor.projectedPos.z < 1300.0f) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); sp28 = (1300.0f - this->actor.projectedPos.z) * 2.55f; @@ -730,7 +730,7 @@ void func_8095F36C(EnIshi* this, PlayState* play) { if ((this->actor.projectedPos.z <= 2150.0f) || ((this->unk_197 & 1) && (this->actor.projectedPos.z < 2250.0f))) { this->actor.shape.shadowAlpha = 160; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -741,7 +741,7 @@ void func_8095F36C(EnIshi* this, PlayState* play) { this->actor.shape.shadowAlpha = sp20 * 0.627451f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c index 1c65efed8..fcbd26b2f 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -594,7 +594,7 @@ void EnJa_Draw(Actor* thisx, PlayState* play) { if (this->unk_1D8.unk_00 != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, D_80BC37AC[phi_t2].r, D_80BC37AC[phi_t2].g, D_80BC37AC[phi_t2].b, diff --git a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c index 05855bb20..314e94d1b 100644 --- a/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c +++ b/src/overlays/actors/ovl_En_Jc_Mato/z_en_jc_mato.c @@ -150,9 +150,11 @@ void EnJcMato_Draw(Actor* thisx, PlayState* play) { EnJcMato* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, gKoumeTargetDL); Matrix_MultVec3f(&sOffset, &this->pos); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 2985409dc..25fe13064 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -636,7 +636,7 @@ void EnJgameTsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C150A4[this->unk_21C])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C150A4[this->unk_21C])); diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 2134ded5b..abf5e9eb4 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -1058,7 +1058,7 @@ void func_8096A9F4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto void EnJs_Draw(Actor* thisx, PlayState* play) { EnJs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, func_8096A9F4, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index e90b14f82..07e4990bf 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -2134,8 +2134,8 @@ void EnKaizoku_Draw(Actor* thisx, PlayState* play) { f32 drawDmgEffAlpha; EnKaizoku* this = THIS; - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 2cec5d9b8..7d54f3ed3 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -1153,7 +1153,7 @@ void EnKakasi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r void EnKakasi_Draw(Actor* thisx, PlayState* play) { EnKakasi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, EnKakasi_PostLimbDraw, &this->picto.actor); } diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index 9777c7433..d9d5ef7d8 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -805,7 +805,7 @@ void EnKame_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_80AD8E34[this->unk_29C]); @@ -840,7 +840,7 @@ s32 Enkame_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void func_80AD8D64(Actor* thisx, PlayState* play) { EnKame* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime2.skeleton, this->skelAnime2.jointTable, this->skelAnime2.dListCount, Enkame_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index c4ef32e31..804854f53 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -923,8 +923,8 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, object_kanban_DL_000C30); diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c index 0c0078fd3..66aa6d5c7 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -634,7 +634,7 @@ void EnKarebaba_DrawShadow(EnKarebaba* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255); @@ -658,7 +658,7 @@ void EnKarebaba_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Math_Vec3f_Copy(this->bodyPartsPos, &this->actor.world.pos); if (this->actionFunc == EnKarebaba_DeadItemDrop) { diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c index b3b8ca295..cfd27fbb0 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -557,7 +557,7 @@ void EnKbt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gfx = POLY_OPA_DISP; diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index 24147b0d1..ea7faef57 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -775,7 +775,7 @@ void EnKendoJs_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnKendoJs_Draw(Actor* thisx, PlayState* play) { EnKendoJs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnKendoJs_OverrideLimbDraw, EnKendoJs_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index f30f55a33..dd26ba172 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -1134,7 +1134,7 @@ void func_80B43074(EnKgy* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); Matrix_Push(); Matrix_Translate(-800.0f, 3100.0f, 8400.0f, MTXMODE_APPLY); @@ -1166,7 +1166,7 @@ void func_80B43074(EnKgy* this, PlayState* play) { void EnKgy_Draw(Actor* thisx, PlayState* play) { EnKgy* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_29C & 1) { func_80B43074(this, play); } diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c index f3005ca05..77c7e1dc9 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -359,7 +359,7 @@ void EnKujiya_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gLotteryShopCylinderDL); diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 2af87ea90..147ca2401 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -715,7 +715,7 @@ void EnKusa_DrawBush(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); alpha = (1300.0f - this->actor.projectedPos.z) * 2.55f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, alpha); diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index 8e2d194a6..f400d157f 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -1323,7 +1323,7 @@ void func_80A5E6F0(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(D_80A5F1C0.unk_0480); i++) { EnKusa2UnkBssSubStruct2* s = &D_80A5F1C0.unk_0480[i]; @@ -1343,7 +1343,7 @@ void func_80A5E6F0(Actor* thisx, PlayState* play) { void func_80A5E80C(PlayState* play, s32 arg1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, arg1); diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c index 0bd619a9c..02f77693d 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c @@ -1009,7 +1009,7 @@ void EnLiftNuts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnLiftNuts_Draw(Actor* thisx, PlayState* play) { EnLiftNuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnLiftNuts_OverrideLimbDraw, EnLiftNuts_PostLimbDraw, thisx); } diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.c b/src/overlays/actors/ovl_En_Light/z_en_light.c index 830484996..0908649dc 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -168,7 +168,7 @@ void EnLight_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->actor.params >= 0) { gSPSegment( diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index 7cd1c3369..cc333b2ae 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -389,7 +389,7 @@ void EnLookNuts_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeState])); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index 1b9cb743a..463c5b327 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -487,7 +487,7 @@ void EnMThunder_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 1242de4ba..7fb2a13a3 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -1069,7 +1069,7 @@ void EnMa4_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, gRomaniWoodenBoxDL); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->mouthTexIndex])); diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c index 6d0b027eb..89ee4aada 100644 --- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c +++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c @@ -1462,7 +1462,7 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[this->mouthTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyesTextures[this->eyeTexIndex])); diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c index edf0e41f2..8eacc7962 100644 --- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c +++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c @@ -536,7 +536,8 @@ void EnMaYts_Draw(Actor* thisx, PlayState* play) { EnMaYts* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[this->mouthTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeTexIndex])); @@ -550,7 +551,8 @@ void EnMaYts_Draw(Actor* thisx, PlayState* play) { // Alternative draw function void EnMaYts_DrawSleeping(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, gRomaniSleepingDL); diff --git a/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 15aa42bda..0cce91c73 100644 --- a/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -554,7 +554,7 @@ void EnMag_DrawImageRGBA32(Gfx** gfxp, s16 centerX, s16 centerY, TexturePtr sour s32 pad; s32 i; - func_8012CA0C(&gfx); + Gfx_SetupDL56_Ptr(&gfx); curTexture = source; rectLeft = centerX - (width / 2); @@ -709,7 +709,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { // Set segment 6 to the object, since this will be read by OVERLAY_DISP where it is not set by default. gSPSegment(gfx++, 0x06, play->objectCtx.status[this->actor.objBankIndex].segment); - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); // Mask appearing effects gDPPipeSync(gfx++); @@ -736,7 +736,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { } } - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); if (this->majorasMaskAlpha != 0) { gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, @@ -774,7 +774,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { } if (this->subtitleAlpha != 0) { - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); gDPSetAlphaCompare(gfx++, G_AC_NONE); gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -792,7 +792,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { SUBTITLE_TEX_LEFT, SUBTITLE_TEX_TOP); } - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); gDPSetAlphaCompare(gfx++, G_AC_NONE); gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -808,7 +808,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { EnMag_DrawTextureI8(&gfx, gTitleScreenMajorasMaskSubtitleTex, SUBTITLE_TEX_WIDTH, SUBTITLE_TEX_HEIGHT, SUBTITLE_TEX_LEFT, SUBTITLE_TEX_TOP); - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); gDPSetAlphaCompare(gfx++, G_AC_NONE); gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); @@ -833,7 +833,7 @@ void EnMag_DrawInner(Actor* thisx, PlayState* play, Gfx** gfxp) { THE_LEGEND_OF_TEX_LEFT, THE_LEGEND_OF_TEX_TOP); } - func_8012C680(&gfx); + Gfx_SetupDL39_Ptr(&gfx); if (this->copyrightAlpha != 0) { gDPSetAlphaCompare(gfx++, G_AC_NONE); diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c index 7d79bcd75..659ef4cb3 100644 --- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c +++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c @@ -700,7 +700,7 @@ void EnMaruta_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_210 == 0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index 7ac16e1b0..e7941a4d5 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -628,12 +628,14 @@ void EnMinifrog_Draw(Actor* thisx, PlayState* play) { Color_RGBA8* envColor; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); envColor = &sEnMinifrogColor[this->frogIndex]; gSPSegment(POLY_OPA_DISP++, 0x08, D_808A4D74[0]); gSPSegment(POLY_OPA_DISP++, 0x09, D_808A4D74[0]); gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, envColor->a); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMinifrog_OverrideLimbDraw, EnMinifrog_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index 20f32028e..92a3ff91e 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -480,7 +480,7 @@ void EnMk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void EnMk_Draw(Actor* thisx, PlayState* play) { EnMk* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMk_OverrideLimbDraw, EnMk_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c index 4f1ddc660..9b4722fba 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -524,7 +524,7 @@ void EnMkk_Draw(Actor* thisx, PlayState* play) { if (this->alpha == 255) { primColors = &D_80A4F7C4[this->primColorSelect]; gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetPrimColor(&gfx[1], 0, 0xFF, primColors->r, primColors->g, primColors->b, primColors->a); gSPSegment(&gfx[2], 0x08, D_801AEFA0); gSPMatrix(&gfx[3], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -532,7 +532,7 @@ void EnMkk_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = &gfx[5]; } gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha); gSPDisplayList(&gfx[2], dLists->unk0); Matrix_ReplaceRotation(&play->billboardMtxF); @@ -576,7 +576,7 @@ void func_80A4F4C8(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->alpha); gSPDisplayList(&gfx[2], dLists->unk0); Matrix_ReplaceRotation(&play->billboardMtxF); diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index 67a0a1e77..a0a308ef9 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -211,7 +211,8 @@ void EnMm_Draw(Actor* thisx, PlayState* play) { EnMm* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_190 != 0) { s16 rotY = this->actor.world.rot.y - this->actor.shape.rot.y; @@ -221,5 +222,6 @@ void EnMm_Draw(Actor* thisx, PlayState* play) { } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_055628); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c index 48a379304..5c6adcd8a 100644 --- a/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c +++ b/src/overlays/actors/ovl_En_Mm2/z_en_mm2.c @@ -82,7 +82,7 @@ void EnMm2_Update(Actor* thisx, PlayState* play) { void EnMm2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, sEnMm2DL); diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index 366bddef3..abf5503a4 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -561,7 +561,7 @@ void EnMm3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A704FC[this->unk_1DC])); gSPSegment(POLY_OPA_DISP++, 0x0C, sEnMm3DL); diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c index 3cbf7e2ad..732fc9b3b 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -181,7 +181,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) { void EnMs_Draw(Actor* thisx, PlayState* play) { EnMs* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index 4bf4db0e0..ebea9196b 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -1236,6 +1236,6 @@ void EnMushi2_Draw(Actor* thisx, PlayState* play) { EnMushi2* this = THIS; func_80A687A0(this); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, NULL); } diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.c b/src/overlays/actors/ovl_En_Muto/z_en_muto.c index 7c9d1e9b2..441c27cdc 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -300,7 +300,7 @@ s32 EnMuto_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* void EnMuto_Draw(Actor* thisx, PlayState* play) { EnMuto* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnMuto_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index c5a8b2498..4edadf412 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -789,7 +789,7 @@ void EnNb_Draw(Actor* thisx, PlayState* play) { EnNb* this = THIS; if (this->scheduleResult != EN_NB_SCH_NONE) { - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnNb_OverrideLimbDraw, EnNb_PostLimbDraw, EnNb_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c index 960767b11..66098a9d5 100644 --- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c +++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c @@ -729,11 +729,14 @@ s32 EnNeoReeba_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnNeoReeba_Draw(Actor* thisx, PlayState* play) { EnNeoReeba* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x01, 255, 255, 255, 255); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnNeoReeba_OverrideLimbDraw, NULL, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); if (this->stunTimer > 0) { 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 807bbd849..41f872488 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c @@ -104,10 +104,11 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play) { Vec3f scale; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); position.x = this->actor.world.pos.x + 7.0f; position.y = this->actor.world.pos.y; @@ -118,5 +119,6 @@ void EnNimotsu_Draw(Actor* thisx, PlayState* play) { scale.z = 0.2f; func_800BC620(&position, &scale, 255, play); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index bded43eda..9f364c2c6 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -938,7 +938,7 @@ s32 EnNiw_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnNiw_Draw(Actor* thisx, PlayState* play) { EnNiw* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, EnNiw_OverrideLimbDraw, NULL, &this->actor); EnNiw_DrawFeathers(this, play); @@ -1002,7 +1002,8 @@ void EnNiw_DrawFeathers(EnNiw* this, PlayState* play) { s16 i; OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->feathers); i++, feather++) { if (feather->isEnabled == true) { diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c index 0187e1c88..3b2659d1e 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -107,7 +107,7 @@ void EnNnh_Draw(Actor* thisx, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; s32 pad; - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gfxCtx->polyOpa.p++, gButlerSonMainBodyDL); } diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index 9c6fe4a9d..bf3216fd5 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -173,10 +173,12 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) { EnNutsball* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZS(this->actor.home.rot.z, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_058BA0); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index b11e8c408..afd6eea3e 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -487,7 +487,7 @@ void EnNwc_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); dispHead = POLY_OPA_DISP; @@ -519,7 +519,7 @@ s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p void EnNwc_DrawAdultBody(Actor* thisx, PlayState* play) { EnNwc* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->niwSkeleton.skeleton, this->niwSkeleton.jointTable, this->niwSkeleton.dListCount, EnNwc_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index 3f10f6771..7a40b38f5 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -512,7 +512,7 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_PrimColor(play->state.gfxCtx, 0x80, 255, 255, 255, 255)); @@ -542,7 +542,7 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { MTXMODE_APPLY); } - gfx = func_8012C868(POLY_XLU_DISP); + gfx = Gfx_SetupDL20_NoCD(POLY_XLU_DISP); gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); if (1) {} diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index 6cc29578a..0631922be 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -1037,7 +1037,7 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->alpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if ((this->animIndex == OSN_ANIM_CHOKE) || (this->animIndex == OSN_ANIM_DESPAIR) || (this->animIndex == OSN_ANIM_HAND_OUT_2) || (play->msgCtx.currentTextId == 0x1FCA)) { gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeOpenTex)); @@ -1056,7 +1056,7 @@ void EnOsn_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnOsn_OverrideLimbDraw, EnOsn_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeClosedHappyTex)); gSPSegment(POLY_XLU_DISP++, 0x09, Lib_SegmentedToVirtual(sSmileTex)); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->alpha); diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 2444acca5..c2e813273 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -1575,7 +1575,7 @@ void EnOssan_DrawCursor(PlayState* play, EnOssan* this, f32 x, f32 y, f32 z, u8 OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1637,7 +1637,7 @@ void EnOssan_DrawStickDirectionPrompts(PlayState* play, EnOssan* this) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1720,7 +1720,7 @@ void EnOssan_CuriosityShopMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnOssan_CuriosityShopMan_OverrideLimbDraw, EnOssan_CuriosityShopMan_PostLimbDraw, @@ -1738,7 +1738,7 @@ void EnOssan_PartTimer_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnOssan_PartTimer_OverrideLimbDraw, EnOssan_PartTimer_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index aefebdfc4..1e1a36d74 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -1032,8 +1032,8 @@ void EnOt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 25); - POLY_XLU_DISP = func_8012C2B4(POLY_XLU_DISP); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); + POLY_XLU_DISP = Gfx_SetupDL71(POLY_XLU_DISP); CLOSE_DISPS(play->state.gfxCtx); @@ -1045,7 +1045,7 @@ void EnOt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - gfx = func_8012C7FC(POLY_XLU_DISP); + gfx = Gfx_SetupDL65_NoCD(POLY_XLU_DISP); gDPSetDither(&gfx[0], G_CD_NOISE); gDPSetCombineLERP(&gfx[1], 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, @@ -1140,7 +1140,7 @@ void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2) { OPEN_DISPS(play->state.gfxCtx); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < arg2; i++, arg1++) { if (arg1->unk_00) { diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index f71d227f6..4ff55d7a0 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -1151,7 +1151,7 @@ void EnOwl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex])); @@ -1172,7 +1172,7 @@ void func_8095D074(Actor* thisx, PlayState* play) { if (this->unk_3DC >= 0x20) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); @@ -1180,7 +1180,7 @@ void func_8095D074(Actor* thisx, PlayState* play) { } else { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_XLU_SURF2); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)(this->unk_3DC * 8)); diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c index b4e7c29e3..b78c9a314 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -556,12 +556,14 @@ void EnPamera_Draw(Actor* thisx, PlayState* play) { EnPamera* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80BDA604[this->unk_312])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(D_80BDA610[this->unk_314])); gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(D_80BDA5FC[this->unk_310])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPamera_OverrideLimbDraw, EnPamera_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index 850442bad..0caeb9305 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -1424,7 +1424,7 @@ void EnPametfrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s void EnPametfrog_Draw(Actor* thisx, PlayState* play) { EnPametfrog* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateYS(this->spinYaw, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnPametfrog_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.c b/src/overlays/actors/ovl_En_Paper/z_en_paper.c index 7659b524b..b2b3b5669 100644 --- a/src/overlays/actors/ovl_En_Paper/z_en_paper.c +++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.c @@ -213,7 +213,7 @@ void EnPaper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, SHADE, 0, 0, 0, SHADE, PRIMITIVE, 0, COMBINED, 0, 0, 0, 0, COMBINED); diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.c b/src/overlays/actors/ovl_En_Part/z_en_part.c index 2a12b9af8..ac073358f 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.c +++ b/src/overlays/actors/ovl_En_Part/z_en_part.c @@ -125,7 +125,7 @@ void EnPart_Draw(Actor* thisx, PlayState* play) { if (this->actor.params > ENPART_TYPE_0) { Matrix_RotateZF(this->zRot, MTXMODE_APPLY); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); if (this->actor.params == ENPART_TYPE_15) { gSPSegment(POLY_OPA_DISP++, 0x0C, gEmptyDL); diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index d45cacbae..045da7fa1 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -926,7 +926,7 @@ void EnPeehat_Draw(Actor* thisx, PlayState* play) { Vec3f sp40; s32 i; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnPeehat_OverrideLimbDraw, (this->actor.params == 0) ? EnPeehat_PostLimbDraw : NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index f00d64fca..99e301250 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -2181,7 +2181,7 @@ void EnPm_Draw(Actor* thisx, PlayState* play) { s32 pad; if (this->unk_258 != 0) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c index beffe3bb8..652c19dc7 100644 --- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c +++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c @@ -316,7 +316,7 @@ void EnPoFusen_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { void EnPoFusen_Draw(Actor* thisx, PlayState* play) { EnPoFusen* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->anime.skeleton, this->anime.jointTable, this->anime.dListCount, EnPoFusen_OverrideLimbDraw, EnPoFusen_PostLimbDraw, EnPoFusen_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c index 3516364ba..56d0f5326 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c @@ -1205,8 +1205,8 @@ void EnPoSisters_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); EnPoSisters_UpdateColors(this); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->color.a == 255) || (this->color.a == 0)) { gDPSetEnvColor(POLY_OPA_DISP++, this->color.r, this->color.g, this->color.b, this->color.a); diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c index c8da2f1ee..4669b1916 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -926,7 +926,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { if ((this->unk_197 == 255) || (this->unk_197 == 0)) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], this->unk_194, this->unk_195, this->unk_196, this->unk_197); gSPSegment(&gfx[2], 0x08, D_801AEFA0); @@ -937,7 +937,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { } else { gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], 255, 255, 255, this->unk_197); gSPSegment(&gfx[2], 0x08, D_801AEF88); @@ -945,7 +945,7 @@ void EnPoh_Draw(Actor* thisx, PlayState* play) { EnPoh_OverrideLimbDraw, EnPoh_PostLimbDraw, &this->actor, &gfx[3]); gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); } gDPPipeSync(&gfx[0]); @@ -986,7 +986,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { if (this->actionFunc == func_80B2DD2C) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gDPSetEnvColor(&gfx[1], this->unk_198, this->unk_199, this->unk_19A, 255); func_80B2C910(&sp7C, play); @@ -998,7 +998,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { POLY_OPA_DISP = &gfx[4]; } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment( POLY_XLU_DISP++, 0x08, diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index 5d1d6935e..ef15618c9 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -1573,8 +1573,8 @@ void EnPp_Draw(Actor* thisx, PlayState* play) { f32 scale; f32 alpha; - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPp_OverrideLimbDraw, EnPp_PostLimbDraw, &this->actor); @@ -1611,7 +1611,7 @@ void EnPp_Draw(Actor* thisx, PlayState* play) { if ((this->action != EN_PP_ACTION_MASK_DETACH) && (this->action < EN_PP_ACTION_DEAD)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 255); Math_Vec3f_Copy(&pos, &this->actor.world.pos); diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.c b/src/overlays/actors/ovl_En_Pr/z_en_pr.c index ab47e693f..30fd0ee15 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -595,8 +595,8 @@ void EnPr_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->unk_2D2 == 0) { gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c index 1c76d5985..7fe6e3d26 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -741,7 +741,7 @@ void EnPr2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_1F4 == 255) { gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.c b/src/overlays/actors/ovl_En_Prz/z_en_prz.c index e34ffe1f6..d71de14f7 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -506,7 +506,7 @@ void EnPrz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_1EC == 255) { gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index cef354c70..34ce6bafb 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -436,7 +436,7 @@ void EnPst_Draw(Actor* thisx, PlayState* play) { EnPst* this = THIS; if (this->scheduleResult != POSTBOX_SCH_NONE) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnPst_OverrideLimbDraw, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index a8e222bec..80986adf4 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -725,7 +725,7 @@ void EnRacedog_DrawSelectionArrow(EnRacedog* this, PlayState* play) { if (shouldDrawSelectionArrow) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); EnRacedog_UpdateSelectionArrow(this); Matrix_SetTranslateRotateYXZ(this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, &rotation); @@ -766,7 +766,7 @@ void EnRacedog_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index 6a3f1af5a..0c344e75f 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -873,8 +873,8 @@ void EnRaf_TransformLimbDraw(PlayState* play2, s32 limbIndex, Actor* thisx) { void EnRaf_Draw(Actor* thisx, PlayState* play) { EnRaf* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, EnRaf_TransformLimbDraw, &this->dyna.actor); @@ -948,7 +948,7 @@ void EnRaf_DrawEffects(EnRaf* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { if (effect->isEnabled) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c index 10d654cc7..a280e9bfa 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c @@ -1143,7 +1143,7 @@ void EnRailSkb_Draw(Actor* thisx, PlayState* play) { EnRailSkb* this = THIS; this->limbCount = 0; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnRailSkb_OverrideLimbDraw, EnRailSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index 853dbfd61..893062fbd 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -1076,7 +1076,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { this->limbIndex = 0; if (this->actor.shape.shadowAlpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); @@ -1085,7 +1085,7 @@ void EnRailgibud_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnRailgibud_OverrideLimbDraw, EnRailgibud_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 8badfe741..e145291f6 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -961,8 +961,8 @@ void EnRat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot void EnRat_Draw(Actor* thisx, PlayState* play) { EnRat* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C974(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL60_XluNoCD(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnRat_OverrideLimbDraw, EnRat_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index b8e8e4139..01b9cdd6d 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -1338,7 +1338,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { this->limbIndex = 0; if (this->alpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->alpha); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); @@ -1349,7 +1349,7 @@ void EnRd_Draw(Actor* thisx, PlayState* play) { func_800BC620(&pos, &sScale, 255, play); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); diff --git a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c index 64313c4be..3632efa2a 100644 --- a/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c +++ b/src/overlays/actors/ovl_En_Recepgirl/z_en_recepgirl.c @@ -205,7 +205,7 @@ void EnRecepgirl_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, sEyeTextures[this->eyeTexIndex]); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c index 0acd6fbf9..a3a026f2b 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -164,12 +164,12 @@ void func_80BF3920(EnRgStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 32; i++, ptr++) { if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) { if (!phi_fp) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); phi_fp = true; } @@ -804,7 +804,7 @@ void EnRg_Update(Actor* thisx, PlayState* play) { void func_80BF547C(EnRg* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); @@ -856,7 +856,7 @@ void EnRg_Draw(Actor* thisx, PlayState* play) { if (!(this->unk_310 & 0x10)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BF59F8[this->unk_31E])); diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c index 85086d228..cb16e5f39 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -885,7 +885,7 @@ void EnRr_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x0C, mtx); gSPSegment(POLY_OPA_DISP++, 0x08, diff --git a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c index 4f6dd1dc1..0d9ada5e0 100644 --- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c +++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c @@ -86,9 +86,11 @@ void EnRsn_Draw(Actor* thisx, PlayState* play) { EnRsn* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBombShopkeeperEyeTex)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnRsn_OverrideLimbDraw, EnRsn_PostLimbDraw, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.c b/src/overlays/actors/ovl_En_Ru/z_en_ru.c index 527d41b99..b67ca2141 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -320,7 +320,7 @@ void EnRu_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index e270f1515..d95337728 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -668,7 +668,7 @@ void EnRuppecrow_Update(Actor* thisx, PlayState* play) { void EnRuppecrow_Draw(Actor* thisx, PlayState* play) { EnRuppecrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index a223fe900..e7eaaed99 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -686,7 +686,7 @@ void EnRz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (EN_RZ_GET_SISTER(&this->actor) == EN_RZ_JUDO) { AnimatedMat_DrawStepOpa(play, Lib_SegmentedToVirtual(&object_rz_Matanimheader_00D768), 0); diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 14904e5b7..27c3279e6 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -1435,9 +1435,10 @@ void EnSGoro_DrawUnrolled(EnSGoro* this, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x8, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gDPPipeSync(POLY_OPA_DISP++); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, @@ -1449,7 +1450,8 @@ void EnSGoro_DrawUnrolled(EnSGoro* this, PlayState* play) { void EnSGoro_DrawRolledUp(EnSGoro* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + this->actor.shape.yOffset, this->actor.world.pos.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c index be449e0a3..c135f63da 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c @@ -181,7 +181,7 @@ void EnScRuppe_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sRupeeInfo[this->ruppeIndex].tex)); diff --git a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c index d2a9d525e..4ef4fdd46 100644 --- a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c +++ b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c @@ -90,7 +90,7 @@ void EnScopecoin_Draw(Actor* thisx, PlayState* play) { EnScopecoin* this = THIS; GraphicsContext* gfxCtx = play->state.gfxCtx; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); OPEN_DISPS(gfxCtx); diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index 321c790d1..525696ead 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -354,7 +354,7 @@ void EnScopecrow_Update(Actor* thisx, PlayState* play) { void EnScopecrow_Draw(Actor* thisx, PlayState* play) { EnScopecrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index 07e2646a0..46add654a 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -823,7 +823,7 @@ void EnScopenuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) void EnScopenuts_Draw(Actor* thisx, PlayState* play) { EnScopenuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnScopenuts_OverrideLimbDraw, EnScopenuts_PostLimbDraw, EnScopenuts_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index 8835d92da..3390f4f0c 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -323,7 +323,7 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x00, 0, 0, 0, (BREG(52) + 50)); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c index 538f7d304..1e1f19d70 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -177,12 +177,12 @@ void EnSekihi_Draw(Actor* thisx, PlayState* play) { if (this->xluDList != NULL) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, this->xluDList); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->opaDList); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index 871bb85a8..5dcdeaa8e 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -1138,7 +1138,7 @@ void EnSellnuts_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) void EnSellnuts_Draw(Actor* thisx, PlayState* play) { EnSellnuts* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSellnuts_OverrideLimbDraw, EnSellnuts_PostLimbDraw, EnSellnuts_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c index bdd5b787f..643509515 100644 --- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c +++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c @@ -436,7 +436,7 @@ void EnShn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { void EnShn_Draw(Actor* thisx, PlayState* play) { EnShn* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnShn_OverrideLimbDraw, EnShn_PostLimbDraw, EnShn_TransformLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 735111a2b..cf829bda0 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -1131,7 +1131,7 @@ void EnSkb_Draw(Actor* thisx, PlayState* play) { EnSkb* this = THIS; this->limbCount = 0; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSkb_OverrideLimbDraw, EnSkb_PostLimbDraw, &this->actor); if (this->drawDmgEffTimer > 0) { diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.c b/src/overlays/actors/ovl_En_Slime/z_en_slime.c index 3aab4b3ce..8d7a0e071 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -1168,8 +1168,8 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); if (this->iceBlockTimer != ICE_BLOCK_UNUSED) { gSPSegment(POLY_XLU_DISP++, 10, D_801AEFA0); @@ -1229,7 +1229,7 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { if ((this->actor.params != EN_SLIME_TYPE_BLUE) && (this->actor.scale.x > 0.0f)) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (2000.0f * this->actor.scale.y), this->actor.world.pos.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index baf3ccdfa..5a65c1094 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -1182,7 +1182,7 @@ void EnSnowman_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* void EnSnowman_Draw(Actor* thisx, PlayState* play) { EnSnowman* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnSnowman_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), @@ -1192,7 +1192,7 @@ void EnSnowman_Draw(Actor* thisx, PlayState* play) { void EnSnowman_DrawSnowPile(Actor* thisx, PlayState* play) { EnSnowman* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->snowPileSkelAnime.skeleton, this->snowPileSkelAnime.jointTable, this->snowPileSkelAnime.dListCount, NULL, NULL, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index a23600fb9..8d8991fba 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -1501,7 +1501,7 @@ void EnSob1_DrawCursor(PlayState* play, EnSob1* this, f32 x, f32 y, f32 z, u8 dr OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1563,7 +1563,7 @@ void EnSob1_DrawStickDirectionPrompt(PlayState* play, EnSob1* this) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1647,7 +1647,7 @@ void EnSob1_ZoraShopkeeper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x0C, EnSob1_EndDList(play->state.gfxCtx)); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sZoraShopkeeperEyeTextures[this->eyeTexIndex])); @@ -1672,7 +1672,7 @@ void EnSob1_GoronShopkeeper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sGoronShopkeeperEyeTextures[this->eyeTexIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, NULL, &this->actor); @@ -1695,7 +1695,7 @@ void EnSob1_BombShopkeeper_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gBombShopkeeperEyeTex)); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSob1_BombShopkeeper_OverrideLimbDraw, EnSob1_BombShopkeeper_PostLimbDraw, &this->actor); @@ -1707,7 +1707,7 @@ void EnSob1_BombShopkeeper_Draw(Actor* thisx, PlayState* play) { EnSob1_DrawCursor(play, this, this->cursorPos.x, this->cursorPos.y, this->cursorPos.z, this->drawCursor); EnSob1_DrawStickDirectionPrompt(play, this); frames = play->gameplayFrames; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 60846fda8..358a8eeec 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -926,7 +926,7 @@ void EnSsh_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80976178[this->blinkState])); diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index 994a455a6..e8b67451c 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -246,7 +246,7 @@ void func_808A54B0(EnSt* this, PlayState* play) { gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->unk_2C0].segment); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); Matrix_Scale(0.06f, 0.12f, 0.06f, MTXMODE_APPLY); @@ -924,11 +924,11 @@ void func_808A7478(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (func_808A6A3C(this)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSt_OverrideLimbDraw, NULL, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSt_OverrideLimbDraw, NULL, &this->actor, POLY_OPA_DISP); } diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 215845341..3908e863f 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -758,7 +758,7 @@ void EnSth_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, sShirtColors[1].r, sShirtColors[1].g, sShirtColors[1].b, 255)); diff --git a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c index ba6d72cb6..723f7634f 100644 --- a/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c +++ b/src/overlays/actors/ovl_En_Sth2/z_en_sth2.c @@ -114,7 +114,7 @@ void EnSth2_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, sEnvColors[1].r, sEnvColors[1].g, sEnvColors[1].b, 255)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 90, 110, 130, 255)); diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index 1692e1461..b89976faf 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -483,7 +483,7 @@ void EnStoneheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec Gfx* gfx; if ((limbIndex == SOLDIER_LIMB_LEFT_HAND) && (this->bottleDisplay != EN_STONE_BOTTLE_NONE)) { - gfx = func_8012C2B4(*gfxp); + gfx = Gfx_SetupDL71(*gfxp); sLeftHandPos.x = 320.0f; sLeftHandPos.y = 210.0f; @@ -520,13 +520,13 @@ void EnStoneheishi_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnStoneheishi_OverrideLimbDraw, EnStoneheishi_PostLimbDraw, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); POLY_OPA_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c index dd82ef682..d90752d9b 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c @@ -579,7 +579,7 @@ void EnStopheishi_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 void EnStopheishi_Draw(Actor* thisx, PlayState* play) { EnStopheishi* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnStopheishi_OverrideLimbDraw, EnStopheishi_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.c b/src/overlays/actors/ovl_En_Stream/z_en_stream.c index 912a700f8..3bc1f55fd 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.c +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.c @@ -136,7 +136,8 @@ void EnStream_Draw(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gfx = POLY_XLU_DISP; gSPMatrix(&gfx[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); multipliedFrames = frames * 20; @@ -145,5 +146,6 @@ void EnStream_Draw(Actor* thisx, PlayState* play) { -multipliedFrames, 64, 64)); gSPDisplayList(&gfx[2], gWaterVortexDL); POLY_XLU_DISP = &gfx[3]; + CLOSE_DISPS(play->state.gfxCtx); } 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 196b29263..877a400d5 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -1543,9 +1543,12 @@ void EnSuttari_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MtxFToYXZRot(curState, &bombBag->shape.rot, false); } } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gBombShopBagDL); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1568,7 +1571,7 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) { if (this->flags1 & 0x80) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 255, 255, 255, 0)); gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_EnvColor(play->state.gfxCtx, 55, 55, 255, 0)); gDPPipeSync(POLY_OPA_DISP++); @@ -1576,7 +1579,7 @@ void EnSuttari_Draw(Actor* thisx, PlayState* play) { this->skelAnime.dListCount, EnSuttari_OverrideLimbDraw, EnSuttari_PostLimbDraw, EnSuttari_TransformLimbDraw, &this->actor); if (this->flags1 & 0x80) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); pos = this->actor.world.pos; scale.x = 0.2f; scale.y = 0.2f; diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index 11e84301b..3f32564bb 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -1296,7 +1296,7 @@ void EnSw_Draw(Actor* thisx, PlayState* play) { if (ENSW_GET_3(&this->actor)) { func_800B8050(&this->actor, play, MTXMODE_NEW); } - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateXS(-0x3C72, MTXMODE_APPLY); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSw_OverrideLimbDraw, NULL, &this->actor); diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index abc773637..ae4716172 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -320,7 +320,7 @@ void EnSyatekiCrow_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec void EnSyatekiCrow_Draw(Actor* thisx, PlayState* play) { EnSyatekiCrow* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSyatekiCrow_OverrideLimbDraw, EnSyatekiCrow_PostLimbDraw, &this->actor); } diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index 20abd71e4..6fefd906a 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -476,7 +476,7 @@ void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(flowerPos.x, flowerPos.y, flowerPos.z, MTXMODE_NEW); Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); 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 01c8e96a5..2a1ea5357 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 @@ -1502,7 +1502,7 @@ void EnSyatekiMan_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 401bc34ff..324307d8a 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -489,7 +489,7 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2A6 == 1) { gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); } else { @@ -498,7 +498,7 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSyatekiOkuta_OverrideLimbDraw, NULL, &this->actor); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->actionFunc == func_80A365EC) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z + 20.0f, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index 8a3a65ed2..f582063b7 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -505,7 +505,7 @@ void EnSyatekiWf_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnSyatekiWf_OverrideLimbDraw, EnSyatekiWf_PostLimbDraw, &this->actor); diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c index dfa1e0bb7..1f97e5c57 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -617,7 +617,7 @@ void EnTab_Draw(Actor* thisx, PlayState* play) { if (this->unk_1D8 != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80BE1B24[this->unk_31E])); diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 11d984fe7..d64053b5a 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -1190,7 +1190,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) { this->limbIndex = 0; if (this->actor.shape.shadowAlpha == 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); @@ -1199,7 +1199,7 @@ void EnTalkGibud_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnTalkGibud_OverrideLimbDraw, EnTalkGibud_PostLimbDraw, &this->actor, POLY_OPA_DISP); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->actor.shape.shadowAlpha); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index fec6a2d3b..4c2d3eaaf 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -369,7 +369,7 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < this->actor.params; i++, ptr++) { if (ptr->unk_24 == 1) { diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c index 2d1c29970..dd4f389a3 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -592,7 +592,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gWartBubbleMaterialDL); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 150); @@ -637,7 +637,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) { } } - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, 150); gSPDisplayList(POLY_XLU_DISP++, gWartShadowMaterialDL); @@ -654,7 +654,7 @@ void EnTanron2_Draw(Actor* thisx, PlayState* play2) { tanron2 = tanron2->next; } - func_8012C974(play->state.gfxCtx); + Gfx_SetupDL60_XluNoCD(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255); diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c index c3d62e166..483edd145 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -452,7 +452,7 @@ void EnTanron3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if ((this->fogTimer % 2) != 0) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 255, 900, 1099); } diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c index 24d036bee..18e24c5e7 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -483,7 +483,7 @@ void EnTanron5_Draw(Actor* thisx, PlayState* play) { if ((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, this->unk_148); @@ -506,14 +506,14 @@ void func_80BE5C10(Actor* thisx, PlayState* play) { if (((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) && phi_v0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_1A0 == 0) { texture = gDropArrows1Tex; } else { texture = gDropMagicLargeTex; } - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(texture)); diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.c b/src/overlays/actors/ovl_En_Test/z_en_test.c index d98790c6f..1372d8791 100644 --- a/src/overlays/actors/ovl_En_Test/z_en_test.c +++ b/src/overlays/actors/ovl_En_Test/z_en_test.c @@ -133,7 +133,7 @@ void func_80863048(PlayState* play, EnTestStruct* arg1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); @@ -267,7 +267,7 @@ void EnTest_Draw(Actor* thisx, PlayState* play) { mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); if (mtx != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_8018450C(play, &this->skeletonInfo, mtx, EnTest_OverrideKeyframeDraw, NULL, thisx); func_80863048(play, this->unk_20C); } diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.c b/src/overlays/actors/ovl_En_Test2/z_en_test2.c index fd1710264..8e5a39bf8 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -125,7 +125,7 @@ void EnTest2_Draw(Actor* thisx, PlayState* play) { if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (dList != NULL) { diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index 70ab37232..b56112421 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -240,7 +240,7 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW); Matrix_Scale(ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, MTXMODE_APPLY); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00])); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -255,7 +255,7 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 210, 210, 230, 128); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); @@ -282,7 +282,7 @@ void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { OPEN_DISPS(play->state.gfxCtx); if (gfxHead != NULL) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetTileSize(gfx++, 1, sp70->h.x1 & 0xFFFF, sp70->h.y1 & 0xFFFF, (sp70->h.x1 + 60) & 0xFFFF, (sp70->h.y1 + 60) & 0xFFFF); @@ -307,7 +307,7 @@ void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 220, 220, 230, 192); gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 0); @@ -1295,7 +1295,7 @@ void func_80A939E8(EnTest6* this, PlayState* play2) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 128, 128, 128, this->unk_282 >> 1); gDPSetEnvColor(POLY_XLU_DISP++, 230, 230, 180, this->unk_282); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZS(this->unk_278 + (i << 2), MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c index 9c672ed51..fa378ec68 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -330,7 +330,7 @@ void func_80AF14FC(PlayState* play2, EnTest7Struct2* arg1) { OPEN_DISPS(play->state.gfxCtx); - func_8012C1C0(play->state.gfxCtx); + Gfx_SetupDL26_Opa(play->state.gfxCtx); Matrix_Push(); diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/src/overlays/actors/ovl_En_Tg/z_en_tg.c index ed048288e..0672bd4bf 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -190,7 +190,8 @@ void EnTg_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_EnvColor(play->state.gfxCtx, 0, 50, 160, 0)); @@ -260,7 +261,7 @@ void EnTg_DrawHearts(PlayState* play, EnTgHeartEffect* effect, s32 numEffects) { OPEN_DISPS(play->state.gfxCtx); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); - POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < numEffects; i++, effect++) { if (effect->isEnabled == true) { diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index a26095bc7..2bef1cda2 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -1128,7 +1128,7 @@ void func_80C13354(EnThiefbird* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); gSPDisplayList(&gfx[1], gTakkuriFeatherMaterialDL); gfx = &gfx[2]; @@ -1154,7 +1154,7 @@ void func_80C13354(EnThiefbird* this, PlayState* play2) { void EnThiefbird_Draw(Actor* thisx, PlayState* play) { EnThiefbird* this = THIS; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnThiefbird_OverrideLimbDraw, EnThiefbird_PostLimbDraw, &this->actor); if (this->actor.colorFilterTimer > 0) { diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c index 3d5c7a741..cfae13191 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -1161,9 +1161,10 @@ void EnTite_Draw(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); if (this->actor.params == ENTITE_MINUS_2) { gSPSegment(&gfx[1], 0x08, D_80896B24[0][0]); diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 01fa7c7cd..fb5f72c76 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -1382,7 +1382,7 @@ void EnTk_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 25); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AEFA90[this->unk_2C2])); diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 6c0733979..6eff18d29 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -728,7 +728,7 @@ void EnToto_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->blinkInfo.eyeTexIndex])); Scene_SetRenderModeXlu(play, 0, 1); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index e4a4a4ab8..42be7784c 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -1571,7 +1571,7 @@ void EnTrt_DrawCursor(PlayState* play, EnTrt* this, f32 x, f32 y, f32 z, u8 draw OPEN_DISPS(play->state.gfxCtx); if (drawCursor != 0) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, this->cursorColor.r, this->cursorColor.g, this->cursorColor.b, this->cursorColor.a); gDPLoadTextureBlock_4b(OVERLAY_DISP++, gSelectionCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, @@ -1632,7 +1632,7 @@ void EnTrt_DrawStickDirectionPrompt(PlayState* play, EnTrt* this) { OPEN_DISPS(play->state.gfxCtx); if (drawStickRightPrompt || drawStickLeftPrompt) { - func_8012C654(play->state.gfxCtx); + Gfx_SetupDL39_Overlay(play->state.gfxCtx); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPLoadTextureBlock(OVERLAY_DISP++, gArrowCursorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, @@ -1793,7 +1793,7 @@ void EnTrt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index 67f52e064..951724668 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -941,7 +941,7 @@ void func_80AD56E8(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8])); diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index 2ba130869..a3c267846 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -179,7 +179,7 @@ void func_80A85788(EnTruUnkStruct* arg0, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { f32 alpha; @@ -239,7 +239,7 @@ void func_80A85BCC(EnTruUnkStruct* arg0, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { f32 alpha; @@ -295,7 +295,7 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 30; i++, arg0++) { f32 alpha; @@ -305,7 +305,7 @@ void func_80A85F84(EnTruUnkStruct* arg0, PlayState* play) { } if (!flag) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPDisplayList(POLY_XLU_DISP++, gKoumeDustMaterialDL); flag = true; } @@ -494,7 +494,7 @@ s32 func_80A86B0C(EnTru* this, PlayState* play) { s32 func_80A86BAC(EnTru* this, PlayState* play) { if (this->unk_34E & 0x400) { Matrix_Push(); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -524,7 +524,7 @@ s32 func_80A86BAC(EnTru* this, PlayState* play) { if (this->unk_34E & 0x800) { Matrix_Push(); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -1265,7 +1265,7 @@ void EnTru_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index 09ec80172..2c8e4ed8a 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -527,7 +527,7 @@ void EnTruMt_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro } if (limbIndex == KOUME_LIMB_BROOM) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); @@ -583,7 +583,7 @@ void EnTruMt_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(eyeTextures[this->eyeTexIndex])); diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c index 22ce0600c..894c07002 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -627,7 +627,7 @@ void EnTsn_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AE11C8[this->unk_22E])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AE11C8[this->unk_22E])); diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c index 29778ec71..2f68391b1 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -514,7 +514,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 25]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_25]); POLY_OPA_DISP = &gfx[1]; @@ -524,7 +524,7 @@ void EnVm_Draw(Actor* thisx, PlayState* play) { if (this->unk_210 == 2) { gfx = POLY_XLU_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 60]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_60]); gDPSetColorDither(&gfx[1], G_CD_DISABLE); Matrix_Translate(this->unk_234.x, this->unk_234.y + 10.0f, this->unk_234.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c index a4b3f7cc6..f4f89d79e 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -668,7 +668,7 @@ void EnWallmas_DrawShadow(EnWallmas* this, PlayState* play) { gfx = POLY_OPA_DISP; - gSPDisplayList(&gfx[0], &sSetupDL[6 * 44]); + gSPDisplayList(&gfx[0], gSetupDLs[SETUPDL_44]); gDPSetPrimColor(&gfx[1], 0, 0, 0, 0, 0, 255); func_800C0094(this->actor.floorPoly, this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, &mf); @@ -742,7 +742,7 @@ void EnWallmas_Draw(Actor* thisx, PlayState* play) { EnWallmas* this = THIS; if (this->actionFunc != EnWallmas_WaitToDrop) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnWallmas_OverrideLimbDraw, EnWallmas_PostLimbDraw, &this->actor); Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index 6d5522e8a..a61e7e8df 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -262,7 +262,7 @@ void EnWarptag_Update(Actor* thisx, PlayState* play) { void EnWarpTag_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWarpTagRainbowTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c index 159b7444e..b14f82424 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c @@ -289,12 +289,12 @@ void EnWaterEffect_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) { if ((ptr->unk_00 == 1) || (ptr->unk_00 == 2)) { if (!phi_s4) { - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gSPDisplayList(POLY_XLU_DISP++, object_water_effect_DL_004260); @@ -326,7 +326,7 @@ void EnWaterEffect_Draw(Actor* thisx, PlayState* play2) { for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) { if (ptr->unk_00 == 3) { if (!phi_s4) { - func_8012C448(gfxCtx); + Gfx_SetupDL44_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0); @@ -524,8 +524,8 @@ void func_80A5A184(Actor* thisx, PlayState* play2) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_144); i++, ptr++) { if (ptr->unk_00 == 4) { @@ -623,7 +623,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 165, 235, 255, 128); @@ -634,7 +634,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { if ((this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) || (this->actor.params == ENWATEREFFECT_TYPE_GYORG_PRIMARY_SPRAY)) { if (this->unk_E2C > 1.0f) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000DE0)); Matrix_Scale(this->unk_DC8[1].y, this->unk_DC8[1].z, this->unk_DC8[1].y, MTXMODE_APPLY); @@ -646,7 +646,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { Matrix_Pop(); if (this->unk_E30 > 1.0f) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E0C)); Matrix_Scale(this->unk_DC8[2].y, this->unk_DC8[2].z, this->unk_DC8[2].y, MTXMODE_APPLY); @@ -661,7 +661,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { } if ((this->unk_E34 > 1.0f) && (this->actor.params != ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E40)); Matrix_Scale(this->unk_DC8[3].y, this->unk_DC8[3].z, this->unk_DC8[3].y, MTXMODE_APPLY); @@ -674,7 +674,7 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { if ((this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) || (this->actor.params == ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE)) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_water_effect_Matanimheader_000E58)); Matrix_Scale(this->unk_DC8[4].y, this->unk_DC8[4].z, this->unk_DC8[4].y, MTXMODE_APPLY); @@ -684,12 +684,12 @@ void func_80A5A6B8(Actor* thisx, PlayState* play2) { } if (this->actor.params == ENWATEREFFECT_TYPE_GYORG_RIPPLES) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_144) / 2; i++, ptr++) { if (ptr->unk_00 == 3) { if (!phi_s4) { - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust1Tex)); gDPSetEnvColor(POLY_XLU_DISP++, 250, 250, 255, 0); diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c index ed3ec36f9..b05bc4869 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -1575,7 +1575,7 @@ void EnWf_Draw(Actor* thisx, PlayState* play) { if (this->actionFunc != func_80990F50) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actor.params == 0) { gSPSegment(POLY_OPA_DISP++, 0x08, sNormalEyeTextures[this->eyeIndex]); diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 209218163..b64af5a88 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1451,8 +1451,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->action == EN_WIZ_ACTION_BURST_INTO_FLAMES) || (this->alpha != 255)) { Scene_SetRenderModeXlu(play, 1, 2); @@ -1502,8 +1502,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { } for (i = 0; i < platformCount; i++) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if ((this->ghostPos[i].x != 0.0f) && (this->ghostPos[i].z != 0.0f)) { Matrix_Translate(this->ghostPos[i].x, this->ghostPos[i].y + 10.0f, this->ghostPos[i].z, MTXMODE_NEW); @@ -1529,8 +1529,8 @@ void EnWiz_Draw(Actor* thisx, PlayState* play) { Matrix_Pop(); } - func_8012C2DC(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); // Draw the light emanating from the Wizrobe's platform if (this->fightState == EN_WIZ_FIGHT_STATE_FIRST_PHASE) { diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c index 4a3689005..02955f0d0 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c @@ -96,8 +96,8 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) { s32 pad; EnWizBrock* this = THIS; - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index bad93b685..4a7f6cd20 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -658,8 +658,8 @@ void EnWizFire_DrawIcePool(EnWizFire* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if ((this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->action == EN_WIZ_FIRE_ACTION_POOL)) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, MTXMODE_NEW); Matrix_Scale(this->poolScale, this->poolScale, this->poolScale, MTXMODE_APPLY); @@ -691,8 +691,8 @@ void EnWizFire_DrawFirePoolAndFlame(EnWizFire* this, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); if ((this->type == EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) && (this->action == EN_WIZ_FIRE_ACTION_POOL)) { - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Push(); Matrix_Translate(this->actor.world.pos.x, this->actor.floorHeight, this->actor.world.pos.z, MTXMODE_NEW); @@ -754,8 +754,8 @@ void EnWizFire_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Push(); for (i = ARRAY_COUNT(this->magicProjectilePos) - 1; i >= this->lowestUsedIndex; i--) { @@ -875,8 +875,8 @@ void EnWizFire_DrawEffects(EnWizFire* this, PlayState* play) { OPEN_DISPS(gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); materialFlag = false; for (i = 0; i < ARRAY_COUNT(this->effects); i++, effect++) { diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index 3c0357999..874e0a63e 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -486,10 +486,10 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) { red = green = blue = 255; } - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); if ((thisx->params == WOOD_LEAF_GREEN) || (thisx->params == WOOD_LEAF_YELLOW)) { - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, red, green, blue, 127); @@ -501,7 +501,7 @@ void EnWood02_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, D_808C4D70[this->drawType & 0xF]); } else { - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, D_808C4D54[this->drawType & 0xF]); diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index c5224f8e8..4bf82f55a 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -458,10 +458,10 @@ void EnYb_Draw(Actor* thisx, PlayState* play) { if (this->alpha != 0) { if (this->alpha < 255) { if (this->alpha > 128) { - func_8012C2B4(POLY_XLU_DISP++); + Gfx_SetupDL71(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 2, 2); } else { - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); Scene_SetRenderModeXlu(play, 1, 2); } gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); @@ -473,7 +473,7 @@ void EnYb_Draw(Actor* thisx, PlayState* play) { this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawXlu, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 0, 1); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawOpa, &this->actor); diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c index 7a160e368..a732f0124 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -347,7 +347,8 @@ void EnZo_Draw(Actor* thisx, PlayState* play) { TexturePtr eyeTextures[] = { gZoraEyeOpenTex, gZoraEyeHalfTex, gZoraEyeClosedTex }; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); @@ -370,5 +371,6 @@ void EnZo_Draw(Actor* thisx, PlayState* play) { } SubS_DrawShadowTex(&this->actor, &play->state, shadowTex); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c index 998c2b186..cdf6b1766 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -759,7 +759,7 @@ void EnZob_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2F4 & 0x20) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->unk_312, 1000); diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index 826664a9a..57c85a664 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -628,7 +628,7 @@ void EnZod_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->stateFlags & TIJO_STATE_2) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->fogNear, 1000); diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index ccbb1f752..979187532 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -1049,11 +1049,11 @@ void EnZog_Draw(Actor* thisx, PlayState* play) { if (this->unk_30A & 8) { if (this->unk_322 > 128) { gfx = POLY_XLU_DISP++; - func_8012C2B4(gfx); + Gfx_SetupDL71(gfx); Scene_SetRenderModeXlu(play, 2, 2); } else { gfx = POLY_XLU_DISP++; - func_8012C304(gfx); + Gfx_SetupDL72(gfx); Scene_SetRenderModeXlu(play, 1, 2); } @@ -1068,7 +1068,7 @@ void EnZog_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, func_80B95598, &this->actor, POLY_XLU_DISP); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Scene_SetRenderModeXlu(play, 0, 1); gfx = POLY_OPA_DISP; diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index 21201346a..0bfc986dc 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -697,8 +697,9 @@ void func_80B32F04(Actor* thisx, PlayState* play) { this->actor.scale.z * (((sp7C + 1.0f) * 0.1f) + 9.0f), MTXMODE_APPLY); OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_XLU_DISP; - gfx = func_8012C868(gfx); + gfx = Gfx_SetupDL20_NoCD(gfx); gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080); gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); @@ -725,13 +726,13 @@ void func_80B331C8(Actor* thisx, PlayState* play) { Matrix_Scale(this->unk_1E0, this->unk_1E0, this->unk_1E0, MTXMODE_APPLY); if (this->unk_1ED >= 254) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); gSPDisplayList(POLY_OPA_DISP++, object_zoraegg_DL_005250); } else { - func_8012C304(POLY_XLU_DISP++); + Gfx_SetupDL72(POLY_XLU_DISP++); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); @@ -862,7 +863,7 @@ void func_80B33818(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B33950[this->unk_1F2])); diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index 039c2a3e6..bd8ff3435 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -738,7 +738,7 @@ void EnZos_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2B6 & 0x40) { POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 0, 0, 0, 0, this->unk_2BC, 1000); diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index f382cdf80..2e9fe8b3f 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -1398,7 +1398,7 @@ void EnZot_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp4C[this->unk_2EC])); diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c index c6dca4bd7..fdf50a820 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -563,7 +563,7 @@ void EnZov_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); phi_a1 = 0; curFrame = this->skelAnime.curFrame; phi_v1 = this->unk_2EC; diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.c b/src/overlays/actors/ovl_En_Zow/z_en_zow.c index 446470dbe..3e9ef53f4 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -182,7 +182,7 @@ void func_80BDC830(EnZowStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); u8 flag = false; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { if (ptr->unk_00 == 1) { @@ -213,7 +213,7 @@ void func_80BDC9DC(EnZowStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); u8 flag = false; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { if (ptr->unk_00 == 3) { @@ -244,7 +244,7 @@ void func_80BDCB84(EnZowStruct* ptr, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); u8 flag = false; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { if (ptr->unk_00 == 2) { @@ -629,7 +629,7 @@ void EnZow_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (this->unk_2CE >= 255) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sp54[this->unk_2C4])); diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c index 4880a326e..61b172ea7 100644 --- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c +++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c @@ -609,7 +609,7 @@ void MirRay_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(1.0f, 1.0f, this->reflectIntensity, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c index 8f6fcbfe9..ae8c81f26 100644 --- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c +++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c @@ -361,7 +361,7 @@ void MirRay3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Scale(1.0f, 1.0f, this->unk_214, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c index c32fb582d..ca4efd4bb 100644 --- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c +++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c @@ -274,7 +274,8 @@ void ObjAqua_Draw(Actor* thisx, PlayState* play) { s32 actionFuncTemp = this->actionFunc == func_80ACBDFC; OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); framesTemp = ((play->gameplayFrames & 0x7FFFFFFF) * -0xA) & 0x1FF; if (actionFuncTemp) { framesTemp >>= 1; diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c index 93adab401..bc1d543cc 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -350,7 +350,7 @@ void func_809A5960(ObjArmos* this, PlayState* play) { (Math_CosS(this->dyna.actor.shape.rot.y) * -9.0f) + this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot); Matrix_Scale(0.014f, 0.014f, 0.014f, MTXMODE_APPLY); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); @@ -366,7 +366,7 @@ void func_809A5A3C(ObjArmos* this, PlayState* play) { if (this->dyna.actor.floorPoly != NULL) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index 7cc5dfb17..003b94932 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -939,7 +939,7 @@ void func_80938E00(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c index fb7f1466c..0a50c85c5 100644 --- a/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c +++ b/src/overlays/actors/ovl_Obj_Bell/z_obj_bell.c @@ -220,13 +220,16 @@ void func_80A359B4(Actor* thisx, PlayState* play) { Matrix_RotateXS(thisx->world.rot.x, MTXMODE_APPLY); Matrix_RotateYS(-thisx->world.rot.y, MTXMODE_APPLY); Matrix_Translate(0.0f, -2600.0f, 0.0f, MTXMODE_APPLY); + OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, object_f52_obj_DL_000698); gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_0008D0); gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_000960); gSPDisplayList(POLY_OPA_DISP++, object_f52_obj_DL_0007A8); + CLOSE_DISPS(play->state.gfxCtx); } @@ -234,20 +237,26 @@ void func_80A35B18(Actor* thisx, PlayState* play) { Matrix_Translate(thisx->world.pos.x, thisx->world.pos.y, thisx->world.pos.z, MTXMODE_NEW); Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY); Matrix_RotateYS(thisx->shape.rot.y, MTXMODE_APPLY); + OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, object_f52_obj_DL_000570); + CLOSE_DISPS(play->state.gfxCtx); } void func_80A35BD4(Actor* thisx, PlayState* play) { Matrix_Translate(thisx->world.pos.x, thisx->world.pos.y - 4.0f, thisx->world.pos.z, MTXMODE_NEW); Matrix_Scale(thisx->scale.x, thisx->scale.y, thisx->scale.z, MTXMODE_APPLY); + OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_f52_obj_DL_000840); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c index 84b2abc63..66ef9c691 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -465,7 +465,7 @@ void func_8093A418(Actor* thisx, PlayState* play) { sp28 = (2300.0f - this->actor.projectedPos.z) * 2.55f; this->actor.shape.shadowAlpha = sp28 * (32.0f / 51); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (s32)sp28); @@ -489,20 +489,20 @@ void func_8093A608(Actor* thisx, PlayState* play) { if (this->actionFunc == func_80939EF4) { if ((this->actor.projectedPos.z <= 2200.0f) || ((this->unk_203 & 1) && (this->actor.projectedPos.z < 2300.0f))) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x9B, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, object_bombiwa_DL_004560); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_004688); } else if (this->actor.projectedPos.z < 2300.0f) { sp38 = (2300.0f - this->actor.projectedPos.z) * 2.55f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -510,7 +510,7 @@ void func_8093A608(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_004560); } } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) { ptr = &this->unk_190[i]; diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index facd8de41..660d9016d 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -374,14 +374,15 @@ void ObjChan_Draw(Actor* thisx, PlayState* play) { Gfx* xlu; OPEN_DISPS(play->state.gfxCtx); + Matrix_RotateYS(this->rotation, MTXMODE_APPLY); - opa = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + opa = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&opa[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&opa[1], object_obj_chan_DL_000AF0); POLY_OPA_DISP = &opa[2]; - xlu = func_8012C2B4(POLY_XLU_DISP); + xlu = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&xlu[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&xlu[1], object_obj_chan_DL_000A10); POLY_XLU_DISP = &xlu[2]; @@ -401,10 +402,12 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) { Gfx* dl; OPEN_DISPS(play->state.gfxCtx); - dl = Gfx_CallSetupDL(POLY_OPA_DISP, 0x19); + + dl = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_25); gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(&dl[1], object_obj_chan_DL_002358); POLY_OPA_DISP = &dl[2]; + CLOSE_DISPS(play->state.gfxCtx); if (this->stateFlags & OBJCHAN_STATE_ON_FIRE) { @@ -425,7 +428,7 @@ void ObjChan_DrawFire(ObjChan* this, PlayState* play) { sObjChanFlameSize[OBJCHAN_SUBTYPE(&this->actor)].y * this->flameSize, 1.0f, MTXMODE_APPLY); Matrix_Translate(0.0f, sObjChanFlameYOffset[OBJCHAN_SUBTYPE(&this->actor)], 0.0f, MTXMODE_APPLY); - dl = func_8012C2B4(POLY_XLU_DISP); + dl = Gfx_SetupDL71(POLY_XLU_DISP); gSPMatrix(&dl[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_LOAD); gSPSegment(&dl[1], 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, -sp4C * 20, 32, 128)); gDPSetPrimColor(&dl[2], 128, 128, 255, 255, 0, 255); diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c index 79007175d..4d2bee782 100644 --- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c +++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c @@ -199,7 +199,7 @@ void ObjChikuwa_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_2A0 < this->unk_29C) { for (i = 0; i < this->unk_29C; i++) { diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c index 412bade05..1f3f7f902 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -556,7 +556,7 @@ void ObjComb_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (118.0f * this->actor.scale.y), this->actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c index 0dba9a21f..c4e61efa3 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -505,7 +505,7 @@ void func_80B13C08(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_dhouse_DL_004928); diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c index 5a9ef2d05..ee8c84877 100644 --- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c +++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c @@ -45,7 +45,8 @@ void ObjDinner_Update(Actor* thisx, PlayState* play) { void ObjDinner_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, object_obj_dinner_DL_0011E0); diff --git a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c index f3c271c69..8a11c507b 100644 --- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c +++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c @@ -321,7 +321,8 @@ void ObjDora_Draw(Actor* thisx, PlayState* play) { f32 gongForceX; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->actionFunc == ObjDora_MoveGong) { gongForceX = this->gongForce.x; diff --git a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c index 723dfcf3e..0bd55b296 100644 --- a/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c +++ b/src/overlays/actors/ovl_Obj_Entotu/z_obj_entotu.c @@ -104,7 +104,7 @@ void func_80A34A44(ObjEntotu* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_f53_obj_DL_000158); @@ -136,7 +136,7 @@ void func_80A34B28(ObjEntotu* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20)); diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index ac9184923..22a448e54 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -341,7 +341,7 @@ void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->dList); CLOSE_DISPS(play->state.gfxCtx); @@ -355,6 +355,6 @@ void ObjEtcetera_DrawIdle(Actor* thisx, PlayState* play) { void ObjEtcetera_DrawAnimated(Actor* thisx, PlayState* play) { ObjEtcetera* this = THIS; - func_8012C5B0(play->state.gfxCtx); + Gfx_SetupDL37_Opa(play->state.gfxCtx); SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, NULL, &this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c index f9f86501d..4804b8b87 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -384,7 +384,7 @@ void ObjFireshield_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 220, 0, this->unk_1A6); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0); diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c index cc818c883..844f52506 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -668,7 +668,7 @@ void ObjFlowerpot_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_flowerpot_DL_0012E0); diff --git a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c index c3d4d1398..409cbd837 100644 --- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c +++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c @@ -34,7 +34,7 @@ void ObjFunen_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_RotateYS((s16)(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - 0x8000), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c index 73aa848a2..85e628359 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -184,11 +184,13 @@ void ObjGhaka_Update(Actor* thisx, PlayState* play) { void ObjGhaka_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, object_ghaka_DL_001A20); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_ghaka_DL_001980); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c index b1924c63b..6431a558b 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -439,7 +439,7 @@ void func_809AA54C(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, gObjGrass_D_809AA9F0); @@ -484,7 +484,7 @@ void func_809AA798(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, gObjGrass_D_809AAA68); diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c index 8b851285a..40db98b1f 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -349,7 +349,7 @@ void ObjHakaisi_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->unk_194 == 0) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -429,7 +429,7 @@ void func_80B1544C(Actor* thisx, PlayState* play) { void func_80B154A0(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (OBJHAKAISI_GET_FF(thisx) == 4) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c index aef42693b..f9d1f0252 100644 --- a/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c +++ b/src/overlays/actors/ovl_Obj_Hamishi/z_obj_hamishi.c @@ -267,7 +267,7 @@ void ObjHamishi_Draw(Actor* thisx, PlayState* play) { if ((thisx->projectedPos.z <= 2150.0f) || ((this->unk_1A2 & 1) && (thisx->projectedPos.z < 2250.0f))) { thisx->shape.shadowAlpha = 160; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -277,7 +277,7 @@ void ObjHamishi_Draw(Actor* thisx, PlayState* play) { f32 sp20 = (2250.0f - thisx->projectedPos.z) * 2.55f; thisx->shape.shadowAlpha = sp20 * 0.627451f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c index a2007ad9b..b390644c7 100644 --- a/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c +++ b/src/overlays/actors/ovl_Obj_Hariko/z_obj_hariko.c @@ -90,7 +90,8 @@ void ObjHariko_Draw(Actor* thisx, PlayState* play) { ObjHariko* this = THIS; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Push(); Matrix_RotateXS(this->headRotation.x, MTXMODE_APPLY); @@ -101,5 +102,6 @@ void ObjHariko_Draw(Actor* thisx, PlayState* play) { gSPDisplayList(POLY_OPA_DISP++, gHarikoFaceDL); Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c index 7b0351e78..d69c8d0fd 100644 --- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c +++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c @@ -199,7 +199,8 @@ void ObjHgdoor_Update(Actor* thisx, PlayState* play) { void ObjHgdoor_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (OBJHGDOOR_IS_RIGHT_DOOR(thisx)) { diff --git a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c index 26d89f00d..40e8b9323 100644 --- a/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c +++ b/src/overlays/actors/ovl_Obj_Hsblock/z_obj_hsblock.c @@ -145,7 +145,7 @@ void ObjHsblock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetEnvColor(POLY_OPA_DISP++, envColor->r, envColor->g, envColor->b, 255); gSPDisplayList(POLY_OPA_DISP++, sDisplayLists[OBJHSBLOCK_GET_3(thisx)]); diff --git a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c index 692fa8448..b04dff8a0 100644 --- a/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c +++ b/src/overlays/actors/ovl_Obj_Hugebombiwa/z_obj_hugebombiwa.c @@ -639,21 +639,21 @@ void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play) { if ((this->actionFunc == func_80A54C04) || (this->actionFunc == func_80A54CEC)) { if (this->actor.projectedPos.z <= 4300.0f) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0xFF, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, object_bombiwa_DL_002F60); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_bombiwa_DL_003110); } else if (this->actor.projectedPos.z < 4500.0f) { sp38 = (4500.0f - this->actor.projectedPos.z) * 1.275f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -665,7 +665,7 @@ void ObjHugebombiwa_Draw(Actor* thisx, PlayState* play) { EnHugebombiwaStruct* ptr; Gfx* gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) { ptr = &this->unk_190[i]; @@ -697,9 +697,10 @@ void func_80A55B34(Actor* thisx, PlayState* play) { } OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0; i < ARRAY_COUNT(this->unk_190); i++) { ptr = &this->unk_190[i]; diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index 0ef50dc98..10937f985 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -347,7 +347,7 @@ void ObjIcePoly_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index a1e0d64bc..a7d2714db 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -1527,7 +1527,7 @@ void func_80A26BF8(ObjIceblock* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); sp70.z = 0; for (i = 0; i < ARRAY_COUNT(this->unk_1B4); i++) { diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c index af05f0ba3..2aae58bad 100644 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c +++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c @@ -172,11 +172,11 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, &gObjectSyokudaiTypeSwitchCausesFlameDL); if (this->alpha > 0) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (this->alpha > 255) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, 255); } else { @@ -192,7 +192,7 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) { if (this->flameScaleProportion != 0.0f) { f32 scale; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); scale = (this->flameScaleProportion * 27.0f) / 10000.0f; gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (this->flameScroll * -20) & 0x1FF, diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c index 26191e397..df518ff43 100644 --- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c +++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c @@ -499,7 +499,7 @@ void ObjKendoKanban_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (this->boardFragments == OBJKENDOKANBAN_PART_FULL) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c index b52a66d84..5bf35d48d 100644 --- a/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c +++ b/src/overlays/actors/ovl_Obj_Kinoko/z_obj_kinoko.c @@ -73,7 +73,7 @@ void ObjKinoko_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gfx = POLY_XLU_DISP; gDPSetPrimColor(&gfx[0], 0, 0, 169, 63, 186, (u8)thisx->speed); diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c index 31e6905ec..ee8536caa 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -122,7 +122,7 @@ void ObjKzsaku_Update(Actor* thisx, PlayState* play) { void ObjKzsaku_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_kzsaku_DL_000040); diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c index c54378a74..1062d18f8 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -193,18 +193,20 @@ void ObjLightblock_Draw(Actor* thisx, PlayState* play) { ObjLightblock* this = THIS; OPEN_DISPS(play->state.gfxCtx); + if (this->alpha < 255) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, D_801AEF88); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->alpha); gSPDisplayList(POLY_XLU_DISP++, object_lightblock_DL_000178); } else { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); gSPDisplayList(POLY_OPA_DISP++, object_lightblock_DL_000178); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c index 34479a72a..408668ecb 100644 --- a/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c +++ b/src/overlays/actors/ovl_Obj_Lightswitch/z_obj_lightswitch.c @@ -370,7 +370,7 @@ void ObjLightSwitch_DrawOpa(ObjLightswitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, (u8)(this->colorR >> 6), (u8)(this->colorG >> 6), ((void)0, (u8)(this->colorB >> 6)), (u8)(this->colorAlpha >> 6)); gSPSegment(POLY_OPA_DISP++, 0x09, D_801AEFA0); @@ -406,7 +406,7 @@ void ObjLightSwitch_DrawXlu(ObjLightswitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, (u8)(this->colorR >> 6), (u8)(this->colorG >> 6), ((void)0, (u8)(this->colorB >> 6)), (u8)(this->colorAlpha >> 6)); gSPSegment(POLY_XLU_DISP++, 0x09, D_801AEF88); diff --git a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c index e1ee3cee5..dab7489ee 100644 --- a/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c +++ b/src/overlays/actors/ovl_Obj_Moon_Stone/z_obj_moon_stone.c @@ -146,13 +146,15 @@ void ObjMoonStone_Draw(Actor* thisx, PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gGiMoonsTearItemDL); Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gGiMoonsTearGlowDL); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c index c3e180f50..736d80d10 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -591,7 +591,7 @@ void ObjOshihiki_Draw(Actor* thisx, PlayState* play) { } this->stateFlags &= ~PUSHBLOCK_MOVE_UNDER; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_DrawStep(play, this->texture, this->textureStep); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c index dbd0dfe31..649343554 100644 --- a/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c +++ b/src/overlays/actors/ovl_Obj_Purify/z_obj_purify.c @@ -255,12 +255,12 @@ void func_80A851C8(Actor* thisx, PlayState* play) { AnimatedMat_Draw(play, Lib_SegmentedToVirtual(animMat)); } if (opaDList != NULL) { - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, opaDList); } if (xluDList != NULL) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, xluDList); } @@ -285,7 +285,8 @@ void func_80A85304(Actor* thisx, PlayState* play) { } OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ARRAY_COUNT(sp6C); i++) { index = sp6C[i]; AnimatedMat_Draw(play, Lib_SegmentedToVirtual(info->animMat[index])); @@ -293,5 +294,6 @@ void func_80A85304(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, info->xluDLists[index]); }; + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index 0b5021ccb..e06dbc30b 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -364,7 +364,7 @@ void func_809A3F0C(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sp28->r, sp28->g, sp28->b, 255); diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c index 3c8a7ecc0..d224125dd 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -259,12 +259,14 @@ void ObjRaillift_Draw(Actor* thisx, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScrollEnvColor(play->state.gfxCtx, 0, play->gameplayFrames, 0, 32, 32, 1, 0, 0, 32, 32, 0, 0, 0, 160)); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, object_raillift_DL_004BF0); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c index 6f93935b2..bd567ca2d 100644 --- a/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c +++ b/src/overlays/actors/ovl_Obj_Shutter/z_obj_shutter.c @@ -85,7 +85,7 @@ void ObjShutter_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gBankShutterDL); diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c index fa04972ef..28ce8cda8 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -684,7 +684,7 @@ void ObjSkateblock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); AnimatedMat_DrawStep(play, D_80A22A18, 0); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c index dd02f6c1b..a34050cc2 100644 --- a/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c +++ b/src/overlays/actors/ovl_Obj_Smork/z_obj_smork.c @@ -115,7 +115,7 @@ void func_80A3D9C4(ObjSmork* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x20, 1, 0, sp56, 0x20, 0x20)); diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index c94d67860..cd9eed10b 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -818,7 +818,7 @@ void func_80B04D34(Actor* thisx, PlayState* play) { if ((ptr->unk_28 != NULL) && (ptr->unk_2C > 0)) { OPEN_DISPS(play->state.gfxCtx); - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); gDPSetCombineLERP(POLY_XLU_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c index 907df33fc..fb34d736a 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -812,7 +812,7 @@ void ObjSpidertent_Draw(Actor* thisx, PlayState* play) { gfx = POLY_XLU_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(gfx++, 0, 0xFF, this->unk_3C2, this->unk_3C3, this->unk_3C4, temp_f18); gSPDisplayList(gfx++, D_80B31350[params].unk_00); diff --git a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c index 4541baa2a..4ff089a72 100644 --- a/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c +++ b/src/overlays/actors/ovl_Obj_Spinyroll/z_obj_spinyroll.c @@ -659,7 +659,7 @@ void ObjSpinyroll_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); temp_f26 = Math_CosS(this->dyna.actor.shape.rot.y) * 120.0f; temp_f28 = Math_SinS(this->dyna.actor.shape.rot.y) * -120.0f; diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c index 2c03f8689..70d6c2619 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -968,12 +968,14 @@ void ObjSwitch_DrawFloorSwitch(ObjSwitch* this, PlayState* play) { Gfx* opa; OPEN_DISPS(play->state.gfxCtx); + opa = POLY_OPA_DISP; - gSPDisplayList(opa++, &sSetupDL[6 * 25]); + gSPDisplayList(opa++, gSetupDLs[SETUPDL_25]); gSPMatrix(opa++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(opa++, 0, 0x80, this->color.r, this->color.g, this->color.b, 255); gSPDisplayList(opa++, gFloorSwitch1DL); POLY_OPA_DISP = opa; + CLOSE_DISPS(play->state.gfxCtx); } else { Gfx_DrawDListOpa(play, sFloorSwitchDL[OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor)]); @@ -990,7 +992,7 @@ void ObjSwitch_DrawVisibleEyeSwitch(ObjSwitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_OPA_DISP++, 0x08, sEyeSwitchTextures[subType][this->eyeTexIndex]); gSPDisplayList(POLY_OPA_DISP++, sEyeSwitchDL[subType]); @@ -1004,7 +1006,7 @@ void ObjSwitch_DrawInvisibleEyeSwitch(ObjSwitch* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, sEyeSwitchTextures[subType][this->eyeTexIndex]); gSPDisplayList(POLY_XLU_DISP++, sEyeSwitchDL[subType]); @@ -1027,8 +1029,8 @@ void ObjSwitch_DrawCrystalSwitch(ObjSwitch* this, PlayState* play) { func_800B8118(&this->dyna.actor, play, 0); AnimatedMat_DrawStep(play, sCrystalSwitchAnimatedMat, this->crystalAnimTimer); - func_8012C28C(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(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++, gCrystalSwitchBaseDL); diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c index 902caa42b..1b1ca74a0 100644 --- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c +++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c @@ -293,7 +293,8 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { f32 flameScale; OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + + Gfx_SetupDL25_Opa(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++, sDLists[OBJ_SYOKUDAI_GET_TYPE(thisx)]); if (this->snuffTimer != OBJ_SYOKUDAI_SNUFF_OUT) { @@ -307,7 +308,7 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { flameScale = (f32)this->snuffTimer / OBJ_SYOKUDAI_SNUFF_DEFAULT; } flameScale *= 0.0027f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, (this->flameTexScroll * -OBJ_SYOKUDAI_SNUFF_DEFAULT) & 0x1FF, 0x20, 0x80)); @@ -320,5 +321,6 @@ void ObjSyokudai_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFire1DL); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index d5aeffd8f..b7f7ece6e 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -279,8 +279,9 @@ void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 0x19]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); for (i = 0; i < ARRAY_COUNT(this->panels); i++) { panel = &this->panels[i]; @@ -289,5 +290,6 @@ void ObjTokeiStep_DrawOpen(Actor* thisx, PlayState* play) { gSPDisplayList(gfx++, gClocktowerPanelDL); } POLY_OPA_DISP = gfx; + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c index 3dc8b3297..21fe5f572 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.c @@ -72,7 +72,7 @@ void ObjTokeiTurret_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); gfx = POLY_OPA_DISP; - gSPDisplayList(gfx++, &sSetupDL[6 * 25]); + gSPDisplayList(gfx++, gSetupDLs[SETUPDL_25]); gSPMatrix(gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(gfx++, gClockTownTurretPlatformTopDL); POLY_OPA_DISP = gfx; diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index 3b933157b..690823bf8 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -791,13 +791,13 @@ void ObjTokeidai_Draw(Actor* thisx, PlayState* play) { if (this->opaDList != NULL) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->opaDList); } if (this->xluDList != NULL) { gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, this->xluDList); } @@ -809,7 +809,7 @@ void ObjTokeidai_Clock_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(0.0f, this->yTranslation, 0.0f, MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, -1791.0f, MTXMODE_APPLY); Matrix_RotateXS(-this->xRotation, MTXMODE_APPLY); @@ -862,12 +862,12 @@ void ObjTokeidai_Counterweight_Draw(Actor* thisx, PlayState* play) { // Draws the counterweight gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->opaDList); // Draws the spotlight gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 255, 255, 235, 180, (s32)(this->spotlightIntensity * 2.55f)); gSPDisplayList(POLY_XLU_DISP++, this->xluDList); @@ -887,7 +887,7 @@ void ObjTokeidai_ExteriorGear_Draw(Actor* thisx, PlayState* play) { Matrix_Translate(0.0f, 0.0f, 1791.0f, MTXMODE_APPLY); Matrix_RotateZS(this->minuteRingOrExteriorGearRotation, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, gClockTowerExteriorGearDL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c index 07561b8cd..b2b5e0314 100644 --- a/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c +++ b/src/overlays/actors/ovl_Obj_Toudai/z_obj_toudai.c @@ -36,7 +36,7 @@ void func_80A33B00(ObjToudai* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_f53_obj_DL_0024E8); @@ -67,7 +67,7 @@ void func_80A33BB4(ObjToudai* this, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, sp57, 0x20, 0x80, 1, 0, sp56, 0x20, 0x20)); diff --git a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c index 996bc3810..4c30a763e 100644 --- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c +++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c @@ -185,7 +185,7 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, object_tree_DL_000680); diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index a924c9e06..23282c965 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -1997,7 +1997,7 @@ void func_80B7BEA4(Vec3f* cartBedPos, s16 arg1, Vec3f* arg2, u8 alpha, PlayState OPEN_DISPS(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); + POLY_OPA_DISP = Gfx_SetupDL(POLY_OPA_DISP, SETUPDL_44); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, alpha); gSPMatrix(POLY_OPA_DISP++, sp100, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gSquareShadowDL); diff --git a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c index 257e9eb79..793838c8b 100644 --- a/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c +++ b/src/overlays/actors/ovl_Obj_Vspinyroll/z_obj_vspinyroll.c @@ -435,7 +435,7 @@ void func_80A3D2C0(Actor* thisx, PlayState* play) { sp3C.y = this->dyna.actor.shape.rot.y; sp3C.z = this->dyna.actor.shape.rot.z + 0x4000; - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_Translate(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 60.0f, this->dyna.actor.world.pos.z, MTXMODE_NEW); Matrix_RotateYS(sp3C.y, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c index 075ad18db..ca72d1854 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -168,7 +168,8 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) { Gfx_DrawDListOpa(play, sOwlStatueDLs[this->modelIndex]); if (this->dyna.actor.home.rot.x != 0) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y + 34.0f, this->dyna.actor.world.pos.z, MTXMODE_NEW); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); @@ -186,6 +187,7 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) { Matrix_RotateZF(BINANG_TO_RAD_ALT2(~((play->gameplayFrames * 1200) & 0xFFFF)), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c index db78f579b..b8a7b3b16 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -550,7 +550,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255); gSPClearGeometryMode(POLY_XLU_DISP++, G_LIGHTING); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2); gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG); @@ -632,7 +632,7 @@ void func_808DD970(Actor* thisx, PlayState* play2) { gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gEffDust5Tex)); gSPClearGeometryMode(POLY_XLU_DISP++, G_LIGHTING); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2); gSPSetGeometryMode(POLY_XLU_DISP++, G_FOG); @@ -666,7 +666,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { if (end) { gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 255, 255, 25); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); } for (i = 0; i < end; i++) { @@ -699,7 +699,7 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { if (player->actor.floorHeight < play->view.eye.y) { for (i = 0; i < end; i++) { if (!phi_s5) { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 255); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 100); diff --git a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c index 731fe6b77..99bcf4191 100644 --- a/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c +++ b/src/overlays/actors/ovl_Oceff_Spot/z_oceff_spot.c @@ -160,7 +160,7 @@ void OceffSpot_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, &sSunSongEffectCylinderMaterialDL); diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c index 96d76f807..d3486bb0c 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.c @@ -178,7 +178,7 @@ void OceffStorm_Draw2(Actor* thisx, PlayState* play) { gDPPipeSync(POLY_XLU_DISP++); - POLY_XLU_DISP = func_8012C3A4(POLY_XLU_DISP); + POLY_XLU_DISP = Gfx_SetupDL64(POLY_XLU_DISP); gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE); gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE); @@ -201,7 +201,7 @@ void OceffStorm_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 200, 255); gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 0, 128); diff --git a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c index 42bf6c703..c73e67a1d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c +++ b/src/overlays/actors/ovl_Oceff_Wipe/z_oceff_wipe.c @@ -99,7 +99,7 @@ void OceffWipe_Draw(Actor* thisx, PlayState* play) { vtxPtr[i * 2 + 1].v.cn[3] = alphaTable[sAlphaIndices[i] & 0xF]; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c index 3d8004c5c..7de628750 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c +++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c @@ -89,7 +89,7 @@ void OceffWipe2_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c index 52031ce00..f7156878c 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c +++ b/src/overlays/actors/ovl_Oceff_Wipe3/z_oceff_wipe3.c @@ -90,7 +90,7 @@ void OceffWipe3_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); Matrix_ReplaceRotation(&play->billboardMtxF); diff --git a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c index 3554bc78a..d82c117e9 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c +++ b/src/overlays/actors/ovl_Oceff_Wipe4/z_oceff_wipe4.c @@ -88,7 +88,7 @@ void OceffWipe4_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c index f869b95ac..3dcb06d5d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c +++ b/src/overlays/actors/ovl_Oceff_Wipe5/z_oceff_wipe5.c @@ -107,7 +107,7 @@ void OceffWipe5_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, MTXMODE_NEW); diff --git a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c index 87dbe2752..244870f9d 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c +++ b/src/overlays/actors/ovl_Oceff_Wipe6/z_oceff_wipe6.c @@ -86,7 +86,7 @@ void OceffWipe6_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c index f269a89a5..fb8011c60 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c +++ b/src/overlays/actors/ovl_Oceff_Wipe7/z_oceff_wipe7.c @@ -88,7 +88,7 @@ void OceffWipe7_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(activeCamEye.x + quakeOffset.x, activeCamEye.y + quakeOffset.y, activeCamEye.z + quakeOffset.z, MTXMODE_NEW); Matrix_Scale(0.1f, 0.1f, 0.1f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 5147f8732..9f5257b32 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -12190,7 +12190,7 @@ void Player_Draw(Actor* thisx, PlayState* play) { func_8012C268(&play->state); } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800B8050(&this->actor, play, 0); func_800B8118(&this->actor, play, 0); diff --git a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c index ef88015b7..e63d414d9 100644 --- a/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c +++ b/src/overlays/effects/ovl_Effect_En_Ice_Block/z_eff_en_ice_block.c @@ -65,7 +65,7 @@ void EffectEnIceBlock_Draw(PlayState* play, u32 index, EffectSs* this) { gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjId].segment); // object: OBJECT_ICE_BLOCK - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); diff --git a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c index 2d80b4161..b1472e55d 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c +++ b/src/overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.c @@ -68,7 +68,7 @@ void EffectSsBlast_Draw(PlayState* play, u32 index, EffectSs* this) { radius = this->rScale * 0.0025f; - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); Play_GetFloorSurface(play, &mf, &this->pos); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c index b17a43fbe..c9565b968 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c @@ -92,7 +92,7 @@ void EffectSsBomb2_DrawFade(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); @@ -135,7 +135,7 @@ void EffectSsBomb2_DrawLayered(PlayState* play, u32 index, EffectSs* this) { mtx2 = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult); if (mtx2 != NULL) { - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c index 681aac01d..41c9f0692 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c @@ -59,7 +59,7 @@ void EffectSsBubble_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, 150, 150, 150, 0); gSPSegment(POLY_OPA_DISP++, 0x08, this->gfx); diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c index d8394b159..87e50fb5f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c @@ -83,7 +83,7 @@ void EffectSsDFire_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 50, this->rAlpha); diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c index 543363ade..556903ca1 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Db/z_eff_ss_dead_db.c @@ -82,7 +82,7 @@ void EffectSsDeadDb_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c index 9f124d39e..c9fa170df 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Dd/z_eff_ss_dead_dd.c @@ -109,7 +109,7 @@ void EffectSsDeadDd_Draw(PlayState* play, u32 index, EffectSs* this) { mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult); if (mtx != NULL) { - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rAlpha); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rAlpha); gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c index 6243b4302..b40513e21 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dead_Ds/z_eff_ss_dead_ds.c @@ -59,7 +59,7 @@ void EffectSsDeadDs_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(play->state.gfxCtx); scale = this->rScale * 0.01f; - func_8012C974(play->state.gfxCtx); + Gfx_SetupDL60_XluNoCD(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, this->rAlpha); gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); pos = this->pos; diff --git a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c index b6e3b747f..8a4c80980 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dt_Bubble/z_eff_ss_dt_bubble.c @@ -97,7 +97,7 @@ void EffectSsDtBubble_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, (this->rPrimColorA * this->life) / this->rLifespan); gDPSetEnvColor(POLY_OPA_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, diff --git a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c index 10e8fbeed..22580fd81 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c +++ b/src/overlays/effects/ovl_Effect_Ss_Dust/z_eff_ss_dust.c @@ -107,7 +107,7 @@ void EffectSsDust_Draw(PlayState* play, u32 index, EffectSs* this) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPPipeSync(POLY_XLU_DISP++); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[this->rTexIndex])); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); gDPPipeSync(POLY_XLU_DISP++); if (this->rDrawFlags & DUST_DRAWFLAG1) { diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c index 9d78d4d71..0e79c5df7 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c @@ -88,7 +88,7 @@ void EffectSsEnFire_Draw(PlayState* play, u32 index, EffectSs* this) { redGreen = 0; } - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, redGreen * 12.7f, 0, 0, 0); gDPSetPrimColor(POLY_XLU_DISP++, 0x0, 0x80, redGreen * 12.7f, redGreen * 12.7f, 0, 255); gSPSegment( diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c index 21a0f1019..14d5d5c6e 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c @@ -112,7 +112,7 @@ void EffectSsEnIce_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateXS(this->rPitch, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); func_800BCC68(&this->pos, play); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, gameplayFrames & 0xFF, 0x20, 0x10, 1, 0, diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c index 03522f5af..91b699f5f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c +++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c @@ -72,7 +72,7 @@ void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index cd7c6d5bd..f2038c768 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -62,11 +62,11 @@ void EffectSsFhgFlash_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); if (this->rParams != FHGFLASH_SHOCK_NO_ACTOR) { - func_8012C448(play->state.gfxCtx); + Gfx_SetupDL44_Xlu(play->state.gfxCtx); Matrix_RotateXS(this->rXZRot, MTXMODE_APPLY); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_DECAL2); } else { - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_ReplaceRotation(&play->billboardMtxF); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_AA_ZB_XLU_SURF2); } diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c index 1742b03fd..57ac1af69 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c @@ -121,7 +121,7 @@ void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Scale(1.0f, temp1, 1.0f / temp1, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); gSPSegment( diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c index 24aadc0ec..597379229 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Ripple/z_eff_ss_g_ripple.c @@ -93,7 +93,7 @@ void EffectSsGRipple_DrawRipple(PlayState* play2, EffectSs* this, TexturePtr tex if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c index ccc2951c6..e80c02a11 100644 --- a/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c +++ b/src/overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.c @@ -97,7 +97,7 @@ void EffectSsGSpk_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sSparkTextures[this->rTexIndex])); - func_8012C974(gfxCtx); + Gfx_SetupDL60_XluNoCD(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); gSPDisplayList(POLY_XLU_DISP++, this->gfx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c index e1a9371cd..15444ad47 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.c @@ -72,7 +72,7 @@ void EffectSsHahen_DrawOpa(PlayState* play, EffectSs* this) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); } gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); gSPDisplayList(POLY_OPA_DISP++, this->gfx); CLOSE_DISPS(gfxCtx); @@ -88,7 +88,7 @@ void EffectSsHahen_DrawXlu(PlayState* play, EffectSs* this) { gSPSegment(POLY_XLU_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPDisplayList(POLY_XLU_DISP++, this->gfx); CLOSE_DISPS(gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c index 36eb650f7..b290c05e4 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c +++ b/src/overlays/effects/ovl_Effect_Ss_Hitmark/z_eff_ss_hitmark.c @@ -134,7 +134,7 @@ void EffectSsHitmark_Draw(PlayState* play, u32 index, EffectSs* this) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); tex = sTextures[(this->rType * 8) + (this->rTexIndex)]; gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(tex)); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, 255); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, 0); gSPDisplayList(POLY_XLU_DISP++, this->gfx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c index 9efadc99e..29a35cf34 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Piece/z_eff_ss_ice_piece.c @@ -65,7 +65,7 @@ void EffectSsIcePiece_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_RotateYS(this->rYaw, MTXMODE_APPLY); Matrix_RotateXS(this->rPitch, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)(s32)alpha); func_800BCC68(&this->pos, play); gSPSegment( diff --git a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c index e1c2bc72d..ffd8c300a 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c +++ b/src/overlays/effects/ovl_Effect_Ss_Ice_Smoke/z_eff_ss_ice_smoke.c @@ -52,7 +52,7 @@ void EffectSsIceSmoke_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(play->state.gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 235, 235, this->rAlpha); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, this->rScrollX * this->life, this->rScrollY * this->life, 0x20, diff --git a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c index 17d7edc1e..8c4fc5877 100644 --- a/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_K_Fire/z_eff_ss_k_fire.c @@ -55,7 +55,7 @@ void EffectSsKFire_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(xzScale, yScale, xzScale, MTXMODE_APPLY); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, play->state.frames * this->rScroll, 0x20, 0x80)); 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 e424c0b44..1104a28a3 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 @@ -107,7 +107,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { 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(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); if (colorIndex >= 0) { gDPSetPrimColor(POLY_XLU_DISP++, 0, D_8097EAD8[colorIndex].lod, D_8097EAD8[colorIndex].color.r, D_8097EAD8[colorIndex].color.g, D_8097EAD8[colorIndex].color.b, 255); @@ -115,7 +115,7 @@ void EffectSsKakera_Draw(PlayState* play, u32 index, EffectSs* this) { gSPDisplayList(POLY_XLU_DISP++, this->gfx); } else { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); if (colorIndex >= 0) { gDPSetPrimColor(POLY_OPA_DISP++, 0, D_8097EAD8[colorIndex].lod, D_8097EAD8[colorIndex].color.r, D_8097EAD8[colorIndex].color.g, D_8097EAD8[colorIndex].color.b, 255); diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c index 540d9e505..4e395141b 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c @@ -108,7 +108,7 @@ void EffectSsKirakira_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, (((s8)((55.0f / this->rLifespan) * this->life) + 200))); gDPSetEnvColor(POLY_XLU_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c index 9037b20f4..61eb3aebd 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c +++ b/src/overlays/effects/ovl_Effect_Ss_Lightning/z_eff_ss_lightning.c @@ -119,7 +119,7 @@ void EffectSsLightning_Draw(PlayState* play, u32 index, EffectSs* this) { if (mtx != NULL) { gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, sLightningTextures[texIndex]); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c index 3402eb2b7..f79e59340 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c @@ -135,7 +135,7 @@ void EffectSsSbn_DrawSliding(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_XLU_DECAL2); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->rAlpha); @@ -175,7 +175,7 @@ void EffectSsSbn_Draw(PlayState* play, u32 index, EffectSs* this) { OPEN_DISPS(gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C2DC(gfxCtx); + Gfx_SetupDL25_Xlu(gfxCtx); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_ZB_XLU_DECAL2); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, this->rAlpha); diff --git a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c index a9a190948..312ed5f2f 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sibuki/z_eff_ss_sibuki.c @@ -70,7 +70,7 @@ void EffectSsSibuki_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C28C(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->rPrimColorR, this->rPrimColorG, this->rPrimColorB, this->rPrimColorA); gDPSetEnvColor(POLY_OPA_DISP++, this->rEnvColorR, this->rEnvColorG, this->rEnvColorB, this->rEnvColorA); gSPSegment(POLY_OPA_DISP++, 0x08, this->gfx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c index cd0ea0fad..773984c80 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c +++ b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c @@ -46,14 +46,14 @@ void EffectSsSolderSrchBall_Draw(PlayState* play, u32 index, EffectSs* this) { GraphicsContext* gfxCtx = play->state.gfxCtx; f32 scale = this->rgScale / 100.0f; - func_8012C28C(gfxCtx); - func_8012C2DC(play->state.gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); OPEN_DISPS(gfxCtx); Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20); + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_20); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(gSun1Tex)); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); gDPPipeSync(POLY_XLU_DISP++); 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 4f1aa5d91..c1615e2bf 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 @@ -50,7 +50,7 @@ void EffectSsStick_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Scale(0.01f, 0.0025f, 0.01f, MTXMODE_APPLY); Matrix_RotateZYX(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); + Gfx_SetupDL25_Opa(gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->rObjBankIndex].segment); gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList); gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c index 6e6b48156..f9735d396 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c @@ -65,7 +65,7 @@ void EffectSsStone1_Draw(PlayState* play, u32 index, EffectSs* this) { Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - func_8012C9BC(gfxCtx); + Gfx_SetupDL61_Xlu(gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(drawParams->texture)); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, drawParams->primColor.r, drawParams->primColor.g, drawParams->primColor.b, 255); diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 845baa3cb..108ccedcd 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -129,7 +129,8 @@ void DayTelop_Draw(DayTelopState* this) { GraphicsContext* gfxCtx = this->state.gfxCtx; OPEN_DISPS(gfxCtx); - func_8012C628(this->state.gfxCtx); + + Gfx_SetupDL39_Opa(this->state.gfxCtx); if (gSaveContext.save.day >= 9) { // Draw a white screen @@ -139,7 +140,7 @@ void DayTelop_Draw(DayTelopState* this) { gDPFillRectangle(POLY_OPA_DISP++, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); } - func_8012C628(this->state.gfxCtx); + Gfx_SetupDL39_Opa(this->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 08bf65262..88d9ccdc4 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -987,7 +987,7 @@ void MapSelect_DrawMenu(MapSelectState* this) { OPEN_DISPS(gfxCtx); - func_8012C4C0(gfxCtx); + Gfx_SetupDL28_Opa(gfxCtx); printer = alloca(sizeof(GfxPrint)); GfxPrint_Init(printer); @@ -1009,7 +1009,7 @@ void MapSelect_DrawLoadingScreen(MapSelectState* this) { OPEN_DISPS(gfxCtx); - func_8012C4C0(gfxCtx); + Gfx_SetupDL28_Opa(gfxCtx); GfxPrint_Init(&printer); GfxPrint_Open(&printer, POLY_OPA_DISP); diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 59b1bed02..8e270b836 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -81,7 +81,7 @@ void ConsoleLogo_Draw(GameState* thisx) { gSPSetLights1(POLY_OPA_DISP++, sTitleLights); ConsoleLogo_RenderView(this, 0.0f, 150.0f, 300.0f); - func_8012C28C(this->state.gfxCtx); + Gfx_SetupDL25_Opa(this->state.gfxCtx); Matrix_Translate(-53.0f, -5.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); Matrix_RotateZYX(0, sTitleRotation, 0, MTXMODE_APPLY); @@ -89,7 +89,7 @@ void ConsoleLogo_Draw(GameState* thisx) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, gNintendo64LogoNDL); - func_8012C628(this->state.gfxCtx); + Gfx_SetupDL39_Opa(this->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index d5d0368dd..1eb46728f 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -345,7 +345,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index cfcaf20ea..c8d963bda 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -252,7 +252,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); // Draw a white box around the items that are equipped on the C buttons // Loop over c-buttons (i) and vtx offset (j) @@ -319,7 +319,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { if ((pauseCtx->state == PAUSE_STATE_MAIN) && ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_ITEM)) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) && !IS_PAUSE_STATE_GAMEOVER) { - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); // Loop over slots (i) and ammoIndex (j) @@ -332,7 +332,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { j++; } } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c index af12f2d5d..6539f1b9e 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c @@ -191,7 +191,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { sStrayFairyIconAlphaScaleTimer = 15; } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, @@ -230,7 +230,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gStrayFairyGlowingCircleIconTex, G_IM_FMT_I, 32, 24, 0); KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); @@ -254,7 +254,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { sStrayFairyIconRectS[sStrayFairyIconIndex], 0, 1 << 10, 1 << 10); KaleidoScope_DrawDungeonStrayFairyCount(play); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } } } else if (CHECK_DUNGEON_ITEM(i, gSaveContext.dungeonIndex)) { @@ -277,7 +277,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->state != PAUSE_STATE_SAVEPROMPT) && !IS_PAUSE_STATE_GAMEOVER) { - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -294,7 +294,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } } @@ -558,7 +558,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Each loaded chunk must have `size <= TMEM_SIZE / 2` // because the texture is color-indexed, so the TLUT uses the other half of TMEM. - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); gDPLoadTLUT_pal256(POLY_OPA_DISP++, gWorldMapImageTLUT); @@ -579,7 +579,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { 0, 1 << 10, 1 << 10); } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); } else { // Draw the world map angled @@ -638,7 +638,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); gDPPipeSync(POLY_OPA_DISP++); @@ -670,7 +670,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gDPFillRectangle(POLY_OPA_DISP++, 50, 62, 270, 190); } - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); if (!IS_PAUSE_STATE_OWLWARP) { // Browsing the world map regions on the pause menu @@ -809,7 +809,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Draw Player's face at the current region if (n != REGION_MAX) { KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); - func_8012C628(play->state.gfxCtx); + Gfx_SetupDL39_Opa(play->state.gfxCtx); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 950e10788..67a8e0d36 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -198,7 +198,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { KaleidoScope_SetCursorVtxPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_MASK] * 4, pauseCtx->maskVtx); - func_8012C8AC(play->state.gfxCtx); + Gfx_SetupDL42_Opa(play->state.gfxCtx); // Draw a white box around the items that are equipped on the C buttons // Loop over c-buttons (i) and vtx offset (j) diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index ba9076b05..a882cf3e7 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -448,7 +448,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play); - func_8012C8AC(gfxCtx); + Gfx_SetupDL42_Opa(gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); func_801091F0(play); } else { @@ -543,7 +543,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play); - func_8012C8AC(gfxCtx); + Gfx_SetupDL42_Opa(gfxCtx); gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0559d0a82..d4cb99aed 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2314,72 +2314,72 @@ 0x8012BC50:("Gfx_SetFog",), 0x8012BD8C:("Gfx_SetFogWithSync",), 0x8012BF08:("Gfx_SetFog2",), - 0x8012BF3C:("Gfx_CallSetupDLImpl",), - 0x8012BF78:("Gfx_CallSetupDL",), - 0x8012BF98:("Gfx_CallSetupDLAtPtr",), - 0x8012BFC4:("func_8012BFC4",), - 0x8012BFEC:("func_8012BFEC",), - 0x8012C014:("func_8012C014",), - 0x8012C058:("func_8012C058",), - 0x8012C080:("func_8012C080",), - 0x8012C0A8:("func_8012C0A8",), - 0x8012C0D0:("func_8012C0D0",), - 0x8012C0F8:("func_8012C0F8",), - 0x8012C120:("func_8012C120",), - 0x8012C148:("func_8012C148",), - 0x8012C170:("func_8012C170",), - 0x8012C198:("func_8012C198",), - 0x8012C1C0:("func_8012C1C0",), - 0x8012C1EC:("func_8012C1EC",), - 0x8012C214:("func_8012C214",), - 0x8012C240:("func_8012C240",), + 0x8012BF3C:("Gfx_SetupDLImpl",), + 0x8012BF78:("Gfx_SetupDL",), + 0x8012BF98:("Gfx_SetupDLAtPtr",), + 0x8012BFC4:("Gfx_SetupDL57",), + 0x8012BFEC:("Gfx_SetupDL57_b",), + 0x8012C014:("Gfx_SetupDL52_NoCD",), + 0x8012C058:("Gfx_SetupDL58_Opa",), + 0x8012C080:("Gfx_SetupDL57_Opa",), + 0x8012C0A8:("Gfx_SetupDL50_Opa",), + 0x8012C0D0:("Gfx_SetupDL51_Opa",), + 0x8012C0F8:("Gfx_SetupDL52_Xlu",), + 0x8012C120:("Gfx_SetupDL53_Opa",), + 0x8012C148:("Gfx_SetupDL54_Opa",), + 0x8012C170:("Gfx_SetupDL55_Xlu",), + 0x8012C198:("Gfx_SetupDL26",), + 0x8012C1C0:("Gfx_SetupDL26_Opa",), + 0x8012C1EC:("Gfx_SetupDL23",), + 0x8012C214:("Gfx_SetupDL23_Opa",), + 0x8012C240:("Gfx_SetupDL25_Xlu2",), 0x8012C268:("func_8012C268",), - 0x8012C28C:("func_8012C28C",), - 0x8012C2B4:("func_8012C2B4",), - 0x8012C2DC:("func_8012C2DC",), - 0x8012C304:("func_8012C304",), - 0x8012C32C:("func_8012C32C",), - 0x8012C354:("func_8012C354",), - 0x8012C37C:("func_8012C37C",), - 0x8012C3A4:("func_8012C3A4",), - 0x8012C3CC:("func_8012C3CC",), - 0x8012C3F4:("func_8012C3F4",), - 0x8012C420:("func_8012C420",), - 0x8012C448:("func_8012C448",), - 0x8012C470:("func_8012C470",), - 0x8012C498:("func_8012C498",), - 0x8012C4C0:("func_8012C4C0",), - 0x8012C4E8:("func_8012C4E8",), - 0x8012C510:("func_8012C510",), - 0x8012C538:("func_8012C538",), - 0x8012C560:("func_8012C560",), - 0x8012C588:("func_8012C588",), - 0x8012C5B0:("func_8012C5B0",), - 0x8012C5D8:("func_8012C5D8",), - 0x8012C600:("func_8012C600",), - 0x8012C628:("func_8012C628",), - 0x8012C654:("func_8012C654",), - 0x8012C680:("func_8012C680",), - 0x8012C6AC:("func_8012C6AC",), - 0x8012C6D4:("func_8012C6D4",), - 0x8012C6FC:("func_8012C6FC",), - 0x8012C724:("func_8012C724",), - 0x8012C74C:("func_8012C74C",), - 0x8012C774:("func_8012C774",), - 0x8012C7B8:("func_8012C7B8",), - 0x8012C7FC:("func_8012C7FC",), - 0x8012C840:("func_8012C840",), - 0x8012C868:("func_8012C868",), - 0x8012C8AC:("func_8012C8AC",), - 0x8012C8D4:("func_8012C8D4",), - 0x8012C8FC:("func_8012C8FC",), - 0x8012C924:("func_8012C924",), - 0x8012C94C:("func_8012C94C",), - 0x8012C974:("func_8012C974",), - 0x8012C9BC:("func_8012C9BC",), - 0x8012C9E4:("func_8012C9E4",), - 0x8012CA0C:("func_8012CA0C",), - 0x8012CA38:("func_8012CA38",), + 0x8012C28C:("Gfx_SetupDL25_Opa",), + 0x8012C2B4:("Gfx_SetupDL71",), + 0x8012C2DC:("Gfx_SetupDL25_Xlu",), + 0x8012C304:("Gfx_SetupDL72",), + 0x8012C32C:("Gfx_SetupDL31_Opa",), + 0x8012C354:("Gfx_SetupDL32_Opa",), + 0x8012C37C:("Gfx_SetupDL33_Opa",), + 0x8012C3A4:("Gfx_SetupDL64",), + 0x8012C3CC:("Gfx_SetupDL34",), + 0x8012C3F4:("Gfx_SetupDL34_Opa",), + 0x8012C420:("Gfx_SetupDL35_Opa",), + 0x8012C448:("Gfx_SetupDL44_Xlu",), + 0x8012C470:("Gfx_SetupDL36_Opa",), + 0x8012C498:("Gfx_SetupDL28",), + 0x8012C4C0:("Gfx_SetupDL28_Opa",), + 0x8012C4E8:("Gfx_SetupDL43_Opa",), + 0x8012C510:("Gfx_SetupDL45_Opa",), + 0x8012C538:("Gfx_SetupDL46_Overlay",), + 0x8012C560:("Gfx_SetupDL38_Xlu",), + 0x8012C588:("Gfx_SetupDL4_Xlu",), + 0x8012C5B0:("Gfx_SetupDL37_Opa",), + 0x8012C5D8:("Gfx_SetupDL2_Opa",), + 0x8012C600:("Gfx_SetupDL39",), + 0x8012C628:("Gfx_SetupDL39_Opa",), + 0x8012C654:("Gfx_SetupDL39_Overlay",), + 0x8012C680:("Gfx_SetupDL39_Ptr",), + 0x8012C6AC:("Gfx_SetupDL40_Opa",), + 0x8012C6D4:("Gfx_SetupDL41_Opa",), + 0x8012C6FC:("Gfx_SetupDL47_Xlu",), + 0x8012C724:("Gfx_SetupDL66",), + 0x8012C74C:("Gfx_SetupDL67",), + 0x8012C774:("Gfx_SetupDL68_NoCD",), + 0x8012C7B8:("Gfx_SetupDL69_NoCD",), + 0x8012C7FC:("Gfx_SetupDL65_NoCD",), + 0x8012C840:("Gfx_SetupDL70",), + 0x8012C868:("Gfx_SetupDL20_NoCD",), + 0x8012C8AC:("Gfx_SetupDL42_Opa",), + 0x8012C8D4:("Gfx_SetupDL42_Overlay",), + 0x8012C8FC:("Gfx_SetupDL48_Opa",), + 0x8012C924:("Gfx_SetupDL49_Xlu",), + 0x8012C94C:("Gfx_SetupDL27_Xlu",), + 0x8012C974:("Gfx_SetupDL60_XluNoCD",), + 0x8012C9BC:("Gfx_SetupDL61_Xlu",), + 0x8012C9E4:("Gfx_SetupDL56_Opa",), + 0x8012CA0C:("Gfx_SetupDL56_Ptr",), + 0x8012CA38:("Gfx_SetupDL59_Opa",), 0x8012CA60:("Gfx_BranchTexScroll",), 0x8012CB04:("func_8012CB04",), 0x8012CB28:("func_8012CB28",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index be8c6e08f..d09486c56 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1319,7 +1319,7 @@ 0x801C0EE4:("D_801C0EE4","s16","",0x2), 0x801C0EE8:("D_801C0EE8","s16","",0x2), 0x801C0EEC:("D_801C0EEC","s16","",0x2), - 0x801C0EF0:("sSetupDL","Gfx","[438]",0xdb0), + 0x801C0EF0:("gSetupDLs","Gfx","[438]",0xdb0), 0x801C1CA0:("sFillSetupDL","Gfx","[12]",0x60), 0x801C1D00:("gEmptyDL","Gfx","[1]",0x8), 0x801C1D10:("sZeroVec","Vec3f","",0xc), diff --git a/tools/namefixer.py b/tools/namefixer.py index 54edb5644..b1a0b9072 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -765,6 +765,70 @@ wordReplace = { "Padmgr_Stop": "PadMgr_HandlePreNMI", "func_80175E68": "PadMgr_GetInputNoLock", + "Gfx_CallSetupDL": "Gfx_SetupDL", + "func_8012BFC4": "Gfx_SetupDL57", + "func_8012BFEC": "Gfx_SetupDL57_b", + "func_8012C014": "Gfx_SetupDL52_NoCD", + "func_8012C058": "Gfx_SetupDL58_Opa", + "func_8012C080": "Gfx_SetupDL57_Opa", + "func_8012C0A8": "Gfx_SetupDL50_Opa", + "func_8012C0D0": "Gfx_SetupDL51_Opa", + "func_8012C0F8": "Gfx_SetupDL52_Xlu", + "func_8012C120": "Gfx_SetupDL53_Opa", + "func_8012C148": "Gfx_SetupDL54_Opa", + "func_8012C170": "Gfx_SetupDL55_Xlu", + "func_8012C198": "Gfx_SetupDL26", + "func_8012C1C0": "Gfx_SetupDL26_Opa", + "func_8012C1EC": "Gfx_SetupDL23", + "func_8012C214": "Gfx_SetupDL23_Opa", + "func_8012C240": "Gfx_SetupDL25_Xlu2", + "func_8012C28C": "Gfx_SetupDL25_Opa", + "func_8012C2B4": "Gfx_SetupDL71", + "func_8012C2DC": "Gfx_SetupDL25_Xlu", + "func_8012C304": "Gfx_SetupDL72", + "func_8012C32C": "Gfx_SetupDL31_Opa", + "func_8012C354": "Gfx_SetupDL32_Opa", + "func_8012C37C": "Gfx_SetupDL33_Opa", + "func_8012C3A4": "Gfx_SetupDL64", + "func_8012C3CC": "Gfx_SetupDL34", + "func_8012C3F4": "Gfx_SetupDL34_Opa", + "func_8012C420": "Gfx_SetupDL35_Opa", + "func_8012C448": "Gfx_SetupDL44_Xlu", + "func_8012C470": "Gfx_SetupDL36_Opa", + "func_8012C498": "Gfx_SetupDL28", + "func_8012C4C0": "Gfx_SetupDL28_Opa", + "func_8012C4E8": "Gfx_SetupDL43_Opa", + "func_8012C510": "Gfx_SetupDL45_Opa", + "func_8012C538": "Gfx_SetupDL46_Overlay", + "func_8012C560": "Gfx_SetupDL38_Xlu", + "func_8012C588": "Gfx_SetupDL4_Xlu", + "func_8012C5B0": "Gfx_SetupDL37_Opa", + "func_8012C5D8": "Gfx_SetupDL2_Opa", + "func_8012C600": "Gfx_SetupDL39", + "func_8012C628": "Gfx_SetupDL39_Opa", + "func_8012C654": "Gfx_SetupDL39_Overlay", + "func_8012C680": "Gfx_SetupDL39_Ptr", + "func_8012C6AC": "Gfx_SetupDL40_Opa", + "func_8012C6D4": "Gfx_SetupDL41_Opa", + "func_8012C6FC": "Gfx_SetupDL47_Xlu", + "func_8012C724": "Gfx_SetupDL66", + "func_8012C74C": "Gfx_SetupDL67", + "func_8012C774": "Gfx_SetupDL68_NoCD", + "func_8012C7B8": "Gfx_SetupDL69_NoCD", + "func_8012C7FC": "Gfx_SetupDL65_NoCD", + "func_8012C840": "Gfx_SetupDL70", + "func_8012C868": "Gfx_SetupDL20_NoCD", + "func_8012C8AC": "Gfx_SetupDL42_Opa", + "func_8012C8D4": "Gfx_SetupDL42_Overlay", + "func_8012C8FC": "Gfx_SetupDL48_Opa", + "func_8012C924": "Gfx_SetupDL49_Xlu", + "func_8012C94C": "Gfx_SetupDL27_Xlu", + "func_8012C974": "Gfx_SetupDL60_XluNoCD", + "func_8012C9BC": "Gfx_SetupDL61_Xlu", + "func_8012C9E4": "Gfx_SetupDL56_Opa", + "func_8012CA0C": "Gfx_SetupDL56_Ptr", + "func_8012CA38": "Gfx_SetupDL59_Opa", + # Structs "ActorAnimationEntry": "AnimationInfo", "ActorAnimationEntryS": "AnimationInfoS", @@ -1005,6 +1069,7 @@ wordReplace = { "D_801D15BC": "gZeroVec3s", "D_801D1DE0": "gIdentityMtx", "D_801D1E20": "gIdentityMtxF", + "sSetupDL": "gSetupDLs", # Macros "CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index ba751f02a..03469f7bf 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1828,72 +1828,72 @@ asm/non_matchings/code/z_quake/Quake_GetNumActiveQuakes.s,Quake_GetNumActiveQuak asm/non_matchings/code/z_rcp/Gfx_SetFog.s,Gfx_SetFog,0x8012BC50,0x4F asm/non_matchings/code/z_rcp/Gfx_SetFogWithSync.s,Gfx_SetFogWithSync,0x8012BD8C,0x5F asm/non_matchings/code/z_rcp/Gfx_SetFog2.s,Gfx_SetFog2,0x8012BF08,0xD -asm/non_matchings/code/z_rcp/Gfx_CallSetupDLImpl.s,Gfx_CallSetupDLImpl,0x8012BF3C,0xF -asm/non_matchings/code/z_rcp/Gfx_CallSetupDL.s,Gfx_CallSetupDL,0x8012BF78,0x8 -asm/non_matchings/code/z_rcp/Gfx_CallSetupDLAtPtr.s,Gfx_CallSetupDLAtPtr,0x8012BF98,0xB -asm/non_matchings/code/z_rcp/func_8012BFC4.s,func_8012BFC4,0x8012BFC4,0xA -asm/non_matchings/code/z_rcp/func_8012BFEC.s,func_8012BFEC,0x8012BFEC,0xA -asm/non_matchings/code/z_rcp/func_8012C014.s,func_8012C014,0x8012C014,0x11 -asm/non_matchings/code/z_rcp/func_8012C058.s,func_8012C058,0x8012C058,0xA -asm/non_matchings/code/z_rcp/func_8012C080.s,func_8012C080,0x8012C080,0xA -asm/non_matchings/code/z_rcp/func_8012C0A8.s,func_8012C0A8,0x8012C0A8,0xA -asm/non_matchings/code/z_rcp/func_8012C0D0.s,func_8012C0D0,0x8012C0D0,0xA -asm/non_matchings/code/z_rcp/func_8012C0F8.s,func_8012C0F8,0x8012C0F8,0xA -asm/non_matchings/code/z_rcp/func_8012C120.s,func_8012C120,0x8012C120,0xA -asm/non_matchings/code/z_rcp/func_8012C148.s,func_8012C148,0x8012C148,0xA -asm/non_matchings/code/z_rcp/func_8012C170.s,func_8012C170,0x8012C170,0xA -asm/non_matchings/code/z_rcp/func_8012C198.s,func_8012C198,0x8012C198,0xA -asm/non_matchings/code/z_rcp/func_8012C1C0.s,func_8012C1C0,0x8012C1C0,0xB -asm/non_matchings/code/z_rcp/func_8012C1EC.s,func_8012C1EC,0x8012C1EC,0xA -asm/non_matchings/code/z_rcp/func_8012C214.s,func_8012C214,0x8012C214,0xB -asm/non_matchings/code/z_rcp/func_8012C240.s,func_8012C240,0x8012C240,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDLImpl.s,Gfx_SetupDLImpl,0x8012BF3C,0xF +asm/non_matchings/code/z_rcp/Gfx_SetupDL.s,Gfx_SetupDL,0x8012BF78,0x8 +asm/non_matchings/code/z_rcp/Gfx_SetupDLAtPtr.s,Gfx_SetupDLAtPtr,0x8012BF98,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL57.s,Gfx_SetupDL57,0x8012BFC4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL57_b.s,Gfx_SetupDL57_b,0x8012BFEC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL52_NoCD.s,Gfx_SetupDL52_NoCD,0x8012C014,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL58_Opa.s,Gfx_SetupDL58_Opa,0x8012C058,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL57_Opa.s,Gfx_SetupDL57_Opa,0x8012C080,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL50_Opa.s,Gfx_SetupDL50_Opa,0x8012C0A8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL51_Opa.s,Gfx_SetupDL51_Opa,0x8012C0D0,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL52_Xlu.s,Gfx_SetupDL52_Xlu,0x8012C0F8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL53_Opa.s,Gfx_SetupDL53_Opa,0x8012C120,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL54_Opa.s,Gfx_SetupDL54_Opa,0x8012C148,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL55_Xlu.s,Gfx_SetupDL55_Xlu,0x8012C170,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL26.s,Gfx_SetupDL26,0x8012C198,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL26_Opa.s,Gfx_SetupDL26_Opa,0x8012C1C0,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL23.s,Gfx_SetupDL23,0x8012C1EC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL23_Opa.s,Gfx_SetupDL23_Opa,0x8012C214,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Xlu2.s,Gfx_SetupDL25_Xlu2,0x8012C240,0xA asm/non_matchings/code/z_rcp/func_8012C268.s,func_8012C268,0x8012C268,0x9 -asm/non_matchings/code/z_rcp/func_8012C28C.s,func_8012C28C,0x8012C28C,0xA -asm/non_matchings/code/z_rcp/func_8012C2B4.s,func_8012C2B4,0x8012C2B4,0xA -asm/non_matchings/code/z_rcp/func_8012C2DC.s,func_8012C2DC,0x8012C2DC,0xA -asm/non_matchings/code/z_rcp/func_8012C304.s,func_8012C304,0x8012C304,0xA -asm/non_matchings/code/z_rcp/func_8012C32C.s,func_8012C32C,0x8012C32C,0xA -asm/non_matchings/code/z_rcp/func_8012C354.s,func_8012C354,0x8012C354,0xA -asm/non_matchings/code/z_rcp/func_8012C37C.s,func_8012C37C,0x8012C37C,0xA -asm/non_matchings/code/z_rcp/func_8012C3A4.s,func_8012C3A4,0x8012C3A4,0xA -asm/non_matchings/code/z_rcp/func_8012C3CC.s,func_8012C3CC,0x8012C3CC,0xA -asm/non_matchings/code/z_rcp/func_8012C3F4.s,func_8012C3F4,0x8012C3F4,0xB -asm/non_matchings/code/z_rcp/func_8012C420.s,func_8012C420,0x8012C420,0xA -asm/non_matchings/code/z_rcp/func_8012C448.s,func_8012C448,0x8012C448,0xA -asm/non_matchings/code/z_rcp/func_8012C470.s,func_8012C470,0x8012C470,0xA -asm/non_matchings/code/z_rcp/func_8012C498.s,func_8012C498,0x8012C498,0xA -asm/non_matchings/code/z_rcp/func_8012C4C0.s,func_8012C4C0,0x8012C4C0,0xA -asm/non_matchings/code/z_rcp/func_8012C4E8.s,func_8012C4E8,0x8012C4E8,0xA -asm/non_matchings/code/z_rcp/func_8012C510.s,func_8012C510,0x8012C510,0xA -asm/non_matchings/code/z_rcp/func_8012C538.s,func_8012C538,0x8012C538,0xA -asm/non_matchings/code/z_rcp/func_8012C560.s,func_8012C560,0x8012C560,0xA -asm/non_matchings/code/z_rcp/func_8012C588.s,func_8012C588,0x8012C588,0xA -asm/non_matchings/code/z_rcp/func_8012C5B0.s,func_8012C5B0,0x8012C5B0,0xA -asm/non_matchings/code/z_rcp/func_8012C5D8.s,func_8012C5D8,0x8012C5D8,0xA -asm/non_matchings/code/z_rcp/func_8012C600.s,func_8012C600,0x8012C600,0xA -asm/non_matchings/code/z_rcp/func_8012C628.s,func_8012C628,0x8012C628,0xB -asm/non_matchings/code/z_rcp/func_8012C654.s,func_8012C654,0x8012C654,0xB -asm/non_matchings/code/z_rcp/func_8012C680.s,func_8012C680,0x8012C680,0xB -asm/non_matchings/code/z_rcp/func_8012C6AC.s,func_8012C6AC,0x8012C6AC,0xA -asm/non_matchings/code/z_rcp/func_8012C6D4.s,func_8012C6D4,0x8012C6D4,0xA -asm/non_matchings/code/z_rcp/func_8012C6FC.s,func_8012C6FC,0x8012C6FC,0xA -asm/non_matchings/code/z_rcp/func_8012C724.s,func_8012C724,0x8012C724,0xA -asm/non_matchings/code/z_rcp/func_8012C74C.s,func_8012C74C,0x8012C74C,0xA -asm/non_matchings/code/z_rcp/func_8012C774.s,func_8012C774,0x8012C774,0x11 -asm/non_matchings/code/z_rcp/func_8012C7B8.s,func_8012C7B8,0x8012C7B8,0x11 -asm/non_matchings/code/z_rcp/func_8012C7FC.s,func_8012C7FC,0x8012C7FC,0x11 -asm/non_matchings/code/z_rcp/func_8012C840.s,func_8012C840,0x8012C840,0xA -asm/non_matchings/code/z_rcp/func_8012C868.s,func_8012C868,0x8012C868,0x11 -asm/non_matchings/code/z_rcp/func_8012C8AC.s,func_8012C8AC,0x8012C8AC,0xA -asm/non_matchings/code/z_rcp/func_8012C8D4.s,func_8012C8D4,0x8012C8D4,0xA -asm/non_matchings/code/z_rcp/func_8012C8FC.s,func_8012C8FC,0x8012C8FC,0xA -asm/non_matchings/code/z_rcp/func_8012C924.s,func_8012C924,0x8012C924,0xA -asm/non_matchings/code/z_rcp/func_8012C94C.s,func_8012C94C,0x8012C94C,0xA -asm/non_matchings/code/z_rcp/func_8012C974.s,func_8012C974,0x8012C974,0x12 -asm/non_matchings/code/z_rcp/func_8012C9BC.s,func_8012C9BC,0x8012C9BC,0xA -asm/non_matchings/code/z_rcp/func_8012C9E4.s,func_8012C9E4,0x8012C9E4,0xA -asm/non_matchings/code/z_rcp/func_8012CA0C.s,func_8012CA0C,0x8012CA0C,0xB -asm/non_matchings/code/z_rcp/func_8012CA38.s,func_8012CA38,0x8012CA38,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Opa.s,Gfx_SetupDL25_Opa,0x8012C28C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL71.s,Gfx_SetupDL71,0x8012C2B4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL25_Xlu.s,Gfx_SetupDL25_Xlu,0x8012C2DC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL72.s,Gfx_SetupDL72,0x8012C304,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL31_Opa.s,Gfx_SetupDL31_Opa,0x8012C32C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL32_Opa.s,Gfx_SetupDL32_Opa,0x8012C354,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL33_Opa.s,Gfx_SetupDL33_Opa,0x8012C37C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL64.s,Gfx_SetupDL64,0x8012C3A4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL34.s,Gfx_SetupDL34,0x8012C3CC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL34_Opa.s,Gfx_SetupDL34_Opa,0x8012C3F4,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL35_Opa.s,Gfx_SetupDL35_Opa,0x8012C420,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL44_Xlu.s,Gfx_SetupDL44_Xlu,0x8012C448,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL36_Opa.s,Gfx_SetupDL36_Opa,0x8012C470,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL28.s,Gfx_SetupDL28,0x8012C498,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL28_Opa.s,Gfx_SetupDL28_Opa,0x8012C4C0,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL43_Opa.s,Gfx_SetupDL43_Opa,0x8012C4E8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL45_Opa.s,Gfx_SetupDL45_Opa,0x8012C510,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL46_Overlay.s,Gfx_SetupDL46_Overlay,0x8012C538,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL38_Xlu.s,Gfx_SetupDL38_Xlu,0x8012C560,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL4_Xlu.s,Gfx_SetupDL4_Xlu,0x8012C588,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL37_Opa.s,Gfx_SetupDL37_Opa,0x8012C5B0,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL2_Opa.s,Gfx_SetupDL2_Opa,0x8012C5D8,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL39.s,Gfx_SetupDL39,0x8012C600,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Opa.s,Gfx_SetupDL39_Opa,0x8012C628,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Overlay.s,Gfx_SetupDL39_Overlay,0x8012C654,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL39_Ptr.s,Gfx_SetupDL39_Ptr,0x8012C680,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL40_Opa.s,Gfx_SetupDL40_Opa,0x8012C6AC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL41_Opa.s,Gfx_SetupDL41_Opa,0x8012C6D4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL47_Xlu.s,Gfx_SetupDL47_Xlu,0x8012C6FC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL66.s,Gfx_SetupDL66,0x8012C724,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL67.s,Gfx_SetupDL67,0x8012C74C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL68_NoCD.s,Gfx_SetupDL68_NoCD,0x8012C774,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL69_NoCD.s,Gfx_SetupDL69_NoCD,0x8012C7B8,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL65_NoCD.s,Gfx_SetupDL65_NoCD,0x8012C7FC,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL70.s,Gfx_SetupDL70,0x8012C840,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL20_NoCD.s,Gfx_SetupDL20_NoCD,0x8012C868,0x11 +asm/non_matchings/code/z_rcp/Gfx_SetupDL42_Opa.s,Gfx_SetupDL42_Opa,0x8012C8AC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL42_Overlay.s,Gfx_SetupDL42_Overlay,0x8012C8D4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL48_Opa.s,Gfx_SetupDL48_Opa,0x8012C8FC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL49_Xlu.s,Gfx_SetupDL49_Xlu,0x8012C924,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL27_Xlu.s,Gfx_SetupDL27_Xlu,0x8012C94C,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL60_XluNoCD.s,Gfx_SetupDL60_XluNoCD,0x8012C974,0x12 +asm/non_matchings/code/z_rcp/Gfx_SetupDL61_Xlu.s,Gfx_SetupDL61_Xlu,0x8012C9BC,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL56_Opa.s,Gfx_SetupDL56_Opa,0x8012C9E4,0xA +asm/non_matchings/code/z_rcp/Gfx_SetupDL56_Ptr.s,Gfx_SetupDL56_Ptr,0x8012CA0C,0xB +asm/non_matchings/code/z_rcp/Gfx_SetupDL59_Opa.s,Gfx_SetupDL59_Opa,0x8012CA38,0xA asm/non_matchings/code/z_rcp/Gfx_BranchTexScroll.s,Gfx_BranchTexScroll,0x8012CA60,0x29 asm/non_matchings/code/z_rcp/func_8012CB04.s,func_8012CB04,0x8012CB04,0x9 asm/non_matchings/code/z_rcp/func_8012CB28.s,func_8012CB28,0x8012CB28,0x9 From 1ec875f6dccf7efd9d637cd27a1a500f35eed43e Mon Sep 17 00:00:00 2001 From: StickyThwomp <89738536+StickyThwomp@users.noreply.github.com> Date: Sun, 28 May 2023 21:17:43 -0500 Subject: [PATCH 08/36] ItemBHeart (Heart Container) OK and Documented (#1236) * ItemBHeart (Heart Container) OK and Documented * Add missing spawn params. * z_item_b_heart updates from review. * Rename ItemBHeart_UpdateRotationAndScale to ItemBHeart_UpdateModel * Address comments from review. * Rename unitScale to baseScale. * Fixed function names after master merge. --- spec | 3 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 10 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 6 +- .../actors/ovl_Item_B_Heart/z_item_b_heart.c | 101 ++++++++++++++++-- .../actors/ovl_Item_B_Heart/z_item_b_heart.h | 14 ++- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 2 +- 7 files changed, 117 insertions(+), 21 deletions(-) diff --git a/spec b/spec index 003c76dd4..4d327dc20 100644 --- a/spec +++ b/spec @@ -995,8 +995,7 @@ beginseg name "ovl_Item_B_Heart" compress include "build/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.o" - include "build/data/ovl_Item_B_Heart/ovl_Item_B_Heart.data.o" - include "build/data/ovl_Item_B_Heart/ovl_Item_B_Heart.reloc.o" + include "build/src/overlays/actors/ovl_Item_B_Heart/ovl_Item_B_Heart_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index 76889e41e..7220b5d06 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -553,7 +553,7 @@ void Boss02_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) && (this->actor.params == TWINMOLD_RED)) { sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, 60.0f, 0.0f, 0, 0, 0, 1); - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, BHEART_PARAM_NORMAL); } this->actor.targetMode = 10; @@ -1971,7 +1971,7 @@ void func_809DD934(Boss02* this, PlayState* play) { temp_a0_5->scale.z *= phi_f0_2; if (temp_a0_5->id == ACTOR_ITEM_B_HEART) { - ((ItemBHeart*)temp_a0_5)->unk_168 *= phi_f0_2; + ((ItemBHeart*)temp_a0_5)->baseScale *= phi_f0_2; } } temp_a0_5 = temp_a0_5->next; @@ -2210,10 +2210,12 @@ void func_809DEAC4(Boss02* this, PlayState* play) { this->unk_1D7E = 0; if (!sIsInGiantMode) { - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 30.0f, -150.0f, 0, 1, 0, + BHEART_PARAM_NORMAL); phi_f0 = 60.0f; } else { - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0, 35); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, 3153.0f, -15.0f, 0, 1, 0, + BHEART_PARAM_SMALL); phi_f0 = 3155.0f; } sBlueWarp = (DoorWarp1*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index a9096048a..ddd9d4830 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -51,6 +51,7 @@ #include "z_boss_03.h" #include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h" #include "overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h" +#include "overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_water_effect/object_water_effect.h" @@ -451,7 +452,8 @@ void Boss03_Init(Actor* thisx, PlayState* play2) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_GREAT_BAY_TEMPLE)) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0, 0, ENDOORWARP1_FF_1); - Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, 0); + Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, 0.0f, PLATFORM_HEIGHT, 0.0f, 0, 0, 0, + BHEART_PARAM_NORMAL); Actor_Kill(&this->actor); return; } @@ -1610,7 +1612,7 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, 0.0f, PLATFORM_HEIGHT, 200.0f, 0, 0, 0, ENDOORWARP1_FF_1); Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_B_HEART, this->actor.focus.pos.x, PLATFORM_HEIGHT, - this->actor.focus.pos.z, 0, 0, 0, 0); + this->actor.focus.pos.z, 0, 0, 0, BHEART_PARAM_NORMAL); this->csTimer = 0; Actor_SetScale(&this->actor, 0.0f); AudioSfx_StopByPos(&this->actor.projectedPos); diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c index c41f45579..661d24636 100644 --- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c +++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.c @@ -1,3 +1,9 @@ +/* + * File: z_item_b_heart.c + * Overlay: ovl_Item_B_Heart + * Description: Heart Container + */ + #include "z_item_b_heart.h" #include "objects/object_gi_hearts/object_gi_hearts.h" @@ -10,7 +16,8 @@ void ItemBHeart_Destroy(Actor* thisx, PlayState* play); void ItemBHeart_Update(Actor* thisx, PlayState* play); void ItemBHeart_Draw(Actor* thisx, PlayState* play); -/* +void ItemBHeart_UpdateModel(ItemBHeart* this, PlayState* play); + const ActorInit Item_B_Heart_InitVars = { ACTOR_ITEM_B_HEART, ACTORCAT_BOSS, @@ -20,16 +27,94 @@ const ActorInit Item_B_Heart_InitVars = { (ActorFunc)ItemBHeart_Init, (ActorFunc)ItemBHeart_Destroy, (ActorFunc)ItemBHeart_Update, - (ActorFunc)ItemBHeart_Draw + (ActorFunc)ItemBHeart_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Init.s") +static InitChainEntry sInitChain[] = { + ICHAIN_VEC3F_DIV1000(scale, 0, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 800, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 800, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Destroy.s") +void ItemBHeart_Init(Actor* thisx, PlayState* play) { + ItemBHeart* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Update.s") + if (Flags_GetCollectible(play, 0x1F)) { + Actor_Kill(&this->actor); + return; + } + Actor_ProcessInitChain(&this->actor, sInitChain); + ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.8f); + if (this->actor.params == BHEART_PARAM_SMALL) { + this->baseScale = BHEART_SCALE_SMALL; + } else { + this->baseScale = BHEART_SCALE_NORMAL; + } + this->actor.world.pos.y += 20.0f * this->baseScale; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/func_808BCF54.s") +void ItemBHeart_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Item_B_Heart/ItemBHeart_Draw.s") +/** + * Adjusts size and handles collection (if of proper baseScale) + */ +void ItemBHeart_Update(Actor* thisx, PlayState* play) { + ItemBHeart* this = THIS; + + ItemBHeart_UpdateModel(this, play); + + if (!(this->baseScale < BHEART_SCALE_MIN_COLLECTIBLE)) { + if (Actor_HasParent(&this->actor, play)) { + Flags_SetCollectible(play, 0x1F); + Actor_Kill(&this->actor); + return; + } + Actor_OfferGetItem(&this->actor, play, GI_HEART_CONTAINER, 30.0f, 80.0f); + } +} + +/** + * Rotate continuously while approaching 40% of object's unit scale. + */ +void ItemBHeart_UpdateModel(ItemBHeart* this, PlayState* play) { + this->actor.shape.rot.y += 0x400; + Math_ApproachF(&this->variableScale, 0.4f, 0.1f, 0.01f); + Actor_SetScale(&this->actor, this->variableScale * this->baseScale); +} + +/** + * Draw translucently when in front of a boss warp portal + */ +void ItemBHeart_Draw(Actor* thisx, PlayState* play) { + ItemBHeart* this = THIS; + Actor* actorIt; + u8 drawTranslucent = false; + + OPEN_DISPS(play->state.gfxCtx); + + actorIt = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; + + while (actorIt != NULL) { + if ((actorIt->id == ACTOR_DOOR_WARP1) && (actorIt->projectedPos.z > this->actor.projectedPos.z)) { + drawTranslucent = true; + break; + } + actorIt = actorIt->next; + } + + if (drawTranslucent || (this->actor.world.rot.y != 0)) { + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, &gGiHeartBorderDL); + gSPDisplayList(POLY_XLU_DISP++, &gGiHeartContainerDL); + } else { + Gfx_SetupDL25_Opa(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++, &gGiHeartBorderDL); + gSPDisplayList(POLY_OPA_DISP++, &gGiHeartContainerDL); + } + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h index 4e3126e25..7a071a8ec 100644 --- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h +++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h @@ -3,12 +3,20 @@ #include "global.h" -struct ItemBHeart; +typedef enum { + /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale. + /* 35 */ BHEART_PARAM_SMALL = 35, // Spawn Parameter for Small Scale. +} ItemBHeartParams; + +#define BHEART_SCALE_SMALL (0.1f) // Scale value for Small Mode +#define BHEART_SCALE_NORMAL (1.0f) // Scale value for Normal Mode +#define BHEART_SCALE_MIN_COLLECTIBLE (0.5f) // baseScale <50% will disable collection typedef struct ItemBHeart { /* 0x000 */ Actor actor; - /* 0x144 */ UNK_TYPE1 unk_144[0x24]; - /* 0x168 */ f32 unk_168; + /* 0x144 */ UNK_TYPE1 unk_144[0x20]; + /* 0x164 */ f32 variableScale; + /* 0x168 */ f32 baseScale; } ItemBHeart; // size = 0x16C #endif // Z_ITEM_B_HEART_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d4cb99aed..127fb34bf 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -6033,7 +6033,7 @@ 0x808BCDF0:("ItemBHeart_Init",), 0x808BCEA8:("ItemBHeart_Destroy",), 0x808BCEB8:("ItemBHeart_Update",), - 0x808BCF54:("func_808BCF54",), + 0x808BCF54:("ItemBHeart_UpdateModel",), 0x808BCFC4:("ItemBHeart_Draw",), 0x808BD1E0:("EnDekunuts_Init",), 0x808BD31C:("EnDekunuts_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index d09486c56..f3f90ba25 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -6470,7 +6470,7 @@ 0x808BCD44:("D_808BCD44","f32","",0x4), 0x808BCDE0:("sNumLitTorchesInGroup","UNK_TYPE1","",0x1), 0x808BD160:("Item_B_Heart_InitVars","UNK_TYPE1","",0x1), - 0x808BD180:("D_808BD180","UNK_TYPE1","",0x1), + 0x808BD180:("sInitChain","UNK_TYPE1","",0x1), 0x808BD190:("D_808BD190","f32","",0x4), 0x808BEF10:("En_Dekunuts_InitVars","UNK_TYPE1","",0x1), 0x808BEF30:("D_808BEF30","UNK_TYPE1","",0x1), From fc475a97565ade34d57f80970c6b5cebcc2892a7 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 28 May 2023 20:04:07 -0700 Subject: [PATCH 09/36] Docs Cleanup (#1153) * sysheap * Gorons * Update goron comment * functions.h * Update src/boot_O2/system_heap.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * add header * Fix header guards * Update data * Add malloc and free to header --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/object_oF1d_map.xml | 18 ++++---- include/functions.h | 4 -- include/system_heap.h | 11 +++++ include/system_malloc.h | 6 +-- spec | 2 +- .../{boot_800862E0.c => system_heap.c} | 41 +++++++++++-------- src/boot_O2/system_malloc.c | 2 +- src/code/main.c | 3 +- tools/disasm/files.txt | 4 +- tools/disasm/functions.txt | 18 ++++---- tools/sizes/boot_functions.csv | 18 ++++---- 11 files changed, 71 insertions(+), 56 deletions(-) create mode 100644 include/system_heap.h rename src/boot_O2/{boot_800862E0.c => system_heap.c} (66%) diff --git a/assets/xml/objects/object_oF1d_map.xml b/assets/xml/objects/object_oF1d_map.xml index 0f331cbce..a241eac13 100644 --- a/assets/xml/objects/object_oF1d_map.xml +++ b/assets/xml/objects/object_oF1d_map.xml @@ -47,16 +47,16 @@ - - + + - - - - - - - + + + + + + + diff --git a/include/functions.h b/include/functions.h index bcc79f9e5..0f99fb24b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -128,10 +128,6 @@ void MtxConv_L2F(MtxF* mtx, Mtx* mf); void __assert(const char* file, u32 lineNum); // void func_800862B4(void); -void* SystemArena_MallocMin1(u32 size); -void SystemArena_FreeNullCheck(void* ptr); -void SystemArena_RunInits(void); -void SystemArena_Init(void* start, size_t size); s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3); f32 func_80086760(f32 x); // void func_80086794(void); diff --git a/include/system_heap.h b/include/system_heap.h new file mode 100644 index 000000000..e0864cca6 --- /dev/null +++ b/include/system_heap.h @@ -0,0 +1,11 @@ +#ifndef SYSTEM_HEAP_H +#define SYSTEM_HEAP_H + +#include "libc/stddef.h" +#include "PR/ultratypes.h" + +void* SystemHeap_Malloc(size_t size); +void SystemHeap_Free(void* ptr); +void SystemHeap_Init(void* start, size_t size); + +#endif diff --git a/include/system_malloc.h b/include/system_malloc.h index e92eaf89f..cf91899ef 100644 --- a/include/system_malloc.h +++ b/include/system_malloc.h @@ -1,5 +1,5 @@ -#ifndef SYSTEM_MALLOC -#define SYSTEM_MALLOC +#ifndef SYSTEM_MALLOC_H +#define SYSTEM_MALLOC_H #include "PR/ultratypes.h" #include "os_malloc.h" @@ -11,7 +11,7 @@ void SystemArena_Free(void* ptr); void* SystemArena_Calloc(u32 elements, size_t size); void SystemArena_GetSizes(size_t* maxFreeBlock, size_t* bytesFree, size_t* bytesAllocated); u32 SystemArena_CheckArena(void); -void SystemArena_InitArena(void* start, size_t size); +void SystemArena_Init(void* start, size_t size); void SystemArena_Cleanup(void); u8 SystemArena_IsInitialized(void); diff --git a/spec b/spec index 4d327dc20..9bfbc750c 100644 --- a/spec +++ b/spec @@ -36,7 +36,7 @@ beginseg include "build/data/boot/gfxprint.data.o" include "build/src/boot_O2/mtxuty-cvt.o" include "build/src/boot_O2/assert.o" - include "build/src/boot_O2/boot_800862E0.o" + include "build/src/boot_O2/system_heap.o" include "build/src/boot_O2/padsetup.o" include "build/src/boot_O2/boot_80086760.o" include "build/asm/boot/fp.text.o" diff --git a/src/boot_O2/boot_800862E0.c b/src/boot_O2/system_heap.c similarity index 66% rename from src/boot_O2/boot_800862E0.c rename to src/boot_O2/system_heap.c index 5774af9da..66e53dc12 100644 --- a/src/boot_O2/boot_800862E0.c +++ b/src/boot_O2/system_heap.c @@ -1,3 +1,10 @@ +/** + * @file system_heap.c + * + * @note: + * Only SystemHeap_Init() is used, and is essentially just a wrapper for SystemArena_Init(). + * + */ #include "global.h" #include "system_malloc.h" @@ -6,20 +13,20 @@ typedef void (*BlockFunc1)(void*, u32); typedef void (*BlockFunc8)(void*, u32, u32, u32, u32, u32, u32, u32, u32); typedef struct InitFunc { - uintptr_t nextOffset; - void (*func)(void); -} InitFunc; + /* 0x0 */ uintptr_t nextOffset; + /* 0x4 */ void (*func)(void); +} InitFunc; // size = 0x8 void* sInitFuncs = NULL; -char sNew[] = { 0x00, 0x00, 0x00, 0x00 }; +char sNew[] = ""; -char D_80097508[] = { +UNK_TYPE1 D_80097508[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, }; -void* SystemArena_MallocMin1(size_t size) { +void* SystemHeap_Malloc(size_t size) { if (size == 0) { size = 1; } @@ -27,13 +34,13 @@ void* SystemArena_MallocMin1(size_t size) { return __osMalloc(&gSystemArena, size); } -void SystemArena_FreeNullCheck(void* ptr) { +void SystemHeap_Free(void* ptr) { if (ptr != NULL) { __osFree(&gSystemArena, ptr); } } -void SystemArena_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc blockFunc) { +void SystemHeap_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc blockFunc) { uintptr_t pos = blk; for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) { @@ -41,7 +48,7 @@ void SystemArena_RunBlockFunc(void* blk, size_t nBlk, size_t blkSize, BlockFunc } } -void SystemArena_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc) { +void SystemHeap_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc) { uintptr_t pos = blk; for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) { @@ -49,9 +56,9 @@ void SystemArena_RunBlockFunc1(void* blk, size_t nBlk, size_t blkSize, BlockFunc } } -void* SystemArena_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc8 blockFunc) { +void* SystemHeap_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc8 blockFunc) { if (blk == NULL) { - blk = SystemArena_MallocMin1(nBlk * blkSize); + blk = SystemHeap_Malloc(nBlk * blkSize); } if (blk != NULL && blockFunc != NULL) { @@ -65,7 +72,7 @@ void* SystemArena_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFun return blk; } -void SystemArena_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc, s32 shouldFree) { +void SystemHeap_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, BlockFunc1 blockFunc, s32 shouldFree) { uintptr_t pos; uintptr_t start; size_t maskedBlkSize; @@ -86,11 +93,11 @@ void SystemArena_RunBlockFunc1Reverse(void* blk, size_t nBlk, size_t blkSize, Bl } if (shouldFree) { - SystemArena_FreeNullCheck(blk); + SystemHeap_Free(blk); } } -void SystemArena_RunInits(void) { +void SystemHeap_RunInits(void) { InitFunc* initFunc = (InitFunc*)&sInitFuncs; u32 nextOffset = initFunc->nextOffset; InitFunc* prev = NULL; @@ -110,7 +117,7 @@ void SystemArena_RunInits(void) { sInitFuncs = prev; } -void SystemArena_Init(void* start, size_t size) { - SystemArena_InitArena(start, size); - SystemArena_RunInits(); +void SystemHeap_Init(void* start, size_t size) { + SystemArena_Init(start, size); + SystemHeap_RunInits(); } diff --git a/src/boot_O2/system_malloc.c b/src/boot_O2/system_malloc.c index 56608166c..cea017b38 100644 --- a/src/boot_O2/system_malloc.c +++ b/src/boot_O2/system_malloc.c @@ -38,7 +38,7 @@ u32 SystemArena_CheckArena(void) { return __osCheckArena(&gSystemArena); } -void SystemArena_InitArena(void* start, size_t size) { +void SystemArena_Init(void* start, size_t size) { __osMallocInit(&gSystemArena, start, size); } diff --git a/src/code/main.c b/src/code/main.c index 6eadd591a..186240489 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -8,6 +8,7 @@ #include "buffers.h" #include "stack.h" #include "stackcheck.h" +#include "system_heap.h" extern OSMesgQueue sSiIntMsgQ; extern OSMesg sSiIntMsgBuf[1]; @@ -44,7 +45,7 @@ void Main(void* arg) { sysHeap = gSystemHeap; fb = 0x80780000; startHeapSize = fb - sysHeap; - SystemArena_Init(sysHeap, startHeapSize); + SystemHeap_Init(sysHeap, startHeapSize); Regs_Init(); diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 88fab2cab..df205189f 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -57,7 +57,7 @@ 0x80085570 : "gfxprint", 0x80086110 : "mtxuty-cvt", 0x80086280 : "assert", - 0x800862E0 : "", + 0x800862E0 : "system_heap", 0x80086620 : "padsetup", 0x80086760 : "boot_80086760", 0x80086C70 : "fp", @@ -256,7 +256,7 @@ 0x80096C30 : "loadfragment2", 0x80096C40 : "stackcheck", 0x80096C50 : "gfxprint", - 0x80097500 : "boot_800862E0", + 0x80097500 : "system_heap", 0x80097520 : "fp", 0x80097530 : "rand", 0x80097540 : "osViModeNtscHpf1", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 127fb34bf..0422c71e2 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -157,14 +157,14 @@ 0x80086258:("MtxConv_L2F",), 0x80086280:("__assert",), 0x800862B4:("func_800862B4",), - 0x800862E0:("SystemArena_MallocMin1",), - 0x80086310:("SystemArena_FreeNullCheck",), - 0x8008633C:("SystemArena_RunBlockFunc",), - 0x800863AC:("SystemArena_RunBlockFunc1",), - 0x8008641C:("SystemArena_RunBlockFunc8",), - 0x800864EC:("SystemArena_RunBlockFunc1Reverse",), - 0x80086588:("SystemArena_RunInits",), - 0x800865F8:("SystemArena_Init",), + 0x800862E0:("SystemHeap_Malloc",), + 0x80086310:("SystemHeap_Free",), + 0x8008633C:("SystemHeap_RunBlockFunc",), + 0x800863AC:("SystemHeap_RunBlockFunc1",), + 0x8008641C:("SystemHeap_RunBlockFunc8",), + 0x800864EC:("SystemHeap_RunBlockFunc1Reverse",), + 0x80086588:("SystemHeap_RunInits",), + 0x800865F8:("SystemHeap_Init",), 0x80086620:("PadSetup_Init",), 0x80086760:("func_80086760",), 0x80086794:("func_80086794",), @@ -206,7 +206,7 @@ 0x80086E78:("SystemArena_Calloc",), 0x80086ECC:("SystemArena_GetSizes",), 0x80086F04:("SystemArena_CheckArena",), - 0x80086F28:("SystemArena_InitArena",), + 0x80086F28:("SystemArena_Init",), 0x80086F58:("SystemArena_Cleanup",), 0x80086F7C:("SystemArena_IsInitialized",), 0x80086FA0:("Rand_Next",), diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index bbcf6d5de..744376bcc 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -154,14 +154,14 @@ asm/non_matchings/boot/mtxuty-cvt/MtxConv_F2L.s,MtxConv_F2L,0x80086110,0x52 asm/non_matchings/boot/mtxuty-cvt/MtxConv_L2F.s,MtxConv_L2F,0x80086258,0xA asm/non_matchings/boot/assert/__assert.s,__assert,0x80086280,0xD asm/non_matchings/boot/assert/func_800862B4.s,func_800862B4,0x800862B4,0xB -asm/non_matchings/boot/boot_800862E0/SystemArena_MallocMin1.s,SystemArena_MallocMin1,0x800862E0,0xC -asm/non_matchings/boot/boot_800862E0/SystemArena_FreeNullCheck.s,SystemArena_FreeNullCheck,0x80086310,0xB -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc.s,SystemArena_RunBlockFunc,0x8008633C,0x1C -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc1.s,SystemArena_RunBlockFunc1,0x800863AC,0x1C -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc8.s,SystemArena_RunBlockFunc8,0x8008641C,0x34 -asm/non_matchings/boot/boot_800862E0/SystemArena_RunBlockFunc1Reverse.s,SystemArena_RunBlockFunc1Reverse,0x800864EC,0x27 -asm/non_matchings/boot/boot_800862E0/SystemArena_RunInits.s,SystemArena_RunInits,0x80086588,0x1C -asm/non_matchings/boot/boot_800862E0/SystemArena_Init.s,SystemArena_Init,0x800865F8,0xA +asm/non_matchings/boot/boot_800862E0/SystemHeap_Malloc.s,SystemHeap_Malloc,0x800862E0,0xC +asm/non_matchings/boot/boot_800862E0/SystemArena_Free.s,SystemArena_Free,0x80086310,0xB +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc.s,SystemHeap_RunBlockFunc,0x8008633C,0x1C +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1.s,SystemHeap_RunBlockFunc1,0x800863AC,0x1C +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc8.s,SystemHeap_RunBlockFunc8,0x8008641C,0x34 +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1Reverse.s,SystemHeap_RunBlockFunc1Reverse,0x800864EC,0x27 +asm/non_matchings/boot/boot_800862E0/SystemHeap_RunInits.s,SystemHeap_RunInits,0x80086588,0x1C +asm/non_matchings/boot/boot_800862E0/SystemHeap_Init.s,SystemHeap_Init,0x800865F8,0xA asm/non_matchings/boot/padsetup/PadSetup_Init.s,PadSetup_Init,0x80086620,0x50 asm/non_matchings/boot/boot_80086760/func_80086760.s,func_80086760,0x80086760,0xD asm/non_matchings/boot/boot_80086760/func_80086794.s,func_80086794,0x80086794,0x8 @@ -203,7 +203,7 @@ asm/non_matchings/boot/system_malloc/SystemArena_Free.s,SystemArena_Free,0x80086 asm/non_matchings/boot/system_malloc/SystemArena_Calloc.s,SystemArena_Calloc,0x80086E78,0x15 asm/non_matchings/boot/system_malloc/SystemArena_GetSizes.s,SystemArena_GetSizes,0x80086ECC,0xE asm/non_matchings/boot/system_malloc/SystemArena_CheckArena.s,SystemArena_CheckArena,0x80086F04,0x9 -asm/non_matchings/boot/system_malloc/SystemArena_InitArena.s,SystemArena_InitArena,0x80086F28,0xC +asm/non_matchings/boot/system_malloc/SystemArena_Init.s,SystemArena_Init,0x80086F28,0xC asm/non_matchings/boot/system_malloc/SystemArena_Cleanup.s,SystemArena_Cleanup,0x80086F58,0x9 asm/non_matchings/boot/system_malloc/SystemArena_IsInitialized.s,SystemArena_IsInitialized,0x80086F7C,0x9 asm/non_matchings/boot/rand/Rand_Next.s,Rand_Next,0x80086FA0,0xC From aa0a968791eb62ab02f2ce0b9e073362ebdd7243 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 30 May 2023 02:04:21 +1000 Subject: [PATCH 10/36] Kaleido OK & icon_item_vtx_static (Documented) (#1243) * Begin Kaleido * WIP * DW macros for gbi * More Progress * Match KaleidoScope_GrayOutTextureRGBA32 * DrawGameOver wip * Add some function names * A few more matching, some docs * More docs, data wip * Import Kaleido Data * Data cleanup * Some progress * Match TitleCard_Draw Again (Thanks Roman) * Match KaleidoScope_DrawDebugEditor * KaleidoScope_UpdateDebugEditor WIP * Some cleanup * z_kaleido_debug.c OK * Cleanup * match func_8081B6EC * more wip, data cleanup * match func_80825A50 * match KaleidoScope_InitVertices * cursor progress * name func * item headers * match KaleidoScope_DrawItemSelect * KaleidoScope_UpdateItemEquip WIP * match kaleido item * doc kaleido item * z_kaleido_prompt ok * kaleido mask setup * small cleanup * kaleido mask OK * mask cleanup * small fix * quest page setup * doc save prompt * sync with prompt docs * KaleidoScope_Update WIP * More progress on KaleidoScope_Update * kaleido update cleanup * KaleidoScope_Update OK * Slightly cleaner match in KaleidoScope_Update * match KaleidoScope_DrawPages and KaleidoScope_DrawGameOver, organize data * more cleanup * match KaleidoScope_Draw and KaleidoScope_SetView * match KaleidoScope_UpdateNamePanel * match another 2 funcs, segment docs * another KaleidoScope_UpdateNamePanel ? * swap update name panel names * another match, only 2 large/similar vtx function in kaleido nes * more setup for drawInfoPanel * match KaleidoScope_DrawDungeonStrayFairyCount, 8 funcs left * document KaleidoScope_DrawDungeonStrayFairyCount * KaleidoScope_DrawInfoPanel1 WIP * match KaleidoScope_DrawInfoPanel2 * gameover pause states * name two pause states * match KaleidoScope_UpdateDungeonCursor and KaleidoScope_UpdateWorldMapCursor * match KaleidoScope_DrawDungeonMap * KaleidoScope_DrawWorldMap WIP * cleanup map * some cursor/texture docs * more cursor docs * KaleidoScope_UpdateQuestCursor wip * match KaleidoScope_UpdateQuestCursor * quest cleanup * KaleidoScope_DrawQuestStatus WIP, broke gakufu * match KaleidoScope_DrawInfoPanel1, Kaleido NES OK * pause substates * more cleanup * map progress * very small improvements to KaleidoScope_DrawWorldMap * match KaleidoScope_DrawWorldMap * cleanup KaleidoScope_DrawWorldMap * rematch EnGakufu_ProcessNotes, thanks anon58 * gameover and misc docs * more docs * small cleanup of maps * owl warp and other docs * symmetry in pause state * some docs and cleanup * docs * more docs from OoT WIP * fix * quest page docs * more enums * more cleanup and enums * another round of docs * doc cursor indices * map docs * some docs * cleanup for-loops * cleanup * else if * small docs * icon_item_field_static * dungeon static * eol * icon item jpn static * vtx static * jpn static comments * import parameter texture functions * mask cleanup * sync with PRs * some docs * more docs * fix bss * some docs * sync with PR * quest docs * fix quest vtx * sync with PR * sync with PR * fix typo * small cleanup * vtx madness * more vtx * add quad docs * cleanup vtx * cleanup * cleanup * revert gbi changes * cleanup * more cleanup * another cleanup * remove empty comment * some PR review * more naming suggestions * namefixer * L button to Z button --------- Co-authored-by: Derek Hensley --- assets/xml/interface/icon_item_vtx_static.xml | 12 + include/variables.h | 2 +- include/z64.h | 18 +- spec | 6 +- src/code/z_actor.c | 30 +- src/code/z_kaleido_scope_call.c | 4 +- src/code/z_kaleido_setup.c | 2 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 16 +- .../ovl_kaleido_scope/z_kaleido_item.c | 12 +- .../ovl_kaleido_scope/z_kaleido_map.c | 26 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 12 +- .../ovl_kaleido_scope/z_kaleido_scope.h | 62 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 1338 +++++++++++++++-- tools/disasm/functions.txt | 20 +- tools/disasm/variables.txt | 60 +- undefined_syms.txt | 14 - 16 files changed, 1413 insertions(+), 221 deletions(-) create mode 100644 assets/xml/interface/icon_item_vtx_static.xml diff --git a/assets/xml/interface/icon_item_vtx_static.xml b/assets/xml/interface/icon_item_vtx_static.xml new file mode 100644 index 000000000..37ccb0063 --- /dev/null +++ b/assets/xml/interface/icon_item_vtx_static.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/include/variables.h b/include/variables.h index 4e3559077..e7dc43da0 100644 --- a/include/variables.h +++ b/include/variables.h @@ -600,7 +600,7 @@ extern UNK_PTR D_801C5CB0; // extern UNK_TYPE2 D_801C6A8C; // extern UNK_TYPE2 D_801C6A90; // extern UNK_TYPE2 D_801C6A94; -extern u8 D_801C6A98[5][5]; +extern u8 gPageSwitchNextButtonStatus[6][5]; // extern UNK_TYPE1 D_801C6AB8; // extern UNK_TYPE1 D_801C6B28; // extern UNK_TYPE1 D_801CED40; diff --git a/include/z64.h b/include/z64.h index 05aad655e..12738f9a7 100644 --- a/include/z64.h +++ b/include/z64.h @@ -200,7 +200,7 @@ typedef struct { /* 0x204 */ u16 pageIndex; /* 0x206 */ u16 switchPageTimer; /* 0x208 */ u16 savePromptState; - /* 0x20C */ f32 unk_20C; + /* 0x20C */ f32 unk_20C; // set to 936.0f, unused remnant from OoT /* 0x210 */ f32 itemPageRoll; // rotation (-z) of the item page into the screen /* 0x214 */ f32 mapPageRoll; // rotation (+x) of the map page into the screen /* 0x218 */ f32 questPageRoll; // rotation (+z) of the quest page into the screen @@ -216,7 +216,7 @@ typedef struct { /* 0x24C */ s16 cursorYIndex[5]; /* 0x256 */ s16 unk_256; // Uses DungeonItem enum /* 0x258 */ s16 cursorSpecialPos; - /* 0x25A */ s16 pageSwitchTimer; + /* 0x25A */ s16 pageSwitchInputTimer; // Used to introduce a delay before switching page when arriving on the "scroll left/right" positions while holding stick left/right. /* 0x25C */ u16 namedItem; /* 0x25E */ u16 cursorItem[5]; /* 0x268 */ u16 cursorSlot[5]; @@ -227,15 +227,15 @@ typedef struct { /* 0x27A */ s16 equipAnimY; /* 0x27C */ s16 equipAnimAlpha; /* 0x27E */ s16 infoPanelOffsetY; - /* 0x280 */ u16 unk_280; + /* 0x280 */ u16 nameDisplayTimer; /* 0x282 */ u16 nameColorSet; /* 0x284 */ s16 cursorColorSet; - /* 0x286 */ s16 unk_286; - /* 0x288 */ f32 unk_288; - /* 0x28C */ f32 unk_28C; - /* 0x290 */ f32 unk_290; - /* 0x294 */ f32 unk_294; - /* 0x298 */ f32 unk_298; + /* 0x286 */ s16 cursorSpinPhase; + /* 0x288 */ f32 cursorX; + /* 0x28C */ f32 cursorY; + /* 0x290 */ f32 cursorWidth; + /* 0x294 */ f32 cursorHeight; + /* 0x298 */ f32 cursorShrinkRate; /* 0x29C */ s16 promptChoice; // save/continue choice: 0 = yes; 4 = no /* 0x29E */ s16 promptAlpha; /* 0x2A0 */ s16 ocarinaSongIndex; diff --git a/spec b/spec index 9bfbc750c..a4e38cc6f 100644 --- a/spec +++ b/spec @@ -325,7 +325,8 @@ beginseg name "icon_item_vtx_static" compress romalign 0x1000 - include "build/baserom/icon_item_vtx_static.o" + include "build/assets/interface/icon_item_vtx_static/icon_item_vtx_static.o" + number 11 endseg beginseg @@ -692,8 +693,7 @@ beginseg include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.o" include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_prompt.o" include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.o" - include "build/data/ovl_kaleido_scope/ovl_kaleido_scope.bss.o" - include "build/data/ovl_kaleido_scope/ovl_kaleido_scope.reloc.o" + include "build/src/overlays/kaleido_scope/ovl_kaleido_scope/ovl_kaleido_scope_reloc.o" endseg beginseg diff --git a/src/code/z_actor.c b/src/code/z_actor.c index e86a341fd..3d98c8f46 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -849,17 +849,12 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) { if (titleCtx->alpha != 0) { s32 width = titleCtx->width; s32 height = titleCtx->height; - s32 unk1; - s32 spC0; - s32 sp38; - s32 spB8; - s32 spB4; - s32 temp; - - temp = width * 2; - spC0 = (titleCtx->x * 4) - temp; - spB8 = (titleCtx->y * 4) - (height * 2); - sp38 = width * 2; + s32 doubleWidth = width * 2; + s32 titleX = (titleCtx->x * 4) - doubleWidth; + s32 doubleHeight = height * 2; + s32 titleY = (titleCtx->y * 4) - doubleHeight; + s32 titleSecondY; + s32 textureLanguageOffset; OPEN_DISPS(gameState->gfxCtx); @@ -867,29 +862,30 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) { height = TMEM_SIZE / width; } - spB4 = spB8 + (height * 4); + titleSecondY = titleY + (height * 4); OVERLAY_DISP = Gfx_SetupDL52_NoCD(OVERLAY_DISP); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->alpha); - gDPLoadTextureBlock(OVERLAY_DISP++, (s32*)titleCtx->texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, + gDPLoadTextureBlock(OVERLAY_DISP++, titleCtx->texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(OVERLAY_DISP++, spC0, spB8, ((sp38 * 2) + spC0) - 4, spB8 + (height * 4) - 1, + gSPTextureRectangle(OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); height = titleCtx->height - height; + // If texture is bigger than 0x1000, display the rest if (height > 0) { - gDPLoadTextureBlock(OVERLAY_DISP++, (s32)titleCtx->texture + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, width, + gDPLoadTextureBlock(OVERLAY_DISP++, (uintptr_t)titleCtx->texture + 0x1000, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(OVERLAY_DISP++, spC0, spB4, ((sp38 * 2) + spC0) - 4, spB4 + (height * 4) - 1, - G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + gSPTextureRectangle(OVERLAY_DISP++, titleX, titleSecondY, ((doubleWidth * 2) + titleX) - 4, + titleSecondY + (height * 4) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } CLOSE_DISPS(gameState->gfxCtx); diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index 59fde2f2d..d0f757125 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -40,13 +40,13 @@ void KaleidoScopeCall_Update(PlayState* play) { if (ShrinkWindow_Letterbox_GetSize() == 0) { R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING; pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; } } else if (pauseCtx->state == PAUSE_STATE_GAMEOVER_0) { R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_SETUP; pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING; pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1; } else if ((pauseCtx->state == PAUSE_STATE_OPENING_1) || (pauseCtx->state == PAUSE_STATE_GAMEOVER_1) || (pauseCtx->state == PAUSE_STATE_OWLWARP_1)) { diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index 148aad84e..130fa88db 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -145,7 +145,7 @@ void KaleidoSetup_Init(PlayState* play) { pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; - pauseCtx->pageSwitchTimer = 0; + pauseCtx->pageSwitchInputTimer = 0; pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE; pauseCtx->cursorItem[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 75c031c0a..1b8511b50 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -13,7 +13,7 @@ extern TexturePtr D_08061000; // gBombersNotebookIconTex extern TexturePtr D_08062000; // gSongNoteIconTex s16 sQuestRemainsColorTimerInit[] = { 120, 60, 2, 80 }; -s16 sQuestHpColorTimerInit[] = { 20, 4, 20, 10 }; +s16 sQuestHpColorTimerInits[] = { 20, 4, 20, 10 }; s16 sQuestSongPlayedOcarinaButtonsNum = 0; u8 sQuestSongPlayedOcarinaButtons[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; s16 sQuestSongPlayedOcarinaButtonsAlpha[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -313,7 +313,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play) { sQuestHpPrimGreen = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][1]; sQuestHpPrimBlue = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][2]; sQuestHpPrimAlpha = sQuestHpPrimColorTargets[sQuestHpPrimColorTargetIndex][3]; - sQuestHpColorTimer = sQuestHpColorTimerInit[sQuestHpPrimColorTargetIndex]; + sQuestHpColorTimer = sQuestHpColorTimerInits[sQuestHpPrimColorTargetIndex]; if (++sQuestHpPrimColorTargetIndex > 3) { sQuestHpPrimColorTargetIndex = 0; } @@ -618,7 +618,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; nextCursorPoint = sCursorPointLinks[oldCursorPoint].left; if (nextCursorPoint == CURSOR_TO_LEFT) { @@ -641,7 +641,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { if (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; nextCursorPoint = sCursorPointLinks[oldCursorPoint].right; if (nextCursorPoint == CURSOR_TO_RIGHT) { @@ -666,7 +666,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { nextCursorPoint = sCursorPointLinks[oldCursorPoint].down; while (nextCursorPoint > CURSOR_NONE) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) { break; } @@ -679,7 +679,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { } nextCursorPoint = sCursorPointLinks[oldCursorPoint].up; while (nextCursorPoint > CURSOR_NONE) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (KaleidoScope_UpdateQuestStatusPoint(pauseCtx, nextCursorPoint)) { break; } @@ -907,7 +907,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_BOMBERS_NOTEBOOK; if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { @@ -925,7 +925,7 @@ void KaleidoScope_UpdateQuestCursor(PlayState* play) { AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_OFF); } - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorPoint[PAUSE_QUEST] = QUEST_REMAINS_GOHT; if (CHECK_QUEST_ITEM(pauseCtx->cursorPoint[PAUSE_QUEST])) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index c8d963bda..f46db573c 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -382,7 +382,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { while (moveCursorResult == PAUSE_CURSOR_RESULT_NONE) { if (pauseCtx->stickAdjX < -30) { // move cursor left - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_ITEM] != 0) { pauseCtx->cursorXIndex[PAUSE_ITEM]--; pauseCtx->cursorPoint[PAUSE_ITEM]--; @@ -413,7 +413,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } } else if (pauseCtx->stickAdjX > 30) { // move cursor right - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_ITEM] <= 4) { pauseCtx->cursorXIndex[PAUSE_ITEM]++; pauseCtx->cursorPoint[PAUSE_ITEM]++; @@ -451,7 +451,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { if (pauseCtx->stickAdjX > 30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorYIndex = 0; cursorXIndex = 0; cursorPoint = 0; // top row, left column (SLOT_OCARINA) @@ -489,7 +489,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } } else { // PAUSE_CURSOR_PAGE_RIGHT if (pauseCtx->stickAdjX < -30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorXIndex = 5; cursorPoint = 5; // top row, right columne (SLOT_TRADE_DEED) cursorYIndex = 0; @@ -541,7 +541,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_ITEM] != 0) { pauseCtx->cursorYIndex[PAUSE_ITEM]--; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorPoint[PAUSE_ITEM] -= 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; } else { @@ -553,7 +553,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_ITEM] < 3) { pauseCtx->cursorYIndex[PAUSE_ITEM]++; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorPoint[PAUSE_ITEM] += 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; } else { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c index 6539f1b9e..a4df2c889 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c @@ -152,7 +152,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play) { // QUAD_MAP_PAGE_DUNGEON_BOSS_KEY, // QUAD_MAP_PAGE_DUNGEON_COMPASS, // QUAD_MAP_PAGE_DUNGEON_MAP - gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 16, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[QUAD_MAP_PAGE_DUNGEON_TITLE * 4], 4 * 4, 0); // Dungeon Title gDPPipeSync(POLY_OPA_DISP++); @@ -317,9 +317,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_WHITE; oldCursorPoint = pauseCtx->cursorPoint[PAUSE_MAP]; if (pauseCtx->stickAdjX > 30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorXIndex[PAUSE_MAP] = 0; pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->unk_256; pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->unk_256; @@ -345,9 +345,9 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } } } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); pauseCtx->cursorXIndex[PAUSE_MAP] = 1; pauseCtx->cursorPoint[PAUSE_MAP] = DUNGEON_MAP; if (!CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.dungeonIndex)) { @@ -390,7 +390,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { gBitFlags[i]) || func_801090B0(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; break; } } @@ -411,7 +411,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { gBitFlags[i]) || func_801090B0(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; break; } } @@ -854,7 +854,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { if (pauseCtx->cursorSpecialPos == 0) { if (pauseCtx->stickAdjX > 30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; while (true) { @@ -869,7 +869,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { } } } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; while (true) { @@ -898,7 +898,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { if (pauseCtx->stickAdjX > 30) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = -1; pauseCtx->cursorSpecialPos = 0; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++; @@ -923,7 +923,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { } else if (pauseCtx->stickAdjX < -30) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 11; pauseCtx->cursorSpecialPos = 0; - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; while (true) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--; @@ -958,7 +958,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { oldCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; if (pauseCtx->stickAdjX > 30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; do { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]++; @@ -967,7 +967,7 @@ void KaleidoScope_UpdateWorldMapCursor(PlayState* play) { } } while (!pauseCtx->worldMapPoints[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]); } else if (pauseCtx->stickAdjX < -30) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; sStickAdjTimer = 0; do { pauseCtx->cursorPoint[PAUSE_WORLD_MAP]--; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 67a8e0d36..228f0d16a 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -309,7 +309,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { while (moveCursorResult == PAUSE_CURSOR_RESULT_NONE) { if (pauseCtx->stickAdjX < -30) { // move cursor left - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_MASK] != 0) { pauseCtx->cursorXIndex[PAUSE_MASK]--; pauseCtx->cursorPoint[PAUSE_MASK]--; @@ -339,7 +339,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } } else if (pauseCtx->stickAdjX > 30) { // move cursor right - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; if (pauseCtx->cursorXIndex[PAUSE_MASK] <= 4) { pauseCtx->cursorXIndex[PAUSE_MASK]++; pauseCtx->cursorPoint[PAUSE_MASK]++; @@ -380,7 +380,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { if (pauseCtx->stickAdjX > 30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorYIndex = 0; cursorXIndex = 0; cursorPoint = 0; // top row, left column (SLOT_MASK_POSTMAN) @@ -421,7 +421,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { //! FAKE: if (1) {} if (pauseCtx->stickAdjX < -30) { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); cursorXIndex = 5; cursorPoint = 5; // top row, right column (SLOT_MASK_DEKU) cursorYIndex = 0; @@ -473,7 +473,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // move cursor up moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_MASK] != 0) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorYIndex[PAUSE_MASK]--; pauseCtx->cursorPoint[PAUSE_MASK] -= 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; @@ -485,7 +485,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // move cursor down moveCursorResult = PAUSE_CURSOR_RESULT_SPECIAL_POS; if (pauseCtx->cursorYIndex[PAUSE_MASK] < 3) { - pauseCtx->unk_298 = 4.0f; + pauseCtx->cursorShrinkRate = 4.0f; pauseCtx->cursorYIndex[PAUSE_MASK]++; pauseCtx->cursorPoint[PAUSE_MASK] += 6; moveCursorResult = PAUSE_CURSOR_RESULT_SLOT; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h index a9aeed70f..c82a40e67 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h @@ -76,9 +76,9 @@ typedef enum { } PauseMainState; typedef enum { - /* 0x00 */ PAUSE_SAVEPROMPT_STATE_0, + /* 0x00 */ PAUSE_SAVEPROMPT_STATE_APPEARING, /* 0x01 */ PAUSE_SAVEPROMPT_STATE_1, - /* 0x02 */ PAUSE_SAVEPROMPT_STATE_2, + /* 0x02 */ PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU, /* 0x03 */ PAUSE_SAVEPROMPT_STATE_3, /* 0x04 */ PAUSE_SAVEPROMPT_STATE_4, /* 0x05 */ PAUSE_SAVEPROMPT_STATE_5, @@ -303,9 +303,35 @@ typedef enum { /* 66 */ QUAD_MAP_PAGE_WORLD_MAX } WorldMapPageQuad; +// === INFO PANEL === // + +/** + * infoPanelVtx + * + * infoPanelVtx[0] name panel left texture + * infoPanelVtx[4] name panel right texture + * infoPanelVtx[8] Z Button icon + * infoPanelVtx[12] R Button icon + * infoPanelVtx[16] A button icon (or name segment) + * infoPanelVtx[20] pause-to-decide texture + * infoPanelVtx[24] (unused) oot remnant of Gold Skulltula Icon Texture + */ + #define PAUSE_NAME_COLOR_SET_WHITE 0 #define PAUSE_NAME_COLOR_SET_GREY 1 +// === CURSOR === // + +/** + * cursorVtx + * + * cursorVtx[0] cursor circle + * cursorVtx[4] (unused) oot remnant of top-right corner of cursor + * cursorVtx[8] (unused) oot remnant of bottom-left corner of cursor + * cursorVtx[12] (unused) oot remnant of bottom-right corner of cursor + * cursorVtx[16] equipping item icon (while moving) + */ + #define PAUSE_CURSOR_COLOR_SET_WHITE 0 #define PAUSE_CURSOR_COLOR_SET_YELLOW 2 #define PAUSE_CURSOR_COLOR_SET_BLUE 4 @@ -326,6 +352,36 @@ typedef enum { /* 5 */ PAUSE_QUAD_CURSOR_MAX } PauseCursorQuad; +// === PROMPT === // + +/** + * promptPageVtx (unused in MM, inferred from OoT) + * + * // PAGE_BG_QUADS + * promptPageVtx[0] prompt page background texture: row 0, column 0 + * promptPageVtx[4] prompt page background texture: row 1, column 0 + * promptPageVtx[8] prompt page background texture: row 2, column 0 + * promptPageVtx[12] prompt page background texture: row 3, column 0 + * promptPageVtx[16] prompt page background texture: row 4, column 0 + * promptPageVtx[20] prompt page background texture: row 0, column 1 + * promptPageVtx[24] prompt page background texture: row 1, column 1 + * promptPageVtx[28] prompt page background texture: row 2, column 1 + * promptPageVtx[32] prompt page background texture: row 3, column 1 + * promptPageVtx[36] prompt page background texture: row 4, column 1 + * promptPageVtx[40] prompt page background texture: row 0, column 2 + * promptPageVtx[44] prompt page background texture: row 1, column 2 + * promptPageVtx[48] prompt page background texture: row 2, column 2 + * promptPageVtx[52] prompt page background texture: row 3, column 2 + * promptPageVtx[56] prompt page background texture: row 4, column 2 + * + * // QUAD_PROMPT_MAX + * promptPageVtx[60] message + * promptPageVtx[64] cursor left + * promptPageVtx[68] cursor right + * promptPageVtx[72] choice (yes) + * promptPageVtx[76] choice (no) + */ + #define PAUSE_PROMPT_YES 0 #define PAUSE_PROMPT_NO 4 @@ -342,7 +398,7 @@ typedef enum { void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos); void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point); void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ); -void func_80821A04(PlayState* play); +void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play); // Map void KaleidoScope_DrawDungeonMap(PlayState* play); diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index a882cf3e7..9d210a728 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -1,7 +1,7 @@ /* * File: z_kaleido_scope_NES.c * Overlay: ovl_kaleido_scope - * Description: + * Description: Pause Menu */ #include "z_kaleido_scope.h" @@ -9,18 +9,13 @@ #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" #include "interface/icon_item_jpn_static/icon_item_jpn_static.h" #include "z64view.h" +#include "overlays/gamestates/ovl_opening/z_opening.h" +#include "interface/icon_item_gameover_static/icon_item_gameover_static.h" +#include "interface/icon_item_jpn_static/icon_item_jpn_static.h" +#include "interface/icon_item_vtx_static/icon_item_vtx_static.h" -extern UNK_TYPE D_02001360; -extern UNK_TYPE D_020044A0; -extern UNK_TYPE D_02004AA0; -extern UNK_TYPE D_0200B998; -extern UNK_TYPE D_08062000; -extern UNK_TYPE D_08064340; -extern UNK_TYPE D_0B000000; -extern UNK_TYPE D_0C000000; -extern UNK_TYPE D_0C006C00; - -extern u8 sUnpausedButtonStatus[5]; +// iconItemSegment +extern TexturePtr D_08064340; // gPauseMenuCursorTex // Page Textures (Background of Page): // Broken up into multiple textures. @@ -242,29 +237,68 @@ s16 sPauseCursorRightX = 0; s16 D_8082B920 = 10; -u8 D_8082B924[] = { - 0x00, 0x14, 0x00, 0x04, 0x00, 0x14, 0x00, 0x0A, 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, - 0x07, 0x07, 0x03, 0x0F, 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00, +s16 sPauseZRCursorColorTimerInits[] = { 20, 4, 20, 10 }; + +// Unused remnant of OoT +u8 gAreaGsFlags[] = { + 0x0F, 0x1F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x07, 0x07, 0x03, 0x0F, + 0x07, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0x03, 0x0F, 0x00, 0x00, }; // TODO: Also applies to owl warps s16 sGameOverRectPosY = 66; -void func_80821900(void* segment, u32 texIndex) { +void Kaleido_LoadMapNameStatic(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0x400); } -void func_8082192C(void* segment, u32 texIndex) { +void Kaleido_LoadMapNameStaticLarge(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(map_name_static), texIndex, segment, 0xA00); } -void func_80821958(void* segment, u32 texIndex) { +void Kaleido_LoadItemNameStatic(void* segment, u32 texIndex) { CmpDma_LoadFile(SEGMENT_ROM_START(item_name_static), texIndex, segment, 0x400); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_MoveCursorToSpecialPos.s") +void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, s16 cursorSpecialPos) { + PauseContext* pauseCtx = &play->pauseCtx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821A04.s") + pauseCtx->cursorSlot[pauseCtx->pageIndex] = 0; + pauseCtx->cursorSpecialPos = cursorSpecialPos; + pauseCtx->pageSwitchInputTimer = 0; + + play_sound(NA_SE_SY_DECIDE); + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED; + + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); +} + +void KaleidoScope_MoveCursorFromSpecialPos(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + + pauseCtx->nameDisplayTimer = 0; + pauseCtx->cursorSpecialPos = 0; + + play_sound(NA_SE_SY_CURSOR); + + pauseCtx->cursorShrinkRate = 4.0f; + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; + + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); +} void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, u16 width, u16 height, u16 point) { OPEN_DISPS(gfxCtx); @@ -277,10 +311,90 @@ void KaleidoScope_DrawTexQuadRGBA32(GraphicsContext* gfxCtx, TexturePtr texture, CLOSE_DISPS(gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80821CC4.s") +#define SWITCH_PAGE_LEFT 0 +#define SWITCH_PAGE_RIGHT 2 -void KaleidoScope_HandlePageToggles(PlayState* play, Input* input); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_HandlePageToggles.s") +void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 direction) { + pauseCtx->cursorSlot[pauseCtx->pageIndex] = 0; + pauseCtx->mainState = PAUSE_MAIN_STATE_SWITCHING_PAGE; + pauseCtx->switchPageTimer = 0; + + if (direction == SWITCH_PAGE_LEFT) { + pauseCtx->nextPageMode = (pauseCtx->pageIndex * 2) + 1; + play_sound(NA_SE_SY_WIN_SCROLL_LEFT); + pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT; + } else { // SWITCH_PAGE_RIGHT + pauseCtx->nextPageMode = pauseCtx->pageIndex * 2; + play_sound(NA_SE_SY_WIN_SCROLL_RIGHT); + pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT; + } + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_DISABLED; + + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + Interface_SetHudVisibility(HUD_VISIBILITY_ALL); +} + +/** + * Process inputs to decide whether to switch pages + */ +void KaleidoScope_HandlePageToggles(PlayState* play, Input* input) { + PauseContext* pauseCtx = &play->pauseCtx; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + //! FAKE + if (1) {} + + if ((pauseCtx->debugEditor != DEBUG_EDITOR_NONE) || pauseCtx->itemDescriptionOn) { + return; + } + + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT) || CHECK_BTN_ALL(input->press.button, BTN_R)) { + // Switch the page to the right regardless of where the cursor is + if (interfaceCtx->unk_212 == 6) { + func_8011552C(play, 0x15); + } + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT); + return; + } + + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT) || CHECK_BTN_ALL(input->press.button, BTN_Z)) { + // Switch the page to the left regardless of where the cursor is + if (interfaceCtx->unk_212 == 6) { + func_8011552C(play, 0x15); + } + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT); + return; + } + + if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + if (pauseCtx->stickAdjX < -30) { + pauseCtx->pageSwitchInputTimer++; + // Switch the page to the left after a certain number of frames with held input or after a second press + if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) { + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_LEFT); + } + } else { + // stickAdjX is no longer held, so that the next input to the left will immediately switch pages + pauseCtx->pageSwitchInputTimer = -1; + } + } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { + if (pauseCtx->stickAdjX > 30) { + pauseCtx->pageSwitchInputTimer++; + // Switch the page to the right after a certain number of frames with held input or after a second press + if ((pauseCtx->pageSwitchInputTimer >= 10) || (pauseCtx->pageSwitchInputTimer == 0)) { + KaleidoScope_SwitchPage(pauseCtx, SWITCH_PAGE_RIGHT); + } + } else { + // stickAdjY is no longer held, so that the next input to the right will immediately switch pages + pauseCtx->pageSwitchInputTimer = -1; + } + } +} // Draw 15 (PAGE_BG_QUADS) quads with IA8 80x32 textures Gfx* KaleidoScope_DrawPageSections(Gfx* gfx, Vtx* vertices, TexturePtr* textures) { @@ -633,19 +747,413 @@ TexturePtr D_8082B9A8[] = { gPauseToMasksENGTex, gPauseToSelectItemENGTex, }; +void KaleidoScope_DrawInfoPanel(PlayState* play) { + static s16 sPauseZRCursorColorTargets[][4] = { + { 180, 210, 255, 220 }, + { 100, 100, 150, 220 }, + }; + static s16 sPauseZRCursorColorTimer = 20; + static s16 sPauseZRCursorColorIndex = 0; + static s16 sPauseZRCursorRed; + static s16 sPauseZRCursorGreen; + static s16 sPauseZRCursorBlue; + static s16 sPauseZRCursorAlpha; + PauseContext* pauseCtx = &play->pauseCtx; + s16 stepR; + s16 stepG; + s16 stepB; + s16 stepA; + s16 y; + s16 i; + s16 j; -s16 D_8082B9B8[][4] = { - { 180, 210, 255, 220 }, - { 100, 100, 150, 220 }, -}; + OPEN_DISPS(play->state.gfxCtx); -s16 D_8082B9C8 = 20; -s16 D_8082B9CC = 0; + stepR = + ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer; + stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) / + sPauseZRCursorColorTimer; + stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) / + sPauseZRCursorColorTimer; + stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) / + sPauseZRCursorColorTimer; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80823350.s") + if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) { + sPauseZRCursorRed -= stepR; + } else { + sPauseZRCursorRed += stepR; + } -void KaleidoScope_UpdateNamePanel(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateNamePanel.s") + if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) { + sPauseZRCursorGreen -= stepG; + } else { + sPauseZRCursorGreen += stepG; + } + + if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) { + sPauseZRCursorBlue -= stepB; + } else { + sPauseZRCursorBlue += stepB; + } + + if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) { + sPauseZRCursorAlpha -= stepA; + } else { + sPauseZRCursorAlpha += stepA; + } + + sPauseZRCursorColorTimer--; + if (sPauseZRCursorColorTimer == 0) { + sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]; + sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]; + sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]; + sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]; + sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits[0]; + sPauseZRCursorColorIndex ^= 1; + } + + y = pauseCtx->infoPanelOffsetY - 76; + for (j = 0, i = 0; i < 7; i++, j += 4) { + pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72; + + pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y; + + pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24; + + pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] = + pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag = + pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0; + + pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] = + pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0; + + pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] = + pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] = + pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] = + pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] = + pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] = + pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200; + + pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] = + pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha; + } + + pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72; + + pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72; + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX + 3; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 26; + } + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX + 3; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 26; + } + + pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] = + pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] = + pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); + + gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL); + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && + (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha); + } + + gSPDisplayList(POLY_OPA_DISP++, gZButtonIconDL); + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && + (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK))) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, sPauseZRCursorAlpha); + } + + gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL); + + if (pauseCtx->cursorSpecialPos != 0) { + j = (pauseCtx->cursorSpecialPos * 4) - 32; + pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0]; + pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1]; + } + + y = pauseCtx->infoPanelOffsetY - 80; + pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y; + + pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16; + + pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0); + + if (pauseCtx->itemDescriptionOn || + ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && + (pauseCtx->nameDisplayTimer < 40) && + (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) || + ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && + (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) && + (pauseCtx->cursorSpecialPos == 0))) { + if (!pauseCtx->mainState || (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK) || + ((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && + (pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED)) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) { + + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 128; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5); + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); + + if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + } + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0); + } + } else if ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT_UNUSED) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_UNK)) { + pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = y; + + pauseCtx->infoPanelVtx[22].v.ob[1] = pauseCtx->infoPanelVtx[23].v.ob[1] = + pauseCtx->infoPanelVtx[20].v.ob[1] - 16; + + pauseCtx->infoPanelVtx[22].v.tc[1] = pauseCtx->infoPanelVtx[23].v.tc[1] = 16 * (1 << 5); + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0); + + if (pauseCtx->state == PAUSE_STATE_SAVEPROMPT) { + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -33; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 0x10; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 0x30; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 48 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + //! @bug: Incorrect dimensions. Should be 64x16 + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToDecideENGTex, G_IM_FMT_IA, 48, 16, 4); + + } else if (pauseCtx->cursorSpecialPos != 0) { + if ((pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 128; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 200, 0, 255); + + if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + POLY_OPA_DISP = + Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B998[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0); + } else { + POLY_OPA_DISP = + Gfx_DrawTexQuad4b(POLY_OPA_DISP, D_8082B9A8[pauseCtx->pageIndex], G_IM_FMT_IA, 128, 16, 0); + } + } + } else if ((!pauseCtx->pageIndex || (pauseCtx->pageIndex == PAUSE_MASK)) && + (pauseCtx->namedItem != PAUSE_ITEM_NONE)) { + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -49; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 48; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 47; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 64; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 48 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 64 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gCButtonIconsDL); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToEquipENGTex, G_IM_FMT_IA, 64, 16, 4); + } else if ((pauseCtx->pageIndex == PAUSE_MAP) && sInDungeonScene) { + // No code in this case + } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && + (pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) { + if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + // The cursor is on the bombers notebook + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -58; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 0x14; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 0x60; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 96 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToViewNotebookENGTex, G_IM_FMT_IA, 96, 16, 4); + } + } else if ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && (pauseCtx->namedItem != PAUSE_ITEM_NONE)) { + // The cursor is on a learned song + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -55; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[20].v.ob[0] = pauseCtx->infoPanelVtx[22].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 20; + + pauseCtx->infoPanelVtx[21].v.ob[0] = pauseCtx->infoPanelVtx[23].v.ob[0] = + pauseCtx->infoPanelVtx[20].v.ob[0] + 96; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = 96 * (1 << 5); + + gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, gPauseToPlayMelodyENGTex, G_IM_FMT_IA, 96, 16, 4); + } + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +u8 sUnpausedButtonStatus[5]; +f32 sCursorCirclesX[4]; +f32 sCursorCirclesY[4]; + +void KaleidoScope_UpdateNamePanel(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + u16 namedItem; + + if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) || + ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) { + + pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex]; + namedItem = pauseCtx->namedItem; + + osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1); + + if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { + Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, namedItem); + } else { + Kaleido_LoadItemNameStatic(pauseCtx->nameSegment, namedItem); + } + pauseCtx->nameDisplayTimer = 0; + } + } else if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_WHITE) { + if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) || + ((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] == QUEST_BOMBERS_NOTEBOOK)) || + (pauseCtx->pageIndex == PAUSE_ITEM) || (pauseCtx->pageIndex == PAUSE_MASK)) { + + pauseCtx->nameDisplayTimer++; + if (pauseCtx->nameDisplayTimer > 70) { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } +} void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; @@ -690,21 +1198,275 @@ void KaleidoScope_DrawOwlWarpMapPage(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -s16 D_8082B9D0[][4] = { - { 180, 210, 255, 220 }, - { 100, 100, 150, 220 }, -}; +void KaleidoScope_DrawOwlWarpInfoPanel(PlayState* play) { + static s16 sPauseZRCursorColorTargets[][4] = { + { 180, 210, 255, 220 }, + { 100, 100, 150, 220 }, + }; + static s16 sPauseZRCursorColorTimer = 20; + static s16 sPauseZRCursorColorIndex = 0; + static s16 sPauseZRCursorRed; + static s16 sPauseZRCursorGreen; + static s16 sPauseZRCursorBlue; + static s16 sPauseZRCursorAlpha; + PauseContext* pauseCtx = &play->pauseCtx; + s16 stepR; + s16 stepG; + s16 stepB; + s16 stepA; + s16 y; + s16 i; + s16 j; -s16 D_8082B9E0 = 20; -s16 D_8082B9E4 = 0; + OPEN_DISPS(play->state.gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80824B90.s") + stepR = + ABS_ALT(sPauseZRCursorRed - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) / sPauseZRCursorColorTimer; + stepG = ABS_ALT(sPauseZRCursorGreen - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) / + sPauseZRCursorColorTimer; + stepB = ABS_ALT(sPauseZRCursorBlue - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) / + sPauseZRCursorColorTimer; + stepA = ABS_ALT(sPauseZRCursorAlpha - sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) / + sPauseZRCursorColorTimer; -void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateOwlWarpNamePanel.s") + if (sPauseZRCursorRed >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]) { + sPauseZRCursorRed -= stepR; + } else { + sPauseZRCursorRed += stepR; + } -void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_UpdateSwitchPage.s") + if (sPauseZRCursorGreen >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]) { + sPauseZRCursorGreen -= stepG; + } else { + sPauseZRCursorGreen += stepG; + } + + if (sPauseZRCursorBlue >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]) { + sPauseZRCursorBlue -= stepB; + } else { + sPauseZRCursorBlue += stepB; + } + + if (sPauseZRCursorAlpha >= sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]) { + sPauseZRCursorAlpha -= stepA; + } else { + sPauseZRCursorAlpha += stepA; + } + + sPauseZRCursorColorTimer--; + if (sPauseZRCursorColorTimer == 0) { + sPauseZRCursorRed = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][0]; + sPauseZRCursorGreen = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][1]; + sPauseZRCursorBlue = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][2]; + sPauseZRCursorAlpha = sPauseZRCursorColorTargets[sPauseZRCursorColorIndex][3]; + sPauseZRCursorColorTimer = sPauseZRCursorColorTimerInits[0]; + sPauseZRCursorColorIndex ^= 1; + } + + y = pauseCtx->infoPanelOffsetY - 76; + for (j = 0, i = 0; i < 7; i++, j += 4) { + pauseCtx->infoPanelVtx[j + 0].v.ob[0] = pauseCtx->infoPanelVtx[j + 2].v.ob[0] = -72; + + pauseCtx->infoPanelVtx[j + 1].v.ob[0] = pauseCtx->infoPanelVtx[j + 3].v.ob[0] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.ob[1] = pauseCtx->infoPanelVtx[j + 1].v.ob[1] = y; + + pauseCtx->infoPanelVtx[j + 2].v.ob[1] = pauseCtx->infoPanelVtx[j + 3].v.ob[1] = y - 24; + + pauseCtx->infoPanelVtx[j + 0].v.ob[2] = pauseCtx->infoPanelVtx[j + 1].v.ob[2] = + pauseCtx->infoPanelVtx[j + 2].v.ob[2] = pauseCtx->infoPanelVtx[j + 3].v.ob[2] = 0; + + pauseCtx->infoPanelVtx[j + 0].v.flag = pauseCtx->infoPanelVtx[j + 1].v.flag = + pauseCtx->infoPanelVtx[j + 2].v.flag = pauseCtx->infoPanelVtx[j + 3].v.flag = 0; + + pauseCtx->infoPanelVtx[j + 0].v.tc[0] = pauseCtx->infoPanelVtx[j + 0].v.tc[1] = + pauseCtx->infoPanelVtx[j + 1].v.tc[1] = pauseCtx->infoPanelVtx[j + 2].v.tc[0] = 0; + + pauseCtx->infoPanelVtx[j + 1].v.tc[0] = pauseCtx->infoPanelVtx[j + 3].v.tc[0] = 72 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 2].v.tc[1] = pauseCtx->infoPanelVtx[j + 3].v.tc[1] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[j + 0].v.cn[0] = pauseCtx->infoPanelVtx[j + 2].v.cn[0] = + pauseCtx->infoPanelVtx[j + 0].v.cn[1] = pauseCtx->infoPanelVtx[j + 2].v.cn[1] = + pauseCtx->infoPanelVtx[j + 0].v.cn[2] = pauseCtx->infoPanelVtx[j + 2].v.cn[2] = + pauseCtx->infoPanelVtx[j + 1].v.cn[0] = pauseCtx->infoPanelVtx[j + 3].v.cn[0] = + pauseCtx->infoPanelVtx[j + 1].v.cn[1] = pauseCtx->infoPanelVtx[j + 3].v.cn[1] = + pauseCtx->infoPanelVtx[j + 1].v.cn[2] = pauseCtx->infoPanelVtx[j + 3].v.cn[2] = 200; + + pauseCtx->infoPanelVtx[j + 0].v.cn[3] = pauseCtx->infoPanelVtx[j + 2].v.cn[3] = + pauseCtx->infoPanelVtx[j + 1].v.cn[3] = pauseCtx->infoPanelVtx[j + 3].v.cn[3] = pauseCtx->alpha; + } + + pauseCtx->infoPanelVtx[4].v.ob[0] = pauseCtx->infoPanelVtx[6].v.ob[0] = pauseCtx->infoPanelVtx[0].v.ob[0] + 72; + + pauseCtx->infoPanelVtx[5].v.ob[0] = pauseCtx->infoPanelVtx[7].v.ob[0] = pauseCtx->infoPanelVtx[4].v.ob[0] + 72; + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[8].v.ob[0] = pauseCtx->infoPanelVtx[10].v.ob[0] = sPauseCursorLeftX + 3; + + pauseCtx->infoPanelVtx[9].v.ob[0] = pauseCtx->infoPanelVtx[11].v.ob[0] = pauseCtx->infoPanelVtx[8].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[8].v.ob[1] = pauseCtx->infoPanelVtx[9].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[10].v.ob[1] = pauseCtx->infoPanelVtx[11].v.ob[1] = + pauseCtx->infoPanelVtx[8].v.ob[1] - 26; + } + + if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE)) { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 24; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 32; + } else { + pauseCtx->infoPanelVtx[12].v.ob[0] = pauseCtx->infoPanelVtx[14].v.ob[0] = sPauseCursorRightX + 3; + + pauseCtx->infoPanelVtx[13].v.ob[0] = pauseCtx->infoPanelVtx[15].v.ob[0] = + pauseCtx->infoPanelVtx[12].v.ob[0] + 18; + + pauseCtx->infoPanelVtx[12].v.ob[1] = pauseCtx->infoPanelVtx[13].v.ob[1] = D_8082B920 - 3; + + pauseCtx->infoPanelVtx[14].v.ob[1] = pauseCtx->infoPanelVtx[15].v.ob[1] = + pauseCtx->infoPanelVtx[12].v.ob[1] - 26; + } + + pauseCtx->infoPanelVtx[9].v.tc[0] = pauseCtx->infoPanelVtx[11].v.tc[0] = pauseCtx->infoPanelVtx[13].v.tc[0] = + pauseCtx->infoPanelVtx[15].v.tc[0] = 24 * (1 << 5); + + pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] = + pauseCtx->infoPanelVtx[15].v.tc[1] = 32 * (1 << 5); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 140, 90, 255); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); + + gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL); + + if (pauseCtx->cursorSpecialPos != 0) { + j = (pauseCtx->cursorSpecialPos * 4) - 32; + pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->infoPanelVtx[j].v.ob[0]; + pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->infoPanelVtx[j].v.ob[1]; + } + + y = pauseCtx->infoPanelOffsetY - 80; + pauseCtx->infoPanelVtx[16].v.ob[1] = pauseCtx->infoPanelVtx[17].v.ob[1] = y; + + pauseCtx->infoPanelVtx[18].v.ob[1] = pauseCtx->infoPanelVtx[19].v.ob[1] = pauseCtx->infoPanelVtx[16].v.ob[1] - 16; + + pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 16 * (1 << 5); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0); + + if ((pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && + (pauseCtx->nameDisplayTimer < 40)) { + pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63; + + pauseCtx->infoPanelVtx[17].v.ob[0] = pauseCtx->infoPanelVtx[19].v.ob[0] = + pauseCtx->infoPanelVtx[16].v.ob[0] + 128; + + pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 128 * (1 << 5); + + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); + + if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_GREY) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + } + + POLY_OPA_DISP = Gfx_DrawTexQuad4b(POLY_OPA_DISP, pauseCtx->nameSegment, G_IM_FMT_IA, 128, 16, 0); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +void KaleidoScope_UpdateOwlWarpNamePanel(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + u16 texIndex; + + if ((pauseCtx->namedItem != pauseCtx->cursorItem[pauseCtx->pageIndex]) || + ((pauseCtx->pageIndex == PAUSE_MAP) && (pauseCtx->cursorSpecialPos != 0))) { + + pauseCtx->namedItem = pauseCtx->cursorItem[pauseCtx->pageIndex]; + texIndex = pauseCtx->namedItem; + + osCreateMesgQueue(&pauseCtx->loadQueue, &pauseCtx->loadMsg, 1); + + if (pauseCtx->namedItem != PAUSE_ITEM_NONE) { + if ((pauseCtx->pageIndex == PAUSE_MAP) && !sInDungeonScene) { + Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, texIndex); + } else { + Kaleido_LoadItemNameStatic(pauseCtx->nameSegment, texIndex); + } + pauseCtx->nameDisplayTimer = 0; + } + } else if (pauseCtx->nameColorSet == PAUSE_NAME_COLOR_SET_WHITE) { + if (((pauseCtx->pageIndex == PAUSE_QUEST) && (pauseCtx->cursorSlot[PAUSE_QUEST] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[PAUSE_QUEST] <= QUEST_SONG_SUN) && + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) || + (pauseCtx->pageIndex == PAUSE_ITEM)) { + + pauseCtx->nameDisplayTimer++; + if (pauseCtx->nameDisplayTimer > 70) { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } + } else { + pauseCtx->nameDisplayTimer = 0; + } +} + +void KaleidoScope_UpdateSwitchPage(PlayState* play, Input* input) { + PauseContext* pauseCtx = &play->pauseCtx; + + //! FAKE + if (1) { + pauseCtx->eye.x += sPageSwitchEyeDx[pauseCtx->nextPageMode] * 2.0f; + pauseCtx->eye.z += sPageSwitchEyeDz[pauseCtx->nextPageMode] * 2.0f; + + if (pauseCtx->switchPageTimer < 32) { + sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4); + sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4); + } else { + sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4); + sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4); + } + + pauseCtx->switchPageTimer += 8; + + if (pauseCtx->switchPageTimer == 64) { + pauseCtx->switchPageTimer = 0; + pauseCtx->pageIndex = sPageSwitchNextPageIndex[pauseCtx->nextPageMode]; + pauseCtx->mainState = PAUSE_MAIN_STATE_IDLE; + + KaleidoScope_HandlePageToggles(play, input); + } + } +} void KaleidoScope_SetView(PauseContext* pauseCtx, f32 eyeX, f32 eyeY, f32 eyeZ) { Vec3f eye; @@ -773,7 +1535,7 @@ s16 sVtxPageMapWorldQuadsX[VTX_PAGE_MAP_WORLD_QUADS] = { 44, // mapPageVtx[196] world map owl warp Ikana Canyon 54, // mapPageVtx[200] world map owl warp Stone Tower }; -s16 sVtxPageSaveQuadsX[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsX[VTX_PAGE_SAVE_QUADS] = { -76, // promptPageVtx[60] QUAD_PROMPT_MESSAGE -58, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -793,7 +1555,7 @@ s16 sVtxPageMapDungeonQuadsWidth[VTX_PAGE_MAP_DUNGEON_QUADS] = { 24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED }; s16 sVtxPageQuestQuadsWidth[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; -s16 sVtxPageSaveQuadsWidth[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsWidth[VTX_PAGE_SAVE_QUADS] = { 152, // promptPageVtx[60] QUAD_PROMPT_MESSAGE 48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -852,7 +1614,7 @@ s16 sVtxPageMapWorldQuadsY[VTX_PAGE_MAP_WORLD_QUADS] = { -1, // mapPageVtx[196] world map owl warp Ikana Canyon 24, // mapPageVtx[200] world map owl warp Stone Tower }; -s16 sVtxPageSaveQuadsY[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsY[VTX_PAGE_SAVE_QUADS] = { 36, // promptPageVtx[60] QUAD_PROMPT_MESSAGE 10, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 10, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -872,7 +1634,7 @@ s16 sVtxPageMapDungeonQuadsHeight[] = { 24, // mapPageVtx[80] QUAD_MAP_DUNGEON_UNUSED }; s16 sVtxPageQuestQuadsHeight[CLAMP_MIN(VTX_PAGE_QUEST_QUADS, 1)] = { 0 }; -s16 sVtxPageSaveQuadsHeight[VTX_PAGE_SAVE_QUADS] = { +s16 sVtxPagePromptQuadsHeight[VTX_PAGE_SAVE_QUADS] = { 16, // promptPageVtx[60] QUAD_PROMPT_MESSAGE 48, // promptPageVtx[64] QUAD_PROMPT_CURSOR_LEFT 48, // promptPageVtx[68] QUAD_PROMPT_CURSOR_RIGHT @@ -886,7 +1648,7 @@ s16* sVtxPageQuadsX[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsX, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsX, // VTX_PAGE_QUEST sVtxPageMapWorldQuadsX, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsX, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsX, // VTX_PAGE_PROMPT }; s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = { @@ -895,7 +1657,7 @@ s16* sVtxPageQuadsWidth[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsWidth, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsWidth, // VTX_PAGE_QUEST gVtxPageMapWorldQuadsWidth, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsWidth, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsWidth, // VTX_PAGE_PROMPT }; s16* sVtxPageQuadsY[VTX_PAGE_MAX] = { @@ -904,7 +1666,7 @@ s16* sVtxPageQuadsY[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsY, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsY, // VTX_PAGE_QUEST sVtxPageMapWorldQuadsY, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsY, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsY, // VTX_PAGE_PROMPT }; s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = { @@ -913,7 +1675,7 @@ s16* sVtxPageQuadsHeight[VTX_PAGE_MAX] = { sVtxPageMapDungeonQuadsHeight, // VTX_PAGE_MAP_DUNGEON sVtxPageQuestQuadsHeight, // VTX_PAGE_QUEST gVtxPageMapWorldQuadsHeight, // VTX_PAGE_MAP_WORLD - sVtxPageSaveQuadsHeight, // VTX_PAGE_PROMPT + sVtxPagePromptQuadsHeight, // VTX_PAGE_PROMPT }; s16 sVtxPageGameOverSaveQuadsY[VTX_PAGE_SAVE_QUADS] = { @@ -1547,60 +2309,435 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) { } } -f32 D_8082BCB4[] = { - -62.0f, -36.0f, -10.0f, 16.0f, 42.0f, 68.0f, +f32 sItemMaskCursorsX[] = { + -62.0f, // Column 1 + -36.0f, // Column 2 + -10.0f, // Column 3 + 16.0f, // Column 4 + 42.0f, // Column 5 + 68.0f, // Column 6 }; -f32 D_8082BCCC[] = { - 31.0f, - 5.0f, - -21.0f, - -47.0f, +f32 sItemMaskCursorsY[] = { + 31.0f, // Row 1 + 5.0f, // Row 2 + -21.0f, // Row 3 + -47.0f, // Row 4 }; -f32 D_8082BCDC[] = { - -49.0f, -35.0f, -3.0f, 4.0f, 12.0f, 8.0f, 7.0f, 40.0f, 47.0f, 49.0f, 55.0f, +f32 sWorldMapCursorsX[REGION_MAX] = { + -49.0f, // REGION_GREAT_BAY + -35.0f, // REGION_ZORA_HALL + -3.0f, // REGION_ROMANI_RANCH + 4.0f, // REGION_DEKU_PALACE + 12.0f, // REGION_WOODFALL + 8.0f, // REGION_CLOCK_TOWN + 7.0f, // REGION_SNOWHEAD + 40.0f, // REGION_IKANA_GRAVEYARD + 47.0f, // REGION_IKANA_CANYON + 49.0f, // REGION_GORON_VILLAGE + 55.0f, // REGION_STONE_TOWER }; -f32 D_8082BD08[] = { - -15.0f, -36.0f, -23.0f, -49.0f, -29.0f, -8.0f, 25.0f, 2.0f, -9.0f, 28.0f, 7.0f, +f32 sWorldMapCursorsY[REGION_MAX] = { + -15.0f, // REGION_GREAT_BAY + -36.0f, // REGION_ZORA_HALL + -23.0f, // REGION_ROMANI_RANCH + -49.0f, // REGION_DEKU_PALACE + -29.0f, // REGION_WOODFALL + -8.0f, // REGION_CLOCK_TOWN + 25.0f, // REGION_SNOWHEAD + 2.0f, // REGION_IKANA_GRAVEYARD + -9.0f, // REGION_IKANA_CANYON + 28.0f, // REGION_GORON_VILLAGE + 7.0f, // REGION_STONE_TOWER }; -f32 D_8082BD34[] = { - -50.0f, -38.0f, 6.0f, 11.0f, 8.0f, 0.0f, 12.0f, 31.0f, 48.0f, 56.0f, +f32 sOwlWarpWorldMapCursorsX[OWL_WARP_MAX - 1] = { + -50.0f, // OWL_WARP_GREAT_BAY_COAST + -38.0f, // OWL_WARP_ZORA_CAPE + 6.0f, // OWL_WARP_SNOWHEAD + 11.0f, // OWL_WARP_MOUNTAIN_VILLAGE + 8.0f, // OWL_WARP_CLOCK_TOWN + 0.0f, // OWL_WARP_MILK_ROAD + 12.0f, // OWL_WARP_WOODFALL + 31.0f, // OWL_WARP_SOUTHERN_SWAMP + 48.0f, // OWL_WARP_IKANA_CANYON + 56.0f, // OWL_WARP_STONE_TOWER }; -f32 D_8082BD5C[] = { - -14.0f, -39.0f, 23.0f, 11.0f, -8.0f, -15.0f, -31.0f, -30.0f, -10.0f, 11.0f, +f32 sOwlWarpWorldMapCursorsY[OWL_WARP_MAX - 1] = { + -14.0f, // OWL_WARP_GREAT_BAY_COAST + -39.0f, // OWL_WARP_ZORA_CAPE + 23.0f, // OWL_WARP_SNOWHEAD + 11.0f, // OWL_WARP_MOUNTAIN_VILLAGE + -8.0f, // OWL_WARP_CLOCK_TOWN + -15.0f, // OWL_WARP_MILK_ROAD + -31.0f, // OWL_WARP_WOODFALL + -30.0f, // OWL_WARP_SOUTHERN_SWAMP + -10.0f, // OWL_WARP_IKANA_CANYON + 11.0f, // OWL_WARP_STONE_TOWER }; -f32 D_8082BD84[] = { - -72.0f, -47.0f, -26.0f, -50.0f, -48.0f, -48.0f, -48.0f, -48.0f, -48.0f, +f32 sDungeonMapCursorsX[] = { + -72.0f, // DUNGEON_BOSS_KEY + -47.0f, // DUNGEON_COMPASS + -26.0f, // DUNGEON_MAP + -50.0f, // DUNGEON_STRAY_FAIRIES + -48.0f, // DUNGEON_FLOOR_INDEX_4 (top floor) + -48.0f, // DUNGEON_FLOOR_INDEX_3 + -48.0f, // DUNGEON_FLOOR_INDEX_2 + -48.0f, // DUNGEON_FLOOR_INDEX_1 + -48.0f, // DUNGEON_FLOOR_INDEX_0 (bottom floor) }; -f32 D_8082BDA8[] = { - -47.0f, -47.0f, -47.0f, -30.0f, 33.0f, 22.0f, 11.0f, -2.0f, -13.0f, +f32 sDungeonMapCursorsY[] = { + -47.0f, // DUNGEON_BOSS_KEY + -47.0f, // DUNGEON_COMPASS + -47.0f, // DUNGEON_MAP + -30.0f, // DUNGEON_STRAY_FAIRIES + 33.0f, // DUNGEON_FLOOR_INDEX_4 (top floor) + 22.0f, // DUNGEON_FLOOR_INDEX_3 + 11.0f, // DUNGEON_FLOOR_INDEX_2 + -2.0f, // DUNGEON_FLOOR_INDEX_1 + -13.0f, // DUNGEON_FLOOR_INDEX_0 (bottom floor) }; -f32 D_8082BDCC[] = { - 52.0f, 80.0f, 24.0f, 52.0f, 81.0f, 24.0f, -78.0f, -61.0f, -44.0f, -24.0f, -6.0f, -3.0f, - -78.0f, -61.0f, -44.0f, -24.0f, -6.0f, -3.0f, -68.0f, 22.0f, 83.0f, -67.0f, -21.0f, +f32 sQuestStatusCursorsX[] = { + 52.0f, // QUEST_REMAINS_ODOLWA + 80.0f, // QUEST_REMAINS_GOHT + 24.0f, // QUEST_REMAINS_GYORG + 52.0f, // QUEST_REMAINS_TWINMOLD + 81.0f, // QUEST_SHIELD + 24.0f, // QUEST_SWORD + -78.0f, // QUEST_SONG_SONATA + -61.0f, // QUEST_SONG_LULLABY + -44.0f, // QUEST_SONG_BOSSA_NOVA + -24.0f, // QUEST_SONG_ELEGY + -6.0f, // QUEST_SONG_OATH + -3.0f, // QUEST_SONG_SARIA + -78.0f, // QUEST_SONG_TIME + -61.0f, // QUEST_SONG_HEALING + -44.0f, // QUEST_SONG_EPONA + -24.0f, // QUEST_SONG_SOARING + -6.0f, // QUEST_SONG_STORMS + -3.0f, // QUEST_SONG_SUN + -68.0f, // QUEST_BOMBERS_NOTEBOOK + 22.0f, // QUEST_QUIVER + 83.0f, // QUEST_BOMB_BAG + -67.0f, // QUEST_SKULL_TOKEN + -21.0f, // QUEST_HEART_PIECE }; -f32 D_8082BE28[] = { - 33.0f, 18.0f, 18.0f, 0.0f, -23.0f, -23.0f, -29.0f, -29.0f, -29.0f, -29.0f, -29.0f, -29.0f, - -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, -11.0f, 27.0f, -53.0f, -53.0f, 14.0f, 26.0f, +f32 sQuestStatusCursorsY[] = { + 33.0f, // QUEST_REMAINS_ODOLWA + 18.0f, // QUEST_REMAINS_GOHT + 18.0f, // QUEST_REMAINS_GYORG + 0.0f, // QUEST_REMAINS_TWINMOLD + -23.0f, // QUEST_SHIELD + -23.0f, // QUEST_SWORD + -29.0f, // QUEST_SONG_SONATA + -29.0f, // QUEST_SONG_LULLABY + -29.0f, // QUEST_SONG_BOSSA_NOVA + -29.0f, // QUEST_SONG_ELEGY + -29.0f, // QUEST_SONG_OATH + -29.0f, // QUEST_SONG_SARIA + -11.0f, // QUEST_SONG_TIME + -11.0f, // QUEST_SONG_HEALING + -11.0f, // QUEST_SONG_EPONA + -11.0f, // QUEST_SONG_SOARING + -11.0f, // QUEST_SONG_STORMS + -11.0f, // QUEST_SONG_SUN + 27.0f, // QUEST_BOMBERS_NOTEBOOK + -53.0f, // QUEST_QUIVER + -53.0f, // QUEST_BOMB_BAG + 14.0f, // QUEST_SKULL_TOKEN + 26.0f, // QUEST_HEART_PIECE }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_808274DC.s") +void KaleidoScope_UpdateCursorSize(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + s16 index; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827A8C.s") + pauseCtx->cursorVtx[0].v.ob[0] = pauseCtx->cursorVtx[2].v.ob[0] = -8; + pauseCtx->cursorVtx[1].v.ob[0] = pauseCtx->cursorVtx[3].v.ob[0] = pauseCtx->cursorVtx[0].v.ob[0] + 16; -s16 D_8082BE84 = 0; + pauseCtx->cursorVtx[0].v.ob[1] = pauseCtx->cursorVtx[1].v.ob[1] = 8; + pauseCtx->cursorVtx[2].v.ob[1] = pauseCtx->cursorVtx[3].v.ob[1] = pauseCtx->cursorVtx[0].v.ob[1] - 16; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/func_80827E08.s") + if (pauseCtx->cursorSpecialPos == 0) { + switch (pauseCtx->pageIndex) { + case PAUSE_ITEM: + pauseCtx->cursorX = sItemMaskCursorsX[pauseCtx->cursorXIndex[PAUSE_ITEM]]; + pauseCtx->cursorY = sItemMaskCursorsY[pauseCtx->cursorYIndex[PAUSE_ITEM]]; + pauseCtx->cursorWidth = 15.0f; + pauseCtx->cursorHeight = 15.0f; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_kaleido_scope/KaleidoScope_Draw.s") + case PAUSE_MAP: + if (!sInDungeonScene) { + if (IS_PAUSE_STATE_OWLWARP) { + pauseCtx->cursorX = sOwlWarpWorldMapCursorsX[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + pauseCtx->cursorY = sOwlWarpWorldMapCursorsY[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + } else { + pauseCtx->cursorX = sWorldMapCursorsX[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + pauseCtx->cursorY = sWorldMapCursorsY[pauseCtx->cursorPoint[PAUSE_WORLD_MAP]]; + } + if (!IS_PAUSE_STATE_OWLWARP) { + pauseCtx->cursorHeight = 10.0f; + pauseCtx->cursorWidth = 10.0f; + } else { + pauseCtx->cursorHeight = 15.0f; + pauseCtx->cursorWidth = 15.0f; + } + } else { + pauseCtx->cursorX = sDungeonMapCursorsX[pauseCtx->cursorPoint[PAUSE_MAP]]; + pauseCtx->cursorY = sDungeonMapCursorsY[pauseCtx->cursorPoint[PAUSE_MAP]]; + if (pauseCtx->cursorSlot[pauseCtx->pageIndex] >= DUNGEON_FLOOR_INDEX_4) { + // Floors + pauseCtx->cursorWidth = 18.0f; + pauseCtx->cursorHeight = 12.0f; + } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == DUNGEON_STRAY_FAIRIES) { + // Stray Fairies + pauseCtx->cursorHeight = 12.0f; + pauseCtx->cursorWidth = 40.0f; + } else { + // Map, Compass, Boss Key + pauseCtx->cursorHeight = 15.0f; + pauseCtx->cursorWidth = 15.0f; + } + } + break; + + case PAUSE_QUEST: + if (!R_PAUSE_DBG_QUEST_CURSOR_ON) { + pauseCtx->cursorX = sQuestStatusCursorsX[pauseCtx->cursorPoint[PAUSE_QUEST]]; + pauseCtx->cursorY = sQuestStatusCursorsY[pauseCtx->cursorPoint[PAUSE_QUEST]]; + } else { + pauseCtx->cursorX = R_PAUSE_DBG_QUEST_CURSOR_X; + pauseCtx->cursorY = R_PAUSE_DBG_QUEST_CURSOR_Y; + } + pauseCtx->cursorHeight = 17.0f; + pauseCtx->cursorWidth = 17.0f; + if (pauseCtx->cursorSlot[pauseCtx->pageIndex] == QUEST_17) { + pauseCtx->cursorHeight = 25.0f; + pauseCtx->cursorWidth = 25.0f; + } else if (pauseCtx->cursorSlot[pauseCtx->pageIndex] <= QUEST_SWORD) { + pauseCtx->cursorHeight = 18.0f; + pauseCtx->cursorWidth = 18.0f; + } else if ((pauseCtx->cursorSlot[pauseCtx->pageIndex] >= QUEST_SONG_SONATA) && + (pauseCtx->cursorSlot[pauseCtx->pageIndex] <= QUEST_SONG_SUN)) { + pauseCtx->cursorHeight = 12.0f; + pauseCtx->cursorWidth = 12.0f; + } + break; + + case PAUSE_MASK: + pauseCtx->cursorX = sItemMaskCursorsX[pauseCtx->cursorXIndex[PAUSE_MASK]]; + pauseCtx->cursorY = sItemMaskCursorsY[pauseCtx->cursorYIndex[PAUSE_MASK]]; + pauseCtx->cursorWidth = 15.0f; + pauseCtx->cursorHeight = 15.0f; + break; + + default: + break; + } + + pauseCtx->cursorSpinPhase += 0x300; + } else { + if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + pauseCtx->cursorX = -93.0f; + } else { // PAUSE_CURSOR_PAGE_RIGHT + pauseCtx->cursorX = 101.0f; + } + pauseCtx->cursorSpinPhase += 0x300; + pauseCtx->cursorHeight = 16.0f; + pauseCtx->cursorWidth = 16.0f; + pauseCtx->cursorY = -4.0f; + } + + if (pauseCtx->cursorWidth < pauseCtx->cursorShrinkRate) { + pauseCtx->cursorWidth = 0; + } else { + pauseCtx->cursorWidth -= pauseCtx->cursorShrinkRate; + } + + if (pauseCtx->cursorHeight < pauseCtx->cursorShrinkRate) { + pauseCtx->cursorHeight = 0.0f; + } else { + pauseCtx->cursorHeight -= pauseCtx->cursorShrinkRate; + } + + if (pauseCtx->cursorShrinkRate != 0.0f) { + pauseCtx->cursorShrinkRate -= 1.0f; + } + + sCursorCirclesX[0] = Math_SinS(pauseCtx->cursorSpinPhase) * pauseCtx->cursorWidth; + sCursorCirclesX[1] = Math_SinS(pauseCtx->cursorSpinPhase + 0x4000) * pauseCtx->cursorWidth; + sCursorCirclesX[2] = Math_SinS(pauseCtx->cursorSpinPhase + 0x8000) * pauseCtx->cursorWidth; + sCursorCirclesX[3] = Math_SinS(pauseCtx->cursorSpinPhase + 0xC000) * pauseCtx->cursorWidth; + sCursorCirclesY[0] = Math_CosS(pauseCtx->cursorSpinPhase) * pauseCtx->cursorHeight; + sCursorCirclesY[1] = Math_CosS(pauseCtx->cursorSpinPhase + 0x4000) * pauseCtx->cursorHeight; + sCursorCirclesY[2] = Math_CosS(pauseCtx->cursorSpinPhase + 0x8000) * pauseCtx->cursorHeight; + sCursorCirclesY[3] = Math_CosS(pauseCtx->cursorSpinPhase + 0xC000) * pauseCtx->cursorHeight; +} + +void KaleidoScope_DrawCursor(PlayState* play) { + PauseContext* pauseCtx = &play->pauseCtx; + s16 i; + + OPEN_DISPS(play->state.gfxCtx); + + if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG) || + ((pauseCtx->pageIndex == PAUSE_QUEST) && ((pauseCtx->mainState <= PAUSE_MAIN_STATE_SONG_PLAYBACK) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PROMPT) || + (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)))) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimR, sCursorPrimG, sCursorPrimB, 255); + gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvR, sCursorEnvG, sCursorEnvB, 255); + + Matrix_Translate(pauseCtx->cursorX, pauseCtx->cursorY, -50.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + for (i = 0; i < 4; i++) { + Matrix_Push(); + Matrix_Translate(sCursorCirclesX[i], sCursorCirclesY[i], -50.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPPipeSync(POLY_OPA_DISP++); + gDPLoadTextureBlock(POLY_OPA_DISP++, &D_08064340, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->cursorVtx[0], 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +void KaleidoScope_DrawGameOver(PlayState* play) { + static s16 sGameOverUlt = 0; + GraphicsContext* gfxCtx = play->state.gfxCtx; + + OPEN_DISPS(gfxCtx); + + Gfx_SetupDL39_Opa(gfxCtx); + + gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2); + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, + COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 80, sGameOverPrimR, sGameOverPrimG, sGameOverPrimB, sGameOverPrimAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, sGameOverEnvR, sGameOverEnvG, sGameOverEnvB, 255); + + sGameOverUlt -= 2; + + gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP1Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverMaskTex, 256, 1, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, 5, G_TX_NOLOD, G_TX_NOLOD); + + gDPSetTileSize(POLY_OPA_DISP++, 1, 0, sGameOverUlt & 0x7F, 252, (sGameOverUlt & 0x7F) + 124); + + gSPTextureRectangle(POLY_OPA_DISP++, 0x100, sGameOverRectPosY << 2, 0x200, (sGameOverRectPosY + 32) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP2Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSPTextureRectangle(POLY_OPA_DISP++, 0x200, sGameOverRectPosY << 2, 0x300, (sGameOverRectPosY + 32) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gGameOverP3Tex, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSPTextureRectangle(POLY_OPA_DISP++, 0x300, sGameOverRectPosY << 2, 0x400, (sGameOverRectPosY + 32) << 2, + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + + CLOSE_DISPS(gfxCtx); +} + +void KaleidoScope_Draw(PlayState* play) { + s32 pad; + PauseContext* pauseCtx = &play->pauseCtx; + InterfaceContext* interfaceCtx = &play->interfaceCtx; + + OPEN_DISPS(play->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment); + gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment); + gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment); + gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); + gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment); + gSPSegment(POLY_OPA_DISP++, 0x0B, pauseCtx->iconItemVtxSegment); + + if (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) { + KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); + Gfx_SetupDL42_Opa(play->state.gfxCtx); + + if (!IS_PAUSE_STATE_OWLWARP) { + // Draw Default or Game Over Menus + KaleidoScope_SetVertices(play, play->state.gfxCtx); + KaleidoScope_DrawPages(play, play->state.gfxCtx); + + Gfx_SetupDL42_Opa(play->state.gfxCtx); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f); + + if (!IS_PAUSE_STATE_GAMEOVER) { + KaleidoScope_DrawInfoPanel(play); + } + + KaleidoScope_UpdateCursorSize(play); + + if (pauseCtx->state == PAUSE_STATE_MAIN) { + KaleidoScope_DrawCursor(play); + } + + if ((pauseCtx->state >= PAUSE_STATE_GAMEOVER_3) && (pauseCtx->state <= PAUSE_STATE_GAMEOVER_10) && + (play->gameOverCtx.state != GAMEOVER_INACTIVE)) { + KaleidoScope_DrawGameOver(play); + } + } else { + // Draw Owl Warp Menu + KaleidoScope_SetVertices(play, play->state.gfxCtx); + KaleidoScope_DrawPages(play, play->state.gfxCtx); + KaleidoScope_DrawOwlWarpMapPage(play); + + Gfx_SetupDL42_Opa(play->state.gfxCtx); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f); + KaleidoScope_DrawOwlWarpInfoPanel(play); + KaleidoScope_UpdateCursorSize(play); + + if (pauseCtx->state == PAUSE_STATE_OWLWARP_SELECT) { + KaleidoScope_DrawCursor(play); + } + } + } + + if ((pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY_INIT) || (pauseCtx->debugEditor == DEBUG_EDITOR_INVENTORY)) { + KaleidoScope_DrawInventoryEditor(play); + } + + CLOSE_DISPS(play->state.gfxCtx); +} void KaleidoScope_GrayOutTextureRGBA32(u32* texture, u16 pixelCount) { u32 rgb; @@ -1641,10 +2778,10 @@ void KaleidoScope_UpdateOpening(PlayState* play) { Interface_UpdateButtonsAlt(play, 1); if (pauseCtx->cursorSpecialPos == 0) { - gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex][0]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = D_801C6A98[pauseCtx->pageIndex][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_B] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][0]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gPageSwitchNextButtonStatus[pauseCtx->pageIndex][1]; gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; } else { gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; @@ -1723,7 +2860,7 @@ void KaleidoScope_Update(PlayState* play) { size0 = SEGMENT_ROM_SIZE(icon_item_static_old); CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); - gSegments[0x08] = PHYSICAL_TO_VIRTUAL(pauseCtx->iconItemSegment); + gSegments[0x08] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); for (itemId = 0; itemId <= ITEM_BOW_ARROW_FIRE; itemId++) { if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][(s32)itemId]) { @@ -1760,7 +2897,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); func_8011552C(play, DO_ACTION_INFO); if (((void)0, gSaveContext.worldMapArea) < 0x16) { - func_8082192C(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea)); + Kaleido_LoadMapNameStaticLarge(pauseCtx->nameSegment + 0x400, ((void)0, gSaveContext.worldMapArea)); } pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00); @@ -1903,7 +3040,7 @@ void KaleidoScope_Update(PlayState* play) { case PAUSE_STATE_SAVEPROMPT: switch (pauseCtx->savePromptState) { - case PAUSE_SAVEPROMPT_STATE_0: + case PAUSE_SAVEPROMPT_STATE_APPEARING: pauseCtx->roll -= 78.5f; sPauseCursorLeftX -= (s16)(sPauseCursorLeftMoveOffsetX / 4); sPauseCursorRightX -= (s16)(sPauseCursorRightMoveOffsetX / 4); @@ -1917,7 +3054,7 @@ void KaleidoScope_Update(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_CUP)) { if (pauseCtx->promptChoice != PAUSE_PROMPT_YES) { func_8011552C(play, DO_ACTION_NONE); - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; } else { play_sound(NA_SE_SY_PIECE_OF_HEART); Play_SaveCycleSceneFlags(&play->state); @@ -1941,7 +3078,7 @@ void KaleidoScope_Update(PlayState* play) { func_801A3AEC(0); } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { func_8011552C(play, DO_ACTION_NONE); - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_2; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU; D_8082B90C = pauseCtx->roll; } break; @@ -1987,26 +3124,31 @@ void KaleidoScope_Update(PlayState* play) { } break; - case PAUSE_SAVEPROMPT_STATE_2: + case PAUSE_SAVEPROMPT_STATE_RETURN_TO_MENU: pauseCtx->roll += 78.5f; sPauseCursorLeftX += (s16)(sPauseCursorLeftMoveOffsetX / 4); sPauseCursorRightX += (s16)(sPauseCursorRightMoveOffsetX / 4); + if (pauseCtx->roll >= -314.0f) { pauseCtx->state = PAUSE_STATE_MAIN; - pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_0; + pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_APPEARING; pauseCtx->roll = -314.0f; pauseCtx->itemPageRoll = pauseCtx->mapPageRoll = pauseCtx->questPageRoll = pauseCtx->maskPageRoll = 0.0f; func_8011552C(play, DO_ACTION_INFO); - gSaveContext.buttonStatus[EQUIP_SLOT_B] = D_801C6A98[pauseCtx->pageIndex + 1][0]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = D_801C6A98[pauseCtx->pageIndex + 1][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = D_801C6A98[pauseCtx->pageIndex + 1][1]; - gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = D_801C6A98[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_B] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][0]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = + gPageSwitchNextButtonStatus[pauseCtx->pageIndex + 1][1]; if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) || (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT)) { KaleidoScope_MoveCursorToSpecialPos(play, pauseCtx->cursorSpecialPos); } else { - func_80821A04(play); + KaleidoScope_MoveCursorFromSpecialPos(play); } } break; @@ -2304,7 +3446,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->nameSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemLangSegment + size2); func_8011552C(play, DO_ACTION_WARP); worldMapCursorPoint = pauseCtx->cursorPoint[PAUSE_WORLD_MAP]; - func_80821900(pauseCtx->nameSegment, worldMapCursorPoint); + Kaleido_LoadMapNameStatic(pauseCtx->nameSegment, worldMapCursorPoint); pauseCtx->iconItemVtxSegment = (void*)ALIGN16((uintptr_t)pauseCtx->nameSegment + 0xA00); DmaMgr_SendRequest0(pauseCtx->iconItemVtxSegment, SEGMENT_ROM_START(icon_item_vtx_static), diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 0422c71e2..a28ff6132 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -4218,28 +4218,28 @@ 0x808204AC:("KaleidoScope_UpdateMaskCursor",), 0x80820FA4:("KaleidoScope_UpdateMaskEquip",), 0x80821730:("KaleidoScope_UpdatePrompt",), - 0x80821900:("func_80821900",), - 0x8082192C:("func_8082192C",), - 0x80821958:("func_80821958",), + 0x80821900:("Kaleido_LoadMapNameStatic",), + 0x8082192C:("Kaleido_LoadMapNameStaticLarge",), + 0x80821958:("Kaleido_LoadItemNameStatic",), 0x80821984:("KaleidoScope_MoveCursorToSpecialPos",), - 0x80821A04:("func_80821A04",), + 0x80821A04:("KaleidoScope_MoveCursorFromSpecialPos",), 0x80821AD4:("KaleidoScope_DrawTexQuadRGBA32",), - 0x80821CC4:("func_80821CC4",), + 0x80821CC4:("KaleidoScope_SwitchPage",), 0x80821D84:("KaleidoScope_HandlePageToggles",), 0x80821F30:("KaleidoScope_DrawPageSections",), 0x808221DC:("KaleidoScope_DrawPages",), - 0x80823350:("func_80823350",), + 0x80823350:("KaleidoScope_DrawInfoPanel",), 0x80824738:("KaleidoScope_UpdateNamePanel",), 0x808248D0:("KaleidoScope_DrawOwlWarpMapPage",), - 0x80824B90:("func_80824B90",), + 0x80824B90:("KaleidoScope_DrawOwlWarpInfoPanel",), 0x808256E4:("KaleidoScope_UpdateOwlWarpNamePanel",), 0x8082585C:("KaleidoScope_UpdateSwitchPage",), 0x808259D4:("KaleidoScope_SetView",), 0x80825A50:("KaleidoScope_SetPageVertices",), 0x80825E28:("KaleidoScope_SetVertices",), - 0x808274DC:("func_808274DC",), - 0x80827A8C:("func_80827A8C",), - 0x80827E08:("func_80827E08",), + 0x808274DC:("KaleidoScope_UpdateCursorSize",), + 0x80827A8C:("KaleidoScope_DrawCursor",), + 0x80827E08:("KaleidoScope_DrawGameOver",), 0x808283D8:("KaleidoScope_Draw",), 0x808286D8:("KaleidoScope_GrayOutTextureRGBA32",), 0x80828788:("KaleidoScope_UpdateOpening",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f3f90ba25..f58d54a87 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1967,7 +1967,7 @@ 0x801C6A8C:("D_801C6A8C","UNK_TYPE2","",0x2), 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2), 0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2), - 0x801C6A98:("D_801C6A98","UNK_TYPE1","",0x1), + 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1), 0x801C6AB8:("D_801C6AB8","UNK_TYPE1","",0x1), 0x801C6B28:("D_801C6B28","UNK_TYPE1","",0x1), 0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1), @@ -4638,7 +4638,7 @@ 0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10), 0x80816014:("sHoursLeftTextures","TexturePtr","[3]",0xC), 0x8082AED0:("sQuestRemainsColorTimerInit","UNK_TYPE1","",0x1), - 0x8082AED8:("sQuestHpColorTimerInit","UNK_TYPE1","",0x1), + 0x8082AED8:("sQuestHpColorTimerInits","UNK_TYPE1","",0x1), 0x8082AEE0:("sQuestSongPlayedOcarinaButtonsNum","UNK_TYPE2","",0x2), 0x8082AEE4:("sQuestSongPlayedOcarinaButtons","UNK_TYPE1","",0x1), 0x8082AEF0:("sQuestSongPlayedOcarinaButtonsAlpha","UNK_TYPE2","",0x2), @@ -4744,7 +4744,7 @@ 0x8082B918:("sPauseCursorLeftX","UNK_TYPE2","",0x2), 0x8082B91C:("sPauseCursorRightX","UNK_TYPE2","",0x2), 0x8082B920:("D_8082B920","UNK_TYPE2","",0x2), - 0x8082B924:("D_8082B924","UNK_TYPE2","",0x2), + 0x8082B924:("sPauseZRCursorColorTimerInits","UNK_TYPE2","",0x2), 0x8082B944:("sGameOverRectPosY","UNK_TYPE2","",0x2), 0x8082B948:("sCursorPrimColorTarget","UNK_TYPE2","",0x2), 0x8082B96C:("sCursorEnvColorTarget","UNK_TYPE2","",0x2), @@ -4752,12 +4752,12 @@ 0x8082B994:("sCursorColorTargetIndex","UNK_TYPE2","",0x2), 0x8082B998:("D_8082B998","UNK_TYPE1","",0x1), 0x8082B9A8:("D_8082B9A8","UNK_TYPE1","",0x1), - 0x8082B9B8:("D_8082B9B8","UNK_TYPE1","",0x1), - 0x8082B9C8:("D_8082B9C8","UNK_TYPE2","",0x2), - 0x8082B9CC:("D_8082B9CC","UNK_TYPE2","",0x2), - 0x8082B9D0:("D_8082B9D0","UNK_TYPE1","",0x1), - 0x8082B9E0:("D_8082B9E0","UNK_TYPE2","",0x2), - 0x8082B9E4:("D_8082B9E4","UNK_TYPE2","",0x2), + 0x8082B9B8:("sPauseZRCursorColorTargets","UNK_TYPE1","",0x1), + 0x8082B9C8:("sPauseZRCursorColorTimer","UNK_TYPE2","",0x2), + 0x8082B9CC:("sPauseZRCursorColorIndex","UNK_TYPE2","",0x2), + 0x8082B9D0:("sPauseZRCursorColorTargets","UNK_TYPE1","",0x1), + 0x8082B9E0:("sPauseZRCursorColorTimer","UNK_TYPE2","",0x2), + 0x8082B9E4:("sPauseZRCursorColorIndex","UNK_TYPE2","",0x2), 0x8082B9E8:("sVtxPageMaskQuadsX","UNK_TYPE1","",0x1), 0x8082B9EC:("sVtxPageItemQuadsX","UNK_TYPE1","",0x1), 0x8082B9F0:("sVtxPageMapDungeonQuadsX","UNK_TYPE1","",0x1), @@ -4789,17 +4789,17 @@ 0x8082BBC4:("sQuestVtxRectTop","UNK_TYPE2","",0x2), 0x8082BC14:("sQuestVtxWidths","UNK_TYPE2","",0x2), 0x8082BC64:("sQuestVtxHeights","UNK_TYPE2","",0x2), - 0x8082BCB4:("D_8082BCB4","UNK_TYPE1","",0x1), - 0x8082BCCC:("D_8082BCCC","UNK_TYPE1","",0x1), - 0x8082BCDC:("D_8082BCDC","UNK_TYPE1","",0x1), - 0x8082BD08:("D_8082BD08","UNK_TYPE1","",0x1), - 0x8082BD34:("D_8082BD34","UNK_TYPE1","",0x1), - 0x8082BD5C:("D_8082BD5C","UNK_TYPE1","",0x1), - 0x8082BD84:("D_8082BD84","UNK_TYPE1","",0x1), - 0x8082BDA8:("D_8082BDA8","UNK_TYPE1","",0x1), - 0x8082BDCC:("D_8082BDCC","UNK_TYPE1","",0x1), - 0x8082BE28:("D_8082BE28","UNK_TYPE1","",0x1), - 0x8082BE84:("D_8082BE84","UNK_TYPE2","",0x2), + 0x8082BCB4:("sItemMaskCursorsX","UNK_TYPE1","",0x1), + 0x8082BCCC:("sItemMaskCursorsY","UNK_TYPE1","",0x1), + 0x8082BCDC:("sWorldMapCursorsX","UNK_TYPE1","",0x1), + 0x8082BD08:("sWorldMapCursorsY","UNK_TYPE1","",0x1), + 0x8082BD34:("sOwlWarpWorldMapCursorsX","UNK_TYPE1","",0x1), + 0x8082BD5C:("sOwlWarpWorldMapCursorsY","UNK_TYPE1","",0x1), + 0x8082BD84:("sDungeonMapCursorsX","UNK_TYPE1","",0x1), + 0x8082BDA8:("sDungeonMapCursorsY","UNK_TYPE1","",0x1), + 0x8082BDCC:("sQuestStatusCursorsX","UNK_TYPE1","",0x1), + 0x8082BE28:("sQuestStatusCursorsY","UNK_TYPE1","",0x1), + 0x8082BE84:("sGameOverUlt","UNK_TYPE2","",0x2), 0x8082BE88:("sCursorPointsToOcarinaModes","UNK_TYPE1","",0x1), 0x8082BE9C:("sUnpausedHudVisibility","UNK_TYPE2","",0x2), 0x8082BEA0:("sNextMainState","UNK_TYPE2","",0x2), @@ -4921,23 +4921,23 @@ 0x8082C0E4:("jtbl_8082C0E4","UNK_PTR","",0x4), 0x8082C148:("jtbl_8082C148","UNK_PTR","",0x4), 0x8082C18C:("jtbl_8082C18C","UNK_PTR","",0x4), - 0x8082DA50:("D_8082DA50","UNK_TYPE1","",0x1), - 0x8082DA52:("D_8082DA52","UNK_TYPE1","",0x1), - 0x8082DA54:("D_8082DA54","UNK_TYPE1","",0x1), - 0x8082DA56:("D_8082DA56","UNK_TYPE1","",0x1), + 0x8082DA50:("sPauseZRCursorRed","UNK_TYPE1","",0x1), + 0x8082DA52:("sPauseZRCursorGreen","UNK_TYPE1","",0x1), + 0x8082DA54:("sPauseZRCursorBlue","UNK_TYPE1","",0x1), + 0x8082DA56:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1), 0x8082DA58:("sUnpausedButtonStatus","UNK_TYPE1","",0x1), - 0x8082DA60:("D_8082DA60","f32","",0x4), + 0x8082DA60:("sCursorCirclesX","f32","",0x4), 0x8082DA64:("D_8082DA64","f32","",0x4), 0x8082DA68:("D_8082DA68","f32","",0x4), 0x8082DA6C:("D_8082DA6C","f32","",0x4), - 0x8082DA70:("D_8082DA70","f32","",0x4), + 0x8082DA70:("sCursorCirclesY","f32","",0x4), 0x8082DA74:("D_8082DA74","f32","",0x4), 0x8082DA78:("D_8082DA78","f32","",0x4), 0x8082DA7C:("D_8082DA7C","f32","",0x4), - 0x8082DA80:("D_8082DA80","UNK_TYPE1","",0x1), - 0x8082DA82:("D_8082DA82","UNK_TYPE1","",0x1), - 0x8082DA84:("D_8082DA84","UNK_TYPE1","",0x1), - 0x8082DA86:("D_8082DA86","UNK_TYPE1","",0x1), + 0x8082DA80:("sPauseZRCursorRed","UNK_TYPE1","",0x1), + 0x8082DA82:("sPauseZRCursorGreen","UNK_TYPE1","",0x1), + 0x8082DA84:("sPauseZRCursorBlue","UNK_TYPE1","",0x1), + 0x8082DA86:("sPauseZRCursorAlpha","UNK_TYPE1","",0x1), 0x8085B9F0:("D_8085B9F0","UNK_TYPE1","",0x1), 0x8085BA08:("D_8085BA08","UNK_TYPE1","",0x1), 0x8085BA20:("D_8085BA20","UNK_TYPE1","",0x1), diff --git a/undefined_syms.txt b/undefined_syms.txt index 7ef51ef24..aad4bba7b 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1159,20 +1159,6 @@ D_0B000188 = 0x0B000188; // segment 0x0C D_0C000000 = 0x0C000000; -D_0C000800 = 0x0C000800; -D_0C001000 = 0x0C001000; -D_0C001800 = 0x0C001800; -D_0C001980 = 0x0C001980; -D_0C006C00 = 0x0C006C00; -D_0C006E00 = 0x0C006E00; -D_0C014668 = 0x0C014668; - -// segment 0x0D - -D_0D002000 = 0x0D002000; -D_0D002200 = 0x0D002200; -D_0D002400 = 0x0D002400; -D_0D003700 = 0x0D003700; // segment 0x0E From 65d72a54cf712292f0bb97af8eeaa10c2eeb2e8c Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 29 May 2023 17:40:10 -0400 Subject: [PATCH 11/36] z_syscfb.c, z_vimode.c, code_80140CE0 split and OK (#1159) * z_vimode * Fixups * WIP * matching * sys_cfb OK * some documentation * vimode docs, name all syscfb vars * quick fixes * suggested changes, more things I missed * merge suggestions * code_80140CE0 -> z_viscvg * format * update symbols * more suggestions * fix include order * sNotebookViMode comment, bss fix --------- Co-authored-by: Kelebek1 Co-authored-by: louist103 --- include/functions.h | 42 +- include/macros.h | 6 +- include/regs.h | 7 + include/ultra64/viint.h | 37 ++ include/variables.h | 44 +- include/z64.h | 27 +- spec | 4 +- src/code/code_80140CE0.c | 7 - src/code/game.c | 12 +- src/code/graph.c | 29 +- src/code/sys_cfb.c | 125 +++++- src/code/z_actor.c | 2 +- src/code/z_demo.c | 1 - src/code/z_fbdemo_circle.c | 4 +- src/code/z_kankyo.c | 2 +- src/code/z_lights.c | 11 +- src/code/z_parameter.c | 10 +- src/code/z_play.c | 30 +- src/code/z_rcp.c | 14 +- src/code/z_view.c | 4 +- src/code/z_vimode.c | 376 +++++++++++++++++- src/code/z_viscvg.c | 90 +++++ src/code/z_viszbuf.c | 8 +- src/libultra/io/osViModeMpalLan1.c | 39 +- src/libultra/io/osViModeNtscHpf1.c | 39 +- src/libultra/io/osViModeNtscLan1.c | 39 +- src/libultra/io/osViModePalLan1.c | 39 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 1 + .../actors/ovl_player_actor/z_player.c | 1 + .../fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c | 6 +- tools/disasm/functions.txt | 40 +- tools/disasm/variables.txt | 44 +- tools/sizes/code_functions.csv | 24 +- undefined_syms.txt | 4 +- 34 files changed, 896 insertions(+), 272 deletions(-) create mode 100644 include/ultra64/viint.h delete mode 100644 src/code/code_80140CE0.c create mode 100644 src/code/z_viscvg.c diff --git a/include/functions.h b/include/functions.h index 0f99fb24b..8330903e1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1090,7 +1090,7 @@ void Font_LoadCharNES(PlayState* play, u8 codePointIndex, s32 offset); void Font_LoadMessageBoxEndIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); // void func_800F5090(void); -// void func_800F50D4(void); +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2); u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5); f32 Environment_LerpWeight(u16 max, u16 min, u16 val); @@ -1724,22 +1724,23 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a); void SkinMatrix_MulYRotation(MtxF* mf, s16 a); void SkinMatrix_SetZRotation(MtxF* mf, s16 a); -void func_80140260(OSViMode* vimode); -// void func_8014026C(OSViMode* param_1, UNK_TYPE1 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6, s32 param_7, s32 param_8, UNK_TYPE4 param_9, s32 param_10, s16 param_11, u32 param_12, UNK_TYPE4 param_13); -// void func_80140730(void); -// void func_80140810(void); -void func_80140898(void* arg0); -void func_80140900(void* arg0); -// void func_8014090C(void); -// void func_80140970(void); -void func_80140CE0(void* arg0); -void func_80140D04(void* arg0); -void func_80140D10(void* arg0, Gfx** gfx, u32 arg2); +void ViMode_LogPrint(OSViMode* vimode); +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust); +void ViMode_Save(ViMode* viMode); +void ViMode_Load(ViMode* viMode); +void ViMode_Init(ViMode* viMode); +void ViMode_Destroy(ViMode* viMode); +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures); +void ViMode_Update(ViMode* viMode, Input* input); +void VisCvg_Init(struct_801F8010* this); +void VisCvg_Destroy(struct_801F8010* this); +void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp); void func_80140E80(Struct_80140E80* arg0); void func_80140EA0(Struct_80140E80* arg0); // void func_80140EAC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80141008(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); -void func_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, s32 width, s32 height, s32 arg5); +void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height, s32 arg5); // void func_801411B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); // void func_80141200(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); @@ -2048,15 +2049,14 @@ void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ); void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ); -void func_80178750(void); -void func_80178818(void); -void func_80178978(void); -// void func_801789D4(void); -void* SysCfb_GetFbPtr(s32 index); +void SysCfb_SetLoResMode(void); +void SysCfb_SetHiResMode(void); +void SysCfb_Init(void); +void* SysCfb_GetFramebuffer(s32 index); void* SysCfb_GetZBuffer(void); -// UNK_TYPE4 func_80178A24(void); -// void func_80178A34(void); -s32 func_80178A94(s32 param_1, s32 param_2); +void* SysCfb_GetWorkBuffer(void); +u16 SysCfb_GetZBufferPixel(s32 x, s32 y); +s32 SysCfb_GetZBufferInt(s32 x, s32 y); void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size); void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value); diff --git a/include/macros.h b/include/macros.h index f2bcb07dd..25ccb3d37 100644 --- a/include/macros.h +++ b/include/macros.h @@ -7,9 +7,11 @@ #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +#define SCREEN_WIDTH_HIRES 640 +#define SCREEN_HEIGHT_HIRES 480 -#define SCREEN_WIDTH_HIGH_RES 576 -#define SCREEN_HEIGHT_HIGH_RES 454 +#define HIRES_BUFFER_WIDTH 576 +#define HIRES_BUFFER_HEIGHT 454 #define PROJECTED_TO_SCREEN_X(projectedPos, invW) ((projectedPos).x * (invW) * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2)) #define PROJECTED_TO_SCREEN_Y(projectedPos, invW) ((projectedPos).y * (invW) * (-SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2)) diff --git a/include/regs.h b/include/regs.h index 112a00239..bc8bacb1b 100644 --- a/include/regs.h +++ b/include/regs.h @@ -65,6 +65,13 @@ extern RegEditor* gRegEditor; #define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT #define R_ROOM_IMAGE_NODRAW_FLAGS SREG(25) #define R_UPDATE_RATE SREG(30) +#define R_VI_MODE_EDIT_STATE SREG(48) +#define R_VI_MODE_EDIT_WIDTH SREG(49) +#define R_VI_MODE_EDIT_HEIGHT SREG(50) +#define R_VI_MODE_EDIT_ULY_ADJ SREG(51) +#define R_VI_MODE_EDIT_LRY_ADJ SREG(52) +#define R_VI_MODE_EDIT_ULX_ADJ SREG(53) +#define R_VI_MODE_EDIT_LRX_ADJ SREG(54) #define R_FB_FILTER_TYPE SREG(80) #define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) #define R_FB_FILTER_A SREG(84) diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h new file mode 100644 index 000000000..4fea2259a --- /dev/null +++ b/include/ultra64/viint.h @@ -0,0 +1,37 @@ +#ifndef ULTRA64_VIINT_H +#define ULTRA64_VIINT_H + +#define VI_STATE_MODE_SET (1 << 0) +#define VI_STATE_XSCALE_SET (1 << 1) +#define VI_STATE_YSCALE_FACTOR_SET (1 << 2) +#define VI_STATE_CTRL_SET (1 << 3) +#define VI_STATE_BUFFER_SET (1 << 4) +#define VI_STATE_BLACK (1 << 5) +#define VI_STATE_REPEATLINE (1 << 6) +#define VI_STATE_FADE (1 << 7) + +#define VI_SCALE_MASK 0xFFF +#define VI_2_10_FPART_MASK 0x3FF +#define VI_SUBPIXEL_SH 0x10 + +// For use in initializing OSViMode structures + +#define BURST(hsync_width, color_width, vsync_width, color_start) \ + (hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20)) +#define WIDTH(v) v +#define VSYNC(v) v +#define HSYNC(duration, leap) (duration | (leap << 16)) +#define LEAP(upper, lower) ((upper << 16) | lower) +#define START(start, end) ((start << 16) | end) + +#define FTOFIX(val, i, f) ((u32)(val * (f32)(1 << f)) & ((1 << (i + f)) - 1)) + +#define F210(val) FTOFIX(val, 2, 10) +#define SCALE(scaleup, off) (F210((1.0f / (f32)scaleup)) | (F210((f32)off) << 16)) + +#define VCURRENT(v) v +#define ORIGIN(v) v +#define VINTR(v) v +#define HSTART START + +#endif diff --git a/include/variables.h b/include/variables.h index e7dc43da0..dfb0ab791 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2393,7 +2393,7 @@ extern UNK_TYPE1 D_801F7FF0; extern struct_801F8010 D_801F8010; extern VisZbuf sVisZbuf; extern VisMono sMonoColors; -extern UNK_TYPE1 D_801F8048; +extern ViMode D_801F8048; extern FaultAddrConvClient sGraphFaultAddrConvClient; extern FaultClient sGraphFaultClient; extern GfxMasterList* gGfxMasterDL; @@ -2422,30 +2422,30 @@ extern volatile OSTime sRSPOtherTotalTime; // extern UNK_TYPE1 D_801FBB18; extern volatile OSTime gRDPTotalTime; // extern UNK_TYPE1 D_801FBB28; -extern OSViMode D_801FBB30; -extern u32* gFramebuffers[2]; -extern OSViMode* D_801FBB88; +extern OSViMode sNotebookViMode; +extern void* gFramebuffers[2]; +extern OSViMode* gActiveViMode; extern u16* gZBufferPtr; -extern void* D_801FBB90; +extern void* gWorkBuffer; extern u64* gGfxSPTaskOutputBufferPtr; -extern size_t gGfxSPTaskOutputBufferSize; -// extern UNK_TYPE1 D_801FBB9C; -// extern UNK_TYPE1 D_801FBBA0; -extern u16 (*gZBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u16 (*gWorkBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBuffer)[0x3000]; extern void* gGfxSPTaskOutputBufferEnd; -// extern UNK_TYPE1 D_801FBBB4; -// extern UNK_TYPE1 D_801FBBB8; -// extern UNK_TYPE1 D_801FBBBC; -// extern UNK_TYPE1 D_801FBBC0; -extern u64 (*gGfxSPTaskOutputBuffer2)[0x3000]; -extern void* gGfxSPTaskOutputBufferEnd2; -extern UNK_TYPE2 D_801FBBCC; -extern UNK_TYPE2 D_801FBBCE; -// extern UNK_TYPE1 D_801FBBD0; -// extern UNK_TYPE1 D_801FBBD2; -extern u8 D_801FBBD4; +extern void* sCfbLoRes1; +extern void* sCfbLoRes0; +extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndLoRes; +extern void* sCfbHiRes1; +extern void* sCfbHiRes0; +extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndHiRes; +extern s16 gCfbWidth; +extern s16 gCfbHeight; +extern s16 gCfbLeftAdjust; +extern s16 gCfbUpperAdjust; +extern u8 gSysCfbHiResEnabled; extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64.h b/include/z64.h index 12738f9a7..bbcb860e5 100644 --- a/include/z64.h +++ b/include/z64.h @@ -612,7 +612,7 @@ typedef struct { typedef struct { /* 0x0 */ u32 type; /* 0x4 */ u32 setScissor; - /* 0x8 */ Color_RGBA8 color; + /* 0x8 */ Color_RGBA8_u32 color; /* 0xC */ Color_RGBA8 envColor; } struct_801F8010; // size = 0x10 @@ -676,4 +676,29 @@ enum fram_mode { FRAM_MODE_STATUS }; +typedef enum { + /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, + /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, + /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments + /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode +} ViModeEditState; + +typedef struct { + /* 0x00 */ OSViMode customViMode; + /* 0x50 */ s32 viHeight; + /* 0x54 */ s32 viWidth; + /* 0x58 */ s32 rightAdjust; + /* 0x5C */ s32 leftAdjust; + /* 0x60 */ s32 lowerAdjust; + /* 0x64 */ s32 upperAdjust; + /* 0x68 */ s32 editState; + /* 0x6C */ s32 tvType; + /* 0x70 */ u32 loRes; + /* 0x74 */ u32 antialiasOff; + /* 0x78 */ u32 modeN; + /* 0x7C */ u32 fb16Bit; + /* 0x80 */ u32 viFeatures; + /* 0x84 */ u32 unk_84; +} ViMode; // size = 0x88 + #endif diff --git a/spec b/spec index a4e38cc6f..5fe02e11f 100644 --- a/spec +++ b/spec @@ -523,8 +523,7 @@ beginseg include "build/src/code/z_rumble.o" include "build/src/code/z_view.o" include "build/src/code/z_vimode.o" - include "build/src/code/code_80140CE0.o" - include "build/data/code/code_80140CE0.data.o" + include "build/src/code/z_viscvg.o" include "build/src/code/code_80140E80.o" include "build/src/code/z_vismono.o" include "build/src/code/z_viszbuf.o" @@ -574,7 +573,6 @@ beginseg include "build/data/code/speed_meter.bss.o" include "build/src/code/su_mtx.o" include "build/src/code/sys_cfb.o" - include "build/data/code/sys_cfb.bss.o" include "build/src/code/sys_cmpdma.o" include "build/src/code/sys_initial_check.o" include "build/src/code/sys_math.o" diff --git a/src/code/code_80140CE0.c b/src/code/code_80140CE0.c deleted file mode 100644 index f3d487fab..000000000 --- a/src/code/code_80140CE0.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D10.s") diff --git a/src/code/game.c b/src/code/game.c index bc8b9e39f..c98241177 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -31,7 +31,7 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1); D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2); D_801F8010.color.a = R_FB_FILTER_A; - func_80140D10(&D_801F8010, &dlist, zbuffer); + VisCvg_Draw(&D_801F8010, &dlist); } else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) { sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6); sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0); @@ -194,7 +194,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g gameState->main = NULL; gameState->destroy = NULL; gameState->running = 1; - gfxCtx->viMode = D_801FBB88; + gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; @@ -210,10 +210,10 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g init(gameState); - func_80140CE0(&D_801F8010); + VisCvg_Init(&D_801F8010); VisZbuf_Init(&sVisZbuf); VisMono_Init(&sMonoColors); - func_80140898(&D_801F8048); + ViMode_Init(&D_801F8048); func_801773A0(&D_801F7FF0); Rumble_Init(); @@ -232,10 +232,10 @@ void GameState_Destroy(GameState* gameState) { Rumble_Destroy(); func_801773C4(&D_801F7FF0); - func_80140D04(&D_801F8010); + VisCvg_Destroy(&D_801F8010); VisZbuf_Destroy(&sVisZbuf); VisMono_Destroy(&sMonoColors); - func_80140900(&D_801F8048); + ViMode_Destroy(&D_801F8048); THA_Destroy(&gameState->heap); GameAlloc_Cleanup(&gameState->alloc); } diff --git a/src/code/graph.c b/src/code/graph.c index 558f7d563..bf9067b69 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -16,12 +16,12 @@ OSTime sGraphTaskStartTime; void Graph_FaultClient(void) { FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1"); - osViSwapBuffer(SysCfb_GetFbPtr(0)); - osViSetMode(D_801FBB88); + osViSwapBuffer(SysCfb_GetFramebuffer(0)); + osViSetMode(gActiveViMode); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); Fault_WaitForInput(); - osViSwapBuffer(SysCfb_GetFbPtr(1)); - osViSetMode(D_801FBB88); + osViSwapBuffer(SysCfb_GetFramebuffer(1)); + osViSetMode(gActiveViMode); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); } @@ -50,7 +50,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { gfxCtx->workBuffer = pool->workBuffer; gfxCtx->debugBuffer = pool->debugBuffer; - gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); gSegments[0x0F] = gfxCtx->curFrameBuffer; gfxCtx->zbuffer = SysCfb_GetZBuffer(); @@ -179,7 +179,7 @@ retry: task->dramStack = (u64*)gGfxSPTaskStack; task->dramStackSize = sizeof(gGfxSPTaskStack); task->outputBuff = gGfxSPTaskOutputBufferPtr; - task->outputBuffSize = gGfxSPTaskOutputBufferSize; + task->outputBuffSize = gGfxSPTaskOutputBufferEnd; task->dataPtr = (u64*)gGfxMasterDL; task->dataSize = 0; task->yieldDataPtr = (u64*)gGfxSPTaskYieldBuffer; @@ -340,18 +340,19 @@ void Graph_ThreadEntry(void* arg) { u32 size; s32 pad[2]; - gZBuffer = SystemArena_Malloc(sizeof(*gZBuffer) + sizeof(*gWorkBuffer) + 64 - 1); - gZBuffer = (void*)ALIGN64((u32)gZBuffer); + gZBufferLoRes = SystemArena_Malloc(sizeof(*gZBufferLoRes) + sizeof(*gWorkBufferLoRes) + 64 - 1); + gZBufferLoRes = (void*)ALIGN64((u32)gZBufferLoRes); - gWorkBuffer = (void*)((u8*)gZBuffer + sizeof(*gZBuffer)); + gWorkBufferLoRes = (void*)((u8*)gZBufferLoRes + sizeof(*gZBufferLoRes)); - gGfxSPTaskOutputBuffer2 = gGfxSPTaskOutputBuffer = SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBuffer)); + gGfxSPTaskOutputBufferHiRes = gGfxSPTaskOutputBufferLoRes = + SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBufferLoRes)); - gGfxSPTaskOutputBufferEnd = (u8*)gGfxSPTaskOutputBuffer + sizeof(*gGfxSPTaskOutputBuffer); - gGfxSPTaskOutputBufferEnd2 = (u8*)gGfxSPTaskOutputBuffer2 + sizeof(*gGfxSPTaskOutputBuffer2); + gGfxSPTaskOutputBufferEndLoRes = (u8*)gGfxSPTaskOutputBufferLoRes + sizeof(*gGfxSPTaskOutputBufferLoRes); + gGfxSPTaskOutputBufferEndHiRes = (u8*)gGfxSPTaskOutputBufferHiRes + sizeof(*gGfxSPTaskOutputBufferHiRes); - func_80178978(); - Fault_SetFB(D_801FBB90, SCREEN_WIDTH, SCREEN_HEIGHT); + SysCfb_Init(); + Fault_SetFB(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT); Graph_Init(&gfxCtx); while (nextOvl) { diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 25d92227c..16c39855c 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -2,20 +2,127 @@ #include "buffers.h" #include "system_malloc.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s") +extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; +extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178818.s") +OSViMode sNotebookViMode; // placeholder name +void* gFramebuffers[2]; +OSViMode* gActiveViMode; +u16* gZBufferPtr; +void* gWorkBuffer; +u64* gGfxSPTaskOutputBufferPtr; +void* gGfxSPTaskOutputBufferEnd; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178978.s") +void* sCfbLoRes1; +void* sCfbLoRes0; +u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +void* gGfxSPTaskOutputBufferEndLoRes; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_801789D4.s") +void* sCfbHiRes1; +void* sCfbHiRes0; +u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +void* gGfxSPTaskOutputBufferEndHiRes; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetFbPtr.s") +s16 gCfbWidth; +s16 gCfbHeight; +s16 gCfbLeftAdjust; +s16 gCfbUpperAdjust; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetZBuffer.s") +u8 gSysCfbHiResEnabled; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A24.s") +void SysCfb_SetLoResMode(void) { + gFramebuffers[1] = sCfbLoRes1; + gFramebuffers[0] = sCfbLoRes0; + gZBufferPtr = *gZBufferLoRes; + gWorkBuffer = gWorkBufferLoRes; + gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferLoRes; + gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndLoRes; + gCfbWidth = SCREEN_WIDTH; + gCfbHeight = SCREEN_HEIGHT; + gCfbLeftAdjust = 0; + gCfbUpperAdjust = 0; + gSysCfbHiResEnabled = false; + gScreenWidth = gCfbWidth; + gScreenHeight = gCfbHeight; + gActiveViMode = &osViModeNtscLan1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A34.s") +void SysCfb_SetHiResMode(void) { + gFramebuffers[1] = sCfbHiRes1; + gFramebuffers[0] = sCfbHiRes0; + gZBufferPtr = *gZBufferHiRes; + gWorkBuffer = gWorkBufferHiRes; + gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferHiRes; + gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndHiRes; + if (1) {} + gCfbWidth = HIRES_BUFFER_WIDTH; + gCfbHeight = HIRES_BUFFER_HEIGHT; + gCfbLeftAdjust = 30; + gCfbUpperAdjust = 10; + gScreenWidth = gCfbWidth; + gScreenHeight = gCfbHeight; + if ((gCfbWidth == SCREEN_WIDTH_HIRES) && (gCfbHeight == SCREEN_HEIGHT_HIRES)) { + gActiveViMode = &osViModeNtscHpf1; + } else { + s32 rightAdjust; + s32 lowerAdjust; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A94.s") + //! FAKE: + l1: + rightAdjust = gCfbWidth - 610; + lowerAdjust = gCfbHeight - 470; + ViMode_Configure(&sNotebookViMode, -1, osTvType, 0, 1, 0, 1, gCfbWidth, gCfbHeight, 30, rightAdjust, 10, + lowerAdjust); + gActiveViMode = &sNotebookViMode; + } + gSysCfbHiResEnabled = true; +} + +void SysCfb_Init(void) { + sCfbLoRes1 = gFramebuffer1; + sCfbLoRes0 = gFramebuffer0; + sCfbHiRes1 = gFramebufferHiRes1; + sCfbHiRes0 = gFramebufferHiRes0; + SysCfb_SetLoResMode(); +} + +// Unused +void SysCfb_Reset(void) { + gFramebuffers[0] = NULL; + gFramebuffers[1] = NULL; +} + +void* SysCfb_GetFramebuffer(s32 index) { + if (index < 2) { + return gFramebuffers[index]; + } + return NULL; +} + +void* SysCfb_GetZBuffer(void) { + return gZBufferPtr; +} + +void* SysCfb_GetWorkBuffer(void) { + return gWorkBuffer; +} + +u16 SysCfb_GetZBufferPixel(s32 x, s32 y) { + u16* zBuff = SysCfb_GetZBuffer(); + u16 val; + + if (zBuff != NULL) { + val = (&zBuff[x])[y * gCfbWidth]; + } else { + val = 0; + } + return val; +} + +s32 SysCfb_GetZBufferInt(s32 x, s32 y) { + return Environment_ZBufValToFixedPoint(SysCfb_GetZBufferPixel(x, y) << 2) >> 3; +} diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 3d98c8f46..c46b6ec3b 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2705,7 +2705,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors spA4 = play->unk_18E68; if (dbgVar2) { - PreRender_SetValues(&play->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, zbuffer); + PreRender_SetValues(&play->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, zbuffer); gfxTemp = gfx; func_80170200(&play->pauseBgPreRender, &gfxTemp, zbuffer, spA4); diff --git a/src/code/z_demo.c b/src/code/z_demo.c index da965969f..733ec4bc1 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index bc07df883..addfe6b67 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -82,8 +82,8 @@ void TransitionCircle_SetType(void* thisx, s32 type) { void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, f32 arg6) { Gfx* gfx = *gfxp; - s32 xh = D_801FBBCC; - s32 yh = D_801FBBCE; + s32 xh = gCfbWidth; + s32 yh = gCfbHeight; s32 width = 1 << masks; s32 height = 1 << maskt; f32 s; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index d6d38f9d6..2191498a3 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -2,7 +2,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F50D4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s") diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 860d04ae9..534ec6dfc 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -360,12 +360,9 @@ Lights* Lights_New(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 ambient lights = GRAPH_ALLOC(gfxCtx, sizeof(Lights)); - lights->l.a.l.col[0] = ambientR; - lights->l.a.l.colc[0] = ambientR; - lights->l.a.l.col[1] = ambientG; - lights->l.a.l.colc[1] = ambientG; - lights->l.a.l.col[2] = ambientB; - lights->l.a.l.colc[2] = ambientB; + lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; + lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; + lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; lights->enablePosLights = 0; lights->numLights = 0; @@ -394,7 +391,7 @@ void Lights_GlowCheck(PlayState* play) { s32 screenPosX = PROJECTED_TO_SCREEN_X(projectedPos, invW); s32 screenPosY = PROJECTED_TO_SCREEN_Y(projectedPos, invW); s32 wZ = (s32)((projectedPos.z * invW) * 16352.0f) + 16352; - s32 zBuf = func_80178A94(screenPosX, screenPosY); + s32 zBuf = SysCfb_GetZBufferInt(screenPosX, screenPosY); if (wZ < zBuf) { params->drawGlow = 1; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 1c03f5cb1..d0558d7f8 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2421,7 +2421,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { // Related to pictograph if (sPictoState == PICTO_BOX_STATE_LENS) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)((void)0, gSaveContext.pictoPhotoI5), PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -2460,7 +2460,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { Interface_SetHudVisibility(HUD_VISIBILITY_ALL); sPictoState = PICTO_BOX_STATE_OFF; if (sPictoPhotoBeingTaken) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)((void)0, gSaveContext.pictoPhotoI5), PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); Snap_RecordPictographedActors(play); @@ -2493,7 +2493,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { sPictoState = PICTO_BOX_STATE_LENS; } else { Play_DecompressI5ToI8((u8*)((void)0, gSaveContext.pictoPhotoI5), - (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); play->haltAllActors = true; sPictoState = PICTO_BOX_STATE_SETUP_PHOTO; @@ -6631,7 +6631,7 @@ void Interface_Draw(PlayState* play) { // Draw pictograph photo if (sPictoState >= PICTO_BOX_STATE_SETUP_PHOTO) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)gSaveContext.pictoPhotoI5, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -6667,7 +6667,7 @@ void Interface_Draw(PlayState* play) { for (sp2CC = 0; sp2CC < (PICTO_PHOTO_HEIGHT / 8); sp2CC++, pictoRectTop += 8) { pictoRectLeft = PICTO_PHOTO_TOPLEFT_X; gDPLoadTextureBlock(OVERLAY_DISP++, - (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90) + + (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer) + (0x500 * sp2CC), G_IM_FMT_I, G_IM_SIZ_8b, PICTO_PHOTO_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); diff --git a/src/code/z_play.c b/src/code/z_play.c index e25b50b4b..dd06a461e 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -358,10 +358,10 @@ void Play_Destroy(GameState* thisx) { if (sBombersNotebookOpen) { MsgEvent_SendNullTask(); - func_80178750(); - gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + SysCfb_SetLoResMode(); + gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); gfxCtx->zbuffer = SysCfb_GetZBuffer(); - gfxCtx->viMode = D_801FBB88; + gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; @@ -1242,7 +1242,7 @@ void Play_DrawMain(PlayState* this) { goto PostWorldDraw; } - PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); + PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_PROCESS) { MsgEvent_SendNullTask(); @@ -1442,24 +1442,24 @@ void Play_Draw(PlayState* this) { GraphicsContext* gfxCtx2 = this->state.gfxCtx; if (sBombersNotebookOpen) { - if (D_801FBBD4 != 1) { + if (gSysCfbHiResEnabled != 1) { MsgEvent_SendNullTask(); - func_80178818(); - gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + SysCfb_SetHiResMode(); + gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2); gfxCtx2->zbuffer = SysCfb_GetZBuffer(); - gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viMode = gActiveViMode; gfxCtx2->viConfigFeatures = gViConfigFeatures; gfxCtx2->xScale = gViConfigXScale; gfxCtx2->yScale = gViConfigYScale; gfxCtx2->updateViMode = true; } } else { - if (D_801FBBD4 != 0) { + if (gSysCfbHiResEnabled != 0) { MsgEvent_SendNullTask(); - func_80178750(); - gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + SysCfb_SetLoResMode(); + gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2); gfxCtx2->zbuffer = SysCfb_GetZBuffer(); - gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viMode = gActiveViMode; gfxCtx2->viConfigFeatures = gViConfigFeatures; gfxCtx2->xScale = gViConfigXScale; gfxCtx2->yScale = gViConfigYScale; @@ -2252,10 +2252,10 @@ void Play_Init(GameState* thisx) { R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF; PreRender_Init(&this->pauseBgPreRender); - PreRender_SetValuesSave(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL, NULL); - PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL); + PreRender_SetValuesSave(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL, NULL); + PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL); - this->unk_18E64 = D_801FBB90; + this->unk_18E64 = gWorkBuffer; this->pictoPhotoI8 = gPictoPhotoI8; this->unk_18E68 = D_80784600; this->unk_18E58 = D_80784600; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 299639e98..4b5787129 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1459,7 +1459,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(&masterGfx[0], D_0E000000.syncSegments); gSPDisplayList(&masterGfx[1], sFillSetupDL); - gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); if (zbuffer != NULL) { gDPSetDepthImage(&masterGfx[3], zbuffer); } else { @@ -1471,7 +1471,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->setScissor; - gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, D_801FBBCC, D_801FBBCE); + gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, gCfbWidth, gCfbHeight); gSPEndDisplayList(&masterGfx[1]); // Clear Z-Buffer @@ -1481,13 +1481,13 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g if (zbuffer == NULL) { gSPEndDisplayList(&masterGfx[0]); } else { - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, zbuffer); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, zbuffer); gDPPipeSync(&masterGfx[1]); gDPSetCycleType(&masterGfx[2], G_CYC_FILL); gDPSetRenderMode(&masterGfx[3], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[4], (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0)); gSPDisplayList(&masterGfx[5], D_0E000000.clearFillRect); - gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gSPEndDisplayList(&masterGfx[7]); } @@ -1495,7 +1495,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFrameBuffer; - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gDPSetCycleType(&masterGfx[1], G_CYC_FILL); gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); @@ -1505,7 +1505,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFillRect; - gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC - 1, D_801FBBCE - 1); + gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth - 1, gCfbHeight - 1); gDPPipeSync(&masterGfx[1]); gSPEndDisplayList(&masterGfx[2]); @@ -1513,7 +1513,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->fillRect; - gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC, D_801FBBCE); + gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth, gCfbHeight); gDPPipeSync(&masterGfx[1]); gSPEndDisplayList(&masterGfx[2]); diff --git a/src/code/z_view.c b/src/code/z_view.c index 105e6643a..4adc00b8d 100644 --- a/src/code/z_view.c +++ b/src/code/z_view.c @@ -18,8 +18,8 @@ void View_ViewportToVp(Vp* dest, Viewport* src) { dest->vp.vtrans[2] = 0x01FF; dest->vp.vtrans[3] = 0; - if ((src->leftX == 0) && (src->rightX == SCREEN_WIDTH_HIGH_RES) && (src->topY == 0) && - (src->bottomY == SCREEN_HEIGHT_HIGH_RES)) {} + if ((src->leftX == 0) && (src->rightX == HIRES_BUFFER_WIDTH) && (src->topY == 0) && + (src->bottomY == HIRES_BUFFER_HEIGHT)) {} } void View_Init(View* view, GraphicsContext* gfxCtx) { diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index b7d2dea64..2ddd27775 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,17 +1,377 @@ #include "global.h" +#include "ultra64/viint.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140260.s") +typedef struct { + /* 0x00 */ u32 burst; + /* 0x04 */ u32 vSync; + /* 0x08 */ u32 hSync; + /* 0x0C */ u32 leap; + /* 0x10 */ u32 hStart; + /* 0x14 */ u32 vStart; + /* 0x18 */ u32 vBurst; +} ViModeStruct; // size = 0x1C -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014026C.s") +void ViMode_LogPrint(OSViMode* osViMode) { +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140730.s") +/** + * Configures the custom OSViMode for this ViMode + * + * @param viMode ViMode to configure the custom OSViMode for + * @param type Identifying type for the OSViMode + * @param tvType TV Type: NTSC, PAL, MPAL or FPAL + * @param loRes Boolean: true = low resolution, false = high resolution. + * Corresponds to "L" or "H" in libultra VI mode names + * @param antialiasOff Boolean: true = point-sampling, false = anti-aliasing. + * Corresponds to "P" or "A" in libultra VI mode names + * @param modeN Boolean: controls interlacing mode, different based on resolution. + * Corresponds to "N" or "F" in libultra VI mode names + * @param fb16Bit Bolean: true = 16-bit framebuffer, false = 32-bit framebuffer. + * Corresponds to "1" or "2" in libultra VI mode names + * @param width Screen width + * @param height Screen height + * @param leftAdjust Left edge adjustment + * @param rightAdjust Right edge adjustment + * @param upperAdjust Upper edge adjustment + * @param lowerAdjust Lower edge adjustment + */ +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust) { + s32 hiRes; + s32 antialiasOn; + s32 modeF; + s32 fb32Bit; + s32 hiResDeflicker; // deflickered interlacing + s32 hiResInterlaced; + s32 loResDeinterlaced; + s32 loResInterlaced; + s32 modeLAN1; // L=(lo res) A=(antialias) N=(deinterlace) 1=(16-bit) + s32 modeLPN2; // L=(lo res) P=(point-sampled) N=(deinterlace) 2=(32-bit) + s32 modeHPN2; // H=(hi res) P=(point-sampled) N=(normal interlacing) 2=(32-bit) + s32 yScaleLo; + s32 yScaleHiEvenField; + s32 yScaleHiOddField; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140810.s") + hiRes = !loRes; + antialiasOn = !antialiasOff; + modeF = !modeN; + fb32Bit = !fb16Bit; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140898.s") + hiResDeflicker = hiRes && modeF; + hiResInterlaced = hiRes && modeN; + loResDeinterlaced = loRes && modeN; + loResInterlaced = loRes && modeF; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140900.s") + modeLAN1 = loRes && antialiasOn && modeN && fb16Bit; + modeLPN2 = loRes && antialiasOff && modeN && fb32Bit; + modeHPN2 = hiRes && antialiasOff && modeN && fb32Bit; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014090C.s") + upperAdjust &= ~1; + lowerAdjust &= ~1; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140970.s") + yScaleLo = (hiResDeflicker ? 2 : 1) * (((SCREEN_HEIGHT << 11) / SCREEN_HEIGHT) / (loRes ? 1 : 2)); + + yScaleHiEvenField = modeF ? (loResInterlaced ? 0x1000000 : 0x2000000) : 0; + yScaleHiOddField = modeF ? (loResInterlaced ? 0x3000000 : 0x2000000) : 0; + + viMode->type = type; + viMode->comRegs.ctrl = OS_VI_UNK2000 | OS_VI_UNK1000 | OS_VI_GAMMA | OS_VI_GAMMA_DITHER | + (!loResDeinterlaced ? OS_VI_UNK40 : 0) | (antialiasOn ? OS_VI_DIVOT : 0) | + (fb32Bit ? OS_VI_UNK2 | OS_VI_UNK1 : OS_VI_UNK2); + + if (modeLAN1) { + // Anti-aliased, fetch extra lines as-needed + viMode->comRegs.ctrl |= 0x100; + } else if (modeLPN2 | modeHPN2) { + // Point-sampled, resampling disabled + viMode->comRegs.ctrl |= 0x300; + } else { + if (antialiasOff) { + // Point-sampled, resampling enabled + viMode->comRegs.ctrl |= 0x200; + } else { + // Anti-aliased, always fetch extra lines + viMode->comRegs.ctrl |= 0; + } + } + + viMode->comRegs.width = width * (hiResInterlaced ? 2 : 1); + + if (tvType < 3) { + static const ViModeStruct D_801DF0C0[] = { + { + // OS_TV_PAL + BURST(58, 35, 4, 64), + VSYNC(624), + HSYNC(3177, 21), + LEAP(3183, 3182), + HSTART(128, 768), + START(95, 569), + BURST(107, 2, 9, 0), + }, + { + // OS_TV_NTSC + BURST(57, 34, 5, 62), + VSYNC(524), + HSYNC(3093, 0), + LEAP(3093, 3093), + HSTART(108, 748), + START(37, 511), + BURST(4, 2, 14, 0), + }, + { + // OS_TV_MPAL + BURST(57, 30, 5, 70), + VSYNC(524), + HSYNC(3088, 0), + LEAP(3100, 3100), + HSTART(108, 748), + START(37, 511), + BURST(4, 2, 14, 0), + }, + }; + const ViModeStruct* ptr = &D_801DF0C0[tvType]; + + viMode->comRegs.burst = ptr->burst; + viMode->comRegs.vSync = ptr->vSync; + viMode->comRegs.hSync = ptr->hSync; + viMode->comRegs.leap = ptr->leap; + viMode->comRegs.hStart = ptr->hStart; + viMode->fldRegs[0].vStart = ptr->vStart; + viMode->fldRegs[1].vStart = ptr->vStart; + viMode->fldRegs[0].vBurst = ptr->vBurst; + viMode->fldRegs[1].vBurst = ptr->vBurst; + } else { + __assert("../z_vimode.c", 216); + } + + viMode->comRegs.hStart += (leftAdjust << 16) + (s16)rightAdjust; + viMode->fldRegs[0].vStart += (upperAdjust << 16) + (s16)lowerAdjust; + viMode->fldRegs[1].vStart += (upperAdjust << 16) + (s16)lowerAdjust; + + if (loResDeinterlaced) { + viMode->comRegs.vSync++; + if (tvType == OS_TV_MPAL) { + viMode->comRegs.hSync += HSYNC(1, 4); + viMode->comRegs.leap += LEAP((u16)-4, (u16)-2); + } + } else { + viMode->fldRegs[0].vStart += START((u16)-3, (u16)-2); + if (tvType == OS_TV_MPAL) { + viMode->fldRegs[0].vBurst += BURST((u8)-2, (u8)-1, 12, -1); + } else if (tvType == OS_TV_PAL) { + viMode->fldRegs[1].vBurst += BURST((u8)-2, (u8)-1, 2, 0); + } + } + + viMode->comRegs.xScale = (SCREEN_WIDTH << 10) / SCREEN_WIDTH; + viMode->comRegs.vCurrent = 0; + + viMode->fldRegs[0].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2)); + viMode->fldRegs[1].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2) * (loRes ? 1 : 2)); + + viMode->fldRegs[0].yScale = yScaleLo | yScaleHiEvenField; + viMode->fldRegs[1].yScale = yScaleLo | yScaleHiOddField; + + viMode->fldRegs[0].vIntr = 2; + viMode->fldRegs[1].vIntr = 2; +} + +void ViMode_Save(ViMode* viMode) { + R_VI_MODE_EDIT_STATE = viMode->editState; + R_VI_MODE_EDIT_WIDTH = viMode->viWidth; + R_VI_MODE_EDIT_HEIGHT = viMode->viHeight; + R_VI_MODE_EDIT_ULY_ADJ = viMode->upperAdjust; + R_VI_MODE_EDIT_LRY_ADJ = viMode->lowerAdjust; + R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust; + R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust; + + if (SREG(58) == 1) { + SREG(58) = 0; + switch (SREG(59)) { + case 1: + ViMode_LogPrint(&osViModePalLan1); + break; + + case 2: + ViMode_LogPrint(&osViModeFpalLan1); + break; + + default: + ViMode_LogPrint(&viMode->customViMode); + break; + } + } +} + +void ViMode_Load(ViMode* viMode) { + //! @bug This condition always fails as the lowest bit is masked out to 0 + if ((R_VI_MODE_EDIT_WIDTH & ~3) == 1) { + R_VI_MODE_EDIT_WIDTH += 4; + } + + viMode->editState = R_VI_MODE_EDIT_STATE; + viMode->viWidth = R_VI_MODE_EDIT_WIDTH & ~3; + viMode->viHeight = R_VI_MODE_EDIT_HEIGHT; + viMode->upperAdjust = R_VI_MODE_EDIT_ULY_ADJ; + viMode->lowerAdjust = R_VI_MODE_EDIT_LRY_ADJ; + viMode->leftAdjust = R_VI_MODE_EDIT_ULX_ADJ; + viMode->rightAdjust = R_VI_MODE_EDIT_LRX_ADJ; +} + +void ViMode_Init(ViMode* viMode) { + viMode->editState = VI_MODE_EDIT_STATE_INACTIVE; + viMode->viWidth = SCREEN_WIDTH; + viMode->viHeight = SCREEN_HEIGHT; + viMode->leftAdjust = 0; + viMode->rightAdjust = 0; + viMode->upperAdjust = 0; + viMode->lowerAdjust = 0; + viMode->viFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF; + viMode->tvType = osTvType; + viMode->fb16Bit = true; + viMode->modeN = true; + viMode->antialiasOff = false; + viMode->loRes = true; + + ViMode_Save(viMode); +} + +void ViMode_Destroy(ViMode* viMode) { +} + +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures) { + u32 ctrl = viMode->customViMode.comRegs.ctrl; + + if (viFeatures & OS_VI_GAMMA_ON) { + ctrl |= OS_VI_GAMMA; + } + if (viFeatures & OS_VI_GAMMA_OFF) { + ctrl &= ~OS_VI_GAMMA; + } + if (viFeatures & OS_VI_GAMMA_DITHER_ON) { + ctrl |= OS_VI_GAMMA_DITHER; + } + if (viFeatures & OS_VI_GAMMA_DITHER_OFF) { + ctrl &= ~OS_VI_GAMMA_DITHER; + } + if (viFeatures & OS_VI_DIVOT_ON) { + ctrl |= OS_VI_DIVOT; + } + if (viFeatures & OS_VI_DIVOT_OFF) { + ctrl &= ~OS_VI_DIVOT; + } + viMode->customViMode.comRegs.ctrl = ctrl; +} + +/** + * Updates the custom VI mode with controller input and any edits made with the REG editor + * (through R_VI_MODE_EDIT_* entries) + */ +void ViMode_Update(ViMode* viMode, Input* input) { + ViMode_Load(viMode); + + if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) || + (viMode->editState == VI_MODE_EDIT_STATE_3)) { + gScreenWidth = viMode->viWidth; + gScreenHeight = viMode->viHeight; + + // Controls to reset the ViMode to defaults + if (CHECK_BTN_ALL(input->cur.button, BTN_START | BTN_CUP | BTN_CRIGHT)) { + ViMode_Init(viMode); + } + + // Controls to adjust the screen dimensions (upper-left) + if (CHECK_BTN_ALL(input->cur.button, BTN_CUP)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { + viMode->upperAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { + viMode->upperAdjust++; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { + viMode->leftAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { + viMode->leftAdjust++; + } + } + + // Controls to adjust the screen dimensions (lower-right) + if (CHECK_BTN_ALL(input->cur.button, BTN_CRIGHT)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { + viMode->lowerAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { + viMode->lowerAdjust++; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { + viMode->rightAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { + viMode->rightAdjust++; + } + } + + // Controls to adjust key features + if (CHECK_BTN_ALL(input->cur.button, BTN_CDOWN)) { + if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) { + viMode->loRes = !viMode->loRes; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) { + viMode->antialiasOff = !viMode->antialiasOff; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) { + viMode->modeN = !viMode->modeN; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) { + viMode->fb16Bit = !viMode->fb16Bit; + } + } + + // Clamp adjustments + if (viMode->editState >= VI_MODE_EDIT_STATE_2) { + // Allow parts of the framebuffer to possibly be offscreen by a small margin + if (viMode->leftAdjust < -16) { + viMode->leftAdjust = -16; + } + if (viMode->upperAdjust < -50) { + viMode->upperAdjust = -50; + } + if (viMode->rightAdjust > 16) { + viMode->rightAdjust = 16; + } + if (viMode->lowerAdjust > 50) { + viMode->lowerAdjust = 50; + } + } else { + // Do not allow parts of the framebuffer to end up offscreen + if (viMode->leftAdjust < 0) { + viMode->leftAdjust = 0; + } + if (viMode->upperAdjust < 0) { + viMode->upperAdjust = 0; + } + if (viMode->rightAdjust > 0) { + viMode->rightAdjust = 0; + } + if (viMode->lowerAdjust > 0) { + viMode->lowerAdjust = 0; + } + } + + ViMode_Configure(&viMode->customViMode, OS_VI_UNK28, osTvType, viMode->loRes, viMode->antialiasOff, + viMode->modeN, viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust, + viMode->rightAdjust, viMode->upperAdjust, viMode->lowerAdjust); + ViMode_ConfigureFeatures(viMode, viMode->viFeatures); + + if (viMode->editState == VI_MODE_EDIT_STATE_3) { + // Log comparison between the NTSC LAN1 mode and the custom mode + ViMode_LogPrint(&osViModeNtscLan1); + ViMode_LogPrint(&viMode->customViMode); + viMode->editState = VI_MODE_EDIT_STATE_2; + } + } + + ViMode_Save(viMode); +} diff --git a/src/code/z_viscvg.c b/src/code/z_viscvg.c new file mode 100644 index 000000000..888fa19b3 --- /dev/null +++ b/src/code/z_viscvg.c @@ -0,0 +1,90 @@ +#include "global.h" + +Gfx D_801C5DD0[] = { + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_VISCVG | G_RM_VISCVG2), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5DE0[] = { + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5DF0[] = { + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5E00[] = { + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPDisplayList(D_0E000000.fillRect), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +void VisCvg_Init(struct_801F8010* this) { + this->type = 0; + this->setScissor = false; + this->color.r = 255; + this->color.g = 255; + this->color.b = 255; + this->color.a = 255; +} + +void VisCvg_Destroy(struct_801F8010* this) { +} + +void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp) { + Gfx* gfx = *gfxp; + + gDPPipeSync(gfx++); + gDPSetPrimDepth(gfx++, -1, -1); + + if (this->setScissor == true) { + gSPDisplayList(gfx++, D_0E000000.setScissor); + } + + switch (this->type) { + case 1: + gSPDisplayList(gfx++, D_801C5DF0); + break; + + case 2: + gDPSetColor(gfx++, G_SETPRIMCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5E00); + break; + + case 3: + gDPSetColor(gfx++, G_SETBLENDCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5DD0); + break; + + case 4: + gDPSetColor(gfx++, G_SETFOGCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5DE0); + break; + + default: + break; + } + + gDPPipeSync(gfx++); + *gfxp = gfx; +} diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c index 9970a1e1b..cf603f324 100644 --- a/src/code/z_viszbuf.c +++ b/src/code/z_viszbuf.c @@ -1,6 +1,6 @@ #include "global.h" -#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES)) +#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (gCfbWidth * G_IM_SIZ_16b_BYTES)) void VisZbuf_Init(VisZbuf* this) { this->useRgba = false; @@ -42,12 +42,12 @@ void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) { gDPSetColor(gfx++, G_SETPRIMCOLOR, this->primColor.rgba); gDPSetColor(gfx++, G_SETENVCOLOR, this->envColor.rgba); - for (y = 0; y < (D_801FBBCE - height) + 1; y += height) { - gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, D_801FBBCC, 0, 0, y, D_801FBBCC - 1, (y + height) - 1, 0, + for (y = 0; y < (gCfbHeight - height) + 1; y += height) { + gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, gCfbWidth, 0, 0, y, gCfbWidth - 1, (y + height) - 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(gfx++, 0, y << 2, D_801FBBCC << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, + gSPTextureRectangle(gfx++, 0, y << 2, gCfbWidth << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, 1 << 10); } diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c index c7c09f659..ccccf68ae 100644 --- a/src/libultra/io/osViModeMpalLan1.c +++ b/src/libultra/io/osViModeMpalLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeMpalLan1 = { OS_VI_MPAL_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x4651E39, // burst - 0x20D, // vSync - 0x40C11, // hSync - 0xC190C1A, // leap - 0x6C02EC, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(57, 30, 5, 70), // burst + VSYNC(525), // vSync + HSYNC(3089, 4), // hSync + LEAP(3097, 3098), // leap + HSTART(108, 748), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c index ac0a1fa2b..5f88f4e94 100644 --- a/src/libultra/io/osViModeNtscHpf1.c +++ b/src/libultra/io/osViModeNtscHpf1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeNtscHpf1 = { OS_VI_NTSC_HPF1, // type { // comRegs - 0x324E, // ctrl - 640, // width - 0x3E52239, // burst - 0x20C, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x400, // xScale - 0, // vCurrent + 0x324E, // ctrl + WIDTH(640), // width + BURST(57, 34, 5, 62), // 0x3E52239, // burst + VSYNC(524), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // 0x6C02EC, // hStart + SCALE(1, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x500, // origin - 0x2000800, // yScale - 0x2301FD, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(1280), // origin + SCALE(0.5, 0.5), // 0x2000800, // yScale + START(35, 509), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0xA00, // origin - 0x2000800, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2 // vIntr + ORIGIN(2560), // origin + SCALE(0.5, 0.5), // 0x2000800, // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2) // vIntr } }, }; diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c index 632d763f4..86eb473b7 100644 --- a/src/libultra/io/osViModeNtscLan1.c +++ b/src/libultra/io/osViModeNtscLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeNtscLan1 = { OS_VI_NTSC_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x3E52239, // burst - 0x20D, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(57, 34, 5, 62), // burst + VSYNC(525), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c index 174cbf142..f875bb731 100644 --- a/src/libultra/io/osViModePalLan1.c +++ b/src/libultra/io/osViModePalLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModePalLan1 = { OS_VI_PAL_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x4541E3A, // burst - 0x271, // vSync - 0x170C69, // hSync - 0xC6F0C6D, // leap - 0x800300, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(58, 30, 4, 69), // burst + VSYNC(625), // vSync + HSYNC(3177, 23), // hSync + LEAP(3183, 3181), // leap + HSTART(128, 768), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x5F0239, // vStart - 0x9026B, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(95, 569), // vStart + BURST(107, 2, 9, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x5F0239, // vStart - 0x9026B, // vBurst - 2 // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(95, 569), // vStart + BURST(107, 2, 9, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 444142715..7de134218 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -4,6 +4,7 @@ * Description: Kafei */ +#include "prevent_bss_reordering.h" #include "z_en_test3.h" #include "objects/object_test3/object_test3.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 9f5257b32..7f33b45c1 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4,6 +4,7 @@ * Description: Player */ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index 48c8bdf58..9e11df190 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -81,7 +81,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { Gfx* gfx = *gfxP; s32 width = gScreenWidth; s32 height = gScreenHeight; - void* sp50 = D_801FBB90; + void* workBuffer = gWorkBuffer; TransitionWipe5* this = THIS; s32 alpha = (1.0f - this->unk_0C) * 255.0f; @@ -92,7 +92,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); - func_8014116C(&gfx, D_0F000000, sp50, width, height, 1); + func_8014116C(&gfx, D_0F000000, workBuffer, width, height, 1); } else { if (alpha == 255) { gDPSetOtherMode(gfx++, @@ -108,7 +108,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { gDPSetEnvColor(gfx++, 255, 255, 255, alpha); gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT); - func_8014116C(&gfx, sp50, D_0F000000, width, height, 0); + func_8014116C(&gfx, workBuffer, D_0F000000, width, height, 0); } gDPPipeSync(gfx++); gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index a28ff6132..b1d42739b 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1707,7 +1707,7 @@ 0x800F4FC0:("Font_LoadMessageBoxEndIcon",), 0x800F5004:("Font_LoadOrderedFont",), 0x800F5090:("func_800F5090",), - 0x800F50D4:("func_800F50D4",), + 0x800F50D4:("Environment_ZBufValToFixedPoint",), 0x800F510C:("Environment_Init",), 0x800F5954:("func_800F5954",), 0x800F5A8C:("Environment_LerpWeight",), @@ -2748,17 +2748,17 @@ 0x8013FD74:("View_ApplyPerspectiveToOverlay",), 0x80140024:("View_UpdateViewingMatrix",), 0x801400CC:("View_ApplyTo",), - 0x80140260:("func_80140260",), - 0x8014026C:("func_8014026C",), - 0x80140730:("func_80140730",), - 0x80140810:("func_80140810",), - 0x80140898:("func_80140898",), - 0x80140900:("func_80140900",), - 0x8014090C:("func_8014090C",), - 0x80140970:("func_80140970",), - 0x80140CE0:("func_80140CE0",), - 0x80140D04:("func_80140D04",), - 0x80140D10:("func_80140D10",), + 0x80140260:("ViMode_LogPrint",), + 0x8014026C:("ViMode_Configure",), + 0x80140730:("ViMode_Save",), + 0x80140810:("ViMode_Load",), + 0x80140898:("ViMode_Init",), + 0x80140900:("ViMode_Destroy",), + 0x8014090C:("ViMode_ConfigureFeatures",), + 0x80140970:("ViMode_Update",), + 0x80140CE0:("VisCvg_Init",), + 0x80140D04:("VisCvg_Destroy",), + 0x80140D10:("VisCvg_Draw",), 0x80140E80:("func_80140E80",), 0x80140EA0:("func_80140EA0",), 0x80140EAC:("func_80140EAC",), @@ -3225,15 +3225,15 @@ 0x801780F0:("Mtx_SetTranslateScaleMtx",), 0x801781EC:("Mtx_SetRotationMtx",), 0x8017842C:("Mtx_SetTranslationRotationScaleMtx",), - 0x80178750:("func_80178750",), - 0x80178818:("func_80178818",), - 0x80178978:("func_80178978",), - 0x801789D4:("func_801789D4",), - 0x801789EC:("SysCfb_GetFbPtr",), + 0x80178750:("SysCfb_SetLoResMode",), + 0x80178818:("SysCfb_SetHiResMode",), + 0x80178978:("SysCfb_Init",), + 0x801789D4:("SysCfb_Reset",), + 0x801789EC:("SysCfb_GetFramebuffer",), 0x80178A14:("SysCfb_GetZBuffer",), - 0x80178A24:("func_80178A24",), - 0x80178A34:("func_80178A34",), - 0x80178A94:("func_80178A94",), + 0x80178A24:("SysCfb_GetWorkBuffer",), + 0x80178A34:("SysCfb_GetZBufferPixel",), + 0x80178A94:("SysCfb_GetZBufferInt",), 0x80178AC0:("func_80178AC0",), 0x80178C80:("CmpDma_GetFileInfo",), 0x80178D7C:("CmpDma_Decompress",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f58d54a87..53b35efa0 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4051,7 +4051,7 @@ 0x801F8010:("D_801F8010","struct_801F8010","",0x10), 0x801F8020:("sVisZbuf","VisZbuf","",0x10), 0x801F8030:("sMonoColors","VisMono","",0x18), - 0x801F8048:("D_801F8048","UNK_TYPE1","",0x1), + 0x801F8048:("D_801F8048","ViMode","",0x88), 0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc), 0x801F80E0:("sGraphFaultClient","FaultClient","",0x10), 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), @@ -4094,30 +4094,30 @@ 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1), 0x801FBB20:("gRDPTotalTime","UNK_TYPE1","",0x1), 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1), - 0x801FBB30:("D_801FBB30","OSViMode","",0x50), + 0x801FBB30:("sNotebookViMode","OSViMode","",0x50), 0x801FBB80:("gFramebuffers","u32*","[2]",0x8), - 0x801FBB88:("D_801FBB88","OSViMode*","",0x4), + 0x801FBB88:("gActiveViMode","OSViMode*","",0x4), 0x801FBB8C:("gZBufferPtr","u16*","",0x4), - 0x801FBB90:("D_801FBB90","UNK_TYPE4","",0x4), + 0x801FBB90:("gWorkBuffer","UNK_TYPE4","",0x4), 0x801FBB94:("gGfxSPTaskOutputBufferPtr","UNK_TYPE1","",0x1), - 0x801FBB98:("gGfxSPTaskOutputBufferSize","UNK_TYPE1","",0x1), - 0x801FBB9C:("D_801FBB9C","UNK_TYPE1","",0x1), - 0x801FBBA0:("D_801FBBA0","UNK_TYPE1","",0x1), - 0x801FBBA4:("gZBuffer","u16*","",0x4), - 0x801FBBA8:("gWorkBuffer","u16**","",0x4), - 0x801FBBAC:("gGfxSPTaskOutputBuffer","u16**","",0x4), - 0x801FBBB0:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1), - 0x801FBBB4:("D_801FBBB4","UNK_TYPE1","",0x1), - 0x801FBBB8:("D_801FBBB8","UNK_TYPE1","",0x1), - 0x801FBBBC:("D_801FBBBC","UNK_TYPE1","",0x1), - 0x801FBBC0:("D_801FBBC0","UNK_TYPE1","",0x1), - 0x801FBBC4:("gGfxSPTaskOutputBuffer2","UNK_TYPE1","",0x1), - 0x801FBBC8:("gGfxSPTaskOutputBufferEnd2","UNK_TYPE1","",0x1), - 0x801FBBCC:("D_801FBBCC","UNK_TYPE2","",0x2), - 0x801FBBCE:("D_801FBBCE","UNK_TYPE2","",0x2), - 0x801FBBD0:("D_801FBBD0","UNK_TYPE1","",0x1), - 0x801FBBD2:("D_801FBBD2","UNK_TYPE1","",0x1), - 0x801FBBD4:("D_801FBBD4","UNK_TYPE1","",0x1), + 0x801FBB98:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1), + 0x801FBB9C:("sCfbLoRes1","UNK_TYPE1","",0x1), + 0x801FBBA0:("sCfbLoRes0","UNK_TYPE1","",0x1), + 0x801FBBA4:("gZBufferLoRes","u16*","",0x4), + 0x801FBBA8:("gWorkBufferLoRes","u16**","",0x4), + 0x801FBBAC:("gGfxSPTaskOutputBufferLoRes","u16**","",0x4), + 0x801FBBB0:("gGfxSPTaskOutputBufferEndLoRes","UNK_TYPE1","",0x1), + 0x801FBBB4:("sCfbHiRes1","UNK_TYPE1","",0x1), + 0x801FBBB8:("sCfbHiRes0","UNK_TYPE1","",0x1), + 0x801FBBBC:("gZBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC0:("gWorkBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC4:("gGfxSPTaskOutputBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC8:("gGfxSPTaskOutputBufferEndHiRes","UNK_TYPE1","",0x1), + 0x801FBBCC:("gCfbWidth","UNK_TYPE2","",0x2), + 0x801FBBCE:("gCfbHeight","UNK_TYPE2","",0x2), + 0x801FBBD0:("gCfbLeftAdjust","UNK_TYPE1","",0x1), + 0x801FBBD2:("gCfbUpperAdjust","UNK_TYPE1","",0x1), + 0x801FBBD4:("gSysCfbHiResEnabled","UNK_TYPE1","",0x1), 0x801FBBE0:("sDmaBuffer","u32","[2]",0x8), 0x801FBBF0:("D_801FBBF0","Vec3f","",0xc), 0x801FBC00:("Math3D_ColSphereTri_line","LineSegment","",0x18), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 03469f7bf..34318dc27 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1221,7 +1221,7 @@ asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54, asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBoxEndIcon,0x800F4FC0,0x11 asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23 asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11 -asm/non_matchings/code/z_kankyo/func_800F50D4.s,func_800F50D4,0x800F50D4,0xE +asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s,Environment_ZBufValToFixedPoint,0x800F50D4,0xE asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212 asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21 @@ -2270,9 +2270,9 @@ asm/non_matchings/code/z_vimode/func_80140898.s,func_80140898,0x80140898,0x1A asm/non_matchings/code/z_vimode/func_80140900.s,func_80140900,0x80140900,0x3 asm/non_matchings/code/z_vimode/func_8014090C.s,func_8014090C,0x8014090C,0x19 asm/non_matchings/code/z_vimode/func_80140970.s,func_80140970,0x80140970,0xDC -asm/non_matchings/code/z_vimode/func_80140CE0.s,func_80140CE0,0x80140CE0,0x9 -asm/non_matchings/code/z_vimode/func_80140D04.s,func_80140D04,0x80140D04,0x3 -asm/non_matchings/code/z_vimode/func_80140D10.s,func_80140D10,0x80140D10,0x5C +asm/non_matchings/code/z_vimode/VisCvg_Init.s,VisCvg_Init,0x80140CE0,0x9 +asm/non_matchings/code/z_vimode/VisCvg_Destroy.s,VisCvg_Destroy,0x80140D04,0x3 +asm/non_matchings/code/z_vimode/VisCvg_Draw.s,VisCvg_Draw,0x80140D10,0x5C asm/non_matchings/code/code_80140E80/func_80140E80.s,func_80140E80,0x80140E80,0x8 asm/non_matchings/code/code_80140E80/func_80140EA0.s,func_80140EA0,0x80140EA0,0x3 asm/non_matchings/code/code_80140E80/func_80140EAC.s,func_80140EAC,0x80140EAC,0x57 @@ -2739,15 +2739,15 @@ asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_Draw asm/non_matchings/code/speed_meter/func_801780F0.s,func_801780F0,0x801780F0,0x3F asm/non_matchings/code/speed_meter/func_801781EC.s,func_801781EC,0x801781EC,0x90 asm/non_matchings/code/speed_meter/func_8017842C.s,func_8017842C,0x8017842C,0xC9 -asm/non_matchings/code/sys_cmpdma/func_80178750.s,func_80178750,0x80178750,0x32 -asm/non_matchings/code/sys_cmpdma/func_80178818.s,func_80178818,0x80178818,0x58 -asm/non_matchings/code/sys_cmpdma/func_80178978.s,func_80178978,0x80178978,0x17 -asm/non_matchings/code/sys_cmpdma/func_801789D4.s,func_801789D4,0x801789D4,0x6 -asm/non_matchings/code/sys_cmpdma/SysCfb_GetFbPtr.s,SysCfb_GetFbPtr,0x801789EC,0xA +asm/non_matchings/code/sys_cmpdma/SysCfb_SetLoResMode.s,SysCfb_SetLoResMode,0x80178750,0x32 +asm/non_matchings/code/sys_cmpdma/SysCfb_SetHiResMode.s,SysCfb_SetHiResMode,0x80178818,0x58 +asm/non_matchings/code/sys_cmpdma/SysCfb_Init.s,SysCfb_Init,0x80178978,0x17 +asm/non_matchings/code/sys_cmpdma/SysCfb_Reset.s,SysCfb_Reset,0x801789D4,0x6 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetFramebuffer.s,SysCfb_GetFramebuffer,0x801789EC,0xA asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBuffer.s,SysCfb_GetZBuffer,0x80178A14,0x4 -asm/non_matchings/code/sys_cmpdma/func_80178A24.s,func_80178A24,0x80178A24,0x4 -asm/non_matchings/code/sys_cmpdma/func_80178A34.s,func_80178A34,0x80178A34,0x18 -asm/non_matchings/code/sys_cmpdma/func_80178A94.s,func_80178A94,0x80178A94,0xB +asm/non_matchings/code/sys_cmpdma/SysCfb_GetWorkBuffer.s,SysCfb_GetWorkBuffer,0x80178A24,0x4 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferPixel.s,SysCfb_GetZBufferPixel,0x80178A34,0x18 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferInt.s,SysCfb_GetZBufferInt,0x80178A94,0xB asm/non_matchings/code/sys_cmpdma/func_80178AC0.s,func_80178AC0,0x80178AC0,0x70 asm/non_matchings/code/sys_cmpdma/CmpDma_GetFileInfo.s,CmpDma_GetFileInfo,0x80178C80,0x3F asm/non_matchings/code/sys_cmpdma/CmpDma_Decompress.s,CmpDma_Decompress,0x80178D7C,0xC diff --git a/undefined_syms.txt b/undefined_syms.txt index aad4bba7b..336a6c4b4 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -122,9 +122,11 @@ D_A4800010 = 0xA4800010; // SI_PIF_ADDR_WR64B_REG D_A4800014 = 0xA4800014; // reserved D_A4800018 = 0xA4800018; // SI_STATUS_REG -// buffers +// sys_cfb buffers gFramebuffer1 = 0x80000500; +gFramebufferHiRes0 = 0x80780000; +gFramebufferHiRes1 = 0x80000500; D_80025D00 = 0x80025D00; // Ucode symbols From 4143097c5a6080a1ebbb3d328b85178ab13ab8e6 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Mon, 29 May 2023 19:57:14 -0400 Subject: [PATCH 12/36] Scene table (#1207) * scene_table.h * Move restriction flgs to scene_table.h * format * rename D_801C5FC0 to sPersistentCycleFlags * format * move persistent flags to table * cleanups * review * PERSISTENT_CYCLE_FLAGS_SET * PERSISTENT_CYCLE_FLAGS_NONE * move comment above the scene * bss * tons of bss * whoops * bss * bss * bss * Update include/tables/scene_table.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_scene_table.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * SCENE_MAX * bss * bss * bss --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/segment_symbols.h | 102 -------- include/tables/scene_table.h | 229 ++++++++++++++++++ include/variables.h | 4 +- include/z64scene.h | 122 +--------- src/boot_O2_g3/CIC6105.c | 1 - src/boot_O2_g3/yaz0.c | 1 + src/code/sys_cfb.c | 1 + src/code/z_camera.c | 1 + src/code/z_effect_soft_sprite.c | 1 + src/code/z_parameter.c | 122 +--------- src/code/z_player_call.c | 1 - src/code/z_scene_proc.c | 1 - src/code/z_scene_table.c | 136 ++--------- src/code/z_skin.c | 1 - src/code/z_sram_NES.c | 161 +++--------- src/libultra/flash/osFlash.c | 1 - .../z_bg_hakugin_switch.c | 1 + src/overlays/actors/ovl_Boss_06/z_boss_06.c | 1 - .../actors/ovl_En_Fishing/z_en_fishing.c | 2 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 1 - src/overlays/actors/ovl_En_Test7/z_en_test7.c | 1 + tools/disasm/variables.txt | 2 +- 22 files changed, 308 insertions(+), 585 deletions(-) create mode 100644 include/tables/scene_table.h diff --git a/include/segment_symbols.h b/include/segment_symbols.h index 9fc49a6cb..a8e88e794 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -124,56 +124,44 @@ DECLARE_ROM_SEGMENT(d2_fine_pal_static) DECLARE_ROM_SEGMENT(elf_message_field) DECLARE_ROM_SEGMENT(elf_message_ydan) -DECLARE_ROM_SEGMENT(Z2_20SICHITAI2) DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_00) DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_01) DECLARE_ROM_SEGMENT(Z2_20SICHITAI2_room_02) -DECLARE_ROM_SEGMENT(Z2_WITCH_SHOP) DECLARE_ROM_SEGMENT(Z2_WITCH_SHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_LAST_BS) DECLARE_ROM_SEGMENT(Z2_LAST_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_HAKASHITA) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_00) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_01) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_02) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_03) DECLARE_ROM_SEGMENT(Z2_HAKASHITA_room_04) -DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP) DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP_room_00) DECLARE_ROM_SEGMENT(Z2_AYASHIISHOP_room_01) -DECLARE_ROM_SEGMENT(Z2_OMOYA) DECLARE_ROM_SEGMENT(Z2_OMOYA_room_00) DECLARE_ROM_SEGMENT(Z2_OMOYA_room_01) DECLARE_ROM_SEGMENT(Z2_OMOYA_room_02) -DECLARE_ROM_SEGMENT(Z2_BOWLING) DECLARE_ROM_SEGMENT(Z2_BOWLING_room_00) -DECLARE_ROM_SEGMENT(Z2_SONCHONOIE) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_00) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_01) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_02) DECLARE_ROM_SEGMENT(Z2_SONCHONOIE_room_03) -DECLARE_ROM_SEGMENT(Z2_IKANA) DECLARE_ROM_SEGMENT(Z2_IKANA_room_00) DECLARE_ROM_SEGMENT(Z2_IKANA_room_01) DECLARE_ROM_SEGMENT(Z2_IKANA_room_02) DECLARE_ROM_SEGMENT(Z2_IKANA_room_03) DECLARE_ROM_SEGMENT(Z2_IKANA_room_04) -DECLARE_ROM_SEGMENT(Z2_KAIZOKU) DECLARE_ROM_SEGMENT(Z2_KAIZOKU_room_00) -DECLARE_ROM_SEGMENT(Z2_MILK_BAR) DECLARE_ROM_SEGMENT(Z2_MILK_BAR_room_00) -DECLARE_ROM_SEGMENT(Z2_INISIE_N) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_00) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_01) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_02) @@ -187,10 +175,8 @@ DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_09) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_10) DECLARE_ROM_SEGMENT(Z2_INISIE_N_room_11) -DECLARE_ROM_SEGMENT(Z2_TAKARAYA) DECLARE_ROM_SEGMENT(Z2_TAKARAYA_room_00) -DECLARE_ROM_SEGMENT(Z2_INISIE_R) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_00) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_01) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_02) @@ -204,14 +190,11 @@ DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_09) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_10) DECLARE_ROM_SEGMENT(Z2_INISIE_R_room_11) -DECLARE_ROM_SEGMENT(Z2_OKUJOU) DECLARE_ROM_SEGMENT(Z2_OKUJOU_room_00) -DECLARE_ROM_SEGMENT(Z2_OPENINGDAN) DECLARE_ROM_SEGMENT(Z2_OPENINGDAN_room_00) DECLARE_ROM_SEGMENT(Z2_OPENINGDAN_room_01) -DECLARE_ROM_SEGMENT(Z2_MITURIN) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_00) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_01) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_02) @@ -226,10 +209,8 @@ DECLARE_ROM_SEGMENT(Z2_MITURIN_room_10) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_11) DECLARE_ROM_SEGMENT(Z2_MITURIN_room_12) -DECLARE_ROM_SEGMENT(Z2_13HUBUKINOMITI) DECLARE_ROM_SEGMENT(Z2_13HUBUKINOMITI_room_00) -DECLARE_ROM_SEGMENT(Z2_CASTLE) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_00) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_01) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_02) @@ -241,16 +222,12 @@ DECLARE_ROM_SEGMENT(Z2_CASTLE_room_07) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_08) DECLARE_ROM_SEGMENT(Z2_CASTLE_room_09) -DECLARE_ROM_SEGMENT(Z2_DEKUTES) DECLARE_ROM_SEGMENT(Z2_DEKUTES_room_00) -DECLARE_ROM_SEGMENT(Z2_MITURIN_BS) DECLARE_ROM_SEGMENT(Z2_MITURIN_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_SYATEKI_MIZU) DECLARE_ROM_SEGMENT(Z2_SYATEKI_MIZU_room_00) -DECLARE_ROM_SEGMENT(Z2_HAKUGIN) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_00) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_01) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_02) @@ -266,10 +243,8 @@ DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_11) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_12) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_room_13) -DECLARE_ROM_SEGMENT(Z2_ROMANYMAE) DECLARE_ROM_SEGMENT(Z2_ROMANYMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_PIRATE) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_00) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_01) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_02) @@ -286,20 +261,16 @@ DECLARE_ROM_SEGMENT(Z2_PIRATE_room_12) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_13) DECLARE_ROM_SEGMENT(Z2_PIRATE_room_14) -DECLARE_ROM_SEGMENT(Z2_SYATEKI_MORI) DECLARE_ROM_SEGMENT(Z2_SYATEKI_MORI_room_00) -DECLARE_ROM_SEGMENT(Z2_SINKAI) DECLARE_ROM_SEGMENT(Z2_SINKAI_room_00) -DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_00) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_01) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_02) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_03) DECLARE_ROM_SEGMENT(Z2_YOUSEI_IZUMI_room_04) -DECLARE_ROM_SEGMENT(Z2_KINSTA1) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_00) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_01) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_02) @@ -307,7 +278,6 @@ DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_03) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_04) DECLARE_ROM_SEGMENT(Z2_KINSTA1_room_05) -DECLARE_ROM_SEGMENT(Z2_KINDAN2) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_00) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_01) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_02) @@ -315,108 +285,77 @@ DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_03) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_04) DECLARE_ROM_SEGMENT(Z2_KINDAN2_room_05) -DECLARE_ROM_SEGMENT(Z2_TENMON_DAI) DECLARE_ROM_SEGMENT(Z2_TENMON_DAI_room_00) DECLARE_ROM_SEGMENT(Z2_TENMON_DAI_room_01) -DECLARE_ROM_SEGMENT(Z2_LAST_DEKU) DECLARE_ROM_SEGMENT(Z2_LAST_DEKU_room_00) DECLARE_ROM_SEGMENT(Z2_LAST_DEKU_room_01) -DECLARE_ROM_SEGMENT(Z2_22DEKUCITY) DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_00) DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_01) DECLARE_ROM_SEGMENT(Z2_22DEKUCITY_room_02) -DECLARE_ROM_SEGMENT(Z2_KAJIYA) DECLARE_ROM_SEGMENT(Z2_KAJIYA_room_00) -DECLARE_ROM_SEGMENT(Z2_00KEIKOKU) DECLARE_ROM_SEGMENT(Z2_00KEIKOKU_room_00) -DECLARE_ROM_SEGMENT(Z2_POSTHOUSE) DECLARE_ROM_SEGMENT(Z2_POSTHOUSE_room_00) -DECLARE_ROM_SEGMENT(Z2_LABO) DECLARE_ROM_SEGMENT(Z2_LABO_room_00) -DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST) DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST_room_00) DECLARE_ROM_SEGMENT(Z2_DANPEI2TEST_room_01) -DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE) DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE_room_00) DECLARE_ROM_SEGMENT(Z2_16GORON_HOUSE_room_01) -DECLARE_ROM_SEGMENT(Z2_33ZORACITY) DECLARE_ROM_SEGMENT(Z2_33ZORACITY_room_00) -DECLARE_ROM_SEGMENT(Z2_8ITEMSHOP) DECLARE_ROM_SEGMENT(Z2_8ITEMSHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_F01) DECLARE_ROM_SEGMENT(Z2_F01_room_00) -DECLARE_ROM_SEGMENT(Z2_INISIE_BS) DECLARE_ROM_SEGMENT(Z2_INISIE_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_30GYOSON) DECLARE_ROM_SEGMENT(Z2_30GYOSON_room_00) -DECLARE_ROM_SEGMENT(Z2_31MISAKI) DECLARE_ROM_SEGMENT(Z2_31MISAKI_room_00) -DECLARE_ROM_SEGMENT(Z2_TAKARAKUJI) DECLARE_ROM_SEGMENT(Z2_TAKARAKUJI_room_00) -DECLARE_ROM_SEGMENT(Z2_TORIDE) DECLARE_ROM_SEGMENT(Z2_TORIDE_room_00) -DECLARE_ROM_SEGMENT(Z2_FISHERMAN) DECLARE_ROM_SEGMENT(Z2_FISHERMAN_room_00) -DECLARE_ROM_SEGMENT(Z2_GORONSHOP) DECLARE_ROM_SEGMENT(Z2_GORONSHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_DEKU_KING) DECLARE_ROM_SEGMENT(Z2_DEKU_KING_room_00) -DECLARE_ROM_SEGMENT(Z2_LAST_GORON) DECLARE_ROM_SEGMENT(Z2_LAST_GORON_room_00) DECLARE_ROM_SEGMENT(Z2_LAST_GORON_room_01) -DECLARE_ROM_SEGMENT(Z2_24KEMONOMITI) DECLARE_ROM_SEGMENT(Z2_24KEMONOMITI_room_00) -DECLARE_ROM_SEGMENT(Z2_F01_B) DECLARE_ROM_SEGMENT(Z2_F01_B_room_00) -DECLARE_ROM_SEGMENT(Z2_F01C) DECLARE_ROM_SEGMENT(Z2_F01C_room_00) -DECLARE_ROM_SEGMENT(Z2_BOTI) DECLARE_ROM_SEGMENT(Z2_BOTI_room_00) DECLARE_ROM_SEGMENT(Z2_BOTI_room_01) -DECLARE_ROM_SEGMENT(Z2_HAKUGIN_BS) DECLARE_ROM_SEGMENT(Z2_HAKUGIN_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_20SICHITAI) DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_00) DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_01) DECLARE_ROM_SEGMENT(Z2_20SICHITAI_room_02) -DECLARE_ROM_SEGMENT(Z2_21MITURINMAE) DECLARE_ROM_SEGMENT(Z2_21MITURINMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_LAST_ZORA) DECLARE_ROM_SEGMENT(Z2_LAST_ZORA_room_00) -DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2_room_00) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO2_room_01) -DECLARE_ROM_SEGMENT(Z2_SEA) DECLARE_ROM_SEGMENT(Z2_SEA_room_00) DECLARE_ROM_SEGMENT(Z2_SEA_room_01) DECLARE_ROM_SEGMENT(Z2_SEA_room_02) @@ -434,10 +373,8 @@ DECLARE_ROM_SEGMENT(Z2_SEA_room_13) DECLARE_ROM_SEGMENT(Z2_SEA_room_14) DECLARE_ROM_SEGMENT(Z2_SEA_room_15) -DECLARE_ROM_SEGMENT(Z2_35TAKI) DECLARE_ROM_SEGMENT(Z2_35TAKI_room_00) -DECLARE_ROM_SEGMENT(Z2_REDEAD) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_00) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_01) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_02) @@ -453,31 +390,24 @@ DECLARE_ROM_SEGMENT(Z2_REDEAD_room_11) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_12) DECLARE_ROM_SEGMENT(Z2_REDEAD_room_13) -DECLARE_ROM_SEGMENT(Z2_BANDROOM) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_00) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_01) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_02) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_03) DECLARE_ROM_SEGMENT(Z2_BANDROOM_room_04) -DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO_room_00) DECLARE_ROM_SEGMENT(Z2_11GORONNOSATO_room_01) -DECLARE_ROM_SEGMENT(Z2_GORON_HAKA) DECLARE_ROM_SEGMENT(Z2_GORON_HAKA_room_00) -DECLARE_ROM_SEGMENT(Z2_SECOM) DECLARE_ROM_SEGMENT(Z2_SECOM_room_00) DECLARE_ROM_SEGMENT(Z2_SECOM_room_01) -DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA) DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA_room_00) -DECLARE_ROM_SEGMENT(Z2_TOUGITES) DECLARE_ROM_SEGMENT(Z2_TOUGITES_room_00) -DECLARE_ROM_SEGMENT(Z2_DANPEI) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_00) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_01) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_02) @@ -488,48 +418,34 @@ DECLARE_ROM_SEGMENT(Z2_DANPEI_room_06) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_07) DECLARE_ROM_SEGMENT(Z2_DANPEI_room_08) -DECLARE_ROM_SEGMENT(Z2_IKANAMAE) DECLARE_ROM_SEGMENT(Z2_IKANAMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_DOUJOU) DECLARE_ROM_SEGMENT(Z2_DOUJOU_room_00) -DECLARE_ROM_SEGMENT(Z2_MUSICHOUSE) DECLARE_ROM_SEGMENT(Z2_MUSICHOUSE_room_00) -DECLARE_ROM_SEGMENT(Z2_IKNINSIDE) DECLARE_ROM_SEGMENT(Z2_IKNINSIDE_room_00) DECLARE_ROM_SEGMENT(Z2_IKNINSIDE_room_01) -DECLARE_ROM_SEGMENT(Z2_MAP_SHOP) DECLARE_ROM_SEGMENT(Z2_MAP_SHOP_room_00) -DECLARE_ROM_SEGMENT(Z2_F40) DECLARE_ROM_SEGMENT(Z2_F40_room_00) -DECLARE_ROM_SEGMENT(Z2_F41) DECLARE_ROM_SEGMENT(Z2_F41_room_00) -DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2) DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2_room_00) DECLARE_ROM_SEGMENT(Z2_10YUKIYAMANOMURA2_room_01) -DECLARE_ROM_SEGMENT(Z2_14YUKIDAMANOMITI) DECLARE_ROM_SEGMENT(Z2_14YUKIDAMANOMITI_room_00) -DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE) DECLARE_ROM_SEGMENT(Z2_12HAKUGINMAE_room_00) -DECLARE_ROM_SEGMENT(Z2_17SETUGEN) DECLARE_ROM_SEGMENT(Z2_17SETUGEN_room_00) -DECLARE_ROM_SEGMENT(Z2_17SETUGEN2) DECLARE_ROM_SEGMENT(Z2_17SETUGEN2_room_00) -DECLARE_ROM_SEGMENT(Z2_SEA_BS) DECLARE_ROM_SEGMENT(Z2_SEA_BS_room_00) -DECLARE_ROM_SEGMENT(Z2_RANDOM) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_00) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_01) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_02) @@ -537,21 +453,17 @@ DECLARE_ROM_SEGMENT(Z2_RANDOM_room_03) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_04) DECLARE_ROM_SEGMENT(Z2_RANDOM_room_05) -DECLARE_ROM_SEGMENT(Z2_YADOYA) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_00) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_01) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_02) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_03) DECLARE_ROM_SEGMENT(Z2_YADOYA_room_04) -DECLARE_ROM_SEGMENT(Z2_KONPEKI_ENT) DECLARE_ROM_SEGMENT(Z2_KONPEKI_ENT_room_00) -DECLARE_ROM_SEGMENT(Z2_INSIDETOWER) DECLARE_ROM_SEGMENT(Z2_INSIDETOWER_room_00) DECLARE_ROM_SEGMENT(Z2_INSIDETOWER_room_01) -DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_00) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_01) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_02) @@ -562,12 +474,10 @@ DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_06) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_07) DECLARE_ROM_SEGMENT(Z2_26SARUNOMORI_room_08) -DECLARE_ROM_SEGMENT(Z2_LOST_WOODS) DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_00) DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_01) DECLARE_ROM_SEGMENT(Z2_LOST_WOODS_room_02) -DECLARE_ROM_SEGMENT(Z2_LAST_LINK) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_00) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_01) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_02) @@ -577,40 +487,28 @@ DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_05) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_06) DECLARE_ROM_SEGMENT(Z2_LAST_LINK_room_07) -DECLARE_ROM_SEGMENT(Z2_SOUGEN) DECLARE_ROM_SEGMENT(Z2_SOUGEN_room_00) -DECLARE_ROM_SEGMENT(Z2_BOMYA) DECLARE_ROM_SEGMENT(Z2_BOMYA_room_00) -DECLARE_ROM_SEGMENT(Z2_KYOJINNOMA) DECLARE_ROM_SEGMENT(Z2_KYOJINNOMA_room_00) -DECLARE_ROM_SEGMENT(Z2_KOEPONARACE) DECLARE_ROM_SEGMENT(Z2_KOEPONARACE_room_00) -DECLARE_ROM_SEGMENT(Z2_GORONRACE) DECLARE_ROM_SEGMENT(Z2_GORONRACE_room_00) -DECLARE_ROM_SEGMENT(Z2_TOWN) DECLARE_ROM_SEGMENT(Z2_TOWN_room_00) -DECLARE_ROM_SEGMENT(Z2_ICHIBA) DECLARE_ROM_SEGMENT(Z2_ICHIBA_room_00) -DECLARE_ROM_SEGMENT(Z2_BACKTOWN) DECLARE_ROM_SEGMENT(Z2_BACKTOWN_room_00) -DECLARE_ROM_SEGMENT(Z2_CLOCKTOWER) DECLARE_ROM_SEGMENT(Z2_CLOCKTOWER_room_00) -DECLARE_ROM_SEGMENT(Z2_ALLEY) DECLARE_ROM_SEGMENT(Z2_ALLEY_room_00) -DECLARE_ROM_SEGMENT(SPOT00) DECLARE_ROM_SEGMENT(SPOT00_room_00) -DECLARE_ROM_SEGMENT(KAKUSIANA) DECLARE_ROM_SEGMENT(KAKUSIANA_room_00) DECLARE_ROM_SEGMENT(KAKUSIANA_room_01) DECLARE_ROM_SEGMENT(KAKUSIANA_room_02) diff --git a/include/tables/scene_table.h b/include/tables/scene_table.h new file mode 100644 index 000000000..ebd8cdb03 --- /dev/null +++ b/include/tables/scene_table.h @@ -0,0 +1,229 @@ +/** + * Scene Table + * + * DEFINE_SCENE should be used for non-empty scenes + * - Argument 0: Name of the scene segment in spec + * - Argument 1: Enum value for this scene + * - Argument 2: Title card's text id, or zero for no title card + * - Argument 3: Scene draw config index + * - Argument 4: Restriction flags. See `RESTRICTIONS_SET` on z_parameter.c + * - Argument 5: Persistent cycle flag set: bitwise flags which won't be turned off on a cycle reset (will persist between cycles) + * + * DEFINE_SCENE_UNSET is needed to define empty entries from the original game + * - Argument 0: Enum value for this scene + */ +// Southern Swamp (Clear) +/* 0x00 */ DEFINE_SCENE(Z2_20SICHITAI2, SCENE_20SICHITAI2, 0x116, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 11), 0, 0, (1 << 30))) +/* 0x01 */ DEFINE_SCENE_UNSET(SCENE_UNSET_01) +/* 0x02 */ DEFINE_SCENE_UNSET(SCENE_UNSET_02) +/* 0x03 */ DEFINE_SCENE_UNSET(SCENE_UNSET_03) +/* 0x04 */ DEFINE_SCENE_UNSET(SCENE_UNSET_04) +/* 0x05 */ DEFINE_SCENE_UNSET(SCENE_UNSET_05) +/* 0x06 */ DEFINE_SCENE_UNSET(SCENE_UNSET_06) +// Lone Peak Shrine & Grottos +/* 0x07 */ DEFINE_SCENE(KAKUSIANA, SCENE_KAKUSIANA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 2) | (1 << 10) | (1 << 11))) +// Cutscene Scene +/* 0x08 */ DEFINE_SCENE(SPOT00, SCENE_SPOT00, 0, SCENE_DRAW_CFG_NOTHING, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +/* 0x09 */ DEFINE_SCENE_UNSET(SCENE_UNSET_09) +// Magic Hags' Potion Shop +/* 0x0A */ DEFINE_SCENE(Z2_WITCH_SHOP, SCENE_WITCH_SHOP, 0x11A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Majora's Lair +/* 0x0B */ DEFINE_SCENE(Z2_LAST_BS, SCENE_LAST_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Beneath the Graveyard +/* 0x0C */ DEFINE_SCENE(Z2_HAKASHITA, SCENE_HAKASHITA, 0x113, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Curiosity Shop +/* 0x0D */ DEFINE_SCENE(Z2_AYASHIISHOP, SCENE_AYASHIISHOP, 0x10E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +/* 0x0E */ DEFINE_SCENE_UNSET(SCENE_UNSET_0E) +/* 0x0F */ DEFINE_SCENE_UNSET(SCENE_UNSET_0F) +// Mama's House (Ranch House in PAL) & Barn +/* 0x10 */ DEFINE_SCENE(Z2_OMOYA, SCENE_OMOYA, 0x132, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Honey & Darling's Shop +/* 0x11 */ DEFINE_SCENE(Z2_BOWLING, SCENE_BOWLING, 0x108, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// The Mayor's Residence +/* 0x12 */ DEFINE_SCENE(Z2_SONCHONOIE, SCENE_SONCHONOIE, 0x10B, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Ikana Canyon +/* 0x13 */ DEFINE_SCENE(Z2_IKANA, SCENE_IKANA, 0x141, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 1) | (1 << 30))) +// Pirates' Fortress +/* 0x14 */ DEFINE_SCENE(Z2_KAIZOKU, SCENE_KAIZOKU, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Milk Bar +/* 0x15 */ DEFINE_SCENE(Z2_MILK_BAR, SCENE_MILK_BAR, 0x10C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Stone Tower Temple +/* 0x16 */ DEFINE_SCENE(Z2_INISIE_N, SCENE_INISIE_N, 0x144, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 26), 0, 0, 0)) +// Treasure Chest Shop +/* 0x17 */ DEFINE_SCENE(Z2_TAKARAYA, SCENE_TAKARAYA, 0x109, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_SET(2, 0, 0, 0)) +// Inverted Stone Tower Temple +/* 0x18 */ DEFINE_SCENE(Z2_INISIE_R, SCENE_INISIE_R, 0x144, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 26), 0, 0, 0)) +// Clock Tower Rooftop +/* 0x19 */ DEFINE_SCENE(Z2_OKUJOU, SCENE_OKUJOU, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Before Clock Town +/* 0x1A */ DEFINE_SCENE(Z2_OPENINGDAN, SCENE_OPENINGDAN, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3), 0, 0, 0)) +// Woodfall Temple +/* 0x1B */ DEFINE_SCENE(Z2_MITURIN, SCENE_MITURIN, 0x11F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 12) | (1 << 13) | (1 << 15) | (1 << 20) | (1 << 21) | (1 << 22), 0, 0, 0)) +// Path to Mountain Village +/* 0x1C */ DEFINE_SCENE(Z2_13HUBUKINOMITI, SCENE_13HUBUKINOMITI, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Ancient Castle of Ikana +/* 0x1D */ DEFINE_SCENE(Z2_CASTLE, SCENE_CASTLE, 0x142, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, (1 << 31), 0, (1 << 10))) +// Deku Scrub Playground +/* 0x1E */ DEFINE_SCENE(Z2_DEKUTES, SCENE_DEKUTES, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Odolwa's Lair +/* 0x1F */ DEFINE_SCENE(Z2_MITURIN_BS, SCENE_MITURIN_BS, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Town Shooting Gallery +/* 0x20 */ DEFINE_SCENE(Z2_SYATEKI_MIZU, SCENE_SYATEKI_MIZU, 0x107, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Snowhead Temple +/* 0x21 */ DEFINE_SCENE(Z2_HAKUGIN, SCENE_HAKUGIN, 0x12B, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 5) | (1 << 21) | (1 << 23) | (1 << 24), 0, 0, 0)) +// Milk Road +/* 0x22 */ DEFINE_SCENE(Z2_ROMANYMAE, SCENE_ROMANYMAE, 0x149, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Pirates' Fortress Interior +/* 0x23 */ DEFINE_SCENE(Z2_PIRATE, SCENE_PIRATE, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 12))) +// Swamp Shooting Gallery +/* 0x24 */ DEFINE_SCENE(Z2_SYATEKI_MORI, SCENE_SYATEKI_MORI, 0x11B, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Pinnacle Rock +/* 0x25 */ DEFINE_SCENE(Z2_SINKAI, SCENE_SINKAI, 0x135, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Fairy's Fountain +/* 0x26 */ DEFINE_SCENE(Z2_YOUSEI_IZUMI, SCENE_YOUSEI_IZUMI, 0x13E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Swamp Spider House +/* 0x27 */ DEFINE_SCENE(Z2_KINSTA1, SCENE_KINSTA1, 0x11E, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Oceanside Spider House +/* 0x28 */ DEFINE_SCENE(Z2_KINDAN2, SCENE_KINDAN2, 0x13F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Astral Observatory +/* 0x29 */ DEFINE_SCENE(Z2_TENMON_DAI, SCENE_TENMON_DAI, 0x114, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Moon Deku Trial +/* 0x2A */ DEFINE_SCENE(Z2_LAST_DEKU, SCENE_LAST_DEKU, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Deku Palace +/* 0x2B */ DEFINE_SCENE(Z2_22DEKUCITY, SCENE_22DEKUCITY, 0x118, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Mountain Smithy +/* 0x2C */ DEFINE_SCENE(Z2_KAJIYA, SCENE_KAJIYA, 0x127, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Termina Field +/* 0x2D */ DEFINE_SCENE(Z2_00KEIKOKU, SCENE_00KEIKOKU, 0x100, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 4), 0, 0, 0)) +// Post Office +/* 0x2E */ DEFINE_SCENE(Z2_POSTHOUSE, SCENE_POSTHOUSE, 0x111, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_SET(3, 0, 0, 0)) +// Marine Research Lab +/* 0x2F */ DEFINE_SCENE(Z2_LABO, SCENE_LABO, 0x13A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Beneath the Graveyard (Day 3) and Dampe's House +/* 0x30 */ DEFINE_SCENE(Z2_DANPEI2TEST, SCENE_DANPEI2TEST, 0x113, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +/* 0x31 */ DEFINE_SCENE_UNSET(SCENE_UNSET_31) +// Goron Shrine +/* 0x32 */ DEFINE_SCENE(Z2_16GORON_HOUSE, SCENE_16GORON_HOUSE, 0x124, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Zora Hall +/* 0x33 */ DEFINE_SCENE(Z2_33ZORACITY, SCENE_33ZORACITY, 0x136, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Trading Post +/* 0x34 */ DEFINE_SCENE(Z2_8ITEMSHOP, SCENE_8ITEMSHOP, 0x10F, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Romani Ranch +/* 0x35 */ DEFINE_SCENE(Z2_F01, SCENE_F01, 0x12E, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Twinmold's Lair +/* 0x36 */ DEFINE_SCENE(Z2_INISIE_BS, SCENE_INISIE_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Great Bay Coast +/* 0x37 */ DEFINE_SCENE(Z2_30GYOSON, SCENE_30GYOSON, 0x134, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 20), 0, 0, (1 << 1) | (1 << 5))) +// Zora Cape +/* 0x38 */ DEFINE_SCENE(Z2_31MISAKI, SCENE_31MISAKI, 0x134, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, (1 << 7))) +// Lottery Shop +/* 0x39 */ DEFINE_SCENE(Z2_TAKARAKUJI, SCENE_TAKARAKUJI, 0x112, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +/* 0x3A */ DEFINE_SCENE_UNSET(SCENE_UNSET_3A) +// Pirates' Fortress Moat +/* 0x3B */ DEFINE_SCENE(Z2_TORIDE, SCENE_TORIDE, 0x138, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Fisherman's Hut +/* 0x3C */ DEFINE_SCENE(Z2_FISHERMAN, SCENE_FISHERMAN, 0x13B, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Goron Shop +/* 0x3D */ DEFINE_SCENE(Z2_GORONSHOP, SCENE_GORONSHOP, 0x129, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Deku King's Chamber +/* 0x3E */ DEFINE_SCENE(Z2_DEKU_KING, SCENE_DEKU_KING, 0x11C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Moon Goron Trial +/* 0x3F */ DEFINE_SCENE(Z2_LAST_GORON, SCENE_LAST_GORON, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Road to Southern Swamp +/* 0x40 */ DEFINE_SCENE(Z2_24KEMONOMITI, SCENE_24KEMONOMITI, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 1) | (1 << 31))) +// Doggy Racetrack +/* 0x41 */ DEFINE_SCENE(Z2_F01_B, SCENE_F01_B, 0x130, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Cucco Shack +/* 0x42 */ DEFINE_SCENE(Z2_F01C, SCENE_F01C, 0x12F, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Ikana Graveyard +/* 0x43 */ DEFINE_SCENE(Z2_BOTI, SCENE_BOTI, 0x106, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Goht's Lair +/* 0x44 */ DEFINE_SCENE(Z2_HAKUGIN_BS, SCENE_HAKUGIN_BS, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Southern Swamp (poison) +/* 0x45 */ DEFINE_SCENE(Z2_20SICHITAI, SCENE_20SICHITAI, 0x116, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10) | (1 << 11), 0, 0, (1 << 30))) +// Woodfall +/* 0x46 */ DEFINE_SCENE(Z2_21MITURINMAE, SCENE_21MITURINMAE, 0x117, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0x102, 0, 0, (1 << 10))) +// Moon Zora Trial +/* 0x47 */ DEFINE_SCENE(Z2_LAST_ZORA, SCENE_LAST_ZORA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// Goron Village (spring) +/* 0x48 */ DEFINE_SCENE(Z2_11GORONNOSATO2, SCENE_11GORONNOSATO2, 0x123, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Great Bay Temple +/* 0x49 */ DEFINE_SCENE(Z2_SEA, SCENE_SEA, 0x13D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 4) | (1 << 5) | (1 << 6), 0, 0, 0)) +// Waterfall Rapids +/* 0x4A */ DEFINE_SCENE(Z2_35TAKI, SCENE_35TAKI, 0x137, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Beneath the Well +/* 0x4B */ DEFINE_SCENE(Z2_REDEAD, SCENE_REDEAD, 0x145, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Zora Hall Rooms +/* 0x4C */ DEFINE_SCENE(Z2_BANDROOM, SCENE_BANDROOM, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Goron Village (winter) +/* 0x4D */ DEFINE_SCENE(Z2_11GORONNOSATO, SCENE_11GORONNOSATO, 0x123, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 30))) +// Goron Graveyard +/* 0x4E */ DEFINE_SCENE(Z2_GORON_HAKA, SCENE_GORON_HAKA, 0x12A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Sakon's Hideout +/* 0x4F */ DEFINE_SCENE(Z2_SECOM, SCENE_SECOM, 0x143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Mountain Village (winter) +/* 0x50 */ DEFINE_SCENE(Z2_10YUKIYAMANOMURA, SCENE_10YUKIYAMANOMURA, 0x122, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 31))) +// Ghost Hut +/* 0x51 */ DEFINE_SCENE(Z2_TOUGITES, SCENE_TOUGITES, 0x146, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Deku Shrine +/* 0x52 */ DEFINE_SCENE(Z2_DANPEI, SCENE_DANPEI, 0x120, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Road to Ikana +/* 0x53 */ DEFINE_SCENE(Z2_IKANAMAE, SCENE_IKANAMAE, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Swordsman's School +/* 0x54 */ DEFINE_SCENE(Z2_DOUJOU, SCENE_DOUJOU, 0x110, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1), PERSISTENT_CYCLE_FLAGS_NONE) +// Music Box House +/* 0x55 */ DEFINE_SCENE(Z2_MUSICHOUSE, SCENE_MUSICHOUSE, 0x147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Igos du Ikana's Lair +/* 0x56 */ DEFINE_SCENE(Z2_IKNINSIDE, SCENE_IKNINSIDE, 0x142, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_NONE) +// Tourist Information +/* 0x57 */ DEFINE_SCENE(Z2_MAP_SHOP, SCENE_MAP_SHOP, 0x119, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Stone Tower +/* 0x58 */ DEFINE_SCENE(Z2_F40, SCENE_F40, 0x140, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Inverted Stone Tower +/* 0x59 */ DEFINE_SCENE(Z2_F41, SCENE_F41, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Mountain Village (spring) +/* 0x5A */ DEFINE_SCENE(Z2_10YUKIYAMANOMURA2, SCENE_10YUKIYAMANOMURA2, 0x122, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 31))) +// Path to Snowhead +/* 0x5B */ DEFINE_SCENE(Z2_14YUKIDAMANOMITI, SCENE_14YUKIDAMANOMITI, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 8))) +// Snowhead +/* 0x5C */ DEFINE_SCENE(Z2_12HAKUGINMAE, SCENE_12HAKUGINMAE, 0x125, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 10), 0, 0, 0)) +// Path to Goron Village (winter) +/* 0x5D */ DEFINE_SCENE(Z2_17SETUGEN, SCENE_17SETUGEN, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 7))) +// Path to Goron Village (spring) +/* 0x5E */ DEFINE_SCENE(Z2_17SETUGEN2, SCENE_17SETUGEN2, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 7))) +// Gyorg's Lair +/* 0x5F */ DEFINE_SCENE(Z2_SEA_BS, SCENE_SEA_BS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 31))) +// Secret Shrine +/* 0x60 */ DEFINE_SCENE(Z2_RANDOM, SCENE_RANDOM, 0x12C, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 10))) +// Stock Pot Inn +/* 0x61 */ DEFINE_SCENE(Z2_YADOYA, SCENE_YADOYA, 0x10A, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Great Bay Cutscene +/* 0x62 */ DEFINE_SCENE(Z2_KONPEKI_ENT, SCENE_KONPEKI_ENT, 0x139, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Clock Tower Interior +/* 0x63 */ DEFINE_SCENE(Z2_INSIDETOWER, SCENE_INSIDETOWER, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0), PERSISTENT_CYCLE_FLAGS_SET(1 << 0, 0, 0, 0)) +// Woods of Mystery +/* 0x64 */ DEFINE_SCENE(Z2_26SARUNOMORI, SCENE_26SARUNOMORI, 0x11D, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Lost Woods (Intro) +/* 0x65 */ DEFINE_SCENE(Z2_LOST_WOODS, SCENE_LOST_WOODS, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Moon Link Trial +/* 0x66 */ DEFINE_SCENE(Z2_LAST_LINK, SCENE_LAST_LINK, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 2)) +// The Moon +/* 0x67 */ DEFINE_SCENE(Z2_SOUGEN, SCENE_SOUGEN, 0, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_MOON, PERSISTENT_CYCLE_FLAGS_NONE) +// Bomb Shop +/* 0x68 */ DEFINE_SCENE(Z2_BOMYA, SCENE_BOMYA, 0x10D, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_INDOORS, PERSISTENT_CYCLE_FLAGS_NONE) +// Giants' Chamber +/* 0x69 */ DEFINE_SCENE(Z2_KYOJINNOMA, SCENE_KYOJINNOMA, 0, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// Gorman Track +/* 0x6A */ DEFINE_SCENE(Z2_KOEPONARACE, SCENE_KOEPONARACE, 0x131, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NO_DOUBLE_TIME, PERSISTENT_CYCLE_FLAGS_NONE) +// Goron Racetrack +/* 0x6B */ DEFINE_SCENE(Z2_GORONRACE, SCENE_GORONRACE, 0x126, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// East Clock Town +/* 0x6C */ DEFINE_SCENE(Z2_TOWN, SCENE_TOWN, 0x101, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(1, 0, 0, 0)) +// West Clock Town +/* 0x6D */ DEFINE_SCENE(Z2_ICHIBA, SCENE_ICHIBA, 0x102, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_NONE) +// North Clock Town +/* 0x6E */ DEFINE_SCENE(Z2_BACKTOWN, SCENE_BACKTOWN, 0x103, SCENE_DRAW_CFG_DEFAULT, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, (1 << 10))) +// South Clock Town +/* 0x6F */ DEFINE_SCENE(Z2_CLOCKTOWER, SCENE_CLOCKTOWER, 0x104, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET((1 << 20), 0, 0, (1 << 10))) +// Laundry Pool +/* 0x70 */ DEFINE_SCENE(Z2_ALLEY, SCENE_ALLEY, 0x105, SCENE_DRAW_CFG_MAT_ANIM, RESTRICTIONS_NONE, PERSISTENT_CYCLE_FLAGS_SET(0, 0, 1, 0)) diff --git a/include/variables.h b/include/variables.h index dfb0ab791..61ac8824b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -581,7 +581,7 @@ extern s16 gPlayerFormObjectIndices[PLAYER_FORM_MAX]; extern ObjectId gObjectTableSize; extern RomFile gObjectTable[OBJECT_ID_MAX]; -extern SceneTableEntry gSceneTable[]; +extern SceneTableEntry gSceneTable[SCENE_MAX]; extern UNK_PTR D_801C5C50; // extern UNK_TYPE1 D_801C5C9C; extern UNK_PTR D_801C5CB0; @@ -2422,6 +2422,7 @@ extern volatile OSTime sRSPOtherTotalTime; // extern UNK_TYPE1 D_801FBB18; extern volatile OSTime gRDPTotalTime; // extern UNK_TYPE1 D_801FBB28; + extern OSViMode sNotebookViMode; extern void* gFramebuffers[2]; extern OSViMode* gActiveViMode; @@ -2446,6 +2447,7 @@ extern s16 gCfbHeight; extern s16 gCfbLeftAdjust; extern s16 gCfbUpperAdjust; extern u8 gSysCfbHiResEnabled; + extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64scene.h b/include/z64scene.h index c31b7ce58..387d584f5 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -584,123 +584,17 @@ typedef enum { /* 6 */ TINGLE_MAP_MAX } TingleMapId; -typedef enum { - /* 0x00 */ SCENE_20SICHITAI2, // Southern Swamp (Clear) - /* 0x01 */ SCENE_UNSET_1, - /* 0x02 */ SCENE_UNSET_2, - /* 0x03 */ SCENE_UNSET_3, - /* 0x04 */ SCENE_UNSET_4, - /* 0x05 */ SCENE_UNSET_5, - /* 0x06 */ SCENE_UNSET_6, - /* 0x07 */ SCENE_KAKUSIANA, // Lone Peak Shrine & Grottos - /* 0x08 */ SCENE_SPOT00, // Cutscene Scene - /* 0x09 */ SCENE_UNSET_9, - /* 0x0A */ SCENE_WITCH_SHOP, // Magic Hags' Potion Shop - /* 0x0B */ SCENE_LAST_BS, // Majora's Lair - /* 0x0C */ SCENE_HAKASHITA, // Beneath the Graveyard - /* 0x0D */ SCENE_AYASHIISHOP, // Curiosity Shop - /* 0x0E */ SCENE_UNSET_E, - /* 0x0F */ SCENE_UNSET_F, - /* 0x10 */ SCENE_OMOYA, // Mama's House (Ranch House in PAL) & Barn - /* 0x11 */ SCENE_BOWLING, // Honey & Darling's Shop - /* 0x12 */ SCENE_SONCHONOIE, // The Mayor's Residence - /* 0x13 */ SCENE_IKANA, // Ikana Canyon - /* 0x14 */ SCENE_KAIZOKU, // Pirates' Fortress - /* 0x15 */ SCENE_MILK_BAR, // Milk Bar - /* 0x16 */ SCENE_INISIE_N, // Stone Tower Temple - /* 0x17 */ SCENE_TAKARAYA, // Treasure Chest Shop - /* 0x18 */ SCENE_INISIE_R, // Inverted Stone Tower Temple - /* 0x19 */ SCENE_OKUJOU, // Clock Tower Rooftop - /* 0x1A */ SCENE_OPENINGDAN, // Before Clock Town - /* 0x1B */ SCENE_MITURIN, // Woodfall Temple - /* 0x1C */ SCENE_13HUBUKINOMITI, // Path to Mountain Village - /* 0x1D */ SCENE_CASTLE, // Ancient Castle of Ikana - /* 0x1E */ SCENE_DEKUTES, // Deku Scrub Playground - /* 0x1F */ SCENE_MITURIN_BS, // Odolwa's Lair - /* 0x20 */ SCENE_SYATEKI_MIZU, // Town Shooting Gallery - /* 0x21 */ SCENE_HAKUGIN, // Snowhead Temple - /* 0x22 */ SCENE_ROMANYMAE, // Milk Road - /* 0x23 */ SCENE_PIRATE, // Pirates' Fortress Interior - /* 0x24 */ SCENE_SYATEKI_MORI, // Swamp Shooting Gallery - /* 0x25 */ SCENE_SINKAI, // Pinnacle Rock - /* 0x26 */ SCENE_YOUSEI_IZUMI, // Fairy's Fountain - /* 0x27 */ SCENE_KINSTA1, // Swamp Spider House - /* 0x28 */ SCENE_KINDAN2, // Oceanside Spider House - /* 0x29 */ SCENE_TENMON_DAI, // Astral Observatory - /* 0x2A */ SCENE_LAST_DEKU, // Moon Deku Trial - /* 0x2B */ SCENE_22DEKUCITY, // Deku Palace - /* 0x2C */ SCENE_KAJIYA, // Mountain Smithy - /* 0x2D */ SCENE_00KEIKOKU, // Termina Field - /* 0x2E */ SCENE_POSTHOUSE, // Post Office - /* 0x2F */ SCENE_LABO, // Marine Research Lab - /* 0x30 */ SCENE_DANPEI2TEST, // Beneath the Graveyard (Day 3) and Dampe's House - /* 0x31 */ SCENE_UNSET_31, - /* 0x32 */ SCENE_16GORON_HOUSE, // Goron Shrine - /* 0x33 */ SCENE_33ZORACITY, // Zora Hall - /* 0x34 */ SCENE_8ITEMSHOP, // Trading Post - /* 0x35 */ SCENE_F01, // Romani Ranch - /* 0x36 */ SCENE_INISIE_BS, // Twinmold's Lair - /* 0x37 */ SCENE_30GYOSON, // Great Bay Coast - /* 0x38 */ SCENE_31MISAKI, // Zora Cape - /* 0x39 */ SCENE_TAKARAKUJI, // Lottery Shop - /* 0x3A */ SCENE_UNSET_3A, - /* 0x3B */ SCENE_TORIDE, // Pirates' Fortress Moat - /* 0x3C */ SCENE_FISHERMAN, // Fisherman's Hut - /* 0x3D */ SCENE_GORONSHOP, // Goron Shop - /* 0x3E */ SCENE_DEKU_KING, // Deku King's Chamber - /* 0x3F */ SCENE_LAST_GORON, // Moon Goron Trial - /* 0x40 */ SCENE_24KEMONOMITI, // Road to Southern Swamp - /* 0x41 */ SCENE_F01_B, // Doggy Racetrack - /* 0x42 */ SCENE_F01C, // Cucco Shack - /* 0x43 */ SCENE_BOTI, // Ikana Graveyard - /* 0x44 */ SCENE_HAKUGIN_BS, // Goht's Lair - /* 0x45 */ SCENE_20SICHITAI, // Southern Swamp (poison) - /* 0x46 */ SCENE_21MITURINMAE, // Woodfall - /* 0x47 */ SCENE_LAST_ZORA, // Moon Zora Trial - /* 0x48 */ SCENE_11GORONNOSATO2, // Goron Village (spring) - /* 0x49 */ SCENE_SEA, // Great Bay Temple - /* 0x4A */ SCENE_35TAKI, // Waterfall Rapids - /* 0x4B */ SCENE_REDEAD, // Beneath the Well - /* 0x4C */ SCENE_BANDROOM, // Zora Hall Rooms - /* 0x4D */ SCENE_11GORONNOSATO, // Goron Village (winter) - /* 0x4E */ SCENE_GORON_HAKA, // Goron Graveyard - /* 0x4F */ SCENE_SECOM, // Sakon's Hideout - /* 0x50 */ SCENE_10YUKIYAMANOMURA, // Mountain Village (winter) - /* 0x51 */ SCENE_TOUGITES, // Ghost Hut - /* 0x52 */ SCENE_DANPEI, // Deku Shrine - /* 0x53 */ SCENE_IKANAMAE, // Road to Ikana - /* 0x54 */ SCENE_DOUJOU, // Swordsman's School - /* 0x55 */ SCENE_MUSICHOUSE, // Music Box House - /* 0x56 */ SCENE_IKNINSIDE, // Igos du Ikana's Lair - /* 0x57 */ SCENE_MAP_SHOP, // Tourist Information - /* 0x58 */ SCENE_F40, // Stone Tower - /* 0x59 */ SCENE_F41, // Inverted Stone Tower - /* 0x5A */ SCENE_10YUKIYAMANOMURA2, // Mountain Village (spring) - /* 0x5B */ SCENE_14YUKIDAMANOMITI, // Path to Snowhead - /* 0x5C */ SCENE_12HAKUGINMAE, // Snowhead - /* 0x5D */ SCENE_17SETUGEN, // Path to Goron Village (winter) - /* 0x5E */ SCENE_17SETUGEN2, // Path to Goron Village (spring) - /* 0x5F */ SCENE_SEA_BS, // Gyorg's Lair - /* 0x60 */ SCENE_RANDOM, // Secret Shrine - /* 0x61 */ SCENE_YADOYA, // Stock Pot Inn - /* 0x62 */ SCENE_KONPEKI_ENT, // Great Bay Cutscene - /* 0x63 */ SCENE_INSIDETOWER, // Clock Tower Interior - /* 0x64 */ SCENE_26SARUNOMORI, // Woods of Mystery - /* 0x65 */ SCENE_LOST_WOODS, // Lost Woods (Intro) - /* 0x66 */ SCENE_LAST_LINK, // Moon Link Trial - /* 0x67 */ SCENE_SOUGEN, // The Moon - /* 0x68 */ SCENE_BOMYA, // Bomb Shop - /* 0x69 */ SCENE_KYOJINNOMA, // Giants' Chamber - /* 0x6A */ SCENE_KOEPONARACE, // Gorman Track - /* 0x6B */ SCENE_GORONRACE, // Goron Racetrack - /* 0x6C */ SCENE_TOWN, // East Clock Town - /* 0x6D */ SCENE_ICHIBA, // West Clock Town - /* 0x6E */ SCENE_BACKTOWN, // North Clock Town - /* 0x6F */ SCENE_CLOCKTOWER, // South Clock Town - /* 0x70 */ SCENE_ALLEY, // Laundry Pool +#define DEFINE_SCENE(_name, enumValue, _textId, _drawConfig, _restrictionFlags, _persistentCycleFlags) enumValue, +#define DEFINE_SCENE_UNSET(enumValue) enumValue, + +typedef enum SceneId { + #include "tables/scene_table.h" /* 0x71 */ SCENE_MAX } SceneId; +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + typedef enum { /* 0x00 */ ENTR_SCENE_MAYORS_RESIDENCE, /* 0x01 */ ENTR_SCENE_MAJORAS_LAIR, diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c index 4745ad5c8..78eed1a77 100644 --- a/src/boot_O2_g3/CIC6105.c +++ b/src/boot_O2_g3/CIC6105.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" UNK_TYPE4 D_8009BE30; diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index 3517b97ae..aa7ecdfe1 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" u8 sYaz0DataBuffer[0x400]; diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 16c39855c..29d6e39c4 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "buffers.h" #include "system_malloc.h" diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 89b148942..91a1d6b06 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -42,6 +42,7 @@ * -Y +Z -Y * */ + #include "global.h" #include "z64quake.h" #include "z64shrink_window.h" diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 775b68f01..186608729 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -273,6 +273,7 @@ void EffectSS_DrawAllParticles(PlayState* play) { s16 func_800B096C(s16 arg0, s16 arg1, s32 arg2) { s16 ret = (arg2 == 0) ? arg1 : arg0 + (s32)((arg1 - arg0) / (f32)arg2); + return ret; } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index d0558d7f8..86b6d0107 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -73,125 +73,21 @@ Input sPostmanTimerInput[MAXCONTROLLERS]; #define RESTRICTIONS_MOON RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0) #define RESTRICTIONS_NO_DOUBLE_TIME RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0) +#define DEFINE_SCENE(_name, enumValue, _textId, _drawConfig, restrictionFlags, _persistentCycleFlags) \ + { enumValue, restrictionFlags }, + +#define DEFINE_SCENE_UNSET(enumValue) { enumValue, RESTRICTIONS_NONE }, + RestrictionFlags sRestrictionFlags[] = { - { SCENE_20SICHITAI2, RESTRICTIONS_NONE }, - { SCENE_UNSET_1, RESTRICTIONS_NONE }, - { SCENE_UNSET_2, RESTRICTIONS_NONE }, - { SCENE_UNSET_3, RESTRICTIONS_NONE }, - { SCENE_UNSET_4, RESTRICTIONS_NONE }, - { SCENE_UNSET_5, RESTRICTIONS_NONE }, - { SCENE_UNSET_6, RESTRICTIONS_NONE }, - { SCENE_KAKUSIANA, RESTRICTIONS_NONE }, - { SCENE_SPOT00, RESTRICTIONS_NONE }, - { SCENE_UNSET_9, RESTRICTIONS_NONE }, - { SCENE_WITCH_SHOP, RESTRICTIONS_INDOORS }, - { SCENE_LAST_BS, RESTRICTIONS_MOON }, - { SCENE_HAKASHITA, RESTRICTIONS_NONE }, - { SCENE_AYASHIISHOP, RESTRICTIONS_INDOORS }, - { SCENE_UNSET_E, RESTRICTIONS_NONE }, - { SCENE_UNSET_F, RESTRICTIONS_NONE }, - { SCENE_OMOYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0) }, - { SCENE_BOWLING, RESTRICTIONS_INDOORS }, - { SCENE_SONCHONOIE, RESTRICTIONS_INDOORS }, - { SCENE_IKANA, RESTRICTIONS_NONE }, - { SCENE_KAIZOKU, RESTRICTIONS_NONE }, - { SCENE_MILK_BAR, RESTRICTIONS_INDOORS }, - { SCENE_INISIE_N, RESTRICTIONS_NONE }, - { SCENE_TAKARAYA, RESTRICTIONS_INDOORS }, - { SCENE_INISIE_R, RESTRICTIONS_NONE }, - { SCENE_OKUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) }, - { SCENE_OPENINGDAN, RESTRICTIONS_NONE }, - { SCENE_MITURIN, RESTRICTIONS_NONE }, - { SCENE_13HUBUKINOMITI, RESTRICTIONS_NONE }, - { SCENE_CASTLE, RESTRICTIONS_NONE }, - { SCENE_DEKUTES, RESTRICTIONS_SET(0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1) }, - { SCENE_MITURIN_BS, RESTRICTIONS_NONE }, - { SCENE_SYATEKI_MIZU, RESTRICTIONS_INDOORS }, - { SCENE_HAKUGIN, RESTRICTIONS_NONE }, - { SCENE_ROMANYMAE, RESTRICTIONS_NONE }, - { SCENE_PIRATE, RESTRICTIONS_NONE }, - { SCENE_SYATEKI_MORI, RESTRICTIONS_INDOORS }, - { SCENE_SINKAI, RESTRICTIONS_NONE }, - { SCENE_YOUSEI_IZUMI, RESTRICTIONS_NONE }, - { SCENE_KINSTA1, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_KINDAN2, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_TENMON_DAI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0) }, - { SCENE_LAST_DEKU, RESTRICTIONS_MOON }, - { SCENE_22DEKUCITY, RESTRICTIONS_NONE }, - { SCENE_KAJIYA, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_00KEIKOKU, RESTRICTIONS_NONE }, - { SCENE_POSTHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_LABO, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_DANPEI2TEST, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_UNSET_31, RESTRICTIONS_NONE }, - { SCENE_16GORON_HOUSE, RESTRICTIONS_NONE }, - { SCENE_33ZORACITY, RESTRICTIONS_SET(0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0) }, - { SCENE_8ITEMSHOP, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_F01, RESTRICTIONS_NONE }, - { SCENE_INISIE_BS, RESTRICTIONS_NONE }, - { SCENE_30GYOSON, RESTRICTIONS_NONE }, - { SCENE_31MISAKI, RESTRICTIONS_NONE }, - { SCENE_TAKARAKUJI, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_UNSET_3A, RESTRICTIONS_NONE }, - { SCENE_TORIDE, RESTRICTIONS_NONE }, - { SCENE_FISHERMAN, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_GORONSHOP, RESTRICTIONS_INDOORS }, - { SCENE_DEKU_KING, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_LAST_GORON, RESTRICTIONS_MOON }, - { SCENE_24KEMONOMITI, RESTRICTIONS_NONE }, - { SCENE_F01_B, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_F01C, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_BOTI, RESTRICTIONS_NONE }, - { SCENE_HAKUGIN_BS, RESTRICTIONS_NONE }, - { SCENE_20SICHITAI, RESTRICTIONS_NONE }, - { SCENE_21MITURINMAE, RESTRICTIONS_NONE }, - { SCENE_LAST_ZORA, RESTRICTIONS_MOON }, - { SCENE_11GORONNOSATO2, RESTRICTIONS_NONE }, - { SCENE_SEA, RESTRICTIONS_NONE }, - { SCENE_35TAKI, RESTRICTIONS_NONE }, - { SCENE_REDEAD, RESTRICTIONS_NONE }, - { SCENE_BANDROOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_11GORONNOSATO, RESTRICTIONS_NONE }, - { SCENE_GORON_HAKA, RESTRICTIONS_NONE }, - { SCENE_SECOM, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 0, 3, 0, 0, 0) }, - { SCENE_10YUKIYAMANOMURA, RESTRICTIONS_NONE }, - { SCENE_TOUGITES, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0) }, - { SCENE_DANPEI, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_IKANAMAE, RESTRICTIONS_NONE }, - { SCENE_DOUJOU, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 1) }, - { SCENE_MUSICHOUSE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0) }, - { SCENE_IKNINSIDE, RESTRICTIONS_SET(0, 0, 0, 0, 0, 3, 3, 3, 3, 0, 0, 0) }, - { SCENE_MAP_SHOP, RESTRICTIONS_INDOORS }, - { SCENE_F40, RESTRICTIONS_NONE }, - { SCENE_F41, RESTRICTIONS_NONE }, - { SCENE_10YUKIYAMANOMURA2, RESTRICTIONS_NONE }, - { SCENE_14YUKIDAMANOMITI, RESTRICTIONS_NONE }, - { SCENE_12HAKUGINMAE, RESTRICTIONS_NONE }, - { SCENE_17SETUGEN, RESTRICTIONS_NONE }, - { SCENE_17SETUGEN2, RESTRICTIONS_NONE }, - { SCENE_SEA_BS, RESTRICTIONS_NONE }, - { SCENE_RANDOM, RESTRICTIONS_NONE }, - { SCENE_YADOYA, RESTRICTIONS_INDOORS }, - { SCENE_KONPEKI_ENT, RESTRICTIONS_NONE }, - { SCENE_INSIDETOWER, RESTRICTIONS_SET(0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0) }, - { SCENE_26SARUNOMORI, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_LOST_WOODS, RESTRICTIONS_NONE }, - { SCENE_LAST_LINK, RESTRICTIONS_MOON }, - { SCENE_SOUGEN, RESTRICTIONS_MOON }, - { SCENE_BOMYA, RESTRICTIONS_INDOORS }, - { SCENE_KYOJINNOMA, RESTRICTIONS_NONE }, - { SCENE_KOEPONARACE, RESTRICTIONS_NO_DOUBLE_TIME }, - { SCENE_GORONRACE, RESTRICTIONS_NONE }, - { SCENE_TOWN, RESTRICTIONS_NONE }, - { SCENE_ICHIBA, RESTRICTIONS_NONE }, - { SCENE_BACKTOWN, RESTRICTIONS_NONE }, - { SCENE_CLOCKTOWER, RESTRICTIONS_NONE }, - { SCENE_ALLEY, RESTRICTIONS_NONE }, +#include "tables/scene_table.h" // { RESTRICTIONS_TABLE_END, RESTRICTIONS_NONE }, // See note below }; //! @note: in `Interface_SetSceneRestrictions`, `RESTRICTIONS_TABLE_END` act as a terminating value to // stop looping through the array. If a scene is missing, then this will cause issues. +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + s16 sPictoState = PICTO_BOX_STATE_OFF; s16 sPictoPhotoBeingTaken = false; diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index a109dab17..6aee18baf 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #define FLAGS \ diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c index 6ec3f2b80..c899b4d83 100644 --- a/src/code/z_scene_proc.c +++ b/src/code/z_scene_proc.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" s32 sMatAnimStep; diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c index f80ad551d..e31e4b185 100644 --- a/src/code/z_scene_table.c +++ b/src/code/z_scene_table.c @@ -1,127 +1,27 @@ #include "global.h" -#define SCENE_ENTRY(name, textId, config) \ - { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, config, 0, 0 } +#define DEFINE_SCENE(name, _enumValue, textId, drawConfig, _restrictionFlags, _persistentCycleFlags) \ + DECLARE_ROM_SEGMENT(name) -#define SCENE_ENTRY_NONE() \ - { { 0, 0 }, 0, 0, 0, 0, 0 } +#define DEFINE_SCENE_UNSET(_enumValue) -SceneTableEntry gSceneTable[] = { - /* 0x00 */ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x01 */ SCENE_ENTRY_NONE(), - /* 0x02 */ SCENE_ENTRY_NONE(), - /* 0x03 */ SCENE_ENTRY_NONE(), - /* 0x04 */ SCENE_ENTRY_NONE(), - /* 0x05 */ SCENE_ENTRY_NONE(), - /* 0x06 */ SCENE_ENTRY_NONE(), - /* 0x07 */ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x08 */ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING), - /* 0x09 */ SCENE_ENTRY_NONE(), - /* 0x0A */ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0B */ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0C */ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0D */ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x0E */ SCENE_ENTRY_NONE(), - /* 0x0F */ SCENE_ENTRY_NONE(), - /* 0x10 */ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT), - /* 0x11 */ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x12 */ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT), - /* 0x13 */ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x14 */ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x15 */ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x16 */ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x17 */ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT), - /* 0x18 */ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x19 */ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x1A */ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1B */ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1C */ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x1D */ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1E */ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x1F */ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x20 */ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x21 */ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x22 */ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT), - /* 0x23 */ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x24 */ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT), - /* 0x25 */ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x26 */ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x27 */ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x28 */ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x29 */ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2A */ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x2B */ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2C */ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2D */ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x2E */ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT), - /* 0x2F */ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x30 */ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x31 */ SCENE_ENTRY_NONE(), - /* 0x32 */ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT), - /* 0x33 */ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x34 */ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x35 */ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT), - /* 0x36 */ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x37 */ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x38 */ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x39 */ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT), - /* 0x3A */ SCENE_ENTRY_NONE(), - /* 0x3B */ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3C */ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3D */ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3E */ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x3F */ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x40 */ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x41 */ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT), - /* 0x42 */ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT), - /* 0x43 */ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT), - /* 0x44 */ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x45 */ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x46 */ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x47 */ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x48 */ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x49 */ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE), - /* 0x4A */ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4B */ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4C */ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4D */ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4E */ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x4F */ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP), - /* 0x50 */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x51 */ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT), - /* 0x52 */ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x53 */ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x54 */ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT), - /* 0x55 */ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP), - /* 0x56 */ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x57 */ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT), - /* 0x58 */ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT), - /* 0x59 */ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x5A */ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5B */ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x5C */ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5D */ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5E */ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x5F */ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x60 */ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x61 */ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x62 */ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x63 */ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x64 */ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x65 */ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x66 */ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x67 */ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT), - /* 0x68 */ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT), - /* 0x69 */ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x6A */ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x6B */ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT), - /* 0x6C */ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT), - /* 0x6D */ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT), - /* 0x6E */ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT), - /* 0x6F */ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM), - /* 0x70 */ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM), +#include "tables/scene_table.h" + +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + +#define DEFINE_SCENE(name, _enumValue, textId, drawConfig, _restrictionFlags, _persistentCycleFlags) \ + { { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name) }, textId, 0, drawConfig, 0, 0 }, + +#define DEFINE_SCENE_UNSET(_enumValue) { 0 }, + +SceneTableEntry gSceneTable[SCENE_MAX] = { +#include "tables/scene_table.h" }; +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + static EntranceTableEntry sMayorsResidenceEntrance0[] = { { SCENE_SONCHONOIE, 0, 0x4102 }, }; diff --git a/src/code/z_skin.c b/src/code/z_skin.c index 9bfd8d566..0d3e0bf85 100644 --- a/src/code/z_skin.c +++ b/src/code/z_skin.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64skin.h" diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index c10c1943e..6556adfa7 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -10,128 +10,30 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2); ((newf)[0] != 'Z' || (newf)[1] != 'E' || (newf)[2] != 'L' || (newf)[3] != 'D' || (newf)[4] != 'A' || \ (newf)[5] != '3') -// default scene flags (?) -// indices of subarray: -// - 0: switch0 -// - 1: switch1 -// - 2: chest -// - 3: collectible -u32 D_801C5FC0[SCENE_MAX][4] = { - { 0xC00, 0, 0, 0x40000000 }, // SCENE_20SICHITAI2 - { 0, 0, 0, 0 }, // SCENE_UNSET_1 - { 0, 0, 0, 0 }, // SCENE_UNSET_2 - { 0, 0, 0, 0 }, // SCENE_UNSET_3 - { 0, 0, 0, 0 }, // SCENE_UNSET_4 - { 0, 0, 0, 0 }, // SCENE_UNSET_5 - { 0, 0, 0, 0 }, // SCENE_UNSET_6 - { 0, 0, 0, 0xC04 }, // SCENE_KAKUSIANA - { 0, 0, 0, 0 }, // SCENE_SPOT00 - { 0, 0, 0, 0 }, // SCENE_UNSET_9 - { 0, 0, 0, 0 }, // SCENE_WITCH_SHOP - { 0, 0, 0, 0x80000000 }, // SCENE_LAST_BS - { 0, 0, 0, 0x80000000 }, // SCENE_HAKASHITA - { 0, 0, 0, 0 }, // SCENE_AYASHIISHOP - { 0, 0, 0, 0 }, // SCENE_UNSET_E - { 0, 0, 0, 0 }, // SCENE_UNSET_F - { 0, 0, 0, 0 }, // SCENE_OMOYA - { 0, 0, 0, 0 }, // SCENE_BOWLING - { 0, 0, 0, 0 }, // SCENE_SONCHONOIE - { 0x100000, 0, 0, 0x40000002 }, // SCENE_IKANA - { 0, 0, 0, 0 }, // SCENE_KAIZOKU - { 0, 0, 0, 0 }, // SCENE_MILK_BAR - { 0x4000000, 0, 0, 0 }, // SCENE_INISIE_N - { 2, 0, 0, 0 }, // SCENE_TAKARAYA - { 0x4000000, 0, 0, 0 }, // SCENE_INISIE_R - { 0, 0, 0, 0 }, // SCENE_OKUJOU - { 0xF, 0, 0, 0 }, // SCENE_OPENINGDAN - { 0x70B000, 0, 0, 0 }, // SCENE_MITURIN - { 0, 0, 0, 0 }, // SCENE_13HUBUKINOMITI - { 0, 0x80000000, 0, 0x400 }, // SCENE_CASTLE - { 0, 0, 0, 0 }, // SCENE_DEKUTES - { 0, 0, 0, 0x80000000 }, // SCENE_MITURIN_BS - { 0, 0, 0, 0 }, // SCENE_SYATEKI_MIZU - { 0x1A00020, 0, 0, 0 }, // SCENE_HAKUGIN - { 0x400, 0, 0, 0 }, // SCENE_ROMANYMAE - { 0, 0, 0, 0x1000 }, // SCENE_PIRATE - { 0, 0, 0, 0 }, // SCENE_SYATEKI_MORI - { 0, 0, 0, 2 }, // SCENE_SINKAI - { 0x400, 0, 0, 0 }, // SCENE_YOUSEI_IZUMI - { 0, 0, 0, 0 }, // SCENE_KINSTA1 - { 0, 0, 0, 0x80000000 }, // SCENE_KINDAN2 - { 0, 0, 0, 0 }, // SCENE_TENMON_DAI - { 0, 0, 0, 2 }, // SCENE_LAST_DEKU - { 0, 0, 0, 0x40000000 }, // SCENE_22DEKUCITY - { 0, 0, 0, 0 }, // SCENE_KAJIYA - { 0x10, 0, 0, 0 }, // SCENE_00KEIKOKU - { 3, 0, 0, 0 }, // SCENE_POSTHOUSE - { 0, 0, 0, 0 }, // SCENE_LABO - { 0, 0, 0, 0x80000000 }, // SCENE_DANPEI2TEST - { 0, 0, 0, 0 }, // SCENE_UNSET_31 - { 0, 0, 0, 0 }, // SCENE_16GORON_HOUSE - { 0, 0, 0, 0 }, // SCENE_33ZORACITY - { 0, 0, 0, 0 }, // SCENE_8ITEMSHOP - { 0, 0, 0, 0 }, // SCENE_F01 - { 0, 0, 0, 0x80000000 }, // SCENE_INISIE_BS - { 0x100400, 0, 0, 0x22 }, // SCENE_30GYOSON - { 0x400, 0, 0, 0x80 }, // SCENE_31MISAKI - { 0, 0, 0, 0 }, // SCENE_TAKARAKUJI - { 0, 0, 0, 0 }, // SCENE_UNSET_3A - { 0x400, 0, 0, 0 }, // SCENE_TORIDE - { 0, 0, 0, 0 }, // SCENE_FISHERMAN - { 0, 0, 0, 0 }, // SCENE_GORONSHOP - { 0, 0, 0, 0 }, // SCENE_DEKU_KING - { 0, 0, 0, 2 }, // SCENE_LAST_GORON - { 0, 0, 0, 0x80000002 }, // SCENE_24KEMONOMITI - { 0, 0, 0, 0 }, // SCENE_F01_B - { 0, 0, 0, 0 }, // SCENE_F01C - { 0, 0, 0, 0 }, // SCENE_BOTI - { 0, 0, 0, 0x80000000 }, // SCENE_HAKUGIN_BS - { 0xC00, 0, 0, 0x40000000 }, // SCENE_20SICHITAI - { 0x102, 0, 0, 0x400 }, // SCENE_21MITURINMAE - { 0, 0, 0, 2 }, // SCENE_LAST_ZORA - { 0, 0, 0, 0x40000000 }, // SCENE_11GORONNOSATO2 - { 0x70, 0, 0, 0 }, // SCENE_SEA - { 0, 0, 0, 0 }, // SCENE_35TAKI - { 0, 0, 0, 0 }, // SCENE_REDEAD - { 0, 0, 0, 0x40000000 }, // SCENE_BANDROOM - { 0, 0, 0, 0x40000000 }, // SCENE_11GORONNOSATO - { 0, 0, 0, 0 }, // SCENE_GORON_HAKA - { 0, 0, 0, 0 }, // SCENE_SECOM - { 0x100000, 0, 0, 0x80000000 }, // SCENE_10YUKIYAMANOMURA - { 0, 0, 0, 0 }, // SCENE_TOUGITES - { 0, 0, 0, 0 }, // SCENE_DANPEI - { 0, 0, 0, 0 }, // SCENE_IKANAMAE - { 0, 0, 0, 0 }, // SCENE_DOUJOU - { 0, 0, 0, 0 }, // SCENE_MUSICHOUSE - { 0, 0, 0, 0 }, // SCENE_IKNINSIDE - { 0, 0, 0, 0 }, // SCENE_MAP_SHOP - { 0x400, 0, 0, 0 }, // SCENE_F40 - { 0x400, 0, 0, 0 }, // SCENE_F41 - { 0x100000, 0, 0, 0x80000000 }, // SCENE_10YUKIYAMANOMURA2 - { 0, 0, 0, 0x100 }, // SCENE_14YUKIDAMANOMITI - { 0x400, 0, 0, 0 }, // SCENE_12HAKUGINMAE - { 0, 0, 0, 0x80 }, // SCENE_17SETUGEN - { 0, 0, 0, 0x80 }, // SCENE_17SETUGEN2 - { 0, 0, 0, 0x80000000 }, // SCENE_SEA_BS - { 0, 0, 0, 0x400 }, // SCENE_RANDOM - { 0, 0, 0, 0 }, // SCENE_YADOYA - { 0, 0, 0, 0 }, // SCENE_KONPEKI_ENT - { 1, 0, 0, 0 }, // SCENE_INSIDETOWER - { 0, 0, 0, 0 }, // SCENE_26SARUNOMORI - { 0, 0, 0, 0 }, // SCENE_LOST_WOODS - { 0, 0, 0, 2 }, // SCENE_LAST_LINK - { 0, 0, 0, 0 }, // SCENE_SOUGEN - { 0, 0, 0, 0 }, // SCENE_BOMYA - { 0, 0, 0, 0 }, // SCENE_KYOJINNOMA - { 0, 0, 0, 0 }, // SCENE_KOEPONARACE - { 0, 0, 0, 0 }, // SCENE_GORONRACE - { 1, 0, 0, 0 }, // SCENE_TOWN - { 0, 0, 0, 0 }, // SCENE_ICHIBA - { 0, 0, 0, 0x400 }, // SCENE_BACKTOWN - { 0x100000, 0, 0, 0x400 }, // SCENE_CLOCKTOWER - { 0, 0, 1, 0 }, // SCENE_ALLEY +typedef struct PersistentCycleFlags { + /* 0x0 */ u32 switch0; + /* 0x4 */ u32 switch1; + /* 0x8 */ u32 chest; + /* 0xC */ u32 collectible; +} PersistentCycleFlags; // size = 0x10 + +#define PERSISTENT_CYCLE_FLAGS_SET(switch0, switch1, chest, collectible) { switch0, switch1, chest, collectible }, +#define PERSISTENT_CYCLE_FLAGS_NONE PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 0) + +#define DEFINE_SCENE(_name, _enumValue, _textId, _drawConfig, _restrictionFlags, persistentCycleFlags) \ + persistentCycleFlags +#define DEFINE_SCENE_UNSET(_enumValue) PERSISTENT_CYCLE_FLAGS_NONE + +/** + * Array of bitwise flags which won't be turned off on a cycle reset (will persist between cycles) + */ +PersistentCycleFlags sPersistentCycleFlags[SCENE_MAX] = { +#include "tables/scene_table.h" }; +#undef DEFINE_SCENE +#undef DEFINE_SCENE_UNSET + // TODO: figure out a way to use the WEEKEVENTREG defines here // weekEventReg flags which will be not be cleared on a cycle reset u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { @@ -350,18 +252,21 @@ void Sram_SaveEndOfCycle(PlayState* play) { sceneId = Play_GetOriginalSceneId(play->sceneId); Play_SaveCycleSceneFlags(&play->state); - play->actorCtx.sceneFlags.chest &= D_801C5FC0[sceneId][2]; - play->actorCtx.sceneFlags.switches[0] &= D_801C5FC0[sceneId][0]; - play->actorCtx.sceneFlags.switches[1] &= D_801C5FC0[sceneId][1]; - play->actorCtx.sceneFlags.collectible[0] &= D_801C5FC0[sceneId][3]; + play->actorCtx.sceneFlags.chest &= sPersistentCycleFlags[sceneId].chest; + play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleFlags[sceneId].switch0; + play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleFlags[sceneId].switch1; + play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleFlags[sceneId].collectible; play->actorCtx.sceneFlags.clearedRoom = 0; for (i = 0; i < SCENE_MAX; i++) { - gSaveContext.cycleSceneFlags[i].switch0 = ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & D_801C5FC0[i][0]; - gSaveContext.cycleSceneFlags[i].switch1 = ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & D_801C5FC0[i][1]; - gSaveContext.cycleSceneFlags[i].chest = ((void)0, gSaveContext.cycleSceneFlags[i].chest) & D_801C5FC0[i][2]; + gSaveContext.cycleSceneFlags[i].switch0 = + ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleFlags[i].switch0; + gSaveContext.cycleSceneFlags[i].switch1 = + ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleFlags[i].switch1; + gSaveContext.cycleSceneFlags[i].chest = + ((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleFlags[i].chest; gSaveContext.cycleSceneFlags[i].collectible = - ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & D_801C5FC0[i][3]; + ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleFlags[i].collectible; gSaveContext.cycleSceneFlags[i].clearedRoom = 0; gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0; gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0; diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index 3ed33f45d..cd4420c4a 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c index c7fa3d69e..bcc662c9f 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c @@ -4,6 +4,7 @@ * Description: Goron Link Switch */ +#include "prevent_bss_reordering.h" #include "z_bg_hakugin_switch.h" #include "z64rumble.h" #include "objects/object_goronswitch/object_goronswitch.h" diff --git a/src/overlays/actors/ovl_Boss_06/z_boss_06.c b/src/overlays/actors/ovl_Boss_06/z_boss_06.c index aa6291aae..aa2929f28 100644 --- a/src/overlays/actors/ovl_Boss_06/z_boss_06.c +++ b/src/overlays/actors/ovl_Boss_06/z_boss_06.c @@ -4,7 +4,6 @@ * Description: Igos du Ikana window - curtains and ray effects */ -#include "prevent_bss_reordering.h" #include "z_boss_06.h" #include "z64shrink_window.h" #include "overlays/actors/ovl_En_Knight/z_en_knight.h" diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index ef15c27a9..010106fe5 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -3,7 +3,7 @@ * Overlay: ovl_En_Fishing * Description: Fishing Pond Elements (Owner, Fish, Props, Effects...) */ -#include "prevent_bss_reordering.h" + #include "z_en_fishing.h" #include "z64rumble.h" #include "z64shrink_window.h" diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index f400d157f..5d7a5fd5b 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -4,7 +4,6 @@ * Description: Keaton grass */ -#include "prevent_bss_reordering.h" #include "z_en_kusa2.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/actors/ovl_En_Test7/z_en_test7.c b/src/overlays/actors/ovl_En_Test7/z_en_test7.c index fa378ec68..2606331e2 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -4,6 +4,7 @@ * Description: Soaring effects (wings, sphere, etc) */ +#include "prevent_bss_reordering.h" #include "z_en_test7.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 53b35efa0..6f08583ac 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1935,7 +1935,7 @@ 0x801C5EB0:("D_801C5EB0","UNK_TYPE4","",0x4), 0x801C5EC4:("D_801C5EC4","UNK_TYPE2","",0x2), 0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4), - 0x801C5FC0:("D_801C5FC0","u32","[452]",0x710), + 0x801C5FC0:("sPersistentCycleFlags","u32","[452]",0x710), 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2), 0x801C6798:("D_801C6798","UNK_TYPE4","",0x4), 0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1), From 51cd9df591322c4541ca9697a4ce4a6acde1fad6 Mon Sep 17 00:00:00 2001 From: louist103 <35883445+louist103@users.noreply.github.com> Date: Mon, 29 May 2023 20:39:14 -0400 Subject: [PATCH 13/36] sys_flashrom matched (#1251) * done * WIP * Fix the rebase * fix build * re match * Last thing before the PR * PR fixes * PR Fixes (tharo) * fix * format * PR fixes (hensldm) * oops * MAGIC * Fix BSS and rename FLASH_MAGIC * PR Fixes (Engineer) * remove from functions.h --- include/functions.h | 22 +-- include/z64.h | 29 +++- spec | 1 - src/code/sys_flashrom.c | 257 ++++++++++++++++++++++++++++++--- src/code/title_setup.c | 2 +- src/code/z_sram_NES.c | 81 ++++++----- tools/disasm/functions.txt | 26 ++-- tools/disasm/variables.txt | 10 +- tools/sizes/code_functions.csv | 25 ++-- 9 files changed, 336 insertions(+), 117 deletions(-) diff --git a/include/functions.h b/include/functions.h index 8330903e1..530cedd86 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2222,21 +2222,13 @@ void func_8018450C(PlayState* play, SkeletonInfo* skeleton, Mtx* mtx, OverrideKe // void func_801853C8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80185460(void); -// void func_801857C0(void); -// char* func_801857D0(void); -// void func_80185864(void); -u32 func_80185908(void); -UNK_TYPE func_80185968(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2); -// void func_801859F0(void); -// void func_80185A2C(void); -// void func_80185B1C(void); -// void func_80185BE4(void); -// void func_80185C24(void); -void SysFlashrom_ThreadEntry(s80185D40* param_1); -void func_80185DDC(u8* arg0, u32 arg1, u32 arg2); -s32 func_80185EC4(void); -s32 func_80185F04(void); -void func_80185F64(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2); +s32 SysFlashrom_InitFlash(void); +s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount); +void SysFlashrom_WriteDataAsync(u8* addr, u32 pageNum, u32 pageCount); +s32 SysFlashrom_IsBusy(void); +s32 SysFlashrom_AwaitResult(void); +void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount); + s32 func_80185F90(u32 param_1); u32 osFlashGetAddr(u32 pageNum); OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); diff --git a/include/z64.h b/include/z64.h index bbcb860e5..b5597f58c 100644 --- a/include/z64.h +++ b/include/z64.h @@ -68,6 +68,7 @@ #define Z_THREAD_ID_MAIN 3 #define Z_THREAD_ID_GRAPH 4 #define Z_THREAD_ID_SCHED 5 +#define Z_THREAD_ID_FLASHROM 13 #define Z_THREAD_ID_DMAMGR 18 #define Z_THREAD_ID_IRQMGR 19 @@ -76,6 +77,7 @@ #define Z_PRIORITY_AUDIOMGR 11 #define Z_PRIORITY_IDLE 12 #define Z_PRIORITY_MAIN 12 +#define Z_PRIORITY_FLASHROM 13 #define Z_PRIORITY_PADMGR 15 #define Z_PRIORITY_SCHED 16 #define Z_PRIORITY_DMAMGR 17 @@ -118,13 +120,13 @@ typedef struct { } NmiBuff; // size >= 0x18 typedef struct { - /* 0x00 */ int unk0; - /* 0x04 */ void* unk4; - /* 0x08 */ int unk8; - /* 0x0C */ int unkC; - /* 0x10 */ int unk10; - /* 0x14 */ OSMesgQueue unk14; -} s80185D40; // size = 0x2C + /* 0x00 */ s32 requestType; + /* 0x04 */ OSMesg response; + /* 0x08 */ void* addr; + /* 0x0C */ s32 pageNum; + /* 0x10 */ s32 pageCount; + /* 0x14 */ OSMesgQueue messageQueue; +} FlashromRequest; // size = 0x2C // End of RDRAM without the Expansion Pak installed #define NORMAL_RDRAM_END 0x80400000 @@ -642,6 +644,19 @@ typedef struct { #define FRAM_STATUS_REGISTER FRAM_BASE_ADDRESS // FRAM Base Address in Cart Memory #define FRAM_COMMAND_REGISTER 0x10000 // Located at 0x08010000 on the Cart +#define FLASH_VERSION_MX_PROTO_A 0x00C20000 +#define FLASH_VERSION_MX_A 0x00C20001 +#define FLASH_VERSION_MX_C 0x00C2001E +#define FLASH_VERSION_MX_B_AND_D 0x00C2001D +#define FLASH_VERSION_MEI 0x003200F1 + +#define FLASH_TYPE_MAGIC 0x11118001 + +#define FLASH_PAGE_SIZE 128 + +#define FLASHROM_REQUEST_WRITE 1 +#define FLASHROM_REQUEST_READ 2 + enum fram_command { /* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS Initializes fram to 0xFF in FRAM_MODE_ERASE diff --git a/spec b/spec index 5fe02e11f..c7c67d830 100644 --- a/spec +++ b/spec @@ -588,7 +588,6 @@ beginseg include "build/src/code/c_keyframe.o" include "build/src/code/sys_slowly.o" include "build/src/code/sys_flashrom.o" - include "build/data/code/sys_flashrom.bss.o" include "build/asm/code/code_80185F90.text.o" // handwritten include "build/src/libultra/flash/osFlash.o" pad_text diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index 0db0b8744..c2665741e 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -1,44 +1,253 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" #include "system_malloc.h" -// extern UNK_TYPE1 D_801FBE10; -// extern UNK_TYPE1 D_801FBE28; -// extern UNK_TYPE1 D_801FBE2C; -// extern UNK_TYPE4 D_801FBE30; -extern STACK(sSysFlashromStack, 0x1000); -extern StackEntry sSysFlashromStackInfo; -extern OSThread sSysFlashromThread; -extern s80185D40 D_801FD008; -extern OSMesg D_801FD034[1]; +OSMesgQueue sFlashromMesgQueue; +OSMesg sFlashromMesg[1]; +s32 sFlashromIsInit; +s32 sFlashromVendor; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857C0.s") +STACK(sSysFlashromStack, 0x1000); +StackEntry sSysFlashromStackInfo; +OSThread sSysFlashromThread; +FlashromRequest sFlashromRequest; +OSMesg sSysFlashromMsgBuf[1]; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857D0.s") +s32 SysFlashrom_IsInit(void) { + return sFlashromIsInit; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185864.s") +const char* SysFlashrom_GetVendorStr(void) { + switch (sFlashromVendor) { + case FLASH_VERSION_MX_PROTO_A: + return "PROTO A"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185908.s") + case FLASH_VERSION_MX_A: + return "A"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185968.s") + case FLASH_VERSION_MX_C: + return "C"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801859F0.s") + case FLASH_VERSION_MEI: + return "D(NEW)"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185A2C.s") + case FLASH_VERSION_MX_B_AND_D: + return "B or D"; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185B1C.s") + default: + return "UNKNOWN"; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185BE4.s") +s32 SysFlashrom_CheckFlashType(void) { + u32 flashType; + u32 flashVendor; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185C24.s") + if (!SysFlashrom_IsInit()) { + return -1; + } + osFlashReadId(&flashType, &flashVendor); + sFlashromVendor = flashVendor; + if (flashType == FLASH_TYPE_MAGIC) { + if ((flashVendor == FLASH_VERSION_MX_PROTO_A) || (flashVendor == FLASH_VERSION_MX_A) || + (flashVendor == FLASH_VERSION_MX_C) || (flashVendor == FLASH_VERSION_MEI) || + (flashVendor == FLASH_VERSION_MX_B_AND_D)) { + return 0; + } else { + return -1; + } + } + return -1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/SysFlashrom_ThreadEntry.s") +s32 SysFlashrom_InitFlash(void) { + osCreateMesgQueue(&sFlashromMesgQueue, sFlashromMesg, ARRAY_COUNT(sFlashromMesg)); + osFlashInit(); + sFlashromIsInit = true; + if (SysFlashrom_CheckFlashType() != 0) { + sFlashromIsInit = false; + return -1; + } + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185DDC.s") +s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) { + OSIoMesg msg; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185EC4.s") + if (!SysFlashrom_IsInit()) { + return -1; + } + osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE); + osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue); + osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); + return 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185F04.s") +s32 SysFlashrom_EraseSector(u32 page) { + if (!SysFlashrom_IsInit()) { + return -1; + } + return osFlashSectorErase(page); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_80185F64.s") +s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) { + OSIoMesg msg; + s32 result; + u32 i; + + if (!SysFlashrom_IsInit()) { + return -1; + } + // Ensure the page is always aligned to a sector boundary. + if ((pageNum % FLASH_PAGE_SIZE) != 0) { + Fault_AddHungupAndCrash("../sys_flashrom.c", 275); + } + osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + for (i = 0; i < pageCount; i++) { + osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue); + osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK); + result = osFlashWriteArray(i + pageNum); + if (result != 0) { + return result; + } + } + return 0; +} + +s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) { + s32 result; + s32 i; + + if (!SysFlashrom_IsInit()) { + return -1; + } + osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE); + i = 0; +failRetry: + result = SysFlashrom_EraseSector(pageNum); + if (result != 0) { + if (i < 3) { + i++; + goto failRetry; + } + return result; + } + result = SysFlashrom_ExecWrite(addr, pageNum, pageCount); + if (result != 0) { + if (i < 3) { + i++; + goto failRetry; + } + return result; + } + return 0; +} + +// Flash bits can only by flipped with a write from 1 -> 0. Going from 0 -> 1 requires an erasure. +// This function will try to determine if any sectors need to be erased before writing saving erase cycles. +s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) { + u32 size; + u32 i; + + for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) { + if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) { + return false; + } + } + return true; +} + +s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) { + void* data; + size_t size; + s32 ret; + + if (!SysFlashrom_IsInit()) { + return -1; + } + size = pageCount * FLASH_PAGE_SIZE; + data = SystemArena_Malloc(size); + if (data == NULL) { + ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); + } else { + SysFlashrom_ReadData(data, pageNum, pageCount); + if (bcmp(data, addr, size) == 0) { + ret = 0; + } else { + // Will always erase the sector even if it wouldn't normally need to. + if (SysFlashrom_NeedsToErase(data, addr, pageCount)) { + ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); + } else { + ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount); + } + if (ret == 0) { + SysFlashrom_ReadData(data, pageNum, pageCount); + if (bcmp(data, addr, size) == 0) { + ret = 0; + } else { + ret = -1; + } + } + } + SystemArena_Free(data); + } + return ret; +} + +void SysFlashrom_ThreadEntry(void* arg) { + FlashromRequest* req = (FlashromRequest*)arg; + + switch (req->requestType) { + case FLASHROM_REQUEST_WRITE: + req->response = SysFlashrom_WriteData(req->addr, req->pageNum, req->pageCount); + osSendMesg(&req->messageQueue, req->response, OS_MESG_BLOCK); + break; + + case FLASHROM_REQUEST_READ: + req->response = SysFlashrom_ReadData(req->addr, req->pageNum, req->pageCount); + osSendMesg(&req->messageQueue, req->response, OS_MESG_BLOCK); + break; + } +} + +void SysFlashrom_WriteDataAsync(u8* addr, u32 pageNum, u32 pageCount) { + FlashromRequest* req = &sFlashromRequest; + if (SysFlashrom_IsInit()) { + req->requestType = FLASHROM_REQUEST_WRITE; + req->addr = addr; + req->pageNum = pageNum; + req->pageCount = pageCount; + osCreateMesgQueue(&req->messageQueue, sSysFlashromMsgBuf, ARRAY_COUNT(sSysFlashromMsgBuf)); + StackCheck_Init(&sSysFlashromStackInfo, sSysFlashromStack, STACK_TOP(sSysFlashromStack), 0, 0x100, + "sys_flashrom"); + osCreateThread(&sSysFlashromThread, Z_THREAD_ID_FLASHROM, SysFlashrom_ThreadEntry, req, + STACK_TOP(sSysFlashromStack), Z_PRIORITY_FLASHROM); + osStartThread(&sSysFlashromThread); + } +} + +s32 SysFlashrom_IsBusy(void) { + OSMesgQueue* queue = &sFlashromRequest.messageQueue; + + if (!SysFlashrom_IsInit()) { + return -1; + } + return MQ_IS_FULL(queue); +} + +s32 SysFlashrom_AwaitResult(void) { + if (!SysFlashrom_IsInit()) { + return -1; + } + osRecvMesg(&sFlashromRequest.messageQueue, NULL, OS_MESG_BLOCK); + osDestroyThread(&sSysFlashromThread); + StackCheck_Cleanup(&sSysFlashromStackInfo); + return sFlashromRequest.response; +} + +void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount) { + SysFlashrom_WriteDataAsync(addr, pageNum, pageCount); + SysFlashrom_AwaitResult(); +} diff --git a/src/code/title_setup.c b/src/code/title_setup.c index 4e9293ce7..841c301e2 100644 --- a/src/code/title_setup.c +++ b/src/code/title_setup.c @@ -48,7 +48,7 @@ void Setup_SetRegs(void) { } void Setup_InitImpl(SetupState* this) { - func_80185908(); + SysFlashrom_InitFlash(); SaveContext_Init(); Setup_SetRegs(); diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 6556adfa7..cfd230569 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -850,15 +850,15 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - if (func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]) != - 0) { - func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], + D_801C67F0[gSaveContext.fileNum * 2]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], + D_801C67F0[gSaveContext.fileNum * 2 + 1]); } Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], + D_801C67F0[gSaveContext.fileNum * 2 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } gSaveContext.save.cutsceneIndex = cutsceneIndex; @@ -910,27 +910,27 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); if (gSaveContext.fileNum == 0xFF) { - func_80185968(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]); } else if (fileSelect->unk_2446A[gSaveContext.fileNum] != 0) { phi_t1 = gSaveContext.fileNum + 2; phi_t1 *= 2; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); } } else { phi_t1 = gSaveContext.fileNum; phi_t1 *= 2; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); } } Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); } } @@ -1090,9 +1090,9 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { phi_s2 = false; sp6E = 0; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) { sp6E = 1; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2 = true; } } @@ -1115,7 +1115,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {} phi_s2 = false; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2 = true; } @@ -1171,7 +1171,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); } else if (sp6E == 0) { // TODO: == 0? temp_s2 = gSaveContext.save.saveInfo.checksum; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2_3 = 1; } else { Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); @@ -1182,7 +1182,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); @@ -1210,7 +1210,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { phi_s2 = false; } - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2 = true; } @@ -1267,7 +1267,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); } else if (!sp6E) { // TODO: == 0? temp_s2 = gSaveContext.save.saveInfo.checksum; - if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2_3 = 1; } else { Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); @@ -1279,7 +1279,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) { - func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); @@ -1381,11 +1381,12 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { // clear buffer bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // read to buffer - func_80185968(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], D_801C67F0[fileSelect->unk_2448E * 2]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], + D_801C67F0[fileSelect->unk_2448E * 2]); if (1) {} - func_80185968(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1], - D_801C67F0[fileSelect->unk_2448E * 2 + 1]); + SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1], + D_801C67F0[fileSelect->unk_2448E * 2 + 1]); if (1) {} // copy buffer to save context @@ -1518,7 +1519,7 @@ void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; - func_80185F64(sramCtx->saveBuf, curPage, numPages); + SysFlashrom_WriteDataSync(sramCtx->saveBuf, curPage, numPages); } /** @@ -1531,7 +1532,8 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) { gSaveContext.save.isFirstCycle = true; gSaveContext.save.isOwlSave = false; func_80145698(sramCtx); - func_80185F64(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C6818[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], + D_801C6818[gSaveContext.fileNum * 2]); } /** @@ -1552,7 +1554,8 @@ void Sram_SaveSpecialNewDay(PlayState* play) { gSaveContext.save.day = day; gSaveContext.save.time = time; gSaveContext.save.cutsceneIndex = cutsceneIndex; - func_80185F64(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], D_801C67F0[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], + D_801C67F0[gSaveContext.fileNum * 2]); } void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) { @@ -1563,7 +1566,7 @@ void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) { void func_80147020(SramContext* sramCtx) { // async flash write - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); sramCtx->unk_18 = osGetTime(); sramCtx->status = 2; @@ -1571,8 +1574,8 @@ void func_80147020(SramContext* sramCtx) { void func_80147068(SramContext* sramCtx) { if (sramCtx->status == 2) { - if (func_80185EC4() != 0) { // if task running - if (func_80185F04() == 0) { // wait for task done + if (SysFlashrom_IsBusy() != 0) { // if task running + if (SysFlashrom_AwaitResult() == 0) { // wait for task done // task success sramCtx->status = 4; } else { @@ -1592,7 +1595,7 @@ void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages) { } void func_80147150(SramContext* sramCtx) { - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); sramCtx->unk_18 = osGetTime(); sramCtx->status = 7; @@ -1600,18 +1603,18 @@ void func_80147150(SramContext* sramCtx) { void func_80147198(SramContext* sramCtx) { if (sramCtx->status == 7) { - if (func_80185EC4() != 0) { // Is task running - if (func_80185F04() == 0) { // Wait for task done - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); + if (SysFlashrom_IsBusy() != 0) { // Is task running + if (SysFlashrom_AwaitResult() == 0) { // Wait for task done + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); sramCtx->status = 8; } else { - func_80185DDC(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); + SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage + 0x80, sramCtx->numPages); sramCtx->status = 8; } } } else if (sramCtx->status == 8) { - if (func_80185EC4() != 0) { // Is task running - if (func_80185F04() == 0) { // Wait for task done + if (SysFlashrom_IsBusy() != 0) { // Is task running + if (SysFlashrom_AwaitResult() == 0) { // Wait for task done sramCtx->status = 4; } else { sramCtx->status = 4; @@ -1623,7 +1626,7 @@ void func_80147198(SramContext* sramCtx) { gSaveContext.save.isOwlSave = false; gSaveContext.save.saveInfo.checksum = 0; // flash read to buffer then copy to save context - func_80185968(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); + SysFlashrom_ReadData(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum)); } } @@ -1664,9 +1667,9 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // Read save file - if (func_80185968(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) { // If failed, read backup save file - func_80185968(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]); } // Copy buffer to save context diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index b1d42739b..fa886e81c 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -3447,21 +3447,21 @@ 0x801856FC:("Slowly_ThreadEntry",), 0x8018571C:("Slowly_Init",), 0x801857A0:("Slowly_Destroy",), - 0x801857C0:("func_801857C0",), - 0x801857D0:("func_801857D0",), - 0x80185864:("func_80185864",), - 0x80185908:("func_80185908",), - 0x80185968:("func_80185968",), - 0x801859F0:("func_801859F0",), - 0x80185A2C:("func_80185A2C",), - 0x80185B1C:("func_80185B1C",), - 0x80185BE4:("func_80185BE4",), + 0x801857C0:("SysFlashrom_IsInit",), + 0x801857D0:("SysFlashrom_GetVendorStr",), + 0x80185864:("SysFlashrom_CheckFlashType",), + 0x80185908:("SysFlashrom_InitFlash",), + 0x80185968:("SysFlashrom_ReadData",), + 0x801859F0:("SysFlashrom_EraseSector",), + 0x80185A2C:("SysFlashrom_ExecWrite",), + 0x80185B1C:("SysFlashrom_AttemptWrite",), + 0x80185BE4:("SysFlashrom_NeedsToErase",), 0x80185C24:("func_80185C24",), 0x80185D40:("SysFlashrom_ThreadEntry",), - 0x80185DDC:("func_80185DDC",), - 0x80185EC4:("func_80185EC4",), - 0x80185F04:("func_80185F04",), - 0x80185F64:("func_80185F64",), + 0x80185DDC:("SysFlashrom_WriteDataAsync",), + 0x80185EC4:("SysFlashrom_IsBusy",), + 0x80185F04:("SysFlashrom_AwaitResult",), + 0x80185F64:("SysFlashrom_WriteDataSync",), 0x80185F90:("func_80185F90",), 0x80186A70:("osFlashGetAddr",), 0x80186AB8:("osFlashReInit",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6f08583ac..15bebeffd 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4193,14 +4193,14 @@ 0x801FBDE8:("D_801FBDE8","Vec3f","",0xc), 0x801FBE00:("sMatrixStack","MtxF*","",0x4), 0x801FBE04:("sCurrentMatrix","MtxF*","",0x4), - 0x801FBE10:("D_801FBE10","UNK_TYPE1","",0x1), - 0x801FBE28:("D_801FBE28","UNK_TYPE1","",0x1), - 0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1), - 0x801FBE30:("D_801FBE30","UNK_TYPE4","",0x4), + 0x801FBE10:("sFlashromMesgQueue","UNK_TYPE1","",0x1), + 0x801FBE28:("sFlashromMesg","UNK_TYPE1","",0x1), + 0x801FBE2C:("sFlashromIsInit","UNK_TYPE1","",0x1), + 0x801FBE30:("sFlashromVendor","UNK_TYPE4","",0x4), 0x801FBE38:("sSysFlashromStack","u8","[4096]",0x1000), 0x801FCE38:("sSysFlashromStackInfo","StackEntry","",0x1c), 0x801FCE58:("sSysFlashromThread","OSThread","",0x1b0), - 0x801FD008:("D_801FD008","s80185D40","",0x2c), + 0x801FD008:("sFlashromRequest","s80185D40","",0x2c), 0x801FD034:("D_801FD034","OSMesg","",0x4), 0x801FD040:("D_801FD040","s32","",0x10), 0x801FD050:("D_801FD050","OSIoMesg","",0x18), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 34318dc27..419a7a4be 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2962,20 +2962,21 @@ asm/non_matchings/code/sys_slowly/Slowly_ThreadEntry.s,Slowly_ThreadEntry,0x8018 asm/non_matchings/code/sys_slowly/Slowly_Init.s,Slowly_Init,0x8018571C,0x21 asm/non_matchings/code/sys_slowly/Slowly_Destroy.s,Slowly_Destroy,0x801857A0,0x8 asm/non_matchings/code/sys_flashrom/func_801857C0.s,func_801857C0,0x801857C0,0x4 -asm/non_matchings/code/sys_flashrom/func_801857D0.s,func_801857D0,0x801857D0,0x25 -asm/non_matchings/code/sys_flashrom/func_80185864.s,func_80185864,0x80185864,0x29 -asm/non_matchings/code/sys_flashrom/func_80185908.s,func_80185908,0x80185908,0x18 -asm/non_matchings/code/sys_flashrom/func_80185968.s,func_80185968,0x80185968,0x22 -asm/non_matchings/code/sys_flashrom/func_801859F0.s,func_801859F0,0x801859F0,0xF -asm/non_matchings/code/sys_flashrom/func_80185A2C.s,func_80185A2C,0x80185A2C,0x3C -asm/non_matchings/code/sys_flashrom/func_80185B1C.s,func_80185B1C,0x80185B1C,0x32 -asm/non_matchings/code/sys_flashrom/func_80185BE4.s,func_80185BE4,0x80185BE4,0x10 +asm/non_matchings/code/sys_flashrom/SysFlashrom_IsInit.s,SysFlashrom_IsInit,0x801857C0,0x4 +asm/non_matchings/code/sys_flashrom/SysFlashrom_GetVendorStr.s,SysFlashrom_GetVendorStr,0x801857D0,0x25 +asm/non_matchings/code/sys_flashrom/SysFlashrom_CheckFlashType.s,SysFlashrom_CheckFlashType,0x80185864,0x29 +asm/non_matchings/code/sys_flashrom/SysFlashrom_InitFlash.s,SysFlashrom_InitFlash,0x80185908,0x18 +asm/non_matchings/code/sys_flashrom/SysFlashrom_ReadData.s,SysFlashrom_ReadData,0x80185968,0x22 +asm/non_matchings/code/sys_flashrom/SysFlashrom_EraseSector.s,SysFlashrom_EraseSector,0x801859F0,0xF +asm/non_matchings/code/sys_flashrom/SysFlashrom_ExecWrite.s,SysFlashrom_ExecWrite,0x80185A2C,0x3C +asm/non_matchings/code/sys_flashrom/SysFlashrom_AttemptWrite.s,SysFlashrom_AttemptWrite,0x80185B1C,0x32 +asm/non_matchings/code/sys_flashrom/SysFlashrom_NeedsToErase.s,SysFlashrom_NeedsToErase,0x80185BE4,0x10 asm/non_matchings/code/sys_flashrom/func_80185C24.s,func_80185C24,0x80185C24,0x47 asm/non_matchings/code/sys_flashrom/SysFlashrom_ThreadEntry.s,SysFlashrom_ThreadEntry,0x80185D40,0x27 -asm/non_matchings/code/sys_flashrom/func_80185DDC.s,func_80185DDC,0x80185DDC,0x3A -asm/non_matchings/code/sys_flashrom/func_80185EC4.s,func_80185EC4,0x80185EC4,0x10 -asm/non_matchings/code/sys_flashrom/func_80185F04.s,func_80185F04,0x80185F04,0x18 -asm/non_matchings/code/sys_flashrom/func_80185F64.s,func_80185F64,0x80185F64,0xB +asm/non_matchings/code/sys_flashrom/SysFlashrom_WriteDataAsync.s,SysFlashrom_WriteDataAsync,0x80185DDC,0x3A +asm/non_matchings/code/sys_flashrom/SysFlashrom_IsBusy.s,SysFlashrom_IsBusy,0x80185EC4,0x10 +asm/non_matchings/code/sys_flashrom/SysFlashrom_AwaitResult.s,SysFlashrom_AwaitResult,0x80185F04,0x18 +asm/non_matchings/code/sys_flashrom/SysFlashrom_WriteDataSync.s,SysFlashrom_WriteDataSync,0x80185F64,0xB asm/non_matchings/code/code_80185F90/func_80185F90.s,func_80185F90,0x80185F90,0x26 asm/non_matchings/code/osFlash/func_80186A70.s,func_80186A70,0x80186A70,0x12 asm/non_matchings/code/osFlash/func_80186AB8.s,func_80186AB8,0x80186AB8,0x1C From f8ac9d2e9ae65027f8bbe45f5357c6e3adb1ebc4 Mon Sep 17 00:00:00 2001 From: louist103 <35883445+louist103@users.noreply.github.com> Date: Tue, 30 May 2023 00:07:04 -0400 Subject: [PATCH 14/36] fbdemo wipe 3 Matching (#1254) * OK * PR fixes * someone please add clang-format-11 to the AUR thanks * Add outname * Update z_fbdemo_wipe3.c * ARRAY_COUNTU --- assets/xml/overlays/ovl_fbdemo_wipe3.xml | 13 ++ spec | 3 +- .../fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c | 168 +++++++++++++++--- .../fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h | 17 +- tools/disasm/functions.txt | 2 +- tools/disasm/variables.txt | 17 +- 6 files changed, 185 insertions(+), 35 deletions(-) create mode 100644 assets/xml/overlays/ovl_fbdemo_wipe3.xml diff --git a/assets/xml/overlays/ovl_fbdemo_wipe3.xml b/assets/xml/overlays/ovl_fbdemo_wipe3.xml new file mode 100644 index 000000000..fe4804689 --- /dev/null +++ b/assets/xml/overlays/ovl_fbdemo_wipe3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/spec b/spec index c7c67d830..51a80f17a 100644 --- a/spec +++ b/spec @@ -3195,8 +3195,7 @@ beginseg name "ovl_fbdemo_wipe3" compress include "build/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.o" - include "build/data/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.data.o" - include "build/data/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.reloc.o" + include "build/src/overlays/fbdemos/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3_reloc.o" endseg beginseg diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c index 759e1511c..03bc1e81d 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.c @@ -7,6 +7,8 @@ #include "global.h" #include "z_fbdemo_wipe3.h" +#define THIS ((TransitionWipe3*)thisx) + void* TransitionWipe3_Init(void* thisx); void TransitionWipe3_Destroy(void* thisx); void TransitionWipe3_Update(void* thisx, s32 updateRate); @@ -17,37 +19,159 @@ void TransitionWipe3_SetColor(void* thisx, u32 color); void TransitionWipe3_SetEnvColor(void* thisx, u32 color); s32 TransitionWipe3_IsDone(void* thisx); -#if 0 -TransitionInit TransitionWipe3_InitVars = { - TransitionWipe3_Init, - TransitionWipe3_Destroy, - TransitionWipe3_Update, - TransitionWipe3_Draw, - TransitionWipe3_Start, - TransitionWipe3_SetType, - TransitionWipe3_SetColor, - TransitionWipe3_SetEnvColor, - TransitionWipe3_IsDone, +#include "assets/overlays/ovl_fbdemo_wipe3/ovl_fbdemo_wipe3.c" + +TexturePtr sTransWipe3Textures[] = { + fbdemo_tex_000520, fbdemo_tex_000920, fbdemo_tex_000D20, fbdemo_tex_001120, + fbdemo_tex_001520, fbdemo_tex_000520, fbdemo_tex_000520, fbdemo_tex_000520, }; -#endif +TransitionInit TransitionWipe3_InitVars = { + TransitionWipe3_Init, TransitionWipe3_Destroy, TransitionWipe3_Update, + TransitionWipe3_Draw, TransitionWipe3_Start, TransitionWipe3_SetType, + TransitionWipe3_SetColor, TransitionWipe3_SetEnvColor, TransitionWipe3_IsDone, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Start.s") +#define TRANS3_GET_SPEED(type) (type & 1) +#define TRANS3_GET_TEX_INDEX(type) ((type >> 1) & 7) +#define TRANS3_GET_COLOR(type) ((type >> 4) & 3) -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Init.s") +typedef enum { + /* 0 */ TRANS_WIPE3_DIR_IN, + /* 1 */ TRANS_WIPE3_DIR_OUT +} TransitionWipe3Direction; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Destroy.s") +typedef enum { + /* 0 */ TRANS_WIPE3_SPEED_SLOW, + /* 1 */ TRANS_WIPE3_SPEED_FAST +} TransitionWipe3Speed; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/func_80AC68B4.s") +typedef enum { + /* 0 */ TRANS_WIPE3_COLOR_BLACK, + /* 1 */ TRANS_WIPE3_COLOR_WHITE, + /* 2 */ TRANS_WIPE3_COLOR_GRAY +} TransitionWipe3Color; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Update.s") +void TransitionWipe3_Start(void* thisx) { + TransitionWipe3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_Draw.s") + this->isDone = false; + this->curTexture = sTransWipe3Textures[this->texIndex % ARRAY_COUNTU(sTransWipe3Textures)]; + if (this->speedType == TRANS_WIPE3_SPEED_SLOW) { + this->wipeSpeed = 20; + } else { + this->wipeSpeed = 10; + } + if (this->colorType == TRANS_WIPE3_COLOR_BLACK) { + this->color.rgba = RGBA8(0, 0, 0, 255); + } else if (this->colorType == TRANS_WIPE3_COLOR_WHITE) { + this->color.rgba = RGBA8(255, 255, 255, 255); + } else { + this->color.rgba = RGBA8(160, 160, 160, 255); + } + if (this->dir != TRANS_WIPE3_DIR_IN) { + this->scrollY = 0; + } else { + this->scrollY = 500; + if (this->texIndex == 2) { + func_8019F128(NA_SE_OC_SECRET_WARP_OUT); + } + } + guPerspective(&this->projection, &this->normal, 60.0f, 4.0f / 3.0f, 10.0f, 12800.0f, 1.0f); + guLookAt(&this->lookAt, 0.0f, 0.0f, 400.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_IsDone.s") +void* TransitionWipe3_Init(void* thisx) { + TransitionWipe3* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetType.s") + bzero(this, sizeof(TransitionWipe3)); + return this; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetColor.s") +void TransitionWipe3_Destroy(void* thisx) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_fbdemo_wipe3/TransitionWipe3_SetEnvColor.s") +void TransitionWipe3_UpdateScrollY(void* thisx, f32 scroll) { + TransitionWipe3* this = THIS; + + this->scrollY = (s32)(500.0f * scroll); +} + +void TransitionWipe3_Update(void* thisx, s32 updateRate) { + TransitionWipe3* this = THIS; + + if (this->dir != TRANS_WIPE3_DIR_IN) { + if ((this->scrollY == 0) && (this->texIndex == 2)) { + func_8019F128(NA_SE_OC_SECRET_WARP_IN); + } + this->scrollY += (this->wipeSpeed * 3) / updateRate; + if (this->scrollY >= 500) { + this->scrollY = 500; + this->isDone = true; + } + } else { + this->scrollY -= (this->wipeSpeed * 3) / updateRate; + if (this->scrollY <= 0) { + this->scrollY = 0; + this->isDone = true; + } + } +} + +void TransitionWipe3_Draw(void* thisx, Gfx** gfxP) { + Gfx* gfx = *gfxP; + Mtx* modelView = &THIS->modelView[THIS->frame]; + f32 scale = 14.8f; + Gfx* texScroll; + + THIS->frame ^= 1; + gDPPipeSync(gfx++); + texScroll = Gfx_BranchTexScroll(&gfx, THIS->scrollX, THIS->scrollY, 16, 64); + gSPSegment(gfx++, 0x09, texScroll); + gSPSegment(gfx++, 0x08, THIS->curTexture); + gDPSetColor(gfx++, G_SETPRIMCOLOR, THIS->color.rgba); + gDPSetColor(gfx++, G_SETENVCOLOR, THIS->color.rgba); + gSPMatrix(gfx++, &THIS->projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPPerspNormalize(gfx++, THIS->normal); + gSPMatrix(gfx++, &THIS->lookAt, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + + if (scale != 1.0f) { + guScale(modelView, scale, scale, 1.0f); + gSPMatrix(gfx++, modelView, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } + gSPDisplayList(gfx++, sTransWipe3DL); + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +s32 TransitionWipe3_IsDone(void* thisx) { + TransitionWipe3* this = THIS; + + return this->isDone; +} + +void TransitionWipe3_SetType(void* thisx, s32 type) { + TransitionWipe3* this = THIS; + + if (type & TRANS_TYPE_SET_PARAMS) { + this->speedType = TRANS3_GET_SPEED(type); + this->texIndex = TRANS3_GET_TEX_INDEX(type); + this->colorType = TRANS3_GET_COLOR(type); + } else if (type == TRANS_INSTANCE_TYPE_FILL_OUT) { + this->dir = TRANS_WIPE3_DIR_OUT; + } else { + this->dir = TRANS_WIPE3_DIR_IN; + } +} + +void TransitionWipe3_SetColor(void* thisx, u32 color) { + TransitionWipe3* this = THIS; + + this->color.rgba = color; +} + +void TransitionWipe3_SetEnvColor(void* thisx, u32 color) { + TransitionWipe3* this = THIS; + + this->envColor.rgba = color; +} diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h index b023ecb8b..711f97952 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe3/z_fbdemo_wipe3.h @@ -5,7 +5,22 @@ #include "color.h" typedef struct { - /* 0x000 */ char unk_0[0x120]; + /* 0x000 */ Color_RGBA8_u32 color; + /* 0x008 */ Color_RGBA8_u32 envColor; + /* 0x004 */ u32 scrollX; + /* 0x00C */ s32 scrollY; + /* 0x010 */ s32 wipeSpeed; + /* 0x014 */ u8 dir; + /* 0x015 */ u8 colorType; + /* 0x016 */ u8 speedType; + /* 0x017 */ u8 texIndex; + /* 0x018 */ u8 isDone; + /* 0x019 */ u8 frame; + /* 0x01A */ u16 normal; + /* 0x01C */ TexturePtr curTexture; + /* 0x020 */ Mtx projection; + /* 0x060 */ Mtx lookAt; + /* 0x0A0 */ Mtx modelView[2]; } TransitionWipe3; // size = 0x120 #endif diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index fa886e81c..bb392b722 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -11971,7 +11971,7 @@ 0x80AC6740:("TransitionWipe3_Start",), 0x80AC687C:("TransitionWipe3_Init",), 0x80AC68A8:("TransitionWipe3_Destroy",), - 0x80AC68B4:("func_80AC68B4",), + 0x80AC68B4:("TransitionWipe3_UpdateScrollY",), 0x80AC68E0:("TransitionWipe3_Update",), 0x80AC69F8:("TransitionWipe3_Draw",), 0x80AC6BE4:("TransitionWipe3_IsDone",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 15bebeffd..83bf2c681 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -12850,15 +12850,14 @@ 0x80AC65B0:("D_80AC65B0","UNK_TYPE1","",0x1), 0x80AC66A8:("TransitionWipe1_InitVars","UNK_PTR","",0x4), 0x80AC66D0:("D_80AC66D0","f32","",0x4), - 0x80AC6C60:("D_80AC6C60","UNK_TYPE1","",0x1), - 0x80AC7060:("D_80AC7060","UNK_TYPE1","",0x1), - 0x80AC7460:("D_80AC7460","UNK_TYPE1","",0x1), - 0x80AC7860:("D_80AC7860","UNK_TYPE1","",0x1), - 0x80AC7C60:("D_80AC7C60","UNK_TYPE1","",0x1), - 0x80AC8060:("D_80AC8060","UNK_TYPE1","",0x1), - 0x80AC8250:("D_80AC8250","UNK_TYPE1","",0x1), - 0x80AC8280:("D_80AC8280","UNK_TYPE1","",0x1), - 0x80AC8350:("D_80AC8350","UNK_PTR","",0x4), + 0x80AC6C60:("fbdemo_tex_000520","UNK_TYPE1","",0x1), + 0x80AC7060:("fbdemo_tex_000920","UNK_TYPE1","",0x1), + 0x80AC7460:("fbdemo_tex_000D20","UNK_TYPE1","",0x1), + 0x80AC7860:("fbdemo_tex_001120","UNK_TYPE1","",0x1), + 0x80AC7C60:("fbdemo_tex_001520","UNK_TYPE1","",0x1), + 0x80AC8060:("sTransWipe3Vtx","UNK_TYPE1","",0x1), + 0x80AC8280:("sTransWipe3DL","UNK_TYPE1","",0x1), + 0x80AC8350:("sTransWipe3Textures","TexturePtr[]","8",0x4), 0x80AC8370:("TransitionWipe3_InitVars","UNK_PTR","",0x4), 0x80AC83A0:("D_80AC83A0","f32","",0x4), 0x80AC8650:("TransitionWipe4_InitVars","UNK_PTR","",0x4), From 72c4f378cb16f82a83c49eec22b4b8955827e694 Mon Sep 17 00:00:00 2001 From: Lucas Shaw <49287729+shawlucas@users.noreply.github.com> Date: Tue, 30 May 2023 21:01:08 -0400 Subject: [PATCH 15/36] ovl_Demo_Moonend ok (#1249) * Progress * one more * OK * update * finished z_demo_moonend * update reloc * actually updated reloc * fix symbols * made suggested changes * reformat * Made suggested changes * forgot to run format.py * made suggested changes * made suggested changes * moved cueid to be in scope --- assets/xml/objects/object_moonend.xml | 6 +- include/z64animation.h | 2 +- spec | 3 +- .../actors/ovl_Demo_Moonend/z_demo_moonend.c | 193 ++++++++++++++++-- .../actors/ovl_Demo_Moonend/z_demo_moonend.h | 9 +- undefined_syms.txt | 8 - 6 files changed, 191 insertions(+), 30 deletions(-) diff --git a/assets/xml/objects/object_moonend.xml b/assets/xml/objects/object_moonend.xml index e677f9c3f..666e9e07c 100644 --- a/assets/xml/objects/object_moonend.xml +++ b/assets/xml/objects/object_moonend.xml @@ -1,6 +1,7 @@  - + + @@ -19,7 +20,8 @@ - + + diff --git a/include/z64animation.h b/include/z64animation.h index 316dfe341..67c9d7641 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -304,7 +304,7 @@ typedef struct SkeletonInfo { typedef s32 (*OverrideKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList, u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos); -typedef void (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, +typedef s32 (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos); void SkelAnime_DrawLod(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor, s32 lod); diff --git a/spec b/spec index 51a80f17a..8ddf28c01 100644 --- a/spec +++ b/spec @@ -4852,8 +4852,7 @@ beginseg name "ovl_Demo_Moonend" compress include "build/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.o" - include "build/data/ovl_Demo_Moonend/ovl_Demo_Moonend.data.o" - include "build/data/ovl_Demo_Moonend/ovl_Demo_Moonend.reloc.o" + include "build/src/overlays/actors/ovl_Demo_Moonend/ovl_Demo_Moonend_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c index 76a4230f5..ba8d1b834 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c @@ -15,8 +15,12 @@ void DemoMoonend_Destroy(Actor* thisx, PlayState* play); void DemoMoonend_Update(Actor* thisx, PlayState* play); void DemoMoonend_Draw(Actor* thisx, PlayState* play); -#if 0 -ActorInit Demo_Moonend_InitVars = { +void DemoMoonend_DoNothing(DemoMoonend* this, PlayState* play); +void func_80C17B60(DemoMoonend* this, PlayState* play); +void func_80C17C48(DemoMoonend* this, PlayState* play); +void func_80C17FCC(Actor* thisx, PlayState* play); + +const ActorInit Demo_Moonend_InitVars = { ACTOR_DEMO_MOONEND, ACTORCAT_ITEMACTION, FLAGS, @@ -28,28 +32,185 @@ ActorInit Demo_Moonend_InitVars = { (ActorFunc)DemoMoonend_Draw, }; -#endif +void DemoMoonend_Init(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; -extern UNK_TYPE D_06001214; -extern UNK_TYPE D_0600B540; -extern UNK_TYPE D_060129F0; + Actor_SetScale(&this->actor, 0.1f); + this->actionFunc = DemoMoonend_DoNothing; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Init.s") + if (DEMOMOONEND_GET_PARAMS_F(thisx) == 1) { + Actor_SetScale(&this->actor, 0.05f); + Actor_SetScale(&this->actor, 6.0f); + this->actor.draw = NULL; + this->cueType = CS_CMD_ACTOR_CUE_558; + this->actionFunc = func_80C17B60; + } else { + Actor_SetScale(&this->actor, 0.095f); + func_80183430(&this->skeletonInfo, &object_moonend_Blob_00B5A0, &object_moonend_Blob_001214, this->jointTable, + this->morphTable, NULL); + func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214); + this->cueType = CS_CMD_ACTOR_CUE_560; + this->actionFunc = func_80C17C48; + this->actor.home.rot.z = 0; + this->actor.draw = NULL; + this->skeletonInfo.frameCtrl.unk_C = 2.0f / 3.0f; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Destroy.s") +void DemoMoonend_Destroy(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17B50.s") + if (DEMOMOONEND_GET_PARAMS_F(thisx) != 1) { + func_8018349C(&this->skeletonInfo); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17B60.s") +void DemoMoonend_DoNothing(DemoMoonend* this, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17C48.s") +void func_80C17B60(DemoMoonend* this, PlayState* play) { + if (Cutscene_IsCueInChannel(play, this->cueType)) { + u16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Update.s") + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { + case 1: + this->actor.draw = NULL; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17E70.s") + case 2: + this->actor.draw = func_80C17FCC; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17EE0.s") + default: + break; + } + } + if (this->cueId == 2) { + func_800B9010(&this->actor, NA_SE_EV_RAINBOW - SFX_FLAG); + } + } else { + this->actor.draw = NULL; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/DemoMoonend_Draw.s") +void func_80C17C48(DemoMoonend* this, PlayState* play) { + if (func_80183DE0(&this->skeletonInfo)) { + this->actor.home.rot.z = 0; + } + if (Cutscene_IsCueInChannel(play, this->cueType)) { + u16 cueId = play->csCtx.actorCues[Cutscene_GetCueChannel(play, this->cueType)]->id; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Demo_Moonend/func_80C17FCC.s") + Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetCueChannel(play, this->cueType)); + + if (this->cueId != cueId) { + this->cueId = cueId; + switch (this->cueId) { + case 1: + this->actor.draw = DemoMoonend_Draw; + func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214); + this->skeletonInfo.frameCtrl.unk_C = 0.0f; + break; + + case 2: + this->actor.draw = DemoMoonend_Draw; + func_801834A8(&this->skeletonInfo, &object_moonend_Blob_001214); + this->skeletonInfo.frameCtrl.unk_C = 2.0f / 3.0f; + Actor_PlaySfx(&this->actor, NA_SE_EV_MOON_EXPLOSION); + this->actor.home.rot.z = 1; + break; + + default: + break; + } + } + if (this->actor.home.rot.z != 0) { + func_800B9010(&this->actor, NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG); + } + } else { + this->actor.draw = NULL; + } + if ((play->csCtx.state != CS_STATE_IDLE) && (gSaveContext.sceneLayer == 8) && (play->csCtx.scriptIndex == 0)) { + switch (play->csCtx.curFrame) { + case 5: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM1); + break; + + case 50: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM2); + break; + + case 100: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM3); + break; + + case 150: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM2); + break; + + case 200: + Actor_PlaySfx(&this->actor, NA_SE_EN_MOON_SCREAM4); + break; + + default: + break; + } + } +} + +void DemoMoonend_Update(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; + + this->actionFunc(this, play); +} + +s32 func_80C17E70(PlayState* play, SkeletonInfo* skeletonInfo, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx, + Vec3f* scale, Vec3s* rot, Vec3f* pos) { + DemoMoonend* this = THIS; + + if (limbIndex == 2) { + Matrix_Push(); + Matrix_RotateYS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000, MTXMODE_APPLY); + } + + return true; +} + +s32 func_80C17EE0(PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, u8* flags, Actor* thisx, + Vec3f* scale, Vec3s* rot, Vec3f* pos) { + DemoMoonend* this = THIS; + + if (limbIndex == 8) { + Matrix_Pop(); + } + + return true; +} + +void DemoMoonend_Draw(Actor* thisx, PlayState* play) { + DemoMoonend* this = THIS; + Mtx* mtx; + + AnimatedMat_Draw(play, (AnimatedMaterial*)Lib_SegmentedToVirtual(object_moonend_Matanimheader_00B540)); + + mtx = GRAPH_ALLOC(play->state.gfxCtx, this->skeletonInfo.unk_18->unk_1 * sizeof(Mtx)); + + if (mtx != NULL) { + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + func_8018450C(play, &this->skeletonInfo, mtx, func_80C17E70, func_80C17EE0, &this->actor); + } +} + +void func_80C17FCC(Actor* thisx, PlayState* play) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_moonend_Matanimheader_0129F0)); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, object_moonend_DL_010C40); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h index d36dcb284..fd229e004 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h @@ -2,14 +2,21 @@ #define Z_DEMO_MOONEND_H #include "global.h" +#include "objects/object_moonend/object_moonend.h" struct DemoMoonend; typedef void (*DemoMoonendActionFunc)(struct DemoMoonend*, PlayState*); +#define DEMOMOONEND_GET_PARAMS_F(thisx) (((thisx)->params) & 0xF) + typedef struct DemoMoonend { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x19C]; + /* 0x144 */ SkeletonInfo skeletonInfo; + /* 0x174 */ Vec3s jointTable[30]; + /* 0x228 */ Vec3s morphTable[30]; + /* 0x2DC */ u16 cueType; + /* 0x2DE */ u16 cueId; /* 0x2E0 */ DemoMoonendActionFunc actionFunc; } DemoMoonend; // size = 0x2E4 diff --git a/undefined_syms.txt b/undefined_syms.txt index 336a6c4b4..a45e5c682 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -725,14 +725,6 @@ D_060134D0 = 0x060134D0; D_06013828 = 0x06013828; D_06014040 = 0x06014040; -// ovl_Demo_Moonend - -D_06001214 = 0x06001214; -D_0600B540 = 0x0600B540; -D_0600B5A0 = 0x0600B5A0; -D_06010C40 = 0x06010C40; -D_060129F0 = 0x060129F0; - // ovl_Dm_Tsg D_06002D30 = 0x06002D30; From b9f2411cd2cc492cbeb9f3674764fb873f4d8478 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 1 Jun 2023 05:02:37 +1000 Subject: [PATCH 16/36] match EnKanban_Update (#1263) --- spec | 4 - .../actors/ovl_En_Kanban/z_en_kanban.c | 327 +++++++++--------- 2 files changed, 162 insertions(+), 169 deletions(-) diff --git a/spec b/spec index 8ddf28c01..69d9bb5c8 100644 --- a/spec +++ b/spec @@ -1523,11 +1523,7 @@ beginseg name "ovl_En_Kanban" compress include "build/src/overlays/actors/ovl_En_Kanban/z_en_kanban.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_En_Kanban/ovl_En_Kanban_reloc.o" -#else - include "build/data/ovl_En_Kanban/ovl_En_Kanban.reloc.o" -#endif endseg beginseg diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index 804854f53..e1d9df24c 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -198,20 +198,16 @@ void func_80954BE8(EnKanban* this, PlayState* play) { } } -#ifdef NON_MATCHING -// Lots of branch likely stuff void EnKanban_Update(Actor* thisx, PlayState* play) { - // PlayState* play = play2; u8 bounced = false; - s32 pad; EnKanban* this = THIS; + s32 pad; + FloorType floorType; + f32 phi_f0; Player* player = GET_PLAYER(play); Vec3f offset; EnKanban* piece; EnKanban* signpost; - FloorType floorType; - f32 phi_f0; - s32 pad2; this->frameCount++; @@ -423,8 +419,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { f32 tempY; f32 tempZ; f32 tempWaterDepth; + s32 pad2; u16 bgCheckFlags; - u8 onGround; if (this->unk_198 != 0) { this->actor.velocity.y = -2.0f; @@ -452,103 +448,103 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.bgCheckFlags = bgCheckFlags; this->actor.depthInWater = tempWaterDepth; - if (1) {} + if (1) { + u8 onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND); - onGround = (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND); - - if (this->spinXFlag != 0) { - this->spinRot.x += this->spinVel.x; - this->spinVel.x -= 0x800; - if ((this->spinRot.x <= 0) && onGround) { - this->spinRot.x = 0; - this->spinVel.x = 0; - } - } else { - this->spinRot.x -= this->spinVel.x; - this->spinVel.x -= 0x800; - if ((this->spinRot.x >= 0) && onGround) { - this->spinRot.x = 0; - this->spinVel.x = 0; - } - } - - if (this->spinVel.x < -0xC00) { - this->spinVel.x = -0xC00; - } - - if (this->spinZFlag != 0) { - this->spinRot.z += this->spinVel.z; - this->spinVel.z -= 0x800; - if ((this->spinRot.z <= 0) && onGround) { - this->spinRot.z = 0; - this->spinVel.z = 0; - } - } else { - this->spinRot.z -= this->spinVel.z; - this->spinVel.z -= 0x800; - if ((this->spinRot.z >= 0) && onGround) { - this->spinRot.z = 0; - this->spinVel.z = 0; - } - } - - if (this->spinVel.z < -0xC00) { - this->spinVel.z = -0xC00; - } - - if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { - Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND); - } - this->actor.speed *= -0.5f; - } - - if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { - this->actionState = ENKANBAN_WATER; - Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER); - this->bounceX = this->bounceZ = 0; - this->actor.world.pos.y += this->actor.depthInWater; - EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 0, (this->partCount * 20) + 300); - EffectSsGRipple_Spawn(play, &this->actor.world.pos, 150, 650, 0); - EffectSsGRipple_Spawn(play, &this->actor.world.pos, 300, 800, 5); - this->actor.velocity.y = 0.0f; - this->actor.gravity = 0.0f; - break; - } - - if (onGround) { - floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - - if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { - this->unk_197 = 1; - } else if (floorType == FLOOR_TYPE_5) { - this->unk_197 = -1; - } - - if (this->bounceCount <= 0) { - this->bounceCount++; - if (this->unk_197 != 0) { - this->actor.velocity.y = 0.0f; - } else { - this->actor.velocity.y *= -0.3f; - this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000); + if (this->spinXFlag != 0) { + this->spinRot.x += this->spinVel.x; + this->spinVel.x -= 0x800; + if ((this->spinRot.x <= 0) && onGround) { + this->spinRot.x = 0; + this->spinVel.x = 0; } - bounced = true; } else { - this->actor.velocity.y = 0.0f; + this->spinRot.x -= this->spinVel.x; + this->spinVel.x -= 0x800; + if ((this->spinRot.x >= 0) && onGround) { + this->spinRot.x = 0; + this->spinVel.x = 0; + } } - if (this->unk_197 != 0) { - if (this->unk_197 > 0) { - this->actor.speed = 0.0f; - } else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) { - this->airTimer = 10; - if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - this->actionState = ENKANBAN_GROUND; - this->actor.speed = 0.0f; - goto nextCase; + if (this->spinVel.x < -0xC00) { + this->spinVel.x = -0xC00; + } + + if (this->spinZFlag != 0) { + this->spinRot.z += this->spinVel.z; + this->spinVel.z -= 0x800; + if ((this->spinRot.z <= 0) && onGround) { + this->spinRot.z = 0; + this->spinVel.z = 0; + } + } else { + this->spinRot.z -= this->spinVel.z; + this->spinVel.z -= 0x800; + if ((this->spinRot.z >= 0) && onGround) { + this->spinRot.z = 0; + this->spinVel.z = 0; + } + } + + if (this->spinVel.z < -0xC00) { + this->spinVel.z = -0xC00; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND); + } + this->actor.speed *= -0.5f; + } + + if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { + this->actionState = ENKANBAN_WATER; + Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_DROP_WATER); + this->bounceX = this->bounceZ = 0; + this->actor.world.pos.y += this->actor.depthInWater; + EffectSsGSplash_Spawn(play, &this->actor.world.pos, NULL, NULL, 0, (this->partCount * 20) + 300); + EffectSsGRipple_Spawn(play, &this->actor.world.pos, 150, 650, 0); + EffectSsGRipple_Spawn(play, &this->actor.world.pos, 300, 800, 5); + this->actor.velocity.y = 0.0f; + this->actor.gravity = 0.0f; + break; + } + + if (onGround) { + floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + + if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { + this->unk_197 = 1; + } else if (floorType == FLOOR_TYPE_5) { + this->unk_197 = -1; + } + + if (this->bounceCount <= 0) { + this->bounceCount++; + if (this->unk_197 != 0) { + this->actor.velocity.y = 0.0f; } else { - Vec3f spC8; + this->actor.velocity.y *= -0.3f; + this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000); + } + bounced = true; + } else { + this->actor.velocity.y = 0.0f; + } + + if (this->unk_197 != 0) { + Vec3f spC8; + + if (this->unk_197 > 0) { + this->actor.speed = 0.0f; + } else if ((this->floorRot.x > 0.1f) || (this->floorRot.z > 0.1f)) { + this->airTimer = 10; + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + this->actionState = ENKANBAN_GROUND; + this->actor.speed = 0.0f; + goto nextCase; + } Matrix_RotateXFNew(this->floorRot.x); Matrix_RotateZF(this->floorRot.z, MTXMODE_APPLY); @@ -558,67 +554,67 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.world.rot.y = Math_Atan2S(spC8.x, spC8.z); this->unk_198 = 1; this->actor.speed = sqrtf(SQXZ(this->actor.velocity)); + } else { + this->unk_198 = 0; + Math_ApproachZeroF(&this->actor.speed, 1, 0.1f); } } else { - this->unk_198 = 0; - Math_ApproachZeroF(&this->actor.speed, 1, 0.1f); + this->actor.speed *= 0.7f; } + + if (this->spinRot.x == 0) { + if (this->bounceX != 0) { + bounced = true; + if (this->unk_197 != 0) { + this->spinRot.x = 0; + this->bounceX = 0; + } else { + this->spinVel.x = this->bounceX << 9; + if (this->bounceX != 0) { + this->bounceX -= 5; + if (this->bounceX <= 0) { + this->bounceX = 0; + } + } + + if (Rand_ZeroOne() < 0.5f) { + this->spinXFlag = 1; + } else { + this->spinXFlag = 0; + } + } + } + } + + if (this->spinRot.z == 0) { + if (this->bounceZ != 0) { + bounced = 1; + if (this->unk_197 != 0) { + this->spinRot.z = 0; + this->bounceZ = 0; + } else { + this->spinVel.z = this->bounceZ << 9; + if (this->bounceZ != 0) { + this->bounceZ -= 5; + if (this->bounceZ <= 0) { + this->bounceZ = 0; + } + } + + if (Rand_ZeroOne() < 0.5f) { + this->spinZFlag = 1; + } else { + this->spinZFlag = 0; + } + } + } + } + + Math_ApproachS(&this->actor.shape.rot.x, this->direction << 0xE, 1, 0x2000); } else { - this->actor.speed *= 0.7f; + this->actor.shape.rot.y += this->spinVel.y; + this->actor.shape.rot.x += this->direction * 0x7D0; } - - if (this->spinRot.x == 0) { - if (this->bounceX != 0) { - bounced = true; - if (this->unk_197 != 0) { - this->spinRot.x = 0; - this->bounceX = 0; - } else { - this->spinVel.x = this->bounceX << 9; - if (this->bounceX != 0) { - this->bounceX -= 5; - if (this->bounceX <= 0) { - this->bounceX = 0; - } - } - - if (Rand_ZeroOne() < 0.5f) { - this->spinXFlag = 1; - } else { - this->spinXFlag = 0; - } - } - } - } - - if (this->spinRot.z == 0) { - if (this->bounceZ != 0) { - bounced = 1; - if (this->unk_197 != 0) { - this->spinRot.z = 0; - this->bounceZ = 0; - } else { - this->spinVel.z = this->bounceZ << 9; - if (this->bounceZ != 0) { - this->bounceZ -= 5; - if (this->bounceZ <= 0) { - this->bounceZ = 0; - } - } - - if (Rand_ZeroOne() < 0.5f) { - this->spinZFlag = 1; - } else { - this->spinZFlag = 0; - } - } - } - } - - Math_ApproachS(&this->actor.shape.rot.x, this->direction << 0xE, 1, 0x2000); - } else { - this->actor.shape.rot.y += this->spinVel.y; - this->actor.shape.rot.x += this->direction * 0x7D0; } if (bounced) { @@ -630,15 +626,16 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } if (bounced && (this->unk_197 >= 0)) { + static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 }; + static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 }; s16 dustCount; s16 j; Vec3f velocity = { 0.0f, 0.0f, 0.0f }; - static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 }; - static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 }; Vec3f accel; Vec3f pos; Color_RGBA8 primColor; Color_RGBA8 envColor; + s32 pad3; if (this->unk_197 != 0) { primColor = D_8095754C; @@ -667,10 +664,10 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actionState = ENKANBAN_GROUND; } } - + nextCase: + // fallthrough case ENKANBAN_GROUND: case ENKANBAN_WATER: - nextCase: signpost = (EnKanban*)this->actor.parent; if (signpost->partFlags == 0xFFFF) { @@ -839,6 +836,9 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { play_sound(NA_SE_SY_TRE_BOX_APPEAR); } break; + + default: + break; } break; @@ -883,14 +883,11 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } break; } + + default: + break; } } -#else -static Vec3f D_8095753C = { 0.0f, 0.0f, 0.0f }; -static Color_RGBA8 D_80957548 = { 185, 140, 70, 255 }; -static Color_RGBA8 D_8095754C = { 255, 255, 255, 255 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kanban/EnKanban_Update.s") -#endif static Gfx* sDisplayLists[] = { object_kanban_DL_000CB0, object_kanban_DL_000DB8, object_kanban_DL_000E78, object_kanban_DL_000F38, From 64959177d90f158e2e39ca3a6b728f915bf084b5 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Thu, 1 Jun 2023 06:27:30 +1000 Subject: [PATCH 17/36] match func_808DDE9C (#1262) --- spec | 4 -- .../ovl_Object_Kankyo/z_object_kankyo.c | 56 ++++++++----------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/spec b/spec index 69d9bb5c8..14aff1cd7 100644 --- a/spec +++ b/spec @@ -1119,11 +1119,7 @@ beginseg name "ovl_Object_Kankyo" compress include "build/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_Object_Kankyo/ovl_Object_Kankyo_reloc.o" -#else - include "build/data/ovl_Object_Kankyo/ovl_Object_Kankyo.reloc.o" -#endif endseg beginseg diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c index b8a7b3b16..1c05a0981 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -647,8 +647,6 @@ f32 func_808DDE74(void) { return Rand_ZeroOne() - 0.5f; } -#ifdef NON_MATCHING -// s2/s3 swapped void func_808DDE9C(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjectKankyo* this = THIS; @@ -674,25 +672,23 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { temp_f22 = this->unk_14C[0].unk_04 + ((Rand_ZeroOne() - 0.7f) * this->unk_144); temp_f2 = this->unk_14C[0].unk_08 + ((Rand_ZeroOne() - 0.7f) * this->unk_144); - if ((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f)) { - continue; + if (!((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f))) { + Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); + + gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + Matrix_RotateYS((s16)this->unk_14C[2].unk_04 + (s16)(i << 5), MTXMODE_APPLY); + Matrix_RotateXS((s16)this->unk_14C[2].unk_00 + (s16)(i << 5), MTXMODE_APPLY); + + if (this->unk_114C == 0) { + Matrix_Scale(0.5f, 1.0f, 0.5f, MTXMODE_APPLY); + } else { + Matrix_Scale(2.0f, 4.0f, 2.0f, MTXMODE_APPLY); + } + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0706E0); } - - Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); - - gSPMatrix(POLY_XLU_DISP++, &D_01000000, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - Matrix_RotateYS((s16)this->unk_14C[2].unk_04 + (s16)(i << 5), MTXMODE_APPLY); - Matrix_RotateXS((s16)this->unk_14C[2].unk_00 + (s16)(i << 5), MTXMODE_APPLY); - - if (this->unk_114C == 0) { - Matrix_Scale(0.5f, 1.0f, 0.5f, MTXMODE_APPLY); - } else { - Matrix_Scale(2.0f, 4.0f, 2.0f, MTXMODE_APPLY); - } - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0706E0); } phi_s5 = false; @@ -710,21 +706,17 @@ void func_808DDE9C(Actor* thisx, PlayState* play2) { temp_f22 = player->actor.floorHeight + 2.0f; temp_f2 = this->unk_14C[1].unk_08 + (func_808DDE74() * 220.0f); - if ((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f)) { - continue; + if (!((temp_f20 < -252.0f) && (temp_f20 > -500.0f) && (temp_f2 > 3820.0f) && (temp_f2 < 4150.0f))) { + Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); + temp_f12 = (Rand_ZeroOne() * 0.05f) + 0.05f; + Matrix_Scale(temp_f12, temp_f12, temp_f12, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL); } - - Matrix_Translate(temp_f20, temp_f22, temp_f2, MTXMODE_NEW); - temp_f12 = (Rand_ZeroOne() * 0.05f) + 0.05f; - Matrix_Scale(temp_f12, temp_f12, temp_f12, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gEffShockwaveDL); } } CLOSE_DISPS(play->state.gfxCtx); } -#else -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Object_Kankyo/func_808DDE9C.s") -#endif From eb24680be36616c36009e17e1e09608db17560b8 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Thu, 1 Jun 2023 15:11:11 -0400 Subject: [PATCH 18/36] `z_horse.c` OK (#1245) * func_800F3940 * func_800F3B2C, func_800F415C and func_800F41E4 * func_800F40A0 * func_800F3ED4 * func_800F3C44 * func_800F3B68 NON_MATCHING * func_800F3A64 kinda * func_800F39B4 * cleanups * import data * fix fake match * format * Scene enum * minor cleanup on data usage * Horse_RotateToPoint and ENHORSE_PARAMS * scene setup index Co-authored-by: Tom Overton * fix merge * z64horse.h * Renames * and even more renames * format * fix * review * Horse_IsActive * review * bss * fix * remove comments * Update src/code/z_horse.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * Update src/code/z_horse.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review --------- Co-authored-by: Tom Overton Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 11 - include/variables.h | 20 +- include/z64horse.h | 21 ++ spec | 1 - src/code/z_actor.c | 7 +- src/code/z_horse.c | 232 +++++++++++++++++- src/code/z_sram_NES.c | 7 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 11 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.h | 7 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 9 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 27 +- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 2 +- .../z_en_horse_game_check.c | 5 +- .../z_en_horse_link_child.c | 13 +- src/overlays/actors/ovl_En_In/z_en_in.c | 7 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 5 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 5 +- .../actors/ovl_player_actor/z_player.c | 5 +- tools/disasm/functions.txt | 22 +- tools/disasm/variables.txt | 22 +- tools/namefixer.py | 9 + tools/sizes/code_functions.csv | 22 +- 22 files changed, 341 insertions(+), 129 deletions(-) create mode 100644 include/z64horse.h diff --git a/include/functions.h b/include/functions.h index 530cedd86..5774ca3c6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1069,17 +1069,6 @@ u16 QuestHint_GetTatlTextId(PlayState* play); u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet); -s32 func_800F3940(PlayState* play); -// void func_800F39B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_800F3A64(void); -void func_800F3B2C(PlayState* play); -// void func_800F3B68(void); -// void func_800F3C44(void); -// void func_800F3ED4(void); -void func_800F40A0(GameState* gameState, Player* player); -void func_800F415C(Actor* actor, Vec3f* arg1, s16 arg2); -UNK_TYPE func_800F41E4(PlayState* play, ActorContext* actorCtx); - void func_800F4A10(PlayState* play); void KaleidoSetup_Update(PlayState* play); void KaleidoSetup_Init(PlayState* play); diff --git a/include/variables.h b/include/variables.h index 61ac8824b..24030fd99 100644 --- a/include/variables.h +++ b/include/variables.h @@ -419,21 +419,7 @@ extern u8 gOpeningEntranceIndex; extern ActorCutscene sGlobalCutsceneList[8]; extern GameStateOverlay gGameStateOverlayTable[]; extern s32 gGraphNumGameStates; -// extern UNK_TYPE2 D_801BDA70; -// extern UNK_TYPE2 D_801BDA74; -// extern UNK_TYPE2 D_801BDA78; -// extern UNK_TYPE2 D_801BDA7C; -extern s32 D_801BDA9C; -extern UNK_TYPE4 D_801BDAA0; -extern s32 D_801BDAA4; -// extern UNK_TYPE2 D_801BDAA8; -// extern UNK_TYPE2 D_801BDAAA; -// extern UNK_TYPE2 D_801BDAAC; -// extern UNK_TYPE2 D_801BDAAE; -// extern UNK_TYPE2 D_801BDAB0; -// extern UNK_TYPE2 D_801BDAB2; -// extern UNK_TYPE2 D_801BDAB4; -// extern UNK_TYPE2 D_801BDAB6; + // extern UNK_TYPE4 D_801BDAC0; // extern UNK_TYPE4 D_801BDAC4; // extern UNK_TYPE4 D_801BDAC8; @@ -1605,10 +1591,6 @@ extern f32 D_801DD774; extern f32 D_801DD780; extern f32 D_801DD7B0; extern f32 D_801DD7C0; -extern f32 D_801DD7E0; -extern f32 D_801DD7E4; -extern f32 D_801DD7E8; -extern f32 D_801DD7EC; // extern UNK_TYPE2 D_801DD880; // extern UNK_TYPE1 D_801DD8E0; // extern UNK_TYPE4 D_801DD900; diff --git a/include/z64horse.h b/include/z64horse.h new file mode 100644 index 000000000..bae439868 --- /dev/null +++ b/include/z64horse.h @@ -0,0 +1,21 @@ +#ifndef Z64_HORSE_H +#define Z64_HORSE_H + +#include "ultra64.h" +#include "z64.h" + + +s32 Horse_GetJumpingFencePathIndex(PlayState* play); +s32 Horse_CopyPointFromPathList(PlayState* play, s32 pathIndex, s32 pointIndex, Vec3s* dst, s16* arg4); +s32 Horse_IsValidSpawn(s16 sceneId); +void Horse_ResetHorseData(PlayState* play); +void Horse_Spawn(PlayState* play, Player* player); +void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnYaw); +s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx); + + +extern s32 gHorseIsMounted; +extern s32 D_801BDAA0; +extern s32 gHorsePlayedEponasSong; + +#endif diff --git a/spec b/spec index 14aff1cd7..c378c6f05 100644 --- a/spec +++ b/spec @@ -474,7 +474,6 @@ beginseg include "build/src/code/z_fireobj.o" include "build/src/code/z_game_dlftbls.o" include "build/src/code/z_horse.o" - include "build/data/code/z_horse.data.o" include "build/src/code/z_jpeg.o" include "build/src/code/z_kaleido_setup.o" include "build/src/code/z_kanfont.o" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index c46b6ec3b..b5a24cfac 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -4,6 +4,7 @@ */ #include "global.h" +#include "z64horse.h" #include "z64load.h" #include "z64quake.h" #include "z64rumble.h" @@ -1357,8 +1358,8 @@ s32 func_800B7200(Player* player) { return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0); } -void func_800B722C(GameState* gameState, Player* player) { - func_800F40A0(gameState, player); +void Actor_SpawnHorse(PlayState* play, Player* player) { + Horse_Spawn(play, player); } s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) { @@ -2304,7 +2305,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* acto Actor_TargetContextInit(&actorCtx->targetContext, actorCtx->actorLists[ACTORCAT_PLAYER].first, play); Actor_InitHalfDaysBit(actorCtx); Fault_AddClient(&sActorFaultClient, (void*)Actor_PrintLists, actorCtx, NULL); - func_800B722C(&play->state, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first); + Actor_SpawnHorse(play, (Player*)actorCtx->actorLists[ACTORCAT_PLAYER].first); } /** diff --git a/src/code/z_horse.c b/src/code/z_horse.c index 976ea2948..ac0142fae 100644 --- a/src/code/z_horse.c +++ b/src/code/z_horse.c @@ -1,21 +1,233 @@ #include "global.h" +#include "z64horse.h" +#include "overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h" +#include "overlays/actors/ovl_En_Horse/z_en_horse.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3940.s") +s32 Horse_GetJumpingFencePathIndex(PlayState* play) { + Actor* actor; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F39B4.s") + for (actor = NULL;; actor = actor->next) { + actor = SubS_FindActor(play, actor, ACTORCAT_PROP, ACTOR_BG_UMAJUMP); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3A64.s") + if (actor == NULL) { + break; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3B2C.s") + if (actor->params == BG_UMAJUMP_TYPE_2) { + return ((BgUmajump*)actor)->pathIndex; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3B68.s") + return -1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3C44.s") +// unused +s32 Horse_CopyPointFromPathList(PlayState* play, s32 pathIndex, s32 pointIndex, Vec3s* dst, s16* arg4) { + Path* path = &play->setupPathList[pathIndex]; + Vec3s* points; + s32 count = path->count; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F3ED4.s") + dst->x = 0; + dst->y = 0; + dst->z = 0; + *arg4 = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F40A0.s") + if (count == 0) { + return false; + } + if (pointIndex >= count) { + return false; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F415C.s") + points = Lib_SegmentedToVirtual(path->points); + points += pointIndex; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_horse/func_800F41E4.s") + dst->x = points->x; + dst->y = points->y; + dst->z = points->z; + *arg4 = 0; + + return true; +} + +typedef struct HorseValidScene { + /* 0x0 */ s16 sceneId; + /* 0x2 */ s16 sceneLayerMinusOne; +} HorseValidScene; // size = 0x4 + +HorseValidScene sHorseValidScenes[] = { + { SCENE_00KEIKOKU, 0 }, // Termina Field + { SCENE_24KEMONOMITI, 0 }, // Road to southern swap + { SCENE_F01, 0 }, // Romani ranch + { SCENE_KOEPONARACE, 0 }, // Gorman track + { SCENE_20SICHITAI, 0 }, // Southern swamp poisoned + { SCENE_20SICHITAI2, 0 }, // Souther swamp clear + { SCENE_30GYOSON, 0 }, // Great bay coast + { SCENE_31MISAKI, 0 }, // Zora cape + { SCENE_ROMANYMAE, 0 }, // Milk road + { SCENE_IKANAMAE, 0 }, // Road to Ikana + { SCENE_13HUBUKINOMITI, 0 }, // Path to Mountain Village +}; + +s32 Horse_IsValidSpawn(s16 sceneId) { + s32 i; + + for (i = 0; i < ARRAY_COUNT(sHorseValidScenes); i++) { + if (sceneId == sHorseValidScenes[i].sceneId) { + return true; + } + } + + return false; +} + +void Horse_ResetHorseData(PlayState* play) { + gSaveContext.save.saveInfo.horseData.sceneId = SCENE_F01; + gSaveContext.save.saveInfo.horseData.pos.x = -1420; + gSaveContext.save.saveInfo.horseData.pos.y = 257; + gSaveContext.save.saveInfo.horseData.pos.z = -1285; + gSaveContext.save.saveInfo.horseData.yaw = 0x2AAA; +} + +s32 gHorseIsMounted = false; +s32 D_801BDAA0 = false; +s32 gHorsePlayedEponasSong = false; + +HorseValidScene sHorseValidSceneLayers[] = { + { SCENE_00KEIKOKU, 5 - 1 }, // Termina Field - First Cycle + { SCENE_30GYOSON, 1 - 1 }, // Great Bay Coast - Post-Gyorg + { SCENE_31MISAKI, 1 - 1 }, // Zora Cape - Post-Gyorg + { SCENE_13HUBUKINOMITI, 1 - 1 }, // Path to Mountain Village - Post-Goht +}; + +s32 Horse_IsValidSceneLayer(PlayState* play, Player* player) { + s32 i; + + if (gSaveContext.sceneLayer == 0) { + return true; + } + + for (i = 0; i < ARRAY_COUNT(sHorseValidSceneLayers); i++) { + if ((sHorseValidSceneLayers[i].sceneId == play->sceneId) && + (gSaveContext.sceneLayer == sHorseValidSceneLayers[i].sceneLayerMinusOne + 1)) { + return true; + } + } + return false; +} + +void Horse_SpawnOverworld(PlayState* play, Player* player) { + if (!Horse_IsValidSceneLayer(play, player)) { + return; + } + + if (gHorseIsMounted && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + s32 pad; + Vec3f pos = player->actor.world.pos; + f32 yIntersect; + CollisionPoly* poly; + s32 pad2[3]; + + pos.y += 5.0f; + yIntersect = BgCheck_EntityRaycastFloor1(&play->colCtx, &poly, &pos); + if (yIntersect == BGCHECK_Y_MIN) { + yIntersect = player->actor.world.pos.y; + } + + player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, yIntersect, + player->actor.world.pos.z, player->actor.shape.rot.x, player->actor.shape.rot.y, + player->actor.shape.rot.z, ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_11)); + Actor_MountHorse(play, player, player->rideActor); + Actor_SetCameraHorseSetting(play, player); + } else if ((play->sceneId == gSaveContext.save.saveInfo.horseData.sceneId) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + if (Horse_IsValidSpawn(gSaveContext.save.saveInfo.horseData.sceneId)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.saveInfo.horseData.pos.x, + gSaveContext.save.saveInfo.horseData.pos.y, gSaveContext.save.saveInfo.horseData.pos.z, 0, + gSaveContext.save.saveInfo.horseData.yaw, 0, ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1)); + } else { + Horse_ResetHorseData(play); + } + } else if ((play->sceneId == SCENE_F01) && !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1420.0f, 257.0f, -1285.0f, 0, 0x2AAA, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1)); + } else if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && Horse_IsValidSpawn(play->sceneId)) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z, 0, player->actor.shape.rot.y, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_2)); + } +} + +void Horse_SpawnMinigame(PlayState* play, Player* player) { + if ((play->sceneId == SCENE_KOEPONARACE) && + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) { + player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1262.0f, -106.0f, 470.0f, 0, 0x7FFF, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_13)); + Actor_MountHorse(play, player, player->rideActor); + Actor_SetCameraHorseSetting(play, player); + } else if ((play->sceneId == SCENE_KOEPONARACE) && + ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3) || + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2))) { + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1741.0f, -106.0f, -641.0f, 0, -0x4FA4, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_1)); + } else if ((gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) && (Cutscene_GetSceneLayer(play) != 0) && + (player->transformation == PLAYER_FORM_HUMAN)) { + player->rideActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -1106.0f, 260.0f, -1185.0f, 0, 0x13, 0, + ENHORSE_PARAMS(ENHORSE_PARAM_4000, ENHORSE_7)); + Actor_MountHorse(play, player, player->rideActor); + Actor_SetCameraHorseSetting(play, player); + } +} + +void Horse_Spawn(PlayState* play, Player* player) { + if (((play->sceneId == SCENE_KOEPONARACE) && + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_START)) || + ((play->sceneId == SCENE_F01) && (((gSaveContext.sceneLayer == 1)) || (gSaveContext.sceneLayer == 5)) && + (player->transformation == PLAYER_FORM_HUMAN)) || + ((play->sceneId == SCENE_KOEPONARACE) && + (((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) || + (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2)))) { + // Gorman Track and horse state is either STATE_START, STATE_2 or STATE_3 + // or Romani Ranch, Player is Human and scene layer is either 1 or 5 + Horse_SpawnMinigame(play, player); + } else { + Horse_SpawnOverworld(play, player); + } + + D_801BDAA0 = false; +} + +void Horse_RotateToPoint(Actor* actor, Vec3f* pos, s16 turnYaw) { + s16 yaw = Math_Vec3f_Yaw(&actor->world.pos, pos) - actor->world.rot.y; + + if (yaw > turnYaw) { + actor->world.rot.y += turnYaw; + } else if (yaw < -turnYaw) { + actor->world.rot.y -= turnYaw; + } else { + actor->world.rot.y += yaw; + } + + actor->shape.rot.y = actor->world.rot.y; +} + +s32 Horse_IsActive(PlayState* play, ActorContext* actorCtx) { + Actor* bgActor = actorCtx->actorLists[ACTORCAT_BG].first; + + if (bgActor != NULL) { + while (true) { + if ((bgActor->update != NULL) && (bgActor->init == NULL)) { + if (Object_IsLoaded(&play->objectCtx, bgActor->objBankIndex)) { + if ((bgActor->id == ACTOR_EN_HORSE) && (((EnHorse*)bgActor)->action != ENHORSE_ACTION_INACTIVE)) { + return true; + } + } + } + bgActor = bgActor->next; + if (bgActor == NULL) { + break; + } + } + } + + return false; +} diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index cfd230569..ac68f0fac 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "z64horse.h" #include "overlays/gamestates/ovl_file_choose/z_file_choose.h" void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages); @@ -454,7 +455,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.jinxTimer = 0; gSaveContext.rupeeAccumulator = 0; - func_800F3B2C(play); + Horse_ResetHorseData(play); } void Sram_IncrementDay(void) { @@ -884,8 +885,8 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { gSaveContext.timerPausedOsTimes[i] = 0; } - D_801BDAA0 = 1; - D_801BDA9C = 0; + D_801BDAA0 = true; + gHorseIsMounted = false; gSaveContext.powderKegTimer = 0; gSaveContext.unk_1014 = 0; gSaveContext.jinxTimer = 0; diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c index d4d2c7274..8bf39145c 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -89,13 +89,12 @@ void BgUmajump_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); - this->objectIndex = BG_UMAJUMP_GET_OBJECT_INDEX(thisx); - thisx->params = BG_UMAJUMP_GET_FF(thisx); + this->pathIndex = BG_UMAJUMP_GET_PATH_INDEX(thisx); + thisx->params = BG_UMAJUMP_GET_TYPE(thisx); - if ((thisx->params == BG_UMAJUMP_TYPE_2)) { - if ((((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20)) && - !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) && - (thisx->csId != CS_ID_NONE)) { + if (thisx->params == BG_UMAJUMP_TYPE_2) { + if ((play->sceneId == SCENE_F01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_89_20) && + !CHECK_QUEST_ITEM(QUEST_SONG_EPONA) && (thisx->csId != CS_ID_NONE)) { this->actionFunc = BgUmajump_CheckDistance; thisx->update = func_8091A5A0; thisx->flags |= ACTOR_FLAG_10; diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h index 62aaf6cb7..fe29e34cb 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h @@ -3,8 +3,8 @@ #include "global.h" -#define BG_UMAJUMP_GET_OBJECT_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) -#define BG_UMAJUMP_GET_FF(thisx) ((thisx)->params & 0xFF) +#define BG_UMAJUMP_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) +#define BG_UMAJUMP_GET_TYPE(thisx) ((thisx)->params & 0xFF) typedef enum { BG_UMAJUMP_TYPE_1 = 1, @@ -24,7 +24,8 @@ typedef struct BgUmajump { /* 0x15C */ BgUmajumpActionFunc actionFunc; /* 0x160 */ union { s32 objectIndex; - s32 rotationTimer; // y rotation + s32 rotationTimer; // y rotation + s32 pathIndex; }; /* 0x164 */ s32 hasSoundPlayed; /* 0x168 */ Actor* horse; diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index 677c029cb..266e2c47b 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -5,6 +5,7 @@ */ #include "z_en_cow.h" +#include "z64horse.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8) @@ -130,7 +131,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->animationCycle = 0; this->actor.targetMode = 6; - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; func_801A5080(4); break; case EN_COW_TYPE_TAIL: @@ -264,13 +265,13 @@ void EnCow_Talk(EnCow* this, PlayState* play) { void EnCow_Idle(EnCow* this, PlayState* play) { if ((play->msgCtx.ocarinaMode == 0) || (play->msgCtx.ocarinaMode == 4)) { - if (D_801BDAA4 != 0) { + if (gHorsePlayedEponasSong) { if (this->flags & EN_COW_FLAG_WONT_GIVE_MILK) { this->flags &= ~EN_COW_FLAG_WONT_GIVE_MILK; - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; } else if ((this->actor.xzDistToPlayer < 150.0f) && ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 25000) { - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; this->actionFunc = EnCow_Talk; this->actor.flags |= ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 170.0f); diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 2f2be8c64..b6d2c8c40 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -5,6 +5,7 @@ */ #include "z_en_horse.h" +#include "z64horse.h" #include "z64rumble.h" #include "overlays/actors/ovl_En_In/z_en_in.h" #include "overlays/actors/ovl_Obj_Um/z_obj_um.h" @@ -278,8 +279,8 @@ void EnHorse_RaceWaypointPos(RaceWaypoint* waypoints, s32 idx, Vec3f* pos) { pos->z = waypoints[idx].z; } -void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnAmount) { - func_800F415C(&this->actor, pos, turnAmount); +void EnHorse_RotateToPoint(EnHorse* this, PlayState* play, Vec3f* pos, s16 turnYaw) { + Horse_RotateToPoint(&this->actor, pos, turnYaw); } void func_8087B7C0(EnHorse* this, PlayState* play, Path* path) { @@ -582,15 +583,15 @@ s32 EnHorse_Spawn(EnHorse* this, PlayState* play) { f32 minDist = 1.0e+38; Player* player = GET_PLAYER(play); Vec3f spawnPos; - s32 pathIdx = func_800F3940(play); + s32 pathIndex = Horse_GetJumpingFencePathIndex(play); s32 pathCount; Vec3s* pathPoints; - if (pathIdx == -1) { + if (pathIndex == -1) { return false; } - path = &play->setupPathList[pathIdx]; + path = &play->setupPathList[pathIndex]; pathCount = path->count; pathPoints = Lib_SegmentedToVirtual(path->points); @@ -691,7 +692,7 @@ void EnHorse_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->actor, sInitChain); EnHorse_ClearDustFlags(&this->dustFlags); - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; Skin_Setup(&this->skin); this->riderPos = thisx->world.pos; this->unk_52C = 0; @@ -1874,8 +1875,8 @@ void EnHorse_InitInactive(EnHorse* this) { } void EnHorse_Inactive(EnHorse* this, PlayState* play) { - if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) { - D_801BDAA4 = 0; + if (gHorsePlayedEponasSong && (this->type == HORSE_TYPE_2)) { + gHorsePlayedEponasSong = false; if (EnHorse_Spawn(this, play)) { if (this->type == HORSE_TYPE_2) { Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); @@ -1954,8 +1955,8 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) { this->actor.speed = 0.0f; EnHorse_IdleAnimSounds(this, play); - if ((D_801BDAA4 != 0) && (this->type == HORSE_TYPE_2)) { - D_801BDAA4 = 0; + if (gHorsePlayedEponasSong && (this->type == HORSE_TYPE_2)) { + gHorsePlayedEponasSong = false; if (!func_8087C38C(play, this, &this->actor.world.pos)) { if (EnHorse_Spawn(this, play)) { if (this->type == HORSE_TYPE_2) { @@ -2050,7 +2051,7 @@ void EnHorse_SetFollowAnimation(EnHorse* this, PlayState* play) { void EnHorse_FollowPlayer(EnHorse* this, PlayState* play) { f32 distToPlayer; - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; distToPlayer = Actor_WorldDistXZToActor(&this->actor, &GET_PLAYER(play)->actor); if (((this->playerDir == PLAYER_DIR_BACK_R) || (this->playerDir == PLAYER_DIR_BACK_L)) && (distToPlayer > 300.0f) && @@ -2959,7 +2960,7 @@ void EnHorse_FleePlayer(EnHorse* this, PlayState* play) { s32 animFinished; s16 yaw; - if ((D_801BDAA4 != 0) || (this->type == HORSE_TYPE_HNI)) { + if (gHorsePlayedEponasSong || (this->type == HORSE_TYPE_HNI)) { EnHorse_StartIdleRidable(this); if (this->type == HORSE_TYPE_2) { Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); @@ -3318,7 +3319,7 @@ void func_808848C8(EnHorse* this, PlayState* play) { EnHorse_PlayWalkingSound(this); this->actor.speed = 4.0f; - func_800F415C(&this->actor, &sp24, 2000); + Horse_RotateToPoint(&this->actor, &sp24, 0x7D0); this->skin.skelAnime.playSpeed = this->actor.speed * 0.75f; SkelAnime_Update(&this->skin.skelAnime); if (Math3D_Distance(&sp24, &this->actor.world.pos) < 30.0f) { diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index 9f8cd2063..0574b3198 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -112,7 +112,7 @@ typedef enum HorseType { #define ENHORSE_IS_4000_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_4000) #define ENHORSE_IS_DONKEY_TYPE(thisx) ((thisx)->params & ENHORSE_PARAM_DONKEY) -typedef enum { +typedef enum EnHorseParam { /* 0 */ ENHORSE_0, /* 1 */ ENHORSE_1, /* 2 */ ENHORSE_2, diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index d37fb8f23..c7a2edaaa 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -5,6 +5,7 @@ */ #include "z_en_horse_game_check.h" +#include "z64horse.h" #include "objects/object_horse_game_check/object_horse_game_check.h" #define FLAGS (ACTOR_FLAG_10) @@ -168,9 +169,9 @@ s32 func_808F8EB0(EnHorseGameCheck* this, PlayState* play) { gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } - D_801BDA9C = 0; + gHorseIsMounted = false; if (player->stateFlags1 & PLAYER_STATE1_800000) { - D_801BDAA0 = 1; + D_801BDAA0 = true; } play->nextEntrance = ENTRANCE(GORMAN_TRACK, 2); play->transitionTrigger = TRANS_TRIGGER_START; diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index 10d4a6826..0217e8fa8 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -5,6 +5,7 @@ */ #include "z_en_horse_link_child.h" +#include "z64horse.h" #include "objects/object_horse_link_child/object_horse_link_child.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_2000000) @@ -417,7 +418,7 @@ void func_808DF560(EnHorseLinkChild* this) { this->unk_148 = 1; } - D_801BDAA4 = 0; + gHorsePlayedEponasSong = false; Animation_Change(&this->skin.skelAnime, D_808DFEC0[this->unk_148], func_808DE728(this), 0.0f, Animation_GetLastFrame(D_808DFEC0[this->unk_148]), ANIMMODE_ONCE, 0.0f); } @@ -425,8 +426,8 @@ void func_808DF560(EnHorseLinkChild* this) { void func_808DF620(EnHorseLinkChild* this, PlayState* play) { s16 sp36; - if (D_801BDAA4 != 0) { - D_801BDAA4 = 0; + if (gHorsePlayedEponasSong) { + gHorsePlayedEponasSong = false; Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_EV_KID_HORSE_NEIGH); func_808DF788(this); return; @@ -436,7 +437,7 @@ void func_808DF620(EnHorseLinkChild* this, PlayState* play) { sp36 = Actor_WorldYawTowardActor(&this->actor, &GET_PLAYER(play)->actor) - this->actor.world.rot.y; if ((Math_CosS(sp36) < 0.7071f) && (this->unk_148 == 2)) { - func_800F415C(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C); + Horse_RotateToPoint(&this->actor, &GET_PLAYER(play)->actor.world.pos, 0x12C); } if (SkelAnime_Update(&this->skin.skelAnime)) { @@ -472,9 +473,9 @@ void func_808DF838(EnHorseLinkChild* this, PlayState* play) { if ((this->unk_148 == 4) || (this->unk_148 == 3) || (this->unk_148 == 2)) { if (this->unk_1E0 == 0) { - func_800F415C(&this->actor, &player->actor.world.pos, 0x12C); + Horse_RotateToPoint(&this->actor, &player->actor.world.pos, 0x12C); } else { - func_800F415C(&this->actor, &this->actor.home.pos, 0x12C); + Horse_RotateToPoint(&this->actor, &this->actor.home.pos, 0x12C); } } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 0e103de63..662f8a2c1 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -5,6 +5,7 @@ */ #include "z_en_in.h" +#include "z64horse.h" #include "objects/object_in/object_in.h" #include "overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h" @@ -1286,7 +1287,7 @@ void func_808F5A34(EnIn* this, PlayState* play) { } void func_808F5A94(EnIn* this, PlayState* play) { - if (func_800F41E4(play, &play->actorCtx)) { + if (Horse_IsActive(play, &play->actorCtx)) { if (gSaveContext.save.day == 3) { func_808F5728(play, this, 7, &this->unk48C); } else { @@ -1302,7 +1303,7 @@ void func_808F5A94(EnIn* this, PlayState* play) { } void func_808F5B58(EnIn* this, PlayState* play) { - if (func_800F41E4(play, &play->actorCtx)) { + if (Horse_IsActive(play, &play->actorCtx)) { if ((Player_GetMask(play) == PLAYER_MASK_CIRCUS_LEADER && CHECK_WEEKEVENTREG(WEEKEVENTREG_63_40)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_56_08)) { if (gSaveContext.save.day == 3) { @@ -1394,7 +1395,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk4AC |= 2; func_808F35AC(this, play); this->unk23C = 0; - D_801BDAA0 = 0; + D_801BDAA0 = false; if (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_6); diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index 24d8b4137..21ddf2bee 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -6,6 +6,7 @@ #include "prevent_bss_reordering.h" #include "z_en_test4.h" +#include "z64horse.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h" @@ -405,9 +406,9 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { if ((rideActor->type == HORSE_TYPE_EPONA) || (rideActor->type == HORSE_TYPE_2)) { if (CURRENT_DAY < 3) { - D_801BDA9C = 1; + gHorseIsMounted = true; } else { - D_801BDA9C = 0; + gHorseIsMounted = false; } } } diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index 23282c965..32945a2a4 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -5,6 +5,7 @@ */ #include "z_obj_um.h" +#include "z64horse.h" #include "overlays/actors/ovl_En_In/z_en_in.h" #include "objects/gameplay_keep/gameplay_keep.h" @@ -835,7 +836,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_31_80); play->nextEntrance = ENTRANCE(ROMANI_RANCH, 11); if (player->stateFlags1 & PLAYER_STATE1_800000) { - D_801BDAA0 = 1; + D_801BDAA0 = true; } play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; @@ -1093,7 +1094,7 @@ ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) { if (this->donkey != NULL) { this->dyna.actor.world.rot.y = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp50); - func_800F415C(&this->donkey->actor, &sp50, 0x190); + Horse_RotateToPoint(&this->donkey->actor, &sp50, 0x190); if (1) {} diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 7f33b45c1..1d4fa3489 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -6,6 +6,7 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "z64horse.h" #include "z64quake.h" #include "z64rumble.h" #include "z64shrink_window.h" @@ -5795,7 +5796,7 @@ s32 func_8083562C(PlayState* play, Player* this, CollisionPoly* poly, s32 bgId) if (D_801BDAA0) { D_801BDAA0 = false; } else { - D_801BDA9C = true; + gHorseIsMounted = true; } } } @@ -15790,7 +15791,7 @@ void func_808505D0(Player* this, PlayState* play) { this->stateFlags1 &= ~PLAYER_STATE1_800000; this->actor.parent = NULL; - D_801BDA9C = false; + gHorseIsMounted = false; if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA) || (DREG(1) != 0)) { gSaveContext.save.saveInfo.horseData.sceneId = play->sceneId; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index bb392b722..088d66ce9 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -743,7 +743,7 @@ 0x800B7170:("Actor_SetCameraHorseSetting",), 0x800B71DC:("Actor_MountHorse",), 0x800B7200:("func_800B7200",), - 0x800B722C:("func_800B722C",), + 0x800B722C:("Actor_SpawnHorse",), 0x800B724C:("func_800B724C",), 0x800B7298:("func_800B7298",), 0x800B72E0:("func_800B72E0",), @@ -1683,16 +1683,16 @@ 0x800F37B0:("FireObj_Destroy",), 0x800F37F0:("FireObj_SetState2",), 0x800F3820:("FireObj_Update",), - 0x800F3940:("func_800F3940",), - 0x800F39B4:("func_800F39B4",), - 0x800F3A64:("func_800F3A64",), - 0x800F3B2C:("func_800F3B2C",), - 0x800F3B68:("func_800F3B68",), - 0x800F3C44:("func_800F3C44",), - 0x800F3ED4:("func_800F3ED4",), - 0x800F40A0:("func_800F40A0",), - 0x800F415C:("func_800F415C",), - 0x800F41E4:("func_800F41E4",), + 0x800F3940:("Horse_GetJumpingFencePathIndex",), + 0x800F39B4:("Horse_CopyPointFromPathList",), + 0x800F3A64:("Horse_IsValidSpawn",), + 0x800F3B2C:("Horse_ResetHorseData",), + 0x800F3B68:("Horse_IsValidSceneLayer",), + 0x800F3C44:("Horse_SpawnOverworld",), + 0x800F3ED4:("Horse_SpawnMinigame",), + 0x800F40A0:("Horse_Spawn",), + 0x800F415C:("Horse_RotateToPoint",), + 0x800F41E4:("Horse_IsActive",), 0x800F42A0:("Jpeg_ScheduleDecoderTask",), 0x800F43BC:("Jpeg_CopyToZbuffer",), 0x800F44F4:("Jpeg_GetUnalignedU16",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 83bf2c681..240ea9679 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -933,22 +933,12 @@ 0x801BD8FC:("sFireObjColors","FireObjColors","[1]",0x08), 0x801BD904:("sFireObjLightParams","FireObjLightParams","[1]",0x08), 0x801BD910:("gGameStateOverlayTable","GameStateOverlay","[7]",0x150), - 0x801BDA60:("graphNumGameStates","UNK_TYPE4","",0x4), - 0x801BDA70:("D_801BDA70","UNK_TYPE2","",0x2), - 0x801BDA74:("D_801BDA74","UNK_TYPE2","",0x2), - 0x801BDA78:("D_801BDA78","UNK_TYPE2","",0x2), - 0x801BDA7C:("D_801BDA7C","UNK_TYPE2","",0x2), - 0x801BDA9C:("D_801BDA9C","UNK_TYPE4","",0x4), - 0x801BDAA0:("D_801BDAA0","UNK_TYPE4","",0x4), - 0x801BDAA4:("D_801BDAA4","UNK_TYPE4","",0x4), - 0x801BDAA8:("D_801BDAA8","UNK_TYPE2","",0x2), - 0x801BDAAA:("D_801BDAAA","UNK_TYPE2","",0x2), - 0x801BDAAC:("D_801BDAAC","UNK_TYPE2","",0x2), - 0x801BDAAE:("D_801BDAAE","UNK_TYPE2","",0x2), - 0x801BDAB0:("D_801BDAB0","UNK_TYPE2","",0x2), - 0x801BDAB2:("D_801BDAB2","UNK_TYPE2","",0x2), - 0x801BDAB4:("D_801BDAB4","UNK_TYPE2","",0x2), - 0x801BDAB6:("D_801BDAB6","UNK_TYPE2","",0x2), + 0x801BDA60:("gGraphNumGameStates","UNK_TYPE4","",0x4), + 0x801BDA70:("sHorseValidScenes","struct_801BDAA8","[11]",0x2C), + 0x801BDA9C:("gHorseIsMounted","s32","",0x4), + 0x801BDAA0:("D_801BDAA0","s32","",0x4), + 0x801BDAA4:("gHorsePlayedEponasSong","s32","",0x4), + 0x801BDAA8:("sHorseValidSceneLayers","struct_801BDAA8","[4]",0x10), 0x801BDAC0:("D_801BDAC0","UNK_TYPE4","",0x4), 0x801BDAC4:("D_801BDAC4","UNK_TYPE4","",0x4), 0x801BDAC8:("D_801BDAC8","UNK_TYPE4","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index b1a0b9072..901d6dbf6 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -743,6 +743,12 @@ wordReplace = { "func_80102544": "LightContext_SetFog", + "func_800F3A64": "Horse_IsValidSpawn", + "func_800F3B2C": "Horse_ResetHorseData", + "func_800F40A0": "Horse_Spawn", + "func_800F415C": "Horse_RotateToPoint", + "func_800F41E4": "Horse_IsActive", + "Padmgr_GetControllerBitmask": "PadMgr_GetValidControllersMask", "func_80174F24": "PadMgr_SetRumbleRetraceCallback", "func_80174F44": "PadMgr_UnsetRumbleRetraceCallback", @@ -1071,6 +1077,9 @@ wordReplace = { "D_801D1E20": "gIdentityMtxF", "sSetupDL": "gSetupDLs", + "D_801BDA9C": "gHorseIsMounted", + "D_801BDAA4": "gHorsePlayedEponasSong", + # Macros "CUR_EQUIP_VALUE_VOID": "GET_CUR_EQUIP_VALUE", "CUR_UPG_VALUE_VOID": "GET_CUR_UPG_VALUE", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 419a7a4be..6713041f7 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -257,7 +257,7 @@ asm/non_matchings/code/z_actor/func_800B715C.s,func_800B715C,0x800B715C,0x5 asm/non_matchings/code/z_actor/Actor_SetCameraHorseSetting.s,Actor_SetCameraHorseSetting,0x800B7170,0x1B asm/non_matchings/code/z_actor/Actor_MountHorse.s,Actor_MountHorse,0x800B71DC,0x9 asm/non_matchings/code/z_actor/func_800B7200.s,func_800B7200,0x800B7200,0xB -asm/non_matchings/code/z_actor/func_800B722C.s,func_800B722C,0x800B722C,0x8 +asm/non_matchings/code/z_actor/Actor_SpawnHorse.s,Actor_SpawnHorse,0x800B722C,0x8 asm/non_matchings/code/z_actor/func_800B724C.s,func_800B724C,0x800B724C,0x13 asm/non_matchings/code/z_actor/func_800B7298.s,func_800B7298,0x800B7298,0x12 asm/non_matchings/code/z_actor/func_800B72E0.s,func_800B72E0,0x800B72E0,0x6 @@ -1197,16 +1197,16 @@ asm/non_matchings/code/z_fireobj/FireObj_Init.s,FireObj_Init,0x800F36CC,0x39 asm/non_matchings/code/z_fireobj/FireObj_Fini.s,FireObj_Fini,0x800F37B0,0x10 asm/non_matchings/code/z_fireobj/FireObj_SetState2.s,FireObj_SetState2,0x800F37F0,0xC asm/non_matchings/code/z_fireobj/FireObj_Update.s,FireObj_Update,0x800F3820,0x48 -asm/non_matchings/code/z_horse/func_800F3940.s,func_800F3940,0x800F3940,0x1D -asm/non_matchings/code/z_horse/func_800F39B4.s,func_800F39B4,0x800F39B4,0x2C -asm/non_matchings/code/z_horse/func_800F3A64.s,func_800F3A64,0x800F3A64,0x32 -asm/non_matchings/code/z_horse/func_800F3B2C.s,func_800F3B2C,0x800F3B2C,0xF -asm/non_matchings/code/z_horse/func_800F3B68.s,func_800F3B68,0x800F3B68,0x37 -asm/non_matchings/code/z_horse/func_800F3C44.s,func_800F3C44,0x800F3C44,0xA4 -asm/non_matchings/code/z_horse/func_800F3ED4.s,func_800F3ED4,0x800F3ED4,0x73 -asm/non_matchings/code/z_horse/func_800F40A0.s,func_800F40A0,0x800F40A0,0x2F -asm/non_matchings/code/z_horse/func_800F415C.s,func_800F415C,0x800F415C,0x22 -asm/non_matchings/code/z_horse/func_800F41E4.s,func_800F41E4,0x800F41E4,0x2F +asm/non_matchings/code/z_horse/Horse_GetJumpingFencePathIndex.s,Horse_GetJumpingFencePathIndex,0x800F3940,0x1D +asm/non_matchings/code/z_horse/Horse_CopyPointFromPathList.s,Horse_CopyPointFromPathList,0x800F39B4,0x2C +asm/non_matchings/code/z_horse/Horse_IsValidSpawn.s,Horse_IsValidSpawn,0x800F3A64,0x32 +asm/non_matchings/code/z_horse/Horse_ResetHorseData.s,Horse_ResetHorseData,0x800F3B2C,0xF +asm/non_matchings/code/z_horse/Horse_IsValidSceneLayer.s,Horse_IsValidSceneLayer,0x800F3B68,0x37 +asm/non_matchings/code/z_horse/Horse_SpawnOverworld.s,Horse_SpawnOverworld,0x800F3C44,0xA4 +asm/non_matchings/code/z_horse/Horse_SpawnMinigame.s,Horse_SpawnMinigame,0x800F3ED4,0x73 +asm/non_matchings/code/z_horse/Horse_Spawn.s,Horse_Spawn,0x800F40A0,0x2F +asm/non_matchings/code/z_horse/Horse_RotateToPoint.s,Horse_RotateToPoint,0x800F415C,0x22 +asm/non_matchings/code/z_horse/Horse_IsActive.s,Horse_IsActive,0x800F41E4,0x2F asm/non_matchings/code/z_jpeg/Jpeg_ScheduleDecoderTask.s,Jpeg_ScheduleDecoderTask,0x800F42A0,0x47 asm/non_matchings/code/z_jpeg/Jpeg_CopyToZbuffer.s,Jpeg_CopyToZbuffer,0x800F43BC,0x4E asm/non_matchings/code/z_jpeg/Jpeg_GetUnalignedU16.s,Jpeg_GetUnalignedU16,0x800F44F4,0x13 From e0ae4e24f7978064e8d83c88aa4d09a4687da5b3 Mon Sep 17 00:00:00 2001 From: KidFeroz <98241806+KidFeroz@users.noreply.github.com> Date: Thu, 1 Jun 2023 17:41:37 -0600 Subject: [PATCH 19/36] ovl_Bg_Keikoku_Spr (#1228) * ovl_Bg_Keikoku_Spr * format * format * Co-authored-by: Alejandro Asenjo Nitti * Co-authored-by: Alejandro Asenjo Nitti --- spec | 3 +- .../ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c | 47 ++++++++++++++++--- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/spec b/spec index c378c6f05..05cd8d634 100644 --- a/spec +++ b/spec @@ -1026,8 +1026,7 @@ beginseg name "ovl_Bg_Keikoku_Spr" compress include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.o" - include "build/data/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr.data.o" - include "build/data/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr.reloc.o" + include "build/src/overlays/actors/ovl_Bg_Keikoku_Spr/ovl_Bg_Keikoku_Spr_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c index 8246a0298..ac9d089a4 100644 --- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c +++ b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c @@ -1,3 +1,9 @@ +/* + * File: z_bg_keikoku_spr.c + * Overlay: ovl_Bg_Keikoku_Spr + * Description: Termina Field Fountain Water + */ + #include "z_bg_keikoku_spr.h" #include "objects/object_keikoku_obj/object_keikoku_obj.h" @@ -10,7 +16,6 @@ void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play); void BgKeikokuSpr_Update(Actor* thisx, PlayState* play); void BgKeikokuSpr_Draw(Actor* thisx, PlayState* play); -/* const ActorInit Bg_Keikoku_Spr_InitVars = { ACTOR_BG_KEIKOKU_SPR, ACTORCAT_PROP, @@ -20,14 +25,42 @@ const ActorInit Bg_Keikoku_Spr_InitVars = { (ActorFunc)BgKeikokuSpr_Init, (ActorFunc)BgKeikokuSpr_Destroy, (ActorFunc)BgKeikokuSpr_Update, - (ActorFunc)BgKeikokuSpr_Draw + (ActorFunc)BgKeikokuSpr_Draw, }; -*/ -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Init.s") +static InitChainEntry sInitChain[] = { + ICHAIN_F32(uncullZoneForward, 3000, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE), + ICHAIN_F32(uncullZoneDownward, 400, ICHAIN_CONTINUE), + ICHAIN_VEC3F_DIV1000(scale, 20, ICHAIN_STOP), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Destroy.s") +void BgKeikokuSpr_Init(Actor* thisx, PlayState* play) { + BgKeikokuSpr* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Update.s") + Actor_ProcessInitChain(&this->actor, sInitChain); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Keikoku_Spr/BgKeikokuSpr_Draw.s") +void BgKeikokuSpr_Destroy(Actor* thisx, PlayState* play) { +} + +void BgKeikokuSpr_Update(Actor* thisx, PlayState* play) { +} + +void BgKeikokuSpr_Draw(Actor* thisx, PlayState* play) { + s32 pad; + + OPEN_DISPS(play->state.gfxCtx); + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0001F8)); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000100); + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0003F8)); + gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000300); + + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_keikoku_obj_Matanimheader_0005F8)); + gSPDisplayList(POLY_XLU_DISP++, object_keikoku_obj_DL_000500); + + CLOSE_DISPS(play->state.gfxCtx); +} From 95c5796e413c79ee3c228749d4269a8d4557e847 Mon Sep 17 00:00:00 2001 From: StickyThwomp <89738536+StickyThwomp@users.noreply.github.com> Date: Thu, 1 Jun 2023 22:30:48 -0500 Subject: [PATCH 20/36] ovl_En_Go OK and documented (Decomp was mostly done already) (#1080) * Match remaining functions in z_en_go: - Changed some already matching functions for uniformity with the tricky match (early continue from loop). In some cases, this eliminated some strange constructs, in others, it didn't leave much difference. - Comments/Notes to start understanding/naming process. * WIP renaming * More WIP renaming. * More renaming, Effects (See oot for continuation) and some flags) * MessageScript documenting. * Util for dumping message data by textId value. * Identify some messages. * Formatting, figuring out event flags. * More WIP naming * WIP renaming. * WIP renaming * WIP naming and organizing * WIP more renaming. * WIP renaming/organizing. * Near-Final Cleanup before review. * Rename Taisou and Hakugin animations and associated functions/variables. * Misc Cleanup. * Undo changes to variables.txt * Removed msgtableparser.py (Split to another branch) * Removal of uncompiled Message Script details. * Fixup spec file * First part of hensldm's suggested changes from review. Awaiting discussion. * Second part of hensldm's suggested changes. * Fixup missed 'Animation' suffix and functions.txt * Update .xml files and related source per tom-overton's comments * Align w/ engineer124's Quake Cleanup #1102 * fixup * Run format.sh after merge. * Add brackets around one-line conditional blocks * Remainder of hensldm's comments from review. * First pass at Elliptic's comments. * Rename functions UpdateToX -> ChangeToX * Header cleanup. * Run Format, remove accidental commit of .orig file. * Fixup ActorInit * Review comments addressed, plus a few unsolicited changes. - Location of function declarations moved above static data, below types: References in the codebase were mixed, but this just made more sense. - Function name changes: It didn't fit into subsystems based on Goron Type, so I quit trying to name functions that way. Loss of a bit of "which function applies to which type", but it looks a bit cleaner, sooo... - Took a stab at making effectTable usage a bit clearer. Just using a EnGoEffect* everywhere and not inherently knowing if it was for one element, or an array really bugged me. - "GraveBro" names changed. They're all "brothers". * Changes from engineer124's review. - "Stretcher" replaced with "Athletic" as a descriptor of goron type. - Misc formatting and naming changes * Restructure switch-case statment for early break, and added missing default cases. Removed #define for 0 for actionFlags bitmask. * Relocate WEEKEVENTREG comments, remove SCENE comments. * Updated WEEKEVENTREG define names * Update WEEKEVENTREG names in Goron Shrine Door. * ELDER -> ELDERS, and revert formatting on z64save.h * Fixed re-applying changes over wrong defines. * Adjust Weekeventreg names and comments. * Update comment as well. --- assets/xml/objects/object_hakugin_demo.xml | 9 +- assets/xml/objects/object_taisou.xml | 17 +- include/z64save.h | 33 +- spec | 4 - .../actors/ovl_Bg_Tobira01/z_bg_tobira01.c | 12 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 20 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 14 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 2661 ++++++++++------- src/overlays/actors/ovl_En_Go/z_en_go.h | 194 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 22 +- tools/disasm/functions.txt | 128 +- tools/weekeventregconvert.py | 18 +- 12 files changed, 1887 insertions(+), 1245 deletions(-) diff --git a/assets/xml/objects/object_hakugin_demo.xml b/assets/xml/objects/object_hakugin_demo.xml index 24c7a2ba2..8c8b5837c 100644 --- a/assets/xml/objects/object_hakugin_demo.xml +++ b/assets/xml/objects/object_hakugin_demo.xml @@ -1,8 +1,9 @@  + - - - - + + + + diff --git a/assets/xml/objects/object_taisou.xml b/assets/xml/objects/object_taisou.xml index 696285927..0143f2444 100644 --- a/assets/xml/objects/object_taisou.xml +++ b/assets/xml/objects/object_taisou.xml @@ -1,12 +1,13 @@  + - - - - - - - - + + + + + + + + diff --git a/include/z64save.h b/include/z64save.h index 01acfed0e..fdb99fea0 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -695,7 +695,9 @@ typedef enum { #define WEEKEVENTREG_18_10 PACK_WEEKEVENTREG_FLAG(18, 0x10) #define WEEKEVENTREG_18_20 PACK_WEEKEVENTREG_FLAG(18, 0x20) #define WEEKEVENTREG_18_40 PACK_WEEKEVENTREG_FLAG(18, 0x40) -#define WEEKEVENTREG_18_80 PACK_WEEKEVENTREG_FLAG(18, 0x80) + +// Player has Powder Keg purchasing privileges. +#define WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES PACK_WEEKEVENTREG_FLAG(18, 0x80) #define WEEKEVENTREG_19_01 PACK_WEEKEVENTREG_FLAG(19, 0x01) #define WEEKEVENTREG_19_02 PACK_WEEKEVENTREG_FLAG(19, 0x02) #define WEEKEVENTREG_19_04 PACK_WEEKEVENTREG_FLAG(19, 0x04) @@ -717,8 +719,12 @@ typedef enum { #define WEEKEVENTREG_20_80 PACK_WEEKEVENTREG_FLAG(20, 0x80) #define WEEKEVENTREG_21_01 PACK_WEEKEVENTREG_FLAG(21, 0x01) #define WEEKEVENTREG_21_02 PACK_WEEKEVENTREG_FLAG(21, 0x02) -#define WEEKEVENTREG_21_04 PACK_WEEKEVENTREG_FLAG(21, 0x04) -#define WEEKEVENTREG_21_08 PACK_WEEKEVENTREG_FLAG(21, 0x08) + +// Player has spoken to Goron Graveyard's gravemaker while in Goron form. +#define WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON PACK_WEEKEVENTREG_FLAG(21, 0x04) +// Player has spoken to formerly frozen Goron outside Goron Graveyard. +#define WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON PACK_WEEKEVENTREG_FLAG(21, 0x08) + #define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10) #define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20) #define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40) @@ -729,7 +735,10 @@ typedef enum { #define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01) #define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02) -#define WEEKEVENTREG_22_04 PACK_WEEKEVENTREG_FLAG(22, 0x04) + +// Goron Elder's son has been calmed from Goron's Lullaby. +#define WEEKEVENTREG_CALMED_GORON_ELDERS_SON PACK_WEEKEVENTREG_FLAG(22, 0x04) + #define WEEKEVENTREG_22_08 PACK_WEEKEVENTREG_FLAG(22, 0x08) #define WEEKEVENTREG_22_10 PACK_WEEKEVENTREG_FLAG(22, 0x10) #define WEEKEVENTREG_22_20 PACK_WEEKEVENTREG_FLAG(22, 0x20) @@ -1293,11 +1302,17 @@ typedef enum { #define WEEKEVENTREG_88_08 PACK_WEEKEVENTREG_FLAG(88, 0x08) #define WEEKEVENTREG_88_10 PACK_WEEKEVENTREG_FLAG(88, 0x10) #define WEEKEVENTREG_88_20 PACK_WEEKEVENTREG_FLAG(88, 0x20) -#define WEEKEVENTREG_88_40 PACK_WEEKEVENTREG_FLAG(88, 0x40) -#define WEEKEVENTREG_88_80 PACK_WEEKEVENTREG_FLAG(88, 0x80) -#define WEEKEVENTREG_89_01 PACK_WEEKEVENTREG_FLAG(89, 0x01) -#define WEEKEVENTREG_89_02 PACK_WEEKEVENTREG_FLAG(89, 0x02) -#define WEEKEVENTREG_89_04 PACK_WEEKEVENTREG_FLAG(89, 0x04) + +// Goron shrine Gatekeeper has opened shrine. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE PACK_WEEKEVENTREG_FLAG(88, 0x40) +// Goron shrine Gatekeeper has opened shrine for player in Human form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN PACK_WEEKEVENTREG_FLAG(88, 0x80) +// Goron shrine Gatekeeper has opened shrine for player in Deku form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU PACK_WEEKEVENTREG_FLAG(89, 0x01) +// Goron shrine Gatekeeper has opened shrine for player in Zora form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA PACK_WEEKEVENTREG_FLAG(89, 0x02) +// Goron shrine Gatekeeper has opened shrine for player in Goron form. +#define WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON PACK_WEEKEVENTREG_FLAG(89, 0x04) // Unconfirmed: "Postman has delivered priority mail" #define WEEKEVENTREG_89_08 PACK_WEEKEVENTREG_FLAG(89, 0x08) diff --git a/spec b/spec index 05cd8d634..a9d627634 100644 --- a/spec +++ b/spec @@ -2402,11 +2402,7 @@ beginseg name "ovl_En_Go" compress include "build/src/overlays/actors/ovl_En_Go/z_en_go.o" -#ifdef NON_MATCHING include "build/src/overlays/actors/ovl_En_Go/ovl_En_Go_reloc.o" -#else - include "build/data/ovl_En_Go/ovl_En_Go.reloc.o" -#endif endseg beginseg diff --git a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c index 920842b0b..5302c6a90 100644 --- a/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c +++ b/src/overlays/actors/ovl_Bg_Tobira01/z_bg_tobira01.c @@ -38,12 +38,12 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } else if (CutsceneManager_IsNext(csId)) { CutsceneManager_StartWithPlayerCs(csId, &this->dyna.actor); - SET_WEEKEVENTREG(WEEKEVENTREG_88_40); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); this->cutsceneRequested = false; } else { CutsceneManager_Queue(csId); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && (this->posYTick == 0) && + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) && (this->posYTick == 0) && (play->actorCtx.playerImpact.timer != 0) && (play->actorCtx.playerImpact.type == PLAYER_IMPACT_GORON_GROUND_POUND) && (SurfaceType_GetSceneExitIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 6)) { @@ -52,7 +52,7 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) { } prevPosYTick = this->posYTick; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE)) { this->posYTick++; } else { this->posYTick--; @@ -65,9 +65,9 @@ void BgTobira01_Action(BgTobira01* this, PlayState* play) { this->timer = 180; } - if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_88_40) && + if (!(player->stateFlags1 & PLAYER_STATE1_40) && CHECK_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE) && (DECR(this->timer) == 0)) { - CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); } } @@ -76,7 +76,7 @@ void BgTobira01_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gGoronDoorCol); - CLEAR_WEEKEVENTREG(WEEKEVENTREG_88_40); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); Actor_SetScale(&this->dyna.actor, 1.0f); this->timer = gSaveContext.save.isNight; this->posYTick = 0; diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index 0362fb4e3..6621ecc93 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -135,17 +135,17 @@ static AnimationInfoS sAnimationInfo[] = { { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronDropKegAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, }; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index c561035aa..28d5c344d 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -830,7 +830,7 @@ void func_80B51EA4(EnGk* this, PlayState* play) { } void func_80B51FD0(EnGk* this, PlayState* play) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (this->unk_1E4 & 2) { func_801A4748(&this->actor.projectedPos, NA_SE_EN_GOLON_KID_CRY - SFX_FLAG); } else { @@ -897,7 +897,7 @@ void func_80B5227C(EnGk* this, PlayState* play) { func_800B14D4(play, 20.0f, &this->actor.home.pos); this->unk_350 = 60; if (!(this->unk_1E4 & 0x80)) { - SET_WEEKEVENTREG(WEEKEVENTREG_22_04); + SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON); } Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT); this->unk_350 = 0x4000; @@ -987,7 +987,7 @@ void func_80B525E0(EnGk* this, PlayState* play) { void func_80B52654(EnGk* this, PlayState* play) { this->unk_350 += 0x400; if ((this->unk_1E4 & 0x80) && (play->csCtx.curFrame == 250)) { - SET_WEEKEVENTREG(WEEKEVENTREG_22_04); + SET_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON); } this->unk_354 = Math_SinS(this->unk_350) * 0.006f * 0.06f; @@ -1044,7 +1044,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } } else if (ENGK_GET_F(&this->actor) == ENGK_F_2) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->actionFunc = func_80B51FD0; this->actor.draw = NULL; this->actor.flags |= ACTOR_FLAG_10; @@ -1052,7 +1052,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { } else { Actor_Kill(&this->actor); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->unk_2E4 = 0; this->csId = this->actor.csId; this->actor.flags |= ACTOR_FLAG_10; @@ -1076,7 +1076,7 @@ void EnGk_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if ((ENGK_GET_F(&this->actor) == ENGK_F_1) || - ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) { + ((ENGK_GET_F(&this->actor) == ENGK_F_0) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) { func_80B507A0(this, play); SkelAnime_Update(&this->skelAnime); Actor_TrackPlayer(play, &this->actor, &this->unk_1D8, &this->unk_1DE, this->actor.focus.pos); @@ -1235,7 +1235,7 @@ void EnGk_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if ((ENGK_GET_F(&this->actor) == ENGK_F_0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { Matrix_RotateXS(-0x4000, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 67cbf327a..f70628930 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -2,42 +2,208 @@ * File: z_en_go.c * Overlay: ovl_En_Go * Description: Goron + * + * This actor handles multiple (but not all) Gorons. The Gorons included are: + * - Athletics Goron: Gorons in the racetrack performing stretches before/after a race. + * - Spectator Goron: Gorons scattered throughout the racetrack watching the race. + * - Gatekeeper Goron: The Gatekeeper of the Goron Shrine. + * - Graveyard Goron: Both Gorons outside the Goron Graveyard (one of which is initially frozen). + * - Shrine Goron: Gorons in the Goron Shrine (specifically, one in the elders room, one outside the elder's room, and + * one outside the shop, not all Gorons in the Goron Shrine are covered by this actor). + * - Medigoron: The Powder Keg making Medigoron in Goron Village. */ - #include "z_en_go.h" #include "z64quake.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" -#include "objects/object_oF1d_map/object_oF1d_map.h" #include "objects/object_hakugin_demo/object_hakugin_demo.h" #include "objects/object_taisou/object_taisou.h" #include "objects/gameplay_keep/gameplay_keep.h" +#include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h" #define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000) - #define THIS ((EnGo*)thisx) +#define ENGO_STANDING_Y_OFFSET 0.0f // Actor shape offset in use when a Goron is in any standing state. +#define ENGO_ROLLEDUP_Y_OFFSET 14.0f // Actor shape offset in use when a Goron is "rolled up". +#define ENGO_SNOWBALL_Y_OFFSET 46.0f // Actor shape offset in use when a Goron is in a snowball. + +#define ENGO_NORMAL_SCALE 0.01f // "Unit Scale" of a normal Goron. +#define ENGO_MEDIGORON_SCALE_MULTIPLIER 5.0f // Scale factor for the Medigoron in the Powder Keg Shop. + +#define ENGO_POUND_INITIAL_RISE_VEL 10.0f // Velocity at which the Gatekeeper's pound surges into the air. +#define ENGO_POUND_INITIAL_FALL_VEL -6.0f // Velocity at which the Gatekeeper's pound surges to the ground. + +#define ENGO_DUST_STEAM_LIFETIME 16 // Lifetime in frames of the Dust and Steam effects. + +#define ENGO_FLAG_ENGAGED (1 << 3) +#define ENGO_FLAG_FACE_TARGET (1 << 4) +#define ENGO_FLAG_EYES_OPEN (1 << 5) +#define ENGO_FLAG_LOST_ATTENTION (1 << 6) +#define ENGO_FLAG_STANDING (1 << 7) +#define ENGO_FLAG_SNOWBALLED (1 << 8) +#define ENGO_FLAG_ROLLED_UP (1 << 9) +#define ENGO_FLAG_FROZEN (1 << 10) +#define ENGO_FLAG_HIT_OTHER (1 << 11) +#define ENGO_FLAG_HIT_BY_OTHER (1 << 12) +#define ENGO_FLAG_HIT_OBJ (1 << 13) +#define ENGO_FLAG_ROLLING_UP (1 << 14) +#define ENGO_FLAG_UNROLLING (1 << 15) + void EnGo_Init(Actor* thisx, PlayState* play); void EnGo_Destroy(Actor* thisx, PlayState* play); void EnGo_Update(Actor* thisx, PlayState* play); +void EnGo_Draw(Actor* thisx, PlayState* play); -void func_80A14798(EnGo* this, PlayState* play); -void func_80A149B0(EnGo* this, PlayState* play); -void func_80A14B30(EnGo* this, PlayState* play); -void func_80A14E14(EnGo* this, PlayState* play); -void func_80A14E74(EnGo* this, PlayState* play); -void func_80A14EB0(EnGo* this, PlayState* play); -void func_80A14FC8(EnGo* this, PlayState* play); -void func_80A153FC(EnGo* this, PlayState* play); -void func_80A157C4(EnGo* this, PlayState* play); -void func_80A15FEC(Actor* thisx, PlayState* play); +typedef enum EnGoEyeTexture { + /* 0 */ ENGO_EYETEX_OPEN, + /* 1 */ ENGO_EYETEX_HALF, + /* 2 */ ENGO_EYETEX_CLOSED, + /* 3 */ ENGO_EYETEX_HALF2, + /* 4 */ ENGO_EYETEX_CLOSED2 +} EnGoEyeTexture; -static s32 D_80A16100[] = { +typedef enum EnGoSleepState { + /* -1 */ ENGO_ASLEEP_NEG = -1, + /* 0 */ ENGO_AWAKE, + /* 1 */ ENGO_ASLEEP_POS +} EnGoSleepState; + +typedef enum EnGoEffectType { + /* 0 */ ENGO_EFFECT_NONE, + /* 1 */ ENGO_EFFECT_SNOW1, + /* 2 */ ENGO_EFFECT_SNOW2, + /* 3 */ ENGO_EFFECT_SNOW3, + /* 4 */ ENGO_EFFECT_DUST_MIN, + /* 4 */ ENGO_EFFECT_DUST1 = ENGO_EFFECT_DUST_MIN, + /* 5 */ ENGO_EFFECT_DUST2, + /* 6 */ ENGO_EFFECT_DUST3, + /* 7 */ ENGO_EFFECT_STEAM_MIN, + /* 7 */ ENGO_EFFECT_STEAM = ENGO_EFFECT_STEAM_MIN +} EnGoEffectType; + +typedef enum EnGoAnimationIndex { + /* -1 */ ENGO_ANIM_INVALID = -1, + /* 0 */ ENGO_ANIM_GORON_MIN, + /* 0 */ ENGO_ANIM_LYINGDOWNIDLE = ENGO_ANIM_GORON_MIN, + /* 1 */ ENGO_ANIM_LYINGDOWNIDLE_IMM, + /* 2 */ ENGO_ANIM_UNROLL, + /* 3 */ ENGO_ANIM_UNROLL_IMM, + /* 4 */ ENGO_ANIM_ROLL, + /* 5 */ ENGO_ANIM_SHIVER, + /* 6 */ ENGO_ANIM_SHIVER_IMM, + /* 7 */ ENGO_ANIM_DROPKEG, + /* 8 */ ENGO_ANIM_COVEREARS, + /* 9 */ ENGO_ANIM_SHIVERINGSURPRISED, + /* 10 */ ENGO_ANIM_ATHLETICS_MIN, + /* 10 */ ENGO_ANIM_DOUBLE_ARM_SIDEBEND = ENGO_ANIM_ATHLETICS_MIN, + /* 11 */ ENGO_ANIM_SQUAT_SIDE_TO_SIDE, + /* 12 */ ENGO_ANIM_SHAKE_LIMBS, + /* 13 */ ENGO_ANIM_SINGLE_ARM_SIDEBEND, + /* 14 */ ENGO_ANIM_SITTING_STRETCH, + /* 15 */ ENGO_ANIM_CHEER, + /* 16 */ ENGO_ANIM_SHOUT, + /* 17 */ ENGO_ANIM_HELP_SITTING_STRETCH, + /* 18 */ ENGO_ANIM_SPRING_MIN, + /* 18 */ ENGO_ANIM_SHOW = ENGO_ANIM_SPRING_MIN, + /* 19 */ ENGO_ANIM_SHOW_LOOPED, + /* 20 */ ENGO_ANIM_LOOK_AROUND, + /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED +} EnGoAnimationIndex; + +EnGoEffect* EnGo_InitSteam(EnGoEffect effect[], Vec3f pos, Vec3f accel, Vec3f velocity, f32 scale, f32 deltaScale, + s32 maxFrames); +void EnGo_DrawSteam(EnGoEffect effect[], PlayState* play2); + +void EnGo_InitDust(EnGoEffect effect[], Vec3f pos, Vec3f accel, Vec3f vel, f32 scale, f32 deltaScale, s32 maxFrames, + EnGoEffectType parentEffectType); +void EnGo_DrawDust(EnGoEffect effect[], PlayState* play2); + +void EnGo_InitSnow(EnGoEffect effect[], Vec3f pos); +void EnGo_UpdateSnow(EnGoEffect* effect, f32 dustConversionHeight); +void EnGo_DrawSnow(EnGoEffect effect[], PlayState* play, Gfx* material, Gfx* model, u8 effectType); + +void EnGo_UpdateEffects(EnGo* this); +void EnGo_DrawEffects(EnGo* this, PlayState* play); + +s32 EnGo_CanSnowballHurtPlayer(PlayState* play); +s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play); + +s32 EnGo_UpdateFocus(EnGo* this); + +void EnGo_UpdateSnowballCollider(EnGo* this, PlayState* play); +void EnGo_UpdateMedigoronCollider(EnGo* this, PlayState* play); +void EnGo_UpdateRolledUpCollider(EnGo* this, PlayState* play); +void EnGo_UpdateFrozenCollider(EnGo* this, PlayState* play); +void EnGo_UpdateStandingCollider(EnGo* this, PlayState* play); +void EnGo_UpdateCollider(EnGo* this, PlayState* play); + +s32 EnGo_UpdateTalking(EnGo* this, PlayState* play); +s32 EnGo_DetectCollisions(EnGo* this, PlayState* play); +s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play); +s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play); +s32 EnGo_UpdateSfx(EnGo* this, PlayState* play); +s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex); +void EnGo_UpdateEyes(EnGo* this); + +void EnGo_UpdateShiverSurprisedAnimation(EnGo* this, PlayState* play); +s32 EnGo_UpdateGraveyardAttentionTargetAndReactions(EnGo* this, PlayState* play); +s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play); +s32 EnGo_UpdateAttentionTargetAndReactions(EnGo* this, PlayState* play); + +void EnGo_GravemakerIdle(EnGo* this, PlayState* play); +void EnGo_FrozenIdle(EnGo* this, PlayState* play); +Actor* EnGo_FindGravemaker(EnGo* this, PlayState* play); + +void EnGo_UpdateMedigoronColliderRadius(EnGo* this, PlayState* play, s32 isGivenPowderKeg); +s32 EnGo_ChangeCutscene(EnGo* this, s16 csId); + +s32 EnGo_HandleGatekeeperPoundCutscene(EnGo* this, f32 initialVelocity, f32 maxDistortion, s32 maxHangtime); +void EnGo_AddGatekeeperPoundQuake(PlayState* play, s16 speed, s16 verticalMag, s16 countdown); +void EnGo_CreateGatekeeperPoundEffects(EnGo* this, PlayState* play); +void EnGo_DrawIceBlockWhenFrozen(EnGo* this, PlayState* play, f32 scale, f32 alpha); +void EnGo_MakeSteam(EnGo* this); + +s32 EnGo_HandleOpenShrineCutscene(Actor* thisx, PlayState* play); +s32 EnGo_HandleGivePowderKegCutscene(Actor* thisx, PlayState* play); + +void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToSnowballAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play); +void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play); + +void EnGo_SetupAthletic(EnGo* this, PlayState* play); +void EnGo_SetupSpectator(EnGo* this, PlayState* play); +void EnGo_SetupGatekeeper(EnGo* this, PlayState* play); +void EnGo_SetupGraveyardGoron(EnGo* this, PlayState* play); +void EnGo_SetupShrineGoron(EnGo* this, PlayState* play); +void EnGo_SetupMedigoron(EnGo* this, PlayState* play); +void EnGo_SetupInitialAction(EnGo* this, PlayState* play); + +void EnGo_Idle(EnGo* this, PlayState* play); +void EnGo_Sleep(EnGo* this, PlayState* play); +void EnGo_Frozen(EnGo* this, PlayState* play); +void EnGo_AwaitThaw(EnGo* this, PlayState* play); +void EnGo_Thaw(EnGo* this, PlayState* play); + +void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play); + +void EnGo_Snowball(EnGo* this, PlayState* play); + +s32* EnGo_GetMsgEventScript(EnGo* this, PlayState* play); + +void EnGo_Talk(EnGo* this, PlayState* play); + +// MsgEvent script for the Goron who made Darmani's grave in the mountain village. +static s32 sMsgScriptGoronGravemaker[] = { 0x00150800, 0x40010022, 0x00150200, 0x180E0E10, 0x0C0F0E11, 0x0C0F0E12, 0x0C0F0E13, 0x0C0F0E14, 0x0C111502, 0x100E0E15, 0x0C100015, 0x0400110E, 0x0E160C0F, 0x0E170C0F, 0x0E180C11, 0x15041610, 0x0E0E190C, 0x10001504, 0x000D0100, 0x050E0E31, 0x0C100E0E, 0x2F0C1001, 0x00050E0E, 0x2D0C100E, 0x0E2B0C10, }; -static s32 D_80A16164[] = { +// MsgEvent script for the frozen Goron aside the gravemaker in the mountain village. +static s32 sMsgScriptGoronFrozen[] = { 0x00150800, 0x7E01004D, 0x00150400, 0x180E0E1A, 0x0C170F0E, 0x230C180F, 0x0E240C0F, 0x0E250C12, 0x16111508, 0x100E0E1A, 0x0C170F0E, 0x230C180F, 0x0E240C0F, 0x0E250C17, 0x0F0E260C, 0x180F0E27, 0x0C170F0E, 0x280C180F, 0x0E290C17, 0x0F0E2A0C, 0x16111508, 0x100E0E1A, 0x0C170F0E, 0x1B0C180F, 0x0E1C0C0F, 0x0E1D0C0F, 0x0E1E0C17, @@ -45,19 +211,23 @@ static s32 D_80A16164[] = { 0x0E0E300C, 0x10010005, 0x0E0E2E0C, 0x100E0E2C, 0x0C100000, }; -static s32 D_80A16208[2] = { 0xE0E520C, 0x10000000 }; +// MsgEvent script for the shrine Goron standing aside the store. +static s32 sMsgScriptGoronAsideStore[] = { 0xE0E520C, 0x10000000 }; -static s32 D_80A16210[17] = { +// MsgEvent script for the shrine Goron standing aside the Elder's son. +static s32 sMsgScriptGoronAsideEldersSon[] = { 0x160400, 0x38010010, 0xE0E430C, 0xF0E440C, 0xF0E450C, 0x11188010, 0x160800, 0x1B0E0E46, 0xC0F0E47, 0xC0F0E48, 0xC0F0E49, 0xC0F0E4A, 0xC111608, 0x11188010, 0xE0E4B0C, 0x100E0E42, 0xC100000, }; -static s32 D_80A16254[11] = { +// MsgEvent script for the shrine Goron standing aside the Elder's room. +static s32 sMsgScriptGoronAsideEldersRoom[] = { 0x160400, 0x22010009, 0xE0E4D0C, 0xF0E4E0C, 0x10001701, 0xC0E0E, 0x4F0C0F0E, 0x500C1117, 0x1100E0E, 0x510C100E, 0xE4C0C10, }; -static s32 D_80A16280[52] = { +// MsgEvent script for the Goron in Goron Village who sells Powder Kegs. +static s32 sMsgScriptGoronMedigoron[] = { 0x1001200, 0x12200008, 0xE0C8E0C, 0x11122010, 0xE0C8F0C, 0x10001240, 0x1D0E0C, 0x800C1112, 0x40001280, 0x742500, 0xC006F00, 0x13010045, 0xF0C810C, 0x19001300, 0x1280005E, 0x25000C00, 0x59001301, 0x2F0E0C, 0x810C0F0C, 0x820C0500, 0x1A00, 0x1A300E0C, 0x830C1209, 0x700, 0xE0C84, 0x160C1113, 0x1100E0C, @@ -66,18 +236,30 @@ static s32 D_80A16280[52] = { 0x14FF9C12, 0x6003400, 0x130034, 0x700000E, 0xC870C16, 0x100E0C8B, 0xC100000, }; -static s32 D_80A16350[27] = { +// MsgEvent script for the gatekeeper Goron in Goron Village who opens the shrine gate. +static s32 sMsgScriptGoronGatekeeper[] = { 0x584000, 0x2903000E, 0x2001301, 0x180058, 0x80005119, 0x1E0059, 0x1004919, 0x160059, 0x2004119, 0xE0059, 0x4003919, 0x2F0E0D, 0x4D0C1210, 0xE0D480C, 0xF0D490C, 0xF0D4A0C, 0x5000000, 0xF000F30, 0xE0D4B0C, 0x15090000, 0xE0D4D0C, 0x1210310E, 0xD4C0C12, 0x100E0D4E, 0xC19FFD8, 0xE0D4F0C, 0x19FFD500, }; -static s32 D_80A163BC[4] = { 0x100060E, 0xDFE0C12, 0x100E0DFF, 0xC121000 }; -static s32 D_80A163CC[4] = { 0x100060E, 0xE000C12, 0x100E0E01, 0xC121000 }; -static s32 D_80A163DC[4] = { 0x100060E, 0xE020C12, 0x100E0E03, 0xC121000 }; -static s32 D_80A163EC[4] = { 0x100060E, 0xE040C12, 0x100E0E05, 0xC121000 }; -static s32 D_80A163FC[4] = { 0x100060E, 0xE060C12, 0x100E0E07, 0xC121000 }; -static s32 D_80A1640C[2] = { 0xE023A0C, 0x12100000 }; +// MsgEvent script for one of the Goron stretchers at the racetrack (Initially stretching side to side while squatting). +static s32 sMsgScriptGoronAthleticA[] = { 0x100060E, 0xDFE0C12, 0x100E0DFF, 0xC121000 }; + +// MsgEvent script for one of the Goron stretchers at the racetrack (Initially doing sidebend stretches with one arm). +static s32 sMsgScriptGoronAthleticB[] = { 0x100060E, 0xE000C12, 0x100E0E01, 0xC121000 }; + +// MsgEvent script for one of the Goron stretchers at the racetrack (Initially shaking out their limbs). +static s32 sMsgScriptGoronAthleticC[] = { 0x100060E, 0xE020C12, 0x100E0E03, 0xC121000 }; + +// MsgEvent script for one of the Goron stretchers (Initially doing sidebend stretches with both arms). +static s32 sMsgScriptGoronAthleticD[] = { 0x100060E, 0xE040C12, 0x100E0E05, 0xC121000 }; + +// MsgEvent script for the pair of Gorons stretching one Goron's hamstrings. +static s32 sMsgScriptGoronAthleticHamstring[] = { 0x100060E, 0xE060C12, 0x100E0E07, 0xC121000 }; + +// MsgEvent script for any sleeping Goron. +static s32 sMsgScriptGoronSleeping[] = { 0xE023A0C, 0x12100000 }; ActorInit En_Go_InitVars = { ACTOR_EN_GO, @@ -111,7 +293,8 @@ static ColliderSphereInit sSphereInit = { { 0, { { 0, 0, 0 }, 0 }, 100 }, }; -static ColliderCylinderInit sCylinderInit1 = { +// Collider for the frozen solid Gorons. +static ColliderCylinderInit sCylinderInitFrozen = { { COLTYPE_METAL, AT_ON | AT_TYPE_ENEMY, @@ -131,7 +314,8 @@ static ColliderCylinderInit sCylinderInit1 = { { 0, 0, 0, { 0, 0, 0 } }, }; -static ColliderCylinderInit sCylinderInit2 = { +// Collider for normal Gorons. +static ColliderCylinderInit sCylinderInit = { { COLTYPE_HIT1, AT_NONE, @@ -153,42 +337,55 @@ static ColliderCylinderInit sCylinderInit2 = { static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE }; +typedef enum { + /* 0x0 */ ENGO_DMGEFF_NONE, + /* 0x2 */ ENGO_DMGEFF_FIRE = 0x2, + /* 0xF */ ENGO_DMGEFF_BREAK = 0xF +} EnGoDamageEffect; + static DamageTable sDamageTable = { - /* Deku Nut */ DMG_ENTRY(1, 0x0), - /* Deku Stick */ DMG_ENTRY(1, 0x0), - /* Horse trample */ DMG_ENTRY(1, 0x0), - /* Explosives */ DMG_ENTRY(1, 0x0), - /* Zora boomerang */ DMG_ENTRY(1, 0x0), - /* Normal arrow */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x06 */ DMG_ENTRY(1, 0x0), - /* Hookshot */ DMG_ENTRY(1, 0x0), - /* Goron punch */ DMG_ENTRY(1, 0xF), - /* Sword */ DMG_ENTRY(1, 0x0), - /* Goron pound */ DMG_ENTRY(1, 0xF), - /* Fire arrow */ DMG_ENTRY(1, 0x2), - /* Ice arrow */ DMG_ENTRY(1, 0x0), - /* Light arrow */ DMG_ENTRY(1, 0x0), - /* Goron spikes */ DMG_ENTRY(1, 0xF), - /* Deku spin */ DMG_ENTRY(1, 0x0), - /* Deku bubble */ DMG_ENTRY(1, 0x0), - /* Deku launch */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x12 */ DMG_ENTRY(1, 0x0), - /* Zora barrier */ DMG_ENTRY(1, 0x0), - /* Normal shield */ DMG_ENTRY(1, 0x0), - /* Light ray */ DMG_ENTRY(1, 0x0), - /* Thrown object */ DMG_ENTRY(1, 0x0), - /* Zora punch */ DMG_ENTRY(1, 0x0), - /* Spin attack */ DMG_ENTRY(1, 0x0), - /* Sword beam */ DMG_ENTRY(1, 0x0), - /* Normal Roll */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(1, 0x0), - /* Unblockable */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(1, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0x0), + /* Deku Nut */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Deku Stick */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Horse trample */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Explosives */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Zora boomerang */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Normal arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x06 */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Hookshot */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Goron punch */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK), + /* Sword */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Goron pound */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK), + /* Fire arrow */ DMG_ENTRY(1, ENGO_DMGEFF_FIRE), + /* Ice arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Light arrow */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Goron spikes */ DMG_ENTRY(1, ENGO_DMGEFF_BREAK), + /* Deku spin */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Deku bubble */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Deku launch */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x12 */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Zora barrier */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Normal shield */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Light ray */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Thrown object */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Zora punch */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Spin attack */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Sword beam */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Normal Roll */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x1B */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x1C */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Unblockable */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* UNK_DMG_0x1E */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), + /* Powder Keg */ DMG_ENTRY(1, ENGO_DMGEFF_NONE), }; +/** + * Animations used in the actor. + * + * @see EnGoAnimationIndex + */ static AnimationInfoS sAnimationInfo[] = { + + /* Animations for generic Goron actions */ { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronLyingDownIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronUnrollAnim, 2.0f, 0, -1, ANIMMODE_ONCE, 0 }, @@ -200,366 +397,453 @@ static AnimationInfoS sAnimationInfo[] = { { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronShiveringSurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, - { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_0016C8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_0031D8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + /* Animations for stretching Gorons at the racetrack */ + { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsSquatSideToSideAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsHamstringStretchSittingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsShoutAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_hakugin_demo_Anim_001420, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_hakugin_demo_Anim_001A4C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_hakugin_demo_Anim_002704, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, - { &object_hakugin_demo_Anim_003378, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + /* Animations for the Goron during the spring arrival cutscene */ + { &gGoronSpringShowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gGoronSpringShowLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gGoronSpringLookAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, + { &gGoronSpringLookAroundLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, }; -EnGoStruct* func_80A10FD0(EnGoStruct* ptr, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 arg4, f32 arg5, s32 arg6) { +/** + * Initialize the latter section of the effects in 'effectTable' to be of type ENGO_EFFECT_STEAM. + * + * @param effect Latter section of the EnGoEffect table (&effectTable[ENGO_SNOW_EFFECT_COUNT]) + * @param pos Initial pos + * @param accel Initial acceleration + * @param velocity Initial velocity + * @param scale Initial scale + * @param deltaScale How much the effect scales per frame (additive) + * @param maxFrames Maximum number of frames the effect will last. Actual lifetime will be between 'maxFrames / 3' and + * 'maxFrames' + */ +EnGoEffect* EnGo_InitSteam(EnGoEffect effect[ENGO_OTHER_EFFECT_COUNT], Vec3f pos, Vec3f accel, Vec3f velocity, + f32 scale, f32 deltaScale, s32 maxFrames) { s32 i; - for (i = 16; i < 32; i++, ptr++) { - if (ptr->unk_00 == 0) { - ptr->unk_00 = 7; - ptr->unk_01 = (Rand_ZeroOne() * (2.0f * (arg6 / 3.0f))) + (arg6 / 3.0f); - ptr->unk_02 = ptr->unk_01; - ptr->unk_10 = arg1; - ptr->unk_1C = arg2; - ptr->unk_28 = arg3; - ptr->unk_34 = arg4; - ptr->unk_38 = arg5; - break; + // Steam effects are from the end of the snow effects to the end of all effects + for (i = ENGO_SNOW_EFFECT_COUNT; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_NONE) { + continue; } - } - return ptr; + effect->type = ENGO_EFFECT_STEAM; + effect->alphaDenom = (Rand_ZeroOne() * (2.0f * (maxFrames / 3.0f))) + (maxFrames / 3.0f); + effect->alphaNumer = effect->alphaDenom; + effect->pos = pos; + effect->accel = accel; + effect->velocity = velocity; + effect->scaleXY = scale; + effect->scaleXYDelta = deltaScale; + break; + } + return effect; } -void func_80A11144(EnGoStruct* ptr, PlayState* play) { - s32 pad; +/** + * Draw all effects of type ENGO_EFFECT_STEAM. + * + * @param effect The EnGoEffect table + */ +void EnGo_DrawSteam(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { + PlayState* play = play2; s32 i; - s32 flag = false; - f32 temp; + s32 isMaterialSet = false; + f32 alpha; OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Xlu(play->state.gfxCtx); - - for (i = 0; i < 32; i++, ptr++) { - - if (ptr->unk_00 == 7) { - gDPPipeSync(POLY_XLU_DISP++); - - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, gGoronSteamMaterialDL); - flag = true; - } - - Matrix_Push(); - - temp = ((f32)ptr->unk_02 / ptr->unk_01); - temp *= 255; - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)temp); - gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, (ptr->unk_02 + (i * 3)) * 3, - (ptr->unk_02 + (i * 3)) * 15, 0x20, 0x40, 1, 0, 0, 0x20, 0x20)); - - Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(ptr->unk_34, ptr->unk_34, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gGoronSteamModelDL); - - Matrix_Pop(); - if (play->state.gfxCtx) {} + for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_STEAM) { + continue; } + + gDPPipeSync(POLY_XLU_DISP++); + if (!isMaterialSet) { + gSPDisplayList(POLY_XLU_DISP++, gGoronSteamMaterialDL); + isMaterialSet = true; + } + + Matrix_Push(); + + alpha = (f32)effect->alphaNumer / effect->alphaDenom; + alpha *= 255.0f; + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)alpha); + gSPSegment(POLY_XLU_DISP++, 0x08, + Gfx_TwoTexScroll(play->state.gfxCtx, 0, (effect->alphaNumer + (i * 3)) * 3, + (effect->alphaNumer + (i * 3)) * 15, 0x20, 0x40, 1, 0, 0, 0x20, 0x20)); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(effect->scaleXY, effect->scaleXY, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gGoronSteamModelDL); + + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -void func_80A1143C(EnGoStruct* ptr, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32 arg4, f32 arg5, s32 arg6, s32 arg7) { +/** + * Initialize the first available effect to be of type 'ENGO_EFFECT_DUST1'/'2'/'3'. + * + * @param effect Latter section of the EnGoEffect table (&effectTable[ENGO_SNOW_EFFECT_COUNT]) + * @param pos Initial pos + * @param accel Initial acceleration + * @param velocity Initial velocity + * @param scale Initial scale + * @param deltaScale How much the effect scales per frame (additive) + * @param maxFrames Maximum number of frames the effect will last. Actual lifetime will be 1/3 * maxFrames -> maxFrames + * @param parentEffectType Type of the parent effect, determines which of the possible dust effects correspond + */ +void EnGo_InitDust(EnGoEffect effect[ENGO_OTHER_EFFECT_COUNT], Vec3f pos, Vec3f accel, Vec3f vel, f32 scale, + f32 deltaScale, s32 maxFrames, EnGoEffectType parentEffectType) { s32 i; - for (i = 16; i < 32; i++, ptr++) { - if (ptr->unk_00 == 0) { - ptr->unk_00 = arg7 + 4; - - ptr->unk_01 = (Rand_ZeroOne() * (2.0f * (arg6 / 3.0f))) + (arg6 / 3.0f); - ptr->unk_02 = ptr->unk_01; - - ptr->unk_10 = arg1; - ptr->unk_1C = arg2; - ptr->unk_28 = arg3; - ptr->unk_34 = arg4; - ptr->unk_38 = arg5; - break; + // Dust effects are from the end of the snow effects to the end of all effects. + for (i = ENGO_SNOW_EFFECT_COUNT; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_NONE) { + continue; } + + effect->type = parentEffectType + ENGO_EFFECT_DUST_MIN; + effect->alphaDenom = (Rand_ZeroOne() * (2.0f * (maxFrames / 3.0f))) + (maxFrames / 3.0f); + effect->alphaNumer = effect->alphaDenom; + effect->pos = pos; + effect->accel = accel; + effect->velocity = vel; + effect->scaleXY = scale; + effect->scaleXYDelta = deltaScale; + break; } } -void func_80A115B4(EnGoStruct* ptr, PlayState* play) { +/** + * Draw all effects of type 'ENGO_EFFECT_DUST1'/'2'/'3'. + * + * @param effect The EnGoEffect table + */ +void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { static TexturePtr sDustTextures[] = { gEffDust8Tex, gEffDust7Tex, gEffDust6Tex, gEffDust5Tex, gEffDust4Tex, gEffDust3Tex, gEffDust2Tex, gEffDust1Tex, }; - static Color_RGBA8 D_80A16664[] = { - { 255, 255, 255, 0 }, - { 170, 130, 90, 0 }, - { 0, 0, 0, 0 }, + static Color_RGBA8 sEnGoDustPrimColor[] = { + { 255, 255, 255, 0 }, // White + { 170, 130, 90, 0 }, // Light Brown + { 0, 0, 0, 0 }, // Black }; - static Color_RGBA8 D_80A16670[] = { - { 255, 255, 255, 0 }, - { 100, 60, 20, 0 }, - { 0, 0, 0, 0 }, + static Color_RGBA8 sEnGoDustEnvColor[] = { + { 255, 255, 255, 0 }, // White + { 100, 60, 20, 0 }, // Dark Brown + { 0, 0, 0, 0 }, // Black }; + PlayState* play = play2; s32 i; - u8 flag = false; - f32 temp; + u8 isMaterialSet = false; + f32 alpha; OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Xlu(play->state.gfxCtx); - - for (i = 0; i < 32; i++, ptr++) { - if ((ptr->unk_00 >= 4) && (ptr->unk_00 < 7)) { - if (!flag) { - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); - flag = true; - } - Matrix_Push(); - - temp = (f32)ptr->unk_02 / ptr->unk_01; - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80A16664[(s32)ptr->unk_00 - 4].r, - D_80A16664[(s32)ptr->unk_00 - 4].g, D_80A16664[(s32)ptr->unk_00 - 4].b, (u8)(temp * 255)); - gDPSetEnvColor(POLY_XLU_DISP++, D_80A16670[(s32)ptr->unk_00 - 4].r, D_80A16670[(s32)ptr->unk_00 - 4].g, - D_80A16670[(s32)ptr->unk_00 - 4].b, 0); - - Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW); - Matrix_Scale(ptr->unk_34, ptr->unk_34, 1.0f, MTXMODE_APPLY); - Matrix_ReplaceRotation(&play->billboardMtxF); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[(s32)(temp * 7.0f)])); - gSPDisplayList(POLY_XLU_DISP++, gGoronDustModelDL); - - Matrix_Pop(); + for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { + if ((effect->type < ENGO_EFFECT_DUST_MIN) || (effect->type >= ENGO_EFFECT_STEAM_MIN)) { + continue; } - if (play->state.gfxCtx) {} + + if (!isMaterialSet) { + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); + gSPDisplayList(POLY_XLU_DISP++, gGoronDustMaterialDL); + isMaterialSet = true; + } + + Matrix_Push(); + + alpha = (f32)effect->alphaNumer / effect->alphaDenom; + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].r, + sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].g, + sEnGoDustPrimColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].b, (u8)(alpha * UINT8_MAX)); + gDPSetEnvColor(POLY_XLU_DISP++, sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].r, + sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].g, + sEnGoDustEnvColor[(s32)effect->type - ENGO_EFFECT_DUST_MIN].b, 0); + + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(effect->scaleXY, effect->scaleXY, 1.0f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[(s32)(alpha * 7.0f)])); + gSPDisplayList(POLY_XLU_DISP++, gGoronDustModelDL); + + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -#ifdef NON_MATCHING -void func_80A118F8(EnGoStruct* ptr, Vec3f arg1) { - static u8 D_80A1667C[] = { - 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, +/** + * Initialize the snowball break effects. + * + * Half of the elements will be 'ENGO_EFFECT_SNOW1'/'2'/'3' randomly generated around the character. The second half + * will be dedicated 'ENGO_EFFECT_DUST1'/'2'/'3' paired with the snow. + * + * @param effect The EnGoEffect table + * @param pos Position around which the effects appear + */ +void EnGo_InitSnow(EnGoEffect effect[ENGO_EFFECT_COUNT], Vec3f pos) { + static u8 effectIndexToSnowEffectTable[] = { + ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, + ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, + ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, + ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, }; - EnGoStruct* ptr2 = &ptr[16]; + + EnGoEffect* dustEffects = &effect[ENGO_SNOW_EFFECT_COUNT]; s32 i; - Vec3f spB4; - Vec3f spA8; - f32 temp_f20; + Vec3f randRelativeToWorldPos; + Vec3f randYOneToFour; + f32 velMagnitude; - for (i = 0; i < 16; i++, ptr++) { - if (ptr->unk_00 == 0) { - ptr->unk_10 = arg1; - ptr->unk_10.y += 56.0f; - - ptr->unk_04.x = (Rand_ZeroOne() - 0.5f) * 5460.0f; - ptr->unk_04.y = (Rand_ZeroOne() - 0.5f) * 5460.0f; - ptr->unk_04.z = (Rand_ZeroOne() - 0.5f) * 5460.0f; - - temp_f20 = (Rand_ZeroOne() * 4.0f) + 6.0f; - ptr->unk_28.x = Math_SinS(i * 0x1000) * temp_f20; - ptr->unk_28.z = Math_CosS(i * 0x1000) * temp_f20; - ptr->unk_28.y = (Rand_ZeroOne() * 3.0f) + 6.0f; - - ptr->unk_1C = gZeroVec3f; - ptr->unk_1C.y = -0.8f; - - ptr->unk_01 = ptr->unk_02 = 1; - ptr->unk_00 = D_80A1667C[i]; - - spB4.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + ptr->unk_10.x; - spB4.y = ((Rand_ZeroOne() - 0.5f) * 40.0f) + ptr->unk_10.y; - spB4.z = ((Rand_ZeroOne() - 0.5f) * 80.0f) + ptr->unk_10.z; - - spA8 = gZeroVec3f; - spA8.y = (Rand_ZeroOne() * 3.0f) + 1.0f; - - func_80A1143C(ptr2, spB4, gZeroVec3f, spA8, 0.6f, 0.2f, 16, 0); + // Snow effects consume the first part of the effects table, and are paired with dust effects in the latter part + for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) { + if (effect->type != ENGO_EFFECT_NONE) { + continue; } + + effect->pos = pos; + effect->pos.y += 56.0f; + + // Generate a +-15 degree rotational velocity + effect->rotVelocity.x = (Rand_ZeroOne() - 0.5f) * (f32)0x1554; + effect->rotVelocity.y = (Rand_ZeroOne() - 0.5f) * (f32)0x1554; + effect->rotVelocity.z = (Rand_ZeroOne() - 0.5f) * (f32)0x1554; + + // Generate a radially outward velocity for each of the effects + velMagnitude = (Rand_ZeroOne() * 4.0f) + 6.0f; + effect->velocity.x = Math_SinS(i * (0x10000 / ENGO_SNOW_EFFECT_COUNT)) * velMagnitude; + effect->velocity.z = Math_CosS(i * (0x10000 / ENGO_SNOW_EFFECT_COUNT)) * velMagnitude; + effect->velocity.y = (Rand_ZeroOne() * 3.0f) + 6.0f; + + // No acceleration on the X,Z axis, negative acceleration on the Y axis + effect->accel = gZeroVec3f; + effect->accel.y = -0.8f; + + // Full visibility (1/1) + effect->alphaDenom = effect->alphaNumer = 1; + + // Assign a snow effect value of 'ENGO_EFFECT_SNOW1'/'2'/'3' + effect->type = effectIndexToSnowEffectTable[i]; + + // Initialize the parameters for the paired element + randRelativeToWorldPos.x = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.x; + randRelativeToWorldPos.y = ((Rand_ZeroOne() - 0.5f) * 40.0f) + effect->pos.y; + randRelativeToWorldPos.z = ((Rand_ZeroOne() - 0.5f) * 80.0f) + effect->pos.z; + + randYOneToFour = gZeroVec3f; + randYOneToFour.y = (Rand_ZeroOne() * 3.0f) + 1.0f; + + // Initialize the paired element. + EnGo_InitDust(dustEffects, randRelativeToWorldPos, gZeroVec3f, randYOneToFour, 0.6f, 0.2f, + ENGO_DUST_STEAM_LIFETIME, 0); } } -#else -static u8 D_80A1667C[] = { - 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, -}; -void func_80A118F8(EnGoStruct* ptr, Vec3f arg1); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Go/func_80A118F8.s") -#endif -void func_80A11BF8(EnGoStruct* ptr, f32 arg1) { - f32 test; - f32 test2; +/** + * Update the snow effect's movement. + * + * When the snow drops to the ground, it is converted to dust. + * + * @param effect Pointer to the effect to update + * @param dustConversionHeight Height above the ground at which to convert the effect to dust + */ +void EnGo_UpdateSnow(EnGoEffect* effect, f32 dustConversionHeight) { f32 x; f32 z; - ptr->unk_10.x += ptr->unk_28.x; - ptr->unk_10.y += ptr->unk_28.y; - ptr->unk_10.z += ptr->unk_28.z; + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; - ptr->unk_28.y += ptr->unk_1C.y; - ptr->unk_34 += ptr->unk_38; + effect->velocity.y += effect->accel.y; + effect->scaleXY += effect->scaleXYDelta; - if (ptr->unk_10.y < arg1) { - ptr->unk_10.y = arg1; + if (effect->pos.y < dustConversionHeight) { + effect->pos.y = dustConversionHeight; - ptr->unk_00 = 4; - ptr->unk_01 = (Rand_ZeroOne() * 8.0f) + 4.0f; - ptr->unk_02 = ptr->unk_01; + effect->type = ENGO_EFFECT_DUST1; + effect->alphaDenom = (Rand_ZeroOne() * 8.0f) + 4.0f; + effect->alphaNumer = effect->alphaDenom; - ptr->unk_28 = gZeroVec3f; - ptr->unk_28.y = (Rand_ZeroOne() * 3.0f) + 1.0f; + effect->velocity = gZeroVec3f; + effect->velocity.y = (Rand_ZeroOne() * 3.0f) + 1.0f; - ptr->unk_34 = 0.4f; - ptr->unk_38 = 0.1f; + effect->scaleXY = 0.4f; + effect->scaleXYDelta = 0.1f; return; } - if (ptr->unk_28.x != 0.0f) { - x = ptr->unk_28.x / fabsf(ptr->unk_28.x); - x *= ((sREG(13) + 140) * 0.01f); - Math_StepToF(&ptr->unk_28.x, x, (sREG(14) + 40) * 0.01f); + if (effect->velocity.x != 0.0f) { + x = effect->velocity.x / fabsf(effect->velocity.x); + x *= (sREG(13) + 140) * 0.01f; + Math_StepToF(&effect->velocity.x, x, (sREG(14) + 40) * 0.01f); } - if (ptr->unk_28.z != 0.0f) { - z = ptr->unk_28.z / fabsf(ptr->unk_28.z); + if (effect->velocity.z != 0.0f) { + z = effect->velocity.z / fabsf(effect->velocity.z); z *= ((sREG(13) + 140) * 0.01f); - Math_StepToF(&ptr->unk_28.z, z, (sREG(14) + 40) * 0.01f); + Math_StepToF(&effect->velocity.z, z, (sREG(14) + 40) * 0.01f); } - ptr->unk_0A.x += ptr->unk_04.x; - ptr->unk_0A.y += ptr->unk_04.y; - ptr->unk_0A.z += ptr->unk_04.z; + effect->rotAngle.x += effect->rotVelocity.x; + effect->rotAngle.y += effect->rotVelocity.y; + effect->rotAngle.z += effect->rotVelocity.z; } -#ifdef NON_MATCHING -void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 arg4) { +/** + * Draw all effects of type 'ENGO_EFFECT_SNOW1'/'2'/'3'. + * + * @param effect The EnGoEffect table + * @param material Snow Material + * @param model Snow Model + * @param type Snow Effect type to draw + */ +void EnGo_DrawSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], PlayState* play, Gfx* material, Gfx* model, + u8 effectType) { s32 i; - u8 flag = false; + u8 isMaterialSet = false; OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL25_Opa(play->state.gfxCtx); - - for (i = 0; i < 16; i++, ptr++) { - if (ptr->unk_00 == arg4) { - if (!flag) { - gSPDisplayList(POLY_OPA_DISP++, arg2); - flag = true; - } - - Matrix_Push(); - Matrix_Translate(ptr->unk_10.x, ptr->unk_10.y, ptr->unk_10.z, MTXMODE_NEW); - Matrix_Scale(0.08f, 0.08f, 0.08f, MTXMODE_APPLY); - Matrix_RotateZS(ptr->unk_0A.z, MTXMODE_APPLY); - Matrix_RotateXS(ptr->unk_0A.x, MTXMODE_APPLY); - Matrix_RotateYS(ptr->unk_0A.y, MTXMODE_APPLY); - - if (1) { - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, arg3); - } - - Matrix_Pop(); + for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) { + if (effect->type != effectType) { + continue; } + + if (!isMaterialSet) { + gSPDisplayList(POLY_OPA_DISP++, material); + isMaterialSet = true; + } + + Matrix_Push(); + Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); + Matrix_Scale(0.08f, 0.08f, 0.08f, MTXMODE_APPLY); + Matrix_RotateZS(effect->rotAngle.z, MTXMODE_APPLY); + Matrix_RotateXS(effect->rotAngle.x, MTXMODE_APPLY); + Matrix_RotateYS(effect->rotAngle.y, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, model); + + Matrix_Pop(); } CLOSE_DISPS(play->state.gfxCtx); } -#else -void func_80A11EC0(EnGoStruct* ptr, PlayState* play, Gfx* arg2, Gfx* arg3, u8 arg4); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Go/func_80A11EC0.s") -#endif -void func_80A1203C(EnGo* this) { - EnGoStruct* ptr = this->unk_3F8; +/** + * Update all effects, potentially fading them away to nothing. + */ +void EnGo_UpdateEffects(EnGo* this) { + EnGoEffect* effect = this->effectTable; s32 i; - for (i = 0; i < ARRAY_COUNT(this->unk_3F8); i++, ptr++) { - if (ptr->unk_00 != 0) { - if (ptr->unk_02 == 0) { - ptr->unk_00 = 0; - } else if ((ptr->unk_00 > 0) && (ptr->unk_00 < 4)) { - func_80A11BF8(ptr, this->actor.world.pos.y); - } else { - ptr->unk_10.x += ptr->unk_28.x; - ptr->unk_10.y += ptr->unk_28.y; - ptr->unk_10.z += ptr->unk_28.z; + for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { + if (effect->type == ENGO_EFFECT_NONE) { + continue; + } - ptr->unk_28.x += ptr->unk_1C.x; - ptr->unk_28.y += ptr->unk_1C.y; - ptr->unk_28.z += ptr->unk_1C.z; + if (effect->alphaNumer == 0) { + // End usage of the effect + effect->type = ENGO_EFFECT_NONE; + } else if ((effect->type > ENGO_EFFECT_NONE) && (effect->type < ENGO_EFFECT_DUST_MIN)) { + // Snow rotates, and changes to dust upon dropping below the actor position + EnGo_UpdateSnow(effect, this->actor.world.pos.y); + } else { + // Dust and steam move according to their initial values + effect->pos.x += effect->velocity.x; + effect->pos.y += effect->velocity.y; + effect->pos.z += effect->velocity.z; - ptr->unk_34 += ptr->unk_38; - ptr->unk_02--; - } + effect->velocity.x += effect->accel.x; + effect->velocity.y += effect->accel.y; + effect->velocity.z += effect->accel.z; + + effect->scaleXY += effect->scaleXYDelta; + effect->alphaNumer--; } } } -void func_80A1213C(EnGo* this, PlayState* play) { - func_80A11EC0(this->unk_3F8, play, gGoronLargeSnowballFragmentMaterialDL, gGoronLargeSnowballFragmentModelDL, 1); - func_80A11EC0(this->unk_3F8, play, gGoronMediumSnowballFragmentMaterialDL, gGoronMediumSnowballFragmentModelDL, 2); - func_80A11EC0(this->unk_3F8, play, gGoronSmallSnowballFragmentMaterialDL, gGoronSmallSnowballFragmentModelDL, 3); - func_80A11144(this->unk_3F8, play); - func_80A115B4(this->unk_3F8, play); +/** + * Draw all effects. + */ +void EnGo_DrawEffects(EnGo* this, PlayState* play) { + EnGo_DrawSnow(this->effectTable, play, gGoronLargeSnowballFragmentMaterialDL, gGoronLargeSnowballFragmentModelDL, + ENGO_EFFECT_SNOW1); + EnGo_DrawSnow(this->effectTable, play, gGoronMediumSnowballFragmentMaterialDL, gGoronMediumSnowballFragmentModelDL, + ENGO_EFFECT_SNOW2); + EnGo_DrawSnow(this->effectTable, play, gGoronSmallSnowballFragmentMaterialDL, gGoronSmallSnowballFragmentModelDL, + ENGO_EFFECT_SNOW3); + EnGo_DrawSteam(this->effectTable, play); + EnGo_DrawDust(this->effectTable, play); } -s32 func_80A121F4(PlayState* play) { +/** + * Check if the Goron can hurt the player. + */ +s32 EnGo_CanSnowballHurtPlayer(PlayState* play) { Player* player = GET_PLAYER(play); if ((player->transformation == PLAYER_FORM_GORON) && (player->stateFlags3 & PLAYER_STATE3_2000000)) { return false; + } else { + return true; } - return true; } -s32 func_80A1222C(EnGo* this, PlayState* play) { +/** + * Check if the Goron is falling asleep. + */ +s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); - s32 ret = false; + s32 isFallingAsleep = false; if (((player->transformation == PLAYER_FORM_GORON) && (play->msgCtx.ocarinaMode == 3) && - (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->unk_3EC == 0) && + (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) && (this->sleepState == ENGO_AWAKE) && (this->actor.xzDistToPlayer < 400.0f)) || - (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04) && (play->sceneId == SCENE_16GORON_HOUSE) && - (gSaveContext.sceneLayer == 0) && (this->unk_3EC == 0) && (play->csCtx.scriptIndex == 1))) { - ret = true; + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON) && (play->sceneId == SCENE_16GORON_HOUSE) && + (gSaveContext.sceneLayer == 0) && (this->sleepState == ENGO_AWAKE) && (play->csCtx.scriptIndex == 1))) { + isFallingAsleep = true; } - return ret; + return isFallingAsleep; } -s32 func_80A122EC(EnGo* this) { - static Vec3f D_80A1668C = { 0.0f, 100.0f, 160.0f }; +/** + * Update the actor's focus. + */ +s32 EnGo_UpdateFocus(EnGo* this) { + static Vec3f sMedigoronPos = { 0.0f, 100.0f, 160.0f }; s32 pad; - f32 sp20 = 58.0f; + f32 yAxisOffsetToFocusPoint = 58.0f; - if (ENGO_GET_F(&this->actor) == ENGO_F_8) { - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A1668C, + if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) { + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sMedigoronPos, &this->actor.focus.pos); } else { - if ((this->unk_390 & 0x200) || (this->unk_390 & 0x100)) { - sp20 = this->actor.shape.yOffset; + if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) || (this->actionFlags & ENGO_FLAG_SNOWBALLED)) { + yAxisOffsetToFocusPoint = this->actor.shape.yOffset; } Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos); - this->actor.focus.pos.y += sp20; + this->actor.focus.pos.y += yAxisOffsetToFocusPoint; } this->actor.focus.rot.x = this->actor.world.rot.x; @@ -568,21 +852,24 @@ s32 func_80A122EC(EnGo* this) { return false; } -void func_80A123A0(EnGo* this, PlayState* play) { - Vec3f sp2C; +/** + * Update the collider for the snowball form of the Goron Shrine gatekeeper. + */ +void EnGo_UpdateSnowballCollider(EnGo* this, PlayState* play) { + Vec3f worldPos; - Math_Vec3f_Copy(&sp2C, &this->actor.world.pos); + Math_Vec3f_Copy(&worldPos, &this->actor.world.pos); - this->colliderSphere.dim.worldSphere.center.x = sp2C.x; - this->colliderSphere.dim.worldSphere.center.y = sp2C.y; + this->colliderSphere.dim.worldSphere.center.x = worldPos.x; + this->colliderSphere.dim.worldSphere.center.y = worldPos.y; this->colliderSphere.dim.worldSphere.center.y += (s16)this->actor.shape.yOffset; - this->colliderSphere.dim.worldSphere.center.z = sp2C.z; + this->colliderSphere.dim.worldSphere.center.z = worldPos.z; this->colliderSphere.dim.modelSphere.radius = 48; this->colliderSphere.dim.worldSphere.radius = this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale; - if (func_80A121F4(play)) { + if (EnGo_CanSnowballHurtPlayer(play)) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderSphere.base); } @@ -590,175 +877,203 @@ void func_80A123A0(EnGo* this, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base); } -void func_80A124A0(EnGo* this, PlayState* play) { +/** + * Update the collider for the Medigoron in the Powder Keg Shop. + */ +void EnGo_UpdateMedigoronCollider(EnGo* this, PlayState* play) { this->colliderSphere.dim.worldSphere.radius = this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale; CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base); } -void func_80A124FC(EnGo* this, PlayState* play) { - Vec3f sp1C; +/** + * Update the collider for the rolled up form of a Goron. + */ +void EnGo_UpdateRolledUpCollider(EnGo* this, PlayState* play) { + Vec3f worldPos; - Math_Vec3f_Copy(&sp1C, &this->actor.world.pos); - - this->colliderSphere.dim.worldSphere.center.x = sp1C.x; - this->colliderSphere.dim.worldSphere.center.y = sp1C.y; + Math_Vec3f_Copy(&worldPos, &this->actor.world.pos); + this->colliderSphere.dim.worldSphere.center.x = worldPos.x; + this->colliderSphere.dim.worldSphere.center.y = worldPos.y; this->colliderSphere.dim.worldSphere.center.y += (s16)this->actor.shape.yOffset; - this->colliderSphere.dim.worldSphere.center.z = sp1C.z; - + this->colliderSphere.dim.worldSphere.center.z = worldPos.z; this->colliderSphere.dim.modelSphere.radius = 20; this->colliderSphere.dim.worldSphere.radius = this->colliderSphere.dim.modelSphere.radius * this->colliderSphere.dim.scale; - CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderSphere.base); } -void func_80A125BC(EnGo* this, PlayState* play) { +/** + * Update the collider for the frozen form of a Goron. + */ +void EnGo_UpdateFrozenCollider(EnGo* this, PlayState* play) { s32 pad; Math_Vec3f_ToVec3s(&this->colliderCylinder.dim.pos, &this->actor.world.pos); - this->colliderCylinder.dim.radius = 46; this->colliderCylinder.dim.height = 78; - - if (this->unk_3C6 == 0) { + if (this->harmlessTimer == 0) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->colliderCylinder.base); } CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderCylinder.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base); } -void func_80A12660(EnGo* this, PlayState* play) { +/** + * Update the collider for all standing forms of a Goron. + */ +void EnGo_UpdateStandingCollider(EnGo* this, PlayState* play) { Math_Vec3f_ToVec3s(&this->colliderCylinder.dim.pos, &this->actor.world.pos); this->colliderCylinder.dim.radius = 24; this->colliderCylinder.dim.height = 62; CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base); } -void func_80A126BC(EnGo* this, PlayState* play) { +/** + * Update the collider for the Goron. + * + * Both the rolling snowball and frozen forms can hurt Player on collision, others do not. + */ +void EnGo_UpdateCollider(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); if (!(player->stateFlags2 & PLAYER_STATE2_4000)) { - if (this->unk_3C6 != 0) { - this->unk_3C6--; - } + DECR(this->harmlessTimer); } - - if (ENGO_GET_F(&this->actor) == ENGO_F_8) { - func_80A124A0(this, play); - } else if (this->unk_390 & 0x100) { - func_80A123A0(this, play); - } else if (this->unk_390 & 0x200) { - func_80A124FC(this, play); - } else if (this->unk_390 & 0x400) { - func_80A125BC(this, play); + if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) { + EnGo_UpdateMedigoronCollider(this, play); + } else if (this->actionFlags & ENGO_FLAG_SNOWBALLED) { + EnGo_UpdateSnowballCollider(this, play); + } else if (this->actionFlags & ENGO_FLAG_ROLLED_UP) { + EnGo_UpdateRolledUpCollider(this, play); + } else if (this->actionFlags & ENGO_FLAG_FROZEN) { + EnGo_UpdateFrozenCollider(this, play); } else { - func_80A12660(this, play); + EnGo_UpdateStandingCollider(this, play); } } -s32 func_80A12774(EnGo* this, PlayState* play) { - if (!(this->unk_390 & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { +/** + * Check if the actor is talking, and if so set the action function to handle it. + * + * @return True if talking + */ +s32 EnGo_UpdateTalking(EnGo* this, PlayState* play) { + if (!(this->actionFlags & 7) || !Actor_ProcessTalkRequest(&this->actor, &play->state)) { return false; } - if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_1)) { - if (!(this->unk_390 & 0x200)) { - this->unk_390 |= 8; + if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC)) { + if (!(this->actionFlags & ENGO_FLAG_ROLLED_UP)) { + this->actionFlags |= ENGO_FLAG_ENGAGED; } } - if ((ENGO_GET_F(&this->actor) == ENGO_F_5) || (ENGO_GET_F(&this->actor) == ENGO_F_6) || - (ENGO_GET_F(&this->actor) == ENGO_F_7)) { - this->unk_3BC = 0; - this->unk_3BE = 0; - this->unk_390 |= 0x20; + if ((ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_STORE) || (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSROOM) || + (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSSON)) { + this->blinkTimer = 0; + this->eyeTexIndex = ENGO_EYETEX_OPEN; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; } - SubS_UpdateFlags(&this->unk_390, 0, 7); - this->unk_3C0 = 0; - this->unk_3C4 = 0; - this->unk_18C = this->actionFunc; - this->actionFunc = func_80A157C4; + SubS_UpdateFlags(&this->actionFlags, 0, 7); + this->cutsceneState = 0; + this->gatekeeperAnimState = 0; + this->interruptedActionFunc = this->actionFunc; + this->actionFunc = EnGo_Talk; return true; } -s32 func_80A12868(EnGo* this, PlayState* play) { - this->unk_390 &= ~0x800; - this->unk_390 &= ~0x1000; - this->unk_390 &= ~0x2000; +/** + * Detect any collisions, and convert detections to object specific 'actionFlags'. + */ +s32 EnGo_DetectCollisions(EnGo* this, PlayState* play) { + this->actionFlags &= ~ENGO_FLAG_HIT_OTHER; + this->actionFlags &= ~ENGO_FLAG_HIT_BY_OTHER; + this->actionFlags &= ~ENGO_FLAG_HIT_OBJ; if ((this->colliderCylinder.base.atFlags & AT_HIT) || (this->colliderSphere.base.atFlags & AT_HIT)) { this->colliderCylinder.base.atFlags &= ~AT_HIT; this->colliderSphere.base.atFlags &= ~AT_HIT; - this->unk_390 |= 0x800; - this->unk_3C6 = 0x28; + this->actionFlags |= ENGO_FLAG_HIT_OTHER; + this->harmlessTimer = 40; } if ((this->colliderCylinder.base.acFlags & AC_HIT) || (this->colliderSphere.base.acFlags & AC_HIT)) { this->colliderCylinder.base.acFlags &= ~AC_HIT; this->colliderSphere.base.acFlags &= ~AC_HIT; - this->unk_390 |= 0x1000; + this->actionFlags |= ENGO_FLAG_HIT_BY_OTHER; } if ((this->colliderCylinder.base.ocFlags1 & OC1_HIT) || (this->colliderSphere.base.ocFlags1 & OC1_HIT)) { this->colliderCylinder.base.ocFlags1 &= ~OC1_HIT; this->colliderSphere.base.ocFlags1 &= ~OC1_HIT; - this->unk_390 |= 0x2000; + this->actionFlags |= ENGO_FLAG_HIT_OBJ; } return false; } -s32 func_80A12954(EnGo* this, PlayState* play) { - if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (play->csCtx.state != CS_STATE_IDLE) && (this->actor.draw != NULL) && - (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && +/** + * Start, or finish, the cutscene for the arrival of springtime. + */ +s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { + if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && (play->csCtx.state != CS_STATE_IDLE) && + (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { - if (this->unk_3F0 == 0) { + if (this->springArrivalCutsceneActive == false) { this->actor.flags &= ~ACTOR_FLAG_1; - this->cueId = 255; - this->unk_3F0 = 1; - this->unk_18C = this->actionFunc; + this->springArrivalCueId = 255; + this->springArrivalCutsceneActive = true; + this->interruptedActionFunc = this->actionFunc; } - SubS_UpdateFlags(&this->unk_390, 0, 7); - this->actionFunc = func_80A14FC8; - } else if (this->unk_3F0 != 0) { + SubS_UpdateFlags(&this->actionFlags, 0, 7); + this->actionFunc = EnGo_HandleSpringArrivalCutscene; + } else if (this->springArrivalCutsceneActive) { this->actor.flags |= ACTOR_FLAG_1; - this->cueId = 255; - this->unk_3F0 = 0; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->actionFunc = this->unk_18C; + this->springArrivalCueId = 255; + this->springArrivalCutsceneActive = false; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->actionFunc = this->interruptedActionFunc; } return false; } -s32 func_80A12A64(EnGo* this, PlayState* play) { - s8 objIdx = this->actor.objBankIndex; - s8 objIdx2 = -1; - s32 ret = 0; +/** + * Update the animation to the actor's currently set value. + * + * @return True if non-repeating animation has finished + */ +s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play) { + s8 objIndex = this->actor.objBankIndex; + s8 extraObjIndex = -1; + s32 ret = false; - if ((this->unk_3DC >= 18) && (this->unk_289 >= 0)) { - objIdx2 = this->unk_289; - } else if ((this->unk_3DC >= 10) && (this->unk_288 >= 0)) { - objIdx2 = this->unk_288; - } else if (this->unk_3DC < 10) { - objIdx2 = this->actor.objBankIndex; + if ((this->curAnimIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { + extraObjIndex = this->hakuginDemoObjIndex; + } else if ((this->curAnimIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { + extraObjIndex = this->taisouObjIndex; + } else if (this->curAnimIndex < ENGO_ANIM_ATHLETICS_MIN) { + extraObjIndex = this->actor.objBankIndex; } - if (objIdx2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx2].segment); - this->skelAnime.playSpeed = this->unk_398; + if (extraObjIndex >= 0) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + this->skelAnime.playSpeed = this->curAnimPlaySpeed; ret = SkelAnime_Update(&this->skelAnime); - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx].segment); + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } return ret; } -s32 func_80A12B78(EnGo* this, PlayState* play) { +/** + * Update sound effects based on animation. + */ +s32 EnGo_UpdateSfx(EnGo* this, PlayState* play) { if (play->csCtx.state == CS_STATE_IDLE) { - if (this->unk_3DC == 4) { + if (this->curAnimIndex == ENGO_ANIM_ROLL) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE); } @@ -766,7 +1081,7 @@ s32 func_80A12B78(EnGo* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 22.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SIT_IMT); } - } else if ((this->unk_3DC == 2) || (this->unk_3DC == 3)) { + } else if ((this->curAnimIndex == ENGO_ANIM_UNROLL) || (this->curAnimIndex == ENGO_ANIM_UNROLL_IMM)) { if (Animation_OnFrame(&this->skelAnime, 2.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_CIRCLE_OFF); } @@ -779,189 +1094,231 @@ s32 func_80A12B78(EnGo* this, PlayState* play) { return 0; } -s32 func_80A12C48(EnGo* this, PlayState* play, s32 arg2) { - s8 objIdx = this->actor.objBankIndex; - s8 objIdx2 = -1; +/** + * Change the Goron's animation. + * + * Goron animations come from one of three categories: + * - Basic Goron animations + * - Goron athletics like stretches, cheers, etc... + * - Spring arrival cutscene animations + * Changing animations with this function handles the transitions between the three categories. + * + * @return True if animation was changed + */ +s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex) { + s8 objIndex = this->actor.objBankIndex; + s8 extraObjIndex = -1; s32 ret = false; - if ((arg2 >= 18) && (this->unk_289 >= 0)) { - objIdx2 = this->unk_289; - } else if ((arg2 >= 10) && (this->unk_288 >= 0)) { - objIdx2 = this->unk_288; - } else if (arg2 < 10) { - objIdx2 = this->actor.objBankIndex; + if ((animIndex >= ENGO_ANIM_SPRING_MIN) && (this->hakuginDemoObjIndex >= 0)) { + extraObjIndex = this->hakuginDemoObjIndex; + } else if ((animIndex >= ENGO_ANIM_ATHLETICS_MIN) && (this->taisouObjIndex >= 0)) { + extraObjIndex = this->taisouObjIndex; + } else if (animIndex < ENGO_ANIM_ATHLETICS_MIN) { + extraObjIndex = this->actor.objBankIndex; } - if (objIdx2 >= 0) { - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx2].segment); - this->unk_3DC = arg2; - ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg2); - this->unk_398 = this->skelAnime.playSpeed; - gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIdx].segment); + if (extraObjIndex >= 0) { + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[extraObjIndex].segment); + this->curAnimIndex = animIndex; + ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex); + this->curAnimPlaySpeed = this->skelAnime.playSpeed; + gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objIndex].segment); } return ret; } -void func_80A12D6C(EnGo* this) { - if ((this->unk_390 & 0x20) && (DECR(this->unk_3BC) == 0)) { - this->unk_3BE++; - if (this->unk_3BE >= 4) { - this->unk_3BC = Rand_S16Offset(30, 30); - this->unk_3BE = 0; +/** + * Update the eye textures to blink. + */ +void EnGo_UpdateEyes(EnGo* this) { + if (this->actionFlags & ENGO_FLAG_EYES_OPEN) { + if (DECR(this->blinkTimer) == 0) { + this->eyeTexIndex++; + if (this->eyeTexIndex >= ENGO_EYETEX_CLOSED2) { + this->blinkTimer = Rand_S16Offset(30, 30); + this->eyeTexIndex = ENGO_EYETEX_OPEN; + } } } } -void func_80A12DF4(EnGo* this, PlayState* play) { - if (this->unk_3D4 == 0) { - func_80A12C48(this, play, 9); - this->unk_3D4++; - } else if ((this->unk_3D4 == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A12C48(this, play, 6); - this->unk_3D4++; +/** + * Play the surprise animation then return to shivering. + */ +void EnGo_UpdateShiverSurprisedAnimation(EnGo* this, PlayState* play) { + if (this->surprisePhase == 0) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVERINGSURPRISED); + this->surprisePhase++; + } else if ((this->surprisePhase == 1) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER_IMM); + this->surprisePhase++; } } -s32 func_80A12E80(EnGo* this, PlayState* play) { - u16 temp = play->msgCtx.currentTextId; +/** + * Change the attention target, and dialog reactions of the Gorons outside Darmani's grave. + */ +s32 EnGo_UpdateGraveyardAttentionTargetAndReactions(EnGo* this, PlayState* play) { + u16 textId = play->msgCtx.currentTextId; Player* player = GET_PLAYER(play); - if (ENGO_GET_F(&this->actor) != ENGO_F_4) { + if (ENGO_GET_TYPE(&this->actor) != ENGO_GRAVEYARD) { return false; } if (player->stateFlags1 & PLAYER_STATE1_40) { - if (this->unk_392 != temp) { - switch (temp) { - case 0xE1A: - this->unk_390 |= 8; - this->unk_38C = this->actor.child; + if (this->lastTextId != textId) { + switch (textId) { + case 0xE1A: // Awakening from frozen form, confused, turn to other Goron + this->actionFlags |= ENGO_FLAG_ENGAGED; + this->attentionTarget = this->actor.child; break; - case 0xE1D: - case 0xE25: - if (ENGO_GET_70(&this->actor) == ENGO_70_1) { - this->unk_38C = &GET_PLAYER(play)->actor; + case 0xE1D: // Turn to player (Goron form) while stating Darmani is dead + case 0xE25: // Turn to player (Other form) while thanking player + if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) { + this->attentionTarget = &GET_PLAYER(play)->actor; } break; - case 0xE27: - if (ENGO_GET_70(&this->actor) == ENGO_70_1) { - this->unk_38C = this->actor.child; + case 0xE27: // (spoken) "What's this?..." + if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) { + this->attentionTarget = this->actor.child; } - case 0xE16: - case 0xE1E: - this->unk_190 = func_80A12DF4; + case 0xE16: // Surprised, questioning if player is Darmani + case 0xE1E: // Surprised, seeing Darmani + this->graveyardDialogActionFunc = EnGo_UpdateShiverSurprisedAnimation; break; - case 0xE1F: - if (ENGO_GET_70(&this->actor) == ENGO_70_0) { - this->unk_38C = &GET_PLAYER(play)->actor; + case 0xE1F: // Turn to player stating Darmani is not dead + if (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_GRAVEMAKER) { + this->attentionTarget = &GET_PLAYER(play)->actor; } break; + + default: + break; } } - this->unk_3F4 = 1; - this->unk_392 = temp; - } else if (this->unk_3F4 != 0) { - this->unk_3F4 = 0; - this->unk_190 = NULL; - this->unk_392 = 0; - func_80A12C48(this, play, 5); - this->unk_390 &= ~8; + this->changedText = true; + this->lastTextId = textId; + } else if (this->changedText) { + // If the player isn't talking, and the text has changed, its the last text. + // Set everything back to the "Idle" behavior. + this->changedText = false; + this->graveyardDialogActionFunc = NULL; + this->lastTextId = 0; + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); + this->actionFlags &= ~ENGO_FLAG_ENGAGED; } - if (this->unk_190 != NULL) { - this->unk_190(this, play); + if (this->graveyardDialogActionFunc != NULL) { + this->graveyardDialogActionFunc(this, play); } return false; } -s32 func_80A12FE8(EnGo* this, PlayState* play) { +/** + * Update the actor's rotation to point towards the target. + */ +s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play) { s32 pad; - Vec3f sp40; - Vec3f sp34; - s16 sp32; + Vec3f targetPos; + Vec3f thisPos; + s16 desiredYaw; - Math_Vec3f_Copy(&sp40, &this->unk_38C->world.pos); - Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - sp32 = Math_Vec3f_Yaw(&sp34, &sp40); + Math_Vec3f_Copy(&targetPos, &this->attentionTarget->world.pos); + Math_Vec3f_Copy(&thisPos, &this->actor.world.pos); + desiredYaw = Math_Vec3f_Yaw(&thisPos, &targetPos); - Math_ApproachS(&this->unk_3B2, (sp32 - this->unk_3B6) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_3B2 = CLAMP(this->unk_3B2, -0x1FFE, 0x1FFE); + Math_ApproachS(&this->headRotY, (desiredYaw - this->bodyRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE); - Math_ApproachS(&this->unk_3B6, (sp32 - this->unk_3B2) - this->actor.shape.rot.y, 4, 0x2AA8); - this->unk_3B6 = CLAMP(this->unk_3B6, -0x1C70, 0x1C70); + Math_ApproachS(&this->bodyRotY, (desiredYaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8); + this->bodyRotY = CLAMP(this->bodyRotY, -0x1C70, 0x1C70); - Math_Vec3f_Copy(&sp34, &this->actor.focus.pos); - - if (this->unk_38C->id == ACTOR_PLAYER) { - sp40.y = ((Player*)this->unk_38C)->bodyPartsPos[7].y + 3.0f; + Math_Vec3f_Copy(&thisPos, &this->actor.focus.pos); + if (this->attentionTarget->id == ACTOR_PLAYER) { + targetPos.y = ((Player*)this->attentionTarget)->bodyPartsPos[7].y + 3.0f; } else { - Math_Vec3f_Copy(&sp40, &this->unk_38C->focus.pos); + Math_Vec3f_Copy(&targetPos, &this->attentionTarget->focus.pos); } - Math_ApproachS(&this->unk_3B0, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_3B4, 4, 0x2AA8); - this->unk_3B0 = CLAMP(this->unk_3B0, -0x1554, 0x1554); + Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&thisPos, &targetPos) - this->bodyRotZ, 4, 0x2AA8); + this->headRotZ = CLAMP(this->headRotZ, -0x1554, 0x1554); - Math_ApproachS(&this->unk_3B4, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_3B0, 4, 0x2AA8); - this->unk_3B4 = CLAMP(this->unk_3B4, -0xE38, 0xE38); + Math_ApproachS(&this->bodyRotZ, Math_Vec3f_Pitch(&thisPos, &targetPos) - this->headRotZ, 4, 0x2AA8); + this->bodyRotZ = CLAMP(this->bodyRotZ, -0xE38, 0xE38); return false; } -s32 func_80A131F8(EnGo* this, PlayState* play) { - if (this->unk_3F4 == 0) { - this->unk_38C = &GET_PLAYER(play)->actor; +/** + * Handle updating of Goron's attention target, and reactions during dialog. + */ +s32 EnGo_UpdateAttentionTargetAndReactions(EnGo* this, PlayState* play) { + if (!this->changedText) { + this->attentionTarget = &GET_PLAYER(play)->actor; } - func_80A12E80(this, play); + EnGo_UpdateGraveyardAttentionTargetAndReactions(this, play); - if (this->unk_390 & 8) { - this->unk_390 &= ~0x40; - this->unk_390 |= 0x10; - func_80A12FE8(this, play); - } else if (this->unk_390 & 0x10) { - this->unk_390 &= ~0x10; - this->unk_3B0 = 0; - this->unk_3B2 = 0; - this->unk_3B4 = 0; - this->unk_3B6 = 0; - this->unk_3BA = 0x14; - } else if (DECR(this->unk_3BA) == 0) { - this->unk_390 |= 0x40; - this->unk_3BA = 0x14; + if (this->actionFlags & ENGO_FLAG_ENGAGED) { + this->actionFlags &= ~ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_FACE_TARGET; + EnGo_UpdateRotationToTarget(this, play); + } else if (this->actionFlags & ENGO_FLAG_FACE_TARGET) { + this->actionFlags &= ~ENGO_FLAG_FACE_TARGET; + this->headRotZ = 0; + this->headRotY = 0; + this->bodyRotZ = 0; + this->bodyRotY = 0; + this->loseAttentionTimer = 20; + } else if (DECR(this->loseAttentionTimer) == 0) { + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->loseAttentionTimer = 20; } return true; } -void func_80A132C8(EnGo* this, PlayState* play) { +/** + * Idle action function for the gravemaker at the Goron Graveyard. + */ +void EnGo_GravemakerIdle(EnGo* this, PlayState* play) { Player* player = GET_PLAYER(play); - s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); + s16 deltaYaw = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y); if ((fabsf(this->actor.playerHeightRel) > 20.0f) || (this->actor.xzDistToPlayer > 300.0f)) { - SubS_UpdateFlags(&this->unk_390, 3, 7); - } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(temp_v1) >= 0x1C70) || - CHECK_WEEKEVENTREG(WEEKEVENTREG_21_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) { - SubS_UpdateFlags(&this->unk_390, 3, 7); + SubS_UpdateFlags(&this->actionFlags, 3, 7); + } else if ((player->transformation != PLAYER_FORM_GORON) || (ABS_ALT(deltaYaw) >= 0x1C70) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) { + SubS_UpdateFlags(&this->actionFlags, 3, 7); } else { - SubS_UpdateFlags(&this->unk_390, 4, 7); + SubS_UpdateFlags(&this->actionFlags, 4, 7); } } -void func_80A133A8(EnGo* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08)) { - SubS_UpdateFlags(&this->unk_390, 3, 7); +/** + * Idle action function for the Goron frozen at the Goron Graveyard + */ +void EnGo_FrozenIdle(EnGo* this, PlayState* play) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON)) { + SubS_UpdateFlags(&this->actionFlags, 3, 7); } else { - SubS_UpdateFlags(&this->unk_390, 4, 7); + SubS_UpdateFlags(&this->actionFlags, 4, 7); } } -Actor* func_80A13400(EnGo* this, PlayState* play) { +/** + * Obtain a pointer to the gravemaker at the Goron Graveyard. + */ +Actor* EnGo_FindGravemaker(EnGo* this, PlayState* play) { Actor* actor; Actor* retActor = NULL; @@ -969,8 +1326,8 @@ Actor* func_80A13400(EnGo* this, PlayState* play) { actor = SubS_FindActor(play, retActor, ACTORCAT_NPC, ACTOR_EN_GO); retActor = actor; - if ((actor != NULL) && ((EnGo*)actor != this) && (ENGO_GET_F(actor) == ENGO_F_4) && - (ENGO_GET_70(actor) == ENGO_70_0)) { + if ((actor != NULL) && ((EnGo*)actor != this) && (ENGO_GET_TYPE(actor) == ENGO_GRAVEYARD) && + (ENGO_GET_SUBTYPE(actor) == ENGO_GRAVEYARD_GRAVEMAKER)) { return retActor; } @@ -988,15 +1345,27 @@ Actor* func_80A13400(EnGo* this, PlayState* play) { return NULL; } -void func_80A134B0(EnGo* this, PlayState* play, s32 arg2) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_80) || (play->actorCtx.flags & ACTORCTX_FLAG_0) || arg2) { +/** + * The Medigoron's collider radius is greater when it needs to be able to drop the Powder Keg in front of the player. + */ +void EnGo_UpdateMedigoronColliderRadius(EnGo* this, PlayState* play, s32 isGivenPowderKeg) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES) || + (play->actorCtx.flags & ACTORCTX_FLAG_0) // Same check occurs in Powder Keg ammo check MsgScript Command + || isGivenPowderKeg) { this->colliderSphere.dim.modelSphere.radius = 300; } else { this->colliderSphere.dim.modelSphere.radius = 380; } } -s32 func_80A134F4(EnGo* this, s16 csId) { +/** + * Helper to change a cutscene. + * + * @returns Status of cutscene change + * @retval true Cutscene has started + * @retval false Cutscene is queued to start + */ +s32 EnGo_ChangeCutscene(EnGo* this, s16 csId) { if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); } else if (CutsceneManager_IsNext(csId)) { @@ -1007,44 +1376,66 @@ s32 func_80A134F4(EnGo* this, s16 csId) { return false; } -s32 func_80A13564(EnGo* this, f32 arg1, f32 arg2, s32 arg3) { +/** + * Handle the animation of the "Goron Pound". + * + * There are Several Phases to the pound: + * - Phase 1: (Once in Rolled-Up form) the pound starts by leaping into the air. + * - The Goron rotates until its back faces the ground at its peak. + * - The Goron distorts shape until at its peak. + * - Transition: At the peak, all movement is halted. + * - Phase 2: While hanging, the Goron reverts back to normal shape. + * - Transition: At reaching maxHangTime, ENGO_POUND_INITIAL_FALL_VEL is applied. + * - Phase 3: The Goron falls to the ground. + * - Transition: At reaching the ground. + * + * @param initialVelocity Initial +Y velocity of the pound. + * @param maxDistortion Maximum distortion of the Goron's shape. + * @param maxHangtime Maximum hangtime at the peak of the pound. + * @returns True when pound finishes. + */ +s32 EnGo_HandleGatekeeperPoundCutscene(EnGo* this, f32 initialVelocity, f32 maxDistortion, s32 maxHangtime) { s32 pad; - f32 temp_f0 = 1.0f; - f32 temp_f14 = this->actor.velocity.y + this->actor.gravity; - s32 ret; + f32 rotAndDistortFactor = 1.0f; + f32 velocity = this->actor.velocity.y + this->actor.gravity; + s32 isFinished; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - ret = true; + // Transition 3->DONE + isFinished = true; } else { - if (temp_f14 > 0.0f) { - temp_f0 = temp_f14 / arg1; - this->actor.shape.rot.x += (s16)(9100.0f * temp_f0); - this->unk_3AE = 0; + if (velocity > 0.0f) { + // PHASE 1: Goron is rising + rotAndDistortFactor = velocity / initialVelocity; + this->actor.shape.rot.x += (s16)(0x238C * rotAndDistortFactor); + this->elapsedHangtime = 0; } else if ((s32)this->actor.velocity.y == 0) { - if (arg3 >= this->unk_3AE) { - temp_f0 = (f32)this->unk_3AE / arg3; + if (maxHangtime >= this->elapsedHangtime) { + // PHASE 2: Goron is hanging in the air + rotAndDistortFactor = (f32)this->elapsedHangtime / maxHangtime; } else { - this->actor.gravity = -6.0f; + // Transition 2->3: Hanging is complete + this->actor.gravity = ENGO_POUND_INITIAL_FALL_VEL; } - this->unk_3AE++; - } else if (this->unk_3AE == 0) { + this->elapsedHangtime++; + } else if (this->elapsedHangtime == 0) { + // Transition 1->2: Goron has reached the peak this->actor.velocity.y = 0.0f; this->actor.gravity = 0.0f; - temp_f0 = temp_f14 / arg1; + rotAndDistortFactor = velocity / initialVelocity; + } else { + // PHASE 3: Goron is falling (Just letting gravity take effect) } - ret = false; + isFinished = false; } - this->unk_3A8 = (1.0f - temp_f0) * arg2; - this->actor.scale.x = this->unk_3A4 - this->unk_3A8; - this->actor.scale.y = this->unk_3A4 + this->unk_3A8; + // Handle shape distortions + this->scaleFactorPoundDistortion = (1.0f - rotAndDistortFactor) * maxDistortion; + this->actor.scale.x = this->scaleFactor - this->scaleFactorPoundDistortion; + this->actor.scale.y = this->scaleFactor + this->scaleFactorPoundDistortion; + this->actor.scale.z = MAX(this->actor.scale.x, this->actor.scale.y); - if (this->actor.scale.y < this->actor.scale.x) { - this->actor.scale.z = this->actor.scale.x; - } else { - this->actor.scale.z = this->actor.scale.y; - } - return ret; + return isFinished; } void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) { @@ -1055,7 +1446,10 @@ void EnGo_RequestQuake(PlayState* play, s16 speed, s16 y, s16 duration) { Quake_SetPerturbations(quakeIndex, y, 0, 0, 0); } -void func_80A13728(EnGo* this, PlayState* play) { +/** + * Create the visual effects caused by the gatekeeper's pound. + */ +void EnGo_CreateGatekeeperPoundEffects(EnGo* this, PlayState* play) { EnGo_RequestQuake(play, 27767, 7, 20); play->actorCtx.unk2 = 4; Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TEST, this->actor.world.pos.x, this->actor.world.pos.y, @@ -1063,11 +1457,14 @@ void func_80A13728(EnGo* this, PlayState* play) { EffectSsBlast_SpawnWhiteShockwave(play, &this->actor.world.pos, &gZeroVec3f, &gZeroVec3f); } -void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { - u32 frames1; - u32 frames2; +/** + * Draw the ice encasing a frozen Goron. + */ +void EnGo_DrawIceBlockWhenFrozen(EnGo* this, PlayState* play, f32 scale, f32 alpha) { + u32 y1; + u32 y2; - if (this->unk_390 & 0x400) { + if (this->actionFlags & ENGO_FLAG_FROZEN) { Matrix_Push(); OPEN_DISPS(play->state.gfxCtx); @@ -1075,15 +1472,15 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); - Matrix_Scale(arg2 * 0.7f, arg2 * 0.8f, arg2, MTXMODE_APPLY); + Matrix_Scale(scale * 0.7f, scale * 0.8f, scale, MTXMODE_APPLY); func_800B8118(&this->actor, play, 0); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - frames1 = play->gameplayFrames % 256; - frames2 = (play->gameplayFrames * 2) % 256; + y1 = play->gameplayFrames % 256; + y2 = (play->gameplayFrames * 2) % 256; gSPSegment(POLY_XLU_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, frames1, 0x20, 0x10, 1, 0, frames2, 0x40, 0x20)); - gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)arg3); + Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, y1, 0x20, 0x10, 1, 0, y2, 0x40, 0x20)); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, (u8)alpha); gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL); CLOSE_DISPS(play->state.gfxCtx); @@ -1092,154 +1489,172 @@ void func_80A137C0(EnGo* this, PlayState* play, f32 arg2, f32 arg3) { } } -void func_80A139E4(EnGo* this) { - static Vec3f D_80A16698 = { 0.0f, 0.06f, 0.0f }; - Vec3f sp54; - Vec3f sp48; - s16 sp46 = Rand_ZeroOne() * 360.0f * 182.0f; +/** + * Initialize the steam effect used for melting ice. + */ +void EnGo_MakeSteam(EnGo* this) { + static Vec3f sAccel = { 0.0f, 0.06f, 0.0f }; + Vec3f tempPos; + Vec3f effectPos; + s16 rotAngle = Rand_ZeroOne() * 360.0f * 182.0f; - Math_Vec3f_Copy(&sp54, &gZeroVec3f); - sp54.z = 28.0f; - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, sp46, &sp54, &sp48); - sp48.y = (Rand_ZeroOne() * 10.0f) + 4.0f; - sp48.y += this->actor.floorHeight; - func_80A10FD0(&this->unk_3F8[16], sp48, D_80A16698, gZeroVec3f, 0.01f, 0.002f, 16); + Math_Vec3f_Copy(&tempPos, &gZeroVec3f); + tempPos.z = 28.0f; + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, rotAngle, &tempPos, &effectPos); + effectPos.y = (Rand_ZeroOne() * 10.0f) + 4.0f; + effectPos.y += this->actor.floorHeight; + EnGo_InitSteam(&this->effectTable[ENGO_SNOW_EFFECT_COUNT], effectPos, sAccel, gZeroVec3f, ENGO_NORMAL_SCALE, + (0.2f * ENGO_NORMAL_SCALE), ENGO_DUST_STEAM_LIFETIME); } -s32 func_80A13B1C(EnGo* this, PlayState* play) { +/** + * Transition through the cutscenes when the gatekeeper is opening the shrine. + * + * @return True when cutscenes end. + */ +s32 EnGo_HandleOpenShrineCutscene(Actor* thisx, PlayState* play) { Player* player = GET_PLAYER(play); - s32 pad; + EnGo* this = THIS; s32 ret = false; - switch (this->unk_3C0) { + switch (this->cutsceneState) { case 0: this->csId = CutsceneManager_GetAdditionalCsId(this->actor.csId); - if (func_80A134F4(this, this->csId)) { - this->unk_3C4 = 1; - this->unk_3C0 = 1; - } else { + if (!EnGo_ChangeCutscene(this, this->csId)) { break; } - + this->gatekeeperAnimState = 1; + this->cutsceneState = 1; + // fallthrough case 1: - if (CutsceneManager_GetCurrentCsId() != this->csId) { - this->csId = CutsceneManager_GetAdditionalCsId(this->csId); - this->unk_3C0 = 2; - } else { + if (CutsceneManager_GetCurrentCsId() == this->csId) { break; } - + this->csId = CutsceneManager_GetAdditionalCsId(this->csId); + this->cutsceneState = 2; + // fallthrough case 2: - if (func_80A134F4(this, this->csId)) { - this->unk_3C0 = 3; - } else { + if (!EnGo_ChangeCutscene(this, this->csId)) { break; } - + this->cutsceneState = 3; + // fallthrough case 3: if (CutsceneManager_IsNext(CS_ID_GLOBAL_TALK)) { CutsceneManager_StartWithPlayerCs(CS_ID_GLOBAL_TALK, NULL); - this->unk_3C0 = 4; + this->cutsceneState = 4; } else if (CutsceneManager_GetCurrentCsId() == this->csId) { CutsceneManager_Queue(CS_ID_GLOBAL_TALK); } + // fallthrough + default: + break; } - switch (this->unk_3C4) { + switch (this->gatekeeperAnimState) { case 1: - func_80A12C48(this, play, 4); - this->unk_390 |= 0x4000; - this->unk_3C4++; + EnGo_ChangeAnim(this, play, ENGO_ANIM_ROLL); + this->actionFlags |= ENGO_FLAG_ROLLING_UP; + this->gatekeeperAnimState++; break; case 2: if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->unk_390 &= ~0x4000; - this->unk_390 &= ~0x80; - this->unk_390 |= 0x200; - this->unk_3C4++; - this->unk_3C2 = 0; - this->actor.shape.yOffset = 14.0f; + this->actionFlags &= ~ENGO_FLAG_ROLLING_UP; + this->actionFlags &= ~ENGO_FLAG_STANDING; + this->actionFlags |= ENGO_FLAG_ROLLED_UP; + this->gatekeeperAnimState++; + this->cutsceneDelayTimer = 0; + this->actor.shape.yOffset = ENGO_ROLLEDUP_Y_OFFSET; } break; case 3: - this->unk_3C2++; - if (this->unk_3C2 >= 10) { + this->cutsceneDelayTimer++; + if (this->cutsceneDelayTimer >= 10) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_JUMP); - this->actor.velocity.y = 10.0f; + this->actor.velocity.y = ENGO_POUND_INITIAL_RISE_VEL; this->actor.gravity = -1.0f; - this->unk_3C4++; + this->gatekeeperAnimState++; } break; case 4: - if (func_80A13564(this, 10.0f, 0.004f, 6)) { + if (EnGo_HandleGatekeeperPoundCutscene(this, ENGO_POUND_INITIAL_RISE_VEL, (0.4f) * ENGO_NORMAL_SCALE, 6)) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_LAND_BIG); - func_80A13728(this, play); - this->unk_3C4++; - this->unk_3C2 = 0; - SET_WEEKEVENTREG(WEEKEVENTREG_88_40); + EnGo_CreateGatekeeperPoundEffects(this, play); + this->gatekeeperAnimState++; + this->cutsceneDelayTimer = 0; + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE); } break; case 5: - this->unk_3C2++; - if (this->unk_3C2 >= 10) { - func_80A12C48(this, play, 5); + this->cutsceneDelayTimer++; + if (this->cutsceneDelayTimer >= 10) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); this->actor.shape.rot.x = 0; - this->unk_390 &= ~0x200; - this->unk_390 |= 0x80; - this->unk_3C4++; + this->actionFlags &= ~ENGO_FLAG_ROLLED_UP; + this->actionFlags |= ENGO_FLAG_STANDING; + this->gatekeeperAnimState++; } break; case 6: - this->unk_3C0++; - if (this->unk_3C0 >= 65) { + this->cutsceneState++; + if (this->cutsceneState >= 65) { switch (player->transformation) { case PLAYER_FORM_HUMAN: - SET_WEEKEVENTREG(WEEKEVENTREG_88_80); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN); break; case PLAYER_FORM_GORON: - SET_WEEKEVENTREG(WEEKEVENTREG_89_04); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON); break; case PLAYER_FORM_ZORA: - SET_WEEKEVENTREG(WEEKEVENTREG_89_02); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA); break; case PLAYER_FORM_DEKU: - SET_WEEKEVENTREG(WEEKEVENTREG_89_01); + SET_WEEKEVENTREG(WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU); + break; + + default: break; } ret = true; } break; + + default: + break; } Actor_MoveWithGravity(&this->actor); return ret; } -s32 func_80A13E80(EnGo* this, PlayState* play) { - static Vec3f D_80A166A4 = { 0.0f, 200.0f, 280.0f }; - s32 pad; - Vec3f sp48; +/** + * Medigoron's MsgEvent callback to give the Powder Keg for the test. + */ +s32 EnGo_HandleGivePowderKegCutscene(Actor* thisx, PlayState* play) { + static Vec3f sPowderKegSpawnOffset = { 0.0f, 200.0f, 280.0f }; + EnGo* this = THIS; + Vec3f powderKegSpawnPos; s32 ret = false; - switch (this->unk_3C0) { + switch (this->cutsceneState) { case 0: this->csId = this->actor.csId; - if (func_80A134F4(this, this->csId)) { - this->unk_3C0++; + if (EnGo_ChangeCutscene(this, this->csId)) { + this->cutsceneState++; } break; case 1: - func_80A12C48(this, play, 7); - this->unk_3C0++; + EnGo_ChangeAnim(this, play, ENGO_ANIM_DROPKEG); + this->cutsceneState++; case 2: if (Animation_OnFrame(&this->skelAnime, 16.0f)) { @@ -1247,263 +1662,348 @@ s32 func_80A13E80(EnGo* this, PlayState* play) { } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A12C48(this, play, 1); - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166A4, &sp48); + EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE_IMM); + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sPowderKegSpawnOffset, + &powderKegSpawnPos); gSaveContext.powderKegTimer = 2400; - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, sp48.x, sp48.y, sp48.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, - 0, 0, BOMB_TYPE_BODY); - func_80A134B0(this, play, 1); - this->unk_3C2 = 0; - this->unk_3C0++; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, powderKegSpawnPos.x, powderKegSpawnPos.y, + powderKegSpawnPos.z, BOMB_EXPLOSIVE_TYPE_POWDER_KEG, 0, 0, BOMB_TYPE_BODY); + EnGo_UpdateMedigoronColliderRadius(this, play, true); + this->cutsceneDelayTimer = 0; + this->cutsceneState++; } break; case 3: - if (this->unk_3C2 >= 60) { + if (this->cutsceneDelayTimer >= 60) { CutsceneManager_Stop(this->csId); - this->unk_3C2 = 0; - this->unk_3C0 = 0; + this->cutsceneDelayTimer = 0; + this->cutsceneState = 0; ret = true; } else { - this->unk_3C2++; + this->cutsceneDelayTimer++; } break; + + default: + break; } return ret; } -void func_80A14018(EnGo* this, PlayState* play) { - static Vec3f D_80A166B0 = { 0.0f, 0.0f, 40.0f }; - static s32 D_80A166BC[] = { 11, 10, 12, 13, 14, 17 }; - Vec3f sp2C; - s32 phi_v0 = ENGO_GET_70(&this->actor) % 6; +/** + * Update the stretching racer's animation and actionFlags. + * + * 'ENGO_ATHLETIC_A' through 'ENGO_ATHLETIC_D' exchange animations before and after the race, while the hamstring + * stretchers have the same animation every time. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play) { + static Vec3f sStretchingGoronOffset = { 0.0f, 0.0f, 40.0f }; + static s32 sSubtypeToAnimIndex[] = { + ENGO_ANIM_SQUAT_SIDE_TO_SIDE, ENGO_ANIM_DOUBLE_ARM_SIDEBEND, ENGO_ANIM_SHAKE_LIMBS, + ENGO_ANIM_SINGLE_ARM_SIDEBEND, ENGO_ANIM_SITTING_STRETCH, ENGO_ANIM_HELP_SITTING_STRETCH, + }; + Vec3f newSittingStretcherPos; - if (phi_v0 < 4) { - phi_v0 = ((gSaveContext.eventInf[2] & 0xF) + phi_v0) % 4; + // The first four Racer Gorons have different stretches depending on context + // The last two remain the same (since they are dependent on one-another) + s32 subtypeLookup = ENGO_GET_SUBTYPE(&this->actor) % 6; + + if (subtypeLookup < 4) { + subtypeLookup = ((gSaveContext.eventInf[2] & 0xF) + subtypeLookup) % 4; } - func_80A12C48(this, play, D_80A166BC[phi_v0]); + EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[subtypeLookup]); - if (this->unk_3DC == 14) { - Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80A166B0, &sp2C); - Math_Vec3f_Copy(&this->actor.world.pos, &sp2C); + // Move the sitting Goron forward, since their spawn location is the same as their standing counterpart. + if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { + + Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &sStretchingGoronOffset, + &newSittingStretcherPos); + Math_Vec3f_Copy(&this->actor.world.pos, &newSittingStretcherPos); } + this->actor.flags &= ~ACTOR_FLAG_1; - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_3EC = 0; - this->unk_390 = 0; - this->unk_390 |= (0x40 | 0x20); + Actor_SetScale(&this->actor, this->scaleFactor); + this->sleepState = ENGO_AWAKE; + this->actionFlags = 0; + this->actionFlags |= (ENGO_FLAG_LOST_ATTENTION | ENGO_FLAG_EYES_OPEN); this->actor.gravity = 0.0f; } -void func_80A14104(EnGo* this, PlayState* play) { - static s32 D_80A166D4[] = { 15, 16 }; - s16 temp; +/** + * Update the Goron's animation and actionFlags to 'spectating'. + * + * Spectators engage in one of two cheering animations. Either cheering with their hands above their head, or + * cupping their hands infront of their face and shouting. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play) { + static s32 sSubtypeToAnimIndex[] = { ENGO_ANIM_CHEER, ENGO_ANIM_SHOUT }; + s16 animFrame; + + EnGo_ChangeAnim(this, play, sSubtypeToAnimIndex[ENGO_GET_SUBTYPE(&this->actor) % 2]); + animFrame = Rand_ZeroOne() * this->skelAnime.endFrame; + this->skelAnime.curFrame = animFrame; - func_80A12C48(this, play, D_80A166D4[ENGO_GET_70(&this->actor) % 2]); - temp = Rand_ZeroOne() * this->skelAnime.endFrame; - this->skelAnime.curFrame = temp; this->actor.flags &= ~ACTOR_FLAG_1; - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_3EC = 0; - this->unk_390 = 0; - this->unk_390 |= 0x40; - this->unk_390 |= 0x20; + Actor_SetScale(&this->actor, this->scaleFactor); + this->sleepState = ENGO_AWAKE; + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; this->actor.gravity = 0.0f; } -void func_80A141D4(EnGo* this, PlayState* play) { - Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit1); +/** + * Update the Goron's animation and actionFlags to 'frozen'. + * + * The Goron will shiver upon awakening, but is otherwise encased in a block of ice which deals damage upon contact. + * + * @see EnGo_Frozen + */ +void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play) { + Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInitFrozen); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->unk_3DC = -1; - func_80A12C48(this, play, 5); - this->unk_3EC = 0; - this->unk_39C = (this->unk_3A4 / 0.01f) * 0.9f; - this->unk_3BE = 2; - this->unk_390 = 0; - this->unk_390 |= 0x40; - this->unk_390 |= 0x400; - this->unk_3A0 = 100.0f; + this->curAnimIndex = -1; + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); + this->sleepState = ENGO_AWAKE; + this->iceBlockScale = (this->scaleFactor / 0.01f) * 0.9f; + this->eyeTexIndex = ENGO_EYETEX_CLOSED; + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_FROZEN; + this->iceBlockAlpha = 100.0f; } -void func_80A1428C(EnGo* this, PlayState* play) { - s16 temp; - Vec3f sp30; - Vec3f sp24; +/** + * Update the Goron Gatekeeper's animation and actionFlags to 'snowball'. + * + * @see EnGo_Snowball + */ +void EnGo_ChangeToSnowballAnimation(EnGo* this, PlayState* play) { + s16 yawToPathPoint; + Vec3f currentPos; + Vec3f startingPathPoint; - Math_Vec3f_Copy(&sp30, &this->actor.world.pos); - if (this->unk_284 != NULL) { + Math_Vec3f_Copy(¤tPos, &this->actor.world.pos); + if (this->gatekeeperPath != NULL) { this->actor.flags &= ~ACTOR_FLAG_2000000; - SubS_CopyPointFromPathCheckBounds(this->unk_284, 0, &sp24); - temp = Math_Vec3f_Yaw(&sp30, &sp24); - this->actor.shape.rot.y = temp; - this->actor.world.rot.y = temp; + SubS_CopyPointFromPathCheckBounds(this->gatekeeperPath, 0, &startingPathPoint); + yawToPathPoint = Math_Vec3f_Yaw(¤tPos, &startingPathPoint); + this->actor.shape.rot.y = yawToPathPoint; + this->actor.world.rot.y = yawToPathPoint; } - this->unk_390 = 0; - this->unk_390 |= 0x100; - this->actor.shape.yOffset = 46.0f; + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_SNOWBALLED; + this->actor.shape.yOffset = ENGO_SNOWBALL_Y_OFFSET; this->actor.gravity = -1.0f; } -void func_80A14324(EnGo* this, PlayState* play) { - func_80A12C48(this, play, 8); - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_390 = 0; +/** + * Update the Goron's animation and actionFlags to 'covering ears'. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_COVEREARS); + Actor_SetScale(&this->actor, this->scaleFactor); + this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_3EC = 0; - this->unk_390 |= 0x40; - this->unk_3BC = 0; - this->unk_3BE = 4; - this->unk_39C = 0.0f; - this->unk_3A0 = 0.0f; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->sleepState = ENGO_AWAKE; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->blinkTimer = 0; + this->eyeTexIndex = ENGO_EYETEX_CLOSED2; + this->iceBlockScale = 0.0f; + this->iceBlockAlpha = 0.0f; } -void func_80A143A8(EnGo* this, PlayState* play) { - func_80A12C48(this, play, 5); - Actor_SetScale(&this->actor, this->unk_3A4); - this->unk_390 = 0; +/** + * Update the Goron's animation and actionFlags to 'shivering'. + * + * @see EnGo_Idle + */ +void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHIVER); + Actor_SetScale(&this->actor, this->scaleFactor); + this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_3EC = 0; - this->unk_390 |= 0x40; - this->unk_390 |= 0x20; - this->unk_3BC = 0; - this->unk_3BE = 0; - this->unk_39C = 0.0f; - this->unk_3A0 = 0.0f; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->sleepState = ENGO_AWAKE; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; + this->blinkTimer = 0; + this->eyeTexIndex = ENGO_EYETEX_OPEN; + this->iceBlockScale = 0.0f; + this->iceBlockAlpha = 0.0f; } -void func_80A14430(EnGo* this, PlayState* play) { +/** + * Setup a Goron stretching at the racetrack. + * + * Stretching Gorons placed in the starting area of the racetrack doing various stretches. + */ +void EnGo_SetupAthletic(EnGo* this, PlayState* play) { if (((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 0)) || (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 2))) && (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE))) { - func_80A14018(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToStretchingAnimation(this, play); + this->actionFunc = EnGo_Idle; } else { Actor_Kill(&this->actor); } } -void func_80A1449C(EnGo* this, PlayState* play) { +/** + * Setup a Goron spectating at the racetrack. + * + * Spectators to the Goron races cannot be engaged, they simply stand idle and cheer. + */ +void EnGo_SetupSpectator(EnGo* this, PlayState* play) { if ((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) || (gSaveContext.save.entrance == ENTRANCE(CUTSCENE, 0))) { - func_80A14104(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToSpectatingAnimation(this, play); + this->actionFunc = EnGo_Idle; } else { Actor_Kill(&this->actor); } } -void func_80A144F4(EnGo* this, PlayState* play) { +/** + * Setup the Goron Shrine's Gatekeeper. + * + * When spoken to, can open the Goron Shrine for the player. + * - On Day 1: Can be found in the open, shivering. + * - On Days 2,3: Can be found in a snowball. + */ +void EnGo_SetupGatekeeper(EnGo* this, PlayState* play) { if (gSaveContext.save.day >= 2) { - this->unk_284 = SubS_GetDayDependentPath(play, ENGO_GET_7F80(&this->actor), 0xFF, &this->unk_3E4); - if (this->unk_284 != NULL) { - this->unk_3E4 = 1; + this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH(&this->actor), 0xFF, &this->indexPathPoint); + if (this->gatekeeperPath != NULL) { + this->indexPathPoint = 1; } - func_80A1428C(this, play); - this->actionFunc = func_80A153FC; - this->unk_3D8 = func_80A13B1C; + EnGo_ChangeToSnowballAnimation(this, play); + this->actionFunc = EnGo_Snowball; + this->msgEventFunc = EnGo_HandleOpenShrineCutscene; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; - this->unk_3D8 = func_80A13B1C; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; + this->msgEventFunc = EnGo_HandleOpenShrineCutscene; } } -void func_80A145AC(EnGo* this, PlayState* play) { - if ((ENGO_GET_70(&this->actor) == ENGO_70_1) && +/** + * Setup a Goron at the graveyard + * + * The Gorons are together, one shivering from the cold, another frozen solid. + */ +void EnGo_SetupGraveyardGoron(EnGo* this, PlayState* play) { + if ((ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN) && (((play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) || - !CHECK_WEEKEVENTREG(WEEKEVENTREG_21_08))) { - this->actor.child = func_80A13400(this, play); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON))) { + this->actor.child = EnGo_FindGravemaker(this, play); this->actor.child->child = &this->actor; - func_80A141D4(this, play); - this->actionFunc = func_80A14E14; + EnGo_ChangeToFrozenAnimation(this, play); + this->actionFunc = EnGo_Frozen; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; } } -void func_80A14668(EnGo* this, PlayState* play) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { - func_80A14324(this, play); - this->actionFunc = func_80A149B0; +/** + * Setup a shrine Goron. + * + * There are three, but they all behave the same way aside from dialog. + */ +void EnGo_SetupShrineGoron(EnGo* this, PlayState* play) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { + EnGo_ChangeToCoveringEarsAnimation(this, play); + this->actionFunc = EnGo_Idle; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; } } -void func_80A146CC(EnGo* this, PlayState* play) { - func_80A134B0(this, play, 0); - func_80A12C48(this, play, 0); - this->unk_3A4 *= 5.0f; - Actor_SetScale(&this->actor, this->unk_3A4); +/** + * Setup the Medigoron in the Powder Keg Shop. + * + * This Goron sells Powder Kegs, and gives the player a Powder Keg as part of a challenge to gain + * the privilege to buy them. + */ +void EnGo_SetupMedigoron(EnGo* this, PlayState* play) { + EnGo_UpdateMedigoronColliderRadius(this, play, false); + EnGo_ChangeAnim(this, play, ENGO_ANIM_LYINGDOWNIDLE); + this->scaleFactor *= ENGO_MEDIGORON_SCALE_MULTIPLIER; + Actor_SetScale(&this->actor, this->scaleFactor); this->actor.flags &= ~ACTOR_FLAG_1; this->actor.targetMode = 3; - this->unk_390 = 0; + this->actionFlags = 0; this->actor.gravity = -1.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_390 |= 0x40; - this->unk_390 |= 0x20; - this->unk_3D8 = func_80A13E80; - this->actionFunc = func_80A149B0; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; + this->msgEventFunc = EnGo_HandleGivePowderKegCutscene; + this->actionFunc = EnGo_Idle; } -void func_80A14798(EnGo* this, PlayState* play) { - EffectTireMarkInit sp38 = { - 0, - 62, - { 0, 0, 15, 100 }, - }; +/** + * Default setup function as the initial action function. + */ +void EnGo_SetupInitialAction(EnGo* this, PlayState* play) { + EffectTireMarkInit tireMarkInit = { 0, 62, { 0, 0, 15, 100 } }; - if ((this->unk_288 < 0) || SubS_IsObjectLoaded(this->unk_288, play) || (this->unk_289 < 0) || - SubS_IsObjectLoaded(this->unk_289, play)) { + if (((this->taisouObjIndex < 0) || SubS_IsObjectLoaded(this->taisouObjIndex, play)) || + ((this->hakuginDemoObjIndex < 0) || SubS_IsObjectLoaded(this->hakuginDemoObjIndex, play))) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f); SkelAnime_InitFlex(play, &this->skelAnime, &gGoronSkel, NULL, this->jointTable, this->morphTable, GORON_LIMB_MAX); - this->unk_3DC = -1; - func_80A12C48(this, play, 2); - this->actor.draw = func_80A15FEC; + this->curAnimIndex = ENGO_ANIM_INVALID; + EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL); + this->actor.draw = EnGo_Draw; Collider_InitAndSetSphere(play, &this->colliderSphere, &this->actor, &sSphereInit); - Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit2); + Collider_InitAndSetCylinder(play, &this->colliderCylinder, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - Effect_Add(play, &this->unk_3E8, EFFECT_TIRE_MARK, 0, 0, &sp38); + Effect_Add(play, &this->indexEffect, EFFECT_TIRE_MARK, 0, 0, &tireMarkInit); this->actor.targetMode = 1; - this->unk_3A4 = 0.01f; - this->unk_3D8 = NULL; + this->scaleFactor = ENGO_NORMAL_SCALE; + this->msgEventFunc = NULL; - switch (ENGO_GET_F(&this->actor)) { - case ENGO_F_1: - func_80A14430(this, play); + switch (ENGO_GET_TYPE(&this->actor)) { + case ENGO_ATHLETIC: + EnGo_SetupAthletic(this, play); break; - case ENGO_F_2: - func_80A1449C(this, play); + case ENGO_SPECTATOR: + EnGo_SetupSpectator(this, play); break; - case ENGO_F_3: - func_80A144F4(this, play); + case ENGO_GATEKEEPER: + EnGo_SetupGatekeeper(this, play); break; - case ENGO_F_4: - func_80A145AC(this, play); + case ENGO_GRAVEYARD: + EnGo_SetupGraveyardGoron(this, play); break; - case ENGO_F_5: - case ENGO_F_6: - case ENGO_F_7: - func_80A14668(this, play); + case ENGO_ASIDE_STORE: + case ENGO_ASIDE_ELDERSROOM: + case ENGO_ASIDE_ELDERSSON: + EnGo_SetupShrineGoron(this, play); break; - case ENGO_F_8: - func_80A146CC(this, play); + case ENGO_MEDIGORON: + EnGo_SetupMedigoron(this, play); break; default: @@ -1513,147 +2013,192 @@ void func_80A14798(EnGo* this, PlayState* play) { } } -void func_80A149B0(EnGo* this, PlayState* play) { - s16 sp26 = this->actor.world.rot.y; +/** + * Default action for the Gorons. Different types have different default actions. + * + * The default action possibilities include: + * - Shivering + * - Covering ears + * - Spectating (cheering or shouting) + * - Stretching (side-to-side squatting, two-arm side bend, limb shake, one-arm side bend, hamstring stretching while + * sitting, and helping the hamstring stretching Goron.) + */ +void EnGo_Idle(EnGo* this, PlayState* play) { + s16 targetRot = this->actor.world.rot.y; - if ((ENGO_GET_F(&this->actor) == ENGO_F_2) && (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) { + if ((ENGO_GET_TYPE(&this->actor) == ENGO_SPECTATOR) && + (gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1))) { + // Spectators only cheer. No other interactions Actor_PlaySfx(&this->actor, NA_SE_EV_GORON_CHEER - SFX_FLAG); - } else if (ENGO_GET_F(&this->actor) != ENGO_F_8) { - if (func_80A1222C(this, play)) { - SubS_UpdateFlags(&this->unk_390, 0, 7); - this->unk_3EC = 1; - this->actionFunc = func_80A14B30; - } else if (ENGO_GET_F(&this->actor) == ENGO_F_4) { - switch (ENGO_GET_70(&this->actor)) { - case ENGO_70_0: - func_80A132C8(this, play); + } else if (ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) { + // All others besides the Medigoron in the Powder Keg Shop can fall asleep + if (EnGo_IsFallingAsleep(this, play)) { + SubS_UpdateFlags(&this->actionFlags, 0, 7); + this->sleepState = ENGO_ASLEEP_POS; + this->actionFunc = EnGo_Sleep; + } else if (ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) { + switch (ENGO_GET_SUBTYPE(&this->actor)) { + case ENGO_GRAVEYARD_GRAVEMAKER: + EnGo_GravemakerIdle(this, play); break; - case ENGO_70_1: - func_80A133A8(this, play); + case ENGO_GRAVEYARD_FROZEN: + EnGo_FrozenIdle(this, play); + break; + + default: break; } - } else if (ENGO_GET_F(&this->actor) == ENGO_F_1) { + } else if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) { if (ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y)) < 0x3FFC) { - SubS_UpdateFlags(&this->unk_390, 3, 7); + SubS_UpdateFlags(&this->actionFlags, 3, 7); } else { - SubS_UpdateFlags(&this->unk_390, 0, 7); + SubS_UpdateFlags(&this->actionFlags, 0, 7); } } } - Math_ApproachS(&this->actor.shape.rot.y, sp26, 4, 0x2AA8); + Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8); } -void func_80A14B30(EnGo* this, PlayState* play) { - s16 sp26 = this->actor.world.rot.y; +/** + * Handles falling asleep, as well as snoring while asleep. + */ +void EnGo_Sleep(EnGo* this, PlayState* play) { + s16 targetRot = this->actor.world.rot.y; u16 sfxId; - if (func_80A1222C(this, play)) { - this->unk_3EC = 1; + if (EnGo_IsFallingAsleep(this, play)) { + this->sleepState = ENGO_ASLEEP_POS; } - if (this->unk_390 & 0x4000) { + if (this->actionFlags & ENGO_FLAG_ROLLING_UP) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->unk_390 &= ~0x4000; - this->unk_390 |= 0x200; - if (this->unk_3EC != 0) { - this->unk_3AE = 0; + this->actionFlags &= ~ENGO_FLAG_ROLLING_UP; + this->actionFlags |= ENGO_FLAG_ROLLED_UP; + if (this->sleepState != ENGO_AWAKE) { + this->snorePhase = 0; } - this->actor.shape.yOffset = 14.0f; + this->actor.shape.yOffset = ENGO_ROLLEDUP_Y_OFFSET; } - } else if (this->unk_390 & 0x8000) { + } else if (this->actionFlags & ENGO_FLAG_UNROLLING) { if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - this->unk_390 |= 0x80; - this->unk_390 &= ~0x8000; + this->actionFlags |= ENGO_FLAG_STANDING; + this->actionFlags &= ~ENGO_FLAG_UNROLLING; } - } else if (this->unk_390 & 0x200) { - if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.playerHeightRel < 20.0f) && (this->unk_3EC == 0)) { - func_80A12C48(this, play, 3); - this->unk_390 &= ~0x80; - this->unk_390 &= ~0x200; - this->unk_390 |= 0x8000; - this->actor.shape.yOffset = 0.0f; - } else if ((this->unk_3EC != 0) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { - this->actor.scale.x = this->unk_3A4 - (Math_SinS(this->unk_3AE) * 0.001f); - this->actor.scale.y = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4; - this->actor.scale.z = (Math_SinS(this->unk_3AE) * 0.001f) + this->unk_3A4; - if (this->unk_3AE == 0) { - this->unk_3EC = -this->unk_3EC; - if (this->unk_3EC > 0) { - sfxId = NA_SE_EN_GOLON_SNORE1; - } else { - sfxId = NA_SE_EN_GOLON_SNORE2; - } + } else if (this->actionFlags & ENGO_FLAG_ROLLED_UP) { + if ((this->actor.xzDistToPlayer < 160.0f) && (this->actor.playerHeightRel < 20.0f) && + (this->sleepState == ENGO_AWAKE)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_UNROLL_IMM); + this->actionFlags &= ~ENGO_FLAG_STANDING; + this->actionFlags &= ~ENGO_FLAG_ROLLED_UP; + this->actionFlags |= ENGO_FLAG_UNROLLING; + this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET; + } else if ((this->sleepState != ENGO_AWAKE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { + // While asleep, rhythmicallly snore and change shape to show breathing. + this->actor.scale.x = this->scaleFactor - (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE)); + this->actor.scale.y = this->scaleFactor + (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE)); + this->actor.scale.z = this->scaleFactor + (Math_SinS(this->snorePhase) * (0.1f * ENGO_NORMAL_SCALE)); + + if (this->snorePhase == 0) { + this->sleepState = -this->sleepState; + sfxId = (this->sleepState > ENGO_AWAKE) ? NA_SE_EN_GOLON_SNORE1 : NA_SE_EN_GOLON_SNORE2; Actor_PlaySfx(&this->actor, sfxId); } - this->unk_3AE += 0x400; - this->actor.shape.yOffset = (this->actor.scale.y / this->unk_3A4) * 14.0f; - SubS_UpdateFlags(&this->unk_390, 3, 7); + this->snorePhase += 0x400; + this->actor.shape.yOffset = (this->actor.scale.y / this->scaleFactor) * ENGO_ROLLEDUP_Y_OFFSET; + SubS_UpdateFlags(&this->actionFlags, 3, 7); } } else if ((this->actor.xzDistToPlayer >= 240.0f) || (this->actor.playerHeightRel >= 20.0f) || - (this->unk_3EC != 0)) { - func_80A12C48(this, play, 4); - this->unk_390 &= ~0x80; - this->unk_390 &= ~0x200; - this->unk_390 |= 0x4000; - this->actor.shape.yOffset = 0.0f; + (this->sleepState != ENGO_AWAKE)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_ROLL); + this->actionFlags &= ~ENGO_FLAG_STANDING; + this->actionFlags &= ~ENGO_FLAG_ROLLED_UP; + this->actionFlags |= ENGO_FLAG_ROLLING_UP; + this->actor.shape.yOffset = ENGO_STANDING_Y_OFFSET; } - SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); - Math_ApproachS(&this->actor.shape.rot.y, sp26, 4, 0x2AA8); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); + Math_ApproachS(&this->actor.shape.rot.y, targetRot, 4, 0x2AA8); } -void func_80A14E14(EnGo* this, PlayState* play) { - Actor* actor = this->colliderCylinder.base.ac; +/** + * Action function for a frozen Goron. + * + * Transitions to the thawing cutscene when colliding with hot water or fire effect. + */ +void EnGo_Frozen(EnGo* this, PlayState* play) { + Actor* actorCollidedWith = this->colliderCylinder.base.ac; - if ((this->unk_390 & 0x1000) && (((actor != NULL) && (actor->id == ACTOR_OBJ_AQUA) && (actor->params & 1)) || - (this->actor.colChkInfo.damageEffect == 2))) { - this->actionFunc = func_80A14E74; + if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) && + (((actorCollidedWith != NULL) && (actorCollidedWith->id == ACTOR_OBJ_AQUA) && AQUA_HOT(actorCollidedWith)) || + (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_FIRE))) { + this->actionFunc = EnGo_AwaitThaw; } } -void func_80A14E74(EnGo* this, PlayState* play) { - if (func_80A134F4(this, this->actor.csId)) { - this->actionFunc = func_80A14EB0; +/** + * Action function for transitioning to thawing. + */ +void EnGo_AwaitThaw(EnGo* this, PlayState* play) { + if (EnGo_ChangeCutscene(this, this->actor.csId)) { + this->actionFunc = EnGo_Thaw; } } -void func_80A14EB0(EnGo* this, PlayState* play) { - EnGo* sp24 = (EnGo*)this->actor.child; +/** + * Action function for thawing of the Goron, melting sounds, and steam. + */ +void EnGo_Thaw(EnGo* this, PlayState* play) { + EnGo* otherGoron = (EnGo*)this->actor.child; - if ((s32)(this->unk_39C * 3.0f) != 0) { + if ((s32)(this->iceBlockScale * 3.0f) != 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); - Math_ApproachF(&this->unk_39C, 0.0f, 0.02f, 1.0f); - this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f; - func_80A139E4(this); + Math_ApproachF(&this->iceBlockScale, 0.0f, 0.02f, 1.0f); + this->iceBlockAlpha = (this->iceBlockScale / 0.9f) * 100.0f; + EnGo_MakeSteam(this); } else { CutsceneManager_Stop(this->actor.csId); - func_80A143A8(this, play); - if ((ENGO_GET_F(&this->actor) == ENGO_F_4) && (ENGO_GET_70(&this->actor) == ENGO_70_1)) { - SubS_UpdateFlags(&this->unk_390, 4, 7); - func_80A143A8(sp24, play); - sp24->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && + (ENGO_GET_SUBTYPE(&this->actor) == ENGO_GRAVEYARD_FROZEN)) { + SubS_UpdateFlags(&this->actionFlags, 4, 7); + EnGo_ChangeToShiveringAnimation(otherGoron, play); + otherGoron->actionFunc = EnGo_Idle; } - this->actionFunc = func_80A149B0; + this->actionFunc = EnGo_Idle; } } -void func_80A14FC8(EnGo* this, PlayState* play) { - s32 sp38[] = { - 0, 2, 6, 20, 18, 5, 5, 15, +/** + * Cutscene action function for the arrival of springtime. + * + * This cutscene consists of: + * - The gravemaker stops shivering and looks around. + * - The other Goron thaws and shivers briefly. + * - The gravemaker pats the other's back and gestures broadly. + * - They both look around. + * - They both cheer. + */ +void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play) { + s32 animationIndices[] = { + ENGO_ANIM_LYINGDOWNIDLE, ENGO_ANIM_UNROLL, ENGO_ANIM_SHIVER_IMM, ENGO_ANIM_LOOK_AROUND, + ENGO_ANIM_SHOW, ENGO_ANIM_SHIVER, ENGO_ANIM_SHIVER, ENGO_ANIM_CHEER, }; u16 cueType = 0; s32 cueId; s32 cueChannel; - switch (ENGO_GET_70(&this->actor)) { - case ENGO_70_0: + switch (ENGO_GET_SUBTYPE(&this->actor)) { + case ENGO_GRAVEYARD_GRAVEMAKER: cueType = CS_CMD_ACTOR_CUE_128; break; - case ENGO_70_1: + case ENGO_GRAVEYARD_FROZEN: cueType = CS_CMD_ACTOR_CUE_129; break; + + default: + break; } if ((cueType == CS_CMD_ACTOR_CUE_128) || (cueType == CS_CMD_ACTOR_CUE_129)) { @@ -1661,51 +2206,59 @@ void func_80A14FC8(EnGo* this, PlayState* play) { cueChannel = Cutscene_GetCueChannel(play, cueType); cueId = play->csCtx.actorCues[cueChannel]->id; - if (this->cueId != (u8)cueId) { - this->cueId = cueId; - func_80A12C48(this, play, sp38[cueId]); - this->unk_390 = 0; - this->unk_390 |= 0x20; - this->unk_3BE = 0; - this->unk_39C = 0.0f; - this->unk_3A0 = 0.0f; + if (this->springArrivalCueId != (u8)cueId) { + this->springArrivalCueId = cueId; + EnGo_ChangeAnim(this, play, animationIndices[cueId]); + this->actionFlags = 0; + this->actionFlags |= ENGO_FLAG_EYES_OPEN; + this->eyeTexIndex = ENGO_EYETEX_OPEN; + this->iceBlockScale = 0.0f; + this->iceBlockAlpha = 0.0f; switch (cueId) { case 1: - this->unk_390 |= 0x80; + this->actionFlags |= ENGO_FLAG_STANDING; this->skelAnime.curFrame = this->skelAnime.endFrame; break; case 5: case 6: - func_80A141D4(this, play); + EnGo_ChangeToFrozenAnimation(this, play); + break; + + default: break; } } - switch (this->cueId) { + switch (this->springArrivalCueId) { case 3: - if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 20)) { - func_80A12C48(this, play, 21); + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && + (this->curAnimIndex == ENGO_ANIM_LOOK_AROUND)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_LOOK_AROUND_LOOPED); } break; case 4: - if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (this->unk_3DC == 18)) { - func_80A12C48(this, play, 19); + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && + (this->curAnimIndex == ENGO_ANIM_SHOW)) { + EnGo_ChangeAnim(this, play, ENGO_ANIM_SHOW_LOOPED); } break; case 6: - if ((s32)(this->unk_39C * 3.0f) != 0) { + if ((s32)(this->iceBlockScale * 3.0f) != 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_MELT_LEVEL - SFX_FLAG); - Math_ApproachF(&this->unk_39C, 0.0f, 0.02f, 1.0f); - this->unk_3A0 = (this->unk_39C / 0.9f) * 100.0f; - func_80A139E4(this); - } else if (this->unk_390 & 0x400) { - func_80A143A8(this, play); + Math_ApproachF(&this->iceBlockScale, 0.0f, 0.02f, 1.0f); + this->iceBlockAlpha = (this->iceBlockScale / 0.9f) * 100.0f; + EnGo_MakeSteam(this); + } else if (this->actionFlags & ENGO_FLAG_FROZEN) { + EnGo_ChangeToShiveringAnimation(this, play); } break; + + default: + break; } if (cueType == 128) { @@ -1731,6 +2284,9 @@ void func_80A14FC8(EnGo* this, PlayState* play) { case 490: Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL); break; + + default: + break; } } else if (cueType == 129) { switch (play->csCtx.curFrame) { @@ -1750,65 +2306,72 @@ void func_80A14FC8(EnGo* this, PlayState* play) { case 480: Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_VOICE_EATFULL); break; + + default: + break; } } - SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } } } -void func_80A153FC(EnGo* this, PlayState* play) { - Vec3s* sp5C; - Vec3f sp50; - Vec3f sp44; +/** + * Action function for the Gatekeeper while they're in a snowball. + * + * On Day 2, they'll roll along a set path, and can be halted with certain attacks. + * On Day 3, they're frozen solid. + */ +void EnGo_Snowball(EnGo* this, PlayState* play) { + Vec3s* pathPoints; + Vec3f currentPos; + Vec3f currentPathPoint; - if ((this->unk_390 & 0x1000) && (this->actor.colChkInfo.damageEffect == 0xF)) { + if ((this->actionFlags & ENGO_FLAG_HIT_BY_OTHER) && (this->actor.colChkInfo.damageEffect == ENGO_DMGEFF_BREAK)) { + // Stop the Gatekeeper when hit by an appropriate effect Actor_PlaySfx(&this->actor, NA_SE_EV_SNOWBALL_BROKEN); - this->actor.flags &= ~ACTOR_FLAG_10; this->actor.flags |= ACTOR_FLAG_2000000; - - func_80A118F8(this->unk_3F8, this->actor.world.pos); + EnGo_InitSnow(this->effectTable, this->actor.world.pos); this->actor.shape.rot.x = 0; this->actor.speed = 0.0f; - Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_COLD); if (gSaveContext.save.day == 3) { - func_80A141D4(this, play); - this->actionFunc = func_80A14E14; + EnGo_ChangeToFrozenAnimation(this, play); + this->actionFunc = EnGo_Frozen; } else { - func_80A143A8(this, play); - this->actionFunc = func_80A149B0; + EnGo_ChangeToShiveringAnimation(this, play); + this->actionFunc = EnGo_Idle; } - } else if (this->unk_284 != NULL) { - if (this->unk_390 & 0x800) { + } else if (this->gatekeeperPath != NULL) { + if (this->actionFlags & ENGO_FLAG_HIT_OTHER) { Player_PlaySfx(GET_PLAYER(play), NA_SE_PL_BODY_HIT); func_800B8D50(play, &this->actor, 2.0f, this->actor.yawTowardsPlayer, 0.0f, 0); } - sp5C = Lib_SegmentedToVirtual(this->unk_284->points); - if (SubS_HasReachedPoint(&this->actor, this->unk_284, this->unk_3E4)) { - if (this->unk_3E4 >= (this->unk_284->count - 1)) { - this->unk_3E4 = 0; + pathPoints = Lib_SegmentedToVirtual(this->gatekeeperPath->points); + if (SubS_HasReachedPoint(&this->actor, this->gatekeeperPath, this->indexPathPoint)) { + if (this->indexPathPoint >= (this->gatekeeperPath->count - 1)) { + this->indexPathPoint = 0; } else { - this->unk_3E4++; + this->indexPathPoint++; } } - Math_Vec3s_ToVec3f(&sp44, &sp5C[this->unk_3E4]); - Math_Vec3f_Copy(&sp50, &this->actor.world.pos); - Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&sp50, &sp44), 4, 0x38E); + Math_Vec3s_ToVec3f(¤tPathPoint, &pathPoints[this->indexPathPoint]); + Math_Vec3f_Copy(¤tPos, &this->actor.world.pos); + Math_ApproachS(&this->actor.world.rot.y, Math_Vec3f_Yaw(¤tPos, ¤tPathPoint), 4, 0x38E); this->actor.shape.rot.y = this->actor.world.rot.y; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { Actor_PlaySfx(&this->actor, NA_SE_EV_BIGBALL_ROLL - SFX_FLAG); - func_800AE930(&play->colCtx, Effect_GetByIndex(this->unk_3E8), &this->actor.world.pos, 18.0f, + func_800AE930(&play->colCtx, Effect_GetByIndex(this->indexEffect), &this->actor.world.pos, 18.0f, this->actor.shape.rot.y, this->actor.floorPoly, this->actor.floorBgId); } else { - func_800AEF44(Effect_GetByIndex(this->unk_3E8)); + func_800AEF44(Effect_GetByIndex(this->indexEffect)); } this->actor.speed = 4.0f; @@ -1817,86 +2380,107 @@ void func_80A153FC(EnGo* this, PlayState* play) { } } -s32* func_80A15684(EnGo* this, PlayState* play) { - static s32* D_80A16704[] = { - D_80A16100, - D_80A16164, +/** + * Return the MsgEvent script appropriate for the actor. + */ +s32* EnGo_GetMsgEventScript(EnGo* this, PlayState* play) { + static s32 sMsgScriptGraveyard[] = { + sMsgScriptGoronGravemaker, + sMsgScriptGoronFrozen, }; - if (this->unk_3EC != 0) { - return D_80A1640C; + if (this->sleepState != ENGO_AWAKE) { + return sMsgScriptGoronSleeping; // Lullaby hint } - if (ENGO_GET_F(&this->actor) == ENGO_F_1) { - switch (ENGO_GET_70(&this->actor) % 6) { - case ENGO_70_0: - return D_80A163BC; - case ENGO_70_1: - return D_80A163CC; - case ENGO_70_2: - return D_80A163DC; - case ENGO_70_3: - return D_80A163EC; - case ENGO_70_4: - return D_80A163FC; - case ENGO_70_5: - return D_80A163FC; + if (ENGO_GET_TYPE(&this->actor) == ENGO_ATHLETIC) { + switch (ENGO_GET_SUBTYPE(&this->actor) % 6) { + case ENGO_ATHLETIC_A: + return sMsgScriptGoronAthleticA; + + case ENGO_ATHLETIC_B: // Unused! + return sMsgScriptGoronAthleticB; + + case ENGO_ATHLETIC_C: + return sMsgScriptGoronAthleticC; + + case ENGO_ATHLETIC_D: + return sMsgScriptGoronAthleticD; + + case ENGO_ATHLETIC_HAMSTRINGSIT: + return sMsgScriptGoronAthleticHamstring; + + case ENGO_ATHLETIC_HAMSTRINGSTAND: + return sMsgScriptGoronAthleticHamstring; + + default: + break; } } - switch (ENGO_GET_F(&this->actor)) { - case ENGO_F_3: - return D_80A16350; - case ENGO_F_4: - return D_80A16704[ENGO_GET_70(&this->actor)]; - case ENGO_F_5: - return D_80A16208; - case ENGO_F_6: - return D_80A16254; - case ENGO_F_7: - return D_80A16210; - case ENGO_F_8: - return D_80A16280; + switch (ENGO_GET_TYPE(&this->actor)) { + case ENGO_GATEKEEPER: + return sMsgScriptGoronGatekeeper; + + case ENGO_GRAVEYARD: + return sMsgScriptGraveyard[ENGO_GET_SUBTYPE(&this->actor)]; + + case ENGO_ASIDE_STORE: + return sMsgScriptGoronAsideStore; + + case ENGO_ASIDE_ELDERSROOM: + return sMsgScriptGoronAsideEldersRoom; + + case ENGO_ASIDE_ELDERSSON: + return sMsgScriptGoronAsideEldersSon; + + case ENGO_MEDIGORON: + return sMsgScriptGoronMedigoron; + default: - return D_80A16208; + return sMsgScriptGoronAsideStore; } } -void func_80A157C4(EnGo* this, PlayState* play) { +/** + * Action function for dialog, movement due to dialog, and ending dialog + */ +void EnGo_Talk(EnGo* this, PlayState* play) { s32 pad; - Vec3f sp40; - Vec3f sp34; + Vec3f targetPos; + Vec3f thisPos; - if (!func_8010BF58(&this->actor, play, func_80A15684(this, play), this->unk_3D8, &this->unk_28C)) { - if ((ENGO_GET_F(&this->actor) != ENGO_F_1) && !(this->unk_390 & 0x200)) { - Math_Vec3f_Copy(&sp40, &this->unk_38C->world.pos); - Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&sp34, &sp40), 4, 0x2AA8); + if (!func_8010BF58(&this->actor, play, EnGo_GetMsgEventScript(this, play), this->msgEventFunc, + &this->msgScriptResumePos)) { + if ((ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC) && !(this->actionFlags & ENGO_FLAG_ROLLED_UP)) { + Math_Vec3f_Copy(&targetPos, &this->attentionTarget->world.pos); + Math_Vec3f_Copy(&thisPos, &this->actor.world.pos); + Math_ApproachS(&this->actor.shape.rot.y, Math_Vec3f_Yaw(&thisPos, &targetPos), 4, 0x2AA8); } - SubS_FillLimbRotTables(play, this->unk_3CE, this->unk_3C8, ARRAY_COUNT(this->unk_3CE)); + SubS_FillLimbRotTables(play, this->limbRotTableY, this->limbRotTableZ, ARRAY_COUNT(this->limbRotTableY)); return; } - if ((ENGO_GET_F(&this->actor) == ENGO_F_5) || (ENGO_GET_F(&this->actor) == ENGO_F_6) || - (ENGO_GET_F(&this->actor) == ENGO_F_7)) { - this->unk_3BC = 0; - this->unk_390 &= ~0x20; - this->unk_3BE = 4; + if ((ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_STORE) || (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSROOM) || + (ENGO_GET_TYPE(&this->actor) == ENGO_ASIDE_ELDERSSON)) { + this->blinkTimer = 0; + this->actionFlags &= ~ENGO_FLAG_EYES_OPEN; + this->eyeTexIndex = ENGO_EYETEX_CLOSED2; } - this->unk_390 &= ~0x8; - SubS_UpdateFlags(&this->unk_390, 3, 7); - this->unk_28C = 0; - this->unk_390 |= 0x40; - this->actionFunc = this->unk_18C; + this->actionFlags &= ~ENGO_FLAG_ENGAGED; + SubS_UpdateFlags(&this->actionFlags, 3, 7); + this->msgScriptResumePos = 0; + this->actionFlags |= ENGO_FLAG_LOST_ATTENTION; + this->actionFunc = this->interruptedActionFunc; } void EnGo_Init(Actor* thisx, PlayState* play) { EnGo* this = THIS; - this->unk_288 = SubS_GetObjectIndex(OBJECT_TAISOU, play); - this->unk_289 = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play); - this->actionFunc = func_80A14798; + this->taisouObjIndex = SubS_GetObjectIndex(OBJECT_TAISOU, play); + this->hakuginDemoObjIndex = SubS_GetObjectIndex(OBJECT_HAKUGIN_DEMO, play); + this->actionFunc = EnGo_SetupInitialAction; } void EnGo_Destroy(Actor* thisx, PlayState* play) { @@ -1904,50 +2488,55 @@ void EnGo_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->colliderCylinder); Collider_DestroySphere(play, &this->colliderSphere); - Effect_Destroy(play, this->unk_3E8); + Effect_Destroy(play, this->indexEffect); } void EnGo_Update(Actor* thisx, PlayState* play) { EnGo* this = THIS; - f32 phi_f0; + f32 xzRange; - func_80A12868(this, play); - if (!func_80A12774(this, play)) { - func_80A12954(this, play); + EnGo_DetectCollisions(this, play); + + if (!EnGo_UpdateTalking(this, play)) { + EnGo_UpdateSpringArrivalCutscene(this, play); } this->actionFunc(this, play); - if (!(this->unk_390 & 0x400)) { - func_80A12D6C(this); - func_80A12A64(this, play); - func_80A131F8(this, play); - func_80A12B78(this, play); + if (!(this->actionFlags & ENGO_FLAG_FROZEN)) { + EnGo_UpdateEyes(this); + EnGo_UpdateAnimationToCurrent(this, play); + EnGo_UpdateAttentionTargetAndReactions(this, play); + EnGo_UpdateSfx(this, play); } - if (!(this->unk_390 & 0x100) && !(this->unk_390 & 0x200) && !(this->unk_390 & 0x400)) { - if (ENGO_GET_F(&this->actor) == ENGO_F_8) { - phi_f0 = this->colliderSphere.dim.worldSphere.radius + 60; + if (!(this->actionFlags & ENGO_FLAG_SNOWBALLED) && !(this->actionFlags & ENGO_FLAG_ROLLED_UP) && + !(this->actionFlags & ENGO_FLAG_FROZEN)) { + if (ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) { + xzRange = this->colliderSphere.dim.worldSphere.radius + 60; } else { - phi_f0 = this->colliderCylinder.dim.radius + 40; + xzRange = this->colliderCylinder.dim.radius + 40; } - func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7); - } else if ((this->unk_390 & 0x200) && (this->unk_3EC != 0)) { - phi_f0 = this->colliderCylinder.dim.radius + 40; - func_8013C964(&this->actor, play, phi_f0, 20.0f, PLAYER_IA_NONE, this->unk_390 & 7); + func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7); + } else if ((this->actionFlags & ENGO_FLAG_ROLLED_UP) && (this->sleepState != ENGO_AWAKE)) { + xzRange = this->colliderCylinder.dim.radius + 40; + func_8013C964(&this->actor, play, xzRange, 20.0f, PLAYER_IA_NONE, this->actionFlags & 7); } - if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_2) && - (ENGO_GET_F(&this->actor) != ENGO_F_1)) { + if ((ENGO_GET_TYPE(&this->actor) != ENGO_MEDIGORON) && (ENGO_GET_TYPE(&this->actor) != ENGO_SPECTATOR) && + (ENGO_GET_TYPE(&this->actor) != ENGO_ATHLETIC)) { Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } - func_80A122EC(this); - func_80A126BC(this, play); - func_80A1203C(this); + EnGo_UpdateFocus(this); + EnGo_UpdateCollider(this, play); + EnGo_UpdateEffects(this); } -void func_80A15B80(EnGo* this, PlayState* play) { +/** + * Draw function for a snowballed or rolled up Goron (no need to draw limbs). + */ +void EnGo_Draw_NoSkeleton(EnGo* this, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); @@ -1961,7 +2550,7 @@ void func_80A15B80(EnGo* this, PlayState* play) { Matrix_RotateZS(this->actor.shape.rot.z, MTXMODE_APPLY); Matrix_Translate(0.0f, this->actor.shape.yOffset, 0.0f, MTXMODE_APPLY); - if (this->unk_390 & 0x100) { + if (this->actionFlags & ENGO_FLAG_SNOWBALLED) { Matrix_Scale(this->actor.scale.x * 8.0f, this->actor.scale.y * 8.0f, this->actor.scale.z * 8.0f, MTXMODE_APPLY); } else { Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); @@ -1970,60 +2559,59 @@ void func_80A15B80(EnGo* this, PlayState* play) { Matrix_RotateXS(this->actor.shape.rot.x, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, (this->unk_390 & 0x100) ? gGoronSnowballDL : gGoronRolledUpDL); + gSPDisplayList(POLY_OPA_DISP++, (this->actionFlags & ENGO_FLAG_SNOWBALLED) ? gGoronSnowballDL : gGoronRolledUpDL); CLOSE_DISPS(play->state.gfxCtx); } s32 EnGo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnGo* this = THIS; - Vec3f sp30; - s32 idx; + Vec3f worldPos; + s32 rotTableIndex; - if ((ENGO_GET_F(&this->actor) == ENGO_F_8) && (limbIndex == 10)) { - Matrix_MultZero(&sp30); - sp30.y = this->actor.world.pos.y; - Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30); + if ((ENGO_GET_TYPE(&this->actor) == ENGO_MEDIGORON) && (limbIndex == GORON_LIMB_BODY)) { + Matrix_MultZero(&worldPos); + worldPos.y = this->actor.world.pos.y; + Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &worldPos); } switch (limbIndex) { - case 10: - idx = 0; + case GORON_LIMB_BODY: + rotTableIndex = 0; break; - case 11: - idx = 1; + case GORON_LIMB_LEFT_UPPER_ARM: + rotTableIndex = 1; break; - case 14: - idx = 2; + case GORON_LIMB_RIGHT_UPPER_ARM: + rotTableIndex = 2; break; default: - idx = 9; + rotTableIndex = 9; break; } - if ((this->unk_390 & 0x80) && (idx < 9)) { - rot->y += (s16)(Math_SinS(this->unk_3CE[idx]) * 200.0f); - rot->z += (s16)(Math_CosS(this->unk_3C8[idx]) * 200.0f); + if ((this->actionFlags & ENGO_FLAG_STANDING) && (rotTableIndex < 9)) { + rot->y += (s16)(Math_SinS(this->limbRotTableY[rotTableIndex]) * 200.0f); + rot->z += (s16)(Math_CosS(this->limbRotTableZ[rotTableIndex]) * 200.0f); } return false; } void EnGo_TransfromLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { EnGo* this = THIS; - u16 temp_v0; s32 stepRot; s32 overrideRot; - if (this->unk_390 & 0x40) { + if (this->actionFlags & ENGO_FLAG_LOST_ATTENTION) { stepRot = false; } else { stepRot = true; } - if (this->unk_390 & 0x10) { + if (this->actionFlags & ENGO_FLAG_FACE_TARGET) { overrideRot = true; } else { overrideRot = false; @@ -2034,47 +2622,50 @@ void EnGo_TransfromLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } switch (limbIndex) { - case 17: - SubS_UpdateLimb(this->unk_3B0 + this->unk_3B4 + 0x4000, - this->unk_3B2 + this->unk_3B6 + this->actor.shape.rot.y + 0x4000, &this->unk_290, - &this->unk_2A8, stepRot, overrideRot); + case GORON_LIMB_HEAD: + SubS_UpdateLimb(this->headRotZ + this->bodyRotZ + 0x4000, + this->headRotY + this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->headPos, + &this->headRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_290.x, this->unk_290.y, this->unk_290.z, MTXMODE_NEW); + Matrix_Translate(this->headPos.x, this->headPos.y, this->headPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_2A8.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_2A8.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_2A8.z, MTXMODE_APPLY); + Matrix_RotateYS(this->headRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->headRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->headRot.z, MTXMODE_APPLY); Matrix_Push(); break; - case 10: - SubS_UpdateLimb(this->unk_3B4 + 0x4000, this->unk_3B6 + this->actor.shape.rot.y + 0x4000, &this->unk_29C, - &this->unk_2AE, stepRot, overrideRot); + case GORON_LIMB_BODY: + SubS_UpdateLimb(this->bodyRotZ + 0x4000, this->bodyRotY + this->actor.shape.rot.y + 0x4000, &this->bodyPos, + &this->bodyRot, stepRot, overrideRot); Matrix_Pop(); - Matrix_Translate(this->unk_29C.x, this->unk_29C.y, this->unk_29C.z, MTXMODE_NEW); + Matrix_Translate(this->bodyPos.x, this->bodyPos.y, this->bodyPos.z, MTXMODE_NEW); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); - Matrix_RotateYS(this->unk_2AE.y, MTXMODE_APPLY); - Matrix_RotateXS(this->unk_2AE.x, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_2AE.z, MTXMODE_APPLY); + Matrix_RotateYS(this->bodyRot.y, MTXMODE_APPLY); + Matrix_RotateXS(this->bodyRot.x, MTXMODE_APPLY); + Matrix_RotateZS(this->bodyRot.z, MTXMODE_APPLY); Matrix_Push(); break; + + default: + break; } } -void func_80A15FEC(Actor* thisx, PlayState* play) { - static TexturePtr D_80A1670C[] = { +void EnGo_Draw(Actor* thisx, PlayState* play) { + static TexturePtr sEyeTextures[] = { gGoronEyeOpenTex, gGoronEyeHalfTex, gGoronEyeClosedTex, gGoronEyeHalfTex, gGoronEyeClosed2Tex, }; EnGo* this = THIS; - if (!(this->unk_390 & 0x300)) { + if (!(this->actionFlags & (ENGO_FLAG_SNOWBALLED | ENGO_FLAG_ROLLED_UP))) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A1670C[this->unk_3BE])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex])); - if (this->unk_3DC == 14) { + if (this->curAnimIndex == ENGO_ANIM_SITTING_STRETCH) { Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY); } SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, @@ -2083,8 +2674,8 @@ void func_80A15FEC(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } else { - func_80A15B80(this, play); + EnGo_Draw_NoSkeleton(this, play); } - func_80A137C0(this, play, this->unk_39C, this->unk_3A0); - func_80A1213C(this, play); + EnGo_DrawIceBlockWhenFrozen(this, play, this->iceBlockScale, this->iceBlockAlpha); + EnGo_DrawEffects(this, play); } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index 9d12dfdce..a1c96214b 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -2,103 +2,141 @@ #define Z_EN_GO_H #include "global.h" +#include "objects/object_oF1d_map/object_oF1d_map.h" struct EnGo; typedef void (*EnGoActionFunc)(struct EnGo*, PlayState*); +typedef s32 (*MsgEventFunc)(Actor*, PlayState*); -#define ENGO_GET_F(thisx) (((thisx)->params & 0xF) & 0xFF) -#define ENGO_GET_70(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF) -#define ENGO_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) +#define ENGO_GET_TYPE(thisx) (((thisx)->params & 0xF) & 0xFF) +#define ENGO_GET_SUBTYPE(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF) -enum { +#define ENGO_GET_PATH(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) + +#define ENGO_SNOW_EFFECT_COUNT 16 +#define ENGO_OTHER_EFFECT_COUNT 16 +#define ENGO_EFFECT_COUNT (ENGO_SNOW_EFFECT_COUNT + ENGO_OTHER_EFFECT_COUNT) + +/** + * Struct to track the state of various visual effects. + * + * A Goron's 'effectTable' is comprised of a number of these effects, which depending on the context in which they are + * used, take on the form of snow, dust, or steam. The functions using these objects have an expectation that they are + * iterating through the full effectTable, or half of the effectTable. See individual functions containing 'EnGoEffect*' + * parameters for more details. + */ +typedef struct EnGoEffect { + /* 0x00 */ u8 type; + /* 0x01 */ u8 alphaDenom; + /* 0x02 */ u8 alphaNumer; + /* 0x04 */ Vec3s rotVelocity; + /* 0x0A */ Vec3s rotAngle; + /* 0x10 */ Vec3f pos; + /* 0x1C */ Vec3f accel; + /* 0x28 */ Vec3f velocity; + /* 0x34 */ f32 scaleXY; + /* 0x38 */ f32 scaleXYDelta; +} EnGoEffect; // size = 0x3C; + +/** + * Goron Type, identified by bits [3..0] of the actor's params + * + * - The ENGO_ATHLETIC and ENGO_SPECTATOR types share the same subtype domain (EnGoRacetrackSubtype: [0,7]) + * - ENGO_GRAVEYARD types have their own subtype domain (EnGoGraveyardSubtype: [0,1]) + * - Others have no subtypes. + */ +typedef enum EnGoType { /* 0 */ ENGO_F_0, - /* 1 */ ENGO_F_1, - /* 2 */ ENGO_F_2, - /* 3 */ ENGO_F_3, - /* 4 */ ENGO_F_4, - /* 5 */ ENGO_F_5, - /* 6 */ ENGO_F_6, - /* 7 */ ENGO_F_7, - /* 8 */ ENGO_F_8, -}; + /* 1 */ ENGO_ATHLETIC, // Racers stretching before the race + /* 2 */ ENGO_SPECTATOR, // Spectators to the race + /* 3 */ ENGO_GATEKEEPER, // Gatekeeper to the Goron Shrine + /* 4 */ ENGO_GRAVEYARD, // Gravemaker and other + /* 5 */ ENGO_ASIDE_STORE, // Shrine Goron outside store + /* 6 */ ENGO_ASIDE_ELDERSROOM, // Shrine Goron outside Elder's room + /* 7 */ ENGO_ASIDE_ELDERSSON, // Shrine Goron aside the Elder's Son + /* 8 */ ENGO_MEDIGORON, // Medigoron selling Powder Kegs +} EnGoType; -enum { - /* 0 */ ENGO_70_0, - /* 1 */ ENGO_70_1, - /* 2 */ ENGO_70_2, - /* 3 */ ENGO_70_3, - /* 4 */ ENGO_70_4, - /* 5 */ ENGO_70_5, -}; +/** + * Subtype for Gorons at the racetrack (ENGO_ATHLETIC and ENGO_SPECTATOR) + */ +typedef enum EnGoRacetrackSubtype { + /* 0 */ ENGO_ATHLETIC_A, + /* 1 */ ENGO_ATHLETIC_B, + /* 2 */ ENGO_ATHLETIC_C, + /* 3 */ ENGO_ATHLETIC_D, + /* 4 */ ENGO_ATHLETIC_HAMSTRINGSIT, + /* 5 */ ENGO_ATHLETIC_HAMSTRINGSTAND, + /* 6 */ ENGO_SPECTATOR_CHEER, + /* 7 */ ENGO_SPECTATOR_SHOUTING, +} EnGoRacetrackSubtype; -typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ u8 unk_01; - /* 0x02 */ u8 unk_02; - /* 0x04 */ Vec3s unk_04; - /* 0x0A */ Vec3s unk_0A; - /* 0x10 */ Vec3f unk_10; - /* 0x1C */ Vec3f unk_1C; - /* 0x28 */ Vec3f unk_28; - /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; -} EnGoStruct; // size = 0x3C; +/** + * Subtype for Gorons outside the Goron Graveyard (ENGO_GRAVEYARD) + */ +typedef enum EnGoGraveyardSubtype { + /* 0 */ ENGO_GRAVEYARD_GRAVEMAKER, + /* 1 */ ENGO_GRAVEYARD_FROZEN, +} EnGoGraveyardSubtype; typedef struct EnGo { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnGoActionFunc actionFunc; - /* 0x18C */ EnGoActionFunc unk_18C; - /* 0x190 */ EnGoActionFunc unk_190; + /* 0x18C */ EnGoActionFunc interruptedActionFunc; + /* 0x190 */ EnGoActionFunc graveyardDialogActionFunc; /* 0x194 */ ColliderCylinder colliderCylinder; - /* 0x1E0 */ UNK_TYPE1 unk1E0[0x4C]; + /* 0x1E0 */ ColliderCylinder unusedCylinder; /* 0x22C */ ColliderSphere colliderSphere; - /* 0x284 */ Path* unk_284; - /* 0x288 */ s8 unk_288; - /* 0x289 */ s8 unk_289; - /* 0x28C */ s32 unk_28C; - /* 0x290 */ Vec3f unk_290; - /* 0x29C */ Vec3f unk_29C; - /* 0x2A8 */ Vec3s unk_2A8; - /* 0x2AE */ Vec3s unk_2AE; - /* 0x2B4 */ Vec3s jointTable[18]; - /* 0x320 */ Vec3s morphTable[18]; - /* 0x38C */ Actor* unk_38C; - /* 0x390 */ u16 unk_390; - /* 0x392 */ u16 unk_392; - /* 0x394 */ u8 cueId; - /* 0x398 */ f32 unk_398; - /* 0x39C */ f32 unk_39C; - /* 0x3A0 */ f32 unk_3A0; - /* 0x3A4 */ f32 unk_3A4; - /* 0x3A8 */ f32 unk_3A8; + /* 0x284 */ Path* gatekeeperPath; + /* 0x288 */ s8 taisouObjIndex; + /* 0x289 */ s8 hakuginDemoObjIndex; + /* 0x28C */ s32 msgScriptResumePos; + /* 0x290 */ Vec3f headPos; + /* 0x29C */ Vec3f bodyPos; + /* 0x2A8 */ Vec3s headRot; + /* 0x2AE */ Vec3s bodyRot; + /* 0x2B4 */ Vec3s jointTable[GORON_LIMB_MAX]; + /* 0x320 */ Vec3s morphTable[GORON_LIMB_MAX]; + /* 0x38C */ Actor* attentionTarget; + /* 0x390 */ u16 actionFlags; + /* 0x392 */ u16 lastTextId; + /* 0x394 */ u8 springArrivalCueId; + /* 0x398 */ f32 curAnimPlaySpeed; + /* 0x39C */ f32 iceBlockScale; + /* 0x3A0 */ f32 iceBlockAlpha; + /* 0x3A4 */ f32 scaleFactor; + /* 0x3A8 */ f32 scaleFactorPoundDistortion; /* 0x3AC */ UNK_TYPE1 unk3AC[0x2]; - /* 0x3AE */ s16 unk_3AE; - /* 0x3B0 */ s16 unk_3B0; - /* 0x3B2 */ s16 unk_3B2; - /* 0x3B4 */ s16 unk_3B4; - /* 0x3B6 */ s16 unk_3B6; + /* 0x3AE */ union { + s16 snorePhase; // Used whilst a Goron is sleeping, +0x400 at a time + s16 elapsedHangtime; // Hangtime at the top of a pound. + }; + /* 0x3B0 */ s16 headRotZ; + /* 0x3B2 */ s16 headRotY; + /* 0x3B4 */ s16 bodyRotZ; + /* 0x3B6 */ s16 bodyRotY; /* 0x3B8 */ s16 csId; - /* 0x3BA */ s16 unk_3BA; - /* 0x3BC */ s16 unk_3BC; - /* 0x3BE */ s16 unk_3BE; - /* 0x3C0 */ s16 unk_3C0; - /* 0x3C2 */ s16 unk_3C2; - /* 0x3C4 */ s16 unk_3C4; - /* 0x3C6 */ s16 unk_3C6; - /* 0x3C8 */ s16 unk_3C8[3]; - /* 0x3CE */ s16 unk_3CE[3]; - /* 0x3D4 */ s16 unk_3D4; - /* 0x3D8 */ void* unk_3D8; - /* 0x3DC */ s32 unk_3DC; + /* 0x3BA */ s16 loseAttentionTimer; + /* 0x3BC */ s16 blinkTimer; + /* 0x3BE */ s16 eyeTexIndex; + /* 0x3C0 */ s16 cutsceneState; + /* 0x3C2 */ s16 cutsceneDelayTimer; + /* 0x3C4 */ s16 gatekeeperAnimState; + /* 0x3C6 */ s16 harmlessTimer; + /* 0x3C8 */ s16 limbRotTableZ[3]; + /* 0x3CE */ s16 limbRotTableY[3]; + /* 0x3D4 */ s16 surprisePhase; + /* 0x3D8 */ MsgEventFunc msgEventFunc; + /* 0x3DC */ s32 curAnimIndex; /* 0x3E0 */ UNK_TYPE1 unk3E0[0x4]; - /* 0x3E4 */ s32 unk_3E4; - /* 0x3E8 */ s32 unk_3E8; - /* 0x3EC */ s32 unk_3EC; - /* 0x3F0 */ s32 unk_3F0; - /* 0x3F4 */ s32 unk_3F4; - /* 0x3F8 */ EnGoStruct unk_3F8[32]; + /* 0x3E4 */ s32 indexPathPoint; + /* 0x3E8 */ s32 indexEffect; + /* 0x3EC */ s32 sleepState; + /* 0x3F0 */ s32 springArrivalCutsceneActive; + /* 0x3F4 */ s32 changedText; + /* 0x3F8 */ EnGoEffect effectTable[ENGO_EFFECT_COUNT]; } EnGo; // size = 0xB78 #endif // Z_EN_GO_H diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 27c3279e6..54fe2698d 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -171,12 +171,12 @@ static AnimationInfoS sAnimationInfo[] = { { &gGoronUnrollAnim, -2.0f, 0, -1, ANIMMODE_ONCE, -4 }, { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronShiverAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, - { &object_taisou_Anim_004DD4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_00283C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_007764, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_005790, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsDoubleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsShakeLimbsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsSingleArmSideBendAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, + { &gGoronAthleticsHamstringStretchStandingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, { &gGoronCoverEarsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, - { &object_taisou_Anim_002C48, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, + { &gGoronAthleticsCheerAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronStandingHandTappingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, { &gGoronSleepyAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 }, { &gGoronStandingIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, @@ -235,7 +235,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { switch (EN_S_GORO_GET_MAIN_TYPE(&this->actor)) { case EN_S_GORO_TYPE_SHRINE_WINTER_A: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_02)) { switch (this->textId) { @@ -302,7 +302,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { break; case EN_S_GORO_TYPE_SHRINE_WINTER_B: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_36_40)) { switch (this->textId) { @@ -367,7 +367,7 @@ u16 EnSGoro_ShrineGoron_NextTextId(EnSGoro* this, PlayState* play) { break; case EN_S_GORO_TYPE_SHRINE_WINTER_C: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { if (player->transformation == PLAYER_FORM_GORON) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_37_02)) { switch (this->textId) { @@ -771,7 +771,7 @@ void EnSGoro_UpdateSleeping(EnSGoro* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_GOLON_SNORE1); } } - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->actionFlags &= ~EN_S_GORO_ACTIONFLAG_SUPPRESS_SNORE; } @@ -842,7 +842,7 @@ s32 EnSGoro_CheckGKBehavior(EnSGoro* this, PlayState* play) { return false; } if ((!(this->actionFlags & EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED)) && - ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04))) { + ((((EnGk*)this->otherGoron)->unk_1E4 & 0x80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON))) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED; this->animInfoIndex = EN_S_GORO_ANIM_ROLLUP; @@ -1026,7 +1026,7 @@ void EnSGoro_SetupAction(EnSGoro* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->loadedObjIndex)) { this->actionFlags = 0; if (EN_S_GORO_OFTYPE_WSHRINE) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_04)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CALMED_GORON_ELDERS_SON)) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_GKQUIET_ACKNOWLEDGED; this->actionFlags |= EN_S_GORO_ACTIONFLAG_EYESOPEN; this->animInfoIndex = EN_S_GORO_ANIM_SHIVER_A; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 088d66ce9..4c65de06c 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -9675,76 +9675,76 @@ 0x80A10368:("EnSob1_ZoraShopkeeper_Draw",), 0x80A104E4:("EnSob1_GoronShopkeeper_Draw",), 0x80A10608:("EnSob1_BombShopkeeper_Draw",), - 0x80A10FD0:("func_80A10FD0",), - 0x80A11144:("func_80A11144",), - 0x80A1143C:("func_80A1143C",), - 0x80A115B4:("func_80A115B4",), - 0x80A118F8:("func_80A118F8",), - 0x80A11BF8:("func_80A11BF8",), - 0x80A11EC0:("func_80A11EC0",), - 0x80A1203C:("func_80A1203C",), - 0x80A1213C:("func_80A1213C",), - 0x80A121F4:("func_80A121F4",), - 0x80A1222C:("func_80A1222C",), - 0x80A122EC:("func_80A122EC",), - 0x80A123A0:("func_80A123A0",), - 0x80A124A0:("func_80A124A0",), - 0x80A124FC:("func_80A124FC",), - 0x80A125BC:("func_80A125BC",), - 0x80A12660:("func_80A12660",), - 0x80A126BC:("func_80A126BC",), - 0x80A12774:("func_80A12774",), - 0x80A12868:("func_80A12868",), - 0x80A12954:("func_80A12954",), - 0x80A12A64:("func_80A12A64",), - 0x80A12B78:("func_80A12B78",), - 0x80A12C48:("func_80A12C48",), - 0x80A12D6C:("func_80A12D6C",), - 0x80A12DF4:("func_80A12DF4",), - 0x80A12E80:("func_80A12E80",), - 0x80A12FE8:("func_80A12FE8",), - 0x80A131F8:("func_80A131F8",), - 0x80A132C8:("func_80A132C8",), - 0x80A133A8:("func_80A133A8",), - 0x80A13400:("func_80A13400",), - 0x80A134B0:("func_80A134B0",), - 0x80A134F4:("func_80A134F4",), - 0x80A13564:("func_80A13564",), + 0x80A10FD0:("EnGo_InitSteam",), + 0x80A11144:("EnGo_DrawSteam",), + 0x80A1143C:("EnGo_InitDust",), + 0x80A115B4:("EnGo_DrawDust",), + 0x80A118F8:("EnGo_InitSnow",), + 0x80A11BF8:("EnGo_UpdateSnow",), + 0x80A11EC0:("EnGo_DrawSnow",), + 0x80A1203C:("EnGo_UpdateEffects",), + 0x80A1213C:("EnGo_DrawEffects",), + 0x80A121F4:("EnGo_CanSnowballHurtPlayer",), + 0x80A1222C:("EnGo_IsFallingAsleep",), + 0x80A122EC:("EnGo_UpdateFocus",), + 0x80A123A0:("EnGo_UpdateSnowballCollider",), + 0x80A124A0:("EnGo_UpdateMedigoronCollider",), + 0x80A124FC:("EnGo_UpdateRolledUpCollider",), + 0x80A125BC:("EnGo_UpdateFrozenCollider",), + 0x80A12660:("EnGo_UpdateStandingCollider",), + 0x80A126BC:("EnGo_UpdateCollider",), + 0x80A12774:("EnGo_UpdateTalking",), + 0x80A12868:("EnGo_DetectCollisions",), + 0x80A12954:("EnGo_UpdateSpringArrivalCutscene",), + 0x80A12A64:("EnGo_UpdateAnimationToCurrent",), + 0x80A12B78:("EnGo_UpdateSfx",), + 0x80A12C48:("EnGo_ChangeAnim",), + 0x80A12D6C:("EnGo_UpdateEyes",), + 0x80A12DF4:("EnGo_UpdateShiverSurprisedAnimation",), + 0x80A12E80:("EnGo_UpdateGraveyardAttentionTargetAndReactions",), + 0x80A12FE8:("EnGo_UpdateRotationToTarget",), + 0x80A131F8:("EnGo_UpdateAttentionTargetAndReactions",), + 0x80A132C8:("EnGo_GravemakerIdle",), + 0x80A133A8:("EnGo_FrozenIdle",), + 0x80A13400:("EnGo_FindGravemaker",), + 0x80A134B0:("EnGo_UpdateMedigoronColliderRadius",), + 0x80A134F4:("EnGo_ChangeCutscene",), + 0x80A13564:("EnGo_HandleGatekeeperPoundCutscene",), 0x80A136B8:("EnGo_RequestQuake",), - 0x80A13728:("func_80A13728",), - 0x80A137C0:("func_80A137C0",), - 0x80A139E4:("func_80A139E4",), - 0x80A13B1C:("func_80A13B1C",), - 0x80A13E80:("func_80A13E80",), - 0x80A14018:("func_80A14018",), - 0x80A14104:("func_80A14104",), - 0x80A141D4:("func_80A141D4",), - 0x80A1428C:("func_80A1428C",), - 0x80A14324:("func_80A14324",), - 0x80A143A8:("func_80A143A8",), - 0x80A14430:("func_80A14430",), - 0x80A1449C:("func_80A1449C",), - 0x80A144F4:("func_80A144F4",), - 0x80A145AC:("func_80A145AC",), - 0x80A14668:("func_80A14668",), - 0x80A146CC:("func_80A146CC",), - 0x80A14798:("func_80A14798",), - 0x80A149B0:("func_80A149B0",), - 0x80A14B30:("func_80A14B30",), - 0x80A14E14:("func_80A14E14",), - 0x80A14E74:("func_80A14E74",), - 0x80A14EB0:("func_80A14EB0",), - 0x80A14FC8:("func_80A14FC8",), - 0x80A153FC:("func_80A153FC",), - 0x80A15684:("func_80A15684",), - 0x80A157C4:("func_80A157C4",), + 0x80A13728:("EnGo_CreateGatekeeperPoundEffects",), + 0x80A137C0:("EnGo_DrawIceBlockWhenFrozen",), + 0x80A139E4:("EnGo_MakeSteam",), + 0x80A13B1C:("EnGo_HandleOpenShrineCutscene",), + 0x80A13E80:("EnGo_HandleGivePowderKegCutscene",), + 0x80A14018:("EnGo_ChangeToStretchingAnimation",), + 0x80A14104:("EnGo_ChangeToSpectatingAnimation",), + 0x80A141D4:("EnGo_ChangeToFrozenAnimation",), + 0x80A1428C:("EnGo_ChangeToSnowballAnimation",), + 0x80A14324:("EnGo_ChangeToCoveringEarsAnimation",), + 0x80A143A8:("EnGo_ChangeToShiveringAnimation",), + 0x80A14430:("EnGo_SetupAthletic",), + 0x80A1449C:("EnGo_SetupSpectator",), + 0x80A144F4:("EnGo_SetupGatekeeper",), + 0x80A145AC:("EnGo_SetupGraveyardGoron",), + 0x80A14668:("EnGo_SetupShrineGoron",), + 0x80A146CC:("EnGo_SetupMedigoron",), + 0x80A14798:("EnGo_SetupInitialAction",), + 0x80A149B0:("EnGo_Idle",), + 0x80A14B30:("EnGo_Sleep",), + 0x80A14E14:("EnGo_Frozen",), + 0x80A14E74:("EnGo_AwaitThaw",), + 0x80A14EB0:("EnGo_Thaw",), + 0x80A14FC8:("EnGo_HandleSpringArrivalCutscene",), + 0x80A153FC:("EnGo_Snowball",), + 0x80A15684:("EnGo_GetMsgEventScript",), + 0x80A157C4:("EnGo_Talk",), 0x80A1590C:("EnGo_Init",), 0x80A15960:("EnGo_Destroy",), 0x80A159B0:("EnGo_Update",), - 0x80A15B80:("func_80A15B80",), + 0x80A15B80:("EnGo_Draw_NoSkeleton",), 0x80A15D04:("EnGo_OverrideLimbDraw",), 0x80A15E38:("EnGo_TransfromLimbDraw",), - 0x80A15FEC:("func_80A15FEC",), + 0x80A15FEC:("EnGo_Draw",), 0x80A16D40:("EnRaf_ClearPixelTeeth",), 0x80A16D6C:("EnRaf_ClearPixelPetal",), 0x80A16D90:("EnRaf_Init",), diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index b96696b46..28b64d2fa 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -155,7 +155,7 @@ weekEventReg = { (18 << 8) | 0x10: "WEEKEVENTREG_18_10", (18 << 8) | 0x20: "WEEKEVENTREG_18_20", (18 << 8) | 0x40: "WEEKEVENTREG_18_40", - (18 << 8) | 0x80: "WEEKEVENTREG_18_80", + (18 << 8) | 0x80: "WEEKEVENTREG_HAS_POWDERKEG_PRIVILEGES", (19 << 8) | 0x01: "WEEKEVENTREG_19_01", (19 << 8) | 0x02: "WEEKEVENTREG_19_02", (19 << 8) | 0x04: "WEEKEVENTREG_19_04", @@ -174,15 +174,15 @@ weekEventReg = { (20 << 8) | 0x80: "WEEKEVENTREG_20_80", (21 << 8) | 0x01: "WEEKEVENTREG_21_01", (21 << 8) | 0x02: "WEEKEVENTREG_21_02", - (21 << 8) | 0x04: "WEEKEVENTREG_21_04", - (21 << 8) | 0x08: "WEEKEVENTREG_21_08", + (21 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON", + (21 << 8) | 0x08: "WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON", (21 << 8) | 0x10: "WEEKEVENTREG_21_10", (21 << 8) | 0x20: "WEEKEVENTREG_21_20", (21 << 8) | 0x40: "WEEKEVENTREG_21_40", (21 << 8) | 0x80: "WEEKEVENTREG_21_80", (22 << 8) | 0x01: "WEEKEVENTREG_22_01", (22 << 8) | 0x02: "WEEKEVENTREG_22_02", - (22 << 8) | 0x04: "WEEKEVENTREG_22_04", + (22 << 8) | 0x04: "WEEKEVENTREG_CALMED_GORON_ELDERS_SON", (22 << 8) | 0x08: "WEEKEVENTREG_22_08", (22 << 8) | 0x10: "WEEKEVENTREG_22_10", (22 << 8) | 0x20: "WEEKEVENTREG_22_20", @@ -714,11 +714,11 @@ weekEventReg = { (88 << 8) | 0x08: "WEEKEVENTREG_88_08", (88 << 8) | 0x10: "WEEKEVENTREG_88_10", (88 << 8) | 0x20: "WEEKEVENTREG_88_20", - (88 << 8) | 0x40: "WEEKEVENTREG_88_40", - (88 << 8) | 0x80: "WEEKEVENTREG_88_80", - (89 << 8) | 0x01: "WEEKEVENTREG_89_01", - (89 << 8) | 0x02: "WEEKEVENTREG_89_02", - (89 << 8) | 0x04: "WEEKEVENTREG_89_04", + (88 << 8) | 0x40: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE", + (88 << 8) | 0x80: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_HUMAN", + (89 << 8) | 0x01: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_DEKU", + (89 << 8) | 0x02: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_ZORA", + (89 << 8) | 0x04: "WEEKEVENTREG_GATEKEEPER_OPENED_GORON_SHRINE_FOR_GORON", (89 << 8) | 0x08: "WEEKEVENTREG_89_08", (89 << 8) | 0x10: "WEEKEVENTREG_89_10", (89 << 8) | 0x20: "WEEKEVENTREG_89_20", From 0261dc0a5c99ab87fed760c0cb81d1f7c4f9dc3b Mon Sep 17 00:00:00 2001 From: TrulyNaN <52424023+TrulyNaN@users.noreply.github.com> Date: Fri, 2 Jun 2023 00:25:03 -0400 Subject: [PATCH 21/36] ovl_Bg_F40_Swlift OK and documented. obj_f40_obj documented. (#1171) * Ported ovl_Bg_F40_Swlift to most recent zeldaret/master. * Ran formatter. * Attempt at fixing formatter problem. * Applied PR changes suggestions and added authors Co-authored-by: petrie911 Co-authored-by: Isghj5 Co-authored-by: Tom-Overton Co-authored-by: Derek-Hensley * More PR fixes. Put object_f40_obj unused descriptor as comments. Added another author. Co-authored-by: AngheloAlf * Fixed some effect of handling merge conflicts. Some early returns added and renames in object_f40_obj.xml --------- Co-authored-by: petrie911 Co-authored-by: Isghj5 Co-authored-by: Tom-Overton Co-authored-by: Derek-Hensley Co-authored-by: AngheloAlf --- assets/xml/objects/object_f40_obj.xml | 34 ++++--- spec | 4 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 4 +- .../actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c | 4 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.c | 91 ++++++++++++++++--- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.h | 7 +- 6 files changed, 109 insertions(+), 35 deletions(-) diff --git a/assets/xml/objects/object_f40_obj.xml b/assets/xml/objects/object_f40_obj.xml index 17e7210de..636a80682 100644 --- a/assets/xml/objects/object_f40_obj.xml +++ b/assets/xml/objects/object_f40_obj.xml @@ -1,17 +1,25 @@  + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/spec b/spec index a9d627634..12fce05ce 100644 --- a/spec +++ b/spec @@ -1637,9 +1637,7 @@ beginseg name "ovl_Bg_F40_Swlift" compress include "build/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.o" - include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.data.o" - include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.bss.o" - include "build/data/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift.reloc.o" + include "build/src/overlays/actors/ovl_Bg_F40_Swlift/ovl_Bg_F40_Swlift_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c index be1958cb4..134e7227a 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c @@ -229,7 +229,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004640); + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerBlockCol); if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; @@ -373,5 +373,5 @@ void BgF40Block_Update(Actor* thisx, PlayState* play) { } void BgF40Block_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_f40_obj_DL_0043D0); + Gfx_DrawDListOpa(play, gStoneTowerBlockDL); } diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c index 075f38607..2c9919728 100644 --- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c +++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c @@ -42,7 +42,7 @@ void BgF40Flift_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004240); + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerTempleSquareElevatorCol); this->dyna.actor.params = 1; this->actionFunc = func_808D75F0; } @@ -91,5 +91,5 @@ void BgF40Flift_Update(Actor* thisx, PlayState* play) { } void BgF40Flift_Draw(Actor* thisx, PlayState* play) { - Gfx_DrawDListOpa(play, object_f40_obj_DL_004038); + Gfx_DrawDListOpa(play, gStoneTowerTempleSquareElevatorDL); } diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c index 97fd3f068..bf6244efe 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c @@ -5,6 +5,7 @@ */ #include "z_bg_f40_swlift.h" +#include "objects/object_f40_obj/object_f40_obj.h" #define FLAGS (ACTOR_FLAG_10) @@ -12,11 +13,13 @@ void BgF40Swlift_Init(Actor* thisx, PlayState* play); void BgF40Swlift_Destroy(Actor* thisx, PlayState* play); -void BgF40Swlift_Update(Actor* thisx, PlayState* play); +void BgF40Swlift_Update(Actor* thisx, PlayState* play2); void BgF40Swlift_Draw(Actor* thisx, PlayState* play); -#if 0 -ActorInit Bg_F40_Swlift_InitVars = { +static s32 sSwitchFlags[4] = { 0xFF, 0xFF, 0xFF, 0xFF }; +static s32 sHeights[4]; + +const ActorInit Bg_F40_Swlift_InitVars = { ACTOR_BG_F40_SWLIFT, ACTORCAT_BG, FLAGS, @@ -28,24 +31,86 @@ ActorInit Bg_F40_Swlift_InitVars = { (ActorFunc)BgF40Swlift_Draw, }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_8096F540[] = { +static InitChainEntry sInitChain[] = { ICHAIN_F32(uncullZoneScale, 550, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneForward, 5000, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; -#endif +void BgF40Swlift_Init(Actor* thisx, PlayState* play) { + BgF40Swlift* this = THIS; + s32 index; + s32 pad; -extern InitChainEntry D_8096F540[]; + Actor_ProcessInitChain(&this->dyna.actor, sInitChain); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); + index = BG_F40_SWLIFT_GET_INDEX(thisx); + if ((index < 0) || (index >= 5)) { //! @bug An index greater than 3 will cause an out of bounds array access. + Actor_Kill(&this->dyna.actor); + return; + } -extern UNK_TYPE D_06003B08; -extern UNK_TYPE D_06003E80; + sHeights[index] = this->dyna.actor.world.pos.y; + sSwitchFlags[index] = BG_F40_SWLIFT_GET_SWITCHFLAG(thisx); + if (index != 0) { + Actor_Kill(&this->dyna.actor); + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Init.s") + DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerVerticallyOscillatingPlatformCol); + this->dyna.actor.params = 0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Destroy.s") +void BgF40Swlift_Destroy(Actor* thisx, PlayState* play) { + BgF40Swlift* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Update.s") + DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_F40_Swlift/BgF40Swlift_Draw.s") +void BgF40Swlift_Update(Actor* thisx, PlayState* play2) { + PlayState* play = play2; + BgF40Swlift* this = THIS; + s32 i; + + for (i = 1; i < ARRAY_COUNT(sSwitchFlags); i++) { + if ((sSwitchFlags[i] == 0xFF) || !Flags_GetSwitch(play, sSwitchFlags[i])) { + break; + } + } + + i--; + if (i != this->dyna.actor.params) { + f32 heightOffset; + + this->dyna.actor.params = -1; + heightOffset = (sHeights[i] - this->dyna.actor.world.pos.y) * 0.1f; + if (heightOffset > 0.0f) { + heightOffset = CLAMP(heightOffset, 0.5f, 15.0f); + } else { + heightOffset = CLAMP(heightOffset, -15.0f, -0.5f); + } + + if (Math_StepToF(&this->dyna.actor.speed, heightOffset, 1.0f) && (fabsf(heightOffset) <= 0.5f)) { + if (Math_StepToF(&this->dyna.actor.world.pos.y, sHeights[i], fabsf(this->dyna.actor.speed))) { + this->dyna.actor.params = i; + this->timer = 48; + this->dyna.actor.speed = 0.0f; + } + } else { + this->dyna.actor.world.pos.y += this->dyna.actor.speed; + } + } else { + if (this->timer == 0) { + this->timer = 48; + } + this->timer--; + this->dyna.actor.world.pos.y = + sHeights[this->dyna.actor.params] + (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f); + } +} + +void BgF40Swlift_Draw(Actor* thisx, PlayState* play) { + BgF40Swlift* this = THIS; + + Gfx_DrawDListOpa(play, gStoneTowerVerticallyOscillatingPlatformDL); +} diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h index a687fc642..e377b73e0 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.h @@ -1,13 +1,16 @@ #ifndef Z_BG_F40_SWLIFT_H #define Z_BG_F40_SWLIFT_H +#define BG_F40_SWLIFT_GET_SWITCHFLAG(thisx) ((thisx)->params & 0xFF) +#define BG_F40_SWLIFT_GET_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) + #include "global.h" struct BgF40Swlift; typedef struct BgF40Swlift { - /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x1C]; + /* 0x000 */ DynaPolyActor dyna; + /* 0x15C */ s32 timer; } BgF40Swlift; // size = 0x160 #endif // Z_BG_F40_SWLIFT_H From 4b25b4d8e655c5280fd42e5c99f3971ae9b5326b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 2 Jun 2023 14:39:39 +1000 Subject: [PATCH 22/36] Misc Cleanup 2 (#1260) * more misc cleanup * PR suggestions * more abs alt, csId * more cleanup, can't help it * fix incorrect sq * more fixes --- src/boot_O2/padutils.c | 9 +- src/boot_O2_g3/fault.c | 2 +- src/boot_O2_g3/fault_drawer.c | 10 +- src/code/sched.c | 2 +- src/code/z_actor.c | 22 ++-- src/code/z_bgcheck.c | 6 +- src/code/z_camera.c | 5 +- src/code/z_collision_btltbls.c | 2 +- src/code/z_eff_blure.c | 68 ++++++------ src/code/z_effect.c | 66 ++++++------ src/code/z_eventmgr.c | 12 +-- src/code/z_parameter.c | 1 - src/code/z_scene.c | 2 +- src/code/z_scene_proc.c | 2 +- src/code/z_snap.c | 20 ++-- src/code/z_sram_NES.c | 4 +- src/libultra/gu/position.c | 8 +- src/libultra/io/contpfs.c | 3 +- src/libultra/io/pfschecker.c | 6 +- src/libultra/libc/ldiv.c | 4 +- src/libultra/libc/ll.c | 2 +- src/libultra/rmon/xldtob.c | 2 +- src/libultra/rmon/xprintf.c | 2 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c | 2 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 5 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 5 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 6 ++ src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 9 +- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 4 +- src/overlays/actors/ovl_En_Dnb/z_en_dnb.c | 53 +++++---- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 6 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 11 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 7 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 54 ++++++---- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 91 +++++++++++++--- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 31 +++--- src/overlays/actors/ovl_En_In/z_en_in.c | 2 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 4 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 44 +++++--- src/overlays/actors/ovl_En_Ossan/z_en_ossan.c | 97 ++++++++++++----- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 3 + .../actors/ovl_En_Pamera/z_en_pamera.c | 3 - src/overlays/actors/ovl_En_Sda/z_en_sda.c | 5 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 34 +++--- src/overlays/actors/ovl_En_Talk/z_en_talk.c | 4 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 35 +++--- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 43 ++++++-- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 5 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 18 +++- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 55 +++++----- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 101 +++++++++--------- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 13 +-- .../actors/ovl_Obj_Kibako2/z_obj_kibako2.c | 2 +- .../actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c | 2 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 2 +- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 2 +- src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c | 29 ++--- .../actors/ovl_player_actor/z_player.c | 4 +- 62 files changed, 636 insertions(+), 423 deletions(-) diff --git a/src/boot_O2/padutils.c b/src/boot_O2/padutils.c index 95f1dfa3b..accd09e11 100644 --- a/src/boot_O2/padutils.c +++ b/src/boot_O2/padutils.c @@ -66,11 +66,10 @@ s8 PadUtils_GetRelY(Input* input) { } void PadUtils_UpdateRelXY(Input* input) { - s32 curX, curY; - s32 relX, relY; - - curX = PadUtils_GetCurX(input); - curY = PadUtils_GetCurY(input); + s32 curX = PadUtils_GetCurX(input); + s32 curY = PadUtils_GetCurY(input); + s32 relX; + s32 relY; if (curX > 7) { relX = (curX < 0x43) ? curX - 7 : 0x43 - 7; diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 6e1656170..eb190859e 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -447,7 +447,7 @@ void osSyncPrintfThreadContext(OSThread* t) { OSThread* Fault_FindFaultedThread() { OSThread* iter = __osGetActiveQueue(); while (iter->priority != -1) { - if (iter->priority > 0 && iter->priority < 0x7F && (iter->flags & 3)) { + if ((iter->priority > 0) && (iter->priority < 0x7F) && (iter->flags & 3)) { return iter; } iter = iter->tlnext; diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot_O2_g3/fault_drawer.c index 8efc930ec..f694be8aa 100644 --- a/src/boot_O2_g3/fault_drawer.c +++ b/src/boot_O2_g3/fault_drawer.c @@ -57,7 +57,7 @@ void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 col s32 xSize = xEnd - xStart + 1; s32 ySize = yEnd - yStart + 1; - if (xDiff > 0 && yDiff > 0) { + if ((xDiff > 0) && (yDiff > 0)) { if (xDiff < xSize) { xSize = xDiff; } @@ -127,11 +127,11 @@ void FaultDrawer_UpdatePrintColor() { if (sFaultDrawContext->osSyncPrintfEnabled) { osSyncPrintf(VT_RST); idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->foreColor); - if (idx >= 0 && idx < 8) { + if ((idx >= 0) && (idx < 8)) { osSyncPrintf(VT_SGR("3%d"), idx); } idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->backColor); - if (idx >= 0 && idx < 8) { + if ((idx >= 0) && (idx < 8)) { osSyncPrintf(VT_SGR("4%d"), idx); } } @@ -180,7 +180,7 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) { for (; count != 0; count--, str++) { if (sFaultDrawContext->escCode) { sFaultDrawContext->escCode = false; - if (*str >= '1' && *str <= '9') { + if ((*str >= '1') && (*str <= '9')) { FaultDrawer_SetForeColor(sFaultDrawContext->printColors[*str - '0']); } } else { @@ -192,9 +192,11 @@ void* FaultDrawer_FormatStringFunc(void* arg, const char* str, size_t count) { sFaultDrawContext->cursorX = sFaultDrawContext->w; break; + case '\x1A': sFaultDrawContext->escCode = true; break; + default: if (sFaultDrawContext->osSyncPrintfEnabled) { osSyncPrintf("%c", *str); diff --git a/src/code/sched.c b/src/code/sched.c index c2630677c..9e2016833 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -396,7 +396,7 @@ void Sched_HandleRetrace(SchedContext* sched) { if (sched->curBuf->updateRate2 > 0) { sched->curBuf->updateRate2--; } - if (sched->curBuf->updateRate2 <= 0 && sched->pendingSwapBuf1 != NULL) { + if ((sched->curBuf->updateRate2 <= 0) && (sched->pendingSwapBuf1 != NULL)) { Sched_RetraceUpdateFramebuffer(sched, sched->pendingSwapBuf1); } } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index b5a24cfac..c7e2c4574 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -695,7 +695,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS * Tests if current scene switch flag is set. */ s32 Flags_GetSwitch(PlayState* play, s32 flag) { - if (flag >= 0 && flag < 0x80) { + if ((flag >= 0) && (flag < 0x80)) { return play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F)); } return 0; @@ -705,7 +705,7 @@ s32 Flags_GetSwitch(PlayState* play, s32 flag) { * Sets current scene switch flag. */ void Flags_SetSwitch(PlayState* play, s32 flag) { - if (flag >= 0 && flag < 0x80) { + if ((flag >= 0) && (flag < 0x80)) { play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F); } } @@ -714,7 +714,7 @@ void Flags_SetSwitch(PlayState* play, s32 flag) { * Unsets current scene switch flag. */ void Flags_UnsetSwitch(PlayState* play, s32 flag) { - if (flag >= 0 && flag < 0x80) { + if ((flag >= 0) && (flag < 0x80)) { play->actorCtx.sceneFlags.switches[(flag & ~0x1F) >> 5] &= ~(1 << (flag & 0x1F)); } } @@ -793,7 +793,7 @@ void Flags_UnsetClearTemp(PlayState* play, s32 roomNumber) { * Tests if current scene collectible flag is set. */ s32 Flags_GetCollectible(PlayState* play, s32 flag) { - if (flag > 0 && flag < 0x80) { + if ((flag > 0) && (flag < 0x80)) { return play->actorCtx.sceneFlags.collectible[(flag & ~0x1F) >> 5] & (1 << (flag & 0x1F)); } return 0; @@ -803,7 +803,7 @@ s32 Flags_GetCollectible(PlayState* play, s32 flag) { * Sets current scene collectible flag. */ void Flags_SetCollectible(PlayState* play, s32 flag) { - if (flag > 0 && flag < 0x80) { + if ((flag > 0) && (flag < 0x80)) { play->actorCtx.sceneFlags.collectible[(flag & ~0x1F) >> 5] |= 1 << (flag & 0x1F); } } @@ -3268,12 +3268,12 @@ void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) { for (i = 0; i < numTransitionActors; transitionActorList++, i++) { if (transitionActorList->id >= 0) { - if ((transitionActorList->sides[0].room >= 0 && - (play->roomCtx.curRoom.num == transitionActorList->sides[0].room || - play->roomCtx.prevRoom.num == transitionActorList->sides[0].room)) || - (transitionActorList->sides[1].room >= 0 && - (play->roomCtx.curRoom.num == transitionActorList->sides[1].room || - play->roomCtx.prevRoom.num == transitionActorList->sides[1].room))) { + if (((transitionActorList->sides[0].room >= 0) && + ((play->roomCtx.curRoom.num == transitionActorList->sides[0].room) || + (play->roomCtx.prevRoom.num == transitionActorList->sides[0].room))) || + ((transitionActorList->sides[1].room >= 0) && + ((play->roomCtx.curRoom.num == transitionActorList->sides[1].room) || + (play->roomCtx.prevRoom.num == transitionActorList->sides[1].room)))) { s16 rotY = DEG_TO_BINANG((transitionActorList->rotY >> 7) & 0x1FF); if (Actor_SpawnAsChildAndCutscene(actorCtx, play, transitionActorList->id & 0x1FFF, diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 2fc1852ab..e30dec5d5 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1920,12 +1920,14 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul s32 bgId; f32 temp_f0_2; f32 f32temp; - f32 nx2, nz2; + f32 nx2; + f32 nz2; Vec3f checkLineNext; Vec3f checkLinePrev; f32 n2XZDist; f32 n3XZDist; - f32 nx3, nz3; + f32 nx3; + f32 nz3; s32 bccFlags; Vec3f posIntersect2; s32 bgId2; diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 91a1d6b06..7fac2a2b2 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -6777,8 +6777,9 @@ s32 Camera_Special5(Camera* camera) { spA4 = BINANG_SUB(focalActorPosRot->rot.y, sp6C.yaw); sp74.r = roData->eyeDist; rand = Rand_ZeroOne(); - sp74.yaw = BINANG_ROT180(focalActorPosRot->rot.y) + - (s16)(spA4 < 0 ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f))); + sp74.yaw = + BINANG_ROT180(focalActorPosRot->rot.y) + + (s16)((spA4 < 0) ? -(s16)(0x1553 + (s16)(rand * 2730.0f)) : (s16)(0x1553 + (s16)(rand * 2730.0f))); sp74.pitch = roData->pitch; OLib_AddVecGeoToVec3f(eyeNext, &spA8.pos, &sp74); *eye = *eyeNext; diff --git a/src/code/z_collision_btltbls.c b/src/code/z_collision_btltbls.c index c9f014f4f..36528e467 100644 --- a/src/code/z_collision_btltbls.c +++ b/src/code/z_collision_btltbls.c @@ -790,7 +790,7 @@ DamageTable sDamageTablePresets[] = { * is out of range. */ DamageTable* DamageTable_Get(s32 index) { - if (index < 0 || index > ARRAY_COUNT(sDamageTablePresets) - 1) { + if ((index < 0) || (index >= ARRAY_COUNT(sDamageTablePresets))) { return NULL; } diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index f25273279..370ca9481 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -753,7 +753,7 @@ void EffectBlure_DrawSimpleVertices(GraphicsContext* gfxCtx, EffectBlure* this, j = 0; - for (i = 0; i < this->numElements - 1; i++) { + for (i = 0; i < this->numElements - 1; i++, j += 4) { if (this->drawMode == 1) { alphaRatio = (f32)this->elements[i].timer / (f32)this->elemDuration; gDPSetPrimColor(POLY_XLU_DISP++, 0x00, 0x80, this->altPrimColor.r, this->altPrimColor.g, @@ -761,45 +761,43 @@ void EffectBlure_DrawSimpleVertices(GraphicsContext* gfxCtx, EffectBlure* this, gDPPipeSync(POLY_XLU_DISP++); } - if (1) {} // Necessary to match - gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0); gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0); - if (this->flags & 4) { - sp1B0.x = ((f32)vtx[4 * i + 0].v.ob[0] + (f32)vtx[4 * i + 1].v.ob[0]) * 0.5f; - sp1B0.y = ((f32)vtx[4 * i + 0].v.ob[1] + (f32)vtx[4 * i + 1].v.ob[1]) * 0.5f; - sp1B0.z = ((f32)vtx[4 * i + 0].v.ob[2] + (f32)vtx[4 * i + 1].v.ob[2]) * 0.5f; - sp1A4.x = ((f32)vtx[4 * i + 2].v.ob[0] + (f32)vtx[4 * i + 3].v.ob[0]) * 0.5f; - sp1A4.y = ((f32)vtx[4 * i + 2].v.ob[1] + (f32)vtx[4 * i + 3].v.ob[1]) * 0.5f; - sp1A4.z = ((f32)vtx[4 * i + 2].v.ob[2] + (f32)vtx[4 * i + 3].v.ob[2]) * 0.5f; - - Math_Vec3f_Diff(&sp1A4, &sp1B0, &sp198); - scale = sqrtf(SQXYZ(sp198)); - - if (fabsf(scale) > 0.0005f) { - scale = 1.0f / scale; - Math_Vec3f_Scale(&sp198, scale); - - SkinMatrix_SetTranslate(&sp154, sp1B0.x, sp1B0.y, sp1B0.z); - SkinMatrix_SetRotateAroundVec(&sp114, 0x3FFF, sp198.x, sp198.y, sp198.z); - SkinMatrix_MtxFMtxFMult(&sp154, &sp114, &spD4); - SkinMatrix_SetTranslate(&sp154, -sp1B0.x, -sp1B0.y, -sp1B0.z); - SkinMatrix_MtxFMtxFMult(&spD4, &sp154, &sp94); - - mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp94); - if (mtx == NULL) { - break; - } - - gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0); - gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0); - gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - } + if (!(this->flags & 4)) { + continue; } - j += 4; + sp1B0.x = ((f32)vtx[4 * i + 0].v.ob[0] + (f32)vtx[4 * i + 1].v.ob[0]) / 2.0f; + sp1B0.y = ((f32)vtx[4 * i + 0].v.ob[1] + (f32)vtx[4 * i + 1].v.ob[1]) / 2.0f; + sp1B0.z = ((f32)vtx[4 * i + 0].v.ob[2] + (f32)vtx[4 * i + 1].v.ob[2]) / 2.0f; + sp1A4.x = ((f32)vtx[4 * i + 2].v.ob[0] + (f32)vtx[4 * i + 3].v.ob[0]) / 2.0f; + sp1A4.y = ((f32)vtx[4 * i + 2].v.ob[1] + (f32)vtx[4 * i + 3].v.ob[1]) / 2.0f; + sp1A4.z = ((f32)vtx[4 * i + 2].v.ob[2] + (f32)vtx[4 * i + 3].v.ob[2]) / 2.0f; + + Math_Vec3f_Diff(&sp1A4, &sp1B0, &sp198); + scale = sqrtf(SQXYZ(sp198)); + + if (fabsf(scale) > 0.0005f) { + scale = 1.0f / scale; + Math_Vec3f_Scale(&sp198, scale); + + SkinMatrix_SetTranslate(&sp154, sp1B0.x, sp1B0.y, sp1B0.z); + SkinMatrix_SetRotateAroundVec(&sp114, 0x3FFF, sp198.x, sp198.y, sp198.z); + SkinMatrix_MtxFMtxFMult(&sp154, &sp114, &spD4); + SkinMatrix_SetTranslate(&sp154, -sp1B0.x, -sp1B0.y, -sp1B0.z); + SkinMatrix_MtxFMtxFMult(&spD4, &sp154, &sp94); + + mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp94); + if (mtx == NULL) { + break; + } + + gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_XLU_DISP++, &vtx[j], 4, 0); + gSP2Triangles(POLY_XLU_DISP++, 0, 1, 3, 0, 0, 3, 2, 0); + gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } } } diff --git a/src/code/z_effect.c b/src/code/z_effect.c index b4a76380e..60a98c4d9 100644 --- a/src/code/z_effect.c +++ b/src/code/z_effect.c @@ -187,33 +187,31 @@ void Effect_DrawAll(GraphicsContext* gfxCtx) { s32 i; for (i = 0; i < SPARK_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.sparks[i].status.active) { - sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx); + if (!sEffectContext.sparks[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx); } for (i = 0; i < BLURE_COUNT; i++) { - if (1) { - if (gfxCtx) {} - } // necessary to match - if (sEffectContext.blures[i].status.active) { - sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx); + if (!sEffectContext.blures[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx); } for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.shieldParticles[i].status.active) { - sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx); + if (!sEffectContext.shieldParticles[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx); } - if (1) {} // necessary to match for (i = 0; i < TIRE_MARK_COUNT; i++) { - if (sEffectContext.tireMarks[i].status.active) { - sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx); + if (!sEffectContext.tireMarks[i].status.active) { + continue; } + sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx); } } @@ -221,38 +219,38 @@ void Effect_UpdateAll(PlayState* play) { s32 i; for (i = 0; i < SPARK_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.sparks[i].status.active) { - if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) { - Effect_Destroy(play, i); - } + if (!sEffectContext.sparks[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) { + Effect_Destroy(play, i); } } for (i = 0; i < BLURE_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.blures[i].status.active) { - if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) { - Effect_Destroy(play, i + SPARK_COUNT); - } + if (!sEffectContext.blures[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) { + Effect_Destroy(play, i + SPARK_COUNT); } } for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.shieldParticles[i].status.active) { - if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) { - Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT); - } + if (!sEffectContext.shieldParticles[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) { + Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT); } } for (i = 0; i < TIRE_MARK_COUNT; i++) { - if (1) {} // necessary to match - if (sEffectContext.tireMarks[i].status.active) { - if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) { - Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT); - } + if (!sEffectContext.tireMarks[i].status.active) { + continue; + } + if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) { + Effect_Destroy(play, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT); } } } diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index aec6fdbb0..e3defb402 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -371,7 +371,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) { Camera* retCam; s32 csType = 0; - if ((csId < 0) || (sCutsceneMgr.csId != CS_ID_NONE)) { + if ((csId <= CS_ID_NONE) || (sCutsceneMgr.csId != CS_ID_NONE)) { return csId; } @@ -437,7 +437,7 @@ s16 CutsceneManager_Start(s16 csId, Actor* actor) { s16 CutsceneManager_Stop(s16 csId) { ActorCutscene* csEntry; - if (csId < 0) { + if (csId <= CS_ID_NONE) { return csId; } @@ -468,28 +468,28 @@ ActorCutscene* CutsceneManager_GetCutsceneEntry(s16 csId) { } s16 CutsceneManager_GetAdditionalCsId(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return CS_ID_NONE; } return CutsceneManager_GetCutsceneEntryImpl(csId)->additionalCsId; } s16 CutsceneManager_GetLength(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return -1; } return CutsceneManager_GetCutsceneEntryImpl(csId)->length; } s16 CutsceneManager_GetCutsceneScriptIndex(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return -1; } return CutsceneManager_GetCutsceneEntryImpl(csId)->scriptIndex; } s16 CutsceneManager_GetCutsceneCustomValue(s16 csId) { - if (csId < 0) { + if (csId <= CS_ID_NONE) { return -1; } return CutsceneManager_GetCutsceneEntryImpl(csId)->customValue; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 86b6d0107..25e6a26a5 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -3867,7 +3867,6 @@ void Interface_DrawItemButtons(PlayState* play) { OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[0], D_801BF9DC[0], D_801BFAF4[0], D_801BFAF4[0], D_801BF9E4[0] * 2, D_801BF9E4[0] * 2, 100, 255, 120, interfaceCtx->bAlpha); - if (1) {} gDPPipeSync(OVERLAY_DISP++); // C-Left Button Color & Texture diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 26dc39507..623db6b24 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -89,7 +89,7 @@ s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) { s32 i; for (i = 0; i < objectCtx->num; i++) { - if ((objectCtx->status[i].id < 0 ? -objectCtx->status[i].id : objectCtx->status[i].id) == objectId) { + if (ABS_ALT(objectCtx->status[i].id) == objectId) { return i; } } diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c index c899b4d83..b4597a5c2 100644 --- a/src/code/z_scene_proc.c +++ b/src/code/z_scene_proc.c @@ -400,7 +400,7 @@ void AnimatedMat_DrawMain(PlayState* play, AnimatedMaterial* matAnim, f32 alphaR if ((matAnim != NULL) && (matAnim->segment != 0)) { do { segment = matAnim->segment; - segmentAbs = ((segment < 0) ? -segment : segment) + 7; + segmentAbs = ABS_ALT(segment) + 7; matAnimDrawHandlers[matAnim->type](play, segmentAbs, Lib_SegmentedToVirtual(matAnim->params)); matAnim++; } while (segment >= 0); diff --git a/src/code/z_snap.c b/src/code/z_snap.c index 9361cc1e0..3524fe3ab 100644 --- a/src/code/z_snap.c +++ b/src/code/z_snap.c @@ -42,9 +42,6 @@ s32 Snap_RecordPictographedActors(PlayState* play) { break; } - //! FAKE: - if (1) {} - // Actors which may be pictographed anywhere switch (actor->id) { case ACTOR_EN_KAKASI: @@ -71,15 +68,20 @@ s32 Snap_RecordPictographedActors(PlayState* play) { case ACTOR_EN_GE2: seen |= PICTO_SEEN_ANYWHERE; break; + + default: + break; + } + + if (!seen) { + continue; } // If actor is recordable, run its validity function and record if valid - if (seen) { - pictoActor = (PictoActor*)actor; - if (pictoActor->validationFunc != NULL) { - if ((pictoActor->validationFunc)(play, actor) == 0) { - validCount++; - } + pictoActor = (PictoActor*)actor; + if (pictoActor->validationFunc != NULL) { + if (pictoActor->validationFunc(play, actor) == 0) { + validCount++; } } } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index ac68f0fac..f47a8e201 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -548,7 +548,7 @@ void Sram_GenerateRandomSaveFields(void) { do { randBombers = Rand_S16Offset(0, 6); - } while (randBombers <= 0 || randBombers >= 6); + } while ((randBombers <= 0) || (randBombers >= 6)); gSaveContext.save.saveInfo.bomberCode[0] = randBombers; @@ -558,7 +558,7 @@ void Sram_GenerateRandomSaveFields(void) { do { randBombers = Rand_S16Offset(0, 6); - } while (randBombers <= 0 || randBombers >= 6); + } while ((randBombers <= 0) || (randBombers >= 6)); sp2A = 0; do { diff --git a/src/libultra/gu/position.c b/src/libultra/gu/position.c index 4af6dadc4..9ba9d3570 100644 --- a/src/libultra/gu/position.c +++ b/src/libultra/gu/position.c @@ -6,8 +6,12 @@ */ void guPositionF(f32 mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z) { static f32 D_80134D00 = M_PI / 180.0f; - f32 sinr, sinp, sinh; - f32 cosr, cosp, cosh; + f32 sinr; + f32 sinp; + f32 sinh; + f32 cosr; + f32 cosp; + f32 cosh; rot *= D_80134D00; pitch *= D_80134D00; diff --git a/src/libultra/io/contpfs.c b/src/libultra/io/contpfs.c index fd4c4e459..e9431a741 100644 --- a/src/libultra/io/contpfs.c +++ b/src/libultra/io/contpfs.c @@ -66,7 +66,8 @@ s32 __osRepairPackId(OSPfs* pfs, __OSPackId* badid, __OSPackId* newid) { u8 buf[BLOCKSIZE]; u8 comp[BLOCKSIZE]; u8 mask = 0; - s32 i, j = 0; + s32 i = 0; + s32 j = 0; u16 index[4]; newid->repaired = 0xFFFFFFFF; diff --git a/src/libultra/io/pfschecker.c b/src/libultra/io/pfschecker.c index bf885a1a4..d3a635768 100644 --- a/src/libultra/io/pfschecker.c +++ b/src/libultra/io/pfschecker.c @@ -18,8 +18,10 @@ s32 osPfsChecker(OSPfs* pfs) { __OSInodeUnit nextNodeInFile[16]; __OSInodeCache cache; s32 fixed = 0; - u8 bank, prevBank = 254; - s32 cc, cl; + u8 bank = 254; + u8 prevBank = 254; + s32 cc; + s32 cl; s32 offset; ret = __osCheckId(pfs); diff --git a/src/libultra/libc/ldiv.c b/src/libultra/libc/ldiv.c index 21fe84e80..9f9d75031 100644 --- a/src/libultra/libc/ldiv.c +++ b/src/libultra/libc/ldiv.c @@ -5,7 +5,7 @@ ldiv_t ldiv(long numer, long denom) { val.quot = numer / denom; val.rem = numer - denom * val.quot; - if (val.quot < 0 && val.rem > 0) { + if ((val.quot < 0) && (val.rem > 0)) { val.quot++; val.rem -= denom; } @@ -18,7 +18,7 @@ lldiv_t lldiv(long long numer, long long denom) { val.quot = numer / denom; val.rem = numer - denom * val.quot; - if (val.quot < 0 && val.rem > 0) { + if ((val.quot < 0) && (val.rem > 0)) { val.quot++; val.rem -= denom; } diff --git a/src/libultra/libc/ll.c b/src/libultra/libc/ll.c index 399d2caf4..0fd42d1ed 100644 --- a/src/libultra/libc/ll.c +++ b/src/libultra/libc/ll.c @@ -36,7 +36,7 @@ void __ull_divremi(unsigned long long* quotient, unsigned long long* remainder, long long __ll_mod(long long left, long long right) { long long rem = left % right; - if ((rem < 0 && right > 0) || (rem > 0 && right < 0)) { + if (((rem < 0) && (right > 0)) || ((rem > 0) && (right < 0))) { rem += right; } return rem; diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c index 460d0951c..e943e51e2 100644 --- a/src/libultra/rmon/xldtob.c +++ b/src/libultra/rmon/xldtob.c @@ -107,7 +107,7 @@ void _Ldtob(_Pft* args, u8 type) { val = (val - lo) * 1.0e8; } ptr = ptr + 8; - for (j = 8; lo > 0 && --j >= 0;) { + for (j = 8; (lo > 0) && (--j >= 0);) { qr = ldiv(lo, 10); *--ptr = qr.rem + '0'; lo = qr.quot; diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c index ddb83652d..813520f01 100644 --- a/src/libultra/rmon/xprintf.c +++ b/src/libultra/rmon/xprintf.c @@ -206,7 +206,7 @@ void _Putfld(_Pft* px, va_list* pap, unsigned char code, unsigned char* ac) { case 's': px->s = va_arg(*pap, char*); px->n1 = strlen(px->s); - if (px->prec >= 0 && px->n1 > px->prec) { + if ((px->prec >= 0) && (px->n1 > px->prec)) { px->n1 = px->prec; } break; diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c index 693fff484..c226c89f3 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c +++ b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c @@ -85,7 +85,7 @@ void func_80BD66AC(BgHakaTomb* this, PlayState* play) { if (Flags_GetClear(play, this->dyna.actor.room)) { this->dyna.actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8); } - if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId < 0) && + if (!func_80BD6638(&csId, this->csIdList, ARRAY_COUNT(this->csIdList)) && (csId <= CS_ID_NONE) && Flags_GetClear(play, this->dyna.actor.room)) { this->dyna.actor.flags |= ACTOR_FLAG_1; if (this->dyna.actor.isTargeted) { diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c index 48045527f..6ce5f7d81 100644 --- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c +++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c @@ -93,7 +93,10 @@ s32 func_80C0A95C(BgIkninSusceil* this, PlayState* play) { f32 new_var; Player* player = GET_PLAYER(play); Vec3f offset; - f32 temp1, temp2, temp3, temp4; + f32 temp1; + f32 temp2; + f32 temp3; + f32 temp4; Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos); for (i = 0; i < 7; i++) { diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 66f70d9c6..36415d7db 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -843,9 +843,10 @@ void DmStk_PlaySfxForCutsceneAfterPlayingOathToOrder(DmStk* this, PlayState* pla case 594: Audio_PlaySfxAtPos(&this->oathToOrderCutsceneVoicePos, NA_SE_EN_STAL24_SCREAM2); break; - } - if (1) {} + default: + break; + } if ((play->csCtx.curFrame >= 62) && (play->csCtx.curFrame < 273)) { if ((Rand_ZeroOne() < 0.75f) && ((play->state.frames % 2) != 0)) { diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 64899a807..de20e6f63 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -572,6 +572,9 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) { gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0x00FFFFFF) | ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 0x18); break; + + default: + break; } gSaveContext.save.saveInfo.unk_EA8[1] = (gSaveContext.save.saveInfo.unk_EA8[1] & 0xFFFFFF00) | @@ -810,6 +813,9 @@ void func_808BA550(DoorWarp1* this, PlayState* play) { case PLAYER_FORM_HUMAN: temp_f0 = -25.0f; break; + + default: + break; } temp_f2 = this->dyna.actor.world.pos.y + (this->dyna.actor.shape.yOffset * 0.1f) + temp_f0; diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index e18751369..9165b9392 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -203,7 +203,7 @@ void func_808A2918(EnBoom* this, PlayState* play) { } Math_ScaledStepToS(&this->actor.world.rot.y, sp72, - (this->unk_1CF > 0) ? 1000 : (s16)(((sp70 < 0) ? -sp70 : sp70) * sp64)); + (this->unk_1CF > 0) ? 1000 : (s16)(ABS_ALT(sp70) * sp64)); } Math_ScaledStepToS(&this->actor.world.rot.x, sp6E, ABS_ALT(sp6C) * sp64); diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index 558824ad8..8a8770371 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -197,7 +197,8 @@ void func_809438F8(EnDaiku* this, PlayState* play) { } if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { - f32 sq, abs; + f32 xzDist; + f32 yawDiff; Math_ApproachF(&this->actor.world.pos.x, this->unk_26C.x, 0.5f, fabsf(2.0f * Math_SinS(this->actor.world.rot.y))); @@ -205,9 +206,9 @@ void func_809438F8(EnDaiku* this, PlayState* play) { fabsf(2.0f * Math_CosS(this->actor.world.rot.y))); Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_282, 1, 0x7D0, 0xA); - sq = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z)); - abs = fabsf(this->actor.world.rot.y - this->unk_282); - if ((sq < SQ(2.0f)) && (this->unk_258 != NULL) && (abs < 10.0f)) { + xzDist = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z)); + yawDiff = fabsf(this->actor.world.rot.y - this->unk_282); + if ((xzDist < 4.0f) && (this->unk_258 != NULL) && (yawDiff < 10.0f)) { this->unk_25C++; if (this->unk_25C >= this->unk_258->count) { this->unk_25C = 0; diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index 2496a4cc2..cef97a8b0 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -667,7 +667,9 @@ void EnDekunuts_Update(Actor* thisx, PlayState* play) { s32 EnDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnDekunuts* this = THIS; - f32 arg1, arg2, arg3; + f32 arg1; + f32 arg2; + f32 arg3; f32 currentFrame; if (this->actionFunc == func_808BDA4C) { diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c index 2a5198d1f..c7dbd8888 100644 --- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c +++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c @@ -266,34 +266,33 @@ s32 func_80A50950(EnDnbUnkStruct* arg0, PlayState* play2) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 256; i++, arg0++) { - if (arg0->isEnabled == 1) { - if (!isGfxSetup) { - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000); - gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); - isGfxSetup = true; - } - Matrix_Push(); - - //! FAKE: - if (1) {} - - arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f; - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24); - - Matrix_Translate(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW); - Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY); - Matrix_ReplaceRotation(&play->billboardMtxF); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f; - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[idx])); - gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000020); - - Matrix_Pop(); - sp5C += 1; + if (arg0->isEnabled != 1) { + continue; } + + if (!isGfxSetup) { + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); + gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000000); + gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0); + isGfxSetup = true; + } + Matrix_Push(); + + arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f; + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24); + + Matrix_Translate(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW); + Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f; + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[idx])); + gSPDisplayList(POLY_XLU_DISP++, object_hanareyama_obj_DL_000020); + + Matrix_Pop(); + sp5C += 1; } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 503ce584e..8ee28ad7d 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -62,8 +62,10 @@ static Color_RGBAf sOuterColors[] = { }; typedef struct { - u8 r, g, b; -} FairyColorFlags; + /* 0x0 */ u8 r; + /* 0x1 */ u8 g; + /* 0x2 */ u8 b; +} FairyColorFlags; // size = 0x3 static FairyColorFlags sColorFlags[] = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 2, 0 }, { 1, 0, 2 }, { 0, 1, 0 }, { 2, 1, 0 }, { 0, 1, 2 }, diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index 6a7e96b81..9c5bbf42e 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -114,7 +114,7 @@ void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec OPEN_DISPS(play->state.gfxCtx); - if (this->npcIndex >= 4 && limbIndex == 15) { + if ((this->npcIndex >= 4) && (limbIndex == 15)) { index = this->npcIndex - 4; gSPDisplayList(POLY_OPA_DISP++, D_80C2426C[index]); } @@ -136,25 +136,32 @@ void EnEndingHero6_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); - if (this->objectIndex >= 0 && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { + if ((this->objectIndex >= 0) && Object_IsLoaded(&play->objectCtx, this->objectIndex)) { gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->objectIndex].segment); switch (this->npcIndex) { case 4: gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255); break; + case 5: gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255); break; + case 6: gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255); break; + case 7: gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255); break; + case 8: gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); break; + + default: + break; } if (this->npcIndex == 0) { diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index d23e6b9ee..645a757a0 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -502,7 +502,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) { surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && // close enough - (surfaceType != FLOOR_PROPERTY_12 && surfaceType != FLOOR_PROPERTY_13)) { + ((surfaceType != FLOOR_PROPERTY_12) && (surfaceType != FLOOR_PROPERTY_13))) { EnFamos_SetupAttackAim(this); } else if ((Player_GetMask(play) == PLAYER_MASK_STONE) || @@ -545,7 +545,8 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) { surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); hitFloor = this->actor.bgCheckFlags & BGCHECKFLAG_GROUND; - if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == 0xC) || (surfaceType == 0xD)) { + if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == FLOOR_PROPERTY_12) || + (surfaceType == FLOOR_PROPERTY_13)) { this->collider1.base.atFlags &= ~AT_ON; this->collider2.base.atFlags |= AT_ON; if (hitFloor) { @@ -747,7 +748,7 @@ void EnFamos_Update(Actor* thisx, PlayState* play) { f32 oldHeight; s32 oldHoverTimer; // save old value to test if changed - if (this->debrisTimer <= 0 || + if ((this->debrisTimer <= 0) || (this->debrisTimer--, EnFamos_UpdateDebrisPosRot(this), (this->actionFunc != EnFamos_DeathFade))) { oldHoverTimer = this->hoverTimer; EnFamos_UpdateFlipStatus(this); diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.c b/src/overlays/actors/ovl_En_Fg/z_en_fg.c index 925dc93df..0f9b7594e 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -107,7 +107,7 @@ s32 EnFg_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s32 ret; ret = false; - if (animIndex >= 0 && animIndex < 4) { + if ((animIndex >= 0) && (animIndex < 4)) { ret = true; frameCount = sAnimationInfo[animIndex].frameCount; if (frameCount < 0) { @@ -151,15 +151,19 @@ s32 EnFg_GetDamageEffect(EnFg* this) { case 1: ret = FG_DMGEFFECT_DEKUSTICK; break; + case 15: ret = FG_DMGEFFECT_HOOKSHOT; break; + case 14: ret = FG_DMGEFFECT_ARROW; break; + case 3: ret = FG_DMGEFFECT_ICEARROW; break; + default: ret = FG_DMGEFFECT_EXPLOSION; break; @@ -187,8 +191,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->actor.world.pos.y = this->actor.floorHeight + 2.0f; this->actionFunc = EnFg_DoNothing; break; + case FG_DMGEFFECT_HOOKSHOT: break; + case FG_DMGEFFECT_ARROW: this->actor.flags &= ~ACTOR_FLAG_1; this->skelAnime.playSpeed = 0.0f; @@ -202,10 +208,10 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->actor.scale.z = CLAMP_MIN(this->actor.scale.z, 0.001f); this->actionFunc = EnFg_DoNothing; break; + case FG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); - if (1) {} this->actor.params = FG_BLACK; this->skelAnime.playSpeed = 0.0f; ac = this->collider.base.ac; @@ -218,6 +224,7 @@ void EnFg_Idle(EnFg* this, PlayState* play) { this->timer = 0; this->actionFunc = EnFg_Knockback; break; + default: if (DECR(this->timer) == 0) { Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_JUMP); @@ -251,8 +258,10 @@ void EnFg_Jump(EnFg* this, PlayState* play) { this->actor.scale.z = CLAMP_MIN(this->actor.scale.z, 0.001f); this->actionFunc = EnFg_DoNothing; break; + case FG_DMGEFFECT_HOOKSHOT: break; + case FG_DMGEFFECT_EXPLOSION: this->actor.flags &= ~ACTOR_FLAG_1; Actor_PlaySfx(&this->actor, NA_SE_EV_FROG_CRY_0); @@ -269,6 +278,7 @@ void EnFg_Jump(EnFg* this, PlayState* play) { this->timer = 0; this->actionFunc = EnFg_Knockback; break; + default: if (Animation_OnFrame(&this->skelAnime, 8.0f)) { this->skelAnime.curFrame = 8.0f; @@ -461,26 +471,28 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 10; i++, dustEffect++) { - if (dustEffect->type) { - if (!firstDone) { - POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); - gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); - gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); - firstDone = true; - } - - if (1) {} - alpha = (255.0f / 16.0f) * dustEffect->timer; - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, alpha); - gDPPipeSync(POLY_XLU_DISP++); - Matrix_Translate(dustEffect->pos.x, dustEffect->pos.y, dustEffect->pos.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(dustEffect->xyScale, dustEffect->xyScale, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - index = 0.5f * dustEffect->timer; - gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); - gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338); + if (dustEffect->type == 0) { + continue; } + + if (!firstDone) { + POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_0); + gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B328); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, 0); + firstDone = true; + } + + alpha = (255.0f / 16.0f) * dustEffect->timer; + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 0, 0, 0, alpha); + gDPPipeSync(POLY_XLU_DISP++); + Matrix_Translate(dustEffect->pos.x, dustEffect->pos.y, dustEffect->pos.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(dustEffect->xyScale, dustEffect->xyScale, 1.0f, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + index = 0.5f * dustEffect->timer; + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(sDustTextures[index])); + gSPDisplayList(POLY_XLU_DISP++, object_fr_DL_00B338); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index 636cd892e..07dfe95f0 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -126,7 +126,7 @@ static Vec3f sShopItemPositions[3] = { s32 EnFsn_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) { + if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -138,13 +138,17 @@ u16 EnFsn_GetWelcome(PlayState* play) { switch (Player_GetMask(play)) { case PLAYER_MASK_NONE: return 0x29CC; + case PLAYER_MASK_DEKU: return 0x29FC; + case PLAYER_MASK_GORON: case PLAYER_MASK_ZORA: return 0x29FD; + case PLAYER_MASK_KAFEIS_MASK: return 0x2364; + default: return 0x29FE; } @@ -159,8 +163,9 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { } else { this->textId = 0x29E4; this->flags |= ENFSN_END_CONVERSATION; - break; } + break; + case 0x29E0: if (INV_CONTENT(ITEM_MASK_KEATON) == ITEM_MASK_KEATON) { this->flags |= ENFSN_GIVE_ITEM; @@ -171,17 +176,20 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { break; } else { this->textId = 0x29E1; - break; } + break; + case 0x29E1: this->textId = 0x29E2; break; + case 0x29E2: this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_KEATONS_MASK; this->getItemId = GI_MASK_KEATON; this->textId = 0x29E3; break; + case 0x29E3: this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; @@ -189,10 +197,14 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_80_10); this->textId = 0x29F1; break; + case 0x29F1: this->textId = 0x29E4; this->flags |= ENFSN_END_CONVERSATION; break; + + default: + break; } Message_StartTextbox(play, this->textId, &this->actor); if (this->flags & ENFSN_END_CONVERSATION) { @@ -210,7 +222,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { void EnFsn_HandleSetupResumeInteraction(EnFsn* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play) && - this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED) { + (this->cutsceneState == ENFSN_CUTSCENESTATE_STOPPED)) { Actor_ProcessTalkRequest(&this->actor, &play->state); func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); if (ENFSN_IS_SHOP(&this->actor)) { @@ -301,7 +313,7 @@ void EnFsn_CursorLeftRight(EnFsn* this) { } s16 EnFsn_GetThirdDayItemId(void) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && CURRENT_DAY == 3) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04) && (CURRENT_DAY == 3)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_79_40)) { return SI_BOMB_BAG_30_1; } @@ -314,16 +326,22 @@ s16 EnFsn_GetStolenItemId(u32 stolenItem) { switch (stolenItem) { case ITEM_BOTTLE: return SI_BOTTLE; + case ITEM_SWORD_GREAT_FAIRY: return SI_SWORD_GREAT_FAIRY; + case ITEM_SWORD_KOKIRI: return SI_SWORD_KOKIRI; + case ITEM_SWORD_RAZOR: return SI_SWORD_RAZOR; + case ITEM_SWORD_GILDED: return SI_SWORD_GILDED; + + default: + return SI_NONE; } - return SI_NONE; } s32 EnFsn_HasItemsToSell(void) { @@ -450,6 +468,7 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { } Message_StartTextbox(play, this->actor.textId, &this->actor); return true; + case 1: func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; @@ -457,8 +476,10 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { func_80151BB4(play, 3); this->actionFunc = EnFsn_SetupEndInteraction; return true; + + default: + return false; } - return false; } s32 EnFsn_HasPlayerSelectedItem(EnFsn* this, PlayState* play, Input* input) { @@ -487,10 +508,10 @@ void EnFsn_UpdateJoystickInputState(EnFsn* this, PlayState* play) { s8 stickY = CONTROLLER1(&play->state)->rel.stick_y; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -503,10 +524,10 @@ void EnFsn_UpdateJoystickInputState(EnFsn* this, PlayState* play) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -765,7 +786,7 @@ void EnFsn_Haggle(EnFsn* this, PlayState* play) { this->animIndex = FSN_ANIM_SLAM_COUNTER_LOOP; SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, this->animIndex); } else { - if (this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP && Animation_OnFrame(&this->skelAnime, 18.0f)) { + if ((this->animIndex == FSN_ANIM_SLAM_COUNTER_LOOP) && Animation_OnFrame(&this->skelAnime, 18.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_HANKO); } if (this->flags & ENFSN_CALM_DOWN) { @@ -828,20 +849,26 @@ void EnFsn_StartBuying(EnFsn* this, PlayState* play) { this->actor.textId = 0x29CD; Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29CD: this->actor.textId = 0x29CE; EnFsn_HandleLookToShopkeeperBuyingCutscene(this); Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29CE: this->actor.textId = 0xFF; Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_DeterminePrice; break; + case 0x29CF: player->exchangeItemId = PLAYER_IA_NONE; this->actionFunc = EnFsn_SetupDeterminePrice; break; + + default: + break; } } } @@ -860,6 +887,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { } Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29D2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_04)) { this->actor.textId = 0x2A01; @@ -870,6 +898,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { } Message_StartTextbox(play, this->actor.textId, &this->actor); break; + case 0x29D3: case 0x29D4: case 0x29FA: @@ -877,6 +906,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { this->actor.textId = 0x29D5; Message_StartTextbox(play, this->actor.textId, &this->actor); break; + + default: + break; } } } else if (talkState == TEXT_STATE_CHOICE) { @@ -892,6 +924,7 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_FaceShopkeeperSelling; break; + case 1: func_8019F208(); this->isSelling = false; @@ -900,6 +933,9 @@ void EnFsn_AskBuyOrSell(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_StartBuying; break; + + default: + break; } } } @@ -965,21 +1001,29 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { case 5: this->getItemId = GI_RUPEE_BLUE; break; + case 10: this->getItemId = GI_RUPEE_10; break; + case 20: this->getItemId = GI_RUPEE_RED; break; + case 50: this->getItemId = GI_RUPEE_PURPLE; break; + case 200: this->getItemId = GI_RUPEE_HUGE; break; + + default: + break; } this->actionFunc = EnFsn_GiveItem; break; + case 1: func_8019F230(); player->exchangeItemId = PLAYER_IA_NONE; @@ -1146,6 +1190,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { case CANBUY_RESULT_SUCCESS_2: func_8019F208(); SET_WEEKEVENTREG(WEEKEVENTREG_33_04); + // fallthrough case CANBUY_RESULT_SUCCESS_1: if (this->cutsceneState == ENFSN_CUTSCENESTATE_PLAYING) { CutsceneManager_Stop(this->csId); @@ -1171,16 +1216,21 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, PlayState* play) { this->itemIds[this->cursorIndex] = -1; this->actionFunc = EnFsn_GiveItem; break; + case CANBUY_RESULT_NEED_RUPEES: play_sound(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x29F0); this->actionFunc = EnFsn_PlayerCannotBuy; break; + case CANBUY_RESULT_CANNOT_GET_NOW: play_sound(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x29DD); this->actionFunc = EnFsn_PlayerCannotBuy; break; + + default: + break; } } @@ -1211,10 +1261,15 @@ void EnFsn_SelectItem(EnFsn* this, PlayState* play) { case 0: EnFsn_HandleCanPlayerBuyItem(this, play); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); + break; + + default: + break; } } } @@ -1251,12 +1306,16 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_DeterminePrice; break; + case 1: func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); func_80151BB4(play, 3); break; + + default: + break; } } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { @@ -1298,12 +1357,16 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = EnFsn_StartBuying; break; + case 1: func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); func_80151BB4(play, 3); break; + + default: + break; } } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { @@ -1341,6 +1404,7 @@ void EnFsn_FaceShopkeeperSelling(EnFsn* this, PlayState* play) { } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { this->actor.textId = 0x29D6; Message_StartTextbox(play, this->actor.textId, &this->actor); + //! FAKE: if (play) {} } } @@ -1576,12 +1640,15 @@ s32 EnFsn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p case FSN_LIMB_TORSO: limbRotTableIdx = 0; break; + case FSN_LIMB_LEFT_HAND: limbRotTableIdx = 1; break; + case FSN_LIMB_HEAD: limbRotTableIdx = 2; break; + default: limbRotTableIdx = 9; break; diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 3866c4fb1..6fe9bf291 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -426,23 +426,24 @@ void func_80962340(EnFu* this, PlayState* play) { } void func_80962588(EnFu* this, PlayState* play) { - if (Message_ShouldAdvance(play) && (this->unk_552 == 0x2871)) { - if (1) {} - if (play->msgCtx.choiceIndex == 0) { - if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { - func_8019F208(); - Rupees_ChangeBy(-10); - func_80963DE4(this, play); - } else { - play_sound(NA_SE_SY_ERROR); - Message_StartTextbox(play, 0x2873, &this->actor); - this->unk_552 = 0x2873; - } + if (!Message_ShouldAdvance(play) || (this->unk_552 != 0x2871)) { + return; + } + + if (play->msgCtx.choiceIndex == 0) { + if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { + func_8019F208(); + Rupees_ChangeBy(-10); + func_80963DE4(this, play); } else { - func_8019F230(); - Message_StartTextbox(play, 0x2872, &this->actor); - this->unk_552 = 0x2872; + play_sound(NA_SE_SY_ERROR); + Message_StartTextbox(play, 0x2873, &this->actor); + this->unk_552 = 0x2873; } + } else { + func_8019F230(); + Message_StartTextbox(play, 0x2872, &this->actor); + this->unk_552 = 0x2872; } } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 662f8a2c1..cbdc2ba19 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -151,7 +151,7 @@ s32 EnIn_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s16 frameCount; s32 ret = false; - if (animIndex >= 0 && animIndex < 18) { + if ((animIndex >= 0) && (animIndex < 18)) { ret = true; frameCount = sAnimationInfo[animIndex].frameCount; if (frameCount < 0) { diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index 202ed6637..da813182e 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -685,7 +685,7 @@ void func_8095F180(EnIshi* this) { } void func_8095F194(EnIshi* this, PlayState* play) { - if (this->actor.csId < 0) { + if (this->actor.csId <= CS_ID_NONE) { Actor_Kill(&this->actor); } else if (CutsceneManager_GetCurrentCsId() != this->actor.csId) { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index 07e4990bf..ee6e28de2 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -1531,7 +1531,7 @@ void func_80B88D6C(EnKaizoku* this, PlayState* play) { temp_ft4 = this->skelAnime.curFrame - this->skelAnime.playSpeed; temp_ft5 = this->skelAnime.curFrame + this->skelAnime.playSpeed; if (this->skelAnime.curFrame != 0.0f) { - if (((temp_ft4 < 0 && temp_ft5 > 0) || (temp_ft4 < 5 && temp_ft5 > 5))) { + if ((((temp_ft4 < 0) && (temp_ft5 > 0)) || ((temp_ft4 < 5) && (temp_ft5 > 5)))) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); } } diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 7d54f3ed3..73de78707 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -348,8 +348,8 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { } if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { Actor_GetScreenPos(play, &this->picto.actor, &x, &y); - if (this->picto.actor.projectedPos.z > -20.0f && x > 0 && x < SCREEN_WIDTH && y > 0 && y < SCREEN_HEIGHT && - this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { + if ((this->picto.actor.projectedPos.z > -20.0f) && (x > 0) && (x < SCREEN_WIDTH) && (y > 0) && + (y < SCREEN_HEIGHT) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { // faster shaking EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); this->skelanime.playSpeed = 2.0f; diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c index 02f77693d..fd7795f7c 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c @@ -316,7 +316,7 @@ void func_80AEA128(EnLiftNuts* this, PlayState* play) { } void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { - if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && this->unk_34E == 1) { + if ((func_80AE9B4C(0, 3) || func_80AE9B4C(0, 1)) && (this->unk_34E == 1)) { this->actor.flags |= ACTOR_FLAG_10000; } else if (this->actor.xzDistToPlayer > 120.0f) { func_80AE9FC8(this); @@ -326,7 +326,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { if (func_80AE9B4C(0, 0)) { switch (CURRENT_DAY) { case 1: - if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10)) { @@ -339,7 +340,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { break; case 2: - if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else { @@ -360,7 +362,8 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { break; case 3: - if (gSaveContext.save.time > CLOCK_TIME(23, 30) || gSaveContext.save.time <= CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(23, 30)) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0))) { Message_StartTextbox(play, 0x27F7, &this->actor); this->textId = 0x27F7; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_40)) { @@ -383,7 +386,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Flags_UnsetSwitch(play, 0x40); Inventory_SaveDekuPlaygroundHighScore(4); if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_10) && CHECK_WEEKEVENTREG(WEEKEVENTREG_14_20) && - CURRENT_DAY == 3) { + (CURRENT_DAY == 3)) { this->unk_354 = 0; Message_StartTextbox(play, 0x27F4, &this->actor); this->textId = 0x27F4; @@ -394,7 +397,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { } else { if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) >= gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { - if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < 0x2EE0) { + if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < SECONDS_TO_TIMER(120)) { Message_StartTextbox(play, 0x27F9, &this->actor); this->textId = 0x27F9; } else { @@ -428,6 +431,9 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27E9, &this->actor); this->textId = 0x27E9; break; + + default: + break; } } } else { @@ -435,7 +441,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { this->textId = 0x27D8; } func_80AEABF0(this); - } else if (func_80AE9AC4(this, 0) || this->unk_34E == 1) { + } else if (func_80AE9AC4(this, 0) || (this->unk_34E == 1)) { if (this->unk_34E == 1) { func_800B8614(&this->actor, play, 200.0f); } else if (this->actor.playerHeightRel >= -13.0f) { @@ -533,6 +539,9 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27E9, &this->actor); this->textId = 0x27E9; break; + + default: + break; } break; @@ -589,6 +598,9 @@ void func_80AEA910(EnLiftNuts* this, PlayState* play) { Message_StartTextbox(play, 0x27ED, &this->actor); this->textId = 0x27ED; break; + + default: + break; } } } @@ -644,6 +656,9 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) { } } break; + + default: + break; } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x2000, 0x500); @@ -668,6 +683,9 @@ void func_80AEACF8(EnLiftNuts* this, PlayState* play) { this->unk_354++; } break; + + default: + break; } } func_80AEB974(this); @@ -759,7 +777,7 @@ void func_80AEB1C8(EnLiftNuts* this) { void func_80AEB230(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > 0) { + if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] > SECONDS_TO_TIMER(0)) { player->stateFlags1 &= ~PLAYER_STATE1_20; func_80AEB280(this); } @@ -773,8 +791,8 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) { Player* player = GET_PLAYER(play); if (((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.floorBgId == BG_ACTOR_MAX) && - player->actor.world.pos.y < 20.0f) || - gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= 0x2EE0) { + (player->actor.world.pos.y < 20.0f)) || + (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] >= SECONDS_TO_TIMER(120))) { player->stateFlags1 |= PLAYER_STATE1_20; Flags_SetSwitch(play, 0x41); func_80AEB3E0(this, play); @@ -986,9 +1004,9 @@ void EnLiftNuts_Update(Actor* thisx, PlayState* play) { s32 EnLiftNuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { EnLiftNuts* this = THIS; - if (limbIndex == OBJECT_DNT_LIMB_0F || limbIndex == OBJECT_DNT_LIMB_10 || limbIndex == OBJECT_DNT_LIMB_15 || - limbIndex == OBJECT_DNT_LIMB_17 || limbIndex == OBJECT_DNT_LIMB_18 || limbIndex == OBJECT_DNT_LIMB_15 || - limbIndex == OBJECT_DNT_LIMB_1B) { + if ((limbIndex == OBJECT_DNT_LIMB_0F) || (limbIndex == OBJECT_DNT_LIMB_10) || (limbIndex == OBJECT_DNT_LIMB_15) || + (limbIndex == OBJECT_DNT_LIMB_17) || (limbIndex == OBJECT_DNT_LIMB_18) || (limbIndex == OBJECT_DNT_LIMB_15) || + (limbIndex == OBJECT_DNT_LIMB_1B)) { *dList = NULL; } diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index c2e813273..7ada3a223 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -198,7 +198,7 @@ void EnOssan_SetupAction(EnOssan* this, EnOssanActionFunc action) { s32 EnOssan_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) { + if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -210,7 +210,7 @@ void EnOssan_CheckValidSpawn(EnOssan* this) { switch (gSaveContext.save.day) { case 1: case 2: - if (gSaveContext.save.time <= CLOCK_TIME(21, 30) && gSaveContext.save.time > CLOCK_TIME(6, 00)) { + if ((gSaveContext.save.time <= CLOCK_TIME(21, 30)) && (gSaveContext.save.time > CLOCK_TIME(6, 00))) { if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) { Actor_Kill(&this->actor); } @@ -218,16 +218,20 @@ void EnOssan_CheckValidSpawn(EnOssan* this) { Actor_Kill(&this->actor); } break; + case 3: if (this->actor.params == ENOSSAN_CURIOSITY_SHOP_MAN) { Actor_Kill(&this->actor); } - if (!(gSaveContext.save.time <= CLOCK_TIME(22, 00) && gSaveContext.save.time >= CLOCK_TIME(6, 00))) { + if ((gSaveContext.save.time > CLOCK_TIME(22, 00)) || (gSaveContext.save.time < CLOCK_TIME(6, 00))) { if (this->actor.params != ENOSSAN_CURIOSITY_SHOP_MAN) { Actor_Kill(&this->actor); } } break; + + default: + break; } } @@ -377,9 +381,9 @@ void EnOssan_Idle(EnOssan* this, PlayState* play) { this->cutsceneState = ENOSSAN_CUTSCENESTATE_WAITING; } } else { - if (this->actor.xzDistToPlayer < 100.0f && - (player->actor.world.pos.x >= -40.0f && player->actor.world.pos.x <= 40.0f) && - (player->actor.world.pos.z >= -91.0f && player->actor.world.pos.z <= -60.0f)) { + if ((this->actor.xzDistToPlayer < 100.0f) && (player->actor.world.pos.x >= -40.0f) && + (player->actor.world.pos.x <= 40.0f) && (player->actor.world.pos.z >= -91.0f) && + (player->actor.world.pos.z <= -60.0f)) { func_800B8614(&this->actor, play, 100.0f); } if (this->actor.params == ENOSSAN_PART_TIME_WORKER) { @@ -411,11 +415,13 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { this->animIndex = FSN_ANIM_TURN_AROUND_FORWARD; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_TURN_AROUND_FORWARD); break; + case FSN_ANIM_TURN_AROUND_FORWARD: EnOssan_SetHaveMet(this); this->textId = EnOssan_CuriosityShopMan_GetWelcome(this, play); SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, this->animIndex); break; + case FSN_ANIM_HANDS_ON_COUNTER_START: case FSN_ANIM_HAND_ON_FACE_START: case FSN_ANIM_LEAN_FORWARD_START: @@ -425,6 +431,7 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { Message_StartTextbox(play, this->textId, &this->actor); EnOssan_SetupStartShopping(play, this, false); break; + case FSN_ANIM_HANDS_ON_COUNTER_LOOP: case FSN_ANIM_HAND_ON_FACE_LOOP: case FSN_ANIM_LEAN_FORWARD_LOOP: @@ -432,11 +439,13 @@ void EnOssan_BeginInteraction(EnOssan* this, PlayState* play) { this->animIndex = FSN_ANIM_TURN_AROUND_REVERSE; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_TURN_AROUND_REVERSE); break; + case FSN_ANIM_TURN_AROUND_REVERSE: this->animIndex = FSN_ANIM_SCRATCH_BACK; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_SCRATCH_BACK); EnOssan_SetupAction(this, EnOssan_Idle); break; + default: this->animIndex = FSN_ANIM_SCRATCH_BACK; SubS_ChangeAnimationByInfoS(&this->skelAnime, animationInfo, FSN_ANIM_SCRATCH_BACK); @@ -459,11 +468,11 @@ void EnOssan_UpdateJoystickInputState(PlayState* play, EnOssan* this) { this->moveHorizontal = this->moveVertical = false; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; this->moveHorizontal = true; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -477,11 +486,11 @@ void EnOssan_UpdateJoystickInputState(PlayState* play, EnOssan* this) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; this->moveVertical = true; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -533,9 +542,9 @@ u8 EnOssan_SetCursorIndexFromNeutral(EnOssan* this, u8 shelfOffset) { u8 EnOssan_CursorRight(EnOssan* this, u8 cursorIndex, u8 shelfSlotMin) { u8 end = shelfSlotMin + 4; - while (cursorIndex >= shelfSlotMin && cursorIndex < end) { + while ((cursorIndex >= shelfSlotMin) && (cursorIndex < end)) { cursorIndex -= 2; - if (cursorIndex >= shelfSlotMin && cursorIndex < end) { + if ((cursorIndex >= shelfSlotMin) && (cursorIndex < end)) { if (this->items[cursorIndex] != NULL) { return cursorIndex; } @@ -607,12 +616,15 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, PlayState* play) { this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = false; return true; + case 1: func_8019F230(); EnOssan_EndInteraction(play, this); return true; + + default: + return false; } - return false; } void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { @@ -656,7 +668,7 @@ void EnOssan_FaceShopkeeper(EnOssan* this, PlayState* play) { return; } } - if (this->actor.params == ENOSSAN_PART_TIME_WORKER && player->transformation != PLAYER_FORM_ZORA) { + if ((this->actor.params == ENOSSAN_PART_TIME_WORKER) && (player->transformation != PLAYER_FORM_ZORA)) { Math_SmoothStepToS(&this->partTimerHeadRot.y, 8000, 3, 2000, 0); } } @@ -871,7 +883,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) { } } } else { - if (this->stickAccumX > 0 && this->stickAccumX > 500) { + if ((this->stickAccumX > 0) && (this->stickAccumX > 500)) { cursorIndex = EnOssan_CursorRight(this, this->cursorIndex, 4); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -879,7 +891,7 @@ void EnOssan_BrowseLeftShelf(EnOssan* this, PlayState* play) { EnOssan_SetupLookToShopkeeperFromShelf(play, this); return; } - } else if (this->stickAccumX < 0 && this->stickAccumX < -500) { + } else if ((this->stickAccumX < 0) && (this->stickAccumX < -500)) { cursorIndex = EnOssan_CursorLeft(this, this->cursorIndex, 8); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -929,7 +941,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { } } } else { - if (this->stickAccumX < 0 && this->stickAccumX < -500) { + if ((this->stickAccumX < 0) && (this->stickAccumX < -500)) { cursorIndex = EnOssan_CursorRight(this, this->cursorIndex, 0); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -937,7 +949,7 @@ void EnOssan_BrowseRightShelf(EnOssan* this, PlayState* play) { EnOssan_SetupLookToShopkeeperFromShelf(play, this); return; } - } else if (this->stickAccumX > 0 && this->stickAccumX > 500) { + } else if ((this->stickAccumX > 0) && (this->stickAccumX > 500)) { cursorIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4); if (cursorIndex != CURSOR_INVALID) { this->cursorIndex = cursorIndex; @@ -1016,6 +1028,7 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_SUCCESS_2: func_8019F208(); item->buyFunc(play, item); @@ -1024,27 +1037,35 @@ void EnOssan_HandleCanBuyItem(PlayState* play, EnOssan* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_NO_ROOM: case CANBUY_RESULT_NO_ROOM_2: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]); break; + case CANBUY_RESULT_NEED_EMPTY_BOTTLE: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->actor.params]); break; + case CANBUY_RESULT_NEED_RUPEES: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->actor.params]); break; + case CANBUY_RESULT_CANNOT_GET_NOW_2: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->actor.params]); break; + case CANBUY_RESULT_CANNOT_GET_NOW: play_sound(NA_SE_SY_ERROR); EnOssan_SetupCannotBuy(play, this, sNoRoomTextIds[this->actor.params]); break; + + default: + break; } } @@ -1058,11 +1079,15 @@ void EnOssan_SelectItem(EnOssan* this, PlayState* play) { case 0: EnOssan_HandleCanBuyItem(play, this); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, this->items[this->cursorIndex]->actor.textId); break; + + default: + break; } } } @@ -1134,6 +1159,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { EnOssan_SetupStartShopping(play, this, true); func_800B85E0(&this->actor, play, 100.0f, PLAYER_IA_MINUS1); break; + case 1: default: func_8019F230(); @@ -1142,7 +1168,7 @@ void EnOssan_ContinueShopping(EnOssan* this, PlayState* play) { } } } - } else if (talkState == TEXT_STATE_5 && Message_ShouldAdvance(play)) { + } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { EnOssan_ResetItemPosition(this); item = this->items[this->cursorIndex]; item->restockFunc(play, item); @@ -1241,11 +1267,11 @@ void EnOssan_UpdateItemSelectedProperty(EnOssan* this) { for (i = 0; i < ARRAY_COUNT(this->items); i++, items++) { item = *items; if (item != NULL) { - if (this->actionFunc != EnOssan_SelectItem && this->actionFunc != EnOssan_CannotBuy && - this->drawCursor == 0) { + if ((this->actionFunc != EnOssan_SelectItem) && (this->actionFunc != EnOssan_CannotBuy) && + (this->drawCursor == 0)) { item->isSelected = false; } else { - item->isSelected = this->cursorIndex == i ? true : false; + item->isSelected = (this->cursorIndex == i) ? true : false; } } } @@ -1383,6 +1409,7 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { this->flags |= END_INTERACTION; return textId; } + switch (player->transformation) { case PLAYER_FORM_DEKU: this->animIndex = FSN_ANIM_SLAM_COUNTER_START; @@ -1390,21 +1417,25 @@ u16 EnOssan_CuriosityShopMan_GetWelcome(EnOssan* this, PlayState* play) { return sWelcomeDekuTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; + case PLAYER_FORM_ZORA: this->animIndex = FSN_ANIM_LEAN_FORWARD_START; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_08)) { return sWelcomeZoraTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; + case PLAYER_FORM_GORON: this->animIndex = FSN_ANIM_HAND_ON_FACE_START; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_18_04)) { return sWelcomeGoronTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; + + default: + this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START; + return sWelcomeHumanTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } - this->animIndex = FSN_ANIM_HANDS_ON_COUNTER_START; - return sWelcomeHumanTextIds[ENOSSAN_CURIOSITY_SHOP_MAN]; } u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { @@ -1415,24 +1446,29 @@ u16 EnOssan_PartTimer_GetWelcome(EnOssan* this, PlayState* play) { this->flags |= END_INTERACTION; return textId; } + switch (player->transformation) { case PLAYER_FORM_DEKU: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_10)) { return sWelcomeDekuTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeDekuFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; + case PLAYER_FORM_ZORA: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_08)) { return sWelcomeZoraTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeZoraFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; + case PLAYER_FORM_GORON: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_04)) { return sWelcomeGoronTextIds[ENOSSAN_PART_TIME_WORKER]; } return sWelcomeGoronFirstTimeTextIds[ENOSSAN_PART_TIME_WORKER]; + + default: + return sWelcomeHumanTextIds[ENOSSAN_PART_TIME_WORKER]; } - return sWelcomeHumanTextIds[ENOSSAN_PART_TIME_WORKER]; } void EnOssan_SetHaveMet(EnOssan* this) { @@ -1440,21 +1476,29 @@ void EnOssan_SetHaveMet(EnOssan* this) { case 0x06A9: SET_WEEKEVENTREG(WEEKEVENTREG_18_10); break; + case 0x06C6: SET_WEEKEVENTREG(WEEKEVENTREG_55_10); break; + case 0x06A7: SET_WEEKEVENTREG(WEEKEVENTREG_18_08); break; + case 0x06C4: SET_WEEKEVENTREG(WEEKEVENTREG_55_08); break; + case 0x06A5: SET_WEEKEVENTREG(WEEKEVENTREG_18_04); break; + case 0x06C2: SET_WEEKEVENTREG(WEEKEVENTREG_55_04); break; + + default: + break; } } @@ -1698,7 +1742,8 @@ s32 EnOssan_PartTimer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dLi void EnOssan_CuriosityShopMan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { EnOssan* this = THIS; - if (limbIndex == FSN_LIMB_PELVIS || limbIndex == FSN_LIMB_LEFT_UPPER_ARM || limbIndex == FSN_LIMB_RIGHT_UPPER_ARM) { + if ((limbIndex == FSN_LIMB_PELVIS) || (limbIndex == FSN_LIMB_LEFT_UPPER_ARM) || + (limbIndex == FSN_LIMB_RIGHT_UPPER_ARM)) { rot->y += (s16)Math_SinS(this->limbRotTableY[limbIndex]) * 200; rot->z += (s16)Math_CosS(this->limbRotTableZ[limbIndex]) * 200; } diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index 1e1a36d74..df6d3708f 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -671,6 +671,9 @@ void func_80B5CD40(EnOt* this, PlayState* play) { func_80B5CE6C(this, play); } break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c index b78c9a314..e64e09cbc 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -154,8 +154,6 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { func_80BD8588(this, play); func_80BD8658(this); - if (1) {} - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04) || CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE) || CHECK_WEEKEVENTREG(WEEKEVENTREG_75_20) || (gSaveContext.save.entrance == ENTRANCE(IKANA_CANYON, 9))) { Actor_Kill(&this->actor); @@ -601,7 +599,6 @@ void func_80BD9938(EnPamera* this) { void func_80BD994C(EnPamera* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (Player_GetMask(play) == PLAYER_MASK_GIBDO) { - if (1) {} func_80BD93CC(this, 0, 1); Message_StartTextbox(play, 0x15A8, &this->actor); diff --git a/src/overlays/actors/ovl_En_Sda/z_en_sda.c b/src/overlays/actors/ovl_En_Sda/z_en_sda.c index 3390f4f0c..909510329 100644 --- a/src/overlays/actors/ovl_En_Sda/z_en_sda.c +++ b/src/overlays/actors/ovl_En_Sda/z_en_sda.c @@ -228,7 +228,8 @@ void func_8094702C(EnSda* this, u8* shadowTexture, Player* player, PlayState* pl if (BREG(57) != 0) { for (shadowTextureTemp = shadowTexture, i = 0; i < 0x1000; i++, shadowTextureTemp++) { - if ((i >= 0 && i < 0x40) || (i >= 0xFC0 && i < 0x1000) || ((i & 0x3F) == 0) || ((i & 0x3F) == 0x3F)) { + if (((i >= 0) && (i < 0x40)) || ((i >= 0xFC0) && (i < 0x1000)) || ((i & 0x3F) == 0) || + ((i & 0x3F) == 0x3F)) { *shadowTextureTemp = 255; } else { *shadowTextureTemp = 0; @@ -352,6 +353,4 @@ void func_80947668(u8* shadowTexture, Player* player, PlayState* play) { } CLOSE_DISPS(gfxCtx); - - if (1) {} } diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index cf829bda0..e67808d38 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -742,11 +742,11 @@ void func_809961E4(EnSkb* this, PlayState* play) { } void func_80996284(EnSkb* this, PlayState* play) { - if (this->unk_3D8 & 0x80) { - if (1) {} - Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10); - func_80996474(this); + if (!(this->unk_3D8 & 0x80)) { + return; } + Item_DropCollectibleRandom(play, &this->actor, &this->actor.world.pos, 0x10); + func_80996474(this); } void func_809962D4(EnSkb* this) { @@ -982,22 +982,22 @@ void func_8099672C(EnSkb* this, PlayState* play) { } void func_80996AD0(EnSkb* this, PlayState* play) { - if (1) {} + if ((this->actionFunc == func_80996284) || (this->unk_3E2 == 1)) { + return; + } - if ((this->actionFunc != func_80996284) && (this->unk_3E2 != 1)) { - if (this->unk_3E4 != 0) { - CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); - } + if (this->unk_3E4 != 0) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + } - if (((this->unk_3DE != 0) || (this->unk_3D0 >= 11)) && (this->unk_3DE != 1) && (this->unk_3DE != 4) && - (this->unk_3DE != 6) && (this->unk_3DE != 7) && - ((this->actor.colorFilterTimer == 0) || !(this->actor.colorFilterParams & 0x4000))) { - CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - } + if (((this->unk_3DE != 0) || (this->unk_3D0 >= 11)) && (this->unk_3DE != 1) && (this->unk_3DE != 4) && + (this->unk_3DE != 6) && (this->unk_3DE != 7) && + ((this->actor.colorFilterTimer == 0) || !(this->actor.colorFilterParams & 0x4000))) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } - if ((this->actionFunc != func_80996284) && (this->actionFunc != func_809964A0)) { - CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - } + if ((this->actionFunc != func_80996284) && (this->actionFunc != func_809964A0)) { + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } diff --git a/src/overlays/actors/ovl_En_Talk/z_en_talk.c b/src/overlays/actors/ovl_En_Talk/z_en_talk.c index 4f9b2a53d..7c639c44a 100644 --- a/src/overlays/actors/ovl_En_Talk/z_en_talk.c +++ b/src/overlays/actors/ovl_En_Talk/z_en_talk.c @@ -32,7 +32,7 @@ void EnTalk_Init(Actor* thisx, PlayState* play) { EnTalk* this = THIS; s8 targetMode = this->actor.home.rot.x - 0x1; - if (targetMode >= 0 && targetMode < 7) { + if ((targetMode >= 0) && (targetMode < 7)) { this->actor.targetMode = targetMode; } @@ -56,7 +56,7 @@ void func_80BDE090(EnTalk* this, PlayState* play) { return; } - if ((this->actor.xzDistToPlayer < 40.0f && Player_IsFacingActor(&this->actor, 0x3000, play)) || + if (((this->actor.xzDistToPlayer < 40.0f) && Player_IsFacingActor(&this->actor, 0x3000, play)) || this->actor.isTargeted) { func_800B8614(&this->actor, play, 120.0f); } diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 4c2d3eaaf..495c16c13 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -390,26 +390,23 @@ void func_80BB5AAC(EnTanron1* this, PlayState* play) { flag = 0; ptr = ptrBase; for (i = 0; i < this->actor.params; i++, ptr++) { - if (ptr->unk_24 != 2) { - continue; + if (ptr->unk_24 == 2) { + if (!flag) { + gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888); + gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD, + G_TX_NOLOD); + flag++; + } + + Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW); + Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY); + Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY); + Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900); } - - if (!flag) { - gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001888); - gDPLoadTextureBlock(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001428, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 32, 0, - G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 5, G_TX_NOLOD, G_TX_NOLOD); - flag++; - } - - Matrix_Translate(ptr->unk_00.x, ptr->unk_00.y, ptr->unk_00.z, MTXMODE_NEW); - Matrix_RotateYS(ptr->unk_1A, MTXMODE_APPLY); - Matrix_RotateXS(ptr->unk_18 * -1, MTXMODE_APPLY); - Matrix_Scale(1.0f, ptr->unk_2C, 1.0f, MTXMODE_APPLY); - - if (1) {} - - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, ovl_En_Tanron1_DL_001900); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index 42be7784c..ee9c5aaae 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -126,7 +126,7 @@ void EnTrt_ChangeAnim(SkelAnime* skelAnime, AnimationInfoS* animationInfo, s32 a s32 EnTrt_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) { + if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -274,10 +274,10 @@ void EnTrt_UpdateJoystickInputState(PlayState* play, EnTrt* this) { s8 stickY = CONTROLLER1(&play->state)->rel.stick_y; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -290,10 +290,10 @@ void EnTrt_UpdateJoystickInputState(PlayState* play, EnTrt* this) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -351,10 +351,12 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_53_08); Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); break; + case 0x888: this->textId = 0x889; Message_StartTextbox(play, this->textId, &this->actor); break; + case 0x889: if (this->cutsceneState == ENTRT_CUTSCENESTATE_PLAYING_SPECIAL) { CutsceneManager_Stop(this->csId); @@ -364,6 +366,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { play->msgCtx.stateTimer = 4; this->actionFunc = EnTrt_PayForMushroom; break; + default: this->cutsceneState = ENTRT_CUTSCENESTATE_PLAYING; EnTrt_EndInteraction(play, this); @@ -389,10 +392,14 @@ void EnTrt_Goodbye(EnTrt* this, PlayState* play) { this->textId = 0x887; Message_ContinueTextbox(play, this->textId); break; + case 0x887: case 0x88B: EnTrt_EndInteraction(play, this); break; + + default: + break; } } } @@ -504,12 +511,15 @@ s32 EnTrt_FacingShopkeeperDialogResult(EnTrt* this, PlayState* play) { func_8019F208(); EnTrt_SetupTalkToShopkeeper(play, this); return true; + case 1: func_8019F230(); EnTrt_EndInteraction(play, this); return true; + + default: + return false; } - return false; } void EnTrt_FaceShopkeeper(EnTrt* this, PlayState* play) { @@ -603,7 +613,7 @@ s32 EnTrt_HasPlayerSelectedItem(PlayState* play, EnTrt* this, Input* input) { return true; } if (EnTrt_TestItemSelected(play)) { - if (item->actor.params != SI_POTION_BLUE || (this->flags & ENTRT_GIVEN_MUSHROOM)) { + if ((item->actor.params != SI_POTION_BLUE) || (this->flags & ENTRT_GIVEN_MUSHROOM)) { this->prevActionFunc = this->actionFunc; Message_ContinueTextbox(play, EnTrt_GetItemChoiceTextId(this)); play_sound(NA_SE_SY_DECIDE); @@ -733,11 +743,15 @@ void EnTrt_SelectItem(EnTrt* this, PlayState* play) { case 0: EnTrt_HandleCanBuyItem(play, this); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; Message_ContinueTextbox(play, EnTrt_GetItemTextId(this)); break; + + default: + break; } } } else if ((talkState == TEXT_STATE_5) && Message_ShouldAdvance(play)) { @@ -904,19 +918,25 @@ void EnTrt_BeginInteraction(EnTrt* this, PlayState* play) { this->actionFunc = EnTrt_StartRedPotionConversation; } break; + case 0x83E: func_8011552C(play, DO_ACTION_DECIDE); this->stickLeftPrompt.isEnabled = false; this->stickRightPrompt.isEnabled = true; this->actionFunc = EnTrt_FaceShopkeeper; break; + case 0x850: case 0x890: this->actionFunc = EnTrt_SetupEndInteraction; break; + case 0x88F: this->actionFunc = EnTrt_StartRedPotionConversation; break; + + default: + break; } } } @@ -1015,16 +1035,20 @@ void EnTrt_ItemGiven(EnTrt* this, PlayState* play) { case 0x889: this->textId = 0x88A; break; + case 0x881: this->textId = 0x88C; break; + case 0x838: case 0x83C: case 0x88E: case 0x88F: this->textId = 0x83A; break; + default: + //! FAKE: if (1) {} this->textId = 0x849; break; @@ -1048,8 +1072,8 @@ void EnTrt_ShopkeeperGone(EnTrt* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { Message_StartTextbox(play, this->textId, &this->actor); } else { - if ((player->actor.world.pos.x >= -50.0f && player->actor.world.pos.x <= 50.0f) && - (player->actor.world.pos.z >= -19.0f && player->actor.world.pos.z <= 30.0f)) { + if ((player->actor.world.pos.x >= -50.0f) && (player->actor.world.pos.x <= 50.0f) && + (player->actor.world.pos.z >= -19.0f) && (player->actor.world.pos.z <= 30.0f)) { func_800B8614(&this->actor, play, 200.0f); } } @@ -1129,6 +1153,7 @@ void EnTrt_ContinueShopping(EnTrt* this, PlayState* play) { EnTrt_SetupStartShopping(play, this, true); func_800B85E0(&this->actor, play, 400.0f, PLAYER_IA_MINUS1); break; + case 1: default: func_8019F230(); diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index a61e7e8df..06893449e 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -149,8 +149,8 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { u8 playerForm; s16 playerParams; - if (play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0 && - CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]) { + if ((play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON] >= 0) && + (CutsceneManager_GetCurrentCsId() != play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) { if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON])) { CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_WARP_PAD_MOON]); @@ -245,7 +245,6 @@ void EnWarpTag_GrottoReturn(EnWarptag* this, PlayState* play) { play->transitionTrigger = TRANS_TRIGGER_START; func_8019F128(NA_SE_OC_SECRET_HOLE_OUT); func_801A4058(5); - if (1) {} gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; } diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index fb00fdae3..10be4ec3c 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -76,24 +76,26 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { this->unk158 = this->actor.world.rot.y; EnWeatherTag_SetupAction(this, func_80966A08); break; + case WEATHERTAG_TYPE_UNK1: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_STONE_TOWER_TEMPLE)) { Actor_Kill(&this->actor); } EnWeatherTag_SetupAction(this, func_80966B08); break; + case WEATHERTAG_TYPE_WINTERFOG: EnWeatherTag_SetupAction(this, func_80966E0C); break; - case WEATHERTAG_TYPE_UNK3: - //! FAKE: this can move to different locations and still match - if (1) {} + case WEATHERTAG_TYPE_UNK3: EnWeatherTag_SetupAction(this, func_80966EF0); break; + case WEATHERTAG_TYPE_UNK4: EnWeatherTag_SetupAction(this, func_80966FEC); break; + case WEATHERTAG_TYPE_UNK5: func_800BC154(play, &play->actorCtx, &this->actor, 7); play->skyboxId = SKYBOX_3; @@ -102,6 +104,7 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { D_801F4E74 = 1.0f; EnWeatherTag_SetupAction(this, func_80966BF4); break; + case WEATHERTAG_TYPE_WATERMURK: pathID = WEATHER_TAG_PATHID(&this->actor); path = &play->setupPathList[pathID]; @@ -109,8 +112,13 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { this->pathCount = path->count; EnWeatherTag_SetupAction(this, func_809672DC); break; + case WEATHERTAG_TYPE_LOCALDAY2RAIN: EnWeatherTag_SetupAction(this, func_809674C8); + break; + + default: + break; } } @@ -255,11 +263,13 @@ void func_80966BF4(EnWeatherTag* this, PlayState* play) { case 0: case 1: default: + newUnk20 = 0; break; case 2: newUnk20 = 3; break; + case 3: newUnk20 = 4; break; @@ -287,9 +297,11 @@ void func_80966D20(EnWeatherTag* this, PlayState* play) { default: newUnk20 = 0; break; + case 2: newUnk20 = 3; break; + case 3: newUnk20 = 4; break; diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index 2e9fe8b3f..ab97962de 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -757,8 +757,6 @@ void func_80B97E0C(EnZot* this, PlayState* play) { } void func_80B97E4C(EnZot* this, PlayState* play) { - if (1) {} - if (this->unk_2F2 & 0x40) { func_80B96BEC(this, 0, ANIMMODE_LOOP); } @@ -768,33 +766,38 @@ void func_80B97E4C(EnZot* this, PlayState* play) { this->actor.world.rot.y = this->actor.shape.rot.y; } - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - switch (play->msgCtx.currentTextId) { - case 0x128C: - this->unk_2F2 &= ~4; - func_80B96BEC(this, 6, ANIMMODE_ONCE); - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + if ((Message_GetState(&play->msgCtx) != TEXT_STATE_5) || !Message_ShouldAdvance(play)) { + return; + } - case 0x128D: - case 0x128E: - case 0x128F: - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + switch (play->msgCtx.currentTextId) { + case 0x128C: + this->unk_2F2 &= ~4; + func_80B96BEC(this, 6, ANIMMODE_ONCE); + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1290: - Message_CloseTextbox(play); - this->actionFunc = func_80B97D6C; - this->unk_2F2 |= 4; - func_80B96BEC(this, 3, ANIMMODE_LOOP); - SET_WEEKEVENTREG(WEEKEVENTREG_38_08); - break; + case 0x128D: + case 0x128E: + case 0x128F: + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x128B: - Message_CloseTextbox(play); - this->actionFunc = func_80B97FD0; - break; - } + case 0x1290: + Message_CloseTextbox(play); + this->actionFunc = func_80B97D6C; + this->unk_2F2 |= 4; + func_80B96BEC(this, 3, ANIMMODE_LOOP); + SET_WEEKEVENTREG(WEEKEVENTREG_38_08); + break; + + case 0x128B: + Message_CloseTextbox(play); + this->actionFunc = func_80B97FD0; + break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.c b/src/overlays/actors/ovl_En_Zow/z_en_zow.c index 3e9ef53f4..334b8fc05 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -185,23 +185,24 @@ void func_80BDC830(EnZowStruct* ptr, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { - if (ptr->unk_00 == 1) { - if (!flag) { - gDPPipeSync(POLY_XLU_DISP++); - gSPDisplayList(POLY_XLU_DISP++, gZoraRippleMaterialDL); - gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0); - if (1) {} - flag = true; - } - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr->unk_0F); - - Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); - Matrix_Scale(ptr->unk_04, 1.0f, ptr->unk_04, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gZoraRippleModelDL); + if (ptr->unk_00 != 1) { + continue; } + + if (!flag) { + gDPPipeSync(POLY_XLU_DISP++); + gSPDisplayList(POLY_XLU_DISP++, gZoraRippleMaterialDL); + gDPSetEnvColor(POLY_XLU_DISP++, 155, 155, 155, 0); + flag = true; + } + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, ptr->unk_0F); + + Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); + Matrix_Scale(ptr->unk_04, 1.0f, ptr->unk_04, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gZoraRippleModelDL); } CLOSE_DISPS(play->state.gfxCtx); @@ -216,23 +217,24 @@ void func_80BDC9DC(EnZowStruct* ptr, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { - if (ptr->unk_00 == 3) { - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleMaterialDL); - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); - if (1) {} - flag = true; - } - - Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleModelDL); + if (ptr->unk_00 != 3) { + continue; } + + if (!flag) { + gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleMaterialDL); + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 150, 150, 150, 0); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); + flag = true; + } + + Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gZoraBubbleModelDL); } CLOSE_DISPS(play->state.gfxCtx); @@ -247,24 +249,25 @@ void func_80BDCB84(EnZowStruct* ptr, PlayState* play) { Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 15; i++, ptr++) { - if (ptr->unk_00 == 2) { - if (!flag) { - gSPDisplayList(POLY_XLU_DISP++, gZoraSplashMaterialDL); - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0); - if (1) {} - flag = true; - } - - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 180, 180, 180, ptr->unk_0F); - - Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_XLU_DISP++, gZoraSplashModelDL); + if (ptr->unk_00 != 2) { + continue; } + + if (!flag) { + gSPDisplayList(POLY_XLU_DISP++, gZoraSplashMaterialDL); + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, 200, 200, 200, 0); + flag = true; + } + + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 180, 180, 180, ptr->unk_0F); + + Matrix_Translate(ptr->unk_14.x, ptr->unk_14.y, ptr->unk_14.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Scale(ptr->unk_04, ptr->unk_04, 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gZoraSplashModelDL); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index a7d2714db..b5547fdad 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -671,13 +671,14 @@ void func_80A24B74(ObjIceblock* this, PlayState* play) { s32 pad; Vec3f sp20; - if (this->dyna.actor.flags & ACTOR_FLAG_40) { - if (1) {} - sp20.x = this->dyna.actor.world.pos.x; - sp20.y = this->unk_244; - sp20.z = this->dyna.actor.world.pos.z; - EffectSsGRipple_Spawn(play, &sp20, 480, 880, 0); + if (!(this->dyna.actor.flags & ACTOR_FLAG_40)) { + return; } + + sp20.x = this->dyna.actor.world.pos.x; + sp20.y = this->unk_244; + sp20.z = this->dyna.actor.world.pos.z; + EffectSsGRipple_Spawn(play, &sp20, 480, 880, 0); } void func_80A24BDC(ObjIceblock* this, PlayState* play, f32 arg2, f32 arg3, s32 arg4) { diff --git a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c index eb14dff6a..4d3bdc348 100644 --- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -65,7 +65,7 @@ s32 ObjKibako2_ContainsSkulltula(ObjKibako2* this, PlayState* play) { if ((u16)actorSpawnParam & 3) { flag = ((actorSpawnParam & 0x3FC) >> 2) & 0xFF; } - return !(flag >= 0 && Flags_GetTreasure(play, flag)); + return !((flag >= 0) && Flags_GetTreasure(play, flag)); } void ObjKibako2_Break(ObjKibako2* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c index b0ac87b4e..d08f2d638 100644 --- a/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c +++ b/src/overlays/actors/ovl_Obj_Mu_Pict/z_obj_mu_pict.c @@ -64,7 +64,7 @@ void func_80C06B70(ObjMuPict* this, PlayState* play) { s16 yawDiff = this->actor.yawTowardsPlayer - this->actor.world.rot.y; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if (this->actor.csId < 0) { + if (this->actor.csId <= CS_ID_NONE) { func_80C06DC8(this, play); func_80C06CC4(this); } else { diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index d5dfed84d..4710b8908 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -130,7 +130,7 @@ void func_80BA2514(ObjNozoki* this, PlayState* play) { } s32 func_80BA26A8(ObjNozoki* this) { - if (this->csId < 0) { + if (this->csId <= CS_ID_NONE) { return true; } diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index cd9eed10b..a4378d92b 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -549,7 +549,7 @@ void func_80B04350(ObjSnowball* this, PlayState* play) { this->unk_20A = 0; } - if (this->actor.csId < 0) { + if (this->actor.csId <= CS_ID_NONE) { func_80B03FF8(this, play); if (this->unk_20A == 0) { func_80B04608(this, play); diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c index ca72d1854..cc47113a5 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -97,7 +97,7 @@ s32 ObjWarpstone_ClosedIdle(ObjWarpstone* this, PlayState* play) { } s32 ObjWarpstone_BeginOpeningCutscene(ObjWarpstone* this, PlayState* play) { - if ((this->dyna.actor.csId < 0) || CutsceneManager_IsNext(this->dyna.actor.csId)) { + if ((this->dyna.actor.csId <= CS_ID_NONE) || CutsceneManager_IsNext(this->dyna.actor.csId)) { CutsceneManager_StartWithPlayerCs(this->dyna.actor.csId, &this->dyna.actor); ObjWarpstone_SetupAction(this, ObjWarpstone_PlayOpeningCutscene); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_OWL_WARP_SWITCH_ON); diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index f237bed47..69f56ef2d 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -145,13 +145,14 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { s32 pad; Vec3f spawnPos; + //! FAKE: + if (1) {} + if (this->collider.base.acFlags & AC_HIT) { play_sound(NA_SE_SY_CORRECT_CHIME); - if (1) {} if (INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE) { Actor_Spawn(&play->actorCtx, play, ACTOR_ITEM_ETCETERA, 700.0f, -800.0f, 7261.0f, 0, 0, 0, ITEM_ETC_ARROW_FIRE); - if (1) {} gSaveContext.cutsceneTrigger = 1; } else { spawnPos.x = 700.0f; @@ -168,19 +169,19 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { return; } - if (!(this->actor.xzDistToPlayer > 120.0f)) { - if ((gSaveContext.save.time >= CLOCK_TIME(6, 30)) && (gSaveContext.save.time < CLOCK_TIME(7, 30))) { - cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f)); - cylinderPos.y = - (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f)); - cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f)); - - this->hitboxPos = cylinderPos; - - Collider_SetCylinderPosition(&this->collider, &cylinderPos); - CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - } + if ((this->actor.xzDistToPlayer > 120.0f) || (gSaveContext.save.time < CLOCK_TIME(6, 30)) || + (gSaveContext.save.time >= CLOCK_TIME(7, 30))) { + return; } + + cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + (play->envCtx.sunPos.x * (1.0f / 6.0f)); + cylinderPos.y = (player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f) + (play->envCtx.sunPos.y * (1.0f / 6.0f)); + cylinderPos.z = player->bodyPartsPos[PLAYER_BODYPART_HEAD].z + (play->envCtx.sunPos.z * (1.0f / 6.0f)); + + this->hitboxPos = cylinderPos; + + Collider_SetCylinderPosition(&this->collider, &cylinderPos); + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } void ShotSun_Update(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 1d4fa3489..87db12b1e 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3995,8 +3995,8 @@ s32 func_80830F9C(PlayState* play) { s32 func_80830FD4(PlayState* play) { return (play->unk_1887C != 0) && - (play->unk_1887C < 0 || CHECK_BTN_ANY(sPlayerControlInput->cur.button, - BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)); + ((play->unk_1887C < 0) || CHECK_BTN_ANY(sPlayerControlInput->cur.button, + BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A)); } s32 func_80831010(Player* this, PlayState* play) { From 91182a796be6d089460974c6eeb6b337d8039eb7 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 2 Jun 2023 15:09:49 +1000 Subject: [PATCH 23/36] Match Interface_DrawClock (#1261) * Match Interface_DrawClock * oops * space * combine ifs to help indentation * small adjustment * PR Suggestions * extra space * Section: --- src/code/z_parameter.c | 985 ++++++++++++++++++------------------- tools/disasm/variables.txt | 42 +- 2 files changed, 495 insertions(+), 532 deletions(-) diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 25e6a26a5..9672b8804 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -4309,11 +4309,10 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) { /** * Draws either the analog three-day clock or the digital final-hours clock */ -#ifdef NON_MATCHING void Interface_DrawClock(PlayState* play) { static s16 sThreeDayClockAlpha = 255; - static s16 D_801BFB30 = 0; // sClockAlphaTimer1 - static s16 D_801BFB34 = 0; // sClockAlphaTimer2 + static s16 sClockAlphaTimer1 = 0; + static s16 sClockAlphaTimer2 = 0; static u16 sThreeDayClockHours[] = { CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0), CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0), @@ -4329,31 +4328,30 @@ void Interface_DrawClock(PlayState* play) { gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, }; - static s16 D_801BFBCC = 0; // sClockInvDiamondPrimRed - static s16 D_801BFBD0 = 0; // sClockInvDiamondPrimGreen - static s16 D_801BFBD4 = 255; // sClockInvDiamondPrimBlue - static s16 D_801BFBD8 = 0; // sClockInvDiamondEnvRed - static s16 D_801BFBDC = 0; // sClockInvDiamondEnvGreen - static s16 D_801BFBE0 = 0; // sClockInvDiamondEnvBlue - static s16 D_801BFBE4 = 15; // sClockInvDiamondTimer - static s16 D_801BFBE8 = 0; // sClockInvDiamondTargetIndex - static s16 D_801BFBEC[] = { 100, 0 }; // sClockInvDiamondPrimRedTargets - static s16 D_801BFBF0[] = { 205, 155 }; // sClockInvDiamondPrimGreenTargets - static s16 D_801BFBF4[] = { 255, 255 }; // sClockInvDiamondPrimBlueTargets - static s16 D_801BFBF8[] = { 30, 0 }; // sClockInvDiamondEnvRedTargets - static s16 D_801BFBFC[] = { 30, 0 }; // sClockInvDiamondEnvGreenTargets - static s16 D_801BFC00[] = { 100, 0 }; // sClockInvDiamondEnvBlueTargets - static s16 D_801BFC04[] = { 255, 0 }; // sFinalHoursClockDigitsRed - static s16 D_801BFC08[] = { 100, 0 }; // sFinalHoursClockFrameEnvRedTargets - static s16 D_801BFC0C[] = { 30, 0 }; // sFinalHoursClockFrameEnvGreenTargets - static s16 D_801BFC10[] = { 100, 0 }; // sFinalHoursClockFrameEnvBlueTargets + static s16 sClockInvDiamondPrimRed = 0; + static s16 sClockInvDiamondPrimGreen = 155; + static s16 sClockInvDiamondPrimBlue = 255; + static s16 sClockInvDiamondEnvRed = 0; + static s16 sClockInvDiamondEnvGreen = 0; + static s16 sClockInvDiamondEnvBlue = 0; + static s16 sClockInvDiamondTimer = 15; + static s16 sClockInvDiamondTargetIndex = 0; + static s16 sClockInvDiamondPrimRedTargets[] = { 100, 0 }; + static s16 sClockInvDiamondPrimGreenTargets[] = { 205, 155 }; + static s16 sClockInvDiamondPrimBlueTargets[] = { 255, 255 }; + static s16 sClockInvDiamondEnvRedTargets[] = { 30, 0 }; + static s16 sClockInvDiamondEnvGreenTargets[] = { 30, 0 }; + static s16 sClockInvDiamondEnvBlueTargets[] = { 100, 0 }; + static s16 sFinalHoursClockDigitsRedTargets[] = { 255, 0 }; + static s16 sFinalHoursClockFrameEnvRedTargets[] = { 100, 0 }; + static s16 sFinalHoursClockFrameEnvGreenTargets[] = { 30, 0 }; + static s16 sFinalHoursClockFrameEnvBlueTargets[] = { 100, 0 }; static TexturePtr sFinalHoursDigitTextures[] = { gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex, gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex, gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex, }; - // sFinalHoursDigitSlotPosXOffset - static s16 D_801BFC40[] = { + static s16 sFinalHoursDigitSlotPosXOffset[] = { 127, 136, 144, 151, 160, 168, 175, 184, }; InterfaceContext* interfaceCtx = &play->interfaceCtx; @@ -4365,527 +4363,492 @@ void Interface_DrawClock(PlayState* play) { f32 timeInMinutes; f32 timeInSeconds; f32 sp1CC; - s32 new_var; + s32 pad1; s16 sp1C6; s16 currentHour; u16 time; - s16 temp; + s16 pad2; s16 colorStep; - s16 finalHoursClockSlots[8]; // sp1AC + s16 finalHoursClockSlots[8]; s16 index; OPEN_DISPS(play->state.gfxCtx); - if (R_TIME_SPEED != 0) { - if ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || - (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || - (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) { - if (!FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day < 4)) { - /** - * Changes Clock's transparancy depending if Player is moving or not and possibly other things - */ - if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) { - if (func_801234D4(play)) { - sThreeDayClockAlpha = 80; - D_801BFB30 = 5; - D_801BFB34 = 20; - } else if (D_801BFB34 != 0) { - D_801BFB34--; - } else if (D_801BFB30 != 0) { - colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / D_801BFB30; - sThreeDayClockAlpha += colorStep; + if ((R_TIME_SPEED != 0) && + ((msgCtx->msgMode == 0) || ((play->actorCtx.flags & ACTORCTX_FLAG_1) && !Play_InCsMode(play)) || + (msgCtx->msgMode == 0) || ((msgCtx->currentTextId >= 0x100) && (msgCtx->currentTextId <= 0x200)) || + (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) && + !FrameAdvance_IsEnabled(&play->state) && !Environment_IsTimeStopped() && (gSaveContext.save.day <= 3)) { + /** + * Section: Changes Clock's transparancy depending if Player is moving or not and possibly other things + */ + if (gSaveContext.hudVisibility == HUD_VISIBILITY_ALL) { + if (func_801234D4(play)) { + sThreeDayClockAlpha = 80; + sClockAlphaTimer1 = 5; + sClockAlphaTimer2 = 20; + } else if (sClockAlphaTimer2 != 0) { + sClockAlphaTimer2--; + } else if (sClockAlphaTimer1 != 0) { + colorStep = ABS_ALT(sThreeDayClockAlpha - 255) / sClockAlphaTimer1; + sThreeDayClockAlpha += colorStep; - if (sThreeDayClockAlpha >= 255) { - sThreeDayClockAlpha = 255; - D_801BFB30 = 0; - } - } else { - if (play->actorCtx.flags & ACTORCTX_FLAG_1) { - sThreeDayClockAlpha = 255; - } else { - sThreeDayClockAlpha = interfaceCtx->bAlpha; - } - D_801BFB34 = 0; - D_801BFB30 = 0; - } + if (sThreeDayClockAlpha >= 255) { + sThreeDayClockAlpha = 255; + sClockAlphaTimer1 = 0; + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_1) { + sThreeDayClockAlpha = 255; } else { - if (play->actorCtx.flags & ACTORCTX_FLAG_1) { - sThreeDayClockAlpha = 255; + sThreeDayClockAlpha = interfaceCtx->bAlpha; + } + sClockAlphaTimer2 = 0; + sClockAlphaTimer1 = 0; + } + } else { + if (play->actorCtx.flags & ACTORCTX_FLAG_1) { + sThreeDayClockAlpha = 255; + } else { + sThreeDayClockAlpha = interfaceCtx->bAlpha; + } + sClockAlphaTimer2 = 0; + sClockAlphaTimer1 = 0; + } + + if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + Gfx_SetupDL39_Overlay(play->state.gfxCtx); + + /** + * Section: Draw Clock's Hour Lines + */ + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128, 35, 1, + 6, 0, 1 << 10, 1 << 10); + + /** + * Section: Draw Clock's Border + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + + //! @bug A texture height of 50 is given below. The texture is only 48 units height + //! resulting in this reading into the next texture. This results in a white + //! dot in the bottom center of the clock. For the three-day clock, this is + //! covered by the diamond. However, it can be seen by the final-hours clock. + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50, 1, 6, + 0, 1 << 10, 1 << 10); + + if (((CURRENT_DAY >= 4) || + ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= (CLOCK_TIME(0, 0) + 5)) && + (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { + Gfx_SetupDL42_Overlay(play->state.gfxCtx); + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } else { + /** + * Section: Draw Three-Day Clock's Diamond + */ + gDPPipeSync(OVERLAY_DISP++); + + // Time is slowed down to half speed with inverted song of time + if (gSaveContext.save.timeSpeedOffset == -2) { + // Clock diamond is blue and flashes white + colorStep = + ABS_ALT(sClockInvDiamondPrimRed - sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondPrimRed >= sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondPrimRed -= colorStep; } else { - sThreeDayClockAlpha = interfaceCtx->bAlpha; + sClockInvDiamondPrimRed += colorStep; } - D_801BFB34 = 0; - D_801BFB30 = 0; + + colorStep = ABS_ALT(sClockInvDiamondPrimGreen - + sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondPrimGreen >= sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondPrimGreen -= colorStep; + } else { + sClockInvDiamondPrimGreen += colorStep; + } + + colorStep = ABS_ALT(sClockInvDiamondPrimBlue - + sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondPrimBlue >= sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondPrimBlue -= colorStep; + } else { + sClockInvDiamondPrimBlue += colorStep; + } + + colorStep = + ABS_ALT(sClockInvDiamondEnvRed - sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondEnvRed >= sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondEnvRed -= colorStep; + } else { + sClockInvDiamondEnvRed += colorStep; + } + + colorStep = ABS_ALT(sClockInvDiamondEnvGreen - + sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondEnvGreen >= sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondEnvGreen -= colorStep; + } else { + sClockInvDiamondEnvGreen += colorStep; + } + + colorStep = + ABS_ALT(sClockInvDiamondEnvBlue - sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]) / + sClockInvDiamondTimer; + if (sClockInvDiamondEnvBlue >= sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]) { + sClockInvDiamondEnvBlue -= colorStep; + } else { + sClockInvDiamondEnvBlue += colorStep; + } + + sClockInvDiamondTimer--; + + if (sClockInvDiamondTimer == 0) { + sClockInvDiamondPrimRed = sClockInvDiamondPrimRedTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondPrimGreen = sClockInvDiamondPrimGreenTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondPrimBlue = sClockInvDiamondPrimBlueTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondEnvRed = sClockInvDiamondEnvRedTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondEnvGreen = sClockInvDiamondEnvGreenTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondEnvBlue = sClockInvDiamondEnvBlueTargets[sClockInvDiamondTargetIndex]; + sClockInvDiamondTimer = 15; + sClockInvDiamondTargetIndex ^= 1; + } + + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, + 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sClockInvDiamondPrimRed, sClockInvDiamondPrimGreen, 255, + sThreeDayClockAlpha); + gDPSetEnvColor(OVERLAY_DISP++, sClockInvDiamondEnvRed, sClockInvDiamondEnvGreen, + sClockInvDiamondEnvBlue, 0); + } else { + // Clock diamond is green for regular timeSpeedOffset + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha); } - if ((play->pauseCtx.state == PAUSE_STATE_OFF) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) { + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40, 32, + 1 << 10, 1 << 10); - Gfx_SetupDL39_Overlay(play->state.gfxCtx); + /** + * Section: Draw Three-Day Clock's Day-Number over Diamond + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - /** - * Draw Clock's Hour Lines - */ - gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 130, 130, 130, sThreeDayClockAlpha); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); + OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27, 137, 192, + 48, 27, 1 << 10, 1 << 10); - OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockHourLinesTex, 4, 64, 35, 96, 180, 128, - 35, 1, 6, 0, 1 << 10, 1 << 10); + /** + * Section: Draw Three-Day Clock's Star (for the Minute Tracker) + */ + gDPPipeSync(OVERLAY_DISP++); - /** - * Draw Clock's Border - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, sThreeDayClockAlpha); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); + if (D_801BF974 != 0) { + D_801BF980 += 0.02f; + D_801BF97C += 11; + } else { + D_801BF980 -= 0.02f; + D_801BF97C -= 11; + } - //! @bug A texture height of 50 is given below. The texture is only 48 units height - //! resulting in this reading into the next texture. This results in a white - //! dot in the bottom center of the clock. For the three-day clock, this is - //! covered by the diamond. However, it can be seen by the final-hours clock. - OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gThreeDayClockBorderTex, 4, 64, 50, 96, 168, 128, 50, - 1, 6, 0, 1 << 10, 1 << 10); + D_801BF978--; + if (D_801BF978 == 0) { + D_801BF978 = 10; + D_801BF974 ^= 1; + } - if (((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && - (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0))))) { - Gfx_SetupDL42_Overlay(play->state.gfxCtx); - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); + timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; + + Gfx_SetupDL42_Overlay(play->state.gfxCtx); + + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if (sThreeDayClockAlpha != 255) { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha); + } else { + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C); + } + + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY); + Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0); + gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 16, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0); + } + + /** + * Section: Cuts off Three-Day Clock's Sun and Moon when they dip below the clock + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, + R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f); + + // determines the current hour + for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) { + if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) { + break; + } + } + + /** + * Section: Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker) + */ + time = gSaveContext.save.time; + sp1D8 = Math_SinS(time) * -40.0f; + temp_f14 = Math_CosS(time) * -34.0f; + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha); + + Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0); + + /** + * Section: Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker) + */ + sp1D8 = Math_SinS(time) * 40.0f; + temp_f14 = Math_CosS(time) * 34.0f; + + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha); + + Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0); + + OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0); + + /** + * Section: Cuts off Three-Day Clock's Hour Digits when they dip below the clock + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, + R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f); + + /** + * Section: Draws Three-Day Clock's Hour Digit Above the Sun + */ + sp1CC = gSaveContext.save.time * 0.000096131f; // (2.0f * 3.15f / 0x10000) + + // Rotates Three-Day Clock's Hour Digit To Above the Sun + Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Draws Three-Day Clock's Hour Digit Above the Sun + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); + + // Colours the Three-Day Clocks's Hour Digit Above the Sun + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); + + /** + * Section: Draws Three-Day Clock's Hour Digit Above the Moon + */ + + // Rotates Three-Day Clock's Hour Digit To Above the Moon + Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); + Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + Matrix_RotateZF(-sp1CC, MTXMODE_APPLY); + gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Draws Three-Day Clock's Hour Digit Above the Moon + gDPPipeSync(OVERLAY_DISP++); + gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, + 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); + gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0); + + OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); + + // Colours the Three-Day Clocks's Hour Digit Above the Moon + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); + gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); + + gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor); + + // Final Hours + if ((CURRENT_DAY >= 4) || + ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= (CLOCK_TIME(0, 0) + 5)) && + (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) { + if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) { + // The Final Hours clock will flash red + + colorStep = ABS_ALT(sFinalHoursClockDigitsRed - + sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockDigitsRed >= + sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockDigitsRed -= colorStep; } else { - /** - * Draw Three-Day Clock's Diamond - */ - gDPPipeSync(OVERLAY_DISP++); - - // Time is slowed down to half speed with inverted song of time - if (gSaveContext.save.timeSpeedOffset == -2) { - // Clock diamond is blue and flashes white - colorStep = ABS_ALT(D_801BFBCC - D_801BFBEC[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBCC >= D_801BFBEC[D_801BFBE8]) { - D_801BFBCC -= colorStep; - } else { - D_801BFBCC += colorStep; - } - - colorStep = ABS_ALT(D_801BFBD0 - D_801BFBF0[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBD0 >= D_801BFBF0[D_801BFBE8]) { - D_801BFBD0 -= colorStep; - } else { - D_801BFBD0 += colorStep; - } - - colorStep = ABS_ALT(D_801BFBD4 - D_801BFBF4[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBD4 >= D_801BFBF4[D_801BFBE8]) { - D_801BFBD4 -= colorStep; - } else { - D_801BFBD4 += colorStep; - } - - colorStep = ABS_ALT(D_801BFBD8 - D_801BFBF8[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBD8 >= D_801BFBF8[D_801BFBE8]) { - D_801BFBD8 -= colorStep; - } else { - D_801BFBD8 += colorStep; - } - - colorStep = ABS_ALT(D_801BFBDC - D_801BFBFC[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBDC >= D_801BFBFC[D_801BFBE8]) { - D_801BFBDC -= colorStep; - } else { - D_801BFBDC += colorStep; - } - - colorStep = ABS_ALT(D_801BFBE0 - D_801BFC00[D_801BFBE8]) / D_801BFBE4; - if (D_801BFBE0 >= D_801BFC00[D_801BFBE8]) { - D_801BFBE0 -= colorStep; - } else { - D_801BFBE0 += colorStep; - } - - D_801BFBE4--; - - if (D_801BFBE4 == 0) { - D_801BFBCC = D_801BFBEC[D_801BFBE8]; - D_801BFBD0 = D_801BFBF0[D_801BFBE8]; - D_801BFBD4 = D_801BFBF4[D_801BFBE8]; - D_801BFBD8 = D_801BFBF8[D_801BFBE8]; - D_801BFBDC = D_801BFBFC[D_801BFBE8]; - D_801BFBE0 = D_801BFC00[D_801BFBE8]; - D_801BFBE4 = 15; - D_801BFBE8 ^= 1; - } - - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BFBCC, D_801BFBD0, 255, sThreeDayClockAlpha); - gDPSetEnvColor(OVERLAY_DISP++, D_801BFBD8, D_801BFBDC, D_801BFBE0, 0); - } else { - // Clock diamond is green for regular timeSpeedOffset - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 170, 100, sThreeDayClockAlpha); - } - - OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gThreeDayClockDiamondTex, 40, 32, 140, 190, 40, - 32, 1 << 10, 1 << 10); - - /** - * Draw Three-Day Clock's Day-Number over Diamond - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - - OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, interfaceCtx->doActionSegment + 0x780, 48, 27, - 137, 192, 48, 27, 1 << 10, 1 << 10); - - /** - * Draw Three-Day Clock's Star (for the Minute Tracker) - */ - gDPPipeSync(OVERLAY_DISP++); - - if (D_801BF974 != 0) { - D_801BF980 += 0.02f; - D_801BF97C += 11; - } else { - D_801BF980 -= 0.02f; - D_801BF97C -= 11; - } - - D_801BF978--; - if (D_801BF978 == 0) { - D_801BF978 = 10; - D_801BF974 ^= 1; - } - - timeInSeconds = TIME_TO_SECONDS_F(gSaveContext.save.time); - timeInSeconds -= ((s16)(timeInSeconds / 3600.0f)) * 3600.0f; - - Gfx_SetupDL42_Overlay(play->state.gfxCtx); - - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - if (sThreeDayClockAlpha != 255) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, sThreeDayClockAlpha); - } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 110, D_801BF97C); - } - - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - - Matrix_Translate(0.0f, -86.0f, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, D_801BF980, MTXMODE_APPLY); - Matrix_RotateZF(-(timeInSeconds * 0.0175f) / 10.0f, MTXMODE_APPLY); - - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[12], 4, 0); - gDPLoadTextureBlock_4b(OVERLAY_DISP++, gThreeDayClockStarMinuteTex, G_IM_FMT_I, 16, 16, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(OVERLAY_DISP++, 0, 2, 3, 1, 0); + sFinalHoursClockDigitsRed += colorStep; } - /** - * Cuts off Three-Day Clock's Sun and Moon when they dip below the clock - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, - R_THREE_DAY_CLOCK_SUN_MOON_CUTOFF * 4.0f); - - // determines the current hour - for (sp1C6 = 0; sp1C6 <= 24; sp1C6++) { - if (((void)0, gSaveContext.save.time) < sThreeDayClockHours[sp1C6 + 1]) { - break; - } + colorStep = ABS_ALT(sFinalHoursClockFrameEnvRed - + sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvRed >= + sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvRed -= colorStep; + } else { + sFinalHoursClockFrameEnvRed += colorStep; } - /** - * Draw Three-Day Clock's Sun (for the Day-Time Hours Tracker) - */ - time = gSaveContext.save.time; - sp1D8 = Math_SinS(time) * -40.0f; - temp_f14 = Math_CosS(time) * -34.0f; - - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 100, 110, sThreeDayClockAlpha); - - Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[16], 4, 0); - - OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockSunHourTex, 24, 24, 0); - - /** - * Draw Three-Day Clock's Moon (for the Night-Time Hours Tracker) - */ - sp1D8 = Math_SinS(time) * 40.0f; - temp_f14 = Math_CosS(time) * 34.0f; - - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 55, sThreeDayClockAlpha); - - Matrix_Translate(sp1D8, temp_f14, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[20], 4, 0); - - OVERLAY_DISP = Gfx_DrawTexQuadIA8(OVERLAY_DISP, gThreeDayClockMoonHourTex, 24, 24, 0); - - /** - * Cuts off Three-Day Clock's Hour Digits when they dip below the clock - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetScissorFrac(OVERLAY_DISP++, G_SC_NON_INTERLACE, 400, 620, 880, - R_THREE_DAY_CLOCK_HOUR_DIGIT_CUTOFF * 4.0f); - - /** - * Draws Three-Day Clock's Hour Digit Above the Sun - */ - sp1CC = gSaveContext.save.time * 0.000096131f; - - // Rotates Three-Day Clock's Hour Digit To Above the Sun - Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - Matrix_RotateZF(-(sp1CC - 3.15f), MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - // Draws Three-Day Clock's Hour Digit Above the Sun - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[24], 8, 0); - - OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); - - // Colours the Three-Day Clocks's Hour Digit Above the Sun - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); - - /** - * Draws Three-Day Clock's Hour Digit Above the Moon - */ - // Rotates Three-Day Clock's Hour Digit To Above the Moon - Matrix_Translate(0.0f, R_THREE_DAY_CLOCK_Y_POS / 10.0f, 0.0f, MTXMODE_NEW); - Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - Matrix_RotateZF(-sp1CC, MTXMODE_APPLY); - gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - // Draws Three-Day Clock's Hour Digit Above the Moon - gDPPipeSync(OVERLAY_DISP++); - gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 0, 0, 0, sThreeDayClockAlpha); - gSPVertex(OVERLAY_DISP++, &interfaceCtx->actionVtx[32], 8, 0); - - OVERLAY_DISP = Gfx_DrawTexQuad4b(OVERLAY_DISP, sThreeDayClockHourTextures[sp1C6], 4, 16, 11, 0); - - // Colours the Three-Day Clocks's Hour Digit Above the Moon - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 155, sThreeDayClockAlpha); - gSP1Quadrangle(OVERLAY_DISP++, 4, 6, 7, 5, 0); - - gSPDisplayList(OVERLAY_DISP++, D_0E000000.setScissor); - - // Final Hours - if ((CURRENT_DAY >= 4) || ((CURRENT_DAY == 3) && (((void)0, gSaveContext.save.time) >= 5) && - (((void)0, gSaveContext.save.time) < CLOCK_TIME(6, 0)))) { - if (((void)0, gSaveContext.save.time) >= CLOCK_TIME(5, 0)) { - // The Final Hours clock will flash red - - colorStep = - ABS_ALT(sFinalHoursClockDigitsRed - D_801BFC04[sFinalHoursClockColorTargetIndex]) / + colorStep = ABS_ALT(sFinalHoursClockFrameEnvGreen - + sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]) / sFinalHoursClockColorTimer; - if (sFinalHoursClockDigitsRed >= D_801BFC04[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockDigitsRed -= colorStep; - } else { - sFinalHoursClockDigitsRed += colorStep; - } - - colorStep = - ABS_ALT(sFinalHoursClockFrameEnvRed - D_801BFC08[sFinalHoursClockColorTargetIndex]) / - sFinalHoursClockColorTimer; - if (sFinalHoursClockFrameEnvRed >= D_801BFC08[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockFrameEnvRed -= colorStep; - } else { - sFinalHoursClockFrameEnvRed += colorStep; - } - - colorStep = - ABS_ALT(sFinalHoursClockFrameEnvGreen - D_801BFC0C[sFinalHoursClockColorTargetIndex]) / - sFinalHoursClockColorTimer; - if (sFinalHoursClockFrameEnvGreen >= D_801BFC0C[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockFrameEnvGreen -= colorStep; - } else { - sFinalHoursClockFrameEnvGreen += colorStep; - } - - colorStep = - ABS_ALT(sFinalHoursClockFrameEnvBlue - D_801BFC10[sFinalHoursClockColorTargetIndex]) / - sFinalHoursClockColorTimer; - if (sFinalHoursClockFrameEnvBlue >= D_801BFC10[sFinalHoursClockColorTargetIndex]) { - sFinalHoursClockFrameEnvBlue -= colorStep; - } else { - sFinalHoursClockFrameEnvBlue += colorStep; - } - - sFinalHoursClockColorTimer--; - - if (sFinalHoursClockColorTimer == 0) { - sFinalHoursClockDigitsRed = D_801BFC04[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockFrameEnvRed = D_801BFC08[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockFrameEnvGreen = D_801BFC0C[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockFrameEnvBlue = D_801BFC10[sFinalHoursClockColorTargetIndex]; - sFinalHoursClockColorTimer = 6; - sFinalHoursClockColorTargetIndex ^= 1; - } - } - - sp1E6 = sThreeDayClockAlpha; - if (sp1E6 != 0) { - sp1E6 = 255; - } - - Gfx_SetupDL39_Overlay(play->state.gfxCtx); - - /** - * Draws Final-Hours Clock's Frame - */ - gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); - gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, - PRIMITIVE, 0); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6); - gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen, - sFinalHoursClockFrameEnvBlue, 0); - - OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202, - 80, 13, 0, 0, 0, 1 << 10, 1 << 10); - - finalHoursClockSlots[0] = 0; - - timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; - - timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash); - - // digits for hours - finalHoursClockSlots[1] = timeInMinutes / 60.0f; - finalHoursClockSlots[2] = timeInMinutes / 60.0f; - - temp = (s32)timeInMinutes % 60; - - while (finalHoursClockSlots[1] >= 10) { - finalHoursClockSlots[0]++; - finalHoursClockSlots[1] -= 10; - } - - // digits for minutes - finalHoursClockSlots[3] = 0; - finalHoursClockSlots[4] = temp; - - while (finalHoursClockSlots[4] >= 10) { - finalHoursClockSlots[3]++; - finalHoursClockSlots[4] -= 10; - } - - // digits for seconds - finalHoursClockSlots[6] = 0; - finalHoursClockSlots[7] = - timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) + - (((void)0, temp) * ((f32)0x10000 / (24 * 60)))); - - while (finalHoursClockSlots[7] >= 10) { - finalHoursClockSlots[6]++; - finalHoursClockSlots[7] -= 10; - } - - // Colon separating hours from minutes and minutes from seconds - finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10; - - /** - * Draws Final-Hours Clock's Digits - */ - gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6); - gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0); - - for (sp1C6 = 0; sp1C6 < 8; sp1C6++) { - index = D_801BFC40[sp1C6]; - - OVERLAY_DISP = - Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]], - 8, 8, index, 205, 8, 8, 1 << 10, 1 << 10); - } + if (sFinalHoursClockFrameEnvGreen >= + sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvGreen -= colorStep; + } else { + sFinalHoursClockFrameEnvGreen += colorStep; } + + colorStep = ABS_ALT(sFinalHoursClockFrameEnvBlue - + sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]) / + sFinalHoursClockColorTimer; + if (sFinalHoursClockFrameEnvBlue >= + sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]) { + sFinalHoursClockFrameEnvBlue -= colorStep; + } else { + sFinalHoursClockFrameEnvBlue += colorStep; + } + + sFinalHoursClockColorTimer--; + + if (sFinalHoursClockColorTimer == 0) { + sFinalHoursClockDigitsRed = sFinalHoursClockDigitsRedTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvRed = + sFinalHoursClockFrameEnvRedTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvGreen = + sFinalHoursClockFrameEnvGreenTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockFrameEnvBlue = + sFinalHoursClockFrameEnvBlueTargets[sFinalHoursClockColorTargetIndex]; + sFinalHoursClockColorTimer = 6; + sFinalHoursClockColorTargetIndex ^= 1; + } + } + + sp1E6 = sThreeDayClockAlpha; + if (sp1E6 != 0) { + sp1E6 = 255; + } + + Gfx_SetupDL39_Overlay(play->state.gfxCtx); + + /** + * Section: Draws Final-Hours Clock's Frame + */ + gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetAlphaCompare(OVERLAY_DISP++, G_AC_THRESHOLD); + gDPSetRenderMode(OVERLAY_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 195, sp1E6); + gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockFrameEnvRed, sFinalHoursClockFrameEnvGreen, + sFinalHoursClockFrameEnvBlue, 0); + + OVERLAY_DISP = Gfx_DrawTexRect4b(OVERLAY_DISP, gFinalHoursClockFrameTex, 3, 80, 13, 119, 202, 80, 13, 0, + 0, 0, 1 << 10, 1 << 10); + + timeUntilMoonCrash = TIME_UNTIL_MOON_CRASH; + timeInMinutes = TIME_TO_MINUTES_F(timeUntilMoonCrash); + + // digits for hours + finalHoursClockSlots[0] = 0; + finalHoursClockSlots[1] = timeInMinutes / 60.0f; + finalHoursClockSlots[2] = timeInMinutes / 60.0f; + + while (finalHoursClockSlots[1] >= 10) { + finalHoursClockSlots[0]++; + finalHoursClockSlots[1] -= 10; + } + + // digits for minutes + finalHoursClockSlots[3] = 0; + finalHoursClockSlots[4] = (s32)timeInMinutes % 60; + finalHoursClockSlots[5] = (s32)timeInMinutes % 60; + + while (finalHoursClockSlots[4] >= 10) { + finalHoursClockSlots[3]++; + finalHoursClockSlots[4] -= 10; + } + + // digits for seconds + finalHoursClockSlots[6] = 0; + finalHoursClockSlots[7] = + timeUntilMoonCrash - (u32)((finalHoursClockSlots[2] * ((f32)0x10000 / 24)) + + (finalHoursClockSlots[5] * ((f32)0x10000 / (24 * 60)))); + + while (finalHoursClockSlots[7] >= 10) { + finalHoursClockSlots[6]++; + finalHoursClockSlots[7] -= 10; + } + + // Colon separating hours from minutes and minutes from seconds + finalHoursClockSlots[2] = finalHoursClockSlots[5] = 10; + + /** + * Section: Draws Final-Hours Clock's Digits + */ + gDPPipeSync(OVERLAY_DISP++); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sFinalHoursClockDigitsRed, 0, 0, sp1E6); + gDPSetEnvColor(OVERLAY_DISP++, sFinalHoursClockDigitsRed, 0, 0, 0); + + for (sp1C6 = 0; sp1C6 < 8; sp1C6++) { + index = sFinalHoursDigitSlotPosXOffset[sp1C6]; + + OVERLAY_DISP = + Gfx_DrawTexRectI8(OVERLAY_DISP, sFinalHoursDigitTextures[finalHoursClockSlots[sp1C6]], 8, 8, + index, 205, 8, 8, 1 << 10, 1 << 10); } } } } + CLOSE_DISPS(play->state.gfxCtx); } -#else -s16 sThreeDayClockAlpha = 255; -s16 D_801BFB30 = 0; -s16 D_801BFB34 = 0; -u16 sThreeDayClockHours[] = { - CLOCK_TIME(0, 0), CLOCK_TIME(1, 0), CLOCK_TIME(2, 0), CLOCK_TIME(3, 0), CLOCK_TIME(4, 0), - CLOCK_TIME(5, 0), CLOCK_TIME(6, 0), CLOCK_TIME(7, 0), CLOCK_TIME(8, 0), CLOCK_TIME(9, 0), - CLOCK_TIME(10, 0), CLOCK_TIME(11, 0), CLOCK_TIME(12, 0), CLOCK_TIME(13, 0), CLOCK_TIME(14, 0), - CLOCK_TIME(15, 0), CLOCK_TIME(16, 0), CLOCK_TIME(17, 0), CLOCK_TIME(18, 0), CLOCK_TIME(19, 0), - CLOCK_TIME(20, 0), CLOCK_TIME(21, 0), CLOCK_TIME(22, 0), CLOCK_TIME(23, 0), CLOCK_TIME(24, 0) - 1, -}; -TexturePtr sThreeDayClockHourTextures[] = { - gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, - gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, - gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, - gThreeDayClockHour12Tex, gThreeDayClockHour1Tex, gThreeDayClockHour2Tex, gThreeDayClockHour3Tex, - gThreeDayClockHour4Tex, gThreeDayClockHour5Tex, gThreeDayClockHour6Tex, gThreeDayClockHour7Tex, - gThreeDayClockHour8Tex, gThreeDayClockHour9Tex, gThreeDayClockHour10Tex, gThreeDayClockHour11Tex, -}; -s16 D_801BFBCC = 0; // color R -s16 D_801BFBD0 = 155; // color G -s16 D_801BFBD4 = 255; -s16 D_801BFBD8 = 0; -s16 D_801BFBDC = 0; -s16 D_801BFBE0 = 0; -s16 D_801BFBE4 = 0xF; -u32 D_801BFBE8 = 0; -s16 D_801BFBEC[] = { 100, 0 }; -s16 D_801BFBF0[] = { 205, 155 }; -s16 D_801BFBF4[] = { 255, 255 }; -s16 D_801BFBF8[] = { 30, 0 }; -s16 D_801BFBFC[] = { 30, 0 }; -s16 D_801BFC00[] = { 100, 0 }; -s16 D_801BFC04[] = { 255, 0 }; -s16 D_801BFC08[] = { 100, 0 }; -s16 D_801BFC0C[] = { 30, 0 }; -s16 D_801BFC10[] = { 100, 0 }; -TexturePtr sFinalHoursDigitTextures[] = { - gFinalHoursClockDigit0Tex, gFinalHoursClockDigit1Tex, gFinalHoursClockDigit2Tex, gFinalHoursClockDigit3Tex, - gFinalHoursClockDigit4Tex, gFinalHoursClockDigit5Tex, gFinalHoursClockDigit6Tex, gFinalHoursClockDigit7Tex, - gFinalHoursClockDigit8Tex, gFinalHoursClockDigit9Tex, gFinalHoursClockColonTex, -}; -s16 D_801BFC40[] = { - 127, 136, 144, 151, 160, 168, 175, 184, -}; -void Interface_DrawClock(PlayState* play); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_DrawClock.s") -#endif void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType) { InterfaceContext* interfaceCtx = &play->interfaceCtx; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 240ea9679..26cfb7a59 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1114,30 +1114,30 @@ 0x801BFB1C:("sMagicArrowEffectsG","UNK_TYPE1","",0x1), 0x801BFB24:("sMagicArrowEffectsB","UNK_TYPE1","",0x1), 0x801BFB2C:("sThreeDayClockAlpha","UNK_TYPE2","",0x2), - 0x801BFB30:("D_801BFB30","UNK_TYPE2","",0x2), - 0x801BFB34:("D_801BFB34","UNK_TYPE2","",0x2), + 0x801BFB30:("sClockAlphaTimer1","UNK_TYPE2","",0x2), + 0x801BFB34:("sClockAlphaTimer2","UNK_TYPE2","",0x2), 0x801BFB38:("sThreeDayClockHours","UNK_TYPE1","",0x1), 0x801BFB6C:("sThreeDayClockHourTextures","UNK_TYPE1","",0x1), - 0x801BFBCC:("D_801BFBCC","UNK_TYPE2","",0x2), - 0x801BFBD0:("D_801BFBD0","UNK_TYPE2","",0x2), - 0x801BFBD4:("D_801BFBD4","UNK_TYPE2","",0x2), - 0x801BFBD8:("D_801BFBD8","UNK_TYPE2","",0x2), - 0x801BFBDC:("D_801BFBDC","UNK_TYPE2","",0x2), - 0x801BFBE0:("D_801BFBE0","UNK_TYPE2","",0x2), - 0x801BFBE4:("D_801BFBE4","UNK_TYPE2","",0x2), - 0x801BFBE8:("D_801BFBE8","UNK_TYPE2","",0x2), - 0x801BFBEC:("D_801BFBEC","UNK_TYPE1","",0x1), - 0x801BFBF0:("D_801BFBF0","UNK_TYPE1","",0x1), - 0x801BFBF4:("D_801BFBF4","UNK_TYPE1","",0x1), - 0x801BFBF8:("D_801BFBF8","UNK_TYPE1","",0x1), - 0x801BFBFC:("D_801BFBFC","UNK_TYPE1","",0x1), - 0x801BFC00:("D_801BFC00","UNK_TYPE1","",0x1), - 0x801BFC04:("D_801BFC04","UNK_TYPE1","",0x1), - 0x801BFC08:("D_801BFC08","UNK_TYPE1","",0x1), - 0x801BFC0C:("D_801BFC0C","UNK_TYPE1","",0x1), - 0x801BFC10:("D_801BFC10","UNK_TYPE1","",0x1), + 0x801BFBCC:("sClockInvDiamondPrimRed","UNK_TYPE2","",0x2), + 0x801BFBD0:("sClockInvDiamondPrimGreen","UNK_TYPE2","",0x2), + 0x801BFBD4:("sClockInvDiamondPrimBlue","UNK_TYPE2","",0x2), + 0x801BFBD8:("sClockInvDiamondEnvRed","UNK_TYPE2","",0x2), + 0x801BFBDC:("sClockInvDiamondEnvGreen","UNK_TYPE2","",0x2), + 0x801BFBE0:("sClockInvDiamondEnvBlue","UNK_TYPE2","",0x2), + 0x801BFBE4:("sClockInvDiamondTimer","UNK_TYPE2","",0x2), + 0x801BFBE8:("sClockInvDiamondTargetIndex","UNK_TYPE2","",0x2), + 0x801BFBEC:("sClockInvDiamondPrimRedTargets","UNK_TYPE1","",0x1), + 0x801BFBF0:("sClockInvDiamondPrimGreenTargets","UNK_TYPE1","",0x1), + 0x801BFBF4:("sClockInvDiamondPrimBlueTargets","UNK_TYPE1","",0x1), + 0x801BFBF8:("sClockInvDiamondEnvRedTargets","UNK_TYPE1","",0x1), + 0x801BFBFC:("sClockInvDiamondEnvGreenTargets","UNK_TYPE1","",0x1), + 0x801BFC00:("sClockInvDiamondEnvBlueTargets","UNK_TYPE1","",0x1), + 0x801BFC04:("sFinalHoursClockDigitsRedTargets","UNK_TYPE1","",0x1), + 0x801BFC08:("sFinalHoursClockFrameEnvRedTargets","UNK_TYPE1","",0x1), + 0x801BFC0C:("sFinalHoursClockFrameEnvGreenTargets","UNK_TYPE1","",0x1), + 0x801BFC10:("sFinalHoursClockFrameEnvBlueTargets","UNK_TYPE1","",0x1), 0x801BFC14:("sFinalHoursDigitTextures","UNK_TYPE1","",0x1), - 0x801BFC40:("D_801BFC40","UNK_TYPE1","",0x1), + 0x801BFC40:("sFinalHoursDigitSlotPosXOffset","UNK_TYPE1","",0x1), 0x801BFC50:("sPerfectLettersType1OffScreenAngles","UNK_TYPE2","",0x2), 0x801BFC60:("sPerfectLettersType1PrimColorTargets","s16","[6]",0xC), 0x801BFC6C:("sPerfectLettersType2SpellingOffsetsX","UNK_TYPE4","",0x4), From a995e4cf6181bab778b89d073a2aa67860d82721 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Fri, 2 Jun 2023 17:50:57 +0200 Subject: [PATCH 24/36] ovl_Eff_Stk decompiled (#1265) * ovl_Eff_Stk decompiled * ovl_Eff_Stk improvements * ovl_Eff_Stk forgot to remove variables * ovl_Eff_Stk improvements --- spec | 3 +- src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c | 77 ++++++++++++++++++--- src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h | 4 +- 3 files changed, 73 insertions(+), 11 deletions(-) diff --git a/spec b/spec index 12fce05ce..601a46f40 100644 --- a/spec +++ b/spec @@ -4602,8 +4602,7 @@ beginseg name "ovl_Eff_Stk" compress include "build/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.o" - include "build/data/ovl_Eff_Stk/ovl_Eff_Stk.data.o" - include "build/data/ovl_Eff_Stk/ovl_Eff_Stk.reloc.o" + include "build/src/overlays/actors/ovl_Eff_Stk/ovl_Eff_Stk_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c index 4d66cc827..88c604c5e 100644 --- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c +++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.c @@ -5,6 +5,7 @@ */ #include "z_eff_stk.h" +#include "objects/object_stk2/object_stk2.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) @@ -15,7 +16,8 @@ void EffStk_Destroy(Actor* thisx, PlayState* play); void EffStk_Update(Actor* thisx, PlayState* play); void EffStk_Draw(Actor* thisx, PlayState* play); -#if 0 +void func_80BF0DE0(EffStk* this, PlayState* play); + ActorInit Eff_Stk_InitVars = { ACTOR_EFF_STK, ACTORCAT_ITEMACTION, @@ -28,16 +30,75 @@ ActorInit Eff_Stk_InitVars = { (ActorFunc)EffStk_Draw, }; -#endif +void EffStk_Init(Actor* thisx, PlayState* play) { + EffStk* this = THIS; -extern UNK_TYPE D_06009F60; + Actor_SetScale(&this->actor, 0.2f); + this->actionFunc = func_80BF0DE0; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Init.s") +void EffStk_Destroy(Actor* thisx, PlayState* play) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Destroy.s") +void func_80BF0DE0(EffStk* this, PlayState* play) { + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_512)) { + switch (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_512)]->id) { + case 2: + this->actor.draw = EffStk_Draw; + if (this->unk146 < 0x3C00) { + this->unk146 += 0x400; + this->unk148 = Math_SinS(this->unk146) * -630.0f; + } + this->unk144++; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/func_80BF0DE0.s") + case 3: + this->actor.draw = EffStk_Draw; + if (this->unk146 < 0x3C00) { + this->unk146 += 0x400; + this->unk148 = Math_SinS(this->unk146) * -630.0f; + } + this->unk144--; + break; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Update.s") + default: + this->actor.draw = NULL; + this->unk146 = 0; + this->unk148 = 0.0f; + break; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Stk/EffStk_Draw.s") +void EffStk_Update(Actor* thisx, PlayState* play) { + EffStk* this = THIS; + + this->actionFunc(this, play); +} + +void EffStk_Draw(Actor* thisx, PlayState* play) { + EffStk* this = THIS; + s32 pad; + Camera* activeCam = GET_ACTIVE_CAM(play); + Vec3f eye = activeCam->eye; + Vec3f quakeOffset; + + Camera_GetQuakeOffset(&quakeOffset, activeCam); + + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL25_Xlu(play->state.gfxCtx); + Matrix_Translate(eye.x + quakeOffset.x, eye.y + quakeOffset.y, eye.z + quakeOffset.z, MTXMODE_NEW); + Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY); + Matrix_ReplaceRotation(&play->billboardMtxF); + Matrix_Translate(0.0f, 0.0f, this->unk148, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + AnimatedMat_DrawAlphaStep(play, Lib_SegmentedToVirtual(object_stk2_Matanimheader_009F60), 1.0f, this->unk144); + gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE); + gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE); + gSPDisplayList(POLY_XLU_DISP++, object_stk2_DL_008920); + gSPDisplayList(POLY_XLU_DISP++, object_stk2_DL_008A38); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h index 4b2b84783..03b6660d2 100644 --- a/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h +++ b/src/overlays/actors/ovl_Eff_Stk/z_eff_stk.h @@ -9,7 +9,9 @@ typedef void (*EffStkActionFunc)(struct EffStk*, PlayState*); typedef struct EffStk { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x8]; + /* 0x144 */ s16 unk144; + /* 0x146 */ s16 unk146; + /* 0x148 */ f32 unk148; /* 0x14C */ EffStkActionFunc actionFunc; } EffStk; // size = 0x150 From 47bc7c12e2d28b8d8ed1cff8df9c17395aefce80 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Mon, 5 Jun 2023 05:43:12 +1000 Subject: [PATCH 25/36] Misc Cleanup (#1257) * a lot of brackets, and some other things * oops * another bracket * check flag all * just a few more... * PR suggestions * PR comment * pr * one more bracket --- include/variables.h | 24 --- src/audio/code_8019AF00.c | 6 +- src/audio/lib/effects.c | 2 +- src/audio/lib/heap.c | 8 +- src/audio/lib/load.c | 10 +- src/audio/lib/playback.c | 8 +- src/boot_O2/__osMalloc.c | 4 +- src/boot_O2/system_heap.c | 2 +- src/code/PreRender.c | 2 +- src/code/jpegutils.c | 4 +- src/code/sched.c | 31 ++- src/code/z_DLF.c | 2 +- src/code/z_actor.c | 25 +-- src/code/z_camera.c | 5 +- src/code/z_collision_check.c | 124 ++++++------ src/code/z_fireobj.c | 1 + src/code/z_lifemeter.c | 8 +- src/code/z_lights.c | 12 +- src/code/z_play.c | 2 +- src/code/z_player_lib.c | 12 +- src/code/z_room.c | 2 +- src/code/z_sub_s.c | 12 +- src/libultra/io/pfsfilestate.c | 2 +- src/libultra/os/seteventmesg.c | 2 +- src/libultra/rmon/xldtob.c | 14 +- src/libultra/rmon/xlitob.c | 6 +- src/libultra/rmon/xprintf.c | 2 +- src/libultra/voice/voicegetstatus.c | 2 +- .../actors/ovl_Arms_Hook/z_arms_hook.c | 14 +- .../actors/ovl_Arrow_Fire/z_arrow_fire.c | 1 + .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 + .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 2 + .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 22 +-- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 2 +- .../actors/ovl_Bg_Icefloe/z_bg_icefloe.c | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 6 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 2 +- .../actors/ovl_Bg_Open_Spot/z_bg_open_spot.c | 1 + src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 5 +- .../actors/ovl_Dm_Char03/z_dm_char03.c | 2 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 5 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 2 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 11 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 8 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 1 + .../ovl_En_Attack_Niw/z_en_attack_niw.c | 15 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 4 + .../actors/ovl_En_Bba_01/z_en_bba_01.c | 5 + .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 1 + src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 10 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 4 + .../actors/ovl_En_Cne_01/z_en_cne_01.c | 4 + src/overlays/actors/ovl_En_Door/z_en_door.c | 6 +- src/overlays/actors/ovl_En_Drs/z_en_drs.c | 2 + .../actors/ovl_En_Dy_Extra/z_en_dy_extra.c | 4 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 12 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 16 +- .../ovl_En_Ending_Hero5/z_en_ending_hero5.c | 7 + src/overlays/actors/ovl_En_Fall/z_en_fall.c | 1 + src/overlays/actors/ovl_En_Fg/z_en_fg.c | 3 + src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 10 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 3 + src/overlays/actors/ovl_En_Giant/z_en_giant.c | 33 +++- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 31 ++- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 10 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 17 +- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 2 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 14 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 1 + src/overlays/actors/ovl_En_In/z_en_in.c | 178 ++++++++++++++++-- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 95 +++++----- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 107 ++++++----- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 16 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.h | 2 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 30 ++- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 84 ++++++--- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 19 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 2 + src/overlays/actors/ovl_En_Muto/z_en_muto.c | 12 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 42 +++-- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 20 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 1 + .../ovl_En_Po_Sisters/z_en_po_sisters.c | 19 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 46 +++-- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 42 +++-- src/overlays/actors/ovl_En_St/z_en_st.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 90 +++++++-- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 29 ++- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 16 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 6 + src/overlays/actors/ovl_En_Test5/z_en_test5.c | 17 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 1 + src/overlays/actors/ovl_En_Tk/z_en_tk.c | 1 + .../actors/ovl_En_Torch2/z_en_torch2.c | 4 +- src/overlays/actors/ovl_En_Toto/z_en_toto.c | 17 +- .../actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c | 1 + src/overlays/actors/ovl_En_Yb/z_en_yb.c | 18 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 16 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 1 + .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 8 +- src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c | 17 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 8 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 44 +++-- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 36 ++-- .../ovl_Object_Kankyo/z_object_kankyo.c | 1 + .../actors/ovl_player_actor/z_player.c | 6 +- tools/disasm/variables.txt | 8 +- 110 files changed, 1086 insertions(+), 623 deletions(-) diff --git a/include/variables.h b/include/variables.h index 24030fd99..e264a7d9b 100644 --- a/include/variables.h +++ b/include/variables.h @@ -459,30 +459,6 @@ extern u8 D_801BDBC8; // extern UNK_TYPE1 D_801BE92C; // extern UNK_TYPE1 D_801BE944; // extern actor_init_var_func sInitChainHandlers[11]; -// extern UNK_TYPE2 sHeartsPrimColors; -// extern UNK_TYPE2 D_801BE992; -// extern UNK_TYPE2 D_801BE994; -// extern UNK_TYPE2 sHeartsEnvColors; -// extern UNK_TYPE2 D_801BE9A6; -// extern UNK_TYPE2 D_801BE9A8; -// extern UNK_TYPE2 sHeartsPrimFactors; -// extern UNK_TYPE2 sHeartsEnvFactors; -// extern UNK_TYPE2 sHeartsDDPrimColors; -// extern UNK_TYPE2 D_801BE9E2; -// extern UNK_TYPE2 D_801BE9E4; -// extern UNK_TYPE2 sHeartsDDEnvColors; -// extern UNK_TYPE2 D_801BE9F6; -// extern UNK_TYPE2 D_801BE9F8; -// extern UNK_TYPE2 sHeartsDDPrimFactors; -// extern UNK_TYPE2 D_801BEA0A; -// extern UNK_TYPE2 D_801BEA0C; -// extern UNK_TYPE2 sHeartsDDEnvFactors; -// extern UNK_TYPE2 D_801BEA1E; -// extern UNK_TYPE2 D_801BEA20; -// extern UNK_TYPE1 HeartTextures; -// extern UNK_TYPE1 HeartDDTextures; -//extern LightsPosBindFunc posBindFuncs[3]; -//extern LightsBindFunc dirBindFuncs[3]; // extern UNK_TYPE4 D_801BEAD4; // extern UNK_TYPE4 D_801BEAD8; // extern UNK_TYPE1 D_801BEAE0; diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index 287149c91..e88135b8d 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -2543,8 +2543,8 @@ void AudioOcarina_CheckSongsWithoutMusicStaff(void) { if ((u32)sOcarinaAvailableSongFlags & (1 << songIndex)) { // Loops through all possible starting indices? // Loops through the notes of the song? - for (j = 0, k = 0; j < gOcarinaSongButtons[songIndex].numButtons && k == 0 && - sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[songIndex].numButtons;) { + for (j = 0, k = 0; (j < gOcarinaSongButtons[songIndex].numButtons) && (k == 0) && + (sOcarinaWithoutMusicStaffPos >= gOcarinaSongButtons[songIndex].numButtons);) { pitch = sCurOcarinaSongWithoutMusicStaff[(sOcarinaWithoutMusicStaffPos - gOcarinaSongButtons[songIndex].numButtons) + @@ -2953,7 +2953,7 @@ void AudioOcarina_SetRecordingSong(u8 isRecordingComplete) { i = sRecordSongPos; pitch = OCARINA_PITCH_NONE; - while (i != 0 && pitch == OCARINA_PITCH_NONE) { + while ((i != 0) && (pitch == OCARINA_PITCH_NONE)) { i--; pitch = recordedSong[i].pitch; } diff --git a/src/audio/lib/effects.c b/src/audio/lib/effects.c index feddf73ca..6ef8added 100644 --- a/src/audio/lib/effects.c +++ b/src/audio/lib/effects.c @@ -26,7 +26,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca for (i = 0; i < ARRAY_COUNT(channel->layers); i++) { SequenceLayer* layer = channel->layers[i]; - if (layer != NULL && layer->enabled && layer->note != NULL) { + if ((layer != NULL) && layer->enabled && (layer->note != NULL)) { if (layer->notePropertiesNeedInit) { layer->noteFreqScale = layer->freqScale * chanFreqScale; layer->noteVelocity = layer->velocitySquare2 * channel->appliedVolume; diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 0a64c0d1b..1ea26952b 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1303,8 +1303,8 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) { sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1; sampleBankId2 = gAudioCtx.soundFontList[fontId].sampleBankId2; if (((sampleBankId1 != 0xFF) && (entry->sampleBankId == sampleBankId1)) || - ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || entry->sampleBankId == 0 || - entry->sampleBankId == 0xFE) { + ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || (entry->sampleBankId == 0) || + (entry->sampleBankId == 0xFE)) { if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) != NULL) { if (1) {} if (AudioLoad_IsFontLoadComplete(fontId) != 0) { @@ -1369,7 +1369,7 @@ void AudioHeap_DiscardSampleCaches(void) { if ((sampleBankId1 == 0xFF) && (sampleBankId2 == 0xFF)) { continue; } - if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_PERMANENT, fontId) == NULL || + if ((AudioHeap_SearchCaches(FONT_TABLE, CACHE_PERMANENT, fontId) == NULL) || !AudioLoad_IsFontLoadComplete(fontId)) { continue; } @@ -1393,7 +1393,7 @@ typedef struct { } StorageChange; void AudioHeap_ChangeStorage(StorageChange* change, Sample* sample) { - if (sample != NULL && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) && + if ((sample != NULL) && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) && ((sample->medium == MEDIUM_RAM) || (D_801FD120 != 0))) { uintptr_t startAddr = change->oldAddr; uintptr_t endAddr = change->oldAddr + change->size; diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index 3a4f1c1e0..7df46952b 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -138,13 +138,13 @@ void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaI s32 bufferPos; u32 i; - if (arg2 != 0 || *dmaIndexRef >= gAudioCtx.sampleDmaListSize1) { + if ((arg2 != 0) || (*dmaIndexRef >= gAudioCtx.sampleDmaListSize1)) { for (i = gAudioCtx.sampleDmaListSize1; i < gAudioCtx.sampleDmaCount; i++) { dma = &gAudioCtx.sampleDmas[i]; bufferPos = devAddr - dma->devAddr; - if (0 <= bufferPos && ((u32)bufferPos <= dma->size - size)) { + if ((0 <= bufferPos) && ((u32)bufferPos <= (dma->size - size))) { // We already have a DMA request for this memory range. - if (dma->ttl == 0 && gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos) { + if ((dma->ttl == 0) && (gAudioCtx.sampleDmaReuseQueue2RdPos != gAudioCtx.sampleDmaReuseQueue2WrPos)) { // Move the DMA out of the reuse queue, by swapping it with the // read pos, and then incrementing the read pos. if (dma->reuseIndex != gAudioCtx.sampleDmaReuseQueue2RdPos) { @@ -1905,7 +1905,7 @@ void AudioLoad_RelocateFontAndPreloadSamples(s32 fontId, SoundFontData* fontData } gAudioCtx.numUsedSamples = 0; - if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) { + if ((gAudioCtx.preloadSampleStackTop != 0) && !preloadInProgress) { topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1]; sample = topPreload->sample; nChunks = (sample->size >> 12) + 1; @@ -2160,7 +2160,7 @@ void AudioLoad_PreloadSamplesForFont(s32 fontId, s32 async, SampleBankRelocInfo* } gAudioCtx.numUsedSamples = 0; - if (gAudioCtx.preloadSampleStackTop != 0 && !preloadInProgress) { + if ((gAudioCtx.preloadSampleStackTop != 0) && !preloadInProgress) { topPreload = &gAudioCtx.preloadSampleStack[gAudioCtx.preloadSampleStackTop - 1]; sample = topPreload->sample; nChunks = (sample->size >> 12) + 1; diff --git a/src/audio/lib/playback.c b/src/audio/lib/playback.c index deb6e82b9..678e01089 100644 --- a/src/audio/lib/playback.c +++ b/src/audio/lib/playback.c @@ -597,7 +597,7 @@ s32 AudioPlayback_BuildSyntheticWave(Note* note, SequenceLayer* layer, s32 waveI } freqScale = layer->freqScale; - if (layer->portamento.mode != 0 && 0.0f < layer->portamento.extent) { + if ((layer->portamento.mode != 0) && (0.0f < layer->portamento.extent)) { freqScale *= (layer->portamento.extent + 1.0f); } @@ -906,7 +906,7 @@ Note* AudioPlayback_AllocNoteFromActive(NotePool* pool, SequenceLayer* layer) { aPriority = aNote->playbackState.priority; } - if (rNote == NULL && aNote == NULL) { + if ((rNote == NULL) && (aNote == NULL)) { return NULL; } @@ -928,8 +928,8 @@ Note* AudioPlayback_AllocNote(SequenceLayer* layer) { if (policy & 1) { note = layer->note; - if (note != NULL && note->playbackState.prevParentLayer == layer && - note->playbackState.wantedParentLayer == NO_LAYER) { + if ((note != NULL) && (note->playbackState.prevParentLayer == layer) && + (note->playbackState.wantedParentLayer == NO_LAYER)) { AudioPlayback_NoteReleaseAndTakeOwnership(note, layer); AudioPlayback_AudioListRemove(¬e->listItem); AudioScript_AudioListPushBack(¬e->listItem.pool->releasing, ¬e->listItem); diff --git a/src/boot_O2/__osMalloc.c b/src/boot_O2/__osMalloc.c index 24fa6d39e..71a5a5ba3 100644 --- a/src/boot_O2/__osMalloc.c +++ b/src/boot_O2/__osMalloc.c @@ -275,7 +275,7 @@ void __osFree(Arena* arena, void* ptr) { node = (ArenaNode*)((uintptr_t)ptr - sizeof(ArenaNode)); - if (ptr != NULL && node->magic == NODE_MAGIC && !node->isFree) { + if ((ptr != NULL) && (node->magic == NODE_MAGIC) && !node->isFree) { next = node->next; prev = node->prev; node->isFree = true; @@ -297,7 +297,7 @@ void __osFree(Arena* arena, void* ptr) { // Checks if the previous node is contiguous to the current node and if it isn't currently allocated. Then merge // the two nodes into one. - if (prev != NULL && prev->isFree && (uintptr_t)node == (uintptr_t)prev + sizeof(ArenaNode) + prev->size) { + if ((prev != NULL) && prev->isFree && ((uintptr_t)node == (uintptr_t)prev + sizeof(ArenaNode) + prev->size)) { if (next != NULL) { next->prev = prev; } diff --git a/src/boot_O2/system_heap.c b/src/boot_O2/system_heap.c index 66e53dc12..365d94596 100644 --- a/src/boot_O2/system_heap.c +++ b/src/boot_O2/system_heap.c @@ -61,7 +61,7 @@ void* SystemHeap_RunBlockFunc8(void* blk, size_t nBlk, size_t blkSize, BlockFunc blk = SystemHeap_Malloc(nBlk * blkSize); } - if (blk != NULL && blockFunc != NULL) { + if ((blk != NULL) && (blockFunc != NULL)) { uintptr_t pos = blk; for (; pos < (uintptr_t)blk + (nBlk * blkSize); pos += (blkSize & ~0)) { diff --git a/src/code/PreRender.c b/src/code/PreRender.c index 172659cf7..c9f279e75 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -403,7 +403,7 @@ void PreRender_ApplyAntiAliasingFilter(PreRender* this) { * Applies filters to the framebuffer prerender to make it look smoother */ void PreRender_ApplyFilters(PreRender* this) { - if (this->cvgSave == NULL || this->fbufSave == NULL) { + if ((this->cvgSave == NULL) || (this->fbufSave == NULL)) { this->unk_4D = 0; } else { this->unk_4D = 1; diff --git a/src/code/jpegutils.c b/src/code/jpegutils.c index 904643f46..fbf6c69c2 100644 --- a/src/code/jpegutils.c +++ b/src/code/jpegutils.c @@ -86,7 +86,7 @@ u32 JpegUtils_ProcessHuffmanTableImpl(u8* data, JpegHuffmanTable* ht, u8* codesL s32 temp; ret = count; - if (count == 0 || (isAc && count > 0x100) || (!isAc && count > 0x10)) { + if ((count == 0) || (isAc && (count > 0x100)) || (!isAc && (count > 0x10))) { return 0; } if (ret != JpegUtils_GetHuffmanCodes(codesLengths, codes)) { @@ -141,7 +141,7 @@ u32 JpegUtils_ProcessHuffmanTableImplOld(u8* dht, JpegHuffmanTableOld* ht, u8* c count2 = count = JpegUtils_ParseHuffmanCodesLengths(dht, codesLengths); - if (count == 0 || (isAc && count > 0x100) || (!isAc && count > 0x10)) { + if ((count == 0) || (isAc && (count > 0x100)) || (!isAc && (count > 0x10))) { return true; } diff --git a/src/code/sched.c b/src/code/sched.c index 9e2016833..c06eb41ba 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -25,7 +25,7 @@ void Sched_SwapFramebuffer(CfbInfo* cfbInfo) { osViSwapBuffer(cfbInfo->swapBuffer); cfbInfo->updateRate2 = cfbInfo->updateRate; - if (SREG(62) == 0 && cfbInfo->viMode != NULL) { + if ((SREG(62) == 0) && (cfbInfo->viMode != NULL)) { D_80096B20 = one; osViSetMode(cfbInfo->viMode); osViSetSpecialFeatures(cfbInfo->features); @@ -68,7 +68,7 @@ void Sched_HandleAudioCancel(SchedContext* sched) { // AUDIO SP Cancel osSyncPrintf("AUDIO SP キャンセルします\n"); - if (sched->curRSPTask != NULL && sched->curRSPTask->list.t.type == M_AUDTASK) { + if ((sched->curRSPTask != NULL) && (sched->curRSPTask->list.t.type == M_AUDTASK)) { if (!(HW_REG(SP_STATUS_REG, u32) & SP_STATUS_HALT)) { // Attempts to stop AUDIO SP osSyncPrintf("AUDIO SP止めようとします\n"); @@ -130,7 +130,7 @@ void Sched_HandleGfxCancel(SchedContext* sched) { // GRAPH SP Cancel osSyncPrintf("GRAPH SP キャンセルします\n"); - if (sched->curRSPTask != NULL && sched->curRSPTask->list.t.type == M_GFXTASK) { + if ((sched->curRSPTask != NULL) && (sched->curRSPTask->list.t.type == M_GFXTASK)) { if (!(HW_REG(SP_STATUS_REG, u32) & SP_STATUS_HALT)) { // GRAPH SP tries to stop osSyncPrintf("GRAPH SP止めようとします\n"); @@ -227,7 +227,8 @@ s32 Sched_TaskCheckFramebuffers(SchedContext* sched, OSScTask* task) { void* nextFB = osViGetNextFramebuffer(); void* curFB = osViGetCurrentFramebuffer(); - if (task == NULL || sched->pendingSwapBuf1 != NULL || (curFB == TASK_FRAMEBUFFER(task)->fb1 && curFB != nextFB)) { + if ((task == NULL) || (sched->pendingSwapBuf1 != NULL) || + ((curFB == TASK_FRAMEBUFFER(task)->fb1) && (curFB != nextFB))) { return 0; } return 1; @@ -241,7 +242,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 OSScTask* gfxTask = sched->gfxListHead; OSScTask* audioTask = sched->audioListHead; - if ((ret & OS_SC_SP) && sched->audioListHead != NULL) { + if ((ret & OS_SC_SP) && (sched->audioListHead != NULL)) { *spTask = audioTask; ret &= ~OS_SC_SP; sched->audioListHead = sched->audioListHead->next; @@ -249,7 +250,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 sched->audioListTail = NULL; } } else if (gfxTask != NULL) { - if (gfxTask->state & OS_SC_YIELDED || !(gfxTask->flags & OS_SC_NEEDS_RDP)) { + if ((gfxTask->state & OS_SC_YIELDED) || !(gfxTask->flags & OS_SC_NEEDS_RDP)) { if (ret & OS_SC_SP) { *spTask = gfxTask; ret &= ~OS_SC_SP; @@ -259,7 +260,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 } } } else if (ret == (OS_SC_SP | OS_SC_DP)) { - if (TASK_FRAMEBUFFER(gfxTask) == NULL || Sched_TaskCheckFramebuffers(sched, gfxTask)) { + if ((TASK_FRAMEBUFFER(gfxTask) == NULL) || Sched_TaskCheckFramebuffers(sched, gfxTask)) { *spTask = *dpTask = gfxTask; ret &= ~(OS_SC_SP | OS_SC_DP); sched->gfxListHead = sched->gfxListHead->next; @@ -275,7 +276,7 @@ s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s3 void Sched_TaskUpdateFramebuffer(SchedContext* sched, OSScTask* task) { sched->pendingSwapBuf1 = TASK_FRAMEBUFFER(task); - if (sched->curBuf != NULL && sched->curBuf->updateRate2 > 0) { + if ((sched->curBuf != NULL) && (sched->curBuf->updateRate2 > 0)) { return; } Sched_RetraceUpdateFramebuffer(sched, sched->pendingSwapBuf1); @@ -314,7 +315,7 @@ void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask) { return; } // Write back the data cache to ensure imminent SP DMA does not miss anything - if (spTask->list.t.type != M_AUDTASK && !(spTask->state & OS_SC_YIELDED)) { + if ((spTask->list.t.type != M_AUDTASK) && !(spTask->state & OS_SC_YIELDED)) { osWritebackDCacheAll(); } spTask->state &= ~(OS_SC_YIELD | OS_SC_YIELDED); @@ -327,9 +328,11 @@ void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask) { case M_AUDTASK: sRSPAudioStartTime = time; break; + case M_GFXTASK: sRSPGFXStartTime = time; break; + default: if (1) {} sRSPOtherStartTime = time; @@ -366,7 +369,7 @@ void Sched_HandleEntry(SchedContext* sched) { Sched_QueueTask(sched, msg); } // If there is an audio task pending and an RSP task is running, yield the current task. - if (sched->audioListHead != NULL && sched->curRSPTask != NULL) { + if ((sched->audioListHead != NULL) && (sched->curRSPTask != NULL)) { Sched_Yield(sched); return; } @@ -421,9 +424,11 @@ void Sched_HandleRSPDone(SchedContext* sched) { case M_AUDTASK: gRSPAudioTotalTime += time - sRSPAudioStartTime; break; + case M_GFXTASK: sRSPGFXTotalTime += time - sRSPGFXStartTime; break; + default: if (1) {} sRSPOtherTotalTime += time - sRSPOtherStartTime; @@ -555,15 +560,19 @@ void Sched_ThreadEntry(void* arg) { case RDP_AUDIO_CANCEL_MSG: Sched_HandleAudioCancel(sched); continue; + case RSP_GFX_CANCEL_MSG: Sched_HandleGfxCancel(sched); continue; + case ENTRY_MSG: Sched_HandleEntry(sched); continue; + case RSP_DONE_MSG: Sched_HandleRSPDone(sched); continue; + case RDP_DONE_MSG: Sched_HandleRDPDone(sched); continue; @@ -573,9 +582,11 @@ void Sched_ThreadEntry(void* arg) { case OS_SC_RETRACE_MSG: Sched_HandleRetrace(sched); continue; + case OS_SC_PRE_NMI_MSG: Sched_HandleReset(sched); continue; + case OS_SC_NMI_MSG: Sched_HandleStop(sched); continue; diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c index 020edcf27..aa5c0325d 100644 --- a/src/code/z_DLF.c +++ b/src/code/z_DLF.c @@ -46,7 +46,7 @@ void Overlay_FreeGameState(GameStateOverlay* overlayEntry) { s32 var_v0; if (overlayEntry->loadedRamAddr != NULL) { - var_v0 = overlayEntry->unk_28 != 0 ? -1 : 0; + var_v0 = (overlayEntry->unk_28 != 0) ? -1 : 0; if (var_v0 == 0) { overlayEntry->unk_14 = (uintptr_t)( (overlayEntry->unk_14 != NULL) diff --git a/src/code/z_actor.c b/src/code/z_actor.c index c7e2c4574..82ff8ddd9 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -476,6 +476,7 @@ void Actor_DrawZTarget(TargetContext* targetCtx, PlayState* play) { Actor* actor = targetCtx->targetedActor; OPEN_DISPS(play->state.gfxCtx); + if (targetCtx->unk48 != 0) { TargetContextEntry* entry; s16 alpha = 255; @@ -598,10 +599,10 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS targetCtx->unk_94 = sp68; } - if (targetCtx->unk8C != 0) { + if (targetCtx->unk8C != NULL) { sp68 = targetCtx->unk8C; targetCtx->unk8C = NULL; - } else if (actor != 0) { + } else if (actor != NULL) { sp68 = actor; } @@ -640,7 +641,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS Target_SetColors(targetCtx, sp68, category, play); } - if (actor != NULL && targetCtx->unk4B == 0) { + if ((actor != NULL) && (targetCtx->unk4B == 0)) { Actor_GetProjectedPos(play, &actor->focus.pos, &projectedPos, &invW); if ((projectedPos.z <= 0.0f) || (fabsf(projectedPos.x * invW) >= 1.0f) || (fabsf(projectedPos.y * invW) >= 1.0f)) { @@ -2028,10 +2029,10 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 x PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000)) && (Player_GetExplosiveHeld(player) <= PLAYER_EXPLOSIVE_NONE)) { if ((actor->xzDistToPlayer <= xzRange) && (fabsf(actor->playerHeightRel) <= fabsf(yRange))) { - if ((getItemId == GI_MASK_CIRCUS_LEADER || getItemId == GI_PENDANT_OF_MEMORIES || - getItemId == GI_DEED_LAND || - ((player->heldActor != NULL || actor == player->talkActor) && - (getItemId > GI_NONE && getItemId < GI_MAX))) || + if (((getItemId == GI_MASK_CIRCUS_LEADER) || (getItemId == GI_PENDANT_OF_MEMORIES) || + (getItemId == GI_DEED_LAND) || + (((player->heldActor != NULL) || (actor == player->talkActor)) && + ((getItemId > GI_NONE) && (getItemId < GI_MAX)))) || !(player->stateFlags1 & (PLAYER_STATE1_800 | PLAYER_STATE1_20000000))) { s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y; s32 absYawDiff = ABS_ALT(yawDiff); @@ -2386,12 +2387,12 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { } else { if (!Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) { Actor_Kill(actor); - } else if (((params->requiredActorFlag) && !(actor->flags & params->requiredActorFlag)) || - ((((!params->requiredActorFlag) != 0)) && + } else if ((params->requiredActorFlag && !(actor->flags & params->requiredActorFlag)) || + (((!params->requiredActorFlag) != 0) && (!(actor->flags & ACTOR_FLAG_100000) || ((actor->category == ACTORCAT_EXPLOSIVES) && (params->player->stateFlags1 & PLAYER_STATE1_200))) && - params->canFreezeCategory && (actor != params->talkActor) && - ((actor != params->player->heldActor)) && (actor->parent != ¶ms->player->actor))) { + params->canFreezeCategory && (actor != params->talkActor) && (actor != params->player->heldActor) && + (actor->parent != ¶ms->player->actor))) { CollisionCheck_ResetDamage(&actor->colChkInfo); } else { Math_Vec3f_Copy(&actor->prevPos, &actor->world.pos); @@ -3195,7 +3196,7 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1 } overlayEntry = &gActorOverlayTable[index]; - if (overlayEntry->vramStart != 0) { + if (overlayEntry->vramStart != NULL) { overlayEntry->numLoaded++; } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 7fac2a2b2..bd23308c3 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -7790,7 +7790,7 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) { break; case CAM_MODE_FOLLOWTARGET: - if (camera->target != NULL && camera->target->id != ACTOR_EN_BOOM) { + if ((camera->target != NULL) && (camera->target->id != ACTOR_EN_BOOM)) { sModeChangeFlags = CAM_CHANGE_MODE_FOLLOW_TARGET; } break; @@ -7807,6 +7807,9 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) { case CAM_MODE_HANG: sModeChangeFlags = CAM_CHANGE_MODE_4; break; + + default: + break; } // Process Current Camera Mode diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index 8bcd244bd..b7f07d14d 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -92,7 +92,8 @@ f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac) { * factors such as the ac collider's defense. */ s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo) { - if (at->actor != NULL && at->actor->id == ACTOR_EN_BOM && ac->actor != NULL && ac->actor->id == ACTOR_PLAYER) { + if ((at->actor != NULL) && (at->actor->id == ACTOR_EN_BOM) && (ac->actor != NULL) && + (ac->actor->id == ACTOR_PLAYER)) { return 8; } return atInfo->toucher.damage; @@ -1153,7 +1154,7 @@ s32 CollisionCheck_SetAT(PlayState* play, CollisionCheckContext* colCtxt, Collid } sATResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->colATCount >= ARRAY_COUNT(colCtxt->colAT)) { @@ -1179,7 +1180,7 @@ s32 CollisionCheck_SetAT_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co } sATResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->sacFlags & SAC_ON) { @@ -1213,7 +1214,7 @@ s32 CollisionCheck_SetAC(PlayState* play, CollisionCheckContext* colCtxt, Collid } sACResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->colACCount >= ARRAY_COUNT(colCtxt->colAC)) { @@ -1239,7 +1240,7 @@ s32 CollisionCheck_SetAC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co } sACResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->sacFlags & SAC_ON) { @@ -1273,7 +1274,7 @@ s32 CollisionCheck_SetOC(PlayState* play, CollisionCheckContext* colCtxt, Collid } sOCResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->colOCCount >= ARRAY_COUNT(colCtxt->colOC)) { @@ -1299,7 +1300,7 @@ s32 CollisionCheck_SetOC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Co } sOCResetFuncs[collider->shape](play, collider); - if (collider->actor != NULL && collider->actor->update == NULL) { + if ((collider->actor != NULL) && (collider->actor->update == NULL)) { return -1; } if (colCtxt->sacFlags & SAC_ON) { @@ -1523,7 +1524,7 @@ void CollisionCheck_RedBloodUnused(PlayState* play, Collider* collider, Vec3f* v void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos) { s32 flags = info->toucherFlags & TOUCH_SFX_NONE; - if (flags == TOUCH_SFX_NORMAL && collider->colType != COLTYPE_METAL) { + if ((flags == TOUCH_SFX_NORMAL) && (collider->colType != COLTYPE_METAL)) { EffectSsHitmark_SpawnFixedScale(play, 0, hitPos); if (collider->actor == NULL) { play_sound(NA_SE_IT_SHIELD_BOUND); @@ -1558,7 +1559,7 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll * Plays a hit sound effect for AT colliders attached to Player based on the AC element's elemType. */ s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo) { - if (at->actor != NULL && at->actor->category == ACTORCAT_PLAYER) { + if ((at->actor != NULL) && (at->actor->category == ACTORCAT_PLAYER)) { if (acInfo->elemType == ELEMTYPE_UNK0) { Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE); } else if (acInfo->elemType == ELEMTYPE_UNK1) { @@ -1652,7 +1653,7 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo return 0; } } - if ((ac->acFlags & AC_HARD) && at->actor != NULL && ac->actor != NULL) { + if ((ac->acFlags & AC_HARD) && (at->actor != NULL) && (ac->actor != NULL)) { CollisionCheck_SetBounce(at, ac); } if (!(acInfo->bumperFlags & BUMP_NO_AT_INFO)) { @@ -1683,8 +1684,8 @@ s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo acInfo->bumper.hitPos.y = hitPos->y; acInfo->bumper.hitPos.z = hitPos->z; } - if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && ac->colType != COLTYPE_METAL && ac->colType != COLTYPE_WOOD && - ac->colType != COLTYPE_HARD) { + if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && (ac->colType != COLTYPE_METAL) && (ac->colType != COLTYPE_WOOD) && + (ac->colType != COLTYPE_HARD)) { acInfo->bumperFlags |= BUMP_DRAW_HITMARK; } else { CollisionCheck_HitEffects(play, at, atInfo, ac, acInfo, hitPos); @@ -1719,7 +1720,7 @@ void CollisionCheck_AC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* co f32 overlapSize; f32 centerDist; - if (at->count > 0 && at->elements != NULL && ac->count > 0 && ac->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL) && (ac->count > 0) && (ac->elements != NULL)) { for (atElem = at->elements; atElem < &at->elements[at->count]; atElem++) { if (CollisionCheck_SkipTouch(&atElem->info)) { continue; @@ -1773,7 +1774,7 @@ void CollisionCheck_AC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCt f32 overlapSize; f32 centerDist; - if (at->count > 0 && at->elements != NULL && ac->dim.radius > 0 && ac->dim.height > 0) { + if ((at->count > 0) && (at->elements != NULL) && (ac->dim.radius > 0) && (ac->dim.height > 0)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -1822,7 +1823,7 @@ void CollisionCheck_AC_JntSphVsTris(PlayState* play, CollisionCheckContext* colC ColliderTrisElement* acElem; Vec3f hitPos; - if (at->count > 0 && at->elements != NULL && ac->count > 0 && ac->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL) && (ac->count > 0) && (ac->elements != NULL)) { for (atElem = at->elements; atElem < &at->elements[at->count]; atElem++) { if (CollisionCheck_SkipTouch(&atElem->info)) { continue; @@ -1858,7 +1859,7 @@ void CollisionCheck_AC_JntSphVsQuad(PlayState* play, CollisionCheckContext* colC Vec3f hitPos; ColliderJntSphElement* sphElem; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -1898,7 +1899,7 @@ void CollisionCheck_AC_JntSphVsSphere(PlayState* play, CollisionCheckContext* co f32 overlapSize; f32 centerDist; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -1943,7 +1944,7 @@ void CollisionCheck_AC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCt f32 centerDist; ColliderJntSphElement* sphElem; - if (ac->count > 0 && ac->elements != NULL && at->dim.radius > 0 && at->dim.height > 0) { + if ((ac->count > 0) && (ac->elements != NULL) && (at->dim.radius > 0) && (at->dim.height > 0)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -1994,7 +1995,7 @@ void CollisionCheck_AC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt, f32 overlapSize; f32 centerDist; - if (at->dim.radius > 0 && at->dim.height > 0 && ac->dim.radius > 0 && ac->dim.height > 0) { + if ((at->dim.radius > 0) && (at->dim.height > 0) && (ac->dim.radius > 0) && (ac->dim.height > 0)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2046,7 +2047,7 @@ void CollisionCheck_AC_CylVsTris(PlayState* play, CollisionCheckContext* colCtxt ColliderTrisElement* acElem; Vec3f hitPos; - if (at->dim.radius > 0 && at->dim.height > 0 && ac->count > 0 && ac->elements != NULL) { + if ((at->dim.radius > 0) && (at->dim.height > 0) && (ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2079,7 +2080,7 @@ void CollisionCheck_AC_CylVsQuad(PlayState* play, CollisionCheckContext* colCtxt ColliderCylinder* at = (ColliderCylinder*)colAT; ColliderQuad* ac = (ColliderQuad*)colAC; - if (at->dim.height > 0 && at->dim.radius > 0) { + if ((at->dim.height > 0) && (at->dim.radius > 0)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2119,7 +2120,7 @@ void CollisionCheck_AC_CylVsSphere(PlayState* play, CollisionCheckContext* colCt f32 overlapSize; f32 centerDist; - if (at->dim.radius > 0 && at->dim.height > 0) { + if ((at->dim.radius > 0) && (at->dim.height > 0)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2166,7 +2167,7 @@ void CollisionCheck_AC_TrisVsJntSph(PlayState* play, CollisionCheckContext* colC ColliderTrisElement* atElem; Vec3f hitPos; - if (ac->count > 0 && ac->elements != NULL && at->count > 0 && at->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL) && (at->count > 0) && (at->elements != NULL)) { for (acElem = ac->elements; acElem < &ac->elements[ac->count]; acElem++) { if (CollisionCheck_SkipBump(&acElem->info)) { continue; @@ -2204,7 +2205,7 @@ void CollisionCheck_AC_TrisVsCyl(PlayState* play, CollisionCheckContext* colCtxt ColliderCylinder* ac = (ColliderCylinder*)colAC; ColliderTrisElement* atElem; - if (ac->dim.radius > 0 && ac->dim.height > 0 && at->count > 0 && at->elements != NULL) { + if ((ac->dim.radius > 0) && (ac->dim.height > 0) && (at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2238,7 +2239,7 @@ void CollisionCheck_AC_TrisVsTris(PlayState* play, CollisionCheckContext* colCtx ColliderTris* ac = (ColliderTris*)colAC; ColliderTrisElement* acElem; - if (ac->count > 0 && ac->elements != NULL && at->count > 0 && at->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL) && (at->count > 0) && (at->elements != NULL)) { for (acElem = ac->elements; acElem < &ac->elements[ac->count]; acElem++) { if (CollisionCheck_SkipBump(&acElem->info)) { continue; @@ -2273,7 +2274,7 @@ void CollisionCheck_AC_TrisVsQuad(PlayState* play, CollisionCheckContext* colCtx ColliderQuad* ac = (ColliderQuad*)colAC; ColliderTrisElement* atElem; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2312,7 +2313,7 @@ void CollisionCheck_AC_TrisVsSphere(PlayState* play, CollisionCheckContext* colC ColliderSphere* ac = (ColliderSphere*)colAC; Vec3f hitPos; - if (at->count > 0 && at->elements != NULL) { + if ((at->count > 0) && (at->elements != NULL)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2344,7 +2345,7 @@ void CollisionCheck_AC_QuadVsJntSph(PlayState* play, CollisionCheckContext* colC ColliderQuad* at = (ColliderQuad*)colAT; ColliderJntSph* ac = (ColliderJntSph*)colAC; - if (ac->count > 0 && ac->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2385,7 +2386,7 @@ void CollisionCheck_AC_QuadVsCyl(PlayState* play, CollisionCheckContext* colCtxt ColliderQuad* at = (ColliderQuad*)colAT; ColliderCylinder* ac = (ColliderCylinder*)colAC; - if (ac->dim.height > 0 && ac->dim.radius > 0) { + if ((ac->dim.height > 0) && (ac->dim.radius > 0)) { if (CollisionCheck_SkipBump(&ac->info)) { return; } @@ -2431,7 +2432,7 @@ void CollisionCheck_AC_QuadVsTris(PlayState* play, CollisionCheckContext* colCtx ColliderTris* ac = (ColliderTris*)colAC; ColliderTrisElement* acElem; - if (ac->count > 0 && ac->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2546,7 +2547,7 @@ void CollisionCheck_AC_SphereVsJntSph(PlayState* play, CollisionCheckContext* co f32 overlapSize; f32 centerDist; - if (ac->count > 0 && ac->elements != NULL) { + if ((ac->count > 0) && (ac->elements != NULL)) { if (CollisionCheck_SkipTouch(&at->info)) { return; } @@ -2739,7 +2740,7 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCt ColliderJntSphElement* element; for (element = jntSph->elements; element < &jntSph->elements[jntSph->count]; element++) { - if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && element->info.acHitInfo != NULL && + if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) && !(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2758,7 +2759,7 @@ void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCt void CollisionCheck_SetCylHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) { ColliderCylinder* cylinder = (ColliderCylinder*)collider; - if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && cylinder->info.acHitInfo != NULL && + if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && (cylinder->info.acHitInfo != NULL) && !(cylinder->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2777,7 +2778,7 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt ColliderTrisElement* element; for (element = tris->elements; element < &tris->elements[tris->count]; element++) { - if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && element->info.acHitInfo != NULL && + if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) && !(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2796,7 +2797,7 @@ void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) { ColliderQuad* quad = (ColliderQuad*)collider; - if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && quad->info.acHitInfo != NULL && + if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && (quad->info.acHitInfo != NULL) && !(quad->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2812,7 +2813,7 @@ void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt void CollisionCheck_SetSphereHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider) { ColliderSphere* sphere = (ColliderSphere*)collider; - if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && sphere->info.acHitInfo != NULL && + if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && (sphere->info.acHitInfo != NULL) && !(sphere->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; @@ -2837,8 +2838,8 @@ void CollisionCheck_SetHitEffects(PlayState* play, CollisionCheckContext* colCtx for (col = &colCtxt->colAC[0]; col < &colCtxt->colAC[colCtxt->colACCount]; col++) { Collider* colAC = *col; - if (colAC != NULL && (colAC->acFlags & AC_ON)) { - if (colAC->actor != NULL && colAC->actor->update == NULL) { + if ((colAC != NULL) && (colAC->acFlags & AC_ON)) { + if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) { continue; } sColChkApplyFuncs[colAC->shape](play, colCtxt, colAC); @@ -2868,12 +2869,12 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider for (col = &colCtxt->colAC[0]; col < &colCtxt->colAC[colCtxt->colACCount]; col++) { Collider* colAC = *col; - if (colAC != NULL && (colAC->acFlags & AC_ON)) { - if (colAC->actor != NULL && colAC->actor->update == NULL) { + if ((colAC != NULL) && (colAC->acFlags & AC_ON)) { + if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) { continue; } - if ((colAC->acFlags & colAT->atFlags & AC_TYPE_ALL) && colAT != colAC) { - if (!(colAT->atFlags & AT_SELF) && colAT->actor != NULL && colAC->actor == colAT->actor) { + if ((colAC->acFlags & colAT->atFlags & AC_TYPE_ALL) && (colAT != colAC)) { + if (!(colAT->atFlags & AT_SELF) && (colAT->actor != NULL) && (colAC->actor == colAT->actor)) { continue; } sACVsFuncs[colAT->shape][colAC->shape](play, colCtxt, colAT, colAC); @@ -2891,15 +2892,15 @@ void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider void CollisionCheck_AT(PlayState* play, CollisionCheckContext* colCtxt) { Collider** col; - if (colCtxt->colATCount == 0 || colCtxt->colACCount == 0) { + if ((colCtxt->colATCount == 0) || (colCtxt->colACCount == 0)) { return; } for (col = &colCtxt->colAT[0]; col < &colCtxt->colAT[colCtxt->colATCount]; col++) { Collider* colAC = *col; - if (colAC != NULL && (colAC->atFlags & AT_ON)) { - if (colAC->actor != NULL && colAC->actor->update == NULL) { + if ((colAC != NULL) && (colAC->atFlags & AT_ON)) { + if ((colAC->actor != NULL) && (colAC->actor->update == NULL)) { continue; } CollisionCheck_AC(play, colCtxt, colAC); @@ -2958,7 +2959,8 @@ void CollisionCheck_SetOCvsOC(PlayState* play, Collider* left, ColliderInfo* lef right->ocFlags2 |= OC2_HIT_PLAYER; } - if (leftActor == NULL || rightActor == NULL || (left->ocFlags1 & OC1_NO_PUSH) || (right->ocFlags1 & OC1_NO_PUSH)) { + if ((leftActor == NULL) || (rightActor == NULL) || (left->ocFlags1 & OC1_NO_PUSH) || + (right->ocFlags1 & OC1_NO_PUSH)) { return; } @@ -3032,7 +3034,7 @@ void CollisionCheck_OC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* co ColliderJntSphElement* rightElem; f32 overlap; - if (left->count > 0 && left->elements != NULL && right->count > 0 && right->elements != NULL && + if ((left->count > 0) && (left->elements != NULL) && (right->count > 0) && (right->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON)) { for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) { @@ -3067,7 +3069,7 @@ void CollisionCheck_OC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCt ColliderJntSphElement* leftElem; f32 overlap; - if (left->count > 0 && left->elements != NULL && (left->base.ocFlags1 & OCELEM_ON) && + if ((left->count > 0) && (left->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON) && (right->info.ocElemFlags & OCELEM_ON)) { for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) { @@ -3096,7 +3098,7 @@ void CollisionCheck_OC_JntSphVsSphere(PlayState* play, CollisionCheckContext* co ColliderJntSphElement* leftElem; f32 overlap; - if (left->count > 0 && left->elements != NULL && (left->base.ocFlags1 & OCELEM_ON) && + if ((left->count > 0) && (left->elements != NULL) && (left->base.ocFlags1 & OCELEM_ON) && (right->base.ocFlags1 & OCELEM_ON) && (right->info.ocElemFlags & OCELEM_ON)) { for (leftElem = left->elements; leftElem < &left->elements[left->count]; leftElem++) { @@ -3252,11 +3254,11 @@ void CollisionCheck_OC(PlayState* play, CollisionCheckContext* colCtxt) { ColChkVsFunc vsFunc; for (left = colCtxt->colOC; left < colCtxt->colOC + colCtxt->colOCCount; left++) { - if (*left == NULL || CollisionCheck_SkipOC(*left)) { + if ((*left == NULL) || CollisionCheck_SkipOC(*left)) { continue; } for (right = left + 1; right < colCtxt->colOC + colCtxt->colOCCount; right++) { - if (*right == NULL || CollisionCheck_SkipOC(*right) || CollisionCheck_Incompatible(*left, *right)) { + if ((*right == NULL) || CollisionCheck_SkipOC(*right) || CollisionCheck_Incompatible(*left, *right)) { continue; } vsFunc = sOCVsFuncs[(*left)->shape][(*right)->shape]; @@ -3353,7 +3355,7 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt, at = info->acHit; atInfo = info->acHitInfo; - if (at != NULL && atInfo != NULL && collider != NULL && info != NULL) { + if ((at != NULL) && (atInfo != NULL) && (collider != NULL) && (info != NULL)) { damage = CollisionCheck_GetDamageAndEffectOnBumper(at, atInfo, collider, info, &effect); if (CollisionCheck_GetToucherDamage(at, atInfo, collider, info) != 0) { @@ -3373,7 +3375,7 @@ void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt, collider->actor->colChkInfo.damageEffect = effect; } if (!(collider->acFlags & AC_HARD) || - ((collider->acFlags & AC_HARD) && atInfo->toucher.dmgFlags == 0x20000000)) { + ((collider->acFlags & AC_HARD) && (atInfo->toucher.dmgFlags == 0x20000000))) { if (collider->actor->colChkInfo.damage < finalDamage) { collider->actor->colChkInfo.damage = finalDamage; } @@ -3388,7 +3390,7 @@ void CollisionCheck_ApplyDamageJntSph(PlayState* play, CollisionCheckContext* co ColliderJntSph* jntSph = (ColliderJntSph*)collider; s32 i; - if (jntSph->count > 0 && jntSph->elements != NULL) { + if ((jntSph->count > 0) && (jntSph->elements != NULL)) { for (i = 0; i < jntSph->count; i++) { CollisionCheck_ApplyDamage(play, colCtxt, &jntSph->base, &jntSph->elements[i].info); } @@ -3965,7 +3967,7 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a if (SQ(actorDotItemXZ) < (4.0f * SQXZ(itemStep) * radSqDiff)) { return 0; } - if (SQ(actorDotItemXZ) - (4.0f * SQXZ(itemStep) * radSqDiff) > zero) { + if ((SQ(actorDotItemXZ) - (4.0f * SQXZ(itemStep) * radSqDiff)) > zero) { intersect1 = intersect2 = 1; } else { intersect1 = 1; @@ -4005,12 +4007,12 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a } if (intersect2 == 0) { - if (frac1 < 0.0f || 1.0f < frac1) { + if ((frac1 < 0.0f) || (1.0f < frac1)) { return 0; } } else { - test1 = (frac1 < 0.0f || 1.0f < frac1); - test2 = (frac2 < 0.0f || 1.0f < frac2); + test1 = (frac1 < 0.0f) || (1.0f < frac1); + test2 = (frac2 < 0.0f) || (1.0f < frac2); if (test1 && test2) { return 0; @@ -4024,14 +4026,14 @@ s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* a } if ((intersect1 != 0) && - ((frac1 * itemStep.y + actorToItem.y < 0.0f) || (height < frac1 * itemStep.y + actorToItem.y))) { + (((frac1 * itemStep.y + actorToItem.y) < 0.0f) || (height < (frac1 * itemStep.y + actorToItem.y)))) { intersect1 = 0; } if ((intersect2 != 0) && - ((frac2 * itemStep.y + actorToItem.y < 0.0f) || (height < frac2 * itemStep.y + actorToItem.y))) { + (((frac2 * itemStep.y + actorToItem.y) < 0.0f) || (height < (frac2 * itemStep.y + actorToItem.y)))) { intersect2 = 0; } - if (intersect1 == 0 && intersect2 == 0) { + if ((intersect1 == 0) && (intersect2 == 0)) { return 0; } else if ((intersect1 != 0) && (intersect2 != 0)) { out1->x = frac1 * itemStep.x + actorToItem.x + actorPos->x; diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index 5e93e1187..5565bc876 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -142,6 +142,7 @@ void FireObj_Draw(PlayState* play, FireObj* fire) { Vec3s vec; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (fire->timer * -20) % 512U, 32, 128)); diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index c6c1501ba..c9bea1669 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -16,14 +16,14 @@ s16 sBeatingHeartsDDEnv[3]; s16 sHeartsDDPrim[2][3]; s16 sHeartsDDEnv[2][3]; -TexturePtr HeartTextures[] = { +TexturePtr sHeartTextures[] = { gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, }; -TexturePtr HeartDDTextures[] = { +TexturePtr sHeartDDTextures[] = { gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, @@ -283,7 +283,7 @@ void LifeMeter_Draw(PlayState* play) { if (i < fullHeartCount) { heartTex = gHeartFullTex; } else if (i == fullHeartCount) { - heartTex = HeartTextures[fractionHeartCount]; + heartTex = sHeartTextures[fractionHeartCount]; } else { heartTex = gHeartEmptyTex; } @@ -323,7 +323,7 @@ void LifeMeter_Draw(PlayState* play) { if (i < fullHeartCount) { heartTex = gDefenseHeartFullTex; } else if (i == fullHeartCount) { - heartTex = HeartDDTextures[fractionHeartCount]; + heartTex = sHeartDDTextures[fractionHeartCount]; } else { heartTex = gDefenseHeartEmptyTex; } diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 534ec6dfc..e82c3a9b2 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -190,12 +190,12 @@ void Lights_BindDirectional(Lights* lights, LightParams* params, void* unused) { * available in the Lights group. This is at most 7 slots for a new group, but could be less. */ void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayState* play) { - static LightsPosBindFunc posBindFuncs[] = { + static LightsPosBindFunc sPosBindFuncs[] = { Lights_BindPoint, (LightsPosBindFunc)Lights_BindDirectional, Lights_BindPoint, }; - static LightsBindFunc dirBindFuncs[] = { + static LightsBindFunc sDirBindFuncs[] = { Lights_BindPointWithReference, (LightsBindFunc)Lights_BindDirectional, Lights_BindPointWithReference, @@ -204,12 +204,12 @@ void Lights_BindAll(Lights* lights, LightNode* listHead, Vec3f* refPos, PlayStat if (listHead != NULL) { if ((refPos == NULL) && (lights->enablePosLights == 1)) { do { - posBindFuncs[listHead->info->type](lights, &listHead->info->params, play); + sPosBindFuncs[listHead->info->type](lights, &listHead->info->params, play); listHead = listHead->next; } while (listHead != NULL); } else { do { - dirBindFuncs[listHead->info->type](lights, &listHead->info->params, refPos); + sDirBindFuncs[listHead->info->type](lights, &listHead->info->params, refPos); listHead = listHead->next; } while (listHead != NULL); } @@ -338,7 +338,7 @@ Lights* Lights_NewAndDraw(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; - lights->enablePosLights = 0; + lights->enablePosLights = false; lights->numLights = numLights; for (i = 0; i < numLights; i++) { @@ -363,7 +363,7 @@ Lights* Lights_New(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 ambient lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; - lights->enablePosLights = 0; + lights->enablePosLights = false; lights->numLights = 0; return lights; diff --git a/src/code/z_play.c b/src/code/z_play.c index dd06a461e..dade44cf6 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1508,7 +1508,7 @@ void Play_Main(GameState* thisx) { } s32 Play_InCsMode(PlayState* this) { - return (this->csCtx.state != 0) || Player_InCsMode(this); + return (this->csCtx.state != CS_STATE_IDLE) || Player_InCsMode(this); } f32 Play_GetFloorSurfaceImpl(PlayState* this, MtxF* mtx, CollisionPoly** poly, s32* bgId, Vec3f* pos) { diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index f7ccd5230..44b1fd986 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -257,7 +257,7 @@ void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) { for (i = 0; i < ARRAY_COUNT(arg1->unk_04); i++, temp_v1++) { // Can't be `temp_v1->alpha != 0` if (temp_v1->alpha) { - phi_a1 = temp_v1->unk_00 == 3 ? (255 / 3) : (255 / 5); + phi_a1 = (temp_v1->unk_00 == 3) ? (255 / 3) : (255 / 5); if (phi_a1 >= temp_v1->alpha) { temp_v1->alpha = 0; } else { @@ -369,13 +369,13 @@ void func_80122F28(Player* player) { s32 func_80122F9C(PlayState* play) { Player* player = GET_PLAYER(play); - return (player->stateFlags2 & PLAYER_STATE2_80000) && player->unk_AE7 == 2; + return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 2); } s32 func_80122FCC(PlayState* play) { Player* player = GET_PLAYER(play); - return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 1 || player->unk_AE7 == 3); + return (player->stateFlags2 & PLAYER_STATE2_80000) && ((player->unk_AE7 == 1) || (player->unk_AE7 == 3)); } void func_8012300C(PlayState* play, s32 arg1) { @@ -1363,12 +1363,12 @@ s32 func_80123F2C(PlayState* play, s32 ammo) { } s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 yRange) { - Player* this = GET_PLAYER(play); + Player* player = GET_PLAYER(play); Vec3f diff; s32 pad; - if ((this->heldItemAction == PLAYER_IA_STICK) && (this->unk_B28 != 0)) { - Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff); + if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) { + Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, pos, &diff); return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange); } diff --git a/src/code/z_room.c b/src/code/z_room.c index 89cf47935..9bc6e12ee 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -99,7 +99,7 @@ void Room_DrawCullable(PlayState* play, Room* room, u32 flags) { gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD); } - if ((room->enablePosLights != 0) || (MREG(93) != 0)) { + if (room->enablePosLights || (MREG(93) != 0)) { gSPSetGeometryMode(POLY_OPA_DISP++, G_LIGHTING_POSITIONAL); gSPSetGeometryMode(POLY_XLU_DISP++, G_LIGHTING_POSITIONAL); } diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 09897fbb9..05a3c331e 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -128,7 +128,7 @@ Gfx* SubS_DrawTransformFlex(PlayState* play, void** skeleton, Vec3s* jointTable, newDlist = rootLimb->dList; limbDList = rootLimb->dList; - if (overrideLimbDraw == NULL || !overrideLimbDraw(play, 1, &newDlist, &pos, &rot, actor, &gfx)) { + if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, 1, &newDlist, &pos, &rot, actor, &gfx)) { Matrix_TranslateRotateZYX(&pos, &rot); Matrix_Push(); @@ -1179,7 +1179,7 @@ Actor* SubS_FindActor(PlayState* play, Actor* actorListStart, u8 actorCategory, actor = play->actorCtx.actorLists[actorCategory].first; } - while (actor != NULL && actorId != actor->id) { + while ((actor != NULL) && (actorId != actor->id)) { actor = actor->next; } @@ -1503,10 +1503,10 @@ Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart actorIter = play->actorCtx.actorLists[actorCategory].first; } - while (actorIter != NULL && - (actorId != actorIter->id || - (actorId == actorIter->id && - (verifyActor == NULL || (verifyActor != NULL && !verifyActor(play, actor, actorIter, verifyData)))))) { + while ((actorIter != NULL) && + ((actorId != actorIter->id) || + ((actorId == actorIter->id) && + ((verifyActor == NULL) || ((verifyActor != NULL) && !verifyActor(play, actor, actorIter, verifyData)))))) { actorIter = actorIter->next; } diff --git a/src/libultra/io/pfsfilestate.c b/src/libultra/io/pfsfilestate.c index a555199fc..f06c8d937 100644 --- a/src/libultra/io/pfsfilestate.c +++ b/src/libultra/io/pfsfilestate.c @@ -34,7 +34,7 @@ s32 osPfsFileState(OSPfs* pfs, s32 fileNo, OSPfsState* state) { return ret; } - if (dir.company_code == 0 || dir.game_code == 0) { + if ((dir.company_code == 0) || (dir.game_code == 0)) { return PFS_ERR_INVALID; } diff --git a/src/libultra/os/seteventmesg.c b/src/libultra/os/seteventmesg.c index 8be2ff9e2..26e837fcf 100644 --- a/src/libultra/os/seteventmesg.c +++ b/src/libultra/os/seteventmesg.c @@ -16,7 +16,7 @@ void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m) { es->message = m; if (e == 14) { - if (__osShutdown != 0 && D_80097F10 == 0) { + if ((__osShutdown != 0) && (D_80097F10 == 0)) { osSendMesg(mq, m, OS_MESG_NOBLOCK); } D_80097F10 = 1; diff --git a/src/libultra/rmon/xldtob.c b/src/libultra/rmon/xldtob.c index e943e51e2..66c058396 100644 --- a/src/libultra/rmon/xldtob.c +++ b/src/libultra/rmon/xldtob.c @@ -61,7 +61,7 @@ void _Ldtob(_Pft* args, u8 type) { if (args->prec < 0) { args->prec = 6; - } else if (args->prec == 0 && (type == 'g' || type == 'G')) { + } else if ((args->prec == 0) && ((type == 'g') || (type == 'G'))) { args->prec = 1; } err = _Ldunscale(&exp, (_Pft*)args); @@ -101,7 +101,7 @@ void _Ldtob(_Pft* args, u8 type) { gen = 0x13; } *ptr++ = '0'; - while (gen > 0 && 0 < val) { + while ((gen > 0) && (0 < val)) { lo = val; if ((gen -= 8) > 0) { val = (val - lo) * 1.0e8; @@ -124,12 +124,12 @@ void _Ldtob(_Pft* args, u8 type) { --gen, --exp; } - nsig = ((type == 'f') ? exp + 1 : ((type == 'e' || type == 'E') ? 1 : 0)) + args->prec; + nsig = ((type == 'f') ? exp + 1 : (((type == 'e') || (type == 'E')) ? 1 : 0)) + args->prec; if (gen < nsig) { nsig = gen; } if (nsig > 0) { - if (nsig < gen && ptr[nsig] > '4') { + if ((nsig < gen) && (ptr[nsig] > '4')) { drop = '9'; } else { drop = '0'; @@ -178,7 +178,7 @@ void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp) { p = (u8*)"0"; } - if (code == 'f' || ((code == 'g' || code == 'G') && (-4 <= xexp) && (xexp < px->prec))) { /* 'f' format */ + if ((code == 'f') || (((code == 'g') || (code == 'G')) && (-4 <= xexp) && (xexp < px->prec))) { /* 'f' format */ ++xexp; /* change to leading digit count */ if (code != 'f') { /* fixup for 'g' */ if (!(px->flags & FLAGS_HASH) && nsig < px->prec) { @@ -225,8 +225,8 @@ void _Genld(_Pft* px, u8 code, u8* p, s16 nsig, s16 xexp) { px->n1 += nsig; px->nz1 = px->prec - nsig; } - } else { /* 'e' format */ - if (code == 'g' || code == 'G') { /* fixup for 'g' */ + } else { /* 'e' format */ + if ((code == 'g') || (code == 'G')) { /* fixup for 'g' */ if (nsig < px->prec) { px->prec = nsig; } diff --git a/src/libultra/rmon/xlitob.c b/src/libultra/rmon/xlitob.c index f200e01a4..6c53ee094 100644 --- a/src/libultra/rmon/xlitob.c +++ b/src/libultra/rmon/xlitob.c @@ -27,13 +27,13 @@ void _Litob(_Pft* args, u8 type) { num = -num; } - if (num != 0 || args->prec != 0) { + if ((num != 0) || (args->prec != 0)) { buff[--idx] = numMap[num % base]; } args->v.ll = num / base; - while (args->v.ll > 0 && idx > 0) { + while ((args->v.ll > 0) && (idx > 0)) { quotrem = lldiv(args->v.ll, base); args->v.ll = quotrem.quot; buff[--idx] = numMap[quotrem.rem]; @@ -47,7 +47,7 @@ void _Litob(_Pft* args, u8 type) { args->nz0 = args->prec - args->n1; } - if (args->prec < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { + if ((args->prec < 0) && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { idx = args->width - args->n0 - args->nz0 - args->n1; if (idx > 0) { args->nz0 += idx; diff --git a/src/libultra/rmon/xprintf.c b/src/libultra/rmon/xprintf.c index 813520f01..6caac436f 100644 --- a/src/libultra/rmon/xprintf.c +++ b/src/libultra/rmon/xprintf.c @@ -42,7 +42,7 @@ int _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap) { unsigned char ac[0x20]; s = fmt; - while ((c = *s) != 0 && c != '%') { + while (((c = *s) != 0) && (c != '%')) { s++; } _PROUT((char*)fmt, s - fmt); diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c index a3608277f..3840ec62b 100644 --- a/src/libultra/voice/voicegetstatus.c +++ b/src/libultra/voice/voicegetstatus.c @@ -37,7 +37,7 @@ s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status) { *status = header.status; if (ret == 0) { - if (header.typeh == 0 && header.typel == 1) { + if ((header.typeh == 0) && (header.typel == 1)) { if (header.status & 4) { ret = CONT_ERR_CONTRFAIL; } diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index e06d51313..c7bff97f2 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -129,7 +129,7 @@ void ArmsHook_AttachHookToActor(ArmsHook* this, Actor* actor) { void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((this->actor.parent == NULL) || (!Player_IsHoldingHookshot(player))) { + if ((this->actor.parent == NULL) || !Player_IsHoldingHookshot(player)) { ArmsHook_DetachHookFromActor(this); Actor_Kill(&this->actor); return; @@ -138,7 +138,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { func_800B8F98(&player->actor, NA_SE_IT_HOOKSHOT_CHAIN - SFX_FLAG); ArmsHook_CheckForCancel(this); - if (this->timer != 0 && (this->collider.base.atFlags & AT_HIT) && + if ((this->timer != 0) && (this->collider.base.atFlags & AT_HIT) && (this->collider.info.atHitInfo->elemType != ELEMTYPE_UNK4)) { Actor* touchedActor = this->collider.base.at; @@ -191,12 +191,10 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { } else { if (this->actor.child != NULL) { velocity = 30.0f; + } else if (grabbed != NULL) { + velocity = 50.0f; } else { - if (grabbed != NULL) { - velocity = 50.0f; - } else { - velocity = 200.0f; - } + velocity = 200.0f; } phi_f16 = bodyDistDiff - velocity; if (bodyDistDiff <= velocity) { @@ -245,7 +243,7 @@ void ArmsHook_Shoot(ArmsHook* this, PlayState* play) { sp60.z = this->unk1EC.z - (this->unk1E0.z - this->unk1EC.z); if (BgCheck_EntityLineTest1(&play->colCtx, &sp60, &this->unk1E0, &posResult, &poly, true, true, true, true, &bgId) && - (func_800B90AC(play, &this->actor, poly, bgId, &posResult) == 0 || + (!func_800B90AC(play, &this->actor, poly, bgId, &posResult) || BgCheck_ProjectileLineTest(&play->colCtx, &sp60, &this->unk1E0, &posResult, &poly, true, true, true, true, &bgId))) { f32 nx = COLPOLY_GET_NORMAL(poly->normal.x); diff --git a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c index 7af684201..efa7f04c4 100644 --- a/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c +++ b/src/overlays/actors/ovl_Arrow_Fire/z_arrow_fire.c @@ -249,6 +249,7 @@ void ArrowFire_Draw(Actor* thisx, PlayState* play) { Actor* transform = (arrow->unk_261 & 2) ? &this->actor : &arrow->actor; OPEN_DISPS(play->state.gfxCtx); + Matrix_Translate(transform->world.pos.x, transform->world.pos.y, transform->world.pos.z, MTXMODE_NEW); Matrix_RotateYS(transform->shape.rot.y, MTXMODE_APPLY); Matrix_RotateXS(transform->shape.rot.x, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c index 18e2eb5d0..0391925ae 100644 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c @@ -202,24 +202,28 @@ void BgAstrBombwall_Draw(Actor* thixs, PlayState* play) { Gfx* opa; OPEN_DISPS(play->state.gfxCtx); + opa = POLY_OPA_DISP; gSPDisplayList(&opa[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&opa[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&opa[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&opa[3], object_astr_obj_DL_002380); POLY_OPA_DISP = &opa[4]; + CLOSE_DISPS(play->state.gfxCtx); } { Gfx* xlu; OPEN_DISPS(play->state.gfxCtx); + xlu = POLY_XLU_DISP; gSPDisplayList(&xlu[0], gSetupDLs[SETUPDL_25]); gSPMatrix(&xlu[1], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSetGeometryMode(&xlu[2], G_LIGHTING_POSITIONAL); gSPDisplayList(&xlu[3], object_astr_obj_DL_0022E0); POLY_XLU_DISP = &xlu[4]; + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c index 22998a34e..d8c39a098 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c @@ -191,11 +191,13 @@ void BgCtowerGear_Draw(Actor* thisx, PlayState* play) { void BgCtowerGear_DrawOrgan(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Opa(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++, gClockTowerOrganDL); Gfx_SetupDL25_Xlu(play->state.gfxCtx); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gClockTowerOrganPipesDL); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c index 67703f0cd..be3c9cb47 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c @@ -53,21 +53,20 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { u32 inCsMode = Player_InCsMode(play); for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) { - if (actor->id == ACTOR_BG_F40_SWITCH && actor->room == this->dyna.actor.room && actor->update != NULL) { + if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && + (actor->update != NULL)) { actorAsSwitch = (BgF40Switch*)actor; actorAsSwitch->wasPressed = actorAsSwitch->isPressed; isPressed = DynaPolyActor_IsSwitchPressed(&actorAsSwitch->dyna); - if (actorAsSwitch->isPressed && actorAsSwitch->actionFunc == BgF40Switch_IdlePressed) { + if (actorAsSwitch->isPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdlePressed)) { // Switch is fully pressed - if there's nothing keeping it pressed, wait a short time before // reverting to unpressed state. if (isPressed || inCsMode) { actorAsSwitch->switchReleaseDelay = 6; + } else if (actorAsSwitch->switchReleaseDelay > 0) { + actorAsSwitch->switchReleaseDelay--; } else { - if (actorAsSwitch->switchReleaseDelay > 0) { - actorAsSwitch->switchReleaseDelay--; - } else { - actorAsSwitch->isPressed = isPressed; - } + actorAsSwitch->isPressed = isPressed; } } else { // No delay when pressing switch, or releasing from a not-fully-pressed state. @@ -75,9 +74,9 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { } if (actorAsSwitch->isPressed) { switchFlag = BGF40SWITCH_GET_SWITCHFLAG(&actorAsSwitch->dyna.actor); - if (switchFlag >= 0 && switchFlag < 0x80) { + if ((switchFlag >= 0) && (switchFlag < 0x80)) { pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] |= 1 << (switchFlag & 0x1F); - if (!actorAsSwitch->wasPressed && actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed && + if (!actorAsSwitch->wasPressed && (actorAsSwitch->actionFunc == BgF40Switch_IdleUnpressed) && !Flags_GetSwitch(play, switchFlag)) { actorAsSwitch->isInitiator = true; } @@ -86,9 +85,10 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { } } for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) { - if (actor->id == ACTOR_BG_F40_SWITCH && actor->room == this->dyna.actor.room && actor->update != 0) { + if ((actor->id == ACTOR_BG_F40_SWITCH) && (actor->room == this->dyna.actor.room) && + (actor->update != NULL)) { switchFlag = BGF40SWITCH_GET_SWITCHFLAG(actor); - if (switchFlag >= 0 && switchFlag < 0x80 && Flags_GetSwitch(play, switchFlag) && + if ((switchFlag >= 0) && (switchFlag < 0x80) && Flags_GetSwitch(play, switchFlag) && !(pressedSwitchFlags[(switchFlag & ~0x1F) >> 5] & (1 << (switchFlag & 0x1F)))) { Flags_UnsetSwitch(play, switchFlag); } diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c index 7bddd548f..942a544ff 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c @@ -1019,7 +1019,7 @@ void func_80A9D61C(Actor* thisx, PlayState* play) { for (i = 0; i < D_80A9E028.count; i++) { unkStruct1 = &D_80A9E028.unk_0000[i]; - if (unkStruct1->unk_34 != 5 && unkStruct1->unk_34 != 4) { + if ((unkStruct1->unk_34 != 5) && (unkStruct1->unk_34 != 4)) { sp68.x = unkStruct1->unk_14.x + this->dyna.actor.home.pos.x; sp68.y = unkStruct1->unk_14.y + this->unk_16C; sp68.z = unkStruct1->unk_14.z + this->dyna.actor.home.pos.z; diff --git a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c index 27e5d2fee..15a677c29 100644 --- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c +++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c @@ -121,7 +121,7 @@ void func_80AC4C34(BgIcefloe* this, PlayState* play) { WaterBox* water; this->timer--; - if (this->timer == 0 || + if ((this->timer == 0) || !WaterBox_GetSurface1_2(play, &play->colCtx, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.z, &this->dyna.actor.home.pos.y, &water)) { func_80AC4CF0(this); diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c index f853fdfc5..4646b8d45 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c @@ -151,7 +151,7 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { this->collider.base.acFlags &= ~AC_HIT; } - if (wasHit && sFirstHitBgIkanaDharma == NULL) { + if (wasHit && (sFirstHitBgIkanaDharma == NULL)) { sFirstHitBgIkanaDharma = this2; Flags_SetSwitch(play, BGIKANADHARMA_GET_SWITCHFLAG(&this->dyna.actor)); tempAngle1 = BINANG_ADD(this->dyna.actor.yawTowardsPlayer, 0x8000); @@ -160,8 +160,8 @@ void BgIkanaDharma_WaitForHit(BgIkanaDharma* this, PlayState* play) { this->dyna.actor.speed = 20.0f; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_DARUMA_VANISH); BgIkanaDharma_SetupStartCutscene(this); - } else if ((this->dyna.actor.flags & ACTOR_FLAG_40) == ACTOR_FLAG_40 && sFirstHitBgIkanaDharma == NULL && - this->dyna.actor.xzDistToPlayer < 420.0f) { + } else if (CHECK_FLAG_ALL(this->dyna.actor.flags, ACTOR_FLAG_40) && (sFirstHitBgIkanaDharma == NULL) && + (this->dyna.actor.xzDistToPlayer < 420.0f)) { tempAngle1 = BINANG_SUB(this->dyna.actor.yawTowardsPlayer, player->actor.shape.rot.y); tempAngle1 = ABS_ALT(tempAngle1); diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index 3129d9411..8f86f7c12 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -259,7 +259,7 @@ void func_809542A0(BgIngate* this, PlayState* play) { } void func_80954340(BgIngate* this, PlayState* play) { - if (!DECR(this->unk16A)) { + if (DECR(this->unk16A) == 0) { if (this->timePath != NULL) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); this->timePath = &play->setupPathList[this->timePath->unk1]; diff --git a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c index ffb260bf3..b5eb3130a 100644 --- a/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c +++ b/src/overlays/actors/ovl_Bg_Open_Spot/z_bg_open_spot.c @@ -64,6 +64,7 @@ void BgOpenSpot_Draw(Actor* thisx, PlayState* play) { BgOpenSpot* this = (BgOpenSpot*)thisx; AnimatedMat_Draw(play, this->texScrolls); + OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c index 721d1de60..ddd012426 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -113,7 +113,7 @@ Actor* func_80C1D78C(PlayState* play) { } tempActor = foundActor->next; - if (tempActor == NULL || false) { + if ((tempActor == NULL) || false) { foundActor = NULL; break; } diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index 2d8175bda..86d57660f 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -160,7 +160,7 @@ Actor* func_80C1C8E8(PlayState* play) { } tempActor = foundActor->next; - if (tempActor == NULL || false) { + if ((tempActor == NULL) || false) { foundActor = NULL; break; } @@ -229,6 +229,9 @@ void func_80C1CAB0(DmAn* this, PlayState* play) { } } break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index aa3a8b0e6..e348d145a 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -163,7 +163,7 @@ void DmChar03_Draw(Actor* thisx, PlayState* play) { DmChar03* this = THIS; if (!this->unk_18E) { - if ((Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136)) && + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_136) && (play->csCtx.actorCues[Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_136)]->id != 1)) { Gfx_SetupDL25_Opa(play->state.gfxCtx); SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 9f8cd237f..139d80bc3 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -160,7 +160,7 @@ Actor* func_80C24838(PlayState* play) { } tempActor = foundActor->next; - if (tempActor == NULL || false) { + if ((tempActor == NULL) || false) { foundActor = NULL; break; } @@ -229,6 +229,9 @@ void func_80C24A00(DmGm* this, PlayState* play) { } } break; + + default: + break; } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index e7eba8fa2..88129eddc 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -348,7 +348,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { if (this->unk_166 != 0) { Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->slidingDoor.dyna.actor)); if (this->doorType != 5) { - gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; + DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1; Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { Actor_PlaySfx(&this->slidingDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index 0cf8d76d1..ef73ef2dd 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -63,6 +63,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dz = 1.0f; this->scalingFactor = 0.2f; break; + case EFF_DUST_TYPE_1: this->actionFunc = func_80918FE4; this->actor.draw = func_80919768; @@ -71,6 +72,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dz = 0.8f; this->scalingFactor = 0.5f; break; + case EFF_DUST_TYPE_SPIN_ATTACK_CHARGE: case EFF_DUST_TYPE_3: this->actionFunc = func_80919230; @@ -79,6 +81,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dx = 0.5f; this->scalingFactor = 15.0f; break; + case EFF_DUST_TYPE_4: this->actionFunc = func_80919230; this->actor.draw = func_809199FC; @@ -86,6 +89,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dx = 0.5f; this->scalingFactor = 10.0f; break; + case EFF_DUST_TYPE_5: this->actionFunc = func_80919230; this->actor.draw = func_809199FC; @@ -93,6 +97,7 @@ void EffDust_Init(Actor* thisx, PlayState* play) { this->dx = 0.5f; this->scalingFactor = 20.0f; break; + default: SystemArena_Free(this); break; @@ -171,7 +176,7 @@ void func_80919230(EffDust* this, PlayState* play) { s32 i; s32 j; - if (parent == NULL || parent->update == NULL || !(player->stateFlags1 & PLAYER_STATE1_1000)) { + if ((parent == NULL) || (parent->update == NULL) || !(player->stateFlags1 & PLAYER_STATE1_1000)) { if (this->life != 0) { this->life--; } else { @@ -235,6 +240,9 @@ void func_80919230(EffDust* this, PlayState* play) { this->initialPositions[i].z = 4000.0f * Math_CosS(theta); } break; + + default: + break; } this->distanceTraveled[i] = 0.0f; @@ -319,6 +327,7 @@ void func_809199FC(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); OPEN_DISPS(gfxCtx); + Gfx_SetupDL25_Opa(gfxCtx); gDPPipeSync(POLY_XLU_DISP++); diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 839022d2c..015e57008 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -232,8 +232,10 @@ s32 func_80BECFBC(EnAkindonuts* this) { case 3: Inventory_DeleteItem(ITEM_DEED_OCEAN, SLOT(ITEM_DEED_OCEAN)); return GI_RUPEE_HUGE; + + default: + return GI_NONE; } - return GI_NONE; } s32 func_80BED034(EnAkindonuts* this) { @@ -249,8 +251,10 @@ s32 func_80BED034(EnAkindonuts* this) { case 3: return GI_POTION_BLUE; + + default: + return GI_NONE; } - return GI_NONE; } void func_80BED090(PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index e4a83a6d0..5f0ef2edf 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -468,6 +468,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { if ((this->unk_262 = BgCheck_ProjectileLineTest(&play->colCtx, &this->actor.prevPos, &this->actor.world.pos, &sp9C, &this->actor.wallPoly, true, true, true, true, &spA8))) { + // `func_800B90AC` only returns a boolean, and does not process any code func_800B90AC(play, &this->actor, this->actor.wallPoly, spA8, &sp9C); Math_Vec3f_Copy(&this->actor.world.pos, &sp9C); this->actor.wallBgId = spA8; diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c index 5eb0d0351..8c2b4eb4b 100644 --- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c +++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c @@ -68,7 +68,7 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) { EnAttackNiw* this = THIS; EnNiw* parent = (EnNiw*)this->actor.parent; - if (this->actor.parent != NULL && this->actor.parent->update != NULL) { + if ((this->actor.parent != NULL) && (this->actor.parent->update != NULL)) { if (parent->attackNiwCount > 0) { parent->attackNiwCount--; } @@ -78,11 +78,11 @@ void EnAttackNiw_Destroy(Actor* thisx, PlayState* play) { /** * Summary: instead of using SkelAnime animations AttackNiw modifies head+wings directly to create animations * - * EnNiw has its own version of this function, probably copy paste since AttackNiw only uses two animationState (2/5) + * EnNiw has its own version of this function, probably copy paste since AttackNiw only uses two animIndex (2/5) */ -void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animationState) { +void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animIndex) { if (this->unkTimer24C == 0) { - if (animationState == 0) { + if (animIndex == 0) { this->targetBodyRotY = 0.0f; } else { this->targetBodyRotY = -10000.0f; @@ -92,7 +92,7 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati this->unkTimer24C = 3; if ((this->clearRotYToggleTimer % 2) == 0) { this->targetBodyRotY = 0.0f; - if (animationState == 0) { + if (animIndex == 0) { this->unkTimer24C = Rand_ZeroFloat(30.0f); } } @@ -102,7 +102,7 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati this->unkToggle28A++; this->unkToggle28A &= 1; - switch (animationState) { // only case 2 and 5 are ever called in AttackNiw + switch (animIndex) { // only case 2 and 5 are ever called in AttackNiw case NIW_ANIM_STILL: this->targetLeftWingRotZ = 0.0f; this->targetRightWingRotZ = 0.0f; @@ -156,6 +156,9 @@ void EnAttackNiw_AnimateWingHead(EnAttackNiw* this, PlayState* play, s16 animati this->targetLeftWingRotY = 10000.0f; } break; + + default: + break; } } diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 96a4fed1c..b6c5df58d 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1794,13 +1794,16 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { func_80A98DA4, func_80A98E48, &this->actor); } else { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sYoungerBrotherEyeTextures[this->unk_37E])); gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sYoungerBrotherBeltTextures[this->unk_380])); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, func_80A98DA4, func_80A98E48, &this->actor); + CLOSE_DISPS(play->state.gfxCtx); } OPEN_DISPS(play->state.gfxCtx); + if ((this->actor.depthInWater >= 28.0f) && (this->actor.speed > 0.5f)) { Matrix_Translate(this->unk_3B4.x, this->unk_3B4.y, this->unk_3B4.z, MTXMODE_NEW); Matrix_RotateYS(this->actor.shape.rot.y, MTXMODE_APPLY); @@ -1855,6 +1858,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_XLU_DISP++, gBeaverYoungerBrotherTailSplashDL); } } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 2653fb685..223bb1b24 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -261,11 +261,14 @@ s32 EnBba01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + CLOSE_DISPS(play->state.gfxCtx); } + if (limbIndex == BBA_LIMB_RIGHT_LOWER_ARM_ROOT) { Matrix_Translate(1500.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXS(this->enHy.headRot.y, MTXMODE_APPLY); @@ -297,8 +300,10 @@ void EnBba01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == BBA_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 887fb68d5..713410f23 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -657,6 +657,7 @@ void EnBigokuta_Draw(Actor* thisx, PlayState* play) { Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); + if ((this->actionFunc != EnBigokuta_PlayDeathEffects) || (this->timer != 0)) { Scene_SetRenderModeXlu(play, 0, 1); gfx = POLY_OPA_DISP; diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index 06bcd3b84..7c82b50b0 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -375,7 +375,6 @@ void EnBigpo_SpawnCutsceneStage4(EnBigpo* this, PlayState* play) { this->actor.shape.rot.y += this->rotVelocity; EnBigpo_RotateSpawnCutsceneFires(this); - if (1) {} for (i = 0; i < ARRAY_COUNT(this->fires); i++) { this->fires[i].pos.y += this->actor.velocity.y; } @@ -861,7 +860,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { // count the number of possible fires we can find (4 in vanilla) for (enemyPtr = GET_FIRST_ENEMY(play); enemyPtr != NULL; enemyPtr = enemyPtr->next) { - if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) { fireCount++; } } @@ -882,7 +881,7 @@ void EnBigpo_SelectRandomFireLocations(EnBigpo* this, PlayState* play) { randomIndex = ((s32)Rand_ZeroFloat(fireCount)) % fireCount; while (enemyPtr != NULL) { - if (enemyPtr->id == ACTOR_EN_BIGPO && enemyPtr->params == ENBIGPO_POSSIBLEFIRE) { + if ((enemyPtr->id == ACTOR_EN_BIGPO) && (enemyPtr->params == ENBIGPO_POSSIBLEFIRE)) { if (randomIndex == 0) { randomFirePo = (EnBigpo*)enemyPtr; randomFirePo->actor.params = ENBIGPO_CHOSENFIRE; @@ -1225,8 +1224,8 @@ s32 EnBigpo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* Gfx** gfx) { EnBigpo* this = THIS; // not fully invisible - if (!(this->mainColor.a != 0 && limbIndex != 7) || - (this->actionFunc == EnBigpo_BurnAwayDeath && this->idleTimer >= 2)) { + if ((this->mainColor.a == 0) || (limbIndex == 7) || + ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2))) { *dList = NULL; } return false; @@ -1416,6 +1415,7 @@ void EnBigpo_DrawCircleFlames(Actor* thisx, PlayState* play) { s32 i; mtfxPtr = Matrix_GetCurrent(); + OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Xlu(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index a32f2f410..b65b2c63d 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -122,6 +122,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { if (temp_s6 > 0) { OPEN_DISPS(play->state.gfxCtx); + Matrix_Push(); for (i = 0; i < temp_s6; i++) { f32 temp_f0 = (f32)i / temp_s6; @@ -150,6 +151,7 @@ void func_80867C8C(struct_80867BDC_a0* arg0, PlayState* play) { } Matrix_Pop(); gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -694,6 +696,7 @@ void EnBox_Draw(Actor* thisx, PlayState* play) { EnBox* this = THIS; OPEN_DISPS(play->state.gfxCtx); + if (this->unk_1F4.unk_10 != NULL) { this->unk_1F4.unk_10(&this->unk_1F4, play); } @@ -719,5 +722,6 @@ void EnBox_Draw(Actor* thisx, PlayState* play) { POLY_XLU_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnBox_PostLimbDraw, &this->dyna.actor, POLY_XLU_DISP); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index 8d841fdd2..1cda18c27 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -251,10 +251,12 @@ s32 EnCne01_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (limbIndex == CNE_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.headObjIndex].segment); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.headObjIndex].segment); *dList = gCneHeadBrownHairDL; gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelLowerObjIndex].segment); + CLOSE_DISPS(play->state.gfxCtx); } if (limbIndex == CNE_LIMB_HEAD) { @@ -289,8 +291,10 @@ void EnCne01_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro if (limbIndex == CNE_LIMB_RIGHT_FOOT) { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); gSegments[0x06] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->enHy.skelUpperObjIndex].segment); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index be946b872..91d243464 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -478,7 +478,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { Animation_PlayOnceSetSpeed(&this->knobDoor.skelAnime, sAnimations[this->knobDoor.animIndex], (player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f); if (this->unk_1A6 != 0) { - gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; + DUNGEON_KEY_COUNT(gSaveContext.mapIndex) = DUNGEON_KEY_COUNT(gSaveContext.mapIndex) - 1; Flags_SetSwitch(play, this->switchFlag); Actor_PlaySfx(&this->knobDoor.dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } @@ -501,7 +501,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f; player->doorActor = &this->knobDoor.dyna.actor; if (this->unk_1A6 != 0) { - if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { + if (DUNGEON_KEY_COUNT(gSaveContext.mapIndex) <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; this->knobDoor.dyna.actor.textId = 0x1802; } else { @@ -658,6 +658,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) { if (this->knobDoor.dyna.actor.objBankIndex == this->knobDoor.requiredObjBankIndex) { OPEN_DISPS(play->state.gfxCtx); + if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { Gfx_DrawDListOpa(play, gameplay_keep_DL_0221B8); } else { @@ -675,6 +676,7 @@ void EnDoor_Draw(Actor* thisx, PlayState* play) { if (this->unk_1A6) { Actor_DrawDoorLock(play, this->unk_1A6, 0); } + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_En_Drs/z_en_drs.c b/src/overlays/actors/ovl_En_Drs/z_en_drs.c index d5dc8d250..9fc28c952 100644 --- a/src/overlays/actors/ovl_En_Drs/z_en_drs.c +++ b/src/overlays/actors/ovl_En_Drs/z_en_drs.c @@ -110,9 +110,11 @@ void EnDrs_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot // after that it will no longer be rendered. if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_87_02) && (limbIndex == WEDDING_DRESS_MANNEQUIN_LIMB_MASK)) { OPEN_DISPS(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp].segment); gSPDisplayList(POLY_OPA_DISP++, &gMoonMaskDL); gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[temp2].segment); + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index 50e9303d7..06b4308a0 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -55,7 +55,7 @@ void func_80A61334(EnDyExtra* this, PlayState* play) { this->actor.velocity.y = 0.0f; } - if (this->unk14C == 0 && this->unk14A != 0) { + if ((this->unk14C == 0) && (this->unk14A != 0)) { this->unk14C = 0x32; this->actionFunc = func_80A613C8; } @@ -64,7 +64,7 @@ void func_80A61334(EnDyExtra* this, PlayState* play) { void func_80A613C8(EnDyExtra* this, PlayState* play) { Math_ApproachF(&this->actor.gravity, 0.0f, 0.1f, 0.005f); - if (this->unk14C == 0 || this->unk150 < 0.02f) { + if ((this->unk14C == 0) || (this->unk150 < 0.02f)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 8ee28ad7d..2bb7b6d0d 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -638,9 +638,9 @@ s32 func_8088DCA4(EnElf* this) { } void func_8088DD34(EnElf* this, PlayState* play) { - Player* refActor = GET_PLAYER(play); + Actor* playerActor = &GET_PLAYER(play)->actor; s32 pad; - Player* player2 = GET_PLAYER(play); + Player* player = GET_PLAYER(play); f32 heightDiff; SkelAnime_Update(&this->skelAnime); @@ -652,7 +652,7 @@ void func_8088DD34(EnElf* this, PlayState* play) { func_8088CBAC(this, play); if (this->fairyFlags & 0x800) { - this->unk_224.y = player2->bodyPartsPos[0].y; + this->unk_224.y = player->bodyPartsPos[0].y; } func_8088D8D0(this, &this->unk_224); @@ -672,17 +672,17 @@ void func_8088DD34(EnElf* this, PlayState* play) { return; } - heightDiff = this->actor.world.pos.y - refActor->actor.world.pos.y; + heightDiff = this->actor.world.pos.y - playerActor->world.pos.y; if ((this->fairyFlags & 0x1000) && (heightDiff > 0.0f) && (heightDiff < 60.0f) && - !func_8088C804(&this->actor.world.pos, &refActor->actor.world.pos, 10.0f)) { + !func_8088C804(&this->actor.world.pos, &playerActor->world.pos, 10.0f)) { Health_ChangeBy(play, 0x80); if (this->fairyFlags & 0x200) { Magic_Add(play, MAGIC_FILL_TO_CAPACITY); } gSaveContext.jinxTimer = 0; this->unk_254 = 50.0f; - this->unk_248 = refActor->actor.shape.rot.y; + this->unk_248 = playerActor->shape.rot.y; this->unk_24C = -0x1000; this->unk_224.y = 30.0f; this->unk_250 = 0.0f; diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index e19e8d522..05351cd3f 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -93,18 +93,18 @@ void EnElforg_Init(Actor* thisx, PlayState* play) { } break; + case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN: + case STRAY_FAIRY_TYPE_BUBBLE: + case STRAY_FAIRY_TYPE_CHEST: + case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN: + break; + default: if (Flags_GetSwitch(play, STRAY_FAIRY_FLAG(thisx))) { Actor_Kill(thisx); return; } break; - - case STRAY_FAIRY_TYPE_FAIRY_FOUNTAIN: - case STRAY_FAIRY_TYPE_BUBBLE: - case STRAY_FAIRY_TYPE_CHEST: - case STRAY_FAIRY_TYPE_TURN_IN_TO_FAIRY_FOUNTAIN: - break; } if (Map_IsInDungeonOrBossArea(play)) { @@ -561,7 +561,7 @@ void EnElforg_TrappedByEnemy(EnElforg* this, PlayState* play) { void EnElforg_SetupTrappedByEnemy(EnElforg* this, PlayState* play) { Actor* enemy = EnElforg_GetHoldingEnemy(this, play); - if (enemy != NULL && enemy->update != NULL) { + if ((enemy != NULL) && (enemy->update != NULL)) { this->actionFunc = EnElforg_TrappedByEnemy; this->enemy = enemy; } @@ -587,7 +587,7 @@ void EnElforg_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->timer == 0 && this->secondaryTimer > 0) { + if ((this->timer == 0) && (this->secondaryTimer > 0)) { this->secondaryTimer--; } else { this->timer++; diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c index 03eb40786..dd656f903 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c +++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c @@ -94,18 +94,25 @@ void EnEndingHero5_Draw(Actor* thisx, PlayState* play) { case 0: gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255); break; + case 1: gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255); break; + case 2: gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255); break; + case 3: gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255); break; + case 4: gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255); break; + + default: + break; } SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index d21b30b60..8c975dbad 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -890,6 +890,7 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play) { if (this->fireRingAlpha > 1.0f) { this->fireRingAlpha = 1.0f; } + OPEN_DISPS(play->state.gfxCtx); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gMoonFireRingTexAnim)); diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.c b/src/overlays/actors/ovl_En_Fg/z_en_fg.c index 0f9b7594e..491d3c499 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -387,11 +387,13 @@ void EnFg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if ((limbIndex == 7) || (limbIndex == 8)) { OPEN_DISPS(play->state.gfxCtx); + Matrix_Push(); Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, *dList); Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); } @@ -468,6 +470,7 @@ void EnFg_DrawDust(PlayState* play, EnFgEffectDust* dustEffect) { s16 firstDone = false; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < 10; i++, dustEffect++) { diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 8d3cf44a5..11fa876d4 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -615,24 +615,24 @@ void func_80B10868(EnGb2* this, PlayState* play) { } void func_80B10924(EnGb2* this, PlayState* play) { - s32 sp24; + s32 getItemId; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_54_40)) { - sp24 = 5; + getItemId = GI_RUPEE_PURPLE; } else { - sp24 = 12; + getItemId = GI_HEART_PIECE; } if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (sp24 == 12) { + if (getItemId == GI_HEART_PIECE) { SET_WEEKEVENTREG(WEEKEVENTREG_54_40); } else { Rupees_ChangeBy(50); } this->actionFunc = func_80B109DC; } else { - Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f); + Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f); } } diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 99a2808f5..6de6c7e75 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -441,6 +441,9 @@ void EnGe1_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPDisplayList(POLY_OPA_DISP++, sHairstyleDLs[this->hairstyle]); Matrix_MultVec3f(&sInitialFocusPos, &this->picto.actor.focus.pos); break; + + default: + break; } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c index cc15fcbce..29f7059a5 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -114,6 +114,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + case GIANT_TYPE_MOUNTAIN_TERMINA_FIELD: case GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_MOUNTAIN_GIANTS_CHAMBER_AND_ENDING: @@ -122,6 +123,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + case GIANT_TYPE_OCEAN_TERMINA_FIELD: case GIANT_TYPE_OCEAN_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_OCEAN_GIANTS_CHAMBER_AND_ENDING: @@ -130,6 +132,7 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + case GIANT_TYPE_CANYON_TERMINA_FIELD: case GIANT_TYPE_CANYON_CLOCK_TOWER_SUCCESS: case GIANT_TYPE_CANYON_GIANTS_CHAMBER_AND_ENDING: @@ -138,6 +141,9 @@ s32 EnGiant_IsImprisoned(EnGiant* this) { return true; } break; + + default: + break; } return false; @@ -229,11 +235,13 @@ void EnGiant_Init(Actor* thisx, PlayState* play) { case 10: this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE2 - SFX_FLAG; break; + case 1: case 2: case 3: this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE1 - SFX_FLAG; break; + default: this->sfxId = NA_SE_EV_KYOJIN_GRATITUDE0 - SFX_FLAG; break; @@ -361,47 +369,56 @@ void EnGiant_PlayAndUpdateAnimation(EnGiant* this) { case GIANT_CUE_ID_LOOKING_UP: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_LOOK_UP_START); break; + case GIANT_CUE_ID_RAISING_ARMS: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_RAISED_ARMS_START); break; + case GIANT_CUE_ID_STRUGGLING: EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_STRUGGLE_START); break; + case GIANT_CUE_ID_FALLING_OVER: // Unused EnGiant_ChangeToStartOrLoopAnimation(this, GIANT_ANIM_FALLING_OVER); break; + case GIANT_CUE_ID_TALKING: EnGiant_ChangeAnim(this, GIANT_ANIM_BIG_CALL_LOOP); break; + case GIANT_CUE_ID_DONE_TALKING: case GIANT_CUE_ID_PLAYER_LEARNED_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_IDLE_LOOP); break; + case GIANT_CUE_ID_TEACHING_OATH_TO_ORDER: EnGiant_ChangeAnim(this, GIANT_ANIM_SMALL_CALL_LOOP); break; + + default: + break; } SkelAnime_Update(&this->skelAnime); } } void EnGiant_PlaySound(EnGiant* this) { - if (this->actor.draw != NULL && this->alpha > 0) { - if (this->animIndex == GIANT_ANIM_WALKING_LOOP && + if ((this->actor.draw != NULL) && (this->alpha > 0)) { + if ((this->animIndex == GIANT_ANIM_WALKING_LOOP) && (Animation_OnFrame(&this->skelAnime, 40.0f) || Animation_OnFrame(&this->skelAnime, 100.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_WALK); } - if (this->animIndex == GIANT_ANIM_FALLING_OVER && Animation_OnFrame(&this->skelAnime, 40.0f)) { + if ((this->animIndex == GIANT_ANIM_FALLING_OVER) && Animation_OnFrame(&this->skelAnime, 40.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_KYOJIN_VOICE_FAIL); } - if (this->sfxId != 0xFFFF && - ((this->animIndex == GIANT_ANIM_BIG_CALL_START && this->skelAnime.curFrame >= 18.0f) || - this->animIndex == GIANT_ANIM_BIG_CALL_LOOP)) { + if ((this->sfxId != 0xFFFF) && + (((this->animIndex == GIANT_ANIM_BIG_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) || + (this->animIndex == GIANT_ANIM_BIG_CALL_LOOP))) { func_800B9010(&this->actor, this->sfxId); } - if ((this->animIndex == GIANT_ANIM_SMALL_CALL_START && this->skelAnime.curFrame >= 18.0f) || - this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP) { + if (((this->animIndex == GIANT_ANIM_SMALL_CALL_START) && (this->skelAnime.curFrame >= 18.0f)) || + (this->animIndex == GIANT_ANIM_SMALL_CALL_LOOP)) { func_800B9010(&this->actor, NA_SE_EV_KYOJIN_SIGN - SFX_FLAG); } } diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 90e449be3..1859cf83f 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -234,7 +234,7 @@ s32 EnGirlA_CanBuyArrows(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyNuts(PlayState* play, EnGirlA* this) { - if (CUR_CAPACITY(UPG_NUTS) != 0 && CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT)) { + if ((CUR_CAPACITY(UPG_NUTS) != 0) && (CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT))) { return CANBUY_RESULT_NO_ROOM; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { @@ -257,7 +257,7 @@ s32 EnGirlA_CanBuyShieldHero(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) { - if (CUR_CAPACITY(UPG_STICKS) != 0 && AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) { + if ((CUR_CAPACITY(UPG_STICKS) != 0) && (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS))) { return CANBUY_RESULT_NO_ROOM; } if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { @@ -385,18 +385,24 @@ void EnGirlA_BuyBottleItem(PlayState* play, EnGirlA* this) { case SI_POTION_RED_6: Item_Give(play, ITEM_POTION_RED); break; + case SI_POTION_GREEN_1: case SI_POTION_GREEN_2: case SI_POTION_GREEN_3: Item_Give(play, ITEM_POTION_GREEN); break; + case SI_POTION_BLUE: Item_Give(play, ITEM_POTION_BLUE); break; + case SI_FAIRY_1: case SI_FAIRY_2: Item_Give(play, ITEM_FAIRY); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -411,9 +417,13 @@ void EnGirlA_BuyNuts(PlayState* play, EnGirlA* this) { case 5: Item_Give(play, ITEM_NUTS_5); break; + case 10: Item_Give(play, ITEM_NUTS_10); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -439,12 +449,17 @@ void EnGirlA_BuyBombBag(PlayState* play, EnGirlA* this) { case 20: Item_Give(play, ITEM_BOMB_BAG_20); break; + case 21: Item_Give(play, ITEM_BOMB_BAG_30); break; + case 22: Item_Give(play, ITEM_BOMB_BAG_40); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -461,15 +476,21 @@ void EnGirlA_BuyBombs(PlayState* play, EnGirlA* this) { case 5: Item_Give(play, ITEM_BOMBS_5); break; + case 10: Item_Give(play, ITEM_BOMBS_10); break; + case 20: Item_Give(play, ITEM_BOMBS_20); break; + case 30: Item_Give(play, ITEM_BOMBS_30); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } @@ -484,15 +505,21 @@ void EnGirlA_BuySword(PlayState* play, EnGirlA* this) { case 1: Item_Give(play, ITEM_SWORD_KOKIRI); break; + case 2: Item_Give(play, ITEM_SWORD_RAZOR); break; + case 3: Item_Give(play, ITEM_SWORD_GILDED); break; + case 4: Item_Give(play, ITEM_SWORD_GREAT_FAIRY); break; + + default: + break; } Rupees_ChangeBy(-play->msgCtx.unk1206C); } diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 28d5c344d..edb079373 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -955,22 +955,22 @@ void func_80B52430(EnGk* this, PlayState* play) { } void func_80B5253C(EnGk* this, PlayState* play) { - s32 sp24; + s32 getItemId; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_41_08)) { - sp24 = 0x93; + getItemId = GI_GOLD_DUST_2; } else { - sp24 = 0x6A; + getItemId = GI_GOLD_DUST; } if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - if (sp24 == 0x6A) { + if (getItemId == GI_GOLD_DUST) { SET_WEEKEVENTREG(WEEKEVENTREG_41_08); } this->actionFunc = func_80B525E0; } else { - Actor_OfferGetItem(&this->actor, play, sp24, 300.0f, 300.0f); + Actor_OfferGetItem(&this->actor, play, getItemId, 300.0f, 300.0f); } } diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index 30a6709a2..d8004bef8 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -458,25 +458,25 @@ void func_8099874C(EnGs* this, PlayState* play) { } if (phi_v0 != 0) { - this->unk_20C = -1; + this->getItemId = -1; switch (this->unk_194) { case 1: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_08)) { - this->unk_20C = 6; + this->getItemId = GI_RUPEE_SILVER; SET_WEEKEVENTREG(WEEKEVENTREG_77_08); } break; case 3: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_10)) { - this->unk_20C = 6; + this->getItemId = GI_RUPEE_SILVER; SET_WEEKEVENTREG(WEEKEVENTREG_77_10); } break; case 2: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_77_20)) { - this->unk_20C = 6; + this->getItemId = GI_RUPEE_SILVER; SET_WEEKEVENTREG(WEEKEVENTREG_77_20); } break; @@ -484,10 +484,10 @@ void func_8099874C(EnGs* this, PlayState* play) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_90_10)) { SET_WEEKEVENTREG(WEEKEVENTREG_90_10); - this->unk_20C = 12; + this->getItemId = GI_HEART_PIECE; } - if (this->unk_20C > 0) { + if (this->getItemId > GI_NONE) { func_809989B4(this, play); } else { func_80997D14(this, play); @@ -502,7 +502,7 @@ void func_8099874C(EnGs* this, PlayState* play) { } void func_809989B4(EnGs* this, PlayState* play) { - Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel); + Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, this->actor.playerHeightRel); this->actionFunc = func_809989F4; } @@ -511,7 +511,8 @@ void func_809989F4(EnGs* this, PlayState* play) { this->actor.parent = NULL; func_80997D14(this, play); } else { - Actor_OfferGetItem(&this->actor, play, this->unk_20C, this->actor.xzDistToPlayer, this->actor.playerHeightRel); + Actor_OfferGetItem(&this->actor, play, this->getItemId, this->actor.xzDistToPlayer, + this->actor.playerHeightRel); } } diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.h b/src/overlays/actors/ovl_En_Gs/z_en_gs.h index abb4a5b86..42efabb61 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -47,7 +47,7 @@ typedef struct EnGs { /* 0x200 */ f32 unk_200; /* 0x204 */ s32 unk_204; /* 0x208 */ s32 unk_208; - /* 0x20C */ s32 unk_20C; + /* 0x20C */ s32 getItemId; /* 0x210 */ u16 unk_210; /* 0x212 */ s16 csIdList[2]; /* 0x216 */ s16 unk_216; diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index 78a2aa4d1..bdc4637d1 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -131,7 +131,7 @@ void func_80BC6E10(EnGuruguru* this) { this->headZRotTarget = 0; this->unk268 = 1; this->actor.textId = textIDs[this->textIdIndex]; - if ((this->textIdIndex == 0 || this->textIdIndex == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { + if (((this->textIdIndex == 0) || (this->textIdIndex == 1)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_77_04)) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_88_04)) { this->actor.textId = 0x295F; } else { @@ -175,7 +175,7 @@ void func_80BC701C(EnGuruguru* this, PlayState* play) { Player* player = GET_PLAYER(play); if ((this->unk268 != 0) && - (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU)) { + ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU))) { this->headZRotTarget = 5000; } @@ -324,7 +324,7 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - } else if (this->actor.params == 0 || this->actor.params == 2) { + } else if ((this->actor.params == 0) || (this->actor.params == 2)) { Actor_Kill(&this->actor); return; } @@ -352,10 +352,10 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { this->headXRotTarget = 0; if (yaw < 0x2AF8) { this->headXRotTarget = this->actor.yawTowardsPlayer - this->actor.world.rot.y; - if (this->headXRotTarget > 5000) { - this->headXRotTarget = 5000; - } else if (this->headXRotTarget < -5000) { - this->headXRotTarget = -5000; + if (this->headXRotTarget > 0x1388) { + this->headXRotTarget = 0x1388; + } else if (this->headXRotTarget < -0x1388) { + this->headXRotTarget = -0x1388; } } Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index 630ae405f..43a5895d5 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -156,7 +156,7 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { this->unk_20A = 0; } - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { func_80BDB580(this); return; } diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index 8cff778fd..71b338121 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -1033,6 +1033,7 @@ void EnIk_UpdateArmorDraw(EnIk* this, PlayState* play) { sp54 = 0; OPEN_DISPS(play->state.gfxCtx); + gfxOpa = POLY_OPA_DISP; gfxXlu = POLY_XLU_DISP; diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index cbdc2ba19..5031d7e87 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -329,7 +329,7 @@ void func_808F38F8(EnIn* this, PlayState* play) { while (true) { //! @bug: Infinite loop if there is only one ACTOR_EN_IN this->unk4A4 = (EnIn*)SubS_FindActor(play, &this->unk4A4->actor, ACTORCAT_NPC, ACTOR_EN_IN); - if (this->unk4A4 != NULL && this->unk4A4 != this) { + if ((this->unk4A4 != NULL) && (this->unk4A4 != this)) { break; } this->unk4A4 = (EnIn*)this->unk4A4->actor.next; @@ -357,9 +357,13 @@ void func_808F39DC(EnIn* this, PlayState* play) { case WEEKEVENTREG_HORSE_RACE_STATE_2: textId = 0x347A; break; + case WEEKEVENTREG_HORSE_RACE_STATE_3: textId = 0x3476; break; + + default: + break; } SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); } else { @@ -367,9 +371,13 @@ void func_808F39DC(EnIn* this, PlayState* play) { case WEEKEVENTREG_HORSE_RACE_STATE_2: textId = 0x349D; break; + case WEEKEVENTREG_HORSE_RACE_STATE_3: textId = 0x3499; break; + + default: + break; } SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_END); } @@ -482,6 +490,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x345B; } break; + case 1: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_15_10)) { textId = 0x3463; @@ -489,11 +498,12 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x346B; } break; + case 3: if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x3485; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || - gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || + (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { textId = 0x3484; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_56_04)) { textId = 0x346D; @@ -501,8 +511,10 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x3482; } break; + case 4: - if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || + (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { textId = 0x348A; } else if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x348B; @@ -512,6 +524,7 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x3489; } break; + case 5: if (func_808F33B8()) { textId = 0x34B3; @@ -521,17 +534,22 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { textId = 0x3493; } break; + case 7: if (gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { textId = 0x34A8; - } else if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA || - gSaveContext.save.playerForm == PLAYER_FORM_GORON) { + } else if ((gSaveContext.save.playerForm == PLAYER_FORM_ZORA) || + (gSaveContext.save.playerForm == PLAYER_FORM_GORON)) { textId = 0x34A7; } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_16_04)) { textId = 0x3495; } else { textId = 0x34A5; } + break; + + default: + break; } if (textId == 0) { textId = 1; @@ -540,10 +558,9 @@ u16 func_808F3DD4(PlayState* play, EnIn* this, u32 arg2) { } void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) { - s32 unused; + s32 pad; - if (textId == 0x34AE || textId == 0x34B0 || textId == 0x34B2) { - unused = textId; + if ((textId == 0x34AE) || (textId == 0x34B0) || (textId == 0x34B2)) { func_80151BB4(play, 0x11); } switch (arg2) { @@ -554,12 +571,15 @@ void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) { func_808F35D8(this, play); } break; + case 2: if (textId == 0x3473) { func_808F35D8(this, play); } break; + case 0: + default: break; } } @@ -599,7 +619,7 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, s32 arg4) { s32 pad; - s32 fee = play->msgCtx.unk1206C != 0xFFFF ? play->msgCtx.unk1206C : 10; + s32 fee = (play->msgCtx.unk1206C != 0xFFFF) ? play->msgCtx.unk1206C : 10; if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -651,31 +671,38 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x34B0); ret = false; break; + case 0x34A9: func_808F4108(this, play, 0x34AA); SET_WEEKEVENTREG(WEEKEVENTREG_63_40); ret = false; break; + case 0x34AA: func_808F4108(this, play, 0x34AB); ret = false; break; + case 0x34AB: func_808F4108(this, play, 0x34AC); ret = false; break; + case 0x34AC: func_808F4108(this, play, 0x34AD); ret = false; break; + case 0x34AD: Actor_ContinueText(play, &this->actor, 0x34AE); ret = false; break; + case 0x34B1: Actor_ContinueText(play, &this->actor, 0x34B2); ret = false; break; + default: break; } @@ -688,48 +715,62 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x3459); ret = false; break; + case 0x3459: Actor_ContinueText(play, &this->actor, 0x345A); ret = false; break; + case 0x345A: func_80151BB4(play, 0x11); ret = true; break; + case 0x345B: func_80151BB4(play, 0x11); ret = true; break; + case 0x345C: Actor_ContinueText(play, &this->actor, 0x345D); ret = false; break; + case 0x345D: Actor_ContinueText(play, &this->actor, 0x345E); ret = false; break; + case 0x345E: Actor_ContinueText(play, &this->actor, 0x345F); ret = false; break; + case 0x345F: func_80151BB4(play, 0x11); ret = true; break; + case 0x3460: Actor_ContinueText(play, &this->actor, 0x3461); ret = false; break; + case 0x3461: Actor_ContinueText(play, &this->actor, 0x3462); ret = false; break; + case 0x3462: func_80151BB4(play, 0x11); ret = true; break; + + default: + break; } break; + case 1: switch (textId) { case 0x3463: @@ -737,14 +778,17 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { Actor_ContinueText(play, &this->actor, 0x3464); ret = false; break; + case 0x3464: Actor_ContinueText(play, &this->actor, 0x3465); ret = false; break; + case 0x3465: Actor_ContinueText(play, &this->actor, 0x3466); ret = false; break; + case 0x3466: if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -769,54 +813,65 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x3467: case 0x3468: case 0x3469: func_80151BB4(play, 0x11); ret = true; break; + case 0x346B: Actor_ContinueText(play, &this->actor, 0x346C); ret = false; break; + case 0x346C: Actor_ContinueText(play, &this->actor, 0x3466); ret = false; break; + case 0x346A: this->actionFunc = func_808F5A94; func_80151BB4(play, 0x11); break; } break; + case 2: switch (textId) { case 0x346E: func_808F4108(this, play, 0x346F); ret = false; break; + case 0x3470: Actor_ContinueText(play, &this->actor, 0x3471); ret = false; break; + case 0x3483: Actor_ContinueText(play, &this->actor, 0x3471); ret = false; break; + case 0x3471: func_808F4150(play, this, arg2, msgCtx); ret = false; break; + case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); ret = true; break; + case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); break; + case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); func_800FD750(NA_BGM_HORSE); @@ -825,6 +880,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { play->transitionTrigger = TRANS_TRIGGER_START; SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; + case 0x3478: if (msgCtx->choiceIndex == 0) { func_808F4150(play, this, arg2, msgCtx); @@ -836,13 +892,18 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x347B: func_808F4108(this, play, 0x347C); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + + default: + break; } break; + case 3: switch (textId) { case 0x346D: @@ -851,36 +912,44 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x346F: func_808F4108(this, play, 0x3470); ret = false; break; + case 0x3482: func_808F4108(this, play, 0x3483); SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x3484: func_80151BB4(play, 0x11); break; + case 0x3485: func_80151BB4(play, 0x11); break; + case 0x3474: func_808F4108(this, play, 0x3475); ret = false; break; + case 0x3476: Actor_ContinueText(play, &this->actor, 0x3477); EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); ret = false; break; + case 0x3477: SET_WEEKEVENTREG(WEEKEVENTREG_56_08); func_808F4108(this, play, 0x3478); ret = false; break; + case 0x347A: EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); @@ -904,33 +973,39 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x347F: Actor_ContinueText(play, &this->actor, 0x3480); ret = false; break; + case 0x3480: func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x3479: func_808F43E0(this); func_808F35D8(this, play); func_80151BB4(play, 0x11); ret = true; break; + case 0x347C: this->actionFunc = func_808F3D40; Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f); func_808F35D8(this, play); ret = true; break; + case 0x3481: this->actionFunc = func_808F5A34; func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x347D: this->actionFunc = func_808F5A34; func_808F43E0(this); @@ -938,8 +1013,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_80151BB4(play, 0x2F); ret = true; break; + + default: + break; } break; + case 4: switch (textId) { case 0x3486: @@ -947,34 +1026,45 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { SET_WEEKEVENTREG(WEEKEVENTREG_16_01); ret = false; break; + case 0x3487: Actor_ContinueText(play, &this->actor, 0x3488); ret = false; break; + case 0x3488: func_80151BB4(play, 0x11); ret = true; break; + case 0x3489: func_80151BB4(play, 0x11); break; + case 0x348A: func_80151BB4(play, 0x11); break; + case 0x348B: Actor_ContinueText(play, &this->actor, 0x348C); ret = false; break; + case 0x348C: Actor_ContinueText(play, &this->actor, 0x348D); ret = false; break; + case 0x348D: func_80151BB4(play, 0x11); ret = true; break; + + default: + break; } break; + case 5: switch (textId) { case 0x3468: @@ -982,21 +1072,25 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3491: func_80151BB4(play, 0x11); break; + case 0x348E: case 0x34B3: Actor_ContinueText(play, &this->actor, 0x348F); SET_WEEKEVENTREG(WEEKEVENTREG_16_02); ret = false; break; + case 0x3493: Actor_ContinueText(play, &this->actor, 0x3494); ret = false; break; + case 0x348F: case 0x3494: Actor_ContinueText(play, &this->actor, 0x3490); ret = false; break; + case 0x3490: if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -1021,49 +1115,59 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x3492: this->actionFunc = func_808F5A94; func_80151BB4(play, 0x11); break; } break; + case 7: switch (textId) { case 0x34A8: func_80151BB4(play, 0x11); break; + case 0x34A7: func_80151BB4(play, 0x11); break; + case 0x3495: func_808F4108(this, play, 0x3496); SET_WEEKEVENTREG(WEEKEVENTREG_16_04); SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x3497: func_808F4108(this, play, 0x3498); ret = false; break; + case 0x34A4: this->actionFunc = func_808F5A34; func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x34A5: func_808F4108(this, play, 0x34A6); SET_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); break; + case 0x3474: Actor_ContinueText(play, &this->actor, 0x3475); ret = false; break; + case 0x3475: SET_WEEKEVENTREG_HORSE_RACE_STATE(WEEKEVENTREG_HORSE_RACE_STATE_START); func_800FD750(NA_BGM_HORSE); @@ -1072,6 +1176,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { play->transitionTrigger = TRANS_TRIGGER_START; SET_WEEKEVENTREG(WEEKEVENTREG_57_01); break; + case 0x349D: EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); @@ -1084,12 +1189,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x349F: this->actionFunc = func_808F3D40; Actor_OfferGetItem(&this->actor, play, GI_MASK_GARO, 500.0f, 100.0f); func_808F35D8(this, play); ret = true; break; + case 0x34A0: this->actionFunc = func_808F5A34; func_80151BB4(play, 0x11); @@ -1097,6 +1204,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { func_808F43E0(this); ret = true; break; + case 0x34A1: func_808F35D8(this, play); if (Inventory_HasEmptyBottle()) { @@ -1108,25 +1216,30 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x34A2: Actor_ContinueText(play, &this->actor, 0x34A3); ret = false; break; + case 0x34A3: func_808F43E0(this); func_80151BB4(play, 0x11); ret = true; break; + case 0x3499: Actor_ContinueText(play, &this->actor, 0x349A); EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_1); EnIn_ChangeAnim(&this->unk4A4->skelAnime, ENIN_ANIM_7); ret = false; break; + case 0x349A: Actor_ContinueText(play, &this->actor, 0x349B); ret = false; break; + case 0x349B: if (msgCtx->choiceIndex == 0) { func_808F4270(play, this, arg2, msgCtx, 1); @@ -1137,42 +1250,57 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { ret = false; } break; + case 0x349C: func_808F43E0(this); func_808F35D8(this, play); func_80151BB4(play, 0x11); ret = true; break; + + default: + break; } break; + case 6: switch (textId) { case 0x3496: func_808F4108(this, play, 0x3497); ret = false; break; + case 0x3498: case 0x34A6: Actor_ContinueText(play, &this->actor, 0x3471); ret = false; break; + case 0x3471: func_808F4270(play, this, arg2, msgCtx, 0); ret = false; break; + case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); func_80151BB4(play, 0x11); ret = true; break; + case 0x349E: func_808F4108(this, play, 0x349F); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); ret = false; break; + + default: + break; } break; + + default: + break; } return ret; } @@ -1186,6 +1314,7 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) { func_808F4054(play, this, arg2, this->actor.textId); ret = true; break; + case TEXT_STATE_CHOICE: case TEXT_STATE_5: if (Message_ShouldAdvance(play) && func_808F4414(play, this, arg2)) { @@ -1193,6 +1322,9 @@ s32 func_808F5674(PlayState* play, EnIn* this, s32 arg2) { ret = true; } break; + + default: + break; } return ret; } @@ -1368,10 +1500,10 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->unk4AC = 0; type = ENIN_GET_TYPE(thisx); this->unk4B0 = GET_WEEKEVENTREG_HORSE_RACE_STATE; - if (type == ENIN_HORSE_RIDER_BLUE_SHIRT || type == ENIN_BLUE_SHIRT) { + if ((type == ENIN_HORSE_RIDER_BLUE_SHIRT) || (type == ENIN_BLUE_SHIRT)) { this->unk4AC |= 8; } - if (type == ENIN_HORSE_RIDER_YELLOW_SHIRT || type == ENIN_HORSE_RIDER_BLUE_SHIRT) { + if ((type == ENIN_HORSE_RIDER_YELLOW_SHIRT) || (type == ENIN_HORSE_RIDER_BLUE_SHIRT)) { ActorShape_Init(&this->actor.shape, 0.0f, NULL, 0.0f); this->unk488 = 1; Animation_Change(&this->skelAnime, &object_in_Anim_016A60, 1.0f, 0.0f, @@ -1387,7 +1519,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -4.0f; this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F); this->unk23D = 0; - if (type == ENIN_YELLOW_SHIRT || type == ENIN_BLUE_SHIRT) { + if ((type == ENIN_YELLOW_SHIRT) || (type == ENIN_BLUE_SHIRT)) { if ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) || (GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_3)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); @@ -1478,15 +1610,15 @@ void func_808F6334(EnIn* this, PlayState* play) { Player* player = GET_PLAYER(play); s32 talkState = Message_GetState(&play->msgCtx); - this->unk4C4 += this->unk4C0 != 0.0f ? 40.0f : -40.0f; + this->unk4C4 += (this->unk4C0 != 0.0f) ? 40.0f : -40.0f; this->unk4C4 = CLAMP(this->unk4C4, 0.0f, 80.0f); Matrix_Translate(this->unk4C4, 0.0f, 0.0f, MTXMODE_APPLY); if ((&this->actor == player->talkActor) && - !((play->msgCtx.currentTextId >= 0xFF) && (play->msgCtx.currentTextId <= 0x200)) && - (talkState == TEXT_STATE_3) && (this->prevTalkState == TEXT_STATE_3)) { + ((play->msgCtx.currentTextId < 0xFF) || (play->msgCtx.currentTextId > 0x200)) && (talkState == TEXT_STATE_3) && + (this->prevTalkState == TEXT_STATE_3)) { if (!(play->state.frames & 1)) { - this->unk4C0 = this->unk4C0 != 0.0f ? 0.0f : 1.0f; + this->unk4C0 = (this->unk4C0 != 0.0f) ? 0.0f : 1.0f; } } else { this->unk4C0 = 0.0f; @@ -1520,16 +1652,17 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po object_in_DL_013440, }; - if (this->unk23C != 0 && limbIndex != 16) { + if ((this->unk23C != 0) && (limbIndex != 16)) { if (sp50[limbIndex] != NULL) { *dList = sp50[limbIndex]; } } - if (this->unk4AC & 4 && limbIndex == 16) { + if ((this->unk4AC & 4) && (limbIndex == 16)) { *dList = object_in_DL_01C528; } OPEN_DISPS(play->state.gfxCtx); + if (limbIndex == 16) { TexturePtr sp38[] = { object_in_Tex_0035E0, object_in_Tex_004820, object_in_Tex_004C20, object_in_Tex_0043E0 }; @@ -1538,6 +1671,7 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po } else { AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(object_in_Matanimheader_001C30), this->unk4AC & 8 ? 1 : 0); } + CLOSE_DISPS(play->state.gfxCtx); if (limbIndex == 16) { @@ -1551,7 +1685,7 @@ s32 EnIn_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po Matrix_RotateYS(this->torsoRot.y, MTXMODE_APPLY); Matrix_RotateXS(this->torsoRot.x, MTXMODE_APPLY); } - if (limbIndex == 9 || limbIndex == 10 || limbIndex == 13) { + if ((limbIndex == 9) || (limbIndex == 10) || (limbIndex == 13)) { rot->y += (s16)(Math_SinS(this->unk376[limbIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->unk39E[limbIndex]) * 200.0f); } @@ -1593,21 +1727,25 @@ void EnIn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, if (this->unk23C == 0) { if (!(this->unk4AC & 8)) { OPEN_DISPS(play->state.gfxCtx); + if (limbIndex == 12) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007A70); } if (limbIndex == 15) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } + CLOSE_DISPS(play->state.gfxCtx); } } } if (this->unk4AC & 0x20) { OPEN_DISPS(play->state.gfxCtx); + if (limbIndex == 12) { gSPDisplayList(POLY_OPA_DISP++, object_in_DL_007C48); } + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index ee6e28de2..a1da5941b 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -321,15 +321,15 @@ s32 func_80B85858(EnKaizoku* this, PlayState* play) { for (itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; itemAction != NULL; itemAction = itemAction->next) { - //! FAKE: - if (1) {} - if (((itemAction->id == ACTOR_ARMS_HOOK) || (itemAction->id == ACTOR_EN_ARROW)) && (player->unk_D57)) { - if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) && - (this->action != KAIZOKU_ACTION_6)) { - func_80B87C7C(this); - } - break; + if (((itemAction->id != ACTOR_ARMS_HOOK) && (itemAction->id != ACTOR_EN_ARROW)) || (player->unk_D57 == 0)) { + continue; } + + if (((itemAction->id != ACTOR_ARMS_HOOK) || (this->action != KAIZOKU_ACTION_13)) && + (this->action != KAIZOKU_ACTION_6)) { + func_80B87C7C(this); + } + break; } if (prevAction != this->action) { @@ -423,8 +423,8 @@ s32 func_80B85A00(EnKaizoku* this, PlayState* play, s16 arg2) { func_80B87900(this); } else { sp2A = player->actor.shape.rot.y - this->picto.actor.shape.rot.y; - if (this->picto.actor.xzDistToPlayer <= 65.0f && !Actor_OtherIsTargeted(play, &this->picto.actor) && - ABS_ALT(sp2A) < 0x5000) { + if ((this->picto.actor.xzDistToPlayer <= 65.0f) && !Actor_OtherIsTargeted(play, &this->picto.actor) && + (ABS_ALT(sp2A) < 0x5000)) { if (this->action != KAIZOKU_ACTION_9) { func_80B87F70(this); return 1; @@ -508,7 +508,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { this->unk_598 = 0; Audio_SetMainBgmVolume(0, 0xA); this->unk_59C++; - + // fallthrough case 1: player->actor.shape.rot.y = player->actor.world.rot.y = Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); @@ -611,7 +611,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { func_800B7298(play, &this->picto.actor, 6); CutsceneManager_Stop(this->csId); this->unk_59C = 0; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags &= ~ACTOR_FLAG_100000; this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; this->picto.actor.flags |= ACTOR_FLAG_1; @@ -657,7 +657,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { Math_Vec3f_Copy(&this->subCamAt, &this->unk_5D4); } - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.y = 1.0f; this->subCamUp.z = 0.0f; Play_SetCameraAtEyeUp(play, this->subCamId, &this->subCamAt, &this->subCamEye, &this->subCamUp); @@ -665,7 +665,7 @@ void func_80B85FA8(EnKaizoku* this, PlayState* play) { } void func_80B86804(EnKaizoku* this, PlayState* play) { - if (this->subCamId == 0) { + if (this->subCamId == SUB_CAM_ID_DONE) { if (!CutsceneManager_IsNext(this->csId)) { CutsceneManager_Queue(this->csId); return; @@ -725,7 +725,7 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { Message_CloseTextbox(play); func_800B7298(play, &this->picto.actor, 6); CutsceneManager_Stop(this->csId); - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; play->nextEntrance = play->setupExitList[this->exitIndex]; gSaveContext.nextCutsceneIndex = 0; Scene_SetExitFade(play); @@ -733,11 +733,13 @@ void func_80B868B8(EnKaizoku* this, PlayState* play) { this->unk_59C++; this->action = KAIZOKU_ACTION_16; } + break; + default: break; } - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; this->subCamUp.z = 0.0f; @@ -861,7 +863,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { play->envCtx.screenFillColor[3] = 0; play->envCtx.fillScreen = false; this->unk_59C = 0; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; func_800B7298(play, &this->picto.actor, 6); CutsceneManager_Stop(this->csId); if (this->switchFlag >= 0) { @@ -871,6 +873,9 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { } } break; + + default: + break; } Math_ApproachF(&this->subCamEye.x, this->unk_5C8.x, 0.5f, this->unk_5E0); Math_ApproachF(&this->subCamEye.y, this->unk_5C8.y, 0.5f, this->unk_5E0); @@ -880,7 +885,7 @@ void func_80B86B74(EnKaizoku* this, PlayState* play) { Math_ApproachF(&this->subCamAt.z, this->unk_5D4.z, 0.5f, this->unk_5E0); Math_ApproachF(&this->unk_5E0, 10.0f, 0.5f, 100.0f); - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.x = 0.0f; this->subCamUp.z = 0.0f; this->subCamUp.y = 1.0f; @@ -990,7 +995,8 @@ void func_80B8760C(EnKaizoku* this, PlayState* play) { this->skelAnime.playSpeed = 1.0f; temp_ft0 = this->skelAnime.curFrame - this->skelAnime.playSpeed; temp_ft1 = this->skelAnime.curFrame + this->skelAnime.playSpeed; - if (this->skelAnime.curFrame != 0.0f && ((temp_ft0 < 0 && temp_ft1 > 0) || (temp_ft0 < 5 && temp_ft1 >= 6))) { + if ((this->skelAnime.curFrame != 0.0f) && + (((temp_ft0 < 0) && (temp_ft1 > 0)) || ((temp_ft0 < 5) && (temp_ft1 >= 6)))) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); } @@ -1007,12 +1013,10 @@ void func_80B8760C(EnKaizoku* this, PlayState* play) { func_80B87E28(this); } } + } else if (this->picto.actor.speed >= 0.0f) { + this->picto.actor.shape.rot.y += 0x4000; } else { - if (this->picto.actor.speed >= 0.0f) { - this->picto.actor.shape.rot.y += 0x4000; - } else { - this->picto.actor.shape.rot.y -= 0x4000; - } + this->picto.actor.shape.rot.y -= 0x4000; } } @@ -1042,8 +1046,8 @@ void func_80B8798C(EnKaizoku* this, PlayState* play) { if (this->lookTimer == 0) { this->unk_2D8 = 0; temp_v0 = this->picto.actor.yawTowardsPlayer - this->picto.actor.shape.rot.y; - if (ABS_ALT(temp_v0) <= 0x4000 && this->picto.actor.xzDistToPlayer < 40.0f && - fabsf(this->picto.actor.playerHeightRel) < 50.0f) { + if ((ABS_ALT(temp_v0) <= 0x4000) && (this->picto.actor.xzDistToPlayer < 40.0f) && + (fabsf(this->picto.actor.playerHeightRel) < 50.0f)) { if (func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) { if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { this->bodyCollider.base.acFlags &= ~AC_HARD; @@ -1068,7 +1072,7 @@ void func_80B8798C(EnKaizoku* this, PlayState* play) { this->bodyCollider.base.acFlags &= ~AC_HARD; func_80B88CD8(this); } - } else if (this->unk_2B2 == 0 && + } else if ((this->unk_2B2 == 0) && func_800BE184(play, &this->picto.actor, 100.0f, 10000, 0x4000, this->picto.actor.shape.rot.y)) { if (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) { this->bodyCollider.base.acFlags &= ~AC_HARD; @@ -1314,7 +1318,7 @@ void func_80B88378(EnKaizoku* this, PlayState* play) { } if (!func_80B85A00(this, play, false)) { - if (this->picto.actor.xzDistToPlayer < 210.0f && this->picto.actor.xzDistToPlayer > 150.0f && + if ((this->picto.actor.xzDistToPlayer < 210.0f) && (this->picto.actor.xzDistToPlayer > 150.0f) && Actor_IsFacingPlayer(&this->picto.actor, 0x1388)) { if (Actor_IsTargeted(play, &this->picto.actor)) { if (Rand_ZeroOne() > 0.5f) { @@ -1332,7 +1336,7 @@ void func_80B88378(EnKaizoku* this, PlayState* play) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_PIRATE_BREATH); } - if ((this->skelAnime.curFrame != 0.0f) && ((sp30 < 0 && sp2C > 0) || (sp30 < 4 && sp2C >= 5))) { + if ((this->skelAnime.curFrame != 0.0f) && (((sp30 < 0) && (sp2C > 0)) || ((sp30 < 4) && (sp2C >= 5)))) { Actor_PlaySfx(&this->picto.actor, NA_SE_EN_GERUDOFT_WALK); } } @@ -1414,7 +1418,7 @@ void func_80B88964(EnKaizoku* this, PlayState* play) { } this->unk_2D8 = 0; - if (this->frameCount <= curFrame && this->unk_2D0 < 2) { + if ((this->frameCount <= curFrame) && (this->unk_2D0 < 2)) { if (!Actor_IsFacingPlayer(&this->picto.actor, 0x1554)) { func_80B872A4(this); this->unk_2B2 = Rand_ZeroOne() * 5.0f + 5.0f; @@ -1584,7 +1588,7 @@ void func_80B891B8(EnKaizoku* this) { // EnKaizoku_Stunned void func_80B89280(EnKaizoku* this, PlayState* play) { if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) { - if (this->unk_2B8 != 0 && this->unk_2B8 < 60) { + if ((this->unk_2B8 != 0) && (this->unk_2B8 < 60)) { this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; } } @@ -1604,8 +1608,8 @@ void func_80B89280(EnKaizoku* this, PlayState* play) { this->unk_2D8 = 0; func_80B85A00(this, play, true); - if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX || - this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { + if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_SFX) || + (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) { Actor_SpawnIceEffects(play, &this->picto.actor, this->bodyPartsPos, ARRAY_COUNT(this->bodyPartsPos), 2, 0.7f, 0.4f); this->unk_2B8 = 0; @@ -1655,7 +1659,7 @@ void func_80B894C0(EnKaizoku* this, PlayState* play) { } } - if (this->picto.actor.xzDistToPlayer <= 65.0f && ((play->gameplayFrames % 8) != 0)) { + if ((this->picto.actor.xzDistToPlayer <= 65.0f) && ((play->gameplayFrames % 8) != 0)) { this->swordCollider.info.elemType = ELEMTYPE_UNK2; func_80B87F70(this); } else { @@ -1717,7 +1721,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { if (curFrame >= 25.0f) { player = GET_PLAYER(play); - if (this->subCamId == 0) { + if (this->subCamId == SUB_CAM_ID_DONE) { if (!CutsceneManager_IsNext(this->csId)) { CutsceneManager_Queue(this->csId); return; @@ -1743,7 +1747,7 @@ void func_80B8971C(EnKaizoku* this, PlayState* play) { player->actor.shape.rot.y = player->actor.world.rot.y = Math_Vec3f_Yaw(&player->actor.world.pos, &this->picto.actor.world.pos); - if (this->subCamId != 0) { + if (this->subCamId != SUB_CAM_ID_DONE) { this->subCamUp.x = 0.0f; this->subCamUp.y = 1.0f; this->subCamUp.z = 0.0f; @@ -1775,7 +1779,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { if (!(this->swordCollider.base.atFlags & AT_BOUNCED) && (this->swordCollider.base.atFlags & AT_HIT)) { if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { this->unk_2D0 = 2; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags |= ACTOR_FLAG_100000; if (!CutsceneManager_IsNext(this->csId)) { @@ -1793,7 +1797,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { Health_ChangeBy(play, 0x10); this->unk_2D0 = 2; - this->subCamId = 0; + this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.flags |= ACTOR_FLAG_100000; if (!CutsceneManager_IsNext(this->csId)) { @@ -1833,7 +1837,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { this->unk_2B8 = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM; } - /* fallthrough */ + // fallthrough case KAIZOKU_DMGEFF_1: if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_SFX) && (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) || @@ -1908,6 +1912,9 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { sp64 = 1; } break; + + default: + break; } if (sp64) { @@ -2104,11 +2111,11 @@ void EnKaizoku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultVec3f(&sFootOffset, &this->rightFootPos); } - if (limbIndex == KAIZOKU_LIMB_02 || limbIndex == KAIZOKU_LIMB_06 || limbIndex == KAIZOKU_LIMB_07 || - limbIndex == KAIZOKU_LIMB_08 || limbIndex == KAIZOKU_LIMB_0A || limbIndex == KAIZOKU_LIMB_0C || - limbIndex == KAIZOKU_LIMB_0D || limbIndex == KAIZOKU_LIMB_0F || limbIndex == KAIZOKU_LIMB_11 || - limbIndex == KAIZOKU_LIMB_12 || limbIndex == KAIZOKU_LIMB_L_FOOT || limbIndex == KAIZOKU_LIMB_14 || - limbIndex == KAIZOKU_LIMB_15 || limbIndex == KAIZOKU_LIMB_R_FOOT || limbIndex == KAIZOKU_LIMB_17) { + if ((limbIndex == KAIZOKU_LIMB_02) || (limbIndex == KAIZOKU_LIMB_06) || (limbIndex == KAIZOKU_LIMB_07) || + (limbIndex == KAIZOKU_LIMB_08) || (limbIndex == KAIZOKU_LIMB_0A) || (limbIndex == KAIZOKU_LIMB_0C) || + (limbIndex == KAIZOKU_LIMB_0D) || (limbIndex == KAIZOKU_LIMB_0F) || (limbIndex == KAIZOKU_LIMB_11) || + (limbIndex == KAIZOKU_LIMB_12) || (limbIndex == KAIZOKU_LIMB_L_FOOT) || (limbIndex == KAIZOKU_LIMB_14) || + (limbIndex == KAIZOKU_LIMB_15) || (limbIndex == KAIZOKU_LIMB_R_FOOT) || (limbIndex == KAIZOKU_LIMB_17)) { Matrix_MultZero(&this->bodyPartsPos[this->bodyPartsPosIndex]); this->bodyPartsPosIndex++; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 73de78707..86d74f69a 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -157,7 +157,7 @@ void EnKakasi_Init(Actor* thisx, PlayState* play) { this->unkHeight = (this->picto.actor.world.rot.z * 20.0f) + 60.0f; this->picto.actor.world.rot.z = 0; this->picto.actor.targetMode = 0; - if (this->picto.actor.world.rot.x > 0 && this->picto.actor.world.rot.x < 8) { + if ((this->picto.actor.world.rot.x > 0) && (this->picto.actor.world.rot.x < 8)) { this->picto.actor.targetMode = KAKASI_GET_TARGETMODE(thisx); } this->picto.actor.shape.rot.y = this->picto.actor.world.rot.y; @@ -208,12 +208,12 @@ s32 EnKakasi_ValidatePictograph(PlayState* play, Actor* thisx) { } void EnKakasi_CheckAnimationSfx(EnKakasi* this) { - if (this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING || this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL) { + if ((this->animIndex == ENKAKASI_ANIM_SIDEWAYS_SHAKING) || (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_STILL)) { if (Animation_OnFrame(&this->skelanime, 1.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING); } } - if (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR || this->animIndex == ENKAKASI_ANIM_SLOWROLL) { + if ((this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) || (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) { if (Animation_OnFrame(&this->skelanime, 4.0f) || Animation_OnFrame(&this->skelanime, 8.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_SWING); } @@ -225,7 +225,7 @@ void EnKakasi_CheckAnimationSfx(EnKakasi* this) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASHI_ROLL); } } - if (this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER || this->animIndex == ENKAKASI_ANIM_TWIRL) { + if ((this->animIndex == ENKAKASI_ANIM_SPIN_REACH_OFFER) || (this->animIndex == ENKAKASI_ANIM_TWIRL)) { if (Animation_OnFrame(&this->skelanime, 1.0f)) { Actor_PlaySfx(&this->picto.actor, NA_SE_EV_KAKASH_LONGI_ROLL); } @@ -274,12 +274,12 @@ void func_8096FAAC(EnKakasi* this, PlayState* play) { * goes off every frame of song teach, but... doing what? */ void func_8096FBB8(EnKakasi* this, PlayState* play) { - if (play->msgCtx.unk12048 == 0 || play->msgCtx.unk12048 == 1 || play->msgCtx.unk12048 == 2 || - play->msgCtx.unk12048 == 3 || play->msgCtx.unk12048 == 4) { + if ((play->msgCtx.unk12048 == 0) || (play->msgCtx.unk12048 == 1) || (play->msgCtx.unk12048 == 2) || + (play->msgCtx.unk12048 == 3) || (play->msgCtx.unk12048 == 4)) { // why not 0 < x < 4? fewer branches this->unk190++; } - if (this->unk190 != 0 && this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { + if ((this->unk190 != 0) && (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } if (this->unk190 > 8) { @@ -299,8 +299,8 @@ void EnKakasi_InitTimeSkipDialogue(EnKakasi* this) { void EnKakasi_TimeSkipDialogue(EnKakasi* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (gSaveContext.respawnFlag != -4 && gSaveContext.respawnFlag != -8) { - if (gSaveContext.save.time != CLOCK_TIME(6, 0) && gSaveContext.save.time != CLOCK_TIME(18, 0) && + if ((gSaveContext.respawnFlag != -4) && (gSaveContext.respawnFlag != -8)) { + if ((gSaveContext.save.time != CLOCK_TIME(6, 0)) && (gSaveContext.save.time != CLOCK_TIME(18, 0)) && !CHECK_EVENTINF(EVENTINF_17)) { if (this->picto.actor.textId == 0) { @@ -359,7 +359,7 @@ void EnKakasi_IdleStanding(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); this->skelanime.playSpeed = 2.0f; } - } else if (saveContextDay == 3 && gSaveContext.save.isNight) { + } else if ((saveContextDay == 3) && gSaveContext.save.isNight) { this->skelanime.playSpeed = 1.0f; if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { EnKakasi_ChangeAnim(this, 1); @@ -391,16 +391,16 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { Math_SmoothStepToS(&this->picto.actor.shape.rot.y, this->picto.actor.yawTowardsPlayer, 5, 2000, 0); // if first dialogue - if (this->picto.actor.textId != 0x1644 && this->animeFrameCount <= currentAnimeFrame && - this->animIndex == ENKAKASI_ANIM_SLOWROLL) { + if ((this->picto.actor.textId != 0x1644) && (this->animeFrameCount <= currentAnimeFrame) && + (this->animIndex == ENKAKASI_ANIM_SLOWROLL)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); this->unkCounter1A4 = 0; } // if dialogue: oh sorry come back again - if (this->picto.actor.textId == 0x1651 || this->picto.actor.textId == 0x1659) { - if (this->animeFrameCount <= currentAnimeFrame && this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER) { + if ((this->picto.actor.textId == 0x1651) || (this->picto.actor.textId == 0x1659)) { + if ((this->animeFrameCount <= currentAnimeFrame) && (this->animIndex != ENKAKASI_ANIM_SPIN_REACH_OFFER)) { if (++this->unkCounter1A4 >= 2) { this->unkCounter1A4 = 0; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -408,7 +408,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } } - if (this->unkState1A8 == 2 && this->unkState196 == 2) { + if ((this->unkState1A8 == 2) && (this->unkState196 == 2)) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_73); this->unkState1A8 = 0; } @@ -417,7 +417,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { Message_CloseTextbox(play); if (this->talkState == TEXT_STATE_5) { // bad song input - if (this->unkState196 == 2 && this->picto.actor.textId == 0x1647) { + if ((this->unkState196 == 2) && (this->picto.actor.textId == 0x1647)) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_END); } @@ -429,7 +429,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } - if (saveContextDay2 == 3 && gSaveContext.save.isNight) { + if ((saveContextDay2 == 3) && gSaveContext.save.isNight) { // text: dangerous outside this->picto.actor.textId = 0x164F; } else if (gSaveContext.save.isNight) { @@ -443,8 +443,8 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { Message_ContinueTextbox(play, this->picto.actor.textId); return; - } else if (this->picto.actor.textId == 0x165D || this->picto.actor.textId == 0x165F || - this->picto.actor.textId == 0x1660 || this->picto.actor.textId == 0x1652) { + } else if ((this->picto.actor.textId == 0x165D) || (this->picto.actor.textId == 0x165F) || + (this->picto.actor.textId == 0x1660) || (this->picto.actor.textId == 0x1652)) { func_800B7298(play, &this->picto.actor, PLAYER_CSMODE_4); if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -462,7 +462,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { } return; - } else if (this->picto.actor.textId == 0x1645 || this->picto.actor.textId == 0x164E) { + } else if ((this->picto.actor.textId == 0x1645) || (this->picto.actor.textId == 0x164E)) { this->picto.actor.textId = 0x1650; // "Shall we dance? No Yes" if (this->animIndex != ENKAKASI_ANIM_SIDEWAYS_SHAKING) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); @@ -517,7 +517,7 @@ void EnKakasi_RegularDialogue(EnKakasi* this, PlayState* play) { this->picto.actor.textId = 0x1658; } else if (this->picto.actor.textId == 0x165C) { this->picto.actor.textId = 0x165E; - } else if (saveContextDay == 3 && gSaveContext.save.isNight) { + } else if ((saveContextDay == 3) && gSaveContext.save.isNight) { this->picto.actor.textId = 0x164F; } else { this->picto.actor.textId = 0x1652; @@ -642,11 +642,12 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { void EnKakasi_PostSongLearnTwirl(EnKakasi* this, PlayState* play) { f32 animeFrame = this->skelanime.curFrame; - if (this->postTeachTimer == 0 && this->animIndex != ENKAKASI_ANIM_TWIRL) { + if ((this->postTeachTimer == 0) && (this->animIndex != ENKAKASI_ANIM_TWIRL)) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL); this->skelanime.playSpeed = 2.0f; } - if (this->postTeachTimer == 0 && this->animIndex == ENKAKASI_ANIM_TWIRL && this->animeFrameCount <= animeFrame) { + if ((this->postTeachTimer == 0) && (this->animIndex == ENKAKASI_ANIM_TWIRL) && + (this->animeFrameCount <= animeFrame)) { EnKakasi_SetupPostSongLearnDialogue(this, play); } } @@ -682,16 +683,16 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { this->unk190 = 1; } - if (this->picto.actor.textId == 0x1648 && this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR && - this->animeFrameCount <= tempAnimFrame) { + if ((this->picto.actor.textId == 0x1648) && (this->animIndex == ENKAKASI_ANIM_HOPPING_REGULAR) && + (this->animeFrameCount <= tempAnimFrame)) { this->unkCounter1A4++; if (this->unkCounter1A4 >= 2) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_ARMS_CROSSED_ROCKING); } } - if (this->picto.actor.textId == 0x164B && this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING && - this->animeFrameCount <= tempAnimFrame) { + if ((this->picto.actor.textId == 0x164B) && (this->animIndex == ENKAKASI_ANIM_ARMS_CROSSED_ROCKING) && + (this->animeFrameCount <= tempAnimFrame)) { this->unkCounter1A4++; if (this->unkCounter1A4 >= 2) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SPIN_REACH_OFFER); @@ -762,7 +763,7 @@ void EnKakasi_PostSongLearnDialogue(EnKakasi* this, PlayState* play) { EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_TWIRL); } else { - if (this->picto.actor.textId == 0x164C || this->picto.actor.textId == 0x1661) { + if ((this->picto.actor.textId == 0x164C) || (this->picto.actor.textId == 0x1661)) { EnKakasi_SetupDigAway(this); return; } @@ -797,7 +798,7 @@ void EnKakasi_DancingRemark(EnKakasi* this, PlayState* play) { } else { CutsceneManager_StartWithPlayerCs(this->csIdList[0], &this->picto.actor); this->subCamId = CutsceneManager_GetCurrentSubCamId(this->picto.actor.csId); - if (currentDay == 3 && gSaveContext.save.isNight) { + if ((currentDay == 3) && gSaveContext.save.isNight) { EnKakasi_SetupDigAway(this); } else { Audio_PlaySubBgm(NA_BGM_SARIAS_SONG); @@ -833,15 +834,14 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { Math_Vec3f_Copy(&localVec3f, &this->subCamEyeNext); OLib_Vec3fAdd(&this->picto.actor.home, &localVec3f, &this->subCamEyeNext, OLIB_ADD_OFFSET); - if (1) {} this->subCamAtNext.x = D_80971EEC[this->unk190].x + this->unk22C.x; this->subCamAtNext.y = D_80971EEC[this->unk190].y + this->unk22C.y; this->subCamAtNext.z = D_80971EEC[this->unk190].z + this->unk22C.z; - if (this->unk190 != 6 && this->unk190 != 7) { + if ((this->unk190 != 6) && (this->unk190 != 7)) { Math_Vec3f_Copy(&this->subCamEye, &this->subCamEyeNext); Math_Vec3f_Copy(&this->subCamAt, &this->subCamAtNext); } - if (this->unk190 >= 7 && this->unk190 != 0xE) { + if ((this->unk190 >= 7) && (this->unk190 != 0xE)) { this->picto.actor.shape.rot.y += 0x800; } @@ -853,57 +853,64 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { // twirling this->unk204 = 0x28; this->unk190++; - return; + break; + case 1: // end of twirl, start shaking back and forth - if (this->unk204 == 0 && this->animeFrameCount <= currentFrame) { + if ((this->unk204 == 0) && (this->animeFrameCount <= currentFrame)) { this->unk204 = 0x14; this->unk190++; EnKakasi_ChangeAnim(this, ENKAKASI_ANIM_SIDEWAYS_SHAKING); } - return; + break; + case 2: // camera view on the left if (this->unk204 == 0) { this->unk204 = 0x14; this->unk190++; } - return; + break; + case 3: // camera view on the right if (this->unk204 == 0) { this->unk204 = 0x14; this->unk190++; } - return; + break; + case 4: // camera view close up front if (this->unk204 == 0) { this->unk204 = 0x14; this->unk190++; } - return; + break; + case 5: // camera view zoomed out front if (this->unk204 == 0) { this->unk204 = 0xF; this->unk190++; } - return; + break; + case 6: // zoom in and sweep down in from case 5 if (this->unk204 == 0) { this->unk204 = 0xF; this->unk190++; } - return; + break; + case 7: // zoom in close from case 6 if (this->unk204 == 0) { this->unk204 = 0xA; this->unk190++; } - return; + break; case 8: case 9: @@ -921,7 +928,8 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->unk204 = 0x14; } } - return; + break; + case 14: // goes off once for some camera changes, // otherwise it's the end when camera is back to normal and Player is confused @@ -933,10 +941,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); func_80169EFC(&play->state); - //! FAKE - if (1) {} - - if (gSaveContext.save.time > CLOCK_TIME(18, 0) || gSaveContext.save.time < CLOCK_TIME(6, 0)) { + if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) { gSaveContext.save.time = CLOCK_TIME(6, 0); gSaveContext.respawnFlag = -4; SET_EVENTINF(EVENTINF_27); @@ -948,6 +953,10 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { this->unk190 = 0; this->actionFunc = EnKakasi_DoNothing; } + break; + + default: + break; } } @@ -1031,8 +1040,8 @@ void EnKakasi_SetupIdleUnderground(EnKakasi* this) { } void EnKakasi_IdleUnderground(EnKakasi* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && this->picto.actor.xzDistToPlayer < this->songSummonDist && - (BREG(1) != 0 || play->msgCtx.ocarinaMode == 0xD)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_08) && (this->picto.actor.xzDistToPlayer < this->songSummonDist) && + ((BREG(1) != 0) || (play->msgCtx.ocarinaMode == 0xD))) { this->picto.actor.flags &= ~ACTOR_FLAG_CANT_LOCK_ON; play->msgCtx.ocarinaMode = 4; this->actionFunc = EnKakasi_SetupRiseOutOfGround; @@ -1119,7 +1128,7 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { DECR(this->unk204); if (this->unkState196 != 5) { - if (this->unk1BC.x != 0.0f || this->unk1BC.z != 0.0f) { + if ((this->unk1BC.x != 0.0f) || (this->unk1BC.z != 0.0f)) { Math_Vec3f_Copy(&this->picto.actor.focus.pos, &this->unk1BC); this->picto.actor.focus.pos.y += 10.0f; if (this->subCamId == SUB_CAM_ID_DONE) { diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index ea7faef57..fbb8346e5 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -159,7 +159,7 @@ void func_80B2654C(EnKendoJs* this, PlayState* play) { s32 phi_v0; s32 sp30; - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { if (CURRENT_DAY != 0) { sp30 = CURRENT_DAY - 1; } else { diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index dd26ba172..e80807b08 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -72,7 +72,7 @@ void EnKgy_Init(Actor* thisx, PlayState* play) { this->actionFunc = func_80B419B0; this->actor.textId = 0xC4E; this->unk_29C |= 1; - this->unk_2EA = 3; + this->getItemId = GI_RUPEE_10; } else { EnKgy_ChangeAnim(this, 4, ANIMMODE_LOOP, 0); this->actionFunc = func_80B42714; @@ -420,12 +420,12 @@ void func_80B4163C(EnKgy* this, PlayState* play) { if (SkelAnime_Update(&this->skelAnime)) { if (this->unk_2D2 == 6) { - if (this->unk_2EA > 0) { + if (this->getItemId > GI_NONE) { EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, 0.0f); - this->unk_2EA--; + this->getItemId--; } else { EnKgy_ChangeAnim(this, 9, ANIMMODE_ONCE, -5.0f); - this->unk_2EA = (s32)Rand_ZeroFloat(3.0f) + 2; + this->getItemId = (s32)Rand_ZeroFloat(GI_RUPEE_PURPLE - GI_RUPEE_BLUE) + GI_RUPEE_BLUE; } } else { EnKgy_ChangeAnim(this, 6, ANIMMODE_ONCE, -5.0f); @@ -598,7 +598,7 @@ void func_80B41D64(EnKgy* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_10000; func_800B8500(&this->actor, play, 1000.0f, 1000.0f, PLAYER_IA_MINUS1); } else { - Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f); + Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f); } func_80B40EE8(this, play); } @@ -790,16 +790,16 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC50: if (func_80B40D8C(play)) { - this->unk_2EA = 57; + this->getItemId = GI_SWORD_GILDED; this->actor.textId = 0xC53; } else { - this->unk_2EA = 56; + this->getItemId = GI_SWORD_RAZOR; this->actor.textId = 0xC51; } Message_CloseTextbox(play); this->actionFunc = func_80B41D64; func_80B413C8(this); - Actor_OfferGetItem(&this->actor, play, this->unk_2EA, 2000.0f, 1000.0f); + Actor_OfferGetItem(&this->actor, play, this->getItemId, 2000.0f, 1000.0f); break; case 0xC51: diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h index 8207678fd..94f2aabd5 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.h @@ -31,7 +31,7 @@ typedef struct EnKgy { /* 0x2E4 */ s16 unk_2E4; /* 0x2E6 */ s16 unk_2E6; /* 0x2E8 */ s16 unk_2E8; - /* 0x2EA */ s16 unk_2EA; + /* 0x2EA */ s16 getItemId; /* 0x2EC */ LightInfo lightInfo; /* 0x2FC */ LightNode* lightNode; /* 0x300 */ s16 unk_300; diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 7fb2a13a3..44bb67443 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -252,7 +252,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { s32 pad; s16 sp2E; - if (sAnimIndex != 9 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + if ((sAnimIndex != 9) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { if (sAnimIndex == 3) { if (D_80AC0250 < 3) { D_80AC0250++; @@ -268,7 +268,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - if (sAnimIndex == 13 && Animation_OnFrame(&this->skelAnime, 37.0f)) { + if ((sAnimIndex == 13) && Animation_OnFrame(&this->skelAnime, 37.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK); } @@ -291,7 +291,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - if (this->pathIndex < this->pathPointsCount - 1) { + if (this->pathIndex < (this->pathPointsCount - 1)) { this->pathIndex++; } else { this->pathIndex = 0; @@ -345,7 +345,7 @@ void EnMa4_Wait(EnMa4* this, PlayState* play) { } } - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { EnMa4_StartDialogue(this, play); EnMa4_SetupDialogueHandler(this); } else if (this->type != MA4_TYPE_ALIENS_WON || ABS_ALT(yaw) < 0x4000) { @@ -483,6 +483,9 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { func_80151BB4(play, 5); } break; + + default: + break; } } } @@ -614,6 +617,9 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { this->textId = 0x3359; } break; + + default: + break; } } } @@ -629,9 +635,6 @@ void EnMa4_SetupDialogueHandler(EnMa4* this) { void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) { switch (Message_GetState(&play->msgCtx)) { - default: - break; - case TEXT_STATE_CHOICE: // Player answered a question EnMa4_HandlePlayerChoice(this, play); break; @@ -652,6 +655,9 @@ void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) { case TEXT_STATE_CLOSING: case TEXT_STATE_3: break; + + default: + break; } if (this->type != MA4_TYPE_ALIENS_WON) { @@ -818,12 +824,15 @@ void EnMa4_EponasSongCs(EnMa4* this, PlayState* play) { this->hasBow = false; EnMa4_ChangeAnim(this, 4); break; + + default: + break; } } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); - if (sCueId == 2 && this->animTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + if ((sCueId == 2) && (this->animTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMa4_ChangeAnim(this, 7); } } else { @@ -845,7 +854,7 @@ void EnMa4_EndEponasSongCs(EnMa4* this, PlayState* play) { Player* player = GET_PLAYER(play); this->actor.flags |= ACTOR_FLAG_10000; - if (Actor_ProcessTalkRequest(&this->actor, &play->state) != 0) { + if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { player->stateFlags1 &= ~PLAYER_STATE1_20; Message_StartTextbox(play, 0x334C, &this->actor); this->textId = 0x334C; @@ -1054,7 +1063,9 @@ void EnMa4_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, } else if (limbIndex == ROMANI_LIMB_LEFT_HAND) { if (this->hasBow == true) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gRomaniBowDL); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1064,6 +1075,7 @@ void EnMa4_Draw(Actor* thisx, PlayState* play) { EnMa4* this = THIS; OPEN_DISPS(play->state.gfxCtx); + if (this->type == MA4_TYPE_ALIENS_WON) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gRomaniWoodenBoxDL); diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c index 89ee4aada..00281d6e4 100644 --- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c +++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c @@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { this->unk320 = 0; this->eyeTexIndex = 0; - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_SetFaceExpression(this, 0, 1); } else { EnMaYto_SetFaceExpression(this, 5, 2); @@ -186,13 +186,13 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { switch (this->type) { case MA_YTO_TYPE_DEFAULT: - if (CURRENT_DAY == 3 && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; case MA_YTO_TYPE_DINNER: - if (CURRENT_DAY != 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; } break; @@ -205,7 +205,7 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { } else if (((this->actor.params & 0x0F00) >> 8) == 0) { return false; } - if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) { + if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) { return false; } break; @@ -218,6 +218,7 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_4: + default: break; } @@ -304,8 +305,8 @@ s32 EnMaYto_SearchRomani(EnMaYto* this, PlayState* play) { EnMaYts* romani = (EnMaYts*)npcActor; s16 romaniType = EN_MA_YTS_GET_TYPE(&romani->actor); - if ((this->type == MA_YTO_TYPE_DINNER && romaniType == MA_YTS_TYPE_SITTING) || - (this->type == MA_YTO_TYPE_BARN && romaniType == MA_YTS_TYPE_BARN)) { + if (((this->type == MA_YTO_TYPE_DINNER) && (romaniType == MA_YTS_TYPE_SITTING)) || + ((this->type == MA_YTO_TYPE_BARN) && (romaniType == MA_YTS_TYPE_BARN))) { this->actor.child = &romani->actor; romani->actor.parent = &this->actor; return true; @@ -394,8 +395,8 @@ void EnMaYto_DefaultWait(EnMaYto* this, PlayState* play) { s16 direction; direction = rotY - this->actor.yawTowardsPlayer; - if (Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x3000, 0x100) == 0 && - this->animIndex == 1) { + if (!Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 5, 0x3000, 0x100) && + (this->animIndex == 1)) { this->animIndex = 11; EnMaYto_ChangeAnim(this, 11); } @@ -439,7 +440,7 @@ void EnMaYto_DefaultDialogueHandler(EnMaYto* this, PlayState* play) { } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 5, 0x3000, 0x100); - if (this->textId == 0x3395 && this->skelAnime.animation == &gCremiaSpreadArmsStartAnim && + if ((this->textId == 0x3395) && (this->skelAnime.animation == &gCremiaSpreadArmsStartAnim) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMaYto_ChangeAnim(this, 4); } @@ -490,12 +491,15 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { this->textId = 0x3396; func_80151BB4(play, 6); break; + + default: + break; } } } void EnMaYto_SetupDinnerWait(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 0); this->unk31E = 0; } else { @@ -516,7 +520,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } else { Actor* child = this->actor.child; - if (child != NULL && Actor_ProcessTalkRequest(child, &play->state)) { + if ((child != NULL) && Actor_ProcessTalkRequest(child, &play->state)) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_DinnerStartDialogue(this, play); EnMaYto_SetupDinnerDialogueHandler(this); @@ -524,7 +528,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { func_800B8614(&this->actor, play, 120.0f); child = this->actor.child; - if (child != NULL && CURRENT_DAY != 2) { + if ((child != NULL) && (CURRENT_DAY != 2)) { s16 childDirection = child->shape.rot.y - child->yawTowardsPlayer; if (ABS_ALT(childDirection) < 0x4000) { @@ -536,7 +540,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -682,12 +686,15 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { this->textId = 0x33A8; func_80151BB4(play, 6); break; + + default: + break; } } } void EnMaYto_SetupBarnWait(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_ChangeAnim(this, 13); func_80B90E50(this, 0); this->unk31E = 0; @@ -711,11 +718,11 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } else { Actor* child = this->actor.child; - if (child != NULL && Actor_ProcessTalkRequest(child, &play->state)) { + if ((child != NULL) && Actor_ProcessTalkRequest(child, &play->state)) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_BarnStartDialogue(this, play); EnMaYto_SetupBarnDialogueHandler(this); - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || ABS_ALT(direction) < 0x2000) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || (ABS_ALT(direction) < 0x2000)) { func_800B8614(&this->actor, play, 100.0f); child = this->actor.child; @@ -727,7 +734,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -948,6 +955,9 @@ void EnMaYto_AfterMilkRunChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetupPostMilkRunGiveReward(this); EnMaYto_PostMilkRunGiveReward(this, play); break; + + default: + break; } } } @@ -1047,12 +1057,15 @@ void EnMaYto_WarmFuzzyFeelingCs(EnMaYto* this, PlayState* play) { case 3: EnMaYto_ChangeAnim(this, 22); break; + + default: + break; } } } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); - if (sCueId == 2 && this->skelAnime.animation == &gCremiaHugStartAnim && + if ((sCueId == 2) && (this->skelAnime.animation == &gCremiaHugStartAnim) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { EnMaYto_ChangeAnim(this, 20); } @@ -1066,14 +1079,14 @@ void EnMaYto_SetupPostMilkRunWaitDialogueEnd(EnMaYto* this) { } void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) { - if (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE || Message_GetState(&play->msgCtx) == TEXT_STATE_5) { - if (Message_ShouldAdvance(play) && Message_GetState(&play->msgCtx) == TEXT_STATE_5) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) || (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) { + if (Message_ShouldAdvance(play) && (Message_GetState(&play->msgCtx) == TEXT_STATE_5)) { func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); Message_CloseTextbox(play); } } - if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE && play->msgCtx.unk120B1 == 0) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.unk120B1 == 0)) { EnMaYto_SetupPostMilkRunEnd(this); } } @@ -1096,7 +1109,7 @@ void EnMaYto_PostMilkRunEnd(EnMaYto* this, PlayState* play) { void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { if (CURRENT_DAY == 1) { - if (Player_GetMask(play) != PLAYER_MASK_NONE && gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { switch (Player_GetMask(play)) { case PLAYER_MASK_ROMANI: Message_StartTextbox(play, 0x235D, &this->actor); @@ -1155,7 +1168,7 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { switch (CURRENT_DAY) { case 1: - if (Player_GetMask(play) != PLAYER_MASK_NONE && gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { switch (Player_GetMask(play)) { case PLAYER_MASK_ROMANI: Message_StartTextbox(play, 0x235D, &this->actor); @@ -1217,6 +1230,9 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { this->textId = 0x33A7; } break; + + default: + break; } } @@ -1324,7 +1340,7 @@ void EnMaYto_UpdateEyes(EnMaYto* this) { void func_80B90E50(EnMaYto* this, s16 arg1) { EnMaYts* romani = (EnMaYts*)this->actor.child; - if (romani != NULL && romani->actor.id == ACTOR_EN_MA_YTS) { + if ((romani != NULL) && (romani->actor.id == ACTOR_EN_MA_YTS)) { romani->unk_32C = arg1; } } @@ -1344,7 +1360,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth } void EnMaYto_InitFaceExpression(EnMaYto* this) { - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYto_SetFaceExpression(this, 0, 1); EnMaYto_SetRomaniFaceExpression(this, 0, 0); } else { @@ -1372,27 +1388,33 @@ s32 EnMaYto_HasSpokenToPlayerToday(void) { return true; } break; + + default: + break; } return false; } s32 EnMaYto_HasSpokenToPlayer(void) { - // Please note no case here has a `break`. switch (CURRENT_DAY) { case 3: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_10)) { return true; } - + // fallthrough case 2: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_08)) { return true; } - + // fallthrough case 1: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_13_04)) { return true; } + break; + + default: + break; } return false; } @@ -1410,6 +1432,9 @@ void EnMaYto_SetTalkedFlag(void) { case 3: SET_WEEKEVENTREG(WEEKEVENTREG_13_10); break; + + default: + break; } } @@ -1458,7 +1483,8 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - if (this->type == MA_YTO_TYPE_BARN && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + + if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL); } diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c index 8eacc7962..163f89fcd 100644 --- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c +++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c @@ -123,7 +123,7 @@ void func_80B8D12C(EnMaYts* this, PlayState* play) { Player* player = GET_PLAYER(play); s16 trackingMode = (this->unk_32C == 2) ? NPC_TRACKING_NONE : NPC_TRACKING_PLAYER_AUTO_TURN; - if (this->unk_32C == 0 || this->actor.parent == NULL) { + if ((this->unk_32C == 0) || (this->actor.parent == NULL)) { this->interactInfo.trackPos = player->actor.world.pos; this->interactInfo.trackPos.y -= -10.0f; } else { @@ -144,7 +144,7 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SITTING: this->actor.targetMode = 6; // Day 1 or "Winning" the alien invasion - if (CURRENT_DAY == 1 || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYts_ChangeAnim(this, 14); } else { EnMaYts_ChangeAnim(this, 18); @@ -188,6 +188,9 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { return false; } break; + + default: + break; } break; @@ -195,7 +198,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { // Failing the alien invasion if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { return false; - } else if (gSaveContext.save.time >= CLOCK_TIME(20, 0) && CURRENT_DAY == 3) { + } else if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) { return false; } break; @@ -209,6 +212,9 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_ENDCREDITS: break; + + default: + break; } return true; @@ -266,7 +272,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->mouthTexIndex = 0; this->unk_32C = 2; EnMaYts_SetupEndCreditsHandler(this); - } else if (CURRENT_DAY == 2 && gSaveContext.save.isNight == 1 && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { EnMaYts_SetupStartDialogue(this); } else { EnMaYts_SetupDoNothing(this); @@ -406,6 +412,9 @@ void EnMaYts_EndCreditsHandler(EnMaYts* this, PlayState* play) { this->hasBow = true; EnMaYts_ChangeAnim(this, 20); break; + + default: + break; } } } @@ -526,7 +535,9 @@ void EnMaYts_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro } else if (limbIndex == ROMANI_LIMB_LEFT_HAND) { if (this->hasBow == true) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, gRomaniBowDL); + CLOSE_DISPS(play->state.gfxCtx); } } diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index e7941a4d5..315bc1ffd 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -608,9 +608,11 @@ void EnMinifrog_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* if ((limbIndex == 7) || (limbIndex == 8)) { OPEN_DISPS(play->state.gfxCtx); + Matrix_ReplaceRotation(&play->billboardMtxF); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, *dList); + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.c b/src/overlays/actors/ovl_En_Muto/z_en_muto.c index 441c27cdc..6eceb89d6 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -74,7 +74,7 @@ void EnMuto_Init(Actor* thisx, PlayState* play) { this->textIdIndex = 3; } - if (gSaveContext.save.day != 3 || !gSaveContext.save.isNight) { + if ((gSaveContext.save.day != 3) || !gSaveContext.save.isNight) { Actor_Kill(&this->actor); } } else { @@ -113,7 +113,7 @@ void EnMuto_SetHeadRotation(EnMuto* this) { s32 yawRotToTarget = ABS_ALT(BINANG_SUB(this->yawTowardsTarget, this->actor.world.rot.y)); this->headRotTarget.y = 0; - if (this->actor.xzDistToPlayer < 200.0f && yawRotToTarget < 0x4E20) { + if ((this->actor.xzDistToPlayer < 200.0f) && (yawRotToTarget < 0x4E20)) { this->headRotTarget.y = BINANG_SUB(this->yawTowardsTarget, this->actor.world.rot.y); if (this->headRotTarget.y > 0x2710) { this->headRotTarget.y = 0x2710; @@ -146,7 +146,7 @@ void EnMuto_Idle(EnMuto* this, PlayState* play) { if (1) {} // Needed to match - if (!this->isInMayorsRoom && Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { + if (!this->isInMayorsRoom && (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK)) { this->actor.textId = 0x2363; } @@ -229,8 +229,8 @@ void EnMuto_InDialogue(EnMuto* this, PlayState* play) { } } - if (play->msgCtx.currentTextId == 0x2AC6 || play->msgCtx.currentTextId == 0x2AC7 || - play->msgCtx.currentTextId == 0x2AC8) { + if ((play->msgCtx.currentTextId == 0x2AC6) || (play->msgCtx.currentTextId == 0x2AC7) || + (play->msgCtx.currentTextId == 0x2AC8)) { this->skelAnime.playSpeed = 0.0f; this->yawTowardsTarget = this->actor.yawTowardsPlayer; this->skelAnime.curFrame = 30.0f; @@ -254,7 +254,7 @@ void EnMuto_Update(Actor* thisx, PlayState* play2) { EnMuto_SetHeadRotation(this); } - if (this->isInMayorsRoom && gSaveContext.save.day == 3 && gSaveContext.save.isNight) { + if (this->isInMayorsRoom && (gSaveContext.save.day == 3) && gSaveContext.save.isNight) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index 9f364c2c6..03cdad42c 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -188,6 +188,7 @@ void EnNiw_AnimateWingHead(EnNiw* this, PlayState* play, s16 animationState) { this->targetLimbRots[2] = 0.0f; // both wingRotZ this->targetLimbRots[1] = 0.0f; break; + case NIW_ANIM_HEAD_PECKING: this->unkTimer24E = 3; this->targetLimbRots[2] = 7000.0f * tempOne; // both wingRotZ @@ -235,6 +236,9 @@ void EnNiw_AnimateWingHead(EnNiw* this, PlayState* play, s16 animationState) { this->targetLimbRots[7] = 10000.0f; } break; + + default: + break; } } @@ -271,7 +275,7 @@ void EnNiw_SpawnAttackNiw(EnNiw* this, PlayState* play) { Vec3f newNiwPos; Actor* attackNiw; - if (this->attackNiwSpawnTimer == 0 && this->attackNiwCount < 7) { + if ((this->attackNiwSpawnTimer == 0) && (this->attackNiwCount < 7)) { xView = play->view.at.x - play->view.eye.x; yView = play->view.at.y - play->view.eye.y; zView = play->view.at.z - play->view.eye.z; @@ -312,7 +316,7 @@ void EnNiw_UpdateRunning(EnNiw* this, PlayState* play, s32 isStormCucco) { runningDirection = -runningAngles[isStormCucco]; } - if (isStormCucco == true && (this->runAwayTimer == 0 || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) { + if ((isStormCucco == true) && ((this->runAwayTimer == 0) || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL))) { this->runAwayTimer = 150; if (this->yawTimer == 0) { this->yawTimer = 70; @@ -367,7 +371,7 @@ void EnNiw_Idle(EnNiw* this, PlayState* play) { Math_ApproachF(&this->targetLimbRots[9], sHeadRotations[this->headRotationToggle], 0.5f, 4000.0f); // head rot } - if (this->unkIdleTimer2 == 0 && this->unkIdleTimer == 0) { + if ((this->unkIdleTimer2 == 0) && (this->unkIdleTimer == 0)) { this->unk298++; if (this->unk298 > 7) { this->unkIdleTimer2 = Rand_ZeroFloat(30.0f); @@ -469,14 +473,14 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { void EnNiw_Thrown(EnNiw* this, PlayState* play) { if (this->unk2EC == 0) { - if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { - this->unk2EC = 1; - this->hoppingTimer = 80; // hop timer - this->actor.speed = 0.0f; - this->actor.velocity.y = 4.0f; - } else { - return; // wait until back on floor + if (!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + // wait until back on floor + return; } + this->unk2EC = 1; + this->hoppingTimer = 80; + this->actor.speed = 0.0f; + this->actor.velocity.y = 4.0f; } else { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->sfxTimer1 = 0; @@ -683,10 +687,10 @@ void EnNiw_LandBeforeIdle(EnNiw* this, PlayState* play) { } void EnNiw_CheckRage(EnNiw* this, PlayState* play) { - if (!this->isStormActive && this->iframeTimer == 0 && this->niwType == NIW_TYPE_REGULAR) { + if (!this->isStormActive && (this->iframeTimer == 0) && (this->niwType == NIW_TYPE_REGULAR)) { // is this used? this is before we even know if we've been hit - if (this->niwState != NIW_STATE_RUNNING && this->unk2BC.x != 90000.0f) { + if ((this->niwState != NIW_STATE_RUNNING) && (this->unk2BC.x != 90000.0f)) { this->iframeTimer = 10; this->sfxTimer1 = 30; this->unk29E = 1; @@ -703,7 +707,7 @@ void EnNiw_CheckRage(EnNiw* this, PlayState* play) { this->actor.colChkInfo.health--; } - if (!sCuccoStormActive && this->actor.colChkInfo.health == 0) { + if (!sCuccoStormActive && (this->actor.colChkInfo.health == 0)) { this->runAwayTimer = 100; // main cucco will run away after storm starts sCuccoStormActive = true; this->unk298 = 0; @@ -774,7 +778,7 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z; featherScale = Rand_ZeroFloat(6.0f) + 6.0f; - if (this->unk29E == 2 && this->unk308 != 0) { + if ((this->unk29E == 2) && (this->unk308 != 0)) { pos.y += 10.0f; } @@ -817,7 +821,7 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); // if cucco is off the map - if (this->actor.floorHeight <= BGCHECK_Y_MIN || this->actor.floorHeight >= BGCHECK_Y_MAX) { + if ((this->actor.floorHeight <= BGCHECK_Y_MIN) || (this->actor.floorHeight >= BGCHECK_Y_MAX)) { Vec3f viewAtToEye; // Direction vector for the direction the camera is facing @@ -881,12 +885,12 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { return; } - if (this->isStormActive && (this->actor.xyzDistToPlayerSq < SQ(dist)) && player->invincibilityTimer == 0) { + if (this->isStormActive && (this->actor.xyzDistToPlayerSq < SQ(dist)) && (player->invincibilityTimer == 0)) { func_800B8D50(play, &this->actor, 2.0f, this->actor.world.rot.y, 0.0f, 0x10); } EnNiw_CheckRage(this, play); - if (this->flutterSfxTimer == 0 && this->niwState == NIW_STATE_HELD) { + if ((this->flutterSfxTimer == 0) && (this->niwState == NIW_STATE_HELD)) { this->flutterSfxTimer = 7; Actor_PlaySfx(&this->actor, NA_SE_EN_CHICKEN_FLUTTER); } @@ -901,13 +905,13 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { } } - if (!this->isStormActive && this->niwType == NIW_TYPE_REGULAR) { + if (!this->isStormActive && (this->niwType == NIW_TYPE_REGULAR)) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); if (play) {} - if (this->niwState != NIW_STATE_HELD && this->niwState != NIW_STATE_FALLING) { + if ((this->niwState != NIW_STATE_HELD) && (this->niwState != NIW_STATE_FALLING)) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index afd6eea3e..ac1e9749a 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -164,7 +164,7 @@ s32 EnNwc_IsFound(EnNwc* this, PlayState* play) { return false; } - if ((player->stateFlags3 & PLAYER_STATE3_20000000) && this->actor.xzDistToPlayer < 100.0f) { + if ((player->stateFlags3 & PLAYER_STATE3_20000000) && (this->actor.xzDistToPlayer < 100.0f)) { return true; } @@ -178,26 +178,34 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) { this->stateTimer = 10; this->actionFunc = EnNwc_CheckForBreman; break; + case NWC_STATE_TURNING: this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f; this->actionFunc = EnNwc_Turn; - this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(65536.0f); + this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(0x10000); break; + case NWC_STATE_HOPPING_FORWARD: this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f; this->actionFunc = EnNwc_HopForward; break; + case NWC_STATE_FOLLOWING: this->actionFunc = EnNwc_Follow; this->transformTimer = 0; this->randomRot = (s16)(s32)randPlusMinusPoint5Scaled(10000.0f); break; + case NWC_STATE_RUNNING: - this->actor.world.rot.y = this->actor.home.rot.z * 0x3000 & 0xFFFF; // Fake Match?: & 0xFFFF + //! FAKE: & 0xFFFF + this->actor.world.rot.y = this->actor.home.rot.z * 0x3000 & 0xFFFF; this->actor.shape.rot.y = this->actor.world.rot.y; this->stateTimer = Rand_ZeroFloat(40.0f) + 120.0f; this->actionFunc = EnNwc_RunAway; break; + + default: + break; } this->state = newState; @@ -289,7 +297,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) { Math_SmoothStepToS(&this->upperBodyRotY, targetUpperBodyRot, 2, 0x1B58, 0x3E8); } else { // NOT grown up - if ((this->stateTimer & 3) == 3 && this->stateTimer & 20) { + if (((this->stateTimer & 3) == 3) && ((this->stateTimer & 0x14) != 0)) { this->actor.velocity.y = 2.0f; // hop up and down } if ((this->stateTimer & 0x1B) == 24) { @@ -473,7 +481,7 @@ void EnNwc_Update(Actor* thisx, PlayState* play) { this->blinkTimer = Rand_S16Offset(0x3C, 0x3C); } - if (this->blinkTimer == 1 || this->blinkTimer == 3) { + if ((this->blinkTimer == 1) || (this->blinkTimer == 3)) { this->blinkState = true; } else { this->blinkState = false; @@ -508,7 +516,7 @@ s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p if (limbIndex == NIW_LIMB_UPPER_BODY) { rot->y += this->upperBodyRotY; } - if (limbIndex == NIW_LIMB_RIGHT_WING_ROOT || limbIndex == NIW_LIMB_LEFT_WING_ROOT) { + if ((limbIndex == NIW_LIMB_RIGHT_WING_ROOT) || (limbIndex == NIW_LIMB_LEFT_WING_ROOT)) { rot->y += this->footRotY; rot->z += this->footRotZ; } diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index 045da7fa1..d4996d74f 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -901,6 +901,7 @@ void EnPeehat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultVecX(-400.0f, vec2); OPEN_DISPS(play->state.gfxCtx); + gfx = POLY_OPA_DISP; Matrix_Translate(-1000.0f, 0.0f, 0.0f, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c index 56d0f5326..a1ea97199 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c @@ -242,9 +242,9 @@ void EnPoSisters_MatchPlayerXZ(EnPoSisters* this, PlayState* play) { Player* player = GET_PLAYER(play); f32 dist; - if (this->megCloneId == POE_SISTERS_MEG_REAL || this->actionFunc != EnPoSisters_DamageFlinch) { - if ((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0 || - player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) && + if ((this->megCloneId == POE_SISTERS_MEG_REAL) || (this->actionFunc != EnPoSisters_DamageFlinch)) { + if (((player->meleeWeaponState == PLAYER_MELEE_WEAPON_STATE_0) || + (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) && ((player->actor.world.pos.y - player->actor.floorHeight) < 1.0f)) { Math_StepToF(&this->megDistToPlayer, 110.0f, 3.0f); } else { @@ -277,7 +277,8 @@ void EnPoSisters_MatchPlayerY(EnPoSisters* this, PlayState* play) { this->actor.world.pos.y += (2.0f + (0.5f * Rand_ZeroOne())) * Math_SinS(this->floatingBobbingTimer * 0x800); // fully opaque - if (this->color.a == 255 && this->actionFunc != EnPoSisters_SpinAttack && this->actionFunc != EnPoSisters_SpinUp) { + if ((this->color.a == 255) && (this->actionFunc != EnPoSisters_SpinAttack) && + (this->actionFunc != EnPoSisters_SpinUp)) { if (this->actionFunc == EnPoSisters_Flee) { func_800B9010(&this->actor, NA_SE_EN_PO_AWAY - SFX_FLAG); } else { @@ -579,7 +580,7 @@ void EnPoSisters_Flee(EnPoSisters* this, PlayState* play) { this->actor.world.rot.y = this->actor.shape.rot.y; this->poSisterFlags |= POE_SISTERS_FLAG_UPDATE_SHAPE_ROT; EnPoSisters_SetupSpinToInvis(this); - } else if (this->fleeTimer == 0 && this->actor.xzDistToPlayer > 480.0f) { + } else if ((this->fleeTimer == 0) && (this->actor.xzDistToPlayer > 480.0f)) { this->actor.world.rot.y = this->actor.shape.rot.y; EnPoSisters_SetupAimlessIdleFlying(this); } @@ -818,7 +819,7 @@ void EnPoSisters_MegSurroundPlayer(EnPoSisters* this, PlayState* play) { DECR(this->megSurroundTimer); - if (this->megClonesRemaining > 0 && this->megSurroundTimer >= 16) { + if ((this->megClonesRemaining > 0) && (this->megSurroundTimer >= 16)) { SkelAnime_Update(&this->skelAnime); if (this->megCloneId == POE_SISTERS_MEG_REAL) { if (ABS_ALT(16 - this->floatingBobbingTimer) < 14) { @@ -1092,7 +1093,7 @@ s32 EnPoSisters_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve }; EnPoSisters* this = THIS; - if (limbIndex == POE_SISTERS_LIMB_ROOT && (this->poSisterFlags & POE_SISTERS_FLAG_REAL_MEG_ROTATION)) { + if ((limbIndex == POE_SISTERS_LIMB_ROOT) && (this->poSisterFlags & POE_SISTERS_FLAG_REAL_MEG_ROTATION)) { if (this->megSurroundTimer >= 284) { rot->x += (this->megSurroundTimer - 284) * 0x1000; } else { @@ -1153,8 +1154,8 @@ void EnPoSisters_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s Matrix_MultVecX(3000.0f, &this->limbPos[7]); } - if (this->actionFunc == EnPoSisters_DeathStage1 && this->deathTimer >= 8 && - limbIndex == POE_SISTERS_LIMB_MAIN_BODY) { + if ((this->actionFunc == EnPoSisters_DeathStage1) && (this->deathTimer >= 8) && + (limbIndex == POE_SISTERS_LIMB_MAIN_BODY)) { gSPMatrix((*gfx)++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList((*gfx)++, gPoeSistersBurnBodyDL); } diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index d95337728..fcc01b1ec 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -153,14 +153,12 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn if (currentPoint == 0) { diffX = points[1].x - points[0].x; diffZ = points[1].z - points[0].z; + } else if (currentPoint == (pathCount - 1)) { + diffX = points[pathCount - 1].x - points[pathCount - 2].x; + diffZ = points[pathCount - 1].z - points[pathCount - 2].z; } else { - if (currentPoint == (pathCount - 1)) { - diffX = points[pathCount - 1].x - points[pathCount - 2].x; - diffZ = points[pathCount - 1].z - points[pathCount - 2].z; - } else { - diffX = points[currentPoint + 1].x - points[currentPoint - 1].x; - diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; - } + diffX = points[currentPoint + 1].x - points[currentPoint - 1].x; + diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); @@ -188,14 +186,12 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32 if (currentPoint == 0) { diffX = points[0].x - points[1].x; diffZ = points[0].z - points[1].z; + } else if (currentPoint == (pathCount - 1)) { + diffX = points[pathCount - 2].x - points[pathCount - 1].x; + diffZ = points[pathCount - 2].z - points[pathCount - 1].z; } else { - if (currentPoint == (pathCount - 1)) { - diffX = points[pathCount - 2].x - points[pathCount - 1].x; - diffZ = points[pathCount - 2].z - points[pathCount - 1].z; - } else { - diffX = points[currentPoint - 1].x - points[currentPoint + 1].x; - diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z; - } + diffX = points[currentPoint - 1].x - points[currentPoint + 1].x; + diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z; } func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); @@ -236,19 +232,23 @@ s32 EnRuppecrow_CanSpawnBlueRupees(PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: return false; + case PLAYER_FORM_GORON: return true; + case PLAYER_FORM_ZORA: return false; + case PLAYER_FORM_HUMAN: if (player->stateFlags1 & PLAYER_STATE1_800000) { return true; } else { return false; } - } - return false; + default: + return false; + } } void EnRuppecrow_UpdateRupees(EnRuppecrow* this) { @@ -257,7 +257,7 @@ void EnRuppecrow_UpdateRupees(EnRuppecrow* this) { for (rupeeIndex = 0; rupeeIndex < ENRUPPECROW_RUPEE_COUNT; rupeeIndex++) { rupee = this->rupees[rupeeIndex]; - if (rupee != NULL && rupee->unk152 == 0) { + if ((rupee != NULL) && (rupee->unk152 == 0)) { Actor_Kill(&rupee->actor); } } @@ -375,16 +375,19 @@ s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) { return true; } break; + case PLAYER_FORM_GORON: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_GORON_LULLABY) { return true; } break; + case PLAYER_FORM_ZORA: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_NEW_WAVE) { return true; } break; + case PLAYER_FORM_HUMAN: if (play->msgCtx.lastPlayedSong == OCARINA_SONG_SONATA) { return true; @@ -394,6 +397,9 @@ s32 EnRuppecrow_CheckPlayedMatchingSong(PlayState* play) { return true; } break; + + default: + break; } } @@ -407,6 +413,7 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) { case PLAYER_FORM_DEKU: this->speedModifier = 7.0f; break; + case PLAYER_FORM_GORON: if (player->stateFlags3 & PLAYER_STATE3_1000) { // Goron Link is curled this->speedModifier = 19.0f; @@ -414,9 +421,11 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) { this->speedModifier = 7.0f; } break; + case PLAYER_FORM_ZORA: this->speedModifier = 7.0f; break; + case PLAYER_FORM_HUMAN: if (player->stateFlags1 & PLAYER_STATE1_800000) { this->speedModifier = 16.0f; @@ -424,6 +433,9 @@ void EnRuppecrow_UpdateSpeed(EnRuppecrow* this, PlayState* play) { this->speedModifier = 7.0f; } break; + + default: + break; } this->skelAnime.playSpeed = this->speedModifier / 6.0f; diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index 8d8991fba..bde455986 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -176,7 +176,7 @@ void EnSob1_SetupAction(EnSob1* this, EnSob1ActionFunc action) { s32 EnSob1_TestItemSelected(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; - if (msgCtx->unk12020 == 0x10 || msgCtx->unk12020 == 0x11) { + if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) { return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A); } return CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || @@ -188,7 +188,7 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { Player* player = GET_PLAYER(play); if (this->shopType == BOMB_SHOP) { - if (gSaveContext.save.day == 1 && gSaveContext.save.time >= CLOCK_TIME(6, 00)) { + if ((gSaveContext.save.day == 1) && (gSaveContext.save.time >= CLOCK_TIME(6, 00))) { return 0x648; } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { return 0x649; @@ -199,10 +199,13 @@ u16 EnSob1_GetTalkOption(EnSob1* this, PlayState* play) { switch (player->transformation) { case PLAYER_FORM_DEKU: return 0x12D8; + case PLAYER_FORM_GORON: return 0x12D9; + case PLAYER_FORM_ZORA: return 0x12DA; + default: return 0x12D7; } @@ -405,6 +408,7 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { case ZORA_SHOP: this->shopType = ZORA_SHOP; break; + case GORON_SHOP: if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_SNOWHEAD_TEMPLE)) { this->shopType = GORON_SHOP_SPRING; @@ -412,9 +416,11 @@ void EnSob1_Init(Actor* thisx, PlayState* play) { this->shopType = GORON_SHOP; } break; + case BOMB_SHOP: this->shopType = BOMB_SHOP; break; + default: Actor_Kill(&this->actor); return; @@ -579,10 +585,10 @@ void EnSob1_UpdateJoystickInputState(PlayState* play, EnSob1* this) { s8 stickY = CONTROLLER1(&play->state)->rel.stick_y; if (this->stickAccumX == 0) { - if (stickX > 30 || stickX < -30) { + if ((stickX > 30) || (stickX < -30)) { this->stickAccumX = stickX; } - } else if (stickX <= 30 && stickX >= -30) { + } else if ((stickX <= 30) && (stickX >= -30)) { this->stickAccumX = 0; } else if ((this->stickAccumX * stickX) < 0) { // Stick has swapped directions this->stickAccumX = stickX; @@ -595,10 +601,10 @@ void EnSob1_UpdateJoystickInputState(PlayState* play, EnSob1* this) { } } if (this->stickAccumY == 0) { - if (stickY > 30 || stickY < -30) { + if ((stickY > 30) || (stickY < -30)) { this->stickAccumY = stickY; } - } else if (stickY <= 30 && stickY >= -30) { + } else if ((stickY <= 30) && (stickY >= -30)) { this->stickAccumY = 0; } else if ((this->stickAccumY * stickY) < 0) { // Stick has swapped directions this->stickAccumY = stickY; @@ -646,6 +652,7 @@ s32 EnSob1_FacingShopkeeperDialogResult(EnSob1* this, PlayState* play) { func_8019F208(); EnSob1_TalkToShopkeeper(play, this); return true; + case 1: func_8019F230(); if (this->shopType == BOMB_SHOP) { @@ -986,6 +993,7 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_SUCCESS_2: func_8019F208(); item->buyFunc(play, item); @@ -1002,38 +1010,49 @@ void EnSob1_HandleCanBuyItem(PlayState* play, EnSob1* this) { this->shopItemSelectedTween = 0.0f; item->boughtFunc(play, item); break; + case CANBUY_RESULT_NO_ROOM: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNoRoomTextIds[this->shopType]); break; + case CANBUY_RESULT_NEED_EMPTY_BOTTLE: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNeedEmptyBottleTextIds[this->shopType]); break; + case CANBUY_RESULT_NEED_RUPEES: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNeedRupeesTextIds[this->shopType]); break; + case CANBUY_RESULT_CANNOT_GET_NOW: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sCannotGetNowTextIds[this->shopType]); break; + case CANBUY_RESULT_CANNOT_GET_NOW_2: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sCannotGetNow2TextIds[this->shopType]); break; + case CANBUY_RESULT_NO_ROOM_2: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, sNoRoom2TextIds[this->shopType]); break; + case CANBUY_RESULT_ALREADY_HAVE: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, 0x658); break; + case CANBUY_RESULT_HAVE_BETTER: play_sound(NA_SE_SY_ERROR); EnSob1_SetupCannotBuy(play, this, 0x659); break; + + default: + break; } } @@ -1047,6 +1066,7 @@ void EnSob1_SelectItem(EnSob1* this, PlayState* play) { case 0: EnSob1_HandleCanBuyItem(play, this); break; + case 1: func_8019F230(); this->actionFunc = this->prevActionFunc; @@ -1179,11 +1199,11 @@ void EnSob1_UpdateItemSelectedProperty(EnSob1* this) { for (i = 0; i < ARRAY_COUNT(this->items); i++, items++) { item = *items; if (item != NULL) { - if (this->actionFunc != EnSob1_SelectItem && this->actionFunc != EnSob1_CannotBuy && - this->drawCursor == 0) { + if ((this->actionFunc != EnSob1_SelectItem) && (this->actionFunc != EnSob1_CannotBuy) && + (this->drawCursor == 0)) { item->isSelected = false; } else { - item->isSelected = this->cursorIndex == i ? true : false; + item->isSelected = (this->cursorIndex == i) ? true : false; } } } @@ -1330,10 +1350,10 @@ void EnSob1_ChangeObject(EnSob1* this, PlayState* play) { s32 EnSob1_AreObjectsLoaded(EnSob1* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->mainObjIndex)) { - if (this->unusedObjIndex >= 0 && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) { + if ((this->unusedObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->unusedObjIndex)) { return false; } - if (this->shopkeeperAnimObjIndex >= 0 && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) { + if ((this->shopkeeperAnimObjIndex >= 0) && !Object_IsLoaded(&play->objectCtx, this->shopkeeperAnimObjIndex)) { return false; } return true; diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index e8b67451c..f4cc458cb 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -546,7 +546,7 @@ void func_808A650C(EnSt* this) { } s32 func_808A6580(EnSt* this, PlayState* play) { - Player* sp3C = GET_PLAYER(play); + Player* player = GET_PLAYER(play); s32 ret = false; s32 i; @@ -666,7 +666,7 @@ s32 func_808A6580(EnSt* this, PlayState* play) { if ((this->unk_316 == 0) && (this->unk_314 == 0) && (this->unk_312 == 0) && !(this->collider1.base.atFlags & AT_BOUNCED) && (this->actor.colChkInfo.health != 0)) { play->damagePlayer(play, -8); - Actor_PlaySfx(&sp3C->actor, NA_SE_PL_BODY_HIT); + Actor_PlaySfx(&player->actor, NA_SE_PL_BODY_HIT); func_800B8D98(play, &this->actor, 4.0f, this->actor.yawTowardsPlayer, 6.0f); this->unk_316 = 10; this->unk_18C |= 1; 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 877a400d5..74258058f 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -267,6 +267,7 @@ void func_80BAA9B4(EnSuttari* this) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } break; + default: if ((this->animIndex != 1) && (curFrame == frameCount)) { this->animIndex = 1; @@ -281,23 +282,31 @@ void func_80BAAA94(EnSuttari* this) { this->animIndex = 1; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); break; + case 0x29E9: this->enFsn->flags |= ENFSN_ANGRY; break; + case 0x29EA: this->enFsn->flags |= ENFSN_CALM_DOWN; break; + case 0x29EB: this->enFsn->flags |= ENFSN_OFFER_FINAL_PRICE; break; + case 0x29EC: this->animIndex = 7; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); break; + case 0x29ED: this->animIndex = 1; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); break; + + default: + break; } } @@ -309,52 +318,64 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { this->csIdIndex = 0; this->textId = 0x29E5; break; + case 0x29E5: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29E6; break; + case 0x29E6: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29E7; break; + case 0x29E7: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29E8; break; + case 0x29E8: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29E9; break; + case 0x29E9: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29EA; break; + case 0x29EA: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29EB; break; + case 0x29EB: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 1; this->textId = 0x29EC; break; + case 0x29EC: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->csIdIndex = 0; this->textId = 0x29ED; break; + case 0x29ED: CutsceneManager_Stop(this->csIdList[this->csIdIndex]); this->flags1 |= 0x400; this->csIdIndex = 1; this->textId = 0x29EE; break; + + default: + break; } if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) { CutsceneManager_Stop(CS_ID_GLOBAL_TALK); @@ -372,9 +393,11 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { this->textId = 0x1450; } break; + case 0x1450: this->textId = 0x1451; break; + case 0x1451: if (this->flags1 & 0x800) { this->flags1 &= ~0x800; @@ -385,6 +408,7 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_81_01); } break; + case 0x1453: this->flags1 |= 0x400; SET_WEEKEVENTREG(WEEKEVENTREG_81_01); @@ -392,25 +416,34 @@ void func_80BAAB78(EnSuttari* this, PlayState* play) { this->flags2 |= 1; this->textId = 0x1454; break; + case 0x1455: this->textId = 0x1456; break; + case 0x1456: this->textId = 0x1457; break; + case 0x1457: this->textId = 0x1458; break; + case 0x1458: this->textId = 0x1459; break; + case 0x1459: this->textId = 0x145A; break; + case 0x145A: this->flags1 |= 0x400; this->textId = 0x145B; break; + + default: + break; } } Message_StartTextbox(play, this->textId, &this->actor); @@ -688,7 +721,7 @@ s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp if (this->timePath == NULL) { return 0; } - if ((this->unk428 != 0 && this->unk428 < 0xC) && (this->timePathTimeSpeed >= 0)) { + if ((this->unk428 != 0) && (this->unk428 < 0xC) && (this->timePathTimeSpeed >= 0)) { phi_a0 = sp26; } else { phi_a0 = scheduleOutput->time0; @@ -717,8 +750,8 @@ s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp Vec3s* sp28; s32 sp24; - if (this->unk428 == 10 || this->unk428 == 11 || this->unk428 == 2) { - return 0; + if ((this->unk428 == 10) || (this->unk428 == 11) || (this->unk428 == 2)) { + return false; } sp48 = (EnDoor*)SubS_FindNearestActor(&this->actor, play, ACTORCAT_DOOR, ACTOR_EN_DOOR); sp24 = D_80BAE8F8[scheduleOutput->result]; @@ -726,21 +759,21 @@ s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp this->timePath = SubS_GetAdditionalPath(play, sp47, sp24); } if ((sp48 == NULL) || (this->timePath == NULL)) { - return 0; + return false; } sp28 = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp38, &sp28[0]); Math_Vec3s_ToVec3f(&sp2C, &sp28[1]); this->unk434 = sp44 - scheduleOutput->time0; this->unk436 = scheduleOutput->time1 - scheduleOutput->time0; - if (scheduleOutput->result != 10 && scheduleOutput->result != 11) { + if ((scheduleOutput->result != 10) && (scheduleOutput->result != 11)) { sp48->unk_1A7 = 0x4B; } Math_Vec3f_Copy(&this->unk438, &sp38); Math_Vec3f_Copy(&this->unk444, &sp2C); this->actor.world.rot.y = Math_Vec3f_Yaw(&sp38, &sp2C); this->actor.world.pos = sp38; - return 1; + return true; } s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) { @@ -753,6 +786,7 @@ s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp case 12: ret = func_80BABC48(this, play, scheduleOutput); break; + case 11: case 10: case 9: @@ -761,15 +795,17 @@ s32 func_80BABF64(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp case 6: ret = func_80BABDD8(this, play, scheduleOutput); break; + case 5: case 4: case 3: case 2: case 1: - ret = 1; + ret = true; break; + default: - ret = 0; + ret = false; break; } return ret; @@ -853,6 +889,7 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->flags1 |= 0x80; func_80BABFD4(this, play); break; + case 15: if ((this->animIndex == 1) && (curFrame == frameCount)) { this->animIndex = 2; @@ -873,15 +910,18 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { } func_80BABFD4(this, play); break; + case 6: case 8: this->flags1 |= 0x80; func_80BAC220(this, play); break; + case 10: this->flags1 |= 0x80; func_80BAC220(this, play); break; + case 9: case 11: this->flags1 |= 0x80; @@ -893,19 +933,23 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { } func_80BAC220(this, play); break; + case 7: this->flags1 |= 0x20; this->flags1 |= 0x80; func_80BAC220(this, play); break; + case 14: this->flags1 |= 0x20; this->flags1 |= 0x80; func_80BABFD4(this, play); break; + case 1: Actor_Kill(&this->actor); break; + case 2: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_81_04)) { this->flags1 |= 0x80; @@ -916,9 +960,10 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BADA08; } break; + case 4: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_33_08)) { - if (this->animIndex == 2 || this->animIndex == 1) { + if ((this->animIndex == 2) || (this->animIndex == 1)) { this->animIndex = 5; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } @@ -935,6 +980,9 @@ void func_80BAC2FC(EnSuttari* this, PlayState* play) { this->actionFunc = func_80BAD2B4; } break; + + default: + break; } Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 4, 0x1554); } @@ -947,7 +995,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; if (play->sceneId == SCENE_IKANA) { this->flags1 |= 1; - if (gSaveContext.save.day == 1 || gSaveContext.save.day == 2) { + if ((gSaveContext.save.day == 1) || (gSaveContext.save.day == 2)) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->flags1 |= 0x80; @@ -962,7 +1010,7 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { return; } } else if (play->sceneId == SCENE_BACKTOWN) { - if (gSaveContext.save.time >= CLOCK_TIME(0, 20) && gSaveContext.save.time < CLOCK_TIME(6, 00)) { + if ((gSaveContext.save.time >= CLOCK_TIME(0, 20)) && (gSaveContext.save.time < CLOCK_TIME(6, 00))) { Actor_Kill(&this->actor); } @@ -1011,14 +1059,14 @@ void func_80BAC6E8(EnSuttari* this, PlayState* play) { void func_80BACA14(EnSuttari* this, PlayState* play) { Player* player = GET_PLAYER(play); - if (this->animIndex == 1 || this->animIndex == 8) { + if ((this->animIndex == 1) || (this->animIndex == 8)) { this->animIndex = 2; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); } func_80BABA90(this, 0, 0); func_80BAB434(this); - if (player->transformation == PLAYER_FORM_GORON || player->transformation == PLAYER_FORM_ZORA) { - if (this->actor.playerHeightRel < 60.0f && this->actor.xzDistToPlayer < 500.0f) { + if ((player->transformation == PLAYER_FORM_GORON) || (player->transformation == PLAYER_FORM_ZORA)) { + if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) { this->unk3F2 = this->headRot.y; this->actionFunc = func_80BACBB0; } @@ -1041,7 +1089,7 @@ void func_80BACBB0(EnSuttari* this, PlayState* play) { s16 target; this->unk3F2 = this->headRot.y; - if (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU) { + if ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU)) { this->actionFunc = func_80BACA14; } if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) { @@ -1071,7 +1119,7 @@ void func_80BACD2C(EnSuttari* this, PlayState* play) { Player* player = GET_PLAYER(play); this->unk3F2 = this->headRot.y; - if (player->transformation == PLAYER_FORM_HUMAN || player->transformation == PLAYER_FORM_DEKU) { + if ((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_DEKU)) { this->actionFunc = func_80BACA14; } if ((this->actor.playerHeightRel < 60.0f) && (this->actor.xzDistToPlayer < 500.0f)) { @@ -1372,10 +1420,14 @@ void func_80BADA9C(EnSuttari* this, PlayState* play) { this->flags1 |= 0x800; func_80BAAB78(this, play); break; + case 1: func_8019F230(); func_80BAAB78(this, play); break; + + default: + break; } } if (!(this->flags1 & 4)) { @@ -1486,11 +1538,11 @@ void EnSuttari_Update(Actor* thisx, PlayState* play) { EnSuttari_AdvanceTime(); } if (this->unk428 != 0) { - if (this->animIndex == 2 || this->animIndex == 6) { + if ((this->animIndex == 2) || (this->animIndex == 6)) { if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 16.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK); } - } else if (this->animIndex == 0 || this->animIndex == 5) { + } else if ((this->animIndex == 0) || (this->animIndex == 5)) { if (Animation_OnFrame(&this->skelAnime, 8.0f) || Animation_OnFrame(&this->skelAnime, 17.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_PAMERA_WALK); } @@ -1514,7 +1566,7 @@ s32 EnSuttari_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3 Matrix_RotateXS(-this->torsoRot.y, MTXMODE_APPLY); Matrix_RotateZS(-this->torsoRot.x, MTXMODE_APPLY); } - if (limbIndex == 8 || limbIndex == 9 || limbIndex == 0xC) { + if ((limbIndex == 8) || (limbIndex == 9) || (limbIndex == 0xC)) { rot->y += (s16)(Math_SinS(this->unk2FA[limbIndex]) * 200.0f); rot->z += (s16)(Math_CosS(this->unk31A[limbIndex]) * 200.0f); } diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index d64053b5a..ee3b9af58 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -268,7 +268,7 @@ void EnTalkGibud_Init(Actor* thisx, PlayState* play) { this->switchFlag = -1; } - if (this->switchFlag != -1 && Flags_GetSwitch(play, this->switchFlag)) { + if ((this->switchFlag != -1) && Flags_GetSwitch(play, this->switchFlag)) { Actor_Kill(&this->actor); } @@ -291,7 +291,7 @@ void EnTalkGibud_SetupIdle(EnTalkGibud* this) { * Gibdo will attack the player if they get too close. */ void EnTalkGibud_Idle(EnTalkGibud* this, PlayState* play) { - if (this->actor.xzDistToPlayer <= 150.0f && func_800B715C(play)) { + if ((this->actor.xzDistToPlayer <= 150.0f) && func_800B715C(play)) { EnTalkGibud_SetupAttemptPlayerFreeze(this); } @@ -345,7 +345,8 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, PlayState* play) { if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) { player->actor.freezeTimer = 0; - if (gSaveContext.save.playerForm == PLAYER_FORM_GORON || gSaveContext.save.playerForm == PLAYER_FORM_DEKU) { + if ((gSaveContext.save.playerForm == PLAYER_FORM_GORON) || + (gSaveContext.save.playerForm == PLAYER_FORM_DEKU)) { // If the Gibdo/Redead tries to grab Goron or Deku Link, it will fail to // do so. It will appear to take damage and shake its head side-to-side. EnTalkGibud_SetupGrabFail(this); @@ -442,6 +443,9 @@ void EnTalkGibud_Grab(EnTalkGibud* this, PlayState* play) { Math_SmoothStepToF(&this->actor.shape.yOffset, 0.0f, 1.0f, 400.0f, 0.0f); } break; + + default: + break; } } @@ -512,7 +516,7 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, PlayState* play) { this->actor.world.rot = this->actor.shape.rot; } if (EnTalkGibud_PlayerInRangeWithCorrectState(this, play)) { - if (gSaveContext.save.playerForm != PLAYER_FORM_GORON && gSaveContext.save.playerForm != PLAYER_FORM_DEKU && + if ((gSaveContext.save.playerForm != PLAYER_FORM_GORON) && (gSaveContext.save.playerForm != PLAYER_FORM_DEKU) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) { EnTalkGibud_SetupWalkToPlayer(this); } @@ -676,6 +680,9 @@ void EnTalkGibud_GetTextIdForRequestedItem(EnTalkGibud* this, PlayState* play) { Message_StartTextbox(play, 0x1395, &this->actor); this->textId = 0x1395; break; + + default: + break; } } @@ -700,6 +707,9 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { Message_StartTextbox(play, 0xFF, &this->actor); this->textId = 0xFF; break; + + default: + break; } } } @@ -1063,8 +1073,8 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) { break; case EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC: - if (this->actionFunc != EnTalkGibud_Grab && - (this->actionFunc != EnTalkGibud_Stunned || this->stunTimer == 0)) { + if ((this->actionFunc != EnTalkGibud_Grab) && + ((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0))) { this->drawDmgEffAlpha = 1.0f; this->drawDmgEffTimer = 40; this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL; @@ -1073,10 +1083,13 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, PlayState* play) { break; case EN_TALK_GIBUD_DMGEFF_STUN: - if ((this->actionFunc != EnTalkGibud_Stunned) || this->stunTimer == 0) { + if ((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0)) { EnTalkGibud_SetupStunned(this); } break; + + default: + break; } } } @@ -1114,7 +1127,7 @@ void EnTalkGibud_MoveGrabbedPlayerAwayFromWall(EnTalkGibud* this, PlayState* pla Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); - if (this->actionFunc == EnTalkGibud_Grab && this->grabState == EN_TALK_GIBUD_GRAB_START && + if ((this->actionFunc == EnTalkGibud_Grab) && (this->grabState == EN_TALK_GIBUD_GRAB_START) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) { targetPos = player->actor.world.pos; targetPos.x += 10.0f * Math_SinS(this->actor.wallYaw); diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c index 483edd145..b86b9c714 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -180,10 +180,10 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { Player* player = GET_PLAYER(play); this->skelAnime.curFrame = 4.0f; - if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && player->actor.shape.feetPos[0].y >= 438.0f) { + if ((player->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (player->actor.shape.feetPos[0].y >= 438.0f)) { // Player is standing on the central platform, so stop chasing them this->isNonHostile = true; - } else if (this->isNonHostile && this->workTimer[WORK_TIMER_WAIT] == 0 && !(this->timer & 0x1F)) { + } else if (this->isNonHostile && (this->workTimer[WORK_TIMER_WAIT] == 0) && !(this->timer & 0x1F)) { xDistance = this->targetPos.x - player->actor.world.pos.x; zDistance = this->targetPos.z - player->actor.world.pos.z; if (sqrtf(SQ(xDistance) + SQ(zDistance)) < 500.0f) { @@ -204,20 +204,21 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { Math_Vec3f_Copy(&this->targetPos, &player->actor.world.pos); if (!(this->timer & 0xF)) { - if (Rand_ZeroOne() < 0.5f && this->actor.xzDistToPlayer <= 200.0f) { + if ((Rand_ZeroOne() < 0.5f) && (this->actor.xzDistToPlayer <= 200.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_ATTACK); } } // If the player gets eaten by Gyorg, or if the attack timer ran out, // stop chasing the player for a little bit. - if (this->workTimer[WORK_TIMER_ATTACK] == 0 || (player->stateFlags2 & PLAYER_STATE2_80)) { + if ((this->workTimer[WORK_TIMER_ATTACK] == 0) || (player->stateFlags2 & PLAYER_STATE2_80)) { this->workTimer[WORK_TIMER_WAIT] = 150; this->isNonHostile = true; } break; + case true: - if (sGyorg->unk_324 != 0 && !(this->timer & 0x7)) { + if ((sGyorg->unk_324 != 0) && !(this->timer & 0x7)) { this->nextRotationAngle = 0x4E20; this->actor.speed = 6.0f; } else { @@ -242,7 +243,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { } if (this->workTimer[WORK_TIMER_OUT_OF_WATER] == 0) { - if (this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0 && this->actor.speed > 1.0f) { + if ((this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0) && (this->actor.speed > 1.0f)) { this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = Rand_ZeroFloat(20.0f); this->deviation.x = randPlusMinusPoint5Scaled(100.0f); this->deviation.y = randPlusMinusPoint5Scaled(50.0f + extraScaleY); @@ -286,6 +287,7 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { this->isBeached = true; } break; + case true: this->nextRotationAngle = 0x3A98; this->actor.gravity = -1.5f; @@ -423,7 +425,7 @@ void EnTanron3_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->atCollider.base); CollisionCheck_SetAC(play, &play->colChkCtx, &this->acCollider.base); - if ((s8)sGyorg->actor.colChkInfo.health <= 0 && this->actionFunc != EnTanron3_Die) { + if (((s8)sGyorg->actor.colChkInfo.health <= 0) && (this->actionFunc != EnTanron3_Die)) { EnTanron3_SetupDie(this, play); this->workTimer[WORK_TIMER_DIE] = 0; } diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 7de134218..3987f9d12 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -1164,7 +1164,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL func_80128640(play, &this->player, *dList1); if (this->player.stateFlags3 & PLAYER_STATE3_20000000) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00EDD0); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1200,7 +1202,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL (this->player.skelAnime.curFrame >= 12.0f))) { if (func_80127438(play, &this->player, this->player.currentMask)) { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_mask_ki_tan_DL_0004A0); + CLOSE_DISPS(play->state.gfxCtx); } } @@ -1219,7 +1223,9 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL D_80A41D60 = true; } else { OPEN_DISPS(play->state.gfxCtx); + gSPDisplayList(POLY_OPA_DISP++, object_test3_DL_00CB60); + CLOSE_DISPS(play->state.gfxCtx); } } else { diff --git a/src/overlays/actors/ovl_En_Test5/z_en_test5.c b/src/overlays/actors/ovl_En_Test5/z_en_test5.c index a041a1aaf..f7a9b431b 100644 --- a/src/overlays/actors/ovl_En_Test5/z_en_test5.c +++ b/src/overlays/actors/ovl_En_Test5/z_en_test5.c @@ -66,13 +66,13 @@ void EnTest5_HandleBottleAction(EnTest5* this, PlayState* play) { player = GET_PLAYER(play); - if (player->interactRangeActor == NULL || player->getItemId != GI_MAX) { + if ((player->interactRangeActor == NULL) || (player->getItemId != GI_MAX)) { Math_Vec3f_DistXYZAndStoreDiff(&this->minPos, &player->actor.world.pos, &playerPosRelativeToWater); // Make sure that the player is within the bounds of the water and deep enough to grab some - if (playerPosRelativeToWater.x >= 0.0f && playerPosRelativeToWater.x <= this->xLength && - playerPosRelativeToWater.z >= 0.0f && playerPosRelativeToWater.z <= this->zLength && - fabsf(playerPosRelativeToWater.y) < 100.0f && player->actor.depthInWater > 12.0f) { + if ((playerPosRelativeToWater.x >= 0.0f) && (playerPosRelativeToWater.x <= this->xLength) && + (playerPosRelativeToWater.z >= 0.0f) && (playerPosRelativeToWater.z <= this->zLength) && + (fabsf(playerPosRelativeToWater.y) < 100.0f) && (player->actor.depthInWater > 12.0f)) { Actor_OfferGetItem(&this->actor, play, GI_MAX, this->actor.xzDistToPlayer, fabsf(this->actor.playerHeightRel)); } @@ -89,10 +89,10 @@ void EnTest5_Update(Actor* thisx, PlayState* play2) { this->actionFunc(this, play); // If it's the hot spring variant, generate steam clouds - if (ENTEST5_IS_HOT_SPRING(&this->actor) && (play->state.frames % 4) == 0) { - steamPos.x = (Rand_ZeroOne() * this->xLength) + this->minPos.x; + if (ENTEST5_IS_HOT_SPRING(&this->actor) && ((play->state.frames % 4) == 0)) { + steamPos.x = this->minPos.x + (Rand_ZeroOne() * this->xLength); steamPos.y = this->minPos.y + 100.0f; - steamPos.z = (Rand_ZeroOne() * this->zLength) + this->minPos.z; + steamPos.z = this->minPos.z + (Rand_ZeroOne() * this->zLength); if ((BgCheck_EntityRaycastFloor2(play, &play->colCtx, &poly, &steamPos) + 10.0f) < this->minPos.y) { Vec3f steamVel; @@ -102,8 +102,7 @@ void EnTest5_Update(Actor* thisx, PlayState* play2) { steamVel.x = 0.0f; steamVel.z = 0.0f; - EffectSsIceSmoke_Spawn(play, &steamPos, &steamVel, &gZeroVec3f, - (s16)((-200) - (s32)(Rand_ZeroOne() * 50.0f))); + EffectSsIceSmoke_Spawn(play, &steamPos, &steamVel, &gZeroVec3f, -200 - (s32)(Rand_ZeroOne() * 50.0f)); } } } diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c index b56112421..846d728dc 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -1194,6 +1194,7 @@ void func_80A9369C(Actor* thisx, PlayState* play2) { s32 pad; if (this) {} + OPEN_DISPS(play->state.gfxCtx); this->unk_148 = POLY_OPA_DISP; diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index fb5f72c76..01ec414e5 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -1366,6 +1366,7 @@ void EnTk_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, gSPDisplayList(POLY_OPA_DISP++, object_tk_DL_00B530); CLOSE_DISPS(play->state.gfxCtx); + break; } } diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index c6681b4be..204fa8714 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -160,7 +160,8 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2) { Gfx* gfx = sShellDLists[this->actor.params]; OPEN_DISPS(play->state.gfxCtx); - if (this->alpha == 0xFF) { + + if (this->alpha == 255) { Scene_SetRenderModeXlu(play, 0, 0x01); gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); Gfx_DrawDListOpa(play, gfx); @@ -169,5 +170,6 @@ void EnTorch2_Draw(Actor* thisx, PlayState* play2) { gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, this->alpha); Gfx_DrawDListXlu(play, gfx); } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 6eff18d29..7de3b50c2 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -205,10 +205,10 @@ void EnToto_Destroy(Actor* thisx, PlayState* play) { } void func_80BA383C(EnToto* this, PlayState* play) { - if (SkelAnime_Update(&this->skelAnime) && this->actionFuncIndex == 1 && - this->skelAnime.animation != &object_zm_Anim_000C80) { - if (play->msgCtx.currentTextId != 0x2A98 && play->msgCtx.currentTextId != 0x2A99) { - if (this->unk2B4 & 1 || Rand_ZeroOne() > 0.5f) { + if (SkelAnime_Update(&this->skelAnime) && (this->actionFuncIndex == 1) && + (this->skelAnime.animation != &object_zm_Anim_000C80)) { + if ((play->msgCtx.currentTextId != 0x2A98) && (play->msgCtx.currentTextId != 0x2A99)) { + if ((this->unk2B4 & 1) || (Rand_ZeroOne() > 0.5f)) { this->unk2B4 = (this->unk2B4 + 1) & 3; } } @@ -251,9 +251,8 @@ void func_80BA39C8(EnToto* this, PlayState* play) { return; } - //! TODO: Neither 0xED02 nor 0xED01 match CLOCK_TIME macro if (((play->sceneId == SCENE_MILK_BAR) && - !((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time < 0xED02))) || + !((gSaveContext.save.time >= CLOCK_TIME(6, 0)) && (gSaveContext.save.time <= (CLOCK_TIME(22, 13) + 7)))) || ((play->sceneId != SCENE_MILK_BAR) && func_80BA397C(this, 0x2000))) { if (this->unk2B6 != 0) { this->text = D_80BA5044; @@ -327,7 +326,7 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { if (!func_80BA4C44(this, play)) { return; } - if (this->text->unk1 != 0 && ENTOTO_WEEK_EVENT_FLAGS) { + if ((this->text->unk1 != 0) && ENTOTO_WEEK_EVENT_FLAGS) { this->unk2B7 = 1; return; } @@ -428,7 +427,7 @@ s32 func_80BA415C(EnToto* this, PlayState* play) { } else { func_8019F208(); } - return (play->msgCtx.choiceIndex != 0 ? 0 : this->text->unk1) + 1; // Possible msg MACRO + return ((play->msgCtx.choiceIndex != 0) ? 0 : this->text->unk1) + 1; } return 0; } @@ -584,7 +583,7 @@ s32 func_80BA47E0(EnToto* this, PlayState* play) { this->unk2B3 += 8; } for (i = 0; i < ARRAY_COUNT(D_80BA50DC); i++) { - if (gSaveContext.save.playerForm != (i + 1) && (D_80BA5128[i] & this->unk2B3)) { + if ((gSaveContext.save.playerForm != (i + 1)) && (D_80BA5128[i] & this->unk2B3)) { Math_Vec3s_ToVec3f(&spawnPos, &D_80BA50DC[i].unk6); Actor_Spawn(&play->actorCtx, play, ACTOR_PLAYER, spawnPos.x, spawnPos.y, spawnPos.z, i + 2, 0, 0, diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c index 02955f0d0..ac6ae3152 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.c @@ -121,6 +121,7 @@ void EnWizBrock_Draw(Actor* thisx, PlayState* play) { if (this->platformType != EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE) { OPEN_DISPS(play->state.gfxCtx); + AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gWizrobePlatformCenterTexAnim)); gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255); diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 4bf82f55a..1dbe5d2e8 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -170,7 +170,7 @@ void EnYb_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play) { } void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f32 morphFrames) { - if (animIndex >= 0 && animIndex < 3) { + if ((animIndex >= 0) && (animIndex < 3)) { if ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP)) { if (animIndex > 0) { if (animMode == ANIMMODE_LOOP) { @@ -198,7 +198,7 @@ void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f3 } s32 EnYb_CanTalk(EnYb* this, PlayState* play) { - if (this->actor.xzDistToPlayer < 100.0f && Player_IsFacingActor(&this->actor, 0x3000, play) && + if ((this->actor.xzDistToPlayer < 100.0f) && Player_IsFacingActor(&this->actor, 0x3000, play) && Actor_IsFacingPlayer(&this->actor, 0x3000)) { return true; } else { @@ -296,6 +296,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) { this->actionFunc = EnYb_Disappear; SET_WEEKEVENTREG(WEEKEVENTREG_82_04); break; + case 0x147C: // Spread my dance across the world if (Player_GetMask(play) == PLAYER_MASK_KAMARO) { Message_CloseTextbox(play); @@ -311,6 +312,7 @@ void EnYb_Talk(EnYb* this, PlayState* play) { EnYb_ReceiveMask(this, play); } break; + default: Message_CloseTextbox(play); this->actionFunc = EnYb_Idle; @@ -353,9 +355,9 @@ void EnYb_Idle(EnYb* this, PlayState* play) { Player* player = GET_PLAYER(play); EnYb_UpdateAnimation(this, play); - if (this->actor.xzDistToPlayer < 180.0f && fabsf(this->actor.playerHeightRel) < 50.0f && - play->msgCtx.ocarinaMode == 3 && play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING && - gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) { + if ((this->actor.xzDistToPlayer < 180.0f) && (fabsf(this->actor.playerHeightRel) < 50.0f) && + (play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) && + (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) { this->actionFunc = EnYb_TeachingDance; this->teachingCutsceneTimer = 200; EnYb_ChangeCutscene(this, 0); @@ -377,8 +379,8 @@ void EnYb_Idle(EnYb* this, PlayState* play) { if (!(player->stateFlags2 & PLAYER_STATE2_8000000)) { this->playerOcarinaOut &= ~1; } - } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && this->actor.xzDistToPlayer < 180.0f && - fabsf(this->actor.playerHeightRel) < 50.0f) { + } else if ((player->stateFlags2 & PLAYER_STATE2_8000000) && (this->actor.xzDistToPlayer < 180.0f) && + (fabsf(this->actor.playerHeightRel) < 50.0f)) { this->playerOcarinaOut |= 1; Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); } @@ -466,8 +468,6 @@ void EnYb_Draw(Actor* thisx, PlayState* play) { } gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->alpha); - if (1) {} - POLY_XLU_DISP = SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, NULL, EnYb_PostLimbDrawXlu, &this->actor, POLY_XLU_DISP); diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c index bc1d543cc..f41b8057c 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -95,20 +95,20 @@ s32 func_809A4F00(ObjArmos* this, s32 arg1) { } if (temp_v0 == OBJARMOS_ROT_7_4) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (temp_v0 == OBJARMOS_ROT_7_5) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } if (temp_v0 == OBJARMOS_ROT_7_6) { if (this->unk_26E != 0) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (this->unk_270 != 0) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } return true; @@ -141,22 +141,22 @@ s32 func_809A500C(ObjArmos* this, s32 arg1) { if (temp_v0 == OBJARMOS_ROT_7_4) { temp = D_809A5BB0[arg1] + this->unk_26E; - return temp <= temp_v1 && -temp_v1 <= temp; + return (temp <= temp_v1) && (-temp_v1 <= temp); } if (temp_v0 == OBJARMOS_ROT_7_5) { temp2 = D_809A5BB8[arg1] + this->unk_270; - return temp2 <= temp_v1 && -temp_v1 <= temp2; + return (temp2 <= temp_v1) && (-temp_v1 <= temp2); } if (temp_v0 == OBJARMOS_ROT_7_6) { if ((arg1 == 0) || (arg1 == 1)) { temp = D_809A5BB0[arg1] + this->unk_26E; - return temp <= temp_v1 && -temp_v1 <= temp; + return (temp <= temp_v1) && (-temp_v1 <= temp); } temp2 = D_809A5BB8[arg1] + this->unk_270; - return temp2 <= temp_v1 && -temp_v1 <= temp2; + return (temp2 <= temp_v1) && (-temp_v1 <= temp2); } return false; diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index 660d9016d..c2270f15b 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -418,6 +418,7 @@ void ObjChan_DrawPot(Actor* thisx, PlayState* play) { void ObjChan_DrawFire(ObjChan* this, PlayState* play) { u32 sp4C; Gfx* dl; + OPEN_DISPS(play->state.gfxCtx); sp4C = play->gameplayFrames; diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index 22a448e54..c7fbab2d6 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -284,6 +284,9 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { this->jointTable, this->morphTable, GOLD_DEKU_FLOWER_LIMB_MAX); this->collider.dim.height = 20; break; + + default: + break; } type = DEKU_FLOWER_TYPE(&this->dyna.actor); @@ -310,6 +313,9 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y + 10.0f; this->dyna.actor.targetMode = 3; break; + + default: + break; } } } @@ -321,7 +327,7 @@ void ObjEtcetera_Update(Actor* thisx, PlayState* play) { if (floorBgId == BGCHECK_SCENE) { floorPoly = this->dyna.actor.floorPoly; - if (floorPoly != NULL && this->burrowFlag & 1) { + if ((floorPoly != NULL) && (this->burrowFlag & 1)) { func_800FAAB4(play, SurfaceType_GetLightSettingIndex(&play->colCtx, floorPoly, floorBgId)); } } diff --git a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c index 95c43a4bf..f63201966 100644 --- a/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c +++ b/src/overlays/actors/ovl_Obj_Mure/z_obj_mure.c @@ -73,7 +73,8 @@ typedef enum { } ObjMureChildState; s32 func_808D78D0(ObjMure* this, PlayState* play) { - if (this->type == OBJMURE_TYPE_FISH || this->type == OBJMURE_TYPE_BUGS || this->type == OBJMURE_TYPE_BUTTERFLY) { + if ((this->type == OBJMURE_TYPE_FISH) || (this->type == OBJMURE_TYPE_BUGS) || + (this->type == OBJMURE_TYPE_BUTTERFLY)) { Actor_ProcessInitChain(&this->actor, sInitChain); } else { return false; @@ -135,6 +136,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) { switch (this->childrenStates[i]) { case OBJMURE_CHILD_STATE_DEAD: break; + case OBJMURE_CHILD_STATE_2: ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i); this->children[i] = Actor_SpawnAsChildAndCutscene( @@ -148,6 +150,7 @@ void ObjMure_SpawnActors0(Actor* thisx, PlayState* play) { this->children[i]->room = this->actor.room; } break; + default: ObjMure_GetSpawnPos(&pos, &this->actor.world.pos, this->ptn, i); this->children[i] = Actor_SpawnAsChildAndCutscene( @@ -190,9 +193,13 @@ void ObjMure_SpawnActors(ObjMure* this, PlayState* play) { case 0: ObjMure_SpawnActors0(&this->actor, play); break; + case 1: ObjMure_SpawnActors1(this, play); break; + + default: + break; } } @@ -205,12 +212,14 @@ void ObjMure_KillActorsImpl(ObjMure* this, PlayState* play) { case OBJMURE_CHILD_STATE_DEAD: this->children[i] = NULL; break; + case OBJMURE_CHILD_STATE_2: if (this->children[i] != NULL) { Actor_Kill(this->children[i]); this->children[i] = NULL; } break; + default: if (this->children[i] != NULL) { if (Actor_HasParent(this->children[i], play)) { @@ -244,7 +253,7 @@ void ObjMure_CheckChildren(ObjMure* this, PlayState* play) { this->childrenStates[i] = OBJMURE_CHILD_STATE_DEAD; this->children[i] = NULL; } - } else if (this->childrenStates[i] == OBJMURE_CHILD_STATE_2 && this->children[i]->update == NULL) { + } else if ((this->childrenStates[i] == OBJMURE_CHILD_STATE_2) && (this->children[i]->update == NULL)) { this->childrenStates[i] = OBJMURE_CHILD_STATE_DEAD; this->children[i] = NULL; } @@ -367,7 +376,7 @@ void ObjMure_GroupBehavior1(ObjMure* this, PlayState* play) { maxChildren = ObjMure_GetMaxChildSpawns(this); for (i = 0; i < maxChildren; i++) { if (this->children[i] != NULL) { - if (this->children[i]->child != NULL && this->children[i]->child->update == NULL) { + if ((this->children[i]->child != NULL) && (this->children[i]->child->update == NULL)) { this->children[i]->child = NULL; } } @@ -380,7 +389,7 @@ static ObjMureActionFunc sTypeGroupBehaviorFunc[] = { void ObjMure_ActiveState(ObjMure* this, PlayState* play) { ObjMure_CheckChildren(this, play); - if (sZClip[this->type] + 40.0f <= fabsf(this->actor.projectedPos.z)) { + if ((sZClip[this->type] + 40.0f) <= fabsf(this->actor.projectedPos.z)) { this->actionFunc = ObjMure_CulledState; this->actor.flags &= ~ACTOR_FLAG_10; ObjMure_KillActors(this, play); diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index e06dbc30b..29a673eae 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -114,20 +114,20 @@ s32 func_809A34E0(ObjPzlblock* this, s32 arg1) { } if (temp_v0 == 4) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (temp_v0 == 5) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } if (temp_v0 == 6) { if (this->unk_176 != 0) { - return arg1 == 0 || arg1 == 1; + return (arg1 == 0) || (arg1 == 1); } if (this->unk_178 != 0) { - return arg1 == 2 || arg1 == 3; + return (arg1 == 2) || (arg1 == 3); } return true; } diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index 690823bf8..61fa2376f 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -124,7 +124,7 @@ void ObjTokeidai_ExteriorGear_Init(ObjTokeidai* this, PlayState* play) { if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { ObjTokeidai_SetupTowerOpening(this); - } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { + } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) { this->actionFunc = ObjTokeidai_ExteriorGear_OpenedIdle; this->actor.world.pos.y += this->actor.scale.y * 1900.0f; this->actor.shape.yOffset = 1500.0f; @@ -141,7 +141,7 @@ void ObjTokeidai_TowerClock_Init(ObjTokeidai* this, PlayState* play) { if (((play->sceneId == SCENE_CLOCKTOWER) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0)) || ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 2) && (play->csCtx.scriptIndex == 0))) { ObjTokeidai_SetupTowerOpening(this); - } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { + } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) { this->actor.world.pos.y += (this->actor.scale.y * 5191.0f) - 50.0f; this->actor.world.pos.x += Math_SinS(this->actor.world.rot.y) * this->actor.scale.z * 1791.0f; this->actor.world.pos.z += -Math_CosS(this->actor.world.rot.y) * this->actor.scale.z * 1791.0f; @@ -178,8 +178,8 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) { if (this->actor.child == NULL) { type = OBJ_TOKEIDAI_TYPE(&this->actor); - if (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN || - type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD) { + if ((type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN) || + (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD)) { this->actor.child = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HANABI, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } @@ -192,7 +192,7 @@ void ObjTokeidai_Counterweight_Init(ObjTokeidai* this, PlayState* play) { this->actor.child->home.rot.x = 0x12C; } } - } else if ((CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) || CURRENT_DAY >= 4) { + } else if (((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) { this->spotlightIntensity = 0; this->actor.world.pos.y += this->actor.scale.y * -2160.0f; this->actor.world.pos.x += Math_SinS(this->actor.world.rot.y) * this->actor.scale.z * 5400.0f; @@ -274,6 +274,9 @@ void ObjTokeidai_Init(Actor* thisx, PlayState* play) { this->xluDList = gClockTowerEmptyDL; this->actionFunc = ObjTokeidai_StaircaseToRooftop_Idle; break; + + default: + break; } } @@ -284,7 +287,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { s32 currentClockMinute = GET_CURRENT_CLOCK_MINUTE(this); if (currentClockMinute != this->clockMinute) { - if (this->minuteRingOrExteriorGearRotationTimer == 8 && playSfx) { + if ((this->minuteRingOrExteriorGearRotationTimer == 8) && playSfx) { Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_SECOND_HAND); } @@ -306,8 +309,8 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { this->minuteRingOrExteriorGearRotationTimer++; - if ((currentClockMinute == 15 && this->minuteRingOrExteriorGearRotation < 0) || - (currentClockMinute != 15 && + if (((currentClockMinute == 15) && (this->minuteRingOrExteriorGearRotation < 0)) || + ((currentClockMinute != 15) && this->minuteRingOrExteriorGearRotation > GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute))) { this->minuteRingOrExteriorGearRotation = GET_MINUTE_RING_OR_EXTERIOR_GEAR_ROTATION(currentClockMinute); this->clockMinute = currentClockMinute; @@ -318,7 +321,7 @@ void ObjTokeidai_RotateOnMinuteChange(ObjTokeidai* this, s32 playSfx) { } void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, PlayState* play) { - if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || this->actor.world.pos.y < 0.0f) { + if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->actor.world.pos.y < 0.0f)) { this->actionFunc = ObjTokeidai_DoNothing; } else { this->actor.shape.rot.x += 0x50; @@ -513,6 +516,9 @@ void ObjTokeidai_TowerOpening_DropCounterweight(ObjTokeidai* this, PlayState* pl case 2: Actor_PlaySfx(&this->actor, NA_SE_EV_CLOCK_TOWER_BOUND_2); break; + + default: + break; } this->boundCount++; @@ -609,7 +615,7 @@ void ObjTokeidai_DoNothing(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) { - if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || CURRENT_DAY >= 4) || + if ((((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) || (CURRENT_DAY >= 4)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) { this->actor.draw = ObjTokeidai_Draw; } else { @@ -621,7 +627,7 @@ s32 ObjTokeidai_IsPostFirstCycleFinalHours(ObjTokeidai* this, PlayState* play) { if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { return false; } - if (CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) { + if ((CURRENT_DAY == 3) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { ObjTokeidai_SetupTowerOpening(this); return true; } @@ -650,8 +656,8 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { this->clockFaceRotationTimer++; - if ((currentClockHour == 12 && this->clockFaceRotation < 0) || - (currentClockHour != 12 && this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour))) { + if (((currentClockHour == 12) && (this->clockFaceRotation < 0)) || + ((currentClockHour != 12) && (this->clockFaceRotation > GET_CLOCK_FACE_ROTATION(currentClockHour)))) { this->clockFaceRotation = GET_CLOCK_FACE_ROTATION(currentClockHour); this->clockHour = currentClockHour; this->clockFaceRotationalVelocity = 0; @@ -682,7 +688,7 @@ void ObjTokeidai_RotateOnHourChange(ObjTokeidai* this, PlayState* play) { } void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { - if (CURRENT_DAY == 3 && this->clockHour < 6 && gSaveContext.save.time < CLOCK_TIME(6, 0)) { + if ((CURRENT_DAY == 3) && (this->clockHour < 6) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { this->actor.draw = ObjTokeidai_Clock_Draw; ObjTokeidai_SetupTowerOpening(this); SET_WEEKEVENTREG(WEEKEVENTREG_08_40); @@ -695,8 +701,8 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { this->actor.draw = ObjTokeidai_Clock_Draw; } else { if (!(play->actorCtx.flags & ACTORCTX_FLAG_1) && - OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD && - CutsceneManager_GetCurrentCsId() == CS_ID_NONE) { + (OBJ_TOKEIDAI_TYPE(&this->actor) == OBJ_TOKEIDAI_TYPE_TOWER_CLOCK_TERMINA_FIELD) && + (CutsceneManager_GetCurrentCsId() == CS_ID_NONE)) { this->actor.draw = NULL; } this->clockTime = gSaveContext.save.time; @@ -706,7 +712,7 @@ void ObjTokeidai_TowerClock_Idle(ObjTokeidai* this, PlayState* play) { } } - if (CURRENT_DAY != 3 || gSaveContext.save.time >= CLOCK_TIME(6, 0)) { + if ((CURRENT_DAY != 3) || (gSaveContext.save.time >= CLOCK_TIME(6, 0))) { ObjTokeidai_RotateOnMinuteChange(this, true); } ObjTokeidai_RotateOnHourChange(this, play); @@ -750,8 +756,8 @@ void ObjTokeidai_Counterweight_Idle(ObjTokeidai* this, PlayState* play) { if (this->actor.child == NULL) { type = OBJ_TOKEIDAI_TYPE(&this->actor); - if (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN || - type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD) { + if ((type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_CLOCK_TOWN) || + (type == OBJ_TOKEIDAI_TYPE_COUNTERWEIGHT_TERMINA_FIELD)) { this->actor.child = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HANABI, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0); } diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index 32945a2a4..c4f884694 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -304,7 +304,7 @@ s32 func_80B781DC(ObjUm* this, EnHorse* bandit1, EnHorse* bandit2, PlayState* pl if (bandit1->unk_550 == D_80B7C164[i].unk_00) { if (bandit2->unk_550 != D_80B7C164[i].unk_04) { if (D_80B7C164[i].unk_00 != 3) { - if (D_80B7C164[i].unk_04 != 3 || + if ((D_80B7C164[i].unk_04 != 3) || ((mask = Player_GetMask(play)), PLAYER_MASK_CIRCUS_LEADER != mask)) { phi_s3 = D_80B7C164[i].unk_04; phi_s4 = D_80B7C164[i].unk_08; @@ -455,13 +455,13 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi } if (this->potsLife[1] != 1) { - if ((potIndex == -1) || (potIndex == 0 && Rand_ZeroOne() < 0.3f)) { + if ((potIndex == -1) || ((potIndex == 0) && (Rand_ZeroOne() < 0.3f))) { potIndex = 1; } } if (this->potsLife[2] != 1) { - if ((potIndex == -1) || (potIndex != -1 && Rand_ZeroOne() < 0.3f)) { + if ((potIndex == -1) || ((potIndex != -1) && (Rand_ZeroOne() < 0.3f))) { potIndex = 2; } } @@ -497,8 +497,6 @@ s32 func_80B78764(ObjUm* this, PlayState* play, EnHorse* bandit1, EnHorse* bandi phi_v1_5 = Math_Vec3f_Yaw(&bandit1->actor.prevPos, &bandit1->actor.world.pos); } - if (1) {} - phi_v1_5 -= bandit1->actor.shape.rot.y; if (phi_v1_5 > 0x190) { bandit1->actor.shape.rot.y += 0x190; @@ -879,6 +877,9 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { Actor_ContinueText(play, &this->dyna.actor, 0x33BC); phi_v1 = false; break; + + default: + break; } return phi_v1; @@ -900,6 +901,9 @@ s32 func_80B79734(PlayState* play, ObjUm* this, s32 arg2) { ret = true; } break; + + default: + break; } return ret; } @@ -1031,7 +1035,7 @@ typedef enum ObjUmPathState { /* 1 */ OBJUM_PATH_STATE_1, /* 2 */ OBJUM_PATH_STATE_FINISH, /* 3 */ OBJUM_PATH_STATE_3, - /* 4 */ OBJUM_PATH_STATE_4, + /* 4 */ OBJUM_PATH_STATE_4 } ObjUmPathState; ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) { @@ -1096,8 +1100,6 @@ ObjUmPathState ObjUm_UpdatePath(ObjUm* this, PlayState* play) { this->dyna.actor.world.rot.y = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp50); Horse_RotateToPoint(&this->donkey->actor, &sp50, 0x190); - if (1) {} - yawDiff = this->donkey->actor.shape.rot.y - this->dyna.actor.shape.rot.y; if (fabsf(yawDiff) < 2730.0f) { if (fabsf(yawDiff) < 100.0f) { @@ -1336,7 +1338,7 @@ void func_80B7A614(ObjUm* this, PlayState* play) { this->flags |= OBJ_UM_FLAG_PLAYING_MINIGAME; ObjUm_ChangeAnim(this, play, OBJ_UM_ANIM_GALLOP); - if (ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_3 && this->unk_4DC == 0) { + if ((ObjUm_UpdatePath(this, play) == OBJUM_PATH_STATE_3) && (this->unk_4DC == 0)) { this->unk_4DC = 1; } else if (this->unk_4DC > 0) { if (this->unk_4DC == 1) { @@ -1471,7 +1473,7 @@ void func_80B7A860(ObjUm* this, PlayState* play) { case 0x33BF: this->unk_4D8++; - if ((fabsf(this->skelAnime.morphWeight) < 0.008f) && this->unk_4D8 >= 6) { + if ((fabsf(this->skelAnime.morphWeight) < 0.008f) && (this->unk_4D8 >= 6)) { this->unk_4CC = 0; this->mouthTexIndex = 0; } else { @@ -1632,9 +1634,9 @@ void ObjUm_DefaultAnim(ObjUm* this, PlayState* play) { } typedef struct { - /* 0x00 */ AnimationHeader* anim; - /* 0x04 */ s32 doesMove; // `true` if the animation is intended to be used while the actor is moving -} struct_80B7C25C; // size = 0x08 + /* 0x0 */ AnimationHeader* anim; + /* 0x4 */ s32 doesMove; // `true` if the animation is intended to be used while the actor is moving +} struct_80B7C25C; // size = 0x8 struct_80B7C25C sUmAnims[] = { { &gUmTrotAnim, true }, // OBJ_UM_ANIM_TROT @@ -1701,7 +1703,7 @@ void ObjUm_ChangeAnim(ObjUm* this, PlayState* play, ObjUmAnimation animIndex) { } } - if (this->wheelRot / 0x199A != this->unk_420) { + if ((this->wheelRot / 0x199A) != this->unk_420) { this->unk_420 = this->wheelRot / 0x199A; //! FAKE if (sUmAnims[0].doesMove) {} @@ -1768,18 +1770,23 @@ void ObjUm_Update(Actor* thisx, PlayState* play) { case 1: this->eyeTexIndex = 3; break; + case 2: this->eyeTexIndex = 4; break; + case 3: this->eyeTexIndex = 5; break; + case 4: this->eyeTexIndex = 2; break; + case 5: this->eyeTexIndex = 0; break; + default: this->unk_4CC = 0; this->eyeTexIndex = 0; @@ -1913,6 +1920,7 @@ void ObjUm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, sp80.x = 0; sp80.z = 0; sp88.x = 6800.0f; + OPEN_DISPS(gfxCtx); for (i = 0; i < ARRAY_COUNT(this->potsLife); i++) { diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c index 1c05a0981..2661b9cc5 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -517,6 +517,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) { } OPEN_DISPS(play->state.gfxCtx); + spB4 = false; if (this->actor.params == 3) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 87db12b1e..5da69099e 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -11212,7 +11212,7 @@ void func_808442D8(PlayState* play, Player* this) { if (var_fa0 > 0.0f) { func_800B0EB0(play, &this->meleeWeaponInfo[0].tip, &D_8085D364, &D_8085D370, &D_8085D37C, &D_8085D380, (var_fa0 * 200.0f), 0, 8); - if (((play->roomCtx.curRoom.enablePosLights != 0)) || (MREG(93) != 0)) { + if (play->roomCtx.curRoom.enablePosLights || (MREG(93) != 0)) { temp_fv1 = (Rand_ZeroOne() * 30.0f) + 225.0f; Lights_PointSetColorAndRadius(&this->lightInfo, temp_fv1, temp_fv1 * 0.7f, 0, var_fa0 * 300.0f); } @@ -11581,7 +11581,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { Math_StepToF(&this->unk_B10[0], var_v0, D_8085D3FC[var_v0]); } func_80832888(this, play); - if (play->roomCtx.curRoom.enablePosLights != 0) { + if (play->roomCtx.curRoom.enablePosLights) { Lights_PointSetColorAndRadius(&this->lightInfo, 255, 255, 255, 60); } else { this->lightInfo.params.point.radius = -1; @@ -15553,7 +15553,7 @@ void func_8084FD7C(PlayState* play, Player* this, Actor* actor) { } s32 func_8084FE48(Player* this) { - return this->targetedActor == NULL && !func_8082FC24(this); + return (this->targetedActor == NULL) && !func_8082FC24(this); } PlayerAnimationHeader* D_8085D688[] = { diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 26cfb7a59..daa6aff8f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -988,10 +988,10 @@ 0x801BE9F4:("sHeartsDDEnvColors","s16","[3][3]",0x12), 0x801BEA08:("sHeartsDDPrimFactors","s16","[3][3]",0x12), 0x801BEA1C:("sHeartsDDEnvFactors","s16","[3][3]",0x12), - 0x801BEA30:("HeartTextures","UNK_TYPE1","",0x1), - 0x801BEA70:("HeartDDTextures","UNK_TYPE1","",0x1), - 0x801BEAB0:("posBindFuncs","LightsPosBindFunc","[3]",0xc), - 0x801BEABC:("dirBindFuncs","LightsBindFunc","[3]",0xc), + 0x801BEA30:("sHeartTextures","UNK_TYPE1","",0x1), + 0x801BEA70:("sHeartDDTextures","UNK_TYPE1","",0x1), + 0x801BEAB0:("sPosBindFuncs","LightsPosBindFunc","[3]",0xc), + 0x801BEABC:("sDirBindFuncs","LightsBindFunc","[3]",0xc), 0x801BEAD4:("D_801BEAD4","UNK_TYPE4","",0x4), 0x801BEAD8:("D_801BEAD8","UNK_TYPE4","",0x4), 0x801BEAE0:("D_801BEAE0","UNK_TYPE1","",0x1), From cd53dd317fa1ce2958f2c6af618059a31db59076 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Sun, 4 Jun 2023 19:46:39 -0700 Subject: [PATCH 26/36] Some pathing docs (#1205) * Some pathing docs * Missed one * Uno mas * Uno mas x2 * Cleanup * fix * namefixer * NULL * More * PR * Actually remove SQ * -1 define, plus some more pathing cleanup * Actor macros instead * Format * ADDITIONAL_PATH_INDEX_NONE * Remove reliance on PATH_INDEX_NONE * Missed some PathIndex cleanup * Review * format --- include/functions.h | 2 +- include/z64scene.h | 9 ++- include/z64subs.h | 4 +- src/code/z_path.c | 4 +- src/code/z_sub_s.c | 18 +++--- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 12 ++-- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.h | 4 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 12 ++-- .../actors/ovl_Bg_Ingate/z_bg_ingate.h | 2 +- .../actors/ovl_Dm_Char09/z_dm_char09.c | 12 ++-- .../actors/ovl_Dm_Char09/z_dm_char09.h | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.h | 4 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 10 ++-- .../actors/ovl_En_Aob_01/z_en_aob_01.h | 2 + src/overlays/actors/ovl_En_Baba/z_en_baba.c | 6 +- src/overlays/actors/ovl_En_Baba/z_en_baba.h | 2 + .../actors/ovl_En_Bba_01/z_en_bba_01.c | 4 +- .../actors/ovl_En_Bba_01/z_en_bba_01.h | 4 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 6 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h | 8 +-- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 4 +- .../actors/ovl_En_Cne_01/z_en_cne_01.h | 4 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 13 ++-- src/overlays/actors/ovl_En_Daiku/z_en_daiku.h | 8 ++- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 18 +++--- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 8 ++- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 2 +- src/overlays/actors/ovl_En_Dg/z_en_dg.h | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 10 ++-- src/overlays/actors/ovl_En_Egol/z_en_egol.h | 6 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 18 +++--- src/overlays/actors/ovl_En_Famos/z_en_famos.h | 8 ++- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 2 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 4 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.h | 4 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 18 +++--- src/overlays/actors/ovl_En_Ge2/z_en_ge2.h | 6 +- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 18 +++--- src/overlays/actors/ovl_En_Gg2/z_en_gg2.h | 6 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.h | 4 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 16 ++--- src/overlays/actors/ovl_En_Gm/z_en_gm.h | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 3 +- src/overlays/actors/ovl_En_Go/z_en_go.h | 3 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 6 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.h | 7 ++- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 16 ++--- src/overlays/actors/ovl_En_Ig/z_en_ig.h | 2 +- src/overlays/actors/ovl_En_In/z_en_in.c | 6 +- src/overlays/actors/ovl_En_In/z_en_in.h | 4 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.h | 4 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 4 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 2 +- src/overlays/actors/ovl_En_Js/z_en_js.h | 2 + .../actors/ovl_En_Look_Nuts/z_en_look_nuts.c | 14 ++--- .../actors/ovl_En_Look_Nuts/z_en_look_nuts.h | 8 ++- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 16 ++--- src/overlays/actors/ovl_En_Ma4/z_en_ma4.h | 4 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 60 +++++++++---------- .../actors/ovl_En_Pamera/z_en_pamera.h | 8 ++- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 20 +++---- src/overlays/actors/ovl_En_Pm/z_en_pm.h | 2 + src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 6 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.h | 3 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.h | 5 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.h | 2 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 9 +-- src/overlays/actors/ovl_En_Rg/z_en_rg.h | 4 +- .../ovl_En_River_Sound/z_en_river_sound.c | 2 +- .../ovl_En_River_Sound/z_en_river_sound.h | 2 + src/overlays/actors/ovl_En_Ru/z_en_ru.c | 2 +- src/overlays/actors/ovl_En_Ru/z_en_ru.h | 4 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.h | 4 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 +- src/overlays/actors/ovl_En_Rz/z_en_rz.h | 4 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 4 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.h | 4 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 6 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.h | 4 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.h | 4 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.h | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 17 +++--- .../actors/ovl_En_Suttari/z_en_suttari.h | 4 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 17 +++--- src/overlays/actors/ovl_En_Sw/z_en_sw.h | 6 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 6 +- .../z_en_syateki_dekunuts.c | 12 ++-- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.h | 15 +++-- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 6 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 10 ++-- src/overlays/actors/ovl_En_Test3/z_en_test3.h | 2 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 4 +- src/overlays/actors/ovl_En_Tk/z_en_tk.h | 2 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 6 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.h | 4 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 3 +- src/overlays/actors/ovl_En_Tru/z_en_tru.h | 4 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 4 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.h | 2 + src/overlays/actors/ovl_En_Zo/z_en_zo.c | 6 +- src/overlays/actors/ovl_En_Zo/z_en_zo.h | 4 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 20 +++---- src/overlays/actors/ovl_En_Zot/z_en_zot.h | 4 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c | 6 +- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h | 2 +- .../ovl_Obj_Danpeilift/z_obj_danpeilift.c | 2 +- .../ovl_Obj_Danpeilift/z_obj_danpeilift.h | 2 +- .../ovl_Obj_Lupygamelift/z_obj_lupygamelift.c | 2 +- .../ovl_Obj_Lupygamelift/z_obj_lupygamelift.h | 2 +- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c | 2 +- .../ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.h | 2 +- src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c | 4 +- src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h | 4 +- tools/namefixer.py | 11 ++-- 125 files changed, 450 insertions(+), 347 deletions(-) diff --git a/include/functions.h b/include/functions.h index 5774ca3c6..ccf1877e0 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1503,7 +1503,7 @@ void Interface_Update(PlayState* play); void Interface_Destroy(PlayState* play); void Interface_Init(PlayState* play); -Path* Path_GetByIndex(PlayState* play, s16 index, s16 max); +Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone); f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw); void Path_CopyLastPoint(Path* path, Vec3f* dest); diff --git a/include/z64scene.h b/include/z64scene.h index 387d584f5..7f48d8740 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -469,10 +469,13 @@ typedef struct { /* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX]; } ObjectContext; // size = 0x958 +#define PATH_INDEX_NONE -1 +#define ADDITIONAL_PATH_INDEX_NONE (u8)-1 + typedef struct { - /* 0x0 */ u8 count; // number of points in the path - /* 0x1 */ u8 unk1; - /* 0x2 */ s16 unk2; + /* 0x0 */ u8 count; // Number of points in the path + /* 0x1 */ u8 additionalPathIndex; + /* 0x2 */ s16 customValue; // Path specific to help distinguish different paths /* 0x4 */ Vec3s* points; // Segment Address to the array of points } Path; // size = 0x8 diff --git a/include/z64subs.h b/include/z64subs.h index ad2b7044f..768f81079 100644 --- a/include/z64subs.h +++ b/include/z64subs.h @@ -108,7 +108,7 @@ s32 SubS_ChangeAnimationByInfoS(SkelAnime* skelAnime, AnimationInfoS* animationI s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex); -Path* SubS_GetDayDependentPath(struct PlayState* play, u8 pathIndex, u8 max, s32* startPointIndex); +Path* SubS_GetDayDependentPath(struct PlayState* play, u8 pathIndex, u8 pathIndexNone, s32* startPointIndex); s32 SubS_WeightPathing_ComputePoint(Path* path, s32 waypoint, Vec3f* point, f32 progress, s32 direction); s32 SubS_WeightPathing_Move(Actor* actor, Path* path, s32* waypoint, f32* progress, s32 direction, s32 returnStart); @@ -126,7 +126,7 @@ s32 SubS_TrackPoint(Vec3f* target, Vec3f* focusPos, Vec3s* shapeRot, Vec3s* trac s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB); -Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 max); +Path* SubS_GetPathByIndex(struct PlayState* play, s16 pathIndex, s16 pathIndexNone); s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst); s16 SubS_GetDistSqAndOrientPoints(Vec3f* vecA, Vec3f* vecB, f32* distSq); s32 SubS_MoveActorToPoint(Actor* actor, Vec3f* point, s16 rotStep); diff --git a/src/code/z_path.c b/src/code/z_path.c index 3c446d49a..76d7ce144 100644 --- a/src/code/z_path.c +++ b/src/code/z_path.c @@ -1,9 +1,9 @@ #include "global.h" -Path* Path_GetByIndex(PlayState* play, s16 index, s16 max) { +Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone) { Path* path; - if (index != max) { + if (index != indexNone) { path = &play->setupPathList[index]; } else { path = NULL; diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 05a3c331e..35886da18 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -489,9 +489,9 @@ Path* SubS_GetAdditionalPath(PlayState* play, u8 pathIndex, s32 limit) { if (i >= limit) { break; } - pathIndex = path->unk1; + pathIndex = path->additionalPathIndex; i++; - } while (pathIndex != 0xFF); + } while (pathIndex != ADDITIONAL_PATH_INDEX_NONE); return path; } @@ -585,7 +585,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) { return reached; } -Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 max, s32* startPointIndex) { +Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 pathIndexNone, s32* startPointIndex) { Path* path = NULL; s32 found = false; s32 time = (((s16)TIME_TO_MINUTES_F(gSaveContext.save.time) % 60) + @@ -593,17 +593,17 @@ Path* SubS_GetDayDependentPath(PlayState* play, u8 pathIndex, u8 max, s32* start 30; s32 day = CURRENT_DAY; - if (pathIndex == max) { + if (pathIndex == pathIndexNone) { return NULL; } - while (pathIndex != 0xFF) { + while (pathIndex != ADDITIONAL_PATH_INDEX_NONE) { path = &play->setupPathList[pathIndex]; - if (sPathDayFlags[day] & path->unk2) { + if (path->customValue & sPathDayFlags[day]) { found = true; break; } - pathIndex = path->unk1; + pathIndex = path->additionalPathIndex; } if (found == true) { @@ -1098,8 +1098,8 @@ s32 SubS_AngleDiffLessEqual(s16 angleA, s16 threshold, s16 angleB) { return (ABS_ALT(BINANG_SUB(angleB, angleA)) <= threshold) ? true : false; } -Path* SubS_GetPathByIndex(PlayState* play, s16 pathIndex, s16 max) { - return (pathIndex != max) ? &play->setupPathList[pathIndex] : NULL; +Path* SubS_GetPathByIndex(PlayState* play, s16 pathIndex, s16 pathIndexNone) { + return (pathIndex != pathIndexNone) ? &play->setupPathList[pathIndex] : NULL; } s32 SubS_CopyPointFromPath(Path* path, s32 pointIndex, Vec3f* dst) { diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c index 134e7227a..97ccc907a 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c @@ -56,8 +56,8 @@ s32 func_80BC3980(BgF40Block* this, PlayState* play) { this->unk_160 = 0; this->unk_164 = 0; - if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { - this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; + if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) { + this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)]; if (this->path != NULL) { points = Lib_SegmentedToVirtual(this->path->points); @@ -78,8 +78,8 @@ s32 func_80BC3A2C(BgF40Block* this, PlayState* play) { this->unk_160 = this->path->count - 1; this->unk_164 = this->path->count - 1; - if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { - this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; + if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) { + this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)]; if (this->path != NULL) { points = Lib_SegmentedToVirtual(this->path->points); points += this->unk_164; @@ -231,8 +231,8 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gStoneTowerBlockCol); - if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { - this->path = &play->setupPathList[BGF40BLOCK_GET_PATH(&this->dyna.actor)]; + if (BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor) != BGF40BLOCK_PATH_INDEX_NONE) { + this->path = &play->setupPathList[BGF40BLOCK_GET_PATH_INDEX(&this->dyna.actor)]; } else { this->path = NULL; } diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h index 37a5c360e..228fb6bfd 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.h @@ -7,9 +7,11 @@ struct BgF40Block; typedef void (*BgF40BlockActionFunc)(struct BgF40Block*, PlayState*); -#define BGF40BLOCK_GET_PATH(thisx) (((thisx)->params & 0x1FC) >> 2) +#define BGF40BLOCK_GET_PATH_INDEX(thisx) (((thisx)->params & 0x1FC) >> 2) #define BGF40BLOCK_GET_SWITCHFLAG(thisx) (((thisx)->params & 0xFE00) >> 9) +#define BGF40BLOCK_PATH_INDEX_NONE 0x3F + typedef struct BgF40Block { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ Path* path; diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index 8f86f7c12..2796aed7e 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -190,7 +190,7 @@ void func_80953F9C(BgIngate* this, PlayState* play) { if (this->unk160 & 2) { - if (this->timePath->unk1 != 0xFF) { + if (this->timePath->additionalPathIndex != ADDITIONAL_PATH_INDEX_NONE) { func_80953E38(play); func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_WAIT); this->dyna.actor.textId = 0x9E4; @@ -262,7 +262,7 @@ void func_80954340(BgIngate* this, PlayState* play) { if (DECR(this->unk16A) == 0) { if (this->timePath != NULL) { func_800B7298(play, &this->dyna.actor, PLAYER_CSMODE_END); - this->timePath = &play->setupPathList[this->timePath->unk1]; + this->timePath = &play->setupPathList[this->timePath->additionalPathIndex]; func_80953F14(this, play); Environment_StopTime(); } @@ -287,7 +287,7 @@ void func_809543D4(BgIngate* this, PlayState* play) { func_8019F208(); } else { if (this->timePath != NULL) { - this->timePath = &play->setupPathList[this->timePath->unk1]; + this->timePath = &play->setupPathList[this->timePath->additionalPathIndex]; } func_80953F14(this, play); CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); @@ -328,7 +328,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { this->unk160 |= 0x8; this->unk160 |= 0x10; Actor_SetScale(&this->dyna.actor, 1.0f); - this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0); + this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), 0); this->dyna.actor.room = -1; if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLEARED_WOODFALL_TEMPLE)) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_40); @@ -350,7 +350,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { this->actionFunc = func_80953F8C; } } - this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), phi_a2); + this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), phi_a2); if (this->timePath != NULL) { sp38 = Lib_SegmentedToVirtual(this->timePath->points); Math_Vec3s_ToVec3f(&sp2C, &sp38[0]); @@ -361,7 +361,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { this->dyna.actor.world.pos.y = -15.0f; this->dyna.actor.world.pos.z = sp2C.z; } - this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_FF(&this->dyna.actor), 0); + this->timePath = SubS_GetAdditionalPath(play, BGINGATE_GET_PATH_INDEX(&this->dyna.actor), 0); } else { Actor_Kill(&this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h index 6046fc31e..bf272f342 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.h @@ -7,7 +7,7 @@ struct BgIngate; typedef void (*BgIngateActionFunc)(struct BgIngate*, PlayState*); -#define BGINGATE_GET_FF(thisx) ((thisx)->params & 0xFF) +#define BGINGATE_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) typedef struct BgIngate { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c index 0f53193d1..587ca059d 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.c @@ -129,7 +129,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { s32 i; s32 cueChannel; s32 max = 0; - s32 pathnum; + s32 pathIndex; u8 temp = false; if (!DMCHAR09_GET_F(&this->actor)) { @@ -160,12 +160,12 @@ void func_80AB2268(DmChar09* this, PlayState* play) { } if (play->csCtx.actorCues[cueChannel]->id >= 2) { - pathnum = DMCHAR09_GET_PATH(&this->actor); - path = &play->setupPathList[pathnum]; + pathIndex = DMCHAR09_GET_PATH_INDEX(&this->actor); + path = &play->setupPathList[pathIndex]; for (i = 0; i < max; i++) { - pathnum = path->unk1; - path = &play->setupPathList[pathnum]; + pathIndex = path->additionalPathIndex; + path = &play->setupPathList[pathIndex]; } this->unk_224 = Lib_SegmentedToVirtual(path->points); @@ -175,7 +175,7 @@ void func_80AB2268(DmChar09* this, PlayState* play) { this->unk_220 = 1; this->unk_22E = true; - this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * 0.00390625f; + this->speed = (u16)play->csCtx.actorCues[cueChannel]->rot.z * (1.0f / 256.0f); this->actionFunc = func_80AB1FDC; } else { this->unk_22E = false; diff --git a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h index cfb3523e6..cca08d079 100644 --- a/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h +++ b/src/overlays/actors/ovl_Dm_Char09/z_dm_char09.h @@ -4,7 +4,7 @@ #include "global.h" #include "objects/object_bee/object_bee.h" -#define DMCHAR09_GET_PATH(thisx) (((thisx)->params >> 4) & 0xF) +#define DMCHAR09_GET_PATH_INDEX(thisx) (((thisx)->params >> 4) & 0xF) #define DMCHAR09_GET_100(thisx) ((thisx)->params & 0x100) #define DMCHAR09_GET_F(thisx) ((thisx)->params & 0xF) diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 015e57008..5fcf75fdf 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -1610,7 +1610,7 @@ void EnAkindonuts_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -1.0f; if (!ENAKINDONUTS_GET_4(&this->actor)) { - this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENAKINDONUTS_GET_PATH_INDEX(&this->actor), ENAKINDONUTS_PATH_INDEX_NONE); if (this->path == NULL) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h index 180d73ed4..4c8a4eb77 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h @@ -10,7 +10,9 @@ typedef void (*EnAkindonutsUnkFunc)(struct EnAkindonuts*, PlayState*); #define ENAKINDONUTS_GET_3(thisx) ((thisx)->params & 3) #define ENAKINDONUTS_GET_4(thisx) (((thisx)->params & 4) >> 2) -#define ENAKINDONUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENAKINDONUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENAKINDONUTS_PATH_INDEX_NONE 0x3F enum { /* 1 */ ENAKINDONUTS_3_1 = 1, diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index 64adaa49b..8d3c6b23b 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -134,12 +134,12 @@ void EnAob01_InitializeDogPaths(EnAob01* this, PlayState* play) { s32 pathIndex = ENAOB01_GET_STARTING_DOG_PATH_INDEX(&this->actor); s16 i = 0; - if (pathIndex != 0x3F) { + if (pathIndex != ENAOB01_PATH_INDEX_NONE) { do { - this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, 0x3F); - pathIndex = this->dogPaths[i]->unk1; + this->dogPaths[i] = SubS_GetPathByIndex(play, pathIndex, ENAOB01_PATH_INDEX_NONE); + pathIndex = this->dogPaths[i]->additionalPathIndex; i++; - } while (pathIndex != 0xFF); + } while (pathIndex != ADDITIONAL_PATH_INDEX_NONE); } } @@ -153,7 +153,7 @@ void EnAob01_SpawnDogs(EnAob01* this, PlayState* play) { EnAob01_InitializeDogPaths(this, play); for (i = 0; i < RACEDOG_COUNT; i++) { - enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->unk1, i); + enDgParams = ENDG_PARAMS(this->dogPaths[sDogInfo[i].pathIndex]->additionalPathIndex, i); this->dogs[i] = Actor_SpawnAsChildAndCutscene( &play->actorCtx, play, ACTOR_EN_DG, sDogInfo[i].pos.x, sDogInfo[i].pos.y, sDogInfo[i].pos.z, 0, diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h index a550fd0d3..5f7775368 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.h @@ -29,6 +29,8 @@ typedef void (*EnAob01ActionFunc)(struct EnAob01*, PlayState*); #define ENAOB01_FLAG_SURPRISE (1 << 7) #define ENAOB01_FLAG_PLAYER_CAN_TALK (1 << 8) +#define ENAOB01_PATH_INDEX_NONE 0x3F + typedef struct EnAob01 { /* 0x000 */ Actor actor; /* 0x144 */ EnAob01ActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index e303fe1c5..f41dcbd31 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -511,7 +511,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { } else if (play->sceneId == SCENE_BACKTOWN) { if ((BOMB_SHOP_LADY_GET_TYPE(&this->actor) == BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE) && (gSaveContext.save.entrance != ENTRANCE(NORTH_CLOCK_TOWN, 7)) && - (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F)) { + (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != BOMB_SHOP_LADY_PATH_INDEX_NONE)) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_58_40) || (gSaveContext.save.time >= CLOCK_TIME(0, 20) && (gSaveContext.save.time < CLOCK_TIME(6, 0)))) { Actor_Kill(&this->actor); @@ -550,7 +550,7 @@ void EnBaba_FinishInit(EnBaba* this, PlayState* play) { this->animIndex = BOMB_SHOP_LADY_ANIM_SWAY; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_DoNothing; - } else if (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != 0x3F) { + } else if (BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor) != BOMB_SHOP_LADY_PATH_INDEX_NONE) { this->animIndex = BOMB_SHOP_LADY_ANIM_WALKING_HOLDING_BAG; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->animIndex); this->actionFunc = EnBaba_Walk; @@ -728,7 +728,7 @@ void EnBaba_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->path = SubS_GetPathByIndex(play, BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, BOMB_SHOP_LADY_GET_PATH_INDEX(&this->actor), BOMB_SHOP_LADY_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.01f); diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.h b/src/overlays/actors/ovl_En_Baba/z_en_baba.h index 7da0ed054..9618dd3a2 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.h +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.h @@ -12,6 +12,8 @@ typedef void (*EnBabaActionFunc)(struct EnBaba*, PlayState*); #define BOMB_SHOP_LADY_GET_PATH_INDEX(thisx) (((thisx)->params & 0x3F00) >> 8) #define BOMB_SHOP_LADY_GET_TYPE(thisx) (((thisx)->params & 0xC000) >> 0xE) +#define BOMB_SHOP_LADY_PATH_INDEX_NONE 0x3F + // Types BOMB_SHOP_LADY_TYPE_FOLLOW_SCHEDULE and BOMB_SHOP_LADY_TYPE_IDLE can only be used in SCENE_BACKTOWN // Type BOMB_SHOP_LADY_TYPE_SWAY can be used anywhere except SCENE_BACKTOWN and SCENE_BOMYA typedef enum { diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 223bb1b24..d124f0b77 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -162,7 +162,7 @@ void EnBba01_FinishInit(EnHy* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; this->actor.draw = EnBba01_Draw; this->waitingOnInit = false; - if (ENBBA01_GET_PATH(&this->actor) == 0x3F) { + if (ENBBA01_GET_PATH_INDEX(&this->actor) == ENBBA01_PATH_INDEX_NONE) { this->actionFunc = EnBba01_FaceFoward; } else { this->actionFunc = EnBba01_Walk; @@ -227,7 +227,7 @@ void EnBba01_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); this->enHy.actor.flags &= ~ACTOR_FLAG_1; - this->enHy.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH(&this->enHy.actor), 0x3F); + this->enHy.path = SubS_GetPathByIndex(play, ENBBA01_GET_PATH_INDEX(&this->enHy.actor), ENBBA01_PATH_INDEX_NONE); this->enHy.waitingOnInit = true; Actor_SetScale(&this->enHy.actor, 0.01f); this->enHy.actionFunc = EnBba01_FinishInit; diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h index 7160594d8..0cc158f2a 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.h @@ -7,7 +7,9 @@ struct EnBba01; typedef void (*EnBba01ActionFunc)(struct EnBba01*, PlayState*); -#define ENBBA01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENBBA01_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENBBA01_PATH_INDEX_NONE 0x3F typedef struct EnBba01 { /* 0x000 */ EnHy enHy; diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 8d104842a..834d5f7f7 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -93,8 +93,8 @@ void EnBomBowlMan_Init(Actor* thisx, PlayState* play) { return; } - this->unk_29A = ENBOMBOWLMAN_GET_FF00(&this->actor); - this->path = SubS_GetPathByIndex(play, this->unk_29A, 0x3F); + this->pathIndex = ENBOMBOWLMAN_GET_PATH_INDEX(&this->actor); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENBOMBOWLMAN_PATH_INDEX_NONE); this->unk_2C8 = 80.0f; if ((gSaveContext.save.entrance == ENTRANCE(EAST_CLOCK_TOWN, 2)) && CHECK_WEEKEVENTREG(WEEKEVENTREG_73_80) && @@ -156,7 +156,7 @@ void func_809C4B50(EnBomBowlMan* this) { } void func_809C4B6C(EnBomBowlMan* this) { - if ((this->unk_29A != ENBOMBOWLMAN_FF00_MINUS1) && (this->path != NULL)) { + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) { if (!SubS_CopyPointFromPath(this->path, this->unk_298, &this->unk_2A0)) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h index e958b84a1..df515ef4f 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.h @@ -9,13 +9,13 @@ typedef void (*EnBomBowlManActionFunc)(struct EnBomBowlMan*, PlayState*); #define ENBOMBOWLMAN_GET_F(thisx) ((thisx)->params & 0xF) #define ENBOMBOWLMAN_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) -#define ENBOMBOWLMAN_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) +#define ENBOMBOWLMAN_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) + +#define ENBOMBOWLMAN_PATH_INDEX_NONE 0x3F #define ENBOMBOWLMAN_F0_0 0 #define ENBOMBOWLMAN_F0_2 2 -#define ENBOMBOWLMAN_FF00_MINUS1 -1 - typedef struct EnBomBowlMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -30,7 +30,7 @@ typedef struct EnBomBowlMan { /* 0x292 */ UNK_TYPE1 unk292[2]; /* 0x294 */ Path* path; /* 0x298 */ s16 unk_298; - /* 0x29A */ s16 unk_29A; + /* 0x29A */ s16 pathIndex; /* 0x29C */ s16 unk_29C; /* 0x29E */ s16 unk_29E; /* 0x2A0 */ Vec3f unk_2A0; diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index 1cda18c27..8eb9eb839 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -152,7 +152,7 @@ void EnCne01_FinishInit(EnHy* this, PlayState* play) { this->actor.flags |= ACTOR_FLAG_1; this->actor.draw = EnCne01_Draw; this->waitingOnInit = false; - if (ENCNE01_GET_PATH(&this->actor) == 0x3F) { + if (ENCNE01_GET_PATH_INDEX(&this->actor) == ENCNE01_PATH_INDEX_NONE) { this->actionFunc = EnCne01_FaceForward; } else { this->actionFunc = EnCne01_Walk; @@ -217,7 +217,7 @@ void EnCne01_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->enHy.collider, &this->enHy.actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->enHy.actor.colChkInfo, &sDamageTable, &sColChkInfoInit); this->enHy.actor.flags &= ~ACTOR_FLAG_1; - this->enHy.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH(&this->enHy.actor), 0x3F); + this->enHy.path = SubS_GetPathByIndex(play, ENCNE01_GET_PATH_INDEX(&this->enHy.actor), ENCNE01_PATH_INDEX_NONE); this->enHy.waitingOnInit = true; Actor_SetScale(&this->enHy.actor, 0.01f); this->enHy.actionFunc = EnCne01_FinishInit; diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h index 253025760..feee462a9 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.h @@ -7,7 +7,9 @@ struct EnCne01; typedef void (*EnCne01ActionFunc)(struct EnCne01*, PlayState*); -#define ENCNE01_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENCNE01_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENCNE01_PATH_INDEX_NONE 0x3F typedef struct EnCne01 { /* 0x000 */ EnHy enHy; diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index 8a8770371..2900f4d34 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -77,8 +77,8 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU_GET_FF(&this->actor); if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { - this->unk_288 = ENDAIKU_GET_FF00(&this->actor); - this->unk_258 = SubS_GetPathByIndex(play, this->unk_288, 0x3F); + this->pathIndex = ENDAIKU_GET_PATH_INDEX(&this->actor); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU_PATH_INDEX_NONE); } else if (this->unk_278 == ENDAIKU_PARAMS_FF_2) { this->unk_264 = -2000; } @@ -134,8 +134,8 @@ void func_8094373C(EnDaiku* this, s32 arg1) { } void func_809437C8(EnDaiku* this) { - if ((this->unk_288 != -1) && (this->unk_258 != 0)) { - if (!SubS_CopyPointFromPath(this->unk_258, this->unk_25C, &this->unk_26C)) { + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) { + if (!SubS_CopyPointFromPath(this->path, this->unk_25C, &this->unk_26C)) { Actor_Kill(&this->actor); } } @@ -208,9 +208,9 @@ void func_809438F8(EnDaiku* this, PlayState* play) { xzDist = sqrtf(SQ(this->actor.world.pos.x - this->unk_26C.x) + SQ(this->actor.world.pos.z - this->unk_26C.z)); yawDiff = fabsf(this->actor.world.rot.y - this->unk_282); - if ((xzDist < 4.0f) && (this->unk_258 != NULL) && (yawDiff < 10.0f)) { + if ((xzDist < 4.0f) && (this->path != NULL) && (yawDiff < 10.0f)) { this->unk_25C++; - if (this->unk_25C >= this->unk_258->count) { + if (this->unk_25C >= this->path->count) { this->unk_25C = 0; } @@ -221,6 +221,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { if (this->unk_278 != ENDAIKU_PARAMS_FF_0) { s16 angle = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y)); + this->unk_280 = this->actor.yawTowardsPlayer; if ((this->unk_278 == ENDAIKU_PARAMS_FF_1) || (this->unk_278 == ENDAIKU_PARAMS_FF_2) || (angle <= 0x2890)) { func_800B8614(&this->actor, play, 100.0f); diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h index 4a3c9b444..c75afec6e 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h @@ -8,7 +8,9 @@ struct EnDaiku; typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*); #define ENDAIKU_GET_FF(thisx) ((thisx)->params & 0xFF) -#define ENDAIKU_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) +#define ENDAIKU_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF) + +#define ENDAIKU_PATH_INDEX_NONE 0x3F enum { /* 0x0 */ ENDAIKU_PARAMS_FF_0, @@ -23,7 +25,7 @@ typedef struct EnDaiku { /* 0x188 */ Vec3s jointTable[17]; /* 0x1EE */ Vec3s morphTable[17]; /* 0x254 */ EnDaikuActionFunc actionFunc; - /* 0x258 */ Path* unk_258; + /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; /* 0x25E */ s16 unk_25E; /* 0x260 */ s16 unk_260; @@ -38,7 +40,7 @@ typedef struct EnDaiku { /* 0x280 */ s16 unk_280; /* 0x282 */ s16 unk_282; /* 0x284 */ f32 unk_284; - /* 0x288 */ s16 unk_288; + /* 0x288 */ s16 pathIndex; /* 0x28A */ s16 unk_28A; /* 0x28C */ s16 unk_28C; /* 0x28E */ UNK_TYPE1 unk_28E[0xE]; diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index be45cfac6..eaf1839c6 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -69,8 +69,8 @@ static ColliderCylinderInit sCylinderInit = { }; void func_80BE61D0(EnDaiku2* this) { - if ((this->unk_27A != -1) && (this->unk_258 != 0)) { - if (!SubS_CopyPointFromPath(this->unk_258, this->unk_25C, &this->unk_268)) { + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL)) { + if (!SubS_CopyPointFromPath(this->path, this->unk_25C, &this->unk_268)) { Actor_Kill(&this->actor); } } @@ -87,8 +87,8 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU2_GET_7F(&this->actor); - this->unk_27A = ENDAIKU2_GET_1F80(&this->actor); - this->unk_258 = SubS_GetPathByIndex(play, this->unk_27A, 0x3F); + this->pathIndex = ENDAIKU2_GET_PATH_INDEX(&this->actor); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU2_PATH_INDEX_NONE); this->unk_280 = ENDAIKU2_GET_8000(&this->actor); Actor_SetScale(&this->actor, 0.01f); if (!this->unk_280) { @@ -100,7 +100,7 @@ void EnDaiku2_Init(Actor* thisx, PlayState* play) { if (this->unk_278 == ENDAIKU2_GET_7F_127) { this->unk_278 = ENDAIKU2_GET_7F_MINUS1; } else if (Flags_GetSwitch(play, this->unk_278)) { - this->unk_25C = this->unk_258->count - 1; + this->unk_25C = this->path->count - 1; func_80BE61D0(this); Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_268); } @@ -342,9 +342,9 @@ void func_80BE6D40(EnDaiku2* this, PlayState* play) { Math_ApproachF(&this->actor.world.pos.z, this->unk_268.z, 0.5f, fabsf(Math_CosS(this->actor.world.rot.y) * 6.0f)); if ((sqrtf(SQ(this->actor.world.pos.x - this->unk_268.x) + SQ(this->actor.world.pos.z - this->unk_268.z)) < 4.0f) && - (this->unk_258 != 0)) { + (this->path != NULL)) { this->unk_25C++; - if (this->unk_25C >= this->unk_258->count) { + if (this->unk_25C >= this->path->count) { func_80BE6EB0(this); return; } @@ -385,7 +385,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { fabsf(Math_CosS(this->actor.world.rot.y) * 4.0f)); if ((sqrtf(SQ(this->actor.world.pos.x - this->unk_268.x) + SQ(this->actor.world.pos.z - this->unk_268.z)) < 4.0f) && - (this->unk_258 != 0)) { + (this->path != NULL)) { if (!func_80BE64C0(this, play)) { if (this->unk_276 != 3) { func_80BE6408(this, 3); @@ -412,7 +412,7 @@ void func_80BE6EF0(EnDaiku2* this, PlayState* play) { Math_Vec3f_Copy(&sp40, &this->unk_268); var = this->unk_25C; this->unk_25C++; - if (this->unk_25C < this->unk_258->count) { + if (this->unk_25C < this->path->count) { func_80BE61D0(this); func_80BE6CFC(this); return; diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h index 130a06a23..775b2453f 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -8,9 +8,11 @@ struct EnDaiku2; typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); #define ENDAIKU2_GET_7F(thisx) ((thisx)->params & 0x7F) -#define ENDAIKU2_GET_1F80(thisx) (((thisx)->params >> 7) & 0x3F) +#define ENDAIKU2_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x3F) #define ENDAIKU2_GET_8000(thisx) (((thisx)->params >> 15) & 0x1) +#define ENDAIKU2_PATH_INDEX_NONE 0x3F + enum { /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1, /* 0 */ ENDAIKU2_GET_7F_0, @@ -35,7 +37,7 @@ typedef struct EnDaiku2 { /* 0x188 */ Vec3s jointTable[17]; /* 0x1EE */ Vec3s morphTable[17]; /* 0x254 */ EnDaiku2ActionFunc actionFunc; - /* 0x258 */ Path* unk_258; + /* 0x258 */ Path* path; /* 0x25C */ s16 unk_25C; /* 0x260 */ f32 unk_260; /* 0x264 */ f32 unk_264; @@ -43,7 +45,7 @@ typedef struct EnDaiku2 { /* 0x274 */ s16 unk_274; /* 0x276 */ s16 unk_276; /* 0x278 */ s16 unk_278; - /* 0x27A */ s16 unk_27A; + /* 0x27A */ s16 pathIndex; /* 0x27C */ UNK_TYPE1 unk_27C[0x4]; /* 0x280 */ s32 unk_280; /* 0x284 */ f32 unk_284; diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index 0c84f91bc..849ae3378 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -1302,7 +1302,7 @@ void EnDg_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Actor_ProcessInitChain(&this->actor, sInitChain); - this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENDG_GET_PATH_INDEX(&this->actor), ENDG_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.0075f); this->actor.targetMode = 1; this->actor.gravity = -3.0f; diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.h b/src/overlays/actors/ovl_En_Dg/z_en_dg.h index 62c01a011..9f8203987 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.h +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.h @@ -19,9 +19,11 @@ struct EnDg; typedef void (*EnDgActionFunc)(struct EnDg*, PlayState*); #define ENDG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENDG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define ENDG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) #define ENDG_PARAMS(path, index) ((path << 10) | (index << 5)) +#define ENDG_PATH_INDEX_NONE 0x3F + typedef enum { /* 0 */ ENDG_INDEX_RACETRACK_0, /* 1 */ ENDG_INDEX_RACETRACK_1, diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 2d03fccf2..bcb7c6fa2 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -394,7 +394,7 @@ void EnEgol_DestroyBlocks(EnEgol* this, PlayState* play, Vec3f pos1, Vec3f pos2) } void EnEgol_GetWaypoint(EnEgol* this) { - if ((this->pathIndex != -1) && (this->path != NULL) && + if ((this->pathIndex != PATH_INDEX_NONE) && (this->path != NULL) && !SubS_CopyPointFromPath(this->path, this->waypoint, &this->waypointPos)) { Actor_Kill(&this->actor); } @@ -426,9 +426,9 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetJntSph(play, &this->eyeCollider, &this->actor, &sEyeJntSphInit, this->eyeElements); Collider_InitAndSetQuad(play, &this->laserCollider, &this->actor, &sLaserQuadInit); - this->pathIndex = EYEGORE_GET_PATH(&this->actor); - if (this->pathIndex == 0x3F) { - this->pathIndex = -1; + this->pathIndex = EYEGORE_GET_PATH_INDEX(&this->actor); + if (this->pathIndex == EYEGORE_PATH_INDEX_NONE) { + this->pathIndex = PATH_INDEX_NONE; Actor_Kill(&this->actor); return; } @@ -445,7 +445,7 @@ void EnEgol_Init(Actor* thisx, PlayState* play) { this->minLaserRange = 200.0f; } - this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, EYEGORE_PATH_INDEX_NONE); EYEGORE_SET_SPH_DIM(this->eyeCollider.elements[0], 500, 0, 0, 26, 1.0f); diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.h b/src/overlays/actors/ovl_En_Egol/z_en_egol.h index cec69e5a1..e85e4b98a 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.h +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.h @@ -8,10 +8,12 @@ struct EnEgol; typedef void (*EnEgolActionFunc)(struct EnEgol*, PlayState*); -#define EYEGORE_GET_PATH(thisx) ((thisx)->params & 0x3F) +#define EYEGORE_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) #define EYEGORE_GET_SWITCH(thisx) (((thisx)->params >> 6) & 0x7F) -#define EYEGORE_PARAMS(switch, path) ((((switch) & 0x7F) << 6) | ((path) & 0x3F)) +#define EYEGORE_PATH_INDEX_NONE 0x3F + +#define EYEGORE_PARAMS(switch, pathIndex) ((((switch) & 0x7F) << 6) | ((pathIndex) & 0x3F)) #define EYEGORE_EFFECT_COUNT 100 diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index 645a757a0..97d1ec357 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -166,13 +166,13 @@ void EnFamos_Init(Actor* thisx, PlayState* play) { s32 i; Actor_ProcessInitChain(&this->actor, sInitChain); - if (FAMOS_GET_PATH(thisx) != 0xFF) { - path = &play->setupPathList[this->actor.params]; + if (FAMOS_GET_PATH_INDEX(&this->actor) != FAMOS_PATH_INDEX_NONE) { + path = &play->setupPathList[FAMOS_GET_PATH_INDEX(&this->actor)]; this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathNodeCount = path->count; - if (this->pathNodeCount == 1) { + this->pathCount = path->count; + if (this->pathCount == 1) { this->pathPoints = NULL; - this->pathNodeCount = 0; + this->pathCount = 0; } } @@ -365,15 +365,15 @@ void EnFamos_StillIdle(EnFamos* this, PlayState* play) { */ void EnFamos_SetupPathingIdle(EnFamos* this) { if (this->isCalm) { - this->currentPathNode++; - if (this->currentPathNode == this->pathNodeCount) { - this->currentPathNode = 0; + this->waypointIndex++; + if (this->waypointIndex == this->pathCount) { + this->waypointIndex = 0; } } else { this->isCalm = true; } - Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->currentPathNode]); + Math_Vec3s_ToVec3f(&this->targetDest, &this->pathPoints[this->waypointIndex]); this->targetYaw = Actor_WorldYawTowardPoint(&this->actor, &this->targetDest); this->actionFunc = EnFamos_PathingIdle; this->actor.speed = 0.0f; diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.h b/src/overlays/actors/ovl_En_Famos/z_en_famos.h index 874da9034..468356376 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.h +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.h @@ -15,9 +15,11 @@ typedef struct EnFamosRock { /* 0x20 */ f32 scale; } EnFamosRock; // size = 0x24 -#define FAMOS_GET_PATH(thisx) ((thisx)->params) +#define FAMOS_GET_PATH_INDEX(thisx) ((thisx)->params) #define FAMOS_GET_AGGRO_DISTANCE(thisx) ((thisx)->shape.rot.x) +#define FAMOS_PATH_INDEX_NONE 0xFF + // stateTimer gets reused: // after spotting player, counts frames until first attack (8) // after lost aggro, measures frames looking around before returning to home (60) @@ -33,8 +35,8 @@ typedef struct EnFamos { /* 0x1D0 */ EnFamosActionFunc actionFunc; /* 0x1D4 */ u8 animatedMaterialIndex; /* 0x1D5 */ u8 hasFinishedRotating; // stable up or down - /* 0x1D6 */ u8 pathNodeCount; - /* 0x1D7 */ u8 currentPathNode; + /* 0x1D6 */ u8 pathCount; + /* 0x1D7 */ u8 waypointIndex; /* 0x1D8 */ u8 isCalm; // is NOT aware of player /* 0x1DA */ s16 hoverTimer; // start 30, decr to 0, repeat: for trig height adjustment when hovering /* 0x1DC */ s16 stateTimer; // reused for different actionFunc diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 6fe9bf291..bfc157fcb 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -171,7 +171,7 @@ void func_809619D0(EnFu* this, PlayState* play) { } for (i = 0; i < this->unk_542; i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } this->unk_520 = path->count; diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 6de6c7e75..0a8aea2fd 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -191,8 +191,8 @@ void EnGe1_SetupPath(EnGe1* this, PlayState* play) { this->curPointIndex = 0; - if (GERUDO_WHITE_GET_PATH(&this->picto.actor) != 0x3F) { - this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH(&this->picto.actor)]; + if (GERUDO_WHITE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_WHITE_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_WHITE_GET_PATH_INDEX(&this->picto.actor)]; if (this->path != NULL) { point = Lib_SegmentedToVirtual(this->path->points); Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, point); diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h index 63a2a3c7f..f1684315b 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.h @@ -6,7 +6,9 @@ #include "objects/object_ge1/object_ge1.h" #define GERUDO_WHITE_GET_TYPE(thisx) (((thisx)->params) & 0xF) -#define GERUDO_WHITE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10) +#define GERUDO_WHITE_GET_PATH_INDEX(thisx) ((((thisx)->params) & 0xFC00) >> 10) + +#define GERUDO_WHITE_PATH_INDEX_NONE 0x3F //! Only the first type is used typedef enum { diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index 15c151789..facc4def2 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -200,8 +200,8 @@ s32 EnGe2_LookForPlayer(PlayState* play, Actor* actor, Vec3f* pos, s16 yaw, s16 * @return true if path is set up in reverse */ s32 EnGe2_SetupPath(EnGe2* this, PlayState* play) { - if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) { - this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)]; + if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)]; if (this->path != NULL) { Path* path = this->path; Vec3s* points = Lib_SegmentedToVirtual(path->points); @@ -228,14 +228,14 @@ void EnGe2_GetNextPath(EnGe2* this, PlayState* play) { Path* curPath; Path* nextPath; Vec3s* points; - u8 unk1; + u8 nextPathIndex; this->curPointIndex = 0; - if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) { - curPath = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)]; - unk1 = curPath->unk1; - nextPath = &play->setupPathList[unk1]; + if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) { + curPath = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)]; + nextPathIndex = curPath->additionalPathIndex; + nextPath = &play->setupPathList[nextPathIndex]; this->path = nextPath; points = Lib_SegmentedToVirtual(nextPath->points); this->picto.actor.world.pos.x = points[0].x; @@ -252,8 +252,8 @@ void EnGe2_SetupBlownAwayPath(EnGe2* this, PlayState* play) { this->curPointIndex = 0; - if (GERUDO_PURPLE_GET_PATH(&this->picto.actor) != GERUDO_PURPLE_PATH_NONE) { - this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH(&this->picto.actor)]; + if (GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor) != GERUDO_PRUPLE_PATH_INDEX_NONE) { + this->path = &play->setupPathList[GERUDO_PURPLE_GET_PATH_INDEX(&this->picto.actor)]; if (this->path != NULL) { points = Lib_SegmentedToVirtual(this->path->points); Math_Vec3s_ToVec3f(&this->picto.actor.world.pos, points); diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h index 0a85e3bfe..ee0d99d00 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.h @@ -11,12 +11,12 @@ typedef void (*EnGe2ActionFunc)(struct EnGe2*, PlayState*); #define GERUDO_PURPLE_GET_EXIT(thisx) (((thisx)->params) & 0x1F) //!< Exit to send Player to when caught #define GERUDO_PURPLE_GET_TYPE(thisx) (((thisx)->params & 0xE0) >> 5) -#define GERUDO_PURPLE_GET_PATH(thisx) ((((thisx)->params) & 0xFC00) >> 10) +#define GERUDO_PURPLE_GET_PATH_INDEX(thisx) ((((thisx)->params) & 0xFC00) >> 10) -#define GERUDO_PURPLE_PARAMS(path, type, exit) (((path) & 0x1F) | (((type) & 7) << 5) | (((exit) & 0x3F) << 10)) +#define GERUDO_PURPLE_PARAMS(exit, type, pathIndex) (((exit) & 0x1F) | (((type) & 7) << 5) | (((pathIndex) & 0x3F) << 10)) #define GERUDO_PURPLE_EXIT_NONE 0x1F -#define GERUDO_PURPLE_PATH_NONE 0x3F +#define GERUDO_PRUPLE_PATH_INDEX_NONE 0x3F typedef enum { /* 0 */ GERUDO_PURPLE_TYPE_CUTSCENE, diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index 76e3d69da..e05945680 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -183,14 +183,14 @@ void func_80B3B0A0(EnGg2* this, PlayState* play) { void func_80B3B120(EnGg2* this, PlayState* play) { Vec3s sp30; - if (this->unk_1D8 != NULL) { - func_80B3B7E4(this->unk_1D8, this->unk_1DC, &this->actor.world.pos, &sp30); + if (this->path != NULL) { + func_80B3B7E4(this->path, this->unk_1DC, &this->actor.world.pos, &sp30); Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 0x3E8, 1); this->actor.shape.rot.y = this->actor.world.rot.y; Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 0x3E8, 1); this->actor.world.rot.x = -this->actor.shape.rot.x; - if (func_80B3B648(this, this->unk_1D8, this->unk_1DC) != 0) { - if (this->unk_1DC >= (this->unk_1D8->count - 2)) { + if (func_80B3B648(this, this->path, this->unk_1DC) != 0) { + if (this->unk_1DC >= (this->path->count - 2)) { this->actionFunc = func_80B3AE60; this->actor.speed = 0.0f; } else { @@ -227,15 +227,15 @@ void func_80B3B294(EnGg2* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_20_10); } - if (this->unk_1D8 != NULL) { - func_80B3B7E4(this->unk_1D8, this->unk_1DC, &this->actor.world.pos, &sp30); + if (this->path != NULL) { + func_80B3B7E4(this->path, this->unk_1DC, &this->actor.world.pos, &sp30); Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 0x3E8, 1); this->actor.shape.rot.y = this->actor.world.rot.y; Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 0x3E8, 1); this->actor.world.rot.x = -this->actor.shape.rot.x; - if (func_80B3B648(this, this->unk_1D8, this->unk_1DC)) { - if (this->unk_1DC < (this->unk_1D8->count - 1)) { + if (func_80B3B648(this, this->path, this->unk_1DC)) { + if (this->unk_1DC < (this->path->count - 1)) { this->unk_1DC++; } else { this->unk_2F1 = 1; @@ -369,7 +369,7 @@ void EnGg2_Init(Actor* thisx, PlayState* play2) { this->actor.bgCheckFlags |= BGCHECKFLAG_PLAYER_400; SkelAnime_InitFlex(play, &this->skelAnime, &object_gg_Skel_00F6C0, &object_gg_Anim_00F578, this->jointTable, this->morphTable, 20); - this->unk_1D8 = SubS_GetPathByIndex(play, ENGG2_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENGG2_GET_PATH_INDEX(&this->actor), ENGG2_PATH_INDEX_NONE); this->actor.flags &= ~ACTOR_FLAG_REACT_TO_LENS; this->unk_2F0 = 0; this->unk_2F1 = 0; diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h index ff7aec4a6..83b4bad42 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.h @@ -7,14 +7,16 @@ struct EnGg2; typedef void (*EnGg2ActionFunc)(struct EnGg2*, PlayState*); -#define ENGG2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENGG2_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENGG2_PATH_INDEX_NONE 0x3F typedef struct EnGg2 { /* 0x000 */ Actor actor; /* 0x144 */ UNK_TYPE1 unk144[0x4C]; /* 0x190 */ SkelAnime skelAnime; /* 0x1D4 */ EnGg2ActionFunc actionFunc; - /* 0x1D8 */ Path* unk_1D8; + /* 0x1D8 */ Path* path; /* 0x1DC */ s32 unk_1DC; /* 0x1E0 */ Vec3s unk_1E0; /* 0x1E6 */ Vec3s unk_1E6; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index edb079373..8692f937c 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -1025,7 +1025,7 @@ void EnGk_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } else { this->csId = this->actor.csId; - this->path = SubS_GetPathByIndex(play, ENGK_GET_F0(&this->actor), 0xF); + this->path = SubS_GetPathByIndex(play, ENGK_GET_PATH_INDEX(&this->actor), ENGK_PATH_INDEX_NONE); this->actionFunc = func_80B51760; } } else if (play->sceneId == SCENE_GORONRACE) { diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h index 0f74c1d65..fd724cc7c 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -8,9 +8,11 @@ struct EnGk; typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*); #define ENGK_GET_F(thisx) ((thisx)->params & 0xF) -#define ENGK_GET_F0(thisx) (((thisx)->params & 0xF0) >> 4) +#define ENGK_GET_PATH_INDEX(thisx) (((thisx)->params & 0xF0) >> 4) #define ENGK_GET_3F00(thisx) (((thisx)->params & 0x3F00) >> 8) +#define ENGK_PATH_INDEX_NONE 0xF + enum { /* 0 */ ENGK_F_0, /* 1 */ ENGK_F_1, diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 4c4aa474b..bcdb20431 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -973,7 +973,7 @@ s32 func_8094F53C(EnGm* this, PlayState* play) { } s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 arg3, s16 arg4) { - u8 sp4F = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -985,7 +985,7 @@ s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u actor = func_8094DEE0(this, play, arg3, arg4); if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if ((actor != NULL) && (actor->update != NULL)) { @@ -1004,7 +1004,7 @@ s32 func_8094F7D0(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput, u s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; - u8 sp55 = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); EnDoor* door; Vec3s* sp4C; Vec3f sp40; @@ -1016,7 +1016,7 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { door = func_8094DF90(play, scheduleOutput->result); if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp55, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { @@ -1051,14 +1051,14 @@ s32 func_8094F904(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_8094FAC4(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp2E = SCHEDULE_TIME_NOW; u16 phi_v1; - u8 sp2B = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); u16 tmp; s16 pad; s32 ret = false; this->timePath = NULL; if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if ((this->timePath != NULL) && (this->timePath->count < 3)) { @@ -1152,7 +1152,7 @@ s32 func_8094FE10(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { static Vec3f D_80951D9C = { 64.0f, 0.0f, -122.0f }; - u8 sp4F = ENGM_GET_FF(&this->actor); + u8 pathIndex = ENGM_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -1162,7 +1162,7 @@ s32 func_8094FF04(EnGm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80951A0C[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80951A0C[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80951A0C[scheduleOutput->result]); } if (this->timePath != NULL) { diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.h b/src/overlays/actors/ovl_En_Gm/z_en_gm.h index 6eede0744..760c9d91c 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.h +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.h @@ -9,7 +9,7 @@ typedef void (*EnGmActionFunc)(struct EnGm*, PlayState*); typedef s32 (*EnGmUnkFunc)(struct EnGm*, PlayState*); typedef void (*EnGmUnkFunc2)(struct EnGm*, PlayState*); -#define ENGM_GET_FF(thisx) ((thisx)->params & 0xFF) +#define ENGM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) typedef struct EnGm { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index f70628930..216d5c301 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -1883,7 +1883,8 @@ void EnGo_SetupSpectator(EnGo* this, PlayState* play) { */ void EnGo_SetupGatekeeper(EnGo* this, PlayState* play) { if (gSaveContext.save.day >= 2) { - this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH(&this->actor), 0xFF, &this->indexPathPoint); + this->gatekeeperPath = SubS_GetDayDependentPath(play, ENGO_GET_PATH_INDEX(&this->actor), ENGO_PATH_INDEX_NONE, + &this->indexPathPoint); if (this->gatekeeperPath != NULL) { this->indexPathPoint = 1; } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index a1c96214b..23c02a9c4 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -11,8 +11,9 @@ typedef s32 (*MsgEventFunc)(Actor*, PlayState*); #define ENGO_GET_TYPE(thisx) (((thisx)->params & 0xF) & 0xFF) #define ENGO_GET_SUBTYPE(thisx) ((((thisx)->params & 0x70) >> 4) & 0xFF) +#define ENGO_GET_PATH_INDEX(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) -#define ENGO_GET_PATH(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) +#define ENGO_PATH_INDEX_NONE 0xFF #define ENGO_SNOW_EFFECT_COUNT 16 #define ENGO_OTHER_EFFECT_COUNT 16 diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index 43a5895d5..e0f9301ce 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -87,7 +87,7 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->unk_21E = ENHIDDENNUTS_GET_F80(&this->actor); + this->pathIndex = ENHIDDENNUTS_GET_PATH_INDEX(&this->actor); this->switchFlag = ENHIDDENNUTS_GET_SWITCHFLAG(&this->actor); if (this->switchFlag == 0x7F) { @@ -99,12 +99,12 @@ void EnHiddenNuts_Init(Actor* thisx, PlayState* play) { return; } - if (this->unk_21E == 0x1F) { + if (this->pathIndex == ENHIDDENNUTS_PATH_INDEX_NONE) { Actor_Kill(&this->actor); return; } - this->path = SubS_GetPathByIndex(play, this->unk_21E, 0x3F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENHIDDENNUTS_PATH_INDEX_NONE_ALT); this->csId = this->actor.csId; func_801A5080(2); func_80BDB268(this); diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h index 435e4662c..03a0a52b7 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.h @@ -8,7 +8,10 @@ struct EnHiddenNuts; typedef void (*EnHiddenNutsActionFunc)(struct EnHiddenNuts*, PlayState*); #define ENHIDDENNUTS_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F) -#define ENHIDDENNUTS_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F) +#define ENHIDDENNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) + +#define ENHIDDENNUTS_PATH_INDEX_NONE 0x1F +#define ENHIDDENNUTS_PATH_INDEX_NONE_ALT 0x3F typedef struct EnHiddenNuts { /* 0x000 */ Actor actor; @@ -23,7 +26,7 @@ typedef struct EnHiddenNuts { /* 0x218 */ s16 unk_218; /* 0x21A */ s16 unk_21A; /* 0x21C */ s16 switchFlag; - /* 0x21E */ s16 unk_21E; + /* 0x21E */ s16 pathIndex; /* 0x220 */ s32 unk_220; /* 0x224 */ s16 unk_224; /* 0x226 */ s16 csId; diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index 86d6309b6..d4ccc8fd6 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -497,7 +497,7 @@ s32 func_80BF1B40(EnIg* this, PlayState* play) { } s32 func_80BF1C44(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput, s32 arg3, s32 arg4) { - u8 sp4F = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -509,7 +509,7 @@ s32 func_80BF1C44(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput, s this->timePath = NULL; if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((sp2C != NULL) && (sp2C->update != NULL)) { @@ -541,7 +541,7 @@ s32 func_80BF1D78(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; - u8 sp55 = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); EnDoor* door; Vec3s* sp4C; Vec3f sp40; @@ -553,7 +553,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { door = func_80BF1200(play, scheduleOutput->result); if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp55, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { @@ -587,7 +587,7 @@ s32 func_80BF1DF4(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp2E = SCHEDULE_TIME_NOW; u16 phi_v1; - u8 sp2B = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); u16 tmp; s16 pad; s32 ret = false; @@ -595,7 +595,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((this->timePath != NULL) && (this->timePath->count < 3)) { @@ -635,7 +635,7 @@ s32 func_80BF1FA8(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u8 sp4F = ENIG_GET_FF(&this->actor); + u8 pathIndex = ENIG_GET_PATH_INDEX(&this->actor); Vec3f sp40; Vec3f sp34; Vec3s* sp30; @@ -645,7 +645,7 @@ s32 func_80BF219C(EnIg* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80BF3318[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80BF3318[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BF3318[scheduleOutput->result]); } if ((this->timePath != 0) && (this->timePath->count >= 2)) { diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.h b/src/overlays/actors/ovl_En_Ig/z_en_ig.h index c3fd0c3fb..274338a11 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.h +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.h @@ -9,7 +9,7 @@ typedef void (*EnIgActionFunc)(struct EnIg*, PlayState*); typedef s32 (*EnIgUnkFunc)(struct EnIg*, PlayState*); typedef void (*EnIgUnkFunc2)(struct EnIg*, PlayState*); -#define ENIG_GET_FF(thisx) ((thisx)->params & 0xFF) +#define ENIG_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) typedef struct EnIg { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 5031d7e87..514074a8f 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -274,10 +274,10 @@ void EnIn_DoNothing(EnIn* this, PlayState* play) { } void func_808F3618(EnIn* this, PlayState* play) { - if (ENIN_GET_PATH(&this->actor) != 0x3F) { + if (ENIN_GET_PATH_INDEX(&this->actor) != ENIN_PATH_INDEX_NONE) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_9); } - if (ENIN_GET_PATH(&this->actor) != 0x3F) { + if (ENIN_GET_PATH_INDEX(&this->actor) != ENIN_PATH_INDEX_NONE) { this->actionFunc = func_808F3690; } else { this->actionFunc = EnIn_DoNothing; @@ -1517,7 +1517,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { Collider_SetJntSph(play, &this->colliderJntSph, &this->actor, &sJntSphInit, &this->colliderJntSphElement); Actor_SetScale(&this->actor, 0.01f); this->actor.gravity = -4.0f; - this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENIN_GET_PATH_INDEX(&this->actor), ENIN_PATH_INDEX_NONE); this->unk23D = 0; if ((type == ENIN_YELLOW_SHIRT) || (type == ENIN_BLUE_SHIRT)) { if ((GET_WEEKEVENTREG_HORSE_RACE_STATE == WEEKEVENTREG_HORSE_RACE_STATE_2) || diff --git a/src/overlays/actors/ovl_En_In/z_en_in.h b/src/overlays/actors/ovl_En_In/z_en_in.h index dd32ac9c6..c5d7500b6 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -37,7 +37,9 @@ typedef enum { } EnInAnimation; #define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) -#define ENIN_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE +#define ENIN_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) // Only used with ENIN_UNK_TYPE + +#define ENIN_PATH_INDEX_NONE 0x3F typedef struct EnIn { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 451b9e553..7479a6208 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -957,7 +957,7 @@ void EnJg_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnJg_LullabyIntroCutsceneAction; } else { // This is the elder that appears in Mountain Village or the Path to Goron Village in winter. - this->path = SubS_GetPathByIndex(play, EN_JG_GET_PATH(thisx), 0x3F); + this->path = SubS_GetPathByIndex(play, EN_JG_GET_PATH_INDEX(thisx), EN_JG_PATH_INDEX_NONE); this->animIndex = EN_JG_ANIM_SURPRISE_START; this->action = EN_JG_ACTION_SPAWNING; this->freezeTimer = 1000; diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.h b/src/overlays/actors/ovl_En_Jg/z_en_jg.h index ad8eee0a8..b63f34dce 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.h +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.h @@ -5,7 +5,9 @@ #include "objects/object_jg/object_jg.h" #define EN_JG_IS_IN_GORON_SHRINE(thisx) ((thisx)->params & 0x1) -#define EN_JG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define EN_JG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) + +#define EN_JG_PATH_INDEX_NONE 0x3F struct EnJg; diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 25fe13064..b023bf688 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -119,7 +119,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) { this->unk_1D8[i].points = Lib_SegmentedToVirtual(path->points); this->unk_1D8[i].count = path->count; - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; if (path == NULL) { Actor_Kill(&this->actor); } @@ -128,7 +128,7 @@ void func_80C13A2C(EnJgameTsn* this, PlayState* play) { this->unk_1F8.points = Lib_SegmentedToVirtual(path->points); this->unk_1F8.count = path->count; - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; if (path == NULL) { Actor_Kill(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index abf5e9eb4..350f4ae82 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -194,7 +194,7 @@ s32 func_80968B8C(EnJs* this, PlayState* play) { f32 sp18 = 0.0f; Vec3s* points; - if (pathIndex != 0x3F) { + if (pathIndex != ENJS_PATH_INDEX_NONE) { this->path = &play->setupPathList[pathIndex]; if (this->path != NULL) { path = this->path; diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.h b/src/overlays/actors/ovl_En_Js/z_en_js.h index c4dd3e3a2..f673a97d6 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.h +++ b/src/overlays/actors/ovl_En_Js/z_en_js.h @@ -8,6 +8,8 @@ #define ENJS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) #define ENJS_GET_EXIT_INDEX(thisx) (((thisx)->params & 0x3F0) >> 4) +#define ENJS_PATH_INDEX_NONE 0x3F + struct EnJs; typedef void (*EnJsActionFunc)(struct EnJs*, PlayState*); diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c index cc333b2ae..908bbf374 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.c @@ -112,7 +112,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 1; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.flags |= ACTOR_FLAG_CANT_LOCK_ON; - this->pathLocation = LOOKNUTS_GET_PATROL_LOCATION(&this->actor); + this->pathIndex = LOOKNUTS_GET_PATH_INDEX(&this->actor); this->switchFlag = LOOKNUTS_GET_SCENE_FLAG(&this->actor); this->spawnIndex = LOOKNUTS_GET_SPAWN_INDEX(&this->actor); @@ -123,7 +123,7 @@ void EnLookNuts_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); return; } - if (this->pathLocation == 0x1F) { + if (this->pathIndex == LOOKNUTS_PATH_INDEX_NONE) { Actor_Kill(&this->actor); return; } @@ -165,17 +165,17 @@ void EnLookNuts_Patrol(EnLookNuts* this, PlayState* play) { return; } - this->path = SubS_GetPathByIndex(play, this->pathLocation, 0x1F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, LOOKNUTS_PATH_INDEX_NONE); if (this->path != NULL) { - sp34 = SubS_GetDistSqAndOrientPath(this->path, this->currentPathIndex, &this->actor.world.pos, &sp30); + sp34 = SubS_GetDistSqAndOrientPath(this->path, this->waypointIndex, &this->actor.world.pos, &sp30); } //! @bug sp30 is uninitialised if path == NULL. Fix by enclosing everything in the path NULL check. if (sp30 < 10.0f) { if (this->path != NULL) { - this->currentPathIndex++; - if (this->currentPathIndex >= this->path->count) { - this->currentPathIndex = 0; + this->waypointIndex++; + if (this->waypointIndex >= this->path->count) { + this->waypointIndex = 0; } if (Rand_ZeroOne() < 0.6f) { EnLookNuts_SetupStandAndWait(this); diff --git a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h index b72215ce6..92c24cfbd 100644 --- a/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h +++ b/src/overlays/actors/ovl_En_Look_Nuts/z_en_look_nuts.h @@ -10,7 +10,9 @@ typedef void (*EnLookNutsActionFunc)(struct EnLookNuts*, PlayState*); #define LOOKNUTS_GET_SPAWN_INDEX(thisx) (((thisx)->params >> 0xC) & 0xF) #define LOOKNUTS_GET_SCENE_FLAG(thisx) ((thisx)->params & 0x7F) -#define LOOKNUTS_GET_PATROL_LOCATION(thisx) (((thisx)->params >> 0x7) & 0x1F) +#define LOOKNUTS_GET_PATH_INDEX(thisx) (((thisx)->params >> 0x7) & 0x1F) + +#define LOOKNUTS_PATH_INDEX_NONE 0x1F typedef struct EnLookNuts { /* 0x000 */ Actor actor; @@ -19,13 +21,13 @@ typedef struct EnLookNuts { /* 0x1CA */ Vec3s morphTable[DEKU_PALACE_GUARD_LIMB_MAX]; /* 0x20C */ EnLookNutsActionFunc actionFunc; /* 0x210 */ Path *path; - /* 0x214 */ s16 currentPathIndex; // Index for the point where the deku guard is in its path + /* 0x214 */ s16 waypointIndex; // Index for the point where the deku guard is in its path /* 0x216 */ s16 eyeState; /* 0x218 */ s16 blinkTimer; /* 0x21A */ s16 eventTimer; // Timer to trigger when another event within the actor will happen /* 0x21C */ s16 state; /* 0x21E */ s16 switchFlag; - /* 0x220 */ s16 pathLocation; // Determines path that a guard will patrol + /* 0x220 */ s16 pathIndex; // Determines path that a guard will patrol /* 0x222 */ s16 isPlayerDetected; /* 0x224 */ s16 waitTimer; // Timer for how long the deku guard will take a break for /* 0x226 */ s16 spawnIndex; diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 44bb67443..d295b1c7f 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -163,9 +163,9 @@ void EnMa4_InitPath(EnMa4* this, PlayState* play) { Path* path; Vec3f nextPoint; - path = &play->setupPathList[(this->actor.params & 0xFF00) >> 8]; + path = &play->setupPathList[ENMA_GET_PATH_INDEX(&this->actor)]; this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathIndex = 0; + this->waypointIndex = 0; this->pathPointsCount = path->count; this->actor.home.pos.x = this->pathPoints[0].x; @@ -272,9 +272,9 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_ROMANI_BOW_FLICK); } - sp34.x = this->pathPoints[this->pathIndex].x; - sp34.y = this->pathPoints[this->pathIndex].y; - sp34.z = this->pathPoints[this->pathIndex].z; + sp34.x = this->pathPoints[this->waypointIndex].x; + sp34.y = this->pathPoints[this->waypointIndex].y; + sp34.z = this->pathPoints[this->waypointIndex].z; sp2E = Math_Vec3f_Yaw(&this->actor.world.pos, &sp34); if (Math_Vec3f_DistXZ(&this->actor.world.pos, &sp34) > 50.0f) { Math_SmoothStepToS(&this->actor.world.rot.y, sp2E, 10, 0x3000, 0x100); @@ -291,10 +291,10 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - if (this->pathIndex < (this->pathPointsCount - 1)) { - this->pathIndex++; + if (this->waypointIndex < (this->pathPointsCount - 1)) { + this->waypointIndex++; } else { - this->pathIndex = 0; + this->waypointIndex = 0; } } diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h index 91876c938..dfedd3330 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.h @@ -8,6 +8,8 @@ struct EnMa4; typedef void (*EnMa4ActionFunc)(struct EnMa4*, PlayState*); +#define ENMA_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) + typedef struct EnMa4 { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; @@ -19,7 +21,7 @@ typedef struct EnMa4 { /* 0x28E */ UNK_TYPE1 unk28E[0x6]; /* 0x294 */ Vec3s morphTable[ROMANI_LIMB_MAX]; /* 0x31E */ UNK_TYPE1 unk31E[0x6]; - /* 0x324 */ s16 pathIndex; + /* 0x324 */ s16 waypointIndex; /* 0x326 */ s16 pathPointsCount; /* 0x328 */ UNK_TYPE1 unk_328[0x2]; /* 0x32A */ s16 blinkTimer; diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c index e64e09cbc..e47515c5d 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -167,9 +167,9 @@ void EnPamera_Init(Actor* thisx, PlayState* play) { } func_80BD8700(this); } else { - this->pathIndex = this->pathPointsCount - 1; - Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathIndex]); - Math_Vec3s_ToVec3f(&sp44, &this->pathPoints[this->pathIndex - 1]); + this->waypointIndex = this->pathCount - 1; + Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->waypointIndex]); + Math_Vec3s_ToVec3f(&sp44, &this->pathPoints[this->waypointIndex - 1]); this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&sp44, &this->actor.world.pos); func_80BD8CCC(this); } @@ -195,19 +195,19 @@ s32 func_80BD84F0(EnPamera* this, PlayState* play) { } void func_80BD8588(EnPamera* this, PlayState* play) { - Path* path = &play->setupPathList[((this->actor.params & 0xFF0) >> 4)]; + Path* path = &play->setupPathList[ENPAMERA_GET_PATH_INDEX(&this->actor)]; Vec3f sp28; if (path == NULL) { Actor_Kill(&this->actor); } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_61_04)) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathIndex = 0; - this->pathPointsCount = path->count; - this->pathId = path->unk1; + this->waypointIndex = 0; + this->pathCount = path->count; + this->additionalPathIndex = path->additionalPathIndex; Math_Vec3s_ToVec3f(&sp28, this->pathPoints); this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &sp28); } @@ -323,15 +323,15 @@ void func_80BD8B70(EnPamera* this, PlayState* play) { Vec3f vec; s16 sp32; - vec.x = this->pathPoints[this->pathIndex].x; - vec.y = this->pathPoints[this->pathIndex].y; - vec.z = this->pathPoints[this->pathIndex].z; + vec.x = this->pathPoints[this->waypointIndex].x; + vec.y = this->pathPoints[this->waypointIndex].y; + vec.z = this->pathPoints[this->waypointIndex].z; sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec); if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speed) > 10.0f) { Math_SmoothStepToS(&this->actor.shape.rot.y, sp32, 0xA, 0x3000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - } else if (this->pathIndex < (this->pathPointsCount - 1)) { - this->pathIndex++; + } else if (this->waypointIndex < (this->pathCount - 1)) { + this->waypointIndex++; } else { func_80BD8CCC(this); } @@ -356,8 +356,8 @@ void func_80BD8D1C(EnPamera* this, PlayState* play) { } void func_80BD8D80(EnPamera* this) { - if (this->pathIndex > 0) { - this->pathIndex--; + if (this->waypointIndex > 0) { + this->waypointIndex--; } this->actor.gravity = -2.0f; this->actionFunc = func_80BD8DB0; @@ -367,15 +367,15 @@ void func_80BD8DB0(EnPamera* this, PlayState* play) { Vec3f vec; s16 sp32; - vec.x = this->pathPoints[this->pathIndex].x; - vec.y = this->pathPoints[this->pathIndex].y; - vec.z = this->pathPoints[this->pathIndex].z; + vec.x = this->pathPoints[this->waypointIndex].x; + vec.y = this->pathPoints[this->waypointIndex].y; + vec.z = this->pathPoints[this->waypointIndex].z; sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &vec); if (Math_Vec3f_StepToXZ(&this->actor.world.pos, &vec, this->actor.speed) > 10.0f) { Math_SmoothStepToS(&this->actor.shape.rot.y, sp32, 0xA, 0x3000, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; - } else if (this->pathIndex > 0) { - this->pathIndex--; + } else if (this->waypointIndex > 0) { + this->waypointIndex--; } else { func_80BD9338(this, play); func_80BD8A38(this); @@ -404,9 +404,9 @@ void func_80BD8FF0(EnPamera* this) { Vec3f pameraPos; s16 pameraYaw; - this->pathIndex = this->pathPointsCount - 1; - Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathPointsCount - 1]); - Math_Vec3s_ToVec3f(&pameraPos, &this->pathPoints[this->pathPointsCount - 2]); + this->waypointIndex = this->pathCount - 1; + Math_Vec3s_ToVec3f(&this->actor.world.pos, &this->pathPoints[this->pathCount - 1]); + Math_Vec3s_ToVec3f(&pameraPos, &this->pathPoints[this->pathCount - 2]); pameraYaw = Math_Vec3f_Yaw(&pameraPos, &this->actor.world.pos); this->actor.shape.rot.y = pameraYaw; this->actor.world.rot.y = pameraYaw; @@ -422,7 +422,7 @@ void func_80BD90AC(EnPamera* this, PlayState* play) { if (Player_GetMask(play) != PLAYER_MASK_STONE && (this->actionFunc != func_80BD8758) && (this->actionFunc != func_80BD8964) && (this->actionFunc != func_80BD8A7C) && - (this->actionFunc != func_80BD8F60) && ((this->actionFunc != func_80BD8B70) || (this->pathIndex != 0)) && + (this->actionFunc != func_80BD8F60) && ((this->actionFunc != func_80BD8B70) || (this->waypointIndex != 0)) && ((this->actionFunc != func_80BD8DB0) || (this->actor.speed != 3.0f)) && ((this->actor.xzDistToPlayer < 150.0f) || ((this->actionFunc == func_80BD909C) && @@ -456,14 +456,14 @@ s32 func_80BD9234(EnPamera* this, PlayState* play) { void func_80BD92D0(EnPamera* this, PlayState* play) { Path* path; - s32 pathId = this->pathId; + s32 pathIndex = this->additionalPathIndex; - path = &play->setupPathList[pathId]; - if (pathId >= 0) { + path = &play->setupPathList[pathIndex]; + if (pathIndex >= 0) { this->pathPoints = Lib_SegmentedToVirtual(path->points); - this->pathIndex = 0; - this->pathPointsCount = path->count; - this->pathId = path->unk1; + this->waypointIndex = 0; + this->pathCount = path->count; + this->additionalPathIndex = path->additionalPathIndex; } } diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h index 59bf40e09..4fa3e4f5f 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.h @@ -9,6 +9,8 @@ struct EnPamera; typedef void (*EnPameraActionFunc)(struct EnPamera*, PlayState*); typedef void (*EnPameraSetupFunc)(struct EnPamera*, PlayState*); +#define ENPAMERA_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF0) >> 4) + typedef struct EnPamera { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; @@ -16,9 +18,9 @@ typedef struct EnPamera { /* 0x1D4 */ EnPameraActionFunc actionFunc; /* 0x1D8 */ EnPameraSetupFunc setupFunc; /* 0x1DC */ Vec3s* pathPoints; - /* 0x1E0 */ s32 pathIndex; - /* 0x1E4 */ s32 pathPointsCount; - /* 0x1E8 */ s32 pathId; + /* 0x1E0 */ s32 waypointIndex; + /* 0x1E4 */ s32 pathCount; + /* 0x1E8 */ s32 additionalPathIndex; /* 0x1EC */ s32 unk_1EC; /* 0x1F0 */ Vec3s jointTable[PAMELA_LIMB_MAX]; /* 0x27A */ Vec3s morphTable[PAMELA_LIMB_MAX]; diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index 99e301250..0627ddbf8 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1197,7 +1197,7 @@ s32 func_80AF8DD4(EnPm* this, PlayState* play) { } s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u8 actorCat, s16 actorId) { - u8 sp4F = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); Vec3s* sp48; Vec3f sp3C; Vec3f sp30; @@ -1208,7 +1208,7 @@ s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u this->timePath = NULL; sp2C = func_80AF7CB0(this, play, actorCat, actorId); if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((sp2C != NULL) && (sp2C->update != NULL)) { @@ -1228,7 +1228,7 @@ s32 func_80AF8ED4(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput, u s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp56 = SCHEDULE_TIME_NOW; - u8 sp55 = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); EnDoor* door; Vec3s* sp4C; Vec3f sp40; @@ -1239,7 +1239,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; door = func_80AF7D60(play, scheduleOutput->result); if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp55, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((door != NULL) && (door->knobDoor.dyna.actor.update != NULL)) { @@ -1277,7 +1277,7 @@ s32 func_80AF9008(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp2E = SCHEDULE_TIME_NOW; u16 phi_v1; - u8 sp2B = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); u16 tmp; s16 pad; s32 ret = false; @@ -1285,7 +1285,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp2B, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((this->timePath != NULL) && (this->timePath->count < 3)) { @@ -1357,7 +1357,7 @@ s32 func_80AF91E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u8 sp4F = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); Vec3f sp40; Vec3f sp34; Vec3s* sp30; @@ -1366,7 +1366,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; if (D_80AFB430[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, D_80AFB430[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AFB430[scheduleOutput->result]); } if ((this->timePath != 0) && (this->timePath->count >= 2)) { @@ -1390,7 +1390,7 @@ s32 func_80AF94AC(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { } s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { - u8 sp4F = this->actor.params & 0xFF; + u8 pathIndex = ENPM_GET_PATH_INDEX(&this->actor); Vec3f sp40; Vec3f sp34; Vec3s* sp30; @@ -1419,7 +1419,7 @@ s32 func_80AF95E8(EnPm* this, PlayState* play, ScheduleOutput* scheduleOutput) { this->timePath = NULL; phi_a3 = D_80AFB430[scheduleOutput->result]; if (phi_a3 >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp4F, phi_a3); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, phi_a3); } if ((this->timePath != 0) && (this->timePath->count >= 2)) { diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.h b/src/overlays/actors/ovl_En_Pm/z_en_pm.h index c7bf76e37..bf7bbe859 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.h +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.h @@ -9,6 +9,8 @@ typedef void (*EnPmActionFunc)(struct EnPm*, PlayState*); typedef s32 (*EnPmFunc)(struct EnPm*, PlayState*); typedef s32 (*EnPmFunc2)(struct EnPm*, PlayState*); +#define ENPM_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) + typedef struct EnPm { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c index 7fe6e3d26..f4747b4c6 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -151,8 +151,8 @@ void EnPr2_Init(Actor* thisx, PlayState* play) { Actor* parent = this->actor.parent; if (parent->update != NULL) { - this->unk_1C8 = ((EnEncount1*)parent)->pathIndex; - this->path = SubS_GetPathByIndex(play, this->unk_1C8, 0x3F); + this->pathIndex = ((EnEncount1*)parent)->pathIndex; + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENPR2_PATH_INDEX_NONE); this->unk_208 = parent->world.rot.z * 20.0f; if (this->unk_208 < 20.0f) { this->unk_208 = 20.0f; @@ -272,7 +272,7 @@ void func_80A745FC(EnPr2* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_PIRANHA_EXIST - SFX_FLAG); Math_ApproachF(&this->unk_204, 0.02f, 0.1f, 0.005f); - if (this->path->unk2 < this->unk_1D0) { + if (this->path->customValue < this->unk_1D0) { Math_ApproachF(&this->actor.speed, 5.0f, 0.3f, 1.0f); } else { Math_ApproachF(&this->actor.speed, 10.0f, 0.3f, 1.0f); diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h index bbcd28afd..94fb7e033 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.h @@ -10,6 +10,7 @@ typedef void (*EnPr2ActionFunc)(struct EnPr2*, PlayState*); #define ENPR2_GET_F(thisx) ((thisx)->params & 0xF) #define ENPR2_GET_FF0(thisx) (((thisx)->params >> 4) & 0xFF) +#define ENPR2_PATH_INDEX_NONE 0x3F #define ENPR2_PARAMS(paramF, paramFF0) (((paramF) & 0xF) | (((paramFF0) << 4) & 0xFF0)) typedef struct EnPr2 { @@ -18,7 +19,7 @@ typedef struct EnPr2 { /* 0x188 */ Vec3s jointTable[5]; /* 0x1A6 */ Vec3s morphtable[5]; /* 0x1C4 */ EnPr2ActionFunc actionFunc; - /* 0x1C8 */ s16 unk_1C8; + /* 0x1C8 */ s16 pathIndex; /* 0x1CC */ Path* path; /* 0x1D0 */ s32 unk_1D0; /* 0x1D4 */ s16 unk_1D4; diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index 80986adf4..d08110e43 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -313,7 +313,7 @@ void EnRacedog_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Actor_ProcessInitChain(&this->actor, sInitChain); - this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENRACEDOG_GET_PATH_INDEX(&this->actor), ENRACEDOG_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.0075f); this->actor.gravity = -3.0f; if (ENRACEDOG_GET_INDEX(&this->actor) < RACEDOG_COUNT) { diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h index a8cf2a9f9..a3d9afee5 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.h @@ -5,7 +5,10 @@ #include "objects/object_dog/object_dog.h" #define ENRACEDOG_GET_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENRACEDOG_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 10) +#define ENRACEDOG_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 10) + +#define ENRACEDOG_PATH_INDEX_NONE 0x3F + #define ENRACEDOG_PARAMS(index, path) ((index << 5) | (path)) /** diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index 893062fbd..9766fe694 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -196,7 +196,7 @@ void EnRailgibud_SpawnOtherGibdosAndSetPositionAndRotation(EnRailgibud* this, Pl static s32 currentGibdoIndex = 0; s32 nextPoint; Vec3f targetPos; - Path* path = &play->setupPathList[ENRAILGIBUD_GET_PATH(&this->actor)]; + Path* path = &play->setupPathList[ENRAILGIBUD_GET_PATH_INDEX(&this->actor)]; this->points = Lib_SegmentedToVirtual(path->points); this->currentPoint = currentGibdoIndex; diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h index 95a2bbd7b..f9d3922c8 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.h @@ -10,7 +10,7 @@ typedef void (*EnRailgibudActionFunc)(struct EnRailgibud*, PlayState*); #define ENRAILGIBUD_GET_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x7F) #define ENRAILGIBUD_IS_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x80) -#define ENRAILGIBUD_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8) +#define ENRAILGIBUD_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) typedef struct EnRailgibud { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c index a3a026f2b..b6407d24b 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -373,11 +373,11 @@ s32 func_80BF43FC(EnRg* this) { f32 sp88; f32 sp84; f32 phi_f20 = 0.0f; - s32 temp_s7 = ENRG_GET_7F80(&this->actor); + s32 pathIndex = ENRG_GET_PATH_INDEX(&this->actor); s32 phi_s4 = -1; s32 temp_s5 = this->unk_344; s16 phi_s6 = 0; - s32 phi_s0 = D_80BF57E4[this->unk_344][temp_s7]; + s32 phi_s0 = D_80BF57E4[this->unk_344][pathIndex]; do { SubS_CopyPointFromPathCheckBounds(this->path, phi_s0 - 1, &sp9C); @@ -390,7 +390,7 @@ s32 func_80BF43FC(EnRg* this) { phi_s4 = phi_s0; } phi_s0++; - } while ((temp_s5 != 18) && (phi_s0 < D_80BF57E4[temp_s5 + 1][temp_s7])); + } while ((temp_s5 != 18) && (phi_s0 < D_80BF57E4[temp_s5 + 1][pathIndex])); return phi_s4; } @@ -741,7 +741,8 @@ void EnRg_Init(Actor* thisx, PlayState* play) { Effect_Add(play, &this->unk_340, EFFECT_TIRE_MARK, 0, 0, &D_80BF59F0); - this->path = SubS_GetDayDependentPath(play, ENRG_GET_7F80(&this->actor), 255, &this->unk_33C); + this->path = + SubS_GetDayDependentPath(play, ENRG_GET_PATH_INDEX(&this->actor), ENRG_PATH_INDEX_NONE, &this->unk_33C); if (this->path != NULL) { this->unk_33C = 1; } diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.h b/src/overlays/actors/ovl_En_Rg/z_en_rg.h index 4db0b58e0..14f8e3882 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.h +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.h @@ -7,7 +7,9 @@ struct EnRg; typedef void (*EnRgActionFunc)(struct EnRg*, PlayState*); -#define ENRG_GET_7F80(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) +#define ENRG_GET_PATH_INDEX(thisx) ((((thisx)->params & 0x7F80) >> 7) & 0xFF) + +#define ENRG_PATH_INDEX_NONE 0xFF typedef struct { /* 0x00 */ u8 unk_00; diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c index ae7da7d1b..6ea51586a 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.c @@ -35,7 +35,7 @@ void EnRiverSound_Init(Actor* thisx, PlayState* play) { this->playSound = false; pathIndex = RS_GET_PATH_INDEX(&this->actor); this->actor.params = RS_GET_TYPE(&this->actor); - if (pathIndex == 0xFF) { + if (pathIndex == RS_PATH_INDEX_NONE) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h index eff4fbb47..ceef56fbe 100644 --- a/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h +++ b/src/overlays/actors/ovl_En_River_Sound/z_en_river_sound.h @@ -8,6 +8,8 @@ struct EnRiverSound; #define RS_GET_TYPE(thisx) ((thisx)->params & 0xFF); #define RS_GET_PATH_INDEX(thisx) (((thisx)->params >> 8) & 0xFF); +#define RS_PATH_INDEX_NONE 0xFF + // Any param not as one of these values will result in UB typedef enum { /* 0x00 */ RS_RIVER_STREAM, diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.c b/src/overlays/actors/ovl_En_Ru/z_en_ru.c index b67ca2141..3a4d30516 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -235,7 +235,7 @@ void EnRu_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->path = SubS_GetPathByIndex(play, RU_GET_PATH(thisx), 0x3F); + this->path = SubS_GetPathByIndex(play, RU_GET_PATH_INDEX(thisx), RU_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = EnRu_DoNothing; this->actor.gravity = -4.0f; diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.h b/src/overlays/actors/ovl_En_Ru/z_en_ru.h index 081f3bbd8..7aeaea044 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.h +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.h @@ -4,7 +4,9 @@ #include "global.h" #include "objects/object_ru2/object_ru2.h" -#define RU_GET_PATH(thisx) ((thisx->params & 0x7E00) >> 9) +#define RU_GET_PATH_INDEX(thisx) ((thisx->params & 0x7E00) >> 9) + +#define RU_PATH_INDEX_NONE 0x3F struct EnRu; diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index fcc01b1ec..69ad52a2d 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -652,7 +652,7 @@ void EnRuppecrow_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.01f); this->actor.flags |= ACTOR_FLAG_2000000; - this->path = SubS_GetPathByIndex(play, ENRUPPECROW_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENRUPPECROW_GET_PATH_INDEX(&this->actor), ENRUPPECROW_PATH_INDEX_NONE); if (this->path != NULL) { this->actionFunc = EnRuppecrow_HandleSong; } else { diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h index 887cd8c6b..5d591258b 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.h @@ -4,7 +4,9 @@ #include "global.h" #include "objects/object_crow/object_crow.h" -#define ENRUPPECROW_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENRUPPECROW_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENRUPPECROW_PATH_INDEX_NONE 0x3F #define ENRUPPECROW_RUPEE_COUNT 20 #define ENRUPPECROW_LIMB_POS_COUNT 4 diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index e7eaaed99..1a43768fc 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -247,8 +247,8 @@ void func_80BFBA1C(PlayState* play, EnRz* this, s16 animIndex) { } s32 EnRz_SetupPath(EnRz* this, PlayState* play) { - if (EN_RZ_GET_PATH(&this->actor) != 0x3F) { - this->path = &play->setupPathList[EN_RZ_GET_PATH(&this->actor)]; + if (EN_RZ_GET_PATH_INDEX(&this->actor) != EN_RZ_PATH_INDEX_NONE) { + this->path = &play->setupPathList[EN_RZ_GET_PATH_INDEX(&this->actor)]; if (this->path != NULL) { Path* path = this->path; Vec3s* points = (Vec3s*)Lib_SegmentedToVirtual(path->points); diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.h b/src/overlays/actors/ovl_En_Rz/z_en_rz.h index c6d8fe3c8..a29f6d5c2 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.h +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.h @@ -6,7 +6,9 @@ #define EN_RZ_GET_SISTER(thisx) ((thisx)->params & 0x8000) #define EN_RZ_GET_TYPE(thisx) ((thisx)->params & 0xF) -#define EN_RZ_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define EN_RZ_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define EN_RZ_PATH_INDEX_NONE 0x3F typedef enum { /* 0 */ EN_RZ_JUDO, // in red diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index 525696ead..9779de80c 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -276,7 +276,7 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) { } if (func_80BCD09C(this->unk_260)) { - this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH_INDEX(&this->actor), ENSCOPECROW_PATH_INDEX_NONE); this->unk_262 = ENSCOPECROW_GET_3E0(&this->actor); if (this->path != NULL) { @@ -316,7 +316,7 @@ void EnScopecrow_Init(Actor* thisx, PlayState* play) { this->collider.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius; Actor_SetScale(&this->actor, 0.03f); - this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENSCOPECROW_GET_PATH_INDEX(&this->actor), ENSCOPECROW_PATH_INDEX_NONE); this->unk_262 = ENSCOPECROW_GET_3E0(&this->actor); if (this->path != NULL) { diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h index 30f002fb5..523d28804 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.h @@ -10,7 +10,9 @@ typedef void (*EnScopecrowActionFunc)(struct EnScopecrow*, PlayState*); #define ENSCOPECROW_GET_1F(thisx) ((thisx)->params & 0x1F) #define ENSCOPECROW_GET_3E0(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENSCOPECROW_GET_PATH(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENSCOPECROW_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENSCOPECROW_PATH_INDEX_NONE 0x3F typedef struct EnScopecrow { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index 46add654a..08b4b2817 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -708,7 +708,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) { Actor_Kill(&this->actor); } else if (play->actorCtx.flags & ACTORCTX_FLAG_1) { - this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F); + this->path = + SubS_GetPathByIndex(play, ENSCOPENUTS_GET_PATH_INDEX(&this->actor), ENSCOPENUTS_PATH_INDEX_NONE); this->actor.draw = NULL; this->actionFunc = func_80BCAFA8; this->actor.gravity = 0.0f; @@ -717,7 +718,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { } } else if (ENSCOPENUTS_GET_3E0(&this->actor) == ENSCOPENUTS_3E0_1) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_40)) { - this->path = SubS_GetPathByIndex(play, ENSCOPENUTS_GET_FC00(&this->actor), 0x3F); + this->path = + SubS_GetPathByIndex(play, ENSCOPENUTS_GET_PATH_INDEX(&this->actor), ENSCOPENUTS_PATH_INDEX_NONE); if (this->path == NULL) { Actor_Kill(&this->actor); } else { diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h index ef2ea74d8..3f1b8b84e 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.h @@ -8,7 +8,9 @@ struct EnScopenuts; typedef void (*EnScopenutsActionFunc)(struct EnScopenuts*, PlayState*); #define ENSCOPENUTS_GET_3E0(thisx) (((thisx)->params & 0x3E0) >> 5) -#define ENSCOPENUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENSCOPENUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENSCOPENUTS_PATH_INDEX_NONE 0x3F #define ENSCOPENUTS_3E0_0 0 #define ENSCOPENUTS_3E0_1 1 diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index 5dcdeaa8e..e22791c82 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -958,7 +958,7 @@ void EnSellnuts_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinderType1(play, &this->collider, &this->actor, &sCylinderInit); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 35.0f); - this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENSELLNUTS_GET_PATH_INDEX(&this->actor), ENSELLNUTS_PATH_INDEX_NONE); this->csId = this->actor.csId; Actor_SetScale(&this->actor, 0.01f); this->actor.colChkInfo.cylRadius = 0; diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h index 3acf7a3e0..d56c04f9e 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.h @@ -8,7 +8,9 @@ struct EnSellnuts; typedef void (*EnSellnutsActionFunc)(struct EnSellnuts*, PlayState*); #define ENSELLNUTS_GET_1(thisx) ((thisx)->params & 1) -#define ENSELLNUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENSELLNUTS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENSELLNUTS_PATH_INDEX_NONE 0x3F typedef struct EnSellnuts { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index bde455986..3cd33653b 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -1416,7 +1416,7 @@ void EnSob1_InitShop(EnSob1* this, PlayState* play) { this->waypoint = 0; if (this->shopType == BOMB_SHOP) { - this->path = SubS_GetPathByIndex(play, ENSOB1_GET_PATH(&this->actor), 0x1F); + this->path = SubS_GetPathByIndex(play, ENSOB1_GET_PATH_INDEX(&this->actor), ENSOB1_PATH_INDEX_NONE); } if (this->shopType == BOMB_SHOP) { EnSob1_SetupAction(this, EnSob1_SetupWalk); diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h index 1509868ee..12c14301b 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.h @@ -15,7 +15,9 @@ typedef void (*EnSob1ActionFunc)(struct EnSob1*, PlayState*); typedef void (*EnSob1BlinkFunc)(struct EnSob1*); #define ENSOB1_GET_SHOPTYPE(thisx) ((thisx)->params & 0x1F) -#define ENSOB1_GET_PATH(thisx) (((thisx)->params & 0x3E0) >> 5) +#define ENSOB1_GET_PATH_INDEX(thisx) (((thisx)->params & 0x3E0) >> 5) + +#define ENSOB1_PATH_INDEX_NONE 0x1F typedef struct EnSob1XZRange { /* 0x0 */ f32 xMin; 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 74258058f..e86d1e1bd 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -549,8 +549,9 @@ void func_80BAB434(EnSuttari* this) { } void EnSuttari_GetPaths(EnSuttari* this, PlayState* play) { - this->paths[0] = SubS_GetPathByIndex(play, ENSUTTARI_GET_PATH(&this->actor), 0x3F); - this->paths[1] = SubS_GetPathByIndex(play, this->paths[0]->unk1, 0x3F); + this->paths[0] = SubS_GetPathByIndex(play, ENSUTTARI_GET_PATH_INDEX(&this->actor), ENSUTTARI_PATH_INDEX_NONE); + //! @bug: the additional path shouldn't use `ENSUTTARI_PATH_INDEX_NONE`, but `ADDITIONAL_PATH_INDEX_NONE` + this->paths[1] = SubS_GetPathByIndex(play, this->paths[0]->additionalPathIndex, ENSUTTARI_PATH_INDEX_NONE); } void func_80BAB4F0(EnSuttari* this, PlayState* play) { @@ -712,11 +713,11 @@ void func_80BABB90(EnSuttari* this, s32 arg1) { s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp26 = SCHEDULE_TIME_NOW; u16 phi_a0; - u8 sp23 = ENSUTTARI_GET_PATH(&this->actor); + u8 pathIndex = ENSUTTARI_GET_PATH_INDEX(&this->actor); u16 tmp; if (D_80BAE8F8[scheduleOutput->result] >= 0) { - this->timePath = SubS_GetAdditionalPath(play, sp23, D_80BAE8F8[scheduleOutput->result]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80BAE8F8[scheduleOutput->result]); } if (this->timePath == NULL) { return 0; @@ -743,7 +744,7 @@ s32 func_80BABC48(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 pad; EnDoor* sp48; - u8 sp47 = ENSUTTARI_GET_PATH(&this->actor); + u8 pathIndex = ENSUTTARI_GET_PATH_INDEX(&this->actor); u16 sp44 = SCHEDULE_TIME_NOW; Vec3f sp38; Vec3f sp2C; @@ -756,7 +757,7 @@ s32 func_80BABDD8(EnSuttari* this, PlayState* play, ScheduleOutput* scheduleOutp sp48 = (EnDoor*)SubS_FindNearestActor(&this->actor, play, ACTORCAT_DOOR, ACTOR_EN_DOOR); sp24 = D_80BAE8F8[scheduleOutput->result]; if ((sp48 != NULL) && (sp24 >= 0)) { - this->timePath = SubS_GetAdditionalPath(play, sp47, sp24); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, sp24); } if ((sp48 == NULL) || (this->timePath == NULL)) { return false; @@ -1313,7 +1314,7 @@ void func_80BAD5F8(EnSuttari* this, PlayState* play) { } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); - if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) { + if ((this->unk430 == 1) && (this->timePath->additionalPathIndex == ADDITIONAL_PATH_INDEX_NONE)) { Actor_Kill(&this->actor); return; } @@ -1351,7 +1352,7 @@ void func_80BAD7F8(EnSuttari* this, PlayState* play) { } this->unk428 = scheduleOutput.result; func_80BAC2FC(this, play); - if ((this->unk430 == 1) && (this->timePath->unk1 == 0xFF)) { + if ((this->unk430 == 1) && (this->timePath->additionalPathIndex == ADDITIONAL_PATH_INDEX_NONE)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h index 071000763..8da01b67e 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.h @@ -8,7 +8,9 @@ struct EnSuttari; typedef void (*EnSuttariActionFunc)(struct EnSuttari*, PlayState*); -#define ENSUTTARI_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENSUTTARI_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENSUTTARI_PATH_INDEX_NONE 0x3F typedef struct EnSuttari { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index 3f32564bb..a705a8546 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -901,13 +901,13 @@ void func_808DA89C(EnSw* this, PlayState* play) { } void func_808DAA60(EnSw* this, PlayState* play) { - Vec3s* sp44; + Vec3s* points; s16 temp_v0; s16 sp40; Vec3f sp34; f32 temp_f16; - sp44 = Lib_SegmentedToVirtual(this->unk_1E4->points); + points = Lib_SegmentedToVirtual(this->path->points); sp40 = 0; if (DECR(this->unk_454) == 0) { @@ -915,13 +915,13 @@ void func_808DAA60(EnSw* this, PlayState* play) { temp_f16 = this->skelAnime.endFrame - this->skelAnime.curFrame; sp40 = 80.0f * temp_f16; if (this->unk_45E == 0) { - Math_Vec3s_ToVec3f(&sp34, &sp44[this->unk_4A0]); + Math_Vec3s_ToVec3f(&sp34, &points[this->unk_4A0]); func_808D9894(this, &sp34); temp_v0 = Math_Atan2S_XY(sp34.z, sp34.x); if (ABS_ALT(temp_v0) < sp40) { this->skelAnime.curFrame = 0.0f; Actor_PlaySfx(&this->actor, NA_SE_EN_STALWALL_DASH); - Math_Vec3s_ToVec3f(&this->unk_374, &sp44[this->unk_4A0]); + Math_Vec3s_ToVec3f(&this->unk_374, &points[this->unk_4A0]); this->actionFunc = func_808DACF4; this->unk_414 = 0.0f; sp40 = ABS_ALT(temp_v0); @@ -981,7 +981,7 @@ void func_808DACF4(EnSw* this, PlayState* play) { if (((s32)this->unk_414 != 0) && ((s32)this->unk_414 < (s32)sp4C)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_374); this->unk_4A0 += this->unk_49C; - if ((this->unk_4A0 >= this->unk_1E4->count) || (this->unk_4A0 < 0)) { + if ((this->unk_4A0 >= this->path->count) || (this->unk_4A0 < 0)) { this->unk_49C = -this->unk_49C; this->unk_4A0 += this->unk_49C * 2; } @@ -1154,8 +1154,9 @@ void EnSw_Init(Actor* thisx, PlayState* play) { this->collider.info.toucher.damage = 16; } - this->unk_1E4 = SubS_GetDayDependentPath(play, ENSW_GET_FF00(&this->actor), 255, &this->unk_4A0); - if (this->unk_1E4 != NULL) { + this->path = + SubS_GetDayDependentPath(play, ENSW_GET_PATH_INDEX(&this->actor), ENSW_PATH_INDEX_NONE, &this->unk_4A0); + if (this->path != NULL) { this->unk_4A0 = 1; } @@ -1201,7 +1202,7 @@ void EnSw_Init(Actor* thisx, PlayState* play) { } func_808D9F78(this, play, 1); - if (this->unk_1E4 != NULL) { + if (this->path != NULL) { this->unk_49C = 1; func_808D9F08(this); this->actionFunc = func_808DAA60; diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.h b/src/overlays/actors/ovl_En_Sw/z_en_sw.h index 4544346a0..f77d12267 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.h +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.h @@ -11,14 +11,16 @@ typedef void (*EnSwActionFunc)(struct EnSw*, PlayState*); #define ENSW_GET_3(thisx) (ENSW_GETS_3((thisx)->params)) #define ENSW_GETS_3FC(params) (((params & 0x3FC) >> 2) & 0xFF) #define ENSW_GET_3FC(thisx) (ENSW_GETS_3FC((thisx)->params)) -#define ENSW_GET_FF00(thisx) ((((thisx)->params & 0xFF00) >> 8) & 0xFF) +#define ENSW_GET_PATH_INDEX(thisx) ((((thisx)->params & 0xFF00) >> 8) & 0xFF) + +#define ENSW_PATH_INDEX_NONE 0xFF typedef struct EnSw { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnSwActionFunc actionFunc; /* 0x18C */ ColliderSphere collider; - /* 0x1E4 */ Path* unk_1E4; + /* 0x1E4 */ Path* path; /* 0x1E8 */ Vec3s jointTable[30]; /* 0x29C */ Vec3s morphTable[30]; /* 0x350 */ Vec3f unk_350; diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index ae4716172..5f5194523 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -79,12 +79,12 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) { s32 i; path = syatekiMan->path; - while (path->unk2 != 0) { - path = &play->setupPathList[path->unk1]; + while (path->customValue != SG_PATH_TYPE_CROW) { + path = &play->setupPathList[path->additionalPathIndex]; } for (i = 0; i < EN_SYATEKI_CROW_GET_INDEX(&this->actor); i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } Actor_ProcessInitChain(&this->actor, sInitChain); diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index 6fefd906a..b8c5eda14 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -103,7 +103,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) { static s32 sDrawFlowers = true; // This makes it so only one EnSyatekiDekunuts draws all the flowers. EnSyatekiDekunuts* this = THIS; PlayState* play = play2; - s32 unkPathComparison; + s32 pathType; Path* path; EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; s32 i; @@ -115,18 +115,18 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) { if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) { Actor_SetScale(&this->actor, 0.01f); this->collider.dim = sBonusDekuScrubColliderDimensions[0]; - unkPathComparison = 3; + pathType = SG_PATH_TYPE_SCRUB_BONUS; } else { Actor_SetScale(&this->actor, 0.02f); - unkPathComparison = 1; + pathType = SG_PATH_TYPE_SCRUB_NORMAL; } - while (path->unk2 != unkPathComparison) { - path = &play->setupPathList[path->unk1]; + while (path->customValue != pathType) { + path = &play->setupPathList[path->additionalPathIndex]; } for (i = 0; i < EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(&this->actor); i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } if (sDrawFlowers == true) { 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 2a1ea5357..a58425737 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 @@ -183,7 +183,7 @@ void EnSyatekiMan_Swamp_SpawnTargetActors(EnSyatekiMan* this, PlayState* play2, void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { EnSyatekiMan* this = THIS; s32 pad; - Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH(&this->actor)]; + Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH_INDEX(&this->actor)]; s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex]; this->actor.targetMode = 1; diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h index 0b637fecf..468cb981c 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h @@ -8,7 +8,7 @@ struct EnSyatekiMan; typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*); -#define EN_SYATEKI_MAN_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8) +#define EN_SYATEKI_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8) typedef enum { /* 0 */ SG_GAME_STATE_NONE, // None of the states below apply. @@ -18,22 +18,29 @@ typedef enum { /* 4 */ SG_GAME_STATE_ONE_MORE_GAME, // The player failed to get a new high score (Town) and/or perfect score (Swamp and Town). /* 5 */ SG_GAME_STATE_GIVING_BONUS, // The player gets bonus points at the end of the Swamp game if they get a perfect score. /* 6 */ SG_GAME_STATE_ENDED, // The player got a new high score and/or perfect score (Town), or the game is over (Swamp). - /* 7 */ SG_GAME_STATE_MOVING_PLAYER, // The player is automatically moving towards the spot to play the game. + /* 7 */ SG_GAME_STATE_MOVING_PLAYER // The player is automatically moving towards the spot to play the game. } ShootingGalleryGameState; typedef enum { /* 0 */ SG_OCTO_STATE_SPAWNING, /* 1 */ SG_OCTO_STATE_SPAWNED, /* 70 */ SG_OCTO_STATE_INITIAL = 70, - /* 80 */ SG_OCTO_STATE_HIDING = 80, + /* 80 */ SG_OCTO_STATE_HIDING = 80 } ShootingGalleryOctorokState; typedef enum { /* 0 */ SG_OCTO_HIT_TYPE_NONE, /* 1 */ SG_OCTO_HIT_TYPE_RED, - /* 2 */ SG_OCTO_HIT_TYPE_BLUE, + /* 2 */ SG_OCTO_HIT_TYPE_BLUE } ShootingGalleryoctorokHitType; +typedef enum { + /* 0 */ SG_PATH_TYPE_CROW, + /* 1 */ SG_PATH_TYPE_SCRUB_NORMAL, + /* 2 */ SG_PATH_TYPE_WOLFOS, + /* 3 */ SG_PATH_TYPE_SCRUB_BONUS +} ShootingGalleryPathType; + typedef struct EnSyatekiMan { /* 0x000 */ Actor actor; /* 0x144 */ SkelAnime skelAnime; diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index f582063b7..7b885c5e8 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -146,12 +146,12 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) { s32 i; path = syatekiMan->path; - while (path->unk2 != 2) { - path = &play->setupPathList[path->unk1]; + while (path->customValue != SG_PATH_TYPE_WOLFOS) { + path = &play->setupPathList[path->additionalPathIndex]; } for (i = 0; i < EN_SYATEKI_WF_GET_INDEX(&this->actor); i++) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } if (path == NULL) { diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 3987f9d12..6711fcde6 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -533,17 +533,17 @@ void func_80A3F114(EnTest3* this, PlayState* play) { } s32 func_80A3F15C(EnTest3* this, PlayState* play, struct_80A41828* arg2) { - s32 pathIndex; + s32 limit; Path* path; Vec3s* curPathPoint; Vec3s* nextPathPoint; Vec3f curPathPos; Vec3f nextPathPos; - pathIndex = ABS_ALT(arg2->unk_1_0) - 1; + limit = ABS_ALT(arg2->unk_1_0) - 1; - if (pathIndex >= 0) { - path = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), pathIndex); + if (limit >= 0) { + path = SubS_GetAdditionalPath(play, KAFEI_GET_PATH_INDEX(&this->player.actor), limit); curPathPoint = Lib_SegmentedToVirtual(path->points); if (arg2->unk_1_0 > 0) { @@ -868,7 +868,7 @@ s32 func_80A40098(EnTest3* this, PlayState* play, struct_80A41828* arg2, Schedul u16 numWaypoints; func_80A3F15C(this, play, arg2); - this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PARAM_1F(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1); + this->unk_D7C = SubS_GetAdditionalPath(play, KAFEI_GET_PATH_INDEX(&this->player.actor), ABS_ALT(arg2->unk_1_0) - 1); if ((this->unk_D88 < 7) && (this->unk_D88 != 0) && (this->unk_D80 >= 0)) { startTime = now; } else { diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.h b/src/overlays/actors/ovl_En_Test3/z_en_test3.h index 36cd15c27..17c704129 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.h +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.h @@ -7,7 +7,7 @@ struct EnTest3; typedef void (*EnTest3ActionFunc)(struct EnTest3*, PlayState*); -#define KAFEI_GET_PARAM_1F(thisx) ((thisx)->params & 0x1F) +#define KAFEI_GET_PATH_INDEX(thisx) ((thisx)->params & 0x1F) #define KAFEI_GET_PARAM_1E0(thisx) (((thisx)->params >> 5) & 0xF) typedef struct { diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 01ec414e5..341f0a89d 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -503,12 +503,12 @@ s32 func_80AED354(EnTk* this, PlayState* play, ScheduleOutput* scheduleOutput) { s32 func_80AED38C(EnTk* this, PlayState* play, ScheduleOutput* scheduleOutput) { u16 sp1E = SCHEDULE_TIME_NOW; - u8 params = ENTK_GET_F800(&this->actor); + u8 pathIndex = ENTK_GET_PATH_INDEX(&this->actor); u16 phi_a1; s32 index = scheduleOutput->result - 1; u16 tmp; - this->timePath = SubS_GetAdditionalPath(play, params, D_80AEF8E8[index + 1]); + this->timePath = SubS_GetAdditionalPath(play, pathIndex, D_80AEF8E8[index + 1]); if (this->timePath == NULL) { return false; } diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.h b/src/overlays/actors/ovl_En_Tk/z_en_tk.h index 9604133e7..aa15c6fc6 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.h +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.h @@ -10,7 +10,7 @@ typedef void (*EnTkUnkFunc)(struct EnTk*, PlayState*); #define ENTK_GET_F(thisx) ((thisx)->params & 0xF) #define ENTK_GET_7F0(thisx) (((thisx)->params >> 4) & 0x7F) -#define ENTK_GET_F800(thisx) ((((thisx)->params >> 0xB) & 0x1F) & 0xFF) +#define ENTK_GET_PATH_INDEX(thisx) (((thisx)->params >> 0xB) & 0x1F) typedef struct EnTk { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index 951724668..bf0f9cc31 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -216,7 +216,7 @@ void func_80AD36EC(EnTrt2* this, PlayState* play) { this->unk_1E4 = 0; this->unk_3D9 = 1; this->actor.velocity.y = 0.0f; - this->path = SubS_GetPathByIndex(play, this->path->unk1, -1); + this->path = SubS_GetPathByIndex(play, this->path->additionalPathIndex, PATH_INDEX_NONE); CutsceneManager_Stop(this->csId); this->csId = CutsceneManager_GetAdditionalCsId(this->csId); CutsceneManager_Queue(this->csId); @@ -450,7 +450,7 @@ void func_80AD417C(EnTrt2* this, PlayState* play) { play->msgCtx.stateTimer = 4; if (this->unk_3A8 == 0x84C) { EnTrt2_ChangeAnim(&this->skelAnime, sAnimationInfo, TRT2_ANIM_HOVER); - this->path = SubS_GetPathByIndex(play, ENTRT2_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRT2_GET_PATH_INDEX(&this->actor), ENTRT2_PATH_INDEX_NONE); this->unk_3B2 = 18; } else if (this->unk_3A8 == 0x88F) { this->unk_3A8 = 0x88E; @@ -722,7 +722,7 @@ void func_80AD4DB4(EnTrt2* this, PlayState* play) { this->actor.flags &= ~ACTOR_FLAG_10; Actor_SetObjectDependency(play, &this->actor); Actor_SetScale(&this->actor, 0.008f); - this->path = SubS_GetPathByIndex(play, ENTRT2_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRT2_GET_PATH_INDEX(&this->actor), ENTRT2_PATH_INDEX_NONE); this->unk_3AE = Rand_S16Offset(100, 50); this->unk_3B0 = 10; this->unk_3A8 = 0; diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h index f30f41d80..f9e2b4fc8 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.h @@ -9,7 +9,9 @@ typedef void (*EnTrt2ActionFunc)(struct EnTrt2*, PlayState*); typedef void (*EnTrt2UnkFunc)(struct EnTrt2*); typedef void (*EnTrt2UnkFunc2)(struct EnTrt2*, PlayState*); -#define ENTRT2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENTRT2_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENTRT2_PATH_INDEX_NONE 0x3F typedef struct EnTrt2 { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index a3c267846..a11d00cdb 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -1138,7 +1138,8 @@ void EnTru_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); this->animIndex = -1; EnTru_ChangeAnim(this, KOUME_ANIM_INJURED_LYING_DOWN); - this->path = SubS_GetDayDependentPath(play, ENTRU_GET_PATH(&this->actor), 255, &this->unk_384); + this->path = + SubS_GetDayDependentPath(play, ENTRU_GET_PATH_INDEX(&this->actor), ENTRU_PATH_INDEX_NONE, &this->unk_384); if (this->path != NULL) { this->unk_384 = 1; } diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.h b/src/overlays/actors/ovl_En_Tru/z_en_tru.h index c6d2af00c..e7c06e127 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.h +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.h @@ -9,7 +9,9 @@ struct EnTru; typedef void (*EnTruActionFunc)(struct EnTru*, PlayState*); typedef s32 (*EnTruUnkFunc)(Actor*, PlayState*); -#define ENTRU_GET_PATH(thisx) ((thisx)->params & 0xFF) +#define ENTRU_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) + +#define ENTRU_PATH_INDEX_NONE 0xFF typedef struct { /* 0x00 */ u8 unk_00; diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index 2c8e4ed8a..6cd2641a1 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -431,7 +431,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { this->collider.dim.worldSphere.radius = 22; this->actor.colChkInfo.damageTable = &sDamageTable; - this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FF(&this->actor), ENTRUMT_PATH_INDEX_NONE); this->actor.targetMode = 0; Actor_SetScale(&this->actor, 0.008f); @@ -439,7 +439,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { this->unk_328 = 0; this->actor.room = -1; - this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FC00(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENTRUMT_GET_FC00(&this->actor), ENTRUMT_PATH_INDEX_NONE); EnTruMt_ChangeAnim(&this->skelAnime, KOUME_MT_ANIM_FLY); this->actionFunc = func_80B76A64; } diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h index b114804d7..d25d54a24 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.h @@ -11,6 +11,8 @@ typedef void (*EnTruMtActionFunc)(struct EnTruMt*, PlayState*); #define ENTRUMT_GET_FF(thisx) ((thisx)->params & 0xFF) #define ENTRUMT_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENTRUMT_PATH_INDEX_NONE 0x3F + typedef struct EnTruMt { /* 0x000 */ Actor actor; /* 0x144 */ EnTruMtActionFunc actionFunc; diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c index a732f0124..ba71bbd7f 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -206,11 +206,11 @@ void EnZo_LookAtPlayer(EnZo* this, PlayState* play) { } void EnZo_Walk(EnZo* this, PlayState* play) { - if (ENZO_GET_PATH(&this->actor) != 0x3F) { + if (ENZO_GET_PATH_INDEX(&this->actor) != ENZO_PATH_INDEX_NONE) { EnZo_ChangeAnim(&this->skelAnime, 6); } - if (ENZO_GET_PATH(&this->actor) != 0x3F) { + if (ENZO_GET_PATH_INDEX(&this->actor) != ENZO_PATH_INDEX_NONE) { this->actionFunc = EnZo_FollowPath; } else { this->actionFunc = EnZo_DoNothing; @@ -264,7 +264,7 @@ void EnZo_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); - this->path = SubS_GetPathByIndex(play, ENZO_GET_PATH(&this->actor), 0x3F); + this->path = SubS_GetPathByIndex(play, ENZO_GET_PATH_INDEX(&this->actor), ENZO_PATH_INDEX_NONE); Actor_SetScale(&this->actor, 0.01f); this->actionFunc = EnZo_Walk; diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.h b/src/overlays/actors/ovl_En_Zo/z_en_zo.h index bfd0c79dd..9d32f63e5 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.h +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.h @@ -8,7 +8,9 @@ struct EnZo; typedef void (*EnZoActionFunc)(struct EnZo*, PlayState*); -#define ENZO_GET_PATH(thisx) (((thisx)->params & 0x7E00) >> 9) +#define ENZO_GET_PATH_INDEX(thisx) (((thisx)->params & 0x7E00) >> 9) + +#define ENZO_PATH_INDEX_NONE 0x3F typedef struct EnZo { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index ab97962de..1493759a5 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -111,8 +111,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { for (i = 0; i < ARRAY_COUNT(this->unk_2D8); i++) { this->unk_2D8[i] = NULL; } - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; this->unk_2D4 = 0; func_80B965D0(this, play); } else { @@ -124,8 +124,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 3: case 4: this->actionFunc = func_80B97B5C; - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } @@ -134,8 +134,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 5: this->unk_2F2 |= 4; this->actionFunc = func_80B97FD0; - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } @@ -167,8 +167,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 10: this->actionFunc = func_80B992C0; func_80B96BEC(this, 1, ANIMMODE_LOOP); - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } @@ -211,8 +211,8 @@ void EnZot_Init(Actor* thisx, PlayState* play2) { case 22: this->actionFunc = func_80B980FC; - if (ENZOT_GET_FC00(&this->actor) != 0x3F) { - this->path = &play->setupPathList[ENZOT_GET_FC00(&this->actor)]; + if (ENZOT_GET_PATH_INDEX(&this->actor) != ENZOT_PATH_INDEX_NONE) { + this->path = &play->setupPathList[ENZOT_GET_PATH_INDEX(&this->actor)]; } else { this->path = NULL; } diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.h b/src/overlays/actors/ovl_En_Zot/z_en_zot.h index 1bab43ae3..e2c43baa3 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.h +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.h @@ -8,7 +8,9 @@ struct EnZot; typedef void (*EnZotActionFunc)(struct EnZot*, PlayState*); #define ENZOT_GET_1F(thisx) ((thisx)->params & 0x1F) -#define ENZOT_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA) +#define ENZOT_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFC00) >> 0xA) + +#define ENZOT_PATH_INDEX_NONE 0x3F typedef struct EnZot { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c index 43f137326..6c81e8de6 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c @@ -66,7 +66,7 @@ void ObjBoat_Init(Actor* thisx, PlayState* play) { if (thisx->params < 0) { this->dyna.actor.update = ObjBoat_UpdateCutscene; } else { - path = &play->setupPathList[OBJBOAT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJBOAT_GET_PATH_INDEX(thisx)]; this->maxPointIndex = path->count - 1; this->points = Lib_SegmentedToVirtual(path->points); this->direction = 1; @@ -157,10 +157,10 @@ void ObjBoat_UpdateCutscene(Actor* thisx, PlayState* play2) { if (this->cueId != cue->id) { this->dyna.actor.shape.rot.x = cue->rot.x; if (cue->id != 1) { - Path* path = &play->setupPathList[OBJBOAT_GET_PATH(&this->dyna.actor)]; + Path* path = &play->setupPathList[OBJBOAT_GET_PATH_INDEX(&this->dyna.actor)]; if (cue->id == 3) { - path = &play->setupPathList[path->unk1]; + path = &play->setupPathList[path->additionalPathIndex]; } this->maxPointIndex = path->count; diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h index bfc7c7c2b..00cb936d7 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJBOAT_GET_PATH(thisx) (((thisx)->params >> 7) & 0x1F) +#define OBJBOAT_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJBOAT_GET_4000(thisx) ((thisx)->params & 0x4000) struct ObjBoat; diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c index a33bf2a43..9d468d834 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c @@ -68,7 +68,7 @@ void ObjDanpeilift_Init(Actor* thisx, PlayState* play) { if (this->speed < 0.01f) { this->actionFunc = ObjDanpeilift_DoNothing; } else { - path = &play->setupPathList[OBJDANPEILIFT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJDANPEILIFT_GET_PATH_INDEX(thisx)]; this->curPoint = OBJDANPEILIFT_GET_STARTING_POINT(thisx); this->endPoint = path->count - 1; this->direction = 1; diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h index 9c0d023c7..8ad582dd4 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h @@ -10,7 +10,7 @@ typedef void (*ObjDanpeiliftActionFunc)(struct ObjDanpeilift*, PlayState*); #define OBJDANPEILIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1) #define OBJDANPEILIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F) -#define OBJDANPEILIFT_GET_PATH(thisx) ((thisx)->params & 0x7F) +#define OBJDANPEILIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJDANPEILIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1) #define OBJDANPEILIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) #define OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1) diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c index cb957b839..7cace2621 100644 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c +++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c @@ -65,7 +65,7 @@ void ObjLupygamelift_Init(Actor* thisx, PlayState* play) { this->dyna.actor.home.rot.y = 0; this->dyna.actor.home.rot.z = 0; - path = &play->setupPathList[OBJLUPYGAMELIFT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJLUPYGAMELIFT_GET_PATH_INDEX(thisx)]; this->pointIndex = OBJLUPYGAMELIFT_GET_7(thisx); this->count = path->count; if (this->pointIndex >= this->count) { diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h index e25f9cd6d..a1928c473 100644 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h +++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.h @@ -3,7 +3,7 @@ #include "global.h" -#define OBJLUPYGAMELIFT_GET_PATH(thisx) ((thisx)->params & 0x7F) +#define OBJLUPYGAMELIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJLUPYGAMELIFT_GET_7(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJLUPYGAMELIFT_GET_C(thisx) (((thisx)->params >> 0xC) & 1) diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c index bb7d30f69..bcef92843 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.c @@ -61,7 +61,7 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play) { Path* path; s32 childPointIndex; - path = &play->setupPathList[OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(&this->actor)]; + path = &play->setupPathList[OBJMAKEOSHIHIKI_GET_PATH_INDEX(&this->actor)]; this->pathPoints = Lib_SegmentedToVirtual(path->points); this->pathCount = path->count; childPointIndex = ObjMakeoshihiki_GetChildSpawnPointIndex(this, play); diff --git a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h index 47fbe831b..fbe8c1283 100644 --- a/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h +++ b/src/overlays/actors/ovl_Obj_Makeoshihiki/z_obj_makeoshihiki.h @@ -5,7 +5,7 @@ struct ObjMakeoshihiki; -#define OBJMAKEOSHIHIKI_GET_PATHLISTINDEX(thisx) (((thisx)->params >> 7) & 0x7F) +#define OBJMAKEOSHIHIKI_GET_PATH_INDEX(thisx) (((thisx)->params >> 7) & 0x7F) #define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_1(thisx) ((thisx)->home.rot.z & 0x7F) #define OBJMAKEOSHIHIKI_GET_SWITCHFLAG_2(thisx) ((thisx)->params & 0x7F) diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c index d224125dd..1a63e89cb 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -86,7 +86,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) { if (this->speed < 0.01f) { this->actionFunc = ObjRaillift_DoNothing; } else { - path = &play->setupPathList[OBJRAILLIFT_GET_PATH(thisx)]; + path = &play->setupPathList[OBJRAILLIFT_GET_PATH_INDEX(thisx)]; this->curPoint = OBJRAILLIFT_GET_STARTING_POINT(thisx); this->endPoint = path->count - 1; this->direction = 1; diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h index b921b0e5a..dc197432f 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h @@ -10,7 +10,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*); #define OBJRAILLIFT_GET_TYPE(thisx) (((thisx)->params >> 0xF) & 1) #define OBJRAILLIFT_HAS_FLAG(thisx) (((thisx)->params >> 0xD) & 1) #define OBJRAILLIFT_GET_FLAG(thisx) ((thisx)->home.rot.x & 0x7F) -#define OBJRAILLIFT_GET_PATH(thisx) ((thisx)->params & 0x7F) +#define OBJRAILLIFT_GET_PATH_INDEX(thisx) ((thisx)->params & 0x7F) #define OBJRAILLIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJRAILLIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) #define OBJRAILLIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1) diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c index c6ed2cc2c..cecb80832 100644 --- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c +++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c @@ -131,12 +131,12 @@ void ObjToge_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); - if (OBJTOGE_GET_PATH(thisx) == 0xFF) { + if (OBJTOGE_GET_PATH_INDEX(thisx) == OBJTOGE_PATH_INDEX_NONE) { Actor_Kill(thisx); return; } - path = &play->setupPathList[OBJTOGE_GET_PATH(thisx)]; + path = &play->setupPathList[OBJTOGE_GET_PATH_INDEX(thisx)]; if (path->count != 2) { Actor_Kill(thisx); return; diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h index 8259e62c8..54cf02bf4 100644 --- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h +++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.h @@ -7,11 +7,13 @@ struct ObjToge; typedef void (*ObjTogeActionFunc)(struct ObjToge*, PlayState*); -#define OBJTOGE_GET_PATH(thisx) ((thisx)->params & 0xFF) +#define OBJTOGE_GET_PATH_INDEX(thisx) ((thisx)->params & 0xFF) #define OBJTOGE_GET_700(thisx) (((thisx)->params >> 8) & 7) #define OBJTOGE_GET_3800(thisx) (((thisx)->params >> 0xB) & 7) #define OBJTOGE_GET_4000(thisx) (((thisx)->params >> 0xE) & 1) +#define OBJTOGE_PATH_INDEX_NONE 0xFF + typedef struct ObjToge { /* 0x000 */ Actor actor; /* 0x144 */ ColliderCylinder collider; diff --git a/tools/namefixer.py b/tools/namefixer.py index 901d6dbf6..286653e13 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -1037,6 +1037,9 @@ wordReplace = { "play->nextEntranceIndex": "play->nextEntrance", "play->sceneNum": "play->sceneId", "play->pauseCtx.unk_1F0": "play->pauseCtx.bombersNotebookOpen", + "play->sceneLoadFlag": "play->transitionTrigger", + "play->unk_18B4A": "play->transitionMode", + "play->unk_1887F": "play->transitionType", "play->playerActorCsIds": "play->playerCsIds", "play->envFlags": "play->cutsceneFlags", "play->roomCtx.curRoom.unk3": "play->roomCtx.curRoom.behaviorType1", @@ -1061,16 +1064,14 @@ wordReplace = { "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", - "play->roomCtx.currRoom": "play->roomCtx.curRoom", "gSaveContext.nextTransition": "gSaveContext.nextTransitionType", "gSaveContext.unk_3F48": "gSaveContext.cutsceneTransitionControl", "gSaveContext.fadeDuration": "gSaveContext.transFadeDuration", "gSaveContext.fadeSpeed": "gSaveContext.transWipeSpeed", + "path->unk1": "path->additionalPathIndex", + "path->unk2": "path->customValue", + "D_801D15B0": "gZeroVec3f", "D_801D15BC": "gZeroVec3s", "D_801D1DE0": "gIdentityMtx", From 8cabbb1a2bd282e0a757385aa8d23d710aaafb13 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 6 Jun 2023 05:03:02 +1000 Subject: [PATCH 27/36] File Select (1 Non-Matching) (#1158) * Everything below Main OK, and some small ones at the top * 3 more short ones * FileChoose_Main * SelectModeUpdate/Draw * SelectMode update functions done * 2 more small ones * ConfigModeDraw * SetWindowVtx * FileChoose_FadeInMenuElements * Rest of the Config Mode Update Functions * Minor cleanup * FileChoose_UpdateMainMenu * Make xml for title_static * Minor correction * One nasty draw, thanks Synray Co-Authored-By: Synray <31429825+Synray@users.noreply.github.com> * import data * some cleanup * import OoT docs * missed some docs * some progress * FileSelect_SetWindowContentVtx WIP * improve FileSelect_SetWindowContentVtx * match z_file_nameset_NES * cleanup and docs * title static * a few more functions * even more functions * small cleanup * Data Cleanup * 2 more matches * z_file_choose_80807940 OK * cleanup * fix merge master * FileSelect_DrawFileInfo wip * small cleanup * minor * fix merge * match FileSelect_DrawFileInfo * cleanup * fix merge * fix merge * sram cleanup * document select mode * many docs * more docs * more cleanup * small nitpick * consistency * more cleanup * more cleanup * small * small typos * octal bad * pr review * noop * elliptic review * more review * non-matching * oops * more suggestions * keyboard formatting * fix master * sound * padding --------- Co-authored-by: Elliptic Ellipsis Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> --- assets/xml/misc/title_static.xml | 126 + assets/xml/overlays/ovl_file_choose.xml | 19 + include/functions.h | 3 +- include/z64.h | 46 +- include/z64save.h | 59 +- include/z64scene.h | 6 +- spec | 14 +- src/code/graph.c | 2 +- src/code/z_common_data.c | 6 +- src/code/z_demo.c | 21 +- src/code/z_game_dlftbls.c | 2 +- src/code/z_game_over.c | 2 +- src/code/z_lifemeter.c | 4 +- src/code/z_parameter.c | 2 +- src/code/z_play.c | 12 +- src/code/z_scene.c | 4 +- src/code/z_sram_NES.c | 617 ++-- src/code/z_vr_box.c | 4 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 4 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 8 +- src/overlays/actors/ovl_En_Holl/z_en_holl.c | 2 +- .../actors/ovl_En_Viewer/z_en_viewer.c | 6 +- .../ovl_En_Weather_Tag/z_en_weather_tag.c | 67 +- .../actors/ovl_Obj_Grass/z_obj_grass.c | 1 + .../actors/ovl_player_actor/z_player.c | 4 +- .../ovl_file_choose/z_file_choose.h | 115 - .../ovl_file_choose/z_file_choose_80807940.c | 46 - .../ovl_file_choose/z_file_choose_NES.c | 2547 ++++++++++++++++- .../ovl_file_choose/z_file_copy_erase.c | 1253 ++++++++ .../ovl_file_choose/z_file_nameset_NES.c | 1061 ++++++- .../ovl_file_choose/z_file_nameset_data.c | 17 + .../ovl_file_choose/z_file_select.h | 327 +++ src/overlays/gamestates/ovl_title/z_title.c | 2 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 15 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 15 +- tools/disasm/functions.txt | 178 +- tools/disasm/variables.txt | 106 +- tools/sizes/code_functions.csv | 20 +- 38 files changed, 5951 insertions(+), 792 deletions(-) create mode 100644 assets/xml/misc/title_static.xml create mode 100644 assets/xml/overlays/ovl_file_choose.xml delete mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_choose.h delete mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c create mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c create mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c create mode 100644 src/overlays/gamestates/ovl_file_choose/z_file_select.h diff --git a/assets/xml/misc/title_static.xml b/assets/xml/misc/title_static.xml new file mode 100644 index 000000000..5e6cea55f --- /dev/null +++ b/assets/xml/misc/title_static.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/overlays/ovl_file_choose.xml b/assets/xml/overlays/ovl_file_choose.xml new file mode 100644 index 000000000..cac6f3d9d --- /dev/null +++ b/assets/xml/overlays/ovl_file_choose.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/include/functions.h b/include/functions.h index ccf1877e0..7d64745f6 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2218,7 +2218,8 @@ s32 SysFlashrom_IsBusy(void); s32 SysFlashrom_AwaitResult(void); void SysFlashrom_WriteDataSync(void* addr, u32 pageNum, u32 pageCount); -s32 func_80185F90(u32 param_1); +s32 func_80185F90(u32 arg0); + u32 osFlashGetAddr(u32 pageNum); OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start); void osFlashChange(u32 flashNum); diff --git a/include/z64.h b/include/z64.h index b5597f58c..a83001a01 100644 --- a/include/z64.h +++ b/include/z64.h @@ -273,45 +273,45 @@ typedef struct { /* 0x00 */ u16 unk_0; /* 0x02 */ u16 sceneTimeSpeed; /* 0x04 */ Vec3f sunPos; - /* 0x10 */ u8 unk_10; - /* 0x11 */ u8 unk_11; + /* 0x10 */ u8 skybox1Index; + /* 0x11 */ u8 skybox2Index; /* 0x12 */ u8 unk_12; - /* 0x13 */ u8 unk_13; + /* 0x13 */ u8 skyboxBlend; /* 0x14 */ u8 unk_14; /* 0x15 */ u8 skyboxDisabled; /* 0x16 */ u8 sunMoonDisabled; - /* 0x17 */ u8 unk_17; - /* 0x18 */ u8 unk_18; - /* 0x19 */ u8 unk_19; - /* 0x1A */ u16 unk_1A; + /* 0x17 */ u8 skyboxConfig; + /* 0x18 */ u8 changeSkyboxNextConfig; + /* 0x19 */ u8 changeSkyboxState; + /* 0x1A */ u16 changeSkyboxTimer; /* 0x1C */ u16 unk_1C; - /* 0x1E */ u8 unk_1E; - /* 0x1F */ u8 unk_1F; - /* 0x20 */ u8 unk_20; - /* 0x21 */ u8 unk_21; - /* 0x22 */ u16 unk_22; - /* 0x24 */ u16 unk_24; + /* 0x1E */ u8 lightMode; + /* 0x1F */ u8 lightConfig; + /* 0x20 */ u8 changeLightNextConfig; + /* 0x21 */ u8 changeLightEnabled; + /* 0x22 */ u16 changeLightTimer; + /* 0x24 */ u16 changeDuration; /* 0x26 */ u8 unk_26; /* 0x28 */ LightInfo dirLight1; // sun 1 /* 0x36 */ LightInfo unk_36; // sun 2 - /* 0x44 */ s8 unk_44; - /* 0x48 */ DmaRequest unk_48; - /* 0x68 */ OSMesgQueue unk_68; - /* 0x80 */ OSMesg unk_80; - /* 0x84 */ f32 unk_84; - /* 0x88 */ f32 unk_88; + /* 0x44 */ s8 skyboxDmaState; + /* 0x48 */ DmaRequest dmaRequest; + /* 0x68 */ OSMesgQueue loadQueue; + /* 0x80 */ OSMesg loadMsg; + /* 0x84 */ f32 glareAlpha; + /* 0x88 */ f32 lensFlareAlphaScale; /* 0x8C */ EnvLightSettings lightSettings; /* 0xA8 */ f32 unk_A8; /* 0xAC */ Vec3s windDir; /* 0xB4 */ f32 windSpeed; /* 0xB8 */ u8 numLightSettings; /* 0xBC */ LightSettings* lightSettingsList; - /* 0xC0 */ u8 unk_C0; - /* 0xC1 */ u8 unk_C1; - /* 0xC2 */ u8 unk_C2; + /* 0xC0 */ u8 lightBlendEnabled; + /* 0xC1 */ u8 lightSetting; + /* 0xC2 */ u8 prevLightSetting; /* 0xC3 */ u8 lightSettingOverride; /* 0xC4 */ LightSettings unk_C4; - /* 0xDA */ u16 unk_DA; + /* 0xDA */ u16 lightBlendRateOverride; /* 0xDC */ f32 lightBlend; /* 0xE0 */ u8 unk_E0; /* 0xE1 */ u8 unk_E1; diff --git a/include/z64save.h b/include/z64save.h index fdb99fea0..cea6ffa46 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -10,6 +10,13 @@ struct GameState; struct PlayState; struct FileSelectState; +typedef enum { + /* 0 */ SAVE_AUDIO_STEREO, + /* 1 */ SAVE_AUDIO_MONO, + /* 2 */ SAVE_AUDIO_HEADSET, + /* 3 */ SAVE_AUDIO_SURROUND +} AudioOption; + // TODO: properly name DOWN, RETURN and TOP typedef enum RespawnMode { /* 0 */ RESPAWN_MODE_DOWN, // "RESTART_MODE_DOWN" @@ -157,13 +164,13 @@ typedef enum { #define PICTO_PHOTO_COMPRESSED_SIZE (PICTO_PHOTO_SIZE * 5 / 8) typedef struct SramContext { - /* 0x00 */ u8* readBuff; - /* 0x04 */ u8 *saveBuf; + /* 0x00 */ u8* noFlashSaveBuf; // Never allocated memory + /* 0x04 */ u8* saveBuf; /* 0x08 */ char unk_08[4]; /* 0x0C */ s16 status; /* 0x10 */ u32 curPage; /* 0x14 */ u32 numPages; - /* 0x18 */ OSTime unk_18; + /* 0x18 */ OSTime startWriteOsTime; /* 0x20 */ s16 unk_20; /* 0x22 */ s16 unk_22; /* 0x24 */ s16 unk_24; @@ -226,14 +233,14 @@ typedef struct CycleSceneFlags { typedef struct SaveOptions { /* 0x0 */ u16 optionId; // "option_id" /* 0x2 */ u8 language; // "j_n" - /* 0x3 */ s8 audioSetting; // "s_sound" + /* 0x3 */ u8 audioSetting; // "s_sound" /* 0x4 */ u8 languageSetting; // "language" /* 0x5 */ u8 zTargetSetting; // "z_attention", 0: Switch; 1: Hold } SaveOptions; // size = 0x6 typedef struct SavePlayerData { /* 0x00 */ char newf[6]; // "newf" Will always be "ZELDA3 for a valid save - /* 0x06 */ u16 deaths; // "savect" + /* 0x06 */ u16 threeDayResetCount; // "savect" /* 0x08 */ char playerName[8]; // "player_name" /* 0x10 */ s16 healthCapacity; // "max_life" /* 0x12 */ s16 health; // "now_life" @@ -337,11 +344,11 @@ typedef struct SaveContext { /* 0x3DB4 */ f32 entranceSpeed; // "player_wipe_speedF" /* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE" /* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item" - /* 0x3DBB */ u8 unk_3DBB; // "next_walk" + /* 0x3DBB */ u8 retainWeatherMode; // "next_walk" /* 0x3DBC */ s16 dogParams; // OoT leftover. "dog_flag" /* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status" /* 0x3DBF */ u8 showTitleCard; // "name_display" - /* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer" + /* 0x3DC0 */ s16 nayrusLoveTimer; // remnant of OoT, "shield_magic_timer" /* 0x3DC2 */ u8 unk_3DC2; // "pad1" /* 0x3DC8 */ OSTime postmanTimerStopOsTime; // The osTime when the timer stops for the postman minigame. "get_time" /* 0x3DD0 */ u8 timerStates[TIMER_ID_MAX]; // See the `TimerState` enum. "event_fg" @@ -374,13 +381,13 @@ typedef struct SaveContext { /* 0x3F3A */ u16 minigameScore; // "yabusame_total" /* 0x3F3C */ u16 minigameHiddenScore; // "yabusame_out_ct" /* 0x3F3E */ u8 unk_3F3E; // "no_save" - /* 0x3F3F */ u8 unk_3F3F; // "flash_flag" + /* 0x3F3F */ u8 flashSaveAvailable; // "flash_flag" /* 0x3F40 */ SaveOptions options; - /* 0x3F46 */ u16 unk_3F46; // "NottoriBgm" + /* 0x3F46 */ u16 forcedSeqId; // "NottoriBgm" /* 0x3F48 */ u8 cutsceneTransitionControl; // "fade_go" /* 0x3F4A */ u16 nextCutsceneIndex; // "next_daytime" /* 0x3F4C */ u8 cutsceneTrigger; // "doukidemo" - /* 0x3F4D */ u8 unk_3F4D; // "Kenjya_no" + /* 0x3F4D */ u8 chamberCutsceneNum; // remnant of OoT "Kenjya_no" /* 0x3F4E */ u16 nextDayTime; // "next_zelda_time" /* 0x3F50 */ u8 transFadeDuration; // "fade_speed" /* 0x3F51 */ u8 transWipeSpeed; // "wipe_speed" transition related @@ -1575,28 +1582,28 @@ void Sram_InitDebugSave(void); void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx); void Sram_OpenSave(struct FileSelectState* fileSelect, SramContext* sramCtx); void func_8014546C(SramContext* sramCtx); -void func_801457CC(struct FileSelectState* fileSelect, SramContext* sramCtx); -void func_80146580(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum); -void func_80146628(struct FileSelectState* fileSelect2, SramContext* sramCtx); +void func_801457CC(struct GameState* gameState, SramContext* sramCtx); +void Sram_EraseSave(struct FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum); +void Sram_CopySave(struct FileSelectState* fileSelect2, SramContext* sramCtx); void Sram_InitSave(struct FileSelectState* fileSelect2, SramContext* sramCtx); -void func_80146DF8(SramContext* sramCtx); +void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx); void Sram_InitSram(struct GameState* gameState, SramContext* sramCtx); void Sram_Alloc(struct GameState* gameState, SramContext* sramCtx); void Sram_SaveSpecialEnterClockTown(struct PlayState* play); void Sram_SaveSpecialNewDay(struct PlayState* play); -void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages); -void func_80147020(SramContext* sramCtx); -void func_80147068(SramContext* sramCtx); -void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages); -void func_80147150(SramContext* sramCtx); -void func_80147198(SramContext* sramCtx); +void Sram_SetFlashPagesDefault(SramContext* sramCtx, u32 curPage, u32 numPages); +void Sram_StartWriteToFlashDefault(SramContext* sramCtx); +void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx); +void Sram_SetFlashPagesOwlSave(SramContext* sramCtx, s32 curPage, s32 numPages); +void Sram_StartWriteToFlashOwlSave(SramContext* sramCtx); +void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx); -extern s32 D_801C6798[]; +extern u32 gSramSlotOffsets[]; extern u8 gAmmoItems[]; -extern s32 D_801C67C8[]; -extern s32 D_801C67F0[]; -extern s32 D_801C6818[]; -extern s32 D_801C6840[]; -extern s32 D_801C6850[]; +extern s32 gFlashSaveStartPages[]; +extern s32 gFlashSaveNumPages[]; +extern s32 gFlashSpecialSaveNumPages[]; +extern s32 gFlashOwlSaveStartPages[]; +extern s32 gFlashOwlSaveNumPages[]; #endif diff --git a/include/z64scene.h b/include/z64scene.h index 7f48d8740..5505f08e3 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -130,8 +130,8 @@ typedef struct { /* 0x1 */ u8 data1; /* 0x2 */ UNK_TYPE1 pad2[2]; /* 0x4 */ u8 skyboxId; - /* 0x5 */ u8 unk5; - /* 0x6 */ u8 unk6; + /* 0x5 */ u8 skyboxConfig; + /* 0x6 */ u8 envLightMode; } SCmdSkyboxSettings; // size = 0x7 typedef struct { @@ -719,6 +719,8 @@ typedef enum { */ #define ENTRANCE(scene, spawn) ((((ENTR_SCENE_##scene) & 0x7F) << 9) | (((spawn) & 0x1F) << 4)) +#define ENTR_LOAD_OPENING -1 + /* * Entrances used in cutscene destination. Includes scene layer that's immediately applied to `nextCutsceneIndex` and removed. * See `CutsceneScriptEntry.nextEntrance` diff --git a/spec b/spec index 601a46f40..a3cde9e58 100644 --- a/spec +++ b/spec @@ -664,12 +664,15 @@ endseg beginseg name "ovl_file_choose" compress + include "build/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.o" + include "build/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.o" include "build/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.o" - include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.o" include "build/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.o" - include "build/data/ovl_file_choose/ovl_file_choose.data.o" - include "build/data/ovl_file_choose/ovl_file_choose.bss.o" - include "build/data/ovl_file_choose/ovl_file_choose.reloc.o" + #ifdef NON_MATCHING + include "build/src/overlays/gamestates/ovl_file_choose/ovl_file_choose_reloc.o" + #else + include "build/data/ovl_file_choose/ovl_file_choose.reloc.o" + #endif endseg beginseg @@ -8824,7 +8827,8 @@ beginseg name "title_static" compress romalign 0x1000 - include "build/baserom/title_static.o" + include "build/assets/misc/title_static/title_static.o" + number 1 endseg beginseg diff --git a/src/code/graph.c b/src/code/graph.c index bf9067b69..2e104234e 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -2,7 +2,7 @@ #include "buffers.h" #include "system_malloc.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_select/z_select.h" #include "overlays/gamestates/ovl_title/z_title.h" diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c index 0e682231f..46dfe189e 100644 --- a/src/code/z_common_data.c +++ b/src/code/z_common_data.c @@ -8,10 +8,10 @@ void SaveContext_Init(void) { gSaveContext.save.playerForm = 0; gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - gSaveContext.unk_3F46 = NA_BGM_GENERAL_SFX; + gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX; gSaveContext.nextCutsceneIndex = 0xFFEF; gSaveContext.cutsceneTrigger = 0; - gSaveContext.unk_3F4D = 0; + gSaveContext.chamberCutsceneNum = 0; gSaveContext.nextDayTime = 0xFFFF; gSaveContext.skyboxTime = 0; gSaveContext.dogIsLost = true; @@ -19,6 +19,6 @@ void SaveContext_Init(void) { gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; gSaveContext.options.language = 1; - gSaveContext.options.audioSetting = 0; + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.zTargetSetting = 0; } diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 733ec4bc1..00ee877e9 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -171,15 +171,15 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_CLOUDY_SKY: if (isFirstFrame) { - play->envCtx.unk_19 = 1; - play->envCtx.unk_17 = 1; - play->envCtx.unk_18 = 0; - play->envCtx.unk_1A = 0x3C; - play->envCtx.unk_21 = 1; - play->envCtx.unk_1F = 0; - play->envCtx.unk_20 = 1; - play->envCtx.unk_24 = 0x3C; - play->envCtx.unk_22 = play->envCtx.unk_24; + play->envCtx.changeSkyboxState = 1; + play->envCtx.skyboxConfig = 1; + play->envCtx.changeSkyboxNextConfig = 0; + play->envCtx.changeSkyboxTimer = 60; + play->envCtx.changeLightEnabled = true; + play->envCtx.lightConfig = 0; + play->envCtx.changeLightNextConfig = 1; + play->envCtx.changeDuration = 60; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; } break; @@ -327,8 +327,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) { case CS_MISC_MOON_CRASH_SKYBOX: if (isFirstFrame) { - // skyboxConfig - play->envCtx.unk_17 = 0xD; + play->envCtx.skyboxConfig = 0xD; } break; diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c index 1b82705f5..7336b01f6 100644 --- a/src/code/z_game_dlftbls.c +++ b/src/code/z_game_dlftbls.c @@ -1,6 +1,6 @@ #include "global.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "overlays/gamestates/ovl_select/z_select.h" #include "overlays/gamestates/ovl_title/z_title.h" diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index d0e5e45f2..c3c6819be 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -49,7 +49,7 @@ void GameOver_Update(PlayState* play) { } } - gSaveContext.unk_3DC0 = 2000; + gSaveContext.nayrusLoveTimer = 2000; gSaveContext.save.saveInfo.playerData.tatlTimer = 0; gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index c9bea1669..7226a6719 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -16,14 +16,14 @@ s16 sBeatingHeartsDDEnv[3]; s16 sHeartsDDPrim[2][3]; s16 sHeartsDDEnv[2][3]; -TexturePtr sHeartTextures[] = { +static TexturePtr sHeartTextures[] = { gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, }; -TexturePtr sHeartDDTextures[] = { +static TexturePtr sHeartDDTextures[] = { gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 9672b8804..f8f28f4b8 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -147,7 +147,7 @@ s16 D_801BF97C = 255; f32 D_801BF980 = 1.0f; s32 D_801BF984 = 0; -Gfx sScreenFillSetupDL[] = { +static Gfx sScreenFillSetupDL[] = { gsDPPipeSync(), gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), diff --git a/src/code/z_play.c b/src/code/z_play.c index dade44cf6..dd9b6c561 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -7,7 +7,7 @@ #include "z64view.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_opening/z_opening.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" s32 gDbgCamEnabled = false; @@ -1036,9 +1036,9 @@ void Play_UpdateMain(PlayState* this) { if (this->sramCtx.status != 0) { if (gSaveContext.save.isOwlSave) { - func_80147198(&this->sramCtx); + Sram_UpdateWriteToFlashOwlSave(&this->sramCtx); } else { - func_80147068(&this->sramCtx); + Sram_UpdateWriteToFlashDefault(&this->sramCtx); } } } @@ -1272,8 +1272,8 @@ void Play_DrawMain(PlayState* this) { if ((this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) { if ((this->skyboxId == SKYBOX_NORMAL_SKY) || (this->skyboxId == SKYBOX_3)) { Environment_UpdateSkybox(this->skyboxId, &this->envCtx, &this->skyboxCtx); - Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.unk_13, this->view.eye.x, - this->view.eye.y, this->view.eye.z); + Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.skyboxBlend, + this->view.eye.x, this->view.eye.y, this->view.eye.z); } else if (!this->skyboxCtx.skyboxShouldDraw) { Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x, this->view.eye.y, this->view.eye.z); @@ -2217,7 +2217,7 @@ void Play_Init(GameState* thisx) { if (((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN)) || (gSaveContext.save.cutsceneIndex >= 0xFFF0)) { - gSaveContext.unk_3DC0 = 0; + gSaveContext.nayrusLoveTimer = 0; Magic_Reset(this); gSaveContext.sceneLayer = (gSaveContext.save.cutsceneIndex & 0xF) + 1; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 623db6b24..368b4509e 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -365,8 +365,8 @@ void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex) { // SceneTableEntry Header Command 0x11: Skybox Settings void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd) { play->skyboxId = cmd->skyboxSettings.skyboxId & 3; - play->envCtx.unk_17 = play->envCtx.unk_18 = cmd->skyboxSettings.unk5; - play->envCtx.unk_1E = cmd->skyboxSettings.unk6; + play->envCtx.skyboxConfig = play->envCtx.changeSkyboxNextConfig = cmd->skyboxSettings.skyboxConfig; + play->envCtx.lightMode = cmd->skyboxSettings.envLightMode; Scene_LoadAreaTextures(play, cmd->skyboxSettings.data1); } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index f47a8e201..21bfaf7ef 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1,9 +1,9 @@ #include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" -#include "overlays/gamestates/ovl_file_choose/z_file_choose.h" +#include "overlays/gamestates/ovl_file_choose/z_file_select.h" -void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages); +void Sram_SyncWriteToFlash(SramContext* sramCtx, s32 curPage, s32 numPages); void func_80147314(SramContext* sramCtx, s32 fileNum); void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2); @@ -140,9 +140,21 @@ u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { /* 99 */ 0, }; +// Unused remnant values from OoT. Not the correct sizes in MM. +#define OOT_SAVECONTEXT_SIZE 0x1428 +#define OOT_SLOT_SIZE (OOT_SAVECONTEXT_SIZE + 0x28) +#define OOT_SRAM_HEADER_SIZE 0x10 +#define OOT_SLOT_OFFSET(index) (OOT_SRAM_HEADER_SIZE + 0x10 + (index * OOT_SLOT_SIZE)) + // used in other files -s32 D_801C6798[] = { - 0x00000020, 0x00001470, 0x000028C0, 0x00003D10, 0x00005160, 0x000065B0, +u32 gSramSlotOffsets[] = { + OOT_SLOT_OFFSET(0), + OOT_SLOT_OFFSET(1), + OOT_SLOT_OFFSET(2), + // the latter three saves are backup saves for the former saves (in OoT) + OOT_SLOT_OFFSET(3), + OOT_SLOT_OFFSET(4), + OOT_SLOT_OFFSET(5), }; u8 gAmmoItems[] = { @@ -172,28 +184,89 @@ u8 gAmmoItems[] = { ITEM_NONE, // SLOT_BOTTLE_6 }; -s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380 }; - -s32 D_801C67F0[] = { 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 1, 1 }; - -s32 D_801C6818[] = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 1, 1 }; - -s32 D_801C6840[] = { 0x100, 0x180, 0x200, 0x280 }; - -s32 D_801C6850[] = { 0x80, 0x80, 0x80, 0x80, 0x300, 0x380, 1, 1 }; - -s32 D_801C6870[] = { - sizeof(Save), - sizeof(Save), - sizeof(Save), - sizeof(Save), - offsetof(SaveContext, fileNum), - offsetof(SaveContext, fileNum), - offsetof(SaveContext, fileNum), - offsetof(SaveContext, fileNum), +// Stores flash start page number +s32 gFlashSaveStartPages[] = { + 0, // File 1 New Cycle Save + 0x40, // File 1 New Cycle Save Backup + 0x80, // File 2 New Cycle Save + 0xC0, // File 2 New Cycle Save Backup + 0x100, // File 1 Owl Save + 0x180, // File 1 Owl Save Backup + 0x200, // File 2 Owl Save + 0x280, // File 2 Owl Save Backup + 0x300, // Sram Header (SaveOptions) + 0x380, // Sram Header Backup (SaveOptions) }; -u8 D_801C6890[8] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80 }; +// Flash rom number of pages +s32 gFlashSaveNumPages[] = { + 0x40, // File 1 New Cycle Save + 0x40, // File 1 New Cycle Save Backup + 0x40, // File 2 New Cycle Save + 0x40, // File 2 New Cycle Save Backup + 0x80, // File 1 Owl Save + 0x80, // File 1 Owl Save Backup + 0x80, // File 2 Owl Save + 0x80, // File 2 Owl Save Backup + 1, // Sram Header (SaveOptions) + 1, // Sram Header Backup (SaveOptions) +}; + +// Flash rom number of pages on very first time Player enters South Clock Town from the Clock Tower +s32 gFlashSpecialSaveNumPages[] = { + 0x80, // File 1 New Cycle Save + 0x80, // File 1 New Cycle Save Backup + 0x80, // File 2 New Cycle Save + 0x80, // File 2 New Cycle Save Backup + 0x80, // File 1 Owl Save + 0x80, // File 1 Owl Save Backup + 0x80, // File 2 Owl Save + 0x80, // File 2 Owl Save Backup + 1, // Sram Header (SaveOptions) + 1, // Sram Header Backup (SaveOptions) +}; + +// Owl Save flash rom start page number +s32 gFlashOwlSaveStartPages[] = { + 0x100, // File 1 Owl Save + 0x180, // File 1 Owl Save Backup + 0x200, // File 2 Owl Save + 0x280, // File 2 Owl Save Backup +}; + +// Owl Save flash rom number of pages +s32 gFlashOwlSaveNumPages[] = { + 0x80, // File 1 Owl Save + 0x80, // File 1 Owl Save Backup + 0x80, // File 2 Owl Save + 0x80, // File 2 Owl Save Backup +}; + +// Save Options Sram Header flash rom start page number +s32 gFlashOptionsSaveStartPages[] = { + 0x300, // Sram Header (SaveOptions) + 0x380, // Sram Header Backup (SaveOptions) +}; + +// Save Options Sram Header flash rom number of pages +s32 gFlashOptionsSaveNumPages[] = { + 1, // Sram Header (SaveOptions) + 1, // Sram Header Backup (SaveOptions) +}; + +// Flash rom actual size needed +s32 gFlashSaveSizes[] = { + sizeof(Save), // size = 0x100C - File 1 New Cycle Save + sizeof(Save), // size = 0x100C - File 1 New Cycle Save Backup + sizeof(Save), // size = 0x100C - File 2 New Cycle Save + sizeof(Save), // size = 0x100C - File 2 New Cycle Save Backup + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 1 Owl Save + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 1 Owl Save Backup + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save + offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save Backup +}; + +u8 D_801C6890[8] = { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 }; u16 D_801F6AF0; u8 D_801F6AF2; @@ -245,9 +318,9 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; - gSaveContext.save.saveInfo.playerData.deaths++; - if (gSaveContext.save.saveInfo.playerData.deaths > 999) { - gSaveContext.save.saveInfo.playerData.deaths = 999; + gSaveContext.save.saveInfo.playerData.threeDayResetCount++; + if (gSaveContext.save.saveInfo.playerData.threeDayResetCount > 999) { + gSaveContext.save.saveInfo.playerData.threeDayResetCount = 999; } sceneId = Play_GetOriginalSceneId(play->sceneId); @@ -577,7 +650,7 @@ void Sram_GenerateRandomSaveFields(void) { SavePlayerData sSaveDefaultPlayerData = { { '\0', '\0', '\0', '\0', '\0', '\0' }, // newf - 0, // deaths + 0, // threeDayResetCount { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName " " 0x30, // healthCapacity 0x30, // health @@ -678,7 +751,7 @@ void Sram_InitNewSave(void) { SavePlayerData sSaveDebugPlayerData = { { 'Z', 'E', 'L', 'D', 'A', '3' }, // newf - 0x0000, // deaths + 0, // threeDayResetCount { 0x15, 0x12, 0x17, 0x14, 0x3E, 0x3E, 0x3E, 0x3E }, // playerName "LINK " 0x80, // healthCapacity 0x80, // health @@ -775,7 +848,18 @@ Inventory sSaveDebugInventory = { (1 << QUEST_SONG_SOARING) | (1 << QUEST_SONG_STORMS) | (1 << QUEST_BOMBERS_NOTEBOOK) | (1 << QUEST_SONG_LULLABY_INTRO), // dungeonItems - { 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, + { + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + (1 << DUNGEON_BOSS_KEY) | (1 << DUNGEON_COMPASS) | (1 << DUNGEON_MAP), + }, // dungeonKeys { 8, 8, 8, 8, 8, 8, 8, 8, 8 }, // defenseHearts @@ -851,15 +935,15 @@ void Sram_ResetSaveFromMoonCrash(SramContext* sramCtx) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], - D_801C67F0[gSaveContext.fileNum * 2]) != 0) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSaveNumPages[gSaveContext.fileNum * 2]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2 + 1], + gFlashSaveNumPages[gSaveContext.fileNum * 2 + 1]); } Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], - D_801C67F0[gSaveContext.fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2 + 1], + gFlashSaveNumPages[gSaveContext.fileNum * 2 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } gSaveContext.save.cutsceneIndex = cutsceneIndex; @@ -907,32 +991,34 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { s32 pad1; s32 fileNum; - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); if (gSaveContext.fileNum == 0xFF) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]); - } else if (fileSelect->unk_2446A[gSaveContext.fileNum] != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[0], gFlashSaveNumPages[0]); + } else if (fileSelect->isOwlSave[gSaveContext.fileNum + 2]) { phi_t1 = gSaveContext.fileNum + 2; phi_t1 *= 2; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1], gFlashSaveNumPages[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], + gFlashSaveNumPages[phi_t1 + 1]); } } else { phi_t1 = gSaveContext.fileNum; phi_t1 *= 2; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1], D_801C67F0[phi_t1]) != 0) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1], gFlashSaveNumPages[phi_t1]) != 0) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], + gFlashSaveNumPages[phi_t1 + 1]); } } - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[phi_t1]); if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[phi_t1 + 1], gFlashSaveNumPages[phi_t1 + 1]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[phi_t1]); } } @@ -963,7 +1049,7 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { if (gSaveContext.save.isFirstCycle) { gSaveContext.save.entrance = ENTRANCE(SOUTH_CLOCK_TOWN, 0); gSaveContext.save.day = 0; - gSaveContext.save.time = 0x3FFF; + gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; } else { gSaveContext.save.entrance = ENTRANCE(CUTSCENE, 0); gSaveContext.nextCutsceneIndex = 0; @@ -1028,7 +1114,7 @@ void func_8014546C(SramContext* sramCtx) { gSaveContext.save.saveInfo.checksum = 0; gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); } @@ -1051,7 +1137,7 @@ void func_80145698(SramContext* sramCtx) { gSaveContext.save.saveInfo.checksum = 0; gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); } @@ -1059,31 +1145,21 @@ void func_80145698(SramContext* sramCtx) { // Verifies save and use backup if corrupted? #ifdef NON_EQUIVALENT -void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { - FileSelectState* fileSelect = fileSelect2; +void func_801457CC(GameState* gameState, SramContext* sramCtx) { + FileSelectState* fileSelect = (FileSelectState*)gameState; u16 sp7A; - // u16 sp78; + u16 oldCheckSum; // s2 u16 sp76; - // u16 sp74; - u16 sp6E; //! - // s32 sp68; - // u16 sp66; - u16 phi_s2; //! - u16 sp64; - // s32 sp60; - // s32 sp5C; - // s32 sp58; - // u32 new_var; - u16 phi_s2_3; - // s16 fakevar; + u16 sp64; // sp74? + u16 phi_s2; + u16 phi_s7; + u16 sp6E; + u16 newCheckSum; // v0 + u16 phi_a0; // maskCount - u16 temp_s2; - u16 temp_v0_2; - u16 phi_a0; // maskCount - - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { D_801F6AF0 = gSaveContext.save.time; - D_801F6AF2 = gSaveContext.unk_3F3F; + D_801F6AF2 = gSaveContext.flashSaveAvailable; sp64 = 0; for (sp76 = 0; sp76 < 5; sp76++, sp64 += 2) { @@ -1091,40 +1167,65 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { phi_s2 = false; sp6E = 0; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64])) { + // read main save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]) != 0) { + // main save didn't work sp6E = 1; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + // read backup save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]) != 0) { + // backup save didn't work phi_s2 = true; } } if (sp76 < 2) { - fileSelect->unk_24468[sp76] = 0; + // Non-owl save + // sp76 = 0: main save + // sp76 = 1: backup save + + fileSelect->isOwlSave[sp76] = 0; if (phi_s2) { + // both main save and backup save failed bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); } else { - // Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + + // test checksum of main save + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; - temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); - gSaveContext.save.saveInfo.checksum = temp_s2; + newCheckSum = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]); + gSaveContext.save.saveInfo.checksum = oldCheckSum; - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) { + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != newCheckSum)) { + // checksum didnt match, try backup save sp6E = 1; - if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {} - phi_s2 = false; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') && + (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) { + phi_s2 = false; + } + + // phi_s2 = false; + + // read backup save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]) != 0) { + // backup save didn't work phi_s2 = true; } - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + + // test checksum of backup save + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; + + //! FAKE: (s32)sp64 if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || - (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) { + (oldCheckSum != Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[(s32)sp64]))) { + // backup save didn't work bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); sp6E = 999; @@ -1133,29 +1234,30 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } gSaveContext.save.saveInfo.checksum = 0; + // FAKE: Needed? gSaveContext.save.saveInfo.checksum = - Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed? + Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64 & 0xFFFFFFFF]); for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) { fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A]; } if (!CHECK_NEWF(fileSelect->newf[sp76])) { - fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[sp76] = gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) { - fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; + fileSelect->fileNames[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; } fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity; fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[sp76] = gSaveContext.save.time; - fileSelect->unk_24460[sp76] = gSaveContext.save.day; - fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave; + fileSelect->defenseHearts[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[sp76] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[sp76] = gSaveContext.save.time; + fileSelect->day[sp76] = gSaveContext.save.day; + fileSelect->isOwlSave[sp76] = gSaveContext.save.isOwlSave; fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees; - fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4); + fileSelect->walletUpgrades[sp76] = CUR_UPG_VALUE(UPG_WALLET); for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) { if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) { @@ -1168,90 +1270,106 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } if (sp6E == 1) { + // backup save Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); - } else if (sp6E == 0) { // TODO: == 0? - temp_s2 = gSaveContext.save.saveInfo.checksum; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { - phi_s2_3 = 1; + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSpecialSaveNumPages[sp64]); + } else if (!sp6E) { + // main save + phi_s7 = gSaveContext.save.saveInfo.checksum; + + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]) != 0) { + oldCheckSum = 1; } else { Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - phi_s2_3 = gSaveContext.save.saveInfo.checksum; + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; sp7A = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); } - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || - (phi_s2_3 != temp_s2)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != sp7A) || + (oldCheckSum != phi_s7)) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSpecialSaveNumPages[sp64]); } } } else if (sp76 < 4) { - fileSelect->unk_24468[sp76] = 0; + // Owl Save: + // sp76 = 3: main owl save + // sp76 = 4: backup owl save + fileSelect->isOwlSave[sp76] = 0; - if (!CHECK_NEWF(fileSelect->newf2[(s32)sp76])) { // TODO: Needed? + if (!CHECK_NEWF(fileSelect->newf[sp76 - 2])) { if (phi_s2) { + // both main save and backup save failed bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, - D_801C6870[sp64]); // TODO: Needed? + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); } else { - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + oldCheckSum = gSaveContext.save.saveInfo.checksum; + // test checksum of main save gSaveContext.save.saveInfo.checksum = 0; - temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); - gSaveContext.save.saveInfo.checksum = temp_s2; - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) { + newCheckSum = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]); + gSaveContext.save.saveInfo.checksum = oldCheckSum; + + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != newCheckSum)) { + // checksum didnt match, try backup save sp6E = 1; if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') && (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) { phi_s2 = false; } - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { + // read backup save from flash + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1])) { + // backup save didn't work phi_s2 = true; } - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + + // test checksum of backup save + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; + if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || - (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) { + (oldCheckSum != Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]))) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); sp6E = 999; } } } gSaveContext.save.saveInfo.checksum = 0; + // FAKE: Needed? gSaveContext.save.saveInfo.checksum = - Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed? + Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64 & 0xFFFFFFFF]); for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) { fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A]; } if (!CHECK_NEWF(fileSelect->newf[sp76])) { - fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[sp76] = gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) { - phi_s2 += 0; // TODO: Needed? - fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; + fileSelect->fileNames[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; } fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity; fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[sp76] = gSaveContext.save.time; - fileSelect->unk_24460[sp76] = gSaveContext.save.day; - fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave; + fileSelect->defenseHearts[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[sp76] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[sp76] = gSaveContext.save.time; + fileSelect->day[sp76] = gSaveContext.save.day; + fileSelect->isOwlSave[sp76] = gSaveContext.save.isOwlSave; fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees; - fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4); + fileSelect->walletUpgrades[sp76] = CUR_UPG_VALUE(UPG_WALLET); for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) { if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) { @@ -1264,39 +1382,44 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } if (sp6E == 1) { - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); - } else if (!sp6E) { // TODO: == 0? - temp_s2 = gSaveContext.save.saveInfo.checksum; - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { - phi_s2_3 = 1; + // backup save + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], gFlashSaveNumPages[sp64 + 1]); + } else if (!sp6E) { + // main save + phi_s7 = gSaveContext.save.saveInfo.checksum; + + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1])) { + oldCheckSum = 1; } else { - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - phi_s2_3 = gSaveContext.save.saveInfo.checksum; + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + oldCheckSum = gSaveContext.save.saveInfo.checksum; gSaveContext.save.saveInfo.checksum = 0; - // phi_s2_3 = gSaveContext.save.saveInfo.checksum; - sp7A = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); + sp7A = Sram_CalcChecksum(&gSaveContext, gFlashSaveSizes[sp64]); } - if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || - (phi_s2_3 != temp_s2)) { - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (oldCheckSum != sp7A) || + (oldCheckSum != phi_s7)) { + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashSaveStartPages[sp64], + gFlashSaveNumPages[sp64]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], + gFlashSaveNumPages[sp64 + 1]); } } } else { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); - Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); - func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); + Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, gFlashSaveSizes[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64], gFlashSaveNumPages[sp64]); + Sram_SyncWriteToFlash(sramCtx, gFlashSaveStartPages[sp64 + 1], gFlashSaveNumPages[sp64 + 1]); } } else { if (phi_s2) { gSaveContext.options.optionId = 0xA51D; gSaveContext.options.language = 1; - gSaveContext.options.audioSetting = 0; + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; } else { @@ -1304,7 +1427,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { if (gSaveContext.options.optionId != 0xA51D) { gSaveContext.options.optionId = 0xA51D; gSaveContext.options.language = 1; - gSaveContext.options.audioSetting = 0; + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; gSaveContext.options.languageSetting = 0; gSaveContext.options.zTargetSetting = 0; } @@ -1314,7 +1437,7 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } gSaveContext.options.language = 1; @@ -1323,50 +1446,52 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s") #endif -void func_80146580(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) { +void Sram_EraseSave(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) { FileSelectState* fileSelect = fileSelect2; s32 pad; - if (gSaveContext.unk_3F3F) { - if (fileSelect->unk_2446A[fileNum]) { + if (gSaveContext.flashSaveAvailable) { + if (fileSelect->isOwlSave[fileNum + 2]) { func_80147314(sramCtx, fileNum); - fileSelect->unk_2446A[fileNum] = 0; + fileSelect->isOwlSave[fileNum + 2] = false; } bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } #ifdef NON_MATCHING // v0/v1 -void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { +void Sram_CopySave(FileSelectState* fileSelect2, SramContext* sramCtx) { FileSelectState* fileSelect = fileSelect2; u16 i; s16 maskCount; - if (gSaveContext.unk_3F3F) { - if (fileSelect->unk_2446A[fileSelect->unk_2448E]) { - func_80147414(sramCtx, fileSelect->unk_2448E, fileSelect->fileNum); - fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths; + if (gSaveContext.flashSaveAvailable) { + if (fileSelect->isOwlSave[fileSelect->selectedFileIndex + 2]) { + func_80147414(sramCtx, fileSelect->selectedFileIndex, fileSelect->copyDestFileIndex); + fileSelect->threeDayResetCount[fileSelect->copyDestFileIndex + 2] = + gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { - fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + fileSelect->fileNames[fileSelect->copyDestFileIndex + 2][i] = + gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->unk_24438[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity; - fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_2445C[fileSelect->fileNum] = gSaveContext.save.time; - fileSelect->unk_24464[fileSelect->fileNum] = gSaveContext.save.day; - fileSelect->unk_2446A[fileSelect->fileNum] = gSaveContext.save.isOwlSave; - fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees; - // = CUR_UPG_VALUE(UPG_WALLET); - fileSelect->unk_24476[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; + fileSelect->healthCapacity[fileSelect->copyDestFileIndex + 2] = + gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->defenseHearts[fileSelect->copyDestFileIndex + 2] = + gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.time; + fileSelect->day[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.day; + fileSelect->isOwlSave[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.isOwlSave; + fileSelect->rupees[fileSelect->copyDestFileIndex + 2] = gSaveContext.save.saveInfo.playerData.rupees; + fileSelect->walletUpgrades[fileSelect->copyDestFileIndex + 2] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { @@ -1374,42 +1499,42 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - fileSelect->unk_2447A[fileSelect->fileNum] = maskCount; - fileSelect->unk_2447E[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->maskCount[fileSelect->copyDestFileIndex + 2] = maskCount; + fileSelect->heartPieceCount[fileSelect->copyDestFileIndex + 2] = GET_QUEST_HEART_PIECE_COUNT; } // clear buffer bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // read to buffer - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], - D_801C67F0[fileSelect->unk_2448E * 2]); - + SysFlashrom_ReadData(&sramCtx->saveBuf[0], gFlashSaveStartPages[fileSelect->selectedFileIndex * 2], + gFlashSaveNumPages[fileSelect->selectedFileIndex * 2]); if (1) {} - SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1], - D_801C67F0[fileSelect->unk_2448E * 2 + 1]); + + SysFlashrom_ReadData(&sramCtx->saveBuf[0x2000], gFlashSaveStartPages[fileSelect->selectedFileIndex * 2 + 1], + gFlashSaveNumPages[fileSelect->selectedFileIndex * 2 + 1]); if (1) {} // copy buffer to save context Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[fileSelect->copyDestFileIndex] = + gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { - fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + fileSelect->fileNames[fileSelect->copyDestFileIndex][i] = + gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->healthCapacity[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity; - fileSelect->health[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[fileSelect->fileNum] = gSaveContext.save.time; - fileSelect->unk_24460[fileSelect->fileNum] = gSaveContext.save.day; - fileSelect->unk_24468[fileSelect->fileNum] = gSaveContext.save.isOwlSave; - fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees; - // = CUR_UPG_VALUE(UPG_WALLET); - fileSelect->unk_24474[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; + fileSelect->healthCapacity[fileSelect->copyDestFileIndex] = + gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->defenseHearts[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[fileSelect->copyDestFileIndex] = gSaveContext.save.time; + fileSelect->day[fileSelect->copyDestFileIndex] = gSaveContext.save.day; + fileSelect->isOwlSave[fileSelect->copyDestFileIndex] = gSaveContext.save.isOwlSave; + fileSelect->rupees[fileSelect->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.rupees; + fileSelect->walletUpgrades[fileSelect->copyDestFileIndex] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { @@ -1417,16 +1542,15 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - fileSelect->maskCount[fileSelect->fileNum] = maskCount; - fileSelect->heartPieceCount[fileSelect->fileNum] = - (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->maskCount[fileSelect->copyDestFileIndex] = maskCount; + fileSelect->heartPieceCount[fileSelect->copyDestFileIndex] = GET_QUEST_HEART_PIECE_COUNT; } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } #else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_80146628.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/Sram_CopySave.s") #endif void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { @@ -1435,15 +1559,15 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { FileSelectState* fileSelect = fileSelect2; s16 maskCount; - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { Sram_InitNewSave(); - if (fileSelect->unk_24480 == 0) { + if (fileSelect->buttonIndex == 0) { gSaveContext.save.cutsceneIndex = 0xFFF0; } for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); phi_v0++) { gSaveContext.save.saveInfo.playerData.playerName[phi_v0] = - fileSelect->unk_24414[fileSelect->unk_24480][phi_v0]; + fileSelect->fileNames[fileSelect->buttonIndex][phi_v0]; } gSaveContext.save.saveInfo.playerData.newf[0] = 'Z'; @@ -1459,24 +1583,25 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); i++) { - fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.newf[i]; + fileSelect->newf[fileSelect->buttonIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i]; } - fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.deaths; + fileSelect->threeDayResetCount[fileSelect->buttonIndex] = + gSaveContext.save.saveInfo.playerData.threeDayResetCount; for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { - fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + fileSelect->fileNames[fileSelect->buttonIndex][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.healthCapacity; - fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.health; - fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.defenseHearts; - fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.questItems; - fileSelect->unk_24458[fileSelect->unk_24480] = gSaveContext.save.time; - fileSelect->unk_24460[fileSelect->unk_24480] = gSaveContext.save.day; - fileSelect->unk_24468[fileSelect->unk_24480] = gSaveContext.save.isOwlSave; - fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.rupees; - fileSelect->unk_24474[fileSelect->unk_24480] = CUR_UPG_VALUE(UPG_WALLET); + fileSelect->healthCapacity[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->defenseHearts[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->questItems[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.inventory.questItems; + fileSelect->time[fileSelect->buttonIndex] = gSaveContext.save.time; + fileSelect->day[fileSelect->buttonIndex] = gSaveContext.save.day; + fileSelect->isOwlSave[fileSelect->buttonIndex] = gSaveContext.save.isOwlSave; + fileSelect->rupees[fileSelect->buttonIndex] = gSaveContext.save.saveInfo.playerData.rupees; + fileSelect->walletUpgrades[fileSelect->buttonIndex] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { @@ -1484,17 +1609,19 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - fileSelect->maskCount[fileSelect->unk_24480] = maskCount; - fileSelect->heartPieceCount[fileSelect->unk_24480] = - (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->maskCount[fileSelect->buttonIndex] = maskCount; + fileSelect->heartPieceCount[fileSelect->buttonIndex] = GET_QUEST_HEART_PIECE_COUNT; } gSaveContext.save.time = D_801F6AF0; - gSaveContext.unk_3F3F = D_801F6AF2; + gSaveContext.flashSaveAvailable = D_801F6AF2; } -void func_80146DF8(SramContext* sramCtx) { - if (gSaveContext.unk_3F3F) { +/** + * Write the SaveOptions of SaveContext to the save buffer + */ +void Sram_WriteSaveOptionsToBuffer(SramContext* sramCtx) { + if (gSaveContext.flashSaveAvailable) { // TODO: macros for languages gSaveContext.options.language = 1; Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.options, sizeof(SaveOptions)); @@ -1508,7 +1635,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) { } void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { - if (gSaveContext.unk_3F3F) { + if (gSaveContext.flashSaveAvailable) { sramCtx->saveBuf = THA_AllocTailAlign16(&gameState->heap, SAVE_BUFFER_SIZE); sramCtx->status = 0; } @@ -1517,7 +1644,7 @@ void Sram_Alloc(GameState* gameState, SramContext* sramCtx) { /** * Synchronous flash write */ -void func_80146EBC(SramContext* sramCtx, s32 curPage, s32 numPages) { +void Sram_SyncWriteToFlash(SramContext* sramCtx, s32 curPage, s32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; SysFlashrom_WriteDataSync(sramCtx->saveBuf, curPage, numPages); @@ -1533,8 +1660,8 @@ void Sram_SaveSpecialEnterClockTown(PlayState* play) { gSaveContext.save.isFirstCycle = true; gSaveContext.save.isOwlSave = false; func_80145698(sramCtx); - SysFlashrom_WriteDataSync(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2], - D_801C6818[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(sramCtx->saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSpecialSaveNumPages[gSaveContext.fileNum * 2]); } /** @@ -1555,25 +1682,25 @@ void Sram_SaveSpecialNewDay(PlayState* play) { gSaveContext.save.day = day; gSaveContext.save.time = time; gSaveContext.save.cutsceneIndex = cutsceneIndex; - SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, D_801C67C8[gSaveContext.fileNum * 2], - D_801C67F0[gSaveContext.fileNum * 2]); + SysFlashrom_WriteDataSync(play->sramCtx.saveBuf, gFlashSaveStartPages[gSaveContext.fileNum * 2], + gFlashSaveNumPages[gSaveContext.fileNum * 2]); } -void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages) { +void Sram_SetFlashPagesDefault(SramContext* sramCtx, u32 curPage, u32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; sramCtx->status = 1; } -void func_80147020(SramContext* sramCtx) { +void Sram_StartWriteToFlashDefault(SramContext* sramCtx) { // async flash write SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); - sramCtx->unk_18 = osGetTime(); + sramCtx->startWriteOsTime = osGetTime(); sramCtx->status = 2; } -void func_80147068(SramContext* sramCtx) { +void Sram_UpdateWriteToFlashDefault(SramContext* sramCtx) { if (sramCtx->status == 2) { if (SysFlashrom_IsBusy() != 0) { // if task running if (SysFlashrom_AwaitResult() == 0) { // wait for task done @@ -1584,25 +1711,26 @@ void func_80147068(SramContext* sramCtx) { sramCtx->status = 4; } } - } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->unk_18) >= SECONDS_TO_TIMER(2)) { + } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= SECONDS_TO_TIMER(2)) { + // Finished status is hardcoded to 2 seconds instead of when the task finishes sramCtx->status = 0; } } -void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages) { +void Sram_SetFlashPagesOwlSave(SramContext* sramCtx, s32 curPage, s32 numPages) { sramCtx->curPage = curPage; sramCtx->numPages = numPages; sramCtx->status = 6; } -void func_80147150(SramContext* sramCtx) { +void Sram_StartWriteToFlashOwlSave(SramContext* sramCtx) { SysFlashrom_WriteDataAsync(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); - sramCtx->unk_18 = osGetTime(); + sramCtx->startWriteOsTime = osGetTime(); sramCtx->status = 7; } -void func_80147198(SramContext* sramCtx) { +void Sram_UpdateWriteToFlashOwlSave(SramContext* sramCtx) { if (sramCtx->status == 7) { if (SysFlashrom_IsBusy() != 0) { // Is task running if (SysFlashrom_AwaitResult() == 0) { // Wait for task done @@ -1621,7 +1749,8 @@ void func_80147198(SramContext* sramCtx) { sramCtx->status = 4; } } - } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->unk_18) >= SECONDS_TO_TIMER(2)) { + } else if (OSTIME_TO_TIMER(osGetTime() - sramCtx->startWriteOsTime) >= SECONDS_TO_TIMER(2)) { + // Finished status is hardcoded to 2 seconds instead of when the task finishes sramCtx->status = 0; bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); gSaveContext.save.isOwlSave = false; @@ -1648,8 +1777,9 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) { gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum)); Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, offsetof(SaveContext, fileNum)); - func_80146EBC(sramCtx, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]); - func_80146EBC(sramCtx, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2]); + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[fileNum * 2], gFlashOwlSaveNumPages[fileNum * 2]); + //! Note: should be `gFlashOwlSaveNumPages[fileNum * 2 + 1]`? + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[fileNum * 2 + 1], gFlashOwlSaveNumPages[fileNum * 2]); gSaveContext.save.isOwlSave = true; @@ -1661,6 +1791,7 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) { gSaveContext.save.saveInfo.playerData.newf[5] = '3'; } +// Used by `Sram_CopySave` with `isOwlSave` set void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { s32 pad; @@ -1668,16 +1799,18 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); // Read save file - if (SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]) != 0) { + if (SysFlashrom_ReadData(sramCtx->saveBuf, gFlashOwlSaveStartPages[fileNum * 2], + gFlashOwlSaveNumPages[fileNum * 2]) != 0) { // If failed, read backup save file - SysFlashrom_ReadData(sramCtx->saveBuf, D_801C6840[fileNum * 2 + 1], D_801C6850[fileNum * 2 + 1]); + SysFlashrom_ReadData(sramCtx->saveBuf, gFlashOwlSaveStartPages[fileNum * 2 + 1], + gFlashOwlSaveNumPages[fileNum * 2 + 1]); } // Copy buffer to save context Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum)); - func_80146EBC(sramCtx, D_801C6840[arg2 * 2], D_801C6850[arg2 * 2]); - func_80146EBC(sramCtx, D_801C6840[arg2 * 2 + 1], D_801C6850[arg2 * 2]); + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[arg2 * 2], gFlashOwlSaveNumPages[arg2 * 2]); + Sram_SyncWriteToFlash(sramCtx, gFlashOwlSaveStartPages[arg2 * 2 + 1], gFlashOwlSaveNumPages[arg2 * 2]); } void Sram_nop8014750C(UNK_TYPE4 arg0) { diff --git a/src/code/z_vr_box.c b/src/code/z_vr_box.c index 911e3e757..dd0785d94 100644 --- a/src/code/z_vr_box.c +++ b/src/code/z_vr_box.c @@ -239,7 +239,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) { case SKYBOX_NORMAL_SKY: osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - if (play->envCtx.unk_10 == 0) { + if (play->envCtx.skybox1Index == 0) { // Send a DMA request for the clear sky texture size = SEGMENT_ROM_SIZE(d2_fine_static); @@ -256,7 +256,7 @@ void func_80143324(PlayState* play, SkyboxContext* skyboxCtx, s16 skyboxId) { osRecvMesg(&skyboxCtx->loadQueue, NULL, OS_MESG_BLOCK); osCreateMesgQueue(&skyboxCtx->loadQueue, &skyboxCtx->loadMsg, 1); - if (play->envCtx.unk_11 == 0) { + if (play->envCtx.skybox2Index == 0) { // Send a DMA request for the clear sky texture size = SEGMENT_ROM_SIZE(d2_fine_static); diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c index 767d4c827..33c6eed8f 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -74,8 +74,8 @@ void DmChar01_Init(Actor* thisx, PlayState* play) { } if (gSaveContext.sceneLayer == 0) { - play->envCtx.unk_1F = 5; - play->envCtx.unk_20 = 5; + play->envCtx.lightConfig = 5; + play->envCtx.changeLightNextConfig = 5; } this->unk_348 = 255.0f; diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 36415d7db..01a5b8c82 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1129,8 +1129,8 @@ void DmStk_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) { - play->envCtx.unk_17 = 15; - play->envCtx.unk_18 = 15; + play->envCtx.skyboxConfig = 15; + play->envCtx.changeSkyboxNextConfig = 15; } } @@ -1826,8 +1826,8 @@ void DmStk_Update(Actor* thisx, PlayState* play) { } if ((play->sceneId == SCENE_00KEIKOKU) && (gSaveContext.sceneLayer == 3) && (play->csCtx.scriptIndex > 0)) { - play->envCtx.unk_17 = 15; - play->envCtx.unk_18 = 15; + play->envCtx.skyboxConfig = 15; + play->envCtx.changeSkyboxNextConfig = 15; } } diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index 9b196c2fc..ed3fe65b9 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -191,7 +191,7 @@ void EnHoll_VisibleIdle(EnHoll* this, PlayState* play) { } } else if (this->type == EN_HOLL_TYPE_SCENE_CHANGER) { play->nextEntrance = play->setupExitList[EN_HOLL_GET_EXIT_LIST_INDEX(&this->actor)]; - gSaveContext.unk_3DBB = 1; + gSaveContext.retainWeatherMode = true; Scene_SetExitFade(play); play->transitionTrigger = TRANS_TRIGGER_START; play->unk_1878C(play); diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c index 34551dac9..79bee615a 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -78,8 +78,8 @@ void func_8089F014(EnViewer* this, PlayState* play, f32 arg2) { } play->envCtx.lightSettingOverride = 0; play->envCtx.unk_E0 = 2; - play->envCtx.unk_C1 = this->actor.world.rot.x; - play->envCtx.unk_C2 = this->actor.world.rot.z; + play->envCtx.lightSetting = this->actor.world.rot.x; + play->envCtx.prevLightSetting = this->actor.world.rot.z; play->envCtx.lightBlend = arg2; } @@ -94,7 +94,7 @@ void func_8089F0A0(EnViewer* this, PlayState* play) { func_800FAAB4( play, SurfaceType_GetLightSettingIndex(&play->colCtx, player->actor.floorPoly, player->actor.floorBgId)); play->envCtx.lightBlend = 1.0f; - play->envCtx.unk_C2 = play->envCtx.unk_C1; + play->envCtx.prevLightSetting = play->envCtx.lightSetting; } } diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index 10be4ec3c..84f621915 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -99,8 +99,8 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { case WEATHERTAG_TYPE_UNK5: func_800BC154(play, &play->actorCtx, &this->actor, 7); play->skyboxId = SKYBOX_3; - play->envCtx.unk_1F = 5; - play->envCtx.unk_20 = 5; + play->envCtx.lightConfig = 5; + play->envCtx.changeLightNextConfig = 5; D_801F4E74 = 1.0f; EnWeatherTag_SetupAction(this, func_80966BF4); break; @@ -124,25 +124,26 @@ void EnWeatherTag_Init(Actor* thisx, PlayState* play) { // matches but unused params is suspicious // called WeatherTag_CheckEnableWeatherEffect in OOT, that's where "weatherMode" came from -u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 new1F, u8 new20, u16 new24, - u8 weatherMode) { +u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 lightConfig, + u8 changeLightNextConfig, u16 changeDuration, u8 weatherMode) { Player* player = GET_PLAYER(play); u8 returnVal = 0; if (WEATHER_TAG_RANGE100(&this->actor) > Actor_WorldDistXZToActor(&player->actor, &this->actor)) { - if (play->envCtx.unk_1F == play->envCtx.unk_20) { + if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { D_801BDBB8 = 1; - if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) { + if (!(play->envCtx.lightMode == 0) || + ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { D_801BDBB8 = 0; if (gWeatherMode != weatherMode) { gWeatherMode = weatherMode; - play->envCtx.unk_21 = 1; - play->envCtx.unk_1F = new1F; - play->envCtx.unk_20 = new20; - D_801BDBB4 = new20; - play->envCtx.unk_24 = new24; - play->envCtx.unk_22 = play->envCtx.unk_24; + play->envCtx.changeLightEnabled = true; + play->envCtx.lightConfig = lightConfig; + play->envCtx.changeLightNextConfig = changeLightNextConfig; + D_801BDBB4 = changeLightNextConfig; + play->envCtx.changeDuration = changeDuration; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; } returnVal = 1; } @@ -153,23 +154,25 @@ u8 func_80966608(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, // again with the unused parameters // called WeatherTag_CheckRestoreWeather in OOT -u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 new1F, u8 new20, u16 new24) { +u8 func_80966758(EnWeatherTag* this, PlayState* play, UNK_TYPE a3, UNK_TYPE a4, u8 lightConfig, + u8 changeLightNextConfig, u16 changeDuration) { Player* player = GET_PLAYER(play); u8 returnVal = 0; if (WEATHER_TAG_RANGE100(&this->actor) < Actor_WorldDistXZToActor(&player->actor, &this->actor)) { - if (play->envCtx.unk_1F == play->envCtx.unk_20) { + if (play->envCtx.lightConfig == play->envCtx.changeLightNextConfig) { D_801BDBB8 = 1; - if (!(play->envCtx.unk_1E == 0) || ((play->envCtx.unk_1F != 1) && (play->envCtx.unk_21 == 0))) { + if (!(play->envCtx.lightMode == 0) || + ((play->envCtx.lightConfig != 1) && !play->envCtx.changeLightEnabled)) { D_801BDBB8 = 0; gWeatherMode = 0; - play->envCtx.unk_21 = 1; - play->envCtx.unk_1F = new1F; - play->envCtx.unk_20 = new20; - D_801BDBB4 = new20; - play->envCtx.unk_24 = new24; - play->envCtx.unk_22 = play->envCtx.unk_24; + play->envCtx.changeLightEnabled = true; + play->envCtx.lightConfig = lightConfig; + play->envCtx.changeLightNextConfig = changeLightNextConfig; + D_801BDBB4 = changeLightNextConfig; + play->envCtx.changeDuration = changeDuration; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; returnVal = 1; } } @@ -240,7 +243,7 @@ void EnWeatherTag_Die(EnWeatherTag* this, PlayState* play) { // poisoned swamp: placed behind the water fall from ikana // this tag stops spawning after STT cleared? void func_80966B08(EnWeatherTag* this, PlayState* play) { - if (func_80966608(this, play, 0, 0, play->envCtx.unk_1F, 5, 100, 2) || (gWeatherMode == 2)) { + if (func_80966608(this, play, 0, 0, play->envCtx.lightConfig, 5, 100, 2) || (gWeatherMode == 2)) { play->skyboxId = SKYBOX_3; EnWeatherTag_SetupAction(this, func_80966D20); } else if (D_801F4E74 <= 0.01f) { @@ -253,7 +256,7 @@ void func_80966B08(EnWeatherTag* this, PlayState* play) { // WEATHERTAG_TYPE_UNK5: only one in ikana canyon, corner of cliff right outside of stone tower entrance // because it uses cutsecnes.. is this the clear ikana cutcsene? void func_80966BF4(EnWeatherTag* this, PlayState* play) { - u8 newUnk20; + u8 changeLightNextConfig; CsCmdActorCue* cue; if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_567)) { @@ -263,25 +266,25 @@ void func_80966BF4(EnWeatherTag* this, PlayState* play) { case 0: case 1: default: - - newUnk20 = 0; + changeLightNextConfig = 0; break; + case 2: - newUnk20 = 3; + changeLightNextConfig = 3; break; case 3: - newUnk20 = 4; + changeLightNextConfig = 4; break; } Math_SmoothStepToF(&D_801F4E74, 0.0f, 0.2f, 0.02f, 0.001f); - if (play->envCtx.unk_20 != newUnk20) { - play->envCtx.unk_21 = 1; - play->envCtx.unk_20 = newUnk20; - play->envCtx.unk_24 = 100; - play->envCtx.unk_22 = play->envCtx.unk_24; + if (play->envCtx.changeLightNextConfig != changeLightNextConfig) { + play->envCtx.changeLightEnabled = true; + play->envCtx.changeLightNextConfig = changeLightNextConfig; + play->envCtx.changeDuration = 100; + play->envCtx.changeLightTimer = play->envCtx.changeDuration; } } } diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c index 6431a558b..a17f853df 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -4,6 +4,7 @@ * Description: "Master" instance of grass for unit spawned by Obj_Grass_Unit */ +#include "prevent_bss_reordering.h" #include "z_obj_grass.h" #include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h" #include "objects/gameplay_keep/gameplay_keep.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 5da69099e..41cf34318 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -5734,7 +5734,7 @@ void func_808354A4(PlayState* play, s32 arg1, s32 arg2) { gSaveContext.respawnFlag = -2; } - gSaveContext.unk_3DBB = 1; + gSaveContext.retainWeatherMode = 1; Scene_SetExitFade(play); } @@ -16454,7 +16454,7 @@ void func_8085269C(Player* this, PlayState* play) { (play->msgCtx.ocarinaMode == 0x18) || (play->msgCtx.ocarinaMode == 0x19)) { if (play->msgCtx.ocarinaMode == 0x16) { if (!func_8082DA90(play)) { - if (gSaveContext.save.saveInfo.playerData.deaths == 1) { + if (gSaveContext.save.saveInfo.playerData.threeDayResetCount == 1) { play->nextEntrance = ENTRANCE(CUTSCENE, 1); } else { play->nextEntrance = ENTRANCE(CUTSCENE, 0); diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.h b/src/overlays/gamestates/ovl_file_choose/z_file_choose.h deleted file mode 100644 index f3231ec56..000000000 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef Z64_FILE_CHOOSE_H -#define Z64_FILE_CHOOSE_H - -#include "global.h" - -void FileSelect_Init(GameState* thisx); -void FileSelect_Destroy(GameState* thisx); - -typedef struct FileSelectState { - /* 0x00000 */ GameState state; - /* 0x000A4 */ Vtx* unk_A4; - /* 0x000A8 */ u8* staticSegment; - /* 0x000AC */ u8* parameterSegment; - /* 0x000B0 */ u8* titleSegment; - /* 0x000B8 */ View view; - /* 0x00220 */ SramContext sramCtx; - /* 0x00248 */ SkyboxContext skyboxCtx; - /* 0x00470 */ MessageContext msgCtx; - /* 0x12550 */ Font font; - /* 0x242E0 */ EnvironmentContext envCtx; - /* 0x243E0 */ Vtx* unk_243E0; - /* 0x243E4 */ Vtx* unk_243E4; - /* 0x243E8 */ u8 newf2[2][6]; - /* 0x243F4 */ u8 newf[2][6]; - /* 0x24400 */ UNK_TYPE1 unk_24400[0xC]; - /* 0x2440C */ u16 unk_2440C[2]; - /* 0x24410 */ u16 unk_24410[2]; - /* 0x24414 */ u8 unk_24414[2][8]; // playername - /* 0x24424 */ u8 unk_24424[2][8]; // playername - /* 0x24434 */ s16 healthCapacity[2]; - /* 0x24438 */ u16 unk_24438[2]; - /* 0x2443C */ s16 health[2]; - /* 0x24440 */ u16 unk_24440[2]; - /* 0x24444 */ u32 unk_24444[2]; - /* 0x2444C */ u32 unk_2444C[2]; - /* 0x24454 */ s8 unk_24454[2]; - /* 0x24456 */ u8 unk_24456[2]; - /* 0x24458 */ u16 unk_24458[2]; - /* 0x2445C */ u16 unk_2445C[2]; - /* 0x24460 */ s16 unk_24460[2]; - /* 0x24464 */ s16 unk_24464[2]; - /* 0x24468 */ u8 unk_24468[2]; - /* 0x2446A */ u8 unk_2446A[2]; - /* 0x2446C */ s16 rupees[2]; - /* 0x24470 */ s16 unk_24470[2]; - /* 0x24474 */ s8 unk_24474[2]; - /* 0x24476 */ s8 unk_24476[2]; - /* 0x24478 */ s8 maskCount[2]; - /* 0x2447A */ s8 unk_2447A[2]; - /* 0x2447C */ s8 heartPieceCount[2]; - /* 0x2447E */ s8 unk_2447E[2]; - /* 0x24480 */ s16 unk_24480; - /* 0x24482 */ s16 unk_24482; - /* 0x24484 */ s16 unk_24484; - /* 0x24486 */ s16 unk_24486; - /* 0x24488 */ s16 unk_24488; - /* 0x2448A */ s16 unk_2448A; - /* 0x2448C */ s16 unk_2448C; - /* 0x2448E */ s16 unk_2448E; - /* 0x24490 */ s16 unk_24490; - /* 0x24492 */ s16 unk_24492[3]; - /* 0x24498 */ s16 unk_24498; - /* 0x2449A */ s16 unk_2449A[6]; - /* 0x244A6 */ s16 fileNum; - /* 0x244A8 */ s16 unk_244A8; - /* 0x244AA */ s16 unk_244AA; - /* 0x244AC */ s16 unk_244AC; - /* 0x244AE */ s16 unk_244AE; - /* 0x244B0 */ s16 unk_244B0[3]; - /* 0x244B6 */ s16 unk_244B6[2]; - /* 0x244BA */ s16 unk_244BA; - /* 0x244BC */ s16 unk_244BC[3]; - /* 0x244C2 */ s16 unk_244C2[3]; - /* 0x244C8 */ s16 unk_244C8[3]; - /* 0x244CE */ s16 unk_244CE[3]; - /* 0x244D4 */ s16 unk_244D4[3]; - /* 0x244DA */ s16 unk_244DA[4]; - /* 0x244E2 */ s16 unk_244E2; - /* 0x244E4 */ s16 unk_244E4; - /* 0x244E6 */ s16 unk_244E6; - /* 0x244E8 */ s16 unk_244E8; - /* 0x244EA */ s16 unk_244EA[4]; - /* 0x244F2 */ s16 unk_244F2; - /* 0x244F4 */ s16 unk_244F4; - /* 0x244F6 */ s16 unk_244F6[2]; - /* 0x244FA */ s16 unk_244FA; - /* 0x244FC */ s16 unk_244FC; - /* 0x244FE */ s16 unk_244FE; - /* 0x24500 */ s16 unk_24500; - /* 0x24502 */ s16 unk_24502; - /* 0x24504 */ s16 unk_24504; - /* 0x24506 */ s16 unk_24506; - /* 0x24508 */ s16 unk_24508; - /* 0x2450A */ s16 unk_2450A; - /* 0x2450C */ f32 unk_2450C; - /* 0x24510 */ s16 unk_24510; - /* 0x24512 */ s16 unk_24512; - /* 0x24514 */ s16 unk_24514; - /* 0x24516 */ s16 unk_24516; - /* 0x24518 */ s16 unk_24518; - /* 0x2451A */ s16 unk_2451A; - /* 0x2451C */ s16 unk_2451C; - /* 0x2451E */ s16 unk_2451E[5]; - /* 0x24528 */ s16 unk_24528; - /* 0x2452A */ s16 unk_2452A; - /* 0x2452C */ s16 unk_2452C[4]; - /* 0x24534 */ s16 unk_24534[4]; - /* 0x2453C */ s16 unk_2453C[4]; - /* 0x24544 */ s16 unk_24544[4]; - /* 0x2454C */ s16 unk_2454C; - /* 0x2454E */ s16 unk_2454E; - /* 0x24550 */ s16 unk_24550; -} FileSelectState; // size = 0x24558 - -#endif diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c deleted file mode 100644 index 2e0e9a0d4..000000000 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_80807940.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * File: z_file_choose_80807940.c - * Overlay: ovl_file_choose - * Description: - */ - -#include "z_file_choose.h" -#include "z64rumble.h" - -extern UNK_TYPE D_01002800; -extern UNK_TYPE D_01007980; -extern UNK_TYPE D_0102A6B0; -extern UNK_TYPE D_0102B170; -extern UNK_TYPE D_010310F0; -extern UNK_TYPE D_010311F0; - -// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file -extern GfxMasterList D_0E000000; - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807940.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807A78.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807C58.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808214.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808D30.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80808F1C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80809DF0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80809EA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A3CC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A418.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A4A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A6BC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080A708.s") - -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BBFC.s") diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c index da9144e7c..0cc43ad50 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose_NES.c @@ -4,96 +4,2545 @@ * Description: */ -#include "z_file_choose.h" +#include "z_file_select.h" +#include "overlays/gamestates/ovl_opening/z_opening.h" #include "z64rumble.h" +#include "z64save.h" #include "z64shrink_window.h" #include "z64view.h" +#include "interface/parameter_static/parameter_static.h" +#include "misc/title_static/title_static.h" -extern UNK_TYPE D_01002800; -extern UNK_TYPE D_01007980; -extern UNK_TYPE D_0102A6B0; -extern UNK_TYPE D_0102B170; -extern UNK_TYPE D_010310F0; -extern UNK_TYPE D_010311F0; +s32 D_808144F10 = 100; +f32 D_808144F14 = 8.0f; +f32 D_808144F18 = 100.0f; +s32 D_808144F1C = 0; -// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file -extern GfxMasterList D_0E000000; +static Gfx sScreenFillSetupDL[] = { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_1PRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPEndDisplayList(), +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BC20.s") +s16 sFileInfoBoxPartWidths[] = { + 36, 36, 36, 36, 24, 28, 28, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_nop8080bc44.s") +s16 sWindowContentColors[] = { 100, 150, 255 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_nop8080BC4C.s") +s16 sFileSelectSkyboxRotation = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BC58.s") +s16 sWalletFirstDigit[] = { + 1, // tens (Default Wallet) + 0, // hundreds (Adult Wallet) + 0, // hundreds (Giant Wallet) +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BDAC.s") +void FileSelect_IncrementConfigMode(FileSelectState* this) { + this->configMode++; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_RenderView.s") +void FileSelect_Noop1(void) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080BE60.s") +void FileSelect_Noop2(FileSelectState* this) { +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C040.s") +void FileSelect_InitModeUpdate(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C228.s") + if (this->configMode == CM_FADE_IN_START) { + if (gSaveContext.options.optionId != 0xA51D) { // Magic number? + this->configMode++; + } else { + this->menuMode = FS_MENU_MODE_CONFIG; + this->configMode = CM_FADE_IN_START; + this->titleLabel = FS_TITLE_SELECT_FILE; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C29C.s") + if (this->configMode == CM_FADE_IN_END) { + this->screenFillAlpha -= 40; + if (this->screenFillAlpha <= 0) { + this->screenFillAlpha = 0; + this->configMode++; // CM_MAIN_MENU + } + } else if (this->configMode == CM_MAIN_MENU) { + FileSelect_IncrementConfigMode(this); // CM_SETUP_COPY_SOURCE + } else { + this->screenFillAlpha += 40; + if (this->screenFillAlpha >= 255) { + this->screenFillAlpha = 255; + this->menuMode = FS_MENU_MODE_CONFIG; + this->configMode = CM_FADE_IN_START; + this->titleLabel = FS_TITLE_SELECT_FILE; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C324.s") +void FileSelect_InitModeDraw(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080C3A8.s") + Gfx_SetupDL39_Opa(this->state.gfxCtx); + FileSelect_Noop2(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D164.s") +void FileSelect_SetView(FileSelectState* this, f32 eyeX, f32 eyeY, f32 eyeZ) { + Vec3f eye; + Vec3f lookAt; + Vec3f up; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D170.s") + eye.x = eyeX; + eye.y = eyeY; + eye.z = eyeZ; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D1BC.s") + lookAt.x = lookAt.y = lookAt.z = 0.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D220.s") + up.x = up.z = 0.0f; + up.y = 1.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D284.s") + View_LookAt(&this->view, &eye, &lookAt, &up); + View_Apply(&this->view, VIEW_ALL | VIEW_FORCE_VIEWING | VIEW_FORCE_VIEWPORT | VIEW_FORCE_PROJECTION_PERSPECTIVE); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D2EC.s") +Gfx* FileSelect_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 width, s16 height, s16 point) { + gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D3D0.s") + gSP1Quadrangle(gfx++, point, point + 2, point + 3, point + 1, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D40C.s") + return gfx; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080D6D4.s") +/** + * Fade in the menu window and title label. + * If a file is occupied fade in the name, name box, and connector. + * Fade in the copy erase and options button according to the window alpha. + */ +void FileSelect_FadeInMenuElements(FileSelectState* this) { + SramContext* sramCtx = &this->sramCtx; + s16 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080F25C.s") + this->titleAlpha[FS_TITLE_CUR] += 20; + this->windowAlpha += 16; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808108DC.s") + for (i = 0; i < 3; i++) { + this->fileButtonAlpha[i] = this->windowAlpha; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80811CB8.s") + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->windowAlpha; + this->connectorAlpha[i] += 20; + if (this->connectorAlpha[i] >= 255) { + this->connectorAlpha[i] = 255; + } + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->windowAlpha; + this->connectorAlpha[i] += 20; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812460.s") + if (this->connectorAlpha[i] >= 255) { + this->connectorAlpha[i] = 255; + } + } + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812668.s") + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = this->windowAlpha; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812760.s") +/** + * Converts a numerical value to hundreds-tens-ones digits + */ +void FileSelect_SplitNumber(u16 value, u16* hundreds, u16* tens, u16* ones) { + *hundreds = 0; + *tens = 0; + *ones = value; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812840.s") + do { + if ((*ones - 100) < 0) { + break; + } + (*hundreds)++; + *ones -= 100; + } while (true); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812980.s") + do { + if ((*ones - 10) < 0) { + break; + } + (*tens)++; + *ones -= 10; + } while (true); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812A6C.s") +// Start of Config Mode Update Functions -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812D44.s") +/** + * Reduce the alpha of the black screen fill to create a fade in effect. + * Additionally, slide the window from the right to the center of the screen. + * Update function for `CM_FADE_IN_START` + */ +void FileSelect_StartFadeIn(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812D94.s") + FileSelect_FadeInMenuElements(this); + this->screenFillAlpha -= 40; + this->windowPosX -= 20; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812E94.s") + if (this->windowPosX <= -94) { + this->windowPosX = -94; + this->configMode = CM_FADE_IN_END; + this->screenFillAlpha = 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80812ED0.s") +/** + * Finish fading in the remaining menu elements. + * Fade in the controls text at the bottom of the screen. + * Update function for `CM_FADE_IN_END` + */ +void FileSelect_FinishFadeIn(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_UpdateAndDrawSkybox.s") + this->controlsAlpha += 20; + FileSelect_FadeInMenuElements(this); -void FileSelect_Main(GameState* thisx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Main.s") + if (this->titleAlpha[FS_TITLE_CUR] >= 255) { + this->titleAlpha[FS_TITLE_CUR] = 255; + this->controlsAlpha = 255; + this->windowAlpha = 200; + this->configMode = CM_MAIN_MENU; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80813908.s") +u8 sEmptyName[] = { 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Destroy.s") +/** + * Update the cursor and wait for the player to select a button to change menus accordingly. + * If an empty file is selected, enter the name entry config mode. + * If an occupied file is selected, enter the `Select` menu mode. + * If copy, erase, or options is selected, set config mode accordingly. + * Lastly, set any warning labels if appropriate. + * Update function for `CM_MAIN_MENU` + */ +void FileSelect_UpdateMainMenu(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_Init.s") + if (CHECK_BTN_ALL(input->press.button, BTN_START) || CHECK_BTN_ALL(input->press.button, BTN_A)) { + if (this->buttonIndex <= FS_BTN_MAIN_FILE_3) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->configMode = CM_ROTATE_TO_NAME_ENTRY; + this->kbdButton = FS_KBD_BTN_NONE; + this->charPage = FS_CHAR_PAGE_HIRA; + if (gSaveContext.options.language != 0) { + this->charPage = FS_CHAR_PAGE_ENG; + } + this->kbdX = 0; + this->kbdY = 0; + this->charIndex = 0; + this->charBgAlpha = 0; + this->newFileNameCharCount = 0; + this->nameEntryBoxPosX = 120; + this->nameEntryBoxAlpha = 0; + Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName)); + } else { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->actionTimer = 4; + this->selectMode = SM_FADE_MAIN_TO_SELECT; + this->selectedFileIndex = this->buttonIndex; + this->menuMode = FS_MENU_MODE_SELECT; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->configMode = CM_ROTATE_TO_NAME_ENTRY; + this->kbdButton = FS_KBD_BTN_NONE; + this->charPage = FS_CHAR_PAGE_HIRA; + if (gSaveContext.options.language != 0) { + this->charPage = FS_CHAR_PAGE_ENG; + } + this->kbdX = 0; + this->kbdY = 0; + this->charIndex = 0; + this->charBgAlpha = 0; + this->newFileNameCharCount = 0; + this->nameEntryBoxPosX = 120; + this->nameEntryBoxAlpha = 0; + Lib_MemCpy(&this->fileNames[this->buttonIndex], &sEmptyName, ARRAY_COUNT(sEmptyName)); + } else { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->actionTimer = 4; + this->selectMode = SM_FADE_MAIN_TO_SELECT; + this->selectedFileIndex = this->buttonIndex; + this->menuMode = FS_MENU_MODE_SELECT; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + } + } else if (this->warningLabel == FS_WARNING_NONE) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->prevConfigMode = this->configMode; + + if (this->buttonIndex == FS_BTN_MAIN_COPY) { + this->configMode = CM_SETUP_COPY_SOURCE; + this->nextTitleLabel = FS_TITLE_COPY_FROM; + } else if (this->buttonIndex == FS_BTN_MAIN_ERASE) { + this->configMode = CM_SETUP_ERASE_SELECT; + this->nextTitleLabel = FS_TITLE_ERASE_FILE; + } else { + this->configMode = CM_MAIN_TO_OPTIONS; + this->kbdButton = FS_KBD_BTN_HIRA; + this->kbdX = 0; + this->kbdY = 0; + this->charBgAlpha = 0; + this->newFileNameCharCount = 0; + this->nameEntryBoxPosX = 120; + } + this->actionTimer = 4; + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, sizeof(TitleSetupState)); + } else { + if (ABS_ALT(this->stickAdjY) > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + if (this->stickAdjY > 30) { + this->buttonIndex--; + if (this->buttonIndex == FS_BTN_MAIN_FILE_3) { + this->buttonIndex = FS_BTN_MAIN_FILE_2; + } + if (this->buttonIndex < FS_BTN_MAIN_FILE_1) { + this->buttonIndex = FS_BTN_MAIN_OPTIONS; + } + } else { + this->buttonIndex++; + if (this->buttonIndex == FS_BTN_MAIN_FILE_3) { + this->buttonIndex = FS_BTN_MAIN_COPY; + } + if (this->buttonIndex > FS_BTN_MAIN_OPTIONS) { + this->buttonIndex = FS_BTN_MAIN_FILE_1; + } + } + } + + if (this->buttonIndex == FS_BTN_MAIN_COPY) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && !NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) && + !NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_COPY; + this->emptyFileTextAlpha = 255; + } else if (NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) && + NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_EMPTY_FILES; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else { + if (!SLOT_OCCUPIED(this, 0) && !SLOT_OCCUPIED(this, 1) && !SLOT_OCCUPIED(this, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_COPY; + this->emptyFileTextAlpha = 255; + } else if (SLOT_OCCUPIED(this, 0) && SLOT_OCCUPIED(this, 1) && SLOT_OCCUPIED(this, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_EMPTY_FILES; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } else if (this->buttonIndex == FS_BTN_MAIN_ERASE) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, 0) && !NO_FLASH_SLOT_OCCUPIED(sramCtx, 1) && + !NO_FLASH_SLOT_OCCUPIED(sramCtx, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_ERASE; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else { + if (!SLOT_OCCUPIED(this, 0) && !SLOT_OCCUPIED(this, 1) && !SLOT_OCCUPIED(this, 2)) { + this->warningButtonIndex = this->buttonIndex; + this->warningLabel = FS_WARNING_NO_FILE_ERASE; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } else { + this->warningLabel = FS_WARNING_NONE; + } + } +} + +/** + * Update function for `CM_UNUSED_31` + */ +void FileSelect_UnusedCM31(GameState* thisx) { +} + +/** + * Delay the next config mode from running until `D_80814564` reaches 254. + * Because the timer increments by 2, the delay is 127 frames (assuming the value was not changed by reg editor). + * Unused in the final game, was possibly used for debugging. + * Update function for `CM_UNUSED_DELAY` + */ +void FileSelect_UnusedCMDelay(GameState* thisx) { + static s16 D_80814564 = 0; + FileSelectState* this = (FileSelectState*)thisx; + + D_80814564 += 2; + + if (D_80814564 == 254) { + this->configMode = this->nextConfigMode; + D_80814564 = 0; + } +} + +/** + * Rotate the window from the main menu to the name entry menu. + * Update function for `CM_ROTATE_TO_NAME_ENTRY` + */ +void FileSelect_RotateToNameEntry(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->windowRot += 50.0f; + + if (this->windowRot >= 314.0f) { + this->windowRot = 314.0f; + this->configMode = CM_START_NAME_ENTRY; + } +} + +/** + * Rotate the window from the main menu to the options menu. + * Update function for `CM_MAIN_TO_OPTIONS` + */ +void FileSelect_RotateToOptions(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->windowRot += 50.0f; + + if (this->windowRot >= 314.0f) { + this->windowRot = 314.0f; + this->configMode = CM_START_OPTIONS; + } +} + +/** + * Rotate the window from the options menu to the main menu. + * Update function for `CM_NAME_ENTRY_TO_MAIN` and `CM_OPTIONS_TO_MAIN` + */ +void FileSelect_RotateToMain(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->windowRot += 50.0f; + + if (this->windowRot >= 628.0f) { + this->windowRot = 0.0f; + this->configMode = CM_MAIN_MENU; + } +} + +void (*sConfigModeUpdateFuncs[])(GameState*) = { + // Main Menu + FileSelect_StartFadeIn, // CM_FADE_IN_START + FileSelect_FinishFadeIn, // CM_FADE_IN_END + FileSelect_UpdateMainMenu, // CM_MAIN_MENU + // Copy File + FileSelect_SetupCopySource, // CM_SETUP_COPY_SOURCE + FileSelect_SelectCopySource, // CM_SELECT_COPY_SOURCE + FileSelect_SetupCopyDest1, // CM_SETUP_COPY_DEST_1 + FileSelect_SetupCopyDest2, // CM_SETUP_COPY_DEST_2 + FileSelect_SelectCopyDest, // CM_SELECT_COPY_DEST + FileSelect_ExitToCopySource1, // CM_EXIT_TO_COPY_SOURCE_1 + FileSelect_ExitToCopySource2, // CM_EXIT_TO_COPY_SOURCE_2 + FileSelect_SetupCopyConfirm1, // CM_SETUP_COPY_CONFIRM_1 + FileSelect_SetupCopyConfirm2, // CM_SETUP_COPY_CONFIRM_2 + FileSelect_CopyConfirm, // CM_COPY_CONFIRM + FileSelect_CopyWaitForFlashSave, // CM_COPY_WAIT_FOR_FLASH_SAVE + FileSelect_ReturnToCopyDest, // CM_RETURN_TO_COPY_DEST + FileSelect_CopyAnim1, // CM_COPY_ANIM_1 + FileSelect_CopyAnim2, // CM_COPY_ANIM_2 + FileSelect_CopyAnim3, // CM_COPY_ANIM_3 + FileSelect_CopyAnim4, // CM_COPY_ANIM_4 + FileSelect_CopyAnim5, // CM_COPY_ANIM_5 + FileSelect_ExitCopyToMain, // CM_COPY_RETURN_MAIN + // Erase File + FileSelect_SetupEraseSelect, // CM_SETUP_ERASE_SELECT + FileSelect_EraseSelect, // CM_ERASE_SELECT + FileSelect_SetupEraseConfirm1, // CM_SETUP_ERASE_CONFIRM_1 + FileSelect_SetupEraseConfirm2, // CM_SETUP_ERASE_CONFIRM_2 + FileSelect_EraseConfirm, // CM_ERASE_CONFIRM + FileSelect_ExitToEraseSelect1, // CM_EXIT_TO_ERASE_SELECT_1 + FileSelect_ExitToEraseSelect2, // CM_EXIT_TO_ERASE_SELECT_2 + FileSelect_EraseAnim1, // CM_ERASE_ANIM_1 + FileSelect_EraseWaitForFlashSave, // CM_ERASE_WAIT_FOR_FLASH_SAVE + FileSelect_EraseAnim2, // CM_ERASE_ANIM_2 + FileSelect_EraseAnim3, // CM_ERASE_ANIM_3 + FileSelect_ExitEraseToMain, // CM_EXIT_ERASE_TO_MAIN + FileSelect_UnusedCM31, // CM_UNUSED_31 + // New File Name Entry + FileSelect_RotateToNameEntry, // CM_ROTATE_TO_NAME_ENTRY + FileSelect_StartNameEntry, // CM_START_NAME_ENTRY + FileSelect_UpdateKeyboardCursor, // CM_NAME_ENTRY + FileSelect_NameEntryWaitForFlashSave, // CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE + FileSelect_RotateToMain, // CM_NAME_ENTRY_TO_MAIN + // Options + FileSelect_RotateToOptions, // CM_MAIN_TO_OPTIONS + FileSelect_StartOptions, // CM_START_OPTIONS + FileSelect_UpdateOptionsMenu, // CM_OPTIONS_MENU + FileSelect_OptionsWaitForFlashSave, // CM_OPTIONS_WAIT_FOR_FLASH_SAVE + FileSelect_RotateToMain, // CM_OPTIONS_TO_MAIN + // Possible Debug + FileSelect_UnusedCMDelay, // CM_UNUSED_DELAY +}; + +s16 sCursorAlphaTargets[] = { 70, 200 }; + +/** + * Updates the alpha of the cursor to make it pulsate. + */ +void FileSelect_PulsateCursor(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 alphaStep = + ABS_ALT(this->highlightColor[3] - sCursorAlphaTargets[this->highlightPulseDir]) / this->highlightTimer; + + if (this->highlightColor[3] >= sCursorAlphaTargets[this->highlightPulseDir]) { + this->highlightColor[3] -= alphaStep; + } else { + this->highlightColor[3] += alphaStep; + } + + this->highlightTimer--; + + if (this->highlightTimer == 0) { + this->highlightColor[3] = sCursorAlphaTargets[this->highlightPulseDir]; + this->highlightTimer = 20; + this->highlightPulseDir ^= 1; + } +} + +void FileSelect_ConfigModeUpdate(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + sConfigModeUpdateFuncs[this->configMode](&this->state); +} + +void FileSelect_SetWindowVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s16 j; + s16 x; + s32 tmp; + s32 tmp2; + s32 tmp3; + + this->windowVtx = GRAPH_ALLOC(this->state.gfxCtx, 80 * sizeof(Vtx)); + tmp = this->windowPosX - 90; + + for (x = 0, i = 0; i < 4; i++) { + tmp += 0x40; + tmp2 = (i == 3) ? 0x30 : 0x40; + + for (j = 0, tmp3 = 0x50; j < 5; j++, x += 4, tmp3 -= 0x20) { + this->windowVtx[x].v.ob[0] = this->windowVtx[x + 2].v.ob[0] = tmp; + + this->windowVtx[x + 1].v.ob[0] = this->windowVtx[x + 3].v.ob[0] = tmp2 + tmp; + + this->windowVtx[x].v.ob[1] = this->windowVtx[x + 1].v.ob[1] = tmp3; + + this->windowVtx[x + 2].v.ob[1] = this->windowVtx[x + 3].v.ob[1] = tmp3 - 0x20; + + this->windowVtx[x].v.ob[2] = this->windowVtx[x + 1].v.ob[2] = this->windowVtx[x + 2].v.ob[2] = + this->windowVtx[x + 3].v.ob[2] = 0; + + this->windowVtx[x].v.flag = this->windowVtx[x + 1].v.flag = this->windowVtx[x + 2].v.flag = + this->windowVtx[x + 3].v.flag = 0; + + this->windowVtx[x].v.tc[0] = this->windowVtx[x].v.tc[1] = this->windowVtx[x + 1].v.tc[1] = + this->windowVtx[x + 2].v.tc[0] = 0; + + this->windowVtx[x + 1].v.tc[0] = this->windowVtx[x + 3].v.tc[0] = tmp2 << 5; + + this->windowVtx[x + 2].v.tc[1] = this->windowVtx[x + 3].v.tc[1] = 32 << 5; + + this->windowVtx[x].v.cn[0] = this->windowVtx[x + 2].v.cn[0] = this->windowVtx[x].v.cn[1] = + this->windowVtx[x + 2].v.cn[1] = this->windowVtx[x].v.cn[2] = this->windowVtx[x + 2].v.cn[2] = + this->windowVtx[x + 1].v.cn[0] = this->windowVtx[x + 3].v.cn[0] = this->windowVtx[x + 1].v.cn[1] = + this->windowVtx[x + 3].v.cn[1] = this->windowVtx[x + 1].v.cn[2] = + this->windowVtx[x + 3].v.cn[2] = this->windowVtx[x].v.cn[3] = + this->windowVtx[x + 2].v.cn[3] = this->windowVtx[x + 1].v.cn[3] = + this->windowVtx[x + 3].v.cn[3] = 255; + } + } +} + +s16 D_80814620[] = { 8, 8, 8, 0 }; +s16 D_80814628[] = { 12, 12, 12, 0 }; +s16 D_80814630[] = { 12, 12, 12, 0 }; +s16 D_80814638[] = { + 88, 104, 120, 940, 944, 948, +}; +s16 D_80814644[] = { 88, 104, 120, 944 }; +s16 D_8081464C[] = { 940, 944 }; +s16 D_80814650[] = { 940, 944 }; + +/* + * fileSelect->windowContentVtx[0] -> Title Label (4) + * + * fileSelect->windowContentVtx[4] -> File 1 InfoBox (28) + * fileSelect->windowContentVtx[32] -> File 2 InfoBox (28) + * fileSelect->windowContentVtx[60] -> File 3 InfoBox (28) + * + * ** FILE 1 ** + * + * fileSelect->windowContentVtx[88] -> File Button + * fileSelect->windowContentVtx[92] -> File Name Box + * fileSelect->windowContentVtx[96] -> Connectors + * fileSelect->windowContentVtx[100] -> Blank Button (Owl Save) + * + * ** FILE 2 ** + * + * fileSelect->windowContentVtx[104] -> Repeat of File 1 above + * + * ** FILE 3 ** + * + * fileSelect->windowContentVtx[120] -> Repeat of File 1 above + * + * ** FILE 1 Info ** + * + * fileSelect->windowContentVtx[136] -> File Name (32) + * fileSelect->windowContentVtx[168] -> File Name Shadow (32) + * fileSelect->windowContentVtx[200] -> Rupee Digits (12) + * fileSelect->windowContentVtx[212] -> Rupee Digits Shadow (12) + * fileSelect->windowContentVtx[224] -> Mask Count (8) + * fileSelect->windowContentVtx[232] -> Mask Count Shadow (8) + * fileSelect->windowContentVtx[240] -> Hearts (80) + * fileSelect->windowContentVtx[320] -> Remains (16) + * fileSelect->windowContentVtx[336] -> Rupee Icon (4) + * fileSelect->windowContentVtx[340] -> Heart Piece Count (4) + * fileSelect->windowContentVtx[344] -> Mask Text (8) + * fileSelect->windowContentVtx[352] -> Owl Save Icon (4) + * fileSelect->windowContentVtx[356] -> Day Text (8) + * fileSelect->windowContentVtx[364] -> Time Digits (20) + * fileSelect->windowContentVtx[384] -> Time Digits Shadow (20) + * + * ** FILE 2 Info ** + * + * fileSelect->windowContentVtx[404] -> Repeat of File 1 above + * + * ** FILE 3 Info ** + * + * fileSelect->windowContentVtx[672] -> Repeat of File 1 above + * + * fileSelect->windowContentVtx[940] -> Action buttons (copy/erase/yes/quit) + * fileSelect->windowContentVtx[944] -> Action buttons (copy/erase/yes/quit) + * fileSelect->windowContentVtx[948] -> Option Button + * fileSelect->windowContentVtx[952] -> Highlight over currently selected button + * fileSelect->windowContentVtx[956] -> Warning labels + */ + +#ifdef NON_MATCHING +// regalloc at the beginning is fixed by removing FAKE: labelled code +void FileSelect_SetWindowContentVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + u16 vtxId; + s16 j; + s16 index; + s16 spAC; + s16 i; // a3 + u16 spA4[3]; + u16* ptr; + s32 posY; // sp9C + s32 relPosY; // sp98 + s32 tempPosY; + s32 posX; // s1 + s32 temp_t5; + + this->windowContentVtx = GRAPH_ALLOC(this->state.gfxCtx, 960 * sizeof(Vtx)); + + // Initialize all windowContentVtx + for (vtxId = 0; vtxId < 960; vtxId += 4) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = 0x12C; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 16; + + // y-coord (top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = 0; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 16; + + // z-coordinate + this->windowContentVtx[vtxId + 0].v.ob[2] = this->windowContentVtx[vtxId + 1].v.ob[2] = + this->windowContentVtx[vtxId + 2].v.ob[2] = this->windowContentVtx[vtxId + 3].v.ob[2] = 0; + + //! FAKE: + if (index && index && index) {} + + // flag + this->windowContentVtx[vtxId + 0].v.flag = this->windowContentVtx[vtxId + 1].v.flag = + this->windowContentVtx[vtxId + 2].v.flag = this->windowContentVtx[vtxId + 3].v.flag = 0; + + // texture coordinates + this->windowContentVtx[vtxId + 0].v.tc[0] = this->windowContentVtx[vtxId + 0].v.tc[1] = + this->windowContentVtx[vtxId + 1].v.tc[1] = this->windowContentVtx[vtxId + 2].v.tc[0] = 0; + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 2].v.tc[1] = + this->windowContentVtx[vtxId + 3].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + // alpha + this->windowContentVtx[vtxId + 0].v.cn[0] = this->windowContentVtx[vtxId + 1].v.cn[0] = + this->windowContentVtx[vtxId + 2].v.cn[0] = this->windowContentVtx[vtxId + 3].v.cn[0] = + this->windowContentVtx[vtxId + 0].v.cn[1] = this->windowContentVtx[vtxId + 1].v.cn[1] = + this->windowContentVtx[vtxId + 2].v.cn[1] = this->windowContentVtx[vtxId + 3].v.cn[1] = + this->windowContentVtx[vtxId + 0].v.cn[2] = this->windowContentVtx[vtxId + 1].v.cn[2] = + this->windowContentVtx[vtxId + 2].v.cn[2] = this->windowContentVtx[vtxId + 3].v.cn[2] = + this->windowContentVtx[vtxId + 0].v.cn[3] = this->windowContentVtx[vtxId + 1].v.cn[3] = + this->windowContentVtx[vtxId + 2].v.cn[3] = + this->windowContentVtx[vtxId + 3].v.cn[3] = 255; + } + + /** Title Label **/ + + // x-coord (left) + this->windowContentVtx[0].v.ob[0] = this->windowContentVtx[2].v.ob[0] = this->windowPosX; + // x-coord (right) + this->windowContentVtx[1].v.ob[0] = this->windowContentVtx[3].v.ob[0] = this->windowContentVtx[0].v.ob[0] + 0x80; + // y-coord (top) + this->windowContentVtx[0].v.ob[1] = this->windowContentVtx[1].v.ob[1] = 0x48; + // y-coord (bottom) + this->windowContentVtx[2].v.ob[1] = this->windowContentVtx[3].v.ob[1] = this->windowContentVtx[0].v.ob[1] - 0x10; + // texture coordinates + this->windowContentVtx[1].v.tc[0] = this->windowContentVtx[3].v.tc[0] = 0x1000; + + /** File InfoBox **/ + + // Loop through 3 files + for (vtxId = 4, i = 0; i < 3; i++) { + posX = this->windowPosX - 6; + + // Loop through 7 textures + for (j = 0; j < 7; j++, vtxId += 4) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + sFileInfoBoxPartWidths[j]; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->fileNamesY[i] + 0x2C; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x38; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = + sFileInfoBoxPartWidths[j] << 5; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x700; + + // Update X position + posX += sFileInfoBoxPartWidths[j]; + } + } + + // File Buttons + + posX = this->windowPosX - 6; + posY = 44; + + // Loop through 3 files + for (j = 0; j < 3; j++, vtxId += 16, posY -= 0x10) { + + /* File Button */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + + /* File Name Box */ + + // x-coord (left) + this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = posX + 0x40; + // x-coord (right) + this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] = + this->windowContentVtx[vtxId + 4].v.ob[0] + 0x6C; + + // y-coord(top) + this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] = + this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0xD80; + + /* Connectors */ + + // x-coord (left) + this->windowContentVtx[vtxId + 8].v.ob[0] = this->windowContentVtx[vtxId + 10].v.ob[0] = posX + 0x34; + // x-coord (right) + this->windowContentVtx[vtxId + 9].v.ob[0] = this->windowContentVtx[vtxId + 11].v.ob[0] = + this->windowContentVtx[vtxId + 8].v.ob[0] + 0x18; + + // y-coord(top) + this->windowContentVtx[vtxId + 8].v.ob[1] = this->windowContentVtx[vtxId + 9].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 10].v.ob[1] = this->windowContentVtx[vtxId + 11].v.ob[1] = + this->windowContentVtx[vtxId + 8].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 9].v.tc[0] = this->windowContentVtx[vtxId + 11].v.tc[0] = 0x300; + + /* Blank Button (Owl Save) */ + + // x-coord (left) + this->windowContentVtx[vtxId + 12].v.ob[0] = this->windowContentVtx[vtxId + 14].v.ob[0] = posX + 0xA9; + // x-coord (right) + this->windowContentVtx[vtxId + 13].v.ob[0] = this->windowContentVtx[vtxId + 15].v.ob[0] = + this->windowContentVtx[vtxId + 12].v.ob[0] + 0x34; + + // y-coord(top) + this->windowContentVtx[vtxId + 12].v.ob[1] = this->windowContentVtx[vtxId + 13].v.ob[1] = + this->buttonYOffsets[j] + posY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 14].v.ob[1] = this->windowContentVtx[vtxId + 15].v.ob[1] = + this->windowContentVtx[vtxId + 12].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 13].v.tc[0] = this->windowContentVtx[vtxId + 15].v.tc[0] = 0x680; + } + + posY = 44; + + // Loop through 3 files + for (j = 0; j < 3; j++, posY -= 16) { + if (!gSaveContext.flashSaveAvailable) { + // Should skip vtxId + // vtxId += 268; + continue; + } + + // Account for owl-save offset + + spAC = j; + if (this->isOwlSave[j + 2]) { + spAC = j + 2; + } + + /* File name */ + + posX = this->windowPosX - 6; + + if ((this->configMode == 0x10) && (j == this->copyDestFileIndex)) { + relPosY = this->fileNamesY[j] + 0x2C; + } else if (((this->configMode == 0x11) || (this->configMode == 0x12)) && (j == this->copyDestFileIndex)) { + relPosY = this->buttonYOffsets[j] + posY; + } else { + relPosY = posY + this->buttonYOffsets[j] + this->fileNamesY[j]; + } + + tempPosY = relPosY - 2; + + // Loop through 8 characters of file name + for (i = 0; i < 8; i++, vtxId += 4) { + + index = this->fileNames[j][i]; + + /* File Name */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = + D_80814280[index] + posX + 0x4E; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0xB; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC; + + /* File Name Shadow */ + + // x-coord (left) + this->windowContentVtx[vtxId + 32].v.ob[0] = this->windowContentVtx[vtxId + 34].v.ob[0] = + D_80814280[index] + posX + 0x4F; + // x-coord (right) + this->windowContentVtx[vtxId + 33].v.ob[0] = this->windowContentVtx[vtxId + 35].v.ob[0] = + this->windowContentVtx[vtxId + 32].v.ob[0] + 0xB; + + // y-coord(top) + this->windowContentVtx[vtxId + 32].v.ob[1] = this->windowContentVtx[vtxId + 33].v.ob[1] = tempPosY - 1; + // y-coord (bottom) + this->windowContentVtx[vtxId + 34].v.ob[1] = this->windowContentVtx[vtxId + 35].v.ob[1] = + this->windowContentVtx[vtxId + 32].v.ob[1] - 0xC; + + // Update X position + posX += 10; + } + // Account for the shadow + vtxId += 32; + + /* Rupee Digits */ + + posX = this->windowPosX + 14; + tempPosY = relPosY - 0x18; + + FileSelect_SplitNumber(this->rupees[spAC], &spA4[0], &spA4[1], &spA4[2]); + + index = sWalletFirstDigit[this->walletUpgrades[spAC]]; + + ptr = &spA4[index]; + + for (i = 0; i < 3; i++, vtxId += 4, ptr++) { + + /* Rupee Digits */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = + D_80814280[*ptr] + posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - D_80814630[i]; + + /* Rupee Digits Shadow */ + + // x-coord (left) + this->windowContentVtx[vtxId + 12].v.ob[0] = this->windowContentVtx[vtxId + 14].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 1; + // x-coord (right) + this->windowContentVtx[vtxId + 13].v.ob[0] = this->windowContentVtx[vtxId + 15].v.ob[0] = + this->windowContentVtx[vtxId + 12].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 12].v.ob[1] = this->windowContentVtx[vtxId + 13].v.ob[1] = tempPosY - 1; + // y-coord (bottom) + this->windowContentVtx[vtxId + 14].v.ob[1] = this->windowContentVtx[vtxId + 15].v.ob[1] = + this->windowContentVtx[vtxId + 12].v.ob[1] - D_80814630[i]; + + // Update X position + posX += D_80814620[i]; + } + + // Account for the shadow + vtxId += 12; + + /* Mask Count */ + + posX = this->windowPosX + 42; + tempPosY = relPosY - 0x2A; + + FileSelect_SplitNumber(this->maskCount[spAC], &spA4[0], &spA4[1], &spA4[2]); + + for (i = 1; i < 3; i++, vtxId += 4) { + + /* Mask Count */ + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = + D_80814280[spA4[i]] + posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - D_80814630[i]; + + /* Mask Count Shadow */ + + // x-coord (left) + this->windowContentVtx[vtxId + 8].v.ob[0] = this->windowContentVtx[vtxId + 10].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 1; + // x-coord (right) + this->windowContentVtx[vtxId + 9].v.ob[0] = this->windowContentVtx[vtxId + 11].v.ob[0] = + this->windowContentVtx[vtxId + 8].v.ob[0] + D_80814628[i]; + + // y-coord(top) + this->windowContentVtx[vtxId + 8].v.ob[1] = this->windowContentVtx[vtxId + 9].v.ob[1] = tempPosY - 1; + // y-coord (bottom) + this->windowContentVtx[vtxId + 10].v.ob[1] = this->windowContentVtx[vtxId + 11].v.ob[1] = + this->windowContentVtx[vtxId + 8].v.ob[1] - D_80814630[i]; + + // Update X position + posX += D_80814620[i]; + } + + // Account for the shadow + vtxId += 8; + + /* Hearts */ + + posX = this->windowPosX + 63; + tempPosY = relPosY - 0x10; + + // Loop through 20 hearts + for (i = 0; i < 20; i++, vtxId += 4, posX += 9) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0xA; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xA; + + // New row of hearts next iteration + if (i == 9) { + posX = this->windowPosX + (63 - 9); + tempPosY -= 8; + } + } + + /* Quest Remains */ + + posX = this->windowPosX + 64; + tempPosY = relPosY - 0x20; + + // Loop through 4 Remains + for (i = 0; i < 4; i++, vtxId += 4, posX += 0x18) { + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x14; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x14; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 2].v.tc[1] = + this->windowContentVtx[vtxId + 3].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x400; + } + + /* Rupee Icon */ + + // posX = this->windowPosX - 1; + tempPosY = relPosY - 0x15; + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 1; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x10; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x200; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + vtxId += 4; + + /* Heart Piece Count */ + + // posX = this->windowPosX + 0x27; + tempPosY = relPosY - 0x15; + + // x-coord (left) + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX + 0x27; + // x-coord (right) + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x18; + + // y-coord(top) + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + // y-coord (bottom) + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + // texture coordinates + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x300; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + vtxId += 4; + + /* Mask Text */ + + // posX = this->windowPosX - 10; + tempPosY = relPosY - 0x27; + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 10; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x200; + + this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 1; + + this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] = + this->windowContentVtx[vtxId + 4].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = tempPosY - 1; + + this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] = + this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0x800; + this->windowContentVtx[vtxId + 6].v.tc[1] = this->windowContentVtx[vtxId + 7].v.tc[1] = 0x200; + + vtxId += 8; + + /* Owl Save Icon */ + + posX = this->windowPosX + 0xA3; + + if ((this->configMode == 0x10) && (j == this->copyDestFileIndex)) { + tempPosY = this->fileNamesY[j] + 0x2C; + } else if (((this->configMode == 0x11) || (this->configMode == 0x12)) && (j == this->copyDestFileIndex)) { + tempPosY = this->buttonYOffsets[j] + posY; + } else { + tempPosY = posY + this->buttonYOffsets[j] + this->fileNamesY[j]; + } + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX + 0xE; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x18; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - 2; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x300; + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x180; + + vtxId += 4; + + /* Day Text */ + + for (i = 0; i < 2; i++, vtxId += 4) { + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = 2 + posX + i; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x30; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - i - 0x12; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x18; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x600; + + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x300; + } + + /* Time Digits */ + + posX += 6; + temp_t5 = vtxId; + + for (i = 0; i < 5; i++, vtxId += 4, posX += 8) { + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0xC; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = tempPosY - 0x2A; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0xC; + + this->windowContentVtx[vtxId + 0x14].v.ob[0] = this->windowContentVtx[vtxId + 0x16].v.ob[0] = posX + 1; + + this->windowContentVtx[vtxId + 0x15].v.ob[0] = this->windowContentVtx[vtxId + 0x17].v.ob[0] = + this->windowContentVtx[vtxId + 0x14].v.ob[0] + 0xC; + + this->windowContentVtx[vtxId + 0x14].v.ob[1] = this->windowContentVtx[vtxId + 0x15].v.ob[1] = + tempPosY - 0x2B; + + this->windowContentVtx[vtxId + 0x16].v.ob[1] = this->windowContentVtx[vtxId + 0x17].v.ob[1] = + this->windowContentVtx[vtxId + 0x14].v.ob[1] - 0xC; + } + + // Adjust the colon to the right + this->windowContentVtx[temp_t5 + 8].v.ob[0] = this->windowContentVtx[temp_t5 + 10].v.ob[0] = + this->windowContentVtx[temp_t5 + 8].v.ob[0] + 3; + + this->windowContentVtx[temp_t5 + 9].v.ob[0] = this->windowContentVtx[temp_t5 + 11].v.ob[0] = + this->windowContentVtx[temp_t5 + 8].v.ob[0] + 0xC; + + this->windowContentVtx[temp_t5 + 0x1C].v.ob[0] = this->windowContentVtx[temp_t5 + 0x1E].v.ob[0] = + this->windowContentVtx[temp_t5 + 8].v.ob[0] + 1; + + this->windowContentVtx[temp_t5 + 0x1D].v.ob[0] = this->windowContentVtx[temp_t5 + 0x1F].v.ob[0] = + this->windowContentVtx[temp_t5 + 0x1C].v.ob[0] + 0xC; + + vtxId += 20; + } + + posX = this->windowPosX - 6; + posY = -0xC; + + for (j = 0; j < 2; j++, vtxId += 4, posY -= 0x10) { + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->buttonYOffsets[j + 3] + posY; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + } + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = posX; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x40; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->buttonYOffsets[5] - 0x34; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x800; + + vtxId += 4; + + if (((this->menuMode == FS_MENU_MODE_CONFIG) && (this->configMode >= 2)) || + ((this->menuMode == FS_MENU_MODE_SELECT) && (this->selectMode == 3))) { + if (this->menuMode == FS_MENU_MODE_CONFIG) { + if ((this->configMode == 4) || (this->configMode == 7) || (this->configMode == 0x16)) { + j = D_80814644[this->buttonIndex]; + } else if ((this->configMode == 0x19) || (this->configMode == 0xC)) { + j = D_8081464C[this->buttonIndex]; + } else { + j = D_80814638[this->buttonIndex]; + } + } else { + j = D_80814650[this->confirmButtonIndex]; + } + + this->windowContentVtx[vtxId + 0].v.ob[0] = this->windowContentVtx[vtxId + 2].v.ob[0] = this->windowPosX - 0xA; + + this->windowContentVtx[vtxId + 1].v.ob[0] = this->windowContentVtx[vtxId + 3].v.ob[0] = + this->windowContentVtx[vtxId + 0].v.ob[0] + 0x48; + + this->windowContentVtx[vtxId + 0].v.ob[1] = this->windowContentVtx[vtxId + 1].v.ob[1] = + this->windowContentVtx[j].v.ob[1] + 4; + + this->windowContentVtx[vtxId + 2].v.ob[1] = this->windowContentVtx[vtxId + 3].v.ob[1] = + this->windowContentVtx[vtxId + 0].v.ob[1] - 0x18; + + this->windowContentVtx[vtxId + 1].v.tc[0] = this->windowContentVtx[vtxId + 3].v.tc[0] = 0x900; + + this->windowContentVtx[vtxId + 2].v.tc[1] = this->windowContentVtx[vtxId + 3].v.tc[1] = 0x300; + } + + this->windowContentVtx[vtxId + 4].v.ob[0] = this->windowContentVtx[vtxId + 6].v.ob[0] = this->windowPosX + 0x3A; + + this->windowContentVtx[vtxId + 5].v.ob[0] = this->windowContentVtx[vtxId + 7].v.ob[0] = + this->windowContentVtx[vtxId + 4].v.ob[0] + 0x80; + + this->windowContentVtx[vtxId + 4].v.ob[1] = this->windowContentVtx[vtxId + 5].v.ob[1] = + this->windowContentVtx[D_80814638[this->warningButtonIndex]].v.ob[1]; + + this->windowContentVtx[vtxId + 6].v.ob[1] = this->windowContentVtx[vtxId + 7].v.ob[1] = + this->windowContentVtx[vtxId + 4].v.ob[1] - 0x10; + + this->windowContentVtx[vtxId + 5].v.tc[0] = this->windowContentVtx[vtxId + 7].v.tc[0] = 0x1000; +} +#else +void FileSelect_SetWindowContentVtx(GameState* thisx); +#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/FileSelect_SetWindowContentVtx.s") +#endif + +u16 D_80814654[] = { + 0x88, + 0x194, + 0x2A0, +}; +TexturePtr sFileSelRemainsTextures[] = { + gFileSelOdolwasRemainsTex, + gFileSelGohtsRemainsTex, + gFileSelGyorgsRemainsTex, + gFileSelTwinmoldsRemainsTex, +}; +TexturePtr sFileSelDayENGTextures[] = { + gFileSelFirstDayENGTex, + gFileSelFirstDayENGTex, + gFileSelSecondDayENGTex, + gFileSelFinalDayENGTex, +}; +TexturePtr sFileSelHeartPieceTextures[] = { + gFileSel0QuarterHeartENGTex, + gFileSel1QuarterHeartENGTex, + gFileSel2QuarterHeartENGTex, + gFileSel3QuarterHeartENGTex, +}; +static TexturePtr sHeartTextures[2][5] = { + { + gHeartEmptyTex, + gHeartQuarterTex, + gHeartHalfTex, + gHeartThreeQuarterTex, + gHeartFullTex, + }, + { + gDefenseHeartEmptyTex, + gDefenseHeartQuarterTex, + gDefenseHeartHalfTex, + gDefenseHeartThreeQuarterTex, + gDefenseHeartFullTex, + }, +}; +u8 sHealthToQuarterHeartCount[] = { + 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, +}; +s16 sFileSelRupeePrimColors[3][3] = { + { 200, 255, 100 }, // Default Wallet + { 170, 170, 255 }, // Adult Wallet + { 255, 105, 105 }, // Giant Wallet +}; +s16 sFileSelRupeeEnvColors[3][3] = { + { 0, 80, 0 }, // Default Wallet + { 10, 10, 80 }, // Adult Wallet + { 40, 10, 0 }, // Giant Wallet +}; +static s16 sHeartPrimColors[2][3] = { + { 255, 70, 50 }, + { 200, 0, 0 }, +}; +static s16 sHeartEnvColors[2][3] = { + { 50, 40, 60 }, + { 255, 255, 255 }, +}; + +void FileSelect_DrawFileInfo(GameState* thisx, s16 fileIndex) { + FileSelectState* this = (FileSelectState*)thisx; + Font* font = &this->font; + s16 j; + s16 vtxOffset; + s32 heartType; + s16 i; + s16 sp20C; + s16 health; + s16 timeDigits[5]; + u16 digits[3]; // rupees and mask count + u8 quarterHeartCount; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + + sp20C = fileIndex; + + // draw file name + if (this->nameAlpha[fileIndex] != 0) { + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + (4 * 8)], 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->nameAlpha[fileIndex]); + + for (vtxOffset = 0, i = 0; vtxOffset < (4 * 8); i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, + font->fontBuf + this->fileNames[fileIndex][i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex]], 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->nameAlpha[fileIndex]); + + for (vtxOffset = 0, i = 0; vtxOffset < (4 * 8); i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, + font->fontBuf + this->fileNames[fileIndex][i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + } + + if ((fileIndex == this->selectedFileIndex) || (fileIndex == this->copyDestFileIndex)) { + if (this->isOwlSave[fileIndex + 2]) { + sp20C = fileIndex + 2; + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][0], + sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][1], + sFileSelRupeePrimColors[this->walletUpgrades[sp20C]][2], this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][0], + sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][1], + sFileSelRupeeEnvColors[this->walletUpgrades[sp20C]][2], 255); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xC8], 4, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelRupeeTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x4C], 12, 0); + + FileSelect_SplitNumber((u16)this->rupees[sp20C], &digits[0], &digits[1], &digits[2]); + + for (vtxOffset = 0, i = sWalletFirstDigit[this->walletUpgrades[sp20C]]; i < 3; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + if (this->rupees[sp20C] == gUpgradeCapacities[4][this->walletUpgrades[sp20C]]) { + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 120, 255, 0, this->fileInfoAlpha[fileIndex]); + } else if (this->rupees[sp20C] != 0) { + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 100, 100, 100, this->fileInfoAlpha[fileIndex]); + } + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x40], 12, 0); + + for (vtxOffset = 0, i = sWalletFirstDigit[this->walletUpgrades[sp20C]]; i < 3; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 0, 0, this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xCC], 4, 0); + + POLY_OPA_DISP = FileSelect_DrawTexQuadIA8( + POLY_OPA_DISP, sFileSelHeartPieceTextures[this->heartPieceCount[sp20C]], 0x18, 0x10, (s16)0); + + if (this->defenseHearts[sp20C] == 0) { + heartType = 0; + } else { + heartType = 1; + } + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, sHeartPrimColors[heartType][0], sHeartPrimColors[heartType][1], + sHeartPrimColors[heartType][2], this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, sHeartEnvColors[heartType][0], sHeartEnvColors[heartType][1], + sHeartEnvColors[heartType][2], 255); + + i = this->healthCapacity[sp20C] / 0x10; + + health = this->health[sp20C]; + if (health <= 0x30) { + health = 0x30; + } + + quarterHeartCount = 4; + for (vtxOffset = 0, j = 0; j < i; j++, vtxOffset += 4) { + if (health < 0x10) { + if (health != 0) { + quarterHeartCount = sHealthToQuarterHeartCount[health]; + health = 0; + } else { + quarterHeartCount = 0; + } + } else { + health -= 0x10; + } + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x68 + vtxOffset], 4, 0); + POLY_OPA_DISP = + FileSelect_DrawTexQuadIA8(POLY_OPA_DISP, sHeartTextures[heartType][quarterHeartCount], 0x10, 0x10, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + + for (vtxOffset = 0, j = 0; j < 4; j++, vtxOffset += 4) { + if (this->questItems[sp20C] & gBitFlags[j]) { + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xB8 + vtxOffset], 4, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sFileSelRemainsTextures[j], G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + } + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xD0], 8, 0); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelMASKSENGTex, G_IM_FMT_I, 64, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x60], 8, 0); + + FileSelect_SplitNumber(this->maskCount[sp20C], &digits[0], &digits[1], &digits[2]); + + for (vtxOffset = 0, i = 1; i < 3; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0x58], 8, 0); + + for (vtxOffset = 0, i = 1; i < 3; i++, vtxOffset += 4) { + + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + digits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + } + + if (this->isOwlSave[fileIndex + 2]) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->nameAlpha[fileIndex]); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xD8], 4, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelOwlSaveIconTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 12, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xDC], 8, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, sFileSelDayENGTextures[this->day[sp20C]], G_IM_FMT_I, 48, 24, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + timeDigits[0] = 0; + timeDigits[1] = TIME_TO_MINUTES_F(this->time[sp20C]) / 60.0f; + + while (timeDigits[1] >= 10) { + timeDigits[0]++; + timeDigits[1] -= 10; + } + + timeDigits[3] = 0; + timeDigits[4] = (s32)TIME_TO_MINUTES_F(this->time[sp20C]) % 60; + + while (timeDigits[4] >= 10) { + timeDigits[3]++; + timeDigits[4] -= 10; + } + timeDigits[2] = 0x41; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 0, 0, 0, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xF8], 20, 0); + + for (i = 0, vtxOffset = 0; i < 5; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + timeDigits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + + gDPSetPrimColor(POLY_OPA_DISP++, 0x00, 0x00, 255, 255, 255, this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[D_80814654[fileIndex] + 0xE4], 20, 0); + + for (i = 0, vtxOffset = 0; i < 5; i++, vtxOffset += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + timeDigits[i] * FONT_CHAR_TEX_SIZE, vtxOffset); + } + } + + gDPPipeSync(POLY_OPA_DISP++); + + CLOSE_DISPS(this->state.gfxCtx); +} + +TexturePtr sFileInfoBoxTextures[] = { + gFileSelFileInfoBox0Tex, gFileSelFileInfoBox1Tex, gFileSelFileInfoBox2Tex, gFileSelFileInfoBox3Tex, + gFileSelFileInfoBox4Tex, gFileSelFileExtraInfoBox0Tex, gFileSelFileExtraInfoBox1Tex, +}; + +TexturePtr sTitleLabels[] = { + gFileSelPleaseSelectAFileENGTex, gFileSelOpenThisFileENGTex, gFileSelCopyWhichFileENGTex, + gFileSelCopyToWhichFileENGTex, gFileSelAreYouSureCopyENGTex, gFileSelFileCopiedENGTex, + gFileSelEraseWhichFileENGTex, gFileSelAreYouSureEraseENGTex, gFileSelFileErasedENGTex, +}; + +TexturePtr sWarningLabels[] = { + gFileSelNoFileToCopyENGTex, gFileSelNoFileToEraseENGTex, gFileSelNoEmptyFileENGTex, + gFileSelFileEmptyENGTex, gFileSelFileInUseENGTex, +}; + +TexturePtr sFileButtonTextures[] = { + gFileSelFile1ButtonENGTex, + gFileSelFile2ButtonENGTex, + gFileSelFile3ButtonENGTex, +}; + +TexturePtr sActionButtonTextures[] = { + gFileSelCopyButtonENGTex, + gFileSelEraseButtonENGTex, + gFileSelYesButtonENGTex, + gFileSelQuitButtonENGTex, +}; + +/** + * Draw most window contents including buttons, labels, and icons. + * Does not include anything from the keyboard and settings windows. + */ +void FileSelect_DrawWindowContents(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 fileIndex; + s16 temp; + s16 i; + s16 quadVtxIndex; + + if (1) {} + + OPEN_DISPS(this->state.gfxCtx); + + // draw title label + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[0], 4, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sTitleLabels[this->titleLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + // draw next title label + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_NEXT]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sTitleLabels[this->nextTitleLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + temp = 4; + + gDPPipeSync(POLY_OPA_DISP++); + + // draw file info box (large box when a file is selected) + for (fileIndex = 0; fileIndex < 3; fileIndex++, temp += 28) { + if (fileIndex < 2) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->fileInfoAlpha[fileIndex]); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[temp], 28, 0); + + for (quadVtxIndex = 0, i = 0; i < 7; i++, quadVtxIndex += 4) { + if ((i < 5) || (this->isOwlSave[fileIndex + 2] && (i >= 5))) { + gDPLoadTextureBlock(POLY_OPA_DISP++, sFileInfoBoxTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, + sFileInfoBoxPartWidths[i], 56, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, + 0); + } + } + } + } + + gDPPipeSync(POLY_OPA_DISP++); + + for (i = 0; i < 3; i++, temp += 16) { + if (i < 2) { + // draw file button + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[temp], 16, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->fileButtonAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sFileButtonTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + // draw file name box + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->nameBoxAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelFileNameBoxTex, G_IM_FMT_IA, G_IM_SIZ_16b, 108, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->connectorAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelConnectorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0); + + if (this->isOwlSave[i + 2]) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sWindowContentColors[0], sWindowContentColors[1], + sWindowContentColors[2], this->nameBoxAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelBlankButtonTex, G_IM_FMT_IA, G_IM_SIZ_16b, 52, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 12, 14, 15, 13, 0); + } + } + } + + // draw file info + for (fileIndex = 0; fileIndex < 2; fileIndex++) { + FileSelect_DrawFileInfo(&this->state, fileIndex); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gSPVertex(POLY_OPA_DISP++, &this->windowContentVtx[0x3AC], 20, 0); + + // draw primary action buttons (copy/erase) + for (quadVtxIndex = 0, i = 0; i < 2; i++, quadVtxIndex += 4) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->actionButtonAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sActionButtonTextures[i], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + + // draw confirm buttons (yes/quit) + for (quadVtxIndex = 0, i = FS_BTN_CONFIRM_YES; i <= FS_BTN_CONFIRM_QUIT; i++, quadVtxIndex += 4) { + temp = this->confirmButtonTexIndices[i]; + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->confirmButtonAlpha[i]); + gDPLoadTextureBlock(POLY_OPA_DISP++, sActionButtonTextures[temp], G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, quadVtxIndex, quadVtxIndex + 2, quadVtxIndex + 3, quadVtxIndex + 1, 0); + } + + // draw options button + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->optionButtonAlpha); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelOptionsButtonENGTex, G_IM_FMT_IA, G_IM_SIZ_16b, 64, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0); + + // draw highlight over currently selected button + if (((this->menuMode == FS_MENU_MODE_CONFIG) && + ((this->configMode == CM_MAIN_MENU) || (this->configMode == CM_SELECT_COPY_SOURCE) || + (this->configMode == CM_SELECT_COPY_DEST) || (this->configMode == CM_COPY_CONFIRM) || + (this->configMode == CM_ERASE_SELECT) || (this->configMode == CM_ERASE_CONFIRM))) || + ((this->menuMode == FS_MENU_MODE_SELECT) && (this->selectMode == SM_CONFIRM_FILE))) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->highlightColor[0], this->highlightColor[1], + this->highlightColor[2], this->highlightColor[3]); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelBigButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 72, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 12, 14, 15, 13, 0); + } + + // draw warning labels + if (this->warningLabel > FS_WARNING_NONE) { + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->emptyFileTextAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sWarningLabels[this->warningLabel], G_IM_FMT_IA, G_IM_SIZ_8b, 128, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 16, 18, 19, 17, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_ConfigModeDraw(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + Gfx_SetupDL42_Opa(this->state.gfxCtx); + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + FileSelect_SetWindowVtx(&this->state); + FileSelect_SetWindowContentVtx(&this->state); + + if ((this->configMode != CM_NAME_ENTRY) && (this->configMode != CM_START_NAME_ENTRY)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + + if (this->windowRot != 0) { + Matrix_RotateXFApply(this->windowRot / 100.0f); + } + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_DrawWindowContents(&this->state); + } + + // draw name entry menu + if ((this->configMode >= CM_ROTATE_TO_NAME_ENTRY) && (this->configMode <= CM_NAME_ENTRY_TO_MAIN)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply((this->windowRot - 314.0f) / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_DrawNameEntry(&this->state); + } + + // draw options menu + if ((this->configMode >= CM_MAIN_TO_OPTIONS) && (this->configMode <= CM_OPTIONS_TO_MAIN)) { + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply((this->windowRot - 314.0f) / 100.0f); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_DrawOptions(&this->state); + } + + gDPPipeSync(POLY_OPA_DISP++); + + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + + CLOSE_DISPS(this->state.gfxCtx); +} + +/** + * Fade out the main menu elements to transition to select mode. + * Update function for `SM_FADE_MAIN_TO_SELECT` + */ +void FileSelect_FadeMainToSelect(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] -= 50; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = this->fileButtonAlpha[i]; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameAlpha[i] = this->nameBoxAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] -= 255 / 4; + } + } else { + if (SLOT_OCCUPIED(this, i)) { + this->nameAlpha[i] = this->nameBoxAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] -= 255 / 4; + } + } + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + this->selectMode++; // SM_MOVE_FILE_TO_TOP + this->confirmButtonIndex = FS_BTN_CONFIRM_YES; + } +} + +// Amount to move by to reach the top of the screen +s16 sFileYOffsets[] = { 0, 16, 32 }; + +/** + * Moves the selected file to the top of the window. + * Update function for `SM_MOVE_FILE_TO_TOP` + */ +void FileSelect_MoveSelectedFileToTop(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + + yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex] - sFileYOffsets[this->buttonIndex]) / this->actionTimer; + this->buttonYOffsets[this->buttonIndex] += yStep; + this->actionTimer--; + + if ((this->actionTimer == 0) || (this->buttonYOffsets[this->buttonIndex] == sFileYOffsets[this->buttonIndex])) { + this->buttonYOffsets[FS_BTN_SELECT_YES] = this->buttonYOffsets[FS_BTN_SELECT_QUIT] = -24; + this->actionTimer = 4; + this->selectMode++; // SM_FADE_IN_FILE_INFO + } +} + +/** + * Fade in the file info for the selected file. + * Update function for `SM_FADE_IN_FILE_INFO` + */ +void FileSelect_FadeInFileInfo(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] += 50; + this->nameBoxAlpha[this->buttonIndex] -= 100; + + if (this->nameBoxAlpha[this->buttonIndex] <= 0) { + this->nameBoxAlpha[this->buttonIndex] = 0; + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->fileInfoAlpha[this->buttonIndex] = 200; + this->actionTimer = 4; + this->selectMode++; // SM_CONFIRM_FILE + } + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = + this->fileInfoAlpha[this->buttonIndex]; +} + +/** + * Update the cursor and handle the option that the player picks for confirming the selected file. + * Update function for `SM_CONFIRM_FILE` + */ +void FileSelect_ConfirmFile(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + + if (CHECK_BTN_ALL(input->press.button, BTN_START) || (CHECK_BTN_ALL(input->press.button, BTN_A))) { + if (this->confirmButtonIndex == FS_BTN_CONFIRM_YES) { + Rumble_Request(300.0f, 180, 20, 100); + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->selectMode = SM_FADE_OUT; + func_801A4058(0xF); + } else { // FS_BTN_CONFIRM_QUIT + play_sound(NA_SE_SY_FSEL_CLOSE); + this->selectMode++; // SM_FADE_OUT_FILE_INFO + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + play_sound(NA_SE_SY_FSEL_CLOSE); + this->selectMode++; // SM_FADE_OUT_FILE_INFO + } else if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->confirmButtonIndex ^= 1; + } +} + +/** + * Fade out the file info for the selected file before returning to the main menu. + * Update function for `SM_FADE_OUT_FILE_INFO` + */ +void FileSelect_FadeOutFileInfo(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] -= 200 / 4; + this->nameBoxAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->buttonYOffsets[FS_BTN_SELECT_YES] = this->buttonYOffsets[FS_BTN_SELECT_QUIT] = 0; + this->nameBoxAlpha[this->buttonIndex] = 200; + this->fileInfoAlpha[this->buttonIndex] = 0; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->actionTimer = 4; + this->selectMode++; + } + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = + this->fileInfoAlpha[this->buttonIndex]; +} + +/** + * Move the selected file back to the slot position then go to config mode for the main menu. + * Update function for `SM_MOVE_FILE_TO_SLOT` + */ +void FileSelect_MoveSelectedFileToSlot(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s32 yStep; + s16 i; + + yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex]) / this->actionTimer; + this->buttonYOffsets[this->buttonIndex] -= yStep; + + if (this->buttonYOffsets[this->buttonIndex] <= 0) { + this->buttonYOffsets[this->buttonIndex] = 0; + } + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] += 200 / 4; + + if (this->fileButtonAlpha[i] >= 200) { + this->fileButtonAlpha[i] = 200; + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = this->fileButtonAlpha[i]; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else { + if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->titleLabel = this->nextTitleLabel; + this->actionTimer = 4; + this->menuMode = FS_MENU_MODE_CONFIG; + this->configMode = CM_MAIN_MENU; + this->nextConfigMode = CM_MAIN_MENU; + this->selectMode = SM_FADE_MAIN_TO_SELECT; + } +} + +/** + * Fill the screen with black to fade out. + * Update function for `SM_FADE_OUT` + */ +void FileSelect_FadeOut(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->screenFillAlpha += 40; + + if (this->screenFillAlpha >= 255) { + this->screenFillAlpha = 255; + this->selectMode++; // SM_LOAD_GAME + } +} + +/** + * Load the save for the appropriate file and start the game. + * Update function for `SM_LOAD_GAME` + */ +void FileSelect_LoadGame(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + u16 i; + + gSaveContext.fileNum = this->buttonIndex; + Sram_OpenSave(this, &this->sramCtx); + + gSaveContext.gameMode = GAMEMODE_NORMAL; + + STOP_GAMESTATE(&this->state); + SET_NEXT_GAMESTATE(&this->state, Play_Init, sizeof(PlayState)); + + gSaveContext.respawnFlag = 0; + gSaveContext.respawn[RESPAWN_MODE_DOWN].entrance = ENTR_LOAD_OPENING; + gSaveContext.seqId = (u8)NA_BGM_DISABLED; + gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; + gSaveContext.showTitleCard = true; + gSaveContext.dogParams = 0; + + for (i = 0; i < TIMER_ID_MAX; i++) { + gSaveContext.timerStates[i] = TIMER_STATE_OFF; + } + + gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; + gSaveContext.nayrusLoveTimer = 0; + gSaveContext.healthAccumulator = 0; + gSaveContext.magicFlag = 0; + gSaveContext.forcedSeqId = 0; + gSaveContext.skyboxTime = CLOCK_TIME(0, 0); + gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; + gSaveContext.cutsceneTrigger = 0; + gSaveContext.chamberCutsceneNum = 0; + gSaveContext.nextDayTime = 0xFFFF; + gSaveContext.retainWeatherMode = false; + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; + + gSaveContext.hudVisibilityForceButtonAlphasByStatus = false; + gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE; + gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE; + gSaveContext.hudVisibilityTimer = 0; + + gSaveContext.save.saveInfo.playerData.tatlTimer = 0; +} + +void (*sSelectModeUpdateFuncs[])(GameState*) = { + FileSelect_FadeMainToSelect, // SM_FADE_MAIN_TO_SELECT + FileSelect_MoveSelectedFileToTop, // SM_MOVE_FILE_TO_TOP + FileSelect_FadeInFileInfo, // SM_FADE_IN_FILE_INFO + FileSelect_ConfirmFile, // SM_CONFIRM_FILE + FileSelect_FadeOutFileInfo, // SM_FADE_OUT_FILE_INFO + FileSelect_MoveSelectedFileToSlot, // SM_MOVE_FILE_TO_SLOT + FileSelect_FadeOut, // SM_FADE_OUT + FileSelect_LoadGame, // SM_LOAD_GAME +}; + +void FileSelect_SelectModeUpdate(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + sSelectModeUpdateFuncs[this->selectMode](&this->state); +} + +void FileSelect_SelectModeDraw(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + Gfx_SetupDL42_Opa(this->state.gfxCtx); + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + FileSelect_SetWindowVtx(&this->state); + FileSelect_SetWindowContentVtx(&this->state); + + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->windowAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + Matrix_Translate(0.0f, 0.0f, -93.6f, MTXMODE_NEW); + Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); + Matrix_RotateXFApply(this->windowRot / 100.0f); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[0], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow1DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[32], 32, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow2DL); + + gSPVertex(POLY_OPA_DISP++, &this->windowVtx[64], 16, 0); + gSPDisplayList(POLY_OPA_DISP++, gFileSelWindow3DL); + + FileSelect_DrawWindowContents(&this->state); + gDPPipeSync(POLY_OPA_DISP++); + FileSelect_SetView(this, 0.0f, 0.0f, 64.0f); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_UpdateAndDrawSkybox(FileSelectState* this) { + s32 pad; + f32 eyeX; + f32 eyeY; + f32 eyeZ; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + + eyeX = 1000.0f * Math_CosS(sFileSelectSkyboxRotation) - 1000.0f * Math_SinS(sFileSelectSkyboxRotation); + eyeY = -700.0f; + eyeZ = 1000.0f * Math_SinS(sFileSelectSkyboxRotation) + 1000.0f * Math_CosS(sFileSelectSkyboxRotation); + + FileSelect_SetView(this, eyeX, eyeY, eyeZ); + Skybox_Draw(&this->skyboxCtx, this->state.gfxCtx, SKYBOX_NORMAL_SKY, this->envCtx.skyboxBlend, eyeX, eyeY, eyeZ); + + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + + sFileSelectSkyboxRotation += -0xA; + + CLOSE_DISPS(this->state.gfxCtx); +} + +void (*gFileSelectDrawFuncs[])(GameState*) = { + FileSelect_InitModeDraw, // FS_MENU_MODE_INIT + FileSelect_ConfigModeDraw, // FS_MENU_MODE_CONFIG + FileSelect_SelectModeDraw, // FS_MENU_MODE_SELECT +}; +void (*gFileSelectUpdateFuncs[])(GameState*) = { + FileSelect_InitModeUpdate, // FS_MENU_MODE_INIT + FileSelect_ConfigModeUpdate, // FS_MENU_MODE_CONFIG + FileSelect_SelectModeUpdate, // FS_MENU_MODE_SELECT +}; + +TexturePtr D_808147B4[] = { gFileSelPleaseWaitENGTex, gFileSelDecideCancelENGTex, gFileSelDecideSaveENGTex }; +s16 D_808147C0[] = { 144, 144, 152 }; +s16 D_808147C8[] = { 90, 90, 86 }; + +void FileSelect_Main(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + s32 texIndex; + s32 pad; + + func_8012CF0C(this->state.gfxCtx, 0, 1, 0, 0, 0); + + OPEN_DISPS(this->state.gfxCtx); + + gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment); + gSPSegment(POLY_OPA_DISP++, 0x02, this->parameterSegment); + gSPSegment(POLY_OPA_DISP++, 0x06, this->titleSegment); + + this->stickAdjX = input->rel.stick_x; + this->stickAdjY = input->rel.stick_y; + + if (this->stickAdjX < -30) { + if (this->stickXDir == -1) { + this->inputTimerX--; + if (this->inputTimerX < 0) { + this->inputTimerX = 2; + } else { + this->stickAdjX = 0; + } + } else { + this->inputTimerX = 10; + this->stickXDir = -1; + } + } else if (this->stickAdjX > 30) { + if (this->stickXDir == 1) { + this->inputTimerX--; + if (this->inputTimerX < 0) { + this->inputTimerX = 2; + } else { + this->stickAdjX = 0; + } + } else { + this->inputTimerX = 10; + this->stickXDir = 1; + } + } else { + this->stickXDir = 0; + } + + if (this->stickAdjY < -30) { + if (this->stickYDir == -1) { + this->inputTimerY--; + if (this->inputTimerY < 0) { + this->inputTimerY = 2; + } else { + this->stickAdjY = 0; + } + } else { + this->inputTimerY = 10; + this->stickYDir = -1; + } + } else if (this->stickAdjY > 30) { + if (this->stickYDir == 1) { + this->inputTimerY--; + if (this->inputTimerY < 0) { + this->inputTimerY = 2; + } else { + this->stickAdjY = 0; + } + } else { + this->inputTimerY = 10; + this->stickYDir = 1; + } + } else { + this->stickYDir = 0; + } + + this->emptyFileTextAlpha = 0; + + FileSelect_PulsateCursor(&this->state); + gFileSelectUpdateFuncs[this->menuMode](&this->state); + FileSelect_UpdateAndDrawSkybox(this); + gFileSelectDrawFuncs[this->menuMode](&this->state); + + Gfx_SetupDL39_Opa(this->state.gfxCtx); + + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 255, this->controlsAlpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + if (this->sramCtx.status > 0) { + texIndex = 0; + } else if ((this->configMode >= CM_MAIN_TO_OPTIONS) && (this->configMode <= CM_OPTIONS_TO_MAIN)) { + texIndex = 2; + } else { + texIndex = 1; + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, D_808147B4[texIndex], G_IM_FMT_IA, G_IM_SIZ_8b, D_808147C0[texIndex], 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); + + gSPTextureRectangle(POLY_OPA_DISP++, D_808147C8[texIndex] << 2, 204 << 2, + (D_808147C8[texIndex] + D_808147C0[texIndex]) << 2, (204 + 16) << 2, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(POLY_OPA_DISP++); + gSPDisplayList(POLY_OPA_DISP++, sScreenFillSetupDL); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, this->screenFillAlpha); + gSPDisplayList(POLY_OPA_DISP++, D_0E000000.fillRect); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_InitContext(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + EnvironmentContext* envCtx = &this->envCtx; + + Sram_Alloc(&this->state, &this->sramCtx); + func_801457CC(&this->state, &this->sramCtx); + + this->menuMode = FS_MENU_MODE_INIT; + + this->buttonIndex = this->selectMode = this->selectedFileIndex = this->copyDestFileIndex = + this->confirmButtonIndex = 0; + + this->confirmButtonTexIndices[0] = 2; + this->confirmButtonTexIndices[1] = 3; + this->titleLabel = FS_TITLE_SELECT_FILE; + this->nextTitleLabel = FS_TITLE_OPEN_FILE; + + this->screenFillAlpha = 255; + this->highlightPulseDir = 1; + this->unk_244F4 = 0xC; + this->highlightColor[0] = 155; + this->highlightColor[1] = 255; + this->highlightColor[2] = 255; + this->highlightColor[3] = 70; + this->configMode = CM_FADE_IN_START; + this->windowRot = 0.0f; + + this->stickXDir = this->inputTimerX = 0; + this->stickYDir = this->inputTimerY = 0; + + this->kbdX = this->kbdY = this->charIndex = 0; + + this->kbdButton = FS_KBD_BTN_NONE; + + this->windowColor[0] = 100; + this->windowColor[1] = 150; + this->windowColor[2] = 255; + + this->windowAlpha = this->titleAlpha[FS_TITLE_CUR] = this->titleAlpha[FS_TITLE_NEXT] = this->fileButtonAlpha[0] = + this->fileButtonAlpha[1] = this->fileButtonAlpha[2] = this->nameBoxAlpha[0] = this->nameBoxAlpha[1] = + this->nameBoxAlpha[2] = this->nameAlpha[0] = this->nameAlpha[1] = this->nameAlpha[2] = + this->connectorAlpha[0] = this->connectorAlpha[1] = this->connectorAlpha[2] = this->fileInfoAlpha[0] = + this->fileInfoAlpha[1] = this->fileInfoAlpha[2] = this->actionButtonAlpha[FS_BTN_ACTION_COPY] = + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = this->actionButtonAlpha[2] = + this->actionButtonAlpha[3] = this->optionButtonAlpha = this->nameEntryBoxAlpha = + this->controlsAlpha = this->emptyFileTextAlpha = 0; + + this->windowPosX = 6; + this->actionTimer = 4; + this->warningLabel = FS_WARNING_NONE; + + this->warningButtonIndex = this->buttonYOffsets[0] = this->buttonYOffsets[1] = this->buttonYOffsets[2] = + this->buttonYOffsets[3] = this->buttonYOffsets[4] = this->buttonYOffsets[5] = this->fileNamesY[0] = + this->fileNamesY[1] = this->fileNamesY[2] = 0; + + this->unk_2451E[0] = 0; + this->unk_2451E[1] = 3; + this->unk_2451E[2] = 6; + this->unk_2451E[3] = 8; + this->unk_2451E[4] = 10; + this->highlightTimer = 20; + + ShrinkWindow_Letterbox_SetSizeTarget(0); + + gSaveContext.skyboxTime = 0; + gSaveContext.save.time = 0; + + Skybox_Init(&this->state, &this->skyboxCtx, 1); + R_TIME_SPEED = 10; + + envCtx->changeSkyboxState = 0; + envCtx->changeSkyboxTimer = 0; + envCtx->changeLightEnabled = false; + envCtx->changeLightTimer = 0; + envCtx->skyboxDmaState = 0; + envCtx->skybox1Index = 99; + envCtx->skybox2Index = 99; + envCtx->lightConfig = 0; + envCtx->changeLightNextConfig = 0; + envCtx->lightSetting = 0; + envCtx->skyboxConfig = 2; + envCtx->skyboxDisabled = 0; + envCtx->skyboxBlend = 0; + envCtx->glareAlpha = 0.0f; + envCtx->lensFlareAlphaScale = 0.0f; + + gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED; + gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED; +} + +void FileSelect_Destroy(GameState* this) { + ShrinkWindow_Destroy(); +} + +void FileSelect_Init(GameState* thisx) { + s32 pad; + FileSelectState* this = (FileSelectState*)thisx; + size_t size; + + Game_SetFramerateDivisor(&this->state, 1); + Matrix_Init(&this->state); + ShrinkWindow_Init(); + View_Init(&this->view, this->state.gfxCtx); + this->state.main = FileSelect_Main; + this->state.destroy = FileSelect_Destroy; + FileSelect_InitContext(&this->state); + Font_LoadOrderedFont(&this->font); + + size = SEGMENT_ROM_SIZE(title_static); + this->staticSegment = THA_AllocTailAlign16(&this->state.heap, size); + DmaMgr_SendRequest0(this->staticSegment, SEGMENT_ROM_START(title_static), size); + + size = SEGMENT_ROM_SIZE(parameter_static); + this->parameterSegment = THA_AllocTailAlign16(&this->state.heap, size); + DmaMgr_SendRequest0(this->parameterSegment, SEGMENT_ROM_START(parameter_static), size); + + size = gObjectTable[OBJECT_MAG].vromEnd - gObjectTable[OBJECT_MAG].vromStart; + this->titleSegment = THA_AllocTailAlign16(&this->state.heap, size); + DmaMgr_SendRequest0(this->titleSegment, gObjectTable[OBJECT_MAG].vromStart, size); + + Audio_SetSpec(0xA); + // Setting ioData to 1 and writing it to ioPort 7 will skip the harp intro + Audio_PlaySequenceWithSeqPlayerIO(SEQ_PLAYER_BGM_MAIN, NA_BGM_FILE_SELECT, 0, 7, 1); +} diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c new file mode 100644 index 000000000..7f8e5789c --- /dev/null +++ b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c @@ -0,0 +1,1253 @@ +/* + * File: z_file_copy_erase.c + * Overlay: ovl_file_choose + * Description: Copying and Erasing Files + */ + +#include "z_file_select.h" +#include "z64rumble.h" + +// When choosing a file to copy or erase, the 6 main menu buttons are placed at these offsets +s16 sChooseFileYOffsets[] = { -48, -48, -48, -24, -24, 0 }; + +s16 D_8081424C[3][3] = { + { 0, -48, -48 }, + { -64, 16, -48 }, + { -64, -64, 32 }, +}; + +s16 sEraseDelayTimer = 15; + +/** + * Move buttons into place for the select source screen and fade in the proper labels. + * Update function for `CM_SETUP_COPY_SOURCE` + */ +void FileSelect_SetupCopySource(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + s16 i; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 200 / 4; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 200 / 4; + this->optionButtonAlpha -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = 0; + + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200; + this->titleLabel = this->nextTitleLabel; + + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->configMode++; // CM_SELECT_COPY_SOURCE + } +} + +/** + * Allow the player to select a file to copy or exit back to the main menu. + * Update function for `CM_SELECT_COPY_SOURCE` + */ +void FileSelect_SelectCopySource(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->actionTimer = 4; + this->buttonIndex = FS_BTN_MAIN_COPY; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->configMode = CM_COPY_RETURN_MAIN; + this->warningLabel = FS_WARNING_NONE; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_COPY_DEST_1; + this->nextTitleLabel = FS_TITLE_COPY_TO; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_COPY_DEST_1; + this->nextTitleLabel = FS_TITLE_COPY_TO; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else { + if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + if (this->stickAdjY >= 30) { + this->buttonIndex--; + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_FILE_2; + } + if (this->buttonIndex < FS_BTN_COPY_FILE_1) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + } else { + this->buttonIndex++; + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + if (this->buttonIndex > FS_BTN_COPY_QUIT) { + this->buttonIndex = FS_BTN_COPY_FILE_1; + } + } + } + + if (this->buttonIndex != FS_BTN_COPY_QUIT) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } +} + +/** + * Move the menu buttons into place for the copy destination selection and switch titles. + * Update function for `CM_SETUP_COPY_DEST_1` + */ +void FileSelect_SetupCopyDest1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + s16 i; + + for (i = 0; i < 3; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - D_8081424C[this->buttonIndex][i]) / this->actionTimer; + + if (D_8081424C[this->buttonIndex][i] >= this->buttonYOffsets[i]) { + this->buttonYOffsets[i] += yStep; + } else { + this->buttonYOffsets[i] -= yStep; + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->nameBoxAlpha[this->buttonIndex] -= 200 / 4; + + this->actionTimer--; + if (this->actionTimer == 0) { + this->buttonYOffsets[this->buttonIndex] = D_8081424C[this->buttonIndex][this->buttonIndex]; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->actionTimer = 4; + this->configMode++; // CM_SETUP_COPY_DEST_2 + } +} + +/** + * Show the file info of the file selected to copy from. + * Update function for `CM_SETUP_COPY_DEST_2` + */ +void FileSelect_SetupCopyDest2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->nameBoxAlpha[this->buttonIndex] -= 200 / 4; + this->fileInfoAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->nameBoxAlpha[this->buttonIndex] = 0; + this->fileInfoAlpha[this->buttonIndex] = 200; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->actionTimer = 4; + this->configMode = CM_SELECT_COPY_DEST; + } +} + +/** + * Allow the player to select a slot to copy to or exit to the copy select screen. + * Update function for `CM_SELECT_COPY_DEST` + */ +void FileSelect_SelectCopyDest(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->buttonIndex = this->selectedFileIndex; + this->nextTitleLabel = FS_TITLE_COPY_FROM; + this->actionTimer = 4; + this->configMode = CM_EXIT_TO_COPY_SOURCE_1; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->copyDestFileIndex = this->buttonIndex; + this->nextTitleLabel = FS_TITLE_COPY_CONFIRM; + this->actionTimer = 4; + this->configMode = CM_SETUP_COPY_CONFIRM_1; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + this->copyDestFileIndex = this->buttonIndex; + this->nextTitleLabel = FS_TITLE_COPY_CONFIRM; + this->actionTimer = 4; + this->configMode = CM_SETUP_COPY_CONFIRM_1; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else { + if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + if (this->stickAdjY >= 30) { + this->buttonIndex--; + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_FILE_2; + } + if (this->buttonIndex == this->selectedFileIndex) { + this->buttonIndex--; + if (this->buttonIndex < FS_BTN_COPY_FILE_1) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_FILE_2; + } + } else if (this->buttonIndex < FS_BTN_COPY_FILE_1) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + } else { + this->buttonIndex++; + if (this->buttonIndex > FS_BTN_COPY_QUIT) { + this->buttonIndex = FS_BTN_COPY_FILE_1; + } + if (this->buttonIndex == this->selectedFileIndex) { + this->buttonIndex++; + } + // Instead of removing File 3 entirely, the index is manually adjusted to skip it + if (this->buttonIndex == FS_BTN_COPY_FILE_3) { + this->buttonIndex = FS_BTN_COPY_QUIT; + } + } + } + if (this->buttonIndex != FS_BTN_COPY_QUIT) { + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_IN_USE; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_IN_USE; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } + } +} + +/** + * Fade out file info, bring back the name box, and get ready to return to copy source screen. + * Update function for `CM_EXIT_TO_COPY_SOURCE_1` + */ +void FileSelect_ExitToCopySource1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] -= 200 / 4; + this->nameBoxAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->nextTitleLabel = FS_TITLE_COPY_FROM; + this->nameBoxAlpha[this->buttonIndex] = 200; + this->fileInfoAlpha[this->buttonIndex] = 0; + this->actionTimer = 4; + this->configMode++; // CM_EXIT_TO_COPY_SOURCE_2 + } +} + +/** + * Move the buttons back into place and return to copy source select. + * Update function for `CM_EXIT_TO_COPY_SOURCE_2` + */ +void FileSelect_ExitToCopySource2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 3; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->configMode = CM_SELECT_COPY_SOURCE; + } +} + +s16 D_80814264[] = { -56, -40, -24, 0 }; + +/** + * Rearrange buttons on the screen to prepare for copy confirmation. + * Update function for `CM_SETUP_COPY_CONFIRM_1` + */ +void FileSelect_SetupCopyConfirm1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + + for (i = 0; i < 3; i++) { + if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) { + this->fileButtonAlpha[i] -= 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else if (i == this->copyDestFileIndex) { + yStep = ABS_ALT(this->buttonYOffsets[i] - D_80814264[i]) / this->actionTimer; + this->buttonYOffsets[i] += yStep; + + if (this->buttonYOffsets[i] >= D_80814264[i]) { + this->buttonYOffsets[i] = D_80814264[i]; + } + } + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->actionTimer = 4; + this->configMode++; + } +} + +/** + * Fade in the 'Yes' button before allowing the player to decide. + * Update function for `CM_SETUP_COPY_CONFIRM_2` + */ +void FileSelect_SetupCopyConfirm2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->configMode = CM_COPY_CONFIRM; + this->buttonIndex = FS_BTN_CONFIRM_QUIT; + } +} + +/** + * Allow the player to confirm the copy, or quit back to the destination select. + * If yes is selected, the actual copy occurs in this function before moving on to the animation. + * Update function for `CM_COPY_CONFIRM` + */ +void FileSelect_CopyConfirm(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + u16 dayTime; + + if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_COPY_TO; + this->configMode = CM_RETURN_TO_COPY_DEST; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + dayTime = gSaveContext.save.time; + gSaveContext.save.time = dayTime; + this->nameAlpha[this->copyDestFileIndex] = 0; + this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex]; + this->nextTitleLabel = FS_TITLE_COPY_COMPLETE; + this->actionTimer = 4; + Sram_CopySave(this, sramCtx); + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_COPY_ANIM_1; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->copyDestFileIndex * 2], + gFlashSpecialSaveNumPages[this->copyDestFileIndex * 2]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_COPY_WAIT_FOR_FLASH_SAVE; + } + Rumble_Request(300.0f, 180, 20, 100); + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->buttonIndex ^= 1; + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_COPY_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_CopyWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + u16 i; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_COPY_ANIM_1; + + for (i = 0; i < 6; i++) { + this->newf[this->copyDestFileIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i]; + } + + this->threeDayResetCount[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.threeDayResetCount; + + for (i = 0; i < 8; i++) { + this->fileNames[this->copyDestFileIndex][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; + } + + this->healthCapacity[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.healthCapacity; + this->health[this->copyDestFileIndex] = gSaveContext.save.saveInfo.playerData.health; + this->defenseHearts[this->copyDestFileIndex] = gSaveContext.save.saveInfo.inventory.defenseHearts; + } +} + +/** + * Move buttons back in place and return to copy destination select. + * Update function for `CM_RETURN_TO_COPY_DEST` + */ +void FileSelect_ReturnToCopyDest(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + + for (i = 0; i < 3; i++) { + if ((i != this->copyDestFileIndex) && (i != this->selectedFileIndex)) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + + yStep = ABS_ALT(this->buttonYOffsets[i] - D_8081424C[this->selectedFileIndex][i]) / this->actionTimer; + + if (D_8081424C[this->selectedFileIndex][i] >= this->buttonYOffsets[i]) { + this->buttonYOffsets[i] += yStep; + } else { + this->buttonYOffsets[i] -= yStep; + } + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->actionTimer = 4; + this->buttonIndex = FS_BTN_COPY_QUIT; + this->configMode = CM_SELECT_COPY_DEST; + } +} + +/** + * Hide title + * Update function for `CM_COPY_ANIM_1` + */ +void FileSelect_CopyAnim1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->titleAlpha[FS_TITLE_CUR] = 0; + this->actionTimer = 4; + this->configMode++; // CM_COPY_ANIM_2 + } +} + +/** + * Move a copy of the file window down and fade in the file info. + * Update function for `CM_COPY_ANIM_2` + */ +void FileSelect_CopyAnim2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s32 yStep; + + this->fileInfoAlpha[this->copyDestFileIndex] += 200 / 4; + this->nameAlpha[this->copyDestFileIndex] += 200 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + yStep = ABS_ALT(this->fileNamesY[this->copyDestFileIndex] + 56) / this->actionTimer; + this->fileNamesY[this->copyDestFileIndex] -= yStep; + + if (this->fileNamesY[this->copyDestFileIndex] <= -56) { + this->fileNamesY[this->copyDestFileIndex] = -56; + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 45; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode++; // CM_COPY_ANIM_3 + } +} + +/** + * Play a sound effect to indicate that the copy has completed. Wait for a timer or for + * the player to press a button before moving on. + * Update function for `CM_COPY_ANIM_3` + */ +void FileSelect_CopyAnim3(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + + if (this->actionTimer == 38) { + this->connectorAlpha[this->copyDestFileIndex] = 255; + play_sound(NA_SE_EV_DIAMOND_SWITCH); + } + + this->actionTimer--; + + if (this->actionTimer < 37) { + if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (this->actionTimer == 0)) { + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + this->configMode = CM_COPY_ANIM_4; + } + } +} + +/** + * Fade out the info boxes for both files and bring in their name boxes. Fade out title. + * Update function for `CM_COPY_ANIM_4` + */ +void FileSelect_CopyAnim4(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->selectedFileIndex] -= 200 / 4; + this->fileInfoAlpha[this->copyDestFileIndex] -= 200 / 4; + this->nameBoxAlpha[this->selectedFileIndex] += 200 / 4; + this->nameBoxAlpha[this->copyDestFileIndex] += 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->fileNamesY[this->copyDestFileIndex] = this->buttonYOffsets[3] = 0; + this->actionTimer = 4; + this->titleAlpha[FS_TITLE_CUR] = 0; + this->configMode++; + } +} + +/** + * Restore all buttons and labels back to their original place and go back to the main menu. + * Update function for `CM_COPY_ANIM_5` + */ +void FileSelect_CopyAnim5(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 200 / 4; + this->optionButtonAlpha += 200 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + for (i = 0; i < 3; i++) { + this->connectorAlpha[i] = 0; + this->fileButtonAlpha[i] = 200; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->connectorAlpha[i]; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] = 255; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] = 255; + } + } + + this->fileNamesY[this->selectedFileIndex] = 0; + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } +} + +/** + * Exit from the copy source screen to the main menu. Return all buttons and labels to their original place. + * Update function for `CM_COPY_RETURN_MAIN` + */ +void FileSelect_ExitCopyToMain(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } + + this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->actionButtonAlpha[FS_BTN_ACTION_COPY]; +} + +/** + * Move buttons into place for the erase select screen and fade in the proper labels. + * Update function for `CM_SETUP_ERASE_SELECT` + */ +void FileSelect_SetupEraseSelect(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i] - sChooseFileYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= sChooseFileYOffsets[i]) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] -= 100; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] -= 100; + this->optionButtonAlpha -= 100; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] += 200 / 4; + + if (this->actionButtonAlpha[FS_BTN_ACTION_COPY] <= 0) { + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = 0; + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->optionButtonAlpha = 0; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 200; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->buttonIndex = FS_BTN_ERASE_QUIT; + this->configMode++; // CM_ERASE_SELECT + } +} + +/** + * Allow the player to select a file to erase or exit back to the main menu. + * Update function for `CM_ERASE_SELECT` + */ +void FileSelect_EraseSelect(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex == FS_BTN_COPY_QUIT) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->buttonIndex = FS_BTN_MAIN_ERASE; + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->configMode = CM_EXIT_ERASE_TO_MAIN; + this->warningLabel = FS_WARNING_NONE; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_ERASE_CONFIRM_1; + this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else if (SLOT_OCCUPIED(this, this->buttonIndex)) { + this->actionTimer = 4; + this->selectedFileIndex = this->buttonIndex; + this->configMode = CM_SETUP_ERASE_CONFIRM_1; + this->nextTitleLabel = FS_TITLE_ERASE_CONFIRM; + play_sound(NA_SE_SY_FSEL_DECIDE_L); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } else { + if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + if (this->stickAdjY >= 30) { + this->buttonIndex--; + if (this->buttonIndex == FS_BTN_ERASE_FILE_3) { + this->buttonIndex = FS_BTN_ERASE_FILE_2; + } + if (this->buttonIndex < FS_BTN_ERASE_FILE_1) { + this->buttonIndex = FS_BTN_ERASE_QUIT; + } + } else { + this->buttonIndex++; + if (this->buttonIndex == FS_BTN_ERASE_FILE_3) { + this->buttonIndex = FS_BTN_ERASE_QUIT; + } + if (this->buttonIndex > FS_BTN_ERASE_QUIT) { + this->buttonIndex = FS_BTN_ERASE_FILE_1; + } + } + } + + if (this->buttonIndex != FS_BTN_ERASE_QUIT) { + if (!gSaveContext.flashSaveAvailable) { + if (!NO_FLASH_SLOT_OCCUPIED(sramCtx, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else if (!SLOT_OCCUPIED(this, this->buttonIndex)) { + this->warningLabel = FS_WARNING_FILE_EMPTY; + this->warningButtonIndex = this->buttonIndex; + this->emptyFileTextAlpha = 255; + } else { + this->warningLabel = FS_WARNING_NONE; + } + } else { + this->warningLabel = FS_WARNING_NONE; + } + } +} + +s16 D_8081426C[] = { 0, 16, 32 }; + +/** + * Update function for `CM_SETUP_ERASE_CONFIRM_1` + */ +void FileSelect_SetupEraseConfirm1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] -= 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->connectorAlpha[i] -= 255 / 4; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + } + } else { + this->nameBoxAlpha[i] -= 200 / 4; + } + } + this->titleAlpha[FS_TITLE_CUR] -= 255 / 8; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 8; + + yStep = ABS_ALT(this->buttonYOffsets[this->buttonIndex] - D_8081426C[this->buttonIndex]) / this->actionTimer; + + if (this->buttonYOffsets[this->buttonIndex] >= D_8081426C[this->buttonIndex]) { + this->buttonYOffsets[this->buttonIndex] -= yStep; + } else { + this->buttonYOffsets[this->buttonIndex] += yStep; + } + + this->actionTimer--; + + if (this->actionTimer == 0) { + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] = 0; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->connectorAlpha[i] = 0; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->connectorAlpha[i] = 0; + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i] = 0; + } + } else { + this->nameBoxAlpha[i] = 0; + } + } + + this->buttonYOffsets[this->buttonIndex] = D_8081426C[this->buttonIndex]; + this->actionTimer = 4; + this->configMode++; + } +} + +/** + * Show the file info of the file selected to erase. + * Update function for `CM_SETUP_ERASE_CONFIRM_2` + */ +void FileSelect_SetupEraseConfirm2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] += 200 / 4; + this->titleAlpha[FS_TITLE_CUR] -= 255 / 8; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 8; + this->fileInfoAlpha[this->buttonIndex] += 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + this->titleLabel = this->nextTitleLabel; + this->fileInfoAlpha[this->buttonIndex] = this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = 200; + this->buttonIndex = FS_BTN_CONFIRM_QUIT; + this->configMode = CM_ERASE_CONFIRM; + } +} + +/** + * Allow the player to confirm their choice to erase or return back to erase select. + * Update function for `CM_ERASE_CONFIRM` + */ +void FileSelect_EraseConfirm(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (((this->buttonIndex != FS_BTN_CONFIRM_YES) && CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) || + CHECK_BTN_ALL(input->press.button, BTN_B)) { + this->buttonIndex = this->selectedFileIndex; + this->nextTitleLabel = FS_TITLE_ERASE_FILE; + this->configMode = CM_EXIT_TO_ERASE_SELECT_1; + this->actionTimer = 4; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { + Sram_EraseSave(this, sramCtx, this->selectedFileIndex); + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_ERASE_ANIM_1; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->selectedFileIndex * 2], + gFlashSpecialSaveNumPages[this->selectedFileIndex * 2]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_ERASE_WAIT_FOR_FLASH_SAVE; + } + this->connectorAlpha[this->selectedFileIndex] = 0; + play_sound(NA_SE_EV_DIAMOND_SWITCH); + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_ERASE_COMPLETE; + Rumble_Request(200.0f, 255, 20, 150); + sEraseDelayTimer = 15; + } else if (ABS_ALT(this->stickAdjY) >= 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->buttonIndex ^= 1; + } +} + +/** + * Fade out file info, bring back the name box, and get ready to return to erase select screen. + * Update function for `CM_EXIT_TO_ERASE_SELECT_1` + */ +void FileSelect_ExitToEraseSelect1(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->fileInfoAlpha[this->buttonIndex] -= 200 / 4; + this->nameBoxAlpha[this->buttonIndex] += 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->actionTimer = 4; + this->fileInfoAlpha[this->buttonIndex] = 0; + this->configMode++; // CM_EXIT_TO_ERASE_SELECT_2 + } +} + +/** + * Move the buttons back into place and return to erase select. + * Update function for `CM_EXIT_TO_ERASE_SELECT_2` + */ +void FileSelect_ExitToEraseSelect2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + yStep = + ABS_ALT(this->buttonYOffsets[this->buttonIndex] - sChooseFileYOffsets[this->buttonIndex]) / this->actionTimer; + + if (this->buttonYOffsets[this->buttonIndex] >= sChooseFileYOffsets[this->buttonIndex]) { + this->buttonYOffsets[this->buttonIndex] -= yStep; + } else { + this->buttonYOffsets[this->buttonIndex] += yStep; + } + + for (i = 0; i < 3; i++) { + if (i != this->buttonIndex) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->buttonYOffsets[this->buttonIndex] = sChooseFileYOffsets[this->buttonIndex]; + this->actionTimer = 4; + this->buttonIndex = FS_BTN_ERASE_QUIT; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_ERASE_SELECT; + } +} + +/** + * Wait for an initial delay, then start fading out the selected file. + * The actual file deletion occurs in this function. + * Update function for `CM_ERASE_ANIM_1` + */ +void FileSelect_EraseAnim1(GameState* thisx) { + static s16 D_80814E80; + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + + if (sEraseDelayTimer == 0) { + if (this->actionTimer == 4) { + D_80814E80 = 1; + } + + if (this->actionTimer != 0) { + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->fileInfoAlpha[this->selectedFileIndex] -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] -= 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 4; + } + + this->fileNamesY[this->selectedFileIndex] -= D_80814E80; + D_80814E80 += 2; + + this->actionTimer--; + if (this->actionTimer == 0) { + this->configMode = CM_ERASE_ANIM_2; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = this->connectorAlpha[this->selectedFileIndex] = 0; + + //! FAKE: there should be a better chained assignment + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + if (1) {} + if (0) {} + this->fileInfoAlpha[this->selectedFileIndex] = this->nameAlpha[this->selectedFileIndex] = + this->nameBoxAlpha[this->selectedFileIndex] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT]; + + this->actionTimer = 45; + } + } else { + sEraseDelayTimer--; + + if (sEraseDelayTimer == 0) { + play_sound(NA_SE_OC_ABYSS); + } + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_ERASE_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_EraseWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + u16 i; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_ERASE_ANIM_1; + for (i = 0; i < 6; i++) { + this->newf[this->selectedFileIndex][i] = gSaveContext.save.saveInfo.playerData.newf[i]; + } + } +} + +/** + * Wait for a delay timer or for the palyer to press a button before returning to the main menu. + * Update function for `CM_ERASE_ANIM_2` + */ +void FileSelect_EraseAnim2(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Input* input = CONTROLLER1(&this->state); + + if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_B | BTN_START) || (--this->actionTimer == 0)) { + this->buttonYOffsets[3] = 0; + this->actionTimer = 4; + this->nextTitleLabel = FS_TITLE_SELECT_FILE; + this->configMode++; // CM_ERASE_ANIM_3 + play_sound(NA_SE_SY_FSEL_CLOSE); + } +} + +/** + * Exit from the erase animation to the main menu. Return all buttons and labels to their original place. + * Update function for `CM_ERASE_ANIM_3` + */ +void FileSelect_EraseAnim3(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + for (i = 0; i < 3; i++) { + this->fileButtonAlpha[i] += 200 / 4; + + if (!gSaveContext.flashSaveAvailable) { + if (NO_FLASH_SLOT_OCCUPIED(sramCtx, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } else if (SLOT_OCCUPIED(this, i)) { + this->nameBoxAlpha[i] = this->nameAlpha[i] = this->fileButtonAlpha[i]; + this->connectorAlpha[i] += 255 / 4; + } + } + + if (this->fileButtonAlpha[this->selectedFileIndex] >= 200) { + this->fileButtonAlpha[this->selectedFileIndex] = 200; + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->fileNamesY[this->selectedFileIndex] = 0; + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200; + this->confirmButtonAlpha[FS_BTN_CONFIRM_YES] = this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } + + this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->actionButtonAlpha[FS_BTN_ACTION_COPY]; +} + +/** + * Exit from the erase select screen to the main menu. Return all buttons and labels to their original place. + * Update function for `CM_EXIT_ERASE_TO_MAIN` + */ +void FileSelect_ExitEraseToMain(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 i; + s32 yStep; + + for (i = 0; i < 5; i++) { + yStep = ABS_ALT(this->buttonYOffsets[i]) / this->actionTimer; + + if (this->buttonYOffsets[i] >= 0) { + this->buttonYOffsets[i] -= yStep; + } else { + this->buttonYOffsets[i] += yStep; + } + } + + this->actionButtonAlpha[FS_BTN_ACTION_COPY] += 200 / 4; + this->actionButtonAlpha[FS_BTN_ACTION_ERASE] += 200 / 4; + this->optionButtonAlpha += 200 / 4; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] -= 200 / 2; + + if (this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] <= 0) { + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + } + + this->titleAlpha[FS_TITLE_CUR] -= 255 / 4; + this->titleAlpha[FS_TITLE_NEXT] += 255 / 4; + this->actionTimer--; + + if (this->actionTimer == 0) { + this->highlightColor[3] = 70; + this->highlightPulseDir = 1; + this->highlightTimer = 20; + this->actionButtonAlpha[FS_BTN_ACTION_COPY] = 200; + this->confirmButtonAlpha[FS_BTN_CONFIRM_QUIT] = 0; + this->titleLabel = this->nextTitleLabel; + this->titleAlpha[FS_TITLE_CUR] = 255; + this->titleAlpha[FS_TITLE_NEXT] = 0; + this->configMode = CM_MAIN_MENU; + } + + this->optionButtonAlpha = this->actionButtonAlpha[FS_BTN_ACTION_ERASE] = + this->actionButtonAlpha[FS_BTN_ACTION_COPY]; +} diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c index c6e3983d8..02236002a 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_NES.c @@ -1,78 +1,1059 @@ /* * File: z_file_nameset_NES.c * Overlay: ovl_file_choose - * Description: + * Description: Entering name on a new file, selecting options from the options menu */ -#include "z_file_choose.h" +#include "prevent_bss_reordering.h" +#include "z_file_select.h" #include "z64rumble.h" +#include "misc/title_static/title_static.h" +#include "overlays/ovl_file_choose/ovl_file_choose.h" -extern UNK_TYPE D_01002800; -extern UNK_TYPE D_01007980; -extern UNK_TYPE D_0102A6B0; -extern UNK_TYPE D_0102B170; -extern UNK_TYPE D_010310F0; -extern UNK_TYPE D_010311F0; +void FileSelect_DrawTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture, s16 point) { + OPEN_DISPS(gfxCtx); -// there are uses of D_0E000000.fillRect (appearing as D_0E0002E0) in this file -extern GfxMasterList D_0E000000; + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804010.s") + CLOSE_DISPS(gfxCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808041A0.s") +void FileSelect_DrawMultiTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture1, TexturePtr texture2, s16 point) { + OPEN_DISPS(gfxCtx); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804654.s") + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture1, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadMultiBlock_4b(POLY_OPA_DISP++, texture2, 0x0080, 1, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808047D8.s") + CLOSE_DISPS(gfxCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080489C.s") +s16 D_80814280[] = { + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 4, 3, 2, 4, 1, 2, 2, 1, 1, 2, 2, 3, 2, 2, 0, 2, 2, 2, 0, 3, 1, 0, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804DAC.s") +s16 D_80814304[] = { + 1, 2, 0, 1, 1, 2, 1, 1, 4, 2, 2, 2, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 2, 2, 4, 3, 2, 4, 1, 2, 2, 1, 1, 2, 2, 3, 2, 2, 0, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804E74.s") +s16 D_80814384[] = { + 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80804F98.s") +s16 D_80814404[] = { + -94, -96, -48, 0, 32, 64, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080525C.s") +s16 D_80814410[] = { + 56, 44, 44, 28, 28, 44, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808052B0.s") +s16 D_8081441C[] = { + 72, -48, -48, -48, -48, -48, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808054A4.s") +void FileSelect_SetKeyboardVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 phi_t2; + s16 phi_t0; + s16 phi_t3; + s16 phi_s1; + s16 phi_t1; + s16 phi_s2; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808055D0.s") + this->keyboardVtx = GRAPH_ALLOC(this->state.gfxCtx, sizeof(Vtx) * 4 * 5 * 13); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808058A4.s") + phi_s1 = 0x26; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805918.s") + for (phi_t2 = 0, phi_s2 = 0, phi_t3 = 0; phi_s2 < 5; phi_s2++) { + phi_t0 = -0x60; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805A58.s") + for (phi_t1 = 0; phi_t1 < 13; phi_t1++, phi_t3 += 4, phi_t2++) { + //! @bug D_80814304 is accessed out of bounds when drawing the empty space character (value of 64). Under + //! normal circumstances it reads a halfword from D_80814384. + this->keyboardVtx[phi_t3].v.ob[0] = this->keyboardVtx[phi_t3 + 2].v.ob[0] = D_80814304[phi_t2] + phi_t0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805B30.s") + this->keyboardVtx[phi_t3 + 1].v.ob[0] = this->keyboardVtx[phi_t3 + 3].v.ob[0] = + D_80814304[phi_t2] + phi_t0 + 12; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80805C1C.s") + this->keyboardVtx[phi_t3].v.ob[1] = this->keyboardVtx[phi_t3 + 1].v.ob[1] = phi_s1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806014.s") + this->keyboardVtx[phi_t3 + 2].v.ob[1] = this->keyboardVtx[phi_t3 + 3].v.ob[1] = phi_s1 - 12; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806148.s") + this->keyboardVtx[phi_t3].v.ob[2] = this->keyboardVtx[phi_t3 + 1].v.ob[2] = + this->keyboardVtx[phi_t3 + 2].v.ob[2] = this->keyboardVtx[phi_t3 + 3].v.ob[2] = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806310.s") + this->keyboardVtx[phi_t3].v.flag = this->keyboardVtx[phi_t3 + 1].v.flag = + this->keyboardVtx[phi_t3 + 2].v.flag = this->keyboardVtx[phi_t3 + 3].v.flag = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808067E0.s") + this->keyboardVtx[phi_t3].v.tc[0] = this->keyboardVtx[phi_t3].v.tc[1] = + this->keyboardVtx[phi_t3 + 1].v.tc[1] = this->keyboardVtx[phi_t3 + 2].v.tc[0] = 0; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806BC8.s") + this->keyboardVtx[phi_t3 + 1].v.tc[0] = this->keyboardVtx[phi_t3 + 2].v.tc[1] = + this->keyboardVtx[phi_t3 + 3].v.tc[0] = this->keyboardVtx[phi_t3 + 3].v.tc[1] = 16 << 5; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806CA0.s") + this->keyboardVtx[phi_t3].v.cn[0] = this->keyboardVtx[phi_t3 + 1].v.cn[0] = + this->keyboardVtx[phi_t3 + 2].v.cn[0] = this->keyboardVtx[phi_t3 + 3].v.cn[0] = + this->keyboardVtx[phi_t3].v.cn[1] = this->keyboardVtx[phi_t3 + 1].v.cn[1] = + this->keyboardVtx[phi_t3 + 2].v.cn[1] = this->keyboardVtx[phi_t3 + 3].v.cn[1] = + this->keyboardVtx[phi_t3].v.cn[2] = this->keyboardVtx[phi_t3 + 1].v.cn[2] = + this->keyboardVtx[phi_t3 + 2].v.cn[2] = this->keyboardVtx[phi_t3 + 3].v.cn[2] = + this->keyboardVtx[phi_t3].v.cn[3] = this->keyboardVtx[phi_t3 + 1].v.cn[3] = + this->keyboardVtx[phi_t3 + 2].v.cn[3] = this->keyboardVtx[phi_t3 + 3].v.cn[3] = + 255; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806E84.s") + phi_t0 += 0x10; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80806F30.s") + phi_s1 -= 0x10; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808071E4.s") + this->keyboard2Vtx = GRAPH_ALLOC(this->state.gfxCtx, sizeof(Vtx) * 24); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_80807390.s") + for (phi_t1 = 0, phi_t3 = 0; phi_t3 < 6; phi_t3++, phi_t1 += 4) { -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_8080742C.s") + this->keyboard2Vtx[phi_t1 + 0].v.ob[0] = this->keyboard2Vtx[phi_t1 + 2].v.ob[0] = D_80814404[phi_t3] + 1; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808074B4.s") + this->keyboard2Vtx[phi_t1 + 1].v.ob[0] = this->keyboard2Vtx[phi_t1 + 3].v.ob[0] = + this->keyboard2Vtx[phi_t1 + 0].v.ob[0] + D_80814410[phi_t3] - 2; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_file_choose/func_808077AC.s") + this->keyboard2Vtx[phi_t1 + 0].v.ob[1] = this->keyboard2Vtx[phi_t1 + 1].v.ob[1] = D_8081441C[phi_t3] - 1; + + this->keyboard2Vtx[phi_t1 + 2].v.ob[1] = this->keyboard2Vtx[phi_t1 + 3].v.ob[1] = + this->keyboard2Vtx[phi_t1 + 0].v.ob[1] - 0xE; + + this->keyboard2Vtx[phi_t1 + 0].v.ob[2] = this->keyboard2Vtx[phi_t1 + 1].v.ob[2] = + this->keyboard2Vtx[phi_t1 + 2].v.ob[2] = this->keyboard2Vtx[phi_t1 + 3].v.ob[2] = 0; + + this->keyboard2Vtx[phi_t1 + 0].v.flag = this->keyboard2Vtx[phi_t1 + 1].v.flag = + this->keyboard2Vtx[phi_t1 + 2].v.flag = this->keyboard2Vtx[phi_t1 + 3].v.flag = 0; + + this->keyboard2Vtx[phi_t1 + 0].v.tc[0] = this->keyboard2Vtx[phi_t1 + 0].v.tc[1] = + this->keyboard2Vtx[phi_t1 + 1].v.tc[1] = this->keyboard2Vtx[phi_t1 + 2].v.tc[0] = 0; + + this->keyboard2Vtx[phi_t1 + 1].v.tc[0] = this->keyboard2Vtx[phi_t1 + 3].v.tc[0] = D_80814410[phi_t3] << 5; + + this->keyboard2Vtx[phi_t1 + 2].v.tc[1] = this->keyboard2Vtx[phi_t1 + 3].v.tc[1] = 16 << 5; + + this->keyboard2Vtx[phi_t1 + 0].v.cn[0] = this->keyboard2Vtx[phi_t1 + 1].v.cn[0] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[0] = this->keyboard2Vtx[phi_t1 + 3].v.cn[0] = + this->keyboard2Vtx[phi_t1 + 0].v.cn[1] = this->keyboard2Vtx[phi_t1 + 1].v.cn[1] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[1] = this->keyboard2Vtx[phi_t1 + 3].v.cn[1] = + this->keyboard2Vtx[phi_t1 + 0].v.cn[2] = this->keyboard2Vtx[phi_t1 + 1].v.cn[2] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[2] = this->keyboard2Vtx[phi_t1 + 3].v.cn[2] = + this->keyboard2Vtx[phi_t1 + 0].v.cn[3] = this->keyboard2Vtx[phi_t1 + 1].v.cn[3] = + this->keyboard2Vtx[phi_t1 + 2].v.cn[3] = this->keyboard2Vtx[phi_t1 + 3].v.cn[3] = + 255; + } +} + +TexturePtr sBackspaceEndTextures[] = { + gFileSelBackspaceButtonTex, + gFileSelENDButtonENGTex, +}; + +u16 sBackspaceEndWidths[] = { 28, 44 }; + +s16 D_80814434[] = { + -30, -16, -6, 4, 14, 24, 34, 44, 54, -16, -16, 0, +}; + +s16 D_8081444C[] = { + 72, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, +}; + +/** + * Set vertices used by all elements of the name entry screen that are NOT the keyboard. + * This includes the cursor highlight, the name entry plate and characters, and the buttons. + */ +void FileSelect_SetNameEntryVtx(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Font* font = &this->font; + u8 temp; + s16 var_s0; + s16 var_t1; + s16 sp108; + + OPEN_DISPS(this->state.gfxCtx); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gSPVertex(POLY_OPA_DISP++, this->keyboard2Vtx, 24, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelNameENGTex, G_IM_FMT_IA, G_IM_SIZ_8b, 56, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + gDPPipeSync(POLY_OPA_DISP++); + + for (var_t1 = 0, var_s0 = 0x10; var_t1 < 2; var_t1++, var_s0 += 4) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], 255); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + gDPLoadTextureBlock(POLY_OPA_DISP++, sBackspaceEndTextures[var_t1], G_IM_FMT_IA, G_IM_SIZ_16b, + sBackspaceEndWidths[var_t1], 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, var_s0, var_s0 + 2, var_s0 + 3, var_s0 + 1, 0); + } + + this->nameEntryVtx = GRAPH_ALLOC(this->state.gfxCtx, 44 * sizeof(Vtx)); + + for (var_s0 = 0, var_t1 = 0; var_t1 < 44; var_t1 += 4, var_s0++) { + if ((var_s0 > 0) && (var_s0 < 9)) { + temp = this->fileNames[this->buttonIndex][var_s0 - 1]; + + this->nameEntryVtx[var_t1 + 0].v.ob[0] = this->nameEntryVtx[var_t1 + 2].v.ob[0] = + D_80814434[var_s0] + this->nameEntryBoxPosX + D_80814280[temp]; + + this->nameEntryVtx[var_t1 + 1].v.ob[0] = this->nameEntryVtx[var_t1 + 3].v.ob[0] = + this->nameEntryVtx[var_t1 + 0].v.ob[0] + 10; + } else { + this->nameEntryVtx[var_t1 + 0].v.ob[0] = this->nameEntryVtx[var_t1 + 2].v.ob[0] = + D_80814434[var_s0] + this->nameEntryBoxPosX; + + this->nameEntryVtx[var_t1 + 1].v.ob[0] = this->nameEntryVtx[var_t1 + 3].v.ob[0] = + this->nameEntryVtx[var_t1 + 0].v.ob[0] + 10; + } + + this->nameEntryVtx[var_t1 + 0].v.ob[1] = this->nameEntryVtx[var_t1 + 1].v.ob[1] = D_8081444C[var_s0]; + + this->nameEntryVtx[var_t1 + 2].v.ob[1] = this->nameEntryVtx[var_t1 + 3].v.ob[1] = + this->nameEntryVtx[var_t1 + 0].v.ob[1] - 10; + + this->nameEntryVtx[var_t1 + 0].v.ob[2] = this->nameEntryVtx[var_t1 + 1].v.ob[2] = + this->nameEntryVtx[var_t1 + 2].v.ob[2] = this->nameEntryVtx[var_t1 + 3].v.ob[2] = 0; + + this->nameEntryVtx[var_t1 + 0].v.flag = this->nameEntryVtx[var_t1 + 1].v.flag = + this->nameEntryVtx[var_t1 + 2].v.flag = this->nameEntryVtx[var_t1 + 3].v.flag = 0; + + this->nameEntryVtx[var_t1 + 0].v.tc[0] = this->nameEntryVtx[var_t1 + 0].v.tc[1] = + this->nameEntryVtx[var_t1 + 1].v.tc[1] = this->nameEntryVtx[var_t1 + 2].v.tc[0] = 0; + + this->nameEntryVtx[var_t1 + 1].v.tc[0] = this->nameEntryVtx[var_t1 + 2].v.tc[1] = + this->nameEntryVtx[var_t1 + 3].v.tc[0] = this->nameEntryVtx[var_t1 + 3].v.tc[1] = 16 << 5; + + this->nameEntryVtx[var_t1 + 0].v.cn[0] = this->nameEntryVtx[var_t1 + 1].v.cn[0] = + this->nameEntryVtx[var_t1 + 2].v.cn[0] = this->nameEntryVtx[var_t1 + 3].v.cn[0] = + this->nameEntryVtx[var_t1 + 0].v.cn[1] = this->nameEntryVtx[var_t1 + 1].v.cn[1] = + this->nameEntryVtx[var_t1 + 2].v.cn[1] = this->nameEntryVtx[var_t1 + 3].v.cn[1] = + this->nameEntryVtx[var_t1 + 0].v.cn[2] = this->nameEntryVtx[var_t1 + 1].v.cn[2] = + this->nameEntryVtx[var_t1 + 2].v.cn[2] = this->nameEntryVtx[var_t1 + 3].v.cn[2] = + this->nameEntryVtx[var_t1 + 0].v.cn[3] = this->nameEntryVtx[var_t1 + 1].v.cn[3] = + this->nameEntryVtx[var_t1 + 2].v.cn[3] = this->nameEntryVtx[var_t1 + 3].v.cn[3] = + 255; + } + + this->nameEntryVtx[1].v.ob[0] = this->nameEntryVtx[3].v.ob[0] = this->nameEntryVtx[0].v.ob[0] + 0x6C; + this->nameEntryVtx[2].v.ob[1] = this->nameEntryVtx[3].v.ob[1] = this->nameEntryVtx[0].v.ob[1] - 0x10; + this->nameEntryVtx[1].v.tc[0] = this->nameEntryVtx[3].v.tc[0] = 108 << 5; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->windowColor[0], this->windowColor[1], this->windowColor[2], + this->nameEntryBoxAlpha); + gSPVertex(POLY_OPA_DISP++, this->nameEntryVtx, 4, 0); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelFileNameBoxTex, G_IM_FMT_IA, G_IM_SIZ_16b, 108, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + gSPVertex(POLY_OPA_DISP++, this->nameEntryVtx + 4, 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->nameEntryBoxAlpha); + + for (sp108 = 0, var_s0 = 0; var_s0 < 0x20; var_s0 += 4, sp108++) { + FileSelect_DrawTexQuadI4( + this->state.gfxCtx, font->fontBuf + this->fileNames[this->buttonIndex][sp108] * FONT_CHAR_TEX_SIZE, var_s0); + } + + this->nameEntryVtx[37].v.tc[0] = this->nameEntryVtx[38].v.tc[1] = this->nameEntryVtx[39].v.tc[0] = + this->nameEntryVtx[39].v.tc[1] = this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[42].v.tc[1] = + this->nameEntryVtx[43].v.tc[0] = this->nameEntryVtx[43].v.tc[1] = 24 << 5; + + if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) || + (this->kbdButton == FS_KBD_BTN_END)) { + this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[43].v.tc[0] = 56 << 5; + } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) { + this->nameEntryVtx[41].v.tc[0] = this->nameEntryVtx[43].v.tc[0] = 40 << 5; + } + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_DrawKeyboard(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + Font* font = &this->font; + s16 i; + s16 tmp; + s16 vtx; + + OPEN_DISPS(this->state.gfxCtx); + + Gfx_SetupDL42_Opa(this->state.gfxCtx); + gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, COMBINED, 0, + 0, 0, COMBINED); + gDPSetPrimColor(POLY_OPA_DISP++, 0, this->charBgAlpha, 255, 255, 255, 255); + + for (i = 0, vtx = 0; vtx < 0x100; vtx += 32) { + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[vtx], 32, 0); + + for (tmp = 0; tmp < 32; i++, tmp += 4) { + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + D_808141F0[i] * FONT_CHAR_TEX_SIZE, tmp); + } + } + + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[0x100], 4, 0); + FileSelect_DrawTexQuadI4(this->state.gfxCtx, font->fontBuf + D_808141F0[i] * FONT_CHAR_TEX_SIZE, 0); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_DrawNameEntry(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Font* font = &this->font; + Input* input = CONTROLLER1(&this->state); + s16 i; + s16 tmp; + u16 time; + s16 validName; + + OPEN_DISPS(this->state.gfxCtx); + + FileSelect_SetKeyboardVtx(&this->state); + FileSelect_SetNameEntryVtx(&this->state); + FileSelect_PulsateCursor(&this->state); + + tmp = (this->newFileNameCharCount * 4) + 4; + this->nameEntryVtx[36].v.ob[0] = this->nameEntryVtx[38].v.ob[0] = this->nameEntryVtx[tmp].v.ob[0] - 6; + this->nameEntryVtx[37].v.ob[0] = this->nameEntryVtx[39].v.ob[0] = this->nameEntryVtx[36].v.ob[0] + 24; + this->nameEntryVtx[36].v.ob[1] = this->nameEntryVtx[37].v.ob[1] = this->nameEntryVtx[tmp].v.ob[1] + 7; + this->nameEntryVtx[38].v.ob[1] = this->nameEntryVtx[39].v.ob[1] = this->nameEntryVtx[36].v.ob[1] - 24; + + if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) || + (this->kbdButton == FS_KBD_BTN_END)) { + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[0] - 4; + this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 52; + this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[1] + 4; + } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) { + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[0] - 4; + this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 40; + this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = + this->keyboard2Vtx[(this->kbdX + 1) * 4].v.ob[1] + 4; + } else { + this->nameEntryVtx[40].v.ob[0] = this->nameEntryVtx[42].v.ob[0] = + this->keyboardVtx[this->charIndex * 4].v.ob[0] - D_80814304[this->charIndex] - 6; + this->nameEntryVtx[41].v.ob[0] = this->nameEntryVtx[43].v.ob[0] = this->nameEntryVtx[40].v.ob[0] + 24; + this->nameEntryVtx[40].v.ob[1] = this->nameEntryVtx[41].v.ob[1] = + this->keyboardVtx[this->charIndex * 4].v.ob[1] + 6; + } + + this->nameEntryVtx[42].v.ob[1] = this->nameEntryVtx[43].v.ob[1] = this->nameEntryVtx[40].v.ob[1] - 24; + + gSPVertex(POLY_OPA_DISP++, &this->nameEntryVtx[36], 8, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->highlightColor[0], this->highlightColor[1], this->highlightColor[2], + this->highlightColor[3]); + + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelCharHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 24, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + + if ((this->kbdButton == FS_KBD_BTN_HIRA) || (this->kbdButton == FS_KBD_BTN_KATA) || + (this->kbdButton == FS_KBD_BTN_END)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelMediumButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 56, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + } else if ((this->kbdButton == FS_KBD_BTN_ENG) || (this->kbdButton == FS_KBD_BTN_BACKSPACE)) { + gDPLoadTextureBlock(POLY_OPA_DISP++, gFileSelSmallButtonHighlightTex, G_IM_FMT_I, G_IM_SIZ_8b, 40, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + } + + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); + + FileSelect_DrawKeyboard(&this->state); + gDPPipeSync(POLY_OPA_DISP++); + Gfx_SetupDL42_Opa(this->state.gfxCtx); + + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + + if (this->configMode == CM_NAME_ENTRY) { + if (CHECK_BTN_ALL(input->press.button, BTN_START)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + // place cursor on END button + this->kbdY = 5; + this->kbdX = 4; + } else if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + if ((this->newFileNameCharCount == 7) && (this->fileNames[this->buttonIndex][7] != 0x3E)) { + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else { + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + this->configMode = CM_NAME_ENTRY_TO_MAIN; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else { + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } + } + } else { + if (this->charPage <= FS_CHAR_PAGE_ENG) { + if (this->kbdY != 5) { + // draw the character the cursor is hovering over in yellow + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, 255); + + //! @bug D_80814384 is accessed out of bounds when drawing the empty space character (value of 64). + //! Under normal circumstances it reads a halfword from D_80814404. + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 2].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] + D_80814384[this->charIndex] - 2; + + this->keyboardVtx[(this->charIndex * 4) + 1].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 3].v.ob[0] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[0] + 0x10; + + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 1].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] + 2; + + this->keyboardVtx[(this->charIndex * 4) + 2].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 3].v.ob[1] = + this->keyboardVtx[(this->charIndex * 4) + 0].v.ob[1] - 0x10; + + gSPVertex(POLY_OPA_DISP++, &this->keyboardVtx[this->charIndex * 4], 4, 0); + + FileSelect_DrawTexQuadI4(this->state.gfxCtx, + font->fontBuf + D_808141F0[this->charIndex] * FONT_CHAR_TEX_SIZE, 0); + + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + play_sound(NA_SE_SY_FSEL_DECIDE_S); + this->fileNames[this->buttonIndex][this->newFileNameCharCount] = D_808141F0[this->charIndex]; + + this->newFileNameCharCount++; + + if (this->newFileNameCharCount > 7) { + this->newFileNameCharCount = 7; + } + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + if (this->charPage != this->kbdButton) { + if (this->kbdButton == FS_KBD_BTN_BACKSPACE) { + if ((this->newFileNameCharCount == 7) && (this->fileNames[this->buttonIndex][7] != 0x3E)) { + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } else { + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + } + + for (i = this->newFileNameCharCount; i < 7; i++) { + this->fileNames[this->buttonIndex][i] = this->fileNames[this->buttonIndex][i + 1]; + } + + this->fileNames[this->buttonIndex][i] = 0x3E; + play_sound(NA_SE_SY_FSEL_CLOSE); + } + } else if (this->kbdButton == FS_KBD_BTN_END) { + validName = false; + + for (i = 0; i < 8; i++) { + if (this->fileNames[this->buttonIndex][i] != 0x3E) { + validName = true; + break; + } + } + + if (validName) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + gSaveContext.fileNum = this->buttonIndex; + time = ((void)0, gSaveContext.save.time); + Sram_InitSave(this, sramCtx); + gSaveContext.save.time = time; + + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_NAME_ENTRY_TO_MAIN; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[this->buttonIndex * 2], + gFlashSpecialSaveNumPages[this->buttonIndex * 2]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE; + } + + this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200; + this->connectorAlpha[this->buttonIndex] = 255; + Rumble_Request(300.0f, 180, 20, 100); + } else { + play_sound(NA_SE_SY_FSEL_ERROR); + } + } + } + } + + if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->newFileNameCharCount++; + + if (this->newFileNameCharCount > 7) { + this->newFileNameCharCount = 7; + } + } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->newFileNameCharCount--; + + if (this->newFileNameCharCount < 0) { + this->newFileNameCharCount = 0; + } + } + } + } + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA); + + CLOSE_DISPS(this->state.gfxCtx); +} + +/** + * Fade in the name entry box and slide it to the center of the screen from the right side. + * After the name entry box is in place, init the keyboard/cursor and change modes. + * Update function for `CM_START_NAME_ENTRY` + */ +void FileSelect_StartNameEntry(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->nameEntryBoxAlpha += 25; + + if (this->nameEntryBoxAlpha >= 255) { + this->nameEntryBoxAlpha = 255; + } + + this->nameEntryBoxPosX -= 30; + + if (this->nameEntryBoxPosX <= 0) { + this->nameEntryBoxPosX = 0; + this->nameEntryBoxAlpha = 255; + this->kbdX = 0; + this->kbdY = 0; + this->kbdButton = FS_KBD_BTN_NONE; + this->configMode = CM_NAME_ENTRY; + } +} + +/** + * Update the keyboard cursor and play sound effects at the appropriate times. + * There are many special cases for warping the cursor depending on where + * the cursor currently is. + * Update function for `CM_NAME_ENTRY` + */ +void FileSelect_UpdateKeyboardCursor(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + s16 prevKbdX; + + this->kbdButton = FS_KBD_BTN_NONE; + + if (this->kbdY != 5) { + if (this->stickAdjX < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->charIndex--; + this->kbdX--; + if (this->kbdX < 0) { + this->kbdX = 12; + this->charIndex = (this->kbdY * 13) + this->kbdX; + } + } else if (this->stickAdjX > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->charIndex++; + this->kbdX++; + if (this->kbdX > 12) { + this->kbdX = 0; + this->charIndex = (this->kbdY * 13) + this->kbdX; + } + } + } else { + if (this->stickAdjX < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->kbdX--; + if (this->kbdX < 3) { + this->kbdX = 4; + } + } else if (this->stickAdjX > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->kbdX++; + if (this->kbdX > 4) { + this->kbdX = 3; + } + } + } + + if (this->stickAdjY > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + this->kbdY--; + + if (this->kbdY < 0) { + // Don't go to bottom row + if (this->kbdX < 8) { + this->kbdY = 4; + this->charIndex = (s32)(this->kbdX + 52); + } else { + this->kbdY = 5; + this->charIndex += 52; + prevKbdX = this->kbdX; + + if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + this->unk_2451E[this->kbdX] = prevKbdX; + } + } else { + this->charIndex -= 13; + + if (this->kbdY == 4) { + this->charIndex = 52; + this->kbdX = this->unk_2451E[this->kbdX]; + this->charIndex += this->kbdX; + } + } + } else if (this->stickAdjY < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + this->kbdY++; + + if (this->kbdY > 5) { + this->kbdY = 0; + this->kbdX = this->unk_2451E[this->kbdX]; + this->charIndex = this->kbdX; + } else { + this->charIndex += 13; + + if (this->kbdY == 5) { + if (this->kbdX < 8) { + this->kbdY = 0; + this->charIndex = this->kbdX; + } else { + prevKbdX = this->kbdX; + + if (this->kbdX < 3) { + this->kbdX = 0; + } else if (this->kbdX < 6) { + this->kbdX = 1; + } else if (this->kbdX < 8) { + this->kbdX = 2; + } else if (this->kbdX < 10) { + this->kbdX = 3; + } else if (this->kbdX < 13) { + this->kbdX = 4; + } + this->unk_2451E[this->kbdX] = prevKbdX; + } + } + } + } + if (this->kbdY == 5) { + this->kbdButton = this->kbdX; + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_NameEntryWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_NAME_ENTRY_TO_MAIN; + } +} + +/** + * This function is mostly a copy paste of `FileSelect_StartNameEntry`. + * The name entry box fades and slides in even though it is not visible. + * After this is complete, change to the options config mode. + * Update function for `CM_START_OPTIONS` + */ +void FileSelect_StartOptions(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + + this->nameEntryBoxAlpha += 25; + + if (this->nameEntryBoxAlpha >= 255) { + this->nameEntryBoxAlpha = 255; + } + + this->nameEntryBoxPosX -= 30; + + if (this->nameEntryBoxPosX <= 0) { + this->nameEntryBoxPosX = 0; + this->nameEntryBoxAlpha = 255; + this->configMode = CM_OPTIONS_MENU; + } +} + +u8 sSelectedSetting; +// bss padding +s32 D_80814E94; +s32 D_80814E98; +s32 D_80814E9C; +s32 D_80814EA0; + +/** + * Update the cursor and appropriate settings for the options menu. + * If the player presses B, write the selected options to the SRAM header + * and set config mode to rotate back to the main menu. + * Update function for `CM_OPTIONS_MENU` + */ +void FileSelect_UpdateOptionsMenu(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + Input* input = CONTROLLER1(&this->state); + + if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + Sram_WriteSaveOptionsToBuffer(sramCtx); + + if (!gSaveContext.flashSaveAvailable) { + this->configMode = CM_OPTIONS_TO_MAIN; + } else { + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[8], gFlashSpecialSaveNumPages[8]); + Sram_StartWriteToFlashDefault(sramCtx); + this->configMode = CM_OPTIONS_WAIT_FOR_FLASH_SAVE; + } + func_801A3D98(gSaveContext.options.audioSetting); + return; + } + + if (this->stickAdjX < -30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + if (sSelectedSetting == FS_SETTING_AUDIO) { + gSaveContext.options.audioSetting--; + + // because audio setting is unsigned, can't check for < 0 + if (gSaveContext.options.audioSetting > 0xF0) { + gSaveContext.options.audioSetting = SAVE_AUDIO_SURROUND; + } + } else { + gSaveContext.options.zTargetSetting ^= 1; + } + } else if (this->stickAdjX > 30) { + play_sound(NA_SE_SY_FSEL_CURSOR); + + if (sSelectedSetting == FS_SETTING_AUDIO) { + gSaveContext.options.audioSetting++; + if (gSaveContext.options.audioSetting > SAVE_AUDIO_SURROUND) { + gSaveContext.options.audioSetting = SAVE_AUDIO_STEREO; + } + } else { + gSaveContext.options.zTargetSetting ^= 1; + } + } + + if ((this->stickAdjY < -30) || (this->stickAdjY > 30)) { + play_sound(NA_SE_SY_FSEL_CURSOR); + sSelectedSetting ^= 1; + return; + } + if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + play_sound(NA_SE_SY_FSEL_DECIDE_L); + sSelectedSetting ^= 1; + } +} + +/** + * Update and wait for the save to flash to complete. + * Update function for `CM_OPTIONS_WAIT_FOR_FLASH_SAVE` + */ +void FileSelect_OptionsWaitForFlashSave(GameState* thisx) { + FileSelectState* this = (FileSelectState*)thisx; + SramContext* sramCtx = &this->sramCtx; + + Sram_UpdateWriteToFlashDefault(sramCtx); + + if (sramCtx->status == 0) { + this->configMode = CM_OPTIONS_TO_MAIN; + } +} + +typedef struct { + /* 0x0 */ TexturePtr texture; + /* 0x4 */ u16 width; + /* 0x6 */ u16 height; +} OptionsMenuTextureInfo; // size = 0x8 + +OptionsMenuTextureInfo gOptionsMenuHeaders[] = { + { gFileSelOptionsENGTex, 128, 16 }, { gFileSelSoundENGTex, 64, 16 }, + { gFileSelTargetingENGTex, 64, 16 }, { gFileSelCheckBrightnessENGTex, 96, 16 }, + { gFileSelDolbySurroundLogoENGTex, 48, 17 }, +}; + +OptionsMenuTextureInfo gOptionsMenuSettings[] = { + { gFileSelStereoENGTex, 48, 16 }, { gFileSelMonoENGTex, 48, 16 }, { gFileSelHeadsetENGTex, 48, 16 }, + { gFileSelSurroundENGTex, 48, 16 }, { gFileSelSwitchENGTex, 48, 16 }, { gFileSelHoldENGTex, 48, 16 }, +}; + +void FileSelect_DrawOptionsImpl(GameState* thisx) { + static s16 sCursorPrimRed = 255; + static s16 sCursorPrimGreen = 255; + static s16 sCursorPrimBlue = 255; + static s16 sCursorEnvRed = 0; + static s16 sCursorEnvGreen = 0; + static s16 sCursorEnvBlue = 0; + static s16 sCursorPulseDir = 1; + static s16 sCursorFlashTimer = 20; + static s16 sCursorPrimColors[][3] = { + { 255, 255, 255 }, + { 0, 255, 255 }, + }; + static s16 sCursorEnvColors[][3] = { + { 0, 0, 0 }, + { 0, 150, 150 }, + }; + FileSelectState* this = (FileSelectState*)thisx; + s16 cursorRedStep; + s16 cursorGreenStep; + s16 cursorBlueStep; + s16 i; + s16 j; + s16 vtx; + + OPEN_DISPS(this->state.gfxCtx); + + cursorRedStep = ABS_ALT(sCursorPrimRed - sCursorPrimColors[sCursorPulseDir][0]) / sCursorFlashTimer; + cursorGreenStep = ABS_ALT(sCursorPrimGreen - sCursorPrimColors[sCursorPulseDir][1]) / sCursorFlashTimer; + cursorBlueStep = ABS_ALT(sCursorPrimBlue - sCursorPrimColors[sCursorPulseDir][2]) / sCursorFlashTimer; + + if (sCursorPrimRed >= sCursorPrimColors[sCursorPulseDir][0]) { + sCursorPrimRed -= cursorRedStep; + } else { + sCursorPrimRed += cursorRedStep; + } + + if (sCursorPrimGreen >= sCursorPrimColors[sCursorPulseDir][1]) { + sCursorPrimGreen -= cursorGreenStep; + } else { + sCursorPrimGreen += cursorGreenStep; + } + + if (sCursorPrimBlue >= sCursorPrimColors[sCursorPulseDir][2]) { + sCursorPrimBlue -= cursorBlueStep; + } else { + sCursorPrimBlue += cursorBlueStep; + } + + cursorRedStep = ABS_ALT(sCursorEnvRed - sCursorEnvColors[sCursorPulseDir][0]) / sCursorFlashTimer; + cursorGreenStep = ABS_ALT(sCursorEnvGreen - sCursorEnvColors[sCursorPulseDir][1]) / sCursorFlashTimer; + cursorBlueStep = ABS_ALT(sCursorEnvBlue - sCursorEnvColors[sCursorPulseDir][2]) / sCursorFlashTimer; + + if (sCursorEnvRed >= sCursorEnvColors[sCursorPulseDir][0]) { + sCursorEnvRed -= cursorRedStep; + } else { + sCursorEnvRed += cursorRedStep; + } + + if (sCursorEnvGreen >= sCursorEnvColors[sCursorPulseDir][1]) { + sCursorEnvGreen -= cursorGreenStep; + } else { + sCursorEnvGreen += cursorGreenStep; + } + + if (sCursorEnvBlue >= sCursorEnvColors[sCursorPulseDir][2]) { + sCursorEnvBlue -= cursorBlueStep; + } else { + sCursorEnvBlue += cursorBlueStep; + } + + if (--sCursorFlashTimer == 0) { + sCursorPrimRed = sCursorPrimColors[sCursorPulseDir][0]; + sCursorPrimGreen = sCursorPrimColors[sCursorPulseDir][1]; + sCursorPrimBlue = sCursorPrimColors[sCursorPulseDir][2]; + + sCursorEnvRed = sCursorEnvColors[sCursorPulseDir][0]; + sCursorEnvGreen = sCursorEnvColors[sCursorPulseDir][1]; + sCursorEnvBlue = sCursorEnvColors[sCursorPulseDir][2]; + + sCursorFlashTimer = 20; + + if (++sCursorPulseDir > 1) { + sCursorPulseDir = 0; + } + } + + // blue divider lines + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); + + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelOptionsDividerTex, G_IM_FMT_IA, 256, 2, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + Matrix_Push(); + Matrix_Translate(0.0f, 0.1f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_OPA_DISP++, gOptionsDividerTopVtx, 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + + Matrix_Push(); + Matrix_Translate(0.0f, 0.2f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_OPA_DISP++, gOptionsDividerMiddleVtx, 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + + Matrix_Push(); + Matrix_Translate(0.0f, 0.4f, 0.0f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(this->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(POLY_OPA_DISP++, gOptionsDividerBottomVtx, 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); + Matrix_Pop(); + + gSPVertex(POLY_OPA_DISP++, D_80813DF0, 32, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + + for (i = 0, vtx = 0; i < 5; i++, vtx += 4) { + if (i == 4) { + gDPPipeSync(POLY_OPA_DISP++); + if (gSaveContext.options.audioSetting == SAVE_AUDIO_SURROUND) { + gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuHeaders[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b, + gOptionsMenuHeaders[i].width, gOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gSPVertex(POLY_OPA_DISP++, D_80813F30, 32, 0); + + for (i = 0, vtx = 0; i < 4; i++, vtx += 4) { + gDPPipeSync(POLY_OPA_DISP++); + if (i == gSaveContext.options.audioSetting) { + if (sSelectedSetting == FS_SETTING_AUDIO) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimRed, sCursorPrimGreen, sCursorPrimBlue, + this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvRed, sCursorEnvGreen, sCursorEnvBlue, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 120, 120, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuSettings[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b, + gOptionsMenuSettings[i].width, gOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + } + + for (; i < 6; i++, vtx += 4) { + gDPPipeSync(POLY_OPA_DISP++); + + if (i == (gSaveContext.options.zTargetSetting + 4)) { + if (sSelectedSetting == FS_SETTING_ZTARGET) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorPrimRed, sCursorPrimGreen, sCursorPrimBlue, + this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, sCursorEnvRed, sCursorEnvGreen, sCursorEnvBlue, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 120, 120, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + } + + gDPLoadTextureBlock(POLY_OPA_DISP++, gOptionsMenuSettings[i].texture, G_IM_FMT_IA, G_IM_SIZ_8b, + gOptionsMenuSettings[i].width, gOptionsMenuHeaders[i].height, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + } + + gDPPipeSync(POLY_OPA_DISP++); + + // check brightness bars + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gFileSelBrightnessCheckTex, G_IM_FMT_IA, 96, 16, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 55, 55, 55, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 40, 40, 40, 255); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + + vtx += 4; + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 30, 30, 30, this->titleAlpha[FS_TITLE_CUR]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gSP1Quadrangle(POLY_OPA_DISP++, vtx, vtx + 2, vtx + 3, vtx + 1, 0); + + CLOSE_DISPS(this->state.gfxCtx); +} + +void FileSelect_DrawOptions(GameState* thisx) { + FileSelect_DrawOptionsImpl(thisx); +} diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c new file mode 100644 index 000000000..47619b66d --- /dev/null +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_data.c @@ -0,0 +1,17 @@ +#include "z_file_select.h" + +// Vtx Data +#include "overlays/ovl_file_choose/ovl_file_choose.c" + +u8 D_808141F0[] = { + // 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' + /* Row 0 */ 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, + // 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' + /* Row 1 */ 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, + // 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' + /* Row 2 */ 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, + // 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' + /* Row 3 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, + // '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' '.' '-' ' ' + /* Row 4 */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x40, 0x3F, 0x3E +}; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_select.h b/src/overlays/gamestates/ovl_file_choose/z_file_select.h new file mode 100644 index 000000000..7dcc72a9d --- /dev/null +++ b/src/overlays/gamestates/ovl_file_choose/z_file_select.h @@ -0,0 +1,327 @@ +#ifndef FILE_SELECT_H +#define FILE_SELECT_H + +#include "global.h" + +// `sramCtx->noFlashSaveBuf` is never allocated space, so should never be used +// Slot offsets are also based on OoT SaveContext sizes, and contains incorrect sizes from MM +// Macros appear to be remnant from OoT +#define NO_FLASH_GET_NEWF(sramCtx, slotNum, index) \ + (sramCtx->noFlashSaveBuf[gSramSlotOffsets[slotNum] + offsetof(SaveContext, save.saveInfo.playerData.newf[index])]) +#define NO_FLASH_SLOT_OCCUPIED(sramCtx, slotNum) \ + ((NO_FLASH_GET_NEWF(sramCtx, slotNum, 0) == 'Z') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 1) == 'E') || \ + (NO_FLASH_GET_NEWF(sramCtx, slotNum, 2) == 'L') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 3) == 'D') || \ + (NO_FLASH_GET_NEWF(sramCtx, slotNum, 4) == 'A') || (NO_FLASH_GET_NEWF(sramCtx, slotNum, 5) == '3')) + +#define GET_NEWF(fileSelect, slotNum, index) (fileSelect->newf[slotNum][index]) +#define SLOT_OCCUPIED(fileSelect, slotNum) \ + ((GET_NEWF(fileSelect, slotNum, 0) == 'Z') && (GET_NEWF(fileSelect, slotNum, 1) == 'E') && \ + (GET_NEWF(fileSelect, slotNum, 2) == 'L') && (GET_NEWF(fileSelect, slotNum, 3) == 'D') && \ + (GET_NEWF(fileSelect, slotNum, 4) == 'A') && (GET_NEWF(fileSelect, slotNum, 5) == '3')) + +// Init mode: Initial setup as the file select is starting up, fades and slides in various menu elements +// Config mode: Handles the bulk of the file select, various configuration tasks like picking a file, copy/erase, and the options menu +// Select mode: Displays the selected file with various details about it, and allows the player to confirm and open it +typedef enum { + /* 0 */ FS_MENU_MODE_INIT, + /* 1 */ FS_MENU_MODE_CONFIG, + /* 2 */ FS_MENU_MODE_SELECT +} MenuMode; + +typedef enum { + /* 0x00 */ CM_FADE_IN_START, + /* 0x01 */ CM_FADE_IN_END, + /* 0x02 */ CM_MAIN_MENU, + /* 0x03 */ CM_SETUP_COPY_SOURCE, + /* 0x04 */ CM_SELECT_COPY_SOURCE, + /* 0x05 */ CM_SETUP_COPY_DEST_1, + /* 0x06 */ CM_SETUP_COPY_DEST_2, + /* 0x07 */ CM_SELECT_COPY_DEST, + /* 0x08 */ CM_EXIT_TO_COPY_SOURCE_1, + /* 0x09 */ CM_EXIT_TO_COPY_SOURCE_2, + /* 0x0A */ CM_SETUP_COPY_CONFIRM_1, + /* 0x0B */ CM_SETUP_COPY_CONFIRM_2, + /* 0x0C */ CM_COPY_CONFIRM, + /* 0x0D */ CM_COPY_WAIT_FOR_FLASH_SAVE, + /* 0x0E */ CM_RETURN_TO_COPY_DEST, + /* 0x0F */ CM_COPY_ANIM_1, + /* 0x10 */ CM_COPY_ANIM_2, + /* 0x11 */ CM_COPY_ANIM_3, + /* 0x12 */ CM_COPY_ANIM_4, + /* 0x13 */ CM_COPY_ANIM_5, + /* 0x14 */ CM_COPY_RETURN_MAIN, + /* 0x15 */ CM_SETUP_ERASE_SELECT, + /* 0x16 */ CM_ERASE_SELECT, + /* 0x17 */ CM_SETUP_ERASE_CONFIRM_1, + /* 0x18 */ CM_SETUP_ERASE_CONFIRM_2, + /* 0x19 */ CM_ERASE_CONFIRM, + /* 0x1A */ CM_EXIT_TO_ERASE_SELECT_1, + /* 0x1B */ CM_EXIT_TO_ERASE_SELECT_2, + /* 0x1C */ CM_ERASE_ANIM_1, + /* 0x1D */ CM_ERASE_WAIT_FOR_FLASH_SAVE, + /* 0x1E */ CM_ERASE_ANIM_2, + /* 0x1F */ CM_ERASE_ANIM_3, + /* 0x20 */ CM_EXIT_ERASE_TO_MAIN, + /* 0x21 */ CM_UNUSED_31, + /* 0x22 */ CM_ROTATE_TO_NAME_ENTRY, + /* 0x23 */ CM_START_NAME_ENTRY, + /* 0x24 */ CM_NAME_ENTRY, + /* 0x25 */ CM_NAME_ENTRY_WAIT_FOR_FLASH_SAVE, + /* 0x26 */ CM_NAME_ENTRY_TO_MAIN, + /* 0x27 */ CM_MAIN_TO_OPTIONS, + /* 0x28 */ CM_START_OPTIONS, + /* 0x29 */ CM_OPTIONS_MENU, + /* 0x2A */ CM_OPTIONS_WAIT_FOR_FLASH_SAVE, + /* 0x2B */ CM_OPTIONS_TO_MAIN, + /* 0x2C */ CM_UNUSED_DELAY +} ConfigMode; + +typedef enum { + /* 0 */ SM_FADE_MAIN_TO_SELECT, + /* 1 */ SM_MOVE_FILE_TO_TOP, + /* 2 */ SM_FADE_IN_FILE_INFO, + /* 3 */ SM_CONFIRM_FILE, + /* 4 */ SM_FADE_OUT_FILE_INFO, + /* 5 */ SM_MOVE_FILE_TO_SLOT, + /* 6 */ SM_FADE_OUT, + /* 7 */ SM_LOAD_GAME +} SelectMode; + +typedef enum { + /* 0 */ FS_TITLE_SELECT_FILE, // "Please select a file." + /* 1 */ FS_TITLE_OPEN_FILE, // "Open this file?" + /* 2 */ FS_TITLE_COPY_FROM, // "Copy which file?" + /* 3 */ FS_TITLE_COPY_TO, // "Copy to which file?" + /* 4 */ FS_TITLE_COPY_CONFIRM, // "Are you sure?" + /* 5 */ FS_TITLE_COPY_COMPLETE, // "File copied." + /* 6 */ FS_TITLE_ERASE_FILE, // "Erase which file?" + /* 7 */ FS_TITLE_ERASE_CONFIRM, // "Are you sure?" + /* 8 */ FS_TITLE_ERASE_COMPLETE // "File erased." +} TitleLabel; + +typedef enum { + /* 0 */ FS_TITLE_CUR, + /* 1 */ FS_TITLE_NEXT +} TitleIndex; + +typedef enum { + /* -1 */ FS_WARNING_NONE = -1, + /* 0 */ FS_WARNING_NO_FILE_COPY, // "No file to copy." + /* 1 */ FS_WARNING_NO_FILE_ERASE, // "No file to erase." + /* 2 */ FS_WARNING_NO_EMPTY_FILES, // "There is no empty file." + /* 3 */ FS_WARNING_FILE_EMPTY, // "This is an empty file." + /* 4 */ FS_WARNING_FILE_IN_USE // "This file is in use." +} WarningLabel; + +typedef enum { + /* 0 */ FS_BTN_MAIN_FILE_1, + /* 1 */ FS_BTN_MAIN_FILE_2, + /* 2 */ FS_BTN_MAIN_FILE_3, + /* 3 */ FS_BTN_MAIN_COPY, + /* 4 */ FS_BTN_MAIN_ERASE, + /* 5 */ FS_BTN_MAIN_OPTIONS +} MainMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_COPY_FILE_1, + /* 1 */ FS_BTN_COPY_FILE_2, + /* 2 */ FS_BTN_COPY_FILE_3, + /* 3 */ FS_BTN_COPY_QUIT +} CopyMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_ERASE_FILE_1, + /* 1 */ FS_BTN_ERASE_FILE_2, + /* 2 */ FS_BTN_ERASE_FILE_3, + /* 3 */ FS_BTN_ERASE_QUIT +} EraseMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_SELECT_FILE_1, + /* 1 */ FS_BTN_SELECT_FILE_2, + /* 2 */ FS_BTN_SELECT_FILE_3, + /* 3 */ FS_BTN_SELECT_YES, + /* 4 */ FS_BTN_SELECT_QUIT +} SelectMenuButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_CONFIRM_YES, + /* 1 */ FS_BTN_CONFIRM_QUIT +} ConfirmButtonIndex; + +typedef enum { + /* 0 */ FS_BTN_ACTION_COPY, + /* 1 */ FS_BTN_ACTION_ERASE +} ActionButtonIndex; + +typedef enum { + /* 0 */ FS_SETTING_AUDIO, + /* 1 */ FS_SETTING_ZTARGET +} SettingIndex; + +typedef enum { + /* 0 */ FS_CHAR_PAGE_HIRA, + /* 1 */ FS_CHAR_PAGE_KATA, + /* 2 */ FS_CHAR_PAGE_ENG +} CharPage; + +typedef enum { + /* 0 */ FS_KBD_BTN_HIRA, + /* 1 */ FS_KBD_BTN_KATA, + /* 2 */ FS_KBD_BTN_ENG, + /* 3 */ FS_KBD_BTN_BACKSPACE, + /* 4 */ FS_KBD_BTN_END, + /* 99 */ FS_KBD_BTN_NONE = 99 +} KeyboardButton; + +typedef struct FileSelectState { + /* 0x00000 */ GameState state; + /* 0x000A4 */ Vtx* windowVtx; + /* 0x000A8 */ u8* staticSegment; + /* 0x000AC */ u8* parameterSegment; + /* 0x000B0 */ u8* titleSegment; + /* 0x000B8 */ View view; + /* 0x00220 */ SramContext sramCtx; + /* 0x00248 */ SkyboxContext skyboxCtx; + /* 0x00470 */ MessageContext msgCtx; + /* 0x12550 */ Font font; + /* 0x242E0 */ EnvironmentContext envCtx; + /* 0x243E0 */ UNK_TYPE1 pad243E0[0x4]; + /* 0x243E4 */ Vtx* windowContentVtx; + /* 0x243E8 */ Vtx* keyboardVtx; + /* 0x243EC */ Vtx* nameEntryVtx; + /* 0x243F0 */ Vtx* keyboard2Vtx; + /* 0x243F4 */ u8 newf[4][6]; + /* 0x2440C */ u16 threeDayResetCount[4]; + /* 0x24414 */ char fileNames[4][8]; + /* 0x24434 */ s16 healthCapacity[4]; + /* 0x2443C */ s16 health[4]; + /* 0x24444 */ u32 questItems[4]; + /* 0x24454 */ s8 defenseHearts[4]; + /* 0x24458 */ u16 time[4]; + /* 0x24460 */ s16 day[4]; + /* 0x24468 */ u8 isOwlSave[4]; + /* 0x2446C */ s16 rupees[4]; + /* 0x24474 */ u8 walletUpgrades[4]; + /* 0x24478 */ u8 maskCount[4]; + /* 0x2447C */ u8 heartPieceCount[4]; + /* 0x24480 */ s16 buttonIndex; // enum will depend on `ConfigMode` + /* 0x24482 */ s16 confirmButtonIndex; // see `ConfirmButtonIndex` enum + /* 0x24484 */ s16 menuMode; // see `MenuMode` enum + /* 0x24486 */ s16 configMode; // see `ConfigMode` enum + /* 0x24488 */ s16 prevConfigMode; // see `ConfigMode` enum + /* 0x2448A */ s16 nextConfigMode; // see `ConfigMode` enum + /* 0x2448C */ s16 selectMode; // see `SelectMode` enum + /* 0x2448E */ s16 selectedFileIndex; + /* 0x24490 */ UNK_TYPE1 pad24490[0x2]; + /* 0x24492 */ s16 fileNamesY[3]; + /* 0x24498 */ s16 actionTimer; + /* 0x2449A */ s16 buttonYOffsets[6]; + /* 0x244A6 */ s16 copyDestFileIndex; + /* 0x244A8 */ s16 warningLabel; + /* 0x244AA */ s16 warningButtonIndex; + /* 0x244AC */ s16 titleLabel; // see `TitleLabel` enum + /* 0x244AE */ s16 nextTitleLabel; // see `TitleLabel` enum + /* 0x244B0 */ s16 windowColor[3]; + /* 0x244B6 */ s16 titleAlpha[2]; // see `TitleIndex` enum + /* 0x244BA */ s16 windowAlpha; + /* 0x244BC */ s16 fileButtonAlpha[3]; + /* 0x244C2 */ s16 nameBoxAlpha[3]; + /* 0x244C8 */ s16 nameAlpha[3]; + /* 0x244CE */ s16 connectorAlpha[3]; + /* 0x244D4 */ s16 fileInfoAlpha[3]; + /* 0x244DA */ s16 actionButtonAlpha[2]; + /* 0x244DA */ s16 confirmButtonAlpha[2]; + /* 0x244E2 */ s16 optionButtonAlpha; + /* 0x244E4 */ s16 nameEntryBoxAlpha; + /* 0x244E6 */ s16 controlsAlpha; + /* 0x244E8 */ s16 emptyFileTextAlpha; + /* 0x244EA */ s16 highlightColor[4]; + /* 0x244F2 */ s16 highlightPulseDir; + /* 0x244F4 */ s16 unk_244F4; + /* 0x244F6 */ s16 confirmButtonTexIndices[2]; + /* 0x244FA */ s16 inputTimerX; + /* 0x244FC */ s16 inputTimerY; + /* 0x244FE */ s16 stickXDir; + /* 0x24500 */ s16 stickYDir; + /* 0x24502 */ s16 stickAdjX; + /* 0x24504 */ s16 stickAdjY; + /* 0x24506 */ s16 nameEntryBoxPosX; + /* 0x24508 */ s16 windowPosX; + /* 0x2450A */ s16 screenFillAlpha; + /* 0x2450C */ f32 windowRot; + /* 0x24510 */ s16 kbdButton; + /* 0x24512 */ s16 charPage; + /* 0x24514 */ s16 charBgAlpha; + /* 0x24516 */ s16 charIndex; + /* 0x24518 */ s16 kbdX; + /* 0x2451A */ s16 kbdY; + /* 0x2451C */ s16 newFileNameCharCount; + /* 0x2451E */ s16 unk_2451E[5]; + /* 0x24528 */ s16 highlightTimer; + /* 0x2452A */ s16 unk_2452A; + /* 0x2452C */ s16 unk_2452C[4]; + /* 0x24534 */ s16 unk_24534[4]; + /* 0x2453C */ s16 unk_2453C[4]; + /* 0x24544 */ s16 unk_24544[4]; + /* 0x2454C */ s16 unk_2454C; + /* 0x2454E */ s16 unk_2454E; + /* 0x24550 */ s16 unk_24550; +} FileSelectState; // size = 0x24558 + +void FileSelect_Init(GameState* thisx); +void FileSelect_Destroy(GameState* thisx); + +void FileSelect_PulsateCursor(GameState* thisx); +void FileSelect_DrawNameEntry(GameState* thisx); +void FileSelect_DrawOptions(GameState* thisx); +void FileSelect_DrawTexQuadI4(GraphicsContext* gfxCtx, TexturePtr texture, s16 point); + +// Copying Files +void FileSelect_SetupCopySource(GameState* thisx); +void FileSelect_SelectCopySource(GameState* thisx); +void FileSelect_SetupCopyDest1(GameState* thisx); +void FileSelect_SetupCopyDest2(GameState* thisx); +void FileSelect_SelectCopyDest(GameState* thisx); +void FileSelect_ExitToCopySource1(GameState* thisx); +void FileSelect_ExitToCopySource2(GameState* thisx); +void FileSelect_SetupCopyConfirm1(GameState* thisx); +void FileSelect_SetupCopyConfirm2(GameState* thisx); +void FileSelect_CopyConfirm(GameState* thisx); +void FileSelect_CopyWaitForFlashSave(GameState* thisx); +void FileSelect_ReturnToCopyDest(GameState* thisx); +void FileSelect_CopyAnim1(GameState* thisx); +void FileSelect_CopyAnim2(GameState* thisx); +void FileSelect_CopyAnim3(GameState* thisx); +void FileSelect_CopyAnim4(GameState* thisx); +void FileSelect_CopyAnim5(GameState* thisx); +void FileSelect_ExitCopyToMain(GameState* thisx); + +// Erasing Files +void FileSelect_SetupEraseSelect(GameState* thisx); +void FileSelect_EraseSelect(GameState* thisx); +void FileSelect_SetupEraseConfirm1(GameState* thisx); +void FileSelect_SetupEraseConfirm2(GameState* thisx); +void FileSelect_EraseConfirm(GameState* thisx); +void FileSelect_ExitToEraseSelect1(GameState* thisx); +void FileSelect_ExitToEraseSelect2(GameState* thisx); +void FileSelect_EraseAnim1(GameState* thisx); +void FileSelect_EraseWaitForFlashSave(GameState* thisx); +void FileSelect_EraseAnim2(GameState* thisx); +void FileSelect_EraseAnim3(GameState* thisx); +void FileSelect_ExitEraseToMain(GameState* thisx); + +// Entering Name +void FileSelect_StartNameEntry(GameState* thisx); +void FileSelect_UpdateKeyboardCursor(GameState* thisx); +void FileSelect_NameEntryWaitForFlashSave(GameState* thisx); + +// Selecting Options +void FileSelect_StartOptions(GameState* thisx); +void FileSelect_UpdateOptionsMenu(GameState* thisx); +void FileSelect_OptionsWaitForFlashSave(GameState* thisx); + +extern u8 D_808141F0[]; +extern s16 D_80814280[]; + +#endif diff --git a/src/overlays/gamestates/ovl_title/z_title.c b/src/overlays/gamestates/ovl_title/z_title.c index 8e270b836..abde294e5 100644 --- a/src/overlays/gamestates/ovl_title/z_title.c +++ b/src/overlays/gamestates/ovl_title/z_title.c @@ -171,7 +171,7 @@ void ConsoleLogo_Init(GameState* thisx) { gSaveContext.fileNum = 0xFF; } - gSaveContext.unk_3F3F = true; + gSaveContext.flashSaveAvailable = true; Sram_Alloc(thisx, &this->sramCtx); this->ult = 0; this->timer = 20; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 1eb46728f..8517fdf20 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -285,7 +285,7 @@ void KaleidoScope_DrawInventoryEditorText(Gfx** gfxp) { GfxPrint_SetPos(&printer, 23, 22); GfxPrint_Printf(&printer, "%s", "セイ"); - // Life (double defence) + // Life (double defense) GfxPrint_SetPos(&printer, 4, 25); GfxPrint_Printf(&printer, "%s", "イ"); GfxPrint_SetPos(&printer, 4, 26); @@ -601,7 +601,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { counterDigits[1] += 21; } - // Double Defence + // Double Defense KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202); // Magic @@ -1048,16 +1048,13 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { // Dungeon Items slot = sCurSection - INV_EDITOR_SECTION_DUNGEON_ITEMS; if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - // Map - gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 4; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_MAP); } if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { - // Compass - gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 2; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_COMPASS); } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - // Boss Key - gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 1; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= (1 << DUNGEON_BOSS_KEY); } } else if (sCurSection < INV_EDITOR_SECTION_DOUBLE_DEFENSE) { @@ -1077,7 +1074,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { } } else { - // Double Defence + // Double Defense if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT) || CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { gSaveContext.save.saveInfo.playerData.doubleDefense ^= 1; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 9d210a728..64da25451 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -3060,12 +3060,12 @@ void KaleidoScope_Update(PlayState* play) { Play_SaveCycleSceneFlags(&play->state); gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; func_8014546C(sramCtx); - if (gSaveContext.unk_3F3F == 0) { + if (!gSaveContext.flashSaveAvailable) { pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5; } else { - func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum], - D_801C67F0[gSaveContext.fileNum]); - func_80147020(sramCtx); + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum], + gFlashSaveNumPages[gSaveContext.fileNum]); + Sram_StartWriteToFlashDefault(sramCtx); pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_4; } sDelayTimer = 90; @@ -3327,11 +3327,12 @@ void KaleidoScope_Update(PlayState* play) { gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; gSaveContext.save.saveInfo.playerData.health = 0x30; func_8014546C(sramCtx); - if (gSaveContext.unk_3F3F == 0) { + if (!gSaveContext.flashSaveAvailable) { pauseCtx->state = PAUSE_STATE_GAMEOVER_8; } else { - func_80147008(sramCtx, D_801C67C8[gSaveContext.fileNum], D_801C67F0[gSaveContext.fileNum]); - func_80147020(sramCtx); + Sram_SetFlashPagesDefault(sramCtx, gFlashSaveStartPages[gSaveContext.fileNum], + gFlashSaveNumPages[gSaveContext.fileNum]); + Sram_StartWriteToFlashDefault(sramCtx); pauseCtx->state = PAUSE_STATE_GAMEOVER_7; } sDelayTimer = 90; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4c65de06c..e4f96e594 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2802,21 +2802,21 @@ 0x8014546C:("func_8014546C",), 0x80145698:("func_80145698",), 0x801457CC:("func_801457CC",), - 0x80146580:("func_80146580",), - 0x80146628:("func_80146628",), + 0x80146580:("Sram_EraseSave",), + 0x80146628:("Sram_CopySave",), 0x80146AA0:("Sram_InitSave",), - 0x80146DF8:("func_80146DF8",), + 0x80146DF8:("Sram_WriteSaveOptionsToBuffer",), 0x80146E40:("Sram_InitSram",), 0x80146E70:("Sram_Alloc",), - 0x80146EBC:("func_80146EBC",), + 0x80146EBC:("Sram_SyncWriteToFlash",), 0x80146EE8:("Sram_SaveSpecialEnterClockTown",), 0x80146F5C:("Sram_SaveSpecialNewDay",), - 0x80147008:("func_80147008",), - 0x80147020:("func_80147020",), - 0x80147068:("func_80147068",), - 0x80147138:("func_80147138",), - 0x80147150:("func_80147150",), - 0x80147198:("func_80147198",), + 0x80147008:("Sram_SetFlashPagesDefault",), + 0x80147020:("Sram_StartWriteToFlashDefault",), + 0x80147068:("Sram_UpdateWriteToFlashDefault",), + 0x80147138:("Sram_SetFlashPagesOwlSave",), + 0x80147150:("Sram_StartWriteToFlashOwlSave",), + 0x80147198:("Sram_UpdateWriteToFlashOwlSave",), 0x80147314:("func_80147314",), 0x80147414:("func_80147414",), 0x8014750C:("Sram_nop8014750C",), @@ -4107,87 +4107,87 @@ 0x80803EC0:("TitleSetup_Main",), 0x80803F0C:("TitleSetup_Destroy",), 0x80803F30:("TitleSetup_Init",), - 0x80804010:("func_80804010",), - 0x808041A0:("func_808041A0",), - 0x80804654:("func_80804654",), - 0x808047D8:("func_808047D8",), - 0x8080489C:("func_8080489C",), - 0x80804DAC:("func_80804DAC",), - 0x80804E74:("func_80804E74",), - 0x80804F98:("func_80804F98",), - 0x8080525C:("func_8080525C",), - 0x808052B0:("func_808052B0",), - 0x808054A4:("func_808054A4",), - 0x808055D0:("func_808055D0",), - 0x808058A4:("func_808058A4",), - 0x80805918:("func_80805918",), - 0x80805A58:("func_80805A58",), - 0x80805B30:("func_80805B30",), - 0x80805C1C:("func_80805C1C",), - 0x80806014:("func_80806014",), - 0x80806148:("func_80806148",), - 0x80806310:("func_80806310",), - 0x808067E0:("func_808067E0",), - 0x80806BC8:("func_80806BC8",), - 0x80806CA0:("func_80806CA0",), - 0x80806E84:("func_80806E84",), - 0x80806F30:("func_80806F30",), - 0x808071E4:("func_808071E4",), - 0x80807390:("func_80807390",), - 0x8080742C:("func_8080742C",), - 0x808074B4:("func_808074B4",), - 0x808077AC:("func_808077AC",), - 0x80807940:("func_80807940",), - 0x80807A78:("func_80807A78",), - 0x80807C58:("func_80807C58",), - 0x80808214:("func_80808214",), - 0x80808D30:("func_80808D30",), - 0x80808F1C:("func_80808F1C",), - 0x80809DF0:("func_80809DF0",), - 0x80809EA0:("func_80809EA0",), - 0x8080A3CC:("func_8080A3CC",), - 0x8080A418:("func_8080A418",), - 0x8080A4A0:("func_8080A4A0",), - 0x8080A6BC:("func_8080A6BC",), - 0x8080A708:("func_8080A708",), - 0x8080BBFC:("func_8080BBFC",), - 0x8080BC20:("func_8080BC20",), - 0x8080BC44:("FileSelect_nop8080bc44",), - 0x8080BC4C:("FileSelect_nop8080BC4C",), - 0x8080BC58:("func_8080BC58",), - 0x8080BDAC:("func_8080BDAC",), - 0x8080BDDC:("FileSelect_RenderView",), - 0x8080BE60:("func_8080BE60",), - 0x8080C040:("func_8080C040",), - 0x8080C228:("func_8080C228",), - 0x8080C29C:("func_8080C29C",), - 0x8080C324:("func_8080C324",), - 0x8080C3A8:("func_8080C3A8",), - 0x8080D164:("func_8080D164",), - 0x8080D170:("func_8080D170",), - 0x8080D1BC:("func_8080D1BC",), - 0x8080D220:("func_8080D220",), - 0x8080D284:("func_8080D284",), - 0x8080D2EC:("func_8080D2EC",), - 0x8080D3D0:("func_8080D3D0",), - 0x8080D40C:("func_8080D40C",), - 0x8080D6D4:("func_8080D6D4",), - 0x8080F25C:("func_8080F25C",), - 0x808108DC:("func_808108DC",), - 0x80811CB8:("func_80811CB8",), - 0x80812460:("func_80812460",), - 0x80812668:("func_80812668",), - 0x80812760:("func_80812760",), - 0x80812840:("func_80812840",), - 0x80812980:("func_80812980",), - 0x80812A6C:("func_80812A6C",), - 0x80812D44:("func_80812D44",), - 0x80812D94:("func_80812D94",), - 0x80812E94:("func_80812E94",), - 0x80812ED0:("func_80812ED0",), + 0x80804010:("FileSelect_SetupCopySource",), + 0x808041A0:("FileSelect_SelectCopySource",), + 0x80804654:("FileSelect_SetupCopyDest1",), + 0x808047D8:("FileSelect_SetupCopyDest2",), + 0x8080489C:("FileSelect_SelectCopyDest",), + 0x80804DAC:("FileSelect_ExitToCopySource1",), + 0x80804E74:("FileSelect_ExitToCopySource2",), + 0x80804F98:("FileSelect_SetupCopyConfirm1",), + 0x8080525C:("FileSelect_SetupCopyConfirm2",), + 0x808052B0:("FileSelect_CopyConfirm",), + 0x808054A4:("FileSelect_CopyWaitForFlashSave",), + 0x808055D0:("FileSelect_ReturnToCopyDest",), + 0x808058A4:("FileSelect_CopyAnim1",), + 0x80805918:("FileSelect_CopyAnim2",), + 0x80805A58:("FileSelect_CopyAnim3",), + 0x80805B30:("FileSelect_CopyAnim4",), + 0x80805C1C:("FileSelect_CopyAnim5",), + 0x80806014:("FileSelect_ExitCopyToMain",), + 0x80806148:("FileSelect_SetupEraseSelect",), + 0x80806310:("FileSelect_EraseSelect",), + 0x808067E0:("FileSelect_SetupEraseConfirm1",), + 0x80806BC8:("FileSelect_SetupEraseConfirm2",), + 0x80806CA0:("FileSelect_EraseConfirm",), + 0x80806E84:("FileSelect_ExitToEraseSelect1",), + 0x80806F30:("FileSelect_ExitToEraseSelect2",), + 0x808071E4:("FileSelect_EraseAnim1",), + 0x80807390:("FileSelect_EraseWaitForFlashSave",), + 0x8080742C:("FileSelect_EraseAnim2",), + 0x808074B4:("FileSelect_EraseAnim3",), + 0x808077AC:("FileSelect_ExitEraseToMain",), + 0x80807940:("FileSelect_DrawTexQuadI4",), + 0x80807A78:("FileSelect_DrawMultiTexQuadI4",), + 0x80807C58:("FileSelect_SetKeyboardVtx",), + 0x80808214:("FileSelect_SetNameEntryVtx",), + 0x80808D30:("FileSelect_DrawKeyboard",), + 0x80808F1C:("FileSelect_DrawNameEntry",), + 0x80809DF0:("FileSelect_StartNameEntry",), + 0x80809EA0:("FileSelect_UpdateKeyboardCursor",), + 0x8080A3CC:("FileSelect_NameEntryWaitForFlashSave",), + 0x8080A418:("FileSelect_StartOptions",), + 0x8080A4A0:("FileSelect_UpdateOptionsMenu",), + 0x8080A6BC:("FileSelect_OptionsWaitForFlashSave",), + 0x8080A708:("FileSelect_DrawOptionsImpl",), + 0x8080BBFC:("FileSelect_DrawOptions",), + 0x8080BC20:("FileSelect_IncrementConfigMode",), + 0x8080BC44:("FileSelect_Noop1",), + 0x8080BC4C:("FileSelect_Noop2",), + 0x8080BC58:("FileSelect_InitModeUpdate",), + 0x8080BDAC:("FileSelect_InitModeDraw",), + 0x8080BDDC:("FileSelect_SetView",), + 0x8080BE60:("FileSelect_DrawTexQuadIA8",), + 0x8080C040:("FileSelect_FadeInMenuElements",), + 0x8080C228:("FileSelect_SplitNumber",), + 0x8080C29C:("FileSelect_StartFadeIn",), + 0x8080C324:("FileSelect_FinishFadeIn",), + 0x8080C3A8:("FileSelect_UpdateMainMenu",), + 0x8080D164:("FileSelect_UnusedCM31",), + 0x8080D170:("FileSelect_UnusedCMDelay",), + 0x8080D1BC:("FileSelect_RotateToNameEntry",), + 0x8080D220:("FileSelect_RotateToOptions",), + 0x8080D284:("FileSelect_RotateToMain",), + 0x8080D2EC:("FileSelect_PulsateCursor",), + 0x8080D3D0:("FileSelect_ConfigModeUpdate",), + 0x8080D40C:("FileSelect_SetWindowVtx",), + 0x8080D6D4:("FileSelect_SetWindowContentVtx",), + 0x8080F25C:("FileSelect_DrawFileInfo",), + 0x808108DC:("FileSelect_DrawWindowContents",), + 0x80811CB8:("FileSelect_ConfigModeDraw",), + 0x80812460:("FileSelect_FadeMainToSelect",), + 0x80812668:("FileSelect_MoveSelectedFileToTop",), + 0x80812760:("FileSelect_FadeInFileInfo",), + 0x80812840:("FileSelect_ConfirmFile",), + 0x80812980:("FileSelect_FadeOutFileInfo",), + 0x80812A6C:("FileSelect_MoveSelectedFileToSlot",), + 0x80812D44:("FileSelect_FadeOut",), + 0x80812D94:("FileSelect_LoadGame",), + 0x80812E94:("FileSelect_SelectModeUpdate",), + 0x80812ED0:("FileSelect_SelectModeDraw",), 0x8081313C:("FileSelect_UpdateAndDrawSkybox",), 0x80813268:("FileSelect_Main",), - 0x80813908:("func_80813908",), + 0x80813908:("FileSelect_InitContext",), 0x80813C74:("FileSelect_Destroy",), 0x80813C98:("FileSelect_Init",), 0x80814EB0:("DayTelop_Update",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index daa6aff8f..3a14118c5 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1927,14 +1927,14 @@ 0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4), 0x801C5FC0:("sPersistentCycleFlags","u32","[452]",0x710), 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2), - 0x801C6798:("D_801C6798","UNK_TYPE4","",0x4), + 0x801C6798:("gSramSlotOffsets","UNK_TYPE4","",0x4), 0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1), - 0x801C67C8:("D_801C67C8","s32","[10]",0x28), - 0x801C67F0:("D_801C67F0","s32","[10]",0x28), - 0x801C6818:("D_801C6818","s32","[10]",0x28), - 0x801C6840:("D_801C6840","UNK_TYPE1","",0x1), - 0x801C6850:("D_801C6850","UNK_TYPE1","",0x1), - 0x801C6870:("D_801C6870","UNK_TYPE1","",0x1), + 0x801C67C8:("gFlashSaveStartPages","s32","[10]",0x28), + 0x801C67F0:("gFlashSaveNumPages","s32","[10]",0x28), + 0x801C6818:("gFlashSpecialSaveNumPages","s32","[10]",0x28), + 0x801C6840:("gFlashOwlSaveStartPages","UNK_TYPE1","",0x1), + 0x801C6850:("gFlashOwlSaveNumPages","UNK_TYPE1","",0x1), + 0x801C6870:("gFlashSaveSizes","UNK_TYPE1","",0x1), 0x801C6890:("D_801C6890","UNK_TYPE1","",0x1), 0x801C6898:("sSaveDefaultPlayerData","SavePlayerData","",0x28), 0x801C68C0:("sSaveDefaultItemEquips","ItemEquips","",0x22), @@ -4544,13 +4544,13 @@ 0x80803FC8:("openingCutscenes","u32","[2]",0x8), 0x80813DF0:("D_80813DF0","UNK_TYPE1","",0x1), 0x80813F30:("D_80813F30","UNK_TYPE1","",0x1), - 0x80814130:("D_80814130","UNK_TYPE1","",0x1), - 0x80814170:("D_80814170","UNK_TYPE1","",0x1), - 0x808141B0:("D_808141B0","UNK_TYPE1","",0x1), + 0x80814130:("gOptionsDividerTopVtx","UNK_TYPE1","",0x1), + 0x80814170:("gOptionsDividerMiddleVtx","UNK_TYPE1","",0x1), + 0x808141B0:("gOptionsDividerBottomVtx","UNK_TYPE1","",0x1), 0x808141F0:("D_808141F0","UNK_TYPE1","",0x1), - 0x80814240:("D_80814240","UNK_TYPE2","",0x2), + 0x80814240:("sChooseFileYOffsets","UNK_TYPE2","",0x2), 0x8081424C:("D_8081424C","UNK_TYPE2","",0x2), - 0x80814260:("D_80814260","UNK_TYPE2","",0x2), + 0x80814260:("sEraseDelayTimer","UNK_TYPE2","",0x2), 0x80814264:("D_80814264","UNK_TYPE2","",0x2), 0x8081426C:("D_8081426C","UNK_TYPE1","",0x1), 0x80814280:("D_80814280","UNK_TYPE1","",0x1), @@ -4559,31 +4559,31 @@ 0x80814404:("D_80814404","UNK_TYPE2","",0x2), 0x80814410:("D_80814410","UNK_TYPE2","",0x2), 0x8081441C:("D_8081441C","UNK_TYPE2","",0x2), - 0x80814428:("D_80814428","UNK_TYPE4","",0x4), - 0x80814430:("D_80814430","UNK_TYPE2","",0x2), + 0x80814428:("sBackspaceEndTextures","UNK_TYPE4","",0x4), + 0x80814430:("sBackspaceEndWidths","UNK_TYPE2","",0x2), 0x80814434:("D_80814434","UNK_TYPE2","",0x2), 0x8081444C:("D_8081444C","UNK_TYPE1","",0x1), - 0x80814464:("D_80814464","UNK_TYPE4","",0x4), - 0x8081448C:("D_8081448C","UNK_TYPE4","",0x4), - 0x808144BC:("D_808144BC","UNK_TYPE2","",0x2), - 0x808144C0:("D_808144C0","UNK_TYPE2","",0x2), - 0x808144C4:("D_808144C4","UNK_TYPE2","",0x2), - 0x808144C8:("D_808144C8","UNK_TYPE2","",0x2), - 0x808144CC:("D_808144CC","UNK_TYPE2","",0x2), - 0x808144D0:("D_808144D0","UNK_TYPE2","",0x2), - 0x808144D4:("D_808144D4","UNK_TYPE2","",0x2), - 0x808144D8:("D_808144D8","UNK_TYPE2","",0x2), - 0x808144DC:("D_808144DC","UNK_TYPE1","",0x1), - 0x808144E8:("D_808144E8","UNK_TYPE1","",0x1), - 0x80814510:("D_80814510","Gfx","[5]",0x28), - 0x80814538:("D_80814538","UNK_TYPE2","",0x2), - 0x80814548:("D_80814548","UNK_TYPE2","",0x2), - 0x80814550:("fileChooseSkyboxRotation","s16","",0x2), - 0x80814554:("D_80814554","UNK_TYPE1","",0x1), - 0x8081455C:("D_8081455C","UNK_TYPE1","",0x1), + 0x80814464:("gOptionsMenuHeaders","UNK_TYPE4","",0x4), + 0x8081448C:("gOptionsMenuSettings","UNK_TYPE4","",0x4), + 0x808144BC:("sCursorPrimRed","UNK_TYPE2","",0x2), + 0x808144C0:("sCursorPrimGreen","UNK_TYPE2","",0x2), + 0x808144C4:("sCursorPrimBlue","UNK_TYPE2","",0x2), + 0x808144C8:("sCursorEnvRed","UNK_TYPE2","",0x2), + 0x808144CC:("sCursorEnvGreen","UNK_TYPE2","",0x2), + 0x808144D0:("sCursorEnvBlue","UNK_TYPE2","",0x2), + 0x808144D4:("sCursorPulseDir","UNK_TYPE2","",0x2), + 0x808144D8:("sCursorFlashTimer","UNK_TYPE2","",0x2), + 0x808144DC:("sCursorPrimColors","UNK_TYPE1","",0x1), + 0x808144E8:("sCursorEnvColors","UNK_TYPE1","",0x1), + 0x80814510:("sScreenFillSetupDL","Gfx","[5]",0x28), + 0x80814538:("sFileInfoBoxPartWidths","UNK_TYPE2","",0x2), + 0x80814548:("sWindowContentColors","UNK_TYPE2","",0x2), + 0x80814550:("sFileSelectSkyboxRotation","s16","",0x2), + 0x80814554:("sWalletFirstDigit","UNK_TYPE1","",0x1), + 0x8081455C:("sEmptyName","UNK_TYPE1","",0x1), 0x80814564:("D_80814564","UNK_TYPE2","",0x2), - 0x80814568:("D_80814568","UNK_TYPE","[45]",0xb4), - 0x8081461C:("D_8081461C","s16","[2]",0x4), + 0x80814568:("sConfigModeUpdateFuncs","UNK_TYPE","[45]",0xb4), + 0x8081461C:("sCursorAlphaTargets","s16","[2]",0x4), 0x80814620:("D_80814620","UNK_TYPE2","",0x2), 0x80814628:("D_80814628","UNK_TYPE2","",0x2), 0x80814630:("D_80814630","UNK_TYPE2","",0x2), @@ -4592,24 +4592,24 @@ 0x8081464C:("D_8081464C","UNK_TYPE1","",0x1), 0x80814650:("D_80814650","UNK_TYPE1","",0x1), 0x80814654:("D_80814654","UNK_TYPE1","",0x1), - 0x8081465C:("D_8081465C","UNK_TYPE4","",0x4), - 0x8081466C:("D_8081466C","UNK_TYPE1","",0x1), - 0x8081467C:("D_8081467C","UNK_TYPE1","",0x1), - 0x8081468C:("D_8081468C","UNK_TYPE4","",0x4), - 0x808146B4:("D_808146B4","UNK_TYPE1","",0x1), - 0x808146C4:("D_808146C4","UNK_TYPE1","",0x1), - 0x808146D8:("D_808146D8","UNK_TYPE1","",0x1), - 0x808146EC:("D_808146EC","UNK_TYPE2","",0x2), - 0x808146F8:("D_808146F8","UNK_TYPE2","",0x2), - 0x80814704:("D_80814704","UNK_TYPE4","",0x4), - 0x80814720:("D_80814720","UNK_TYPE1","",0x1), - 0x80814744:("D_80814744","UNK_TYPE1","",0x1), - 0x80814758:("D_80814758","UNK_TYPE4","",0x4), - 0x80814764:("D_80814764","UNK_TYPE4","",0x4), - 0x80814774:("D_80814774","UNK_TYPE1","",0x1), - 0x8081477C:("D_8081477C","UNK_TYPE","[8]",0x20), - 0x8081479C:("D_8081479C","UNK_TYPE","[3]",0xc), - 0x808147A8:("D_808147A8","UNK_TYPE","[3]",0xc), + 0x8081465C:("sFileSelRemainsTextures","UNK_TYPE4","",0x4), + 0x8081466C:("sFileSelDayENGTextures","UNK_TYPE1","",0x1), + 0x8081467C:("sFileSelHeartPieceTextures","UNK_TYPE1","",0x1), + 0x8081468C:("sHeartTextures","UNK_TYPE4","",0x4), + 0x808146B4:("sHealthToQuarterHeartCount","UNK_TYPE1","",0x1), + 0x808146C4:("sFileSelRupeePrimColors","UNK_TYPE1","",0x1), + 0x808146D8:("sFileSelRupeeEnvColors","UNK_TYPE1","",0x1), + 0x808146EC:("sHeartPrimColors","UNK_TYPE2","",0x2), + 0x808146F8:("sHeartEnvColors","UNK_TYPE2","",0x2), + 0x80814704:("sFileInfoBoxTextures","UNK_TYPE4","",0x4), + 0x80814720:("sTitleLabels","UNK_TYPE1","",0x1), + 0x80814744:("sWarningLabels","UNK_TYPE1","",0x1), + 0x80814758:("sFileButtonTextures","UNK_TYPE4","",0x4), + 0x80814764:("sActionButtonTextures","UNK_TYPE4","",0x4), + 0x80814774:("sFileYOffsets","UNK_TYPE1","",0x1), + 0x8081477C:("sSelectModeUpdateFuncs","UNK_TYPE","[8]",0x20), + 0x8081479C:("gFileSelectDrawFuncs","UNK_TYPE","[3]",0xc), + 0x808147A8:("gFileSelectUpdateFuncs","UNK_TYPE","[3]",0xc), 0x808147B4:("D_808147B4","UNK_TYPE4","",0x4), 0x808147C0:("D_808147C0","UNK_TYPE2","",0x2), 0x808147C8:("D_808147C8","UNK_TYPE2","",0x2), @@ -4622,7 +4622,7 @@ 0x808147EC:("D_808147EC","f32","",0x4), 0x808147F0:("D_808147F0","f32","",0x4), 0x80814E80:("D_80814E80","UNK_TYPE1","",0x1), - 0x80814E90:("D_80814E90","UNK_TYPE1","",0x1), + 0x80814E90:("sSelectedSetting","UNK_TYPE1","",0x1), 0x80815FF0:("D_80815FF0","u8","",0x1), 0x80815FF4:("sDayLeftTextures","TexturePtr","[4]",0x10), 0x80816004:("sDayRightTextures","TexturePtr","[4]",0x10), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 6713041f7..3d5839a69 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2316,21 +2316,21 @@ asm/non_matchings/code/z_sram_NES/Sram_OpenSave.s,Sram_OpenSave,0x80144E78,0x17D asm/non_matchings/code/z_sram_NES/func_8014546C.s,func_8014546C,0x8014546C,0x8B asm/non_matchings/code/z_sram_NES/func_80145698.s,func_80145698,0x80145698,0x4D asm/non_matchings/code/z_sram_NES/func_801457CC.s,func_801457CC,0x801457CC,0x36D -asm/non_matchings/code/z_sram_NES/func_80146580.s,func_80146580,0x80146580,0x2A -asm/non_matchings/code/z_sram_NES/func_80146628.s,func_80146628,0x80146628,0x11E +asm/non_matchings/code/z_sram_NES/Sram_EraseSave.s,Sram_EraseSave,0x80146580,0x2A +asm/non_matchings/code/z_sram_NES/Sram_CopySave.s,Sram_CopySave,0x80146628,0x11E asm/non_matchings/code/z_sram_NES/Sram_InitSave.s,Sram_InitSave,0x80146AA0,0xD6 -asm/non_matchings/code/z_sram_NES/func_80146DF8.s,func_80146DF8,0x80146DF8,0x12 +asm/non_matchings/code/z_sram_NES/Sram_WriteSaveOptionsToBuffer.s,Sram_WriteSaveOptionsToBuffer,0x80146DF8,0x12 asm/non_matchings/code/z_sram_NES/Sram_InitSram.s,Sram_InitSram,0x80146E40,0xC asm/non_matchings/code/z_sram_NES/Sram_Alloc.s,Sram_Alloc,0x80146E70,0x13 -asm/non_matchings/code/z_sram_NES/func_80146EBC.s,func_80146EBC,0x80146EBC,0xB +asm/non_matchings/code/z_sram_NES/Sram_SyncWriteToFlash.s,Sram_SyncWriteToFlash,0x80146EBC,0xB asm/non_matchings/code/z_sram_NES/Sram_SaveSpecialEnterClockTown.s,Sram_SaveSpecialEnterClockTown,0x80146EE8,0x1D asm/non_matchings/code/z_sram_NES/Sram_SaveSpecialNewDay.s,Sram_SaveSpecialNewDay,0x80146F5C,0x2B -asm/non_matchings/code/z_sram_NES/func_80147008.s,func_80147008,0x80147008,0x6 -asm/non_matchings/code/z_sram_NES/func_80147020.s,func_80147020,0x80147020,0x12 -asm/non_matchings/code/z_sram_NES/func_80147068.s,func_80147068,0x80147068,0x34 -asm/non_matchings/code/z_sram_NES/func_80147138.s,func_80147138,0x80147138,0x6 -asm/non_matchings/code/z_sram_NES/func_80147150.s,func_80147150,0x80147150,0x12 -asm/non_matchings/code/z_sram_NES/func_80147198.s,func_80147198,0x80147198,0x5F +asm/non_matchings/code/z_sram_NES/Sram_SetFlashPagesDefault.s,Sram_SetFlashPagesDefault,0x80147008,0x6 +asm/non_matchings/code/z_sram_NES/Sram_StartWriteToFlashDefault.s,Sram_StartWriteToFlashDefault,0x80147020,0x12 +asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashDefault.s,Sram_UpdateWriteToFlashDefault,0x80147068,0x34 +asm/non_matchings/code/z_sram_NES/Sram_SetFlashPagesOwlSave.s,Sram_SetFlashPagesOwlSave,0x80147138,0x6 +asm/non_matchings/code/z_sram_NES/Sram_StartWriteToFlashOwlSave.s,Sram_StartWriteToFlashOwlSave,0x80147150,0x12 +asm/non_matchings/code/z_sram_NES/Sram_UpdateWriteToFlashOwlSave.s,Sram_UpdateWriteToFlashOwlSave,0x80147198,0x5F asm/non_matchings/code/z_sram_NES/func_80147314.s,func_80147314,0x80147314,0x40 asm/non_matchings/code/z_sram_NES/func_80147414.s,func_80147414,0x80147414,0x3E asm/non_matchings/code/z_sram_NES/Sram_nop8014750C.s,Sram_nop8014750C,0x8014750C,0x5 From f92a61db27ed8ee213072df11169777c6794bc1b Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 6 Jun 2023 08:57:45 +1000 Subject: [PATCH 28/36] Misc Cleanup 3 (#1268) * begin more cleanup * more enums * typo * == * fix go.h * fix RaceDogInfo struct * PR Review * PR Suggestions * missed one * missed even more * fix params * fix number --- Makefile | 4 +-- include/z64.h | 18 +++++----- include/z64actor.h | 2 +- include/z64audio.h | 2 +- include/z64camera.h | 2 +- include/z64item.h | 2 +- include/z64math.h | 4 +-- include/z64player.h | 2 +- include/z64save.h | 4 +-- include/z64schedule.h | 4 +-- include/z64transition.h | 2 +- include/z_fireobj.h | 2 +- src/audio/code_8019AF00.c | 6 ++-- src/audio/lib/heap.c | 10 +++--- src/audio/lib/load.c | 8 ++--- src/boot_O2_g3/yaz0.c | 10 +++--- src/code/sys_cmpdma.c | 4 +-- src/code/z_draw.c | 6 ++-- src/code/z_eventmgr.c | 2 +- src/code/z_fbdemo_circle.c | 2 +- src/code/z_parameter.c | 10 +++--- src/code/z_player_lib.c | 8 ++--- src/code/z_room.c | 8 ++--- src/libultra/flash/osFlash.c | 4 +-- src/libultra/os/initialize.c | 10 +++--- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../actors/ovl_Bg_Breakwall/z_bg_breakwall.h | 6 ++-- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h | 8 ++--- .../ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h | 2 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 6 ++-- .../actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h | 6 ++-- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 6 ++-- .../z_bg_hakugin_switch.c | 2 +- .../z_bg_ikana_rotaryroom.c | 6 ++-- .../ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h | 10 +++--- .../actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.h | 2 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.h | 4 +-- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h | 2 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 4 +-- .../actors/ovl_Bg_Umajump/z_bg_umajump.h | 12 +++---- src/overlays/actors/ovl_Boss_02/z_boss_02.h | 6 ++-- src/overlays/actors/ovl_Boss_03/z_boss_03.h | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.h | 4 +-- .../actors/ovl_Demo_Moonend/z_demo_moonend.c | 4 +-- .../actors/ovl_Demo_Moonend/z_demo_moonend.h | 2 +- .../actors/ovl_Demo_Syoten/z_demo_syoten.h | 4 +-- .../actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c | 14 ++++---- src/overlays/actors/ovl_Dm_Al/z_dm_al.h | 4 +-- .../actors/ovl_Dm_Char01/z_dm_char01.h | 6 ++-- .../actors/ovl_Dm_Char02/z_dm_char02.c | 2 +- .../actors/ovl_Dm_Char05/z_dm_char05.h | 6 ++-- .../actors/ovl_Dm_Char08/z_dm_char08.c | 6 ++-- .../actors/ovl_Dm_Opstage/z_dm_opstage.h | 2 +- .../actors/ovl_Dm_Ravine/z_dm_ravine.h | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 10 +++--- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h | 2 +- src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c | 8 ++--- .../actors/ovl_Door_Shutter/z_door_shutter.c | 10 +++--- .../actors/ovl_Door_Warp1/z_door_warp1.h | 6 ++-- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h | 12 +++---- .../z_eff_kamejima_wave.c | 2 +- .../z_eff_kamejima_wave.h | 8 ++--- .../actors/ovl_Eff_Lastday/z_eff_lastday.c | 26 +++++++------- .../actors/ovl_Eff_Lastday/z_eff_lastday.h | 12 +++---- .../ovl_En_Akindonuts/z_en_akindonuts.h | 6 ++-- src/overlays/actors/ovl_En_Ani/z_en_ani.h | 8 ++--- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 4 +-- src/overlays/actors/ovl_En_Az/z_en_az.c | 2 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 12 +++---- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 4 +-- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +-- src/overlays/actors/ovl_En_Bee/z_en_bee.h | 4 +-- .../actors/ovl_En_Bigpamet/z_en_bigpamet.h | 6 ++-- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h | 10 +++--- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 2 +- src/overlays/actors/ovl_En_Bjt/z_en_bjt.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.h | 8 ++--- .../actors/ovl_En_Bombers/z_en_bombers.h | 6 ++-- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 6 ++-- .../actors/ovl_En_Bomjimb/z_en_bomjimb.h | 12 +++---- src/overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 2 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.h | 2 +- src/overlays/actors/ovl_En_Cow/z_en_cow.h | 6 ++-- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 30 ++++++++-------- src/overlays/actors/ovl_En_Daiku/z_en_daiku.h | 12 +++---- .../actors/ovl_En_Daiku2/z_en_daiku2.h | 6 ++-- .../actors/ovl_En_Dekunuts/z_en_dekunuts.h | 4 +-- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 10 +++--- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 12 +++---- src/overlays/actors/ovl_En_Dg/z_en_dg.h | 4 +-- src/overlays/actors/ovl_En_Dnk/z_en_dnk.h | 14 ++++---- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 2 +- src/overlays/actors/ovl_En_Dno/z_en_dno.h | 4 +-- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 2 +- src/overlays/actors/ovl_En_Dnp/z_en_dnp.h | 6 ++-- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.h | 12 +++---- src/overlays/actors/ovl_En_Door/z_en_door.c | 10 +++--- src/overlays/actors/ovl_En_Door/z_en_door.h | 2 +- .../actors/ovl_En_Dragon/z_en_dragon.c | 6 ++-- .../actors/ovl_En_Dragon/z_en_dragon.h | 2 +- .../actors/ovl_En_Egblock/z_en_egblock.c | 2 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 10 +++--- src/overlays/actors/ovl_En_Elf/z_en_elf.h | 16 ++++----- .../actors/ovl_En_Elfgrp/z_en_elfgrp.h | 6 ++-- .../actors/ovl_En_Encount1/z_en_encount1.h | 2 +- .../actors/ovl_En_Encount4/z_en_encount4.c | 6 ++-- .../actors/ovl_En_Estone/z_en_estone.h | 2 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 10 +++--- src/overlays/actors/ovl_En_Fall/z_en_fall.h | 2 +- src/overlays/actors/ovl_En_Fg/z_en_fg.h | 24 ++++++------- src/overlays/actors/ovl_En_Fish/z_en_fish.h | 6 ++-- .../actors/ovl_En_Fishing/z_en_fishing.c | 36 +++++++++---------- .../actors/ovl_En_Floormas/z_en_floormas.h | 6 ++-- src/overlays/actors/ovl_En_Fz/z_en_fz.h | 6 ++-- .../actors/ovl_En_Gakufu/z_en_gakufu.h | 4 +-- src/overlays/actors/ovl_En_Gb2/z_en_gb2.h | 6 ++-- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 4 +-- src/overlays/actors/ovl_En_Gg/z_en_gg.h | 2 +- src/overlays/actors/ovl_En_Giant/z_en_giant.h | 2 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 2 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.h | 20 +++++------ src/overlays/actors/ovl_En_Gk/z_en_gk.h | 6 ++-- src/overlays/actors/ovl_En_Go/z_en_go.h | 6 ++-- .../actors/ovl_En_Goroiwa/z_en_goroiwa.h | 24 ++++++------- .../ovl_En_Grasshopper/z_en_grasshopper.c | 10 +++--- .../ovl_En_Grasshopper/z_en_grasshopper.h | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.h | 6 ++-- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 4 +-- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 2 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 24 ++++++------- src/overlays/actors/ovl_En_Horse/z_en_horse.h | 2 +- .../z_en_horse_game_check.h | 6 ++-- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 3 +- src/overlays/actors/ovl_En_In/z_en_in.h | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 10 +++--- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 18 +++++----- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 10 +++--- .../actors/ovl_En_Karebaba/z_en_karebaba.h | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 4 +-- src/overlays/actors/ovl_En_Kusa/z_en_kusa.h | 4 +-- src/overlays/actors/ovl_En_Light/z_en_light.c | 6 ++-- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 4 +-- .../actors/ovl_En_Minifrog/z_en_minifrog.h | 6 ++-- .../actors/ovl_En_Minislime/z_en_minislime.c | 2 +- .../actors/ovl_En_Minislime/z_en_minislime.h | 8 ++--- .../actors/ovl_En_Mt_tag/z_en_mt_tag.c | 6 ++-- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- src/overlays/actors/ovl_En_Nb/z_en_nb.h | 2 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 2 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 6 ++-- src/overlays/actors/ovl_En_Niw/z_en_niw.h | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 16 ++++----- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 4 +-- src/overlays/actors/ovl_En_Owl/z_en_owl.h | 2 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 12 +++---- .../actors/ovl_En_Pametfrog/z_en_pametfrog.h | 20 +++++------ src/overlays/actors/ovl_En_Part/z_en_part.h | 10 +++--- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.h | 10 +++--- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 8 ++--- src/overlays/actors/ovl_En_Pp/z_en_pp.h | 2 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 2 +- src/overlays/actors/ovl_En_Pst/z_en_pst.h | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 14 ++++---- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 4 +-- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 8 ++--- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 4 +-- src/overlays/actors/ovl_En_Rat/z_en_rat.h | 2 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 4 +-- src/overlays/actors/ovl_En_Rd/z_en_rd.h | 2 +- src/overlays/actors/ovl_En_Rr/z_en_rr.h | 6 ++-- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 10 +++--- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c | 2 +- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.h | 4 +-- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 2 +- src/overlays/actors/ovl_En_Slime/z_en_slime.h | 2 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 4 +-- .../actors/ovl_En_Snowman/z_en_snowman.h | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.h | 4 +-- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 6 ++-- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 2 +- .../actors/ovl_En_Stream/z_en_stream.h | 4 +-- .../z_en_syateki_dekunuts.c | 4 +-- .../z_en_syateki_dekunuts.h | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 2 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 14 ++++---- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 6 ++-- src/overlays/actors/ovl_En_Test2/z_en_test2.c | 2 +- src/overlays/actors/ovl_En_Test2/z_en_test2.h | 6 ++-- src/overlays/actors/ovl_En_Test6/z_en_test6.h | 6 ++-- .../actors/ovl_En_Time_Tag/z_en_time_tag.h | 2 +- src/overlays/actors/ovl_En_Tite/z_en_tite.h | 6 ++-- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 6 ++-- .../actors/ovl_En_Torch2/z_en_torch2.h | 4 +-- .../actors/ovl_En_Viewer/z_en_viewer.c | 6 ++-- .../actors/ovl_En_Viewer/z_en_viewer.h | 8 ++--- .../actors/ovl_En_Wallmas/z_en_wallmas.h | 6 ++-- .../ovl_En_Water_Effect/z_en_water_effect.h | 2 +- .../ovl_En_Weather_Tag/z_en_weather_tag.h | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 18 +++++----- src/overlays/actors/ovl_En_Wiz/z_en_wiz.h | 2 +- .../actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h | 2 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.h | 6 ++-- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 4 +-- src/overlays/actors/ovl_En_Zod/z_en_zod.h | 8 ++--- .../actors/ovl_En_Zoraegg/z_en_zoraegg.h | 6 ++-- src/overlays/actors/ovl_En_Zos/z_en_zos.h | 6 ++-- .../actors/ovl_Item_B_Heart/z_item_b_heart.h | 6 ++-- src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h | 4 +-- .../actors/ovl_Obj_Armos/z_obj_armos.h | 6 ++-- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h | 10 +++--- .../actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c | 10 +++--- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.h | 2 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 4 +-- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 10 +++--- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.h | 6 ++-- .../ovl_Obj_Jgame_Light/z_obj_jgame_light.c | 6 ++-- .../ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c | 2 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 10 +++--- .../actors/ovl_Obj_Mure3/z_obj_mure3.c | 10 +++--- .../actors/ovl_Obj_Mure3/z_obj_mure3.h | 4 +-- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 12 +++---- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.h | 8 ++--- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h | 6 ++-- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Rotlift/z_obj_rotlift.h | 2 +- .../actors/ovl_Obj_Snowball/z_obj_snowball.c | 8 ++--- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 4 +-- .../ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 3 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.h | 6 ++-- .../ovl_Obj_Y2shutter/z_obj_y2shutter.h | 4 +-- .../actors/ovl_Oceff_Storm/z_oceff_storm.h | 2 +- .../actors/ovl_player_actor/z_player.c | 2 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c | 2 +- .../ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h | 2 +- .../z_eff_ss_fhg_flash.h | 36 +++++++++---------- .../ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c | 8 ++--- .../ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h | 4 +-- src/overlays/gamestates/ovl_select/z_select.h | 6 ++-- .../ovl_kaleido_scope/z_kaleido_collect.c | 2 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 2 +- 254 files changed, 765 insertions(+), 767 deletions(-) diff --git a/Makefile b/Makefile index 8782c02ad..89eeb21d2 100644 --- a/Makefile +++ b/Makefile @@ -122,8 +122,8 @@ OPTFLAGS := -O2 -g3 ASFLAGS := -march=vr4300 -32 -Iinclude MIPS_VERSION := -mips2 -# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Surpress the warnings with -woff. -CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(IINC) -nostdinc -Wab,-r4300_mul -woff 624,649,838,712,516 +# we support Microsoft extensions such as anonymous structs, which the compiler does support but warns for their usage. Suppress the warnings with -woff. +CFLAGS += -G 0 -non_shared -fullwarn -verbose -Xcpluscomm $(IINC) -nostdinc -Wab,-r4300_mul -woff 649,838,712,516 # Use relocations and abi fpr names in the dump OBJDUMP_FLAGS := --disassemble --reloc --disassemble-zeroes -Mreg-names=32 diff --git a/include/z64.h b/include/z64.h index a83001a01..6418b43ca 100644 --- a/include/z64.h +++ b/include/z64.h @@ -657,7 +657,7 @@ typedef struct { #define FLASHROM_REQUEST_WRITE 1 #define FLASHROM_REQUEST_READ 2 -enum fram_command { +typedef enum framCommand { /* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS Initializes fram to 0xFF in FRAM_MODE_ERASE Writes Contents in FLASHRAM_MODE_WRITE @@ -681,15 +681,15 @@ enum fram_command { FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000, /* unk */ FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000 -}; +} framCommand; -enum fram_mode { - FRAM_MODE_NOP = 0, - FRAM_MODE_ERASE, - FRAM_MODE_WRITE, - FRAM_MODE_READ, - FRAM_MODE_STATUS -}; +typedef enum framMode { + /* 0 */ FRAM_MODE_NOP, + /* 1 */ FRAM_MODE_ERASE, + /* 2 */ FRAM_MODE_WRITE, + /* 3 */ FRAM_MODE_READ, + /* 4 */ FRAM_MODE_STATUS +} framMode; typedef enum { /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, diff --git a/include/z64actor.h b/include/z64actor.h index f58716401..3051f2c6e 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -317,7 +317,7 @@ typedef struct EnAObj { typedef enum { /* 0 */ AOBJ_SIGNPOST_OBLONG, - /* 1 */ AOBJ_SIGNPOST_ARROW, + /* 1 */ AOBJ_SIGNPOST_ARROW } AObjType; #define AOBJ_GET_TEXTID(thisx) ((((thisx)->params >> 8) & 0xFF) | 0x300) diff --git a/include/z64audio.h b/include/z64audio.h index a37760566..9b077cf1a 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -105,7 +105,7 @@ typedef enum { /* 1 */ SOUNDMODE_HEADSET, /* 2 */ SOUNDMODE_SURROUND_EXTERNAL, /* 3 */ SOUNDMODE_MONO, - /* 4 */ SOUNDMODE_SURROUND, + /* 4 */ SOUNDMODE_SURROUND } SoundMode; typedef enum { diff --git a/include/z64camera.h b/include/z64camera.h index 54cf748ac..ccdee8811 100644 --- a/include/z64camera.h +++ b/include/z64camera.h @@ -361,7 +361,7 @@ typedef enum { /* 0x12 */ CAM_DATA_18, /* 0x13 */ CAM_DATA_19, /* 0x14 */ CAM_DATA_20, - /* 0x15 */ CAM_DATA_21, + /* 0x15 */ CAM_DATA_21 } CameraDataType; /*================================ diff --git a/include/z64item.h b/include/z64item.h index 345a22897..55cbb337f 100644 --- a/include/z64item.h +++ b/include/z64item.h @@ -19,7 +19,7 @@ typedef enum { /* 2 */ EQUIP_VALUE_SWORD_RAZOR, /* 3 */ EQUIP_VALUE_SWORD_GILDED, /* 4 */ EQUIP_VALUE_SWORD_DIETY, - /* 5 */ EQUIP_VALUE_SWORD_MAX, + /* 5 */ EQUIP_VALUE_SWORD_MAX } EquipValueSword; typedef enum { diff --git a/include/z64math.h b/include/z64math.h index 8df81454a..cd5c1db20 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -105,13 +105,13 @@ typedef VecSphGeo VecGeo; typedef enum { /* 0 */ OLIB_ADD_COPY, // Copy `b` to dest /* 1 */ OLIB_ADD_OFFSET, // Add `a` and `b` to dest, and also add the yaw of `a` to the dest - /* 2 */ OLIB_ADD, // Add `a` and `b` to dest + /* 2 */ OLIB_ADD // Add `a` and `b` to dest } OlibVec3fAdd; typedef enum { /* 0 */ OLIB_DIFF_COPY, // Copy `b` to dest /* 1 */ OLIB_DIFF_OFFSET, // Sub `a` and `b` to dest, and also subs the yaw of `a` to the dest - /* 2 */ OLIB_DIFF, // Sub `a` and `b` to dest + /* 2 */ OLIB_DIFF // Sub `a` and `b` to dest } OlibVec3fDiff; #define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t))) diff --git a/include/z64player.h b/include/z64player.h index d9c80384f..f10984216 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -962,7 +962,7 @@ typedef enum PlayerUnkAA5 { /* 2 */ PLAYER_UNKAA5_2, /* 3 */ PLAYER_UNKAA5_3, /* 4 */ PLAYER_UNKAA5_4, - /* 5 */ PLAYER_UNKAA5_5, + /* 5 */ PLAYER_UNKAA5_5 } PlayerUnkAA5; typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play); diff --git a/include/z64save.h b/include/z64save.h index cea6ffa46..805b62e5a 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -87,7 +87,7 @@ typedef enum { /* 5 */ TIMER_ID_ENV_HAZARD, // environmental hazard timer (underwater or hot room) /* 6 */ TIMER_ID_GORON_RACE_UNUSED, /* 7 */ TIMER_ID_MAX, - /* 99 */ TIMER_ID_NONE = 99, + /* 99 */ TIMER_ID_NONE = 99 } TimerId; typedef enum { @@ -1569,7 +1569,7 @@ typedef enum { /* 0 */ DUNGEON_INDEX_WOODFALL_TEMPLE, /* 1 */ DUNGEON_INDEX_SNOWHEAD_TEMPLE, /* 2 */ DUNGEON_INDEX_GREAT_BAY_TEMPLE, - /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE, // Also applies to Inverted Stone Tower Temple + /* 3 */ DUNGEON_INDEX_STONE_TOWER_TEMPLE // Also applies to Inverted Stone Tower Temple } DungeonIndex; void Sram_ActivateOwl(u8 owlId); diff --git a/include/z64schedule.h b/include/z64schedule.h index f3a703f3c..07a942e90 100644 --- a/include/z64schedule.h +++ b/include/z64schedule.h @@ -50,13 +50,13 @@ typedef enum { /* 0x0F */ SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_S, // Branches if the current time is less than the command time, short range branch /* 0x10 */ SCHEDULE_CMD_ID_CHECK_BEFORE_TIME_L, // Branches if the current time is less than the command time, long range branch /* 0x11 */ SCHEDULE_CMD_ID_BRANCH_S, // Always branch, short range branch - /* 0x12 */ SCHEDULE_CMD_ID_BRANCH_L, // Always branch, long range branch + /* 0x12 */ SCHEDULE_CMD_ID_BRANCH_L // Always branch, long range branch } ScheduleCommandId; typedef enum { /* 0 */ SCHEDULE_CHECK_MISC_ROOM_KEY, /* 1 */ SCHEDULE_CHECK_MISC_LETTER_TO_KAFEI, - /* 2 */ SCHEDULE_CHECK_MISC_MASK_ROMANI, + /* 2 */ SCHEDULE_CHECK_MISC_MASK_ROMANI } ScheduleCheckMisc; typedef struct { diff --git a/include/z64transition.h b/include/z64transition.h index e223d9b58..fe6027a9f 100644 --- a/include/z64transition.h +++ b/include/z64transition.h @@ -68,7 +68,7 @@ typedef struct { typedef enum { /* 1 */ TRANS_INSTANCE_TYPE_FILL_OUT = 1, - /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN, + /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN } TransitionInstanceType; #define TRANS_INSTANCE_TYPE_FADE_FLASH 3 diff --git a/include/z_fireobj.h b/include/z_fireobj.h index 7bd58d80a..6fe0639bc 100644 --- a/include/z_fireobj.h +++ b/include/z_fireobj.h @@ -61,7 +61,7 @@ typedef enum FireState { /* 0 */ FIRE_STATE_GROWING, /* 1 */ FIRE_STATE_SHRINKING, /* 2 */ FIRE_STATE_FULLY_LIT, - /* 3 */ FIRE_STATE_NOT_LIT, + /* 3 */ FIRE_STATE_NOT_LIT } FireState; #define FIRE_FLAG_WATER_EXTINGUISHABLE (1 << 0) diff --git a/src/audio/code_8019AF00.c b/src/audio/code_8019AF00.c index e88135b8d..40c457cb3 100644 --- a/src/audio/code_8019AF00.c +++ b/src/audio/code_8019AF00.c @@ -9,7 +9,7 @@ typedef struct { /* 0x0 */ Vec3f* pos; /* 0x4 */ f32 freqScale; /* 0x8 */ s8 reverbAdd; -} SfxSettings; // size = 0x9 +} SfxSettings; // size = 0xC typedef struct { /* 0x0 */ f32 volume; @@ -20,7 +20,7 @@ typedef struct { /* 0xB */ u8 filter; /* 0xC */ u8 combFilterGain; /* 0xD */ u8 zVolume; -} SfxChannelState; // size = 0xE +} SfxChannelState; // size = 0x10 typedef enum { /* 0x0 */ SFX_CHANNEL_PLAYER0, // SfxPlayerBank @@ -50,7 +50,7 @@ typedef enum { /* 0x4 */ SEQ_PLAYER_IO_PORT_4, /* 0x5 */ SEQ_PLAYER_IO_PORT_5, /* 0x6 */ SEQ_PLAYER_IO_PORT_6, - /* 0x7 */ SEQ_PLAYER_IO_PORT_7, + /* 0x7 */ SEQ_PLAYER_IO_PORT_7 } SeqPlayerIOPort; typedef struct { diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 1ea26952b..52533da4d 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1386,11 +1386,11 @@ void AudioHeap_DiscardSampleCaches(void) { } typedef struct { - uintptr_t oldAddr; - uintptr_t newAddr; - size_t size; - u8 newMedium; -} StorageChange; + /* 0x0 */ uintptr_t oldAddr; + /* 0x4 */ uintptr_t newAddr; + /* 0x8 */ size_t size; + /* 0xC */ u8 newMedium; +} StorageChange; // size = 0x10 void AudioHeap_ChangeStorage(StorageChange* change, Sample* sample) { if ((sample != NULL) && ((sample->medium == change->newMedium) || (D_801FD120 != 1)) && diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index 7df46952b..8016e9b6a 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -80,10 +80,10 @@ typedef enum { #define OS_MESG_PRI_HIGH 1 typedef struct { - u16 numInstruments; - u16 numDrums; - u16 numSfx; -} UnloadedFonts; + /* 0x0 */ u16 numInstruments; + /* 0x2 */ u16 numDrums; + /* 0x4 */ u16 numSfx; +} UnloadedFonts; // size = 0x6 OSMesgQueue sScriptLoadQueue; OSMesg sScriptLoadMesgBuf[0x10]; diff --git a/src/boot_O2_g3/yaz0.c b/src/boot_O2_g3/yaz0.c index aa7ecdfe1..76f990659 100644 --- a/src/boot_O2_g3/yaz0.c +++ b/src/boot_O2_g3/yaz0.c @@ -58,11 +58,11 @@ void* Yaz0_NextDMA(void* curSrcPos) { } typedef struct { - /* 0x00 */ u32 magic; // Yaz0 - /* 0x04 */ u32 decSize; - /* 0x08 */ u32 compInfoOffset; // only used in mio0 - /* 0x0C */ u32 uncompDataOffset; // only used in mio0 -} Yaz0Header; // size = 0x10 + /* 0x0 */ u32 magic; // Yaz0 + /* 0x4 */ u32 decSize; + /* 0x8 */ u32 compInfoOffset; // only used in mio0 + /* 0xC */ u32 uncompDataOffset; // only used in mio0 +} Yaz0Header; // size = 0x10 #define YAZ0_MAGIC 0x59617A30 // "Yaz0" diff --git a/src/code/sys_cmpdma.c b/src/code/sys_cmpdma.c index b2a17d547..715892b49 100644 --- a/src/code/sys_cmpdma.c +++ b/src/code/sys_cmpdma.c @@ -2,7 +2,7 @@ #include "system_malloc.h" typedef struct { - union { + /* 0x0 */ union { u32 dmaWord[2]; u32 dataStart; u32 dataSize; @@ -11,7 +11,7 @@ typedef struct { u32 end; } offset; }; -} CmpDmaBuffer; +} CmpDmaBuffer; // size = 0x8 CmpDmaBuffer sDmaBuffer; diff --git a/src/code/z_draw.c b/src/code/z_draw.c index ace56a965..e6a814e2a 100644 --- a/src/code/z_draw.c +++ b/src/code/z_draw.c @@ -115,9 +115,9 @@ void GetItem_DrawWallet(PlayState* play, s16 drawId); void GetItem_DrawRemains(PlayState* play, s16 drawId); typedef struct { - /* 0x00 */ void (*drawFunc)(PlayState*, s16); - /* 0x04 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*) -} DrawItemTableEntry; // size = 0x24 + /* 0x0 */ void (*drawFunc)(PlayState*, s16); + /* 0x4 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*) +} DrawItemTableEntry; // size = 0x24 static DrawItemTableEntry sDrawItemTable[] = { // GID_BOTTLE, OBJECT_GI_BOTTLE diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c index e3defb402..121957396 100644 --- a/src/code/z_eventmgr.c +++ b/src/code/z_eventmgr.c @@ -36,7 +36,7 @@ ActorCutscene sGlobalCutsceneList[] = { typedef enum { /* 0 */ CS_START_0, /* 1 */ CS_START_1, - /* 2 */ CS_START_2, + /* 2 */ CS_START_2 } ActorCutsceneStartMethod; typedef struct { diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index addfe6b67..185373e06 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -2,7 +2,7 @@ typedef enum { /* 0 */ TRANS_CIRCLE_DIR_IN, - /* 1 */ TRANS_CIRCLE_DIR_OUT, + /* 1 */ TRANS_CIRCLE_DIR_OUT } TransitionCircleDirection; Gfx sTransCircleSetupDL[] = { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index f8f28f4b8..e63c9d8e5 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -23,11 +23,11 @@ typedef enum { #define DO_ACTION_TEX_SIZE ((DO_ACTION_TEX_WIDTH * DO_ACTION_TEX_HEIGHT) / 2) // (sizeof(gCheckDoActionENGTex)) typedef struct { - /* 0x00 */ u8 scene; - /* 0x01 */ u8 flags1; - /* 0x02 */ u8 flags2; - /* 0x03 */ u8 flags3; -} RestrictionFlags; + /* 0x0 */ u8 scene; + /* 0x1 */ u8 flags1; + /* 0x2 */ u8 flags2; + /* 0x3 */ u8 flags3; +} RestrictionFlags; // size = 0x4 Input sPostmanTimerInput[MAXCONTROLLERS]; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 44b1fd986..2c0a79d21 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -270,7 +270,7 @@ void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) { typedef struct { /* 0x0 */ Color_RGB8 color; /* 0x4 */ Gfx* dList; -} struct_801BFDD0; // size = 0x08 +} struct_801BFDD0; // size = 0x8 struct_801BFDD0 D_801BFDD0[] = { { { 180, 200, 255 }, gLinkGoronCurledDL }, @@ -1643,9 +1643,9 @@ TexturePtr sPlayerMouthTextures[PLAYER_MOUTH_MAX] = { }; typedef struct PlayerFaceIndices { - /* 0x00 */ u8 eyeIndex; - /* 0x01 */ u8 mouthIndex; -} PlayerFaceIndices; // size = 0x02 + /* 0x0 */ u8 eyeIndex; + /* 0x1 */ u8 mouthIndex; +} PlayerFaceIndices; // size = 0x2 PlayerFaceIndices sPlayerFaces[] = { { PLAYER_EYES_OPEN, PLAYER_MOUTH_CLOSED }, // PLAYER_FACE_0 diff --git a/src/code/z_room.c b/src/code/z_room.c index 9bc6e12ee..78eb5f98e 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -53,10 +53,10 @@ typedef enum { } RoomCullableDebugMode; typedef struct RoomShapeCullableEntryLinked { - /* 0x00 */ RoomShapeCullableEntry* entry; - /* 0x04 */ f32 boundsNearZ; - /* 0x08 */ struct RoomShapeCullableEntryLinked* prev; - /* 0x0C */ struct RoomShapeCullableEntryLinked* next; + /* 0x0 */ RoomShapeCullableEntry* entry; + /* 0x4 */ f32 boundsNearZ; + /* 0x8 */ struct RoomShapeCullableEntryLinked* prev; + /* 0xC */ struct RoomShapeCullableEntryLinked* next; } RoomShapeCullableEntryLinked; // size = 0x10 #define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 128 diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index cd4420c4a..f8649f4fd 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -10,8 +10,8 @@ s32 __osFlashVersion; UNK_TYPE1 D_801FD0FC[0x14]; typedef enum { - FLASH_OLD, - FLASH_NEW, + /* 0 */ FLASH_OLD, + /* 1 */ FLASH_NEW } FlashVersion; u32 osFlashGetAddr(u32 pageNum) { diff --git a/src/libultra/os/initialize.c b/src/libultra/os/initialize.c index 776191227..4fabb4c4d 100644 --- a/src/libultra/os/initialize.c +++ b/src/libultra/os/initialize.c @@ -3,11 +3,11 @@ #define COLD_RESET 0 typedef struct { - /* 0x0 */ u32 ins_00; // lui k0, 0x8000 - /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0 - /* 0x8 */ u32 ins_08; // jr k0 ; __osException - /* 0xC */ u32 ins_0C; // nop -} struct_exceptionPreamble; + /* 0x0 */ u32 ins_00; // lui k0, 0x8000 + /* 0x4 */ u32 ins_04; // addiu k0, k0, 0x39E0 + /* 0x8 */ u32 ins_08; // jr k0 ; __osException + /* 0xC */ u32 ins_0C; // nop +} struct_exceptionPreamble; // size = 0x10 u64 osClockRate = OS_CLOCK_RATE; s32 osViClock = VI_NTSC_CLOCK; diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index ef35a34ed..737d480ad 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -60,7 +60,7 @@ typedef struct { /* 0x14 */ BgBreakwallUnkFunc unk_14; /* 0x18 */ BgBreakwallUnkFunc2 unk_18; /* 0x1C */ ActorFunc unk_1C; -} BgBreakwallStruct; +} BgBreakwallStruct; // size = 0x20 BgBreakwallStruct D_808B8140[] = { { OBJECT_OMOYA_OBJ, object_omoya_obj_DL_0001A0, NULL, NULL, NULL, func_808B7380, func_808B77D0, NULL }, diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h index bcdda2327..c332fe82c 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.h @@ -12,11 +12,11 @@ typedef void (*BgBreakwallUnkFunc2)(struct BgBreakwall*, PlayState*); #define BGBREAKWALL_GET_F(thisx) ((thisx)-> params & 0xF) #define BGBREAKWALL_SWITCHFLAG(thisx) (((thisx)-> params & 0xFE00) >> 9) -enum { +typedef enum { /* 7 */ BGBREAKWALL_F_7 = 7, /* 9 */ BGBREAKWALL_F_9 = 9, - /* 11 */ BGBREAKWALL_F_11 = 11, -}; + /* 11 */ BGBREAKWALL_F_11 = 11 +} BgBreakwallParam; typedef struct BgBreakwall { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h index afea1bf0d..d59bfd3ea 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.h @@ -9,10 +9,10 @@ struct BgCtowerGear; #define BGCTOWERGEAR_GET_TYPE(thisx) ((thisx)->params & 3) typedef enum { - /* 0x0 */ BGCTOWERGEAR_CEILING_COG, - /* 0x1 */ BGCTOWERGEAR_CENTER_COG, - /* 0x2 */ BGCTOWERGEAR_WATER_WHEEL, - /* 0x3 */ BGCTOWERGEAR_ORGAN + /* 0 */ BGCTOWERGEAR_CEILING_COG, + /* 1 */ BGCTOWERGEAR_CENTER_COG, + /* 2 */ BGCTOWERGEAR_WATER_WHEEL, + /* 3 */ BGCTOWERGEAR_ORGAN } BgCtowerGearType; typedef struct BgCtowerGear { diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h index 52a905ed5..a06934669 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h +++ b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.h @@ -11,7 +11,7 @@ typedef enum { /* 0 */ BGCTOWERROT_CORRIDOR, /* 1 */ BGCTOWERROT_STONE_DOOR_MAIN, // Main door controls cutscene flow (updating Link fields and playing sounds). // It is the one on the left when entering from the Lost Woods - /* 2 */ BGCTOWERROT_STONE_DOOR, + /* 2 */ BGCTOWERROT_STONE_DOOR } BgCtowerRotType; typedef struct BgCtowerRot { diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c index de7e7eb32..6d13f4ac3 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c @@ -34,9 +34,9 @@ void func_80A2B308(Actor* thisx, PlayState* play); BgDblueMovebg* D_80A2BBF0; typedef struct { - u8 unk_00; - u8 unk_01; -} BgDblueMovebgUnkStruct; + /* 0x0 */ u8 unk_00; + /* 0x1 */ u8 unk_01; +} BgDblueMovebgUnkStruct; // size = 0x2 BgDblueMovebgUnkStruct D_80A2BBF4; diff --git a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h index af5a29923..bf5300758 100644 --- a/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h +++ b/src/overlays/actors/ovl_Bg_Fire_Wall/z_bg_fire_wall.h @@ -8,9 +8,9 @@ struct BgFireWall; typedef void (*BgFireWallActionFunc)(struct BgFireWall*, PlayState*); typedef enum { - /* 0 */ BGFIREWALL_PARAMS_0, - /* 1 */ BGFIREWALL_PARAMS_1, -} BgFireWallParams; + /* 0 */ BGFIREWALL_PARAM_0, + /* 1 */ BGFIREWALL_PARAM_1 +} BgFireWallParam; typedef struct BgFireWall { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c index 942a544ff..66666b82b 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c @@ -52,9 +52,9 @@ ActorInit Bg_Hakugin_Post_InitVars = { }; typedef struct { - f32 unk_00; - u8 unk_04; -} BgHakuginPostUnkStruct3; + /* 0x0 */ f32 unk_00; + /* 0x4 */ u8 unk_04; +} BgHakuginPostUnkStruct3; // size = 0x8 static BgHakuginPostUnkStruct3 D_80A9D880[] = { { 1200.0f, false }, { 600.0f, false }, { 900.0f, false }, { 870.0f, false }, diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c index bcc662c9f..2d8fc2683 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c @@ -78,7 +78,7 @@ typedef struct { /* 0x0C */ f32 unk_C; /* 0x10 */ Gfx* unk_10; /* 0x14 */ u8 unk_14; -} BgHakuginSwitchStruct; +} BgHakuginSwitchStruct; // size = 0x18 BgHakuginSwitchStruct D_80B1688C[] = { { -156.0f, -178.0f, 6.0f, 10.0f, object_goronswitch_DL_000268, 0xB4 }, diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c index 8a90a6809..ad2d9fbdd 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c @@ -116,9 +116,9 @@ Vec3f D_80B8216C = { 225.0f, -280.0f, -210.0f }; Vec3f D_80B82178 = { -255.0f, -280.0f, 210.0f }; typedef struct { - /* 0x00 */ s8 unk_00; - /* 0x01 */ s8 unk_01; - /* 0x04 */ Vec3f unk_04; + /* 0x0 */ s8 unk_00; + /* 0x1 */ s8 unk_01; + /* 0x4 */ Vec3f unk_04; } BgIkanaRotaryroomStruct4; // size = 0x10 BgIkanaRotaryroomStruct4 D_80B82184[2][2] = { diff --git a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h index beeeb0b81..643be076c 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h +++ b/src/overlays/actors/ovl_Bg_Iknv_Doukutu/z_bg_iknv_doukutu.h @@ -9,11 +9,11 @@ typedef void (*BgIknvDoukutuActionFunc)(struct BgIknvDoukutu*, PlayState*); #define BGIKNVDOUKUTU_GET_F(thisx) ((thisx)->params & 0xF) -enum { - BGIKNVDOUKUTU_F_0, - BGIKNVDOUKUTU_F_1, - BGIKNVDOUKUTU_F_2, -}; +typedef enum { + /* 0 */ BGIKNVDOUKUTU_F_0, + /* 1 */ BGIKNVDOUKUTU_F_1, + /* 2 */ BGIKNVDOUKUTU_F_2 +} BgIknvDoukutuParam; typedef struct BgIknvDoukutu { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h index a5c01165d..266ec81f2 100644 --- a/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h +++ b/src/overlays/actors/ovl_Bg_Iknv_Obj/z_bg_iknv_obj.h @@ -19,7 +19,7 @@ typedef struct BgIknvObj { typedef enum { /* 0 */ IKNV_OBJ_WATERWHEEL, /* 1 */ IKNV_OBJ_RAISED_DOOR, // defunct door covering entrance to Stone Tower - /* 2 */ IKNV_OBJ_SAKON_DOOR, // door to Sakon's Hideout + /* 2 */ IKNV_OBJ_SAKON_DOOR // door to Sakon's Hideout } BgIknvObjType; #endif // Z_BG_IKNV_OBJ_H diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h index e4cd15c15..f920c18eb 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.h @@ -21,7 +21,7 @@ typedef enum { /* 0 */ LADDER_SIZE_12RUNG, /* 1 */ LADDER_SIZE_16RUNG, /* 2 */ LADDER_SIZE_20RUNG, - /* 3 */ LADDER_SIZE_24RUNG, + /* 3 */ LADDER_SIZE_24RUNG } BgLadderSize; #endif // Z_BG_LADDER_H diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h index e6d752c28..cae36be27 100644 --- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h +++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.h @@ -12,8 +12,8 @@ typedef void (*BgLastBwallActionFunc)(struct BgLastBwall*, PlayState*); #define BGLASTBWALL_GET_TYPE(thisx) (((thisx)->params >> 0xC) & 0xF) typedef enum { - BGLASTBWALL_TYPE_0 = 0, - BGLASTBWALL_TYPE_1 = 1, + /* 0 */ BGLASTBWALL_TYPE_0, + /* 1 */ BGLASTBWALL_TYPE_1 } BgLastBwallType; typedef struct BgLastBwall { diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h index 0e377f539..d9f4a1ece 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.h @@ -9,7 +9,7 @@ typedef enum { /* 0 */ BG_NUMA_HANA_TYPE_NORMAL, - /* 1 */ BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION, + /* 1 */ BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION } BgNumaHanaType; struct BgNumaHana; diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 119c3854a..e23504231 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -23,8 +23,8 @@ void func_80ACAE5C(BgOpenShutter* this, PlayState* play); void func_80ACAEF0(BgOpenShutter* this, PlayState* play); typedef enum { - /* 0x1 */ BGOPENSHUTTER_DOOR_OPEN = 1, - /* 0x2 */ BGOPENSHUTTER_DOOR_CLOSED, + /* 1 */ BGOPENSHUTTER_DOOR_OPEN = 1, + /* 2 */ BGOPENSHUTTER_DOOR_CLOSED } BGOpenShutterDoorState; ActorInit Bg_Open_Shutter_InitVars = { diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h index fe29e34cb..ae35ac98c 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.h @@ -7,12 +7,12 @@ #define BG_UMAJUMP_GET_TYPE(thisx) ((thisx)->params & 0xFF) typedef enum { - BG_UMAJUMP_TYPE_1 = 1, - BG_UMAJUMP_TYPE_2, - BG_UMAJUMP_TYPE_3, - BG_UMAJUMP_TYPE_4, - BG_UMAJUMP_TYPE_5, - BG_UMAJUMP_TYPE_6, + /* 1 */ BG_UMAJUMP_TYPE_1 = 1, + /* 2 */ BG_UMAJUMP_TYPE_2, + /* 3 */ BG_UMAJUMP_TYPE_3, + /* 4 */ BG_UMAJUMP_TYPE_4, + /* 5 */ BG_UMAJUMP_TYPE_5, + /* 6 */ BG_UMAJUMP_TYPE_6 } BgUmaJumpType; struct BgUmajump; diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.h b/src/overlays/actors/ovl_Boss_02/z_boss_02.h index e7efc1199..4fbd8b471 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.h +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.h @@ -27,15 +27,15 @@ typedef enum { /* 1 */ TWINMOLD_EFFECT_SAND, // The sand kicked up when Twinmold touches the ground /* 2 */ TWINMOLD_EFFECT_BLACK_DUST, // Unused /* 3 */ TWINMOLD_EFFECT_FRAGMENT, // The fragments that fly off when the parts of Twinmold explode - /* 4 */ TWINMOLD_EFFECT_FLASH, // The flashes of light that appear when the parts of Twinmold explode + /* 4 */ TWINMOLD_EFFECT_FLASH // The flashes of light that appear when the parts of Twinmold explode } TwinmoldEffectType; typedef enum { /* 0 */ TWINMOLD_RED, /* 35 */ TWINMOLD_BLUE = 35, /* 100 */ TWINMOLD_TAIL = 100, - /* 200 */ TWINMOLD_STATIC = 200, -} TwinmoldParams; + /* 200 */ TWINMOLD_STATIC = 200 +} TwinmoldParam; typedef struct Boss02 { /* 0x0000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.h b/src/overlays/actors/ovl_Boss_03/z_boss_03.h index a00dbacff..236606369 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.h +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.h @@ -31,7 +31,7 @@ typedef enum { /* 1 */ GYORG_EFFECT_BUBBLE, /* 2 */ GYORG_EFFECT_DROPLET, /* 3 */ GYORG_EFFECT_SPLASH, - /* 4 */ GYORG_EFFECT_WET_SPOT, + /* 4 */ GYORG_EFFECT_WET_SPOT } GyorgEffectType; typedef struct Boss03 { diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h index 971adb3bd..cbee0a148 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.h @@ -38,14 +38,14 @@ typedef struct DemoKankyo { typedef enum { /* 0 */ DEMO_KANKYO_TYPE_LOSTWOODS, /* 1 */ DEMO_KANKYO_TYPE_GIANTS, - /* 2 */ DEMO_KANKYO_TYPE_MOON, + /* 2 */ DEMO_KANKYO_TYPE_MOON } DemoKankyoType; typedef enum { /* 0 */ DEMO_KANKYO_STATE_INIT, /* 1 */ DEMO_KANKYO_STATE_SINGLE, /* 2 */ DEMO_KANKYO_STATE_SKYFISH, - /* 3 */ DEMO_KANKYO_STATE_DISABLED, + /* 3 */ DEMO_KANKYO_STATE_DISABLED } DemoKankyoStateType; #endif // Z_DEMO_KANKYO_H diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c index ba8d1b834..ec33a8a94 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.c @@ -38,7 +38,7 @@ void DemoMoonend_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.1f); this->actionFunc = DemoMoonend_DoNothing; - if (DEMOMOONEND_GET_PARAMS_F(thisx) == 1) { + if (DEMOMOONEND_GET_PARAM_F(thisx) == 1) { Actor_SetScale(&this->actor, 0.05f); Actor_SetScale(&this->actor, 6.0f); this->actor.draw = NULL; @@ -60,7 +60,7 @@ void DemoMoonend_Init(Actor* thisx, PlayState* play) { void DemoMoonend_Destroy(Actor* thisx, PlayState* play) { DemoMoonend* this = THIS; - if (DEMOMOONEND_GET_PARAMS_F(thisx) != 1) { + if (DEMOMOONEND_GET_PARAM_F(thisx) != 1) { func_8018349C(&this->skeletonInfo); } } diff --git a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h index fd229e004..b56c60a9b 100644 --- a/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h +++ b/src/overlays/actors/ovl_Demo_Moonend/z_demo_moonend.h @@ -8,7 +8,7 @@ struct DemoMoonend; typedef void (*DemoMoonendActionFunc)(struct DemoMoonend*, PlayState*); -#define DEMOMOONEND_GET_PARAMS_F(thisx) (((thisx)->params) & 0xF) +#define DEMOMOONEND_GET_PARAM_F(thisx) (((thisx)->params) & 0xF) typedef struct DemoMoonend { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h index 1997a2bc5..19f99bf2f 100644 --- a/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h +++ b/src/overlays/actors/ovl_Demo_Syoten/z_demo_syoten.h @@ -12,13 +12,13 @@ typedef void (*DemoSyotenActionFunc)(struct DemoSyoten*, PlayState*); #define DEMOSYOTEN_7E00_3F 0x3F -enum { +typedef enum { /* 0 */ DEMOSYOTEN_F_0, /* 1 */ DEMOSYOTEN_F_1, /* 2 */ DEMOSYOTEN_F_2, /* 3 */ DEMOSYOTEN_F_3, /* 4 */ DEMOSYOTEN_F_4 -}; +} DemoSyotenParam; typedef struct DemoSyoten { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index 56bc60a4d..2db282367 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -24,11 +24,11 @@ void DemoTreLgt_SetupAnimate(DemoTreLgt* this, PlayState* play, f32 frame); void DemoTreLgt_Animate(DemoTreLgt* this, PlayState* play); typedef struct { - f32 unk0; - f32 unk4; - f32 unk8; - f32 unkC; -} DemoTreLgtInfo; + /* 0x0 */ f32 unk0; + /* 0x4 */ f32 unk4; + /* 0x8 */ f32 unk8; + /* 0xC */ f32 unkC; +} DemoTreLgtInfo; // size = 0x10 static DemoTreLgtInfo D_808E1490[2] = { { 1.0f, 136.0f, 190.0f, 40.0f }, @@ -53,8 +53,8 @@ static TransformUpdateIndex* sBoxLightAnimations[] = { }; typedef enum { - /* 0x00 */ DEMO_TRE_LGT_ACTION_WAIT, // wait until animation is needed - /* 0x01 */ DEMO_TRE_LGT_ACTION_ANIMATE + /* 0 */ DEMO_TRE_LGT_ACTION_WAIT, // wait until animation is needed + /* 1 */ DEMO_TRE_LGT_ACTION_ANIMATE } DemoTreLgtAction; static DemoTreLgtActionFunc sActionFuncs[] = { diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h index 4114b9f9c..3c77ed6c3 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.h +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.h @@ -22,8 +22,8 @@ typedef struct DmAl { } DmAl; // size = 0x460 typedef enum { - /* 0x0 */ MADAME_AROMA_ANIMATION_0, - /* 0x1 */ MADAME_AROMA_ANIMATION_1 + /* 0 */ MADAME_AROMA_ANIMATION_0, + /* 1 */ MADAME_AROMA_ANIMATION_1 } DmAlAnimations; #endif // Z_DM_AL_H diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h index 6f29531a0..7ce8df7d2 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.h @@ -9,12 +9,12 @@ typedef void (*DmChar01ActionFunc)(struct DmChar01*, PlayState*); #define DMCHAR01_GET(thisx) ((thisx)->params) -enum { +typedef enum { /* 0 */ DMCHAR01_0, /* 1 */ DMCHAR01_1, /* 2 */ DMCHAR01_2, - /* 3 */ DMCHAR01_3, -}; + /* 3 */ DMCHAR01_3 +} DmChar01Param; typedef struct DmChar01 { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index f49820f03..2f933c751 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -35,7 +35,7 @@ typedef enum { /* 0 */ DMCHAR02_ANIM_HIT_GROUND, /* 1 */ DMCHAR02_ANIM_TURN_AROUND, /* 2 */ DMCHAR02_ANIM_JUGGLE, - /* 3 */ DMCHAR02_ANIM_FALL, + /* 3 */ DMCHAR02_ANIM_FALL } DmChar02Animation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h index 3bff39f6a..84f7c3e3e 100644 --- a/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h +++ b/src/overlays/actors/ovl_Dm_Char05/z_dm_char05.h @@ -9,7 +9,7 @@ typedef void (*DmChar05ActionFunc)(struct DmChar05*, PlayState*); #define DMCHAR05_GET(thisx) ((thisx)->params) -enum { +typedef enum { /* 0 */ DMCHAR05_0, /* 1 */ DMCHAR05_1, /* 2 */ DMCHAR05_2, @@ -22,8 +22,8 @@ enum { /* 9 */ DMCHAR05_9, /* 10 */ DMCHAR05_10, /* 11 */ DMCHAR05_11, - /* 12 */ DMCHAR05_12, -}; + /* 12 */ DMCHAR05_12 +} DmChar05Param; typedef struct DmChar05 { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index 9bd85db3a..9f5d18967 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -38,8 +38,8 @@ typedef enum { /* 2 */ TURTLE_EYEMODE_CLOSED, /* 3 */ TURTLE_EYEMODE_LOOK_STRAIGHT, /* 4 */ TURTLE_EYEMODE_UNUSED, - /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT, -} EyeMode; + /* 5 */ TURTLE_EYEMODE_LOOK_RIGHT +} TurtleEyeMode; typedef enum { /* 0 */ TURTLE_ANIM_IDLE, @@ -48,7 +48,7 @@ typedef enum { /* 3 */ TURTLE_ANIM_SPEAK1, /* 4 */ TURTLE_ANIM_COUGH, /* 5 */ TURTLE_ANIM_SPEAK2, - /* 6 */ TURTLE_ANIM_YAWN, + /* 6 */ TURTLE_ANIM_YAWN } TurtleAnimation; ActorInit Dm_Char08_InitVars = { diff --git a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h index 03fd093f3..964965cae 100644 --- a/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h +++ b/src/overlays/actors/ovl_Dm_Opstage/z_dm_opstage.h @@ -14,7 +14,7 @@ typedef enum { /* 0 */ DMOPSTAGE_TYPE_GROUND, /* 1 */ DMOPSTAGE_TYPE_ROOT_TREE, /* 2 */ DMOPSTAGE_TYPE_CUT_TREE, - /* 3 */ DMOPSTAGE_TYPE_STRAIGHT_TREE, + /* 3 */ DMOPSTAGE_TYPE_STRAIGHT_TREE } DmOpStageTypes; typedef struct DmOpstage { diff --git a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h index 01b9b52af..fbc5fcb8b 100644 --- a/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h +++ b/src/overlays/actors/ovl_Dm_Ravine/z_dm_ravine.h @@ -10,7 +10,7 @@ typedef void (*DmRavineActionFunc)(struct DmRavine*, PlayState*); typedef enum { /* 0 */ DM_RAVINE_STATE_INITIALIZED, /* 1 */ DM_RAVINE_STATE_ACTIVE, - /* 2 */ DM_RAVINE_STATE_PENDING_DEATH, + /* 2 */ DM_RAVINE_STATE_PENDING_DEATH } DmRavineState; typedef struct DmRavine { diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 01a5b8c82..1787bcf6f 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -108,7 +108,7 @@ typedef enum { /* 68 */ SK_ANIM_LOOK_LEFT_START, /* 69 */ SK_ANIM_LOOK_LEFT_LOOP, /* 70 */ SK_ANIM_SNIFF, - /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF, + /* 71 */ SK_ANIM_LAUGH_AFTER_SNIFF } SkullKidAnimation; typedef enum { @@ -116,7 +116,7 @@ typedef enum { /* 1 */ SK_MASK_TYPE_NORMAL, /* 2 */ SK_MASK_TYPE_GLOWING_EYES, /* 3 */ SK_MASK_TYPE_FADING_OUT, - /* 9 */ SK_MASK_TYPE_RAISED = 9, + /* 9 */ SK_MASK_TYPE_RAISED = 9 } SkullKidMaskType; typedef enum { @@ -127,19 +127,19 @@ typedef enum { /* 4 */ SK_HAND_TYPE_JUGGLING_OR_DROPPING_OCARINA, /* 5 */ SK_HAND_TYPE_HOLDING_MAJORAS_MASK_AND_FLUTE, /* 6 */ SK_HAND_TYPE_HOLDING_FLUTE, - /* 9 */ SK_HAND_TYPE_DEFAULT = 9, + /* 9 */ SK_HAND_TYPE_DEFAULT = 9 } SkullKidHandType; typedef enum { /* 0 */ SK_FADE_IN_STATE_NONE, /* 1 */ SK_FADE_IN_STATE_START, /* 2 */ SK_FADE_IN_STATE_INCREASE_FOG, - /* 3 */ SK_FADE_IN_STATE_INCREASE_ALPHA, + /* 3 */ SK_FADE_IN_STATE_INCREASE_ALPHA } SkullKidFadeInState; typedef enum { /* 0 */ SK_FADE_OUT_STATE_NONE, - /* 1 */ SK_FADE_OUT_STATE_FADING_OUT, + /* 1 */ SK_FADE_OUT_STATE_FADING_OUT } SkullKidFadeOutState; typedef enum { diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h index 0f58c534d..cc7ac89ea 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.h @@ -12,7 +12,7 @@ typedef void (*DmStkActionFunc)(struct DmStk*, PlayState*); typedef enum { /* 0 */ DM_STK_TYPE_SKULL_KID, - /* 1 */ DM_STK_TYPE_MAJORAS_MASK, + /* 1 */ DM_STK_TYPE_MAJORAS_MASK } DmStkType; typedef struct DmStk { diff --git a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c index e875d8ab8..30d1cb3ef 100644 --- a/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c +++ b/src/overlays/actors/ovl_Dm_Zl/z_dm_zl.c @@ -47,7 +47,7 @@ typedef enum { /* 4 */ ZELDA_ANIM_GIVING_OCARINA, /* 5 */ ZELDA_ANIM_PLAYING_OCARINA_START, /* 6 */ ZELDA_ANIM_PLAYING_OCARINA, - /* 7 */ ZELDA_ANIM_MAX, + /* 7 */ ZELDA_ANIM_MAX } DmZlAnimation; static TexturePtr sMouthTextures[] = { @@ -61,7 +61,7 @@ typedef enum { /* 0 */ ZELDA_MOUTH_NEUTRAL, /* 1 */ ZELDA_MOUTH_SMILING, /* 2 */ ZELDA_MOUTH_FROWNING, - /* 3 */ ZELDA_MOUTH_OPEN, + /* 3 */ ZELDA_MOUTH_OPEN } DmZlMouthTextures; static TexturePtr sEyeTextures[] = { @@ -81,7 +81,7 @@ typedef enum { /* 3 */ ZELDA_EYE_WIDE, /* 4 */ ZELDA_EYE_HAPPY, /* 5 */ ZELDA_EYE_OPEN_LOOKING_LEFT, - /* 6 */ ZELDA_EYE_OPEN_LOOKING_RIGHT, + /* 6 */ ZELDA_EYE_OPEN_LOOKING_RIGHT } DmZlEyeTextures; // Unused in MM @@ -92,7 +92,7 @@ typedef enum { /* 3 */ ZELDA_EYE_STATE_LOOKING_RIGHT, /* 4 */ ZELDA_EYE_STATE_WIDE, /* 5 */ ZELDA_EYE_STATE_HAPPY, - /* 6 */ ZELDA_EYE_STATE_CLOSED2, + /* 6 */ ZELDA_EYE_STATE_CLOSED2 } DmZlEyeStates; /** diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 88129eddc..7e202b0af 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -101,8 +101,8 @@ static InitChainEntry sInitChain[] = { }; typedef struct { - /* 0x00 */ s16 sceneId; - /* 0x02 */ u8 index; + /* 0x0 */ s16 sceneId; + /* 0x2 */ u8 index; } ShutterSceneInfo; // size = 0x4 ShutterSceneInfo D_808A2258[] = { @@ -115,9 +115,9 @@ ShutterSceneInfo D_808A2258[] = { }; typedef struct { - /* 0x00 */ s16 dungeonSceneId; - /* 0x02 */ s16 bossSceneId; - /* 0x04 */ u8 index; + /* 0x0 */ s16 dungeonSceneId; + /* 0x2 */ s16 bossSceneId; + /* 0x4 */ u8 index; } BossDoorInfo; // size = 0x6 BossDoorInfo D_808A22A0[] = { diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h index 1bc7e13bc..de67845ed 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h @@ -13,15 +13,15 @@ typedef void (*DoorWarp1ActionFunc)(struct DoorWarp1*, PlayState*); #define DOORWARP1_GET_FF00_2(thisx) ((thisx)->params & 0xFF00) #define DOORWARP1_GET_FF00_3(thisx) ((thisx)->params >> 8) -enum { +typedef enum { /* 0 */ ENDOORWARP1_FF_0, /* 1 */ ENDOORWARP1_FF_1, /* 2 */ ENDOORWARP1_FF_2, /* 3 */ ENDOORWARP1_FF_3, /* 4 */ ENDOORWARP1_FF_4, /* 5 */ ENDOORWARP1_FF_5, - /* 6 */ ENDOORWARP1_FF_6, -}; + /* 6 */ ENDOORWARP1_FF_6 +} DoorWarp1Param; typedef struct DoorWarp1 { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h index 38b724865..20a1df27e 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.h @@ -22,12 +22,12 @@ typedef struct EffDust { } EffDust; // size = 0x560 typedef enum { - /* 0x0 */ EFF_DUST_TYPE_0, - /* 0x1 */ EFF_DUST_TYPE_1, - /* 0x2 */ EFF_DUST_TYPE_SPIN_ATTACK_CHARGE, - /* 0x3 */ EFF_DUST_TYPE_3, - /* 0x4 */ EFF_DUST_TYPE_4, - /* 0x5 */ EFF_DUST_TYPE_5 + /* 0 */ EFF_DUST_TYPE_0, + /* 1 */ EFF_DUST_TYPE_1, + /* 2 */ EFF_DUST_TYPE_SPIN_ATTACK_CHARGE, + /* 3 */ EFF_DUST_TYPE_3, + /* 4 */ EFF_DUST_TYPE_4, + /* 5 */ EFF_DUST_TYPE_5 } EffDustType; #endif // Z_EFF_DUST_H diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c index d45d669a7..9b5290907 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.c @@ -49,7 +49,7 @@ void EffKamejimaWave_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.2f); this->actor.scale.y = 0.0f; - if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAMS_1) { + if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAM_1) { this->actionFunc = func_80BCEDE0; sVtxAlpha = 255; } else { diff --git a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h index c79537363..de5567ff0 100644 --- a/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h +++ b/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.h @@ -16,9 +16,9 @@ typedef struct EffKamejimaWave { /* 0x14C */ EffKamejimaWaveActionFunc actionFunc; } EffKamejimaWave; // size = 0x150 -typedef enum params { - /* 0x0 */ EFFKAMEJIMAWAVE_PARAMS_0, - /* 0x1 */ EFFKAMEJIMAWAVE_PARAMS_1 -} EffKamejimaWaveParams; +typedef enum EffKamejimaWaveParam { + /* 0 */ EFFKAMEJIMAWAVE_PARAM_0, + /* 1 */ EFFKAMEJIMAWAVE_PARAM_1 +} EffKamejimaWaveParam; #endif // Z_EFF_KAMEJIMA_WAVE_H diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c index a37f4ec07..8ec3ac959 100644 --- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c +++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.c @@ -22,10 +22,10 @@ void func_80BEBEB8(EffLastday* this, PlayState* play); void func_80BEBF78(EffLastday* this, PlayState* play); typedef enum EffLastDayAction { - /* 0x0 */ EFFLASTDAY_ACTION_NONE, - /* 0x1 */ EFFLASTDAY_ACTION_1, - /* 0x2 */ EFFLASTDAY_ACTION_2, - /* 0x3 */ EFFLASTDAY_ACTION_3 + /* 0 */ EFFLASTDAY_ACTION_NONE, + /* 1 */ EFFLASTDAY_ACTION_1, + /* 2 */ EFFLASTDAY_ACTION_2, + /* 3 */ EFFLASTDAY_ACTION_3 } EffLastDayAction; ActorInit Eff_Lastday_InitVars = { @@ -46,7 +46,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.1f); switch (EFFLASTDAY_GET_F(&this->actor)) { - case EFFLASTDAY_PARAMS_1: + case EFFLASTDAY_PARAM_1: this->dList = object_lastday_DL_000510; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000608); this->cueType = CS_CMD_ACTOR_CUE_508; @@ -54,7 +54,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 1.0f); break; - case EFFLASTDAY_PARAMS_2: + case EFFLASTDAY_PARAM_2: this->dList = object_lastday_DL_000210; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000308); this->cueType = CS_CMD_ACTOR_CUE_509; @@ -62,7 +62,7 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 0.5f); break; - case EFFLASTDAY_PARAMS_3: + case EFFLASTDAY_PARAM_3: this->dList = object_lastday_DL_000060; this->matAnim = Lib_SegmentedToVirtual(object_lastday_Matanimheader_000148); this->cueType = CS_CMD_ACTOR_CUE_510; @@ -79,13 +79,13 @@ void EffLastday_Init(Actor* thisx, PlayState* play2) { Actor_SetScale(&this->actor, 1.0f); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, - EFFLASTDAY_PARAMS_1); + EFFLASTDAY_PARAM_1); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, - EFFLASTDAY_PARAMS_2); + EFFLASTDAY_PARAM_2); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EFF_LASTDAY, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, - EFFLASTDAY_PARAMS_3); + EFFLASTDAY_PARAM_3); break; } } @@ -238,10 +238,10 @@ void EffLastday_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); switch (EFFLASTDAY_GET_F(thisx)) { - case EFFLASTDAY_PARAMS_1: - case EFFLASTDAY_PARAMS_2: + case EFFLASTDAY_PARAM_1: + case EFFLASTDAY_PARAM_2: break; - case EFFLASTDAY_PARAMS_3: + case EFFLASTDAY_PARAM_3: EffLastday_SetVtxAlpha(this->alpha); break; default: diff --git a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h index 0b5002863..9d2087ae1 100644 --- a/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h +++ b/src/overlays/actors/ovl_Eff_Lastday/z_eff_lastday.h @@ -19,11 +19,11 @@ typedef struct EffLastday { /* 0x154 */ EffLastdayActionFunc actionFunc; } EffLastday; // size = 0x158 -typedef enum EffLastDayParams { - /* 0x0 */ EFFLASTDAY_PARAMS_0, - /* 0x1 */ EFFLASTDAY_PARAMS_1, - /* 0x2 */ EFFLASTDAY_PARAMS_2, - /* 0x3 */ EFFLASTDAY_PARAMS_3 -} EffLastDayParams; +typedef enum EffLastDayParam { + /* 0 */ EFFLASTDAY_PARAM_0, + /* 1 */ EFFLASTDAY_PARAM_1, + /* 2 */ EFFLASTDAY_PARAM_2, + /* 3 */ EFFLASTDAY_PARAM_3 +} EffLastDayParam; #endif // Z_EFF_LASTDAY_H diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h index 4c8a4eb77..680fdbb75 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.h @@ -14,10 +14,10 @@ typedef void (*EnAkindonutsUnkFunc)(struct EnAkindonuts*, PlayState*); #define ENAKINDONUTS_PATH_INDEX_NONE 0x3F -enum { +typedef enum { /* 1 */ ENAKINDONUTS_3_1 = 1, - /* 2 */ ENAKINDONUTS_3_2, -}; + /* 2 */ ENAKINDONUTS_3_2 +} EnAkindonutsParam; typedef struct EnAkindonuts { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.h b/src/overlays/actors/ovl_En_Ani/z_en_ani.h index fcced964b..d0f2e6a12 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.h +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.h @@ -28,10 +28,10 @@ typedef struct EnAni { /* 0x2FC */ EnAniActionFunc actionFunc; } EnAni; // size = 0x300 -enum EnAniType { - /* else */ ANI_TYPE_STANDING, // unfinshed and unused - /* 1 */ ANI_TYPE_TREE_HANGING = 1, -}; +typedef enum EnAniType { + /* 1 */ ANI_TYPE_TREE_HANGING = 1, + /* 2 */ ANI_TYPE_STANDING // unfinshed and unused. Never read as 2, only taken as the "else" case from `ANI_TYPE_TREE_HANGING` +} EnAniType; #define ANI_GET_TYPE(thisx) ((thisx)->params & 0xFF) diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index 8d3c6b23b..dcd380256 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -50,14 +50,14 @@ typedef enum { /* 2 */ EN_AOB01_ANIM_LAUGH_LOOP, /* 3 */ EN_AOB01_ANIM_SURPRISE_START, /* 4 */ EN_AOB01_ANIM_SURPRISE_LOOP, - /* 5 */ EN_AOB01_ANIM_IDLE_2, + /* 5 */ EN_AOB01_ANIM_IDLE_2 } EnAob01Animation; typedef enum { /* 0 */ EN_AOB01_EYE_OPEN, /* 1 */ EN_AOB01_EYE_HALF, /* 2 */ EN_AOB01_EYE_CLOSED, - /* 3 */ EN_AOB01_EYE_MAX, + /* 3 */ EN_AOB01_EYE_MAX } EnAob01EyeTexture; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index b6c5df58d..f4a9005f6 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -72,7 +72,7 @@ typedef enum { /* 10 */ BEAVER_ANIM_TALK_TO_RIGHT, /* 11 */ BEAVER_ANIM_BOW, /* 12 */ BEAVER_ANIM_IDLE_FACE_LEFT, - /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT, + /* 13 */ BEAVER_ANIM_IDLE_FACE_RIGHT } BeaverAnimation; static AnimationSpeedInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c index df47a5f67..4ea6bc475 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -27,18 +27,18 @@ void EnBaguo_UpdateEffects(EnBaguo* this, PlayState* play); void EnBaguo_DrawEffects(EnBaguo* this, PlayState* play); typedef enum { - /* 0x0 */ NEJIRON_ACTION_INACTIVE, // The Nejiron is either underground or emerging from underground - /* 0x1 */ NEJIRON_ACTION_ACTIVE, // The Nejiron is above ground and actively chasing the player - /* 0x2 */ NEJIRON_ACTION_RETREATING, // The Nejiron is burrowing back underground - /* 0x3 */ NEJIRON_ACTION_EXPLODING // The Nejiron has detonated + /* 0 */ NEJIRON_ACTION_INACTIVE, // The Nejiron is either underground or emerging from underground + /* 1 */ NEJIRON_ACTION_ACTIVE, // The Nejiron is above ground and actively chasing the player + /* 2 */ NEJIRON_ACTION_RETREATING, // The Nejiron is burrowing back underground + /* 3 */ NEJIRON_ACTION_EXPLODING // The Nejiron has detonated } NejironAction; /** * These directions are relative to the Nejiron. */ typedef enum { - /* 0x0 */ NEJIRON_DIRECTION_RIGHT, - /* 0x1 */ NEJIRON_DIRECTION_LEFT + /* 0 */ NEJIRON_DIRECTION_RIGHT, + /* 1 */ NEJIRON_DIRECTION_LEFT } NejironRollDirection; ActorInit En_Baguo_InitVars = { diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c index 048fbfc95..c1d13be5a 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -32,7 +32,7 @@ void EnBb_Revive(EnBb* this, PlayState* play); typedef enum { /* -1 */ BB_BODY_PART_DRAW_STATUS_BROKEN = -1, /* 0 */ BB_BODY_PART_DRAW_STATUS_ALIVE, - /* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD, + /* 1 */ BB_BODY_PART_DRAW_STATUS_DEAD } EnBbBodyPartDrawStatus; ActorInit En_Bb_InitVars = { @@ -73,7 +73,7 @@ typedef enum { /* 0x3 */ EN_BB_DMGEFF_ICE_ARROW = 0x3, /* 0x4 */ EN_BB_DMGEFF_LIGHT_ARROW, /* 0x5 */ EN_BB_DMGEFF_ZORA_MAGIC, - /* 0xE */ EN_BB_DMGEFF_HOOKSHOT = 0xE, + /* 0xE */ EN_BB_DMGEFF_HOOKSHOT = 0xE } EnBbDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c index 11dace3a5..9fabcecc0 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -32,7 +32,7 @@ void EnBbfall_Frozen(EnBbfall* this, PlayState* play); typedef enum { /* -1 */ BBFALL_BODY_PART_DRAW_STATUS_BROKEN = -1, /* 0 */ BBFALL_BODY_PART_DRAW_STATUS_ALIVE, - /* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD, + /* 1 */ BBFALL_BODY_PART_DRAW_STATUS_DEAD } EnBbfallBodyPartDrawStatus; ActorInit En_Bbfall_InitVars = { @@ -102,7 +102,7 @@ typedef enum { /* 0x3 */ EN_BBFALL_DMGEFF_ICE_ARROW = 0x3, /* 0x4 */ EN_BBFALL_DMGEFF_LIGHT_ARROW, /* 0x5 */ EN_BBFALL_DMGEFF_ZORA_MAGIC, - /* 0xE */ EN_BBFALL_DMGEFF_HOOKSHOT = 0xE, + /* 0xE */ EN_BBFALL_DMGEFF_HOOKSHOT = 0xE } EnBbfallDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.h b/src/overlays/actors/ovl_En_Bee/z_en_bee.h index 09d9ef931..b1773a5ca 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.h +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.h @@ -9,8 +9,8 @@ struct EnBee; typedef void (*EnBeeActionFunc)(struct EnBee*, PlayState*); typedef enum { - /* 0 */ BEE_BEHAVIOR_IDLE = 0, - /* 1 */ BEE_BEHAVIOR_ATTACK, + /* 0 */ BEE_BEHAVIOR_IDLE, + /* 1 */ BEE_BEHAVIOR_ATTACK } BeeBehaviorType; typedef struct EnBee { diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h index bb9d29280..a3561c33b 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h @@ -8,10 +8,10 @@ struct EnBigpamet; typedef void (*EnBigpametActionFunc)(struct EnBigpamet*, PlayState*); -enum { +typedef enum { /* 0 */ ENBIGPAMET_0, - /* 1 */ ENBIGPAMET_1, -}; + /* 1 */ ENBIGPAMET_1 +} EnBigpametParam; typedef struct { /* 0x00 */ Vec3f unk_00; diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h index 9b84784f4..b532d6d08 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.h @@ -53,16 +53,16 @@ typedef struct EnBigpo { /* 0x338 */ EnBigpoFireEffect fires[3]; } EnBigpo; // size = 0x398 -// well ver is regular, dampe basement ver is summoned -// on spawn, 3/possible fires are turned into chosenfire -enum EnBigpoType { +// well version is "regular" (spawns automatically), dampe basement version is "summoned" +// on room enter, 3 "possiblefire" are turned into "chosenfire" at random +typedef enum EnBigpoType { /* 0 */ ENBIGPO_REGULAR, /* 1 */ ENBIGPO_SUMMONED, /* 2 */ ENBIGPO_POSSIBLEFIRE, /* 3 */ ENBIGPO_CHOSENFIRE, /* 4 */ ENBIGPO_REVEALEDFIRE, - /* 5 */ ENBIGPO_UNK5, -}; + /* 5 */ ENBIGPO_UNK5 +} EnBigpoType; #define BIGPO_GET_SWITCHFLAGS(thisx) (u8)((thisx)->params >> 0x8) diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 75e6fa38e..1a90fd29b 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -254,7 +254,7 @@ typedef enum { /* 0x5 */ BIGSLIME_DMGEFF_ELECTRIC_STUN, /* 0xD */ BIGSLIME_DMGEFF_DEKU_STUN = 0xD, /* 0xE */ BIGSLIME_DMGEFF_HOOKSHOT, - /* 0xF */ BIGSLIME_DMGEFF_BREAK_ICE, + /* 0xF */ BIGSLIME_DMGEFF_BREAK_ICE } BigslimeDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c index 6aa9f9e35..ef5c9c0e2 100644 --- a/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c +++ b/src/overlays/actors/ovl_En_Bjt/z_en_bjt.c @@ -229,7 +229,7 @@ typedef enum { /* 1 */ TOILET_HAND_BEHAVIOUR_TAKE_ITEM, // take paper and disappear to use it /* 2 */ TOILET_HAND_BEHAVIOUR_USE_ITEM, // using paper, flushing /* 3 */ TOILET_HAND_BEHAVIOUR_REAPPEAR, // reappear with reward - /* 4 */ TOILET_HAND_BEHAVIOUR_REWARD_GIVEN, + /* 4 */ TOILET_HAND_BEHAVIOUR_REWARD_GIVEN } ToiletHandBehaviour; // msgevent callback/communication. Follow and choose parts of script to run diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.h b/src/overlays/actors/ovl_En_Bom/z_en_bom.h index 40558a919..d11547230 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.h +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.h @@ -13,14 +13,14 @@ typedef void (*EnBomActionFunc)(struct EnBom*, PlayState*); typedef enum BombType { /* 0 */ BOMB_TYPE_BODY, - /* 1 */ BOMB_TYPE_EXPLOSION, + /* 1 */ BOMB_TYPE_EXPLOSION } BombType; // Passed via x rotation -typedef enum EnBomExplosiveType { +typedef enum BombExplosiveType { /* 0 */ BOMB_EXPLOSIVE_TYPE_BOMB, - /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG, -} EnBomExplosiveType; + /* 1 */ BOMB_EXPLOSIVE_TYPE_POWDER_KEG +} BombExplosiveType; typedef struct EnBom { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h index 85c5ecdb3..1585613ce 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.h @@ -10,13 +10,13 @@ typedef void (*EnBombersActionFunc)(struct EnBombers*, PlayState*); #define ENBOMBERS_GET_F(thisx) ((thisx)->params & 0xF) #define ENBOMBERS_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) -enum { +typedef enum { /* 0 */ ENBOMBERS_F_0, /* 1 */ ENBOMBERS_F_1, /* 2 */ ENBOMBERS_F_2, /* 3 */ ENBOMBERS_F_3, - /* 4 */ ENBOMBERS_F_4, -}; + /* 4 */ ENBOMBERS_F_4 +} EnBombersParam; #define ENBOMBERS_F0_0 0 diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index 8260386df..7c2a64841 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -39,7 +39,7 @@ void func_80C00168(EnBomjima* this, PlayState* play); void func_80C00234(EnBomjima* this); void func_80C00284(EnBomjima* this, PlayState* play); -typedef enum EN_BOMJIMA_ACTION { +typedef enum EnBomjimaAction { /* 0 */ EN_BOMJIMA_ACTION_0, /* 1 */ EN_BOMJIMA_ACTION_1, /* 2 */ EN_BOMJIMA_ACTION_2, @@ -47,8 +47,8 @@ typedef enum EN_BOMJIMA_ACTION { /* 4 */ EN_BOMJIMA_ACTION_4, /* 5 */ EN_BOMJIMA_ACTION_5, /* 6 */ EN_BOMJIMA_ACTION_6, - /* 7 */ EN_BOMJIMA_ACTION_7, -} EN_BOMJIMA_ACTION; + /* 7 */ EN_BOMJIMA_ACTION_7 +} EnBomjimaAction; static s32 D_80C009F0 = 0; static s32 D_80C009F4 = 0; diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h index f411f21a2..a784e335d 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.h @@ -11,19 +11,19 @@ typedef void (*EnBomjimbActionFunc)(struct EnBomjimb*, PlayState*); #define ENBOMJIMB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) #define ENBOMJIMB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -enum { +typedef enum { /* 0 */ ENBOMJIMB_F_0, /* 1 */ ENBOMJIMB_F_1, /* 2 */ ENBOMJIMB_F_2, /* 3 */ ENBOMJIMB_F_3, - /* 4 */ ENBOMJIMB_F_4, -}; + /* 4 */ ENBOMJIMB_F_4 +} EnBomjimbParamF; -enum { +typedef enum { /* 0 */ ENBOMJIMB_F0_0, /* 1 */ ENBOMJIMB_F0_1, - /* 2 */ ENBOMJIMB_F0_2, -}; + /* 2 */ ENBOMJIMB_F0_2 +} EnBomjimbParamF0; typedef struct EnBomjimb { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/src/overlays/actors/ovl_En_Boom/z_en_boom.c index 9165b9392..f9b5b3d41 100644 --- a/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -311,7 +311,7 @@ typedef struct { /* 0x00 */ Gfx* unk_00; /* 0x04 */ Vec3f unk_04; /* 0x10 */ Vec3f unk_10; -} EnBoomStruct; +} EnBoomStruct; // size = 0x1C EnBoomStruct D_808A3078[] = { { gameplay_keep_DL_06FE20, { -960.0f, 0.0f, 0.0f }, { 960.0f, 0.0f, 0.0f } }, diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index b65b2c63d..044f54334 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -73,7 +73,7 @@ static InitChainEntry sInitChain[] = { }; typedef struct { - f32 data[5]; + /* 0x0 */ f32 data[5]; } EnBox_PlaybackSpeed; // 0x14 static EnBox_PlaybackSpeed sPlaybackSpeed = { { 1.5f, 1.0f, 1.5f, 1.0f, 1.5f } }; diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c index 7666f8e12..4becc2fe6 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c @@ -20,7 +20,7 @@ typedef enum { /* 0x05 */ CLEAR_TAG_EFFECT_LIGHT_RAYS, /* 0x06 */ CLEAR_TAG_EFFECT_SHOCKWAVE, /* 0x07 */ CLEAR_TAG_EFFECT_SPLASH, - /* 0x08 */ CLEAR_TAG_EFFECT_ISOLATED_SMOKE, + /* 0x08 */ CLEAR_TAG_EFFECT_ISOLATED_SMOKE } ClearTagEffectType; void EnClearTag_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h index 977bf2473..c002dc5e3 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.h @@ -21,7 +21,7 @@ typedef enum { /* 1 */ EN_COL_MAN_RECOVERY_HEART, /* 2 */ EN_COL_MAN_FALLING_ROCK, /* 3 */ EN_COL_MAN_CUTSCENE_BOMB, - /* 4 */ EN_COL_MAN_GAMEPLAY_BOMB, + /* 4 */ EN_COL_MAN_GAMEPLAY_BOMB } EnColManType; #endif // Z_EN_COL_MAN_H diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.h b/src/overlays/actors/ovl_En_Cow/z_en_cow.h index 3c73b747f..200ec5bec 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.h +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.h @@ -10,9 +10,9 @@ #define EN_COW_FLAG_WONT_GIVE_MILK (1 << 2) typedef enum { - /* 0 */ EN_COW_TYPE_DEFAULT, - /* 1 */ EN_COW_TYPE_TAIL, - /* 2 */ EN_COW_TYPE_ABDUCTED, + /* 0 */ EN_COW_TYPE_DEFAULT, + /* 1 */ EN_COW_TYPE_TAIL, + /* 2 */ EN_COW_TYPE_ABDUCTED } EnCowType; struct EnCow; diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index f524e6d5e..ec9a11b4c 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -74,7 +74,7 @@ typedef enum { /* 2 */ GUAY_DMGEFF_FIRE, /* 3 */ GUAY_DMGEFF_ICE, /* 4 */ GUAY_DMGEFF_LIGHT, - /* 5 */ GUAY_DMGEFF_ELECTRIC, + /* 5 */ GUAY_DMGEFF_ELECTRIC } GuayDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index 2900f4d34..2c232f096 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -76,14 +76,14 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->unk_278 = ENDAIKU_GET_FF(&this->actor); - if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { + if (this->unk_278 == ENDAIKU_PARAM_FF_3) { this->pathIndex = ENDAIKU_GET_PATH_INDEX(&this->actor); this->path = SubS_GetPathByIndex(play, this->pathIndex, ENDAIKU_PATH_INDEX_NONE); - } else if (this->unk_278 == ENDAIKU_PARAMS_FF_2) { + } else if (this->unk_278 == ENDAIKU_PARAM_FF_2) { this->unk_264 = -2000; } - if (this->unk_278 == ENDAIKU_PARAMS_FF_0) { + if (this->unk_278 == ENDAIKU_PARAM_FF_0) { this->collider.dim.radius = 30; this->collider.dim.height = 60; this->collider.dim.yShift = 0; @@ -100,20 +100,20 @@ void EnDaiku_Init(Actor* thisx, PlayState* play) { this->actor.gravity = -3.0f; switch (this->unk_278) { - case ENDAIKU_PARAMS_FF_0: + case ENDAIKU_PARAM_FF_0: this->unk_27E = this->unk_278 * 4 + 4; - case ENDAIKU_PARAMS_FF_1: + case ENDAIKU_PARAM_FF_1: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_002FA0, this->jointTable, this->morphTable, 17); break; - case ENDAIKU_PARAMS_FF_2: + case ENDAIKU_PARAM_FF_2: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_00B690, this->jointTable, this->morphTable, 17); break; - case ENDAIKU_PARAMS_FF_3: + case ENDAIKU_PARAM_FF_3: SkelAnime_InitFlex(play, &this->skelAnime, &object_daiku_Skel_00A850, &object_daiku_Anim_001114, this->jointTable, this->morphTable, 17); break; @@ -173,7 +173,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { s32 pad2; if (Player_GetMask(play) == PLAYER_MASK_KAFEIS_MASK) { - if (this->unk_278 == ENDAIKU_PARAMS_FF_1) { + if (this->unk_278 == ENDAIKU_PARAM_FF_1) { this->actor.textId = 0x2365; } else { this->actor.textId = 0x2366; @@ -188,7 +188,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { return; } - if ((this->unk_278 == ENDAIKU_PARAMS_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { if (Rand_ZeroOne() < 0.5f) { func_8094373C(this, 7); } else { @@ -196,7 +196,7 @@ void func_809438F8(EnDaiku* this, PlayState* play) { } } - if (this->unk_278 == ENDAIKU_PARAMS_FF_3) { + if (this->unk_278 == ENDAIKU_PARAM_FF_3) { f32 xzDist; f32 yawDiff; @@ -219,11 +219,11 @@ void func_809438F8(EnDaiku* this, PlayState* play) { } } - if (this->unk_278 != ENDAIKU_PARAMS_FF_0) { + if (this->unk_278 != ENDAIKU_PARAM_FF_0) { s16 angle = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y)); this->unk_280 = this->actor.yawTowardsPlayer; - if ((this->unk_278 == ENDAIKU_PARAMS_FF_1) || (this->unk_278 == ENDAIKU_PARAMS_FF_2) || (angle <= 0x2890)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_1) || (this->unk_278 == ENDAIKU_PARAM_FF_2) || (angle <= 0x2890)) { func_800B8614(&this->actor, play, 100.0f); } } @@ -237,7 +237,7 @@ void func_80943BC0(EnDaiku* this) { void func_80943BDC(EnDaiku* this, PlayState* play) { f32 currentFrame = this->skelAnime.curFrame; - if ((this->unk_278 == ENDAIKU_PARAMS_FF_2) && (this->unk_284 <= currentFrame)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_2) && (this->unk_284 <= currentFrame)) { if (Rand_ZeroOne() < 0.5f) { func_8094373C(this, 7); } else { @@ -259,7 +259,7 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); } - if ((this->unk_278 == ENDAIKU_PARAMS_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_0) && (gSaveContext.save.day == 3) && (gSaveContext.save.isNight)) { Actor_Kill(&this->actor); return; } @@ -314,7 +314,7 @@ void EnDaiku_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* ro gSPDisplayList(POLY_OPA_DISP++, D_809440D4[this->unk_278]); } - if ((this->unk_278 == ENDAIKU_PARAMS_FF_3) && (limbIndex == 8)) { + if ((this->unk_278 == ENDAIKU_PARAM_FF_3) && (limbIndex == 8)) { gSPDisplayList(POLY_OPA_DISP++, object_daiku_DL_008EC8); } diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h index c75afec6e..ff88c8c9a 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.h @@ -12,12 +12,12 @@ typedef void (*EnDaikuActionFunc)(struct EnDaiku*, PlayState*); #define ENDAIKU_PATH_INDEX_NONE 0x3F -enum { - /* 0x0 */ ENDAIKU_PARAMS_FF_0, - /* 0x1 */ ENDAIKU_PARAMS_FF_1, - /* 0x2 */ ENDAIKU_PARAMS_FF_2, - /* 0x3 */ ENDAIKU_PARAMS_FF_3, -}; +typedef enum { + /* 0 */ ENDAIKU_PARAM_FF_0, + /* 1 */ ENDAIKU_PARAM_FF_1, + /* 2 */ ENDAIKU_PARAM_FF_2, + /* 3 */ ENDAIKU_PARAM_FF_3 +} EnDaikuParam; typedef struct EnDaiku { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h index 775b2453f..58fc26b9a 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.h @@ -13,11 +13,11 @@ typedef void (*EnDaiku2ActionFunc)(struct EnDaiku2*, PlayState*); #define ENDAIKU2_PATH_INDEX_NONE 0x3F -enum { +typedef enum { /* -1 */ ENDAIKU2_GET_7F_MINUS1 = -1, /* 0 */ ENDAIKU2_GET_7F_0, - /* 127 */ ENDAIKU2_GET_7F_127 = 127, -}; + /* 127 */ ENDAIKU2_GET_7F_127 = 127 +} EnDaiku2Param; typedef struct EnDaiku2Effect { /* 0x00 */ u8 isEnabled; diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h index 59b6677a0..248f758ac 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.h @@ -10,12 +10,12 @@ typedef void (*EnDekunutsActionFunc)(struct EnDekunuts*, PlayState*); #define ENDEKUNUTS_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -enum { +typedef enum { /* 0x00 */ ENDEKUNUTS_GET_FF00_0, /* 0x01 */ ENDEKUNUTS_GET_FF00_1, /* 0x02 */ ENDEKUNUTS_GET_FF00_2, /* 0xFF */ ENDEKUNUTS_GET_FF00_FF = 0xFF -}; +} EnDekunutsParam; typedef struct EnDekunuts { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c index 5b5857c94..faacd7510 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c @@ -23,11 +23,11 @@ void EnDemoheishi_Talk(EnDemoheishi* this, PlayState* play); s32 EnDemoheishi_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); typedef enum { - /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, - /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, - /* 2 */ DEMOHEISHI_ANIM_WAVE, - /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, - /* 4 */ DEMOHEISHI_ANIM_STAND_UP + /* 0 */ DEMOHEISHI_ANIM_STAND_HAND_ON_HIP, + /* 1 */ DEMOHEISHI_ANIM_CHEER_WITH_SPEAR, + /* 2 */ DEMOHEISHI_ANIM_WAVE, + /* 3 */ DEMOHEISHI_ANIM_SIT_AND_REACH, + /* 4 */ DEMOHEISHI_ANIM_STAND_UP } EnDemoheishiAnimation; ActorInit En_Demo_heishi_InitVars = { diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index 849ae3378..d80013a99 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -62,7 +62,7 @@ ActorInit En_Dg_InitVars = { typedef enum { /* 0 */ DOG_GRAB_STATE_NONE, /* 1 */ DOG_GRAB_STATE_HELD, - /* 2 */ DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW, + /* 2 */ DOG_GRAB_STATE_THROWN_OR_SITTING_AFTER_THROW } DogGrabState; typedef enum { @@ -74,7 +74,7 @@ typedef enum { /* 5 */ DOG_BEHAVIOR_ZORA_WAIT, /* 6 */ DOG_BEHAVIOR_DEKU, /* 7 */ DOG_BEHAVIOR_DEKU_WAIT, - /* 8 */ DOG_BEHAVIOR_DEFAULT, + /* 8 */ DOG_BEHAVIOR_DEFAULT } DogBehavior; static u8 sIsAnyDogHeld = false; @@ -85,10 +85,10 @@ static s16 sBremenMaskFollowerIndex = ENDG_INDEX_NO_BREMEN_MASK_FOLLOWER; * Stores the state for the dogs milling about at the Doggy Racetrack. */ typedef struct { - s16 color; // The dog's color, which is used as an index into sBaseSpeeds - s16 index; // The dog's index within sDogInfo - s16 textId; // The ID of the text to display when the dog is picked up -} RacetrackDogInfo; + /* 0x0 */ s16 color; // The dog's color, which is used as an index into sBaseSpeeds + /* 0x2 */ s16 index; // The dog's index within sDogInfo + /* 0x4 */ s16 textId; // The ID of the text to display when the dog is picked up +} RacetrackDogInfo; // size = 0x6 /** * A table of RacetrackDogInfo for every dog at the Doggy Racetrack. Note that the textId values diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.h b/src/overlays/actors/ovl_En_Dg/z_en_dg.h index 9f8203987..e36342706 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.h +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.h @@ -11,8 +11,8 @@ typedef enum { /* 3 */ DOG_COLOR_BEIGE, /* 4 */ DOG_COLOR_BROWN, /* 5 */ DOG_COLOR_BLUE, - /* 6 */ DOG_COLOR_GOLD, -} DogColors; + /* 6 */ DOG_COLOR_GOLD +} DogColor; struct EnDg; diff --git a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h index f0665f1b5..57467b3f1 100644 --- a/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h +++ b/src/overlays/actors/ovl_En_Dnk/z_en_dnk.h @@ -10,13 +10,13 @@ typedef void (*EnDnkActionFunc)(struct EnDnk*, PlayState*); #define ENDNK_GET_3(thisx) ((thisx)->params & 0x3) #define ENDNK_GET_3C(thisx) ((thisx)->params & 0x3C) -enum { - /* 0x0 */ ENDNK_GET_3_0, - /* 0x1 */ ENDNK_GET_3_1, - /* 0x2 */ ENDNK_GET_3_2, - /* 0x3 */ ENDNK_GET_3_3, - /* 0x4 */ ENDNK_GET_3_4, -}; +typedef enum { + /* 0 */ ENDNK_GET_3_0, + /* 1 */ ENDNK_GET_3_1, + /* 2 */ ENDNK_GET_3_2, + /* 3 */ ENDNK_GET_3_3, + /* 4 */ ENDNK_GET_3_4 +} EnDnkParam; typedef struct EnDnk { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index b7eb08743..904a18e62 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -63,7 +63,7 @@ typedef enum { /* 16 */ EN_DNO_ANIM_IMPLORE_START, /* 17 */ EN_DNO_ANIM_SHOCK_START, /* 18 */ EN_DNO_ANIM_SHOCK_LOOP, - /* 19 */ EN_DNO_ANIM_GRIEVE, + /* 19 */ EN_DNO_ANIM_GRIEVE } EnDnoAnimation; static AnimationSpeedInfo sAnimations[] = { diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.h b/src/overlays/actors/ovl_En_Dno/z_en_dno.h index f9a55cd4e..b2e7f750f 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.h +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.h @@ -13,8 +13,8 @@ typedef void (*EnDnoActionFunc)(struct EnDno*, PlayState*); #define EN_DNO_GET_C000(thisx) (((thisx)->params >> 0xE) & 0x3) typedef enum { - /* 0x0 */ EN_DNO_GET_C000_0, - /* 0x1 */ EN_DNO_GET_C000_1, + /* 0 */ EN_DNO_GET_C000_0, + /* 1 */ EN_DNO_GET_C000_1 } EnDnoUnkC000; typedef struct EnDno { diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c index 0b3c5ac85..1dd5dac34 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -29,7 +29,7 @@ typedef enum { /* 1 */ EN_DNP_EYE_HALF, /* 2 */ EN_DNP_EYE_CLOSED, /* 3 */ EN_DNP_EYE_ANGRY, - /* 4 */ EN_DNP_EYE_MAX, + /* 4 */ EN_DNP_EYE_MAX } EnDnpEyeIndex; ActorInit En_Dnp_InitVars = { diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h index 64f0baf93..9b02f19d3 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.h @@ -11,9 +11,9 @@ typedef void (*EnDnpActionFunc)(struct EnDnp*, PlayState*); #define EN_DNP_GET_TYPE(thisx) ((thisx)->params & 7) typedef enum { - /* 0x0 */ EN_DNP_TYPE_WOODFALL_TEMPLE, - /* 0x1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE, - /* 0x2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER, + /* 0 */ EN_DNP_TYPE_WOODFALL_TEMPLE, + /* 1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE, + /* 2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER } EnDnpType; typedef struct EnDnp { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index f481f3d6b..d662e7e55 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -30,7 +30,7 @@ typedef enum { /* 7 */ EN_DNS_ANIM_RUN_LOOP, /* 8 */ EN_DNS_ANIM_DANCE, /* 9 */ EN_DNS_ANIM_FLIP, - /* 10 */ EN_DNS_ANIM_MAX, + /* 10 */ EN_DNS_ANIM_MAX } EnDnsAnimation; static s32 D_8092DCB0[] = { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.h b/src/overlays/actors/ovl_En_Dns/z_en_dns.h index 4b730abd3..ade8b6174 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.h +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.h @@ -13,12 +13,12 @@ typedef s32 (*EnDnsFunc)(struct EnDns*, PlayState*); #define ENDNS_GET_4000(thisx) ((thisx)->params & 0x4000) #define ENDNS_GET_8000(thisx) ((thisx)->params & 0x8000) -enum { - /* 0x0 */ ENDNS_GET_7_0, - /* 0x1 */ ENDNS_GET_7_1, - /* 0x2 */ ENDNS_GET_7_2, - /* 0x3 */ ENDNS_GET_7_3, -}; +typedef enum { + /* 0 */ ENDNS_GET_7_0, + /* 1 */ ENDNS_GET_7_1, + /* 2 */ ENDNS_GET_7_2, + /* 3 */ ENDNS_GET_7_3 +} EnDnsParam; typedef struct EnDns { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 91d243464..60d0ec673 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -289,10 +289,10 @@ ActorInit En_Door_InitVars = { }; typedef struct { - /* 0x00 */ s16 sceneId; - /* 0x02 */ u8 dListIndex; - /* 0x04 */ s16 objectId; -} EnDoorInfo; + /* 0x0 */ s16 sceneId; + /* 0x2 */ u8 dListIndex; + /* 0x4 */ s16 objectId; +} EnDoorInfo; // size = 0x6 static EnDoorInfo sObjInfo[] = { { SCENE_MITURIN, 0x01, OBJECT_NUMA_OBJ }, @@ -394,7 +394,7 @@ void EnDoor_Init(Actor* thisx, PlayState* play2) { this->doorType = ENDOOR_GET_TYPE(thisx); - this->switchFlag = ENDOOR_GET_PARAMS_7F(thisx); + this->switchFlag = ENDOOR_GET_PARAM_7F(thisx); if ((this->doorType == ENDOOR_TYPE_7) && (this->switchFlag == 0)) { DynaPolyActor_Init(&this->knobDoor.dyna, 0); DynaPolyActor_LoadMesh(play, &this->knobDoor.dyna, &gDoorCol); diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.h b/src/overlays/actors/ovl_En_Door/z_en_door.h index b6fc7c254..03dc31ab6 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.h +++ b/src/overlays/actors/ovl_En_Door/z_en_door.h @@ -10,7 +10,7 @@ struct EnDoor; typedef void (*EnDoorActionFunc)(struct EnDoor*, PlayState*); #define ENDOOR_GET_TYPE(thisx) (((thisx)->params >> 7) & 7) -#define ENDOOR_GET_PARAMS_7F(thisx) (((thisx)->params) & 0x7F) +#define ENDOOR_GET_PARAM_7F(thisx) (((thisx)->params) & 0x7F) typedef enum EnDoorType { /* 0 */ ENDOOR_TYPE_0, diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index f03b2702e..d2acb55be 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -35,17 +35,17 @@ typedef enum { /* 0 */ DEEP_PYTHON_EXTEND_STATE_NOT_FULLY_EXTENDED, /* 1 */ DEEP_PYTHON_EXTEND_STATE_FULLY_EXTENDED, /* 2 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_LARGE_SWAY, - /* 3 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY, + /* 3 */ DEEP_PYTHON_EXTEND_STATE_REPEAT_SMALL_SWAY } DeepPythonExtendState; typedef enum { /* 0 */ DEEP_PYTHON_GRAB_STATE_START, - /* 1 */ DEEP_PYTHON_GRAB_STATE_GRABBED, + /* 1 */ DEEP_PYTHON_GRAB_STATE_GRABBED } DeepPythonGrabState; typedef enum { /* 0 */ DEEP_PYTHON_ATTACK_STATE_START, - /* 1 */ DEEP_PYTHON_ATTACK_STATE_RELEASED, + /* 1 */ DEEP_PYTHON_ATTACK_STATE_RELEASED } DeepPythonAttackState; static s32 sNumPythonsDead = 0; diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h index 2d5f31b54..a35c8fa9b 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.h @@ -13,7 +13,7 @@ typedef enum { /* 3 */ DEEP_PYTHON_ACTION_DAMAGE, /* 4 */ DEEP_PYTHON_ACTION_RETREAT, /* 5 */ DEEP_PYTHON_ACTION_SETUP_DEAD, - /* 6 */ DEEP_PYTHON_ACTION_DEAD, + /* 6 */ DEEP_PYTHON_ACTION_DEAD } DeepPythonAction; struct EnDragon; diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 6f67950ab..2a9a0ac67 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -13,7 +13,7 @@ typedef enum { /* 0 */ EGBLOCK_EFFECT_DEBRIS_SOLID, - /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT, + /* 1 */ EGBLOCK_EFFECT_DEBRIS_FLAT } EnEgblockEffectType; void EnEgblock_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index bcb7c6fa2..c9750991a 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -37,7 +37,7 @@ typedef enum { /* 0 */ EYEGORE_EFFECT_IMPACT, /* 1 */ EYEGORE_EFFECT_PIECE_LARGE, /* 2 */ EYEGORE_EFFECT_PIECE_SMALL, - /* 3 */ EYEGORE_EFFECT_DEBRIS, + /* 3 */ EYEGORE_EFFECT_DEBRIS } EnEgolEffectType; typedef enum { @@ -56,7 +56,7 @@ typedef enum { /* 12 */ EYEGORE_ANIM_SIT, /* 13 */ EYEGORE_ANIM_LEFT_PUNCH, /* 14 */ EYEGORE_ANIM_RIGHT_PUNCH, - /* 15 */ EYEGORE_ANIM_MAX, + /* 15 */ EYEGORE_ANIM_MAX } EnEgolAnimation; typedef enum { @@ -64,7 +64,7 @@ typedef enum { /* 1 */ EYEGORE_LASER_START, /* 2 */ EYEGORE_LASER_CHARGING, /* 3 */ EYEGORE_LASER_FIRE, - /* 7 */ EYEGORE_LASER_ON = 7, + /* 7 */ EYEGORE_LASER_ON = 7 } EnEgolLaserState; void EnEgol_Init(Actor* thisx, PlayState* play); @@ -238,7 +238,7 @@ typedef enum { /* 0x0 */ EYEGORE_DMGEFF_IMMUNE_0, /* 0x4 */ EYEGORE_DMGEFF_LIGHT_ARROW = 4, /* 0xE */ EYEGORE_DMGEFF_NONE = 0xE, - /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F, + /* 0xF */ EYEGORE_DMGEFF_IMMUNE_F } EnEgolDamageEffect; static DamageTable sDamageTable = { @@ -1101,7 +1101,7 @@ void EnEgol_Death(EnEgol* this, PlayState* play) { typedef enum { /* 0 */ EYEGORE_HIT_NONE, /* 1 */ EYEGORE_HIT_DAMAGE, - /* 2 */ EYEGORE_HIT_IMMUNE, // Makes hitmarks, but no reaction + /* 2 */ EYEGORE_HIT_IMMUNE // Makes hitmarks, but no reaction } EyegoreHitReaction; void EnEgol_CollisionCheck(EnEgol* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.h b/src/overlays/actors/ovl_En_Elf/z_en_elf.h index 680d59158..18e444e97 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.h +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.h @@ -50,14 +50,14 @@ typedef struct EnElf { } EnElf; // size = 0x274 typedef enum { - /* 0x00 */ ENELF_TYPE_0, - /* 0x01 */ ENELF_TYPE_1, - /* 0x02 */ ENELF_TYPE_2, - /* 0x03 */ ENELF_TYPE_3, - /* 0x04 */ ENELF_TYPE_4, - /* 0x05 */ ENELF_TYPE_5, - /* 0x06 */ ENELF_TYPE_6, - /* 0x07 */ ENELF_TYPE_7 + /* 0 */ ENELF_TYPE_0, + /* 1 */ ENELF_TYPE_1, + /* 2 */ ENELF_TYPE_2, + /* 3 */ ENELF_TYPE_3, + /* 4 */ ENELF_TYPE_4, + /* 5 */ ENELF_TYPE_5, + /* 6 */ ENELF_TYPE_6, + /* 7 */ ENELF_TYPE_7 } FairyType; #endif // Z_EN_ELF_H diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h index 975b08c2c..692a76d82 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.h @@ -10,13 +10,13 @@ typedef void (*EnElfgrpActionFunc)(struct EnElfgrp*, PlayState*); #define ENELFGRP_GET(thisx) ((thisx)->params & 0xF) #define ENELFGRP_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) -enum { +typedef enum { /* 0 */ ENELFGRP_0, /* 2 */ ENELFGRP_1, /* 2 */ ENELFGRP_2, /* 3 */ ENELFGRP_3, - /* 4 */ ENELFGRP_4, -}; + /* 4 */ ENELFGRP_4 +} EnElfgrpParam; typedef struct EnElfgrp { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h index 5c8e6db83..85e1b3ca4 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h @@ -18,7 +18,7 @@ typedef enum EnEncount1Enemy { /* 0 */ EN_ENCOUNT1_GRASSHOPPER, /* 1 */ EN_ENCOUNT1_WALLMASTER, /* 2 */ EN_ENCOUNT1_SKULLFISH, - /* 3 */ EN_ENCOUNT1_SKULLFISH_2, + /* 3 */ EN_ENCOUNT1_SKULLFISH_2 } EnEncount1Enemy; struct EnEncount1; diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index 8d9a18cf1..972d038ae 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -103,11 +103,11 @@ void func_809C4078(EnEncount4* this, PlayState* play) { return; } - fireWallParams = BGFIREWALL_PARAMS_0; + fireWallParams = BGFIREWALL_PARAM_0; if ((this->unk_148 == 0) || (captainKeeta->unk2DC != 0)) { i = 0; if (this->unk_148 != 0) { - fireWallParams = BGFIREWALL_PARAMS_1; + fireWallParams = BGFIREWALL_PARAM_1; i = 2; } while (i < ARRAY_COUNT(D_809C46DC)) { @@ -174,7 +174,7 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { pos.x += Math_SinS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); pos.z += Math_CosS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SKB, pos.x, pos.y, pos.z, 0, 0, 0, - ENSKB_PARAMS_0) != NULL) { + ENSKB_PARAM_0) != NULL) { this->unk_14C++; if (this->unk_14C >= 2) { this->actionFunc = func_809C4598; diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.h b/src/overlays/actors/ovl_En_Estone/z_en_estone.h index ceb26c9c6..f9b44b944 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.h +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.h @@ -11,7 +11,7 @@ typedef void (*EnEstoneActionFunc)(struct EnEstone*, PlayState*); typedef enum { /* 0 */ ENESTONE_TYPE_LARGE, - /* 1 */ ENESTONE_TYPE_SMALL, + /* 1 */ ENESTONE_TYPE_SMALL } EnEstoneType; typedef struct { diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 8c975dbad..2f226e61c 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -52,11 +52,11 @@ void EnFall_FireRing_Draw(Actor* thisx, PlayState* play); void EnFall_MoonsTear_Draw(Actor* thisx, PlayState* play); typedef struct { - u8 modelIndex; - Vec3f pos; - Vec3f velocity; - Vec3s rot; -} EnFallDebrisEffect; + /* 0x00 */ u8 modelIndex; + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3s rot; +} EnFallDebrisEffect; // size = 0x24 #define EN_FALL_DEBRIS_EFFECT_COUNT 50 diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.h b/src/overlays/actors/ovl_En_Fall/z_en_fall.h index c9eaaf44f..60bb7ec33 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.h +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.h @@ -19,7 +19,7 @@ typedef enum { /* 9 */ EN_FALL_TYPE_CLOCK_TOWER_MOON, /* 10 */ EN_FALL_TYPE_STOPPED_MOON_OPEN_MOUTH, /* 11 */ EN_FALL_TYPE_CRASH_FIRE_RING, - /* 12 */ EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER, + /* 12 */ EN_FALL_TYPE_LODMOON_INVERTED_STONE_TOWER } EnFallType; struct EnFall; diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.h b/src/overlays/actors/ovl_En_Fg/z_en_fg.h index 6440812ca..a1917b9bc 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.h +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.h @@ -9,21 +9,21 @@ typedef void (*EnFgActionFunc)(struct EnFg*, PlayState*); // Based on the envColor data. Related to params but mostly unused. typedef enum { - /* 0x0 */ FG_YELLOW, - /* 0x1 */ FG_CYAN, - /* 0x2 */ FG_PINK, - /* 0x3 */ FG_BLUE, - /* 0x4 */ FG_WHITE, - /* 0x5 */ FG_BLACK, // All frogs are blackened when hit by an explosion + /* 0 */ FG_YELLOW, + /* 1 */ FG_CYAN, + /* 2 */ FG_PINK, + /* 3 */ FG_BLUE, + /* 4 */ FG_WHITE, + /* 5 */ FG_BLACK // All frogs are blackened when hit by an explosion } FrogType; typedef enum { - /* 0x0 */ FG_DMGEFFECT_NONE, - /* 0x1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg - /* 0x2 */ FG_DMGEFFECT_DEKUSTICK, - /* 0x3 */ FG_DMGEFFECT_HOOKSHOT, - /* 0x4 */ FG_DMGEFFECT_ARROW, - /* 0x5 */ FG_DMGEFFECT_ICEARROW, + /* 0 */ FG_DMGEFFECT_NONE, + /* 1 */ FG_DMGEFFECT_EXPLOSION, // Bomb or bombchu, not powderkeg + /* 2 */ FG_DMGEFFECT_DEKUSTICK, + /* 3 */ FG_DMGEFFECT_HOOKSHOT, + /* 4 */ FG_DMGEFFECT_ARROW, + /* 5 */ FG_DMGEFFECT_ICEARROW } FrogDamageEffect; typedef struct { diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.h b/src/overlays/actors/ovl_En_Fish/z_en_fish.h index d3941906c..2a348051e 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h @@ -7,12 +7,12 @@ struct EnFish; typedef void (*EnFishUnkFunc)(Actor*, PlayState*); -enum { +typedef enum { /* -1 */ ENFISH_MINUS1 = -1, /* 0 */ ENFISH_0, /* 1 */ ENFISH_1, - /* 2 */ ENFISH_2, -}; + /* 2 */ ENFISH_2 +} EnFishParam; typedef struct EnFish { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 010106fe5..2ada30cba 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -25,24 +25,24 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2); void EnFishing_DrawOwner(Actor* thisx, PlayState* play); typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x02 */ Vec3s pos; - /* 0x08 */ u8 unk_08; - /* 0x0C */ f32 unk_0C; + /* 0x0 */ u8 unk_00; + /* 0x2 */ Vec3s pos; + /* 0x8 */ u8 unk_08; + /* 0xC */ f32 unk_0C; } FishingFishInit; // size = 0x10 #define EFFECT_COUNT 130 typedef enum { - /* 0x00 */ FS_EFF_NONE, - /* 0x01 */ FS_EFF_RIPPLE, - /* 0x02 */ FS_EFF_DUST_SPLASH, - /* 0x03 */ FS_EFF_WATER_DUST, - /* 0x04 */ FS_EFF_BUBBLE, - /* 0x05 */ FS_EFF_RAIN_DROP, - /* 0x06 */ FS_EFF_OWNER_HAT, - /* 0x07 */ FS_EFF_RAIN_RIPPLE, - /* 0x08 */ FS_EFF_RAIN_SPLASH + /* 0 */ FS_EFF_NONE, + /* 1 */ FS_EFF_RIPPLE, + /* 2 */ FS_EFF_DUST_SPLASH, + /* 3 */ FS_EFF_WATER_DUST, + /* 4 */ FS_EFF_BUBBLE, + /* 5 */ FS_EFF_RAIN_DROP, + /* 6 */ FS_EFF_OWNER_HAT, + /* 7 */ FS_EFF_RAIN_RIPPLE, + /* 8 */ FS_EFF_RAIN_SPLASH } FishingEffectType; typedef struct { @@ -73,9 +73,9 @@ typedef enum { } FishingPropType; typedef struct { - /* 0x00 */ u8 type; - /* 0x02 */ Vec3s pos; -} FishingPropInit; // size = 0x08 + /* 0x0 */ u8 type; + /* 0x2 */ Vec3s pos; +} FishingPropInit; // size = 0x8 typedef struct { /* 0x00 */ Vec3f pos; @@ -93,8 +93,8 @@ typedef struct { } FishingProp; // size = 0x3C typedef enum { - /* 0x00 */ FS_GROUP_FISH_NONE, - /* 0x01 */ FS_GROUP_FISH_NORMAL + /* 0 */ FS_GROUP_FISH_NONE, + /* 1 */ FS_GROUP_FISH_NORMAL } FishingGroupFishType; #define GROUP_FISH_COUNT 60 diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h index 002f9e67c..628cad4f6 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.h @@ -11,12 +11,12 @@ typedef void (*EnFloormasActionFunc)(struct EnFloormas*, PlayState*); #define ENFLOORMAS_GET_7FFF(thisx) ((thisx)->params & 0x7FFF) #define ENFLOORMAS_GET_8000(thisx) ((thisx)->params & 0x8000) -enum { +typedef enum { /* 0x00 */ ENFLOORMAS_GET_7FFF_0, /* 0x10 */ ENFLOORMAS_GET_7FFF_10 = 0x10, /* 0x20 */ ENFLOORMAS_GET_7FFF_20 = 0x20, - /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40, -}; + /* 0x40 */ ENFLOORMAS_GET_7FFF_40 = 0x40 +} EnFloormasParam; typedef struct EnFloormas { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.h b/src/overlays/actors/ovl_En_Fz/z_en_fz.h index 539560c88..ac1cb0648 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.h +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.h @@ -13,12 +13,12 @@ typedef void (*EnFzUnkFunc)(struct EnFz*); #define ENFZ_GET_4000(thisx) ((thisx)->params & 0x4000) #define ENFZ_GET_8000(thisx) ((thisx)->params & 0x8000) -enum { +typedef enum { /* 0 */ ENFZ_F_0, /* 1 */ ENFZ_F_1, /* 2 */ ENFZ_F_2, - /* 3 */ ENFZ_F_3, -}; + /* 3 */ ENFZ_F_3 +} EnFzParam; typedef struct { /* 0x00 */ u8 unk_00; diff --git a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h index 04d9c7159..5602a3b4f 100644 --- a/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h +++ b/src/overlays/actors/ovl_En_Gakufu/z_en_gakufu.h @@ -10,8 +10,8 @@ typedef void (*EnGakufuActionFunc)(struct EnGakufu*, PlayState*); #define GAKUFU_GET_TYPE(thisx) ((thisx)->params & 0xF) typedef enum { - /* 0x0 */ GAKUFU_TERMINA_FIELD, - /* 0x1 */ GAKUFU_MILK_BAR + /* 0 */ GAKUFU_TERMINA_FIELD, + /* 1 */ GAKUFU_MILK_BAR } GakufuType; typedef struct EnGakufu { diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h index 87cee9e99..a257ab3d4 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.h @@ -10,11 +10,11 @@ typedef void (*EnGb2ActionFunc)(struct EnGb2*, PlayState*); #define ENGB2_GET_7(thisx) ((thisx)->params & 7) #define ENGB2_GET_7F8(thisx) (((thisx)->params & 0x7F8) >> 3) -enum { +typedef enum { /* 0 */ ENGB2_7_0, /* 1 */ ENGB2_7_1, - /* 2 */ ENGB2_7_2, -}; + /* 2 */ ENGB2_7_2 +} EnGb2Param; typedef struct EnGb2 { /* 0x0000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 0a8aea2fd..c78f14048 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -69,8 +69,8 @@ typedef enum { /* 6 */ GERUDO_WHITE_ANIM_EXCITED_CLAPPING, /* 7 */ GERUDO_WHITE_ANIM_SALUTE, /* 8 */ GERUDO_WHITE_ANIM_LEADING_BOAT, - /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY, -} GerudoWhiteAnimations; + /* 9 */ GERUDO_WHITE_ANIM_BLOWN_AWAY +} GerudoWhiteAnimation; void EnGe1_ChangeAnim(EnGe1* this, s16 animIndex, u8 mode, f32 morphFrames); void EnGe1_ShadowDraw(Actor* thisx, Lights* lights, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.h b/src/overlays/actors/ovl_En_Gg/z_en_gg.h index cc744cffa..802024897 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.h +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.h @@ -21,7 +21,7 @@ typedef struct EnGgStruct { /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ u8 unk_48; -} EnGgStruct; // size == 0x4C +} EnGgStruct; // size = 0x4C typedef struct EnGg { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.h b/src/overlays/actors/ovl_En_Giant/z_en_giant.h index 45e89dd55..5842a62da 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.h +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.h @@ -35,7 +35,7 @@ typedef enum { /* 12 */ GIANT_TYPE_MOUNTAIN_CLOCK_TOWER_FAILURE, /* 13 */ GIANT_TYPE_CANYON_CLOCK_TOWER_FAILURE, /* 14 */ GIANT_TYPE_SWAMP_CLOCK_TOWER_FAILURE, - /* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE, + /* 15 */ GIANT_TYPE_OCEAN_CLOCK_TOWER_FAILURE } GiantType; struct EnGiant; diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index a76d89e7b..b40c2287a 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -47,7 +47,7 @@ typedef enum { /* 1 */ GINKO_ANIM_SITTING, /* 2 */ GINKO_ANIM_REACHING, /* 3 */ GINKO_ANIM_AMAZED, - /* 4 */ GINKO_ANIM_ADVERTISING, + /* 4 */ GINKO_ANIM_ADVERTISING } GinkoAnimation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h index f61b50b5a..e155ef6df 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.h +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.h @@ -48,16 +48,16 @@ typedef struct EnGirlA { } EnGirlA; // size = 0x1CC typedef enum { - /* 0x0 */ CANBUY_RESULT_SUCCESS_1, - /* 0x1 */ CANBUY_RESULT_SUCCESS_2, - /* 0x2 */ CANBUY_RESULT_NO_ROOM, - /* 0x3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE, - /* 0x4 */ CANBUY_RESULT_NEED_RUPEES, - /* 0x5 */ CANBUY_RESULT_CANNOT_GET_NOW, - /* 0x6 */ CANBUY_RESULT_CANNOT_GET_NOW_2, - /* 0x7 */ CANBUY_RESULT_NO_ROOM_2, - /* 0x8 */ CANBUY_RESULT_ALREADY_HAVE, - /* 0x9 */ CANBUY_RESULT_HAVE_BETTER + /* 0 */ CANBUY_RESULT_SUCCESS_1, + /* 1 */ CANBUY_RESULT_SUCCESS_2, + /* 2 */ CANBUY_RESULT_NO_ROOM, + /* 3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE, + /* 4 */ CANBUY_RESULT_NEED_RUPEES, + /* 5 */ CANBUY_RESULT_CANNOT_GET_NOW, + /* 6 */ CANBUY_RESULT_CANNOT_GET_NOW_2, + /* 7 */ CANBUY_RESULT_NO_ROOM_2, + /* 8 */ CANBUY_RESULT_ALREADY_HAVE, + /* 9 */ CANBUY_RESULT_HAVE_BETTER } EnGirlACanBuyResult; typedef enum { diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.h b/src/overlays/actors/ovl_En_Gk/z_en_gk.h index fd724cc7c..130b97675 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.h +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.h @@ -13,14 +13,14 @@ typedef void (*EnGkActionFunc)(struct EnGk*, PlayState*); #define ENGK_PATH_INDEX_NONE 0xF -enum { +typedef enum { /* 0 */ ENGK_F_0, /* 1 */ ENGK_F_1, /* 2 */ ENGK_F_2, /* 3 */ ENGK_F_3, /* 4 */ ENGK_F_4, - /* 5 */ ENGK_F_5, -}; + /* 5 */ ENGK_F_5 +} EnGkParam; typedef struct EnGk { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.h b/src/overlays/actors/ovl_En_Go/z_en_go.h index 23c02a9c4..5162a4f77 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.h +++ b/src/overlays/actors/ovl_En_Go/z_en_go.h @@ -56,7 +56,7 @@ typedef enum EnGoType { /* 5 */ ENGO_ASIDE_STORE, // Shrine Goron outside store /* 6 */ ENGO_ASIDE_ELDERSROOM, // Shrine Goron outside Elder's room /* 7 */ ENGO_ASIDE_ELDERSSON, // Shrine Goron aside the Elder's Son - /* 8 */ ENGO_MEDIGORON, // Medigoron selling Powder Kegs + /* 8 */ ENGO_MEDIGORON // Medigoron selling Powder Kegs } EnGoType; /** @@ -70,7 +70,7 @@ typedef enum EnGoRacetrackSubtype { /* 4 */ ENGO_ATHLETIC_HAMSTRINGSIT, /* 5 */ ENGO_ATHLETIC_HAMSTRINGSTAND, /* 6 */ ENGO_SPECTATOR_CHEER, - /* 7 */ ENGO_SPECTATOR_SHOUTING, + /* 7 */ ENGO_SPECTATOR_SHOUTING } EnGoRacetrackSubtype; /** @@ -78,7 +78,7 @@ typedef enum EnGoRacetrackSubtype { */ typedef enum EnGoGraveyardSubtype { /* 0 */ ENGO_GRAVEYARD_GRAVEMAKER, - /* 1 */ ENGO_GRAVEYARD_FROZEN, + /* 1 */ ENGO_GRAVEYARD_FROZEN } EnGoGraveyardSubtype; typedef struct EnGo { diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h index e672355e5..2ace5ff85 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.h @@ -14,27 +14,27 @@ typedef s32 (*EnGoroiwaUnkFunc)(struct EnGoroiwa*); #define ENGOROIWA_GET_300(thisx) (((thisx)->params >> 0x8) & 3) #define ENGOROIWA_GET_FF(thisx) ((thisx)->params & 0xFF) -enum { +typedef enum { /* 0 */ ENGOROIWA_300_0, /* 1 */ ENGOROIWA_300_1, - /* 3 */ ENGOROIWA_300_3 = 3, -}; + /* 3 */ ENGOROIWA_300_3 = 3 +} EnGoroiwaParam300; -enum { +typedef enum { /* 0 */ ENGOROIWA_400_0, - /* 1 */ ENGOROIWA_400_1, -}; + /* 1 */ ENGOROIWA_400_1 +} EnGoroiwaParam400; -enum { +typedef enum { /* 0 */ ENGOROIWA_3000_0, /* 1 */ ENGOROIWA_3000_1, - /* 2 */ ENGOROIWA_3000_2, -}; + /* 2 */ ENGOROIWA_3000_2 +} EnGoroiwaParam3000; -enum { +typedef enum { /* 1 */ ENGOROIWA_C000_1 = 1, - /* 2 */ ENGOROIWA_C000_2, -}; + /* 2 */ ENGOROIWA_C000_2 +} EnGoroiwaParamC000; typedef struct { /* 0x00 */ Vec3f unk_00; diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index c4ff0959c..7fbed6122 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -52,18 +52,18 @@ typedef enum { /* 7 */ EN_GRASSHOPPER_ACTION_WAIT_AFTER_ATTACK, /* 8 */ EN_GRASSHOPPER_ACTION_DAMAGED, /* 9 */ EN_GRASSHOPPER_ACTION_DEAD, - /* 10 */ EN_GRASSHOPPER_ACTION_FALL, + /* 10 */ EN_GRASSHOPPER_ACTION_FALL } EnGrasshopperAction; typedef enum { /* 0 */ EN_GRASSHOPPER_DECISION_ATTACK, /* 1 */ EN_GRASSHOPPER_DECISION_FLY, - /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES, // Never used in the final game + /* 2 */ EN_GRASSHOPPER_DECISION_ROAM_IN_CIRCLES // Never used in the final game } EnGrasshopperNextAction; typedef enum { /* 0 */ EN_GRASSHOPPER_BANK_STATE_BANKING, - /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE, + /* 1 */ EN_GRASSHOPPER_BANK_STATE_DONE } EnGrasshopperBankState; typedef enum { @@ -74,7 +74,7 @@ typedef enum { /* 4 */ EN_GRASSHOPPER_ANIM_HOVER, /* 5 */ EN_GRASSHOPPER_ANIM_DAMAGE, /* 6 */ EN_GRASSHOPPER_ANIM_DEAD, - /* 7 */ EN_GRASSHOPPER_ANIM_FALL, + /* 7 */ EN_GRASSHOPPER_ANIM_FALL } EnGrasshopperAnim; static s32 sOccupiedIndices[] = { @@ -99,7 +99,7 @@ typedef enum { /* 0x3 */ EN_GRASSHOPPER_DMGEFF_FREEZE, // Damages and freezes the Dragonfly in ice /* 0x4 */ EN_GRASSHOPPER_DMGEFF_LIGHT_ORB, // Damages and surrounds the Dragonfly with light orbs /* 0xE */ EN_GRASSHOPPER_DMGEFF_HOOK = 0xE, // If hit by the Hookshot, it pulls the Dragonfly towards the player - /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE, // Deals regular damage with no extra effect + /* 0xF */ EN_GRASSHOPPER_DMGEFF_NONE // Deals regular damage with no extra effect } EnDragonflyDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h index 11ed8a130..049091393 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.h @@ -17,7 +17,7 @@ typedef enum EnGrasshopperType { /* 0 */ EN_GRASSHOPPER_TYPE_NORMAL, /* 1 */ EN_GRASSHOPPER_TYPE_GROWS_WHEN_SPAWNED, // Spawned by EnEncount1 /* 2 */ EN_GRASSHOPPER_TYPE_WOODFALL_TEMPLE_FINAL_ROOM, - /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL, + /* 3 */ EN_GRASSHOPPER_TYPE_WOODFALL } EnGrasshopperType; typedef struct EnGrasshopperEffect { diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.h b/src/overlays/actors/ovl_En_Gs/z_en_gs.h index 42efabb61..b7af0c582 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.h +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.h @@ -11,12 +11,12 @@ typedef void (*EnGsActionFunc)(struct EnGs*, PlayState*); #define ENGS_GET_FE0(thisx) (((thisx)->params >> 5) & 0x7F) #define ENGS_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) -enum { +typedef enum { /* 0 */ ENGS_0, /* 1 */ ENGS_1, /* 2 */ ENGS_2, - /* 3 */ ENGS_3, -}; + /* 3 */ ENGS_3 +} EnGsParam; typedef struct EnGs { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index d27dd5a59..ea93d617f 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -84,7 +84,7 @@ typedef enum { /* 0 */ WAIT_HEAD_TILT_ANIM, /* 1 */ WALK_ANIM, /* 2 */ DIG_ANIM, - /* 3 */ WALK_ANIM_2, + /* 3 */ WALK_ANIM_2 } EnGuardNutsAnim; typedef enum { diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index 0992aa9d9..180bf8cab 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -37,14 +37,14 @@ typedef enum { /* 4 */ HG_ANIM_REACH_FORWARD, /* 5 */ HG_ANIM_CURL_UP, /* 6 */ HG_ANIM_CROUCHED_PANIC, - /* 7 */ HG_ANIM_PANIC, + /* 7 */ HG_ANIM_PANIC } HgAnimation; typedef enum { /* 0 */ HG_CS_FIRST_ENCOUNTER, /* 1 */ HG_CS_GET_MASK, /* 2 */ HG_CS_SUBSEQUENT_ENCOUNTER, - /* 3 */ HG_CS_SONG_OF_HEALING, + /* 3 */ HG_CS_SONG_OF_HEALING } HgCsIndex; ActorInit En_Hg_InitVars = { diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index 37d5a61f9..f6c90f6b4 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -45,7 +45,7 @@ typedef enum { /* 3 */ HGO_ANIM_CONSOLE, /* 4 */ HGO_ANIM_CONSOLE_HEAD_UP, /* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT, - /* 6 */ HGO_ANIM_TOSS, + /* 6 */ HGO_ANIM_TOSS } HgoAnimation; ActorInit En_Hgo_InitVars = { diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index b6d2c8c40..787a40da7 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -92,22 +92,22 @@ void EnHorse_StickDirection(Vec2f* curStick, f32* stickMag, s16* angle); s32 EnHorse_GetMountSide(EnHorse* this, PlayState* play); typedef struct { - s32 cueId; - s32 csFuncIdx; -} CsActionEntry; + /* 0x0 */ s32 cueId; + /* 0x4 */ s32 csFuncIdx; +} CsActionEntry; // size = 0x8 typedef struct { - s16 x; - s16 y; - s16 z; - s16 speed; - s16 angle; -} RaceWaypoint; + /* 0x0 */ s16 x; + /* 0x2 */ s16 y; + /* 0x4 */ s16 z; + /* 0x6 */ s16 speed; + /* 0x8 */ s16 angle; +} RaceWaypoint; // size = 0xA typedef struct { - s32 numWaypoints; - RaceWaypoint* waypoints; -} RaceInfo; + /* 0x0 */ s32 numWaypoints; + /* 0x4 */ RaceWaypoint* waypoints; +} RaceInfo; // size = 0x8 static AnimationHeader* sEponaAnimations[] = { &object_horse_link_child_Anim_006D44, &object_horse_link_child_Anim_007468, &object_horse_link_child_Anim_005F64, diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.h b/src/overlays/actors/ovl_En_Horse/z_en_horse.h index 0574b3198..3cfc1fb54 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.h +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.h @@ -133,7 +133,7 @@ typedef enum EnHorseParam { /* 17 */ ENHORSE_17, /* 18 */ ENHORSE_18, /* 19 */ ENHORSE_19, - /* 20 */ ENHORSE_20, + /* 20 */ ENHORSE_20 } EnHorseParam; /** diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h index d43f1f90c..9033878a4 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.h @@ -11,7 +11,7 @@ typedef s32 (*EnHorseGameCheckUnkFunc)(struct EnHorseGameCheck*, PlayState*); #define ENHORSEGAMECHECK_GET_FF(thisx) ((thisx)->params & 0xFF) #define ENHORSEGAMECHECK_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8) -enum { +typedef enum { /* 0 */ ENHORSEGAMECHECK_FF_0, /* 1 */ ENHORSEGAMECHECK_FF_1, /* 2 */ ENHORSEGAMECHECK_FF_2, @@ -22,8 +22,8 @@ enum { /* 7 */ ENHORSEGAMECHECK_FF_7, /* 8 */ ENHORSEGAMECHECK_FF_8, /* 9 */ ENHORSEGAMECHECK_FF_9, - /* 10 */ ENHORSEGAMECHECK_FF_MAX, -}; + /* 10 */ ENHORSEGAMECHECK_FF_MAX +} EnHorseGameCheckParam; typedef struct EnHorseGameCheck { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index 71b338121..d4a534ad1 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -169,8 +169,7 @@ typedef enum { /* 0x4 */ DMG_EFF_FIRE = 0x2, /* 0x0 */ DMG_EFF_ICE, /* 0x4 */ DMG_EFF_LIGHT_SPARKS, - /* 0xF */ DMG_EFF_IMMUNE = 0xF, - + /* 0xF */ DMG_EFF_IMMUNE = 0xF } EnIkDmgEff; static DamageTable sDamageTableArmor = { diff --git a/src/overlays/actors/ovl_En_In/z_en_in.h b/src/overlays/actors/ovl_En_In/z_en_in.h index c5d7500b6..6f4dd5d95 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.h +++ b/src/overlays/actors/ovl_En_In/z_en_in.h @@ -33,7 +33,7 @@ typedef enum { /* 14 */ ENIN_ANIM_14, /* 15 */ ENIN_ANIM_15, /* 16 */ ENIN_ANIM_16, - /* 17 */ ENIN_ANIM_17, + /* 17 */ ENIN_ANIM_17 } EnInAnimation; #define ENIN_GET_TYPE(thisx) ((thisx)->params & 0x1FF) diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index 7479a6208..df217b86d 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -54,14 +54,14 @@ typedef enum { /* 16 */ EN_JG_ANIM_DEPRESSED, /* 17 */ EN_JG_ANIM_CUTSCENE_IDLE, /* 18 */ EN_JG_ANIM_CRADLE, - /* 19 */ EN_JG_ANIM_MAX, + /* 19 */ EN_JG_ANIM_MAX } EnJgAnimation; typedef enum { - /* 0x0 */ EN_JG_ACTION_FIRST_THAW, - /* 0x1 */ EN_JG_ACTION_SPAWNING, - /* 0x2 */ EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW, - /* 0x3 */ EN_JG_ACTION_LULLABY_INTRO_CS, + /* 0 */ EN_JG_ACTION_FIRST_THAW, + /* 1 */ EN_JG_ACTION_SPAWNING, + /* 2 */ EN_JG_ACTION_FROZEN_OR_NON_FIRST_THAW, + /* 3 */ EN_JG_ACTION_LULLABY_INTRO_CS } EnJgAction; ActorInit En_Jg_InitVars = { diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 86d74f69a..930a0d7a3 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -113,15 +113,15 @@ Vec3f D_80972030 = { -3.0f, 50.0f, 90.0f }; Vec3f D_8097203C = { 10.0f, -15.0f, 2.0f }; typedef enum { - /* 0x0 */ ENKAKASI_ANIM_ARMS_CROSSED_ROCKING, // arms crossed and rocking back and forth - /* 0x1 */ ENKAKASI_ANIM_SIDEWAYS_SHAKING, - /* 0x2 */ ENKAKASI_ANIM_HOPPING_REGULAR, // bounce bounce bounce (repeat) - /* 0x3 */ ENKAKASI_ANIM_SPIN_REACH_OFFER, // spin and then reaching toward player - /* 0x4 */ ENKAKASI_ANIM_TWIRL, // slower cinimatic twirl - /* 0x5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx - /* 0x6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused? - /* 0x7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over - /* 0x8 */ ENKAKASI_ANIM_IDLE, // slow stretching wiggle, ends in regular position + /* 0 */ ENKAKASI_ANIM_ARMS_CROSSED_ROCKING, // arms crossed and rocking back and forth + /* 1 */ ENKAKASI_ANIM_SIDEWAYS_SHAKING, + /* 2 */ ENKAKASI_ANIM_HOPPING_REGULAR, // bounce bounce bounce (repeat) + /* 3 */ ENKAKASI_ANIM_SPIN_REACH_OFFER, // spin and then reaching toward player + /* 4 */ ENKAKASI_ANIM_TWIRL, // slower cinimatic twirl + /* 5 */ ENKAKASI_ANIM_ARMS_CROSSED_STILL, // arms crossed but still, also some noise sfx + /* 6 */ ENKAKASI_ANIM_WAVE, // "wave" short sideways shake, stops early, partial? unused? + /* 7 */ ENKAKASI_ANIM_SLOWROLL, // partial bounch, ends looking left, OFFER anim takes over + /* 8 */ ENKAKASI_ANIM_IDLE // slow stretching wiggle, ends in regular position } EnKakasiAnimation; static AnimationHeader* sAnimations[] = { diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c index 66aa6d5c7..34b3d6405 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -93,11 +93,11 @@ static ColliderCylinderInit sAttackCylinderInit = { static CollisionCheckInfoInit sColChkInfoInit = { 1, 15, 80, MASS_HEAVY }; typedef enum { - /* 0x0 */ KAREBABA_DMGEFF_NONE, - /* 0x2 */ KAREBABA_DMGEFF_FIRE = 2, - /* 0x3 */ KAREBABA_DMGEFF_ICE, - /* 0x4 */ KAREBABA_DMGEFF_LIGHT, - /* 0x5 */ KAREBABA_DMGEFF_ELECTRIC, + /* 0 */ KAREBABA_DMGEFF_NONE, + /* 2 */ KAREBABA_DMGEFF_FIRE = 2, + /* 3 */ KAREBABA_DMGEFF_ICE, + /* 4 */ KAREBABA_DMGEFF_LIGHT, + /* 5 */ KAREBABA_DMGEFF_ELECTRIC } DekuBabaDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h index aa05aec0a..045bef42a 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.h @@ -11,7 +11,7 @@ typedef void (*EnKarebabaActionFunc)(struct EnKarebaba*, PlayState*); typedef enum { /* 0 */ ENKAREBABA_0, // Unused, always shrinks and drops a Deku Nut /* 1 */ ENKAREBABA_1, // Drops sticks (Only type OoT has) - /* 2 */ KAREBABA_MINI, + /* 2 */ KAREBABA_MINI } KarebabaType; typedef struct EnKarebaba { diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 147ca2401..16ce97153 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -245,14 +245,14 @@ void EnKusa_DropCollectible(EnKusa* this, PlayState* play) { s32 collectableParams; if ((KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_GRASS) || (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_BUSH)) { - if (!KUSA_GET_PARAMS_0C(&this->actor)) { + if (!KUSA_GET_PARAM_0C(&this->actor)) { Item_DropCollectibleRandom(play, NULL, &this->actor.world.pos, KUSA_GET_RAND_COLLECTIBLE_ID(&this->actor) * 0x10); } } else if (KUSA_GET_TYPE(&this->actor) == ENKUSA_TYPE_REGROWING_GRASS) { Item_DropCollectible(play, &this->actor.world.pos, 3); } else { - collectible = func_800A8150(KUSA_GET_PARAMS_3F(&this->actor)); + collectible = func_800A8150(KUSA_GET_PARAM_3F(&this->actor)); if (collectible >= 0) { collectableParams = KUSA_GET_COLLECTIBLE_ID(&this->actor); Item_DropCollectible(play, &this->actor.world.pos, (collectableParams << 8) | collectible); diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h index 56f55af3e..b231f3e0e 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h @@ -28,8 +28,8 @@ typedef struct EnKusa { #define KUSA_GET_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0x7F) #define KUSA_GET_RAND_COLLECTIBLE_ID(thisx) (((thisx)->params >> 8) & 0xF) #define KUSA_SHOULD_SPAWN_BUGS(thisx) (((thisx)->params >> 0x4) & 1) -#define KUSA_GET_PARAMS_0C(thisx) (((thisx)->params >> 0xC) & 0x1) -#define KUSA_GET_PARAMS_3F(thisx) (((thisx)->params >> 0x2) & 0x3F) +#define KUSA_GET_PARAM_0C(thisx) (((thisx)->params >> 0xC) & 0x1) +#define KUSA_GET_PARAM_3F(thisx) (((thisx)->params >> 0x2) & 0x3F) #define KUSA_GET_TYPE(thisx)((thisx)->params & 0x3) diff --git a/src/overlays/actors/ovl_En_Light/z_en_light.c b/src/overlays/actors/ovl_En_Light/z_en_light.c index 0908649dc..f3c3f4705 100644 --- a/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -31,9 +31,9 @@ ActorInit En_Light_InitVars = { }; typedef struct { - /* 0x00 */ Color_RGBA8 unk_00; - /* 0x04 */ Color_RGB8 unk_04; - /* 0x07 */ u8 unk_07; + /* 0x0 */ Color_RGBA8 unk_00; + /* 0x4 */ Color_RGB8 unk_04; + /* 0x7 */ u8 unk_07; } EnLightStruct; // size = 0x8 EnLightStruct D_808666D0[] = { diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index d295b1c7f..fe26c18eb 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -44,14 +44,14 @@ void EnMa4_InitFaceExpression(EnMa4* this); typedef enum { /* 0 */ MA4_TYPE_DAY1, /* 1 */ MA4_TYPE_ALIENS_DEFEATED, - /* 2 */ MA4_TYPE_ALIENS_WON, + /* 2 */ MA4_TYPE_ALIENS_WON } EnMa4Type; typedef enum { /* 0 */ MA4_STATE_DEFAULT, /* 1 */ MA4_STATE_HORSEBACKGAME, /* 2 */ MA4_STATE_AFTERHORSEBACKGAME, - /* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS, + /* 3 */ MA4_STATE_AFTERDESCRIBETHEMCS } EnMa4State; ActorInit En_Ma4_InitVars = { diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h index 9a3801d91..3e321cc56 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.h @@ -19,9 +19,9 @@ typedef enum { } MinifrogType; typedef enum { - /* 0x00 */ MINIFROG_STATE_JUMP, - /* 0x01 */ MINIFROG_STATE_AIR, - /* 0x02 */ MINIFROG_STATE_GROUND + /* 0 */ MINIFROG_STATE_JUMP, + /* 1 */ MINIFROG_STATE_AIR, + /* 2 */ MINIFROG_STATE_GROUND } MinifrogJumpState; typedef struct EnMinifrog { diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c index 3b6cbaf86..3aac9ae11 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -80,7 +80,7 @@ typedef enum { /* 0x2 */ MINISLIME_DMGEFF_FIRE = 0x2, /* 0x3 */ MINISLIME_DMGEFF_ICE, /* 0xE */ MINISLIME_DMGEFF_HOOKSHOT = 0xE, - /* 0xF */ MINISLIME_DMGEFF_BREAK_ICE, + /* 0xF */ MINISLIME_DMGEFF_BREAK_ICE } MinislimeDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h index 77cabe9b6..8d29f2b8a 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.h @@ -21,13 +21,13 @@ typedef enum { /* 0x8 */ MINISLIME_DEFEAT_MELT, /* 0x9 */ MINISLIME_DESPAWN, /* 0xA */ MINISLIME_SETUP_GEKKO_THROW, - /* 0xB */ MINISLIME_GEKKO_THROW, + /* 0xB */ MINISLIME_GEKKO_THROW } EnMinislimeState; typedef enum { - /* 0x0 */ MINISLIME_INACTIVE_STATE, - /* 0x1 */ MINISLIME_ACTIVE_CONTINUE_STATE, - /* 0x2 */ MINISLIME_ACTIVE_INIT_STATE, + /* 0 */ MINISLIME_INACTIVE_STATE, + /* 1 */ MINISLIME_ACTIVE_CONTINUE_STATE, + /* 2 */ MINISLIME_ACTIVE_INIT_STATE } EnMinislimeActiveState; typedef struct EnMinislime { 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 c94a94b12..db05f0d61 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 @@ -23,9 +23,9 @@ void EnMttag_PotentiallyRestartRace(EnMttag* this, PlayState* play); void EnMttag_HandleCantWinChoice(EnMttag* this, PlayState* play); typedef enum { - GORON_RACE_CHEAT_NO_CHEATING, - GORON_RACE_CHEAT_FALSE_START, - GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND, + /* 0 */ GORON_RACE_CHEAT_NO_CHEATING, + /* 1 */ GORON_RACE_CHEAT_FALSE_START, + /* 2 */ GORON_RACE_CHEAT_TRYING_TO_REACH_GOAL_FROM_BEHIND } PlayerCheatStatus; ActorInit En_Mt_tag_InitVars = { diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 4edadf412..474c1d2df 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -43,7 +43,7 @@ typedef enum EnNbScheduleResult { /* 1 */ EN_NB_SCH_1, /* 2 */ EN_NB_SCH_2, /* 3 */ EN_NB_SCH_3, - /* 4 */ EN_NB_SCH_4, + /* 4 */ EN_NB_SCH_4 } EnNbScheduleResult; static u8 sScheduleScript[] = { diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.h b/src/overlays/actors/ovl_En_Nb/z_en_nb.h index f11464c79..2a784e096 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.h +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.h @@ -17,7 +17,7 @@ typedef enum EnNbAnimation { /* 2 */ EN_NB_ANIM_TALK_ONCE, /* 3 */ EN_NB_ANIM_TALK_LOOP, /* 4 */ EN_NB_ANIM_ANGRY, - /* 5 */ EN_NB_ANIM_RELIEVED, + /* 5 */ EN_NB_ANIM_RELIEVED } EnNbAnimation; typedef struct EnNb { diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c index 66098a9d5..755385d00 100644 --- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c +++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c @@ -57,7 +57,7 @@ typedef enum { /* 0xC */ EN_NEO_REEBA_DMGEFF_HOOKSHOT = 0xC, // No damage, used only for hookshot /* 0xD */ EN_NEO_REEBA_DMGEFF_ELECTRIC_STUN, // Electric effects, frozen in place /* 0xE */ EN_NEO_REEBA_DMGEFF_NONE, // Normal hit - /* 0xF */ EN_NEO_REEBA_DMGEFF_SHATTER, // Normal hit that can break ice if leever is frozen + /* 0xF */ EN_NEO_REEBA_DMGEFF_SHATTER // Normal hit that can break ice if leever is frozen } EnNeoReebaDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index 03cdad42c..4982f7e75 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -36,7 +36,7 @@ void EnNiw_SpawnFeather(EnNiw* this, Vec3f* pos, Vec3f* vel, Vec3f* accel, f32 s s16 sCuccoStormActive = false; // why wouldnt they just use actionFunc? -enum EnNiwState { +typedef enum EnNiwState { /* 0 */ NIW_STATE_IDLE, /* 1 */ NIW_STATE_ANGRY1, // 1/2/3 are stages of summoning cucco storm /* 2 */ NIW_STATE_ANGRY2, @@ -45,8 +45,8 @@ enum EnNiwState { /* 5 */ NIW_STATE_FALLING, /* 6 */ NIW_STATE_SWIMMING, /* 7 */ NIW_STATE_RUNNING, - /* 8 */ NIW_STATE_HOPPING, -}; + /* 8 */ NIW_STATE_HOPPING +} EnNiwState; ActorInit En_Niw_InitVars = { ACTOR_EN_NIW, diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.h b/src/overlays/actors/ovl_En_Niw/z_en_niw.h index c60397535..06f487800 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.h +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.h @@ -106,7 +106,7 @@ typedef enum { /* 2 */ NIW_ANIM_PECKING_AND_WAVING, // wings move along their axis, like human hand waving /* 3 */ NIW_ANIM_PECKING_AND_FORFLAPPING, // (unused) low (yaw based) flapping, forward and back /* 4 */ NIW_ANIM_FREEZE, // used during Cucco Storm - /* 5 */ NIW_ANIM_PECKING_SLOW_FORFLAPPING, // wing speed half that of 3 + /* 5 */ NIW_ANIM_PECKING_SLOW_FORFLAPPING // wing speed half that of 3 } EnNiwHeadAndWingAnimationState; diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index ac1e9749a..fc6ef71db 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -32,14 +32,14 @@ void EnNwc_DrawAdultBody(Actor* thisx, PlayState* play); s32 EnNwc_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); EnHs* EnNwc_FindGrog(PlayState* play); -enum EnNiwState { - /* -1 */ NWC_STATE_NIW_LOADED = -1, // set after loading object_niw - /* 0 */ NWC_STATE_CHECK_BREMAN = 0, // checking for breman mask - /* 1 */ NWC_STATE_TURNING, // turning to face a new direction to explore - /* 2 */ NWC_STATE_HOPPING_FORWARD, // hopping to go explore - /* 3 */ NWC_STATE_FOLLOWING, // following the player - /* 4 */ NWC_STATE_RUNNING, // running from the player after failed breman march -}; +typedef enum EnNwcState { + /* -1 */ NWC_STATE_NIW_LOADED = -1, // set after loading object_niw + /* 0 */ NWC_STATE_CHECK_BREMAN, // checking for breman mask + /* 1 */ NWC_STATE_TURNING, // turning to face a new direction to explore + /* 2 */ NWC_STATE_HOPPING_FORWARD, // hopping to go explore + /* 3 */ NWC_STATE_FOLLOWING, // following the player + /* 4 */ NWC_STATE_RUNNING // running from the player after failed breman march +} EnNwcState; ActorInit En_Nwc_InitVars = { ACTOR_EN_NWC, diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index 4ff55d7a0..52f611c0e 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -44,8 +44,8 @@ void EnOwl_ChangeMode(EnOwl* this, EnOwlActionFunc actionFunc, EnOwlFunc unkFunc AnimationHeader* animation, f32 morphFrames); typedef enum { - /* 0x00 */ OWL_REPEAT, - /* 0x01 */ OWL_OK + /* 0 */ OWL_REPEAT, + /* 1 */ OWL_OK } EnOwlMessageChoice; ActorInit En_Owl_InitVars = { diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.h b/src/overlays/actors/ovl_En_Owl/z_en_owl.h index 5e02aba94..095434fa0 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.h +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.h @@ -17,7 +17,7 @@ typedef enum { /* 0x002 */ ENOWL_GET_TYPE_2, /* 0x003 */ ENOWL_GET_TYPE_3, /* 0x01E */ ENOWL_GET_TYPE_30 = 30, - /* 0x3E8 */ ENOWL_GET_TYPE_1000 = 1000, + /* 0x3E8 */ ENOWL_GET_TYPE_1000 = 1000 } EnOwlType; typedef struct EnOwl { diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index 0caeb9305..079e3027d 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -80,12 +80,12 @@ ActorInit En_Pametfrog_InitVars = { }; typedef enum { - /* 0x0 */ GEKKO_DMGEFF_NONE, - /* 0x1 */ GEKKO_DMGEFF_STUN, - /* 0x2 */ GEKKO_DMGEFF_FIRE, - /* 0x3 */ GEKKO_DMGEFF_ICE, - /* 0x4 */ GEKKO_DMGEFF_LIGHT, - /* 0x5 */ GEKKO_DMGEFF_ZORA_BARRIER, + /* 0 */ GEKKO_DMGEFF_NONE, + /* 1 */ GEKKO_DMGEFF_STUN, + /* 2 */ GEKKO_DMGEFF_FIRE, + /* 3 */ GEKKO_DMGEFF_ICE, + /* 4 */ GEKKO_DMGEFF_LIGHT, + /* 5 */ GEKKO_DMGEFF_ZORA_BARRIER } EnPametfrogDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h index 90bc0cb1b..31a3be14b 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.h @@ -9,16 +9,16 @@ struct EnPametfrog; typedef void (*EnPametfrogActionFunc)(struct EnPametfrog*, PlayState*); typedef enum { - /* 0x0 */ GEKKO_PRE_SNAPPER, - /* 0x1 */ GEKKO_GET_SNAPPER, - /* 0x2 */ GEKKO_INIT_SNAPPER, - /* 0x3 */ GEKKO_ON_SNAPPER, - /* 0x4 */ GEKKO_REAR_ON_SNAPPER, - /* 0x5 */ GEKKO_CUTSCENE, - /* 0x6 */ GEKKO_FALL_OFF_SNAPPER, - /* 0x7 */ GEKKO_RETURN_TO_SNAPPER, - /* 0x8 */ GEKKO_JUMP_ON_SNAPPER, - /* 0x9 */ GEKKO_DEFEAT, + /* 0 */ GEKKO_PRE_SNAPPER, + /* 1 */ GEKKO_GET_SNAPPER, + /* 2 */ GEKKO_INIT_SNAPPER, + /* 3 */ GEKKO_ON_SNAPPER, + /* 4 */ GEKKO_REAR_ON_SNAPPER, + /* 5 */ GEKKO_CUTSCENE, + /* 6 */ GEKKO_FALL_OFF_SNAPPER, + /* 7 */ GEKKO_RETURN_TO_SNAPPER, + /* 8 */ GEKKO_JUMP_ON_SNAPPER, + /* 9 */ GEKKO_DEFEAT } EnPametfrogState; typedef struct EnPametfrog { diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.h b/src/overlays/actors/ovl_En_Part/z_en_part.h index 662e8574e..5bd4de503 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.h +++ b/src/overlays/actors/ovl_En_Part/z_en_part.h @@ -8,11 +8,11 @@ struct EnPart; typedef void (*EnPartActionFunc)(struct EnPart*, PlayState*); typedef enum { - ENPART_TYPE_0 = 0, - ENPART_TYPE_1 = 1, - ENPART_TYPE_4 = 4, - ENPART_TYPE_15 = 15 -} EnPartParams; + /* 0x0 */ ENPART_TYPE_0, + /* 0x1 */ ENPART_TYPE_1, + /* 0x4 */ ENPART_TYPE_4 = 4, + /* 0xF */ ENPART_TYPE_15 = 15 +} EnPartParam; typedef struct EnPart { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c index 652c19dc7..24517f8aa 100644 --- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c +++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c @@ -58,7 +58,7 @@ static ColliderSphereInit sSphereInit = { typedef enum { /* 0x0 */ POE_BALLOON_DMGEFF_NONE, - /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF, + /* 0xF */ POE_BALLOON_DMGEFF_POP = 0xF } PoeBalloonDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c index a1ea97199..357b08bdd 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c @@ -101,7 +101,7 @@ typedef enum { /* 0x1 */ POE_SISTERS_DMGEFF_UNKDMG12, // set in DamageTable, but unused /* 0x4 */ POE_SISTERS_DMGEFF_LIGHTARROWS = 0x4, /* 0xE */ POE_SISTERS_DMGEFF_SPINATTACK = 0xE, - /* 0xF */ POE_SISTERS_DMGEFF_DEKUNUT = 0xF, + /* 0xF */ POE_SISTERS_DMGEFF_DEKUNUT } PoeSisterDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h index cfb8a1697..f800788c7 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.h @@ -15,17 +15,17 @@ typedef void (*EnPoSistersActionFunc)(struct EnPoSisters*, PlayState*); #define POE_SISTERS_PARAMS(observerFlag, megClone, type) (((observerFlag) << 0xC) | ((megClone & 3) << 0xA) | ((type & 3) << 8)) typedef enum { - /* 0 */ POE_SISTERS_TYPE_MEG, // purple - /* 1 */ POE_SISTERS_TYPE_JO, // red - /* 2 */ POE_SISTERS_TYPE_BETH, // blue - /* 3 */ POE_SISTERS_TYPE_AMY, // green + /* 0 */ POE_SISTERS_TYPE_MEG, // purple + /* 1 */ POE_SISTERS_TYPE_JO, // red + /* 2 */ POE_SISTERS_TYPE_BETH, // blue + /* 3 */ POE_SISTERS_TYPE_AMY // green } EnPoSisterType; typedef enum { /* 0 */ POE_SISTERS_MEG_REAL, /* 1 */ POE_SISTERS_MEG_CLONE1, /* 2 */ POE_SISTERS_MEG_CLONE2, - /* 3 */ POE_SISTERS_MEG_CLONE3, + /* 3 */ POE_SISTERS_MEG_CLONE3 } EnPoSisterMegCloneID; typedef struct EnPoSisters { diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index ef15618c9..6d16c1418 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -39,7 +39,7 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play); typedef enum { /* 0 */ EN_PP_COLLISION_RESULT_OK, /* 1 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_INTO_WALL, - /* 2 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE, + /* 2 */ EN_PP_COLLISION_RESULT_ABOUT_TO_RUN_OFF_LEDGE } EnPpCollisionResult; typedef enum { @@ -56,13 +56,13 @@ typedef enum { /* 10 */ EN_PP_ACTION_MASK_DEAD, /* 11 */ EN_PP_ACTION_SPAWN_BODY_PARTS, /* 12 */ EN_PP_ACTION_DONE_SPAWNING_BODY_PARTS, - /* 13 */ EN_PP_ACTION_BODY_PART_MOVE, + /* 13 */ EN_PP_ACTION_BODY_PART_MOVE } EnPpAction; typedef enum { /* 0 */ EN_PP_MASK_DETACH_STATE_START, /* 1 */ EN_PP_MASK_DETACH_STATE_FALL, - /* 2 */ EN_PP_MASK_DETACH_STATE_DIE, + /* 2 */ EN_PP_MASK_DETACH_STATE_DIE } EnPpMaskDetachState; static s32 sCurrentDeadBodyPartIndex = 0; @@ -77,7 +77,7 @@ typedef enum { /* 0xC */ EN_PP_DMGEFF_KNOCK_OFF_MASK = 0xC, // Knocks off the Hiploop's mask or deals regular damage /* 0xD */ EN_PP_DMGEFF_HOOKSHOT, // Pulls the Hiploop's mask to the player or deals regular damage /* 0xE */ EN_PP_DMGEFF_GORON_POUND, // Knocks off the Hiploop's mask or forces it to jump - /* 0xF */ EN_PP_DMGEFF_DAMAGE, // Deals regular damage + /* 0xF */ EN_PP_DMGEFF_DAMAGE // Deals regular damage } EnPpDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.h b/src/overlays/actors/ovl_En_Pp/z_en_pp.h index aabbd9e2e..2409487be 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.h +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.h @@ -22,7 +22,7 @@ typedef enum { /* 13 */ EN_PP_TYPE_BODY_PART_FRONT_RIGHT_LOWER_LEG = 13, /* 17 */ EN_PP_TYPE_BODY_PART_LEFT_WING_MIDDLE = 17, /* 23 */ EN_PP_TYPE_BODY_PART_RIGHT_WING_MIDDLE = 23, - /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26, + /* 26 */ EN_PP_TYPE_BODY_PART_CENTER_WING_MIDDLE = 26 } EnPpType; typedef struct EnPp { diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index 34ce6bafb..9b5f1ef38 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -26,7 +26,7 @@ typedef enum { typedef enum { /* 0 */ POSTBOX_BEHAVIOUR_WAIT_FOR_ITEM, - /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM, + /* 1 */ POSTBOX_BEHAVIOUR_TAKE_ITEM } PostboxBehaviour; static u8 D_80B2C200[] = { diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.h b/src/overlays/actors/ovl_En_Pst/z_en_pst.h index 6051924da..c3ebd58a8 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.h +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.h @@ -9,7 +9,7 @@ typedef enum { /* 1 */ POSTBOX_NORTH_CLOCKTOWN, /* 2 */ POSTBOX_EAST_UPPER_CLOCKTOWN, /* 3 */ POSTBOX_EAST_LOWER_CLOCKTOWN, - /* 4 */ POSTBOX_SOUTH_LOWER_CLOCKTOWN, + /* 4 */ POSTBOX_SOUTH_LOWER_CLOCKTOWN } PostboxType; struct EnPst; diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index d08110e43..ba7676655 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -62,13 +62,13 @@ void EnRacedog_PlaySfxWalk(EnRacedog* this); * Stores various information for each dog in the race, mostly related to speed. */ typedef struct { - f32 sprintSpeedMultiplier; // Target speed is multiplied by this when the dog is in the last 1/4 of the race - f32 goodConditionSpeedMultiplier; // Target speed is multiplied by this if the dog is in good condition - s16 color; // The dog's color, which is used as an index into sBaseSpeeds - s16 index; // The dog's index within sDogInfo - s16 pointToUseSecondBaseSpeed; // When the dog is at or after this point, the second value in sBaseSpeeds is used - s16 textId; // Used to determine the dog's condition -} RaceDogInfo; + /* 0x0 */ f32 sprintSpeedMultiplier; // Multiplies target speed when the dog is in the last 1/4 of the race + /* 0x4 */ f32 goodConditionSpeedMultiplier; // Multiplies target speed if the dog is in good condition + /* 0x8 */ s16 color; // The dog's color, which is used as an index into sBaseSpeeds + /* 0xA */ s16 index; // The dog's index within sDogInfo + /* 0xC */ s16 pointToUseSecondBaseSpeed; // When the dog is at or after this point, use the second sBaseSpeeds value + /* 0xE */ s16 textId; // Used to determine the dog's condition +} RaceDogInfo; // size = 0x10 ActorInit En_Racedog_InitVars = { ACTOR_EN_RACEDOG, diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index 0c344e75f..055b308f2 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -40,7 +40,7 @@ typedef enum { /* 2 */ EN_RAF_ANIM_CHEW, /* 3 */ EN_RAF_ANIM_SPIT, /* 4 */ EN_RAF_ANIM_CONVULSE, - /* 5 */ EN_RAF_ANIM_DEATH, + /* 5 */ EN_RAF_ANIM_DEATH } EnRafAnimation; typedef enum { @@ -51,7 +51,7 @@ typedef enum { /* 4 */ EN_RAF_ACTION_EXPLODE, /* 5 */ EN_RAF_ACTION_CONVULSE, /* 6 */ EN_RAF_ACTION_DISSOLVE, - /* 7 */ EN_RAF_ACTION_DORMANT, + /* 7 */ EN_RAF_ACTION_DORMANT } EnRafAction; typedef enum { diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index 9766fe694..9a0e1864e 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -70,18 +70,18 @@ typedef enum { /* 16 */ EN_RAILGIBUD_ANIM_SLUMP_LOOP, /* 17 */ EN_RAILGIBUD_ANIM_CONVULSION, /* 18 */ EN_RAILGIBUD_ANIM_ARMS_UP_START, - /* 19 */ EN_RAILGIBUD_ANIM_ARMS_UP_LOOP, + /* 19 */ EN_RAILGIBUD_ANIM_ARMS_UP_LOOP } EnRailgibudAnimation; typedef enum { /* 0 */ EN_RAILGIBUD_TYPE_GIBDO, - /* 1 */ EN_RAILGIBUD_TYPE_REDEAD, + /* 1 */ EN_RAILGIBUD_TYPE_REDEAD } EnRailgibudType; typedef enum { /* 0 */ EN_RAILGIBUD_GRAB_START, /* 1 */ EN_RAILGIBUD_GRAB_ATTACK, - /* 2 */ EN_RAILGIBUD_GRAB_RELEASE, + /* 2 */ EN_RAILGIBUD_GRAB_RELEASE } EnRailgibudGrabState; ActorInit En_Railgibud_InitVars = { @@ -147,7 +147,7 @@ typedef enum { /* 0xC */ EN_RAILGIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect /* 0xD */ EN_RAILGIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation /* 0xE */ EN_RAILGIBUD_DMGEFF_LIGHT_RAY, // Instantly kills a Redead on contact - /* 0xF */ EN_RAILGIBUD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation + /* 0xF */ EN_RAILGIBUD_DMGEFF_DAMAGE // Deals damage and plays the damage animation } EnRailgibudDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index e145291f6..7d585c234 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -32,7 +32,7 @@ void EnRat_PostDetonation(EnRat* this, PlayState* play); typedef enum { /* -2 */ EN_RAT_HOOK_STARTED = -2, - /* -1 */ EN_RAT_HOOKED, + /* -1 */ EN_RAT_HOOKED } EnRatHookedState; ActorInit En_Rat_InitVars = { @@ -70,7 +70,7 @@ static ColliderSphereInit sSphereInit = { typedef enum { /* 0x0 */ EN_RAT_DMGEFF_NONE, /* 0x1 */ EN_RAT_DMGEFF_STUN, - /* 0xF */ EN_RAT_DMGEFF_HOOKSHOT = 0xF, // Pulls the Real Bombchu towards the player + /* 0xF */ EN_RAT_DMGEFF_HOOKSHOT = 0xF // Pulls the Real Bombchu towards the player } EnRatDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.h b/src/overlays/actors/ovl_En_Rat/z_en_rat.h index 9472e8c31..28c880a92 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.h +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.h @@ -21,7 +21,7 @@ */ typedef enum { /* 0 */ EN_RAT_TYPE_DUNGEON, - /* 1 */ EN_RAT_TYPE_OVERWORLD, + /* 1 */ EN_RAT_TYPE_OVERWORLD } EnRatType; struct EnRat; diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index 01b9cdd6d..34fc41192 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -94,7 +94,7 @@ typedef enum { /* 1 */ EN_RD_GRAB_INITIAL_DAMAGE, /* 2 */ EN_RD_GRAB_ATTACK, /* 3 */ EN_RD_GRAB_RELEASE, - /* 4 */ EN_RD_GRAB_END, + /* 4 */ EN_RD_GRAB_END } EnRdGrabState; ActorInit En_Rd_InitVars = { @@ -139,7 +139,7 @@ typedef enum { /* 0xC */ EN_RD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect /* 0xD */ EN_RD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation /* 0xE */ EN_RD_DMGEFF_LIGHT_RAY, // Instantly kills on contact - /* 0xF */ EN_RD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation + /* 0xF */ EN_RD_DMGEFF_DAMAGE // Deals damage and plays the damage animation } EnRdDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.h b/src/overlays/actors/ovl_En_Rd/z_en_rd.h index f5fbf82cb..fced38e75 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.h +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.h @@ -27,7 +27,7 @@ typedef enum { /* 4 */ EN_RD_TYPE_FROZEN, // Unused in the final game /* 5 */ EN_RD_TYPE_SQUATTING_DANCE, /* 6 */ EN_RD_TYPE_CLAPPING_DANCE, - /* 7 */ EN_RD_TYPE_PIROUETTE, + /* 7 */ EN_RD_TYPE_PIROUETTE } EnRdType; typedef struct EnRd { diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.h b/src/overlays/actors/ovl_En_Rr/z_en_rr.h index e996cfb12..6f4178dd9 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.h +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.h @@ -7,12 +7,12 @@ struct EnRr; typedef void (*EnRrActionFunc)(struct EnRr*, PlayState*); -enum { +typedef enum { /* 0 */ ENRR_0, /* 1 */ ENRR_1, /* 2 */ ENRR_2, - /* 3 */ ENRR_3, -}; + /* 3 */ ENRR_3 +} EnRrParam; typedef struct { /* 0x00 */ f32 unk_00; diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index 69ad52a2d..351b2f146 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -11,11 +11,11 @@ #define THIS ((EnRuppecrow*)thisx) -enum { - ENRUPPECROW_EFFECT_NONE = 0, - ENRUPPECROW_EFFECT_ICE = 10, - ENRUPPECROW_EFFECT_LIGHT = 20, -}; +typedef enum { + /* 0x00 */ ENRUPPECROW_EFFECT_NONE = 0, + /* 0x0A */ ENRUPPECROW_EFFECT_ICE = 10, + /* 0x14 */ ENRUPPECROW_EFFECT_LIGHT = 20 +} EnRuppecrowEffect; void EnRuppecrow_Init(Actor* thisx, PlayState* play2); void EnRuppecrow_Destroy(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c index c135f63da..5a3dc440a 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c @@ -21,7 +21,7 @@ void func_80BD6B18(EnScRuppe* this, PlayState* play); typedef struct { /* 0x0 */ TexturePtr tex; /* 0x4 */ s16 amount; -} RuppeInfo; +} RuppeInfo; // size = 0x8 ActorInit En_Sc_Ruppe_InitVars = { ACTOR_EN_SC_RUPPE, diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h index 8ef0f4c56..afc955985 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.h @@ -23,7 +23,7 @@ typedef enum { /* 2 */ RUPEE_RED, /* 3 */ RUPEE_ORANGE, /* 4 */ RUPEE_PURPLE, - /* 5 */ RUPEE_UNUSED, + /* 5 */ RUPEE_UNUSED } RupeeType; #endif // Z_EN_SC_RUPPE_H diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.h b/src/overlays/actors/ovl_En_Skb/z_en_skb.h index 1fbf441ea..1970ebf8c 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.h +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.h @@ -10,8 +10,8 @@ typedef void (*EnSkbActionFunc)(struct EnSkb*, PlayState*); #define ENSKB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF) typedef enum { - /* 0 */ ENSKB_PARAMS_0, -} EnSkbParams; + /* 0 */ ENSKB_PARAM_0 +} EnSkbParam; typedef struct EnSkb { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.c b/src/overlays/actors/ovl_En_Slime/z_en_slime.c index 8d7a0e071..5c962978e 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -28,7 +28,7 @@ typedef enum EnSlimeDamageEffect { /* 0x4 */ EN_SLIME_DMGEFF_LIGHT, /* 0x5 */ EN_SLIME_DMGEFF_ELECTRIC, /* 0xE */ EN_SLIME_DMGEFF_HOOKSHOT = 0xE, - /* 0xF */ EN_SLIME_DMGEFF_BLUNT, + /* 0xF */ EN_SLIME_DMGEFF_BLUNT } EnSlimeDamageEffect; void EnSlime_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.h b/src/overlays/actors/ovl_En_Slime/z_en_slime.h index 0a40a117e..130c442de 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h @@ -42,7 +42,7 @@ typedef enum EnSlimeType { /* 0 */ EN_SLIME_TYPE_BLUE, /* 1 */ EN_SLIME_TYPE_GREEN, /* 2 */ EN_SLIME_TYPE_YELLOW, - /* 3 */ EN_SLIME_TYPE_RED, + /* 3 */ EN_SLIME_TYPE_RED } EnSlimeType; #endif // Z_EN_SLIME_H diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index 5a65c1094..ed3235345 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -58,7 +58,7 @@ typedef enum { // Indicates that either this Eeno is shrinking having been absorbed by another Eeno, or that // this Eeno is a fully-combined large Eeno and is done trying to combine with other split // Eenos. In both cases, this Eeno cannot be absorbed by any other Eeno. - /* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE, + /* 3 */ EN_SNOWMAN_COMBINE_STATE_BEING_ABSORBED_OR_DONE } EnSnowmanCombineState; ActorInit En_Snowman_InitVars = { @@ -119,7 +119,7 @@ typedef enum { /* 0x2 */ EN_SNOWMAN_DMGEFF_MELT, /* 0x4 */ EN_SNOWMAN_DMGEFF_LIGHT_ORB = 0x4, /* 0x5 */ EN_SNOWMAN_DMGEFF_ELECTRIC_STUN, - /* 0xF */ EN_SNOWMAN_DMGEFF_HOOKSHOT = 0xF, // Damages small Eenos, pulls the player towards large Eenos + /* 0xF */ EN_SNOWMAN_DMGEFF_HOOKSHOT = 0xF // Damages small Eenos, pulls the player towards large Eenos } EnTalkGibudDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h index da0c0a30a..55285fec8 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.h @@ -12,7 +12,7 @@ typedef enum { /* 1 */ EN_SNOWMAN_TYPE_LARGE, /* 2 */ EN_SNOWMAN_TYPE_SPLIT, /* 3 */ EN_SNOWMAN_TYPE_SMALL_SNOWBALL, - /* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL, + /* 4 */ EN_SNOWMAN_TYPE_LARGE_SNOWBALL } EnSnowmanType; struct EnSnowman; diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 3908e863f..7e3b9ead6 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -70,7 +70,7 @@ typedef enum { /* 5 */ STH_ANIM_LOOK_AROUND, // checking out Oceanside Spider House /* 6 */ STH_ANIM_PLEAD, // wants to buy Oceanside Spider House /* 7 */ STH_ANIM_PANIC, // after buying Oceanside Spider House, can be found at bottom of slide, - /* 8 */ STH_ANIM_START, // set in init, not an actual index to the array + /* 8 */ STH_ANIM_START // set in init, not an actual index to the array } EnSthAnimation; static AnimationHeader* sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.h b/src/overlays/actors/ovl_En_Sth/z_en_sth.h index 1c8c92852..dbc459ce1 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.h +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.h @@ -16,9 +16,9 @@ typedef enum { /* 2 */ STH_TYPE_SWAMP_SPIDER_HOUSE_CURED, // cursed is EnSsh /* 3 */ STH_TYPE_MOON_LOOKING, // South Clock Town, looking up at the moon /* 4 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_GREET, // looking for shelter - /* 5 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC, // shelter was not enough + /* 5 */ STH_TYPE_OCEANSIDE_SPIDER_HOUSE_PANIC // shelter was not enough // Other values: Actor will spawn and animate with arm waving, no further interaction. -} EnSthTypes; +} EnSthType; // Note: Vanilla types usually have 0xFEXX typing, but this upper section is unused by the code, reason unknown #define STH_GET_TYPE(thisx) ((thisx)->params & 0xF) diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index b89976faf..e41fc5dc7 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -90,7 +90,7 @@ typedef enum { /* 0 */ EN_STONE_BOTTLE_NONE, /* 1 */ EN_STONE_BOTTLE_RED_POTION, /* 2 */ EN_STONE_BOTTLE_EMPTY, - /* 3 */ EN_STONE_BOTTLE_BLUE_POTION, + /* 3 */ EN_STONE_BOTTLE_BLUE_POTION } EnStoneHeishiBottle; typedef enum { @@ -100,8 +100,8 @@ typedef enum { /* 3 */ EN_STONE_HEISHI_ANIM_WAVE, /* 4 */ EN_STONE_HEISHI_ANIM_SIT_AND_REACH, /* 5 */ EN_STONE_HEISHI_ANIM_DRINK_2, - /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP, -} EnStoneHeishiAnimations; + /* 6 */ EN_STONE_HEISHI_ANIM_STAND_UP +} EnStoneHeishiAnimation; void EnStoneheishi_Init(Actor* thisx, PlayState* play) { EnStoneheishi* this = THIS; diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c index d90752d9b..43ddae02a 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c @@ -31,7 +31,7 @@ typedef enum { /* 5 */ SOLDIER_ANIM_5, /* 6 */ SOLDIER_ANIM_6, /* 7 */ SOLDIER_ANIM_STAND_HAND_ON_CHEST, - /* 8 */ SOLDIER_ANIM_MAX, + /* 8 */ SOLDIER_ANIM_MAX } SoldierAnimation; ActorInit En_Stop_heishi_InitVars = { diff --git a/src/overlays/actors/ovl_En_Stream/z_en_stream.h b/src/overlays/actors/ovl_En_Stream/z_en_stream.h index 88856c3dd..c5aa3c9e2 100644 --- a/src/overlays/actors/ovl_En_Stream/z_en_stream.h +++ b/src/overlays/actors/ovl_En_Stream/z_en_stream.h @@ -12,13 +12,13 @@ typedef enum { /* 0 */ EN_STREAM_SIZE_NORMAL, - /* 1 */ EN_STREAM_SIZE_SMALL, + /* 1 */ EN_STREAM_SIZE_SMALL } EnStreamSize; typedef enum { /* 0 */ EN_STREAM_PLAYER_OUTSIDE_RANGE, /* 1 */ EN_STREAM_PLAYER_WITHIN_RANGE_INSIDE_VORTEX, - /* 2 */ EN_STREAM_PLAYER_WITHIN_RANGE_BELOW_VORTEX, + /* 2 */ EN_STREAM_PLAYER_WITHIN_RANGE_BELOW_VORTEX } EnStreamPlayerLocation; struct EnStream; diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c index b8c5eda14..ee9c63536 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c @@ -36,7 +36,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play); typedef enum { /* 0 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL, - /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP, + /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP } EnSyatekiDekunutsHeaddressType; ActorInit En_Syateki_Dekunuts_InitVars = { @@ -80,7 +80,7 @@ typedef enum { /* 3 */ EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND, /* 4 */ EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE, /* 5 */ EN_SYATEKI_DEKUNUTS_ANIM_DIE, - /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW, // unused + /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW // unused } EnSyatekiDekunutsAnimation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h index 2ceb0b32d..ce3e9ba90 100644 --- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h +++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h @@ -11,7 +11,7 @@ typedef enum { /* 0 */ EN_SYATEKI_DEKUNUTS_TYPE_NORMAL, // Worth 30 points - /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS, // Worth 100 points + /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS // Worth 100 points } EnSyatekiDekunutsType; struct EnSyatekiDekunuts; 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 a58425737..f5910a06d 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 @@ -74,7 +74,7 @@ ActorInit En_Syateki_Man_InitVars = { typedef enum { /* 0 */ EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE, /* 1 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_LOOP, - /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END, + /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END } EnSyatekiManAnimation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index 7b885c5e8..52aa71cad 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -120,7 +120,7 @@ typedef enum { /* 3 */ EN_SYATEKI_WF_ANIM_LAND, /* 4 */ EN_SYATEKI_WF_ANIM_BACKFLIP, // unused /* 5 */ EN_SYATEKI_WF_ANIM_DAMAGED, - /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER, + /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER } EnSyatekiWfAnimation; static AnimationInfo sAnimationInfo[] = { diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index ee3b9af58..84d0b7dd1 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -53,12 +53,12 @@ typedef struct { /* 0x4 */ ItemId item; /* 0x8 */ s32 amount; /* 0xC */ s16 isBottledItem; -} EnTalkGibudRequestedItem; +} EnTalkGibudRequestedItem; // size = 0x10 typedef enum { /* 0 */ EN_TALK_GIBUD_REQUESTED_ITEM_MET, /* 1 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO, - /* 2 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET, + /* 2 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET } EnTalkGibudRequestedItemState; typedef enum { @@ -71,7 +71,7 @@ typedef enum { /* 6 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BOMBS, /* 7 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_HOT_SPRING_WATER, /* 8 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BIG_POE, - /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK, + /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK } EnTalkGibudRequestedItemIndex; typedef enum { @@ -88,18 +88,18 @@ typedef enum { /* 10 */ EN_TALK_GIBUD_ANIM_WALK, /* 11 */ EN_TALK_GIBUD_ANIM_DANCE_SQUAT, /* 12 */ EN_TALK_GIBUD_ANIM_DANCE_PIROUETTE, - /* 13 */ EN_TALK_GIBUD_ANIM_DANCE_CLAP, + /* 13 */ EN_TALK_GIBUD_ANIM_DANCE_CLAP } EnTalkGibudAnimation; typedef enum { /* 0 */ EN_TALK_GIBUD_TYPE_GIBDO, - /* 1 */ EN_TALK_GIBUD_TYPE_REDEAD, + /* 1 */ EN_TALK_GIBUD_TYPE_REDEAD } EnTalkGibudType; typedef enum { /* 0 */ EN_TALK_GIBUD_GRAB_START, /* 1 */ EN_TALK_GIBUD_GRAB_ATTACK, - /* 2 */ EN_TALK_GIBUD_GRAB_RELEASE, + /* 2 */ EN_TALK_GIBUD_GRAB_RELEASE } EnTalkGibudGrabState; ActorInit En_Talk_Gibud_InitVars = { @@ -159,7 +159,7 @@ typedef enum { /* 0xC */ EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect /* 0xD */ EN_TALK_GIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation /* 0xE */ EN_TALK_GIBUD_DMGEFF_LIGHT_RAY, // Instantly kills a Redead on contact - /* 0xF */ EN_TALK_GIBUD_DMGEFF_DAMAGE, // Deals damage and plays the damage animation + /* 0xF */ EN_TALK_GIBUD_DMGEFF_DAMAGE // Deals damage and plays the damage animation } EnTalkGibudDamageEffect; static DamageTable sDamageTable = { diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c index 1eaf1d128..5c62c50ee 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -23,13 +23,13 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play); typedef enum { /* 0 */ SEAGULL_FLY_FLAP, - /* 1 */ SEAGULL_FLY_GLIDE, + /* 1 */ SEAGULL_FLY_GLIDE } SeagullFlyState; typedef enum { /* 0 */ SEAGULL_TIMER_FLY_STATE, - /* 1 */ SEAGULL_TIMER_CHOOSE_TARGET, -} SeagullTimers; + /* 1 */ SEAGULL_TIMER_CHOOSE_TARGET +} SeagullTimer; ActorInit En_Tanron4_InitVars = { ACTOR_EN_TANRON4, diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.c b/src/overlays/actors/ovl_En_Test2/z_en_test2.c index 8e5a39bf8..e853570f4 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.c +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.c @@ -72,7 +72,7 @@ void EnTest2_Init(Actor* thisx, PlayState* play) { EnTest2* this = THIS; Actor_ProcessInitChain(&this->actor, sInitChain); - if ((this->actor.params == EN_TEST2_PARAMS_B) || (this->actor.params == EN_TEST2_PARAMS_C)) { + if ((this->actor.params == EN_TEST2_PARAM_B) || (this->actor.params == EN_TEST2_PARAM_C)) { this->actor.flags |= ACTOR_FLAG_20; } } diff --git a/src/overlays/actors/ovl_En_Test2/z_en_test2.h b/src/overlays/actors/ovl_En_Test2/z_en_test2.h index 3b03e0cc1..d54dbb265 100644 --- a/src/overlays/actors/ovl_En_Test2/z_en_test2.h +++ b/src/overlays/actors/ovl_En_Test2/z_en_test2.h @@ -11,8 +11,8 @@ typedef struct EnTest2 { } EnTest2; // size = 0x148 typedef enum { - /* 0xB */ EN_TEST2_PARAMS_B = 0xB, - /* 0xC */ EN_TEST2_PARAMS_C -} EnTest2_Params; + /* 0xB */ EN_TEST2_PARAM_B = 0xB, + /* 0xC */ EN_TEST2_PARAM_C +} EnTest2_Param; #endif // Z_EN_TEST2_H diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.h b/src/overlays/actors/ovl_En_Test6/z_en_test6.h index d7e40a983..2fe138ddb 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h @@ -9,11 +9,11 @@ typedef void (*EnTest6ActionFunc)(struct EnTest6*, PlayState*); #define ENTEST6_GET(thisx) ((thisx)->params) -enum { +typedef enum { /* 24 */ ENTEST6_24 = 24, /* 25 */ ENTEST6_25, - /* 26 */ ENTEST6_26, -}; + /* 26 */ ENTEST6_26 +} EnTest6Param; typedef struct { /* 0x00 */ LightNode* node; diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h index 128e01973..c022ca122 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.h @@ -56,7 +56,7 @@ typedef enum { /* 13 */ TIMETAG_KICKOUT_TEXT_TOWN_SHOOTING_GALLERY_2, // quick, it's closing time /* 14 */ TIMETAG_KICKOUT_TEXT_SWORDSMANS_SCHOOL, // need to cut the moon, must leave /* 15 */ TIMETAG_KICKOUT_TEXT_TREASURE_CHEST_SHOP, // already time to close shop - /* 16 */ TIMETAG_KICKOUT_TEXT_DOGGY_RACETRACK, // no more for today + /* 16 */ TIMETAG_KICKOUT_TEXT_DOGGY_RACETRACK // no more for today } TimeTagKickOutText; typedef struct EnTimeTag { diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.h b/src/overlays/actors/ovl_En_Tite/z_en_tite.h index 57d8ef3e3..af77f4a8d 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h @@ -7,13 +7,13 @@ struct EnTite; typedef void (*EnTiteActionFunc)(struct EnTite*, PlayState*); -enum { +typedef enum { /* -4 */ ENTITE_MINUS_4 = -4, /* -3 */ ENTITE_MINUS_3, /* -2 */ ENTITE_MINUS_2, /* -1 */ ENTITE_MINUS_1, - /* 0 */ ENTITE_MINUS_0, -}; + /* 0 */ ENTITE_MINUS_0 +} EnTiteParam; typedef struct EnTite { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 341f0a89d..469e07e6d 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -130,9 +130,9 @@ static f32 D_80AEF8F0[] = { }; typedef struct { - /* 0x00 */ Actor* unk_00; - /* 0x04 */ f32 unk_04; -} EnTkStruct; // size = 0x8? + /* 0x0 */ Actor* unk_00; + /* 0x4 */ f32 unk_04; +} EnTkStruct; // size = 0x8 void func_80AEC460(EnTk* this) { if (DECR(this->unk_2C4) == 0) { diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h index 9033b9923..edc488d1e 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.h @@ -18,7 +18,7 @@ typedef enum { /* 1 */ TORCH2_PARAM_GORON, /* 2 */ TORCH2_PARAM_ZORA, /* 3 */ TORCH2_PARAM_DEKU, - /* 4 */ TORCH2_PARAM_FIERCE_DEITY, + /* 4 */ TORCH2_PARAM_FIERCE_DEITY } EnTorch2Param; typedef enum { @@ -26,7 +26,7 @@ typedef enum { /* 1 */ TORCH2_STATE_FADING_IN, /* 2 */ TORCH2_STATE_SOLID, /* 3 */ TORCH2_STATE_IDLE, - /* 4 */ TORCH2_STATE_DYING, + /* 4 */ TORCH2_STATE_DYING } EnTorch2State; #endif // Z_EN_TORCH2_H diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c index 79bee615a..551d7d774 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c @@ -47,18 +47,18 @@ void EnViewer_Init(Actor* thisx, PlayState* play) { this->unk_154 = D_8089F3E0; D_8089F3E0++; switch (ENVIEWER_GET_3(&this->actor)) { - case ENVIEWER_PARAMS_0: + case ENVIEWER_PARAM_0: this->unk_148 = ENVIEWER_GET_8000(&this->actor) * 40.0f; this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f; EnViewer_SetupAction(this, func_8089F17C); break; - case ENVIEWER_PARAMS_1: + case ENVIEWER_PARAM_1: this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f; this->unk_150 = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f; this->unk_14C = (u16)(this->actor.world.rot.y) * 40.0f; EnViewer_SetupAction(this, func_8089F218); break; - case ENVIEWER_PARAMS_2: + case ENVIEWER_PARAM_2: this->unk_148 = (u16)ENVIEWER_GET_FE00(&this->actor) * 40.0f; this->unk_14C = (u8)ENVIEWER_GET_1FC(&this->actor) * 40.0f; EnViewer_SetupAction(this, func_8089F2C4); diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h index 1532e7c70..c4d2114bf 100644 --- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h +++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h @@ -22,9 +22,9 @@ typedef struct EnViewer { } EnViewer; // size = 0x158 typedef enum { - /* 0x0 */ ENVIEWER_PARAMS_0, - /* 0x1 */ ENVIEWER_PARAMS_1, - /* 0x2 */ ENVIEWER_PARAMS_2 -} EnViewerParams; + /* 0x0 */ ENVIEWER_PARAM_0, + /* 0x1 */ ENVIEWER_PARAM_1, + /* 0x2 */ ENVIEWER_PARAM_2 +} EnViewerParam; #endif // Z_EN_VIEWER_H diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h index 93dd63245..4d1466b95 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.h @@ -27,9 +27,9 @@ * the timer to 130 frames if the player strays too far from the Wallmaster's current position. */ typedef enum { - /* 0x0 */ WALLMASTER_TYPE_TIMER_ONLY, - /* 0x1 */ WALLMASTER_TYPE_PROXIMITY, - /* 0x2 */ WALLMASTER_TYPE_FLAG + /* 0 */ WALLMASTER_TYPE_TIMER_ONLY, + /* 1 */ WALLMASTER_TYPE_PROXIMITY, + /* 2 */ WALLMASTER_TYPE_FLAG } WallmasterType; struct EnWallmas; diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h index 433ebac62..f4b9d7284 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h @@ -24,7 +24,7 @@ typedef enum { /* 0x309 */ ENWATEREFFECT_TYPE_GYORG_RIPPLES = 0x309, // Ripples on the surface when Gyrog enters/leaves the water /* 0x30A */ ENWATEREFFECT_TYPE_GYORG_PRIMARY_SPRAY, // Large "funnel" of water that forms when Gyorg enters/leaves the water /* 0x30B */ ENWATEREFFECT_TYPE_GYORG_SECONDARY_SPRAY, // Secondary "funnel" in the middle of the larger "funnel" - /* 0x30C */ ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE, // Shockwave on the surface when Gyorg rams into the central platform + /* 0x30C */ ENWATEREFFECT_TYPE_GYORG_SHOCKWAVE // Shockwave on the surface when Gyorg rams into the central platform } EnWaterEffectType; typedef struct EnWaterEffect { diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h index b1e7f8f86..5313aacfd 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.h @@ -32,7 +32,7 @@ typedef enum { /* 4 */ WEATHERTAG_TYPE_UNK4, /* 5 */ WEATHERTAG_TYPE_UNK5, /* 6 */ WEATHERTAG_TYPE_WATERMURK, - /* 7 */ WEATHERTAG_TYPE_LOCALDAY2RAIN, + /* 7 */ WEATHERTAG_TYPE_LOCALDAY2RAIN } WeatherTagType; #endif // Z_EN_WEATHER_TAG_H diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index b64af5a88..7fd55f4ee 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -50,7 +50,7 @@ typedef enum { /* 6 */ EN_WIZ_ACTION_BURST_INTO_FLAMES, /* 7 */ EN_WIZ_ACTION_RUN_IN_CIRCLES, /* 8 */ EN_WIZ_ACTION_ATTACK, - /* 9 */ EN_WIZ_ACTION_DANCE, + /* 9 */ EN_WIZ_ACTION_DANCE } EnWizAction; typedef enum { @@ -68,7 +68,7 @@ typedef enum { /* 0 */ EN_WIZ_FIGHT_STATE_FIRST_PHASE, /* 1 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_CUTSCENE, /* 2 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE, - /* 3 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND, + /* 3 */ EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_RUN_AROUND } EnWizFightState; typedef enum { @@ -77,7 +77,7 @@ typedef enum { /* 2 */ EN_WIZ_ANIM_DANCE, /* 3 */ EN_WIZ_ANIM_WIND_UP, /* 4 */ EN_WIZ_ANIM_ATTACK, - /* 5 */ EN_WIZ_ANIM_DAMAGE, + /* 5 */ EN_WIZ_ANIM_DAMAGE } EnWizAnimation; ActorInit En_Wiz_InitVars = { @@ -239,12 +239,12 @@ static ColliderCylinderInit sCylinderInit = { }; typedef enum { - /* 0x0 */ EN_WIZ_DMGEFF_IMMUNE, // Deals no damage - /* 0x1 */ EN_WIZ_DMGEFF_UNK1, // Deals no damage. Was probably originally intended for destroying ghosts. - /* 0x2 */ EN_WIZ_DMGEFF_FIRE, // Damages and sets Ice Wizrobes on fire - /* 0x3 */ EN_WIZ_DMGEFF_FREEZE, // Damages and surrounds Fire Wizrobes with ice - /* 0x4 */ EN_WIZ_DMGEFF_LIGHT_ORB, // Damages and surrounds the Wizrobe with light orbs - /* 0xF */ EN_WIZ_DMGEFF_NONE = 0xF, // Deals regular damage and has no special effect + /* 0x0 */ EN_WIZ_DMGEFF_IMMUNE, // Deals no damage + /* 0x1 */ EN_WIZ_DMGEFF_UNK1, // Deals no damage. Was probably originally intended for destroying ghosts. + /* 0x2 */ EN_WIZ_DMGEFF_FIRE, // Damages and sets Ice Wizrobes on fire + /* 0x3 */ EN_WIZ_DMGEFF_FREEZE, // Damages and surrounds Fire Wizrobes with ice + /* 0x4 */ EN_WIZ_DMGEFF_LIGHT_ORB, // Damages and surrounds the Wizrobe with light orbs + /* 0xF */ EN_WIZ_DMGEFF_NONE = 0xF // Deals regular damage and has no special effect } EnWizDamageEffect; static DamageTable sFireWizrobeDamageTable = { diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h index 4d35a0f68..70f7a6c64 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.h @@ -10,7 +10,7 @@ typedef enum { /* 0 */ EN_WIZ_TYPE_FIRE, /* 1 */ EN_WIZ_TYPE_ICE, - /* 2 */ EN_WIZ_TYPE_FIRE_NO_BGM, // does not request the mini-boss BGM + /* 2 */ EN_WIZ_TYPE_FIRE_NO_BGM // does not request the mini-boss BGM } EnWizType; struct EnWiz; diff --git a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h index 3df0362ed..651aac8ea 100644 --- a/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h +++ b/src/overlays/actors/ovl_En_Wiz_Brock/z_en_wiz_brock.h @@ -7,7 +7,7 @@ typedef enum { /* 0 */ EN_WIZ_BROCK_PLATFORM_TYPE_INACTIVE, /* 1 */ EN_WIZ_BROCK_PLATFORM_TYPE_FIRE, /* 2 */ EN_WIZ_BROCK_PLATFORM_TYPE_ICE, - /* 3 */ EN_WIZ_BROCK_PLATFORM_TYPE_MAX, + /* 3 */ EN_WIZ_BROCK_PLATFORM_TYPE_MAX } EnWizBrockPlatformType; struct EnWizBrock; diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index 4a7f6cd20..8251a896b 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -32,7 +32,7 @@ typedef enum { /* 0 */ EN_WIZ_FIRE_ACTION_MOVE_MAGIC_PROJECTILE, /* 1 */ EN_WIZ_FIRE_ACTION_SMALL_FLAME, /* 2 */ EN_WIZ_FIRE_ACTION_POOL, - /* 3 */ EN_WIZ_FIRE_ACTION_KILL_MAGIC_PROJECTILE, + /* 3 */ EN_WIZ_FIRE_ACTION_KILL_MAGIC_PROJECTILE } EnWizFireAction; static s32 sPoolHitByIceArrow = false; diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.h b/src/overlays/actors/ovl_En_Zob/z_en_zob.h index e0bd7bf79..6e6c8e7a8 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.h +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.h @@ -9,10 +9,10 @@ typedef void (*EnZobActionFunc)(struct EnZob*, PlayState*); #define ENZOB_GET_F(thisx) ((thisx)->params & 0xF) -enum { +typedef enum { /* 1 */ ENZOB_F_1 = 1, - /* 2 */ ENZOB_F_2, -}; + /* 2 */ ENZOB_F_2 +} EnZobParam; typedef struct EnZob { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index 57c85a664..d032b6579 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -30,7 +30,7 @@ typedef enum { /* 2 */ ENZOD_ANIM_ARMS_FOLDED, /* 3 */ ENZOD_ANIM_PLAYING_LENTO, /* 4 */ ENZOD_ANIM_PLAYING_ANDANTINO, - /* 5 */ ENZOD_ANIM_MAX, + /* 5 */ ENZOD_ANIM_MAX } EnZodAnimation; typedef enum { @@ -42,7 +42,7 @@ typedef enum { /* 6 */ ENZOD_INSTRUMENT_DRUM_3, /* 7 */ ENZOD_INSTRUMENT_DRUM_4, /* 8 */ ENZOD_INSTRUMENT_DRUM_5, - /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM, + /* 9 */ ENZOD_INSTRUMENT_BASS_DRUM } EnZodInstrument; const ActorInit En_Zod_InitVars = { diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.h b/src/overlays/actors/ovl_En_Zod/z_en_zod.h index 9e6f3f4da..12278bb97 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.h +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.h @@ -33,9 +33,9 @@ typedef struct EnZod { } EnZod; // size = 0x2A0 typedef enum { - /* 1 */ ENZOD_TYPE_1 = 1, - /* 2 */ ENZOD_TYPE_2, - /* 0xF */ ENZOD_TYPE_0xF = 0xF, -} EnZodTypes; + /* 0x1 */ ENZOD_TYPE_1 = 1, + /* 0x2 */ ENZOD_TYPE_2, + /* 0xF */ ENZOD_TYPE_0xF = 0xF +} EnZodType; #endif // Z_EN_ZOD_H diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h index 18a421272..f8895af3f 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.h @@ -10,7 +10,7 @@ typedef void (*EnZoraeggActionFunc)(struct EnZoraegg*, PlayState*); #define ENZORAEGG_GET_1F(thisx) ((thisx)->params & 0x1F) #define ENZORAEGG_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9) -enum { +typedef enum { /* 0x00 */ ENZORAEGG_1F_00, /* 0x01 */ ENZORAEGG_1F_01, /* 0x02 */ ENZORAEGG_1F_02, @@ -36,8 +36,8 @@ enum { /* 0x16 */ ENZORAEGG_1F_16, /* 0x17 */ ENZORAEGG_1F_17, /* 0x18 */ ENZORAEGG_1F_18, - /* 0x19 */ ENZORAEGG_1F_19, -}; + /* 0x19 */ ENZORAEGG_1F_19 +} EnZoraeggParam; typedef struct EnZoraegg { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.h b/src/overlays/actors/ovl_En_Zos/z_en_zos.h index 669430a0c..f761a9bc5 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.h +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.h @@ -10,10 +10,10 @@ typedef void (*EnZosActionFunc)(struct EnZos*, PlayState*); #define ENZOS_GET_F(thisx) ((thisx)->params & 0xF) -enum { +typedef enum { /* 1 */ ENZOS_F_1 = 1, - /* 2 */ ENZOS_F_2, -}; + /* 2 */ ENZOS_F_2 +} EnZosParam; typedef struct EnZos { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h index 7a071a8ec..90577dcfd 100644 --- a/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h +++ b/src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h @@ -4,9 +4,9 @@ #include "global.h" typedef enum { - /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale. - /* 35 */ BHEART_PARAM_SMALL = 35, // Spawn Parameter for Small Scale. -} ItemBHeartParams; + /* 0 */ BHEART_PARAM_NORMAL, // Spawn Parameter for Normal Scale. + /* 35 */ BHEART_PARAM_SMALL = 35 // Spawn Parameter for Small Scale. +} ItemBHeartParam; #define BHEART_SCALE_SMALL (0.1f) // Scale value for Small Mode #define BHEART_SCALE_NORMAL (1.0f) // Scale value for Normal Mode diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h index cd48cfed1..f27254cec 100644 --- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h +++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.h @@ -19,8 +19,8 @@ typedef enum { /* 0x7 */ MIRRAY_SPIRIT_TOPROOM_COBRA1, /* 0x8 */ MIRRAY_SPIRIT_TOPROOM_COBRA2, /* 0x9 */ MIRRAY_GANONSCASTLE_SPIRITTRIAL_DOWNLIGHT, - /* 0xA */ MIRRAY_MAX, -} MirRayBeamLocations; + /* 0xA */ MIRRAY_MAX +} MirRayBeamLocation; typedef struct MirRay { /* 0x000 */ Actor actor; diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h index 177cc8e66..4ac83cc9d 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h @@ -12,15 +12,15 @@ typedef void (*ObjArmosActionFunc)(struct ObjArmos*, PlayState*); #define OBJARMOS_GET_ROTZ_7(thisx) ((thisx)->home.rot.z & 7) #define OBJARMOS_GET_ROTX_F(thisx) ((thisx)->home.rot.x & 0xF) -enum { +typedef enum { /* 0 */ OBJARMOS_ROT_7_0, /* 1 */ OBJARMOS_ROT_7_1, /* 2 */ OBJARMOS_ROT_7_2, /* 3 */ OBJARMOS_ROT_7_3, /* 4 */ OBJARMOS_ROT_7_4, /* 5 */ OBJARMOS_ROT_7_5, - /* 6 */ OBJARMOS_ROT_7_6, -}; + /* 6 */ OBJARMOS_ROT_7_6 +} ObjArmosParam; typedef struct ObjArmos { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h index 7699b3427..1a22de390 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h @@ -16,11 +16,11 @@ typedef void (*ObjBeanUnkFunc)(struct ObjBean*); #define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3) -enum { - /* 0x0 */ ENOBJBEAN_GET_C000_0, - /* 0x1 */ ENOBJBEAN_GET_C000_1, - /* 0x2 */ ENOBJBEAN_GET_C000_2, -}; +typedef enum { + /* 0 */ ENOBJBEAN_GET_C000_0, + /* 1 */ ENOBJBEAN_GET_C000_1, + /* 2 */ ENOBJBEAN_GET_C000_2 +} ObjBeanParam; typedef struct ObjBean { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c index 66ef9c691..c8eed614b 100644 --- a/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c +++ b/src/overlays/actors/ovl_Obj_Bombiwa/z_obj_bombiwa.c @@ -77,11 +77,11 @@ static ColliderCylinderInit sCylinderInit2 = { }; typedef struct { - /* 0x00 */ ColliderCylinderInit* collider; - /* 0x04 */ ActorShadowFunc unk_04; - /* 0x08 */ ActorFunc unk_08; - /* 0x0C */ s32 (*unk_0C)(Actor*); -} ObjBombiwaStruct2; + /* 0x0 */ ColliderCylinderInit* collider; + /* 0x4 */ ActorShadowFunc unk_04; + /* 0x8 */ ActorFunc unk_08; + /* 0xC */ s32 (*unk_0C)(Actor*); +} ObjBombiwaStruct2; // size = 0x10 static ObjBombiwaStruct2 D_8093A998[] = { { &sCylinderInit1, ActorShadow_DrawCircle, func_8093A418, func_809393B0 }, diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h index 1805e151a..454e3f674 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.h @@ -12,7 +12,7 @@ typedef enum { /* 1 */ DEKU_FLOWER_TYPE_PINK_WITH_INITIAL_BOUNCE, /* 2 */ DEKU_FLOWER_TYPE_GOLD, /* 3 */ DEKU_FLOWER_TYPE_GOLD_WITH_INITIAL_BOUNCE, - /* 4 */ DEKU_FLOWER_TYPE_MAX, + /* 4 */ DEKU_FLOWER_TYPE_MAX } DekuFlowerType; struct ObjEtcetera; diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c index 4804b8b87..40c363dca 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -55,8 +55,8 @@ static ColliderCylinderInit sCylinderInit = { }; typedef struct { - /* 0x00 */ f32 unk_00; - /* 0x04 */ f32 unk_04; + /* 0x0 */ f32 unk_00; + /* 0x4 */ f32 unk_04; } ObjFireshieldStruct; // size = 0x8 ObjFireshieldStruct D_80A4D84C[] = { diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c index 336076199..4cc81013e 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -29,16 +29,16 @@ AnimatedMaterial* D_80B9DED0; AnimatedMaterial* D_80B9DED4; typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ u8 unk_01; - /* 0x02 */ u8 unk_02; + /* 0x0 */ u8 unk_00; + /* 0x1 */ u8 unk_01; + /* 0x2 */ u8 unk_02; } ObjHansuiBssStruct; // size = 0x3 ObjHansuiBssStruct D_80B9DED8; typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ u8 unk_01; + /* 0x0 */ u8 unk_00; + /* 0x1 */ u8 unk_01; } ObjHansuiStruct; // size = 0x2 ObjHansuiStruct D_80B9DC70[] = { diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h index c06abbe7d..1f0450b28 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.h @@ -12,15 +12,15 @@ typedef void (*ObjHunsuiActionFunc)(struct ObjHunsui*, PlayState*); #define OBJHUNSUI_GET_F80(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJHUNSUI_GET_F000(thisx) (((thisx)->params >> 0xC) & 0xF) -enum { +typedef enum { /* 0 */ OBJHUNSUI_F000_0, /* 1 */ OBJHUNSUI_F000_1, /* 2 */ OBJHUNSUI_F000_2, /* 3 */ OBJHUNSUI_F000_3, /* 4 */ OBJHUNSUI_F000_4, /* 5 */ OBJHUNSUI_F000_5, - /* 6 */ OBJHUNSUI_F000_6, -}; + /* 6 */ OBJHUNSUI_F000_6 +} ObjHunsuiParam; typedef struct ObjHunsui { /* 0x000 */ DynaPolyActor dyna; diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c index 2aae58bad..529d7ec95 100644 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c +++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c @@ -13,9 +13,9 @@ #define THIS ((ObjJgameLight*)thisx) typedef enum { - /* 0x0 */ OBJJGAMELIGHT_NONE, - /* 0x1 */ OBJJGAMELIGHT_CORRECT, - /* 0x2 */ OBJJGAMELIGHT_INCORRECT, + /* 0 */ OBJJGAMELIGHT_NONE, + /* 1 */ OBJJGAMELIGHT_CORRECT, + /* 2 */ OBJJGAMELIGHT_INCORRECT } ObjJgameLightSignal; void ObjJgameLight_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c index df518ff43..048aa9bcc 100644 --- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c +++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c @@ -28,7 +28,7 @@ typedef enum { /* -1 */ OBJKENDOKANBAN_DIR_DOWN = -1, /* 0 */ OBJKENDOKANBAN_DIR_UNDETERMINED, - /* 1 */ OBJKENDOKANBAN_DIR_UP, + /* 1 */ OBJKENDOKANBAN_DIR_UP } ObjKendoKanbanDirection; void ObjKendoKanban_Init(Actor* thisx, PlayState* play); diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c index 1062d18f8..6a6937e7e 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -55,11 +55,11 @@ static ColliderCylinderInit sCylinderInit = { }; typedef struct { - /* 0x00 */ f32 scale; - /* 0x04 */ s16 radius; - /* 0x06 */ s16 height; - /* 0x08 */ s16 yShift; - /* 0x0C */ s32 params; + /* 0x0 */ f32 scale; + /* 0x4 */ s16 radius; + /* 0x6 */ s16 height; + /* 0x8 */ s16 yShift; + /* 0xC */ s32 params; } LightblockTypeVars; // size = 0x10 static LightblockTypeVars sLightblockTypeVars[] = { diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c index c8f657c13..10f12c64a 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c @@ -108,7 +108,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) { } void func_8098F364(ObjMure3* this, PlayState* play) { - s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)]; + s16 count = sRupeeCounts[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)]; s32 i; EnItem00** collectible; @@ -126,7 +126,7 @@ void func_8098F364(ObjMure3* this, PlayState* play) { } void func_8098F438(ObjMure3* this, PlayState* play) { - s16 count = sRupeeCounts[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)]; + s16 count = sRupeeCounts[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)]; s32 i; for (i = 0; i < count; i++) { @@ -134,7 +134,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) { if ((*collectible != NULL) && !((this->unk164 >> i) & 1)) { if ((*collectible)->unk1A4 != 0) { - Flags_SetSwitch(play, OBJMURE3_PARAMS_7F(&this->actor)); + Flags_SetSwitch(play, OBJMURE3_PARAM_7F(&this->actor)); } if ((*collectible)->actor.update == NULL) { this->unk164 |= (1 << i); @@ -147,7 +147,7 @@ void func_8098F438(ObjMure3* this, PlayState* play) { void ObjMure3_Init(Actor* thisx, PlayState* play) { ObjMure3* this = THIS; - if (Flags_GetSwitch(play, OBJMURE3_PARAMS_7F(&this->actor))) { + if (Flags_GetSwitch(play, OBJMURE3_PARAM_7F(&this->actor))) { Actor_Kill(&this->actor); return; } @@ -175,7 +175,7 @@ void func_8098F5E4(ObjMure3* this, PlayState* play) { if (Math3D_XZLengthSquared(this->actor.projectedPos.x, this->actor.projectedPos.z) < SQ(1150.0f)) { this->actor.flags |= ACTOR_FLAG_10; - sSpawnFuncs[OBJMURE3_PARAMS_RUPEEINDEX(&this->actor)](this, play); + sSpawnFuncs[OBJMURE3_PARAM_RUPEEINDEX(&this->actor)](this, play); func_8098F66C(this); } } diff --git a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h index 8715e4308..336a092b4 100644 --- a/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h +++ b/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h @@ -3,8 +3,8 @@ #include "global.h" -#define OBJMURE3_PARAMS_7F(thisx) ((thisx)->params & 0x7F) -#define OBJMURE3_PARAMS_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7) +#define OBJMURE3_PARAM_7F(thisx) ((thisx)->params & 0x7F) +#define OBJMURE3_PARAM_RUPEEINDEX(thisx) (((thisx)->params >> 13) & 7) struct ObjMure3; diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c index eab144cbd..168168f41 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -74,7 +74,7 @@ void ObjOcarinalift_Init(Actor* thisx, PlayState* play) { this->unk16C = 1; this->unk170 = Lib_SegmentedToVirtual(path->points); func_80AC94C0(this, this->unk168); - if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) && + if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) && (Flags_GetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)))) { func_80AC96B4(this); } else { @@ -137,7 +137,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) { this->unk168 += this->unk16C; thisx->speed *= 0.4f; if (((this->unk168 >= this->unk164) && (this->unk16C > 0)) || ((this->unk168 <= 0) && (this->unk16C < 0))) { - if (paramsC == OBJOCARINALIFT_PARAMSC_0) { + if (paramsC == OBJOCARINALIFT_PARAM_0) { this->unk16C = -this->unk16C; this->timer = 10; func_80AC9A68(this); @@ -155,11 +155,11 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) { func_80AC99C0(this); DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); sp34 = false; - } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { + } else if ((paramsC == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { func_80AC9AB8(this); } } - } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { + } else if ((paramsC == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { func_80AC9AB8(this); } if (sp34) { @@ -176,7 +176,7 @@ void func_80AC99D4(ObjOcarinalift* this, PlayState* play) { if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_80AC94C0(this, this->unk168); DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); - if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAMSC_1) && + if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAM_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(&this->dyna.actor))) { func_80AC9AB8(this); } else { @@ -218,7 +218,7 @@ void func_80AC9B5C(ObjOcarinalift* this, PlayState* play) { if (func_800B886C(&this->dyna.actor, play)) { if (play->msgCtx.ocarinaMode == 4) { if (play->msgCtx.lastPlayedSong == 0) { - if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAMSC_1) { + if (OBJOCARINALIFT_GET_C(&this->dyna.actor) != OBJOCARINALIFT_PARAM_1) { Flags_SetSwitch(play, OBJOCARINALIFT_GET_SWITCH_FLAG(&this->dyna.actor)); } CutsceneManager_Queue(this->dyna.actor.csId); diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h index 3789383c2..abb1e440b 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.h @@ -24,9 +24,9 @@ typedef struct ObjOcarinalift { /* 0x176 */ s16 cutsceneTimer; } ObjOcarinalift; // size = 0x178 -typedef enum ObjOcarinaliftParams { - /* 0x0 */ OBJOCARINALIFT_PARAMSC_0, - /* 0x1 */ OBJOCARINALIFT_PARAMSC_1 -} ObjOcarinaliftParams; +typedef enum ObjOcarinaliftParam { + /* 0 */ OBJOCARINALIFT_PARAM_0, + /* 1 */ OBJOCARINALIFT_PARAM_1 +} ObjOcarinaliftParam; #endif // Z_OBJ_OCARINALIFT_H diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h index d2f61e2cf..4740b907a 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.h @@ -12,7 +12,7 @@ typedef void (*ObjOshihikiActionFunc)(struct ObjOshihiki*, PlayState*); #define OBJOSHIHIKI_GET_7F00(thisx) (((thisx)->params >> 8) & 0x7F) #define OBJOSHIHIKI_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF) -enum { +typedef enum { /* 0 */ OBJOSHIHIKI_F_0, /* 1 */ OBJOSHIHIKI_F_1, /* 2 */ OBJOSHIHIKI_F_2, @@ -21,8 +21,8 @@ enum { /* 5 */ OBJOSHIHIKI_F_5, /* 6 */ OBJOSHIHIKI_F_6, /* 7 */ OBJOSHIHIKI_F_7, - /* 8 */ OBJOSHIHIKI_F_8, -}; + /* 8 */ OBJOSHIHIKI_F_8 +} ObjOshihikiParam; #define OBJOSHIHIKI_FF00_0 0 #define OBJOSHIHIKI_FF00_80 0x80 diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index 29a673eae..8a124b0ab 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -44,7 +44,7 @@ typedef struct { /* 0x0 */ s16 unk_00; /* 0x4 */ CollisionHeader* unk_04; /* 0x8 */ Gfx* unk_08; -} ObjPzlblockStruct; +} ObjPzlblockStruct; // size = 0xC ObjPzlblockStruct D_809A4060[] = { { GAMEPLAY_DANGEON_KEEP, &gameplay_dangeon_keep_Colheader_01D488, gameplay_dangeon_keep_DL_01C228 }, diff --git a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h index df3fe1dee..e059b6baa 100644 --- a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h +++ b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.h @@ -10,7 +10,7 @@ typedef enum { /* 0 */ OBJROTLIFT_TYPE_PLATFORMS, - /* 1 */ OBJROTLIFT_TYPE_SPIKES, + /* 1 */ OBJROTLIFT_TYPE_SPIKES } ObjRotliftType; struct ObjRotlift; diff --git a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c index a4378d92b..92ac9ad85 100644 --- a/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c +++ b/src/overlays/actors/ovl_Obj_Snowball/z_obj_snowball.c @@ -73,10 +73,10 @@ static ColliderJntSphInit sJntSphInit = { }; typedef struct { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s16 unk_02; - /* 0x04 */ ObjSnowballActionFunc unk_04; -} ObjSnowballStruct2; + /* 0x0 */ s16 unk_00; + /* 0x2 */ s16 unk_02; + /* 0x4 */ ObjSnowballActionFunc unk_04; +} ObjSnowballStruct2; // size = 0x8 static ObjSnowballStruct2 D_80B04F84[] = { { -1, 0, func_80B02D58 }, diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c index fb34d736a..c366a6982 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -234,7 +234,7 @@ typedef struct { /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; -} ObjSpidertentStruct; +} ObjSpidertentStruct; // size = 0x28 ObjSpidertentStruct D_80B31350[] = { { @@ -272,7 +272,7 @@ typedef struct { /* 0x0F */ s8 unk_0F; /* 0x10 */ Color_RGBA8 unk_10; /* 0x14 */ Color_RGBA8 unk_14; -} ObjSpidertentStruct2; +} ObjSpidertentStruct2; // size = 0x18 ObjSpidertentStruct2 D_80B313A0[] = { { diff --git a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h index 620228f53..4ebde38ad 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h +++ b/src/overlays/actors/ovl_Obj_Tokei_Turret/z_obj_tokei_turret.h @@ -7,7 +7,7 @@ typedef enum { /* 0 */ TURRET_TIER_BASE, - /* 1 */ TURRET_TIER_TOP, + /* 1 */ TURRET_TIER_TOP } TurretTierType; struct ObjTokeiTurret; diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h index e670d19e0..43f424ceb 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.h @@ -16,7 +16,7 @@ typedef enum { /* 8 */ OBJ_TOKEIDAI_TYPE_TOWER_WALLS_TERMINA_FIELD = 8, /* 9 */ OBJ_TOKEIDAI_TYPE_WALL_CLOCK, /* 10 */ OBJ_TOKEIDAI_TYPE_SMALL_WALL_CLOCK, - /* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP, + /* 11 */ OBJ_TOKEIDAI_TYPE_STAIRCASE_TO_ROOFTOP } ObjTokeidaiType; struct ObjTokeidai; diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c index 5f0e6c411..9b8baa861 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -63,8 +63,7 @@ typedef struct { /* 0x14 */ ObjTsuboUnkFunc breakPot1; /* 0x18 */ ObjTsuboUnkFunc breakPot2; /* 0x1C */ ObjTsuboUnkFunc breakPot3; - -} ObjTsuboData; +} ObjTsuboData; // size = 0x20 ObjTsuboData sPotTypeData[4] = { { GAMEPLAY_DANGEON_KEEP, 0.197f, gameplay_dangeon_keep_DL_017EA0, gameplay_dangeon_keep_DL_018090, 12, 32, diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h index 92bd96549..b6ed8d0df 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.h @@ -9,10 +9,10 @@ typedef void (*ObjUsiyaneActionFunc)(struct ObjUsiyane*, PlayState*); #define OBJUSIYANE_GET_F(thisx) ((thisx)->params & 0xF) -enum { +typedef enum { /* 0 */ OBJUSIYANE_F_0, - /* 1 */ OBJUSIYANE_F_1, -}; + /* 1 */ OBJUSIYANE_F_1 +} ObjUsiyaneParam; typedef struct { /* 0x00 */ Vec3f unk_00; diff --git a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h index bccdce645..a1b32bbe9 100644 --- a/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h +++ b/src/overlays/actors/ovl_Obj_Y2shutter/z_obj_y2shutter.h @@ -13,8 +13,8 @@ typedef struct ObjY2shutter { } ObjY2shutter; // size = 0x160 typedef enum { - /* 0x0 */ SHUTTER_BARRED, - /* 0x1 */ SHUTTER_GRATED, + /* 0 */ SHUTTER_BARRED, + /* 1 */ SHUTTER_GRATED } ShutterType; #define OBJY2SHUTTER_GET_TYPE(thisx) (((thisx)->params >> 7) & 1) diff --git a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h index 87a67191c..8bd3ecd65 100644 --- a/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h +++ b/src/overlays/actors/ovl_Oceff_Storm/z_oceff_storm.h @@ -19,6 +19,6 @@ typedef struct OceffStorm { typedef enum { /* 1 */ OCEFF_STORM_ACTION_PARAM_1 = 1 -} OceffStormActionParams; +} OceffStormActionParam; #endif // Z_OCEFF_STORM_H diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 41cf34318..9bf780859 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -80,7 +80,7 @@ typedef enum AnimSfxType { /* 7 */ ANIMSFX_TYPE_FLOOR_JUMP, // does not use sfxId /* 8 */ ANIMSFX_TYPE_8, // FLOOR_WALK_Something2 // does not use sfxId /* 9 */ ANIMSFX_TYPE_9, // Uses NA_SE_PL_WALK_LADDER // does not use sfxId, unused - /* 10 */ ANIMSFX_TYPE_SURFACE, + /* 10 */ ANIMSFX_TYPE_SURFACE } AnimSfxType; #define ANIMSFX_SHIFT_TYPE(type) ((type) << 11) diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c index 0e79c5df7..a786327fa 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.c @@ -52,7 +52,7 @@ u32 EffectSsEnFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPa this->rScaleMax = initParams->scale; - if (initParams->params & ENFIRE_PARAMS_USE_SCALE) { + if (initParams->params & ENFIRE_PARAM_USE_SCALE) { this->rScale = initParams->scale; } else { this->rScale = 0; diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h index 0f17477b8..491df81a5 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h +++ b/src/overlays/effects/ovl_Effect_Ss_En_Fire/z_eff_ss_en_fire.h @@ -4,7 +4,7 @@ #include "global.h" #define ENFIRE_FLAGS_BODYPART_POS_VEC3S (1 << 15) -#define ENFIRE_PARAMS_USE_SCALE (1 << 15) +#define ENFIRE_PARAM_USE_SCALE (1 << 15) typedef struct { /* 0x00 */ Actor* actor; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h index c2f231269..4f8cd94fe 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h @@ -4,30 +4,30 @@ #include "global.h" typedef enum { - /* 0x00 */ FHGFLASH_LIGHTBALL, - /* 0x01 */ FHGFLASH_SHOCK + /* 0 */ FHGFLASH_LIGHTBALL, + /* 1 */ FHGFLASH_SHOCK } FhgFlashType; typedef enum { - /* 0x00 */ FHGFLASH_LIGHTBALL_GREEN, - /* 0x01 */ FHGFLASH_LIGHTBALL_LIGHTBLUE, - /* 0x02 */ FHGFLASH_LIGHTBALL_RED, - /* 0x03 */ FHGFLASH_LIGHTBALL_YELLOW, - /* 0x04 */ FHGFLASH_LIGHTBALL_BLUE, - /* 0x05 */ FHGFLASH_LIGHTBALL_PURPLE, - /* 0x06 */ FHGFLASH_LIGHTBALL_ORANGE, - /* 0x07 */ FHGFLASH_LIGHTBALL_WHITE1, - /* 0x08 */ FHGFLASH_LIGHTBALL_WHITE2 + /* 0 */ FHGFLASH_LIGHTBALL_GREEN, + /* 1 */ FHGFLASH_LIGHTBALL_LIGHTBLUE, + /* 2 */ FHGFLASH_LIGHTBALL_RED, + /* 3 */ FHGFLASH_LIGHTBALL_YELLOW, + /* 4 */ FHGFLASH_LIGHTBALL_BLUE, + /* 5 */ FHGFLASH_LIGHTBALL_PURPLE, + /* 6 */ FHGFLASH_LIGHTBALL_ORANGE, + /* 7 */ FHGFLASH_LIGHTBALL_WHITE1, + /* 8 */ FHGFLASH_LIGHTBALL_WHITE2 } FhgFlashLightBallParam; typedef enum { - /* 0x00 */ FHGFLASH_SHOCK_NO_ACTOR, - /* 0x01 */ FHGFLASH_SHOCK_PLAYER, - /* 0x02 */ FHGFLASH_SHOCK_GOHT_2, - /* 0x03 */ FHGFLASH_SHOCK_GOHT_3, - /* 0x04 */ FHGFLASH_SHOCK_GOHT_4, - /* 0x05 */ FHGFLASH_SHOCK_GOHT_5, - /* 0x06 */ FHGFLASH_SHOCK_GOHT_6 + /* 0 */ FHGFLASH_SHOCK_NO_ACTOR, + /* 1 */ FHGFLASH_SHOCK_PLAYER, + /* 2 */ FHGFLASH_SHOCK_GOHT_2, + /* 3 */ FHGFLASH_SHOCK_GOHT_3, + /* 4 */ FHGFLASH_SHOCK_GOHT_4, + /* 5 */ FHGFLASH_SHOCK_GOHT_5, + /* 6 */ FHGFLASH_SHOCK_GOHT_6 } FhgFlashLightningParam; typedef struct { diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c index f9735d396..1856ba6ac 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.c @@ -21,10 +21,10 @@ EffectSsInit Effect_Ss_Stone1_InitVars = { }; typedef struct { - /* 0x00 */ TexturePtr texture; - /* 0x04 */ Color_RGBA8 primColor; - /* 0x08 */ Color_RGBA8 envColor; -} EffStoneDrawInfo; + /* 0x0 */ TexturePtr texture; + /* 0x4 */ Color_RGBA8 primColor; + /* 0x8 */ Color_RGBA8 envColor; +} EffStoneDrawInfo; // size = 0xC static EffStoneDrawInfo sDrawInfo[] = { { gEffStone8Tex, { 200, 0, 0, 255 }, { 0, 0, 0, 255 } }, diff --git a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h index b50868b81..627bbd4f2 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h +++ b/src/overlays/effects/ovl_Effect_Ss_Stone1/z_eff_ss_stone1.h @@ -4,8 +4,8 @@ #include "global.h" typedef struct { - /* 0x00 */ Vec3f pos; - /* 0x0C */ s32 reg0; + /* 0x0 */ Vec3f pos; + /* 0xC */ s32 reg0; } EffectSsStone1InitParams; // size = 0x10 #endif diff --git a/src/overlays/gamestates/ovl_select/z_select.h b/src/overlays/gamestates/ovl_select/z_select.h index 69312e986..8b5974103 100644 --- a/src/overlays/gamestates/ovl_select/z_select.h +++ b/src/overlays/gamestates/ovl_select/z_select.h @@ -8,9 +8,9 @@ struct MapSelectState; typedef void (*SelectLoadFunc)(struct MapSelectState*, u32, s32); typedef struct { - /* 0x00 */ char* name; - /* 0x04 */ SelectLoadFunc loadFunc; - /* 0x08 */ s32 entrance; + /* 0x0 */ char* name; + /* 0x4 */ SelectLoadFunc loadFunc; + /* 0x8 */ s32 entrance; } SceneSelectEntry; // size = 0xC typedef struct MapSelectState { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c index 1b8511b50..1b18adcd1 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_collect.c @@ -563,7 +563,7 @@ typedef struct { /* 0x2 */ s16 down; /* 0x4 */ s16 left; /* 0x6 */ s16 right; -} CursorPointDirection; +} CursorPointDirection; // size = 0x8 void KaleidoScope_UpdateQuestCursor(PlayState* play) { static s16 sQuestSongPlaybackDelayTimer = 0; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index 8517fdf20..f643d8d40 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -37,7 +37,7 @@ typedef struct { /* 0x0 */ s16 screenX; /* 0x2 */ s16 screenY; /* 0x4 */ s16 width; -} SectionPosition; // size = 0x6; +} SectionPosition; // size = 0x6 // clang-format off SectionPosition sSectionPositions[] = { From 7f5087d0b2014dc1ba2bbfc7ce858f0059a8a7cb Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Tue, 6 Jun 2023 12:16:34 +1000 Subject: [PATCH 29/36] sys_math.c Rename (#1258) * rename via comments * missed a comment * math header * name boot_80086760.c functions * PR Review * rm cam comment * Elliptic review * alphabetical --- include/functions.h | 101 +----------------- include/variables.h | 1 - include/z64math.h | 71 ++++++++++++ src/boot_O2/boot_80086760.c | 77 +++++-------- src/code/sys_math.c | 33 +++--- src/code/z_actor.c | 18 ++-- src/code/z_bgcheck.c | 3 +- src/code/z_camera.c | 33 +++--- src/code/z_eff_blure.c | 24 ++--- src/code/z_en_item00.c | 12 +-- src/code/z_lib.c | 6 +- src/code/z_olib.c | 8 +- src/code/z_player_lib.c | 12 +-- src/code/z_sub_s.c | 2 +- .../actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c | 7 +- .../ovl_Bg_F40_Swlift/z_bg_f40_swlift.c | 2 +- .../actors/ovl_Bg_Icefloe/z_bg_icefloe.c | 10 +- .../actors/ovl_Bg_Icicle/z_bg_icicle.c | 8 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 7 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 38 +++---- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 56 +++++----- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 4 +- src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c | 18 ++-- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 10 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 2 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 8 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 6 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 9 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 2 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 16 ++- src/overlays/actors/ovl_En_Bh/z_en_bh.c | 8 +- .../actors/ovl_En_Bigokuta/z_en_bigokuta.c | 8 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 4 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 4 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 33 +++--- .../actors/ovl_En_Bigslime/z_en_bigslime.h | 2 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 10 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 4 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 4 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 6 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 12 +-- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 4 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 10 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 12 +-- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 14 +-- .../actors/ovl_En_Dragon/z_en_dragon.c | 10 +- .../actors/ovl_En_Egblock/z_en_egblock.c | 10 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 17 ++- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 12 +-- .../actors/ovl_En_Elfbub/z_en_elfbub.c | 2 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 4 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 6 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 14 +-- .../actors/ovl_En_Encount4/z_en_encount4.c | 4 +- .../actors/ovl_En_Estone/z_en_estone.c | 10 +- src/overlays/actors/ovl_En_Fall/z_en_fall.c | 8 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 6 +- .../actors/ovl_En_Firefly/z_en_firefly.c | 2 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 24 ++--- .../actors/ovl_En_Fishing/z_en_fishing.c | 56 +++++----- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 22 ++-- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 2 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 34 +++--- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 4 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 2 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 10 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 8 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 8 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 14 +-- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 6 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 20 ++-- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 6 +- .../actors/ovl_En_Minislime/z_en_minislime.c | 30 +++--- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 10 +- .../actors/ovl_En_Nimotsu/z_en_nimotsu.c | 4 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 22 ++-- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 12 +-- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 6 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 2 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 10 +- src/overlays/actors/ovl_En_Part/z_en_part.c | 6 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 14 +-- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 26 ++--- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 8 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 18 ++-- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 32 +++--- .../actors/ovl_En_Racedog/z_en_racedog.c | 18 ++-- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 6 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 20 ++-- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 4 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 6 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 10 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 42 ++++---- .../actors/ovl_En_Snowman/z_en_snowman.c | 20 ++-- .../actors/ovl_En_Suttari/z_en_suttari.c | 8 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- .../ovl_En_Syateki_Crow/z_en_syateki_crow.c | 4 +- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 4 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 6 +- .../actors/ovl_En_Tanron1/z_en_tanron1.c | 8 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 2 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 26 ++--- .../actors/ovl_En_Tanron4/z_en_tanron4.c | 23 ++-- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 16 +-- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 10 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 10 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 12 +-- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 2 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 12 +-- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 10 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 8 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 22 ++-- .../actors/ovl_En_Wood02/z_en_wood02.c | 6 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 6 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 8 +- .../ovl_Obj_Bigicicle/z_obj_bigicicle.c | 16 +-- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 2 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 8 +- .../actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c | 4 +- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c | 6 +- .../actors/ovl_player_actor/z_player.c | 30 +++--- .../ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c | 4 +- .../z_eff_ss_fhg_flash.c | 12 +-- .../z_eff_ss_kirakira.c | 4 +- .../effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c | 2 +- tools/disasm/functions.txt | 78 +++++++------- tools/namefixer.py | 8 +- tools/sizes/boot_functions.csv | 66 ++++++------ tools/sizes/code_functions.csv | 12 +-- 140 files changed, 916 insertions(+), 955 deletions(-) diff --git a/include/functions.h b/include/functions.h index 7d64745f6..71aa14729 100644 --- a/include/functions.h +++ b/include/functions.h @@ -129,39 +129,6 @@ void MtxConv_L2F(MtxF* mtx, Mtx* mf); void __assert(const char* file, u32 lineNum); // void func_800862B4(void); s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3); -f32 func_80086760(f32 x); -// void func_80086794(void); -// void func_800867B4(void); -// void func_800867D4(void); -// void func_800867F4(void); -f32 func_80086814(f32 x); -// void func_80086834(void); -// void func_80086880(void); -// void func_800869A4(void); -// void func_80086AF0(void); -f32 func_80086B30(f32 y, f32 x); -// void func_80086C18(void); -f32 func_80086C48(f32 x); -// void func_80086C70(void); -f64 func_80086C7C(f64 param_1); -s32 func_80086C88(f32 param_1); -s32 func_80086C98(f64 param_1); -// void func_80086CA8(void); -f64 func_80086CB4(f64 param_1); -s32 func_80086CC0(f32 param_1); -s32 func_80086CD0(f64 param_1); -// void func_80086CE0(void); -f64 func_80086CEC(f64 param_1); -s32 func_80086CF8(f32 param_1); -s32 func_80086D08(f64 param_1); -// void func_80086D18(void); -f64 func_80086D24(f64); -s32 func_80086D30(f32 param_1); -s32 func_80086D40(f64 param_1); -// void func_80086D50(void); -f64 func_80086D6C(f64 param_1); -s32 func_80086D8C(f32 param_1); -s32 func_80086DAC(f64 param_1); u32 Rand_Next(void); void Rand_Seed(u32 seed); @@ -1161,70 +1128,17 @@ void func_800FEA50(PlayState* play); void func_800FEAB0(void); // void func_800FEAC0(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); -f32 Math_SinS(s16 angle); -s32 Math_StepToIImpl(s32 start, s32 target, s32 step); -void Math_StepToIGet(s32* pValue, s32 target, s32 step); -s32 Math_StepToI(s32* pValue, s32 target, s32 step); -s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step); -s32 Math_StepToS(s16* pValue, s16 target, s16 step); -s32 Math_StepToC(s8* pValue, s8 target, s8 step); -s32 Math_StepToF(f32* pValue, f32 target, f32 step); -s32 Math_StepUntilAngleS(s16* pValue, s16 target, s16 step); -s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step); -s32 Math_AsymStepToS(s16* pValue, s16 target, s16 incrStep, s16 decrStep); -s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step); -s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep); void func_800FF3A0(f32* distOut, s16* angleOut, Input* input); -s16 Rand_S16Offset(s16 base, s16 range); -s16 Rand_S16OffsetStride(s16 base, s16 stride, s16 range); -void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src); -void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src); -void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src); -void Math_Vec3f_ToVec3s(Vec3s* dest, Vec3f* src); -void Math_Vec3f_Sum(Vec3f* l, Vec3f* r, Vec3f* dest); -void Math_Vec3f_Diff(Vec3f* l, Vec3f* r, Vec3f* dest); -void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* l, Vec3s* r); -void Math_Vec3f_Scale(Vec3f* vec, f32 scale); -void Math_Vec3f_ScaleAndStore(Vec3f* vec, f32 scale, Vec3f* dest); -void Math_Vec3f_Lerp(Vec3f* a, Vec3f* b, f32 t, Vec3f* dest); -void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); -void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest); -void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); -f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b); -f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest); -f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b); -f32 Math_Vec3f_DistXZAndStore(Vec3f* a, Vec3f* b, f32* dx, f32* dz); -f32 Math_Vec3f_StepToXZ(Vec3f* start, Vec3f* target, f32 speed); -f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b); -s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b); -s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b); void Actor_ProcessInitChain(Actor* actor, InitChainEntry* ichain); -// void IChain_Apply_u8(u8* actor, InitChainEntry* init); -// void IChain_Apply_s8(u8* actor, InitChainEntry* init); -// void IChain_Apply_u16(u8* actor, InitChainEntry* init); -// void IChain_Apply_s16(u8* actor, InitChainEntry* init); -// void IChain_Apply_u32(u8* actor, InitChainEntry* init); -// void IChain_Apply_s32(u8* actor, InitChainEntry* init); -// void IChain_Apply_f32(u8* actor, InitChainEntry* init); -// void IChain_Apply_f32div1000(u8* actor, InitChainEntry* init); -// void IChain_Apply_Vec3f(u8* actor, InitChainEntry* init); -// void IChain_Apply_Vec3fdiv1000(u8* actor, InitChainEntry* init); -// void IChain_Apply_Vec3s(u8* actor, InitChainEntry* init); -f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep); -void Math_ApproachF(f32* pValue, f32 target, f32 scale, f32 maxStep); -void Math_ApproachZeroF(f32* pValue, f32 scale, f32 maxStep); -s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep); -void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 maxStep); void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src); void func_801000A4(u16 sfxId); void func_801000CC(u16 sfxId); void Lib_PlaySfxAtPos(Vec3f* pos, u16 sfxId); void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst); void Lib_LerpRGB(Color_RGB8* a, Color_RGB8* b, f32 t, Color_RGB8* dst); -f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed); void Lib_Nop801004FC(void); void* Lib_SegmentedToVirtual(void* ptr); void* Lib_SegmentedToVirtualNull(void* ptr); @@ -2056,13 +1970,7 @@ void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_DrawRegionLockErrorMessage(void); void Check_ExpansionPak(void); void Check_RegionIsSupported(void); -f32 func_80179300(f32 n); -f32 func_80179400(s32 n); -f32 pow_int(f32 base, s32 exp); -f32 sin_rad(f32 rad); -f32 cos_rad(f32 rad); -f32 Rand_ZeroFloat(f32 scale); -f32 randPlusMinusPoint5Scaled(f32 scale); + f32 Math3D_Normalize(Vec3f* vec); s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB, Vec3f* closestPoint); s32 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6); @@ -2158,11 +2066,6 @@ s32 Math3D_YZInSphere(Sphere16* sphere, f32 y, f32 z); // void func_8017FB1C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); // void func_8017FD44(void); -s16 Math_Atan2S(f32 y, f32 x); -f32 Math_Atan2F(f32 y, f32 x); -s16 Math_Atan2S_XY(f32 x, f32 y); -f32 Math_Atan2F_XY(f32 x, f32 y); - u64* SysUcode_GetUCodeBoot(void); size_t SysUcode_GetUCodeBootSize(void); u64* SysUcode_GetUCode(void); diff --git a/include/variables.h b/include/variables.h index e264a7d9b..fef772123 100644 --- a/include/variables.h +++ b/include/variables.h @@ -755,7 +755,6 @@ extern s32 gScreenWidth; extern s32 gScreenHeight; extern u32 startHeapSize; extern UNK_PTR D_801D1540; -// extern f32 sFactorialTbl[13]; extern Vec3f gZeroVec3f; extern Vec3s gZeroVec3s; diff --git a/include/z64math.h b/include/z64math.h index cd5c1db20..a86cf9a20 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -168,4 +168,75 @@ typedef enum { #define SQXYZ(vec) ((vec.x) * (vec.x) + (vec.y) * (vec.y) + (vec.z) * (vec.z)) #define DOTXYZ(vec1, vec2) ((vec1.x) * (vec2.x) + (vec1.y) * (vec2.y) + (vec1.z) * (vec2.z)) +f32 Math_CosS(s16 angle); +f32 Math_SinS(s16 angle); +s32 Math_StepToIImpl(s32 start, s32 target, s32 step); +void Math_StepToIGet(s32* pValue, s32 target, s32 step); +s32 Math_StepToI(s32* pValue, s32 target, s32 step); +s32 Math_ScaledStepToS(s16* pValue, s16 target, s16 step); +s32 Math_StepToS(s16* pValue, s16 target, s16 step); +s32 Math_StepToC(s8* pValue, s8 target, s8 step); +s32 Math_StepToF(f32* pValue, f32 target, f32 step); +s32 Math_StepUntilAngleS(s16* pValue, s16 target, s16 step); +s32 Math_StepToAngleS(s16* pValue, s16 target, s16 step); +s32 Math_AsymStepToS(s16* pValue, s16 target, s16 incrStep, s16 decrStep); +s32 Math_StepUntilF(f32* pValue, f32 limit, f32 step); +s32 Math_AsymStepToF(f32* pValue, f32 target, f32 incrStep, f32 decrStep); +s16 Rand_S16Offset(s16 base, s16 range); +s16 Rand_S16OffsetStride(s16 base, s16 stride, s16 range); +void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src); +void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src); +void Math_Vec3s_ToVec3f(Vec3f* dest, Vec3s* src); +void Math_Vec3f_ToVec3s(Vec3s* dest, Vec3f* src); +void Math_Vec3f_Sum(Vec3f* l, Vec3f* r, Vec3f* dest); +void Math_Vec3f_Diff(Vec3f* l, Vec3f* r, Vec3f* dest); +void Math_Vec3s_DiffToVec3f(Vec3f* dest, Vec3s* l, Vec3s* r); +void Math_Vec3f_Scale(Vec3f* vec, f32 scale); +void Math_Vec3f_ScaleAndStore(Vec3f* vec, f32 scale, Vec3f* dest); +void Math_Vec3f_Lerp(Vec3f* a, Vec3f* b, f32 t, Vec3f* dest); +void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); +void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest); +void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest); +f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b); +f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest); +f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b); +f32 Math_Vec3f_DistXZAndStore(Vec3f* a, Vec3f* b, f32* dx, f32* dz); +f32 Math_Vec3f_StepToXZ(Vec3f* start, Vec3f* target, f32 speed); +f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b); +s16 Math_Vec3f_Yaw(Vec3f* a, Vec3f* b); +s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b); +f32 Math_SmoothStepToF(f32* pValue, f32 target, f32 fraction, f32 step, f32 minStep); +void Math_ApproachF(f32* pValue, f32 target, f32 scale, f32 maxStep); +void Math_ApproachZeroF(f32* pValue, f32 scale, f32 maxStep); +s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep); +void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 maxStep); +f32 Math_Vec3f_StepTo(Vec3f* start, Vec3f* target, f32 speed); + +f32 Math_FactorialF(f32 n); +f32 Math_Factorial(s32 n); +f32 Math_PowF(f32 base, s32 exp); +f32 Math_SinF(f32 rad); +f32 Math_CosF(f32 rad); +f32 Rand_ZeroFloat(f32 scale); +f32 Rand_CenteredFloat(f32 scale); + +f32 Math_FTanF(f32 x); +f32 Math_FFloorF(f32 x); +f32 Math_FCeilF(f32 x); +f32 Math_FRoundF(f32 x); +f32 Math_FTruncF(f32 x); +f32 Math_FNearbyIntF(f32 x); +f32 Math_FAtanTaylorQF(f32 x); +f32 Math_FAtanTaylorF(f32 x); +f32 Math_FAtanContFracF(f32 x); +f32 Math_FAtanF(f32 x); +f32 Math_FAtan2F(f32 y, f32 x); +f32 Math_FAsinF(f32 x); +f32 Math_FAcosF(f32 x); + +s16 Math_Atan2S(f32 y, f32 x); +f32 Math_Atan2F(f32 y, f32 x); +s16 Math_Atan2S_XY(f32 x, f32 y); +f32 Math_Atan2F_XY(f32 x, f32 y); + #endif diff --git a/src/boot_O2/boot_80086760.c b/src/boot_O2/boot_80086760.c index 398a1e41a..cb77bed50 100644 --- a/src/boot_O2/boot_80086760.c +++ b/src/boot_O2/boot_80086760.c @@ -5,57 +5,44 @@ #include "global.h" #include "fixed_point.h" -extern f32 func_80086C70(f32 x); -extern f32 func_80086CA8(f32 x); -extern f32 func_80086D50(f32 x); -extern f32 func_80086CE0(f32 x); -extern f32 func_80086D18(f32 x); - s32 gUseAtanContFrac; /** * Tangent function computed using libultra sinf and cosf */ -// Math_FTanF -f32 func_80086760(f32 x) { +f32 Math_FTanF(f32 x) { return sinf(x) / cosf(x); } // Unused -// Math_FFloorF -f32 func_80086794(f32 x) { - return func_80086C70(x); +f32 Math_FFloorF(f32 x) { + return floorf(x); } // Unused -// Math_FCeilF -f32 func_800867B4(f32 x) { - return func_80086CA8(x); +f32 Math_FCeilF(f32 x) { + return ceilf(x); } // Unused -// Math_FRoundF -f32 func_800867D4(f32 x) { - return func_80086D50(x); +f32 Math_FRoundF(f32 x) { + return roundf(x); } // Unused -// Math_FTruncF -f32 func_800867F4(f32 x) { - return func_80086CE0(x); +f32 Math_FTruncF(f32 x) { + return truncf(x); } -// Math_FNearbyIntF -f32 func_80086814(f32 x) { - return func_80086D18(x); +f32 Math_FNearbyIntF(f32 x) { + return nearbyintf(x); } /** * Arctangent approximation using a Maclaurin series [https://mathworld.wolfram.com/MaclaurinSeries.html] * (one quadrant, i.e. |x| < 1) */ -// Math_FAtanTaylorQF -f32 func_80086834(f32 x) { +f32 Math_FAtanTaylorQF(f32 x) { // Coefficients of Maclaurin series of arctangent static const f32 coeffs[] = { -1.0f / 3, +1.0f / 5, -1.0f / 7, +1.0f / 9, -1.0f / 11, +1.0f / 13, -1.0f / 15, +1.0f / 17, 0.0f, @@ -84,10 +71,9 @@ f32 func_80086834(f32 x) { * Extends previous arctangent function to the rest of the real numbers. * Uses the formulae arctan(x) = pi/2 - arctan(1/x) * and arctan(x) = pi/4 - arctan( (1-x)/(1+x) ) - * to extend the range in which the series computed by func_80086834 is a good approximation + * to extend the range in which the series computed by Math_FAtanTaylorQF is a good approximation */ -// Math_FAtanTaylorF -f32 func_80086880(f32 x) { +f32 Math_FAtanTaylorF(f32 x) { f32 t; f32 q; @@ -102,13 +88,13 @@ f32 func_80086880(f32 x) { } if (t <= M_SQRT2 - 1.0f) { - return func_80086834(x); + return Math_FAtanTaylorQF(x); } if (t >= M_SQRT2 + 1.0f) { - q = M_PI / 2 - func_80086834(1.0f / t); + q = M_PI / 2 - Math_FAtanTaylorQF(1.0f / t); } else { // in the interval (\sqrt{2} - 1, \sqrt{2} + 1) - q = M_PI / 4 - func_80086834((1.0f - t) / (1.0f + t)); + q = M_PI / 4 - Math_FAtanTaylorQF((1.0f - t) / (1.0f + t)); } if (x > 0.0f) { @@ -123,8 +109,7 @@ f32 func_80086880(f32 x) { * Cf. https://en.wikipedia.org/wiki/Gauss%27s_continued_fraction#The_series_2F1_2 , * https://dlmf.nist.gov/4.25#E4 */ -// Math_FAtanContFracF -f32 func_800869A4(f32 x) { +f32 Math_FAtanContFracF(f32 x) { s32 sector; f32 z; f32 conv; @@ -162,24 +147,22 @@ f32 func_800869A4(f32 x) { } } -// Math_FAtanF /** * Single-argument arctangent, only used by the two-argument function. * Nothing else sets the bss variable gUseAtanContFrac, so the Maclaurin series is always used */ -f32 func_80086AF0(f32 x) { +f32 Math_FAtanF(f32 x) { if (!gUseAtanContFrac) { - return func_80086880(x); + return Math_FAtanTaylorF(x); } else { - return func_800869A4(x); + return Math_FAtanContFracF(x); } } -// Math_FAtan2F /** * Main two-argument arctangent function */ -f32 func_80086B30(f32 y, f32 x) { +f32 Math_FAtan2F(f32 y, f32 x) { if (x == 0.0f) { if (y == 0.0f) { return 0.0f; @@ -191,20 +174,18 @@ f32 func_80086B30(f32 y, f32 x) { return qNaN0x10000; } } else if (x >= 0.0f) { - return func_80086AF0(y / x); + return Math_FAtanF(y / x); } else if (y < 0.0f) { - return func_80086AF0(y / x) - M_PI; + return Math_FAtanF(y / x) - M_PI; } else { - return M_PI - func_80086AF0(-(y / x)); + return M_PI - Math_FAtanF(-(y / x)); } } -// Math_FAsinF -f32 func_80086C18(f32 x) { - return func_80086B30(x, sqrtf(1.0f - SQ(x))); +f32 Math_FAsinF(f32 x) { + return Math_FAtan2F(x, sqrtf(1.0f - SQ(x))); } -// Math_FAcosF -f32 func_80086C48(f32 x) { - return M_PI / 2 - func_80086C18(x); +f32 Math_FAcosF(f32 x) { + return M_PI / 2 - Math_FAsinF(x); } diff --git a/src/code/sys_math.c b/src/code/sys_math.c index 7fd7e9dea..99d13c332 100644 --- a/src/code/sys_math.c +++ b/src/code/sys_math.c @@ -4,15 +4,17 @@ */ #include "global.h" -static f32 sFactorialTbl[] = { 1.0f, 1.0f, 2.0f, 6.0f, 24.0f, 120.0f, 720.0f, - 5040.0f, 40320.0f, 362880.0f, 3628800.0f, 39916800.0f, 479001600.0f }; +static f32 sFactorialTbl[] = { + 1.0f, 1.0f, 2.0f, 6.0f, 24.0f, 120.0f, 720.0f, 5040.0f, 40320.0f, 362880.0f, 3628800.0f, 39916800.0f, 479001600.0f, +}; -// Rename to Math_FactorialF /** * Takes a float, returns the factorial of it(s trunctation), iteratively * Unused + * + * @remark original name: "ffact" */ -f32 func_80179300(f32 n) { +f32 Math_FactorialF(f32 n) { f32 ret = 1.0f; s32 i; @@ -23,12 +25,13 @@ f32 func_80179300(f32 n) { return ret; } -// Rename to Math_Factorial /** * Takes an int and returns its factorial as a float. Uses the lookup table for n <= 12. * Unused + * + * @remark original name: "ifact" */ -f32 func_80179400(s32 n) { +f32 Math_Factorial(s32 n) { f32 ret; s32 i; @@ -45,12 +48,13 @@ f32 func_80179400(s32 n) { return ret; } -// Rename to Math_PowF /** * Returns base^{exp} if exp is nonnegative and 1.0f otherwise. * Unused + * + * @remark original name: "powi" */ -f32 pow_int(f32 base, s32 exp) { +f32 Math_PowF(f32 base, s32 exp) { f32 ret = 1.0f; while (exp > 0) { @@ -61,19 +65,21 @@ f32 pow_int(f32 base, s32 exp) { return ret; } -// Rename to Math_SinF /** * Takes an angle in radians and returns the sine. + * + * @remark original name: "sinf_table" */ -f32 sin_rad(f32 rad) { +f32 Math_SinF(f32 rad) { return sins(RAD_TO_BINANG(rad)) * SHT_MINV; } -// Rename to Math_CosF /** * Takes an angle in radians and returns the cosine. + * + * @remark original name: "cosf_table" */ -f32 cos_rad(f32 rad) { +f32 Math_CosF(f32 rad) { return coss(RAD_TO_BINANG(rad)) * SHT_MINV; } @@ -84,10 +90,9 @@ f32 Rand_ZeroFloat(f32 scale) { return Rand_ZeroOne() * scale; } -// Rename to Rand_CenteredFloat /** * Returns a pseudo-random floating-point number between (- scale / 2) and (scale / 2). Originally in z_actor in OoT. */ -f32 randPlusMinusPoint5Scaled(f32 scale) { +f32 Rand_CenteredFloat(f32 scale) { return Rand_Centered() * scale; } diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 82ff8ddd9..e7bc92a26 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -3567,8 +3567,8 @@ void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 r accel.y += (Rand_ZeroOne() - 0.5f) * 0.2f; for (i = countMinusOne; i >= 0; i--) { - pos.x = (sin_rad(angle) * radius) + posXZ->x; - pos.z = (cos_rad(angle) * radius) + posXZ->z; + pos.x = (Math_SinF(angle) * radius) + posXZ->x; + pos.z = (Math_CosF(angle) * radius) + posXZ->z; accel.x = (Rand_ZeroOne() - 0.5f) * randAccelWeight; accel.z = (Rand_ZeroOne() - 0.5f) * randAccelWeight; @@ -4816,7 +4816,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // Apply and draw a light orb over each limb of frozen actor for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) { - Matrix_RotateZF(randPlusMinusPoint5Scaled(2 * M_PI), MTXMODE_APPLY); + Matrix_RotateZF(Rand_CenteredFloat(2 * M_PI), MTXMODE_APPLY); currentMatrix->mf[3][0] = limbPos->x; currentMatrix->mf[3][1] = limbPos->y; currentMatrix->mf[3][2] = limbPos->z; @@ -4857,9 +4857,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // first electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x; - currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y; - currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z; + currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x; + currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y; + currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -4869,9 +4869,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 // second electric spark Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI)); Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY); - currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x; - currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y; - currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z; + currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x; + currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y; + currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z; gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index e30dec5d5..a263d4393 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1,4 +1,5 @@ #include "global.h" +#include "fixed_point.h" #include "vt.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" @@ -3047,7 +3048,7 @@ void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s3 newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z); } - newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA)); + newPoly->dist = nearbyint(-DOTXYZ(newNormal, vtxA)); if (newNormal.y > 0.5f) { s16 polyId = *polyStartIndex + i; diff --git a/src/code/z_camera.c b/src/code/z_camera.c index bd23308c3..ce09f7c4d 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -875,7 +875,7 @@ void func_800CC938(Camera* camera) { * Calculates the angle between points `from` and `to` */ s16 Camera_CalcXZAngle(Vec3f* to, Vec3f* from) { - return CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(from->x - to->x, from->z - to->z))); + return CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(from->x - to->x, from->z - to->z))); } // BSS @@ -964,8 +964,8 @@ s16 Camera_GetPitchAdjFromFloorHeightDiffs(Camera* camera, s16 viewYaw, s16 shou floorYDiffNear = (sFloorYNear - camera->focalActorFloorHeight) * 0.8f; floorYDiffFar = (sFloorYFar - camera->focalActorFloorHeight) * (20.0f * 0.01f); - pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffNear, nearDist))); - pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(floorYDiffFar, farDist))); + pitchNear = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(floorYDiffNear, nearDist))); + pitchFar = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(floorYDiffFar, farDist))); return pitchNear + pitchFar; } @@ -1457,9 +1457,8 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32 xzOf deltaY = focalActorPosRot->pos.y - *focalActorPosY; eyeAtDistXZ = OLib_Vec3fDistXZ(at, &camera->eye); - // Math_FTanF // Get the height based on 80% of the fov - fovHeight = func_80086760(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ; + fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * (0.8f * 0.5f))) * eyeAtDistXZ; if (deltaY > fovHeight) { //! FAKE @@ -1539,8 +1538,8 @@ s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targ deltaY = focalActorPosRot->pos.y - *yPosOffset; sp50 = OLib_Vec3fDistXZ(at, &camera->eye); phi_f16 = sp50; - func_80086B30(deltaY, sp50); - fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16; + Math_FAtan2F(deltaY, sp50); + fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * 0.4f)) * phi_f16; if (fovHeight < deltaY) { *yPosOffset += deltaY - fovHeight; @@ -1552,12 +1551,12 @@ s32 Camera_CalcAtForFriendlyLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targ focalActorAtOffsetTarget.y -= deltaY; } else { deltaY = focalActorPosRot->pos.y - *yPosOffset; - temp_f0_6 = func_80086B30(deltaY, OLib_Vec3fDistXZ(at, &camera->eye)); + temp_f0_6 = Math_FAtan2F(deltaY, OLib_Vec3fDistXZ(at, &camera->eye)); if (temp_f0_6 > 0.34906584f) { // (M_PI / 9) - phi_f16 = 1.0f - sin_rad(temp_f0_6 - 0.34906584f); + phi_f16 = 1.0f - Math_SinF(temp_f0_6 - 0.34906584f); } else if (temp_f0_6 < -0.17453292f) { // (M_PI / 18) - phi_f16 = 1.0f - sin_rad(-0.17453292f - temp_f0_6); + phi_f16 = 1.0f - Math_SinF(-0.17453292f - temp_f0_6); } else { phi_f16 = 1.0f; } @@ -1625,10 +1624,10 @@ s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset new_var2 = *arg1; sp4C = new_var2; deltaY = focalActorPosRot->pos.y - *arg6; - temp_f0_3 = func_80086B30(deltaY, sp4C); + temp_f0_3 = Math_FAtan2F(deltaY, sp4C); if (!(flags & 0x80)) { - fovHeight = func_80086760(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C; + fovHeight = Math_FTanF(DEG_TO_RAD(camera->fov * 0.4f)) * sp4C; if (fovHeight < deltaY) { *arg6 += deltaY - fovHeight; @@ -1641,9 +1640,9 @@ s32 Camera_CalcAtForEnemyLockOn(Camera* camera, f32* arg1, s32 arg2, f32 yOffset focalActorAtOffsetTarget.y -= deltaY; } else { if (temp_f0_3 > 0.34906584f) { // (M_PI / 9) - phi_f14 = 1.0f - sin_rad(temp_f0_3 - 0.34906584f); + phi_f14 = 1.0f - Math_SinF(temp_f0_3 - 0.34906584f); } else if (temp_f0_3 < -0.17453292f) { // (M_PI / 18) - phi_f14 = 1.0f - sin_rad(-0.17453292f - temp_f0_3); + phi_f14 = 1.0f - Math_SinF(-0.17453292f - temp_f0_3); } else { phi_f14 = 1.0f; } @@ -6343,8 +6342,8 @@ s32 Camera_Demo4(Camera* camera) { // Camera fixed on human player as the mask moves from the pocket to the face // Camera rolls left and right if (rwData->timer >= 12) { - rwData->unk_0C = (rwData->timer - 12) * 10.384615f; - sin = sin_rad(DEG_TO_RAD(rwData->unk_0C)); + rwData->unk_0C = (rwData->timer - 12) * (135.0f / 13.0f); + sin = Math_SinF(DEG_TO_RAD(rwData->unk_0C)); rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin; if (rwData->timer == 12) { Distortion_Request(DISTORTION_TYPE_MASK_TRANSFORM_1); @@ -6516,7 +6515,7 @@ s32 Camera_Demo5(Camera* camera) { // Camera zooms out while rolling back and forth rwData->unk_0C = rwData->timer * (180.0f / 23.0f); sp58 = DEG_TO_RAD(rwData->unk_0C); - sin = sin_rad(sp58); + sin = Math_SinF(sp58); rwData->unk_0C = ((rwData->unk_10 < 0.0f) ? -1.0f : 1.0f) * sin; new_var = (46 - rwData->timer) * (5.0f / 46.0f); focalActorFocus.pos.x = (Math_SinS(rwData->unk_24) * new_var * rwData->unk_0C) + focalActorPosRot->pos.x; diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c index 370ca9481..775db80e1 100644 --- a/src/code/z_eff_blure.c +++ b/src/code/z_eff_blure.c @@ -561,16 +561,16 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem vtx[0].v = baseVtx; vtx[1].v = baseVtx; - vtx[0].v.ob[0] = func_80086814(sp158.x); - vtx[0].v.ob[1] = func_80086814(sp158.y); - vtx[0].v.ob[2] = func_80086814(sp158.z); + vtx[0].v.ob[0] = Math_FNearbyIntF(sp158.x); + vtx[0].v.ob[1] = Math_FNearbyIntF(sp158.y); + vtx[0].v.ob[2] = Math_FNearbyIntF(sp158.z); vtx[0].v.cn[0] = sp148.r; vtx[0].v.cn[1] = sp148.g; vtx[0].v.cn[2] = sp148.b; vtx[0].v.cn[3] = sp148.a; - vtx[1].v.ob[0] = func_80086814(sp14C.x); - vtx[1].v.ob[1] = func_80086814(sp14C.y); - vtx[1].v.ob[2] = func_80086814(sp14C.z); + vtx[1].v.ob[0] = Math_FNearbyIntF(sp14C.x); + vtx[1].v.ob[1] = Math_FNearbyIntF(sp14C.y); + vtx[1].v.ob[2] = Math_FNearbyIntF(sp14C.z); vtx[1].v.cn[0] = sp144.r; vtx[1].v.cn[1] = sp144.g; vtx[1].v.cn[2] = sp144.b; @@ -606,17 +606,17 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem vtx[j1].v = baseVtx; vtx[j2].v = baseVtx; - vtx[j1].v.ob[0] = func_80086814(sp158.x); - vtx[j1].v.ob[1] = func_80086814(sp158.y); - vtx[j1].v.ob[2] = func_80086814(sp158.z); + vtx[j1].v.ob[0] = Math_FNearbyIntF(sp158.x); + vtx[j1].v.ob[1] = Math_FNearbyIntF(sp158.y); + vtx[j1].v.ob[2] = Math_FNearbyIntF(sp158.z); vtx[j1].v.cn[0] = func_800B0A24(sp1A4.r, sp19C.r, temp_f28); vtx[j1].v.cn[1] = func_800B0A24(sp1A4.g, sp19C.g, temp_f28); vtx[j1].v.cn[2] = func_800B0A24(sp1A4.b, sp19C.b, temp_f28); vtx[j1].v.cn[3] = func_800B0A24(sp1A4.a, sp19C.a, temp_f28); - vtx[j2].v.ob[0] = func_80086814(sp14C.x); - vtx[j2].v.ob[1] = func_80086814(sp14C.y); - vtx[j2].v.ob[2] = func_80086814(sp14C.z); + vtx[j2].v.ob[0] = Math_FNearbyIntF(sp14C.x); + vtx[j2].v.ob[1] = Math_FNearbyIntF(sp14C.y); + vtx[j2].v.ob[2] = Math_FNearbyIntF(sp14C.z); vtx[j2].v.cn[0] = func_800B0A24(sp1A0.r, sp198.r, temp_f28); vtx[j2].v.cn[1] = func_800B0A24(sp1A0.g, sp198.g, temp_f28); vtx[j2].v.cn[2] = func_800B0A24(sp1A0.b, sp198.b, temp_f28); diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 7b9e2ca34..886c3c942 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -127,7 +127,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) { break; case ITEM00_RECOVERY_HEART: - this->actor.home.rot.z = randPlusMinusPoint5Scaled(0xFFFF); + this->actor.home.rot.z = Rand_CenteredFloat(0xFFFF); shadowOffset = 430.0f; Actor_SetScale(&this->actor, 0.02f); this->unk154 = 0.02f; @@ -381,9 +381,9 @@ void func_800A6650(EnItem00* this, PlayState* play) { } if ((play->gameplayFrames & 1) != 0) { - pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(10.0f); - pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(10.0f); - pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(10.0f); + pos.x = this->actor.world.pos.x + Rand_CenteredFloat(10.0f); + pos.y = this->actor.world.pos.y + Rand_CenteredFloat(10.0f); + pos.z = this->actor.world.pos.z + Rand_CenteredFloat(10.0f); EffectSsKirakira_SpawnSmall(play, &pos, &sEffectVelocity, &sEffectAccel, &sEffectPrimColor, &sEffectEnvColor); } @@ -956,7 +956,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) { } spawnedActor->speed = 2.0f; spawnedActor->gravity = -0.9f; - spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000); + spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000); Actor_SetScale(spawnedActor, 0.0f); ((EnItem00*)spawnedActor)->actionFunc = func_800A6780; ((EnItem00*)spawnedActor)->unk152 = 0xDC; @@ -1011,7 +1011,7 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) { } else { spawnedActor->gravity = -0.9f; } - spawnedActor->world.rot.y = randPlusMinusPoint5Scaled(0x10000); + spawnedActor->world.rot.y = Rand_CenteredFloat(0x10000); spawnedActor->flags |= 0x10; } } diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 136918765..f3e67e5f3 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -348,9 +348,9 @@ void Math_Vec3f_SumScaled(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest) { } void Math_Vec3f_AddRand(Vec3f* orig, f32 scale, Vec3f* dest) { - dest->x = randPlusMinusPoint5Scaled(scale) + orig->x; - dest->y = randPlusMinusPoint5Scaled(scale) + orig->y; - dest->z = randPlusMinusPoint5Scaled(scale) + orig->z; + dest->x = Rand_CenteredFloat(scale) + orig->x; + dest->y = Rand_CenteredFloat(scale) + orig->y; + dest->z = Rand_CenteredFloat(scale) + orig->z; } void Math_Vec3f_DistXYZAndStoreNormDiff(Vec3f* a, Vec3f* b, f32 scale, Vec3f* dest) { diff --git a/src/code/z_olib.c b/src/code/z_olib.c index 754857014..848a48a72 100644 --- a/src/code/z_olib.c +++ b/src/code/z_olib.c @@ -123,14 +123,14 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) { if ((distXZ == 0.0f) && (vec->y == 0.0f)) { sph.pitch = 0; } else { - sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(distXZ, vec->y))); + sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(distXZ, vec->y))); } sph.r = sqrtf(SQ(vec->y) + distXZSq); if ((vec->x == 0.0f) && (vec->z == 0.0f)) { sph.yaw = 0; } else { - sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(vec->x, vec->z))); + sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(Math_FAtan2F(vec->x, vec->z))); } *dest = sph; @@ -202,8 +202,8 @@ Vec3f* OLib_AddVecGeoToVec3f(Vec3f* dest, Vec3f* a, VecGeo* geo) { Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b) { Vec3f anglesRad; - anglesRad.x = func_80086B30(b->z - a->z, b->y - a->y); - anglesRad.y = func_80086B30(b->x - a->x, b->z - a->z); + anglesRad.x = Math_FAtan2F(b->z - a->z, b->y - a->y); + anglesRad.y = Math_FAtan2F(b->x - a->x, b->z - a->z); anglesRad.z = 0; *dest = anglesRad; diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 2c0a79d21..2e2d2222d 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1540,10 +1540,8 @@ void Player_UpdateBunnyEars(Player* player) { sBunnyEarKinematics.angVel.y += -sBunnyEarKinematics.rot.y >> 2; angle = player->actor.world.rot.y - player->actor.shape.rot.y; - force.x = - (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF; - force.y = - (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF; + force.x = (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (Rand_CenteredFloat(2.0f) + 10.0f)) & 0xFFFF; + force.y = (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (Rand_CenteredFloat(2.0f) + 10.0f)) & 0xFFFF; sBunnyEarKinematics.angVel.x += force.x >> 2; sBunnyEarKinematics.angVel.y += force.y >> 2; @@ -1801,7 +1799,7 @@ void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnim temp_f20 = sp74 - SQ(sp58); temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20); - sp4C = func_80086B30(temp_f20, sp58); + sp4C = Math_FAtan2F(temp_f20, sp58); distance = sqrtf(SQ(diffX) + SQ(yIntersect - sp90.y) + SQ(diffZ)); sp58 = (SQ(distance) + sp70) / (2.0f * distance); sp54 = distance - sp58; @@ -1809,8 +1807,8 @@ void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnim temp_f20 = sp74 - SQ(sp58); temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20); - sp48 = func_80086B30(temp_f20, sp58); - phi_t1 = (M_PI - (func_80086B30(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI); + sp48 = Math_FAtan2F(temp_f20, sp58); + phi_t1 = (M_PI - (Math_FAtan2F(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI); phi_t1 = -skelAnime->jointTable[shinLimbIndex].z + phi_t1; temp_f8 = (sp48 - sp4C) * (0x8000 / M_PI); diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 35886da18..90d09a4b1 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -577,7 +577,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) { diffZ = points[index + 1].z - points[index - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((px * actor->world.pos.x) + (pz * actor->world.pos.z) + d) > 0.0f) { reached = true; } diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c index 2c9919728..f47bf4394 100644 --- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c +++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c @@ -64,10 +64,11 @@ void func_808D75F0(BgF40Flift* this, PlayState* play) { } this->timer--; if (this->dyna.actor.params == 1) { - this->dyna.actor.world.pos.y = (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f) + this->dyna.actor.home.pos.y; + this->dyna.actor.world.pos.y = + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f) + this->dyna.actor.home.pos.y; } else { this->dyna.actor.world.pos.y = - (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f) + (926.8f + this->dyna.actor.home.pos.y); + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f) + (926.8f + this->dyna.actor.home.pos.y); } } } @@ -76,7 +77,7 @@ void func_808D7714(BgF40Flift* this, PlayState* play) { if (this->timer != 0) { this->timer--; this->dyna.actor.world.pos.y = - (((cos_rad(this->timer * (M_PI / 96.0f)) * this->dyna.actor.params) + 1.0f) * 463.4f) + + (((Math_CosF(this->timer * (M_PI / 96.0f)) * this->dyna.actor.params) + 1.0f) * 463.4f) + this->dyna.actor.home.pos.y; } else { this->dyna.actor.params = -this->dyna.actor.params; diff --git a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c index bf6244efe..039d20f3c 100644 --- a/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c +++ b/src/overlays/actors/ovl_Bg_F40_Swlift/z_bg_f40_swlift.c @@ -105,7 +105,7 @@ void BgF40Swlift_Update(Actor* thisx, PlayState* play2) { } this->timer--; this->dyna.actor.world.pos.y = - sHeights[this->dyna.actor.params] + (sin_rad(this->timer * (M_PI / 24.0f)) * 5.0f); + sHeights[this->dyna.actor.params] + (Math_SinF(this->timer * (M_PI / 24.0f)) * 5.0f); } } diff --git a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c index 15a677c29..50e99c1aa 100644 --- a/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c +++ b/src/overlays/actors/ovl_Bg_Icefloe/z_bg_icefloe.c @@ -96,8 +96,8 @@ void BgIcefloe_Grow(BgIcefloe* this, PlayState* play) { Vec3f velocity; Vec3f position; - velocity.x = randPlusMinusPoint5Scaled(6.0f); - velocity.z = randPlusMinusPoint5Scaled(6.0f); + velocity.x = Rand_CenteredFloat(6.0f); + velocity.z = Rand_CenteredFloat(6.0f); velocity.y = Rand_ZeroFloat(4.0f) + 4.0f; this->dyna.actor.scale.x += (0.65f * 0.01f); this->dyna.actor.scale.z += (0.65f * 0.01f); @@ -127,7 +127,7 @@ void func_80AC4C34(BgIcefloe* this, PlayState* play) { func_80AC4CF0(this); } else { this->dyna.actor.world.pos.y = - (sin_rad(this->timer * (M_PI / 30.0f)) * 3.0f) + (this->dyna.actor.home.pos.y + 10.0f); + (Math_SinF(this->timer * (M_PI / 30.0f)) * 3.0f) + (this->dyna.actor.home.pos.y + 10.0f); } } @@ -144,8 +144,8 @@ void func_80AC4D2C(BgIcefloe* this, PlayState* play) { Vec3f position; velocity.y = (this->timer - 38) * (1 / 12.0f); - velocity.x = randPlusMinusPoint5Scaled(1.5f) * velocity.y; - velocity.z = randPlusMinusPoint5Scaled(1.5f) * velocity.y; + velocity.x = Rand_CenteredFloat(1.5f) * velocity.y; + velocity.z = Rand_CenteredFloat(1.5f) * velocity.y; velocity.y += 0.8f; position.x = this->dyna.actor.world.pos.x + (2.0f * velocity.x); position.z = this->dyna.actor.world.pos.z + (2.0f * velocity.z); diff --git a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c index 740d807d8..a8eea2641 100644 --- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c +++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c @@ -109,12 +109,12 @@ void BgIcicle_Break(BgIcicle* this, PlayState* play, f32 arg2) { for (i = 0; i < 2; i++) { for (j = 0; j < 10; j++) { - pos.x = this->dyna.actor.world.pos.x + randPlusMinusPoint5Scaled(8.0f); + pos.x = this->dyna.actor.world.pos.x + Rand_CenteredFloat(8.0f); pos.y = this->dyna.actor.world.pos.y + (Rand_ZeroOne() * arg2) + (i * arg2); - pos.z = this->dyna.actor.world.pos.z + randPlusMinusPoint5Scaled(8.0f); + pos.z = this->dyna.actor.world.pos.z + Rand_CenteredFloat(8.0f); - velocity.x = randPlusMinusPoint5Scaled(7.0f); - velocity.z = randPlusMinusPoint5Scaled(7.0f); + velocity.x = Rand_CenteredFloat(7.0f); + velocity.z = Rand_CenteredFloat(7.0f); velocity.y = (Rand_ZeroOne() * 4.0f) + 8.0f; EffectSsEnIce_Spawn(play, &pos, (Rand_ZeroOne() * 0.2f) + 0.1f, &velocity, &accel, &primColor, &envColor, diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c index fa80cbf90..c11df8af1 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -240,7 +240,7 @@ void func_809CE234(BgSpdweb* this, PlayState* play) { spA8.y = this->dyna.actor.world.pos.y; for (i = 0; i < 6; i++) { - temp_s0 = (s32)randPlusMinusPoint5Scaled(10240.0f) + phi_s2; + temp_s0 = (s32)Rand_CenteredFloat(0x2800) + phi_s2; temp_f24 = Math_SinS(temp_s0); temp_f22 = Math_CosS(temp_s0); @@ -323,7 +323,8 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { this->unk_162--; } - this->dyna.actor.world.pos.y = (sin_rad(this->unk_162 * (M_PI / 6)) * this->unk_164) + this->dyna.actor.home.pos.y; + this->dyna.actor.world.pos.y = + (Math_SinF(this->unk_162 * (M_PI / 6)) * this->unk_164) + this->dyna.actor.home.pos.y; Math_ApproachZeroF(&this->unk_164, 1.0f, 0.8f); if (this->unk_162 == 4) { @@ -388,7 +389,7 @@ void func_809CE830(BgSpdweb* this, PlayState* play) { spC4.z = this->dyna.actor.world.pos.z + 90.0f * sinQ * cosF1; for (i = 0; i < 6; i++) { - temp_s0 = (s32)randPlusMinusPoint5Scaled(0x2800) + temp_s3; + temp_s0 = (s32)Rand_CenteredFloat(0x2800) + temp_s3; sinF2 = Math_SinS(temp_s0); cosF2 = Math_CosS(temp_s0); diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index 7220b5d06..5b19594fb 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -485,9 +485,9 @@ void Boss02_SpawnEffectSand(TwinmoldEffect* effects, Vec3f* pos, f32 scale) { if (effects->type == TWINMOLD_EFFECT_NONE) { effects->type = TWINMOLD_EFFECT_SAND; effects->pos = *pos; - effects->velocity.x = randPlusMinusPoint5Scaled(30.0f); + effects->velocity.x = Rand_CenteredFloat(30.0f); effects->velocity.y = Rand_ZeroFloat(7.0f) + 7.0f; - effects->velocity.z = randPlusMinusPoint5Scaled(30.0f); + effects->velocity.z = Rand_CenteredFloat(30.0f); effects->accel.y = -0.3f; effects->scale = scale; effects->alpha = 255; @@ -507,9 +507,9 @@ void Boss02_SpawnEffectFragment(TwinmoldEffect* effects, Vec3f* pos) { effects->type = TWINMOLD_EFFECT_FRAGMENT; effects->pos = *pos; effects->timer = Rand_ZeroFloat(20.0f); - effects->velocity.x = randPlusMinusPoint5Scaled(50.0f); - effects->velocity.y = randPlusMinusPoint5Scaled(50.0f); - effects->velocity.z = randPlusMinusPoint5Scaled(50.0f); + effects->velocity.x = Rand_CenteredFloat(50.0f); + effects->velocity.y = Rand_CenteredFloat(50.0f); + effects->velocity.z = Rand_CenteredFloat(50.0f); effects->accel.z = 0.0f; effects->accel.x = 0.0f; effects->accel.y = -1.5f; @@ -774,8 +774,8 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->actor.world.pos.z = player->actor.world.pos.z; this->actor.world.pos.y = player->actor.world.pos.y - (600.0f * D_809DF5B0); } else { - this->actor.world.pos.x = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0); - this->actor.world.pos.z = randPlusMinusPoint5Scaled(5000.0f * D_809DF5B0); + this->actor.world.pos.x = Rand_CenteredFloat(5000.0f * D_809DF5B0); + this->actor.world.pos.z = Rand_CenteredFloat(5000.0f * D_809DF5B0); this->actor.world.pos.y = -500.0f * D_809DF5B0; if (sIsInGiantMode) { this->actor.world.pos.y += 3150.0f; @@ -802,8 +802,8 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_0146[0] = 150; } else { this->unk_0144 = 2; - this->unk_01B0.x = randPlusMinusPoint5Scaled(3000.0f * D_809DF5B0); - this->unk_01B0.z = randPlusMinusPoint5Scaled(3000.0f * D_809DF5B0); + this->unk_01B0.x = Rand_CenteredFloat(3000.0f * D_809DF5B0); + this->unk_01B0.z = Rand_CenteredFloat(3000.0f * D_809DF5B0); if ((fabsf(this->unk_01B0.x) < (500.0f * D_809DF5B0)) && (fabsf(this->unk_01B0.z) < (500.0f * D_809DF5B0))) { this->unk_01B0.x = 500.0f; @@ -847,12 +847,12 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_01B0.z = player->actor.world.pos.z; if (this->unk_0146[0] == 0) { this->unk_0144 = 3; - this->unk_01B0.x = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.x; + this->unk_01B0.x = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.x; this->unk_01B0.y = -3000.0f * D_809DF5B0; if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } - this->unk_01B0.z = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + this->actor.world.pos.z; + this->unk_01B0.z = Rand_CenteredFloat(500.0f * D_809DF5B0) + this->actor.world.pos.z; this->unk_0146[0] = 150; this->unk_0164 = 0.0f; } @@ -917,7 +917,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { Matrix_MultVecZ(1500.0f * D_809DF5B0, &spA4); this->unk_0146[0] = 50; this->unk_01B0.x = player->actor.world.pos.x + spA4.x; - this->unk_01B0.y = randPlusMinusPoint5Scaled(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0); + this->unk_01B0.y = Rand_CenteredFloat(500.0f * D_809DF5B0) + (600.0f * D_809DF5B0); if (sIsInGiantMode) { this->unk_01B0.y += 3150.0f; } @@ -963,7 +963,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->actor.gravity = -1.0f * D_809DF5B0; this->actor.velocity.y = 0.0f; this->actor.terminalVelocity = -1000.0f * D_809DF5B0; - this->unk_0164 = randPlusMinusPoint5Scaled(0.05f); + this->unk_0164 = Rand_CenteredFloat(0.05f); spCC = player->actor.world.pos.x - this->actor.world.pos.x; spC4 = player->actor.world.pos.z - this->actor.world.pos.z; @@ -1205,16 +1205,16 @@ void Boss02_Twinmold_Update(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EN_INBOSS_SAND_OLD - SFX_FLAG); if (this->unk_0144 > 20) { - sp3C.x = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.x; - sp3C.y = randPlusMinusPoint5Scaled(50.0f * D_809DF5B0) + this->unk_0170.y; - sp3C.z = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.z; + sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x; + sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y; + sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z; Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f); } if ((this->unk_014C % 2) == 0) { - sp3C.x = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.x; - sp3C.y = randPlusMinusPoint5Scaled(50.0f * D_809DF5B0) + this->unk_0170.y; - sp3C.z = randPlusMinusPoint5Scaled(100.0f * D_809DF5B0) + this->unk_0170.z; + sp3C.x = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.x; + sp3C.y = Rand_CenteredFloat(50.0f * D_809DF5B0) + this->unk_0170.y; + sp3C.z = Rand_CenteredFloat(100.0f * D_809DF5B0) + this->unk_0170.z; Boss02_SpawnEffectSand(play->specialEffects, &sp3C, Rand_ZeroFloat(3.0f) + 6.0f); } } diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index ddd9d4830..d44c961e9 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -162,8 +162,8 @@ void Boss03_SpawnEffectDroplet(PlayState* play, Vec3f* pos) { eff->unk_34.y = 0.0f; eff->unk_34.z = Rand_ZeroFloat(2 * M_PI); eff->unk_02 = Rand_ZeroFloat(100.0f); - eff->velocity.x = randPlusMinusPoint5Scaled(25.0f); - eff->velocity.z = randPlusMinusPoint5Scaled(25.0f); + eff->velocity.x = Rand_CenteredFloat(25.0f); + eff->velocity.z = Rand_CenteredFloat(25.0f); return; } @@ -425,17 +425,17 @@ void Boss03_SpawnDust(Boss03* this, PlayState* play) { Vec3f accel; for (i = 0; i < 5; i++) { - velocity.x = randPlusMinusPoint5Scaled(10.0f); + velocity.x = Rand_CenteredFloat(10.0f); velocity.y = Rand_ZeroFloat(2.0f) + 2.0f; - velocity.z = randPlusMinusPoint5Scaled(10.0f); + velocity.z = Rand_CenteredFloat(10.0f); accel.y = -0.075f; accel.z = 0.0f; accel.x = 0.0f; pos.y = Rand_ZeroFloat(20.0f) + 5.0f; - pos.z = randPlusMinusPoint5Scaled(150.0f) + this->insideJawPos.z; - pos.x = randPlusMinusPoint5Scaled(150.0f) + this->insideJawPos.x; + pos.z = Rand_CenteredFloat(150.0f) + this->insideJawPos.z; + pos.x = Rand_CenteredFloat(150.0f) + this->insideJawPos.x; func_800B0EB0(play, &pos, &velocity, &accel, &sGyorgDustPrimColor, &sGyorgDustEnvColor, Rand_ZeroFloat(200.0f) + 400.0f, 10, Rand_ZeroFloat(10.0f) + 25.0f); @@ -597,9 +597,9 @@ void func_809E34B8(Boss03* this, PlayState* play) { if (this->workTimer[WORK_TIMER_UNK2_A] == 0) { if ((sqrtf(SQ(xDiff) + SQ(zDiff)) < 100.0f) || (this->workTimer[WORK_TIMER_UNK0_A] == 0)) { for (i = 0; i < 200; i++) { - this->unk_268.x = randPlusMinusPoint5Scaled(2500.0f); + this->unk_268.x = Rand_CenteredFloat(2500.0f); this->unk_268.y = Rand_ZeroFloat(100.0f) + 150.0f; - this->unk_268.z = randPlusMinusPoint5Scaled(2500.0f); + this->unk_268.z = Rand_CenteredFloat(2500.0f); xDiff = this->unk_268.x - this->actor.world.pos.x; zDiff = this->unk_268.z - this->actor.world.pos.z; @@ -1100,9 +1100,9 @@ void Boss03_JumpOverPlatform(Boss03* this, PlayState* play) { Vec3f sp30; for (i = 0; i < 3; i++) { - sp30.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(150.0f); + sp30.x = this->actor.world.pos.x + Rand_CenteredFloat(150.0f); sp30.y = this->actor.world.pos.y; - sp30.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(150.0f); + sp30.z = this->actor.world.pos.z + Rand_CenteredFloat(150.0f); Boss03_SpawnEffectDroplet(play, &sp30); } } @@ -1337,9 +1337,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { if (1) {} for (i = 0; i < 3; i++) { - effectPos.x = randPlusMinusPoint5Scaled(150.0f) + this->actor.world.pos.x; + effectPos.x = Rand_CenteredFloat(150.0f) + this->actor.world.pos.x; effectPos.y = this->actor.world.pos.y; - effectPos.z = randPlusMinusPoint5Scaled(150.0f) + this->actor.world.pos.z; + effectPos.z = Rand_CenteredFloat(150.0f) + this->actor.world.pos.z; Boss03_SpawnEffectDroplet(play, &effectPos); } @@ -1399,9 +1399,9 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) { this->subCamEye = this->actor.world.pos; for (i = 0; i < bubblesToSpawnNum; i++) { - effectPos.x = randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.x; - effectPos.y = (randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.y) - 150.0f; - effectPos.z = randPlusMinusPoint5Scaled(100.0f) + this->subCamAt.z; + effectPos.x = Rand_CenteredFloat(100.0f) + this->subCamAt.x; + effectPos.y = (Rand_CenteredFloat(100.0f) + this->subCamAt.y) - 150.0f; + effectPos.z = Rand_CenteredFloat(100.0f) + this->subCamAt.z; Boss03_SpawnEffectBubble(play, &effectPos); } @@ -1573,17 +1573,15 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { this->actor.speed = ((Rand_ZeroFloat(5.0f) + 2.5f) * sp64) + 2.5f; if (Rand_ZeroOne() < 0.5f) { - this->shapeRotTargetX = - ((s16)randPlusMinusPoint5Scaled(500.0f) + this->shapeRotTargetX) + 0x8000; + this->shapeRotTargetX = ((s16)(s32)Rand_CenteredFloat(0x1F4) + this->shapeRotTargetX) + 0x8000; } if (Rand_ZeroOne() < 0.5f) { - this->shapeRotTargetZ = - ((s16)randPlusMinusPoint5Scaled(500.0f) + this->shapeRotTargetZ) + 0x8000; + this->shapeRotTargetZ = ((s16)(s32)Rand_CenteredFloat(0x1F4) + this->shapeRotTargetZ) + 0x8000; } if (Rand_ZeroOne() < 0.5f) { - this->shapeRotTargetY = Rand_ZeroFloat(65536.0f); + this->shapeRotTargetY = Rand_ZeroFloat(0x10000); } this->actor.world.rot.y = Math_Atan2S_XY(-this->actor.world.pos.z, -this->actor.world.pos.x); @@ -1600,9 +1598,9 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) { sp4C = 150.0f * sp64; for (i = 0; i < 1; i++) { - sp78.x = randPlusMinusPoint5Scaled(sp4C) + this->actor.world.pos.x; + sp78.x = Rand_CenteredFloat(sp4C) + this->actor.world.pos.x; sp78.y = this->actor.world.pos.y; - sp78.z = randPlusMinusPoint5Scaled(sp4C) + this->actor.world.pos.z; + sp78.z = Rand_CenteredFloat(sp4C) + this->actor.world.pos.z; Boss03_SpawnEffectDroplet(play, &sp78); } @@ -2073,9 +2071,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { if ((this->unk_240 % 2) == 0) { for (i = 0; i < this->bubbleEffectSpawnCount; i++) { - bubblePos.x = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.x; - bubblePos.y = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.y; - bubblePos.z = randPlusMinusPoint5Scaled(100.0f) + this->actor.world.pos.z; + bubblePos.x = Rand_CenteredFloat(100.0f) + this->actor.world.pos.x; + bubblePos.y = Rand_CenteredFloat(100.0f) + this->actor.world.pos.y; + bubblePos.z = Rand_CenteredFloat(100.0f) + this->actor.world.pos.z; Boss03_SpawnEffectBubble(play, &bubblePos); } @@ -2106,9 +2104,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { if (this->wetSpotEffectSpawnCount != 0) { this->wetSpotEffectSpawnCount--; - wetSpotPos.x = randPlusMinusPoint5Scaled(50.0f) + player->actor.world.pos.x; + wetSpotPos.x = Rand_CenteredFloat(50.0f) + player->actor.world.pos.x; wetSpotPos.y = PLATFORM_HEIGHT; - wetSpotPos.z = randPlusMinusPoint5Scaled(50.0f) + player->actor.world.pos.z; + wetSpotPos.z = Rand_CenteredFloat(50.0f) + player->actor.world.pos.z; Boss03_SpawnEffectWetSpot(play, &wetSpotPos); } } @@ -2131,9 +2129,9 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { for (j = 0, i = 0; i < 20; j++) { Matrix_RotateYF(yRot, MTXMODE_NEW); Matrix_MultVecZ(Rand_ZeroFloat(60.000004f) + 312.0f, &dropletPos); - dropletPos.x += this->unk_284 + randPlusMinusPoint5Scaled(40.0f); + dropletPos.x += this->unk_284 + Rand_CenteredFloat(40.0f); dropletPos.y = PLATFORM_HEIGHT; - dropletPos.z += this->unk_28C + randPlusMinusPoint5Scaled(40.0f); + dropletPos.z += this->unk_28C + Rand_CenteredFloat(40.0f); if (sqrtf(SQ(dropletPos.x) + SQ(dropletPos.z)) < 355.0f) { Boss03_SpawnEffectDroplet(play, &dropletPos); diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c index bf250ca18..4e22822a4 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -439,8 +439,8 @@ void func_809ECD18(Boss04* this, PlayState* play) { if (Rand_ZeroOne() < 0.1f) { Math_Vec3f_Copy(&this->unk_6C8, &player->actor.world.pos); } else { - this->unk_6C8.x = randPlusMinusPoint5Scaled(600.0f) + this->unk_6E8; - this->unk_6C8.z = randPlusMinusPoint5Scaled(600.0f) + this->unk_6F0; + this->unk_6C8.x = Rand_CenteredFloat(600.0f) + this->unk_6E8; + this->unk_6C8.z = Rand_CenteredFloat(600.0f) + this->unk_6F0; } } diff --git a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c index ef73ef2dd..742b3bb70 100644 --- a/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c +++ b/src/overlays/actors/ovl_Eff_Dust/z_eff_dust.c @@ -110,7 +110,7 @@ void EffDust_Destroy(Actor* thisx, PlayState* play) { void func_80918D64(EffDust* this, PlayState* play) { s16 theta; - s16 fi; + s16 phi; s32 i; s32 j; f32* distanceTraveled = this->distanceTraveled; @@ -127,10 +127,10 @@ void func_80918D64(EffDust* this, PlayState* play) { i = this->index & 0x3F; if (this->distanceTraveled[i] >= 1.0f) { // Spherical coordinate system. - fi = randPlusMinusPoint5Scaled(0x10000); + phi = Rand_CenteredFloat(0x10000); theta = Rand_ZeroFloat(0x1000); - this->initialPositions[i].x = -(f32)this->actor.home.rot.z * Math_CosS(fi) * Math_CosS(theta); - this->initialPositions[i].y = -(f32)this->actor.home.rot.z * Math_SinS(fi) * Math_CosS(theta); + this->initialPositions[i].x = -(f32)this->actor.home.rot.z * Math_CosS(phi) * Math_CosS(theta); + this->initialPositions[i].y = -(f32)this->actor.home.rot.z * Math_SinS(phi) * Math_CosS(theta); this->initialPositions[i].z = -(f32)this->actor.home.rot.z * Math_SinS(theta); this->distanceTraveled[i] = 0.0f; this->index++; @@ -141,7 +141,7 @@ void func_80918D64(EffDust* this, PlayState* play) { void func_80918FE4(EffDust* this, PlayState* play) { s16 theta; - s16 fi; + s16 phi; f32* distanceTraveled = this->distanceTraveled; s32 i; s32 j; @@ -157,11 +157,11 @@ void func_80918FE4(EffDust* this, PlayState* play) { i = this->index & 0x3F; if (this->distanceTraveled[i] >= 1.0f) { // Spherical coordinate system. - fi = randPlusMinusPoint5Scaled(0x10000); + phi = Rand_CenteredFloat(0x10000); theta = Rand_ZeroFloat(0x2000); - this->initialPositions[i].x = 400.0f * Math_CosS(fi) * Math_CosS(theta); + this->initialPositions[i].x = 400.0f * Math_CosS(phi) * Math_CosS(theta); this->initialPositions[i].y = 400.0f * Math_SinS(theta); - this->initialPositions[i].z = 400.0f * Math_SinS(fi) * Math_CosS(theta); + this->initialPositions[i].z = 400.0f * Math_SinS(phi) * Math_CosS(theta); this->distanceTraveled[i] = 0.0f; this->index++; } @@ -206,7 +206,7 @@ void func_80919230(EffDust* this, PlayState* play) { i = this->index & 0x3F; if (this->distanceTraveled[i] >= 1.0f) { - theta = randPlusMinusPoint5Scaled(0x10000); + theta = Rand_CenteredFloat(0x10000); switch (this->actor.params) { case EFF_DUST_TYPE_SPIN_ATTACK_CHARGE: this->initialPositions[i].x = (Rand_ZeroOne() * 4500.0f) + 700.0f; diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 5fcf75fdf..6e56cc609 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -179,7 +179,7 @@ s32 func_80BECD10(EnAkindonuts* this, Path* path, s32 arg2) { phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; } diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c index b6d32f6ec..7d1f1e140 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -193,9 +193,9 @@ void EnAm_SpawnEffects(EnAm* this, PlayState* play) { // Dust Clouds that spawn from the hop for (i = 4; i > 0; i--) { - effectPos.x = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.x; - effectPos.y = randPlusMinusPoint5Scaled(10.0f) + (this->actor.world.pos.y + 40.0f); - effectPos.z = randPlusMinusPoint5Scaled(65.0f) + this->actor.world.pos.z; + effectPos.x = Rand_CenteredFloat(65.0f) + this->actor.world.pos.x; + effectPos.y = Rand_CenteredFloat(10.0f) + (this->actor.world.pos.y + 40.0f); + effectPos.z = Rand_CenteredFloat(65.0f) + this->actor.world.pos.z; EffectSsKirakira_SpawnSmall(play, &effectPos, &sVelocity, &sAccel, &D_808B1118, &D_808B111C); } Actor_PlaySfx(&this->actor, NA_SE_EN_AMOS_WALK); @@ -254,7 +254,7 @@ void EnAm_ApplyEnemyTexture(EnAm* this, PlayState* play) { func_808B0358(this); } else { tempTextureBlend = this->textureBlend + 20; - rand = randPlusMinusPoint5Scaled(10.0f); + rand = Rand_CenteredFloat(10.0f); cos = Math_CosS(this->actor.shape.rot.y) * rand; sin = Math_SinS(this->actor.shape.rot.y) * rand; this->actor.world.pos.x = this->actor.home.pos.x + cos; @@ -433,7 +433,7 @@ void func_808B0894(EnAm* this, PlayState* play) { for (i = 0; i < 8; i++) { dustPos.x = (Math_SinS(0) * 7.0f) + this->actor.world.pos.x; - dustPos.y = (randPlusMinusPoint5Scaled(10.0f) * 6.0f) + (this->actor.world.pos.y + 40.0f); + dustPos.y = (Rand_CenteredFloat(10.0f) * 6.0f) + (this->actor.world.pos.y + 40.0f); dustPos.z = (Math_CosS(0) * 7.0f) + this->actor.world.pos.z; func_800B0EB0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &D_808B1120, &D_808B1124, 200, 45, 12); diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index 5f0ef2edf..e47a726a4 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -336,7 +336,7 @@ void func_8088ACE0(EnArrow* this, PlayState* play) { (this->collider.base.atFlags & AT_BOUNCED)) { if ((this->collider.base.at != NULL) && (this->collider.base.at->id != ACTOR_OBJ_SYOKUDAI)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); - this->actor.world.rot.y += BINANG_ROT180((s16)randPlusMinusPoint5Scaled(8000.0f)); + this->actor.world.rot.y += BINANG_ROT180((s16)(s32)Rand_CenteredFloat(0x1F40)); this->actor.velocity.y = -this->actor.velocity.y; this->bubble.unk_149 = -1; return; diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c index 8c2b4eb4b..e8b74f8ec 100644 --- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c +++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c @@ -54,9 +54,9 @@ void EnAttackNiw_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->actor.gravity = 0.0f; - this->randomTargetCenterOffset.x = randPlusMinusPoint5Scaled(100.0f); - this->randomTargetCenterOffset.y = randPlusMinusPoint5Scaled(10.0f); - this->randomTargetCenterOffset.z = randPlusMinusPoint5Scaled(100.0f); + this->randomTargetCenterOffset.x = Rand_CenteredFloat(100.0f); + this->randomTargetCenterOffset.y = Rand_CenteredFloat(10.0f); + this->randomTargetCenterOffset.z = Rand_CenteredFloat(100.0f); Actor_SetScale(&this->actor, 0.01f); this->actor.flags &= ~ACTOR_FLAG_1; // Unnecessary: this actor does not start with this flag @@ -311,7 +311,7 @@ void EnAttackNiw_AimAtPlayer(EnAttackNiw* this, PlayState* play) { } if (this->randomAngleChangeTimer == 50) { - this->targetRotY = randPlusMinusPoint5Scaled(200.0f) + this->actor.yawTowardsPlayer; + this->targetRotY = Rand_CenteredFloat(200.0f) + this->actor.yawTowardsPlayer; } Math_SmoothStepToS(&this->actor.world.rot.y, this->targetRotY, 2, this->rotStep, 0); diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c index 4ea6bc475..406270ff8 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -449,9 +449,9 @@ void EnBaguo_InitializeEffect(EnBaguo* this, Vec3f* pos, Vec3f* velocity, Vec3f* effect->accel = *accel; effect->scale = scale; effect->timer = timer; - effect->rotation.x = (s16)randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.y = (s16)randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.z = (s16)randPlusMinusPoint5Scaled(30000.0f); + effect->rotation.x = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rotation.y = (s16)(s32)Rand_CenteredFloat(0x7530); + effect->rotation.z = (s16)(s32)Rand_CenteredFloat(0x7530); return; } } diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.c b/src/overlays/actors/ovl_En_Bat/z_en_bat.c index 549a2c4bd..acb47b743 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -161,11 +161,10 @@ void EnBat_Init(Actor* thisx, PlayState* play) { EnBat_SetupFlyIdle(this); while (BAD_BAT_GET_NUMBER_TO_SPAWN(thisx) > 1) { Actor_SpawnAsChildAndCutscene( - &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + randPlusMinusPoint5Scaled(200.0f), - thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f), - thisx->world.pos.z + randPlusMinusPoint5Scaled(200.0f), randPlusMinusPoint5Scaled(0x2000), - 0xFFFF * Rand_ZeroOne(), 0, BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE, - thisx->halfDaysBits, NULL); + &play->actorCtx, play, ACTOR_EN_BAT, thisx->world.pos.x + Rand_CenteredFloat(200.0f), + thisx->world.pos.y + Rand_CenteredFloat(100.0f), thisx->world.pos.z + Rand_CenteredFloat(200.0f), + Rand_CenteredFloat(0x2000), 0xFFFF * Rand_ZeroOne(), 0, + BAD_BAT_PARAMS(this->switchFlag, this->paramFlags, 0), CS_ID_NONE, thisx->halfDaysBits, NULL); BAD_BAT_GET_NUMBER_TO_SPAWN(thisx)--; } } diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c index 9fabcecc0..d52f12ccf 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -340,7 +340,7 @@ void EnBbfall_Fly(EnBbfall* this, PlayState* play) { // Bounce upwards off the ground this->actor.velocity.y *= -1.2f; this->actor.velocity.y = CLAMP(this->actor.velocity.y, 8.0f, 12.0f); - this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(73728.0f); + this->actor.shape.rot.y += (s16)(s32)Rand_CenteredFloat(0x12000); } this->actor.bgCheckFlags &= ~BGCHECKFLAG_GROUND; diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.c b/src/overlays/actors/ovl_En_Bee/z_en_bee.c index c03cc005d..1c2d1ed0f 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -158,9 +158,9 @@ void EnBee_FlyIdle(EnBee* this, PlayState* play) { nextPos.z += Math_CosS(this->targetYaw) * 30.0f; if ((this->instanceId % 2) == 0) { - this->targetYaw += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000); + this->targetYaw += (s16)((s32)Rand_CenteredFloat(1000.0f) + 4000); } else { - this->targetYaw -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000); + this->targetYaw -= (s16)((s32)Rand_CenteredFloat(1000.0f) + 4000); } this->flightHoverOffset += 1000; @@ -197,10 +197,10 @@ void EnBee_Attack(EnBee* this, PlayState* play) { yawOffset = (this->instanceId * 0x700) + 0x2000; for (i = 0; i < 2; i++) { - rand = randPlusMinusPoint5Scaled(20.0f); + rand = Rand_CenteredFloat(20.0f); nextPos.x += Math_SinS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f); nextPos.y = (Math_SinS(this->flightHoverOffset) * 10.0f) + (player->actor.floorHeight + 40.0f); - rand = randPlusMinusPoint5Scaled(20.0f); + rand = Rand_CenteredFloat(20.0f); nextPos.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f); Math_Vec3f_Copy(&this->targetPos[i], &nextPos); @@ -210,14 +210,12 @@ void EnBee_Attack(EnBee* this, PlayState* play) { Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]); if ((this->instanceId % 2) == 0) { - this->targetYaw += - (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f); + this->targetYaw += (this->instanceId * 0x700) + (s32)Rand_CenteredFloat((this->instanceId * 0x700) * 0.5f); } else { - this->targetYaw -= - (this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f); + this->targetYaw -= (this->instanceId * 0x700) + (s32)Rand_CenteredFloat((this->instanceId * 0x700) * 0.5f); } - this->flightHoverOffset += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000; + this->flightHoverOffset += (s32)Rand_CenteredFloat(500.0f) + 1000; if (this->targetYaw > 0x10000) { this->targetYaw = 0; diff --git a/src/overlays/actors/ovl_En_Bh/z_en_bh.c b/src/overlays/actors/ovl_En_Bh/z_en_bh.c index cdd7abee3..6d99ada15 100644 --- a/src/overlays/actors/ovl_En_Bh/z_en_bh.c +++ b/src/overlays/actors/ovl_En_Bh/z_en_bh.c @@ -59,9 +59,9 @@ void func_80C22DEC(EnBh* this, PlayState* play) { xzDist = sqrtf(SQ(xDiff) + SQ(zDiff)); if ((this->timer2 == 0) || (xzDist < 100.0f)) { - this->pos.x = randPlusMinusPoint5Scaled(300.0f) + this->actor.home.pos.x; - this->pos.y = randPlusMinusPoint5Scaled(100.0f) + this->actor.home.pos.y; - this->pos.z = randPlusMinusPoint5Scaled(300.0f) + this->actor.home.pos.z; + this->pos.x = Rand_CenteredFloat(300.0f) + this->actor.home.pos.x; + this->pos.y = Rand_CenteredFloat(100.0f) + this->actor.home.pos.y; + this->pos.z = Rand_CenteredFloat(300.0f) + this->actor.home.pos.z; this->timer2 = Rand_ZeroFloat(50.0f) + 30.0f; this->step = 0; } @@ -85,7 +85,7 @@ void func_80C22DEC(EnBh* this, PlayState* play) { this->skelanime.playSpeed = 1.0f; this->timer = Rand_ZeroFloat(70.0f) + 50.0f; } else if (((this->timer & 7) == 7) && (Rand_ZeroOne() < 0.5f)) { - this->unk1E4 = randPlusMinusPoint5Scaled(3000.0f); + this->unk1E4 = Rand_CenteredFloat(3000.0f); } } else { SkelAnime_Update(&this->skelanime); diff --git a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c index 713410f23..1b849799a 100644 --- a/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c +++ b/src/overlays/actors/ovl_En_Bigokuta/z_en_bigokuta.c @@ -436,9 +436,9 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, PlayState* play) { bubblePos.y = this->picto.actor.world.pos.y; for (i = 0; i < 20; i++) { - bubbleVel.x = randPlusMinusPoint5Scaled(10.0f); + bubbleVel.x = Rand_CenteredFloat(10.0f); bubbleVel.y = Rand_ZeroFloat(5.5f) + 5.5f; - bubbleVel.z = randPlusMinusPoint5Scaled(10.0f); + bubbleVel.z = Rand_CenteredFloat(10.0f); bubblePos.x = this->picto.actor.world.pos.x + (2.0f * bubbleVel.x); bubblePos.z = this->picto.actor.world.pos.z + (2.0f * bubbleVel.z); @@ -604,7 +604,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec MTXMODE_APPLY); } } else if (this->actionFunc == EnBigokuta_SuckInPlayer) { - f32 sin = sin_rad(this->timer * (M_PI / 3.0f)) * 0.5f; + f32 sin = Math_SinF(this->timer * (M_PI / 3.0f)) * 0.5f; Matrix_Scale(((this->timer * (2 / 90.0f)) * (0.5f + sin)) + 1.0f, ((this->timer * (2 / 90.0f)) * (0.5f - sin)) + 1.0f, 1.0f - ((this->timer * 0.3f) / 9.0f), @@ -613,7 +613,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec if (this->timer == 0) { Matrix_Scale(0.9f, 0.9f, 1.15f, MTXMODE_APPLY); } else if (this->timer > 0) { - f32 sin = sin_rad(this->timer * (M_PI / 3.0f)) * 0.5f; + f32 sin = Math_SinF(this->timer * (M_PI / 3.0f)) * 0.5f; Matrix_Scale(((0.5f + sin) * 0.2f) + 1.0f, ((0.5f - sin) * 0.2f) + 1.0f, 0.7f, MTXMODE_APPLY); } else { diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c index a77733d31..3daaf1f85 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -267,7 +267,7 @@ void func_80A27B58(EnBigpamet* this) { this->unk_2A2 = 40; for (ptr = &this->unk_2FC[0], i = 0; i < ARRAY_COUNT(this->unk_2FC); i++, ptr++) { - temp_s1 = (s32)randPlusMinusPoint5Scaled(20480.0f) + this->actor.wallYaw; + temp_s1 = (s32)Rand_CenteredFloat(0x5000) + this->actor.wallYaw; temp_s2 = Rand_S16Offset(0x1000, 0x3000); temp_fs2 = Math_SinS(temp_s2); @@ -342,7 +342,7 @@ void func_80A27FE8(EnBigpamet* this, PlayState* play) { pos.y += 8.0f; if (this->actionFunc != func_80A28D0C) { - sp32 = (s32)randPlusMinusPoint5Scaled(0x8000) + this->actor.world.rot.y; + sp32 = (s32)Rand_CenteredFloat(0x8000) + this->actor.world.rot.y; pos.x -= 55.0f * Math_SinS(sp32); pos.z -= 55.0f * Math_CosS(sp32); } diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index 7c82b50b0..762141ed4 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -554,7 +554,7 @@ void EnBigpo_IdleFlying(EnBigpo* this, PlayState* play) { // flight position calculations this->hoverHeightCycleTimer = (this->hoverHeightCycleTimer == 0) ? 40 : (this->hoverHeightCycleTimer - 1); Math_StepToF(&this->savedHeight, player->actor.world.pos.y + 100.0f, 1.5f); - this->actor.world.pos.y = (sin_rad(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight; + this->actor.world.pos.y = (Math_SinF(this->hoverHeightCycleTimer * (M_PI / 20)) * 10.0f) + this->savedHeight; Math_StepToF(&this->actor.speed, 3.0f, 0.2f); func_800B9010(&this->actor, NA_SE_EN_PO_FLY - SFX_FLAG); if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 300.0f) { @@ -827,7 +827,7 @@ void EnBigpo_ScoopSoulIdle(EnBigpo* this, PlayState* play) { EnBigpo_SetupScoopSoulLeaving(this); } else { Actor_OfferGetItem(&this->actor, play, GI_MAX, 35.0f, 60.0f); - this->actor.world.pos.y = (sin_rad(this->idleTimer * (M_PI / 20)) * 5.0f) + this->savedHeight; + this->actor.world.pos.y = (Math_SinF(this->idleTimer * (M_PI / 20)) * 5.0f) + this->savedHeight; } } diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 1a90fd29b..695ac9153 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -657,7 +657,7 @@ void EnBigslime_AddWavySurface(EnBigslime* this) { randFloat = (Rand_ZeroOne() * 40.0f) + 50.0f; } - this->vtxSurfacePerturbation[i] = sin_rad((randInt + i) * (M_PI / 3)) * randFloat * 0.001f; + this->vtxSurfacePerturbation[i] = Math_SinF((randInt + i) * (M_PI / 3)) * randFloat * 0.001f; } } @@ -673,7 +673,7 @@ void EnBigslime_UpdateWavySurface(EnBigslime* this) { } this->wavySurfaceTimer--; - vtxSurfaceWave = sin_rad(this->wavySurfaceTimer * (M_PI / 12)); + vtxSurfaceWave = Math_SinF(this->wavySurfaceTimer * (M_PI / 12)); for (i = 0; i < BIGSLIME_NUM_VTX; i++) { staticVtx = &sBigslimeStaticVtx[i]; dynamicVtx = &sBigslimeDynamicVtx[this->dynamicVtxState][i]; @@ -692,9 +692,9 @@ void EnBigslime_InitFallMinislime(EnBigslime* this) { for (i = 0; i < MINISLIME_NUM_SPAWN; i++) { minislime = this->minislime[i]; minislime->actor.params = MINISLIME_INIT_FALL; - minislime->actor.world.pos.x = randPlusMinusPoint5Scaled(80.0f) + (GBT_ROOM_5_MIN_X + ((i % 4) + 1) * 192.0f); + minislime->actor.world.pos.x = Rand_CenteredFloat(80.0f) + (GBT_ROOM_5_MIN_X + ((i % 4) + 1) * 192.0f); minislime->actor.world.pos.y = Rand_ZeroFloat(250.0f) + (GBT_ROOM_5_CENTER_Y + 50.0f); - minislime->actor.world.pos.z = randPlusMinusPoint5Scaled(80.0f) + (GBT_ROOM_5_MIN_Z + ((i / 4) + 1) * 192.0f); + minislime->actor.world.pos.z = Rand_CenteredFloat(80.0f) + (GBT_ROOM_5_MIN_Z + ((i / 4) + 1) * 192.0f); } this->minislimeState = MINISLIME_ACTIVE_INIT_STATE; @@ -1169,7 +1169,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) { s32 j; for (i = 0; i < BIGSLIME_NUM_RING_FACES / 2; i++) { - vtxY = (((cos_rad(i * (M_PI / 6)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; + vtxY = (((Math_CosF(i * (M_PI / 6)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1188,7 +1188,7 @@ void EnBigslime_SetTargetVtxToWideCone(EnBigslime* this) { } for (; i < BIGSLIME_NUM_RING_VTX; i++) { - vtxY = ((cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 16)) * 0.05f) + -1.0f) * BIGSLIME_RADIUS_F; + vtxY = ((Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 16)) * 0.05f) + -1.0f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1301,7 +1301,7 @@ void EnBigslime_SetTargetVtxToThinCone(EnBigslime* this) { sBigslimeTargetVtx[0].n.ob[2] = 0; for (i = 1; i < BIGSLIME_NUM_RING_FACES / 2; i++) { - upperSphereCos = (((cos_rad((i - 1) * (M_PI / 5)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; + upperSphereCos = (((Math_CosF((i - 1) * (M_PI / 5)) + 1.0f) * 0.925f) + -0.85f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1318,7 +1318,7 @@ void EnBigslime_SetTargetVtxToThinCone(EnBigslime* this) { } for (; i < BIGSLIME_NUM_RING_FACES; i++) { - lowerSphereCos = cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / BIGSLIME_NUM_RING_FACES)); + lowerSphereCos = Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / BIGSLIME_NUM_RING_FACES)); for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1361,7 +1361,7 @@ void EnBigslime_SetTargetVtxToInverseCone(EnBigslime* this) { sBigslimeTargetVtx[0].n.ob[2] = 0; for (i = 1; i < BIGSLIME_NUM_RING_FACES / 2; i++) { - upperSphereCos = cos_rad((i - 1) * (M_PI / 10)); + upperSphereCos = Math_CosF((i - 1) * (M_PI / 10)); for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1374,7 +1374,7 @@ void EnBigslime_SetTargetVtxToInverseCone(EnBigslime* this) { for (; i < BIGSLIME_NUM_RING_FACES; i++) { lowerSphereCos = - (((cos_rad((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 5)) + 1) * 0.925f) + -1.0f) * BIGSLIME_RADIUS_F; + (((Math_CosF((i - BIGSLIME_NUM_RING_FACES / 2) * (M_PI / 5)) + 1) * 0.925f) + -1.0f) * BIGSLIME_RADIUS_F; for (j = sVtxRingStartIndex[i]; j < sVtxRingStartIndex[i + 1]; j++) { staticVtx = &sBigslimeStaticVtx[j]; targetVtx = &sBigslimeTargetVtx[j]; @@ -1692,7 +1692,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { EnBigslime_UpdateCameraGrabPlayer(this, play); if (this->windupPunchTimer > 0) { invWindupPunchTimer = 1.0f / this->windupPunchTimer; - scale = cos_rad(this->windupPunchTimer * (M_PI / 27)) + 1.0f; + scale = Math_CosF(this->windupPunchTimer * (M_PI / 27)) + 1.0f; player->actor.world.pos.y = this->actor.world.pos.y + (this->actor.scale.y * -500.0f); // Linearly interpolate gekkoRot.y --> this->actor.world.rot.y @@ -1705,7 +1705,7 @@ void EnBigslime_WindupThrowPlayer(EnBigslime* this, PlayState* play) { EnBigslime_GekkoSfxInsideBigslime(this, NA_SE_EN_FROG_PUNCH1); } - scale = 0.5f - cos_rad(-this->windupPunchTimer * (M_PI / 5)) * 0.5f; + scale = 0.5f - Math_CosF(-this->windupPunchTimer * (M_PI / 5)) * 0.5f; if (this->windupPunchTimer == -5) { if (player->stateFlags2 & PLAYER_STATE2_80) { player->actor.parent = NULL; @@ -1879,7 +1879,7 @@ void EnBigslime_Freeze(EnBigslime* this, PlayState* play) { if (vtxIceSeed < BIGSLIME_NUM_VTX) { dynamicVtx = &sBigslimeDynamicVtx[this->dynamicVtxState][vtxIceSeed]; targetVtx = &sBigslimeTargetVtx[vtxIceSeed]; - randFloat = randPlusMinusPoint5Scaled(40.0f); + randFloat = Rand_CenteredFloat(40.0f); dynamicVtx->n.ob[0] += (s16)(randFloat / this->actor.scale.x); dynamicVtx->n.ob[1] += (s16)(randFloat / this->actor.scale.y); dynamicVtx->n.ob[2] += (s16)(randFloat / this->actor.scale.z); @@ -2444,9 +2444,9 @@ void EnBigslime_SetupFrogSpawn(EnBigslime* this, PlayState* play) { func_800B0DE0(play, &dustPos, &gZeroVec3f, &gZeroVec3f, &dustPrimColor, &dustEnvColor, 500, 50); for (i = 0; i < 25; i++) { - hahenVel.x = randPlusMinusPoint5Scaled(5.0f); + hahenVel.x = Rand_CenteredFloat(5.0f); hahenVel.y = Rand_ZeroFloat(3.0f) + 4.0f; - hahenVel.z = randPlusMinusPoint5Scaled(5.0f); + hahenVel.z = Rand_CenteredFloat(5.0f); EffectSsHahen_Spawn(play, worldPos, &hahenVel, &hahenAccel, 0, Rand_S16Offset(12, 3), HAHEN_OBJECT_DEFAULT, 10, 0); } @@ -2464,7 +2464,8 @@ void EnBigslime_FrogSpawn(EnBigslime* this, PlayState* play) { this->spawnFrogTimer--; // Zoom the camera in and out at the newly spawned red frog - subCamZoom = sin_rad(this->spawnFrogTimer * (M_PI / 5)) * ((0.04f * (this->spawnFrogTimer * 0.1f)) + 0.02f) + 1.0f; + subCamZoom = + Math_SinF(this->spawnFrogTimer * (M_PI / 5)) * ((0.04f * (this->spawnFrogTimer * 0.1f)) + 0.02f) + 1.0f; subCamEye.x = subCam->at.x + (this->subCamDistToFrog.x * subCamZoom); subCamEye.z = subCam->at.z + (this->subCamDistToFrog.z * subCamZoom); subCamEye.y = subCam->at.y + (this->subCamDistToFrog.y * subCamZoom); diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h index f10938b37..8f2b5bee3 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.h @@ -87,7 +87,7 @@ typedef struct EnBigslime { s16 isDespawned; s16 isInitJump; }; - /* 0x02BC */ s16 wavySurfaceTimer; // decrements from 24, used in sin_rad for currData2 + /* 0x02BC */ s16 wavySurfaceTimer; // decrements from 24, used in Math_SinF for currData2 /* 0x02BE */ s16 stunTimer; /* 0x02C0 */ union { s16 freezeTimer; diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index 4355759c7..ee00081db 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -120,7 +120,7 @@ s32 EnBomChu_UpdateFloorPoly(EnBomChu* this, CollisionPoly* floorPoly, PlayState return false; } - angle = func_80086C48(normDotUp); + angle = Math_FAcosF(normDotUp); if (angle < 0.001f) { return false; } diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index 86cad7219..55f7ff281 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -236,8 +236,8 @@ void func_80C03AF4(EnBombers* this, PlayState* play) { if (this->unk_2A8 == 0) { Math_Vec3f_Copy(&sp60, &this->actor.home.pos); - sp60.x += randPlusMinusPoint5Scaled(150.0f); - sp60.z += randPlusMinusPoint5Scaled(150.0f); + sp60.x += Rand_CenteredFloat(150.0f); + sp60.z += Rand_CenteredFloat(150.0f); abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp60))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp60, &sp6C, diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index 7c2a64841..229a1e695 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -266,8 +266,8 @@ void func_80BFE67C(EnBomjima* this, PlayState* play) { if (this->unk_2C0 == 0) { Math_Vec3f_Copy(&sp54, &this->actor.home.pos); - sp54.x += randPlusMinusPoint5Scaled(150.0f); - sp54.z += randPlusMinusPoint5Scaled(150.0f); + sp54.x += Rand_CenteredFloat(150.0f); + sp54.z += Rand_CenteredFloat(150.0f); abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp54))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp54, &sp6C, @@ -422,7 +422,7 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { } sp40.x = (Math_SinS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.x; - sp40.y = this->bombal->actor.world.pos.y - randPlusMinusPoint5Scaled(40.0f); + sp40.y = this->bombal->actor.world.pos.y - Rand_CenteredFloat(40.0f); sp40.z = (Math_CosS(sp3E) * (Rand_ZeroFloat(20.0f) + 40.0f)) + this->bombal->actor.world.pos.z; SoundSource_PlaySfxAtFixedWorldPos(play, &sp40, 50, NA_SE_EV_BOMBERS_SHOT_EXPLOSUIN); @@ -433,8 +433,8 @@ void func_80BFEB64(EnBomjima* this, PlayState* play) { func_80BFE494(this, 5, 1.0f); this->unk_29A = 0; Math_Vec3f_Copy(&this->unk_2A4, &this->actor.home.pos); - this->unk_2A4.x += randPlusMinusPoint5Scaled(150.0f); - this->unk_2A4.z += randPlusMinusPoint5Scaled(150.0f); + this->unk_2A4.x += Rand_CenteredFloat(150.0f); + this->unk_2A4.z += Rand_CenteredFloat(150.0f); this->unk_2A2++; } } diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c index 3c0f0da54..fbdcb860f 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -275,8 +275,8 @@ void func_80C014E4(EnBomjimb* this, PlayState* play) { case 0: if (this->unk_2AE == 0) { Math_Vec3f_Copy(&sp48, &this->actor.home.pos); - sp48.x += randPlusMinusPoint5Scaled(150.0f); - sp48.z += randPlusMinusPoint5Scaled(150.0f); + sp48.x += Rand_CenteredFloat(150.0f); + sp48.z += Rand_CenteredFloat(150.0f); abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp48))); if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp48, &sp60, diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c index 4becc2fe6..8e3e907bb 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c @@ -494,8 +494,8 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) { vel.z = cosf(i * (33.0f / 40.0f)) * i * .5f; vel.y = Rand_ZeroFloat(8.0f) + 7.0f; - vel.x += randPlusMinusPoint5Scaled(0.5f); - vel.z += randPlusMinusPoint5Scaled(0.5f); + vel.x += Rand_CenteredFloat(0.5f); + vel.z += Rand_CenteredFloat(0.5f); accel.x = 0.0f; accel.y = -1.0f; diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index 703585dd4..fa6349871 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -163,7 +163,7 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.velocity.y < 0.0f)) { if (!this->hasSetRandomValues) { - this->actor.world.rot.y = randPlusMinusPoint5Scaled(30000.0f); + this->actor.world.rot.y = Rand_CenteredFloat(30000.0f); this->actor.speed = 2.0f + BREG(56) + Rand_ZeroFloat(2.0f); this->actor.velocity.y = 12.0f + BREG(57) + Rand_ZeroFloat(5.0f); this->hasSetRandomValues = true; @@ -172,9 +172,9 @@ void func_80AFDFB4(EnColMan* this, PlayState* play) { } for (i = 0; i < 2; i++) { - velocity.x = randPlusMinusPoint5Scaled(2.0f); + velocity.x = Rand_CenteredFloat(2.0f); velocity.y = Rand_ZeroFloat(2.0f) + 1.0f; - velocity.z = randPlusMinusPoint5Scaled(2.0f); + velocity.z = Rand_CenteredFloat(2.0f); accel.y = -0.1f; accel.z = 0.0f; accel.x = 0.0f; diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index ec9a11b4c..4c88b84cb 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -552,9 +552,9 @@ s32 EnCrow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* if (this->actor.colChkInfo.health != 0) { if (limbIndex == OBJECT_CROW_LIMB_UPPER_TAIL) { - rot->y += (s16)(0xC00 * sin_rad(this->skelAnime.curFrame * (M_PI / 4))); + rot->y += (s16)(0xC00 * Math_SinF(this->skelAnime.curFrame * (M_PI / 4))); } else if (limbIndex == OBJECT_CROW_LIMB_TAIL) { - rot->y += (s16)(0x1400 * sin_rad((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); + rot->y += (s16)(0x1400 * Math_SinF((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); } } return false; diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index eaf1839c6..311b6d216 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -243,9 +243,9 @@ void func_80BE66E4(EnDaiku2* this, PlayState* play) { sp70.y += 40.0f; sp70.z += Math_CosS(this->actor.world.rot.y) * 70.0f; - sp70.x += randPlusMinusPoint5Scaled(5.0f); - sp70.y += randPlusMinusPoint5Scaled(5.0f); - sp70.z += randPlusMinusPoint5Scaled(5.0f); + sp70.x += Rand_CenteredFloat(5.0f); + sp70.y += Rand_CenteredFloat(5.0f); + sp70.z += Rand_CenteredFloat(5.0f); sp88.y = -1.0f; @@ -507,9 +507,9 @@ void func_80BE7504(EnDaiku2* this, Vec3f* arg1, Vec3f* arg2, Vec3f* arg3, f32 ar effect->unk_1C = *arg3; effect->unk_30 = arg4; effect->unk_34 = arg5; - effect->unk_28.x = randPlusMinusPoint5Scaled(30000.0f); - effect->unk_28.y = randPlusMinusPoint5Scaled(30000.0f); - effect->unk_28.z = randPlusMinusPoint5Scaled(30000.0f); + effect->unk_28.x = Rand_CenteredFloat(30000.0f); + effect->unk_28.y = Rand_CenteredFloat(30000.0f); + effect->unk_28.z = Rand_CenteredFloat(30000.0f); break; } } diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c index 186494268..422b35e87 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -384,7 +384,7 @@ void EnDekubaba_Grow(EnDekubaba* this, PlayState* play) { this->size * 0.01f * (0.5f + (15 - this->timer) * 0.5f / 15.0f); Math_ScaledStepToS(&this->actor.shape.rot.x, 0x1800, 0x800); - headDistVertical = sin_rad(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f; + headDistVertical = Math_SinF(CLAMP_MAX((15 - this->timer) * (1.0f / 15), 0.7f) * M_PI) * 32.0f + 14.0f; if (this->actor.shape.rot.x < -0x38E3) { headDistHorizontal = 0.0f; @@ -468,7 +468,7 @@ void EnDekubaba_Retract(EnDekubaba* this, PlayState* play) { this->size * 0.01f * (0.5f + this->timer * (1.0f / 30)); Math_ScaledStepToS(&this->actor.shape.rot.x, -0x4000, 0x300); - headDistVertical = (sin_rad(CLAMP_MAX(this->timer * 0.033f, 0.7f) * M_PI) * 32.0f) + 14.0f; + headDistVertical = (Math_SinF(CLAMP_MAX(this->timer * 0.033f, 0.7f) * M_PI) * 32.0f) + 14.0f; if (this->actor.shape.rot.x < -0x38E3) { headDistHorizontal = 0.0f; diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index d80013a99..46c6de979 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -280,7 +280,7 @@ s32 EnDg_HasReachedPoint(EnDg* this, Path* path, s32 pointIndex) { diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; @@ -358,9 +358,9 @@ void EnDg_SpawnFloorDustRing(EnDg* this, PlayState* play) { Vec3f pos; if (((this->index + curFrame) % mod) == 0) { - pos.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x; + pos.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x; pos.y = this->actor.world.pos.y; - pos.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z; + pos.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z; Actor_SpawnFloorDustRing(play, &this->actor, &pos, 10.0f, 0, 2.0f, 300, 0, true); } } @@ -900,14 +900,14 @@ void EnDg_JumpAttack(EnDg* this, PlayState* play) { if (curFrame < 9) { if (Animation_OnFrame(&this->skelAnime, 0.0f)) { - sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = randPlusMinusPoint5Scaled(1.0f) + 3.0f; + sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = Rand_CenteredFloat(1.0f) + 3.0f; } EnDg_SpawnFloorDustRing(this, play); } else { this->dogFlags |= DOG_FLAG_JUMP_ATTACKING; if (Animation_OnFrame(&this->skelAnime, 9.0f)) { - f32 rand = randPlusMinusPoint5Scaled(1.5f); + f32 rand = Rand_CenteredFloat(1.5f); sAnimationInfo[DOG_ANIM_JUMP_ATTACK].playSpeed = 1.2f; this->actor.velocity.y = 2.0f * rand + 3.0f; diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 5b268f1f8..e24e2691b 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -1062,7 +1062,7 @@ void func_8089CB10(EnDinofos* this, PlayState* play) { } void func_8089CBEC(EnDinofos* this, PlayState* play) { - s16 temp_s3 = ((s32)randPlusMinusPoint5Scaled(0x1000) + this->actor.shape.rot.y) + this->unk_28E; + s16 temp_s3 = ((s32)Rand_CenteredFloat(0x1000) + this->actor.shape.rot.y) + this->unk_28E; Vec3f sp88; Vec3f sp7C; ColliderJntSphElementDim* dim; @@ -1081,10 +1081,10 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { temp_s0 = CLAMP_MIN(temp_s0, 0); sp88.x = 11.0f * temp_f20; - sp88.y = randPlusMinusPoint5Scaled(2.0f) + -5.4f; + sp88.y = Rand_CenteredFloat(2.0f) + -5.4f; sp88.z = 11.0f * temp_f22; sp7C.x = 0.9f * temp_f20; - sp7C.y = randPlusMinusPoint5Scaled(0.6f) + 1.4f; + sp7C.y = Rand_CenteredFloat(0.6f) + 1.4f; sp7C.z = 0.9f * temp_f22; func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG); EffectSsDFire_Spawn(play, &this->limbPos[10], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8); @@ -1098,7 +1098,7 @@ void func_8089CBEC(EnDinofos* this, PlayState* play) { for (i = 6; i < end; i++) { dim = &this->colliderJntSph.elements[i].dim; - temp_s3 = (s32)(cos_rad((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y; + temp_s3 = (s32)(Math_CosF((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y; dim->worldSphere.center.x = (s32)this->limbPos[10].x + (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z); dim->worldSphere.center.y = (s32)this->limbPos[10].y + (s32)dim->modelSphere.center.y; @@ -1232,9 +1232,9 @@ void func_8089D42C(EnDinofos* this, PlayState* play) { if ((this->actionFunc == func_8089B834) && (this->unk_290 != 0)) { Math_ScaledStepToS(&this->unk_28E, Math_SinS(this->unk_290 * 1400) * 0x2C00, 0x300); } else if (this->actionFunc == func_8089CA74) { - Math_ScaledStepToS(&this->unk_28E, cos_rad(M_PI) * 0x2C00, 0x233); + Math_ScaledStepToS(&this->unk_28E, Math_CosF(M_PI) * 0x2C00, 0x2C00 / 20); } else if (this->actionFunc == func_8089CBEC) { - this->unk_28E = cos_rad(this->unk_290 * (M_PI / 20)) * 0x2C00; + this->unk_28E = Math_CosF(this->unk_290 * (M_PI / 20)) * 0x2C00; } else if (!Play_InCsMode(play)) { temp_v0_2 = this->unk_28E + this->actor.shape.rot.y; temp_v0_2 = BINANG_SUB(this->actor.yawTowardsPlayer, temp_v0_2); diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index 3f149049a..6149a7360 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -371,11 +371,11 @@ void func_80876930(EnDodongo* this, PlayState* play, Vec3f* arg2) { temp3 = this->unk_334 * 30.0f; for (i = 0; i < 3; i++) { - sp88.x = randPlusMinusPoint5Scaled(temp3) + arg2->x; + sp88.x = Rand_CenteredFloat(temp3) + arg2->x; sp88.y = Rand_ZeroFloat(5.0f) + this->actor.floorHeight; - sp88.z = randPlusMinusPoint5Scaled(temp3) + arg2->z; - D_8087933C.x = randPlusMinusPoint5Scaled(2.0f); - D_8087933C.z = randPlusMinusPoint5Scaled(2.0f); + sp88.z = Rand_CenteredFloat(temp3) + arg2->z; + D_8087933C.x = Rand_CenteredFloat(2.0f); + D_8087933C.z = Rand_CenteredFloat(2.0f); func_800B0DE0(play, &sp88, &gZeroVec3f, &D_8087933C, sp80, sp7C, temp1, temp2); } } @@ -738,9 +738,9 @@ void func_80877E60(EnDodongo* this, PlayState* play) { this->timer--; if (this->timer == 10) { for (i = 10; i >= 0; i--) { - sp84.x = randPlusMinusPoint5Scaled(10.0f); - sp84.y = randPlusMinusPoint5Scaled(10.0f); - sp84.z = randPlusMinusPoint5Scaled(10.0f); + sp84.x = Rand_CenteredFloat(10.0f); + sp84.y = Rand_CenteredFloat(10.0f); + sp84.z = Rand_CenteredFloat(10.0f); sp78.x = sp84.x * -0.1f; sp78.y = sp84.y * -0.1f; sp78.z = sp84.z * -0.1f; diff --git a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c index d2acb55be..fae9fc4fc 100644 --- a/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c +++ b/src/overlays/actors/ovl_En_Dragon/z_en_dragon.c @@ -299,11 +299,11 @@ void EnDragon_SpawnBubbles(EnDragon* this, PlayState* play, Vec3f basePos) { Vec3f bubblePos; s32 i; - bubbleCount = (s32)randPlusMinusPoint5Scaled(5.0f) + 10; + bubbleCount = (s32)Rand_CenteredFloat(5.0f) + 10; colorIndex = 0; if (this->action == DEEP_PYTHON_ACTION_DEAD) { colorIndex = 1; - bubbleCount = (s32)randPlusMinusPoint5Scaled(5.0f) + 10; + bubbleCount = (s32)Rand_CenteredFloat(5.0f) + 10; } for (i = 0; i < bubbleCount; i++) { @@ -311,9 +311,9 @@ void EnDragon_SpawnBubbles(EnDragon* this, PlayState* play, Vec3f basePos) { sBubbleVelocity.x = Rand_ZeroFloat(1.0f) * 23.0f; sBubbleVelocity.y = Rand_ZeroFloat(1.0f) * 10.0f; sBubbleVelocity.z = Rand_ZeroFloat(1.0f) * 23.0f; - bubblePos.x += randPlusMinusPoint5Scaled(i * 30.0f); - bubblePos.y += randPlusMinusPoint5Scaled(5.0f); - bubblePos.z += randPlusMinusPoint5Scaled(i * 30.0f); + bubblePos.x += Rand_CenteredFloat(i * 30.0f); + bubblePos.y += Rand_CenteredFloat(5.0f); + bubblePos.z += Rand_CenteredFloat(i * 30.0f); sBubbleAccel.y = Rand_ZeroFloat(1.0f) * 20.0f * 3.0f; scale = Rand_S16Offset(380, 240); EffectSsDtBubble_SpawnCustomColor(play, &bubblePos, &sBubbleVelocity, &sBubbleAccel, diff --git a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c index 2a9a0ac67..bd9949c61 100644 --- a/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c +++ b/src/overlays/actors/ovl_En_Egblock/z_en_egblock.c @@ -134,8 +134,8 @@ void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3) if (!effect->isActive) { effect->isActive = true; effect->pos = *pos; - effect->pos.x += randPlusMinusPoint5Scaled(50.0f); - effect->pos.z += randPlusMinusPoint5Scaled(50.0f); + effect->pos.x += Rand_CenteredFloat(50.0f); + effect->pos.z += Rand_CenteredFloat(50.0f); effect->timer = lifetime; effect->alpha = 255; effect->type = arg3; @@ -146,9 +146,9 @@ void EnEgblock_SpawnEffect(EnEgblock* this, Vec3f* pos, s16 lifetime, s16 arg3) effect->velocity.y = 5.0f + (10.0f * Rand_ZeroOne()); effect->velocity.z = 2.0f * (Rand_ZeroOne() - 0.5f); effect->scale = 0.5f + (0.2f * Rand_ZeroFloat(1.0f)); - effect->rot.x = randPlusMinusPoint5Scaled(0x7530); - effect->rot.y = randPlusMinusPoint5Scaled(0x7530); - effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + effect->rot.x = Rand_CenteredFloat(0x7530); + effect->rot.y = Rand_CenteredFloat(0x7530); + effect->rot.z = Rand_CenteredFloat(0x7530); break; } } diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index c9750991a..1a54c8c33 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -610,8 +610,7 @@ void EnEgol_Retreat(EnEgol* this, PlayState* play) { if ((ABS_ALT(angleToFacing) < 0x3000) && (fabsf(this->actor.world.pos.y - player->actor.world.pos.y) < 50.0f) && (this->actor.xzDistToPlayer < 100.0f) && (player->invincibilityTimer == 0)) { - func_800B8D50(play, &this->actor, 2.0f, (s32)randPlusMinusPoint5Scaled(0x2000) + this->actor.world.rot.y, 5.0f, - 0x10); + func_800B8D50(play, &this->actor, 2.0f, (s32)Rand_CenteredFloat(0x2000) + this->actor.world.rot.y, 5.0f, 0x10); } Math_Vec3f_Copy(&spawnPos, &gZeroVec3f); if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { @@ -764,11 +763,11 @@ void EnEgol_Laser(EnEgol* this, PlayState* play) { /*! @bug The following is supposed to calculate the rotation from vertical to the collision poly normal. * However, the calculation is performed incorrectly. The correct calculation is - * rotToNorm.x = func_80086B30(nz, ny) * 0x8000 / M_PI; - * rotToNorm.z = func_80086B30(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI; + * rotToNorm.x = Math_FAtan2F(nz, ny) * 0x8000 / M_PI; + * rotToNorm.z = Math_FAtan2F(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI; */ - rotToNorm.x = RAD_TO_BINANG_ALT2(-func_80086B30(-nz * ny, 1.0f)); - rotToNorm.z = RAD_TO_BINANG_ALT2(func_80086B30(-nx * ny, 1.0f)); + rotToNorm.x = RAD_TO_BINANG_ALT2(-Math_FAtan2F(-nz * ny, 1.0f)); + rotToNorm.z = RAD_TO_BINANG_ALT2(Math_FAtan2F(-nx * ny, 1.0f)); if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { EnEgol_SpawnEffect(this, &hitPos, &rotToNorm, 100, 0.02f, EYEGORE_EFFECT_IMPACT); @@ -1534,9 +1533,9 @@ void EnEgol_SpawnEffect(EnEgol* this, Vec3f* pos, Vec3s* rot, s16 lifetime, f32 effect->timer = lifetime; effect->alpha = 255; effect->type = type; - effect->rot.x = randPlusMinusPoint5Scaled(0x7530); - effect->rot.y = randPlusMinusPoint5Scaled(0x7530); - effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + effect->rot.x = Rand_CenteredFloat(0x7530); + effect->rot.y = Rand_CenteredFloat(0x7530); + effect->rot.z = Rand_CenteredFloat(0x7530); if ((effect->type == EYEGORE_EFFECT_PIECE_LARGE) || (effect->type == EYEGORE_EFFECT_PIECE_SMALL)) { effect->accel.y = -1.0f; effect->velocity.x = 4.0f * (Rand_ZeroOne() - 0.5f); diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 2bb7b6d0d..3dc6e4a72 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -201,7 +201,7 @@ void func_8088C858(EnElf* this, PlayState* play) { this->unk_244 = 1; this->unk_248 = 128; this->unk_254 = Rand_ZeroFloat(1.0f) + 0.5f; - this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_24C = Rand_CenteredFloat(0x7FFF); this->unk_26C = func_8088C9CC; } } @@ -216,7 +216,7 @@ void func_8088C920(EnElf* this, PlayState* play) { this->unk_244 = 1; this->unk_248 = 128; this->unk_254 = Rand_ZeroFloat(1.0f) + 0.5f; - this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_24C = Rand_CenteredFloat(0x7FFF); this->unk_26C = func_8088C9CC; } } @@ -264,7 +264,7 @@ void func_8088C9CC(EnElf* this, PlayState* play) { this->unk_244 = 1; this->unk_248 = 128; this->unk_254 = Rand_ZeroFloat(0.5f) + 0.5f; - this->unk_24C = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_24C = Rand_CenteredFloat(0x7FFF); } } @@ -293,7 +293,7 @@ void func_8088CC48(EnElf* this, PlayState* play) { this->unk_246 = 0; this->unk_24A = (s32)Rand_ZeroFloat(1048.0f) + 0x200; this->unk_224 = this->actor.world.pos; - this->unk_258 = randPlusMinusPoint5Scaled(0x7FFF); + this->unk_258 = Rand_CenteredFloat(0x7FFF); this->unk_26C = func_8088C9CC; func_8088CBAC(this, play); this->unk_25C = 0; @@ -1247,9 +1247,9 @@ void func_8088F5F4(EnElf* this, PlayState* play, s32 sparkleLife) { Color_RGBA8 envColor; if (!(this->fairyFlags & 8)) { - sparklePos.x = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.x; + sparklePos.x = Rand_CenteredFloat(6.0f) + this->actor.world.pos.x; sparklePos.y = (Rand_ZeroOne() * 6.0f) + this->actor.world.pos.y; - sparklePos.z = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.z; + sparklePos.z = Rand_CenteredFloat(6.0f) + this->actor.world.pos.z; primColor.r = this->innerColor.r; primColor.g = this->innerColor.g; diff --git a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c index e2a5f69e3..2584a1c73 100644 --- a/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c +++ b/src/overlays/actors/ovl_En_Elfbub/z_en_elfbub.c @@ -66,7 +66,7 @@ void EnElfbub_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 1.25f); this->actionFunc = EnElfbub_Idle; - this->zRot = randPlusMinusPoint5Scaled(0x10000); + this->zRot = Rand_CenteredFloat(0x10000); this->zRotDelta = 1000; this->xScale = 0.08f; diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index a3f17f605..cacef3f4d 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -262,8 +262,8 @@ void func_80A39DC8(EnElfgrp* this, PlayState* play, s32 arg2, s32 arg3) { } for (i = 0; i < arg2; i++) { - elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, randPlusMinusPoint5Scaled(20.0f) + sp6C.x, sp6C.y, - randPlusMinusPoint5Scaled(20.0f) + sp6C.z, 0, 0, 0, params); + elforg = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, Rand_CenteredFloat(20.0f) + sp6C.x, sp6C.y, + Rand_CenteredFloat(20.0f) + sp6C.z, 0, 0, 0, params); if (elforg == NULL) { continue; } diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index 05351cd3f..9b65ae2a6 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -58,7 +58,7 @@ void EnElforg_InitializeParams(EnElforg* this) { this->actor.speed = 1.0f; this->targetSpeedXZ = 1.0f; this->actor.velocity.y = 0.0f; - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000); + this->actor.world.rot.y = Rand_CenteredFloat(0x10000); this->timer = 0; this->secondaryTimer = Rand_ZeroFloat(100.0f); this->actor.shape.yOffset = 0.0f; @@ -176,9 +176,9 @@ void EnElforg_SpawnSparkles(EnElforg* this, PlayState* play, s32 life) { s32 pad; s32 index; - pos.x = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.x; + pos.x = Rand_CenteredFloat(6.0f) + this->actor.world.pos.x; pos.y = (Rand_ZeroOne() * 6.0f) + this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y); - pos.z = randPlusMinusPoint5Scaled(6.0f) + this->actor.world.pos.z; + pos.z = Rand_CenteredFloat(6.0f) + this->actor.world.pos.z; index = (this->area < STRAY_FAIRY_AREA_CLOCK_TOWN || this->area >= STRAY_FAIRY_AREA_MAX) ? STRAY_FAIRY_AREA_CLOCK_TOWN : this->area; diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c index 834a6449f..3d8224039 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -102,15 +102,15 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) { this->timer = 0; switch (this->type) { case EN_ENCOUNT1_GRASSHOPPER: - scale = randPlusMinusPoint5Scaled(40.0f) + 200.0f; + scale = Rand_CenteredFloat(40.0f) + 200.0f; rotY = player->actor.shape.rot.y; if (this->spawnActiveCount & 1) { rotY = -rotY; - scale = randPlusMinusPoint5Scaled(20.0f) + 100.0f; + scale = Rand_CenteredFloat(20.0f) + 100.0f; } - spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + Rand_CenteredFloat(40.0f); spawnPos.y = player->actor.floorHeight + 120.0f; - spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + Rand_CenteredFloat(40.0f); floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos); if ((floorHeight <= BGCHECK_Y_MIN) || ((player->actor.depthInWater != BGCHECK_Y_MIN) && @@ -125,11 +125,11 @@ void EnEncount1_SpawnActor(EnEncount1* this, PlayState* play) { break; case EN_ENCOUNT1_SKULLFISH: - scale = randPlusMinusPoint5Scaled(250.0f) + 500.0f; + scale = Rand_CenteredFloat(250.0f) + 500.0f; rotY = player->actor.shape.rot.y; - spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.x = player->actor.world.pos.x + (Math_SinS(rotY) * scale) + Rand_CenteredFloat(40.0f); spawnPos.y = player->actor.world.pos.y - Rand_ZeroFloat(20.0f); - spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + randPlusMinusPoint5Scaled(40.0f); + spawnPos.z = player->actor.world.pos.z + (Math_CosS(rotY) * scale) + Rand_CenteredFloat(40.0f); floorHeight = BgCheck_EntityRaycastFloor5(&play->colCtx, &floorPoly, &bgId, &this->actor, &spawnPos); if (!(player->stateFlags1 & PLAYER_STATE1_8000000) || (floorHeight <= BGCHECK_Y_MIN) || (player->actor.depthInWater < floorHeight)) { diff --git a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c index 972d038ae..5e28850c6 100644 --- a/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c +++ b/src/overlays/actors/ovl_En_Encount4/z_en_encount4.c @@ -171,8 +171,8 @@ void func_809C42A8(EnEncount4* this, PlayState* play) { if (this->unk_14C != 0) { yRot += 0x8000; } - pos.x += Math_SinS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); - pos.z += Math_CosS(yRot) * (40.0f + randPlusMinusPoint5Scaled(40.0f)); + pos.x += Math_SinS(yRot) * (40.0f + Rand_CenteredFloat(40.0f)); + pos.z += Math_CosS(yRot) * (40.0f + Rand_CenteredFloat(40.0f)); if (Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_SKB, pos.x, pos.y, pos.z, 0, 0, 0, ENSKB_PARAM_0) != NULL) { this->unk_14C++; diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 85d0527fa..64bfdaecc 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -64,10 +64,10 @@ void EnEstone_Init(Actor* thisx, PlayState* play) { s32 pad; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 15.0f); - this->rotVel.x = this->rotVel.y = this->rotVel.z = randPlusMinusPoint5Scaled(1.0f) * 20.0f; + this->rotVel.x = this->rotVel.y = this->rotVel.z = Rand_CenteredFloat(1.0f) * 20.0f; Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.colChkInfo.mass = MASS_IMMOVABLE; - this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x2710); + this->actor.world.rot.y += (s16)(s32)Rand_CenteredFloat(0x2710); this->actor.shape.rot.y = this->actor.world.rot.y; if (this->actor.params == ENESTONE_TYPE_LARGE) { @@ -224,9 +224,9 @@ void EnEstone_SpawnEffect(EnEstone* this, Vec3f* pos, Vec3f* velocity, Vec3f* ac effect->accel = *accel; effect->scale = scale; effect->timer = lifetime; - effect->rot.x = randPlusMinusPoint5Scaled(0x7530); - effect->rot.y = randPlusMinusPoint5Scaled(0x7530); - effect->rot.z = randPlusMinusPoint5Scaled(0x7530); + effect->rot.x = Rand_CenteredFloat(0x7530); + effect->rot.y = Rand_CenteredFloat(0x7530); + effect->rot.z = Rand_CenteredFloat(0x7530); break; } } diff --git a/src/overlays/actors/ovl_En_Fall/z_en_fall.c b/src/overlays/actors/ovl_En_Fall/z_en_fall.c index 2f226e61c..03989b01f 100644 --- a/src/overlays/actors/ovl_En_Fall/z_en_fall.c +++ b/src/overlays/actors/ovl_En_Fall/z_en_fall.c @@ -662,16 +662,16 @@ s32 EnFall_RisingDebris_InitializeEffect(EnFall* this) { debrisEffects[i].pos.x = this->actor.world.pos.x; debrisEffects[i].pos.y = this->actor.world.pos.y; debrisEffects[i].pos.z = this->actor.world.pos.z; - angle = randPlusMinusPoint5Scaled(0x10000); + angle = Rand_CenteredFloat(0x10000); scale = (1.0f - (Rand_ZeroFloat(1.0f) * Rand_ZeroFloat(1.0f))) * 3000.0f; debrisEffects[i].pos.x += Math_SinS(angle) * scale; debrisEffects[i].pos.z += Math_CosS(angle) * scale; debrisEffects[i].velocity.x = 0.0f; debrisEffects[i].velocity.z = 0.0f; debrisEffects[i].velocity.y = 80.0f; - debrisEffects[i].rot.x = randPlusMinusPoint5Scaled(0x10000); - debrisEffects[i].rot.y = randPlusMinusPoint5Scaled(0x10000); - debrisEffects[i].rot.z = randPlusMinusPoint5Scaled(0x10000); + debrisEffects[i].rot.x = Rand_CenteredFloat(0x10000); + debrisEffects[i].rot.y = Rand_CenteredFloat(0x10000); + debrisEffects[i].rot.z = Rand_CenteredFloat(0x10000); this->activeDebrisEffectCount++; return true; } diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index 97d1ec357..269866ff0 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -265,7 +265,7 @@ void EnFamos_SetupDeathDebris(EnFamos* this) { rock->rotation.y = (s32)Rand_Next() >> 0x10; rock->rotation.z = (s32)Rand_Next() >> 0x10; rock->pos.x = Math_SinS(randVelDirection) * 20.0f + this->actor.world.pos.x; - rock->pos.y = randPlusMinusPoint5Scaled(60.0f) + (this->actor.world.pos.y + 40.0f); + rock->pos.y = Rand_CenteredFloat(60.0f) + (this->actor.world.pos.y + 40.0f); rock->pos.z = Math_CosS(randVelDirection) * 20.0f + this->actor.world.pos.z; rock->scale = Rand_ZeroFloat(0.002f) + (2.5f * 0.001f); } @@ -687,8 +687,8 @@ void EnFamos_DeathExplosion(EnFamos* this, PlayState* play) { Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 4); } - this->actor.world.pos.x = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.x; - this->actor.world.pos.z = randPlusMinusPoint5Scaled(5.0f) + this->targetDest.z; + this->actor.world.pos.x = Rand_CenteredFloat(5.0f) + this->targetDest.x; + this->actor.world.pos.z = Rand_CenteredFloat(5.0f) + this->targetDest.z; if (this->stateTimer == 1) { EnBom* explosion = (EnBom*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOM, this->actor.world.pos.x, this->actor.world.pos.y + 40.0f, this->actor.world.pos.z, diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c index b26592ac0..fd3b723d8 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -301,7 +301,7 @@ void EnFirefly_FlyIdle(EnFirefly* this, PlayState* play) { Math_ScaledStepToS(&this->actor.shape.rot.y, Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos), 0x300); } else if (rand < 0.8f) { - this->actor.shape.rot.y += (s16)randPlusMinusPoint5Scaled(1536.0f); + this->actor.shape.rot.y += (s16)(s32)Rand_CenteredFloat(0x600); } // Climb if too close to ground diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c index ac3a4246b..923cfeef2 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -352,7 +352,7 @@ void func_80B28C14(EnFish2* this, PlayState* play) { this->unk_2B4 = (s32)Rand_ZeroFloat(20.0f) + 10; } else if (this->unk_2B4 == 1) { if ((this->unk_348 == 0) || (Rand_ZeroOne() < 0.6f)) { - this->unk_348 = randPlusMinusPoint5Scaled(0x2000); + this->unk_348 = Rand_CenteredFloat(0x2000); } else { this->unk_348 = Math_Vec3f_Pitch(&this->actor.world.pos, &this->unk_324); if (this->unk_348 < -0x1000) { @@ -545,8 +545,8 @@ void func_80B295A4(EnFish2* this, PlayState* play) { Math_ApproachZeroF(&this->actor.speed, 0.3f, 0.3f); if (this->unk_2B4 != 0) { Math_Vec3f_Copy(&sp60, &this->unk_318); - sp60.x += randPlusMinusPoint5Scaled(100.0f); - sp60.z += randPlusMinusPoint5Scaled(100.0f); + sp60.x += Rand_CenteredFloat(100.0f); + sp60.z += Rand_CenteredFloat(100.0f); for (i = 0; i < 2; i++) { EffectSsBubble_Spawn(play, &sp60, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f); @@ -912,10 +912,10 @@ void func_80B2A498(EnFish2* this, PlayState* play) { for (i = 0; i < 10; i++) { Math_Vec3f_Copy(&sp6C, &this->actor.world.pos); - sp6C.x += randPlusMinusPoint5Scaled(70.0f); + sp6C.x += Rand_CenteredFloat(70.0f); sp6C.y = this->unk_334 + 10.0f; - sp6C.z += randPlusMinusPoint5Scaled(70.0f); - EffectSsGSplash_Spawn(play, &sp6C, NULL, NULL, 0, (s32)randPlusMinusPoint5Scaled(50.0f) + 350); + sp6C.z += Rand_CenteredFloat(70.0f); + EffectSsGSplash_Spawn(play, &sp6C, NULL, NULL, 0, (s32)Rand_CenteredFloat(50.0f) + 350); } } } @@ -970,11 +970,11 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) { if ((play->gameplayFrames % 8) == 0) { Math_Vec3f_Copy(&sp5C, &this->unk_324); - sp5C.x += randPlusMinusPoint5Scaled(100.0f); + sp5C.x += Rand_CenteredFloat(100.0f); sp5C.y = this->actor.floorHeight; - sp5C.z += randPlusMinusPoint5Scaled(100.0f); + sp5C.z += Rand_CenteredFloat(100.0f); - for (i = 0; i < (s32)randPlusMinusPoint5Scaled(5.0f) + 10; i++) { + for (i = 0; i < (s32)Rand_CenteredFloat(5.0f) + 10; i++) { EffectSsBubble_Spawn(play, &sp5C, 0, 5.0f, 5.0f, Rand_ZeroFloat(this->unk_330 * 4.0f) + 0.1f); } } @@ -1102,9 +1102,9 @@ void func_80B2ADB0(EnFish2* this, Vec3f* vec, s16 arg2) { ptr->unk_20 = VIRTUAL_TO_PHYSICAL(SEGMENTED_TO_VIRTUAL(phi_v0)); ptr->unk_00 = true; ptr->unk_04 = *vec; - ptr->unk_04.x += randPlusMinusPoint5Scaled(ptr->unk_00 + (this->unk_330 * 4000.0f)); - ptr->unk_04.y += randPlusMinusPoint5Scaled(20.0f); - ptr->unk_04.z += randPlusMinusPoint5Scaled(ptr->unk_00 + (this->unk_330 * 4000.0f)); + ptr->unk_04.x += Rand_CenteredFloat(ptr->unk_00 + (this->unk_330 * 4000.0f)); + ptr->unk_04.y += Rand_CenteredFloat(20.0f); + ptr->unk_04.z += Rand_CenteredFloat(ptr->unk_00 + (this->unk_330 * 4000.0f)); ptr->unk_18 = (this->unk_330 * 20.0f) - (Rand_ZeroFloat(5.0f) * 0.01f); ptr->unk_1C = 0x42; ptr->unk_10 = arg2; diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 2ada30cba..20edbcbc2 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1838,9 +1838,9 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) dy = sLurePos.y - sRodTipPos.y; dz = sLurePos.z - sRodTipPos.z; - ry = func_80086B30(dx, dz); + ry = Math_FAtan2F(dx, dz); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -func_80086B30(dy, dist); + rx = -Math_FAtan2F(dy, dist); dist = sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) * 0.001f; @@ -1865,9 +1865,9 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) dy = D_80917218.y - (linePos + i)->y; dz = D_80917218.z - (linePos + i)->z; - ry = func_80086B30(dx, dz); + ry = Math_FAtan2F(dx, dz); dist = sqrtf(SQ(dx) + SQ(dz)); - rx = -func_80086B30(dy, dist); + rx = -Math_FAtan2F(dy, dist); dist = sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) * 0.001f; @@ -3003,9 +3003,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->actor.shape.rot.y = -0x8000; if ((this->actor.projectedPos.z < 200.0f) && (this->actor.projectedPos.z > 0.0f)) { - spC4.x = randPlusMinusPoint5Scaled(5.0f) + 130.0f; + spC4.x = Rand_CenteredFloat(5.0f) + 130.0f; spC4.y = 40.0f; - spC4.z = randPlusMinusPoint5Scaled(5.0f) + 1280.0f; + spC4.z = Rand_CenteredFloat(5.0f) + 1280.0f; EnFishing_SpawnBubble(NULL, play->specialEffects, &spC4, Rand_ZeroFloat(0.02f) + 0.03f, 1); } @@ -3080,9 +3080,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { } else { this->unk_150 = 1; this->unk_172[0] = Rand_ZeroFloat(30.0f) + 10.0f; - this->unk_1AC.x = randPlusMinusPoint5Scaled(300.0f); + this->unk_1AC.x = Rand_CenteredFloat(300.0f); this->unk_1AC.y = (WATER_SURFACE_Y(play) - 50.0f) - Rand_ZeroFloat(50.0f); - this->unk_1AC.z = randPlusMinusPoint5Scaled(300.0f); + this->unk_1AC.z = Rand_CenteredFloat(300.0f); this->unk_188 = 1.0f; this->unk_18C = 2000.0f; } @@ -3144,8 +3144,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { Math_ApproachF(&this->unk_1A8, 4096.0f, 1.0f, 256.0f); if ((play->gameplayFrames % 32) == 0) { - this->unk_1AC.x = randPlusMinusPoint5Scaled(600.0f); - this->unk_1AC.z = randPlusMinusPoint5Scaled(600.0f); + this->unk_1AC.x = Rand_CenteredFloat(600.0f); + this->unk_1AC.z = Rand_CenteredFloat(600.0f); this->unk_1AC.y = -120.0f; } } else if (sp124 > 50.0f) { @@ -3600,7 +3600,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { for (spA2 = 0; spA2 < 100; spA2++) { - Matrix_RotateYF(randPlusMinusPoint5Scaled(0.75f * M_PI) + + Matrix_RotateYF(Rand_CenteredFloat(0.75f * M_PI) + BINANG_TO_RAD_ALT(this->actor.yawTowardsPlayer + 0x8000), MTXMODE_NEW); Matrix_MultVec3f(&sp10C, &sp100); @@ -4067,7 +4067,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { func_80903C60(this, 1); this->unk_17C = this->actor.velocity.y; this->actor.velocity.y = 0.0f; - this->unk_162 = randPlusMinusPoint5Scaled(32768.0f); + this->unk_162 = (s16)(s32)Rand_CenteredFloat(0x8000); } else if ((this->actor.world.pos.y < WATER_SURFACE_Y(play)) && (this->actor.prevPos.y >= WATER_SURFACE_Y(play))) { if (this->unk_17C < -5.0f) { @@ -4128,10 +4128,10 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if (Rand_ZeroOne() < 0.5f) { this->unk_15E = 0; } else { - this->unk_15E = (s16)randPlusMinusPoint5Scaled(32.0f) + 0x8000; + this->unk_15E = (s16)(s32)Rand_CenteredFloat(0x20) + 0x8000; } - this->unk_160 = (s16)randPlusMinusPoint5Scaled(16384.0f); + this->unk_160 = (s16)(s32)Rand_CenteredFloat(0x4000); this->unk_188 = 1.0f; this->unk_18C = 5000.0f; this->unk_194 = 5000.0f; @@ -4141,8 +4141,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if ((this->unk_150 == 5) && !(this->unk_154 & 1)) { Vec3f pos; - pos.x = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.x; - pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x; + pos.z = Rand_CenteredFloat(10.0f) + this->actor.world.pos.z; pos.y = this->actor.floorHeight + 5.0f; EnFishing_SpawnWaterDust(&this->actor.projectedPos, play->specialEffects, &pos, (this->unk_1A4 * 0.005f) + 0.15f); @@ -4160,9 +4160,9 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->unk_1CA--; for (i = 0; i < 2; i++) { - pos.x = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.x; - pos.y = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.y; - pos.z = randPlusMinusPoint5Scaled(range) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat(range) + this->actor.world.pos.x; + pos.y = Rand_CenteredFloat(range) + this->actor.world.pos.y; + pos.z = Rand_CenteredFloat(range) + this->actor.world.pos.z; EnFishing_SpawnBubble(&this->actor.projectedPos, play->specialEffects, &pos, Rand_ZeroFloat(0.035f) + 0.04f, 0); } @@ -4568,14 +4568,14 @@ void EnFishing_UpdateGroupFishes(PlayState* play) { spD6 = Math_Atan2S_XY(dist, dy); if ((dist < 10.0f) || (((fish->timer % 32) == 0) && (Rand_ZeroOne() > 0.5f))) { - fish->unk_10.y = basePos[groupIndex].y + randPlusMinusPoint5Scaled(10.0f); + fish->unk_10.y = basePos[groupIndex].y + Rand_CenteredFloat(10.0f); if (D_8090CF18 != 0) { - fish->unk_10.x = basePos[groupIndex].x + randPlusMinusPoint5Scaled(200.0f); - fish->unk_10.z = basePos[groupIndex].z + randPlusMinusPoint5Scaled(200.0f); + fish->unk_10.x = basePos[groupIndex].x + Rand_CenteredFloat(200.0f); + fish->unk_10.z = basePos[groupIndex].z + Rand_CenteredFloat(200.0f); } else { - fish->unk_10.x = basePos[groupIndex].x + randPlusMinusPoint5Scaled(100.0f); - fish->unk_10.z = basePos[groupIndex].z + randPlusMinusPoint5Scaled(100.0f); + fish->unk_10.x = basePos[groupIndex].x + Rand_CenteredFloat(100.0f); + fish->unk_10.z = basePos[groupIndex].z + Rand_CenteredFloat(100.0f); } ripplePos = fish->pos; @@ -5460,8 +5460,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { ((play->gameplayFrames % 2) == 0)) { Vec3f pos; - pos.x = randPlusMinusPoint5Scaled(20.0f) + player->actor.world.pos.x; - pos.z = randPlusMinusPoint5Scaled(20.0f) + player->actor.world.pos.z; + pos.x = Rand_CenteredFloat(20.0f) + player->actor.world.pos.x; + pos.z = Rand_CenteredFloat(20.0f) + player->actor.world.pos.z; pos.y = player->actor.floorHeight + 5.0f; EnFishing_SpawnWaterDust(NULL, play->specialEffects, &pos, 0.5f); } @@ -5552,9 +5552,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { rot.z = (Camera_GetInputDirYaw(mainCam) * -(M_PI / 0x8000)) + rot.y; for (i = 0; i < (u8)D_8090CCD0; i++) { - pos.x = randPlusMinusPoint5Scaled(700.0f) + play->view.eye.x; + pos.x = Rand_CenteredFloat(700.0f) + play->view.eye.x; pos.y = (Rand_ZeroFloat(100.0f) + 150.0f) - 170.0f; - pos.z = randPlusMinusPoint5Scaled(700.0f) + play->view.eye.z; + pos.z = Rand_CenteredFloat(700.0f) + play->view.eye.z; if (pos.z < 1160.0f) { SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &projectedPos, &sProjectedW); diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c index 150f3c8c1..71f980d47 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -306,14 +306,14 @@ void func_809328F4(EnFz* this, PlayState* play, Vec3f* arg2, s32 arg3, f32 arg4) sp88.b = 200; for (i = 0; i < arg3; i++) { - temp_f24 = randPlusMinusPoint5Scaled(0.3f) + 0.6f; - temp_s1 = (s32)randPlusMinusPoint5Scaled(5.0f) + 12; - spA8.x = randPlusMinusPoint5Scaled(arg4) + arg2->x; + temp_f24 = Rand_CenteredFloat(0.3f) + 0.6f; + temp_s1 = (s32)Rand_CenteredFloat(5.0f) + 12; + spA8.x = Rand_CenteredFloat(arg4) + arg2->x; spA8.y = Rand_ZeroFloat(arg4) + arg2->y; - spA8.z = randPlusMinusPoint5Scaled(arg4) + arg2->z; - sp9C.x = randPlusMinusPoint5Scaled(10.0f); + spA8.z = Rand_CenteredFloat(arg4) + arg2->z; + sp9C.x = Rand_CenteredFloat(10.0f); sp9C.y = Rand_ZeroFloat(10.0f) + 2.0f; - sp9C.z = randPlusMinusPoint5Scaled(10.0f); + sp9C.z = Rand_CenteredFloat(10.0f); EffectSsEnIce_Spawn(play, &spA8, temp_f24, &sp9C, &sp90, &sp8C, &sp88, temp_s1); } @@ -329,9 +329,9 @@ void func_80932AF4(EnFz* this) { Vec3f sp2C; if (!(this->unk_BC6 & 0xF)) { - sp44.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x; - sp44.y = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.y + 30.0f; - sp44.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z; + sp44.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; + sp44.y = Rand_CenteredFloat(40.0f) + this->actor.world.pos.y + 30.0f; + sp44.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; sp2C.x = sp2C.z = 0.0f; sp2C.y = 0.1f; sp38.x = sp38.y = sp38.z = 0.0f; @@ -345,9 +345,9 @@ void func_80932BD4(EnFz* this) { Vec3f sp2C; if (!(this->unk_BC6 & 3)) { - sp44.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x; + sp44.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; sp44.y = this->unk_BB4; - sp44.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z; + sp44.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; sp2C.x = sp2C.z = 0.0f; sp2C.y = 0.1f; sp38.x = sp38.y = sp38.z = 0.0f; diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index e05945680..3540b1a24 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -310,7 +310,7 @@ s32 func_80B3B648(EnGg2* this, Path* path, s32 arg2_) { phi_f14 = points[arg2 + 1].z - points[arg2 - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 8692f937c..1db4d7c5b 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -374,7 +374,7 @@ s32 func_80B50C78(EnGk* this, Path* path, s32 arg2_) { phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index 7fbed6122..bfd2d19ab 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -246,7 +246,7 @@ void EnGrasshopper_Init(Actor* thisx, PlayState* play) { this->type; } - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; EnGrasshopper_SetupFly(this); } @@ -343,7 +343,7 @@ void EnGrasshopper_DecideAction(EnGrasshopper* this, PlayState* play) { void EnGrasshopper_SetupFly(EnGrasshopper* this) { EnGrasshopper_ChangeAnim(this, EN_GRASSHOPPER_ANIM_FLY); - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; this->action = EN_GRASSHOPPER_ACTION_FLY; this->actionFunc = EnGrasshopper_Fly; } @@ -384,7 +384,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { } if (this->shouldTurn) { - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; this->targetRot.y = Math_Atan2S(diffX, diffZ); this->timer = Rand_S16Offset(30, 30); } @@ -412,7 +412,7 @@ void EnGrasshopper_Fly(EnGrasshopper* this, PlayState* play) { this->targetRot.y = Math_Atan2S(diffX, diffZ); this->timer = Rand_S16Offset(30, 70); - this->baseFlyHeight = randPlusMinusPoint5Scaled(50.0f) + this->flyingHomePos.y; + this->baseFlyHeight = Rand_CenteredFloat(50.0f) + this->flyingHomePos.y; } } } @@ -441,7 +441,7 @@ void EnGrasshopper_RoamInCircles(EnGrasshopper* this, PlayState* play) { this->baseFlyHeight = Math_SinS(this->bobPhase) * 10.0f; if (this->timer == 0) { - this->baseFlyHeight = randPlusMinusPoint5Scaled(10.0f); + this->baseFlyHeight = Rand_CenteredFloat(10.0f); this->timer = Rand_S16Offset(30, 30); } @@ -583,8 +583,8 @@ void EnGrasshopper_ApproachPlayer(EnGrasshopper* this, PlayState* play) { if ((this->splashCount < 3) || !(play->gameplayFrames % 8)) { this->splashCount++; Math_Vec3f_Copy(&splashPos, &this->tailTipPos); - splashPos.x += randPlusMinusPoint5Scaled(20.0f); - splashPos.z += randPlusMinusPoint5Scaled(20.0f); + splashPos.x += Rand_CenteredFloat(20.0f); + splashPos.z += Rand_CenteredFloat(20.0f); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (((s32)Rand_ZeroOne() * 100) + 400)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER); } @@ -633,8 +633,8 @@ void EnGrasshopper_Attack(EnGrasshopper* this, PlayState* play) { if ((this->splashCount < 3) || !(play->gameplayFrames % 8)) { this->splashCount++; Math_Vec3f_Copy(&splashPos, &this->tailTipPos); - splashPos.x += randPlusMinusPoint5Scaled(20.0f); - splashPos.z += randPlusMinusPoint5Scaled(20.0f); + splashPos.x += Rand_CenteredFloat(20.0f); + splashPos.z += Rand_CenteredFloat(20.0f); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, ((s32)Rand_ZeroOne() * 100) + 400); SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 50, NA_SE_EV_BOMB_DROP_WATER); } @@ -796,8 +796,8 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { for (i = 0; i < 3; i++) { Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); - splashPos.x += randPlusMinusPoint5Scaled((i * 5.0f) + 20.0f); - splashPos.z += randPlusMinusPoint5Scaled((i * 5.0f) + 20.0f); + splashPos.x += Rand_CenteredFloat((i * 5.0f) + 20.0f); + splashPos.z += Rand_CenteredFloat((i * 5.0f) + 20.0f); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (((s32)Rand_ZeroOne() * 100) + 400)); } @@ -826,7 +826,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sFireVelocityAndAccel); i++) { Math_Vec3f_Copy(&firePos, &this->actor.world.pos); - firePos.x += randPlusMinusPoint5Scaled(30.0f); + firePos.x += Rand_CenteredFloat(30.0f); if (!isUnderWater) { firePos.y = this->actor.floorHeight; } else if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, @@ -834,7 +834,7 @@ void EnGrasshopper_Fall(EnGrasshopper* this, PlayState* play) { firePos.y = waterSurface; } - firePos.z += randPlusMinusPoint5Scaled(30.0f); + firePos.z += Rand_CenteredFloat(30.0f); func_800B3030(play, &firePos, &sFireVelocityAndAccel[i], &sFireVelocityAndAccel[i], 100, 0, 2); } @@ -1062,10 +1062,10 @@ void EnGrasshopper_InitializeEffect(EnGrasshopper* this, Vec3f* pos) { effect->isEnabled = true; effect->pos = *pos; effect->timer = 10; - effect->velocity.x = randPlusMinusPoint5Scaled(20.0f); - effect->velocity.y = randPlusMinusPoint5Scaled(20.0f); - effect->velocity.z = randPlusMinusPoint5Scaled(20.0f); - effect->yaw = randPlusMinusPoint5Scaled(30000.0f); + effect->velocity.x = Rand_CenteredFloat(20.0f); + effect->velocity.y = Rand_CenteredFloat(20.0f); + effect->velocity.z = Rand_CenteredFloat(20.0f); + effect->yaw = Rand_CenteredFloat(30000.0f); return; } } diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index d8004bef8..6f6f2cad9 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -815,9 +815,9 @@ s32 func_809995A4(EnGs* this, PlayState* play) { Vec3f sp60; for (i = 0; i < 3; i++) { - sp60.x = randPlusMinusPoint5Scaled(15.0f); + sp60.x = Rand_CenteredFloat(15.0f); sp60.y = Rand_ZeroFloat(-1.0f); - sp60.z = randPlusMinusPoint5Scaled(15.0f); + sp60.z = Rand_CenteredFloat(15.0f); sp6C.x = this->actor.world.pos.x + (2.0f * sp60.x); sp6C.y = this->actor.world.pos.y + 7.0f; diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index bcc5882a2..f5885b3cf 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -265,7 +265,7 @@ void func_80B22500(EnHakurock* this, PlayState* play) { if (this->counter > 0) { this->counter--; if ((this->counter & 1) == 0) { - this->actor.world.pos.y = (sin_rad(this->counter * (M_PI / 20)) * 4.0f) + this->actor.floorHeight; + this->actor.world.pos.y = (Math_SinF(this->counter * (M_PI / 20)) * 4.0f) + this->actor.floorHeight; } else { this->actor.world.pos.y = this->actor.floorHeight; } diff --git a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c index ce60a0187..4294a8320 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -107,9 +107,9 @@ void func_80B22E0C(EnHanabiStruct* arg0) { arg0->unk_20.y *= arg0->unk_14.x; arg0->unk_20.y -= 1.0f; - arg0->unk_20.x += randPlusMinusPoint5Scaled(0.8f); - arg0->unk_20.y += randPlusMinusPoint5Scaled(0.8f); - arg0->unk_20.z += randPlusMinusPoint5Scaled(0.8f); + arg0->unk_20.x += Rand_CenteredFloat(0.8f); + arg0->unk_20.y += Rand_CenteredFloat(0.8f); + arg0->unk_20.z += Rand_CenteredFloat(0.8f); if (arg0->unk_01 > 0) { arg0->unk_01--; @@ -286,10 +286,10 @@ void func_80B236C8(EnHanabi* this, PlayState* play) { } sp34.x += sp30 * Math_SinS(this->actor.home.rot.y); - sp34.y += randPlusMinusPoint5Scaled(300.0f); + sp34.y += Rand_CenteredFloat(300.0f); sp34.z += sp30 * Math_CosS(this->actor.home.rot.y); - if (this->actor.home.rot.x >= 0x259) { + if (this->actor.home.rot.x > 0x258) { sp28 = func_80B22C80(&sp34, this->unk_148, 2.0f); } else { sp28 = func_80B22C80(&sp34, this->unk_148, 1.0f); diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index e0f9301ce..8ad694a11 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -173,8 +173,8 @@ void func_80BDB2B8(EnHiddenNuts* this, PlayState* play) { Math_Vec3f_Copy(&sp74, &this->actor.world.pos); - sp74.x += randPlusMinusPoint5Scaled(15.0f); - sp74.z += randPlusMinusPoint5Scaled(15.0f); + sp74.x += Rand_CenteredFloat(15.0f); + sp74.z += Rand_CenteredFloat(15.0f); EffectSsDtBubble_SpawnCustomColor(play, &sp74, &sp94, &sp88, &sp84, &sp80, Rand_S16Offset(120, 90), 30, true); @@ -216,8 +216,8 @@ void func_80BDB59C(EnHiddenNuts* this, PlayState* play) { Math_Vec3f_Copy(&sp78, &this->actor.world.pos); - sp78.x += randPlusMinusPoint5Scaled(15.0f); - sp78.z += randPlusMinusPoint5Scaled(15.0f); + sp78.x += Rand_CenteredFloat(15.0f); + sp78.z += Rand_CenteredFloat(15.0f); EffectSsDtBubble_SpawnCustomColor(play, &sp78, &sp98, &sp8C, &sp88, &sp84, Rand_S16Offset(120, 90), 30, true); diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index 7c01fa788..1a0105788 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -814,11 +814,11 @@ void func_80C215E4(PlayState* play, EnHintSkb* this, Vec3f* arg2) { s32 pad; sp5C.y = this->actor.floorHeight; - sp5C.x = (sin_rad(sp40) * 15.0f) + arg2->x; - sp5C.z = (cos_rad(sp40) * 15.0f) + arg2->z; + sp5C.x = (Math_SinF(sp40) * 15.0f) + arg2->x; + sp5C.z = (Math_CosF(sp40) * 15.0f) + arg2->z; - sp44.x = randPlusMinusPoint5Scaled(1.0f); - sp44.z = randPlusMinusPoint5Scaled(1.0f); + sp44.x = Rand_CenteredFloat(1.0f); + sp44.z = Rand_CenteredFloat(1.0f); sp50.y += (Rand_ZeroOne() - 0.5f) * 4.0f; diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index d4a534ad1..a116c323a 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -487,7 +487,7 @@ void EnIk_VerticalAttack(EnIk* this, PlayState* play) { if ((this->skelAnime.curFrame > 13.0f) && (this->skelAnime.curFrame < 23.0f)) { this->colliderQuad.base.atFlags |= AT_ON; if (this->drawArmorFlags) { - this->actor.speed = sin_rad((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f; + this->actor.speed = Math_SinF((this->skelAnime.curFrame - 13.0f) * (M_PI / 20)) * 10.0f; } } else { this->colliderQuad.base.atFlags &= ~AT_ON; @@ -550,7 +550,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) { } else { phi_f2 = this->skelAnime.curFrame - 1.0f; } - this->actor.speed = sin_rad((M_PI / 8) * phi_f2) * 4.5f; + this->actor.speed = Math_SinF((M_PI / 8) * phi_f2) * 4.5f; } this->colliderQuad.base.atFlags |= AT_ON; } else { @@ -685,9 +685,9 @@ void EnIk_Die(EnIk* this, PlayState* play) { if (this->timer != 0) { this->timer--; for (i = 6 - (this->timer >> 2); i >= 0; i--) { - effectPos.x = randPlusMinusPoint5Scaled(80.0f) + this->actor.world.pos.x; - effectPos.z = randPlusMinusPoint5Scaled(80.0f) + this->actor.world.pos.z; - effectPos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + effectPos.x = Rand_CenteredFloat(80.0f) + this->actor.world.pos.x; + effectPos.z = Rand_CenteredFloat(80.0f) + this->actor.world.pos.z; + effectPos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &effectPos, &sEffectVelAndAccel, &sEffectVelAndAccel, 100, 0, 2); } if (this->timer == 0) { @@ -845,9 +845,9 @@ void EnIk_UpdateArmor(EnIk* this, PlayState* play) { ikEffect->pos.y = this->actor.floorHeight; for (i = 0; i < 4; i++) { - effectPos.x = randPlusMinusPoint5Scaled(20.0f) + ikEffect->pos.x; + effectPos.x = Rand_CenteredFloat(20.0f) + ikEffect->pos.x; effectPos.y = Rand_ZeroFloat(20.0f) + ikEffect->pos.y; - effectPos.z = randPlusMinusPoint5Scaled(20.0f) + ikEffect->pos.z; + effectPos.z = Rand_CenteredFloat(20.0f) + ikEffect->pos.z; func_800B3030(play, &effectPos, &gZeroVec3f, &gZeroVec3f, 40, 7, 2); } diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index df217b86d..449acf212 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -242,7 +242,7 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) { diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index a1da5941b..d572c1331 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -1461,7 +1461,7 @@ void func_80B88964(EnKaizoku* this, PlayState* play) { void func_80B88CD8(EnKaizoku* this) { EnKaizoku_ChangeAnim(this, EN_KAIZOKU_ANIM_3); - this->picto.actor.speed = randPlusMinusPoint5Scaled(12.0f); + this->picto.actor.speed = Rand_CenteredFloat(12.0f); this->skelAnime.playSpeed = 1.0f; this->picto.actor.world.rot.y = this->picto.actor.shape.rot.y; this->unk_2B2 = Rand_ZeroOne() * 30.0f + 30.0f; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 930a0d7a3..fc8d3d201 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -1006,11 +1006,11 @@ void EnKakasi_DiggingAway(EnKakasi* this, PlayState* play) { if ((play->gameplayFrames % 4) == 0) { Math_Vec3f_Copy(&tempWorldPos, &this->picto.actor.world.pos); tempWorldPos.y = this->picto.actor.floorHeight; - tempWorldPos.x += randPlusMinusPoint5Scaled(2.0f); - tempWorldPos.z += randPlusMinusPoint5Scaled(2.0f); + tempWorldPos.x += Rand_CenteredFloat(2.0f); + tempWorldPos.z += Rand_CenteredFloat(2.0f); if (play->sceneId == SCENE_8ITEMSHOP) { - EffectSsGSplash_Spawn(play, &tempWorldPos, 0, 0, 0, randPlusMinusPoint5Scaled(100.0f) + 200.0f); + EffectSsGSplash_Spawn(play, &tempWorldPos, 0, 0, 0, Rand_CenteredFloat(100.0f) + 200.0f); SoundSource_PlaySfxAtFixedWorldPos(play, &tempWorldPos, 0x32, NA_SE_EV_BOMB_DROP_WATER); } else { diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index d9d5ef7d8..820dd1f4e 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -606,9 +606,9 @@ void func_80AD8388(EnKame* this, PlayState* play) { this->actor.scale.y = this->actor.scale.x; this->actor.scale.z = this->actor.scale.x; } - sp34.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x; + sp34.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x; sp34.y = this->actor.world.pos.y + 15.0f; - sp34.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z; + sp34.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z; func_800B3030(play, &sp34, &gZeroVec3f, &gZeroVec3f, 100, 0, 2); } } diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index e1d9df24c..ff7e4bb08 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -135,8 +135,8 @@ void func_80954960(EnKanban* this) { ny = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y); nz = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z); - this->floorRot.x = -func_80086B30(-nz * ny, 1.0f); - this->floorRot.z = func_80086B30(-nx * ny, 1.0f); + this->floorRot.x = -Math_FAtan2F(-nz * ny, 1.0f); + this->floorRot.z = Math_FAtan2F(-nx * ny, 1.0f); } } @@ -350,7 +350,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { piece->actionState = ENKANBAN_AIR; piece->actor.gravity = -1.0f; piece->actor.world.rot.y = - BINANG_ROT180((s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.yawTowardsPlayer); + BINANG_ROT180((s32)Rand_CenteredFloat(0x4000) + this->actor.yawTowardsPlayer); if ((hitItem->toucher.dmgFlags & 0x10) || (hitItem->toucher.dmgFlags & 8) || (hitItem->toucher.dmgFlags & 0x80000000)) { @@ -369,7 +369,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { piece->bounceZ = Rand_ZeroFloat(7.0f) + 3.0f; } - piece->spinVel.y = randPlusMinusPoint5Scaled(0x1800); + piece->spinVel.y = Rand_CenteredFloat(0x1800); if (Rand_ZeroOne() < 0.5f) { piece->direction = 1; @@ -526,7 +526,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.velocity.y = 0.0f; } else { this->actor.velocity.y *= -0.3f; - this->actor.world.rot.y += (s16)randPlusMinusPoint5Scaled(0x4000); + this->actor.world.rot.y += (s16)(s32)Rand_CenteredFloat(0x4000); } bounced = true; } else { @@ -653,8 +653,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { dustCount = this->partCount * 0.5f; for (j = 0; j < dustCount + 3; j++) { - pos.x = randPlusMinusPoint5Scaled((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.x; - pos.z = randPlusMinusPoint5Scaled((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.x; + pos.z = Rand_CenteredFloat((this->partCount * 0.5f) + 20.0f) + this->actor.world.pos.z; func_800B0F18(play, &pos, &velocity, &accel, &primColor, &envColor, 100, 5, Rand_ZeroFloat(5.0f) + 14.0f); } @@ -750,7 +750,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actionState = ENKANBAN_AIR; this->actor.gravity = -1.0f; - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x10000); + this->actor.world.rot.y = Rand_CenteredFloat(0x10000); if (this->partCount >= 4) { this->bounceX = Rand_ZeroFloat(10.0f) + 6.0f; this->bounceZ = Rand_ZeroFloat(10.0f) + 6.0f; @@ -763,7 +763,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.speed = Rand_ZeroFloat(1.5f); } - this->spinVel.y = randPlusMinusPoint5Scaled(0x1800); + this->spinVel.y = Rand_CenteredFloat(0x1800); if (Rand_ZeroOne() < 0.5f) { this->direction = 1; @@ -808,7 +808,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { this->actor.speed = 4.0f + bombStrength; } - this->spinVel.y = randPlusMinusPoint5Scaled(0x1800); + this->spinVel.y = Rand_CenteredFloat(0x1800); if (Rand_ZeroOne() < 0.5f) { this->direction = 1; diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index 315bc1ffd..94590f5b6 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -233,9 +233,9 @@ void EnMinifrog_SpawnDust(EnMinifrog* this, PlayState* play) { vec5.z = this->actor.world.pos.z - (5.0f * Math_CosS(yaw) * Math_CosS(pitch)); for (i = 0; i < 5; i++) { - vel.x = randPlusMinusPoint5Scaled(4.0f); - vel.y = randPlusMinusPoint5Scaled(4.0f); - vel.z = randPlusMinusPoint5Scaled(4.0f); + vel.x = Rand_CenteredFloat(4.0f); + vel.y = Rand_CenteredFloat(4.0f); + vel.z = Rand_CenteredFloat(4.0f); accel.x = -vel.x * 0.1f; accel.y = -vel.y * 0.1f; accel.z = -vel.z * 0.1f; diff --git a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c index 3aac9ae11..68d08b223 100644 --- a/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c +++ b/src/overlays/actors/ovl_En_Minislime/z_en_minislime.c @@ -209,11 +209,11 @@ void EnMinislime_AddIceSmokeEffect(EnMinislime* this, PlayState* play) { Vec3f pos; Vec3f vel; - pos.x = (randPlusMinusPoint5Scaled(200.0f) * this->actor.scale.x) + this->actor.world.pos.x; + pos.x = (Rand_CenteredFloat(200.0f) * this->actor.scale.x) + this->actor.world.pos.x; pos.y = CLAMP_MIN(this->actor.world.pos.y, GBT_ROOM_5_MIN_Y + 30.0f); - pos.z = (randPlusMinusPoint5Scaled(200.0f) * this->actor.scale.z) + this->actor.world.pos.z; - vel.x = randPlusMinusPoint5Scaled(1.5f); - vel.z = randPlusMinusPoint5Scaled(1.5f); + pos.z = (Rand_CenteredFloat(200.0f) * this->actor.scale.z) + this->actor.world.pos.z; + vel.x = Rand_CenteredFloat(1.5f); + vel.z = Rand_CenteredFloat(1.5f); vel.y = 2.0f; EffectSsIceSmoke_Spawn(play, &pos, &vel, &gZeroVec3f, 500); } @@ -401,8 +401,8 @@ void EnMinislime_GrowAndShrink(EnMinislime* this, PlayState* play) { this->growShrinkTimer--; scaleFactor = (this->growShrinkTimer / 6) + 1.0f; this->actor.scale.z = this->actor.scale.x = - ((cos_rad(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * (2.0f / 30.0f))) + 1.5f) * 0.1f; - this->actor.scale.y = ((sin_rad(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * 0.05f)) + 0.75f) * 0.1f; + ((Math_CosF(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * (2.0f / 30.0f))) + 1.5f) * 0.1f; + this->actor.scale.y = ((Math_SinF(this->growShrinkTimer * (M_PI / 3)) * (scaleFactor * 0.05f)) + 0.75f) * 0.1f; if (this->actor.params == MINISLIME_SETUP_GEKKO_THROW) { EnMinislime_SetupMoveToGekko(this); } else if ((this->actor.xzDistToPlayer < 150.0f) && (this->growShrinkTimer < 38)) { @@ -424,11 +424,12 @@ void EnMinislime_Idle(EnMinislime* this, PlayState* play) { f32 speedXZ; this->idleTimer--; - speedXZ = sin_rad(this->idleTimer * (M_PI / 10)); + speedXZ = Math_SinF(this->idleTimer * (M_PI / 10)); this->actor.speed = speedXZ * 1.5f; this->actor.speed = CLAMP_MIN(this->actor.speed, 0.0f); Math_StepToF(&this->actor.scale.x, ((0.14f * speedXZ) + 1.5f) * 0.1f, 0.010000001f); - Math_StepToF(&this->actor.scale.y, ((cos_rad(this->idleTimer * (M_PI / 10)) * 0.07f) + 0.75f) * 0.1f, 0.010000001f); + Math_StepToF(&this->actor.scale.y, ((Math_CosF(this->idleTimer * (M_PI / 10)) * 0.07f) + 0.75f) * 0.1f, + 0.010000001f); Math_StepToF(&this->actor.scale.z, 0.3f - this->actor.scale.x, 0.010000001f); if (this->idleTimer == 0) { if (this->actor.xzDistToPlayer < 300.0f) { @@ -537,13 +538,13 @@ void EnMinislime_Knockback(EnMinislime* this, PlayState* play) { this->knockbackTimer--; Math_StepToF(&this->actor.speed, 0.0f, 1.0f); sqrtFrozenTimer = sqrtf(this->knockbackTimer); - this->actor.scale.x = ((cos_rad(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.15f; + this->actor.scale.x = ((Math_CosF(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.15f; this->actor.scale.z = this->actor.scale.x; if (this->knockbackTimer == 15) { this->collider.base.acFlags |= AC_ON; } - this->actor.scale.y = ((sin_rad(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.075f; + this->actor.scale.y = ((Math_SinF(this->knockbackTimer * (M_PI / 3)) * (0.05f * sqrtFrozenTimer)) + 1.0f) * 0.075f; if (this->actor.params == MINISLIME_SETUP_GEKKO_THROW) { EnMinislime_SetupMoveToGekko(this); } else if (this->knockbackTimer == 0) { @@ -575,9 +576,10 @@ void EnMinislime_DefeatIdle(EnMinislime* this, PlayState* play) { f32 xzScale; this->idleTimer--; - xzScale = sin_rad(this->idleTimer * (M_PI / 10)); + xzScale = Math_SinF(this->idleTimer * (M_PI / 10)); Math_StepToF(&this->actor.scale.x, ((0.14f * xzScale) + 1.5f) * 0.1f, 0.010000001f); - Math_StepToF(&this->actor.scale.y, ((0.07f * cos_rad(this->idleTimer * (M_PI / 10))) + 0.75f) * 0.1f, 0.010000001f); + Math_StepToF(&this->actor.scale.y, ((0.07f * Math_CosF(this->idleTimer * (M_PI / 10))) + 0.75f) * 0.1f, + 0.010000001f); Math_StepToF(&this->actor.scale.z, 0.3f - this->actor.scale.x, 0.010000001f); if (this->idleTimer == 0) { this->idleTimer = 20; @@ -670,9 +672,9 @@ void EnMinislime_GekkoThrow(EnMinislime* this, PlayState* play) { f32 xzScale; this->throwTimer--; - xzScale = sin_rad(this->throwTimer * (M_PI / 5)); + xzScale = Math_SinF(this->throwTimer * (M_PI / 5)); this->actor.scale.x = ((0.3f * xzScale) + 1.5f) * 0.1f; - this->actor.scale.y = ((cos_rad(this->throwTimer * (M_PI / 5)) * 0.2f) + 0.75f) * 0.1f; + this->actor.scale.y = ((Math_CosF(this->throwTimer * (M_PI / 5)) * 0.2f) + 0.75f) * 0.1f; this->actor.scale.z = 0.3f - this->actor.scale.x; if (this->throwTimer == 0) { this->throwTimer = 10; diff --git a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c index 9b4722fba..4e9af5578 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -274,7 +274,7 @@ void func_80A4E2E8(EnMkk* this, PlayState* play) { Math_ScaledStepToS(&this->unk_150, this->actor.yawTowardsPlayer, 0x400); } this->actor.shape.rot.y = - (s32)(sin_rad(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150; + (s32)(Math_SinF(this->unk_14E * ((2 * M_PI) / 15)) * (614.4f * this->actor.speed)) + this->unk_150; func_800B9010(&this->actor, NA_SE_EN_KUROSUKE_MOVE - SFX_FLAG); if (sp20) { this->unk_14B &= ~2; @@ -379,16 +379,16 @@ void func_80A4E84C(EnMkk* this) { this->unk_154.y = this->actor.world.pos.y; this->unk_154.x = this->actor.world.pos.x - 10.0f * Math_SinS(this->actor.shape.rot.y + - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); this->unk_154.z = this->actor.world.pos.z - 10.0f * Math_CosS(this->actor.shape.rot.y + - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); this->unk_160.x = this->unk_154.x - 12.0f * Math_SinS(this->actor.shape.rot.y - - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); this->unk_160.z = this->unk_154.z - 12.0f * Math_CosS(this->actor.shape.rot.y - - (s32)(1228.8f * this->actor.speed * sin_rad(this->unk_14E * (M_PI / 5)))); + (s32)(1228.8f * this->actor.speed * Math_SinF(this->unk_14E * (M_PI / 5)))); } } 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 41f872488..472196ae9 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c @@ -87,9 +87,9 @@ void EnNimotsu_Update(Actor* thisx, PlayState* play) { } if ((play->state.frames % 3) == 0) { - dustPosition.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f); + dustPosition.x = this->actor.world.pos.x + Rand_CenteredFloat(15.0f); dustPosition.y = this->actor.world.pos.y; - dustPosition.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f); + dustPosition.z = this->actor.world.pos.z + Rand_CenteredFloat(15.0f); Actor_SpawnFloorDustRing(play, &this->actor, &dustPosition, 20.0f, 0, 2.0f, 0, 0, 0); } } diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index 4982f7e75..0e96590d5 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -280,7 +280,7 @@ void EnNiw_SpawnAttackNiw(EnNiw* this, PlayState* play) { yView = play->view.at.y - play->view.eye.y; zView = play->view.at.z - play->view.eye.z; newNiwPos.x = ((Rand_ZeroOne() - 0.5f) * xView) + play->view.eye.x; - newNiwPos.y = randPlusMinusPoint5Scaled(0.3f) + (play->view.eye.y + 50.0f + (yView * 0.5f)); + newNiwPos.y = Rand_CenteredFloat(0.3f) + (play->view.eye.y + 50.0f + (yView * 0.5f)); newNiwPos.z = ((Rand_ZeroOne() - 0.5f) * zView) + play->view.eye.z; attackNiw = Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ATTACK_NIW, newNiwPos.x, newNiwPos.y, newNiwPos.z, 0, 0, 0, ATTACK_NIW_REGULAR); @@ -340,8 +340,8 @@ void EnNiw_SetupIdle(EnNiw* this) { void EnNiw_Idle(EnNiw* this, PlayState* play) { f32 posX2; f32 posZ2; - f32 posX1 = randPlusMinusPoint5Scaled(100.0f); - f32 posZ1 = randPlusMinusPoint5Scaled(100.0f); + f32 posX1 = Rand_CenteredFloat(100.0f); + f32 posZ1 = Rand_CenteredFloat(100.0f); s16 nextAnimIndex; if (this->niwType == NIW_TYPE_REGULAR) { @@ -438,9 +438,9 @@ void EnNiw_Held(EnNiw* this, PlayState* play) { this->heldTimer = (s32)(Rand_ZeroFloat(1.0f) * 10.0f) + 10; } - this->actor.shape.rot.x = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.x; - this->actor.shape.rot.y = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.y; - this->actor.shape.rot.z = (s16)randPlusMinusPoint5Scaled(5000.0f) + this->actor.world.rot.z; + this->actor.shape.rot.x = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.x; + this->actor.shape.rot.y = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.y; + this->actor.shape.rot.z = (s16)(s32)Rand_CenteredFloat(0x1388) + this->actor.world.rot.z; if (this->niwType == NIW_TYPE_REGULAR) { if (Actor_HasNoParent(&this->actor, play)) { this->actor.shape.rot.z = 0; @@ -773,9 +773,9 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { featherCount = 4; } for (i = 0; i < featherCount; i++) { - pos.x = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.x; - pos.y = randPlusMinusPoint5Scaled(10.0f) + (this->actor.world.pos.y + this->unk308); - pos.z = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.z; + pos.x = Rand_CenteredFloat(10.0f) + this->actor.world.pos.x; + pos.y = Rand_CenteredFloat(10.0f) + (this->actor.world.pos.y + this->unk308); + pos.z = Rand_CenteredFloat(10.0f) + this->actor.world.pos.z; featherScale = Rand_ZeroFloat(6.0f) + 6.0f; if ((this->unk29E == 2) && (this->unk308 != 0)) { @@ -785,9 +785,9 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { if (this->unk308 == 0) { featherScale = Rand_ZeroFloat(2.0f) + 2.0f; } - vel.x = randPlusMinusPoint5Scaled(3.0f); + vel.x = Rand_CenteredFloat(3.0f); vel.y = Rand_ZeroFloat(2.0f) * 0.5f + 2.0f; - vel.z = randPlusMinusPoint5Scaled(3.0f); + vel.z = Rand_CenteredFloat(3.0f); accel.z = accel.x = 0.0f; accel.y = -0.15f; diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index fc6ef71db..2f8914edc 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -110,9 +110,9 @@ void EnNwc_SpawnDust(EnNwc* this, PlayState* play) { vec5.z = this->actor.world.pos.z - 5.0f * Math_CosS(yaw) * Math_CosS(pitch); for (i = 0; i < 5; i++) { - vel.x = randPlusMinusPoint5Scaled(4.0f); - vel.y = randPlusMinusPoint5Scaled(4.0f); - vel.z = randPlusMinusPoint5Scaled(4.0f); + vel.x = Rand_CenteredFloat(4.0f); + vel.y = Rand_CenteredFloat(4.0f); + vel.z = Rand_CenteredFloat(4.0f); accel.x = -vel.x * 0.1f; accel.y = -vel.y * 0.1f; accel.z = -vel.z * 0.1f; @@ -182,7 +182,7 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) { case NWC_STATE_TURNING: this->stateTimer = Rand_ZeroFloat(20.0f) + 15.0f; this->actionFunc = EnNwc_Turn; - this->fallingRotY = (s16)(s32)randPlusMinusPoint5Scaled(0x10000); + this->fallingRotY = (s16)(s32)Rand_CenteredFloat(0x10000); break; case NWC_STATE_HOPPING_FORWARD: @@ -193,7 +193,7 @@ void EnNwc_ChangeState(EnNwc* this, s16 newState) { case NWC_STATE_FOLLOWING: this->actionFunc = EnNwc_Follow; this->transformTimer = 0; - this->randomRot = (s16)(s32)randPlusMinusPoint5Scaled(10000.0f); + this->randomRot = (s16)(s32)Rand_CenteredFloat(0x2710); break; case NWC_STATE_RUNNING: @@ -331,7 +331,7 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) { } } else { // not too close: keep moving - this->randomRot += (s16)randPlusMinusPoint5Scaled(1500.0f); + this->randomRot += (s16)(s32)Rand_CenteredFloat(0x5DC); if (this->randomRot > 0x1388) { this->randomRot = 0x1388; } else if (this->randomRot < -0x1388) { diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index 7a40b38f5..c1ce34949 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -118,9 +118,9 @@ void func_80BF5E68(EnOsk* this, AnimationHeader** animations, s16 index, f32 pla void func_80BF5EBC(EnOsk* this, PlayState* play) { Vec3f sp2C; - sp2C.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x; - sp2C.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z; - sp2C.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.y; + sp2C.x = Rand_CenteredFloat(30.0f) + this->actor.world.pos.x; + sp2C.z = Rand_CenteredFloat(30.0f) + this->actor.world.pos.z; + sp2C.y = Rand_CenteredFloat(30.0f) + this->actor.world.pos.y; func_800B3030(play, &sp2C, &D_80BF7018, &D_80BF7018, 100, 0, 2); } diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index 52f611c0e..e5b4cabe3 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -271,7 +271,7 @@ void func_8095AB1C(EnOwl* this, PlayState* play) { } void func_8095AB4C(EnOwl* this) { - if (randPlusMinusPoint5Scaled(1.0f) < 0.0f) { + if (Rand_CenteredFloat(1.0f) < 0.0f) { this->actionFlags |= 0x20; } else { this->actionFlags &= ~0x20; diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index 079e3027d..4c75fac65 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -306,7 +306,7 @@ s32 func_8086A2CC(EnPametfrog* this, CollisionPoly* floorPoly) { return false; } - rotation = func_80086C48(arg0); + rotation = Math_FAcosF(arg0); if (rotation < 0.0001f) { return false; } @@ -523,7 +523,7 @@ void EnPametfrog_FallOffSnapper(EnPametfrog* this, PlayState* play) { this->timer--; } - sin = sin_rad(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f; + sin = Math_SinF(this->timer * (M_PI / 3)) * ((0.02f * (this->timer * (1.0f / 6.0f))) + 0.005f) + 1.0f; EnPametfrog_ShakeCamera(this, play, 300.0f * sin, 100.0f * sin); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { EnPametfrog_StopCutscene(this, play); @@ -966,9 +966,9 @@ void EnPametfrog_SetupSpawnFrog(EnPametfrog* this, PlayState* play) { Flags_SetClearTemp(play, play->roomCtx.curRoom.num); for (i = 0; i < 25; i++) { - vel.x = randPlusMinusPoint5Scaled(5.0f); + vel.x = Rand_CenteredFloat(5.0f); vel.y = Rand_ZeroFloat(3.0f) + 4.0f; - vel.z = randPlusMinusPoint5Scaled(5.0f); + vel.z = Rand_CenteredFloat(5.0f); EffectSsHahen_Spawn(play, &this->actor.world.pos, &vel, &sAccel, 0, Rand_S16Offset(12, 3), HAHEN_OBJECT_DEFAULT, 10, 0); } @@ -981,7 +981,7 @@ void EnPametfrog_SpawnFrog(EnPametfrog* this, PlayState* play) { f32 magShake; this->timer--; - magShake = (sin_rad(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f; + magShake = (Math_SinF(this->timer * (M_PI / 5)) * ((0.04f * (this->timer * 0.1f)) + 0.02f)) + 1.0f; EnPametfrog_ShakeCamera(this, play, 75.0f * magShake, 10.0f * magShake); if (this->timer == 0) { EnPametfrog_StopCutscene(this, play); diff --git a/src/overlays/actors/ovl_En_Part/z_en_part.c b/src/overlays/actors/ovl_En_Part/z_en_part.c index ac073358f..e56970e10 100644 --- a/src/overlays/actors/ovl_En_Part/z_en_part.c +++ b/src/overlays/actors/ovl_En_Part/z_en_part.c @@ -90,10 +90,10 @@ void func_808654C4(EnPart* this, PlayState* play) { break; case ENPART_TYPE_4: for (i = 7; i >= 0; i--) { - effectPos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - effectPos.y = randPlusMinusPoint5Scaled(50.0f) + + effectPos.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + effectPos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + (this->actor.shape.yOffset * this->actor.scale.y)); - effectPos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; + effectPos.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; effectVelocity.y = Rand_ZeroOne() + 1.0f; effectScale = Rand_S16Offset(80, 100); EffectSsDtBubble_SpawnColorProfile(play, &effectPos, &effectVelocity, &gZeroVec3f, effectScale, 25, diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index d4996d74f..645b7edf5 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -257,9 +257,9 @@ void func_80897258(PlayState* play, EnPeehat* this, Vec3f* arg2, f32 arg3, f32 a sp44.x = (Math_SinS(sp42) * arg3) + arg2->x; sp44.z = (Math_CosS(sp42) * arg3) + arg2->z; - D_80899564.x = randPlusMinusPoint5Scaled(1.05f); - D_80899564.z = randPlusMinusPoint5Scaled(1.05f); - D_80899558.y = randPlusMinusPoint5Scaled(4.0f) + 8.0f; + D_80899564.x = Rand_CenteredFloat(1.05f); + D_80899564.z = Rand_CenteredFloat(1.05f); + D_80899558.y = Rand_CenteredFloat(4.0f) + 8.0f; EffectSsHahen_Spawn(play, &sp44, &D_80899558, &D_80899564, 0, (Rand_ZeroFloat(5.0f) + 12.0f) * arg4, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -506,7 +506,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) { this->actor.world.pos.y -= 1.0f; } - cos = cos_rad(this->unk_2B8); + cos = Math_CosF(this->unk_2B8); this->actor.world.pos.y += cos * 1.4f; this->unk_2B8 += fabsf(cos * 0.18f) + 0.07f; this->unk_2B0--; @@ -514,7 +514,7 @@ void func_80897F44(EnPeehat* this, PlayState* play) { if (this->unk_2B0 <= 0) { this->actor.speed = Rand_ZeroFloat(0.5f) + 2.5f; this->unk_2B0 = Rand_ZeroFloat(10.0f) + 10.0f; - this->unk_2B6 = randPlusMinusPoint5Scaled(1000.0f); + this->unk_2B6 = Rand_CenteredFloat(1000.0f); } SkelAnime_Update(&this->skelAnime); @@ -549,10 +549,10 @@ void func_80898144(EnPeehat* this, PlayState* play) { } else { this->actor.world.pos.y += 1.0f; } - cos = cos_rad(this->unk_2B8); + cos = Math_CosF(this->unk_2B8); this->actor.world.pos.y += cos * 1.4f; - cos = cos_rad(this->unk_2B8); + cos = Math_CosF(this->unk_2B8); this->unk_2B8 += fabsf(cos * 0.18f) + 0.07f; step = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos); diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index 6d16c1418..48c8cd5ab 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -397,17 +397,17 @@ void EnPp_SpawnDust(EnPp* this, PlayState* play) { Vec3f accel; for (i = 0; i < ARRAY_COUNT(this->backFootPos); i++) { - velocity.x = randPlusMinusPoint5Scaled(2.0f); + velocity.x = Rand_CenteredFloat(2.0f); velocity.y = Rand_ZeroFloat(2.0f) + 1.0f; - velocity.z = randPlusMinusPoint5Scaled(2.0f); + velocity.z = Rand_CenteredFloat(2.0f); accel.y = -0.1f; accel.z = 0.0f; accel.x = 0.0f; - pos.x = this->backFootPos[i].x + randPlusMinusPoint5Scaled(10.0f); + pos.x = this->backFootPos[i].x + Rand_CenteredFloat(10.0f); pos.y = Rand_ZeroFloat(3.0f) + this->actor.floorHeight + 1.0f; - pos.z = this->backFootPos[i].z + randPlusMinusPoint5Scaled(10.0f); + pos.z = this->backFootPos[i].z + Rand_CenteredFloat(10.0f); func_800B0EB0(play, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvColor, (Rand_ZeroFloat(50.0f) + 60.0f), 30, (Rand_ZeroFloat(5.0f) + 20.0f)); @@ -534,8 +534,8 @@ void EnPp_Idle(EnPp* this, PlayState* play) { if ((this->timer == 0) && (this->secondaryTimer == 0)) { this->secondaryTimer = Rand_ZeroFloat(20.0f) + 20.0f; Math_Vec3f_Copy(&posToLookAt, &this->actor.home.pos); - posToLookAt.x += randPlusMinusPoint5Scaled(50.0f); - posToLookAt.z += randPlusMinusPoint5Scaled(50.0f); + posToLookAt.x += Rand_CenteredFloat(50.0f); + posToLookAt.z += Rand_CenteredFloat(50.0f); this->targetRotY = Math_Vec3f_Yaw(&this->actor.world.pos, &posToLookAt); this->actor.speed = 0.0f; if (this->animIndex != EN_PP_ANIM_IDLE) { @@ -1046,8 +1046,8 @@ void EnPp_Dead(EnPp* this, PlayState* play) { if (this->actor.world.pos.y < waterSurface) { for (i = 0; i < 5; i++) { Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); - splashPos.x += randPlusMinusPoint5Scaled(10 + (5 * i)); - splashPos.z += randPlusMinusPoint5Scaled(40 + (5 * i)); + splashPos.x += Rand_CenteredFloat(10 + (5 * i)); + splashPos.z += Rand_CenteredFloat(40 + (5 * i)); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (Rand_ZeroOne() * 100.0f) + 400.0f); } @@ -1143,9 +1143,9 @@ void EnPp_Mask_Detach(EnPp* this, PlayState* play) { for (i = 0; i < ARRAY_COUNT(sMaskFireVelocityAndAccel); i++) { Math_Vec3f_Copy(&maskFirePos, &this->maskFlamesBasePos); - maskFirePos.x += randPlusMinusPoint5Scaled(20.0f); + maskFirePos.x += Rand_CenteredFloat(20.0f); maskFirePos.y = this->actor.floorHeight; - maskFirePos.z += randPlusMinusPoint5Scaled(20.0f); + maskFirePos.z += Rand_CenteredFloat(20.0f); func_800B3030(play, &maskFirePos, &sMaskFireVelocityAndAccel[i], &sMaskFireVelocityAndAccel[i], 70, 0, 2); } @@ -1173,7 +1173,7 @@ void EnPp_BodyPart_SetupMove(EnPp* this) { this->deadBodyPartRotationalVelocity.z = (this->deadBodyPartIndex * 0x2E) + 0xFF00; if (EN_PP_GET_TYPE(&this->actor) != EN_PP_TYPE_BODY_PART_BODY) { this->actor.speed = Rand_ZeroFloat(4.0f) + 4.0f; - this->actor.world.rot.y = ((s32)randPlusMinusPoint5Scaled(223.0f) + 0x1999) * this->deadBodyPartIndex; + this->actor.world.rot.y = ((s32)Rand_CenteredFloat(223.0f) + 0x1999) * this->deadBodyPartIndex; } this->action = EN_PP_ACTION_BODY_PART_MOVE; @@ -1213,8 +1213,8 @@ void EnPp_BodyPart_Move(EnPp* this, PlayState* play) { if (EN_PP_GET_TYPE(&this->actor) == EN_PP_TYPE_BODY_PART_BODY) { for (i = 0; i < 6; i++) { Math_Vec3f_Copy(&splashPos, &this->actor.world.pos); - splashPos.x += randPlusMinusPoint5Scaled(10 + (5 * i)); - splashPos.z += randPlusMinusPoint5Scaled(40 + (5 * i)); + splashPos.x += Rand_CenteredFloat(10 + (5 * i)); + splashPos.z += Rand_CenteredFloat(40 + (5 * i)); EffectSsGSplash_Spawn(play, &splashPos, NULL, NULL, 0, (Rand_ZeroOne() * 100.0f) + 400.0f); } } else { diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.c b/src/overlays/actors/ovl_En_Pr/z_en_pr.c index 30fd0ee15..98762c907 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -319,7 +319,7 @@ void func_80A32A40(EnPr* this, PlayState* play) { WaterBox* sp30; Math_Vec3f_Copy(&sp34, &this->actor.world.pos); - sp34.y = randPlusMinusPoint5Scaled(50.0f) + this->actor.home.pos.y; + sp34.y = Rand_CenteredFloat(50.0f) + this->actor.home.pos.y; if (WaterBox_GetSurface1(play, &play->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &this->unk_2B4, &sp30)) { @@ -551,9 +551,9 @@ void EnPr_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&sp40, &this->unk_2D4); this->unk_204 = 0; - sp40.x += randPlusMinusPoint5Scaled(20.0f); - sp40.y += randPlusMinusPoint5Scaled(5.0f); - sp40.z += randPlusMinusPoint5Scaled(20.0f); + sp40.x += Rand_CenteredFloat(20.0f); + sp40.y += Rand_CenteredFloat(5.0f); + sp40.z += Rand_CenteredFloat(20.0f); for (i = 0; i < (s32)Rand_ZeroFloat(5.0f) + 5; i++) { EffectSsBubble_Spawn(play, &sp40, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f); diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c index f4747b4c6..a4dd96d4b 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -390,8 +390,8 @@ void func_80A748E8(EnPr2* this, PlayState* play) { if (this->unk_1DA == 1) { this->unk_1D8 = Rand_S16Offset(100, 100); Math_Vec3f_Copy(&sp3C, &this->unk_228); - sp3C.x += randPlusMinusPoint5Scaled(300.0f); - sp3C.z += randPlusMinusPoint5Scaled(300.0f); + sp3C.x += Rand_CenteredFloat(300.0f); + sp3C.z += Rand_CenteredFloat(300.0f); Math_Vec3f_Copy(&this->unk_21C, &sp3C); } } else { @@ -536,7 +536,7 @@ void func_80A751B4(EnPr2* this) { this->actor.shape.rot.z = this->actor.world.rot.z; this->unk_1D8 = 30; this->actor.speed = Rand_ZeroFloat(0.5f); - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000); + this->actor.world.rot.y = Rand_CenteredFloat(0x8000); } Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 10); this->unk_1D4 = 3; @@ -596,9 +596,9 @@ void func_80A75310(EnPr2* this, PlayState* play) { for (i = 0; i < 10; i++) { Math_Vec3f_Copy(&sp64, &this->actor.world.pos); - sp64.x += randPlusMinusPoint5Scaled(20.0f); - sp64.y += randPlusMinusPoint5Scaled(5.0f); - sp64.z += randPlusMinusPoint5Scaled(20.0f); + sp64.x += Rand_CenteredFloat(20.0f); + sp64.y += Rand_CenteredFloat(5.0f); + sp64.z += Rand_CenteredFloat(20.0f); frame = Rand_ZeroFloat(0.03f) + 0.07f; EffectSsBubble_Spawn(play, &sp64, 0.0f, 5.0f, 5.0f, frame); @@ -675,9 +675,9 @@ void EnPr2_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&sp58, &this->unk_270); this->unk_1D6 = false; - sp58.x += randPlusMinusPoint5Scaled(20.0f); - sp58.y += randPlusMinusPoint5Scaled(5.0f); - sp58.z += randPlusMinusPoint5Scaled(20.0f); + sp58.x += Rand_CenteredFloat(20.0f); + sp58.y += Rand_CenteredFloat(5.0f); + sp58.z += Rand_CenteredFloat(20.0f); for (i = 0; i < 2; i++) { rand = Rand_ZeroFloat(0.03f) + 0.07f; diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.c b/src/overlays/actors/ovl_En_Prz/z_en_prz.c index d71de14f7..ef37cf9f0 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -127,7 +127,7 @@ void EnPrz_Init(Actor* thisx, PlayState* play) { this->unk_220 = &this->actor; this->unk_1EC = 255; - this->unk_202 = randPlusMinusPoint5Scaled((this->unk_1E6 * 100.0f) + 1000.0f); + this->unk_202 = Rand_CenteredFloat((this->unk_1E6 * 100.0f) + 1000.0f); func_80A76388(this); } @@ -176,7 +176,7 @@ void func_80A76070(EnPrz* this, s16 arg1, PlayState* play) { temp_s0 = -100; } - if (fabsf(this->actor.world.rot.y - (f32)arg1) < (randPlusMinusPoint5Scaled(20.0f) + 100.0f)) { + if (fabsf(this->actor.world.rot.y - (f32)arg1) < (Rand_CenteredFloat(20.0f) + 100.0f)) { Math_ApproachZeroF(&this->unk_218, 0.5f, 20.0f); } else { Math_ApproachF(&this->unk_218, temp_s0, 0.5f, 5.0f); @@ -218,7 +218,7 @@ s32 func_80A762C0(EnPrz* this, PlayState* play) { } void func_80A76388(EnPrz* this) { - this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f; + this->actor.speed = Rand_CenteredFloat(1.0f) + 4.0f; func_80A75F18(this, 0); this->unk_1EA = 1; this->actionFunc = func_80A763E8; @@ -251,11 +251,11 @@ void func_80A763E8(EnPrz* this, PlayState* play) { if ((this->unk_1EE == 0) && (this->unk_1F2 == 0)) { s16 rot; - this->unk_214 = randPlusMinusPoint5Scaled(40.0f); + this->unk_214 = Rand_CenteredFloat(40.0f); rot = BINANG_ROT180(this->unk_220->world.rot.y); this->unk_1D8.x += Math_SinS(rot) * this->unk_214; - this->unk_1D8.y = randPlusMinusPoint5Scaled(40.0f) + (this->unk_220->world.pos.y + 40.0f); + this->unk_1D8.y = Rand_CenteredFloat(40.0f) + (this->unk_220->world.pos.y + 40.0f); rot = BINANG_ROT180(this->unk_220->world.rot.y); this->unk_1D8.z += Math_CosS(rot) * this->unk_214; @@ -302,7 +302,7 @@ void func_80A76634(EnPrz* this, PlayState* play) { } void func_80A76748(EnPrz* this) { - this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 3.0f; + this->actor.speed = Rand_CenteredFloat(1.0f) + 3.0f; this->unk_1EE = 0; this->unk_1EA = 3; this->skelAnime.playSpeed = 2.0f; @@ -317,7 +317,7 @@ void func_80A767A8(EnPrz* this, PlayState* play) { if (func_80A762C0(this, play)) { func_80A75F18(this, 0); - this->actor.speed = randPlusMinusPoint5Scaled(1.0f) + 4.0f; + this->actor.speed = Rand_CenteredFloat(1.0f) + 4.0f; func_80A76604(this, play); return; } @@ -353,8 +353,8 @@ void func_80A767A8(EnPrz* this, PlayState* play) { this->unk_1C8 = 1; } - this->unk_1D8.y = (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) + - randPlusMinusPoint5Scaled((2.0f * this->unk_1E6) + 1.0f); + this->unk_1D8.y = + (player->actor.world.pos.y + D_80A771E0[GET_PLAYER_FORM]) + Rand_CenteredFloat((2.0f * this->unk_1E6) + 1.0f); func_80A76070(this, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_1D8), play); } @@ -374,7 +374,7 @@ void func_80A76A1C(EnPrz* this) { this->unk_1FE = this->actor.world.rot.y; this->actor.speed = Rand_ZeroFloat(0.5f); - this->actor.world.rot.y = randPlusMinusPoint5Scaled(0x8000); + this->actor.world.rot.y = Rand_CenteredFloat(0x8000); Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 30); this->unk_1EE = 50; @@ -409,9 +409,9 @@ void func_80A76B14(EnPrz* this, PlayState* play) { for (i = 0; i < 10; i++) { Math_Vec3f_Copy(&sp6C, &this->actor.world.pos); - sp6C.x += randPlusMinusPoint5Scaled(20.0f); - sp6C.y += randPlusMinusPoint5Scaled(5.0f); - sp6C.z += randPlusMinusPoint5Scaled(20.0f); + sp6C.x += Rand_CenteredFloat(20.0f); + sp6C.y += Rand_CenteredFloat(5.0f); + sp6C.z += Rand_CenteredFloat(20.0f); EffectSsBubble_Spawn(play, &sp6C, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f); } @@ -473,9 +473,9 @@ void EnPrz_Update(Actor* thisx, PlayState* play) { Math_Vec3f_Copy(&sp38, &this->unk_1CC); this->unk_1C8 = 0; - sp38.x += randPlusMinusPoint5Scaled(20.0f); - sp38.y += randPlusMinusPoint5Scaled(5.0f); - sp38.z += randPlusMinusPoint5Scaled(20.0f); + sp38.x += Rand_CenteredFloat(20.0f); + sp38.y += Rand_CenteredFloat(5.0f); + sp38.z += Rand_CenteredFloat(20.0f); EffectSsBubble_Spawn(play, &sp38, 0.0f, 5.0f, 5.0f, Rand_ZeroFloat(0.03f) + 0.07f); } diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index ba7676655..d4e83a388 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -275,8 +275,8 @@ s16 EnRacedog_GetYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ) if (path != NULL) { point = Lib_SegmentedToVirtual(path->points); point = &point[pointIndex]; - diffXRand = (randPlusMinusPoint5Scaled(100.0f) + point->x) - pos->x; - diffZRand = (randPlusMinusPoint5Scaled(100.0f) + point->z) - pos->z; + diffXRand = (Rand_CenteredFloat(100.0f) + point->x) - pos->x; + diffZRand = (Rand_CenteredFloat(100.0f) + point->z) - pos->z; diffX = point->x - pos->x; diffZ = point->z - pos->z; } else { @@ -474,9 +474,9 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) { // The dog is past the very start, but is still less than 1/4th of the way through the race track. // This code will give the blue dog a higher base speed than any other dog (6.0 instead of 5.0). if (sDogInfo[this->index].color == DOG_COLOR_BLUE) { - this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][0] + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][0] + Rand_CenteredFloat(1.0f); } else { - this->targetSpeed = 5.0f + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = 5.0f + Rand_CenteredFloat(1.0f); } if (DOG_IS_IN_GOOD_CONDITION(this) && (this->index != sFirstPlaceIndex)) { @@ -485,9 +485,9 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) { } else if (this->currentPoint < (quarterPathCount * 3)) { // The dog is between 1/4th and 3/4ths of the way through the race track. if (this->currentPoint < sDogInfo[this->index].pointToUseSecondBaseSpeed) { - this->targetSpeed = 5.0f + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = 5.0f + Rand_CenteredFloat(1.0f); } else { - this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][1] + randPlusMinusPoint5Scaled(1.0f); + this->targetSpeed = sBaseSpeeds[sDogInfo[this->index].color][1] + Rand_CenteredFloat(1.0f); if (DOG_IS_IN_GOOD_CONDITION(this) && (this->index != sFirstPlaceIndex)) { this->targetSpeed *= sDogInfo[this->index].goodConditionSpeedMultiplier; @@ -497,7 +497,7 @@ void EnRacedog_UpdateSpeed(EnRacedog* this) { // The dog is more than 3/4ths of the way through the race track. EnRacedog_CalculateFinalStretchTargetSpeed(this); } else { - this->targetSpeed = randPlusMinusPoint5Scaled(1.0f) + 5.0f; + this->targetSpeed = Rand_CenteredFloat(1.0f) + 5.0f; } } } @@ -657,9 +657,9 @@ void EnRacedog_SpawnFloorDustRing(EnRacedog* this, PlayState* play) { Vec3f pos; if (((this->index + curFrame) % mod) == 0) { - pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(15.0f); + pos.x = this->actor.world.pos.x + Rand_CenteredFloat(15.0f); pos.y = this->actor.world.pos.y; - pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(15.0f); + pos.z = this->actor.world.pos.z + Rand_CenteredFloat(15.0f); Actor_SpawnFloorDustRing(play, &this->actor, &pos, 10.0f, 0, 2.0f, 300, 0, true); } } diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index 055b308f2..1a4024f51 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -895,9 +895,9 @@ void EnRaf_InitializeEffect(EnRaf* this, Vec3f* pos, Vec3f* velocity, Vec3f* acc effect->accel = *accel; effect->scale = scale; effect->timer = timer; - effect->rotation.x = randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.y = randPlusMinusPoint5Scaled(30000.0f); - effect->rotation.z = randPlusMinusPoint5Scaled(30000.0f); + effect->rotation.x = Rand_CenteredFloat(30000.0f); + effect->rotation.y = Rand_CenteredFloat(30000.0f); + effect->rotation.z = Rand_CenteredFloat(30000.0f); return; } } diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 7d585c234..e08cb5574 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -230,7 +230,7 @@ s32 EnRat_UpdateFloorPoly(EnRat* this, CollisionPoly* floorPoly, PlayState* play return false; } - angle = func_80086C48(normDotUp); + angle = Math_FAcosF(normDotUp); if (angle < 0.001f) { return false; } @@ -324,9 +324,9 @@ void EnRat_ChooseDirection(EnRat* this) { angle -= 0x8000; } - angle += (s16)randPlusMinusPoint5Scaled(0x800); + angle += (s16)(s32)Rand_CenteredFloat(0x800); } else { - angle = (Rand_ZeroOne() < 0.1f) ? (s16)randPlusMinusPoint5Scaled(0x800) : 0; + angle = (Rand_ZeroOne() < 0.1f) ? (s16)(s32)Rand_CenteredFloat(0x800) : 0; } } @@ -633,9 +633,9 @@ void EnRat_UpdateSparkOffsets(EnRat* this) { for (i = 0; i < ARRAY_COUNT(this->sparkOffsets); i++) { ptr = &this->sparkOffsets[i]; - ptr->x = randPlusMinusPoint5Scaled(6.0f); - ptr->y = randPlusMinusPoint5Scaled(6.0f); - ptr->z = randPlusMinusPoint5Scaled(6.0f); + ptr->x = Rand_CenteredFloat(6.0f); + ptr->y = Rand_CenteredFloat(6.0f); + ptr->z = Rand_CenteredFloat(6.0f); } } @@ -937,14 +937,14 @@ void EnRat_PostLimbDraw(PlayState* play2, s32 limbIndex, Gfx** dList, Vec3s* rot gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gBombCapDL); if (EN_RAT_GET_TYPE(&this->actor) == EN_RAT_TYPE_DUNGEON) { - redModifier = fabsf(cos_rad(this->timer * (M_PI / 30.f))); + redModifier = fabsf(Math_CosF(this->timer * (M_PI / 30.f))); } else { if (this->timer >= 120) { - redModifier = fabsf(cos_rad((this->timer % 30) * (M_PI / 30.0f))); + redModifier = fabsf(Math_CosF((this->timer % 30) * (M_PI / 30.0f))); } else if (this->timer >= 30) { - redModifier = fabsf(cos_rad((this->timer % 6) * (M_PI / 6.0f))); + redModifier = fabsf(Math_CosF((this->timer % 6) * (M_PI / 6.0f))); } else { - redModifier = fabsf(cos_rad((this->timer % 3) * (M_PI / 3.0f))); + redModifier = fabsf(Math_CosF((this->timer % 3) * (M_PI / 3.0f))); } } diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index 351b2f146..dfff2735c 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -161,7 +161,7 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; } @@ -194,7 +194,7 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32 diffZ = points[currentPoint - 1].z - points[currentPoint + 1].z; } - func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(Math_FAtan2F(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; } diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index b34ee8c64..17ad656a4 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -417,9 +417,9 @@ void EnSb_Draw(Actor* thisx, PlayState* play) { fireDecr = this->fireCount - 1; if (!(fireDecr & 1)) { offset = &sFlamePosOffsets[fireDecr & 3]; - flamePos.x = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.x + offset->x); - flamePos.y = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.y + offset->y); - flamePos.z = randPlusMinusPoint5Scaled(5.0f) + (this->actor.world.pos.z + offset->z); + flamePos.x = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.x + offset->x); + flamePos.y = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.y + offset->y); + flamePos.z = Rand_CenteredFloat(5.0f) + (this->actor.world.pos.z + offset->z); EffectSsEnFire_SpawnVec3f(play, &this->actor, &flamePos, 100, 0, 0, -1); } } diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index 9779de80c..448683376 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -192,7 +192,7 @@ s32 func_80BCD334(EnScopecrow* this, Path* path, s32 pointIndex) { phi_fa1 = points[index + 1].z - points[index - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x); if (((this->actor.world.pos.x * sp3C.z) + (sp3C.y * this->actor.world.pos.z) + sp3C.x) > 0.0f) { ret = true; diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index 08b4b2817..cf634321e 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -654,7 +654,7 @@ s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_) { phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index e22791c82..73edc4267 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -916,7 +916,7 @@ s32 func_80ADCE4C(EnSellnuts* this, Path* path, s32 arg2) { pointY = points[var + 1].z - points[var - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(pointX, pointY)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index e67808d38..a8167009c 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -165,10 +165,10 @@ void func_809947B0(PlayState* play, EnSkb* this, Vec3f* inPos) { s32 pad; pos.y = this->actor.floorHeight; - pos.x = (sin_rad(sp40) * 15.0f) + inPos->x; - pos.z = (cos_rad(sp40) * 15.0f) + inPos->z; - accel.x = randPlusMinusPoint5Scaled(1.0f); - accel.z = randPlusMinusPoint5Scaled(1.0f); + pos.x = (Math_SinF(sp40) * 15.0f) + inPos->x; + pos.z = (Math_CosF(sp40) * 15.0f) + inPos->z; + accel.x = Rand_CenteredFloat(1.0f); + accel.z = Rand_CenteredFloat(1.0f); velocity.y += (Rand_ZeroOne() - 0.5f) * 4.0f; EffectSsHahen_Spawn(play, &pos, &velocity, &accel, 0, ((Rand_ZeroOne() * 5.0f) + 12.0f) * 0.8f, HAHEN_OBJECT_DEFAULT, 10, NULL); @@ -579,7 +579,7 @@ void func_80995A8C(EnSkb* this, PlayState* play) { } if ((this->unk_3D8 != 0) && ((play->gameplayFrames % 16) == 0)) { - this->unk_3DA = randPlusMinusPoint5Scaled(50000.0f); + this->unk_3DA = Rand_CenteredFloat(50000.0f); } Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer + this->unk_3DA, 1, 0x2EE, 0); diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.c b/src/overlays/actors/ovl_En_Slime/z_en_slime.c index 5c962978e..5e71d1a54 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -328,15 +328,15 @@ void EnSlime_Idle(EnSlime* this, PlayState* play) { timerFactor = sqrtf(this->timer) * 0.2f; EnSlime_Blink(this); - scale = ((sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f; + scale = ((Math_SinF(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f; this->actor.scale.x = scale; this->actor.scale.z = scale; if (this->timer < 24) { - this->actor.scale.y = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f; + this->actor.scale.y = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f; } - this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor; - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor; + this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * timerFactor; + this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * timerFactor; // If player is not wearing the stone mask, is within 280 units of the chuchu, // and the chuchu is facing the player, initialize chase/attack cycle. @@ -361,7 +361,7 @@ void EnSlime_SetupMoveInDirection(EnSlime* this) { if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 120.0f) { this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } else if (Rand_ZeroOne() < 0.7f) { - this->idleRotY = (s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.shape.rot.y; + this->idleRotY = (s32)Rand_CenteredFloat(0x4000) + this->actor.shape.rot.y; } this->actor.world.rot.y = this->actor.shape.rot.y; this->actionFunc = EnSlime_MoveInDirection; @@ -390,7 +390,7 @@ void EnSlime_MoveInDirection(EnSlime* this, PlayState* play) { } // Update actor scale, xz speed, and rotation to provide amorphous effect - sinFactor = fabsf(sin_rad(this->timer * (M_PI / 24))); + sinFactor = fabsf(Math_SinF(this->timer * (M_PI / 24))); Math_StepToF(&this->actor.scale.z, ((0.15f * sinFactor) + 1.0f) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * sinFactor)) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * sinFactor)) * 0.01f, 0.0002f); @@ -443,7 +443,7 @@ void EnSlime_MoveToHome(EnSlime* this, PlayState* play) { this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); } - timerFactor = fabsf(sin_rad(this->timer * (M_PI / 24))); + timerFactor = fabsf(Math_SinF(this->timer * (M_PI / 24))); Math_StepToF(&this->actor.scale.z, ((0.15f * timerFactor) + 1.0f) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * timerFactor)) * 0.01f, 0.0002f); Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * timerFactor)) * 0.01f, 0.0002f); @@ -567,14 +567,14 @@ void EnSlime_Land(EnSlime* this, PlayState* play) { this->timer--; scaleY = ((this->timer / 5) + 1) * 1.6f; rotXZ = sqrtf(this->timer) * 0.2f; - scaleXZ = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f; + scaleXZ = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f; this->actor.scale.x = scaleXZ; this->actor.scale.z = scaleXZ; if (this->timer < 15) { - this->actor.scale.y = (1.0f - (sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f; + this->actor.scale.y = (1.0f - (Math_SinF(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f; } - this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * rotXZ; - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * rotXZ; + this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * rotXZ; + this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * rotXZ; if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { EnSlime_SetupMoveToHome(this); @@ -623,16 +623,16 @@ void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play) { Math_StepToF(&this->actor.speed, 0.0f, 1.0f); timerFactor = sqrtf(this->timer); if (this->timer < 30) { - scale = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f; + scale = ((Math_CosF(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f; this->actor.scale.x = scale; this->actor.scale.z = scale; } if (this->timer == 15) { this->collider.base.acFlags |= AC_ON; } - this->actor.scale.y = ((sin_rad((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f; - this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor; - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor; + this->actor.scale.y = ((Math_SinF((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f; + this->actor.shape.rot.x = Rand_CenteredFloat(0x200) * timerFactor; + this->actor.shape.rot.z = Rand_CenteredFloat(0x200) * timerFactor; if (this->timer == 0) { if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { @@ -680,9 +680,9 @@ void EnSlime_SetupDamaged(EnSlime* this, PlayState* play, s32 arg2) { EffectSsGSplash_Spawn(play, &effectPos, NULL, NULL, 1, 550); for (i = 0; i < 10; i++) { - effectPos.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x + ySin; - effectPos.y = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.y + 40.0f; - effectPos.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z + yCos; + effectPos.x = Rand_CenteredFloat(40.0f) + this->actor.world.pos.x + ySin; + effectPos.y = Rand_CenteredFloat(10.0f) + this->actor.world.pos.y + 40.0f; + effectPos.z = Rand_CenteredFloat(40.0f) + this->actor.world.pos.z + yCos; effectVelocity.x = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_SinS(this->actor.world.rot.y); effectVelocity.z = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_CosS(this->actor.world.rot.y); @@ -1184,9 +1184,9 @@ void EnSlime_Draw(Actor* thisx, PlayState* play) { } if (this->actionFunc == EnSlime_Damaged) { - wobbleScale.x = 1.0f - (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f); - wobbleScale.y = (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f; - wobbleScale.z = 1.0f - (cos_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f); + wobbleScale.x = 1.0f - (Math_SinF((f32)this->timer * (M_PI / 2.0f)) * 0.3f); + wobbleScale.y = (Math_SinF((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f; + wobbleScale.z = 1.0f - (Math_CosF((f32)this->timer * (M_PI / 2.0f)) * 0.3f); Matrix_RotateXFApply(this->wobbleRot.x); Matrix_RotateZF(this->wobbleRot.z, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index ed3235345..e22a5a73b 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -475,18 +475,18 @@ void EnSnowman_ReadySnowball(EnSnowman* this, PlayState* play) { Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xA, 0x1000); if ((EN_SNOWMAN_GET_TYPE(&this->actor) != EN_SNOWMAN_TYPE_LARGE) && this->isHoldingSnowball && ((play->gameplayFrames % 2) != 0)) { - pos.x = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.x; - pos.y = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.y; - pos.z = randPlusMinusPoint5Scaled(10.0f) + this->snowballPos.z; + pos.x = Rand_CenteredFloat(10.0f) + this->snowballPos.x; + pos.y = Rand_CenteredFloat(10.0f) + this->snowballPos.y; + pos.z = Rand_CenteredFloat(10.0f) + this->snowballPos.z; func_800B0DE0(play, &pos, &sDustVelocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 500, 30); } else if (EN_SNOWMAN_GET_TYPE(&this->actor) == EN_SNOWMAN_TYPE_LARGE) { if ((this->skelAnime.curFrame > 3.0f) && (this->skelAnime.curFrame < 14.0f) && ((play->gameplayFrames % 2) != 0)) { - pos.x = (this->actor.world.pos.x + (70.0f * Math_SinS(this->actor.shape.rot.y))) + - randPlusMinusPoint5Scaled(40.0f); - pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(20.0f); - pos.z = (this->actor.world.pos.z + (70.0f * Math_CosS(this->actor.shape.rot.y))) + - randPlusMinusPoint5Scaled(40.0f); + pos.x = + (this->actor.world.pos.x + (70.0f * Math_SinS(this->actor.shape.rot.y))) + Rand_CenteredFloat(40.0f); + pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f); + pos.z = + (this->actor.world.pos.z + (70.0f * Math_CosS(this->actor.shape.rot.y))) + Rand_CenteredFloat(40.0f); func_800B0DE0(play, &pos, &sDustVelocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 1000, 150); } } @@ -619,8 +619,8 @@ void EnSnowman_Melt(EnSnowman* this, PlayState* play) { this->work.timer--; if ((this->work.timer >= 38) && (!(this->work.timer & 1))) { smokeVelocity.y = (this->work.timer - 38) * (1.0f / 12.0f); - smokeVelocity.x = randPlusMinusPoint5Scaled(1.5f) * smokeVelocity.y; - smokeVelocity.z = randPlusMinusPoint5Scaled(1.5f) * smokeVelocity.y; + smokeVelocity.x = Rand_CenteredFloat(1.5f) * smokeVelocity.y; + smokeVelocity.z = Rand_CenteredFloat(1.5f) * smokeVelocity.y; smokeVelocity.y += 0.8f; smokePos.x = ((smokeVelocity.x >= 0.0f ? 1.0f : -1.0f) * Rand_ZeroFloat(20.0f) * this->eenoScale) + this->actor.world.pos.x; 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 e86d1e1bd..12d8d22a8 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -536,9 +536,9 @@ void func_80BAB374(EnSuttari* this, PlayState* play) { Vec3f sp38; if ((curFrame % 3) == 0) { - sp38.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x; + sp38.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x; sp38.y = this->actor.world.pos.y; - sp38.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z; + sp38.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z; Actor_SpawnFloorDustRing(play, &this->actor, &sp38, 10.0f, 0, 2.0f, 0, 0, 0); } } @@ -623,7 +623,7 @@ s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) { sp54 = sp5C[index + 1].x - sp5C[index - 1].x; sp48 = sp5C[index + 1].z - sp5C[index - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(sp54, sp48)), &sp44, &sp40, &sp3C); if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } @@ -653,7 +653,7 @@ s32 func_80BAB8F4(EnSuttari* this, Path* path, s32 arg2) { sp54 = sp5C[index - 1].x - sp5C[index + 1].x; sp48 = sp5C[index - 1].z - sp5C[index + 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(sp54, sp48)), &sp44, &sp40, &sp3C); if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index a705a8546..4937125dc 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -304,7 +304,7 @@ s32 func_808D91C4(EnSw* this, CollisionPoly* arg1) { return false; } - sp4C = func_80086C48(temp_f12); + sp4C = Math_FAcosF(temp_f12); if (sp4C < 0.001f) { return false; } diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c index 5f5194523..af419ba23 100644 --- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c +++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c @@ -292,9 +292,9 @@ s32 EnSyatekiCrow_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, EnSyatekiCrow* this = THIS; if (limbIndex == OBJECT_CROW_LIMB_UPPER_TAIL) { - rot->y += (s16)(0xC00 * sin_rad(this->skelAnime.curFrame * (M_PI / 4))); + rot->y += (s16)(0xC00 * Math_SinF(this->skelAnime.curFrame * (M_PI / 4))); } else if (limbIndex == OBJECT_CROW_LIMB_TAIL) { - rot->y += (s16)(0x1400 * sin_rad((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); + rot->y += (s16)(0x1400 * Math_SinF((this->skelAnime.curFrame + 2.5f) * (M_PI / 4))); } return false; diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 324307d8a..91ed08140 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -404,7 +404,7 @@ void func_80A36CB0(EnSyatekiOkuta* this) { } } else if (this->actionFunc == func_80A36488) { this->unk_1D8.x = this->unk_1D8.z = 1.0f; - this->unk_1D8.y = (sin_rad((M_PI / 16) * curFrame) * 0.2f) + 1.0f; + this->unk_1D8.y = (Math_SinF((M_PI / 16) * curFrame) * 0.2f) + 1.0f; } else if (this->actionFunc == func_80A36504) { if (curFrame < 3.0f) { this->unk_1D8.y = 1.0f; @@ -440,7 +440,7 @@ s32 func_80A370EC(EnSyatekiOkuta* this, f32 arg1, Vec3f* arg2) { if (this->actionFunc == func_80A363B4) { arg2->y = 1.0f; arg2->z = 1.0f; - arg2->x = (sin_rad((M_PI / 16) * arg1) * 0.4f) + 1.0f; + arg2->x = (Math_SinF((M_PI / 16) * arg1) * 0.4f) + 1.0f; } else if (this->actionFunc == func_80A365EC) { if ((arg1 >= 35.0f) || (arg1 < 25.0f)) { return false; diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index 52aa71cad..347d78088 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -408,9 +408,9 @@ void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play) { s32 i; for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i--) { - firePos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - firePos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - firePos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + firePos.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + firePos.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + firePos.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &firePos, &sFireVelocityAndAccel, &sFireVelocityAndAccel, 100, 0, 2); } } diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c index 495c16c13..c71676061 100644 --- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c +++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c @@ -248,9 +248,9 @@ void func_80BB5318(EnTanron1* this, PlayState* play) { ptr->unk_20 = Math_Atan2S(temp.x, temp.z); ptr->unk_1E = Math_Atan2S(temp.y, sqrtf(SQXZ(temp))); if ((ptr->unk_26 & 0xF) == 0) { - ptr->unk_30 = randPlusMinusPoint5Scaled(temp_f30); - ptr->unk_34 = randPlusMinusPoint5Scaled(temp_f30 * 0.5f); - ptr->unk_38 = randPlusMinusPoint5Scaled(temp_f30); + ptr->unk_30 = Rand_CenteredFloat(temp_f30); + ptr->unk_34 = Rand_CenteredFloat(temp_f30 * 0.5f); + ptr->unk_38 = Rand_CenteredFloat(temp_f30); } temp.x = player->actor.world.pos.x - ptr->unk_00.x; @@ -336,7 +336,7 @@ void func_80BB5318(EnTanron1* this, PlayState* play) { Math_ApproachF(&ptr->unk_30, ptr->unk_34, 1.0f, 0.5f); if ((ptr->unk_26 & 0xF) == 0) { if (Rand_ZeroOne() < 0.5f) { - ptr->unk_34 = randPlusMinusPoint5Scaled(12.0f); + ptr->unk_34 = Rand_CenteredFloat(12.0f); } ptr->unk_3C = BgCheck_EntityRaycastFloor1(&play->colCtx, &sp98, &ptr->unk_00); sp9C = ptr->unk_00.y; diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c index dd4f389a3..785308dad 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -236,7 +236,7 @@ void func_80BB6BD8(EnTanron2* this, PlayState* play) { switch (this->unk_158) { case 0: if (Rand_ZeroOne() > 0.2f) { - sp32 = Rand_ZeroFloat(65536.0f); + sp32 = Rand_ZeroFloat(0x10000); } else { sp32 = Math_Atan2S(sp2C, sp28); } diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c index b86b9c714..81a4ac2af 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -100,8 +100,8 @@ void EnTanron3_CreateEffect(PlayState* play, Vec3f* effectPos) { effectPtr->unk_34.y = 0.0f; effectPtr->unk_34.z = Rand_ZeroFloat(2 * M_PI); effectPtr->unk_02 = Rand_ZeroFloat(100.0f); - effectPtr->velocity.x = randPlusMinusPoint5Scaled(25.0f); - effectPtr->velocity.z = randPlusMinusPoint5Scaled(25.0f); + effectPtr->velocity.x = Rand_CenteredFloat(25.0f); + effectPtr->velocity.z = Rand_CenteredFloat(25.0f); break; } } @@ -155,9 +155,9 @@ void EnTanron3_SetupLive(EnTanron3* this, PlayState* play) { this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = 50; this->actor.speed = 5.0f; this->speedMaxStep = 0.5f; - this->deviation.x = randPlusMinusPoint5Scaled(500.0f); - this->deviation.y = randPlusMinusPoint5Scaled(100.0f); - this->deviation.z = randPlusMinusPoint5Scaled(500.0f); + this->deviation.x = Rand_CenteredFloat(500.0f); + this->deviation.y = Rand_CenteredFloat(100.0f); + this->deviation.z = Rand_CenteredFloat(500.0f); Math_Vec3f_Copy(&this->targetPos, &this->actor.world.pos); this->timer = Rand_ZeroFloat(100.0f); } @@ -245,9 +245,9 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { if (this->workTimer[WORK_TIMER_OUT_OF_WATER] == 0) { if ((this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] == 0) && (this->actor.speed > 1.0f)) { this->workTimer[WORK_TIMER_PICK_NEW_DEVIATION] = Rand_ZeroFloat(20.0f); - this->deviation.x = randPlusMinusPoint5Scaled(100.0f); - this->deviation.y = randPlusMinusPoint5Scaled(50.0f + extraScaleY); - this->deviation.z = randPlusMinusPoint5Scaled(100.0f); + this->deviation.x = Rand_CenteredFloat(100.0f); + this->deviation.y = Rand_CenteredFloat(50.0f + extraScaleY); + this->deviation.z = Rand_CenteredFloat(100.0f); } this->targetPosWithDeviation.y = this->targetPos.y + this->deviation.y + 50.0f; } @@ -297,17 +297,17 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { this->actor.speed = Rand_ZeroFloat(2.0f) + 2.0f; if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.x = - (s16)randPlusMinusPoint5Scaled(500.0f) + this->targetShapeRotation.x + 0x8000; + (s16)(s32)Rand_CenteredFloat(0x1F4) + this->targetShapeRotation.x + 0x8000; } if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.z = - (s16)randPlusMinusPoint5Scaled(500.0f) + this->targetShapeRotation.z + 0x8000; + (s16)(s32)Rand_CenteredFloat(0x1F4) + this->targetShapeRotation.z + 0x8000; } if (Rand_ZeroOne() < 0.5f) { this->targetShapeRotation.y = (s16)Rand_ZeroFloat(0x10000); } this->actor.world.rot.y = Math_Atan2S_XY(this->actor.world.pos.z, this->actor.world.pos.x) + - (s16)randPlusMinusPoint5Scaled(0xCE20); + (s16)(s32)Rand_CenteredFloat(0xCE20); } Math_ApproachS(&this->actor.shape.rot.y, this->targetShapeRotation.y, 3, 0x500); @@ -316,9 +316,9 @@ void EnTanron3_Live(EnTanron3* this, PlayState* play) { if ((Rand_ZeroOne() < 0.5f) & !(this->timer & 0x3)) { Vec3f effectPos; - effectPos.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.x; + effectPos.x = Rand_CenteredFloat(30.0f) + this->actor.world.pos.x; effectPos.y = this->actor.world.pos.y; - effectPos.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.world.pos.z; + effectPos.z = Rand_CenteredFloat(30.0f) + this->actor.world.pos.z; EnTanron3_CreateEffect(play, &effectPos); } break; diff --git a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c index 5c62c50ee..074eaec79 100644 --- a/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c +++ b/src/overlays/actors/ovl_En_Tanron4/z_en_tanron4.c @@ -65,10 +65,9 @@ void EnTanron4_Init(Actor* thisx, PlayState* play2) { s32 i; for (i = 0; i < thisx->params; i++) { - Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON4, - thisx->world.pos.x + randPlusMinusPoint5Scaled(500.0f), - thisx->world.pos.y + randPlusMinusPoint5Scaled(100.0f), - thisx->world.pos.z + randPlusMinusPoint5Scaled(500.0f), 0, Rand_ZeroFloat(65536.0f), 0, + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON4, thisx->world.pos.x + Rand_CenteredFloat(500.0f), + thisx->world.pos.y + Rand_CenteredFloat(100.0f), + thisx->world.pos.z + Rand_CenteredFloat(500.0f), 0, Rand_ZeroFloat(0x10000), 0, SEAGULL_CLONE); } } @@ -112,9 +111,9 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) { distToTarget = sqrtf(SQ(xDiff) + SQ(zDiff)); if ((this->timers[SEAGULL_TIMER_CHOOSE_TARGET] == 0) || (distToTarget < 100.0f)) { - this->targetPos.x = this->actor.home.pos.x + randPlusMinusPoint5Scaled(500.0f); - this->targetPos.y = this->actor.home.pos.y + randPlusMinusPoint5Scaled(100.0f); - this->targetPos.z = this->actor.home.pos.z + randPlusMinusPoint5Scaled(500.0f); + this->targetPos.x = this->actor.home.pos.x + Rand_CenteredFloat(500.0f); + this->targetPos.y = this->actor.home.pos.y + Rand_CenteredFloat(100.0f); + this->targetPos.z = this->actor.home.pos.z + Rand_CenteredFloat(500.0f); this->timers[SEAGULL_TIMER_CHOOSE_TARGET] = Rand_ZeroFloat(100.0f) + 60.0f; this->step = 0; @@ -151,7 +150,7 @@ void EnTanron4_FlyNearHome(EnTanron4* this, PlayState* play) { case SEAGULL_FLY_GLIDE: if (((this->randRollTimer % 8) == 0) && (Rand_ZeroOne() < 0.5f)) { - this->rollTarget = randPlusMinusPoint5Scaled(3000.0f + KREG(44)); + this->rollTarget = Rand_CenteredFloat(3000.0f + KREG(44)); } if (this->timers[SEAGULL_TIMER_FLY_STATE] == 0) { @@ -192,9 +191,9 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) { distToTarget = sqrtf(SQ(xDiff) + SQ(zDiff)); if ((this->timers[SEAGULL_TIMER_CHOOSE_TARGET] == 0) || (distToTarget < 100.0f)) { - this->targetPos.x = targetActor->world.pos.x + randPlusMinusPoint5Scaled(200.0f + KREG(82)); - this->targetPos.y = targetActor->world.pos.y + KREG(80) + 100.0f + randPlusMinusPoint5Scaled(100.0f + KREG(81)); - this->targetPos.z = targetActor->world.pos.z + randPlusMinusPoint5Scaled(200.0f + KREG(82)); + this->targetPos.x = targetActor->world.pos.x + Rand_CenteredFloat(200.0f + KREG(82)); + this->targetPos.y = targetActor->world.pos.y + KREG(80) + 100.0f + Rand_CenteredFloat(100.0f + KREG(81)); + this->targetPos.z = targetActor->world.pos.z + Rand_CenteredFloat(200.0f + KREG(82)); this->timers[SEAGULL_TIMER_CHOOSE_TARGET] = Rand_ZeroFloat(100.0f) + 60.0f; this->step = 0; @@ -230,7 +229,7 @@ void EnTanron4_FlyNearActor(EnTanron4* this, PlayState* play) { case SEAGULL_FLY_GLIDE: if (((this->randRollTimer % 8) == 0) && (Rand_ZeroOne() < 0.5f)) { - this->rollTarget = randPlusMinusPoint5Scaled(3000.0f + KREG(44)); + this->rollTarget = Rand_CenteredFloat(3000.0f + KREG(44)); } if (this->timers[SEAGULL_TIMER_FLY_STATE] == 0) { diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c index 18e24c5e7..a56b01c3b 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -101,9 +101,9 @@ void func_80BE4930(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { effect->unk_00 = *arg1; - effect->unk_0C = randPlusMinusPoint5Scaled(10.0f); + effect->unk_0C = Rand_CenteredFloat(10.0f); effect->unk_10 = Rand_ZeroFloat(2.0f) + 3.0f; - effect->unk_14 = randPlusMinusPoint5Scaled(10.0f); + effect->unk_14 = Rand_CenteredFloat(10.0f); effect->unk_18.y = -0.15f; effect->unk_18.x = 0.0f; @@ -127,9 +127,9 @@ void func_80BE4A2C(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) { effect->unk_00 = *arg1; - effect->unk_0C = randPlusMinusPoint5Scaled(30.0f); + effect->unk_0C = Rand_CenteredFloat(30.0f); effect->unk_10 = Rand_ZeroFloat(7.0f); - effect->unk_14 = randPlusMinusPoint5Scaled(30.0f); + effect->unk_14 = Rand_CenteredFloat(30.0f); effect->unk_18.y = -0.3f; effect->unk_18.x = 0.0f; @@ -154,8 +154,8 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { return; } - this->unk_198 = randPlusMinusPoint5Scaled(0x2000); - this->unk_19A = randPlusMinusPoint5Scaled(0x2000); + this->unk_198 = Rand_CenteredFloat(0x2000); + this->unk_19A = Rand_CenteredFloat(0x2000); if (ENTANRON5_GET(&this->actor) < ENTANRON5_107) { Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * D_80BE5DD0); @@ -327,8 +327,8 @@ void EnTanron5_Update(Actor* thisx, PlayState* play2) { spAC = 50.0f; } - sp9C.x = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.x; - sp9C.z = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.z; + sp9C.x = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.x; + sp9C.z = (Rand_CenteredFloat(spA8) * D_80BE5DD0) + spB8.z; sp9C.y = this->actor.floorHeight + (spAC * D_80BE5DD0); Actor_Spawn(&play->actorCtx, play, ACTOR_EN_TANRON5, sp9C.x, sp9C.y, sp9C.z, diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index 2bef1cda2..87589ae8c 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -193,12 +193,12 @@ void func_80C10984(EnThiefbird* this, s32 arg1) { for (i = 0; i < ARRAY_COUNT(this->unk_3F0); i++, ptr++) { if (ptr->unk_22 == 0) { ptr->unk_22 = (s32)Rand_ZeroFloat(20.0f) + 40; - ptr->unk_00.x = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.x; - ptr->unk_00.y = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.y; - ptr->unk_00.z = randPlusMinusPoint5Scaled(30.0f) + this->actor.focus.pos.z; - ptr->unk_0C.x = randPlusMinusPoint5Scaled(5.0f); + ptr->unk_00.x = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.x; + ptr->unk_00.y = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.y; + ptr->unk_00.z = Rand_CenteredFloat(30.0f) + this->actor.focus.pos.z; + ptr->unk_0C.x = Rand_CenteredFloat(5.0f); ptr->unk_0C.y = Rand_ZeroOne() + 2.0f; - ptr->unk_0C.z = randPlusMinusPoint5Scaled(5.0f); + ptr->unk_0C.z = Rand_CenteredFloat(5.0f); ptr->unk_1C = Rand_ZeroFloat(1000.0f); ptr->unk_18 = (Rand_ZeroFloat(20.0f) + 40.0f) * 0.0001f; ptr->unk_1E = (s32)Rand_Next() >> 0x10; diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c index cfae13191..1ae0e073b 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -253,9 +253,9 @@ void func_80893BCC(EnTite* this, PlayState* play) { for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) { for (j = 0; j < 2; j++) { ptr = &this->limbPos[i]; - sp7C.x = ptr->x + randPlusMinusPoint5Scaled(1.0f); - sp7C.y = ptr->y + randPlusMinusPoint5Scaled(1.0f); - sp7C.z = ptr->z + randPlusMinusPoint5Scaled(1.0f); + sp7C.x = ptr->x + Rand_CenteredFloat(1.0f); + sp7C.y = ptr->y + Rand_CenteredFloat(1.0f); + sp7C.z = ptr->z + Rand_CenteredFloat(1.0f); func_800B0DE0(play, &sp7C, &gZeroVec3f, &D_80896B64, &D_80896B3C, &D_80896B40, (s32)Rand_ZeroFloat(16.0f) + 80, 15); } @@ -808,9 +808,9 @@ void func_80895738(EnTite* this, PlayState* play) { void func_8089595C(EnTite* this, PlayState* play) { Vec3f sp2C; - sp2C.x = randPlusMinusPoint5Scaled(20.0f) + this->actor.world.pos.x; + sp2C.x = Rand_CenteredFloat(20.0f) + this->actor.world.pos.x; sp2C.y = this->actor.world.pos.y + 15.0f; - sp2C.z = randPlusMinusPoint5Scaled(20.0f) + this->actor.world.pos.z; + sp2C.z = Rand_CenteredFloat(20.0f) + this->actor.world.pos.z; func_800B0DE0(play, &sp2C, &gZeroVec3f, &D_80896B44, &D_80896B3C, &D_80896B40, 500, 50); } diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index bf0f9cc31..29560fdce 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -499,9 +499,9 @@ void func_80AD434C(EnTrt2* this, PlayState* play) { Vec3f sp5C = { 0.0f, 0.5f, 0.0f }; for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i -= 2) { - sp68.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - sp68.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - sp68.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + sp68.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + sp68.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + sp68.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &sp68, &sp5C, &sp5C, 100, 0, 3); } @@ -592,7 +592,7 @@ s32 func_80AD475C(EnTrt2* this, Path* path, s32 arg2) { phi_f14 = points[arg + 1].z - points[arg - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; @@ -639,9 +639,9 @@ f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) { void func_80AD4A78(EnTrt2* this, PlayState* play) { Vec3f sp34; - sp34.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x; + sp34.x = Rand_CenteredFloat(15.0f) + this->actor.world.pos.x; sp34.y = this->actor.world.pos.y; - sp34.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z; + sp34.z = Rand_CenteredFloat(15.0f) + this->actor.world.pos.z; Actor_SpawnFloorDustRing(play, &this->actor, &sp34, 50.0f, 0, 2.0f, 0, 0, 0); } diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index 6cd2641a1..f877a26a8 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -301,7 +301,7 @@ s32 func_80B76600(EnTruMt* this, Path* path, s32 arg2) { phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z; } - func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(Math_FAtan2F(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; } diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c index b14f82424..c8ec8f8c4 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c @@ -159,9 +159,9 @@ void EnWaterEffect_Update(Actor* thisx, PlayState* play2) { if ((this->unk_DC4 % 32) == 0) { if (Rand_ZeroOne() < 0.5f) { Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); - sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; + sp88.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x; sp88.y = this->actor.world.pos.y; - sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; + sp88.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z; if ((this->actor.world.pos.y + this->actor.depthInWater) <= this->actor.floorHeight) { phi_v1 = 0; } else { @@ -367,9 +367,9 @@ void func_80A599E8(EnWaterEffect* this, Vec3f* arg1, u8 arg2) { if (arg2 >= 2) { if (arg2 == 2) { - ptr->unk_10.x = randPlusMinusPoint5Scaled(10.0f); + ptr->unk_10.x = Rand_CenteredFloat(10.0f); ptr->unk_10.y = Rand_ZeroFloat(3.0f) + 5.0f; - ptr->unk_10.z = randPlusMinusPoint5Scaled(10.0f); + ptr->unk_10.z = Rand_CenteredFloat(10.0f); } ptr->unk_2C.z = 0.0017f; ptr->unk_2C.x = 0.003f; @@ -421,9 +421,9 @@ void func_80A59C04(Actor* thisx, PlayState* play2) { if (this->unk_DC6 == 0) { this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f; Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); - sp74.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; + sp74.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x; sp74.y = this->actor.world.pos.y; - sp74.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; + sp74.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z; func_80A599E8(this, &sp74, 0); } } diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c index b05bc4869..26301730f 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -489,9 +489,9 @@ void func_80990C6C(EnWf* this, PlayState* play, s32 arg2) { } for (i = 0; i < arg2; i++) { - sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; + sp88.x = Rand_CenteredFloat(50.0f) + this->actor.world.pos.x; sp88.y = Rand_ZeroFloat(5.0f) + this->actor.world.pos.y; - sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; + sp88.z = Rand_CenteredFloat(50.0f) + this->actor.world.pos.z; func_800B0F18(play, &sp88, &gZeroVec3f, &D_809942DC, phi_s1, phi_s1, phi_s6, 5, Rand_ZeroFloat(5.0f) + 14.0f); } @@ -1199,9 +1199,9 @@ void func_80992E0C(EnWf* this, PlayState* play) { this->unk_2A0--; for (i = (25 - this->unk_2A0) >> 1; i >= 0; i--) { - sp60.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - sp60.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - sp60.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + sp60.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + sp60.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + sp60.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &sp60, &D_809942F0, &D_809942F0, 100, 0, 2); } diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 7fd55f4ee..6ce68a0e3 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1297,7 +1297,7 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) { scaleStep = Rand_S16Offset(20, 10); Math_Vec3f_Copy(&pos, &this->ghostPos[i]); pos.x += (f32)Rand_S16Offset(20, 20) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1); - pos.y += 70.0f + randPlusMinusPoint5Scaled(30.0f); + pos.y += 70.0f + Rand_CenteredFloat(30.0f); pos.z += (f32)Rand_S16Offset(20, 20) * ((Rand_ZeroOne() < 0.5f) ? -1 : 1); func_800B0DE0(play, &pos, &velocity, &accel, &sDustPrimColor, &sDustEnvTimer, Rand_S16Offset(350, 100), scaleStep); @@ -1419,9 +1419,9 @@ void EnWiz_PostLimbDrawXlu(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_MultVec3f(&staffFlamePos, &flamePos); - flamePos.x += randPlusMinusPoint5Scaled(4.0f); - flamePos.y += randPlusMinusPoint5Scaled(7.0f); - flamePos.z += randPlusMinusPoint5Scaled(5.0f); + flamePos.x += Rand_CenteredFloat(4.0f); + flamePos.y += Rand_CenteredFloat(7.0f); + flamePos.z += Rand_CenteredFloat(5.0f); func_800B3030(play, &flamePos, &gZeroVec3f, &gZeroVec3f, ((Rand_ZeroFloat(1.0f) * 50.0f) + 70.0f), 10, 1); SoundSource_PlaySfxAtFixedWorldPos(play, &flamePos, 10, NA_SE_EN_EXTINCT); } diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index 8251a896b..e6fc7e776 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -152,7 +152,7 @@ void EnWiz_SetupMoveMagicProjectile(EnWizFire* this, PlayState* play) { Matrix_RotateXS(this->actor.world.rot.x, MTXMODE_APPLY); if (this->type != EN_WIZ_FIRE_TYPE_MAGIC_PROJECTILE) { - velocity.z = randPlusMinusPoint5Scaled(2.0f) + 8.0f; + velocity.z = Rand_CenteredFloat(2.0f) + 8.0f; } else { velocity.z = 12.0f; } @@ -223,8 +223,8 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) { this->increaseLowestUsedIndexTimer = 10; Matrix_Push(); - Matrix_RotateYS((s16)randPlusMinusPoint5Scaled(0x100) + this->actor.world.rot.y, MTXMODE_NEW); - velocity.z = randPlusMinusPoint5Scaled(2.0f) + 8.0f; + Matrix_RotateYS((s16)(s32)Rand_CenteredFloat(0x100) + this->actor.world.rot.y, MTXMODE_NEW); + velocity.z = Rand_CenteredFloat(2.0f) + 8.0f; Matrix_MultVec3f(&velocity, &this->actor.velocity); Matrix_Pop(); @@ -257,7 +257,7 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WIZ_FIRE, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, 0, arcingProjectileRotY, 0, EN_WIZ_FIRE_TYPE_ARCING_MAGIC_PROJECTILE); - arcingProjectileRotY += BINANG_ADD((s32)randPlusMinusPoint5Scaled(0x1000), 0x3333); + arcingProjectileRotY += BINANG_ADD((s32)Rand_CenteredFloat(0x1000), 0x10000 / 5); } Actor_PlaySfx(&this->actor, NA_SE_IT_BOMB_EXPLOSION); @@ -313,9 +313,9 @@ void EnWiz_MoveMagicProjectile(EnWizFire* this, PlayState* play) { void EnWiz_SetupSmallFlame(EnWizFire* this, PlayState* play) { this->targetScale = 0.02f; this->timer = Rand_S16Offset(50, 50); - this->scaleMod.x = randPlusMinusPoint5Scaled(1.0f) * 0.007f; - this->scaleMod.y = randPlusMinusPoint5Scaled(1.0f) * 0.005f; - this->scaleMod.z = randPlusMinusPoint5Scaled(1.0f) * 0.007f; + this->scaleMod.x = Rand_CenteredFloat(1.0f) * 0.007f; + this->scaleMod.y = Rand_CenteredFloat(1.0f) * 0.005f; + this->scaleMod.z = Rand_CenteredFloat(1.0f) * 0.007f; this->actionFunc = EnWiz_SmallFlame; } @@ -379,13 +379,13 @@ void EnWiz_Pool(EnWizFire* this, PlayState* play) { Vec3f accel = { 0.0f, 0.0f, 0.0f }; Vec3f pos; - accel.x = randPlusMinusPoint5Scaled(3.0f) / 10.0f; + accel.x = Rand_CenteredFloat(3.0f) / 10.0f; accel.y = 0.23f; - accel.z = randPlusMinusPoint5Scaled(3.0f) / 10.0f; + accel.z = Rand_CenteredFloat(3.0f) / 10.0f; Math_Vec3f_Copy(&pos, &this->actor.world.pos); - pos.x += randPlusMinusPoint5Scaled(150.0f); - pos.z += randPlusMinusPoint5Scaled(150.0f); + pos.x += Rand_CenteredFloat(150.0f); + pos.z += Rand_CenteredFloat(150.0f); Math_ApproachF(&this->poolScale, 0.022f, 0.3f, 0.01f); this->collider.dim.radius = this->poolScale * 4300.0f; diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index 874e0a63e..cf4331ffa 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -264,8 +264,8 @@ void EnWood02_Init(Actor* thisx, PlayState* play) { case WOOD_LEAF_YELLOW: this->unk_14A[0] = 75; actorScale = 0.02f; - this->actor.velocity.x = randPlusMinusPoint5Scaled(6.0f); - this->actor.velocity.z = randPlusMinusPoint5Scaled(6.0f); + this->actor.velocity.x = Rand_CenteredFloat(6.0f); + this->actor.velocity.z = Rand_CenteredFloat(6.0f); this->actor.velocity.y = (Rand_ZeroOne() * 1.25f) + -3.1f; break; } @@ -409,7 +409,7 @@ void EnWood02_Update(Actor* thisx, PlayState* play2) { for (i = 3; i >= 0; i--) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_WOOD02, dropsSpawnPt.x, dropsSpawnPt.y, dropsSpawnPt.z, - 0, randPlusMinusPoint5Scaled(0xFFFF), 0, leavesParams); + 0, Rand_CenteredFloat(0xFFFF), 0, leavesParams); } } diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 1dbe5d2e8..9df560150 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -242,9 +242,9 @@ void EnYb_Disappear(EnYb* this, PlayState* play) { EnYb_UpdateAnimation(this, play); for (i = 3; i >= 0; i--) { - sp60.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x; - sp60.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z; - sp60.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f); + sp60.x = Rand_CenteredFloat(60.0f) + this->actor.world.pos.x; + sp60.z = Rand_CenteredFloat(60.0f) + this->actor.world.pos.z; + sp60.y = Rand_CenteredFloat(50.0f) + (this->actor.world.pos.y + 20.0f); func_800B3030(play, &sp60, &D_80BFB2E8, &D_80BFB2E8, 100, 0, 2); } diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index 979187532..96de52b88 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -394,9 +394,9 @@ void func_80B93D2C(EnZog* this, PlayState* play) { void func_80B93DE8(Vec3f* arg0, PlayState* play, s32 arg2) { Vec3f sp2C; - sp2C.x = randPlusMinusPoint5Scaled(30.0f) + arg0->x; + sp2C.x = Rand_CenteredFloat(30.0f) + arg0->x; sp2C.y = arg0->y + 3.0f; - sp2C.z = randPlusMinusPoint5Scaled(30.0f) + arg0->z; + sp2C.z = Rand_CenteredFloat(30.0f) + arg0->z; EffectSsKirakira_SpawnDispersed(play, &sp2C, &D_80B9598C, &D_80B95998, &D_80B959A4, &D_80B959A8, 1000, arg2); } @@ -865,9 +865,9 @@ void func_80B94E34(EnZog* this, PlayState* play) { Vec3f sp38; Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80B959AC, &sp38); - sp38.x += randPlusMinusPoint5Scaled(30.0f); + sp38.x += Rand_CenteredFloat(30.0f); sp38.y += 20.0f; - sp38.z += randPlusMinusPoint5Scaled(30.0f); + sp38.z += Rand_CenteredFloat(30.0f); if (WaterBox_GetSurface1(play, &play->colCtx, sp38.x, sp38.z, &sp38.y, &sp44) && (this->actor.world.pos.y < sp38.y)) { EffectSsGSplash_Spawn(play, &sp38, NULL, NULL, 1, diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c index 85468c59c..61805fd49 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c @@ -159,13 +159,13 @@ void func_80AE8DE4(ObjBigicicle* this, PlayState* play) { f32 temp_f20 = this->actor.scale.x * (50.0f / 3.0f); for (i = 0; i < 10; i++) { - sp98.x = (randPlusMinusPoint5Scaled(4.0f) * temp_f20) + this->actor.world.pos.x; + sp98.x = (Rand_CenteredFloat(4.0f) * temp_f20) + this->actor.world.pos.x; sp98.y = ((Rand_ZeroFloat(20.0f) - 35.0f) * temp_f20) + this->actor.world.pos.y; - sp98.z = (randPlusMinusPoint5Scaled(4.0f) * temp_f20) + this->actor.world.pos.z; + sp98.z = (Rand_CenteredFloat(4.0f) * temp_f20) + this->actor.world.pos.z; - sp8C.x = randPlusMinusPoint5Scaled(13.0f); + sp8C.x = Rand_CenteredFloat(13.0f); sp8C.y = Rand_ZeroFloat(2.0f); - sp8C.z = randPlusMinusPoint5Scaled(13.0f); + sp8C.z = Rand_CenteredFloat(13.0f); EffectSsHahen_Spawn(play, &sp98, &sp8C, &D_80AE987C, HAHEN_XLU, (Rand_ZeroFloat(20.0f) + 30.0f) * temp_f20, OBJECT_BIGICICLE, 40, object_bigicicle_DL_0009B0); @@ -222,8 +222,8 @@ void func_80AE9180(ObjBigicicle* this, PlayState* play) { if (this->unk_14A > 0) { this->unk_14A--; - this->actor.shape.rot.x = BINANG_ADD((s32)(randPlusMinusPoint5Scaled(1408.0f) * 0.02f * this->unk_14A), 0x4000); - this->actor.shape.rot.z = randPlusMinusPoint5Scaled(1408.0f) * 0.02f * this->unk_14A; + this->actor.shape.rot.x = BINANG_ADD((s32)(Rand_CenteredFloat(0x580) * 0.02f * this->unk_14A), 0x4000); + this->actor.shape.rot.z = Rand_CenteredFloat(0x580) * 0.02f * this->unk_14A; } else { this->actor.shape.rot.x = 0x4000; this->actor.shape.rot.z = 0; @@ -271,9 +271,9 @@ void func_80AE939C(ObjBigicicle* this, PlayState* play) { f32 temp_f20 = this->actor.scale.x * (50.0f / 3.0f); for (i = 0; i < 20; i++) { - sp8C.x = randPlusMinusPoint5Scaled(15.0f); + sp8C.x = Rand_CenteredFloat(15.0f); sp8C.y = Rand_ZeroFloat(7.0f) + 3.0f; - sp8C.z = randPlusMinusPoint5Scaled(15.0f); + sp8C.z = Rand_CenteredFloat(15.0f); sp98.x = this->actor.world.pos.x + (sp8C.x * 5.0f * temp_f20); sp98.y = this->actor.world.pos.y + (sp8C.y * 7.0f * temp_f20); diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index c2270f15b..4971b39bc 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -119,7 +119,7 @@ u32 func_80BB9A1C(ObjChan* this, f32 arg1) { sp20 = Math_SinS(this->unk1D4) * this->unk1D0; temp_f6 = (Math_CosS(this->unk1D4) * (400 * M_PI / 0x8000) * this->unk1D0) + arg1; if (temp_f6 != 0.0f) { - this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * (400 * M_PI / 0x8000), temp_f6)); + this->unk1D4 = RAD_TO_BINANG(Math_FAtan2F(sp20 * (400 * M_PI / 0x8000), temp_f6)); } else if (sp20 >= 0.0f) { this->unk1D4 = 0x4000; } else { diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c index 4cc81013e..7559c4db7 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -130,8 +130,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { this->unk_18C = 0; Math_Vec3f_Copy(&sp40, &player->actor.world.pos); - sp40.x += randPlusMinusPoint5Scaled(10.0f); - sp40.z += randPlusMinusPoint5Scaled(10.0f); + sp40.x += Rand_CenteredFloat(10.0f); + sp40.z += Rand_CenteredFloat(10.0f); sp40.y += Rand_ZeroFloat(2.0f); EffectSsGSplash_Spawn(play, &sp40, NULL, NULL, 2.0f * Rand_ZeroOne(), 1); @@ -144,8 +144,8 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { Math_Vec3f_Copy(&sp40, &player->actor.world.pos); this->unk_18C = 0; - sp40.x += randPlusMinusPoint5Scaled(10.0f); - sp40.z += randPlusMinusPoint5Scaled(10.0f); + sp40.x += Rand_CenteredFloat(10.0f); + sp40.z += Rand_CenteredFloat(10.0f); sp40.y += Rand_ZeroFloat(45.0f); EffectSsGSplash_Spawn(play, &sp40, NULL, NULL, 1, 1); diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c index 10937f985..d1601e69d 100644 --- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c +++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c @@ -156,9 +156,9 @@ void func_80931828(ObjIcePoly* this, PlayState* play) { temp = spA0.y - sp90; for (i = 0; i < 30; i++) { - sp94.x = randPlusMinusPoint5Scaled(12.0f); + sp94.x = Rand_CenteredFloat(12.0f); sp94.y = Rand_ZeroFloat(15.0f); - sp94.z = randPlusMinusPoint5Scaled(12.0f); + sp94.z = Rand_CenteredFloat(12.0f); spA0.x = (this->colliders1[0].dim.radius * (sp94.x * (1.0f / 12))) + this->actor.world.pos.x; spA0.z = (this->colliders1[0].dim.radius * (sp94.z * (1.0f / 12))) + this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c index aeaddd2ee..6eac0ddbc 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c @@ -141,10 +141,10 @@ void func_80B9B9C8(ObjTaru* this, PlayState* play) { for (i = 0; i < 4; i++) { for (j = phi_fp; j < phi_s5; j++) { - temp_fs0 = randPlusMinusPoint5Scaled(10.0f) + -105.0f + (j * 30.0f); - temp_fs1 = randPlusMinusPoint5Scaled(4.0f); + temp_fs0 = Rand_CenteredFloat(10.0f) + -105.0f + (j * 30.0f); + temp_fs1 = Rand_CenteredFloat(4.0f); spD8.x = temp_fs0 * cos; - spD8.y = randPlusMinusPoint5Scaled(10.0f) + 15.0f + (i * 30.0f); + spD8.y = Rand_CenteredFloat(10.0f) + 15.0f + (i * 30.0f); spD8.z = temp_fs0 * sin; spCC.x = (spD8.x * 0.05f) + (temp_fs1 * sin); spCC.y = Rand_ZeroFloat(5.0f) + 2.0f; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 9bf780859..bbde013ef 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -6280,9 +6280,9 @@ void func_80836C70(PlayState* play, Player* this, PlayerBodyPart bodyPartIndex) for (i = 0; i < 4; i++) { Vec3f velocity; - velocity.x = randPlusMinusPoint5Scaled(4.0f); + velocity.x = Rand_CenteredFloat(4.0f); velocity.y = Rand_ZeroFloat(2.0f); - velocity.z = randPlusMinusPoint5Scaled(4.0f); + velocity.z = Rand_CenteredFloat(4.0f); D_8085D130.y = -0.2f; EffectSsHahen_Spawn(play, &this->bodyPartsPos[bodyPartIndex], &velocity, &D_8085D130, 0, 10, OBJECT_LINK_NUTS, 16, object_link_nuts_DL_008860); @@ -9507,9 +9507,9 @@ void func_8083F57C(Player* this, PlayState* play) { } void func_8083F828(Vec3f* arg0, Vec3f* arg1, f32 arg2, f32 arg3, f32 arg4) { - arg1->x = randPlusMinusPoint5Scaled(arg3) + arg0->x; - arg1->y = randPlusMinusPoint5Scaled(arg4) + (arg0->y + arg2); - arg1->z = randPlusMinusPoint5Scaled(arg3) + arg0->z; + arg1->x = Rand_CenteredFloat(arg3) + arg0->x; + arg1->y = Rand_CenteredFloat(arg4) + (arg0->y + arg2); + arg1->z = Rand_CenteredFloat(arg3) + arg0->z; } Color_RGBA8 D_8085D26C = { 255, 255, 255, 255 }; @@ -9528,8 +9528,8 @@ s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 r count = (count >= ABS_ALT(countMax)) ? ABS_ALT(countMax) : count; for (i = 0; i < count; i++) { func_8083F828(&this->actor.world.pos, &pos, 0.0f, 40.0f, 10.0f); - D_8085D27C.x = randPlusMinusPoint5Scaled(3.0f); - D_8085D27C.z = randPlusMinusPoint5Scaled(3.0f); + D_8085D27C.x = Rand_CenteredFloat(3.0f); + D_8085D27C.z = Rand_CenteredFloat(3.0f); EffectSsDust_Spawn(play, 0, &pos, &D_8085D27C, &D_8085D270, &D_8085D26C, &D_8085D26C, scale, scaleStep, 42, 0); } @@ -9555,9 +9555,9 @@ s32 func_8083F8A8(PlayState* play, Player* this, f32 radius, s32 countMax, f32 r count = (count >= countMax) ? countMax : count; for (i = 0; i < count; i++) { func_8083F828(&this->actor.world.pos, &pos, 0.0f, 20.0f, 20.0f); - velocity.x = randPlusMinusPoint5Scaled(3.0f); + velocity.x = Rand_CenteredFloat(3.0f); velocity.y = Rand_ZeroFloat(2.0f); - velocity.z = randPlusMinusPoint5Scaled(3.0f); + velocity.z = Rand_CenteredFloat(3.0f); D_8085D288.y = -0.1f; EffectSsHahen_Spawn(play, &pos, &velocity, &D_8085D288, 0, 0x96, 1, 0x10, gKakeraLeafTip); } @@ -11237,9 +11237,9 @@ void func_808445C4(PlayState* play, Player* this) { randIndex = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); bodyPartsPos = randIndex + this->bodyPartsPos; - pos.x = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; - pos.y = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; - pos.z = (randPlusMinusPoint5Scaled(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; + pos.x = (Rand_CenteredFloat(5.0f) + bodyPartsPos->x) - this->actor.world.pos.x; + pos.y = (Rand_CenteredFloat(5.0f) + bodyPartsPos->y) - this->actor.world.pos.y; + pos.z = (Rand_CenteredFloat(5.0f) + bodyPartsPos->z) - this->actor.world.pos.z; EffectSsFhgFlash_SpawnShock(play, &this->actor, &pos, scale, 1); func_800B8F98(&this->actor, NA_SE_PL_SPARK - SFX_FLAG); } @@ -19575,9 +19575,9 @@ void func_80859D70(PlayState* play, Player* this, UNK_TYPE arg2) { this->rightHandType = 0xFF; } else { posInfo = &D_8085E368[this->transformation]; - randPos.x = randPlusMinusPoint5Scaled(posInfo->range.x) + posInfo->base.x; - randPos.y = randPlusMinusPoint5Scaled(posInfo->range.y) + posInfo->base.y; - randPos.z = randPlusMinusPoint5Scaled(posInfo->range.z) + posInfo->base.z; + randPos.x = Rand_CenteredFloat(posInfo->range.x) + posInfo->base.x; + randPos.y = Rand_CenteredFloat(posInfo->range.y) + posInfo->base.y; + randPos.z = Rand_CenteredFloat(posInfo->range.z) + posInfo->base.z; SkinMatrix_Vec3fMtxFMultXYZ(&this->shieldMf, &randPos, &effectPos); EffectSsKirakira_SpawnDispersed(play, &effectPos, &gZeroVec3f, &gZeroVec3f, &D_8085E3A4, &D_8085E3A8, 600, -10); } diff --git a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c index 14d5d5c6e..cf019c6cf 100644 --- a/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c +++ b/src/overlays/effects/ovl_Effect_Ss_En_Ice/z_eff_ss_en_ice.c @@ -60,7 +60,7 @@ u32 EffectSsEnIce_Init(PlayState* play, u32 index, EffectSs* this, void* initPar this->rEnvColorG = initParams->envColor.g; this->rEnvColorB = initParams->envColor.b; this->rAlphaMode = 1; - this->rPitch = randPlusMinusPoint5Scaled(0x10000); + this->rPitch = Rand_CenteredFloat(0x10000); } else if (initParams->type == ENICE_TYPE_NORMAL) { Math_Vec3f_Copy(&this->pos, &initParams->pos); Math_Vec3f_Copy(&this->vec, &initParams->pos); @@ -142,7 +142,7 @@ void EffectSsEnIce_UpdateFlying(PlayState* play, u32 index, EffectSs* this) { } else { this->actor = NULL; if (this->life >= 9) { - rand = randPlusMinusPoint5Scaled(0xFFFF); + rand = Rand_CenteredFloat(0xFFFF); this->accel.x = Math_SinS(rand) * (Rand_ZeroOne() + 1.0f); this->accel.z = Math_CosS(rand) * (Rand_ZeroOne() + 1.0f); this->life = 8; diff --git a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c index f2038c768..4edc1e3b1 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.c @@ -90,9 +90,9 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) { Player* player = GET_PLAYER(play); randBodyPart = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f); - this->pos.x = player->bodyPartsPos[randBodyPart].x + randPlusMinusPoint5Scaled(10.0f); - this->pos.y = player->bodyPartsPos[randBodyPart].y + randPlusMinusPoint5Scaled(15.0f); - this->pos.z = player->bodyPartsPos[randBodyPart].z + randPlusMinusPoint5Scaled(10.0f); + this->pos.x = player->bodyPartsPos[randBodyPart].x + Rand_CenteredFloat(10.0f); + this->pos.y = player->bodyPartsPos[randBodyPart].y + Rand_CenteredFloat(15.0f); + this->pos.z = player->bodyPartsPos[randBodyPart].z + Rand_CenteredFloat(10.0f); } else if ((this->rParams >= FHGFLASH_SHOCK_GOHT_2) && (this->rParams <= FHGFLASH_SHOCK_GOHT_6)) { s32 pad; Vec3f* bodyPartPos; @@ -105,9 +105,9 @@ void EffectSsFhgFlash_Update(PlayState* play, u32 index, EffectSs* this) { bodyPartPos = &goht->unk_2F00[this->rParams][index].unk_00; } - this->pos.x = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->x; - this->pos.y = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->y; - this->pos.z = randPlusMinusPoint5Scaled(70.0f) + bodyPartPos->z; + this->pos.x = Rand_CenteredFloat(70.0f) + bodyPartPos->x; + this->pos.y = Rand_CenteredFloat(70.0f) + bodyPartPos->y; + this->pos.z = Rand_CenteredFloat(70.0f) + bodyPartPos->z; } if (this->life < 100) { this->rAlpha -= 50; diff --git a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c index 4e395141b..4e8f11f5c 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c +++ b/src/overlays/effects/ovl_Effect_Ss_Kirakira/z_eff_ss_kirakira.c @@ -139,8 +139,8 @@ void func_80977DB4(PlayState* play, u32 index, EffectSs* this) { void func_80977E6C(PlayState* play, u32 index, EffectSs* this) { this->velocity.x *= 0.95f; this->velocity.z *= 0.95f; - this->accel.x = randPlusMinusPoint5Scaled(0.2f); - this->accel.z = randPlusMinusPoint5Scaled(0.2f); + this->accel.x = Rand_CenteredFloat(0.2f); + this->accel.z = Rand_CenteredFloat(0.2f); this->rEnvColorA += this->rAlphaStep; if (this->rEnvColorA < 0) { diff --git a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c index f79e59340..69b24c029 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c +++ b/src/overlays/effects/ovl_Effect_Ss_Sbn/z_eff_ss_sbn.c @@ -68,7 +68,7 @@ u32 EffectSsSbn_Init(PlayState* play, u32 index, EffectSs* this, void* initParam this->rReg4 = 250; this->rReg4Step = 30; - this->rScale = randPlusMinusPoint5Scaled(100.0f) + (initParams->scale * 120.0f); + this->rScale = Rand_CenteredFloat(100.0f) + (initParams->scale * 120.0f); if (this->rScale < 600) { this->rScale = 600; } else if (this->rScale > 1500) { diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index e4f96e594..1d38ccc2e 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -166,39 +166,39 @@ 0x80086588:("SystemHeap_RunInits",), 0x800865F8:("SystemHeap_Init",), 0x80086620:("PadSetup_Init",), - 0x80086760:("func_80086760",), - 0x80086794:("func_80086794",), - 0x800867B4:("func_800867B4",), - 0x800867D4:("func_800867D4",), - 0x800867F4:("func_800867F4",), - 0x80086814:("func_80086814",), - 0x80086834:("func_80086834",), - 0x80086880:("func_80086880",), - 0x800869A4:("func_800869A4",), - 0x80086AF0:("func_80086AF0",), - 0x80086B30:("func_80086B30",), - 0x80086C18:("func_80086C18",), - 0x80086C48:("func_80086C48",), - 0x80086C70:("func_80086C70",), - 0x80086C7C:("func_80086C7C",), - 0x80086C88:("func_80086C88",), - 0x80086C98:("func_80086C98",), - 0x80086CA8:("func_80086CA8",), - 0x80086CB4:("func_80086CB4",), - 0x80086CC0:("func_80086CC0",), - 0x80086CD0:("func_80086CD0",), - 0x80086CE0:("func_80086CE0",), - 0x80086CEC:("func_80086CEC",), - 0x80086CF8:("func_80086CF8",), - 0x80086D08:("func_80086D08",), - 0x80086D18:("func_80086D18",), - 0x80086D24:("func_80086D24",), - 0x80086D30:("func_80086D30",), - 0x80086D40:("func_80086D40",), - 0x80086D50:("func_80086D50",), - 0x80086D6C:("func_80086D6C",), - 0x80086D8C:("func_80086D8C",), - 0x80086DAC:("func_80086DAC",), + 0x80086760:("Math_FTanF",), + 0x80086794:("Math_FFloorF",), + 0x800867B4:("Math_FCeilF",), + 0x800867D4:("Math_FRoundF",), + 0x800867F4:("Math_FTruncF",), + 0x80086814:("Math_FNearbyIntF",), + 0x80086834:("Math_FAtanTaylorQF",), + 0x80086880:("Math_FAtanTaylorF",), + 0x800869A4:("Math_FAtanContFracF",), + 0x80086AF0:("Math_FAtanF",), + 0x80086B30:("Math_FAtan2F",), + 0x80086C18:("Math_FAsinF",), + 0x80086C48:("Math_FAcosF",), + 0x80086C70:("floorf",), + 0x80086C7C:("floor",), + 0x80086C88:("lfloorf",), + 0x80086C98:("lfloor",), + 0x80086CA8:("ceilf",), + 0x80086CB4:("ceil",), + 0x80086CC0:("lceilf",), + 0x80086CD0:("lceil",), + 0x80086CE0:("truncf",), + 0x80086CEC:("trunc",), + 0x80086CF8:("ltruncf",), + 0x80086D08:("ltrunc",), + 0x80086D18:("nearbyintf",), + 0x80086D24:("nearbyint",), + 0x80086D30:("lnearbyintf",), + 0x80086D40:("lnearbyint",), + 0x80086D50:("roundf",), + 0x80086D6C:("round",), + 0x80086D8C:("lroundf",), + 0x80086DAC:("lround",), 0x80086DD0:("SystemArena_Malloc",), 0x80086DF8:("SystemArena_MallocR",), 0x80086E20:("SystemArena_Realloc",), @@ -3248,13 +3248,13 @@ 0x801791CC:("Check_DrawRegionLockErrorMessage",), 0x80179260:("Check_ExpansionPak",), 0x801792A4:("Check_RegionIsSupported",), - 0x80179300:("func_80179300",), - 0x80179400:("func_80179400",), - 0x801794C4:("pow_int",), - 0x801794EC:("sin_rad",), - 0x80179540:("cos_rad",), + 0x80179300:("Math_FactorialF",), + 0x80179400:("Math_Factorial",), + 0x801794C4:("Math_PowF",), + 0x801794EC:("Math_SinF",), + 0x80179540:("Math_CosF",), 0x80179594:("Rand_ZeroFloat",), - 0x801795C0:("randPlusMinusPoint5Scaled",), + 0x801795C0:("Rand_CenteredFloat",), 0x801795F0:("Math3D_Normalize",), 0x80179678:("Math3D_PlaneVsLineSegClosestPoint",), 0x80179798:("func_80179798",), diff --git a/tools/namefixer.py b/tools/namefixer.py index 286653e13..a755cc88c 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -18,10 +18,16 @@ simpleReplace = { wordReplace = { # Functions "Actor_GetSwitchFlag": "Flags_GetSwitch", - # "Math_FAtan2F": "Math_Atan2S_XY", // All old Math_FAtan2F should be renamed, so func_80086B30 can be renamed to Math_FAtan2F "Math_Acot2F": "Math_Atan2F_XY", "atan_flip": "Math_Atan2F_XY", "atans": "Math_Atan2S", + "sin_rad": "Math_SinF", + "cos_rad": "Math_CosF", + "randPlusMinusPoint5Scaled": "Rand_CenteredFloat", + # "Math_FAtan2F": "Math_Atan2S_XY", // Old Math_FAtan2F was renamed + "func_80086B30": "Math_FAtan2F", + "func_80086760": "Math_FTanF", + "func_80086C48": "Math_FAcosF", # "SysMatrix_StateAlloc": "Matrix_StateAlloc", # "SysMatrix_StatePush": "Matrix_StatePush", diff --git a/tools/sizes/boot_functions.csv b/tools/sizes/boot_functions.csv index 744376bcc..ecc9eed27 100644 --- a/tools/sizes/boot_functions.csv +++ b/tools/sizes/boot_functions.csv @@ -163,39 +163,39 @@ asm/non_matchings/boot/boot_800862E0/SystemHeap_RunBlockFunc1Reverse.s,SystemHea asm/non_matchings/boot/boot_800862E0/SystemHeap_RunInits.s,SystemHeap_RunInits,0x80086588,0x1C asm/non_matchings/boot/boot_800862E0/SystemHeap_Init.s,SystemHeap_Init,0x800865F8,0xA asm/non_matchings/boot/padsetup/PadSetup_Init.s,PadSetup_Init,0x80086620,0x50 -asm/non_matchings/boot/boot_80086760/func_80086760.s,func_80086760,0x80086760,0xD -asm/non_matchings/boot/boot_80086760/func_80086794.s,func_80086794,0x80086794,0x8 -asm/non_matchings/boot/boot_80086760/func_800867B4.s,func_800867B4,0x800867B4,0x8 -asm/non_matchings/boot/boot_80086760/func_800867D4.s,func_800867D4,0x800867D4,0x8 -asm/non_matchings/boot/boot_80086760/func_800867F4.s,func_800867F4,0x800867F4,0x8 -asm/non_matchings/boot/boot_80086760/func_80086814.s,func_80086814,0x80086814,0x8 -asm/non_matchings/boot/boot_80086760/func_80086834.s,func_80086834,0x80086834,0x13 -asm/non_matchings/boot/boot_80086760/func_80086880.s,func_80086880,0x80086880,0x49 -asm/non_matchings/boot/boot_80086760/func_800869A4.s,func_800869A4,0x800869A4,0x53 -asm/non_matchings/boot/boot_80086760/func_80086AF0.s,func_80086AF0,0x80086AF0,0x10 -asm/non_matchings/boot/boot_80086760/func_80086B30.s,func_80086B30,0x80086B30,0x3A -asm/non_matchings/boot/boot_80086760/func_80086C18.s,func_80086C18,0x80086C18,0xC -asm/non_matchings/boot/boot_80086760/func_80086C48.s,func_80086C48,0x80086C48,0xA -asm/non_matchings/boot/fp/func_80086C70.s,func_80086C70,0x80086C70,0x3 -asm/non_matchings/boot/fp/func_80086C7C.s,func_80086C7C,0x80086C7C,0x3 -asm/non_matchings/boot/fp/func_80086C88.s,func_80086C88,0x80086C88,0x4 -asm/non_matchings/boot/fp/func_80086C98.s,func_80086C98,0x80086C98,0x4 -asm/non_matchings/boot/fp/func_80086CA8.s,func_80086CA8,0x80086CA8,0x3 -asm/non_matchings/boot/fp/func_80086CB4.s,func_80086CB4,0x80086CB4,0x3 -asm/non_matchings/boot/fp/func_80086CC0.s,func_80086CC0,0x80086CC0,0x4 -asm/non_matchings/boot/fp/func_80086CD0.s,func_80086CD0,0x80086CD0,0x4 -asm/non_matchings/boot/fp/func_80086CE0.s,func_80086CE0,0x80086CE0,0x3 -asm/non_matchings/boot/fp/func_80086CEC.s,func_80086CEC,0x80086CEC,0x3 -asm/non_matchings/boot/fp/func_80086CF8.s,func_80086CF8,0x80086CF8,0x4 -asm/non_matchings/boot/fp/func_80086D08.s,func_80086D08,0x80086D08,0x4 -asm/non_matchings/boot/fp/func_80086D18.s,func_80086D18,0x80086D18,0x3 -asm/non_matchings/boot/fp/func_80086D24.s,func_80086D24,0x80086D24,0x3 -asm/non_matchings/boot/fp/func_80086D30.s,func_80086D30,0x80086D30,0x4 -asm/non_matchings/boot/fp/func_80086D40.s,func_80086D40,0x80086D40,0x4 -asm/non_matchings/boot/fp/func_80086D50.s,func_80086D50,0x80086D50,0x7 -asm/non_matchings/boot/fp/func_80086D6C.s,func_80086D6C,0x80086D6C,0x8 -asm/non_matchings/boot/fp/func_80086D8C.s,func_80086D8C,0x80086D8C,0x8 -asm/non_matchings/boot/fp/func_80086DAC.s,func_80086DAC,0x80086DAC,0x9 +asm/non_matchings/boot/boot_80086760/Math_FTanF.s,Math_FTanF,0x80086760,0xD +asm/non_matchings/boot/boot_80086760/Math_FFloorF.s,Math_FFloorF,0x80086794,0x8 +asm/non_matchings/boot/boot_80086760/Math_FCeilF.s,Math_FCeilF,0x800867B4,0x8 +asm/non_matchings/boot/boot_80086760/Math_FRoundF.s,Math_FRoundF,0x800867D4,0x8 +asm/non_matchings/boot/boot_80086760/Math_FTruncF.s,Math_FTruncF,0x800867F4,0x8 +asm/non_matchings/boot/boot_80086760/Math_FNearbyIntF.s,Math_FNearbyIntF,0x80086814,0x8 +asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorQF.s,Math_FAtanTaylorQF,0x80086834,0x13 +asm/non_matchings/boot/boot_80086760/Math_FAtanTaylorF.s,Math_FAtanTaylorF,0x80086880,0x49 +asm/non_matchings/boot/boot_80086760/Math_FAtanContFracF.s,Math_FAtanContFracF,0x800869A4,0x53 +asm/non_matchings/boot/boot_80086760/Math_FAtanF.s,Math_FAtanF,0x80086AF0,0x10 +asm/non_matchings/boot/boot_80086760/Math_FAtan2F.s,Math_FAtan2F,0x80086B30,0x3A +asm/non_matchings/boot/boot_80086760/Math_FAsinF.s,Math_FAsinF,0x80086C18,0xC +asm/non_matchings/boot/boot_80086760/Math_FAcosF.s,Math_FAcosF,0x80086C48,0xA +asm/non_matchings/boot/fp/floorf.s,floorf,0x80086C70,0x3 +asm/non_matchings/boot/fp/floor.s,floor,0x80086C7C,0x3 +asm/non_matchings/boot/fp/lfloorf.s,lfloorf,0x80086C88,0x4 +asm/non_matchings/boot/fp/lfloor.s,lfloor,0x80086C98,0x4 +asm/non_matchings/boot/fp/ceilf.s,ceilf,0x80086CA8,0x3 +asm/non_matchings/boot/fp/ceil.s,ceil,0x80086CB4,0x3 +asm/non_matchings/boot/fp/lceilf.s,lceilf,0x80086CC0,0x4 +asm/non_matchings/boot/fp/lceil.s,lceil,0x80086CD0,0x4 +asm/non_matchings/boot/fp/truncf.s,truncf,0x80086CE0,0x3 +asm/non_matchings/boot/fp/trunc.s,trunc,0x80086CEC,0x3 +asm/non_matchings/boot/fp/ltruncf.s,ltruncf,0x80086CF8,0x4 +asm/non_matchings/boot/fp/ltrunc.s,ltrunc,0x80086D08,0x4 +asm/non_matchings/boot/fp/nearbyintf.s,nearbyintf,0x80086D18,0x3 +asm/non_matchings/boot/fp/nearbyint.s,nearbyint,0x80086D24,0x3 +asm/non_matchings/boot/fp/lnearbyintf.s,lnearbyintf,0x80086D30,0x4 +asm/non_matchings/boot/fp/lnearbyint.s,lnearbyint,0x80086D40,0x4 +asm/non_matchings/boot/fp/roundf.s,roundf,0x80086D50,0x7 +asm/non_matchings/boot/fp/round.s,round,0x80086D6C,0x8 +asm/non_matchings/boot/fp/lroundf.s,lroundf,0x80086D8C,0x8 +asm/non_matchings/boot/fp/lround.s,lround,0x80086DAC,0x9 asm/non_matchings/boot/system_malloc/SystemArena_Malloc.s,SystemArena_Malloc,0x80086DD0,0xA asm/non_matchings/boot/system_malloc/SystemArena_MallocR.s,SystemArena_MallocR,0x80086DF8,0xA asm/non_matchings/boot/system_malloc/SystemArena_Realloc.s,SystemArena_Realloc,0x80086E20,0xC diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 3d5839a69..834b933ef 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2762,13 +2762,13 @@ asm/non_matchings/code/sys_initial_check/Check_DrawExpansionPakErrorMessage.s,Ch asm/non_matchings/code/sys_initial_check/Check_DrawRegionLockErrorMessage.s,Check_DrawRegionLockErrorMessage,0x801791CC,0x25 asm/non_matchings/code/sys_initial_check/Check_ExpansionPak.s,Check_ExpansionPak,0x80179260,0x11 asm/non_matchings/code/sys_initial_check/Check_RegionIsSupported.s,Check_RegionIsSupported,0x801792A4,0x17 -asm/non_matchings/code/sys_math/func_80179300.s,func_80179300,0x80179300,0x40 -asm/non_matchings/code/sys_math/func_80179400.s,func_80179400,0x80179400,0x31 -asm/non_matchings/code/sys_math/pow_int.s,pow_int,0x801794C4,0xA -asm/non_matchings/code/sys_math/sin_rad.s,sin_rad,0x801794EC,0x15 -asm/non_matchings/code/sys_math/cos_rad.s,cos_rad,0x80179540,0x15 +asm/non_matchings/code/sys_math/Math_FactorialF.s,Math_FactorialF,0x80179300,0x40 +asm/non_matchings/code/sys_math/Math_Factorial.s,Math_Factorial,0x80179400,0x31 +asm/non_matchings/code/sys_math/Math_PowF.s,Math_PowF,0x801794C4,0xA +asm/non_matchings/code/sys_math/Math_SinF.s,Math_SinF,0x801794EC,0x15 +asm/non_matchings/code/sys_math/Math_CosF.s,Math_CosF,0x80179540,0x15 asm/non_matchings/code/sys_math/Rand_ZeroFloat.s,Rand_ZeroFloat,0x80179594,0xB -asm/non_matchings/code/sys_math/randPlusMinusPoint5Scaled.s,randPlusMinusPoint5Scaled,0x801795C0,0xC +asm/non_matchings/code/sys_math/Rand_CenteredFloat.s,Rand_CenteredFloat,0x801795C0,0xC asm/non_matchings/code/sys_math3d/Math3D_Normalize.s,Math3D_Normalize,0x801795F0,0x22 asm/non_matchings/code/sys_math3d/Math3D_PlaneVsLineSegClosestPoint.s,Math3D_PlaneVsLineSegClosestPoint,0x80179678,0x48 asm/non_matchings/code/sys_math3d/func_80179798.s,func_80179798,0x80179798,0xAB From 4cce44466170344b68b146cfbec6d9597d0910bb Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Mon, 5 Jun 2023 20:13:47 -0700 Subject: [PATCH 30/36] Misc cleanup (#1273) * this2 -> thisx * exchangeItemId enums * Sleep_Cycles * ENENCOUNT1_PATH_INDEX_NONE * Fram enums --- include/z64.h | 8 +- src/boot_O2/sleep.c | 4 +- src/overlays/actors/ovl_En_Al/z_en_al.c | 4 +- .../actors/ovl_En_Encount1/z_en_encount1.c | 2 +- .../actors/ovl_En_Encount1/z_en_encount1.h | 2 + src/overlays/actors/ovl_En_In/z_en_in.c | 8 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 30 +++---- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 18 ++-- .../actors/ovl_En_Time_Tag/z_en_time_tag.c | 6 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 9 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 4 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 4 +- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 89 ++++++++++--------- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 6 +- .../ovl_Obj_Fireshield/z_obj_fireshield.c | 15 ++-- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 24 ++--- .../ovl_Obj_Grass_Carry/z_obj_grass_carry.c | 30 +++---- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 21 +++-- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 6 +- 19 files changed, 147 insertions(+), 143 deletions(-) diff --git a/include/z64.h b/include/z64.h index 6418b43ca..637f28dc4 100644 --- a/include/z64.h +++ b/include/z64.h @@ -657,7 +657,7 @@ typedef struct { #define FLASHROM_REQUEST_WRITE 1 #define FLASHROM_REQUEST_READ 2 -typedef enum framCommand { +typedef enum FramCommand { /* Does nothing for FRAM_COMMAND_SET_MODE_READ_AND_STATUS, FRAM_MODE_NOP, FRAM_COMMAND_SET_MODE_STATUS_AND_STATUS Initializes fram to 0xFF in FRAM_MODE_ERASE Writes Contents in FLASHRAM_MODE_WRITE @@ -681,15 +681,15 @@ typedef enum framCommand { FRAM_COMMAND_SET_MODE_READ_AND_STATUS = 0xF0000000, /* unk */ FRAM_COMMAND_UNK_ERASE_OPERATION = 0x3C000000 -} framCommand; +} FramCommand; -typedef enum framMode { +typedef enum FramMode { /* 0 */ FRAM_MODE_NOP, /* 1 */ FRAM_MODE_ERASE, /* 2 */ FRAM_MODE_WRITE, /* 3 */ FRAM_MODE_READ, /* 4 */ FRAM_MODE_STATUS -} framMode; +} FramMode; typedef enum { /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, diff --git a/src/boot_O2/sleep.c b/src/boot_O2/sleep.c index 01a85c5cc..a35abc5b2 100644 --- a/src/boot_O2/sleep.c +++ b/src/boot_O2/sleep.c @@ -2,10 +2,10 @@ void Sleep_Cycles(u64 time) { OSMesgQueue mq; - OSMesg msg; + OSMesg msg[1]; OSTimer timer; - osCreateMesgQueue(&mq, &msg, OS_MESG_BLOCK); + osCreateMesgQueue(&mq, msg, ARRAY_COUNT(msg)); osSetTimer(&timer, time, 0, &mq, NULL); osRecvMesg(&mq, NULL, OS_MESG_BLOCK); } diff --git a/src/overlays/actors/ovl_En_Al/z_en_al.c b/src/overlays/actors/ovl_En_Al/z_en_al.c index 0bbb53686..2568d6617 100644 --- a/src/overlays/actors/ovl_En_Al/z_en_al.c +++ b/src/overlays/actors/ovl_En_Al/z_en_al.c @@ -480,10 +480,10 @@ s32 func_80BDEC2C(EnAl* this, PlayState* play) { if ((this->unk_4C2 & 7) && Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->unk_4C2 &= ~0x1800; - if (player->exchangeItemId == 0x33) { + if (player->exchangeItemId == PLAYER_IA_LETTER_MAMA) { this->unk_4C2 |= 0x800; this->unk_4F4 = player->exchangeItemId; - } else if (player->exchangeItemId != 0) { + } else if (player->exchangeItemId != PLAYER_IA_NONE) { this->unk_4C2 |= 0x1000; this->unk_4F4 = player->exchangeItemId; } diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c index 3d8224039..737ffd2d3 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.c @@ -67,7 +67,7 @@ void EnEncount1_Init(Actor* thisx, PlayState* play) { } if (this->type == EN_ENCOUNT1_SKULLFISH_2) { this->pathIndex = ENENCOUNT1_GET_PATH_INDEX(&this->actor); - this->path = SubS_GetPathByIndex(play, this->pathIndex, 0x3F); + this->path = SubS_GetPathByIndex(play, this->pathIndex, ENENCOUNT1_PATH_INDEX_NONE); this->spawnTotalMax = -1; this->spawnDistanceMax = -1.0f; } diff --git a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h index 85e1b3ca4..0eb675272 100644 --- a/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h +++ b/src/overlays/actors/ovl_En_Encount1/z_en_encount1.h @@ -10,6 +10,8 @@ #define ENENCOUNT1_GET_SPAWN_TOTAL_MAX(thisx) ((thisx)->params & 0x3F) #define ENENCOUNT1_GET_PATH_INDEX(thisx) ((thisx)->params & 0x3F) // Used only by EN_ENCOUNT1_SKULLFISH_2 which doesn't use SpawnTotalMax +#define ENENCOUNT1_PATH_INDEX_NONE 0x3F + #define ENENCOUNT1_GET_SPAWN_TIME_MIN(thisx) ((thisx)->world.rot.x) // Time to wait between spawning #define ENENCOUNT1_GET_SPAWN_UNUSED_PROP(thisx) ((thisx)->world.rot.y) // Unused spawn property #define ENENCOUNT1_GET_SPAWN_DISTANCE_MAX(thisx) ((thisx)->world.rot.z) // Negative means infinite distance diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 514074a8f..ad60ad551 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -593,7 +593,7 @@ void func_808F4108(EnIn* this, PlayState* play, u16 textId) { } s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) { - EnIn* this2 = this; + Actor* thisx = &this->actor; if (msgCtx->choiceIndex == 0) { func_8019F208(); @@ -604,15 +604,15 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) } else if (this->unk4AC & 8) { func_808F4108(this, play, 0x3475); } else { - Actor_ContinueText(play, &this->actor, 0x3475); + Actor_ContinueText(play, thisx, 0x3475); } } else { play_sound(NA_SE_SY_ERROR); - Actor_ContinueText(play, &this->actor, 0x3473); + Actor_ContinueText(play, thisx, 0x3473); } } else { func_8019F230(); - Actor_ContinueText(play, &this->actor, 0x3472); + Actor_ContinueText(play, thisx, 0x3472); } return 0; } diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index 5d7a5fd5b..cfc3efdc0 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -960,14 +960,14 @@ void func_80A5D7A4(EnKusa2* this) { } void func_80A5D7C4(EnKusa2* this, PlayState* play) { - EnKusa2* this2 = this; + Actor* thisx = &this->actor; s16 sp2A; if (Actor_HasParent(&this->actor, play)) { - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_PULL_UP_PLANT); - this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.shape.shadowAlpha = 60; - this->actor.room = -1; + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT); + thisx->shape.shadowDraw = ActorShadow_DrawCircle; + thisx->shape.shadowAlpha = 60; + thisx->room = -1; func_80A5BD94(this); func_80A5D964(this); return; @@ -975,23 +975,23 @@ void func_80A5D7C4(EnKusa2* this, PlayState* play) { if (!func_80A5BFD8(this, play)) { if ((this->unk_1C0 != NULL) && (this->unk_1C0->unk_1BE != 0)) { - this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - if (this2->unk_1C0 != NULL) { - sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, &this->actor); - this->actor.home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A; + thisx->shape.shadowDraw = ActorShadow_DrawCircle; + if (this->unk_1C0 != NULL) { + sp2A = Actor_WorldYawTowardActor(&this->unk_1C0->actor, thisx); + thisx->home.rot.y = Rand_S16Offset(-1500, 3000) + sp2A; } this->unk_1C8 = Rand_S16Offset(72, 16); - this->actor.velocity.y = 8.8f; - Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); + thisx->velocity.y = 8.8f; + Actor_PlaySfx(thisx, NA_SE_EN_NUTS_WALK); func_80A5DC70(this); } - if (this->actor.xzDistToPlayer < 600.0f) { + if (thisx->xzDistToPlayer < 600.0f) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - if (this->actor.xzDistToPlayer < 400.0f) { + if (thisx->xzDistToPlayer < 400.0f) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - if (this->actor.xzDistToPlayer < 100.0f) { - Actor_OfferCarry(&this->actor, play); + if (thisx->xzDistToPlayer < 100.0f) { + Actor_OfferCarry(thisx, play); } } } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index ebea9196b..98b01d728 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -851,14 +851,14 @@ void func_80A6A508(Actor* thisx) { } void func_80A6A5C0(EnMushi2* this, PlayState* play) { - EnMushi2* this2 = this; + Actor* thisx = &this->actor; func_80A69D3C(this); - Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f); + Math_SmoothStepToF(&thisx->speed, this->unk_35C, 0.1f, 0.5f, 0.0f); if (this->unk_354 < SQ(40.0f)) { f32 temp = 1.0f - ((SQ(40.0f) - this->unk_354) * (1.0f / (10.0f * SQ(40.0f)))); - this->actor.speed *= temp; + thisx->speed *= temp; } func_80A68ED8(this); @@ -867,8 +867,8 @@ void func_80A6A5C0(EnMushi2* this, PlayState* play) { func_80A69388(this); } - this->skelAnime.playSpeed = this->actor.speed * 1.6f; - this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.1f, 1.9f); + this->skelAnime.playSpeed = thisx->speed * 1.6f; + this->skelAnime.playSpeed = CLAMP(this->skelAnime.playSpeed, 0.1f, 1.9f); if ((this->unk_36A <= 0) || func_80A68BA0(this)) { func_80A6B078(this); @@ -895,9 +895,9 @@ void func_80A6A794(EnMushi2* this) { } void func_80A6A824(EnMushi2* this, PlayState* play) { - EnMushi2* this2 = this; + Actor* thisx = &this->actor; - Math_SmoothStepToF(&this->actor.speed, this->unk_35C, 0.1f, 0.5f, 0.0f); + Math_SmoothStepToF(&thisx->speed, this->unk_35C, 0.1f, 0.5f, 0.0f); func_80A68ED8(this); func_80A697C4(this, play); @@ -905,8 +905,8 @@ void func_80A6A824(EnMushi2* this, PlayState* play) { func_80A69388(this); } - this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (this->actor.speed * 1.2f); - this2->skelAnime.playSpeed = CLAMP(this2->skelAnime.playSpeed, 0.0f, 1.9f); + this->skelAnime.playSpeed = (Rand_ZeroOne() * 0.8f) + (thisx->speed * 1.2f); + this->skelAnime.playSpeed = CLAMP(this->skelAnime.playSpeed, 0.0f, 1.9f); if ((this->unk_36A <= 0) || func_80A68BA0(this)) { func_80A6B078(this); diff --git a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c index 10f3ea529..dfcd1bad0 100644 --- a/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c +++ b/src/overlays/actors/ovl_En_Time_Tag/z_en_time_tag.c @@ -114,12 +114,12 @@ void EnTimeTag_RooftopOath_Cutscene(EnTimeTag* this, PlayState* play) { } void EnTimeTag_RooftopOath_Wait(EnTimeTag* this, PlayState* play) { - EnTimeTag* this2 = this; + Actor* thisx = &this->actor; if ((play->msgCtx.ocarinaMode == 3) && (play->msgCtx.lastPlayedSong == OCARINA_SONG_OATH)) { - if (this->actor.csId != CS_ID_NONE) { + if (thisx->csId != CS_ID_NONE) { this->actionFunc = EnTimeTag_RooftopOath_Cutscene; - CutsceneManager_Queue(this2->actor.csId); + CutsceneManager_Queue(thisx->csId); gSaveContext.timerStates[TIMER_ID_MOON_CRASH] = TIMER_STATE_OFF; } play->msgCtx.ocarinaMode = 4; diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index a11d00cdb..895d1d406 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -692,10 +692,11 @@ s32 func_80A872AC(EnTru* this, PlayState* play) { } this->unk_34E &= ~(0x4000 | 0x2000); - if ((player->exchangeItemId == 35) || (player->exchangeItemId == 36)) { + if ((player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_RED) || + (player->exchangeItemId == PLAYER_IA_BOTTLE_POTION_BLUE)) { this->unk_34E |= 0x2000; this->unk_38C = player->exchangeItemId; - } else if (player->exchangeItemId != 0) { + } else if (player->exchangeItemId != PLAYER_IA_NONE) { this->unk_34E |= 0x4000; } @@ -972,8 +973,8 @@ s32 func_80A87B48(Actor* thisx, PlayState* play) { this->actor.shape.shadowDraw = NULL; this->unk_34E |= (0x200 | 0x8); this->unk_34E &= ~0x800; - if (player->exchangeItemId != 0) { - player->exchangeItemId = 0; + if (player->exchangeItemId != PLAYER_IA_NONE) { + player->exchangeItemId = PLAYER_IA_NONE; } EnTru_ChangeAnim(this, KOUME_ANIM_HOVER1); } diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c index 894c07002..a404ac817 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -420,7 +420,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { case 0x1075: case 0x1078: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f); break; @@ -448,7 +448,7 @@ void func_80AE0704(EnTsn* this, PlayState* play) { break; case 0x107B: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); Animation_MorphToLoop(&this->unk_1D8->skelAnime, &object_tsn_Anim_0092FC, -10.0f); break; diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index bd8ff3435..c3192cec1 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -417,7 +417,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { switch (play->msgCtx.currentTextId) { case 0x1237: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; case 0x1238: case 0x123A: @@ -436,7 +436,7 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { case 0x1232: case 0x1241: - player->exchangeItemId = 0; + player->exchangeItemId = PLAYER_IA_NONE; case 0x1239: case 0x1246: diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index 4971b39bc..d1f19032f 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -25,7 +25,7 @@ void ObjChan_Destroy(Actor* thisx, PlayState* play); void ObjChan_Update(Actor* thisx, PlayState* play); void ObjChan_Draw(Actor* thisx, PlayState* play); -void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play); +void ObjChan_ChandelierAction(ObjChan* this, PlayState* play); void ObjChan_PotAction(ObjChan* this, PlayState* play); ActorInit Obj_Chan_InitVars = { @@ -64,7 +64,7 @@ static InitChainEntry sInitChain[] = { ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP), }; -void ObjChan_InitChandelier(ObjChan* this2, PlayState* play); +void ObjChan_InitChandelier(ObjChan* this, PlayState* play); void ObjChan_InitPot(ObjChan* this, PlayState* play); void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play); void ObjChan_DrawPot(Actor* thisx, PlayState* play); @@ -99,10 +99,14 @@ void ObjChan_Init(Actor* thisx, PlayState* play) { this->actor.shape.rot.y = 0; ObjChan_InitChandelier(this, play); break; + case OBJCHAN_SUBTYPE_POT: this->actor.draw = ObjChan_DrawPot; ObjChan_InitPot(this, play); break; + + default: + break; } } @@ -150,46 +154,44 @@ void ObjChan_CalculatePotPosition(Vec3f* childPosOut, Vec3s* childRotOut, Vec3f* childRotOut->y += childAngle; } -//! TODO: Possibly takes actor and recasts -void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) { - ObjChan* this = this2; +void ObjChan_InitChandelier(ObjChan* this, PlayState* play) { + Actor* thisx = &this->actor; s32 i; - ObjChan* temp_v0; + ObjChan* pot; Vec3f childPos; Vec3s childRot; CollisionPoly* sp94; s32 sp90; Vec3f sp84; - Math_Vec3f_Copy(&this->unk1C0, &this->actor.world.pos); + Math_Vec3f_Copy(&this->unk1C0, &thisx->world.pos); - Math_Vec3f_Copy(&sp84, &this->actor.world.pos); + Math_Vec3f_Copy(&sp84, &thisx->world.pos); sp84.y += 1600.0f; - if (BgCheck_EntityLineTest1(&play->colCtx, &this->actor.world.pos, &sp84, &this->unk1C0, &sp94, false, false, true, - true, &sp90)) { - this->unk1CC = this->actor.world.pos.y - this->unk1C0.y; + if (BgCheck_EntityLineTest1(&play->colCtx, &thisx->world.pos, &sp84, &this->unk1C0, &sp94, false, false, true, true, + &sp90)) { + this->unk1CC = thisx->world.pos.y - this->unk1C0.y; } else { - Actor_Kill(&this->actor); + Actor_Kill(thisx); return; } for (i = 0; i < 5; i++) { - ObjChan_CalculatePotPosition(&childPos, &childRot, &this->actor.world.pos, &this->actor.shape.rot, + ObjChan_CalculatePotPosition(&childPos, &childRot, &thisx->world.pos, &thisx->shape.rot, (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); - temp_v0 = (ObjChan*)Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, - childPos.z, childRot.x, childRot.y, childRot.z, - (this->actor.params & 0xFFF) | 0x1000, this->actor.csId, - this->actor.halfDaysBits, &this->actor); - if (temp_v0 != NULL) { - this->pots[i] = temp_v0; - temp_v0->myPotIndex = i; - temp_v0->actor.csId = this->actor.csId; + pot = (ObjChan*)Actor_SpawnAsChildAndCutscene( + &play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, childPos.z, childRot.x, childRot.y, + childRot.z, (thisx->params & 0xFFF) | 0x1000, thisx->csId, thisx->halfDaysBits, thisx); + if (pot != NULL) { + this->pots[i] = pot; + pot->myPotIndex = i; + pot->actor.csId = thisx->csId; } else { - Actor_Kill(&this->actor); + Actor_Kill(thisx); } } - if (Flags_GetSwitch(play, this->actor.params & 0x7F)) { + if (Flags_GetSwitch(play, thisx->params & 0x7F)) { this->stateFlags |= OBJCHAN_STATE_FIRE_DELAY; this->stateFlags |= OBJCHAN_STATE_ON_FIRE; @@ -211,9 +213,9 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) { } //! TODO: More descriptive name than Action? -void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { - ObjChan* this = this2; - ObjChan* temp; +void ObjChan_ChandelierAction(ObjChan* this, PlayState* play) { + Actor* thisx = &this->actor; + ObjChan* pot; s32 i; Vec3f sp60; Vec3s sp58; @@ -230,7 +232,7 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { this->unk1D0 = 0.0f; } } - this->actor.shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0); + thisx->shape.rot.z = (Math_SinS(this->unk1D4) * this->unk1D0); if ((this->stateFlags & OBJCHAN_STATE_START_CUTSCENE) && SubS_StartCutscene(&this->actor, this->csIdList[0], CS_ID_NONE, SUBS_CUTSCENE_WITH_PLAYER)) { this->stateFlags |= OBJCHAN_STATE_CUTSCENE; @@ -240,34 +242,34 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { this->stateFlags &= ~OBJCHAN_STATE_CUTSCENE; CutsceneManager_Stop(this->csIdList[0]); } - 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_RotateYS(thisx->shape.rot.y, MTXMODE_NEW); + Matrix_RotateXS(thisx->shape.rot.x, MTXMODE_APPLY); + Matrix_RotateZS(thisx->shape.rot.z, MTXMODE_APPLY); Matrix_RotateYS(this->rotation, MTXMODE_APPLY); - Matrix_MultVecY(this->unk1CC, &this->actor.world.pos); - Math_Vec3f_Sum(&this->actor.world.pos, &this->unk1C0, &this->actor.world.pos); + Matrix_MultVecY(this->unk1CC, &thisx->world.pos); + Math_Vec3f_Sum(&thisx->world.pos, &this->unk1C0, &thisx->world.pos); Collider_UpdateCylinder(&this->actor, &this->collider); for (i = 0; i < 5; i++) { - temp = this->pots[i]; - if (temp != NULL) { - ObjChan_CalculatePotPosition(&sp60, &sp58, &this->actor.world.pos, &this->actor.shape.rot, + pot = this->pots[i]; + if (pot != NULL) { + ObjChan_CalculatePotPosition(&sp60, &sp58, &thisx->world.pos, &thisx->shape.rot, (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); - Math_Vec3f_Copy(&temp->actor.world.pos, &sp60); - Math_Vec3s_Copy(&temp->actor.shape.rot, &this->actor.shape.rot); - temp->actor.shape.rot.y = this->rotation; - Math_Vec3f_ToVec3s(&temp->collider.dim.pos, &temp->actor.world.pos); + Math_Vec3f_Copy(&pot->actor.world.pos, &sp60); + Math_Vec3s_Copy(&pot->actor.shape.rot, &thisx->shape.rot); + pot->actor.shape.rot.y = this->rotation; + Math_Vec3f_ToVec3s(&pot->collider.dim.pos, &pot->actor.world.pos); } } if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x800)) { - Flags_SetSwitch(play, this->actor.params & 0x7F); + Flags_SetSwitch(play, thisx->params & 0x7F); } - if (Flags_GetSwitch(play, this->actor.params & 0x7F)) { + if (Flags_GetSwitch(play, thisx->params & 0x7F)) { if (!(this->stateFlags & OBJCHAN_STATE_FIRE_DELAY)) { this->rotationSpeed = 0; this->flameSize = 0.0f; for (i = 0; i < 5; i++) { - temp = this->pots[i]; - if (temp != NULL) { + pot = this->pots[i]; + if (pot != NULL) { this->pots[i]->stateFlags |= OBJCHAN_STATE_FIRE_DELAY; this->pots[i]->fireDelayFrames = 20 + i * 5; this->pots[i]->flameSize = 0.0f; @@ -338,6 +340,7 @@ void ObjChan_CreateSmashEffects(ObjChan* this, PlayState* play) { for (temp_s2 = 0, temp_s1 = 0; temp_s2 != 18; temp_s2++, temp_s1 += 0x4E20) { f32 sin = Math_SinS(temp_s1); f32 cos = Math_CosS(temp_s1); + spDC.x = sin * 8.0f; spDC.y = Rand_ZeroOne() * 12.0f + 2.0f; spDC.z = cos * 8.0f; diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c index c4e61efa3..c1b46fce7 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -167,8 +167,8 @@ void func_80B12A88(Actor* thisx) { } } -void func_80B12B38(ObjDhouse* this2, PlayState* play) { - ObjDhouse* this = this2; +void func_80B12B38(ObjDhouse* this, PlayState* play) { + Actor* thisx = &this->dyna.actor; s32 i; f32 temp_f0; CollisionPoly* sp90; @@ -201,7 +201,7 @@ void func_80B12B38(ObjDhouse* this2, PlayState* play) { phi_s3 = false; if (ptr->unk_0C.y < 0.0f) { func_80B12A50(ptr, ptr3, &sp80); - temp_f0 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp7C, &this->dyna.actor, &sp80); + temp_f0 = BgCheck_EntityRaycastFloor5(&play->colCtx, &sp90, &sp7C, thisx, &sp80); if (((sp80.y - 35.0f) < temp_f0) && (temp_f0 > (BGCHECK_Y_MIN + 1.0f))) { phi_s3 = true; } diff --git a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c index 40c363dca..e672780de 100644 --- a/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c +++ b/src/overlays/actors/ovl_Obj_Fireshield/z_obj_fireshield.c @@ -315,8 +315,8 @@ void ObjFireshield_Destroy(Actor* thisx, PlayState* play) { } void ObjFireshield_Update(Actor* thisx, PlayState* play) { + s32 pad; ObjFireshield* this = THIS; - ObjFireshield* this2 = THIS; s32 sp44 = OBJFIRESHIELD_GET_ROTX(&this->actor); s32 sp40 = OBJFIRESHIELD_GET_7F(&this->actor); s32 temp_a0; @@ -342,12 +342,12 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.base.atFlags &= ~AT_HIT; } else if (this->collider.base.atFlags & AT_HIT) { this->collider.base.atFlags &= ~AT_HIT; - func_800B8D98(play, &this->actor, 5.0f, this->actor.yawTowardsPlayer, 1.0f); + func_800B8D98(play, thisx, 5.0f, thisx->yawTowardsPlayer, 1.0f); } func_80A4CE28(this, play); - this->actor.world.pos.y = ((sp44 ? 144.0f : -144.0f) * (1.0f - this2->unk_198)) + this->actor.home.pos.y; + thisx->world.pos.y = ((sp44 ? 144.0f : -144.0f) * (1.0f - this->unk_198)) + thisx->home.pos.y; this->unk_1A6 = this->unk_198 * 255.0f; @@ -357,13 +357,12 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.dim.height = this->unk_198 * 80.0f; if (sp44) { - this->collider.dim.yShift = - (s32)(this->actor.home.pos.y - this->actor.world.pos.y) - this->collider.dim.height; + this->collider.dim.yShift = (s32)(thisx->home.pos.y - thisx->world.pos.y) - this->collider.dim.height; } else { - this->collider.dim.yShift = this->actor.home.pos.y - this->actor.world.pos.y; + this->collider.dim.yShift = thisx->home.pos.y - thisx->world.pos.y; } - func_800B9010(&this->actor, NA_SE_EV_BURNING - SFX_FLAG); + func_800B9010(thisx, NA_SE_EV_BURNING - SFX_FLAG); if (player->transformation == PLAYER_FORM_GORON) { this->collider.info.toucher.damage = 0; @@ -373,7 +372,7 @@ void ObjFireshield_Update(Actor* thisx, PlayState* play) { this->collider.info.toucher.effect = 1; } - Collider_UpdateCylinder(&this->actor, &this->collider); + Collider_UpdateCylinder(thisx, &this->collider); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c index 844f52506..aca30fe92 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -22,7 +22,7 @@ void func_80A1C838(ObjFlowerpot* this, PlayState* play); void func_80A1CBF8(ObjFlowerpot* this); void func_80A1CC0C(ObjFlowerpot* this, PlayState* play); void func_80A1CD10(ObjFlowerpot* this); -void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play); +void func_80A1CEF4(ObjFlowerpot* this, PlayState* play); u32 D_80A1D830; MtxF D_80A1D838[8]; @@ -589,8 +589,8 @@ void func_80A1CD10(ObjFlowerpot* this) { } } -void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { - ObjFlowerpot* this = this2; +void func_80A1CEF4(ObjFlowerpot* this, PlayState* play) { + Actor* thisx = &this->actor; s32 sp28 = this->collider.elements[0].info.toucherFlags & TOUCH_HIT; if (sp28) { @@ -603,7 +603,7 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { func_80A1C62C(this, play); - if ((this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 || + if ((thisx->bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_WALL)) || sp28 || (this->unk_1E8 <= 0)) { if (!(this->unk_1EA & 2)) { func_80A1B914(this, play); @@ -613,11 +613,11 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { } func_80A1BA44(this, play); func_80A1B994(this, play); - Actor_Kill(&this->actor); + Actor_Kill(thisx); return; } - if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { + if (thisx->bgCheckFlags & BGCHECKFLAG_WATER_TOUCH) { if (!(this->unk_1EA & 2)) { func_80A1B914(this, play); func_80A1C328(this, play); @@ -626,22 +626,22 @@ void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play) { } func_80A1BD80(this, play); func_80A1B994(this, play); - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L); - Actor_Kill(&this->actor); + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 40, NA_SE_EV_DIVE_INTO_WATER_L); + Actor_Kill(thisx); return; } - Actor_MoveWithGravity(&this->actor); + Actor_MoveWithGravity(thisx); if (!(this->unk_1EA & 2)) { - D_80A1D3F8 += (s16)(this->actor.shape.rot.x * -0.06f); + D_80A1D3F8 += (s16)(thisx->shape.rot.x * -0.06f); } else { Math_StepToS(&D_80A1D3F8, 0, 80); Math_StepToS(&D_80A1D3FC, 0, 20); } - this->actor.shape.rot.x += D_80A1D3F8; - this->actor.shape.rot.y += D_80A1D3FC; + thisx->shape.rot.x += D_80A1D3F8; + thisx->shape.rot.y += D_80A1D3FC; func_80A1C5E8(this, play); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c index e46c5da44..795d740f1 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c +++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c @@ -208,31 +208,31 @@ void func_809AB474(ObjGrassCarry* this) { } void func_809AB4A8(ObjGrassCarry* this, PlayState* play) { - ObjGrassCarry* this2 = this; + Actor* thisx = &this->actor; - if (Actor_HasParent(&this->actor, play)) { + if (Actor_HasParent(thisx, play)) { func_809AB5FC(this); if (this->unk_194 != NULL) { this->unk_194->unk_0F |= 4; } - this->actor.draw = func_809ABB7C; - this->actor.shape.shadowDraw = ActorShadow_DrawCircle; - this->actor.shape.shadowAlpha = 60; - this->actor.shape.shadowScale = 1.0f; + thisx->draw = func_809ABB7C; + thisx->shape.shadowDraw = ActorShadow_DrawCircle; + thisx->shape.shadowAlpha = 60; + thisx->shape.shadowScale = 1.0f; this->unk_190->unk_3292 ^= 1; - this->actor.room = -1; - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_PULL_UP_PLANT); + thisx->room = -1; + SoundSource_PlaySfxAtFixedWorldPos(play, &thisx->world.pos, 20, NA_SE_PL_PULL_UP_PLANT); } else if (this->unk_190->unk_3294 != NULL) { Player* player = GET_PLAYER(play); this->unk_194 = this->unk_190->unk_3294; - Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_194->unk_00); - this->actor.shape.rot.y = this->actor.world.rot.y = this->unk_194->unk_0C; - this->unk_198 = this2->unk_194->unk_0E; - this->actor.xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); - this->actor.playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor); - this->actor.xyzDistToPlayerSq = SQ(this->actor.xzDistToPlayer) + SQ(this->actor.playerHeightRel); - this->actor.yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor); + Math_Vec3f_Copy(&thisx->world.pos, &this->unk_194->unk_00); + thisx->shape.rot.y = thisx->world.rot.y = this->unk_194->unk_0C; + this->unk_198 = this->unk_194->unk_0E; + thisx->xzDistToPlayer = Actor_WorldDistXZToActor(&this->actor, &player->actor); + thisx->playerHeightRel = Actor_HeightDiff(&this->actor, &player->actor); + thisx->xyzDistToPlayerSq = SQ(thisx->xzDistToPlayer) + SQ(thisx->playerHeightRel); + thisx->yawTowardsPlayer = Actor_WorldYawTowardActor(&this->actor, &player->actor); Actor_OfferCarry(&this->actor, play); } } diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index b5547fdad..0ae8abe18 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -239,12 +239,12 @@ void func_80A237A4(ObjIceblock* this) { ((this->unk_244 - ((600.0f * this->dyna.actor.scale.y) - 90.0f)) + (sp20 * ptr->unk_08)) + ptr->unk_00; } -void func_80A23938(ObjIceblock* this2) { - ObjIceblock* this = this2; +void func_80A23938(ObjIceblock* this) { + Actor* thisx = &this->dyna.actor; if (this->unk_1B0 & 0x80) { - Math_ScaledStepToS(&this->dyna.actor.shape.rot.x, 0, 400); - Math_ScaledStepToS(&this->dyna.actor.shape.rot.z, 0, 400); + Math_ScaledStepToS(&thisx->shape.rot.x, 0, 400); + Math_ScaledStepToS(&thisx->shape.rot.z, 0, 400); } else { ObjIceBlockUnkStruct4* ptr = &this->unk_27C; f32 phi_f0; @@ -252,7 +252,7 @@ void func_80A23938(ObjIceblock* this2) { if (this->unk_1B0 & 0x20) { phi_f0 = 0.3f; - ptr->unk_14 = this->dyna.actor.yawTowardsPlayer; + ptr->unk_14 = thisx->yawTowardsPlayer; } else { phi_f0 = 0.08f; } @@ -264,16 +264,15 @@ void func_80A23938(ObjIceblock* this2) { temp = ptr->unk_16 - ptr->unk_14; - ptr->unk_18 += - (s16)(temp * -0.04f * this->dyna.actor.xzDistToPlayer * this->dyna.actor.scale.x * (1.0f / 600.0f)); + ptr->unk_18 += (s16)(temp * -0.04f * thisx->xzDistToPlayer * thisx->scale.x * (1.0f / 600.0f)); ptr->unk_18 = func_80A23090(ptr->unk_18, 50, 800); ptr->unk_16 += ptr->unk_18; - this->dyna.actor.shape.rot.x = Math_CosS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; - this->dyna.actor.shape.rot.x = CLAMP(this->dyna.actor.shape.rot.x, -2000, 2000); + thisx->shape.rot.x = Math_CosS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; + thisx->shape.rot.x = CLAMP(thisx->shape.rot.x, -2000, 2000); - this->dyna.actor.shape.rot.z = -Math_SinS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; - this->dyna.actor.shape.rot.z = CLAMP(this->dyna.actor.shape.rot.z, -2000, 2000); + thisx->shape.rot.z = -Math_SinS(ptr->unk_16) * ptr->unk_20 * ptr->unk_1C; + thisx->shape.rot.z = CLAMP(thisx->shape.rot.z, -2000, 2000); } } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index b7f7ece6e..a198f4a0f 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -140,7 +140,7 @@ void ObjTokeiStep_InitTimers(ObjTokeiStep* this) { } s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) { - ObjTokeiStep* this2 = this; + Actor* thisx = &this->dyna.actor; s32 i; ObjTokeiStepPanel* panel; f32 finalPosY; @@ -179,8 +179,8 @@ s32 ObjTokeiStep_OpenProcess(ObjTokeiStep* this, PlayState* play) { panel->pos.y += finalPosY; } if (panel->numBounces == 1) { - ObjTokeiStep_SpawnDust(this2, panel, play); - ObjTokeiStep_RequestQuakeAndRumble(this2, play); + ObjTokeiStep_SpawnDust(this, panel, play); + ObjTokeiStep_RequestQuakeAndRumble(this, play); } } } From a0701c170b5861572eab29bc9f0aed92aa0e11d9 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 6 Jun 2023 08:54:18 -0400 Subject: [PATCH 31/36] `z64game.h` (#1250) * z64game.h * grrrrr * fix missing stuff * Update include/z64game.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/z64game.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * global.h to the top * reiew * fix --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 19 ---- include/macros.h | 15 --- include/variables.h | 5 +- include/z64.h | 49 +-------- include/z64game.h | 104 ++++++++++++++++++ include/z_prenmi.h | 10 +- include/z_title_setup.h | 8 +- src/code/game.c | 6 +- src/code/z_prenmi.c | 8 +- .../gamestates/ovl_daytelop/z_daytelop.c | 3 +- .../gamestates/ovl_daytelop/z_daytelop.h | 10 +- .../ovl_file_choose/z_file_select.h | 5 + .../gamestates/ovl_opening/z_opening.c | 3 + .../gamestates/ovl_opening/z_opening.h | 18 +-- src/overlays/gamestates/ovl_select/z_select.h | 7 +- src/overlays/gamestates/ovl_title/z_title.h | 8 +- 16 files changed, 155 insertions(+), 123 deletions(-) create mode 100644 include/z64game.h diff --git a/include/functions.h b/include/functions.h index 71aa14729..626bfc261 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1874,25 +1874,6 @@ void AudioMgr_ThreadEntry(void* arg); void AudioMgr_Unlock(AudioMgr* audioMgr); void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr); -void Game_UpdateFramerateVariables(s32 divisor); -void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); -void GameState_SetFBFilter(Gfx** gfx, void* zbuffer); -void Game_Nop80173534(GameState* gameState); -void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx); -void GameState_SetFrameBuffer(GraphicsContext* gfxCtx); -void func_801736DC(GraphicsContext* gfxCtx); -void Game_UpdateInput(GameState* gameState); -void Game_Update(GameState* gameState); -void Game_IncrementFrameCount(GameState* gameState); -void GameState_InitArena(GameState* gameState, size_t size); -void GameState_Realloc(GameState* gameState, size_t size); -void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* gfxCtx); -void GameState_Destroy(GameState* gameState); -GameStateFunc GameState_GetInit(GameState* gameState); -size_t GameState_GetSize(GameState* gameState); -u32 GameState_IsRunning(GameState* gameState); -s32 GameState_GetArenaSize(GameState* gameState); -s32 func_80173B48(GameState* gameState); void GameAlloc_Log(GameAlloc* this); void* GameAlloc_Malloc(GameAlloc* this, size_t size); void GameAlloc_Free(GameAlloc* this, void* data); diff --git a/include/macros.h b/include/macros.h index 25ccb3d37..9f2305e01 100644 --- a/include/macros.h +++ b/include/macros.h @@ -28,21 +28,6 @@ #define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId]) -#define STOP_GAMESTATE(curState) \ - do { \ - GameState* state = curState; \ - \ - state->running = false; \ - } while(0) - -#define SET_NEXT_GAMESTATE(curState, nextInit, nextSize) \ - do { \ - GameState* state = curState; \ - \ - (state)->init = nextInit; \ - (state)->size = nextSize; \ - } while (0) - #define GET_PLAYER(play) ((Player*)(play)->actorCtx.actorLists[ACTORCAT_PLAYER].first) #define GET_FIRST_ENEMY(play) ((Actor*)(play)->actorCtx.actorLists[ACTORCAT_ENEMY].first) diff --git a/include/variables.h b/include/variables.h index fef772123..ba1548f0f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -745,10 +745,7 @@ extern Input* D_801D0D60; // extern UNK_TYPE2 D_801D14E4; // extern UNK_TYPE2 D_801D14E8; // extern UNK_TYPE4 D_801D14F0; -extern s32 gFramerateDivisor; -extern f32 gFramerateDivisorF; -extern f32 gFramerateDivisorHalf; -extern f32 gFramerateDivisorThird; + extern u32 retryCount; extern u32 cfbIdx[3]; extern s32 gScreenWidth; diff --git a/include/z64.h b/include/z64.h index 637f28dc4..1b9cabdc9 100644 --- a/include/z64.h +++ b/include/z64.h @@ -44,6 +44,7 @@ #include "z64effect.h" #include "z64frameadvance.h" #include "z64game_over.h" +#include "z64game.h" #include "z64interface.h" #include "z64item.h" #include "z64light.h" @@ -407,54 +408,6 @@ typedef struct { /* 0x844 */ void* fb; } FaultThreadStruct; // size = 0x848 -struct GameState; - -typedef void (*GameStateFunc)(struct GameState* gameState); - -typedef struct { - /* 0x00 */ void* loadedRamAddr; - /* 0x04 */ uintptr_t vromStart; // if applicable - /* 0x08 */ uintptr_t vromEnd; // if applicable - /* 0x0C */ void* vramStart; // if applicable - /* 0x10 */ void* vramEnd; // if applicable - /* 0x14 */ UNK_PTR unk_14; - /* 0x18 */ GameStateFunc init; // initializes and executes the given context - /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load - /* 0x20 */ UNK_PTR unk_20; - /* 0x24 */ UNK_PTR unk_24; - /* 0x28 */ UNK_TYPE unk_28; - /* 0x2C */ size_t instanceSize; -} GameStateOverlay; // size = 0x30 - -typedef struct GameAllocEntry { - /* 0x0 */ struct GameAllocEntry* next; - /* 0x4 */ struct GameAllocEntry* prev; - /* 0x8 */ size_t size; - /* 0xC */ u32 unk_0C; -} GameAllocEntry; // size = 0x10 - -typedef struct GameAlloc { - /* 0x00 */ GameAllocEntry base; - /* 0x10 */ GameAllocEntry* head; -} GameAlloc; // size = 0x14 - -typedef struct GameState { - /* 0x00 */ GraphicsContext* gfxCtx; - /* 0x04 */ GameStateFunc main; - /* 0x08 */ GameStateFunc destroy; - /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load. - /* 0x10 */ size_t size; - /* 0x14 */ Input input[MAXCONTROLLERS]; - /* 0x74 */ TwoHeadArena heap; - /* 0x84 */ GameAlloc alloc; - /* 0x98 */ UNK_TYPE1 pad98[0x3]; - /* 0x9B */ u8 running; // If 0, switch to next game state - /* 0x9C */ u32 frames; - /* 0xA0 */ u8 padA0[0x2]; - /* 0xA2 */ u8 framerateDivisor; // game speed? - /* 0xA3 */ u8 unk_A3; -} GameState; // size = 0xA4 - struct PlayState; typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*); diff --git a/include/z64game.h b/include/z64game.h new file mode 100644 index 000000000..c5551edc7 --- /dev/null +++ b/include/z64game.h @@ -0,0 +1,104 @@ +#ifndef Z64_GAME_H +#define Z64_GAME_H + +#include "ultra64.h" +#include "libc/stdbool.h" +#include "libc/stdint.h" +#include "io/controller.h" +#include "tha.h" +#include "padmgr.h" + +struct GraphicsContext; +struct GameState; + + +typedef void (*GameStateFunc)(struct GameState* gameState); + +typedef struct { + /* 0x00 */ void* loadedRamAddr; + /* 0x04 */ uintptr_t vromStart; // if applicable + /* 0x08 */ uintptr_t vromEnd; // if applicable + /* 0x0C */ void* vramStart; // if applicable + /* 0x10 */ void* vramEnd; // if applicable + /* 0x14 */ UNK_PTR unk_14; + /* 0x18 */ GameStateFunc init; // initializes and executes the given context + /* 0x1C */ GameStateFunc destroy; // deconstructs the context, and sets the next context to load + /* 0x20 */ UNK_PTR unk_20; + /* 0x24 */ UNK_PTR unk_24; + /* 0x28 */ UNK_TYPE unk_28; + /* 0x2C */ size_t instanceSize; +} GameStateOverlay; // size = 0x30 + +typedef struct GameAllocEntry { + /* 0x0 */ struct GameAllocEntry* next; + /* 0x4 */ struct GameAllocEntry* prev; + /* 0x8 */ size_t size; + /* 0xC */ u32 unk_0C; +} GameAllocEntry; // size = 0x10 + +typedef struct GameAlloc { + /* 0x00 */ GameAllocEntry base; + /* 0x10 */ GameAllocEntry* head; +} GameAlloc; // size = 0x14 + +typedef struct GameState { + /* 0x00 */ struct GraphicsContext* gfxCtx; + /* 0x04 */ GameStateFunc main; + /* 0x08 */ GameStateFunc destroy; + /* 0x0C */ GameStateFunc init; // Usually the current game state's init, though after stopping, the graph thread will look here to determine the next game state to load. + /* 0x10 */ size_t size; + /* 0x14 */ Input input[MAXCONTROLLERS]; + /* 0x74 */ TwoHeadArena heap; + /* 0x84 */ GameAlloc alloc; + /* 0x98 */ UNK_TYPE1 pad98[0x3]; + /* 0x9B */ u8 running; // If 0, switch to next game state + /* 0x9C */ u32 frames; + /* 0xA0 */ u8 padA0[0x2]; + /* 0xA2 */ u8 framerateDivisor; + /* 0xA3 */ u8 unk_A3; +} GameState; // size = 0xA4 + + +void Game_UpdateFramerateVariables(s32 divisor); +void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); +void GameState_SetFBFilter(Gfx** gfx, void* zbuffer); +void Game_Nop80173534(GameState* gameState); +void GameState_Draw(GameState* gameState, struct GraphicsContext* gfxCtx); +void GameState_SetFrameBuffer(struct GraphicsContext* gfxCtx); +void func_801736DC(struct GraphicsContext* gfxCtx); +void Game_UpdateInput(GameState* gameState); +void Game_Update(GameState* gameState); +void Game_IncrementFrameCount(GameState* gameState); +void GameState_InitArena(GameState* gameState, size_t size); +void GameState_Realloc(GameState* gameState, size_t size); +void GameState_Init(GameState* gameState, GameStateFunc init, struct GraphicsContext* gfxCtx); +void GameState_Destroy(GameState* gameState); +GameStateFunc GameState_GetInit(GameState* gameState); +size_t GameState_GetSize(GameState* gameState); +u32 GameState_IsRunning(GameState* gameState); +s32 GameState_GetArenaSize(GameState* gameState); +s32 func_80173B48(GameState* gameState); + +extern s32 gFramerateDivisor; +extern f32 gFramerateDivisorF; +extern f32 gFramerateDivisorHalf; +extern f32 gFramerateDivisorThird; + + +#define STOP_GAMESTATE(curState) \ + do { \ + GameState* state = curState; \ + \ + state->running = false; \ + } while(0) + +#define SET_NEXT_GAMESTATE(curState, nextInit, nextSize) \ + do { \ + GameState* state = curState; \ + \ + (state)->init = nextInit; \ + (state)->size = nextSize; \ + } while (0) + + +#endif diff --git a/include/z_prenmi.h b/include/z_prenmi.h index 04c3f5f16..7be3eb16f 100644 --- a/include/z_prenmi.h +++ b/include/z_prenmi.h @@ -1,15 +1,15 @@ #ifndef Z64PRENMI_H #define Z64PRENMI_H -#include "global.h" - -void PreNMI_Destroy(GameState* thisx); -void PreNMI_Init(GameState* thisx); +#include "z64game.h" typedef struct { /* 0x00 */ GameState state; /* 0xA4 */ u32 timer; - /* 0xA8 */ UNK_TYPE4 unkA8; + /* 0xA8 */ s32 unk_A8; } PreNMIState; // size = 0xAC +void PreNMI_Destroy(GameState* thisx); +void PreNMI_Init(GameState* thisx); + #endif diff --git a/include/z_title_setup.h b/include/z_title_setup.h index 3b299af97..1bd7c7d7d 100644 --- a/include/z_title_setup.h +++ b/include/z_title_setup.h @@ -1,13 +1,13 @@ #ifndef Z64TITLE_SETUP_H #define Z64TITLE_SETUP_H -#include "global.h" - -void Setup_Destroy(GameState* gameState); -void Setup_Init(GameState* thisx); +#include "z64game.h" typedef struct { /* 0x00 */ GameState state; } SetupState; // size = 0xA4 +void Setup_Destroy(GameState* gameState); +void Setup_Init(GameState* thisx); + #endif diff --git a/src/code/game.c b/src/code/game.c index c98241177..8f4e0f44d 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -11,9 +11,9 @@ f32 gFramerateDivisorThird = 1.0f / 3.0f; void Game_UpdateFramerateVariables(s32 divisor) { gFramerateDivisor = divisor; - gFramerateDivisorF = (f32)divisor; - gFramerateDivisorHalf = (f32)(divisor * 0.5f); - gFramerateDivisorThird = (f32)(divisor / 3.0f); + gFramerateDivisorF = divisor; + gFramerateDivisorHalf = divisor / 2.0f; + gFramerateDivisorThird = divisor / 3.0f; } void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) { diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c index 94d235a37..097d4d946 100644 --- a/src/code/z_prenmi.c +++ b/src/code/z_prenmi.c @@ -1,3 +1,4 @@ +#include "global.h" #include "z_prenmi.h" void PreNMI_Stop(PreNMIState* this) { @@ -9,10 +10,9 @@ void PreNMI_Update(PreNMIState* this) { if (this->timer == 0) { ViConfig_UpdateVi(1); PreNMI_Stop(this); - return; + } else { + this->timer--; } - - this->timer--; } void PreNMI_Draw(PreNMIState* this) { @@ -48,7 +48,7 @@ void PreNMI_Init(GameState* thisx) { this->state.main = PreNMI_Main; this->state.destroy = PreNMI_Destroy; this->timer = 30; - this->unkA8 = 10; + this->unk_A8 = 10; Game_SetFramerateDivisor(&this->state, 1); } diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c index 108ccedcd..134c6457b 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.c +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.c @@ -4,9 +4,10 @@ * Description: "Dawn of ... day" screen */ +#include "global.h" #include "z_daytelop.h" +#include "z64save.h" #include "z64shrink_window.h" -#include "z64view.h" #include "misc/daytelop_static/daytelop_static.h" #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" diff --git a/src/overlays/gamestates/ovl_daytelop/z_daytelop.h b/src/overlays/gamestates/ovl_daytelop/z_daytelop.h index a7350e898..da49827c3 100644 --- a/src/overlays/gamestates/ovl_daytelop/z_daytelop.h +++ b/src/overlays/gamestates/ovl_daytelop/z_daytelop.h @@ -1,16 +1,13 @@ #ifndef Z64_DAYTELOP_H #define Z64_DAYTELOP_H -#include "global.h" - -void DayTelop_Init(GameState* thisx); -void DayTelop_Destroy(GameState* thisx); +#include "z64game.h" +#include "z64view.h" typedef struct { /* 0x000 */ GameState state; /* 0x0A4 */ void* daytelopStaticFile; /* 0x0A8 */ void* gameoverStaticFile; - /* 0x0AC */ UNK_TYPE1 unk_AC[0x4]; /* 0x0B0 */ View view; /* 0x218 */ UNK_TYPE1 unk_218[0x28]; /* 0x240 */ s16 transitionCountdown; @@ -24,4 +21,7 @@ typedef enum { /* 2 */ DAYTELOP_HOURSTEXT_ON } DaytelopFadeState; +void DayTelop_Init(GameState* thisx); +void DayTelop_Destroy(GameState* thisx); + #endif diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_select.h b/src/overlays/gamestates/ovl_file_choose/z_file_select.h index 7dcc72a9d..88236e63e 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_select.h +++ b/src/overlays/gamestates/ovl_file_choose/z_file_select.h @@ -2,6 +2,11 @@ #define FILE_SELECT_H #include "global.h" +#include "z64game.h" +#include "z64message.h" +#include "z64skybox.h" +#include "z64view.h" + // `sramCtx->noFlashSaveBuf` is never allocated space, so should never be used // Slot offsets are also based on OoT SaveContext sizes, and contains incorrect sizes from MM diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index 9697b111f..84425cc73 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -4,9 +4,12 @@ * Description: Initializes the game into the title screen */ +#include "global.h" #include "z_opening.h" +#include "z64save.h" #include "z64shrink_window.h" #include "z64view.h" +#include "regs.h" void TitleSetup_SetupTitleScreen(TitleSetupState* this) { static s32 sOpeningEntrances[] = { ENTRANCE(CUTSCENE, 0), ENTRANCE(CUTSCENE, 1) }; diff --git a/src/overlays/gamestates/ovl_opening/z_opening.h b/src/overlays/gamestates/ovl_opening/z_opening.h index 36a01ffe9..530b069e1 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.h +++ b/src/overlays/gamestates/ovl_opening/z_opening.h @@ -1,15 +1,15 @@ -#ifndef _Z64_OPENING_H_ -#define _Z64_OPENING_H_ +#ifndef Z64_OPENING_H +#define Z64_OPENING_H -#include "global.h" +#include "z64game.h" +#include "z64view.h" + +typedef struct { + /* 0x000 */ GameState state; + /* 0x0A8 */ View view; +} TitleSetupState; // size = 0x210 void TitleSetup_Init(GameState* thisx); void TitleSetup_Destroy(GameState* thisx); -typedef struct { - /* 0x000 */ GameState state; - /* 0x0A4 */ UNK_TYPE1 unk_A4[0x4]; - /* 0x0A8 */ View view; -} TitleSetupState; // size = 0x210 - #endif diff --git a/src/overlays/gamestates/ovl_select/z_select.h b/src/overlays/gamestates/ovl_select/z_select.h index 8b5974103..876c9e3ff 100644 --- a/src/overlays/gamestates/ovl_select/z_select.h +++ b/src/overlays/gamestates/ovl_select/z_select.h @@ -1,7 +1,8 @@ -#ifndef _Z64_SELECT_H_ -#define _Z64_SELECT_H_ +#ifndef Z64_SELECT_H +#define Z64_SELECT_H -#include "global.h" +#include "z64game.h" +#include "z64view.h" struct MapSelectState; diff --git a/src/overlays/gamestates/ovl_title/z_title.h b/src/overlays/gamestates/ovl_title/z_title.h index 0cb19da1a..ee5d5c841 100644 --- a/src/overlays/gamestates/ovl_title/z_title.h +++ b/src/overlays/gamestates/ovl_title/z_title.h @@ -2,9 +2,8 @@ #define Z64_TITLE_H #include "global.h" - -void ConsoleLogo_Init(GameState* thisx); -void ConsoleLogo_Destroy(GameState* thisx); +#include "z64game.h" +#include "z64view.h" typedef struct { /* 0x000 */ GameState state; @@ -20,4 +19,7 @@ typedef struct { /* 0x244 */ u8 exit; } ConsoleLogoState; // size = 0x248 +void ConsoleLogo_Init(GameState* thisx); +void ConsoleLogo_Destroy(GameState* thisx); + #endif From 8c961f2b16334649b0d3ad811b856b95381c87d2 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 6 Jun 2023 07:54:50 -0700 Subject: [PATCH 32/36] Play_Hireso (Bombers Notebook) OK w/ Docs (#1235) * Start * Try every function * Import data * Docs from message branch * Fix non-equivalency for func_8016AE1C * Everything looks NON_MATCHING * Some more clean up and docs * Some cleanup * Small format * Small improvements here and there * Match a couple * Anotha one * and than there was 1 * and than there were none :) * Lots of docs * Finish code docs * schedule static * Macros + cleanup * text ids array cleanup * Entries cleanup * Use sBombersNotebookEntries in macros * Some docs from message branch * eventIndex -> event * Remove outdated comments * PR * BOMBERS_NOTEBOOK_ENTRY_SIZE * tables * Token pasting to simplify * Some more fixes * PR pt 1 * Format * Bring over BombersNotebook docs from z_message branch Co-authored-by: ZoeyZolotova * Full enum glory * Format * Name weekeventregs * typo * Some comments * bss * Review * bss * Update src/code/z_play_hireso.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Fix * Namefixer * bss * Format * 0 = 0x0000 --------- Co-authored-by: ZoeyZolotova Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/interface/schedule_static.xml | 38 + include/PR/gbi.h | 4 +- include/functions.h | 15 +- include/macros.h | 2 + include/segment_symbols.h | 1 + include/tables/bombers_notebook/event_table.h | 48 + .../tables/bombers_notebook/person_table.h | 31 + include/variables.h | 49 - include/z64.h | 21 +- include/z64bombers_notebook.h | 58 + include/z64message.h | 7 +- include/z64save.h | 144 +- spec | 4 +- src/code/z_kaleido_scope_call.c | 1 - src/code/z_message.c | 61 +- src/code/z_play.c | 5 +- src/code/z_play_hireso.c | 1362 ++++++++++++++++- src/code/z_quake.c | 1 + src/code/z_skelanime.c | 1 - .../actors/ovl_Bg_Breakwall/z_bg_breakwall.c | 2 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 16 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 2 +- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 8 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 16 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 2 +- src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 34 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 10 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 4 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 6 +- src/overlays/actors/ovl_En_In/z_en_in.c | 69 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 34 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 92 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 31 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 14 +- src/overlays/actors/ovl_En_Nb/z_en_nb.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 6 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 10 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 4 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 10 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 16 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 1 - src/overlays/actors/ovl_En_Toto/z_en_toto.c | 14 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 4 +- .../actors/ovl_Obj_Dinner/z_obj_dinner.c | 3 +- .../actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c | 6 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 24 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.c | 2 +- .../actors/ovl_player_actor/z_player.c | 5 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 2 +- tools/disasm/disasm.py | 5 +- tools/disasm/functions.txt | 20 +- tools/disasm/variables.txt | 23 +- tools/namefixer.py | 1 + tools/permuter_settings.toml | 2 + tools/sizes/code_functions.csv | 20 +- tools/weekeventregconvert.py | 140 +- undefined_syms.txt | 23 + 57 files changed, 2015 insertions(+), 521 deletions(-) create mode 100644 assets/xml/interface/schedule_static.xml create mode 100644 include/tables/bombers_notebook/event_table.h create mode 100644 include/tables/bombers_notebook/person_table.h create mode 100644 include/z64bombers_notebook.h diff --git a/assets/xml/interface/schedule_static.xml b/assets/xml/interface/schedule_static.xml new file mode 100644 index 000000000..68b097d51 --- /dev/null +++ b/assets/xml/interface/schedule_static.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/PR/gbi.h b/include/PR/gbi.h index 3ba8748b0..1b57c6a34 100644 --- a/include/PR/gbi.h +++ b/include/PR/gbi.h @@ -4699,7 +4699,7 @@ _DW({ \ /* like gSPTextureRectangle but accepts negative position arguments */ #define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ @@ -4723,7 +4723,7 @@ _DW({ \ 0, 16))); \ gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \ _SHIFTL((dtdy), 0, 16))); \ -} +}) #define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ diff --git a/include/functions.h b/include/functions.h index 626bfc261..04f6dfb73 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1695,7 +1695,7 @@ void func_801514B0(PlayState* play, u16 arg1, u8 arg2); void Message_StartTextbox(PlayState* play, u16 textId, Actor* Actor); void Message_ContinueTextbox(PlayState* play, u16 textId); void func_80151A68(PlayState* play, u16 textId); -void func_80151BB4(PlayState* play, u8 arg1); +void Message_BombersNotebookQueueEvent(PlayState* play, u8 event); // void func_80151C9C(void); void func_80151DA4(PlayState* play, u16 arg2); void func_80152434(PlayState* play, u16 arg2); @@ -1825,19 +1825,6 @@ void Play_AssignPlayerCsIdsFromScene(GameState* thisx, s32 spawnCsId); void Play_FillScreen(GameState* thisx, s16 fillScreenOn, u8 red, u8 green, u8 blue, u8 alpha); void Play_Init(GameState* thisx); -// void func_8016AC10(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); -// void func_8016AE1C(void); -// void func_8016B278(void); -// void func_8016B4B0(void); -// void func_8016C344(void); -// void func_8016CD4C(void); -// void func_8016E40C(void); -// void func_8016EA90(void); -void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx); -// void func_8016F4EC(void); -void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input); -void BombersNotebook_Init(BombersNotebook* this); -void BombersNotebook_Destroy(BombersNotebook* this); void PreRender_SetValuesSave(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf, void* cvg); void PreRender_Init(PreRender* this); void PreRender_SetValues(PreRender* this, u32 width, u32 height, void* fbuf, void* zbuf); diff --git a/include/macros.h b/include/macros.h index 9f2305e01..d2b98dec5 100644 --- a/include/macros.h +++ b/include/macros.h @@ -34,6 +34,7 @@ #define CLOCK_TIME(hr, min) (s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60)) #define CLOCK_TIME_MINUTE (CLOCK_TIME(0, 1)) +#define CLOCK_TIME_HOUR (CLOCK_TIME(1, 0)) #define DAY_LENGTH (CLOCK_TIME(24, 0)) #define TIME_TO_HOURS_F(time) ((time) * (24.0f / 0x10000)) @@ -44,6 +45,7 @@ #define CLOCK_TIME_F(hr, min) (((hr) * 60.0f + (min)) * (0x10000 / (24.0f * 60.0f))) #define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000)) #define CLOCK_TIME_ALT2_F(hr, min) ((((hr) + (min) / 60.0f) * 60.0f) / (24.0f * 60.0f / 0x10000)) +#define CLOCK_TIME_HOUR_F (CLOCK_TIME_F(1, 0)) #define CAPACITY(upg, value) gUpgradeCapacities[upg][value] #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) diff --git a/include/segment_symbols.h b/include/segment_symbols.h index a8e88e794..d7c959d23 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -57,6 +57,7 @@ DECLARE_ROM_SEGMENT(icon_item_static_old) DECLARE_ROM_SEGMENT(icon_item_24_static_test) DECLARE_ROM_SEGMENT(icon_item_24_static_old) DECLARE_ROM_SEGMENT(schedule_dma_static_test) +DECLARE_ROM_SEGMENT(schedule_dma_static_old) DECLARE_ROM_SEGMENT(schedule_static) DECLARE_ROM_SEGMENT(story_static) DECLARE_ROM_SEGMENT(do_action_static) diff --git a/include/tables/bombers_notebook/event_table.h b/include/tables/bombers_notebook/event_table.h new file mode 100644 index 000000000..161269a7e --- /dev/null +++ b/include/tables/bombers_notebook/event_table.h @@ -0,0 +1,48 @@ +/** + * Bombers Notebook Event Table + * + * DEFINE_EVENT should be used for events in the notebook + * - Argument 0: Enum value for the event + * - Argument 1: Icon to use (see BombersNotebookEventIcon) + * - Argument 2: WeekEventFlag that updates the icons color + * - Argument 3: Message id for the description of this event + * - Argument 4: Message id for the completion of this event + * - Argument 5: WeekEventFlag for the completion of this event + * + * Note: These events are after the MET events, so will start indexing at BOMBERS_NOTEBOOK_PERSON_MAX + */ +/* 0x14 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x2198, 0x2152, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY) +/* 0x15 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING, 0x2199, 0x2153, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING) +/* 0x16 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x219A, 0x2154, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI) +/* 0x17 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x219B, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI) +/* 0x18 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI, 0x219C, 0x2156, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI) +/* 0x19 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES, 0x219D, 0x2157, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES) +/* 0x1A */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x219E, 0x2158, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES) +/* 0x1B */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x219F, 0x2159, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT) +/* 0x1C */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM, 0x21A0, 0x215A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM) +/* 0x1D */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_DEFENDED_AGAINST_THEM, 0x21A1, 0x215B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM) +/* 0x1E */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A2, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE) +/* 0x1F */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_ESCORTED_CREMIA, 0x21A3, 0x215D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA) +/* 0x20 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A4, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK) +/* 0x21 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A5, 0x215F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK) +/* 0x22 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, WEEKEVENTREG_RECEIVED_PRIORITY_MAIL, 0x21A6, 0x2160, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL) +/* 0x23 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A7, 0x2161, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL) +/* 0x24 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A8, 0x0000, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE) +/* 0x25 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21A9, 0x2163, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK) +/* 0x26 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AA, 0x2164, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP) +/* 0x27 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AB, 0x2165, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP) +/* 0x28 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AC, 0x2166, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP) +/* 0x29 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AD, 0x2167, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP) +/* 0x2A */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AE, 0x2168, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP) +/* 0x2B */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21AF, 0x2169, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP) +/* 0x2C */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B0, 0x216A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK) +/* 0x2D */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B1, 0x216B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK) +/* 0x2E */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B2, 0x216C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD) +/* 0x2F */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B3, 0x216D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK) +/* 0x30 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B4, 0x216E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK) +/* 0x31 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B5, 0x216F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT) +/* 0x32 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B6, 0x2170, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK) +/* 0x33 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B7, 0x2171, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK) +/* 0x34 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B8, 0x2172, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK) +/* 0x35 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21B9, 0x2173, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK) +/* 0x36 */ DEFINE_EVENT(BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, BOMBERS_NOTEBOOK_EVENT_ICON_MASK, BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE, 0x21BA, 0x2174, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK) diff --git a/include/tables/bombers_notebook/person_table.h b/include/tables/bombers_notebook/person_table.h new file mode 100644 index 000000000..71771956b --- /dev/null +++ b/include/tables/bombers_notebook/person_table.h @@ -0,0 +1,31 @@ +/** + * Bombers Notebook Person Table + * + * DEFINE_PERSON should be used for people with entries in the notebook + * - Argument 0: Enum value for this person + * - Argument 1: Photo texture for this person + * - Argument 2: Message id for the description of this person + * - Argument 3: Enum value for the event meeting this person + * - Argument 4: Message id for the event meeting this person + * - Argument 5: WeekEventFlag for the event meeting this person + */ +/* 0x00 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMBERS, D_07009800, 0x21DD, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS, 0x2147, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) +/* 0x01 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJU, D_07000000, 0x21CA, BOMBERS_NOTEBOOK_EVENT_MET_ANJU, 0x2134, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) +/* 0x02 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAFEI, D_07000800, 0x21CB, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI, 0x2135, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) +/* 0x03 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CURIOSITY_SHOP_MAN, D_07001000, 0x21CC, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN, 0x2136, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) +/* 0x04 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_BOMB_SHOP_LADY, D_07001800, 0x21CD, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY, 0x2137, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) +/* 0x05 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROMANI, D_07002000, 0x21CE, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI, 0x2138, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) +/* 0x06 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CREMIA, D_07002800, 0x21CF, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA, 0x2139, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) +/* 0x07 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MAYOR_DOTOUR, D_07003000, 0x21D0, BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR, 0x213A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) +/* 0x08 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MADAME_AROMA, D_07003800, 0x21D1, BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA, 0x213B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA) +/* 0x09 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOTO, D_07004000, 0x21D2, BOMBERS_NOTEBOOK_EVENT_MET_TOTO, 0x213C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) +/* 0x0A */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN, D_07004800, 0x21D3, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN, 0x213D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) +/* 0x0B */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_POSTMAN, D_07005000, 0x21D4, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN, 0x213E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) +/* 0x0C */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROSA_SISTERS, D_07005800, 0x21D5, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS, 0x213F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) +/* 0x0D */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOILET_HAND, D_07006000, 0x21D6, BOMBERS_NOTEBOOK_EVENT_MET_TOLIET_HAND, 0x2140, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) +/* 0x0E */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJUS_GRANDMOTHER, D_07006800, 0x21D7, BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER, 0x2141, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) +/* 0x0F */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAMARO, D_07007000, 0x21D8, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO, 0x2142, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) +/* 0x10 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GROG, D_07007800, 0x21D9, BOMBERS_NOTEBOOK_EVENT_MET_GROG, 0x2143, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG) +/* 0x11 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN_BROTHERS, D_07008000, 0x21DA, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS, 0x2144, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) +/* 0x12 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_SHIRO, D_07008800, 0x21DB, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO, 0x2145, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) +/* 0x13 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GURU_GURU, D_07009000, 0x21DC, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU, 0x2146, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) diff --git a/include/variables.h b/include/variables.h index ba1548f0f..108fa5833 100644 --- a/include/variables.h +++ b/include/variables.h @@ -563,8 +563,6 @@ extern UNK_PTR D_801C5CB0; // extern UNK_TYPE2 D_801C6A90; // extern UNK_TYPE2 D_801C6A94; extern u8 gPageSwitchNextButtonStatus[6][5]; -// extern UNK_TYPE1 D_801C6AB8; -// extern UNK_TYPE1 D_801C6B28; // extern UNK_TYPE1 D_801CED40; // extern UNK_TYPE2 D_801CFC78; // extern UNK_TYPE1 D_801CFC7A; @@ -697,53 +695,6 @@ extern s32 gDbgCamEnabled; extern Input* D_801D0D60; // extern UNK_TYPE2 sPlayerCsIdToCsCamId; // extern UNK_TYPE1 D_801D0D7A; -// extern UNK_TYPE1 D_801D0D80; -// extern UNK_TYPE1 D_801D11F4; -// extern UNK_TYPE1 D_801D1230; -// extern UNK_TYPE1 D_801D1234; -// extern UNK_TYPE4 D_801D1238; -// extern UNK_TYPE1 D_801D1244; -// extern UNK_TYPE1 D_801D12C0; -// extern UNK_TYPE1 D_801D12D0; -// extern UNK_TYPE1 D_801D12D4; -// extern UNK_TYPE1 D_801D12D8; -// extern UNK_TYPE1 D_801D12DC; -// extern UNK_TYPE2 D_801D1330; -// extern UNK_TYPE1 D_801D1342; -// extern UNK_TYPE2 D_801D1344; -// extern UNK_TYPE1 D_801D1368; -// extern UNK_TYPE2 D_801D1374; -// extern UNK_TYPE1 D_801D1388; -// extern UNK_TYPE2 D_801D13D8; -// extern UNK_TYPE2 D_801D13DC; -// extern UNK_TYPE2 D_801D13E0; -// extern UNK_TYPE2 D_801D13E4; -// extern UNK_TYPE4 D_801D13E8; -// extern UNK_TYPE1 D_801D13EC; -// extern UNK_TYPE1 D_801D13F0; -// extern UNK_TYPE1 D_801D13F4; -// extern UNK_TYPE1 D_801D13F8; -// extern UNK_TYPE1 D_801D1420; -// extern UNK_TYPE2 D_801D142C; -// extern UNK_TYPE2 D_801D1434; -// extern UNK_TYPE2 D_801D1438; -// extern UNK_TYPE2 D_801D143C; -// extern UNK_TYPE2 D_801D1440; -// extern UNK_TYPE2 D_801D1444; -// extern UNK_TYPE2 D_801D1448; -// extern UNK_TYPE2 D_801D144C; -// extern UNK_TYPE2 D_801D1450; -// extern UNK_TYPE2 D_801D1454; -// extern UNK_TYPE2 D_801D1458; -// extern UNK_TYPE2 D_801D145C; -// extern UNK_TYPE2 D_801D1460; -// extern UNK_TYPE1 D_801D1464; -// extern UNK_TYPE1 D_801D1468; -// extern UNK_TYPE1 D_801D146C; -// extern UNK_TYPE2 D_801D14DC; -// extern UNK_TYPE2 D_801D14E0; -// extern UNK_TYPE2 D_801D14E4; -// extern UNK_TYPE2 D_801D14E8; // extern UNK_TYPE4 D_801D14F0; extern u32 retryCount; diff --git a/include/z64.h b/include/z64.h index 1b9cabdc9..641a060b4 100644 --- a/include/z64.h +++ b/include/z64.h @@ -35,6 +35,7 @@ #include "z64animation_legacy.h" #include "z64audio.h" #include "z64bgcheck.h" +#include "z64bombers_notebook.h" #include "z64camera.h" #include "z64collision_check.h" #include "z64curve.h" @@ -529,26 +530,6 @@ typedef struct PlayState { /* 0x18E6C */ char unk_18E6C[0x3EC]; } PlayState; // size = 0x19258 -typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x01 */ char unk_01[0x3F]; - /* 0x40 */ void* unk_40; - /* 0x44 */ u32 unk_44; - /* 0x48 */ u32 unk_48; - /* 0x4C */ DmaRequest unk_4C; - /* 0x6C */ OSMesgQueue unk_6C; - /* 0x84 */ OSMesg unk_84[1]; - /* 0x88 */ void* unk_88; - /* 0x8C */ uintptr_t unk_8C; - /* 0x90 */ size_t unk_90; - /* 0x94 */ s32 unk_94; - /* 0x98 */ s32 unk_98; - /* 0x9C */ s32 unk_9C; - /* 0xA0 */ char unk_A0[0x4]; - /* 0xA4 */ s32 unk_A4; - /* 0xA8 */ s32 unk_A8; -} BombersNotebook; // size = 0xAC - typedef enum { /* 0 */ PICTO_PHOTO_STATE_OFF, /* 1 */ PICTO_PHOTO_STATE_SETUP, diff --git a/include/z64bombers_notebook.h b/include/z64bombers_notebook.h new file mode 100644 index 000000000..403f4a88a --- /dev/null +++ b/include/z64bombers_notebook.h @@ -0,0 +1,58 @@ +#ifndef Z64BOMBERS_NOTEBOOK_H +#define Z64BOMBERS_NOTEBOOK_H + +#include "ultra64.h" +#include "io/controller.h" +#include "z64dma.h" + +#define DEFINE_PERSON(enum, _photo, _description, _metEnum, _metMessage, _metFlag) enum, +typedef enum BombersNotebookPerson { + #include "tables/bombers_notebook/person_table.h" + /* 0x14 */ BOMBERS_NOTEBOOK_PERSON_MAX +} BombersNotebookPerson; + +#undef DEFINE_PERSON + +typedef enum BombersNotebookLoadState { + /* 0 */ BOMBERS_NOTEBOOK_LOAD_STATE_NONE, + /* 1 */ BOMBERS_NOTEBOOK_LOAD_STATE_STARTED, + /* 2 */ BOMBERS_NOTEBOOK_LOAD_STATE_DONE +} BombersNotebookLoadState; + +#define DEFINE_PERSON(_enum, _photo, _description, metEnum, _metMessage, _metFlag) metEnum, +#define DEFINE_EVENT(enum, _icon, _colorFlag, _description, _completedMessage, _completedFlag) enum, +typedef enum BombersNotebookEvent { + #include "tables/bombers_notebook/person_table.h" + #include "tables/bombers_notebook/event_table.h" + /* 0x37 */ BOMBERS_NOTEBOOK_EVENT_MAX +} BombersNotebookEvent; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT + +typedef struct { + /* 0x00 */ u8 loadState; + /* 0x01 */ UNK_TYPE1 pad01[0x3F]; + /* 0x40 */ void* scheduleDmaSegment; + /* 0x44 */ uintptr_t scheduleDmaSegmentStart; + /* 0x48 */ size_t scheduleDmaSegmentSize; + /* 0x4C */ DmaRequest dmaRequest; + /* 0x6C */ OSMesgQueue loadQueue; + /* 0x84 */ OSMesg loadMsg[1]; + /* 0x88 */ void* scheduleSegment; + /* 0x8C */ uintptr_t scheduleSegmentStart; + /* 0x90 */ size_t scheduleSegmentSize; + /* 0x94 */ s32 cursorPageRow; + /* 0x98 */ s32 cursorEntry; // Entries are 3 apart, see BOMBERS_NOTEBOOK_ENTRY_SIZE + /* 0x9C */ s32 cursorPage; + /* 0xA0 */ UNK_TYPE1 padA0[0x4]; + /* 0xA4 */ s32 scrollAmount; + /* 0xA8 */ s32 scrollOffset; +} BombersNotebook; // size = 0xAC + +void BombersNotebook_Draw(BombersNotebook* this, struct GraphicsContext* gfxCtx); +void BombersNotebook_Update(struct PlayState* play, BombersNotebook* this, Input* input); +void BombersNotebook_Init(BombersNotebook* this); +void BombersNotebook_Destroy(BombersNotebook* this); + +#endif diff --git a/include/z64message.h b/include/z64message.h index 2b0387045..09c9c4e04 100644 --- a/include/z64message.h +++ b/include/z64message.h @@ -9,6 +9,9 @@ struct Actor; struct MessageTableEntry; struct OcarinaStaff; +extern u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX]; +extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX]; + typedef enum TextState { /* 0 */ TEXT_STATE_NONE, /* 1 */ TEXT_STATE_1, @@ -159,8 +162,8 @@ typedef struct MessageContext { /* 0x120A0 */ s32 unk120A0; /* 0x120A4 */ s16 unk120A4[6]; /* 0x120B0 */ u8 unk120B0; - /* 0x120B1 */ u8 unk120B1; - /* 0x120B2 */ u8 unk120B2[0xA]; + /* 0x120B1 */ u8 bombersNotebookEventQueueCount; + /* 0x120B2 */ u8 bombersNotebookEventQueue[10]; /* 0x120BC */ u16 unk_120BC; /* 0x120BE */ s16 unk120BE; /* 0x120C0 */ s16 unk120C0; diff --git a/include/z64save.h b/include/z64save.h index 805b62e5a..312b18b2e 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -733,13 +733,13 @@ typedef enum { #define WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON PACK_WEEKEVENTREG_FLAG(21, 0x08) #define WEEKEVENTREG_21_10 PACK_WEEKEVENTREG_FLAG(21, 0x10) -#define WEEKEVENTREG_21_20 PACK_WEEKEVENTREG_FLAG(21, 0x20) +#define WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM PACK_WEEKEVENTREG_FLAG(21, 0x20) #define WEEKEVENTREG_21_40 PACK_WEEKEVENTREG_FLAG(21, 0x40) #define WEEKEVENTREG_21_80 PACK_WEEKEVENTREG_FLAG(21, 0x80) // Aliens defeated // "Winning" the alien invasion -#define WEEKEVENTREG_22_01 PACK_WEEKEVENTREG_FLAG(22, 0x01) +#define WEEKEVENTREG_DEFENDED_AGAINST_THEM PACK_WEEKEVENTREG_FLAG(22, 0x01) #define WEEKEVENTREG_22_02 PACK_WEEKEVENTREG_FLAG(22, 0x02) @@ -795,11 +795,11 @@ typedef enum { #define WEEKEVENTREG_26_40 PACK_WEEKEVENTREG_FLAG(26, 0x40) #define WEEKEVENTREG_26_80 PACK_WEEKEVENTREG_FLAG(26, 0x80) #define WEEKEVENTREG_27_01 PACK_WEEKEVENTREG_FLAG(27, 0x01) -#define WEEKEVENTREG_27_02 PACK_WEEKEVENTREG_FLAG(27, 0x02) -#define WEEKEVENTREG_27_04 PACK_WEEKEVENTREG_FLAG(27, 0x04) -#define WEEKEVENTREG_27_08 PACK_WEEKEVENTREG_FLAG(27, 0x08) -#define WEEKEVENTREG_27_10 PACK_WEEKEVENTREG_FLAG(27, 0x10) -#define WEEKEVENTREG_27_20 PACK_WEEKEVENTREG_FLAG(27, 0x20) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x02) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x04) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x08) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x10) +#define WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN PACK_WEEKEVENTREG_FLAG(27, 0x20) #define WEEKEVENTREG_27_40 PACK_WEEKEVENTREG_FLAG(27, 0x40) #define WEEKEVENTREG_27_80 PACK_WEEKEVENTREG_FLAG(27, 0x80) #define WEEKEVENTREG_28_01 PACK_WEEKEVENTREG_FLAG(28, 0x01) @@ -956,22 +956,22 @@ typedef enum { #define WEEKEVENTREG_50_01 PACK_WEEKEVENTREG_FLAG(50, 0x01) #define WEEKEVENTREG_50_02 PACK_WEEKEVENTREG_FLAG(50, 0x02) #define WEEKEVENTREG_50_04 PACK_WEEKEVENTREG_FLAG(50, 0x04) -#define WEEKEVENTREG_50_08 PACK_WEEKEVENTREG_FLAG(50, 0x08) +#define WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(50, 0x08) #define WEEKEVENTREG_50_10 PACK_WEEKEVENTREG_FLAG(50, 0x10) -#define WEEKEVENTREG_50_20 PACK_WEEKEVENTREG_FLAG(50, 0x20) +#define WEEKEVENTREG_HAD_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(50, 0x20) #define WEEKEVENTREG_50_40 PACK_WEEKEVENTREG_FLAG(50, 0x40) -#define WEEKEVENTREG_50_80 PACK_WEEKEVENTREG_FLAG(50, 0x80) -#define WEEKEVENTREG_51_01 PACK_WEEKEVENTREG_FLAG(51, 0x01) +#define WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(50, 0x80) +#define WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(51, 0x01) #define WEEKEVENTREG_51_02 PACK_WEEKEVENTREG_FLAG(51, 0x02) #define WEEKEVENTREG_51_04 PACK_WEEKEVENTREG_FLAG(51, 0x04) #define WEEKEVENTREG_51_08 PACK_WEEKEVENTREG_FLAG(51, 0x08) #define WEEKEVENTREG_51_10 PACK_WEEKEVENTREG_FLAG(51, 0x10) -#define WEEKEVENTREG_51_20 PACK_WEEKEVENTREG_FLAG(51, 0x20) +#define WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(51, 0x20) #define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40) #define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80) // ProtectedCremia -#define WEEKEVENTREG_52_01 PACK_WEEKEVENTREG_FLAG(52, 0x01) +#define WEEKEVENTREG_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(52, 0x01) // Lose Milk Run minigame #define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02) @@ -1101,61 +1101,65 @@ typedef enum { #define WEEKEVENTREG_65_20 PACK_WEEKEVENTREG_FLAG(65, 0x20) #define WEEKEVENTREG_65_40 PACK_WEEKEVENTREG_FLAG(65, 0x40) #define WEEKEVENTREG_65_80 PACK_WEEKEVENTREG_FLAG(65, 0x80) -#define WEEKEVENTREG_66_01 PACK_WEEKEVENTREG_FLAG(66, 0x01) -#define WEEKEVENTREG_66_02 PACK_WEEKEVENTREG_FLAG(66, 0x02) -#define WEEKEVENTREG_66_04 PACK_WEEKEVENTREG_FLAG(66, 0x04) -#define WEEKEVENTREG_66_08 PACK_WEEKEVENTREG_FLAG(66, 0x08) -#define WEEKEVENTREG_66_10 PACK_WEEKEVENTREG_FLAG(66, 0x10) -#define WEEKEVENTREG_66_20 PACK_WEEKEVENTREG_FLAG(66, 0x20) -#define WEEKEVENTREG_66_40 PACK_WEEKEVENTREG_FLAG(66, 0x40) -#define WEEKEVENTREG_66_80 PACK_WEEKEVENTREG_FLAG(66, 0x80) -#define WEEKEVENTREG_67_01 PACK_WEEKEVENTREG_FLAG(67, 0x01) -#define WEEKEVENTREG_67_02 PACK_WEEKEVENTREG_FLAG(67, 0x02) -#define WEEKEVENTREG_67_04 PACK_WEEKEVENTREG_FLAG(67, 0x04) -#define WEEKEVENTREG_67_08 PACK_WEEKEVENTREG_FLAG(67, 0x08) -#define WEEKEVENTREG_67_10 PACK_WEEKEVENTREG_FLAG(67, 0x10) -#define WEEKEVENTREG_67_20 PACK_WEEKEVENTREG_FLAG(67, 0x20) -#define WEEKEVENTREG_67_40 PACK_WEEKEVENTREG_FLAG(67, 0x40) -#define WEEKEVENTREG_67_80 PACK_WEEKEVENTREG_FLAG(67, 0x80) -#define WEEKEVENTREG_68_01 PACK_WEEKEVENTREG_FLAG(68, 0x01) -#define WEEKEVENTREG_68_02 PACK_WEEKEVENTREG_FLAG(68, 0x02) -#define WEEKEVENTREG_68_04 PACK_WEEKEVENTREG_FLAG(68, 0x04) -#define WEEKEVENTREG_68_08 PACK_WEEKEVENTREG_FLAG(68, 0x08) -#define WEEKEVENTREG_68_10 PACK_WEEKEVENTREG_FLAG(68, 0x10) -#define WEEKEVENTREG_68_20 PACK_WEEKEVENTREG_FLAG(68, 0x20) -#define WEEKEVENTREG_68_40 PACK_WEEKEVENTREG_FLAG(68, 0x40) -#define WEEKEVENTREG_68_80 PACK_WEEKEVENTREG_FLAG(68, 0x80) -#define WEEKEVENTREG_69_01 PACK_WEEKEVENTREG_FLAG(69, 0x01) -#define WEEKEVENTREG_69_02 PACK_WEEKEVENTREG_FLAG(69, 0x02) -#define WEEKEVENTREG_69_04 PACK_WEEKEVENTREG_FLAG(69, 0x04) -#define WEEKEVENTREG_69_08 PACK_WEEKEVENTREG_FLAG(69, 0x08) -#define WEEKEVENTREG_69_10 PACK_WEEKEVENTREG_FLAG(69, 0x10) -#define WEEKEVENTREG_69_20 PACK_WEEKEVENTREG_FLAG(69, 0x20) -#define WEEKEVENTREG_69_40 PACK_WEEKEVENTREG_FLAG(69, 0x40) -#define WEEKEVENTREG_69_80 PACK_WEEKEVENTREG_FLAG(69, 0x80) -#define WEEKEVENTREG_70_01 PACK_WEEKEVENTREG_FLAG(70, 0x01) -#define WEEKEVENTREG_70_02 PACK_WEEKEVENTREG_FLAG(70, 0x02) -#define WEEKEVENTREG_70_04 PACK_WEEKEVENTREG_FLAG(70, 0x04) -#define WEEKEVENTREG_70_08 PACK_WEEKEVENTREG_FLAG(70, 0x08) -#define WEEKEVENTREG_70_10 PACK_WEEKEVENTREG_FLAG(70, 0x10) -#define WEEKEVENTREG_70_20 PACK_WEEKEVENTREG_FLAG(70, 0x20) -#define WEEKEVENTREG_70_40 PACK_WEEKEVENTREG_FLAG(70, 0x40) -#define WEEKEVENTREG_70_80 PACK_WEEKEVENTREG_FLAG(70, 0x80) -#define WEEKEVENTREG_71_01 PACK_WEEKEVENTREG_FLAG(71, 0x01) -#define WEEKEVENTREG_71_02 PACK_WEEKEVENTREG_FLAG(71, 0x02) -#define WEEKEVENTREG_71_04 PACK_WEEKEVENTREG_FLAG(71, 0x04) -#define WEEKEVENTREG_71_08 PACK_WEEKEVENTREG_FLAG(71, 0x08) -#define WEEKEVENTREG_71_10 PACK_WEEKEVENTREG_FLAG(71, 0x10) -#define WEEKEVENTREG_71_20 PACK_WEEKEVENTREG_FLAG(71, 0x20) -#define WEEKEVENTREG_71_40 PACK_WEEKEVENTREG_FLAG(71, 0x40) -#define WEEKEVENTREG_71_80 PACK_WEEKEVENTREG_FLAG(71, 0x80) -#define WEEKEVENTREG_72_01 PACK_WEEKEVENTREG_FLAG(72, 0x01) -#define WEEKEVENTREG_72_02 PACK_WEEKEVENTREG_FLAG(72, 0x02) -#define WEEKEVENTREG_72_04 PACK_WEEKEVENTREG_FLAG(72, 0x04) -#define WEEKEVENTREG_72_08 PACK_WEEKEVENTREG_FLAG(72, 0x08) -#define WEEKEVENTREG_72_10 PACK_WEEKEVENTREG_FLAG(72, 0x10) -#define WEEKEVENTREG_72_20 PACK_WEEKEVENTREG_FLAG(72, 0x20) -#define WEEKEVENTREG_72_40 PACK_WEEKEVENTREG_FLAG(72, 0x40) + +/* Bombers' Notebook Events */ + +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU PACK_WEEKEVENTREG_FLAG(66, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI PACK_WEEKEVENTREG_FLAG(66, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN PACK_WEEKEVENTREG_FLAG(66, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY PACK_WEEKEVENTREG_FLAG(66, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI PACK_WEEKEVENTREG_FLAG(66, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA PACK_WEEKEVENTREG_FLAG(66, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR PACK_WEEKEVENTREG_FLAG(66, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA PACK_WEEKEVENTREG_FLAG(66, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO PACK_WEEKEVENTREG_FLAG(67, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN PACK_WEEKEVENTREG_FLAG(67, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN PACK_WEEKEVENTREG_FLAG(67, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS PACK_WEEKEVENTREG_FLAG(67, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND PACK_WEEKEVENTREG_FLAG(67, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER PACK_WEEKEVENTREG_FLAG(67, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO PACK_WEEKEVENTREG_FLAG(67, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG PACK_WEEKEVENTREG_FLAG(67, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS PACK_WEEKEVENTREG_FLAG(68, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO PACK_WEEKEVENTREG_FLAG(68, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU PACK_WEEKEVENTREG_FLAG(68, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS PACK_WEEKEVENTREG_FLAG(68, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY PACK_WEEKEVENTREG_FLAG(68, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING PACK_WEEKEVENTREG_FLAG(68, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI PACK_WEEKEVENTREG_FLAG(68, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI PACK_WEEKEVENTREG_FLAG(68, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI PACK_WEEKEVENTREG_FLAG(69, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(69, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES PACK_WEEKEVENTREG_FLAG(69, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT PACK_WEEKEVENTREG_FLAG(69, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM PACK_WEEKEVENTREG_FLAG(69, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM PACK_WEEKEVENTREG_FLAG(69, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE PACK_WEEKEVENTREG_FLAG(69, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(69, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK PACK_WEEKEVENTREG_FLAG(70, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK PACK_WEEKEVENTREG_FLAG(70, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(70, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(70, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE PACK_WEEKEVENTREG_FLAG(70, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK PACK_WEEKEVENTREG_FLAG(70, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP PACK_WEEKEVENTREG_FLAG(70, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP PACK_WEEKEVENTREG_FLAG(70, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP PACK_WEEKEVENTREG_FLAG(71, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP PACK_WEEKEVENTREG_FLAG(71, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP PACK_WEEKEVENTREG_FLAG(71, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP PACK_WEEKEVENTREG_FLAG(71, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK PACK_WEEKEVENTREG_FLAG(71, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK PACK_WEEKEVENTREG_FLAG(71, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD PACK_WEEKEVENTREG_FLAG(71, 0x40) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK PACK_WEEKEVENTREG_FLAG(71, 0x80) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK PACK_WEEKEVENTREG_FLAG(72, 0x01) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT PACK_WEEKEVENTREG_FLAG(72, 0x02) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK PACK_WEEKEVENTREG_FLAG(72, 0x04) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK PACK_WEEKEVENTREG_FLAG(72, 0x08) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK PACK_WEEKEVENTREG_FLAG(72, 0x10) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK PACK_WEEKEVENTREG_FLAG(72, 0x20) +#define WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK PACK_WEEKEVENTREG_FLAG(72, 0x40) + #define WEEKEVENTREG_72_80 PACK_WEEKEVENTREG_FLAG(72, 0x80) #define WEEKEVENTREG_73_01 PACK_WEEKEVENTREG_FLAG(73, 0x01) #define WEEKEVENTREG_73_02 PACK_WEEKEVENTREG_FLAG(73, 0x02) @@ -1180,7 +1184,7 @@ typedef enum { #define WEEKEVENTREG_75_02 PACK_WEEKEVENTREG_FLAG(75, 0x02) #define WEEKEVENTREG_75_04 PACK_WEEKEVENTREG_FLAG(75, 0x04) #define WEEKEVENTREG_75_08 PACK_WEEKEVENTREG_FLAG(75, 0x08) -#define WEEKEVENTREG_75_10 PACK_WEEKEVENTREG_FLAG(75, 0x10) +#define WEEKEVENTREG_RECEIVED_ROOM_KEY PACK_WEEKEVENTREG_FLAG(75, 0x10) #define WEEKEVENTREG_75_20 PACK_WEEKEVENTREG_FLAG(75, 0x20) #define WEEKEVENTREG_75_40 PACK_WEEKEVENTREG_FLAG(75, 0x40) #define WEEKEVENTREG_75_80 PACK_WEEKEVENTREG_FLAG(75, 0x80) @@ -1226,7 +1230,7 @@ typedef enum { // Aveil has spotted Player #define WEEKEVENTREG_80_08 PACK_WEEKEVENTREG_FLAG(80, 0x08) -#define WEEKEVENTREG_80_10 PACK_WEEKEVENTREG_FLAG(80, 0x10) +#define WEEKEVENTREG_RECEIVED_PRIORITY_MAIL PACK_WEEKEVENTREG_FLAG(80, 0x10) #define WEEKEVENTREG_80_20 PACK_WEEKEVENTREG_FLAG(80, 0x20) #define WEEKEVENTREG_80_40 PACK_WEEKEVENTREG_FLAG(80, 0x40) #define WEEKEVENTREG_80_80 PACK_WEEKEVENTREG_FLAG(80, 0x80) diff --git a/spec b/spec index a3cde9e58..e427e6866 100644 --- a/spec +++ b/spec @@ -373,7 +373,8 @@ endseg beginseg name "schedule_static" compress - include "build/baserom/schedule_static.o" + include "build/assets/interface/schedule_static/schedule_static.o" + number 8 endseg beginseg @@ -548,7 +549,6 @@ beginseg include "build/src/code/z_overlay.o" include "build/src/code/z_play.o" include "build/src/code/z_play_hireso.o" - include "build/data/code/z_play_hireso.data.o" include "build/src/code/PreRender.o" include "build/data/code/PreRender.bss.o" include "build/src/code/TwoHeadGfxArena.o" diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index d0f757125..1d2046e57 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64shrink_window.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" diff --git a/src/code/z_message.c b/src/code/z_message.c index 8681967e6..38f44d9ec 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -5,6 +5,27 @@ #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" #if 0 +#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, metMessage, _metFlag) metMessage, +#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, completedMessage, _completedFlag) completedMessage, + +u16 sBombersNotebookEventMessages[BOMBERS_NOTEBOOK_EVENT_MAX] = { +#include "tables/bombers_notebook/person_table.h" +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT + +#define DEFINE_PERSON(_enum, _photo, _description, _metEnum, _metMessage, metFlag) metFlag, +#define DEFINE_EVENT(_enum, _icon, _colorFlag, _description, _completedMessage, completedFlag) completedFlag, + +u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX] = { +#include "tables/bombers_notebook/person_table.h" +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT s16 D_801D02D8[15] = { ACTOR_OCEFF_WIPE5, ACTOR_OCEFF_WIPE5, // Sonata of Awakening Effect, Sonata of Awakening Effect @@ -20,8 +41,6 @@ s32 D_801D02F8[15] = { 0,1,2,3,4,0,1,0,0,0,0,0,1,1,0 }; #endif -extern u16 D_801C6AB8[]; -extern u16 D_801C6B28[]; extern s16 D_801D02D8[]; extern s32 D_801D02F8[]; extern s16 D_801F6B0C; @@ -365,19 +384,19 @@ void func_80151A68(PlayState* play, u16 textId) { } } -void func_80151BB4(PlayState* play, u8 arg1) { +void Message_BombersNotebookQueueEvent(PlayState* play, u8 event) { MessageContext* msgCtx = &play->msgCtx; - u8 temp = arg1; if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) { - msgCtx->unk120B2[msgCtx->unk120B1] = temp; - msgCtx->unk120B1++; + if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[event])) { + msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount] = event; + msgCtx->bombersNotebookEventQueueCount++; } - } else if (arg1 >= 20) { - if (!CHECK_WEEKEVENTREG(D_801C6B28[arg1])) { - msgCtx->unk120B2[msgCtx->unk120B1] = temp; - msgCtx->unk120B1++; + } else if (event >= BOMBERS_NOTEBOOK_PERSON_MAX) { + // Non MET events are processed even if the player does not have the notebook yet + if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[event])) { + msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount] = event; + msgCtx->bombersNotebookEventQueueCount++; } } } @@ -386,16 +405,22 @@ u32 func_80151C9C(PlayState* play) { MessageContext* msgCtx = &play->msgCtx; while (true) { - if (msgCtx->unk120B1 == 0) { + if (msgCtx->bombersNotebookEventQueueCount == 0) { return false; } - msgCtx->unk120B1--; + msgCtx->bombersNotebookEventQueueCount--; - if (!CHECK_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]])) { - SET_WEEKEVENTREG(D_801C6B28[msgCtx->unk120B2[msgCtx->unk120B1]]); + if (!CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]])) { + SET_WEEKEVENTREG(gBombersNotebookWeekEventFlags + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]); - if ((D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]] != 0) && CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - Message_ContinueTextbox(play, D_801C6AB8[msgCtx->unk120B2[msgCtx->unk120B1]]); + if ((sBombersNotebookEventMessages + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]] != 0) && + CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { + Message_ContinueTextbox( + play, sBombersNotebookEventMessages + [msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]); play_sound(NA_SE_SY_SCHEDULE_WRITE); return true; } @@ -476,7 +501,7 @@ u8 Message_GetState(MessageContext* msgCtx) { if (msgCtx->msgMode == 0x40) { return TEXT_STATE_13; } - if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->unk120B1 == 0)) { + if ((msgCtx->msgMode == 0x43) && (msgCtx->stateTimer == 1) && (msgCtx->bombersNotebookEventQueueCount == 0)) { return TEXT_STATE_CLOSING; } diff --git a/src/code/z_play.c b/src/code/z_play.c index dd9b6c561..6ef734aee 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,5 +1,6 @@ #include "global.h" #include "buffers.h" +#include "z64bombers_notebook.h" #include "z64debug_display.h" #include "z64quake.h" #include "z64rumble.h" @@ -1051,14 +1052,14 @@ void Play_Update(PlayState* this) { if (!sBombersNotebookOpen) { if (this->pauseCtx.bombersNotebookOpen) { sBombersNotebookOpen = true; - sBombersNotebook.unk_00 = 0; + sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE; } } else if (CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_L) || CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_B) || CHECK_BTN_ALL(CONTROLLER1(&this->state)->press.button, BTN_START) || (gIrqMgrResetStatus != 0)) { sBombersNotebookOpen = false; this->pauseCtx.bombersNotebookOpen = false; - sBombersNotebook.unk_00 = 0; + sBombersNotebook.loadState = BOMBERS_NOTEBOOK_LOAD_STATE_NONE; this->msgCtx.msgLength = 0; this->msgCtx.msgMode = 0; this->msgCtx.currentTextId = 0; diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index 829fe71f2..b995028ca 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -1,27 +1,1363 @@ #include "global.h" +#include "z64bombers_notebook.h" +#include "interface/schedule_static/schedule_static.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016AC10.s") +// TODO: Needs YAZ0 +// Segment 0x07 schedule_dma_static_test +extern TexturePtr D_07000000; +extern TexturePtr D_07000800; +extern TexturePtr D_07001000; +extern TexturePtr D_07001800; +extern TexturePtr D_07002000; +extern TexturePtr D_07002800; +extern TexturePtr D_07003000; +extern TexturePtr D_07003800; +extern TexturePtr D_07004000; +extern TexturePtr D_07004800; +extern TexturePtr D_07005000; +extern TexturePtr D_07005800; +extern TexturePtr D_07006000; +extern TexturePtr D_07006800; +extern TexturePtr D_07007000; +extern TexturePtr D_07007800; +extern TexturePtr D_07008000; +extern TexturePtr D_07008800; +extern TexturePtr D_07009000; +extern TexturePtr D_07009800; +extern TexturePtr D_0700AC00; +extern TexturePtr D_0700AEA0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016AE1C.s") +#define BOMBERS_NOTEBOOK_ENTRY_SIZE 3 +#define BOMBERS_NOTEBOOK_ENTRY_MAX 10 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016B278.s") +#define BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, entry) (((&sBombersNotebookEntries[row][entry])[0] & 0xF00) >> 8) +#define BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, entry) ((&sBombersNotebookEntries[row][entry])[0] & 0xFF) +#define BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(row, entry) ((&sBombersNotebookEntries[row][entry])[1]) +#define BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(row, entry) ((&sBombersNotebookEntries[row][entry])[2]) -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016B4B0.s") +#define BOMBERS_NOTEBOOK_ENTRY(pos, day, event, startTime, endTime) \ + ((pos)&0xF000) | (((day)&0xF) << 8) | ((event)&0xFF), (startTime), (endTime) +#define BOMBERS_NOTEBOOK_ENTRY_END 0x9999 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016C344.s") +#define BOMBERS_NOTEBOOK_ENTRY_POS_CENTER 0x0000 +#define BOMBERS_NOTEBOOK_ENTRY_POS_BELOW 0x4000 +#define BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE 0x8000 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016CD4C.s") +typedef enum { + /* 0 */ BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT, + /* 1 */ BOMBERS_NOTEBOOK_EVENT_ICON_MASK, + /* 2 */ BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON +} BombersNotebookEventIcon; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016E40C.s") +#define BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE 0xFFF0 +#define BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI 0xFFF1 -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016EA90.s") +u16 sBombersNotebookEntries[BOMBERS_NOTEBOOK_PERSON_MAX][BOMBERS_NOTEBOOK_ENTRY_MAX * BOMBERS_NOTEBOOK_ENTRY_SIZE] = { + { + /* Bombers */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 3, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Anju */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY, + CLOCK_TIME(13, 45), CLOCK_TIME(16, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING, + CLOCK_TIME(14, 30), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI, + CLOCK_TIME(23, 30), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI, + CLOCK_TIME(23, 30), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, CLOCK_TIME(17, 0), + CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, + BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES, CLOCK_TIME(6, 0), + CLOCK_TIME(12, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, + CLOCK_TIME(5, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Kafei */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES, CLOCK_TIME(16, 30), + CLOCK_TIME(22, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT, + CLOCK_TIME(18, 0), CLOCK_TIME(19, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK, + CLOCK_TIME(5, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Curiosity Shop Man */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK, + CLOCK_TIME(13, 0), CLOCK_TIME(22, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL, + CLOCK_TIME(13, 0), CLOCK_TIME(22, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK, + CLOCK_TIME(22, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Old Lady from Bomb Shop */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK, + CLOCK_TIME(0, 30), CLOCK_TIME(1, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Romani */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM, + CLOCK_TIME(2, 30), CLOCK_TIME(5, 15)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE, + CLOCK_TIME(2, 30), CLOCK_TIME(5, 15)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Cremia */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, + CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK, + CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Mayor Dotour */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP, + CLOCK_TIME(8, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Madame Aroma */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK, + CLOCK_TIME(8, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Toto */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Gorman */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK, CLOCK_TIME(22, 0), + CLOCK_TIME(5, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Postman */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, + CLOCK_TIME(15, 0), CLOCK_TIME(0, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI, + CLOCK_TIME(6, 0), CLOCK_TIME(12, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP, + CLOCK_TIME(15, 0), CLOCK_TIME(0, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Rosa Sisters */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* ??? */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Anju's Grandmother */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 1, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_BELOW, 2, + BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP, CLOCK_TIME(8, 0), + CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Kamaro */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK, + CLOCK_TIME(0, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Grog */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, + CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, + CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD, + CLOCK_TIME(6, 0), CLOCK_TIME(20, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Gorman Brothers */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA, + CLOCK_TIME(18, 0), CLOCK_TIME(21, 0)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(18, 0)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Shiro */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 3, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK, + CLOCK_TIME(6, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, + { + /* Guru-Guru */ + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 1, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY(BOMBERS_NOTEBOOK_ENTRY_POS_CENTER, 2, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK, + CLOCK_TIME(18, 0), CLOCK_TIME(5, 59)), + BOMBERS_NOTEBOOK_ENTRY_END, + }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s") +s16 sBombersNotebookDayRectRectLeft[] = { 120, 120, 270, 420 }; +TexturePtr sBombersNotebookDayTextures[] = { + gBombersNotebookDay1stTex, + gBombersNotebookDay2ndTex, + gBombersNotebookDayFinalTex, +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/func_8016F4EC.s") +#define DEFINE_EVENT(_enum, icon, _colorFlag, _description, _completedMessage, _completedFlag) icon, -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s") +s32 sBombersNotebookEventIcons[] = { +#include "tables/bombers_notebook/event_table.h" +}; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s") +#undef DEFINE_EVENT -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s") +s32 sBombersNotebookEventIconWidths[] = { 16, 24, 32 }; +s32 sBombersNotebookEventIconHeights[] = { 16, 28, 28 }; + +#define DEFINE_EVENT(_enum, _icon, colorFlag, _description, _completedMessage, _completedFlag) colorFlag, + +u16 sBombersNotebookEventColorWeekEventFlags[] = { +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_EVENT + +void BombersNotebook_DrawScisTexRect(Gfx** gfxP, s32 rxl, s32 ryl, s32 rxh, s32 ryh, s32 tile, s32 s, s32 t, s32 dsdx, + s32 dtdy) { + s32 xl = rxl - (gCfbLeftAdjust * 4); + s32 yl = ryl - (gCfbUpperAdjust * 4); + s32 xh = rxh - (gCfbLeftAdjust * 4); + s32 yh = ryh - (gCfbUpperAdjust * 4); + Gfx* gfx = *gfxP; + + gSPScisTextureRectangle(gfx++, xl, yl, xh, yh, tile, s, t, dsdx, dtdy); + + *gfxP = gfx; +} + +s16 sBombersNotebookHeaderColors[][3] = { + { 116, 134, 146 }, // Column 1 + { 158, 156, 131 }, // Column 2 + { 174, 141, 151 }, // Column 3 +}; + +void BombersNotebook_DrawHeaders(Gfx** gfxP) { + Gfx* gfx = *gfxP; + s32 i; + s32 rectLeft; + + gDPLoadTextureBlock(gfx++, gBombersNotebookHeaderBoxTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + for (i = 0, rectLeft = 120; i < ARRAY_COUNT(sBombersNotebookHeaderColors); i++, rectLeft += 150) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookHeaderColors[i][0], sBombersNotebookHeaderColors[i][1], + sBombersNotebookHeaderColors[i][2], 192); + BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 74 * 4, (rectLeft + 143) * 4, 98 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + } + + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + for (i = 0, rectLeft = 124; i < ARRAY_COUNT(sBombersNotebookDayTextures); i++, rectLeft += 150) { + gDPLoadTextureBlock(gfx++, sBombersNotebookDayTextures[i], G_IM_FMT_IA, G_IM_SIZ_8b, 48, 22, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 77 * 4, (rectLeft + 48) * 4, 99 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + } + + rectLeft = 172; + gDPLoadTextureBlock_4b(gfx++, gBombersNotebook1800Tex, G_IM_FMT_IA, 48, 11, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + for (i = 0; i < 3; i++) { + BombersNotebook_DrawScisTexRect(&gfx, rectLeft * 4, 86 * 4, (rectLeft + 48) * 4, 97 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + rectLeft += 150; + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +// Each column/day gets subdivided into 4 sub columns, the first 2 sub columns use 1 color, the last 2 another +s16 sBombersNotebookColumnColors[][2][3] = { + { { 165, 183, 195 }, { 140, 158, 170 } }, // Column 1 + { { 197, 195, 172 }, { 172, 170, 147 } }, // Column 2 + { { 223, 190, 200 }, { 190, 165, 175 } }, // Column 3 +}; + +void BombersNotebook_DrawColumns(Gfx** gfxP) { + Gfx* gfx = *gfxP; + s16* color; + s32 i; + s32 j; + s32 k; + s32 columnRectLeft; + s32 subColumnRectLeft; + s32 pad; + + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookSubColumnBoxTex, G_IM_FMT_I, 48, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + color = &sBombersNotebookColumnColors[0][0][0]; + for (i = 0, columnRectLeft = 120; i < ARRAY_COUNT(sBombersNotebookColumnColors); i++, columnRectLeft += 150) { + subColumnRectLeft = columnRectLeft; + for (j = 0; j < 2; j++) { + gDPSetPrimColor(gfx++, 0, 0, color[0], color[1], color[2], 192); + for (k = 0; k < 2; k++) { + BombersNotebook_DrawScisTexRect(&gfx, subColumnRectLeft * 4, 104 * 4, (subColumnRectLeft + 48) * 4, + 480 * 4, 0, 0, 0, 1 << 10, 1 << 10); + subColumnRectLeft += 36; + } + color += 3; + } + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +TexturePtr sBombersNotebookEventIconTextures[] = { + gBombersNotebookEntryIconExclamationPointTex, + &D_0700AC00, + &D_0700AEA0, +}; +s16 sBombersNotebookEntryIconColors[][3] = { + { 255, 255, 0 }, + { 141, 255, 182 }, + { 255, 100, 60 }, +}; + +void BombersNotebook_DrawEntries(Gfx** gfxP, s32 row, u32 rectTop) { + Gfx* gfx = *gfxP; + s32 entryRectLeft; + u32 eventIcon; + u32 unfinishedEvent = false; + u16 startTime; + u16 endTime; + s32 j = 0; + u32 iconRectLeft; + s32 entryRectRight; + u32 yOffset; + s32 entryWidth; + + while (true) { + if (sBombersNotebookEntries[row][j] == BOMBERS_NOTEBOOK_ENTRY_END) { + if (!unfinishedEvent) { + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookStampTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 48, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, 567 * 4, (rectTop + 1) * 4, 599 * 4, (rectTop + 49) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(gfx++, 255, 0, 0, 255); + BombersNotebook_DrawScisTexRect(&gfx, 565 * 4, (rectTop + -1) * 4, 597 * 4, (rectTop + 47) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + } + break; + } + + if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset = 8; + } else if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW) { + yOffset = 24; + } else { // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset = 16; + } + + startTime = BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(row, j) - CLOCK_TIME(6, 0); + endTime = BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(row, j) - CLOCK_TIME(6, 0); + entryRectLeft = + sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, j)] + (startTime / CLOCK_TIME(0, 10)); + entryRectRight = + sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(row, j)] + (endTime / CLOCK_TIME(0, 10)); + entryWidth = entryRectRight - entryRectLeft - 8; + if ((entryRectRight - entryRectLeft) < 8) { + entryRectLeft = ((entryRectLeft + entryRectRight) - entryRectLeft) - 8; + entryRectRight = entryRectLeft + 8; + } + + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxEndTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 2) * 4, (rectTop + yOffset + 2) * 4, + (entryRectLeft + 6) * 4, (rectTop + yOffset + 18) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectRight + -2) * 4, (rectTop + yOffset + 2) * 4, + (entryRectRight + 2) * 4, (rectTop + yOffset + 18) * 4, 0, 0x80, 0, 1 << 10, + 1 << 10); + if (entryWidth > 0) { + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxMiddleTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 6) * 4, (rectTop + yOffset + 2) * 4, + (entryRectLeft + 6 + entryWidth) * 4, (rectTop + yOffset + 18) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + } + + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxEndTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + //! FAKE: the ^ 0 + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft * 4) ^ 0, (rectTop + yOffset) * 4, (entryRectLeft + 4) * 4, + (rectTop + yOffset + 16) * 4, 0, 0, 0, 1 << 10, 1 << 10); + //! FAKE: the ^ 0 + BombersNotebook_DrawScisTexRect(&gfx, (entryRectRight + -4) * 4, (rectTop + yOffset) * 4, + (entryRectRight * 4) ^ 0, (rectTop + yOffset + 16) * 4, 0, 0x80, 0, 1 << 10, + 1 << 10); + if (entryWidth > 0) { + gDPLoadTextureBlock(gfx++, gBombersNotebookEntryBoxMiddleTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 16, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 2, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (entryRectLeft + 4) * 4, (rectTop + yOffset) * 4, + (entryRectLeft + 4 + entryWidth) * 4, (rectTop + yOffset + 16) * 4, 0, 0, 0, + 1 << 10, 1 << 10); + } + + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j)])) { + eventIcon = + sBombersNotebookEventIcons[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - BOMBERS_NOTEBOOK_PERSON_MAX]; + if ((entryRectRight - entryRectLeft) < sBombersNotebookEventIconWidths[eventIcon]) { + iconRectLeft = + (((entryRectLeft - sBombersNotebookEventIconWidths[eventIcon]) + entryRectRight) - entryRectLeft) + + 3; + } else { + iconRectLeft = (((entryRectRight - entryRectLeft) - sBombersNotebookEventIconWidths[eventIcon]) / 2) + + entryRectLeft; + } + + if ((eventIcon == BOMBERS_NOTEBOOK_EVENT_ICON_MASK) || (eventIcon == BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON)) { + if (sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset -= 12; + } else if (!(sBombersNotebookEntries[row][j] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW)) { + // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset -= 6; + } + } + gDPLoadTextureBlock(gfx++, sBombersNotebookEventIconTextures[eventIcon], G_IM_FMT_IA, G_IM_SIZ_8b, + sBombersNotebookEventIconWidths[eventIcon], sBombersNotebookEventIconHeights[eventIcon], + 0, G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + + BombersNotebook_DrawScisTexRect(&gfx, (iconRectLeft + 2) * 4, (rectTop + yOffset + 2) * 4, + (iconRectLeft + 2 + sBombersNotebookEventIconWidths[eventIcon]) * 4, + (rectTop + yOffset + 2 + sBombersNotebookEventIconHeights[eventIcon]) * 4, + 0, 0, 0, 1 << 10, 1 << 10); + if (sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - + BOMBERS_NOTEBOOK_PERSON_MAX] == + BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_NONE) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0], + sBombersNotebookEntryIconColors[eventIcon][1], + sBombersNotebookEntryIconColors[eventIcon][2], 255); + } else if (sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - + BOMBERS_NOTEBOOK_PERSON_MAX] == + BOMBERS_NOTEBOOK_EVENT_COLOR_WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN) || + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN)) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0], + sBombersNotebookEntryIconColors[eventIcon][1], + sBombersNotebookEntryIconColors[eventIcon][2], 255); + } else { + gDPSetPrimColor(gfx++, 0, 0, 155, 155, 155, 255); + } + } else { + if (CHECK_WEEKEVENTREG( + sBombersNotebookEventColorWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(row, j) - + BOMBERS_NOTEBOOK_PERSON_MAX])) { + gDPSetPrimColor(gfx++, 0, 0, sBombersNotebookEntryIconColors[eventIcon][0], + sBombersNotebookEntryIconColors[eventIcon][1], + sBombersNotebookEntryIconColors[eventIcon][2], 255); + } else { + gDPSetPrimColor(gfx++, 0, 0, 155, 155, 155, 255); + } + } + BombersNotebook_DrawScisTexRect(&gfx, iconRectLeft * 4, (rectTop + yOffset) * 4, + (iconRectLeft + sBombersNotebookEventIconWidths[eventIcon]) * 4, + (rectTop + yOffset + sBombersNotebookEventIconHeights[eventIcon]) * 4, 0, 0, + 0, 1 << 10, 1 << 10); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + } else { + unfinishedEvent = true; + } + j += BOMBERS_NOTEBOOK_ENTRY_SIZE; + } + + *gfxP = gfx; +} + +#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) &photo, + +TexturePtr sBombersNotebookPhotoTextures[] = { +#include "tables/bombers_notebook/person_table.h" +}; + +#undef DEFINE_PERSON + +void BombersNotebook_DrawRows(BombersNotebook* this, Gfx** gfxP) { + static s16 sBarColorR = 0; + static s16 sBarColorG = 0; + static s16 sBarColorB = 0; + static s16 sBarColorTimer = 10; + static s16 sBarColorIndex = 0; + static s16 sBarColorTargetsR[] = { 100, 0 }; + static s16 sBarColorTargetsG[] = { 80, 0 }; + static s16 sBarColorTargetsB[] = { 255, 0 }; + Gfx* gfx = *gfxP; + s32 photoWidth; + s32 rowEnd; + s32 cursorPage; + u32 barRectLeft; + f32 photoRectDs; + u32 photoOffset; + s32 i; + u32 rectTop; + s16 colorStep; + + colorStep = ABS_ALT(sBarColorR - sBarColorTargetsR[sBarColorIndex]) / sBarColorTimer; + if (sBarColorR >= sBarColorTargetsR[sBarColorIndex]) { + sBarColorR -= colorStep; + } else { + sBarColorR += colorStep; + } + + colorStep = ABS_ALT(sBarColorG - sBarColorTargetsG[sBarColorIndex]) / sBarColorTimer; + if (sBarColorG >= sBarColorTargetsG[sBarColorIndex]) { + sBarColorG -= colorStep; + } else { + sBarColorG += colorStep; + } + + colorStep = ABS_ALT(sBarColorB - sBarColorTargetsB[sBarColorIndex]) / sBarColorTimer; + if (sBarColorB >= sBarColorTargetsB[sBarColorIndex]) { + sBarColorB -= colorStep; + } else { + sBarColorB += colorStep; + } + + sBarColorTimer--; + if (sBarColorTimer == 0) { + sBarColorTimer = 10; + sBarColorR = sBarColorTargetsR[sBarColorIndex]; + sBarColorG = sBarColorTargetsG[sBarColorIndex]; + sBarColorB = sBarColorTargetsB[sBarColorIndex]; + sBarColorIndex ^= 1; + } + + rectTop = this->scrollOffset + 107; + if (this->cursorPage >= (BOMBERS_NOTEBOOK_PERSON_MAX - 8)) { + rowEnd = BOMBERS_NOTEBOOK_PERSON_MAX; + i = this->cursorPage; + } else { + rowEnd = this->cursorPage + 8; + i = rowEnd - 8; + } + cursorPage = i; + for (; i < rowEnd; i++, rectTop += 52) { + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[i])) { + gDPLoadTextureBlock(gfx++, sBombersNotebookPhotoTextures[i], G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + } else { + gDPLoadTextureBlock(gfx++, gBombersNotebookEmptyPhotoTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + } + if ((i == (this->cursorPageRow + cursorPage)) && (this->scrollAmount == 0)) { + barRectLeft = 56; + photoOffset = 8; + photoRectDs = 200.0f; + photoWidth = 64; + } else { + barRectLeft = 48; + photoOffset = 0; + photoRectDs = 150.0f; + photoWidth = 48; + } + BombersNotebook_DrawScisTexRect(&gfx, (57 - photoOffset) * 4, (rectTop - photoOffset) * 4, + (57 - photoOffset + photoWidth) * 4, (rectTop - photoOffset + photoWidth) * 4, + 0, 0, 0, 1024.0f / (photoRectDs / 100.0f), 1024.0f / (photoRectDs / 100.0f)); + + if ((i == (this->cursorPageRow + cursorPage)) && (this->scrollAmount == 0)) { + gDPSetPrimColor(gfx++, 0, 0, sBarColorR, sBarColorG, sBarColorB, 255); + } else { + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 60); + } + gDPLoadTextureBlock(gfx++, gBombersNotebookBarTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, (barRectLeft + 57) * 4, (rectTop + 22) * 4, + (barRectLeft - photoOffset + 527) * 4, (rectTop + 26) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCircleTex, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, (barRectLeft - photoOffset + 527) * 4, (rectTop + 16) * 4, + (barRectLeft - photoOffset + 543) * 4, (rectTop + 32) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[i])) { + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + + BombersNotebook_DrawEntries(&gfx, i, rectTop); + + gDPPipeSync(gfx++); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + } + } + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +TexturePtr sBombersNotebookDigitTextures[] = { + gBombersNotebookDigit0Tex, gBombersNotebookDigit1Tex, gBombersNotebookDigit2Tex, gBombersNotebookDigit3Tex, + gBombersNotebookDigit4Tex, gBombersNotebookDigit5Tex, gBombersNotebookDigit6Tex, gBombersNotebookDigit7Tex, + gBombersNotebookDigit8Tex, gBombersNotebookDigit9Tex, +}; +u8 sBombersNotebookDigitRectLeftOffsets[] = { 13, 8, 12, 13, 14, 13, 12, 12, 13, 12 }; +s16 sBombersNotebookDayTexRectLeftOffsets[] = { 16, 12, 9 }; + +#define CURRENT_DAY_CLAMP_MIN_1 ((CURRENT_DAY == 0) ? 1 : CURRENT_DAY) +void BombersNotebook_DrawTimeOfDay(Gfx** gfxP) { + Gfx* gfx = *gfxP; + u32 timeOfDayRectLeft; + u32 timeBoxRectLeft; + u32 connectorRectLeft; + u32 lineRectLeft; + u32 digitsRectLeft; + u16 time; + s32 onesDigit; + s32 tensDigit; + s32 hours; + + time = (((void)0, gSaveContext.save.time) - CLOCK_TIME(6, 0)); + if (CURRENT_DAY == 0) { + time = 0; + } + timeOfDayRectLeft = sBombersNotebookDayRectRectLeft[CURRENT_DAY] + (time / CLOCK_TIME(0, 10)); + if ((CURRENT_DAY_CLAMP_MIN_1 == 1) || + ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (((void)0, gSaveContext.save.time) < CLOCK_TIME(12, 0)))) { + timeOfDayRectLeft -= 32; + lineRectLeft = timeOfDayRectLeft + 32; + } else if ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (time >= (CLOCK_TIME(17, 0) - CLOCK_TIME(6, 0))) && + (time <= (CLOCK_TIME(19, 0) - CLOCK_TIME(6, 0)))) { + timeOfDayRectLeft -= 64; + lineRectLeft = timeOfDayRectLeft + 64; + } else { + timeOfDayRectLeft -= 96; + lineRectLeft = timeOfDayRectLeft + 96; + } + + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPLoadTextureBlock_4b(gfx++, gBombersNoteoobkTimeOfDayBoxTex, G_IM_FMT_IA, 64, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, timeOfDayRectLeft * 4, 42 * 4, (timeOfDayRectLeft + 128) * 4, 70 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, (timeOfDayRectLeft + 16) * 4, 47 * 4, (timeOfDayRectLeft + 112) * 4, 67 * 4, + 0, 0, 0, 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + if (((CURRENT_DAY_CLAMP_MIN_1 >= 3) || + ((CURRENT_DAY_CLAMP_MIN_1 == 2) && (time > (CLOCK_TIME(18, 0) - CLOCK_TIME(6, 0)))))) { + timeBoxRectLeft = timeOfDayRectLeft - 159; + connectorRectLeft = timeOfDayRectLeft - 17; + } else { + timeBoxRectLeft = timeOfDayRectLeft + 130; + connectorRectLeft = timeOfDayRectLeft + 113; + } + + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxLeftTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, timeBoxRectLeft * 4, 42 * 4, (timeBoxRectLeft + 16) * 4, 70 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxMiddleTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 4, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 16) * 4, 42 * 4, (timeBoxRectLeft + 141) * 4, 70 * 4, 0, 0, + 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeBoxRightTex, G_IM_FMT_IA, 16, 28, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 141) * 4, 42 * 4, (timeBoxRectLeft + 157) * 4, 70 * 4, 0, + 0, 0, 1 << 10, 1 << 10); + gDPLoadTextureBlock(gfx++, sBombersNotebookDayTextures[CURRENT_DAY_CLAMP_MIN_1 - 1], G_IM_FMT_IA, G_IM_SIZ_8b, 48, + 22, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect( + &gfx, (timeBoxRectLeft + sBombersNotebookDayTexRectLeftOffsets[CURRENT_DAY_CLAMP_MIN_1 - 1]) * 4, 46 * 4, + (timeBoxRectLeft + sBombersNotebookDayTexRectLeftOffsets[CURRENT_DAY_CLAMP_MIN_1 - 1] + 48) * 4, 68 * 4, 0, 0, + 0, 1 << 10, 1 << 10); + + gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 255); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCircleTex, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (timeBoxRectLeft + 56) * 4, 48 * 4, (timeBoxRectLeft + 72) * 4, 0x100, 0, 0, + 0, 1 << 10, 1 << 10); + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0); + gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255); + + tensDigit = 0; + onesDigit = ((void)0, gSaveContext.save.time) / CLOCK_TIME_HOUR; + if (CURRENT_DAY == 0) { + onesDigit = 6; + } + hours = onesDigit; + do { + if (onesDigit >= 10) { + tensDigit++; + onesDigit -= 10; + } + } while (onesDigit >= 10); + + digitsRectLeft = timeBoxRectLeft + 75; + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[tensDigit], G_IM_FMT_I, 16, 17, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[tensDigit]; + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[onesDigit], G_IM_FMT_I, 16, 17, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[onesDigit]; + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookColonTex, G_IM_FMT_I, 16, 17, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + digitsRectLeft += 7; + tensDigit = 0; + if (CURRENT_DAY == 0) { + onesDigit = TIME_TO_MINUTES_ALT_F((CLOCK_TIME_F(6, 0) - (hours * CLOCK_TIME_HOUR_F))); + } else { + onesDigit = TIME_TO_MINUTES_ALT_F(((void)0, gSaveContext.save.time) - (hours * CLOCK_TIME_HOUR_F)); + } + do { + if (onesDigit >= 10) { + tensDigit++; + onesDigit -= 10; + } + } while (onesDigit >= 10); + + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[tensDigit], G_IM_FMT_I, 16, 17, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + digitsRectLeft += sBombersNotebookDigitRectLeftOffsets[tensDigit]; + gDPLoadTextureBlock_4b(gfx++, sBombersNotebookDigitTextures[onesDigit], G_IM_FMT_I, 16, 17, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, digitsRectLeft * 4, 48 * 4, (digitsRectLeft + 16) * 4, 65 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookConnectorTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 14, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, connectorRectLeft * 4, 49 * 4, (connectorRectLeft + 32) * 4, 63 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + gDPSetPrimColor(gfx++, 0, 0, 242, 0, 14, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookLineTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 1, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, lineRectLeft * 4, 74 * 4, (lineRectLeft + 32) * 4, 490 * 4, 0, 0, 0, 1 << 10, + 1 << 10); + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(gfx++, 200, 0, 0, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + BombersNotebook_DrawScisTexRect(&gfx, (lineRectLeft + -11) * 4, 70 * 4, (lineRectLeft + 13) * 4, 86 * 4, 0, 0, 0, + 1 << 10, 1 << 10); + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +void BombersNotebook_DrawCursor(BombersNotebook* this, Gfx** gfxP) { + Gfx* gfx = *gfxP; + s32 cursorRow; + s32 cursorEntry; + s32 entryRectRight; + s32 entryRectLeft; + s32 entryIcon; + u32 cursorRectLeft; + u32 cursorRectTop; + u32 yOffset; + u16 startTime; + u16 endTime; + + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, 255, 205, 55, 255); + gDPSetEnvColor(gfx++, 0, 0, 0, 255); + gDPLoadTextureBlock_4b(gfx++, gBombersNotebookCursorTex, G_IM_FMT_IA, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + + if (this->cursorEntry == 0) { + BombersNotebook_DrawScisTexRect(&gfx, 47 * 4, (this->cursorPageRow * 52 + 97) * 4, 63 * 4, + (this->cursorPageRow * 52 + 113) * 4, 0, 0, 0, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, 98 * 4, (this->cursorPageRow * 52 + 97) * 4, 114 * 4, + (this->cursorPageRow * 52 + 113) * 4, 0, 0x200, 0, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, 47 * 4, (this->cursorPageRow * 52 + 147) * 4, 63 * 4, + (this->cursorPageRow * 52 + 163) * 4, 0, 0, 0x200, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, 98 * 4, (this->cursorPageRow * 52 + 147) * 4, 114 * 4, + (this->cursorPageRow * 52 + 163) * 4, 0, 0x200, 0x200, 1 << 10, 1 << 10); + } else { + cursorRow = this->cursorPageRow + this->cursorPage; + cursorRectTop = (this->cursorPageRow * 52) + 107; + cursorEntry = this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE; // Offset from photo entry + if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset = 8; + } else if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW) { + yOffset = 24; + } else { // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset = 16; + } + + startTime = BOMBERS_NOTEBOOK_ENTRY_GET_START_TIME(cursorRow, cursorEntry) - CLOCK_TIME(6, 0); + endTime = BOMBERS_NOTEBOOK_ENTRY_GET_END_TIME(cursorRow, cursorEntry) - CLOCK_TIME(6, 0); + entryRectLeft = sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(cursorRow, cursorEntry)] + + (startTime / CLOCK_TIME(0, 10)); + entryRectRight = sBombersNotebookDayRectRectLeft[BOMBERS_NOTEBOOK_ENTRY_GET_DAY(cursorRow, cursorEntry)] + + (endTime / CLOCK_TIME(0, 10)); + if ((entryRectRight - entryRectLeft) < 8) { + entryRectLeft = ((entryRectLeft + entryRectRight) - entryRectLeft) - 8; + entryRectRight = entryRectLeft + 8; + } + entryIcon = sBombersNotebookEventIcons[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(cursorRow, cursorEntry) - + BOMBERS_NOTEBOOK_PERSON_MAX]; + if ((entryRectRight - entryRectLeft) < sBombersNotebookEventIconWidths[entryIcon]) { + cursorRectLeft = + (((entryRectLeft - sBombersNotebookEventIconWidths[entryIcon]) + entryRectRight) - entryRectLeft) + 3; + } else { + cursorRectLeft = + (((entryRectRight - entryRectLeft) - sBombersNotebookEventIconWidths[entryIcon]) / 2) + entryRectLeft; + } + if (entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_EXCLAMATION_POINT) { + cursorRectLeft -= 8; + cursorRectTop -= 8; + } else { + cursorRectLeft -= 9; + cursorRectTop -= 8; + } + if ((entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_MASK) || (entryIcon == BOMBERS_NOTEBOOK_EVENT_ICON_RIBBON)) { + if (sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_ABOVE) { + yOffset -= 12; + } else if (!(sBombersNotebookEntries[cursorRow][cursorEntry] & BOMBERS_NOTEBOOK_ENTRY_POS_BELOW)) { + // BOMBERS_NOTEBOOK_ENTRY_POS_CENTER + yOffset -= 6; + } + } + BombersNotebook_DrawScisTexRect(&gfx, cursorRectLeft * 4, (cursorRectTop + yOffset) * 4, + (cursorRectLeft + 16) * 4, (cursorRectTop + yOffset + 16) * 4, 0, 0, 0, 1 << 10, + 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon]) * 4, + (cursorRectTop + yOffset) * 4, + (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon] + 16) * 4, + (cursorRectTop + yOffset + 16) * 4, 0, 0x200, 0, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect( + &gfx, cursorRectLeft * 4, (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon]) * 4, + (cursorRectLeft + 16) * 4, (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon] + 16) * 4, + 0, 0, 0x200, 1 << 10, 1 << 10); + BombersNotebook_DrawScisTexRect(&gfx, (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon]) * 4, + (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon]) * 4, + (cursorRectLeft + sBombersNotebookEventIconWidths[entryIcon] + 16) * 4, + (cursorRectTop + yOffset + sBombersNotebookEventIconHeights[entryIcon] + 16) * + 4, + 0, 0x200, 0x200, 1 << 10, 1 << 10); + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +void BombersNotebook_DrawArrows(BombersNotebook* this, Gfx** gfxP) { + static s16 sUpperArrowColorR = 0; + static s16 sUpperArrowColorG = 100; + static s16 sUpperArrowColorB = 255; + static s16 sLowerArrowColorR = 0; + static s16 sLowerArrowColorG = 100; + static s16 sLowerArrowColorB = 255; + static s16 sUpperArrowColorIndex = 0; + static s16 sLowerArrowColorIndex = 0; + static s16 sUpperArrowColorTimer = 6; + static s16 sLowerArrowColorTimer = 6; + static s16 sUpperArrowOffsetY = 0; + static s16 sLowerArrowOffsetY = 0; + static s16 sArrowColorTargetsG[] = { 175, 100 }; + static s16 sArrowColorTargetsB[] = { 205, 255 }; + Gfx* gfx = *gfxP; + u32 rectTop; + s16 colorStep; + + gDPPipeSync(gfx++); + gDPLoadTextureBlock(gfx++, gBombersNotebookArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, 4, G_TX_NOLOD, G_TX_NOLOD); + + colorStep = ABS_ALT(sUpperArrowColorG - sArrowColorTargetsG[sUpperArrowColorIndex]) / sUpperArrowColorTimer; + if (sUpperArrowColorG >= sArrowColorTargetsG[sUpperArrowColorIndex]) { + sUpperArrowColorG -= colorStep; + } else { + sUpperArrowColorG += colorStep; + } + + colorStep = ABS_ALT(sUpperArrowColorB - sArrowColorTargetsB[sUpperArrowColorIndex]) / sUpperArrowColorTimer; + if (sUpperArrowColorB >= sArrowColorTargetsB[sUpperArrowColorIndex]) { + sUpperArrowColorB -= colorStep; + } else { + sUpperArrowColorB += colorStep; + } + + sUpperArrowColorTimer--; + if (sUpperArrowColorTimer == 0) { + sUpperArrowOffsetY ^= 6; + sUpperArrowColorTimer = 6; + sUpperArrowColorG = sArrowColorTargetsG[sUpperArrowColorIndex]; + sUpperArrowColorB = sArrowColorTargetsB[sUpperArrowColorIndex]; + sUpperArrowColorIndex ^= 1; + } + + colorStep = ABS_ALT(sLowerArrowColorG - sArrowColorTargetsG[sLowerArrowColorIndex]) / sLowerArrowColorTimer; + if (sLowerArrowColorG >= sArrowColorTargetsG[sLowerArrowColorIndex]) { + sLowerArrowColorG -= colorStep; + } else { + sLowerArrowColorG += colorStep; + } + + colorStep = ABS_ALT(sLowerArrowColorB - sArrowColorTargetsB[sLowerArrowColorIndex]) / sLowerArrowColorTimer; + if (sLowerArrowColorB >= sArrowColorTargetsB[sLowerArrowColorIndex]) { + sLowerArrowColorB -= colorStep; + } else { + sLowerArrowColorB += colorStep; + } + + sLowerArrowColorTimer--; + if (sLowerArrowColorTimer == 0) { + sLowerArrowOffsetY ^= 6; + sLowerArrowColorTimer = 6; + sLowerArrowColorG = sArrowColorTargetsG[sLowerArrowColorIndex]; + sLowerArrowColorB = sArrowColorTargetsB[sLowerArrowColorIndex]; + sLowerArrowColorIndex ^= 1; + } + + if (this->cursorPage != 0) { + gDPPipeSync(gfx++); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetPrimColor(gfx++, 0, 0, sUpperArrowColorR, sUpperArrowColorG, sUpperArrowColorB, 255); + gDPSetEnvColor(gfx++, sUpperArrowColorR, sUpperArrowColorG, sUpperArrowColorB, 255); + rectTop = (-sUpperArrowOffsetY + 83) * 4; + BombersNotebook_DrawScisTexRect(&gfx, 46 * 4, rectTop, 70 * 4, rectTop + (16 * 4), 0, 0, 0x200, 1 << 10, + 1 << 10); + } + + if (this->cursorPage < 16) { + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 0, sLowerArrowColorR, sLowerArrowColorG, sLowerArrowColorB, 255); + gDPSetEnvColor(gfx++, sLowerArrowColorR, sLowerArrowColorG, sLowerArrowColorB, 255); + BombersNotebook_DrawScisTexRect(&gfx, 46 * 4, (sLowerArrowOffsetY + 319) * 4, 70 * 4, + (sLowerArrowOffsetY + 335) * 4, 0, 0, 0, 1 << 10, 1 << 10); + } + gDPPipeSync(gfx++); + *gfxP = gfx; +} + +void BombersNotebook_Draw(BombersNotebook* this, GraphicsContext* gfxCtx) { + Gfx* gfx; + s32 pad[2]; + + func_8012CF0C(gfxCtx, this->loadState != BOMBERS_NOTEBOOK_LOAD_STATE_DONE, false, 0, 0, 0); + + OPEN_DISPS(gfxCtx); + + gfx = POLY_OPA_DISP; + + if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_DONE) { + gSPSegment(gfx++, 0x07, this->scheduleDmaSegment); + gSPSegment(gfx++, 0x08, this->scheduleSegment); + gfx = Gfx_SetupDL39(gfx); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + gDPSetRenderMode(gfx++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 215, 255); + gDPSetEnvColor(gfx++, 100, 100, 100, 255); + gDPLoadTextureBlock(gfx++, gBombersNotebookBackgroundTex, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + + BombersNotebook_DrawScisTexRect(&gfx, 0 * 4, 0 * 4, SCREEN_WIDTH_HIRES * 4, SCREEN_HEIGHT_HIRES * 4, 0, 0, 0, + 0x200, 0x200); + + gDPPipeSync(gfx++); + gDPSetCombineMode(gfx++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + BombersNotebook_DrawHeaders(&gfx); + BombersNotebook_DrawColumns(&gfx); + + gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 86, 600, 450); + BombersNotebook_DrawRows(this, &gfx); + + gDPPipeSync(gfx++); + gSPDisplayList(gfx++, D_0E000000.setScissor); + + BombersNotebook_DrawTimeOfDay(&gfx); + + if (this->scrollAmount == 0) { + BombersNotebook_DrawCursor(this, &gfx); + } + BombersNotebook_DrawArrows(this, &gfx); + } + POLY_OPA_DISP = gfx; + + CLOSE_DISPS(gfxCtx); +} + +void BombersNotebook_LoadFiles(BombersNotebook* this, s32 flag) { + switch (this->loadState) { + case BOMBERS_NOTEBOOK_LOAD_STATE_NONE: + if (this->scheduleDmaSegment == NULL) { + break; + } + CmpDma_LoadAllFiles(this->scheduleDmaSegmentStart, this->scheduleDmaSegment, this->scheduleDmaSegmentSize); + osCreateMesgQueue(&this->loadQueue, this->loadMsg, ARRAY_COUNT(this->loadMsg)); + DmaMgr_SendRequestImpl(&this->dmaRequest, this->scheduleSegment, this->scheduleSegmentStart, + this->scheduleSegmentSize, 0, &this->loadQueue, NULL); + this->loadState = BOMBERS_NOTEBOOK_LOAD_STATE_STARTED; + // fallthrough + case BOMBERS_NOTEBOOK_LOAD_STATE_STARTED: + if (osRecvMesg(&this->loadQueue, NULL, flag) == 0) { + this->loadState = BOMBERS_NOTEBOOK_LOAD_STATE_DONE; + } + break; + + default: + break; + } +} + +#define DEFINE_PERSON(_enum, _photo, description, _metEnum, _metMessage, _metFlag) description, +#define DEFINE_EVENT(_enum, _icon, _colorFlag, description, _completedMessage, _completedFlag) description, + +u16 sBombersNotebookTextIds[] = { +#include "tables/bombers_notebook/person_table.h" +#include "tables/bombers_notebook/event_table.h" +}; + +#undef DEFINE_PERSON +#undef DEFINE_EVENT + +void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input) { + static s16 sStickXRepeatTimer = 0; + static s16 sStickYRepeatTimer = 0; + static s16 sStickXRepeatState = 0; + static s16 sStickYRepeatState = 0; + s32 stickAdjX = input->rel.stick_x; + s32 stickAdjY = input->rel.stick_y; + s32 cursorEntryScan; + + this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_test); + this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_old); + this->scheduleSegmentStart = SEGMENT_ROM_START(schedule_static); + this->scheduleSegmentSize = SEGMENT_ROM_SIZE(schedule_static); + + if (this->scheduleDmaSegment == NULL) { + this->scheduleDmaSegment = ZeldaArena_Malloc(this->scheduleDmaSegmentSize); + } + + if (this->scheduleSegment == NULL) { + this->scheduleSegment = ZeldaArena_Malloc(this->scheduleSegmentSize); + } + + BombersNotebook_LoadFiles(this, OS_MESG_NOBLOCK); + + if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_DONE) { + if (stickAdjX < -30) { + if (sStickXRepeatState == -1) { + sStickXRepeatTimer--; + if (sStickXRepeatTimer < 0) { + sStickXRepeatTimer = 2; + } else { + stickAdjX = 0; + } + } else { + sStickXRepeatTimer = 10; + sStickXRepeatState = -1; + } + } else if (stickAdjX > 30) { + if (sStickXRepeatState == 1) { + sStickXRepeatTimer--; + if (sStickXRepeatTimer < 0) { + sStickXRepeatTimer = 2; + } else { + stickAdjX = 0; + } + } else { + sStickXRepeatTimer = 10; + sStickXRepeatState = 1; + } + } else { + sStickXRepeatState = 0; + } + + if (stickAdjY < -30) { + if (sStickYRepeatState == -1) { + sStickYRepeatTimer--; + if (sStickYRepeatTimer < 0) { + sStickYRepeatTimer = 2; + } else { + stickAdjY = 0; + } + } else { + sStickYRepeatTimer = 10; + sStickYRepeatState = -1; + } + } else if (stickAdjY > 30) { + if (sStickYRepeatState == 1) { + sStickYRepeatTimer--; + if (sStickYRepeatTimer < 0) { + sStickYRepeatTimer = 2; + } else { + stickAdjY = 0; + } + } else { + sStickYRepeatTimer = 10; + sStickYRepeatState = 1; + } + } else { + sStickYRepeatState = 0; + } + + if (this->scrollAmount == 0) { + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[this->cursorPageRow + this->cursorPage])) { + cursorEntryScan = this->cursorEntry; + if (stickAdjX > 30) { + while (true) { + cursorEntryScan += BOMBERS_NOTEBOOK_ENTRY_SIZE; + if (sBombersNotebookEntries[this->cursorPageRow + this->cursorPage] + [cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE] == + BOMBERS_NOTEBOOK_ENTRY_END) { + while (true) { + cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE; + if (cursorEntryScan == 0) { + play_sound(NA_SE_SY_ERROR); + break; + } + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { + play_sound(NA_SE_SY_ERROR); + break; + } + } + break; + } + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { + play_sound(NA_SE_SY_CURSOR); + break; + } + } + this->cursorEntry = cursorEntryScan; + } else if (stickAdjX < -30) { + if (cursorEntryScan != 0) { + do { + cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE; + if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) { + play_sound(NA_SE_SY_CURSOR); + break; + } + } while (cursorEntryScan != 0); + this->cursorEntry = cursorEntryScan; + } + } + if (this->cursorEntry != 0) { + if (play->msgCtx.currentTextId != + sBombersNotebookTextIds[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE)]) { + Message_ContinueTextbox(play, sBombersNotebookTextIds[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT( + this->cursorPageRow + this->cursorPage, + this->cursorEntry - BOMBERS_NOTEBOOK_ENTRY_SIZE)]); + } + } else { + if (play->msgCtx.currentTextId != sBombersNotebookTextIds[this->cursorPageRow + this->cursorPage]) { + Message_ContinueTextbox(play, sBombersNotebookTextIds[this->cursorPageRow + this->cursorPage]); + } + } + } else { + Message_CloseTextbox(play); + } + + if (stickAdjY < -30) { + if (this->cursorPageRow < 3) { + play_sound(NA_SE_SY_CURSOR); + this->cursorEntry = 0; + this->cursorPageRow++; + } else if (this->cursorPage < (BOMBERS_NOTEBOOK_PERSON_MAX - 4)) { + if (sStickYRepeatState == -1) { + this->scrollAmount = -24; + } else { + this->scrollAmount = -12; + } + this->scrollOffset = 0; + this->cursorEntry = 0; + } + } else if (stickAdjY > 30) { + if (this->cursorPageRow > 0) { + play_sound(NA_SE_SY_CURSOR); + this->cursorEntry = 0; + this->cursorPageRow--; + } else if (this->cursorPage != 0) { + play_sound(NA_SE_SY_CURSOR); + this->cursorPage--; + if (sStickYRepeatState == 1) { + this->scrollAmount = 24; + } else { + this->scrollAmount = 12; + } + this->scrollOffset = -48; + this->cursorEntry = 0; + } + } + } else if (this->scrollAmount < 0) { + this->scrollOffset += this->scrollAmount; + if (ABS_ALT(this->scrollOffset) >= 48) { + play_sound(NA_SE_SY_CURSOR); + this->scrollOffset = 0; + this->scrollAmount = 0; + this->cursorPage++; + } + } else { + this->scrollOffset += this->scrollAmount; + if (this->scrollOffset == 0) { + this->scrollOffset = 0; + this->scrollAmount = 0; + } + } + } +} + +void BombersNotebook_Init(BombersNotebook* this) { + bzero(this, sizeof(BombersNotebook)); +} + +void BombersNotebook_Destroy(BombersNotebook* this) { + if (this->loadState == BOMBERS_NOTEBOOK_LOAD_STATE_STARTED) { + BombersNotebook_LoadFiles(this, OS_MESG_BLOCK); + } + if (this->scheduleDmaSegment != NULL) { + ZeldaArena_Free(this->scheduleDmaSegment); + this->scheduleDmaSegment = NULL; + } + //! @bug: Does not free malloc'd memory for schedule segment +} diff --git a/src/code/z_quake.c b/src/code/z_quake.c index c5115375c..8225c6347 100644 --- a/src/code/z_quake.c +++ b/src/code/z_quake.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64view.h" diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index cff66dacb..79af1b73f 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #define ANIM_INTERP 1 diff --git a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c index 737d480ad..efe92eebc 100644 --- a/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c +++ b/src/overlays/actors/ovl_Bg_Breakwall/z_bg_breakwall.c @@ -145,7 +145,7 @@ s32 func_808B736C(BgBreakwall* this, PlayState* play) { } s32 func_808B7380(BgBreakwall* this, PlayState* play) { - if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((gSaveContext.save.day >= 2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } return true; diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c index 8bf39145c..132f8f13f 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -133,11 +133,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { Actor_SetObjectDependency(play, &this->dyna.actor); if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_4) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_3)) { @@ -154,11 +154,11 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { this->dyna.actor.update = func_8091A5A0; } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_5) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_6)) { if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } } else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_6) && (this->dyna.bgId == BGACTOR_NEG_ONE) && - (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || ((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) && ((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))))) { @@ -190,18 +190,18 @@ void func_8091A5A0(Actor* thisx, PlayState* play) { } if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) { - if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((this->dyna.bgId == BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); - } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); } } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) { if ((this->dyna.bgId == BGACTOR_NEG_ONE) && - (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || + (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || ((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) && (gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0))))) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); - } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && + } else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && ((gSaveContext.save.day != 2) || (gSaveContext.save.isNight != true) || (gSaveContext.save.time < CLOCK_TIME(5, 30)) || (gSaveContext.save.time > CLOCK_TIME(6, 0)))) { DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c index 61f493b83..0a8df4f40 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -25,7 +25,7 @@ static u8 D_80BD3DB0[] = { /* 0x08 */ SCHEDULE_CMD_RET_VAL_L(1), /* 0x0B */ SCHEDULE_CMD_CHECK_NOT_IN_DAY_S(2, 0x20 - 0x0F), /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(21, 0, 23, 0, 0x1D - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x1C - 0x19), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x1C - 0x19), /* 0x19 */ SCHEDULE_CMD_RET_VAL_L(1), /* 0x1C */ SCHEDULE_CMD_RET_NONE(), /* 0x1D */ SCHEDULE_CMD_RET_VAL_L(3), diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index f41dcbd31..e62cc45f4 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -293,9 +293,9 @@ void EnBaba_HandleConversation(EnBaba* this, PlayState* play) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_END_CONVERSATION) { if (this->stateFlags & BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK) { this->stateFlags &= ~BOMB_SHOP_LADY_STATE_GAVE_BLAST_MASK; - func_80151BB4(play, 0x33); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK); } - func_80151BB4(play, 4); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY); } } @@ -602,7 +602,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { play->msgCtx.stateTimer = 4; if (this->stateFlags & BOMB_SHOP_LADY_STATE_AUTOTALK) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); return; @@ -625,7 +625,7 @@ void EnBaba_Talk(EnBaba* this, PlayState* play) { } } } else if (talkState == TEXT_STATE_DONE) { - if (Message_ShouldAdvance(play) && (play->msgCtx.unk120B1 == 0)) { + if (Message_ShouldAdvance(play) && (play->msgCtx.bombersNotebookEventQueueCount == 0)) { SET_WEEKEVENTREG(WEEKEVENTREG_81_02); EnBaba_TriggerTransition(play, ENTRANCE(NORTH_CLOCK_TOWN, 7)); } diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 834d5f7f7..19f2e1d9b 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -309,9 +309,9 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { break; case 5: - func_80151BB4(play, 0x24); - func_80151BB4(play, 0x25); - func_80151BB4(play, 0); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS); this->actionFunc = func_809C51B4; sp28 = true; break; @@ -330,7 +330,7 @@ void func_809C4DA4(EnBomBowlMan* this, PlayState* play) { void func_809C51B4(EnBomBowlMan* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((play->msgCtx.unk120B1 == 0) && + if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { play->nextEntrance = Entrance_CreateFromSpawn(6); gSaveContext.nextCutsceneIndex = 0; @@ -432,9 +432,9 @@ void func_809C5598(EnBomBowlMan* this, PlayState* play) { } else if (this->actor.textId == 0x735) { this->unk_2C2 = 0; func_809C493C(this, 17, 1.0f); - func_80151BB4(play, 0x24); - func_80151BB4(play, 0x25); - func_80151BB4(play, 0); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS); func_800B7298(play, &this->actor, PLAYER_CSMODE_WAIT); this->actionFunc = func_809C5738; return; @@ -448,7 +448,7 @@ void func_809C5738(EnBomBowlMan* this, PlayState* play) { s16 yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_2A0); if (this->unk_2C2 == 0) { - if ((play->msgCtx.unk120B1 == 0) && + if ((play->msgCtx.bombersNotebookEventQueueCount == 0) && ((play->msgCtx.msgMode == 0) || (Message_GetState(&play->msgCtx) == TEXT_STATE_DONE))) { this->unk_2C2 = 1; func_809C4B6C(this); diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index 266e2c47b..aa74c5007 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -117,7 +117,7 @@ void EnCow_Init(Actor* thisx, PlayState* play) { this->actionFunc = EnCow_Idle; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY != 1) && + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && (CURRENT_DAY != 1) && (EN_COW_TYPE(thisx) == EN_COW_TYPE_ABDUCTED)) { Actor_Kill(&this->actor); return; diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index 07dfe95f0..89bf08d7b 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -157,7 +157,7 @@ u16 EnFsn_GetWelcome(PlayState* play) { void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { switch (this->textId) { case 0: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_80_10)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL)) { this->textId = 0x29E0; break; } else { @@ -171,7 +171,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; this->getItemId = GI_LETTER_TO_MAMA; - SET_WEEKEVENTREG(WEEKEVENTREG_80_10); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL); this->textId = 0x29F1; break; } else { @@ -194,7 +194,7 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { this->flags |= ENFSN_GIVE_ITEM; this->flags |= ENFSN_GAVE_LETTER_TO_MAMA; this->getItemId = GI_LETTER_TO_MAMA; - SET_WEEKEVENTREG(WEEKEVENTREG_80_10); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PRIORITY_MAIL); this->textId = 0x29F1; break; @@ -210,13 +210,13 @@ void EnFsn_HandleConversationBackroom(EnFsn* this, PlayState* play) { if (this->flags & ENFSN_END_CONVERSATION) { if (this->flags & ENFSN_GAVE_LETTER_TO_MAMA) { this->flags &= ~ENFSN_GAVE_LETTER_TO_MAMA; - func_80151BB4(play, 34); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL); } if (this->flags & ENFSN_GAVE_KEATONS_MASK) { this->flags &= ~ENFSN_GAVE_KEATONS_MASK; - func_80151BB4(play, 33); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK); } - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); } } @@ -425,7 +425,7 @@ s32 EnFsn_TestEndInteraction(EnFsn* this, PlayState* play, Input* input) { if (CHECK_BTN_ALL(input->press.button, BTN_B)) { this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); this->actionFunc = EnFsn_SetupEndInteraction; return true; } @@ -473,7 +473,7 @@ s32 EnFsn_FacingShopkeeperDialogResult(EnFsn* this, PlayState* play) { func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); this->actionFunc = EnFsn_SetupEndInteraction; return true; @@ -977,7 +977,7 @@ void EnFsn_DeterminePrice(EnFsn* this, PlayState* play) { this->actor.textId = 0x29D1; } Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); this->actionFunc = EnFsn_SetupEndInteraction; } } @@ -1036,8 +1036,8 @@ void EnFsn_MakeOffer(EnFsn* this, PlayState* play) { void EnFsn_GiveItem(EnFsn* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { if ((this->isSelling == true) && (this->items[this->cursorIndex]->getItemId == GI_MASK_ALL_NIGHT)) { - func_80151BB4(play, 45); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); } this->actor.parent = NULL; if (ENFSN_IS_SHOP(&this->actor) && !this->isSelling) { @@ -1053,7 +1053,7 @@ void EnFsn_GiveItem(EnFsn* this, PlayState* play) { void EnFsn_SetupResumeInteraction(EnFsn* this, PlayState* play) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_HandleSetupResumeInteraction(this, play); } } else { @@ -1239,7 +1239,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, PlayState* play) { if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { play->msgCtx.msgMode = 0x43; @@ -1311,7 +1311,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); break; default: @@ -1320,7 +1320,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, PlayState* play) { } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { play->msgCtx.msgMode = 0x43; @@ -1362,7 +1362,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { func_8019F230(); this->actor.textId = (CURRENT_DAY == 3) ? 0x29DF : 0x29D1; Message_StartTextbox(play, this->actor.textId, &this->actor); - func_80151BB4(play, 3); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN); break; default: @@ -1371,7 +1371,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, PlayState* play) { } } else if (((talkState == TEXT_STATE_5) || (talkState == TEXT_STATE_DONE)) && Message_ShouldAdvance(play)) { if (CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { - if (play->msgCtx.unk120B1 == 0) { + if (play->msgCtx.bombersNotebookEventQueueCount == 0) { EnFsn_EndInteraction(this, play); } else { play->msgCtx.msgMode = 0x43; diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index bdc4637d1..cb9545d7a 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -211,7 +211,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { Message_CloseTextbox(play); this->headZRotTarget = 0; if ((this->textIdIndex == 13) || (this->textIdIndex == 14)) { - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); SET_WEEKEVENTREG(WEEKEVENTREG_79_04); func_80BC6E10(this); return; @@ -223,7 +223,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { if (this->actor.textId == 0x292A) { SET_WEEKEVENTREG(WEEKEVENTREG_38_10); } - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); func_80BC6E10(this); return; } @@ -234,8 +234,8 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { if (this->textIdIndex == 12) { SET_WEEKEVENTREG(WEEKEVENTREG_38_40); func_801A3B48(0); - func_80151BB4(play, 0x36); - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); func_80BC6E10(this); return; } @@ -275,7 +275,7 @@ void func_80BC7068(EnGuruguru* this, PlayState* play) { return; } func_801A3B48(0); - func_80151BB4(play, 0x13); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU); func_80BC6E10(this); } } diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index 5c06e292a..648a13d46 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -99,9 +99,9 @@ void EnHs_Destroy(Actor* thisx, PlayState* play) { void func_80952DFC(PlayState* play) { if (INV_CONTENT(ITEM_MASK_BUNNY) == ITEM_MASK_BUNNY) { - func_80151BB4(play, 0x2E); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD); } - func_80151BB4(play, 0x10); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GROG); } void EnHs_UpdateChickPos(Vec3f* dst, Vec3f src, f32 offset) { diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index d4ccc8fd6..abdf870b9 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -25,7 +25,7 @@ static u8 D_80BF3260[] = { /* 0x05 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_TOWN, 0x57 - 0x09), /* 0x09 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 25, 15, 45, 0x51 - 0x0F), /* 0x0F */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0x4B - 0x15), - /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x1A - 0x19), + /* 0x15 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x1A - 0x19), /* 0x19 */ SCHEDULE_CMD_RET_NONE(), /* 0x1A */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x45 - 0x20), /* 0x20 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 55, 17, 15, 0x3F - 0x26), @@ -42,7 +42,7 @@ static u8 D_80BF3260[] = { /* 0x5B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 45, 15, 50, 0xAF - 0x61), /* 0x61 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(15, 50, 16, 10, 0xA9 - 0x67), /* 0x67 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 10, 16, 30, 0xA3 - 0x6D), - /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_75_10, 0x8A - 0x71), + /* 0x6D */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_RECEIVED_ROOM_KEY, 0x8A - 0x71), /* 0x71 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 30, 16, 50, 0x84 - 0x77), /* 0x77 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(16, 50, 16, 55, 0x7E - 0x7D), /* 0x7D */ SCHEDULE_CMD_RET_NONE(), @@ -372,7 +372,7 @@ s32 func_80BF17BC(EnIg* this, PlayState* play) { case 1: case 3: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_75_10) && (this->unk_3F6 == 3)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_ROOM_KEY) && (this->unk_3F6 == 3)) { CutsceneManager_Stop(csId); this->unk_3F6 = 5; } else { diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index ad60ad551..ca764b134 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -225,7 +225,7 @@ s32 func_808F33B8(void) { s32 ret = (((gSaveContext.save.day == 1) && ((gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0)))) || (gSaveContext.save.day >= 2)) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01); + !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM); return ret; } @@ -561,8 +561,9 @@ void func_808F4054(PlayState* play, EnIn* this, s32 arg2, u16 textId) { s32 pad; if ((textId == 0x34AE) || (textId == 0x34B0) || (textId == 0x34B2)) { - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); } + switch (arg2) { case 1: case 5: @@ -722,12 +723,12 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x345A: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x345B: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -747,7 +748,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x345F: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -762,7 +763,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3462: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -817,7 +818,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3467: case 0x3468: case 0x3469: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -833,7 +834,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x346A: this->actionFunc = func_808F5A94; - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; } break; @@ -863,13 +864,13 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3475: @@ -925,11 +926,11 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3484: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3485: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3474: @@ -981,14 +982,14 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3480: func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x3479: func_808F43E0(this); func_808F35D8(this, play); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1002,15 +1003,15 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3481: this->actionFunc = func_808F5A34; func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x347D: this->actionFunc = func_808F5A34; func_808F43E0(this); - func_80151BB4(play, 0x11); - func_80151BB4(play, 0x2F); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK); ret = true; break; @@ -1033,16 +1034,16 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x3488: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; case 0x3489: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x348A: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x348B: @@ -1056,7 +1057,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { break; case 0x348D: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1070,7 +1071,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3468: case 0x3469: case 0x3491: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x348E: @@ -1118,7 +1119,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3492: this->actionFunc = func_808F5A94; - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; } break; @@ -1126,11 +1127,11 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 7: switch (textId) { case 0x34A8: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x34A7: - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3495: @@ -1148,7 +1149,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x34A4: this->actionFunc = func_808F5A34; func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1160,7 +1161,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3473: CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); break; case 0x3474: @@ -1199,8 +1200,8 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x34A0: this->actionFunc = func_808F5A34; - func_80151BB4(play, 0x11); - func_80151BB4(play, 0x2F); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK); func_808F43E0(this); ret = true; break; @@ -1224,7 +1225,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x34A3: func_808F43E0(this); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1254,7 +1255,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x349C: func_808F43E0(this); func_808F35D8(this, play); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1284,7 +1285,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3472: func_808F43E0(this); CLEAR_WEEKEVENTREG(WEEKEVENTREG_56_08); - func_80151BB4(play, 0x11); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS); ret = true; break; @@ -1552,7 +1553,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_0); this->actionFunc = func_808F5A94; } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, this->actor.shape.rot.x, this->actor.shape.rot.y, this->actor.shape.rot.z, 0xF); @@ -1563,7 +1564,7 @@ void EnIn_Init(Actor* thisx, PlayState* play) { } } } else { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Actor_Kill(&this->actor); } else { EnIn_ChangeAnim(&this->skelAnime, ENIN_ANIM_7); diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index fe26c18eb..29a09cd90 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -202,7 +202,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) { if (CURRENT_DAY == 1) { this->type = MA4_TYPE_DAY1; - } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { this->type = MA4_TYPE_ALIENS_DEFEATED; } else { this->type = MA4_TYPE_ALIENS_WON; @@ -374,7 +374,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { case 0x3341: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - SET_WEEKEVENTREG(WEEKEVENTREG_21_20); + SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { @@ -383,14 +383,14 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x3342, &this->actor); this->textId = 0x3342; this->state = MA4_STATE_DEFAULT; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; case 0x3346: if (play->msgCtx.choiceIndex == 0) { func_8019F208(); - SET_WEEKEVENTREG(WEEKEVENTREG_21_20); + SET_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM); Message_StartTextbox(play, 0x3343, &this->actor); this->textId = 0x3343; } else { @@ -410,7 +410,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { func_8019F230(); Message_StartTextbox(play, 0x3348, &this->actor); this->textId = 0x3348; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; @@ -422,9 +422,9 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { Message_StartTextbox(play, 0x334E, &this->actor); this->textId = 0x334E; if (CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { - func_80151BB4(play, 0x1C); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM); } - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { // No. func_8019F230(); EnMa4_SetFaceExpression(this, 0, 0); @@ -443,7 +443,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 1, 0); Message_StartTextbox(play, 0x3355, &this->actor); this->textId = 0x3355; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; @@ -459,13 +459,13 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3357, &this->actor); this->textId = 0x3357; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { func_8019F230(); EnMa4_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x335B, &this->actor); this->textId = 0x335B; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } } break; @@ -480,7 +480,7 @@ void EnMa4_HandlePlayerChoice(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x335A, &this->actor); this->textId = 0x335A; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } break; @@ -505,7 +505,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3336, &this->actor); this->textId = 0x3336; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3338: @@ -611,7 +611,7 @@ void EnMa4_ChooseNextDialogue(EnMa4* this, PlayState* play) { if ((gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) || !CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) { Message_StartTextbox(play, 0x335C, &this->actor); this->textId = 0x335C; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { Message_StartTextbox(play, 0x3359, &this->actor); this->textId = 0x3359; @@ -645,7 +645,7 @@ void EnMa4_DialogueHandler(EnMa4* this, PlayState* play) { case TEXT_STATE_DONE: // End conversation if (Message_ShouldAdvance(play)) { - if ((play->msgCtx.unk120B1 == 0) || !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { + if ((play->msgCtx.bombersNotebookEventQueueCount == 0) || !CHECK_QUEST_ITEM(QUEST_BOMBERS_NOTEBOOK)) { EnMa4_SetupWait(this); } } @@ -888,7 +888,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); this->textId = 0x3337; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { Message_StartTextbox(play, 0x3335, &this->actor); this->textId = 0x3335; @@ -896,7 +896,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { } } else if (this->state == MA4_STATE_DEFAULT) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_21_40)) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM)) { Message_StartTextbox(play, 0x3346, &this->actor); this->textId = 0x3346; } else { @@ -944,7 +944,7 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { EnMa4_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x3337, &this->actor); this->textId = 0x3337; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } else { Message_StartTextbox(play, 0x3335, &this->actor); this->textId = 0x3335; diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c index 00281d6e4..5dd713019 100644 --- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c +++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c @@ -153,7 +153,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { this->unk320 = 0; this->eyeTexIndex = 0; - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_SetFaceExpression(this, 0, 1); } else { EnMaYto_SetFaceExpression(this, 5, 2); @@ -186,19 +186,19 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { switch (this->type) { case MA_YTO_TYPE_DEFAULT: - if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; case MA_YTO_TYPE_DINNER: - if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY != 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; case MA_YTO_TYPE_BARN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (((this->actor.params & 0x0F00) >> 8) != 0) { return false; } @@ -211,7 +211,7 @@ s32 EnMaYto_CheckValidSpawn(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_AFTERMILKRUN: - if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) || + if ((!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_14_01)) { return false; } @@ -240,7 +240,7 @@ void EnMaYto_InitAnimation(EnMaYto* this, PlayState* play) { break; case MA_YTO_TYPE_BARN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_ChangeAnim(this, 12); } else { EnMaYto_ChangeAnim(this, 8); @@ -278,8 +278,8 @@ void EnMaYto_ChooseAction(EnMaYto* this, PlayState* play) { case MA_YTO_TYPE_AFTERMILKRUN: this->unk310 = 0; - if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && - (Rand_Next() & 0x80)) { + if ((INV_CONTENT(ITEM_MASK_ROMANI) == ITEM_MASK_ROMANI) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && (Rand_Next() & 0x80)) { EnMaYto_SetupBeginWarmFuzzyFeelingCs(this); } else { EnMaYto_SetupAfterMilkRunInit(this); @@ -333,7 +333,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) { return 0; case MA_YTO_TYPE_DINNER: - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) && (CURRENT_DAY == 2)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) && (CURRENT_DAY == 2)) { return 0; } if (EnMaYto_SearchRomani(this, play)) { @@ -342,7 +342,7 @@ s32 EnMaYto_TryFindRomani(EnMaYto* this, PlayState* play) { return 1; case MA_YTO_TYPE_BARN: - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (EnMaYto_SearchRomani(this, play)) { return 2; } @@ -476,7 +476,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 3, 1); Message_StartTextbox(play, 0x3393, &this->actor); this->textId = 0x3393; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; case 0x3394: @@ -489,7 +489,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_ChangeAnim(this, 1); Message_StartTextbox(play, 0x3396, &this->actor); this->textId = 0x3396; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; default: @@ -499,7 +499,7 @@ void EnMaYto_DefaultChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerWait(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { func_80B90E50(this, 0); this->unk31E = 0; } else { @@ -540,7 +540,7 @@ void EnMaYto_DinnerWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupDinnerDialogueHandler(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -635,8 +635,8 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetRomaniFaceExpression(this, 0, 1); Message_StartTextbox(play, 0x339E, &this->actor); this->textId = 0x339E; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x339F: @@ -671,20 +671,20 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x33A4, &this->actor); this->textId = 0x33A4; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x33A5: Message_StartTextbox(play, 0x33A6, &this->actor); this->textId = 0x33A6; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; case 0x33A7: Message_StartTextbox(play, 0x33A8, &this->actor); this->textId = 0x33A8; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; default: @@ -694,7 +694,7 @@ void EnMaYto_DinnerChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnWait(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_ChangeAnim(this, 13); func_80B90E50(this, 0); this->unk31E = 0; @@ -722,7 +722,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->actor); EnMaYto_BarnStartDialogue(this, play); EnMaYto_SetupBarnDialogueHandler(this); - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01) || (ABS_ALT(direction) < 0x2000)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM) || (ABS_ALT(direction) < 0x2000)) { func_800B8614(&this->actor, play, 100.0f); child = this->actor.child; @@ -734,7 +734,7 @@ void EnMaYto_BarnWait(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupBarnDialogueHandler(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { func_80B90E50(this, 1); } else { func_80B90E50(this, 2); @@ -796,8 +796,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { Actor_ChangeFocus(&this->actor, play, &this->actor); Message_StartTextbox(play, 0x33AD, &this->actor); this->textId = 0x33AD; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x33AE: @@ -814,8 +814,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x33B0, &this->actor); this->textId = 0x33B0; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x33B1: @@ -824,7 +824,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { // "I should had believed what Romani said" Message_StartTextbox(play, 0x33B2, &this->actor); this->textId = 0x33B2; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); break; case 0x33C6: @@ -871,8 +871,8 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetRomaniFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x33CC, &this->actor); this->textId = 0x33CC; - func_80151BB4(play, 6); - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; default: @@ -882,7 +882,7 @@ void EnMaYto_BarnChooseNextDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_SetupAfterMilkRunInit(EnMaYto* this) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { EnMaYto_SetFaceExpression(this, 3, 1); } else { Audio_PlayFanfare(NA_BGM_FAILURE_1); @@ -897,7 +897,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actor.flags &= ~ACTOR_FLAG_10000; - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Message_StartTextbox(play, 0x33C1, &this->actor); this->textId = 0x33C1; } else { @@ -908,7 +908,7 @@ void EnMaYto_AfterMilkRunInit(EnMaYto* this, PlayState* play) { SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 4; EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); return; } @@ -991,9 +991,9 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { this->textId = 0x33C3; SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 3; - func_80151BB4(play, 0x20); - func_80151BB4(play, 0x1F); - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); } else { // You already have the mask @@ -1002,7 +1002,7 @@ void EnMaYto_PostMilkRunExplainReward(EnMaYto* this, PlayState* play) { this->textId = 0x33D0; SET_WEEKEVENTREG(WEEKEVENTREG_14_01); this->unk310 = 3; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); EnMaYto_SetupPostMilkRunWaitDialogueEnd(this); } } else { @@ -1086,7 +1086,7 @@ void EnMaYto_PostMilkRunWaitDialogueEnd(EnMaYto* this, PlayState* play) { } } - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.unk120B1 == 0)) { + if ((Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) && (play->msgCtx.bombersNotebookEventQueueCount == 0)) { EnMaYto_SetupPostMilkRunEnd(this); } } @@ -1154,13 +1154,13 @@ void EnMaYto_DefaultStartDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x33C5, &this->actor); this->textId = 0x33C5; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); EnMaYto_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x33C4, &this->actor); this->textId = 0x33C4; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } } } @@ -1211,7 +1211,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { if (EnMaYto_HasSpokenToPlayer()) { Message_StartTextbox(play, 0x33A6, &this->actor); this->textId = 0x33A6; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); Message_StartTextbox(play, 0x33A5, &this->actor); @@ -1223,7 +1223,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { if (EnMaYto_HasSpokenToPlayer()) { Message_StartTextbox(play, 0x33A8, &this->actor); this->textId = 0x33A8; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); Message_StartTextbox(play, 0x33A7, &this->actor); @@ -1237,7 +1237,7 @@ void EnMaYto_DinnerStartDialogue(EnMaYto* this, PlayState* play) { } void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (CURRENT_DAY == 2) { if (this->unk310 == 1) { Message_StartTextbox(play, 0x33AE, &this->actor); @@ -1266,7 +1266,7 @@ void EnMaYto_BarnStartDialogue(EnMaYto* this, PlayState* play) { EnMaYto_SetFaceExpression(this, 5, 3); Message_StartTextbox(play, 0x33B3, &this->actor); this->textId = 0x33B3; - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); } else { EnMaYto_SetTalkedFlag(); EnMaYto_SetFaceExpression(this, 5, 3); @@ -1360,7 +1360,7 @@ void EnMaYto_SetFaceExpression(EnMaYto* this, s16 overrideEyeTexIndex, s16 mouth } void EnMaYto_InitFaceExpression(EnMaYto* this) { - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYto_SetFaceExpression(this, 0, 1); EnMaYto_SetRomaniFaceExpression(this, 0, 0); } else { @@ -1484,7 +1484,7 @@ void EnMaYto_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((this->type == MA_YTO_TYPE_BARN) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gCremiaWoodenBoxDL); } diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c index 163f89fcd..bb9c9c926 100644 --- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c +++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c @@ -144,7 +144,7 @@ void EnMaYts_InitAnimation(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SITTING: this->actor.targetMode = 6; // Day 1 or "Winning" the alien invasion - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYts_ChangeAnim(this, 14); } else { EnMaYts_ChangeAnim(this, 18); @@ -177,14 +177,14 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case 2: // Failing the alien invasion - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; case 3: // "Winning" the alien invasion - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; @@ -196,7 +196,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_BARN: // Failing the alien invasion - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } else if ((gSaveContext.save.time >= CLOCK_TIME(20, 0)) && (CURRENT_DAY == 3)) { return false; @@ -205,7 +205,7 @@ s32 EnMaYts_CheckValidSpawn(EnMaYts* this, PlayState* play) { case MA_YTS_TYPE_SLEEPING: // "Winning" the alien invasion - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } break; @@ -254,7 +254,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->hasBow = false; } - if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if ((CURRENT_DAY == 1) || CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { this->overrideEyeTexIndex = 0; this->eyeTexIndex = 0; this->mouthTexIndex = 0; @@ -272,7 +272,8 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->mouthTexIndex = 0; this->unk_32C = 2; EnMaYts_SetupEndCreditsHandler(this); - } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + } else if ((CURRENT_DAY == 2) && (gSaveContext.save.isNight == 1) && + CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { EnMaYts_SetupStartDialogue(this); } else { EnMaYts_SetupDoNothing(this); @@ -313,7 +314,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 3); Message_StartTextbox(play, 0x3362, &this->actor); this->textId = 0x3362; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } } else if (Player_GetMask(play) != PLAYER_MASK_NONE) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_65_40)) { @@ -325,9 +326,9 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x3366, &this->actor); this->textId = 0x3366; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } - } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_21_20)) { + } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM)) { EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x3367, &this->actor); this->textId = 0x3367; @@ -343,7 +344,7 @@ void EnMaYts_StartDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 0, 0); Message_StartTextbox(play, 0x336C, &this->actor); this->textId = 0x336C; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); } } EnMaYts_SetupDialogueHandler(this); @@ -445,7 +446,7 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 3); Message_StartTextbox(play, 0x3361, &this->actor); this->textId = 0x3361; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3363: @@ -458,14 +459,14 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 4, 2); Message_StartTextbox(play, 0x3365, &this->actor); this->textId = 0x3365; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3367: EnMaYts_SetFaceExpression(this, 4, 3); Message_StartTextbox(play, 0x3368, &this->actor); this->textId = 0x3368; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; case 0x3369: @@ -478,7 +479,7 @@ void EnMaYts_ChooseNextDialogue(EnMaYts* this, PlayState* play) { EnMaYts_SetFaceExpression(this, 3, 3); Message_StartTextbox(play, 0x336B, &this->actor); this->textId = 0x336B; - func_80151BB4(play, 5); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI); break; default: diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index abf5503a4..ab387771c 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -157,7 +157,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x279C, &this->actor); this->unk_2B4 = 0x279C; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } } else { func_8019F208(); @@ -168,7 +168,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { func_8019F230(); Message_StartTextbox(play, 0x278F, &this->actor); this->unk_2B4 = 0x278F; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } break; @@ -183,13 +183,13 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x279C, &this->actor); this->unk_2B4 = 0x279C; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } } else { func_8019F230(); Message_StartTextbox(play, 0x279B, &this->actor); this->unk_2B4 = 0x279B; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } break; } @@ -282,7 +282,7 @@ void func_80A6F5E4(EnMm3* this, PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_KICKOUT_TIME_PASSED)) { Message_StartTextbox(play, 0x279B, &this->actor); this->unk_2B4 = 0x279B; - func_80151BB4(play, 0xB); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); } else { Message_StartTextbox(play, 0x2798, &this->actor); this->unk_2B4 = 0x2798; @@ -448,8 +448,8 @@ void func_80A6FEEC(EnMm3* this, PlayState* play) { player->stateFlags1 &= ~PLAYER_STATE1_20; Message_StartTextbox(play, 0x2794, &this->actor); this->unk_2B4 = 0x2794; - func_80151BB4(play, 0xB); - func_80151BB4(play, 0x2B); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP); this->actor.flags &= ~ACTOR_FLAG_10000; func_80A6F9C8(this); } else { diff --git a/src/overlays/actors/ovl_En_Nb/z_en_nb.c b/src/overlays/actors/ovl_En_Nb/z_en_nb.c index 474c1d2df..79c2e5cba 100644 --- a/src/overlays/actors/ovl_En_Nb/z_en_nb.c +++ b/src/overlays/actors/ovl_En_Nb/z_en_nb.c @@ -66,7 +66,7 @@ static u8 sScheduleScript[] = { /* 0x3E */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), /* 0x41 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_2), /* 0x44 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), - /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_50_20, 0x57 - 0x4B), + /* 0x47 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_HAD_MIDNIGHT_MEETING, 0x57 - 0x4B), /* 0x4B */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(8, 0, 18, 0, 0x54 - 0x51), /* 0x51 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_3), /* 0x54 */ SCHEDULE_CMD_RET_VAL_L(EN_NB_SCH_1), diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index 0627ddbf8..072f6d6ac 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -1105,7 +1105,11 @@ void func_80AF8AC8(EnPm* this) { void func_80AF8BA8(s32 arg0) { static u16 D_80AFB8D4[] = { - WEEKEVENTREG_27_02, WEEKEVENTREG_27_04, WEEKEVENTREG_27_08, WEEKEVENTREG_27_10, WEEKEVENTREG_27_20, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN, + WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN, }; static u16 D_80AFB8E0[] = { WEEKEVENTREG_27_40, WEEKEVENTREG_27_80, WEEKEVENTREG_28_01, WEEKEVENTREG_28_02, WEEKEVENTREG_28_04, diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index 9b5f1ef38..7a507e0ef 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -162,15 +162,15 @@ void EnPst_UpdateCollision(EnPst* this, PlayState* play) { s32 EnPst_HandleLetterDay1(EnPst* this) { switch (this->actor.params) { case POSTBOX_SOUTH_UPPER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_02); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN); case POSTBOX_NORTH_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_04); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN); case POSTBOX_EAST_UPPER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_08); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN); case POSTBOX_EAST_LOWER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_10); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN); case POSTBOX_SOUTH_LOWER_CLOCKTOWN: - return CHECK_WEEKEVENTREG(WEEKEVENTREG_27_20); + return CHECK_WEEKEVENTREG(WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN); default: return false; } diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index 1a43768fc..e980d1cb5 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -347,9 +347,9 @@ EnRz* EnRz_FindSister(EnRz* this, PlayState* play) { void func_80BFBDFC(PlayState* play) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_75_80)) { - func_80151BB4(play, 0x27); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP); } - func_80151BB4(play, 0xC); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS); } void EnRz_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index e41fc5dc7..3a32031d3 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -230,7 +230,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) { player->actor.textId = sEnStoneHeishiTextIds[this->textIdIndex]; Message_ContinueTextbox(play, sEnStoneHeishiTextIds[this->textIdIndex]); - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); } } @@ -250,7 +250,7 @@ void func_80BC9680(EnStoneheishi* this, PlayState* play) { if (this->textIdIndex < 7) { this->textIdIndex++; } else { - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); func_80BC94B0(this); return; } @@ -293,7 +293,7 @@ void EnStoneheishi_CheckGivenItem(EnStoneheishi* this, PlayState* play) { } } else if (itemAction <= PLAYER_IA_MINUS1) { Message_CloseTextbox(play); - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); func_80BC94B0(this); } } @@ -411,8 +411,8 @@ void func_80BC9E50(EnStoneheishi* this, PlayState* play) { SkelAnime_Update(&this->skelAnime); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - func_80151BB4(play, 0x35); - func_80151BB4(play, 0x12); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO); this->action = EN_STONE_ACTION_1; this->actionFunc = func_80BC9680; } else { diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 6711fcde6..2000e0e53 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -126,7 +126,7 @@ static u8 sScheduleScript[] = { /* 0x0A5 */ SCHEDULE_CMD_CHECK_FLAG_L(WEEKEVENTREG_79_40, 0x12C - 0x0AA), /* 0x0AA */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_SECOM, 0x0B0 - 0x0AE), /* 0x0AE */ SCHEDULE_CMD_RET_VAL_S(7), - /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_20, 0x0DD - 0x0B4), + /* 0x0B0 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT, 0x0DD - 0x0B4), /* 0x0B4 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_IKANA, 0x0DC - 0x0B8), /* 0x0B8 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_08, 0x0BE - 0x0BC), /* 0x0BC */ SCHEDULE_CMD_RET_VAL_S(5), @@ -150,7 +150,7 @@ static u8 sScheduleScript[] = { /* 0x0F3 */ SCHEDULE_CMD_RET_TIME(4, 0, 4, 10, 11), /* 0x0F9 */ SCHEDULE_CMD_CHECK_NOT_IN_SCENE_S(SCENE_YADOYA, 0x12B - 0x0FD), /* 0x0FD */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 10, 4, 30, 0x125 - 0x103), - /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_51_01, 0x11C - 0x107), + /* 0x103 */ SCHEDULE_CMD_CHECK_FLAG_S(WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES, 0x11C - 0x107), /* 0x107 */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 30, 4, 45, 0x116 - 0x10D), /* 0x10D */ SCHEDULE_CMD_CHECK_TIME_RANGE_S(4, 45, 6, 0, 0x114 - 0x113), /* 0x113 */ SCHEDULE_CMD_RET_NONE(), @@ -313,7 +313,7 @@ s32 func_80A3E898(EnTest3* this, PlayState* play) { u16 textId = this->unk_D78->textId; if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { - func_80151BB4(play, 2); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } if (textId == 0xFFFF) { Message_CloseTextbox(play); @@ -658,7 +658,7 @@ s32 func_80A3F73C(EnTest3* this, PlayState* play) { this->player.stateFlags2 &= ~PLAYER_STATE2_40000; D_80A41D5C = true; if ((this->unk_D78->unk_0 == 4) && CHECK_WEEKEVENTREG(WEEKEVENTREG_51_08)) { - func_80151BB4(play, 2); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } } else { if (play->actorCtx.flags & ACTORCTX_FLAG_4) { @@ -785,7 +785,7 @@ s32 func_80A3FBE8(EnTest3* this, PlayState* play) { func_800FE658(TIME_TO_MINUTES_ALT_F(fabsf((s16) - ((void)0, gSaveContext.save.time)))); } if (play->actorCtx.flags & ACTORCTX_FLAG_6) { - SET_WEEKEVENTREG(WEEKEVENTREG_51_20); + SET_WEEKEVENTREG(WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT); CLEAR_WEEKEVENTREG(WEEKEVENTREG_90_02); } D_80A41D20 = 3; @@ -1019,8 +1019,8 @@ void func_80A40908(EnTest3* this, PlayState* play) { func_80A3E7E0(this, func_80A4084C); this->player.targetedActor = &GET_PLAYER(play)->actor; SET_WEEKEVENTREG(WEEKEVENTREG_51_08); - func_80151BB4(play, 0x19); - func_80151BB4(play, 2); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI); } else { func_800B8500(&this->player.actor, play, 9999.9f, 9999.9f, PLAYER_IA_MINUS1); this->unk_D78 = &D_80A41854[6]; @@ -1217,7 +1217,7 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL Matrix_MultVec3f(&D_80A418CC, &this->player.actor.focus.pos); } } else if (limbIndex == OBJECT_TEST3_LIMB_15) { - if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_50_80) || + if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES) || (INV_CONTENT(ITEM_PENDANT_OF_MEMORIES) == ITEM_PENDANT_OF_MEMORIES) || (this->player.getItemDrawIdPlusOne - 1 == GID_PENDANT_OF_MEMORIES)) { D_80A41D60 = true; diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index 21ddf2bee..fb18d4a39 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -4,7 +4,6 @@ * Description: Three-Day Events */ -#include "prevent_bss_reordering.h" #include "z_en_test4.h" #include "z64horse.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c index 7de3b50c2..2177742dc 100644 --- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c +++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c @@ -290,7 +290,7 @@ void func_80BA3BFC(EnToto* this, PlayState* play) { this->unk2B4 = 0; } else { if (this->text->unk0 == 4) { - func_80151BB4(play, 9); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); } Animation_MorphToLoop(&this->skelAnime, &object_zm_Anim_00B3E0, -4.0f); } @@ -333,9 +333,9 @@ void func_80BA3DBC(EnToto* this, PlayState* play) { } else { player = GET_PLAYER(play); if ((player->stateFlags1 & PLAYER_STATE1_400) && player->unk_AE7 != 0) { - func_80151BB4(play, 48); - func_80151BB4(play, 9); - func_80151BB4(play, 10); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN); } else { return; } @@ -369,7 +369,7 @@ s32 func_80BA3F2C(EnToto* this, PlayState* play) { func_80BA3EE8(this, play); } if (this->text->unk0 == 4) { - func_80151BB4(play, 9); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); } return 0; } @@ -686,8 +686,8 @@ void func_80BA4CB4(EnToto* this, PlayState* play) { Animation_PlayOnce(&this->skelAnime, (this->cueId == 1) ? &object_zm_Anim_0016A4 : &object_zm_Anim_0022C8); if ((this->cueId == 2) && (this->unk2B3 != 0xF)) { - func_80151BB4(play, 9); - func_80151BB4(play, 10); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_TOTO); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN); } } } diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 9df560150..9238a166b 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -136,9 +136,9 @@ void EnYb_Destroy(Actor* thisx, PlayState* play) { void func_80BFA2FC(PlayState* play) { if (INV_CONTENT(ITEM_MASK_KAMARO) == ITEM_MASK_KAMARO) { - func_80151BB4(play, 0x34); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK); } - func_80151BB4(play, 0xF); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO); } /** diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c index ee8c84877..774632cb4 100644 --- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c +++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c @@ -31,7 +31,8 @@ ActorInit Obj_Dinner_InitVars = { void ObjDinner_Init(Actor* thisx, PlayState* play) { ObjDinner* this = THIS; - if ((gSaveContext.save.isNight != true) || ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01))) { + if ((gSaveContext.save.isNight != true) || + ((CURRENT_DAY == 3) && CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM))) { Actor_Kill(&this->actor); } Actor_SetScale(&this->actor, 0.1f); diff --git a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c index 8ff6e8455..75ff18b6b 100644 --- a/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c +++ b/src/overlays/actors/ovl_Obj_Milk_Bin/z_obj_milk_bin.c @@ -58,7 +58,7 @@ void ObjMilkBin_Init(Actor* thisx, PlayState* play) { this->disableDraw = 0; this->type = thisx->params; - if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if ((this->type == OBJ_MILK_BIN_TYPE_2) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { this->disableDraw |= 1; } } @@ -74,14 +74,14 @@ void ObjMilkBin_Update(Actor* thisx, PlayState* play2) { ObjMilkBin* this = THIS; if (this->type == OBJ_MILK_BIN_TYPE_1) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { if (((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == 1)) || (gSaveContext.save.day >= 3)) { Actor_Kill(&this->actor); return; } } } else if (this->type == OBJ_MILK_BIN_TYPE_2) { - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { this->disableDraw &= ~1; } else { this->disableDraw |= 1; diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index c4f884694..a6085ef51 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -15,7 +15,7 @@ /** * weekEventReg flags checked by this actor: - * - WEEKEVENTREG_22_01: Aliens defeated + * - WEEKEVENTREG_DEFENDED_AGAINST_THEM: Aliens defeated * If false: The actor doesn't spawn * - WEEKEVENTREG_31_40 * If true: Cremia doesn't explain again she'll deliever milk to town @@ -23,7 +23,7 @@ * If true: Triggers cutscene on Romani's Ranch * - WEEKEVENTREG_34_80 * If true: Doesn't spawn on Romani's Ranch - * - WEEKEVENTREG_52_01 + * - WEEKEVENTREG_ESCORTED_CREMIA * If true: Doesn't spawn on Romani's Ranch or Milk Road * - WEEKEVENTREG_52_02 * If true: Doesn't spawn on Romani's Ranch or Milk Road @@ -37,7 +37,7 @@ * Player accepts the ride and is with Cremia during the Milk Run * - WEEKEVENTREG_34_80: Cremia does Milk Run alone * Player didn't interact or didn't accept the ride - * - WEEKEVENTREG_52_01: Won Milk Run minigame + * - WEEKEVENTREG_ESCORTED_CREMIA: Won Milk Run minigame * At least one pot is safe. Turns off the "Lose Milk Run minigame" * - WEEKEVENTREG_52_02: Lose Milk Run minigame * Every pot was broken by bandits. Turns off the "Win Milk Run minigame" @@ -47,7 +47,7 @@ * weekEventReg flags unset by this actor: * - WEEKEVENTREG_31_80 * Turned off when the Milk Run finishes - * - WEEKEVENTREG_52_01 + * - WEEKEVENTREG_ESCORTED_CREMIA * Turned off if Player lose the Milk Run * - WEEKEVENTREG_52_02 * Turned off if Player wins the Milk Run @@ -682,7 +682,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->initialPathIndex = OBJ_UM_GET_PATH_INDEX(thisx); // if (!AliensDefeated) - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { Actor_Kill(&this->dyna.actor); return; } @@ -702,7 +702,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { // Waiting for player if (CHECK_WEEKEVENTREG(WEEKEVENTREG_34_80) || (gSaveContext.save.time >= CLOCK_TIME(19, 0)) || - (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || + (gSaveContext.save.time <= CLOCK_TIME(6, 0)) || CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { Actor_Kill(&this->dyna.actor); return; @@ -713,7 +713,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { ObjUm_SetupAction(this, ObjUm_RanchWait); } } else if (this->type == OBJ_UM_TYPE_PRE_MILK_RUN) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA)) { Actor_Kill(&this->dyna.actor); return; } @@ -739,7 +739,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { this->unk_354 = 0; ObjUm_RotatePlayer(this, play, 0); } else if (this->type == OBJ_UM_TYPE_POST_MILK_RUN) { - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) || CHECK_WEEKEVENTREG(WEEKEVENTREG_59_02)) { Actor_Kill(&this->dyna.actor); return; } @@ -843,7 +843,7 @@ s32 func_80B795A0(PlayState* play, ObjUm* this, s32 arg2) { } else { Actor_ContinueText(play, &this->dyna.actor, 0x33B5); func_8019F230(); - func_80151BB4(play, 6); + Message_BombersNotebookQueueEvent(play, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA); phi_v1 = false; } break; @@ -1302,13 +1302,13 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_31_80); gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_52_01) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_52_02)) { if (!this->areAllPotsBroken) { play->nextEntrance = ENTRANCE(MILK_ROAD, 6); play->transitionType = TRANS_TYPE_64; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; - SET_WEEKEVENTREG(WEEKEVENTREG_52_01); + SET_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA); CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_02); } else { play->nextEntrance = ENTRANCE(ROMANI_RANCH, 8); @@ -1316,7 +1316,7 @@ void ObjUm_RunMinigame(ObjUm* this, PlayState* play) { gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; play->transitionTrigger = TRANS_TRIGGER_START; SET_WEEKEVENTREG(WEEKEVENTREG_52_02); - CLEAR_WEEKEVENTREG(WEEKEVENTREG_52_01); + CLEAR_WEEKEVENTREG(WEEKEVENTREG_ESCORTED_CREMIA); } } break; diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c index 46a6b994d..23e6eb0ac 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c @@ -80,7 +80,7 @@ s32 func_80C07CD0(void) { } } - if (CHECK_WEEKEVENTREG(WEEKEVENTREG_22_01)) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DEFENDED_AGAINST_THEM)) { return false; } return true; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index bbde013ef..01c732aa2 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -3,7 +3,6 @@ * Overlay: ovl_player_actor * Description: Player */ - #include "prevent_bss_reordering.h" #include "global.h" #include "z64horse.h" @@ -19110,7 +19109,7 @@ void func_80859708(PlayState* play, Player* this, UNK_TYPE arg2) { PlayerAnimation_Update(play, &this->skelAnime); if ((this->actor.id == ACTOR_EN_TEST3) && Animation_OnFrame(&this->skelAnime, 20.0f)) { this->getItemDrawIdPlusOne = GID_MASK_SUN + 1; - func_80151BB4(play, 0x1B); + Message_BombersNotebookQueueEvent(play, 0x1B); Audio_PlayFanfare(NA_BGM_GET_NEW_MASK); } } @@ -19786,7 +19785,7 @@ void func_8085A7C0(PlayState* play, Player* this, UNK_TYPE arg2) { } } } else if (PlayerAnimation_OnFrame(&this->skelAnime, 4.0f)) { - SET_WEEKEVENTREG(WEEKEVENTREG_50_80); + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES); } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 64da25451..b60a00f9e 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -3,7 +3,7 @@ * Overlay: ovl_kaleido_scope * Description: Pause Menu */ - +#include "prevent_bss_reordering.h" #include "z_kaleido_scope.h" #include "overlays/gamestates/ovl_opening/z_opening.h" #include "interface/icon_item_gameover_static/icon_item_gameover_static.h" diff --git a/tools/disasm/disasm.py b/tools/disasm/disasm.py index 37ba8b45e..78d66d337 100755 --- a/tools/disasm/disasm.py +++ b/tools/disasm/disasm.py @@ -169,7 +169,6 @@ variable_addrs = None files_text = {} - def proper_name(symbol, in_data=False, is_symbol=True): # hacks # ovl_En_Encount4 fake symbol at the very end of the data section @@ -181,6 +180,10 @@ def proper_name(symbol, in_data=False, is_symbol=True): return variables_ast[0x801EF670][0] + f" - 0x{0x801EF670 - 0x801EF51D:X}" elif symbol == 0x801D0D7A: # play_hireso constant-folding D_801D0D80 array return variables_ast[0x801D0D80][0] + f" - 0x{0x801D0D80 - 0x801D0D7A:X}" + elif symbol == 0x801D11F4: # play_hireso constant-folding D_801D1244 array + return variables_ast[0x801D1244][0] + f" - 0x{0x801D1244 - 0x801D11F4:X}" + elif symbol == 0x801D12C0: # play_hireso constant-folding D_801D12E8 array + return variables_ast[0x801D12E8][0] + f" - 0x{0x801D12E8 - 0x801D12C0:X}" elif symbol == 0x80A09740: # boss_07 symbol with large addend folded into %lo return variables_ast[0x80A09A60][0] + f" - 0x{0x80A09A60 - 0x80A09740:X}" # bg_ikana_mirror symbol with large addend folded into %lo diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 1d38ccc2e..4fc8f07c1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2855,7 +2855,7 @@ 0x801518B0:("Message_StartTextbox",), 0x80151938:("Message_ContinueTextbox",), 0x80151A68:("func_80151A68",), - 0x80151BB4:("func_80151BB4",), + 0x80151BB4:("Message_BombersNotebookQueueEvent",), 0x80151C9C:("func_80151C9C",), 0x80151DA4:("func_80151DA4",), 0x80152434:("func_80152434",), @@ -3040,16 +3040,16 @@ 0x8016A178:("Play_AssignPlayerCsIdsFromScene",), 0x8016A268:("Play_FillScreen",), 0x8016A2C8:("Play_Init",), - 0x8016AC10:("func_8016AC10",), - 0x8016AE1C:("func_8016AE1C",), - 0x8016B278:("func_8016B278",), - 0x8016B4B0:("func_8016B4B0",), - 0x8016C344:("func_8016C344",), - 0x8016CD4C:("func_8016CD4C",), - 0x8016E40C:("func_8016E40C",), - 0x8016EA90:("func_8016EA90",), + 0x8016AC10:("BombersNotebook_DrawScisTexRect",), + 0x8016AE1C:("BombersNotebook_DrawHeaders",), + 0x8016B278:("BombersNotebook_DrawColumns",), + 0x8016B4B0:("BombersNotebook_DrawEntries",), + 0x8016C344:("BombersNotebook_DrawRows",), + 0x8016CD4C:("BombersNotebook_DrawTimeOfDay",), + 0x8016E40C:("BombersNotebook_DrawCursor",), + 0x8016EA90:("BombersNotebook_DrawArrows",), 0x8016F1A8:("BombersNotebook_Draw",), - 0x8016F4EC:("func_8016F4EC",), + 0x8016F4EC:("BombersNotebook_LoadFiles",), 0x8016F5A8:("BombersNotebook_Update",), 0x8016FC78:("BombersNotebook_Init",), 0x8016FC98:("BombersNotebook_Destroy",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 3a14118c5..749ee5878 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1958,8 +1958,8 @@ 0x801C6A90:("D_801C6A90","UNK_TYPE2","",0x2), 0x801C6A94:("D_801C6A94","UNK_TYPE2","",0x2), 0x801C6A98:("gPageSwitchNextButtonStatus","UNK_TYPE1","",0x1), - 0x801C6AB8:("D_801C6AB8","UNK_TYPE1","",0x1), - 0x801C6B28:("D_801C6B28","UNK_TYPE1","",0x1), + 0x801C6AB8:("sBombersNotebookEventMessages","UNK_TYPE1","",0x1), + 0x801C6B28:("gBombersNotebookWeekEventFlags","UNK_TYPE1","",0x1), 0x801C6B98:("D_801C6B98","UNK_TYPE1","",0x1), 0x801CED40:("D_801CED40","UNK_TYPE1","",0x1), 0x801CFB08:("D_801CFB08","UNK_TYPE1","",0x1), @@ -2115,19 +2115,14 @@ 0x801D0D5C:("sIsCameraUnderwater","UNK_TYPE2","",0x2), 0x801D0D60:("D_801D0D60","Input*","",0x4), 0x801D0D64:("sPlayerCsIdToCsCamId","s16","[10]",0x14), - 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x1), - 0x801D11F4:("D_801D11F4","UNK_TYPE1","",0x1), - 0x801D1230:("D_801D1230","UNK_TYPE1","",0x1), - 0x801D1234:("D_801D1234","UNK_TYPE1","",0x1), - 0x801D1238:("D_801D1238","UNK_TYPE4","",0x4), - 0x801D1244:("D_801D1244","UNK_TYPE1","",0x1), - 0x801D12C0:("D_801D12C0","UNK_TYPE1","",0x1), - 0x801D12D0:("D_801D12D0","UNK_TYPE1","",0x1), - 0x801D12D4:("D_801D12D4","UNK_TYPE1","",0x1), - 0x801D12D8:("D_801D12D8","UNK_TYPE1","",0x1), + 0x801D0D80:("D_801D0D80","UNK_TYPE1","",0x4B0), + 0x801D1230:("D_801D1230","UNK_TYPE1","",0x8), + 0x801D1238:("D_801D1238","UNK_TYPE4","",0x1), + 0x801D1244:("D_801D1244","UNK_TYPE1","",0x8C), + 0x801D12D0:("D_801D12D0","UNK_TYPE1","",0xC), 0x801D12DC:("D_801D12DC","UNK_TYPE1","",0x1), - 0x801D1330:("D_801D1330","UNK_TYPE2","",0x2), - 0x801D1342:("D_801D1342","UNK_TYPE1","",0x1), + 0x801D12E8:("D_801D12E8","UNK_TYPE1","",0x1), + 0x801D1330:("D_801D1330","UNK_TYPE1","",0x14), 0x801D1344:("D_801D1344","UNK_TYPE2","",0x2), 0x801D1368:("D_801D1368","UNK_TYPE1","",0x1), 0x801D1374:("D_801D1374","UNK_TYPE2","",0x2), diff --git a/tools/namefixer.py b/tools/namefixer.py index a755cc88c..417210d8f 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -713,6 +713,7 @@ wordReplace = { "func_80158FB0": "Message_LoadTimeNES", "func_8015926C": "Message_LoadOwlWarpTextNES", "func_8015E750": "Message_FindCreditsMessage", + "func_80151BB4": "Message_BombersNotebookQueueEvent", "func_80133038": "Schedule_RunScript", "EffectSsKiraKira_SpawnSmallYellow": "EffectSsKirakira_SpawnSmallYellow", diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index 5f42d30d6..efa3bc2fe 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -5,6 +5,8 @@ compiler_type = "ido" "gs[DS]P.*" = "void" "gDma.*" = "void" "G_IM_SIZ_.*" = "int" +"G_IM_FMT_.*" = "int" +"G_TX_.*" = "int" "G_[AC]C.*" = "int" LOG = "void" SET_FULLSCREEN_VIEWPORT = "void" diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 834b933ef..80d36de95 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2369,7 +2369,7 @@ asm/non_matchings/code/z_message/func_801514B0.s,func_801514B0,0x801514B0,0x100 asm/non_matchings/code/z_message/Message_StartTextbox.s,Message_StartTextbox,0x801518B0,0x22 asm/non_matchings/code/z_message/Message_ContinueTextbox.s,Message_ContinueTextbox,0x80151938,0x4C asm/non_matchings/code/z_message/func_80151A68.s,func_80151A68,0x80151A68,0x53 -asm/non_matchings/code/z_message/func_80151BB4.s,func_80151BB4,0x80151BB4,0x3A +asm/non_matchings/code/z_message/Message_BombersNotebookQueueEvent.s,Message_BombersNotebookQueueEvent,0x80151BB4,0x3A asm/non_matchings/code/z_message/func_80151C9C.s,func_80151C9C,0x80151C9C,0x42 asm/non_matchings/code/z_message/func_80151DA4.s,func_80151DA4,0x80151DA4,0x1A4 asm/non_matchings/code/z_message/func_80152434.s,func_80152434,0x80152434,0xC @@ -2554,16 +2554,16 @@ asm/non_matchings/code/z_play/Play_IsDebugCamEnabled.s,Play_IsDebugCamEnabled,0x asm/non_matchings/code/z_play/func_8016A178.s,func_8016A178,0x8016A178,0x3C asm/non_matchings/code/z_play/Play_FillScreen.s,Play_FillScreen,0x8016A268,0x18 asm/non_matchings/code/z_play/Play_Init.s,Play_Init,0x8016A2C8,0x252 -asm/non_matchings/code/z_play_hireso/func_8016AC10.s,func_8016AC10,0x8016AC10,0x83 -asm/non_matchings/code/z_play_hireso/func_8016AE1C.s,func_8016AE1C,0x8016AE1C,0x117 -asm/non_matchings/code/z_play_hireso/func_8016B278.s,func_8016B278,0x8016B278,0x8E -asm/non_matchings/code/z_play_hireso/func_8016B4B0.s,func_8016B4B0,0x8016B4B0,0x3A5 -asm/non_matchings/code/z_play_hireso/func_8016C344.s,func_8016C344,0x8016C344,0x282 -asm/non_matchings/code/z_play_hireso/func_8016CD4C.s,func_8016CD4C,0x8016CD4C,0x5B0 -asm/non_matchings/code/z_play_hireso/func_8016E40C.s,func_8016E40C,0x8016E40C,0x1A1 -asm/non_matchings/code/z_play_hireso/func_8016EA90.s,func_8016EA90,0x8016EA90,0x1C6 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawScisTexRect.s,BombersNotebook_DrawScisTexRect,0x8016AC10,0x83 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawHeaders.s,BombersNotebook_DrawHeaders,0x8016AE1C,0x117 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawColumns.s,BombersNotebook_DrawColumns,0x8016B278,0x8E +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawEntries.s,BombersNotebook_DrawEntries,0x8016B4B0,0x3A5 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawRows.s,BombersNotebook_DrawRows,0x8016C344,0x282 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawTimeOfDay.s,BombersNotebook_DrawTimeOfDay,0x8016CD4C,0x5B0 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawCursor.s,BombersNotebook_DrawCursor,0x8016E40C,0x1A1 +asm/non_matchings/code/z_play_hireso/BombersNotebook_DrawArrows.s,BombersNotebook_DrawArrows,0x8016EA90,0x1C6 asm/non_matchings/code/z_play_hireso/BombersNotebook_Draw.s,BombersNotebook_Draw,0x8016F1A8,0xD1 -asm/non_matchings/code/z_play_hireso/func_8016F4EC.s,func_8016F4EC,0x8016F4EC,0x2F +asm/non_matchings/code/z_play_hireso/BombersNotebook_LoadFiles.s,BombersNotebook_LoadFiles,0x8016F4EC,0x2F asm/non_matchings/code/z_play_hireso/BombersNotebook_Update.s,BombersNotebook_Update,0x8016F5A8,0x1B4 asm/non_matchings/code/z_play_hireso/BombersNotebook_Init.s,BombersNotebook_Init,0x8016FC78,0x8 asm/non_matchings/code/z_play_hireso/BombersNotebook_Destroy.s,BombersNotebook_Destroy,0x8016FC98,0x16 diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 28b64d2fa..591671ab8 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -177,10 +177,10 @@ weekEventReg = { (21 << 8) | 0x04: "WEEKEVENTREG_TALKED_GORON_GRAVEMAKER_AS_GORON", (21 << 8) | 0x08: "WEEKEVENTREG_TALKED_THAWED_GRAVEYARD_GORON", (21 << 8) | 0x10: "WEEKEVENTREG_21_10", - (21 << 8) | 0x20: "WEEKEVENTREG_21_20", + (21 << 8) | 0x20: "WEEKEVENTREG_PROMISED_TO_HELP_WITH_THEM", (21 << 8) | 0x40: "WEEKEVENTREG_21_40", (21 << 8) | 0x80: "WEEKEVENTREG_21_80", - (22 << 8) | 0x01: "WEEKEVENTREG_22_01", + (22 << 8) | 0x01: "WEEKEVENTREG_DEFENDED_AGAINST_THEM", (22 << 8) | 0x02: "WEEKEVENTREG_22_02", (22 << 8) | 0x04: "WEEKEVENTREG_CALMED_GORON_ELDERS_SON", (22 << 8) | 0x08: "WEEKEVENTREG_22_08", @@ -221,11 +221,11 @@ weekEventReg = { (26 << 8) | 0x40: "WEEKEVENTREG_26_40", (26 << 8) | 0x80: "WEEKEVENTREG_26_80", (27 << 8) | 0x01: "WEEKEVENTREG_27_01", - (27 << 8) | 0x02: "WEEKEVENTREG_27_02", - (27 << 8) | 0x04: "WEEKEVENTREG_27_04", - (27 << 8) | 0x08: "WEEKEVENTREG_27_08", - (27 << 8) | 0x10: "WEEKEVENTREG_27_10", - (27 << 8) | 0x20: "WEEKEVENTREG_27_20", + (27 << 8) | 0x02: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_UPPER_CLOCKTOWN", + (27 << 8) | 0x04: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_NORTH_CLOCKTOWN", + (27 << 8) | 0x08: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_UPPER_CLOCKTOWN", + (27 << 8) | 0x10: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_EAST_LOWER_CLOCKTOWN", + (27 << 8) | 0x20: "WEEKEVENTREG_DEPOSITED_LETTER_TO_KAFEI_SOUTH_LOWER_CLOCKTOWN", (27 << 8) | 0x40: "WEEKEVENTREG_27_40", (27 << 8) | 0x80: "WEEKEVENTREG_27_80", (28 << 8) | 0x01: "WEEKEVENTREG_28_01", @@ -407,20 +407,20 @@ weekEventReg = { (50 << 8) | 0x01: "WEEKEVENTREG_50_01", (50 << 8) | 0x02: "WEEKEVENTREG_50_02", (50 << 8) | 0x04: "WEEKEVENTREG_50_04", - (50 << 8) | 0x08: "WEEKEVENTREG_50_08", + (50 << 8) | 0x08: "WEEKEVENTREG_PROMISED_MIDNIGHT_MEETING", (50 << 8) | 0x10: "WEEKEVENTREG_50_10", - (50 << 8) | 0x20: "WEEKEVENTREG_50_20", + (50 << 8) | 0x20: "WEEKEVENTREG_HAD_MIDNIGHT_MEETING", (50 << 8) | 0x40: "WEEKEVENTREG_50_40", - (50 << 8) | 0x80: "WEEKEVENTREG_50_80", - (51 << 8) | 0x01: "WEEKEVENTREG_51_01", + (50 << 8) | 0x80: "WEEKEVENTREG_RECEIVED_PENDANT_OF_MEMORIES", + (51 << 8) | 0x01: "WEEKEVENTREG_DELIVERED_PENDANT_OF_MEMORIES", (51 << 8) | 0x02: "WEEKEVENTREG_51_02", (51 << 8) | 0x04: "WEEKEVENTREG_51_04", (51 << 8) | 0x08: "WEEKEVENTREG_51_08", (51 << 8) | 0x10: "WEEKEVENTREG_51_10", - (51 << 8) | 0x20: "WEEKEVENTREG_51_20", + (51 << 8) | 0x20: "WEEKEVENTREG_ESCAPED_SAKONS_HIDEOUT", (51 << 8) | 0x40: "WEEKEVENTREG_51_40", (51 << 8) | 0x80: "WEEKEVENTREG_51_80", - (52 << 8) | 0x01: "WEEKEVENTREG_52_01", + (52 << 8) | 0x01: "WEEKEVENTREG_ESCORTED_CREMIA", (52 << 8) | 0x02: "WEEKEVENTREG_52_02", (52 << 8) | 0x04: "WEEKEVENTREG_52_04", (52 << 8) | 0x08: "WEEKEVENTREG_52_08", @@ -532,61 +532,61 @@ weekEventReg = { (65 << 8) | 0x20: "WEEKEVENTREG_65_20", (65 << 8) | 0x40: "WEEKEVENTREG_65_40", (65 << 8) | 0x80: "WEEKEVENTREG_65_80", - (66 << 8) | 0x01: "WEEKEVENTREG_66_01", - (66 << 8) | 0x02: "WEEKEVENTREG_66_02", - (66 << 8) | 0x04: "WEEKEVENTREG_66_04", - (66 << 8) | 0x08: "WEEKEVENTREG_66_08", - (66 << 8) | 0x10: "WEEKEVENTREG_66_10", - (66 << 8) | 0x20: "WEEKEVENTREG_66_20", - (66 << 8) | 0x40: "WEEKEVENTREG_66_40", - (66 << 8) | 0x80: "WEEKEVENTREG_66_80", - (67 << 8) | 0x01: "WEEKEVENTREG_67_01", - (67 << 8) | 0x02: "WEEKEVENTREG_67_02", - (67 << 8) | 0x04: "WEEKEVENTREG_67_04", - (67 << 8) | 0x08: "WEEKEVENTREG_67_08", - (67 << 8) | 0x10: "WEEKEVENTREG_67_10", - (67 << 8) | 0x20: "WEEKEVENTREG_67_20", - (67 << 8) | 0x40: "WEEKEVENTREG_67_40", - (67 << 8) | 0x80: "WEEKEVENTREG_67_80", - (68 << 8) | 0x01: "WEEKEVENTREG_68_01", - (68 << 8) | 0x02: "WEEKEVENTREG_68_02", - (68 << 8) | 0x04: "WEEKEVENTREG_68_04", - (68 << 8) | 0x08: "WEEKEVENTREG_68_08", - (68 << 8) | 0x10: "WEEKEVENTREG_68_10", - (68 << 8) | 0x20: "WEEKEVENTREG_68_20", - (68 << 8) | 0x40: "WEEKEVENTREG_68_40", - (68 << 8) | 0x80: "WEEKEVENTREG_68_80", - (69 << 8) | 0x01: "WEEKEVENTREG_69_01", - (69 << 8) | 0x02: "WEEKEVENTREG_69_02", - (69 << 8) | 0x04: "WEEKEVENTREG_69_04", - (69 << 8) | 0x08: "WEEKEVENTREG_69_08", - (69 << 8) | 0x10: "WEEKEVENTREG_69_10", - (69 << 8) | 0x20: "WEEKEVENTREG_69_20", - (69 << 8) | 0x40: "WEEKEVENTREG_69_40", - (69 << 8) | 0x80: "WEEKEVENTREG_69_80", - (70 << 8) | 0x01: "WEEKEVENTREG_70_01", - (70 << 8) | 0x02: "WEEKEVENTREG_70_02", - (70 << 8) | 0x04: "WEEKEVENTREG_70_04", - (70 << 8) | 0x08: "WEEKEVENTREG_70_08", - (70 << 8) | 0x10: "WEEKEVENTREG_70_10", - (70 << 8) | 0x20: "WEEKEVENTREG_70_20", - (70 << 8) | 0x40: "WEEKEVENTREG_70_40", - (70 << 8) | 0x80: "WEEKEVENTREG_70_80", - (71 << 8) | 0x01: "WEEKEVENTREG_71_01", - (71 << 8) | 0x02: "WEEKEVENTREG_71_02", - (71 << 8) | 0x04: "WEEKEVENTREG_71_04", - (71 << 8) | 0x08: "WEEKEVENTREG_71_08", - (71 << 8) | 0x10: "WEEKEVENTREG_71_10", - (71 << 8) | 0x20: "WEEKEVENTREG_71_20", - (71 << 8) | 0x40: "WEEKEVENTREG_71_40", - (71 << 8) | 0x80: "WEEKEVENTREG_71_80", - (72 << 8) | 0x01: "WEEKEVENTREG_72_01", - (72 << 8) | 0x02: "WEEKEVENTREG_72_02", - (72 << 8) | 0x04: "WEEKEVENTREG_72_04", - (72 << 8) | 0x08: "WEEKEVENTREG_72_08", - (72 << 8) | 0x10: "WEEKEVENTREG_72_10", - (72 << 8) | 0x20: "WEEKEVENTREG_72_20", - (72 << 8) | 0x40: "WEEKEVENTREG_72_40", + (66 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU", + (66 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI", + (66 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN", + (66 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY", + (66 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI", + (66 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA", + (66 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR", + (66 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAOME_AROMA", + (67 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO", + (67 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN", + (67 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN", + (67 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS", + (67 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND", + (67 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER", + (67 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO", + (67 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG", + (68 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS", + (68 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO", + (68 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU", + (68 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS", + (68 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY", + (68 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING", + (68 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI", + (68 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI", + (69 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI", + (69 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES", + (69 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES", + (69 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT", + (69 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM", + (69 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM", + (69 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE", + (69 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA", + (70 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK", + (70 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK", + (70 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL", + (70 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL", + (70 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE", + (70 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK", + (70 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP", + (70 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP", + (71 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP", + (71 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP", + (71 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP", + (71 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP", + (71 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK", + (71 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK", + (71 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD", + (71 << 8) | 0x80: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK", + (72 << 8) | 0x01: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK", + (72 << 8) | 0x02: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT", + (72 << 8) | 0x04: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK", + (72 << 8) | 0x08: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK", + (72 << 8) | 0x10: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK", + (72 << 8) | 0x20: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK", + (72 << 8) | 0x40: "WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK", (72 << 8) | 0x80: "WEEKEVENTREG_72_80", (73 << 8) | 0x01: "WEEKEVENTREG_73_01", (73 << 8) | 0x02: "WEEKEVENTREG_73_02", @@ -608,7 +608,7 @@ weekEventReg = { (75 << 8) | 0x02: "WEEKEVENTREG_75_02", (75 << 8) | 0x04: "WEEKEVENTREG_75_04", (75 << 8) | 0x08: "WEEKEVENTREG_75_08", - (75 << 8) | 0x10: "WEEKEVENTREG_75_10", + (75 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_ROOM_KEY", (75 << 8) | 0x20: "WEEKEVENTREG_75_20", (75 << 8) | 0x40: "WEEKEVENTREG_75_40", (75 << 8) | 0x80: "WEEKEVENTREG_75_80", @@ -648,7 +648,7 @@ weekEventReg = { (80 << 8) | 0x02: "WEEKEVENTREG_80_02", (80 << 8) | 0x04: "WEEKEVENTREG_80_04", (80 << 8) | 0x08: "WEEKEVENTREG_80_08", - (80 << 8) | 0x10: "WEEKEVENTREG_80_10", + (80 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_PRIORITY_MAIL", (80 << 8) | 0x20: "WEEKEVENTREG_80_20", (80 << 8) | 0x40: "WEEKEVENTREG_80_40", (80 << 8) | 0x80: "WEEKEVENTREG_80_80", diff --git a/undefined_syms.txt b/undefined_syms.txt index a45e5c682..e586991ff 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1100,6 +1100,29 @@ D_06000D60 = 0x06000D60; // segment 0x07 +D_07000000 = 0x07000000; +D_07000800 = 0x07000800; +D_07001000 = 0x07001000; +D_07001800 = 0x07001800; +D_07002000 = 0x07002000; +D_07002800 = 0x07002800; +D_07003000 = 0x07003000; +D_07003800 = 0x07003800; +D_07004000 = 0x07004000; +D_07004800 = 0x07004800; +D_07005000 = 0x07005000; +D_07005800 = 0x07005800; +D_07006000 = 0x07006000; +D_07006800 = 0x07006800; +D_07007000 = 0x07007000; +D_07007800 = 0x07007800; +D_07008000 = 0x07008000; +D_07008800 = 0x07008800; +D_07009000 = 0x07009000; +D_07009800 = 0x07009800; +D_0700AC00 = 0x0700AC00; +D_0700AEA0 = 0x0700AEA0; + // segment 0x08 From f05d1723d6c0ee94fb4342958395f67ef751bdfe Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Fri, 9 Jun 2023 04:46:13 +1000 Subject: [PATCH 33/36] Persistent Cycle Weekeventregs (#1267) * persistent weekeventregs * move macro * PR Suggestions * 2 to ALT * PR Suggestions --- include/macros.h | 11 ++ include/z64cutscene.h | 11 -- include/z64save.h | 2 +- src/code/z_sram_NES.c | 251 ++++++++++++++++++++++++++----------- tools/disasm/variables.txt | 4 +- 5 files changed, 195 insertions(+), 84 deletions(-) diff --git a/include/macros.h b/include/macros.h index d2b98dec5..6b54474b6 100644 --- a/include/macros.h +++ b/include/macros.h @@ -68,6 +68,17 @@ #define ALIGN64(val) (((val) + 0x3F) & ~0x3F) #define ALIGN256(val) (((val) + 0xFF) & ~0xFF) +#define BIT_FLAG_TO_SHIFT(flag) \ + ((flag & 0x80) ? 7 : \ + (flag & 0x40) ? 6 : \ + (flag & 0x20) ? 5 : \ + (flag & 0x10) ? 4 : \ + (flag & 0x8) ? 3 : \ + (flag & 0x4) ? 2 : \ + (flag & 0x2) ? 1 : \ + (flag & 0x1) ? 0 : \ + 0) + /** * `x` vertex x * `y` vertex y diff --git a/include/z64cutscene.h b/include/z64cutscene.h index 1fc32be28..742398a31 100644 --- a/include/z64cutscene.h +++ b/include/z64cutscene.h @@ -580,17 +580,6 @@ typedef union CutsceneData { s8 b[4]; } CutsceneData; -#define BIT_FLAG_TO_SHIFT(flag) \ - ((flag & 0x80) ? 7 : \ - (flag & 0x40) ? 6 : \ - (flag & 0x20) ? 5 : \ - (flag & 0x10) ? 4 : \ - (flag & 0x8) ? 3 : \ - (flag & 0x4) ? 2 : \ - (flag & 0x2) ? 1 : \ - (flag & 0x1) ? 0 : \ - 0) - // Do not trigger the scripted cutscene upon any spawn #define CS_SPAWN_FLAG_NONE 0xFF // Always trigger the scripted cutscene upon the specified spawn diff --git a/include/z64save.h b/include/z64save.h index 312b18b2e..69b9e7ad8 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -970,7 +970,7 @@ typedef enum { #define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40) #define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80) -// ProtectedCremia +// Protected Cremia #define WEEKEVENTREG_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(52, 0x01) // Lose Milk Run minigame #define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02) diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 21bfaf7ef..fa690758c 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -11,12 +11,12 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2); ((newf)[0] != 'Z' || (newf)[1] != 'E' || (newf)[2] != 'L' || (newf)[3] != 'D' || (newf)[4] != 'A' || \ (newf)[5] != '3') -typedef struct PersistentCycleFlags { +typedef struct PersistentCycleSceneFlags { /* 0x0 */ u32 switch0; /* 0x4 */ u32 switch1; /* 0x8 */ u32 chest; /* 0xC */ u32 collectible; -} PersistentCycleFlags; // size = 0x10 +} PersistentCycleSceneFlags; // size = 0x10 #define PERSISTENT_CYCLE_FLAGS_SET(switch0, switch1, chest, collectible) { switch0, switch1, chest, collectible }, #define PERSISTENT_CYCLE_FLAGS_NONE PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 0) @@ -28,58 +28,105 @@ typedef struct PersistentCycleFlags { /** * Array of bitwise flags which won't be turned off on a cycle reset (will persist between cycles) */ -PersistentCycleFlags sPersistentCycleFlags[SCENE_MAX] = { +PersistentCycleSceneFlags sPersistentCycleSceneFlags[SCENE_MAX] = { #include "tables/scene_table.h" }; #undef DEFINE_SCENE #undef DEFINE_SCENE_UNSET -// TODO: figure out a way to use the WEEKEVENTREG defines here +// Each flag has 2 bits to store persistence over the three-day reset cycle +// Only 1 of these bits need to be set to persist (Values 1, 2, 3). +// Therefore, the final game does not distinguish between these two macros in use +#define PERSISTENT_WEEKEVENTREG(flag) (3 << (2 * BIT_FLAG_TO_SHIFT(flag))) +#define PERSISTENT_WEEKEVENTREG_ALT(flag) (2 << (2 * BIT_FLAG_TO_SHIFT(flag))) + // weekEventReg flags which will be not be cleared on a cycle reset -u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { - /* 0 */ 0xFFFC, - /* 1 */ 0xFFFF, - /* 2 */ 0xFFFF, - /* 3 */ 0xFFFF, +//! @note The index of the flag in this array must be the same to its index in the WeekeventReg array +//! Only the mask is read from the `PERSISTENT_` macros. +u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { + /* 0 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_TERMINA_FIELD) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ROMANI_RANCH) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GORMAN_TRACK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GORON_SHRINE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SNOWHEAD), + /* 1 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_DEKU_PALACE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GREAT_BAY_COAST) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_PIRATES_FORTRESS) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_CANYON), + /* 2 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_CASTLE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE), + /* 3 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_THE_MOON) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_03_80), /* 4 */ 0, /* 5 */ 0, /* 6 */ 0, - /* 7 */ 0xC000, - /* 8 */ 0xC00, + /* 7 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON), + /* 8 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE), /* 9 */ 0, - /* 10 */ 0xC0, + /* 10 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_10_08), /* 11 */ 0, - /* 12 */ 0x300, - /* 13 */ 0x3000, - /* 14 */ 0xC000, - /* 15 */ 0xC00, + /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_12_10), + /* 13 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE), + /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_14_80), + /* 15 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_15_20), /* 16 */ 0, /* 17 */ 0, /* 18 */ 0, /* 19 */ 0, /* 20 */ 0, /* 21 */ 0, - /* 22 */ 0xC00C, - /* 23 */ 0xC00C, - /* 24 */ 0xC008, - /* 25 */ 3, - /* 26 */ 0x3000, + /* 22 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_80), + /* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80), + /* 24 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_24_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_24_80), + /* 25 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_25_01), + /* 26 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_26_40), /* 27 */ 0, /* 28 */ 0, /* 29 */ 0, - /* 30 */ 0xFF00, - /* 31 */ 0xC3F, - /* 32 */ 0x3F, + /* 30 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_20) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_40) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_80), + /* 31 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_02) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_20), + /* 32 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_02) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_04), /* 33 */ 0, /* 34 */ 0, - /* 35 */ 0xCFFF, + /* 35 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_02) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_08) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_20) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_80), /* 36 */ 0, /* 37 */ 0, - /* 38 */ 0xC00, - /* 39 */ 0xC00, + /* 38 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_38_20), + /* 39 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_39_20), /* 40 */ 0, - /* 41 */ 0xC0, + /* 41 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_41_08), /* 42 */ 0, /* 43 */ 0, /* 44 */ 0, @@ -88,50 +135,111 @@ u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { /* 47 */ 0, /* 48 */ 0, /* 49 */ 0, - /* 50 */ 0x3C, - /* 51 */ 0x20, + /* 50 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_50_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_50_04), + /* 51 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_51_04), /* 52 */ 0, - /* 53 */ 0x300C, - /* 54 */ 0x3000, + /* 53 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_53_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_53_40), + /* 54 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_54_40), /* 55 */ 0, - /* 56 */ 0xC, - /* 57 */ 0xC0, + /* 56 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_56_02), + /* 57 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_57_08), /* 58 */ 0, - /* 59 */ 0xFF0, - /* 60 */ 0x300, + /* 59 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_08) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_20), + /* 60 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_60_10), /* 61 */ 0, /* 62 */ 0, - /* 63 */ 0xC00, + /* 63 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_63_20), /* 64 */ 0, /* 65 */ 0, - /* 66 */ 0xFFFF, - /* 67 */ 0xFFFF, - /* 68 */ 0xFFFF, - /* 69 */ 0xFFFF, - /* 70 */ 0xFFFF, - /* 71 */ 0xFFFF, - /* 72 */ 0xFFFF, - /* 73 */ 0xC0, + /* 66 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA), + /* 67 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG), + /* 68 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI), + /* 69 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA), + /* 70 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP), + /* 71 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK), + /* 72 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_72_80), + /* 73 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_73_08), /* 74 */ 0, - /* 75 */ 0xC000, + /* 75 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_75_80), /* 76 */ 0, - /* 77 */ 3, + /* 77 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_77_01), /* 78 */ 0, - /* 79 */ 0xC000, + /* 79 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_79_80), /* 80 */ 0, - /* 81 */ 0xC0, - /* 82 */ 0x300, + /* 81 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_81_08), + /* 82 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_82_10), /* 83 */ 0, /* 84 */ 0, /* 85 */ 0, - /* 86 */ 0xC000, - /* 87 */ 0xFFF0, + /* 86 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_86_80), + /* 87 */ + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_08) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_20) | + PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_40) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_80), /* 88 */ 0, /* 89 */ 0, - /* 90 */ 0x300, + /* 90 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_90_10), /* 91 */ 0, - /* 92 */ 0xC000, - /* 93 */ 0xF0, + /* 92 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_92_80), + /* 93 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_93_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_93_08), /* 94 */ 0, /* 95 */ 0, /* 96 */ 0, @@ -266,7 +374,10 @@ s32 gFlashSaveSizes[] = { offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save Backup }; -u8 D_801C6890[8] = { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 }; +// Bit Flag array in which sBitFlags8[n] is (1 << n) +u8 sBitFlags8[] = { + (1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6), (1 << 7), +}; u16 D_801F6AF0; u8 D_801F6AF2; @@ -326,21 +437,21 @@ void Sram_SaveEndOfCycle(PlayState* play) { sceneId = Play_GetOriginalSceneId(play->sceneId); Play_SaveCycleSceneFlags(&play->state); - play->actorCtx.sceneFlags.chest &= sPersistentCycleFlags[sceneId].chest; - play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleFlags[sceneId].switch0; - play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleFlags[sceneId].switch1; - play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleFlags[sceneId].collectible; + play->actorCtx.sceneFlags.chest &= sPersistentCycleSceneFlags[sceneId].chest; + play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleSceneFlags[sceneId].switch0; + play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleSceneFlags[sceneId].switch1; + play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleSceneFlags[sceneId].collectible; play->actorCtx.sceneFlags.clearedRoom = 0; for (i = 0; i < SCENE_MAX; i++) { gSaveContext.cycleSceneFlags[i].switch0 = - ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleFlags[i].switch0; + ((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleSceneFlags[i].switch0; gSaveContext.cycleSceneFlags[i].switch1 = - ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleFlags[i].switch1; + ((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleSceneFlags[i].switch1; gSaveContext.cycleSceneFlags[i].chest = - ((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleFlags[i].chest; + ((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleSceneFlags[i].chest; gSaveContext.cycleSceneFlags[i].collectible = - ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleFlags[i].collectible; + ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleSceneFlags[i].collectible; gSaveContext.cycleSceneFlags[i].clearedRoom = 0; gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0; gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0; @@ -362,15 +473,15 @@ void Sram_SaveEndOfCycle(PlayState* play) { Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY)); } - for (i = 0; i < ARRAY_COUNT(D_801C66D0); i++) { - u16 phi_v1_3 = D_801C66D0[i]; + for (i = 0; i < ARRAY_COUNT(sPersistentCycleWeekEventRegs); i++) { + u16 isPersistentBits = sPersistentCycleWeekEventRegs[i]; - for (j = 0; j < ARRAY_COUNT(D_801C6890); j++) { - if ((phi_v1_3 & 3) == 0) { + for (j = 0; j < ARRAY_COUNT(sBitFlags8); j++) { + if (!(isPersistentBits & 3)) { gSaveContext.save.saveInfo.weekEventReg[i] = - ((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ D_801C6890[j]); + ((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ sBitFlags8[j]); } - phi_v1_3 >>= 2; + isPersistentBits >>= 2; } } diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 749ee5878..e4c0138f3 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1925,8 +1925,8 @@ 0x801C5EB0:("D_801C5EB0","UNK_TYPE4","",0x4), 0x801C5EC4:("D_801C5EC4","UNK_TYPE2","",0x2), 0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4), - 0x801C5FC0:("sPersistentCycleFlags","u32","[452]",0x710), - 0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2), + 0x801C5FC0:("sPersistentCycleSceneFlags","u32","[452]",0x710), + 0x801C66D0:("sPersistentCycleWeekEventRegs","UNK_TYPE2","",0x2), 0x801C6798:("gSramSlotOffsets","UNK_TYPE4","",0x4), 0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1), 0x801C67C8:("gFlashSaveStartPages","s32","[10]",0x28), From e19b1395043baede06bdab4faa2d3df3e93afa79 Mon Sep 17 00:00:00 2001 From: SeDan01 <135468170+SeDan01@users.noreply.github.com> Date: Fri, 9 Jun 2023 20:31:39 -0400 Subject: [PATCH 34/36] Tree Asset Decomp for object_tree (#1278) * Basic Tree Asset Decomp * renamed outnames --------- Co-authored-by: Yoe --- assets/xml/objects/object_tree.xml | 10 +++++----- src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/xml/objects/object_tree.xml b/assets/xml/objects/object_tree.xml index 9d5fb66dd..89e3984c5 100644 --- a/assets/xml/objects/object_tree.xml +++ b/assets/xml/objects/object_tree.xml @@ -1,9 +1,9 @@  - - - - - + + + + + diff --git a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c index 4c30a763e..3fff091b6 100644 --- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c +++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c @@ -100,7 +100,7 @@ void ObjTree_Init(Actor* thisx, PlayState* play) { } else { Actor_SetScale(&this->dyna.actor, 0.1f); DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); - CollisionHeader_GetVirtual(&object_tree_Colheader_001B2C, &colHeader); + CollisionHeader_GetVirtual(&gTreeTopCol, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); } @@ -187,11 +187,11 @@ void ObjTree_Draw(Actor* thisx, PlayState* play) { Gfx_SetupDL25_Opa(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++, object_tree_DL_000680); + gSPDisplayList(POLY_OPA_DISP++, gTreeBodyDL); Matrix_RotateZYX(xRot, 0, zRot, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_tree_DL_0007C8); + gSPDisplayList(POLY_OPA_DISP++, gTreeLeavesDL); CLOSE_DISPS(play->state.gfxCtx); } From 8672dc0a57a7406cf6fd7b18dd8101563c9f63a8 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 10 Jun 2023 23:37:43 +1000 Subject: [PATCH 35/36] Misc Cleanup 4 (#1271) * begin next cleanup * more cleanup * climbAnim * more cleanup * more * quick, a few more before anyone looks * PR * another fix * table * another small cleanup * PR Suggestion --- src/audio/lib/heap.c | 10 +- src/code/z_camera.c | 7 +- src/code/z_fireobj.c | 3 +- src/code/z_play.c | 33 +++-- src/code/z_sub_s.c | 2 +- src/libultra/io/contpfs.c | 2 - .../actors/ovl_Dm_Char03/z_dm_char03.c | 4 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 2 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 2 +- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 8 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 2 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 14 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 84 +---------- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 2 +- src/overlays/actors/ovl_En_Hgo/z_en_hgo.c | 3 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 2 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 4 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 2 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 6 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 4 - .../actors/ovl_En_S_Goro/z_en_s_goro.c | 2 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 2 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 7 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 2 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 4 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 48 +++--- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 139 +++++++++--------- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 3 +- .../ovl_Obj_Jgame_Light/z_obj_jgame_light.c | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 2 +- .../actors/ovl_player_actor/z_player.c | 109 +++++++------- 32 files changed, 218 insertions(+), 300 deletions(-) diff --git a/src/audio/lib/heap.c b/src/audio/lib/heap.c index 52533da4d..7a7cd5807 100644 --- a/src/audio/lib/heap.c +++ b/src/audio/lib/heap.c @@ -1305,11 +1305,11 @@ void AudioHeap_DiscardSampleCacheEntry(SampleCacheEntry* entry) { if (((sampleBankId1 != 0xFF) && (entry->sampleBankId == sampleBankId1)) || ((sampleBankId2 != 0xFF) && (entry->sampleBankId == sampleBankId2)) || (entry->sampleBankId == 0) || (entry->sampleBankId == 0xFE)) { - if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) != NULL) { - if (1) {} - if (AudioLoad_IsFontLoadComplete(fontId) != 0) { - AudioHeap_UnapplySampleCacheForFont(entry, fontId); - } + if (AudioHeap_SearchCaches(FONT_TABLE, CACHE_EITHER, fontId) == NULL) { + continue; + } + if (AudioLoad_IsFontLoadComplete(fontId) != 0) { + AudioHeap_UnapplySampleCacheForFont(entry, fontId); } } } diff --git a/src/code/z_camera.c b/src/code/z_camera.c index ce09f7c4d..acb4af20a 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -1844,8 +1844,6 @@ void Camera_CalcDefaultSwing(Camera* camera, VecGeo* arg1, VecGeo* arg2, f32 arg if (swing->unk_64 == 1) { if (arg3 < (sp88 = OLib_Vec3fDist(at, &swing->collisionClosePoint))) { - //! FAKE: - dummy:; swing->unk_64 = 0; } else if ((sp88 = Math3D_SignedDistanceFromPlane(swing->eyeAtColChk.norm.x, swing->eyeAtColChk.norm.y, swing->eyeAtColChk.norm.z, swing->eyeAtColChk.poly->dist, @@ -6325,8 +6323,9 @@ s32 Camera_Demo4(Camera* camera) { sCameraInterfaceFlags = roData->interfaceFlags; switch (camera->animState) { - //! FAKE: - if (1) {} + default: + break; + case 0: camera->animState++; rwData->timer = 0; diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c index 5565bc876..98d14874b 100644 --- a/src/code/z_fireobj.c +++ b/src/code/z_fireobj.c @@ -67,8 +67,7 @@ void FireObj_StepSize(FireObj* fire) { if (Math_StepToF(&fire->dynamicSize, 1.0f, fire->dynamicSizeStep)) { FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_FULLY_LIT); } - } else if ((fire->state == FIRE_STATE_SHRINKING) && - (Math_StepToF(&fire->dynamicSize, 0.0f, fire->dynamicSizeStep))) { + } else if ((fire->state == FIRE_STATE_SHRINKING) && Math_StepToF(&fire->dynamicSize, 0.0f, fire->dynamicSizeStep)) { FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_NOT_LIT); } if (fire->sizeGrowsCos2 == 1) { diff --git a/src/code/z_play.c b/src/code/z_play.c index 6ef734aee..9063c9151 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1117,7 +1117,7 @@ void Play_PostWorldDraw(PlayState* this) { } #ifdef NON_MATCHING -// Stack issues and 1 small issue around Play_PostWorldDraw +// Something weird going on with the stack of the unused arg0 of `Camera_Update` void Play_DrawMain(PlayState* this) { GraphicsContext* gfxCtx = this->state.gfxCtx; Lights* sp268; @@ -1270,7 +1270,7 @@ void Play_DrawMain(PlayState* this) { if (!this->unk_18844) { if (1) { - if ((this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) { + if (((u32)this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) { if ((this->skyboxId == SKYBOX_NORMAL_SKY) || (this->skyboxId == SKYBOX_3)) { Environment_UpdateSkybox(this->skyboxId, &this->envCtx, &this->skyboxCtx); Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, this->envCtx.skyboxBlend, @@ -1306,10 +1306,11 @@ void Play_DrawMain(PlayState* this) { if (this->skyboxCtx.skyboxShouldDraw) { Vec3f sp78; - if (1) {} - Camera_GetQuakeOffset(&sp78, GET_ACTIVE_CAM(this)); - Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x + sp78.x, - this->view.eye.y + sp78.y, this->view.eye.z + sp78.z); + if (1) { + Camera_GetQuakeOffset(&sp78, GET_ACTIVE_CAM(this)); + Skybox_Draw(&this->skyboxCtx, gfxCtx, this->skyboxId, 0, this->view.eye.x + sp78.x, + this->view.eye.y + sp78.y, this->view.eye.z + sp78.z); + } } // envCtx.precipitation[PRECIP_RAIN_CUR] @@ -1370,9 +1371,8 @@ void Play_DrawMain(PlayState* this) { Play_DrawMotionBlur(this); - if (((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) || - (gTransitionTileState == TRANS_TILE_SETUP)) || - (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP)) { + if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) || + (gTransitionTileState == TRANS_TILE_SETUP) || (R_PICTO_PHOTO_STATE == PICTO_PHOTO_STATE_SETUP)) { Gfx* sp74; Gfx* sp70 = POLY_OPA_DISP; @@ -1405,15 +1405,18 @@ void Play_DrawMain(PlayState* this) { POLY_OPA_DISP = sp74; this->unk_18B49 = 2; SREG(33) |= 1; - } else { - PostWorldDraw: - if (1) { - Play_PostWorldDraw(this); - } + goto SkipPostWorldDraw; + } + + PostWorldDraw: + if (1) { + Play_PostWorldDraw(this); } } } +SkipPostWorldDraw: + if ((this->view.unk164 != 0) && !gDbgCamEnabled) { Vec3s sp4C; @@ -1429,7 +1432,7 @@ void Play_DrawMain(PlayState* this) { func_800FE3E0(this); } - CLOSE_DISPS(this->state.gfxCtx); + CLOSE_DISPS(gfxCtx); } #else void Play_DrawMain(PlayState* this); diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 90d09a4b1..1c3f1ae3a 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -188,7 +188,7 @@ s32 SubS_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 stepRo Matrix_MultVec3f(&zeroVec, &newPos); Matrix_Get(&curState); - Matrix_MtxFToYXZRot(&curState, &newRot, MTXMODE_NEW); + Matrix_MtxFToYXZRot(&curState, &newRot, false); *pos = newPos; if (!stepRot && !overrideRot) { diff --git a/src/libultra/io/contpfs.c b/src/libultra/io/contpfs.c index e9431a741..e6817c3d0 100644 --- a/src/libultra/io/contpfs.c +++ b/src/libultra/io/contpfs.c @@ -266,8 +266,6 @@ s32 __osGetId(OSPfs* pfs) { bcopy(id, pfs->id, BLOCKSIZE); - if (0) {} - pfs->version = id->version; pfs->banks = id->banks; diff --git a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c index e348d145a..cb71b8515 100644 --- a/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c +++ b/src/overlays/actors/ovl_Dm_Char03/z_dm_char03.c @@ -131,8 +131,8 @@ void func_80AAB710(DmChar03* this, PlayState* play) { void func_80AAB838(DmChar03* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 5.0f)) { Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_0); - } else if ((Animation_OnFrame(&this->skelAnime, 10.0f)) || (Animation_OnFrame(&this->skelAnime, 18.0f)) || - (Animation_OnFrame(&this->skelAnime, 30.0f)) || (Animation_OnFrame(&this->skelAnime, 38.0f))) { + } else if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 18.0f) || + Animation_OnFrame(&this->skelAnime, 30.0f) || Animation_OnFrame(&this->skelAnime, 38.0f)) { Actor_PlaySfx(&this->actor, NA_SE_IT_MASK_BOUND_1); } } diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c index 7d1f1e140..30775584b 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -271,7 +271,7 @@ void func_808B0208(EnAm* this, PlayState* play) { this->actor.world.pos.z += this->actor.speed * Math_CosS(this->actor.world.rot.y); } SkelAnime_Update(&this->skelAnime); - if (Animation_OnFrame(&this->skelAnime, 8.0f) != 0) { + if (Animation_OnFrame(&this->skelAnime, 8.0f)) { this->actor.speed = this->speed; this->actor.velocity.y = 12.0f; } else if (this->skelAnime.curFrame > 11.0f) { diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index e47a726a4..75f95cfe6 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -667,7 +667,7 @@ void EnArrow_Draw(Actor* thisx, PlayState* play) { Matrix_Translate(0.0f, 0.0f, 460.0f, MTXMODE_APPLY); if (this->actor.speed == 0.0f) { - func_800B8118(&this->actor, play, MTXMODE_NEW); + func_800B8118(&this->actor, play, 0); gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_06F380); gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c index c1d13be5a..63fb13292 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -256,7 +256,7 @@ void EnBb_FlyIdle(EnBb* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 5.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING); - } else if ((Animation_OnFrame(&this->skelAnime, 0.0f)) && (Rand_ZeroOne() < 0.1f)) { + } else if (Animation_OnFrame(&this->skelAnime, 0.0f) && (Rand_ZeroOne() < 0.1f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_LAUGH); } @@ -287,11 +287,11 @@ void EnBb_Attack(EnBb* this, PlayState* play) { this->targetYRotation = this->actor.yawTowardsPlayer; EnBb_UpdateStateForFlying(this); - if ((Animation_OnFrame(&this->skelAnime, 0.0f)) || (Animation_OnFrame(&this->skelAnime, 5.0f))) { + if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 5.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_MOUTH); - } else if ((Animation_OnFrame(&this->skelAnime, 2.0f)) || (Animation_OnFrame(&this->skelAnime, 7.0f))) { + } else if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 7.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_WING); - } else if ((Animation_OnFrame(&this->skelAnime, 0.0f)) && (Rand_ZeroOne() < 0.1f)) { + } else if (Animation_OnFrame(&this->skelAnime, 0.0f) && (Rand_ZeroOne() < 0.1f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_BUBLE_LAUGH); } diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index 4c88b84cb..35e6d8437 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -529,7 +529,7 @@ void EnCrow_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, height); - if ((this->actor.colChkInfo.health != 0) && (Animation_OnFrame(&this->skelAnime, 3.0f))) { + if ((this->actor.colChkInfo.health != 0) && Animation_OnFrame(&this->skelAnime, 3.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_FLUTTER); } if (this->drawDmgEffAlpha > 0.0f) { diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index 904a18e62..e80bbe019 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -943,12 +943,16 @@ void func_80A73408(EnDno* this, PlayState* play) { Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); } - if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && - (this->animIndex == EN_DNO_ANIM_SHOCK_START)) { - //! FAKE: - if (1) {} + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { + switch (this->animIndex) { + case EN_DNO_ANIM_SHOCK_START: + SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP, + &this->animIndex); + break; - SubS_ChangeAnimationBySpeedInfo(&this->skelAnime, sAnimations, EN_DNO_ANIM_SHOCK_LOOP, &this->animIndex); + default: + break; + } } } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 216d5c301..ec5905594 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -110,77 +110,6 @@ typedef enum EnGoAnimationIndex { /* 21 */ ENGO_ANIM_LOOK_AROUND_LOOPED } EnGoAnimationIndex; -EnGoEffect* EnGo_InitSteam(EnGoEffect effect[], Vec3f pos, Vec3f accel, Vec3f velocity, f32 scale, f32 deltaScale, - s32 maxFrames); -void EnGo_DrawSteam(EnGoEffect effect[], PlayState* play2); - -void EnGo_InitDust(EnGoEffect effect[], Vec3f pos, Vec3f accel, Vec3f vel, f32 scale, f32 deltaScale, s32 maxFrames, - EnGoEffectType parentEffectType); -void EnGo_DrawDust(EnGoEffect effect[], PlayState* play2); - -void EnGo_InitSnow(EnGoEffect effect[], Vec3f pos); -void EnGo_UpdateSnow(EnGoEffect* effect, f32 dustConversionHeight); -void EnGo_DrawSnow(EnGoEffect effect[], PlayState* play, Gfx* material, Gfx* model, u8 effectType); - -void EnGo_UpdateEffects(EnGo* this); -void EnGo_DrawEffects(EnGo* this, PlayState* play); - -s32 EnGo_CanSnowballHurtPlayer(PlayState* play); -s32 EnGo_IsFallingAsleep(EnGo* this, PlayState* play); - -s32 EnGo_UpdateFocus(EnGo* this); - -void EnGo_UpdateSnowballCollider(EnGo* this, PlayState* play); -void EnGo_UpdateMedigoronCollider(EnGo* this, PlayState* play); -void EnGo_UpdateRolledUpCollider(EnGo* this, PlayState* play); -void EnGo_UpdateFrozenCollider(EnGo* this, PlayState* play); -void EnGo_UpdateStandingCollider(EnGo* this, PlayState* play); -void EnGo_UpdateCollider(EnGo* this, PlayState* play); - -s32 EnGo_UpdateTalking(EnGo* this, PlayState* play); -s32 EnGo_DetectCollisions(EnGo* this, PlayState* play); -s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play); -s32 EnGo_UpdateAnimationToCurrent(EnGo* this, PlayState* play); -s32 EnGo_UpdateSfx(EnGo* this, PlayState* play); -s32 EnGo_ChangeAnim(EnGo* this, PlayState* play, EnGoAnimationIndex animIndex); -void EnGo_UpdateEyes(EnGo* this); - -void EnGo_UpdateShiverSurprisedAnimation(EnGo* this, PlayState* play); -s32 EnGo_UpdateGraveyardAttentionTargetAndReactions(EnGo* this, PlayState* play); -s32 EnGo_UpdateRotationToTarget(EnGo* this, PlayState* play); -s32 EnGo_UpdateAttentionTargetAndReactions(EnGo* this, PlayState* play); - -void EnGo_GravemakerIdle(EnGo* this, PlayState* play); -void EnGo_FrozenIdle(EnGo* this, PlayState* play); -Actor* EnGo_FindGravemaker(EnGo* this, PlayState* play); - -void EnGo_UpdateMedigoronColliderRadius(EnGo* this, PlayState* play, s32 isGivenPowderKeg); -s32 EnGo_ChangeCutscene(EnGo* this, s16 csId); - -s32 EnGo_HandleGatekeeperPoundCutscene(EnGo* this, f32 initialVelocity, f32 maxDistortion, s32 maxHangtime); -void EnGo_AddGatekeeperPoundQuake(PlayState* play, s16 speed, s16 verticalMag, s16 countdown); -void EnGo_CreateGatekeeperPoundEffects(EnGo* this, PlayState* play); -void EnGo_DrawIceBlockWhenFrozen(EnGo* this, PlayState* play, f32 scale, f32 alpha); -void EnGo_MakeSteam(EnGo* this); - -s32 EnGo_HandleOpenShrineCutscene(Actor* thisx, PlayState* play); -s32 EnGo_HandleGivePowderKegCutscene(Actor* thisx, PlayState* play); - -void EnGo_ChangeToStretchingAnimation(EnGo* this, PlayState* play); -void EnGo_ChangeToSpectatingAnimation(EnGo* this, PlayState* play); -void EnGo_ChangeToFrozenAnimation(EnGo* this, PlayState* play); -void EnGo_ChangeToSnowballAnimation(EnGo* this, PlayState* play); -void EnGo_ChangeToCoveringEarsAnimation(EnGo* this, PlayState* play); -void EnGo_ChangeToShiveringAnimation(EnGo* this, PlayState* play); - -void EnGo_SetupAthletic(EnGo* this, PlayState* play); -void EnGo_SetupSpectator(EnGo* this, PlayState* play); -void EnGo_SetupGatekeeper(EnGo* this, PlayState* play); -void EnGo_SetupGraveyardGoron(EnGo* this, PlayState* play); -void EnGo_SetupShrineGoron(EnGo* this, PlayState* play); -void EnGo_SetupMedigoron(EnGo* this, PlayState* play); -void EnGo_SetupInitialAction(EnGo* this, PlayState* play); - void EnGo_Idle(EnGo* this, PlayState* play); void EnGo_Sleep(EnGo* this, PlayState* play); void EnGo_Frozen(EnGo* this, PlayState* play); @@ -191,8 +120,6 @@ void EnGo_HandleSpringArrivalCutscene(EnGo* this, PlayState* play); void EnGo_Snowball(EnGo* this, PlayState* play); -s32* EnGo_GetMsgEventScript(EnGo* this, PlayState* play); - void EnGo_Talk(EnGo* this, PlayState* play); // MsgEvent script for the Goron who made Darmani's grave in the mountain village. @@ -461,6 +388,7 @@ void EnGo_DrawSteam(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { f32 alpha; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { if (effect->type != ENGO_EFFECT_STEAM) { @@ -554,6 +482,7 @@ void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { f32 alpha; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Xlu(play->state.gfxCtx); for (i = 0; i < ENGO_EFFECT_COUNT; i++, effect++) { if ((effect->type < ENGO_EFFECT_DUST_MIN) || (effect->type >= ENGO_EFFECT_STEAM_MIN)) { @@ -599,14 +528,13 @@ void EnGo_DrawDust(EnGoEffect effect[ENGO_EFFECT_COUNT], PlayState* play2) { * @param effect The EnGoEffect table * @param pos Position around which the effects appear */ -void EnGo_InitSnow(EnGoEffect effect[ENGO_EFFECT_COUNT], Vec3f pos) { - static u8 effectIndexToSnowEffectTable[] = { +void EnGo_InitSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], Vec3f pos) { + static u8 effectIndexToSnowEffectTable[ENGO_SNOW_EFFECT_COUNT] = { ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, ENGO_EFFECT_SNOW3, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW1, ENGO_EFFECT_SNOW2, }; - EnGoEffect* dustEffects = &effect[ENGO_SNOW_EFFECT_COUNT]; s32 i; Vec3f randRelativeToWorldPos; @@ -722,7 +650,9 @@ void EnGo_DrawSnow(EnGoEffect effect[ENGO_SNOW_EFFECT_COUNT], PlayState* play, G u8 isMaterialSet = false; OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + for (i = 0; i < ENGO_SNOW_EFFECT_COUNT; i++, effect++) { if (effect->type != effectType) { continue; @@ -1021,7 +951,7 @@ s32 EnGo_UpdateSpringArrivalCutscene(EnGo* this, PlayState* play) { if ((ENGO_GET_TYPE(&this->actor) == ENGO_GRAVEYARD) && (play->csCtx.state != CS_STATE_IDLE) && (this->actor.draw != NULL) && (play->sceneId == SCENE_10YUKIYAMANOMURA2) && (gSaveContext.sceneLayer == 1) && (play->csCtx.scriptIndex == 0)) { - if (this->springArrivalCutsceneActive == false) { + if (!this->springArrivalCutsceneActive) { this->actor.flags &= ~ACTOR_FLAG_1; this->springArrivalCueId = 255; this->springArrivalCutsceneActive = true; diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index ea93d617f..e9ba72003 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -328,7 +328,7 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) { } } if ((this->animIndex == WALK_ANIM) && - ((Animation_OnFrame(&this->skelAnime, 1.0f)) || (Animation_OnFrame(&this->skelAnime, 5.0f)))) { + (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_WALK); } diff --git a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c index f6c90f6b4..02c6d252c 100644 --- a/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c +++ b/src/overlays/actors/ovl_En_Hgo/z_en_hgo.c @@ -317,8 +317,7 @@ s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) { } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { switch (this->animIndex) { case HGO_ANIM_ASTONISHED: - if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && - (this->isInCutscene == false)) { + if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && !this->isInCutscene) { this->isInCutscene = true; if ((gSaveContext.sceneLayer == 0) && ((play->csCtx.scriptIndex == 2) || (play->csCtx.scriptIndex == 4))) { diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index a116c323a..02e5004f2 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -537,7 +537,7 @@ void EnIk_HorizontalDoubleAttack(EnIk* this, PlayState* play) { f32 phi_f2; this->timer++; - if ((Animation_OnFrame(&this->skelAnime, 1.0f)) || (Animation_OnFrame(&this->skelAnime, 13.0f))) { + if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_IRONNACK_SWING_AXE); } if (((this->skelAnime.curFrame > 1.0f) && (this->skelAnime.curFrame < 9.0f)) || diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index 2f8914edc..ab77eb2a3 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -305,8 +305,8 @@ void EnNwc_Follow(EnNwc* this, PlayState* play) { } } - if (this->grog->actor.home.rot.z >= 20 && // all 10 chicks have been found - (this->hasGrownUp & 1) == false) { + if ((this->grog->actor.home.rot.z >= 20) && // all 10 chicks have been found + !(this->hasGrownUp & 1)) { this->transformTimer += 2; if (this->transformTimer >= (s32)(s16)((this->actor.home.rot.z * 0x1E) + 0x1E)) { // it is our turn to transform diff --git a/src/overlays/actors/ovl_En_Osk/z_en_osk.c b/src/overlays/actors/ovl_En_Osk/z_en_osk.c index c1ce34949..9d42424d9 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -423,7 +423,7 @@ void func_80BF68E0(EnOsk* this) { break; case 5: - if ((Animation_OnFrame(&this->skelAnime, 6.0f)) || Animation_OnFrame(&this->skelAnime, 11.0f)) { + if (Animation_OnFrame(&this->skelAnime, 6.0f) || Animation_OnFrame(&this->skelAnime, 11.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EN_DEBU_HEAD_UP); } break; diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index 0631922be..f209caa1c 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -869,9 +869,9 @@ void EnOsn_HandleCsAction(EnOsn* this, PlayState* play) { } if ((this->animIndex == OSN_ANIM_WALK_AWAY) && - (((Animation_OnFrame(&this->skelAnime, 17.0f))) || (Animation_OnFrame(&this->skelAnime, 27.0f)) || - (Animation_OnFrame(&this->skelAnime, 37.0f)) || (Animation_OnFrame(&this->skelAnime, 47.0f)) || - (Animation_OnFrame(&this->skelAnime, 57.0f)) || (Animation_OnFrame(&this->skelAnime, 67.0f)))) { + (Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 27.0f) || + Animation_OnFrame(&this->skelAnime, 37.0f) || Animation_OnFrame(&this->skelAnime, 47.0f) || + Animation_OnFrame(&this->skelAnime, 57.0f) || Animation_OnFrame(&this->skelAnime, 67.0f))) { Actor_PlaySfx(&this->actor, NA_SE_EV_OMENYA_WALK); } Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel); diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index 48c8cd5ab..2e0aaf0a2 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -296,10 +296,6 @@ void EnPp_Init(Actor* thisx, PlayState* play) { this->bodyCollider.elements[0].dim.modelSphere.center.y = -400; this->bodyColliderElements[0].info.bumperFlags |= BUMP_HOOKABLE; this->maskCollider.elements[0].info.toucher.damage = 0x10; - //! FAKE: Needed to fix some regs - //! https://decomp.me/scratch/6Yd1B - if (this->actor.world.rot.z) {} - if (this->actor.world.rot.z) {} } Collider_InitQuad(play, &this->hornCollider); diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index 54fe2698d..cd3e1f65f 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -1350,7 +1350,7 @@ s32 EnSGoro_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 ste Matrix_MultVec3f(&zeroVec, &newPos); Matrix_Get(&curState); - Matrix_MtxFToYXZRot(&curState, &newRot, MTXMODE_NEW); + Matrix_MtxFToYXZRot(&curState, &newRot, false); *pos = newPos; diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index 17ad656a4..38d82ed9a 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -337,7 +337,7 @@ void EnSb_UpdateDamage(EnSb* this, PlayState* play) { } if (hitPlayer) { this->unk_252 = 0; - if ((this->actor.draw != NULL) && (this->isDrawn == false)) { + if ((this->actor.draw != NULL) && !this->isDrawn) { this->isDrawn = true; } this->isDead = true; diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index 4937125dc..ca15e4864 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -1295,7 +1295,7 @@ void EnSw_Draw(Actor* thisx, PlayState* play) { if (this->unk_410 & 4) { if (ENSW_GET_3(&this->actor)) { - func_800B8050(&this->actor, play, MTXMODE_NEW); + func_800B8050(&this->actor, play, 0); } Gfx_SetupDL25_Opa(play->state.gfxCtx); Matrix_RotateXS(-0x3C72, MTXMODE_APPLY); diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c index 91ed08140..5711b86fe 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c @@ -190,13 +190,12 @@ void func_80A36360(EnSyatekiOkuta* this) { } void func_80A363B4(EnSyatekiOkuta* this, PlayState* play) { - if ((Animation_OnFrame(&this->skelAnime, 2.0f)) || (Animation_OnFrame(&this->skelAnime, 15.0f))) { + if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) { if (func_80A361F4(this)) { return; - } else { - func_80A361B0(this, play); - Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP); } + func_80A361B0(this, play); + Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP); } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c index f4f89d79e..c8ef2638e 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -650,7 +650,7 @@ void EnWallmas_Update(Actor* thisx, PlayState* play) { Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f); this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f; this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f); - } else if (Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f) == 0) { + } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) { func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG); } } diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 6ce68a0e3..435674539 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -824,7 +824,7 @@ void EnWiz_Dance(EnWiz* this, PlayState* play) { } } - if ((this->animLoopCounter >= 3) && (!this->hasActiveProjectile)) { + if ((this->animLoopCounter >= 3) && !this->hasActiveProjectile) { this->targetPlatformLightAlpha = 0; EnWiz_SetupWindUp(this); } @@ -962,7 +962,7 @@ void EnWiz_Attack(EnWiz* this, PlayState* play) { } if (this->timer == 0) { - if ((Animation_OnFrame(&this->skelAnime, 6.0f)) && (!this->hasActiveProjectile)) { + if (Animation_OnFrame(&this->skelAnime, 6.0f) && !this->hasActiveProjectile) { Player* player = GET_PLAYER(play); Vec3f pos; s32 type = this->type; diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 9238a166b..94d64903a 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -170,31 +170,33 @@ void EnYb_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play) { } void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f32 morphFrames) { - if ((animIndex >= 0) && (animIndex < 3)) { - if ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP)) { - if (animIndex > 0) { - if (animMode == ANIMMODE_LOOP) { - PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f, - Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP, - morphFrames); - } else { - // unused case, (only called once with animMode = ANIMMODE_LOOP) - PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f, - Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP, - morphFrames); - } - } else { - // unused case, (only called once with animIndex = 2) - AnimationHeader* animationPtr = gYbUnusedAnimations[animIndex]; + s32 pad; - if (1) {} - - Animation_Change(&this->skelAnime, gYbUnusedAnimations[animIndex], 1.0f, 0.0f, - Animation_GetLastFrame(animationPtr), animMode, morphFrames); - } - this->animIndex = animIndex; - } + if ((animIndex < 0) || (animIndex > 2)) { + return; } + + if ((animIndex == this->animIndex) && (animMode == ANIMMODE_LOOP)) { + return; + } + + if (animIndex > 0) { + if (animMode == ANIMMODE_LOOP) { + PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f, + Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP, + morphFrames); + } else { + // unused case, (only called once with animMode = ANIMMODE_LOOP) + PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f, + Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP, + morphFrames); + } + } else { + // unused case, (only called once with animIndex = 2) + Animation_Change(&this->skelAnime, gYbUnusedAnimations[animIndex], 1.0f, 0.0f, + Animation_GetLastFrame(gYbUnusedAnimations[animIndex]), animMode, morphFrames); + } + this->animIndex = animIndex; } s32 EnYb_CanTalk(EnYb* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index c3192cec1..72c2f9b82 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -414,86 +414,85 @@ void func_80BBB8AC(EnZos* this, PlayState* play) { } } - if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { - switch (play->msgCtx.currentTextId) { - case 0x1237: - player->exchangeItemId = PLAYER_IA_NONE; + if ((Message_GetState(&play->msgCtx) != TEXT_STATE_5) || !Message_ShouldAdvance(play)) { + return; + } - case 0x1238: - case 0x123A: - case 0x123B: - case 0x123C: - case 0x123E: - case 0x123F: - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + switch (play->msgCtx.currentTextId) { + case 0x1237: + player->exchangeItemId = PLAYER_IA_NONE; + // fallthrough + case 0x1238: + case 0x123A: + case 0x123B: + case 0x123C: + case 0x123E: + case 0x123F: + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1244: - this->unk_2B6 &= ~0x10; - EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + case 0x1244: + this->unk_2B6 &= ~0x10; + EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1232: - case 0x1241: - player->exchangeItemId = PLAYER_IA_NONE; + case 0x1232: + case 0x1241: + player->exchangeItemId = PLAYER_IA_NONE; + // fallthrough + case 0x1239: + case 0x1246: + EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1239: - case 0x1246: - EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_HANDS_ON_HIPS, ANIMMODE_LOOP); - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + case 0x1233: + EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP); + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1233: - EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_ARMS_OUT, ANIMMODE_LOOP); - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + case 0x1245: + case 0x1248: + EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_FOOT_TAP, ANIMMODE_LOOP); + Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); + break; - case 0x1245: - case 0x1248: - EnZos_ChangeAnim(this, EN_ZOS_ANIM_TALK_FOOT_TAP, ANIMMODE_LOOP); - Message_ContinueTextbox(play, play->msgCtx.currentTextId + 1); - break; + case 0x1231: + Message_ContinueTextbox(play, 0xFF); + this->actionFunc = func_80BBB718; + break; - case 0x1231: - Message_ContinueTextbox(play, 0xFF); - this->actionFunc = func_80BBB718; - break; + case 0x1243: + case 0x1249: + EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP); + Message_CloseTextbox(play); + this->actionFunc = func_80BBBDE0; + this->unk_2B6 |= 1; + break; - case 0x1243: - case 0x1249: - EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP); - Message_CloseTextbox(play); - this->actionFunc = func_80BBBDE0; - this->unk_2B6 |= 1; - break; + case 0x1234: + case 0x123D: + case 0x1242: + EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP); + Actor_ProcessTalkRequest(&this->actor, &play->state); + Message_CloseTextbox(play); + this->actionFunc = func_80BBBDE0; + this->unk_2B6 |= 1; + break; - case 0x1234: - case 0x123D: - case 0x1242: - EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP); - Actor_ProcessTalkRequest(&this->actor, &play->state); - Message_CloseTextbox(play); - this->actionFunc = func_80BBBDE0; - this->unk_2B6 |= 1; - break; + case 0x1236: + EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP); + Message_CloseTextbox(play); + this->actionFunc = func_80BBBDE0; + this->unk_2B6 |= 1; + break; - case 0x1236: - EnZos_ChangeAnim(this, EN_ZOS_ANIM_HANDS_ON_HIPS, ANIMMODE_LOOP); - Message_CloseTextbox(play); - this->actionFunc = func_80BBBDE0; - this->unk_2B6 |= 1; - break; - - default: - //! FAKE: - if (1) {} - - Message_CloseTextbox(play); - this->actionFunc = func_80BBBDE0; - this->unk_2B6 |= 1; - break; - } + default: + Message_CloseTextbox(play); + this->actionFunc = func_80BBBDE0; + this->unk_2B6 |= 1; + break; } } diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index 1493759a5..98adea93a 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -1275,8 +1275,7 @@ void func_80B99160(EnZot* this, PlayState* play) { } void func_80B991E4(EnZot* this, PlayState* play) { - if (1) { - do { } while (0); } + if (1) {} Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 2, 0x800, 0x100); this->actor.world.rot.y = this->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c index 529d7ec95..608dde82a 100644 --- a/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c +++ b/src/overlays/actors/ovl_Obj_Jgame_Light/z_obj_jgame_light.c @@ -93,7 +93,7 @@ void ObjJgameLight_Destroy(Actor* thisx, PlayState* play) { void func_80C15474(ObjJgameLight* this, PlayState* play) { u8 temp_a1; - if ((this->actor.colChkInfo.health & OBJLUPYGAMELIFT_IGNITE_FIRE) && (this->isOn == false)) { + if ((this->actor.colChkInfo.health & OBJLUPYGAMELIFT_IGNITE_FIRE) && !this->isOn) { if (this->lightRadius < 160) { this->lightRadius += 40; } else { diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c index 70d6c2619..bf409e7dd 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -397,7 +397,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) { this->dyna.actor.flags |= 0x80; } if (type == OBJSWITCH_TYPE_EYE) { - if (sIsSegmentTableInit == false) { + if (!sIsSegmentTableInit) { s32 i; s32 j; diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 01c732aa2..31d2113ea 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -41,14 +41,14 @@ void Player_Destroy(Actor* thisx, PlayState* play); void Player_Update(Actor* thisx, PlayState* play); void Player_Draw(Actor* thisx, PlayState* play); -s32 Player_GrabPlayer(PlayState* play, Player* player); +s32 Player_GrabPlayer(PlayState* play, Player* this); s32 func_8085B28C(PlayState* play, Player* this, PlayerCsMode csMode); void func_8085B384(Player* this, PlayState* play); s32 Player_InflictDamage(PlayState* play, s32 damage); void Player_TalkWithPlayer(PlayState* play, Actor* actor); void func_8085B74C(PlayState* play); void func_8085B820(PlayState* play, s16 arg1); -PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId); +PlayerItemAction func_8085B854(PlayState* play, Player* this, ItemId itemId); s32 func_8085B930(PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode); void Player_UpdateCommon(Player* this, PlayState* play, Input* input); @@ -5495,29 +5495,29 @@ s32 func_80834600(Player* this, PlayState* play) { return false; } else { s32 sp58 = func_808340AC(sPlayerCurrentFloorType); - u32 sp54 = SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - s32 var_a1 = 0; + u32 isSurfaceWallDamage = SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + s32 var_a1 = false; s32 var_v1_2; s32 pad48; - if ((sp58 < 0) || - ((sp54 == 0) && (this->transformation == PLAYER_FORM_GORON) && !(this->actor.depthInWater > 0.0f))) { + if ((sp58 < 0) || (!isSurfaceWallDamage && (this->transformation == PLAYER_FORM_GORON) && + !(this->actor.depthInWater > 0.0f))) { var_a1 = (this->actor.wallPoly != NULL) && SurfaceType_IsWallDamage(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId); - if (var_a1 == 0) { + if (!var_a1) { //! FAKE? goto label; } } - var_v1_2 = (var_a1 != 0) ? this->actor.wallBgId : this->actor.floorBgId; + var_v1_2 = var_a1 ? this->actor.wallBgId : this->actor.floorBgId; if (((this->transformation == PLAYER_FORM_DEKU) || (this->transformation == PLAYER_FORM_ZORA)) && - ((sp58 >= 0) && (sp54 == 0) && !(this->stateFlags1 & PLAYER_STATE1_8000000) && + ((sp58 >= 0) && !isSurfaceWallDamage && !(this->stateFlags1 & PLAYER_STATE1_8000000) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.depthInWater < -30.0f))) { func_80834534(play, this); } else { this->actor.colChkInfo.damage = 4; func_80833B18(play, this, (var_v1_2 == BGCHECK_SCENE) ? 0 : 1, 4.0f, 5.0f, - (var_a1 != 0) ? this->actor.wallYaw : this->actor.shape.rot.y, 20); + var_a1 ? this->actor.wallYaw : this->actor.shape.rot.y, 20); return true; } } @@ -7115,7 +7115,7 @@ s32 func_80838A90(Player* this, PlayState* play) { PlayerMask maskId = GET_MASK_FROM_IA(this->itemAction); this->prevMask = this->currentMask; - if (((maskId == this->currentMask) != 0) || (this->itemAction < PLAYER_IA_MASK_GIANT) || + if ((u32)(maskId == this->currentMask) || (this->itemAction < PLAYER_IA_MASK_GIANT) || ((this->itemAction == PLAYER_IA_MASK_GIANT) && (this->transformation != PLAYER_FORM_HUMAN))) { if (maskId == this->currentMask) { this->currentMask = PLAYER_MASK_NONE; @@ -8467,8 +8467,7 @@ void func_8083C85C(Player* this) { } void func_8083C8E8(Player* this, PlayState* play) { - if ((func_800B7128(this) == 0) && (func_8082EF20(this) == 0) && - ((this->linearVelocity > 5.0f) || (D_80862B3C != 0.0f))) { + if (!func_800B7128(this) && !func_8082EF20(this) && ((this->linearVelocity > 5.0f) || (D_80862B3C != 0.0f))) { s16 temp1; s16 temp2; @@ -8511,7 +8510,7 @@ s32 func_8083CBC4(Player* this, f32 arg1, s16 arg2, f32 arg3, f32 arg4, f32 arg5 } if (ABS_ALT(temp_v0) > 0x6000) { - if (Math_StepToF(&this->linearVelocity, 0.0f, arg3) == 0) { + if (!Math_StepToF(&this->linearVelocity, 0.0f, arg3)) { return false; } @@ -9414,7 +9413,7 @@ void func_8083F27C(PlayState* play, Player* this) { } void func_8083F358(Player* this, s32 arg1, PlayState* play) { - PlayerAnimationHeader* var_v0; + PlayerAnimationHeader* climbAnim; f32 var_fv1; s16 var_a1; @@ -9448,18 +9447,18 @@ void func_8083F358(Player* this, s32 arg1, PlayState* play) { } if (var_fv1 < 0.0f) { - var_v0 = &gPlayerAnim_link_normal_climb_down; + climbAnim = &gPlayerAnim_link_normal_climb_down; var_fv1 = -var_fv1; } else { - var_v0 = &gPlayerAnim_link_normal_climb_up; + climbAnim = &gPlayerAnim_link_normal_climb_up; } if (arg1 == 0) { PlayerAnimation_BlendToJoint(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], - this->unk_B38, var_v0, this->unk_B38, var_fv1, this->blendTableBuffer); + this->unk_B38, climbAnim, this->unk_B38, var_fv1, this->blendTableBuffer); } else { PlayerAnimation_BlendToMorph(play, &this->skelAnime, D_8085BE84[PLAYER_ANIMGROUP_1][this->modelAnimType], - this->unk_B38, var_v0, this->unk_B38, var_fv1, this->blendTableBuffer); + this->unk_B38, climbAnim, this->unk_B38, var_fv1, this->blendTableBuffer); } } @@ -11392,7 +11391,7 @@ void func_80844784(PlayState* play, Player* this) { var_a3 += 0x8000; } - if ((Math_StepToF(&this->actor.speed, var_fv0, 0.35f) != 0) && (var_fv0 == 0.0f)) { + if (Math_StepToF(&this->actor.speed, var_fv0, 0.35f) && (var_fv0 == 0.0f)) { this->actor.world.rot.y = this->currentYaw; } @@ -13853,7 +13852,7 @@ void func_8084B0EC(Player* this, PlayState* play) { func_80832F78(this, &sp2C, &sp2A, 0.0f, play); if (!func_8083A4A4(this, &sp2C, &sp2A, REG(43) / 100.0f)) { - if (((func_80123434(this) != 0) && (sp2C != 0) && (func_8083E514(this, &sp2C, &sp2A, play) <= 0)) || + if ((func_80123434(this) && (sp2C != 0) && (func_8083E514(this, &sp2C, &sp2A, play) <= 0)) || (!func_80123434(this) && (func_8083E404(this, sp2C, sp2A) <= 0))) { func_80836988(this, play); } else { @@ -14007,7 +14006,7 @@ void func_8084B5C0(Player* this, PlayState* play) { this->unk_AE7 = 0; } } else if (!func_8083FE38(this, play)) { - if (func_8083A274(this, play) != 0) { + if (func_8083A274(this, play)) { func_8083FD80(this, play); } else { this->stateFlags1 &= ~PLAYER_STATE1_400000; @@ -14211,7 +14210,7 @@ void func_8084C16C(Player* this, PlayState* play) { s16 sp42; Actor* heldActor; - if (func_80123420(this) != 0) { + if (func_80123420(this)) { this->actor.gravity = -1.2f; } @@ -15020,9 +15019,6 @@ void func_8084E65C(Player* this, PlayState* play) { } void func_8084E724(Player* this, PlayState* play) { - u8 temp_v1; - u32 new_var; - if (this->stateFlags1 & PLAYER_STATE1_8000000) { func_808475B4(this); func_8084748C(this, &this->linearVelocity, 0.0f, this->actor.shape.rot.y); @@ -15036,21 +15032,16 @@ void func_8084E724(Player* this, PlayState* play) { } } - temp_v1 = this->unk_AA5; - new_var = temp_v1; - - if (((temp_v1 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || - ((temp_v1 != PLAYER_UNKAA5_2) && - (((((((((this->csMode != PLAYER_CSMODE_0) || (new_var == 0)) || (temp_v1 >= PLAYER_UNKAA5_5)) || - (func_8082FB68(this) != 0)) || - (this->targetedActor != NULL)) || - (func_8083868C(play, this) == 0)) || + if (((this->unk_AA5 == PLAYER_UNKAA5_2) && !(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) || + ((this->unk_AA5 != PLAYER_UNKAA5_2) && + ((((this->csMode != PLAYER_CSMODE_0) || ((u32)this->unk_AA5 == PLAYER_UNKAA5_0) || + (this->unk_AA5 >= PLAYER_UNKAA5_5) || func_8082FB68(this) || (this->targetedActor != NULL) || + (func_8083868C(play, this) == CAM_MODE_NORMAL) || ((this->unk_AA5 == PLAYER_UNKAA5_3) && - (((((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) && - CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B)) || - CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_R | BTN_A)) || - (func_80123434(this) != 0)) || - (!func_800B7128(this) && (func_8082EF20(this) == 0))))) || + (((Player_ItemToItemAction(this, Inventory_GetBtnBItem(play)) != this->heldItemAction) && + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_B)) || + CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_R | BTN_A) || func_80123434(this) || + (!func_800B7128(this) && !func_8082EF20(this))))) || ((this->unk_AA5 == PLAYER_UNKAA5_1) && CHECK_BTN_ANY(sPlayerControlInput->press.button, BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_R | BTN_B | BTN_A))) || @@ -18458,7 +18449,7 @@ void func_80857BE8(Player* this, PlayState* play) { if ((this->stateFlags3 & PLAYER_STATE3_80000) && (!CHECK_BTN_ALL(sPlayerControlInput->cur.button, BTN_A) || (gSaveContext.save.saveInfo.playerData.magic == 0) || ((this->unk_AE7 == 4) && (this->unk_B08 < 12.0f)))) { - if (Math_StepToS(&this->unk_B86[1], 0, 1) != 0) { + if (Math_StepToS(&this->unk_B86[1], 0, 1)) { this->stateFlags3 &= ~PLAYER_STATE3_80000; Magic_Reset(play); Player_PlaySfx(this, NA_SE_PL_GORON_BALL_CHARGE_FAILED); @@ -20003,12 +19994,12 @@ void func_8085B170(PlayState* play, Player* this) { Player_AnimSfx_PlayVoice(this, NA_SE_VO_LI_HELD); } -s32 Player_GrabPlayer(PlayState* play, Player* player) { - if (!Player_InBlockingCsMode(play, player) && (player->invincibilityTimer >= 0) && !func_801240DC(player)) { - if (!(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | - PLAYER_STATE1_200000 | PLAYER_STATE1_800000))) { - if (!(player->stateFlags2 & PLAYER_STATE2_80) && !(player->stateFlags3 & PLAYER_STATE3_80)) { - func_8085B170(play, player); +s32 Player_GrabPlayer(PlayState* play, Player* this) { + if (!Player_InBlockingCsMode(play, this) && (this->invincibilityTimer >= 0) && !func_801240DC(this)) { + if (!(this->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_100000 | + PLAYER_STATE1_200000 | PLAYER_STATE1_800000))) { + if (!(this->stateFlags2 & PLAYER_STATE2_80) && !(this->stateFlags3 & PLAYER_STATE3_80)) { + func_8085B170(play, this); return true; } } @@ -20169,11 +20160,11 @@ void func_8085B820(PlayState* play, s16 arg1) { func_80836D8C(player); } -PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId) { - PlayerItemAction itemAction = Player_ItemToItemAction(player, itemId); +PlayerItemAction func_8085B854(PlayState* play, Player* this, ItemId itemId) { + PlayerItemAction itemAction = Player_ItemToItemAction(this, itemId); if ((itemAction >= PLAYER_IA_MASK_MIN) && (itemAction <= PLAYER_IA_MASK_MAX) && - (itemAction == GET_IA_FROM_MASK(player->currentMask))) { + (itemAction == GET_IA_FROM_MASK(this->currentMask))) { itemAction = PLAYER_IA_NONE; } @@ -20181,15 +20172,15 @@ PlayerItemAction func_8085B854(PlayState* play, Player* player, ItemId itemId) { return PLAYER_IA_MINUS1; } - player->itemAction = PLAYER_IA_NONE; - player->actionFunc = NULL; - func_80831760(play, player, func_80853A5C, 0); - player->csId = CS_ID_GLOBAL_TALK; - player->itemAction = itemAction; - Player_AnimationPlayOnce(play, player, &gPlayerAnim_link_normal_give_other); - player->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); - player->getItemDrawIdPlusOne = GID_NONE + 1; - player->exchangeItemId = itemAction; + this->itemAction = PLAYER_IA_NONE; + this->actionFunc = NULL; + func_80831760(play, this, func_80853A5C, 0); + this->csId = CS_ID_GLOBAL_TALK; + this->itemAction = itemAction; + Player_AnimationPlayOnce(play, this, &gPlayerAnim_link_normal_give_other); + this->stateFlags1 |= (PLAYER_STATE1_40 | PLAYER_STATE1_20000000); + this->getItemDrawIdPlusOne = GID_NONE + 1; + this->exchangeItemId = itemAction; return itemAction; } From 47be99fb0cde762466ab8dd7d2471dd278a59040 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 11 Jun 2023 00:31:05 +1000 Subject: [PATCH 36/36] libultra voice OK (#1264) * Import all libultra voice code * Libultra voice cleanup * more cleanup * more cleanup/docs * cleanup variables.h * File: * PR review 1 * adjust comment * more review * More (p) * SWRITEFORMAT * consistent spacing * fix bss --------- Co-authored-by: Derek Hensley Co-authored-by: angie --- include/functions.h | 17 --- include/io/controller.h | 2 + include/os.h | 7 -- include/ultra64.h | 1 + include/ultra64/controller_voice.h | 71 ++++++++++++ include/ultra64/os_voice.h | 42 ++++++++ include/variables.h | 10 +- include/z64audio.h | 5 + spec | 2 - src/code/graph.c | 1 + src/code/z_message.c | 3 +- src/libultra/io/contreaddata.c | 4 +- src/libultra/io/controller.c | 4 +- src/libultra/voice/voicecheckresult.c | 30 +++++- src/libultra/voice/voicecheckword.c | 108 ++++++++++++++++++- src/libultra/voice/voicecleardictionary.c | 52 ++++++++- src/libultra/voice/voicecontread2.c | 75 ++++++++++++- src/libultra/voice/voicecontread36.c | 75 ++++++++++++- src/libultra/voice/voicecontrolgain.c | 42 +++++++- src/libultra/voice/voicecontwrite20.c | 76 ++++++++++++- src/libultra/voice/voicecontwrite4.c | 76 ++++++++++++- src/libultra/voice/voicecrc.c | 2 +- src/libultra/voice/voicegetreaddata.c | 126 +++++++++++++++++++++- src/libultra/voice/voicegetstatus.c | 50 +++++---- src/libultra/voice/voiceinit.c | 70 +++++++++++- src/libultra/voice/voicemaskdictionary.c | 58 +++++++++- src/libultra/voice/voicesetadconverter.c | 71 +++++++++++- src/libultra/voice/voicesetword.c | 70 +++++++++++- src/libultra/voice/voicestartreaddata.c | 50 ++++++++- src/libultra/voice/voicestopread.c | 61 ++++++++++- tools/disasm/variables.txt | 8 +- 31 files changed, 1170 insertions(+), 99 deletions(-) create mode 100644 include/ultra64/controller_voice.h create mode 100644 include/ultra64/os_voice.h diff --git a/include/functions.h b/include/functions.h index 04f6dfb73..6a9ebcf60 100644 --- a/include/functions.h +++ b/include/functions.h @@ -157,7 +157,6 @@ void osStopThread(OSThread* t); s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags); OSIntMask osSetIntMask(OSIntMask im); // OSIntMask osGetIntMask(void); -// void osVoiceSetWord(void); void guScale(Mtx* mtx, f32 x, f32 y, f32 z); f32 sinf(f32 __x); s16 sins(u16 x); @@ -186,7 +185,6 @@ void __osDispatchThread(void); void __osCleanupThread(void); void __osDequeueThread(OSThread** queue, OSThread* t); void osDestroyThread(OSThread* t); -// void __osVoiceCheckResult(void); void bzero(void* begin, s32 length); void __osSiCreateAccessQueue(void); @@ -199,7 +197,6 @@ void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPr s32 osContStartReadData(OSMesgQueue* mq); void osContGetReadData(OSContPad* data); void __osPackReadData(void); -// void osVoiceGetReadData(void); uintptr_t osVirtualToPhysical(void* virtualAddress); u32 __osGetSR(void); void __osSetSR(u32 value); @@ -258,11 +255,8 @@ void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, s32 hiliteHeight); s32 _Printf(PrintCallback pfn, void* arg, const char* fmt, va_list ap); void _Putfld(_Pft* px, va_list* pap, u8 code, u8* ac); -// void osVoiceClearDictionary(void); void osUnmapTLBAll(void); s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction); -// void __osVoiceContRead2(void); -u8 __osVoiceContDataCrc(u8* data, size_t numBytes); const char* strchr(const char* s, s32 c); size_t strlen(const char* s); void* memcpy(void* s1, const void* s2, size_t n); @@ -273,7 +267,6 @@ void __osTimerServicesInit(void); void __osTimerInterrupt(void); void __osSetTimerIntr(OSTime tim); OSTime __osInsertTimer(OSTimer* t); -// void __osVoiceContRead36(void); s32 __osSpDeviceBusy(void); s32 __osSiDeviceBusy(void); void guMtxIdent(Mtx* mtx); @@ -291,12 +284,9 @@ OSTime osGetTime(void); void guRotateF(float m[4][4], f32 a, f32 x, f32 y, f32 z); void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); void __osSetGlobalIntMask(u32 mask); -s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* handle, s32 channel); s32 __osContChannelReset(OSMesgQueue* mq, s32 channel); -// void __osVoiceSetADConverter(void); s32 osAiSetFrequency(u32 frequency); s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* buffer); -// void __osVoiceContWrite20(void); u8 __osContAddressCrc(u16 addr); u8 __osContDataCrc(u8* data); OSThread* __osGetActiveQueue(void); @@ -321,12 +311,10 @@ s32 osEPiReadIo(OSPiHandle* handle, uintptr_t devAddr, u32* data); void osViSetSpecialFeatures(u32 func); s16 coss(u16 x); void osSetTime(OSTime ticks); -// void osVoiceStopReadData(void); void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); s32 osPfsIsPlug(OSMesgQueue* mq, u8* pattern); // void __osPfsRequestData(void); // void __osPfsGetInitData(void); -s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status); OSPiHandle* osCartRomInit(void); // void guS2DInitBg(void); s32 __osPfsSelectBank(OSPfs* pfs, u8 bank); @@ -360,7 +348,6 @@ void osCreateViManager(OSPri pri); __OSViContext* __osViGetCurrentContext(void); void osWritebackDCacheAll(void); OSThread* __osGetCurrFaultedThread(void); -// void osVoiceMaskDictionary(void); void guMtxF2L(float mf[4][4], Mtx* m); void osStartThread(OSThread* t); void osViSetYScale(f32 value); @@ -373,12 +360,8 @@ double __ll_to_d(long long s); float __ll_to_f(long long s); double __ull_to_d(unsigned long long u); float __ull_to_f(unsigned long long u); -// void osVoiceCheckWord(void); -// void osVoiceControlGain(void); -// void osVoiceStartReadData(void); u32* osViGetCurrentFramebuffer(void); s32 __osSpSetPc(void* pc); -// void __osVoiceContWrite4(void); void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg); void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg); u32 __osGetWatchLo(void); diff --git a/include/io/controller.h b/include/io/controller.h index b588b4198..d29c11f1f 100644 --- a/include/io/controller.h +++ b/include/io/controller.h @@ -4,6 +4,8 @@ #include "PR/ultratypes.h" #include "PR/pfs.h" +#define CHNL_ERR(format) (((format).rxsize & CHNL_ERR_MASK) >> 4) + #define SIAccessQueueSize 2 #define BLOCKSIZE 32 #define MAXCONTROLLERS 4 diff --git a/include/os.h b/include/os.h index 6e34bd428..47fed80a0 100644 --- a/include/os.h +++ b/include/os.h @@ -142,11 +142,4 @@ typedef struct { /* 0xC */ u32* text_end; } OSProf; // size = 0x10 -typedef struct { - /* 0x0 */ OSMesgQueue* mq; - /* 0x4 */ s32 port; /* Controller port */ - /* 0x8 */ s32 mode; - /* 0xC */ u8 status; -} OSVoiceHandle; // size = 0x10 - #endif diff --git a/include/ultra64.h b/include/ultra64.h index ad2bc2463..f7baade42 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -6,6 +6,7 @@ #include "unk.h" +#include "ultra64/controller_voice.h" #include "ultra64/hardware.h" #include "ultra64/message.h" #include "ultra64/sptask.h" diff --git a/include/ultra64/controller_voice.h b/include/ultra64/controller_voice.h new file mode 100644 index 000000000..a5480d877 --- /dev/null +++ b/include/ultra64/controller_voice.h @@ -0,0 +1,71 @@ +#ifndef CONTROLLER_VOICE_H +#define CONTROLLER_VOICE_H + +#include "PR/ultratypes.h" +#include "ultra64/os_voice.h" +#include "ultra64/message.h" +#include "libc/stddef.h" + +typedef struct { + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u8 addrh; + /* 0x5 */ u8 addrl; + /* 0x6 */ u8 data[2]; + /* 0x8 */ u8 datacrc; +} __OSVoiceRead2Format; // size = 0x9 + +typedef struct { + /* 0x00 */ u8 dummy; + /* 0x01 */ u8 txsize; + /* 0x02 */ u8 rxsize; + /* 0x03 */ u8 cmd; + /* 0x04 */ u8 addrh; + /* 0x05 */ u8 addrl; + /* 0x06 */ u8 data[36]; + /* 0x2A */ u8 datacrc; +} __OSVoiceRead36Format; // size = 0x2B + +typedef struct { + /* 0x0 */ u8 dummy; + /* 0x1 */ u8 txsize; + /* 0x2 */ u8 rxsize; + /* 0x3 */ u8 cmd; + /* 0x4 */ u8 addrh; + /* 0x5 */ u8 addrl; + /* 0x6 */ u8 data[4]; + /* 0xA */ u8 datacrc; +} __OSVoiceWrite4Format; // size = 0xB + +typedef struct { + /* 0x00 */ u8 dummy; + /* 0x01 */ u8 txsize; + /* 0x02 */ u8 rxsize; + /* 0x03 */ u8 cmd; + /* 0x04 */ u8 addrh; + /* 0x05 */ u8 addrl; + /* 0x06 */ u8 data[20]; + /* 0x1A */ u8 datacrc; +} __OSVoiceWrite20Format; // size = 0x1B + +typedef struct { + /* 0x0 */ u8 txsize; + /* 0x1 */ u8 rxsize; + /* 0x2 */ u8 cmd; + /* 0x3 */ u8 data; + /* 0x4 */ u8 scrc; + /* 0x5 */ u8 datacrc; +} __OSVoiceSWriteFormat; // size = 0x6 + +s32 __osVoiceContRead2(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[2]); +s32 __osVoiceContRead36(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[36]); +s32 __osVoiceContWrite4(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[4]); +s32 __osVoiceContWrite20(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[20]); +s32 __osVoiceCheckResult(OSVoiceHandle* hd, u8* status); +s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 channel, u8* status); +s32 __osVoiceSetADConverter(OSMesgQueue* mq, s32 channel, u8 data); +u8 __osVoiceContDataCrc(u8* data, size_t numBytes); + +#endif diff --git a/include/ultra64/os_voice.h b/include/ultra64/os_voice.h new file mode 100644 index 000000000..8452ed45c --- /dev/null +++ b/include/ultra64/os_voice.h @@ -0,0 +1,42 @@ +#ifndef OS_VOICE_H +#define OS_VOICE_H + +#include "PR/ultratypes.h" +#include "ultra64/message.h" + +typedef enum OsVoiceHandleMode { + /* 0 */ VOICE_HANDLE_MODE_0, + /* 1 */ VOICE_HANDLE_MODE_1, + /* 2 */ VOICE_HANDLE_MODE_2, + /* 3 */ VOICE_HANDLE_MODE_3, + /* 4 */ VOICE_HANDLE_MODE_4 +} OsVoiceHandleMode; + +typedef struct { + /* 0x0 */ OSMesgQueue* mq; + /* 0x4 */ s32 channel; // Controller port + /* 0x8 */ OsVoiceHandleMode mode; + /* 0xC */ u8 status; +} OSVoiceHandle; // size = 0x10 + +typedef struct { + /* 0x00 */ u16 warning; // Warning + /* 0x02 */ u16 answerNum; // Candidate number (0~5) + /* 0x04 */ u16 voiceLevel; // Voice input level + /* 0x06 */ u16 voiceRelLevel; // Relative voice level "voice_sn" + /* 0x08 */ u16 voiceTime; // Voice input time + /* 0x0A */ u16 answer[5]; // Candidate word number + /* 0x14 */ u16 distance[5]; // Distance value +} OSVoiceData; // size = 0x20 + +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel); +s32 osVoiceSetWord(OSVoiceHandle* hd, u8* word); +s32 osVoiceCheckWord(u8* word); +s32 osVoiceStartReadData(OSVoiceHandle* hd); +s32 osVoiceStopReadData(OSVoiceHandle* hd); +s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result); +s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords); +s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size); +s32 osVoiceControlGain(OSVoiceHandle* hd, s32 analog, s32 digital); + +#endif diff --git a/include/variables.h b/include/variables.h index 108fa5833..7cdf40e31 100644 --- a/include/variables.h +++ b/include/variables.h @@ -72,11 +72,6 @@ extern UNK_TYPE4 D_80097F10; extern char spaces[]; extern char zeroes[]; extern OSTimer* __osTimerList; -// extern UNK_TYPE4 D_80097F80; -extern float D_80097F90; -// extern UNK_TYPE1 D_80097FA0; -// extern UNK_TYPE1 D_80097FA4; -// extern UNK_TYPE1 D_80097FA5; extern s32 __osPfsLastChannel; extern OSViMode osViModeNtscLan1; extern OSViMode osViModeMpalLan1; @@ -89,7 +84,7 @@ extern OSViMode osViModeFpalLan1; // extern u8 udigs[]; // extern OSDevMgr __osViDevMgr; extern u32 __additional_scanline; -// extern UNK_TYPE1 D_80098180; + extern char bootThreadName[]; extern char idleThreadName[]; extern char irqmgrThreadName[]; @@ -308,8 +303,6 @@ extern OSTask tmp_task; extern OSMesg siAccessBuf[1]; extern OSMesgQueue __osSiAccessQueue; -extern UNK_TYPE1 D_8009CF60; -// extern UNK_TYPE4 D_8009CF70; extern OSThread __osThreadSave; extern OSPiHandle D_8009D130; extern OSPiHandle D_8009D1A8; @@ -2516,7 +2509,6 @@ extern s32 D_801FD120; // extern UNK_TYPE1 D_801FD598; // extern UNK_TYPE1 D_801FD5A0; // extern UNK_TYPE1 D_801FD5A4; -extern OSVoiceHandle gVoiceHandle; // extern UNK_TYPE1 D_801FD5C4; // extern UNK_TYPE1 D_801FD5C8; // extern UNK_TYPE1 D_801FD5E8; diff --git a/include/z64audio.h b/include/z64audio.h index 9b077cf1a..c4943c09a 100644 --- a/include/z64audio.h +++ b/include/z64audio.h @@ -1,7 +1,10 @@ #ifndef Z64AUDIO_H #define Z64AUDIO_H +#include "PR/ultratypes.h" +#include "ultra64/os_voice.h" #include "audiothread_cmd.h" +#include "libc/stddef.h" #define NO_LAYER ((SequenceLayer*)(-1)) @@ -1279,4 +1282,6 @@ typedef u32 (*AudioCustomSeqFunction)(s8 value, SequenceChannel* channel); typedef s32 (*AudioCustomReverbFunction)(Sample*, s32, s8, s32); typedef Acmd* (*AudioCustomSynthFunction)(Acmd*, s32, s32); +extern OSVoiceHandle gVoiceHandle; + #endif diff --git a/spec b/spec index e427e6866..b1468144e 100644 --- a/spec +++ b/spec @@ -77,7 +77,6 @@ beginseg include "build/src/libultra/os/createthread.o" include "build/src/libultra/io/contreaddata.o" include "build/src/libultra/voice/voicegetreaddata.o" - include "build/data/boot/voicegetreaddata.bss.o" include "build/src/libultra/os/virtualtophysical.o" include "build/asm/boot/getsr.text.o" include "build/asm/boot/setsr.text.o" @@ -155,7 +154,6 @@ beginseg include "build/src/libultra/gu/rotate.o" include "build/src/libultra/os/setglobalintmask.o" include "build/src/libultra/voice/voiceinit.o" - include "build/data/boot/voiceinit.data.o" include "build/src/libultra/io/contchannelreset.o" include "build/src/libultra/voice/voicesetadconverter.o" include "build/src/libultra/io/aisetfreq.o" diff --git a/src/code/graph.c b/src/code/graph.c index 2e104234e..eca40bbaf 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "buffers.h" #include "system_malloc.h" diff --git a/src/code/z_message.c b/src/code/z_message.c index 38f44d9ec..03fadc9c9 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -244,6 +244,7 @@ void Message_LoadChar(PlayState* play, u16 codePointIndex, s32* offset, f32* arg *arg3 = temp2; } +// TODO: SJIS support // Message_LoadRupees JPN ? void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) { MessageContext* msgCtx = &play->msgCtx; @@ -259,7 +260,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3) k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x8373; t += 1; - Font_LoadChar(play, 0x815C, k); // Ox815C = ― in JISX0213 + Font_LoadChar(play, 0x815C, k); // 0x815C = ― in JISX0213 k += FONT_CHAR_TEX_SIZE; msgCtx->decodedBuffer.wchar[t] = 0x815C; diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c index 061c01b0a..27bd0b8ed 100644 --- a/src/libultra/io/contreaddata.c +++ b/src/libultra/io/contreaddata.c @@ -43,11 +43,11 @@ void __osPackReadData() { int i; ptr = (u8*)__osContPifRam.ramarray; - for (i = 0; i < 0xF; i++) { + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) { __osContPifRam.ramarray[i] = 0; } - __osContPifRam.status = 1; + __osContPifRam.status = CONT_CMD_READ_BUTTON; readformat.dummy = 255; readformat.txsize = 1; readformat.rxsize = 4; diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 245183280..19be9281a 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -74,11 +74,11 @@ void __osPackRequestData(u8 poll) { __OSContRequestHeader requestHeader; s32 i; - for (i = 0; i < 0xF; i++) { + for (i = 0; i < ARRAY_COUNT(__osContPifRam.ramarray); i++) { __osContPifRam.ramarray[i] = 0; } - __osContPifRam.status = 1; + __osContPifRam.status = CONT_CMD_READ_BUTTON; ptr = (u8*)__osContPifRam.ramarray; requestHeader.align = 255; requestHeader.txsize = 1; diff --git a/src/libultra/voice/voicecheckresult.c b/src/libultra/voice/voicecheckresult.c index 44fb69be5..7d1e5c0a5 100644 --- a/src/libultra/voice/voicecheckresult.c +++ b/src/libultra/voice/voicecheckresult.c @@ -1,3 +1,29 @@ -#include "global.h" +/** + * File: voicecheckresult.c + */ +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecheckresult/__osVoiceCheckResult.s") +s32 __osVoiceCheckResult(OSVoiceHandle* hd, u8* status) { + s32 errorCode = __osVoiceGetStatus(hd->mq, hd->channel, status); + u8 data[2]; + + if (errorCode == 0) { + if (*status & 1) { + errorCode = CONT_ERR_VOICE_NO_RESPONSE; + } else { + errorCode = __osVoiceContRead2(hd->mq, hd->channel, 0, data); + if (errorCode == 0) { + hd->status = data[0] & 7; + + if (data[0] & 0x40) { + errorCode = CONT_ERR_VOICE_NO_RESPONSE; + } else { + errorCode = data[1] << 8; + } + } + } + } + return errorCode; +} diff --git a/src/libultra/voice/voicecheckword.c b/src/libultra/voice/voicecheckword.c index 8b5ac0dfb..1a2695b51 100644 --- a/src/libultra/voice/voicecheckword.c +++ b/src/libultra/voice/voicecheckword.c @@ -1,3 +1,107 @@ -#include "global.h" +/** + * File: voicecheckwork.c + * + * Checks whether or not a word can be registered in the dictionary + */ +#include "io/controller.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecheckword/osVoiceCheckWord.s") +// TODO: SJIS support +s32 osVoiceCheckWord(u8* word) { + s32 i; + s32 errorCode = 0; + u16 curSyllable; + u16 prevSyllable = 0; + + for (i = 0; word[i] != 0; i += 2) { + curSyllable = (word[i] << 8) + word[i + 1]; + if (((curSyllable != 0x815B) && (curSyllable < 0x829F)) || + ((curSyllable >= 0x82F2) && (curSyllable < 0x8340)) || (curSyllable == 0x837F) || (curSyllable >= 0x8397)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if ((i == 0) && ((curSyllable == 0x815B) || (curSyllable == 0x82F1) || (curSyllable == 0x82C1) || + (curSyllable == 0x82EC) || (curSyllable == 0x8393) || (curSyllable == 0x8362) || + (curSyllable == 0x838E) || (curSyllable == 0x8395) || (curSyllable == 0x8396))) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x829F) || (curSyllable == 0x8340)) && (prevSyllable != 0x82D3) && + (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x82A1) || (curSyllable == 0x8342)) && (prevSyllable != 0x82A4) && + (prevSyllable != 0x82C4) && (prevSyllable != 0x82C5) && (prevSyllable != 0x82D3) && + (prevSyllable != 0x8345) && (prevSyllable != 0x8365) && (prevSyllable != 0x8366) && + (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x82A3) || (curSyllable == 0x8344)) && (prevSyllable != 0x82C6) && + (prevSyllable != 0x82C7) && (prevSyllable != 0x82D3) && (prevSyllable != 0x8367) && + (prevSyllable != 0x8368) && (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x82A5) || (curSyllable == 0x8346)) && (prevSyllable != 0x82A4) && + (prevSyllable != 0x82B5) && (prevSyllable != 0x82B6) && (prevSyllable != 0x82BF) && + (prevSyllable != 0x82C0) && (prevSyllable != 0x82C2) && (prevSyllable != 0x82D3) && + (prevSyllable != 0x8345) && (prevSyllable != 0x8356) && (prevSyllable != 0x8357) && + (prevSyllable != 0x8360) && (prevSyllable != 0x8361) && (prevSyllable != 0x8363) && + (prevSyllable != 0x8374) && (prevSyllable != 0x8394)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x82A7) || (curSyllable == 0x8348)) && (prevSyllable != 0x82A4) && + (prevSyllable != 0x82D3) && (prevSyllable != 0x8345) && (prevSyllable != 0x8374) && + (prevSyllable != 0x8394)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x82E1) || (curSyllable == 0x82E3) || (curSyllable == 0x82E5) || + (curSyllable == 0x8383) || (curSyllable == 0x8385) || (curSyllable == 0x8387)) && + (prevSyllable != 0x82AB) && (prevSyllable != 0x82B5) && (prevSyllable != 0x82BF) && + (prevSyllable != 0x82C9) && (prevSyllable != 0x82D0) && (prevSyllable != 0x82DD) && + (prevSyllable != 0x82E8) && (prevSyllable != 0x82AC) && (prevSyllable != 0x82B6) && + (prevSyllable != 0x82C0) && (prevSyllable != 0x82D1) && (prevSyllable != 0x82D2) && + (prevSyllable != 0x834C) && (prevSyllable != 0x8356) && (prevSyllable != 0x8360) && + (prevSyllable != 0x836A) && (prevSyllable != 0x8371) && (prevSyllable != 0x837E) && + (prevSyllable != 0x838A) && (prevSyllable != 0x834D) && (prevSyllable != 0x8357) && + (prevSyllable != 0x8361) && (prevSyllable != 0x8372) && (prevSyllable != 0x8373) && + (prevSyllable != 0x8394)) { + errorCode = CONT_ERR_VOICE_WORD; + } else if ((curSyllable == 0x815B) && ((prevSyllable == 0x82F1) || (prevSyllable == 0x82C1) || + (prevSyllable == 0x8393) || (prevSyllable == 0x8362))) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((curSyllable == 0x82F1) || (curSyllable == 0x8393)) && + ((prevSyllable == 0x82F1) || (prevSyllable == 0x8393))) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (((prevSyllable == 0x82C1) || (prevSyllable == 0x8362)) && + ((curSyllable == 0x815B) || (curSyllable == 0x82A0) || (curSyllable == 0x82A2) || + (curSyllable == 0x82A4) || (curSyllable == 0x82A6) || (curSyllable == 0x82A8) || + (curSyllable == 0x82C8) || (curSyllable == 0x82C9) || (curSyllable == 0x82CA) || + (curSyllable == 0x82CB) || (curSyllable == 0x82CC) || (curSyllable == 0x82DC) || + (curSyllable == 0x82DD) || (curSyllable == 0x82DE) || (curSyllable == 0x82DF) || + (curSyllable == 0x82E0) || (curSyllable == 0x82E2) || (curSyllable == 0x82E4) || + (curSyllable == 0x82E6) || (curSyllable == 0x82E7) || (curSyllable == 0x82E8) || + (curSyllable == 0x82E9) || (curSyllable == 0x82EA) || (curSyllable == 0x82EB) || + (curSyllable == 0x82ED) || (curSyllable == 0x82EE) || (curSyllable == 0x82EF) || + (curSyllable == 0x82F0) || (curSyllable == 0x82F1) || (curSyllable == 0x829F) || + (curSyllable == 0x82A1) || (curSyllable == 0x82A3) || (curSyllable == 0x82A5) || + (curSyllable == 0x82A7) || (curSyllable == 0x82E1) || (curSyllable == 0x82E3) || + (curSyllable == 0x82E5) || (curSyllable == 0x82C1) || (curSyllable == 0x82EC) || + (curSyllable == 0x8341) || (curSyllable == 0x8343) || (curSyllable == 0x8345) || + (curSyllable == 0x8347) || (curSyllable == 0x8349) || (curSyllable == 0x8369) || + (curSyllable == 0x836A) || (curSyllable == 0x836B) || (curSyllable == 0x836C) || + (curSyllable == 0x836D) || (curSyllable == 0x837D) || (curSyllable == 0x837E) || + (curSyllable == 0x8380) || (curSyllable == 0x8381) || (curSyllable == 0x8382) || + (curSyllable == 0x8384) || (curSyllable == 0x8386) || (curSyllable == 0x8388) || + (curSyllable == 0x8389) || (curSyllable == 0x838A) || (curSyllable == 0x838B) || + (curSyllable == 0x838C) || (curSyllable == 0x838D) || (curSyllable == 0x838F) || + (curSyllable == 0x8390) || (curSyllable == 0x8391) || (curSyllable == 0x8392) || + (curSyllable == 0x8393) || (curSyllable == 0x8340) || (curSyllable == 0x8342) || + (curSyllable == 0x8344) || (curSyllable == 0x8346) || (curSyllable == 0x8348) || + (curSyllable == 0x8383) || (curSyllable == 0x8385) || (curSyllable == 0x8387) || + (curSyllable == 0x8362) || (curSyllable == 0x838E))) { + errorCode = CONT_ERR_VOICE_WORD; + } + + if (errorCode != 0) { + return errorCode; + } + + prevSyllable = curSyllable; + } + + if ((curSyllable == 0x82C1) || (curSyllable == 0x8362)) { + errorCode = CONT_ERR_VOICE_WORD; + } + + return errorCode; +} diff --git a/src/libultra/voice/voicecleardictionary.c b/src/libultra/voice/voicecleardictionary.c index 29766bb2a..e474bc2fd 100644 --- a/src/libultra/voice/voicecleardictionary.c +++ b/src/libultra/voice/voicecleardictionary.c @@ -1,3 +1,51 @@ -#include "global.h" +/** + * File: voicecleardictionary.c + * + * Initializes Voice Recognition System word registration dictionary. + * + * The dictionary is initialized so that the specified "numWords" can be + * registered in the dictionary. 1-255 words can be registered in the dictionary. + * + * Words cannot be registered with the osVoiceSetWord before the dictionary + * is initialized with the osVoiceClearDictionary function + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecleardictionary/osVoiceClearDictionary.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" + +s32 osVoiceClearDictionary(OSVoiceHandle* hd, u8 numWords) { + s32 errorCode; + u8 status; + u8 data[4]; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + /** + * data[0] = 2 + * data[1] = 0 + * data[2] = numWords + * data[3] = 0 + */ + *(u32*)data = 0x2000000; + data[2] = numWords; + + errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data); + if (errorCode != 0) { + return errorCode; + } + + errorCode = __osVoiceCheckResult(hd, &status); + if (errorCode & 0xFF00) { + errorCode = CONT_ERR_INVALID; + } + + return errorCode; +} diff --git a/src/libultra/voice/voicecontread2.c b/src/libultra/voice/voicecontread2.c index 38350ee5f..1477e570b 100644 --- a/src/libultra/voice/voicecontread2.c +++ b/src/libultra/voice/voicecontread2.c @@ -1,3 +1,74 @@ -#include "global.h" +/** + * File: voicecontread2.c + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontread2/__osVoiceContRead2.s") +#include "ultra64/controller_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "variables.h" + +#define READ2FORMAT(ptr) ((__OSVoiceRead2Format*)(ptr)) + +s32 __osVoiceContRead2(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[2]) { + s32 errorCode; + u8 status; + u8* ptr; + s32 retryCount = 2; + s32 i; + + __osSiGetAccess(); + + do { + ptr = (u8*)&__osPfsPifRam.ramarray; + + if ((__osContLastPoll != CONT_CMD_READ2_VOICE) || (channel != __osPfsLastChannel)) { + __osContLastPoll = CONT_CMD_READ2_VOICE; + __osPfsLastChannel = channel; + + for (i = 0; i < channel; i++, *ptr++ = 0) {} + + __osPfsPifRam.status = CONT_CMD_EXE; + + READ2FORMAT(ptr)->dummy = CONT_CMD_NOP; + READ2FORMAT(ptr)->txsize = CONT_CMD_READ2_VOICE_TX; + READ2FORMAT(ptr)->rxsize = CONT_CMD_READ2_VOICE_RX; + READ2FORMAT(ptr)->cmd = CONT_CMD_READ2_VOICE; + READ2FORMAT(ptr)->datacrc = 0xFF; + + ptr[sizeof(__OSVoiceRead2Format)] = CONT_CMD_END; + } else { + ptr += channel; + } + + READ2FORMAT(ptr)->addrh = address >> 3; + READ2FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address); + + __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + errorCode = CHNL_ERR(*READ2FORMAT(ptr)); + + if (errorCode == 0) { + if (__osVoiceContDataCrc(READ2FORMAT(ptr)->data, ARRAY_COUNT(READ2FORMAT(ptr)->data)) != + READ2FORMAT(ptr)->datacrc) { + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + break; + } + + errorCode = CONT_ERR_CONTRFAIL; + } else { + bcopy(READ2FORMAT(ptr)->data, dst, ARRAY_COUNT(READ2FORMAT(ptr)->data)); + } + } else { + errorCode = CONT_ERR_NO_CONTROLLER; + } + + } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0)); + + __osSiRelAccess(); + + return errorCode; +} diff --git a/src/libultra/voice/voicecontread36.c b/src/libultra/voice/voicecontread36.c index 38f3fe2f0..83d0fdf2e 100644 --- a/src/libultra/voice/voicecontread36.c +++ b/src/libultra/voice/voicecontread36.c @@ -1,3 +1,74 @@ -#include "global.h" +/** + * File: voicecontread36.c + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontread36/__osVoiceContRead36.s") +#include "ultra64/controller_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "variables.h" + +#define READ36FORMAT(ptr) ((__OSVoiceRead36Format*)(ptr)) + +s32 __osVoiceContRead36(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[36]) { + s32 errorCode; + u8 status; + u8* ptr; + s32 retryCount = 2; + s32 i; + + __osSiGetAccess(); + + do { + ptr = (u8*)&__osPfsPifRam.ramarray; + + if ((__osContLastPoll != CONT_CMD_READ36_VOICE) || (channel != __osPfsLastChannel)) { + __osContLastPoll = CONT_CMD_READ36_VOICE; + __osPfsLastChannel = channel; + + for (i = 0; i < channel; i++, *ptr++ = 0) {} + + __osPfsPifRam.status = CONT_CMD_EXE; + + READ36FORMAT(ptr)->dummy = CONT_CMD_NOP; + READ36FORMAT(ptr)->txsize = CONT_CMD_READ36_VOICE_TX; + READ36FORMAT(ptr)->rxsize = CONT_CMD_READ36_VOICE_RX; + READ36FORMAT(ptr)->cmd = CONT_CMD_READ36_VOICE; + READ36FORMAT(ptr)->datacrc = 0xFF; + + ptr[sizeof(__OSVoiceRead36Format)] = CONT_CMD_END; + } else { + ptr += channel; + } + + READ36FORMAT(ptr)->addrh = address >> 3; + READ36FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address); + + __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + errorCode = CHNL_ERR(*READ36FORMAT(ptr)); + + if (errorCode == 0) { + if (__osVoiceContDataCrc(READ36FORMAT(ptr)->data, ARRAY_COUNT(READ36FORMAT(ptr)->data)) != + READ36FORMAT(ptr)->datacrc) { + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + break; + } + + errorCode = CONT_ERR_CONTRFAIL; + } else { + bcopy(READ36FORMAT(ptr)->data, dst, ARRAY_COUNT(READ36FORMAT(ptr)->data)); + } + } else { + errorCode = CONT_ERR_NO_CONTROLLER; + } + + } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0)); + + __osSiRelAccess(); + + return errorCode; +} diff --git a/src/libultra/voice/voicecontrolgain.c b/src/libultra/voice/voicecontrolgain.c index d7ec8ef69..61cccde70 100644 --- a/src/libultra/voice/voicecontrolgain.c +++ b/src/libultra/voice/voicecontrolgain.c @@ -1,5 +1,41 @@ -#include "global.h" +/** + * File: voicecontrolgain.c + * + * Adjusts the input gain of the Voice Recognition System + */ -u8 D_80098180[] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0 }; +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" +#include "macros.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontrolgain/osVoiceControlGain.s") +u8 sDigitalTable[] = { 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0 }; + +s32 osVoiceControlGain(OSVoiceHandle* hd, s32 analog, s32 digital) { + s32 errorCode; + u8 cmd; + + if (analog == 0) { + cmd = 0x18; + } else { + cmd = 0x98; + } + + errorCode = __osVoiceSetADConverter(hd->mq, hd->channel, cmd); + if (errorCode != 0) { + return errorCode; + } + + if ((digital < ARRAY_COUNT(sDigitalTable)) && (digital >= 0)) { + cmd = sDigitalTable[digital] + 2; + } else { + return CONT_ERR_INVALID; + } + + errorCode = __osVoiceSetADConverter(hd->mq, hd->channel, cmd); + if (errorCode != 0) { + return errorCode; + } + + return errorCode; +} diff --git a/src/libultra/voice/voicecontwrite20.c b/src/libultra/voice/voicecontwrite20.c index 5ca3560ed..cc3af385e 100644 --- a/src/libultra/voice/voicecontwrite20.c +++ b/src/libultra/voice/voicecontwrite20.c @@ -1,3 +1,75 @@ -#include "global.h" +/** + * File: voicecontwrite20.c + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontwrite20/__osVoiceContWrite20.s") +#include "ultra64/controller_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "variables.h" + +#define WRITE20FORMAT(ptr) ((__OSVoiceWrite20Format*)(ptr)) + +s32 __osVoiceContWrite20(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[20]) { + s32 errorCode; + u8 status; + u8* ptr; + s32 retryCount = 2; + s32 i; + u8 crc; + + __osSiGetAccess(); + + do { + ptr = (u8*)&__osPfsPifRam.ramarray; + + if ((__osContLastPoll != CONT_CMD_WRITE20_VOICE) || (channel != __osPfsLastChannel)) { + __osContLastPoll = CONT_CMD_WRITE20_VOICE; + __osPfsLastChannel = channel; + + for (i = 0; i < channel; i++, *ptr++ = 0) {} + + __osPfsPifRam.status = CONT_CMD_EXE; + + WRITE20FORMAT(ptr)->dummy = CONT_CMD_NOP; + WRITE20FORMAT(ptr)->txsize = CONT_CMD_WRITE20_VOICE_TX; + WRITE20FORMAT(ptr)->rxsize = CONT_CMD_WRITE20_VOICE_RX; + WRITE20FORMAT(ptr)->cmd = CONT_CMD_WRITE20_VOICE; + WRITE20FORMAT(ptr)->datacrc = 0xFF; + + ptr[sizeof(__OSVoiceWrite20Format)] = CONT_CMD_END; + } else { + ptr += channel; + } + + WRITE20FORMAT(ptr)->addrh = address >> 3; + WRITE20FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address); + + bcopy(dst, WRITE20FORMAT(ptr)->data, ARRAY_COUNT(WRITE20FORMAT(ptr)->data)); + + __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + crc = __osVoiceContDataCrc(dst, ARRAY_COUNT(WRITE20FORMAT(ptr)->data)); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + errorCode = CHNL_ERR(*WRITE20FORMAT(ptr)); + + if (errorCode == 0) { + if (crc != WRITE20FORMAT(ptr)->datacrc) { + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + break; + } + + errorCode = CONT_ERR_CONTRFAIL; + } + } else { + errorCode = CONT_ERR_NO_CONTROLLER; + } + + } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0)); + + __osSiRelAccess(); + + return errorCode; +} diff --git a/src/libultra/voice/voicecontwrite4.c b/src/libultra/voice/voicecontwrite4.c index c28e2d762..06239219a 100644 --- a/src/libultra/voice/voicecontwrite4.c +++ b/src/libultra/voice/voicecontwrite4.c @@ -1,3 +1,75 @@ -#include "global.h" +/** + * File: voicecontwrite4.c + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicecontwrite4/__osVoiceContWrite4.s") +#include "ultra64/controller_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "variables.h" + +#define WRITE4FORMAT(ptr) ((__OSVoiceWrite4Format*)(ptr)) + +s32 __osVoiceContWrite4(OSMesgQueue* mq, s32 channel, u16 address, u8 dst[4]) { + s32 errorCode; + u8 status; + u8* ptr; + s32 retryCount = 2; + s32 i; + u8 crc; + + __osSiGetAccess(); + + do { + ptr = (u8*)&__osPfsPifRam.ramarray; + + if ((__osContLastPoll != CONT_CMD_WRITE4_VOICE) || (channel != __osPfsLastChannel)) { + __osContLastPoll = CONT_CMD_WRITE4_VOICE; + __osPfsLastChannel = channel; + + for (i = 0; i < channel; i++, *ptr++ = 0) {} + + __osPfsPifRam.status = CONT_CMD_EXE; + + WRITE4FORMAT(ptr)->dummy = CONT_CMD_NOP; + WRITE4FORMAT(ptr)->txsize = CONT_CMD_WRITE4_VOICE_TX; + WRITE4FORMAT(ptr)->rxsize = CONT_CMD_WRITE4_VOICE_RX; + WRITE4FORMAT(ptr)->cmd = CONT_CMD_WRITE4_VOICE; + WRITE4FORMAT(ptr)->datacrc = 0xFF; + + ptr[sizeof(__OSVoiceWrite4Format)] = CONT_CMD_END; + } else { + ptr += channel; + } + + WRITE4FORMAT(ptr)->addrh = address >> 3; + WRITE4FORMAT(ptr)->addrl = (address << 5) | __osContAddressCrc(address); + + bcopy(dst, WRITE4FORMAT(ptr)->data, ARRAY_COUNT(WRITE4FORMAT(ptr)->data)); + + __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + crc = __osVoiceContDataCrc(dst, ARRAY_COUNT(WRITE4FORMAT(ptr)->data)); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + errorCode = CHNL_ERR(*WRITE4FORMAT(ptr)); + + if (errorCode == 0) { + if (crc != WRITE4FORMAT(ptr)->datacrc) { + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + break; + } + + errorCode = CONT_ERR_CONTRFAIL; + } + } else { + errorCode = CONT_ERR_NO_CONTROLLER; + } + + } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0)); + + __osSiRelAccess(); + + return errorCode; +} diff --git a/src/libultra/voice/voicecrc.c b/src/libultra/voice/voicecrc.c index 35b7b8656..36ffc4373 100644 --- a/src/libultra/voice/voicecrc.c +++ b/src/libultra/voice/voicecrc.c @@ -4,7 +4,7 @@ * * For general information about CRC, see the crc.c file (that's a lot of c's!). */ -#include "global.h" +#include "libc/stddef.h" #define VOICE_CRC_LENGTH 8 #define VOICE_CRC_GENERATOR 0x85 diff --git a/src/libultra/voice/voicegetreaddata.c b/src/libultra/voice/voicegetreaddata.c index 5940a1f8b..d271f71c7 100644 --- a/src/libultra/voice/voicegetreaddata.c +++ b/src/libultra/voice/voicegetreaddata.c @@ -1,3 +1,125 @@ -#include "global.h" +/** + * File: voicegetreaddata.c + * + * Gets voice recognition result from the Voice Recognition System + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicegetreaddata/osVoiceGetReadData.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" + +s32 osVoiceGetReadData(OSVoiceHandle* hd, OSVoiceData* result) { + static u8 sHandleStatus; + s32 errorCode; + s32 i; + u8 status; + u8 data[36]; + + switch (hd->mode) { + case VOICE_HANDLE_MODE_1: + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 1) { + return CONT_ERR_NOT_READY; + } + + errorCode = __osVoiceContRead2(hd->mq, hd->channel, 0, data); + if (errorCode != 0) { + return errorCode; + } + + sHandleStatus = data[0] & 7; + hd->status = sHandleStatus; + if ((sHandleStatus != 0) && (sHandleStatus != 7)) { + return CONT_ERR_NOT_READY; + } + // fallthrough + case VOICE_HANDLE_MODE_2: + hd->mode = VOICE_HANDLE_MODE_2; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + *(u32*)data = 0x600; + errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data); + if (errorCode != 0) { + return errorCode; + } + // fallthrough + case VOICE_HANDLE_MODE_3: + hd->mode = VOICE_HANDLE_MODE_3; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 1) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + errorCode = __osVoiceContRead36(hd->mq, hd->channel, 0, data); + if (errorCode != 0) { + return errorCode; + } + + result->warning = data[4] + (data[5] << 8); + result->answerNum = data[6]; + result->voiceLevel = data[8] + (data[9] << 8); + result->voiceRelLevel = data[10] + (data[11] << 8); + result->voiceTime = data[12] + (data[13] << 8); + + for (i = 0; i < 5; i++) { + result->answer[i] = data[14 + (i << 2)] + (data[15 + (i << 2)] << 8); + result->distance[i] = data[16 + (i << 2)] + (data[17 + (i << 2)] << 8); + } + + if (result->answer[0] == 0x7FFF) { + result->answerNum = 0; + } + + hd->status = data[34] & 7; + if ((sHandleStatus == 0) || (hd->status == 0)) { + break; + } + // fallthrough + case VOICE_HANDLE_MODE_4: + hd->mode = VOICE_HANDLE_MODE_4; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 1) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + errorCode = __osVoiceContRead2(hd->mq, hd->channel, 0, data); + if (errorCode != 0) { + return errorCode; + } + + hd->status = data[0] & 7; + if (data[0] & 7) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + break; + + default: + return CONT_ERR_INVALID; + } + + hd->mode = VOICE_HANDLE_MODE_0; + return errorCode; +} diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c index 3840ec62b..444ae6233 100644 --- a/src/libultra/voice/voicegetstatus.c +++ b/src/libultra/voice/voicegetstatus.c @@ -1,56 +1,62 @@ -#include "global.h" -#include "io/controller.h" +/** + * File: voicegetstatus.c + */ -s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status) { +#include "ultra64/controller_voice.h" +#include "io/controller.h" +#include "functions.h" + +s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 channel, u8* status) { __OSContRequestHeaderAligned header; - s32 ret = 0; + s32 errorCode = 0; s32 i; - u8* ptr = (u8*)&__osContPifRam; - s32 var = 2; + u8* ptr = (u8*)&__osContPifRam.ramarray; + s32 retryCount = 2; __osSiGetAccess(); do { - if (ret != CONT_ERR_CONTRFAIL) { + if (errorCode != CONT_ERR_CONTRFAIL) { __osContPifRam.status = CONT_CMD_READ_BUTTON; - for (i = 0; i < port; i++, *ptr++ = 0) {} + for (i = 0; i < channel; i++, *ptr++ = 0) {} - *ptr++ = 1; - *ptr++ = 3; + *ptr++ = CONT_CMD_REQUEST_STATUS_TX; + *ptr++ = CONT_CMD_REQUEST_STATUS_RX; *ptr = CONT_CMD_REQUEST_STATUS; ptr += 4; *ptr = CONT_CMD_END; __osContLastPoll = CONT_CMD_END; - ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam); + errorCode = __osSiRawStartDma(OS_WRITE, &__osContPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); } - ret = __osSiRawStartDma(OS_READ, &__osContPifRam); + errorCode = __osSiRawStartDma(OS_READ, &__osContPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); - ptr = (u8*)&__osContPifRam + port; + ptr = (u8*)&__osContPifRam.ramarray + channel; header = *((__OSContRequestHeaderAligned*)ptr); - ret = (u8)((header.rxsize & 0xC0) >> 4); + errorCode = (u8)CHNL_ERR(header); *status = header.status; - if (ret == 0) { + if (errorCode == 0) { if ((header.typeh == 0) && (header.typel == 1)) { if (header.status & 4) { - ret = CONT_ERR_CONTRFAIL; + errorCode = CONT_ERR_CONTRFAIL; } } else { - ret = CONT_ERR_DEVICE; + errorCode = CONT_ERR_DEVICE; } - } else if (ret & CONT_NO_RESPONSE_ERROR) { - ret = CONT_ERR_NO_CONTROLLER; + } else if (errorCode & CONT_NO_RESPONSE_ERROR) { + errorCode = CONT_ERR_NO_CONTROLLER; } else { - ret = CONT_ERR_CONTRFAIL; + errorCode = CONT_ERR_CONTRFAIL; } - } while ((ret == CONT_ERR_CONTRFAIL) && (var-- >= 0)); + } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0)); __osSiRelAccess(); - return (ret); + + return errorCode; } diff --git a/src/libultra/voice/voiceinit.c b/src/libultra/voice/voiceinit.c index 920bc4818..2a777edaf 100644 --- a/src/libultra/voice/voiceinit.c +++ b/src/libultra/voice/voiceinit.c @@ -1,3 +1,69 @@ -#include "global.h" +/** + * File: voiceinit.c + * + * Initializes Voice Recognition System control structure and hardware + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voiceinit/osVoiceInit.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "macros.h" + +static u8 sCmds[] = { + 0x1E, 0x6E, 0x08, 0x56, 0x03, +}; + +s32 osVoiceInit(OSMesgQueue* mq, OSVoiceHandle* hd, s32 channel) { + s32 errorCode; + s32 i; + u8 status = 0; + u8 data[4]; + + hd->channel = channel; + hd->mq = mq; + hd->mode = VOICE_HANDLE_MODE_0; + + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (__osContChannelReset(mq, channel) != 0) { + return CONT_ERR_CONTRFAIL; + } + + for (i = 0; i < ARRAY_COUNT(sCmds); i++) { + errorCode = __osVoiceSetADConverter(mq, channel, sCmds[i]); + if (errorCode != 0) { + return errorCode; + } + } + + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + return errorCode; + } + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + /** + * data[0] = 0 + * data[1] = 0 + * data[2] = 1 + * data[3] = 0 + */ + *(u32*)data = 0x100; + errorCode = __osVoiceContWrite4(mq, channel, 0, data); + if (errorCode != 0) { + return errorCode; + } + + errorCode = __osVoiceCheckResult(hd, &status); + if (errorCode & 0xFF00) { + errorCode = CONT_ERR_INVALID; + } + + return errorCode; +} diff --git a/src/libultra/voice/voicemaskdictionary.c b/src/libultra/voice/voicemaskdictionary.c index 3de841de3..a8f090329 100644 --- a/src/libultra/voice/voicemaskdictionary.c +++ b/src/libultra/voice/voicemaskdictionary.c @@ -1,3 +1,57 @@ -#include "global.h" +/** + * File: voicemaskdictionary.c + * + * Mask words registered in the voice recognition system + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicemaskdictionary/osVoiceMaskDictionary.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "macros.h" + +s32 osVoiceMaskDictionary(OSVoiceHandle* hd, u8* maskPattern, s32 size) { + s32 errorCode; + s32 i; + s32 j; + u8 status; + u8 data[20]; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + if (size & 1) { + j = size + 1; + } else { + j = size; + } + + bzero(&data, ARRAY_COUNT(data)); + + data[ARRAY_COUNT(data) - 2 - j] = 4; + + for (i = 0; i < j; i += 2) { + data[i + ARRAY_COUNT(data) - j] = maskPattern[i]; + data[i + ARRAY_COUNT(data) - j + 1] = maskPattern[i + 1]; + } + + if (size & 1) { + data[ARRAY_COUNT(data) - 1] = 0; + } + + errorCode = __osVoiceContWrite20(hd->mq, hd->channel, 0, data); + if (errorCode == 0) { + errorCode = __osVoiceCheckResult(hd, &status); + if (errorCode & 0xFF00) { + errorCode = CONT_ERR_INVALID; + } + } + + return errorCode; +} diff --git a/src/libultra/voice/voicesetadconverter.c b/src/libultra/voice/voicesetadconverter.c index c1b8fa002..2a6ebfbc7 100644 --- a/src/libultra/voice/voicesetadconverter.c +++ b/src/libultra/voice/voicesetadconverter.c @@ -1,3 +1,70 @@ -#include "global.h" +/** + * File: voicesetadconverter.c + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicesetadconverter/__osVoiceSetADConverter.s") +#include "ultra64/controller_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "variables.h" + +#define SWRITEFORMAT(ptr) ((__OSVoiceSWriteFormat*)(ptr)) + +s32 __osVoiceSetADConverter(OSMesgQueue* mq, s32 channel, u8 data) { + s32 errorCode; + s32 i; + u8* ptr; + u8 status; + s32 retryCount = 2; + + __osSiGetAccess(); + + do { + ptr = (u8*)&__osPfsPifRam.ramarray; + + if ((__osContLastPoll != CONT_CMD_SWRITE_VOICE) || (channel != __osPfsLastChannel)) { + __osContLastPoll = CONT_CMD_SWRITE_VOICE; + __osPfsLastChannel = channel; + + for (i = 0; i < channel; i++, *ptr++ = 0) {} + + __osPfsPifRam.status = CONT_CMD_EXE; + + SWRITEFORMAT(ptr)->txsize = CONT_CMD_SWRITE_VOICE_TX; + SWRITEFORMAT(ptr)->rxsize = CONT_CMD_SWRITE_VOICE_RX; + SWRITEFORMAT(ptr)->cmd = CONT_CMD_SWRITE_VOICE; + SWRITEFORMAT(ptr)->datacrc = 0; + + ptr[sizeof(__OSVoiceSWriteFormat)] = CONT_CMD_END; + } else { + ptr += channel; + } + + SWRITEFORMAT(ptr)->data = data; + SWRITEFORMAT(ptr)->scrc = __osContAddressCrc(data << 3); + + __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + __osSiRawStartDma(OS_READ, &__osPfsPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + errorCode = CHNL_ERR(*SWRITEFORMAT(ptr)); + + if (errorCode == 0) { + if (SWRITEFORMAT(ptr)->datacrc & 1) { + errorCode = __osVoiceGetStatus(mq, channel, &status); + if (errorCode != 0) { + break; + } + + errorCode = CONT_ERR_CONTRFAIL; + } + } else { + errorCode = CONT_ERR_NO_CONTROLLER; + } + + } while ((errorCode == CONT_ERR_CONTRFAIL) && (retryCount-- >= 0)); + + __osSiRelAccess(); + + return errorCode; +} diff --git a/src/libultra/voice/voicesetword.c b/src/libultra/voice/voicesetword.c index e50f26874..2dfe58b94 100644 --- a/src/libultra/voice/voicesetword.c +++ b/src/libultra/voice/voicesetword.c @@ -1,3 +1,69 @@ -#include "global.h" +/** + * File: voicesetword.c + * + * Registers words to the Voice Recognition System dictionary + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicesetword/osVoiceSetWord.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" +#include "functions.h" +#include "macros.h" + +s32 osVoiceSetWord(OSVoiceHandle* hd, u8* word) { + s32 i; + s32 k; + s32 errorCode; + u8 status; + u8 data[40]; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + k = 0; + + while (word[k] != 0) { + k += 2; + } + + bzero(data, ARRAY_COUNT(data)); + + for (i = 0; i < k; i += 2) { + data[ARRAY_COUNT(data) - 1 - k + i] = word[i]; + data[ARRAY_COUNT(data) - 1 - k + i - 1] = word[i + 1]; + } + + data[ARRAY_COUNT(data) - 1 - i - 5] = 3; + + if (k >= 15) { + errorCode = __osVoiceContWrite20(hd->mq, hd->channel, 0, &data[0]); + if (errorCode != 0) { + return errorCode; + } + } + + errorCode = __osVoiceContWrite20(hd->mq, hd->channel, 0, &data[20]); + if (errorCode != 0) { + return errorCode; + } + + errorCode = __osVoiceCheckResult(hd, &status); + + if (errorCode != 0) { + if (errorCode & 0x100) { + errorCode = CONT_ERR_VOICE_MEMORY; + } else if (errorCode & 0x200) { + errorCode = CONT_ERR_VOICE_WORD; + } else if (errorCode & 0xFF00) { + errorCode = CONT_ERR_INVALID; + } + } + + return errorCode; +} diff --git a/src/libultra/voice/voicestartreaddata.c b/src/libultra/voice/voicestartreaddata.c index e7105a7d4..398d10a15 100644 --- a/src/libultra/voice/voicestartreaddata.c +++ b/src/libultra/voice/voicestartreaddata.c @@ -1,3 +1,49 @@ -#include "global.h" +/** + * File: voicestartreaddata.c + * + * Start voice recognition by the Voice Recognition System + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicestartreaddata/osVoiceStartReadData.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" + +s32 osVoiceStartReadData(OSVoiceHandle* hd) { + s32 errorCode; + u8 status; + u8 data[4]; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + if (hd->mode != VOICE_HANDLE_MODE_0) { + return CONT_ERR_INVALID; + } + + /** + * data[0] = 5 + * data[1] = 0 + * data[2] = 0 + * data[3] = 0 + */ + *(u32*)data = 0x5000000; + errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data); + + if (errorCode == 0) { + errorCode = __osVoiceCheckResult(hd, &status); + + if (errorCode & 0xFF00) { + errorCode = CONT_ERR_INVALID; + } else { + hd->mode = VOICE_HANDLE_MODE_1; + } + } + + return errorCode; +} diff --git a/src/libultra/voice/voicestopread.c b/src/libultra/voice/voicestopread.c index f032fc40e..570613428 100644 --- a/src/libultra/voice/voicestopread.c +++ b/src/libultra/voice/voicestopread.c @@ -1,3 +1,60 @@ -#include "global.h" +/** + * File: voicestopread.c + * + * Forcibly stops voice recognition processing by the Voice Recognition System + */ -#pragma GLOBAL_ASM("asm/non_matchings/boot/voicestopread/osVoiceStopReadData.s") +#include "ultra64/controller_voice.h" +#include "ultra64/os_voice.h" +#include "io/controller.h" + +s32 osVoiceStopReadData(OSVoiceHandle* hd) { + s32 errorCode; + s32 i; + u8 status; + u8 data[4]; + + errorCode = __osVoiceGetStatus(hd->mq, hd->channel, &status); + if (errorCode != 0) { + return errorCode; + } + + if (status & 2) { + return CONT_ERR_VOICE_NO_RESPONSE; + } + + if (hd->mode == VOICE_HANDLE_MODE_0) { + return CONT_ERR_INVALID; + } + + /** + * data[0] = 0 + * data[1] = 0 + * data[2] = 7 + * data[3] = 0 + */ + *(u32*)data = 0x700; + errorCode = __osVoiceContWrite4(hd->mq, hd->channel, 0, data); + + if (errorCode == 0) { + i = 0; + do { + errorCode = __osVoiceCheckResult(hd, &status); + if (errorCode & 0xFF00) { + if (((errorCode & 7) == 0) || ((errorCode & 7) == 7)) { + errorCode = 0; + hd->mode = VOICE_HANDLE_MODE_0; + } else { + errorCode = CONT_ERR_INVALID; + } + } else { + hd->mode = VOICE_HANDLE_MODE_0; + } + i++; + } while ((errorCode == CONT_ERR_VOICE_NO_RESPONSE) && (i < 20)); + } + + if (i >= 20) {} + + return errorCode; +} diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index e4c0138f3..b2c82bf7f 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -71,9 +71,7 @@ 0x80097F70:("__osTimerList","OSTimer*","",0x4), 0x80097F80:("D_80097F80","f32","",0x4), 0x80097F90:("D_80097F90","f32","",0x4), - 0x80097FA0:("D_80097FA0","UNK_TYPE1","",0x1), - 0x80097FA4:("D_80097FA4","UNK_TYPE1","",0x1), - 0x80097FA5:("D_80097FA5","UNK_TYPE1","",0x1), + 0x80097FA0:("sCmds","UNK_TYPE1","",0x1), 0x80097FB0:("__osPfsLastChannel","s32","",0x4), 0x80097FC0:("osViModeNtscLan1","OSViMode","",0x50), 0x80098010:("osViModeMpalLan1","OSViMode","",0x50), @@ -86,7 +84,7 @@ 0x80098144:("udigs","u8","[]",0x14), 0x80098160:("__osViDevMgr","OSDevMgr","",0x1c), 0x8009817C:("__additional_scanline","UNK_TYPE4","",0x4), - 0x80098180:("D_80098180","UNK_TYPE1","",0x1), + 0x80098180:("sDigitalTable","UNK_TYPE1","",0x1), 0x80098190:("D_80098190","char","[]",0x5), 0x80098198:("D_80098198","char","[]",0x5), 0x800981A0:("D_800981A0","char","[]",0x7), @@ -338,7 +336,7 @@ 0x8009CF18:("__osEepromTimer","OSTimer","",0x20), 0x8009CF38:("D_8009CF38","OSMesgQueue","",0x18), 0x8009CF50:("D_8009CF50","OSMesg","",0x4), - 0x8009CF60:("D_8009CF60","UNK_TYPE1","",0x1), + 0x8009CF60:("sHandleStatus","UNK_TYPE1","",0x1), 0x8009CF70:("D_8009CF70","UNK_TYPE4","",0x4), 0x8009CF80:("__osThreadSave","OSThread","",0x1b0), 0x8009D130:("D_8009D130","OSPiHandle","",0x74),