From 9493c2a02cdbd8828572ffd3a3f9e03703174be8 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sat, 16 Sep 2023 22:16:27 -0700 Subject: [PATCH 01/89] m_Do_machine (#43) --- configure.py | 2 +- include/JSystem/JFramework/JFWSystem.h | 26 +- include/JSystem/JKernel/JKRAram.h | 6 +- include/JSystem/JKernel/JKRDvdAramRipper.h | 4 +- include/JSystem/JKernel/JKRDvdRipper.h | 6 +- include/JSystem/JMath/JMath.h | 1 + include/dolphin/base/PPCArch.h | 504 ++++++++++++++++++++ include/dolphin/os/OSMemory.h | 1 + include/dolphin/os/OSRtc.h | 1 + include/m_Do/m_Do_DVDError.h | 1 + include/m_Do/m_Do_ext.h | 5 + include/m_Do/m_Do_machine.h | 2 +- src/m_Do/m_Do_machine.cpp | 520 ++++++++++++++++++++- 13 files changed, 1053 insertions(+), 26 deletions(-) create mode 100644 include/dolphin/base/PPCArch.h diff --git a/configure.py b/configure.py index 775a07def..757325b5f 100644 --- a/configure.py +++ b/configure.py @@ -247,7 +247,7 @@ config.libs = [ Object(NonMatching, "m_Do/m_Do_audio.cpp"), Object(NonMatching, "m_Do/m_Do_controller_pad.cpp"), Object(NonMatching, "m_Do/m_Do_graphic.cpp"), - Object(NonMatching, "m_Do/m_Do_machine.cpp"), + Object(Matching, "m_Do/m_Do_machine.cpp"), Object(NonMatching, "m_Do/m_Do_mtx.cpp"), Object(NonMatching, "m_Do/m_Do_ext.cpp"), Object(NonMatching, "m_Do/m_Do_lib.cpp"), diff --git a/include/JSystem/JFramework/JFWSystem.h b/include/JSystem/JFramework/JFWSystem.h index 3ff249b83..65a2b83fb 100644 --- a/include/JSystem/JFramework/JFWSystem.h +++ b/include/JSystem/JFramework/JFWSystem.h @@ -1,7 +1,7 @@ #ifndef JFWSYSTEM_H #define JFWSYSTEM_H -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" typedef struct _GXRenderModeObj GXRenderModeObj; class JKRExpHeap; @@ -32,6 +32,30 @@ struct JFWSystem { static JUTConsole* getSystemConsole() { return systemConsole; } static JKRExpHeap* getSystemHeap() { return systemHeap; } + static void setMaxStdHeap(int max) { + JUT_ASSERT(47, sInitCalled == 0); + CSetUpParam::maxStdHeaps = max; + } + static void setSysHeapSize(u32 size) { + JUT_ASSERT(50, sInitCalled == 0); + CSetUpParam::sysHeapSize = size; + } + static void setFifoBufSize(u32 size) { + JUT_ASSERT(53, sInitCalled == 0); + CSetUpParam::fifoBufSize = size; + } + static void setAramAudioBufSize(u32 size) { + JUT_ASSERT(58, sInitCalled == 0); + CSetUpParam::aramAudioBufSize = size; + } + static void setAramGraphBufSize(u32 size) { + JUT_ASSERT(61, sInitCalled == 0); + CSetUpParam::aramGraphBufSize = size; + } + static void setRenderMode(GXRenderModeObj* p_modeObj) { + JUT_ASSERT(80, sInitCalled == 0); + CSetUpParam::renderMode = p_modeObj; + } static JKRExpHeap* rootHeap; static JKRExpHeap* systemHeap; diff --git a/include/JSystem/JKernel/JKRAram.h b/include/JSystem/JKernel/JKRAram.h index 171072f39..18269423a 100644 --- a/include/JSystem/JKernel/JKRAram.h +++ b/include/JSystem/JKernel/JKRAram.h @@ -55,14 +55,14 @@ public: return (u8)groupId; } - static u32 getSZSBufferSize() { return sSZSBufferSize; } - static void setSZSBufferSize(u32 size) { sSZSBufferSize = size; } + static u32 getSzpBufferSize() { return sSzpBufferSize; } + static void setSzpBufferSize(u32 size) { sSzpBufferSize = size; } static OSMessageQueue sMessageQueue; private: static JKRAram* sAramObject; - static u32 sSZSBufferSize; + static u32 sSzpBufferSize; static OSMessage sMessageBuffer[4]; static JSUList sAramCommandList; }; diff --git a/include/JSystem/JKernel/JKRDvdAramRipper.h b/include/JSystem/JKernel/JKRDvdAramRipper.h index 201de6be4..1046e5adf 100644 --- a/include/JSystem/JKernel/JKRDvdAramRipper.h +++ b/include/JSystem/JKernel/JKRDvdAramRipper.h @@ -42,11 +42,11 @@ public: static JKRADCommand* callCommand_Async(JKRADCommand*); static bool syncAram(JKRADCommand*, int); - static void setSZSBufferSize(u32 size) { sSZSBufferSize = size; } + static void setSzpBufferSize(u32 size) { sSzpBufferSize = size; } // TODO: fix type static u8 sDvdAramAsyncList[12]; - static u32 sSZSBufferSize; + static u32 sSzpBufferSize; }; inline JKRAramBlock *JKRDvdToAram(s32 entrynum, u32 p2, JKRExpandSwitch expSwitch, u32 p4, u32 p5, u32 *p6) { diff --git a/include/JSystem/JKernel/JKRDvdRipper.h b/include/JSystem/JKernel/JKRDvdRipper.h index 8b6dce0b4..139b8a7fd 100644 --- a/include/JSystem/JKernel/JKRDvdRipper.h +++ b/include/JSystem/JKernel/JKRDvdRipper.h @@ -25,7 +25,7 @@ class JKRDvdFile; class JKRDvdRipper { public: static JSUList sDvdAsyncList; - static u32 sSZSBufferSize; + static u32 sSzpBufferSize; enum EAllocDirection { UNKNOWN_EALLOC_DIRECTION = 0, @@ -33,7 +33,7 @@ public: ALLOC_DIRECTION_BACKWARD = 2, }; - static void setSZSBufferSize(u32 size) { sSZSBufferSize = size; } + static void setSzpBufferSize(u32 size) { sSzpBufferSize = size; } static void* loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*); @@ -43,7 +43,7 @@ public: u32, int*); static u8 isErrorRetry(void); - inline static u32 getSZSBufferSize() { return sSZSBufferSize; } + inline static u32 getSzpBufferSize() { return sSzpBufferSize; } }; // void JKRDecompressFromDVD(JKRDvdFile*, void*, u32, u32, u32, u32, u32*); diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index aa0fbc541..fac4d5b42 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -3,6 +3,7 @@ #include "dolphin/mtx/mtx.h" +void JMANewSinTable(u8 param_1); void JMAMTXApplyScale(const Mtx, Mtx, f32, f32, f32); void JMAEulerToQuat(s16 param_0, s16 param_1, s16 param_2, Quaternion* param_3); diff --git a/include/dolphin/base/PPCArch.h b/include/dolphin/base/PPCArch.h new file mode 100644 index 000000000..120ba9225 --- /dev/null +++ b/include/dolphin/base/PPCArch.h @@ -0,0 +1,504 @@ +#ifndef PPCARCH_H +#define PPCARCH_H + +#include "dolphin/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define CTR 9 +#define XER 1 +#define LR 8 + +#define UPMC1 937 +#define UPMC2 938 +#define UPMC3 941 +#define UPMC4 942 + +#define USIA 939 + +#define UMMCR0 936 +#define UMMCR1 940 + +#define HID0 1008 +#define HID1 1009 + +#define PVR 287 + +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 539 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 + +#define SDR1 25 + +#define SPRG0 272 +#define SPRG1 273 +#define SPRG2 274 +#define SPRG3 275 + +#define DAR 19 +#define DSISR 18 + +#define SRR0 26 +#define SRR1 27 + +#define EAR 282 + +#define DABR 1013 + +#define TBL 284 +#define TBU 285 + +#define L2CR 1017 + +#define DEC 22 + +#define IABR 1010 + +#define PMC1 953 +#define PMC2 954 +#define PMC3 957 +#define PMC4 958 + +#define SIA 955 + +#define MMCR0 952 +#define MMCR1 956 + +#define THRM1 1020 +#define THRM2 1021 +#define THRM3 1022 + +#define ICTC 1019 + +#define GQR0 912 +#define GQR1 913 +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define HID2 920 + +#define WPAR 921 + +#define DMA_U 922 +#define DMA_L 923 + +#define MSR_POW 0x00040000 // Power Management +#define MSR_ILE 0x00010000 // Interrupt Little Endian +#define MSR_EE 0x00008000 // external interrupt +#define MSR_PR 0x00004000 // privilege level(should be 0) +#define MSR_FP 0x00002000 // floating point available +#define MSR_ME 0x00001000 // machine check enable +#define MSR_FE0 0x00000800 // floating point exception enable +#define MSR_SE 0x00000400 // single step trace enable +#define MSR_BE 0x00000200 // branch trace enable +#define MSR_FE1 0x00000100 // floating point exception enable +#define MSR_IP 0x00000040 // Exception prefix +#define MSR_IR 0x00000020 // instruction relocate +#define MSR_DR 0x00000010 // data relocate +#define MSR_PM 0x00000004 // Performance monitor marked mode +#define MSR_RI 0x00000002 // Recoverable interrupt +#define MSR_LE 0x00000001 // Little Endian + +#define MSR_POW_BIT 13 // Power Management +#define MSR_ILE_BIT 15 // Interrupt Little Endian +#define MSR_EE_BIT 16 // external interrupt +#define MSR_PR_BIT 17 // privilege level (should be 0) +#define MSR_FP_BIT 18 // floating point available +#define MSR_ME_BIT 19 // machine check enable +#define MSR_FE0_BIT 20 // floating point exception enable +#define MSR_SE_BIT 21 // single step trace enable +#define MSR_BE_BIT 22 // branch trace enable +#define MSR_FE1_BIT 23 // floating point exception enable +#define MSR_IP_BIT 25 // Exception prefix +#define MSR_IR_BIT 26 // instruction relocate +#define MSR_DR_BIT 27 // data relocate +#define MSR_PM_BIT 29 // Performance monitor marked mode +#define MSR_RI_BIT 30 // Recoverable interrupt +#define MSR_LE_BIT 31 // Little Endian + +/*---------------------------------------------------------------------------* + HID0 bits + *---------------------------------------------------------------------------*/ +#define HID0_EMCP 0x80000000 // Enable MCP +#define HID0_DBP 0x40000000 // Enable 60x bus address and data parity chk +#define HID0_EBA 0x20000000 // Enable 60x address parity checking +#define HID0_EBD 0x10000000 // Enable 60x data parity checking +#define HID0_BCLK 0x08000000 // CLK_OUT output enable and clk selection +#define HID0_ECLK 0x02000000 // CLK_OUT output enable and clk selection +#define HID0_PAR 0x01000000 // Disable !ARTRY precharge +#define HID0_DOZE 0x00800000 // Doze mode enable +#define HID0_NAP 0x00400000 // Nap mode enable +#define HID0_SLEEP 0x00200000 // Sleep mode enable +#define HID0_DPM 0x00100000 // Dynamic power management enable +#define HID0_NHR 0x00010000 // Not hard reset (0 hard reset if s/w set it) +#define HID0_ICE 0x00008000 // Instruction cache enable +#define HID0_DCE 0x00004000 // Data cache enable +#define HID0_ILOCK 0x00002000 // ICache lock +#define HID0_DLOCK 0x00001000 // DCache lock +#define HID0_ICFI 0x00000800 // ICache flash invalidate +#define HID0_DCFI 0x00000400 // DCache flash invalidate +#define HID0_SPD 0x00000200 // Speculative cache access enable (0 enable) +#define HID0_IFEM 0x00000100 // Enable M bit on bus for Ifetch +#define HID0_SGE 0x00000080 // Store gathering enable +#define HID0_DCFA 0x00000040 // DCache flush assist - set before a flush +#define HID0_BTIC 0x00000020 // Branch target icache enable +#define HID0_ABE 0x00000008 // Address bcast enable +#define HID0_BHT 0x00000004 // Branch history table enable +#define HID0_NOOPTI 0x00000001 // No-op Dcache touch instructions + +#define HID0_ICE_BIT 16 // Instruction cache enable +#define HID0_DCE_BIT 17 // Data cache enable +#define HID0_ILOCK_BIT 18 // ICache lock +#define HID0_DLOCK_BIT 19 // DCache lock + +#define HID2_LSQE 0x80000000 // L/S quantize enable +#define HID2_WPE 0x40000000 // Write pipe enable +#define HID2_PSE 0x20000000 // Paired single enable +#define HID2_LCE 0x10000000 // Locked cache enable + +#define HID2_DCHERR 0x00800000 // ERROR: dcbz_l cache hit +#define HID2_DNCERR 0x00400000 // ERROR: DMA access to normal cache +#define HID2_DCMERR 0x00200000 // ERROR: DMA cache miss error +#define HID2_DQOERR 0x00100000 // ERROR: DMA queue overflow +#define HID2_DCHEE 0x00080000 // dcbz_l cache hit error enable +#define HID2_DNCEE 0x00040000 // DMA access to normal cache error enable +#define HID2_DCMEE 0x00020000 // DMA cache miss error error enable +#define HID2_DQOEE 0x00010000 // DMA queue overflow error enable + +#define HID2_DMAQL_MASK 0x0F000000 // DMA queue length mask +#define HID2_DMAQL_SHIFT 24 // DMA queue shift + +#define HID2_LSQE_BIT 0 +#define HID2_WPE_BIT 1 +#define HID2_PSE_BIT 2 +#define HID2_LCE_BIT 3 + +#define HID2_DCHERR_BIT 8 +#define HID2_DNCERR_BIT 9 +#define HID2_DCMERR_BIT 10 +#define HID2_DQOERR_BIT 11 +#define HID2_DCHEE_BIT 12 +#define HID2_DNCEE_BIT 13 +#define HID2_DCMEE_BIT 14 +#define HID2_DQOEE_BIT 15 + +#define GQR_LOAD_SCALE_MASK 0x3F000000 // load scale field +#define GQR_LOAD_TYPE_MASK 0x00070000 // load type field +#define GQR_STORE_SCALE_MASK 0x00003F00 // store scale field +#define GQR_STORE_TYPE_MASK 0x00000007 // store type field + +typedef struct { + u32 _pad0 :2; + u32 loadScale :6; + u32 _pad1 :5; + u32 loadType :3; + u32 _pad2 :2; + u32 storeScale :6; + u32 _pad3 :5; + u32 storeType :3; +} PPC_GQR_t; + +typedef union { + u32 val; + PPC_GQR_t f; +} PPC_GQR_u; + + +#define DMA_U_ADDR_MASK 0xFFFFFFE0 // Start addr in memory +#define DMA_U_LEN_U_MASK 0x0000001F // lines to transfer (U) + +#define DMA_L_LC_ADDR_MASK 0xFFFFFFE0 // Start addr in LC +#define DMA_L_LOAD 0x00000010 // 0 - store, 1 - load +#define DMA_L_STORE 0x00000000 // 0 - store, 1 - load +#define DMA_L_LEN_MASK 0x0000000C // lines to transfer (L) +#define DMA_L_TRIGGER 0x00000002 // 0 - cmd inactive, 1 - cmd rdy +#define DMA_L_FLUSH 0x00000001 // 1 - Flush DMA queue + +typedef struct { + u32 memAddr :27; + u32 dmaLenU :5; +} PPC_DMA_U_t; + +typedef union { + u32 val; + PPC_DMA_U_t f; +} PPC_DMA_U_u; + + +typedef struct { + u32 lcAddr :27; + u32 dmaLd :1; + u32 dmaLenL :2; + u32 dmaTrigger :1; + u32 dmaFlush :1; +} PPC_DMA_L_t; + + +typedef union { + u32 val; + PPC_DMA_L_t f; +} PPC_DMA_L_u; + + +#define WPAR_ADDR 0xFFFFFFE0 // 32byte gather address +#define WPAR_BNE 0x00000001 // Buffer not empty (R) + +#define SRR1_DMA_BIT 0x00200000 +#define SRR1_L2DP_BIT 0x00100000 + +#define L2CR_L2E 0x80000000 // L2 Enable +#define L2CR_L2PE 0x40000000 // L2 data parity generation and checking enable + +#define L2CR_L2SIZ_256K 0x10000000 // L2 size 256K +#define L2CR_L2SIZ_512K 0x20000000 // L2 size 512 +#define L2CR_L2SIZ_1M 0x30000000 // L2 size 1M + +#define L2CR_L2CLK_1_0 0x02000000 // L2 clock ratio 1 +#define L2CR_L2CLK_1_5 0x04000000 // L2 clock ratio 1.5 +#define L2CR_L2CLK_2_0 0x08000000 // L2 clock ratio 2 +#define L2CR_L2CLK_2_5 0x0A000000 // L2 clock ratio 2.5 +#define L2CR_L2CLK_3_0 0x0C000000 // L2 clock ratio 3 + +#define L2CR_RAM_FLOW_THRU_BURST 0x00000000 // L2 RAM type flow-through sync. burst SRAM +#define L2CR_RAM_PIPELINE_BURST 0x01000000 // L2 RAM type pipelined sync. burst SRAM +#define L2CR_RAM_PIPELINE_LATE 0x01800000 // L2 RAM type pipelined sync. late-write SRAM + +#define L2CR_L2DO 0x00400000 // Data only +#define L2CR_L2I 0x00200000 // Global invalidate +#define L2CR_L2CTL 0x00100000 // ZZ enable +#define L2CR_L2WT 0x00080000 // L2 write through +#define L2CR_L2TS 0x00040000 // L2 test support + +#define L2CR_L2OH_0_5 0x00000000 // L2 output hold 0.5 ns +#define L2CR_L2OH_1_0 0x00010000 // L2 output hold 1.0 ns + +#define L2CR_L2SL 0x00008000 // L2 DLL slow +#define L2CR_L2DF 0x00004000 // L2 differential clock +#define L2CR_L2BYP 0x00002000 // L2 DLL bypass +#define L2CR_L2CS 0x00000200 // L2 clock stop +#define L2CR_L2DRO 0x00000100 // L2 DLL rollover checkstop enable +#define L2CR_L2CTR_MASK 0x000000FE // L2 counter value mask +#define L2CR_L2IP 0x00000001 // L2 global invalidate in progress + +#define MMCR0_DIS 0x80000000 // Disables counting unconditionally +#define MMCR0_DP 0x40000000 // Disables counting while in supervisor mode +#define MMCR0_DU 0x20000000 // Disables counting while in user mode +#define MMCR0_DMS 0x10000000 // Disables counting while MSR[PM] is set +#define MMCR0_DMR 0x08000000 // Disables counting while MSR[PM] is zero +#define MMCR0_ENINT 0x04000000 // Enables performance monitor interrupt signaling +#define MMCR0_DISCOUNT 0x02000000 // Disables counting of PMCn when a performance monitor interrupt is signaled or... +#define MMCR0_RTCSELECT_MASK 0x01800000 // 64-bit time base, bit selection enable +#define MMCR0_RTCSELECT_63 0x00000000 // Pick bit 63 to count +#define MMCR0_RTCSELECT_55 0x00800000 // Pick bit 55 to count +#define MMCR0_RTCSELECT_51 0x01000000 // Pick bit 51 to count +#define MMCR0_RTCSELECT_47 0x01800000 // Pick bit 47 to count +#define MMCR0_INTONBITTRANS 0x00400000 // Causes interrupt signaling on bit transition from off to on +#define MMCR0_THRESHOLD_MASK 0x003F0000 // Threshold value +#define MMCR0_THRESHOLD(n) ((n) << 16) // Threshold value (0 - 63) +#define MMCR0_PMC1INTCONTROL 0x00008000 // Enables interrupt signaling due to PMC1 counter overflow +#define MMCR0_PMC2INTCONTROL 0x00004000 // Enables interrupt signaling due to PMC2-PMC4 counter overflow +#define MMCR0_PMCTRIGGER 0x00002000 // Can be used to trigger counting of PMC2-PMC4 after PMC1 has overflowed or... +#define MMCR0_PMC1SELECT_MASK 0x00001FC0 // PMC1 input selector +#define MMCR0_PMC2SELECT_MASK 0x0000003F // PMC2 input selector + +#define MMCR1_PMC3SELECT_MASK 0xF8000000 // PMC3 input selector +#define MMCR1_PMC4SELECT_MASK 0x07C00000 // PMC4 input selector + +#define PMC1_OV 0x80000000 // Overflow +#define PMC1_COUNTER 0x7FFFFFFF // Counter value +#define PMC2_OV 0x80000000 // Overflow +#define PMC2_COUNTER 0x7FFFFFFF // Counter value +#define PMC3_OV 0x80000000 // Overflow +#define PMC3_COUNTER 0x7FFFFFFF // Counter value +#define PMC4_OV 0x80000000 // Overflow +#define PMC4_COUNTER 0x7FFFFFFF // Counter value + +/*---------------------------------------------------------------------------* + PMC1 Events + *---------------------------------------------------------------------------*/ +#define MMCR0_PMC1_HOLD 0x00000000 // Register holds current value +#define MMCR0_PMC1_CYCLE 0x00000040 // Processor cycles +#define MMCR0_PMC1_INSTRUCTION 0x00000080 // # of instructions completed. +#define MMCR0_PMC1_TRANSITION 0x000000C0 // # of transitions for 0 to 1 +#define MMCR0_PMC1_DISPATCHED 0x00000100 // # of instructions dispatched +#define MMCR0_PMC1_EIEIO 0x00000140 // # of eieio instructions completed +#define MMCR0_PMC1_ITLB_CYCLE 0x00000180 // # of cycles spent performing table search op. for the ITLB +#define MMCR0_PMC1_L2_HIT 0x000001C0 // # of access that hit the L2. +#define MMCR0_PMC1_EA 0x00000200 // # of valid instruction EAs delivered to the memory subsystem +#define MMCR0_PMC1_IABR 0x00000240 // # of time the address of an instruction matches the IABR +#define MMCR0_PMC1_L1_MISS 0x00000280 // # of loads that miss the L1 +#define MMCR0_PMC1_Bx_UNRESOLVED 0x000002C0 // # of branches that are unresolved when processed +#define MMCR0_PMC1_Bx_STALL_CYCLE 0x00000300 // # of cycles that dispatcher stalls due to a second + // unresolved branch in the instruction stream +#define MMCR0_PMC1_IC_FETCH_MISS 0x00000340 // # of times an instruction fetch missed the L1 Icache +#define MMCR0_PMC2_HOLD 0x00000000 // Register holds current value +#define MMCR0_PMC2_CYCLE 0x00000001 // Processor cycles +#define MMCR0_PMC2_INSTRUCTION 0x00000002 // # of instructions completed +#define MMCR0_PMC2_TRANSITION 0x00000003 // # of time-base (lower) bit transitions +#define MMCR0_PMC2_DISPATCHED 0x00000004 // # of instructions dispatched +#define MMCR0_PMC2_IC_MISS 0x00000005 // # of L1 instruction cache misses +#define MMCR0_PMC2_ITLB_MISS 0x00000006 // # of ITLB misses +#define MMCR0_PMC2_L2_I_MISS 0x00000007 // # of L2 instruction misses +#define MMCR0_PMC2_Bx_FALL_TROUGH 0x00000008 // # of fall-through branches +#define MMCR0_PMC2_PR_SWITCH 0x00000009 // # of MSR[PR] bit toggles +#define MMCR0_PMC2_RESERVED_LOAD 0x0000000A // # of reserved loads completed +#define MMCR0_PMC2_LOAD_STORE 0x0000000B // # of completed loads and stores +#define MMCR0_PMC2_SNOOP 0x0000000C // # of snoops +#define MMCR0_PMC2_L1_CASTOUT 0x0000000D // # of L1 castouts to L2 +#define MMCR0_PMC2_SYSTEM 0x0000000E // # of completed system unit instructions +#define MMCR0_PMC2_IC_FETCH_MISS 0x0000000F // # of instruction fetch misses in the L1 +#define MMCR0_PMC2_Bx_OUT_OF_ORDER 0x00000010 // # of branches allowing out-of-order execution + +/*---------------------------------------------------------------------------* + PMC3 Events + *---------------------------------------------------------------------------*/ +#define MMCR1_PMC3_HOLD 0x00000000 // Register holds current value +#define MMCR1_PMC3_CYCLE 0x08000000 // Processor cycles +#define MMCR1_PMC3_INSTRUCTION 0x10000000 // # of instructions completed +#define MMCR1_PMC3_TRANSITION 0x18000000 // # of time-base (lower) bit transitions +#define MMCR1_PMC3_DISPATCHED 0x20000000 // # of instructions dispatched +#define MMCR1_PMC3_DC_MISS 0x28000000 // # of L1 data cache misses +#define MMCR1_PMC3_DTLB_MISS 0x30000000 // # of DTLB misses +#define MMCR1_PMC3_L2_D_MISS 0x38000000 // # of L2 data misses +#define MMCR1_PMC3_Bx_TAKEN 0x40000000 // # predicted branches that were taken +#define MMCR1_PMC3_PM_SWITCH 0x48000000 // # of transitions between marked and unmarked processes +#define MMCR1_PMC3_COND_STORE 0x50000000 // # of store conditional instructions completed +#define MMCR1_PMC3_FPU 0x58000000 // # of instructions completed from the FPU +#define MMCR1_PMC3_L2_SNOOP_CASTOUT 0x60000000 // # of L2 castout caused by snoops to modified lines +#define MMCR1_PMC3_L2_HIT 0x68000000 // # of cache operations that hit in the L2 cache +#define MMCR1_PMC3_L1_MISS_CYCLE 0x78000000 // # of cycles generated by L1 load misses +#define MMCR1_PMC3_Bx_SECOND 0x80000000 // # of branches in the second speculative branch + // resolved correctly +#define MMCR1_PMC3_BPU_LR_CR 0x88000000 // # of cycles the BPU stalls due to LR or CR unresolved + // dependencies + +#define MMCR1_PMC4_HOLD 0x00000000 // Register holds current value +#define MMCR1_PMC4_CYCLE 0x00400000 // Processor cycles +#define MMCR1_PMC4_INSTRUCTION 0x00800000 // # of instructions completed +#define MMCR1_PMC4_TRANSITION 0x00C00000 // # of time-base (lower) bit transitions +#define MMCR1_PMC4_DISPATCHED 0x01000000 // # of instructions dispatched +#define MMCR1_PMC4_L2_CASTOUT 0x01400000 // # of L2 castouts +#define MMCR1_PMC4_DTLB_CYCLE 0x01800000 // # of cycles spent performing table searches for DTLB accesses +#define MMCR1_PMC4_Bx_MISSED 0x02000000 // # of mispredicted branches +#define MMCR1_PMC4_COND_STORE_INT 0x02800000 // # of store conditional instructions completed + // with reservation intact +#define MMCR1_PMC4_SYNC 0x02C00000 // # of completed sync instructions +#define MMCR1_PMC4_SNOOP_RETRY 0x03000000 // # of snoop request retries +#define MMCR1_PMC4_INTEGER 0x03400000 // # of completed integer operations +#define MMCR1_PMC4_BPU_THIRD 0x03800000 // # of cycles the BPU cannot process new branches + // due to having two unresolved branches +#define MMCR1_PMC4_DC_MISS 0x07C00000 // # of L1 data cache misses + +/*---------------------------------------------------------------------------* + FPSCR bits + *---------------------------------------------------------------------------*/ +#ifndef FPSCR_FX +#define FPSCR_FX 0x80000000 // Exception summary +#define FPSCR_FEX 0x40000000 // Enabled exception summary +#define FPSCR_VX 0x20000000 // Invalid operation +#define FPSCR_OX 0x10000000 // Overflow exception +#define FPSCR_UX 0x08000000 // Underflow exception +#define FPSCR_ZX 0x04000000 // Zero divide exception +#define FPSCR_XX 0x02000000 // Inexact exception +#define FPSCR_VXSNAN 0x01000000 // SNaN +#define FPSCR_VXISI 0x00800000 // Infinity - Infinity +#define FPSCR_VXIDI 0x00400000 // Infinity / Infinity +#define FPSCR_VXZDZ 0x00200000 // 0 / 0 +#define FPSCR_VXIMZ 0x00100000 // Infinity * 0 +#define FPSCR_VXVC 0x00080000 // Invalid compare +#define FPSCR_FR 0x00040000 // Fraction rounded +#define FPSCR_FI 0x00020000 // Fraction inexact +#define FPSCR_VXSOFT 0x00000400 // Software request +#define FPSCR_VXSQRT 0x00000200 // Invalid square root +#define FPSCR_VXCVI 0x00000100 // Invalid integer convert +#define FPSCR_VE 0x00000080 // Invalid operation exception enable +#define FPSCR_OE 0x00000040 // Overflow exception enable +#define FPSCR_UE 0x00000020 // Underflow exception enable +#define FPSCR_ZE 0x00000010 // Zero divide exception enable +#define FPSCR_XE 0x00000008 // Inexact exception enable +#define FPSCR_NI 0x00000004 // Non-IEEE mode +#endif + +#ifndef FPSCR_FX_BIT +#define FPSCR_FX_BIT 0 // Exception summary +#define FPSCR_FEX_BIT 1 // Enabled exception summary +#define FPSCR_VX_BIT 2 // Invalid operation +#define FPSCR_OX_BIT 3 // Overflow exception +#define FPSCR_UX_BIT 4 // Underflow exception +#define FPSCR_ZX_BIT 5 // Zero divide exception +#define FPSCR_XX_BIT 6 // Inexact exception +#define FPSCR_VXSNAN_BIT 7 // SNaN +#define FPSCR_VXISI_BIT 8 // Infinity - Infinity +#define FPSCR_VXIDI_BIT 9 // Infinity / Infinity +#define FPSCR_VXZDZ_BIT 10 // 0 / 0 +#define FPSCR_VXIMZ_BIT 11 // Infinity * 0 +#define FPSCR_VXVC_BIT 12 // Invalid compare +#define FPSCR_FR_BIT 13 // Fraction rounded +#define FPSCR_FI_BIT 14 // Fraction inexact +#define FPSCR_VXSOFT_BIT 21 // Software request +#define FPSCR_VXSQRT_BIT 22 // Invalid square root +#define FPSCR_VXCVI_BIT 23 // Invalid integer convert +#define FPSCR_VE_BIT 24 // Invalid operation exception enable +#define FPSCR_OE_BIT 25 // Overflow exception enable +#define FPSCR_UE_BIT 26 // Underflow exception enable +#define FPSCR_ZE_BIT 27 // Zero divide exception enable +#define FPSCR_XE_BIT 28 // Inexact exception enable +#define FPSCR_NI_BIT 29 // Non-IEEE mode +#endif + +u32 PPCMfmsr(void); +void PPCMtmsr(register u32 newMSR); +u32 PPCMfhid0(void); +void PPCMthid0(register u32 newHID0); +u32 PPCMfl2cr(void); +void PPCMtl2cr(register u32 newL2cr); +void PPCMtdec(register u32 newDec); +void PPCSync(void); +void PPCHalt(void); +void PPCMtmmcr0(register u32 newMmcr0); +void PPCMtmmcr1(register u32 newMmcr1); +void PPCMtpmc1(register u32 newPmc1); +void PPCMtpmc2(register u32 newPmc2); +void PPCMtpmc3(register u32 newPmc3); +void PPCMtpmc4(register u32 newPmc4); +u32 PPCMffpscr(void); +void PPCMtfpscr(register u32 newFPSCR); +u32 PPCMfhid2(void); +void PPCMthid2(register u32 newhid2); +void PPCMtwpar(register u32 newwpar); +void PPCDisableSpeculation(void); +void PPCSetFpNonIEEEMode(void); + +union FpscrUnion { + f64 f; + struct { + u32 fpscr_pad; + u32 fpscr; + } u; +}; + +#ifdef __cplusplus +}; +#endif + +#endif /* PPCARCH_H */ diff --git a/include/dolphin/os/OSMemory.h b/include/dolphin/os/OSMemory.h index bf0596917..dbd0e22f2 100644 --- a/include/dolphin/os/OSMemory.h +++ b/include/dolphin/os/OSMemory.h @@ -17,6 +17,7 @@ extern "C" { #define OS_PROTECT_CONTROL_WRITE 0x02 #define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE) +u32 OSGetConsoleSimulatedMemSize(); static void MEMIntrruptHandler(OSInterrupt interrupt, struct OSContext* context); void OSProtectRange(u32 channel, void* address, u32 nBytes, u32 control); static void Config24MB(void); diff --git a/include/dolphin/os/OSRtc.h b/include/dolphin/os/OSRtc.h index e19f09155..0438667c4 100644 --- a/include/dolphin/os/OSRtc.h +++ b/include/dolphin/os/OSRtc.h @@ -64,6 +64,7 @@ u32 OSGetSoundMode(void); void OSSetSoundMode(OSSoundMode mode); u32 OSGetProgressiveMode(void); void OSSetProgressiveMode(u32 mode); +u32 OSGetEuRgb60Mode(); u16 OSGetWirelessID(s32 channel); void OSSetWirelessID(s32 channel, u16 id); static u16 OSGetGbsMode(void); diff --git a/include/m_Do/m_Do_DVDError.h b/include/m_Do/m_Do_DVDError.h index 784ab1f36..076a38cb9 100644 --- a/include/m_Do/m_Do_DVDError.h +++ b/include/m_Do/m_Do_DVDError.h @@ -3,6 +3,7 @@ #include "dolphin/types.h" +void mDoDvdErr_ThdInit(); void mDoDvdErr_ThdCleanup(); #endif /* M_DO_M_DO_DVD_ERROR_H */ diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 6da1b8c98..48e67c59a 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -303,6 +303,10 @@ JKRExpHeap* mDoExt_getCommandHeap(); JKRExpHeap* mDoExt_getZeldaHeap(); JKRExpHeap* mDoExt_getGameHeap(); JKRExpHeap* mDoExt_getArchiveHeap(); +JKRExpHeap* mDoExt_createCommandHeap(u32 heapSize, JKRHeap* i_heap); +JKRExpHeap* mDoExt_createArchiveHeap(u32 heapSize, JKRHeap* i_heap); +JKRExpHeap* mDoExt_createZeldaHeap(u32 heapSize, JKRHeap* i_heap); +JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* i_heap); int mDoExt_getSafeArchiveHeapSize(); int mDoExt_getSafeGameHeapSize(); @@ -311,6 +315,7 @@ int mDoExt_getSafeCommandHeapSize(); extern JKRExpHeap* zeldaHeap; extern JKRExpHeap* gameHeap; +extern JKRExpHeap* commandHeap; extern JKRExpHeap* archiveHeap; #endif diff --git a/include/m_Do/m_Do_machine.h b/include/m_Do/m_Do_machine.h index 0c53e162a..1a2fd1632 100644 --- a/include/m_Do/m_Do_machine.h +++ b/include/m_Do/m_Do_machine.h @@ -1,7 +1,7 @@ #ifndef M_DO_M_DO_MACHINE_H #define M_DO_M_DO_MACHINE_H -void mDoMch_Create(); +bool mDoMch_Create(); void mDoMch_HeapCheckAll(); #endif /* M_DO_M_DO_MACHINE_H */ \ No newline at end of file diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 6c5d75ea7..8b6567a61 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -4,44 +4,534 @@ // #include "m_Do/m_Do_machine.h" -#include "dolphin/types.h" +#include "JSystem/JFramework/JFWSystem.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramStream.h" +#include "JSystem/JKernel/JKRDvdAramRipper.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JMath/JMath.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "JSystem/JUtility/JUTDbPrint.h" +#include "JSystem/JUtility/JUTException.h" +#include "JSystem/JUtility/JUTGamePad.h" +#include "JSystem/JUtility/JUTVideo.h" +#include "SSystem/SComponent/c_malloc.h" +#include "SSystem/SComponent/c_math.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/gx/GXStruct.h" +#include "dolphin/os/OS.h" +#include "dolphin/vi/vi.h" +#include "m_Do/m_Do_DVDError.h" +#include "m_do/m_Do_MemCard.h" +#include "m_Do/m_Do_Reset.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_machine_exception.h" +#include "m_Do/m_Do_main.h" + +namespace mDoMch { + static u8 mDebugFill; +} + +static int solidHeapErrors; +static int gameHeapErrors; +static int zeldaHeapErrors; +static int commandHeapErrors; +static int archiveHeapErrors; +static int unknownHeapErrors; +static u32 heapErrors; /* 8000BD24-8000BEEC .text myGetHeapTypeByString__FP7JKRHeap */ -void myGetHeapTypeByString(JKRHeap*) { - /* Nonmatching */ +const char* myGetHeapTypeByString(JKRHeap* p_heap) { + static char tmpString[5]; + + if (p_heap == JKRHeap::getSystemHeap()) { + return "SystemHeap"; + } + + if (p_heap == mDoExt_getZeldaHeap()) { + return "ZeldaHeap"; + } + + if (p_heap == mDoExt_getGameHeap()) { + return "GameHeap"; + } + + if (p_heap == mDoExt_getArchiveHeap()) { + return "ArchiveHeap"; + } + + if (p_heap == mDoExt_getCommandHeap()) { + return "CommandHeap"; + } + + u32 heapType = p_heap->getHeapType(); + switch (heapType) { + case 'ASTH': + return "ASTH"; + case 'EXPH': + return "EXPH"; + case 'SLID': + return "SLID"; + case 'STDH': + return "STDH"; + case 'UNIT': + return "UNIT"; + case 0: + return "(Null)"; + default: + u32 tmpType = heapType; + char* typeStr = (char*)&tmpType; + + tmpString[0] = typeStr[0]; + tmpString[1] = typeStr[1]; + tmpString[2] = typeStr[2]; + tmpString[3] = typeStr[3]; + tmpString[4] = 0; + return tmpString; + } } /* 8000BEEC-8000C0C8 .text myMemoryErrorRoutine__FPvUli */ -void myMemoryErrorRoutine(void*, unsigned long, int) { - /* Nonmatching */ +void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) { + JKRHeap* heap = (JKRHeap*)p_heap; + + BOOL notSolidHeap = true; + if (heap->getHeapType() == 'SLID') { + notSolidHeap = false; + } + + if (notSolidHeap) { + OSReport_Error( + "Error: Cannot allocate memory %d(0x%x)byte in %d byte alignment from %08x\n", + size, size, alignment, p_heap); + } + + u32 heapType = heap->getHeapType(); + u8* tmpString = (u8*)&heapType; + if (notSolidHeap) { + OSReport_Error( + "FreeSize=%08x TotalFreeSize=%08x HeapType=%08x(%c%c%c%c) HeapSize=%08x %s\n", + heap->getFreeSize(), heap->getTotalFreeSize(), heapType, tmpString[0], tmpString[1], + tmpString[2], tmpString[3], heap->getHeapSize(), myGetHeapTypeByString(heap)); + } + + if (heapErrors == 0) { + heap->dump_sort(); + } + heapErrors++; + + if (p_heap == zeldaHeap) { + zeldaHeapErrors++; + } else if (p_heap == gameHeap) { + gameHeapErrors++; + } else if (p_heap == commandHeap) { + commandHeapErrors++; + } else if (p_heap == archiveHeap) { + archiveHeapErrors++; + } else if (heap->getHeapType() == 'SLID') { + solidHeapErrors++; + } else { + unknownHeapErrors++; + } } /* 8000C0C8-8000C168 .text myHeapCheckRecursive__FP7JKRHeap */ -void myHeapCheckRecursive(JKRHeap*) { - /* Nonmatching */ +void myHeapCheckRecursive(JKRHeap* p_heap) { + if (!p_heap->check()) { + const char* type = myGetHeapTypeByString(p_heap); + OSReport_Error("error in %08x(%s)\n", p_heap, type); + } + + JSUTree* heapTree = &p_heap->getHeapTree(); + for (JSUTree* i = heapTree->getFirstChild(); i != NULL; i = i->getNextChild()) { + myHeapCheckRecursive(i->getObject()); + } } /* 8000C168-8000C18C .text mDoMch_HeapCheckAll__Fv */ void mDoMch_HeapCheckAll() { - /* Nonmatching */ + myHeapCheckRecursive(JKRHeap::sRootHeap); } /* 8000C18C-8000C23C .text developKeyCheck__FUlUl */ -void developKeyCheck(unsigned long, unsigned long) { - /* Nonmatching */ +int developKeyCheck(u32 btnTrig, u32 btnHold) { + static u8 key_link; + static u8 key_ganon; + static u8 key_zelda; + + if (btnHold == (CButton::L | CButton::R | CButton::Z | CButton::DPAD_DOWN) && + btnTrig == CButton::DPAD_DOWN) { + if (key_link == 3 && key_ganon == 6 && key_zelda == 5) { + mDoMain::developmentMode = 1; + } else { + key_link = 0; + key_ganon = 0; + key_zelda = 0; + } + } + + if (btnHold == (CButton::L | CButton::DPAD_RIGHT) && btnTrig == CButton::L) { + key_link++; + } + + if (btnHold == (CButton::R | CButton::DPAD_UP) && btnTrig == CButton::R) { + key_ganon++; + } + + if (btnHold == (CButton::Z | CButton::DPAD_LEFT) && btnTrig == CButton::Z) { + key_zelda++; + } + + return mDoMain::developmentMode; } /* 8000C23C-8000C3C0 .text myExceptionCallback__FUsP9OSContextUlUl */ void myExceptionCallback(unsigned short, OSContext*, unsigned long, unsigned long) { - /* Nonmatching */ + u32 btnHold; + u32 btnTrig; + + mDoMain::sHungUpTime = OSGetTime(); + OSReportEnable(); + JUTGamePad::clearForReset(); + // "Vibration stopping & resetting to default\n" + OSReport("振動停止&原点復帰\n"); + + JUTException* manager = JUTException::getManager(); + + if (manager == NULL) { + // "Exception Manager doesn't exist\n" + OSReport("例外マネージャがありません\n"); + PPCHalt(); + } + if (mDoMain::developmentMode == 0) { + JUTGamePad pad(JUTGamePad::Port_1); + manager->setGamePad(&pad); + + if (manager != NULL) { + OSEnableInterrupts(); + // "Accepting Key input\n" + OSReport("キー入力を受け付けています\n"); + while (mDoMain::developmentMode == 0) { + manager->readPad(&btnTrig, &btnHold); + developKeyCheck(btnTrig, btnHold); + JUTException::waitTime(30); + if (JUTGamePad::C3ButtonReset::sResetOccurred) { + OSReport("リセット受け付けています\n"); + OSResetSystem(1,0,0); + } + } + // "JUTAssertion is visible\n" + OSReport("JUTAssertionを可視化しました\n"); + JUTAssertion::setVisible(true); + JUTDbPrint::getManager()->setVisible(true); + JFWSystem::getSystemConsole()->setOutput(JUTConsole::OUTPUT_OSREPORT | + JUTConsole::OUTPUT_CONSOLE); + } else { + PPCHalt(); + } + } else { + // "Wait for 3 seconds\n" + OSReport("3秒間停止\n"); + JUTException::waitTime(3000); + } } /* 8000C3C0-8000C70C .text fault_callback_scroll__FUsP9OSContextUlUl */ -void fault_callback_scroll(unsigned short, OSContext*, unsigned long, unsigned long) { - /* Nonmatching */ +void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { + JUTException* manager = JUTException::getManager(); + JUTConsole* exConsole = manager->getConsole(); + + JUTGamePad pad(JUTGamePad::Port_1); + manager->setGamePad(&pad); + + BOOL padDisabled = manager->isEnablePad() == false; + if (!padDisabled) { + exConsole->print("PUSH START BUTTON TO ADDITIONAL INFOMATION\n"); + exConsole->print("--------------------------------------\n"); + JUTConsoleManager::getManager()->drawDirect(true); + OSEnableInterrupts(); + int holdUpCount = 0; + int holdDownCount = 0; + + while (true) { + u32 btnHold, btnTrig; + manager->readPad(&btnTrig, &btnHold); + + if (JUTGamePad::C3ButtonReset::sResetOccurred) { + OSResetSystem(1, 0, 0); + } + + bool waitRetrace = false; + if (btnTrig == CButton::START) { + exception_addition(exConsole); + waitRetrace = true; + } + + if (btnTrig == CButton::Z) { + JUTConsole* sysConsole = JFWSystem::getSystemConsole(); + if (JUTConsoleManager::getManager()->getDirectConsole() != sysConsole) { + exConsole = sysConsole; + exConsole->setFontSize(8.0f, 6.0f); + exConsole->setPosition(8, 32); + exConsole->setHeight(23); + exConsole->setVisible(true); + exConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); + } else { + exConsole = JUTException::getConsole(); + } + JUTConsoleManager::getManager()->setDirectConsole(exConsole); + waitRetrace = true; + } + + if (btnTrig == CButton::A) { + exConsole->scrollToLastLine(); + waitRetrace = true; + } + + if (btnTrig == CButton::B) { + exConsole->scrollToFirstLine(); + waitRetrace = true; + } + + if (btnHold == CButton::DPAD_UP) { + exConsole->scroll(holdUpCount < 3 ? -1 : (holdUpCount < 5 ? -2 : (holdUpCount < 7 ? -4 : -8))); + waitRetrace = true; + holdDownCount = 0; + holdUpCount++; + } else if (btnHold == CButton::DPAD_DOWN) { + exConsole->scroll(holdDownCount < 3 ? 1 : (holdDownCount < 5 ? 2 : (holdDownCount < 7 ? 4 : 8))); + waitRetrace = true; + holdUpCount = 0; + holdDownCount++; + } else { + holdUpCount = 0; + holdDownCount = 0; + } + + if (waitRetrace == true) { + u32 count = VIGetRetraceCount(); + do { + } while (count == VIGetRetraceCount()); + JUTConsoleManager::getManager()->drawDirect(true); + } + + JUTException::waitTime(30); + } + } + + exception_addition(exConsole); + JUTConsoleManager::getManager()->drawDirect(true); + + do { + exConsole->scrollToFirstLine(); + JUTConsoleManager::getManager()->drawDirect(true); + JUTException::waitTime(2000); + + do { + for (u32 i = exConsole->getHeight(); i != 0; i--) { + exConsole->scroll(1); + JUTConsoleManager::getManager()->drawDirect(true); + + if ((exConsole->getUsedLine() - exConsole->getHeight()) + 1 <= + exConsole->getLineOffset()) { + break; + } + JUTException::waitTime(20); + } + + JUTException::waitTime(3000); + if ((exConsole->getUsedLine() - exConsole->getHeight()) + 1 <= + exConsole->getLineOffset()) { + break; + } + } while (true); + } while (true); +} + +#if VERSION != VERSION_PAL +GXRenderModeObj g_ntscZeldaIntDf = { + 0, 640, 480, 480, 30, 0, 660, 480, 1, 0, 0, + {{6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}}, + {8, 8, 10, 12, 10, 8, 8}, +}; +GXRenderModeObj g_ntscZeldaProg = { + 2, 640, 480, 480, 30, 0, 660, 480, 0, 0, 0, + {{6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}}, + {0, 0, 21, 22, 21, 0, 0}, +}; +#else +GXRenderModeObj g_ntscZeldaIntDf = { + 4, 640, 480, 534, 30, 20, 660, 534, 1, 0, 0, + {{6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}}, + {8, 8, 10, 12, 10, 8, 8}, +}; +GXRenderModeObj g_ntscZeldaProg = { + 20, 640, 480, 480, 30, 0, 660, 480, 1, 0, 0, + {{6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}}, + {8, 8, 10, 12, 10, 8, 8}, +}; +#endif + +namespace mDoMch_render_c { + GXRenderModeObj* mRenderModeObj = &g_ntscZeldaIntDf; + + inline GXRenderModeObj* getRenderModeObj() { return mRenderModeObj; } + inline void setRenderModeObj(GXRenderModeObj* obj) { mRenderModeObj = obj; } + inline void setProgressiveMode() { setRenderModeObj(&g_ntscZeldaProg); } } /* 8000C70C-8000CB48 .text mDoMch_Create__Fv */ -void mDoMch_Create() { - /* Nonmatching */ +bool mDoMch_Create() { + if (mDoMain::developmentMode == 0 || !(OSGetConsoleType() & 0x10000000)) { + OSReportDisable(); + } + + JKRHeap::setDefaultDebugFill(mDoMch::mDebugFill); + JFWSystem::setMaxStdHeap(1); + + u32 arenaHi = (u32)OSGetArenaHi(); + u32 arenaLo = (u32)OSGetArenaLo(); + if (arenaHi > 0x81800000 && arenaHi - 0x1800000 > arenaLo) { + OSSetArenaHi((void*)(arenaHi - 0x1800000)); + } + + u32 arenaSize = ((u32)OSGetArenaHi() - (u32)OSGetArenaLo()) - 0xF0; +#if VERSION != VERSION_PAL + if (OSGetConsoleSimulatedMemSize() >= 0x3000000) { + arenaSize -= 0x1000000; + } +#endif + + if (mDoMain::memMargin != -1) { + arenaSize += mDoMain::memMargin; + } + +#if VERSION == VERSION_JPN + JFWSystem::setSysHeapSize(arenaSize - 0xD0E000); + JFWSystem::setFifoBufSize(0x80000); +#else + JFWSystem::setSysHeapSize(arenaSize - 0xD20C00); + JFWSystem::setFifoBufSize(0xA0000); +#endif + JFWSystem::setAramAudioBufSize(0xA00000); + JFWSystem::setAramGraphBufSize(0x5CE000); +#if VERSION == VERSION_PAL + if (OSGetResetCode() - 0x80000000 == 0 && OSGetEuRgb60Mode() == 1) { + mDoMch_render_c::setProgressiveMode(); + } +#endif + JFWSystem::setRenderMode(mDoMch_render_c::getRenderModeObj()); + JFWSystem::init(); + + if (mDoMain::developmentMode == 0) { + JUTAssertion::setVisible(false); + JUTDbPrint::getManager()->setVisible(false); + } + + JKRHeap::setErrorHandler(myMemoryErrorRoutine); + JKRHeap::getRootHeap()->setErrorFlag(true); + JFWSystem::getSystemHeap()->setErrorFlag(true); + + JKRHeap* rootHeap = JKRHeap::getRootHeap(); +#if VERSION == VERSION_JPN + rootHeap->dump_sort(); +#endif + // Command Heap size: 4 KB + mDoExt_createCommandHeap(0x1000, rootHeap); +#if VERSION == VERSION_JPN + rootHeap->dump_sort(); +#endif + +#if VERSION == VERSION_JPN + mDoExt_createArchiveHeap(0xA3F000, rootHeap); + mDoExt_createGameHeap(0x2CE000, rootHeap); +#else + // Archive Heap size: 10565 KB + mDoExt_createArchiveHeap(0xA51400, rootHeap); + + // Game Heap size: 2874 KB + mDoExt_createGameHeap(0x2CE800, rootHeap); +#endif + + + JKRHeap* sysHeap = JKRHeap::getSystemHeap(); + s32 size = sysHeap->getFreeSize() - 0x10000; +#if VERSION == VERSION_JPN + JUT_ASSERT(996, size > 0); +#elif VERSION == VERSION_USA + JUT_ASSERT(1104, size > 0); +#elif VERSION == VERSION_PAL + JUT_ASSERT(1143, size > 0); +#endif + JKRHeap* zeldaHeap = mDoExt_createZeldaHeap(size, sysHeap); + zeldaHeap->becomeCurrentHeap(); + + JKRAramStream::setTransBuffer(NULL, 0x2000, JKRHeap::getSystemHeap()); + JKRAram::setSzpBufferSize(0x2000); + JKRDvdAramRipper::setSzpBufferSize(0x2000); + JKRDvdRipper::setSzpBufferSize(0x2000); + JKRThreadSwitch::createManager(NULL); + JKRThread* thread = new JKRThread(OSGetCurrentThread(), 0); + + JUTConsole* sysConsole = JFWSystem::getSystemConsole(); + sysConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); + sysConsole->setPosition(16, 42); + + JUTException::appendMapFile("/maps/framework.map"); + JUTException::setPreUserCallback(myExceptionCallback); + JUTException::setPostUserCallback(fault_callback_scroll); + JMANewSinTable(0xc); + + cMl::init(mDoExt_getZeldaHeap()); + cM_initRnd(100, 100, 100); + mDoDvdThd::create(OSGetThreadPriority(OSGetCurrentThread()) - 2); + mDoDvdErr_ThdInit(); + mDoMemCd_ThdInit(); + return true; } From 2c82d9708f74b048212c9af63f97d53ce5993757 Mon Sep 17 00:00:00 2001 From: fig02 Date: Sun, 17 Sep 2023 01:16:52 -0400 Subject: [PATCH 02/89] Split player functions into appropriate .inc files (#47) * split files * remove functions that are prob weak --- src/d/actor/d_a_player_battle.inc | 98 + src/d/actor/d_a_player_boomerang.inc | 78 + src/d/actor/d_a_player_bottle.inc | 68 + src/d/actor/d_a_player_bow.inc | 98 + src/d/actor/d_a_player_climb.inc | 93 + src/d/actor/d_a_player_crawl.inc | 103 + src/d/actor/d_a_player_dproc.inc | 588 +++++ src/d/actor/d_a_player_fan.inc | 88 + src/d/actor/d_a_player_food.inc | 38 + src/d/actor/d_a_player_grab.inc | 133 ++ src/d/actor/d_a_player_hammer.inc | 68 + src/d/actor/d_a_player_hang.inc | 108 + src/d/actor/d_a_player_hook.inc | 78 + src/d/actor/d_a_player_ladder.inc | 93 + src/d/actor/d_a_player_main.cpp | 2969 +------------------------- src/d/actor/d_a_player_particle.inc | 203 ++ src/d/actor/d_a_player_pushpull.inc | 48 + src/d/actor/d_a_player_rope.inc | 183 ++ src/d/actor/d_a_player_ship.inc | 198 ++ src/d/actor/d_a_player_swim.inc | 93 + src/d/actor/d_a_player_sword.inc | 268 +++ src/d/actor/d_a_player_tact.inc | 128 ++ src/d/actor/d_a_player_vomit.inc | 58 + src/d/actor/d_a_player_weapon.inc | 78 + src/d/actor/d_a_player_whide.inc | 93 + 25 files changed, 3115 insertions(+), 2936 deletions(-) create mode 100644 src/d/actor/d_a_player_battle.inc create mode 100644 src/d/actor/d_a_player_boomerang.inc create mode 100644 src/d/actor/d_a_player_bottle.inc create mode 100644 src/d/actor/d_a_player_bow.inc create mode 100644 src/d/actor/d_a_player_climb.inc create mode 100644 src/d/actor/d_a_player_crawl.inc create mode 100644 src/d/actor/d_a_player_dproc.inc create mode 100644 src/d/actor/d_a_player_fan.inc create mode 100644 src/d/actor/d_a_player_food.inc create mode 100644 src/d/actor/d_a_player_grab.inc create mode 100644 src/d/actor/d_a_player_hammer.inc create mode 100644 src/d/actor/d_a_player_hang.inc create mode 100644 src/d/actor/d_a_player_hook.inc create mode 100644 src/d/actor/d_a_player_ladder.inc create mode 100644 src/d/actor/d_a_player_particle.inc create mode 100644 src/d/actor/d_a_player_pushpull.inc create mode 100644 src/d/actor/d_a_player_rope.inc create mode 100644 src/d/actor/d_a_player_ship.inc create mode 100644 src/d/actor/d_a_player_swim.inc create mode 100644 src/d/actor/d_a_player_sword.inc create mode 100644 src/d/actor/d_a_player_tact.inc create mode 100644 src/d/actor/d_a_player_vomit.inc create mode 100644 src/d/actor/d_a_player_weapon.inc create mode 100644 src/d/actor/d_a_player_whide.inc diff --git a/src/d/actor/d_a_player_battle.inc b/src/d/actor/d_a_player_battle.inc new file mode 100644 index 000000000..c0a9c3bcc --- /dev/null +++ b/src/d/actor/d_a_player_battle.inc @@ -0,0 +1,98 @@ +/** + * d_a_player_battle.inc + * + * Code relating to (?) (How is this different from the "cut" functions in the sword file?) + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8013E250-8013E384 .text setSpecialBattle__9daPy_lk_cFi */ +void daPy_lk_c::setSpecialBattle(int) { + /* Nonmatching */ +} + +/* 8013E384-8013E454 .text changeSpecialBattle__9daPy_lk_cFv */ +void daPy_lk_c::changeSpecialBattle() { + /* Nonmatching */ +} + +/* 8013E454-8013E72C .text procBtJump_init__9daPy_lk_cFP13fopEn_enemy_c */ +void daPy_lk_c::procBtJump_init(fopEn_enemy_c*) { + /* Nonmatching */ +} + +/* 8013E72C-8013E860 .text procBtJump__9daPy_lk_cFv */ +void daPy_lk_c::procBtJump() { + /* Nonmatching */ +} + +/* 8013E860-8013E9D4 .text procBtJumpCut_init__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::procBtJumpCut_init(cXyz*) { + /* Nonmatching */ +} + +/* 8013E9D4-8013EBD0 .text procBtJumpCut__9daPy_lk_cFv */ +void daPy_lk_c::procBtJumpCut() { + /* Nonmatching */ +} + +/* 8013EBD0-8013EC50 .text procBtSlide__9daPy_lk_cFv */ +void daPy_lk_c::procBtSlide() { + /* Nonmatching */ +} + +/* 8013EC50-8013EE64 .text procBtRoll_init__9daPy_lk_cFP13fopEn_enemy_c */ +void daPy_lk_c::procBtRoll_init(fopEn_enemy_c*) { + /* Nonmatching */ +} + +/* 8013EE64-8013F010 .text procBtRoll__9daPy_lk_cFv */ +void daPy_lk_c::procBtRoll() { + /* Nonmatching */ +} + +/* 8013F010-8013F200 .text procBtRollCut_init__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::procBtRollCut_init(cXyz*) { + /* Nonmatching */ +} + +/* 8013F200-8013F3E8 .text procBtRollCut__9daPy_lk_cFv */ +void daPy_lk_c::procBtRollCut() { + /* Nonmatching */ +} + +/* 8013F3E8-8013F4A8 .text procBtVerticalJump_init__9daPy_lk_cFP13fopEn_enemy_c */ +void daPy_lk_c::procBtVerticalJump_init(fopEn_enemy_c*) { + /* Nonmatching */ +} + +/* 8013F4A8-8013F520 .text procBtVerticalJump__9daPy_lk_cFv */ +void daPy_lk_c::procBtVerticalJump() { + /* Nonmatching */ +} + +/* 8013F520-8013F5BC .text procBtVerticalJumpCut_init__9daPy_lk_cFv */ +void daPy_lk_c::procBtVerticalJumpCut_init() { + /* Nonmatching */ +} + +/* 8013F5BC-8013F6E4 .text procBtVerticalJumpCut__9daPy_lk_cFv */ +void daPy_lk_c::procBtVerticalJumpCut() { + /* Nonmatching */ +} + +/* 8013F6E4-8013F7F0 .text procBtVerticalJumpLand_init__9daPy_lk_cFv */ +void daPy_lk_c::procBtVerticalJumpLand_init() { + /* Nonmatching */ +} + +/* 8013F7F0-8013F848 .text procBtVerticalJumpLand__9daPy_lk_cFv */ +void daPy_lk_c::procBtVerticalJumpLand() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_boomerang.inc b/src/d/actor/d_a_player_boomerang.inc new file mode 100644 index 000000000..c85697255 --- /dev/null +++ b/src/d/actor/d_a_player_boomerang.inc @@ -0,0 +1,78 @@ +/** + * d_a_player_boomerang.inc + * + * Code relating to the Boomerang item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8014956C-80149590 .text checkBoomerangAnime__9daPy_lk_cCFv */ +void daPy_lk_c::checkBoomerangAnime() const { + /* Nonmatching */ +} + +/* 80149590-80149698 .text throwBoomerang__9daPy_lk_cFv */ +void daPy_lk_c::throwBoomerang() { + /* Nonmatching */ +} + +/* 80149698-801497A4 .text returnBoomerang__9daPy_lk_cFv */ +void daPy_lk_c::returnBoomerang() { + /* Nonmatching */ +} + +/* 801497A4-8014984C .text checkNextActionBoomerangReady__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionBoomerangReady() { + /* Nonmatching */ +} + +/* 8014984C-801498D8 .text checkNextActionBoomerangFly__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionBoomerangFly() { + /* Nonmatching */ +} + +/* 801498D8-80149964 .text checkNextBoomerangMode__9daPy_lk_cFv */ +void daPy_lk_c::checkNextBoomerangMode() { + /* Nonmatching */ +} + +/* 80149964-80149A44 .text changeBoomerangCatchProc__9daPy_lk_cFv */ +void daPy_lk_c::changeBoomerangCatchProc() { + /* Nonmatching */ +} + +/* 80149A44-80149AF0 .text procBoomerangSubject_init__9daPy_lk_cFv */ +void daPy_lk_c::procBoomerangSubject_init() { + /* Nonmatching */ +} + +/* 80149AF0-80149C00 .text procBoomerangSubject__9daPy_lk_cFv */ +void daPy_lk_c::procBoomerangSubject() { + /* Nonmatching */ +} + +/* 80149C00-80149CC8 .text procBoomerangMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procBoomerangMove_init() { + /* Nonmatching */ +} + +/* 80149CC8-80149DA4 .text procBoomerangMove__9daPy_lk_cFv */ +void daPy_lk_c::procBoomerangMove() { + /* Nonmatching */ +} + +/* 80149DA4-80149E1C .text procBoomerangCatch_init__9daPy_lk_cFv */ +void daPy_lk_c::procBoomerangCatch_init() { + /* Nonmatching */ +} + +/* 80149E1C-80149ECC .text procBoomerangCatch__9daPy_lk_cFv */ +void daPy_lk_c::procBoomerangCatch() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_bottle.inc b/src/d/actor/d_a_player_bottle.inc new file mode 100644 index 000000000..76622d030 --- /dev/null +++ b/src/d/actor/d_a_player_bottle.inc @@ -0,0 +1,68 @@ +/** + * d_a_player_bottle.inc + * + * Code relating to various bottled items and bottle interactions. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80151E40-80151E60 .text changeBottleDrinkFace__9daPy_lk_cFi */ +void daPy_lk_c::changeBottleDrinkFace(int) { + /* Nonmatching */ +} + +/* 80151E60-80152128 .text setBottleModel__9daPy_lk_cFUs */ +void daPy_lk_c::setBottleModel(unsigned short) { + /* Nonmatching */ +} + +/* 80152128-801521A0 .text makeFairy__9daPy_lk_cFP4cXyzUl */ +void daPy_lk_c::makeFairy(cXyz*, unsigned long) { + /* Nonmatching */ +} + +/* 801521A0-80152300 .text procBottleDrink_init__9daPy_lk_cFUs */ +void daPy_lk_c::procBottleDrink_init(unsigned short) { + /* Nonmatching */ +} + +/* 80152300-80152624 .text procBottleDrink__9daPy_lk_cFv */ +void daPy_lk_c::procBottleDrink() { + /* Nonmatching */ +} + +/* 80152624-801527CC .text procBottleOpen_init__9daPy_lk_cFUs */ +void daPy_lk_c::procBottleOpen_init(unsigned short) { + /* Nonmatching */ +} + +/* 801527CC-80152ED0 .text procBottleOpen__9daPy_lk_cFv */ +void daPy_lk_c::procBottleOpen() { + /* Nonmatching */ +} + +/* 80152ED0-80153064 .text procBottleSwing_init__9daPy_lk_cFi */ +void daPy_lk_c::procBottleSwing_init(int) { + /* Nonmatching */ +} + +/* 80153064-80153338 .text procBottleSwing__9daPy_lk_cFv */ +void daPy_lk_c::procBottleSwing() { + /* Nonmatching */ +} + +/* 80153338-80153438 .text procBottleGet_init__9daPy_lk_cFv */ +void daPy_lk_c::procBottleGet_init() { + /* Nonmatching */ +} + +/* 80153438-80153554 .text procBottleGet__9daPy_lk_cFv */ +void daPy_lk_c::procBottleGet() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_bow.inc b/src/d/actor/d_a_player_bow.inc new file mode 100644 index 000000000..83273a8a2 --- /dev/null +++ b/src/d/actor/d_a_player_bow.inc @@ -0,0 +1,98 @@ +/** + * d_a_player_bow.inc + * + * Code relating to the Bow item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80149ECC-80149F88 .text bowJointCB__9daPy_lk_cFi */ +void daPy_lk_c::bowJointCB(int) { + /* Nonmatching */ +} + +/* 80149F88-80149FD0 .text daPy_bowJointCB__FP7J3DNodei */ +void daPy_bowJointCB(J3DNode*, int) { + /* Nonmatching */ +} + +/* 80149FD0-8014A008 .text bowButton__9daPy_lk_cCFv */ +void daPy_lk_c::bowButton() const { + /* Nonmatching */ +} + +/* 8014A008-8014A02C .text checkBowReadyAnime__9daPy_lk_cCFv */ +void daPy_lk_c::checkBowReadyAnime() const { + /* Nonmatching */ +} + +/* 8014A02C-8014A080 .text checkBowAnime__9daPy_lk_cCFv */ +void daPy_lk_c::checkBowAnime() const { + /* Nonmatching */ +} + +/* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */ +void daPy_lk_c::makeArrow() { + /* Nonmatching */ +} + +/* 8014A180-8014A1CC .text deleteArrow__9daPy_lk_cFv */ +void daPy_lk_c::deleteArrow() { + /* Nonmatching */ +} + +/* 8014A1CC-8014A2A0 .text setBowReadyAnime__9daPy_lk_cFv */ +void daPy_lk_c::setBowReadyAnime() { + /* Nonmatching */ +} + +/* 8014A2A0-8014A328 .text setBowReloadAnime__9daPy_lk_cFv */ +void daPy_lk_c::setBowReloadAnime() { + /* Nonmatching */ +} + +/* 8014A328-8014A60C .text checkNextActionBowReady__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionBowReady() { + /* Nonmatching */ +} + +/* 8014A60C-8014A680 .text checkNextActionBowFly__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionBowFly() { + /* Nonmatching */ +} + +/* 8014A680-8014A6F4 .text checkNextBowMode__9daPy_lk_cFv */ +void daPy_lk_c::checkNextBowMode() { + /* Nonmatching */ +} + +/* 8014A6F4-8014A834 .text setBowModel__9daPy_lk_cFv */ +void daPy_lk_c::setBowModel() { + /* Nonmatching */ +} + +/* 8014A834-8014A8D4 .text procBowSubject_init__9daPy_lk_cFv */ +void daPy_lk_c::procBowSubject_init() { + /* Nonmatching */ +} + +/* 8014A8D4-8014A974 .text procBowSubject__9daPy_lk_cFv */ +void daPy_lk_c::procBowSubject() { + /* Nonmatching */ +} + +/* 8014A974-8014AA2C .text procBowMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procBowMove_init() { + /* Nonmatching */ +} + +/* 8014AA2C-8014AB5C .text procBowMove__9daPy_lk_cFv */ +void daPy_lk_c::procBowMove() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_climb.inc b/src/d/actor/d_a_player_climb.inc new file mode 100644 index 000000000..293d8233a --- /dev/null +++ b/src/d/actor/d_a_player_climb.inc @@ -0,0 +1,93 @@ +/** + * d_a_player_climb.inc + * + * Code relating to climbing on walls (like vines). + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80135B50-80135B74 .text getClimbMoveAnmSpeed__9daPy_lk_cFv */ +void daPy_lk_c::getClimbMoveAnmSpeed() { + /* Nonmatching */ +} + +/* 80135B74-80135DA0 .text setClimbShapeOffset__9daPy_lk_cFv */ +void daPy_lk_c::setClimbShapeOffset() { + /* Nonmatching */ +} + +/* 80135DA0-80135E14 .text getClimbDirectionFromAngle__9daPy_lk_cFv */ +void daPy_lk_c::getClimbDirectionFromAngle() { + /* Nonmatching */ +} + +/* 80135E14-80135E98 .text changeClimbMoveProc__9daPy_lk_cFi */ +void daPy_lk_c::changeClimbMoveProc(int) { + /* Nonmatching */ +} + +/* 80135E98-80136154 .text setMoveBGCorrectClimb__9daPy_lk_cFv */ +void daPy_lk_c::setMoveBGCorrectClimb() { + /* Nonmatching */ +} + +/* 80136154-80136200 .text checkBgCorrectClimbMove__9daPy_lk_cFP4cXyzP4cXyz */ +void daPy_lk_c::checkBgCorrectClimbMove(cXyz*, cXyz*) { + /* Nonmatching */ +} + +/* 80136200-80136588 .text checkBgClimbMove__9daPy_lk_cFv */ +void daPy_lk_c::checkBgClimbMove() { + /* Nonmatching */ +} + +/* 80136588-801365F4 .text procClimbUpStart_init_sub__9daPy_lk_cFv */ +void daPy_lk_c::procClimbUpStart_init_sub() { + /* Nonmatching */ +} + +/* 801365F4-80136708 .text procClimbUpStart_init__9daPy_lk_cFv */ +void daPy_lk_c::procClimbUpStart_init() { + /* Nonmatching */ +} + +/* 80136708-8013680C .text procClimbUpStart__9daPy_lk_cFv */ +void daPy_lk_c::procClimbUpStart() { + /* Nonmatching */ +} + +/* 8013680C-8013693C .text procClimbDownStart_init__9daPy_lk_cFs */ +void daPy_lk_c::procClimbDownStart_init(short) { + /* Nonmatching */ +} + +/* 8013693C-80136A34 .text procClimbDownStart__9daPy_lk_cFv */ +void daPy_lk_c::procClimbDownStart() { + /* Nonmatching */ +} + +/* 80136A34-80136B80 .text procClimbMoveUpDown_init__9daPy_lk_cFi */ +void daPy_lk_c::procClimbMoveUpDown_init(int) { + /* Nonmatching */ +} + +/* 80136B80-80136C7C .text procClimbMoveUpDown__9daPy_lk_cFv */ +void daPy_lk_c::procClimbMoveUpDown() { + /* Nonmatching */ +} + +/* 80136C7C-80136E28 .text procClimbMoveSide_init__9daPy_lk_cFi */ +void daPy_lk_c::procClimbMoveSide_init(int) { + /* Nonmatching */ +} + +/* 80136E28-8013707C .text procClimbMoveSide__9daPy_lk_cFv */ +void daPy_lk_c::procClimbMoveSide() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_crawl.inc b/src/d/actor/d_a_player_crawl.inc new file mode 100644 index 000000000..26966a006 --- /dev/null +++ b/src/d/actor/d_a_player_crawl.inc @@ -0,0 +1,103 @@ +/** + * d_a_player_crawl.inc + * + * Code relating to crawling. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 801387A4-801387EC .text getCrawlMoveAnmSpeed__9daPy_lk_cFv */ +void daPy_lk_c::getCrawlMoveAnmSpeed() { + /* Nonmatching */ +} + +/* 801387EC-80138868 .text getCrawlMoveSpeed__9daPy_lk_cFv */ +void daPy_lk_c::getCrawlMoveSpeed() { + /* Nonmatching */ +} + +/* 80138868-801389D0 .text setCrawlMoveDirectionArrow__9daPy_lk_cFv */ +void daPy_lk_c::setCrawlMoveDirectionArrow() { + /* Nonmatching */ +} + +/* 801389D0-80138D50 .text changeCrawlAutoMoveProc__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::changeCrawlAutoMoveProc(cXyz*) { + /* Nonmatching */ +} + +/* 80138D50-80138F28 .text getCrawlMoveVec__9daPy_lk_cFP4cXyzP4cXyzP4cXyz */ +void daPy_lk_c::getCrawlMoveVec(cXyz*, cXyz*, cXyz*) { + /* Nonmatching */ +} + +/* 80138F28-801390B8 .text crawlBgCheck__9daPy_lk_cFP4cXyzP4cXyz */ +void daPy_lk_c::crawlBgCheck(cXyz*, cXyz*) { + /* Nonmatching */ +} + +/* 801390B8-801392BC .text checkCrawlSideWall__9daPy_lk_cFP4cXyzP4cXyzP4cXyzP4cXyzPsPs */ +void daPy_lk_c::checkCrawlSideWall(cXyz*, cXyz*, cXyz*, cXyz*, short*, short*) { + /* Nonmatching */ +} + +/* 801392BC-80139424 .text setDoStatusCrawl__9daPy_lk_cFv */ +void daPy_lk_c::setDoStatusCrawl() { + /* Nonmatching */ +} + +/* 80139424-801394F0 .text procCrawlStart_init__9daPy_lk_cFv */ +void daPy_lk_c::procCrawlStart_init() { + /* Nonmatching */ +} + +/* 801394F0-80139640 .text procCrawlStart__9daPy_lk_cFv */ +void daPy_lk_c::procCrawlStart() { + /* Nonmatching */ +} + +/* 80139640-801396B0 .text checkNotCrawlStand__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::checkNotCrawlStand(cXyz*) { + /* Nonmatching */ +} + +/* 801396B0-80139760 .text checkNotCrawlStand__9daPy_lk_cFP4cXyzP4cXyz */ +void daPy_lk_c::checkNotCrawlStand(cXyz*, cXyz*) { + /* Nonmatching */ +} + +/* 80139760-80139878 .text procCrawlMove_init__9daPy_lk_cFss */ +void daPy_lk_c::procCrawlMove_init(short, short) { + /* Nonmatching */ +} + +/* 80139878-8013A004 .text procCrawlMove__9daPy_lk_cFv */ +void daPy_lk_c::procCrawlMove() { + /* Nonmatching */ +} + +/* 8013A004-8013A0F0 .text procCrawlAutoMove_init__9daPy_lk_cFiP4cXyz */ +void daPy_lk_c::procCrawlAutoMove_init(int, cXyz*) { + /* Nonmatching */ +} + +/* 8013A0F0-8013A630 .text procCrawlAutoMove__9daPy_lk_cFv */ +void daPy_lk_c::procCrawlAutoMove() { + /* Nonmatching */ +} + +/* 8013A630-8013A7C4 .text procCrawlEnd_init__9daPy_lk_cFiss */ +void daPy_lk_c::procCrawlEnd_init(int, short, short) { + /* Nonmatching */ +} + +/* 8013A7C4-8013A85C .text procCrawlEnd__9daPy_lk_cFv */ +void daPy_lk_c::procCrawlEnd() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc new file mode 100644 index 000000000..b2a93c45f --- /dev/null +++ b/src/d/actor/d_a_player_dproc.inc @@ -0,0 +1,588 @@ +/** + * d_a_player_dproc.inc + * + * Code relating to "demo processes" (small cutscene-like actions). + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8012CD60-8012CDD4 .text getDemoLookActor__9daPy_lk_cFv */ +void daPy_lk_c::getDemoLookActor() { + /* Nonmatching */ +} + +/* 8012CDD4-8012CE2C .text setTinkleCeiverModel__9daPy_lk_cFv */ +void daPy_lk_c::setTinkleCeiverModel() { + /* Nonmatching */ +} + +/* 8012CE2C-8012CEFC .text setTalismanModel__9daPy_lk_cFv */ +void daPy_lk_c::setTalismanModel() { + /* Nonmatching */ +} + +/* 8012CEFC-8012CFE8 .text setLetterModel__9daPy_lk_cFv */ +void daPy_lk_c::setLetterModel() { + /* Nonmatching */ +} + +/* 8012CFE8-8012D010 .text checkCaughtShapeHide__9daPy_lk_cFv */ +void daPy_lk_c::checkCaughtShapeHide() { + /* Nonmatching */ +} + +/* 8012D010-8012D08C .text setShapeAngleToTalkActor__9daPy_lk_cFv */ +void daPy_lk_c::setShapeAngleToTalkActor() { + /* Nonmatching */ +} + +/* 8012D08C-8012D134 .text checkEndMessage__9daPy_lk_cFUl */ +void daPy_lk_c::checkEndMessage(unsigned long) { + /* Nonmatching */ +} + +/* 8012D134-8012D300 .text setTalkStartBack__9daPy_lk_cFv */ +void daPy_lk_c::setTalkStartBack() { + /* Nonmatching */ +} + +/* 8012D300-8012D3C4 .text dProcTool_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcTool_init() { + /* Nonmatching */ +} + +/* 8012D3C4-8012DA3C .text dProcTool__9daPy_lk_cFv */ +void daPy_lk_c::dProcTool() { + /* Nonmatching */ +} + +/* 8012DA3C-8012DBD0 .text dProcTalk_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcTalk_init() { + /* Nonmatching */ +} + +/* 8012DBD0-8012DDEC .text dProcTalk__9daPy_lk_cFv */ +void daPy_lk_c::dProcTalk() { + /* Nonmatching */ +} + +/* 8012DDEC-8012DEA0 .text dProcDamage_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcDamage_init() { + /* Nonmatching */ +} + +/* 8012DEA0-8012DF24 .text dProcDamage__9daPy_lk_cFv */ +void daPy_lk_c::dProcDamage() { + /* Nonmatching */ +} + +/* 8012DF24-8012E054 .text dProcHoldup_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcHoldup_init() { + /* Nonmatching */ +} + +/* 8012E054-8012E09C .text dProcHoldup__9daPy_lk_cFv */ +void daPy_lk_c::dProcHoldup() { + /* Nonmatching */ +} + +/* 8012E09C-8012E244 .text dProcOpenTreasure_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcOpenTreasure_init() { + /* Nonmatching */ +} + +/* 8012E244-8012E28C .text dProcOpenTreasure__9daPy_lk_cFv */ +void daPy_lk_c::dProcOpenTreasure() { + /* Nonmatching */ +} + +/* 8012E28C-8012E418 .text setGetItemSound__9daPy_lk_cFUsi */ +void daPy_lk_c::setGetItemSound(unsigned short, int) { + /* Nonmatching */ +} + +/* 8012E418-8012E6B4 .text setGetDemo__9daPy_lk_cFv */ +void daPy_lk_c::setGetDemo() { + /* Nonmatching */ +} + +/* 8012E6B4-8012E8B0 .text dProcGetItem_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcGetItem_init() { + /* Nonmatching */ +} + +/* 8012E8B0-8012ECB0 .text dProcGetItem__9daPy_lk_cFv */ +void daPy_lk_c::dProcGetItem() { + /* Nonmatching */ +} + +/* 8012ECB0-8012ED30 .text dProcUnequip_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcUnequip_init() { + /* Nonmatching */ +} + +/* 8012ED30-8012ED74 .text dProcUnequip__9daPy_lk_cFv */ +void daPy_lk_c::dProcUnequip() { + /* Nonmatching */ +} + +/* 8012ED74-8012EE0C .text dProcLavaDamage_init_sub__9daPy_lk_cFv */ +void daPy_lk_c::dProcLavaDamage_init_sub() { + /* Nonmatching */ +} + +/* 8012EE0C-8012EEE4 .text dProcLavaDamage_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLavaDamage_init() { + /* Nonmatching */ +} + +/* 8012EEE4-8012EF78 .text dProcLavaDamage__9daPy_lk_cFv */ +void daPy_lk_c::dProcLavaDamage() { + /* Nonmatching */ +} + +/* 8012EF78-8012F0DC .text dProcFreezeDamage_init_sub__9daPy_lk_cFi */ +void daPy_lk_c::dProcFreezeDamage_init_sub(int) { + /* Nonmatching */ +} + +/* 8012F0DC-8012F174 .text dProcFreezeDamage_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcFreezeDamage_init() { + /* Nonmatching */ +} + +/* 8012F174-8012F210 .text dProcFreezeDamage__9daPy_lk_cFv */ +void daPy_lk_c::dProcFreezeDamage() { + /* Nonmatching */ +} + +/* 8012F210-8012F288 .text dProcDead_init_sub__9daPy_lk_cFv */ +void daPy_lk_c::dProcDead_init_sub() { + /* Nonmatching */ +} + +/* 8012F288-8012F38C .text dProcDead_init_sub2__9daPy_lk_cFv */ +void daPy_lk_c::dProcDead_init_sub2() { + /* Nonmatching */ +} + +/* 8012F38C-8012F3B8 .text checkGameOverStart__9daPy_lk_cFv */ +void daPy_lk_c::checkGameOverStart() { + /* Nonmatching */ +} + +/* 8012F3B8-8012F5A8 .text dProcDead_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcDead_init() { + /* Nonmatching */ +} + +/* 8012F5A8-8012F928 .text dProcDead__9daPy_lk_cFv */ +void daPy_lk_c::dProcDead() { + /* Nonmatching */ +} + +/* 8012F928-8012F99C .text dProcLookAround_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookAround_init() { + /* Nonmatching */ +} + +/* 8012F99C-8012F9E4 .text dProcLookAround__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookAround() { + /* Nonmatching */ +} + +/* 8012F9E4-8012FA50 .text dProcSalute_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcSalute_init() { + /* Nonmatching */ +} + +/* 8012FA50-8012FA98 .text dProcSalute__9daPy_lk_cFv */ +void daPy_lk_c::dProcSalute() { + /* Nonmatching */ +} + +/* 8012FA98-8012FB2C .text dProcLookAround2_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookAround2_init() { + /* Nonmatching */ +} + +/* 8012FB2C-8012FB88 .text dProcLookAround2__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookAround2() { + /* Nonmatching */ +} + +/* 8012FB88-8012FC24 .text dProcTalismanPickup_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcTalismanPickup_init() { + /* Nonmatching */ +} + +/* 8012FC24-8012FCC0 .text dProcTalismanPickup__9daPy_lk_cFv */ +void daPy_lk_c::dProcTalismanPickup() { + /* Nonmatching */ +} + +/* 8012FCC0-8012FE58 .text dProcTalismanWait_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcTalismanWait_init() { + /* Nonmatching */ +} + +/* 8012FE58-8012FFEC .text dProcTalismanWait__9daPy_lk_cFv */ +void daPy_lk_c::dProcTalismanWait() { + /* Nonmatching */ +} + +/* 8012FFEC-801300F4 .text dProcSurprised_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcSurprised_init() { + /* Nonmatching */ +} + +/* 801300F4-801301C0 .text dProcSurprised__9daPy_lk_cFv */ +void daPy_lk_c::dProcSurprised() { + /* Nonmatching */ +} + +/* 801301C0-80130278 .text dProcTurnBack_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcTurnBack_init() { + /* Nonmatching */ +} + +/* 80130278-801302CC .text dProcTurnBack__9daPy_lk_cFv */ +void daPy_lk_c::dProcTurnBack() { + /* Nonmatching */ +} + +/* 801302CC-80130338 .text dProcLookUp_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookUp_init() { + /* Nonmatching */ +} + +/* 80130338-80130380 .text dProcLookUp__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookUp() { + /* Nonmatching */ +} + +/* 80130380-801303FC .text dProcQuakeWait_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcQuakeWait_init() { + /* Nonmatching */ +} + +/* 801303FC-80130434 .text dProcQuakeWait__9daPy_lk_cFv */ +void daPy_lk_c::dProcQuakeWait() { + /* Nonmatching */ +} + +/* 80130434-801304A0 .text dProcDance_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcDance_init() { + /* Nonmatching */ +} + +/* 801304A0-801304D8 .text dProcDance__9daPy_lk_cFv */ +void daPy_lk_c::dProcDance() { + /* Nonmatching */ +} + +/* 801304D8-80130570 .text dProcCaught_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcCaught_init() { + /* Nonmatching */ +} + +/* 80130570-801305A8 .text dProcCaught__9daPy_lk_cFv */ +void daPy_lk_c::dProcCaught() { + /* Nonmatching */ +} + +/* 801305A8-8013065C .text dProcLookWait_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookWait_init() { + /* Nonmatching */ +} + +/* 8013065C-80130724 .text dProcLookWait__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookWait() { + /* Nonmatching */ +} + +/* 80130724-801307AC .text dProcPushPullWait_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcPushPullWait_init() { + /* Nonmatching */ +} + +/* 801307AC-801307E4 .text dProcPushPullWait__9daPy_lk_cFv */ +void daPy_lk_c::dProcPushPullWait() { + /* Nonmatching */ +} + +/* 801307E4-80130884 .text dProcPushMove_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcPushMove_init() { + /* Nonmatching */ +} + +/* 80130884-801308BC .text dProcPushMove__9daPy_lk_cFv */ +void daPy_lk_c::dProcPushMove() { + /* Nonmatching */ +} + +/* 801308BC-8013098C .text dProcDoorOpen_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcDoorOpen_init() { + /* Nonmatching */ +} + +/* 8013098C-80130A54 .text dProcDoorOpen__9daPy_lk_cFv */ +void daPy_lk_c::dProcDoorOpen() { + /* Nonmatching */ +} + +/* 80130A54-80130ADC .text dProcNod_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcNod_init() { + /* Nonmatching */ +} + +/* 80130ADC-80130B38 .text dProcNod__9daPy_lk_cFv */ +void daPy_lk_c::dProcNod() { + /* Nonmatching */ +} + +/* 80130B38-80130BE8 .text dProcPresent_init_sub__9daPy_lk_cFv */ +void daPy_lk_c::dProcPresent_init_sub() { + /* Nonmatching */ +} + +/* 80130BE8-80130CA0 .text dProcPresent_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcPresent_init() { + /* Nonmatching */ +} + +/* 80130CA0-80130E88 .text dProcPresent__9daPy_lk_cFv */ +void daPy_lk_c::dProcPresent() { + /* Nonmatching */ +} + +/* 80130E88-80130F2C .text dProcWindChange_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcWindChange_init() { + /* Nonmatching */ +} + +/* 80130F2C-80130F98 .text dProcWindChange__9daPy_lk_cFv */ +void daPy_lk_c::dProcWindChange() { + /* Nonmatching */ +} + +/* 80130F98-8013116C .text dProcStandItemPut_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcStandItemPut_init() { + /* Nonmatching */ +} + +/* 8013116C-80131274 .text dProcStandItemPut__9daPy_lk_cFv */ +void daPy_lk_c::dProcStandItemPut() { + /* Nonmatching */ +} + +/* 80131274-80131310 .text dProcVorcanoFail_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcVorcanoFail_init() { + /* Nonmatching */ +} + +/* 80131310-80131348 .text dProcVorcanoFail__9daPy_lk_cFv */ +void daPy_lk_c::dProcVorcanoFail() { + /* Nonmatching */ +} + +/* 80131348-80131450 .text dProcSlightSurprised_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcSlightSurprised_init() { + /* Nonmatching */ +} + +/* 80131450-8013154C .text dProcSlightSurprised__9daPy_lk_cFv */ +void daPy_lk_c::dProcSlightSurprised() { + /* Nonmatching */ +} + +/* 8013154C-801315F8 .text dProcSmile_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcSmile_init() { + /* Nonmatching */ +} + +/* 801315F8-8013168C .text dProcSmile__9daPy_lk_cFv */ +void daPy_lk_c::dProcSmile() { + /* Nonmatching */ +} + +/* 8013168C-80131780 .text dProcBossWarp_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcBossWarp_init() { + /* Nonmatching */ +} + +/* 80131780-8013182C .text dProcBossWarp__9daPy_lk_cFv */ +void daPy_lk_c::dProcBossWarp() { + /* Nonmatching */ +} + +/* 8013182C-80131908 .text dProcAgbUse_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcAgbUse_init() { + /* Nonmatching */ +} + +/* 80131908-8013194C .text dProcAgbUse__9daPy_lk_cFv */ +void daPy_lk_c::dProcAgbUse() { + /* Nonmatching */ +} + +/* 8013194C-801319D0 .text dProcLookTurn_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookTurn_init() { + /* Nonmatching */ +} + +/* 801319D0-80131A7C .text dProcLookTurn__9daPy_lk_cFv */ +void daPy_lk_c::dProcLookTurn() { + /* Nonmatching */ +} + +/* 80131A7C-80131B18 .text dProcLetterOpen_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLetterOpen_init() { + /* Nonmatching */ +} + +/* 80131B18-80131B98 .text dProcLetterOpen__9daPy_lk_cFv */ +void daPy_lk_c::dProcLetterOpen() { + /* Nonmatching */ +} + +/* 80131B98-80131C54 .text dProcLetterRead_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLetterRead_init() { + /* Nonmatching */ +} + +/* 80131C54-80131D6C .text dProcLetterRead__9daPy_lk_cFv */ +void daPy_lk_c::dProcLetterRead() { + /* Nonmatching */ +} + +/* 80131D6C-80131DD4 .text dProcRedeadStop_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcRedeadStop_init() { + /* Nonmatching */ +} + +/* 80131DD4-80131E0C .text dProcRedeadStop__9daPy_lk_cFv */ +void daPy_lk_c::dProcRedeadStop() { + /* Nonmatching */ +} + +/* 80131E0C-80131E74 .text dProcRedeadCatch_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcRedeadCatch_init() { + /* Nonmatching */ +} + +/* 80131E74-80131EAC .text dProcRedeadCatch__9daPy_lk_cFv */ +void daPy_lk_c::dProcRedeadCatch() { + /* Nonmatching */ +} + +/* 80131EAC-80131FB0 .text dProcGetDance_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcGetDance_init() { + /* Nonmatching */ +} + +/* 80131FB0-80132224 .text dProcGetDance__9daPy_lk_cFv */ +void daPy_lk_c::dProcGetDance() { + /* Nonmatching */ +} + +/* 80132224-801322D0 .text dProcBottleOpenFairy_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcBottleOpenFairy_init() { + /* Nonmatching */ +} + +/* 801322D0-80132438 .text dProcBottleOpenFairy__9daPy_lk_cFv */ +void daPy_lk_c::dProcBottleOpenFairy() { + /* Nonmatching */ +} + +/* 80132438-801324D0 .text dProcWarpShort_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcWarpShort_init() { + /* Nonmatching */ +} + +/* 801324D0-80132534 .text dProcWarpShort__9daPy_lk_cFv */ +void daPy_lk_c::dProcWarpShort() { + /* Nonmatching */ +} + +/* 80132534-801325F0 .text dProcOpenSalvageTreasure_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcOpenSalvageTreasure_init() { + /* Nonmatching */ +} + +/* 801325F0-8013265C .text dProcOpenSalvageTreasure__9daPy_lk_cFv */ +void daPy_lk_c::dProcOpenSalvageTreasure() { + /* Nonmatching */ +} + +/* 8013265C-80132728 .text dProcSurprisedWait_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcSurprisedWait_init() { + /* Nonmatching */ +} + +/* 80132728-80132784 .text dProcSurprisedWait__9daPy_lk_cFv */ +void daPy_lk_c::dProcSurprisedWait() { + /* Nonmatching */ +} + +/* 80132784-80132844 .text dProcPowerUpWait_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcPowerUpWait_init() { + /* Nonmatching */ +} + +/* 80132844-8013294C .text dProcPowerUp_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcPowerUp_init() { + /* Nonmatching */ +} + +/* 8013294C-80132A88 .text dProcPowerUp__9daPy_lk_cFv */ +void daPy_lk_c::dProcPowerUp() { + /* Nonmatching */ +} + +/* 80132A88-80132B68 .text dProcShipSit_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcShipSit_init() { + /* Nonmatching */ +} + +/* 80132B68-80132BC4 .text dProcShipSit__9daPy_lk_cFv */ +void daPy_lk_c::dProcShipSit() { + /* Nonmatching */ +} + +/* 80132BC4-80132D00 .text dProcLastCombo_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcLastCombo_init() { + /* Nonmatching */ +} + +/* 80132D00-80132DDC .text dProcLastCombo__9daPy_lk_cFv */ +void daPy_lk_c::dProcLastCombo() { + /* Nonmatching */ +} + +/* 80132DDC-80132E48 .text dProcHandUp_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcHandUp_init() { + /* Nonmatching */ +} + +/* 80132E48-80132E80 .text dProcHandUp__9daPy_lk_cFv */ +void daPy_lk_c::dProcHandUp() { + /* Nonmatching */ +} + +/* 80132E80-80132EEC .text dProcIceSlip_init__9daPy_lk_cFv */ +void daPy_lk_c::dProcIceSlip_init() { + /* Nonmatching */ +} + +/* 80132EEC-80132F34 .text dProcIceSlip__9daPy_lk_cFv */ +void daPy_lk_c::dProcIceSlip() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_fan.inc b/src/d/actor/d_a_player_fan.inc new file mode 100644 index 000000000..01ed3f81b --- /dev/null +++ b/src/d/actor/d_a_player_fan.inc @@ -0,0 +1,88 @@ +/** + * d_a_player_fan.inc + * + * Code relating to the Deku Leaf item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8014BAA0-8014BAEC .text fanWindEffectDraw__9daPy_lk_cFv */ +void daPy_lk_c::fanWindEffectDraw() { + /* Nonmatching */ +} + +/* 8014BAEC-8014BB38 .text fanWindCrashEffectDraw__9daPy_lk_cFv */ +void daPy_lk_c::fanWindCrashEffectDraw() { + /* Nonmatching */ +} + +/* 8014BB38-8014BBE8 .text fanJointCB__9daPy_lk_cFi */ +void daPy_lk_c::fanJointCB(int) { + /* Nonmatching */ +} + +/* 8014BBE8-8014BC2C .text daPy_fanJointCallback__FP7J3DNodei */ +void daPy_fanJointCallback(J3DNode*, int) { + /* Nonmatching */ +} + +/* 8014BC2C-8014BD08 .text parachuteJointCB__9daPy_lk_cFi */ +void daPy_lk_c::parachuteJointCB(int) { + /* Nonmatching */ +} + +/* 8014BD08-8014BD4C .text daPy_parachuteJointCallback__FP7J3DNodei */ +void daPy_parachuteJointCallback(J3DNode*, int) { + /* Nonmatching */ +} + +/* 8014BD4C-8014BE50 .text setShapeFanLeaf__9daPy_lk_cFv */ +void daPy_lk_c::setShapeFanLeaf() { + /* Nonmatching */ +} + +/* 8014BE50-8014BEEC .text checkFanGlideProc__9daPy_lk_cFi */ +void daPy_lk_c::checkFanGlideProc(int) { + /* Nonmatching */ +} + +/* 8014BEEC-8014BFBC .text setFanModel__9daPy_lk_cFv */ +void daPy_lk_c::setFanModel() { + /* Nonmatching */ +} + +/* 8014BFBC-8014C0C0 .text setSmallFanModel__9daPy_lk_cFv */ +void daPy_lk_c::setSmallFanModel() { + /* Nonmatching */ +} + +/* 8014C0C0-8014C254 .text setParachuteFanModel__9daPy_lk_cFf */ +void daPy_lk_c::setParachuteFanModel(float) { + /* Nonmatching */ +} + +/* 8014C254-8014C34C .text procFanSwing_init__9daPy_lk_cFv */ +void daPy_lk_c::procFanSwing_init() { + /* Nonmatching */ +} + +/* 8014C34C-8014CA1C .text procFanSwing__9daPy_lk_cFv */ +void daPy_lk_c::procFanSwing() { + /* Nonmatching */ +} + +/* 8014CA1C-8014CB94 .text procFanGlide_init__9daPy_lk_cFi */ +void daPy_lk_c::procFanGlide_init(int) { + /* Nonmatching */ +} + +/* 8014CB94-8014D778 .text procFanGlide__9daPy_lk_cFv */ +void daPy_lk_c::procFanGlide() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_food.inc b/src/d/actor/d_a_player_food.inc new file mode 100644 index 000000000..62d23fce8 --- /dev/null +++ b/src/d/actor/d_a_player_food.inc @@ -0,0 +1,38 @@ +/** + * d_a_player_food.inc + * + * Code relating to the All-Purpose Bait and Hyoi Pear items. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80154334-801543A0 .text setHyoiModel__9daPy_lk_cFv */ +void daPy_lk_c::setHyoiModel() { + /* Nonmatching */ +} + +/* 801543A0-801546F4 .text procFoodThrow_init__9daPy_lk_cFv */ +void daPy_lk_c::procFoodThrow_init() { + /* Nonmatching */ +} + +/* 801546F4-80154880 .text procFoodThrow__9daPy_lk_cFv */ +void daPy_lk_c::procFoodThrow() { + /* Nonmatching */ +} + +/* 80154880-80154A48 .text procFoodSet_init__9daPy_lk_cFv */ +void daPy_lk_c::procFoodSet_init() { + /* Nonmatching */ +} + +/* 80154A48-80154B80 .text procFoodSet__9daPy_lk_cFv */ +void daPy_lk_c::procFoodSet() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_grab.inc b/src/d/actor/d_a_player_grab.inc new file mode 100644 index 000000000..1132ededd --- /dev/null +++ b/src/d/actor/d_a_player_grab.inc @@ -0,0 +1,133 @@ +/** + * d_a_player_grab.inc + * + * Code relating to grabbing, holding, and throwing other actors. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8013A85C-8013A890 .text checkGrabSpecialHeavyState__9daPy_lk_cFv */ +void daPy_lk_c::checkGrabSpecialHeavyState() { + /* Nonmatching */ +} + +/* 8013A890-8013A8B4 .text getGrabMissActor__9daPy_lk_cFv */ +void daPy_lk_c::getGrabMissActor() { + /* Nonmatching */ +} + +/* 8013A8B4-8013A904 .text setWeaponBlur__9daPy_lk_cFv */ +void daPy_lk_c::setWeaponBlur() { + /* Nonmatching */ +} + +/* 8013A904-8013A97C .text checkGrabBarrelSearch__9daPy_lk_cFi */ +void daPy_lk_c::checkGrabBarrelSearch(int) { + /* Nonmatching */ +} + +/* 8013A97C-8013AF84 .text setGrabItemPos__9daPy_lk_cFv */ +void daPy_lk_c::setGrabItemPos() { + /* Nonmatching */ +} + +/* 8013AF84-8013B05C .text freeGrabItem__9daPy_lk_cFv */ +void daPy_lk_c::freeGrabItem() { + /* Nonmatching */ +} + +/* 8013B05C-8013B458 .text checkNextActionGrab__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionGrab() { + /* Nonmatching */ +} + +/* 8013B458-8013B56C .text initGrabNextMode__9daPy_lk_cFv */ +void daPy_lk_c::initGrabNextMode() { + /* Nonmatching */ +} + +/* 8013B56C-8013B6F4 .text procGrabReady_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabReady_init() { + /* Nonmatching */ +} + +/* 8013B6F4-8013B8A0 .text procGrabReady__9daPy_lk_cFv */ +void daPy_lk_c::procGrabReady() { + /* Nonmatching */ +} + +/* 8013B8A0-8013BA50 .text procGrabUp_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabUp_init() { + /* Nonmatching */ +} + +/* 8013BA50-8013BBBC .text procGrabUp__9daPy_lk_cFv */ +void daPy_lk_c::procGrabUp() { + /* Nonmatching */ +} + +/* 8013BBBC-8013BC40 .text procGrabMiss_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabMiss_init() { + /* Nonmatching */ +} + +/* 8013BC40-8013BD30 .text procGrabMiss__9daPy_lk_cFv */ +void daPy_lk_c::procGrabMiss() { + /* Nonmatching */ +} + +/* 8013BD30-8013BE10 .text procGrabThrow_init__9daPy_lk_cFi */ +void daPy_lk_c::procGrabThrow_init(int) { + /* Nonmatching */ +} + +/* 8013BE10-8013C020 .text procGrabThrow__9daPy_lk_cFv */ +void daPy_lk_c::procGrabThrow() { + /* Nonmatching */ +} + +/* 8013C020-8013C124 .text procGrabPut_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabPut_init() { + /* Nonmatching */ +} + +/* 8013C124-8013C504 .text procGrabPut__9daPy_lk_cFv */ +void daPy_lk_c::procGrabPut() { + /* Nonmatching */ +} + +/* 8013C504-8013C678 .text procGrabWait_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabWait_init() { + /* Nonmatching */ +} + +/* 8013C678-8013C914 .text procGrabWait__9daPy_lk_cFv */ +void daPy_lk_c::procGrabWait() { + /* Nonmatching */ +} + +/* 8013C914-8013C9AC .text procGrabHeavyWait_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabHeavyWait_init() { + /* Nonmatching */ +} + +/* 8013C9AC-8013CB78 .text procGrabHeavyWait__9daPy_lk_cFv */ +void daPy_lk_c::procGrabHeavyWait() { + /* Nonmatching */ +} + +/* 8013CB78-8013CBD0 .text procGrabRebound_init__9daPy_lk_cFv */ +void daPy_lk_c::procGrabRebound_init() { + /* Nonmatching */ +} + +/* 8013CBD0-8013CC64 .text procGrabRebound__9daPy_lk_cFv */ +void daPy_lk_c::procGrabRebound() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_hammer.inc b/src/d/actor/d_a_player_hammer.inc new file mode 100644 index 000000000..33c1c3d96 --- /dev/null +++ b/src/d/actor/d_a_player_hammer.inc @@ -0,0 +1,68 @@ +/** + * d_a_player_hammer.inc + * + * Code relating to the Skull Hammer item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8015023C-80150324 .text setHammerModel__9daPy_lk_cFv */ +void daPy_lk_c::setHammerModel() { + /* Nonmatching */ +} + +/* 80150324-801508FC .text setHammerQuake__9daPy_lk_cFP13cBgS_PolyInfoPC4cXyzi */ +void daPy_lk_c::setHammerQuake(cBgS_PolyInfo*, const cXyz*, int) { + /* Nonmatching */ +} + +/* 801508FC-80150B60 .text setHammerWaterSplash__9daPy_lk_cFv */ +void daPy_lk_c::setHammerWaterSplash() { + /* Nonmatching */ +} + +/* 80150B60-80150C40 .text procHammerSideSwing_init__9daPy_lk_cFv */ +void daPy_lk_c::procHammerSideSwing_init() { + /* Nonmatching */ +} + +/* 80150C40-80150DDC .text procHammerSideSwing__9daPy_lk_cFv */ +void daPy_lk_c::procHammerSideSwing() { + /* Nonmatching */ +} + +/* 80150DDC-80150F08 .text procHammerFrontSwingReady_init__9daPy_lk_cFv */ +void daPy_lk_c::procHammerFrontSwingReady_init() { + /* Nonmatching */ +} + +/* 80150F08-80150F98 .text procHammerFrontSwingReady__9daPy_lk_cFv */ +void daPy_lk_c::procHammerFrontSwingReady() { + /* Nonmatching */ +} + +/* 80150F98-801510DC .text procHammerFrontSwing_init__9daPy_lk_cFv */ +void daPy_lk_c::procHammerFrontSwing_init() { + /* Nonmatching */ +} + +/* 801510DC-801513D4 .text procHammerFrontSwing__9daPy_lk_cFv */ +void daPy_lk_c::procHammerFrontSwing() { + /* Nonmatching */ +} + +/* 801513D4-80151450 .text procHammerFrontSwingEnd_init__9daPy_lk_cFv */ +void daPy_lk_c::procHammerFrontSwingEnd_init() { + /* Nonmatching */ +} + +/* 80151450-801514B0 .text procHammerFrontSwingEnd__9daPy_lk_cFv */ +void daPy_lk_c::procHammerFrontSwingEnd() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_hang.inc b/src/d/actor/d_a_player_hang.inc new file mode 100644 index 000000000..3e55d6db0 --- /dev/null +++ b/src/d/actor/d_a_player_hang.inc @@ -0,0 +1,108 @@ +/** + * d_a_player_hang.inc + * + * Code relating to hanging and moving on a ledge. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80133F1C-80133F40 .text getHangMoveAnmSpeed__9daPy_lk_cFv */ +void daPy_lk_c::getHangMoveAnmSpeed() { + /* Nonmatching */ +} + +/* 80133F40-80133FB4 .text getHangDirectionFromAngle__9daPy_lk_cFv */ +void daPy_lk_c::getHangDirectionFromAngle() { + /* Nonmatching */ +} + +/* 80133FB4-801342D8 .text changeHangMoveProc__9daPy_lk_cFi */ +void daPy_lk_c::changeHangMoveProc(int) { + /* Nonmatching */ +} + +/* 801342D8-80134440 .text changeHangEndProc__9daPy_lk_cFi */ +void daPy_lk_c::changeHangEndProc(int) { + /* Nonmatching */ +} + +/* 80134440-80134630 .text setHangShapeOffset__9daPy_lk_cFv */ +void daPy_lk_c::setHangShapeOffset() { + /* Nonmatching */ +} + +/* 80134630-80134908 .text procHangStart_init__9daPy_lk_cFv */ +void daPy_lk_c::procHangStart_init() { + /* Nonmatching */ +} + +/* 80134908-801349D8 .text procHangStart__9daPy_lk_cFv */ +void daPy_lk_c::procHangStart() { + /* Nonmatching */ +} + +/* 801349D8-80134DF8 .text procHangFallStart_init__9daPy_lk_cFP8cM3dGPla */ +void daPy_lk_c::procHangFallStart_init(cM3dGPla*) { + /* Nonmatching */ +} + +/* 80134DF8-80134EF0 .text procHangFallStart__9daPy_lk_cFv */ +void daPy_lk_c::procHangFallStart() { + /* Nonmatching */ +} + +/* 80134EF0-80134F74 .text procHangUp_init__9daPy_lk_cFi */ +void daPy_lk_c::procHangUp_init(int) { + /* Nonmatching */ +} + +/* 80134F74-80135094 .text procHangUp__9daPy_lk_cFv */ +void daPy_lk_c::procHangUp() { + /* Nonmatching */ +} + +/* 80135094-80135140 .text procHangWait_init__9daPy_lk_cFv */ +void daPy_lk_c::procHangWait_init() { + /* Nonmatching */ +} + +/* 80135140-801351FC .text procHangWait__9daPy_lk_cFv */ +void daPy_lk_c::procHangWait() { + /* Nonmatching */ +} + +/* 801351FC-80135354 .text procHangMove_init__9daPy_lk_cFi */ +void daPy_lk_c::procHangMove_init(int) { + /* Nonmatching */ +} + +/* 80135354-801357C0 .text procHangMove__9daPy_lk_cFv */ +void daPy_lk_c::procHangMove() { + /* Nonmatching */ +} + +/* 801357C0-80135874 .text procHangClimb_init__9daPy_lk_cFf */ +void daPy_lk_c::procHangClimb_init(float) { + /* Nonmatching */ +} + +/* 80135874-801358D0 .text procHangClimb__9daPy_lk_cFv */ +void daPy_lk_c::procHangClimb() { + /* Nonmatching */ +} + +/* 801358D0-80135AE0 .text procHangWallCatch_init__9daPy_lk_cFv */ +void daPy_lk_c::procHangWallCatch_init() { + /* Nonmatching */ +} + +/* 80135AE0-80135B50 .text procHangWallCatch__9daPy_lk_cFv */ +void daPy_lk_c::procHangWallCatch() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_hook.inc b/src/d/actor/d_a_player_hook.inc new file mode 100644 index 000000000..e3d041afd --- /dev/null +++ b/src/d/actor/d_a_player_hook.inc @@ -0,0 +1,78 @@ +/** + * d_a_player_hook.inc + * + * Code relating to the Hookshot item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8014AB5C-8014ABA0 .text checkHookshotReturn__9daPy_lk_cFv */ +void daPy_lk_c::checkHookshotReturn() { + /* Nonmatching */ +} + +/* 8014ABA0-8014ABF4 .text setHookshotCarryOffset__9daPy_lk_cFUiPC4cXyz */ +void daPy_lk_c::setHookshotCarryOffset(unsigned int, const cXyz*) { + /* Nonmatching */ +} + +/* 8014ABF4-8014ACCC .text setHookshotModel__9daPy_lk_cFv */ +void daPy_lk_c::setHookshotModel() { + /* Nonmatching */ +} + +/* 8014ACCC-8014B02C .text setHookshotSight__9daPy_lk_cFv */ +void daPy_lk_c::setHookshotSight() { + /* Nonmatching */ +} + +/* 8014B02C-8014B05C .text freeHookshotItem__9daPy_lk_cFv */ +void daPy_lk_c::freeHookshotItem() { + /* Nonmatching */ +} + +/* 8014B05C-8014B2B8 .text checkNextActionHookshotReady__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionHookshotReady() { + /* Nonmatching */ +} + +/* 8014B2B8-8014B350 .text checkNextHookshotMode__9daPy_lk_cFv */ +void daPy_lk_c::checkNextHookshotMode() { + /* Nonmatching */ +} + +/* 8014B350-8014B3F4 .text procHookshotSubject_init__9daPy_lk_cFv */ +void daPy_lk_c::procHookshotSubject_init() { + /* Nonmatching */ +} + +/* 8014B3F4-8014B518 .text procHookshotSubject__9daPy_lk_cFv */ +void daPy_lk_c::procHookshotSubject() { + /* Nonmatching */ +} + +/* 8014B518-8014B5E8 .text procHookshotMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procHookshotMove_init() { + /* Nonmatching */ +} + +/* 8014B5E8-8014B74C .text procHookshotMove__9daPy_lk_cFv */ +void daPy_lk_c::procHookshotMove() { + /* Nonmatching */ +} + +/* 8014B74C-8014B854 .text procHookshotFly_init__9daPy_lk_cFv */ +void daPy_lk_c::procHookshotFly_init() { + /* Nonmatching */ +} + +/* 8014B854-8014BA84 .text procHookshotFly__9daPy_lk_cFv */ +void daPy_lk_c::procHookshotFly() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_ladder.inc b/src/d/actor/d_a_player_ladder.inc new file mode 100644 index 000000000..188b786c8 --- /dev/null +++ b/src/d/actor/d_a_player_ladder.inc @@ -0,0 +1,93 @@ +/** + * d_a_player_ladder.inc + * + * Code relating to getting on, getting off, and climbing ladders. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80132F34-80132F58 .text getLadderMoveAnmSpeed__9daPy_lk_cFv */ +void daPy_lk_c::getLadderMoveAnmSpeed() { + /* Nonmatching */ +} + +/* 80132F58-80133058 .text setLadderFootSe__9daPy_lk_cFv */ +void daPy_lk_c::setLadderFootSe() { + /* Nonmatching */ +} + +/* 80133058-80133240 .text changeLadderMoveProc__9daPy_lk_cFi */ +void daPy_lk_c::changeLadderMoveProc(int) { + /* Nonmatching */ +} + +/* 80133240-801333A8 .text setMoveBGLadderCorrect__9daPy_lk_cFv */ +void daPy_lk_c::setMoveBGLadderCorrect() { + /* Nonmatching */ +} + +/* 801333A8-80133414 .text procLadderUpStart_init_sub__9daPy_lk_cFv */ +void daPy_lk_c::procLadderUpStart_init_sub() { + /* Nonmatching */ +} + +/* 80133414-8013356C .text procLadderUpStart_init__9daPy_lk_cFv */ +void daPy_lk_c::procLadderUpStart_init() { + /* Nonmatching */ +} + +/* 8013356C-80133670 .text procLadderUpStart__9daPy_lk_cFv */ +void daPy_lk_c::procLadderUpStart() { + /* Nonmatching */ +} + +/* 80133670-80133710 .text procLadderUpEnd_init__9daPy_lk_cFi */ +void daPy_lk_c::procLadderUpEnd_init(int) { + /* Nonmatching */ +} + +/* 80133710-801337B4 .text procLadderUpEnd__9daPy_lk_cFv */ +void daPy_lk_c::procLadderUpEnd() { + /* Nonmatching */ +} + +/* 801337B4-8013384C .text procLadderDownStart_init_sub__9daPy_lk_cFv */ +void daPy_lk_c::procLadderDownStart_init_sub() { + /* Nonmatching */ +} + +/* 8013384C-8013399C .text procLadderDownStart_init__9daPy_lk_cFv */ +void daPy_lk_c::procLadderDownStart_init() { + /* Nonmatching */ +} + +/* 8013399C-80133AB8 .text procLadderDownStart__9daPy_lk_cFv */ +void daPy_lk_c::procLadderDownStart() { + /* Nonmatching */ +} + +/* 80133AB8-80133B4C .text procLadderDownEnd_init__9daPy_lk_cFi */ +void daPy_lk_c::procLadderDownEnd_init(int) { + /* Nonmatching */ +} + +/* 80133B4C-80133BB4 .text procLadderDownEnd__9daPy_lk_cFv */ +void daPy_lk_c::procLadderDownEnd() { + /* Nonmatching */ +} + +/* 80133BB4-80133E28 .text procLadderMove_init__9daPy_lk_cFiiP4cXyz */ +void daPy_lk_c::procLadderMove_init(int, int, cXyz*) { + /* Nonmatching */ +} + +/* 80133E28-80133F1C .text procLadderMove__9daPy_lk_cFv */ +void daPy_lk_c::procLadderMove() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index cba6a28e3..9098727f1 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -1,9 +1,13 @@ -// -// Generated by dtk -// Translation Unit: d_a_player_main.cpp -// +/** + * d_a_player_main.cpp + * + * Main file for the Link (Player) actor. + * + * Much of Link's code is spread across various `.inc` files and included directly + * into this one to make the file size more managable. + * The original split locations are indicated in the map file. +*/ -#include "dolphin/types.h" #include "d/actor/d_a_player_link.h" #include "d/d_com_inf_game.h" #include "d/d_com_lib_game.h" @@ -1636,2957 +1640,50 @@ void daPy_lk_c::getBokoFlamePos(cXyz*) { /* Nonmatching */ } -/* 8012901C-80129034 .text setup__24daPy_swimTailEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_swimTailEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_particle.inc" -/* 80129034-801290D8 .text getMaxWaterY__24daPy_swimTailEcallBack_cFPQ29JGeometry8TVec3 */ -void daPy_swimTailEcallBack_c::getMaxWaterY(JGeometry::TVec3*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_dproc.inc" -/* 801290D8-8012910C .text remove__24daPy_swimTailEcallBack_cFv */ -void daPy_swimTailEcallBack_c::remove() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_ladder.inc" -/* 8012910C-80129310 .text execute__24daPy_swimTailEcallBack_cFP14JPABaseEmitter */ -void daPy_swimTailEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_hang.inc" -/* 80129310-80129348 .text draw__24daPy_swimTailEcallBack_cFP14JPABaseEmitter */ -void daPy_swimTailEcallBack_c::draw(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_climb.inc" -/* 80129348-8012952C .text draw__18daPy_sightPacket_cFv */ -void daPy_sightPacket_c::draw() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_whide.inc" -/* 8012952C-801296FC .text setSight__18daPy_sightPacket_cFv */ -void daPy_sightPacket_c::setSight() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_crawl.inc" -/* 801296FC-801297F4 .text initSwBlur__13daPy_swBlur_cFPA4_fifi */ -void daPy_swBlur_c::initSwBlur(float(*)[4], int, float, int) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_grab.inc" -/* 801297F4-80129A78 .text copySwBlur__13daPy_swBlur_cFPA4_fi */ -void daPy_swBlur_c::copySwBlur(float(*)[4], int) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_swim.inc" -/* 80129A78-80129DD0 .text draw__13daPy_swBlur_cFv */ -void daPy_swBlur_c::draw() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_battle.inc" -/* 80129DD0-80129E9C .text execute__24daPy_fanSwingEcallBack_cFP14JPABaseEmitter */ -void daPy_fanSwingEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_ship.inc" -/* 80129E9C-80129F48 .text execute__25daPy_waterDropPcallBack_cFP14JPABaseEmitterP15JPABaseParticle */ -void daPy_waterDropPcallBack_c::execute(JPABaseEmitter*, JPABaseParticle*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_rope.inc" -/* 80129F48-80129F98 .text execute__22daPy_followEcallBack_cFP14JPABaseEmitter */ -void daPy_followEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_boomerang.inc" -/* 80129F98-80129FA0 .text setup__22daPy_followEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_followEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_bow.inc" -/* 80129FA0-80129FD4 .text end__22daPy_followEcallBack_cFv */ -void daPy_followEcallBack_c::end() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_hookshot.inc" -/* 80129FD4-8012A040 .text execute__25daPy_waterDropEcallBack_cFP14JPABaseEmitter */ -void daPy_waterDropEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_fan.inc" -/* 8012A040-8012A058 .text setup__25daPy_waterDropEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_waterDropEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_tact.inc" -/* 8012A058-8012A0B4 .text end__25daPy_waterDropEcallBack_cFv */ -void daPy_waterDropEcallBack_c::end() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_vomit.inc" -/* 8012A0B4-8012A0E0 .text makeEmitterColor__28daPy_mtxPosFollowEcallBack_cFUsPA4_fPC4cXyzPC5csXyzPC8_GXColorPC8_GXColor */ -void daPy_mtxPosFollowEcallBack_c::makeEmitterColor(unsigned short, float(*)[4], const cXyz*, const csXyz*, const _GXColor*, const _GXColor*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_hammer.inc" -/* 8012A0E0-8012A160 .text execute__28daPy_mtxPosFollowEcallBack_cFP14JPABaseEmitter */ -void daPy_mtxPosFollowEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_pushpull.inc" -/* 8012A160-8012A288 .text execute__18daPy_dmEcallBack_cFP14JPABaseEmitter */ -void daPy_dmEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_bottle.inc" -/* 8012A288-8012A8D8 .text setAuraEffect__9daPy_lk_cFv */ -void daPy_lk_c::setAuraEffect() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_weapon.inc" -/* 8012A8D8-8012B340 .text setWaterRipple__9daPy_lk_cFv */ -void daPy_lk_c::setWaterRipple() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_food.inc" -/* 8012B340-8012B8EC .text setFootEffectType__9daPy_lk_cFiP4cXyzii */ -void daPy_lk_c::setFootEffectType(int, cXyz*, int, int) { - /* Nonmatching */ -} - -/* 8012B8EC-8012B9DC .text setFootMark__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::setFootMark(cXyz*) { - /* Nonmatching */ -} - -/* 8012B9DC-8012C128 .text setFootEffect__9daPy_lk_cFv */ -void daPy_lk_c::setFootEffect() { - /* Nonmatching */ -} - -/* 8012C128-8012C1A8 .text resetFootEffect__9daPy_lk_cFv */ -void daPy_lk_c::resetFootEffect() { - /* Nonmatching */ -} - -/* 8012C1A8-8012C2A4 .text setSwimTail__9daPy_lk_cFv */ -void daPy_lk_c::setSwimTail() { - /* Nonmatching */ -} - -/* 8012C2A4-8012C330 .text setCutWaterSplash__9daPy_lk_cFv */ -void daPy_lk_c::setCutWaterSplash() { - /* Nonmatching */ -} - -/* 8012C330-8012C45C .text setSwimWaterDrop__9daPy_lk_cFP25daPy_waterDropEcallBack_c */ -void daPy_lk_c::setSwimWaterDrop(daPy_waterDropEcallBack_c*) { - /* Nonmatching */ -} - -/* 8012C45C-8012C620 .text setWaterDrop__9daPy_lk_cFv */ -void daPy_lk_c::setWaterDrop() { - /* Nonmatching */ -} - -/* 8012C620-8012C754 .text setDamageFlameEmitter__9daPy_lk_cFv */ -void daPy_lk_c::setDamageFlameEmitter() { - /* Nonmatching */ -} - -/* 8012C754-8012C7F0 .text setDamageCurseEmitter__9daPy_lk_cFv */ -void daPy_lk_c::setDamageCurseEmitter() { - /* Nonmatching */ -} - -/* 8012C7F0-8012C880 .text setDamageElecEmitter__9daPy_lk_cFv */ -void daPy_lk_c::setDamageElecEmitter() { - /* Nonmatching */ -} - -/* 8012C880-8012C8F8 .text setDamageEmitter__9daPy_lk_cFv */ -void daPy_lk_c::setDamageEmitter() { - /* Nonmatching */ -} - -/* 8012C8F8-8012C9D8 .text endFlameDamageEmitter__9daPy_lk_cFv */ -void daPy_lk_c::endFlameDamageEmitter() { - /* Nonmatching */ -} - -/* 8012C9D8-8012CA44 .text endDamageEmitter__9daPy_lk_cFv */ -void daPy_lk_c::endDamageEmitter() { - /* Nonmatching */ -} - -/* 8012CA44-8012CD60 .text setItemWaterEffect__9daPy_lk_cFP10fopAc_ac_cii */ -void daPy_lk_c::setItemWaterEffect(fopAc_ac_c*, int, int) { - /* Nonmatching */ -} - -/* 8012CD60-8012CDD4 .text getDemoLookActor__9daPy_lk_cFv */ -void daPy_lk_c::getDemoLookActor() { - /* Nonmatching */ -} - -/* 8012CDD4-8012CE2C .text setTinkleCeiverModel__9daPy_lk_cFv */ -void daPy_lk_c::setTinkleCeiverModel() { - /* Nonmatching */ -} - -/* 8012CE2C-8012CEFC .text setTalismanModel__9daPy_lk_cFv */ -void daPy_lk_c::setTalismanModel() { - /* Nonmatching */ -} - -/* 8012CEFC-8012CFE8 .text setLetterModel__9daPy_lk_cFv */ -void daPy_lk_c::setLetterModel() { - /* Nonmatching */ -} - -/* 8012CFE8-8012D010 .text checkCaughtShapeHide__9daPy_lk_cFv */ -void daPy_lk_c::checkCaughtShapeHide() { - /* Nonmatching */ -} - -/* 8012D010-8012D08C .text setShapeAngleToTalkActor__9daPy_lk_cFv */ -void daPy_lk_c::setShapeAngleToTalkActor() { - /* Nonmatching */ -} - -/* 8012D08C-8012D134 .text checkEndMessage__9daPy_lk_cFUl */ -void daPy_lk_c::checkEndMessage(unsigned long) { - /* Nonmatching */ -} - -/* 8012D134-8012D300 .text setTalkStartBack__9daPy_lk_cFv */ -void daPy_lk_c::setTalkStartBack() { - /* Nonmatching */ -} - -/* 8012D300-8012D3C4 .text dProcTool_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcTool_init() { - /* Nonmatching */ -} - -/* 8012D3C4-8012DA3C .text dProcTool__9daPy_lk_cFv */ -void daPy_lk_c::dProcTool() { - /* Nonmatching */ -} - -/* 8012DA3C-8012DBD0 .text dProcTalk_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcTalk_init() { - /* Nonmatching */ -} - -/* 8012DBD0-8012DDEC .text dProcTalk__9daPy_lk_cFv */ -void daPy_lk_c::dProcTalk() { - /* Nonmatching */ -} - -/* 8012DDEC-8012DEA0 .text dProcDamage_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcDamage_init() { - /* Nonmatching */ -} - -/* 8012DEA0-8012DF24 .text dProcDamage__9daPy_lk_cFv */ -void daPy_lk_c::dProcDamage() { - /* Nonmatching */ -} - -/* 8012DF24-8012E054 .text dProcHoldup_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcHoldup_init() { - /* Nonmatching */ -} - -/* 8012E054-8012E09C .text dProcHoldup__9daPy_lk_cFv */ -void daPy_lk_c::dProcHoldup() { - /* Nonmatching */ -} - -/* 8012E09C-8012E244 .text dProcOpenTreasure_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcOpenTreasure_init() { - /* Nonmatching */ -} - -/* 8012E244-8012E28C .text dProcOpenTreasure__9daPy_lk_cFv */ -void daPy_lk_c::dProcOpenTreasure() { - /* Nonmatching */ -} - -/* 8012E28C-8012E418 .text setGetItemSound__9daPy_lk_cFUsi */ -void daPy_lk_c::setGetItemSound(unsigned short, int) { - /* Nonmatching */ -} - -/* 8012E418-8012E6B4 .text setGetDemo__9daPy_lk_cFv */ -void daPy_lk_c::setGetDemo() { - /* Nonmatching */ -} - -/* 8012E6B4-8012E8B0 .text dProcGetItem_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcGetItem_init() { - /* Nonmatching */ -} - -/* 8012E8B0-8012ECB0 .text dProcGetItem__9daPy_lk_cFv */ -void daPy_lk_c::dProcGetItem() { - /* Nonmatching */ -} - -/* 8012ECB0-8012ED30 .text dProcUnequip_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcUnequip_init() { - /* Nonmatching */ -} - -/* 8012ED30-8012ED74 .text dProcUnequip__9daPy_lk_cFv */ -void daPy_lk_c::dProcUnequip() { - /* Nonmatching */ -} - -/* 8012ED74-8012EE0C .text dProcLavaDamage_init_sub__9daPy_lk_cFv */ -void daPy_lk_c::dProcLavaDamage_init_sub() { - /* Nonmatching */ -} - -/* 8012EE0C-8012EEE4 .text dProcLavaDamage_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLavaDamage_init() { - /* Nonmatching */ -} - -/* 8012EEE4-8012EF78 .text dProcLavaDamage__9daPy_lk_cFv */ -void daPy_lk_c::dProcLavaDamage() { - /* Nonmatching */ -} - -/* 8012EF78-8012F0DC .text dProcFreezeDamage_init_sub__9daPy_lk_cFi */ -void daPy_lk_c::dProcFreezeDamage_init_sub(int) { - /* Nonmatching */ -} - -/* 8012F0DC-8012F174 .text dProcFreezeDamage_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcFreezeDamage_init() { - /* Nonmatching */ -} - -/* 8012F174-8012F210 .text dProcFreezeDamage__9daPy_lk_cFv */ -void daPy_lk_c::dProcFreezeDamage() { - /* Nonmatching */ -} - -/* 8012F210-8012F288 .text dProcDead_init_sub__9daPy_lk_cFv */ -void daPy_lk_c::dProcDead_init_sub() { - /* Nonmatching */ -} - -/* 8012F288-8012F38C .text dProcDead_init_sub2__9daPy_lk_cFv */ -void daPy_lk_c::dProcDead_init_sub2() { - /* Nonmatching */ -} - -/* 8012F38C-8012F3B8 .text checkGameOverStart__9daPy_lk_cFv */ -void daPy_lk_c::checkGameOverStart() { - /* Nonmatching */ -} - -/* 8012F3B8-8012F5A8 .text dProcDead_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcDead_init() { - /* Nonmatching */ -} - -/* 8012F5A8-8012F928 .text dProcDead__9daPy_lk_cFv */ -void daPy_lk_c::dProcDead() { - /* Nonmatching */ -} - -/* 8012F928-8012F99C .text dProcLookAround_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookAround_init() { - /* Nonmatching */ -} - -/* 8012F99C-8012F9E4 .text dProcLookAround__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookAround() { - /* Nonmatching */ -} - -/* 8012F9E4-8012FA50 .text dProcSalute_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcSalute_init() { - /* Nonmatching */ -} - -/* 8012FA50-8012FA98 .text dProcSalute__9daPy_lk_cFv */ -void daPy_lk_c::dProcSalute() { - /* Nonmatching */ -} - -/* 8012FA98-8012FB2C .text dProcLookAround2_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookAround2_init() { - /* Nonmatching */ -} - -/* 8012FB2C-8012FB88 .text dProcLookAround2__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookAround2() { - /* Nonmatching */ -} - -/* 8012FB88-8012FC24 .text dProcTalismanPickup_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcTalismanPickup_init() { - /* Nonmatching */ -} - -/* 8012FC24-8012FCC0 .text dProcTalismanPickup__9daPy_lk_cFv */ -void daPy_lk_c::dProcTalismanPickup() { - /* Nonmatching */ -} - -/* 8012FCC0-8012FE58 .text dProcTalismanWait_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcTalismanWait_init() { - /* Nonmatching */ -} - -/* 8012FE58-8012FFEC .text dProcTalismanWait__9daPy_lk_cFv */ -void daPy_lk_c::dProcTalismanWait() { - /* Nonmatching */ -} - -/* 8012FFEC-801300F4 .text dProcSurprised_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcSurprised_init() { - /* Nonmatching */ -} - -/* 801300F4-801301C0 .text dProcSurprised__9daPy_lk_cFv */ -void daPy_lk_c::dProcSurprised() { - /* Nonmatching */ -} - -/* 801301C0-80130278 .text dProcTurnBack_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcTurnBack_init() { - /* Nonmatching */ -} - -/* 80130278-801302CC .text dProcTurnBack__9daPy_lk_cFv */ -void daPy_lk_c::dProcTurnBack() { - /* Nonmatching */ -} - -/* 801302CC-80130338 .text dProcLookUp_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookUp_init() { - /* Nonmatching */ -} - -/* 80130338-80130380 .text dProcLookUp__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookUp() { - /* Nonmatching */ -} - -/* 80130380-801303FC .text dProcQuakeWait_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcQuakeWait_init() { - /* Nonmatching */ -} - -/* 801303FC-80130434 .text dProcQuakeWait__9daPy_lk_cFv */ -void daPy_lk_c::dProcQuakeWait() { - /* Nonmatching */ -} - -/* 80130434-801304A0 .text dProcDance_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcDance_init() { - /* Nonmatching */ -} - -/* 801304A0-801304D8 .text dProcDance__9daPy_lk_cFv */ -void daPy_lk_c::dProcDance() { - /* Nonmatching */ -} - -/* 801304D8-80130570 .text dProcCaught_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcCaught_init() { - /* Nonmatching */ -} - -/* 80130570-801305A8 .text dProcCaught__9daPy_lk_cFv */ -void daPy_lk_c::dProcCaught() { - /* Nonmatching */ -} - -/* 801305A8-8013065C .text dProcLookWait_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookWait_init() { - /* Nonmatching */ -} - -/* 8013065C-80130724 .text dProcLookWait__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookWait() { - /* Nonmatching */ -} - -/* 80130724-801307AC .text dProcPushPullWait_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcPushPullWait_init() { - /* Nonmatching */ -} - -/* 801307AC-801307E4 .text dProcPushPullWait__9daPy_lk_cFv */ -void daPy_lk_c::dProcPushPullWait() { - /* Nonmatching */ -} - -/* 801307E4-80130884 .text dProcPushMove_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcPushMove_init() { - /* Nonmatching */ -} - -/* 80130884-801308BC .text dProcPushMove__9daPy_lk_cFv */ -void daPy_lk_c::dProcPushMove() { - /* Nonmatching */ -} - -/* 801308BC-8013098C .text dProcDoorOpen_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcDoorOpen_init() { - /* Nonmatching */ -} - -/* 8013098C-80130A54 .text dProcDoorOpen__9daPy_lk_cFv */ -void daPy_lk_c::dProcDoorOpen() { - /* Nonmatching */ -} - -/* 80130A54-80130ADC .text dProcNod_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcNod_init() { - /* Nonmatching */ -} - -/* 80130ADC-80130B38 .text dProcNod__9daPy_lk_cFv */ -void daPy_lk_c::dProcNod() { - /* Nonmatching */ -} - -/* 80130B38-80130BE8 .text dProcPresent_init_sub__9daPy_lk_cFv */ -void daPy_lk_c::dProcPresent_init_sub() { - /* Nonmatching */ -} - -/* 80130BE8-80130CA0 .text dProcPresent_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcPresent_init() { - /* Nonmatching */ -} - -/* 80130CA0-80130E88 .text dProcPresent__9daPy_lk_cFv */ -void daPy_lk_c::dProcPresent() { - /* Nonmatching */ -} - -/* 80130E88-80130F2C .text dProcWindChange_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcWindChange_init() { - /* Nonmatching */ -} - -/* 80130F2C-80130F98 .text dProcWindChange__9daPy_lk_cFv */ -void daPy_lk_c::dProcWindChange() { - /* Nonmatching */ -} - -/* 80130F98-8013116C .text dProcStandItemPut_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcStandItemPut_init() { - /* Nonmatching */ -} - -/* 8013116C-80131274 .text dProcStandItemPut__9daPy_lk_cFv */ -void daPy_lk_c::dProcStandItemPut() { - /* Nonmatching */ -} - -/* 80131274-80131310 .text dProcVorcanoFail_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcVorcanoFail_init() { - /* Nonmatching */ -} - -/* 80131310-80131348 .text dProcVorcanoFail__9daPy_lk_cFv */ -void daPy_lk_c::dProcVorcanoFail() { - /* Nonmatching */ -} - -/* 80131348-80131450 .text dProcSlightSurprised_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcSlightSurprised_init() { - /* Nonmatching */ -} - -/* 80131450-8013154C .text dProcSlightSurprised__9daPy_lk_cFv */ -void daPy_lk_c::dProcSlightSurprised() { - /* Nonmatching */ -} - -/* 8013154C-801315F8 .text dProcSmile_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcSmile_init() { - /* Nonmatching */ -} - -/* 801315F8-8013168C .text dProcSmile__9daPy_lk_cFv */ -void daPy_lk_c::dProcSmile() { - /* Nonmatching */ -} - -/* 8013168C-80131780 .text dProcBossWarp_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcBossWarp_init() { - /* Nonmatching */ -} - -/* 80131780-8013182C .text dProcBossWarp__9daPy_lk_cFv */ -void daPy_lk_c::dProcBossWarp() { - /* Nonmatching */ -} - -/* 8013182C-80131908 .text dProcAgbUse_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcAgbUse_init() { - /* Nonmatching */ -} - -/* 80131908-8013194C .text dProcAgbUse__9daPy_lk_cFv */ -void daPy_lk_c::dProcAgbUse() { - /* Nonmatching */ -} - -/* 8013194C-801319D0 .text dProcLookTurn_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookTurn_init() { - /* Nonmatching */ -} - -/* 801319D0-80131A7C .text dProcLookTurn__9daPy_lk_cFv */ -void daPy_lk_c::dProcLookTurn() { - /* Nonmatching */ -} - -/* 80131A7C-80131B18 .text dProcLetterOpen_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLetterOpen_init() { - /* Nonmatching */ -} - -/* 80131B18-80131B98 .text dProcLetterOpen__9daPy_lk_cFv */ -void daPy_lk_c::dProcLetterOpen() { - /* Nonmatching */ -} - -/* 80131B98-80131C54 .text dProcLetterRead_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLetterRead_init() { - /* Nonmatching */ -} - -/* 80131C54-80131D6C .text dProcLetterRead__9daPy_lk_cFv */ -void daPy_lk_c::dProcLetterRead() { - /* Nonmatching */ -} - -/* 80131D6C-80131DD4 .text dProcRedeadStop_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcRedeadStop_init() { - /* Nonmatching */ -} - -/* 80131DD4-80131E0C .text dProcRedeadStop__9daPy_lk_cFv */ -void daPy_lk_c::dProcRedeadStop() { - /* Nonmatching */ -} - -/* 80131E0C-80131E74 .text dProcRedeadCatch_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcRedeadCatch_init() { - /* Nonmatching */ -} - -/* 80131E74-80131EAC .text dProcRedeadCatch__9daPy_lk_cFv */ -void daPy_lk_c::dProcRedeadCatch() { - /* Nonmatching */ -} - -/* 80131EAC-80131FB0 .text dProcGetDance_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcGetDance_init() { - /* Nonmatching */ -} - -/* 80131FB0-80132224 .text dProcGetDance__9daPy_lk_cFv */ -void daPy_lk_c::dProcGetDance() { - /* Nonmatching */ -} - -/* 80132224-801322D0 .text dProcBottleOpenFairy_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcBottleOpenFairy_init() { - /* Nonmatching */ -} - -/* 801322D0-80132438 .text dProcBottleOpenFairy__9daPy_lk_cFv */ -void daPy_lk_c::dProcBottleOpenFairy() { - /* Nonmatching */ -} - -/* 80132438-801324D0 .text dProcWarpShort_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcWarpShort_init() { - /* Nonmatching */ -} - -/* 801324D0-80132534 .text dProcWarpShort__9daPy_lk_cFv */ -void daPy_lk_c::dProcWarpShort() { - /* Nonmatching */ -} - -/* 80132534-801325F0 .text dProcOpenSalvageTreasure_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcOpenSalvageTreasure_init() { - /* Nonmatching */ -} - -/* 801325F0-8013265C .text dProcOpenSalvageTreasure__9daPy_lk_cFv */ -void daPy_lk_c::dProcOpenSalvageTreasure() { - /* Nonmatching */ -} - -/* 8013265C-80132728 .text dProcSurprisedWait_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcSurprisedWait_init() { - /* Nonmatching */ -} - -/* 80132728-80132784 .text dProcSurprisedWait__9daPy_lk_cFv */ -void daPy_lk_c::dProcSurprisedWait() { - /* Nonmatching */ -} - -/* 80132784-80132844 .text dProcPowerUpWait_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcPowerUpWait_init() { - /* Nonmatching */ -} - -/* 80132844-8013294C .text dProcPowerUp_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcPowerUp_init() { - /* Nonmatching */ -} - -/* 8013294C-80132A88 .text dProcPowerUp__9daPy_lk_cFv */ -void daPy_lk_c::dProcPowerUp() { - /* Nonmatching */ -} - -/* 80132A88-80132B68 .text dProcShipSit_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcShipSit_init() { - /* Nonmatching */ -} - -/* 80132B68-80132BC4 .text dProcShipSit__9daPy_lk_cFv */ -void daPy_lk_c::dProcShipSit() { - /* Nonmatching */ -} - -/* 80132BC4-80132D00 .text dProcLastCombo_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcLastCombo_init() { - /* Nonmatching */ -} - -/* 80132D00-80132DDC .text dProcLastCombo__9daPy_lk_cFv */ -void daPy_lk_c::dProcLastCombo() { - /* Nonmatching */ -} - -/* 80132DDC-80132E48 .text dProcHandUp_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcHandUp_init() { - /* Nonmatching */ -} - -/* 80132E48-80132E80 .text dProcHandUp__9daPy_lk_cFv */ -void daPy_lk_c::dProcHandUp() { - /* Nonmatching */ -} - -/* 80132E80-80132EEC .text dProcIceSlip_init__9daPy_lk_cFv */ -void daPy_lk_c::dProcIceSlip_init() { - /* Nonmatching */ -} - -/* 80132EEC-80132F34 .text dProcIceSlip__9daPy_lk_cFv */ -void daPy_lk_c::dProcIceSlip() { - /* Nonmatching */ -} - -/* 80132F34-80132F58 .text getLadderMoveAnmSpeed__9daPy_lk_cFv */ -void daPy_lk_c::getLadderMoveAnmSpeed() { - /* Nonmatching */ -} - -/* 80132F58-80133058 .text setLadderFootSe__9daPy_lk_cFv */ -void daPy_lk_c::setLadderFootSe() { - /* Nonmatching */ -} - -/* 80133058-80133240 .text changeLadderMoveProc__9daPy_lk_cFi */ -void daPy_lk_c::changeLadderMoveProc(int) { - /* Nonmatching */ -} - -/* 80133240-801333A8 .text setMoveBGLadderCorrect__9daPy_lk_cFv */ -void daPy_lk_c::setMoveBGLadderCorrect() { - /* Nonmatching */ -} - -/* 801333A8-80133414 .text procLadderUpStart_init_sub__9daPy_lk_cFv */ -void daPy_lk_c::procLadderUpStart_init_sub() { - /* Nonmatching */ -} - -/* 80133414-8013356C .text procLadderUpStart_init__9daPy_lk_cFv */ -void daPy_lk_c::procLadderUpStart_init() { - /* Nonmatching */ -} - -/* 8013356C-80133670 .text procLadderUpStart__9daPy_lk_cFv */ -void daPy_lk_c::procLadderUpStart() { - /* Nonmatching */ -} - -/* 80133670-80133710 .text procLadderUpEnd_init__9daPy_lk_cFi */ -void daPy_lk_c::procLadderUpEnd_init(int) { - /* Nonmatching */ -} - -/* 80133710-801337B4 .text procLadderUpEnd__9daPy_lk_cFv */ -void daPy_lk_c::procLadderUpEnd() { - /* Nonmatching */ -} - -/* 801337B4-8013384C .text procLadderDownStart_init_sub__9daPy_lk_cFv */ -void daPy_lk_c::procLadderDownStart_init_sub() { - /* Nonmatching */ -} - -/* 8013384C-8013399C .text procLadderDownStart_init__9daPy_lk_cFv */ -void daPy_lk_c::procLadderDownStart_init() { - /* Nonmatching */ -} - -/* 8013399C-80133AB8 .text procLadderDownStart__9daPy_lk_cFv */ -void daPy_lk_c::procLadderDownStart() { - /* Nonmatching */ -} - -/* 80133AB8-80133B4C .text procLadderDownEnd_init__9daPy_lk_cFi */ -void daPy_lk_c::procLadderDownEnd_init(int) { - /* Nonmatching */ -} - -/* 80133B4C-80133BB4 .text procLadderDownEnd__9daPy_lk_cFv */ -void daPy_lk_c::procLadderDownEnd() { - /* Nonmatching */ -} - -/* 80133BB4-80133E28 .text procLadderMove_init__9daPy_lk_cFiiP4cXyz */ -void daPy_lk_c::procLadderMove_init(int, int, cXyz*) { - /* Nonmatching */ -} - -/* 80133E28-80133F1C .text procLadderMove__9daPy_lk_cFv */ -void daPy_lk_c::procLadderMove() { - /* Nonmatching */ -} - -/* 80133F1C-80133F40 .text getHangMoveAnmSpeed__9daPy_lk_cFv */ -void daPy_lk_c::getHangMoveAnmSpeed() { - /* Nonmatching */ -} - -/* 80133F40-80133FB4 .text getHangDirectionFromAngle__9daPy_lk_cFv */ -void daPy_lk_c::getHangDirectionFromAngle() { - /* Nonmatching */ -} - -/* 80133FB4-801342D8 .text changeHangMoveProc__9daPy_lk_cFi */ -void daPy_lk_c::changeHangMoveProc(int) { - /* Nonmatching */ -} - -/* 801342D8-80134440 .text changeHangEndProc__9daPy_lk_cFi */ -void daPy_lk_c::changeHangEndProc(int) { - /* Nonmatching */ -} - -/* 80134440-80134630 .text setHangShapeOffset__9daPy_lk_cFv */ -void daPy_lk_c::setHangShapeOffset() { - /* Nonmatching */ -} - -/* 80134630-80134908 .text procHangStart_init__9daPy_lk_cFv */ -void daPy_lk_c::procHangStart_init() { - /* Nonmatching */ -} - -/* 80134908-801349D8 .text procHangStart__9daPy_lk_cFv */ -void daPy_lk_c::procHangStart() { - /* Nonmatching */ -} - -/* 801349D8-80134DF8 .text procHangFallStart_init__9daPy_lk_cFP8cM3dGPla */ -void daPy_lk_c::procHangFallStart_init(cM3dGPla*) { - /* Nonmatching */ -} - -/* 80134DF8-80134EF0 .text procHangFallStart__9daPy_lk_cFv */ -void daPy_lk_c::procHangFallStart() { - /* Nonmatching */ -} - -/* 80134EF0-80134F74 .text procHangUp_init__9daPy_lk_cFi */ -void daPy_lk_c::procHangUp_init(int) { - /* Nonmatching */ -} - -/* 80134F74-80135094 .text procHangUp__9daPy_lk_cFv */ -void daPy_lk_c::procHangUp() { - /* Nonmatching */ -} - -/* 80135094-80135140 .text procHangWait_init__9daPy_lk_cFv */ -void daPy_lk_c::procHangWait_init() { - /* Nonmatching */ -} - -/* 80135140-801351FC .text procHangWait__9daPy_lk_cFv */ -void daPy_lk_c::procHangWait() { - /* Nonmatching */ -} - -/* 801351FC-80135354 .text procHangMove_init__9daPy_lk_cFi */ -void daPy_lk_c::procHangMove_init(int) { - /* Nonmatching */ -} - -/* 80135354-801357C0 .text procHangMove__9daPy_lk_cFv */ -void daPy_lk_c::procHangMove() { - /* Nonmatching */ -} - -/* 801357C0-80135874 .text procHangClimb_init__9daPy_lk_cFf */ -void daPy_lk_c::procHangClimb_init(float) { - /* Nonmatching */ -} - -/* 80135874-801358D0 .text procHangClimb__9daPy_lk_cFv */ -void daPy_lk_c::procHangClimb() { - /* Nonmatching */ -} - -/* 801358D0-80135AE0 .text procHangWallCatch_init__9daPy_lk_cFv */ -void daPy_lk_c::procHangWallCatch_init() { - /* Nonmatching */ -} - -/* 80135AE0-80135B50 .text procHangWallCatch__9daPy_lk_cFv */ -void daPy_lk_c::procHangWallCatch() { - /* Nonmatching */ -} - -/* 80135B50-80135B74 .text getClimbMoveAnmSpeed__9daPy_lk_cFv */ -void daPy_lk_c::getClimbMoveAnmSpeed() { - /* Nonmatching */ -} - -/* 80135B74-80135DA0 .text setClimbShapeOffset__9daPy_lk_cFv */ -void daPy_lk_c::setClimbShapeOffset() { - /* Nonmatching */ -} - -/* 80135DA0-80135E14 .text getClimbDirectionFromAngle__9daPy_lk_cFv */ -void daPy_lk_c::getClimbDirectionFromAngle() { - /* Nonmatching */ -} - -/* 80135E14-80135E98 .text changeClimbMoveProc__9daPy_lk_cFi */ -void daPy_lk_c::changeClimbMoveProc(int) { - /* Nonmatching */ -} - -/* 80135E98-80136154 .text setMoveBGCorrectClimb__9daPy_lk_cFv */ -void daPy_lk_c::setMoveBGCorrectClimb() { - /* Nonmatching */ -} - -/* 80136154-80136200 .text checkBgCorrectClimbMove__9daPy_lk_cFP4cXyzP4cXyz */ -void daPy_lk_c::checkBgCorrectClimbMove(cXyz*, cXyz*) { - /* Nonmatching */ -} - -/* 80136200-80136588 .text checkBgClimbMove__9daPy_lk_cFv */ -void daPy_lk_c::checkBgClimbMove() { - /* Nonmatching */ -} - -/* 80136588-801365F4 .text procClimbUpStart_init_sub__9daPy_lk_cFv */ -void daPy_lk_c::procClimbUpStart_init_sub() { - /* Nonmatching */ -} - -/* 801365F4-80136708 .text procClimbUpStart_init__9daPy_lk_cFv */ -void daPy_lk_c::procClimbUpStart_init() { - /* Nonmatching */ -} - -/* 80136708-8013680C .text procClimbUpStart__9daPy_lk_cFv */ -void daPy_lk_c::procClimbUpStart() { - /* Nonmatching */ -} - -/* 8013680C-8013693C .text procClimbDownStart_init__9daPy_lk_cFs */ -void daPy_lk_c::procClimbDownStart_init(short) { - /* Nonmatching */ -} - -/* 8013693C-80136A34 .text procClimbDownStart__9daPy_lk_cFv */ -void daPy_lk_c::procClimbDownStart() { - /* Nonmatching */ -} - -/* 80136A34-80136B80 .text procClimbMoveUpDown_init__9daPy_lk_cFi */ -void daPy_lk_c::procClimbMoveUpDown_init(int) { - /* Nonmatching */ -} - -/* 80136B80-80136C7C .text procClimbMoveUpDown__9daPy_lk_cFv */ -void daPy_lk_c::procClimbMoveUpDown() { - /* Nonmatching */ -} - -/* 80136C7C-80136E28 .text procClimbMoveSide_init__9daPy_lk_cFi */ -void daPy_lk_c::procClimbMoveSide_init(int) { - /* Nonmatching */ -} - -/* 80136E28-8013707C .text procClimbMoveSide__9daPy_lk_cFv */ -void daPy_lk_c::procClimbMoveSide() { - /* Nonmatching */ -} - -/* 8013707C-801371E0 .text setBlendWHideMoveAnime__9daPy_lk_cFf */ -void daPy_lk_c::setBlendWHideMoveAnime(float) { - /* Nonmatching */ -} - -/* 801371E0-80137608 .text getWHideModePolygon__9daPy_lk_cFP4cXyzP4cXyzP4cXyzi */ -void daPy_lk_c::getWHideModePolygon(cXyz*, cXyz*, cXyz*, int) { - /* Nonmatching */ -} - -/* 80137608-80137640 .text getWHideBasePos__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::getWHideBasePos(cXyz*) { - /* Nonmatching */ -} - -/* 80137640-8013769C .text getWHideNextPos__9daPy_lk_cFP4cXyzP4cXyz */ -void daPy_lk_c::getWHideNextPos(cXyz*, cXyz*) { - /* Nonmatching */ -} - -/* 8013769C-80137754 .text checkWHideBackWall__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::checkWHideBackWall(cXyz*) { - /* Nonmatching */ -} - -/* 80137754-80137828 .text checkWHideFrontFloor__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::checkWHideFrontFloor(cXyz*) { - /* Nonmatching */ -} - -/* 80137828-80137914 .text checkWHideModeChange__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::checkWHideModeChange(cXyz*) { - /* Nonmatching */ -} - -/* 80137914-80137A00 .text changeWHideEndProc__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::changeWHideEndProc(cXyz*) { - /* Nonmatching */ -} - -/* 80137A00-80137BD8 .text procWHideReady_init__9daPy_lk_cFP8cM3dGPlaP4cXyz */ -void daPy_lk_c::procWHideReady_init(cM3dGPla*, cXyz*) { - /* Nonmatching */ -} - -/* 80137BD8-80137CD0 .text procWHideReady__9daPy_lk_cFv */ -void daPy_lk_c::procWHideReady() { - /* Nonmatching */ -} - -/* 80137CD0-80137DF0 .text procWHideWait_init__9daPy_lk_cFv */ -void daPy_lk_c::procWHideWait_init() { - /* Nonmatching */ -} - -/* 80137DF0-80138074 .text procWHideWait__9daPy_lk_cFv */ -void daPy_lk_c::procWHideWait() { - /* Nonmatching */ -} - -/* 80138074-801380F0 .text procWHideMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procWHideMove_init() { - /* Nonmatching */ -} - -/* 801380F0-8013852C .text procWHideMove__9daPy_lk_cFv */ -void daPy_lk_c::procWHideMove() { - /* Nonmatching */ -} - -/* 8013852C-801385EC .text procWHidePeep_init__9daPy_lk_cFv */ -void daPy_lk_c::procWHidePeep_init() { - /* Nonmatching */ -} - -/* 801385EC-801387A4 .text procWHidePeep__9daPy_lk_cFv */ -void daPy_lk_c::procWHidePeep() { - /* Nonmatching */ -} - -/* 801387A4-801387EC .text getCrawlMoveAnmSpeed__9daPy_lk_cFv */ -void daPy_lk_c::getCrawlMoveAnmSpeed() { - /* Nonmatching */ -} - -/* 801387EC-80138868 .text getCrawlMoveSpeed__9daPy_lk_cFv */ -void daPy_lk_c::getCrawlMoveSpeed() { - /* Nonmatching */ -} - -/* 80138868-801389D0 .text setCrawlMoveDirectionArrow__9daPy_lk_cFv */ -void daPy_lk_c::setCrawlMoveDirectionArrow() { - /* Nonmatching */ -} - -/* 801389D0-80138D50 .text changeCrawlAutoMoveProc__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::changeCrawlAutoMoveProc(cXyz*) { - /* Nonmatching */ -} - -/* 80138D50-80138F28 .text getCrawlMoveVec__9daPy_lk_cFP4cXyzP4cXyzP4cXyz */ -void daPy_lk_c::getCrawlMoveVec(cXyz*, cXyz*, cXyz*) { - /* Nonmatching */ -} - -/* 80138F28-801390B8 .text crawlBgCheck__9daPy_lk_cFP4cXyzP4cXyz */ -void daPy_lk_c::crawlBgCheck(cXyz*, cXyz*) { - /* Nonmatching */ -} - -/* 801390B8-801392BC .text checkCrawlSideWall__9daPy_lk_cFP4cXyzP4cXyzP4cXyzP4cXyzPsPs */ -void daPy_lk_c::checkCrawlSideWall(cXyz*, cXyz*, cXyz*, cXyz*, short*, short*) { - /* Nonmatching */ -} - -/* 801392BC-80139424 .text setDoStatusCrawl__9daPy_lk_cFv */ -void daPy_lk_c::setDoStatusCrawl() { - /* Nonmatching */ -} - -/* 80139424-801394F0 .text procCrawlStart_init__9daPy_lk_cFv */ -void daPy_lk_c::procCrawlStart_init() { - /* Nonmatching */ -} - -/* 801394F0-80139640 .text procCrawlStart__9daPy_lk_cFv */ -void daPy_lk_c::procCrawlStart() { - /* Nonmatching */ -} - -/* 80139640-801396B0 .text checkNotCrawlStand__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::checkNotCrawlStand(cXyz*) { - /* Nonmatching */ -} - -/* 801396B0-80139760 .text checkNotCrawlStand__9daPy_lk_cFP4cXyzP4cXyz */ -void daPy_lk_c::checkNotCrawlStand(cXyz*, cXyz*) { - /* Nonmatching */ -} - -/* 80139760-80139878 .text procCrawlMove_init__9daPy_lk_cFss */ -void daPy_lk_c::procCrawlMove_init(short, short) { - /* Nonmatching */ -} - -/* 80139878-8013A004 .text procCrawlMove__9daPy_lk_cFv */ -void daPy_lk_c::procCrawlMove() { - /* Nonmatching */ -} - -/* 8013A004-8013A0F0 .text procCrawlAutoMove_init__9daPy_lk_cFiP4cXyz */ -void daPy_lk_c::procCrawlAutoMove_init(int, cXyz*) { - /* Nonmatching */ -} - -/* 8013A0F0-8013A630 .text procCrawlAutoMove__9daPy_lk_cFv */ -void daPy_lk_c::procCrawlAutoMove() { - /* Nonmatching */ -} - -/* 8013A630-8013A7C4 .text procCrawlEnd_init__9daPy_lk_cFiss */ -void daPy_lk_c::procCrawlEnd_init(int, short, short) { - /* Nonmatching */ -} - -/* 8013A7C4-8013A85C .text procCrawlEnd__9daPy_lk_cFv */ -void daPy_lk_c::procCrawlEnd() { - /* Nonmatching */ -} - -/* 8013A85C-8013A890 .text checkGrabSpecialHeavyState__9daPy_lk_cFv */ -void daPy_lk_c::checkGrabSpecialHeavyState() { - /* Nonmatching */ -} - -/* 8013A890-8013A8B4 .text getGrabMissActor__9daPy_lk_cFv */ -void daPy_lk_c::getGrabMissActor() { - /* Nonmatching */ -} - -/* 8013A8B4-8013A904 .text setWeaponBlur__9daPy_lk_cFv */ -void daPy_lk_c::setWeaponBlur() { - /* Nonmatching */ -} - -/* 8013A904-8013A97C .text checkGrabBarrelSearch__9daPy_lk_cFi */ -void daPy_lk_c::checkGrabBarrelSearch(int) { - /* Nonmatching */ -} - -/* 8013A97C-8013AF84 .text setGrabItemPos__9daPy_lk_cFv */ -void daPy_lk_c::setGrabItemPos() { - /* Nonmatching */ -} - -/* 8013AF84-8013B05C .text freeGrabItem__9daPy_lk_cFv */ -void daPy_lk_c::freeGrabItem() { - /* Nonmatching */ -} - -/* 8013B05C-8013B458 .text checkNextActionGrab__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionGrab() { - /* Nonmatching */ -} - -/* 8013B458-8013B56C .text initGrabNextMode__9daPy_lk_cFv */ -void daPy_lk_c::initGrabNextMode() { - /* Nonmatching */ -} - -/* 8013B56C-8013B6F4 .text procGrabReady_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabReady_init() { - /* Nonmatching */ -} - -/* 8013B6F4-8013B8A0 .text procGrabReady__9daPy_lk_cFv */ -void daPy_lk_c::procGrabReady() { - /* Nonmatching */ -} - -/* 8013B8A0-8013BA50 .text procGrabUp_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabUp_init() { - /* Nonmatching */ -} - -/* 8013BA50-8013BBBC .text procGrabUp__9daPy_lk_cFv */ -void daPy_lk_c::procGrabUp() { - /* Nonmatching */ -} - -/* 8013BBBC-8013BC40 .text procGrabMiss_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabMiss_init() { - /* Nonmatching */ -} - -/* 8013BC40-8013BD30 .text procGrabMiss__9daPy_lk_cFv */ -void daPy_lk_c::procGrabMiss() { - /* Nonmatching */ -} - -/* 8013BD30-8013BE10 .text procGrabThrow_init__9daPy_lk_cFi */ -void daPy_lk_c::procGrabThrow_init(int) { - /* Nonmatching */ -} - -/* 8013BE10-8013C020 .text procGrabThrow__9daPy_lk_cFv */ -void daPy_lk_c::procGrabThrow() { - /* Nonmatching */ -} - -/* 8013C020-8013C124 .text procGrabPut_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabPut_init() { - /* Nonmatching */ -} - -/* 8013C124-8013C504 .text procGrabPut__9daPy_lk_cFv */ -void daPy_lk_c::procGrabPut() { - /* Nonmatching */ -} - -/* 8013C504-8013C678 .text procGrabWait_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabWait_init() { - /* Nonmatching */ -} - -/* 8013C678-8013C914 .text procGrabWait__9daPy_lk_cFv */ -void daPy_lk_c::procGrabWait() { - /* Nonmatching */ -} - -/* 8013C914-8013C9AC .text procGrabHeavyWait_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabHeavyWait_init() { - /* Nonmatching */ -} - -/* 8013C9AC-8013CB78 .text procGrabHeavyWait__9daPy_lk_cFv */ -void daPy_lk_c::procGrabHeavyWait() { - /* Nonmatching */ -} - -/* 8013CB78-8013CBD0 .text procGrabRebound_init__9daPy_lk_cFv */ -void daPy_lk_c::procGrabRebound_init() { - /* Nonmatching */ -} - -/* 8013CBD0-8013CC64 .text procGrabRebound__9daPy_lk_cFv */ -void daPy_lk_c::procGrabRebound() { - /* Nonmatching */ -} - -/* 8013CC64-8013CF2C .text setSpeedAndAngleSwim__9daPy_lk_cFv */ -void daPy_lk_c::setSpeedAndAngleSwim() { - /* Nonmatching */ -} - -/* 8013CF2C-8013CFC0 .text checkNextModeSwim__9daPy_lk_cFv */ -void daPy_lk_c::checkNextModeSwim() { - /* Nonmatching */ -} - -/* 8013CFC0-8013D1B0 .text changeSwimProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSwimProc() { - /* Nonmatching */ -} - -/* 8013D1B0-8013D2AC .text changeSwimUpProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSwimUpProc() { - /* Nonmatching */ -} - -/* 8013D2AC-8013D314 .text swimOutAfter__9daPy_lk_cFi */ -void daPy_lk_c::swimOutAfter(int) { - /* Nonmatching */ -} - -/* 8013D314-8013D354 .text checkSwimFallCheck__9daPy_lk_cFv */ -void daPy_lk_c::checkSwimFallCheck() { - /* Nonmatching */ -} - -/* 8013D354-8013D530 .text changeSwimOutProc__9daPy_lk_cFv */ -void daPy_lk_c::changeSwimOutProc() { - /* Nonmatching */ -} - -/* 8013D530-8013D638 .text setSwimMoveAnime__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ -void daPy_lk_c::setSwimMoveAnime(daPy_lk_c::daPy_ANM) { - /* Nonmatching */ -} - -/* 8013D638-8013D6B8 .text getSwimTimerRate__9daPy_lk_cFv */ -void daPy_lk_c::getSwimTimerRate() { - /* Nonmatching */ -} - -/* 8013D6B8-8013D814 .text setSwimTimerStartStop__9daPy_lk_cFv */ -void daPy_lk_c::setSwimTimerStartStop() { - /* Nonmatching */ -} - -/* 8013D814-8013DA18 .text procSwimUp_init__9daPy_lk_cFi */ -void daPy_lk_c::procSwimUp_init(int) { - /* Nonmatching */ -} - -/* 8013DA18-8013DB24 .text procSwimUp__9daPy_lk_cFv */ -void daPy_lk_c::procSwimUp() { - /* Nonmatching */ -} - -/* 8013DB24-8013DCDC .text procSwimWait_init__9daPy_lk_cFi */ -void daPy_lk_c::procSwimWait_init(int) { - /* Nonmatching */ -} - -/* 8013DCDC-8013DE8C .text procSwimWait__9daPy_lk_cFv */ -void daPy_lk_c::procSwimWait() { - /* Nonmatching */ -} - -/* 8013DE8C-8013DF60 .text procSwimMove_init__9daPy_lk_cFi */ -void daPy_lk_c::procSwimMove_init(int) { - /* Nonmatching */ -} - -/* 8013DF60-8013E250 .text procSwimMove__9daPy_lk_cFv */ -void daPy_lk_c::procSwimMove() { - /* Nonmatching */ -} - -/* 8013E250-8013E384 .text setSpecialBattle__9daPy_lk_cFi */ -void daPy_lk_c::setSpecialBattle(int) { - /* Nonmatching */ -} - -/* 8013E384-8013E454 .text changeSpecialBattle__9daPy_lk_cFv */ -void daPy_lk_c::changeSpecialBattle() { - /* Nonmatching */ -} - -/* 8013E454-8013E72C .text procBtJump_init__9daPy_lk_cFP13fopEn_enemy_c */ -void daPy_lk_c::procBtJump_init(fopEn_enemy_c*) { - /* Nonmatching */ -} - -/* 8013E72C-8013E860 .text procBtJump__9daPy_lk_cFv */ -void daPy_lk_c::procBtJump() { - /* Nonmatching */ -} - -/* 8013E860-8013E9D4 .text procBtJumpCut_init__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::procBtJumpCut_init(cXyz*) { - /* Nonmatching */ -} - -/* 8013E9D4-8013EBD0 .text procBtJumpCut__9daPy_lk_cFv */ -void daPy_lk_c::procBtJumpCut() { - /* Nonmatching */ -} - -/* 8013EBD0-8013EC50 .text procBtSlide__9daPy_lk_cFv */ -void daPy_lk_c::procBtSlide() { - /* Nonmatching */ -} - -/* 8013EC50-8013EE64 .text procBtRoll_init__9daPy_lk_cFP13fopEn_enemy_c */ -void daPy_lk_c::procBtRoll_init(fopEn_enemy_c*) { - /* Nonmatching */ -} - -/* 8013EE64-8013F010 .text procBtRoll__9daPy_lk_cFv */ -void daPy_lk_c::procBtRoll() { - /* Nonmatching */ -} - -/* 8013F010-8013F200 .text procBtRollCut_init__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::procBtRollCut_init(cXyz*) { - /* Nonmatching */ -} - -/* 8013F200-8013F3E8 .text procBtRollCut__9daPy_lk_cFv */ -void daPy_lk_c::procBtRollCut() { - /* Nonmatching */ -} - -/* 8013F3E8-8013F4A8 .text procBtVerticalJump_init__9daPy_lk_cFP13fopEn_enemy_c */ -void daPy_lk_c::procBtVerticalJump_init(fopEn_enemy_c*) { - /* Nonmatching */ -} - -/* 8013F4A8-8013F520 .text procBtVerticalJump__9daPy_lk_cFv */ -void daPy_lk_c::procBtVerticalJump() { - /* Nonmatching */ -} - -/* 8013F520-8013F5BC .text procBtVerticalJumpCut_init__9daPy_lk_cFv */ -void daPy_lk_c::procBtVerticalJumpCut_init() { - /* Nonmatching */ -} - -/* 8013F5BC-8013F6E4 .text procBtVerticalJumpCut__9daPy_lk_cFv */ -void daPy_lk_c::procBtVerticalJumpCut() { - /* Nonmatching */ -} - -/* 8013F6E4-8013F7F0 .text procBtVerticalJumpLand_init__9daPy_lk_cFv */ -void daPy_lk_c::procBtVerticalJumpLand_init() { - /* Nonmatching */ -} - -/* 8013F7F0-8013F848 .text procBtVerticalJumpLand__9daPy_lk_cFv */ -void daPy_lk_c::procBtVerticalJumpLand() { - /* Nonmatching */ -} - -/* 8013F848-8013F8AC .text shipSpecialDemoStart__9daPy_lk_cFv */ -void daPy_lk_c::shipSpecialDemoStart() { - /* Nonmatching */ -} - -/* 8013F8AC-8013F984 .text checkJumpRideShip__9daPy_lk_cFv */ -void daPy_lk_c::checkJumpRideShip() { - /* Nonmatching */ -} - -/* 8013F984-8013F9B0 .text checkShipNotNormalMode__9daPy_lk_cFv */ -void daPy_lk_c::checkShipNotNormalMode() { - /* Nonmatching */ -} - -/* 8013F9B0-8013FE78 .text setShipRideArmAngle__9daPy_lk_cFiP16J3DTransformInfo */ -void daPy_lk_c::setShipRideArmAngle(int, J3DTransformInfo*) { - /* Nonmatching */ -} - -/* 8013FE78-8013FEF4 .text checkShipRideUseItem__9daPy_lk_cFi */ -void daPy_lk_c::checkShipRideUseItem(int) { - /* Nonmatching */ -} - -/* 8013FEF4-8013FFC0 .text initShipRideUseItem__9daPy_lk_cFii */ -void daPy_lk_c::initShipRideUseItem(int, int) { - /* Nonmatching */ -} - -/* 8013FFC0-80140018 .text setShipRidePosUseItem__9daPy_lk_cFv */ -void daPy_lk_c::setShipRidePosUseItem() { - /* Nonmatching */ -} - -/* 80140018-801403E0 .text setShipRidePos__9daPy_lk_cFi */ -void daPy_lk_c::setShipRidePos(int) { - /* Nonmatching */ -} - -/* 801403E0-80140480 .text setShipAttentionAnmSpeed__9daPy_lk_cFf */ -void daPy_lk_c::setShipAttentionAnmSpeed(float) { - /* Nonmatching */ -} - -/* 80140480-801405F0 .text setShipAttnetionBodyAngle__9daPy_lk_cFv */ -void daPy_lk_c::setShipAttnetionBodyAngle() { - /* Nonmatching */ -} - -/* 801405F0-80140C88 .text changeShipEndProc__9daPy_lk_cFv */ -void daPy_lk_c::changeShipEndProc() { - /* Nonmatching */ -} - -/* 80140C88-80140D04 .text initShipBaseAnime__9daPy_lk_cFv */ -void daPy_lk_c::initShipBaseAnime() { - /* Nonmatching */ -} - -/* 80140D04-80140D80 .text initShipCraneAnime__9daPy_lk_cFv */ -void daPy_lk_c::initShipCraneAnime() { - /* Nonmatching */ -} - -/* 80140D80-80140EF0 .text procShipReady_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipReady_init() { - /* Nonmatching */ -} - -/* 80140EF0-8014105C .text procShipReady__9daPy_lk_cFv */ -void daPy_lk_c::procShipReady() { - /* Nonmatching */ -} - -/* 8014105C-80141140 .text procShipJumpRide_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipJumpRide_init() { - /* Nonmatching */ -} - -/* 80141140-80141180 .text procShipJumpRide__9daPy_lk_cFv */ -void daPy_lk_c::procShipJumpRide() { - /* Nonmatching */ -} - -/* 80141180-8014123C .text procShipSteer_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipSteer_init() { - /* Nonmatching */ -} - -/* 8014123C-80141288 .text procShipSteer__9daPy_lk_cFv */ -void daPy_lk_c::procShipSteer() { - /* Nonmatching */ -} - -/* 80141288-801413A4 .text procShipPaddle_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipPaddle_init() { - /* Nonmatching */ -} - -/* 801413A4-801416BC .text procShipPaddle__9daPy_lk_cFv */ -void daPy_lk_c::procShipPaddle() { - /* Nonmatching */ -} - -/* 801416BC-801417EC .text procShipScope_init__9daPy_lk_cFi */ -void daPy_lk_c::procShipScope_init(int) { - /* Nonmatching */ -} - -/* 801417EC-801418B4 .text procShipScope__9daPy_lk_cFv */ -void daPy_lk_c::procShipScope() { - /* Nonmatching */ -} - -/* 801418B4-801419B4 .text procShipBoomerang_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipBoomerang_init() { - /* Nonmatching */ -} - -/* 801419B4-80141BB0 .text procShipBoomerang__9daPy_lk_cFv */ -void daPy_lk_c::procShipBoomerang() { - /* Nonmatching */ -} - -/* 80141BB0-80141CF8 .text procShipHookshot_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipHookshot_init() { - /* Nonmatching */ -} - -/* 80141CF8-80141F2C .text procShipHookshot__9daPy_lk_cFv */ -void daPy_lk_c::procShipHookshot() { - /* Nonmatching */ -} - -/* 80141F2C-80142084 .text procShipBow_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipBow_init() { - /* Nonmatching */ -} - -/* 80142084-80142250 .text procShipBow__9daPy_lk_cFv */ -void daPy_lk_c::procShipBow() { - /* Nonmatching */ -} - -/* 80142250-80142300 .text procShipCannon_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipCannon_init() { - /* Nonmatching */ -} - -/* 80142300-80142388 .text procShipCannon__9daPy_lk_cFv */ -void daPy_lk_c::procShipCannon() { - /* Nonmatching */ -} - -/* 80142388-80142458 .text procShipCrane_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipCrane_init() { - /* Nonmatching */ -} - -/* 80142458-80142920 .text procShipCrane__9daPy_lk_cFv */ -void daPy_lk_c::procShipCrane() { - /* Nonmatching */ -} - -/* 80142920-80142A5C .text procShipGetOff_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipGetOff_init() { - /* Nonmatching */ -} - -/* 80142A5C-80142C08 .text procShipGetOff__9daPy_lk_cFv */ -void daPy_lk_c::procShipGetOff() { - /* Nonmatching */ -} - -/* 80142C08-80142C9C .text procShipRestart_init__9daPy_lk_cFv */ -void daPy_lk_c::procShipRestart_init() { - /* Nonmatching */ -} - -/* 80142C9C-80142D08 .text procShipRestart__9daPy_lk_cFv */ -void daPy_lk_c::procShipRestart() { - /* Nonmatching */ -} - -/* 80142D08-80142D68 .text checkRopeAnime__9daPy_lk_cCFv */ -void daPy_lk_c::checkRopeAnime() const { - /* Nonmatching */ -} - -/* 80142D68-80142E0C .text freeRopeItem__9daPy_lk_cFv */ -void daPy_lk_c::freeRopeItem() { - /* Nonmatching */ -} - -/* 80142E0C-80142E98 .text checkRopeRoofHit__9daPy_lk_cFs */ -void daPy_lk_c::checkRopeRoofHit(short) { - /* Nonmatching */ -} - -/* 80142E98-80142FC8 .text changeRopeSwingProc__9daPy_lk_cFv */ -void daPy_lk_c::changeRopeSwingProc() { - /* Nonmatching */ -} - -/* 80142FC8-801430D4 .text changeRopeEndProc__9daPy_lk_cFi */ -void daPy_lk_c::changeRopeEndProc(int) { - /* Nonmatching */ -} - -/* 801430D4-80143138 .text checkSpecialRope__9daPy_lk_cFv */ -void daPy_lk_c::checkSpecialRope() { - /* Nonmatching */ -} - -/* 80143138-8014327C .text changeRopeToHangProc__9daPy_lk_cFv */ -void daPy_lk_c::changeRopeToHangProc() { - /* Nonmatching */ -} - -/* 8014327C-80143694 .text checkRopeSwingWall__9daPy_lk_cFP4cXyzP4cXyzPsPf */ -void daPy_lk_c::checkRopeSwingWall(cXyz*, cXyz*, short*, float*) { - /* Nonmatching */ -} - -/* 80143694-80143A44 .text setBlendRopeMoveAnime__9daPy_lk_cFi */ -void daPy_lk_c::setBlendRopeMoveAnime(int) { - /* Nonmatching */ -} - -/* 80143A44-80143C5C .text throwRope__9daPy_lk_cFv */ -void daPy_lk_c::throwRope() { - /* Nonmatching */ -} - -/* 80143C5C-80143DF4 .text checkNextActionRopeReady__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionRopeReady() { - /* Nonmatching */ -} - -/* 80143DF4-80143EAC .text checkNextRopeMode__9daPy_lk_cFv */ -void daPy_lk_c::checkNextRopeMode() { - /* Nonmatching */ -} - -/* 80143EAC-80143F3C .text checkHangRopeActorNull__9daPy_lk_cFv */ -void daPy_lk_c::checkHangRopeActorNull() { - /* Nonmatching */ -} - -/* 80143F3C-80144038 .text procRopeSubject_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeSubject_init() { - /* Nonmatching */ -} - -/* 80144038-8014422C .text procRopeSubject__9daPy_lk_cFv */ -void daPy_lk_c::procRopeSubject() { - /* Nonmatching */ -} - -/* 8014422C-80144464 .text procRopeReady_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeReady_init() { - /* Nonmatching */ -} - -/* 80144464-80144620 .text procRopeReady__9daPy_lk_cFv */ -void daPy_lk_c::procRopeReady() { - /* Nonmatching */ -} - -/* 80144620-80144C58 .text procRopeSwing_init__9daPy_lk_cFP10fopAc_ac_cs */ -void daPy_lk_c::procRopeSwing_init(fopAc_ac_c*, short) { - /* Nonmatching */ -} - -/* 80144C58-801456D8 .text procRopeSwing__9daPy_lk_cFv */ -void daPy_lk_c::procRopeSwing() { - /* Nonmatching */ -} - -/* 801456D8-801457FC .text procRopeHangWait_init__9daPy_lk_cFi */ -void daPy_lk_c::procRopeHangWait_init(int) { - /* Nonmatching */ -} - -/* 801457FC-80145B38 .text procRopeHangWait__9daPy_lk_cFv */ -void daPy_lk_c::procRopeHangWait() { - /* Nonmatching */ -} - -/* 80145B38-80145C3C .text specialRopeHangUp__9daPy_lk_cFv */ -void daPy_lk_c::specialRopeHangUp() { - /* Nonmatching */ -} - -/* 80145C3C-80145DBC .text procRopeUp_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeUp_init() { - /* Nonmatching */ -} - -/* 80145DBC-80145F64 .text procRopeUp__9daPy_lk_cFv */ -void daPy_lk_c::procRopeUp() { - /* Nonmatching */ -} - -/* 80145F64-801460EC .text procRopeDown_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeDown_init() { - /* Nonmatching */ -} - -/* 801460EC-80146240 .text procRopeDown__9daPy_lk_cFv */ -void daPy_lk_c::procRopeDown() { - /* Nonmatching */ -} - -/* 80146240-801463E8 .text procRopeSwingStart_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeSwingStart_init() { - /* Nonmatching */ -} - -/* 801463E8-80146610 .text procRopeSwingStart__9daPy_lk_cFv */ -void daPy_lk_c::procRopeSwingStart() { - /* Nonmatching */ -} - -/* 80146610-801466E8 .text procRopeMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeMove_init() { - /* Nonmatching */ -} - -/* 801466E8-80146848 .text procRopeMove__9daPy_lk_cFv */ -void daPy_lk_c::procRopeMove() { - /* Nonmatching */ -} - -/* 80146848-801468C4 .text procRopeThrowCatch_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeThrowCatch_init() { - /* Nonmatching */ -} - -/* 801468C4-801469A8 .text procRopeThrowCatch__9daPy_lk_cFv */ -void daPy_lk_c::procRopeThrowCatch() { - /* Nonmatching */ -} - -/* 801469A8-80146A44 .text procRopeUpHang_init__9daPy_lk_cFv */ -void daPy_lk_c::procRopeUpHang_init() { - /* Nonmatching */ -} - -/* 80146A44-80146AF0 .text procRopeUpHang__9daPy_lk_cFv */ -void daPy_lk_c::procRopeUpHang() { - /* Nonmatching */ -} - -/* 80146AF0-80146B04 .text checkRopeReadyAnime__9daPy_lk_cCFv */ -void daPy_lk_c::checkRopeReadyAnime() const { - /* Nonmatching */ -} - -/* 80146B04-80146B14 .text checkRopeTag__9daPy_lk_cFv */ -void daPy_lk_c::checkRopeTag() { - /* Nonmatching */ -} - -/* 80146B14-80146B50 .text checkPlayerNoDraw__9daPy_lk_cFv */ -void daPy_lk_c::checkPlayerNoDraw() { - /* Nonmatching */ -} - -/* 80146B50-80146BEC .text __dt__13daPy_swBlur_cFv */ -daPy_swBlur_c::~daPy_swBlur_c() { - /* Nonmatching */ -} - -/* 80146BEC-80146C20 .text __ct__28daPy_mtxPosFollowEcallBack_cFv */ -daPy_mtxPosFollowEcallBack_c::daPy_mtxPosFollowEcallBack_c() { - /* Nonmatching */ -} - -/* 80146C20-80146C8C .text __dt__24daPy_fanSwingEcallBack_cFv */ -daPy_fanSwingEcallBack_c::~daPy_fanSwingEcallBack_c() { - /* Nonmatching */ -} - -/* 80146C8C-80146D08 .text __dt__18daPy_dmEcallBack_cFv */ -daPy_dmEcallBack_c::~daPy_dmEcallBack_c() { - /* Nonmatching */ -} - -/* 80146D08-80146D3C .text __ct__18daPy_dmEcallBack_cFv */ -daPy_dmEcallBack_c::daPy_dmEcallBack_c() { - /* Nonmatching */ -} - -/* 80146D3C-80146DB8 .text __dt__28daPy_mtxPosFollowEcallBack_cFv */ -daPy_mtxPosFollowEcallBack_c::~daPy_mtxPosFollowEcallBack_c() { - /* Nonmatching */ -} - -/* 80146DB8-80146E34 .text __dt__25daPy_waterDropEcallBack_cFv */ -daPy_waterDropEcallBack_c::~daPy_waterDropEcallBack_c() { - /* Nonmatching */ -} - -/* 80146E34-80146EA0 .text __dt__22daPy_followEcallBack_cFv */ -daPy_followEcallBack_c::~daPy_followEcallBack_c() { - /* Nonmatching */ -} - -/* 80146EA0-80146F0C .text __dt__24daPy_swimTailEcallBack_cFv */ -daPy_swimTailEcallBack_c::~daPy_swimTailEcallBack_c() { - /* Nonmatching */ -} - -/* 80146F0C-80146F34 .text __ct__24daPy_swimTailEcallBack_cFv */ -daPy_swimTailEcallBack_c::daPy_swimTailEcallBack_c() { - /* Nonmatching */ -} - -/* 80146F34-80146FF4 .text __dt__17daPy_footEffect_cFv */ -daPy_footEffect_c::~daPy_footEffect_c() { - /* Nonmatching */ -} - -/* 80146FF4-80147038 .text __ct__17daPy_footEffect_cFv */ -daPy_footEffect_c::daPy_footEffect_c() { - /* Nonmatching */ -} - -/* 80147038-80147094 .text __dt__18daPy_sightPacket_cFv */ -daPy_sightPacket_c::~daPy_sightPacket_c() { - /* Nonmatching */ -} - -/* 801474DC-801474E4 .text getGroundY__9daPy_lk_cFv */ -void daPy_lk_c::getGroundY() { - /* Nonmatching */ -} - -/* 801474E4-801474F4 .text getLeftHandMatrix__9daPy_lk_cFv */ -void daPy_lk_c::getLeftHandMatrix() { - /* Nonmatching */ -} - -/* 801474F4-80147504 .text getRightHandMatrix__9daPy_lk_cFv */ -void daPy_lk_c::getRightHandMatrix() { - /* Nonmatching */ -} - -/* 80147504-80147518 .text checkPlayerFly__9daPy_lk_cCFv */ -void daPy_lk_c::checkPlayerFly() const { - /* Nonmatching */ -} - -/* 80147518-8014752C .text checkFrontRoll__9daPy_lk_cCFv */ -void daPy_lk_c::checkFrontRoll() const { - /* Nonmatching */ -} - -/* 8014752C-80147540 .text checkBottleSwing__9daPy_lk_cCFv */ -void daPy_lk_c::checkBottleSwing() const { - /* Nonmatching */ -} - -/* 80147540-80147554 .text checkCutCharge__9daPy_lk_cCFv */ -void daPy_lk_c::checkCutCharge() const { - /* Nonmatching */ -} - -/* 80147554-80147568 .text checkTactWait__9daPy_lk_cCFv */ -void daPy_lk_c::checkTactWait() const { - /* Nonmatching */ -} - -/* 80147568-80147570 .text getBaseAnimeFrameRate__9daPy_lk_cFv */ -void daPy_lk_c::getBaseAnimeFrameRate() { - /* Nonmatching */ -} - -/* 80147570-80147578 .text getBaseAnimeFrame__9daPy_lk_cFv */ -void daPy_lk_c::getBaseAnimeFrame() { - /* Nonmatching */ -} - -/* 80147578-80147580 .text getItemID__9daPy_lk_cCFv */ -void daPy_lk_c::getItemID() const { - /* Nonmatching */ -} - -/* 80147580-80147588 .text getThrowBoomerangID__9daPy_lk_cCFv */ -void daPy_lk_c::getThrowBoomerangID() const { - /* Nonmatching */ -} - -/* 80147588-80147590 .text getGrabActorID__9daPy_lk_cCFv */ -void daPy_lk_c::getGrabActorID() const { - /* Nonmatching */ -} - -/* 80147590-801475B4 .text checkGrabBarrel__9daPy_lk_cFv */ -void daPy_lk_c::checkGrabBarrel() { - /* Nonmatching */ -} - -/* 801475B4-801475C8 .text onFrollCrashFlg__9daPy_lk_cFUl */ -void daPy_lk_c::onFrollCrashFlg(unsigned long) { - /* Nonmatching */ -} - -/* 801475C8-801475D0 .text getOldSpeedY__9daPy_lk_cFv */ -void daPy_lk_c::getOldSpeedY() { - /* Nonmatching */ -} - -/* 801475D0-801475F8 .text checkComboCutTurn__9daPy_lk_cCFv */ -void daPy_lk_c::checkComboCutTurn() const { - /* Nonmatching */ -} - -/* 801475F8-80147618 .text cancelChangeTextureAnime__9daPy_lk_cFv */ -void daPy_lk_c::cancelChangeTextureAnime() { - /* Nonmatching */ -} - -/* 80147618-80147674 .text __dt__13daPy_matAnm_cFv */ -daPy_matAnm_c::~daPy_matAnm_c() { - /* Nonmatching */ -} - -/* 80147674-801477E0 .text __dt__25daPy_waterDropPcallBack_cFv */ -daPy_waterDropPcallBack_c::~daPy_waterDropPcallBack_c() { - /* Nonmatching */ -} - -/* 801477E0-801477FC .text setup__24daPy_fanSwingEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_fanSwingEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ -} - -/* 8014956C-80149590 .text checkBoomerangAnime__9daPy_lk_cCFv */ -void daPy_lk_c::checkBoomerangAnime() const { - /* Nonmatching */ -} - -/* 80149590-80149698 .text throwBoomerang__9daPy_lk_cFv */ -void daPy_lk_c::throwBoomerang() { - /* Nonmatching */ -} - -/* 80149698-801497A4 .text returnBoomerang__9daPy_lk_cFv */ -void daPy_lk_c::returnBoomerang() { - /* Nonmatching */ -} - -/* 801497A4-8014984C .text checkNextActionBoomerangReady__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionBoomerangReady() { - /* Nonmatching */ -} - -/* 8014984C-801498D8 .text checkNextActionBoomerangFly__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionBoomerangFly() { - /* Nonmatching */ -} - -/* 801498D8-80149964 .text checkNextBoomerangMode__9daPy_lk_cFv */ -void daPy_lk_c::checkNextBoomerangMode() { - /* Nonmatching */ -} - -/* 80149964-80149A44 .text changeBoomerangCatchProc__9daPy_lk_cFv */ -void daPy_lk_c::changeBoomerangCatchProc() { - /* Nonmatching */ -} - -/* 80149A44-80149AF0 .text procBoomerangSubject_init__9daPy_lk_cFv */ -void daPy_lk_c::procBoomerangSubject_init() { - /* Nonmatching */ -} - -/* 80149AF0-80149C00 .text procBoomerangSubject__9daPy_lk_cFv */ -void daPy_lk_c::procBoomerangSubject() { - /* Nonmatching */ -} - -/* 80149C00-80149CC8 .text procBoomerangMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procBoomerangMove_init() { - /* Nonmatching */ -} - -/* 80149CC8-80149DA4 .text procBoomerangMove__9daPy_lk_cFv */ -void daPy_lk_c::procBoomerangMove() { - /* Nonmatching */ -} - -/* 80149DA4-80149E1C .text procBoomerangCatch_init__9daPy_lk_cFv */ -void daPy_lk_c::procBoomerangCatch_init() { - /* Nonmatching */ -} - -/* 80149E1C-80149ECC .text procBoomerangCatch__9daPy_lk_cFv */ -void daPy_lk_c::procBoomerangCatch() { - /* Nonmatching */ -} - -/* 80149ECC-80149F88 .text bowJointCB__9daPy_lk_cFi */ -void daPy_lk_c::bowJointCB(int) { - /* Nonmatching */ -} - -/* 80149F88-80149FD0 .text daPy_bowJointCB__FP7J3DNodei */ -void daPy_bowJointCB(J3DNode*, int) { - /* Nonmatching */ -} - -/* 80149FD0-8014A008 .text bowButton__9daPy_lk_cCFv */ -void daPy_lk_c::bowButton() const { - /* Nonmatching */ -} - -/* 8014A008-8014A02C .text checkBowReadyAnime__9daPy_lk_cCFv */ -void daPy_lk_c::checkBowReadyAnime() const { - /* Nonmatching */ -} - -/* 8014A02C-8014A080 .text checkBowAnime__9daPy_lk_cCFv */ -void daPy_lk_c::checkBowAnime() const { - /* Nonmatching */ -} - -/* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */ -void daPy_lk_c::makeArrow() { - /* Nonmatching */ -} - -/* 8014A180-8014A1CC .text deleteArrow__9daPy_lk_cFv */ -void daPy_lk_c::deleteArrow() { - /* Nonmatching */ -} - -/* 8014A1CC-8014A2A0 .text setBowReadyAnime__9daPy_lk_cFv */ -void daPy_lk_c::setBowReadyAnime() { - /* Nonmatching */ -} - -/* 8014A2A0-8014A328 .text setBowReloadAnime__9daPy_lk_cFv */ -void daPy_lk_c::setBowReloadAnime() { - /* Nonmatching */ -} - -/* 8014A328-8014A60C .text checkNextActionBowReady__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionBowReady() { - /* Nonmatching */ -} - -/* 8014A60C-8014A680 .text checkNextActionBowFly__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionBowFly() { - /* Nonmatching */ -} - -/* 8014A680-8014A6F4 .text checkNextBowMode__9daPy_lk_cFv */ -void daPy_lk_c::checkNextBowMode() { - /* Nonmatching */ -} - -/* 8014A6F4-8014A834 .text setBowModel__9daPy_lk_cFv */ -void daPy_lk_c::setBowModel() { - /* Nonmatching */ -} - -/* 8014A834-8014A8D4 .text procBowSubject_init__9daPy_lk_cFv */ -void daPy_lk_c::procBowSubject_init() { - /* Nonmatching */ -} - -/* 8014A8D4-8014A974 .text procBowSubject__9daPy_lk_cFv */ -void daPy_lk_c::procBowSubject() { - /* Nonmatching */ -} - -/* 8014A974-8014AA2C .text procBowMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procBowMove_init() { - /* Nonmatching */ -} - -/* 8014AA2C-8014AB5C .text procBowMove__9daPy_lk_cFv */ -void daPy_lk_c::procBowMove() { - /* Nonmatching */ -} - -/* 8014AB5C-8014ABA0 .text checkHookshotReturn__9daPy_lk_cFv */ -void daPy_lk_c::checkHookshotReturn() { - /* Nonmatching */ -} - -/* 8014ABA0-8014ABF4 .text setHookshotCarryOffset__9daPy_lk_cFUiPC4cXyz */ -void daPy_lk_c::setHookshotCarryOffset(unsigned int, const cXyz*) { - /* Nonmatching */ -} - -/* 8014ABF4-8014ACCC .text setHookshotModel__9daPy_lk_cFv */ -void daPy_lk_c::setHookshotModel() { - /* Nonmatching */ -} - -/* 8014ACCC-8014B02C .text setHookshotSight__9daPy_lk_cFv */ -void daPy_lk_c::setHookshotSight() { - /* Nonmatching */ -} - -/* 8014B02C-8014B05C .text freeHookshotItem__9daPy_lk_cFv */ -void daPy_lk_c::freeHookshotItem() { - /* Nonmatching */ -} - -/* 8014B05C-8014B2B8 .text checkNextActionHookshotReady__9daPy_lk_cFv */ -void daPy_lk_c::checkNextActionHookshotReady() { - /* Nonmatching */ -} - -/* 8014B2B8-8014B350 .text checkNextHookshotMode__9daPy_lk_cFv */ -void daPy_lk_c::checkNextHookshotMode() { - /* Nonmatching */ -} - -/* 8014B350-8014B3F4 .text procHookshotSubject_init__9daPy_lk_cFv */ -void daPy_lk_c::procHookshotSubject_init() { - /* Nonmatching */ -} - -/* 8014B3F4-8014B518 .text procHookshotSubject__9daPy_lk_cFv */ -void daPy_lk_c::procHookshotSubject() { - /* Nonmatching */ -} - -/* 8014B518-8014B5E8 .text procHookshotMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procHookshotMove_init() { - /* Nonmatching */ -} - -/* 8014B5E8-8014B74C .text procHookshotMove__9daPy_lk_cFv */ -void daPy_lk_c::procHookshotMove() { - /* Nonmatching */ -} - -/* 8014B74C-8014B854 .text procHookshotFly_init__9daPy_lk_cFv */ -void daPy_lk_c::procHookshotFly_init() { - /* Nonmatching */ -} - -/* 8014B854-8014BA84 .text procHookshotFly__9daPy_lk_cFv */ -void daPy_lk_c::procHookshotFly() { - /* Nonmatching */ -} - -/* 8014BAA0-8014BAEC .text fanWindEffectDraw__9daPy_lk_cFv */ -void daPy_lk_c::fanWindEffectDraw() { - /* Nonmatching */ -} - -/* 8014BAEC-8014BB38 .text fanWindCrashEffectDraw__9daPy_lk_cFv */ -void daPy_lk_c::fanWindCrashEffectDraw() { - /* Nonmatching */ -} - -/* 8014BB38-8014BBE8 .text fanJointCB__9daPy_lk_cFi */ -void daPy_lk_c::fanJointCB(int) { - /* Nonmatching */ -} - -/* 8014BBE8-8014BC2C .text daPy_fanJointCallback__FP7J3DNodei */ -void daPy_fanJointCallback(J3DNode*, int) { - /* Nonmatching */ -} - -/* 8014BC2C-8014BD08 .text parachuteJointCB__9daPy_lk_cFi */ -void daPy_lk_c::parachuteJointCB(int) { - /* Nonmatching */ -} - -/* 8014BD08-8014BD4C .text daPy_parachuteJointCallback__FP7J3DNodei */ -void daPy_parachuteJointCallback(J3DNode*, int) { - /* Nonmatching */ -} - -/* 8014BD4C-8014BE50 .text setShapeFanLeaf__9daPy_lk_cFv */ -void daPy_lk_c::setShapeFanLeaf() { - /* Nonmatching */ -} - -/* 8014BE50-8014BEEC .text checkFanGlideProc__9daPy_lk_cFi */ -void daPy_lk_c::checkFanGlideProc(int) { - /* Nonmatching */ -} - -/* 8014BEEC-8014BFBC .text setFanModel__9daPy_lk_cFv */ -void daPy_lk_c::setFanModel() { - /* Nonmatching */ -} - -/* 8014BFBC-8014C0C0 .text setSmallFanModel__9daPy_lk_cFv */ -void daPy_lk_c::setSmallFanModel() { - /* Nonmatching */ -} - -/* 8014C0C0-8014C254 .text setParachuteFanModel__9daPy_lk_cFf */ -void daPy_lk_c::setParachuteFanModel(float) { - /* Nonmatching */ -} - -/* 8014C254-8014C34C .text procFanSwing_init__9daPy_lk_cFv */ -void daPy_lk_c::procFanSwing_init() { - /* Nonmatching */ -} - -/* 8014C34C-8014CA1C .text procFanSwing__9daPy_lk_cFv */ -void daPy_lk_c::procFanSwing() { - /* Nonmatching */ -} - -/* 8014CA1C-8014CB94 .text procFanGlide_init__9daPy_lk_cFi */ -void daPy_lk_c::procFanGlide_init(int) { - /* Nonmatching */ -} - -/* 8014CB94-8014D778 .text procFanGlide__9daPy_lk_cFv */ -void daPy_lk_c::procFanGlide() { - /* Nonmatching */ -} - -/* 8014D778-8014D7D4 .text getDayNightParamData__9daPy_lk_cFv */ -void daPy_lk_c::getDayNightParamData() { - /* Nonmatching */ -} - -/* 8014D7D4-8014D8AC .text setTactModel__9daPy_lk_cFv */ -void daPy_lk_c::setTactModel() { - /* Nonmatching */ -} - -/* 8014D8AC-8014D8F4 .text checkNpcStatus__9daPy_lk_cFv */ -void daPy_lk_c::checkNpcStatus() { - /* Nonmatching */ -} - -/* 8014D8F4-8014D938 .text getTactPlayRightArmAnm__9daPy_lk_cFl */ -void daPy_lk_c::getTactPlayRightArmAnm(long) { - /* Nonmatching */ -} - -/* 8014D938-8014D97C .text getTactPlayLeftArmAnm__9daPy_lk_cFl */ -void daPy_lk_c::getTactPlayLeftArmAnm(long) { - /* Nonmatching */ -} - -/* 8014D97C-8014D9A4 .text checkEndTactMusic__9daPy_lk_cCFv */ -void daPy_lk_c::checkEndTactMusic() const { - /* Nonmatching */ -} - -/* 8014D9A4-8014D9D0 .text getTactMetronomeRate__9daPy_lk_cFv */ -void daPy_lk_c::getTactMetronomeRate() { - /* Nonmatching */ -} - -/* 8014D9D0-8014D9F8 .text checkTactLastInput__9daPy_lk_cFv */ -void daPy_lk_c::checkTactLastInput() { - /* Nonmatching */ -} - -/* 8014D9F8-8014DA78 .text setTactZev__9daPy_lk_cFUiiPc */ -void daPy_lk_c::setTactZev(unsigned int, int, char*) { - /* Nonmatching */ -} - -/* 8014DA78-8014DACC .text getTactTopPos__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::getTactTopPos(cXyz*) { - /* Nonmatching */ -} - -/* 8014DACC-8014DB00 .text getTactNormalWait__9daPy_lk_cCFv */ -void daPy_lk_c::getTactNormalWait() const { - /* Nonmatching */ -} - -/* 8014DB00-8014DB2C .text getTactMusic__9daPy_lk_cCFv */ -void daPy_lk_c::getTactMusic() const { - /* Nonmatching */ -} - -/* 8014DB2C-8014DB74 .text getTactTimerCancel__9daPy_lk_cCFv */ -void daPy_lk_c::getTactTimerCancel() const { - /* Nonmatching */ -} - -/* 8014DB74-8014DB9C .text checkTactPlayMelody__9daPy_lk_cFv */ -void daPy_lk_c::checkTactPlayMelody() { - /* Nonmatching */ -} - -/* 8014DB9C-8014DBEC .text resetTactCount__9daPy_lk_cFv */ -void daPy_lk_c::resetTactCount() { - /* Nonmatching */ -} - -/* 8014DBEC-8014E100 .text procTactWait_init__9daPy_lk_cFi */ -void daPy_lk_c::procTactWait_init(int) { - /* Nonmatching */ -} - -/* 8014E100-8014E9A4 .text procTactWait__9daPy_lk_cFv */ -void daPy_lk_c::procTactWait() { - /* Nonmatching */ -} - -/* 8014E9A4-8014EBA0 .text procTactPlay_init__9daPy_lk_cFlii */ -void daPy_lk_c::procTactPlay_init(long, int, int) { - /* Nonmatching */ -} - -/* 8014EBA0-8014EFD4 .text procTactPlay__9daPy_lk_cFv */ -void daPy_lk_c::procTactPlay() { - /* Nonmatching */ -} - -/* 8014EFD4-8014F210 .text procTactPlayEnd_init__9daPy_lk_cFi */ -void daPy_lk_c::procTactPlayEnd_init(int) { - /* Nonmatching */ -} - -/* 8014F210-8014F4DC .text procTactPlayEnd__9daPy_lk_cFv */ -void daPy_lk_c::procTactPlayEnd() { - /* Nonmatching */ -} - -/* 8014F4DC-8014F690 .text procTactPlayOriginal_init__9daPy_lk_cFv */ -void daPy_lk_c::procTactPlayOriginal_init() { - /* Nonmatching */ -} - -/* 8014F690-8014F8A0 .text procTactPlayOriginal__9daPy_lk_cFv */ -void daPy_lk_c::procTactPlayOriginal() { - /* Nonmatching */ -} - -/* 8014F8A0-8014F994 .text checkJumpFlower__9daPy_lk_cFv */ -void daPy_lk_c::checkJumpFlower() { - /* Nonmatching */ -} - -/* 8014F994-8014FA88 .text procVomitReady_init__9daPy_lk_cFsf */ -void daPy_lk_c::procVomitReady_init(short, float) { - /* Nonmatching */ -} - -/* 8014FA88-8014FB64 .text procVomitReady__9daPy_lk_cFv */ -void daPy_lk_c::procVomitReady() { - /* Nonmatching */ -} - -/* 8014FB64-8014FC20 .text procVomitWait_init__9daPy_lk_cFv */ -void daPy_lk_c::procVomitWait_init() { - /* Nonmatching */ -} - -/* 8014FC20-8014FD8C .text procVomitWait__9daPy_lk_cFv */ -void daPy_lk_c::procVomitWait() { - /* Nonmatching */ -} - -/* 8014FD8C-8014FF0C .text procVomitJump_init__9daPy_lk_cFi */ -void daPy_lk_c::procVomitJump_init(int) { - /* Nonmatching */ -} - -/* 8014FF0C-801500E4 .text procVomitJump__9daPy_lk_cFv */ -void daPy_lk_c::procVomitJump() { - /* Nonmatching */ -} - -/* 801500E4-80150164 .text procVomitLand_init__9daPy_lk_cFv */ -void daPy_lk_c::procVomitLand_init() { - /* Nonmatching */ -} - -/* 80150164-8015023C .text procVomitLand__9daPy_lk_cFv */ -void daPy_lk_c::procVomitLand() { - /* Nonmatching */ -} - -/* 8015023C-80150324 .text setHammerModel__9daPy_lk_cFv */ -void daPy_lk_c::setHammerModel() { - /* Nonmatching */ -} - -/* 80150324-801508FC .text setHammerQuake__9daPy_lk_cFP13cBgS_PolyInfoPC4cXyzi */ -void daPy_lk_c::setHammerQuake(cBgS_PolyInfo*, const cXyz*, int) { - /* Nonmatching */ -} - -/* 801508FC-80150B60 .text setHammerWaterSplash__9daPy_lk_cFv */ -void daPy_lk_c::setHammerWaterSplash() { - /* Nonmatching */ -} - -/* 80150B60-80150C40 .text procHammerSideSwing_init__9daPy_lk_cFv */ -void daPy_lk_c::procHammerSideSwing_init() { - /* Nonmatching */ -} - -/* 80150C40-80150DDC .text procHammerSideSwing__9daPy_lk_cFv */ -void daPy_lk_c::procHammerSideSwing() { - /* Nonmatching */ -} - -/* 80150DDC-80150F08 .text procHammerFrontSwingReady_init__9daPy_lk_cFv */ -void daPy_lk_c::procHammerFrontSwingReady_init() { - /* Nonmatching */ -} - -/* 80150F08-80150F98 .text procHammerFrontSwingReady__9daPy_lk_cFv */ -void daPy_lk_c::procHammerFrontSwingReady() { - /* Nonmatching */ -} - -/* 80150F98-801510DC .text procHammerFrontSwing_init__9daPy_lk_cFv */ -void daPy_lk_c::procHammerFrontSwing_init() { - /* Nonmatching */ -} - -/* 801510DC-801513D4 .text procHammerFrontSwing__9daPy_lk_cFv */ -void daPy_lk_c::procHammerFrontSwing() { - /* Nonmatching */ -} - -/* 801513D4-80151450 .text procHammerFrontSwingEnd_init__9daPy_lk_cFv */ -void daPy_lk_c::procHammerFrontSwingEnd_init() { - /* Nonmatching */ -} - -/* 80151450-801514B0 .text procHammerFrontSwingEnd__9daPy_lk_cFv */ -void daPy_lk_c::procHammerFrontSwingEnd() { - /* Nonmatching */ -} - -/* 801514B0-80151644 .text setPushPullKeepData__9daPy_lk_cFQ24dBgW13PushPullLabel */ -void daPy_lk_c::setPushPullKeepData(dBgW::PushPullLabel) { - /* Nonmatching */ -} - -/* 80151644-801517C0 .text procPushPullWait_init__9daPy_lk_cFi */ -void daPy_lk_c::procPushPullWait_init(int) { - /* Nonmatching */ -} - -/* 801517C0-8015198C .text procPushPullWait__9daPy_lk_cFv */ -void daPy_lk_c::procPushPullWait() { - /* Nonmatching */ -} - -/* 8015198C-80151A1C .text procPushMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procPushMove_init() { - /* Nonmatching */ -} - -/* 80151A1C-80151B38 .text procPushMove__9daPy_lk_cFv */ -void daPy_lk_c::procPushMove() { - /* Nonmatching */ -} - -/* 80151B38-80151BC8 .text procPullMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procPullMove_init() { - /* Nonmatching */ -} - -/* 80151BC8-80151E40 .text procPullMove__9daPy_lk_cFv */ -void daPy_lk_c::procPullMove() { - /* Nonmatching */ -} - -/* 80151E40-80151E60 .text changeBottleDrinkFace__9daPy_lk_cFi */ -void daPy_lk_c::changeBottleDrinkFace(int) { - /* Nonmatching */ -} - -/* 80151E60-80152128 .text setBottleModel__9daPy_lk_cFUs */ -void daPy_lk_c::setBottleModel(unsigned short) { - /* Nonmatching */ -} - -/* 80152128-801521A0 .text makeFairy__9daPy_lk_cFP4cXyzUl */ -void daPy_lk_c::makeFairy(cXyz*, unsigned long) { - /* Nonmatching */ -} - -/* 801521A0-80152300 .text procBottleDrink_init__9daPy_lk_cFUs */ -void daPy_lk_c::procBottleDrink_init(unsigned short) { - /* Nonmatching */ -} - -/* 80152300-80152624 .text procBottleDrink__9daPy_lk_cFv */ -void daPy_lk_c::procBottleDrink() { - /* Nonmatching */ -} - -/* 80152624-801527CC .text procBottleOpen_init__9daPy_lk_cFUs */ -void daPy_lk_c::procBottleOpen_init(unsigned short) { - /* Nonmatching */ -} - -/* 801527CC-80152ED0 .text procBottleOpen__9daPy_lk_cFv */ -void daPy_lk_c::procBottleOpen() { - /* Nonmatching */ -} - -/* 80152ED0-80153064 .text procBottleSwing_init__9daPy_lk_cFi */ -void daPy_lk_c::procBottleSwing_init(int) { - /* Nonmatching */ -} - -/* 80153064-80153338 .text procBottleSwing__9daPy_lk_cFv */ -void daPy_lk_c::procBottleSwing() { - /* Nonmatching */ -} - -/* 80153338-80153438 .text procBottleGet_init__9daPy_lk_cFv */ -void daPy_lk_c::procBottleGet_init() { - /* Nonmatching */ -} - -/* 80153438-80153554 .text procBottleGet__9daPy_lk_cFv */ -void daPy_lk_c::procBottleGet() { - /* Nonmatching */ -} - -/* 80153554-801535D8 .text setEnemyWeaponAtParam__9daPy_lk_cFi */ -void daPy_lk_c::setEnemyWeaponAtParam(int) { - /* Nonmatching */ -} - -/* 801535D8-8015372C .text procWeaponNormalSwing_init__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponNormalSwing_init() { - /* Nonmatching */ -} - -/* 8015372C-801539C8 .text procWeaponNormalSwing__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponNormalSwing() { - /* Nonmatching */ -} - -/* 801539C8-80153A68 .text procWeaponSideSwing_init__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponSideSwing_init() { - /* Nonmatching */ -} - -/* 80153A68-80153C30 .text procWeaponSideSwing__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponSideSwing() { - /* Nonmatching */ -} - -/* 80153C30-80153D1C .text procWeaponFrontSwingReady_init__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponFrontSwingReady_init() { - /* Nonmatching */ -} - -/* 80153D1C-80153DBC .text procWeaponFrontSwingReady__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponFrontSwingReady() { - /* Nonmatching */ -} - -/* 80153DBC-80153ED8 .text procWeaponFrontSwing_init__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponFrontSwing_init() { - /* Nonmatching */ -} - -/* 80153ED8-80153FA0 .text procWeaponFrontSwing__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponFrontSwing() { - /* Nonmatching */ -} - -/* 80153FA0-80154014 .text procWeaponFrontSwingEnd_init__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponFrontSwingEnd_init() { - /* Nonmatching */ -} - -/* 80154014-801540B4 .text procWeaponFrontSwingEnd__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponFrontSwingEnd() { - /* Nonmatching */ -} - -/* 801540B4-8015411C .text procWeaponThrow_init__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponThrow_init() { - /* Nonmatching */ -} - -/* 8015411C-80154334 .text procWeaponThrow__9daPy_lk_cFv */ -void daPy_lk_c::procWeaponThrow() { - /* Nonmatching */ -} - -/* 80154334-801543A0 .text setHyoiModel__9daPy_lk_cFv */ -void daPy_lk_c::setHyoiModel() { - /* Nonmatching */ -} - -/* 801543A0-801546F4 .text procFoodThrow_init__9daPy_lk_cFv */ -void daPy_lk_c::procFoodThrow_init() { - /* Nonmatching */ -} - -/* 801546F4-80154880 .text procFoodThrow__9daPy_lk_cFv */ -void daPy_lk_c::procFoodThrow() { - /* Nonmatching */ -} - -/* 80154880-80154A48 .text procFoodSet_init__9daPy_lk_cFv */ -void daPy_lk_c::procFoodSet_init() { - /* Nonmatching */ -} - -/* 80154A48-80154B80 .text procFoodSet__9daPy_lk_cFv */ -void daPy_lk_c::procFoodSet() { - /* Nonmatching */ -} - -/* 80154B80-80154FBC .text setSwordModel__9daPy_lk_cFi */ -void daPy_lk_c::setSwordModel(int) { - /* Nonmatching */ -} - -/* 80154FBC-80155490 .text setLightSaver__9daPy_lk_cFv */ -void daPy_lk_c::setLightSaver() { - /* Nonmatching */ -} - -/* 80155490-801554C8 .text checkDemoShieldNoDraw__9daPy_lk_cFv */ -void daPy_lk_c::checkDemoShieldNoDraw() { - /* Nonmatching */ -} - -/* 801554C8-80155544 .text checkDemoSwordNoDraw__9daPy_lk_cFi */ -void daPy_lk_c::checkDemoSwordNoDraw(int) { - /* Nonmatching */ -} - -/* 80155544-80155574 .text checkChanceMode__9daPy_lk_cFv */ -void daPy_lk_c::checkChanceMode() { - /* Nonmatching */ -} - -/* 80155574-8015559C .text checkCutRollChange__9daPy_lk_cCFv */ -void daPy_lk_c::checkCutRollChange() const { - /* Nonmatching */ -} - -/* 8015559C-801555FC .text getSwordBlurColor__9daPy_lk_cFv */ -void daPy_lk_c::getSwordBlurColor() { - /* Nonmatching */ -} - -/* 801555FC-80155694 .text setNormalCutAtParam__9daPy_lk_cFUc */ -void daPy_lk_c::setNormalCutAtParam(unsigned char) { - /* Nonmatching */ -} - -/* 80155694-8015572C .text setFinishCutAtParam__9daPy_lk_cFUc */ -void daPy_lk_c::setFinishCutAtParam(unsigned char) { - /* Nonmatching */ -} - -/* 8015572C-801557C4 .text setExtraCutAtParam__9daPy_lk_cFUc */ -void daPy_lk_c::setExtraCutAtParam(unsigned char) { - /* Nonmatching */ -} - -/* 801557C4-8015585C .text setExtraFinishCutAtParam__9daPy_lk_cFUc */ -void daPy_lk_c::setExtraFinishCutAtParam(unsigned char) { - /* Nonmatching */ -} - -/* 8015585C-80155970 .text setJumpCutAtParam__9daPy_lk_cFv */ -void daPy_lk_c::setJumpCutAtParam() { - /* Nonmatching */ -} - -/* 80155970-801559F0 .text getCutDirection__9daPy_lk_cFv */ -void daPy_lk_c::getCutDirection() { - /* Nonmatching */ -} - -/* 801559F0-80155C3C .text changeCutProc__9daPy_lk_cFv */ -void daPy_lk_c::changeCutProc() { - /* Nonmatching */ -} - -/* 80155C3C-80156034 .text changeCutReverseProc__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ -void daPy_lk_c::changeCutReverseProc(daPy_lk_c::daPy_ANM) { - /* Nonmatching */ -} - -/* 80156034-80156198 .text procCutA_init__9daPy_lk_cFs */ -void daPy_lk_c::procCutA_init(short) { - /* Nonmatching */ -} - -/* 80156198-80156424 .text procCutA__9daPy_lk_cFv */ -void daPy_lk_c::procCutA() { - /* Nonmatching */ -} - -/* 80156424-80156584 .text procCutF_init__9daPy_lk_cFs */ -void daPy_lk_c::procCutF_init(short) { - /* Nonmatching */ -} - -/* 80156584-80156828 .text procCutF__9daPy_lk_cFv */ -void daPy_lk_c::procCutF() { - /* Nonmatching */ -} - -/* 80156828-80156984 .text procCutR_init__9daPy_lk_cFs */ -void daPy_lk_c::procCutR_init(short) { - /* Nonmatching */ -} - -/* 80156984-80156C10 .text procCutR__9daPy_lk_cFv */ -void daPy_lk_c::procCutR() { - /* Nonmatching */ -} - -/* 80156C10-80156D6C .text procCutL_init__9daPy_lk_cFs */ -void daPy_lk_c::procCutL_init(short) { - /* Nonmatching */ -} - -/* 80156D6C-80156FF8 .text procCutL__9daPy_lk_cFv */ -void daPy_lk_c::procCutL() { - /* Nonmatching */ -} - -/* 80156FF8-80157154 .text procCutEA_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutEA_init() { - /* Nonmatching */ -} - -/* 80157154-80157348 .text procCutEA__9daPy_lk_cFv */ -void daPy_lk_c::procCutEA() { - /* Nonmatching */ -} - -/* 80157348-801574A4 .text procCutEB_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutEB_init() { - /* Nonmatching */ -} - -/* 801574A4-8015768C .text procCutEB__9daPy_lk_cFv */ -void daPy_lk_c::procCutEB() { - /* Nonmatching */ -} - -/* 8015768C-801577EC .text procCutExA_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutExA_init() { - /* Nonmatching */ -} - -/* 801577EC-80157A18 .text procCutExA__9daPy_lk_cFv */ -void daPy_lk_c::procCutExA() { - /* Nonmatching */ -} - -/* 80157A18-80157B74 .text procCutExB_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutExB_init() { - /* Nonmatching */ -} - -/* 80157B74-80157D3C .text procCutExB__9daPy_lk_cFv */ -void daPy_lk_c::procCutExB() { - /* Nonmatching */ -} - -/* 80157D3C-80158220 .text procCutTurn_init__9daPy_lk_cFi */ -void daPy_lk_c::procCutTurn_init(int) { - /* Nonmatching */ -} - -/* 80158220-80158460 .text procCutTurn__9daPy_lk_cFv */ -void daPy_lk_c::procCutTurn() { - /* Nonmatching */ -} - -/* 80158460-801585D8 .text procCutRoll_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutRoll_init() { - /* Nonmatching */ -} - -/* 801585D8-801588F0 .text procCutRoll__9daPy_lk_cFv */ -void daPy_lk_c::procCutRoll() { - /* Nonmatching */ -} - -/* 801588F0-80158A40 .text procCutRollEnd_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutRollEnd_init() { - /* Nonmatching */ -} - -/* 80158A40-80158A98 .text procCutRollEnd__9daPy_lk_cFv */ -void daPy_lk_c::procCutRollEnd() { - /* Nonmatching */ -} - -/* 80158A98-80158B00 .text procCutTurnCharge_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutTurnCharge_init() { - /* Nonmatching */ -} - -/* 80158B00-80158B58 .text procCutTurnCharge__9daPy_lk_cFv */ -void daPy_lk_c::procCutTurnCharge() { - /* Nonmatching */ -} - -/* 80158B58-80158D40 .text procCutTurnMove_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutTurnMove_init() { - /* Nonmatching */ -} - -/* 80158D40-80159130 .text procCutTurnMove__9daPy_lk_cFv */ -void daPy_lk_c::procCutTurnMove() { - /* Nonmatching */ -} - -/* 80159130-801592A4 .text procCutReverse_init__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ -void daPy_lk_c::procCutReverse_init(daPy_lk_c::daPy_ANM) { - /* Nonmatching */ -} - -/* 801592A4-80159390 .text procCutReverse__9daPy_lk_cFv */ -void daPy_lk_c::procCutReverse() { - /* Nonmatching */ -} - -/* 80159390-80159500 .text procJumpCut_init__9daPy_lk_cFi */ -void daPy_lk_c::procJumpCut_init(int) { - /* Nonmatching */ -} - -/* 80159500-80159608 .text procJumpCut__9daPy_lk_cFv */ -void daPy_lk_c::procJumpCut() { - /* Nonmatching */ -} - -/* 80159608-80159864 .text procJumpCutLand_init__9daPy_lk_cFv */ -void daPy_lk_c::procJumpCutLand_init() { - /* Nonmatching */ -} - -/* 80159864-80159998 .text procJumpCutLand__9daPy_lk_cFv */ -void daPy_lk_c::procJumpCutLand() { - /* Nonmatching */ -} - -/* 80159998-80159B80 .text procCutExMJ_init__9daPy_lk_cFi */ -void daPy_lk_c::procCutExMJ_init(int) { - /* Nonmatching */ -} - -/* 80159B80-80159E60 .text procCutExMJ__9daPy_lk_cFv */ -void daPy_lk_c::procCutExMJ() { - /* Nonmatching */ -} - -/* 80159E60-80159FB0 .text procCutKesa_init__9daPy_lk_cFv */ -void daPy_lk_c::procCutKesa_init() { - /* Nonmatching */ -} - -/* 80159FB0-8015A1DC .text procCutKesa__9daPy_lk_cFv */ -void daPy_lk_c::procCutKesa() { - /* Nonmatching */ -} +#include "src/d/actor/d_a_player_sword.inc" diff --git a/src/d/actor/d_a_player_particle.inc b/src/d/actor/d_a_player_particle.inc new file mode 100644 index 000000000..68e590a6c --- /dev/null +++ b/src/d/actor/d_a_player_particle.inc @@ -0,0 +1,203 @@ +/** + * d_a_player_particle.inc + * + * Code relating to various particle effects. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8012901C-80129034 .text setup__24daPy_swimTailEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void daPy_swimTailEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { + /* Nonmatching */ +} + +/* 80129034-801290D8 .text getMaxWaterY__24daPy_swimTailEcallBack_cFPQ29JGeometry8TVec3 */ +void daPy_swimTailEcallBack_c::getMaxWaterY(JGeometry::TVec3*) { + /* Nonmatching */ +} + +/* 801290D8-8012910C .text remove__24daPy_swimTailEcallBack_cFv */ +void daPy_swimTailEcallBack_c::remove() { + /* Nonmatching */ +} + +/* 8012910C-80129310 .text execute__24daPy_swimTailEcallBack_cFP14JPABaseEmitter */ +void daPy_swimTailEcallBack_c::execute(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 80129310-80129348 .text draw__24daPy_swimTailEcallBack_cFP14JPABaseEmitter */ +void daPy_swimTailEcallBack_c::draw(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 80129348-8012952C .text draw__18daPy_sightPacket_cFv */ +void daPy_sightPacket_c::draw() { + /* Nonmatching */ +} + +/* 8012952C-801296FC .text setSight__18daPy_sightPacket_cFv */ +void daPy_sightPacket_c::setSight() { + /* Nonmatching */ +} + +/* 801296FC-801297F4 .text initSwBlur__13daPy_swBlur_cFPA4_fifi */ +void daPy_swBlur_c::initSwBlur(float(*)[4], int, float, int) { + /* Nonmatching */ +} + +/* 801297F4-80129A78 .text copySwBlur__13daPy_swBlur_cFPA4_fi */ +void daPy_swBlur_c::copySwBlur(float(*)[4], int) { + /* Nonmatching */ +} + +/* 80129A78-80129DD0 .text draw__13daPy_swBlur_cFv */ +void daPy_swBlur_c::draw() { + /* Nonmatching */ +} + +/* 80129DD0-80129E9C .text execute__24daPy_fanSwingEcallBack_cFP14JPABaseEmitter */ +void daPy_fanSwingEcallBack_c::execute(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 80129E9C-80129F48 .text execute__25daPy_waterDropPcallBack_cFP14JPABaseEmitterP15JPABaseParticle */ +void daPy_waterDropPcallBack_c::execute(JPABaseEmitter*, JPABaseParticle*) { + /* Nonmatching */ +} + +/* 80129F48-80129F98 .text execute__22daPy_followEcallBack_cFP14JPABaseEmitter */ +void daPy_followEcallBack_c::execute(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 80129F98-80129FA0 .text setup__22daPy_followEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void daPy_followEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { + /* Nonmatching */ +} + +/* 80129FA0-80129FD4 .text end__22daPy_followEcallBack_cFv */ +void daPy_followEcallBack_c::end() { + /* Nonmatching */ +} + +/* 80129FD4-8012A040 .text execute__25daPy_waterDropEcallBack_cFP14JPABaseEmitter */ +void daPy_waterDropEcallBack_c::execute(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 8012A040-8012A058 .text setup__25daPy_waterDropEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void daPy_waterDropEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { + /* Nonmatching */ +} + +/* 8012A058-8012A0B4 .text end__25daPy_waterDropEcallBack_cFv */ +void daPy_waterDropEcallBack_c::end() { + /* Nonmatching */ +} + +/* 8012A0B4-8012A0E0 .text makeEmitterColor__28daPy_mtxPosFollowEcallBack_cFUsPA4_fPC4cXyzPC5csXyzPC8_GXColorPC8_GXColor */ +void daPy_mtxPosFollowEcallBack_c::makeEmitterColor(unsigned short, float(*)[4], const cXyz*, const csXyz*, const _GXColor*, const _GXColor*) { + /* Nonmatching */ +} + +/* 8012A0E0-8012A160 .text execute__28daPy_mtxPosFollowEcallBack_cFP14JPABaseEmitter */ +void daPy_mtxPosFollowEcallBack_c::execute(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 8012A160-8012A288 .text execute__18daPy_dmEcallBack_cFP14JPABaseEmitter */ +void daPy_dmEcallBack_c::execute(JPABaseEmitter*) { + /* Nonmatching */ +} + +/* 8012A288-8012A8D8 .text setAuraEffect__9daPy_lk_cFv */ +void daPy_lk_c::setAuraEffect() { + /* Nonmatching */ +} + +/* 8012A8D8-8012B340 .text setWaterRipple__9daPy_lk_cFv */ +void daPy_lk_c::setWaterRipple() { + /* Nonmatching */ +} + +/* 8012B340-8012B8EC .text setFootEffectType__9daPy_lk_cFiP4cXyzii */ +void daPy_lk_c::setFootEffectType(int, cXyz*, int, int) { + /* Nonmatching */ +} + +/* 8012B8EC-8012B9DC .text setFootMark__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::setFootMark(cXyz*) { + /* Nonmatching */ +} + +/* 8012B9DC-8012C128 .text setFootEffect__9daPy_lk_cFv */ +void daPy_lk_c::setFootEffect() { + /* Nonmatching */ +} + +/* 8012C128-8012C1A8 .text resetFootEffect__9daPy_lk_cFv */ +void daPy_lk_c::resetFootEffect() { + /* Nonmatching */ +} + +/* 8012C1A8-8012C2A4 .text setSwimTail__9daPy_lk_cFv */ +void daPy_lk_c::setSwimTail() { + /* Nonmatching */ +} + +/* 8012C2A4-8012C330 .text setCutWaterSplash__9daPy_lk_cFv */ +void daPy_lk_c::setCutWaterSplash() { + /* Nonmatching */ +} + +/* 8012C330-8012C45C .text setSwimWaterDrop__9daPy_lk_cFP25daPy_waterDropEcallBack_c */ +void daPy_lk_c::setSwimWaterDrop(daPy_waterDropEcallBack_c*) { + /* Nonmatching */ +} + +/* 8012C45C-8012C620 .text setWaterDrop__9daPy_lk_cFv */ +void daPy_lk_c::setWaterDrop() { + /* Nonmatching */ +} + +/* 8012C620-8012C754 .text setDamageFlameEmitter__9daPy_lk_cFv */ +void daPy_lk_c::setDamageFlameEmitter() { + /* Nonmatching */ +} + +/* 8012C754-8012C7F0 .text setDamageCurseEmitter__9daPy_lk_cFv */ +void daPy_lk_c::setDamageCurseEmitter() { + /* Nonmatching */ +} + +/* 8012C7F0-8012C880 .text setDamageElecEmitter__9daPy_lk_cFv */ +void daPy_lk_c::setDamageElecEmitter() { + /* Nonmatching */ +} + +/* 8012C880-8012C8F8 .text setDamageEmitter__9daPy_lk_cFv */ +void daPy_lk_c::setDamageEmitter() { + /* Nonmatching */ +} + +/* 8012C8F8-8012C9D8 .text endFlameDamageEmitter__9daPy_lk_cFv */ +void daPy_lk_c::endFlameDamageEmitter() { + /* Nonmatching */ +} + +/* 8012C9D8-8012CA44 .text endDamageEmitter__9daPy_lk_cFv */ +void daPy_lk_c::endDamageEmitter() { + /* Nonmatching */ +} + +/* 8012CA44-8012CD60 .text setItemWaterEffect__9daPy_lk_cFP10fopAc_ac_cii */ +void daPy_lk_c::setItemWaterEffect(fopAc_ac_c*, int, int) { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_pushpull.inc b/src/d/actor/d_a_player_pushpull.inc new file mode 100644 index 000000000..663d3f96f --- /dev/null +++ b/src/d/actor/d_a_player_pushpull.inc @@ -0,0 +1,48 @@ +/** + * d_a_player_pushpull.inc + * + * Code relating to pushing and pulling other actors. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 801514B0-80151644 .text setPushPullKeepData__9daPy_lk_cFQ24dBgW13PushPullLabel */ +void daPy_lk_c::setPushPullKeepData(dBgW::PushPullLabel) { + /* Nonmatching */ +} + +/* 80151644-801517C0 .text procPushPullWait_init__9daPy_lk_cFi */ +void daPy_lk_c::procPushPullWait_init(int) { + /* Nonmatching */ +} + +/* 801517C0-8015198C .text procPushPullWait__9daPy_lk_cFv */ +void daPy_lk_c::procPushPullWait() { + /* Nonmatching */ +} + +/* 8015198C-80151A1C .text procPushMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procPushMove_init() { + /* Nonmatching */ +} + +/* 80151A1C-80151B38 .text procPushMove__9daPy_lk_cFv */ +void daPy_lk_c::procPushMove() { + /* Nonmatching */ +} + +/* 80151B38-80151BC8 .text procPullMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procPullMove_init() { + /* Nonmatching */ +} + +/* 80151BC8-80151E40 .text procPullMove__9daPy_lk_cFv */ +void daPy_lk_c::procPullMove() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc new file mode 100644 index 000000000..4a9505245 --- /dev/null +++ b/src/d/actor/d_a_player_rope.inc @@ -0,0 +1,183 @@ +/** + * d_a_player_rope.inc + * + * Code relating to the Grappling Hook item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80142D08-80142D68 .text checkRopeAnime__9daPy_lk_cCFv */ +void daPy_lk_c::checkRopeAnime() const { + /* Nonmatching */ +} + +/* 80142D68-80142E0C .text freeRopeItem__9daPy_lk_cFv */ +void daPy_lk_c::freeRopeItem() { + /* Nonmatching */ +} + +/* 80142E0C-80142E98 .text checkRopeRoofHit__9daPy_lk_cFs */ +void daPy_lk_c::checkRopeRoofHit(short) { + /* Nonmatching */ +} + +/* 80142E98-80142FC8 .text changeRopeSwingProc__9daPy_lk_cFv */ +void daPy_lk_c::changeRopeSwingProc() { + /* Nonmatching */ +} + +/* 80142FC8-801430D4 .text changeRopeEndProc__9daPy_lk_cFi */ +void daPy_lk_c::changeRopeEndProc(int) { + /* Nonmatching */ +} + +/* 801430D4-80143138 .text checkSpecialRope__9daPy_lk_cFv */ +void daPy_lk_c::checkSpecialRope() { + /* Nonmatching */ +} + +/* 80143138-8014327C .text changeRopeToHangProc__9daPy_lk_cFv */ +void daPy_lk_c::changeRopeToHangProc() { + /* Nonmatching */ +} + +/* 8014327C-80143694 .text checkRopeSwingWall__9daPy_lk_cFP4cXyzP4cXyzPsPf */ +void daPy_lk_c::checkRopeSwingWall(cXyz*, cXyz*, short*, float*) { + /* Nonmatching */ +} + +/* 80143694-80143A44 .text setBlendRopeMoveAnime__9daPy_lk_cFi */ +void daPy_lk_c::setBlendRopeMoveAnime(int) { + /* Nonmatching */ +} + +/* 80143A44-80143C5C .text throwRope__9daPy_lk_cFv */ +void daPy_lk_c::throwRope() { + /* Nonmatching */ +} + +/* 80143C5C-80143DF4 .text checkNextActionRopeReady__9daPy_lk_cFv */ +void daPy_lk_c::checkNextActionRopeReady() { + /* Nonmatching */ +} + +/* 80143DF4-80143EAC .text checkNextRopeMode__9daPy_lk_cFv */ +void daPy_lk_c::checkNextRopeMode() { + /* Nonmatching */ +} + +/* 80143EAC-80143F3C .text checkHangRopeActorNull__9daPy_lk_cFv */ +void daPy_lk_c::checkHangRopeActorNull() { + /* Nonmatching */ +} + +/* 80143F3C-80144038 .text procRopeSubject_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeSubject_init() { + /* Nonmatching */ +} + +/* 80144038-8014422C .text procRopeSubject__9daPy_lk_cFv */ +void daPy_lk_c::procRopeSubject() { + /* Nonmatching */ +} + +/* 8014422C-80144464 .text procRopeReady_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeReady_init() { + /* Nonmatching */ +} + +/* 80144464-80144620 .text procRopeReady__9daPy_lk_cFv */ +void daPy_lk_c::procRopeReady() { + /* Nonmatching */ +} + +/* 80144620-80144C58 .text procRopeSwing_init__9daPy_lk_cFP10fopAc_ac_cs */ +void daPy_lk_c::procRopeSwing_init(fopAc_ac_c*, short) { + /* Nonmatching */ +} + +/* 80144C58-801456D8 .text procRopeSwing__9daPy_lk_cFv */ +void daPy_lk_c::procRopeSwing() { + /* Nonmatching */ +} + +/* 801456D8-801457FC .text procRopeHangWait_init__9daPy_lk_cFi */ +void daPy_lk_c::procRopeHangWait_init(int) { + /* Nonmatching */ +} + +/* 801457FC-80145B38 .text procRopeHangWait__9daPy_lk_cFv */ +void daPy_lk_c::procRopeHangWait() { + /* Nonmatching */ +} + +/* 80145B38-80145C3C .text specialRopeHangUp__9daPy_lk_cFv */ +void daPy_lk_c::specialRopeHangUp() { + /* Nonmatching */ +} + +/* 80145C3C-80145DBC .text procRopeUp_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeUp_init() { + /* Nonmatching */ +} + +/* 80145DBC-80145F64 .text procRopeUp__9daPy_lk_cFv */ +void daPy_lk_c::procRopeUp() { + /* Nonmatching */ +} + +/* 80145F64-801460EC .text procRopeDown_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeDown_init() { + /* Nonmatching */ +} + +/* 801460EC-80146240 .text procRopeDown__9daPy_lk_cFv */ +void daPy_lk_c::procRopeDown() { + /* Nonmatching */ +} + +/* 80146240-801463E8 .text procRopeSwingStart_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeSwingStart_init() { + /* Nonmatching */ +} + +/* 801463E8-80146610 .text procRopeSwingStart__9daPy_lk_cFv */ +void daPy_lk_c::procRopeSwingStart() { + /* Nonmatching */ +} + +/* 80146610-801466E8 .text procRopeMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeMove_init() { + /* Nonmatching */ +} + +/* 801466E8-80146848 .text procRopeMove__9daPy_lk_cFv */ +void daPy_lk_c::procRopeMove() { + /* Nonmatching */ +} + +/* 80146848-801468C4 .text procRopeThrowCatch_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeThrowCatch_init() { + /* Nonmatching */ +} + +/* 801468C4-801469A8 .text procRopeThrowCatch__9daPy_lk_cFv */ +void daPy_lk_c::procRopeThrowCatch() { + /* Nonmatching */ +} + +/* 801469A8-80146A44 .text procRopeUpHang_init__9daPy_lk_cFv */ +void daPy_lk_c::procRopeUpHang_init() { + /* Nonmatching */ +} + +/* 80146A44-80146AF0 .text procRopeUpHang__9daPy_lk_cFv */ +void daPy_lk_c::procRopeUpHang() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_ship.inc b/src/d/actor/d_a_player_ship.inc new file mode 100644 index 000000000..8dc41e42d --- /dev/null +++ b/src/d/actor/d_a_player_ship.inc @@ -0,0 +1,198 @@ +/** + * d_a_player_ship.inc + * + * Code relating to interacting with and controlling The King of Red Lions. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8013F848-8013F8AC .text shipSpecialDemoStart__9daPy_lk_cFv */ +void daPy_lk_c::shipSpecialDemoStart() { + /* Nonmatching */ +} + +/* 8013F8AC-8013F984 .text checkJumpRideShip__9daPy_lk_cFv */ +void daPy_lk_c::checkJumpRideShip() { + /* Nonmatching */ +} + +/* 8013F984-8013F9B0 .text checkShipNotNormalMode__9daPy_lk_cFv */ +void daPy_lk_c::checkShipNotNormalMode() { + /* Nonmatching */ +} + +/* 8013F9B0-8013FE78 .text setShipRideArmAngle__9daPy_lk_cFiP16J3DTransformInfo */ +void daPy_lk_c::setShipRideArmAngle(int, J3DTransformInfo*) { + /* Nonmatching */ +} + +/* 8013FE78-8013FEF4 .text checkShipRideUseItem__9daPy_lk_cFi */ +void daPy_lk_c::checkShipRideUseItem(int) { + /* Nonmatching */ +} + +/* 8013FEF4-8013FFC0 .text initShipRideUseItem__9daPy_lk_cFii */ +void daPy_lk_c::initShipRideUseItem(int, int) { + /* Nonmatching */ +} + +/* 8013FFC0-80140018 .text setShipRidePosUseItem__9daPy_lk_cFv */ +void daPy_lk_c::setShipRidePosUseItem() { + /* Nonmatching */ +} + +/* 80140018-801403E0 .text setShipRidePos__9daPy_lk_cFi */ +void daPy_lk_c::setShipRidePos(int) { + /* Nonmatching */ +} + +/* 801403E0-80140480 .text setShipAttentionAnmSpeed__9daPy_lk_cFf */ +void daPy_lk_c::setShipAttentionAnmSpeed(float) { + /* Nonmatching */ +} + +/* 80140480-801405F0 .text setShipAttnetionBodyAngle__9daPy_lk_cFv */ +void daPy_lk_c::setShipAttnetionBodyAngle() { + /* Nonmatching */ +} + +/* 801405F0-80140C88 .text changeShipEndProc__9daPy_lk_cFv */ +void daPy_lk_c::changeShipEndProc() { + /* Nonmatching */ +} + +/* 80140C88-80140D04 .text initShipBaseAnime__9daPy_lk_cFv */ +void daPy_lk_c::initShipBaseAnime() { + /* Nonmatching */ +} + +/* 80140D04-80140D80 .text initShipCraneAnime__9daPy_lk_cFv */ +void daPy_lk_c::initShipCraneAnime() { + /* Nonmatching */ +} + +/* 80140D80-80140EF0 .text procShipReady_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipReady_init() { + /* Nonmatching */ +} + +/* 80140EF0-8014105C .text procShipReady__9daPy_lk_cFv */ +void daPy_lk_c::procShipReady() { + /* Nonmatching */ +} + +/* 8014105C-80141140 .text procShipJumpRide_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipJumpRide_init() { + /* Nonmatching */ +} + +/* 80141140-80141180 .text procShipJumpRide__9daPy_lk_cFv */ +void daPy_lk_c::procShipJumpRide() { + /* Nonmatching */ +} + +/* 80141180-8014123C .text procShipSteer_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipSteer_init() { + /* Nonmatching */ +} + +/* 8014123C-80141288 .text procShipSteer__9daPy_lk_cFv */ +void daPy_lk_c::procShipSteer() { + /* Nonmatching */ +} + +/* 80141288-801413A4 .text procShipPaddle_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipPaddle_init() { + /* Nonmatching */ +} + +/* 801413A4-801416BC .text procShipPaddle__9daPy_lk_cFv */ +void daPy_lk_c::procShipPaddle() { + /* Nonmatching */ +} + +/* 801416BC-801417EC .text procShipScope_init__9daPy_lk_cFi */ +void daPy_lk_c::procShipScope_init(int) { + /* Nonmatching */ +} + +/* 801417EC-801418B4 .text procShipScope__9daPy_lk_cFv */ +void daPy_lk_c::procShipScope() { + /* Nonmatching */ +} + +/* 801418B4-801419B4 .text procShipBoomerang_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipBoomerang_init() { + /* Nonmatching */ +} + +/* 801419B4-80141BB0 .text procShipBoomerang__9daPy_lk_cFv */ +void daPy_lk_c::procShipBoomerang() { + /* Nonmatching */ +} + +/* 80141BB0-80141CF8 .text procShipHookshot_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipHookshot_init() { + /* Nonmatching */ +} + +/* 80141CF8-80141F2C .text procShipHookshot__9daPy_lk_cFv */ +void daPy_lk_c::procShipHookshot() { + /* Nonmatching */ +} + +/* 80141F2C-80142084 .text procShipBow_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipBow_init() { + /* Nonmatching */ +} + +/* 80142084-80142250 .text procShipBow__9daPy_lk_cFv */ +void daPy_lk_c::procShipBow() { + /* Nonmatching */ +} + +/* 80142250-80142300 .text procShipCannon_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipCannon_init() { + /* Nonmatching */ +} + +/* 80142300-80142388 .text procShipCannon__9daPy_lk_cFv */ +void daPy_lk_c::procShipCannon() { + /* Nonmatching */ +} + +/* 80142388-80142458 .text procShipCrane_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipCrane_init() { + /* Nonmatching */ +} + +/* 80142458-80142920 .text procShipCrane__9daPy_lk_cFv */ +void daPy_lk_c::procShipCrane() { + /* Nonmatching */ +} + +/* 80142920-80142A5C .text procShipGetOff_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipGetOff_init() { + /* Nonmatching */ +} + +/* 80142A5C-80142C08 .text procShipGetOff__9daPy_lk_cFv */ +void daPy_lk_c::procShipGetOff() { + /* Nonmatching */ +} + +/* 80142C08-80142C9C .text procShipRestart_init__9daPy_lk_cFv */ +void daPy_lk_c::procShipRestart_init() { + /* Nonmatching */ +} + +/* 80142C9C-80142D08 .text procShipRestart__9daPy_lk_cFv */ +void daPy_lk_c::procShipRestart() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_swim.inc b/src/d/actor/d_a_player_swim.inc new file mode 100644 index 000000000..e3ce9b07c --- /dev/null +++ b/src/d/actor/d_a_player_swim.inc @@ -0,0 +1,93 @@ +/** + * d_a_player_swim.inc + * + * Code relating to swimming. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8013CC64-8013CF2C .text setSpeedAndAngleSwim__9daPy_lk_cFv */ +void daPy_lk_c::setSpeedAndAngleSwim() { + /* Nonmatching */ +} + +/* 8013CF2C-8013CFC0 .text checkNextModeSwim__9daPy_lk_cFv */ +void daPy_lk_c::checkNextModeSwim() { + /* Nonmatching */ +} + +/* 8013CFC0-8013D1B0 .text changeSwimProc__9daPy_lk_cFv */ +void daPy_lk_c::changeSwimProc() { + /* Nonmatching */ +} + +/* 8013D1B0-8013D2AC .text changeSwimUpProc__9daPy_lk_cFv */ +void daPy_lk_c::changeSwimUpProc() { + /* Nonmatching */ +} + +/* 8013D2AC-8013D314 .text swimOutAfter__9daPy_lk_cFi */ +void daPy_lk_c::swimOutAfter(int) { + /* Nonmatching */ +} + +/* 8013D314-8013D354 .text checkSwimFallCheck__9daPy_lk_cFv */ +void daPy_lk_c::checkSwimFallCheck() { + /* Nonmatching */ +} + +/* 8013D354-8013D530 .text changeSwimOutProc__9daPy_lk_cFv */ +void daPy_lk_c::changeSwimOutProc() { + /* Nonmatching */ +} + +/* 8013D530-8013D638 .text setSwimMoveAnime__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ +void daPy_lk_c::setSwimMoveAnime(daPy_lk_c::daPy_ANM) { + /* Nonmatching */ +} + +/* 8013D638-8013D6B8 .text getSwimTimerRate__9daPy_lk_cFv */ +void daPy_lk_c::getSwimTimerRate() { + /* Nonmatching */ +} + +/* 8013D6B8-8013D814 .text setSwimTimerStartStop__9daPy_lk_cFv */ +void daPy_lk_c::setSwimTimerStartStop() { + /* Nonmatching */ +} + +/* 8013D814-8013DA18 .text procSwimUp_init__9daPy_lk_cFi */ +void daPy_lk_c::procSwimUp_init(int) { + /* Nonmatching */ +} + +/* 8013DA18-8013DB24 .text procSwimUp__9daPy_lk_cFv */ +void daPy_lk_c::procSwimUp() { + /* Nonmatching */ +} + +/* 8013DB24-8013DCDC .text procSwimWait_init__9daPy_lk_cFi */ +void daPy_lk_c::procSwimWait_init(int) { + /* Nonmatching */ +} + +/* 8013DCDC-8013DE8C .text procSwimWait__9daPy_lk_cFv */ +void daPy_lk_c::procSwimWait() { + /* Nonmatching */ +} + +/* 8013DE8C-8013DF60 .text procSwimMove_init__9daPy_lk_cFi */ +void daPy_lk_c::procSwimMove_init(int) { + /* Nonmatching */ +} + +/* 8013DF60-8013E250 .text procSwimMove__9daPy_lk_cFv */ +void daPy_lk_c::procSwimMove() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_sword.inc b/src/d/actor/d_a_player_sword.inc new file mode 100644 index 000000000..f2f342849 --- /dev/null +++ b/src/d/actor/d_a_player_sword.inc @@ -0,0 +1,268 @@ +/** + * d_a_player_sword.inc + * + * Code relating using a sword item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80154B80-80154FBC .text setSwordModel__9daPy_lk_cFi */ +void daPy_lk_c::setSwordModel(int) { + /* Nonmatching */ +} + +/* 80154FBC-80155490 .text setLightSaver__9daPy_lk_cFv */ +void daPy_lk_c::setLightSaver() { + /* Nonmatching */ +} + +/* 80155490-801554C8 .text checkDemoShieldNoDraw__9daPy_lk_cFv */ +void daPy_lk_c::checkDemoShieldNoDraw() { + /* Nonmatching */ +} + +/* 801554C8-80155544 .text checkDemoSwordNoDraw__9daPy_lk_cFi */ +void daPy_lk_c::checkDemoSwordNoDraw(int) { + /* Nonmatching */ +} + +/* 80155544-80155574 .text checkChanceMode__9daPy_lk_cFv */ +void daPy_lk_c::checkChanceMode() { + /* Nonmatching */ +} + +/* 80155574-8015559C .text checkCutRollChange__9daPy_lk_cCFv */ +void daPy_lk_c::checkCutRollChange() const { + /* Nonmatching */ +} + +/* 8015559C-801555FC .text getSwordBlurColor__9daPy_lk_cFv */ +void daPy_lk_c::getSwordBlurColor() { + /* Nonmatching */ +} + +/* 801555FC-80155694 .text setNormalCutAtParam__9daPy_lk_cFUc */ +void daPy_lk_c::setNormalCutAtParam(unsigned char) { + /* Nonmatching */ +} + +/* 80155694-8015572C .text setFinishCutAtParam__9daPy_lk_cFUc */ +void daPy_lk_c::setFinishCutAtParam(unsigned char) { + /* Nonmatching */ +} + +/* 8015572C-801557C4 .text setExtraCutAtParam__9daPy_lk_cFUc */ +void daPy_lk_c::setExtraCutAtParam(unsigned char) { + /* Nonmatching */ +} + +/* 801557C4-8015585C .text setExtraFinishCutAtParam__9daPy_lk_cFUc */ +void daPy_lk_c::setExtraFinishCutAtParam(unsigned char) { + /* Nonmatching */ +} + +/* 8015585C-80155970 .text setJumpCutAtParam__9daPy_lk_cFv */ +void daPy_lk_c::setJumpCutAtParam() { + /* Nonmatching */ +} + +/* 80155970-801559F0 .text getCutDirection__9daPy_lk_cFv */ +void daPy_lk_c::getCutDirection() { + /* Nonmatching */ +} + +/* 801559F0-80155C3C .text changeCutProc__9daPy_lk_cFv */ +void daPy_lk_c::changeCutProc() { + /* Nonmatching */ +} + +/* 80155C3C-80156034 .text changeCutReverseProc__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ +void daPy_lk_c::changeCutReverseProc(daPy_lk_c::daPy_ANM) { + /* Nonmatching */ +} + +/* 80156034-80156198 .text procCutA_init__9daPy_lk_cFs */ +void daPy_lk_c::procCutA_init(short) { + /* Nonmatching */ +} + +/* 80156198-80156424 .text procCutA__9daPy_lk_cFv */ +void daPy_lk_c::procCutA() { + /* Nonmatching */ +} + +/* 80156424-80156584 .text procCutF_init__9daPy_lk_cFs */ +void daPy_lk_c::procCutF_init(short) { + /* Nonmatching */ +} + +/* 80156584-80156828 .text procCutF__9daPy_lk_cFv */ +void daPy_lk_c::procCutF() { + /* Nonmatching */ +} + +/* 80156828-80156984 .text procCutR_init__9daPy_lk_cFs */ +void daPy_lk_c::procCutR_init(short) { + /* Nonmatching */ +} + +/* 80156984-80156C10 .text procCutR__9daPy_lk_cFv */ +void daPy_lk_c::procCutR() { + /* Nonmatching */ +} + +/* 80156C10-80156D6C .text procCutL_init__9daPy_lk_cFs */ +void daPy_lk_c::procCutL_init(short) { + /* Nonmatching */ +} + +/* 80156D6C-80156FF8 .text procCutL__9daPy_lk_cFv */ +void daPy_lk_c::procCutL() { + /* Nonmatching */ +} + +/* 80156FF8-80157154 .text procCutEA_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutEA_init() { + /* Nonmatching */ +} + +/* 80157154-80157348 .text procCutEA__9daPy_lk_cFv */ +void daPy_lk_c::procCutEA() { + /* Nonmatching */ +} + +/* 80157348-801574A4 .text procCutEB_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutEB_init() { + /* Nonmatching */ +} + +/* 801574A4-8015768C .text procCutEB__9daPy_lk_cFv */ +void daPy_lk_c::procCutEB() { + /* Nonmatching */ +} + +/* 8015768C-801577EC .text procCutExA_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutExA_init() { + /* Nonmatching */ +} + +/* 801577EC-80157A18 .text procCutExA__9daPy_lk_cFv */ +void daPy_lk_c::procCutExA() { + /* Nonmatching */ +} + +/* 80157A18-80157B74 .text procCutExB_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutExB_init() { + /* Nonmatching */ +} + +/* 80157B74-80157D3C .text procCutExB__9daPy_lk_cFv */ +void daPy_lk_c::procCutExB() { + /* Nonmatching */ +} + +/* 80157D3C-80158220 .text procCutTurn_init__9daPy_lk_cFi */ +void daPy_lk_c::procCutTurn_init(int) { + /* Nonmatching */ +} + +/* 80158220-80158460 .text procCutTurn__9daPy_lk_cFv */ +void daPy_lk_c::procCutTurn() { + /* Nonmatching */ +} + +/* 80158460-801585D8 .text procCutRoll_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutRoll_init() { + /* Nonmatching */ +} + +/* 801585D8-801588F0 .text procCutRoll__9daPy_lk_cFv */ +void daPy_lk_c::procCutRoll() { + /* Nonmatching */ +} + +/* 801588F0-80158A40 .text procCutRollEnd_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutRollEnd_init() { + /* Nonmatching */ +} + +/* 80158A40-80158A98 .text procCutRollEnd__9daPy_lk_cFv */ +void daPy_lk_c::procCutRollEnd() { + /* Nonmatching */ +} + +/* 80158A98-80158B00 .text procCutTurnCharge_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutTurnCharge_init() { + /* Nonmatching */ +} + +/* 80158B00-80158B58 .text procCutTurnCharge__9daPy_lk_cFv */ +void daPy_lk_c::procCutTurnCharge() { + /* Nonmatching */ +} + +/* 80158B58-80158D40 .text procCutTurnMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutTurnMove_init() { + /* Nonmatching */ +} + +/* 80158D40-80159130 .text procCutTurnMove__9daPy_lk_cFv */ +void daPy_lk_c::procCutTurnMove() { + /* Nonmatching */ +} + +/* 80159130-801592A4 .text procCutReverse_init__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ +void daPy_lk_c::procCutReverse_init(daPy_lk_c::daPy_ANM) { + /* Nonmatching */ +} + +/* 801592A4-80159390 .text procCutReverse__9daPy_lk_cFv */ +void daPy_lk_c::procCutReverse() { + /* Nonmatching */ +} + +/* 80159390-80159500 .text procJumpCut_init__9daPy_lk_cFi */ +void daPy_lk_c::procJumpCut_init(int) { + /* Nonmatching */ +} + +/* 80159500-80159608 .text procJumpCut__9daPy_lk_cFv */ +void daPy_lk_c::procJumpCut() { + /* Nonmatching */ +} + +/* 80159608-80159864 .text procJumpCutLand_init__9daPy_lk_cFv */ +void daPy_lk_c::procJumpCutLand_init() { + /* Nonmatching */ +} + +/* 80159864-80159998 .text procJumpCutLand__9daPy_lk_cFv */ +void daPy_lk_c::procJumpCutLand() { + /* Nonmatching */ +} + +/* 80159998-80159B80 .text procCutExMJ_init__9daPy_lk_cFi */ +void daPy_lk_c::procCutExMJ_init(int) { + /* Nonmatching */ +} + +/* 80159B80-80159E60 .text procCutExMJ__9daPy_lk_cFv */ +void daPy_lk_c::procCutExMJ() { + /* Nonmatching */ +} + +/* 80159E60-80159FB0 .text procCutKesa_init__9daPy_lk_cFv */ +void daPy_lk_c::procCutKesa_init() { + /* Nonmatching */ +} + +/* 80159FB0-8015A1DC .text procCutKesa__9daPy_lk_cFv */ +void daPy_lk_c::procCutKesa() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_tact.inc b/src/d/actor/d_a_player_tact.inc new file mode 100644 index 000000000..baf1332a5 --- /dev/null +++ b/src/d/actor/d_a_player_tact.inc @@ -0,0 +1,128 @@ +/** + * d_a_player_tact.inc + * + * Code relating to the Wind Waker item. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8014D778-8014D7D4 .text getDayNightParamData__9daPy_lk_cFv */ +void daPy_lk_c::getDayNightParamData() { + /* Nonmatching */ +} + +/* 8014D7D4-8014D8AC .text setTactModel__9daPy_lk_cFv */ +void daPy_lk_c::setTactModel() { + /* Nonmatching */ +} + +/* 8014D8AC-8014D8F4 .text checkNpcStatus__9daPy_lk_cFv */ +void daPy_lk_c::checkNpcStatus() { + /* Nonmatching */ +} + +/* 8014D8F4-8014D938 .text getTactPlayRightArmAnm__9daPy_lk_cFl */ +void daPy_lk_c::getTactPlayRightArmAnm(long) { + /* Nonmatching */ +} + +/* 8014D938-8014D97C .text getTactPlayLeftArmAnm__9daPy_lk_cFl */ +void daPy_lk_c::getTactPlayLeftArmAnm(long) { + /* Nonmatching */ +} + +/* 8014D97C-8014D9A4 .text checkEndTactMusic__9daPy_lk_cCFv */ +void daPy_lk_c::checkEndTactMusic() const { + /* Nonmatching */ +} + +/* 8014D9A4-8014D9D0 .text getTactMetronomeRate__9daPy_lk_cFv */ +void daPy_lk_c::getTactMetronomeRate() { + /* Nonmatching */ +} + +/* 8014D9D0-8014D9F8 .text checkTactLastInput__9daPy_lk_cFv */ +void daPy_lk_c::checkTactLastInput() { + /* Nonmatching */ +} + +/* 8014D9F8-8014DA78 .text setTactZev__9daPy_lk_cFUiiPc */ +void daPy_lk_c::setTactZev(unsigned int, int, char*) { + /* Nonmatching */ +} + +/* 8014DA78-8014DACC .text getTactTopPos__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::getTactTopPos(cXyz*) { + /* Nonmatching */ +} + +/* 8014DACC-8014DB00 .text getTactNormalWait__9daPy_lk_cCFv */ +void daPy_lk_c::getTactNormalWait() const { + /* Nonmatching */ +} + +/* 8014DB00-8014DB2C .text getTactMusic__9daPy_lk_cCFv */ +void daPy_lk_c::getTactMusic() const { + /* Nonmatching */ +} + +/* 8014DB2C-8014DB74 .text getTactTimerCancel__9daPy_lk_cCFv */ +void daPy_lk_c::getTactTimerCancel() const { + /* Nonmatching */ +} + +/* 8014DB74-8014DB9C .text checkTactPlayMelody__9daPy_lk_cFv */ +void daPy_lk_c::checkTactPlayMelody() { + /* Nonmatching */ +} + +/* 8014DB9C-8014DBEC .text resetTactCount__9daPy_lk_cFv */ +void daPy_lk_c::resetTactCount() { + /* Nonmatching */ +} + +/* 8014DBEC-8014E100 .text procTactWait_init__9daPy_lk_cFi */ +void daPy_lk_c::procTactWait_init(int) { + /* Nonmatching */ +} + +/* 8014E100-8014E9A4 .text procTactWait__9daPy_lk_cFv */ +void daPy_lk_c::procTactWait() { + /* Nonmatching */ +} + +/* 8014E9A4-8014EBA0 .text procTactPlay_init__9daPy_lk_cFlii */ +void daPy_lk_c::procTactPlay_init(long, int, int) { + /* Nonmatching */ +} + +/* 8014EBA0-8014EFD4 .text procTactPlay__9daPy_lk_cFv */ +void daPy_lk_c::procTactPlay() { + /* Nonmatching */ +} + +/* 8014EFD4-8014F210 .text procTactPlayEnd_init__9daPy_lk_cFi */ +void daPy_lk_c::procTactPlayEnd_init(int) { + /* Nonmatching */ +} + +/* 8014F210-8014F4DC .text procTactPlayEnd__9daPy_lk_cFv */ +void daPy_lk_c::procTactPlayEnd() { + /* Nonmatching */ +} + +/* 8014F4DC-8014F690 .text procTactPlayOriginal_init__9daPy_lk_cFv */ +void daPy_lk_c::procTactPlayOriginal_init() { + /* Nonmatching */ +} + +/* 8014F690-8014F8A0 .text procTactPlayOriginal__9daPy_lk_cFv */ +void daPy_lk_c::procTactPlayOriginal() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_vomit.inc b/src/d/actor/d_a_player_vomit.inc new file mode 100644 index 000000000..28265faeb --- /dev/null +++ b/src/d/actor/d_a_player_vomit.inc @@ -0,0 +1,58 @@ +/** + * d_a_player_vomit.inc + * + * Code relating to being launched in the air (like from a Boko Bulb). + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8014F8A0-8014F994 .text checkJumpFlower__9daPy_lk_cFv */ +void daPy_lk_c::checkJumpFlower() { + /* Nonmatching */ +} + +/* 8014F994-8014FA88 .text procVomitReady_init__9daPy_lk_cFsf */ +void daPy_lk_c::procVomitReady_init(short, float) { + /* Nonmatching */ +} + +/* 8014FA88-8014FB64 .text procVomitReady__9daPy_lk_cFv */ +void daPy_lk_c::procVomitReady() { + /* Nonmatching */ +} + +/* 8014FB64-8014FC20 .text procVomitWait_init__9daPy_lk_cFv */ +void daPy_lk_c::procVomitWait_init() { + /* Nonmatching */ +} + +/* 8014FC20-8014FD8C .text procVomitWait__9daPy_lk_cFv */ +void daPy_lk_c::procVomitWait() { + /* Nonmatching */ +} + +/* 8014FD8C-8014FF0C .text procVomitJump_init__9daPy_lk_cFi */ +void daPy_lk_c::procVomitJump_init(int) { + /* Nonmatching */ +} + +/* 8014FF0C-801500E4 .text procVomitJump__9daPy_lk_cFv */ +void daPy_lk_c::procVomitJump() { + /* Nonmatching */ +} + +/* 801500E4-80150164 .text procVomitLand_init__9daPy_lk_cFv */ +void daPy_lk_c::procVomitLand_init() { + /* Nonmatching */ +} + +/* 80150164-8015023C .text procVomitLand__9daPy_lk_cFv */ +void daPy_lk_c::procVomitLand() { + /* Nonmatching */ +} \ No newline at end of file diff --git a/src/d/actor/d_a_player_weapon.inc b/src/d/actor/d_a_player_weapon.inc new file mode 100644 index 000000000..b46bba1d0 --- /dev/null +++ b/src/d/actor/d_a_player_weapon.inc @@ -0,0 +1,78 @@ +/** + * d_a_player_weapon.inc + * + * Code relating to using enemy weapons. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 80153554-801535D8 .text setEnemyWeaponAtParam__9daPy_lk_cFi */ +void daPy_lk_c::setEnemyWeaponAtParam(int) { + /* Nonmatching */ +} + +/* 801535D8-8015372C .text procWeaponNormalSwing_init__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponNormalSwing_init() { + /* Nonmatching */ +} + +/* 8015372C-801539C8 .text procWeaponNormalSwing__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponNormalSwing() { + /* Nonmatching */ +} + +/* 801539C8-80153A68 .text procWeaponSideSwing_init__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponSideSwing_init() { + /* Nonmatching */ +} + +/* 80153A68-80153C30 .text procWeaponSideSwing__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponSideSwing() { + /* Nonmatching */ +} + +/* 80153C30-80153D1C .text procWeaponFrontSwingReady_init__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponFrontSwingReady_init() { + /* Nonmatching */ +} + +/* 80153D1C-80153DBC .text procWeaponFrontSwingReady__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponFrontSwingReady() { + /* Nonmatching */ +} + +/* 80153DBC-80153ED8 .text procWeaponFrontSwing_init__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponFrontSwing_init() { + /* Nonmatching */ +} + +/* 80153ED8-80153FA0 .text procWeaponFrontSwing__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponFrontSwing() { + /* Nonmatching */ +} + +/* 80153FA0-80154014 .text procWeaponFrontSwingEnd_init__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponFrontSwingEnd_init() { + /* Nonmatching */ +} + +/* 80154014-801540B4 .text procWeaponFrontSwingEnd__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponFrontSwingEnd() { + /* Nonmatching */ +} + +/* 801540B4-8015411C .text procWeaponThrow_init__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponThrow_init() { + /* Nonmatching */ +} + +/* 8015411C-80154334 .text procWeaponThrow__9daPy_lk_cFv */ +void daPy_lk_c::procWeaponThrow() { + /* Nonmatching */ +} diff --git a/src/d/actor/d_a_player_whide.inc b/src/d/actor/d_a_player_whide.inc new file mode 100644 index 000000000..c800dcf2b --- /dev/null +++ b/src/d/actor/d_a_player_whide.inc @@ -0,0 +1,93 @@ +/** + * d_a_player_whide.inc + * + * Code relating to "wall hiding" (sidling). + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is not known, but a best guess was taken + * based on the original names of the functions it contains. +*/ + +#include "d/actor/d_a_player_link.h" + +/* 8013707C-801371E0 .text setBlendWHideMoveAnime__9daPy_lk_cFf */ +void daPy_lk_c::setBlendWHideMoveAnime(float) { + /* Nonmatching */ +} + +/* 801371E0-80137608 .text getWHideModePolygon__9daPy_lk_cFP4cXyzP4cXyzP4cXyzi */ +void daPy_lk_c::getWHideModePolygon(cXyz*, cXyz*, cXyz*, int) { + /* Nonmatching */ +} + +/* 80137608-80137640 .text getWHideBasePos__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::getWHideBasePos(cXyz*) { + /* Nonmatching */ +} + +/* 80137640-8013769C .text getWHideNextPos__9daPy_lk_cFP4cXyzP4cXyz */ +void daPy_lk_c::getWHideNextPos(cXyz*, cXyz*) { + /* Nonmatching */ +} + +/* 8013769C-80137754 .text checkWHideBackWall__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::checkWHideBackWall(cXyz*) { + /* Nonmatching */ +} + +/* 80137754-80137828 .text checkWHideFrontFloor__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::checkWHideFrontFloor(cXyz*) { + /* Nonmatching */ +} + +/* 80137828-80137914 .text checkWHideModeChange__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::checkWHideModeChange(cXyz*) { + /* Nonmatching */ +} + +/* 80137914-80137A00 .text changeWHideEndProc__9daPy_lk_cFP4cXyz */ +void daPy_lk_c::changeWHideEndProc(cXyz*) { + /* Nonmatching */ +} + +/* 80137A00-80137BD8 .text procWHideReady_init__9daPy_lk_cFP8cM3dGPlaP4cXyz */ +void daPy_lk_c::procWHideReady_init(cM3dGPla*, cXyz*) { + /* Nonmatching */ +} + +/* 80137BD8-80137CD0 .text procWHideReady__9daPy_lk_cFv */ +void daPy_lk_c::procWHideReady() { + /* Nonmatching */ +} + +/* 80137CD0-80137DF0 .text procWHideWait_init__9daPy_lk_cFv */ +void daPy_lk_c::procWHideWait_init() { + /* Nonmatching */ +} + +/* 80137DF0-80138074 .text procWHideWait__9daPy_lk_cFv */ +void daPy_lk_c::procWHideWait() { + /* Nonmatching */ +} + +/* 80138074-801380F0 .text procWHideMove_init__9daPy_lk_cFv */ +void daPy_lk_c::procWHideMove_init() { + /* Nonmatching */ +} + +/* 801380F0-8013852C .text procWHideMove__9daPy_lk_cFv */ +void daPy_lk_c::procWHideMove() { + /* Nonmatching */ +} + +/* 8013852C-801385EC .text procWHidePeep_init__9daPy_lk_cFv */ +void daPy_lk_c::procWHidePeep_init() { + /* Nonmatching */ +} + +/* 801385EC-801387A4 .text procWHidePeep__9daPy_lk_cFv */ +void daPy_lk_c::procWHidePeep() { + /* Nonmatching */ +} From 65a63eea6929de9c459859a29bb8c7106f15e214 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Sun, 17 Sep 2023 14:44:16 -0400 Subject: [PATCH 03/89] Fill out fopNpc_npc_c (#48) * Fill out fopNpc_npc_c Start filling out the members * More Matches Still should/will get more cleanup --- .../JSystem/J3DGraphAnimator/J3DJointTree.h | 12 +- include/SSystem/SComponent/c_lib.h | 4 +- include/d/actor/d_a_player.h | 6 +- include/d/d_com_inf_game.h | 78 +- include/d/d_event.h | 5 +- include/d/d_event_manager.h | 17 +- include/d/d_npc.h | 186 ++- include/d/d_path.h | 2 +- include/d/d_save.h | 11 +- include/f_op/f_op_actor.h | 15 +- include/f_op/f_op_actor_mng.h | 3 +- src/d/d_npc.cpp | 1251 ++++++++++++++--- 12 files changed, 1392 insertions(+), 198 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index 5c6edb033..9d5d3c3d3 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -39,7 +39,6 @@ public: u8 getWEvlpMixMtxNum(u16 idx) const { return mWEvlpMixMtxNum[idx]; } u16 * getWEvlpMixIndex() const { return mWEvlpMixIndex; } f32 * getWEvlpMixWeight() const { return mWEvlpMixWeight; } - u16 * getWEvlpImportantMtxIndex() const { return mWEvlpImportantMtxIdx; } u16 getDrawFullWgtMtxNum() const { return mDrawMtxData.mDrawFullWgtMtxNum; } u16 getJointNum() const { return mJointNum; } u16 getDrawMtxNum() const { return mDrawMtxData.mEntryNum; } @@ -61,12 +60,11 @@ private: /* 0x14 */ J3DMtxCalc* mBasicMtxCalc; /* 0x18 */ u16 mJointNum; /* 0x1C */ J3DJoint** mJointNodePointer; - /* 0x1E */ u16 mWEvlpMtxNum; - /* 0x20 */ u8* mWEvlpMixMtxNum; - /* 0x24 */ u16* mWEvlpMixIndex; - /* 0x28 */ f32* mWEvlpMixWeight; - /* 0x2C */ Mtx* mInvJointMtx; - /* 0x30 */ u16* mWEvlpImportantMtxIdx; + /* 0x20 */ u16 mWEvlpMtxNum; + /* 0x24 */ u8* mWEvlpMixMtxNum; + /* 0x28 */ u16* mWEvlpMixIndex; + /* 0x2C */ f32* mWEvlpMixWeight; + /* 0x30 */ Mtx* mInvJointMtx; /* 0x34 */ J3DDrawMtxData mDrawMtxData; /* 0x40 */ u32 field_0x40; /* 0x44 */ JUTNameTab* mJointName; diff --git a/include/SSystem/SComponent/c_lib.h b/include/SSystem/SComponent/c_lib.h index fc17d8bd7..883d092bc 100644 --- a/include/SSystem/SComponent/c_lib.h +++ b/include/SSystem/SComponent/c_lib.h @@ -28,8 +28,8 @@ int cLib_chasePos(cXyz* o_value, cXyz const& target, f32 step); int cLib_chasePosXZ(cXyz* o_value, cXyz const& target, f32 step); int cLib_chaseAngleS(s16* o_value, s16 target, s16 step); -s16 cLib_targetAngleY(const Vec* lhs, const Vec* rhs); -s16 cLib_targetAngleY(const Vec& lhs, const Vec& rhs); +s16 cLib_targetAngleY(cXyz* lhs, cXyz* rhs); +s16 cLib_targetAngleY(const cXyz& lhs, const cXyz& rhs); s16 cLib_targetAngleX(const cXyz*, const cXyz*); void cLib_offsetPos(cXyz* pDest, cXyz* pSrc, s16 angle, cXyz* vec); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 118af2b85..9ee182448 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -38,6 +38,8 @@ public: void setDemoMode(u32 mode) { mDemoMode = mode; } u32 getDemoMode() const { return mDemoMode; } int getParam1() const { return mParam1; } + void setTimer(s16 time) { mTimer = time; } + void decTimer() { mTimer--; } void setOriginalDemoType() { setDemoType(3); } void setSpecialDemoType() { setDemoType(5); } void setSystemDemoType() { setDemoType(2); } @@ -104,7 +106,7 @@ public: virtual void setTactZev(unsigned int, int, char*); virtual void onDekuSpReturnFlg(u8); virtual void checkComboCutTurn() const; - virtual void getBaseAnimeFrameRate(); + virtual f32 getBaseAnimeFrameRate(); virtual void getBaseAnimeFrame(); virtual void getItemID() const; virtual void getThrowBoomerangID() const; @@ -130,7 +132,7 @@ public: void getLeftHandPos() const; void getRopeJumpLand() const; void checkRopeForceEnd() const; - void getHeadTopPos() const; + cXyz getHeadTopPos() const; void changePlayer(fopAc_ac_c*); void objWindHitCheck(dCcD_Cyl*); void setDoButtonQuake(); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index fd9d354b1..a161f2190 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -366,10 +366,22 @@ inline void dComIfGs_init() { g_dComIfG_gameInfo.save.init(); } +inline dSv_player_bag_item_c* dComIfGs_getpBagItem() { + return g_dComIfG_gameInfo.save.getPlayer().getpBagItem(); +} + +inline BOOL dComIfGs_checkReserveItem(u8 i_itemNo) { + return dComIfGs_getpBagItem()->checkReserveItem(i_itemNo); +} + inline u8 dComIfGs_getSelectEquip(int param_0) { return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getSelectEquip(param_0); } +inline u8 dComIfGs_getWalletSize() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getWalletSize(); +} + inline u8 dComIfGs_getItem(int param_0) { return g_dComIfG_gameInfo.save.getPlayer().getItem().getItem(param_0); } @@ -386,6 +398,10 @@ inline u8 dComIfGs_getReserve(int i_idx) { return g_dComIfG_gameInfo.save.getPlayer().getBagItem().getReserve(i_idx); } +inline BOOL dComIfGs_isGetItemReserve(int i_No) { + return g_dComIfG_gameInfo.save.getPlayer().getGetBagItem().isReserve(i_No); +} + inline BOOL dComIfGs_isGetCollectMap(int i_itemNo) { return g_dComIfG_gameInfo.save.getPlayer().getMap().isGetMap(i_itemNo - 1); } @@ -422,6 +438,10 @@ inline BOOL dComIfGs_isEventBit(u16 id) { return g_dComIfG_gameInfo.save.getEvent().isEventBit(id); } +inline void dComIfGs_onEventBit(u16 id) { + g_dComIfG_gameInfo.save.getEvent().onEventBit(id); +} + inline void dComIfGs_setRestartRoomParam(u32 i_param) { g_dComIfG_gameInfo.save.getRestart().setRoomParam(i_param); } @@ -454,6 +474,8 @@ inline void dComIfGs_onSaveTbox(int i_stageNo, int i_no) { g_dComIfG_gameInfo.save.getSavedata().getSave(i_stageNo).getBit().onTbox(i_no); } +BOOL dComIfGs_isStageBossEnemy(int i_stageNo); + inline BOOL dComIfGs_isStageBossEnemy() { return g_dComIfG_gameInfo.save.getMemory().getBit().isStageBossEnemy(); } @@ -716,6 +738,14 @@ inline BOOL dComIfGp_checkCameraAttentionStatus(int idx, u32 flag) { /** * === EVENT ===*/ +inline u8 dComIfGp_event_getTalkXYBtn(void) { + return g_dComIfG_gameInfo.play.getEvent().getTalkXYBtn(); +} + +inline bool dComIfGp_event_chkTalkXY(void) { + return g_dComIfG_gameInfo.play.getEvent().chkTalkXY(); +} + inline void dComIfGp_event_onEventFlag(s16 flag) { return g_dComIfG_gameInfo.play.getEvent().onEventFlag(flag); } @@ -724,6 +754,10 @@ inline void dComIfGp_event_offEventFlag(s16 flag) { return g_dComIfG_gameInfo.play.getEvent().offEventFlag(flag); } +inline void dComIfGp_event_setItemPartnerId(u32 id) { + return g_dComIfG_gameInfo.play.getEvent().setPtI_Id(id); +} + inline dEvent_manager_c& dComIfGp_getEventManager() { return g_dComIfG_gameInfo.play.getEvtManager(); } @@ -732,8 +766,48 @@ inline u32 dComIfGp_evmng_getEventIdx(char* pName, u8 evNo) { return dComIfGp_getEventManager().getEventIdx(pName, evNo); } +inline u32 dComIfGp_evmng_getMyStaffId(char* pName, fopAc_ac_c* pActor, s32 param_3) { + return dComIfGp_getEventManager().getMyStaffId(pName, pActor, param_3); +} + +inline u32 dComIfGp_evmng_getMyActIdx(int staffIdx, const char* const* pActions, int actionCount, int force, int param_5) { + return dComIfGp_getEventManager().getMyActIdx(staffIdx, pActions, actionCount, force, param_5); +} + +inline f32* dComIfGp_evmng_getMyFloatP(int staffIdx, const char* name) { + return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 0)); //type 0 is float +} + +inline Vec* dComIfGp_evmng_getMyVec3dP(int staffIdx, const char* name) { + return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 1)); //type 1 is vec3f +} + +inline u32* dComIfGp_evmng_getMyIntegerP(int staffIdx, const char* name) { + return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 3)); //type 3 is int +} + +inline char* dComIfGp_evmng_getMyStringP(int staffIdx, const char* name) { + return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 4)); //type 4 is string +} + inline BOOL dComIfGp_evmng_endCheck(s16 eventID) { - return g_dComIfG_gameInfo.play.getEvtManager().endCheck(eventID); + return dComIfGp_getEventManager().endCheck(eventID); +} + +inline BOOL dComIfGp_evmng_ChkPresentEnd() { + return dComIfGp_getEventManager().ChkPresentEnd(); +} + +inline void dComIfGp_evmng_CancelPresent() { + return dComIfGp_getEventManager().CancelPresent(); +} + +inline BOOL dComIfGp_evmng_getIsAddvance(s32 staffIdx) { + return dComIfGp_getEventManager().getIsAddvance(staffIdx); +} + +inline void dComIfGp_evmng_cutEnd(s32 staffIdx) { + return dComIfGp_getEventManager().cutEnd(staffIdx); } inline void dComIfGp_evmng_execute() { @@ -759,6 +833,8 @@ inline int dComIfGd_setRealShadow2(u32 id, s8 param_2, J3DModel* pModel, cXyz* p pTevStr); } +int dComIfGd_setSimpleShadow2(cXyz* i_pos, f32 param_1, f32 param_2, cBgS_PolyInfo& i_floorPoly, s16 i_angle, f32 param_5, GXTexObj* i_tex); + /** * === RESOURCE === */ diff --git a/include/d/d_event.h b/include/d/d_event.h index 2aa81d18d..457610ad9 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -58,6 +58,9 @@ public: void getTactFreeMStick(int); void getTactFreeCStick(int); void giveItemCut(u8); + u8 getTalkXYBtn() { return mTalkButton; } + bool chkTalkXY() { return mTalkButton == 1 || mTalkButton == 2 || mTalkButton == 3; } + void setPtI_Id(u32 id) { mPtItem = id; } inline u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } inline void onEventFlag(u16 flag) { mEventFlag |= flag; } @@ -71,7 +74,7 @@ public: /* 0xC4 */ u32 mPt1; /* 0xC8 */ u32 mPt2; /* 0xCC */ int mPtTalk; - /* 0xD0 */ int mPtItem; + /* 0xD0 */ u32 mPtItem; /* 0xD4 */ u8 mCurStaffId; /* 0xD5 */ u8 field_0xD5[0xD6 - 0xD5]; /* 0xD6 */ s16 field_0xd6; diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index c1c2df190..e58ebc6a2 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -3,6 +3,7 @@ #include "SSystem/SComponent/c_xyz.h" #include "d/d_event_data.h" +#include "MSL_C/string.h" class fopAc_ac_c; @@ -39,14 +40,14 @@ public: void startCheck(s16); void startCheckOld(const char*); BOOL endCheck(s16); - void endCheckOld(const char*); - void getMyStaffId(const char*, fopAc_ac_c*, int); - void getIsAddvance(int); - void getMyActIdx(int, const char* const*, int, int, int); + BOOL endCheckOld(const char*); + int getMyStaffId(const char*, fopAc_ac_c*, int); + BOOL getIsAddvance(int); + int getMyActIdx(int, const char* const*, int, int, int); void getMyActName(int); void getMyNowCutName(int); void getMyDataP(int, const char*, int); - void getMySubstanceP(int, const char*, int); + void* getMySubstanceP(int, const char*, int); void getMySubstanceNum(int, const char*); void cutEnd(int); void getEventPrio(s16); @@ -60,7 +61,7 @@ public: void specialCast(const char*, int); void setPrmStaff(void*, int); void getToolId(u8, int); - void ChkPresentEnd(); + BOOL ChkPresentEnd(); void CancelPresent(); void checkStartDemo(); @@ -71,4 +72,8 @@ public: /* 0x03C */ dEvDtFlag_c mFlag; }; +inline int dEvmng_strcmp(const char* s1, const char* s2) { + return strcmp(s1, s2); +} + #endif /* D_EVENT_D_EVENT_MANAGER_H */ \ No newline at end of file diff --git a/include/d/d_npc.h b/include/d/d_npc.h index 80a876d4b..9bc4f684a 100644 --- a/include/d/d_npc.h +++ b/include/d/d_npc.h @@ -1,6 +1,155 @@ #ifndef D_NPC_H #define D_NPC_H +#include "f_op/f_op_actor.h" +#include "f_op/f_op_msg.h" +#include "d/d_bg_s_acch.h" +#include "d/d_cc_d.h" +#include "d/d_path.h" +#include "m_Do/m_Do_ext.h" + +class fopNpc_npc_c; + +class dNpc_JntCtrl_c { + /* 0x00 */ s16 mHeadUpDownRot; + /* 0x02 */ s16 mHeadLeftRightRot; + /* 0x04 */ s16 mBackboneUpDownRot; + /* 0x06 */ s16 mBackboneLeftRightRot; + /* 0x08 */ u8 mHeadJntNum; + /* 0x09 */ u8 mBackboneJntNum; + /* 0x0A */ bool field_0x0A; + /* 0x0B */ u8 field_0x0B; + /* 0x0C */ u8 field_0x0C; + /* 0x0D */ u8 field_0x0D; + /* 0x0E */ s16 field_0x0E; + /* 0x10 */ s16 mMinHeadRot; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ s16 mMinSpineRot; + /* 0x16 */ s16 field_0x16; + /* 0x18 */ s16 mMaxHeadRot; + /* 0x1A */ s16 field_0x1A; + /* 0x1C */ s16 mMaxSpineRot; + /* 0x1E */ s16 field_0x1E; + /* 0x20 */ s16 field_0x20; + /* 0x22 */ s16 field_0x22; + /* 0x24 */ s16 field_0x24; + /* 0x26 */ u8 pad_0x26[0x32 - 0x26]; + /* 0x32 */ s16 field_0x32; + +public: + bool angCalcS(s16*, s16, s16, s16); + void limitter(s16*, s16, s16); + void follow(s16*, s16, s16, int); + void move(s16, int); + void lookAtTarget(s16*, cXyz*, cXyz, s16, s16, bool); + void setParam(s16, s16, s16, s16, s16, s16, s16, s16, s16); + + s16 chkLim(s16, int, int); + void turn_fromBackbone2Head(s16, s16*, s16*, bool); + void turn_fromHead2Backbone(s16, s16*, s16*); + s16 follow_current(s16*, s16); + void lookAtTarget_2(s16*, cXyz*, cXyz, s16, s16, bool); +}; + +class dNpc_EventCut_c { + /* 0x00 */ char* mpEvtStaffName; + /* 0x04 */ s32 mEvtStaffId; + /* 0x08 */ fopAc_ac_c* mpActor; + /* 0x0C */ fopNpc_npc_c* mpTalkActor; + /* 0x10 */ s32 mCurActIdx; + /* 0x14 */ u32 field_0x14; + /* 0x18 */ int mTimer; + /* 0x1C */ char* mpActorName; + /* 0x20 */ u32 field_0x20; + /* 0x24 */ s32 mSetID; + /* 0x28 */ cXyz mOffsetPos; + /* 0x34 */ cXyz mTargetActorPos; + /* 0x40 */ fopAc_ac_c* mpTargetActor; + /* 0x44 */ s16 field_0x44; + /* 0x48 */ f32 mSpeed; + /* 0x4C */ f32 pDelDistance; + /* 0x50 */ s16 mAddAngle; + /* 0x52 */ u8 field_0x52; + /* 0x54 */ cXyz mPos; + /* 0x60 */ u8 mbAttention; + /* 0x61 */ u8 mbNoTurn; + /* 0x62 */ s16 mTurnSpeed; + /* 0x64 */ u32 mTurnType; + /* 0x68 */ u8* field_0x68; + +public: + void setActorInfo(char*, fopAc_ac_c*); + void setActorInfo2(char*, fopNpc_npc_c*); + + bool cutProc(); + void cutWaitStart(); + void cutWaitProc(); + void cutTurnToActorStart(); + void cutTurnToActorProc(); + void cutMoveToActorStart(); + void cutMoveToActorProc(); + void cutTurnToPosStart(); + void cutTurnToPosProc(); + void cutMoveToPosStart(); + void cutMoveToPosProc(); + void cutTalkMsgStart(); + void cutContinueTalkStart(); + void cutTalkMsgProc(); + + static fopAc_ac_c* findActorCallBack(fopAc_ac_c*, void*); +}; + +class dNpc_PathRun_c { +public: + bool setInfDrct(dPath* pPath); + bool setInf(u8 pathIdx, s8 roomNo, u8 forwards); + dPath* nextPath(s8 roomNo); + cXyz getPoint(u8 pointIdx); + void chkPointPass(cXyz, bool); + bool incIdx(); + bool incIdxLoop(); + bool incIdxAuto(); + bool decIdx(); + bool decIdxLoop(); + bool decIdxAuto(); + bool nextIdx(); + bool nextIdxAuto(); + s32 absIdx(u8, u8); + u8 maxPoint(); + u8 pointArg(u8 idx); + bool setNearPathIndx(cXyz*, f32); + f32 setNearPathIndxMk(cXyz*); + bool setNearPathIndxMk2(cXyz*, u8, u8); + bool chkInside(cXyz*); + + /* 0x00 */ dPath* mPath; + /* 0x04 */ u8 field_0x04; + /* 0x05 */ u8 mCurrPointIndex; + /* 0x06 */ u8 mbGoingForwards; + /* 0x07 */ u8 field_0x07; +}; + +class dNpc_HeadAnm_c { +public: + void swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4); + void swing_vertical(); + void swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4); + void swing_horizone(); + void move(); + + typedef void (dNpc_HeadAnm_c::*swing_func)(void); + + /* 0x00 */ s16 field_0x00; + /* 0x02 */ s16 field_0x02; + /* 0x04 */ u32 field_0x04; + /* 0x08 */ swing_func mFunc; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ s16 field_0x1C; + /* 0x1E */ s16 field_0x1E; + /* 0x20 */ s16 field_0x20; +}; + enum dNpc_MessageStatus_e { dNpcMsgStts_MSG_PREPARING_e = 0x01, dNpcMsgStts_BOX_OPENING_e = 0x02, @@ -9,10 +158,43 @@ enum dNpc_MessageStatus_e { dNpcMsgStts_MSG_CONTINUES_e = 0x0F, dNpcMsgStts_MSG_ENDS_e = 0x10, - + dNpcMsgStts_BOX_CLOSING_e = 0x11, dNpcMsgStts_BOX_CLOSED_e = 0x12, dNpcMsgStts_MSG_DESTROYED_e = 0x13, }; -#endif // D_NPC_H +class fopNpc_npc_c : public fopAc_ac_c { +public: + /* 0x290 */ dNpc_JntCtrl_c mJntCtrl; + /* 0x2C4 */ dNpc_EventCut_c mEventCtrl; + /* 0x330 */ mDoExt_McaMorf* mpMcaMorf; + /* 0x334 */ dBgS_ObjAcch mObjAcch; + /* 0x4F8 */ dBgS_AcchCir mAcchCir; + /* 0x538 */ dCcD_Stts mStts; + /* 0x574 */ dCcD_Cyl mCyl; + /* 0x6A4 */ u32 mCurrMsgID; + /* 0x6A8 */ u32 mEndMsgID; + /* 0x6AC */ s32 mCurrMsgBsPcId; + /* 0x6B0 */ msg_class* mpCurrMsg; + /* 0x6B4 */ u8 pad_0x6B4[0x6C0 - 0x6B4]; + + virtual u32 next_msgStatus(u32*) { return 0x10; } + virtual u32 getMsg() { return 1; } + virtual void anmAtr(u16) {} + + void setCollision(float radius, float height); + u16 talk(int); +}; + +bool dNpc_setAnmIDRes(mDoExt_McaMorf* pMorf, int loopMode, float morf, float speed, int animResId, int soundResId, const char* arcName); +bool dNpc_setAnmFNDirect(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, char* animFilename, char* soundFilename, const char* arcName); +bool dNpc_setAnm(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int animFileidx, int soundFileIdx, const char* arcName); +void dNpc_setShadowModel(J3DModel*, J3DModelData*, J3DModel*); +cXyz dNpc_playerEyePos(f32); +void dNpc_calc_DisXZ_AngY(cXyz, cXyz, float*, short*); +bool dNpc_chkArasoi(); +BOOL dNpc_chkLetterPassed(); +bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int animFileidx, int soundFileIdx, const char* arcName); + +#endif /* D_NPC_H */ diff --git a/include/d/d_path.h b/include/d/d_path.h index 7e8632f75..459609fd6 100644 --- a/include/d/d_path.h +++ b/include/d/d_path.h @@ -24,7 +24,7 @@ struct dPath { dPath__Point* dPath_GetPnt(dPath*, int); dPath* dPath_GetRoomPath(int, int); -void dPath_GetNextRoomPath(dPath*, int); +dPath* dPath_GetNextRoomPath(dPath*, int); void dPath_GetPolyRoomPathVec(cBgS_PolyInfo&, cXyz*, int*); #endif /* D_PATH_H */ diff --git a/include/d/d_save.h b/include/d/d_save.h index 8d4382f75..274b3be96 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -10,6 +10,7 @@ public: u8 getSelectItemIndex(int i_no) const { return mSelectItem[i_no]; } u8 getSelectEquip(int i_no) const { return mSelectEquip[i_no]; } + u8 getWalletSize() const { return mWalletSize; } /* 0x00 */ u16 mMaxLife; /* 0x02 */ u16 mLife; @@ -141,8 +142,8 @@ public: /* 8005A7C0 */ void setReserveItemEmpty(u8); /* 8005A79C */ void setReserveItemEmpty(); /* 8005A7E4 */ void setReserveItem(u8); - /* 8005A854 */ u8 checkReserveItemEmpty(); - /* 8005A878 */ u8 checkReserveItem(u8); + /* 8005A854 */ bool checkReserveItemEmpty(); + /* 8005A878 */ bool checkReserveItem(u8); u8 getBeast(int i_idx) const { return mBeast[i_idx]; } u8 getBait(int i_idx) const { return mBait[i_idx]; } @@ -159,11 +160,11 @@ class dSv_player_get_bag_item_c { public: /* 8005A8B8 */ void init(); /* 8005A8CC */ void onBeast(u8); - /* 8005A960 */ bool isBeast(u8); + /* 8005A960 */ BOOL isBeast(u8); /* 8005A9F8 */ void onBait(u8); - /* 8005AA8C */ bool isBait(u8); + /* 8005AA8C */ BOOL isBait(u8); /* 8005AB24 */ void onReserve(u8); - /* 8005ABB4 */ bool isReserve(u8); + /* 8005ABB4 */ BOOL isReserve(u8); /* 0x0 */ u32 mReserveFlags; /* 0x4 */ u8 mBeastFlags; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index d45434424..2325626a1 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -113,11 +113,6 @@ public: void setEventName(char*); char* getEventName(); void beforeProc(); - void onCondition(u16); - void offCondition(u16); - bool checkCommandCatch(); - BOOL checkCommandDoor(); - BOOL checkCommandDemoAccrpt() { return mCommand == 2; } void setCommand(u16 command) { mCommand = command; } void setMapToolId(u8 id) { mMapToolId = id; } @@ -131,14 +126,14 @@ public: void setIdx(u8 i_idx) { mIndex = i_idx; } char* getArchiveName() { return mArchiveName; } BOOL chkCondition(u16 condition) { return (mCondition & condition) == condition; } - void i_onCondition(u16 cond) { mCondition |= cond; } - void i_offCondition(u16 cond) { mCondition &= ~cond; } + void onCondition(u16 cond) { mCondition |= cond; } + void offCondition(u16 cond) { mCondition &= ~cond; } bool checkCommandTalk() { return mCommand == 1; } bool checkCommandItem() { return mCommand == 4; } - BOOL i_checkCommandDoor() { return mCommand == 3; } - bool i_checkCommandDemoAccrpt() { return mCommand == 2; } - bool i_checkCommandCatch() { return mCommand == 6; } + BOOL checkCommandDoor() { return mCommand == 3; } + bool checkCommandDemoAccrpt() { return mCommand == 2; } + bool checkCommandCatch() { return mCommand == 6; } void suspendProc(void* actor) { if (field_0x10 != NULL) { diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index afe880c70..f0905f4e7 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -416,11 +416,12 @@ s32 fopAcM_cullingCheck(fopAc_ac_c*); void* event_second_actor(u16); s32 fopAcM_orderTalkEvent(fopAc_ac_c*, fopAc_ac_c*, u16, u16); s32 fopAcM_orderTalkItemBtnEvent(u16, fopAc_ac_c*, fopAc_ac_c*, u16, u16); -s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor, u16 i_priority, u16 i_flag); +s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor); s32 fopAcM_orderDoorEvent(fopAc_ac_c*, fopAc_ac_c*, u16, u16); s32 fopAcM_orderCatchEvent(fopAc_ac_c*, fopAc_ac_c*, u16, u16); s32 fopAcM_orderOtherEvent(fopAc_ac_c*, char*, u16, u16, u16); s32 fopAcM_orderOtherEvent(fopAc_ac_c*, fopAc_ac_c*, char*, u16, u16, u16); +s32 fopAcM_orderOtherEvent2(fopAc_ac_c*, char*, u16, u16); s32 fopAcM_orderChangeEventId(fopAc_ac_c*, s16, u16, u16); s32 fopAcM_orderOtherEventId(fopAc_ac_c* actor, s16 eventID, u8 mapToolID, u16 param_3, u16 priority, u16 flag); diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 01be52a79..9883608d9 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -3,17 +3,36 @@ // Translation Unit: d_npc.cpp // -#include "d_npc.h" -#include "dolphin/types.h" +#include "d/d_npc.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_msg_mng.h" +#include "SSystem/SComponent/c_math.h" +#include "JSystem/JGeometry.h" +#include "m_Do/m_Do_mtx.h" -/* 8021A7B4-8021A858 .text angCalcS__14dNpc_JntCtrl_cFPssss */ -void dNpc_JntCtrl_c::angCalcS(short*, short, short, short) { - /* Nonmatching */ +bool dNpc_JntCtrl_c::angCalcS(s16* out, s16 targetY, s16 speed, s16 maxVel) { + s16 origY = *out; + s16 diff = origY - targetY; + cLib_addCalcAngleS(&diff, 0, speed, maxVel, 0x60); + if(abs(diff) > speed) { + *out += (diff - (origY - targetY)); + } + else { + *out = targetY; + } + + return (s16)targetY - *out == 0; } -/* 8021A858-8021A884 .text limitter__14dNpc_JntCtrl_cFPsss */ -void dNpc_JntCtrl_c::limitter(short*, short, short) { - /* Nonmatching */ +void dNpc_JntCtrl_c::limitter(s16* targetDiff, s16 maxDiff, s16 minDiff) { + if(*targetDiff > maxDiff) { + *targetDiff = maxDiff; + } + if(*targetDiff < minDiff) { + *targetDiff = minDiff; + } } /* 8021A884-8021A97C .text follow__14dNpc_JntCtrl_cFPsssi */ @@ -31,29 +50,61 @@ void dNpc_JntCtrl_c::lookAtTarget(short*, cXyz*, cXyz, short, short, bool) { /* Nonmatching */ } -/* 8021AC6C-8021ACA8 .text setParam__14dNpc_JntCtrl_cFsssssssss */ -void dNpc_JntCtrl_c::setParam(short, short, short, short, short, short, short, short, short) { - /* Nonmatching */ +void dNpc_JntCtrl_c::setParam(s16 param_1, s16 maxSpineRot, s16 param_3, s16 minSpineRot, s16 param_5, s16 maxHeadRot, s16 param_7, s16 minHeadRot, s16 param_9) { + field_0x1A = param_1; + mMaxSpineRot = maxSpineRot; + field_0x12 = param_3; + mMinSpineRot = minSpineRot; + field_0x16 = param_5; + mMaxHeadRot = maxHeadRot; + field_0x0E = param_7; + mMinHeadRot = minHeadRot; + field_0x22 = param_9; + field_0x24 = param_9; + field_0x1E = param_9; + field_0x20 = param_9; } -/* 8021ACA8-8021ACBC .text setInfDrct__14dNpc_PathRun_cFP5dPath */ -void dNpc_PathRun_c::setInfDrct(dPath*) { - /* Nonmatching */ +bool dNpc_PathRun_c::setInfDrct(dPath* pPath) { + mPath = pPath; + mCurrPointIndex = 0; + + return true; } -/* 8021ACBC-8021AD1C .text setInf__14dNpc_PathRun_cFUcScUc */ -void dNpc_PathRun_c::setInf(unsigned char, signed char, unsigned char) { - /* Nonmatching */ +bool dNpc_PathRun_c::setInf(u8 pathIdx, s8 roomNo, u8 forwards) { + bool setPath = false; + + mPath = 0; + mbGoingForwards = forwards; + if(pathIdx != 0xFF) { + mPath = dPath_GetRoomPath(pathIdx, roomNo); + mCurrPointIndex = 0; + + setPath = true; + } + + return setPath; } -/* 8021AD1C-8021AD58 .text nextPath__14dNpc_PathRun_cFSc */ -void dNpc_PathRun_c::nextPath(signed char) { - /* Nonmatching */ +dPath* dNpc_PathRun_c::nextPath(s8 roomNo) { + dPath* pPath = 0; + + if(mPath != 0) { + pPath = dPath_GetNextRoomPath(mPath, roomNo); + } + + return pPath; } -/* 8021AD58-8021ADD0 .text getPoint__14dNpc_PathRun_cFUc */ -void dNpc_PathRun_c::getPoint(unsigned char) { - /* Nonmatching */ +cXyz dNpc_PathRun_c::getPoint(u8 pointIdx) { + cXyz point(0.0f, 0.0f, 0.0f); + + if(mPath != 0 && pointIdx < mPath->mNum) { + point = mPath->mpPnt[pointIdx].mPos; + } + + return point; } /* 8021ADD0-8021AFA8 .text chkPointPass__14dNpc_PathRun_cF4cXyzb */ @@ -61,149 +112,476 @@ void dNpc_PathRun_c::chkPointPass(cXyz, bool) { /* Nonmatching */ } -/* 8021AFA8-8021AFEC .text incIdx__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::incIdx() { - /* Nonmatching */ +bool dNpc_PathRun_c::incIdx() { + bool ret = true; + + if(mPath != 0) { + mCurrPointIndex += 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = mPath->mNum - 1; + ret = false; + } + } + + return ret; } -/* 8021AFEC-8021B030 .text incIdxLoop__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::incIdxLoop() { - /* Nonmatching */ +bool dNpc_PathRun_c::incIdxLoop() { + bool ret = true; + + if(mPath != 0) { + mCurrPointIndex += 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = 0; + ret = false; + } + } + + return ret; } -/* 8021B030-8021B0AC .text incIdxAuto__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::incIdxAuto() { - /* Nonmatching */ +bool dNpc_PathRun_c::incIdxAuto() { + bool hitEnd = true; + + if(mPath != 0) { + if(mPath->mLoops & 1) { + mCurrPointIndex += 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = 0; + } + } + else { + mCurrPointIndex += 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = mPath->mNum - 1; + hitEnd = false; + } + } + } + + return hitEnd; } -/* 8021B0AC-8021B0F0 .text decIdx__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::decIdx() { - /* Nonmatching */ +bool dNpc_PathRun_c::decIdx() { + bool ret = true; + + if(mPath != 0) { + mCurrPointIndex -= 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = 0; + ret = false; + } + } + + return ret; } -/* 8021B0F0-8021B134 .text decIdxLoop__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::decIdxLoop() { - /* Nonmatching */ +bool dNpc_PathRun_c::decIdxLoop() { + bool ret = true; + + if(mPath != 0) { + mCurrPointIndex -= 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = mPath->mNum - 1; + ret = false; + } + } + + return ret; } -/* 8021B134-8021B1B0 .text decIdxAuto__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::decIdxAuto() { - /* Nonmatching */ +bool dNpc_PathRun_c::decIdxAuto() { + bool hitEnd = true; + + if(mPath != 0) { + if(mPath->mLoops & 1) { + mCurrPointIndex -= 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = mPath->mNum - 1; + } + } + else { + mCurrPointIndex -= 1; + if(mCurrPointIndex >= mPath->mNum) { + mCurrPointIndex = 0; + hitEnd = false; + } + } + } + + return hitEnd; } -/* 8021B1B0-8021B224 .text nextIdx__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::nextIdx() { - /* Nonmatching */ +bool dNpc_PathRun_c::nextIdx() { + bool hitEnd; + + if(mbGoingForwards) { + hitEnd = incIdx(); + if(hitEnd == false) { + decIdx(); + } + } + else { + hitEnd = decIdx(); + if(hitEnd == false) { + incIdx(); + } + } + + return hitEnd; } -/* 8021B224-8021B298 .text nextIdxAuto__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::nextIdxAuto() { - /* Nonmatching */ +bool dNpc_PathRun_c::nextIdxAuto() { + bool hitEnd; + + if(mbGoingForwards) { + hitEnd = incIdxAuto(); + if(hitEnd == 0) { + decIdx(); + } + } + else { + hitEnd = decIdxAuto(); + if(hitEnd == 0) { + incIdx(); + } + } + + return hitEnd; } -/* 8021B298-8021B328 .text absIdx__14dNpc_PathRun_cFUcUc */ -void dNpc_PathRun_c::absIdx(unsigned char, unsigned char) { - /* Nonmatching */ +s32 dNpc_PathRun_c::absIdx(u8 startIdx, u8 lastIdx) { + if(mPath == 0) { + return 0; + } + + s32 diff_1 = startIdx - lastIdx; + s32 diff_2 = lastIdx - startIdx; + + if(diff_1 < 0) { + diff_1 += maxPoint(); + } + if(diff_2 < 0) { + diff_2 += maxPoint(); + } + if(diff_1 > diff_2) { + return diff_2; + } + + return diff_1; } -/* 8021B328-8021B348 .text maxPoint__14dNpc_PathRun_cFv */ -void dNpc_PathRun_c::maxPoint() { - /* Nonmatching */ +u8 dNpc_PathRun_c::maxPoint() { + u8 max = 0xFF; + if(mPath != 0) { + max = mPath->mNum; + } + + return max; } -/* 8021B348-8021B384 .text pointArg__14dNpc_PathRun_cFUc */ -void dNpc_PathRun_c::pointArg(unsigned char) { - /* Nonmatching */ +u8 dNpc_PathRun_c::pointArg(u8 idx) { + u8 arg = 0; + if(mPath != 0 && idx < (u8)mPath->mNum) { + arg = mPath->mpPnt[idx].mArg3; + } + + return arg; } -/* 8021B384-8021B514 .text setNearPathIndx__14dNpc_PathRun_cFP4cXyzf */ -void dNpc_PathRun_c::setNearPathIndx(cXyz*, float) { - /* Nonmatching */ +bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, float param_2) { + bool set = false; + if(mPath != 0) { + f32 max_dist = 1000000000.0f; + u8 pointIdx = 0; + for(int i = 0; i < maxPoint(); i++) { + cXyz point = getPoint(i); + cXyz diff = (*param_1 - point); + f32 temp = diff.getMagXZ(); + f32 dist = sqrtf(param_2 * (diff.y * diff.y) + temp); + + if(max_dist > dist) { + max_dist = dist; + pointIdx = i; + } + } + + mCurrPointIndex = pointIdx; + set = true; + } + + return set; } -/* 8021B514-8021B670 .text setNearPathIndxMk__14dNpc_PathRun_cFP4cXyz */ -void dNpc_PathRun_c::setNearPathIndxMk(cXyz*) { - /* Nonmatching */ +f32 dNpc_PathRun_c::setNearPathIndxMk(cXyz* param_1) { + f32 max_dist; + if(mPath != 0) { + max_dist = 1000000000.0f; + u8 pointIdx = 0; + for(int i = 0; i < maxPoint(); i++) { + cXyz point = getPoint(i); + cXyz diff = (*param_1 - point); + f32 temp = diff.getSquareMag(); + f32 dist = sqrtf(temp); + if(max_dist > dist) { + max_dist = dist; + pointIdx = i; + } + } + + mCurrPointIndex = pointIdx; + } + + return max_dist; } -/* 8021B670-8021B818 .text setNearPathIndxMk2__14dNpc_PathRun_cFP4cXyzUcUc */ -void dNpc_PathRun_c::setNearPathIndxMk2(cXyz*, unsigned char, unsigned char) { - /* Nonmatching */ +bool dNpc_PathRun_c::setNearPathIndxMk2(cXyz* param_1, u8 param_2, u8 param_3) { + u8 pointIdx; + bool set = false; + if(mPath != 0) { + f32 max_dist = 1000000000.0f; + pointIdx = param_2; + for(int i = 0; i < maxPoint(); i++) { + cXyz point = getPoint(i); + cXyz diff = (*param_1 - point); + f32 temp = diff.getSquareMag(); + f32 dist = sqrtf(temp); + s32 idx = absIdx(param_2, i); + if(idx <= param_3 && param_2 != i && max_dist > dist) { + max_dist = dist; + pointIdx = i; + set = true; + } + } + + mCurrPointIndex = pointIdx; + } + + return set; } -/* 8021B818-8021B95C .text chkInside__14dNpc_PathRun_cFP4cXyz */ -void dNpc_PathRun_c::chkInside(cXyz*) { - /* Nonmatching */ +bool dNpc_PathRun_c::chkInside(cXyz* param_1) { + cXyz point, point2, point3; + + setNearPathIndx(param_1, 0.0f); + point2 = getPoint(mCurrPointIndex); + decIdxLoop(); + point = getPoint(mCurrPointIndex); + incIdxLoop(); + incIdxLoop(); + point3 = getPoint(mCurrPointIndex); + + s16 angle1 = cLib_targetAngleY(&point2, &point); + s16 angle2 = cLib_targetAngleY(&point2, param_1); + s16 angle3 = cLib_targetAngleY(&point2, &point3); + + s16 diff1 = angle2 - angle3; + s16 diff2 = angle1 - angle3; + if(diff1 > 0) { + if(diff2 < 0 || diff1 < diff2) { + return true; + } + } + else if(diff2 < 0 && diff1 < diff2) { + return true; + } + + return false; } -/* 8021B95C-8021B998 .text setActorInfo__15dNpc_EventCut_cFPcP10fopAc_ac_c */ -void dNpc_EventCut_c::setActorInfo(char*, fopAc_ac_c*) { - /* Nonmatching */ +void dNpc_EventCut_c::setActorInfo(char* staffName, fopAc_ac_c* pActor) { + mpEvtStaffName = staffName; + mpActor = pActor; + mTargetActorPos.set(0.0f, 0.0f, 0.0f); + mOffsetPos.set(0.0f, 0.0f, 0.0f); + mPos.set(0.0f, 0.0f, 0.0f); + mCurActIdx = -1; } -/* 8021B998-8021B9D8 .text setActorInfo2__15dNpc_EventCut_cFPcP12fopNpc_npc_c */ -void dNpc_EventCut_c::setActorInfo2(char*, fopNpc_npc_c*) { - /* Nonmatching */ +void dNpc_EventCut_c::setActorInfo2(char* staffName, fopNpc_npc_c* pActor) { + mpEvtStaffName = staffName; + mpActor = pActor; + mpTalkActor = pActor; + mTargetActorPos.set(0.0f, 0.0f, 0.0f); + mOffsetPos.set(0.0f, 0.0f, 0.0f); + mPos.set(0.0f, 0.0f, 0.0f); + mCurActIdx = -1; } -/* 8021B9D8-8021BABC .text dNpc_setAnmIDRes__FP14mDoExt_McaMorfiffiiPCc */ -void dNpc_setAnmIDRes(mDoExt_McaMorf*, int, float, float, int, int, const char*) { - /* Nonmatching */ +bool dNpc_setAnmIDRes(mDoExt_McaMorf* pMorf, int loopMode, float morf, float speed, int animResId, int soundResId, const char* arcName) { + void* pSoundAnimRes = 0; + bool ret = false; + + if(pMorf != 0) { + if(0 <= soundResId) { + pSoundAnimRes = dComIfG_getObjectIDRes(arcName, soundResId); + } + + void* pAnimRes = dComIfG_getObjectIDRes(arcName, animResId); + pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + + ret = true; + } + + return ret; } -/* 8021BABC-8021BBA8 .text dNpc_setAnmFNDirect__FP14mDoExt_McaMorfiffPcPcPCc */ -void dNpc_setAnmFNDirect(mDoExt_McaMorf*, int, float, float, char*, char*, const char*) { - /* Nonmatching */ +bool dNpc_setAnmFNDirect(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, char* animFilename, char* soundFilename, const char* arcName) { + bool ret = false; + + if(pMorf != 0 && animFilename != 0 && arcName != 0) { + void* pAnimRes = dComIfG_getObjectRes(arcName, animFilename); + + void* pSoundAnimRes = 0; + if(soundFilename != 0) { + pSoundAnimRes = dComIfG_getObjectRes(arcName, soundFilename); + } + + pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + + ret = true; + } + + return ret; } -/* 8021BBA8-8021BC8C .text dNpc_setAnm__FP14mDoExt_McaMorfiffiiPCc */ -void dNpc_setAnm(mDoExt_McaMorf*, int, float, float, int, int, const char*) { - /* Nonmatching */ +bool dNpc_setAnm(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int animFileidx, int soundFileIdx, const char* arcName) { + void* pSoundAnimRes = 0; + bool ret = false; + + if(pMorf != 0) { + if(0 <= soundFileIdx) { + pSoundAnimRes = dComIfG_getObjectRes(arcName, soundFileIdx); + } + + void* pAnimRes = dComIfG_getObjectRes(arcName, animFileidx); + pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + + ret = true; + } + + return ret; } -/* 8021BC8C-8021BD2C .text dNpc_setShadowModel__FP8J3DModelP12J3DModelDataP8J3DModel */ -void dNpc_setShadowModel(J3DModel*, J3DModelData*, J3DModel*) { - /* Nonmatching */ +void dNpc_setShadowModel(J3DModel* param_1, J3DModelData* param_2, J3DModel* param_3) { + for(int i = 0; i < param_2->getWEvlpMtxNum(); i++) { + mDoMtx_copy(param_3->mpWeightEnvMtx[i], param_1->mpWeightEnvMtx[i]); + } + for(int i = 0; i < param_2->getJointNum(); i++) { + mDoMtx_copy(param_3->mpNodeMtx[i], param_1->mpNodeMtx[i]); + } } -/* 8021BD2C-8021BDE8 .text dNpc_playerEyePos__Ff */ -void dNpc_playerEyePos(float) { - /* Nonmatching */ +cXyz dNpc_playerEyePos(f32 param_1) { + daPy_py_c* pPlayer = daPy_getPlayerActorClass(); + cXyz pos = pPlayer->getHeadTopPos(); + cXyz out; + + MtxTrans(pos.x, pos.y, pos.z, false); + pos.set(0.0f, param_1, 0.0f); + MtxPosition(&pos, &out); + + out.x = pPlayer->current.pos.x; + out.z = pPlayer->current.pos.z; + + return out; } -/* 8021BDE8-8021BEC4 .text dNpc_calc_DisXZ_AngY__F4cXyz4cXyzPfPs */ -void dNpc_calc_DisXZ_AngY(cXyz, cXyz, float*, short*) { - /* Nonmatching */ +void dNpc_calc_DisXZ_AngY(cXyz param_1, cXyz param_2, float* param_3, short* param_4) { + cXyz diff; + diff.x = param_2.getXDiff(¶m_1); + diff.z = param_2.getZDiff(¶m_1); + + if(param_3 != 0) { + f32 dist = sqrtf(diff.x * diff.x + diff.z * diff.z); + *param_3 = dist; + } + + if(param_4 != 0) { + *param_4 = cM_atan2s(diff.x, diff.z); + } } -/* 8021BEC4-8021BF30 .text dNpc_chkArasoi__Fv */ -void dNpc_chkArasoi() { - /* Nonmatching */ +bool dNpc_chkArasoi() { + return dComIfGs_isEventBit(0x1220) && !dComIfGs_isEventBit(0x1808); } -/* 8021BF30-8021BF98 .text dNpc_chkLetterPassed__Fv */ -void dNpc_chkLetterPassed() { - /* Nonmatching */ +BOOL dNpc_chkLetterPassed() { + BOOL ret = false; + if(dComIfGs_isGetItemReserve(0xC)) { + ret = dComIfGs_checkReserveItem(0x98) ? 0 : 1; + } + + return ret; } -/* 8021BF98-8021C010 .text setCollision__12fopNpc_npc_cFff */ -void fopNpc_npc_c::setCollision(float, float) { - /* Nonmatching */ +void fopNpc_npc_c::setCollision(f32 radius, f32 height) { + mCyl.SetC(current.pos); + mCyl.SetR(radius); + mCyl.SetH(height); + dComIfG_Ccsp()->Set(&mCyl); } -/* 8021C010-8021C120 .text talk__12fopNpc_npc_cFi */ -void fopNpc_npc_c::talk(int) { - /* Nonmatching */ +u16 fopNpc_npc_c::talk(int param_1) { + u16 mode = 0xFF; + + if(mCurrMsgBsPcId == 0xFFFFFFFF) { + if(param_1 == 1) { + mCurrMsgID = getMsg(); + } + + mCurrMsgBsPcId = fopMsgM_messageSet(mCurrMsgID, this); + mpCurrMsg = 0; + } + else { + if(mpCurrMsg) { + mode = mpCurrMsg->mMode; + if(mode == dNpcMsgStts_MSG_DISPLAYED_e) { + mpCurrMsg->mMode = next_msgStatus(&mCurrMsgID); + if(mpCurrMsg->mMode == dNpcMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(mCurrMsgID); + } + } + else if (mode == dNpcMsgStts_BOX_CLOSED_e) { + mpCurrMsg->mMode = dNpcMsgStts_MSG_DESTROYED_e; + mCurrMsgBsPcId = -1; + } + + anmAtr(mode); + } + else { + mpCurrMsg = fopMsgM_SearchByID(mCurrMsgBsPcId); + } + } + + return mode; } -/* 8021C120-8021C238 .text dNpc_setAnm_2__FP14mDoExt_McaMorfiffiiPCc */ -void dNpc_setAnm_2(mDoExt_McaMorf*, int, float, float, int, int, const char*) { - /* Nonmatching */ +bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int animFileidx, int soundFileIdx, const char* arcName) { + if(0 <= soundFileIdx) { + void* pSoundAnimRes = dComIfG_getObjectRes(arcName, soundFileIdx); + void* pAnimRes = dComIfG_getObjectRes(arcName, animFileidx); + + pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, pSoundAnimRes); + } + else { + void* pAnimRes = dComIfG_getObjectRes(arcName, animFileidx); + + pMorf->setAnm((J3DAnmTransform*)pAnimRes, loopMode, morf, speed, 0.0f, -1.0f, 0); + } + + + return true; } -/* 8021C238-8021C2E8 .text swing_vertical_init__14dNpc_HeadAnm_cFsssi */ -void dNpc_HeadAnm_c::swing_vertical_init(short, short, short, int) { - /* Nonmatching */ +void dNpc_HeadAnm_c::swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4) { + if(param_4 == 0 || mFunc != &swing_vertical) { + field_0x1C = 0; + field_0x20 = param_1; + field_0x1E = param_2; + field_0x14 = param_3; + mFunc = &swing_vertical; + } } /* 8021C2E8-8021C3C8 .text swing_vertical__14dNpc_HeadAnm_cFv */ @@ -212,8 +590,14 @@ void dNpc_HeadAnm_c::swing_vertical() { } /* 8021C3C8-8021C478 .text swing_horizone_init__14dNpc_HeadAnm_cFsssi */ -void dNpc_HeadAnm_c::swing_horizone_init(short, short, short, int) { - /* Nonmatching */ +void dNpc_HeadAnm_c::swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4) { + if(param_4 == 0 || mFunc != &swing_horizone) { + field_0x1C = 0; + field_0x20 = param_1; + field_0x1E = param_2; + field_0x18 = param_3; + mFunc = &swing_horizone; + } } /* 8021C478-8021C55C .text swing_horizone__14dNpc_HeadAnm_cFv */ @@ -221,29 +605,62 @@ void dNpc_HeadAnm_c::swing_horizone() { /* Nonmatching */ } -/* 8021C55C-8021C5D8 .text move__14dNpc_HeadAnm_cFv */ void dNpc_HeadAnm_c::move() { - /* Nonmatching */ + if(mFunc) { + (this->*mFunc)(); + } + else { + cLib_addCalcAngleS(&field_0x00, 0, 4, 0x1000, 0x100); + cLib_addCalcAngleS(&field_0x02, 0, 4, 0x1000, 0x100); + } } /* 8021C5D8-8021C620 .text chkLim__14dNpc_JntCtrl_cFsii */ -void dNpc_JntCtrl_c::chkLim(short, int, int) { +s16 dNpc_JntCtrl_c::chkLim(short, int, int) { /* Nonmatching */ } -/* 8021C620-8021C6D8 .text turn_fromBackbone2Head__14dNpc_JntCtrl_cFsPsPsb */ -void dNpc_JntCtrl_c::turn_fromBackbone2Head(short, short*, short*, bool) { - /* Nonmatching */ +void dNpc_JntCtrl_c::turn_fromBackbone2Head(s16 param_1, s16* param_2, s16* param_3, bool param_4) { + *param_3 = 0; + if(field_0x0C == 0) { + *param_3 = chkLim(param_1, 1, 1); + if(field_0x32 && *param_3 < 0) { + *param_3 = 0; + } + } + + *param_2 = 0; + if(field_0x0B == 0) { + *param_2 = param_1 - *param_3; + *param_2 = chkLim(*param_2, 0, 1); + } } -/* 8021C6D8-8021C780 .text turn_fromHead2Backbone__14dNpc_JntCtrl_cFsPsPs */ -void dNpc_JntCtrl_c::turn_fromHead2Backbone(short, short*, short*) { - /* Nonmatching */ +void dNpc_JntCtrl_c::turn_fromHead2Backbone(s16 param_1, s16* param_2, s16* param_3) { + *param_2 = 0; + if(field_0x0B == 0) { + *param_2 = param_1 - field_0x32; + *param_2 = chkLim(*param_2, 0, 1); + } + + *param_3 = 0; + if(field_0x0C == 0) { + *param_3 = param_1 - *param_2; + *param_3 = chkLim(*param_3, 1, 1); + } } -/* 8021C780-8021C7D0 .text follow_current__14dNpc_JntCtrl_cFPss */ -void dNpc_JntCtrl_c::follow_current(short*, short) { - /* Nonmatching */ +s16 dNpc_JntCtrl_c::follow_current(s16* orig, s16 diff) { + s16 angle = *orig; + *orig -= diff; + + s16 ret = 0; + if((angle > 0 && *orig < 0) || (angle < 0 && *orig > 0)) { + ret = -*orig; + *orig = 0; + } + + return ret; } /* 8021C7D0-8021CAB8 .text lookAtTarget_2__14dNpc_JntCtrl_cFPsP4cXyz4cXyzssb */ @@ -251,83 +668,597 @@ void dNpc_JntCtrl_c::lookAtTarget_2(short*, cXyz*, cXyz, short, short, bool) { /* Nonmatching */ } -/* 8021CAB8-8021CC4C .text dNpc_chkAttn__FP10fopAc_ac_c4cXyzfffb */ -void dNpc_chkAttn(fopAc_ac_c*, cXyz, float, float, float, bool) { - /* Nonmatching */ +bool dNpc_chkAttn(fopAc_ac_c* i_this, cXyz destPos, float param_3, float param_4, float param_5, bool param_6) { + s16 angle = cLib_targetAngleY(&i_this->current.pos, &destPos); + f32 dist = sqrtf((i_this->current.pos - destPos).getMagXZ()); //this is gross but I haven't found a better way (temp destroys stack) + s16 angle_diff = angle - i_this->current.angle.y; + + if(param_5 > 359.0f) { + param_5 = 359.0f; + } + if (param_5 < 0.0f) { + param_5 = 0.0f; + } + if(param_6) { + param_3 += param_4; + } + + bool ret = false; + if(dist <= param_3 && abs(angle_diff) <= cM_deg2s(param_5)) { + ret = true; + } + + return ret; } -/* 8021CC4C-8021CED0 .text cutProc__15dNpc_EventCut_cFv */ -void dNpc_EventCut_c::cutProc() { - /* Nonmatching */ +bool dNpc_EventCut_c::cutProc() { + static char* action_table[] = { + "WAIT", + "TURN_TO_ACTOR", + "MOVE_TO_ACTOR", + "TURN_TO_POS", + "MOVE_TO_POS", + "TALK_MSG", + "CONTINUE_TALK" + }; + + if(mpEvtStaffName == 0 || mpActor == 0) { + return false; + } + else { + mEvtStaffId = dComIfGp_evmng_getMyStaffId(mpEvtStaffName, 0, 0); + if(mEvtStaffId == -1) { + return false; + } + else { + typedef void(dNpc_EventCut_c::*cut_func_t)(void); + struct cut_entry_t { + cut_func_t start; + cut_func_t proc; + }; + + static cut_entry_t cut_tbl[] = { + { + &dNpc_EventCut_c::cutWaitStart, + &dNpc_EventCut_c::cutWaitProc, + }, + { + &dNpc_EventCut_c::cutTurnToActorStart, + &dNpc_EventCut_c::cutTurnToActorProc, + }, + { + &dNpc_EventCut_c::cutMoveToActorStart, + &dNpc_EventCut_c::cutMoveToActorProc, + }, + { + &dNpc_EventCut_c::cutTurnToPosStart, + &dNpc_EventCut_c::cutTurnToPosProc, + }, + { + &dNpc_EventCut_c::cutMoveToPosStart, + &dNpc_EventCut_c::cutMoveToPosProc, + }, + { + &dNpc_EventCut_c::cutTalkMsgStart, + &dNpc_EventCut_c::cutTalkMsgProc, + }, + { + &dNpc_EventCut_c::cutContinueTalkStart, + &dNpc_EventCut_c::cutTalkMsgProc, + }, + }; + + mCurActIdx = dComIfGp_evmng_getMyActIdx(mEvtStaffId, action_table, 7, 1, 0); + if(mCurActIdx == -1) { + return false; + } + else { + if(dComIfGp_evmng_getIsAddvance(mEvtStaffId)) { + mbAttention = 0; + (this->*cut_tbl[mCurActIdx].start)(); + } + + (this->*cut_tbl[mCurActIdx].proc)(); + return 1; + } + } + } } -/* 8021CED0-8021CF3C .text cutWaitStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutWaitStart() { - /* Nonmatching */ + u32* timer = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Timer"); + if(timer) { + mTimer = (s16)*timer; + } + else { + mTimer = 0; + } } -/* 8021CF3C-8021CF88 .text cutWaitProc__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutWaitProc() { - /* Nonmatching */ + if(cLib_calcTimer(&mTimer) == 0) { + dComIfGp_evmng_cutEnd(mEvtStaffId); + } } -/* 8021CF88-8021D1C8 .text cutTurnToActorStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutTurnToActorStart() { - /* Nonmatching */ + mpActorName = dComIfGp_evmng_getMyStringP(mEvtStaffId, "ActorName"); + + u32* set = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "SetId"); + if(set) { + mSetID = *set; + } + else { + mSetID = 0; + } + + Vec* pos = dComIfGp_evmng_getMyVec3dP(mEvtStaffId, "OffsetPos"); + if(pos) { + mOffsetPos = *pos; + } + else { + mOffsetPos.set(0.0f, 0.0f, 0.0f); + } + + u32* turnType = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "TurnType"); + if(turnType) { + mTurnType = *turnType; + } + else { + mTurnType = 1; + } + + u32* timer = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Timer"); + if(timer) { + mTimer = (s16)*timer; + } + else { + mTimer = 1; + } + + u32* speed = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "TurnSpeed"); + if(speed) { + mTurnSpeed = *speed; + } + else { + mTurnSpeed = 0; + } + + u32* angle = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "AddAngle"); + if(angle == 0) { + mAddAngle = 0; + } + else { + mAddAngle = *angle; + } + + f32* dist = dComIfGp_evmng_getMyFloatP(mEvtStaffId, "DelDistance"); + if(dist == 0) { + pDelDistance = 0.0f; + } + else { + pDelDistance = *dist; + } + + u32* noTurn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "NoTurn"); + if(noTurn) { + mbNoTurn = 1; + } + else { + mbNoTurn = 0; + } + + field_0x44 = 0; } -/* 8021D1C8-8021D51C .text cutTurnToActorProc__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutTurnToActorProc() { - /* Nonmatching */ + if(mSetID != 0) { + mTargetActorPos.set(0.0f, 0.0f, 0.0f); + fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this); + } + else { + if(mpActorName == 0 || dEvmng_strcmp(mpActorName, "Player") == 0) { + mpTargetActor = dComIfGp_getPlayer(0); + } + else { + mTargetActorPos.set(0.0f, 0.0f, 0.0f); + fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this); + } + } + + if(field_0x68 != 0) { + switch(mTurnType) { + case 2: + field_0x68[0xA] = 1; + case 1: + field_0x68[0xC] = 0; + break; + case 0: + field_0x68[0xC] = 1; + break; + default: + field_0x68[0xC] = 0; + break; + } + } + + if(mpTargetActor == 0) { + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + if(mpActorName == 0 || dEvmng_strcmp(mpActorName, "Player") == 0) { + mPos = dNpc_playerEyePos(0.0f) + mOffsetPos; + } + else { + s16 addAngle = mAddAngle; + if(addAngle && pDelDistance) { + u16 angle = mpTargetActor->shape_angle.y + addAngle; + mPos = mpTargetActor->current.pos; + mPos.x -= pDelDistance * JMASinShort(angle); + mPos.z -= pDelDistance * JMASCosShort(angle); + } + else { + mPos = mpTargetActor->current.pos + mOffsetPos; + } + } + + mbAttention = 1; + + s16 tAngle = cLib_targetAngleY(&mpActor->current.pos, &mPos); + u32 temp = abs(tAngle - fopAcM_GetAngle_p(mpActor).y); + if(fabsf2(field_0x44) == temp && temp < 5376.0f) { + cLib_calcTimer(&mTimer); + } + + if(mTimer == 0) { + mTurnSpeed = 0; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + + field_0x44 = fabsf2(tAngle - mpActor->current.angle.y); } -/* 8021D51C-8021D730 .text cutMoveToActorStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutMoveToActorStart() { - /* Nonmatching */ + mpActorName = dComIfGp_evmng_getMyStringP(mEvtStaffId, "ActorName"); + u32* set = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "SetId"); + f32* speed = dComIfGp_evmng_getMyFloatP(mEvtStaffId, "Speed"); + f32* dist = dComIfGp_evmng_getMyFloatP(mEvtStaffId, "DelDistance"); + Vec* offs = dComIfGp_evmng_getMyVec3dP(mEvtStaffId, "OffsetPos"); + u32* attn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Attention"); + u32* noTurn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "NoTurn"); + u32* angle = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "ShapeAngle"); + + if(noTurn == 0) { + mbNoTurn = 0; + } + else { + mbNoTurn = 1; + } + + if(attn == 0) { + mbAttention = 0; + } + else { + mbAttention = 1; + } + + if(offs == 0) { + mOffsetPos.set(0.0f, 0.0f, 0.0f); + } + else { + mOffsetPos = *offs; + } + + if(set == 0) { + mSetID = 0; + } + else { + mSetID = *set; + } + + if(speed == 0) { + mSpeed = 2.0f; + } + else { + mSpeed = *speed; + } + + if(dist == 0) { + pDelDistance = 0.0f; + } + else { + pDelDistance = *dist; + } + + if(angle == 0) { + mAddAngle = 0; + } + else { + mAddAngle = *angle; + } } -/* 8021D730-8021D9DC .text cutMoveToActorProc__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutMoveToActorProc() { - /* Nonmatching */ + if(mSetID != 0) { + mTargetActorPos.set(0.0f, 0.0f, 0.0f); + fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this); + } + else { + if(mpActorName == 0 || dEvmng_strcmp(mpActorName, "Player") == 0) { + mpTargetActor = dComIfGp_getPlayer(0); + } + else { + mTargetActorPos.set(0.0f, 0.0f, 0.0f); + fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this); + } + } + + if(mpTargetActor == 0) { + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + + cXyz temp = mpTargetActor->current.pos + mOffsetPos; + s16 angle = fopAcM_searchActorAngleY(mpActor, mpTargetActor); + if(mAddAngle != 0) { + angle = mpTargetActor->shape_angle.y + mAddAngle; + } + + temp.x -= pDelDistance * JMASinShort(angle); + temp.z -= pDelDistance * JMASCosShort(angle); + + if(mSpeed == 0.0f) { + mpActor->current.pos = temp; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + + cXyz diff = temp - mPos; + f32 tempf = diff.getSquareMag(); + f32 dist = sqrtf(tempf); + + cLib_addCalc2(&mpActor->current.pos.x, temp.x, 0.1f, mSpeed); + cLib_addCalc2(&mpActor->current.pos.z, temp.z, 0.1f, mSpeed); + if(dist < 5.0f) { + mSpeed = 0.0f; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } } -/* 8021D9DC-8021DC7C .text findActorCallBack__15dNpc_EventCut_cFP10fopAc_ac_cPv */ -void dNpc_EventCut_c::findActorCallBack(fopAc_ac_c*, void*) { - /* Nonmatching */ +fopAc_ac_c* dNpc_EventCut_c::findActorCallBack(fopAc_ac_c* pActor, void* pData) { + dNpc_EventCut_c* cut = static_cast(pData); + + if(cut == 0) { + pActor = 0; + } + else if(cut->mSetID == 0 || pActor->mSetID != cut->mSetID) { + if(cut->mpActorName == 0) { + pActor = 0; + } + else { + //if(dStage_searchName(cut->mpActorName) == 0) { + // pActor = 0; + //} + //else { + //} + } + } + else { + cut->mTargetActorPos = pActor->current.pos; + cut->mpTargetActor = pActor; + } + + return 0; } -/* 8021DC7C-8021DE2C .text cutTurnToPosStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutTurnToPosStart() { - /* Nonmatching */ + Vec* pos = dComIfGp_evmng_getMyVec3dP(mEvtStaffId, "Pos"); + if(pos) { + mPos = *pos; + } + else { + mPos.set(0.0f, 0.0f, 0.0f); + } + + u32* turnType = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "TurnType"); + if(turnType) { + mTurnType = *turnType; + } + else { + mTurnType = 1; + } + + u32* timer = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Timer"); + if(timer) { + mTimer = (s16)*timer; + } + else { + mTimer = 1; + } + + u32* speed = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "TurnSpeed"); + if(speed) { + mTurnSpeed = *speed; + } + else { + mTurnSpeed = 0; + } + + u32* noTurn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "NoTurn"); + if(noTurn) { + mbNoTurn = 1; + } + else { + mbNoTurn = 0; + } + + u32* angle = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "AddAngle"); + if(angle == 0) { + mAddAngle = 0; + } + else { + mAddAngle = *angle; + } + + field_0x44 = 0; } -/* 8021DE2C-8021DFB0 .text cutTurnToPosProc__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutTurnToPosProc() { - /* Nonmatching */ + s16 tAngle = cLib_targetAngleY(&mpActor->current.pos, &mPos); + mbAttention = 1; + + if(field_0x68 != 0) { + switch(mTurnType) { + case 2: + field_0x68[0xA] = 1; + case 1: + field_0x68[0xC] = 0; + break; + case 0: + field_0x68[0xC] = 1; + break; + default: + field_0x68[0xC] = 0; + break; + } + } + + //not sure what this section is doing + u32 temp = abs(tAngle - fopAcM_GetAngle_p(mpActor).y); + if(fabsf2(field_0x44) == temp && temp < 5376.0f) { + cLib_calcTimer(&mTimer); + } + + if(mTimer == 0) { + mTurnSpeed = 0; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + + field_0x44 = fabsf2(tAngle - mpActor->current.angle.y); } -/* 8021DFB0-8021E168 .text cutMoveToPosStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutMoveToPosStart() { - /* Nonmatching */ + Vec* pos = dComIfGp_evmng_getMyVec3dP(mEvtStaffId, "Pos"); + f32* speed = dComIfGp_evmng_getMyFloatP(mEvtStaffId, "Speed"); + f32* dist = dComIfGp_evmng_getMyFloatP(mEvtStaffId, "DelDistance"); + u32* attn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Attention"); + u32* noTurn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "NoTurn"); + u32* angle = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "AddAngle"); + + if(noTurn == 0) { + mbNoTurn = 0; + } + else { + mbNoTurn = 1; + } + + if(pos == 0) { + mPos.set(0.0f, 0.0f, 0.0f); + } + else { + mPos = *pos; + } + + if(attn == 0) { + mbAttention = 0; + } + else { + mbAttention = 1; + } + + if(speed == 0) { + mSpeed = 2.0f; + } + else { + mSpeed = *speed; + } + + if(dist == 0) { + pDelDistance = 0.0f; + } + else { + pDelDistance = *dist; + } + + if(angle == 0) { + mAddAngle = 0; + } + else { + mAddAngle = *angle; + } } -/* 8021E168-8021E338 .text cutMoveToPosProc__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutMoveToPosProc() { - /* Nonmatching */ + s16 angle = cLib_targetAngleY(mpActor->current.pos, mPos); + + cXyz temp(pDelDistance * JMASinShort(angle), mPos.y, pDelDistance * JMASCosShort(angle)); + + if(mSpeed == 0.0f) { + mpActor->current.pos = temp; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + + f32 dist = sqrtf((temp - mpActor->current.pos).getMagXZ()); + + cLib_addCalc2(&mpActor->current.pos.x, temp.x, 0.1f, mSpeed); + cLib_addCalc2(&mpActor->current.pos.z, temp.z, 0.1f, mSpeed); + if(dist < 5.0f) { + mSpeed = 0.0f; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } } -/* 8021E338-8021E444 .text cutTalkMsgStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutTalkMsgStart() { - /* Nonmatching */ + if(mpTalkActor != 0) { + u32* attn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Attention"); + if(attn == 0) { + mbAttention = 0; + } + else { + mbAttention = 1; + } + + u32* firstMsg = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "msg_num"); + u32* endMsg = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "end_msg"); + if(firstMsg == 0) { + mpTalkActor->mCurrMsgID = 0; + } + else { + mpTalkActor->mCurrMsgID = *firstMsg; + } + if(endMsg) { + mpTalkActor->mEndMsgID = *endMsg; + } + else { + mpTalkActor->mEndMsgID = -1; + } + + field_0x52 = 1; + } } -/* 8021E444-8021E4C0 .text cutContinueTalkStart__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutContinueTalkStart() { - /* Nonmatching */ + if(mpTalkActor != 0) { + u32* endMsg = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "end_num"); + if(endMsg) { + mpTalkActor->mEndMsgID = *endMsg; + } + else { + mpTalkActor->mEndMsgID = -1; + } + } } -/* 8021E4C0-8021E58C .text cutTalkMsgProc__15dNpc_EventCut_cFv */ void dNpc_EventCut_c::cutTalkMsgProc() { - /* Nonmatching */ + if(mpTalkActor == 0 || field_0x52 == 0) { + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + else { + u16 status = mpTalkActor->talk(0); + if(status == dNpcMsgStts_BOX_CLOSED_e) { + field_0x52 = 0; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + else if((status == 2 || status == 6) && mpTalkActor->mEndMsgID == mpTalkActor->mCurrMsgID) { + mpTalkActor->mEndMsgID = -1; + dComIfGp_evmng_cutEnd(mEvtStaffId); + } + } } - From e806b15578cbcdb3340d191ab7ec6ce0274df833 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 17 Sep 2023 14:58:28 -0400 Subject: [PATCH 04/89] d_a_nh 75% done (#49) * d_a_nh 75% done * More nh actions --- .../JSystem/J3DGraphAnimator/J3DJointTree.h | 3 + include/JSystem/J3DGraphAnimator/J3DModel.h | 3 +- .../JSystem/J3DGraphAnimator/J3DModelData.h | 1 + include/SSystem/SComponent/c_bg_s_poly_info.h | 4 +- include/SSystem/SComponent/c_lib.h | 4 +- include/SSystem/SComponent/c_m3d_g_cir.h | 2 +- include/d/d_com_inf_game.h | 4 + include/d/d_drawlist.h | 11 +- include/f_op/f_op_actor.h | 6 +- include/f_pc/f_pc_base.h | 2 +- include/m_Do/m_Do_ext.h | 16 +- include/m_Do/m_Do_hostIO.h | 9 + src/d/actor/d_a_branch.cpp | 2 +- src/d/actor/d_a_kaji.cpp | 13 +- src/d/actor/d_a_mozo.cpp | 2 +- src/d/actor/d_a_nh.cpp | 488 ++++++++++++++++-- src/d/actor/d_a_obj_Ygush00.cpp | 2 +- src/d/actor/d_a_obj_movebox.cpp | 2 +- src/d/actor/d_a_obj_paper.cpp | 2 +- src/d/d_npc.cpp | 2 +- src/m_Do/m_Do_ext.cpp | 16 +- 21 files changed, 497 insertions(+), 97 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index 9d5d3c3d3..af85bbd5c 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -3,6 +3,7 @@ #include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "dolphin/types.h" +#include "global.h" class JUTNameTab; @@ -70,4 +71,6 @@ private: /* 0x44 */ JUTNameTab* mJointName; }; // Size: 0x48 +STATIC_ASSERT(sizeof(J3DJointTree) == 0x48); + #endif /* J3DJOINTTREE_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index 3c31c7511..761048ed5 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -43,7 +43,6 @@ public: entryModelData(param_0, param_1, param_2); } - void setBaseTRMtx(f32 (*)[4]); void initialize(); s32 entryModelData(J3DModelData*, u32, u32); s32 createShapePacket(J3DModelData*); @@ -79,7 +78,7 @@ public: bool isCpuSkinningOn() const { return (mFlags & J3DMdlFlag_SkinPosCpu) && (mFlags & J3DMdlFlag_SkinNrmCpu); } Mtx& getBaseTRMtx() { return mBaseTransformMtx; } - void i_setBaseTRMtx(Mtx m) { MTXCopy(m, mBaseTransformMtx); } + void setBaseTRMtx(Mtx m) { MTXCopy(m, mBaseTransformMtx); } u32 getMtxCalcMode() const { return mFlags & 0x03; } J3DVertexBuffer* getVertexBuffer() const { return (J3DVertexBuffer*)&mVertexBuffer; } J3DMatPacket* getMatPacket(u16 idx) const { return &mpMatPacket[idx]; } diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index 3b113258f..ce8018b1b 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -6,6 +6,7 @@ #include "JSystem/J3DGraphAnimator/J3DShapeTable.h" #include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DVertex.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" typedef struct _GXColor GXColor; class JUTNameTab; diff --git a/include/SSystem/SComponent/c_bg_s_poly_info.h b/include/SSystem/SComponent/c_bg_s_poly_info.h index 16e8c2852..d5a10a646 100644 --- a/include/SSystem/SComponent/c_bg_s_poly_info.h +++ b/include/SSystem/SComponent/c_bg_s_poly_info.h @@ -13,7 +13,9 @@ private: /* 0x08 */ unsigned int mActorId; public: - cBgS_PolyInfo() {} + cBgS_PolyInfo() { + ClearPi(); + } void ClearPi() { mPolyIndex = -1; mBgIndex = 0x100; diff --git a/include/SSystem/SComponent/c_lib.h b/include/SSystem/SComponent/c_lib.h index 883d092bc..093db9c12 100644 --- a/include/SSystem/SComponent/c_lib.h +++ b/include/SSystem/SComponent/c_lib.h @@ -2,6 +2,7 @@ #define C_LIB_H_ #include "SSystem/SComponent/c_xyz.h" +#include "SSystem/SComponent/c_math.h" #include "dolphin/mtx/mtx.h" inline bool cLib_IsZero(f32 value) { @@ -29,8 +30,7 @@ int cLib_chasePosXZ(cXyz* o_value, cXyz const& target, f32 step); int cLib_chaseAngleS(s16* o_value, s16 target, s16 step); s16 cLib_targetAngleY(cXyz* lhs, cXyz* rhs); -s16 cLib_targetAngleY(const cXyz& lhs, const cXyz& rhs); -s16 cLib_targetAngleX(const cXyz*, const cXyz*); +s16 cLib_targetAngleX(cXyz*, cXyz*); void cLib_offsetPos(cXyz* pDest, cXyz* pSrc, s16 angle, cXyz* vec); s32 cLib_distanceAngleS(s16 x, s16 y); diff --git a/include/SSystem/SComponent/c_m3d_g_cir.h b/include/SSystem/SComponent/c_m3d_g_cir.h index 222de788f..242163819 100644 --- a/include/SSystem/SComponent/c_m3d_g_cir.h +++ b/include/SSystem/SComponent/c_m3d_g_cir.h @@ -22,7 +22,7 @@ class cM3dGCir : public cM2dGCir { public: cM3dGCir(void); - virtual ~cM3dGCir(void); + virtual ~cM3dGCir(void) {} void Set(f32, f32, f32, f32); }; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index a161f2190..4af46709e 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -835,6 +835,10 @@ inline int dComIfGd_setRealShadow2(u32 id, s8 param_2, J3DModel* pModel, cXyz* p int dComIfGd_setSimpleShadow2(cXyz* i_pos, f32 param_1, f32 param_2, cBgS_PolyInfo& i_floorPoly, s16 i_angle, f32 param_5, GXTexObj* i_tex); +inline void dComIfGd_setAlphaModel(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { + g_dComIfG_gameInfo.drawlist.setAlphaModel(param_0, param_1, param_2); +} + /** * === RESOURCE === */ diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 3cc5aaa85..822f660bb 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -165,7 +165,13 @@ public: struct view_port_class; struct view_class; struct camera_class; -struct dDlst_alphaModel_c; +struct dDlst_alphaModel_c { +public: + dDlst_alphaModel_c(); + void create(int); + void set(unsigned char, float(*)[4], unsigned char); + void draw(float(*)[4]); +}; class dDlst_list_c { public: @@ -191,6 +197,9 @@ public: dKy_tevstr_c* pTevStr) { return mShadowControl.setReal2(id, param_2, pModel, pPos, param_5, param_6, pTevStr); } + void setAlphaModel(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { + mpAlphaModel0->set(param_0, param_1, param_2); + } static void offWipe() { mWipe = false; } diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 2325626a1..92b134fd4 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -164,9 +164,9 @@ struct actor_attention_types { void setFlag(u32 flags) { mFlags |= flags; } /* 0x00 */ u8 mDistances[8]; - /* 0x0C */ cXyz mPosition; - /* 0x18 */ u32 mFlags; -}; // Size = 0x1C + /* 0x08 */ cXyz mPosition; + /* 0x14 */ u32 mFlags; +}; // Size = 0x18 class dJntCol_c; diff --git a/include/f_pc/f_pc_base.h b/include/f_pc/f_pc_base.h index 8a8ec19d6..856c99a54 100644 --- a/include/f_pc/f_pc_base.h +++ b/include/f_pc/f_pc_base.h @@ -6,10 +6,10 @@ #include "f_pc/f_pc_layer_tag.h" #include "f_pc/f_pc_line_tag.h" #include "f_pc/f_pc_priority.h" +#include "f_pc/f_pc_profile.h" typedef struct create_request create_request; typedef struct process_method_class process_method_class; -typedef struct process_profile_definition process_profile_definition; typedef struct profile_method_class profile_method_class; typedef struct base_process_class { diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 48e67c59a..3aec03ece 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -18,7 +18,7 @@ public: mDoExt_baseAnm() { mpFrameCtrl = NULL; } virtual ~mDoExt_baseAnm() {} - int initPlay(s16 i_frameMax, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF); + int initPlay(s16 i_frameMax, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool); int play(); J3DFrameCtrl* getFrameCtrl() { return mpFrameCtrl; } @@ -71,21 +71,19 @@ class J3DTevColorAnm; class J3DTevKColorAnm; class mDoExt_brkAnm : public mDoExt_baseAnm { public: - mDoExt_brkAnm() { mpAnm = NULL; } + mDoExt_brkAnm() { + mpCRegAnm = NULL; + mpKRegAnm = NULL; + } /* 8000D70C */ int init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); /* 8000D7A8 */ void entry(J3DMaterialTable* i_matTable, f32 i_frame); void entry(J3DModelData* i_modelData) { entry(i_modelData, getFrame()); } - void entry(J3DModelData* i_modelData, f32 i_frame) { - entry(&i_modelData->getMaterialTable(), i_frame); - } + void entry(J3DModelData* i_modelData, f32 i_frame); int init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, int i_anmPlay, int i_attribute, - f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry) { - return init(&i_modelData->getMaterialTable(), i_brk, i_anmPlay, i_attribute, i_rate, - i_start, i_end, i_modify, i_entry); - } + f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); int remove(J3DModelData* i_modelData) { return i_modelData->removeTevRegAnimator(mpAnm); } void entryFrame() { entryFrame(getFrame()); } diff --git a/include/m_Do/m_Do_hostIO.h b/include/m_Do/m_Do_hostIO.h index ecabcf759..bec68c711 100644 --- a/include/m_Do/m_Do_hostIO.h +++ b/include/m_Do/m_Do_hostIO.h @@ -11,7 +11,9 @@ public: class JORReflexible : public JOREventListener { public: +#ifdef DEBUG virtual ~JORReflexible() {} +#endif }; class mDoHIO_child_c { @@ -44,6 +46,13 @@ public: virtual ~mDoHIO_root_c() {} void update(); + + s8 mDoHIO_createChild(const char* name, JORReflexible* hio) { + return m_subroot.createChild(name, hio); + } + void mDoHIO_deleteChild(s8 childID) { + m_subroot.deleteChild(childID); + } /* 0x0 */ mDoHIO_subRoot_c m_subroot; }; diff --git a/src/d/actor/d_a_branch.cpp b/src/d/actor/d_a_branch.cpp index f89c130e0..0a1387a5f 100644 --- a/src/d/actor/d_a_branch.cpp +++ b/src/d/actor/d_a_branch.cpp @@ -64,7 +64,7 @@ void daBranch_c::set_mtx() { mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::XYZrotM(getAngle().x, getAngle().y, getAngle().z); - pMdl->i_setBaseTRMtx(mDoMtx_stack_c::get()); + pMdl->setBaseTRMtx(mDoMtx_stack_c::get()); } } } diff --git a/src/d/actor/d_a_kaji.cpp b/src/d/actor/d_a_kaji.cpp index c420f407e..7def45908 100644 --- a/src/d/actor/d_a_kaji.cpp +++ b/src/d/actor/d_a_kaji.cpp @@ -52,7 +52,7 @@ BOOL daKaji_c::CreateHeap() { (J3DAnmTransformKey*)dComIfG_getObjectRes("Kaji", 0xE), // kj_wait.bck 2, 0.0f, 0, -1, 1, dComIfG_getObjectRes("Kaji", 0x8), // kj_wait.bas - 0x00080000, + 0x00080000, 0x11000002 ); @@ -94,7 +94,7 @@ BOOL daKaji_c::_execute() { cXyz* offset = &cXyz(0.0f, 740.0f, -858.0f); offset->y += g_regHIO.mChild[10].mFloatRegs[10]; offset->z += g_regHIO.mChild[10].mFloatRegs[11]; - cMtx_multVec( l_p_ship->mpModel->getBaseTRMtx(), offset, ¤t.pos); + cMtx_multVec(l_p_ship->mpModel->getBaseTRMtx(), offset, ¤t.pos); daObjPirateship::Act_c* ship = l_p_ship; shape_angle = ship->shape_angle; @@ -103,10 +103,9 @@ BOOL daKaji_c::_execute() { mpMorf->play(NULL, 0, 0); mpMorf->getModel()->setBaseScale(mScale); - PSMTXTrans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); - - mpMorf->getModel()->i_setBaseTRMtx(mDoMtx_stack_c::get()); + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); MTXCopy(mDoMtx_stack_c::get(), mMtx); return FALSE; @@ -143,12 +142,12 @@ static BOOL daKajiDraw(void* i_this) { } /* 00000568-00000570 .text daKajiIsDelete__FPv */ -static BOOL daKajiIsDelete(void* actor) { +static BOOL daKajiIsDelete(void* i_this) { return TRUE; } static actor_method_class daKajiMethodTable = { - (process_method_func)daKajiCreate, + (process_method_func)daKajiCreate, (process_method_func)daKajiDelete, (process_method_func)daKajiExecute, (process_method_func)daKajiIsDelete, diff --git a/src/d/actor/d_a_mozo.cpp b/src/d/actor/d_a_mozo.cpp index 4651ca59b..fd256d8e7 100644 --- a/src/d/actor/d_a_mozo.cpp +++ b/src/d/actor/d_a_mozo.cpp @@ -163,7 +163,7 @@ void daMozo_c::set_mtx() { mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::YrotM(getAngle().y); - mdl->i_setBaseTRMtx(mDoMtx_stack_c::get()); + mdl->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000AAC-00000C38 .text anime_proc__8daMozo_cFv */ diff --git a/src/d/actor/d_a_nh.cpp b/src/d/actor/d_a_nh.cpp index 141af2275..39380e97e 100644 --- a/src/d/actor/d_a_nh.cpp +++ b/src/d/actor/d_a_nh.cpp @@ -3,42 +3,266 @@ // Translation Unit: d_a_nh.cpp // -#include "d_a_nh.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_com_inf_game.h" +#include "d/d_procname.h" +#include "d/d_cc_d.h" +#include "d/d_bg_s_acch.h" +#include "d/d_bg_s_gnd_chk.h" +#include "m_Do/m_Do_hostIO.h" +#include "m_Do/m_Do_mtx.h" +#include "JSystem/JUtility/JUTAssert.h" + +struct daNh_HIO_c__Registers { + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 mGravity; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 mModelScale; + /* 0x3C */ s16 field_0x3c; + /* 0x3E */ s16 field_0x3e; + /* 0x40 */ s16 field_0x40; +}; // Size: 0x3C + +class daNh_HIO_c : public JORReflexible { +public: + daNh_HIO_c(); + virtual ~daNh_HIO_c(); + +public: + /* 0x04 */ s8 mChildID; + /* 0x08 */ daNh_HIO_c__Registers reg; + /* 0x44 */ fopAc_ac_c* unk44; +}; // Size: 0x44 + +static daNh_HIO_c l_HIO; + +static dCcD_SrcCyl l_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0xFFFFFFFF, + /* SrcObjTg SPrm */ 0x03, + /* SrcObjCo SPrm */ 0x19, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0x04, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 10.0f, + /* Height */ 20.0f, + }, +}; + +class daNh_c : fopAc_ac_c { +public: + typedef BOOL (daNh_c::*daNh_c_ActionFunc)(void*); + + enum ActionStatus { + ACTION_ENDING = -1, + ACTION_STARTING = 0, + ACTION_ONGOING = 1, + }; + + ~daNh_c(); + void setBaseMtx(); + BOOL createHeap(); + s32 create(); + BOOL init(); + void action(void*); + BOOL setAction(daNh_c_ActionFunc, void*); + BOOL checkBinCatch(); + void searchPlayer(); + void moveProc(float, float, short); + f32 getHomeDistance(); + BOOL checkTimer(); + void BGCheck(); + void airMove(); + BOOL waitAction(void*); + BOOL checkEscapeEnd(); + BOOL escapeAction(void*); + BOOL returnAction(void*); + BOOL execute(); + BOOL initBrkAnm(bool); + void playBrkAnm(); + BOOL draw(); + +public: + /* 0x290 */ u8 temp1[0x298 - 0x290]; + /* 0x298 */ J3DModel* mpModel; + /* 0x29C */ dBgS_ObjAcch mAcch; + /* 0x460 */ dBgS_AcchCir mAcchCir; + /* 0x4A0 */ dCcD_Stts mStts; + /* 0x4DC */ dCcD_Cyl mCyl; + /* 0x60C */ mDoExt_brkAnm mBrkAnm; + /* 0x624 */ u8 temp2[0x630 - 0x624]; + /* 0x630 */ cBgS_PolyInfo mPolyInfo; + /* 0x640 */ daNh_c_ActionFunc mCurrActionFunc; + /* 0x64C */ Mtx mMtx; + /* 0x67C */ f32 mPlayerDist; + /* 0x680 */ f32 mGroundY; + /* 0x684 */ int mTimer; + /* 0x688 */ s32 unk688; + /* 0x68C */ u8 unk68C; + /* 0x68D */ s8 mActionStatus; + /* 0x68E */ u8 unk68E; + /* 0x68F */ u8 unk68F; + /* 0x690 */ u8 unk690; + /* 0x691 */ u8 unk691; + /* 0x692 */ u8 temp5[0x694 - 0x692]; + /* 0x694 */ s16 unk694; + /* 0x696 */ s16 unk696; + /* 0x698 */ s16 unk698; + /* 0x69A */ s16 unk69A; + /* 0x69C */ u8 temp6[0x6A0 - 0x69C]; + /* 0x6A0 */ f32 unk6A0; + /* 0x6A4 */ u8 temp7[0x6A8 - 0x6A4]; +}; /* 800F95B8-800F9654 .text __ct__10daNh_HIO_cFv */ daNh_HIO_c::daNh_HIO_c() { /* Nonmatching */ + mChildID = -1; + static const daNh_HIO_c__Registers init_data = { + 200.0f, + 100.0f, + -50.0f, + 140.0f, + 0.95f, + 5.0f, + 50.0f, + 1.0f, + -1.0f, + /* mGravity */ 0.25f, + 250.0f, + 600.0f, + /* mModelScale */ 2.5f, + 0x2000, + 0x20, + 0x12C, + }; + reg = init_data; } +/* 800FAEAC-800FAEF4 .text __dt__10daNh_HIO_cFv */ +daNh_HIO_c::~daNh_HIO_c() {} + /* 800F9654-800F9874 .text __dt__6daNh_cFv */ daNh_c::~daNh_c() { - /* Nonmatching */ + if (l_HIO.mChildID >= 0) { + mDoHIO_root.mDoHIO_deleteChild(l_HIO.mChildID); + l_HIO.mChildID = -1; + } } /* 800F9874-800F9980 .text setBaseMtx__6daNh_cFv */ void daNh_c::setBaseMtx() { - /* Nonmatching */ + J3DModel* model = mpModel; + mScale.setAll(l_HIO.reg.mModelScale); + model->setBaseScale(mScale); + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::YrotM(shape_angle.y); + MTXCopy(mDoMtx_stack_c::get(), model->getBaseTRMtx()); + + cXyz offset; + offset.z = 0.0f; + offset.x = 0.0f; + offset.y = l_HIO.reg.field_0x14; + cXyz temp; + cMtx_multVec(mDoMtx_stack_c::get(), &offset, &temp); + PSMTXTrans(mDoMtx_stack_c::get(), temp.x, temp.y, temp.z); + mDoMtx_stack_c::scaleM(l_HIO.reg.field_0x18, l_HIO.reg.field_0x18, l_HIO.reg.field_0x18); + MTXCopy(mDoMtx_stack_c::get(), mMtx); } /* 800F9980-800F9A54 .text createHeap__6daNh_cFv */ -void daNh_c::createHeap() { - /* Nonmatching */ +BOOL daNh_c::createHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Always", 0x34); // nh.bdl + JUT_ASSERT(359, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (!mpModel) { + return FALSE; + } + if (!initBrkAnm(false)) { + return FALSE; + } + return TRUE; } /* 800F9A54-800F9A74 .text checkCreateHeap__FP10fopAc_ac_c */ -void checkCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL checkCreateHeap(fopAc_ac_c* i_this) { + return ((daNh_c*)i_this)->createHeap(); } /* 800F9A74-800F9C8C .text create__6daNh_cFv */ -void daNh_c::create() { - /* Nonmatching */ +s32 daNh_c::create() { + static u32 a_heap_size_tbl; + static s8 init; + if (!init) { + a_heap_size_tbl = 0x4000; + init = 1; + } + + s32 phase_state = cPhs_COMPLEATE_e; + + fopAcM_SetupActor(this, daNh_c); + + if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)&checkCreateHeap, a_heap_size_tbl)) { + return cPhs_ERROR_e; + } + + mCullMtx = mpModel->getBaseTRMtx(); + + if (l_HIO.mChildID < 0) { + l_HIO.mChildID = mDoHIO_root.mDoHIO_createChild("森のほたる", &l_HIO); + l_HIO.unk44 = this; + } + if (!this->init()) { + phase_state = cPhs_ERROR_e; + } + + return phase_state; } /* 800F9C8C-800F9D64 .text init__6daNh_cFv */ -void daNh_c::init() { +BOOL daNh_c::init() { /* Nonmatching */ + mGravity = l_HIO.reg.mGravity; + + BGCheck(); + + mStts.Init(0xFF, 0xFF, this); + mCyl.Set(l_cyl_src); + mCyl.SetStts(&mStts); + + setBaseMtx(); + + mEyePos = mAttentionInfo.mPosition = current.pos; + + return TRUE; } /* 800F9D64-800F9DF4 .text action__6daNh_cFPv */ @@ -47,12 +271,27 @@ void daNh_c::action(void*) { } /* 800F9DF4-800F9EB8 .text setAction__6daNh_cFM6daNh_cFPCvPvPv_iPv */ -void daNh_c::setAction(int (daNh_c::*)(void*), void*) { +BOOL daNh_c::setAction(daNh_c_ActionFunc actionFunc, void* arg) { /* Nonmatching */ + if (mCurrActionFunc != actionFunc) { + if (mCurrActionFunc != NULL) { + mActionStatus = ACTION_ENDING; + (this->*mCurrActionFunc)(arg); + } + mCurrActionFunc = actionFunc; + mActionStatus = ACTION_STARTING; + unk694 = 0; + unk696 = 0; + unk698 = 0; + unk69A = 0; + unk6A0 = 0.0f; + (this->*mCurrActionFunc)(arg); + } + return TRUE; } /* 800F9EB8-800F9F3C .text checkBinCatch__6daNh_cFv */ -void daNh_c::checkBinCatch() { +BOOL daNh_c::checkBinCatch() { /* Nonmatching */ } @@ -67,102 +306,237 @@ void daNh_c::moveProc(float, float, short) { } /* 800FA19C-800FA260 .text getHomeDistance__6daNh_cFv */ -void daNh_c::getHomeDistance() { - /* Nonmatching */ +f32 daNh_c::getHomeDistance() { + cXyz delta = orig.pos - current.pos; + return cXyz(delta.x, 0.0f, delta.z).abs(); } /* 800FA260-800FA2E4 .text checkTimer__6daNh_cFv */ -void daNh_c::checkTimer() { - /* Nonmatching */ +BOOL daNh_c::checkTimer() { + if (unk691 == 1 && !cLib_calcTimer(&mTimer)) { + unk688 -= 4; + if (unk688 < 0) { + unk688 = 0; + } + if (unk688 == 0) { + fopAcM_delete(this); + return TRUE; + } + } + return FALSE; } /* 800FA2E4-800FA568 .text BGCheck__6daNh_cFv */ void daNh_c::BGCheck() { - /* Nonmatching */ + dBgS_ObjGndChk_All gndChk; + gndChk.SetPos(¤t.pos); + f32 groundY = dComIfG_Bgsp()->GroundCross(&gndChk); + if (groundY != -1000000000.0f) { + mGroundY = groundY; + mTevStr.mRoomNo = current.roomNo = dComIfG_Bgsp()->GetRoomId(gndChk); + mTevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(gndChk); + } } /* 800FA568-800FA5B4 .text airMove__6daNh_cFv */ void daNh_c::airMove() { - /* Nonmatching */ + f32 idealY = mGroundY + l_HIO.reg.field_0x20; + if (current.pos.y < idealY - 10.0f) { + mMaxFallSpeed = l_HIO.reg.field_0x24; + } else if (current.pos.y > idealY + 10.0f) { + mMaxFallSpeed = l_HIO.reg.field_0x28; + } } /* 800FA5B4-800FA674 .text waitAction__6daNh_cFPv */ -void daNh_c::waitAction(void*) { - /* Nonmatching */ +BOOL daNh_c::waitAction(void*) { + if (mActionStatus == ACTION_STARTING) { + mActionStatus += 1; // ACTION_ONGOING + mPlayerDist = fopAcM_searchPlayerDistance(this); + } else if (mActionStatus != ACTION_ENDING) { + cLib_addCalc(&speedF, 0.0f, 0.1f, 10.0f, 1.0f); + if (getHomeDistance() > 50.0f) { + setAction(&returnAction, NULL); + } + } + return TRUE; } /* 800FA674-800FA78C .text checkEscapeEnd__6daNh_cFv */ -void daNh_c::checkEscapeEnd() { - /* Nonmatching */ +BOOL daNh_c::checkEscapeEnd() { + cXyz deltaPos = orig.pos - current.pos; + if (unk691 != 1) { + if (!cLib_calcTimer(&unk694)) { + setAction(&waitAction, NULL); + return TRUE; + } + if (deltaPos.abs2XZ() > l_HIO.reg.field_0x30*l_HIO.reg.field_0x30) { + setAction(&returnAction, NULL); + return TRUE; + } + } + return FALSE; } /* 800FA78C-800FA880 .text escapeAction__6daNh_cFPv */ -void daNh_c::escapeAction(void*) { - /* Nonmatching */ +BOOL daNh_c::escapeAction(void*) { + if (mActionStatus == ACTION_STARTING) { + mActionStatus += 1; // ACTION_ONGOING + unk68F = 0; + unk690 = 0; + unk694 = 150; + } else if (mActionStatus != ACTION_ENDING) { + if (!checkEscapeEnd()) { + s16 angle = fopAcM_searchPlayerAngleY(this) + 0x8000; + if (!cLib_calcTimer(&unk690)) { + unk68F ^= 1; + unk690 = cLib_getRndValue(15, 20); + } + angle += unk68F ? -0x2000 : 0x2000; + moveProc(5.0f, 0.5f, angle); + } + } + return TRUE; } /* 800FA880-800FAA34 .text returnAction__6daNh_cFPv */ -void daNh_c::returnAction(void*) { - /* Nonmatching */ +BOOL daNh_c::returnAction(void*) { + if (mActionStatus == ACTION_STARTING) { + mActionStatus += 1; // ACTION_ONGOING + unk68F = 0; + unk690 = 0; + unk694 = 150; + } else if (mActionStatus != ACTION_ENDING) { + if (getHomeDistance() < 50.0f) { + setAction(&waitAction, NULL); + } else { + s16 targetAngle = cLib_targetAngleY(¤t.pos, &orig.pos); + cXyz delta = orig.pos - current.pos; + f32 distXZ = cXyz(delta.x, 0.0f, delta.z).abs2(); + if (distXZ < l_HIO.reg.field_0x30*l_HIO.reg.field_0x30) { + s16 temp2 = targetAngle - fopAcM_searchPlayerAngleY(this); + if (abs(temp2) < 0x1000) { + if (temp2 < 0) { + targetAngle -= 0x4000; + } else { + targetAngle += 0x4000; + } + } + } + if (!cLib_calcTimer(&unk690)) { + unk68F ^= 1; + unk690 = cLib_getRndValue(15, 20); + } + targetAngle += (unk68F ? -0x2000 : 0x2000); + moveProc(5.0f, 0.5f, targetAngle); + } + } + return TRUE; } /* 800FAA34-800FABE0 .text execute__6daNh_cFv */ -void daNh_c::execute() { +BOOL daNh_c::execute() { /* Nonmatching */ } /* 800FABE0-800FACC4 .text initBrkAnm__6daNh_cFb */ -void daNh_c::initBrkAnm(bool) { - /* Nonmatching */ +BOOL daNh_c::initBrkAnm(bool i_modify) { + J3DModelData* modelData = mpModel->getModelData(); + bool success = false; + + J3DAnmTevRegKey* a_brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Always", 0x4E); // tnh.brk + JUT_ASSERT(883, a_brk != 0); + + if (mBrkAnm.init(modelData, a_brk, true, 2, 1.0f, 0, -1, i_modify, false)) { + success = true; + } + return success; } /* 800FACC4-800FACE8 .text playBrkAnm__6daNh_cFv */ void daNh_c::playBrkAnm() { - /* Nonmatching */ + mBrkAnm.play(); } /* 800FACE8-800FAE1C .text draw__6daNh_cFv */ -void daNh_c::draw() { - /* Nonmatching */ +BOOL daNh_c::draw() { + g_env_light.settingTevStruct(0, ¤t.pos, &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + + J3DModelData* modelData = mpModel->getModelData(); + + mBrkAnm.entry(modelData); + mDoExt_modelUpdateDL(mpModel); + modelData->getMaterialTable().removeTevRegAnimator(mBrkAnm.getBrkAnm()); + + J3DMaterial* mat = modelData->getMaterialNodePointer(0); + if (mat) { + J3DTevBlock* tevBlock = mat->getTevBlock(); + if (tevBlock) { + GXColorS10* color = tevBlock->getTevColor(1); + if (color) { + unk68E = ((color->r + color->g + color->b) / 3) >> 2; + } + + GXColor* kColor = tevBlock->getTevKColor(3); + if (kColor) { + kColor->a = unk688; + } + } + } + + dComIfGd_setAlphaModel(0, mMtx, unk68E); + + return TRUE; } /* 800FAE1C-800FAE3C .text daNh_Draw__FP6daNh_c */ -void daNh_Draw(daNh_c*) { - /* Nonmatching */ +BOOL daNh_Draw(daNh_c* i_this) { + return i_this->draw(); } /* 800FAE3C-800FAE5C .text daNh_Execute__FP6daNh_c */ -void daNh_Execute(daNh_c*) { - /* Nonmatching */ +BOOL daNh_Execute(daNh_c* i_this) { + return i_this->execute(); } /* 800FAE5C-800FAE64 .text daNh_IsDelete__FP6daNh_c */ -void daNh_IsDelete(daNh_c*) { - /* Nonmatching */ +BOOL daNh_IsDelete(daNh_c* i_this) { + return TRUE; } /* 800FAE64-800FAE8C .text daNh_Delete__FP6daNh_c */ -void daNh_Delete(daNh_c*) { - /* Nonmatching */ +BOOL daNh_Delete(daNh_c* i_this) { + i_this->~daNh_c(); + return TRUE; } /* 800FAE8C-800FAEAC .text daNh_Create__FP10fopAc_ac_c */ -void daNh_Create(fopAc_ac_c*) { - /* Nonmatching */ +s32 daNh_Create(fopAc_ac_c* i_this) { + return ((daNh_c*)i_this)->create(); } -/* 800FAEAC-800FAEF4 .text __dt__10daNh_HIO_cFv */ -daNh_HIO_c::~daNh_HIO_c() { - /* Nonmatching */ -} - -/* 800FAEF4-800FAF10 .text cLib_calcTimer__FPi */ -void cLib_calcTimer(int*) { - /* Nonmatching */ -} - -/* 800FAF10-800FAF84 .text cLib_getRndValue__Fii */ -void cLib_getRndValue(int, int) { - /* Nonmatching */ -} +static actor_method_class l_daNh_Method = { + (process_method_func)daNh_Create, + (process_method_func)daNh_Delete, + (process_method_func)daNh_Execute, + (process_method_func)daNh_IsDelete, + (process_method_func)daNh_Draw, +}; +extern actor_process_profile_definition g_profile_NH = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 7, + /* ListPrio */ fpcLy_CURRENT_e, + /* ProcName */ PROC_NH, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daNh_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x013C, + /* Actor SubMtd */ &l_daNh_Method, + /* Status */ 0x00040100, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_0_e, +}; diff --git a/src/d/actor/d_a_obj_Ygush00.cpp b/src/d/actor/d_a_obj_Ygush00.cpp index f7359fe7f..13ff1a2cd 100644 --- a/src/d/actor/d_a_obj_Ygush00.cpp +++ b/src/d/actor/d_a_obj_Ygush00.cpp @@ -95,7 +95,7 @@ s32 daObjYgush00_c::_create() { if (fopAcM_entrySolidHeap(this, (heapCallbackFunc)solidHeapCB, 0x740) == 1) { mpModel->setBaseScale(mScale); mDoMtx_stack_c::transS(getPosition()); - mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, diff --git a/src/d/actor/d_a_obj_movebox.cpp b/src/d/actor/d_a_obj_movebox.cpp index 4f64281d4..675152079 100644 --- a/src/d/actor/d_a_obj_movebox.cpp +++ b/src/d/actor/d_a_obj_movebox.cpp @@ -474,7 +474,7 @@ namespace daObjMovebox { } if (mpModel) { - mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } MTXCopy(mDoMtx_stack_c::get(), mMtx); diff --git a/src/d/actor/d_a_obj_paper.cpp b/src/d/actor/d_a_obj_paper.cpp index 8c39962ba..0211638e0 100644 --- a/src/d/actor/d_a_obj_paper.cpp +++ b/src/d/actor/d_a_obj_paper.cpp @@ -293,7 +293,7 @@ namespace daObjPaper { mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); - mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000948-00000984 .text init_mtx__Q210daObjPaper5Act_cFv */ diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 9883608d9..9681373a3 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -1186,7 +1186,7 @@ void dNpc_EventCut_c::cutMoveToPosStart() { } void dNpc_EventCut_c::cutMoveToPosProc() { - s16 angle = cLib_targetAngleY(mpActor->current.pos, mPos); + s16 angle = cLib_targetAngleY(&mpActor->current.pos, &mPos); cXyz temp(pDelDistance * JMASinShort(angle), mPos.y, pDelDistance * JMASCosShort(angle)); diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 88e8f72a7..df949da9a 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -22,12 +22,12 @@ void isCurrentSolidHeap() { } /* 8000DD4C-8000DF24 .text initPlay__14mDoExt_baseAnmFsifssb */ -void mDoExt_baseAnm::initPlay(short, int, float, short, short, bool) { +int mDoExt_baseAnm::initPlay(short, int, float, short, short, bool) { /* Nonmatching */ } /* 8000DF24-8000DFC4 .text play__14mDoExt_baseAnmFv */ -void mDoExt_baseAnm::play() { +int mDoExt_baseAnm::play() { /* Nonmatching */ } @@ -127,17 +127,19 @@ void mDoExt_btkAnm::entry(J3DMaterialTable*, float) { } /* 8000EB74-8000EBA0 .text init__13mDoExt_brkAnmFP12J3DModelDataP15J3DAnmTevRegKeyiifssbi */ -void mDoExt_brkAnm::init(J3DModelData*, J3DAnmTevRegKey*, int, int, float, short, short, bool, int) { - /* Nonmatching */ +int mDoExt_brkAnm::init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, int i_anmPlay, + int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry) { + return init(&i_modelData->getMaterialTable(), i_brk, i_anmPlay, i_attribute, i_rate, + i_start, i_end, i_modify, i_entry); } /* 8000EBA0-8000EBC4 .text entry__13mDoExt_brkAnmFP12J3DModelDataf */ -void mDoExt_brkAnm::entry(J3DModelData*, float) { - /* Nonmatching */ +void mDoExt_brkAnm::entry(J3DModelData* i_modelData, float i_frame) { + entry(&i_modelData->getMaterialTable(), i_frame); } /* 8000EBC4-8000EEE8 .text init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifssbi */ -void mDoExt_brkAnm::init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, float, short, short, bool, int) { +int mDoExt_brkAnm::init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, float, short, short, bool, int) { /* Nonmatching */ } From b4d68622e0a0de8bab7e90e4ae640faa73ca5d77 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Sun, 17 Sep 2023 12:00:36 -0700 Subject: [PATCH 05/89] work on d_stage (#50) --- include/d/actor/d_a_player_link.h | 2 +- include/d/actor/d_a_ship.h | 117 ++ include/d/d_com_inf_game.h | 194 +- include/d/d_event_manager.h | 2 +- include/d/d_kankyo.h | 6 + include/d/d_map.h | 65 + include/d/d_particle.h | 84 + include/d/d_save.h | 58 +- include/d/d_stage.h | 869 ++++++--- include/d/d_timer.h | 40 + include/f_op/f_op_actor_mng.h | 9 +- src/d/d_stage.cpp | 2757 +++++++++++++++++++---------- 12 files changed, 2981 insertions(+), 1222 deletions(-) create mode 100644 include/d/actor/d_a_ship.h create mode 100644 include/d/d_timer.h diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index 47fb44708..bb764bdf8 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -911,7 +911,7 @@ public: void procFanSwing(); void procFanGlide_init(int); void procFanGlide(); - void getDayNightParamData(); + u32 getDayNightParamData(); void setTactModel(); void checkNpcStatus(); void getTactPlayRightArmAnm(s32); diff --git a/include/d/actor/d_a_ship.h b/include/d/actor/d_a_ship.h new file mode 100644 index 000000000..3535baa27 --- /dev/null +++ b/include/d/actor/d_a_ship.h @@ -0,0 +1,117 @@ +#ifndef D_A_SHIP_H +#define D_A_SHIP_H + +#include "f_op/f_op_actor_mng.h" +#include "d/d_particle.h" + +class msg_class; + +class daShip_c : public fopAc_ac_c { +public: + daShip_c(); + + void initStartPos(cXyz const*, s16); + void bodyJointCallBack(int); + void cannonJointCallBack(int); + void craneJointCallBack(); + void headJointCallBack0(); + void headJointCallBack1(int); + void draw(); + void checkForceMessage(); + void setInitMessage(); + void setNextMessage(msg_class*); + void seStart(u32, cXyz*); + void setSailAngle(); + void setControllAngle(s16); + void getMaxWaterY(cXyz*); + void setWaveAngle(s16*, s16*); + void getWaterY(); + void setYPos(); + void checkOutRange(); + void decrementShipSpeed(f32); + void firstDecrementShipSpeed(f32); + void getAimControllAngle(s16); + void setMoveAngle(s16); + void changeDemoEndProc(); + void setCrashData(s16); + void checkNextMode(int); + void setPartOnAnime(u8); + void setPartOffAnime(); + void setPartAnimeInit(u8); + void setSelfMove(int); + void procWait_init(); + void procWait(); + void procReady_init(); + void procReady(); + void procGetOff_init(); + void procGetOff(); + void procPaddleMove_init(); + void procPaddleMove(); + void procSteerMove_init(); + void procSteerMove(); + void procCannonReady_init(); + void procCannonReady(); + void procCannon_init(); + void procCannon(); + void procCraneReady_init(); + void procCraneReady(); + void procCrane_init(); + void procCrane(); + void procCraneUp_init(); + void procCraneUp(); + void procToolDemo_init(); + void procToolDemo(); + void procZevDemo_init(); + void procZevDemo(); + void procTalkReady_init(); + void procTalkReady(); + void procTalk_init(); + void procTalk(); + void procTurn_init(); + void procTurn(); + void procTornadoUp_init(); + void procTornadoUp(); + void procStartModeWarp_init(); + void procStartModeWarp(); + void procTactWarp_init(); + void procTactWarp(); + void procWhirlDown_init(); + void procWhirlDown(); + void procStartModeThrow_init(); + void procStartModeThrow(); + void setEffectData(f32, s16); + void setRoomInfo(); + void incRopeCnt(int, int); + void setRopePos(); + void getAnglePartRate(); + void setTornadoActor(); + void setWhirlActor(); + void setHeadAnm(); + void execute(); + void shipDelete(); + void createHeap(); + void create(); + void getCannonAngleX() const; + void checkForceMove() const; + + /* 0x0290 */ u8 field_0x0290[0x0300 - 0x0290]; + /* 0x0300 */ J3DModel* mpCannonModel; + /* 0x0304 */ J3DModel* mpSalvageArmModel; + /* 0x0308 */ u8 field_0x0308[0x034D - 0x0308]; + /* 0x034D */ u8 field_0x034d; + /* 0x034E */ u8 mShipMode; + /* 0x034F */ u8 field_0x034F[0x0358 - 0x034F]; + /* 0x0358 */ u32 field_0x0358; + /* 0x035C */ int mNextMessageID; + /* 0x0360 */ int mShadowId; + /* 0x0364 */ u8 field_0x0364[0x183C - 0x0364]; + /* 0x183C */ dPa_waveEcallBack field_0x183c; + /* 0x18A0 */ dPa_waveEcallBack field_0x18a0; + /* 0x1904 */ dPa_splashEcallBack field_0x1904; + /* 0x1920 */ dPa_trackEcallBack field_0x1920; + /* 0x1970 */ dPa_rippleEcallBack field_0x1970; + /* 0x1984 */ u8 field_0x1984[0x19C0 - 0x1984]; + /* 0x19C0 */ dPa_rippleEcallBack field_0x19c0; +}; + +#endif /* D_A_SHIP_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 4af46709e..17e6d878c 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -17,6 +17,7 @@ #include "d/d_vibration.h" #include "d/d_wood.h" #include "d/d_demo.h" +#include "d/d_timer.h" class JKRArchive; class JKRExpHeap; @@ -144,6 +145,7 @@ public: s16 getStartStagePoint() { return mCurStage.getPoint(); } void setStartStageLayer(s8 layer) { mCurStage.setLayer(layer); } void setStartStage(dStage_startStage_c* i_startStage) { mCurStage = *i_startStage; } + dStage_startStage_c* getStartStage() { return &mCurStage; } const char* getNextStageName() { return mNextStage.getName(); } dStage_startStage_c* getNextStartStage() { return &mNextStage; } @@ -164,6 +166,22 @@ public: void setLkDemoAnmArchive(JKRArchive* i_arc) { mpLkDArc = i_arc; } void setStatus(u16 status) { mStatus = status; } + void setShipId(u8 i_id) { mShipId = i_id; } + void setShipRoomId(u8 i_id) { mShipRoomId = i_id; } + u8 getShipId() { return mShipId; } + u8 getShipRoomId() { return mShipRoomId; } + + void setAgb(fopAc_ac_c* i_agb) { mpAgb = (daAgb_c*)i_agb; } + + void setIkadaShipBeforePos(Vec& i_pos) { mIkadaLinkPos = i_pos; } + void setIkadaShipId(u8 i_id) { mIkadaShipId = i_id; } + void setIkadaShipBeforeRoomId(u8 i_roomId) { mIkadaShipBeforeRoomId = i_roomId; } + u8 getIkadaShipId() { return mIkadaShipId; } + u8 getIkadaShipBeforeRoomId() { return mIkadaShipBeforeRoomId; } + + dTimer_c* getTimerPtr() { return mTimerInfo.mTimerPtr; } + s32 getTimerMode() { return mTimerInfo.mTimerMode; } + /* 0x0000 */ dBgS mBgS; /* 0x1404 */ dCcS mCcS; /* 0x3DF8 */ dADM mADM; @@ -323,9 +341,10 @@ public: /* 0x4A58 */ camera_class* field_0x4a58; /* 0x4A5C */ dDlst_window_c* field_0x4a5c; /* 0x4A60 */ J2DOrthoGraph* mp2DOrthoGraph; - /* 0x4A64 */ u8 field_0x4A64[0x4A66 - 0x4A64]; - /* 0x4A66 */ u8 mLastSeaRoom; - /* 0x4A67 */ u8 field_0x4A67[0x4A68 - 0x4A67]; + /* 0x4A64 */ u8 mShipId; + /* 0x4A65 */ u8 mShipRoomId; + /* 0x4A66 */ u8 mIkadaShipBeforeRoomId; + /* 0x4A67 */ u8 mIkadaShipId; /* 0x4A68 */ cXyz mIkadaLinkPos; /* 0x4A74 */ void* mpItemTableArchive; /* 0x4A78 */ void* mpFmapDataArchive; @@ -374,6 +393,10 @@ inline BOOL dComIfGs_checkReserveItem(u8 i_itemNo) { return dComIfGs_getpBagItem()->checkReserveItem(i_itemNo); } +inline void dComIfGs_initZone() { + g_dComIfG_gameInfo.save.initZone(); +} + inline u8 dComIfGs_getSelectEquip(int param_0) { return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getSelectEquip(param_0); } @@ -446,6 +469,14 @@ inline void dComIfGs_setRestartRoomParam(u32 i_param) { g_dComIfG_gameInfo.save.getRestart().setRoomParam(i_param); } +inline s8 dComIfGs_getRestartRoomNo() { + return g_dComIfG_gameInfo.save.getRestart().getRoomNo(); +} + +inline s8 dComIfGs_getTurnRestartRoomNo() { + return g_dComIfG_gameInfo.save.getTurnRestart().getRoomNo(); +} + inline void dComIfGs_setStartPoint(s16 i_point) { g_dComIfG_gameInfo.save.getRestart().setStartPoint(i_point); } @@ -528,12 +559,73 @@ inline bool dComIfGs_isItem(int bitNo, int roomNo) { return g_dComIfG_gameInfo.save.isItem(bitNo, roomNo); } +inline void dComIfGs_clearRoomSwitch(int i_zoneNo) { + g_dComIfG_gameInfo.save.getZone(i_zoneNo).getZoneBit().clearRoomSwitch(); +} + +inline void dComIfGs_removeZone(int i_zoneNo) { + g_dComIfG_gameInfo.save.removeZone(i_zoneNo); +} + +inline u32 dComIfGs_getTurnRestartParam() { + return g_dComIfG_gameInfo.save.getTurnRestart().getParam(); +} + +inline cXyz& dComIfGs_getTurnRestartPos() { + return g_dComIfG_gameInfo.save.getTurnRestart().getPos(); +} + +inline cXyz& dComIfGs_getTurnRestartShipPos() { + return g_dComIfG_gameInfo.save.getTurnRestart().getShipPos(); +} + +inline s16 dComIfGs_getTurnRestartAngleY() { + return g_dComIfG_gameInfo.save.getTurnRestart().getAngleY(); +} + +inline s16 dComIfGs_getTurnRestartShipAngleY() { + return g_dComIfG_gameInfo.save.getTurnRestart().getShipAngleY(); +} + +inline u32 dComIfGs_getRestartRoomParam() { + return g_dComIfG_gameInfo.save.getRestart().getRoomParam(); +} + +inline cXyz& dComIfGs_getRestartRoomPos() { + return g_dComIfG_gameInfo.save.getRestart().getRoomPos(); +} + +inline s16 dComIfGs_getRestartRoomAngleY() { + return g_dComIfG_gameInfo.save.getRestart().getRoomAngleY(); +} + +inline void dComIfGs_putSave(int i_stageNo) { + g_dComIfG_gameInfo.save.putSave(i_stageNo); +} + +inline void dComIfGs_getSave(int i_stageNo) { + g_dComIfG_gameInfo.save.getSave(i_stageNo); +} + +inline void dComIfGs_initDan(s8 i_stageNo) { + g_dComIfG_gameInfo.save.initDan(i_stageNo); +} + +inline BOOL dComIfGs_isActor(int i_no, int i_roomNo) { + return g_dComIfG_gameInfo.save.isActor(i_no, i_roomNo); +} + +inline void dComIfGs_setTurnRestart(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, u32 i_param) { + g_dComIfG_gameInfo.save.getTurnRestart().set(i_pos, i_angle, i_roomNo, i_param, i_pos, i_angle, 0); +} + /** * === PLAY === */ void dComIfGp_setNextStage(const char* i_stageName, s16 i_point, s8 i_roomNo, s8 i_layer, f32 i_lastSpeed, u32 i_lastMode, int, s8 i_wipe); +dStage_Ship_data* dComIfGp_getShip(int i_roomNo, int param_1); inline const char* dComIfGp_getStartStageName() { return g_dComIfG_gameInfo.play.getStartStageName(); @@ -563,6 +655,10 @@ inline dStage_startStage_c* dComIfGp_getNextStartStage() { return g_dComIfG_gameInfo.play.getNextStartStage(); } +inline dStage_startStage_c* dComIfGp_getStartStage() { + return g_dComIfG_gameInfo.play.getStartStage(); +} + inline void dComIfGp_setStartStage(dStage_startStage_c* p_startStage) { g_dComIfG_gameInfo.play.setStartStage(p_startStage); } @@ -603,6 +699,14 @@ inline stage_stag_info_class* dComIfGp_getStageStagInfo() { return g_dComIfG_gameInfo.play.getStage().getStagInfo(); } +inline s32 dComIfGp_roomControl_getStayNo() { + return dStage_roomControl_c::getStayNo(); +} + +inline void dComIfGp_roomControl_init() { + g_dComIfG_gameInfo.play.getRoomControl()->init(); +} + inline dStage_roomStatus_c* dComIfGp_roomControl_getStatusRoomDt(int room_no) { return g_dComIfG_gameInfo.play.getRoomControl()->getStatusRoomDt(room_no); } @@ -611,6 +715,26 @@ inline void dComIfGp_roomControl_checkDrawArea() { return g_dComIfG_gameInfo.play.getRoomControl()->checkDrawArea(); } +inline void dComIfGp_roomControl_setStayNo(int stayNo) { + g_dComIfG_gameInfo.play.getRoomControl()->setStayNo(stayNo); +} + +inline void dComIfGp_roomControl_setStatusFlag(int i_roomNo, u8 i_flag) { + g_dComIfG_gameInfo.play.getRoomControl()->setStatusFlag(i_roomNo, i_flag); +} + +inline void dComIfGp_roomControl_zoneCountCheck(int i_roomNo) { + g_dComIfG_gameInfo.play.getRoomControl()->zoneCountCheck(i_roomNo); +} + +inline void dComIfGp_roomControl_setTimePass(int isPassing) { + g_dComIfG_gameInfo.play.getRoomControl()->SetTimePass(isPassing); +} + +inline int dComIfGp_roomControl_loadRoom(int param_0, u8* param_1) { + return g_dComIfG_gameInfo.play.getRoomControl()->loadRoom(param_0, param_1); +} + inline dBgS* dComIfG_Bgsp() { return &g_dComIfG_gameInfo.play.mBgS; } @@ -627,6 +751,30 @@ inline void dComIfGp_getIkadaShipBeforePos(Vec* o_pos) { *o_pos = g_dComIfG_gameInfo.play.mIkadaLinkPos; } +inline void dComIfGp_setIkadaShipBeforePos(Vec& i_pos) { + g_dComIfG_gameInfo.play.setIkadaShipBeforePos(i_pos); +} + +inline void dComIfGp_setIkadaShipId(u8 i_id) { + g_dComIfG_gameInfo.play.setIkadaShipId(i_id); +} + +inline void dComIfGp_setIkadaShipBeforeRoomId(u8 i_roomId) { + g_dComIfG_gameInfo.play.setIkadaShipBeforeRoomId(i_roomId); +} + +inline u8 dComIfGp_getIkadaShipId() { + return g_dComIfG_gameInfo.play.getIkadaShipId(); +} + +inline u8 dComIfGp_getIkadaShipBeforeRoomId() { + return g_dComIfG_gameInfo.play.getIkadaShipBeforeRoomId(); +} + +inline stage_scls_info_dummy_class* dComIfGp_getStageSclsInfo() { + return g_dComIfG_gameInfo.play.getStage().getSclsInfo(); +} + inline dStage_stageDt_c& dComIfGp_getStage() { return g_dComIfG_gameInfo.play.getStage(); } @@ -719,6 +867,26 @@ inline void dComIfGp_setStatus(u16 status) { g_dComIfG_gameInfo.play.setStatus(status); } +inline void dComIfGp_setShipId(u8 i_id) { + g_dComIfG_gameInfo.play.setShipId(i_id); +} + +inline void dComIfGp_setShipRoomId(u8 i_id) { + g_dComIfG_gameInfo.play.setShipRoomId(i_id); +} + +inline u8 dComIfGp_getShipId() { + return g_dComIfG_gameInfo.play.getShipId(); +} + +inline u8 dComIfGp_getShipRoomId() { + return g_dComIfG_gameInfo.play.getShipRoomId(); +} + +inline void dComIfGp_setAgb(fopAc_ac_c* i_agb) { + g_dComIfG_gameInfo.play.setAgb(i_agb); +} + inline daPy_py_c* daPy_getPlayerActorClass() { return (daPy_py_c*)dComIfGp_getPlayer(0); } @@ -814,6 +982,14 @@ inline void dComIfGp_evmng_execute() { g_dComIfG_gameInfo.play.executeEvtManager(); } +inline void dComIfGp_evmng_create() { + g_dComIfG_gameInfo.play.getEvtManager().create(); +} + +inline void dComIfGp_evmng_remove() { + g_dComIfG_gameInfo.play.getEvtManager().remove(); +} + /** * === DRAWLIST === */ @@ -950,4 +1126,16 @@ inline void dComIfGp_particle_readScene(u8 particle_no, mDoDvdThd_toMainRam_c** class scene_class; int dComIfG_resetToOpening(scene_class* i_scene); +inline int dComIfG_getTimerMode() { + return g_dComIfG_gameInfo.play.getTimerMode(); +} + +inline dTimer_c* dComIfG_getTimerPtr() { + return g_dComIfG_gameInfo.play.getTimerPtr(); +} + +inline void dComIfG_TimerDeleteRequest() { + dComIfG_getTimerPtr()->deleteRequest(); +} + #endif /* D_COM_D_COM_INF_GAME_H */ diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index e58ebc6a2..b9df33a52 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -28,7 +28,7 @@ public: void getSubstance(dEvDtData_c*, int); void setData(const char*); void create(); - void remove(const char*); + void remove(); void startProc(dEvDtEvent_c*); void closeProc(dEvDtEvent_c*); void endProc(s16, int); diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 519a6a708..15341b97c 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -8,6 +8,12 @@ class J3DModel; +struct color_RGB_class { + u8 r; + u8 g; + u8 b; +}; + class dKy_tevstr_c { public: /* 0x00 */ J3DLightObj mLightObj; diff --git a/include/d/d_map.h b/include/d/d_map.h index 0f8fb22ad..bbb0695ee 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -1,8 +1,73 @@ #ifndef D_MAP_H #define D_MAP_H +class fopAc_ac_c; class dMap_c { public: + static void create(); + void isEnableEnlargementScroll(); + void isEnableDispMap(); + void getKindMapType(); + static void remove(); + void setImage(int, int, f32); + void deleteImage(int); + void setNowRoom(int); + void mapDrawIconFree(s16, s16, u8); + void mapDrawIconSelf(s16, s16, u8); + void mapDrawFrame(u8); + void mapDrawEnlargementSize(f32, f32, f32, f32, u8); + void mapDrawRealSize(f32, f32, u8); + void mapAGBSendIslandData(); + void setPlayerStayAgbMapTypeNow(f32, f32); + void agbMapNoSet(u8, u8); + void agbMapNoSetCall(); + void agbIsMsgSend(); + void agbResetCursor(); + void agbScrollX(); + void agbScrollY(); + void agbFlashCheck(); + void agbIsActive(); + void isInDspArea(f32, f32, bool); + void mapAGBSendStatInit(); + void mapAGBSendMapMain(f32, f32); + void calcEnlargementSizeParameter(f32, f32); + void calcScissor(); + void mapMoveAll(f32, f32, int, f32); + void mapDrawAll(f32, f32, int, f32); + void mapDrawIcon(); + void draw(f32, f32, int, f32); + void point2Grid(f32, f32, s8*, s8*); + void point2GridAndLocal(f32, f32, s8*, s8*, s16*, s16*); + void getCheckPointUseGrid(s8, s8); + void getFmapChkPntPrm(int, s8*, s8*, s16*, s16*, u8*); + void setFmapChkDtPrm(); + void getFmapChkPntDtPnt(int); + void initPoint(); + void setGbaPoint_ocean(u8, f32, f32, s16, u8, u8, u8, u8); + void isPointStayInDspNowRoomAgbScr(s16, s16); + void setCollectPoint(u8, u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); + void setGbaPoint_dungeon(u8, f32, f32, s16, u8, u8, u8, u8); + void getPosAgbMapType(f32, f32, bool); + void setGbaPoint(u8, f32, f32, s16, u8, u8, u8, u8); + void setArriveInfo(f32, f32); + void drawPointPlayer(f32, f32, s16); + void drawPointEnemy(f32, f32); + void drawPointAgbCursor(f32, f32); + void drawPointTbox(f32, f32, f32, f32); + void drawPointDoor(f32, f32, f32, f32, s16, u8); + void drawPointRestart(f32, f32, s16, f32, f32); + void drawPointFriend(f32, f32, f32); + void drawPointShip(f32, f32, s16, f32, f32); + void drawPointGc(u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); + void drawPointMain(u8, u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); + void drawPointAgb(u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); + void getTypeAgbGcFromTypeAcs(u8, u8*, u8*); + void drawPointSingle(u8, f32, f32, f32, s8, s16, u8, u8, u8); + void drawActorPointMiniMap(fopAc_ac_c*); + void mapBufferSendAGB_commonCursor(); + void mapBufferSendAGB_ocean(); + void mapBufferSendAGB_dungeon(); + void mapSetPointAll(); static void mapBufferSendAGB(int); }; diff --git a/include/d/d_particle.h b/include/d/d_particle.h index ea5f872d4..a847e869f 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -1,6 +1,8 @@ #ifndef D_PARTICLE #define D_PARTICLE +#include "JSystem/J3DGraphBase/J3DVertex.h" +#include "JSystem/JGeometry.h" #include "JSystem/JParticle/JPAParticle.h" #include "f_pc/f_pc_node.h" @@ -25,6 +27,11 @@ public: /* 0x13 */ u8 mbAffectedByWind; }; +class dPa_levelEcallBack { +public: + virtual ~dPa_levelEcallBack() {} +}; + class dPa_simpleEcallBack { public: dPa_simpleEcallBack(); @@ -46,6 +53,83 @@ public: /* 0x010 */ dPa_simpleData_c mSimpleData[32]; }; +class dPa_waveEcallBack : public dPa_levelEcallBack { +public: + void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + void remove(); + void executeAfter(JPABaseEmitter*); + void draw(JPABaseEmitter*); + + ~dPa_waveEcallBack(); + + /* 0x04 */ s16 mState; + /* 0x06 */ s16 mFadeTimer; + /* 0x08 */ f32 mVelFade1; + /* 0x0C */ f32 mVel; + /* 0x10 */ f32 mVelSpeed; + /* 0x14 */ f32 mVelFade2; + /* 0x18 */ f32 mMaxParticleVelocity; + /* 0x1C */ cXyz mCollapsePos[2]; + /* 0x34 */ cXyz* mpPos; + /* 0x38 */ csXyz* mpRot; + /* 0x3C */ cXyz mRotMtx[3]; + /* 0x60 */ JPABaseEmitter* mpBaseEmitter; +}; + +class dPa_splashEcallBack : public dPa_levelEcallBack { +public: + void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + void remove(); + void execute(JPABaseEmitter*); + + ~dPa_splashEcallBack(); + + /* 0x04 */ s16 mState; + /* 0x08 */ f32 mScaleTimer; + /* 0x0C */ f32 mMaxScaleTimer; + /* 0x10 */ cXyz* mpPos; + /* 0x14 */ csXyz* mpRot; + /* 0x18 */ JPABaseEmitter* mpBaseEmitter; +}; + +class dPa_trackEcallBack : public dPa_levelEcallBack { +public: + void getMaxWaterY(JGeometry::TVec3*); + void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + void remove(); + void execute(JPABaseEmitter*); + void draw(JPABaseEmitter*); + + ~dPa_trackEcallBack(); + + /* 0x04 */ s16 mState; + /* 0x08 */ f32 mBaseY; + /* 0x0C */ f32 mMinY; + /* 0x10 */ cXyz mPos[3]; + /* 0x34 */ cXyz* mpPos; + /* 0x38 */ csXyz* mpRot; + /* 0x3C */ f32 mExTransY; + /* 0x40 */ f32 mExScaleY; + /* 0x44 */ f32 mVel; + /* 0x48 */ f32 mMinVel; + /* 0x4C */ JPABaseEmitter* mpBaseEmitter; +}; + +class dPa_rippleEcallBack : public dPa_levelEcallBack { +public: + void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + void end(); + void execute(JPABaseEmitter*); + void draw(JPABaseEmitter*); + + ~dPa_rippleEcallBack(); + + /* 0x04 */ JPABaseEmitter* mpBaseEmitter; + /* 0x08 */ cXyz* mPos; + /* 0x0C */ u32 mFlags; + /* 0x10 */ f32 mRate; +}; + class dPa_modelControl_c { public: dPa_modelControl_c(J3DModelData*); diff --git a/include/d/d_save.h b/include/d/d_save.h index 274b3be96..ba742e81c 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -523,6 +523,8 @@ public: dSv_zoneActor_c& getActor() { return mZoneActor; } const dSv_zoneActor_c& getActor() const { return mZoneActor; } + void reset() { mRoomNo = -1; } + /* 0x00 */ s8 mRoomNo; /* 0x02 */ dSv_zoneBit_c mZoneBit; /* 0x0C */ dSv_zoneActor_c mZoneActor; @@ -541,6 +543,13 @@ public: mLastMode = mode; } + s16 getStartPoint() const { return mStartCode; } + u32 getLastMode() const { return mLastMode; } + s8 getRoomNo() const { return mRestartRoom; } + u32 getRoomParam() const { return mRestartParam; } + cXyz& getRoomPos() { return mRestartPos; } + s16 getRoomAngleY() const { return mRestartAngle; } + /* 0x00 */ s8 mRestartRoom; /* 0x01 */ u8 field_0x1; /* 0x02 */ s8 mRoomNo; @@ -557,7 +566,15 @@ public: class dSv_turnRestart_c { public: - /* 8005D5B4 */ void set(cXyz const&, s16, s8, u32, cXyz const&, s16, int); + void set(cXyz const&, s16, s8, u32, cXyz const&, s16, int); + + u32 getParam() const { return mParam; } + cXyz& getPos() { return mPosition; } + s16 getAngleY() const { return mAngleY; } + + cXyz& getShipPos() { return field_0x24; } + s16 getShipAngleY() const { return field_0x30; } + s8 getRoomNo() { return mRoomNo; } /* 0x00 */ cXyz mPosition; /* 0x0C */ u32 mParam; @@ -592,29 +609,34 @@ STATIC_ASSERT(sizeof(dSv_save_c) == 0x728); class dSv_info_c { public: - /* 8005D604 */ void init(); - /* 8005D660 */ void reinit(); - /* 8005D8C8 */ void getSave(int); - /* 8005D988 */ void putSave(int); - /* 8005DA70 */ void initZone(); - /* 8005DAC8 */ int createZone(int); - /* 8005DB24 */ void onSwitch(int, int); - /* 8005DCEC */ void offSwitch(int, int); - /* 8005DE98 */ BOOL isSwitch(int, int); - /* 8005DFE0 */ BOOL revSwitch(int, int); - /* 8005E190 */ void onItem(int, int); - /* 8005E324 */ BOOL isItem(int, int); - /* 8005E4BC */ void onActor(int, int); - /* 8005E5F0 */ BOOL isActor(int, int); - /* 8005E780 */ void memory_to_card(char*, int); - /* 8005EA24 */ void card_to_memory(char*, int); - /* 8005ED00 */ int initdata_to_card(char*, int); + void init(); + void reinit(); + void getSave(int); + void putSave(int); + void initZone(); + int createZone(int); + void onSwitch(int, int); + void offSwitch(int, int); + BOOL isSwitch(int, int); + BOOL revSwitch(int, int); + void onItem(int, int); + BOOL isItem(int, int); + void onActor(int, int); + BOOL isActor(int, int); + void memory_to_card(char*, int); + void card_to_memory(char*, int); + int initdata_to_card(char*, int); dSv_save_c& getSavedata() { return mSavedata; } dSv_player_c& getPlayer() { return mSavedata.getPlayer(); } dSv_event_c& getEvent() { return mSavedata.getEvent(); } dSv_restart_c& getRestart() { return mRestart; } + dSv_turnRestart_c& getTurnRestart() { return mTurnRestart; } dSv_memory_c& getMemory() { return mMemory; } + dSv_zone_c& getZone(int id) { return mZone[id]; } + + void removeZone(int zoneNo) { mZone[zoneNo].reset(); } + void initDan(s8 i_stage) { mDan.init(i_stage); } static const int MEMORY_SWITCH = 0x80; static const int DAN_SWITCH = 0x40; diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 61bf310ac..fca4859eb 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1,15 +1,43 @@ #ifndef D_D_STAGE_H #define D_D_STAGE_H -#include "global.h" -#include "d/d_kankyo.h" #include "SSystem/SComponent/c_lib.h" +#include "SSystem/SComponent/c_sxyz.h" +#include "SSystem/SComponent/c_xyz.h" +#include "d/d_kankyo.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "global.h" + +void dStage_SetErrorRoom(); class JKRExpHeap; -struct stage_vrbox_info_class {}; +class stage_vrbox_info_class { +public: + /* 0x00 */ u32 field_0x00; + /* 0x04 */ u32 field_0x04; + /* 0x08 */ u32 field_0x08; + /* 0x0C */ u32 field_0x0c; + /* 0x10 */ GXColor mKumoColor; + /* 0x14 */ GXColor mKumoCenterColor; + /* 0x18 */ color_RGB_class mSkyColor; + /* 0x1B */ color_RGB_class mUsoUmiColor; + /* 0x1E */ color_RGB_class mKasumiMaeColor; +}; -class stage_tresure_class {}; +class stage_tresure_class { +public: + /* 0x00 */ char mName[8]; + /* 0x08 */ u8 field_0x8; + /* 0x09 */ u8 mTypeFlag; + /* 0x0A */ u8 field_0xa; // part of flag + /* 0x0B */ u8 mAppearType; + /* 0x0C */ Vec mPosition; + /* 0x18 */ s16 mRoomNo; + /* 0x1A */ s16 mRotation; + /* 0x1C */ u8 mItem; + /* 0x1D */ u8 mFlagID; +}; // Size: 0x20 struct stage_stag_info_class { /* 0x00 */ f32 field_0x0; @@ -28,8 +56,8 @@ struct stage_scls_info_class { /* 0x0 */ char mStage[8]; /* 0x8 */ u8 mStart; /* 0x9 */ u8 mRoom; - /* 0xA */ u8 field_0xa; - /* 0xB */ s8 mWipe; + /* 0xA */ s8 mWipe; + /* 0xB */ u8 field_0xb; }; struct stage_scls_info_dummy_class { @@ -37,39 +65,137 @@ struct stage_scls_info_dummy_class { /* 0x04 */ stage_scls_info_class* m_entries; }; -struct stage_lightvec_info_class {}; +class stage_lightvec_info_class { +public: + /* 0x00 */ Vec mPos; + /* 0x0C */ f32 mRadius; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ u8 field_0x18[0x1B - 0x18]; + /* 0x1B */ u8 mFluctuation; +}; -struct stage_pselect_info_class {}; +class stage_pselect_info_class { +public: + /* 0x0 */ u8 mPalIdx[8]; + /* 0x8 */ f32 mChangeRate; +}; struct stage_plight_info_class {}; -struct stage_palet_info_class {}; +class stage_palet_info_class { +public: + /* 0x00 */ color_RGB_class mActor_C0; + /* 0x03 */ color_RGB_class mActor_K0; + /* 0x06 */ color_RGB_class mBG0_C0; + /* 0x09 */ color_RGB_class mBG0_K0; + /* 0x0C */ color_RGB_class mBG1_C0; + /* 0x0F */ color_RGB_class mBG1_K0; + /* 0x12 */ color_RGB_class mBG2_C0; + /* 0x15 */ color_RGB_class mBG2_K0; + /* 0x18 */ color_RGB_class mBG3_C0; + /* 0x1B */ color_RGB_class mBG3_K0; + /* 0x1E */ color_RGB_class mFog; + /* 0x21 */ u8 mVirtIdx; + /* 0x24 */ f32 mFogStartZ; + /* 0x28 */ f32 mFogEndZ; +}; -struct stage_map_info_class {}; +class stage_map_info_class { +public: + /* 0x00 */ u8 field_0x00[0x35 - 0x00]; + /* 0x35 */ u8 field_0x35; + /* 0x36 */ u8 mOceanXZ; + /* 0x37 */ u8 field_0x37[0x38 - 0x37]; +}; -struct stage_map_info_dummy_class {}; +struct stage_map_info_dummy_class { + int num; + stage_map_info_class* m_entries; +}; -struct stage_envr_info_class {}; +class stage_envr_info_class { +public: + /* 0x0 */ u8 mPselIdx[8]; +}; -struct stage_camera_class {}; +struct stage_camera2_data_class { + /* 0x00 */ int field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u8 field_0x12; + /* 0x13 */ u8 field_0x13; + /* 0x14 */ u16 field_0x14; + /* 0x16 */ u16 field_0x16; +}; // Size: 0x18 -struct stage_arrow_class {}; +struct stage_camera_class { + /* 0x0 */ int num; + /* 0x4 */ stage_camera2_data_class* m_entries; +}; -class stage_actor_data_class {}; +struct stage_arrow_data_class { + /* 0x00 */ cXyz mPosition; + /* 0x0C */ csXyz mAngle; +}; // Size: 0x14 -class stage_actor_class {}; +struct stage_arrow_class { + /* 0x00 */ int num; + /* 0x04 */ stage_arrow_data_class* m_entries; +}; -struct stage_tgsc_data_class : public stage_actor_data_class {}; +class stage_actor_data_class { +public: + /* 0x00 */ char mName[8]; + /* 0x08 */ u32 mParameter; + /* 0x0C */ cXyz mSpawnPos; + /* 0x18 */ csXyz mAngle; + /* 0x1E */ u16 mEnemyNo; +}; // Size: 0x20 -class stage_tgsc_class {}; +class stage_actor_class { +public: + /* 0x0 */ int num; + /* 0x4 */ stage_actor_data_class* m_entries; +}; -struct roomRead_data_class {}; +struct stage_tgsc_data_class : public stage_actor_data_class { + /* 0x20 */ u8 field_0x20; + /* 0x21 */ u8 field_0x21; + /* 0x22 */ u8 field_0x22; +}; // Size: 0x24 -struct roomRead_class {}; +class stage_tgsc_class { +public: + /* 0x00 */ int num; + /* 0x04 */ stage_tgsc_data_class* m_entries; +}; -struct dStage_MemoryMap_c {}; +struct roomRead_data_class { + /* 0x0 */ u8 field_0x0; + /* 0x1 */ u8 field_0x1; + /* 0x2 */ u8 field_0x2; + /* 0x4 */ u8* field_0x4; +}; -struct dStage_dPath_c {}; +struct roomRead_class { + /* 0x0 */ int num; + /* 0x4 */ roomRead_data_class** m_entries; +}; + +struct dStage_MemoryMap_c { + /* 0x0 */ int num; + /* 0x4 */ u32* m_entries; +}; + +struct dPath; +struct dStage_dPath_c { + /* 0x0 */ int num; + /* 0x4 */ dPath* m_path; +}; struct dStage_Mult_info { /* 0x0 */ f32 mTransX; @@ -80,207 +206,283 @@ struct dStage_Mult_info { class dStage_Multi_c { public: - /* 0x0 */ int m_num; + /* 0x0 */ int num; /* 0x4 */ dStage_Mult_info* m_entries; }; -struct dStage_SoundInfo_c {}; +struct stage_sound_data { + /* 0x00 */ char field_0x0[8]; + /* 0x08 */ Vec field_0x8; + /* 0x14 */ u8 field_0x14; + /* 0x15 */ u8 field_0x15; + /* 0x16 */ u8 field_0x16; + /* 0x17 */ u8 field_0x17; + /* 0x18 */ u8 field_0x18; + /* 0x19 */ u8 field_0x19; + /* 0x1A */ u8 field_0x1a; +}; // Size: 0x1C -class dStage_FileList_dt_c {}; +struct dStage_SoundInfo_c { + /* 0x0 */ int num; + /* 0x4 */ stage_sound_data* m_entries; +}; -struct dStage_dPnt_c {}; +class dStage_FileList_dt_c { +public: + /* 0x0 */ int mParam; + /* 0x4 */ f32 mSkyboxY; +}; + +struct dStage_dPnt_c { + /* 0x0 */ u8 field_0x0; + /* 0x1 */ u8 field_0x1; + /* 0x2 */ u8 field_0x2; + /* 0x3 */ u8 field_0x3; + /* 0x4 */ cXyz m_position; +}; // Size: 0x10 struct dStage_FloorInfo_c {}; struct dStage_Lbnk_c {}; -struct dStage_MemoryConfig_c {}; +struct dStage_MemoryConfig_data { + /* 0x0 */ u8 m_roomNo; + /* 0x1 */ u8 m_blockID; +}; // Size: 0x2 + +struct dStage_MemoryConfig_c { + /* 0x0 */ int num; + /* 0x4 */ dStage_MemoryConfig_data* m_entries; +}; struct dStage_DMap_c {}; struct dStage_EventInfo_c {}; struct dStage_Ship_data { - /* 0x0 */ u8 field_0x0[0xE]; + /* 0x0 */ cXyz m_pos; + /* 0xC */ s16 m_angle; /* 0xE */ u8 field_0xe; /* 0xF */ u8 field_0xf; }; class dStage_Ship_c { public: - /* 0x0 */ int m_num; + /* 0x0 */ int num; /* 0x4 */ dStage_Ship_data* m_entries; }; +struct FuncTable; + class dStage_dt_c { public: dStage_dt_c() {} - /* vt[ 2] */ virtual void init(void) = 0; - /* vt[ 3] */ virtual s8 getRoomNo() = 0; + /* vt[ 2] */ virtual void init() = 0; + /* vt[ 3] */ virtual int getRoomNo() const = 0; /* vt[ 4] */ virtual void setCamera(stage_camera_class*) = 0; - /* vt[ 5] */ virtual stage_camera_class* getCamera(void) const = 0; + /* vt[ 5] */ virtual stage_camera_class* getCamera() const = 0; /* vt[ 6] */ virtual void setArrow(stage_arrow_class*) = 0; - /* vt[ 7] */ virtual stage_arrow_class* getArrow(void) const = 0; + /* vt[ 7] */ virtual stage_arrow_class* getArrow() const = 0; /* vt[ 8] */ virtual void setPlayer(stage_actor_class*) = 0; - /* vt[ 9] */ virtual stage_actor_class* getPlayer(void) const = 0; + /* vt[ 9] */ virtual stage_actor_class* getPlayer() const = 0; /* vt[10] */ virtual void setPlayerNum(u16) = 0; - /* vt[11] */ virtual u16 getPlayerNum(void) const = 0; + /* vt[11] */ virtual u16 getPlayerNum() const = 0; /* vt[12] */ virtual void setRoom(roomRead_class*) = 0; - /* vt[13] */ virtual roomRead_class* getRoom(void) const = 0; + /* vt[13] */ virtual roomRead_class* getRoom() const = 0; /* vt[14] */ virtual void setMapInfo(stage_map_info_class*) = 0; - /* vt[15] */ virtual stage_map_info_class* getMapInfo(void) const = 0; + /* vt[15] */ virtual stage_map_info_class* getMapInfo() const = 0; /* vt[16] */ virtual stage_map_info_class* getMapInfo2(int) const = 0; /* vt[17] */ virtual void setMapInfoBase(stage_map_info_dummy_class*) = 0; - /* vt[18] */ virtual stage_map_info_dummy_class* getMapInfoBase(void) const = 0; + /* vt[18] */ virtual stage_map_info_dummy_class* getMapInfoBase() const = 0; /* vt[19] */ virtual void setPaletInfo(stage_palet_info_class*) = 0; - /* vt[20] */ virtual stage_palet_info_class* getPaletInfo(void) const = 0; + /* vt[20] */ virtual stage_palet_info_class* getPaletInfo() const = 0; /* vt[21] */ virtual void setPselectInfo(stage_pselect_info_class*) = 0; - /* vt[22] */ virtual stage_pselect_info_class* getPselectInfo(void) const = 0; + /* vt[22] */ virtual stage_pselect_info_class* getPselectInfo() const = 0; /* vt[23] */ virtual void setEnvrInfo(stage_envr_info_class*) = 0; - /* vt[24] */ virtual stage_envr_info_class* getEnvrInfo(void) const = 0; + /* vt[24] */ virtual stage_envr_info_class* getEnvrInfo() const = 0; /* vt[25] */ virtual void setVrboxInfo(stage_vrbox_info_class*) = 0; - /* vt[26] */ virtual stage_vrbox_info_class* getVrboxInfo(void) const = 0; + /* vt[26] */ virtual stage_vrbox_info_class* getVrboxInfo() const = 0; /* vt[27] */ virtual void setPlightInfo(stage_plight_info_class*) = 0; - /* vt[28] */ virtual stage_plight_info_class* getPlightInfo(void) const = 0; + /* vt[28] */ virtual stage_plight_info_class* getPlightInfo() const = 0; /* vt[29] */ virtual void setPaletNumInfo(int) = 0; - /* vt[30] */ virtual int getPaletNumInfo(void) const = 0; + /* vt[30] */ virtual int getPaletNumInfo() const = 0; /* vt[31] */ virtual void setPselectNumInfo(int) = 0; - /* vt[32] */ virtual int getPselectNumInfo(void) const = 0; + /* vt[32] */ virtual int getPselectNumInfo() const = 0; /* vt[33] */ virtual void setEnvrNumInfo(int) = 0; - /* vt[34] */ virtual int getEnvrNumInfo(void) const = 0; + /* vt[34] */ virtual int getEnvrNumInfo() const = 0; /* vt[35] */ virtual void setVrboxNumInfo(int) = 0; - /* vt[36] */ virtual int getVrboxNumInfo(void) const = 0; + /* vt[36] */ virtual int getVrboxNumInfo() const = 0; /* vt[37] */ virtual void setPlightNumInfo(int) = 0; - /* vt[38] */ virtual int getPlightNumInfo(void) const = 0; + /* vt[38] */ virtual int getPlightNumInfo() const = 0; /* vt[39] */ virtual void setLightVecInfo(stage_lightvec_info_class*) = 0; - /* vt[40] */ virtual stage_lightvec_info_class* getLightVecInfo(void) const = 0; + /* vt[40] */ virtual stage_lightvec_info_class* getLightVecInfo() const = 0; /* vt[41] */ virtual void setLightVecInfoNum(int) = 0; - /* vt[42] */ virtual int getLightVecInfoNum(void) const = 0; + /* vt[42] */ virtual int getLightVecInfoNum() const = 0; /* vt[43] */ virtual void setStagInfo(stage_stag_info_class*) = 0; - /* vt[44] */ virtual stage_stag_info_class* getStagInfo(void) const = 0; + /* vt[44] */ virtual stage_stag_info_class* getStagInfo() const = 0; /* vt[45] */ virtual void setSclsInfo(stage_scls_info_dummy_class*) = 0; - /* vt[46] */ virtual stage_scls_info_dummy_class* getSclsInfo(void) const = 0; + /* vt[46] */ virtual stage_scls_info_dummy_class* getSclsInfo() const = 0; /* vt[47] */ virtual void setPntInfo(dStage_dPnt_c*) = 0; - /* vt[48] */ virtual dStage_dPnt_c* getPntInf(void) const = 0; + /* vt[48] */ virtual dStage_dPnt_c* getPntInf() const = 0; /* vt[49] */ virtual void setPathInfo(dStage_dPath_c*) = 0; - /* vt[50] */ virtual dStage_dPath_c* getPathInf(void) const = 0; + /* vt[50] */ virtual dStage_dPath_c* getPathInf() const = 0; /* vt[51] */ virtual void setPnt2Info(dStage_dPnt_c*) = 0; - /* vt[52] */ virtual dStage_dPnt_c* getPnt2Inf(void) const = 0; + /* vt[52] */ virtual dStage_dPnt_c* getPnt2Inf() const = 0; /* vt[53] */ virtual void setPath2Info(dStage_dPath_c*) = 0; - /* vt[54] */ virtual dStage_dPath_c* getPath2Inf(void) const = 0; - /* vt[55] */ virtual void setSoundInf(dStage_SoundInfo_c*) = 0; - /* vt[56] */ virtual dStage_SoundInfo_c* getSoundInf(void) const = 0; + /* vt[54] */ virtual dStage_dPath_c* getPath2Inf() const = 0; + /* vt[55] */ virtual void setSoundInfo(dStage_SoundInfo_c*) = 0; + /* vt[56] */ virtual dStage_SoundInfo_c* getSoundInf() const = 0; /* vt[57] */ virtual void setEventInfo(dStage_EventInfo_c*) = 0; - /* vt[58] */ virtual dStage_EventInfo_c* getEventInfo(void) const = 0; + /* vt[58] */ virtual dStage_EventInfo_c* getEventInfo() const = 0; /* vt[59] */ virtual void setFileListInfo(dStage_FileList_dt_c*) = 0; - /* vt[60] */ virtual dStage_FileList_dt_c* getFileListInfo(void) const = 0; + /* vt[60] */ virtual dStage_FileList_dt_c* getFileListInfo() const = 0; /* vt[61] */ virtual void setFloorInfo(dStage_FloorInfo_c*) = 0; - /* vt[62] */ virtual dStage_FloorInfo_c* getFloorInfo(void) const = 0; + /* vt[62] */ virtual dStage_FloorInfo_c* getFloorInfo() const = 0; /* vt[63] */ virtual void setMemoryConfig(dStage_MemoryConfig_c*) = 0; - /* vt[64] */ virtual dStage_MemoryConfig_c* getMemoryConfig(void) const = 0; + /* vt[64] */ virtual dStage_MemoryConfig_c* getMemoryConfig() const = 0; /* vt[65] */ virtual void setMemoryMap(dStage_MemoryMap_c*) = 0; - /* vt[66] */ virtual dStage_MemoryMap_c* getMemoryMap(void) const = 0; + /* vt[66] */ virtual dStage_MemoryMap_c* getMemoryMap() const = 0; /* vt[67] */ virtual void setShip(dStage_Ship_c*) = 0; /* vt[68] */ virtual dStage_Ship_c* getShip() const = 0; /* vt[69] */ virtual void setMulti(dStage_Multi_c*) = 0; - /* vt[70] */ virtual dStage_Multi_c* getMulti(void) const = 0; + /* vt[70] */ virtual dStage_Multi_c* getMulti() const = 0; /* vt[71] */ virtual void setLbnk(dStage_Lbnk_c*) = 0; - /* vt[72] */ virtual dStage_Lbnk_c* getLbnk(void) const = 0; + /* vt[72] */ virtual dStage_Lbnk_c* getLbnk() const = 0; /* vt[73] */ virtual void setTresure(stage_tresure_class*) = 0; - /* vt[74] */ virtual stage_tresure_class* getTresure(void) const = 0; + /* vt[74] */ virtual stage_tresure_class* getTresure() const = 0; /* vt[75] */ virtual void setDMap(dStage_DMap_c*) = 0; - /* vt[76] */ virtual dStage_DMap_c* getDMap(void) const = 0; + /* vt[76] */ virtual dStage_DMap_c* getDMap() const = 0; /* vt[77] */ virtual void setDrTg(stage_tgsc_class*) = 0; - /* vt[78] */ virtual stage_tgsc_class* getDrTg(void) const = 0; + /* vt[78] */ virtual stage_tgsc_class* getDrTg() const = 0; }; class dStage_stageDt_c : public dStage_dt_c { public: dStage_stageDt_c() {} - /* vt[ 2] */ virtual void init(void); - /* vt[ 3] */ virtual s8 getRoomNo(); - /* vt[ 4] */ virtual void setCamera(stage_camera_class*); - /* vt[ 5] */ virtual stage_camera_class* getCamera(void) const; - /* vt[ 6] */ virtual void setArrow(stage_arrow_class*); - /* vt[ 7] */ virtual stage_arrow_class* getArrow(void) const; - /* vt[ 8] */ virtual void setPlayer(stage_actor_class*); - /* vt[ 9] */ virtual stage_actor_class* getPlayer(void) const; - /* vt[10] */ virtual void setPlayerNum(u16); - /* vt[11] */ virtual u16 getPlayerNum(void) const; - /* vt[12] */ virtual void setRoom(roomRead_class*); - /* vt[13] */ virtual roomRead_class* getRoom(void) const; - /* vt[14] */ virtual void setMapInfo(stage_map_info_class*); - /* vt[15] */ virtual stage_map_info_class* getMapInfo(void) const; + /* vt[ 2] */ virtual void init(); + /* vt[ 3] */ virtual int getRoomNo() const { return -1; } + /* vt[ 4] */ virtual void setCamera(stage_camera_class* i_camera) { mpCamera = i_camera; } + /* vt[ 5] */ virtual stage_camera_class* getCamera() const { return mpCamera; } + /* vt[ 6] */ virtual void setArrow(stage_arrow_class* i_arrow) { mpArrow = i_arrow; } + /* vt[ 7] */ virtual stage_arrow_class* getArrow() const { return mpArrow; } + /* vt[ 8] */ virtual void setPlayer(stage_actor_class* i_player) { mpPlayer = i_player; } + /* vt[ 9] */ virtual stage_actor_class* getPlayer() const { return mpPlayer; } + /* vt[10] */ virtual void setPlayerNum(u16 i_playerNum) { mPlayerNum = i_playerNum; } + /* vt[11] */ virtual u16 getPlayerNum() const { return mPlayerNum; } + /* vt[12] */ virtual void setRoom(roomRead_class* i_room) { mpRoomReads = i_room; } + /* vt[13] */ virtual roomRead_class* getRoom() const { return mpRoomReads; } + /* vt[14] */ virtual void setMapInfo(stage_map_info_class* i_mapInfo) { mpMapInfo = i_mapInfo; } + /* vt[15] */ virtual stage_map_info_class* getMapInfo() const { return mpMapInfo; } /* vt[16] */ virtual stage_map_info_class* getMapInfo2(int) const; - /* vt[17] */ virtual void setMapInfoBase(stage_map_info_dummy_class*); - /* vt[18] */ virtual stage_map_info_dummy_class* getMapInfoBase(void) const; - /* vt[19] */ virtual void setPaletInfo(stage_palet_info_class*); - /* vt[20] */ virtual stage_palet_info_class* getPaletInfo(void) const; - /* vt[21] */ virtual void setPselectInfo(stage_pselect_info_class*); - /* vt[22] */ virtual stage_pselect_info_class* getPselectInfo(void) const; - /* vt[23] */ virtual void setEnvrInfo(stage_envr_info_class*); - /* vt[24] */ virtual stage_envr_info_class* getEnvrInfo(void) const; - /* vt[25] */ virtual void setVrboxInfo(stage_vrbox_info_class*); - /* vt[26] */ virtual stage_vrbox_info_class* getVrboxInfo(void) const; - /* vt[27] */ virtual void setPlightInfo(stage_plight_info_class*); - /* vt[28] */ virtual stage_plight_info_class* getPlightInfo(void) const; - /* vt[29] */ virtual void setPaletNumInfo(int); - /* vt[30] */ virtual int getPaletNumInfo(void) const; - /* vt[31] */ virtual void setPselectNumInfo(int); - /* vt[32] */ virtual int getPselectNumInfo(void) const; - /* vt[33] */ virtual void setEnvrNumInfo(int); - /* vt[34] */ virtual int getEnvrNumInfo(void) const; - /* vt[35] */ virtual void setVrboxNumInfo(int); - /* vt[36] */ virtual int getVrboxNumInfo(void) const; - /* vt[37] */ virtual void setPlightNumInfo(int); - /* vt[38] */ virtual int getPlightNumInfo(void) const; - /* vt[39] */ virtual void setLightVecInfo(stage_lightvec_info_class*); - /* vt[40] */ virtual stage_lightvec_info_class* getLightVecInfo(void) const; - /* vt[41] */ virtual void setLightVecInfoNum(int); - /* vt[42] */ virtual int getLightVecInfoNum(void) const; - /* vt[43] */ virtual void setStagInfo(stage_stag_info_class*); - /* vt[44] */ virtual stage_stag_info_class* getStagInfo(void) const; - /* vt[45] */ virtual void setSclsInfo(stage_scls_info_dummy_class*); - /* vt[46] */ virtual stage_scls_info_dummy_class* getSclsInfo(void) const; - /* vt[47] */ virtual void setPntInfo(dStage_dPnt_c*); - /* vt[48] */ virtual dStage_dPnt_c* getPntInf(void) const; - /* vt[49] */ virtual void setPathInfo(dStage_dPath_c*); - /* vt[50] */ virtual dStage_dPath_c* getPathInf(void) const; - /* vt[51] */ virtual void setPnt2Info(dStage_dPnt_c*); - /* vt[52] */ virtual dStage_dPnt_c* getPnt2Inf(void) const; - /* vt[53] */ virtual void setPath2Info(dStage_dPath_c*); - /* vt[54] */ virtual dStage_dPath_c* getPath2Inf(void) const; - /* vt[55] */ virtual void setSoundInf(dStage_SoundInfo_c*); - /* vt[56] */ virtual dStage_SoundInfo_c* getSoundInf(void) const; - /* vt[57] */ virtual void setEventInfo(dStage_EventInfo_c*); - /* vt[58] */ virtual dStage_EventInfo_c* getEventInfo(void) const; - /* vt[59] */ virtual void setFileListInfo(dStage_FileList_dt_c*); - /* vt[60] */ virtual dStage_FileList_dt_c* getFileListInfo(void) const; - /* vt[61] */ virtual void setFloorInfo(dStage_FloorInfo_c*); - /* vt[62] */ virtual dStage_FloorInfo_c* getFloorInfo(void) const; - /* vt[63] */ virtual void setMemoryConfig(dStage_MemoryConfig_c*); - /* vt[64] */ virtual dStage_MemoryConfig_c* getMemoryConfig(void) const; - /* vt[65] */ virtual void setMemoryMap(dStage_MemoryMap_c*); - /* vt[66] */ virtual dStage_MemoryMap_c* getMemoryMap(void) const; - /* vt[67] */ virtual void setShip(dStage_Ship_c*); - /* vt[68] */ virtual dStage_Ship_c* getShip() const; - /* vt[69] */ virtual void setMulti(dStage_Multi_c*); - /* vt[70] */ virtual dStage_Multi_c* getMulti(void) const; - /* vt[71] */ virtual void setLbnk(dStage_Lbnk_c*); - /* vt[72] */ virtual dStage_Lbnk_c* getLbnk(void) const; - /* vt[73] */ virtual void setTresure(stage_tresure_class*); - /* vt[74] */ virtual stage_tresure_class* getTresure(void) const; - /* vt[75] */ virtual void setDMap(dStage_DMap_c*); - /* vt[76] */ virtual dStage_DMap_c* getDMap(void) const; - /* vt[77] */ virtual void setDrTg(stage_tgsc_class*); - /* vt[78] */ virtual stage_tgsc_class* getDrTg(void) const; + /* vt[17] */ virtual void setMapInfoBase(stage_map_info_dummy_class* i_mapInfoBase) { mpMapInfoBase = i_mapInfoBase; } + /* vt[18] */ virtual stage_map_info_dummy_class* getMapInfoBase() const; + /* vt[19] */ virtual void setPaletInfo(stage_palet_info_class* i_paletInfo) { mpPaletInfo = i_paletInfo; } + /* vt[20] */ virtual stage_palet_info_class* getPaletInfo() const { return mpPaletInfo; } + /* vt[21] */ virtual void setPselectInfo(stage_pselect_info_class* i_pselectInfo) { mpPselectInfo = i_pselectInfo; } + /* vt[22] */ virtual stage_pselect_info_class* getPselectInfo() const { return mpPselectInfo; } + /* vt[23] */ virtual void setEnvrInfo(stage_envr_info_class* i_envrInfo) { mpEnvrInfo = i_envrInfo; } + /* vt[24] */ virtual stage_envr_info_class* getEnvrInfo() const { return mpEnvrInfo; } + /* vt[25] */ virtual void setVrboxInfo(stage_vrbox_info_class* i_vrboxInfo) { mpVrboxInfo = i_vrboxInfo; } + /* vt[26] */ virtual stage_vrbox_info_class* getVrboxInfo() const { return mpVrboxInfo; } + /* vt[27] */ virtual void setPlightInfo(stage_plight_info_class* i_plightInfo) { mpPlightInfo = i_plightInfo; } + /* vt[28] */ virtual stage_plight_info_class* getPlightInfo() const { return mpPlightInfo; } + /* vt[29] */ virtual void setPaletNumInfo(int i_paletNum) { mPaletInfoNum = i_paletNum; } + /* vt[30] */ virtual int getPaletNumInfo() const { return mPaletInfoNum; } + /* vt[31] */ virtual void setPselectNumInfo(int i_pselectNum) { mPselectInfoNum = i_pselectNum; } + /* vt[32] */ virtual int getPselectNumInfo() const { return mPselectInfoNum; } + /* vt[33] */ virtual void setEnvrNumInfo(int i_envrNum) { mEnvrInfoNum = i_envrNum; } + /* vt[34] */ virtual int getEnvrNumInfo() const { return mEnvrInfoNum; } + /* vt[35] */ virtual void setVrboxNumInfo(int i_vrboxNum) { mVrboxInfoNum = i_vrboxNum; } + /* vt[36] */ virtual int getVrboxNumInfo() const { return mVrboxInfoNum; } + /* vt[37] */ virtual void setPlightNumInfo(int i_plightNum) { mPlightInfoNum = i_plightNum; } + /* vt[38] */ virtual int getPlightNumInfo() const { return mPlightInfoNum; } + /* vt[39] */ virtual void setLightVecInfo(stage_lightvec_info_class*) { + dStage_SetErrorRoom(); + OSReport("stage non LightVec data !!\n"); + JUT_ASSERT(2380, 0); + } + /* vt[40] */ virtual stage_lightvec_info_class* getLightVecInfo() const { + OSReport("stage non LightVec data !!\n"); + JUT_ASSERT(2384, 0); + return NULL; + } + /* vt[41] */ virtual void setLightVecInfoNum(int) { + dStage_SetErrorRoom(); + OSReport("stage non LightVecNum data !!\n"); + JUT_ASSERT(2391, 0); + } + /* vt[42] */ virtual int getLightVecInfoNum() const { + OSReport("stage non LightVecNum data !!\n"); + JUT_ASSERT(2395, 0); + return 0; + } + /* vt[43] */ virtual void setStagInfo(stage_stag_info_class* i_stag) { mpStagInfo = i_stag; } + /* vt[44] */ virtual stage_stag_info_class* getStagInfo() const { return mpStagInfo; } + /* vt[45] */ virtual void setSclsInfo(stage_scls_info_dummy_class* i_scls) { mpScls = i_scls; } + /* vt[46] */ virtual stage_scls_info_dummy_class* getSclsInfo() const { return mpScls; } + /* vt[47] */ virtual void setPntInfo(dStage_dPnt_c* i_pnt) { mpPnt = i_pnt; } + /* vt[48] */ virtual dStage_dPnt_c* getPntInf() const { return mpPnt; } + /* vt[49] */ virtual void setPathInfo(dStage_dPath_c* i_path) { mpPath = i_path; } + /* vt[50] */ virtual dStage_dPath_c* getPathInf() const { return mpPath; } + /* vt[51] */ virtual void setPnt2Info(dStage_dPnt_c* i_pnt) { mpPnt2 = i_pnt; } + /* vt[52] */ virtual dStage_dPnt_c* getPnt2Inf() const { return mpPnt2; } + /* vt[53] */ virtual void setPath2Info(dStage_dPath_c* i_path) { mpPath2 = i_path; } + /* vt[54] */ virtual dStage_dPath_c* getPath2Inf() const { return mpPath2; } + /* vt[55] */ virtual void setSoundInfo(dStage_SoundInfo_c* i_soundInfo) { mpSoundInfo = i_soundInfo; } + /* vt[56] */ virtual dStage_SoundInfo_c* getSoundInf() const { return mpSoundInfo; } + /* vt[57] */ virtual void setEventInfo(dStage_EventInfo_c* i_eventInfo) { mpEventInfo = i_eventInfo; } + /* vt[58] */ virtual dStage_EventInfo_c* getEventInfo() const { return mpEventInfo; } + /* vt[59] */ virtual void setFileListInfo(dStage_FileList_dt_c*) { + dStage_SetErrorRoom(); + OSReport("stage non filelist data!\n"); + JUT_ASSERT(2490, 0); + } + /* vt[60] */ virtual dStage_FileList_dt_c* getFileListInfo() const { + OSReport("stage non filelist data!\n"); + JUT_ASSERT(2494, 0); + return NULL; + } + /* vt[61] */ virtual void setFloorInfo(dStage_FloorInfo_c* i_floorInfo) { mpFloorInfo = i_floorInfo; } + /* vt[62] */ virtual dStage_FloorInfo_c* getFloorInfo() const { return mpFloorInfo; } + /* vt[63] */ virtual void setMemoryConfig(dStage_MemoryConfig_c* i_config) { mpMemoryConfig = i_config; } + /* vt[64] */ virtual dStage_MemoryConfig_c* getMemoryConfig() const { return mpMemoryConfig; } + /* vt[65] */ virtual void setMemoryMap(dStage_MemoryMap_c* i_map) { mpMemoryMap = i_map; } + /* vt[66] */ virtual dStage_MemoryMap_c* getMemoryMap() const { return mpMemoryMap; } + /* vt[67] */ virtual void setShip(dStage_Ship_c*) { + dStage_SetErrorRoom(); + OSReport("stage non SHIP data!\n"); + JUT_ASSERT(2561, 0); + } + /* vt[68] */ virtual dStage_Ship_c* getShip() const { + OSReport("stage non SHIP data!\n"); + JUT_ASSERT(2565, 0); + return NULL; + } + /* vt[69] */ virtual void setMulti(dStage_Multi_c* i_multi) { mpMulti = i_multi; } + /* vt[70] */ virtual dStage_Multi_c* getMulti() const { return mpMulti; } + /* vt[71] */ virtual void setLbnk(dStage_Lbnk_c*) { + dStage_SetErrorRoom(); + OSReport("stage non Lbnk data!\n"); + JUT_ASSERT(2590, 0); + } + /* vt[72] */ virtual dStage_Lbnk_c* getLbnk() const { + OSReport("stage non Lbnk data!\n"); + JUT_ASSERT(2597, 0); + return NULL; + } + /* vt[73] */ virtual void setTresure(stage_tresure_class* i_tresure) { mpTresure = i_tresure; } + /* vt[74] */ virtual stage_tresure_class* getTresure() const { return mpTresure; } + /* vt[75] */ virtual void setDMap(dStage_DMap_c* i_dmap) { mpDMap = i_dmap; } + /* vt[76] */ virtual dStage_DMap_c* getDMap() const { return mpDMap; } + /* vt[77] */ virtual void setDrTg(stage_tgsc_class* i_drtg) { mpDrTg = i_drtg; } + /* vt[78] */ virtual stage_tgsc_class* getDrTg() const { return mpDrTg; } public: /* 0x04 */ stage_camera_class* mpCamera; /* 0x08 */ stage_arrow_class* mpArrow; - /* 0x0C */ void* field_0x0c; + /* 0x0C */ stage_actor_class* mpPlayer; /* 0x10 */ roomRead_class* mpRoomReads; /* 0x14 */ stage_map_info_class* mpMapInfo; /* 0x18 */ stage_map_info_dummy_class* mpMapInfoBase; @@ -289,108 +491,236 @@ public: /* 0x24 */ stage_envr_info_class* mpEnvrInfo; /* 0x28 */ stage_vrbox_info_class* mpVrboxInfo; /* 0x2C */ stage_plight_info_class* mpPlightInfo; - /* 0x30 */ void* field_0x30; - /* 0x34 */ void* field_0x34; - /* 0x38 */ void* field_0x38; - /* 0x3C */ int field_0x3c; + /* 0x30 */ int mPaletInfoNum; + /* 0x34 */ int mPselectInfoNum; + /* 0x38 */ int mEnvrInfoNum; + /* 0x3C */ int mVrboxInfoNum; /* 0x40 */ int mPlightInfoNum; - /* 0x44 */ void* field_0x44; + /* 0x44 */ u16 mPlayerNum; /* 0x48 */ stage_stag_info_class* mpStagInfo; /* 0x4C */ stage_scls_info_dummy_class* mpScls; /* 0x50 */ dStage_dPnt_c* mpPnt; /* 0x54 */ dStage_dPath_c* mpPath; /* 0x58 */ dStage_dPnt_c* mpPnt2; /* 0x5C */ dStage_dPath_c* mpPath2; - /* 0x60 */ void* field_0x60; + /* 0x60 */ dStage_SoundInfo_c* mpSoundInfo; /* 0x64 */ dStage_EventInfo_c* mpEventInfo; - /* 0x68 */ void* field_0x68; - /* 0x6C */ void* field_0x6c; - /* 0x70 */ void* field_0x70; + /* 0x68 */ dStage_FloorInfo_c* mpFloorInfo; + /* 0x6C */ dStage_MemoryConfig_c* mpMemoryConfig; + /* 0x70 */ dStage_MemoryMap_c* mpMemoryMap; /* 0x74 */ dStage_Multi_c* mpMulti; - /* 0x78 */ void* field_0x78; - /* 0x7C */ void* field_0x7c; - /* 0x80 */ void* field_0x80; + /* 0x78 */ stage_tresure_class* mpTresure; + /* 0x7C */ dStage_DMap_c* mpDMap; + /* 0x80 */ stage_tgsc_class* mpDrTg; }; class dStage_roomDt_c : public dStage_dt_c { public: - /* vt[ 2] */ virtual void init(void); - /* vt[ 3] */ virtual s8 getRoomNo(); - /* vt[ 4] */ virtual void setCamera(stage_camera_class*); - /* vt[ 5] */ virtual stage_camera_class* getCamera(void) const; - /* vt[ 6] */ virtual void setArrow(stage_arrow_class*); - /* vt[ 7] */ virtual stage_arrow_class* getArrow(void) const; - /* vt[ 8] */ virtual void setPlayer(stage_actor_class*); - /* vt[ 9] */ virtual stage_actor_class* getPlayer(void) const; - /* vt[10] */ virtual void setPlayerNum(u16); - /* vt[11] */ virtual u16 getPlayerNum(void) const; - /* vt[12] */ virtual void setRoom(roomRead_class*); - /* vt[13] */ virtual roomRead_class* getRoom(void) const; - /* vt[14] */ virtual void setMapInfo(stage_map_info_class*); - /* vt[15] */ virtual stage_map_info_class* getMapInfo(void) const; + /* vt[ 2] */ virtual void init(); + /* vt[ 3] */ virtual int getRoomNo() const { return mRoomNo; } + /* vt[ 4] */ virtual void setCamera(stage_camera_class* i_camera) { mpCamera = i_camera; } + /* vt[ 5] */ virtual stage_camera_class* getCamera() const { return mpCamera; } + /* vt[ 6] */ virtual void setArrow(stage_arrow_class* i_arrow) { mpArrow = i_arrow; } + /* vt[ 7] */ virtual stage_arrow_class* getArrow() const { return mpArrow; } + /* vt[ 8] */ virtual void setPlayer(stage_actor_class* i_player) { mpPlayer = i_player; } + /* vt[ 9] */ virtual stage_actor_class* getPlayer() const { return mpPlayer; } + /* vt[10] */ virtual void setPlayerNum(u16 i_playerNum) { mPlayerNum = i_playerNum; } + /* vt[11] */ virtual u16 getPlayerNum() const { return mPlayerNum; } + /* vt[12] */ virtual void setRoom(roomRead_class*) { + dStage_SetErrorRoom(); + OSReport("Room non room data !!\n"); + JUT_ASSERT(1613, 0); + } + /* vt[13] */ virtual roomRead_class* getRoom() const { + OSReport("Room non room data !!\n"); + JUT_ASSERT(1618, 0); + return NULL; + } + /* vt[14] */ virtual void setMapInfo(stage_map_info_class* i_mapInfo) { mpMapInfo = i_mapInfo; } + /* vt[15] */ virtual stage_map_info_class* getMapInfo() const { return mpMapInfo; } /* vt[16] */ virtual stage_map_info_class* getMapInfo2(int) const; - /* vt[17] */ virtual void setMapInfoBase(stage_map_info_dummy_class*); - /* vt[18] */ virtual stage_map_info_dummy_class* getMapInfoBase(void) const; - /* vt[19] */ virtual void setPaletInfo(stage_palet_info_class*); - /* vt[20] */ virtual stage_palet_info_class* getPaletInfo(void) const; - /* vt[21] */ virtual void setPselectInfo(stage_pselect_info_class*); - /* vt[22] */ virtual stage_pselect_info_class* getPselectInfo(void) const; - /* vt[23] */ virtual void setEnvrInfo(stage_envr_info_class*); - /* vt[24] */ virtual stage_envr_info_class* getEnvrInfo(void) const; - /* vt[25] */ virtual void setVrboxInfo(stage_vrbox_info_class*); - /* vt[26] */ virtual stage_vrbox_info_class* getVrboxInfo(void) const; - /* vt[27] */ virtual void setPlightInfo(stage_plight_info_class*); - /* vt[28] */ virtual stage_plight_info_class* getPlightInfo(void) const; - /* vt[29] */ virtual void setPaletNumInfo(int); - /* vt[30] */ virtual int getPaletNumInfo(void) const; - /* vt[31] */ virtual void setPselectNumInfo(int); - /* vt[32] */ virtual int getPselectNumInfo(void) const; - /* vt[33] */ virtual void setEnvrNumInfo(int); - /* vt[34] */ virtual int getEnvrNumInfo(void) const; - /* vt[35] */ virtual void setVrboxNumInfo(int); - /* vt[36] */ virtual int getVrboxNumInfo(void) const; - /* vt[37] */ virtual void setPlightNumInfo(int); - /* vt[38] */ virtual int getPlightNumInfo(void) const; - /* vt[39] */ virtual void setLightVecInfo(stage_lightvec_info_class*); - /* vt[40] */ virtual stage_lightvec_info_class* getLightVecInfo(void) const; - /* vt[41] */ virtual void setLightVecInfoNum(int); - /* vt[42] */ virtual int getLightVecInfoNum(void) const; - /* vt[43] */ virtual void setStagInfo(stage_stag_info_class*); - /* vt[44] */ virtual stage_stag_info_class* getStagInfo(void) const; - /* vt[45] */ virtual void setSclsInfo(stage_scls_info_dummy_class*); - /* vt[46] */ virtual stage_scls_info_dummy_class* getSclsInfo(void) const; - /* vt[47] */ virtual void setPntInfo(dStage_dPnt_c*); - /* vt[48] */ virtual dStage_dPnt_c* getPntInf(void) const; - /* vt[49] */ virtual void setPathInfo(dStage_dPath_c*); - /* vt[50] */ virtual dStage_dPath_c* getPathInf(void) const; - /* vt[51] */ virtual void setPnt2Info(dStage_dPnt_c*); - /* vt[52] */ virtual dStage_dPnt_c* getPnt2Inf(void) const; - /* vt[53] */ virtual void setPath2Info(dStage_dPath_c*); - /* vt[54] */ virtual dStage_dPath_c* getPath2Inf(void) const; - /* vt[55] */ virtual void setSoundInf(dStage_SoundInfo_c*); - /* vt[56] */ virtual dStage_SoundInfo_c* getSoundInf(void) const; - /* vt[57] */ virtual void setEventInfo(dStage_EventInfo_c*); - /* vt[58] */ virtual dStage_EventInfo_c* getEventInfo(void) const; - /* vt[59] */ virtual void setFileListInfo(dStage_FileList_dt_c*); - /* vt[60] */ virtual dStage_FileList_dt_c* getFileListInfo(void) const; - /* vt[61] */ virtual void setFloorInfo(dStage_FloorInfo_c*); - /* vt[62] */ virtual dStage_FloorInfo_c* getFloorInfo(void) const; - /* vt[63] */ virtual void setMemoryConfig(dStage_MemoryConfig_c*); - /* vt[64] */ virtual dStage_MemoryConfig_c* getMemoryConfig(void) const; - /* vt[65] */ virtual void setMemoryMap(dStage_MemoryMap_c*); - /* vt[66] */ virtual dStage_MemoryMap_c* getMemoryMap(void) const; - /* vt[67] */ virtual void setShip(dStage_Ship_c*); - /* vt[68] */ virtual dStage_Ship_c* getShip() const; - /* vt[69] */ virtual void setMulti(dStage_Multi_c*); - /* vt[70] */ virtual dStage_Multi_c* getMulti(void) const; - /* vt[71] */ virtual void setLbnk(dStage_Lbnk_c*); - /* vt[72] */ virtual dStage_Lbnk_c* getLbnk(void) const; - /* vt[73] */ virtual void setTresure(stage_tresure_class*); - /* vt[74] */ virtual stage_tresure_class* getTresure(void) const; - /* vt[75] */ virtual void setDMap(dStage_DMap_c*); - /* vt[76] */ virtual dStage_DMap_c* getDMap(void) const; - /* vt[77] */ virtual void setDrTg(stage_tgsc_class*); - /* vt[78] */ virtual stage_tgsc_class* getDrTg(void) const; + /* vt[17] */ virtual void setMapInfoBase(stage_map_info_dummy_class* i_mapInfoBase) { mpMapInfoBase = i_mapInfoBase; } + /* vt[18] */ virtual stage_map_info_dummy_class* getMapInfoBase() const; + /* vt[19] */ virtual void setPaletInfo(stage_palet_info_class*) { + dStage_SetErrorRoom(); + OSReport("Room non palet data !!\n"); + JUT_ASSERT(1644, 0); + } + /* vt[20] */ virtual stage_palet_info_class* getPaletInfo() const { + OSReport("Room non palet data !!\n"); + JUT_ASSERT(1648, 0); + return NULL; + } + /* vt[21] */ virtual void setPselectInfo(stage_pselect_info_class*) { + dStage_SetErrorRoom(); + OSReport("Room non pselect data !!\n"); + JUT_ASSERT(1655, 0); + } + /* vt[22] */ virtual stage_pselect_info_class* getPselectInfo() const { + OSReport("Room non pselect data !!\n"); + JUT_ASSERT(1659, 0); + return NULL; + } + /* vt[23] */ virtual void setEnvrInfo(stage_envr_info_class*) { + dStage_SetErrorRoom(); + OSReport("Room non envr data !!\n"); + JUT_ASSERT(1666, 0); + } + /* vt[24] */ virtual stage_envr_info_class* getEnvrInfo() const { + OSReport("Room non envr data !!\n"); + JUT_ASSERT(1670, 0); + return NULL; + } + /* vt[25] */ virtual void setVrboxInfo(stage_vrbox_info_class* i_vrbox) { mpVrbox = i_vrbox; } + /* vt[26] */ virtual stage_vrbox_info_class* getVrboxInfo() const { return mpVrbox; } + /* vt[27] */ virtual void setPlightInfo(stage_plight_info_class*) { + dStage_SetErrorRoom(); + OSReport("Room non plight data !!\n"); + JUT_ASSERT(1686, 0); + } + /* vt[28] */ virtual stage_plight_info_class* getPlightInfo() const { + OSReport("Room non plight data !!\n"); + JUT_ASSERT(1690, 0); + return NULL; + } + /* vt[29] */ virtual void setPaletNumInfo(int) { + dStage_SetErrorRoom(); + OSReport("Room non palet num data !!\n"); + JUT_ASSERT(1700, 0); + } + /* vt[30] */ virtual int getPaletNumInfo() const { + OSReport("Room non palet num data !!\n"); + JUT_ASSERT(1704, 0); + return 0; + } + /* vt[31] */ virtual void setPselectNumInfo(int) { + dStage_SetErrorRoom(); + OSReport("Room non pselect num data !!\n"); + JUT_ASSERT(1711, 0); + } + /* vt[32] */ virtual int getPselectNumInfo() const { + OSReport("Room non pselect num data !!\n"); + JUT_ASSERT(1715, 0); + return 0; + } + /* vt[33] */ virtual void setEnvrNumInfo(int) { + dStage_SetErrorRoom(); + OSReport("Room non envr num data !!\n"); + JUT_ASSERT(1722, 0); + } + /* vt[34] */ virtual int getEnvrNumInfo() const { + OSReport("Room non envr num data !!\n"); + JUT_ASSERT(1726, 0); + return 0; + } + /* vt[35] */ virtual void setVrboxNumInfo(int i_vrboxNum) { mVrboxNum = i_vrboxNum; } + /* vt[36] */ virtual int getVrboxNumInfo() const { return mVrboxNum; } + /* vt[37] */ virtual void setPlightNumInfo(int) { + dStage_SetErrorRoom(); + OSReport("Room non plight num data !!\n"); + JUT_ASSERT(1735, 0); + } + /* vt[38] */ virtual int getPlightNumInfo() const { + OSReport("Room non plight num data !!\n"); + JUT_ASSERT(1740, 0); + return 0; + } + /* vt[39] */ virtual void setLightVecInfo(stage_lightvec_info_class* i_lightvecInfo) { mpLightVecInfo = i_lightvecInfo; } + /* vt[40] */ virtual stage_lightvec_info_class* getLightVecInfo() const { return mpLightVecInfo; } + /* vt[41] */ virtual void setLightVecInfoNum(int i_num) { mLightVecInfoNum = i_num; } + /* vt[42] */ virtual int getLightVecInfoNum() const { return mLightVecInfoNum; } + /* vt[43] */ virtual void setStagInfo(stage_stag_info_class*) { + dStage_SetErrorRoom(); + OSReport("Room non stag data !!\n"); + JUT_ASSERT(1769, 0); + } + /* vt[44] */ virtual stage_stag_info_class* getStagInfo() const { + OSReport("Room non stag data !!\n"); + JUT_ASSERT(1773, 0); + return NULL; + } + /* vt[45] */ virtual void setSclsInfo(stage_scls_info_dummy_class* i_scls) { mpScls = i_scls; } + /* vt[46] */ virtual stage_scls_info_dummy_class* getSclsInfo() const { return mpScls; } + /* vt[47] */ virtual void setPntInfo(dStage_dPnt_c*) { + dStage_SetErrorRoom(); + OSReport("Room non Pnt data !\n"); + JUT_ASSERT(1794, 0); + } + /* vt[48] */ virtual dStage_dPnt_c* getPntInf() const { + OSReport("Room non Pnts data !\n"); + JUT_ASSERT(1798, 0); + return NULL; + } + /* vt[49] */ virtual void setPathInfo(dStage_dPath_c*) { + dStage_SetErrorRoom(); + OSReport("Room non Path data !\n"); + JUT_ASSERT(1805, 0); + } + /* vt[50] */ virtual dStage_dPath_c* getPathInf() const { + OSReport("Room non Path data !\n"); + JUT_ASSERT(1809, 0); + return NULL; + } + /* vt[51] */ virtual void setPnt2Info(dStage_dPnt_c* i_pnt) { mpPoint2 = i_pnt; } + /* vt[52] */ virtual dStage_dPnt_c* getPnt2Inf() const { return mpPoint2; } + /* vt[53] */ virtual void setPath2Info(dStage_dPath_c* i_path) { mpPath2 = i_path; } + /* vt[54] */ virtual dStage_dPath_c* getPath2Inf() const { return mpPath2; } + /* vt[55] */ virtual void setSoundInfo(dStage_SoundInfo_c* i_sound) { mpSound = i_sound; } + /* vt[56] */ virtual dStage_SoundInfo_c* getSoundInf() const { return mpSound; } + /* vt[57] */ virtual void setEventInfo(dStage_EventInfo_c*) { + dStage_SetErrorRoom(); + OSReport("Room non event data!\n"); + JUT_ASSERT(1850, 0); + } + /* vt[58] */ virtual dStage_EventInfo_c* getEventInfo() const { + OSReport("Room non event data!\n"); + JUT_ASSERT(1854, 0); + return NULL; + } + /* vt[59] */ virtual void setFileListInfo(dStage_FileList_dt_c* i_filelist) { mpFileList = i_filelist; } + /* vt[60] */ virtual dStage_FileList_dt_c* getFileListInfo() const { return mpFileList; } + /* vt[61] */ virtual void setFloorInfo(dStage_FloorInfo_c* i_floor) { mpFloor = i_floor; } + /* vt[62] */ virtual dStage_FloorInfo_c* getFloorInfo() const { return mpFloor; } + /* vt[63] */ virtual void setMemoryConfig(dStage_MemoryConfig_c*) { + OSReport("Room non memory config data!\n"); + JUT_ASSERT(1900, 0); + } + /* vt[64] */ virtual dStage_MemoryConfig_c* getMemoryConfig() const { + OSReport("Room non memory config data!\n"); + JUT_ASSERT(1909, 0); + return NULL; + } + /* vt[65] */ virtual void setMemoryMap(dStage_MemoryMap_c*) { + OSReport("Room non memory map data!\n"); + JUT_ASSERT(1919, 0); + } + /* vt[66] */ virtual dStage_MemoryMap_c* getMemoryMap() const { + OSReport("Room non memory map data!\n"); + JUT_ASSERT(1928, 0); + return NULL; + } + /* vt[67] */ virtual void setShip(dStage_Ship_c* i_ship) { mpShip = i_ship; } + /* vt[68] */ virtual dStage_Ship_c* getShip() const { return mpShip; } + /* vt[69] */ virtual void setMulti(dStage_Multi_c*) { + OSReport("Room non multi data!\n"); + JUT_ASSERT(1961, 0); + } + /* vt[70] */ virtual dStage_Multi_c* getMulti() const { + OSReport("Room non multi data!\n"); + JUT_ASSERT(1966, 0); + return NULL; + } + /* vt[71] */ virtual void setLbnk(dStage_Lbnk_c* i_lbnk) { mpLbnk = i_lbnk; } + /* vt[72] */ virtual dStage_Lbnk_c* getLbnk() const { return mpLbnk; } + /* vt[73] */ virtual void setTresure(stage_tresure_class* i_tresure) { mpTresure = i_tresure; } + /* vt[74] */ virtual stage_tresure_class* getTresure() const { return mpTresure; } + /* vt[75] */ virtual void setDMap(dStage_DMap_c*) { JUT_ASSERT(2002, 0); } + /* vt[76] */ virtual dStage_DMap_c* getDMap() const { + JUT_ASSERT(2007, 0); + return NULL; + } + /* vt[77] */ virtual void setDrTg(stage_tgsc_class* i_drtg) { mpDrTg = i_drtg; } + /* vt[78] */ virtual stage_tgsc_class* getDrTg() const { return mpDrTg; } public: /* 0x04 */ stage_lightvec_info_class* mpLightVecInfo; @@ -411,9 +741,9 @@ public: /* 0x40 */ stage_tresure_class* mpTresure; /* 0x44 */ stage_tgsc_class* mpDrTg; /* 0x48 */ dStage_FloorInfo_c* mpFloor; - /* 0x4C */ u8 mRoomNo; + /* 0x4C */ s8 mRoomNo; /* 0x4D */ u8 field_0x4D[0x4E - 0x4D]; - /* 0x4E */ short mPlayerNum; + /* 0x4E */ u16 mPlayerNum; /* 0x50 */ int mVrboxNum; }; @@ -453,19 +783,19 @@ STATIC_ASSERT(sizeof(dStage_roomStatus_c) == 0x114); class dStage_roomControl_c { public: dStage_roomControl_c() {} - + void init(); dStage_roomStatus_c* getStatusRoomDt(int); bool checkRoomDisp(int) const; int loadRoom(int, u8*); void zoneCountCheck(int) const; void checkDrawArea() const; - void getDarkStatus(); + dStage_darkStatus_c* getDarkStatus(); void getDarkMode(); void getBgW(int); - static void createMemoryBlock(int, u32); - static void destroyMemoryBlock(void); + static JKRExpHeap* createMemoryBlock(int, u32); + static void destroyMemoryBlock(); static void SetTimePass(int); static JKRExpHeap* getMemoryBlock(int); static void setStayNo(int); @@ -480,17 +810,18 @@ public: static void onStatusDraw(int i_roomNo) { mStatus[i_roomNo].mDraw = true; } static void setProcID(u32 id) { mProcID = id; } static u32 getProcID() { return mProcID; } - static void setStatusProcID(int i_roomNo, unsigned int i_id) { mStatus[i_roomNo].mProcID = i_id; } + static void setStatusProcID(int i_roomNo, unsigned int i_id) { + mStatus[i_roomNo].mProcID = i_id; + } static int getStatusProcID(int i_roomNo) { return mStatus[i_roomNo].mProcID; } static dStage_darkStatus_c& getDarkStatus(int i_idx) { return mDarkStatus[i_idx]; } + static char* getDemoArcName() { return mDemoArcName; } static void setMemoryBlockID(int i_roomNo, int i_blockID) { mStatus[i_roomNo].mMemBlockID = i_blockID; } - static void setBgW(int param_0, dBgW_base* i_bgw) { - mStatus[param_0].mpBgW = i_bgw; - } + static void setBgW(int param_0, dBgW_base* i_bgw) { mStatus[param_0].mpBgW = i_bgw; } BOOL checkStatusFlag(int i_roomNo, u8 flag) const { return cLib_checkBit(mStatus[i_roomNo].mFlags, flag); @@ -500,17 +831,17 @@ public: return cLib_offBit(mStatus[i_roomNo].mFlags, flag); } - void onStatusFlag(int i_roomNo, u8 flag) { - return cLib_onBit(mStatus[i_roomNo].mFlags, flag); - } + void onStatusFlag(int i_roomNo, u8 flag) { return cLib_onBit(mStatus[i_roomNo].mFlags, flag); } - static JKRExpHeap* mMemoryBlock[101]; + static JKRExpHeap* mMemoryBlock[16]; static dStage_roomStatus_c mStatus[64]; static dStage_darkStatus_c mDarkStatus[8]; + static u8 mDarkRatio; static u32 mProcID; static s8 mStayNo; static s8 mOldStayNo; static s8 m_time_pass; + static char mDemoArcName[8]; private: /* 0x0 */ u8 field_0x0[4]; @@ -521,7 +852,7 @@ public: void set(const char*, s8, s16, s8); const char* getName() const { return mName; } s16 getPoint() const { return mPoint; } - s8 getRoomNo() const { return mRoomNo; } + int getRoomNo() const { return mRoomNo; } s8 getLayer() const { return mLayer; } void setLayer(s8 layer) { mLayer = layer; } @@ -547,6 +878,32 @@ private: /* 0xD */ s8 mWipe; }; // Size: 0xE +// unknown name +struct dStage_objectNameInf { + char mName[8]; + s16 mProcName; + s8 mSubtype; + s8 mGbaName; +}; // Size: 0xC + +typedef int (*dStage_Func)(dStage_dt_c*, void*, int, void*); +struct FuncTable { + char identifier[5]; + dStage_Func function; +}; + +// made up name +struct dStage_fileHeader { + /* 0x0 */ int chunkCount; +}; + +// made up name +struct dStage_nodeHeader { + /* 0x0 */ u32 m_tag; + /* 0x4 */ int m_entryNum; + /* 0x8 */ u32 m_offset; +}; + s8 dStage_roomRead_dt_c_GetReverbStage(roomRead_class&, int); int dStage_mapInfo_GetOceanZ(stage_map_info_class*); int dStage_mapInfo_GetOceanX(stage_map_info_class*); @@ -564,4 +921,20 @@ inline u8 dStage_stagInfo_GetParticleNo(stage_stag_info_class* i_stagInfo) { return (i_stagInfo->field_0x0a >> 0x3) & 0xFF; } +inline u8 dStage_roomRead_dt_c_GetLoadRoomIndex(u8 param_0) { + return param_0 & 0x3f; +} + +inline u8 dStage_roomRead_dt_c_GetReverb(roomRead_data_class& room) { + return room.field_0x1 & 0x7F; +} + +inline s32 dStage_roomRead_dt_c_GetTimePass(roomRead_data_class& data) { + return data.field_0x2 & 3; +} + +inline s32 dStage_sclsInfo_getWipe(stage_scls_info_class* p_info) { + return p_info->mWipe; +} + #endif /* D_D_STAGE_H */ \ No newline at end of file diff --git a/include/d/d_timer.h b/include/d/d_timer.h new file mode 100644 index 000000000..56436c102 --- /dev/null +++ b/include/d/d_timer.h @@ -0,0 +1,40 @@ +#ifndef D_TIMER_H +#define D_TIMER_H + +#include "SSystem/SComponent/c_phase.h" +#include "f_op/f_op_msg_mng.h" + +class dDlst_TimerScrnDraw_c; + +class dTimer_c { +public: + void _create(); + void _execute(); + void _draw(); + void _delete(); + void RestTimeCheck(int); + void deleteCheck(); + void SetSE(); + void start(); + void start(s16); + void stock_start(); + void stock_start(s16); + void stop(u8); + void restart(u8); + void end(int); + void deleteRequest(); + void getTimeMs(); + void getLimitTimeMs(); + void getRestTimeMs(); + + /* 0x000 */ msg_class parent; + /* 0x0FC */ dDlst_TimerScrnDraw_c* mpScrnDraw; + /* 0x100 */ u8 field_0x100[0x104 - 0x100]; + /* 0x104 */ request_of_phase_process_class mPhs; + /* 0x10C */ u8 field_0x10C[0x154 - 0x10C]; + /* 0x154 */ int field_0x154; + /* 0x158 */ u8 field_0x158[0x170 - 0x158]; + /* 0x170 */ JKRHeap* mpSolidHeap; +}; + +#endif /* D_TIMER_H */ \ No newline at end of file diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index f0905f4e7..cca5b9328 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -349,11 +349,12 @@ void fopAcM_delete(fopAc_ac_c* p_actor); s32 fopAcM_delete(unsigned int actorID); -s32 fopAcM_create(s16 procName, u16 enemyNo, u32 parameter, cXyz* p_pos, int roomNo, - csXyz* p_angle, cXyz* p_scale, s8 subType, createFunc p_createFunc); +s32 fopAcM_create(char*, u32 i_parameter, cXyz* i_pos, int i_roomNo, csXyz* i_angle, cXyz* i_scale, createFunc i_createFunc); -s32 fopAcM_create(s16 procName, u32 parameter, cXyz* p_pos, int roomNo, csXyz* p_angle, - cXyz* p_scale, s8 subType); +s32 fopAcM_create(s16 i_procName, u32 i_parameter, cXyz* i_pos, int i_roomNo, csXyz* i_angle, + cXyz* i_scale, s8 i_subType, createFunc i_createFunc); + +inline s32 fopAcM_create(s16 i_procName, createFunc i_createFunc, void*); void* fopAcM_fastCreate(s16 procName, u32 parameter, cXyz* p_pos, int roomNo, csXyz* p_angle, cXyz* p_scale, s8 subType, diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 4ba7775a5..d8adae160 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -3,23 +3,37 @@ // Translation Unit: d_stage.cpp // -#include "d_stage.h" -#include "dolphin/types.h" +#include "d/d_stage.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/string.h" +#include "SSystem/SComponent/c_malloc.h" +#include "d/actor/d_a_player_link.h" +#include "d/actor/d_a_ship.h" +#include "d/d_bg_s.h" +#include "d/d_bg_s_gnd_chk.h" +#include "d/d_com_inf_game.h" +#include "d/d_procname.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" +#include "f_op/f_op_kankyo_mng.h" +#include "f_op/f_op_msg_mng.h" +#include "f_op/f_op_scene_mng.h" /* 80040900-80040938 .text set__18dStage_nextStage_cFPCcScsScSc */ -void dStage_nextStage_c::set(const char*, signed char, short, signed char, signed char) { - /* Nonmatching */ +void dStage_nextStage_c::set(const char* i_stage, s8 i_roomId, s16 i_point, s8 i_layer, s8 i_wipe) { + if (!mEnable) { + mEnable = true; + mWipe = i_wipe; + dStage_startStage_c::set(i_stage, i_roomId, i_point, i_layer); + } } /* 80040938-8004093C .text dStage_SetErrorRoom__Fv */ -void dStage_SetErrorRoom() { - /* Nonmatching */ -} +void dStage_SetErrorRoom() {} /* 8004093C-80040940 .text dStage_SetErrorStage__Fv */ -void dStage_SetErrorStage() { - /* Nonmatching */ -} +void dStage_SetErrorStage() {} /* 80040940-8004094C .text dStage_GetKeepTresureInfo__Fv */ void dStage_GetKeepTresureInfo() { @@ -31,7 +45,8 @@ void dStage_GetKeepDoorInfo() { /* Nonmatching */ } -/* 80040958-80040A78 .text dStage_KeepTresureInfoProc__FP11dStage_dt_cP19stage_tresure_class */ +/* 80040958-80040A78 .text dStage_KeepTresureInfoProc__FP11dStage_dt_cP19stage_tresure_class + */ void dStage_KeepTresureInfoProc(dStage_dt_c*, stage_tresure_class*) { /* Nonmatching */ } @@ -42,53 +57,141 @@ void dStage_KeepDoorInfoProc(dStage_dt_c*, stage_tgsc_class*) { } /* 80040BA8-80040BF4 .text set__19dStage_startStage_cFPCcScsSc */ -void dStage_startStage_c::set(const char*, signed char, short, signed char) { - /* Nonmatching */ +void dStage_startStage_c::set(const char* i_name, s8 i_roomNo, s16 i_point, s8 i_layer) { + strcpy(mName, i_name); + mRoomNo = i_roomNo; + mPoint = i_point; + mLayer = i_layer; } +dStage_roomStatus_c dStage_roomControl_c::mStatus[64]; +JKRExpHeap* dStage_roomControl_c::mMemoryBlock[16]; +dStage_darkStatus_c dStage_roomControl_c::mDarkStatus[8]; + +u32 dStage_roomControl_c::mProcID; +s8 dStage_roomControl_c::mStayNo; +s8 dStage_roomControl_c::mOldStayNo; +u8 dStage_roomControl_c::mDarkRatio; +char dStage_roomControl_c::mDemoArcName[8]; +s8 dStage_roomControl_c::m_time_pass; + /* 80040BF4-80040D0C .text init__20dStage_roomControl_cFv */ void dStage_roomControl_c::init() { - /* Nonmatching */ + mStayNo = -1; + mOldStayNo = -1; + + if (dComIfGp_getStartStagePoint() >= 0) { + dComIfGs_initZone(); + } + + dStage_roomStatus_c* status = mStatus; + for (int i = 0; i < 64; i++) { + status->mRoomDt.init(); + setStatusFlag(i, 0); + status->mDraw = false; + + if (dComIfGp_getStartStagePoint() >= 0) { + status->mZoneNo = -1; + } else if (status->mZoneNo >= 0) { + dComIfGs_clearRoomSwitch(status->mZoneNo); + } + + status->mMemBlockID = -1; + status->mpBgW = NULL; + status++; + } + + mDarkRatio = 0xFF; + + for (int i = 0; i < 16; i++) { + mMemoryBlock[i] = NULL; + } } /* 80040D0C-80040D38 .text getStatusRoomDt__20dStage_roomControl_cFi */ -void dStage_roomControl_c::getStatusRoomDt(int) { - /* Nonmatching */ +dStage_roomStatus_c* dStage_roomControl_c::getStatusRoomDt(int i_statusIdx) { + if (i_statusIdx < 0 || i_statusIdx >= 0x40) { + return NULL; + } + return &mStatus[i_statusIdx]; } /* 80040D38-80040D70 .text getMemoryBlock__20dStage_roomControl_cFi */ -void dStage_roomControl_c::getMemoryBlock(int) { - /* Nonmatching */ +JKRExpHeap* dStage_roomControl_c::getMemoryBlock(int i_roomNo) { + int blockId = getMemoryBlockID(i_roomNo); + + if (blockId < 0) { + return NULL; + } + return mMemoryBlock[blockId]; } /* 80040D70-80040DA8 .text setStayNo__20dStage_roomControl_cFi */ -void dStage_roomControl_c::setStayNo(int) { - /* Nonmatching */ +void dStage_roomControl_c::setStayNo(int i_roomNo) { + mOldStayNo = mStayNo; + mStayNo = i_roomNo; + + if (mStayNo == 0xFF) { + return; + } + + onStatusDraw(mStayNo); } /* 80040DA8-80040DDC .text stayRoomCheck__FiPUci */ -void stayRoomCheck(int, unsigned char*, int) { - /* Nonmatching */ +int stayRoomCheck(int param_0, u8* param_1, int param_2) { + for (; param_0 > 0; param_0--) { + if (param_2 == dStage_roomRead_dt_c_GetLoadRoomIndex(*param_1)) { + return 1; + } + param_1++; + } + return 0; } /* 80040DDC-80040E38 .text createRoomScene__Fi */ -void createRoomScene(int) { - /* Nonmatching */ +int createRoomScene(int param_0) { + int* ptr = (int*)JKRHeap::alloc(4, -4, NULL); + if (ptr == NULL) { + return 0; + } + + *ptr = param_0; + return fopScnM_CreateReq(PROC_ROOM_SCENE, 0x7FFF, 0, (u32)ptr); } /* 80040E38-80040E6C .text checkRoomDisp__20dStage_roomControl_cCFi */ -void dStage_roomControl_c::checkRoomDisp(int) const { - /* Nonmatching */ +bool dStage_roomControl_c::checkRoomDisp(int i_roomNo) const { + if (checkStatusFlag(i_roomNo, 8)) { + return false; + } + + return checkStatusFlag(i_roomNo, 16) ? true : false; } /* 80040E6C-80040FD8 .text loadRoom__20dStage_roomControl_cFiPUc */ -void dStage_roomControl_c::loadRoom(int, unsigned char*) { +int dStage_roomControl_c::loadRoom(int, u8*) { /* Nonmatching */ } /* 80040FD8-800410AC .text zoneCountCheck__20dStage_roomControl_cCFi */ -void dStage_roomControl_c::zoneCountCheck(int) const { - /* Nonmatching */ +void dStage_roomControl_c::zoneCountCheck(int i_roomNo) const { + dStage_roomStatus_c* status = mStatus; + for (int i = 0; i < 64; i++) { + if (status->mZoneNo >= 0 && status->mZoneCount > 0) { + dComIfGs_clearRoomSwitch(status->mZoneNo); + + if (i_roomNo != mOldStayNo) { + if (--status->mZoneCount == 0) { + dComIfGs_removeZone(status->mZoneNo); + status->mZoneNo = -1; + } + } + } + status++; + } + + setStayNo(i_roomNo); } /* 800410AC-800412EC .text checkDrawArea__20dStage_roomControl_cCFv */ @@ -97,8 +200,14 @@ void dStage_roomControl_c::checkDrawArea() const { } /* 800412EC-80041330 .text getDarkStatus__20dStage_roomControl_cFv */ -void dStage_roomControl_c::getDarkStatus() { - /* Nonmatching */ +// NONMATCHING +dStage_darkStatus_c* dStage_roomControl_c::getDarkStatus() { + dStage_FileList_dt_c* plist_p = mStatus[mStayNo].mRoomDt.mpFileList; + if (plist_p == NULL) { + return NULL; + } + + return &mDarkStatus[plist_p->mParam & 0x78]; } /* 80041330-80041370 .text getDarkMode__20dStage_roomControl_cFv */ @@ -107,53 +216,978 @@ void dStage_roomControl_c::getDarkMode() { } /* 80041370-800413D4 .text createMemoryBlock__20dStage_roomControl_cFiUl */ -void dStage_roomControl_c::createMemoryBlock(int, unsigned long) { - /* Nonmatching */ +JKRExpHeap* dStage_roomControl_c::createMemoryBlock(int i_blockIdx, u32 i_heapSize) { + archiveHeap->getCurrentGroupId(); + mMemoryBlock[i_blockIdx] = JKRExpHeap::create(i_heapSize, mDoExt_getArchiveHeap(), false); + return mMemoryBlock[i_blockIdx]; } /* 800413D4-80041430 .text destroyMemoryBlock__20dStage_roomControl_cFv */ void dStage_roomControl_c::destroyMemoryBlock() { - /* Nonmatching */ + for (int i = 0; i < (int)ARRAY_SIZE(mMemoryBlock); i++) { + if (mMemoryBlock[i] != NULL) { + mMemoryBlock[i]->destroy(); + } + } } /* 80041430-800414A4 .text init__16dStage_stageDt_cFv */ void dStage_stageDt_c::init() { - /* Nonmatching */ + mpCamera = NULL; + mpArrow = NULL; + mpPlayer = NULL; + mpRoomReads = NULL; + mpMapInfo = NULL; + mpMapInfoBase = NULL; + mpPaletInfo = NULL; + mpPselectInfo = NULL; + mpEnvrInfo = NULL; + mpVrboxInfo = NULL; + mpPlightInfo = NULL; + mPlightInfoNum = 0; + mpStagInfo = NULL; + mpScls = NULL; + mpPnt = NULL; + mpPath = NULL; + mpPnt2 = NULL; + mpPath2 = NULL; + mpSoundInfo = NULL; + mpEventInfo = NULL; + mpFloorInfo = NULL; + mpMemoryConfig = NULL; + mpMemoryMap = NULL; + mpMulti = NULL; + mpTresure = NULL; + mpDMap = NULL; + mpDrTg = NULL; } /* 800414A4-800414F4 .text init__15dStage_roomDt_cFv */ void dStage_roomDt_c::init() { - /* Nonmatching */ + mpLightVecInfo = NULL; + mLightVecInfoNum = 0; + mpMapInfo = NULL; + mpMapInfoBase = NULL; + mpVrbox = NULL; + mpFileList = NULL; + mpShip = NULL; + mpPlayer = NULL; + mpPoint2 = NULL; + mpPath2 = NULL; + mpCamera = NULL; + mpArrow = NULL; + mpSound = NULL; + mpScls = NULL; + mpLbnk = NULL; + mpTresure = NULL; + mpDrTg = NULL; + mpFloor = NULL; } /* 800414F4-80041544 .text dStage_roomInit__Fi */ -void dStage_roomInit(int) { - /* Nonmatching */ +int dStage_roomInit(int i_roomNo) { + dComIfGp_roomControl_setStatusFlag(i_roomNo, 2); + createRoomScene(i_roomNo); + dComIfGp_roomControl_setStayNo(i_roomNo); + return 1; } +#define OBJNAME(name, proc, sub, gba) \ + { \ + name, proc, sub, gba \ + } + +dStage_objectNameInf l_objectName[] = { + OBJNAME("kusax1", PROC_GRASS, 255, 0), + OBJNAME("kusax7", PROC_GRASS, 255, 0), + OBJNAME("kusax21", PROC_GRASS, 255, 0), + OBJNAME("flower", PROC_GRASS, 255, 0), + OBJNAME("flwr7", PROC_GRASS, 255, 0), + OBJNAME("flwr17", PROC_GRASS, 255, 0), + OBJNAME("pflower", PROC_GRASS, 255, 0), + OBJNAME("pflwrx7", PROC_GRASS, 255, 0), + OBJNAME("swood", PROC_GRASS, 255, 0), + OBJNAME("swood3", PROC_GRASS, 255, 0), + OBJNAME("swood5", PROC_GRASS, 255, 0), + OBJNAME("woodb", PROC_Obj_Wood, 255, 0), + OBJNAME("woodbx", PROC_Obj_Wood, 255, 0), + OBJNAME("door10", PROC_DOOR10, 255, 0), + OBJNAME("door11", PROC_DOOR10, 255, 0), + OBJNAME("door20", PROC_DOOR10, 255, 0), + OBJNAME("door21", PROC_DOOR10, 255, 0), + OBJNAME("Zenshut", PROC_DOOR10, 255, 0), + OBJNAME("keyshut", PROC_DOOR10, 255, 0), + OBJNAME("K_Zshut", PROC_DOOR10, 255, 0), + OBJNAME("ATdoor", PROC_ATDOOR, 255, 0), + OBJNAME("Mori1", PROC_MDOOR, 255, 0), + OBJNAME("doorKD", PROC_KDDOOR, 255, 0), + OBJNAME("ZenshKD", PROC_KDDOOR, 255, 0), + OBJNAME("K_ZshKD", PROC_KDDOOR, 255, 0), + OBJNAME("doorSH", PROC_KDDOOR, 255, 0), + OBJNAME("doorSZ", PROC_KDDOOR, 255, 0), + OBJNAME("KNOB00", PROC_KNOB00, 255, 0), + OBJNAME("KNOB01", PROC_KNOB00, 255, 0), + OBJNAME("KNOB02", PROC_KNOB00, 255, 0), + OBJNAME("KNOB03", PROC_KNOB00, 255, 0), + OBJNAME("KNOB00D", PROC_KNOB00, 255, 0), + OBJNAME("KNOB01D", PROC_KNOB00, 255, 0), + OBJNAME("KNOB02D", PROC_KNOB00, 255, 0), + OBJNAME("KNOB03D", PROC_KNOB00, 255, 0), + OBJNAME("door12", PROC_DOOR12, 0, 0), + OBJNAME("door12M", PROC_DOOR12, 1, 0), + OBJNAME("door12B", PROC_DOOR12, 2, 0), + OBJNAME("door13", PROC_DOOR12, 3, 0), + OBJNAME("door13M", PROC_DOOR12, 4, 0), + OBJNAME("door13B", PROC_DOOR12, 5, 0), + OBJNAME("keyS12", PROC_DOOR12, 1, 0), + OBJNAME("ZenS12", PROC_DOOR12, 2, 0), + OBJNAME("bonbori", PROC_EP, 255, 0), + OBJNAME("SW_C00", PROC_SWC00, 255, 0), + OBJNAME("takara", PROC_TBOX, 255, 62), + OBJNAME("takara2", PROC_TBOX, 255, 62), + OBJNAME("takara3", PROC_TBOX, 255, 62), + OBJNAME("takara4", PROC_TBOX, 255, 62), + OBJNAME("takara5", PROC_TBOX, 255, 62), + OBJNAME("takara6", PROC_TBOX, 255, 62), + OBJNAME("takara7", PROC_TBOX, 255, 62), + OBJNAME("takara8", PROC_TBOX, 255, 62), + OBJNAME("takaraK", PROC_TBOX, 255, 62), + OBJNAME("takaraI", PROC_TBOX, 255, 62), + OBJNAME("takaraM", PROC_TBOX, 255, 62), + OBJNAME("tkrASw", PROC_TBOX, 255, 62), + OBJNAME("tkrAGc", PROC_TBOX, 255, 62), + OBJNAME("tkrAKd", PROC_TBOX, 255, 62), + OBJNAME("tkrAIk", PROC_TBOX, 255, 62), + OBJNAME("tkrBMs", PROC_TBOX, 255, 62), + OBJNAME("tkrCTf", PROC_TBOX, 255, 62), + OBJNAME("tkrAOc", PROC_TBOX, 255, 62), + OBJNAME("tkrAOs", PROC_TBOX, 255, 62), + OBJNAME("tkrSlv", PROC_SBOX, 255, 62), + OBJNAME("agbA", PROC_AGBSW0, 255, 0), + OBJNAME("agbAT", PROC_AGBSW0, 255, 0), + OBJNAME("agbA2", PROC_AGBSW0, 255, 0), + OBJNAME("agbF", PROC_AGBSW0, 255, 0), + OBJNAME("agbF2", PROC_AGBSW0, 255, 0), + OBJNAME("agbMARK", PROC_AGBSW0, 255, 0), + OBJNAME("agbMW", PROC_AGBSW0, 255, 0), + OBJNAME("agbCSW", PROC_AGBSW0, 255, 0), + OBJNAME("agbTBOX", PROC_AGBSW0, 255, 0), + OBJNAME("agbR", PROC_AGBSW0, 255, 0), + OBJNAME("agbB", PROC_AGBSW0, 255, 0), + OBJNAME("agbD", PROC_AGBSW0, 255, 0), + OBJNAME("agbFA", PROC_AGBSW0, 255, 0), + OBJNAME("NoneCam", PROC_CAMERA, 255, 0), + OBJNAME("NormCam", PROC_CAMERA, 255, 0), + OBJNAME("Link", PROC_PLAYER, 255, 0), + OBJNAME("kotubo", PROC_TSUBO, 0, 0), + OBJNAME("ootubo1", PROC_TSUBO, 1, 0), + OBJNAME("Kmtub", PROC_TSUBO, 2, 0), + OBJNAME("Ktaru", PROC_TSUBO, 3, 0), + OBJNAME("Ostool", PROC_TSUBO, 4, 0), + OBJNAME("Odokuro", PROC_TSUBO, 5, 0), + OBJNAME("Okioke", PROC_TSUBO, 6, 0), + OBJNAME("Kmi02", PROC_TSUBO, 7, 0), + OBJNAME("Ptubo", PROC_TSUBO, 8, 0), + OBJNAME("KkibaB", PROC_TSUBO, 9, 0), + OBJNAME("Kmi00", PROC_TSUBO, 10, 0), + OBJNAME("Hbox2S", PROC_TSUBO, 11, 0), + OBJNAME("SW_HIT0", PROC_SWHIT0, 255, 0), + OBJNAME("koisi1", PROC_STONE, 0, 0), + OBJNAME("koisi2", PROC_STONE, 1, 0), + OBJNAME("Aygr", PROC_Obj_Aygr, 255, 0), + OBJNAME("Salvage", PROC_Salvage, 255, 0), + OBJNAME("SwSlvg", PROC_Salvage, 255, 63), + OBJNAME("Salvag2", PROC_Salvage, 255, 63), + OBJNAME("SalvagN", PROC_Salvage, 255, 63), + OBJNAME("SalvagE", PROC_Salvage, 255, 63), + OBJNAME("SalvFM", PROC_Salvage, 255, 63), + OBJNAME("osiBLK0", PROC_Obj_Movebox, 0, 61), + OBJNAME("osiBLK1", PROC_Obj_Movebox, 1, 61), + OBJNAME("Kkiba", PROC_Obj_Movebox, 2, 61), + OBJNAME("Hseki2", PROC_Obj_Movebox, 3, 61), + OBJNAME("Hseki7", PROC_Obj_Movebox, 4, 61), + OBJNAME("Mmrr", PROC_Obj_Movebox, 5, 61), + OBJNAME("MkieBB", PROC_Obj_Movebox, 6, 61), + OBJNAME("Ecube", PROC_Obj_Movebox, 7, 61), + OBJNAME("Hjump1", PROC_Obj_Movebox, 8, 61), + OBJNAME("Hbox1", PROC_Obj_Movebox, 9, 61), + OBJNAME("MpwrB", PROC_Obj_Movebox, 10, 61), + OBJNAME("DBLK0", PROC_Obj_Movebox, 11, 61), + OBJNAME("DBLK1", PROC_Obj_Movebox, 12, 61), + OBJNAME("DKkiba", PROC_Obj_Movebox, 13, 61), + OBJNAME("Hbox2", PROC_Obj_Movebox, 14, 61), + OBJNAME("BLK_CR", PROC_Obj_Correct, 0, 0), + OBJNAME("CrTrS3", PROC_Obj_Correct, 1, 0), + OBJNAME("CrTrS4", PROC_Obj_Correct, 2, 0), + OBJNAME("CrTrS5", PROC_Obj_Correct, 3, 0), + OBJNAME("CrTrM1", PROC_Obj_Correct, 4, 0), + OBJNAME("CrTrM2", PROC_Obj_Correct, 5, 0), + OBJNAME("CrTrGr", PROC_Obj_Correct, 6, 61), + OBJNAME("CrTrBl", PROC_Obj_Correct, 7, 61), + OBJNAME("Kbota_A", PROC_Obj_Swpush, 0, 0), + OBJNAME("Kbota_B", PROC_Obj_Swpush, 1, 0), + OBJNAME("KbotaC", PROC_Obj_Swpush, 2, 0), + OBJNAME("Hhbot1", PROC_Obj_Swheavy, 0, 0), + OBJNAME("Hhbot1N", PROC_Obj_Swheavy, 1, 0), + OBJNAME("MhmrSW0", PROC_Obj_Swhammer, 255, 0), + OBJNAME("TagSo", PROC_TAG_SO, 0, 0), + OBJNAME("TagMSo", PROC_TAG_SO, 1, 0), + OBJNAME("PScnChg", PROC_TAG_GSHIP, 255, 0), + OBJNAME("ALLdie", PROC_ALLDIE, 255, 0), + OBJNAME("TagEv", PROC_TAG_EVENT, 255, 0), + OBJNAME("TagHt", PROC_TAG_HINT, 0, 0), + OBJNAME("TagHt2", PROC_TAG_HINT, 1, 0), + OBJNAME("TagMsg", PROC_TAG_MSG, 0, 0), + OBJNAME("TagMsg2", PROC_TAG_MSG, 1, 0), + OBJNAME("TagIsl", PROC_TAG_ISLAND, 0, 0), + OBJNAME("TagMd", PROC_TAG_ETC, 0, 0), + OBJNAME("TagKf1", PROC_TAG_KF1, 255, 0), + OBJNAME("TagKk1", PROC_TAG_KK1, 255, 0), + OBJNAME("TagKb", PROC_TAG_KB_ITEM, 255, 0), + OBJNAME("TagMk", PROC_TAG_MK, 0, 0), + OBJNAME("TagWp", PROC_TAG_MK, 1, 0), + OBJNAME("TagDM", PROC_TAG_MK, 2, 0), + OBJNAME("TagTy", PROC_TAG_MK, 3, 0), + OBJNAME("TagMd1", PROC_TAG_MDCB, 0, 0), + OBJNAME("TagCb1", PROC_TAG_MDCB, 1, 0), + OBJNAME("TagMd11", PROC_TAG_MDCB, 2, 0), + OBJNAME("TagMd12", PROC_TAG_MDCB, 3, 0), + OBJNAME("TagMd13", PROC_TAG_MDCB, 4, 0), + OBJNAME("TagMd14", PROC_TAG_MDCB, 5, 0), + OBJNAME("TagMd15", PROC_TAG_MDCB, 6, 0), + OBJNAME("TagMd16", PROC_TAG_MDCB, 7, 0), + OBJNAME("TagCb11", PROC_TAG_MDCB, 8, 0), + OBJNAME("TagCb12", PROC_TAG_MDCB, 9, 0), + OBJNAME("TagCb13", PROC_TAG_MDCB, 10, 0), + OBJNAME("TagCb14", PROC_TAG_MDCB, 11, 0), + OBJNAME("TagBa1", PROC_TAG_BA1, 1, 0), + OBJNAME("Evsw", PROC_TAG_EVSW, 255, 0), + OBJNAME("Search", PROC_OBJ_SEARCH, 255, 0), + OBJNAME("Otble", PROC_OBJ_OTBLE, 0, 0), + OBJNAME("OtbleL", PROC_OBJ_OTBLE, 1, 0), + OBJNAME("Warpt", PROC_OBJ_WARPT, 0, 49), + OBJNAME("Warpnt", PROC_OBJ_WARPT, 1, 49), + OBJNAME("Warpts1", PROC_OBJ_WARPT, 2, 49), + OBJNAME("Warpts2", PROC_OBJ_WARPT, 3, 49), + OBJNAME("Warpts3", PROC_OBJ_WARPT, 4, 49), + OBJNAME("Seatag", PROC_SEATAG, 255, 0), + OBJNAME("Warpf", PROC_WARPFLOWER, 255, 0), + OBJNAME("Hys", PROC_Hys, 255, 0), + OBJNAME("Hys2", PROC_Hys, 255, 0), + OBJNAME("Hsen1", PROC_FAN, 255, 0), + OBJNAME("Hsen2", PROC_FAN, 255, 0), + OBJNAME("Hsen3", PROC_FAN, 255, 0), + OBJNAME("Olift", PROC_LEAF_LIFT, 255, 0), + OBJNAME("Ylsic", PROC_ICE_LIFT, 255, 0), + OBJNAME("Yllic", PROC_ICE_LIFT, 255, 0), + OBJNAME("Ylkic", PROC_ICE_LIFT, 255, 0), + OBJNAME("Hpbot1", PROC_SW_PROPELLER, 255, 0), + OBJNAME("Vpbot", PROC_SW_PROPELLER, 255, 0), + OBJNAME("Hami1", PROC_AMI_PROP, 255, 0), + OBJNAME("HamiY", PROC_AMI_PROP, 255, 0), + OBJNAME("LTag0", PROC_Tag_Light, 0, 0), + OBJNAME("LTag1", PROC_Tag_Light, 1, 0), + OBJNAME("LTagR0", PROC_Tag_Light, 2, 0), + OBJNAME("AttTag", PROC_Tag_Attention, 0, 0), + OBJNAME("AttTagB", PROC_Tag_Attention, 1, 0), + OBJNAME("Ikori", PROC_Obj_Ice, 255, 0), + OBJNAME("MsuSW", PROC_Obj_Swlight, 0, 0), + OBJNAME("MsuSWB", PROC_Obj_Swlight, 1, 0), + OBJNAME("SWat00", PROC_SW_ATTACK, 255, 0), + OBJNAME("ITat00", PROC_SW_ITEM, 255, 0), + OBJNAME("SWtact", PROC_SW_TACT, 255, 0), + OBJNAME("SWtactB", PROC_SW_TACT, 255, 0), + OBJNAME("Hhyu1", PROC_FLOOR, 255, 0), + OBJNAME("Oyashi", PROC_Obj_Lpalm, 255, 0), + OBJNAME("Kanban", PROC_KANBAN, 255, 52), + OBJNAME("kt", PROC_KT, 255, 0), + OBJNAME("ho", PROC_FF, 255, 0), + OBJNAME("mo2", PROC_MO2, 255, 2), + OBJNAME("moZOU", PROC_MOZO, 255, 0), + OBJNAME("hotest", PROC_RECTANGLE, 255, 0), + OBJNAME("Kui", PROC_KUI, 255, 0), + OBJNAME("Kamome", PROC_KAMOME, 255, 0), + OBJNAME("item", PROC_ITEM, 255, 0), + OBJNAME("itemFLY", PROC_ITEM, 255, 0), + OBJNAME("itemDek", PROC_DEKU_ITEM, 255, 0), + OBJNAME("Ship", PROC_SHIP, 255, 0), + OBJNAME("AND_SW0", PROC_ANDSW0, 255, 0), + OBJNAME("AND_SW2", PROC_ANDSW2, 255, 0), + OBJNAME("Bb", PROC_BB, 255, 26), + OBJNAME("Ebrock", PROC_Stone2, 0, 0), + OBJNAME("Ekao", PROC_Stone2, 1, 0), + OBJNAME("Ebrock2", PROC_Stone2, 2, 0), + OBJNAME("ky_tag0", PROC_KYTAG00, 255, 0), + OBJNAME("kytag00", PROC_KYTAG00, 255, 0), + OBJNAME("ky00you", PROC_KYTAG00, 255, 0), + OBJNAME("ky_tag1", PROC_KYTAG01, 255, 0), + OBJNAME("ky_tag2", PROC_KYTAG02, 255, 0), + OBJNAME("ky_tag3", PROC_KYTAG03, 255, 0), + OBJNAME("kytag4", PROC_KYTAG04, 255, 0), + OBJNAME("kytag5", PROC_KYTAG05, 255, 0), + OBJNAME("kytag6", PROC_KYTAG06, 255, 0), + OBJNAME("kytag7", PROC_KYTAG07, 255, 0), + OBJNAME("sea", PROC_SEA, 255, 0), + OBJNAME("nezumi", PROC_NZ, 255, 24), + OBJNAME("nezuana", PROC_NZG, 255, 0), + OBJNAME("kani", PROC_KN, 255, 0), + OBJNAME("Demo_Dk", PROC_DEMO_DK, 255, 0), + OBJNAME("DmKmm", PROC_DEMO_KMM, 0, 0), + OBJNAME("DmKmm2", PROC_DEMO_KMM, 1, 0), + OBJNAME("amos", PROC_AM, 255, 12), + OBJNAME("amos2", PROC_AM2, 255, 11), + OBJNAME("gmos", PROC_GM, 255, 9), + OBJNAME("gmos_g", PROC_GM, 255, 9), + OBJNAME("gmos_f", PROC_GM, 255, 9), + OBJNAME("kuro_s", PROC_KS, 255, 20), + OBJNAME("kuro_t", PROC_KS, 255, 0), + OBJNAME("c_green", PROC_CC, 255, 22), + OBJNAME("c_red", PROC_CC, 255, 21), + OBJNAME("c_blue", PROC_CC, 255, 30), + OBJNAME("c_black", PROC_CC, 255, 16), + OBJNAME("c_kiiro", PROC_CC, 255, 10), + OBJNAME("bable", PROC_BL, 255, 15), + OBJNAME("bable_r", PROC_BL, 255, 14), + OBJNAME("wiz_r", PROC_WZ, 255, 17), + OBJNAME("wiz_s", PROC_WZ, 255, 17), + OBJNAME("wiz_m", PROC_WZ, 255, 17), + OBJNAME("wiz_o", PROC_WZ, 255, 17), + OBJNAME("p_hat", PROC_PH, 255, 8), + OBJNAME("p_zelda", PROC_PZ, 255, 60), + OBJNAME("big_pow", PROC_BPW, 255, 0), + OBJNAME("pow", PROC_PW, 255, 13), + OBJNAME("sea_hat", PROC_PH, 255, 31), + OBJNAME("jbaba", PROC_JBO, 255, 33), + OBJNAME("bbaba", PROC_BO, 255, 7), + OBJNAME("bridge", PROC_BRIDGE, 255, 0), + OBJNAME("dragon", PROC_DR, 255, 0), + OBJNAME("Nh", PROC_NH, 255, 0), + OBJNAME("NpcSo", PROC_NPC_SO, 255, 0), + OBJNAME("NpcNz", PROC_NPC_NZ, 255, 0), + OBJNAME("Os", PROC_NPC_OS, 0, 0), + OBJNAME("Os1", PROC_NPC_OS, 1, 0), + OBJNAME("Os2", PROC_NPC_OS, 2, 0), + OBJNAME("Ym1", PROC_NPC_YM1, 255, 59), + OBJNAME("Ym2", PROC_NPC_YM2, 255, 59), + OBJNAME("Yw1", PROC_NPC_YW1, 255, 60), + OBJNAME("Ji1", PROC_NPC_JI1, 255, 59), + OBJNAME("Ko1", PROC_NPC_KO1, 255, 59), + OBJNAME("Ko2", PROC_NPC_KO2, 255, 59), + OBJNAME("Ls1", PROC_NPC_LS1, 255, 60), + OBJNAME("Bm1", PROC_NPC_BM1, 255, 59), + OBJNAME("Bm2", PROC_NPC_BM2, 255, 59), + OBJNAME("Bm3", PROC_NPC_BM3, 255, 59), + OBJNAME("Bm4", PROC_NPC_BM4, 255, 59), + OBJNAME("Bm5", PROC_NPC_BM5, 255, 59), + OBJNAME("Bmcon1", PROC_NPC_BMCON1, 0, 0), + OBJNAME("Bmcon2", PROC_NPC_BMCON1, 1, 0), + OBJNAME("Bmsw", PROC_NPC_BMSW, 255, 0), + OBJNAME("Btsw", PROC_NPC_BTSW, 255, 0), + OBJNAME("Btsw2", PROC_NPC_BTSW2, 255, 59), + OBJNAME("Zk1", PROC_NPC_ZK1, 255, 59), + OBJNAME("Zl1", PROC_NPC_ZL1, 255, 60), + OBJNAME("Ob1", PROC_NPC_OB1, 255, 60), + OBJNAME("Aj1", PROC_NPC_AJ1, 255, 59), + OBJNAME("Km1", PROC_NPC_KM1, 255, 60), + OBJNAME("Cb1", PROC_NPC_CB1, 255, 59), + OBJNAME("Ba1", PROC_NPC_BA1, 255, 60), + OBJNAME("Bj1", PROC_NPC_BJ1, 255, 59), + OBJNAME("Bj2", PROC_NPC_BJ2, 255, 59), + OBJNAME("Bj3", PROC_NPC_BJ3, 255, 59), + OBJNAME("Bj4", PROC_NPC_BJ4, 255, 59), + OBJNAME("Bj5", PROC_NPC_BJ5, 255, 59), + OBJNAME("Bj6", PROC_NPC_BJ6, 255, 59), + OBJNAME("Bj7", PROC_NPC_BJ7, 255, 59), + OBJNAME("Bj8", PROC_NPC_BJ8, 255, 59), + OBJNAME("Bj9", PROC_NPC_BJ9, 255, 59), + OBJNAME("Bs1", PROC_NPC_BS1, 0, 59), + OBJNAME("Bs2", PROC_NPC_BS1, 1, 0), + OBJNAME("Bms1", PROC_NPC_BMS1, 0, 0), + OBJNAME("Bms2", PROC_NPC_BMS1, 1, 0), + OBJNAME("Ds1", PROC_NPC_DS1, 255, 59), + OBJNAME("Rsh1", PROC_NPC_RSH1, 255, 59), + OBJNAME("Kk1", PROC_NPC_KK1, 255, 60), + OBJNAME("Pm1", PROC_NPC_PM1, 255, 60), + OBJNAME("Kp1", PROC_NPC_KP1, 255, 60), + OBJNAME("Pf1", PROC_NPC_PF1, 255, 59), + OBJNAME("Gp1", PROC_NPC_GP1, 255, 59), + OBJNAME("Jb1", PROC_NPC_JB1, 255, 0), + OBJNAME("Kf1", PROC_NPC_KF1, 255, 59), + OBJNAME("De1", PROC_NPC_DE1, 255, 59), + OBJNAME("Sfairy", PROC_NPC_FA1, 255, 0), + OBJNAME("Md1", PROC_NPC_MD, 255, 60), + OBJNAME("Uo1", PROC_NPC_PEOPLE, 0, 59), + OBJNAME("Uo2", PROC_NPC_PEOPLE, 1, 59), + OBJNAME("Uo3", PROC_NPC_PEOPLE, 2, 59), + OBJNAME("Ub1", PROC_NPC_PEOPLE, 3, 0), + OBJNAME("Ub2", PROC_NPC_PEOPLE, 4, 0), + OBJNAME("Ub3", PROC_NPC_PEOPLE, 5, 0), + OBJNAME("Ub4", PROC_NPC_PEOPLE, 6, 0), + OBJNAME("Uw1", PROC_NPC_PEOPLE, 7, 0), + OBJNAME("Uw2", PROC_NPC_PEOPLE, 8, 0), + OBJNAME("Um1", PROC_NPC_PEOPLE, 9, 0), + OBJNAME("Um2", PROC_NPC_PEOPLE, 10, 0), + OBJNAME("Um3", PROC_NPC_PEOPLE, 11, 0), + OBJNAME("Sa1", PROC_NPC_PEOPLE, 12, 0), + OBJNAME("Sa2", PROC_NPC_PEOPLE, 13, 0), + OBJNAME("Sa3", PROC_NPC_PEOPLE, 14, 0), + OBJNAME("Sa4", PROC_NPC_PEOPLE, 15, 0), + OBJNAME("Sa5", PROC_NPC_PEOPLE, 16, 0), + OBJNAME("Ug1", PROC_NPC_PEOPLE, 17, 0), + OBJNAME("Ug2", PROC_NPC_PEOPLE, 18, 0), + OBJNAME("Gk1", PROC_NPC_GK1, 255, 59), + OBJNAME("Ac1", PROC_NPC_AC1, 255, 59), + OBJNAME("Hi1", PROC_NPC_HI1, 255, 59), + OBJNAME("Pirates", PROC_Obj_Pirateship, 255, 0), + OBJNAME("keeth", PROC_KI, 255, 23), + OBJNAME("Fkeeth", PROC_KI, 255, 6), + OBJNAME("yg_awa", PROC_YOUGAN, 255, 0), + OBJNAME("magtail", PROC_MT, 255, 5), + OBJNAME("RopeR", PROC_HIMO3, 255, 0), + OBJNAME("Ktarur", PROC_Obj_Barrel2, 255, 61), + OBJNAME("Ktarux", PROC_Obj_Barrel, 255, 0), + OBJNAME("Magrock", PROC_Obj_Magmarock, 255, 0), + OBJNAME("Quake", PROC_Obj_Quake, 255, 0), + OBJNAME("Yfire00", PROC_Obj_Flame, 255, 0), + OBJNAME("Turu", PROC_SK, 0, 0), + OBJNAME("Turu2", PROC_SK2, 0, 0), + OBJNAME("Turu3", PROC_SK2, 1, 0), + OBJNAME("Kanat", PROC_Obj_Kanat, 255, 0), + OBJNAME("s_turu", PROC_SSK, 255, 0), + OBJNAME("spotbox", PROC_SPOTBOX, 255, 0), + OBJNAME("Ksaku", PROC_SAKU, 255, 0), + OBJNAME("spotbx1", PROC_SPOTBOX, 255, 0), + OBJNAME("Mswing", PROC_MSW, 255, 0), + OBJNAME("Pig", PROC_KB, 255, 0), + OBJNAME("Rdead1", PROC_RD, 0, 18), + OBJNAME("Rdead2", PROC_RD, 1, 18), + OBJNAME("Fmaster", PROC_FM, 0, 25), + OBJNAME("Fmastr1", PROC_FM, 1, 25), + OBJNAME("Fmastr2", PROC_FM, 2, 25), + OBJNAME("Daiocta", PROC_DAIOCTA, 255, 28), + OBJNAME("Daioeye", PROC_DAIOCTA_EYE, 255, 0), + OBJNAME("Oq", PROC_OQ, 0, 27), + OBJNAME("Oqw", PROC_OQ, 1, 65), + OBJNAME("Gy", PROC_GY, 255, 29), + OBJNAME("GyCtrl", PROC_GY_CTRL, 255, 0), + OBJNAME("GyCtrlB", PROC_GY_CTRLB, 255, 0), + OBJNAME("Bk", PROC_BK, 255, 1), + OBJNAME("Ypit00", PROC_OBJ_HOLE, 0, 0), + OBJNAME("Pitfall", PROC_OBJ_HOLE, 1, 0), + OBJNAME("Nzfall", PROC_OBJ_PFALL, 255, 0), + OBJNAME("ScnChg", PROC_SCENECHG, 255, 0), + OBJNAME("Oship", PROC_OSHIP, 255, 56), + OBJNAME("Ayush", PROC_AYUSH, 255, 57), + OBJNAME("Tpost", PROC_OBJ_TORIPOST, 255, 53), + OBJNAME("Ocanon", PROC_OBJ_CANON, 255, 0), + OBJNAME("Ikada", PROC_OBJ_IKADA, 0, 61), + OBJNAME("ikada_h", PROC_OBJ_IKADA, 1, 61), + OBJNAME("ikadaS", PROC_OBJ_IKADA, 2, 61), + OBJNAME("ikada_u", PROC_OBJ_IKADA, 3, 61), + OBJNAME("Svsp", PROC_OBJ_IKADA, 4, 61), + OBJNAME("Sv0", PROC_NPC_SV, 0, 0), + OBJNAME("Sv1", PROC_NPC_SV, 1, 0), + OBJNAME("Sv2", PROC_NPC_SV, 2, 0), + OBJNAME("Sv3", PROC_NPC_SV, 3, 0), + OBJNAME("MjDoor", PROC_OBJ_MJDOOR, 255, 0), + OBJNAME("Ikari", PROC_IKARI, 255, 0), + OBJNAME("MjFlag", PROC_MAJUU_FLAG, 0, 0), + OBJNAME("MtFlag", PROC_MAJUU_FLAG, 1, 0), + OBJNAME("HcFlag", PROC_MAJUU_FLAG, 3, 0), + OBJNAME("TrFlag", PROC_Tori_Flag, 0, 0), + OBJNAME("SieFlag", PROC_Sie_Flag, 0, 0), + OBJNAME("lwood", PROC_Lwood, 255, 0), + OBJNAME("Ktaruo", PROC_Obj_Demo_Barrel, 255, 0), + OBJNAME("Touseki", PROC_Obj_Tousekiki, 255, 0), + OBJNAME("frock", PROC_TagRock, 255, 0), + OBJNAME("fallrck", PROC_FallRock, 255, 0), + OBJNAME("Dr2", PROC_DR2, 255, 0), + OBJNAME("Mkdan1", PROC_Obj_Stair, 255, 0), + OBJNAME("Btd", PROC_BTD, 255, 0), + OBJNAME("Dk", PROC_DK, 255, 0), + OBJNAME("Ystm0", PROC_SteamTag, 255, 0), + OBJNAME("Ystm1", PROC_SteamTag, 255, 0), + OBJNAME("Gflag", PROC_Goal_Flag, 255, 0), + OBJNAME("Branch", PROC_BRANCH, 255, 0), + OBJNAME("P1a", PROC_NPC_P1, 0, 59), + OBJNAME("P1b", PROC_NPC_P1, 1, 59), + OBJNAME("P1c", PROC_NPC_P1, 2, 59), + OBJNAME("P2a", PROC_NPC_P2, 0, 59), + OBJNAME("P2b", PROC_NPC_P2, 1, 59), + OBJNAME("P2c", PROC_NPC_P2, 2, 59), + OBJNAME("Tc", PROC_NPC_TC, 255, 59), + OBJNAME("Throck", PROC_THROWSTONE, 255, 0), + OBJNAME("magma", PROC_MAGMA, 255, 0), + OBJNAME("Bita", PROC_BITA, 255, 0), + OBJNAME("YkgrON", PROC_Ykgr, 255, 0), + OBJNAME("YkgrOFF", PROC_Ykgr, 255, 0), + OBJNAME("Dsaku", PROC_SAKU, 255, 0), + OBJNAME("Otana", PROC_Obj_Shelf, 0, 0), + OBJNAME("OtanaG", PROC_Obj_Shelf, 1, 0), + OBJNAME("Bdk", PROC_BDK, 255, 0), + OBJNAME("Bdkobj", PROC_BDKOBJ, 255, 0), + OBJNAME("SWTdoor", PROC_SWTDOOR, 255, 0), + OBJNAME("Canon", PROC_Canon, 255, 0), + OBJNAME("GBoard", PROC_MGBOARD, 255, 0), + OBJNAME("Hlift", PROC_Obj_Hlift, 0, 0), + OBJNAME("Hliftb", PROC_Obj_Hlift, 1, 0), + OBJNAME("Hami2", PROC_Obj_Hami2, 255, 0), + OBJNAME("Hami3", PROC_Obj_Hami3, 255, 0), + OBJNAME("Hami4", PROC_Obj_Hami4, 255, 0), + OBJNAME("Hbrf1", PROC_Obj_Hbrf1, 255, 0), + OBJNAME("Mflft", PROC_MFLFT, 255, 0), + OBJNAME("ObjTime", PROC_Obj_Timer, 255, 0), + OBJNAME("Klft", PROC_KLFT, 255, 0), + OBJNAME("Kita", PROC_KITA, 255, 0), + OBJNAME("Humi0z", PROC_Obj_Tide, 0, 0), + OBJNAME("Humi4z", PROC_Obj_Tide, 1, 0), + OBJNAME("Humi5z", PROC_Obj_Tide, 2, 0), + OBJNAME("Tide3", PROC_Obj_Tide, 3, 0), + OBJNAME("Humi2z", PROC_Obj_Tide, 4, 0), + OBJNAME("Humi3z", PROC_Obj_Tide, 5, 0), + OBJNAME("WLvTag", PROC_Tag_Waterlevel, 255, 0), + OBJNAME("Fire", PROC_Fire, 255, 0), + OBJNAME("Zenfire", PROC_Fire, 255, 0), + OBJNAME("Kokiie", PROC_KOKIIE, 255, 0), + OBJNAME("Paper", PROC_Obj_Paper, 0, 0), + OBJNAME("Ppos", PROC_Obj_Paper, 1, 0), + OBJNAME("Piwa", PROC_Obj_Paper, 2, 54), + OBJNAME("Ss", PROC_SS, 255, 0), + OBJNAME("WindTag", PROC_WindTag, 255, 0), + OBJNAME("Kryu00", PROC_Obj_Drift, 255, 0), + OBJNAME("Mcube", PROC_Obj_Mtest, 0, 0), + OBJNAME("Mcyln", PROC_Obj_Mtest, 1, 0), + OBJNAME("Mcube10", PROC_Obj_Mtest, 2, 0), + OBJNAME("Mcyln10", PROC_Obj_Mtest, 3, 0), + OBJNAME("MwtrSB", PROC_Obj_Mtest, 4, 0), + OBJNAME("MygnSB", PROC_Obj_Mtest, 5, 0), + OBJNAME("Owater", PROC_Obj_Mtest, 6, 0), + OBJNAME("Astop", PROC_Obj_Mtest, 7, 0), + OBJNAME("Ojtree", PROC_Obj_Ojtree, 255, 0), + OBJNAME("Ospbox", PROC_Obj_Ospbox, 255, 0), + OBJNAME("Hmlif", PROC_Hmlif, 255, 61), + OBJNAME("Ywarp00", PROC_WARPLIGHT, 255, 0), + OBJNAME("Ysdls00", PROC_WARPLIGHT, 255, 0), + OBJNAME("Yswtr00", PROC_WATERFALL, 255, 0), + OBJNAME("Gbrg00", PROC_LIGHTBRIDGE, 255, 0), + OBJNAME("Mhsg6", PROC_Obj_Ladder, 0, 0), + OBJNAME("Mhsg9", PROC_Obj_Ladder, 1, 0), + OBJNAME("Mhsg12", PROC_Obj_Ladder, 2, 0), + OBJNAME("Mhsg15", PROC_Obj_Ladder, 3, 0), + OBJNAME("Mhsg4h", PROC_Obj_Ladder, 4, 0), + OBJNAME("Sss", PROC_SSS, 255, 0), + OBJNAME("Wall", PROC_WALL, 255, 0), + OBJNAME("Blift", PROC_Balancelift, 255, 0), + OBJNAME("MtoriSU", PROC_Obj_Nest, 255, 0), + OBJNAME("Lamp", PROC_LAMP, 255, 0), + OBJNAME("Sitem", PROC_SITEM, 255, 0), + OBJNAME("Hmos1", PROC_Bemos, 0, 35), + OBJNAME("Hmos2", PROC_Bemos, 1, 35), + OBJNAME("Hmos3", PROC_Bemos, 2, 35), + OBJNAME("Ylesr00", PROC_Beam, 255, 0), + OBJNAME("Hseki1", PROC_Obj_Try, 0, 61), + OBJNAME("Hseki6", PROC_Obj_Try, 1, 61), + OBJNAME("Hseki3", PROC_Obj_Try, 2, 61), + OBJNAME("Hseki4", PROC_Obj_Try, 3, 61), + OBJNAME("Hseki5", PROC_Obj_Try, 4, 61), + OBJNAME("Hmon1", PROC_Obj_Try, 5, 61), + OBJNAME("Hmon1d", PROC_Obj_Try, 6, 61), + OBJNAME("Hmon2", PROC_Obj_Try, 7, 61), + OBJNAME("Hmon2d", PROC_Obj_Try, 8, 61), + OBJNAME("Hseki31", PROC_Obj_Try, 9, 61), + OBJNAME("Hseki41", PROC_Obj_Try, 10, 61), + OBJNAME("Hseki51", PROC_Obj_Try, 11, 61), + OBJNAME("Hseki32", PROC_Obj_Try, 12, 61), + OBJNAME("Hseki42", PROC_Obj_Try, 13, 61), + OBJNAME("Hseki52", PROC_Obj_Try, 14, 61), + OBJNAME("Com_A", PROC_Obj_Coming, 255, 0), + OBJNAME("WBird", PROC_WBIRD, 255, 0), + OBJNAME("SMtoge", PROC_MTOGE, 255, 0), + OBJNAME("SMBdor", PROC_MBDOOR, 0, 0), + OBJNAME("KGBdor", PROC_MBDOOR, 1, 0), + OBJNAME("BFlower", PROC_BOMB_FLOWER, 255, 0), + OBJNAME("VbakH", PROC_BOMB_FLOWER, 255, 0), + OBJNAME("VigaH", PROC_ACORN_LEAF, 255, 0), + OBJNAME("Stal", PROC_ST, 255, 4), + OBJNAME("MkieBA", PROC_Obj_Mkie, 0, 61), + OBJNAME("MkieBAB", PROC_Obj_Mkie, 1, 61), + OBJNAME("MkieK", PROC_Obj_Mkiek, 255, 0), + OBJNAME("MknjD", PROC_Obj_MknjD, 255, 0), + OBJNAME("Msdan", PROC_Obj_Msdan, 255, 0), + OBJNAME("MsdanSb", PROC_Obj_MsdanSub, 255, 0), + OBJNAME("Msdan2", PROC_Obj_Msdan2, 255, 0), + OBJNAME("MsdanS2", PROC_Obj_MsdanSub2, 255, 0), + OBJNAME("Htobi1", PROC_SHUTTER, 255, 0), + OBJNAME("Htobi2", PROC_SHUTTER, 255, 0), + OBJNAME("Htobi3", PROC_SHUTTER2, 255, 0), + OBJNAME("Hfbot1A", PROC_Obj_Swflat, 0, 0), + OBJNAME("Hfbot1B", PROC_Obj_Swflat, 1, 0), + OBJNAME("Hfbot1C", PROC_Obj_Swflat, 2, 0), + OBJNAME("Ykzyg", PROC_Obj_Volcano, 255, 0), + OBJNAME("GiceL", PROC_Obj_Iceisland, 255, 0), + OBJNAME("Qdghd", PROC_Obj_Dragonhead, 255, 0), + OBJNAME("dmgroom", PROC_Obj_Dmgroom, 255, 0), + OBJNAME("Doguu", PROC_Obj_Doguu, 0, 0), + OBJNAME("MegamiD", PROC_Obj_Doguu, 1, 0), + OBJNAME("MegamiF", PROC_Obj_Doguu, 2, 0), + OBJNAME("MegamiN", PROC_Obj_Doguu, 3, 0), + OBJNAME("DoguuD", PROC_Obj_DoguuD, 255, 0), + OBJNAME("ReTag0", PROC_Tag_Ret, 255, 0), + OBJNAME("VolTag", PROC_Tag_Volcano, 255, 0), + OBJNAME("Auc7", PROC_NPC_AUCTION, 0, 0), + OBJNAME("Auc1", PROC_NPC_AUCTION, 1, 0), + OBJNAME("Auc2", PROC_NPC_AUCTION, 2, 0), + OBJNAME("Auc3", PROC_NPC_AUCTION, 3, 0), + OBJNAME("Auc4", PROC_NPC_AUCTION, 4, 0), + OBJNAME("Auc5", PROC_NPC_AUCTION, 5, 0), + OBJNAME("Auc6", PROC_NPC_AUCTION, 6, 0), + OBJNAME("Auc0", PROC_NPC_AUCTION, 7, 59), + OBJNAME("RotenA", PROC_NPC_ROTEN, 0, 59), + OBJNAME("RotenB", PROC_NPC_ROTEN, 1, 59), + OBJNAME("RotenC", PROC_NPC_ROTEN, 2, 59), + OBJNAME("Tn", PROC_TN, 255, 3), + OBJNAME("Fdai", PROC_DAI, 255, 0), + OBJNAME("Ytrnd00", PROC_TORNADO, 255, 58), + OBJNAME("Plant", PROC_Obj_Plant, 255, 0), + OBJNAME("Rflw", PROC_Obj_Rflw, 255, 0), + OBJNAME("Table", PROC_Obj_Table, 255, 0), + OBJNAME("Gtaki", PROC_Obj_Gtaki, 255, 0), + OBJNAME("Tenmado", PROC_Obj_Tenmado, 255, 0), + OBJNAME("X_tower", PROC_Obj_Tower, 255, 0), + OBJNAME("Eskban", PROC_Obj_Eskban, 255, 0), + OBJNAME("Ekskz", PROC_Obj_Ekskz, 255, 0), + OBJNAME("Pbka", PROC_Obj_Pbka, 255, 0), + OBJNAME("Yboil00", PROC_Obj_Yboil, 255, 0), + OBJNAME("Cafelmp", PROC_Obj_Cafelmp, 255, 0), + OBJNAME("MKanoke", PROC_Obj_Kanoke, 0, 61), + OBJNAME("MKanok2", PROC_Obj_Kanoke, 1, 61), + OBJNAME("Kg1", PROC_NPC_KG1, 255, 59), + OBJNAME("Kg2", PROC_NPC_KG2, 255, 0), + OBJNAME("Tt", PROC_NPC_TT, 255, 59), + OBJNAME("Hr", PROC_NPC_HR, 0, 0), + OBJNAME("Hr2", PROC_NPC_HR, 1, 0), + OBJNAME("BigElf", PROC_BIGELF, 0, 0), + OBJNAME("Ho", PROC_NPC_HO, 0, 0), + OBJNAME("Gkai00", PROC_LIGHTSTAIR, 255, 0), + OBJNAME("Mk", PROC_NPC_MK, 0, 59), + OBJNAME("UkB", PROC_NPC_UK, 1, 59), + OBJNAME("UkC", PROC_NPC_UK, 2, 59), + OBJNAME("UkD", PROC_NPC_UK, 3, 59), + OBJNAME("Mk2", PROC_NPC_MK, 4, 0), + OBJNAME("UkB2", PROC_NPC_UK, 5, 0), + OBJNAME("UkC2", PROC_NPC_UK, 6, 0), + OBJNAME("UkD2", PROC_NPC_UK, 7, 0), + OBJNAME("Co1", PROC_NPC_CO1, 255, 59), + OBJNAME("Mt", PROC_NPC_MT, 255, 0), + OBJNAME("Mn", PROC_NPC_MN, 255, 59), + OBJNAME("Ah", PROC_NPC_AH, 255, 0), + OBJNAME("Hyuf1", PROC_Hmlif, 255, 61), + OBJNAME("Hyuf2", PROC_Hmlif, 255, 61), + OBJNAME("Hdai1", PROC_PEDESTAL, 0, 61), + OBJNAME("Hdai2", PROC_PEDESTAL, 1, 61), + OBJNAME("Hdai3", PROC_PEDESTAL, 2, 61), + OBJNAME("Auction", PROC_AUCTION, 255, 0), + OBJNAME("Auzu", PROC_Obj_Auzu, 255, 58), + OBJNAME("Hpu1", PROC_WINDMILL, 255, 0), + OBJNAME("Hpu2", PROC_WINDMILL, 255, 0), + OBJNAME("Hkikai1", PROC_MACHINE, 255, 0), + OBJNAME("Ybgaf00", PROC_WindTag, 255, 0), + OBJNAME("LOD01", PROC_LODBG, 255, 0), + OBJNAME("LOD02", PROC_LODBG, 255, 0), + OBJNAME("LOD03", PROC_LODBG, 255, 0), + OBJNAME("LOD04", PROC_LODBG, 255, 0), + OBJNAME("LOD05", PROC_LODBG, 255, 0), + OBJNAME("LOD06", PROC_LODBG, 255, 0), + OBJNAME("LOD07", PROC_LODBG, 255, 0), + OBJNAME("LOD08", PROC_LODBG, 255, 0), + OBJNAME("LOD09", PROC_LODBG, 255, 0), + OBJNAME("LOD10", PROC_LODBG, 255, 0), + OBJNAME("LOD11", PROC_LODBG, 255, 0), + OBJNAME("LOD12", PROC_LODBG, 255, 0), + OBJNAME("LOD13", PROC_LODBG, 255, 0), + OBJNAME("LOD14", PROC_LODBG, 255, 0), + OBJNAME("LOD15", PROC_LODBG, 255, 0), + OBJNAME("LOD16", PROC_LODBG, 255, 0), + OBJNAME("LOD17", PROC_LODBG, 255, 0), + OBJNAME("LOD18", PROC_LODBG, 255, 0), + OBJNAME("LOD19", PROC_LODBG, 255, 0), + OBJNAME("LOD20", PROC_LODBG, 255, 0), + OBJNAME("LOD21", PROC_LODBG, 255, 0), + OBJNAME("LOD22", PROC_LODBG, 255, 0), + OBJNAME("LOD23", PROC_LODBG, 255, 0), + OBJNAME("LOD24", PROC_LODBG, 255, 0), + OBJNAME("LOD25", PROC_LODBG, 255, 0), + OBJNAME("LOD26", PROC_LODBG, 255, 0), + OBJNAME("LOD27", PROC_LODBG, 255, 0), + OBJNAME("LOD28", PROC_LODBG, 255, 0), + OBJNAME("LOD29", PROC_LODBG, 255, 0), + OBJNAME("LOD30", PROC_LODBG, 255, 0), + OBJNAME("LOD31", PROC_LODBG, 255, 0), + OBJNAME("LOD32", PROC_LODBG, 255, 0), + OBJNAME("LOD33", PROC_LODBG, 255, 0), + OBJNAME("LOD34", PROC_LODBG, 255, 0), + OBJNAME("LOD35", PROC_LODBG, 255, 0), + OBJNAME("LOD36", PROC_LODBG, 255, 0), + OBJNAME("LOD37", PROC_LODBG, 255, 0), + OBJNAME("LOD38", PROC_LODBG, 255, 0), + OBJNAME("LOD39", PROC_LODBG, 255, 0), + OBJNAME("LOD40", PROC_LODBG, 255, 0), + OBJNAME("LOD41", PROC_LODBG, 255, 0), + OBJNAME("LOD42", PROC_LODBG, 255, 0), + OBJNAME("LOD43", PROC_LODBG, 255, 0), + OBJNAME("LOD44", PROC_LODBG, 255, 0), + OBJNAME("LOD45", PROC_LODBG, 255, 0), + OBJNAME("LOD46", PROC_LODBG, 255, 0), + OBJNAME("LOD47", PROC_LODBG, 255, 0), + OBJNAME("LOD48", PROC_LODBG, 255, 0), + OBJNAME("LOD49", PROC_LODBG, 255, 0), + OBJNAME("MtryB", PROC_Obj_Tribox, 0, 0), + OBJNAME("MtryBCr", PROC_Obj_Tribox, 1, 0), + OBJNAME("Vdora", PROC_Obj_Gong, 255, 0), + OBJNAME("Roten2", PROC_Obj_Roten, 0, 0), + OBJNAME("Roten3", PROC_Obj_Roten, 1, 0), + OBJNAME("Roten4", PROC_Obj_Roten, 2, 0), + OBJNAME("Qtkhd", PROC_Obj_Smplbg, 255, 0), + OBJNAME("Akabe", PROC_Obj_Akabe, 0, 0), + OBJNAME("Akabe10", PROC_Obj_Akabe, 1, 0), + OBJNAME("NBOX", PROC_Obj_Akabe, 2, 0), + OBJNAME("NBOX10", PROC_Obj_Akabe, 3, 0), + OBJNAME("Ashut", PROC_Obj_Ashut, 255, 0), + OBJNAME("Mcrtn", PROC_Obj_Tapestry, 255, 0), + OBJNAME("VmcBS", PROC_Obj_Vmc, 255, 0), + OBJNAME("Usovmc", PROC_Obj_Usovmc, 255, 0), + OBJNAME("Vfan", PROC_Obj_Vfan, 255, 0), + OBJNAME("Apzl", PROC_Obj_Apzl, 255, 0), + OBJNAME("Adnno", PROC_Obj_Adnno, 255, 0), + OBJNAME("Ycage00", PROC_Obj_Barrier, 255, 0), + OBJNAME("Yswdr00", PROC_Obj_Firewall, 255, 0), + OBJNAME("TnTrap", PROC_Obj_TnTrap, 255, 0), + OBJNAME("FgTrap", PROC_Obj_TnTrap, 255, 0), + OBJNAME("CmTrap", PROC_Obj_TnTrap, 255, 0), + OBJNAME("Hjump2", PROC_Obj_Jump, 255, 61), + OBJNAME("Esekh", PROC_Obj_Monument, 0, 55), + OBJNAME("Esekh2", PROC_Obj_Monument, 1, 55), + OBJNAME("Po", PROC_NPC_PHOTO, 255, 59), + OBJNAME("TagPo", PROC_TAG_PHOTO, 255, 0), + OBJNAME("Htoge1", PROC_TOGE, 255, 50), + OBJNAME("Skanran", PROC_Obj_Ferris, 255, 0), + OBJNAME("Ajav", PROC_Obj_Ajav, 255, 0), + OBJNAME("Trap", PROC_Obj_Trap, 255, 51), + OBJNAME("Hha", PROC_Obj_Hha, 255, 0), + OBJNAME("Htetu1", PROC_Obj_Htetu1, 255, 0), + OBJNAME("Tpota", PROC_Tpota, 255, 0), + OBJNAME("Stoudai", PROC_Obj_Light, 255, 0), + OBJNAME("Pbco", PROC_Obj_Pbco, 255, 0), + OBJNAME("Ebomzo", PROC_Obj_Ebomzo, 255, 0), + OBJNAME("Psail", PROC_SAIL, 0, 0), + OBJNAME("Homen1", PROC_Obj_Homen, 0, 0), + OBJNAME("Homen2", PROC_Obj_Homen, 1, 0), + OBJNAME("Xfuta", PROC_Obj_Xfuta, 1, 0), + OBJNAME("Vochi", PROC_Obj_Leaves, 0, 0), + OBJNAME("Hfuck1", PROC_Obj_Hfuck1, 0, 0), + OBJNAME("YLzou", PROC_Obj_YLzou, 0, 0), + OBJNAME("Gbed", PROC_Obj_Gbed, 0, 0), + OBJNAME("Vteng", PROC_Obj_Vteng, 0, 0), + OBJNAME("Ohatch", PROC_Obj_Ohatch, 255, 0), + OBJNAME("Rcloud", PROC_Obj_Rcloud, 0, 0), + OBJNAME("Ocloud", PROC_Obj_Rcloud, 1, 0), + OBJNAME("MPot", PROC_Obj_Mshokki, 0, 0), + OBJNAME("MOsara", PROC_Obj_Mshokki, 1, 0), + OBJNAME("MKoppu", PROC_Obj_Mshokki, 2, 0), + OBJNAME("Ptco", PROC_Obj_Bscurtain, 0, 0), + OBJNAME("Ptcu", PROC_Obj_Bscurtain, 1, 0), + OBJNAME("Kmon", PROC_Kmon, 0, 0), + OBJNAME("Sarace", PROC_NPC_SARACE, 0, 0), + OBJNAME("Hsh", PROC_Obj_HSH, 0, 54), + OBJNAME("Hsh2", PROC_Obj_HSH, 1, 54), + OBJNAME("Mmusic", PROC_Mmusic, 255, 0), + OBJNAME("Gryw00", PROC_Obj_Gryw00, 255, 0), + OBJNAME("AjavW", PROC_Obj_AjavW, 0, 0), + OBJNAME("Omensmk", PROC_Obj_Homensmk, 255, 0), + OBJNAME("Itnak", PROC_Obj_Itnak, 255, 0), + OBJNAME("Yfrlt00", PROC_Komore, 255, 0), + OBJNAME("FTree", PROC_Obj_Ftree, 255, 0), + OBJNAME("Vyasi", PROC_Obj_Vyasi, 255, 0), + OBJNAME("Vds", PROC_Obj_Vds, 255, 0), + OBJNAME("Rforce", PROC_Obj_Rforce, 255, 0), + OBJNAME("zouK", PROC_Obj_Zouk, 0, 0), + OBJNAME("zouK1", PROC_Obj_Zouk, 1, 0), + OBJNAME("zouK2", PROC_Obj_Zouk, 2, 0), + OBJNAME("zouK3", PROC_Obj_Zouk, 3, 0), + OBJNAME("zouK4", PROC_Obj_Zouk, 4, 0), + OBJNAME("Gaship1", PROC_Obj_Gaship, 255, 0), + OBJNAME("Gaship2", PROC_Obj_Gaship2, 255, 0), + OBJNAME("Ghrwp", PROC_WARPHYRULE, 255, 0), + OBJNAME("Gdemo20", PROC_WARPDEMO20, 255, 0), + OBJNAME("Warpgn", PROC_WARPGANON, 255, 0), + OBJNAME("Warpmj", PROC_WARPMAJYUU, 255, 0), + OBJNAME("Warpfo", PROC_WARPFOUT, 255, 0), + OBJNAME("Ygush00", PROC_Obj_Ygush00, 255, 0), + OBJNAME("Ygush01", PROC_Obj_Ygush00, 255, 0), + OBJNAME("Ygstp00", PROC_Obj_Ygush00, 255, 0), + OBJNAME("Ygush02", PROC_Obj_Ygush00, 255, 0), + OBJNAME("Hcbh", PROC_Obj_Hcbh, 0, 0), + OBJNAME("Com_B", PROC_Coming2, 255, 0), + OBJNAME("Com_C", PROC_Coming3, 255, 0), + OBJNAME("SPitem", PROC_SPC_ITEM01, 255, 0), + OBJNAME("HyoiKam", PROC_NPC_KAM, 255, 0), + OBJNAME("Shmrgrd", PROC_Obj_Shmrgrd, 255, 0), + OBJNAME("Vtil1", PROC_Obj_Vtil, 0, 0), + OBJNAME("Vtil2", PROC_Obj_Vtil, 1, 0), + OBJNAME("Vtil3", PROC_Obj_Vtil, 2, 0), + OBJNAME("Vtil4", PROC_Obj_Vtil, 3, 0), + OBJNAME("Vtil5", PROC_Obj_Vtil, 4, 0), + OBJNAME("Eayogn", PROC_Obj_Eayogn, 255, 0), + OBJNAME("VmsMS", PROC_Obj_Vmsms, 255, 0), + OBJNAME("VmsDZ", PROC_Obj_Vmsdz, 255, 0), + OBJNAME("VgnFD", PROC_Obj_Vgnfd, 255, 0), + OBJNAME("Ygcwp", PROC_Ygcwp, 255, 0), + OBJNAME("Figure", PROC_OBJ_FIGURE, 255, 0), + OBJNAME("RoHat", PROC_OBJ_HAT, 255, 0), + OBJNAME("Gntakis", PROC_Obj_Gnntakis, 255, 0), + OBJNAME("Gntakie", PROC_Obj_Gnntakie, 255, 0), + OBJNAME("Gnbtaki", PROC_Obj_Gnnbtaki, 255, 0), + OBJNAME("Bkm", PROC_BMD, 255, 0), + OBJNAME("Bst", PROC_BST, 255, 0), + OBJNAME("Bitem", PROC_BOSSITEM, 255, 0), + OBJNAME("Fganon", PROC_FGANON, 255, 0), + OBJNAME("Bwd", PROC_BWD, 255, 0), + OBJNAME("Bwds", PROC_BWDS, 255, 0), + OBJNAME("Bgn", PROC_BGN, 255, 0), + OBJNAME("Gnd", PROC_GND, 255, 0), + OBJNAME("Puti", PROC_PT, 255, 0), + OBJNAME("d_act0", PROC_DEMO00, 0, 0), + OBJNAME("d_act1", PROC_DEMO00, 1, 0), + OBJNAME("d_act2", PROC_DEMO00, 2, 0), + OBJNAME("d_act3", PROC_DEMO00, 3, 0), + OBJNAME("d_act4", PROC_DEMO00, 4, 0), + OBJNAME("d_act5", PROC_DEMO00, 5, 0), + OBJNAME("d_act6", PROC_DEMO00, 6, 0), + OBJNAME("d_act7", PROC_DEMO00, 7, 0), + OBJNAME("d_act8", PROC_DEMO00, 8, 0), + OBJNAME("d_act9", PROC_DEMO00, 9, 0), + OBJNAME("d_act10", PROC_DEMO00, 10, 0), + OBJNAME("d_act11", PROC_DEMO00, 11, 0), + OBJNAME("d_act12", PROC_DEMO00, 12, 0), + OBJNAME("d_act13", PROC_DEMO00, 13, 0), + OBJNAME("d_act14", PROC_DEMO00, 14, 0), + OBJNAME("d_act15", PROC_DEMO00, 15, 0), + OBJNAME("d_act16", PROC_DEMO00, 16, 0), + OBJNAME("d_act17", PROC_DEMO00, 17, 0), + OBJNAME("d_act18", PROC_DEMO00, 18, 0), + OBJNAME("d_act19", PROC_DEMO00, 19, 0), + OBJNAME("d_act20", PROC_DEMO00, 20, 0), + OBJNAME("d_act21", PROC_DEMO00, 21, 0), + OBJNAME("d_act22", PROC_DEMO00, 22, 0), + OBJNAME("d_act23", PROC_DEMO00, 23, 0), + OBJNAME("d_act24", PROC_DEMO00, 24, 0), + OBJNAME("d_act25", PROC_DEMO00, 25, 0), + OBJNAME("d_act26", PROC_DEMO00, 26, 0), + OBJNAME("d_act27", PROC_DEMO00, 27, 0), + OBJNAME("d_act28", PROC_DEMO00, 28, 0), + OBJNAME("d_act29", PROC_DEMO00, 29, 0), + OBJNAME("d_act30", PROC_DEMO00, 30, 0), + OBJNAME("d_act31", PROC_DEMO00, 31, 0), + OBJNAME("SYAN", PROC_SYAN, 255, 0), + OBJNAME("TagD1", PROC_Dummy, 0, 0), + OBJNAME("TagD2", PROC_Dummy, 1, 0), + OBJNAME("TagD3", PROC_Dummy, 2, 0), + OBJNAME("TagD4", PROC_Dummy, 3, 0), + OBJNAME("mp", PROC_MP, 255, 0), + OBJNAME("STBox", PROC_SALVAGE_TBOX, 255, 0), + OBJNAME("Fobj00", PROC_STANDITEM, 255, 0), + OBJNAME("Tama", PROC_TAMA, 255, 0), + OBJNAME("Agb", PROC_AGB, 255, 0), + OBJNAME("Bg", PROC_BG, 255, 0), + OBJNAME("Himo2", PROC_HIMO2, 255, 0), + OBJNAME("Esa", PROC_ESA, 255, 0), + OBJNAME("Boko", PROC_BOKO, 255, 0), + OBJNAME("Kantera", PROC_KANTERA, 255, 0), + OBJNAME("HShot", PROC_HOOKSHOT, 255, 0), + OBJNAME("Boom", PROC_BOOMERANG, 255, 0), + OBJNAME("Bomb", PROC_BOMB, 255, 0), + OBJNAME("Bomb2", PROC_Bomb2, 255, 0), + OBJNAME("Boko", PROC_BOKO, 255, 0), + OBJNAME("Arrow", PROC_ARROW, 255, 0), + OBJNAME("Arrow_i", PROC_ARROW_ICEEFF, 255, 0), + OBJNAME("Arrow_l", PROC_ARROW_LIGHTEFF, 255, 0), + OBJNAME("Grid", PROC_GRID, 255, 0), + OBJNAME("Kaji", PROC_Kaji, 255, 0), + OBJNAME("HFloor", PROC_Hot_Floor, 255, 0), + OBJNAME("Buoyr", PROC_Obj_Buoyrace, 255, 0), + OBJNAME("Ritem", PROC_RACEITEM, 255, 0), + OBJNAME("Sitem", PROC_ShopItem, 255, 0), + OBJNAME("Ditem", PROC_Demo_Item, 255, 0), + OBJNAME("Iball", PROC_Iball, 255, 0), + OBJNAME("Grass", PROC_GRASS, 255, 0), + OBJNAME("Vrbox", PROC_VRBOX, 255, 0), + OBJNAME("Vrbox2", PROC_VRBOX2, 255, 0), + OBJNAME("EndCode", PROC_PLAY_SCENE, 255, 0), +}; + /* 80041544-800415B4 .text dStage_searchName__FPCc */ -void dStage_searchName(const char*) { - /* Nonmatching */ +dStage_objectNameInf* dStage_searchName(const char* i_name) { + dStage_objectNameInf* obj = l_objectName; + + for (u32 i = 0; i < ARRAY_SIZE(l_objectName); i++) { + if (!strcmp(obj->mName, i_name)) { + return obj; + } + obj++; + } + + return NULL; } /* 800415B4-80041608 .text dStage_getName__FsSc */ -void dStage_getName(short, signed char) { - /* Nonmatching */ +const char* dStage_getName(s16 i_procName, s8 i_subtype) { + dStage_objectNameInf* obj = l_objectName; + + for (int i = 0; i < ARRAY_SIZE(l_objectName); i++) { + if (obj->mProcName == i_procName && obj->mSubtype == i_subtype) { + return obj->mName; + } + obj++; + } + + // "Who?" + return "誰?"; } /* 80041608-80041628 .text dStage_getName2__FsSc */ -void dStage_getName2(short, signed char) { - /* Nonmatching */ +const char* dStage_getName2(s16 i_procName, s8 i_subtype) { + return dStage_getName(i_procName, i_subtype); } -/* 80041628-8004169C .text dStage_actorCreate__FP22stage_actor_data_classP16fopAcM_prm_class */ -void dStage_actorCreate(stage_actor_data_class*, fopAcM_prm_class*) { - /* Nonmatching */ +/* 80041628-8004169C .text dStage_actorCreate__FP22stage_actor_data_classP16fopAcM_prm_class + */ +void dStage_actorCreate(stage_actor_data_class* i_actorData, fopAcM_prm_class* i_actorPrm) { + dStage_objectNameInf* nameinf_p = dStage_searchName(i_actorData->mName); + fopAc_ac_c* actor; + + if (nameinf_p == NULL) { + JKRHeap::free(i_actorPrm, NULL); + } else { + i_actorPrm->mSubtype = nameinf_p->mSubtype; + i_actorPrm->mGbaName = nameinf_p->mGbaName; + layer_class* curLayer = fpcLy_CurrentLayer(); + fpcSCtRq_Request(curLayer, nameinf_p->mProcName, NULL, NULL, i_actorPrm); + } } /* 8004169C-80041708 .text dStage_cameraCreate__FP24stage_camera2_data_classii */ -void dStage_cameraCreate(stage_camera2_data_class*, int, int) { - /* Nonmatching */ +int dStage_cameraCreate(stage_camera2_data_class* i_cameraData, int i_cameraIdx, int param_2) { + i_cameraData = static_cast(cMl::memalignB(-4, 0x18)); + + if (i_cameraData != NULL) { + i_cameraData->field_0x4 = 0.0f; + i_cameraData->field_0x8 = 0.0f; + i_cameraData->field_0x4 = 0.0f; + i_cameraData->field_0x0 = param_2; + fopCamM_Create(i_cameraIdx, PROC_CAMERA, i_cameraData); + } + + return 1; } /* 80041708-8004184C .text dStage_decodeSearchIkada__FPvi */ @@ -171,314 +1205,899 @@ void dStage_chkPlayerId(int, int) { /* Nonmatching */ } -/* 80041AEC-80041AF4 .text getPlayer__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPlayer() const { - /* Nonmatching */ -} - /* 80041AF4-80041E84 .text dStage_playerInit__FP11dStage_dt_cPviPv */ -void dStage_playerInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_playerInit(dStage_dt_c* i_stage, void* i_data, int num, void* param_3) { + stage_actor_class* player = (stage_actor_class*)((int*)i_data + 1); + stage_actor_data_class* player_data = player->m_entries; + + if (dComIfGp_getPlayer(0) != NULL) { + return 1; + } + + i_stage->setPlayer(player); + i_stage->setPlayerNum(num); + + fopAcM_prm_class* appen = fopAcM_CreateAppend(); + JUT_ASSERT(1735, appen != 0); + + int point = dComIfGp_getStartStagePoint(); + u32 roomParam = dComIfGs_getRestartRoomParam(); + if (point == -2) { + dStage_playerInitIkada(appen, param_3); + } else if (point == -3) { + appen->mParameter = dComIfGs_getTurnRestartParam(); + appen->mPos = dComIfGs_getTurnRestartPos(); + appen->mAngle.set(0, dComIfGs_getTurnRestartAngleY(), -0x100); + } else if (point == -1) { + appen->mParameter = dComIfGs_getRestartRoomParam(); + appen->mPos = dComIfGs_getRestartRoomPos(); + appen->mAngle.set(0, dComIfGs_getRestartRoomAngleY(), -0x100); + } else { + int i; + for (i = 0; i < num; i++) { + if ((u8)player_data->mAngle.z == point) { + break; + } + player_data++; + } + + JUT_ASSERT(1787, i != num); + + appen->mParameter = player_data->mParameter; + appen->mPos = player_data->mSpawnPos; + appen->mAngle = player_data->mAngle; + appen->mEnemyNo = player_data->mEnemyNo; + + if (roomParam != 0 && (int)((appen->mParameter >> 0xC) & 0xF) != 2) { + appen->mParameter = (roomParam & 0xFFFFFFC0) | (appen->mParameter & 0x3F); + } + } + + dComIfGs_setRestartRoomParam(0); + appen->mEnemyNo = 0xFFFF; + appen->mRoomNo = -1; + + dComIfGp_getStartStage()->set(dComIfGp_getStartStageName(), appen->mParameter & 0x3F, + dComIfGp_getStartStagePoint(), dComIfGp_getStartStageLayer()); + + dComIfGp_setShipId((appen->mAngle.z >> 8) & 0xFF); + dComIfGp_setShipRoomId(appen->mParameter & 0x3F); + dStage_actorCreate(player_data, appen); + + scene_class* stageProc = fopScnM_SearchByID(dStage_roomControl_c::getProcID()); + JUT_ASSERT(1842, stageProc != 0); + + if (stageProc->mBase.mBase.mProcName != PROC_PLAY_SCENE) { + fopAcM_create(PROC_TITLE, 0, NULL, -1, NULL, NULL, 255, NULL); + } + + fopMsgM_Create(PROC_METER, NULL, NULL); + + cXyz agb_pos(appen->mPos.x, appen->mPos.y + 10.0f, appen->mPos.z); + fopAcM_create(PROC_AGB, 0, &agb_pos, -1, NULL, NULL, 255, NULL); + dComIfGp_setAgb(NULL); + return 1; } /* 80041E84-80041ED4 .text dStage_cameraInit__FP11dStage_dt_cPviPv */ -void dStage_cameraInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_cameraInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + stage_camera_class* camera = (stage_camera_class*)((char*)i_data + 4); + i_stage->setCamera(camera); + dStage_cameraCreate(camera->m_entries, 0, 0); + return 1; } /* 80041ED4-80041F08 .text dStage_RoomCameraInit__FP11dStage_dt_cPviPv */ -void dStage_RoomCameraInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_RoomCameraInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setCamera((stage_camera_class*)((char*)i_data + 4)); + return 1; } /* 80041F08-80041F3C .text dStage_arrowInit__FP11dStage_dt_cPviPv */ -void dStage_arrowInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_arrowInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setArrow((stage_arrow_class*)((char*)i_data + 4)); + return 1; } /* 80041F3C-80041F54 .text dStage_mapInfo_GetOceanX__FP20stage_map_info_class */ -void dStage_mapInfo_GetOceanX(stage_map_info_class*) { - /* Nonmatching */ +int dStage_mapInfo_GetOceanX(stage_map_info_class* i_mapInfo) { + int rt = (i_mapInfo->mOceanXZ & 0xF); + if (!(i_mapInfo->mOceanXZ & 8)) { + return rt; + } + + return rt - 0x10; } /* 80041F54-80041F6C .text dStage_mapInfo_GetOceanZ__FP20stage_map_info_class */ -void dStage_mapInfo_GetOceanZ(stage_map_info_class*) { - /* Nonmatching */ +// NONMATCHING +int dStage_mapInfo_GetOceanZ(stage_map_info_class* i_mapInfo) { + int rt = (i_mapInfo->mOceanXZ >> 4) & 0xF; + if ((i_mapInfo->mOceanXZ >> 4) & 8) { + return rt - 0x10; + } + + return rt; } /* 80041F6C-80041FD0 .text dStage_mapInfoInit__FP11dStage_dt_cPviPv */ -void dStage_mapInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_mapInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + stage_map_info_dummy_class* mapInfo = (stage_map_info_dummy_class*)((char*)i_data + 4); + i_stage->setMapInfo(mapInfo->m_entries); + i_stage->setMapInfoBase(mapInfo); + return 1; } /* 80041FD0-8004205C .text getMapInfo2__15dStage_roomDt_cCFi */ -void dStage_roomDt_c::getMapInfo2(int) const { - /* Nonmatching */ +stage_map_info_class* dStage_roomDt_c::getMapInfo2(int param_0) const { + stage_map_info_dummy_class* map_info_p = getMapInfoBase(); + + if (map_info_p == NULL || map_info_p->num == 0 || map_info_p->m_entries == NULL) { + return NULL; + } + + stage_map_info_class* data_p = map_info_p->m_entries; + + for (int i = 0; i < map_info_p->num; i++) { + if (param_0 == data_p->field_0x35) { + return data_p; + } + + data_p++; + } + + return NULL; } /* 8004205C-80042064 .text getMapInfoBase__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getMapInfoBase() const { - /* Nonmatching */ +stage_map_info_dummy_class* dStage_roomDt_c::getMapInfoBase() const { + return mpMapInfoBase; } /* 80042064-800420F0 .text getMapInfo2__16dStage_stageDt_cCFi */ -void dStage_stageDt_c::getMapInfo2(int) const { - /* Nonmatching */ +stage_map_info_class* dStage_stageDt_c::getMapInfo2(int param_0) const { + stage_map_info_dummy_class* map_info_p = getMapInfoBase(); + + if (map_info_p == NULL || map_info_p->num == 0 || map_info_p->m_entries == NULL) { + return NULL; + } + + stage_map_info_class* data_p = map_info_p->m_entries; + + for (int i = 0; i < map_info_p->num; i++) { + if (param_0 == data_p->field_0x35) { + return data_p; + } + + data_p++; + } + + return NULL; } /* 800420F0-800420F8 .text getMapInfoBase__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getMapInfoBase() const { - /* Nonmatching */ +stage_map_info_dummy_class* dStage_stageDt_c::getMapInfoBase() const { + return mpMapInfoBase; } /* 800420F8-8004212C .text dStage_paletInfoInit__FP11dStage_dt_cPviPv */ -void dStage_paletInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_paletInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_nodeHeader* pal_info = (dStage_nodeHeader*)(i_data); + i_stage->setPaletInfo((stage_palet_info_class*)pal_info->m_offset); + return 1; } /* 8004212C-80042160 .text dStage_pselectInfoInit__FP11dStage_dt_cPviPv */ -void dStage_pselectInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_pselectInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_nodeHeader* psel_info = (dStage_nodeHeader*)(i_data); + i_stage->setPselectInfo((stage_pselect_info_class*)psel_info->m_offset); + return 1; } /* 80042160-80042194 .text dStage_envrInfoInit__FP11dStage_dt_cPviPv */ -void dStage_envrInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_envrInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_nodeHeader* envr_info = (dStage_nodeHeader*)(i_data); + i_stage->setEnvrInfo((stage_envr_info_class*)envr_info->m_offset); + return 1; } /* 80042194-800421E8 .text dStage_filiInfoInit__FP11dStage_dt_cPviPv */ -void dStage_filiInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_filiInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + if (i_num == 0) { + i_stage->setFileListInfo(NULL); + } else { + dStage_nodeHeader* fili_info = (dStage_nodeHeader*)(i_data); + i_stage->setFileListInfo((dStage_FileList_dt_c*)fili_info->m_offset); + } + + return 1; } /* 800421E8-8004221C .text dStage_vrboxInfoInit__FP11dStage_dt_cPviPv */ -void dStage_vrboxInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_vrboxInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_nodeHeader* vrbox_info = (dStage_nodeHeader*)(i_data); + i_stage->setVrboxInfo((stage_vrbox_info_class*)vrbox_info->m_offset); + return 1; } /* 8004221C-80042280 .text dStage_plightInfoInit__FP11dStage_dt_cPviPv */ -void dStage_plightInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_plightInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_nodeHeader* plight_info = (dStage_nodeHeader*)(i_data); + i_stage->setPlightInfo((stage_plight_info_class*)plight_info->m_offset); + i_stage->setPlightNumInfo(i_num); + return 1; } /* 80042280-8004230C .text dStage_lgtvInfoInit__FP11dStage_dt_cPviPv */ -void dStage_lgtvInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_lgtvInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setLightVecInfoNum(i_num); + + if (i_num == 0) { + i_stage->setLightVecInfo(NULL); + } else { + dStage_nodeHeader* lgtv_info = (dStage_nodeHeader*)(i_data); + i_stage->setLightVecInfo((stage_lightvec_info_class*)lgtv_info->m_offset); + } + + return 1; } /* 8004230C-8004238C .text dStage_stagInfoInit__FP11dStage_dt_cPviPv */ -void dStage_stagInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_stagInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_nodeHeader* stag_info = (dStage_nodeHeader*)(i_data); + i_stage->setStagInfo((stage_stag_info_class*)stag_info->m_offset); + + int stageNo = dStage_stagInfo_GetSaveTbl(i_stage->getStagInfo()); + dComIfGs_getSave(stageNo); + dComIfGs_initDan(stageNo); + return 1; } /* 8004238C-800423C0 .text dStage_sclsInfoInit__FP11dStage_dt_cPviPv */ -void dStage_sclsInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_sclsInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setSclsInfo((stage_scls_info_dummy_class*)((char*)i_data + 4)); + return 1; } /* 800423C0-800424BC .text dStage_actorInit__FP11dStage_dt_cPviPv */ -void dStage_actorInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_actorInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + stage_actor_class* actor = (stage_actor_class*)((int*)i_data + 1); + stage_actor_data_class* actor_data = actor->m_entries; + + for (int i = 0; i < actor->num; i++) { + if (!dComIfGs_isActor(actor_data->mEnemyNo, i_stage->getRoomNo())) { + fopAcM_prm_class* appen = fopAcM_CreateAppend(); + + if (appen != NULL) { + appen->mParameter = actor_data->mParameter; + appen->mPos = actor_data->mSpawnPos; + appen->mAngle = actor_data->mAngle; + appen->mEnemyNo = actor_data->mEnemyNo; + appen->mRoomNo = i_stage->getRoomNo(); + dStage_actorCreate(actor_data, appen); + } + } + actor_data++; + } + + return 1; } /* 800424BC-8004259C .text dStage_tgscInfoInit__FP11dStage_dt_cPviPv */ -void dStage_tgscInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_tgscInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + stage_tgsc_class* actor = (stage_tgsc_class*)((int*)i_data + 1); + stage_tgsc_data_class* actor_data = actor->m_entries; + + for (int i = 0; i < actor->num; i++) { + fopAcM_prm_class* appen = fopAcM_CreateAppend(); + + if (appen != NULL) { + appen->mParameter = actor_data->mParameter; + appen->mPos = actor_data->mSpawnPos; + appen->mAngle = actor_data->mAngle; + appen->mEnemyNo = actor_data->mEnemyNo; + appen->mRoomNo = i_stage->getRoomNo(); + appen->mScale[0] = actor_data->field_0x20; + appen->mScale[1] = actor_data->field_0x21; + appen->mScale[2] = actor_data->field_0x22; + dStage_actorCreate(actor_data, appen); + } + actor_data++; + } + + return 1; } /* 8004259C-80042628 .text dStage_roomReadInit__FP11dStage_dt_cPviPv */ -void dStage_roomReadInit(dStage_dt_c*, void*, int, void*) { +int dStage_roomReadInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { /* Nonmatching */ } /* 80042628-80042658 .text dStage_roomRead_dt_c_GetReverbStage__FR14roomRead_classi */ -s8 dStage_roomRead_dt_c_GetReverbStage(roomRead_class&, int) { - /* Nonmatching */ +s8 dStage_roomRead_dt_c_GetReverbStage(roomRead_class& room, int index) { + if (index < 0 || index >= room.num) { + index = 0; + } + + return dStage_roomRead_dt_c_GetReverb(*room.m_entries[index]); } /* 80042658-8004268C .text dStage_ppntInfoInit__FP11dStage_dt_cPviPv */ -void dStage_ppntInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_ppntInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setPntInfo((dStage_dPnt_c*)((char*)i_data + 4)); + return 1; } /* 8004268C-8004271C .text dStage_pathInfoInit__FP11dStage_dt_cPviPv */ -void dStage_pathInfoInit(dStage_dt_c*, void*, int, void*) { +int dStage_pathInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { /* Nonmatching */ } /* 8004271C-80042750 .text dStage_rppnInfoInit__FP11dStage_dt_cPviPv */ -void dStage_rppnInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_rppnInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setPnt2Info((dStage_dPnt_c*)((char*)i_data + 4)); + return 1; } /* 80042750-800427E0 .text dStage_rpatInfoInit__FP11dStage_dt_cPviPv */ -void dStage_rpatInfoInit(dStage_dt_c*, void*, int, void*) { +int dStage_rpatInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { /* Nonmatching */ } /* 800427E0-80042814 .text dStage_soundInfoInit__FP11dStage_dt_cPviPv */ -void dStage_soundInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_soundInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setSoundInfo((dStage_SoundInfo_c*)((char*)i_data + 4)); + return 1; } /* 80042814-80042848 .text dStage_eventInfoInit__FP11dStage_dt_cPviPv */ -void dStage_eventInfoInit(dStage_dt_c*, void*, int, void*) { +int dStage_eventInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { /* Nonmatching */ } /* 80042848-8004287C .text dStage_floorInfoInit__FP11dStage_dt_cPviPv */ -void dStage_floorInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_floorInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setFloorInfo((dStage_FloorInfo_c*)((char*)i_data + 4)); + return 1; } /* 8004287C-8004293C .text dStage_memaInfoInit__FP11dStage_dt_cPviPv */ -void dStage_memaInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_memaInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_MemoryMap_c* pd = (dStage_MemoryMap_c*)((char*)i_data + 4); + i_stage->setMemoryMap(pd); + + if (pd != NULL) { + u32* entry_p = pd->m_entries; + + for (int i = 0; i < pd->num; i++) { + JKRExpHeap* heap = dStage_roomControl_c::createMemoryBlock(i, *entry_p + 0x300); + JUT_ASSERT(2932, heap != 0); + entry_p++; + } + } + + return 1; } /* 8004293C-800429C0 .text dStage_mecoInfoInit__FP11dStage_dt_cPviPv */ -void dStage_mecoInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_mecoInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_MemoryConfig_c* pd = (dStage_MemoryConfig_c*)((char*)i_data + 4); + i_stage->setMemoryConfig(pd); + + if (pd != NULL) { + dStage_MemoryConfig_data* entry_p = pd->m_entries; + + for (int i = 0; i < pd->num; i++) { + dStage_roomControl_c::setMemoryBlockID(entry_p->m_roomNo, entry_p->m_blockID); + entry_p++; + } + } + + return 1; } /* 800429C0-80042B10 .text dStage_setShipPos__Fii */ -void dStage_setShipPos(int, int) { - /* Nonmatching */ +// NONMATCHING - close +bool dStage_setShipPos(int param_0, int param_1) { + if (strcmp(dComIfGp_getStartStageName(), "GanonM") == 0 && !dComIfGs_isEventBit(0x3D02)) { + param_0 = 0xFF; + param_1 = 0xFF; + dComIfGp_setShipId(0xFF); + dComIfGp_setShipRoomId(0xFF); + } + + // g_dComIfG_gameInfo.save.getTurnRestart().field_0x34 probably an inline, idk which though + if (dComIfGp_getStartStagePoint() == -3 && + g_dComIfG_gameInfo.save.getTurnRestart().field_0x34 != 0) + { + daShip_c* ship_p = (daShip_c*)fopAcM_SearchByName(PROC_SHIP); + if (ship_p != NULL) { + ship_p->initStartPos(&dComIfGs_getTurnRestartShipPos(), + dComIfGs_getTurnRestartShipAngleY()); + } + + g_dComIfG_gameInfo.save.getTurnRestart().field_0x34 = 0; + } + + if (param_0 != 0xFF) { + if (param_1 == 0xFF) { + param_1 = dComIfGp_roomControl_getStayNo(); + } + + dStage_Ship_data* ship_data_p = dComIfGp_getShip(param_1, param_0); + if (ship_data_p != NULL) { + daShip_c* ship_p = (daShip_c*)fopAcM_SearchByName(PROC_SHIP); + if (ship_p != NULL) { + ship_p->initStartPos(&ship_data_p->m_pos, ship_data_p->m_angle); + return true; + } + } + } + + return false; } /* 80042B10-80042B70 .text dStage_chkTaura__Fi */ -void dStage_chkTaura(int) { - /* Nonmatching */ +bool dStage_chkTaura(int param_0) { + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0 && param_0 == 11) { + return true; + } + + return false; } /* 80042B70-80042C38 .text dStage_shipInfoInit__FP11dStage_dt_cPviPv */ -void dStage_shipInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_shipInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setShip((dStage_Ship_c*)((char*)i_data + 4)); + + s32 shipId = dComIfGp_getShipId(); + s32 roomId = dComIfGp_getShipRoomId(); + + if (dStage_chkTaura(roomId)) { + if (!dComIfGs_isEventBit(0x2A08) && dStage_setShipPos(0x80, roomId)) { + shipId = 0xFF; + roomId = 0xFF; + dComIfGp_setShipId(0xFF); + dComIfGp_setShipRoomId(0xFF); + } + } + + if (dStage_setShipPos(shipId, roomId)) { + dComIfGp_setShipId(0xFF); + dComIfGp_setShipRoomId(0xFF); + } + + return 1; } /* 80042C38-80042C6C .text dStage_multInfoInit__FP11dStage_dt_cPviPv */ -void dStage_multInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_multInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setMulti((dStage_Multi_c*)((char*)i_data + 4)); + return 1; } /* 80042C6C-80042CA0 .text dStage_lbnkInfoInit__FP11dStage_dt_cPviPv */ -void dStage_lbnkInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_lbnkInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setLbnk((dStage_Lbnk_c*)((char*)i_data + 4)); + return 1; } /* 80042CA0-80042D18 .text dStage_stageTresureInit__FP11dStage_dt_cPviPv */ -void dStage_stageTresureInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_stageTresureInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* param_3) { + i_stage->setTresure((stage_tresure_class*)((char*)i_data + 4)); + dStage_actorInit(i_stage, i_data, i_num, param_3); + dStage_KeepTresureInfoProc(i_stage, (stage_tresure_class*)((char*)i_data + 4)); + return 1; } /* 80042D18-80042D80 .text dStage_roomTresureInit__FP11dStage_dt_cPviPv */ -void dStage_roomTresureInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_roomTresureInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* param_3) { + i_stage->setTresure((stage_tresure_class*)((char*)i_data + 4)); + dStage_actorInit(i_stage, i_data, i_num, param_3); + return 1; } /* 80042D80-80042DA4 .text dStage_layerTresureInit__FP11dStage_dt_cPviPv */ -void dStage_layerTresureInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_layerTresureInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* param_3) { + dStage_actorInit(i_stage, i_data, i_num, param_3); + return 1; } /* 80042DA4-80042DD8 .text dStage_dmapInfoInit__FP11dStage_dt_cPviPv */ -void dStage_dmapInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_dmapInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + i_stage->setDMap((dStage_DMap_c*)((char*)i_data + 4)); + return 1; } /* 80042DD8-80042E50 .text dStage_stageDrtgInfoInit__FP11dStage_dt_cPviPv */ -void dStage_stageDrtgInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_stageDrtgInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* param_3) { + i_stage->setDrTg((stage_tgsc_class*)((char*)i_data + 4)); + dStage_tgscInfoInit(i_stage, i_data, i_num, param_3); + dStage_KeepDoorInfoProc(i_stage, (stage_tgsc_class*)((char*)i_data + 4)); + return 1; } /* 80042E50-80042EB8 .text dStage_roomDrtgInfoInit__FP11dStage_dt_cPviPv */ -void dStage_roomDrtgInfoInit(dStage_dt_c*, void*, int, void*) { - /* Nonmatching */ +int dStage_roomDrtgInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* param_3) { + i_stage->setDrTg((stage_tgsc_class*)((char*)i_data + 4)); + dStage_tgscInfoInit(i_stage, i_data, i_num, param_3); + return 1; } /* 80042EB8-80042F14 .text dKankyo_create__Fv */ void dKankyo_create() { - /* Nonmatching */ + fopKyM_Create(PROC_KANKYO, NULL, NULL); + fopKyM_Create(PROC_KYEFF, NULL, NULL); + fopKyM_Create(PROC_KYEFF2, NULL, NULL); + fopKyM_Create(PROC_ENVSE, NULL, NULL); } /* 80042F14-80042FC4 .text dStage_dt_c_decode__FPvP11dStage_dt_cP9FuncTablei */ -void dStage_dt_c_decode(void*, dStage_dt_c*, FuncTable*, int) { - /* Nonmatching */ +void dStage_dt_c_decode(void* i_data, dStage_dt_c* i_stage, FuncTable* i_funcTbl, int i_tblSize) { + if (i_data != NULL) { + for (int i = 0; i < i_tblSize; i++) { + dStage_fileHeader* file = ((dStage_fileHeader*)i_data); + dStage_nodeHeader* node = ((dStage_nodeHeader*)(file + 1)); + + FuncTable* nodeFunc = i_funcTbl + i; + + for (int j = 0; j < file->chunkCount; j++) { + if ((int)node->m_tag == *(int*)nodeFunc->identifier) { + if (nodeFunc->function != NULL) { + nodeFunc->function(i_stage, node, node->m_entryNum, i_data); + } + break; + } + node++; + } + } + } } /* 80042FC4-80042FFC .text dStage_dt_c_offsetToPtr__FPv */ -void dStage_dt_c_offsetToPtr(void*) { - /* Nonmatching */ +void dStage_dt_c_offsetToPtr(void* i_data) { + dStage_nodeHeader* p_tno = (dStage_nodeHeader*)((int*)i_data + 1); + + for (int i = 0; i < ((dStage_fileHeader*)i_data)->chunkCount; i++) { + if (p_tno->m_offset != 0) { + p_tno->m_offset += (u32)i_data; + } + p_tno++; + } } /* 80042FFC-800430E0 .text dStage_dt_c_stageInitLoader__FPvP11dStage_dt_c */ -void dStage_dt_c_stageInitLoader(void*, dStage_dt_c*) { - /* Nonmatching */ +void dStage_dt_c_stageInitLoader(void* i_data, dStage_dt_c* i_stage) { + static FuncTable l_funcTable[] = {"STAG", dStage_stagInfoInit}; + + JUT_ASSERT(3557, i_data != 0); + JUT_ASSERT(3558, i_stage != 0); + + dStage_dt_c_offsetToPtr(i_data); + i_stage->init(); + dStage_dt_c_decode(i_data, i_stage, l_funcTable, ARRAY_SIZE(l_funcTable)); } /* 800430E0-8004313C .text layerLoader__FPvP11dStage_dt_ci */ -void layerLoader(void*, dStage_dt_c*, int) { - /* Nonmatching */ +void layerLoader(void* i_data, dStage_dt_c* i_stage, int i_roomNo) { + static FuncTable l_layer0FuncTable[] = { + {"ACT0", dStage_actorInit}, + {"SCO0", dStage_tgscInfoInit}, + {"TRE0", dStage_layerTresureInit}, + }; + + static FuncTable l_layer1FuncTable[] = { + {"ACT1", dStage_actorInit}, + {"SCO1", dStage_tgscInfoInit}, + {"TRE1", dStage_layerTresureInit}, + }; + + static FuncTable l_layer2FuncTable[] = { + {"ACT2", dStage_actorInit}, + {"SCO2", dStage_tgscInfoInit}, + {"TRE2", dStage_layerTresureInit}, + }; + + static FuncTable l_layer3FuncTable[] = { + {"ACT3", dStage_actorInit}, + {"SCO3", dStage_tgscInfoInit}, + {"TRE3", dStage_layerTresureInit}, + }; + + static FuncTable l_layer4FuncTable[] = { + {"ACT4", dStage_actorInit}, + {"SCO4", dStage_tgscInfoInit}, + {"TRE4", dStage_layerTresureInit}, + }; + + static FuncTable l_layer5FuncTable[] = { + {"ACT5", dStage_actorInit}, + {"SCO5", dStage_tgscInfoInit}, + {"TRE5", dStage_layerTresureInit}, + }; + + static FuncTable l_layer6FuncTable[] = { + {"ACT6", dStage_actorInit}, + {"SCO6", dStage_tgscInfoInit}, + {"TRE6", dStage_layerTresureInit}, + }; + + static FuncTable l_layer7FuncTable[] = { + {"ACT7", dStage_actorInit}, + {"SCO7", dStage_tgscInfoInit}, + {"TRE7", dStage_layerTresureInit}, + }; + + static FuncTable l_layer8FuncTable[] = { + {"ACT8", dStage_actorInit}, + {"SCO8", dStage_tgscInfoInit}, + {"TRE8", dStage_layerTresureInit}, + }; + + static FuncTable l_layer9FuncTable[] = { + {"ACT9", dStage_actorInit}, + {"SCO9", dStage_tgscInfoInit}, + {"TRE9", dStage_layerTresureInit}, + }; + + static FuncTable l_layerAFuncTable[] = { + {"ACTa", dStage_actorInit}, + {"SCOa", dStage_tgscInfoInit}, + {"TREa", dStage_layerTresureInit}, + }; + + static FuncTable l_layerBFuncTable[] = { + {"ACTb", dStage_actorInit}, + {"SCOb", dStage_tgscInfoInit}, + {"TREb", dStage_layerTresureInit}, + }; + + static FuncTable* l_layerFuncTable_p[] = { + l_layer0FuncTable, l_layer1FuncTable, l_layer2FuncTable, l_layer3FuncTable, + l_layer4FuncTable, l_layer5FuncTable, l_layer6FuncTable, l_layer7FuncTable, + l_layer8FuncTable, l_layer9FuncTable, l_layerAFuncTable, l_layerBFuncTable, + }; + + dStage_dt_c_decode(i_data, i_stage, l_layerFuncTable_p[dComIfG_play_c::getLayerNo(i_roomNo)], + 3); } /* 8004313C-80043190 .text dStage_dt_c_stageLoader__FPvP11dStage_dt_c */ -void dStage_dt_c_stageLoader(void*, dStage_dt_c*) { - /* Nonmatching */ +void dStage_dt_c_stageLoader(void* i_data, dStage_dt_c* i_stage) { + static FuncTable l_funcTable[] = { + {"MEMA", dStage_memaInfoInit}, {"MECO", dStage_mecoInfoInit}, + {"MULT", dStage_multInfoInit}, {"PLYR", dStage_playerInit}, + {"CAMR", dStage_cameraInit}, {"RCAM", dStage_cameraInit}, + {"ACTR", dStage_actorInit}, {"TGOB", dStage_actorInit}, + {"TRES", dStage_stageTresureInit}, {"RTBL", dStage_roomReadInit}, + {"AROB", dStage_arrowInit}, {"RARO", dStage_arrowInit}, + {"2Dma", dStage_mapInfoInit}, {"2DMA", dStage_mapInfoInit}, + {"Pale", dStage_paletInfoInit}, {"Colo", dStage_pselectInfoInit}, + {"Virt", dStage_vrboxInfoInit}, {"SCLS", dStage_sclsInfoInit}, + {"TGSC", dStage_tgscInfoInit}, {"LGHT", dStage_plightInfoInit}, + {"PPNT", dStage_ppntInfoInit}, {"PATH", dStage_pathInfoInit}, + {"RPPN", dStage_rppnInfoInit}, {"RPAT", dStage_rpatInfoInit}, + {"SOND", dStage_soundInfoInit}, {"SCOB", dStage_tgscInfoInit}, + {"EVNT", dStage_eventInfoInit}, {"EnvR", dStage_envrInfoInit}, + {"FILI", dStage_filiInfoInit}, {"DOOR", dStage_stageDrtgInfoInit}, + {"LGTV", dStage_lgtvInfoInit}, {"FLOR", dStage_floorInfoInit}, + {"TGDR", dStage_tgscInfoInit}, {"DMAP", dStage_dmapInfoInit}, + }; + + dStage_dt_c_decode(i_data, i_stage, l_funcTable, ARRAY_SIZE(l_funcTable)); + layerLoader(i_data, i_stage, -1); } /* 80043190-800431F4 .text dStage_dt_c_roomLoader__FPvP11dStage_dt_c */ -void dStage_dt_c_roomLoader(void*, dStage_dt_c*) { - /* Nonmatching */ +void dStage_dt_c_roomLoader(void* i_data, dStage_dt_c* i_stage) { + static FuncTable l_funcTable[] = { + {"PLYR", dStage_playerInit}, {"RCAM", dStage_RoomCameraInit}, + {"RARO", dStage_arrowInit}, {"RTBL", dStage_roomReadInit}, + {"AROB", dStage_arrowInit}, {"2Dma", dStage_mapInfoInit}, + {"2DMA", dStage_mapInfoInit}, {"Pale", dStage_paletInfoInit}, + {"Colo", dStage_pselectInfoInit}, {"Virt", dStage_vrboxInfoInit}, + {"SCLS", dStage_sclsInfoInit}, {"LGHT", dStage_plightInfoInit}, + {"RPPN", dStage_rppnInfoInit}, {"RPAT", dStage_rpatInfoInit}, + {"SOND", dStage_soundInfoInit}, {"EVNT", dStage_eventInfoInit}, + {"EnvR", dStage_envrInfoInit}, {"FILI", dStage_filiInfoInit}, + {"LGTV", dStage_lgtvInfoInit}, {"FLOR", dStage_floorInfoInit}, + {"SHIP", dStage_shipInfoInit}, {"LBNK", dStage_lbnkInfoInit}, + }; + + dStage_dt_c_offsetToPtr(i_data); + i_stage->init(); + dStage_dt_c_decode(i_data, i_stage, l_funcTable, ARRAY_SIZE(l_funcTable)); } /* 800431F4-8004324C .text dStage_dt_c_roomReLoader__FPvP11dStage_dt_ci */ -void dStage_dt_c_roomReLoader(void*, dStage_dt_c*, int) { - /* Nonmatching */ +void dStage_dt_c_roomReLoader(void* i_data, dStage_dt_c* i_stage, int param_2) { + static FuncTable l_funcTable[] = { + {"ACTR", dStage_actorInit}, {"TGOB", dStage_actorInit}, + {"TRES", dStage_roomTresureInit}, {"TGSC", dStage_tgscInfoInit}, + {"SCOB", dStage_tgscInfoInit}, {"DOOR", dStage_tgscInfoInit}, + {"TGDR", dStage_roomDrtgInfoInit}, + }; + + dStage_dt_c_decode(i_data, i_stage, l_funcTable, ARRAY_SIZE(l_funcTable)); + layerLoader(i_data, i_stage, param_2); } /* 8004324C-800432EC .text dStage_infoCreate__Fv */ void dStage_infoCreate() { - /* Nonmatching */ + void* stageRsrc = dComIfG_getStageRes("Stage", "stage.dzs"); + JUT_ASSERT(3834, stageRsrc != 0) + + dStage_dt_c_stageInitLoader(stageRsrc, &dComIfGp_getStage()); } /* 800432EC-80043464 .text dStage_Create__Fv */ +// NONMATCHING - regalloc / string offsets void dStage_Create() { - /* Nonmatching */ + dKankyo_create(); + + void* stageRsrc = dComIfG_getStageRes("Stage", "stage.dzs"); + JUT_ASSERT(3862, stageRsrc != 0) + + dComIfGp_roomControl_init(); + dStage_dt_c_stageLoader(stageRsrc, &dComIfGp_getStage()); + + if (dComIfGp_getStartStageRoomNo() >= 0) { + int status = dStage_roomInit(dComIfGp_getStartStageRoomNo()); + JUT_ASSERT(3873, status); + } + + dMap_c::create(); + *dStage_roomControl_c::getDemoArcName() = NULL; + + if (dComIfG_getStageRes("Stage", "vr_sky.bdl") != NULL) { + fpcSCtRq_Request(fpcLy_CurrentLayer(), PROC_VRBOX, NULL, NULL, NULL); + fpcSCtRq_Request(fpcLy_CurrentLayer(), PROC_VRBOX2, NULL, NULL, NULL); + } + + dComIfGp_evmng_create(); } /* 80043464-80043514 .text dStage_Delete__Fv */ +// NONMATCHING - almost void dStage_Delete() { - /* Nonmatching */ + if (*dStage_roomControl_c::getDemoArcName() != 0) { + dComIfG_deleteObjectResMain(dStage_roomControl_c::getDemoArcName()); + } + + dStage_roomControl_c::destroyMemoryBlock(); + int stageNo = dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()); + dComIfGs_putSave(stageNo); + + dComIfG_deleteStageRes("Stage"); + dMap_c::remove(); + dComIfGp_evmng_remove(); } /* 80043514-80043604 .text dStage_RoomCheck__FP11cBgS_GndChk */ -void dStage_RoomCheck(cBgS_GndChk*) { - /* Nonmatching */ +int dStage_RoomCheck(cBgS_GndChk* i_gndChk) { + int roomReadId = dComIfG_Bgsp()->GetRoomId(*i_gndChk); + + if (roomReadId < 0) { + return 0; + } + + if (roomReadId != dComIfGp_roomControl_getStayNo()) { + dComIfGp_roomControl_zoneCountCheck(roomReadId); + } + + roomReadId = dComIfG_Bgsp()->GetGrpRoomInfId(*i_gndChk); + if (roomReadId == 0xFF) { + return 0; + } + + roomRead_class* room = dComIfGp_getStageRoom(); + if (room != NULL && room->num > roomReadId) { + int timePass = dStage_roomRead_dt_c_GetTimePass(*room->m_entries[roomReadId]); + dComIfGp_roomControl_setTimePass(timePass); + + roomRead_data_class* room_data = room->m_entries[roomReadId]; + return dComIfGp_roomControl_loadRoom(room_data->field_0x0, room_data->field_0x4); + } + + return 1; } /* 80043604-8004360C .text SetTimePass__20dStage_roomControl_cFi */ -void dStage_roomControl_c::SetTimePass(int) { - /* Nonmatching */ +void dStage_roomControl_c::SetTimePass(int i_timepass) { + m_time_pass = i_timepass; +} + +int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no); + +static inline s8 IkadaGetRoomNoArg0(fopAc_ac_c* i_actor) { + return (fopAcM_GetParam(i_actor) >> 4) & 0x3F; +} + +static inline s16 IkadaGetLinkIdArg1(fopAc_ac_c* i_actor) { + return (fopAcM_GetParam(i_actor) >> 10) & 0xFF; +} + +static inline u8 IkadaGetIkadaIdArg2(fopAc_ac_c* i_actor) { + return (fopAcM_GetParam(i_actor) >> 0x12) & 0xFF; } /* 8004360C-80043900 .text dStage_changeSceneExitId__FR13cBgS_PolyInfofUlSc */ -void dStage_changeSceneExitId(cBgS_PolyInfo&, float, unsigned long, signed char) { - /* Nonmatching */ +// NONMATCHING - regalloc / extra extsh +int dStage_changeSceneExitId(cBgS_PolyInfo& i_poly, f32 i_speed, u32 i_mode, s8 i_roomNo) { + int exit_id = dComIfG_Bgsp()->GetExitId(i_poly); + if (exit_id == 0x3E || exit_id == 0x3B) { + fopAc_ac_c* actor_p = dComIfG_Bgsp()->GetActorPointer(i_poly.GetBgIndex()); + s8 roomNo = IkadaGetRoomNoArg0(actor_p); + s16 point = IkadaGetLinkIdArg1(actor_p); + + if (exit_id == 0x3E) { + dComIfGp_setNextStage("Obshop", point, roomNo, -1, i_speed, i_mode, 1, 0); + } else if (exit_id == 0x3B) { + dComIfGp_setNextStage("Abship", point, roomNo, -1, i_speed, i_mode, 1, 0); + } + + dComIfGp_setIkadaShipBeforeRoomId(i_roomNo); + dComIfGp_setIkadaShipId(IkadaGetIkadaIdArg2(actor_p)); + dComIfGp_setIkadaShipBeforePos(actor_p->current.pos); + return 1; + } else if (exit_id == 0x3D) { + JUT_ASSERT(4134, dComIfGp_getIkadaShipBeforeRoomId() >= 0 && + dComIfGp_getIkadaShipBeforeRoomId() < 64); + dComIfGp_setNextStage("sea", -2, dComIfGp_getIkadaShipBeforeRoomId(), -1, i_speed, i_mode, + 1, 0); + return 1; + } else if (exit_id == 0x3C) { + if (strcmp(dComIfGp_getStartStageName(), "Asoko") == 0) { + if (dComIfGs_isEventBit(0x808)) { + if (dComIfGs_isEventBit(0x520)) { + dComIfGp_setNextStage("sea", 5, 11, -1, i_speed, i_mode, 1, 0); + } else { + dComIfGp_setNextStage("MajyuE", 18, 0, -1, i_speed, i_mode, 1, 0); + } + } else { + dComIfGp_setNextStage("A_umikz", 0, 0, -1, i_speed, i_mode, 1, 0); + } + } else { + dComIfGp_setNextStage("Asoko", 0, 0, -1, i_speed, i_mode, 1, 0); + } + return 1; + } + + return dStage_changeScene(exit_id, i_speed, i_mode, i_roomNo); } /* 80043900-80043AA8 .text dStage_changeScene__FifUlSc */ -void dStage_changeScene(int, float, unsigned long, signed char) { - /* Nonmatching */ -} +// NONMATCHING - almost +int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no) { + stage_scls_info_dummy_class* scls; -/* 80043AA8-80043AB0 .text getSclsInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getSclsInfo() const { - /* Nonmatching */ + if (room_no == -1) { + scls = dComIfGp_getStageSclsInfo(); + } else { + JUT_ASSERT(4192, 0 <= room_no && room_no < 64); + scls = dComIfGp_roomControl_getStatusRoomDt(room_no)->mRoomDt.getSclsInfo(); + } + + if (scls == NULL) { + return 0; + } + + JUT_ASSERT(4202, 0 <= i_exitId && i_exitId < scls->num); + + stage_scls_info_class* scls_info = &scls->m_entries[i_exitId]; + s32 wipe = dStage_sclsInfo_getWipe(scls_info); + + dComIfGp_setNextStage(scls_info->mStage, scls_info->mStart, scls_info->mRoom, -1, speed, mode, + 1, wipe == 15 ? 0 : wipe); + return 1; } /* 80043AB0-80043B10 .text dStage_restartRoom__FUlUl */ -void dStage_restartRoom(unsigned long, unsigned long) { - /* Nonmatching */ +// NONMATCHING - extra extsb +void dStage_restartRoom(u32 roomParam, u32 mode) { + dComIfGp_setNextStage(dComIfGp_getStartStageName(), -1, dComIfGs_getRestartRoomNo(), -1, 0.0f, + mode, 0, 0); + dComIfGs_setRestartRoomParam(roomParam); } /* 80043B10-80043BD0 .text dStage_turnRestart__Fv */ @@ -488,786 +2107,30 @@ void dStage_turnRestart() { /* 80043BD0-80043C84 .text dStage_escapeRestart__Fv */ void dStage_escapeRestart() { - /* Nonmatching */ + daPy_lk_c* player_p = daPy_getPlayerLinkActorClass(); + dComIfGs_setTurnRestart(player_p->current.pos, player_p->shape_angle.y, + fopAcM_GetRoomNo(player_p), player_p->getDayNightParamData()); + + if (dComIfG_getTimerMode() == 3 && dComIfG_getTimerPtr() != NULL) { + dComIfG_TimerDeleteRequest(); + } + + dComIfGp_setNextStage(dComIfGp_getStartStageName(), -3, dComIfGs_getTurnRestartRoomNo(), -1, + 0.0f, 0, 0, 9); } /* 80043C84-80043CD0 .text dStage_checkRestart__Fv */ -void dStage_checkRestart() { - /* Nonmatching */ -} - -/* 80043CD0-80043CDC .text getRoomNo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getRoomNo() const { - /* Nonmatching */ -} - -/* 80043CDC-80043CE4 .text setCamera__15dStage_roomDt_cFP18stage_camera_class */ -void dStage_roomDt_c::setCamera(stage_camera_class*) { - /* Nonmatching */ -} - -/* 80043CE4-80043CEC .text getCamera__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getCamera() const { - /* Nonmatching */ -} - -/* 80043CEC-80043CF4 .text setArrow__15dStage_roomDt_cFP17stage_arrow_class */ -void dStage_roomDt_c::setArrow(stage_arrow_class*) { - /* Nonmatching */ -} - -/* 80043CF4-80043CFC .text getArrow__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getArrow() const { - /* Nonmatching */ -} - -/* 80043CFC-80043D04 .text setPlayer__15dStage_roomDt_cFP17stage_actor_class */ -void dStage_roomDt_c::setPlayer(stage_actor_class*) { - /* Nonmatching */ -} - -/* 80043D04-80043D0C .text setPlayerNum__15dStage_roomDt_cFUs */ -void dStage_roomDt_c::setPlayerNum(unsigned short) { - /* Nonmatching */ -} - -/* 80043D0C-80043D14 .text getPlayerNum__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPlayerNum() const { - /* Nonmatching */ -} - -/* 80043D14-80043D80 .text setRoom__15dStage_roomDt_cFP14roomRead_class */ -void dStage_roomDt_c::setRoom(roomRead_class*) { - /* Nonmatching */ -} - -/* 80043D80-80043DEC .text getRoom__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getRoom() const { - /* Nonmatching */ -} - -/* 80043DEC-80043DF4 .text setMapInfo__15dStage_roomDt_cFP20stage_map_info_class */ -void dStage_roomDt_c::setMapInfo(stage_map_info_class*) { - /* Nonmatching */ -} - -/* 80043DF4-80043DFC .text getMapInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getMapInfo() const { - /* Nonmatching */ -} - -/* 80043DFC-80043E04 .text setMapInfoBase__15dStage_roomDt_cFP26stage_map_info_dummy_class */ -void dStage_roomDt_c::setMapInfoBase(stage_map_info_dummy_class*) { - /* Nonmatching */ -} - -/* 80043E04-80043E70 .text setPaletInfo__15dStage_roomDt_cFP22stage_palet_info_class */ -void dStage_roomDt_c::setPaletInfo(stage_palet_info_class*) { - /* Nonmatching */ -} - -/* 80043E70-80043EDC .text getPaletInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPaletInfo() const { - /* Nonmatching */ -} - -/* 80043EDC-80043F48 .text setPselectInfo__15dStage_roomDt_cFP24stage_pselect_info_class */ -void dStage_roomDt_c::setPselectInfo(stage_pselect_info_class*) { - /* Nonmatching */ -} - -/* 80043F48-80043FB4 .text getPselectInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPselectInfo() const { - /* Nonmatching */ -} - -/* 80043FB4-80044020 .text setEnvrInfo__15dStage_roomDt_cFP21stage_envr_info_class */ -void dStage_roomDt_c::setEnvrInfo(stage_envr_info_class*) { - /* Nonmatching */ -} - -/* 80044020-8004408C .text getEnvrInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getEnvrInfo() const { - /* Nonmatching */ -} +// NONMATCHING - extra extsh +bool dStage_checkRestart() { + if (dComIfGp_isEnableNextStage()) { + if (dComIfGp_getStartStagePoint() == -2 || dComIfGp_getStartStagePoint() == -3) { + return false; + } -/* 8004408C-80044094 .text setVrboxInfo__15dStage_roomDt_cFP22stage_vrbox_info_class */ -void dStage_roomDt_c::setVrboxInfo(stage_vrbox_info_class*) { - /* Nonmatching */ -} - -/* 80044094-8004409C .text getVrboxInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getVrboxInfo() const { - /* Nonmatching */ -} - -/* 8004409C-80044108 .text setPlightInfo__15dStage_roomDt_cFP23stage_plight_info_class */ -void dStage_roomDt_c::setPlightInfo(stage_plight_info_class*) { - /* Nonmatching */ -} - -/* 80044108-80044174 .text getPlightInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPlightInfo() const { - /* Nonmatching */ -} - -/* 80044174-800441E0 .text setPaletNumInfo__15dStage_roomDt_cFi */ -void dStage_roomDt_c::setPaletNumInfo(int) { - /* Nonmatching */ -} - -/* 800441E0-8004424C .text getPaletNumInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPaletNumInfo() const { - /* Nonmatching */ -} - -/* 8004424C-800442B8 .text setPselectNumInfo__15dStage_roomDt_cFi */ -void dStage_roomDt_c::setPselectNumInfo(int) { - /* Nonmatching */ -} - -/* 800442B8-80044324 .text getPselectNumInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPselectNumInfo() const { - /* Nonmatching */ -} - -/* 80044324-80044390 .text setEnvrNumInfo__15dStage_roomDt_cFi */ -void dStage_roomDt_c::setEnvrNumInfo(int) { - /* Nonmatching */ -} - -/* 80044390-800443FC .text getEnvrNumInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getEnvrNumInfo() const { - /* Nonmatching */ -} - -/* 800443FC-80044404 .text setVrboxNumInfo__15dStage_roomDt_cFi */ -void dStage_roomDt_c::setVrboxNumInfo(int) { - /* Nonmatching */ -} - -/* 80044404-8004440C .text getVrboxNumInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getVrboxNumInfo() const { - /* Nonmatching */ -} - -/* 8004440C-80044478 .text setPlightNumInfo__15dStage_roomDt_cFi */ -void dStage_roomDt_c::setPlightNumInfo(int) { - /* Nonmatching */ -} - -/* 80044478-800444E4 .text getPlightNumInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPlightNumInfo() const { - /* Nonmatching */ -} - -/* 800444E4-800444EC .text setLightVecInfo__15dStage_roomDt_cFP25stage_lightvec_info_class */ -void dStage_roomDt_c::setLightVecInfo(stage_lightvec_info_class*) { - /* Nonmatching */ -} - -/* 800444EC-800444F4 .text getLightVecInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getLightVecInfo() const { - /* Nonmatching */ -} - -/* 800444F4-800444FC .text setLightVecInfoNum__15dStage_roomDt_cFi */ -void dStage_roomDt_c::setLightVecInfoNum(int) { - /* Nonmatching */ -} - -/* 800444FC-80044504 .text getLightVecInfoNum__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getLightVecInfoNum() const { - /* Nonmatching */ -} - -/* 80044504-80044570 .text setStagInfo__15dStage_roomDt_cFP21stage_stag_info_class */ -void dStage_roomDt_c::setStagInfo(stage_stag_info_class*) { - /* Nonmatching */ -} - -/* 80044570-800445DC .text getStagInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getStagInfo() const { - /* Nonmatching */ -} + if (dComIfGs_getRestartRoomParam() != 0) { + return true; + } + } -/* 800445DC-800445E4 .text setSclsInfo__15dStage_roomDt_cFP27stage_scls_info_dummy_class */ -void dStage_roomDt_c::setSclsInfo(stage_scls_info_dummy_class*) { - /* Nonmatching */ + return false; } - -/* 800445E4-80044650 .text setPntInfo__15dStage_roomDt_cFP13dStage_dPnt_c */ -void dStage_roomDt_c::setPntInfo(dStage_dPnt_c*) { - /* Nonmatching */ -} - -/* 80044650-800446BC .text getPntInf__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPntInf() const { - /* Nonmatching */ -} - -/* 800446BC-80044728 .text setPathInfo__15dStage_roomDt_cFP14dStage_dPath_c */ -void dStage_roomDt_c::setPathInfo(dStage_dPath_c*) { - /* Nonmatching */ -} - -/* 80044728-80044794 .text getPathInf__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPathInf() const { - /* Nonmatching */ -} - -/* 80044794-8004479C .text setPnt2Info__15dStage_roomDt_cFP13dStage_dPnt_c */ -void dStage_roomDt_c::setPnt2Info(dStage_dPnt_c*) { - /* Nonmatching */ -} - -/* 8004479C-800447A4 .text getPnt2Inf__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPnt2Inf() const { - /* Nonmatching */ -} - -/* 800447A4-800447AC .text setPath2Info__15dStage_roomDt_cFP14dStage_dPath_c */ -void dStage_roomDt_c::setPath2Info(dStage_dPath_c*) { - /* Nonmatching */ -} - -/* 800447AC-800447B4 .text getPath2Inf__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getPath2Inf() const { - /* Nonmatching */ -} - -/* 800447B4-800447BC .text setSoundInfo__15dStage_roomDt_cFP18dStage_SoundInfo_c */ -void dStage_roomDt_c::setSoundInfo(dStage_SoundInfo_c*) { - /* Nonmatching */ -} - -/* 800447BC-800447C4 .text getSoundInf__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getSoundInf() const { - /* Nonmatching */ -} - -/* 800447C4-80044830 .text setEventInfo__15dStage_roomDt_cFP18dStage_EventInfo_c */ -void dStage_roomDt_c::setEventInfo(dStage_EventInfo_c*) { - /* Nonmatching */ -} - -/* 80044830-8004489C .text getEventInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getEventInfo() const { - /* Nonmatching */ -} - -/* 8004489C-800448A4 .text setFileListInfo__15dStage_roomDt_cFP20dStage_FileList_dt_c */ -void dStage_roomDt_c::setFileListInfo(dStage_FileList_dt_c*) { - /* Nonmatching */ -} - -/* 800448A4-800448AC .text setFloorInfo__15dStage_roomDt_cFP18dStage_FloorInfo_c */ -void dStage_roomDt_c::setFloorInfo(dStage_FloorInfo_c*) { - /* Nonmatching */ -} - -/* 800448AC-800448B4 .text getFloorInfo__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getFloorInfo() const { - /* Nonmatching */ -} - -/* 800448B4-8004491C .text setMemoryConfig__15dStage_roomDt_cFP21dStage_MemoryConfig_c */ -void dStage_roomDt_c::setMemoryConfig(dStage_MemoryConfig_c*) { - /* Nonmatching */ -} - -/* 8004491C-80044988 .text getMemoryConfig__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getMemoryConfig() const { - /* Nonmatching */ -} - -/* 80044988-800449F0 .text setMemoryMap__15dStage_roomDt_cFP18dStage_MemoryMap_c */ -void dStage_roomDt_c::setMemoryMap(dStage_MemoryMap_c*) { - /* Nonmatching */ -} - -/* 800449F0-80044A5C .text getMemoryMap__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getMemoryMap() const { - /* Nonmatching */ -} - -/* 80044A5C-80044A64 .text setShip__15dStage_roomDt_cFP13dStage_Ship_c */ -void dStage_roomDt_c::setShip(dStage_Ship_c*) { - /* Nonmatching */ -} - -/* 80044A64-80044A6C .text getShip__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getShip() const { - /* Nonmatching */ -} - -/* 80044A6C-80044AD4 .text setMulti__15dStage_roomDt_cFP14dStage_Multi_c */ -void dStage_roomDt_c::setMulti(dStage_Multi_c*) { - /* Nonmatching */ -} - -/* 80044AD4-80044B40 .text getMulti__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getMulti() const { - /* Nonmatching */ -} - -/* 80044B40-80044B48 .text setLbnk__15dStage_roomDt_cFP13dStage_Lbnk_c */ -void dStage_roomDt_c::setLbnk(dStage_Lbnk_c*) { - /* Nonmatching */ -} - -/* 80044B48-80044B50 .text getLbnk__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getLbnk() const { - /* Nonmatching */ -} - -/* 80044B50-80044B58 .text setTresure__15dStage_roomDt_cFP19stage_tresure_class */ -void dStage_roomDt_c::setTresure(stage_tresure_class*) { - /* Nonmatching */ -} - -/* 80044B58-80044B60 .text getTresure__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getTresure() const { - /* Nonmatching */ -} - -/* 80044B60-80044BB4 .text setDMap__15dStage_roomDt_cFP13dStage_DMap_c */ -void dStage_roomDt_c::setDMap(dStage_DMap_c*) { - /* Nonmatching */ -} - -/* 80044BB4-80044C0C .text getDMap__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getDMap() const { - /* Nonmatching */ -} - -/* 80044C0C-80044C14 .text setDrTg__15dStage_roomDt_cFP16stage_tgsc_class */ -void dStage_roomDt_c::setDrTg(stage_tgsc_class*) { - /* Nonmatching */ -} - -/* 80044C14-80044C1C .text getDrTg__15dStage_roomDt_cCFv */ -void dStage_roomDt_c::getDrTg() const { - /* Nonmatching */ -} - -/* 80044C1C-80044C24 .text getRoomNo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getRoomNo() const { - /* Nonmatching */ -} - -/* 80044C24-80044C2C .text setCamera__16dStage_stageDt_cFP18stage_camera_class */ -void dStage_stageDt_c::setCamera(stage_camera_class*) { - /* Nonmatching */ -} - -/* 80044C2C-80044C34 .text getCamera__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getCamera() const { - /* Nonmatching */ -} - -/* 80044C34-80044C3C .text setArrow__16dStage_stageDt_cFP17stage_arrow_class */ -void dStage_stageDt_c::setArrow(stage_arrow_class*) { - /* Nonmatching */ -} - -/* 80044C3C-80044C44 .text getArrow__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getArrow() const { - /* Nonmatching */ -} - -/* 80044C44-80044C4C .text setPlayer__16dStage_stageDt_cFP17stage_actor_class */ -void dStage_stageDt_c::setPlayer(stage_actor_class*) { - /* Nonmatching */ -} - -/* 80044C4C-80044C54 .text getPlayer__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPlayer() const { - /* Nonmatching */ -} - -/* 80044C54-80044C5C .text setPlayerNum__16dStage_stageDt_cFUs */ -void dStage_stageDt_c::setPlayerNum(unsigned short) { - /* Nonmatching */ -} - -/* 80044C5C-80044C64 .text getPlayerNum__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPlayerNum() const { - /* Nonmatching */ -} - -/* 80044C64-80044C6C .text setRoom__16dStage_stageDt_cFP14roomRead_class */ -void dStage_stageDt_c::setRoom(roomRead_class*) { - /* Nonmatching */ -} - -/* 80044C6C-80044C74 .text getRoom__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getRoom() const { - /* Nonmatching */ -} - -/* 80044C74-80044C7C .text setMapInfo__16dStage_stageDt_cFP20stage_map_info_class */ -void dStage_stageDt_c::setMapInfo(stage_map_info_class*) { - /* Nonmatching */ -} - -/* 80044C7C-80044C84 .text getMapInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getMapInfo() const { - /* Nonmatching */ -} - -/* 80044C84-80044C8C .text setMapInfoBase__16dStage_stageDt_cFP26stage_map_info_dummy_class */ -void dStage_stageDt_c::setMapInfoBase(stage_map_info_dummy_class*) { - /* Nonmatching */ -} - -/* 80044C8C-80044C94 .text setPaletInfo__16dStage_stageDt_cFP22stage_palet_info_class */ -void dStage_stageDt_c::setPaletInfo(stage_palet_info_class*) { - /* Nonmatching */ -} - -/* 80044C94-80044C9C .text getPaletInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPaletInfo() const { - /* Nonmatching */ -} - -/* 80044C9C-80044CA4 .text setPselectInfo__16dStage_stageDt_cFP24stage_pselect_info_class */ -void dStage_stageDt_c::setPselectInfo(stage_pselect_info_class*) { - /* Nonmatching */ -} - -/* 80044CA4-80044CAC .text getPselectInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPselectInfo() const { - /* Nonmatching */ -} - -/* 80044CAC-80044CB4 .text setEnvrInfo__16dStage_stageDt_cFP21stage_envr_info_class */ -void dStage_stageDt_c::setEnvrInfo(stage_envr_info_class*) { - /* Nonmatching */ -} - -/* 80044CB4-80044CBC .text getEnvrInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getEnvrInfo() const { - /* Nonmatching */ -} - -/* 80044CBC-80044CC4 .text setVrboxInfo__16dStage_stageDt_cFP22stage_vrbox_info_class */ -void dStage_stageDt_c::setVrboxInfo(stage_vrbox_info_class*) { - /* Nonmatching */ -} - -/* 80044CC4-80044CCC .text getVrboxInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getVrboxInfo() const { - /* Nonmatching */ -} - -/* 80044CCC-80044CD4 .text setPlightInfo__16dStage_stageDt_cFP23stage_plight_info_class */ -void dStage_stageDt_c::setPlightInfo(stage_plight_info_class*) { - /* Nonmatching */ -} - -/* 80044CD4-80044CDC .text getPlightInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPlightInfo() const { - /* Nonmatching */ -} - -/* 80044CDC-80044CE4 .text setPaletNumInfo__16dStage_stageDt_cFi */ -void dStage_stageDt_c::setPaletNumInfo(int) { - /* Nonmatching */ -} - -/* 80044CE4-80044CEC .text getPaletNumInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPaletNumInfo() const { - /* Nonmatching */ -} - -/* 80044CEC-80044CF4 .text setPselectNumInfo__16dStage_stageDt_cFi */ -void dStage_stageDt_c::setPselectNumInfo(int) { - /* Nonmatching */ -} - -/* 80044CF4-80044CFC .text getPselectNumInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPselectNumInfo() const { - /* Nonmatching */ -} - -/* 80044CFC-80044D04 .text setEnvrNumInfo__16dStage_stageDt_cFi */ -void dStage_stageDt_c::setEnvrNumInfo(int) { - /* Nonmatching */ -} - -/* 80044D04-80044D0C .text getEnvrNumInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getEnvrNumInfo() const { - /* Nonmatching */ -} - -/* 80044D0C-80044D14 .text setVrboxNumInfo__16dStage_stageDt_cFi */ -void dStage_stageDt_c::setVrboxNumInfo(int) { - /* Nonmatching */ -} - -/* 80044D14-80044D1C .text getVrboxNumInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getVrboxNumInfo() const { - /* Nonmatching */ -} - -/* 80044D1C-80044D88 .text setLightVecInfo__16dStage_stageDt_cFP25stage_lightvec_info_class */ -void dStage_stageDt_c::setLightVecInfo(stage_lightvec_info_class*) { - /* Nonmatching */ -} - -/* 80044D88-80044DF4 .text getLightVecInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getLightVecInfo() const { - /* Nonmatching */ -} - -/* 80044DF4-80044E60 .text setLightVecInfoNum__16dStage_stageDt_cFi */ -void dStage_stageDt_c::setLightVecInfoNum(int) { - /* Nonmatching */ -} - -/* 80044E60-80044ECC .text getLightVecInfoNum__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getLightVecInfoNum() const { - /* Nonmatching */ -} - -/* 80044ECC-80044ED4 .text setPlightNumInfo__16dStage_stageDt_cFi */ -void dStage_stageDt_c::setPlightNumInfo(int) { - /* Nonmatching */ -} - -/* 80044ED4-80044EDC .text getPlightNumInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPlightNumInfo() const { - /* Nonmatching */ -} - -/* 80044EDC-80044EE4 .text setStagInfo__16dStage_stageDt_cFP21stage_stag_info_class */ -void dStage_stageDt_c::setStagInfo(stage_stag_info_class*) { - /* Nonmatching */ -} - -/* 80044EE4-80044EEC .text getStagInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getStagInfo() const { - /* Nonmatching */ -} - -/* 80044EEC-80044EF4 .text setSclsInfo__16dStage_stageDt_cFP27stage_scls_info_dummy_class */ -void dStage_stageDt_c::setSclsInfo(stage_scls_info_dummy_class*) { - /* Nonmatching */ -} - -/* 80044EF4-80044EFC .text getSclsInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getSclsInfo() const { - /* Nonmatching */ -} - -/* 80044EFC-80044F04 .text setPntInfo__16dStage_stageDt_cFP13dStage_dPnt_c */ -void dStage_stageDt_c::setPntInfo(dStage_dPnt_c*) { - /* Nonmatching */ -} - -/* 80044F04-80044F0C .text getPntInf__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPntInf() const { - /* Nonmatching */ -} - -/* 80044F0C-80044F14 .text setPathInfo__16dStage_stageDt_cFP14dStage_dPath_c */ -void dStage_stageDt_c::setPathInfo(dStage_dPath_c*) { - /* Nonmatching */ -} - -/* 80044F14-80044F1C .text getPathInf__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPathInf() const { - /* Nonmatching */ -} - -/* 80044F1C-80044F24 .text setPnt2Info__16dStage_stageDt_cFP13dStage_dPnt_c */ -void dStage_stageDt_c::setPnt2Info(dStage_dPnt_c*) { - /* Nonmatching */ -} - -/* 80044F24-80044F2C .text getPnt2Inf__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPnt2Inf() const { - /* Nonmatching */ -} - -/* 80044F2C-80044F34 .text setPath2Info__16dStage_stageDt_cFP14dStage_dPath_c */ -void dStage_stageDt_c::setPath2Info(dStage_dPath_c*) { - /* Nonmatching */ -} - -/* 80044F34-80044F3C .text getPath2Inf__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getPath2Inf() const { - /* Nonmatching */ -} - -/* 80044F3C-80044F44 .text setSoundInfo__16dStage_stageDt_cFP18dStage_SoundInfo_c */ -void dStage_stageDt_c::setSoundInfo(dStage_SoundInfo_c*) { - /* Nonmatching */ -} - -/* 80044F44-80044F4C .text getSoundInf__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getSoundInf() const { - /* Nonmatching */ -} - -/* 80044F4C-80044F54 .text setEventInfo__16dStage_stageDt_cFP18dStage_EventInfo_c */ -void dStage_stageDt_c::setEventInfo(dStage_EventInfo_c*) { - /* Nonmatching */ -} - -/* 80044F54-80044F5C .text getEventInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getEventInfo() const { - /* Nonmatching */ -} - -/* 80044F5C-80044FC8 .text setFileListInfo__16dStage_stageDt_cFP20dStage_FileList_dt_c */ -void dStage_stageDt_c::setFileListInfo(dStage_FileList_dt_c*) { - /* Nonmatching */ -} - -/* 80044FC8-80045034 .text getFileListInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getFileListInfo() const { - /* Nonmatching */ -} - -/* 80045034-8004503C .text setFloorInfo__16dStage_stageDt_cFP18dStage_FloorInfo_c */ -void dStage_stageDt_c::setFloorInfo(dStage_FloorInfo_c*) { - /* Nonmatching */ -} - -/* 8004503C-80045044 .text getFloorInfo__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getFloorInfo() const { - /* Nonmatching */ -} - -/* 80045044-8004504C .text setMemoryConfig__16dStage_stageDt_cFP21dStage_MemoryConfig_c */ -void dStage_stageDt_c::setMemoryConfig(dStage_MemoryConfig_c*) { - /* Nonmatching */ -} - -/* 8004504C-80045054 .text getMemoryConfig__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getMemoryConfig() const { - /* Nonmatching */ -} - -/* 80045054-8004505C .text setMemoryMap__16dStage_stageDt_cFP18dStage_MemoryMap_c */ -void dStage_stageDt_c::setMemoryMap(dStage_MemoryMap_c*) { - /* Nonmatching */ -} - -/* 8004505C-80045064 .text getMemoryMap__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getMemoryMap() const { - /* Nonmatching */ -} - -/* 80045064-800450D0 .text setShip__16dStage_stageDt_cFP13dStage_Ship_c */ -void dStage_stageDt_c::setShip(dStage_Ship_c*) { - /* Nonmatching */ -} - -/* 800450D0-8004513C .text getShip__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getShip() const { - /* Nonmatching */ -} - -/* 8004513C-80045144 .text setMulti__16dStage_stageDt_cFP14dStage_Multi_c */ -void dStage_stageDt_c::setMulti(dStage_Multi_c*) { - /* Nonmatching */ -} - -/* 80045144-8004514C .text getMulti__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getMulti() const { - /* Nonmatching */ -} - -/* 8004514C-800451B8 .text setLbnk__16dStage_stageDt_cFP13dStage_Lbnk_c */ -void dStage_stageDt_c::setLbnk(dStage_Lbnk_c*) { - /* Nonmatching */ -} - -/* 800451B8-80045224 .text getLbnk__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getLbnk() const { - /* Nonmatching */ -} - -/* 80045224-8004522C .text setTresure__16dStage_stageDt_cFP19stage_tresure_class */ -void dStage_stageDt_c::setTresure(stage_tresure_class*) { - /* Nonmatching */ -} - -/* 8004522C-80045234 .text getTresure__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getTresure() const { - /* Nonmatching */ -} - -/* 80045234-8004523C .text setDMap__16dStage_stageDt_cFP13dStage_DMap_c */ -void dStage_stageDt_c::setDMap(dStage_DMap_c*) { - /* Nonmatching */ -} - -/* 8004523C-80045244 .text getDMap__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getDMap() const { - /* Nonmatching */ -} - -/* 80045244-8004524C .text setDrTg__16dStage_stageDt_cFP16stage_tgsc_class */ -void dStage_stageDt_c::setDrTg(stage_tgsc_class*) { - /* Nonmatching */ -} - -/* 8004524C-80045254 .text getDrTg__16dStage_stageDt_cCFv */ -void dStage_stageDt_c::getDrTg() const { - /* Nonmatching */ -} - -/* 80045324-8004535C .text __arraydtor$5591 */ -void __arraydtor$5591 { - /* Nonmatching */ -} - -/* 8004535C-800453BC .text __dt__19dStage_roomStatus_cFv */ -dStage_roomStatus_c::~dStage_roomStatus_c() { - /* Nonmatching */ -} - -/* 800453BC-8004545C .text __ct__19dStage_roomStatus_cFv */ -dStage_roomStatus_c::dStage_roomStatus_c() { - /* Nonmatching */ -} - -/* 8004545C-800454C0 .text __dt__19dStage_KeepDoorInfoFv */ -dStage_KeepDoorInfo::~dStage_KeepDoorInfo() { - /* Nonmatching */ -} - -/* 800454C0-800454FC .text __dt__21stage_tgsc_data_classFv */ -stage_tgsc_data_class::~stage_tgsc_data_class() { - /* Nonmatching */ -} - -/* 800454FC-80045500 .text __ct__21stage_tgsc_data_classFv */ -stage_tgsc_data_class::stage_tgsc_data_class() { - /* Nonmatching */ -} - -/* 80045500-80045564 .text __dt__22dStage_KeepTresureInfoFv */ -dStage_KeepTresureInfo::~dStage_KeepTresureInfo() { - /* Nonmatching */ -} - -/* 80045564-800455A0 .text __dt__24stage_tresure_data_classFv */ -stage_tresure_data_class::~stage_tresure_data_class() { - /* Nonmatching */ -} - -/* 800455A0-800455A4 .text __ct__24stage_tresure_data_classFv */ -stage_tresure_data_class::stage_tresure_data_class() { - /* Nonmatching */ -} - -/* 800455A4-800455AC .text getBokoFlamePos__9daPy_py_cFP4cXyz */ -void daPy_py_c::getBokoFlamePos(cXyz*) { - /* Nonmatching */ -} - From 708c02555c1e2e56a12e34dd412ad26d942a5525 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 17 Sep 2023 15:42:17 -0700 Subject: [PATCH 06/89] m_Do_main (#52) --- configure.py | 2 +- src/m_Do/m_Do_main.cpp | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/configure.py b/configure.py index 757325b5f..7b2a9170e 100644 --- a/configure.py +++ b/configure.py @@ -242,7 +242,7 @@ config.libs = [ "host": True, "objects": [ # machine - Object(NonMatching, "m_Do/m_Do_main.cpp"), + Object(Matching, "m_Do/m_Do_main.cpp"), Object(NonMatching, "m_Do/m_Do_printf.cpp"), Object(NonMatching, "m_Do/m_Do_audio.cpp"), Object(NonMatching, "m_Do/m_Do_controller_pad.cpp"), diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index ba7630bab..6d23c1655 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -212,7 +212,11 @@ void debugDisplay() { return; } } else if (mHeapBriefType != 0) { +#if VERSION == VERSION_JPN + JUT_ASSERT(530, mHeapBriefType < HeapCheckTableNum); +#else JUT_ASSERT(531, mHeapBriefType < HeapCheckTableNum); +#endif JUTReport(500, 100, "%s", desc1[mHeapBriefType]); JUTReport(500, 114, "%s", desc2[mHeapBriefType]); @@ -420,7 +424,11 @@ void main01() { mDoDvdThd_callback_c::create((mDoDvdThd_callback_func)LOAD_COPYDATE, NULL); fapGm_Create(); // init framework +#if VERSION == VERSION_JPN + mDisplayHeapSize = 1; +#else mDisplayHeapSize = 0; +#endif cDyl_InitAsync(); // init RELs g_mDoAud_audioHeap = JKRSolidHeap::create(0x166800, JKRHeap::getCurrentHeap(), false); @@ -442,7 +450,7 @@ void main01() { } while (true); } -static OSThread mainThread; +OSThread mainThread; /* 80006464-800065DC .text main */ void main() { @@ -452,10 +460,11 @@ void main() { mDoMain::sPowerOnTime = OSGetTime(); OSReportInit__Fv(); version_check(); +#if VERSION != VERSION_JPN mDoRstData* reset_data = (mDoRstData*)OSAllocFromArenaLo(0x10, 4); mDoRst::setResetData(reset_data); - if (!mDoRst::i_getResetData()) { + if (!mDoRst::getResetData()) { do { } while (true); } @@ -468,6 +477,7 @@ void main() { } g_dComIfG_gameInfo.ct(); +#endif if (mDoMain::developmentMode < 0) { DVDDiskID* disk_id = DVDGetCurrentDiskID(); From 543eb4daa577d2878b9afa54225fdaadb9ec5e4f Mon Sep 17 00:00:00 2001 From: Kristopher Early <1191258+MrPolymorph@users.noreply.github.com> Date: Sun, 17 Sep 2023 23:43:02 +0100 Subject: [PATCH 07/89] [Actor] d_a_spotbox 99.2% (#51) --- include/d/d_com_inf_game.h | 8 +++++ include/d/d_drawlist.h | 11 ++++++ src/d/actor/d_a_spotbox.cpp | 71 ++++++++++++++++++++++++++++++------- 3 files changed, 78 insertions(+), 12 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 17e6d878c..7f5c4a055 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1015,6 +1015,14 @@ inline void dComIfGd_setAlphaModel(unsigned char param_0, float(*param_1)[4], un g_dComIfG_gameInfo.drawlist.setAlphaModel(param_0, param_1, param_2); } +inline void dComIfGd_setAlphaModel2(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { + g_dComIfG_gameInfo.drawlist.setAlphaModel2(param_0, param_1, param_2); +} + +inline const dDlst_alphaModel_c* dComIfGd_getAlphaModel2(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { + return g_dComIfG_gameInfo.drawlist.getAlphaModel2(); +} + /** * === RESOURCE === */ diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 822f660bb..d5000eca4 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -171,6 +171,11 @@ public: void create(int); void set(unsigned char, float(*)[4], unsigned char); void draw(float(*)[4]); +public: + short pad; + short pad2; + short pad3; + short mCount; }; class dDlst_list_c { @@ -200,6 +205,12 @@ public: void setAlphaModel(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { mpAlphaModel0->set(param_0, param_1, param_2); } + void setAlphaModel2(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { + mpAlphaModel2->set(param_0, param_1, param_2); + } + const dDlst_alphaModel_c* getAlphaModel2() { + return mpAlphaModel2; + } static void offWipe() { mWipe = false; } diff --git a/src/d/actor/d_a_spotbox.cpp b/src/d/actor/d_a_spotbox.cpp index c5138268d..aac6bb6f0 100644 --- a/src/d/actor/d_a_spotbox.cpp +++ b/src/d/actor/d_a_spotbox.cpp @@ -3,31 +3,78 @@ // Translation Unit: d_a_spotbox.cpp // -#include "d_a_spotbox.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_com_inf_game.h" +#include "m_Do/m_Do_mtx.h" #include "dolphin/types.h" +struct daSpotbox_c : public fopAc_ac_c { +public: + inline int create(); + inline int draw(); + inline int execute(); + inline u32 getType(); +public: + Mtx mtx; +}; /* size = 0x2A0 */ + +int daSpotbox_c::create() { + /* Matching 96% */ + fopAcM_SetupActor(this, daSpotbox_c); + float baseScale = this->getType() != 0 ? 100.0f : 1000.0f; + this->mScale.x *= baseScale; + this->mScale.y *= baseScale; + this->mScale.z *= (baseScale * 1.2f); + this->current.pos.y += this->mScale.y * 0.5f; + this->mCullMtx = ((daSpotbox_c *)this)->mtx; + fopAcM_setCullSizeBox(this, -0.5, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f); + + return cPhs_COMPLEATE_e; +} + +int daSpotbox_c::draw() { + if(g_dComIfG_gameInfo.drawlist.getAlphaModel2()->mCount != 0) { + g_dComIfG_gameInfo.drawlist.setAlphaModel2(0x3, this->mtx, 0x20); + } + return TRUE; +} + +int daSpotbox_c::execute() { + PSMTXTrans(mDoMtx_stack_c::now, this->current.pos.x, this->current.pos.y, this->current.pos.z); + mDoMtx_YrotM(mDoMtx_stack_c::now, this->current.angle.y); + mDoMtx_stack_c::scaleM(this->mScale.x, this->mScale.y, this->mScale.z); + PSMTXCopy(mDoMtx_stack_c::now, this->mtx); + return TRUE; +} + +u32 daSpotbox_c::getType() { + return fopAcM_GetParam(this) & 1; +} + + /* 00000078-000000C4 .text daSpotbox_Draw__FP11daSpotbox_c */ -void daSpotbox_Draw(daSpotbox_c*) { - /* Nonmatching */ +static int daSpotbox_Draw(daSpotbox_c* i_this) { + return ((daSpotbox_c*)i_this)->draw(); } /* 000000C4-00000138 .text daSpotbox_Execute__FP11daSpotbox_c */ -void daSpotbox_Execute(daSpotbox_c*) { - /* Nonmatching */ +static int daSpotbox_Execute(daSpotbox_c* i_this) { + return ((daSpotbox_c*)i_this)->execute(); } /* 00000138-00000140 .text daSpotbox_IsDelete__FP11daSpotbox_c */ -void daSpotbox_IsDelete(daSpotbox_c*) { - /* Nonmatching */ +static int daSpotbox_IsDelete(daSpotbox_c* i_this) { + return TRUE; } /* 00000140-00000170 .text daSpotbox_Delete__FP11daSpotbox_c */ -void daSpotbox_Delete(daSpotbox_c*) { - /* Nonmatching */ +static int daSpotbox_Delete(daSpotbox_c* self) { + self->~daSpotbox_c(); + return true; } /* 00000170-00000250 .text daSpotbox_Create__FP10fopAc_ac_c */ -void daSpotbox_Create(fopAc_ac_c*) { - /* Nonmatching */ +static int daSpotbox_Create(fopAc_ac_c* i_this) { + return ((daSpotbox_c*)i_this)->create(); } - From 1040e0498cb0a10bc8ed79a167d690d78f05dbd6 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Mon, 18 Sep 2023 12:29:20 -0700 Subject: [PATCH 08/89] JKRMemArchive, JKRAramArchive, JKRDvdArchive, JKRCompArchive (#54) * JKRMemArchive * JKRAramArchive * JKRDvdArchive * JKRCompArchive --- configure.py | 12 +- include/JSystem/JKernel/JKRAram.h | 6 +- include/JSystem/JKernel/JKRDvdAramRipper.h | 10 +- include/JSystem/JKernel/JKRMemArchive.h | 5 +- src/JSystem/JKernel/JKRAramArchive.cpp | 295 +++++++++++++++- src/JSystem/JKernel/JKRCompArchive.cpp | 378 ++++++++++++++++++++- src/JSystem/JKernel/JKRDvdArchive.cpp | 353 ++++++++++++++++++- src/JSystem/JKernel/JKRMemArchive.cpp | 233 +++++++++++-- 8 files changed, 1203 insertions(+), 89 deletions(-) diff --git a/configure.py b/configure.py index 7b2a9170e..27d405964 100644 --- a/configure.py +++ b/configure.py @@ -755,26 +755,26 @@ config.libs = [ JSystemLib( "JKernel", [ - Object(Matching, "JSystem/JKernel/JKRHeap.cpp"), + Object(Matching, "JSystem/JKernel/JKRHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRStdHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRExpHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRSolidHeap.cpp"), - Object(Matching, "JSystem/JKernel/JKRDisposer.cpp"), - Object(Matching, "JSystem/JKernel/JKRThread.cpp"), + Object(Matching, "JSystem/JKernel/JKRDisposer.cpp"), + Object(Matching, "JSystem/JKernel/JKRThread.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAram.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramBlock.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"), - Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), + Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), Object(NonMatching, "JSystem/JKernel/JKRFileFinder.cpp"), Object(NonMatching, "JSystem/JKernel/JKRFileCache.cpp"), Object(NonMatching, "JSystem/JKernel/JKRArchivePub.cpp"), Object(NonMatching, "JSystem/JKernel/JKRArchivePri.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRMemArchive.cpp"), + Object(Matching, "JSystem/JKernel/JKRMemArchive.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramArchive.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdArchive.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRCompArchive.cpp"), + Object(Matching, "JSystem/JKernel/JKRCompArchive.cpp"), Object(Matching, "JSystem/JKernel/JKRFile.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdFile.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdRipper.cpp"), diff --git a/include/JSystem/JKernel/JKRAram.h b/include/JSystem/JKernel/JKRAram.h index 18269423a..07f6bb231 100644 --- a/include/JSystem/JKernel/JKRAram.h +++ b/include/JSystem/JKernel/JKRAram.h @@ -36,7 +36,7 @@ public: static JKRAram* create(u32, u32, long, long, long); static void checkOkAddress(u8*, u32, JKRAramBlock*, u32); static void changeGroupIdIfNeed(u8*, int); - static JKRAramBlock* mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*); + static JKRAramBlock* mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int); static u8* aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*); static void dump(void); @@ -80,8 +80,8 @@ inline void JKRAramToMainRam(u32 p1, u8* p2, u32 p3, JKRExpandSwitch p4, u32 p5, JKRAram::aramToMainRam(p1, p2, p3, p4, p5, p6, p7, p8); } -inline JKRAramBlock *JKRMainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap *heap, int id, u32 *pSize) { - return JKRAram::mainRamToAram(buf, bufSize, alignedSize, expandSwitch, fileSize, heap, id, pSize); +inline JKRAramBlock *JKRMainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap *heap, int id) { + return JKRAram::mainRamToAram(buf, bufSize, alignedSize, expandSwitch, fileSize, heap, id); } // void JKRDecompressFromAramToMainRam(u32, void*, u32, u32, u32, u32*); diff --git a/include/JSystem/JKernel/JKRDvdAramRipper.h b/include/JSystem/JKernel/JKRDvdAramRipper.h index 1046e5adf..3561a7e99 100644 --- a/include/JSystem/JKernel/JKRDvdAramRipper.h +++ b/include/JSystem/JKernel/JKRDvdAramRipper.h @@ -35,10 +35,10 @@ public: class JKRDvdFile; class JKRDvdAramRipper { public: - static JKRAramBlock* loadToAram(long, u32, JKRExpandSwitch, u32, u32, u32*); - static JKRAramBlock* loadToAram(JKRDvdFile*, u32, JKRExpandSwitch, u32, u32, u32*); + static JKRAramBlock* loadToAram(long, u32, JKRExpandSwitch, u32, u32); + static JKRAramBlock* loadToAram(JKRDvdFile*, u32, JKRExpandSwitch, u32, u32); static JKRADCommand* loadToAram_Async(JKRDvdFile*, u32, JKRExpandSwitch, void (*)(u32), u32, - u32, u32*); + u32); static JKRADCommand* callCommand_Async(JKRADCommand*); static bool syncAram(JKRADCommand*, int); @@ -49,8 +49,8 @@ public: static u32 sSzpBufferSize; }; -inline JKRAramBlock *JKRDvdToAram(s32 entrynum, u32 p2, JKRExpandSwitch expSwitch, u32 p4, u32 p5, u32 *p6) { - return JKRDvdAramRipper::loadToAram(entrynum, p2, expSwitch, p4, p5, p6); +inline JKRAramBlock *JKRDvdToAram(s32 entrynum, u32 p2, JKRExpandSwitch expSwitch, u32 p4, u32 p5) { + return JKRDvdAramRipper::loadToAram(entrynum, p2, expSwitch, p4, p5); } #endif /* JKRDVDARAMRIPPER_H */ diff --git a/include/JSystem/JKernel/JKRMemArchive.h b/include/JSystem/JKernel/JKRMemArchive.h index eb09c0b20..54fc72459 100644 --- a/include/JSystem/JKernel/JKRMemArchive.h +++ b/include/JSystem/JKernel/JKRMemArchive.h @@ -10,10 +10,13 @@ enum JKRMemBreakFlag { class JKRMemArchive : public JKRArchive { public: + JKRMemArchive(); JKRMemArchive(long, JKRArchive::EMountDirection); - JKRMemArchive(void*, u32, JKRMemBreakFlag); virtual ~JKRMemArchive(); + void fixedInit(s32); + bool mountFixed(void*, JKRMemBreakFlag); + void unmountFixed(); bool open(long, JKRArchive::EMountDirection); bool open(void*, u32, JKRMemBreakFlag); diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index 616dc2fe0..314591d4e 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -4,49 +4,310 @@ // #include "JSystem/JKernel/JKRAramArchive.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramBlock.h" +#include "JSystem/JKernel/JKRAramHeap.h" +#include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JKernel/JKRDvdAramRipper.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/math.h" +#include "MSL_C/string.h" +#include "dolphin/os/OS.h" /* 802B9FE0-802BA088 .text __ct__14JKRAramArchiveFlQ210JKRArchive15EMountDirection */ -JKRAramArchive::JKRAramArchive(long, JKRArchive::EMountDirection) { - /* Nonmatching */ +JKRAramArchive::JKRAramArchive(s32 entryNumber, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNumber, MOUNT_ARAM) { + mMountDirection = mountDirection; + + if (!this->open(entryNumber)) { + return; + } + + mVolumeType = 'RARC'; + mVolumeName = mStringTable + mNodes->name_offset; + JKRFileLoader::sVolumeList.prepend(&mFileLoaderLink); + mIsMounted = true; } /* 802BA088-802BA1C8 .text __dt__14JKRAramArchiveFv */ JKRAramArchive::~JKRAramArchive() { - /* Nonmatching */ + if (mIsMounted == true) { + if (mArcInfoBlock != NULL) { + SDIFileEntry* entry = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; entry++, i++) { + if (entry->data != NULL) { + JKRFreeToHeap(mHeap, entry->data); + } + } + + JKRFreeToHeap(mHeap, mArcInfoBlock); + mArcInfoBlock = NULL; + } + + if (mExpandedSize != NULL) { + i_JKRFree(mExpandedSize); + mExpandedSize = NULL; + } + + if (mDvdFile != NULL) { + delete mDvdFile; + } + + if (mBlock != NULL) { + delete mBlock; + } + + JKRFileLoader::sVolumeList.remove(&mFileLoaderLink); + mIsMounted = false; + } +} + +static void dummy() { + OSReport(__FILE__); + OSReport("isMounted()"); + OSReport("Halt"); + OSReport("mMountCount == 1"); } /* 802BA1C8-802BA4EC .text open__14JKRAramArchiveFl */ -void JKRAramArchive::open(long) { - /* Nonmatching */ +bool JKRAramArchive::open(s32 entryNum) { + mArcInfoBlock = NULL; + mNodes = NULL; + mFiles = NULL; + mStringTable = NULL; + mBlock = NULL; + + mDvdFile = new (JKRGetSystemHeap(), mMountDirection == MOUNT_DIRECTION_HEAD ? 4 : -4) JKRDvdFile(entryNum); + if (mDvdFile == NULL) { + mMountMode = 0; + return 0; + } + + // NOTE: a different struct is used here for sure, unfortunately i can't get any hits on this address, so gonna leave it like this for now + SArcHeader *mem = (SArcHeader *)JKRAllocFromSysHeap(32, -32); + if (mem == NULL) { + mMountMode = 0; + } else { + JKRDvdToMainRam(entryNum, (u8 *)mem, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression); + int alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 32 : -32; + u32 alignedSize = ALIGN_NEXT(mem->file_data_offset, 32); + mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, alignedSize, alignment); + if (mArcInfoBlock == NULL) { + mMountMode = 0; + } else { + JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 32, NULL); + + mNodes = (SDIDirEntry *)((u8 *)mArcInfoBlock + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry *)((u8 *)mArcInfoBlock + mArcInfoBlock->file_entry_offset); + mStringTable = (char *)((u8 *)mArcInfoBlock + mArcInfoBlock->string_table_offset); + mExpandedSize = NULL; + + u8 compressedFiles = 0; // maybe a check for if the last file is compressed? + + SDIFileEntry *fileEntry = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { + u8 flag = fileEntry->type_flags_and_name_offset >> 24; + if ((flag & 1)) + { + compressedFiles |= (flag & JKRARCHIVE_ATTR_COMPRESSION); + } + fileEntry++; + } + + if (compressedFiles != 0) { + mExpandedSize = (s32 *)JKRAllocFromHeap(mHeap, mArcInfoBlock->num_file_entries << 2, abs(alignment)); + if (mExpandedSize == NULL) { + i_JKRFree(mArcInfoBlock); + mMountMode = 0; + goto cleanup; + } + memset(mExpandedSize, 0, mArcInfoBlock->num_file_entries << 2); + } + + u32 aramSize = ALIGN_NEXT(mem->file_data_length, 32); + mBlock = (JKRAramBlock*) JKRAllocFromAram(aramSize, mMountDirection == MOUNT_DIRECTION_HEAD ? JKRAramHeap::HEAD : JKRAramHeap::TAIL); + if(mBlock == NULL) { + if (mArcInfoBlock) { + i_JKRFree(mArcInfoBlock); + } + if(mExpandedSize) { + i_JKRFree(mExpandedSize); + } + mMountMode = 0; + } + else { + JKRDvdToAram(entryNum, mBlock->getAddress(), EXPAND_SWITCH_UNKNOWN1, mem->header_length + mem->file_data_offset, 0); + } + } + } +cleanup: + if (mem != NULL) { + JKRFreeToSysHeap(mem); + } + if (mMountMode == 0) { + OSReport(":::[%s: %d] Cannot alloc memory\n", __FILE__, 400); + if (mDvdFile != NULL) { + delete mDvdFile; + } + return false; + } + return true; } /* 802BA4EC-802BA640 .text fetchResource__14JKRAramArchiveFPQ210JKRArchive12SDIFileEntryPUl */ -void JKRAramArchive::fetchResource(JKRArchive::SDIFileEntry*, unsigned long*) { - /* Nonmatching */ +void* JKRAramArchive::fetchResource(SDIFileEntry* pEntry, u32* pOutSize) { + JUT_ASSERT(427, isMounted()); + u32 outSize; + u8* outBuf; + if (pOutSize == NULL) { + pOutSize = &outSize; + } + + JKRCompression compression = JKRConvertAttrToCompressionType(pEntry->getFlags()); + if (pEntry->data == NULL) { + u32 size = JKRAramArchive::fetchResource_subroutine( + pEntry->data_offset + mBlock->getAddress(), pEntry->data_size, mHeap, compression, + &outBuf); + + *pOutSize = size; + if (size == NULL) { + return NULL; + } + + pEntry->data = outBuf; + if (compression == COMPRESSION_YAZ0) { + this->setExpandSize(pEntry, *pOutSize); + } + } else { + if (compression == COMPRESSION_YAZ0) { + *pOutSize = this->getExpandSize(pEntry); + } else { + *pOutSize = pEntry->data_size; + } + } + + return pEntry->data; } /* 802BA640-802BA788 .text fetchResource__14JKRAramArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ -void JKRAramArchive::fetchResource(void*, unsigned long, JKRArchive::SDIFileEntry*, unsigned long*) { +void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* pEntry, u32* resourceSize) { /* Nonmatching */ + JUT_ASSERT(500, isMounted()); + u32 size = pEntry->data_size; + if (size > bufferSize) { + size = bufferSize; + } + JKRCompression compression = JKRConvertAttrToCompressionType(pEntry->getFlags()); + if (pEntry->data == NULL) { + // can't get it to store the result in r28 + bufferSize &= ~(0x20 - 1); + size = JKRAramArchive::fetchResource_subroutine(pEntry->data_offset + mBlock->getAddress(), + size, (u8*)buffer, bufferSize, compression); + } else { + if (compression == COMPRESSION_YAZ0) { + u32 expandSize = this->getExpandSize(pEntry); + if (expandSize != NULL) { + size = expandSize; + } + } + if (size > bufferSize) { + size = bufferSize; + } + JKRHeap::copyMemory(buffer, pEntry->data, size); + } + if (resourceSize != NULL) { + *resourceSize = size; + } + return buffer; } /* 802BA788-802BA894 .text fetchResource_subroutine__14JKRAramArchiveFUlUlPUcUli */ -void JKRAramArchive::fetchResource_subroutine(unsigned long, unsigned long, unsigned char*, unsigned long, int) { - /* Nonmatching */ +u32 JKRAramArchive::fetchResource_subroutine(u32 srcAram, u32 srcLength, u8* dst, u32 dstLength, int compression) { + JUT_ASSERT(613, ( srcAram & 0x1f ) == 0); + u32 outLen; + u32 srcSize = ALIGN_NEXT(srcLength, 0x20); + u32 dstSize = ALIGN_PREV(dstLength, 0x20); + + switch (compression) { + case COMPRESSION_NONE: + if (srcSize > dstSize) { + srcSize = dstSize; + } + JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN0, dstSize, NULL, -1, &outLen); + return outLen; + case COMPRESSION_YAY0: + case COMPRESSION_YAZ0: + JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN1, dstSize, NULL, -1, &outLen); + return outLen; + default: + OSPanic(__FILE__, 640, ":::??? bad sequence\n"); + return 0; + } } /* 802BA894-802BAA48 .text fetchResource_subroutine__14JKRAramArchiveFUlUlP7JKRHeapiPPUc */ -void JKRAramArchive::fetchResource_subroutine(unsigned long, unsigned long, JKRHeap*, int, unsigned char**) { +u32 JKRAramArchive::fetchResource_subroutine(u32 entryNum, u32 length, JKRHeap* pHeap, int compression, u8** out) { /* Nonmatching */ + u32 readLen; + u32 alignedLen = ALIGN_NEXT(length, 0x20); + + u8* buffer; + switch (compression) { + case COMPRESSION_NONE: + buffer = static_cast(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); + JUT_ASSERT(662, buffer != 0); + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, + NULL, -1, NULL); + *out = buffer; + return length; + case COMPRESSION_YAY0: + case COMPRESSION_YAZ0: + u8 tmpBuf[0x40]; + u8* buf = (u8*)ALIGN_PREV((s32)&tmpBuf[0x1F], sizeof(SArcHeader)); + JKRAramToMainRam(entryNum, buf, sizeof(SArcHeader), EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); + length = ALIGN_NEXT(JKRDecompExpandSize(buf), sizeof(SArcHeader)); + buffer = static_cast(JKRAllocFromHeap(pHeap, length, sizeof(SArcHeader))); + JUT_ASSERT(688, buffer); + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN1, length, pHeap, + -1, &readLen); + *out = buffer; + return readLen; + default: + OSPanic(__FILE__, 698, ":::??? bad sequence\n"); + return 0; + } } /* 802BAA48-802BAB74 .text getExpandedResSize__14JKRAramArchiveCFPCv */ -void JKRAramArchive::getExpandedResSize(const void*) const { - /* Nonmatching */ +u32 JKRAramArchive::getExpandedResSize(const void* ptr) const { + if (mExpandedSize == NULL) { + return this->getResSize(ptr); + } + + JKRArchive::SDIFileEntry* entry = this->findPtrResource(ptr); + if (entry == NULL) { + return 0xFFFFFFFF; + } + + if (entry->getCompressFlag() == 0) { + return this->getResSize(ptr); + } + + u32 expandSize = this->getExpandSize(entry); + if (expandSize != 0) { + return expandSize; + } + + u8 tmpBuf[0x40]; + u8* buf = (u8*)ALIGN_PREV((s32)&tmpBuf[0x1F], 0x20); + JKRAramToMainRam(entry->data_offset + mBlock->getAddress(), buf, 0x20, + EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); + expandSize = JKRDecompExpandSize(buf); + // ??? casting away const? + ((JKRArchive*)this)->setExpandSize(entry, expandSize); + return expandSize; } /* 802BAB74-802BABD4 .text __dt__7JKRFileFv */ -JKRFile::~JKRFile() { - /* Nonmatching */ -} +//JKRFile::~JKRFile() {} diff --git a/src/JSystem/JKernel/JKRCompArchive.cpp b/src/JSystem/JKernel/JKRCompArchive.cpp index 925fa80af..a7a06f47a 100644 --- a/src/JSystem/JKernel/JKRCompArchive.cpp +++ b/src/JSystem/JKernel/JKRCompArchive.cpp @@ -4,44 +4,392 @@ // #include "JSystem/JKernel/JKRCompArchive.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramArchive.h" +#include "JSystem/JKernel/JKRAramBlock.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRDvdAramRipper.h" +#include "JSystem/JKernel/JKRDvdArchive.h" +#include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JKernel/JKRMemArchive.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/math.h" +#include "MSL_C/string.h" +#include "dolphin/os/OS.h" /* 802BB82C-802BB8D4 .text __ct__14JKRCompArchiveFlQ210JKRArchive15EMountDirection */ -JKRCompArchive::JKRCompArchive(long, JKRArchive::EMountDirection) { - /* Nonmatching */ +JKRCompArchive::JKRCompArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNum, MOUNT_COMP) { + mMountDirection = mountDirection; + + if (!open(entryNum)) { + return; + } + + mVolumeType = 'RARC'; + mVolumeName = &mStringTable[mNodes->name_offset]; + sVolumeList.prepend(&mFileLoaderLink); + mIsMounted = true; } /* 802BB8D4-802BBA14 .text __dt__14JKRCompArchiveFv */ JKRCompArchive::~JKRCompArchive() { - /* Nonmatching */ + if (mArcInfoBlock != NULL) { + SDIFileEntry* file = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { + if (!((file->type_flags_and_name_offset >> 0x18) & 0x10) && file->data != NULL) { + JKRFreeToHeap(mHeap, file->data); + } + + file++; + } + + JKRFreeToHeap(mHeap, mArcInfoBlock); + mArcInfoBlock = NULL; + } + + if (mAramPart != NULL) { + delete mAramPart; + } + + if (mExpandedSize != NULL) { + i_JKRFree(mExpandedSize); + mExpandedSize = NULL; + } + + if (mDvdFile != NULL) { + delete mDvdFile; + } + + sVolumeList.remove(&mFileLoaderLink); + mIsMounted = false; +} + +static void dummy() { + OSReport(__FILE__); + OSReport("isMounted()"); + OSReport("Halt"); + OSReport("mMountCount == 1"); } /* 802BBA14-802BBFDC .text open__14JKRCompArchiveFl */ -void JKRCompArchive::open(long) { - /* Nonmatching */ +bool JKRCompArchive::open(s32 entryNum) { + mArcInfoBlock = NULL; + field_0x64 = 0; + mAramPart = NULL; + field_0x6c = 0; + mSizeOfMemPart = 0; + mSizeOfAramPart = 0; + field_0x7c = 0; + mNodes = NULL; + mFiles = NULL; + mStringTable = NULL; + + mDvdFile = new (JKRGetSystemHeap(), 0) JKRDvdFile(entryNum); + if(mDvdFile == NULL) { + mMountMode = 0; + return 0; + } + SArcHeader *arcHeader = (SArcHeader *)JKRAllocFromSysHeap(sizeof(SArcHeader), -32); // NOTE: unconfirmed if this struct is used + if(arcHeader == NULL) { + mMountMode = 0; + } + else { + int alignment; + + JKRDvdToMainRam(entryNum, (u8 *)arcHeader, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression); + + mSizeOfMemPart = arcHeader->field_0x14; + mSizeOfAramPart = arcHeader->field_0x18; + JUT_ASSERT(346, ( mSizeOfMemPart & 0x1f ) == 0); + JUT_ASSERT(347, ( mSizeOfAramPart & 0x1f ) == 0); + + switch (mCompression) + { + case COMPRESSION_NONE: + case COMPRESSION_YAZ0: + alignment = mMountDirection == 1 ? 32 : -32; + mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset + mSizeOfMemPart, alignment); + if (mArcInfoBlock == NULL) { + mMountMode = 0; + } + else + { + JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, (u32)arcHeader->file_data_offset + mSizeOfMemPart, + NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0x20, NULL); + field_0x64 = (u32)mArcInfoBlock + arcHeader->file_data_offset; + + if (mSizeOfAramPart != 0) { + mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD); + if(mAramPart == NULL) { + mMountMode = 0; + break; + } + + JKRDvdToAram(entryNum, mAramPart->getAddress(), EXPAND_SWITCH_UNKNOWN1, arcHeader->header_length + arcHeader->file_data_offset + mSizeOfMemPart, 0); + } + + mNodes = (SDIDirEntry*)((u32)mArcInfoBlock + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry *)((u32)mArcInfoBlock + mArcInfoBlock->file_entry_offset); + mStringTable = (char*)((u32)mArcInfoBlock + mArcInfoBlock->string_table_offset); + field_0x6c = arcHeader->header_length + arcHeader->file_data_offset; + } + break; + + case COMPRESSION_YAY0: + u32 alignedSize = ALIGN_NEXT(mDvdFile->getFileSize(), 32); + alignment = ((mMountDirection == 1) ? 32 : -32); + u8 *buf = (u8 *)JKRAllocFromSysHeap(alignedSize, -alignment); + + if(buf == NULL) { + mMountMode = 0; + } + else { + JKRDvdToMainRam(entryNum, buf, EXPAND_SWITCH_UNKNOWN2, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, NULL); + u32 expandSize = ALIGN_NEXT(JKRDecompExpandSize(buf), 32); + u8 *mem = (u8 *)JKRAllocFromHeap(mHeap, expandSize, -alignment); + + if(mem == NULL) { + mMountMode = 0; + } + else { + arcHeader = (SArcHeader *)mem; + JKRDecompress((u8 *)buf, (u8 *)mem, expandSize, 0); + JKRFreeToSysHeap(buf); + + mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset + mSizeOfMemPart, alignment); + if(mArcInfoBlock == NULL) { + mMountMode = 0; + } + else { + // arcHeader + 1 should lead to 0x20, which is the data after the header + JKRHeap::copyMemory((u8 *)mArcInfoBlock, arcHeader + 1, (arcHeader->file_data_offset + mSizeOfMemPart)); + field_0x64 = (u32)mArcInfoBlock + arcHeader->file_data_offset; + if (mSizeOfAramPart != 0) { + mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD); + if(mAramPart == NULL) { + mMountMode = 0; + } + else { + JKRMainRamToAram((u8 *)mem + arcHeader->header_length + arcHeader->file_data_offset + mSizeOfMemPart, + mAramPart->getAddress(), mSizeOfAramPart, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1); + } + } + } + } + } + mNodes = (SDIDirEntry *)((u32)mArcInfoBlock + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry *)((u32)mArcInfoBlock + mArcInfoBlock->file_entry_offset); + mStringTable = (char *)((u32)mArcInfoBlock + mArcInfoBlock->string_table_offset); + field_0x6c = arcHeader->header_length + arcHeader->file_data_offset; + break; + } + mExpandedSize = NULL; + u8 compressedFiles = 0; + SDIFileEntry *fileEntry = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) + { + u8 flag = fileEntry->type_flags_and_name_offset >> 0x18; + if (((flag & 0x1) != 0) && (((flag)&0x10) == 0)) + { + compressedFiles = compressedFiles | (flag & 4); + } + fileEntry++; + } + + if (compressedFiles != 0) + { + mExpandedSize = (s32 *)JKRAllocFromHeap(mHeap, mArcInfoBlock->num_file_entries * 4, abs(alignment)); + if (mExpandedSize == NULL) + { + JKRFreeToSysHeap(mArcInfoBlock); + mMountMode = 0; + } + else + { + memset(mExpandedSize, 0, mArcInfoBlock->num_file_entries * 4); + } + } + } + + if (arcHeader != NULL) + { + JKRFreeToSysHeap(arcHeader); + } + if(mMountMode == 0) { + OSReport(":::[%s: %d] Cannot alloc memory in mounting CompArchive\n", __FILE__, 548); + if(mDvdFile != NULL) { + delete mDvdFile; + } + return false; + } + return true; } /* 802BBFDC-802BC198 .text fetchResource__14JKRCompArchiveFPQ210JKRArchive12SDIFileEntryPUl */ -void JKRCompArchive::fetchResource(JKRArchive::SDIFileEntry*, unsigned long*) { - /* Nonmatching */ +void* JKRCompArchive::fetchResource(SDIFileEntry* fileEntry, u32* pSize) { + JUT_ASSERT(578, isMounted()); + u32 ptrSize; + u32 size = fileEntry->data_size; + int compression = JKRConvertAttrToCompressionType(fileEntry->type_flags_and_name_offset >> 0x18); + + if(pSize == NULL) { + pSize = &ptrSize; // this makes barely any sense but ok + } + + if (fileEntry->data == NULL) { + u32 flag = fileEntry->type_flags_and_name_offset >> 0x18; + if(flag & 0x10) { + fileEntry->data = (void *)(field_0x64 + fileEntry->data_offset); + *pSize = size; + } + else if (flag & 0x20) { + u8 *data; + *pSize = JKRAramArchive::fetchResource_subroutine(fileEntry->data_offset + mAramPart->getAddress() - mSizeOfMemPart, size, mHeap, compression, &data); + fileEntry->data = data; + if(compression == COMPRESSION_YAZ0) { + setExpandSize(fileEntry, *pSize); + } + } + else if (flag & 0x40) { + u8 *data; + u32 resSize = JKRDvdArchive::fetchResource_subroutine(mEntryNum, field_0x6c + fileEntry->data_offset, fileEntry->data_size, mHeap, compression, mCompression, &data); + if (pSize != NULL) { + *pSize = resSize; + } + fileEntry->data = data; + if (compression == COMPRESSION_YAZ0) { + setExpandSize(fileEntry, *pSize); + } + } + } + else { + if (pSize != NULL) { + *pSize = fileEntry->data_size; + } + } + return fileEntry->data; } /* 802BC198-802BC370 .text fetchResource__14JKRCompArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ -void JKRCompArchive::fetchResource(void*, unsigned long, JKRArchive::SDIFileEntry*, unsigned long*) { - /* Nonmatching */ +void* JKRCompArchive::fetchResource(void* data, u32 compressedSize, SDIFileEntry *fileEntry, u32 *pSize) { + u32 size = 0; + JUT_ASSERT(696, isMounted()); + u32 fileSize = fileEntry->data_size; + u32 alignedSize = ALIGN_NEXT(fileSize, 32); + u32 fileFlag = fileEntry->type_flags_and_name_offset >> 0x18; + int compression = JKRConvertAttrToCompressionType(fileFlag); + + if(fileEntry->data != NULL) { + if (compression == COMPRESSION_YAZ0) { + u32 expandSize = getExpandSize(fileEntry); + if (expandSize != 0) { + fileSize = expandSize; + } + } + + if (fileSize > compressedSize) { + fileSize = compressedSize; + } + + JKRHeap::copyMemory(data, fileEntry->data, fileSize); + size = fileSize; + } + else { + if (fileFlag & 0x10) { + size = JKRMemArchive::fetchResource_subroutine((u8 *)(field_0x64 + fileEntry->data_offset), alignedSize, (u8 *)data, + compressedSize & ~31, compression); + } + else if (fileFlag & 0x20) { + size = JKRAramArchive::fetchResource_subroutine(fileEntry->data_offset + mAramPart->getAddress() - mSizeOfMemPart, + alignedSize, (u8 *)data, compressedSize & ~31, compression); + } + else if (fileFlag & 0x40){ + size = JKRDvdArchive::fetchResource_subroutine(mEntryNum, field_0x6c + fileEntry->data_offset, alignedSize, (u8 *)data, + compressedSize & ~31, compression, mCompression); + } else { + OSPanic(__FILE__, 756, ":::CompArchive: bad mode."); + } + } + + if(pSize != NULL) { + *pSize = size; + } + return data; } /* 802BC370-802BC404 .text removeResourceAll__14JKRCompArchiveFv */ void JKRCompArchive::removeResourceAll() { - /* Nonmatching */ + if (mArcInfoBlock != NULL && mMountMode != MOUNT_MEM) { + SDIFileEntry* fileEntry = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { + int tmp = fileEntry->type_flags_and_name_offset >> 0x18; + + if (fileEntry->data != NULL) { + if (!(tmp & 0x10)) { + JKRFreeToHeap(mHeap, fileEntry->data); + } + + fileEntry->data = NULL; + } + } + } } /* 802BC404-802BC470 .text removeResource__14JKRCompArchiveFPv */ -void JKRCompArchive::removeResource(void*) { - /* Nonmatching */ +bool JKRCompArchive::removeResource(void* resource) { + SDIFileEntry* fileEntry = findPtrResource(resource); + if (!fileEntry) + return false; + + if (!((fileEntry->type_flags_and_name_offset >> 0x18) & 0x10)) { + JKRFreeToHeap(mHeap, resource); + } + + fileEntry->data = NULL; + return true; } /* 802BC470-802BC610 .text getExpandedResSize__14JKRCompArchiveCFPCv */ -void JKRCompArchive::getExpandedResSize(const void*) const { - /* Nonmatching */ +u32 JKRCompArchive::getExpandedResSize(const void* resource) const { + if (mExpandedSize == NULL) { + return getResSize(resource); + } + + SDIFileEntry *fileEntry = findPtrResource(resource); + if(!fileEntry) { + return 0xffffffff; + } + + u8 flags = (fileEntry->type_flags_and_name_offset >> 0x18); + if((flags & 4) == 0) { // not compressed + return getResSize(resource); + } + + if ((flags & 0x10) != 0) { + return JKRDecompExpandSize((u8 *)resource); + } + + u8 buf[64]; + u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buf, 32); + if ((flags & 0x20) != 0) { + u32 addr = mAramPart->mAddress; + addr = fileEntry->data_offset + addr; + JKRAramToMainRam(addr, bufPtr, sizeof(buf) / 2, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); + } + else if ((flags & 0x40) != 0) { + JKRDvdToMainRam(mEntryNum, bufPtr, EXPAND_SWITCH_UNKNOWN2, sizeof(buf) / 2, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, field_0x6c + fileEntry->data_offset, NULL); + DCInvalidateRange(bufPtr, sizeof(buf) / 2); + } + else { +#if VERSION == VERSION_JPN + OSPanic(__FILE__, 948, "illegal resource."); +#else + OSPanic(__FILE__, 944, "illegal resource."); +#endif + } + u32 expandSize = JKRDecompExpandSize(bufPtr); + const_cast(this)->setExpandSize(fileEntry, expandSize); + return expandSize; } diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index bd776c69a..7ec088dba 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -4,44 +4,367 @@ // #include "JSystem/JKernel/JKRDvdArchive.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/math.h" +#include "MSL_C/string.h" +#include "dolphin/os/OS.h" /* 802BABD4-802BAC7C .text __ct__13JKRDvdArchiveFlQ210JKRArchive15EMountDirection */ -JKRDvdArchive::JKRDvdArchive(long, JKRArchive::EMountDirection) { - /* Nonmatching */ +JKRDvdArchive::JKRDvdArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNum, MOUNT_DVD) { + mMountDirection = mountDirection; + if (!open(entryNum)) + return; + + mVolumeType = 'RARC'; + mVolumeName = mStringTable + mNodes->name_offset; + getVolumeList().prepend(&mFileLoaderLink); + mIsMounted = true; } /* 802BAC7C-802BAD98 .text __dt__13JKRDvdArchiveFv */ JKRDvdArchive::~JKRDvdArchive() { - /* Nonmatching */ + if (mIsMounted == true) { + if (mArcInfoBlock) { + SDIFileEntry* fileEntry = mFiles; + int i = 0; + for (; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) { + if (fileEntry->data) { + JKRFreeToHeap(mHeap, fileEntry->data); + } + } + + JKRFreeToHeap(mHeap, mArcInfoBlock); + mArcInfoBlock = NULL; + } + + if (mExpandedSize) { + i_JKRFree(mExpandedSize); + mExpandedSize = NULL; + } + + if (mDvdFile) { + delete mDvdFile; + } + + getVolumeList().remove(&mFileLoaderLink); + mIsMounted = false; + } +} + +static void dummy() { + OSReport(__FILE__); + OSReport("isMounted()"); + OSReport("Halt"); + OSReport("mMountCount == 1"); } /* 802BAD98-802BB024 .text open__13JKRDvdArchiveFl */ -void JKRDvdArchive::open(long) { - /* Nonmatching */ +bool JKRDvdArchive::open(s32 entryNum) { + mArcInfoBlock = NULL; + field_0x64 = NULL; + mNodes = NULL; + mFiles = NULL; + mStringTable = NULL; + + mDvdFile = new (JKRGetSystemHeap(), 0) JKRDvdFile(entryNum); + if (!mDvdFile) { + mMountMode = UNKNOWN_MOUNT_MODE; + return false; + } + + SArcHeader* arcHeader = (SArcHeader*)JKRAllocFromSysHeap(sizeof(SArcHeader), 0x20); + if (!arcHeader) { + mMountMode = UNKNOWN_MOUNT_MODE; + goto cleanup; + } + + JKRDvdToMainRam(entryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN1, sizeof(SArcHeader), NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression); + + int alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 0x20 : -0x20; + + mArcInfoBlock = (SArcDataInfo*)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset, alignment); + if (!mArcInfoBlock) { + mMountMode = UNKNOWN_MOUNT_MODE; + goto cleanup; + } + + JKRDvdToMainRam(entryNum, (u8*)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, + arcHeader->file_data_offset, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, + sizeof(SArcHeader), NULL); + + mNodes = (SDIDirEntry*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); + mStringTable = (char*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); + mExpandedSize = NULL; + + u8 useCompression = 0; + SDIFileEntry* fileEntry = mFiles; + for (u32 i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) { + if (fileEntry->isUnknownFlag1()) { + useCompression |= fileEntry->getCompressFlag(); + } + } + + if (useCompression) { + mExpandedSize = (s32*)JKRAllocFromHeap(mHeap, sizeof(s32) * mArcInfoBlock->num_file_entries, + abs(alignment)); + if (!mExpandedSize) { + // !@bug: mArcInfoBlock is allocated from mHeap but free'd to sSystemHeap. I don't know + // what will happen if mHeap != sSystemHeap, but it's still a bug to free to the wrong + // allocator. + JKRFreeToSysHeap(mArcInfoBlock); + mMountMode = UNKNOWN_MOUNT_MODE; + goto cleanup; + } + + memset(mExpandedSize, 0, sizeof(s32) * mArcInfoBlock->num_file_entries); + } + + field_0x64 = arcHeader->header_length + arcHeader->file_data_offset; + +cleanup: + if (arcHeader) { + JKRFreeToSysHeap(arcHeader); + } + + if (mMountMode == UNKNOWN_MOUNT_MODE) { + OSReport(":::Cannot alloc memory [%s][%d]\n", __FILE__, 382); + if (mDvdFile) { + delete mDvdFile; + } + return false; + } + + return true; } /* 802BB024-802BB17C .text fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl */ -void JKRDvdArchive::fetchResource(JKRArchive::SDIFileEntry*, unsigned long*) { - /* Nonmatching */ +void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { + JUT_ASSERT(413, isMounted()); + u32 tempReturnSize; + if (returnSize == NULL) { + returnSize = &tempReturnSize; + } + + JKRCompression fileCompression = JKRConvertAttrToCompressionType(fileEntry->getAttr()); + if (!fileEntry->data) { + u8* resourcePtr; + u32 resourceSize = fetchResource_subroutine( + mEntryNum, this->field_0x64 + fileEntry->data_offset, fileEntry->data_size, mHeap, + fileCompression, mCompression, &resourcePtr); + *returnSize = resourceSize; + if (resourceSize == 0) { + return NULL; + } + + fileEntry->data = resourcePtr; + if (fileCompression == COMPRESSION_YAZ0) { + setExpandSize(fileEntry, *returnSize); + } + } else { + if (fileCompression == COMPRESSION_YAZ0) { + u32 resourceSize = getExpandSize(fileEntry); + *returnSize = resourceSize; + } else { + *returnSize = fileEntry->data_size; + } + } + + return fileEntry->data; } /* 802BB17C-802BB2BC .text fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ -void JKRDvdArchive::fetchResource(void*, unsigned long, JKRArchive::SDIFileEntry*, unsigned long*) { +void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, u32* returnSize) { /* Nonmatching */ + JUT_ASSERT(489, isMounted()); + u32 otherSize; + u32 size = fileEntry->data_size; + JKRCompression fileCompression = JKRConvertAttrToCompressionType(fileEntry->getAttr()); + + if (!fileEntry->data) { + bufferSize = ALIGN_PREV(bufferSize, 0x20); + size = fetchResource_subroutine(mEntryNum, field_0x64 + fileEntry->data_offset, + fileEntry->data_size, (u8*)buffer, bufferSize, fileCompression, + mCompression); + } else { + if (fileCompression == COMPRESSION_YAZ0) { + otherSize = getExpandSize(fileEntry); + if (otherSize) { + size = otherSize; + } + } + + if (size > bufferSize) { + size = bufferSize; + } + + JKRHeap::copyMemory(buffer, fileEntry->data, size); + } + + if (returnSize) { + *returnSize = size; + } + return buffer; } /* 802BB2BC-802BB47C .text fetchResource_subroutine__13JKRDvdArchiveFlUlUlPUcUlii */ -void JKRDvdArchive::fetchResource_subroutine(long, unsigned long, unsigned long, unsigned char*, unsigned long, int, int) { - /* Nonmatching */ +u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, u8* dst, u32 dstLength, int fileCompression, int archiveCompression) { + u32 alignedSize = ALIGN_NEXT(size, 0x20); + u32 alignedDstLength = ALIGN_PREV(dstLength, 0x20); + + switch (archiveCompression) { + case COMPRESSION_NONE: { + switch (fileCompression) { + case COMPRESSION_NONE: + if (alignedSize > alignedDstLength) { + alignedSize = alignedDstLength; + } + + JKRDvdToMainRam(entryNum, dst, EXPAND_SWITCH_UNKNOWN0, alignedSize, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + return alignedSize; + case COMPRESSION_YAY0: + case COMPRESSION_YAZ0: + // The dst pointer to JKRDvdToMainRam should be aligned to 32 bytes. This will align + // arcHeader to 32 bytes on the stack. + char arcHeaderBuffer[64]; + u8* arcHeader = (u8*)ALIGN_NEXT((u32)arcHeaderBuffer, 0x20); + JKRDvdToMainRam(entryNum, arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader), + NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + DCInvalidateRange(arcHeader, sizeof(SArcHeader)); + + u32 decompressedSize = JKRDecompExpandSize(arcHeader); + u32 alignedDecompressedSize = ALIGN_NEXT(decompressedSize, 0x20); + if (alignedDecompressedSize > alignedDstLength) { + alignedDecompressedSize = alignedDstLength; + } + + JKRDvdToMainRam(entryNum, dst, EXPAND_SWITCH_UNKNOWN1, alignedDecompressedSize, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + return decompressedSize; + } + } + + case COMPRESSION_YAZ0: { + if (size > alignedDstLength) { + size = alignedDstLength; + } + + JKRDvdToMainRam(entryNum, dst, EXPAND_SWITCH_UNKNOWN1, size, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + return size; + } + + case COMPRESSION_YAY0: { + OSPanic(__FILE__, 603, "Sorry, not prepared for SZP archive.\n"); + return 0; + } + + default: { + OSPanic(__FILE__, 609, ":::??? bad sequence\n"); + return 0; + } + } } /* 802BB47C-802BB6F8 .text fetchResource_subroutine__13JKRDvdArchiveFlUlUlP7JKRHeapiiPPUc */ -void JKRDvdArchive::fetchResource_subroutine(long, unsigned long, unsigned long, JKRHeap*, int, int, unsigned char**) { - /* Nonmatching */ +u32 JKRDvdArchive::fetchResource_subroutine(s32 entryNum, u32 offset, u32 size, JKRHeap* heap, int fileCompression, int archiveCompression, u8** returnResource) { + u32 alignedSize = ALIGN_NEXT(size, 0x20); + u8* buffer; + + switch (archiveCompression) { + case COMPRESSION_NONE: { + switch (fileCompression) { + case COMPRESSION_NONE: + buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader)); + JUT_ASSERT(631, buffer != 0); + + JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN0, alignedSize, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + + *returnResource = buffer; + return alignedSize; + case COMPRESSION_YAY0: + case COMPRESSION_YAZ0: + // The dst pointer to JKRDvdToMainRam should be aligned to 32 bytes. This will align + // arcHeader to 32 bytes on the stack. + char arcHeaderBuffer[64]; + u8* arcHeader = (u8*)ALIGN_NEXT((u32)arcHeaderBuffer, 0x20); + JKRDvdToMainRam(entryNum, arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader), + NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + DCInvalidateRange(arcHeader, sizeof(SArcHeader)); + + alignedSize = JKRDecompExpandSize(arcHeader); + buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader)); + JUT_ASSERT(660, buffer); + JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + + *returnResource = buffer; + return alignedSize; + } + } + + case COMPRESSION_YAZ0: { + buffer = (u8*)JKRAllocFromHeap(heap, alignedSize, sizeof(SArcHeader)); + JUT_ASSERT(672, buffer); + + JKRDvdToMainRam(entryNum, buffer, EXPAND_SWITCH_UNKNOWN1, size, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, offset, NULL); + + *returnResource = buffer; + return alignedSize; + } + + case COMPRESSION_YAY0: { + OSPanic(__FILE__, 683, "Sorry, not prepared for SZP archive.\n"); + return 0; + } + + default: { + OSPanic(__FILE__, 688, ":::??? bad sequence\n"); + return 0; + } + } } /* 802BB6F8-802BB82C .text getExpandedResSize__13JKRDvdArchiveCFPCv */ -void JKRDvdArchive::getExpandedResSize(const void*) const { - /* Nonmatching */ +u32 JKRDvdArchive::getExpandedResSize(const void* resource) const { + u32 resourceSize; + if (!mExpandedSize) { + return getResSize(resource); + } + + SDIFileEntry* fileEntry = findPtrResource(resource); + if (!fileEntry) { + return -1; + } + + if (!fileEntry->isCompressed()) { + return getResSize(resource); + } + + resourceSize = getExpandSize(fileEntry); + if (resourceSize) { + return resourceSize; + } + + // The dst pointer to JKRDvdToMainRam should be aligned to 32 bytes. This will align arcHeader + // to 32 bytes on the stack. + char buffer[64]; + u8* arcHeader = (u8*)ALIGN_NEXT((u32)buffer, 0x20); + JKRDvdToMainRam(mEntryNum, arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader), NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, + this->field_0x64 + fileEntry->data_offset, NULL); + DCInvalidateRange(arcHeader, sizeof(SArcHeader)); + + resourceSize = JKRDecompExpandSize(arcHeader); + // ??? + ((JKRDvdArchive*)this)->setExpandSize(fileEntry, resourceSize); + + return resourceSize; } diff --git a/src/JSystem/JKernel/JKRMemArchive.cpp b/src/JSystem/JKernel/JKRMemArchive.cpp index 8acaf10f0..3216b6c56 100644 --- a/src/JSystem/JKernel/JKRMemArchive.cpp +++ b/src/JSystem/JKernel/JKRMemArchive.cpp @@ -4,74 +4,253 @@ // #include "JSystem/JKernel/JKRMemArchive.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRDvdRipper.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/string.h" /* 802B9568-802B95A4 .text __ct__13JKRMemArchiveFv */ -JKRMemArchive::JKRMemArchive() { - /* Nonmatching */ -} +JKRMemArchive::JKRMemArchive() {} /* 802B95A4-802B9658 .text __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */ -JKRMemArchive::JKRMemArchive(long, JKRArchive::EMountDirection) { - /* Nonmatching */ +JKRMemArchive::JKRMemArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) : JKRArchive(entryNum, MOUNT_MEM) { + mIsMounted = false; + mMountDirection = mountDirection; + if (!open(entryNum, mMountDirection)) { + return; + } + + mVolumeType = 'RARC'; + mVolumeName = mStringTable + mNodes->name_offset; + + getVolumeList().prepend(&mFileLoaderLink); + mIsMounted = true; } /* 802B9658-802B9700 .text __dt__13JKRMemArchiveFv */ JKRMemArchive::~JKRMemArchive() { - /* Nonmatching */ + if (mIsMounted == true) { + if (mIsOpen) { + if (mArcHeader) + JKRFreeToHeap(mHeap, mArcHeader); + } + + getVolumeList().remove(&mFileLoaderLink); + mIsMounted = false; + } } /* 802B9700-802B9740 .text fixedInit__13JKRMemArchiveFl */ -void JKRMemArchive::fixedInit(long) { - /* Nonmatching */ +void JKRMemArchive::fixedInit(s32 param_1) { + mIsMounted = false; + mMountMode = 1; + mMountCount = 1; + field_0x58 = 2; + mHeap = JKRHeap::sCurrentHeap; + mEntryNum = param_1; + if (sCurrentVolume) return; + sCurrentVolume = this; + setCurrentDirID(0); } /* 802B9740-802B9810 .text mountFixed__13JKRMemArchiveFPv15JKRMemBreakFlag */ -void JKRMemArchive::mountFixed(void*, JKRMemBreakFlag) { - /* Nonmatching */ +bool JKRMemArchive::mountFixed(void* param_1, JKRMemBreakFlag param_2) { + if (check_mount_already((long)param_1)) { + return false; + } + fixedInit((long)param_1); + if (!open(param_1, 0xffff, param_2)) { + return false; + } + mVolumeType = 'RARC'; + mVolumeName = mStringTable + mNodes->name_offset; + sVolumeList.prepend(&mFileLoaderLink); + mIsOpen = param_2 == 1; + mIsMounted = true; + return true; } /* 802B9810-802B98FC .text unmountFixed__13JKRMemArchiveFv */ void JKRMemArchive::unmountFixed() { - /* Nonmatching */ + JUT_ASSERT(337, isMounted()); + JUT_ASSERT(340, mMountCount == 1); + if (sCurrentVolume == this) { + sCurrentVolume = NULL; + } + if (mIsOpen && mArcHeader) { + JKRHeap::free(mArcHeader, mHeap); + } + sVolumeList.remove(&mFileLoaderLink); + mIsMounted = false; } /* 802B98FC-802B9A90 .text open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */ -void JKRMemArchive::open(long, JKRArchive::EMountDirection) { - /* Nonmatching */ +bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirection) { + mArcHeader = NULL; + mArcInfoBlock = NULL; + mArchiveData = NULL; + mNodes = NULL; + mFiles = NULL; + mStringTable = NULL; + mIsOpen = false; + mMountDirection = mountDirection; + + if (mMountDirection == JKRArchive::MOUNT_DIRECTION_HEAD) { + u32 loadedSize; + mArcHeader = (SArcHeader *)JKRDvdRipper::loadToMainRAM( + entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, + 0, (int *)&mCompression); + } else { + u32 loadedSize; + mArcHeader = (SArcHeader *)JKRDvdRipper::loadToMainRAM( + entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, + JKRDvdRipper::ALLOC_DIRECTION_BACKWARD, 0, (int *)&mCompression); + } + + if (!mArcHeader) { + mMountMode = UNKNOWN_MOUNT_MODE; + } else { + JUT_ASSERT(418, mArcHeader->signature =='RARC'); + mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); + mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); + mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); + + mArchiveData = + (u8 *)((u32)mArcHeader + mArcHeader->header_length + mArcHeader->file_data_offset); + mIsOpen = true; + } + if (mMountMode == 0) { + OSReport(":::Cannot alloc memory [%s][%d]\n", __FILE__, 440); + } + + return (mMountMode == UNKNOWN_MOUNT_MODE) ? false : true; } /* 802B9A90-802B9B90 .text open__13JKRMemArchiveFPvUl15JKRMemBreakFlag */ -void JKRMemArchive::open(void*, unsigned long, JKRMemBreakFlag) { - /* Nonmatching */ +bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) { + mArcHeader = (SArcHeader *)buffer; + JUT_ASSERT(471, mArcHeader->signature =='RARC'); + mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); + mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); + mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); + mArchiveData = (u8 *)(((u32)mArcHeader + mArcHeader->header_length) + mArcHeader->file_data_offset); + mIsOpen = (flag == JKRMEMBREAK_FLAG_UNKNOWN1) ? true : false; // mIsOpen might be u8 + mHeap = JKRHeap::findFromRoot(buffer); + mCompression = COMPRESSION_NONE; + return true; } /* 802B9B90-802B9C34 .text fetchResource__13JKRMemArchiveFPQ210JKRArchive12SDIFileEntryPUl */ -void JKRMemArchive::fetchResource(JKRArchive::SDIFileEntry*, unsigned long*) { - /* Nonmatching */ +void* JKRMemArchive::fetchResource(SDIFileEntry* fileEntry, u32* resourceSize) { + JUT_ASSERT(535, isMounted()); + if (!fileEntry->data) { + fileEntry->data = mArchiveData + fileEntry->data_offset; + } + + if (resourceSize) { + *resourceSize = fileEntry->data_size; + } + + return fileEntry->data; } /* 802B9C34-802B9D38 .text fetchResource__13JKRMemArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ -void JKRMemArchive::fetchResource(void*, unsigned long, JKRArchive::SDIFileEntry*, unsigned long*) { - /* Nonmatching */ +void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, u32* resourceSize) { + JUT_ASSERT(575, isMounted()); + u32 srcLength = fileEntry->data_size; + if (srcLength > bufferSize) { + srcLength = bufferSize; + } + + if (fileEntry->data != NULL) { + memcpy(buffer, fileEntry->data, srcLength); + } else { + JKRCompression compression = JKRConvertAttrToCompressionType(fileEntry->getAttr()); + void* data = mArchiveData + fileEntry->data_offset; + srcLength = + fetchResource_subroutine((u8*)data, srcLength, (u8*)buffer, bufferSize, compression); + } + + if (resourceSize) { + *resourceSize = srcLength; + } + + return buffer; } /* 802B9D38-802B9DE8 .text removeResourceAll__13JKRMemArchiveFv */ void JKRMemArchive::removeResourceAll() { - /* Nonmatching */ + JUT_ASSERT(622, isMounted()); + + if (mArcInfoBlock == NULL) + return; + if (mMountMode == MOUNT_MEM) + return; + + // !@bug: looping over file entries without incrementing the fileEntry pointer. Thus, only the + // first fileEntry will clear/remove the resource data. + SDIFileEntry* fileEntry = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { + if (fileEntry->data) { + fileEntry->data = NULL; + } + } } /* 802B9DE8-802B9E80 .text removeResource__13JKRMemArchiveFPv */ -void JKRMemArchive::removeResource(void*) { - /* Nonmatching */ +bool JKRMemArchive::removeResource(void* resource) { + JUT_ASSERT(653, isMounted()); + + SDIFileEntry* fileEntry = findPtrResource(resource); + if (!fileEntry) + return false; + + fileEntry->data = NULL; + return true; } /* 802B9E80-802B9F50 .text fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli */ -void JKRMemArchive::fetchResource_subroutine(unsigned char*, unsigned long, unsigned char*, unsigned long, int) { - /* Nonmatching */ +u32 JKRMemArchive::fetchResource_subroutine(u8* src, u32 srcLength, u8* dst, u32 dstLength, int compression) { + switch (compression) { + case COMPRESSION_NONE: + if (srcLength > dstLength) { + srcLength = dstLength; + } + + memcpy(dst, src, srcLength); + return srcLength; + + case COMPRESSION_YAY0: + case COMPRESSION_YAZ0: + u32 expendedSize = JKRDecompExpandSize(src); + srcLength = expendedSize; + if (expendedSize > dstLength) { + srcLength = dstLength; + } + + JKRDecompress(src, dst, srcLength, 0); + return srcLength; + + default: + OSPanic(__FILE__, 703, ":::??? bad sequence\n"); + break; + } + + return 0; } /* 802B9F50-802B9FE0 .text getExpandedResSize__13JKRMemArchiveCFPCv */ -void JKRMemArchive::getExpandedResSize(const void*) const { - /* Nonmatching */ +u32 JKRMemArchive::getExpandedResSize(const void* resource) const { + SDIFileEntry* fileEntry = findPtrResource(resource); + if (fileEntry == NULL) + return -1; + + if (fileEntry->isCompressed() == false) { + return getResSize(resource); + } else { + return JKRDecompExpandSize((u8*)resource); + } } From 01f2fc433f52c78cd09d8398f338c9df296c6ee0 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Mon, 18 Sep 2023 15:29:40 -0400 Subject: [PATCH 09/89] d_a_nh done (no match) (#55) * Fix sin and cos * Fix dCcD_GObjInf JP inlining difference * Improvements to dDlst_alphaModel_c * d_a_nh done (no match) --- include/JSystem/JMath/JMATrigonometric.h | 69 +---- include/d/actor/d_a_player_link.h | 2 +- include/d/d_attention.h | 5 + include/d/d_cc_d.h | 6 + include/d/d_com_inf_game.h | 30 +- include/d/d_drawlist.h | 54 ++-- src/d/actor/d_a_nh.cpp | 337 +++++++++++++++-------- src/d/actor/d_a_spotbox.cpp | 4 +- src/d/d_npc.cpp | 10 +- 9 files changed, 303 insertions(+), 214 deletions(-) diff --git a/include/JSystem/JMath/JMATrigonometric.h b/include/JSystem/JMath/JMATrigonometric.h index 6fe4c3216..d57bd234e 100644 --- a/include/JSystem/JMath/JMATrigonometric.h +++ b/include/JSystem/JMath/JMATrigonometric.h @@ -4,74 +4,15 @@ #include "dolphin/types.h" #include "MSL_C/utility.h" -struct TSinCosTable { - std::pair table[0x2000]; - - f32 sinShort(s16 v) const { return table[static_cast(v) >> 3].first; } - f32 cosShort(s16 v) const { return table[static_cast(v) >> 3].second; } - - inline f32 sinLap(f32 v) { - if (v < 0.0f) { - return -table[(u16)(-8192.0f * v) & 0x1fff].first; - } - return table[(u16)(8192.0f * v) & 0x1fff].first; - } - - inline f32 sinDegree(f32 degree) { - if (degree < 0.0f) { - return -table[(u16)(-22.755556106567383f * degree) & 0x1fffU].first; - } - return table[(u16)(22.755556106567383f * degree) & 0x1fffU].first; - } - - inline f32 cosDegree(f32 degree) { - if (degree < 0.0f) { - degree = -degree; - } - return table[(u16)(22.755556106567383f * degree) & 0x1fffU].second; - } -}; - -struct TAtanTable { - f32 table[1025]; - u8 pad[0x1C]; -}; - -struct TAsinAcosTable { - f32 table[1025]; - u8 pad[0x1C]; -}; - -namespace JMath { -extern TSinCosTable sincosTable_; -extern TAtanTable atanTable_; -extern TAsinAcosTable asinAcosTable_; -}; // namespace JMath - -inline f32 JMASCosShort(s16 v) { - return JMath::sincosTable_.cosShort(v); -} -inline f32 JMASinShort(s16 v) { - return JMath::sincosTable_.sinShort(v); -} +extern u32 jmaSinShift; +extern f32 *jmaSinTable; +extern f32 *jmaCosTable; inline f32 JMASCos(s16 v) { - return JMASCosShort(v); + return jmaCosTable[static_cast(v) >> jmaSinShift]; } inline f32 JMASSin(s16 v) { - return JMASinShort(v); -} - -inline f32 JMASinLap(f32 v) { - return JMath::sincosTable_.sinLap(v); -} - -inline f32 JMASinDegree(f32 degree) { - return JMath::sincosTable_.sinDegree(degree); -} - -inline f32 JMACosDegree(f32 degree) { - return JMath::sincosTable_.cosDegree(degree); + return jmaSinTable[static_cast(v) >> jmaSinShift]; } #endif /* JMATRIGONOMETRIC_H */ diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index bb764bdf8..f885549bb 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -846,7 +846,7 @@ public: void checkBottleSwing() const; void checkCutCharge() const; void checkTactWait() const; - void getBaseAnimeFrameRate(); + f32 getBaseAnimeFrameRate(); void getBaseAnimeFrame(); void getItemID() const; void getThrowBoomerangID() const; diff --git a/include/d/d_attention.h b/include/d/d_attention.h index 113bbc7ed..df8072f73 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -149,6 +149,11 @@ public: } fopAc_ac_c* Owner() { return (fopAc_ac_c*)mpPlayer; } + + void CatchRequest(fopAc_ac_c* param_0, u8 param_1, f32 param_2, f32 param_3, + f32 param_4, s16 param_5, s32 param_6) { + mCatch.request(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + } public: /* 0x000 */ daPy_lk_c* mpPlayer; diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index 4979191ae..6a128e776 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -228,19 +228,25 @@ public: virtual ~dCcD_GObjInf(); virtual cCcD_GObjInf* GetGObjInf(); virtual void ClrAtHit(); +#if VERSION != VERSION_JPN u32 ChkAtHit(); +#endif void ResetAtHit(); cCcD_Obj* GetAtHitObj(); cCcD_GObjInf* GetAtHitGObj(); u8 ChkAtNoGuard(); virtual void ClrTgHit(); +#if VERSION != VERSION_JPN u32 ChkTgHit(); +#endif void ResetTgHit(); cCcD_Obj* GetTgHitObj(); dCcD_GObjInf* GetTgHitGObj(); u8 GetTgHitObjSe(); virtual void ClrCoHit(); +#if VERSION != VERSION_JPN u32 ChkCoHit(); +#endif void ResetCoHit(); cCcD_Obj* GetCoHitObj(); void Set(dCcD_SrcGObjInf const&); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 7f5c4a055..f5d27db73 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1011,16 +1011,24 @@ inline int dComIfGd_setRealShadow2(u32 id, s8 param_2, J3DModel* pModel, cXyz* p int dComIfGd_setSimpleShadow2(cXyz* i_pos, f32 param_1, f32 param_2, cBgS_PolyInfo& i_floorPoly, s16 i_angle, f32 param_5, GXTexObj* i_tex); -inline void dComIfGd_setAlphaModel(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { - g_dComIfG_gameInfo.drawlist.setAlphaModel(param_0, param_1, param_2); +inline void dComIfGd_setAlphaModel(u8 type, Mtx mtx, u8 alpha) { + g_dComIfG_gameInfo.drawlist.setAlphaModel(type, mtx, alpha); } -inline void dComIfGd_setAlphaModel2(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { - g_dComIfG_gameInfo.drawlist.setAlphaModel2(param_0, param_1, param_2); +inline void dComIfGd_setSpotModel(u8 type, Mtx mtx, u8 alpha) { + g_dComIfG_gameInfo.drawlist.setSpotModel(type, mtx, alpha); } -inline const dDlst_alphaModel_c* dComIfGd_getAlphaModel2(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { - return g_dComIfG_gameInfo.drawlist.getAlphaModel2(); +inline void dComIfGd_setLightModel(u8 type, Mtx mtx, u8 alpha) { + g_dComIfG_gameInfo.drawlist.setLightModel(type, mtx, alpha); +} + +inline s32 dComIfGd_getSpotModelNum() { + return g_dComIfG_gameInfo.drawlist.getSpotModelNum(); +} + +inline s32 dComIfGd_getLightModelNum() { + return g_dComIfG_gameInfo.drawlist.getLightModelNum(); } /** @@ -1127,6 +1135,16 @@ inline void dComIfGp_particle_readScene(u8 particle_no, mDoDvdThd_toMainRam_c** g_dComIfG_gameInfo.play.getParticle()->readScene(particle_no, param_1); } +/** + * === ATTENTION === + */ + +inline void dComIfGp_att_CatchRequest(fopAc_ac_c* param_0, u8 param_1, f32 param_2, f32 param_3, + f32 param_4, s16 param_5, s32 param_6) { + dAttention_c& attention = g_dComIfG_gameInfo.play.getAttention(); + attention.CatchRequest(param_0, param_1, param_2, param_3, param_4,param_5, param_6); +} + /** * === MISC === */ diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index d5000eca4..95165b236 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -165,18 +165,33 @@ public: struct view_port_class; struct view_class; struct camera_class; + +struct dDlst_alphaModelData_c; + struct dDlst_alphaModel_c { public: + enum Type { + TYPE_SPHERE = 0, + TYPE_TWO_SPHERES = 1, + TYPE_SEARCHLIGHT = 2, + TYPE_CUBE = 3, + TYPE_SMALL_SPHERE = 4, + TYPE_THREE_SPHERES = 5, + }; + dDlst_alphaModel_c(); void create(int); - void set(unsigned char, float(*)[4], unsigned char); - void draw(float(*)[4]); + void set(u8 type, Mtx mtx, u8 alpha); + void draw(MtxP); + s32 getNum() { + return mNum; + } public: - short pad; - short pad2; - short pad3; - short mCount; -}; + /* 0x00 */ _GXColor mColor; + /* 0x04 */ s16 mCapacity; + /* 0x06 */ s16 mNum; + /* 0x08 */ dDlst_alphaModelData_c* mpData; +}; // Size: 0xC class dDlst_list_c { public: @@ -202,14 +217,21 @@ public: dKy_tevstr_c* pTevStr) { return mShadowControl.setReal2(id, param_2, pModel, pPos, param_5, param_6, pTevStr); } - void setAlphaModel(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { - mpAlphaModel0->set(param_0, param_1, param_2); + + void setAlphaModel(u8 type, Mtx mtx, u8 alpha) { + mpAlphaModel->set(type, mtx, alpha); } - void setAlphaModel2(unsigned char param_0, float(*param_1)[4], unsigned char param_2) { - mpAlphaModel2->set(param_0, param_1, param_2); + void setSpotModel(u8 type, Mtx mtx, u8 alpha) { + mpSpotModel->set(type, mtx, alpha); } - const dDlst_alphaModel_c* getAlphaModel2() { - return mpAlphaModel2; + void setLightModel(u8 type, Mtx mtx, u8 alpha) { + mpLightModel->set(type, mtx, alpha); + } + s32 getSpotModelNum() { + return mpSpotModel->getNum(); + } + s32 getLightModelNum() { + return mpLightModel->getNum(); } static void offWipe() { mWipe = false; } @@ -247,9 +269,9 @@ private: /* 0x00230 */ dDlst_window_c* field_0x00230; /* 0x00234 */ camera_class* mpCamera; /* 0x00238 */ u8 field_0x00238[0x00244 - 0x00238]; - /* 0x00244 */ dDlst_alphaModel_c* mpAlphaModel0; - /* 0x00248 */ dDlst_alphaModel_c* mpAlphaModel2; - /* 0x0024C */ dDlst_alphaModel_c* mpAlphaModel1; + /* 0x00244 */ dDlst_alphaModel_c* mpAlphaModel; + /* 0x00248 */ dDlst_alphaModel_c* mpSpotModel; + /* 0x0024C */ dDlst_alphaModel_c* mpLightModel; /* 0x00250 */ dDlst_shadowControl_c mShadowControl; /* 0x16078 */ mDoExt_3DlineMatSortPacket m3DLineMatSortPacket[2]; /* 0x160A0 */ dDlst_peekZ_c mPeekZ; diff --git a/src/d/actor/d_a_nh.cpp b/src/d/actor/d_a_nh.cpp index 39380e97e..92ca30e1d 100644 --- a/src/d/actor/d_a_nh.cpp +++ b/src/d/actor/d_a_nh.cpp @@ -10,38 +10,43 @@ #include "d/d_cc_d.h" #include "d/d_bg_s_acch.h" #include "d/d_bg_s_gnd_chk.h" +#include "d/actor/d_a_player.h" +#include "d/d_item_data.h" #include "m_Do/m_Do_hostIO.h" #include "m_Do/m_Do_mtx.h" #include "JSystem/JUtility/JUTAssert.h" -struct daNh_HIO_c__Registers { - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 mGravity; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 mModelScale; - /* 0x3C */ s16 field_0x3c; - /* 0x3E */ s16 field_0x3e; - /* 0x40 */ s16 field_0x40; -}; // Size: 0x3C +class daNh_c; class daNh_HIO_c : public JORReflexible { + struct hio_prm_c { + // Note: Offsets are relative to daNh_HIO_c instead of hio_prm_c for convenience. + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 mGlowOffsetY; + /* 0x18 */ f32 mGlowScale; + /* 0x1C */ f32 mMinFrightenSpeed; + /* 0x20 */ f32 mHeightAboveGround; + /* 0x24 */ f32 mAscentSpeed; + /* 0x28 */ f32 mDescentSpeed; + /* 0x2C */ f32 mGravity; + /* 0x30 */ f32 mMaxHomeDist; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 mModelScale; + /* 0x3C */ s16 field_0x3c; + /* 0x3E */ s16 mDefaultGlowAlpha; + /* 0x40 */ s16 mBottleLifetime; + }; // Size: 0x3C + public: daNh_HIO_c(); virtual ~daNh_HIO_c(); public: /* 0x04 */ s8 mChildID; - /* 0x08 */ daNh_HIO_c__Registers reg; - /* 0x44 */ fopAc_ac_c* unk44; + /* 0x08 */ hio_prm_c prm; + /* 0x44 */ daNh_c* mActor; }; // Size: 0x44 static daNh_HIO_c l_HIO; @@ -78,14 +83,23 @@ static dCcD_SrcCyl l_cyl_src = { class daNh_c : fopAc_ac_c { public: - typedef BOOL (daNh_c::*daNh_c_ActionFunc)(void*); + enum Type { + TYPE_BOTTLE = 0x01, + // Any other value besides 0x01 will behave as the normal, non-bottled type. + // All three of the Forest Fireflies placed in stages have their type set to 0xFF. + // TYPE_BOTTLE (0x01) is spawned via daPy_lk_c::procBottleOpen. + }; enum ActionStatus { - ACTION_ENDING = -1, ACTION_STARTING = 0, - ACTION_ONGOING = 1, + ACTION_ONGOING = 1, + ACTION_ENDING = -1, }; + typedef BOOL (daNh_c::*daNh_c_ActionFunc)(void*); + + bool isTypeBottle() { return mType == TYPE_BOTTLE; } + ~daNh_c(); void setBaseMtx(); BOOL createHeap(); @@ -94,8 +108,8 @@ public: void action(void*); BOOL setAction(daNh_c_ActionFunc, void*); BOOL checkBinCatch(); - void searchPlayer(); - void moveProc(float, float, short); + BOOL searchPlayer(); + BOOL moveProc(f32, f32, s16); f32 getHomeDistance(); BOOL checkTimer(); void BGCheck(); @@ -120,19 +134,19 @@ public: /* 0x624 */ u8 temp2[0x630 - 0x624]; /* 0x630 */ cBgS_PolyInfo mPolyInfo; /* 0x640 */ daNh_c_ActionFunc mCurrActionFunc; - /* 0x64C */ Mtx mMtx; + /* 0x64C */ Mtx mGlowMtx; /* 0x67C */ f32 mPlayerDist; /* 0x680 */ f32 mGroundY; - /* 0x684 */ int mTimer; - /* 0x688 */ s32 unk688; + /* 0x684 */ int mBottleTimer; + /* 0x688 */ s32 mAlpha; /* 0x68C */ u8 unk68C; /* 0x68D */ s8 mActionStatus; - /* 0x68E */ u8 unk68E; - /* 0x68F */ u8 unk68F; - /* 0x690 */ u8 unk690; - /* 0x691 */ u8 unk691; + /* 0x68E */ u8 mGlowAlpha; + /* 0x68F */ u8 mWobbleDir; + /* 0x690 */ u8 mWobbleTimer; + /* 0x691 */ u8 mType; /* 0x692 */ u8 temp5[0x694 - 0x692]; - /* 0x694 */ s16 unk694; + /* 0x694 */ s16 mEscapeTimer; /* 0x696 */ s16 unk696; /* 0x698 */ s16 unk698; /* 0x69A */ s16 unk69A; @@ -143,32 +157,28 @@ public: /* 800F95B8-800F9654 .text __ct__10daNh_HIO_cFv */ daNh_HIO_c::daNh_HIO_c() { - /* Nonmatching */ mChildID = -1; - static const daNh_HIO_c__Registers init_data = { - 200.0f, - 100.0f, - -50.0f, - 140.0f, - 0.95f, - 5.0f, - 50.0f, - 1.0f, - -1.0f, - /* mGravity */ 0.25f, - 250.0f, - 600.0f, - /* mModelScale */ 2.5f, - 0x2000, - 0x20, - 0x12C, + static const hio_prm_c init_data = { + /* field_0x08 */ 200.0f, + /* field_0x0c */ 100.0f, + /* field_0x10 */ -50.0f, + /* mGlowOffsetY */ 140.0f, + /* mGlowScale */ 0.95f, + /* mMinFrightenSpeed */ 5.0f, + /* mHeightAboveGround */ 50.0f, + /* mAscentSpeed */ 1.0f, + /* mDescentSpeed */ -1.0f, + /* mGravity */ 0.25f, + /* mMaxHomeDist */ 250.0f, + /* field_0x34 */ 600.0f, + /* mModelScale */ 2.5f, + /* field_0x3c */ 0x2000, + /* mDefaultGlowAlpha */ 0x20, + /* mBottleLifetime */ 10*30, }; - reg = init_data; + prm = init_data; } -/* 800FAEAC-800FAEF4 .text __dt__10daNh_HIO_cFv */ -daNh_HIO_c::~daNh_HIO_c() {} - /* 800F9654-800F9874 .text __dt__6daNh_cFv */ daNh_c::~daNh_c() { if (l_HIO.mChildID >= 0) { @@ -180,21 +190,21 @@ daNh_c::~daNh_c() { /* 800F9874-800F9980 .text setBaseMtx__6daNh_cFv */ void daNh_c::setBaseMtx() { J3DModel* model = mpModel; - mScale.setAll(l_HIO.reg.mModelScale); + mScale.setAll(l_HIO.prm.mModelScale); model->setBaseScale(mScale); mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::YrotM(shape_angle.y); MTXCopy(mDoMtx_stack_c::get(), model->getBaseTRMtx()); - cXyz offset; - offset.z = 0.0f; - offset.x = 0.0f; - offset.y = l_HIO.reg.field_0x14; - cXyz temp; - cMtx_multVec(mDoMtx_stack_c::get(), &offset, &temp); - PSMTXTrans(mDoMtx_stack_c::get(), temp.x, temp.y, temp.z); - mDoMtx_stack_c::scaleM(l_HIO.reg.field_0x18, l_HIO.reg.field_0x18, l_HIO.reg.field_0x18); - MTXCopy(mDoMtx_stack_c::get(), mMtx); + cXyz glowOffset; + glowOffset.z = 0.0f; + glowOffset.x = 0.0f; + glowOffset.y = l_HIO.prm.mGlowOffsetY; + cXyz glowPos; + cMtx_multVec(mDoMtx_stack_c::get(), &glowOffset, &glowPos); + PSMTXTrans(mDoMtx_stack_c::get(), glowPos.x, glowPos.y, glowPos.z); + mDoMtx_stack_c::scaleM(l_HIO.prm.mGlowScale, l_HIO.prm.mGlowScale, l_HIO.prm.mGlowScale); + MTXCopy(mDoMtx_stack_c::get(), mGlowMtx); } /* 800F9980-800F9A54 .text createHeap__6daNh_cFv */ @@ -238,7 +248,7 @@ s32 daNh_c::create() { if (l_HIO.mChildID < 0) { l_HIO.mChildID = mDoHIO_root.mDoHIO_createChild("森のほたる", &l_HIO); - l_HIO.unk44 = this; + l_HIO.mActor = this; } if (!this->init()) { phase_state = cPhs_ERROR_e; @@ -249,8 +259,14 @@ s32 daNh_c::create() { /* 800F9C8C-800F9D64 .text init__6daNh_cFv */ BOOL daNh_c::init() { - /* Nonmatching */ - mGravity = l_HIO.reg.mGravity; + mType = fopAcM_GetParam(this) & 0xFF; + speed.y = 1.0f; + mGravity = l_HIO.prm.mGravity; + mGlowAlpha = l_HIO.prm.mDefaultGlowAlpha; + mPlayerDist = 0.0f; + mAlpha = 0xFF; + mBottleTimer = l_HIO.prm.mBottleLifetime; + mGroundY = 0.0f; BGCheck(); @@ -259,20 +275,22 @@ BOOL daNh_c::init() { mCyl.SetStts(&mStts); setBaseMtx(); - mEyePos = mAttentionInfo.mPosition = current.pos; return TRUE; } /* 800F9D64-800F9DF4 .text action__6daNh_cFPv */ -void daNh_c::action(void*) { - /* Nonmatching */ +void daNh_c::action(void* arg) { + if (mCurrActionFunc == NULL) { + speedF = 0.0f; + setAction(&waitAction, NULL); + } + (this->*mCurrActionFunc)(arg); } /* 800F9DF4-800F9EB8 .text setAction__6daNh_cFM6daNh_cFPCvPvPv_iPv */ BOOL daNh_c::setAction(daNh_c_ActionFunc actionFunc, void* arg) { - /* Nonmatching */ if (mCurrActionFunc != actionFunc) { if (mCurrActionFunc != NULL) { mActionStatus = ACTION_ENDING; @@ -280,7 +298,7 @@ BOOL daNh_c::setAction(daNh_c_ActionFunc actionFunc, void* arg) { } mCurrActionFunc = actionFunc; mActionStatus = ACTION_STARTING; - unk694 = 0; + mEscapeTimer = 0; unk696 = 0; unk698 = 0; unk69A = 0; @@ -292,17 +310,51 @@ BOOL daNh_c::setAction(daNh_c_ActionFunc actionFunc, void* arg) { /* 800F9EB8-800F9F3C .text checkBinCatch__6daNh_cFv */ BOOL daNh_c::checkBinCatch() { - /* Nonmatching */ + if (mEvtInfo.checkCommandCatch()) { + fopAcM_delete(this); + return TRUE; + } + + dComIfGp_getAttention().CatchRequest( + this, FIREFLY_BOTTLE, + l_HIO.prm.field_0x08, l_HIO.prm.field_0x0c, + l_HIO.prm.field_0x10, l_HIO.prm.field_0x3c, + 1 + ); + mEvtInfo.onCondition(0x40); + + return FALSE; } /* 800F9F3C-800FA108 .text searchPlayer__6daNh_cFv */ -void daNh_c::searchPlayer() { - /* Nonmatching */ +BOOL daNh_c::searchPlayer() { + if (isTypeBottle()) { + setAction(&escapeAction, NULL); + return TRUE; + } + + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz playerDelta = player->next.pos - player->current.pos; + f32 playerDist = fopAcM_searchPlayerDistance(this); + f32 playerDistDelta = mPlayerDist - playerDist; + mPlayerDist = playerDist; + if (playerDelta.absXZ() > 0.001f && playerDist < 600.0f && playerDistDelta > l_HIO.prm.mMinFrightenSpeed) { + // Player is nearby and moving closer. The Forest Firefly becomes frightened and tries to head home. + setAction(&returnAction, NULL); + return TRUE; + } + + return FALSE; } /* 800FA108-800FA19C .text moveProc__6daNh_cFffs */ -void daNh_c::moveProc(float, float, short) { - /* Nonmatching */ +BOOL daNh_c::moveProc(f32 targetSpeed, f32 speedStep, s16 targetAngle) { + cLib_chaseAngleS(¤t.angle.y, targetAngle, 0x400); + shape_angle.y = current.angle.y; + if (cLib_chaseF(&speedF, targetSpeed, speedStep) && targetSpeed == 0.0f) { + return TRUE; + } + return FALSE; } /* 800FA19C-800FA260 .text getHomeDistance__6daNh_cFv */ @@ -313,12 +365,14 @@ f32 daNh_c::getHomeDistance() { /* 800FA260-800FA2E4 .text checkTimer__6daNh_cFv */ BOOL daNh_c::checkTimer() { - if (unk691 == 1 && !cLib_calcTimer(&mTimer)) { - unk688 -= 4; - if (unk688 < 0) { - unk688 = 0; + // Count down after being released from a bottle. + if (isTypeBottle() && cLib_calcTimer(&mBottleTimer) == 0) { + // Timer finished, start fading out. + mAlpha -= 4; + if (mAlpha < 0) { + mAlpha = 0; } - if (unk688 == 0) { + if (mAlpha == 0) { fopAcM_delete(this); return TRUE; } @@ -340,17 +394,17 @@ void daNh_c::BGCheck() { /* 800FA568-800FA5B4 .text airMove__6daNh_cFv */ void daNh_c::airMove() { - f32 idealY = mGroundY + l_HIO.reg.field_0x20; + f32 idealY = mGroundY + l_HIO.prm.mHeightAboveGround; if (current.pos.y < idealY - 10.0f) { - mMaxFallSpeed = l_HIO.reg.field_0x24; + mMaxFallSpeed = l_HIO.prm.mAscentSpeed; } else if (current.pos.y > idealY + 10.0f) { - mMaxFallSpeed = l_HIO.reg.field_0x28; + mMaxFallSpeed = l_HIO.prm.mDescentSpeed; } } /* 800FA5B4-800FA674 .text waitAction__6daNh_cFPv */ BOOL daNh_c::waitAction(void*) { - if (mActionStatus == ACTION_STARTING) { + if (mActionStatus == ACTION_STARTING) { mActionStatus += 1; // ACTION_ONGOING mPlayerDist = fopAcM_searchPlayerDistance(this); } else if (mActionStatus != ACTION_ENDING) { @@ -364,13 +418,13 @@ BOOL daNh_c::waitAction(void*) { /* 800FA674-800FA78C .text checkEscapeEnd__6daNh_cFv */ BOOL daNh_c::checkEscapeEnd() { - cXyz deltaPos = orig.pos - current.pos; - if (unk691 != 1) { - if (!cLib_calcTimer(&unk694)) { + cXyz homeDelta = orig.pos - current.pos; + if (!isTypeBottle()) { + if (cLib_calcTimer(&mEscapeTimer) == 0) { setAction(&waitAction, NULL); return TRUE; } - if (deltaPos.abs2XZ() > l_HIO.reg.field_0x30*l_HIO.reg.field_0x30) { + if (homeDelta.abs2XZ() > l_HIO.prm.mMaxHomeDist*l_HIO.prm.mMaxHomeDist) { setAction(&returnAction, NULL); return TRUE; } @@ -380,20 +434,21 @@ BOOL daNh_c::checkEscapeEnd() { /* 800FA78C-800FA880 .text escapeAction__6daNh_cFPv */ BOOL daNh_c::escapeAction(void*) { - if (mActionStatus == ACTION_STARTING) { + // Run away after being released from a bottle. + if (mActionStatus == ACTION_STARTING) { mActionStatus += 1; // ACTION_ONGOING - unk68F = 0; - unk690 = 0; - unk694 = 150; + mWobbleDir = 0; + mWobbleTimer = 0; + mEscapeTimer = 150; } else if (mActionStatus != ACTION_ENDING) { if (!checkEscapeEnd()) { - s16 angle = fopAcM_searchPlayerAngleY(this) + 0x8000; - if (!cLib_calcTimer(&unk690)) { - unk68F ^= 1; - unk690 = cLib_getRndValue(15, 20); + s16 targetAngle = fopAcM_searchPlayerAngleY(this) + 0x8000; + if (cLib_calcTimer(&mWobbleTimer) == 0) { + mWobbleDir ^= 1; + mWobbleTimer = cLib_getRndValue(15, 20); } - angle += unk68F ? -0x2000 : 0x2000; - moveProc(5.0f, 0.5f, angle); + targetAngle += mWobbleDir ? -0x2000 : 0x2000; + moveProc(5.0f, 0.5f, targetAngle); } } return TRUE; @@ -401,33 +456,33 @@ BOOL daNh_c::escapeAction(void*) { /* 800FA880-800FAA34 .text returnAction__6daNh_cFPv */ BOOL daNh_c::returnAction(void*) { - if (mActionStatus == ACTION_STARTING) { + // Try to head in the direction of home (the Forest Firefly's spawn position). + if (mActionStatus == ACTION_STARTING) { mActionStatus += 1; // ACTION_ONGOING - unk68F = 0; - unk690 = 0; - unk694 = 150; + mWobbleDir = 0; + mWobbleTimer = 0; + mEscapeTimer = 150; } else if (mActionStatus != ACTION_ENDING) { if (getHomeDistance() < 50.0f) { setAction(&waitAction, NULL); } else { s16 targetAngle = cLib_targetAngleY(¤t.pos, &orig.pos); - cXyz delta = orig.pos - current.pos; - f32 distXZ = cXyz(delta.x, 0.0f, delta.z).abs2(); - if (distXZ < l_HIO.reg.field_0x30*l_HIO.reg.field_0x30) { - s16 temp2 = targetAngle - fopAcM_searchPlayerAngleY(this); - if (abs(temp2) < 0x1000) { - if (temp2 < 0) { + cXyz homeDelta = orig.pos - current.pos; + if (homeDelta.abs2XZ() < l_HIO.prm.mMaxHomeDist*l_HIO.prm.mMaxHomeDist) { + s16 angle = targetAngle - fopAcM_searchPlayerAngleY(this); + if (abs(angle) < 0x1000) { + if (angle < 0) { targetAngle -= 0x4000; } else { targetAngle += 0x4000; } } } - if (!cLib_calcTimer(&unk690)) { - unk68F ^= 1; - unk690 = cLib_getRndValue(15, 20); + if (cLib_calcTimer(&mWobbleTimer) == 0) { + mWobbleDir ^= 1; + mWobbleTimer = cLib_getRndValue(15, 20); } - targetAngle += (unk68F ? -0x2000 : 0x2000); + targetAngle += mWobbleDir ? -0x2000 : 0x2000; moveProc(5.0f, 0.5f, targetAngle); } } @@ -436,7 +491,46 @@ BOOL daNh_c::returnAction(void*) { /* 800FAA34-800FABE0 .text execute__6daNh_cFv */ BOOL daNh_c::execute() { - /* Nonmatching */ + playBrkAnm(); + + mGlowAlpha = l_HIO.prm.mDefaultGlowAlpha; + + if (mMaxFallSpeed < speed.y) { + speed.y -= mGravity; + if (speed.y < mMaxFallSpeed) { + speed.y = mMaxFallSpeed; + } + } else if (mMaxFallSpeed > speed.y) { + speed.y += mGravity; + if (speed.y > mMaxFallSpeed) { + speed.y = mMaxFallSpeed; + } + } + + speed.x = speedF * cM_ssin(current.angle.y); + speed.z = speedF * cM_scos(current.angle.y); + + fopAcM_posMove(this, mStts.GetCCMoveP()); + + BGCheck(); + + cXyz pos = current.pos; + pos.y -= 10.0f; + mCyl.SetC(pos); + dComIfG_Ccsp()->Set(&mCyl); + + checkTimer(); + + if (!checkBinCatch()) { + airMove(); + searchPlayer(); + action(NULL); + } + + setBaseMtx(); + mEyePos = mAttentionInfo.mPosition = current.pos; + + return TRUE; } /* 800FABE0-800FACC4 .text initBrkAnm__6daNh_cFb */ @@ -475,17 +569,17 @@ BOOL daNh_c::draw() { if (tevBlock) { GXColorS10* color = tevBlock->getTevColor(1); if (color) { - unk68E = ((color->r + color->g + color->b) / 3) >> 2; + mGlowAlpha = ((color->r + color->g + color->b) / 3) >> 2; } GXColor* kColor = tevBlock->getTevKColor(3); if (kColor) { - kColor->a = unk688; + kColor->a = mAlpha; } } } - dComIfGd_setAlphaModel(0, mMtx, unk68E); + dComIfGd_setAlphaModel(dDlst_alphaModel_c::TYPE_SPHERE, mGlowMtx, mGlowAlpha); return TRUE; } @@ -516,7 +610,10 @@ s32 daNh_Create(fopAc_ac_c* i_this) { return ((daNh_c*)i_this)->create(); } -static actor_method_class l_daNh_Method = { +/* 800FAEAC-800FAEF4 .text __dt__10daNh_HIO_cFv */ +daNh_HIO_c::~daNh_HIO_c() {} + +actor_method_class l_daNh_Method = { (process_method_func)daNh_Create, (process_method_func)daNh_Delete, (process_method_func)daNh_Execute, diff --git a/src/d/actor/d_a_spotbox.cpp b/src/d/actor/d_a_spotbox.cpp index aac6bb6f0..87f9773cb 100644 --- a/src/d/actor/d_a_spotbox.cpp +++ b/src/d/actor/d_a_spotbox.cpp @@ -34,8 +34,8 @@ int daSpotbox_c::create() { } int daSpotbox_c::draw() { - if(g_dComIfG_gameInfo.drawlist.getAlphaModel2()->mCount != 0) { - g_dComIfG_gameInfo.drawlist.setAlphaModel2(0x3, this->mtx, 0x20); + if (dComIfGd_getSpotModelNum() != 0) { + dComIfGd_setSpotModel(dDlst_alphaModel_c::TYPE_CUBE, mtx, 0x20); } return TRUE; } diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 9681373a3..7572f67e8 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -893,8 +893,8 @@ void dNpc_EventCut_c::cutTurnToActorProc() { if(addAngle && pDelDistance) { u16 angle = mpTargetActor->shape_angle.y + addAngle; mPos = mpTargetActor->current.pos; - mPos.x -= pDelDistance * JMASinShort(angle); - mPos.z -= pDelDistance * JMASCosShort(angle); + mPos.x -= pDelDistance * cM_ssin(angle); + mPos.z -= pDelDistance * cM_scos(angle); } else { mPos = mpTargetActor->current.pos + mOffsetPos; @@ -1002,8 +1002,8 @@ void dNpc_EventCut_c::cutMoveToActorProc() { angle = mpTargetActor->shape_angle.y + mAddAngle; } - temp.x -= pDelDistance * JMASinShort(angle); - temp.z -= pDelDistance * JMASCosShort(angle); + temp.x -= pDelDistance * cM_ssin(angle); + temp.z -= pDelDistance * cM_scos(angle); if(mSpeed == 0.0f) { mpActor->current.pos = temp; @@ -1188,7 +1188,7 @@ void dNpc_EventCut_c::cutMoveToPosStart() { void dNpc_EventCut_c::cutMoveToPosProc() { s16 angle = cLib_targetAngleY(&mpActor->current.pos, &mPos); - cXyz temp(pDelDistance * JMASinShort(angle), mPos.y, pDelDistance * JMASCosShort(angle)); + cXyz temp(pDelDistance * cM_ssin(angle), mPos.y, pDelDistance * cM_scos(angle)); if(mSpeed == 0.0f) { mpActor->current.pos = temp; From dffe17b2fe19decbe09848a81eeab6d002c90d2b Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:29:58 -0700 Subject: [PATCH 10/89] add player HIO data (#56) --- src/d/actor/d_a_player_HIO.inc | 2038 ++++++++++++++++++++++++++++++ src/d/actor/d_a_player_dproc.inc | 2 +- src/d/actor/d_a_player_main.cpp | 4 +- src/d/actor/d_a_player_tact.inc | 2 +- 4 files changed, 2043 insertions(+), 3 deletions(-) create mode 100644 src/d/actor/d_a_player_HIO.inc diff --git a/src/d/actor/d_a_player_HIO.inc b/src/d/actor/d_a_player_HIO.inc new file mode 100644 index 000000000..86f5d2310 --- /dev/null +++ b/src/d/actor/d_a_player_HIO.inc @@ -0,0 +1,2038 @@ +/** + * d_a_player_HIO.inc + * + * Parameters for Link's various actions. + * + * This file is not a standalone translation unit and is instead directly + * included into d_a_player_main.cpp. + * + * The original name of this file is known because of an assert contained within + * a function from this file. + */ + +#include "dolphin/types.h" + +class daPy_HIO_basic_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; +}; // Size: 0x20 + +class daPy_HIO_basic_c0 { +public: + static daPy_HIO_basic_c1 const m; +}; + +const daPy_HIO_basic_c1 daPy_HIO_basic_c0::m = { + 1, 160, 1.0f, 50.0f, 2.4f, 700.0f, 0.6f, 5.0f, 0.75f, +}; + +class daPy_HIO_move_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ s16 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; +}; // Size: 0x88 + +class daPy_HIO_move_c0 { +public: + static daPy_HIO_move_c1 const m; +}; + +const daPy_HIO_move_c1 daPy_HIO_move_c0::m = { + 3000, 250, 100, 5, 200, 100, 4, 6, 12, 3.5f, 17.0f, 2.5f, 1.8f, + 0.6f, 0.5f, 0.5f, 1.0f, 0.8f, 1.1f, 0.4f, 0.8f, 1.2f, 2.3f, 0.95f, 1.6f, 0.35f, + 6.0f, 0.5f, 1.0f, 0.87f, 0.6f, 0.0f, 6.0f, 0.8f, 0.85f, 0.7f, 0.5f, 1.3f, +}; + +class daPy_HIO_atnMove_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; +}; // Size: 0x30 + +class daPy_HIO_atnMove_c0 { +public: + static daPy_HIO_atnMove_c1 const m; +}; + +const daPy_HIO_atnMove_c1 daPy_HIO_atnMove_c0::m = { + 3000, 2000, 6, 5.0f, 12.0f, 7.5f, 4.0f, 0.5f, 0.01f, 0.9f, 1.25f, 1.0f, 1.8f, +}; + +class daPy_HIO_atnMoveB_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_atnMoveB_c0 { +public: + static daPy_HIO_atnMoveB_c1 const m; +}; + +const daPy_HIO_atnMoveB_c1 daPy_HIO_atnMoveB_c0::m = { + 3000, 2000, 6, 2.5f, 15.0f, 8.0f, 2.0f, 0.5f, 0.75f, 1.0f, 0.8f, 0.95f, 0.99f, -0.99f, +}; + +class daPy_HIO_turn_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ s16 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; +}; // Size: 0x40 + +class daPy_HIO_turn_c0 { +public: + static daPy_HIO_turn_c1 const m; +}; + +const daPy_HIO_turn_c1 daPy_HIO_turn_c0::m = { + 0x3CDF, 0x1F40, 30, 4, 4096, 512, 28, 62, 62, 0.7f, + 5.0f, 1.0f, 0.0f, 5.0f, 1.1f, 0.0f, 2.0f, 1.0f, 0.0f, 5.0f, +}; + +class daPy_HIO_cutA_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_cutA_c0 { +public: + static daPy_HIO_cutA_c1 const m; +}; + +const daPy_HIO_cutA_c1 daPy_HIO_cutA_c0::m = { + 2, 19, 1.2f, 4.0f, 16.0f, 0.2f, 10.0f, 2.6f, 0.5f, 0.7f, 2.5f, 6.0f, 5.0f, 11.0f, +}; + +class daPy_HIO_cutF_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_cutF_c0 { +public: + static daPy_HIO_cutF_c1 const m; +}; + +const daPy_HIO_cutF_c1 daPy_HIO_cutF_c0::m = { + 2, 19, 1.2f, 4.0f, 17.0f, 0.2f, 8.0f, 0.95f, 0.5f, 0.7f, 2.5f, 6.0f, 5.0f, 12.0f, +}; + +class daPy_HIO_cutR_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_cutR_c0 { +public: + static daPy_HIO_cutR_c1 const m; +}; + +const daPy_HIO_cutR_c1 daPy_HIO_cutR_c0::m = { + 2, 19, 1.2f, 4.0f, 16.0f, 0.2f, 1.0f, 0.95f, 0.5f, 0.7f, 2.5f, 6.0f, 6.0f, 12.0f, +}; + +class daPy_HIO_cutL_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_cutL_c0 { +public: + static daPy_HIO_cutL_c1 const m; +}; + +const daPy_HIO_cutL_c1 daPy_HIO_cutL_c0::m = { + 2, 18, 1.2f, 4.0f, 16.0f, 0.2f, 1.0f, 0.95f, 0.5f, 0.7f, 2.5f, 6.0f, 5.0f, 10.0f, +}; + +class daPy_HIO_cutEA_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; +}; // Size: 0x30 + +class daPy_HIO_cutEA_c0 { +public: + static daPy_HIO_cutEA_c1 const m; +}; + +const daPy_HIO_cutEA_c1 daPy_HIO_cutEA_c0::m = { + 19, 1.0f, 4.0f, 0.2f, 15.0f, 4.0f, 0.5f, 0.7f, 2.0f, 6.0f, 5.0f, 11.0f, +}; + +class daPy_HIO_cutEB_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; +}; // Size: 0x30 + +class daPy_HIO_cutEB_c0 { +public: + static daPy_HIO_cutEB_c1 const m; +}; + +const daPy_HIO_cutEB_c1 daPy_HIO_cutEB_c0::m = { + 19, 0.9f, 4.0f, 0.2f, 7.0f, 1.5f, 0.5f, 0.7f, 2.0f, 6.0f, 5.0f, 11.0f, +}; + +class daPy_HIO_cutExA_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; +}; // Size: 0x20 + +class daPy_HIO_cutExA_c0 { +public: + static daPy_HIO_cutExA_c1 const m; +}; + +const daPy_HIO_cutExA_c1 daPy_HIO_cutExA_c0::m = { + 21, 0, 1, 1.1f, 4.0f, 1.0f, 12.0f, 18.0f, 18.0f, +}; + +class daPy_HIO_cutExB_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; +}; // Size: 0x18 + +class daPy_HIO_cutExB_c0 { +public: + static daPy_HIO_cutExB_c1 const m; +}; + +const daPy_HIO_cutExB_c1 daPy_HIO_cutExB_c0::m = { + 36, 0.9f, 5.0f, 5.0f, 14.0f, 20.0f, +}; + +class daPy_HIO_cutExMJ_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; +}; // Size: 0x28 + +class daPy_HIO_cutExMJ_c0 { +public: + static daPy_HIO_cutExMJ_c1 const m; +}; + +const daPy_HIO_cutExMJ_c1 daPy_HIO_cutExMJ_c0::m = { + 6, 2, 0.9f, 0.0f, 1.0f, 29.0f, -5.0f, -1.7f, 30.0f, 3.0f, 1.0f, +}; + +class daPy_HIO_cutKesa_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; // Size: 0x1C + +class daPy_HIO_cutKesa_c0 { +public: + static daPy_HIO_cutKesa_c1 const m; +}; + +const daPy_HIO_cutKesa_c1 daPy_HIO_cutKesa_c0::m = { + 49, 2, 1.3f, 4.0f, 1.0f, 22.0f, 26.0f, 32.0f, +}; + +class daPy_HIO_cutTurn_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; +}; // Size: 0x78 + +class daPy_HIO_cutTurn_c0 { +public: + static daPy_HIO_cutTurn_c1 const m; +}; + +const daPy_HIO_cutTurn_c1 daPy_HIO_cutTurn_c0::m = { + 21, 1, 1.2f, 2.0f, 5.0f, 21.0f, 0.8f, 0.0f, 5.0f, 0.5f, 0.7f, + 3.0f, 0.0f, 3.0f, 18.5f, 1.0f, 1.5f, 180.0f, 230.0f, 1.0f, 1.3f, 1.5f, + 1.7f, 2.2f, 1.5f, 180.0f, 200.0f, 250.0f, 270.0f, 360.0f, 250.0f, +}; + +class daPy_HIO_cutTurnR_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; +}; // Size: 0x2C + +class daPy_HIO_cutTurnR_c0 { +public: + static daPy_HIO_cutTurnR_c1 const m; +}; + +const daPy_HIO_cutTurnR_c1 daPy_HIO_cutTurnR_c0::m = { + 0, 4, 9, 27379, 1748, 0.8f, 1.0f, 3.0f, 0.8f, 3.0f, 0.8f, 3.0f, 0.95f, +}; + +class daPy_HIO_cutRoll_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; +}; // Size: 0x28 + +class daPy_HIO_cutRoll_c0 { +public: + static daPy_HIO_cutRoll_c1 const m; +}; + +const daPy_HIO_cutRoll_c1 daPy_HIO_cutRoll_c0::m = { + 6, 90, 14000, 60, 1.2f, 4.0f, 1.0f, 30.0f, 1.0f, 1.5f, 180.0f, 230.0f, +}; + +class daPy_HIO_cutJump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; +}; // Size: 0x50 + +class daPy_HIO_cutJump_c0 { +public: + static daPy_HIO_cutJump_c1 const m; +}; + +const daPy_HIO_cutJump_c1 daPy_HIO_cutJump_c0::m = { + 15, 14, 2, 15, 0.74f, 2.0f, 1.0f, 18.0f, 27.0f, -3.0f, 0.8f, + 1.0f, 5.0f, 9.0f, 18.0f, -3.0f, 1.1f, 1.0f, 2.0f, 12.0f, 13.0f, 15.0f, +}; + +class daPy_HIO_cutBoko_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; +}; // Size: 0x84 + +class daPy_HIO_cutBoko_c0 { +public: + static daPy_HIO_cutBoko_c1 const m; +}; + +const daPy_HIO_cutBoko_c1 daPy_HIO_cutBoko_c0::m = { + 0.0f, 0, 34, 42, 13, 11, 8, 1.1f, 0.9f, 1.0f, 27.0f, 0.4f, + 11.0f, 2.6f, 0.5f, 0.8f, 3.0f, 8.0f, 6.0f, 7.0f, 13.0f, 0.9f, 20.0f, 69.0f, + 6.0f, 25.0f, 32.0f, 0.7f, 3.0f, 3.0f, 0.8f, 0.0f, 0.6f, 5.0f, 8.0f, 10.0f, +}; + +class daPy_HIO_cut_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; +}; // Size: 0x6C + +class daPy_HIO_cut_c0 { +public: + static daPy_HIO_cut_c1 const m; +}; + +const daPy_HIO_cut_c1 daPy_HIO_cut_c0::m = { + 14, 15, 12, 18, -1.8f, 1.0f, 1.0f, 0.8f, 0.0f, 3.0f, 1.1f, 0.0f, 6.0f, 0.5f, 2.0f, + 11.0f, 0.0f, 20.0f, 1.5f, 30.0f, 2.5f, 20.0f, 1.7f, 30.0f, 2.0f, 50.0f, 1.7f, 50.0f, 2.0f, +}; + +class daPy_HIO_roll_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; +}; // Size: 0x48 + +class daPy_HIO_roll_c0 { +public: + static daPy_HIO_roll_c1 const m; +}; + +const daPy_HIO_roll_c1 daPy_HIO_roll_c0::m = { + 19, 24, 5000, 1.1f, 0.0f, 17.0f, 2.0f, 1.5f, 0.5f, 5.0f, + 0.7f, 6.0f, 1.0f, 20.0f, 6.0f, 15.0f, 10.0f, 0.4f, 7.0f, +}; + +class daPy_HIO_backJump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_backJump_c0 { +public: + static daPy_HIO_backJump_c1 const m; +}; + +const daPy_HIO_backJump_c1 daPy_HIO_backJump_c0::m = { + 11, 5, 0.8f, 2.0f, 0.0f, 22.5f, 19.0f, -3.0f, 30.0f, 10.0f, 0.8f, 0.0f, 0.0f, 2.0f, +}; + +class daPy_HIO_slip_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; +}; // Size: 0x24 + +class daPy_HIO_slip_c0 { +public: + static daPy_HIO_slip_c1 const m; +}; + +const daPy_HIO_slip_c1 daPy_HIO_slip_c0::m = { + 0.0f, 0.6f, 1.1f, 0.4f, 1.25f, 0.1875f, 0.6f, 1.7f, 2.5f, +}; + +class daPy_HIO_slide_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; +}; // Size: 0x4C + +class daPy_HIO_slide_c0 { +public: + static daPy_HIO_slide_c1 const m; +}; + +const daPy_HIO_slide_c1 daPy_HIO_slide_c0::m = { + 9, 9, 9, 8, 14336, 0.3f, 2.0f, 5.0f, 0.3f, 0.0f, 5.0f, + 0.8f, 2.0f, 6.0f, 5.0f, 1.0f, 2.0f, 6.0f, 5.0f, 30.0f, 3.0f, +}; + +class daPy_HIO_autoJump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; +}; // Size: 0x44 + +class daPy_HIO_autoJump_c0 { +public: + static daPy_HIO_autoJump_c1 const m; +}; + +const daPy_HIO_autoJump_c1 daPy_HIO_autoJump_c0::m = { + 0, 5, 11, 11000, 100, -2.5f, -175.0f, 9.0f, 1.6f, 0.4f, + 0.8f, 1.3f, 3.0f, 1.0f, 1.0f, 0.0f, 20.0f, 0.8f, 7.0f, +}; + +class daPy_HIO_fall_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; +}; // Size: 0x54 + +class daPy_HIO_fall_c0 { +public: + static daPy_HIO_fall_c1 const m; +}; + +const daPy_HIO_fall_c1 daPy_HIO_fall_c0::m = { + 13, 30, 9, 9, 22, 50, 3, 60.0f, 20.0f, 1.0f, 0.8f, 4.0f, + 0.0f, 0.3f, 1.0f, 9.0f, 5.0f, 6.0f, 1.3f, 6.0f, 19.0f, 6.0f, 26.0f, 1.2f, +}; + +class daPy_HIO_swim_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; +}; // Size: 0x80 + +class daPy_HIO_swim_c0 { +public: + static daPy_HIO_swim_c1 const m; +}; + +const daPy_HIO_swim_c1 daPy_HIO_swim_c0::m = { + 24, 2330, 5000, 1200, 17, 18.0f, 1.0f, -50.0f, 0.02f, 2.0f, 0.5f, 90.0f, + 15.0f, 0.7f, 0.0f, 19.0f, 3.0f, 0.0f, 0.5f, 18.0f, 1.0f, 5.0f, 0.6f, 1.1f, + 5.3f, 0.0f, 0.4f, 6.0f, 9.5f, 37.5f, 2.5f, 1.0f, 30.0f, 0.35f, +}; + +class daPy_HIO_b_jump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; +}; // Size: 0x4C + +class daPy_HIO_b_jump_c0 { +public: + static daPy_HIO_b_jump_c1 const m; +}; + +const daPy_HIO_b_jump_c1 daPy_HIO_b_jump_c0::m = { + 256, 0, 8, 3500, 1.0f, 2.0f, 1.0f, 4.0f, 0.0f, 5.0f, -5.0f, + -3.75f, 0.6f, 0.0f, 1.0f, 32.5f, 12.5f, -3.75f, 10.0f, 2.5f, 6.5f, +}; + +class daPy_HIO_b_roll_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; +}; // Size: 0x3C + +class daPy_HIO_b_roll_c0 { +public: + static daPy_HIO_b_roll_c1 const m; +}; + +const daPy_HIO_b_roll_c1 daPy_HIO_b_roll_c0::m = { + 1700, 30, 5, 22, 6, 6144, 0.8f, 4.0f, 5.0f, + 17.0f, 0.5f, 3.0f, 0.0f, 20.0f, 40.0f, -4.0f, -3.5f, 15.0f, +}; + +class daPy_HIO_b_slide_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; +}; // Size: 0x10 + +class daPy_HIO_b_slide_c0 { +public: + static daPy_HIO_b_slide_c1 const m; +}; + +const daPy_HIO_b_slide_c1 daPy_HIO_b_slide_c0::m = { + 42.5f, + 0.5f, + 6.25f, + 2.5f, +}; + +class daPy_HIO_b_verJump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; +}; // Size: 0x44 + +class daPy_HIO_b_verJump_c0 { +public: + static daPy_HIO_b_verJump_c1 const m; +}; + +const daPy_HIO_b_verJump_c1 daPy_HIO_b_verJump_c0::m = { + 5, 19, 17, 0.2f, 2.0f, 6.0f, -9.0f, 70.0f, 1.5f, + 4.0f, 8.0f, -7.0f, -10.0f, 1.0f, 2.0f, 0.0f, 5.5f, 25.0f, +}; + +class daPy_HIO_wall_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; +}; // Size: 0x68 + +class daPy_HIO_wall_c0 { +public: + static daPy_HIO_wall_c1 const m; +}; + +const daPy_HIO_wall_c1 daPy_HIO_wall_c0::m = { + 10, 7, 14, 14, 28, 28, 1.3f, 1.1f, 1.6f, 1.8f, 0.8f, 0.9f, 3.0f, 0.0f, 1.0f, + 1.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 8.5f, 25.0f, 0.9f, 0.9f, 1.0f, 0.98f, +}; + +class daPy_HIO_smallJump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; // Size: 0x1C + +class daPy_HIO_smallJump_c0 { +public: + static daPy_HIO_smallJump_c1 const m; +}; + +const daPy_HIO_smallJump_c1 daPy_HIO_smallJump_c0::m = { + 6, 4, 0.2f, 0.0f, 0.0f, 5.0f, 45.0f, 7.0f, +}; + +class daPy_HIO_wallCatch_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; +}; // Size: 0x58 + +class daPy_HIO_wallCatch_c0 { +public: + static daPy_HIO_wallCatch_c1 const m; +}; + +const daPy_HIO_wallCatch_c1 daPy_HIO_wallCatch_c0::m = { + 5, 7, 24, 13, 7, 75.0f, 110.0f, 130.0f, 170.0f, 0.8f, 2.5f, 0.75f, + 5.0f, 0.0f, 2.0f, 0.0f, 23.0f, 1.0f, 1.0f, 0.8f, 2.0f, 1.0f, 6.0f, 6.0f, +}; + +class daPy_HIO_hang_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_hang_c0 { +public: + static daPy_HIO_hang_c1 const m; +}; + +const daPy_HIO_hang_c1 daPy_HIO_hang_c0::m = { + 21, 13, 0.8f, 2.0f, 10.0f, 2.0f, 0.7f, 1.0f, 13.0f, 8.0f, 0.7f, 1.4f, 1.0f, 1.0f, +}; + +class daPy_HIO_guard_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; +}; // Size: 0x28 + +class daPy_HIO_guard_c0 { +public: + static daPy_HIO_guard_c1 const m; +}; + +const daPy_HIO_guard_c1 daPy_HIO_guard_c0::m = { + 11, 0.85f, 0.0f, 2.0f, 7.5f, 0.02f, 0.5f, 1.125f, 0.3f, 12.5f, +}; + +class daPy_HIO_nockback_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; +}; // Size: 0x3C + +class daPy_HIO_nockback_c0 { +public: + static daPy_HIO_nockback_c1 const m; +}; + +const daPy_HIO_nockback_c1 daPy_HIO_nockback_c0::m = { + 11, 0, 24, 0.9f, 0.0f, 2.0f, 52.0f, 0.02f, 0.5f, 4.9f, 3.0f, 12.5f, 0.8f, 8.0f, 3.0f, 16.0f, +}; + +class daPy_HIO_iceSlip_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; +}; // Size: 0x74 + +class daPy_HIO_iceSlip_c0 { +public: + static daPy_HIO_iceSlip_c1 const m; +}; + +const daPy_HIO_iceSlip_c1 daPy_HIO_iceSlip_c0::m = { + 29, 8000, 36, 36, 36, 36, 9, 0.9f, 0.0f, 2.0f, 12.0f, + 3.0f, 0.7f, 3.0f, 30.0f, 3.0f, 0.8f, 3.0f, 33.0f, 2.0f, 0.7f, 7.0f, + 30.0f, 0.0f, 0.7f, 7.0f, 30.0f, 0.0f, 0.6f, 1.0f, 6.0f, 1.0f, +}; + +class daPy_HIO_damage_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ f32 field_0x6; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; +}; // Size: 0x3C + +class daPy_HIO_damage_c0 { +public: + static daPy_HIO_damage_c1 const m; +}; + +const daPy_HIO_damage_c1 daPy_HIO_damage_c0::m = { + 9, 8000, 9, 0.0f, 13.0f, 0.05f, 0.6f, 0.0f, 0.5f, 1.2f, 0.25f, 1.5f, 12.0f, 0.6f, 0.0f, 1.0f, +}; + +class daPy_HIO_laDamage_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; +}; // Size: 0x98 + +class daPy_HIO_laDamage_c0 { +public: + static daPy_HIO_laDamage_c1 const m; +}; + +const daPy_HIO_laDamage_c1 daPy_HIO_laDamage_c0::m = { + 0, 1300, 36, 36, 36, 36, 19, 2, 2, 2, 0.0f, + 25.0f, -13.0f, 60.0f, 0.7f, 0.0f, 30.0f, 2.0f, 0.8f, 0.0f, 30.0f, 2.0f, + 0.7f, 1.0f, 30.0f, 2.0f, 0.7f, 1.0f, 30.0f, 2.0f, 16.0f, 1.5f, 18.0f, + 1.0f, 1.2f, 0.0f, 1.0f, 1.3f, 0.0f, 1.0f, 1.3f, 0.0f, 1.0f, +}; + +class daPy_HIO_huDamage_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; +}; // Size: 0x98 + +class daPy_HIO_huDamage_c0 { +public: + static daPy_HIO_huDamage_c1 const m; +}; + +const daPy_HIO_huDamage_c1 daPy_HIO_huDamage_c0::m = { + 0, 2000, 36, 36, 36, 36, 19, 2, 2, 2, 0.0f, + 80.0f, -9.0f, 50.0f, 0.6f, 0.0f, 34.0f, 2.0f, 0.6f, 0.0f, 34.0f, 2.0f, + 0.6f, 1.0f, 34.0f, 2.0f, 0.6f, 1.0f, 34.0f, 2.0f, 16.0f, 1.5f, 18.0f, + 1.0f, 1.2f, 0.0f, 1.0f, 1.3f, 0.0f, 1.0f, 1.3f, 0.0f, 1.0f, +}; + +class daPy_HIO_elecDamage_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; +}; // Size: 0xC + +class daPy_HIO_elecDamage_c0 { +public: + static daPy_HIO_elecDamage_c1 const m; +}; + +const daPy_HIO_elecDamage_c1 daPy_HIO_elecDamage_c0::m = { + 20, + 75, + 1.0f, + 0.0f, +}; + +class daPy_HIO_slowJump_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; +}; // Size: 0x3C + +class daPy_HIO_slowJump_c0 { +public: + static daPy_HIO_slowJump_c1 const m; +}; + +const daPy_HIO_slowJump_c1 daPy_HIO_slowJump_c0::m = { + 19, 40, -2.0f, 16.25f, 10.5f, 0.9f, 0.0f, 15.0f, + 5.0f, 2.0f, 0.8f, 0.0f, 5.0f, 25.0f, 100.0f, 6.0f, +}; + +class daPy_HIO_sideStep_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_sideStep_c0 { +public: + static daPy_HIO_sideStep_c1 const m; +}; + +const daPy_HIO_sideStep_c1 daPy_HIO_sideStep_c0::m = { + 256, 6200, 4, 5, 30.0f, 0.3f, 0.0f, 1.0f, -2.4f, 0.85f, 1.0f, 0.0f, 1.5f, 14.0f, 50.0f, +}; + +class daPy_HIO_grab_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ s16 field_0x16; + /* 0x18 */ s16 field_0x18; + /* 0x1A */ s16 field_0x1A; + /* 0x1C */ s16 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ f32 field_0x70; + /* 0x74 */ f32 field_0x74; + /* 0x78 */ f32 field_0x78; + /* 0x7C */ f32 field_0x7C; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; + /* 0x8C */ f32 field_0x8C; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ f32 field_0x98; + /* 0x9C */ f32 field_0x9C; + /* 0xA0 */ f32 field_0xA0; + /* 0xA4 */ f32 field_0xA4; + /* 0xA8 */ f32 field_0xA8; +}; // Size: 0xAC + +class daPy_HIO_grab_c0 { +public: + static daPy_HIO_grab_c1 const m; +}; + +const daPy_HIO_grab_c1 daPy_HIO_grab_c0::m = { + 4, 9, 6, 12, 4, 14, 7, 19, 5, 5, 0, 40, 300, + 40, 12, 0.8f, 0.0f, 1.0f, 0.9f, 0.0f, 9.0f, 1.0f, 1.0f, 0.0f, 1.0f, -0.8f, + 0.0f, 0.0f, 4.0f, 0.8f, 1.0f, 7.0f, 0.0f, -1.1f, 0.0f, 0.0f, 0.0f, 1.0f, 3.0f, + 1.0f, 19.0f, 34.0f, 2.0f, 1.2f, 1.1f, 3.0f, 6.0f, 2.0f, 0.8f, 0.4f, +}; + +class daPy_HIO_ladder_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; +}; // Size: 0x44 + +class daPy_HIO_ladder_c0 { +public: + static daPy_HIO_ladder_c1 const m; +}; + +const daPy_HIO_ladder_c1 daPy_HIO_ladder_c0::m = { + 13, 1.0f, 1.0f, 0.9f, 3.0f, 1.3f, 3.0f, 1.0f, 2.0f, + 1.2f, 0.5f, 0.0f, 1.0f, 0.8f, 0.0f, 0.0f, 0.8f, +}; + +class daPy_HIO_crouch_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; +}; // Size: 0x50 + +class daPy_HIO_crouch_c0 { +public: + static daPy_HIO_crouch_c1 const m; +}; + +const daPy_HIO_crouch_c1 daPy_HIO_crouch_c0::m = { + 8500, 2500, 10000, 9, 32, 7000, 500, 8, 0.8f, 2.0f, 0.8f, 5.0f, + 1.0f, 0.0f, 7.0f, 3.0f, 3.0f, 1.0f, 5.0f, 3.0f, -1.0f, 0.0f, 3.0f, 2.0f, +}; + +class daPy_HIO_pushpull_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; +}; // Size: 0x18 + +class daPy_HIO_pushpull_c0 { +public: + static daPy_HIO_pushpull_c1 const m; +}; + +const daPy_HIO_pushpull_c1 daPy_HIO_pushpull_c0::m = { + 1.0f, 5.0f, 1.0f, 5.0f, 1.0f, 5.0f, +}; + +class daPy_HIO_rope_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; +}; // Size: 0x68 + +class daPy_HIO_rope_c0 { +public: + static daPy_HIO_rope_c1 const m; +}; + +const daPy_HIO_rope_c1 daPy_HIO_rope_c0::m = { + 12000, 12000, 7, 90, 11, 11, 15.0f, 30.0f, 50.0f, 1.0f, 0.0f, 3.0f, 0.5f, 4.0f, 6.0f, + 0.8f, 1.5f, 1.5f, 4.0f, 27.0f, 1.3f, 1.0f, 0.0f, 1.0f, 3.0f, 0.8f, 3.0f, 11.0f, 0.0f, +}; + +class daPy_HIO_boom_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; +}; // Size: 0x30 + +class daPy_HIO_boom_c0 { +public: + static daPy_HIO_boom_c1 const m; +}; + +const daPy_HIO_boom_c1 daPy_HIO_boom_c0::m = { + 10, 11, 1.5f, 2.0f, 3.0f, 10.0f, 7.0f, 0.8f, 5.0f, 1.0f, 1.0f, 0.0f, 11.0f, +}; + +class daPy_HIO_fan_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; +}; // Size: 0x5C + +class daPy_HIO_fan_c0 { +public: + static daPy_HIO_fan_c1 const m; +}; + +const daPy_HIO_fan_c1 daPy_HIO_fan_c0::m = { + 0, 34, 13, 12, 40, 20, 1.0f, 0.0f, 5.0f, 200.0f, 100.0f, 0.5f, 3.0f, + 1.0f, 0.0f, 3.0f, 5.0f, -2.0f, -0.5f, 15.0f, 15.0f, 12.0f, 9.4f, 0.6f, 2.0f, 5.0f, +}; + +class daPy_HIO_tact_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; // Size: 0x1C + +class daPy_HIO_tact_c0 { +public: + static daPy_HIO_tact_c1 const m; +}; + +const daPy_HIO_tact_c1 daPy_HIO_tact_c0::m = { + 0.8f, 6.0f, 0.08f, 4.0f, 1.0f, 1.0f, 1.0f, +}; + +class daPy_HIO_ham_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; +}; // Size: 0x44 + +class daPy_HIO_ham_c0 { +public: + static daPy_HIO_ham_c1 const m; +}; + +const daPy_HIO_ham_c1 daPy_HIO_ham_c0::m = { + 60, 28, 35, 12, 1.2f, 4.0f, 55.0f, 2.0f, 25.0f, 36.0f, + 1.0f, 2.0f, 3.0f, 1.0f, 0.0f, 0.9f, 5.0f, 10.0f, 0.0f, +}; + +class daPy_HIO_boots_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; +}; // Size: 0x14 + +class daPy_HIO_boots_c0 { +public: + static daPy_HIO_boots_c1 const m; +}; + +const daPy_HIO_boots_c1 daPy_HIO_boots_c0::m = { + 19, 150, 1.0f, 0.0f, 19.0f, 5.0f, +}; + +class daPy_HIO_bottle_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ s16 field_0xC; + /* 0x0E */ s16 field_0xE; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 field_0x58; + /* 0x5C */ f32 field_0x5C; + /* 0x60 */ f32 field_0x60; + /* 0x64 */ f32 field_0x64; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6C; +}; // Size: 0x70 + +class daPy_HIO_bottle_c0 { +public: + static daPy_HIO_bottle_c1 const m; +}; + +const daPy_HIO_bottle_c1 daPy_HIO_bottle_c0::m = { + 16, 16, 50, 45, 69, 124, 81, 36, 1.2f, 0.0f, 15.0f, + 0.0f, 1.2f, 0.0f, 15.0f, 0.0f, 1.0f, 0.0f, 4.0f, 0.0f, 2.0f, 0.0f, + 5.0f, 15.0f, 0.0f, 5.0f, 0.0f, 0.0f, 5.0f, 0.9f, 0.0f, 2.0f, +}; + +class daPy_HIO_bow_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; // Size: 0x1C + +class daPy_HIO_bow_c0 { +public: + static daPy_HIO_bow_c1 const m; +}; + +const daPy_HIO_bow_c1 daPy_HIO_bow_c0::m = { + 4, 6, 0.9f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, +}; + +class daPy_HIO_food_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; // Size: 0x1C + +class daPy_HIO_food_c0 { +public: + static daPy_HIO_food_c1 const m; +}; + +const daPy_HIO_food_c1 daPy_HIO_food_c0::m = { + 17, 21, 0.6f, 0.0f, 4.0f, 1.1f, 2.0f, 4.0f, +}; + +class daPy_HIO_item_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; +}; // Size: 0x34 + +class daPy_HIO_item_c0 { +public: + static daPy_HIO_item_c1 const m; +}; + +const daPy_HIO_item_c1 daPy_HIO_item_c0::m = { + 15, 10, 7, 1.0f, 2.0f, 1.0f, 0.7f, 1.0f, 3.0f, 4.0f, 0.8f, 3.0f, 4.0f, 6.0f, +}; + +class daPy_HIO_ship_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; +}; // Size: 0x18 + +class daPy_HIO_ship_c0 { +public: + static daPy_HIO_ship_c1 const m; +}; + +const daPy_HIO_ship_c1 daPy_HIO_ship_c0::m = { + 14336, 2000, 5325, 1.0f, 0.2f, 8.0f, 8.0f, +}; + +class daPy_HIO_restart_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; +}; // Size: 0x18 + +class daPy_HIO_restart_c0 { +public: + static daPy_HIO_restart_c1 const m; +}; + +const daPy_HIO_restart_c1 daPy_HIO_restart_c0::m = { + 1.0f, 5.0f, 80.0f, 1.0f, 0.0f, 2.0f, +}; + +class daPy_HIO_holdup_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0A */ s16 field_0xA; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ f32 field_0x4C; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; +}; // Size: 0x58 + +class daPy_HIO_holdup_c0 { +public: + static daPy_HIO_holdup_c1 const m; +}; + +const daPy_HIO_holdup_c1 daPy_HIO_holdup_c0::m = { + 72, 11, 60, 60, 89, 44, 1.0f, 0.0f, 1.0f, 1.1f, 0.0f, 5.0f, 1.0f, + 0.0f, 5.0f, 1.0f, 0.0f, 5.0f, 1.5f, 2.0f, 10.0f, 10.0f, 1.0f, 0.0f, 5.0f, +}; + +class daPy_HIO_vomit_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ s16 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2C; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3C; +}; // Size: 0x40 + +class daPy_HIO_vomit_c0 { +public: + static daPy_HIO_vomit_c1 const m; +}; + +const daPy_HIO_vomit_c1 daPy_HIO_vomit_c0::m = { + 6, 22000, 9, 7, 9, 0.3f, 1.0f, 10.0f, 28.0f, + 64.5f, 12.725f, 1.0f, 4.0f, 0.0f, 0.5f, 1.0f, 8.0f, 8.0f, +}; + +class daPy_HIO_warp_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; + /* 0x04 */ s16 field_0x4; + /* 0x06 */ s16 field_0x6; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xC; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; +}; // Size: 0x1C + +class daPy_HIO_warp_c0 { +public: + static daPy_HIO_warp_c1 const m; +}; + +const daPy_HIO_warp_c1 daPy_HIO_warp_c0::m = { + 53, 12, 28, 4, 1.2f, 1.6f, 0.5f, 0.1f, 1.35f, +}; diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc index b2a93c45f..03abef5eb 100644 --- a/src/d/actor/d_a_player_dproc.inc +++ b/src/d/actor/d_a_player_dproc.inc @@ -173,7 +173,7 @@ void daPy_lk_c::dProcDead_init_sub2() { } /* 8012F38C-8012F3B8 .text checkGameOverStart__9daPy_lk_cFv */ -void daPy_lk_c::checkGameOverStart() { +BOOL daPy_lk_c::checkGameOverStart() { /* Nonmatching */ } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 9098727f1..f491eeb9e 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -13,6 +13,8 @@ #include "d/d_com_lib_game.h" #include "JSystem/JKernel/JKRHeap.h" +#include "src/d/actor/d_a_player_HIO.inc" + /* 80102E8C-80102EAC .text daPy_createHeap__FP10fopAc_ac_c */ void daPy_createHeap(fopAc_ac_c*) { /* Nonmatching */ @@ -1668,7 +1670,7 @@ void daPy_lk_c::getBokoFlamePos(cXyz*) { #include "src/d/actor/d_a_player_bow.inc" -#include "src/d/actor/d_a_player_hookshot.inc" +#include "src/d/actor/d_a_player_hook.inc" #include "src/d/actor/d_a_player_fan.inc" diff --git a/src/d/actor/d_a_player_tact.inc b/src/d/actor/d_a_player_tact.inc index baf1332a5..1c790fa52 100644 --- a/src/d/actor/d_a_player_tact.inc +++ b/src/d/actor/d_a_player_tact.inc @@ -13,7 +13,7 @@ #include "d/actor/d_a_player_link.h" /* 8014D778-8014D7D4 .text getDayNightParamData__9daPy_lk_cFv */ -void daPy_lk_c::getDayNightParamData() { +u32 daPy_lk_c::getDayNightParamData() { /* Nonmatching */ } From 5023f3aa70d066078c95293f9c447db40025a878 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Mon, 18 Sep 2023 13:52:15 -0700 Subject: [PATCH 11/89] m_Do_printf (#53) --- include/dolphin/os/OS.h | 11 --- include/m_Do/m_Do_printf.h | 22 +++++ src/DynamicLink.cpp | 2 +- src/d/d_resorce.cpp | 2 +- src/m_Do/m_Do_hostIO.cpp | 2 +- src/m_Do/m_Do_machine.cpp | 2 +- src/m_Do/m_Do_main.cpp | 2 +- src/m_Do/m_Do_printf.cpp | 164 ++++++++++++++++++++++++++++++------- 8 files changed, 163 insertions(+), 44 deletions(-) create mode 100644 include/m_Do/m_Do_printf.h diff --git a/include/dolphin/os/OS.h b/include/dolphin/os/OS.h index 21bbc4979..d57e44d5e 100644 --- a/include/dolphin/os/OS.h +++ b/include/dolphin/os/OS.h @@ -78,20 +78,9 @@ BOOL OSIsThreadSuspended(OSThread* thread); u32 OSGetConsoleType(void); -void OSAttention(const char* msg, ...); void OSPanic(const char* file, s32 line, const char* fmt, ...); void OSReport(const char* fmt, ...); -void OSReport_Error(const char* fmt, ...); -void OSReport_FatalError(const char* fmt, ...); -void OSReport_System(const char* fmt, ...); -void OSReport_Warning(const char* fmt, ...); -void OSReportDisable(void); -void OSReportEnable(void); -void OSReportForceEnableOff(void); -void OSReportForceEnableOn(void); void OSVReport(const char* format, va_list list); -void OSVAttention(const char* fmt, va_list args); -void OSReportInit(void); extern u8 __OSReport_disable; extern u8 __OSReport_Error_disable; diff --git a/include/m_Do/m_Do_printf.h b/include/m_Do/m_Do_printf.h new file mode 100644 index 000000000..e92986917 --- /dev/null +++ b/include/m_Do/m_Do_printf.h @@ -0,0 +1,22 @@ +#ifndef M_DO_M_DO_PRINTF_H +#define M_DO_M_DO_PRINTF_H + +#include "Runtime.PPCEABI.H/__va_arg.h" +#include "m_Do/m_Do_main.h" + +extern "C" { + void OSReportDisable(); + void OSReportEnable(); + void OSReportForceEnableOn(); + void OSReportForceEnableOff(); + void OSVReport(const char* format, va_list list); + void OSReport(const char* fmt, ...); + void OSReport_FatalError(const char* fmt, ...); + void OSReport_Error(const char* fmt, ...); + void OSReport_Warning(const char* fmt, ...); + void OSPanic(const char* file, s32 line, const char* fmt, ...); +} + +void OSReportInit(); + +#endif /* M_DO_M_DO_PRINTF_H */ diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index a9d3cd5bb..2402654b0 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -14,7 +14,7 @@ #include "REL/executor.h" #include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_ext.h" -#include "dolphin/os/OS.h" +#include "m_Do/m_Do_printf.h" DynamicModuleControlBase* DynamicModuleControlBase::mFirst; DynamicModuleControlBase* DynamicModuleControlBase::mLast; diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp index f28564500..be3cd5f49 100644 --- a/src/d/d_resorce.cpp +++ b/src/d/d_resorce.cpp @@ -4,7 +4,7 @@ // #include "d_resorce.h" -#include "dolphin/types.h" +#include "m_Do/m_Do_printf.h" /* 8006D804-8006D824 .text __ct__11dRes_info_cFv */ dRes_info_c::dRes_info_c() diff --git a/src/m_Do/m_Do_hostIO.cpp b/src/m_Do/m_Do_hostIO.cpp index cdc0feb12..97087fe58 100644 --- a/src/m_Do/m_Do_hostIO.cpp +++ b/src/m_Do/m_Do_hostIO.cpp @@ -4,8 +4,8 @@ // #include "m_Do/m_Do_hostIO.h" -#include "dolphin/os/OS.h" #include "MSL_C/string.h" +#include "m_Do/m_Do_printf.h" mDoHIO_root_c mDoHIO_root; diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 8b6567a61..fc2e7e542 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -20,7 +20,6 @@ #include "SSystem/SComponent/c_math.h" #include "dolphin/base/PPCArch.h" #include "dolphin/gx/GXStruct.h" -#include "dolphin/os/OS.h" #include "dolphin/vi/vi.h" #include "m_Do/m_Do_DVDError.h" #include "m_do/m_Do_MemCard.h" @@ -29,6 +28,7 @@ #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_machine_exception.h" #include "m_Do/m_Do_main.h" +#include "m_Do/m_Do_printf.h" namespace mDoMch { static u8 mDebugFill; diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 6d23c1655..5a251f01d 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -15,7 +15,6 @@ #include "MSL_C/string.h" #include "c/c_dylink.h" #include "d/d_com_inf_game.h" -#include "dolphin/os/OS.h" #include "f_ap/f_ap_game.h" #include "m_Do/m_Do_MemCard.h" #include "m_Do/m_Do_Reset.h" @@ -24,6 +23,7 @@ #include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" +#include "m_Do/m_Do_printf.h" class JUTGamePad; diff --git a/src/m_Do/m_Do_printf.cpp b/src/m_Do/m_Do_printf.cpp index 760c24463..ddaa62e4d 100644 --- a/src/m_Do/m_Do_printf.cpp +++ b/src/m_Do/m_Do_printf.cpp @@ -4,79 +4,187 @@ // #include "m_Do/m_Do_printf.h" -#include "dolphin/types.h" +#include "MSL_C/stdio.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/os/OS.h" + +u8 __OSReport_disable; +u8 __OSReport_Error_disable; +u8 __OSReport_Warning_disable; +u8 __OSReport_enable; /* 800065DC-80006640 .text OSGetCallerPC */ -void OSGetCallerPC { - /* Nonmatching */ +extern "C" void* OSGetCallerPC(int param_0) { + u32* stack = (u32*)OSGetStackPointer(); + for (u32 i = 0; i <= param_0; i++) { + stack = (u32*)stack[0]; + if (stack == 0 || u32(stack) == 0xffffffff) { + return NULL; + } + } + return (void*)stack[1]; } /* 80006640-800066B0 .text OSGetActiveThreadID */ -void OSGetActiveThreadID { - /* Nonmatching */ +extern "C" int OSGetActiveThreadID(OSThread* thread) { + OSThread* r31; + int id = -1; + BOOL enable = OSDisableInterrupts(); + for (r31 = OS_THREAD_QUEUE.head; r31; r31 = r31->active_threads_link.next, id++) { + if (r31 == thread) { + break; + } + } + OSRestoreInterrupts(enable); + return r31 ? id : -1; } /* 800066B0-80006770 .text search_partial_address */ -void search_partial_address { +extern "C" int search_partial_address(void* param_0, int* param_1, int* param_2, int* param_3, int* param_4) { /* Nonmatching */ } /* 80006770-800067D0 .text convert_partial_address */ -void convert_partial_address { +extern "C" int convert_partial_address(void* param_0) { /* Nonmatching */ } /* 800067D0-800067DC .text OSReportDisable */ -void OSReportDisable { - /* Nonmatching */ +void OSReportDisable() { + __OSReport_disable = true; } /* 800067DC-800067E8 .text OSReportEnable */ -void OSReportEnable { - /* Nonmatching */ +void OSReportEnable() { + __OSReport_disable = false; } /* 800067E8-800067F4 .text OSReportForceEnableOn */ -void OSReportForceEnableOn { - /* Nonmatching */ +void OSReportForceEnableOn() { + __OSReport_enable = true; } /* 800067F4-80006800 .text OSReportForceEnableOff */ -void OSReportForceEnableOff { - /* Nonmatching */ +void OSReportForceEnableOff() { + __OSReport_enable = false; } +static OSThread* __OSReport_MonopolyThread; +static u8 print_threadID; +static u8 print_callerPC; +static u8 print_callerPCLevel = 3; +static u32 print_counts; +static u32 print_errors; +static u32 print_warings; +static bool print_initialized; + /* 80006800-80006818 .text OSReportInit__Fv */ void OSReportInit() { - /* Nonmatching */ + if (print_initialized) { + return; + } + print_initialized = true; } /* 80006818-80006950 .text OSVReport */ -void OSVReport { - /* Nonmatching */ +void OSVReport(const char* fmt, va_list args) { + if (!print_initialized) { + OSReportInit(); + } + if (__OSReport_enable || !__OSReport_disable) { + OSThread* currentThread = OSGetCurrentThread(); + if (currentThread && currentThread->state != OS_THREAD_STATE_RUNNING) { + currentThread = NULL; + } + if (__OSReport_MonopolyThread == NULL || __OSReport_MonopolyThread == currentThread) { + if (print_threadID) { + printf("[%x]", OSGetActiveThreadID(currentThread)); + } + if (print_callerPC) { + printf("[PC:"); + for (u32 i = 3; i <= print_callerPCLevel; i++) { + printf(" %08x", convert_partial_address(OSGetCallerPC(i))); + } + printf("]"); + } + vprintf(fmt, args); + print_counts++; + } + } } /* 80006950-800069D0 .text OSReport */ -void OSReport { - /* Nonmatching */ +void OSReport(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + OSVReport(fmt, args); + va_end(args); } /* 800069D0-80006A9C .text OSReport_FatalError */ -void OSReport_FatalError { - /* Nonmatching */ +void OSReport_FatalError(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + OSReportForceEnableOn(); + OSReport("\x1B[41;37m***** FATAL ERROR *****\n"); + OSVReport(fmt, args); + OSReport("***** FATAL ERROR *****\n\x1B[m"); + OSReportForceEnableOff(); + print_errors++; + + va_end(args); } /* 80006A9C-80006B74 .text OSReport_Error */ -void OSReport_Error { - /* Nonmatching */ +void OSReport_Error(const char* fmt, ...) { + print_errors++; + if (!__OSReport_Error_disable) { + va_list args; + va_start(args, fmt); + OSReportForceEnableOn(); + printf("\x1B[41;37m"); + OSVReport(fmt, args); + printf("\x1B[m"); + OSReportForceEnableOff(); + va_end(args); + } } /* 80006B74-80006C4C .text OSReport_Warning */ -void OSReport_Warning { - /* Nonmatching */ +void OSReport_Warning(const char* fmt, ...) { + print_warings++; + if (!__OSReport_Warning_disable) { + va_list args; + va_start(args, fmt); + OSReportForceEnableOn(); + OSReport("\x1B[43;30m"); + OSVReport(fmt, args); + OSReport("\x1B[m"); + OSReportForceEnableOff(); + va_end(args); + } } /* 80006C4C-80006D84 .text OSPanic */ -void OSPanic { - /* Nonmatching */ +void OSPanic(const char* file, s32 line, const char* fmt, ...) { + va_list args; + u32 i; + u32* p; + u32* tmp; + + OSDisableInterrupts(); + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + OSReport(" in \"%s\" on line %d.\n", file, line); + + OSReport("\nAddress: Back Chain LR Save\n"); + for (i = 0, p = (u32*)OSGetStackPointer(); p && (u32)p != 0xFFFFFFFF && i++ < 16; p = (u32*)*p) { + OSReport("0x%08x: 0x%08x 0x%08x\n", p, p[0], p[1]); + } + + tmp = (u32*)0x1234567; // ?????? + *tmp = 0x1234567; + PPCHalt(); } From 6fd615070d33153c7665a2c4aefae0f921d17951 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 19 Sep 2023 06:38:20 -0400 Subject: [PATCH 12/89] Added more JParticle headers (#59) --- include/JSystem/JParticle/JPADraw.h | 80 +++++++++++++++++ include/JSystem/JParticle/JPAEmitter.h | 113 +++++++++++++++++++++++++ include/JSystem/JParticle/JPAField.h | 23 +++++ include/JSystem/JParticle/JPAMath.h | 16 ++++ include/d/d_com_inf_game.h | 18 +++- include/d/d_particle.h | 60 ++++++++++++- include/d/d_save.h | 6 +- 7 files changed, 310 insertions(+), 6 deletions(-) create mode 100644 include/JSystem/JParticle/JPADraw.h create mode 100644 include/JSystem/JParticle/JPAEmitter.h create mode 100644 include/JSystem/JParticle/JPAField.h create mode 100644 include/JSystem/JParticle/JPAMath.h diff --git a/include/JSystem/JParticle/JPADraw.h b/include/JSystem/JParticle/JPADraw.h new file mode 100644 index 000000000..505b8566d --- /dev/null +++ b/include/JSystem/JParticle/JPADraw.h @@ -0,0 +1,80 @@ +#ifndef JPADRAW_H +#define JPADRAW_H + +#include "dolphin/types.h" +#include "dolphin/gx/GXStruct.h" +#include "dolphin/gx/GXEnum.h" +#include "JSystem/JParticle/JPAParticle.h" + +class JPABaseShapeArc; +class JPAExtraShapeArc; +class JPASweepShapeArc; +class JPAExTexShapeArc; +class JPATextureResource; + +class JPADraw; +class JPADrawExecEmitterVisitor; +class JPADrawExecParticleVisitor; + +class JPADrawContext { + /* 0x00 */ JPABaseEmitter* mpBaseEmitter; + /* 0x04 */ JPABaseShapeArc* mpBaseArc; + /* 0x08 */ JPAExtraShapeArc* mpExtraArc; + /* 0x0C */ JPASweepShapeArc* mpSweepArc; + /* 0x10 */ JPAExTexShapeArc* mpExTexShape; + /* 0x14 */ JPADraw* mpDraw; + /* 0x18 */ JSUPtrList* mpActiveParticles; + /* 0x1C */ JPATextureResource* mpTextureResource; + /* 0x20 */ s16* mpTexIdxArray; +}; + +class JPADraw { +public: + enum JPADrawVisitorDefFlags {}; + + void initialize(JPABaseEmitter*, JPATextureResource*); + void draw(float(*)[4]); + void calc(); + void calcParticle(JPABaseParticle*); + void calcChild(JPABaseParticle*); + void initParticle(JPABaseParticle*); + void initChild(JPABaseParticle*, JPABaseParticle*); + void loadTexture(unsigned char, _GXTexMapID); + void setDrawExecVisitorsBeforeCB(const JPADraw::JPADrawVisitorDefFlags&); + void setDrawExecVisitorsAfterCB(const JPADraw::JPADrawVisitorDefFlags&); + void setDrawCalcVisitors(const JPADraw::JPADrawVisitorDefFlags&); + void setParticleClipBoard(); + void setChildClipBoard(); + void drawParticle(); + void drawChild(); + void zDraw(); + void zDrawParticle(); + void zDrawChild(); + void loadYBBMtx(float(*)[4]); + + /* 0x00 */ JPADrawExecEmitterVisitor* mpExecEmtrVis[1]; + /* 0x04 */ JPADrawExecEmitterVisitor* mpExecEmtrPVis[5]; + /* 0x18 */ JPADrawExecEmitterVisitor* mpExecEmtrCVis[3]; + /* 0x24 */ JPADrawExecParticleVisitor* mpCalcEmtrVis[4]; + /* 0x34 */ JPADrawExecParticleVisitor* mpExecPtclVis[5]; + /* 0x48 */ JPADrawExecParticleVisitor* mpCalcPtclVis[10]; + /* 0x70 */ JPADrawExecParticleVisitor* mpExecChldVis[4]; + /* 0x80 */ JPADrawExecParticleVisitor* mpCalcChldVis[2]; + /* 0x88 */ u8 mExecEmtrVisNum; + /* 0x89 */ u8 mExecEmtrPVisNum; + /* 0x8A */ u8 mExecEmtrCVisNum; + /* 0x8B */ u8 mCalcEmtrVisNum; + /* 0x8C */ u8 mExecPtclVisNum; + /* 0x8D */ u8 mCalcPtclVisNum; + /* 0x8E */ u8 mExecChldVisNum; + /* 0x8F */ u8 mCalcChldVisNum; + /* 0x90 */ JPADrawContext mDrawContext; + /* 0xB4 */ f32 mScaleOut; + /* 0xB8 */ _GXColor mPrmColor; + /* 0xBC */ _GXColor mEnvColor; + /* 0xC0 */ s16 mTexIdx; + /* 0xC2 */ u8 field_0xc2; + /* 0xC3 */ u8 field_0xC3[0xC4 - 0xC3]; +}; + +#endif /* JPADRAW_H */ diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h new file mode 100644 index 000000000..2d95efb20 --- /dev/null +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -0,0 +1,113 @@ +#ifndef JPAEMITTER_H +#define JPAEMITTER_H + +#include "JSystem/JParticle/JPADraw.h" +#include "JSystem/JParticle/JPAField.h" +#include "JSystem/JParticle/JPAMath.h" +#include "JSystem/JSupport/JSUList.h" +#include "JSystem/JMath/random.h" +#include "JSystem/JGeometry.h" +#include "SSystem/SComponent/c_xyz.h" +#include "SSystem/SComponent/c_sxyz.h" +#include "dolphin/gx/GXStruct.h" +#include "dolphin/mtx/mtx.h" + +class JPACallBackBase; +class JPACallBackBase2; +class JPADataBlockLinkInfo; + +class JPABaseEmitter { +public: + typedef void (JPABaseEmitter::*VolumeFunc)(); + + void calcVolumePoint(); + void calcVolumeLine(); + void calcVolumeCircle(); + void calcVolumeCube(); + void calcVolumeSphere(); + void calcVolumeCylinder(); + void calcVolumeTorus(); + void create(JPADataBlockLinkInfo*); + void calcEmitterInfo(); + void calc(); + void calcCreatePtcls(); + void createChildren(JPABaseParticle*); + void createParticle(); + void calcParticle(); + void calcChild(); + void calcKey(); + void deleteParticle(JPABaseParticle*, JSUList*); + void deleteAllParticle(); + void getPtclFromVacList(); + void doStartFrameProcess(); + void doTerminationProcess(); + void calcEmitterGlobalPosition(JGeometry::TVec3&); + void calcgReRDirection(); + void getPivotX(); + void getPivotY(); + + u8 getGlobalAlpha() { return mGlobalPrmColor.a; } + void setGlobalAlpha(u8 alpha) { mGlobalPrmColor.a = alpha; } + void setGlobalRTMatrix(MtxP mtx) { + JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); + } + + /* 0x000 */ VolumeFunc mVolumeFunc; + /* 0x00C */ cXyz mEmitterScale; + /* 0x018 */ cXyz mEmitterTranslation; + /* 0x024 */ csXyz mEmitterRot; + /* 0x02A */ u8 mVolumeType; + /* 0x02B */ u8 mRateStep; + /* 0x02C */ cXyz mEmitterDir; + /* 0x038 */ f32 mRate; + /* 0x03C */ f32 mRateRndm; + /* 0x040 */ f32 mAccel; + /* 0x044 */ f32 mAccelRndm; + /* 0x048 */ f32 mAirResist; + /* 0x04C */ f32 mAirResistRndm; + /* 0x050 */ f32 mMoment; + /* 0x054 */ f32 mMomentRndm; + /* 0x058 */ f32 mLifeTimeRndm; + /* 0x05C */ f32 mSpread; + /* 0x060 */ s32 mMaxFrame; + /* 0x064 */ s16 mLifeTime; + /* 0x066 */ s16 mStartFrame; + /* 0x068 */ s16 mVolumeSize; + /* 0x06A */ s16 mDivNumber; + /* 0x06C */ f32 mInitialVelOmni; + /* 0x070 */ f32 mInitialVelAxis; + /* 0x074 */ f32 mInitialVelDir; + /* 0x078 */ f32 mInitialVelRndm; + /* 0x07C */ f32 mInitialVelRatio; + /* 0x080 */ f32 mVolumeSweep; + /* 0x084 */ f32 mVolumeMinRad; + /* 0x088 */ s32 mDataFlag; + /* 0x08C */ s32 mUseKeyFlag; + /* 0x090 */ JSUPtrLink mLink; + /* 0x0A0 */ JPADraw mDraw; + /* 0x164 */ f32 mTick; + /* 0x168 */ f32 mTime; + /* 0x16C */ JPAFieldManager mFieldManager; + /* 0x17C */ JSUPtrList mActiveParticles; + /* 0x188 */ JSUPtrList mChildParticles; + /* 0x194 */ JSUPtrList* mpPtclVacList; + /* 0x198 */ JPADataBlockLinkInfo* mpDataLinkInfo; + /* 0x19C */ JPACallBackBase* mpEmitterCallBack; + /* 0x1A0 */ JPACallBackBase2* mpParticleCallBack; + /* 0x1A4 */ JMath::TRandom_fast_ mRandomSeed; + /* 0x1A8 */ Mtx mGlobalRotation; + /* 0x1D8 */ JGeometry::TVec3 mGlobalScale; + /* 0x1E4 */ JGeometry::TVec3 mGlobalTranslation; + /* 0x1F0 */ JGeometry::TVec3 mGlobalScale2D; + /* 0x1FC */ _GXColor mGlobalPrmColor; + /* 0x200 */ _GXColor mGlobalEnvColor; + /* 0x204 */ f32 mEmitCount; + /* 0x208 */ f32 mRateStepTimer; + /* 0x20C */ u32 mFlags; + /* 0x210 */ u32 mUserData; + /* 0x214 */ u8 mGroupID; + /* 0x215 */ u8 mResMgrID; + /* 0x216 */ u8 field_0x216[0x218 - 0x216]; +}; + +#endif /* JPAEMITTER_H */ diff --git a/include/JSystem/JParticle/JPAField.h b/include/JSystem/JParticle/JPAField.h new file mode 100644 index 000000000..12e5d612b --- /dev/null +++ b/include/JSystem/JParticle/JPAField.h @@ -0,0 +1,23 @@ +#ifndef JPAFIELD_H +#define JPAFIELD_H + +#include "JSystem/JParticle/JPAParticle.h" + +class JPADataBlockLinkInfo; +class JPAEmitterInfo; +class JPAFieldData; + +class JPAFieldManager { +public: + void initField(JPADataBlockLinkInfo*, JPAEmitterInfo*); + void init(JPABaseParticle*); + void preCalc(); + void calc(JPABaseParticle*); + void deleteField(JPAFieldData*); + void deleteAllField(); + + /* 0x00 */ JSUPtrList mList; + /* 0x0C */ JSUPtrList* field_0x0c; +}; + +#endif /* JPAFIELD_H */ diff --git a/include/JSystem/JParticle/JPAMath.h b/include/JSystem/JParticle/JPAMath.h new file mode 100644 index 000000000..93bf3b3f8 --- /dev/null +++ b/include/JSystem/JParticle/JPAMath.h @@ -0,0 +1,16 @@ +#ifndef JPAMATH_H +#define JPAMATH_H + +#include "JSystem/JGeometry.h" +#include "dolphin/types.h" + +void JPAGetYZRotateMtx(short, short, float(*)[4]); +void JPAGetXYZRotateMtx(short, short, short, float(*)[4]); +void JPAGetDirMtx(const JGeometry::TVec3&, float(*)[4]); +void JPASetSVecfromMtx(float(*)[4], JGeometry::TVec3&); +void JPASetRMtxTVecfromMtx(float(*)[4], float(*)[4], JGeometry::TVec3&); +void JPASetRMtxSTVecfromMtx(float(*)[4], float(*)[4], JGeometry::TVec3&, JGeometry::TVec3&); +void JPAGetKeyFrameValue(float, unsigned short, const float*); +void JPAGetUnitVec(short, short, JGeometry::TVec3&); + +#endif /* JPAMATH_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index f5d27db73..64f0054fb 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -405,6 +405,10 @@ inline u8 dComIfGs_getWalletSize() { return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getWalletSize(); } +inline u8 dComIfGs_getMagic() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getMagic(); +} + inline u8 dComIfGs_getItem(int param_0) { return g_dComIfG_gameInfo.save.getPlayer().getItem().getItem(param_0); } @@ -1101,8 +1105,8 @@ inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, co const GXColor* pPrmColor, const GXColor* pEnvColor, const cXyz* pScale2D) { dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); - return pParticle->set(0, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, - pEnvColor, pScale2D); + return pParticle->setNormal(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); } inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, const csXyz* angle, @@ -1115,6 +1119,16 @@ inline void dComIfGp_particle_setStripes(u16 particleID, cXyz* pos, csXyz* angle pParticle->setNormalStripes(particleID, pos, angle, scale, param_4, param_5); } +inline JPABaseEmitter* dComIfGp_particle_setToon(u16 particleID, const cXyz* pos, + const csXyz* angle, const cXyz* scale, u8 alpha, + dPa_levelEcallBack* pCallBack, s8 setupInfo, + const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + return pParticle->setToon(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); +} + inline void dComIfGp_particle_calc3D() { g_dComIfG_gameInfo.play.getParticle()->calc3D(); } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index a847e869f..5d3713edf 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -4,6 +4,7 @@ #include "JSystem/J3DGraphBase/J3DVertex.h" #include "JSystem/JGeometry.h" #include "JSystem/JParticle/JPAParticle.h" +#include "JSystem/JParticle/JPAEmitter.h" #include "f_pc/f_pc_node.h" class mDoDvdThd_toMainRam_c; @@ -14,6 +15,7 @@ class JPADrawInfo; class JKRHeap; class JPABaseEmitter; class JPAEmitterManager; +class J3DModelData; struct csXyz; class dPa_simpleData_c { @@ -27,11 +29,54 @@ public: /* 0x13 */ u8 mbAffectedByWind; }; -class dPa_levelEcallBack { +class JPACallBackBase { +public: + JPACallBackBase(); + virtual ~JPACallBackBase(); + + virtual void init(JPABaseEmitter*); + virtual void execute(JPABaseEmitter*); + virtual void executeAfter(JPABaseEmitter*); + virtual void draw(JPABaseEmitter*); +}; + +class dPa_levelEcallBack : public JPACallBackBase { public: virtual ~dPa_levelEcallBack() {} }; +class dPa_followEcallBack : public dPa_levelEcallBack { +public: + virtual ~dPa_followEcallBack(); + + virtual void execute(JPABaseEmitter*); + virtual void draw(JPABaseEmitter*); + virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + virtual void end(); + + JPABaseEmitter* getEmitter() { return mpEmitter; } + + /* 0x04 */ JPABaseEmitter* mpEmitter; + /* 0x08 */ u8 field_0x08[0x10 - 0x08]; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u8 field_0x12; + /* 0x13 */ u8 field_0x13; +}; + +STATIC_ASSERT(sizeof(dPa_followEcallBack) == 0x14); + +class dPa_smokeEcallBack : dPa_followEcallBack { +public: + /* 0x14 */ s8 field_0x14; + /* 0x15 */ u8 field_0x15; + /* 0x16 */ _GXColor field_0x16; + /* 0x1A */ u8 field_0x1A[0x1C - 0x1A]; + /* 0x1C */ dKy_tevstr_c* mTevstr; +}; + +STATIC_ASSERT(sizeof(dPa_smokeEcallBack) == 0x20); + class dPa_simpleEcallBack { public: dPa_simpleEcallBack(); @@ -200,6 +245,19 @@ public: void setSimple(u16, cXyz const*, u8, GXColor const&, GXColor const&, int); void getSimple(u16); + JPABaseEmitter* setNormal(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, + s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + return set(0, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + } + JPABaseEmitter* setToon(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, + s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + return set(1, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + } + void drawModelParticle() { mModelCtrl->draw(); } /* 0x0000 */ JKRHeap* mpHeap; diff --git a/include/d/d_save.h b/include/d/d_save.h index ba742e81c..22cffd4d6 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -8,9 +8,9 @@ class dSv_player_status_a_c { public: /* 800589A8 */ void init(); - u8 getSelectItemIndex(int i_no) const { return mSelectItem[i_no]; } - u8 getSelectEquip(int i_no) const { return mSelectEquip[i_no]; } - u8 getWalletSize() const { return mWalletSize; } + u8 getSelectEquip(int i_no) { return mSelectEquip[i_no]; } + u8 getWalletSize() { return mWalletSize; } + u8 getMagic() { return mMagic; } /* 0x00 */ u16 mMaxLife; /* 0x02 */ u16 mLife; From 0a9745477ff163cc11e82cafcac5baff6610454c Mon Sep 17 00:00:00 2001 From: Kristopher Early <1191258+MrPolymorph@users.noreply.github.com> Date: Wed, 20 Sep 2023 00:44:03 +0100 Subject: [PATCH 13/89] [ACTOR] d_a_rectangle OK (#58) * Update d_a_rectangle.cpp * Update d_a_rectangle.cpp * parking * 100% match * fixing this return type as it cant really be a bool * this isn't padding, its the size of fopAc_ac_c * formatting --- configure.py | 2 +- src/d/actor/d_a_rectangle.cpp | 57 +++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/configure.py b/configure.py index 27d405964..fe08176ca 100644 --- a/configure.py +++ b/configure.py @@ -1284,7 +1284,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_pirate_flag"), ActorRel(NonMatching, "d_a_race_item"), ActorRel(NonMatching, "d_a_rd"), - ActorRel(NonMatching, "d_a_rectangle"), + ActorRel(Matching, "d_a_rectangle"), ActorRel(NonMatching, "d_a_salvage"), ActorRel(NonMatching, "d_a_sbox"), ActorRel(NonMatching, "d_a_sk"), diff --git a/src/d/actor/d_a_rectangle.cpp b/src/d/actor/d_a_rectangle.cpp index 89806943e..0da36052e 100644 --- a/src/d/actor/d_a_rectangle.cpp +++ b/src/d/actor/d_a_rectangle.cpp @@ -1,33 +1,58 @@ -// -// Generated by dtk -// Translation Unit: d_a_rectangle.cpp -// - -#include "d_a_rectangle.h" +/** + * d_a_rectangle.cpp + */ +#include "f_op/f_op_actor.h" +#include "d/d_procname.h" #include "dolphin/types.h" +struct RECTANGLE_class : fopAc_ac_c {}; + /* 00000078-00000080 .text daRct_Draw__FP15RECTANGLE_class */ -void daRct_Draw(RECTANGLE_class*) { - /* Nonmatching */ +static BOOL daRct_Draw(RECTANGLE_class*) { + return true; } /* 00000080-00000088 .text daRct_Execute__FP15RECTANGLE_class */ -void daRct_Execute(RECTANGLE_class*) { - /* Nonmatching */ +static BOOL daRct_Execute(RECTANGLE_class*) { + return true; } /* 00000088-00000090 .text daRct_IsDelete__FP15RECTANGLE_class */ -void daRct_IsDelete(RECTANGLE_class*) { - /* Nonmatching */ +static BOOL daRct_IsDelete(RECTANGLE_class*) { + return true; } /* 00000090-00000098 .text daRct_Delete__FP15RECTANGLE_class */ -void daRct_Delete(RECTANGLE_class*) { - /* Nonmatching */ +static BOOL daRct_Delete(RECTANGLE_class*) { + return true; } /* 00000098-000000A0 .text daRct_Create__FP10fopAc_ac_c */ -void daRct_Create(fopAc_ac_c*) { - /* Nonmatching */ +static int daRct_Create(fopAc_ac_c*) { + return 0x4; } +static actor_method_class l_daRct_Method = { + (process_method_func)daRct_Create, + (process_method_func)daRct_Delete, + (process_method_func)daRct_Execute, + (process_method_func)daRct_IsDelete, + (process_method_func)daRct_Draw, +}; + +extern actor_process_profile_definition g_profile_RECTANGLE = { + fpcLy_CURRENT_e, + 7, + fpcLy_CURRENT_e, + PROC_RECTANGLE, + &g_fpcLf_Method.mBase, + sizeof(RECTANGLE_class), + 0, + 0, + &g_fopAc_Method.base, + 0x9F, + &l_daRct_Method, + 0x00040000, + fopAc_ACTOR_e, + fopAc_CULLBOX_0_e, +}; From 853e5c7fbad5025a9059dfc9cadb846fc0c545eb Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:46:06 -0700 Subject: [PATCH 14/89] most of d_kankyo done (#61) * most of d_kankyo done * some kankyo fixes --- include/JAZelAudio/JAIZelBasic.h | 105 +- include/JSystem/J3DGraphBase/J3DMatBlock.h | 23 +- include/JSystem/J3DGraphBase/J3DStruct.h | 21 +- include/MSL_C/math.h | 3 + include/d/d_com_inf_game.h | 61 +- include/d/d_drawlist.h | 1 - include/d/d_event.h | 9 +- include/d/d_kankyo.h | 353 ++- include/d/d_kankyo_data.h | 21 + include/d/d_kankyo_rain.h | 1 + include/d/d_kankyo_wether.h | 9 + include/d/d_s_play.h | 2 + include/d/d_save.h | 11 +- include/d/d_stage.h | 21 +- include/m_Do/m_Do_audio.h | 22 +- src/d/actor/d_a_disappear.cpp | 3 - src/d/actor/d_a_kaji.cpp | 2 - src/d/d_kankyo.cpp | 2600 ++++++++++++++++++-- src/d/d_save.cpp | 4 +- 19 files changed, 2952 insertions(+), 320 deletions(-) create mode 100644 include/d/d_kankyo_data.h create mode 100644 include/d/d_kankyo_wether.h diff --git a/include/JAZelAudio/JAIZelBasic.h b/include/JAZelAudio/JAIZelBasic.h index 01b6f5ee4..af5baa678 100644 --- a/include/JAZelAudio/JAIZelBasic.h +++ b/include/JAZelAudio/JAIZelBasic.h @@ -85,9 +85,6 @@ public: void changeSeaBgm(); void startIsleBgm(); void setLinkGroupInfo(u8); - void getMapInfoFxline(u32); - void getMapInfoFxParameter(u32); - void getMapInfoGround(u32); void setScene(s32, s32, s32, s32); void expandSceneBgmNum(u32); void checkLinkOnSea(); @@ -119,7 +116,6 @@ public: void processTime(); void processMorningToNormal(); void checkOnOuterSea(f32*); - void makeSound(u32); void checkSeqIDDemoPlaying(u32); void checkDemoFanfarePlaying(); void processDemoFanfareMute(); @@ -143,11 +139,110 @@ public: void registWindowPos(Vec*); void rainPlay(s32); + virtual void makeSound(u32); + virtual void getMapInfoFxline(u32); + virtual void getMapInfoGround(u32); + virtual void getMapInfoFxParameter(u32); + + void setHour(s32 i_hour) { mHour = i_hour; } + void setMinute(s32 i_minute) { mMinute = i_minute; } + void setWeekday(s32 i_weekday) { mWeekday = i_weekday; } + static JAIZelBasic* getInterface() { return zel_basic; } static JAIZelBasic* zel_basic; - /* 0x0 */ u8 field_0x0[0x20F4]; + /* 0x0004 */ u8 field_0x0004[0x0020 - 0x0004]; + /* 0x0020 */ u8 field_0x0020; + /* 0x0021 */ u8 field_0x0021; + /* 0x0022 */ u8 field_0x0022[0x0024 - 0x0022]; + /* 0x0024 */ int field_0x0024; + /* 0x0028 */ u8 field_0x0028[0x002C - 0x0028]; + /* 0x002C */ u8 mHour; + /* 0x002D */ u8 mMinute; + /* 0x002E */ u8 mWeekday; + /* 0x002F */ u8 field_0x002f; + /* 0x0030 */ s16 field_0x0030; + /* 0x0032 */ u8 field_0x0032; + /* 0x0033 */ u8 field_0x0033[0x0034 - 0x0033]; + /* 0x0034 */ int field_0x0034; + /* 0x0038 */ int field_0x0038; + /* 0x003C */ f32 field_0x003c; + /* 0x0040 */ u8 field_0x0040[0x0041 - 0x0040]; + /* 0x0041 */ u8 field_0x0041; + /* 0x0042 */ u8 field_0x0042; + /* 0x0043 */ u8 field_0x0043; + /* 0x0044 */ u8 field_0x0044; + /* 0x0045 */ u8 field_0x0045; + /* 0x0046 */ u8 field_0x0046; + /* 0x0047 */ u8 field_0x0047; + /* 0x0048 */ f32 field_0x0048; + /* 0x004C */ f32 field_0x004c; + /* 0x0050 */ f32 field_0x0050; + /* 0x0054 */ f32 field_0x0054; + /* 0x0058 */ f32 field_0x0058; + /* 0x005C */ f32 field_0x005c; + /* 0x0060 */ u8 mbLandingDemoStarted; + /* 0x0061 */ u8 field_0x0061[0x0063 - 0x0061]; + /* 0x0063 */ u8 field_0x0063; + /* 0x0064 */ u8 field_0x0064[0x0066 - 0x0064]; + /* 0x0066 */ u8 field_0x0066; + /* 0x0067 */ u8 field_0x0067[0x0070 - 0x0067]; + /* 0x0070 */ JAISound* mpSound; + /* 0x0074 */ int field_0x0074; + /* 0x0078 */ u32 field_0x0078; + /* 0x007C */ u32 field_0x007c; + /* 0x0080 */ f32 field_0x0080; + /* 0x0084 */ f32 field_0x0084; + /* 0x0088 */ f32 field_0x0088; + /* 0x008C */ f32 field_0x008c; + /* 0x0090 */ f32 field_0x0090; + /* 0x0094 */ f32 field_0x0094; + /* 0x0098 */ f32 field_0x0098; + /* 0x009C */ f32 field_0x009c; + /* 0x00A0 */ f32 field_0x00a0; + /* 0x00A4 */ f32 field_0x00a4; + /* 0x00A8 */ f32 field_0x00a8; + /* 0x00AC */ f32 field_0x00ac; + /* 0x00B0 */ int field_0x00b0; + /* 0x00B4 */ u8 field_0x00B4[0x00B5 - 0x00B4]; + /* 0x00B5 */ u8 mSomeSpecialBGMFlag; + /* 0x00B6 */ u8 mLastMinibossSubBGMType; + /* 0x00B7 */ u8 field_0x00B7[0x00BC - 0x00B7]; + /* 0x00BC */ u8 field_0x00bc; + /* 0x00BD */ u8 field_0x00BD[0x00BE - 0x00BD]; + /* 0x00BE */ u8 field_0x00be; + /* 0x00BF */ u8 field_0x00BF[0x00CA - 0x00BF]; + /* 0x00CA */ u8 field_0x00ca; + /* 0x00CB */ u8 field_0x00CB[0x01F9 - 0x00CB]; + /* 0x01F9 */ u8 field_0x01f9; + /* 0x01FA */ u8 field_0x01FA[0x0201 - 0x01FA]; + /* 0x0201 */ u8 field_0x0201; + /* 0x0202 */ u8 field_0x0202[0x021C - 0x0202]; + /* 0x021C */ u8 mCameraSeaFloorGroupInfo; + /* 0x021D */ u8 mLinkSeaFloorGroupInfo; + /* 0x021E */ u8 field_0x021e; + /* 0x021F */ u8 field_0x021F[0x0224 - 0x021F]; + /* 0x0224 */ int field_0x0224; + /* 0x0228 */ u32 mNextSceneBgmId; + /* 0x022C */ u8 field_0x022C[0x022D - 0x022C]; + /* 0x022D */ u8 field_0x022d; + /* 0x022E */ u8 field_0x022e; + /* 0x022F */ u8 field_0x022f; + /* 0x0230 */ u8 field_0x0230; + /* 0x0231 */ u8 field_0x0231; + /* 0x0232 */ u8 mFirstDynamicSceneWaveIndex; + /* 0x0233 */ u8 field_0x0233; + /* 0x0234 */ u8 mSetNum; + /* 0x0235 */ u8 mSecondDynamicSceneWaveIndex; + /* 0x0236 */ u8 field_0x0236; + /* 0x0237 */ u8 field_0x0237; + /* 0x0238 */ u8 mIslandRoomNo; + /* 0x0239 */ u8 field_0x0239[0x1F3D - 0x0239]; + /* 0x1F3D */ u8 mIsSailing; + /* 0x1F3E */ u8 field_0x1F3E[0x1F40 - 0x1F3E]; + /* 0x1F40 */ f32 field_0x1f40; + /* 0x1F44 */ u8 field_0x1F44[0x20F4 - 0x1F44]; }; class JAIZelAnime { diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index a726d1bc1..b4d0f0776 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -162,7 +162,7 @@ public: virtual _GXColor* getTevKColor(u32); virtual void setTevKColorSel(u32, u8 const*); virtual void setTevKColorSel(u32, u8); - virtual bool getTevKColorSel(u32); + virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); virtual bool getTevKAlphaSel(u32); @@ -228,7 +228,7 @@ public: virtual GXColor* getTevKColor(u32); virtual void setTevKColorSel(u32, u8 const*); virtual void setTevKColorSel(u32, u8); - virtual bool getTevKColorSel(u32); + virtual u8 getTevKColorSel(u32); virtual void setTevStageNum(u8 const*); virtual void setTevStageNum(u8); virtual u8 getTevStageNum() const; @@ -295,7 +295,7 @@ public: virtual GXColor* getTevKColor(u32); virtual void setTevKColorSel(u32, u8 const*); virtual void setTevKColorSel(u32, u8); - virtual bool getTevKColorSel(u32); + virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); virtual bool getTevKAlphaSel(u32); @@ -368,7 +368,7 @@ public: virtual GXColor* getTevKColor(u32); virtual void setTevKColorSel(u32, u8 const*); virtual void setTevKColorSel(u32, u8); - virtual bool getTevKColorSel(u32); + virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); virtual bool getTevKAlphaSel(u32); @@ -441,7 +441,7 @@ public: virtual GXColor* getTevKColor(u32); virtual void setTevKColorSel(u32, u8 const*); virtual void setTevKColorSel(u32, u8); - virtual bool getTevKColorSel(u32); + virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); virtual bool getTevKAlphaSel(u32); @@ -626,7 +626,6 @@ public: virtual void diffBlend(); virtual s32 countDLSize(); virtual u32 getType() = 0; - virtual void setFog(J3DFog); virtual void setFog(J3DFog*); virtual J3DFog* getFog(); virtual void setAlphaComp(J3DAlphaComp const*); @@ -688,7 +687,6 @@ public: virtual void diffBlend(); virtual s32 countDLSize(); virtual u32 getType(); - virtual void setFog(J3DFog); virtual void setFog(J3DFog*); virtual J3DFog* getFog(); virtual void setAlphaComp(J3DAlphaComp const*); @@ -875,15 +873,13 @@ public: virtual void patchMatColor(); virtual void patchLight(); virtual void diff(u32); - virtual void diffAmbColor(); virtual void diffMatColor(); - virtual void diffColorChan(); - virtual void diffLightObj(u32); + virtual void diffLight(); virtual s32 countDLSize(); virtual u32 getType() = 0; virtual void setMatColor(u32, J3DGXColor const*); virtual void setMatColor(u32, J3DGXColor); - virtual _GXColor* getMatColor(u32); + virtual GXColor* getMatColor(u32); virtual void setAmbColor(u32, J3DGXColor const*); virtual void setAmbColor(u32, J3DGXColor); virtual bool getAmbColor(u32); @@ -918,10 +914,8 @@ public: virtual void patchMatColor(); virtual void patchLight(); virtual void diff(u32); - virtual void diffAmbColor(); virtual void diffMatColor(); - virtual void diffColorChan(); - virtual void diffLightObj(u32); + virtual void diffLight(); virtual s32 countDLSize(); virtual u32 getType(); virtual void setMatColor(u32, J3DGXColor const*); @@ -972,7 +966,6 @@ public: virtual void patchLight(); virtual void diff(u32); virtual void diffMatColor(); - virtual void diffColorChan(); virtual s32 countDLSize(); virtual u32 getType(); virtual void setMatColor(u32, J3DGXColor const*); diff --git a/include/JSystem/J3DGraphBase/J3DStruct.h b/include/JSystem/J3DGraphBase/J3DStruct.h index 9063658da..b2e613ecd 100644 --- a/include/JSystem/J3DGraphBase/J3DStruct.h +++ b/include/JSystem/J3DGraphBase/J3DStruct.h @@ -63,18 +63,15 @@ struct J3DIndTexMtxInfo { struct J3DFogInfo { /* 80325800 */ void operator=(J3DFogInfo const&); - /* 0x00 */ u8 field_0x0; - /* 0x01 */ u8 field_0x1; - /* 0x02 */ u16 field_0x2; - /* 0x04 */ f32 field_0x4; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ u8 field_0x14; - /* 0x15 */ u8 field_0x15; - /* 0x16 */ u8 field_0x16; - /* 0x17 */ u8 field_0x17; - /* 0x18 */ u16 field_0x18[10]; + /* 0x00 */ u8 mType; + /* 0x01 */ u8 mAdjEnable; + /* 0x02 */ u16 mCenter; + /* 0x04 */ f32 mStartZ; + /* 0x08 */ f32 mEndZ; + /* 0x0C */ f32 mNearZ; + /* 0x10 */ f32 mFarZ; + /* 0x14 */ GXColor mColor; + /* 0x18 */ u16 mFogAdjTable[10]; }; // Size: 0x2C struct J3DNBTScaleInfo { diff --git a/include/MSL_C/math.h b/include/MSL_C/math.h index bd44a9a47..bfac45e02 100644 --- a/include/MSL_C/math.h +++ b/include/MSL_C/math.h @@ -76,9 +76,12 @@ inline float atan2f(float y, float x) { return (float)atan2(y, x); } +// these are duplicated due to sinf/cosf having a symbol, but +// still being used as inlines elsewhere inline float i_sinf(float x) { return sin(x); } + inline float i_cosf(float x) { return cos(x); } diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 64f0054fb..62ac1113a 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -132,6 +132,7 @@ public: dAttention_c& getAttention() { return mAttention; } dDetect_c& getDetect() { return mDetect; } dDemo_manager_c* getDemo() { return mDemo; } + camera_class* getCamera(int idx) { return mCameraInfo[idx].mpCamera; } dMagma_packet_c* getMagma() { return mpMagmaPacket; } dGrass_packet_c* getGrass() { return mpGrassPacket; } @@ -623,6 +624,26 @@ inline void dComIfGs_setTurnRestart(const cXyz& i_pos, s16 i_angle, s8 i_roomNo, g_dComIfG_gameInfo.save.getTurnRestart().set(i_pos, i_angle, i_roomNo, i_param, i_pos, i_angle, 0); } +inline u16 dComIfGs_getDate() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().getDate(); +} + +inline void dComIfGs_setDate(u16 i_date) { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().setDate(i_date); +} + +inline f32 dComIfGs_getTime() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().getTime(); +} + +inline void dComIfGs_setTime(f32 i_time) { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().setTime(i_time); +} + +inline BOOL dComIfGs_isGetItem(int i_field, u8 i_item) { + return g_dComIfG_gameInfo.save.getPlayer().getGetItem().isItem(i_field, i_item); +} + /** * === PLAY === */ @@ -631,6 +652,10 @@ void dComIfGp_setNextStage(const char* i_stageName, s16 i_point, s8 i_roomNo, s8 f32 i_lastSpeed, u32 i_lastMode, int, s8 i_wipe); dStage_Ship_data* dComIfGp_getShip(int i_roomNo, int param_1); +inline camera_class* dComIfGp_getCamera(int idx) { + return g_dComIfG_gameInfo.play.getCamera(idx); +} + inline const char* dComIfGp_getStartStageName() { return g_dComIfG_gameInfo.play.getStartStageName(); } @@ -699,10 +724,38 @@ inline dStage_Multi_c* dComIfGp_getMulti() { return g_dComIfG_gameInfo.play.getStage().getMulti(); } +inline stage_envr_info_class* dComIfGp_getStageEnvrInfo() { + return g_dComIfG_gameInfo.play.getStage().getEnvrInfo(); +} + +inline stage_palet_info_class* dComIfGp_getStagePaletteInfo() { + return g_dComIfG_gameInfo.play.getStage().getPaletInfo(); +} + +inline stage_pselect_info_class* dComIfGp_getStagePselectInfo() { + return g_dComIfG_gameInfo.play.getStage().getPselectInfo(); +} + +inline stage_vrbox_info_class* dComIfGp_getStageVrboxInfo() { + return g_dComIfG_gameInfo.play.getStage().getVrboxInfo(); +} + inline stage_stag_info_class* dComIfGp_getStageStagInfo() { return g_dComIfG_gameInfo.play.getStage().getStagInfo(); } +inline stage_plight_info_class* dComIfGp_getStagePlightInfo() { + return g_dComIfG_gameInfo.play.getStage().getPlightInfo(); +} + +inline int dComIfGp_getStagePlightNumInfo() { + return g_dComIfG_gameInfo.play.getStage().getPlightNumInfo(); +} + +inline s32 dComIfGp_roomControl_getTimePass() { + return g_dComIfG_gameInfo.play.getRoomControl()->GetTimePass(); +} + inline s32 dComIfGp_roomControl_getStayNo() { return dStage_roomControl_c::getStayNo(); } @@ -910,11 +963,15 @@ inline BOOL dComIfGp_checkCameraAttentionStatus(int idx, u32 flag) { /** * === EVENT ===*/ -inline u8 dComIfGp_event_getTalkXYBtn(void) { +inline BOOL dComIfGp_event_runCheck() { + return g_dComIfG_gameInfo.play.getEvent().runCheck(); +} + +inline u8 dComIfGp_event_getTalkXYBtn() { return g_dComIfG_gameInfo.play.getEvent().getTalkXYBtn(); } -inline bool dComIfGp_event_chkTalkXY(void) { +inline bool dComIfGp_event_chkTalkXY() { return g_dComIfG_gameInfo.play.getEvent().chkTalkXY(); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 95165b236..a192b2666 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -238,7 +238,6 @@ public: static bool mWipe; -private: /* 0x00000 */ J3DDrawBuffer* mpBufSkyOpa; /* 0x00004 */ J3DDrawBuffer* mpBufSkyXlu; /* 0x00008 */ J3DDrawBuffer* mpLinkBuf; diff --git a/include/d/d_event.h b/include/d/d_event.h index 457610ad9..380b9ddb7 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -58,13 +58,16 @@ public: void getTactFreeMStick(int); void getTactFreeCStick(int); void giveItemCut(u8); + u8 getTalkXYBtn() { return mTalkButton; } bool chkTalkXY() { return mTalkButton == 1 || mTalkButton == 2 || mTalkButton == 3; } void setPtI_Id(u32 id) { mPtItem = id; } - inline u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } - inline void onEventFlag(u16 flag) { mEventFlag |= flag; } - inline void offEventFlag(u16 flag) { mEventFlag &= ~flag; } + u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } + void onEventFlag(u16 flag) { mEventFlag |= flag; } + void offEventFlag(u16 flag) { mEventFlag &= ~flag; } + + bool runCheck() { return mMode != 0; } /* 0x00 */ dEvt_order_c mOrder[8]; /* 0xC0 */ u8 mOrderCount; diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 15341b97c..03cd0f84b 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -1,10 +1,10 @@ #ifndef D_KANKYO_D_KANKYO_H #define D_KANKYO_D_KANKYO_H -#include "global.h" -#include "dolphin/gx/GX.h" -#include "SSystem/SComponent/c_xyz.h" #include "JSystem/J3DGraphBase/J3DStruct.h" +#include "SSystem/SComponent/c_xyz.h" +#include "dolphin/gx/GX.h" +#include "global.h" class J3DModel; @@ -14,6 +14,99 @@ struct color_RGB_class { u8 b; }; +struct LIGHT_INFLUENCE { + /* 0x00 */ cXyz mPos; + /* 0x0C */ GXColorS10 mColor; + /* 0x14 */ f32 mPower; + /* 0x18 */ f32 mFluctuation; + /* 0x1C */ int mIdx; +}; + +struct EFLIGHT_PROC { + /* 0x00 */ u8 mSwordState; + /* 0x01 */ u8 mSwordFrame; + /* 0x04 */ int mSwordLightType; + /* 0x08 */ LIGHT_INFLUENCE mSwordLight; +}; + +struct WIND_INFLUENCE { + /* 0x00 */ cXyz mPos; + /* 0x0C */ cXyz mDir; + /* 0x18 */ f32 mRadius; + /* 0x1C */ f32 mStrength; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ u32 field_0x24; + /* 0x28 */ u8 mbConstant; +}; + +struct WIND_INF_ENTITY { + /* 0x00 */ u8 mbInUse; + /* 0x04 */ f32 mMinRadius; + /* 0x08 */ f32 mSpeed; + /* 0x0C */ f32 mStrengthMaxVel; + /* 0x10 */ WIND_INFLUENCE mInfluence; +}; + +struct GB_WIND_INFLUENCE { + /* 0x00 */ cXyz mWindVec; + /* 0x04 */ cXyz* mpWindVecOverride; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 mWindPower; + /* 0x18 */ f32 mWindStrengthOverride; + /* 0x1C */ f32 mCustomWindPower; + /* 0x20 */ s16 mTactWindAngleX; + /* 0x22 */ s16 mTactWindAngleY; + /* 0x24 */ s16 mEvtWindAngleX; + /* 0x26 */ s16 mEvtWindAngleY; + /* 0x28 */ u8 mTactWindAngleFlags; + /* 0x2E */ u8 mEvtWindSet; +}; + +struct EF_THUNDER { + /* 0x00 */ u8 mStatus; + /* 0x01 */ u8 mStateTimer; + /* 0x02 */ u8 field_0x2; + /* 0x04 */ int mMode; + /* 0x08 */ f32 mFlashTimer; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ u8 field_0x14[4]; + /* 0x18 */ LIGHT_INFLUENCE mLightInfluence; +}; + +struct SND_INFLUENCE { + /* 0x00 */ cXyz field_0x0; + /* 0x0C */ int field_0xc; + /* 0x10 */ int field_0x10; + /* 0x14 */ u32 field_0x14; +}; + +struct WAVECHAN { + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 mWaveSpeed; + /* 0x10 */ f32 mWaveSpawnDist; + /* 0x14 */ f32 mWaveSpawnRadius; + /* 0x18 */ f32 mWaveScale; + /* 0x1C */ f32 mWaveScaleRand; + /* 0x20 */ f32 mWaveCounterSpeedScale; + /* 0x24 */ f32 mWaveScaleBottom; + /* 0x28 */ f32 mWaveFlatInter; + /* 0x2C */ s16 mWaveCount; + /* 0x2E */ u8 mWaveReset; + /* 0x2F */ u8 field_0x2f; +}; + +struct WAVE_INFO { + /* 0x00 */ cXyz mPos; + /* 0x0C */ f32 mOuterRadius; + /* 0x10 */ f32 mInnerRadius; + /* 0x14 */ f32 field_0x14; +}; + class dKy_tevstr_c { public: /* 0x00 */ J3DLightObj mLightObj; @@ -55,21 +148,269 @@ enum TevType { TEV_TYPE_ACTOR_NOLIGHT, }; -struct dScnKy_env_light_c { +struct dScnKy__Schedule { + /* 0x0 */ f32 mTimeEnd; + /* 0x4 */ f32 mTimeBegin; + /* 0x8 */ u8 mPalIdx0; + /* 0x9 */ u8 mPalIdx1; +}; + +class dKankyo_sun_Packet; +class dKankyo_sunlenz_Packet; +class dKankyo_rain_Packet; +class dKankyo_snow_Packet; +class dKankyo_housi_Packet; +class dKankyo_cloud_Packet; +class dKankyo_vrkumo_Packet; +class dKankyo_wave_Packet; +class dKyr__wind_Packet; +class dKankyo_star_Packet; +class stage_palet_info_class; +class stage_pselect_info_class; +class stage_envr_info_class; +class stage_vrbox_info_class; +class stage_plight_info_class; + +class dScnKy_env_light_c { public: + dScnKy_env_light_c(); + virtual ~dScnKy_env_light_c() {} + + void setDaytime(); + void SetSchbit(); + void setSunpos(); + f32 getDaytime(); + void setLight_palno_get(u8*, u8*, u8*, u8*, u8*, u8*, u8*, u8*, f32*, int*, int*, f32*, u8*); + void setLight(); + void setLight_bg(dKy_tevstr_c*, GXColorS10*, GXColorS10*, GXColorS10*, GXColorS10*, GXColorS10*, + GXColorS10*, GXColorS10*, GXColorS10*, GXColorS10*, f32*, f32*); + void setLight_actor(dKy_tevstr_c*, GXColorS10*, f32*, f32*); + void settingTevStruct_colget_actor(cXyz*, dKy_tevstr_c*, GXColorS10*, GXColorS10*, GXColorS10*, + f32*, f32*); + void settingTevStruct_colget_player(dKy_tevstr_c*); + void settingTevStruct_plightcol_plus(cXyz*, dKy_tevstr_c*, GXColorS10, GXColorS10, u8); + void settingTevStruct_eflightcol_plus(cXyz*, dKy_tevstr_c*); void settingTevStruct(int, cXyz*, dKy_tevstr_c*); void setLightTevColorType(J3DModel*, dKy_tevstr_c*); + void CalcTevColor(); + void Sndpos(); + void Eflight_flush_proc(); + void SetBaseLight(); + void exeKankyo(); + void drawKankyo(); -public: - u8 pad[0xC9C]; + /* 0x004 */ stage_palet_info_class* mpPaletInfo; + /* 0x008 */ stage_pselect_info_class* mpPselectInfo; + /* 0x00C */ stage_envr_info_class* mpEnvrInfo; + /* 0x010 */ stage_vrbox_info_class* mpVrboxInfo; + /* 0x014 */ dScnKy__Schedule* mpSchejule; + /* 0x018 */ LIGHT_INFLUENCE mBaseLightInfluence; + /* 0x038 */ LIGHT_INFLUENCE mLightInfluence[30]; + /* 0x3F8 */ LIGHT_INFLUENCE* mpPLights[200]; + /* 0x718 */ LIGHT_INFLUENCE* mpEfLights[10]; + /* 0x740 */ u8 field_0x740[0x764 - 0x740]; + /* 0x764 */ EFLIGHT_PROC mEfLightProc; + /* 0x78C */ stage_plight_info_class* mpPlightInfo; + /* 0x790 */ WIND_INFLUENCE* mpWindInfluence[30]; + /* 0x808 */ WIND_INF_ENTITY mWindInfluenceEntity[5]; + /* 0x934 */ SND_INFLUENCE mSound; + /* 0x94C */ WAVECHAN mWaveChan; + /* 0x97C */ GB_WIND_INFLUENCE mWind; + /* 0x9B0 */ u8 mbSunInitialized; + /* 0x9B4 */ dKankyo_sun_Packet* mpSunPacket; + /* 0x9B8 */ dKankyo_sunlenz_Packet* mpSunlenzPacket; + /* 0x9BC */ u8 mbRainInitialized; + /* 0x9C0 */ int mRainCount; + /* 0x9C4 */ dKankyo_rain_Packet* mpRainPacket; + /* 0x9C8 */ u8 mbSnowInitialized; + /* 0x9CC */ int mSnowCount; + /* 0x9D0 */ dKankyo_snow_Packet* mpSnowPacket; + /* 0x9D4 */ u8 mbStarInitialized; + /* 0x9D8 */ int mStarCount; + /* 0x9DC */ f32 mStarCountTarget; + /* 0x9E0 */ dKankyo_star_Packet* mpStarPacket; + /* 0x9E4 */ u8 field_0x9E4[0x9F0 - 0x9E4]; + /* 0x9F0 */ u8 mbHouseInitialized; + /* 0x9F4 */ int mHousiCount; + /* 0x9F8 */ dKankyo_housi_Packet* mpHousiPacket; + /* 0x9FC */ u8 mMoyaInitialized; + /* 0x9FD */ u8 mMoyaMode; + /* 0xA00 */ int mMoyaCount; + /* 0xA04 */ dKankyo_cloud_Packet* mpMoyaPacket; + /* 0xA08 */ u8 mVrkumoStatus; + /* 0xA0C */ int mVrkumoCount; + /* 0xA10 */ f32 mVrkumoStrength; + /* 0xA14 */ dKankyo_vrkumo_Packet* mpVrkumoPacket; + /* 0xA18 */ u8 mWaveInitialized; + /* 0xA19 */ u8 field_0xA19[0xA20 - 0xA19]; + /* 0xA20 */ dKankyo_wave_Packet* mpWavePacket; + /* 0xA24 */ u8 mbWindlineInitialized; + /* 0xA28 */ int mWindlineCount; + /* 0xA2C */ dKyr__wind_Packet* mpWind; + /* 0xA30 */ EF_THUNDER mThunderEff; + /* 0xA68 */ WAVE_INFO* mpWaveInfl[10]; + /* 0xA90 */ cXyz mLightDir; + /* 0xA9C */ cXyz mSunPos2; + /* 0xAA8 */ cXyz mPLightNearPlayer; + /* 0xAB4 */ cXyz mSunPos; + /* 0xAC0 */ cXyz mMoonPos; + /* 0xACC */ GXFogAdjTable mFogAdjTable; + /* 0xAE0 */ GXColorS10 mVrSkyColor; + /* 0xAE8 */ GXColorS10 mVrUsoUmiColor; + /* 0xAF0 */ GXColorS10 mVrkumoColor; + /* 0xAF8 */ GXColorS10 mVrkumoCenterColor; + /* 0xB00 */ GXColorS10 mVrKasumiMaeColor; + /* 0xB08 */ GXColorS10 mC0; + /* 0xB10 */ GXColorS10 mK0; + /* 0xB18 */ GXColorS10 mActorC0; + /* 0xB20 */ GXColorS10 mActorK0; + /* 0xB28 */ GXColorS10 mBG0_C0; + /* 0xB30 */ GXColorS10 mBG0_K0; + /* 0xB38 */ GXColorS10 mBG1_C0; + /* 0xB40 */ GXColorS10 mBG1_K0; + /* 0xB48 */ GXColorS10 mBG2_C0; + /* 0xB50 */ GXColorS10 mBG2_K0; + /* 0xB58 */ GXColorS10 mBG3_C0; + /* 0xB60 */ GXColorS10 mBG3_K0; + /* 0xB68 */ GXColorS10 mFogColor; + /* 0xB70 */ GXColorS10 mActorAddColAmb; + /* 0xB78 */ GXColorS10 mActorAddColDif; + /* 0xB80 */ GXColorS10 mBgAddColAmb; + /* 0xB88 */ GXColorS10 mBgAddColDif; + /* 0xB90 */ GXColorS10 mBg1AddColAmb; + /* 0xB98 */ GXColorS10 mBg1AddColDif; + /* 0xBA0 */ GXColorS10 mBg2AddColAmb; + /* 0xBA8 */ GXColorS10 mBg2AddColDif; + /* 0xBB0 */ GXColorS10 mBg3AddColAmb; + /* 0xBB8 */ GXColorS10 mBg3AddColDif; + /* 0xBC0 */ GXColorS10 mAddColFog; + /* 0xBC8 */ GXColorS10 mVrboxAddColSky0; + /* 0xBD0 */ GXColorS10 mVrboxAddColKasumi; + /* 0xBD8 */ f32 mDiceWeatherChangeTime; + /* 0xBDC */ f32 mDiceWeatherTime; + /* 0xBE0 */ f32 mColPatBlend; + /* 0xBE4 */ f32 mColPatBlendGather; + /* 0xBE8 */ f32 mFogStartZ__setLight; + /* 0xBEC */ f32 mFogEndZ__setLight; + /* 0xBF0 */ f32 mFogStartZ; + /* 0xBF4 */ f32 mFogEndZ; + /* 0xBF8 */ f32 mFogRatio; + /* 0xBFC */ f32 mAllColRatio; + /* 0xC00 */ f32 mActColRatio; + /* 0xC04 */ f32 mBgColRatio; + /* 0xC08 */ f32 mFogColRatio; + /* 0xC0C */ f32 mVrboxSoraColRatio; + /* 0xC10 */ f32 mVrboxKumoColRatio; + /* 0xC14 */ f32 mAllColGatherRatio; + /* 0xC18 */ f32 mActColGatherRatio; + /* 0xC1C */ f32 mBgColGatherRatio; + /* 0xC20 */ f32 mFogColGatherRatio; + /* 0xC24 */ f32 mVrboxSoraColGatherRatio; + /* 0xC28 */ f32 mVrboxKumoColGatherRatio; + /* 0xC2C */ f32 field_0xc2c; + /* 0xC30 */ f32 field_0xc30; + /* 0xC34 */ f32 field_0xc34; + /* 0xC38 */ f32 mCurTime; + /* 0xC3C */ f32 mNextTime; + /* 0xC40 */ f32 mTimeAdv; + /* 0xC44 */ f32 field_0xc44; + /* 0xC48 */ void* field_0xc48; + /* 0xC4C */ void* field_0xc4c; + /* 0xC50 */ u32 mMoyaSE; + /* 0xC54 */ void* field_0xc54; + /* 0xC58 */ void* field_0xc58; + /* 0xC5C */ void* field_0xc5c; + /* 0xC60 */ int mDiceWeatherCounter; + /* 0xC64 */ int mRainCountOrig; + /* 0xC68 */ void* field_0xc68; + /* 0xC6C */ int mPlayerPLightIdx; + /* 0xC70 */ int mPlayerEflightIdx; + /* 0xC74 */ void* field_0xc74; + /* 0xC78 */ void* field_0xc78; + /* 0xC7C */ int mSchbitTimer; + /* 0xC80 */ u16 mFogAdjCenter; + /* 0xC82 */ u16 mDayOfWeek; + /* 0xC84 */ u8 mColpatPrev; + /* 0xC85 */ u8 mColpatCurr; + /* 0xC86 */ u8 mColpatPrevGather; + /* 0xC87 */ u8 mColpatCurrGather; + /* 0xC88 */ u8 mEnvrIdxPrev; + /* 0xC89 */ u8 mEnvrIdxCurr; + /* 0xC8A */ u8 mColpatWeather; + /* 0xC8B */ u8 mDiceWeatherMode; + /* 0xC8C */ u8 mDiceWeatherState; + /* 0xC8D */ u8 mDiceWeatherCurrPattern; + /* 0xC8E */ u8 field_0xc8e; + /* 0xC8F */ u8 mColPatMode; + /* 0xC90 */ u8 mColPatModeGather; + /* 0xC91 */ u8 mFogAdjEnable; + /* 0xC92 */ u8 mFogAdjTableType; + /* 0xC93 */ u8 mItemGetCol_chg; + /* 0xC94 */ u8 mInitAnimTimer; + /* 0xC95 */ u8 mSchbit; + /* 0xC96 */ u8 mbVrboxInvisible; + /* 0xC97 */ u8 mbContrastFlag; + /* 0xC98 */ u8 field_0xc98; + /* 0xC99 */ u8 mbDayNightTactStop; + /* 0xC9A */ u8 field_0xc9a; + /* 0xC9B */ u8 field_0xc9b; }; // Size = 0xC9C extern dScnKy_env_light_c g_env_light; +STATIC_ASSERT(sizeof(dScnKy_env_light_c) == 0xC9C); + +inline dScnKy_env_light_c& dKy_getEnvlight() { + return g_env_light; +} + +enum dKy_dice_wether_mode { + /* 0 */ DICE_MODE_SUNNY_e, + /* 1 */ DICE_MODE_CLOUDY_e, + /* 2 */ DICE_MODE_RAIN_LIGHT_e, + /* 3 */ DICE_MODE_RAIN_HEAVY_e, + /* 4 */ DICE_MODE_THUNDER_LIGHT_e, + /* 5 */ DICE_MODE_THUNDER_HEAVY_e, + DICE_MODE_DONE_e = 0xFF, +}; + +enum dKy_dice_wether_state { + /* 0 */ DICE_STATE_RESET_e, + /* 1 */ DICE_STATE_INIT_e, + /* 2 */ DICE_STATE_EXEC_e, + /* 3 */ DICE_STATE_NEXT_e, +}; + +class sub_kankyo__class; + int dKy_getdaytime_hour(); +int dKy_getdaytime_minute(); +int dKy_get_dayofweek(); BOOL dKy_checkEventNightStop(); void dKy_set_nexttime(f32); void dKy_Sound_set(cXyz i_pos, int param_1, unsigned int i_actorID, int param_3); void dKy_itudemo_se(); +void dKy_actor_addcol_set(s16, s16, s16, f32); +void dKy_plight_set(LIGHT_INFLUENCE*); +void dKy_fog_startendz_set(f32, f32, f32); +void dKy_vrbox_addcol_set(s16, s16, s16, f32); +BOOL dKy_daynight_check(); +void dKy_tevstr_init(dKy_tevstr_c*, s8, u8); +void dKy_Sound_init(); +u8 dKy_pship_existense_chk(); +void dKy_Itemgetcol_chg_move(); +void dKy_arrowcol_chg_move(); +void dKy_setLight_init(); +void GxXFog_set(); +void dKy_set_vrboxsoracol_ratio(f32 ratio); +void dKy_set_vrboxkumocol_ratio(f32 ratio); +cXyz dKy_get_orion_pos(); +cXyz dKy_get_hokuto_pos(); + +/* 80197AB8-80197FE4 .text dKankyo_DayProc__Fv */ +// supposed to be generated after sinit... +static void dKankyo_DayProc() { + /* Nonmatching */ +} #endif /* D_KANKYO_D_KANKYO_H */ diff --git a/include/d/d_kankyo_data.h b/include/d/d_kankyo_data.h new file mode 100644 index 000000000..eee90a5c0 --- /dev/null +++ b/include/d/d_kankyo_data.h @@ -0,0 +1,21 @@ +#ifndef D_KANKYO_DATA_H +#define D_KANKYO_DATA_H + +#include "dolphin/types.h" + +struct stage_vrbox_info_class; +struct stage_pselect_info_class; +struct stage_envr_info_class; +struct stage_palet_info_class; +struct dScnKy__Schedule; + +stage_palet_info_class* dKyd_dmpalet_getp(); +stage_pselect_info_class* dKyd_dmpselect_getp(); +stage_envr_info_class* dKyd_dmenvr_getp(); +stage_vrbox_info_class* dKyd_dmvrbox_getp(); +dScnKy__Schedule* dKyd_schejule_getp(); +dScnKy__Schedule* dKyd_schejule_boss_getp(); +void dKyd_schejule_menu_getp(); +void dKyd_xfog_table_set(u8); + +#endif /* D_KANKYO_DATA_H */ \ No newline at end of file diff --git a/include/d/d_kankyo_rain.h b/include/d/d_kankyo_rain.h index 0cdf9a730..6e04a8844 100644 --- a/include/d/d_kankyo_rain.h +++ b/include/d/d_kankyo_rain.h @@ -3,5 +3,6 @@ void dKyr_poison_light_colision(); BOOL dKyr_poison_live_check(); +BOOL dKyr_moon_arrival_check(); #endif /* D_KANKYO_D_KANKYO_RAIN_H */ \ No newline at end of file diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h new file mode 100644 index 000000000..151bed3b4 --- /dev/null +++ b/include/d/d_kankyo_wether.h @@ -0,0 +1,9 @@ +#ifndef D_KANKYO_WETHER_H +#define D_KANKYO_WETHER_H + +void dKyw_wether_proc(); +void dKyw_rain_set(int); +void dKyw_wind_set(); +void dKy_wave_chan_init(); + +#endif /* D_KANKYO_WETHER_H */ \ No newline at end of file diff --git a/include/d/d_s_play.h b/include/d/d_s_play.h index a622a4a3c..463d66306 100644 --- a/include/d/d_s_play.h +++ b/include/d/d_s_play.h @@ -135,4 +135,6 @@ public: /* 0x8 */ dScnPly_reg_childHIO_c mChild[22]; }; +extern dScnPly_reg_HIO_c g_regHIO; + #endif /* D_S_PLAY */ diff --git a/include/d/d_save.h b/include/d/d_save.h index 22cffd4d6..c58e95862 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -30,7 +30,14 @@ STATIC_ASSERT(sizeof(dSv_player_status_a_c) == 0x18); class dSv_player_status_b_c { public: - /* 80058B54 */ void init(); + void init(); + + void setDateIpl(s64 i_time) { mDateIPL = i_time; } + u16 getDate() const { return mDate; } + f32 getTime() const { return mTime; } + void setDate(u16 i_date) { mDate = i_date; } + void setTime(f32 i_time) { mTime = i_time; } + s64 getDateIpl() const { return mDateIPL; } /* 0x00 */ u64 mDateIPL; /* 0x08 */ f32 field_0x8; @@ -84,7 +91,7 @@ class dSv_player_get_item_c { public: /* 800594A8 */ void init(); /* 800594C4 */ void onItem(int, u8); - /* 8005955C */ bool isItem(int, u8); + /* 8005955C */ BOOL isItem(int, u8); /* 800595F8 */ void onBottleItem(u8); /* 80059740 */ bool isBottleItem(u8); diff --git a/include/d/d_stage.h b/include/d/d_stage.h index fca4859eb..50b2abcda 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -81,7 +81,16 @@ public: /* 0x8 */ f32 mChangeRate; }; -struct stage_plight_info_class {}; +struct stage_plight_info_class { + /* 0x00 */ Vec mPos; + /* 0x0C */ f32 mRadius; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ u8 mColorR; + /* 0x19 */ u8 mColorG; + /* 0x1A */ u8 mColorB; + /* 0x1B */ u8 mFluctuation; +}; class stage_palet_info_class { public: @@ -799,7 +808,7 @@ public: static void SetTimePass(int); static JKRExpHeap* getMemoryBlock(int); static void setStayNo(int); - static s8 GetTimePass(); + static s32 GetTimePass(); static void setZoneNo(int, int); static int getZoneNo(int i_roomNo); @@ -921,6 +930,14 @@ inline u8 dStage_stagInfo_GetParticleNo(stage_stag_info_class* i_stagInfo) { return (i_stagInfo->field_0x0a >> 0x3) & 0xFF; } +inline s8 dStage_stagInfo_GetTimeH(stage_stag_info_class* p_info) { + return (p_info->field_0x0c >> 8) & 0xFF; +} + +inline u8 dStage_stagInfo_getStartSch(stage_stag_info_class* p_info) { + return (p_info->field_0x10 >> 0x10) & 0xFF; +} + inline u8 dStage_roomRead_dt_c_GetLoadRoomIndex(u8 param_0) { return param_0 & 0x3f; } diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index ffdfdde24..d608288e6 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -59,7 +59,27 @@ inline void mDoAud_resetProcess() { } inline void mDoAud_seStart(u32 i_sfxID, Vec* i_sePos, u32 param_2, s8 i_reverb) { - JAIZelBasic::getInterface()->seStart(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f, -1.0f, -1.0f, 0); + mDoAud_zelAudio_c::getInterface()->seStart(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f, -1.0f, -1.0f, 0); +} + +inline void mDoAud_bgmMuteMtDragon() { + mDoAud_zelAudio_c::getInterface()->bgmMuteMtDragon(); +} + +inline void mDoAud_stSkyCloisters() { + mDoAud_zelAudio_c::getInterface()->stSkyCloisters(); +} + +inline void mDoAud_setHour(s32 hour) { + mDoAud_zelAudio_c::getInterface()->setHour(hour); +} + +inline void mDoAud_setMinute(s32 min) { + mDoAud_zelAudio_c::getInterface()->setMinute(min); +} + +inline void mDoAud_setWeekday(s32 day) { + mDoAud_zelAudio_c::getInterface()->setWeekday(day); } #endif /* M_DO_AUDIO_H */ diff --git a/src/d/actor/d_a_disappear.cpp b/src/d/actor/d_a_disappear.cpp index 0ed011b7a..b666600c6 100644 --- a/src/d/actor/d_a_disappear.cpp +++ b/src/d/actor/d_a_disappear.cpp @@ -12,9 +12,6 @@ #include "m_Do/m_Do_ext.h" #include "dolphin/types.h" - -extern dScnPly_reg_HIO_c g_regHIO; - class disappear_class : public fopAc_ac_c { public: int m0000; diff --git a/src/d/actor/d_a_kaji.cpp b/src/d/actor/d_a_kaji.cpp index 7def45908..3dd7609fa 100644 --- a/src/d/actor/d_a_kaji.cpp +++ b/src/d/actor/d_a_kaji.cpp @@ -13,8 +13,6 @@ #include "d/d_procname.h" #include "dolphin/types.h" -extern dScnPly_reg_HIO_c g_regHIO; - struct daKaji_c : fopAc_ac_c { public: BOOL CreateHeap(); diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 6ad376f68..e278731ac 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -3,317 +3,2160 @@ // Translation Unit: d_kankyo.cpp // -#include "d_kankyo.h" -#include "dolphin/types.h" +#include "d/d_kankyo.h" +#include "d/d_bg_s_gnd_chk.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo_data.h" +#include "d/d_kankyo_rain.h" +#include "d/d_kankyo_wether.h" +#include "d/d_s_play.h" +#include "d/d_stage.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_camera_mng.h" +#include "m_Do/m_Do_audio.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" +#include "m_Do/m_Do_printf.h" + +// stripped or compiler generated? +static u32 unused_lit_2100[] = {0x3F800000, 0x3F800000, 0x3F800000, + 0x3F800000, 0x3F800000, 0x3F800000}; + +struct dKy_setLight__Status { + /* 0x00 */ Vec mPos; + /* 0x0C */ Vec mPos2; + /* 0x18 */ GXColor mColor; + /* 0x1C */ int mAttnType; + /* 0x20 */ f32 mLightA[3]; + /* 0x2C */ f32 mLightK[3]; + /* 0x38 */ Vec mLightDir; + /* 0x44 */ f32 mSpotCutoff; + /* 0x48 */ GXSpotFn mSpotFn; + /* 0x4C */ f32 mRefDistance; + /* 0x50 */ f32 mRefBrightness; + /* 0x54 */ GXDistAttnFn mDistAttnFn; + /* 0x58 */ u32 field_0x58[12]; //? + /* 0x88 */ f32 field_0x88; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ u32 field_0x98[16]; //? + /* 0xD8 */ f32 field_0xd8; + /* 0xDC */ f32 field_0xdc; + /* 0xE0 */ f32 field_0xe0; + /* 0xE4 */ f32 field_0xe4; +}; + +static dKy_setLight__Status lightStatusBase = { + {-36384.5f, 29096.7f, 17422.2f}, + {377.0f, 5207.4f, 1220.4f}, + {255, 255, 255, 255}, + 0, + {1.0f, 0.0f, 0.0f}, + {1.0f, 0.0f, 0.0f}, + {0.0f, -1.0f, -1.0f}, + 90.0f, + GX_SP_OFF, + 500.0f, + 1.0f, + GX_DA_OFF, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + 320.0f, + -320.0f, + 1000.0f, + 160000.0f, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + 0.536479f, + 2.726476f, + 0.0f, + 0.5f, +}; + +static u16 lightMaskData[] = { + GX_LIGHT0, GX_LIGHT1, GX_LIGHT2, GX_LIGHT3, GX_LIGHT4, GX_LIGHT5, GX_LIGHT6, GX_LIGHT7, +}; /* 8018F7FC-8018F848 .text toon_proc_check__Fv */ -void toon_proc_check() { - /* Nonmatching */ +BOOL toon_proc_check() { + s32 roomNo = dComIfGp_roomControl_getStayNo(); + if (roomNo >= 0) { + dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + } + + return false; } /* 8018F848-8018F894 .text u8_data_ratio_set__FUcUcf */ -void u8_data_ratio_set(unsigned char, unsigned char, float) { - /* Nonmatching */ +s16 u8_data_ratio_set(u8 param_0, u8 param_1, f32 param_2) { + return param_0 + (int)(param_2 * (param_1 - param_0)); } /* 8018F894-8018F8E4 .text s16_data_ratio_set__Fssf */ -void s16_data_ratio_set(short, short, float) { - /* Nonmatching */ +s16 s16_data_ratio_set(s16 param_0, s16 param_1, f32 param_2) { + return param_0 + (s16)(param_2 * (param_1 - param_0)); } /* 8018F8E4-8018F9E8 .text kankyo_color_ratio_set__FUcUcfUcUcfsf */ -void kankyo_color_ratio_set(unsigned char, unsigned char, float, unsigned char, unsigned char, float, short, float) { - /* Nonmatching */ +// NONMATCHING - one tiny regswap +s16 kankyo_color_ratio_set(u8 i_b0A, u8 i_b0B, f32 i_blendAB0, u8 i_b1A, u8 i_b1B, f32 i_blendAB1, + s16 i_add, f32 i_mul) { + s16 a = s16_data_ratio_set(i_b0A, i_b0B, i_blendAB0); + s16 b = s16_data_ratio_set(i_b1A, i_b1B, i_blendAB0); + s16 rt = s16_data_ratio_set(a, b, i_blendAB1) + i_add; + + rt *= g_env_light.mAllColRatio * i_mul; + if (rt < 0) { + rt = 0; + } + + if (rt > 0xFF) { + rt = 0xFF; + } + + return rt; } /* 8018F9E8-8018F9F8 .text fl_data_ratio_set__Ffff */ -void fl_data_ratio_set(float, float, float) { - /* Nonmatching */ +f32 fl_data_ratio_set(f32 param_0, f32 param_1, f32 param_2) { + return param_0 + param_2 * (param_1 - param_0); } /* 8018F9F8-8018FAE0 .text float_kankyo_color_ratio_set__Fffffffff */ -void float_kankyo_color_ratio_set(float, float, float, float, float, float, float, float) { - /* Nonmatching */ +f32 float_kankyo_color_ratio_set(f32 param_0, f32 param_1, f32 param_2, f32 param_3, f32 param_4, + f32 param_5, f32 param_6, f32 param_7) { + f32 temp_f1; + f32 temp_f31; + + temp_f31 = fl_data_ratio_set(param_0, param_1, param_2); + temp_f1 = fl_data_ratio_set(temp_f31, fl_data_ratio_set(param_3, param_4, param_2), param_5); + + f32 rt = temp_f1 + (param_7 * (param_6 - temp_f1)); + if (rt < 0.0f) { + rt = 0.0f; + } + + return rt; } /* 8018FAE0-8018FB14 .text get_parcent__Ffff */ -void get_parcent(float, float, float) { - /* Nonmatching */ +f32 get_parcent(f32 param_0, f32 param_1, f32 param_2) { + f32 temp_f1; + f32 temp_f2; + f32 temp_f4 = param_0 - param_1; + + if (0.0f != temp_f4) { + temp_f1 = 1.0f - (param_0 - param_2) / temp_f4; + if (!(temp_f1 >= 1.0f)) { + return temp_f1; + } + } + return 1.0f; } /* 8018FB14-8018FCFC .text dKy_light_influence_id__F4cXyzi */ -void dKy_light_influence_id(cXyz, int) { - /* Nonmatching */ +int dKy_light_influence_id(cXyz param_0, int param_1) { + f32 var_f31 = 1000000.0f; + + int var_r28 = -1; + int var_r27 = -1; + + int j, i; + + for (i = 0; i <= param_1; i++) { + for (j = 0; j < 200; j++) { + if (g_env_light.mpPLights[j] != NULL && (i == 0 || j != var_r28) && + g_env_light.mpPLights[j]->mPower > 0.01f) + { + if (var_f31 > param_0.abs(g_env_light.mpPLights[j]->mPos)) { + var_f31 = param_0.abs(g_env_light.mpPLights[j]->mPos); + + if (i == 0) { + var_r28 = j; + } else { + var_r27 = j; + } + } + + if (g_env_light.mpPLights[j]->mIdx < 0) { + if (i == 0) { + var_r28 = j; + } + break; + } + } + } + var_f31 = 1000000.0f; + } + + int ret; + if (param_1 == 0) { + ret = var_r28; + } else { + ret = var_r27; + } + + return ret; } /* 8018FCFC-8018FEC4 .text dKy_eflight_influence_id__F4cXyzi */ -void dKy_eflight_influence_id(cXyz, int) { - /* Nonmatching */ +int dKy_eflight_influence_id(cXyz param_0, int param_1) { + f32 var_f31 = 1000000.0f; + + int var_r28 = -1; + int var_r27 = -1; + + int j, i; + + for (i = 0; i <= param_1; i++) { + for (j = 0; j < 10; j++) { + if (g_env_light.mpEfLights[j] != NULL && (i == 0 || j != var_r28)) { + if (var_f31 > param_0.abs(g_env_light.mpEfLights[j]->mPos) && + g_env_light.mpEfLights[j]->mPower > 0.01f) + { + var_f31 = param_0.abs(g_env_light.mpEfLights[j]->mPos); + + if (i == 0) { + var_r28 = j; + } else { + var_r27 = j; + } + } + } + } + var_f31 = 1000000.0f; + } + + int ret; + if (param_1 == 0) { + ret = var_r28; + } else { + ret = var_r27; + } + + return ret; } /* 8018FEC4-8018FF00 .text dKy_eflight_influence_pos__Fi */ -void dKy_eflight_influence_pos(int) { - /* Nonmatching */ +cXyz dKy_eflight_influence_pos(int i_eflightIdx) { + if (i_eflightIdx < 0) { + i_eflightIdx = 0; + } + + return g_env_light.mpEfLights[i_eflightIdx]->mPos; } /* 8018FF00-8018FF2C .text dKy_light_influence_col__Fi */ -void dKy_light_influence_col(int) { - /* Nonmatching */ +GXColorS10 dKy_light_influence_col(int i_lightIdx) { + return g_env_light.mpPLights[i_lightIdx >= 0 ? i_lightIdx : 0]->mColor; } /* 8018FF2C-8018FF54 .text dKy_light_influence_power__Fi */ -void dKy_light_influence_power(int) { - /* Nonmatching */ +f32 dKy_light_influence_power(int i_lightIdx) { + return g_env_light.mpPLights[i_lightIdx >= 0 ? i_lightIdx : 0]->mPower; } /* 8018FF54-8018FF7C .text dKy_light_influence_yuragi__Fi */ -void dKy_light_influence_yuragi(int) { - /* Nonmatching */ +f32 dKy_light_influence_yuragi(int i_lightIdx) { + return g_env_light.mpPLights[i_lightIdx >= 0 ? i_lightIdx : 0]->mFluctuation; } /* 8018FF7C-80190020 .text dKy_light_influence_distance__F4cXyzi */ -void dKy_light_influence_distance(cXyz, int) { - /* Nonmatching */ +f32 dKy_light_influence_distance(cXyz param_0, int i_lightIdx) { + return param_0.abs(g_env_light.mpPLights[i_lightIdx >= 0 ? i_lightIdx : 0]->mPos); } /* 80190020-8019004C .text dKy_eflight_influence_col__Fi */ -void dKy_eflight_influence_col(int) { - /* Nonmatching */ +GXColorS10 dKy_eflight_influence_col(int i_eflightIdx) { + return g_env_light.mpEfLights[i_eflightIdx >= 0 ? i_eflightIdx : 0]->mColor; } /* 8019004C-80190074 .text dKy_eflight_influence_power__Fi */ -void dKy_eflight_influence_power(int) { - /* Nonmatching */ +f32 dKy_eflight_influence_power(int i_eflightIdx) { + return g_env_light.mpEfLights[i_eflightIdx >= 0 ? i_eflightIdx : 0]->mPower; } /* 80190074-8019009C .text dKy_eflight_influence_yuragi__Fi */ -void dKy_eflight_influence_yuragi(int) { - /* Nonmatching */ +f32 dKy_eflight_influence_yuragi(int i_eflightIdx) { + return g_env_light.mpEfLights[i_eflightIdx >= 0 ? i_eflightIdx : 0]->mFluctuation; } /* 8019009C-80190140 .text dKy_eflight_influence_distance__F4cXyzi */ -void dKy_eflight_influence_distance(cXyz, int) { - /* Nonmatching */ +f32 dKy_eflight_influence_distance(cXyz param_0, int i_eflightIdx) { + return param_0.abs(g_env_light.mpEfLights[i_eflightIdx >= 0 ? i_eflightIdx : 0]->mPos); } /* 80190140-801901D8 .text plight_init__Fv */ void plight_init() { - /* Nonmatching */ + g_env_light.mLightInfluence[0].mPower = 99999.9f; + + for (int i = 0; i < 200; i++) { + g_env_light.mpPLights[i] = NULL; + } + + for (int i = 0; i < 10; i++) { + g_env_light.mpEfLights[i] = NULL; + } + + for (int i = 0; i < 10; i++) { + g_env_light.mpWaveInfl[i] = NULL; + } + + g_env_light.mPlayerPLightIdx = -1; + g_env_light.mPlayerEflightIdx = -1; } /* 801901D8-801902F8 .text plight_set__Fv */ void plight_set() { - /* Nonmatching */ + int idx = 0; + + stage_plight_info_class* plight_info = dComIfGp_getStagePlightInfo(); + if (plight_info != NULL) { + g_env_light.mpPlightInfo = plight_info; + + for (int i = 0; i < dComIfGp_getStagePlightNumInfo(); i++) { + if (idx < 30) { + g_env_light.mLightInfluence[idx].mPos = plight_info[i].mPos; + g_env_light.mLightInfluence[idx].mColor.r = plight_info[i].mColorR; + g_env_light.mLightInfluence[idx].mColor.g = plight_info[i].mColorG; + g_env_light.mLightInfluence[idx].mColor.b = plight_info[i].mColorB; + g_env_light.mLightInfluence[idx].mPower = plight_info[i].mRadius * 200.0f; + g_env_light.mLightInfluence[idx].mFluctuation = plight_info[i].mFluctuation; + dKy_plight_set(&g_env_light.mLightInfluence[idx]); + idx++; + } + } + } } /* 801902F8-80190750 .text envcolor_init__Fv */ void envcolor_init() { - /* Nonmatching */ + stage_palet_info_class* palette = dComIfGp_getStagePaletteInfo(); + stage_pselect_info_class* pselect = dComIfGp_getStagePselectInfo(); + stage_envr_info_class* envr = dComIfGp_getStageEnvrInfo(); + stage_vrbox_info_class* vrbox = dComIfGp_getStageVrboxInfo(); + + for (int i = 0; i < 20; i++) { + g_regHIO.mChild[3].mFloatRegs[i] = 0.0f; + } + + for (int i = 0; i < 10; i++) { + g_regHIO.mChild[3].mShortRegs[i] = 0; + } + + mDoAud_zelAudio_c::getInterface()->initWindowPos(); + mDoAud_zelAudio_c::getInterface()->initSeaEnvPos(); + mDoAud_zelAudio_c::getInterface()->initRiverPos(); + + dKy_actor_addcol_set(0, 0, 0, 0.0f); + dKy_fog_startendz_set(0.0f, 0.0f, 0.0f); + dKy_vrbox_addcol_set(0, 0, 0, 0.0f); + + g_env_light.field_0xc48 = NULL; + g_env_light.mInitAnimTimer = 1; + g_env_light.mSchbit = 0; + g_env_light.mSchbitTimer = 0; + + g_env_light.mbVrboxInvisible = false; + g_env_light.mbContrastFlag = 0; + g_env_light.mFogAdjEnable = true; + g_env_light.mFogAdjTableType = 0; + g_env_light.mFogAdjCenter = 0x140; + dKyd_xfog_table_set(0); + + g_env_light.mAllColRatio = 1.0f; + g_env_light.mActColRatio = 1.0f; + g_env_light.mBgColRatio = 1.0f; + g_env_light.mFogColRatio = 1.0f; + g_env_light.mVrboxSoraColRatio = 1.0f; + g_env_light.mVrboxKumoColRatio = 1.0f; + + g_env_light.mAllColGatherRatio = 1.0f; + g_env_light.mActColGatherRatio = 1.0f; + g_env_light.mBgColGatherRatio = 1.0f; + g_env_light.mFogColGatherRatio = 1.0f; + g_env_light.mVrboxSoraColGatherRatio = 1.0f; + g_env_light.mVrboxKumoColGatherRatio = 1.0f; + + g_env_light.mItemGetCol_chg = 0; + g_env_light.field_0xc34 = 0.0f; + g_env_light.field_0xc2c = 0.0f; + g_env_light.field_0xc30 = 0.0f; + g_env_light.field_0xc98 = 0; + g_env_light.mbDayNightTactStop = false; + + if (dStage_stagInfo_GetSTType(dComIfGp_getStage().getStagInfo()) == 3) { + g_env_light.mpSchejule = dKyd_schejule_boss_getp(); + } else { + g_env_light.mpSchejule = dKyd_schejule_getp(); + } + + g_env_light.mEnvrIdxPrev = 0; + g_env_light.mEnvrIdxCurr = 0; + g_env_light.mColPatBlend = 1.0f; + g_env_light.field_0xc78 = NULL; + + if (dKy_checkEventNightStop()) { + g_env_light.mColpatWeather = 1; + g_env_light.mVrkumoStrength = 1.0f; + + } else { + g_env_light.mColpatWeather = 0; + g_env_light.mVrkumoStrength = 0.0f; + } + + g_env_light.mRainCountOrig = 0; + g_env_light.field_0xc68 = NULL; + g_env_light.mDiceWeatherMode = 0; + g_env_light.mDiceWeatherChangeTime = dComIfGs_getTime() + 45.0f; + if (g_env_light.mDiceWeatherChangeTime >= 360.0f) { + g_env_light.mDiceWeatherChangeTime -= 360.0f; + } + + g_env_light.mDiceWeatherState = 0; + g_env_light.mDiceWeatherCurrPattern = 0; + g_env_light.mDiceWeatherCounter = 0; + g_env_light.mDiceWeatherTime = 0.0f; + g_env_light.field_0xc8e = 0; + + g_env_light.mColpatPrev = g_env_light.mColpatWeather; + g_env_light.mColpatCurr = g_env_light.mColpatWeather; + g_env_light.mColpatPrevGather = 0xFF; + g_env_light.mColpatCurrGather = 0xFF; + g_env_light.mColPatBlendGather = -1.0f; + g_env_light.mColPatMode = 0; + g_env_light.mColPatModeGather = 0; + + if (envr != NULL) { + g_env_light.mpEnvrInfo = envr; + } else { + g_env_light.mpEnvrInfo = dKyd_dmenvr_getp(); + } + + if (palette != NULL) { + g_env_light.mpPaletInfo = palette; + } else { + g_env_light.mpPaletInfo = dKyd_dmpalet_getp(); + } + + if (pselect != NULL) { + g_env_light.mpPselectInfo = pselect; + } else { + g_env_light.mpPselectInfo = dKyd_dmpselect_getp(); + } + + if (vrbox != NULL) { + g_env_light.mpVrboxInfo = vrbox; + } else { + g_env_light.mpVrboxInfo = dKyd_dmvrbox_getp(); + } + + plight_init(); + plight_set(); + + if (g_env_light.mNextTime != -1.0f) { + dComIfGs_setTime(g_env_light.mNextTime); + g_env_light.mNextTime = -1.0f; + } + + int timeH = dStage_stagInfo_GetTimeH(dComIfGp_getStage().getStagInfo()); + if (timeH >= 0) { + dComIfGs_setTime(timeH * 15.0f); + } + g_env_light.mTimeAdv = 0.02f; + + if (dKy_checkEventNightStop()) { + dComIfGs_setTime(0.0f); + } + + memset(&g_env_light.mMoyaSE, 0, 0x10); } /* 80190750-80190804 .text __ct__18dScnKy_env_light_cFv */ dScnKy_env_light_c::dScnKy_env_light_c() { - /* Nonmatching */ + dKy_actor_addcol_set(0, 0, 0, 0.0f); + mSunPos.x = 1.0f; + mSunPos.y = 0.0f; + mSunPos.z = 0.0f; + + mMoonPos.x = -1.0f; + mMoonPos.y = 0.0f; + mMoonPos.z = 0.0f; + + mNextTime = -1.0f; } -/* 80190804-80190840 .text __dt__15WIND_INF_ENTITYFv */ -WIND_INF_ENTITY::~WIND_INF_ENTITY() { - /* Nonmatching */ -} - -/* 80190840-80190844 .text __ct__15WIND_INF_ENTITYFv */ -WIND_INF_ENTITY::WIND_INF_ENTITY() { - /* Nonmatching */ -} - -/* 80190844-80190848 .text __ct__15LIGHT_INFLUENCEFv */ -LIGHT_INFLUENCE::LIGHT_INFLUENCE() { - /* Nonmatching */ -} +dScnKy_env_light_c g_env_light; /* 80190848-80190A18 .text setDaytime__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::setDaytime() { - /* Nonmatching */ + BOOL var_r30 = false; + mCurTime = dComIfGs_getTime(); + mDayOfWeek = dComIfGs_getDate(); + + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0 && dComIfGp_roomControl_getStayNo() == 14) + { + if (dComIfGp_getStartStageLayer() == 2 || dComIfGp_getStartStageLayer() == 3) { + var_r30 = true; + } + } + + if (!dKy_checkEventNightStop() && dComIfGs_isGetItem(2, 0) && !dComIfGp_event_runCheck() && + !var_r30) + { + if (dComIfGp_roomControl_getTimePass()) { + mCurTime += mTimeAdv; + if ((u32)mCurTime >= 360.0f) { + mCurTime = 0.0f; + mDayOfWeek++; + dKankyo_DayProc(); + } + } else if (!dKy_daynight_check()) { + if (mCurTime < 165.0f) { + mCurTime += mTimeAdv; + } + } else if (mCurTime >= 270.0f && mCurTime < 345.0f) { + mCurTime += mTimeAdv; + } + } + + mDoAud_setHour(dKy_getdaytime_hour()); + mDoAud_setMinute(dKy_getdaytime_minute()); + mDoAud_setWeekday(dKy_get_dayofweek()); + + dComIfGs_setTime(mCurTime); + dComIfGs_setDate(mDayOfWeek); } /* 80190A18-80190A20 .text GetTimePass__20dStage_roomControl_cFv */ -void dStage_roomControl_c::GetTimePass() { - /* Nonmatching */ +// NONMATCHING +// making this return s8 matches this, but places where it's used want it to be s32? +s32 dStage_roomControl_c::GetTimePass() { + return m_time_pass; } /* 80190A20-80190ACC .text SetSchbit__18dScnKy_env_light_cFv */ +/** + * Parameterized scheduling system. Every frame, mSchbitTimer ticks, and if it's + * over some threshold, as defined by STAG +0x0C & 0x00, then the schedule bit + * advances one to the right. It resets once it has made eight ticks. + * + * This system can be disabled with another field in STAG. + */ void dScnKy_env_light_c::SetSchbit() { - /* Nonmatching */ + stage_stag_info_class* pstag = dComIfGp_getStageStagInfo(); + int uvar1 = pstag->field_0x0c & 0xFF; + + if (dStage_stagInfo_getStartSch(pstag) != 0) { + if (mSchbit == 0) { + mSchbit = (1 << 7); + } + + mSchbitTimer++; + if (mSchbitTimer >= uvar1 * 30) { + mSchbitTimer = 0; + mSchbit >>= 1; + if (mSchbit == 0) { + mSchbit = (1 << 7); + } + } + } } /* 80190ACC-80190C0C .text setSunpos__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::setSunpos() { - /* Nonmatching */ + camera_class* camera_p = dComIfGp_getCamera(0); + cXyz sp8; + + f32 var_f1; + if (g_env_light.mCurTime > 15.0f) { + var_f1 = g_env_light.mCurTime - 15.0f; + } else { + var_f1 = g_env_light.mCurTime + 345.0f; + } + + sp8.x = i_sinf(DEG_TO_RAD(var_f1)) * 80000.0f; + sp8.y = i_cosf(DEG_TO_RAD(var_f1)) * 80000.0f; + sp8.z = i_cosf(DEG_TO_RAD(var_f1)) * -48000.0f; + + if (!dComIfGp_event_runCheck() || g_env_light.mInitAnimTimer != 0) { + mSunPos.x = camera_p->mLookat.mEye.x + sp8.x; + mSunPos.y = camera_p->mLookat.mEye.y - sp8.y; + mSunPos.z = camera_p->mLookat.mEye.z + sp8.z; + + mMoonPos.x = camera_p->mLookat.mEye.x - sp8.x; + mMoonPos.y = camera_p->mLookat.mEye.y + sp8.y; + mMoonPos.z = camera_p->mLookat.mEye.z - sp8.z; + } } /* 80190C0C-80190C14 .text getDaytime__18dScnKy_env_light_cFv */ -void dScnKy_env_light_c::getDaytime() { - /* Nonmatching */ +f32 dScnKy_env_light_c::getDaytime() { + return mCurTime; } /* 80190C14-80190C40 .text dKy_getdaytime_hour__Fv */ -void dKy_getdaytime_hour() { - /* Nonmatching */ +int dKy_getdaytime_hour() { + return dComIfGs_getTime() / 15.0f; } /* 80190C40-80190CBC .text dKy_getdaytime_minute__Fv */ -void dKy_getdaytime_minute() { - /* Nonmatching */ +int dKy_getdaytime_minute() { + f32 tmp = ((s32)(dComIfGs_getTime() * 1000000.0f) % 15000000); + return tmp / 1000000.0f / 15.0f * 60.0f; } /* 80190CBC-80190CF8 .text dKy_daynight_check__Fv */ -void dKy_daynight_check() { - /* Nonmatching */ +BOOL dKy_daynight_check() { + s32 hour = dKy_getdaytime_hour(); + + if (hour >= 6 && hour < 18) { + return 0; // day time + } else { + return 1; // night time + } } -/* 80190CF8-801912EC .text setLight_palno_get__18dScnKy_env_light_cFPUcPUcPUcPUcPUcPUcPUcPUcPfPiPiPfPUc */ -void dScnKy_env_light_c::setLight_palno_get(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, float*, int*, int*, float*, unsigned char*) { - /* Nonmatching */ +/* 80190CF8-801912EC .text + * setLight_palno_get__18dScnKy_env_light_cFPUcPUcPUcPUcPUcPUcPUcPUcPfPiPiPfPUc */ +// NONMATCHING - not sure whats going on in the loop +void dScnKy_env_light_c::setLight_palno_get(u8* i_envrSel0, u8* i_envrSel1, u8* i_pSelIdx0, + u8* i_pSelIdx1, u8* i_palIdx0A, u8* i_palIdx0B, + u8* i_palIdx1A, u8* i_palIdx1B, f32* i_blendPalAB, + int* i_pSelPalIdx0, int* i_pSelPalIdx1, + f32* i_blendPal01, u8* i_initTimer) { + if (*i_initTimer != 0) { + *i_initTimer += 1; + if (*i_initTimer > 20) { + *i_initTimer = 0; + } + + if (g_env_light.mColPatMode == 0 && g_env_light.mColPatModeGather == 0) { + *i_blendPal01 = g_env_light.mColPatBlend; + + if (*i_blendPal01 >= 1.0f) { + *i_envrSel0 = *i_envrSel1; + *i_pSelIdx0 = *i_pSelIdx1; + } + } + } + + dScnKy__Schedule* schedule_p; + for (int i = 0; i < 11; i++) { + schedule_p = &mpSchejule[i]; + if (mCurTime >= schedule_p->mTimeEnd && mCurTime <= schedule_p->mTimeBegin) { + break; + } + } + + *i_pSelPalIdx0 = schedule_p->mPalIdx0; + *i_pSelPalIdx1 = schedule_p->mPalIdx1; + + *i_blendPalAB = get_parcent(schedule_p->mTimeBegin, schedule_p->mTimeEnd, mCurTime); + + stage_envr_info_class* envr_p = &g_env_light.mpEnvrInfo[*i_envrSel0]; + stage_pselect_info_class* psel_p; + switch (*i_pSelIdx0) { + case 0: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[0]]; + break; + case 1: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[1]]; + break; + case 2: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[2]]; + break; + case 3: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[3]]; + break; + case 4: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[4]]; + break; + case 5: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[5]]; + break; + case 6: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[6]]; + break; + case 7: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[7]]; + break; + } + + switch (*i_pSelPalIdx0) { + case 0: + *i_palIdx0A = psel_p->mPalIdx[0]; + break; + case 1: + *i_palIdx0A = psel_p->mPalIdx[1]; + break; + case 2: + *i_palIdx0A = psel_p->mPalIdx[2]; + break; + case 3: + *i_palIdx0A = psel_p->mPalIdx[3]; + break; + case 4: + *i_palIdx0A = psel_p->mPalIdx[4]; + break; + case 5: + *i_palIdx0A = psel_p->mPalIdx[5]; + break; + } + + switch (*i_pSelPalIdx1) { + case 0: + *i_palIdx0B = psel_p->mPalIdx[0]; + break; + case 1: + *i_palIdx0B = psel_p->mPalIdx[1]; + break; + case 2: + *i_palIdx0B = psel_p->mPalIdx[2]; + break; + case 3: + *i_palIdx0B = psel_p->mPalIdx[3]; + break; + case 4: + *i_palIdx0B = psel_p->mPalIdx[4]; + break; + case 5: + *i_palIdx0B = psel_p->mPalIdx[5]; + break; + } + + envr_p = &g_env_light.mpEnvrInfo[*i_envrSel1]; + switch (*i_pSelIdx1) { + case 0: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[0]]; + break; + case 1: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[1]]; + break; + case 2: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[2]]; + break; + case 3: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[3]]; + break; + case 4: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[4]]; + break; + case 5: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[5]]; + break; + case 6: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[6]]; + break; + case 7: + psel_p = &g_env_light.mpPselectInfo[envr_p->mPselIdx[7]]; + break; + } + + if (*i_envrSel0 != *i_envrSel1 || *i_pSelIdx0 != *i_pSelIdx1) { + if (psel_p->mChangeRate < 0.033333335f) { + psel_p->mChangeRate = 0.033333335f; + } + + if (g_env_light.mColPatMode == 0) { + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0 && *i_pSelIdx0 != *i_pSelIdx1) { + *i_blendPal01 += 0.0033333334f; + } else if (psel_p->mChangeRate > 0.0f) { + *i_blendPal01 += 0.0033333334f / psel_p->mChangeRate; + } + + if (*i_blendPal01 >= 1.0f) { + *i_envrSel0 = *i_envrSel1; + *i_pSelIdx0 = *i_pSelIdx1; + *i_blendPal01 = 1.0f; + } + } + } + + switch (*i_pSelPalIdx0) { + case 0: + *i_palIdx1A = psel_p->mPalIdx[0]; + break; + case 1: + *i_palIdx1A = psel_p->mPalIdx[1]; + break; + case 2: + *i_palIdx1A = psel_p->mPalIdx[2]; + break; + case 3: + *i_palIdx1A = psel_p->mPalIdx[3]; + break; + case 4: + *i_palIdx1A = psel_p->mPalIdx[4]; + break; + case 5: + *i_palIdx1A = psel_p->mPalIdx[5]; + break; + } + + switch (*i_pSelPalIdx1) { + case 0: + *i_palIdx1B = psel_p->mPalIdx[0]; + break; + case 1: + *i_palIdx1B = psel_p->mPalIdx[1]; + break; + case 2: + *i_palIdx1B = psel_p->mPalIdx[2]; + break; + case 3: + *i_palIdx1B = psel_p->mPalIdx[3]; + break; + case 4: + *i_palIdx1B = psel_p->mPalIdx[4]; + break; + case 5: + *i_palIdx1B = psel_p->mPalIdx[5]; + break; + } } /* 801912EC-80191C44 .text setLight__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::setLight() { + u8 pale0; + u8 pale2; + u8 pale1; + u8 pale3; + f32 blendAB; + int palIdx0; + int palIdx1; + + setLight_palno_get(&g_env_light.mEnvrIdxPrev, &g_env_light.mEnvrIdxCurr, + &g_env_light.mColpatPrev, &g_env_light.mColpatCurr, &pale0, &pale1, &pale2, + &pale3, &blendAB, &palIdx0, &palIdx1, &g_env_light.mColPatBlend, + &g_env_light.mInitAnimTimer); + + stage_palet_info_class* pale0_p = &g_env_light.mpPaletInfo[pale0]; + stage_palet_info_class* pale1_p = &g_env_light.mpPaletInfo[pale1]; + stage_palet_info_class* pale2_p = &g_env_light.mpPaletInfo[pale2]; + stage_palet_info_class* pale3_p = &g_env_light.mpPaletInfo[pale3]; + + mActorC0.r = + kankyo_color_ratio_set(pale0_p->mActor_C0.r, pale1_p->mActor_C0.r, blendAB, + pale2_p->mActor_C0.r, pale3_p->mActor_C0.r, g_env_light.mColPatBlend, + 0, g_env_light.mActColRatio * g_env_light.mActColRatio); + + mActorC0.g = + kankyo_color_ratio_set(pale0_p->mActor_C0.g, pale1_p->mActor_C0.g, blendAB, + pale2_p->mActor_C0.g, pale3_p->mActor_C0.g, g_env_light.mColPatBlend, + 0, g_env_light.mActColRatio * g_env_light.mActColRatio); + + mActorC0.b = + kankyo_color_ratio_set(pale0_p->mActor_C0.b, pale1_p->mActor_C0.b, blendAB, + pale2_p->mActor_C0.b, pale3_p->mActor_C0.b, g_env_light.mColPatBlend, + 0, g_env_light.mActColRatio * g_env_light.mActColRatio); + + mActorK0.r = kankyo_color_ratio_set(pale0_p->mActor_K0.r, pale1_p->mActor_K0.r, blendAB, + pale2_p->mActor_K0.r, pale3_p->mActor_K0.r, + g_env_light.mColPatBlend, 0, g_env_light.mActColRatio); + + mActorK0.g = kankyo_color_ratio_set(pale0_p->mActor_K0.g, pale1_p->mActor_K0.g, blendAB, + pale2_p->mActor_K0.g, pale3_p->mActor_K0.g, + g_env_light.mColPatBlend, 0, g_env_light.mActColRatio); + + mActorK0.b = kankyo_color_ratio_set(pale0_p->mActor_K0.b, pale1_p->mActor_K0.b, blendAB, + pale2_p->mActor_K0.b, pale3_p->mActor_K0.b, + g_env_light.mColPatBlend, 0, g_env_light.mActColRatio); + + mBG0_C0.r = kankyo_color_ratio_set(pale0_p->mBG0_C0.r, pale1_p->mBG0_C0.r, blendAB, + pale2_p->mBG0_C0.r, pale3_p->mBG0_C0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG0_C0.g = kankyo_color_ratio_set(pale0_p->mBG0_C0.g, pale1_p->mBG0_C0.g, blendAB, + pale2_p->mBG0_C0.g, pale3_p->mBG0_C0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG0_C0.b = kankyo_color_ratio_set(pale0_p->mBG0_C0.b, pale1_p->mBG0_C0.b, blendAB, + pale2_p->mBG0_C0.b, pale3_p->mBG0_C0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG0_K0.r = kankyo_color_ratio_set(pale0_p->mBG0_K0.r, pale1_p->mBG0_K0.r, blendAB, + pale2_p->mBG0_K0.r, pale3_p->mBG0_K0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG0_K0.g = kankyo_color_ratio_set(pale0_p->mBG0_K0.g, pale1_p->mBG0_K0.g, blendAB, + pale2_p->mBG0_K0.g, pale3_p->mBG0_K0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG0_K0.b = kankyo_color_ratio_set(pale0_p->mBG0_K0.b, pale1_p->mBG0_K0.b, blendAB, + pale2_p->mBG0_K0.b, pale3_p->mBG0_K0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG1_C0.r = kankyo_color_ratio_set(pale0_p->mBG1_C0.r, pale1_p->mBG1_C0.r, blendAB, + pale2_p->mBG1_C0.r, pale3_p->mBG1_C0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG1_C0.g = kankyo_color_ratio_set(pale0_p->mBG1_C0.g, pale1_p->mBG1_C0.g, blendAB, + pale2_p->mBG1_C0.g, pale3_p->mBG1_C0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG1_C0.b = kankyo_color_ratio_set(pale0_p->mBG1_C0.b, pale1_p->mBG1_C0.b, blendAB, + pale2_p->mBG1_C0.b, pale3_p->mBG1_C0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG1_K0.r = kankyo_color_ratio_set(pale0_p->mBG1_K0.r, pale1_p->mBG1_K0.r, blendAB, + pale2_p->mBG1_K0.r, pale3_p->mBG1_K0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG1_K0.g = kankyo_color_ratio_set(pale0_p->mBG1_K0.g, pale1_p->mBG1_K0.g, blendAB, + pale2_p->mBG1_K0.g, pale3_p->mBG1_K0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG1_K0.b = kankyo_color_ratio_set(pale0_p->mBG1_K0.b, pale1_p->mBG1_K0.b, blendAB, + pale2_p->mBG1_K0.b, pale3_p->mBG1_K0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG2_C0.r = kankyo_color_ratio_set(pale0_p->mBG2_C0.r, pale1_p->mBG2_C0.r, blendAB, + pale2_p->mBG2_C0.r, pale3_p->mBG2_C0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG2_C0.g = kankyo_color_ratio_set(pale0_p->mBG2_C0.g, pale1_p->mBG2_C0.g, blendAB, + pale2_p->mBG2_C0.g, pale3_p->mBG2_C0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG2_C0.b = kankyo_color_ratio_set(pale0_p->mBG2_C0.b, pale1_p->mBG2_C0.b, blendAB, + pale2_p->mBG2_C0.b, pale3_p->mBG2_C0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG2_K0.r = kankyo_color_ratio_set(pale0_p->mBG2_K0.r, pale1_p->mBG2_K0.r, blendAB, + pale2_p->mBG2_K0.r, pale3_p->mBG2_K0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG2_K0.g = kankyo_color_ratio_set(pale0_p->mBG2_K0.g, pale1_p->mBG2_K0.g, blendAB, + pale2_p->mBG2_K0.g, pale3_p->mBG2_K0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG2_K0.b = kankyo_color_ratio_set(pale0_p->mBG2_K0.b, pale1_p->mBG2_K0.b, blendAB, + pale2_p->mBG2_K0.b, pale3_p->mBG2_K0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG3_C0.r = kankyo_color_ratio_set(pale0_p->mBG3_C0.r, pale1_p->mBG3_C0.r, blendAB, + pale2_p->mBG3_C0.r, pale3_p->mBG3_C0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG3_C0.g = kankyo_color_ratio_set(pale0_p->mBG3_C0.g, pale1_p->mBG3_C0.g, blendAB, + pale2_p->mBG3_C0.g, pale3_p->mBG3_C0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG3_C0.b = kankyo_color_ratio_set(pale0_p->mBG3_C0.b, pale1_p->mBG3_C0.b, blendAB, + pale2_p->mBG3_C0.b, pale3_p->mBG3_C0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG3_K0.r = kankyo_color_ratio_set(pale0_p->mBG3_K0.r, pale1_p->mBG3_K0.r, blendAB, + pale2_p->mBG3_K0.r, pale3_p->mBG3_K0.r, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG3_K0.g = kankyo_color_ratio_set(pale0_p->mBG3_K0.g, pale1_p->mBG3_K0.g, blendAB, + pale2_p->mBG3_K0.g, pale3_p->mBG3_K0.g, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mBG3_K0.b = kankyo_color_ratio_set(pale0_p->mBG3_K0.b, pale1_p->mBG3_K0.b, blendAB, + pale2_p->mBG3_K0.b, pale3_p->mBG3_K0.b, + g_env_light.mColPatBlend, 0, g_env_light.mBgColRatio); + + mFogColor.r = kankyo_color_ratio_set(pale0_p->mFog.r, pale1_p->mFog.r, blendAB, pale2_p->mFog.r, + pale3_p->mFog.r, g_env_light.mColPatBlend, mAddColFog.r, + g_env_light.mFogColRatio); + + mFogColor.g = kankyo_color_ratio_set(pale0_p->mFog.g, pale1_p->mFog.g, blendAB, pale2_p->mFog.g, + pale3_p->mFog.g, g_env_light.mColPatBlend, mAddColFog.g, + g_env_light.mFogColRatio); + + mFogColor.b = kankyo_color_ratio_set(pale0_p->mFog.b, pale1_p->mFog.b, blendAB, pale2_p->mFog.b, + pale3_p->mFog.b, g_env_light.mColPatBlend, mAddColFog.b, + g_env_light.mFogColRatio); + + mFogStartZ__setLight = float_kankyo_color_ratio_set( + pale0_p->mFogStartZ, pale1_p->mFogStartZ, blendAB, pale2_p->mFogStartZ, pale3_p->mFogStartZ, + g_env_light.mColPatBlend, g_env_light.mFogStartZ, g_env_light.mFogRatio); + + mFogEndZ__setLight = float_kankyo_color_ratio_set( + pale0_p->mFogEndZ, pale1_p->mFogEndZ, blendAB, pale2_p->mFogEndZ, pale3_p->mFogEndZ, + g_env_light.mColPatBlend, g_env_light.mFogEndZ, g_env_light.mFogRatio); + + if (mFogStartZ__setLight > mFogEndZ__setLight) { + mFogStartZ__setLight = mFogEndZ__setLight; + } + + stage_vrbox_info_class* vrbox0_p = &g_env_light.mpVrboxInfo[pale0_p->mVirtIdx]; + stage_vrbox_info_class* vrbox1_p = &g_env_light.mpVrboxInfo[pale1_p->mVirtIdx]; + stage_vrbox_info_class* vrbox2_p = &g_env_light.mpVrboxInfo[pale2_p->mVirtIdx]; + stage_vrbox_info_class* vrbox3_p = &g_env_light.mpVrboxInfo[pale3_p->mVirtIdx]; + + mVrSkyColor.r = kankyo_color_ratio_set(vrbox0_p->mSkyColor.r, vrbox1_p->mSkyColor.r, blendAB, + vrbox2_p->mSkyColor.r, vrbox3_p->mSkyColor.r, + g_env_light.mColPatBlend, mVrboxAddColSky0.r, + g_env_light.mVrboxSoraColRatio); + + mVrSkyColor.g = kankyo_color_ratio_set(vrbox0_p->mSkyColor.g, vrbox1_p->mSkyColor.g, blendAB, + vrbox2_p->mSkyColor.g, vrbox3_p->mSkyColor.g, + g_env_light.mColPatBlend, mVrboxAddColSky0.g, + g_env_light.mVrboxSoraColRatio); + + mVrSkyColor.b = kankyo_color_ratio_set(vrbox0_p->mSkyColor.b, vrbox1_p->mSkyColor.b, blendAB, + vrbox2_p->mSkyColor.b, vrbox3_p->mSkyColor.b, + g_env_light.mColPatBlend, mVrboxAddColSky0.b, + g_env_light.mVrboxSoraColRatio); + + mVrSkyColor.a = 0xFF; + + mVrUsoUmiColor.r = kankyo_color_ratio_set(vrbox0_p->mUsoUmiColor.r, vrbox1_p->mUsoUmiColor.r, + blendAB, vrbox2_p->mUsoUmiColor.r, + vrbox3_p->mUsoUmiColor.r, g_env_light.mColPatBlend, + mVrboxAddColSky0.r, g_env_light.mVrboxSoraColRatio); + + mVrUsoUmiColor.g = kankyo_color_ratio_set(vrbox0_p->mUsoUmiColor.g, vrbox1_p->mUsoUmiColor.g, + blendAB, vrbox2_p->mUsoUmiColor.g, + vrbox3_p->mUsoUmiColor.g, g_env_light.mColPatBlend, + mVrboxAddColSky0.g, g_env_light.mVrboxSoraColRatio); + + mVrUsoUmiColor.b = kankyo_color_ratio_set(vrbox0_p->mUsoUmiColor.b, vrbox1_p->mUsoUmiColor.b, + blendAB, vrbox2_p->mUsoUmiColor.b, + vrbox3_p->mUsoUmiColor.b, g_env_light.mColPatBlend, + mVrboxAddColSky0.b, g_env_light.mVrboxSoraColRatio); + + mVrUsoUmiColor.a = 0xFF; + + mVrkumoColor.r = kankyo_color_ratio_set(vrbox0_p->mKumoColor.r, vrbox1_p->mKumoColor.r, blendAB, + vrbox2_p->mKumoColor.r, vrbox3_p->mKumoColor.r, + g_env_light.mColPatBlend, mVrboxAddColSky0.r, + g_env_light.mVrboxKumoColRatio); + + mVrkumoColor.g = kankyo_color_ratio_set(vrbox0_p->mKumoColor.g, vrbox1_p->mKumoColor.g, blendAB, + vrbox2_p->mKumoColor.g, vrbox3_p->mKumoColor.g, + g_env_light.mColPatBlend, mVrboxAddColSky0.g, + g_env_light.mVrboxKumoColRatio); + + mVrkumoColor.b = kankyo_color_ratio_set(vrbox0_p->mKumoColor.b, vrbox1_p->mKumoColor.b, blendAB, + vrbox2_p->mKumoColor.b, vrbox3_p->mKumoColor.b, + g_env_light.mColPatBlend, mVrboxAddColSky0.b, + g_env_light.mVrboxKumoColRatio); + + mVrkumoColor.a = kankyo_color_ratio_set(vrbox0_p->mKumoColor.a, vrbox1_p->mKumoColor.a, blendAB, + vrbox2_p->mKumoColor.a, vrbox3_p->mKumoColor.a, + g_env_light.mColPatBlend, 0, 1.0f); + + mVrkumoCenterColor.r = kankyo_color_ratio_set( + vrbox0_p->mKumoCenterColor.r, vrbox1_p->mKumoCenterColor.r, blendAB, + vrbox2_p->mKumoCenterColor.r, vrbox3_p->mKumoCenterColor.r, g_env_light.mColPatBlend, + mVrboxAddColSky0.r, g_env_light.mVrboxKumoColRatio); + + mVrkumoCenterColor.g = kankyo_color_ratio_set( + vrbox0_p->mKumoCenterColor.g, vrbox1_p->mKumoCenterColor.g, blendAB, + vrbox2_p->mKumoCenterColor.g, vrbox3_p->mKumoCenterColor.g, g_env_light.mColPatBlend, + mVrboxAddColSky0.g, g_env_light.mVrboxKumoColRatio); + + mVrkumoCenterColor.b = kankyo_color_ratio_set( + vrbox0_p->mKumoCenterColor.b, vrbox1_p->mKumoCenterColor.b, blendAB, + vrbox2_p->mKumoCenterColor.b, vrbox3_p->mKumoCenterColor.b, g_env_light.mColPatBlend, + mVrboxAddColSky0.b, g_env_light.mVrboxKumoColRatio); + + mVrKasumiMaeColor.r = kankyo_color_ratio_set( + vrbox0_p->mKasumiMaeColor.r, vrbox1_p->mKasumiMaeColor.r, blendAB, + vrbox2_p->mKasumiMaeColor.r, vrbox3_p->mKasumiMaeColor.r, g_env_light.mColPatBlend, + mVrboxAddColKasumi.r, g_env_light.mVrboxSoraColRatio); + + mVrKasumiMaeColor.g = kankyo_color_ratio_set( + vrbox0_p->mKasumiMaeColor.g, vrbox1_p->mKasumiMaeColor.g, blendAB, + vrbox2_p->mKasumiMaeColor.g, vrbox3_p->mKasumiMaeColor.g, g_env_light.mColPatBlend, + mVrboxAddColKasumi.g, g_env_light.mVrboxSoraColRatio); + + mVrKasumiMaeColor.b = kankyo_color_ratio_set( + vrbox0_p->mKasumiMaeColor.b, vrbox1_p->mKasumiMaeColor.b, blendAB, + vrbox2_p->mKasumiMaeColor.b, vrbox3_p->mKasumiMaeColor.b, g_env_light.mColPatBlend, + mVrboxAddColKasumi.b, g_env_light.mVrboxSoraColRatio); + + mVrKasumiMaeColor.a = 0xFF; +} + +/* 80191C44-8019223C .text + * setLight_bg__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10PfPf + */ +void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c* i_tevstr, GXColorS10* i_BG0_C0, + GXColorS10* i_BG0_K0, GXColorS10* i_BG1_C0, + GXColorS10* i_BG1_K0, GXColorS10* i_BG2_C0, + GXColorS10* i_BG2_K0, GXColorS10* i_BG3_C0, + GXColorS10* i_BG3_K0, GXColorS10* i_fog, f32* i_fogStartZ, + f32* i_fogEndZ) { + u8 palIdx0A; + u8 palIdx1A; + u8 palIdx0B; + u8 palIdx1B; + f32 blendAB; + int palIdx0; + int palIdx1; + + i_tevstr->mColpatPrev = g_env_light.mColpatPrev; + i_tevstr->mColpatCurr = g_env_light.mColpatCurr; + if (i_tevstr->mColpatPrev != i_tevstr->mColpatCurr) { + i_tevstr->mColpatBlend = g_env_light.mColPatBlend; + } + + setLight_palno_get(&i_tevstr->mEnvrIdxPrev, &i_tevstr->mEnvrIdxCurr, &i_tevstr->mColpatPrev, + &i_tevstr->mColpatCurr, &palIdx0A, &palIdx0B, &palIdx1A, &palIdx1B, &blendAB, + &palIdx0, &palIdx1, &i_tevstr->mColpatBlend, &i_tevstr->mInitTimer); + + stage_palet_info_class* pale0_p = &g_env_light.mpPaletInfo[palIdx0A]; + stage_palet_info_class* pale1_p = &g_env_light.mpPaletInfo[palIdx0B]; + stage_palet_info_class* pale2_p = &g_env_light.mpPaletInfo[palIdx1A]; + stage_palet_info_class* pale3_p = &g_env_light.mpPaletInfo[palIdx1B]; + + i_BG0_C0->r = kankyo_color_ratio_set( + pale0_p->mBG0_C0.r, pale1_p->mBG0_C0.r, blendAB, pale2_p->mBG0_C0.r, pale3_p->mBG0_C0.r, + i_tevstr->mColpatBlend, mBgAddColAmb.r, g_env_light.mBgColRatio); + + i_BG0_C0->g = kankyo_color_ratio_set( + pale0_p->mBG0_C0.g, pale1_p->mBG0_C0.g, blendAB, pale2_p->mBG0_C0.g, pale3_p->mBG0_C0.g, + i_tevstr->mColpatBlend, mBgAddColAmb.g, g_env_light.mBgColRatio); + + i_BG0_C0->b = kankyo_color_ratio_set( + pale0_p->mBG0_C0.b, pale1_p->mBG0_C0.b, blendAB, pale2_p->mBG0_C0.b, pale3_p->mBG0_C0.b, + i_tevstr->mColpatBlend, mBgAddColAmb.b, g_env_light.mBgColRatio); + + i_BG0_K0->r = kankyo_color_ratio_set( + pale0_p->mBG0_K0.r, pale1_p->mBG0_K0.r, blendAB, pale2_p->mBG0_K0.r, pale3_p->mBG0_K0.r, + i_tevstr->mColpatBlend, mBgAddColDif.r, g_env_light.mBgColRatio); + + i_BG0_K0->g = kankyo_color_ratio_set( + pale0_p->mBG0_K0.g, pale1_p->mBG0_K0.g, blendAB, pale2_p->mBG0_K0.g, pale3_p->mBG0_K0.g, + i_tevstr->mColpatBlend, mBgAddColDif.g, g_env_light.mBgColRatio); + + i_BG0_K0->b = kankyo_color_ratio_set( + pale0_p->mBG0_K0.b, pale1_p->mBG0_K0.b, blendAB, pale2_p->mBG0_K0.b, pale3_p->mBG0_K0.b, + i_tevstr->mColpatBlend, mBgAddColDif.b, g_env_light.mBgColRatio); + + i_BG1_C0->r = kankyo_color_ratio_set( + pale0_p->mBG1_C0.r, pale1_p->mBG1_C0.r, blendAB, pale2_p->mBG1_C0.r, pale3_p->mBG1_C0.r, + i_tevstr->mColpatBlend, mBg1AddColAmb.r, g_env_light.mBgColRatio); + + i_BG1_C0->g = kankyo_color_ratio_set( + pale0_p->mBG1_C0.g, pale1_p->mBG1_C0.g, blendAB, pale2_p->mBG1_C0.g, pale3_p->mBG1_C0.g, + i_tevstr->mColpatBlend, mBg1AddColAmb.g, g_env_light.mBgColRatio); + + i_BG1_C0->b = kankyo_color_ratio_set( + pale0_p->mBG1_C0.b, pale1_p->mBG1_C0.b, blendAB, pale2_p->mBG1_C0.b, pale3_p->mBG1_C0.b, + i_tevstr->mColpatBlend, mBg1AddColAmb.b, g_env_light.mBgColRatio); + + i_BG1_K0->r = kankyo_color_ratio_set( + pale0_p->mBG1_K0.r, pale1_p->mBG1_K0.r, blendAB, pale2_p->mBG1_K0.r, pale3_p->mBG1_K0.r, + i_tevstr->mColpatBlend, mBg1AddColDif.r, g_env_light.mBgColRatio); + + i_BG1_K0->g = kankyo_color_ratio_set( + pale0_p->mBG1_K0.g, pale1_p->mBG1_K0.g, blendAB, pale2_p->mBG1_K0.g, pale3_p->mBG1_K0.g, + i_tevstr->mColpatBlend, mBg1AddColDif.g, g_env_light.mBgColRatio); + + i_BG1_K0->b = kankyo_color_ratio_set( + pale0_p->mBG1_K0.b, pale1_p->mBG1_K0.b, blendAB, pale2_p->mBG1_K0.b, pale3_p->mBG1_K0.b, + i_tevstr->mColpatBlend, mBg1AddColDif.b, g_env_light.mBgColRatio); + + i_BG2_C0->r = kankyo_color_ratio_set( + pale0_p->mBG2_C0.r, pale1_p->mBG2_C0.r, blendAB, pale2_p->mBG2_C0.r, pale3_p->mBG2_C0.r, + i_tevstr->mColpatBlend, mBg2AddColAmb.r, g_env_light.mBgColRatio); + + i_BG2_C0->g = kankyo_color_ratio_set( + pale0_p->mBG2_C0.g, pale1_p->mBG2_C0.g, blendAB, pale2_p->mBG2_C0.g, pale3_p->mBG2_C0.g, + i_tevstr->mColpatBlend, mBg2AddColAmb.g, g_env_light.mBgColRatio); + + i_BG2_C0->b = kankyo_color_ratio_set( + pale0_p->mBG2_C0.b, pale1_p->mBG2_C0.b, blendAB, pale2_p->mBG2_C0.b, pale3_p->mBG2_C0.b, + i_tevstr->mColpatBlend, mBg2AddColAmb.b, g_env_light.mBgColRatio); + + i_BG2_K0->r = kankyo_color_ratio_set( + pale0_p->mBG2_K0.r, pale1_p->mBG2_K0.r, blendAB, pale2_p->mBG2_K0.r, pale3_p->mBG2_K0.r, + i_tevstr->mColpatBlend, mBg2AddColDif.r, g_env_light.mBgColRatio); + + i_BG2_K0->g = kankyo_color_ratio_set( + pale0_p->mBG2_K0.g, pale1_p->mBG2_K0.g, blendAB, pale2_p->mBG2_K0.g, pale3_p->mBG2_K0.g, + i_tevstr->mColpatBlend, mBg2AddColDif.g, g_env_light.mBgColRatio); + + i_BG2_K0->b = kankyo_color_ratio_set( + pale0_p->mBG2_K0.b, pale1_p->mBG2_K0.b, blendAB, pale2_p->mBG2_K0.b, pale3_p->mBG2_K0.b, + i_tevstr->mColpatBlend, mBg2AddColDif.b, g_env_light.mBgColRatio); + + i_BG3_C0->r = kankyo_color_ratio_set( + pale0_p->mBG3_C0.r, pale1_p->mBG3_C0.r, blendAB, pale2_p->mBG3_C0.r, pale3_p->mBG3_C0.r, + i_tevstr->mColpatBlend, mBg3AddColAmb.r, g_env_light.mBgColRatio); + + i_BG3_C0->g = kankyo_color_ratio_set( + pale0_p->mBG3_C0.g, pale1_p->mBG3_C0.g, blendAB, pale2_p->mBG3_C0.g, pale3_p->mBG3_C0.g, + i_tevstr->mColpatBlend, mBg3AddColAmb.g, g_env_light.mBgColRatio); + + i_BG3_C0->b = kankyo_color_ratio_set( + pale0_p->mBG3_C0.b, pale1_p->mBG3_C0.b, blendAB, pale2_p->mBG3_C0.b, pale3_p->mBG3_C0.b, + i_tevstr->mColpatBlend, mBg3AddColAmb.b, g_env_light.mBgColRatio); + + i_BG3_K0->r = kankyo_color_ratio_set( + pale0_p->mBG3_K0.r, pale1_p->mBG3_K0.r, blendAB, pale2_p->mBG3_K0.r, pale3_p->mBG3_K0.r, + i_tevstr->mColpatBlend, mBg3AddColDif.r, g_env_light.mBgColRatio); + + i_BG3_K0->g = kankyo_color_ratio_set( + pale0_p->mBG3_K0.g, pale1_p->mBG3_K0.g, blendAB, pale2_p->mBG3_K0.g, pale3_p->mBG3_K0.g, + i_tevstr->mColpatBlend, mBg3AddColDif.g, g_env_light.mBgColRatio); + + i_BG3_K0->b = kankyo_color_ratio_set( + pale0_p->mBG3_K0.b, pale1_p->mBG3_K0.b, blendAB, pale2_p->mBG3_K0.b, pale3_p->mBG3_K0.b, + i_tevstr->mColpatBlend, mBg3AddColDif.b, g_env_light.mBgColRatio); + + i_BG3_K0->a = 0xFF; + i_BG3_C0->a = 0xFF; + i_BG2_K0->a = 0xFF; + i_BG2_C0->a = 0xFF; + i_BG1_K0->a = 0xFF; + i_BG1_C0->a = 0xFF; + i_BG0_K0->a = 0xFF; + i_BG0_C0->a = 0xFF; + + i_fog->r = kankyo_color_ratio_set(pale0_p->mFog.r, pale1_p->mFog.r, blendAB, pale2_p->mFog.r, + pale3_p->mFog.r, i_tevstr->mColpatBlend, mAddColFog.r, + g_env_light.mFogColRatio); + + i_fog->g = kankyo_color_ratio_set(pale0_p->mFog.g, pale1_p->mFog.g, blendAB, pale2_p->mFog.g, + pale3_p->mFog.g, i_tevstr->mColpatBlend, mAddColFog.g, + g_env_light.mFogColRatio); + + i_fog->b = kankyo_color_ratio_set(pale0_p->mFog.b, pale1_p->mFog.b, blendAB, pale2_p->mFog.b, + pale3_p->mFog.b, i_tevstr->mColpatBlend, mAddColFog.b, + g_env_light.mFogColRatio); + + *i_fogStartZ = float_kankyo_color_ratio_set( + pale0_p->mFogStartZ, pale1_p->mFogStartZ, blendAB, pale2_p->mFogStartZ, pale3_p->mFogStartZ, + i_tevstr->mColpatBlend, g_env_light.mFogStartZ, g_env_light.mFogRatio); + + *i_fogEndZ = float_kankyo_color_ratio_set( + pale0_p->mFogEndZ, pale1_p->mFogEndZ, blendAB, pale2_p->mFogEndZ, pale3_p->mFogEndZ, + i_tevstr->mColpatBlend, g_env_light.mFogEndZ, g_env_light.mFogRatio); + + if (*i_fogStartZ > *i_fogEndZ) { + *i_fogStartZ = *i_fogEndZ; + } +} + +/* 8019223C-8019252C .text + * setLight_actor__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10PfPf */ +void dScnKy_env_light_c::setLight_actor(dKy_tevstr_c* i_tevstr, GXColorS10* i_fogColor, + f32* i_fogStartZ, f32* i_fogEndZ) { + u8 palIdx0A; + u8 palIdx1A; + u8 palIdx0B; + u8 palIdx1B; + f32 blendAB; + int palIdx0; + int palIdx1; + + i_tevstr->mColpatPrev = g_env_light.mColpatPrev; + i_tevstr->mColpatCurr = g_env_light.mColpatCurr; + if (i_tevstr->mColpatPrev != i_tevstr->mColpatCurr) { + i_tevstr->mColpatBlend = g_env_light.mColPatBlend; + } + + setLight_palno_get(&i_tevstr->mEnvrIdxPrev, &i_tevstr->mEnvrIdxCurr, &i_tevstr->mColpatPrev, + &i_tevstr->mColpatCurr, &palIdx0A, &palIdx0B, &palIdx1A, &palIdx1B, &blendAB, + &palIdx0, &palIdx1, &i_tevstr->mColpatBlend, &i_tevstr->mInitTimer); + + stage_palet_info_class* pale0_p = &g_env_light.mpPaletInfo[palIdx0A]; + stage_palet_info_class* pale1_p = &g_env_light.mpPaletInfo[palIdx0B]; + stage_palet_info_class* pale2_p = &g_env_light.mpPaletInfo[palIdx1A]; + stage_palet_info_class* pale3_p = &g_env_light.mpPaletInfo[palIdx1B]; + + i_tevstr->mColorC0.r = kankyo_color_ratio_set( + pale0_p->mActor_C0.r, pale1_p->mActor_C0.r, blendAB, pale2_p->mActor_C0.r, + pale3_p->mActor_C0.r, i_tevstr->mColpatBlend, mActorAddColAmb.r, + g_env_light.mActColRatio * g_env_light.mActColRatio); + + i_tevstr->mColorC0.g = kankyo_color_ratio_set( + pale0_p->mActor_C0.g, pale1_p->mActor_C0.g, blendAB, pale2_p->mActor_C0.g, + pale3_p->mActor_C0.g, i_tevstr->mColpatBlend, mActorAddColAmb.g, + g_env_light.mActColRatio * g_env_light.mActColRatio); + + i_tevstr->mColorC0.b = kankyo_color_ratio_set( + pale0_p->mActor_C0.b, pale1_p->mActor_C0.b, blendAB, pale2_p->mActor_C0.b, + pale3_p->mActor_C0.b, i_tevstr->mColpatBlend, mActorAddColAmb.b, + g_env_light.mActColRatio * g_env_light.mActColRatio); + + i_tevstr->mColorK0.r = kankyo_color_ratio_set( + pale0_p->mActor_K0.r, pale1_p->mActor_K0.r, blendAB, pale2_p->mActor_K0.r, + pale3_p->mActor_K0.r, i_tevstr->mColpatBlend, mActorAddColDif.r, g_env_light.mActColRatio); + + i_tevstr->mColorK0.g = kankyo_color_ratio_set( + pale0_p->mActor_K0.g, pale1_p->mActor_K0.g, blendAB, pale2_p->mActor_K0.g, + pale3_p->mActor_K0.g, i_tevstr->mColpatBlend, mActorAddColDif.g, g_env_light.mActColRatio); + + i_tevstr->mColorK0.b = kankyo_color_ratio_set( + pale0_p->mActor_K0.b, pale1_p->mActor_K0.b, blendAB, pale2_p->mActor_K0.b, + pale3_p->mActor_K0.b, i_tevstr->mColpatBlend, mActorAddColDif.b, g_env_light.mActColRatio); + + i_fogColor->r = kankyo_color_ratio_set(pale0_p->mFog.r, pale1_p->mFog.r, blendAB, + pale2_p->mFog.r, pale3_p->mFog.r, i_tevstr->mColpatBlend, + mAddColFog.r, g_env_light.mFogColRatio); + + i_fogColor->g = kankyo_color_ratio_set(pale0_p->mFog.g, pale1_p->mFog.g, blendAB, + pale2_p->mFog.g, pale3_p->mFog.g, i_tevstr->mColpatBlend, + mAddColFog.g, g_env_light.mFogColRatio); + + i_fogColor->b = kankyo_color_ratio_set(pale0_p->mFog.b, pale1_p->mFog.b, blendAB, + pale2_p->mFog.b, pale3_p->mFog.b, i_tevstr->mColpatBlend, + mAddColFog.b, g_env_light.mFogColRatio); + + *i_fogStartZ = float_kankyo_color_ratio_set( + pale0_p->mFogStartZ, pale1_p->mFogStartZ, blendAB, pale2_p->mFogStartZ, pale3_p->mFogStartZ, + i_tevstr->mColpatBlend, g_env_light.mFogStartZ, g_env_light.mFogRatio); + + *i_fogEndZ = float_kankyo_color_ratio_set( + pale0_p->mFogEndZ, pale1_p->mFogEndZ, blendAB, pale2_p->mFogEndZ, pale3_p->mFogEndZ, + i_tevstr->mColpatBlend, g_env_light.mFogEndZ, g_env_light.mFogRatio); + + if (*i_fogStartZ > *i_fogEndZ) { + *i_fogStartZ = *i_fogEndZ; + } +} + +/* 8019252C-8019261C .text + * settingTevStruct_colget_actor__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10P11_GXColorS10PfPf + */ +void dScnKy_env_light_c::settingTevStruct_colget_actor(cXyz*, dKy_tevstr_c* i_tevstr, + GXColorS10* i_colorC0, GXColorS10* i_colorK0, + GXColorS10* i_fogColor, f32* i_fogStartZ, + f32* i_fogEndZ) { + if (i_tevstr->mEnvrIdxOverride != 0xFF) { + i_tevstr->mEnvrIdxCurr = i_tevstr->mEnvrIdxOverride; + } else if (i_tevstr->mRoomNo >= 0) { + i_tevstr->mEnvrIdxCurr = i_tevstr->mRoomNo; + } else { + i_tevstr->mEnvrIdxCurr = 0; + } + + if (i_tevstr->mEnvrIdxPrev != i_tevstr->mEnvrIdxCurr && + (i_tevstr->mColpatBlend >= 1.0f || i_tevstr->mColpatBlend <= 0.0f)) + { + i_tevstr->mColpatBlend = 0.0f; + } + + setLight_actor(i_tevstr, i_fogColor, i_fogStartZ, i_fogEndZ); + i_colorC0->r = i_tevstr->mColorC0.r; + i_colorC0->g = i_tevstr->mColorC0.g; + i_colorC0->b = i_tevstr->mColorC0.b; + i_colorC0->a = i_tevstr->mColorC0.a; + + i_colorK0->r = i_tevstr->mColorK0.r; + i_colorK0->g = i_tevstr->mColorK0.g; + i_colorK0->b = i_tevstr->mColorK0.b; +} + +/* 8019261C-801926C0 .text + * settingTevStruct_colget_player__18dScnKy_env_light_cFP12dKy_tevstr_c */ +void dScnKy_env_light_c::settingTevStruct_colget_player(dKy_tevstr_c* i_tevstr) { + if (i_tevstr->mEnvrIdxOverride != 0xFF) { + i_tevstr->mEnvrIdxCurr = i_tevstr->mEnvrIdxOverride; + } else if (i_tevstr->mRoomNo >= 0) { + i_tevstr->mEnvrIdxCurr = i_tevstr->mRoomNo; + } + + if (g_env_light.mEnvrIdxCurr != i_tevstr->mEnvrIdxCurr) { + if (i_tevstr->mEnvrIdxCurr == g_env_light.mEnvrIdxPrev) { + g_env_light.mEnvrIdxPrev = g_env_light.mEnvrIdxCurr; + g_env_light.mEnvrIdxCurr = i_tevstr->mEnvrIdxCurr; + g_env_light.mColPatBlend = 1.0f - g_env_light.mColPatBlend; + + i_tevstr->mColpatBlend = 1.0f - g_env_light.mColPatBlend; + } else if (g_env_light.mColPatBlend >= 1.0f || g_env_light.mColPatBlend <= 0.0f) { + g_env_light.mEnvrIdxCurr = i_tevstr->mEnvrIdxCurr; + g_env_light.mColPatBlend = 0.0f; + i_tevstr->mColpatBlend = 0.0f; + } + } +} + +/* 801926C0-80192E04 .text + * settingTevStruct_plightcol_plus__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_c11_GXColorS1011_GXColorS10Uc + */ +void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz* i_pos, dKy_tevstr_c* i_tevstr, + GXColorS10 param_2, GXColorS10 param_3, + u8 param_4) { /* Nonmatching */ } -/* 80191C44-8019223C .text setLight_bg__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10P11_GXColorS10PfPf */ -void dScnKy_env_light_c::setLight_bg(dKy_tevstr_c*, _GXColorS10*, _GXColorS10*, _GXColorS10*, _GXColorS10*, _GXColorS10*, _GXColorS10*, _GXColorS10*, _GXColorS10*, _GXColorS10*, float*, float*) { - /* Nonmatching */ -} - -/* 8019223C-8019252C .text setLight_actor__18dScnKy_env_light_cFP12dKy_tevstr_cP11_GXColorS10PfPf */ -void dScnKy_env_light_c::setLight_actor(dKy_tevstr_c*, _GXColorS10*, float*, float*) { - /* Nonmatching */ -} - -/* 8019252C-8019261C .text settingTevStruct_colget_actor__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_cP11_GXColorS10P11_GXColorS10P11_GXColorS10PfPf */ -void dScnKy_env_light_c::settingTevStruct_colget_actor(cXyz*, dKy_tevstr_c*, _GXColorS10*, _GXColorS10*, _GXColorS10*, float*, float*) { - /* Nonmatching */ -} - -/* 8019261C-801926C0 .text settingTevStruct_colget_player__18dScnKy_env_light_cFP12dKy_tevstr_c */ -void dScnKy_env_light_c::settingTevStruct_colget_player(dKy_tevstr_c*) { - /* Nonmatching */ -} - -/* 801926C0-80192E04 .text settingTevStruct_plightcol_plus__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_c11_GXColorS1011_GXColorS10Uc */ -void dScnKy_env_light_c::settingTevStruct_plightcol_plus(cXyz*, dKy_tevstr_c*, _GXColorS10, _GXColorS10, unsigned char) { - /* Nonmatching */ -} - -/* 80192E04-80193028 .text settingTevStruct_eflightcol_plus__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_c */ +/* 80192E04-80193028 .text + * settingTevStruct_eflightcol_plus__18dScnKy_env_light_cFP4cXyzP12dKy_tevstr_c */ void dScnKy_env_light_c::settingTevStruct_eflightcol_plus(cXyz*, dKy_tevstr_c*) { /* Nonmatching */ } +dKy_setLight__Status lightStatusData[8]; + /* 80193028-80193650 .text settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c */ -void dScnKy_env_light_c::settingTevStruct(int, cXyz*, dKy_tevstr_c*) { - /* Nonmatching */ +void dScnKy_env_light_c::settingTevStruct(int i_lightType, cXyz* param_1, dKy_tevstr_c* i_tevstr) { + int var_r31 = -1; + u8 var_r30 = i_tevstr->mInitTimer; + u8 var_r29 = 0; + + GXColorS10 sp98; + GXColorS10 sp90; + GXColorS10 sp88; + + f32 fog_z_start; + f32 fog_z_end; + + GXColorS10 sp80; + GXColorS10 sp78; + GXColorS10 sp70; + GXColorS10 sp68; + GXColorS10 sp60; + GXColorS10 sp58; + GXColorS10 sp50; + GXColorS10 sp48; + + if (i_tevstr->mInitType != 123 && i_tevstr->mInitType != 124) { + dKy_tevstr_init(i_tevstr, dComIfGp_roomControl_getStayNo(), 0xFF); + } + + i_tevstr->mInitType = 124; + i_tevstr->mColorK1.a = 0; + + mActorC0.a = 255; + mActorK0.a = 255; + + if (i_lightType == 0 || i_lightType == 9 || i_lightType == 99) { + i_tevstr->mLightMode = 1; + + sp98 = mActorC0; + sp90 = mActorK0; + sp88 = mFogColor; + + fog_z_start = mFogStartZ__setLight; + fog_z_end = mFogEndZ__setLight; + + if (i_lightType == 0 || i_lightType == 99) { + settingTevStruct_colget_actor(param_1, i_tevstr, &sp98, &sp90, &sp88, &fog_z_start, + &fog_z_end); + } else if (i_lightType == 9) { + var_r30 = g_env_light.mInitAnimTimer; + settingTevStruct_colget_player(i_tevstr); + settingTevStruct_colget_actor(param_1, i_tevstr, &sp98, &sp90, &sp88, &fog_z_start, + &fog_z_end); + } + + mC0.r = sp98.r; + mC0.g = sp98.g; + mC0.b = sp98.b; + mC0.a = 255; + + mK0.r = sp90.r; + mK0.g = sp90.g; + mK0.b = sp90.b; + mK0.a = 255; + + if (i_lightType != 99) { + settingTevStruct_plightcol_plus(param_1, i_tevstr, sp98, sp90, var_r30); + settingTevStruct_eflightcol_plus(param_1, i_tevstr); + } + + if (i_lightType == 9) { + g_env_light.mPLightNearPlayer = i_tevstr->mLightPosWorld; + } + } else { + i_tevstr->mLightMode = 0; + + if (i_tevstr->mRoomNo >= 128) { + i_tevstr->mEnvrIdxCurr = 0; + } else { + i_tevstr->mEnvrIdxCurr = i_tevstr->mRoomNo; + } + + setLight_bg(i_tevstr, &sp80, &sp78, &sp70, &sp68, &sp60, &sp58, &sp50, &sp48, &sp88, + &fog_z_start, &fog_z_end); + + if (i_lightType >= 5 && i_lightType <= 8) { + var_r29 = 1; + i_lightType -= 4; + } + + if (i_lightType >= 91 && i_lightType <= 94) { + var_r31 = i_lightType - 91; + } else { + var_r31 = i_lightType - 1; + } + + switch (var_r31) { + case 0: + mC0 = sp80; + mK0 = sp78; + break; + case 1: + mC0 = sp70; + mK0 = sp68; + break; + case 2: + mC0 = sp60; + mK0 = sp58; + break; + case 3: + default: + mC0 = sp50; + mK0 = sp48; + break; + } + + if (i_lightType >= 91 && i_lightType < 94) { + sp98.r = (u8)mC0.r; + sp98.g = (u8)mC0.g; + sp98.b = (u8)mC0.b; + + sp90.r = (u8)mK0.r; + sp90.g = (u8)mK0.g; + sp90.b = (u8)mK0.b; + + i_tevstr->mLightMode = 2; + settingTevStruct_plightcol_plus(param_1, i_tevstr, sp98, sp90, var_r30); + } else { + Vec spA0; + cMtx_multVec(j3dSys.getViewMtx(), &lightStatusData[0].mPos, &spA0); + J3DLightInfo& light_info = i_tevstr->mLightObj.getLightInfo(); + + light_info.mLightPosition = spA0; + i_tevstr->mLightPosWorld = lightStatusData[0].mPos; + light_info.mLightDirection = g_env_light.mLightDir; + + if (!var_r29) { + light_info.mColor.r = 255; + light_info.mColor.g = 0; + light_info.mColor.b = 0; + } else { + light_info.mColor.r = 255; + light_info.mColor.g = 255; + light_info.mColor.b = 255; + } + + light_info.mColor.a = 255; + + light_info.mCosAtten.x = 1.0f; + light_info.mCosAtten.y = 0.0f; + light_info.mCosAtten.z = 0.0f; + + light_info.mDistAtten.x = 1.0f; + light_info.mDistAtten.y = 0.0f; + light_info.mDistAtten.z = 0.0f; + } + } + + mC0.a = 255; + i_tevstr->mColorC0 = mC0; + i_tevstr->mColorK0.r = mK0.r; + i_tevstr->mColorK0.g = mK0.g; + i_tevstr->mColorK0.b = mK0.b; + + if (var_r31 != 1) { + i_tevstr->mFogColor = sp88; + } else { + i_tevstr->mFogColor = g_env_light.mVrUsoUmiColor; + } + + i_tevstr->mFogStartZ = fog_z_start; + i_tevstr->mFogEndZ = fog_z_end; } /* 80193650-80193A30 .text setLightTevColorType_sub__FP11J3DMaterialP12dKy_tevstr_c */ -void setLightTevColorType_sub(J3DMaterial*, dKy_tevstr_c*) { - /* Nonmatching */ +void setLightTevColorType_sub(J3DMaterial* i_material, dKy_tevstr_c* i_tevstr) { + if (i_tevstr->mLightMode != 0) { + J3DColorChan* colorchan_p = i_material->getColorBlock()->getColorChan(0); + colorchan_p->setLightMask(1); + int var_r28; + int prev_a = i_material->getTevColor(3)->a; + + var_r28 = 0xFF; + if (prev_a > 0 && i_material->getTevBlock()->getTevKColorSel(prev_a - 1) == 13) { + var_r28 = prev_a - 1; + } + + if (var_r28 != 0xFF) { + if (i_tevstr->mColorK1.a != 0) { + i_material->getTevBlock()->setTevStageNum(var_r28 + 1); + if (i_material->getTevKColor(1) != NULL) { + i_material->setTevKColor(1, (J3DGXColor*)&i_tevstr->mColorK1); + colorchan_p->setLightMask(3); + } + } else { + i_material->getTevBlock()->setTevStageNum(var_r28); + } + } + } + + if (j3dSys.getViewMtx() != NULL) { + cXyz sp14; + MTXMultVec(j3dSys.getViewMtx(), &i_tevstr->mLightPosWorld, &sp14); + i_tevstr->mLightObj.getLightInfo().mLightPosition = sp14; + } + + i_material->getColorBlock()->setLight(0, &i_tevstr->mLightObj); + + if (toon_proc_check() && i_tevstr->mLightMode != 0) { + GXColor* kcol_p = i_material->getTevKColor(0); + if (kcol_p != NULL) { + J3DGXColor kcol; + kcol.a = kcol_p->a; + kcol.r = i_tevstr->mColorC0.r; + kcol.g = i_tevstr->mColorC0.g; + kcol.b = i_tevstr->mColorC0.b; + i_material->setTevKColor(0, &kcol); + } + + GXColorS10* col_p = i_material->getTevColor(0); + if (col_p != NULL) { + J3DGXColorS10 col; + col.a = col_p->a; + col.r = i_tevstr->mColorK0.r; + col.g = i_tevstr->mColorK0.g; + col.b = i_tevstr->mColorK0.b; + i_material->setTevColor(0, &col); + } + } else { + GXColorS10* col_p = i_material->getTevColor(0); + if (col_p != NULL) { + i_tevstr->mColorC0.a = col_p->a; + i_material->setTevColor(0, (J3DGXColorS10*)&i_tevstr->mColorC0); + } + + GXColor* kcol_p = i_material->getTevKColor(0); + if (kcol_p != NULL) { + i_tevstr->mColorK0.a = kcol_p->a; + i_material->setTevKColor(0, (J3DGXColor*)&i_tevstr->mColorK0); + } + } + + if (i_material->getFog() != NULL) { + J3DFog* fog_p = i_material->getFog(); + if (fog_p->getFogInfo()->mType != 0) { + fog_p->getFogInfo()->mStartZ = i_tevstr->mFogStartZ; + fog_p->getFogInfo()->mEndZ = i_tevstr->mFogEndZ; + if (fog_p->getFogInfo()->mStartZ > fog_p->getFogInfo()->mEndZ) { + fog_p->getFogInfo()->mStartZ = fog_p->getFogInfo()->mEndZ; + } + + fog_p->getFogInfo()->mNearZ = g_dComIfG_gameInfo.drawlist.mpCamera->mNear; + fog_p->getFogInfo()->mFarZ = g_dComIfG_gameInfo.drawlist.mpCamera->mFar; + fog_p->getFogInfo()->mColor.r = i_tevstr->mFogColor.r; + fog_p->getFogInfo()->mColor.g = i_tevstr->mFogColor.g; + fog_p->getFogInfo()->mColor.b = i_tevstr->mFogColor.b; + fog_p->getFogInfo()->mAdjEnable = g_env_light.mFogAdjEnable; + + if (fog_p->getFogInfo()->mAdjEnable == true) { + fog_p->getFogInfo()->mCenter = g_env_light.mFogAdjCenter; + memcpy(fog_p->getFogInfo()->mFogAdjTable, &g_env_light.mFogAdjTable, + sizeof(GXFogAdjTable)); + } + } + } } /* 80193A30-80193A34 .text setLight__13J3DColorBlockFUlP11J3DLightObj */ -void J3DColorBlock::setLight(unsigned long, J3DLightObj*) { +// probably weak function +void J3DColorBlock::setLight(u32, J3DLightObj*) { /* Nonmatching */ } -/* 80193A34-80193ADC .text setLightTevColorType__18dScnKy_env_light_cFP8J3DModelP12dKy_tevstr_c */ -void dScnKy_env_light_c::setLightTevColorType(J3DModel*, dKy_tevstr_c*) { - /* Nonmatching */ +/* 80193A34-80193ADC .text + * setLightTevColorType__18dScnKy_env_light_cFP8J3DModelP12dKy_tevstr_c */ +void dScnKy_env_light_c::setLightTevColorType(J3DModel* i_model, dKy_tevstr_c* i_tevstr) { + if (i_tevstr->mInitType != 0x7c) { + if (i_tevstr->mInitType != 0x7b) { + dKy_tevstr_init(i_tevstr, dComIfGp_roomControl_getStayNo(), 0xFF); + } + + settingTevStruct(99, NULL, i_tevstr); + } + + int mat_num = i_model->getModelData()->getMaterialNum() - 1; + while (mat_num >= 0) { + setLightTevColorType_sub(i_model->getModelData()->getMaterialNodePointer(mat_num), + i_tevstr); + mat_num--; + } } /* 80193ADC-80193B68 .text CalcTevColor__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::CalcTevColor() { - /* Nonmatching */ + fopAc_ac_c* player_p = dComIfGp_getPlayer(0); + mPlayerEflightIdx = dKy_eflight_influence_id(player_p->current.pos, 0); + mPlayerPLightIdx = dKy_light_influence_id(player_p->current.pos, 0); } /* 80193B68-80193BA8 .text Sndpos__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::Sndpos() { - /* Nonmatching */ + if (mSound.field_0x10 != 0) { + mSound.field_0x10--; + if (mSound.field_0x10 == 0) { + dKy_Sound_init(); + } + } } /* 80193BA8-80193D9C .text Eflight_flush_proc__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::Eflight_flush_proc() { /* Nonmatching */ + static GXColor flush_col[] = { + {1, 255, 255, 255}, + {6, 30, 200, 255}, + {14, 0, 60, 60}, + {20, 0, 0, 0}, + }; + + static GXColor flush_col2[] = { + {1, 255, 200, 60}, + {4, 240, 80, 0}, + {8, 100, 20, 0}, + {15, 0, 0, 0}, + }; } /* 80193D9C-80193EE4 .text SetBaseLight__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::SetBaseLight() { - /* Nonmatching */ + stage_lightvec_info_class* plight_p = NULL; + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + + int roomNo = dComIfGp_roomControl_getStayNo(); + if (roomNo >= 0) { + plight_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getLightVecInfo(); + } + + if (plight_p != NULL) { + mBaseLightInfluence.mPos = plight_p->mPos; + mBaseLightInfluence.mColor.r = 0; + mBaseLightInfluence.mColor.g = 0; + mBaseLightInfluence.mColor.b = 0; + mBaseLightInfluence.mColor.a = 0; + mBaseLightInfluence.mPower = plight_p->mRadius * 200.0f; + mBaseLightInfluence.mFluctuation = plight_p->mFluctuation; + } else { + if (dComIfGs_getTime() > 97.5f && dComIfGs_getTime() < 292.5f) { + mBaseLightInfluence.mPos = env_light.mSunPos2; + } else { + mBaseLightInfluence.mPos = env_light.mMoonPos; + } + + mBaseLightInfluence.mColor.r = 255; + mBaseLightInfluence.mColor.g = 255; + mBaseLightInfluence.mColor.b = 255; + mBaseLightInfluence.mColor.a = 255; + mBaseLightInfluence.mPower = 0.0f; + mBaseLightInfluence.mFluctuation = 0.0f; + } } /* 80193EE4-801940EC .text exeKankyo__18dScnKy_env_light_cFv */ +// NONMATCHING - one block with regswaps void dScnKy_env_light_c::exeKankyo() { - /* Nonmatching */ + g_env_light.mColPatMode = g_env_light.mColPatModeGather; + + if (!dComIfGp_event_runCheck() && g_env_light.mColPatModeGather != 0) { + if (g_env_light.mColPatModeGather >= 3) { + g_env_light.mColPatModeGather = 0; + } else { + g_env_light.mColPatModeGather++; + } + } + + if (g_env_light.mColPatMode != 0) { + if (g_env_light.mColpatPrevGather != 0xFF) { + g_env_light.mColpatPrev = g_env_light.mColpatPrevGather; + + if (g_env_light.mColPatModeGather == 0) { + g_env_light.mColpatPrevGather = 0xFF; + } + } + + if (g_env_light.mColpatCurrGather != 0xFF) { + g_env_light.mColpatCurr = g_env_light.mColpatCurrGather; + + if (g_env_light.mColPatModeGather == 0) { + g_env_light.mColpatCurrGather = 0xFF; + } + } + + if (g_env_light.mColPatBlendGather >= 0.0f) { + g_env_light.mColPatBlend = g_env_light.mColPatBlendGather; + + if (g_env_light.mColPatModeGather == 0) { + g_env_light.mColPatBlendGather = -1.0f; + } + } + } else if (g_env_light.mColpatPrev == g_env_light.mColpatCurr) { + if (g_env_light.mColpatPrevGather != 0xFF) { + g_env_light.mColpatPrev = g_env_light.mColpatPrevGather; + g_env_light.mColpatPrevGather = 0xFF; + } + + if (g_env_light.mColpatCurrGather != 0xFF) { + g_env_light.mColpatCurr = g_env_light.mColpatCurrGather; + g_env_light.mColpatCurrGather = 0xFF; + g_env_light.mColpatWeather = g_env_light.mColpatCurrGather; + } + + if (g_env_light.mColPatBlendGather >= 0.0f) { + g_env_light.mColPatBlend = g_env_light.mColPatBlendGather; + g_env_light.mColPatBlendGather = -1.0f; + } + } + + g_env_light.mAllColRatio = g_env_light.mAllColGatherRatio; + g_env_light.mActColRatio = g_env_light.mActColGatherRatio; + g_env_light.mBgColRatio = g_env_light.mBgColGatherRatio; + g_env_light.mFogColRatio = g_env_light.mFogColGatherRatio; + g_env_light.mVrboxSoraColRatio = g_env_light.mVrboxSoraColGatherRatio; + g_env_light.mVrboxKumoColRatio = g_env_light.mVrboxKumoColGatherRatio; + + g_env_light.mAllColGatherRatio = 1.0f; + g_env_light.mActColGatherRatio = 1.0f; + g_env_light.mBgColGatherRatio = 1.0f; + g_env_light.mFogColGatherRatio = 1.0f; + g_env_light.mVrboxSoraColGatherRatio = 1.0f; + g_env_light.mVrboxKumoColGatherRatio = 1.0f; + + setDaytime(); + dKyw_wether_proc(); + CalcTevColor(); + Sndpos(); + Eflight_flush_proc(); + SetSchbit(); } /* 801940EC-801940F0 .text dKy_event_init__Fv */ -void dKy_event_init() { - /* Nonmatching */ -} +void dKy_event_init() {} /* 801940F0-80194120 .text dice_wether_init__FUcff */ -void dice_wether_init(unsigned char, float, float) { - /* Nonmatching */ +void dice_wether_init(u8 i_weatherMode, f32 i_weatherTime, f32 i_currentTime) { + g_env_light.mDiceWeatherMode = i_weatherMode; + g_env_light.mDiceWeatherTime = i_currentTime + i_weatherTime; + + if (g_env_light.mDiceWeatherTime >= 360.0f) { + g_env_light.mDiceWeatherTime -= 360.0f; + } } /* 80194120-80194180 .text dice_wether_execute__FUcff */ -void dice_wether_execute(unsigned char, float, float) { - /* Nonmatching */ +void dice_wether_execute(u8 i_weatherMode, f32 i_weatherTime, f32 i_currentTime) { + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + env_light.mDiceWeatherMode = i_weatherMode; + + if (env_light.mDiceWeatherMode != 0xFF) { + env_light.mDiceWeatherTime = i_currentTime + i_weatherTime; + + if (env_light.mDiceWeatherTime >= 360.0f) { + env_light.mDiceWeatherTime -= 360.0f; + } + + env_light.mDiceWeatherCounter++; + } else { + env_light.mDiceWeatherMode = 0; + env_light.mDiceWeatherState++; + } } /* 80194180-801941D4 .text dice_rain_minus__Fv */ void dice_rain_minus() { - /* Nonmatching */ + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + + if (env_light.mRainCount > 40) { + env_light.mRainCount -= 3; + } else if (env_light.mRainCount != 0) { + env_light.mRainCount--; + } + + dKyw_rain_set(env_light.mRainCount); } +u16 lightMask = 1; +dKy_setLight__Status* lightStatusPt = lightStatusData; + /* 801941D4-801942E0 .text phantomship_wether__Fv */ -void phantomship_wether() { - /* Nonmatching */ +BOOL phantomship_wether() { + BOOL rt = false; + f32 cur_time = dComIfGs_getTime(); + int weekday = dKy_get_dayofweek(); + + if (dComIfGs_getTime() < 180.0f) { + if (weekday != 0) { + weekday--; + } else { + weekday = 6; + } + } + + if (cur_time > 285.0f || cur_time < 90.0f) { + s32 roomNo = dComIfGp_roomControl_getStayNo(); + if ((roomNo == 5 && weekday == 0) || (roomNo == 36 && weekday == 1) || + (roomNo == 34 && weekday == 2) || (roomNo == 10 && weekday == 3) || + (roomNo == 49 && weekday == 4) || (roomNo == 21 && weekday == 5) || + (roomNo == 23 && weekday == 6)) + { + rt = true; + } + } + + return rt; } /* 801942E0-80194844 .text dKy_event_proc__Fv */ void dKy_event_proc() { - /* Nonmatching */ + static f32 S_time_table[] = {120.0f, 150.0f, 90.0f, 120.0f, 120.0f, 150.0f, 150.0f, 120.0f}; + static u8 S_wether_table[] = {0, 1, 3, 2, 0, 1, 3, 2}; + + static u8 S_wether_mode_pat01[] = {1, 2, 1, 0xFF}; + static f32 S_wether_time_pat01[] = {5.0f, 10.0f, 5.0f}; + + static u8 S_wether_mode_pat02[] = {4, 5, 4, 0xFF}; + static f32 S_wether_time_pat02[] = {7.5f, 15.0f, 5.0f}; + + static u8 S_wether_mode_pat03[] = {2, 3, 2, 0xFF}; + static f32 S_wether_time_pat03[] = {5.0f, 12.5f, 5.0f}; + + static u8 S_wether_mode_pat04[] = {4, 0xFF}; + static f32 S_wether_time_pat04[] = {10.0f, 0.0f}; + + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0) { + if (dKy_checkEventNightStop()) { + if (env_light.mColpatWeather != 1) { + env_light.mColpatWeather = 1; + env_light.mColpatCurrGather = 1; + } + + if (env_light.mRainCount < 250) { + env_light.mRainCount++; + dKyw_rain_set(env_light.mRainCount); + } + } else { + if (g_env_light.mInitAnimTimer == 0) { + if (dComIfGp_roomControl_getTimePass() && dComIfGs_isGetItem(2, 0)) { + if (dKy_pship_existense_chk()) { + g_env_light.mThunderEff.mMode = 1; + dice_rain_minus(); + + if (env_light.mColpatWeather != 1) { + g_env_light.mColpatWeather = 1; + g_env_light.mColpatCurrGather = 1; + } + } else { + f32 current_time = dComIfGs_getTime(); + + if (current_time > env_light.mDiceWeatherChangeTime && + current_time - env_light.mDiceWeatherChangeTime < 180.0f && + env_light.mDiceWeatherState == DICE_STATE_RESET_e) + { + env_light.mDiceWeatherState = DICE_STATE_INIT_e; + } + + switch (env_light.mDiceWeatherState) { + case DICE_STATE_RESET_e: + break; + case DICE_STATE_INIT_e: + u8 table_no = cM_rndF(7.99f); + env_light.mDiceWeatherCurrPattern = S_wether_table[table_no]; + env_light.mDiceWeatherCounter = 0; + + switch (env_light.mDiceWeatherCurrPattern) { + case 0: + dice_wether_init(S_wether_mode_pat01[env_light.mDiceWeatherCounter], + S_wether_time_pat01[env_light.mDiceWeatherCounter], + current_time); + break; + case 1: + dice_wether_init(S_wether_mode_pat02[env_light.mDiceWeatherCounter], + S_wether_time_pat02[env_light.mDiceWeatherCounter], + current_time); + break; + case 2: + dice_wether_init(S_wether_mode_pat03[env_light.mDiceWeatherCounter], + S_wether_time_pat03[env_light.mDiceWeatherCounter], + current_time); + break; + case 3: + dice_wether_init(S_wether_mode_pat04[env_light.mDiceWeatherCounter], + S_wether_time_pat04[env_light.mDiceWeatherCounter], + current_time); + break; + } + + env_light.mDiceWeatherCounter++; + env_light.mDiceWeatherState++; + break; + case DICE_STATE_EXEC_e: + if (current_time > env_light.mDiceWeatherTime && + current_time - env_light.mDiceWeatherTime < 180.0f) + { + switch (env_light.mDiceWeatherCurrPattern) { + case 0: + dice_wether_execute( + S_wether_mode_pat01[env_light.mDiceWeatherCounter], + S_wether_time_pat01[env_light.mDiceWeatherCounter], + current_time); + break; + case 1: + dice_wether_execute( + S_wether_mode_pat02[env_light.mDiceWeatherCounter], + S_wether_time_pat02[env_light.mDiceWeatherCounter], + current_time); + break; + case 2: + dice_wether_execute( + S_wether_mode_pat03[env_light.mDiceWeatherCounter], + S_wether_time_pat03[env_light.mDiceWeatherCounter], + current_time); + break; + case 3: + dice_wether_execute( + S_wether_mode_pat04[env_light.mDiceWeatherCounter], + S_wether_time_pat04[env_light.mDiceWeatherCounter], + current_time); + break; + } + } + break; + case DICE_STATE_NEXT_e: + u8 time_table_no = cM_rndF(7.99f); + env_light.mDiceWeatherChangeTime = + current_time + S_time_table[time_table_no]; + + if (env_light.mDiceWeatherChangeTime >= 360.0f) { + env_light.mDiceWeatherChangeTime -= 360.0f; + } + + env_light.mDiceWeatherState = DICE_STATE_RESET_e; + break; + } + + if (g_env_light.mColPatMode == 0 && g_env_light.mColPatModeGather == 0) { + u8 weather_colpat; + + switch (env_light.mDiceWeatherMode) { + case DICE_MODE_SUNNY_e: + weather_colpat = 0; + if (g_env_light.mThunderEff.mMode == 1) { + g_env_light.mThunderEff.mMode = 0; + } + + dice_rain_minus(); + break; + case DICE_MODE_CLOUDY_e: + weather_colpat = 1; + dice_rain_minus(); + break; + case DICE_MODE_RAIN_LIGHT_e: + weather_colpat = 1; + if (env_light.mRainCount < 40) { + env_light.mRainCount++; + dKyw_rain_set(env_light.mRainCount); + } else { + env_light.mRainCount--; + dKyw_rain_set(env_light.mRainCount); + } + break; + case DICE_MODE_THUNDER_HEAVY_e: + g_env_light.mThunderEff.mMode = 1; + case DICE_MODE_RAIN_HEAVY_e: + weather_colpat = 1; + if (env_light.mRainCount < 250) { + env_light.mRainCount++; + dKyw_rain_set(env_light.mRainCount); + } + break; + case DICE_MODE_THUNDER_LIGHT_e: + weather_colpat = 1; + g_env_light.mThunderEff.mMode = 1; + dice_rain_minus(); + break; + } + + if (env_light.mColpatWeather != weather_colpat) { + g_env_light.mColpatWeather = weather_colpat; + g_env_light.mColpatCurrGather = weather_colpat; + } + } + } + } else if (dKy_pship_existense_chk()) { + if (g_env_light.mColpatWeather != 1) { + g_env_light.mColpatWeather = 1; + g_env_light.mColpatCurrGather = 1; + } + + g_env_light.mThunderEff.mMode = 1; + } else { + if (g_env_light.mColpatWeather != 0) { + g_env_light.mColpatWeather = 0; + g_env_light.mColpatCurrGather = 0; + } + + if (g_env_light.mThunderEff.mMode == 1) { + g_env_light.mThunderEff.mMode = 0; + } + + dice_rain_minus(); + } + } + } + + if (g_env_light.mColPatMode == 0 && g_env_light.mColPatModeGather == 0 && + g_env_light.mColpatCurrGather != 0xFF && + g_env_light.mColpatCurr != g_env_light.mColpatCurrGather) + { + g_env_light.mColPatBlendGather = 0.0f; + } + } } /* 80194844-80194888 .text drawKankyo__18dScnKy_env_light_cFv */ void dScnKy_env_light_c::drawKankyo() { - /* Nonmatching */ + setSunpos(); + SetBaseLight(); + setLight(); + dKy_Itemgetcol_chg_move(); + dKy_arrowcol_chg_move(); } /* 80194888-801948B4 .text dKy_Draw__FP17sub_kankyo__class */ -void dKy_Draw(sub_kankyo__class*) { - /* Nonmatching */ +int dKy_Draw(sub_kankyo__class*) { + g_env_light.drawKankyo(); + return 1; } /* 801948B4-801948E8 .text dKy_Execute__FP17sub_kankyo__class */ -void dKy_Execute(sub_kankyo__class*) { - /* Nonmatching */ +int dKy_Execute(sub_kankyo__class*) { + dKy_event_proc(); + g_env_light.exeKankyo(); + dKyw_wind_set(); + return 1; } /* 801948E8-801948F0 .text dKy_IsDelete__FP17sub_kankyo__class */ -void dKy_IsDelete(sub_kankyo__class*) { - /* Nonmatching */ +int dKy_IsDelete(sub_kankyo__class*) { + return 1; } /* 801948F0-80194914 .text dKy_Delete__FP17sub_kankyo__class */ -void dKy_Delete(sub_kankyo__class*) { - /* Nonmatching */ +int dKy_Delete(sub_kankyo__class*) { + plight_init(); + return 1; } /* 80194914-80194974 .text dKy_Create__FPv */ -void dKy_Create(void*) { - /* Nonmatching */ +int dKy_Create(void*) { + envcolor_init(); + g_env_light.field_0xc78 = NULL; + g_env_light.field_0xc44 = 1.0f; + g_env_light.mPLightNearPlayer.x = 0.0f; + g_env_light.mPLightNearPlayer.y = 0.0f; + g_env_light.mPLightNearPlayer.z = 0.0f; + + dKy_setLight_init(); + dKy_wave_chan_init(); + dKy_event_init(); + dKy_Sound_init(); + dKyw_wind_set(); + + return cPhs_COMPLEATE_e; } /* 80194974-80194BDC .text dKy_setLight_init__Fv */ @@ -337,133 +2180,247 @@ void dKy_Get_DifCol() { } /* 80195280-801952BC .text dKy_light_influence_pos__Fi */ -void dKy_light_influence_pos(int) { - /* Nonmatching */ +cXyz dKy_light_influence_pos(int i_lightIdx) { + if (i_lightIdx < 0) { + i_lightIdx = 0; + } + + return g_env_light.mpPLights[i_lightIdx]->mPos; } /* 801952BC-801952E0 .text dKy_plight_near_pos__Fv */ -void dKy_plight_near_pos() { - /* Nonmatching */ +cXyz dKy_plight_near_pos() { + return g_env_light.mPLightNearPlayer; } /* 801952E0-80195364 .text dKy_plight_set__FP15LIGHT_INFLUENCE */ -void dKy_plight_set(LIGHT_INFLUENCE*) { - /* Nonmatching */ +void dKy_plight_set(LIGHT_INFLUENCE* param_0) { + for (int i = 0; i < 200; i++) { + if (g_env_light.mpPLights[i] == param_0) { + return; + } + } + + for (int i = 0; i < 200; i++) { + if (g_env_light.mpPLights[i] == NULL) { + g_env_light.mpPLights[i] = param_0; + g_env_light.mpPLights[i]->mIdx = i + 1; + break; + } + } } /* 80195364-80195378 .text dKy_yuragi_ratio_set__Ff */ -void dKy_yuragi_ratio_set(float) { - /* Nonmatching */ +f32 dKy_yuragi_ratio_set(f32 param_0) { + return param_0 * 255.0f + 1000.0f; } /* 80195378-80195408 .text dKy_plight_priority_set__FP15LIGHT_INFLUENCE */ -void dKy_plight_priority_set(LIGHT_INFLUENCE*) { - /* Nonmatching */ +void dKy_plight_priority_set(LIGHT_INFLUENCE* param_0) { + int i = 0; + + for (; i < 200; i++) { + if (g_env_light.mpPLights[i] == NULL) { + g_env_light.mpPLights[i] = param_0; + g_env_light.mpPLights[i]->mIdx = -(i + 1); + break; + } + } + + if (i >= 200) { + OSReport_Warning("\nPOINTLIGHT COUNT OVER!!!\n"); + } } /* 80195408-80195454 .text dKy_plight_cut__FP15LIGHT_INFLUENCE */ -void dKy_plight_cut(LIGHT_INFLUENCE*) { - /* Nonmatching */ +void dKy_plight_cut(LIGHT_INFLUENCE* param_0) { + if (param_0 != NULL) { + if (param_0->mIdx != 0) { + if (param_0->mIdx < 0) { + param_0->mIdx *= -1; + } + + int idx = (param_0->mIdx) - 1; + if (idx < 200) { + g_env_light.mpPLights[idx] = NULL; + } + } + } } /* 80195454-801954D8 .text dKy_efplight_set__FP15LIGHT_INFLUENCE */ -void dKy_efplight_set(LIGHT_INFLUENCE*) { - /* Nonmatching */ +void dKy_efplight_set(LIGHT_INFLUENCE* param_0) { + for (int i = 0; i < 10; i++) { + if (g_env_light.mpEfLights[i] == param_0) { + return; + } + } + + for (int i = 0; i < 10; i++) { + if (g_env_light.mpEfLights[i] == NULL) { + g_env_light.mpEfLights[i] = param_0; + g_env_light.mpEfLights[i]->mIdx = i + 1; + break; + } + } } /* 801954D8-80195518 .text dKy_efplight_cut__FP15LIGHT_INFLUENCE */ -void dKy_efplight_cut(LIGHT_INFLUENCE*) { - /* Nonmatching */ +void dKy_efplight_cut(LIGHT_INFLUENCE* param_0) { + if (param_0 != NULL) { + if (param_0->mIdx != 0) { + int idx = param_0->mIdx - 1; + if (idx >= 0 && idx < 10) { + g_env_light.mpEfLights[idx] = NULL; + } + } + } } /* 80195518-801955B8 .text dKy_actor_addcol_amb_set__Fsssf */ -void dKy_actor_addcol_amb_set(short, short, short, float) { - /* Nonmatching */ +void dKy_actor_addcol_amb_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mActorAddColAmb.r = r * factor; + g_env_light.mActorAddColAmb.g = g * factor; + g_env_light.mActorAddColAmb.b = b * factor; } /* 801955B8-80195658 .text dKy_actor_addcol_dif_set__Fsssf */ -void dKy_actor_addcol_dif_set(short, short, short, float) { - /* Nonmatching */ +void dKy_actor_addcol_dif_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mActorAddColDif.r = r * factor; + g_env_light.mActorAddColDif.g = g * factor; + g_env_light.mActorAddColDif.b = b * factor; } /* 80195658-801956F8 .text dKy_bg_addcol_amb_set__Fsssf */ -void dKy_bg_addcol_amb_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg_addcol_amb_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBgAddColAmb.r = r * factor; + g_env_light.mBgAddColAmb.g = g * factor; + g_env_light.mBgAddColAmb.b = b * factor; } /* 801956F8-80195798 .text dKy_bg_addcol_dif_set__Fsssf */ -void dKy_bg_addcol_dif_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg_addcol_dif_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBgAddColDif.r = r * factor; + g_env_light.mBgAddColDif.g = g * factor; + g_env_light.mBgAddColDif.b = b * factor; } /* 80195798-80195838 .text dKy_bg1_addcol_amb_set__Fsssf */ -void dKy_bg1_addcol_amb_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg1_addcol_amb_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBg1AddColAmb.r = r * factor; + g_env_light.mBg1AddColAmb.g = g * factor; + g_env_light.mBg1AddColAmb.b = b * factor; } /* 80195838-801958D8 .text dKy_bg1_addcol_dif_set__Fsssf */ -void dKy_bg1_addcol_dif_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg1_addcol_dif_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBg1AddColDif.r = r * factor; + g_env_light.mBg1AddColDif.g = g * factor; + g_env_light.mBg1AddColDif.b = b * factor; } /* 801958D8-80195978 .text dKy_bg2_addcol_amb_set__Fsssf */ -void dKy_bg2_addcol_amb_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg2_addcol_amb_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBg2AddColAmb.r = r * factor; + g_env_light.mBg2AddColAmb.g = g * factor; + g_env_light.mBg2AddColAmb.b = b * factor; } /* 80195978-80195A18 .text dKy_bg2_addcol_dif_set__Fsssf */ -void dKy_bg2_addcol_dif_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg2_addcol_dif_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBg2AddColDif.r = r * factor; + g_env_light.mBg2AddColDif.g = g * factor; + g_env_light.mBg2AddColDif.b = b * factor; } /* 80195A18-80195AB8 .text dKy_bg3_addcol_amb_set__Fsssf */ -void dKy_bg3_addcol_amb_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg3_addcol_amb_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBg3AddColAmb.r = r * factor; + g_env_light.mBg3AddColAmb.g = g * factor; + g_env_light.mBg3AddColAmb.b = b * factor; } /* 80195AB8-80195B58 .text dKy_bg3_addcol_dif_set__Fsssf */ -void dKy_bg3_addcol_dif_set(short, short, short, float) { - /* Nonmatching */ +void dKy_bg3_addcol_dif_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mBg3AddColDif.r = r * factor; + g_env_light.mBg3AddColDif.g = g * factor; + g_env_light.mBg3AddColDif.b = b * factor; } /* 80195B58-80195BF8 .text dKy_addcol_fog_set__Fsssf */ -void dKy_addcol_fog_set(short, short, short, float) { - /* Nonmatching */ +void dKy_addcol_fog_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mAddColFog.r = r * factor; + g_env_light.mAddColFog.g = g * factor; + g_env_light.mAddColFog.b = b * factor; } /* 80195BF8-80195CF4 .text dKy_actor_addcol_set__Fsssf */ -void dKy_actor_addcol_set(short, short, short, float) { - /* Nonmatching */ +void dKy_actor_addcol_set(s16 r, s16 g, s16 b, f32 factor) { + dKy_actor_addcol_amb_set(r, g, b, factor); + dKy_actor_addcol_dif_set(r, g, b, factor); + + dKy_bg_addcol_amb_set(r, g, b, factor); + dKy_bg_addcol_dif_set(r, g, b, factor); + + dKy_bg1_addcol_amb_set(r, g, b, factor); + dKy_bg1_addcol_dif_set(r, g, b, factor); + + dKy_bg2_addcol_amb_set(r, g, b, factor); + dKy_bg2_addcol_dif_set(r, g, b, factor); + + dKy_bg3_addcol_amb_set(r, g, b, factor); + dKy_bg3_addcol_dif_set(r, g, b, factor); } /* 80195CF4-80195D94 .text dKy_vrbox_addcol_sky0_set__Fsssf */ -void dKy_vrbox_addcol_sky0_set(short, short, short, float) { - /* Nonmatching */ +void dKy_vrbox_addcol_sky0_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mVrboxAddColSky0.r = r * factor; + g_env_light.mVrboxAddColSky0.g = g * factor; + g_env_light.mVrboxAddColSky0.b = b * factor; } /* 80195D94-80195E34 .text dKy_vrbox_addcol_kasumi_set__Fsssf */ -void dKy_vrbox_addcol_kasumi_set(short, short, short, float) { - /* Nonmatching */ +void dKy_vrbox_addcol_kasumi_set(s16 r, s16 g, s16 b, f32 factor) { + g_env_light.mVrboxAddColKasumi.r = r * factor; + g_env_light.mVrboxAddColKasumi.g = g * factor; + g_env_light.mVrboxAddColKasumi.b = b * factor; } /* 80195E34-80195EA4 .text dKy_vrbox_addcol_set__Fsssf */ -void dKy_vrbox_addcol_set(short, short, short, float) { - /* Nonmatching */ +void dKy_vrbox_addcol_set(s16 r, s16 g, s16 b, f32 factor) { + dKy_vrbox_addcol_sky0_set(r, g, b, factor); + dKy_vrbox_addcol_kasumi_set(r, g, b, factor); + dKy_addcol_fog_set(r, g, b, factor); } /* 80195EA4-80195F3C .text dKy_fog_startendz_set__Ffff */ -void dKy_fog_startendz_set(float, float, float) { - /* Nonmatching */ +void dKy_fog_startendz_set(f32 i_startZ, f32 i_endZ, f32 ratio) { + if (ratio < 0.0f || ratio > 1.0f) { + OSReport_Warning("\ndKy_fog_startendz_set ratio error!\n"); + ratio = 0.0f; + } + + if (ratio < 1.0E-4f) { + ratio = 0.0f; + } + + g_env_light.mFogStartZ = i_startZ; + g_env_light.mFogEndZ = i_endZ; + g_env_light.mFogRatio = ratio; } /* 80195F3C-80195F64 .text dKy_Itemgetcol_chg_on__Fv */ void dKy_Itemgetcol_chg_on() { - /* Nonmatching */ + if (g_env_light.mItemGetCol_chg == 0 || g_env_light.mItemGetCol_chg == 6) { + g_env_light.mItemGetCol_chg = 1; + } } /* 80195F64-80195F84 .text dKy_Itemgetcol_chg_off__Fv */ void dKy_Itemgetcol_chg_off() { - /* Nonmatching */ + if (g_env_light.mItemGetCol_chg == 4) { + g_env_light.mItemGetCol_chg = 5; + } } /* 80195F84-80196284 .text dKy_Itemgetcol_chg_move__Fv */ @@ -482,13 +2439,23 @@ void dKy_arrowcol_chg_move() { } /* 80196764-801967C4 .text dKy_checkEventNightStop__Fv */ -void dKy_checkEventNightStop() { - /* Nonmatching */ +BOOL dKy_checkEventNightStop() { + if (dComIfGs_isEventBit(0xA02) && !dComIfGs_isSymbol(0)) { + return true; + } + + return false; } /* 801967C4-801967F4 .text dKy_Sound_init__Fv */ +// NONMATCHING - reg swap void dKy_Sound_init() { - /* Nonmatching */ + g_env_light.mSound.field_0x0.x = 999999.9f; + g_env_light.mSound.field_0x0.y = 999999.9f; + g_env_light.mSound.field_0x0.z = 999999.9f; + g_env_light.mSound.field_0xc = 0; + g_env_light.mSound.field_0x14 = -1; + g_env_light.mSound.field_0x10 = -1; } /* 801967F4-801969A8 .text dKy_Sound_set__F4cXyziUii */ @@ -512,7 +2479,7 @@ void dKy_FirstlightVec_get(cXyz*) { } /* 80196A34-80196AE4 .text GxFogSet_Sub__FP8_GXColor */ -void GxFogSet_Sub(_GXColor*) { +void GxFogSet_Sub(GXColor*) { /* Nonmatching */ } @@ -528,12 +2495,14 @@ void GxFog_sea_set() { /* 80196B6C-80196B90 .text dKy_GxFog_set__Fv */ void dKy_GxFog_set() { - /* Nonmatching */ + GxFog_set(); + GxXFog_set(); } /* 80196B90-80196BB4 .text dKy_GxFog_sea_set__Fv */ void dKy_GxFog_sea_set() { - /* Nonmatching */ + GxFog_sea_set(); + GxXFog_set(); } /* 80196BB4-80196C5C .text dKy_GxFog_tevstr_set__FP12dKy_tevstr_c */ @@ -552,23 +2521,39 @@ void GxXFog_set() { } /* 80196D48-80196D70 .text dKy_change_colset__FUcUcf */ -void dKy_change_colset(unsigned char, unsigned char, float) { - /* Nonmatching */ +void dKy_change_colset(u8 param_0, u8 param_1, f32 param_2) { + g_env_light.mColpatCurrGather = param_1; + + if (g_env_light.mColpatCurr != param_1) { + g_env_light.mColPatBlendGather = 0.0f; + } } /* 80196D70-80196D98 .text dKy_change_colpat__FUc */ -void dKy_change_colpat(unsigned char) { - /* Nonmatching */ +void dKy_change_colpat(u8 param_0) { + g_env_light.mColpatCurrGather = param_0; + + if (g_env_light.mColpatCurr != param_0) { + g_env_light.mColPatBlendGather = 0.0f; + } } /* 80196D98-80196DDC .text dKy_custom_colset__FUcUcf */ -void dKy_custom_colset(unsigned char, unsigned char, float) { - /* Nonmatching */ +void dKy_custom_colset(u8 param_0, u8 param_1, f32 i_blend) { + if (i_blend < 1.0f) { + g_env_light.mColpatPrevGather = param_0; + } else { + g_env_light.mColpatPrevGather = param_1; + } + + g_env_light.mColpatCurrGather = param_1; + g_env_light.mColPatBlendGather = i_blend; + g_env_light.mColPatModeGather = 1; } /* 80196DDC-80196DEC .text dKy_custom_timeset__Ff */ -void dKy_custom_timeset(float) { - /* Nonmatching */ +void dKy_custom_timeset(f32 i_speed) { + g_env_light.mTimeAdv = i_speed; } /* 80196DEC-80196EB4 .text dKy_setLight_mine__FP12dKy_tevstr_c */ @@ -577,182 +2562,269 @@ void dKy_setLight_mine(dKy_tevstr_c*) { } /* 80196EB4-80196F78 .text dKy_tevstr_init__FP12dKy_tevstr_cScUc */ -void dKy_tevstr_init(dKy_tevstr_c*, signed char, unsigned char) { - /* Nonmatching */ +void dKy_tevstr_init(dKy_tevstr_c* i_tevstr, s8 i_roomNo, u8 param_2) { + memset(i_tevstr, 0, sizeof(dKy_tevstr_c)); + + if (i_roomNo == -1) { + i_tevstr->mRoomNo = dComIfGp_roomControl_getStayNo(); + } else { + i_tevstr->mRoomNo = i_roomNo; + } + + i_tevstr->mEnvrIdxCurr = i_tevstr->mRoomNo; + i_tevstr->mEnvrIdxPrev = i_tevstr->mRoomNo; + i_tevstr->mEnvrIdxOverride = param_2; + i_tevstr->mInitTimer = 1; + i_tevstr->mInitType = 123; + i_tevstr->mColorC0.a = 255; + i_tevstr->mColorK0.a = 255; + i_tevstr->mFogColor.a = 255; + + i_tevstr->mLightObj.mInfo.mColor.g = 0; + i_tevstr->mLightObj.mInfo.mColor.b = 0; + i_tevstr->mLightObj.mInfo.mColor.a = 255; + i_tevstr->mLightObj.mInfo.mCosAtten.x = 1.0f; + i_tevstr->mLightObj.mInfo.mCosAtten.y = 0.0f; + i_tevstr->mLightObj.mInfo.mCosAtten.z = 0.0f; + i_tevstr->mLightObj.mInfo.mDistAtten.x = 1.0f; + i_tevstr->mLightObj.mInfo.mDistAtten.y = 0.0f; + i_tevstr->mLightObj.mInfo.mDistAtten.z = 0.0f; } /* 80196F78-80196F88 .text dKy_rain_check__Fv */ -void dKy_rain_check() { - /* Nonmatching */ +int dKy_rain_check() { + return g_env_light.mRainCount; } /* 80196F88-80196FF8 .text dKy_usonami_set__Ff */ -void dKy_usonami_set(float) { - /* Nonmatching */ +void dKy_usonami_set(f32 param_0) { + if (g_env_light.mWaveChan.mWaveCount < 200) { + g_env_light.mWaveChan.mWaveSpawnDist = 20000.0f; + g_env_light.mWaveChan.mWaveSpawnRadius = 22000.0f; + g_env_light.mWaveChan.mWaveReset = 0; + g_env_light.mWaveChan.mWaveScale = 300.0f; + g_env_light.mWaveChan.mWaveScaleRand = 0.001f; + g_env_light.mWaveChan.mWaveCounterSpeedScale = 1.2f; + g_env_light.mWaveChan.field_0x2f = 0; + g_env_light.mWaveChan.mWaveScaleBottom = 6.0f; + g_env_light.mWaveChan.mWaveCount = 300; + g_env_light.mWaveChan.mWaveSpeed = 30.0f; + } + + g_env_light.mWaveChan.mWaveFlatInter = param_0; } /* 80196FF8-80197008 .text dKy_get_schbit__Fv */ -void dKy_get_schbit() { - /* Nonmatching */ +u8 dKy_get_schbit() { + return g_env_light.mSchbit; } /* 80197008-80197018 .text dKy_get_schbit_timer__Fv */ -void dKy_get_schbit_timer() { - /* Nonmatching */ +int dKy_get_schbit_timer() { + return g_env_light.mSchbitTimer; } /* 80197018-80197144 .text dKy_get_seacolor__FP8_GXColorP8_GXColor */ -void dKy_get_seacolor(_GXColor*, _GXColor*) { +void dKy_get_seacolor(GXColor*, GXColor*) { /* Nonmatching */ } /* 80197144-80197154 .text dKy_set_allcol_ratio__Ff */ -void dKy_set_allcol_ratio(float) { - /* Nonmatching */ +void dKy_set_allcol_ratio(f32 ratio) { + g_env_light.mAllColGatherRatio = ratio; } /* 80197154-80197164 .text dKy_set_actcol_ratio__Ff */ -void dKy_set_actcol_ratio(float) { - /* Nonmatching */ +void dKy_set_actcol_ratio(f32 ratio) { + g_env_light.mActColGatherRatio = ratio; } /* 80197164-80197174 .text dKy_set_bgcol_ratio__Ff */ -void dKy_set_bgcol_ratio(float) { - /* Nonmatching */ +void dKy_set_bgcol_ratio(f32 ratio) { + g_env_light.mBgColGatherRatio = ratio; } /* 80197174-80197184 .text dKy_set_fogcol_ratio__Ff */ -void dKy_set_fogcol_ratio(float) { - /* Nonmatching */ +void dKy_set_fogcol_ratio(f32 ratio) { + g_env_light.mFogColGatherRatio = ratio; } /* 80197184-801971B8 .text dKy_set_vrboxcol_ratio__Ff */ -void dKy_set_vrboxcol_ratio(float) { - /* Nonmatching */ +void dKy_set_vrboxcol_ratio(f32 ratio) { + dKy_set_vrboxsoracol_ratio(ratio); + dKy_set_vrboxkumocol_ratio(ratio); } /* 801971B8-801971C8 .text dKy_set_vrboxsoracol_ratio__Ff */ -void dKy_set_vrboxsoracol_ratio(float) { - /* Nonmatching */ +void dKy_set_vrboxsoracol_ratio(f32 ratio) { + g_env_light.mVrboxSoraColGatherRatio = ratio; } /* 801971C8-801971D8 .text dKy_set_vrboxkumocol_ratio__Ff */ -void dKy_set_vrboxkumocol_ratio(float) { - /* Nonmatching */ +void dKy_set_vrboxkumocol_ratio(f32 ratio) { + g_env_light.mVrboxKumoColGatherRatio = ratio; } /* 801971D8-801972AC .text dKy_itudemo_se__Fv */ +// NONMATCHING - regswap void dKy_itudemo_se() { - /* Nonmatching */ + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + s32 roomNo = dComIfGp_roomControl_getStayNo(); + + if (env_light.mMoyaSE != 0) { + mDoAud_seStart(env_light.mMoyaSE, NULL, 0, 0); + } + + if (strcmp(dComIfGp_getStartStageName(), "M_NewD2") == 0 && roomNo == 3) { + mDoAud_bgmMuteMtDragon(); + } + + if (strcmp(dComIfGp_getStartStageName(), "Siren") == 0 && roomNo == 18) { + mDoAud_stSkyCloisters(); + } } /* 801972AC-801972BC .text dKy_contrast_flg_set__FUc */ -void dKy_contrast_flg_set(unsigned char) { - /* Nonmatching */ +void dKy_contrast_flg_set(u8 i_flag) { + g_env_light.mbContrastFlag = i_flag; } /* 801972BC-801972CC .text dKy_contrast_flg_get__Fv */ -void dKy_contrast_flg_get() { - /* Nonmatching */ +u8 dKy_contrast_flg_get() { + return g_env_light.mbContrastFlag; } /* 801972CC-801972EC .text dKy_get_dayofweek__Fv */ -void dKy_get_dayofweek() { - /* Nonmatching */ +int dKy_get_dayofweek() { + return dComIfGs_getDate(); } /* 801972EC-801972FC .text dKy_set_nexttime__Ff */ -void dKy_set_nexttime(float) { - /* Nonmatching */ +void dKy_set_nexttime(f32 i_nexttime) { + g_env_light.mNextTime = i_nexttime; } /* 801972FC-8019731C .text dKy_DayProc__Fv */ void dKy_DayProc() { - /* Nonmatching */ + dKankyo_DayProc(); } /* 8019731C-8019737C .text dKy_instant_timechg__Ff */ -void dKy_instant_timechg(float) { - /* Nonmatching */ +void dKy_instant_timechg(f32 i_time) { + if (i_time < dComIfGs_getTime()) { + dComIfGs_setDate(dComIfGs_getDate() + 1); + dKankyo_DayProc(); + } + + dComIfGs_setTime(i_time); } /* 8019737C-801973B8 .text dKy_instant_rainchg__Fv */ void dKy_instant_rainchg() { - /* Nonmatching */ + dKyw_rain_set(250); + g_env_light.mColpatWeather = 1; + g_env_light.mColpatPrev = 1; + g_env_light.mColpatCurr = 1; } /* 801973B8-80197404 .text dKy_moon_type_chk__Fv */ -void dKy_moon_type_chk() { - /* Nonmatching */ +int dKy_moon_type_chk() { + int weekday = dKy_get_dayofweek(); + + if (dComIfGs_getTime() < 180.0f) { + if (weekday != 0) { + weekday--; + } else { + weekday = 6; + } + } + + return weekday; } /* 80197404-80197504 .text dKy_telescope_lookin_chk__FP4cXyzff */ -void dKy_telescope_lookin_chk(cXyz*, float, float) { +bool dKy_telescope_lookin_chk(cXyz*, f32, f32) { /* Nonmatching */ } /* 80197504-80197558 .text dKy_moon_look_chk__Fv */ -void dKy_moon_look_chk() { - /* Nonmatching */ +bool dKy_moon_look_chk() { + bool rt = false; + if (dKyr_moon_arrival_check()) { + rt = dKy_telescope_lookin_chk(&g_env_light.mMoonPos, 100.0f, 200.0f); + } + + return rt; } /* 80197558-801975A4 .text dKy_orion_look_chk__Fv */ -void dKy_orion_look_chk() { - /* Nonmatching */ +bool dKy_orion_look_chk() { + cXyz pos = dKy_get_orion_pos(); + return dKy_telescope_lookin_chk(&pos, 100.0f, 20.0f); } /* 801975A4-801975F0 .text dKy_hokuto_look_chk__Fv */ -void dKy_hokuto_look_chk() { - /* Nonmatching */ +bool dKy_hokuto_look_chk() { + cXyz pos = dKy_get_hokuto_pos(); + return dKy_telescope_lookin_chk(&pos, 100.0f, 20.0f); } /* 801975F0-80197614 .text dKy_get_moon_pos__Fv */ -void dKy_get_moon_pos() { - /* Nonmatching */ +cXyz dKy_get_moon_pos() { + return g_env_light.mMoonPos; } /* 80197614-80197668 .text dKy_get_hokuto_pos__Fv */ -void dKy_get_hokuto_pos() { +cXyz dKy_get_hokuto_pos() { /* Nonmatching */ } /* 80197668-801976BC .text dKy_get_orion_pos__Fv */ -void dKy_get_orion_pos() { +cXyz dKy_get_orion_pos() { /* Nonmatching */ } /* 801976BC-801976D0 .text dKy_pship_existense_set__Fv */ void dKy_pship_existense_set() { - /* Nonmatching */ + g_env_light.field_0xc8e = 1; } /* 801976D0-801976E4 .text dKy_pship_existense_cut__Fv */ void dKy_pship_existense_cut() { - /* Nonmatching */ + g_env_light.field_0xc8e = 0; } /* 801976E4-80197708 .text dKy_pship_existense_chk__Fv */ -void dKy_pship_existense_chk() { - /* Nonmatching */ +u8 dKy_pship_existense_chk() { + return phantomship_wether(); } /* 80197708-80197760 .text dKy_daynighttact_stop_chk__Fv */ -void dKy_daynighttact_stop_chk() { - /* Nonmatching */ +bool dKy_daynighttact_stop_chk() { + bool rt = false; + if (dKy_checkEventNightStop()) { + rt = true; + } else if (g_env_light.mbDayNightTactStop) { + rt = true; + } + + return rt; } /* 80197760-801979F4 .text dKyr_player_overhead_bg_chk__Fv */ -void dKyr_player_overhead_bg_chk() { - /* Nonmatching */ -} +BOOL dKyr_player_overhead_bg_chk() { + fopAc_ac_c* player_p = dComIfGp_getPlayer(0); + BOOL ret = false; + dBgS_ObjGndChk_All gnd_chk; -/* 801979F4-80197A7C .text __dt__18dScnKy_env_light_cFv */ -dScnKy_env_light_c::~dScnKy_env_light_c() { - /* Nonmatching */ -} + if (dKy_rain_check() > 200) { + cXyz pos = player_p->current.pos; + pos.y += 10000.0f; + gnd_chk.SetPos(&pos); + if (dComIfG_Bgsp()->GroundCross(&gnd_chk) < player_p->current.pos.y + 50.0f) { + ret = true; + } + } -/* 80197AB8-80197FE4 .text dKankyo_DayProc__Fv */ -void dKankyo_DayProc() { - /* Nonmatching */ + return ret; } - diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index b99f1f5a8..50664efa5 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -232,10 +232,10 @@ void dSv_player_get_item_c::onItem(int i_field, u8 i_item) { } /* 8005955C-800595F8 .text isItem__21dSv_player_get_item_cFiUc */ -bool dSv_player_get_item_c::isItem(int i_field, u8 i_item) { +BOOL dSv_player_get_item_c::isItem(int i_field, u8 i_item) { JUT_ASSERT(429, 0 <= i_item && i_item < 8); - return mItemFlags[i_field] & (u8)(1 << i_item) ? true : false; + return mItemFlags[i_field] & (u8)(1 << i_item) ? TRUE : FALSE; } /* 800595F8-80059740 .text onBottleItem__21dSv_player_get_item_cFUc */ From 667d1228826678ab2caf7e5faece164637c6fad1 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Tue, 19 Sep 2023 16:47:15 -0700 Subject: [PATCH 15/89] JUTGamePad, m_Do_controller_pad (#62) --- include/JSystem/JUtility/JUTGamePad.h | 25 +- src/JSystem/JUtility/JUTGamePad.cpp | 481 ++++++++++++++++++++++---- src/m_Do/m_Do_controller_pad.cpp | 8 +- 3 files changed, 435 insertions(+), 79 deletions(-) diff --git a/include/JSystem/JUtility/JUTGamePad.h b/include/JSystem/JUtility/JUTGamePad.h index aca0c1fd1..dc90bf5cb 100644 --- a/include/JSystem/JUtility/JUTGamePad.h +++ b/include/JSystem/JUtility/JUTGamePad.h @@ -8,6 +8,8 @@ typedef void (*callbackFn)(int, void*); +extern u32 channel_mask[4]; + namespace CButton { enum { DPAD_LEFT = 0x0001, @@ -25,8 +27,6 @@ enum { }; } -extern bool sResetSwitchPushing__Q210JUTGamePad13C3ButtonReset; - struct JUTGamePadRecordBase { virtual void unk0() {} virtual void unk1(PADStatus* pad) {} @@ -130,7 +130,7 @@ public: } inline void stopMotorWave() { mRumble.stopPatternedRumbleAtThePeriod(); } - void stopMotor() { mRumble.stopMotor(mPortNum, false); } + void stopMotor() { mRumble.stopMotor(mPortNum); } void stopMotorHard() { mRumble.stopMotorHard(mPortNum); } static s8 getPortStatus(u32 port) { return mPadStatus[port].error; } @@ -180,9 +180,8 @@ public: CStick() { clear(); } void clear(); void clear(JUTGamePad* pad); - u32 update(s8 unk0, s8 unk1, JUTGamePad::EStickMode mode, JUTGamePad::EWhichStick stick, - u32 unk2); - u32 getButton(u32 unk); + u32 update(s8 unk0, s8 unk1, JUTGamePad::EStickMode mode, JUTGamePad::EWhichStick stick); + u32 getButton(); /* 0x0 */ f32 mPosX; /* 0x4 */ f32 mPosY; @@ -197,7 +196,6 @@ public: struct CRumble { CRumble(JUTGamePad* pad) { clear(pad); } - static PADMask sChannelMask[4]; static bool mStatus[4]; static PADMask mEnabled; @@ -210,18 +208,17 @@ public: void clear(); void clear(JUTGamePad* pad); static void startMotor(int channel); - static void stopMotor(int channel, bool stop); + static void stopMotor(int channel); + static void stopMotorHard(int channel); void update(s16 unk0); void triggerPatternedRumble(u32 unk0); - void startPatternedRumble(void* unk0, ERumble rumble, u32 unk1); + void startPatternedRumble(u8* unk0, ERumble rumble, u32 unk1); void stopPatternedRumble(s16 pad_port); void stopPatternedRumbleAtThePeriod(); static void setEnabled(u32 pad_mask); - void stopMotorHard(int portNo) { stopMotor(portNo, true); } - static bool isEnabled(u32 mask) { return mEnabled & mask; } - static bool isEnabledPort(int port) { return isEnabled(sChannelMask[port]); } + static bool isEnabledPort(int port) { return isEnabled(channel_mask[port]); } /* 0x00 */ u32 field_0x0; /* 0x04 */ u32 field_0x4; @@ -229,7 +226,7 @@ public: /* 0x0C */ u32 field_0xc; }; // Size: 0x10 - void startMotorWave(void* param_2, CRumble::ERumble rumble, u32 param_4) { + void startMotorWave(u8* param_2, CRumble::ERumble rumble, u32 param_4) { mRumble.startPatternedRumble(param_2, rumble, param_4); } @@ -255,7 +252,7 @@ public: static EStickMode sStickMode; static u32 sClampMode; static u8 mPadAssign[4]; - static u32 sSuppressPadReset; + static u32 mSuppressPadReset; static s32 sAnalogMode; static u32 sRumbleSupported; }; diff --git a/src/JSystem/JUtility/JUTGamePad.cpp b/src/JSystem/JUtility/JUTGamePad.cpp index d896420e7..4bc10649d 100644 --- a/src/JSystem/JUtility/JUTGamePad.cpp +++ b/src/JSystem/JUtility/JUTGamePad.cpp @@ -4,164 +4,525 @@ // #include "JSystem/JUtility/JUTGamePad.h" -#include "dolphin/types.h" +#include "MSL_C/math.h" +#include "dolphin/os/OS.h" + +u32 channel_mask[4] = {0x80000000, 0x40000000, 0x20000000, 0x10000000}; +JSUList JUTGamePad::mPadList(false); +bool JUTGamePad::mListInitialized; +u8 JUTGamePad::mPadAssign[4]; /* 802C37A0-802C3860 .text __ct__10JUTGamePadFQ210JUTGamePad8EPadPort */ -JUTGamePad::JUTGamePad(JUTGamePad::EPadPort) { - /* Nonmatching */ +JUTGamePad::JUTGamePad(EPadPort port) : mRumble(this), mLink(this) { + mPortNum = port; + mPadAssign[port]++; + + initList(); + mPadList.append(&mLink); + update(); + mPadRecord = 0; + mPadReplay = 0; } /* 802C3860-802C390C .text __dt__10JUTGamePadFv */ JUTGamePad::~JUTGamePad() { - /* Nonmatching */ + if (mPortNum != -1) { + mPadAssign[mPortNum]--; + mPortNum = -1; + } + + mPadList.remove(&mLink); } /* 802C390C-802C3948 .text initList__10JUTGamePadFv */ void JUTGamePad::initList() { - /* Nonmatching */ + if (!mListInitialized) { + mPadList.initiate(); + mListInitialized = true; + } } +u32 JUTGamePad::mSuppressPadReset; +s32 JUTGamePad::sAnalogMode; + /* 802C3948-802C3980 .text init__10JUTGamePadFv */ -void JUTGamePad::init() { - /* Nonmatching */ +s32 JUTGamePad::init() { + PADSetSpec(5); + setAnalogMode(3); + return PADInit(); } +PADStatus JUTGamePad::mPadStatus[4]; +JUTGamePad::CButton JUTGamePad::mPadButton[4]; +JUTGamePad::CStick JUTGamePad::mPadMStick[4]; +JUTGamePad::CStick JUTGamePad::mPadSStick[4]; +JUTGamePad::EStickMode JUTGamePad::sStickMode = STICK_MODE_1; +u32 JUTGamePad::sClampMode = 0x00000001; +u32 JUTGamePad::sRumbleSupported; + /* 802C3980-802C3C14 .text read__10JUTGamePadFv */ -void JUTGamePad::read() { +u32 JUTGamePad::read() { /* Nonmatching */ + sRumbleSupported = PADRead(mPadStatus); + + PADClamp(mPadStatus); + + u32 mask = 0; + for (int i = 0; i < 4; i++) { + u32 mask_tmp = 0x80000000 >> i; + if (mPadStatus[i].error == 0) { + u32 local_2c = mPadMStick[i].update(mPadStatus[i].stick_x, mPadStatus[i].stick_y, sStickMode, WS_MAIN_STICK) << 0x18; + local_2c |= (mPadSStick[i].update(mPadStatus[i].substick_x, mPadStatus[i].substick_y, sStickMode, WS_SUB_STICK) << 0x10); + mPadButton[i].update(&mPadStatus[i], local_2c); + } else if (mPadStatus[i].error == -1) { + mPadMStick[i].update(0, 0, sStickMode, WS_MAIN_STICK); + mPadSStick[i].update(0, 0, sStickMode, WS_SUB_STICK); + mPadButton[i].update(NULL, 0); + + if (!(mSuppressPadReset & mask_tmp)) { + mask |= mask_tmp; + } + } else { + if (mPadStatus[i].error != -3) { + OSReport("game pad read error (%d)\n", mPadStatus[i].error); + } + mPadButton[i].mTrigger = 0; + mPadButton[i].mRelease = 0; + mPadButton[i].mRepeat = 0; + } + } + + for (JSUListIterator pad(mPadList.getFirst()); pad != mPadList.getEnd(); pad++) { + if (pad->getPadReplay()) { + PADStatus status; + pad->getPadReplay()->unk1(&status); + u32 m_stick = pad->mMainStick.update(status.stick_x, status.stick_y, sStickMode, + WS_MAIN_STICK) + << 0x18; + u32 s_stick = pad->mSubStick.update(status.substick_x, status.substick_y, sStickMode, + WS_SUB_STICK) + << 0x10; + m_stick |= s_stick; + pad->mButton.update(&status, m_stick); + } else { + if (pad->mPortNum == -1) { + pad->assign(); + } + pad->update(); + } + + if (pad->getPadRecord()) { + s32 portNum = pad->mPortNum; + if (portNum != -1 && mPadStatus[portNum].error == 0) { + pad->getPadRecord()->unk2(); + } + } + } + + if (mask != 0) { + PADReset(mask); + } + + checkResetSwitch(); + return sRumbleSupported; } /* 802C3C14-802C3CC4 .text assign__10JUTGamePadFv */ void JUTGamePad::assign() { - /* Nonmatching */ + for (int i = 0; i < 4; i++) { + if (mPadStatus[i].error == 0 && mPadAssign[i] == 0) { + mPortNum = i; + mPadAssign[i] = 1; + mPadButton[i].setRepeat(mButton.field_0x24, mButton.field_0x28, mButton.field_0x2c); + mRumble.clear(this); + return; + } + } } +bool JUTGamePad::CRumble::mStatus[4]; +PADMask JUTGamePad::CRumble::mEnabled; +callbackFn JUTGamePad::C3ButtonReset::sCallback; +void* JUTGamePad::C3ButtonReset::sCallbackArg; +OSTime JUTGamePad::C3ButtonReset::sThreshold = (OSTime)((OS_BUS_CLOCK / 4) / 60) * 30; +bool JUTGamePad::C3ButtonReset::sResetSwitchPushing; +bool JUTGamePad::C3ButtonReset::sResetOccurred; +s32 JUTGamePad::C3ButtonReset::sResetOccurredPort; + /* 802C3CC4-802C3D3C .text checkResetCallback__10JUTGamePadFx */ -void JUTGamePad::checkResetCallback(long long) { - /* Nonmatching */ +void JUTGamePad::checkResetCallback(OSTime holdTime) { + if (mPortNum < 0) { + return; + } + if (holdTime < JUTGamePad::C3ButtonReset::sThreshold) { + return; + } + + JUTGamePad::C3ButtonReset::sResetOccurred = true; + JUTGamePad::C3ButtonReset::sResetOccurredPort = mPortNum; + + if (JUTGamePad::C3ButtonReset::sCallback != NULL) { + JUTGamePad::C3ButtonReset::sCallback(mPortNum, JUTGamePad::C3ButtonReset::sCallbackArg); + } } +u32 JUTGamePad::C3ButtonReset::sResetPattern = 0x00001600; +u32 JUTGamePad::C3ButtonReset::sResetMaskPattern = 0x0000FFFF; + /* 802C3D3C-802C3F10 .text update__10JUTGamePadFv */ void JUTGamePad::update() { - /* Nonmatching */ + if (mPortNum != -1) { + mButton = mPadButton[mPortNum]; + mMainStick = mPadMStick[mPortNum]; + mSubStick = mPadSStick[mPortNum]; + mErrorStatus = mPadStatus[mPortNum].error; + + if ((mButton.mButton & C3ButtonReset::sResetMaskPattern) != C3ButtonReset::sResetPattern) + { + mButtonReset.mReset = false; + } else if (!JUTGamePad::C3ButtonReset::sResetOccurred) { + if (mButtonReset.mReset == true) { + checkResetCallback(OSGetTime() - mResetTime); + } else { + mButtonReset.mReset = true; + mResetTime = OSGetTime(); + } + } + + mRumble.update(mPortNum); + } } /* 802C3F10-802C3F90 .text checkResetSwitch__10JUTGamePadFv */ void JUTGamePad::checkResetSwitch() { - /* Nonmatching */ + if (!JUTGamePad::C3ButtonReset::sResetOccurred) { + if (OSGetResetSwitchState()) { + C3ButtonReset::sResetSwitchPushing = true; + } else { + if (C3ButtonReset::sResetSwitchPushing == true) { + C3ButtonReset::sResetOccurred = true; + C3ButtonReset::sResetOccurredPort = -1; + + if (C3ButtonReset::sCallback != NULL) { + C3ButtonReset::sCallback(-1, C3ButtonReset::sCallbackArg); + } + } + C3ButtonReset::sResetSwitchPushing = false; + } + } } /* 802C3F90-802C3FBC .text clearForReset__10JUTGamePadFv */ void JUTGamePad::clearForReset() { - /* Nonmatching */ + CRumble::setEnabled(0); + recalibrate(PAD_CHAN3_BIT | PAD_CHAN2_BIT | PAD_CHAN1_BIT | PAD_CHAN0_BIT); } /* 802C3FBC-802C3FF8 .text clear__Q210JUTGamePad7CButtonFv */ void JUTGamePad::CButton::clear() { - /* Nonmatching */ + mButton = 0; + mTrigger = 0; + mRelease = 0; + mRepeat = 0; + mAnalogA = 0; + mAnalogB = 0; + mAnalogL = 0; + mAnalogR = 0; + field_0x1c = 0; + field_0x20 = 0; + field_0x24 = 0; + field_0x28 = 0; + field_0x2c = 0; } /* 802C3FF8-802C4188 .text update__Q210JUTGamePad7CButtonFPC9PADStatusUl */ -void JUTGamePad::CButton::update(const PADStatus*, unsigned long) { - /* Nonmatching */ +void JUTGamePad::CButton::update(const PADStatus* padStatus, u32 stickStatus) { + u32 buttons; + if (padStatus != NULL) { + buttons = padStatus->button; + } else { + buttons = 0; + } + + buttons = stickStatus | buttons; + mRepeat = 0; + + if (field_0x28 != 0 && field_0x24 != 0) { + u32 repeatButton = buttons & field_0x24; + mRepeat = 0; + + if (repeatButton == 0) { + field_0x20 = 0; + field_0x1c = 0; + } else if (field_0x20 == repeatButton) { + field_0x1c++; + + if (field_0x1c == field_0x28 || + (field_0x1c > field_0x28 && (field_0x1c - field_0x28) % field_0x2c == 0)) + { + mRepeat = repeatButton; + } + } else { + mRepeat = repeatButton & (field_0x20 ^ 0xFFFFFFFF); + field_0x20 = repeatButton; + field_0x1c = 0; + } + } + + mTrigger = buttons & (buttons ^ mButton); + mRelease = mButton & (buttons ^ mButton); + mButton = buttons; + mRepeat |= (field_0x24 ^ 0xFFFFFFFF) & mTrigger; + + if (padStatus != NULL) { + mAnalogA = padStatus->analog_a; + mAnalogB = padStatus->analog_b; + mAnalogL = padStatus->trigger_left; + mAnalogR = padStatus->trigger_right; + } else { + mAnalogA = 0; + mAnalogB = 0; + mAnalogL = 0; + mAnalogR = 0; + } + + mAnalogLf = (s32)mAnalogL / 150.0f; + mAnalogRf = (s32)mAnalogR / 150.0f; } /* 802C4188-802C41A4 .text clear__Q210JUTGamePad6CStickFv */ void JUTGamePad::CStick::clear() { - /* Nonmatching */ + mPosX = 0.0f; + mPosY = 0.0f; + mValue = 0.0f; + mAngle = 0; } /* 802C41A4-802C4378 .text update__Q210JUTGamePad6CStickFScScQ210JUTGamePad10EStickModeQ210JUTGamePad11EWhichStick */ -void JUTGamePad::CStick::update(signed char, signed char, JUTGamePad::EStickMode, JUTGamePad::EWhichStick) { - /* Nonmatching */ +u32 JUTGamePad::CStick::update(s8 x_val, s8 y_val, EStickMode mode, EWhichStick stick) { + s32 clamp = stick == WS_MAIN_STICK ? 54 : 42; + + field_0xe = x_val; + field_0xf = y_val; + mPosX = (f32)x_val / (f32)clamp; + mPosY = (f32)y_val / (f32)clamp; + mValue = sqrtf((mPosX * mPosX) + (mPosY * mPosY)); + + if (mValue > 1.0f) { + if (mode == STICK_MODE_1) { + mPosX /= mValue; + mPosY /= mValue; + } + mValue = 1.0f; + } + + if (mValue > 0.0f) { + if (mPosY == 0.0f) { + if (mPosX > 0.0f) { + mAngle = 0x4000; + } else { + mAngle = -0x4000; + } + } else { + mAngle = 10430.379f * atan2f(mPosX, -mPosY); + } + } + + u32 buttonType = stick == WS_MAIN_STICK ? 0x18 : 0x10; + return getButton(); } /* 802C4378-802C4424 .text getButton__Q210JUTGamePad6CStickFv */ -void JUTGamePad::CStick::getButton() { - /* Nonmatching */ +u32 JUTGamePad::CStick::getButton() { + u32 button = 0; + + if (-0.25f < mPosX && mPosX < 0.25f) { + button = button & ~0x03; + } else if (mPosX <= -0.5f) { + button |= 1; + } else if (mPosX >= 0.5f) { + button |= 2; + } + + if (-0.25f < mPosY && mPosY < 0.25f) { + button = button & ~0x0c; + } else if (mPosY <= -0.5f) { + button |= 4; + } else if (mPosY >= 0.5f) { + button |= 8; + } + + return button; } /* 802C4424-802C4444 .text clear__Q210JUTGamePad7CRumbleFv */ void JUTGamePad::CRumble::clear() { - /* Nonmatching */ + field_0x0 = 0; + field_0x4 = 0; + field_0x8 = 0; + field_0xc = 0; + mEnabled = (PADMask)(PAD_CHAN3_BIT | PAD_CHAN2_BIT | PAD_CHAN1_BIT | PAD_CHAN0_BIT); } /* 802C4444-802C449C .text clear__Q210JUTGamePad7CRumbleFP10JUTGamePad */ -void JUTGamePad::CRumble::clear(JUTGamePad*) { - /* Nonmatching */ +void JUTGamePad::CRumble::clear(JUTGamePad* pad) { + if (pad->getPortNum() >= 0 && pad->getPortNum() < 4) { + mStatus[pad->getPortNum()] = false; + pad->stopMotorHard(); + } + clear(); } /* 802C449C-802C44F4 .text startMotor__Q210JUTGamePad7CRumbleFi */ -void JUTGamePad::CRumble::startMotor(int) { - /* Nonmatching */ +void JUTGamePad::CRumble::startMotor(int portNo) { + if (isEnabledPort(portNo)) { + PADControlMotor(portNo, 1); + mStatus[portNo] = true; + } } /* 802C44F4-802C454C .text stopMotor__Q210JUTGamePad7CRumbleFi */ -void JUTGamePad::CRumble::stopMotor(int) { - /* Nonmatching */ +void JUTGamePad::CRumble::stopMotor(int portNo) { + if (isEnabledPort(portNo)) { + PADControlMotor(portNo, 0); + mStatus[portNo] = false; + } } /* 802C454C-802C45A4 .text stopMotorHard__Q210JUTGamePad7CRumbleFi */ -void JUTGamePad::CRumble::stopMotorHard(int) { - /* Nonmatching */ +void JUTGamePad::CRumble::stopMotorHard(int portNo) { + if (isEnabledPort(portNo)) { + PADControlMotor(portNo, 2); + mStatus[portNo] = false; + } +} + +inline u8 getNumBit(u8* arr, u32 bitNo) { + u8 bit = (arr[bitNo >> 3] & (0x80 >> (bitNo & 7))); + return bit; } /* 802C45A4-802C46CC .text update__Q210JUTGamePad7CRumbleFs */ -void JUTGamePad::CRumble::update(short) { +void JUTGamePad::CRumble::update(s16 portNo) { /* Nonmatching */ + if (!isEnabledPort(portNo)) { + field_0x0 = 0; + field_0x4 = 0; + field_0x8 = NULL; + field_0xc = 0; + } + + if (field_0x4 == 0) { + return; + } + + if (field_0x0 >= field_0x4) { + stopMotorHard(portNo); + field_0x4 = 0; + } else if (field_0xc == 0) { + if (mStatus[portNo] == 0) { + startMotor(portNo); + } + return; + } else { + u32 temp = (field_0x0 / field_0xc); + u8 numBit = getNumBit(field_0x8, field_0x0 - temp * field_0xc); + if (numBit && !mStatus[portNo]) { + startMotor(portNo); + } else if (!numBit) { + if (mStatus[portNo]) { + stopMotorHard(portNo); + } + } + } + + field_0x0++; } /* 802C46CC-802C46F4 .text triggerPatternedRumble__Q210JUTGamePad7CRumbleFUl */ -void JUTGamePad::CRumble::triggerPatternedRumble(unsigned long) { - /* Nonmatching */ +void JUTGamePad::CRumble::triggerPatternedRumble(u32 param_0) { + if (field_0x8 != NULL && field_0xc != 0) { + field_0x4 = param_0; + field_0x0 = 0; + } } /* 802C46F4-802C4770 .text startPatternedRumble__Q210JUTGamePad7CRumbleFPUcQ310JUTGamePad7CRumble7ERumbleUl */ -void JUTGamePad::CRumble::startPatternedRumble(unsigned char*, JUTGamePad::CRumble::ERumble, unsigned long) { - /* Nonmatching */ +void JUTGamePad::CRumble::startPatternedRumble(u8* param_0, JUTGamePad::CRumble::ERumble param_1, u32 param_2) { + field_0xc = ((*param_0) << 8) + *(param_0 + 1); + field_0x8 = param_0 + 2; + switch (param_1) { + case JUTGamePad::CRumble::VAL_0: + triggerPatternedRumble(field_0xc); + break; + case JUTGamePad::CRumble::VAL_1: + triggerPatternedRumble(-1); + break; + case JUTGamePad::CRumble::VAL_2: + triggerPatternedRumble(param_2); + break; + } } /* 802C4770-802C479C .text stopPatternedRumble__Q210JUTGamePad7CRumbleFs */ -void JUTGamePad::CRumble::stopPatternedRumble(short) { - /* Nonmatching */ +void JUTGamePad::CRumble::stopPatternedRumble(s16 port) { + field_0x4 = 0; + stopMotorHard(port); } /* 802C479C-802C47C0 .text stopPatternedRumbleAtThePeriod__Q210JUTGamePad7CRumbleFv */ void JUTGamePad::CRumble::stopPatternedRumbleAtThePeriod() { - /* Nonmatching */ + field_0x4 = (field_0x0 + field_0xc - 1) % field_0xc; } /* 802C47C0-802C47FC .text getGamePad__10JUTGamePadFi */ -void JUTGamePad::getGamePad(int) { - /* Nonmatching */ +JUTGamePad* JUTGamePad::getGamePad(int padNo) { + JSUListIterator pad(mPadList.getFirst()); + + for (; pad != mPadList.getEnd(); pad++) { + if (padNo == pad->mPortNum) { + return pad.getObject(); + } + } + + return NULL; } /* 802C47FC-802C489C .text setEnabled__Q210JUTGamePad7CRumbleFUl */ -void JUTGamePad::CRumble::setEnabled(unsigned long) { - /* Nonmatching */ +void JUTGamePad::CRumble::setEnabled(u32 mask) { + for (int i = 0; i < 4; i++) { + if ((mEnabled & channel_mask[i]) == 0) { + if (mStatus[i]) { + stopMotor(i); + } + + JUTGamePad* pad = getGamePad(i); + if (pad != NULL) { + pad->mRumble.stopPatternedRumble(pad->mPortNum); + } + } + } + mEnabled = (PADMask)(mask & (PAD_CHAN3_BIT | PAD_CHAN2_BIT | PAD_CHAN1_BIT | PAD_CHAN0_BIT)); } /* 802C489C-802C48B8 .text setRepeat__Q210JUTGamePad7CButtonFUlUlUl */ -void JUTGamePad::CButton::setRepeat(unsigned long, unsigned long, unsigned long) { - /* Nonmatching */ +void JUTGamePad::CButton::setRepeat(u32 param_0, u32 param_1, u32 param_2) { + field_0x20 = 0; + field_0x1c = 0; + field_0x24 = param_0; + field_0x28 = param_1; + field_0x2c = param_2; } /* 802C48B8-802C4940 .text recalibrate__10JUTGamePadFUl */ -void JUTGamePad::recalibrate(unsigned long) { - /* Nonmatching */ -} +bool JUTGamePad::recalibrate(u32 mask) { + u32 channel_mask2[4] = {0x80000000, 0x40000000, 0x20000000, 0x10000000}; -/* 802C4A14-802C4A44 .text __ct__Q210JUTGamePad6CStickFv */ -JUTGamePad::CStick::CStick() { - /* Nonmatching */ -} + for (int i = 0; i < 4; i++) { + if (mSuppressPadReset & channel_mask2[i]) { + mask &= channel_mask2[i] ^ 0xFFFFFFFF; + } + } -/* 802C4A44-802C4A74 .text __ct__Q210JUTGamePad7CButtonFv */ -JUTGamePad::CButton::CButton() { - /* Nonmatching */ -} - -/* 802C4A74-802C4AC8 .text __dt__21JSUList<10JUTGamePad>Fv */ -JSUList::~JSUList() { - /* Nonmatching */ + return PADRecalibrate((PADMask)mask); } diff --git a/src/m_Do/m_Do_controller_pad.cpp b/src/m_Do/m_Do_controller_pad.cpp index 1caeb3352..d90c8a9ad 100644 --- a/src/m_Do/m_Do_controller_pad.cpp +++ b/src/m_Do/m_Do_controller_pad.cpp @@ -112,7 +112,7 @@ int mDoCPd_Read() { /* 80007A70-80007BBC .text mDoCPd_Create__Fv */ // NONMATCHING - weird ending int mDoCPd_Create() { - JUTGamePad::sSuppressPadReset = 1; + JUTGamePad::mSuppressPadReset = 1; JUTGamePad* pad = new JUTGamePad(JUTGamePad::Port_1); g_mDoCPd_gamePad[0] = pad; @@ -136,10 +136,8 @@ int mDoCPd_Create() { g_mDoGaC_gbaCom.mDoGaC_Initial(TestDataManager, 16); for (int i = 0; i < 4; i++) { - g_mDoCPd_cpadInfo[i].mTrigLockL = false; - g_mDoCPd_cpadInfo[i].mHoldLockL = false; - g_mDoCPd_cpadInfo[i].mTrigLockR = false; - g_mDoCPd_cpadInfo[i].mHoldLockR = false; + g_mDoCPd_cpadInfo[i].mHoldLockL = g_mDoCPd_cpadInfo[i].mTrigLockL = false; + g_mDoCPd_cpadInfo[i].mHoldLockR = g_mDoCPd_cpadInfo[i].mTrigLockR = false; } return 1; From 54a8ffbe372c826b048f4cb3399e61623ea55748 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Tue, 19 Sep 2023 19:49:23 -0400 Subject: [PATCH 16/89] daObjTpost_c Nearly OK (#60) * daObjTpost_c Nearly OK Also a little bit more work on fopNpc_npc_c * Remove Duplicate Struct --- include/d/d_bg_s_acch.h | 14 +- include/d/d_com_inf_game.h | 36 +- include/d/d_event.h | 1 + include/d/d_letter.h | 15 + include/d/d_lib.h | 16 +- include/d/d_npc.h | 29 +- include/d/d_save.h | 3 +- include/d/d_stage.h | 2 + include/f_op/f_op_actor_mng.h | 2 +- include/m_Do/m_Do_ext.h | 16 + src/d/actor/d_a_obj_toripost.cpp | 1282 +++++++++++++++++++++++------- src/d/d_com_inf_game.cpp | 2 +- src/d/d_npc.cpp | 112 ++- 13 files changed, 1177 insertions(+), 353 deletions(-) create mode 100644 include/d/d_letter.h diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index 801ccba21..a79861f78 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -29,14 +29,14 @@ public: /* 0x4 */ WALL_H_DIRECT = 4, }; - /* 80075EAC */ dBgS_AcchCir(); - /* 80075F14 */ void ClrWallHit(); - /* 80075F40 */ void SetWallR(f32); - /* 80075F48 */ void CalcWallRR(); - /* 80075F58 */ void SetWall(f32, f32); - /* 80075F80 */ void SetWallHDirect(f32); + dBgS_AcchCir(); + void ClrWallHit(); + void SetWallR(f32); + void CalcWallRR(); + void SetWall(f32, f32); + void SetWallHDirect(f32); - /* 80077414 */ virtual ~dBgS_AcchCir() {} + virtual ~dBgS_AcchCir() {} f32 GetWallH() { return m_wall_h; } f32 GetWallR() { return m_wall_r; } diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 62ac1113a..6b63209bb 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -164,6 +164,10 @@ public: fopAc_ac_c* getPlayer(int idx) { return (fopAc_ac_c*)mpPlayer[idx]; } s8 getPlayerCameraID(int idx) { return mCurCamera[idx]; } + int getItemRupeeCount() { return mItemRupeeCount; } + void setItemRupeeCount(int count) { mItemRupeeCount += count; } + void setMessageCountNumber(s16 num) { mMsgCountNumber = num; } + void setLkDemoAnmArchive(JKRArchive* i_arc) { mpLkDArc = i_arc; } void setStatus(u16 status) { mStatus = status; } @@ -263,7 +267,7 @@ public: /* 0x48E8 */ u8 field_0x48E8[0x48F6 - 0x48E8]; /* 0x48F6 */ s16 mItemPendantNumCount; /* 0x48F8 */ u8 field_0x48F8[0x4918 - 0x48F8]; - /* 0x4918 */ u16 mCurrAuctionItemNameMsgID; + /* 0x4918 */ u16 mMsgCountNumber; /* 0x491A */ s16 field_0x491a; /* 0x491C */ s16 field_0x491c; /* 0x491E */ s16 field_0x491e; @@ -406,6 +410,10 @@ inline u8 dComIfGs_getWalletSize() { return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getWalletSize(); } +inline int dComIfGs_getRupee() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getRupee(); +} + inline u8 dComIfGs_getMagic() { return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getMagic(); } @@ -454,6 +462,10 @@ inline u8 dComIfGs_getReserveNum(int i_idx) { return g_dComIfG_gameInfo.save.getPlayer().getBagItemRecord().getReserveNum(i_idx); } +inline void dComIfGs_setReserveItemEmpty() { + g_dComIfG_gameInfo.save.getPlayer().getBagItem().setReserveItemEmpty(); +} + inline void dComIfGs_setEventReg(u16 i_reg, u8 i_no) { g_dComIfG_gameInfo.save.getEvent().setEventReg(i_reg, i_no); } @@ -960,6 +972,18 @@ inline BOOL dComIfGp_checkCameraAttentionStatus(int idx, u32 flag) { return g_dComIfG_gameInfo.play.checkCameraAttentionStatus(idx, flag); } +inline int dComIfGp_getItemRupeeCount() { + return g_dComIfG_gameInfo.play.getItemRupeeCount(); +} + +inline void dComIfGp_setItemRupeeCount(int count) { + g_dComIfG_gameInfo.play.setItemRupeeCount(count); +} + +inline void dComIfGp_setMessageCountNumber(s16 num) { + g_dComIfG_gameInfo.play.setMessageCountNumber(num); +} + /** * === EVENT ===*/ @@ -983,6 +1007,10 @@ inline void dComIfGp_event_offEventFlag(s16 flag) { return g_dComIfG_gameInfo.play.getEvent().offEventFlag(flag); } +inline u8 dComIfGp_event_getPreItemNo() { + return g_dComIfG_gameInfo.play.getEvent().getPreItemNo(); +} + inline void dComIfGp_event_setItemPartnerId(u32 id) { return g_dComIfG_gameInfo.play.getEvent().setPtI_Id(id); } @@ -995,11 +1023,11 @@ inline u32 dComIfGp_evmng_getEventIdx(char* pName, u8 evNo) { return dComIfGp_getEventManager().getEventIdx(pName, evNo); } -inline u32 dComIfGp_evmng_getMyStaffId(char* pName, fopAc_ac_c* pActor, s32 param_3) { +inline int dComIfGp_evmng_getMyStaffId(char* pName, fopAc_ac_c* pActor, s32 param_3) { return dComIfGp_getEventManager().getMyStaffId(pName, pActor, param_3); } -inline u32 dComIfGp_evmng_getMyActIdx(int staffIdx, const char* const* pActions, int actionCount, int force, int param_5) { +inline int dComIfGp_evmng_getMyActIdx(int staffIdx, const char* const* pActions, int actionCount, int force, int param_5) { return dComIfGp_getEventManager().getMyActIdx(staffIdx, pActions, actionCount, force, param_5); } @@ -1035,7 +1063,7 @@ inline BOOL dComIfGp_evmng_getIsAddvance(s32 staffIdx) { return dComIfGp_getEventManager().getIsAddvance(staffIdx); } -inline void dComIfGp_evmng_cutEnd(s32 staffIdx) { +inline void dComIfGp_evmng_cutEnd(int staffIdx) { return dComIfGp_getEventManager().cutEnd(staffIdx); } diff --git a/include/d/d_event.h b/include/d/d_event.h index 380b9ddb7..acf7f1ae8 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -62,6 +62,7 @@ public: u8 getTalkXYBtn() { return mTalkButton; } bool chkTalkXY() { return mTalkButton == 1 || mTalkButton == 2 || mTalkButton == 3; } void setPtI_Id(u32 id) { mPtItem = id; } + u8 getPreItemNo() { return mItemNo; } u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } void onEventFlag(u16 flag) { mEventFlag |= flag; } diff --git a/include/d/d_letter.h b/include/d/d_letter.h new file mode 100644 index 000000000..92b3cce7d --- /dev/null +++ b/include/d/d_letter.h @@ -0,0 +1,15 @@ +#ifndef D_LETTER_H +#define D_LETTER_H + +bool dLetter_isNoSend(u16); +void dLetter_send(u16); +bool dLetter_isSend(u16); +bool dLetter_stock(u16); +bool dLetter_isStock(u16); +void dLetter_read(u16); +bool dLetter_isRead(u16); +void dLetter_delivery(u16); +void dLetter_autoStock(u16); +bool dLetter_isDelivery(u16); + +#endif /* D_LETTER_H */ diff --git a/include/d/d_lib.h b/include/d/d_lib.h index 994947108..b528816e0 100644 --- a/include/d/d_lib.h +++ b/include/d/d_lib.h @@ -5,7 +5,7 @@ class STControl { public: - void STControl(s16, s16, s16, s16, f32, f32, s16, s16); + STControl(s16, s16, s16, s16, f32, f32, s16, s16); void setWaitParm(s16, s16, s16, s16, f32, f32, s16, s16); void init(); void Xinit(); @@ -38,4 +38,16 @@ public: /* 0x26 */ s16 field_0x26; }; -#endif /* D_LIB_H */ \ No newline at end of file +class dLib_anm_prm_c { +public: + /* 0x00 */ s8 field_0x00; + /* 0x01 */ s8 field_0x01; + /* 0x02 */ s16 field_0x02; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ u32 loopMode; +}; + +void dLib_bcks_setAnm(const char*, mDoExt_McaMorf*, s8*, s8*, s8*, const int*, const dLib_anm_prm_c*, bool); + +#endif /* D_LIB_H */ diff --git a/include/d/d_npc.h b/include/d/d_npc.h index 9bc4f684a..6081215e7 100644 --- a/include/d/d_npc.h +++ b/include/d/d_npc.h @@ -37,14 +37,19 @@ class dNpc_JntCtrl_c { /* 0x32 */ s16 field_0x32; public: + dNpc_JntCtrl_c() { + field_0x0C = 0; + field_0x0B = 0; + } + bool angCalcS(s16*, s16, s16, s16); void limitter(s16*, s16, s16); - void follow(s16*, s16, s16, int); + bool follow(s16*, s16, s16, int); void move(s16, int); void lookAtTarget(s16*, cXyz*, cXyz, s16, s16, bool); void setParam(s16, s16, s16, s16, s16, s16, s16, s16, s16); - s16 chkLim(s16, int, int); + s32 chkLim(s16, int, int); void turn_fromBackbone2Head(s16, s16*, s16*, bool); void turn_fromHead2Backbone(s16, s16*, s16*); s16 follow_current(s16*, s16); @@ -53,10 +58,10 @@ public: class dNpc_EventCut_c { /* 0x00 */ char* mpEvtStaffName; - /* 0x04 */ s32 mEvtStaffId; + /* 0x04 */ int mEvtStaffId; /* 0x08 */ fopAc_ac_c* mpActor; /* 0x0C */ fopNpc_npc_c* mpTalkActor; - /* 0x10 */ s32 mCurActIdx; + /* 0x10 */ int mCurActIdx; /* 0x14 */ u32 field_0x14; /* 0x18 */ int mTimer; /* 0x1C */ char* mpActorName; @@ -78,6 +83,12 @@ class dNpc_EventCut_c { /* 0x68 */ u8* field_0x68; public: + dNpc_EventCut_c() { + mpActor = 0; + mpTalkActor = 0; + field_0x68 = 0; + } + void setActorInfo(char*, fopAc_ac_c*); void setActorInfo2(char*, fopNpc_npc_c*); @@ -166,8 +177,12 @@ enum dNpc_MessageStatus_e { class fopNpc_npc_c : public fopAc_ac_c { public: + fopNpc_npc_c() { + mCurrMsgBsPcId = -1; + mpCurrMsg = 0; + } /* 0x290 */ dNpc_JntCtrl_c mJntCtrl; - /* 0x2C4 */ dNpc_EventCut_c mEventCtrl; + /* 0x2C4 */ dNpc_EventCut_c mEventCut; /* 0x330 */ mDoExt_McaMorf* mpMcaMorf; /* 0x334 */ dBgS_ObjAcch mObjAcch; /* 0x4F8 */ dBgS_AcchCir mAcchCir; @@ -179,8 +194,8 @@ public: /* 0x6B0 */ msg_class* mpCurrMsg; /* 0x6B4 */ u8 pad_0x6B4[0x6C0 - 0x6B4]; - virtual u32 next_msgStatus(u32*) { return 0x10; } - virtual u32 getMsg() { return 1; } + virtual u16 next_msgStatus(u32* msgId) { return dNpcMsgStts_MSG_ENDS_e; } + virtual u32 getMsg() { return 0; } virtual void anmAtr(u16) {} void setCollision(float radius, float height); diff --git a/include/d/d_save.h b/include/d/d_save.h index c58e95862..30f2a6670 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -7,9 +7,10 @@ class dSv_player_status_a_c { public: /* 800589A8 */ void init(); - + u8 getSelectEquip(int i_no) { return mSelectEquip[i_no]; } u8 getWalletSize() { return mWalletSize; } + int getRupee() const { return mRupee; } u8 getMagic() { return mMagic; } /* 0x00 */ u16 mMaxLife; diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 50b2abcda..4e145ffd0 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -918,6 +918,8 @@ int dStage_mapInfo_GetOceanZ(stage_map_info_class*); int dStage_mapInfo_GetOceanX(stage_map_info_class*); void dStage_infoCreate(); +dStage_objectNameInf* dStage_searchName(const char*); + inline s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* i_stagInfo) { return (i_stagInfo->field_0x09 >> 1) & 0x7F; } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index cca5b9328..cf98a4cad 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -411,7 +411,7 @@ f32 fopAcM_searchActorDistanceXZ(fopAc_ac_c* p_actorA, fopAc_ac_c* p_actorB); f32 fopAcM_searchActorDistanceXZ2(fopAc_ac_c* p_actorA, fopAc_ac_c* p_actorB); -s32 fopAcM_rollPlayerCrash(fopAc_ac_c*, f32, u32, f32, f32, int, f32); +s32 fopAcM_rollPlayerCrash(fopAc_ac_c*, f32, u32); s32 fopAcM_checkCullingBox(f32[3][4], f32, f32, f32, f32, f32, f32); s32 fopAcM_cullingCheck(fopAc_ac_c*); void* event_second_actor(u16); diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 3aec03ece..089c1128a 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -248,11 +248,27 @@ public: mDoExt_McaMorf(J3DModelData*, mDoExt_McaMorfCallBack1_c*, mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, float, int, int, int, void*, unsigned long, unsigned long); virtual ~mDoExt_McaMorf(); + void calc(); + void calc(u16); void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32, void*); + void setMorf(f32); J3DModel* getModel() { return mpModel; } void setFrame(f32 frame) { mFrameCtrl.setFrame(frame); } + f32 getFrame() { return mFrameCtrl.getFrame(); } + bool isStop() const { //regswap somewhere here + bool stopped = true; + if (!mFrameCtrl.checkState(1) && mFrameCtrl.getRate() != 0.0f) { + stopped = false; + } + + return stopped; + } + void update(); void updateDL(); + void entry(); + void entryDL(); + void entryDL(J3DMaterialTable*); void play(Vec *, u32, s8); void stopZelAnime(); diff --git a/src/d/actor/d_a_obj_toripost.cpp b/src/d/actor/d_a_obj_toripost.cpp index 1e38a03f0..3ef8ce3b8 100644 --- a/src/d/actor/d_a_obj_toripost.cpp +++ b/src/d/actor/d_a_obj_toripost.cpp @@ -3,421 +3,1099 @@ // Translation Unit: d_a_obj_toripost.cpp // -#include "d_a_obj_toripost.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/d_lib.h" +#include "d/d_npc.h" +#include "d/d_letter.h" +#include "d/d_item_data.h" +#include "d/d_s_play.h" +#include "d/d_a_obj.h" +#include "d/d_procname.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" -/* 000000EC-0000010C .text createHeap_CB__FP10fopAc_ac_c */ -void createHeap_CB(fopAc_ac_c*) { - /* Nonmatching */ +extern dScnPly_reg_HIO_c g_regHIO; + +struct daObjTpost_c__letter_data { + /* 0x00 */ bool field_0x00; + /* 0x04 */ u32 mMsgId; + /* 0x08 */ u8 mItemId; + /* 0x0A */ u16 mEventReg; +}; + +class daObjTpost_c : public fopNpc_npc_c { +public: + enum Proc_e { + PROC_INIT = 0, + PROC_EXEC = 1 + }; + + bool _createHeap(); + bool cutProc(); + void cutPresentStart(int staffIdx); + void cutPresentProc(int staffIdx); + void cutSetAnmStart(int staffIdx); + void cutSetAnmProc(int staffIdx); + void cutDispLetterStart(int staffIdx); + void cutDispLetterProc(int staffIdx); + void deliverLetter(); + s16 getReceiveLetterNum(); + s32 getReadableLetterNum(); + u8 checkSendPrice(); + int getMsgXY(); + int getMsgNormal(); + u32 getMsg(); + u16 next_msgStatus(u32* msgId); + void anmAtr(u16); + bool checkTalk(); + void eventOrder(); + void checkOrder(); + void setAttention(); + void setAnm(s8 param_1, bool param_2); + void setMtx(); + void modeWaitInit(); + void modeWait(); + void modeTalkInit(); + void modeTalk(); + void modeTalkXYInit(); + void modeTalkXY(); + void modeReceiveInit(); + void modeReceive(); + void modeReceiveDemoInit(); + void modeReceiveDemo(); + void modeProc(Proc_e proc, int newMode); + bool _execute(); + void debugDraw(); + bool _draw(); + void createInit(); + void getArg(); + int _create(); + bool _delete(); + + inline s32 getSendPrice() { return m_send_price[mPayType]; } + + static const char m_arc_name[]; + static const daObjTpost_c__letter_data m_letter[]; + static const dCcD_SrcCyl m_cyl_src; + +private: + static const s32 m_send_price[]; + + /* 0x6C4 */ u32 mCurMode; + /* 0x6C8 */ s8 field_0x6C8; + /* 0x6C9 */ s8 field_0x6C9; + /* 0x6CA */ s8 field_0x6CA; + /* 0x6CC */ request_of_phase_process_class mPhs; + /* 0x6D4 */ mDoExt_McaMorf* mMorf; + /* 0x6D8 */ dBgS_ObjAcch mAcch; + /* 0x89C */ dBgS_AcchCir mAcchCir; + /* 0x8DC */ int field_0x8DC; + /* 0x8E0 */ int field_0x8E0; + /* 0x8E4 */ int field_0x8E4; + /* 0x8E8 */ u8 mPayType; + /* 0x8E9 */ u8 field_0x8E9; + /* 0x8EA */ u8 field_0x8EA; + /* 0x8EB */ u8 field_0x8EB; + /* 0x8EC */ s32 mNumReadable; + /* 0x8F0 */ u32 field_0x8F0; + /* 0x8F4 */ u8 field_0x8F4; + /* 0x8F5 */ u8 field_0x8F5; + /* 0x8F6 */ u8 field_0x8F6; + /* 0x8F7 */ s8 field_0x8F7; +}; + +const char daObjTpost_c::m_arc_name[] = "Toripost"; +const daObjTpost_c__letter_data daObjTpost_c::m_letter[] = { + {false, 0x1AAF, 0x07, 0xAC03}, + {false, 0x0CF9, 0x07, 0xB503}, + {false, 0x0CFA, 0xC3, 0x7D03}, + {false, 0x0CFC, 0x04, 0x7B03}, + {false, 0x0805, 0x04, 0x9D03}, + {false, 0x0CFD, 0x01, 0x7A03}, + {true, 0x0DB6, 0xCB, 0xB203}, + {false, 0x1148, 0x04, 0x8B03}, + {false, 0x1AAF, 0x07, 0xAC03}, + {true, 0x0F76, 0x9D, 0xB003}, + {false, 0x19A6, 0x3F, 0xAE03}, + {true, 0x0CFB, 0x04, 0x7C03}, + {true, 0x0F77, 0x9E, 0xAF03} +}; +const dCcD_SrcCyl daObjTpost_c::m_cyl_src = { + 0, + 0, + 0, + 0, + 0xFFFFFFBF, // Tg damage types + 0xF, + 0x79, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 0, + + // Cylinder + 0.0, // X + 0.0, // Y + 0.0, // Z + 0.0, // Radius + 0.0, // Height +}; +static const s32 daObjTpost_c::m_send_price[] = { + 0x05, + 0x0A, + 0x14 +}; + +class daObjTpost_HIO_c { +public: + daObjTpost_HIO_c(); + virtual ~daObjTpost_HIO_c() {} + + /* 0x04 */ s8 field_0x04; + /* 0x05 */ bool debug_draw; + /* 0x06 */ s8 field_0x06; + /* 0x07 */ u8 field_0x07; + /* 0x08 */ f32 attn_pos_offset; + /* 0x0C */ f32 eye_pos_offset; + /* 0x10 */ f32 talk_distance; + /* 0x14 */ s16 field_0x14; + /* 0x16 */ s16 field_0x16; +}; + +static daObjTpost_HIO_c l_HIO; + +// need to figure out what's putting this data in front of a bunch of rels with the compiler-generated symbol names +static Vec dummy = {1.0f, 1.0f, 1.0f}; +static Vec dummy2 = {1.0f, 1.0f, 1.0f}; +static u8 dummy3[] = { + 2, + 0, + 2, + 1, + 0, + 0, + 0, + 0, + 0x40, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0x3F, + 0xE0, + 0, + 0, + 0, + 0, + 0 +}; + +static int createHeap_CB(fopAc_ac_c* i_this) { + static_cast(i_this)->_createHeap(); } -/* 0000010C-0000022C .text _createHeap__12daObjTpost_cFv */ -void daObjTpost_c::_createHeap() { - /* Nonmatching */ +bool daObjTpost_c::_createHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arc_name, 9); + JUT_ASSERT(132, modelData != 0); + + mMorf = new mDoExt_McaMorf(modelData, 0, 0, 0, -1, 1.0f, 0, -1, 1, 0, 0x80000, 0x11000022); + + if(mMorf == 0 || mMorf->getModel() == 0) { + return 0; + } + else { + mMorf->getModel()->setUserArea((u32)this); + + return 1; + } } -/* 0000022C-00000280 .text __ct__16daObjTpost_HIO_cFv */ daObjTpost_HIO_c::daObjTpost_HIO_c() { - /* Nonmatching */ + field_0x04 = -1; + debug_draw = false; + field_0x06 = 0; + field_0x07 = 0; + attn_pos_offset = 140.0f; + eye_pos_offset = 100.0f; + talk_distance = 300.0f; + field_0x14 = 30; + field_0x16 = 30; } -/* 00000280-000003D4 .text cutProc__12daObjTpost_cFv */ -void daObjTpost_c::cutProc() { - /* Nonmatching */ +bool daObjTpost_c::cutProc() { + static const char* action_table[3] = { + "PRESENT", + "SET_ANM", + "DISP_LETTER" + }; + + int staffIdx = dComIfGp_evmng_getMyStaffId("Tpost", 0, 0); + if(staffIdx != -1) { + int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, 3, 1, 0); + if(actIdx == -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + if(dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch(actIdx) { + case 0: + cutPresentStart(staffIdx); + break; + case 1: + cutSetAnmStart(staffIdx); + break; + case 2: + cutDispLetterStart(staffIdx); + break; + } + } + + switch(actIdx) { + case 0: + cutPresentProc(staffIdx); + break; + case 1: + cutSetAnmProc(staffIdx); + break; + case 2: + cutDispLetterProc(staffIdx); + break; + } + } + } } -/* 000003D4-000003D8 .text cutPresentStart__12daObjTpost_cFi */ -void daObjTpost_c::cutPresentStart(int) { - /* Nonmatching */ +void daObjTpost_c::cutPresentStart(int staffIdx) { + return; } -/* 000003D8-00000474 .text cutPresentProc__12daObjTpost_cFi */ -void daObjTpost_c::cutPresentProc(int) { - /* Nonmatching */ +void daObjTpost_c::cutPresentProc(int staffIdx) { + u32 item = fopAcM_createItemForPresentDemo(¤t.pos, m_letter[mNumReadable].mItemId, 0, -1, -1, 0, 0); + if(item != 0xFFFFFFFF) { + dComIfGp_event_setItemPartnerId(item); + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + dComIfGp_evmng_cutEnd(staffIdx); + } } -/* 00000474-00000500 .text cutSetAnmStart__12daObjTpost_cFi */ -void daObjTpost_c::cutSetAnmStart(int) { - /* Nonmatching */ +void daObjTpost_c::cutSetAnmStart(int staffIdx) { + const char* name = dComIfGp_evmng_getMyStringP(staffIdx, "Name"); + if(name != 0 && dEvmng_strcmp(name, "HAKIDASU") == 0) { + setAnm(3, false); + } + else { + setAnm(1, false); + } } -/* 00000500-00000560 .text cutSetAnmProc__12daObjTpost_cFi */ -void daObjTpost_c::cutSetAnmProc(int) { - /* Nonmatching */ +void daObjTpost_c::cutSetAnmProc(int staffIdx) { + if(mMorf->isStop()) { //probably regswap in isStop() + dComIfGp_evmng_cutEnd(staffIdx); + } } -/* 00000560-00000580 .text cutDispLetterStart__12daObjTpost_cFi */ -void daObjTpost_c::cutDispLetterStart(int) { - /* Nonmatching */ +void daObjTpost_c::cutDispLetterStart(int staffIdx) { + mCurrMsgID = m_letter[mNumReadable].mMsgId; } -/* 00000580-000005F4 .text cutDispLetterProc__12daObjTpost_cFi */ -void daObjTpost_c::cutDispLetterProc(int) { - /* Nonmatching */ +void daObjTpost_c::cutDispLetterProc(int staffIdx) { + u16 mode = talk(0); + if(mode == 5) { + daPy_getPlayerActorClass()->field_0x2a0 |= 0x4000; // may be a onLetterReadEyeMove__9daPy_py_cFv inline based on debug map + } + if(mode == dNpcMsgStts_BOX_CLOSED_e) { + dComIfGp_evmng_cutEnd(staffIdx); + } } -/* 000005F4-00000650 .text deliverLetter__12daObjTpost_cFv */ void daObjTpost_c::deliverLetter() { - /* Nonmatching */ + switch(field_0x8F6) { + case 0x9A: + dComIfGs_onEventBit(0x1220); + break; + case 0x99: + dLetter_send(0xAC03); + break; + } } -/* 00000650-000006C0 .text getReceiveLetterNum__12daObjTpost_cFv */ -void daObjTpost_c::getReceiveLetterNum() { - /* Nonmatching */ +s16 daObjTpost_c::getReceiveLetterNum() { + s16 num = 0; + for(int i = 1; i < 0xD; i++) { + if(dLetter_isStock(m_letter[i].mEventReg)) { + num = num + 1; + } + } + + return num; } -/* 000006C0-00000750 .text getReadableLetterNum__12daObjTpost_cFv */ -void daObjTpost_c::getReadableLetterNum() { - /* Nonmatching */ +s32 daObjTpost_c::getReadableLetterNum() { + s32 num = 0; + s32 startIdx = mNumReadable ? mNumReadable : 1; + s32 readable = mNumReadable; + + if(readable < 0xD) { + for(int i = startIdx; i < 0xD; i++) { + if(dLetter_isStock(m_letter[i].mEventReg) == 0) { + continue; + } + + num = i; + break; + } + } + + return num; } -/* 00000750-000007B8 .text checkSendPrice__12daObjTpost_cFv */ -void daObjTpost_c::checkSendPrice() { - /* Nonmatching */ +u8 daObjTpost_c::checkSendPrice() { + static const u8 pay_type[49] = { + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 00, + 00, + 00, + 00, + 02, + 01, + 01, + 01, + 01, + 01, + 01, + 02, + 01, + 01, + 01, + 01, + 01, + 01, + 02, + 02, + 02, + 02, + 02, + 02, + 02 + }; + + if(strcmp(dComIfGp_getStartStageName(), "sea") != 0) { + return 0; + } + else { + return pay_type[fopAcM_GetRoomNo(this)]; + } } -/* 000007B8-0000092C .text getMsgXY__12daObjTpost_cFv */ -void daObjTpost_c::getMsgXY() { - /* Nonmatching */ +int daObjTpost_c::getMsgXY() { + s32 msgId; + GXColor col = {0x00, 0x00, 0x00, 0x80}; + cXyz pos(g_regHIO.mChild[12].mFloatRegs[0], g_regHIO.mChild[12].mFloatRegs[1], g_regHIO.mChild[12].mFloatRegs[2]); + cXyz scale(2.0f, 2.0f, 2.0f); + + switch(field_0x8F6) { + case 0x99: + case 0x9A: + msgId = 0xCE8; + col.r = g_regHIO.mChild[12].mShortRegs[0] + 0x80; + col.g = g_regHIO.mChild[12].mShortRegs[1] + 0x80; + col.b = g_regHIO.mChild[12].mShortRegs[2] + 0x80; + mDoMtx_stack_c::copy(mMorf->getModel()->mpNodeMtx[2]); + mDoMtx_stack_c::multVec(&pos, &pos); + dComIfGp_particle_set(0x57, &pos, &shape_angle, &scale, 0xFF, 0, -1, &col, 0, 0); + + break; + case 0x98: + case 0x9B: + setAnm(3, false); + field_0x8EA = 1; + msgId = 0xCEA; + + break; + default: + setAnm(3, false); + field_0x8EA = 1; + msgId = 0xCE9; + + break; + } + + return msgId; } -/* 0000092C-00000990 .text getMsgNormal__12daObjTpost_cFv */ -void daObjTpost_c::getMsgNormal() { - /* Nonmatching */ +int daObjTpost_c::getMsgNormal() { + s32 msgId; + if(field_0x8EB) { + dComIfGp_setMessageCountNumber(field_0x8F0); + msgId = 0xCF7; + field_0x8EB = 0; + } + else { + if(dKy_daynight_check() == false) { + msgId = 0xCE5; + } + else { + msgId = 0xCE6; + } + } + + return msgId; } -/* 00000990-000009EC .text getMsg__12daObjTpost_cFv */ -void daObjTpost_c::getMsg() { - /* Nonmatching */ +u32 daObjTpost_c::getMsg() { + if(dComIfGp_event_chkTalkXY()) { + return getMsgXY(); + } + else { + return getMsgNormal(); + } } -/* 000009EC-00000CF4 .text next_msgStatus__12daObjTpost_cFPUl */ -void daObjTpost_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ +u16 daObjTpost_c::next_msgStatus(u32* msgId) { + static const u32 pay_msg_num[3] = { + 0x0CEC, + 0x0CED, + 0x0CEE + }; + + u16 status = dNpcMsgStts_MSG_CONTINUES_e; + switch(*msgId) { + case 0xCE5: + case 0xCE6: + if(mNumReadable) { + dComIfGp_setMessageCountNumber(getReceiveLetterNum()); + *msgId = 0xCEB; + } + else { + *msgId = 0xCE7; + } + + break; + case 0xCEB: + dComIfGp_setMessageCountNumber(field_0x8F0); + *msgId = 0xCF7; + break; + case 0xCF7: + if(l_HIO.field_0x07 != 0 || m_letter[mNumReadable].field_0x00 != 0) { + *msgId = 0xCF3; + } + else { + field_0x8E9 = 1; + status = dNpcMsgStts_MSG_ENDS_e; + } + + break; + case 0xCE8: + *msgId = pay_msg_num[mPayType]; + + break; + case 0xCEC: + case 0xCED: + case 0xCEE: + *msgId = 0xCEF; + + break; + case 0xCEF: + if(mpCurrMsg->mSelectedChoiceIdx == 0) { + if(dComIfGs_getRupee() >= getSendPrice()) { + dComIfGp_setItemRupeeCount(-getSendPrice()); + dComIfGs_setReserveItemEmpty(); + deliverLetter(); + *msgId = 0xCF2; + } + else { + setAnm(3, false); + field_0x8EA = 1; + *msgId = 0xCF1; + } + } + else { + setAnm(3, false); + field_0x8EA = 1; + *msgId = 0xCF0; + } + + break; + case 0xCF3: + if(m_letter[mNumReadable].mEventReg == 0xB203) { + *msgId = 0xCF8; + } + else { + *msgId = 0xCF4; + } + + break; + case 0xCF4: + case 0xCF8: + if(mpCurrMsg->mSelectedChoiceIdx == 0) { + s32 price = 0x0A; + if(m_letter[mNumReadable].mEventReg == 0xB203) { + price = 0xC9; + } + if(dComIfGs_getRupee() >= price) { + dComIfGp_setItemRupeeCount(-price); + field_0x8E9 = 1; + status = dNpcMsgStts_MSG_ENDS_e; + } + else { + *msgId = 0xCF6; + } + } + else { + *msgId = 0xCF5; + } + + break; + case 0xCF5: + case 0xCF6: + mNumReadable += 1; + field_0x8F0 += 1; + mNumReadable = getReadableLetterNum(); + if(mNumReadable) { + dComIfGp_setMessageCountNumber(field_0x8F0); + *msgId = 0xCF7; + } + else { + status = dNpcMsgStts_MSG_ENDS_e; + } + + break; + default: + status = dNpcMsgStts_MSG_ENDS_e; + break; + } + + if(mCurrMsgID == m_letter[mNumReadable].mMsgId && status == dNpcMsgStts_MSG_ENDS_e) { + status = dNpcMsgStts_MSG_DISPLAYED_e; + } + + return status; } -/* 00000CF4-00000D38 .text checkTalk__12daObjTpost_cFv */ -void daObjTpost_c::checkTalk() { - /* Nonmatching */ +bool daObjTpost_c::checkTalk() { + return fopAcM_searchPlayerDistanceXZ(this) < l_HIO.talk_distance; } -/* 00000D38-00000DC0 .text eventOrder__12daObjTpost_cFv */ void daObjTpost_c::eventOrder() { - /* Nonmatching */ + static char* a_demo_name_tbl[] = { + "DEFAULT_POST" + }; + + if(field_0x8F7 == 1 || field_0x8F7 == 2) { + mEvtInfo.onCondition(1); + mEvtInfo.onCondition(0x20); + + if(field_0x8F7 == 1) { + fopAcM_orderSpeakEvent(this); + } + } + else if(field_0x8F7 >= 3) { + fopAcM_orderOtherEvent2(this, a_demo_name_tbl[field_0x8F7 - 3], 1, 0x14F); + } } -/* 00000DC0-00000E48 .text checkOrder__12daObjTpost_cFv */ void daObjTpost_c::checkOrder() { - /* Nonmatching */ + if(mEvtInfo.checkCommandDemoAccrpt()) { + field_0x8F7 = 0; + return; + } + + if(mEvtInfo.checkCommandTalk()) { + if(field_0x8F7 == 1 || field_0x8F7 == 2) { + field_0x8F7 = 0; + if(dComIfGp_event_chkTalkXY()) { + field_0x8F5 = 1; + } + else { + field_0x8F4 = 1; + } + } + } + + return; } -/* 00000E48-00000EA4 .text setAttention__12daObjTpost_cFv */ void daObjTpost_c::setAttention() { - /* Nonmatching */ + mAttentionInfo.mPosition = current.pos; + mAttentionInfo.mPosition.y += l_HIO.attn_pos_offset; + mEyePos = current.pos; + mEyePos.y += l_HIO.eye_pos_offset; } -/* 00000EA4-0000100C .text setAnm__12daObjTpost_cFScb */ -void daObjTpost_c::setAnm(signed char, bool) { - /* Nonmatching */ +void daObjTpost_c::setAnm(s8 param_1, bool param_2) { + static const int a_anm_bcks_tbl[] = { + 0x04, + 0x05, + 0x06, + }; + static const dLib_anm_prm_c a_anm_prm_tbl[] = { + { + -1, + -1, + 0, + 8.0f, + 1.0f, + 2 + }, + { + 0, + -1, + 0, + 8.0f, + 0.0f, + 0 + }, + { + 0, + -1, + 0, + 8.0f, + 1.0f, + 0 + }, + { + 1, + -1, + 0, + 8.0f, + 1.0f, + 0 + }, + { + 2, + -1, + 0, + 8.0f, + 1.0f, + 2 + }, + }; + + if(param_1 != 5) { + field_0x6C9 = param_1; + } + + if(field_0x6C8 == 0 && mMorf->getFrame() == 1.0f) { + mDoAud_seStart(0x6973, 0, 0, 0); + } + + if(field_0x6C8 == 1) { + cXyz scale; + scale.setAll(1.0f); + if(mMorf->getFrame() == 1.0f) { + dComIfGp_particle_set(0x8190, ¤t.pos, ¤t.angle, &scale, 0xFF, 0, -1, 0, 0, 0); + mDoAud_seStart(0x6974, 0, 0, 0); + } + } + + dLib_bcks_setAnm(m_arc_name, mMorf, &field_0x6C8, &field_0x6C9, &field_0x6CA, a_anm_bcks_tbl, a_anm_prm_tbl, param_2); } -/* 0000100C-00001094 .text setMtx__12daObjTpost_cFv */ void daObjTpost_c::setMtx() { - /* Nonmatching */ + J3DModel* pModel = mMorf->getModel(); + pModel->setBaseScale(mScale); + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + MTXCopy(mDoMtx_stack_c::get(), pModel->getBaseTRMtx()); } -/* 00001094-000010E0 .text modeWaitInit__12daObjTpost_cFv */ void daObjTpost_c::modeWaitInit() { - /* Nonmatching */ + field_0x8F0 = 1; + if(mNumReadable) { + setAnm(4, false); + } + else { + setAnm(1, false); + } } -/* 000010E0-00001188 .text modeWait__12daObjTpost_cFv */ void daObjTpost_c::modeWait() { - /* Nonmatching */ + if(mNumReadable) { + setAnm(4, false); + } + else { + setAnm(1, false); + } + + if(field_0x8F4) { + modeProc(PROC_INIT, 1); + } + else { + if(field_0x8F5) { + modeProc(PROC_INIT, 2); + } + else { + if(checkTalk()) { + field_0x8F7 = 2; + } + } + } } -/* 00001188-000011B0 .text modeTalkInit__12daObjTpost_cFv */ void daObjTpost_c::modeTalkInit() { - /* Nonmatching */ + setAnm(1, false); } -/* 000011B0-00001240 .text modeTalk__12daObjTpost_cFv */ void daObjTpost_c::modeTalk() { - /* Nonmatching */ + if(talk(1) == dNpcMsgStts_BOX_CLOSED_e) { + if(field_0x8E9) { + modeProc(PROC_INIT, 3); + field_0x8E9 = 0; + } + else { + modeProc(PROC_INIT, 0); + } + + dComIfGp_event_onEventFlag(8); + field_0x8F4 = 0; + } } -/* 00001240-0000129C .text modeTalkXYInit__12daObjTpost_cFv */ void daObjTpost_c::modeTalkXYInit() { - /* Nonmatching */ + setAnm(1, false); + field_0x8F6 = dComIfGp_event_getPreItemNo(); + field_0x8DC = l_HIO.field_0x14; + field_0x8E0 = l_HIO.field_0x16; } -/* 0000129C-00001490 .text modeTalkXY__12daObjTpost_cFv */ void daObjTpost_c::modeTalkXY() { - /* Nonmatching */ + daPy_py_c* player = daPy_getPlayerActorClass(); + if(field_0x6C9 == 3) { + if(field_0x8EA != 0) { + field_0x8E4 = 10; + field_0x8EA = 0; + } + + if(field_0x8E4 != -1 && cLib_calcTimer(&field_0x8E4) == 0) { + player->mDemo.setOriginalDemoType(); + player->mDemo.setParam0(0); + player->mDemo.setDemoMode(0x18); + + field_0x8E4 = -1; + } + + switch(mCurrMsgID) { + case 0xCE9: + case 0xCEA: + case 0xCF0: + case 0xCF1: + if(player->getBaseAnimeFrameRate() == 0.0f) { + player->mDemo.setOriginalDemoType(); + player->mDemo.setParam0(0); + player->mDemo.setDemoMode(1); + } + + break; + } + } + + if(field_0x6C9 == 1 && dComIfGp_evmng_ChkPresentEnd() && cLib_calcTimer(&field_0x8E0) == 0) { + dComIfGp_evmng_CancelPresent(); + setAnm(2, false); + } + + if(field_0x6C9 == 2 || field_0x6C9 == 3) { + if(mMorf->isStop()) { //probably regswap in isStop() + if(cLib_calcTimer(&field_0x8DC) == 0 && talk(1) == dNpcMsgStts_BOX_CLOSED_e) { + modeProc(PROC_INIT, 0); + dComIfGp_event_onEventFlag(8); + field_0x8F5 = 0; + } + } + } } -/* 00001490-000014D4 .text modeReceiveInit__12daObjTpost_cFv */ void daObjTpost_c::modeReceiveInit() { - /* Nonmatching */ + dComIfGp_event_onEventFlag(8); + field_0x8F7 = 3; + setAnm(1, false); } -/* 000014D4-000014FC .text modeReceive__12daObjTpost_cFv */ void daObjTpost_c::modeReceive() { - /* Nonmatching */ + modeProc(PROC_INIT, 4); } -/* 000014FC-00001500 .text modeReceiveDemoInit__12daObjTpost_cFv */ void daObjTpost_c::modeReceiveDemoInit() { - /* Nonmatching */ + return; } -/* 00001500-000015D8 .text modeReceiveDemo__12daObjTpost_cFv */ void daObjTpost_c::modeReceiveDemo() { - /* Nonmatching */ + if(dComIfGp_getEventManager().endCheckOld("DEFAULT_POST")) { + dLetter_read(m_letter[mNumReadable].mEventReg); + mNumReadable = getReadableLetterNum(); + dComIfGp_event_onEventFlag(8); + + if(mNumReadable != 0) { + modeProc(PROC_INIT, 1); + field_0x8F7 = 1; + field_0x8EB = 1; + field_0x8F0 += 1; + } + else { + modeProc(PROC_INIT, 0); + field_0x8F0 = 1; + } + } } -/* 000015D8-00001758 .text modeProc__12daObjTpost_cFQ212daObjTpost_c6Proc_ei */ -void daObjTpost_c::modeProc(daObjTpost_c::Proc_e, int) { - /* Nonmatching */ +void daObjTpost_c::modeProc(daObjTpost_c::Proc_e proc, int newMode) { + typedef void(daObjTpost_c::*mode_func_t)(void); + struct mode_entry_t { + mode_func_t init; + mode_func_t run; + const char* name; + }; + + static mode_entry_t mode_tbl[] = { + { + &daObjTpost_c::modeWaitInit, + &daObjTpost_c::modeWait, + "WAIT", + }, + { + &daObjTpost_c::modeTalkInit, + &daObjTpost_c::modeTalk, + "TALK", + }, + { + &daObjTpost_c::modeTalkXYInit, + &daObjTpost_c::modeTalkXY, + "TALK_XY", + }, + { + &daObjTpost_c::modeReceiveInit, + &daObjTpost_c::modeReceive, + "RECEIVE", + }, + { + &daObjTpost_c::modeReceiveDemoInit, + &daObjTpost_c::modeReceiveDemo, + "RECEIVE_DEMO", + } + }; + + if(proc == PROC_INIT) { + mCurMode = newMode; + (this->*mode_tbl[mCurMode].init)(); + } + else if(proc == PROC_EXEC) { + (this->*mode_tbl[mCurMode].run)(); + } } -/* 00001758-000018CC .text _execute__12daObjTpost_cFv */ -void daObjTpost_c::_execute() { - /* Nonmatching */ +bool daObjTpost_c::_execute() { + if(dComIfGs_isSymbol(1)) { + mNumReadable = getReadableLetterNum(); + } + else { + mNumReadable = 0; + } + + checkOrder(); + setAttention(); + setCollision(40.0f, 140.0f); + modeProc(PROC_EXEC, 5); + dBgS* bgs = dComIfG_Bgsp(); + + if(g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0 && mEventCut.cutProc() == false) { + cutProc(); + } + eventOrder(); + + fopAcM_posMoveF(this, 0); + mAcch.CrrPos(*bgs); + mStts.Move(); + if(mCyl.ChkTgHit()) { + daObj::HitSeStart(&mEyePos, current.roomNo, &mCyl, 0x0B); + } + daObj::HitEff_kikuzu(this, &mCyl); + fopAcM_rollPlayerCrash(this, 40.0f, 7); + + mMorf->play(0, 0, 0); + mMorf->calc(); + setMtx(); + setAnm(5, false); + + return 0; } -/* 000018CC-000018D0 .text debugDraw__12daObjTpost_cFv */ void daObjTpost_c::debugDraw() { - /* Nonmatching */ + GXColor col = {0xFF, 0x00, 0x00, 0x80}; } -/* 000018D0-00001980 .text _draw__12daObjTpost_cFv */ -void daObjTpost_c::_draw() { - /* Nonmatching */ +bool daObjTpost_c::_draw() { + if(l_HIO.debug_draw) { + debugDraw(); + } + + J3DModel* pModel = mMorf->getModel(); + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(pModel, &mTevStr); + mMorf->entryDL(); + dComIfGd_setSimpleShadow2(getPositionP(), mAcch.GetGroundH(), 40.0f, mAcch.m_gnd, shape_angle.y, 1.0f, 0); + + return 1; } -/* 00001980-00001BA4 .text createInit__12daObjTpost_cFv */ void daObjTpost_c::createInit() { - /* Nonmatching */ + if(dComIfGs_isSymbol(2)) { + dLetter_autoStock(0xB503); + } + + if(dComIfGs_checkGetItem(BOMB_BAG)) { + dLetter_autoStock(0x7D03); + } + + if(dLetter_isDelivery(0xAC03) && dComIfGs_isStageBossEnemy(6)) { + dLetter_autoStock(0x7C03); + } + + if(dComIfGs_isEventBit(0x1E80)) { + dLetter_autoStock(0x7B03); + } + + if(dComIfGs_getWalletSize() == 1 || dComIfGs_getWalletSize() == 2) { + dLetter_autoStock(0x7A03); + } + + field_0x8F0 = 1; + mCurrMsgBsPcId = -1; + mpCurrMsg = 0; + + mAttentionInfo.mDistances[1] = 5; + mAttentionInfo.mDistances[3] = 6; + mAttentionInfo.mFlags = 0x2000000A; + + setAnm(1, false); + setMtx(); + mMorf->calc(); + + mCullMtx = mMorf->getModel()->getBaseTRMtx(); + fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 70.0f, 200.0f, 70.0f); + mCullSizeFar = 10.0f; + + mStts.Init(0xFF, 0xFF, this); + mCyl.Set(m_cyl_src); + mCyl.SetStts(&mStts); + + mPayType = checkSendPrice(); + modeProc(PROC_INIT, 0); + + mAcchCir.SetWall(30.0f, 30.0f); + mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, &speed, 0, 0); + mAcch.SetRoofNone(); + mGravity = -4.5f; + + mEventCut.setActorInfo2("Tpost", this); } -/* 00001BA4-00001BA8 .text getArg__12daObjTpost_cFv */ void daObjTpost_c::getArg() { - /* Nonmatching */ + return; } -/* 00001BA8-00001D88 .text _create__12daObjTpost_cFv */ -void daObjTpost_c::_create() { - /* Nonmatching */ +int daObjTpost_c::_create() { + fopAcM_SetupActor(this, daObjTpost_c); + + getArg(); + int step = dComIfG_resLoad(&mPhs, m_arc_name); + if(step == cPhs_COMPLEATE_e) { + if(fopAcM_entrySolidHeap(this, &createHeap_CB, 0x7E0) == 0) { + return cPhs_ERROR_e; + } + + createInit(); + } + + return step; } -/* 00001D88-00001E54 .text __dt__8dCcD_CylFv */ -dCcD_Cyl::~dCcD_Cyl() { - /* Nonmatching */ +bool daObjTpost_c::_delete() { + dComIfG_resDelete(&mPhs, m_arc_name); + return true; } -/* 00001E54-00001E9C .text __dt__8cM3dGCylFv */ -cM3dGCyl::~cM3dGCyl() { - /* Nonmatching */ +static int daObjTpostCreate(void* i_this) { + return static_cast(i_this)->_create(); } -/* 00001E9C-00001EF8 .text __dt__14cCcD_ShapeAttrFv */ -cCcD_ShapeAttr::~cCcD_ShapeAttr() { - /* Nonmatching */ +static BOOL daObjTpostDelete(void* i_this) { + return static_cast(i_this)->_delete(); } -/* 00001EF8-00001F40 .text __dt__8cM3dGAabFv */ -cM3dGAab::~cM3dGAab() { - /* Nonmatching */ +static BOOL daObjTpostExecute(void* i_this) { + return static_cast(i_this)->_execute(); } -/* 00001F40-00001F9C .text __dt__10dCcD_GSttsFv */ -dCcD_GStts::~dCcD_GStts() { - /* Nonmatching */ +static BOOL daObjTpostDraw(void* i_this) { + return static_cast(i_this)->_draw(); } -/* 00001F9C-00002024 .text __dt__12dBgS_AcchCirFv */ -dBgS_AcchCir::~dBgS_AcchCir() { - /* Nonmatching */ +static bool daObjTpostIsDelete(void*) { + return true; } -/* 00002024-00002094 .text __dt__12dBgS_ObjAcchFv */ -dBgS_ObjAcch::~dBgS_ObjAcch() { - /* Nonmatching */ -} -/* 00002094-000020C4 .text _delete__12daObjTpost_cFv */ -void daObjTpost_c::_delete() { - /* Nonmatching */ -} - -/* 000020C4-000020E4 .text daObjTpostCreate__FPv */ -void daObjTpostCreate(void*) { - /* Nonmatching */ -} - -/* 000020E4-00002108 .text daObjTpostDelete__FPv */ -void daObjTpostDelete(void*) { - /* Nonmatching */ -} - -/* 00002108-0000212C .text daObjTpostExecute__FPv */ -void daObjTpostExecute(void*) { - /* Nonmatching */ -} - -/* 0000212C-00002150 .text daObjTpostDraw__FPv */ -void daObjTpostDraw(void*) { - /* Nonmatching */ -} - -/* 00002150-00002158 .text daObjTpostIsDelete__FPv */ -void daObjTpostIsDelete(void*) { - /* Nonmatching */ -} - -/* 00002158-000021A0 .text __dt__13cBgS_PolyInfoFv */ -cBgS_PolyInfo::~cBgS_PolyInfo() { - /* Nonmatching */ -} - -/* 000021A0-000021E8 .text __dt__8cM2dGCirFv */ -cM2dGCir::~cM2dGCir() { - /* Nonmatching */ -} - -/* 000021E8-00002244 .text __dt__8cM3dGCirFv */ -cM3dGCir::~cM3dGCir() { - /* Nonmatching */ -} - -/* 00002244-0000228C .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} - -/* 0000228C-0000229C .text GetShapeAttr__8dCcD_CylFv */ -void dCcD_Cyl::GetShapeAttr() { - /* Nonmatching */ -} - -/* 0000229C-000022A4 .text GetCoCP__12cCcD_CylAttrFv */ -void cCcD_CylAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 000022A4-000022AC .text GetCoCP__12cCcD_CylAttrCFv */ -void cCcD_CylAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 000022AC-000022B4 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000022B4-000022BC .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000022BC-000022F4 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 000022F4-000022FC .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 000022FC-00002304 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 00002304-0000230C .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 0000230C-00002344 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00002344-00002348 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} - -/* 00002348-00002350 .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} - -/* 00002350-00002358 .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 00002358-00002360 .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 00002360-0000236C .text GetCoCP__14cCcD_ShapeAttrFv */ -void cCcD_ShapeAttr::GetCoCP() { - /* Nonmatching */ -} - -/* 0000236C-00002378 .text GetCoCP__14cCcD_ShapeAttrCFv */ -void cCcD_ShapeAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 00002378-000023C0 .text __dt__16daObjTpost_HIO_cFv */ -daObjTpost_HIO_c::~daObjTpost_HIO_c() { - /* Nonmatching */ -} - -/* 000023C0-000023DC .text cLib_calcTimer__FPi */ -void cLib_calcTimer(int*) { - /* Nonmatching */ -} - -/* 00002418-00002420 .text @32@__dt__12dBgS_ObjAcchFv */ -void @32@__dt__12dBgS_ObjAcchFv { - /* Nonmatching */ -} - -/* 00002420-00002428 .text @20@__dt__12dBgS_ObjAcchFv */ -void @20@__dt__12dBgS_ObjAcchFv { - /* Nonmatching */ -} - -/* 00002428-00002430 .text @280@__dt__8dCcD_CylFv */ -void @280@__dt__8dCcD_CylFv { - /* Nonmatching */ -} - -/* 00002430-00002438 .text @248@__dt__8dCcD_CylFv */ -void @248@__dt__8dCcD_CylFv { - /* Nonmatching */ -} - -/* 00002438-00002440 .text next_msgStatus__12fopNpc_npc_cFPUl */ -void fopNpc_npc_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ -} - -/* 00002440-00002448 .text getMsg__12fopNpc_npc_cFv */ -void fopNpc_npc_c::getMsg() { - /* Nonmatching */ -} - -/* 00002448-0000244C .text anmAtr__12fopNpc_npc_cFUs */ -void fopNpc_npc_c::anmAtr(unsigned short) { - /* Nonmatching */ -} +static actor_method_class daObjTpostMethodTable = { + (process_method_func)daObjTpostCreate, + (process_method_func)daObjTpostDelete, + (process_method_func)daObjTpostExecute, + (process_method_func)daObjTpostIsDelete, + (process_method_func)daObjTpostDraw, +}; +extern actor_process_profile_definition g_profile_OBJ_TORIPOST = { + fpcLy_CURRENT_e, + 3, + fpcPi_CURRENT_e, + PROC_OBJ_TORIPOST, + &g_fpcLf_Method.mBase, + sizeof(daObjTpost_c), + 0, + 0, + &g_fopAc_Method.base, + 0x01B3, + &daObjTpostMethodTable, + 0x00240138, + fopAc_ACTOR_e, + fopAc_CULLBOX_4_e, +}; diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index ad4681cc6..13f011723 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -87,7 +87,7 @@ void dComIfG_play_c::itemInit() { for (int i = 0; i < 4; i++) { } - mCurrAuctionItemNameMsgID = 0; + mMsgCountNumber = 0; field_0x491a = 0; field_0x491c = 0; field_0x491e = 0; diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 7572f67e8..beaa58772 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -35,9 +35,10 @@ void dNpc_JntCtrl_c::limitter(s16* targetDiff, s16 maxDiff, s16 minDiff) { } } -/* 8021A884-8021A97C .text follow__14dNpc_JntCtrl_cFPsssi */ -void dNpc_JntCtrl_c::follow(short*, short, short, int) { - /* Nonmatching */ +bool dNpc_JntCtrl_c::follow(s16* outY, s16 targetY, s16 maxVel, int param_4) { + angCalcS(outY, targetY, 4, maxVel); + + return *outY != targetY; } /* 8021A97C-8021AABC .text move__14dNpc_JntCtrl_cFsi */ @@ -289,16 +290,18 @@ u8 dNpc_PathRun_c::pointArg(u8 idx) { return arg; } -bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, float param_2) { +bool dNpc_PathRun_c::setNearPathIndx(cXyz* param_1, f32 param_2) { bool set = false; if(mPath != 0) { f32 max_dist = 1000000000.0f; u8 pointIdx = 0; for(int i = 0; i < maxPoint(); i++) { cXyz point = getPoint(i); + cXyz diff = (*param_1 - point); - f32 temp = diff.getMagXZ(); - f32 dist = sqrtf(param_2 * (diff.y * diff.y) + temp); + f32 xz_mag = diff.getMagXZ(); + f32 y_mag = param_2 * (diff.y * diff.y); + f32 dist = sqrtf(y_mag + xz_mag); if(max_dist > dist) { max_dist = dist; @@ -575,12 +578,12 @@ bool dNpc_setAnm_2(mDoExt_McaMorf* pMorf, int loopMode, f32 morf, f32 speed, int } void dNpc_HeadAnm_c::swing_vertical_init(s16 param_1, s16 param_2, s16 param_3, int param_4) { - if(param_4 == 0 || mFunc != &swing_vertical) { + if(param_4 == 0 || mFunc != &swing_horizone) { //these ptmfs should be going in rodata instead of data field_0x1C = 0; field_0x20 = param_1; field_0x1E = param_2; field_0x14 = param_3; - mFunc = &swing_vertical; + mFunc = &swing_vertical; //these ptmfs should be going in rodata instead of data } } @@ -589,14 +592,13 @@ void dNpc_HeadAnm_c::swing_vertical() { /* Nonmatching */ } -/* 8021C3C8-8021C478 .text swing_horizone_init__14dNpc_HeadAnm_cFsssi */ void dNpc_HeadAnm_c::swing_horizone_init(s16 param_1, s16 param_2, s16 param_3, int param_4) { - if(param_4 == 0 || mFunc != &swing_horizone) { + if(param_4 == 0 || mFunc != &swing_vertical) { //these ptmfs should be going in rodata instead of data field_0x1C = 0; field_0x20 = param_1; field_0x1E = param_2; field_0x18 = param_3; - mFunc = &swing_horizone; + mFunc = &swing_horizone; //these ptmfs should be going in rodata instead of data } } @@ -615,9 +617,15 @@ void dNpc_HeadAnm_c::move() { } } -/* 8021C5D8-8021C620 .text chkLim__14dNpc_JntCtrl_cFsii */ -s16 dNpc_JntCtrl_c::chkLim(short, int, int) { - /* Nonmatching */ +s32 dNpc_JntCtrl_c::chkLim(s16 param_1, int param_2, int param_3) { + //if(maxRotations[param_2][param_3] > param_1) { + // param_1 = maxRotations[param_2][param_3]; + //} + //if(param_1 < minRotations[param_2][param_3]) { + // param_1 = minRotations[param_2][param_3]; + //} + + //return param_1; } void dNpc_JntCtrl_c::turn_fromBackbone2Head(s16 param_1, s16* param_2, s16* param_3, bool param_4) { @@ -1026,23 +1034,43 @@ fopAc_ac_c* dNpc_EventCut_c::findActorCallBack(fopAc_ac_c* pActor, void* pData) dNpc_EventCut_c* cut = static_cast(pData); if(cut == 0) { - pActor = 0; + return 0; } - else if(cut->mSetID == 0 || pActor->mSetID != cut->mSetID) { - if(cut->mpActorName == 0) { - pActor = 0; - } - else { - //if(dStage_searchName(cut->mpActorName) == 0) { - // pActor = 0; - //} - //else { - //} - } - } - else { + + if(cut->mSetID != 0 && pActor->mSetID == cut->mSetID) { cut->mTargetActorPos = pActor->current.pos; cut->mpTargetActor = pActor; + + return pActor; + } + else { + if(cut->mpActorName == 0) { + return 0; + } + else { + dStage_objectNameInf* obj = dStage_searchName(cut->mpActorName); + if(obj == 0) { + return 0; + } + else { + if(obj->mProcName == fopAcM_GetProfName(pActor) && obj->mSubtype == pActor->mSubtype) { + f32 mag = sqrtf(cut->mTargetActorPos.getSquareMag()); + + if(mag == 0.0f) { + cut->mTargetActorPos = pActor->current.pos; + cut->mpTargetActor = pActor; + } + else { + f32 mag1 = sqrtf((cut->mTargetActorPos - cut->mpActor->current.pos).getSquareMag()); + f32 mag2 = sqrtf((pActor->current.pos - cut->mpActor->current.pos).getSquareMag()); + if(mag2 < mag1) { + cut->mTargetActorPos = pActor->current.pos; + cut->mpTargetActor = pActor; + } + } + } + } + } } return 0; @@ -1262,3 +1290,31 @@ void dNpc_EventCut_c::cutTalkMsgProc() { } } } + +dCcD_SrcCyl dNpc_cyl_src = { + 0, + 0, + 0, + 0, + 0xFFFFFFBF, // Tg damage types + 3, + 0x75, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + + // Cylinder + 0.0, // X + 0.0, // Y + 0.0, // Z + 0.0, // Radius + 0.0, // Height +}; From 1a63838b65b4ed591ab605860859d8e209b62239 Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Tue, 19 Sep 2023 21:26:20 -0700 Subject: [PATCH 17/89] d_kankyo_data / d_kankyo_demo OK --- configure.py | 4 +- include/d/d_kankyo.h | 19 +- include/d/d_kankyo_data.h | 14 +- src/d/d_kankyo.cpp | 2 +- src/d/d_kankyo_data.cpp | 445 ++++++++++++++++++++++++++++++++++++-- src/d/d_kankyo_demo.cpp | 69 ++++-- 6 files changed, 502 insertions(+), 51 deletions(-) diff --git a/configure.py b/configure.py index fe08176ca..88b0a409a 100644 --- a/configure.py +++ b/configure.py @@ -363,10 +363,10 @@ config.libs = [ Object(Matching, "d/d_particle_name.cpp"), Object(NonMatching, "d/d_path.cpp"), Object(NonMatching, "d/d_drawlist.cpp"), - Object(NonMatching, "d/d_kankyo_data.cpp"), + Object(Matching, "d/d_kankyo_data.cpp"), Object(NonMatching, "d/d_kankyo_wether.cpp"), Object(NonMatching, "d/d_kankyo_rain.cpp"), - Object(NonMatching, "d/d_kankyo_demo.cpp"), + Object(Matching, "d/d_kankyo_demo.cpp"), Object(NonMatching, "d/d_detect.cpp"), Object(NonMatching, "d/d_vibration.cpp"), Object(NonMatching, "d/d_vib_pattern.cpp"), diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 03cd0f84b..0215cee03 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -107,6 +107,12 @@ struct WAVE_INFO { /* 0x14 */ f32 field_0x14; }; +struct DEMO_PLIGHT { + /* 0x00 */ int field_0x00; + /* 0x04 */ int field_0x04; + /* 0x08 */ LIGHT_INFLUENCE mLightInfluence; +}; + class dKy_tevstr_c { public: /* 0x00 */ J3DLightObj mLightObj; @@ -148,13 +154,6 @@ enum TevType { TEV_TYPE_ACTOR_NOLIGHT, }; -struct dScnKy__Schedule { - /* 0x0 */ f32 mTimeEnd; - /* 0x4 */ f32 mTimeBegin; - /* 0x8 */ u8 mPalIdx0; - /* 0x9 */ u8 mPalIdx1; -}; - class dKankyo_sun_Packet; class dKankyo_sunlenz_Packet; class dKankyo_rain_Packet; @@ -170,6 +169,7 @@ class stage_pselect_info_class; class stage_envr_info_class; class stage_vrbox_info_class; class stage_plight_info_class; +struct dKyd_Schedule; class dScnKy_env_light_c { public: @@ -203,7 +203,7 @@ public: /* 0x008 */ stage_pselect_info_class* mpPselectInfo; /* 0x00C */ stage_envr_info_class* mpEnvrInfo; /* 0x010 */ stage_vrbox_info_class* mpVrboxInfo; - /* 0x014 */ dScnKy__Schedule* mpSchejule; + /* 0x014 */ dKyd_Schedule* mpSchejule; /* 0x018 */ LIGHT_INFLUENCE mBaseLightInfluence; /* 0x038 */ LIGHT_INFLUENCE mLightInfluence[30]; /* 0x3F8 */ LIGHT_INFLUENCE* mpPLights[200]; @@ -392,6 +392,9 @@ void dKy_Sound_set(cXyz i_pos, int param_1, unsigned int i_actorID, int param_3) void dKy_itudemo_se(); void dKy_actor_addcol_set(s16, s16, s16, f32); void dKy_plight_set(LIGHT_INFLUENCE*); +void dKy_efplight_set(LIGHT_INFLUENCE* param_0); +void dKy_plight_cut(LIGHT_INFLUENCE* param_0); +void dKy_efplight_cut(LIGHT_INFLUENCE* param_0); void dKy_fog_startendz_set(f32, f32, f32); void dKy_vrbox_addcol_set(s16, s16, s16, f32); BOOL dKy_daynight_check(); diff --git a/include/d/d_kankyo_data.h b/include/d/d_kankyo_data.h index eee90a5c0..65ce67bdd 100644 --- a/include/d/d_kankyo_data.h +++ b/include/d/d_kankyo_data.h @@ -7,15 +7,21 @@ struct stage_vrbox_info_class; struct stage_pselect_info_class; struct stage_envr_info_class; struct stage_palet_info_class; -struct dScnKy__Schedule; + +struct dKyd_Schedule { + /* 0x0 */ f32 mTimeEnd; + /* 0x4 */ f32 mTimeBegin; + /* 0x8 */ u8 mPalIdx0; + /* 0x9 */ u8 mPalIdx1; +}; stage_palet_info_class* dKyd_dmpalet_getp(); stage_pselect_info_class* dKyd_dmpselect_getp(); stage_envr_info_class* dKyd_dmenvr_getp(); stage_vrbox_info_class* dKyd_dmvrbox_getp(); -dScnKy__Schedule* dKyd_schejule_getp(); -dScnKy__Schedule* dKyd_schejule_boss_getp(); -void dKyd_schejule_menu_getp(); +dKyd_Schedule* dKyd_schejule_getp(); +dKyd_Schedule* dKyd_schejule_boss_getp(); +dKyd_Schedule* dKyd_schejule_menu_getp(); void dKyd_xfog_table_set(u8); #endif /* D_KANKYO_DATA_H */ \ No newline at end of file diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index e278731ac..db389ffaf 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -640,7 +640,7 @@ void dScnKy_env_light_c::setLight_palno_get(u8* i_envrSel0, u8* i_envrSel1, u8* } } - dScnKy__Schedule* schedule_p; + dKyd_Schedule* schedule_p; for (int i = 0; i < 11; i++) { schedule_p = &mpSchejule[i]; if (mCurTime >= schedule_p->mTimeEnd && mCurTime <= schedule_p->mTimeBegin) { diff --git a/src/d/d_kankyo_data.cpp b/src/d/d_kankyo_data.cpp index 3974c6fed..a173a6d85 100644 --- a/src/d/d_kankyo_data.cpp +++ b/src/d/d_kankyo_data.cpp @@ -1,48 +1,447 @@ -// -// Generated by dtk -// Translation Unit: d_kankyo_data.cpp -// +/** + * d_kankyo_data.cpp + * Environment Data + */ -#include "d_kankyo_data.h" -#include "dolphin/types.h" +#include "d/d_kankyo_data.h" +#include "d/d_stage.h" + +static dKyd_Schedule l_time_attribute[] = { + {0.0f, 90.0f, 5, 5}, {90.0f, 105.0f, 5, 0}, {105.0f, 120.0f, 0, 1}, {120.0f, 150.0f, 1, 2}, + {150.0f, 270.0f, 2, 2}, {270.0f, 285.0f, 2, 3}, {285.0f, 300.0f, 3, 4}, {300.0f, 315.0f, 4, 5}, + {315.0f, 360.0f, 5, 5}, {360.0f, 360.0f, 5, 5}, {360.0f, 360.0f, 5, 5}, +}; + +static dKyd_Schedule l_time_attribute_boss[] = { + {0.0f, 45.0f, 0, 1}, {45.0f, 90.0f, 1, 2}, {90.0f, 180.0f, 2, 3}, {180.0f, 225.0f, 3, 4}, + {225.0f, 270.0f, 4, 5}, {270.0f, 360.0f, 5, 0}, {360.0f, 360.0f, 5, 5}, {360.0f, 360.0f, 5, 5}, + {360.0f, 360.0f, 5, 5}, {360.0f, 360.0f, 5, 5}, {360.0f, 360.0f, 5, 5}, +}; + +static dKyd_Schedule l_time_attribute_menu[] = { + {0.0f, 60.0f, 5, 5}, {60.0f, 75.0f, 5, 0}, {75.0f, 90.0f, 0, 0}, {90.0f, 105.0f, 0, 1}, + {105.0f, 150.0f, 1, 2}, {150.0f, 225.0f, 2, 2}, {225.0f, 240.0f, 2, 3}, {240.0f, 255.0f, 3, 4}, + {255.0f, 270.0f, 4, 5}, {270.0f, 300.0f, 5, 5}, {300.0f, 360.0f, 5, 5}, +}; + +static stage_palet_info_class l_field_data[] = { + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 0, + -5000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 1, + 40000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 2, + 10000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 3, + 8000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 4, + -5000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 5, + 40000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 6, + 10000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 7, + 8000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 0, + -5000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 1, + 40000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 2, + 10000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 3, + 8000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 0, + -5000.0f, + 30000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 1, + 40000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 2, + 10000.0f, + 50000.0f, + }, + { + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF}, + 3, + 8000.0f, + 30000.0f, + }, +}; + +static stage_pselect_info_class l_pselect_default[] = { + { + {0, 0, 1, 2, 2, 3, 0, 0}, + 0.0f, + }, + { + {4, 4, 5, 6, 6, 7, 0, 0}, + 0.0f, + }, +}; + +static stage_envr_info_class l_envr_default[] = { + { + {0, 1, 2, 3, 0, 0, 0, 0}, + }, + { + {4, 5, 6, 7, 0, 0, 0, 0}, + }, +}; + +static stage_vrbox_info_class l_vr_box_data[] = { + { + 0, + 0, + 0, + 0, + {0x4A, 0x47, 0x4F, 0xC0}, + {0x6C, 0x60, 0x5C, 0xFF}, + {0x4F, 0x46, 0x4E}, + {0x71, 0x5A, 0x49}, + {0xB4, 0x8E, 0x79}, + }, + { + 0, + 0, + 0, + 0, + {0xF7, 0xE8, 0xD8, 0xA3}, + {0xFF, 0xF1, 0xDF, 0xFF}, + {0xB4, 0xBC, 0xC9}, + {0xC1, 0xBE, 0xC5}, + {0xF1, 0xE6, 0xDC}, + }, + { + 0, + 0, + 0, + 0, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF}, + {0x50, 0x78, 0xFF}, + {0x50, 0x78, 0xFF}, + {0xA3, 0xD2, 0xFF}, + }, + { + 0, + 0, + 0, + 0, + {0xE9, 0xB1, 0x6C, 0xD4}, + {0xD0, 0x9B, 0x62, 0xFF}, + {0xE5, 0xA4, 0x6D}, + {0xC8, 0xA0, 0x64}, + {0xFF, 0xD1, 0x93}, + }, + { + 0, + 0, + 0, + 0, + {0x60, 0x55, 0x5A, 0x5F}, + {0x75, 0x5E, 0x5B, 0xFF}, + {0x64, 0x50, 0x4E}, + {0x67, 0x58, 0x4F}, + {0xE7, 0xC7, 0x96}, + }, + { + 0, + 0, + 0, + 0, + {0x34, 0x56, 0x78, 0x64}, + {0x3A, 0x64, 0x86, 0xFF}, + {0x0A, 0x32, 0x55}, + {0x00, 0x31, 0x4A}, + {0x3C, 0x4B, 0x64}, + }, + { + 0, + 0, + 0, + 0, + {0x25, 0x3C, 0x4B, 0xFF}, + {0x25, 0x3C, 0x4B, 0xFF}, + {0x0E, 0x14, 0x2C}, + {0x00, 0x00, 0x00}, + {0x13, 0x2B, 0x4D}, + }, + { + 0, + 0, + 0, + 0, + {0x00, 0x0A, 0x0A, 0x32}, + {0x00, 0x0A, 0x0A, 0x32}, + {0x00, 0x0A, 0x1E}, + {0x00, 0x5A, 0x50}, + {0x00, 0x1E, 0x26}, + }, +}; + +static GXFogAdjTable S_xfog_table_data[] = { + { + {260, 260, 270, 280, 290, 300, 310, 320, 330, 340}, + }, + { + {250, 260, 280, 320, 350, 400, 480, 550, 600, 800}, + }, +}; /* 80086EE0-80086EEC .text dKyd_dmpalet_getp__Fv */ -void dKyd_dmpalet_getp() { - /* Nonmatching */ +stage_palet_info_class* dKyd_dmpalet_getp() { + return l_field_data; } /* 80086EEC-80086EF8 .text dKyd_dmpselect_getp__Fv */ -void dKyd_dmpselect_getp() { - /* Nonmatching */ +stage_pselect_info_class* dKyd_dmpselect_getp() { + return l_pselect_default; } /* 80086EF8-80086F04 .text dKyd_dmenvr_getp__Fv */ -void dKyd_dmenvr_getp() { - /* Nonmatching */ +stage_envr_info_class* dKyd_dmenvr_getp() { + return l_envr_default; } /* 80086F04-80086F10 .text dKyd_dmvrbox_getp__Fv */ -void dKyd_dmvrbox_getp() { - /* Nonmatching */ +stage_vrbox_info_class* dKyd_dmvrbox_getp() { + return l_vr_box_data; } /* 80086F10-80086F1C .text dKyd_schejule_getp__Fv */ -void dKyd_schejule_getp() { - /* Nonmatching */ +dKyd_Schedule* dKyd_schejule_getp() { + return l_time_attribute; } /* 80086F1C-80086F28 .text dKyd_schejule_boss_getp__Fv */ -void dKyd_schejule_boss_getp() { - /* Nonmatching */ +dKyd_Schedule* dKyd_schejule_boss_getp() { + return l_time_attribute_boss; } /* 80086F28-80086F34 .text dKyd_schejule_menu_getp__Fv */ -void dKyd_schejule_menu_getp() { - /* Nonmatching */ +dKyd_Schedule* dKyd_schejule_menu_getp() { + return l_time_attribute_menu; } /* 80086F34-80086F74 .text dKyd_xfog_table_set__FUc */ -void dKyd_xfog_table_set(unsigned char) { - /* Nonmatching */ +void dKyd_xfog_table_set(u8 i_idx) { + for (int i = 0; i < 10; i++) { + u16 fogAdjTableEntry = S_xfog_table_data[i_idx].r[i]; + g_env_light.mFogAdjTable.r[i] = fogAdjTableEntry; + } } - diff --git a/src/d/d_kankyo_demo.cpp b/src/d/d_kankyo_demo.cpp index 6073a6dc0..dcc10a2be 100644 --- a/src/d/d_kankyo_demo.cpp +++ b/src/d/d_kankyo_demo.cpp @@ -1,23 +1,66 @@ -// -// Generated by dtk -// Translation Unit: d_kankyo_demo.cpp -// +/** + * d_kankyo_demo.cpp + * + */ -#include "d_kankyo_demo.h" -#include "dolphin/types.h" +#include "d/d_kankyo.h" /* 8009BE64-8009BF6C .text dKydm_demo_plight_entry__FP11DEMO_PLIGHTP4cXyziUc */ -void dKydm_demo_plight_entry(DEMO_PLIGHT*, cXyz*, int, unsigned char) { - /* Nonmatching */ +void dKydm_demo_plight_entry(DEMO_PLIGHT* i_plight, cXyz* i_pos, int param_2, u8 param_3) { + if (param_2 >= 0) { + i_plight->mLightInfluence.mPos = *i_pos; + i_plight->field_0x04 = param_2 + param_3 * 100; + + if (i_plight->field_0x04 < 100) { + // idk if this is fake but it's needed to match... + switch (i_plight->field_0x04) { + case 0: + break; + } + + i_plight->mLightInfluence.mColor.r = 255; + i_plight->mLightInfluence.mColor.g = 255; + i_plight->mLightInfluence.mColor.b = 128; + i_plight->mLightInfluence.mPower = 500.0f; + i_plight->mLightInfluence.mFluctuation = 255.0f; + dKy_plight_set(&i_plight->mLightInfluence); + } else { + if (i_plight->field_0x04 != 103) { + i_plight->mLightInfluence.mColor.r = 255; + i_plight->mLightInfluence.mColor.g = 255; + i_plight->mLightInfluence.mColor.b = 120; + i_plight->mLightInfluence.mPower = 437.0f; + i_plight->mLightInfluence.mFluctuation = 55.0f; + } else { + i_plight->mLightInfluence.mColor.r = 255; + i_plight->mLightInfluence.mColor.g = 255; + i_plight->mLightInfluence.mColor.b = 120; + i_plight->mLightInfluence.mPower = 532.0f; + i_plight->mLightInfluence.mFluctuation = 71.0f; + } + + dKy_efplight_set(&i_plight->mLightInfluence); + } + + i_plight->field_0x00 = 0; + i_plight->field_0x04 = param_2; + } } /* 8009BF6C-8009BFB0 .text dKydm_demo_plight_delete__FP11DEMO_PLIGHT */ -void dKydm_demo_plight_delete(DEMO_PLIGHT*) { - /* Nonmatching */ +void dKydm_demo_plight_delete(DEMO_PLIGHT* i_plight) { + if (i_plight != NULL) { + if (i_plight->field_0x04 < 100) { + dKy_plight_cut(&i_plight->mLightInfluence); + } else { + dKy_efplight_cut(&i_plight->mLightInfluence); + } + } } /* 8009BFB0-8009BFD4 .text dKydm_demo_plight_execute__FP11DEMO_PLIGHTP4cXyz */ -void dKydm_demo_plight_execute(DEMO_PLIGHT*, cXyz*) { - /* Nonmatching */ +void dKydm_demo_plight_execute(DEMO_PLIGHT* i_plight, cXyz* i_pos) { + if (i_plight != NULL) { + i_plight->mLightInfluence.mPos = *i_pos; + } } - From b2fc1d2683958a772da702d74bbbfd8e4a1d514c Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Wed, 20 Sep 2023 09:22:35 -0700 Subject: [PATCH 18/89] Move statics out of actor/ dir --- config/GZLE01/splits.txt | 26 ++++++++++----------- config/GZLJ01/splits.txt | 26 ++++++++++----------- config/GZLP01/splits.txt | 26 ++++++++++----------- configure.py | 2 +- src/d/{actor => }/d_a_boko_static.cpp | 0 src/d/{actor => }/d_a_bomb_static.cpp | 0 src/d/{actor => }/d_a_branch_static.cpp | 0 src/d/{actor => }/d_a_item_static.cpp | 0 src/d/{actor => }/d_a_itembase_static.cpp | 0 src/d/{actor => }/d_a_leaflift_static.cpp | 0 src/d/{actor => }/d_a_mgameboard_static.cpp | 0 src/d/{actor => }/d_a_npc_cb1_static.cpp | 0 src/d/{actor => }/d_a_npc_mk_static.cpp | 0 src/d/{actor => }/d_a_obj_tribox_static.cpp | 0 src/d/{actor => }/d_a_race_item_static.cpp | 0 src/d/{actor => }/d_a_ship_static.cpp | 0 src/d/{actor => }/d_a_shop_item_static.cpp | 0 17 files changed, 40 insertions(+), 40 deletions(-) rename src/d/{actor => }/d_a_boko_static.cpp (100%) rename src/d/{actor => }/d_a_bomb_static.cpp (100%) rename src/d/{actor => }/d_a_branch_static.cpp (100%) rename src/d/{actor => }/d_a_item_static.cpp (100%) rename src/d/{actor => }/d_a_itembase_static.cpp (100%) rename src/d/{actor => }/d_a_leaflift_static.cpp (100%) rename src/d/{actor => }/d_a_mgameboard_static.cpp (100%) rename src/d/{actor => }/d_a_npc_cb1_static.cpp (100%) rename src/d/{actor => }/d_a_npc_mk_static.cpp (100%) rename src/d/{actor => }/d_a_obj_tribox_static.cpp (100%) rename src/d/{actor => }/d_a_race_item_static.cpp (100%) rename src/d/{actor => }/d_a_ship_static.cpp (100%) rename src/d/{actor => }/d_a_shop_item_static.cpp (100%) diff --git a/config/GZLE01/splits.txt b/config/GZLE01/splits.txt index 76202e490..6226bc5ed 100644 --- a/config/GZLE01/splits.txt +++ b/config/GZLE01/splits.txt @@ -489,52 +489,52 @@ d/actor/d_a_obj.cpp: .sbss start:0x803F6BA0 end:0x803F6BA8 .sdata2 start:0x803F84C8 end:0x803F8530 -d/actor/d_a_obj_tribox_static.cpp: +d/d_a_obj_tribox_static.cpp: .text start:0x80067D1C end:0x80067D94 .ctors start:0x803386C8 end:0x803386CC .bss start:0x803E1F30 end:0x803E1F48 .sbss start:0x803F6BA8 end:0x803F6BC0 -d/actor/d_a_ship_static.cpp: +d/d_a_ship_static.cpp: .text start:0x80067D94 end:0x80067E78 .sdata2 start:0x803F8530 end:0x803F8538 -d/actor/d_a_boko_static.cpp: +d/d_a_boko_static.cpp: .text start:0x80067E78 end:0x80067FA0 .data start:0x80377018 end:0x80377168 .sdata start:0x803F61E0 end:0x803F61E8 -d/actor/d_a_bomb_static.cpp: +d/d_a_bomb_static.cpp: .text start:0x80067FA0 end:0x800684F4 .text start:0x800684F4 end:0x80068510 .rodata start:0x8034FC58 end:0x8034FC90 -d/actor/d_a_branch_static.cpp: +d/d_a_branch_static.cpp: .text start:0x80068510 end:0x800685F8 .rodata start:0x8034FC90 end:0x8034FCC0 -d/actor/d_a_mgameboard_static.cpp: +d/d_a_mgameboard_static.cpp: .text start:0x800685F8 end:0x80068650 -d/actor/d_a_itembase_static.cpp: +d/d_a_itembase_static.cpp: .text start:0x80068650 end:0x80068820 .rodata start:0x8034FCC0 end:0x8034FD10 -d/actor/d_a_item_static.cpp: +d/d_a_item_static.cpp: .text start:0x80068820 end:0x800689F0 .sdata2 start:0x803F8538 end:0x803F8540 -d/actor/d_a_shop_item_static.cpp: +d/d_a_shop_item_static.cpp: .text start:0x800689F0 end:0x80068A58 .rodata start:0x8034FD10 end:0x80351DF0 .sdata2 start:0x803F8540 end:0x803F8550 -d/actor/d_a_race_item_static.cpp: +d/d_a_race_item_static.cpp: .text start:0x80068A58 end:0x800690E4 .data start:0x80377168 end:0x80377228 .sdata2 start:0x803F8550 end:0x803F8558 -d/actor/d_a_leaflift_static.cpp: +d/d_a_leaflift_static.cpp: .text start:0x800690E4 end:0x800692C4 .sdata2 start:0x803F8558 end:0x803F8580 @@ -952,11 +952,11 @@ d/d_2dnumber.cpp: .data start:0x803890C8 end:0x80389138 .sdata2 start:0x803F9488 end:0x803F9508 -d/actor/d_a_npc_cb1_static.cpp: +d/d_a_npc_cb1_static.cpp: .text start:0x800CB5C4 end:0x800CB5CC .sbss start:0x803F6E60 end:0x803F6E68 -d/actor/d_a_npc_mk_static.cpp: +d/d_a_npc_mk_static.cpp: .text start:0x800CB5CC end:0x800CC734 .sdata2 start:0x803F9508 end:0x803F9560 diff --git a/config/GZLJ01/splits.txt b/config/GZLJ01/splits.txt index 25011b85a..8a10d4cd7 100644 --- a/config/GZLJ01/splits.txt +++ b/config/GZLJ01/splits.txt @@ -489,52 +489,52 @@ d/actor/d_a_obj.cpp: .sbss start:0x803EA070 end:0x803EA078 .sdata2 start:0x803EB980 end:0x803EB9E8 -d/actor/d_a_obj_tribox_static.cpp: +d/d_a_obj_tribox_static.cpp: .text start:0x80065B50 end:0x80065BC8 .ctors start:0x803360C4 end:0x803360C8 .bss start:0x803D5420 end:0x803D5438 .sbss start:0x803EA078 end:0x803EA090 -d/actor/d_a_ship_static.cpp: +d/d_a_ship_static.cpp: .text start:0x80065BC8 end:0x80065CAC .sdata2 start:0x803EB9E8 end:0x803EB9F0 -d/actor/d_a_boko_static.cpp: +d/d_a_boko_static.cpp: .text start:0x80065CAC end:0x80065DD4 .data start:0x8036A4B8 end:0x8036A608 .sdata start:0x803E96C8 end:0x803E96D0 -d/actor/d_a_bomb_static.cpp: +d/d_a_bomb_static.cpp: .text start:0x80065DD4 end:0x80066328 .text start:0x80066328 end:0x80066344 .rodata start:0x803436B8 end:0x803436F0 -d/actor/d_a_branch_static.cpp: +d/d_a_branch_static.cpp: .text start:0x80066344 end:0x8006642C .rodata start:0x803436F0 end:0x80343720 -d/actor/d_a_mgameboard_static.cpp: +d/d_a_mgameboard_static.cpp: .text start:0x8006642C end:0x80066484 -d/actor/d_a_itembase_static.cpp: +d/d_a_itembase_static.cpp: .text start:0x80066484 end:0x80066654 .rodata start:0x80343720 end:0x80343770 -d/actor/d_a_item_static.cpp: +d/d_a_item_static.cpp: .text start:0x80066654 end:0x80066824 .sdata2 start:0x803EB9F0 end:0x803EB9F8 -d/actor/d_a_shop_item_static.cpp: +d/d_a_shop_item_static.cpp: .text start:0x80066824 end:0x8006688C .rodata start:0x80343770 end:0x80345850 .sdata2 start:0x803EB9F8 end:0x803EBA08 -d/actor/d_a_race_item_static.cpp: +d/d_a_race_item_static.cpp: .text start:0x8006688C end:0x80066F18 .data start:0x8036A608 end:0x8036A6C8 .sdata2 start:0x803EBA08 end:0x803EBA10 -d/actor/d_a_leaflift_static.cpp: +d/d_a_leaflift_static.cpp: .text start:0x80066F18 end:0x800670F8 .sdata2 start:0x803EBA10 end:0x803EBA38 @@ -952,11 +952,11 @@ d/d_2dnumber.cpp: .data start:0x8037C568 end:0x8037C5D8 .sdata2 start:0x803EC950 end:0x803EC9D0 -d/actor/d_a_npc_cb1_static.cpp: +d/d_a_npc_cb1_static.cpp: .text start:0x800C855C end:0x800C8564 .sbss start:0x803EA330 end:0x803EA338 -d/actor/d_a_npc_mk_static.cpp: +d/d_a_npc_mk_static.cpp: .text start:0x800C8564 end:0x800C96CC .sdata2 start:0x803EC9D0 end:0x803ECA28 diff --git a/config/GZLP01/splits.txt b/config/GZLP01/splits.txt index 409e61d08..9a79cbdb2 100644 --- a/config/GZLP01/splits.txt +++ b/config/GZLP01/splits.txt @@ -489,52 +489,52 @@ d/actor/d_a_obj.cpp: .sbss start:0x803FE3A0 end:0x803FE3A8 .sdata2 start:0x803FFCF0 end:0x803FFD58 -d/actor/d_a_obj_tribox_static.cpp: +d/d_a_obj_tribox_static.cpp: .text start:0x8006BAFC end:0x8006BB74 .ctors start:0x8033DC08 end:0x8033DC0C .bss start:0x803E9858 end:0x803E9870 .sbss start:0x803FE3A8 end:0x803FE3C0 -d/actor/d_a_ship_static.cpp: +d/d_a_ship_static.cpp: .text start:0x8006BB74 end:0x8006BC58 .sdata2 start:0x803FFD58 end:0x803FFD60 -d/actor/d_a_boko_static.cpp: +d/d_a_boko_static.cpp: .text start:0x8006BC58 end:0x8006BD80 .data start:0x8037DCF8 end:0x8037DE48 .sdata start:0x803FD9E0 end:0x803FD9E8 -d/actor/d_a_bomb_static.cpp: +d/d_a_bomb_static.cpp: .text start:0x8006BD80 end:0x8006C2D4 .text start:0x8006C2D4 end:0x8006C2F0 .rodata start:0x80355FA8 end:0x80355FE0 -d/actor/d_a_branch_static.cpp: +d/d_a_branch_static.cpp: .text start:0x8006C2F0 end:0x8006C3D8 .rodata start:0x80355FE0 end:0x80356010 -d/actor/d_a_mgameboard_static.cpp: +d/d_a_mgameboard_static.cpp: .text start:0x8006C3D8 end:0x8006C430 -d/actor/d_a_itembase_static.cpp: +d/d_a_itembase_static.cpp: .text start:0x8006C430 end:0x8006C600 .rodata start:0x80356010 end:0x80356060 -d/actor/d_a_item_static.cpp: +d/d_a_item_static.cpp: .text start:0x8006C600 end:0x8006C7D0 .sdata2 start:0x803FFD60 end:0x803FFD68 -d/actor/d_a_shop_item_static.cpp: +d/d_a_shop_item_static.cpp: .text start:0x8006C7D0 end:0x8006C838 .rodata start:0x80356060 end:0x80358140 .sdata2 start:0x803FFD68 end:0x803FFD78 -d/actor/d_a_race_item_static.cpp: +d/d_a_race_item_static.cpp: .text start:0x8006C838 end:0x8006CEC4 .data start:0x8037DE48 end:0x8037DF08 .sdata2 start:0x803FFD78 end:0x803FFD80 -d/actor/d_a_leaflift_static.cpp: +d/d_a_leaflift_static.cpp: .text start:0x8006CEC4 end:0x8006D0A4 .sdata2 start:0x803FFD80 end:0x803FFDA8 @@ -952,11 +952,11 @@ d/d_2dnumber.cpp: .data start:0x8038FDA8 end:0x8038FE18 .sdata2 start:0x80400CB0 end:0x80400D30 -d/actor/d_a_npc_cb1_static.cpp: +d/d_a_npc_cb1_static.cpp: .text start:0x800CF264 end:0x800CF26C .sbss start:0x803FE660 end:0x803FE668 -d/actor/d_a_npc_mk_static.cpp: +d/d_a_npc_mk_static.cpp: .text start:0x800CF26C end:0x800D03D4 .sdata2 start:0x80400D30 end:0x80400D88 diff --git a/configure.py b/configure.py index fe08176ca..74c1054bb 100644 --- a/configure.py +++ b/configure.py @@ -413,7 +413,7 @@ config.libs = [ Object(NonMatching, "d/actor/d_a_boomerang.cpp"), Object(NonMatching, "d/actor/d_a_dai_item.cpp"), Object(NonMatching, "d/actor/d_a_demo00.cpp"), - Object(Matching, "d/actor/d_a_disappear.cpp"), + Object(Matching, "d/actor/d_a_disappear.cpp"), Object(NonMatching, "d/actor/d_a_esa.cpp"), Object(NonMatching, "d/actor/d_a_grid.cpp"), Object(NonMatching, "d/actor/d_a_himo2.cpp"), diff --git a/src/d/actor/d_a_boko_static.cpp b/src/d/d_a_boko_static.cpp similarity index 100% rename from src/d/actor/d_a_boko_static.cpp rename to src/d/d_a_boko_static.cpp diff --git a/src/d/actor/d_a_bomb_static.cpp b/src/d/d_a_bomb_static.cpp similarity index 100% rename from src/d/actor/d_a_bomb_static.cpp rename to src/d/d_a_bomb_static.cpp diff --git a/src/d/actor/d_a_branch_static.cpp b/src/d/d_a_branch_static.cpp similarity index 100% rename from src/d/actor/d_a_branch_static.cpp rename to src/d/d_a_branch_static.cpp diff --git a/src/d/actor/d_a_item_static.cpp b/src/d/d_a_item_static.cpp similarity index 100% rename from src/d/actor/d_a_item_static.cpp rename to src/d/d_a_item_static.cpp diff --git a/src/d/actor/d_a_itembase_static.cpp b/src/d/d_a_itembase_static.cpp similarity index 100% rename from src/d/actor/d_a_itembase_static.cpp rename to src/d/d_a_itembase_static.cpp diff --git a/src/d/actor/d_a_leaflift_static.cpp b/src/d/d_a_leaflift_static.cpp similarity index 100% rename from src/d/actor/d_a_leaflift_static.cpp rename to src/d/d_a_leaflift_static.cpp diff --git a/src/d/actor/d_a_mgameboard_static.cpp b/src/d/d_a_mgameboard_static.cpp similarity index 100% rename from src/d/actor/d_a_mgameboard_static.cpp rename to src/d/d_a_mgameboard_static.cpp diff --git a/src/d/actor/d_a_npc_cb1_static.cpp b/src/d/d_a_npc_cb1_static.cpp similarity index 100% rename from src/d/actor/d_a_npc_cb1_static.cpp rename to src/d/d_a_npc_cb1_static.cpp diff --git a/src/d/actor/d_a_npc_mk_static.cpp b/src/d/d_a_npc_mk_static.cpp similarity index 100% rename from src/d/actor/d_a_npc_mk_static.cpp rename to src/d/d_a_npc_mk_static.cpp diff --git a/src/d/actor/d_a_obj_tribox_static.cpp b/src/d/d_a_obj_tribox_static.cpp similarity index 100% rename from src/d/actor/d_a_obj_tribox_static.cpp rename to src/d/d_a_obj_tribox_static.cpp diff --git a/src/d/actor/d_a_race_item_static.cpp b/src/d/d_a_race_item_static.cpp similarity index 100% rename from src/d/actor/d_a_race_item_static.cpp rename to src/d/d_a_race_item_static.cpp diff --git a/src/d/actor/d_a_ship_static.cpp b/src/d/d_a_ship_static.cpp similarity index 100% rename from src/d/actor/d_a_ship_static.cpp rename to src/d/d_a_ship_static.cpp diff --git a/src/d/actor/d_a_shop_item_static.cpp b/src/d/d_a_shop_item_static.cpp similarity index 100% rename from src/d/actor/d_a_shop_item_static.cpp rename to src/d/d_a_shop_item_static.cpp From 62e1473c581c5fa4a4027ae14b6e98b47cd9ed86 Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Wed, 20 Sep 2023 21:04:56 -0700 Subject: [PATCH 19/89] d_kankyo_wether almost done --- include/JAZelAudio/JAIZelBasic.h | 2 + include/JAZelAudio/JAZelAudio_BGM.h | 105 ++ include/JAZelAudio/JAZelAudio_SE.h | 2218 ++++++++++++++++++++++++ include/JSystem/JParticle/JPAEmitter.h | 19 + include/d/d_com_inf_game.h | 45 +- include/d/d_drawlist.h | 55 +- include/d/d_kankyo.h | 19 +- include/d/d_kankyo_rain.h | 36 + include/d/d_kankyo_wether.h | 332 ++++ include/d/d_save.h | 4 + include/d/d_stage.h | 8 + include/m_Do/m_Do_audio.h | 4 + src/d/d_kankyo_wether.cpp | 1251 ++++++++++--- 13 files changed, 3853 insertions(+), 245 deletions(-) create mode 100644 include/JAZelAudio/JAZelAudio_BGM.h create mode 100644 include/JAZelAudio/JAZelAudio_SE.h diff --git a/include/JAZelAudio/JAIZelBasic.h b/include/JAZelAudio/JAIZelBasic.h index af5baa678..91626f1b4 100644 --- a/include/JAZelAudio/JAIZelBasic.h +++ b/include/JAZelAudio/JAIZelBasic.h @@ -2,6 +2,8 @@ #define JAZELAUDIO_JAIZELBASIC_H #include "dolphin/types.h" +#include "JAZelAudio/JAZelAudio_SE.h" +#include "JAZelAudio/JAZelAudio_BGM.h" class Vec; class JAISound; diff --git a/include/JAZelAudio/JAZelAudio_BGM.h b/include/JAZelAudio/JAZelAudio_BGM.h new file mode 100644 index 000000000..adcf0e963 --- /dev/null +++ b/include/JAZelAudio/JAZelAudio_BGM.h @@ -0,0 +1,105 @@ +#ifndef JAZELAUDIO_BGM_H +#define JAZELAUDIO_BGM_H + +enum { + JA_BGM_SE_SEQUENCE = 0x0800, + JA_BGM_ISLAND_LINK = 0x0001, + JA_BGM_ITEM_GET = 0x0002, + JA_BGM_GOMA = 0x0003, + JA_BGM_BATTLE_NORM = 0x0004, + JA_BGM_KINDAN_BOSS = 0x0005, + JA_BGM_D_RYU_MT = 0x0006, + JA_BGM_I_MAJU = 0x0007, + JA_BGM_HOUSE = 0x0008, + JA_BGM_OPEN_BOX = 0x0009, + JA_BGM_DIE_LINK = 0x000A, + JA_BGM_SEA_GAME = 0x000B, + JA_BGM_SEA_GOAL = 0x000C, + JA_BGM_SEA_FAIL = 0x000D, + JA_BGM_ISLAND_LINK_2 = 0x000E, + JA_BGM_I_MAJU_JAIL = 0x000F, + JA_BGM_GOMA_2 = 0x0010, + JA_BGM_JI_TRAINING = 0x0011, + JA_BGM_TETRA_MEET = 0x0012, + JA_BGM_BK_FLY_DOWN = 0x0013, + JA_BGM_DK_BATTLE = 0x0014, + JA_BGM_MJ_TOWER_BATTLE = 0x0015, + JA_BGM_FIND_TETRA = 0x0016, + JA_BGM_I_LINK_FOREST = 0x0017, + JA_BGM_HOUSE_G = 0x0018, + JA_BGM_MBOSS = 0x0019, + JA_BGM_MBOSS_S = 0x001A, + JA_BGM_BOAT_SHOP = 0x001B, + JA_BGM_SEA_ENEMY = 0x001C, + JA_BGM_MORNING = 0x001D, + JA_BGM_SELECT = 0x001E, + JA_BGM_MEDRI_AWAKE = 0x001F, + JA_BGM_MAKORE_AWAKE = 0x0020, + JA_BGM_TAKT_MAKORE = 0x0021, + JA_BGM_TAKT_MEDRI = 0x0022, + JA_BGM_BST_BATTLE = 0x0023, + JA_BGM_GET_HEART = 0x0024, + JA_BGM_ITEM_GET_S = 0x0025, + JA_BGM_D_FOREST = 0x0026, + JA_BGM_GET_SONG = 0x0027, + JA_BGM_KAMI_TOWER = 0x0028, + JA_BGM_RANE_BATTLE = 0x0029, + JA_BGM_PIRATE = 0x002A, + JA_BGM_DIOCTA_BATTLE = 0x002B, + JA_BGM_PIRATE_C = 0x002C, + JA_BGM_D_EARTH = 0x002D, + JA_BGM_SEA = 0x002E, + JA_BGM_D_WIND = 0x002F, + JA_BGM_TAKT_CHUYA = 0x0030, + JA_BGM_TAKT_KAZE = 0x0031, + JA_BGM_TAKT_SHIPPU = 0x0032, + JA_BGM_TETRA_MEET_B = 0x0033, + JA_BGM_HYRULE_OFF = 0x0034, + JA_BGM_HYRULE_ON = 0x0035, + JA_BGM_CB_NEXTYEAR = 0x0036, + JA_BGM_CB_NEXTYEAR_W = 0x0037, + JA_BGM_ISLAND_LINK_0 = 0x0038, + JA_BGM_ISLAND_WOOD = 0x0039, + JA_BGM_ISLAND_DRAGON = 0x003A, + JA_BGM_ISLAND_TAURA = 0x003B, + JA_BGM_SEA_STORM = 0x003C, + JA_BGM_PIRATE_DEMO5 = 0x003D, + JA_BGM_JI_TRAINING_2 = 0x003E, + JA_BGM_I_WOOD_INNER = 0x003F, + JA_BGM_DRUG_STORE = 0x0040, + JA_BGM_P_GANON_1 = 0x0041, + JA_BGM_D_GANON_1 = 0x0042, + JA_BGM_D_GANON_2 = 0x0043, + JA_BGM_BAACHAN = 0x0044, + JA_BGM_DEKU_PINCH = 0x0045, + JA_BGM_DIOCTA_2 = 0x0046, + JA_BGM_P_GANON_2 = 0x0047, + JA_BGM_BIG_POW = 0x0048, + JA_BGM_PAST_BIG_POW = 0x0049, + JA_BGM_PAST_BKM = 0x004A, + JA_BGM_PAST_GOMA = 0x004B, + JA_BGM_PAST_RANE = 0x004C, + JA_BGM_GANON_BATTLE = 0x004D, + JA_BGM_MASTER_SWORD = 0x004E, + JA_BGM_GET_PEARL = 0x004F, + JA_BGM_BIRDMAN = 0x0050, + JA_BGM_BIRDMAN_GOAL = 0x0051, + JA_BGM_BIRDMAN_FAIL = 0x0052, + JA_BGM_ELF = 0x0053, + JA_BGM_PAST_GOMA_2 = 0x0054, + JA_BGM_ISLAND_LINK_3 = 0x0055, + JA_BGM_DEATH_VALLEY = 0x0056, + JA_BGM_JABOO_CAVE = 0x0057, + JA_BGM_SUB_DUNGEON = 0x0058, + JA_BGM_BGN_KUGUTSU = 0x0059, + JA_BGM_BGN_TARABA = 0x005A, + JA_BGM_BGN_HAYAMUSHI = 0x005B, + JA_BGM_BGN_TARABA_IN = 0x005C, + JA_BGM_BGN_GET_BOX = 0x005D, + JA_BGM_I_MAJU_2ND = 0x005E, + JA_BGM_MAKORE_TAKT_8 = 0x005F, + JA_BGM_MEDORI_TAKT_8 = 0x0060, + JA_BGM_TRIFORCE_DEMO = 0x0061, +}; + +#endif /* JAZELAUDIO_BGM_H */ \ No newline at end of file diff --git a/include/JAZelAudio/JAZelAudio_SE.h b/include/JAZelAudio/JAZelAudio_SE.h new file mode 100644 index 000000000..e7859075b --- /dev/null +++ b/include/JAZelAudio/JAZelAudio_SE.h @@ -0,0 +1,2218 @@ +#ifndef JAZELAUDIO_SE_H +#define JAZELAUDIO_SE_H + +enum { + JA_SE_TELESCOPE_ZOOM = 0x0008, + JA_SE_CAMERA_C_MOVE = 0x001B, + JA_SE_WINDTAKT_PLAY = 0x001E, + JA_SE_ALMOST_DIE_ALERM_1 = 0x00D0, + JA_SE_ALMOST_DIE_ALERM_2 = 0x00D1, + JA_SE_ALMOST_DIE_ALERM_3 = 0x00D2, + JA_SE_OMAMORI_BLINK_SUS = 0x00DB, + JA_SE_CURSOR_MOVE_1 = 0x0800, + JA_SE_OK_1 = 0x0801, + JA_SE_CANCEL_1 = 0x0802, + JA_SE_SCROLL_1 = 0x0803, + JA_SE_L_FOCUS_SET = 0x0804, + JA_SE_L_FOCUS_RESET = 0x0805, + JA_SE_READ_RIDDLE_1 = 0x0806, + JA_SE_NO_SE = 0x0807, + JA_SE_TELESCOPE_STOP = 0x0809, + JA_SE_TALK_START = 0x080A, + JA_SE_TALK_NEXT = 0x080B, + JA_SE_TALK_WIN_OPEN = 0x080C, + JA_SE_TALK_WIN_CLOSE = 0x080D, + JA_SE_ITM_MENU_CURSOR = 0x080E, + JA_SE_ITM_MENU_IN = 0x080F, + JA_SE_ITM_MENU_OUT = 0x0810, + JA_SE_ITM_MENU_PANEL_IN = 0x0811, + JA_SE_ITM_MENU_LRUD_IN = 0x0812, + JA_SE_ITM_MENU_ITEMS_IN = 0x0813, + JA_SE_ITM_MENU_EXP_IN = 0x0814, + JA_SE_ITM_MENU_PAGE = 0x0815, + JA_SE_ITM_MENU_EXP_OUT = 0x0816, + JA_SE_ITM_MENU_SET = 0x0817, + JA_SE_MAP_SHOW = 0x0818, + JA_SE_MAP_SHOW_END = 0x0819, + JA_SE_MAP_CANCEL = 0x081A, + JA_SE_CAMERA_L_MOVE = 0x081C, + JA_SE_CAMERA_L_CANCEL = 0x081D, + JA_SE_COMPASS_MOVE = 0x081F, + JA_SE_INDICATOR_1 = 0x0820, + JA_SE_HEART_PIECE = 0x0821, + JA_SE_ITM_SUBMENU_IN_1 = 0x0822, + JA_SE_ITM_SUBMENU_IN_2 = 0x0823, + JA_SE_ITM_SUBMENU_OUT = 0x0824, + JA_SE_TALK_END = 0x0825, + JA_SE_LUPY_GET = 0x0826, + JA_SE_CONSUMP_ITEM_GET = 0x0827, + JA_SE_CAMERA_TO_MANUAL = 0x0828, + JA_SE_BOOM_LOCK_ON_1 = 0x0829, + JA_SE_BOOM_LOCK_ON_2 = 0x082A, + JA_SE_BOOM_LOCK_ON_3 = 0x082B, + JA_SE_BOOM_LOCK_ON_4 = 0x082C, + JA_SE_BOOM_LOCK_ON_5 = 0x082D, + JA_SE_OP_PUSH_START = 0x082E, + JA_SE_OP_ENTER_GAME = 0x082F, + JA_SE_MSEL_CURSOR = 0x0830, + JA_SE_MSEL_OK_1 = 0x0831, + JA_SE_MSEL_CANCEL_1 = 0x0832, + JA_SE_MSEL_ENTER_GAME = 0x0833, + JA_SE_MAJUTOU_ALERM = 0x0834, + JA_SE_BLUE_LUPY_GET = 0x0835, + JA_SE_RED_LUPY_GET = 0x0836, + JA_SE_PURPLE_LUPY_GET = 0x0837, + JA_SE_SILVER_LUPY_GET = 0x0838, + JA_SE_LUPY_INC_CNT_1 = 0x0839, + JA_SE_LUPY_INC_CNT_2 = 0x083A, + JA_SE_LUPY_DEC_CNT_1 = 0x083B, + JA_SE_LUPY_DEC_CNT_2 = 0x083C, + JA_SE_TALK_CURSOR = 0x083D, + JA_SE_SHOCK_SW_ON = 0x083E, + JA_SE_SWIM_TIMER_ON = 0x083F, + JA_SE_SWIM_TIMER_BLINLK = 0x0840, + JA_SE_SWIM_TIMER_ALERT_1 = 0x0841, + JA_SE_MAJUTOU_JAIL_DOOR = 0x0842, + JA_SE_SGAME_COUNTDOWN = 0x0843, + JA_SE_SGAME_COUNT_GO = 0x0844, + JA_SE_SGAME_TIMER_30 = 0x0845, + JA_SE_SGAME_TIMER_10 = 0x0846, + JA_SE_SGAME_TIMER_0 = 0x0847, + JA_SE_SGAME_YOU_GOT = 0x0848, + JA_SE_SGAME_DISP_LUPY = 0x0849, + JA_SE_ITM_MENU_DECIDE = 0x084A, + JA_SE_ITM_MENU_CANCEL = 0x084B, + JA_SE_ITM_MENU_OPT_IN = 0x084C, + JA_SE_ITM_MENU_OPT_OUT = 0x084D, + JA_SE_ITM_MENU_OPT_STR = 0x084E, + JA_SE_ITM_MENU_OPT_SW = 0x084F, + JA_SE_ITM_MENU_MAP_IN = 0x0850, + JA_SE_ITM_MENU_MAP_OUT = 0x0851, + JA_SE_ITM_OMAMORI_BLINK = 0x0852, + JA_SE_ITM_OMAMORI_ST_TALK = 0x0853, + JA_SE_ITM_OMAMORI_TETLA = 0x0854, + JA_SE_ITM_OMAMORI_ED_TALK = 0x0855, + JA_SE_EXIT_GAME_PANEL = 0x0856, + JA_SE_EXIT_GAME_CURSOR = 0x0857, + JA_SE_EXIT_GAME_SEL_YES = 0x0858, + JA_SE_EXIT_GAME_SEL_NO = 0x0859, + JA_SE_EXIT_GAME_OVER = 0x085A, + JA_SE_VS_JI_OPENING = 0x085B, + JA_SE_VS_JI_ENDING = 0x085C, + JA_SE_ITM_OMAMORI_SHIP = 0x085D, + JA_SE_MAN_CAMERA_NG = 0x085E, + JA_SE_SP_ATTACK_ON = 0x085F, + JA_SE_SGAME_PERFECT = 0x0860, + JA_SE_SYS_EV_TIMER_20 = 0x0861, + JA_SE_SYS_EV_TIMER_10 = 0x0862, + JA_SE_SYS_EV_TIMER_5 = 0x0863, + JA_SE_SYS_EV_TIMER_0 = 0x0864, + JA_SE_TAKT_CMD_01 = 0x0865, + JA_SE_TAKT_CMD_02 = 0x0866, + JA_SE_TAKT_CMD_03 = 0x0867, + JA_SE_TAKT_CMD_04 = 0x0868, + JA_SE_TAKT_CMD_05 = 0x0869, + JA_SE_TAKT_CMD_06 = 0x086A, + JA_SE_TAKT_CMD_07 = 0x086B, + JA_SE_TAKT_CMD_08 = 0x086C, + JA_SE_TAKT_CMD_09 = 0x086D, + JA_SE_TAKT_CMD_10 = 0x086E, + JA_SE_TAKT_USE_BEGIN = 0x086F, + JA_SE_TAKT_USE_CANCEL = 0x0870, + JA_SE_TAKT_MATCHED = 0x0871, + JA_SE_TAKT_WIND_DISP = 0x0872, + JA_SE_TAKT_WIND_CANCEL = 0x0873, + JA_SE_TAKT_WIND_CURSOR = 0x0874, + JA_SE_TAKT_WIND_DECIDE = 0x0875, + JA_SE_TAKT_WIND_DEMO = 0x0876, + JA_SE_TAKT_WIND_END = 0x0877, + JA_SE_UTSUSHIE_SHUTTER = 0x0878, + JA_SE_MAGIC_POT_GET_S = 0x0879, + JA_SE_MAGIC_POT_GET_L = 0x087A, + JA_SE_SPOILS_GET = 0x087B, + JA_SE_HP_GAUGE_INC = 0x087C, + JA_SE_MP_GAUGE_INC = 0x087D, + JA_SE_MP_GAUGE_DEC = 0x087E, + JA_SE_SHOP_BOUGHT = 0x087F, + JA_SE_TALK_SEL_CANCEL = 0x0880, + JA_SE_MP_GAUGE_DEC_FIN = 0x0881, + JA_SE_LAGGAGE_IN_POST = 0x0882, + JA_SE_ITEM_TARGET_OUT = 0x0883, + JA_SE_TALK_SEL_WIN_OPEN = 0x0884, + JA_SE_CTRL_LINK_TO_NPC = 0x0885, + JA_SE_CTRL_NPC_TO_LINK = 0x0886, + JA_SE_WTAKT_METRONOME = 0x0887, + JA_SE_WTAKT_DRONE = 0x0888, + JA_SE_WTAKT_DANCE01 = 0x0889, + JA_SE_WTAKT_DANCE02 = 0x088A, + JA_SE_WTAKT_DANCE03 = 0x088B, + JA_SE_WTAKT_DANCE04 = 0x088C, + JA_SE_WTAKT_DANCE05 = 0x088D, + JA_SE_WTAKT_DANCE06 = 0x088E, + JA_SE_WTAKT_DANCE07 = 0x088F, + JA_SE_WTAKT_DANCE08 = 0x0890, + JA_SE_WTAKT_DANCE09 = 0x0891, + JA_SE_WTAKT_DANCE10 = 0x0892, + JA_SE_WTAKT_PULSE_3 = 0x0893, + JA_SE_WTAKT_PULSE_4 = 0x0894, + JA_SE_WTAKT_PULSE_6 = 0x0895, + JA_SE_WTAKT_MATCH_SIGNAL = 0x0896, + JA_SE_MSEL_ALERT_PANEL_IN = 0x0897, + JA_SE_MSEL_ALERT_PANEL_OUT = 0x0898, + JA_SE_MSEL_CLOTH_ON = 0x0899, + JA_SE_MSEL_DATA_MANAGE_S = 0x089A, + JA_SE_MSEL_DATA_MANAGE_E = 0x089B, + JA_SE_NAME_CURSOR = 0x089C, + JA_SE_NAME_INPUT = 0x089D, + JA_SE_NAME_DELETE = 0x089E, + JA_SE_NAME_PUSH_BUTTON = 0x089F, + JA_SE_NAME_NAME_CURSOR = 0x08A0, + JA_SE_NAME_STR_SWITCH = 0x08A1, + JA_SE_READ_RIDDLE_2 = 0x08A2, + JA_SE_READ_RIDDLE_3 = 0x08A3, + JA_SE_READ_RIDDLE_C = 0x08A4, + JA_SE_MINIGAME_RIGHT = 0x08A5, + JA_SE_MINIGAME_WRONG = 0x08A6, + JA_SE_PRE_TAKT = 0x08A7, + JA_SE_PLAYSPOT_START = 0x08A8, + JA_SE_PLAYSPOT_CURSOR = 0x08A9, + JA_SE_PLAYSPOT_DESTROY = 0x08AA, + JA_SE_PLAYSPOT_END_S = 0x08AB, + JA_SE_PLAYSPOT_END_F = 0x08AC, + JA_SE_MINIGAME_TIMER_30 = 0x08AD, + JA_SE_MINIGAME_TIMER_10 = 0x08AE, + JA_SE_LETTER_GAME_TIMER_0 = 0x08AF, + JA_SE_LETTER_GAME_CURSOR = 0x08B0, + JA_SE_LETTER_GAME_OK = 0x08B1, + JA_SE_ISLE_TIMER_0 = 0x08B2, + JA_SE_FORCE_BACK = 0x08B3, + JA_SE_FORCE_BACK_RETURN = 0x08B4, + JA_SE_ITEM_COL_SW = 0x08B5, + JA_SE_ITEM_EXP_OPEN = 0x08B6, + JA_SE_ITEM_EQUIP_ON = 0x08B7, + JA_SE_ITEM_EQUIP_OFF = 0x08B8, + JA_SE_SAVE_PANEL_IN = 0x08B9, + JA_SE_SAVE_PANEL_OUT = 0x08BA, + JA_SE_SAVE_START = 0x08BB, + JA_SE_SAVE_CANCEL = 0x08BC, + JA_SE_SAVE_FINISH = 0x08BD, + JA_SE_ALERT_DATA = 0x08BE, + JA_SE_ANY_KEY_1 = 0x08BF, + JA_SE_CONTINUE_GAME = 0x08C0, + JA_SE_QUIT_GAME = 0x08C1, + JA_SE_MAP_ZOOM = 0x08C2, + JA_SE_CHART_CURSOR = 0x08C3, + JA_SE_CHART_ZOOM_IN = 0x08C4, + JA_SE_CHART_ZOOM_OUT = 0x08C5, + JA_SE_CHART_TO_COMPARE = 0x08C6, + JA_SE_CHART_COMP_LR = 0x08C7, + JA_SE_CHART_OPEN_MAP = 0x08C8, + JA_SE_CHART_SEL_MAP = 0x08C9, + JA_SE_CHART_TO_NORMAL = 0x08CA, + JA_SE_SHIPPU_CHART_OPEN = 0x08CB, + JA_SE_SHIPPU_CHART_CLOSE = 0x08CC, + JA_SE_SHIPPU_DIST_SEL = 0x08CD, + JA_SE_SHIPPU_WARP_OK = 0x08CE, + JA_SE_SHIPPU_WARP_CANCEL = 0x08CF, + JA_SE_UTUSHIE_CHANGE_MODE = 0x08D3, + JA_SE_UTUSHIE_SAVE_PIC = 0x08D4, + JA_SE_UTUSHIE_DEL_PIC = 0x08D5, + JA_SE_UTUSHIE_SWITCH_PIC = 0x08D6, + JA_SE_UTUSHIE_PIC_OK = 0x08D7, + JA_SE_UTUSHIE_B_DEL_PIC = 0x08D8, + JA_SE_UTUSHIE_B_LEAVE_PIC = 0x08D9, + JA_SE_CHUYA_SWITCH = 0x08DA, + JA_SE_AUC_ITEM_SHOW = 0x08DC, + JA_SE_AUC_START = 0x08DD, + JA_SE_AUC_END = 0x08DE, + JA_SE_AUC_PRICE_INC = 0x08DF, + JA_SE_AUC_PRICE_STOP = 0x08E0, + JA_SE_AUC_BID_CURSOR_LR = 0x08E1, + JA_SE_AUC_BID_CURSOR_UD = 0x08E2, + JA_SE_AUC_BID_OK = 0x08E3, + JA_SE_AUC_BID_GAUGE = 0x08E4, + JA_SE_AUC_BID_NG = 0x08E5, + JA_SE_AUC_QUIT = 0x08E6, + JA_SE_AUC_LAST_SPURT = 0x08E7, + JA_SE_AUC_FEW_TIME = 0x08E8, + JA_SE_AUC_5_SEC = 0x08E9, + JA_SE_MINIGAME_TIMER_EACH = 0x08EA, + JA_SE_AUC_BID_GAUGE_MAX = 0x08EB, + JA_SE_ESA_GET = 0x08EC, + JA_SE_WTAKT_DRONE_4 = 0x08ED, + JA_SE_WTAKT_DRONE_6 = 0x08EE, + JA_SE_HYOI_USE_DEMO = 0x08EF, + JA_SE_START_WHISTLE = 0x08F0, + JA_SE_END_WHISTLE = 0x08F1, + JA_SE_15PUZZLE_START = 0x08F2, + JA_SE_15PUZZLE_EXIT = 0x08F3, + JA_SE_15PUZZLE_COMPLETE = 0x08F4, + JA_SE_ME_ITEM_GET_S = 0x08F5, + JA_SE_COLL_TAKT_RIGHT = 0x08F6, + JA_SE_COLL_TAKT_WRONG = 0x08F7, + JA_SE_SEED_OK_BLINK = 0x08F8, + JA_SE_SUBJ_VIEW_POSSIBLE = 0x08F9, + JA_SE_SUBJ_VIEW_IN = 0x08FA, + JA_SE_SUBJ_VIEW_OUT = 0x08FB, + JA_SE_GAAN = 0x08FC, + JA_SE_DEMO_MSG_NEXT = 0x08FD, + JA_SE_DEMO_MSG_END = 0x08FE, + JA_SE_SO_MAP_ADD_FIN = 0x08FF, + JA_SE_BIRDMAN_TAKE_OFF = 0x0900, + JA_SE_BIRDMAN_FALL_END = 0x0901, + JA_SE_BIRDMAN_GOAL_END = 0x0902, + JA_SE_BIRDMAN_RESULT = 0x0903, + JA_SE_G_SHIP_MAP_BLINK = 0x0904, + JA_SE_MAJU_MO_CHECK = 0x0905, + JA_SE_NAME_INPUT_LIMIT = 0x0906, + JA_SE_UTSUSHIE_TO_DX = 0x0907, + JA_SE_TRIFORCE_BECOME_ONE = 0x0908, + JA_SE_TITLE_KIRA = 0x0909, + JA_SE_MD_HARP_INDICATOR = 0x090A, + JA_SE_TITLE_WIND = 0x090B, + JA_SE_UTUSHIE_B_SHOW = 0x090C, + JA_SE_KAIZU_RETURN = 0x090D, + JA_SE_TC_MAP_RETURN = 0x090E, + dummySound1 = 0x104E, + dummySound2 = 0x104F, + dummySound3 = 0x1050, + dummySound4 = 0x1051, + dummySound5 = 0x1052, + dummySound6 = 0x1053, + dummySound7 = 0x1054, + dummySound8 = 0x1055, + dummySound9 = 0x1056, + dummySound10 = 0x1057, + dummySound11 = 0x1058, + JA_SE_LK_V_KAITEN_S = 0x1059, + JA_SE_ATM_WIND_1 = 0x105A, + JA_SE_ATM_RAIN_1 = 0x105B, + JA_SE_ATM_JINARI = 0x105E, + JA_SE_ATM_RAKUBAN = 0x105F, + JA_SE_ATM_WIND_I_LINK = 0x1060, + JA_SE_ATM_WIND_HOT = 0x1061, + JA_SE_ATM_WIND_GRASS = 0x1062, + JA_SE_ATM_WIND_MJT = 0x1064, + JA_SE_ATM_WIND_KINDAN = 0x1065, + JA_SE_ATM_WATERFALL_M = 0x1066, + JA_SE_ATM_WATERFALL_S = 0x1067, + JA_SE_ATM_SWIRL = 0x1068, + JA_SE_OBJ_SALVAGE_TAG = 0x1069, + JA_SE_ATM_WIND_VAR = 0x106A, + JA_SE_OBJ_TORNADE_SUS = 0x106B, + JA_SE_OBJ_FIRE_ARROW_AMB = 0x106F, + JA_SE_OBJ_ICE_ARROW_AMB = 0x1070, + JA_SE_OBJ_LIGHT_ARROW_AMB = 0x1071, + JA_SE_ATM_ICEBERG_WIND = 0x1072, + JA_SE_ATM_VOLCANO_MAGMA = 0x1073, + JA_SE_SYS_WTAKT_WIND_AMB = 0x1074, + JA_SE_ATM_BWD_WIND = 0x1075, + JA_SE_ATM_BWD_SAND_EBB = 0x1076, + JA_SE_ATM_BWD_SAND_FLOW = 0x1077, + JA_SE_CV_YUUREISEN_SONG = 0x107A, + JA_SE_OBJ_ST_KOUSHI_MOVE = 0x107B, + JA_SE_ATM_WATERFALL_M_RIV = 0x107C, + JA_SE_OBJ_FER_WHEEL_ROUND = 0x107D, + JA_SE_LK_MG_SHELD_USING = 0x107E, + JA_SE_LK_NOW_CURSE_PW = 0x107F, + JA_SE_ATM_RAIN_ROOM = 0x1084, + JA_SE_ATM_RAIN_HARD = 0x1085, + JA_SE_ATM_RAIN_ROOM_HARD = 0x1086, + JA_SE_ATM_JB_WAVE = 0x1087, + JA_SE_OBJ_HL_WAPR_EFF = 0x1088, + JA_SE_OBJ_GN_WAPR_EFF = 0x1089, + JA_SE_ATM_D42_WIND = 0x109F, + JA_SE_ATM_D42_WATERFALL = 0x10A0, + JA_SE_ATM_WIND_R_DUN_MAE = 0x10A5, + JA_SE_ATM_D24_WIND = 0x10A6, + JA_SE_ATM_WATERFALL_M_LPF = 0x10A7, + JA_SE_ATM_RAIN_LPF = 0x10A8, + JA_SE_OBJ_SALVAGE_TAG_NEAR = 0x10A9, + JA_SE_LK_V_01_01 = 0x1800, + JA_SE_LK_V_01_02 = 0x1801, + JA_SE_LK_V_01_03 = 0x1802, + JA_SE_LK_V_01_04 = 0x1803, + JA_SE_LK_V_02_01 = 0x1804, + JA_SE_LK_V_02_02 = 0x1805, + JA_SE_LK_V_02_03 = 0x1806, + JA_SE_LK_V_03_01 = 0x1807, + JA_SE_LK_V_03_02 = 0x1808, + JA_SE_LK_V_03_03 = 0x1809, + JA_SE_LK_V_03_05 = 0x180A, + JA_SE_LK_V_04_01 = 0x180B, + JA_SE_LK_V_04_02 = 0x180C, + JA_SE_LK_V_04_03 = 0x180D, + JA_SE_LK_V_05_01 = 0x180E, + JA_SE_LK_V_05_02 = 0x180F, + JA_SE_LK_V_05_03 = 0x1810, + JA_SE_LK_V_06_01 = 0x1811, + JA_SE_LK_V_06_02 = 0x1812, + JA_SE_LK_V_06_03 = 0x1813, + JA_SE_LK_V_07_01 = 0x1814, + JA_SE_LK_V_07_02 = 0x1815, + JA_SE_LK_V_07_03 = 0x1816, + JA_SE_LK_V_08_01 = 0x1817, + JA_SE_LK_V_08_02 = 0x1818, + JA_SE_LK_V_08_03 = 0x1819, + JA_SE_LK_V_09_02 = 0x181A, + JA_SE_LK_V_09_03 = 0x181B, + JA_SE_LK_V_09_AFTER = 0x181C, + JA_SE_LK_V_10_01 = 0x181D, + JA_SE_LK_V_10_02 = 0x181E, + JA_SE_LK_V_11_01 = 0x181F, + JA_SE_LK_V_11_02 = 0x1820, + JA_SE_LK_V_11_03 = 0x1821, + JA_SE_LK_V_12_01 = 0x1822, + JA_SE_LK_V_13_01 = 0x1823, + JA_SE_LK_V_13_AFTER = 0x1824, + JA_SE_LK_V_14_01 = 0x1825, + JA_SE_LK_V_14_02 = 0x1826, + JA_SE_LK_V_15_03 = 0x1827, + JA_SE_LK_V_15_04 = 0x1828, + JA_SE_LK_V_16_01 = 0x1829, + JA_SE_LK_V_16_03 = 0x182A, + JA_SE_LK_V_17_01 = 0x182B, + JA_SE_LK_V_17_04 = 0x182C, + JA_SE_LK_V_18_03 = 0x182D, + JA_SE_LK_V_19_01 = 0x182E, + JA_SE_LK_V_19_02 = 0x182F, + JA_SE_LK_V_20_03 = 0x1830, + JA_SE_LK_V_21_01 = 0x1831, + JA_SE_LK_V_21_AFTER = 0x1832, + JA_SE_LK_V_22_01 = 0x1833, + JA_SE_LK_V_23_02 = 0x1834, + JA_SE_LK_V_24_02 = 0x1835, + JA_SE_LK_V_25_02 = 0x1836, + JA_SE_LK_V_26_01 = 0x1837, + JA_SE_LK_V_27_02 = 0x1838, + JA_SE_LK_V_28_01 = 0x1839, + JA_SE_LK_V_33_01 = 0x183A, + JA_SE_LK_V_55_01 = 0x183B, + JA_SE_LK_V_55_02 = 0x183C, + JA_SE_LK_V_56_01 = 0x183D, + JA_SE_LK_V_57_05 = 0x183E, + JA_SE_LK_V_57_06 = 0x183F, + JA_SE_LK_V_29_01 = 0x1840, + JA_SE_LK_V_NEKO = 0x1841, + JA_SE_LK_V_51_01 = 0x1842, + JA_SE_LK_V_51_02 = 0x1843, + JA_SE_LK_V_67_02 = 0x1844, + JA_SE_LK_V_27_01 = 0x1845, + JA_SE_LK_V_86_01 = 0x1846, + JA_SE_LK_V_87_01 = 0x1847, + JA_SE_LK_V_62_01 = 0x1848, + JA_SE_LK_V_62_02 = 0x1849, + JA_SE_LK_V_83_01 = 0x184A, + JA_SE_LK_V_36_01 = 0x184B, + JA_SE_LK_V_36_02 = 0x184C, + JA_SE_LK_V_93_01 = 0x184D, + JA_SE_ATM_RAIN_START = 0x185C, + JA_SE_ATM_RAIN_END = 0x185D, + JA_SE_ATM_MAGMA_CHILL = 0x1863, + JA_SE_OBJ_TORNADE_WIND_UP = 0x186C, + JA_SE_OBJ_TORNADE_LANDING = 0x186D, + JA_SE_OBJ_TORNADE_WARP = 0x186E, + JA_SE_LK_V_D04_ABARE = 0x1878, + JA_SE_LK_V_D06_ABARE = 0x1879, + JA_SE_LK_V_D47_SLEEP = 0x1880, + JA_SE_LK_V_D47_AWAKE = 0x1881, + JA_SE_LK_V_D47_NOBI = 0x1882, + JA_SE_LK_V_D47_NOTICE = 0x1883, + JA_SE_LK_V_TURN_INTO_GN = 0x188A, + JA_SE_LK_V_GN_LAST_ATTACK = 0x188B, + JA_SE_LK_V_D35_NOTICE = 0x188C, + JA_SE_LK_V_D36_TIRED = 0x188D, + JA_SE_LK_V_D08_SURPRISED = 0x188E, + JA_SE_LK_V_D08_TUMBLE = 0x188F, + JA_SE_LK_V_D21_STRAIN = 0x1890, + JA_SE_LK_V_D50_RELIEF = 0x1891, + JA_SE_LK_V_D50_STRAIN = 0x1892, + JA_SE_LK_V_D50_SWING_SW = 0x1893, + JA_SE_LK_V_D26_FAILY_IN_1 = 0x1894, + JA_SE_LK_V_D26_FAILY_IN_2 = 0x1895, + JA_SE_LK_V_D25_SURPRISE = 0x1896, + JA_SE_LK_V_D25_SMILE = 0x1897, + JA_SE_LK_V_D23_RELEAF_1 = 0x1898, + JA_SE_LK_V_D23_RELEAF_2 = 0x1899, + JA_SE_LK_V_D24_BIBIRI = 0x189A, + JA_SE_LK_V_D24_SURPRISE = 0x189B, + JA_SE_LK_V_D24_BEF_ATTACK = 0x189C, + JA_SE_LK_V_D24_ATTACK = 0x189D, + JA_SE_LK_V_D24_DAMAGE = 0x189E, + JA_SE_LK_V_D42_DAMAGE_1 = 0x18A1, + JA_SE_LK_V_D42_DAMAGE_2 = 0x18A2, + JA_SE_LK_V_D42_DAMAGE_4 = 0x18A3, + JA_SE_LK_V_D43_RELEAF = 0x18A4, + JA_SE_LK_SHIP_RUDDER_OUT = 0x2011, + JA_SE_LK_SHIP_RUDDER_IN = 0x2012, + JA_SE_LK_ROPE_SWING_F = 0x201E, + JA_SE_LK_ROPE_UNWIND = 0x201F, + JA_SE_LK_MOVE_ROCK = 0x2022, + JA_SE_LK_MOVE_WBLOCK = 0x2026, + JA_SE_LK_SUGOI_KAITEN = 0x203A, + JA_SE_LK_SWORD_CHARGE = 0x203B, + JA_SE_LK_BURNING = 0x2041, + JA_SE_LK_SHIP_CRANE_WORK = 0x204D, + JA_SE_LK_SHIP_CANNON_MOVE = 0x2051, + JA_SE_LK_FAN_WIND = 0x2054, + JA_SE_LK_HAT_SWING = 0x2056, + JA_SE_LK_CURSE_BURNING = 0x2058, + JA_SE_LK_SLIP_SUS = 0x205A, + JA_SE_LK_SLIP_SUS_ICE = 0x205B, + JA_SE_LK_SLIP_SUS_STONE = 0x205C, + JA_SE_LK_WTAKT_USING = 0x205E, + JA_SE_WTAKT_AMBIENT = 0x2066, + JA_SE_LK_HS_CHAIN = 0x206C, + JA_SE_LK_HS_WIND_UP = 0x206D, + JA_SE_LK_SW_KAZEKIRI_S = 0x2800, + JA_SE_LK_SW_KAZEKIRI_L = 0x2801, + JA_SE_LK_SW_KAZEKIRI_M = 0x2802, + JA_SE_LK_SW_HIT_S = 0x2803, + JA_SE_LK_SW_HIT_L = 0x2804, + JA_SE_LK_SW_HIT_M = 0x2805, + JA_SE_LK_SW_CRT_HIT = 0x2806, + JA_SE_LK_SW_PULLOUT_S = 0x2807, + JA_SE_LK_SW_PULLOUT_L = 0x2808, + JA_SE_LK_SW_PULLOUT_M = 0x2809, + JA_SE_LK_SW_PUTIN_S = 0x280A, + JA_SE_LK_SW_PUTIN_L = 0x280B, + JA_SE_LK_SW_PUTIN_M = 0x280C, + JA_SE_LK_RUN_SLIP = 0x280D, + JA_SE_LK_ROPE_WIND = 0x280E, + JA_SE_LK_ROPE_KAZEKIRI = 0x280F, + JA_SE_LK_ITEM_TAKEOUT = 0x2810, + JA_SE_LK_SHIP_SAIL_BAR = 0x2813, + JA_SE_LK_BOOM_FLY = 0x2814, + JA_SE_LK_BOOM_CATCH = 0x2815, + JA_SE_LK_FALL_DAMAGE = 0x2816, + JA_SE_LK_ROPE_LAUNCH = 0x2817, + JA_SE_LK_ROPE_COIL_1 = 0x2818, + JA_SE_LK_ROPE_COIL_2 = 0x2819, + JA_SE_LK_ROPE_COIL_3 = 0x281A, + JA_SE_LK_ROPE_HOOK_WOOD = 0x281B, + JA_SE_LK_ROPE_HOOK_STONE = 0x281C, + JA_SE_LK_ROPE_HOOK_METAL = 0x281D, + JA_SE_LK_ROPE_MAXLENGTH = 0x2820, + JA_SE_LK_ROPE_UNCOIL = 0x2821, + JA_SE_LK_MOVE_ROCK_LIMIT = 0x2823, + JA_SE_LK_ESA_THROW = 0x2824, + JA_SE_SHIP_SAIL_MOVE = 0x2825, + JA_SE_LK_MOVE_WBLOCK_LIMIT = 0x2827, + JA_SE_LK_LAST_HIT = 0x2828, + JA_SE_LK_BARREL_PUT_ON = 0x2829, + JA_SE_LK_BARREL_TAKE_OFF = 0x282A, + JA_SE_LK_KAITENGIRI = 0x282B, + JA_SE_LK_CUT_GRASS = 0x282C, + JA_SE_LK_DAMAGE_NORMAL = 0x282D, + JA_SE_LK_DAMAGE_LARGE = 0x282E, + JA_SE_LK_BODYATTACK = 0x282F, + JA_SE_LK_ROPE_HOOK_BODY = 0x2830, + JA_SE_SHIP_SAIL_OUT = 0x2831, + JA_SE_SHIP_SAIL_IN = 0x2832, + JA_SE_LK_W_WEP_HIT = 0x2833, + JA_SE_LK_MS_WEP_HIT = 0x2834, + JA_SE_LK_W_WEP_CRT_HIT = 0x2835, + JA_SE_LK_MS_WEP_CRT_HIT = 0x2836, + JA_SE_LK_HIT_SBRIDGE_ROPE = 0x2837, + JA_SE_LK_CUT_SBRIDGE_ROPE = 0x2838, + JA_SE_LK_HIT_SBRIDGE_CHAIN = 0x2839, + JA_SE_LK_JUMP_ATTACK = 0x283C, + JA_SE_LK_MJ_DEMO_BARREL = 0x283D, + JA_SE_LK_HOFUKU = 0x283E, + JA_SE_LK_CONVEY_WPOT = 0x283F, + JA_SE_LK_WALK_IN_WATER = 0x2840, + JA_SE_LK_ROPE_SWING_ROUND = 0x2842, + JA_SE_LK_FAN_PRE_SWING = 0x2843, + JA_SE_LK_FAN_SWING = 0x2844, + JA_SE_LK_FAN_CHUTE_OPEN = 0x2845, + JA_SE_LK_FAN_CHUTE_RISE = 0x2846, + JA_SE_LK_FAN_CHUTE_CLOSE = 0x2847, + JA_SE_LK_FAN_CHUTE_WATER = 0x2848, + JA_SE_LK_JUMP_FLOWER_OUT = 0x2849, + JA_SE_LK_SHIP_CRANE_OUT = 0x284A, + JA_SE_LK_SHIP_CRANE_IN = 0x284B, + JA_SE_LK_SHIP_CRANE_ARM = 0x284C, + JA_SE_LK_SHIP_CRANE_STOP = 0x284E, + JA_SE_LK_SHIP_CANNON_OUT = 0x284F, + JA_SE_LK_SHIP_CANNON_IN = 0x2850, + JA_SE_LK_SHIP_CANNON_FIRE = 0x2852, + JA_SE_LK_BEAM_HIT = 0x2853, + JA_SE_LK_HAMMER_HIT = 0x2855, + JA_SE_LK_HAMMER_SWING = 0x2857, + JA_SE_LK_CHANGE_BOOTS = 0x2859, + JA_SE_LK_WAPR_EFF_WARP = 0x285D, + JA_SE_LK_WTAKT_SWING = 0x285F, + JA_SE_LK_BOTTLE_CLOSE = 0x2860, + JA_SE_LK_BOTTLE_OPEN = 0x2861, + JA_SE_LK_ITEM_OUT_BREAST = 0x2862, + JA_SE_OBJ_MJ_GATE_OPEN = 0x2863, + JA_SE_OBJ_MJ_GATE_BAR_OPEN = 0x2864, + JA_SE_OBJ_MJ_GATE_BAR_STOP = 0x2865, + JA_SE_WTAKT_ARM_SWING = 0x2867, + JA_SE_WTAKT_AUFTAKT = 0x2868, + JA_SE_LK_DRAW_BOW = 0x2869, + JA_SE_LK_SHOOT_ARROW = 0x286A, + JA_SE_LK_HS_SHOOT = 0x286B, + JA_SE_LK_HS_WIND_UP_FIN = 0x286E, + JA_SE_LK_HS_SPIKE = 0x286F, + JA_SE_LK_W_DAIZA_ATTACH = 0x2870, + JA_SE_LK_W_DAIZA_TAKEOFF = 0x2871, + JA_SE_LK_FIT_FIRE_ARROW = 0x2872, + JA_SE_LK_FIT_ICE_ARROW = 0x2873, + JA_SE_LK_FIT_LIGHT_ARROW = 0x2874, + JA_SE_LK_SHOOT_FIRE_ARROW = 0x2875, + JA_SE_LK_SHOOT_ICE_ARROW = 0x2876, + JA_SE_LK_SHOOT_LIGHT_ARROW = 0x2877, + JA_SE_LK_FREEZE = 0x2878, + JA_SE_LK_ARROW_HIT = 0x2879, + JA_SE_LK_ARROW_REBOUND = 0x287A, + JA_SE_LK_HS_REBOUND = 0x287B, + JA_SE_LK_ELEC_PARALYSED = 0x287C, + JA_SE_LK_BOSS_WARP_EFF_ST = 0x287D, + JA_SE_LK_SCOOP_WATER = 0x287E, + JA_SE_LK_SPRINKLE_WATER = 0x287F, + JA_SE_WTAKT_AUFTAKT_4 = 0x2880, + JA_SE_WTAKT_AUFTAKT_6 = 0x2881, + JA_SE_LK_DOWN_ON_BOARD = 0x2882, + JA_SE_LK_OPEN_LETTER = 0x2883, + JA_SE_LK_FLIFT_GO_WATER = 0x2884, + JA_SE_LK_HYOI_SET = 0x2885, + JA_SE_LK_MGC_SHIELD_DEF = 0x2886, + JA_SE_LK_BOSS_WARP_EFF_ED = 0x2887, + JA_SE_LK_B_BOSS_WARP = 0x2888, + JA_SE_LK_WARP_TO_G_SHIP = 0x2889, + JA_SE_LK_FG_ROOM_WARP_OUT = 0x288A, + JA_SE_LK_MAZE_WARP_IN = 0x288B, + JA_SE_LK_PUT_PEARL = 0x288C, + JA_SE_LK_HL_WAPR_D_IN = 0x288D, + JA_SE_LK_HL_WAPR_D_OUT = 0x288E, + JA_SE_LK_HL_WAPR_U_IN = 0x288F, + JA_SE_LK_HL_WAPR_U_OUT = 0x2890, + JA_SE_LK_GN_WAPR_D_IN = 0x2891, + JA_SE_LK_GN_WAPR_D_OUT = 0x2892, + JA_SE_LK_GN_WAPR_U_IN = 0x2893, + JA_SE_LK_GN_WAPR_U_OUT = 0x2894, + JA_SE_LK_D50_SWING_SW_1 = 0x2895, + JA_SE_LK_D50_SWING_SW_2 = 0x2896, + JA_SE_LK_D50_SWING_SW_3 = 0x2897, + JA_SE_LK_D50_SWORD_HIT = 0x2898, + JA_SE_LK_D23_DOOR_GACHA = 0x2899, + JA_SE_LK_D24_SHAKIIN = 0x289A, + JA_SE_LK_D24_DAMAGE = 0x289B, + JA_SE_LK_D24_FALL = 0x289C, + JA_SE_LK_D42_DAMAGE_1 = 0x289D, + JA_SE_LK_D42_DAMAGE_2 = 0x289E, + JA_SE_LK_D42_DAMAGE_3 = 0x289F, + JA_SE_LK_D42_DAMAGE_4 = 0x28A0, + JA_SE_LK_D42_MSWORD_FLY = 0x28A1, + JA_SE_LK_D42_MSWORD_SPIKE = 0x28A2, + JA_SE_LK_D42_FALL_DOWN = 0x28A3, + JA_SE_LK_D43_LANDING = 0x28A4, + JA_SE_LK_PG_BOMB_STRIKE = 0x28A5, + JA_SE_LK_SAIL_TO_POWER_UP = 0x28A6, + JA_SE_LK_SAIL_TO_NORMAL = 0x28A7, + JA_SE_SHIP_GO_NORMAL = 0x3004, + JA_SE_SHIP_WAVE_L = 0x3005, + JA_SE_SHIP_WAVE_S = 0x3006, + JA_SE_OBJ_OTOSHIANA_SUS = 0x3019, + JA_SE_OBJ_PRT_LIFT_WORK = 0x301A, + JA_SE_OBJ_TENBIN_LIFT_MOVE = 0x3024, + JA_SE_OBJ_FLOAT_LIFT_MOVE = 0x3025, + JA_SE_ATM_RIVER_M = 0x3033, + JA_SE_ATM_RIVER_S = 0x3034, + JA_SE_ATM_RIVER_S_ISLE = 0x303A, + JA_SE_OBJ_L_HOUSE_ROUND = 0x303B, + JA_SE_OBJ_BS_BOAT_CRUISE = 0x303D, + JA_SE_CM_PG_FLYING = 0x303E, + JA_SE_LK_FT_WALK = 0x3800, + JA_SE_LK_FT_JUMP = 0x3801, + JA_SE_LK_FT_BOUND = 0x3802, + JA_SE_LK_HD_NORMAL = 0x3803, + JA_SE_LK_SWIM = 0x3807, + JA_SE_LK_INTO_WATER = 0x3808, + JA_SE_LK_OUTOF_WATER = 0x3809, + JA_SE_MO_FT_WALK = 0x380A, + JA_SE_MO_FT_JUMP = 0x380B, + JA_SE_MO_FT_BOUND = 0x380C, + JA_SE_FIREBLAST_BLOW = 0x380D, + JA_SE_MAGMA_TO_ISLE = 0x380E, + JA_SE_ISLE_TO_MAGMA = 0x380F, + JA_SE_LK_FALL_MAGMA = 0x3810, + JA_SE_LK_FALL_DOWN = 0x3811, + JA_SE_FT_SUSBRIDGE_C = 0x3812, + JA_SE_FT_SUSBRIDGE_R = 0x3813, + JA_SE_FT_ADD_GRASS = 0x3814, + JA_SE_FT_LADDER_CLIMB = 0x3815, + JA_SE_FT_ROPE_UP = 0x3816, + JA_SE_FT_ROPE_DOWN = 0x3817, + JA_SE_FT_LADDER_CLIMB_D = 0x3818, + JA_SE_ATM_PRT_SHIP_CREAK = 0x381B, + JA_SE_LK_SHIP_CRANE_DROP = 0x381C, + JA_SE_LK_SHIP_CRANE_LIFTUP = 0x381D, + JA_SE_LK_SHIP_CRANE_SALVAGE = 0x381E, + JA_SE_LK_SHIP_CANNON_FLY = 0x381F, + JA_SE_LK_SHIP_CRANE_LIFT_T = 0x3820, + JA_SE_OBJ_KASSHA_LIFT_SWING = 0x3821, + JA_SE_OBJ_KASSHA_LIFT_MOVE = 0x3822, + JA_SE_OBJ_SHOKU_LIFT_MOVE = 0x3823, + JA_SE_CMN_S_FT_WALK = 0x3826, + JA_SE_CMN_S_FT_JUMP = 0x3827, + JA_SE_CMN_S_FT_BOUND = 0x3828, + JA_SE_CMN_S_HD_NORMAL = 0x3829, + JA_SE_CLD_FT_WALK = 0x382A, + JA_SE_MAKORE_FT_WALK = 0x382B, + JA_SE_MAKORE_FT_JUMP = 0x382C, + JA_SE_KOLOG_FT_WALK = 0x382D, + JA_SE_KOLOG_FT_JUMP = 0x382E, + JA_SE_LK_WALK_HEAVY = 0x382F, + JA_SE_LK_JUMP_HEAVY = 0x3830, + JA_SE_LK_FT_SW_SHIELD = 0x3831, + JA_SE_ST_WALK = 0x3832, + JA_SE_KOLOG_FT_KARAKARA = 0x3835, + JA_SE_TN_WALK = 0x3836, + JA_SE_TN_JUMP = 0x3837, + JA_SE_LK_FT_JUMP_SHIP = 0x3838, + JA_SE_LK_FT_WALK_SHIP = 0x3839, + JA_SE_FT_PW_RUN_AWAY = 0x383C, + JA_SE_FT_LK_D35_WALK = 0x383F, + JA_SE_FT_LK_D50_LANDING = 0x3840, + JA_SE_CV_KG_SLEEP = 0x4114, + JA_SE_CV_NULL = 0x4800, + JA_SE_CV_MG_NORMAL = 0x4801, + JA_SE_CV_MG_ATTACK = 0x4802, + JA_SE_CV_MG_DAMAGE = 0x4803, + JA_SE_CV_MG_FAINTED = 0x4804, + JA_SE_CV_KAMOME = 0x4805, + JA_SE_CV_KAMOME_DAMAGE = 0x4806, + JA_SE_CV_KAMOME_REVENGE = 0x4807, + JA_SE_CV_KAMOME_ATTACK = 0x4808, + JA_SE_CV_MO_DAMAGE = 0x4809, + JA_SE_CV_MO_DAMAGE_HIP = 0x480A, + JA_SE_CV_MO_KAMAE = 0x480B, + JA_SE_CV_MO_HOOK = 0x480C, + JA_SE_CV_MO_JAB = 0x480D, + JA_SE_CV_MO_FAINTED = 0x480E, + JA_SE_CV_MO_FIND_ENEMY = 0x480F, + JA_SE_CV_MO_LOSE_LANCE = 0x4810, + JA_SE_CV_MO_FIND_LANCE = 0x4811, + JA_SE_CV_MO_SEARCH = 0x4812, + JA_SE_CV_BB_NORMAL = 0x4813, + JA_SE_CV_BB_FIND = 0x4814, + JA_SE_CV_BB_ATTACK = 0x4815, + JA_SE_CV_BB_DAMAGE = 0x4816, + JA_SE_CV_BB_FAINTED = 0x4817, + JA_SE_CV_BB_FURAFURA = 0x4818, + JA_SE_CV_NZ_NORMAL = 0x4819, + JA_SE_CV_NZ_ATTACK = 0x481A, + JA_SE_CV_NZ_DAMAGE = 0x481B, + JA_SE_CV_KI_WAKEUP = 0x481C, + JA_SE_CV_KI_ATTACK = 0x481D, + JA_SE_CV_KI_DAMAGE = 0x481E, + JA_SE_CV_COMMON_PEOPLE = 0x481F, + JA_SE_CV_PG_NORMAL = 0x4820, + JA_SE_CV_PG_TURN = 0x4821, + JA_SE_CV_PG_CATCH = 0x4822, + JA_SE_CV_PG_CARRY = 0x4823, + JA_SE_CV_BK_ATTACK_S = 0x4824, + JA_SE_CV_BK_KAMAE = 0x4825, + JA_SE_CV_BK_ATTACK_L = 0x4826, + JA_SE_CV_BK_DAMAGE_S = 0x4827, + JA_SE_CV_BK_DAMAGE_L = 0x4828, + JA_SE_CV_BK_FAINTED = 0x4829, + JA_SE_CV_BK_SEARCH = 0x482A, + JA_SE_CV_BK_FOUND_LINK = 0x482B, + JA_SE_CV_BK_LOST_BOKO = 0x482C, + JA_SE_CV_BK_SEARCH_BOKO = 0x482D, + JA_SE_CV_BK_FOUND_BOKO = 0x482E, + JA_SE_CV_BK_JUMP = 0x482F, + JA_SE_CV_BK_SURPRISE = 0x4830, + JA_SE_CV_BK_NOBI = 0x4831, + JA_SE_CV_MO_ALERT = 0x4832, + JA_SE_CV_JI_DEFENCE = 0x4833, + JA_SE_CV_BTD_JAB = 0x4834, + JA_SE_CV_BTD_ATTACK = 0x4835, + JA_SE_CV_BTD_DAMAGE = 0x4836, + JA_SE_CV_BTD_AFT_DAMAGE = 0x4837, + JA_SE_CV_BTD_JITABATA = 0x4838, + JA_SE_CV_BTD_AFT_JITABATA = 0x4839, + JA_SE_CV_BTD_BEF_FIRE = 0x483A, + JA_SE_CV_BTD_DMG_ROCK = 0x483B, + JA_SE_CV_BTD_DIE = 0x483C, + JA_SE_CV_BTD_ENTER = 0x483D, + JA_SE_CV_BTD_WAIT = 0x483E, + JA_SE_CV_DRG_ROCKFALL_1 = 0x483F, + JA_SE_CV_DRG_ROCKFALL_2 = 0x4840, + JA_SE_CV_DRG_SET_ROPE = 0x4841, + JA_SE_CV_MG_WATER = 0x4842, + JA_SE_CV_JI_ATTACK = 0x4843, + JA_SE_CV_DRG_ROCKFALL_1_2 = 0x4844, + JA_SE_CV_DRG_ROCKFALL_1_3 = 0x4845, + JA_SE_CV_ZL_FDEMO_AWAKE = 0x4846, + JA_SE_CV_ZL_FDEMO_JITA_1 = 0x4847, + JA_SE_CV_ZL_FDEMO_JITA_2 = 0x4848, + JA_SE_CV_ZL_FDEMO_JITA_3 = 0x4849, + JA_SE_CV_ZL_FDEMO_FALL = 0x484A, + JA_SE_CV_ZL_FDEMO_LANDING = 0x484B, + JA_SE_CV_CHI_MEGAHORN = 0x484C, + JA_SE_CV_BV_ENTER = 0x484D, + JA_SE_CV_BV_ATTACK = 0x484E, + JA_SE_CV_BV_NO_DAMAGE = 0x484F, + JA_SE_CV_BV_DIE = 0x4850, + JA_SE_CV_BV_BITE = 0x4851, + JA_SE_CV_BV_EATING = 0x4852, + JA_SE_CV_BKM_CUT_VINE_1 = 0x4853, + JA_SE_CV_BKM_CUT_VINE_ALL = 0x4854, + JA_SE_CV_BKM_DAMAGE = 0x4855, + JA_SE_CV_BKM_LAST_DAMAGE = 0x4856, + JA_SE_CV_BKM_FALLDOWN = 0x4857, + JA_SE_CV_BKM_JITABATA = 0x4858, + JA_SE_CV_BKM_DIE = 0x4859, + JA_SE_CV_BKM_ENTER = 0x485A, + JA_SE_CV_BKM_LAUGH = 0x485B, + JA_SE_CV_PH_CUT_PROPELLER = 0x485C, + JA_SE_CV_PH_DAMAGE = 0x485D, + JA_SE_CV_PH_DIE = 0x485E, + JA_SE_CV_PH_JUMP = 0x485F, + JA_SE_CV_CC_STAND_UP = 0x4860, + JA_SE_CV_CC_ATTACK = 0x4861, + JA_SE_CV_CC_DAMAGE = 0x4862, + JA_SE_CV_CC_DIE = 0x4863, + JA_SE_CV_DK_ENTER = 0x4864, + JA_SE_CV_DK_ATTACK = 0x4865, + JA_SE_CV_DK_NUKEZU = 0x4866, + JA_SE_CV_DK_NUKERU = 0x4867, + JA_SE_CV_DK_DAMAGE = 0x4868, + JA_SE_CV_DK_KABE_DAMAGE = 0x4869, + JA_SE_CV_DK_LAST_DAMAGE = 0x486A, + JA_SE_CV_DK_MODAE = 0x486B, + JA_SE_CV_DK_DIE = 0x486C, + JA_SE_CV_KS_ATTACK = 0x486D, + JA_SE_CV_KS_DAMAGE = 0x486E, + JA_SE_CV_KS_BLOW = 0x486F, + JA_SE_CV_BL_FOUND = 0x4870, + JA_SE_CV_BL_ENTER = 0x4871, + JA_SE_CV_BL_SUCCESS = 0x4872, + JA_SE_CV_BL_DAMAGE = 0x4873, + JA_SE_CV_AM_AWAKE = 0x4874, + JA_SE_CV_AM_JUMP = 0x4875, + JA_SE_CV_AM_OPEN_MOUTH = 0x4876, + JA_SE_CV_AM_EYE_DAMAGE = 0x4877, + JA_SE_CV_AM_EAT_BOMB = 0x4878, + JA_SE_CV_AM_JITABATA = 0x4879, + JA_SE_CV_ST_HIT_HEAD_FLY = 0x487A, + JA_SE_CV_ST_HIT_BODY = 0x487B, + JA_SE_CV_ST_BREAK = 0x487C, + JA_SE_CV_ST_JUMP_HEAD = 0x487D, + JA_SE_CV_ST_DAMAGE = 0x487E, + JA_SE_CV_ST_ATTACK_S = 0x487F, + JA_SE_CV_ST_ATTACK_L = 0x4880, + JA_SE_CV_ST_NO_CLUB = 0x4881, + JA_SE_CV_ST_NUNCHAKU_S = 0x4882, + JA_SE_CV_ST_NUNCHAKU_L = 0x4883, + JA_SE_CV_ST_DIE = 0x4884, + JA_SE_CV_TN_FOUND = 0x4885, + JA_SE_CV_TN_KAMAE_S = 0x4886, + JA_SE_CV_TN_ATTACK_S = 0x4887, + JA_SE_CV_TN_KAMAE_L = 0x4888, + JA_SE_CV_TN_ATTACK_L = 0x4889, + JA_SE_CV_TN_JUMP = 0x488A, + JA_SE_CV_TN_GUARD = 0x488B, + JA_SE_CV_TN_DROP_SWORD = 0x488C, + JA_SE_CV_TN_DAMAGE = 0x488D, + JA_SE_CV_TN_DIE = 0x488E, + JA_SE_CV_TN_PUNCH_S = 0x488F, + JA_SE_CV_TN_PUNCH_L = 0x4890, + JA_SE_CV_TN_KICK = 0x4891, + JA_SE_CV_TN_NO_DAMAGE = 0x4892, + JA_SE_CV_AJ_INVITE = 0x4893, + JA_SE_CV_AJ_ANGRY = 0x4894, + JA_SE_CV_AJ_YELL = 0x4895, + JA_SE_CV_YW_SURPRISED = 0x4896, + JA_SE_CV_NK_BEF_JUMP = 0x4897, + JA_SE_CV_NK_JUMP_UP = 0x4898, + JA_SE_CV_NK_GRAB = 0x4899, + JA_SE_CV_NK_JUMP_DOWN = 0x489A, + JA_SE_CV_NK_LANDING = 0x489B, + JA_SE_CV_TC_FOUND = 0x489C, + JA_SE_CV_TC_DANCE_1 = 0x489D, + JA_SE_CV_TC_DANCE_2 = 0x489E, + JA_SE_CV_TC_DANCE_3 = 0x489F, + JA_SE_CV_TC_DANCE_4 = 0x48A0, + JA_SE_CV_TT_DANCE_FIN = 0x48A1, + JA_SE_CV_AUC_STIRRED = 0x48A2, + JA_SE_CV_AUC_APPLAUSE = 0x48A3, + JA_SE_CV_NZ_LAUGH = 0x48A4, + JA_SE_CV_MD_LIFT_UP = 0x48A5, + JA_SE_CV_MD_THROW = 0x48A6, + JA_SE_CV_MD_LANDING = 0x48A7, + JA_SE_CV_MD_FLY_UP = 0x48A8, + JA_SE_CV_MD_CRASH = 0x48A9, + JA_SE_CV_MD_DAMAGE = 0x48AA, + JA_SE_CV_MD_CALL = 0x48AB, + JA_SE_CV_GM_DAMAGE = 0x48AC, + JA_SE_CV_GM_LOST_WING = 0x48AD, + JA_SE_CV_GM_ATTACK = 0x48AE, + JA_SE_CV_GM_DIE = 0x48AF, + JA_SE_CV_GM_HIT_WIND = 0x48B0, + JA_SE_CV_FM_DAMAGE = 0x48B1, + JA_SE_CV_FM_DIE = 0x48B2, + JA_SE_CV_AM2_AWAKE = 0x48B3, + JA_SE_CV_AM2_JUMP = 0x48B4, + JA_SE_CV_AM2_PARALYZED = 0x48B5, + JA_SE_CV_AM2_DAMAGE = 0x48B6, + JA_SE_CV_AM2_JUMP2 = 0x48B7, + JA_SE_CV_DEKU_AGONY_L = 0x48B8, + JA_SE_CV_DEKU_AGONY = 0x48B9, + JA_SE_CV_DEKU_STRAIN = 0x48BA, + JA_SE_CV_CC_PARASITE = 0x48BB, + JA_SE_CV_CB_LIFT_UP = 0x48BC, + JA_SE_CV_CB_THROW = 0x48BD, + JA_SE_CV_CB_DAMAGE_S = 0x48BE, + JA_SE_CV_CB_DAMAGE = 0x48BF, + JA_SE_CV_CB_LEAF_OUT = 0x48C0, + JA_SE_CV_CB_LANDING = 0x48C1, + JA_SE_CV_CB_SOW = 0x48C2, + JA_SE_CV_CB_CALL_S = 0x48C3, + JA_SE_CV_CB_CALL_L = 0x48C4, + JA_SE_CV_CB_HELP = 0x48C5, + JA_SE_CV_CB_EATEN = 0x48C6, + JA_SE_CV_CB_SAVED = 0x48C7, + JA_SE_CV_DO_DAMAGE = 0x48C8, + JA_SE_CV_DO_DIE = 0x48C9, + JA_SE_CV_DO_SINK = 0x48CA, + JA_SE_CV_DO_EYE_LOSE = 0x48CB, + JA_SE_CV_OQ_DIE = 0x48CC, + JA_SE_CV_GY_DAMAGE = 0x48CD, + JA_SE_CV_GY_DIE = 0x48CE, + JA_SE_CV_GY_ATTACK = 0x48CF, + JA_SE_CV_DRG_MTOP_BIKU = 0x48D0, + JA_SE_CV_DRG_MTOP_ABARE = 0x48D1, + JA_SE_CV_DRG_MTOP_AKUBI = 0x48D2, + JA_SE_CV_RD_SCREAM = 0x48D3, + JA_SE_CV_RD_DAMAGE = 0x48D4, + JA_SE_CV_RD_DIE = 0x48D5, + JA_SE_CV_WZ_LAUGH = 0x48D6, + JA_SE_CV_WZ_DAMAGE = 0x48D7, + JA_SE_CV_WZ_NO_DAMAGE = 0x48D8, + JA_SE_CV_WZ_DIE = 0x48D9, + JA_SE_CV_WZ_ATTACK = 0x48DA, + JA_SE_CV_BWD_FLYING = 0x48DB, + JA_SE_CV_BWD_GO_UNDER_G = 0x48DC, + JA_SE_CV_BWD_HS_HIT = 0x48DD, + JA_SE_CV_BWD_DAMAGE = 0x48DE, + JA_SE_CV_BWD_DAMAGE_L = 0x48DF, + JA_SE_CV_BWD_ATTACK = 0x48E0, + JA_SE_CV_BWD_LAST_HIT = 0x48E1, + JA_SE_CV_BWD_DIE = 0x48E2, + JA_SE_CV_BWD_C_HS_DAMAGE = 0x48E3, + JA_SE_CV_BWD_C_ATTACK = 0x48E4, + JA_SE_CV_BWD_C_DAMAGE = 0x48E5, + JA_SE_CV_BWD_C_DIE = 0x48E6, + JA_SE_CV_AUC_STIRRED_M = 0x48E7, + JA_SE_CV_AUC_STIRRED_L = 0x48E8, + JA_SE_CV_HU_FLY_AWAY = 0x48E9, + JA_SE_CV_RC_DAMAGE = 0x48EA, + JA_SE_CV_RC_MODAE_1 = 0x48EB, + JA_SE_CV_RC_MODAE_2 = 0x48EC, + JA_SE_CV_RC_FLY_AWAY = 0x48ED, + JA_SE_CV_RC_ENTER = 0x48EE, + JA_SE_CV_SH_DIE = 0x48EF, + JA_SE_CV_SH_CUT_PROP = 0x48F0, + JA_SE_CV_PW_RUN = 0x48F1, + JA_SE_CV_PW_APPEAR = 0x48F2, + JA_SE_CV_PW_ATTACK = 0x48F3, + JA_SE_CV_PW_GO_CURSE = 0x48F4, + JA_SE_CV_PW_DAMAGE = 0x48F5, + JA_SE_CV_PW_DIE = 0x48F6, + JA_SE_CV_PT_ATTACK = 0x48F7, + JA_SE_CV_PT_JUMP = 0x48F8, + JA_SE_CV_PT_DAMAGE = 0x48F9, + JA_SE_CV_PT_DIE = 0x48FA, + JA_SE_CV_PT_TUMBLE = 0x48FB, + JA_SE_CV_PT_HAPPY = 0x48FC, + JA_SE_CV_PW_CURSE_IN = 0x48FD, + JA_SE_CV_TC_B_PUSH_BAR = 0x48FE, + JA_SE_CV_TC_T_PUSH_BAR = 0x48FF, + JA_SE_CV_MO_STOLEN = 0x4900, + JA_SE_CV_TT_DANCE_1 = 0x4901, + JA_SE_CV_TT_DANCE_2 = 0x4902, + JA_SE_CV_TR_KO_YEAH = 0x4903, + JA_SE_CV_TR_KO_A_RUN_AWAY = 0x4904, + JA_SE_CV_TR_KO_A_FOUND = 0x4905, + JA_SE_CV_TR_KO_A_TURN = 0x4906, + JA_SE_CV_TR_KO_A_CAUGHT = 0x4907, + JA_SE_CV_TR_KO_B_RUN_AWAY = 0x4908, + JA_SE_CV_TR_KO_B_FOUND = 0x4909, + JA_SE_CV_TR_KO_B_TURN = 0x490A, + JA_SE_CV_TR_KO_B_CAUGHT = 0x490B, + JA_SE_CV_TR_KO_C_RUN_AWAY = 0x490C, + JA_SE_CV_TR_KO_C_FOUND = 0x490D, + JA_SE_CV_TR_KO_C_TURN = 0x490E, + JA_SE_CV_TR_KO_C_CAUGHT = 0x490F, + JA_SE_CV_TR_KO_D_RUN_AWAY = 0x4910, + JA_SE_CV_TR_KO_D_FOUND = 0x4911, + JA_SE_CV_TR_KO_D_TURN = 0x4912, + JA_SE_CV_TR_KO_D_CAUGHT = 0x4913, + JA_SE_CV_PG_L_NORMAL = 0x4915, + JA_SE_CV_PG_L_TURN = 0x4916, + JA_SE_CV_PG_L_CATCH = 0x4917, + JA_SE_CV_PG_L_CARRY = 0x4918, + JA_SE_CV_CB_FLOOR_IN = 0x4919, + JA_SE_CV_CB_LEFT_ALONE = 0x491A, + JA_SE_CV_CB_I_AM_HERE = 0x491B, + JA_SE_CV_CB_TROUBLE = 0x491C, + JA_SE_CV_MD_TALK_S = 0x491D, + JA_SE_CV_MD_LEFT_ALONE = 0x491E, + JA_SE_CV_MD_FLY_WITH_LINK = 0x491F, + JA_SE_CV_MD_FLY_END = 0x4920, + JA_SE_CV_MD_I_AM_HERE = 0x4921, + JA_SE_CV_CB_FLY_END = 0x4922, + JA_SE_CV_M_NZ_TALK_IN = 0x4923, + JA_SE_CV_M_NZ_TALK_OUT = 0x4924, + JA_SE_CV_G_SHIP_LAUGH = 0x4925, + JA_SE_CV_G_SHIP_SCREAM = 0x4926, + JA_SE_CV_SALV_CRUE_AGREE = 0x4927, + JA_SE_CV_SALV_CRUE_BYE = 0x4928, + JA_SE_CV_SALV_CRUE_SI = 0x4929, + JA_SE_CV_DY_ENTER = 0x492A, + JA_SE_CV_DY_BREATH_IN = 0x492B, + JA_SE_CV_DY_BREATH_OUT = 0x492C, + JA_SE_CV_DY_GO_AWAY = 0x492D, + JA_SE_CV_BO_STRUGGLE = 0x492E, + JA_SE_CV_DE_STRAIN_1 = 0x492F, + JA_SE_CV_DE_STRAIN_2 = 0x4930, + JA_SE_CV_DE_STRAIN_3 = 0x4931, + JA_SE_CV_JI_FUTTOBI = 0x4932, + JA_SE_CV_DRG_D41_BARK_1 = 0x4933, + JA_SE_CV_DRG_D41_BARK_2 = 0x4934, + JA_SE_CV_DRG_D41_S_1 = 0x4935, + JA_SE_CV_DRG_D41_S_2 = 0x4936, + JA_SE_CV_DO_SPIT_SHIP = 0x4937, + JA_SE_CV_PG_LAUGH_1 = 0x4938, + JA_SE_CV_PG_LAUGH_2 = 0x4939, + JA_SE_CV_PG_EBALL_MAKE_S = 0x493A, + JA_SE_CV_PG_EBALL_MAKE_L = 0x493B, + JA_SE_CV_PG_EBALL_FIRE_S = 0x493C, + JA_SE_CV_PG_EBALL_FIRE_L = 0x493D, + JA_SE_CV_PG_REFLECT_EBALL = 0x493E, + JA_SE_CV_PG_HIT_EBALL = 0x493F, + JA_SE_CV_PG_TIRED = 0x4940, + JA_SE_CV_PG_LAUGH_3 = 0x4941, + JA_SE_CV_PG_DAMAGE_S = 0x4942, + JA_SE_CV_PG_DAMAGE_L = 0x4943, + JA_SE_CV_PG_DISAPPEAR = 0x4944, + JA_SE_CV_PG_DIE = 0x4945, + JA_SE_CV_GN_LAUGH_WAIT = 0x4946, + JA_SE_CV_GN_ATTACK_1 = 0x4947, + JA_SE_CV_GN_ATTACK_2 = 0x4948, + JA_SE_CV_GN_ATTACK_3 = 0x4949, + JA_SE_CV_GN_ATTACK_4 = 0x494A, + JA_SE_CV_GN_ATTACK_5 = 0x494B, + JA_SE_CV_GN_ATTACK_6 = 0x494C, + JA_SE_CV_GN_ATTACK_7 = 0x494D, + JA_SE_CV_GN_DEFENCE_1 = 0x494E, + JA_SE_CV_GN_DEFENCE_2 = 0x494F, + JA_SE_CV_GN_DAMAGE_1 = 0x4950, + JA_SE_CV_GN_DAMAGE_2 = 0x4951, + JA_SE_CV_GN_DAMAGE_3 = 0x4952, + JA_SE_CV_GN_UMEKI = 0x4953, + JA_SE_CV_GN_NOTICE = 0x4954, + JA_SE_CV_GN_ATTACK_ZELDA = 0x4955, + JA_SE_CV_GN_DEFENCE_3 = 0x4956, + JA_SE_CV_GN_LAST_HIT_1 = 0x4957, + JA_SE_CV_GN_LAST_HIT_2 = 0x4958, + JA_SE_CV_GN_OTAKEBI_1 = 0x4959, + JA_SE_CV_GN_LAUGH_CRAZY = 0x495A, + JA_SE_CV_GN_LAUGH_S = 0x495B, + JA_SE_CV_GN_OTAKEBI_2 = 0x495C, + JA_SE_CV_GN_SMILE_DEATH = 0x495D, + JA_SE_CV_ZL_DRAW_BOW = 0x495E, + JA_SE_CV_ZL_SHOOT_BOW = 0x495F, + JA_SE_CV_ZL_GN_DAMAGE = 0x4960, + JA_SE_CV_BPW_LAUGH_ENTER = 0x4961, + JA_SE_CV_BPW_ATTACK = 0x4962, + JA_SE_CV_BPW_LIGHT_DAMAGE = 0x4963, + JA_SE_CV_BPW_BECOME_SOLID = 0x4964, + JA_SE_CV_BPW_JITABATA = 0x4965, + JA_SE_CV_BPW_THROWN = 0x4966, + JA_SE_CV_BPW_DAMAGE = 0x4967, + JA_SE_CV_BPW_LANDING = 0x4968, + JA_SE_CV_BPW_CURSE = 0x4969, + JA_SE_CV_BPW_LOOK_RIGHT = 0x496A, + JA_SE_CV_BPW_LOOK_LEFT = 0x496B, + JA_SE_CV_BPW_SURPRISE = 0x496C, + JA_SE_CV_BPW_DIE = 0x496D, + JA_SE_CV_BGN_HIT_1 = 0x496E, + JA_SE_CV_BGN_HIT_2 = 0x496F, + JA_SE_CV_BGN_HIT_LAST = 0x4970, + JA_SE_CV_BGN_D_ATTACK = 0x4971, + JA_SE_CV_BGN_DIE = 0x4972, + JA_SE_CV_BGN_M_HIT_FACE = 0x4973, + JA_SE_CV_PR_UISSU = 0x4974, + JA_SE_CV_D35_GN_LAUGH = 0x4975, + JA_SE_CV_HY_KEN_GN_LAUGH = 0x4976, + JA_SE_CV_D26_CY_LAUGH_1 = 0x4977, + JA_SE_CV_D26_CY_HAND_R = 0x4978, + JA_SE_CV_D26_CY_HAND_L = 0x4979, + JA_SE_CV_D26_CY_CRASH = 0x497A, + JA_SE_CV_D26_CY_LAUGH_2 = 0x497B, + JA_SE_CV_D26_CY_LAUGH_3 = 0x497C, + JA_SE_CV_DRG_D11_BARK_1 = 0x497D, + JA_SE_CV_DRG_D11_BARK_2 = 0x497E, + JA_SE_CV_ZL_D25_CONFUSED = 0x497F, + JA_SE_CV_ZL_D25_SURPRISED = 0x4980, + JA_SE_CV_DRG_D45_1 = 0x4981, + JA_SE_CV_DRG_D45_2 = 0x4982, + JA_SE_CV_LS_D23_SMILE = 0x4983, + JA_SE_CV_LS_D23_LIFTED = 0x4984, + JA_SE_CV_ZL_D23_SURPRISE = 0x4985, + JA_SE_CV_GN_D24_ATTACK_1 = 0x4986, + JA_SE_CV_GN_D24_ATTACK_2 = 0x4987, + JA_SE_CV_GN_D24_LAUGH = 0x4988, + JA_SE_CV_ZL_D24_ATTACK = 0x4989, + JA_SE_CV_ZL_D24_NECK_HANG = 0x498A, + JA_SE_CV_GN_D42_ATTACK_S = 0x498B, + JA_SE_CV_GN_D42_ATTACK_1 = 0x498C, + JA_SE_CV_GN_D42_ATTACK_2 = 0x498D, + JA_SE_CV_GN_D42_ATTACK_4 = 0x498E, + JA_SE_CV_GN_D42_HAPPY = 0x498F, + JA_SE_CV_GN_D42_TO_BATTLE = 0x4990, + JA_SE_CV_SO_DAMAGE = 0x4991, + JA_SE_CV_CB_CALL_FAR = 0x4992, + JA_SE_CV_MD_CALL_FAR = 0x4993, + JA_SE_CM_BTD_HIFUKI_BEF = 0x501E, + JA_SE_CM_BTD_HIFUKI = 0x501F, + JA_SE_CM_JI_SLIP = 0x5021, + JA_SE_CM_BKM_ATKVINE_DIG = 0x5053, + JA_SE_CM_BKM_ATKVINE_L_ATK = 0x5054, + JA_SE_OBJ_STATUE_BEAM = 0x5067, + JA_SE_CM_DK_GLIDING = 0x506F, + JA_SE_CM_DK_WIND = 0x5076, + JA_SE_CM_DK_NAIL = 0x5079, + JA_SE_CM_KK_HEARTBEAT = 0x509B, + JA_SE_CM_AM2_SLIP = 0x50BB, + JA_SE_CM_MD_PIYO = 0x50BC, + JA_SE_OBJ_PIRATE_SAIL = 0x50BE, + JA_SE_CM_PRAPELLO_ROLLING = 0x50BF, + JA_SE_CM_DO_SUCK_IN = 0x50C3, + JA_SE_CM_GY_CRUISING = 0x50CE, + JA_SE_CM_BST_BEAM_PREPARE = 0x50DF, + JA_SE_OBJ_OSTATUE_BLINK = 0x50FF, + JA_SE_CM_FIRE_ARROW_BURNING = 0x5101, + JA_SE_CM_BWD_SAND_MOVE = 0x510E, + JA_SE_CM_BWD_FLYING = 0x5110, + JA_SE_CM_AUC_PARALYZED = 0x5120, + JA_SE_CM_HU_RC_FLYING = 0x5125, + JA_SE_CM_SH_PROPELLER = 0x5127, + JA_SE_CM_SH_CRUISING = 0x5128, + JA_SE_CM_PW_BECOME_SOLID = 0x5135, + JA_SE_CM_PG_EBALL_MAKING_S = 0x5152, + JA_SE_CM_PG_EBALL_MAKING_L = 0x5153, + JA_SE_CM_GN_ROBE = 0x5158, + JA_SE_CM_BPW_SWING_KANTERA = 0x515F, + JA_SE_CM_BPW_BECOME_SOLID = 0x5160, + JA_SE_CM_BPW_ROLLING = 0x5163, + JA_SE_CM_BPW_MASK_RUN_AWAY = 0x516C, + JA_SE_CM_BGN_D_DANCE = 0x516F, + JA_SE_CM_CY_D26_APPEAR = 0x5186, + JA_SE_CM_FA_D26_FLYING = 0x5188, + JA_SE_CM_CY_D26_DISAPPEAR = 0x518A, + JA_SE_CM_CY_D26_KIRA_BREAK = 0x518B, + JA_SE_CM_KL_D14_FLY_ALL = 0x518C, + JA_SE_CM_KL_D14_FLY_ONE = 0x518E, + JA_SE_CM_KAMOME_WING = 0x5800, + JA_SE_CM_MONS_EXPLODE = 0x5801, + JA_SE_CM_INOCHIDAMA = 0x5802, + JA_SE_CZ_BOUND_1 = 0x5803, + JA_SE_CZ_BOUND_2 = 0x5804, + JA_SE_CZ_BOUND_3 = 0x5805, + JA_SE_CM_LANCE_PICKUP = 0x5806, + JA_SE_CM_LANCE_BOUND = 0x5807, + JA_SE_CM_LANCE_HIT_FLOOR = 0x5808, + JA_SE_CM_ENEMY_FALL_S = 0x5809, + JA_SE_CM_ENEMY_FALL_M = 0x580A, + JA_SE_CM_ENEMY_FALL_L = 0x580B, + JA_SE_CM_ENEMY_KO_L = 0x580C, + JA_SE_CM_INOCHIDAMA_BREAK = 0x580D, + JA_SE_CM_INOCHIDAMA_BLINK = 0x580E, + JA_SE_CM_MAGTAIL_MOVE = 0x580F, + JA_SE_CM_MAGTAIL_ATTACK = 0x5810, + JA_SE_CM_BOKOBOU_BOUND = 0x5811, + JA_SE_CM_CUT_GRASS = 0x5812, + JA_SE_OBJ_BOKOBOU_BREAK = 0x5813, + JA_SE_CM_NATA_BOUND = 0x5814, + JA_SE_CM_MAGBALL_BOUND = 0x5815, + JA_SE_OBJ_CUT_INOCHIDAMA = 0x5816, + JA_SE_CM_GAKI_HANASUSURI = 0x5817, + JA_SE_CM_BTD_WIND_JAB = 0x5818, + JA_SE_CM_BTD_WIND_ATTACK = 0x5819, + JA_SE_CM_BTD_WIND_BEF_FIRE = 0x581A, + JA_SE_CM_BTD_ARM_STRIKE = 0x581B, + JA_SE_CM_BTD_ARM_PULLOUT_1 = 0x581C, + JA_SE_CM_BTD_ARM_PULLOUT_2 = 0x581D, + JA_SE_CM_MAGTAIL_WATER = 0x5820, + JA_SE_CM_JI_ATTACK = 0x5822, + JA_SE_CM_JI_DEFENSE = 0x5823, + JA_SE_CM_JI_DAMAGE = 0x5824, + JA_SE_CM_BTD_ENT_BUBBLE = 0x5825, + JA_SE_CM_BTD_ENT_BLAST = 0x5826, + JA_SE_CM_BTD_ROPE_SET = 0x5827, + JA_SE_CM_BTD_STN_FALL = 0x5828, + JA_SE_CM_BTD_BEF_ROCK_FALL = 0x5829, + JA_SE_CM_BTD_ROCK_FALL = 0x582A, + JA_SE_CM_BTD_ROCK_HIT = 0x582B, + JA_SE_CM_BTD_BRK_SHIELD_S = 0x582C, + JA_SE_CM_BTD_INTO_MAGMA_N = 0x582D, + JA_SE_CM_BTD_LIFT_UP = 0x582E, + JA_SE_CM_BTD_ROCK_ATTACH = 0x582F, + JA_SE_CM_BTD_JUMP_DOWN = 0x5830, + JA_SE_CM_BTD_LANDING = 0x5831, + JA_SE_CM_BTD_FALL_FWD = 0x5832, + JA_SE_CM_BTD_GET_UP = 0x5833, + JA_SE_CM_BTD_BRK_SHIELD_L = 0x5834, + JA_SE_CM_BTD_INTO_MAGMA_D = 0x5835, + JA_SE_CM_BK_BB_LANDING = 0x5836, + JA_SE_CM_BTD_BECOME_BLACK = 0x5837, + JA_SE_CM_BTD_ENDURE = 0x5838, + JA_SE_CM_BTD_BECOME_RED = 0x5839, + JA_SE_CM_BTD_LAST_EXPLODE = 0x583A, + JA_SE_CM_BTD_DROP_HEAD = 0x583B, + JA_SE_CM_BOSS_EXPLODE = 0x583C, + JA_SE_CM_BOSS_HEART_APPEAR = 0x583D, + JA_SE_CM_BTD_MAGMA_MOVE = 0x583E, + JA_SE_CM_ZL_FDEMO_JIMEN = 0x583F, + JA_SE_CM_ZL_FDEMO_SWING = 0x5840, + JA_SE_CM_ZL_FDEMO_BRANCH = 0x5841, + JA_SE_CM_ZL_FDEMO_LANDING = 0x5842, + JA_SE_CM_BV_BASE_POPUP = 0x5843, + JA_SE_CM_BV_HEAD_POPUP = 0x5844, + JA_SE_CM_BV_ATTACK = 0x5845, + JA_SE_CM_BV_LINK_OUT = 0x5846, + JA_SE_CM_BV_HEAD_TO_BOKO = 0x5847, + JA_SE_CM_BV_HEAD_IN_BASE = 0x5848, + JA_SE_CM_BV_SHITA = 0x5849, + JA_SE_CM_BKM_CORE_ENTER = 0x584A, + JA_SE_CM_BKM_VINE_SET = 0x584B, + JA_SE_CM_BKM_ATKVINE_ENTER = 0x584C, + JA_SE_CM_BKM_ATKVINE_MOVE_1 = 0x584D, + JA_SE_CM_BKM_CUT_VINE = 0x584E, + JA_SE_CM_BKM_LINK_OUT = 0x584F, + JA_SE_CM_BKM_ATKVINE_MOVE_2 = 0x5850, + JA_SE_CM_BKM_ATKVINE_PREP = 0x5851, + JA_SE_CM_BKM_ATKVINE_ATTACK = 0x5852, + JA_SE_CM_BKM_END_CORE_DROP = 0x5855, + JA_SE_CM_BKM_END_CORE_LEAP = 0x5856, + JA_SE_CM_PH_FLY = 0x5857, + JA_SE_CM_PH_HIT_WIND = 0x5858, + JA_SE_CM_PH_FALL = 0x5859, + JA_SE_CM_PH_CUT_PROPELLER = 0x585A, + JA_SE_CM_PH_JUMP = 0x585B, + JA_SE_CM_PH_RECOVER = 0x585C, + JA_SE_CM_CC_ENTER_GND = 0x585D, + JA_SE_CM_CC_LANDING = 0x585E, + JA_SE_CM_CC_STAND_TO_LIE = 0x585F, + JA_SE_CM_CC_LIE_TO_STAND = 0x5860, + JA_SE_CM_CC_MOVE_LIE = 0x5861, + JA_SE_CM_CC_MOVE_STAND = 0x5862, + JA_SE_CM_CC_ATTACK = 0x5863, + JA_SE_CM_CC_DMG_SWING = 0x5864, + JA_SE_CM_CC_DIE_SWING = 0x5865, + JA_SE_CM_CC_BLUE_SPARK = 0x5866, + JA_SE_OBJ_VINE_S_RECOVER = 0x5868, + JA_SE_OBJ_VINE_S_BURN = 0x5869, + JA_SE_OBJ_ENM_VAPORIZE = 0x586A, + JA_SE_CM_DK_ROUND_UP = 0x586B, + JA_SE_CM_DK_WING_ENTER = 0x586C, + JA_SE_CM_DK_WING_NORMAL = 0x586D, + JA_SE_CM_DK_WING_GO_UP = 0x586E, + JA_SE_CM_DK_FOOTNOTE = 0x5870, + JA_SE_CM_DK_ATTACK_WIND = 0x5871, + JA_SE_CM_DK_ATTACK = 0x5872, + JA_SE_CM_DK_JITABATA = 0x5873, + JA_SE_CM_DK_PULL_UP_HEAD = 0x5874, + JA_SE_CM_DK_BREAK_MASK = 0x5875, + JA_SE_CM_DK_CRASH_WALL = 0x5877, + JA_SE_CM_DK_DIE_EXPLODE = 0x5878, + JA_SE_CM_KS_MOVE = 0x587A, + JA_SE_CM_KS_ATTACK = 0x587B, + JA_SE_CM_KS_DIE = 0x587C, + JA_SE_CM_AM_NEEDLE_OUT = 0x587D, + JA_SE_CM_AM_NEEDLE_IN = 0x587E, + JA_SE_CM_AM_JUMP = 0x587F, + JA_SE_CM_AM_MOUTH_OPEN = 0x5880, + JA_SE_CM_AM_EYE_DAMAGE = 0x5881, + JA_SE_CM_AM_JUMP_S = 0x5882, + JA_SE_CM_AM_MOUTH_CLOSE = 0x5883, + JA_SE_CM_AM_EAT_BOMB = 0x5884, + JA_SE_CM_AM_JUMP_L = 0x5885, + JA_SE_CM_AM_BEF_EXPLODE = 0x5886, + JA_SE_CM_AM_EXPLODE = 0x5887, + JA_SE_CM_BL_ENTER = 0x5888, + JA_SE_CM_BL_AGO = 0x5889, + JA_SE_CM_BL_KATAKATA = 0x588A, + JA_SE_CM_BL_WIND_HIT = 0x588B, + JA_SE_CM_BL_BOUND = 0x588C, + JA_SE_CM_COMMON_WING_S = 0x588D, + JA_SE_CM_ST_HIT_HEAD_FLY = 0x588E, + JA_SE_CM_ST_TURN_HEAD = 0x588F, + JA_SE_CM_ST_STOP_HEAD = 0x5890, + JA_SE_CM_ST_BREAD_BODY = 0x5891, + JA_SE_CM_ST_RECOVER_BODY = 0x5892, + JA_SE_CM_ST_CLUB_UP = 0x5893, + JA_SE_CM_ST_CLUB_SWING = 0x5894, + JA_SE_CM_ST_CLUB_SWING_L = 0x5895, + JA_SE_CM_ST_JUMP_HEAD = 0x5896, + JA_SE_CM_ST_PULLOUT_ARM = 0x5897, + JA_SE_CM_ST_SWING_NUN_S = 0x5898, + JA_SE_CM_ST_SWING_NUN_L = 0x5899, + JA_SE_CM_ST_OUT_OF_GROUND = 0x589A, + JA_SE_CM_DK_PECK = 0x589C, + JA_SE_CM_DK_FOOT_ATTACK = 0x589D, + JA_SE_CM_DK_FOOT_ATK_COL = 0x589E, + JA_SE_CM_DK_FALL_WATER = 0x589F, + JA_SE_CM_JI_SHOTEI = 0x58A0, + JA_SE_CM_AJ_ANGRY_FOOT = 0x58A1, + JA_SE_CM_JI_BODY_ATTACK = 0x58A2, + JA_SE_CM_AJ_ANGRY_STEAM = 0x58A3, + JA_SE_CM_AJ_STICK = 0x58A4, + JA_SE_CM_GM_RECOVER_WING = 0x58A5, + JA_SE_CM_GM_KUROBO_OUT = 0x58A6, + JA_SE_CM_GM_ATTACK = 0x58A7, + JA_SE_CM_GM_HIT_WIND = 0x58A8, + JA_SE_CM_GM_DIE_LANDING = 0x58A9, + JA_SE_CM_GM_LANDING = 0x58AA, + JA_SE_CM_FM_HAND_OUT = 0x58AB, + JA_SE_CM_FM_HAND_IN = 0x58AC, + JA_SE_CM_FM_GRAB = 0x58AD, + JA_SE_CM_FM_THROW = 0x58AE, + JA_SE_CM_FM_GRAB_FOOT = 0x58AF, + JA_SE_CM_FM_PULL_IN = 0x58B0, + JA_SE_CM_FM_GRAB_HAND = 0x58B1, + JA_SE_CM_AM2_JUMP = 0x58B2, + JA_SE_CM_AM2_LANDING = 0x58B3, + JA_SE_CM_AM2_PARALYZED = 0x58B4, + JA_SE_CM_AM2_RECOVER = 0x58B5, + JA_SE_CM_AM2_JUMP2 = 0x58B6, + JA_SE_CM_AM2_BEF_EXPLODE = 0x58B7, + JA_SE_CM_AM2_EXPLODE = 0x58B8, + JA_SE_CM_AM2_SPIKE_OUT = 0x58B9, + JA_SE_CM_AM2_SPIKE_IN = 0x58BA, + JA_SE_CM_CMN_NOTICE = 0x58BD, + JA_SE_CM_PRAPELLO_OPEN = 0x58C0, + JA_SE_CM_PRAPELLO_CLOSE = 0x58C1, + JA_SE_CM_DO_ENTER = 0x58C2, + JA_SE_CM_DO_SUCK_IN_FIN = 0x58C4, + JA_SE_CM_DO_JITABATA = 0x58C5, + JA_SE_CM_DO_SINK_IN_SEA = 0x58C6, + JA_SE_CM_OQ_SPIT_ROCK = 0x58C7, + JA_SE_CM_OQ_SPIT_BOMB = 0x58C8, + JA_SE_CM_OQ_OUT_WATER = 0x58C9, + JA_SE_CM_OQ_IN_WATER = 0x58CA, + JA_SE_CM_OQ_JUMP = 0x58CB, + JA_SE_CM_OQ_LANDING = 0x58CC, + JA_SE_CM_OQ_DIE = 0x58CD, + JA_SE_CM_GY_JUMP_L = 0x58CF, + JA_SE_CM_GY_LANDING_L = 0x58D0, + JA_SE_CM_GY_JUMP_S = 0x58D1, + JA_SE_CM_GY_LANDING_S = 0x58D2, + JA_SE_CM_GY_SHIP_CRASH = 0x58D3, + JA_SE_CM_BST_HAND_LIGHT = 0x58D4, + JA_SE_CM_BST_HAND_EYE_OPEN = 0x58D5, + JA_SE_CM_BST_HEAD_LIGHT = 0x58D6, + JA_SE_CM_BST_HEAD_EYE_OPEN = 0x58D7, + JA_SE_CM_BST_HAND_GRIP = 0x58D8, + JA_SE_CM_BST_HAND_GRIP_OPEN = 0x58D9, + JA_SE_CM_BST_HAND_SHAKE = 0x58DA, + JA_SE_CM_BST_HAND_RELEASE = 0x58DB, + JA_SE_CM_BST_HAND_EYE_CLOSE = 0x58DC, + JA_SE_CM_BST_HEAD_EYE_CLOSE = 0x58DD, + JA_SE_CM_BST_MOUTH_OPEN = 0x58DE, + JA_SE_CM_BST_BEAM_FIRE = 0x58E0, + JA_SE_CM_BST_MOUTH_CLOSE = 0x58E1, + JA_SE_CM_BST_HAND_STRAIN = 0x58E2, + JA_SE_CM_BST_BOMB_EAT = 0x58E3, + JA_SE_CM_TN_SW_SWING_UP = 0x58E4, + JA_SE_CM_TN_SW_SWING_DOWN = 0x58E5, + JA_SE_CM_TN_TURN_ATTACK = 0x58E6, + JA_SE_CM_TN_SHOTEI_S = 0x58E7, + JA_SE_CM_TN_SHOTEI_L = 0x58E8, + JA_SE_CM_TN_HELMET_OUT = 0x58E9, + JA_SE_CM_TN_SW_PICK_UP = 0x58EA, + JA_SE_CM_TN_GET_UP = 0x58EB, + JA_SE_CM_TN_FALL = 0x58EC, + JA_SE_CM_TN_BREAK_MANTLE = 0x58ED, + JA_SE_CM_TN_FALL_ARMOR = 0x58EE, + JA_SE_CM_CK_GLASS_TAKE_ON = 0x58EF, + JA_SE_CM_CK_TAKE_CYLINDER = 0x58F0, + JA_SE_CM_CK_SHAKE_BOTTLE = 0x58F1, + JA_SE_CM_CK_POUR_CHEMICAL = 0x58F2, + JA_SE_CM_DRG_MTOP_HAND = 0x58F3, + JA_SE_CM_MO_BB_LANDING = 0x58F4, + JA_SE_OBJ_VINE_CORE_OPEN = 0x58F5, + JA_SE_OBJ_VINE_CORE_CLOSE = 0x58F6, + JA_SE_OBJ_SVINE_OUT = 0x58F7, + JA_SE_OBJ_SVINE_OUT_WATER = 0x58F8, + JA_SE_OBJ_SVINE_GRASP = 0x58F9, + JA_SE_CM_FREEZE = 0x58FA, + JA_SE_CM_CC_STONED = 0x58FB, + JA_SE_CM_CC_STONED_RECOVER = 0x58FC, + JA_SE_OBJ_OSTATUE_JUMP = 0x58FD, + JA_SE_OBJ_OSTATUE_PUT = 0x58FE, + JA_SE_OBJ_OSTATUE_LIGHT_ST = 0x5900, + JA_SE_CM_ICE_BREAK = 0x5902, + JA_SE_CM_ICE_RECOVER = 0x5903, + JA_SE_CM_L_ARROW_SHRINK = 0x5904, + JA_SE_CM_L_ARROW_PASS_AWAY = 0x5905, + JA_SE_CM_RD_HUG = 0x5906, + JA_SE_CM_RD_BITE = 0x5907, + JA_SE_CM_RD_FALLDOWN = 0x5908, + JA_SE_CM_WZ_APPEAR = 0x5909, + JA_SE_CM_WZ_ST_FIREBALL = 0x590A, + JA_SE_CM_WZ_ST_SUMMONBALL = 0x590B, + JA_SE_CM_WZ_PRE_FIREBALL = 0x590C, + JA_SE_CM_WZ_PRE_SUMMONBALL = 0x590D, + JA_SE_CM_BWD_OUT_SAND_1 = 0x590F, + JA_SE_CM_BWD_MOUTH_CLOSE_1 = 0x5911, + JA_SE_CM_BWD_IN_SAND_1 = 0x5912, + JA_SE_CM_BWD_OUT_SAND_2 = 0x5913, + JA_SE_CM_BWD_IN_SAND_2 = 0x5914, + JA_SE_CM_BWD_MOUTH_CLOSE_2 = 0x5915, + JA_SE_CM_BWD_HEAD_BACK_1 = 0x5916, + JA_SE_CM_BWD_SPIT_OUT = 0x5917, + JA_SE_CM_BWD_LAST_HEAD_BACK = 0x5918, + JA_SE_CM_BWD_LAST_IN_SAND = 0x5919, + JA_SE_CM_BWD_HARDEN = 0x591A, + JA_SE_CM_BWD_LAST_EXPLODE = 0x591B, + JA_SE_CM_BWD_IN_SAND_3 = 0x591C, + JA_SE_CM_BWD_HEAD_BACK_2 = 0x591D, + JA_SE_CM_B_CC_RECOVER = 0x591E, + JA_SE_CM_AUC_CALL_BID = 0x591F, + JA_SE_CM_PG_DIG = 0x5921, + JA_SE_CM_PG_DIG_LANDING = 0x5922, + JA_SE_CM_D03_PL_HARAU = 0x5923, + JA_SE_CM_D04_DK_FLY_AWAY = 0x5924, + JA_SE_CM_HU_RC_FLY_AWAY = 0x5926, + JA_SE_CM_TN_FALL_DOWN = 0x5929, + JA_SE_CM_TN_FALL_LANDING = 0x592A, + JA_SE_CM_TN_TURN_SWORD = 0x592B, + JA_SE_CM_KO_HANA_BREAK = 0x592C, + JA_SE_CM_PT_JUMP = 0x592D, + JA_SE_CM_PT_ATTACK = 0x592E, + JA_SE_CM_PT_TUMBLE = 0x592F, + JA_SE_CM_PW_BECOME_CLEAR = 0x5930, + JA_SE_CM_PW_SWING = 0x5931, + JA_SE_CM_PW_CURSE_START = 0x5932, + JA_SE_CM_PW_CURSE_END = 0x5933, + JA_SE_CM_PW_GO_HEAVEN = 0x5934, + JA_SE_CM_PW_SOLID_END = 0x5936, + JA_SE_CM_PL_WINK = 0x5937, + JA_SE_CM_SO_JUMP_L = 0x5938, + JA_SE_CM_SO_LANDING_L = 0x5939, + JA_SE_CM_SO_RISE = 0x593A, + JA_SE_CM_SO_DIVE = 0x593B, + JA_SE_CM_SO_JUMP_DRAW = 0x593C, + JA_SE_CM_SO_DRAW_MAP = 0x593D, + JA_SE_CM_PG_L_JUMP = 0x593E, + JA_SE_CM_PG_L_DIG = 0x593F, + JA_SE_CM_MD_HARP_CN4 = 0x5940, + JA_SE_CM_MD_HARP_DN4 = 0x5941, + JA_SE_CM_MD_HARP_EN4 = 0x5942, + JA_SE_CM_MD_HARP_FS4 = 0x5943, + JA_SE_CM_MD_HARP_GN4 = 0x5944, + JA_SE_CM_CB_BOUND = 0x5945, + JA_SE_CM_AM2_WTR_RECOVER = 0x5946, + JA_SE_CM_JB_ENTER = 0x5947, + JA_SE_CM_JB_THROW_PEARL = 0x5948, + JA_SE_CM_JB_IN_WATER = 0x5949, + JA_SE_CM_DY_ENTER = 0x594A, + JA_SE_CM_DY_GO_AWAY = 0x594B, + JA_SE_CM_JI_SWING = 0x594C, + JA_SE_CM_DY_ENTER_DO = 0x594D, + JA_SE_CM_PG_APPEAR = 0x594E, + JA_SE_CM_PG_DISAPPEAR = 0x594F, + JA_SE_CM_PG_SWING_S = 0x5950, + JA_SE_CM_PG_SWING_L = 0x5951, + JA_SE_CM_PG_EBALL_FIRE_S = 0x5954, + JA_SE_CM_PG_EBALL_FIRE_L = 0x5955, + JA_SE_CM_PG_END_1 = 0x5956, + JA_SE_CM_PG_END_2 = 0x5957, + JA_SE_CM_GN_SHALLOW_LANDING = 0x5959, + JA_SE_CM_GN_SWING_SW = 0x595A, + JA_SE_CM_GN_BACK_TURN = 0x595B, + JA_SE_CM_GN_ATTACK_ZELDA = 0x595C, + JA_SE_CM_GN_SW_SPIKE_HEAD = 0x595D, + JA_SE_CM_GN_SHALLOW_JUMP = 0x595E, + JA_SE_CM_BPW_SOLID_END = 0x5961, + JA_SE_CM_BPW_SOLID_FALL = 0x5962, + JA_SE_CM_BPW_DAMAGE_TOGE = 0x5964, + JA_SE_CM_BPW_DAMAGE_EXPLODE = 0x5965, + JA_SE_CM_BPW_MASK_TO_BPW = 0x5966, + JA_SE_CM_BPW_GET_KANTERA = 0x5967, + JA_SE_CM_BPW_BOUND_NO_DMG = 0x5968, + JA_SE_CM_BPW_BODY_PRESS = 0x5969, + JA_SE_CM_BPW_J_BPRESS_JUMP = 0x596A, + JA_SE_CM_BPW_J_BPRESS_PRESS = 0x596B, + JA_SE_CM_BPW_MASK_BREAK = 0x596D, + JA_SE_CM_BPW_KANTERA_APPEAR = 0x596E, + JA_SE_CM_BGN_D_STRING_PLINK = 0x5970, + JA_SE_CM_BGN_D_PUNCH_FIRE = 0x5971, + JA_SE_CM_BGN_D_ROPE_RESET = 0x5972, + JA_SE_CM_BGN_D_KAZEKIRI = 0x5973, + JA_SE_CM_BGN_D_FALL_WATER = 0x5974, + JA_SE_CM_BGN_D_FALL = 0x5975, + JA_SE_CM_BGN_D_TO_T_1 = 0x5976, + JA_SE_CM_BGN_D_TO_T_2 = 0x5977, + JA_SE_CM_BGN_T_MOUSE_OPEN = 0x5978, + JA_SE_CM_BGN_T_MOUSE_CLOSE = 0x5979, + JA_SE_CM_BGN_T_FALL_WATER = 0x597A, + JA_SE_CM_BGN_T_FALL = 0x597B, + JA_SE_CM_BGN_T_JUMP_UP = 0x597C, + JA_SE_CM_BGN_T_FALL_WIND = 0x597D, + JA_SE_CM_BGN_T_SLIDE = 0x597E, + JA_SE_CM_BGN_T_TO_M_1 = 0x597F, + JA_SE_CM_BGN_METAM_EXPLODE = 0x5980, + JA_SE_CM_BGN_M_HIT_WALL = 0x5981, + JA_SE_CM_BGN_M_FACE_HIT = 0x5982, + JA_SE_CM_BGN_M_BRK_ORB = 0x5983, + JA_SE_CM_BGN_LAST_EXPLODE = 0x5984, + JA_SE_CM_GN_D36_GO_UPPERL = 0x5985, + JA_SE_CM_FA_D26_FLY_UP = 0x5987, + JA_SE_CM_FA_D26_IN_LINK = 0x5989, + JA_SE_CM_KL_D14_FLY_END_ALL = 0x598D, + JA_SE_CM_DE_LEAF_OUT = 0x598F, + JA_SE_CM_DE_THROW_PEARL = 0x5990, + JA_SE_CM_DE_SWING = 0x5991, + JA_SE_CM_HI_D25_DISAPPEAR = 0x5992, + JA_SE_CM_HI_D25_APPEAR = 0x5993, + JA_SE_CM_D27_SAGE_APPEAR = 0x5994, + JA_SE_CM_D23_DK_FALL = 0x5995, + JA_SE_CM_D24_GN_ATTACK_1 = 0x5996, + JA_SE_CM_D24_GN_ATTACK_2 = 0x5997, + JA_SE_CM_D24_GN_CATCH_NECK = 0x5998, + JA_SE_CM_D24_ZL_ENTER = 0x5999, + JA_SE_CM_D24_ZL_ATTACK = 0x599A, + JA_SE_CM_D24_ZL_LANDING = 0x599B, + JA_SE_CM_D42_GN_STEP_OUT = 0x599C, + JA_SE_CM_D42_GN_ARM_SWING = 0x599D, + JA_SE_CM_D42_GN_SW_TAKE_OUT = 0x599E, + JA_SE_CM_D42_ORB_BREAK = 0x599F, + JA_SE_CM_D43_GN_STONED = 0x59A0, + JA_SE_CM_MD_HARP_SET_UP = 0x59A1, + JA_SE_CM_MD_HARP_TAKE_OFF = 0x59A2, + JA_SE_CM_COMMON_WING_S_LPF = 0x59A3, + dummySound12 = 0x6048, + dummySound13 = 0x6049, + dummySound14 = 0x604A, + dummySound15 = 0x604B, + dummySound16 = 0x604C, + dummySound17 = 0x604D, + dummySound18 = 0x604E, + dummySound19 = 0x604F, + dummySound20 = 0x6050, + dummySound21 = 0x6051, + dummySound22 = 0x6052, + dummySound23 = 0x6053, + dummySound24 = 0x6054, + dummySound25 = 0x6055, + dummySound26 = 0x6056, + dummySound27 = 0x6057, + dummySound28 = 0x6058, + dummySound29 = 0x6059, + dummySound30 = 0x605A, + dummySound31 = 0x605B, + dummySound32 = 0x605C, + dummySound33 = 0x605D, + dummySound34 = 0x605E, + dummySound35 = 0x605F, + dummySound36 = 0x6060, + dummySound37 = 0x6061, + dummySound38 = 0x6062, + dummySound39 = 0x6063, + dummySound40 = 0x6064, + dummySound41 = 0x6065, + dummySound42 = 0x6066, + dummySound43 = 0x6067, + dummySound44 = 0x6068, + dummySound45 = 0x6069, + dummySound46 = 0x606A, + dummySound47 = 0x606B, + dummySound48 = 0x606C, + dummySound49 = 0x606D, + dummySound50 = 0x606E, + dummySound51 = 0x606F, + dummySound52 = 0x6070, + dummySound53 = 0x6071, + dummySound54 = 0x6072, + dummySound55 = 0x6073, + dummySound56 = 0x6074, + dummySound57 = 0x6075, + dummySound58 = 0x6076, + dummySound59 = 0x6077, + dummySound60 = 0x6078, + dummySound61 = 0x6079, + dummySound62 = 0x607A, + dummySound63 = 0x607B, + dummySound64 = 0x607C, + dummySound65 = 0x607D, + dummySound66 = 0x607E, + dummySound67 = 0x607F, + dummySound68 = 0x6080, + dummySound69 = 0x6081, + dummySound70 = 0x6082, + dummySound71 = 0x6083, + dummySound72 = 0x6084, + dummySound73 = 0x6085, + dummySound74 = 0x6086, + dummySound75 = 0x6087, + dummySound76 = 0x6088, + dummySound77 = 0x6089, + dummySound78 = 0x608A, + dummySound79 = 0x608B, + dummySound80 = 0x608C, + dummySound81 = 0x608D, + dummySound82 = 0x608E, + dummySound83 = 0x608F, + dummySound84 = 0x6090, + dummySound85 = 0x6091, + dummySound86 = 0x6092, + dummySound87 = 0x6093, + dummySound88 = 0x6094, + dummySound89 = 0x6095, + dummySound90 = 0x6096, + dummySound91 = 0x6097, + dummySound92 = 0x6098, + dummySound93 = 0x6099, + dummySound94 = 0x609A, + dummySound95 = 0x609B, + dummySound96 = 0x609C, + dummySound97 = 0x609D, + dummySound98 = 0x609E, + dummySound99 = 0x609F, + dummySound100 = 0x60A0, + dummySound101 = 0x60A1, + dummySound102 = 0x60A2, + dummySound103 = 0x60A3, + dummySound104 = 0x60A4, + dummySound105 = 0x60A5, + dummySound106 = 0x60A6, + dummySound107 = 0x60A7, + dummySound108 = 0x60A8, + dummySound109 = 0x60A9, + dummySound110 = 0x60AA, + dummySound111 = 0x60AB, + dummySound112 = 0x60AC, + dummySound113 = 0x60AD, + dummySound114 = 0x60AE, + dummySound115 = 0x60AF, + dummySound116 = 0x60B0, + dummySound117 = 0x60B1, + dummySound118 = 0x60B2, + dummySound119 = 0x60B3, + dummySound120 = 0x60B4, + dummySound121 = 0x60B5, + dummySound122 = 0x60B6, + dummySound123 = 0x60B7, + dummySound124 = 0x60B8, + dummySound125 = 0x60B9, + dummySound126 = 0x60BA, + dummySound127 = 0x60BB, + dummySound128 = 0x60BC, + dummySound129 = 0x60BD, + dummySound130 = 0x60BE, + dummySound131 = 0x60BF, + dummySound132 = 0x60C0, + dummySound133 = 0x60C1, + dummySound134 = 0x60C2, + dummySound135 = 0x60C3, + dummySound136 = 0x60C4, + dummySound137 = 0x60C5, + dummySound138 = 0x60C6, + dummySound139 = 0x60C7, + dummySound140 = 0x60C8, + dummySound141 = 0x60C9, + dummySound142 = 0x60CA, + dummySound143 = 0x60CB, + dummySound144 = 0x60CC, + dummySound145 = 0x60CD, + dummySound146 = 0x60CE, + dummySound147 = 0x60CF, + dummySound148 = 0x60D0, + dummySound149 = 0x60D1, + dummySound150 = 0x60D2, + dummySound151 = 0x60D3, + dummySound152 = 0x60D4, + dummySound153 = 0x60D5, + dummySound154 = 0x60D6, + dummySound155 = 0x60D7, + dummySound156 = 0x60D8, + dummySound157 = 0x60D9, + dummySound158 = 0x60DA, + dummySound159 = 0x60DB, + dummySound160 = 0x60DC, + dummySound161 = 0x60DD, + dummySound162 = 0x60DE, + dummySound163 = 0x60DF, + dummySound164 = 0x60E0, + dummySound165 = 0x60E1, + dummySound166 = 0x60E2, + dummySound167 = 0x60E3, + dummySound168 = 0x60E4, + dummySound169 = 0x60E5, + dummySound170 = 0x60E6, + dummySound171 = 0x60E7, + dummySound172 = 0x60E8, + dummySound173 = 0x60E9, + dummySound174 = 0x60EA, + dummySound175 = 0x60EB, + dummySound176 = 0x60EC, + dummySound177 = 0x60ED, + dummySound178 = 0x60EE, + dummySound179 = 0x60EF, + dummySound180 = 0x60F0, + dummySound181 = 0x60F1, + dummySound182 = 0x60F2, + dummySound183 = 0x60F3, + dummySound184 = 0x60F4, + dummySound185 = 0x60F5, + dummySound186 = 0x60F6, + dummySound187 = 0x60F7, + dummySound188 = 0x60F8, + dummySound189 = 0x60F9, + dummySound190 = 0x60FA, + dummySound191 = 0x60FB, + dummySound192 = 0x60FC, + dummySound193 = 0x60FD, + dummySound194 = 0x60FE, + dummySound195 = 0x60FF, + JA_SE_OBJ_BOMB_IGNITION = 0x6100, + JA_SE_OBJ_TORCH_BURNING = 0x6103, + JA_SE_OBJ_STEAM = 0x612E, + JA_SE_OBJ_SEARCH_LIGHT = 0x6131, + JA_SE_OBJ_WARP_FLOWER = 0x613D, + JA_SE_OBJ_OMAMORI = 0x613E, + JA_SE_OBJ_BAR_FRAME_BURN = 0x614F, + JA_SE_OBJ_PROP_SW_ON = 0x6165, + JA_SE_OBJ_AMI_PROP = 0x6166, + JA_SE_OBJ_MO_STATUE_MOVE = 0x6179, + JA_SE_OBJ_TC_TOWER_ROUND = 0x619A, + JA_SE_OBJ_BOMB_SHOP_FAN = 0x619F, + JA_SE_CM_DRG_MTOP_FIRE = 0x61AB, + JA_SE_OBJ_KM_WINDMILL = 0x61B1, + JA_SE_OBJ_B_LIFT_MOVE = 0x61C8, + JA_SE_OBJ_KAITEN_AMI3_MOVE = 0x61CB, + JA_SE_OBJ_ICEBERG_BREATH = 0x61CC, + JA_SE_OBJ_VOLCANO_ERUPTION = 0x61CD, + JA_SE_OBJ_RES_DOOR_BLINK = 0x61D4, + JA_SE_OBJ_RES_ST_BLINK = 0x61D5, + JA_SE_OBJ_ST_DAI_LIGHT = 0x61D7, + JA_SE_OBJ_ST_DAI_MOVE = 0x61D8, + JA_SE_CM_BWD_C_MOVE_SAND = 0x61E4, + JA_SE_OBJ_SPRING = 0x61FE, + JA_SE_OBJ_TRIF_BL_GO_DOWN = 0x6222, + JA_SE_OBJ_TRIF_FL_LIGHT = 0x6223, + JA_SE_OBJ_H_STATUE_VIB = 0x6225, + JA_SE_OBJ_H_STATUE_MOVE = 0x6226, + JA_SE_OBJ_PG_EBALL_FLY_S = 0x6237, + JA_SE_OBJ_PG_EBALL_FLY_L = 0x6238, + JA_SE_OBJ_TN_TRAP = 0x6239, + JA_SE_OBJ_BPW_MASK_LAUGH = 0x623D, + JA_SE_OBJ_COL_SWS_BODYN = 0x6800, + JA_SE_OBJ_COL_SWM_BODYN = 0x6801, + JA_SE_OBJ_COL_SWL_BODYN = 0x6802, + JA_SE_OBJ_COL_SWC_MTLCR = 0x6803, + JA_SE_OBJ_COL_SWC_WODCRN = 0x6804, + JA_SE_OBJ_COL_SWC_WODCRL = 0x6805, + JA_SE_OBJ_COL_SWC_CHNS = 0x6806, + JA_SE_OBJ_COL_SWC_CHNL = 0x6807, + JA_SE_OBJ_COL_SWC_SBALL = 0x6808, + JA_SE_OBJ_COL_SWS_BODYB = 0x6809, + JA_SE_OBJ_COL_SWM_BODYB = 0x680A, + JA_SE_OBJ_COL_SWL_BODYB = 0x680B, + JA_SE_OBJ_COL_SWC_BODYS = 0x680C, + JA_SE_OBJ_COL_SWC_FRM = 0x680D, + JA_SE_OBJ_COL_SWC_WED = 0x680E, + JA_SE_OBJ_COL_SWC_GLS = 0x680F, + JA_SE_OBJ_COL_SWC_SSOIL = 0x6810, + JA_SE_OBJ_COL_SWS_NSWS = 0x6811, + JA_SE_OBJ_COL_SWS_NSWM = 0x6812, + JA_SE_OBJ_COL_SWS_NSWL = 0x6813, + JA_SE_OBJ_COL_SWM_NSWM = 0x6814, + JA_SE_OBJ_COL_SWM_NSWL = 0x6815, + JA_SE_OBJ_COL_SWL_NSWL = 0x6816, + JA_SE_OBJ_COL_SWS_NMTLP = 0x6817, + JA_SE_OBJ_COL_SWM_NMTLP = 0x6818, + JA_SE_OBJ_COL_SWL_NMTLP = 0x6819, + JA_SE_OBJ_COL_SWS_NMTLM = 0x681A, + JA_SE_OBJ_COL_SWM_NMTLM = 0x681B, + JA_SE_OBJ_COL_SWL_NMTLM = 0x681C, + JA_SE_OBJ_COL_SWC_NWODK = 0x681D, + JA_SE_OBJ_COL_SWC_NWODN = 0x681E, + JA_SE_OBJ_COL_SWC_NWODE = 0x681F, + JA_SE_OBJ_COL_SWC_NSTONE = 0x6820, + JA_SE_OBJ_COL_SWS_NSTPOT = 0x6821, + JA_SE_OBJ_COL_SWM_NSTPOT = 0x6822, + JA_SE_OBJ_COL_SWL_NSTPOT = 0x6823, + JA_SE_OBJ_COL_SWC_NBDN = 0x6824, + JA_SE_OBJ_COL_SWC_NBDS = 0x6825, + JA_SE_OBJ_COL_SWC_NWHIP = 0x6826, + JA_SE_OBJ_COL_SWC_NSOIL = 0x6827, + JA_SE_OBJ_COL_SWC_NLAWN = 0x6828, + JA_SE_OBJ_COL_SWC_NWED = 0x6829, + JA_SE_OBJ_COL_SWC_NSBRK = 0x682A, + JA_SE_OBJ_COL_SWS_NWTR = 0x682B, + JA_SE_OBJ_COL_SWM_NWTR = 0x682C, + JA_SE_OBJ_COL_SWL_NWTR = 0x682D, + JA_SE_OBJ_COL_SWC_NSAND = 0x682E, + JA_SE_OBJ_COL_SWC_NSSOIL = 0x682F, + JA_SE_OBJ_COL_SWC_WODORE = 0x6830, + JA_SE_OBJ_COL_SWC_STONE = 0x6831, + JA_SE_OBJ_COL_SWC_ROCK = 0x6832, + JA_SE_OBJ_COL_SWC_NROCK = 0x6833, + JA_SE_OBJ_COL_SWC_NBROCK = 0x6834, + JA_SE_OBJ_COL_WOD_WOD = 0x6835, + JA_SE_OBJ_COL_BDC_SNOW = 0x6836, + JA_SE_OBJ_COL_HAMMER_BRK = 0x6837, + JA_SE_OBJ_COL_NSTN_NSTN = 0x6838, + JA_SE_OBJ_COL_NSTN_ERTH = 0x6839, + JA_SE_OBJ_COL_NSTN_GRASS = 0x683A, + JA_SE_OBJ_COL_NWHP_BODY = 0x683B, + JA_SE_OBJ_COL_NWHP_NMTL = 0x683C, + JA_SE_OBJ_COL_NWHP_NWOD = 0x683D, + JA_SE_OBJ_COL_N_WATER = 0x683E, + JA_SE_OBJ_COL_MTL_STONE = 0x683F, + JA_SE_OBJ_COL_MTL_ROCK = 0x6840, + JA_SE_OBJ_COL_WOD_SSOIL = 0x6841, + JA_SE_OBJ_COL_FRAME_DMG = 0x6842, + JA_SE_OBJ_COL_N_BDY_MPLT = 0x6843, + JA_SE_OBJ_COL_SAND_HIGH = 0x6844, + JA_SE_OBJ_COL_SAND_MID = 0x6845, + JA_SE_OBJ_COL_SAND_LOW = 0x6846, + JA_SE_OBJ_COL_BRK_WRAILING = 0x6847, + JA_SE_OBJ_BOMB_EXPLODE = 0x6901, + JA_SE_OBJ_TORCH_IGNITION = 0x6902, + JA_SE_OBJ_TORCH_OFF = 0x6904, + JA_SE_OBJ_KANTERA_BREAK = 0x6905, + JA_SE_OBJ_STN_DOOR_STL_BAR = 0x6906, + JA_SE_OBJ_STN_DOOR_MOVE_U = 0x6907, + JA_SE_OBJ_STN_DOOR_MOVE_D = 0x6908, + JA_SE_OBJ_STN_DOOR_STOP_U = 0x6909, + JA_SE_OBJ_STN_DOOR_STOP_D = 0x690A, + JA_SE_OBJ_TBOX_UNLOCK = 0x690B, + JA_SE_OBJ_TBOX_OPEN_S1 = 0x690C, + JA_SE_OBJ_TBOX_OPEN_S2 = 0x690D, + JA_SE_OBJ_TBOX_CLOSE_S1 = 0x690E, + JA_SE_OBJ_TBOX_CLOSE_S2 = 0x690F, + JA_SE_OBJ_TBOX_OPEN_L1 = 0x6910, + JA_SE_OBJ_TBOX_OPEN_L2 = 0x6911, + JA_SE_OBJ_TBOX_CLOSE_L1 = 0x6912, + JA_SE_OBJ_TBOX_CLOSE_L2 = 0x6913, + JA_SE_SHIP_JUMP_ALIGHT = 0x6914, + JA_SE_SHIP_LOOK_BACK = 0x6915, + JA_SE_SHIP_LOOK_FORWARD = 0x6916, + JA_SE_OBJ_CUT_TREE_DOWN = 0x6917, + JA_SE_OBJ_FALL_WATER_S = 0x6918, + JA_SE_OBJ_FALL_WATER_M = 0x6919, + JA_SE_OBJ_FALL_WATER_L = 0x691A, + JA_SE_OBJ_FALL_MAGMA_S = 0x691B, + JA_SE_OBJ_FALL_MAGMA_M = 0x691C, + JA_SE_OBJ_FALL_MAGMA_L = 0x691D, + JA_SE_OBJ_COL_SHIP_BARREL = 0x691E, + JA_SE_OBJ_BLOCK_FALL_NORMAL = 0x691F, + JA_SE_OBJ_WBOX_FALL_NORMAL = 0x6920, + JA_SE_OBJ_BREAK_WATER_POT = 0x6921, + JA_SE_OBJ_BURN_WBOX_S = 0x6922, + JA_SE_OBJ_BURN_WBOX_L = 0x6923, + JA_SE_OBJ_BURN_WRAILING = 0x6924, + JA_SE_OBJ_PUT_POT_S = 0x6925, + JA_SE_OBJ_PUT_POT_L = 0x6926, + JA_SE_OBJ_PUT_POT_W = 0x6927, + JA_SE_OBJ_PUT_WBOX_S = 0x6928, + JA_SE_OBJ_PUT_STONE = 0x6929, + JA_SE_OBJ_PUT_ROCK = 0x692A, + JA_SE_OBJ_BREAK_STONE = 0x692B, + JA_SE_OBJ_BREAK_ROCK = 0x692C, + JA_SE_OBJ_BREAK_STEPS = 0x692D, + JA_SE_OBJ_KOUBAKU_TBOX = 0x692F, + JA_SE_OBJ_FOOT_SW_ON = 0x6930, + JA_SE_OBJ_TREE_SWING = 0x6932, + JA_SE_OBJ_SBRIDGE_BREAK = 0x6933, + JA_SE_OBJ_OTOSHIANA_OPEN = 0x6934, + JA_SE_OBJ_PUT_CHAIR = 0x6935, + JA_SE_OBJ_BREAK_CHAIR = 0x6936, + JA_SE_OBJ_BREAK_BOARD = 0x6937, + JA_SE_OBJ_BARREL_BOMB = 0x6938, + JA_SE_OBJ_SEARCH_LIGHT_UP = 0x6939, + JA_SE_OBJ_MG_BALL_DMG = 0x693A, + JA_SE_I_LK_BK_FLY_DOWN = 0x693B, + JA_SE_I_LK_BB_WING = 0x693C, + JA_SE_OBJ_BRK_WRAIL_K = 0x693F, + JA_SE_OBJ_BTD_BOARD_BURN = 0x6940, + JA_SE_OBJ_BTD_BOARD_BRK = 0x6941, + JA_SE_OBJ_BTD_FIRE_DROP = 0x6942, + JA_SE_OBJ_WPOT_LIFTUP = 0x6943, + JA_SE_OBJ_COL_SHIP_BARREL_N = 0x6944, + JA_SE_OBJ_NATA_BREAK = 0x6945, + JA_SE_OBJ_JFLOWER_IN = 0x6946, + JA_SE_OBJ_JFLOWER_OUT = 0x6947, + JA_SE_OBJ_DOOR_CHAIN_OPEN = 0x6948, + JA_SE_OBJ_PRT_LIFT_UD = 0x6949, + JA_SE_OBJ_PRT_LIFT_STOP = 0x694A, + JA_SE_OBJ_JAMA_SHOKU_OUT = 0x694B, + JA_SE_OBJ_JAMA_SHOKU_MOVE = 0x694C, + JA_SE_OBJ_JAMA_SHOKU_IN = 0x694D, + JA_SE_OBJ_BAR_FRAME_ON = 0x694E, + JA_SE_OBJ_BAR_FRAME_OFF = 0x6950, + JA_SE_OBJ_KOKIRI_H_LANDING = 0x6951, + JA_SE_OBJ_P_FLOWER_LANDING = 0x6952, + JA_SE_OBJ_P_FLOWER_LAND_W = 0x6953, + JA_SE_OBJ_LADDER_FALL_1 = 0x6954, + JA_SE_OBJ_LADDER_FALL_2 = 0x6955, + JA_SE_OBJ_L_BRIDGE_ON = 0x6956, + JA_SE_OBJ_L_BRIDGE_OFF = 0x6957, + JA_SE_OBJ_MJ_POLE_BREAK = 0x6958, + JA_SE_OBJ_KANOKE_T_GATA = 0x6959, + JA_SE_OBJ_KANOKE_T_OPEN = 0x695A, + JA_SE_OBJ_KANOKE_Y_GATA = 0x695B, + JA_SE_OBJ_KANOKE_Y_OPEN = 0x695C, + JA_SE_OBJ_FAILY_GET = 0x695D, + JA_SE_OBJ_ARROW_SW_ON = 0x695E, + JA_SE_OBJ_KEY_STATUE_SET = 0x695F, + JA_SE_OBJ_FLAT_SW_ON = 0x6960, + JA_SE_OBJ_MIRROR_REFLECT = 0x6961, + JA_SE_OBJ_LIGHT_SW_ON = 0x6962, + JA_SE_OBJ_L_STATUE_BREAK = 0x6963, + JA_SE_OBJ_L_WALL_BREAK = 0x6964, + JA_SE_OBJ_WARP_EFF_APPEAR = 0x6967, + JA_SE_OBJ_MJ_WBOARD_BRK = 0x6968, + JA_SE_OBJ_POWG_ROCK_BRK = 0x6969, + JA_SE_OBJ_BOMB_ROCK_BRK = 0x696A, + JA_SE_OBJ_BOMB_ROCK_M_BRK = 0x696B, + JA_SE_OBJ_BOMB_WALL_BRK = 0x696C, + JA_SE_OBJ_RACK_BREAK = 0x696D, + JA_SE_OBJ_DOOR_N_OPEN = 0x696E, + JA_SE_OBJ_DOOR_N_CLOSE_1 = 0x696F, + JA_SE_OBJ_DOOR_N_CLOSE_2 = 0x6970, + JA_SE_OBJ_LNK_SWORD_FALL = 0x6971, + JA_SE_OBJ_LNK_SHIELD_FALL = 0x6972, + JA_SE_OBJ_POST_EAT_LUGGAGE = 0x6973, + JA_SE_OBJ_POST_LUGGAGE_OUT = 0x6974, + JA_SE_OBJ_BOTTLE_FAILY = 0x6975, + JA_SE_OBJ_TOGE_OUT = 0x6976, + JA_SE_OBJ_TOGE_IN = 0x6977, + JA_SE_OBJ_MJ_GATE_BREAK = 0x6978, + JA_SE_OBJ_MO_STATUE_OPEN = 0x697A, + JA_SE_OBJ_MO_STATUE_CLOSE = 0x697B, + JA_SE_OBJ_CAGE_CLOSE = 0x697C, + JA_SE_OBJ_CAGE_OPEN = 0x697D, + JA_SE_OBJ_PIRATE_WHEEL = 0x697E, + JA_SE_OBJ_LOTUS_LIFT_UP = 0x697F, + JA_SE_OBJ_LOTUS_LIFT_DOWN = 0x6980, + JA_SE_OBJ_LUPY_IN_POT = 0x6981, + JA_SE_OBJ_BOMB_WATER = 0x6982, + JA_SE_CM_BST_HAND_OUT_WALL = 0x6983, + JA_SE_CM_BST_HEAD_OUT_WALL = 0x6984, + JA_SE_CM_BST_EYE_HIT = 0x6985, + JA_SE_CM_BST_BEAM_BOMB = 0x6986, + JA_SE_CM_BST_ITEM_OUT_NOSE = 0x6987, + JA_SE_CM_BST_ARROW_BOUND = 0x6988, + JA_SE_CM_BST_BOMB_BOUND = 0x6989, + JA_SE_CM_BST_HEAD_FALL = 0x698A, + JA_SE_CM_BST_BEF_EXPLODE = 0x698B, + JA_SE_CM_BST_EXPLODE = 0x698C, + JA_SE_CM_BST_JUMP_S = 0x698D, + JA_SE_CM_BST_JUMP_L = 0x698E, + JA_SE_CM_BST_WARP_BEAM = 0x698F, + JA_SE_CM_BST_HEAD_IN_WALL = 0x6990, + JA_SE_CM_BST_HEART_BOUND = 0x6991, + JA_SE_CM_BST_1_HAND_ATTACK = 0x6992, + JA_SE_CM_BST_2_HAND_ATTACK = 0x6993, + JA_SE_CM_BST_HAND_CLAP = 0x6994, + JA_SE_CM_BST_EYE_BREAK = 0x6995, + JA_SE_OBJ_TN_HELMET_FALL = 0x6996, + JA_SE_OBJ_TN_ARMOR_FALL = 0x6997, + JA_SE_OBJ_TN_SWORD_FALL = 0x6998, + JA_SE_OBJ_ST_CLUB_FALL = 0x6999, + JA_SE_OBJ_TC_JAIL_STRING = 0x699B, + JA_SE_OBJ_TC_JAIL_FLR_BRK = 0x699C, + JA_SE_OBJ_P_SHIP_SHTR_OP = 0x699D, + JA_SE_OBJ_P_SHIP_SHTR_CL = 0x699E, + JA_SE_OBJ_CK_CHEMICAL_BOMB = 0x69A0, + JA_SE_OBJ_CK_FLASK_STEAM = 0x69A1, + JA_SE_PLAYSPOT_RIGHT = 0x69A2, + JA_SE_PLAYSPOT_WRONG = 0x69A3, + JA_SE_OBJ_TC_JAIL_DOOR_OP = 0x69A4, + JA_SE_LETTER_GAME_NEW = 0x69A5, + JA_SE_LETTER_IN_BOX = 0x69A6, + JA_SE_OBJ_GONG_HIT = 0x69A7, + JA_SE_OBJ_SAGE_GATE_CREAK = 0x69A8, + JA_SE_OBJ_SAGE_GATE_LIGHT = 0x69A9, + JA_SE_OBJ_SAGE_GATE_BREAK = 0x69AA, + JA_SE_OBJ_BOMB_DN_ST_S = 0x69AC, + JA_SE_OBJ_BOMB_DN_ST_E = 0x69AD, + JA_SE_OBJ_BOSS_LOCK_OPEN = 0x69AE, + JA_SE_OBJ_SVINE_REBOUND = 0x69AF, + JA_SE_OBJ_SVINE_CRASH = 0x69B0, + JA_SE_OBJ_HAMMER_SW_ON = 0x69B2, + JA_SE_OBJ_R_STAIR_APPEAR = 0x69B3, + JA_SE_OBJ_B_SHUTTER_OPEN = 0x69B4, + JA_SE_OBJ_B_SHUTTER_STOP = 0x69B5, + JA_SE_OBJ_SURP_BOX_BREAK = 0x69B6, + JA_SE_OBJ_HAMMER_SW_OFF = 0x69B7, + JA_SE_OBJ_HAMMER_SW_SWING = 0x69B8, + JA_SE_OBJ_JUMP_SPR_CLOSE = 0x69B9, + JA_SE_OBJ_JUMP_SPR_OPEN = 0x69BA, + JA_SE_OBJ_SW_STAIR_ON_1 = 0x69BB, + JA_SE_OBJ_SW_STAIR_OFF_1 = 0x69BC, + JA_SE_OBJ_SW_STAIR2_ON_1 = 0x69BD, + JA_SE_OBJ_SW_STAIR2_OFF_2 = 0x69BE, + JA_SE_OBJ_TENMADO_SHTR_OP = 0x69BF, + JA_SE_OBJ_L_STATUE_L_BREAK = 0x69C0, + JA_SE_OBJ_CURTAIN_BURN = 0x69C1, + JA_SE_OBJ_L_OBJ_BRK_TAME = 0x69C2, + JA_SE_OBJ_HEAVY_FLOOR_BRK = 0x69C3, + JA_SE_OBJ_KAITEN_AMI_OPEN = 0x69C4, + JA_SE_OBJ_JAMA_MECHA_OUT = 0x69C5, + JA_SE_OBJ_JAMA_MECHA_IN = 0x69C6, + JA_SE_OBJ_SLIDE_AMI_OPEN = 0x69C7, + JA_SE_OBJ_B_LIFT_STOP = 0x69C9, + JA_SE_OBJ_WDUN_R04_STR_OP = 0x69CA, + JA_SE_OBJ_VOLCANO_CHILL = 0x69CE, + JA_SE_OBJ_VOLCANO_ICE_BRK = 0x69CF, + JA_SE_OBJ_ICEVERG_MELT = 0x69D0, + JA_SE_OBJ_CUT_L_TREE_DOWN = 0x69D1, + JA_SE_OBJ_ROPE_SW_ON = 0x69D2, + JA_SE_OBJ_ST_CHIME = 0x69D3, + JA_SE_OBJ_WATER_GATE_CL = 0x69D6, + JA_SE_OBJ_ST_DAI_STOP = 0x69D9, + JA_SE_OBJ_FIRE_ARW_EFF = 0x69DA, + JA_SE_OBJ_ICE_ARW_EFF = 0x69DB, + JA_SE_OBJ_LIGHT_ARW_EFF = 0x69DC, + JA_SE_OBJ_MINI_ICE = 0x69DD, + JA_SE_OBJ_MINI_ICE_BREAK = 0x69DE, + JA_SE_OBJ_WZ_FIRE_B_IMP = 0x69DF, + JA_SE_OBJ_WZ_SUMMON_B_SMN = 0x69E0, + JA_SE_OBJ_BWD_SANDFALL_S = 0x69E1, + JA_SE_CM_BWD_C_JUMP_OUT = 0x69E2, + JA_SE_CM_BWD_C_IN_SAND = 0x69E3, + JA_SE_OBJ_BOSS_WARP_APPEAR = 0x69E5, + JA_SE_OBJ_TREE_SWING_S = 0x69E6, + JA_SE_OBJ_CUP_SWING = 0x69E7, + JA_SE_OBJ_DISH_SWING = 0x69E8, + JA_SE_OBJ_LUPY_OUT = 0x69E9, + JA_SE_OBJ_W_BOMB_F_RECOVER = 0x69EA, + JA_SE_OBJ_BAL_LIFT_LANDING = 0x69EB, + JA_SE_OBJ_WARP_POT_CV_BURN = 0x69EC, + JA_SE_OBJ_ITEM_OUT = 0x69ED, + JA_SE_OBJ_D05_HO_DOWN = 0x69EE, + JA_SE_OBJ_OCHIBA_BLOW = 0x69EF, + JA_SE_OBJ_OCHIBA_BURN = 0x69F0, + JA_SE_OBJ_BOKKURI_PICK_UP = 0x69F1, + JA_SE_OBJ_BOKKURI_BOUND = 0x69F2, + JA_SE_OBJ_BOKKURI_BREAK = 0x69F3, + JA_SE_OBJ_BOKKURI_RECOVER = 0x69F4, + JA_SE_OBJ_BOKKURI_SWELL = 0x69F5, + JA_SE_OBJ_THUNDER_FAR = 0x69F6, + JA_SE_OBJ_THUNDER_NEAR = 0x69F7, + JA_SE_OBJ_CRG_DRUG_MADE = 0x69F8, + JA_SE_CM_SH_RIPPLE = 0x69F9, + JA_SE_CM_SH_CUT_PROP = 0x69FA, + JA_SE_CM_SH_LANDING_SEA = 0x69FB, + JA_SE_CM_SH_RECOVER_PROP = 0x69FC, + JA_SE_CM_HU_RC_MOVE_RAPID = 0x69FD, + JA_SE_OBJ_MASK_S_BREAK = 0x69FF, + JA_SE_OBJ_MASK_L_BREAK = 0x6A00, + JA_SE_OBJ_FIG_HATCH_OPEN = 0x6A01, + JA_SE_OBJ_WDUN_TRAP_STOP = 0x6A02, + JA_SE_OBJ_L_HOUSE_FIRE = 0x6A03, + JA_SE_OBJ_L_HOUSE_LIGHT = 0x6A04, + JA_SE_OBJ_ST_TAKT_GR_ON = 0x6A05, + JA_SE_OBJ_LUPY_BOUND = 0x6A06, + JA_SE_OBJ_M_POT_BOUND = 0x6A07, + JA_SE_OBJ_H_PENDANT_BOUND = 0x6A08, + JA_SE_OBJ_S_NECKLACE_BOUND = 0x6A09, + JA_SE_OBJ_BOKO_SEED_BOUND = 0x6A0A, + JA_SE_OBJ_W_EMBLEM_BOUND = 0x6A0B, + JA_SE_OBJ_V_BAIT_BOUND = 0x6A0C, + JA_SE_OBJ_HYOI_BOUND = 0x6A0D, + JA_SE_OBJ_KOKIRI_H_CRASH = 0x6A0E, + JA_SE_OBJ_BAKURETU_RECOVER = 0x6A0F, + JA_SE_OBJ_TN_COLUMN_BREAK = 0x6A10, + JA_SE_OBJ_TN_COLUMN_SMASH = 0x6A11, + JA_SE_OBJ_F_WATERGATE_CL = 0x6A12, + JA_SE_OBJ_CB_SEED_GERMIN = 0x6A13, + JA_SE_OBJ_CB_SEED_GROW = 0x6A14, + JA_SE_OBJ_TRIFORCE_BOX_IN = 0x6A15, + JA_SE_OBJ_ICE_ROCK_MELT = 0x6A16, + JA_SE_OBJ_DK_TREE_RECOVER = 0x6A17, + JA_SE_OBJ_DK_TREE_GROW_UP = 0x6A18, + JA_SE_OBJ_ENEMY_SHIP_SINK = 0x6A19, + JA_SE_OBJ_THUND_FAR_WIN = 0x6A1A, + JA_SE_OBJ_THUND_NEAR_WIN = 0x6A1B, + JA_SE_OBJ_RYUBOKU_MOVE = 0x6A1C, + JA_SE_OBJ_B_BOSS_DR_BRK_1 = 0x6A1D, + JA_SE_OBJ_B_BOSS_DR_BRK_2 = 0x6A1E, + JA_SE_OBJ_B_BOSS_DR_BRK_3 = 0x6A1F, + JA_SE_OBJ_GN_SW_DR_LIGHT = 0x6A20, + JA_SE_OBJ_GN_SW_DR_BREAK = 0x6A21, + JA_SE_OBJ_TRIF_FL_SHINE = 0x6A24, + JA_SE_OBJ_H_STATUE_STOP = 0x6A27, + JA_SE_OBJ_JB_STONE_BRK = 0x6A28, + JA_SE_OBJ_JB_STONE_FALL = 0x6A29, + JA_SE_OBJ_BS_MELODY_1 = 0x6A2A, + JA_SE_OBJ_BS_MELODY_2 = 0x6A2B, + JA_SE_OBJ_TRIF_BL_STOP = 0x6A2C, + JA_SE_OBJ_BA_FAILY_1 = 0x6A2D, + JA_SE_OBJ_BA_FAILY_2 = 0x6A2E, + JA_SE_OBJ_DY_FLOWER = 0x6A2F, + JA_SE_OBJ_SHIP_HIT = 0x6A30, + JA_SE_OBJ_SDOLL_EYE_PULSE = 0x6A31, + JA_SE_OBJ_D19_JINARI = 0x6A32, + JA_SE_OBJ_D19_STATUE_LIGHT = 0x6A33, + JA_SE_OBJ_GN_WARP_APPEAR = 0x6A34, + JA_SE_OBJ_PG_EBALL_EXP_S = 0x6A35, + JA_SE_OBJ_PG_EBALL_EXP_L = 0x6A36, + JA_SE_OBJ_BPW_FIRE_OUT = 0x6A3A, + JA_SE_OBJ_BPW_FIRE_EXPLODE = 0x6A3B, + JA_SE_OBJ_BPW_MASK_APPEAR = 0x6A3C, + JA_SE_OBJ_BPW_KANTERA_FALL = 0x6A3E, + JA_SE_OBJ_BPW_LIGHT_ON = 0x6A3F, + JA_SE_CM_BGN_D_HIT_PUNCH = 0x6A40, + JA_SE_CM_BGN_D_HIT_PUNCH_W = 0x6A41, + JA_SE_CM_BGN_STRING_RIPPLE = 0x6A42, + JA_SE_CM_BGN_BODY_RIPPLE = 0x6A43, + JA_SE_CM_BGN_M_HEAD_RIPPLE = 0x6A44, + JA_SE_CM_BGN_M_TAIL_RIPPL = 0x6A45, + JA_SE_OBJ_D21_MSWORD_VIB = 0x6A46, + JA_SE_OBJ_D21_MSWORD_PULL = 0x6A47, + JA_SE_OBJ_D21_WSTATUE_MOVE = 0x6A48, + JA_SE_OBJ_D21_WSTATUE_OMEN = 0x6A49, + JA_SE_OBJ_D26_DOLL_BRK = 0x6A4A, + JA_SE_OBJ_D25_TF_APPEAR = 0x6A4B, + JA_SE_OBJ_D25_ZL_METAMOR = 0x6A4C, + JA_SE_OBJ_D25_ZL_TF = 0x6A4D, + JA_SE_OBJ_D27_TRIFORCE = 0x6A4E, + JA_SE_OBJ_D29_GATHER_LIGHT = 0x6A4F, + JA_SE_OBJ_D29_OPEN_GUARD = 0x6A50, + JA_SE_OBJ_D29_SWORD_VIB = 0x6A51, + JA_SE_OBJ_D29_SWORD_POW = 0x6A52, + JA_SE_OBJ_D42_FLY_TF = 0x6A53, + JA_SE_OBJ_D43_WATER_L = 0x6A54, + JA_SE_OBJ_B_BOSS_DR_LT_1 = 0x6A55, + JA_SE_OBJ_HL_WARP_OFF = 0x6A56, + JA_SE_OBJ_TNCL_BTL_VANISH = 0x6A57, + JA_SE_SEA_ALL_NORM_L = 0x7000, + JA_SE_SEA_ALL_NORM_R = 0x7001, + JA_SE_SEA_ALL_NORM_SR = 0x7002, + JA_SE_SEASHORE_NORM = 0x7003, + JA_SE_SEASHORE_QUAY = 0x7004, + JA_SE_SEASHORE_CLIFF = 0x7005, + JA_SE_MAGMA_L = 0x7006, + JA_SE_MAGMA_R = 0x7007, + JA_SE_MAGMA_SR = 0x7008, + JA_SE_FIREBLAST_NOISE = 0x7009, + JA_SE_ATM_PRT_SHIP_INNER = 0x7019, + JA_SE_ATM_PRT_SHIP_WAVE = 0x701A, + JA_SE_ATM_SHIREN_SEA_UP = 0x701B, + JA_SE_ATM_SHIREN_SEA_DOWN = 0x701C, + JA_SE_OBJ_WIND_TAG = 0x701D, + JA_SE_OBJ_WIND_TAG_L = 0x701E, + JA_SE_ATM_WATER_GATE = 0x701F, + JA_SE_ATM_MJT_JINARI = 0x7020, + JA_SE_ATM_MJT_SHUTTER = 0x7021, + JA_SE_CM_BL_FLAME_BURNING = 0x7023, + JA_SE_CM_BL_CURSE_BURNING = 0x7024, + JA_SE_OBJ_WARP_EFF_SUS = 0x7025, + JA_SE_OBJ_KEY_ST_LIGHT = 0x7026, + JA_SE_OBJ_FLAT_SW_LIGHT = 0x7027, + JA_SE_OBJ_MIRROR_LIGHT = 0x7028, + JA_SE_OBJ_LIGHT_SW_SUNSHINE = 0x7029, + JA_SE_ATM_MJ_WATER_GOPO = 0x702A, + JA_SE_ATM_MJ_WATER_OUT = 0x702B, + JA_SE_ATM_MJ_WATER_UP = 0x702C, + JA_SE_ATM_MJ_WATER_PACHA = 0x702D, + JA_SE_CM_GM_FLYING = 0x702F, + JA_SE_CM_GM_FOOTNOTE = 0x7030, + JA_SE_CM_GM_JET = 0x7031, + JA_SE_CM_FM_SPOT = 0x7032, + JA_SE_OBJ_MO_STATUE_FIRE = 0x7033, + JA_SE_OBJ_PIRATE_CRUISE = 0x7034, + JA_SE_CM_BST_HORI = 0x7035, + JA_SE_CM_BST_HAND_WORKING = 0x7036, + JA_SE_CM_BST_HAND_SLEEPING = 0x7037, + JA_SE_CM_BST_HEAD_WORKING = 0x7038, + JA_SE_CM_BST_HEAD_SLEEPING = 0x7039, + JA_SE_CM_BST_GOKOU = 0x703A, + JA_SE_ATM_FILE_SEL_SEA = 0x703B, + JA_SE_OBJ_CK_BOIL_L = 0x703C, + JA_SE_OBJ_CK_BOIL_C = 0x703D, + JA_SE_OBJ_CK_BOIL_R = 0x703E, + JA_SE_OBJ_WDUN_WMILL_L_RND = 0x7043, + JA_SE_OBJ_WDUN_WMILL_S_RND = 0x7044, + JA_SE_OBJ_JAMA_MECHA_MOVE = 0x7045, + JA_SE_OBJ_OSTATUE_LIGHT_SUS = 0x7046, + JA_SE_OBJ_WZ_FIRE_B_FLY = 0x7047, + JA_SE_OBJ_WZ_SUMMON_B_FLY = 0x7048, + JA_SE_OBJ_BWD_SANDFALL_L = 0x7049, + JA_SE_OBJ_BOSS_WARP_LV = 0x704A, + JA_SE_OBJ_RDUN_MAE_W_OUT = 0x704B, + JA_SE_OBJ_RDUN_MAE_GEYSER = 0x704C, + JA_SE_OBJ_RDUN_MAE_W_UP = 0x704D, + JA_SE_FIREBLAST_OMEN = 0x704E, + JA_SE_OBJ_WDUN_TRAP_MOVE = 0x704F, + JA_SE_OBJ_ATK_VINE_MP_SUCK = 0x7050, + JA_SE_CHR_PW_MOVE = 0x7051, + JA_SE_OBJ_DEKU_HA_LIGHT = 0x7052, + JA_SE_OBJ_BPW_BREATH_IN = 0x7054, + JA_SE_OBJ_BPW_BREATH_OUT = 0x7055, + JA_SE_OBJ_BPW_FIREBLAST = 0x7056, + JA_SE_OBJ_BPW_FLYING = 0x7057, + JA_SE_OBJ_BPW_FLYING_CURSE = 0x7058, + JA_SE_OBJ_BOSS_TF_WARP_SUS = 0x7059, + JA_SE_CM_BGN_MECHA_ROTATE = 0x705A, + JA_SE_CM_BGN_MECHA_ROPE = 0x705B, + JA_SE_CM_BGN_T_ROUND = 0x705C, + JA_SE_CM_BGN_M_CRAWL = 0x705D, + JA_SE_OBJ_D21_SKY_LIGHT = 0x705F, + JA_SE_OBJ_D25_HI_TF_R_SUS = 0x7061, + JA_SE_OBJ_D25_HI_TF_L_SUS = 0x7062, + JA_SE_ATM_IN_SEA = 0x7063, + JA_SE_OBJ_D24_GN_TRIFORCE = 0x7064, + JA_SE_ATM_D24_JINARI = 0x7065, + JA_SE_OBJ_D42_TF_LINK = 0x7066, + JA_SE_OBJ_D42_TF_ZELDA = 0x7067, + JA_SE_OBJ_D42_TF_GANON = 0x7068, + JA_SE_OBJ_D42_TF_ALL = 0x7069, + JA_SE_OBJ_D43_IN_SEA = 0x706A, + JA_SE_OBJ_D43_BUBBLE = 0x706B, + JA_SE_ATM_VS_GANON_WFALL = 0x706C, + JA_SE_ATM_VS_GANON_RAIN = 0x706D, + JA_SE_OBJ_D28_TF = 0x706E, + JA_SE_OBJ_PIRATE_CRUISE_LPF = 0x706F, + JA_SE_ATM_LOGO_SEA = 0x7070, + JA_SE_CM_BKM_FLW_WAVING = 0x780A, + JA_SE_CM_BKM_FLW_TO_BUD = 0x780B, + JA_SE_CM_BKM_VINE_OUT = 0x780C, + JA_SE_CM_BKM_BODY_UP = 0x780D, + JA_SE_CM_BKM_BODY_FALL = 0x780E, + JA_SE_CM_BKM_BODY_CLOSE = 0x780F, + JA_SE_CM_BKM_BODY_EATING = 0x7810, + JA_SE_CM_BKM_ATKVINE_IN_G = 0x7811, + JA_SE_CM_BKM_ATKVINE_OUT_G = 0x7812, + JA_SE_CM_BKM_ATKVINE_IN_G2 = 0x7813, + JA_SE_CM_BKM_ATKVINE_OUT_G2 = 0x7814, + JA_SE_CM_BKM_END_FLW_WAVING = 0x7815, + JA_SE_CM_BKM_END_FLW_LIFTUP = 0x7816, + JA_SE_CM_BKM_END_FLW_DIE = 0x7817, + JA_SE_CM_BKM_ATKVINE_BOOM = 0x7818, + JA_SE_ATM_MJT_SHUTTER_END = 0x7822, + JA_SE_CM_DK_WATER_COLUMN = 0x782E, + JA_SE_CM_DRG_MTOP_MAGMA = 0x783F, + JA_SE_OBJ_TOGETOGE_OUT = 0x7840, + JA_SE_OBJ_TOGETOGE_MOVE = 0x7841, + JA_SE_OBJ_TOGETOGE_IN = 0x7842, + JA_SE_OBJ_DY_HANAFUBUKI = 0x7853, + JA_SE_OBJ_D21_MSWORD_LIGHT = 0x785E, + JA_SE_OBJ_D21_BLIGHTNESS = 0x7860, +}; + +#endif /* JAZELAUDIO_SE_H */ \ No newline at end of file diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 2d95efb20..f5ce3219f 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -16,6 +16,16 @@ class JPACallBackBase; class JPACallBackBase2; class JPADataBlockLinkInfo; +enum { + JPAEmtrStts_StopEmit = 0x01, + JPAEmtrStts_StopCalc = 0x02, + JPAEmtrStts_StopDraw = 0x04, + JPAEmtrStts_EnableDeleteEmitter = 0x08, + JPAEmtrStts_FirstEmit = 0x10, + JPAEmtrStts_RateStepEmit = 0x20, + JPAEmtrStts_Immortal = 0x40, +}; + class JPABaseEmitter { public: typedef void (JPABaseEmitter::*VolumeFunc)(); @@ -45,12 +55,21 @@ public: void calcgReRDirection(); void getPivotX(); void getPivotY(); + + void setStatus(u32 status) { mFlags |= status; } u8 getGlobalAlpha() { return mGlobalPrmColor.a; } void setGlobalAlpha(u8 alpha) { mGlobalPrmColor.a = alpha; } void setGlobalRTMatrix(MtxP mtx) { JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); } + + void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); } + + void becomeInvalidEmitter() { + mMaxFrame = -1; + stopCreateParticle(); + } /* 0x000 */ VolumeFunc mVolumeFunc; /* 0x00C */ cXyz mEmitterScale; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 6b63209bb..e2d93dd18 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -170,6 +170,7 @@ public: void setLkDemoAnmArchive(JKRArchive* i_arc) { mpLkDArc = i_arc; } void setStatus(u16 status) { mStatus = status; } + s32 checkStatus(u16 flags) { return flags & mStatus; } void setShipId(u8 i_id) { mShipId = i_id; } void setShipRoomId(u8 i_id) { mShipRoomId = i_id; } @@ -240,7 +241,7 @@ public: /* 0x483C */ dFlower_packet_c* mpFlowerPacket; /* 0x4840 */ s8 mLkDArcIdx; /* 0x4841 */ u8 field_0x4841; - /* 0x4842 */ s16 mStatus; + /* 0x4842 */ u16 mStatus; /* 0x4844 */ dDlst_window_c mDlstWindow[1]; /* 0x4870 */ dComIfG_camera_info_class mCameraInfo[1]; /* 0x48A4 */ daPy_py_c* mpPlayer[1]; @@ -656,6 +657,22 @@ inline BOOL dComIfGs_isGetItem(int i_field, u8 i_item) { return g_dComIfG_gameInfo.save.getPlayer().getGetItem().isItem(i_field, i_item); } +inline s16 dComIfGs_getWindY() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().getWindY(); +} + +inline s16 dComIfGs_getWindX() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().getWindX(); +} + +inline void dComIfGs_setWindY(s16 i_windY) { + g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().setWindY(i_windY); +} + +inline void dComIfGs_setWindX(s16 i_windX) { + g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().setWindX(i_windX); +} + /** * === PLAY === */ @@ -984,6 +1001,10 @@ inline void dComIfGp_setMessageCountNumber(s16 num) { g_dComIfG_gameInfo.play.setMessageCountNumber(num); } +inline s32 dComIfGp_checkStatus(u16 flags) { + return g_dComIfG_gameInfo.play.checkStatus(flags); +} + /** * === EVENT ===*/ @@ -1120,6 +1141,28 @@ inline s32 dComIfGd_getLightModelNum() { return g_dComIfG_gameInfo.drawlist.getLightModelNum(); } +inline J3DDrawBuffer* dComIfGd_getListFilter() { + return g_dComIfG_gameInfo.drawlist.getOpaListFilter(); +} + +inline void dComIfGd_setList() { + g_dComIfG_gameInfo.drawlist.setOpaList(); + g_dComIfG_gameInfo.drawlist.setXluList(); +} + +inline void dComIfGd_setListSky() { + g_dComIfG_gameInfo.drawlist.setOpaListSky(); + g_dComIfG_gameInfo.drawlist.setXluListSky(); +} + +inline void dComIfGd_setXluListBG() { + g_dComIfG_gameInfo.drawlist.setXluListBG(); +} + +inline void dComIfGd_entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) { + g_dComIfG_gameInfo.drawlist.entryZSortXluList(i_packet, param_1); +} + /** * === RESOURCE === */ diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index a192b2666..4434b1ae6 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -1,6 +1,7 @@ #ifndef D_D_DRAWLIST_H #define D_D_DRAWLIST_H +#include "JSystem/J3DGraphBase/J3DDrawBuffer.h" #include "f_op/f_op_view.h" #include "global.h" #include "m_Do/m_Do_ext.h" @@ -171,21 +172,20 @@ struct dDlst_alphaModelData_c; struct dDlst_alphaModel_c { public: enum Type { - TYPE_SPHERE = 0, - TYPE_TWO_SPHERES = 1, - TYPE_SEARCHLIGHT = 2, - TYPE_CUBE = 3, - TYPE_SMALL_SPHERE = 4, + TYPE_SPHERE = 0, + TYPE_TWO_SPHERES = 1, + TYPE_SEARCHLIGHT = 2, + TYPE_CUBE = 3, + TYPE_SMALL_SPHERE = 4, TYPE_THREE_SPHERES = 5, }; - + dDlst_alphaModel_c(); void create(int); void set(u8 type, Mtx mtx, u8 alpha); void draw(MtxP); - s32 getNum() { - return mNum; - } + s32 getNum() { return mNum; } + public: /* 0x00 */ _GXColor mColor; /* 0x04 */ s16 mCapacity; @@ -208,6 +208,21 @@ public: void calcWipe(); void set2DOpa(dDlst_base_c*); + J3DDrawBuffer* getOpaListFilter() { return mpWetherFxBuffer; } + + void setXluDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, XLU_BUFFER); } + void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, OPA_BUFFER); } + void setOpaList() { setOpaDrawList(mpBufInvisibleModelOpa); } + void setXluList() { setXluDrawList(mpBufInvisibleModelXlu); } + void setOpaListSky() { setOpaDrawList(mpBufSkyOpa); } + void setXluListSky() { setXluDrawList(mpBufSkyXlu); } + void setOpaListBG() { setOpaDrawList(mpBufWorldOpa); } + void setXluListBG() { setXluDrawList(mpBufWorldXlu); } + + void entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) { + entryZSortXluDrawList(mpBufInvisibleModelXlu, i_packet, param_1); + } + int setSimpleShadow(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3, s16 param_4, f32 param_5, _GXTexObj* param_6) { return mShadowControl.setSimple(param_0, param_1, param_2, param_3, param_4, param_5, @@ -217,22 +232,12 @@ public: dKy_tevstr_c* pTevStr) { return mShadowControl.setReal2(id, param_2, pModel, pPos, param_5, param_6, pTevStr); } - - void setAlphaModel(u8 type, Mtx mtx, u8 alpha) { - mpAlphaModel->set(type, mtx, alpha); - } - void setSpotModel(u8 type, Mtx mtx, u8 alpha) { - mpSpotModel->set(type, mtx, alpha); - } - void setLightModel(u8 type, Mtx mtx, u8 alpha) { - mpLightModel->set(type, mtx, alpha); - } - s32 getSpotModelNum() { - return mpSpotModel->getNum(); - } - s32 getLightModelNum() { - return mpLightModel->getNum(); - } + + void setAlphaModel(u8 type, Mtx mtx, u8 alpha) { mpAlphaModel->set(type, mtx, alpha); } + void setSpotModel(u8 type, Mtx mtx, u8 alpha) { mpSpotModel->set(type, mtx, alpha); } + void setLightModel(u8 type, Mtx mtx, u8 alpha) { mpLightModel->set(type, mtx, alpha); } + s32 getSpotModelNum() { return mpSpotModel->getNum(); } + s32 getLightModelNum() { return mpLightModel->getNum(); } static void offWipe() { mWipe = false; } diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 0215cee03..c97a8b4c2 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -35,7 +35,7 @@ struct WIND_INFLUENCE { /* 0x18 */ f32 mRadius; /* 0x1C */ f32 mStrength; /* 0x20 */ f32 field_0x20; - /* 0x24 */ u32 field_0x24; + /* 0x24 */ int field_0x24; /* 0x28 */ u8 mbConstant; }; @@ -50,9 +50,7 @@ struct WIND_INF_ENTITY { struct GB_WIND_INFLUENCE { /* 0x00 */ cXyz mWindVec; /* 0x04 */ cXyz* mpWindVecOverride; - /* 0x08 */ f32 field_0x8; - /* 0x0C */ f32 field_0xc; - /* 0x10 */ f32 field_0x10; + /* 0x08 */ cXyz field_0x8; /* 0x14 */ f32 mWindPower; /* 0x18 */ f32 mWindStrengthOverride; /* 0x1C */ f32 mCustomWindPower; @@ -162,7 +160,8 @@ class dKankyo_housi_Packet; class dKankyo_cloud_Packet; class dKankyo_vrkumo_Packet; class dKankyo_wave_Packet; -class dKyr__wind_Packet; +class dKankyo_poison_Packet; +class WINDEFF_SET; class dKankyo_star_Packet; class stage_palet_info_class; class stage_pselect_info_class; @@ -229,8 +228,10 @@ public: /* 0x9D8 */ int mStarCount; /* 0x9DC */ f32 mStarCountTarget; /* 0x9E0 */ dKankyo_star_Packet* mpStarPacket; - /* 0x9E4 */ u8 field_0x9E4[0x9F0 - 0x9E4]; - /* 0x9F0 */ u8 mbHouseInitialized; + /* 0x9E4 */ u8 mbPoisonInitialized; + /* 0x9E8 */ int mPoisonCount; + /* 0x9EC */ dKankyo_poison_Packet* mpPoisonPacket; + /* 0x9F0 */ u8 mbHousiInitialized; /* 0x9F4 */ int mHousiCount; /* 0x9F8 */ dKankyo_housi_Packet* mpHousiPacket; /* 0x9FC */ u8 mMoyaInitialized; @@ -242,11 +243,11 @@ public: /* 0xA10 */ f32 mVrkumoStrength; /* 0xA14 */ dKankyo_vrkumo_Packet* mpVrkumoPacket; /* 0xA18 */ u8 mWaveInitialized; - /* 0xA19 */ u8 field_0xA19[0xA20 - 0xA19]; + /* 0xA1C */ int field_0xa1c; /* 0xA20 */ dKankyo_wave_Packet* mpWavePacket; /* 0xA24 */ u8 mbWindlineInitialized; /* 0xA28 */ int mWindlineCount; - /* 0xA2C */ dKyr__wind_Packet* mpWind; + /* 0xA2C */ WINDEFF_SET* mpWind; /* 0xA30 */ EF_THUNDER mThunderEff; /* 0xA68 */ WAVE_INFO* mpWaveInfl[10]; /* 0xA90 */ cXyz mLightDir; diff --git a/include/d/d_kankyo_rain.h b/include/d/d_kankyo_rain.h index 6e04a8844..7ea0bb78a 100644 --- a/include/d/d_kankyo_rain.h +++ b/include/d/d_kankyo_rain.h @@ -1,7 +1,43 @@ #ifndef D_KANKYO_D_KANKYO_RAIN_H #define D_KANKYO_D_KANKYO_RAIN_H +#include "dolphin/types.h" + +class cXyz; + +void dKyr_drawSun(f32(*)[4], cXyz*, GXColor&, u8**); +void dKyr_drawLenzflare(f32(*)[4], cXyz*, GXColor&, u8**); +void dKyr_drawRain(f32(*)[4], u8**); +void dKyr_drawSibuki(f32(*)[4], u8**); +void drawPoison(f32(*)[4], u8**); +void dKyr_drawHousi(f32(*)[4], u8**); +void dKyr_drawKazanbai(f32(*)[4], u8**); +void dKyr_drawSnow(f32(*)[4], u8**); +void dKyr_drawStar(f32(*)[4], u8**); +void drawWave(f32(*)[4], u8**); +void drawCloudShadow(f32(*)[4], u8**); +void drawVrkumo(f32(*)[4], GXColor&, u8**); +void dKyr_thunder_init(); +void dKyr_thunder_move(); void dKyr_poison_light_colision(); +void dKyr_wind_init(); +void dKyr_wind_move(); +void dKyr_sun_move(); +void dKyr_lenzflare_move(); +void dKyr_rain_init(); +void dKyr_rain_move(); +void dKyr_snow_move(); +void dKyr_kazanbai_move(); +void dKyr_snow_init(); +void dKyr_star_init(); +void dKyr_star_move(); +void poison_init(); +void poison_move(); +void dKyr_housi_move(); +void cloud_shadow_move(); +void vrkumo_move(); +void wave_move(); +void dKyr_get_vectle_calc(cXyz*, cXyz*, cXyz*); BOOL dKyr_poison_live_check(); BOOL dKyr_moon_arrival_check(); diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h index 151bed3b4..6fd6189b8 100644 --- a/include/d/d_kankyo_wether.h +++ b/include/d/d_kankyo_wether.h @@ -1,9 +1,341 @@ #ifndef D_KANKYO_WETHER_H #define D_KANKYO_WETHER_H +#include "JSystem/J3DGraphBase/J3DPacket.h" +#include "SSystem/SComponent/c_xyz.h" + +class JUTTexture; +class JPABaseEmitter; +class WIND_INFLUENCE; + +class dKankyo_sun_Packet : public J3DPacket { +public: + dKankyo_sun_Packet() {} + + virtual void draw(); + virtual ~dKankyo_sun_Packet(); + + /* 0x10 */ cXyz mPos[2]; + /* 0x28 */ u32 mVizChkData[5]; + /* 0x3C */ u8 field_0x3c; + /* 0x3D */ bool field_0x3d; + /* 0x40 */ f32 mVisibility; + /* 0x44 */ f32 mSunAlpha; + /* 0x48 */ f32 mMoonAlpha; + /* 0x4C */ GXColor mColor; + /* 0x50 */ u8* mpTextureData[5]; +}; + +class dKankyo_sunlenz_Packet : public J3DPacket { +public: + dKankyo_sunlenz_Packet() {} + + virtual void draw(); + virtual ~dKankyo_sunlenz_Packet(); + + /* 0x10 */ GXColor mColorTmp; + /* 0x14 */ u8* mpTexSnow01; + /* 0x18 */ u8* mpTexLensHalf; + /* 0x1C */ u8* mpTexRingHalf; + /* 0x20 */ cXyz mPositions[8]; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 field_0x84; + /* 0x88 */ f32 field_0x88; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 mAngleDeg; + /* 0x94 */ f32 mDistFalloff; + /* 0x98 */ s16 field_0x98; + /* 0x9A */ bool mbDrawLenzInSky; +}; + +struct RAIN_EFF { + RAIN_EFF(); + ~RAIN_EFF(); + + /* 0x00 */ u8 mStatus; + /* 0x04 */ cXyz mPos; + /* 0x10 */ cXyz mBasePos; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 mAlpha; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ s16 mTimer; +}; + +class dKankyo_rain_Packet : public J3DPacket { +public: + dKankyo_rain_Packet() {} + + virtual void draw(); + virtual ~dKankyo_rain_Packet(); + + /* 0x0010 */ u8* mpTxSnow01; + /* 0x0014 */ u8* mpTxRingAHalf; + /* 0x0018 */ RAIN_EFF mRainEff[250]; + /* 0x36C8 */ f32 field_0x36c8; + /* 0x36CC */ f32 field_0x36cc; + /* 0x36D0 */ s16 mRainCount; + /* 0x36D2 */ u8 field_0x36D2[0x36D8 - 0x36D2]; + /* 0x36D8 */ cXyz mCamEyePos; + /* 0x36E4 */ cXyz mCamCenterPos; + /* 0x36F0 */ cXyz mCenterDelta; + /* 0x36FC */ f32 mCenterDeltaMul; + /* 0x3700 */ f32 field_0x3700; + /* 0x3704 */ f32 mSibukiAlpha; + /* 0x3708 */ f32 mOverheadFade; + /* 0x370C */ f32 mFwd1Fade; + /* 0x3710 */ f32 mFwdFade2; + /* 0x3714 */ u8 mStatus; +}; + +struct SNOW_EFF { + SNOW_EFF(); + ~SNOW_EFF(); + + /* 0x00 */ u8 mStatus; + /* 0x04 */ cXyz mPos; + /* 0x10 */ cXyz mBasePos; + /* 0x1C */ f32 mPosWaveX; + /* 0x20 */ f32 mPosWaveZ; + /* 0x24 */ f32 mGravity; + /* 0x28 */ f32 mWindSpeed; + /* 0x2C */ f32 mScale; + /* 0x30 */ u8 field_0x30[0x34 - 0x30]; + /* 0x34 */ s16 mTimer; +}; + +class dKankyo_snow_Packet : public J3DPacket { +public: + dKankyo_snow_Packet() {} + + virtual void draw(); + virtual ~dKankyo_snow_Packet(); + + /* 0x0010 */ u8* mpTexture; + /* 0x0014 */ SNOW_EFF mEff[250]; + /* 0x36C4 */ cXyz mOldEyePos; + /* 0x36D0 */ f32 field_0x36d0; + /* 0x36D4 */ f32 field_0x36d4; + /* 0x36D8 */ s16 mEffCount; + /* 0x36DA */ s16 mTamariStart; +}; + +struct STAR_EFF { + STAR_EFF(); + ~STAR_EFF(); + + /* 0x00 */ u8 field_0x00[0x1C - 0x00]; + /* 0x1C */ f32 mAnimCounter; + /* 0x20 */ u8 field_0x20[0x28 - 0x20]; + /* 0x28 */ f32 mSin; + /* 0x2C */ u8 field_0x2c[0x34 - 0x2C]; +}; + +class dKankyo_star_Packet : public J3DPacket { +public: + dKankyo_star_Packet() {} + + virtual void draw(); + virtual ~dKankyo_star_Packet(); + + /* 0x10 */ u8* field_0x10; + /* 0x14 */ STAR_EFF mStarEff[1]; + /* 0x48 */ s16 mCount; +}; + +struct POISON_EFF { + POISON_EFF(); + ~POISON_EFF(); + + /* 0x0 */ u8 field_0x0[0x30]; +}; + +class dKankyo_poison_Packet : public J3DPacket { +public: + dKankyo_poison_Packet() {} + + virtual void draw(); + virtual ~dKankyo_poison_Packet(); + + /* 0x0010 */ POISON_EFF mPoisonEff[1000]; + /* 0xBB90 */ u8 field_0xbb90[0xBB9C - 0xBB90]; + /* 0xBB9C */ cXyz field_0xbb9c; + /* 0xBBA8 */ u8 field_0xbba8[0xBBAC - 0xBBA8]; + /* 0xBBAC */ u8* field_0xbbac; +}; + +struct CLOUD_EFF { + CLOUD_EFF(); + ~CLOUD_EFF(); + + /* 0x00 */ u8 mStatus; + /* 0x04 */ cXyz mPos; + /* 0x10 */ cXyz mBasePos; + /* 0x1C */ cXyz mPntWindVel; + /* 0x28 */ cXyz mVelRndm; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 mWindSpeed; + /* 0x3C */ s16 mAnimCounter; + /* 0x40 */ f32 mAlpha; + /* 0x44 */ f32 mSize; + /* 0x48 */ f32 mInitialSize; +}; + +class dKankyo_cloud_Packet : public J3DPacket { +public: + dKankyo_cloud_Packet() {} + + virtual void draw(); + virtual ~dKankyo_cloud_Packet(); + + /* 0x0010 */ u8* mpTexture; + /* 0x0014 */ int mCount; + /* 0x0018 */ CLOUD_EFF mEff[100]; +}; + +struct HOUSI_EFF { + HOUSI_EFF(); + ~HOUSI_EFF(); + + /* 0x00 */ u8 mState; + /* 0x04 */ cXyz mPos; + /* 0x10 */ cXyz mBasePos; + /* 0x1C */ cXyz mVel; + /* 0x28 */ cXyz mScale; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ u8 field_0x38[0x3C - 0x38]; + /* 0x3C */ s16 field_0x3c; + /* 0x3E */ u8 field_0x3E[0x40 - 0x3E]; + /* 0x40 */ f32 mAlpha; + /* 0x44 */ u8 field_0x44[0x48 - 0x44]; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ s16 field_0x4c; +}; + +class dKankyo_housi_Packet : public J3DPacket { +public: + dKankyo_housi_Packet() {} + + virtual void draw(); + virtual ~dKankyo_housi_Packet(); + + /* 0x0010 */ u8* mpTex; + /* 0x0014 */ HOUSI_EFF mEff[300]; + /* 0x5DD4 */ u8 field_0x5DD4[0x5DDC - 0x5DD4]; + /* 0x5DDC */ f32 field_0x5ddc; + /* 0x5DE0 */ s16 mCount; + /* 0x5DE2 */ u8 field_0x5de2[0x5DE8 - 0x5DE2]; +}; + +struct VRKUMO_EFF { + VRKUMO_EFF(); + ~VRKUMO_EFF(); + + /* 0x00 */ u8 mStatus; + /* 0x01 */ u8 field_0x01[0x04 - 0x01]; + /* 0x04 */ cXyz mPosition; + /* 0x10 */ u8 field_0x10[0x1C - 0x10]; + /* 0x1C */ f32 mHeight; + /* 0x20 */ f32 mAlpha; + /* 0x24 */ f32 mDistFalloff; + /* 0x28 */ f32 mSpeed; +}; + +class dKankyo_vrkumo_Packet : public J3DPacket { +public: + dKankyo_vrkumo_Packet() {} + + virtual void draw(); + virtual ~dKankyo_vrkumo_Packet(); + + /* 0x0010 */ GXColor mColorTmp; + /* 0x0014 */ u8* mpCloudTx1; + /* 0x0018 */ u8* mpCloudTx2; + /* 0x001C */ u8* mpCloudTx3; + /* 0x0020 */ VRKUMO_EFF mInst[100]; +}; + +struct WAVE_EFF { + WAVE_EFF(); + ~WAVE_EFF(); + + /* 0x00 */ cXyz mPos; + /* 0x0C */ cXyz mBasePos; + /* 0x18 */ f32 mSpeed; + /* 0x1C */ f32 mScale; + /* 0x20 */ f32 mCounterSpeed; + /* 0x24 */ f32 mCounter; + /* 0x28 */ f32 mStrengthWind; + /* 0x2C */ f32 mStrengthEnv; + /* 0x30 */ s16 field_0x30; + /* 0x32 */ s16 field_0x32; + /* 0x34 */ u8 mState; +}; + +class dKankyo_wave_Packet : public J3DPacket { +public: + dKankyo_wave_Packet() {} + + virtual void draw(); + virtual ~dKankyo_wave_Packet(); + + /* 0x0010 */ u8* mpTexUsonami; + /* 0x0014 */ u8* mpTexUsonamiM; + /* 0x0018 */ WAVE_EFF mpWaveEff[300]; + /* 0x41B8 */ f32 mSkewWidth; + /* 0x41BC */ f32 mSkewDir; +}; + +struct KAMOME_EFF { + KAMOME_EFF(); + ~KAMOME_EFF(); + + /* 0x00 */ JPABaseEmitter* mpBaseEmitter; + /* 0x04 */ cXyz mPos; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ u8 field_0x18[0x1E - 0x18]; + /* 0x1E */ u8 field_0x1e; +}; + +struct WIND_EFF { + WIND_EFF(); + ~WIND_EFF(); + + /* 0x00 */ JPABaseEmitter* mpEmitter; + /* 0x04 */ cXyz mBasePos; + /* 0x10 */ cXyz mRandomPos; + /* 0x1C */ f32 mStateTimer; + /* 0x20 */ f32 mAlpha; + /* 0x24 */ int mState; + /* 0x28 */ int field_0x28; + /* 0x2C */ s16 field_0x2c; + /* 0x2E */ s16 mAngleY; + /* 0x30 */ s16 mAngleXZ; + /* 0x32 */ u8 field_0x32; +}; + +// is this the correct name? +struct WINDEFF_SET { + /* 0x000 */ WIND_EFF mWindEff[30]; + /* 0x618 */ KAMOME_EFF mKamomeEff[10]; + /* 0x758 */ u8 mbHasCustomWindPower; + /* 0x759 */ u8 field_0x759; +}; + void dKyw_wether_proc(); void dKyw_rain_set(int); void dKyw_wind_set(); +void dKyw_wind_init(); +void dKyw_pntwind_init(); void dKy_wave_chan_init(); +f32 dKyw_get_wind_pow(); +f32* dKyw_get_wind_power(); +void squal_proc(); +void dKyw_pntwind_set(WIND_INFLUENCE*); +void dKyw_pntwind_cut(WIND_INFLUENCE*); #endif /* D_KANKYO_WETHER_H */ \ No newline at end of file diff --git a/include/d/d_save.h b/include/d/d_save.h index 30f2a6670..8fe301f3a 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -39,6 +39,10 @@ public: void setDate(u16 i_date) { mDate = i_date; } void setTime(f32 i_time) { mTime = i_time; } s64 getDateIpl() const { return mDateIPL; } + s16 getWindY() { return mTactWindAngleY; } + s16 getWindX() { return mTactWindAngleX; } + void setWindY(s16 i_windY) { mTactWindAngleY = i_windY; } + void setWindX(s16 i_windX) { mTactWindAngleX = i_windX; } /* 0x00 */ u64 mDateIPL; /* 0x08 */ f32 field_0x8; diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 4e145ffd0..341661a52 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -956,4 +956,12 @@ inline s32 dStage_sclsInfo_getWipe(stage_scls_info_class* p_info) { return p_info->mWipe; } +inline int dStage_FileList_dt_ChkPathWindEffect(dStage_FileList_dt_c* i_fili) { + return i_fili->mParam & 0x100000; +} + +inline int dStage_FileList_dt_GlobalWindLevel(dStage_FileList_dt_c* i_fili) { + return (i_fili->mParam >> 0x12) & 3; +} + #endif /* D_D_STAGE_H */ \ No newline at end of file diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index d608288e6..b76f75646 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -82,4 +82,8 @@ inline void mDoAud_setWeekday(s32 day) { mDoAud_zelAudio_c::getInterface()->setWeekday(day); } +inline void mDoAud_rainPlay(s32 param_0) { + mDoAud_zelAudio_c::getInterface()->rainPlay(param_0); +} + #endif /* M_DO_AUDIO_H */ diff --git a/src/d/d_kankyo_wether.cpp b/src/d/d_kankyo_wether.cpp index 3224f864f..6cfe103bd 100644 --- a/src/d/d_kankyo_wether.cpp +++ b/src/d/d_kankyo_wether.cpp @@ -3,566 +3,1397 @@ // Translation Unit: d_kankyo_wether.cpp // -#include "d_kankyo_wether.h" -#include "dolphin/types.h" +#include "d/d_kankyo_wether.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo.h" +#include "d/d_kankyo_rain.h" +#include "f_op/f_op_camera_mng.h" +#include "m_Do/m_Do_audio.h" /* 80086F74-80086FC4 .text dKyw_setDrawPacketList__FP9J3DPacketi */ -void dKyw_setDrawPacketList(J3DPacket*, int) { - /* Nonmatching */ +J3DPacket* dKyw_setDrawPacketList(J3DPacket* i_packet, int) { + if (i_packet == NULL) { + return NULL; + } else { + dComIfGd_getListFilter()->entryImm(i_packet, 0); + return i_packet; + } } /* 80086FC4-80087054 .text dKyw_setDrawPacketListSky__FP9J3DPacketi */ -void dKyw_setDrawPacketListSky(J3DPacket*, int) { - /* Nonmatching */ +J3DPacket* dKyw_setDrawPacketListSky(J3DPacket* i_packet, int i_type) { + if (i_packet == NULL) { + return NULL; + } else { + dComIfGd_setListSky(); + j3dSys.getDrawBuffer(i_type)->entryImm(i_packet, 0); + dComIfGd_setList(); + return i_packet; + } } /* 80087054-800870DC .text dKyw_setDrawPacketListXluBg__FP9J3DPacketi */ -void dKyw_setDrawPacketListXluBg(J3DPacket*, int) { - /* Nonmatching */ +J3DPacket* dKyw_setDrawPacketListXluBg(J3DPacket* i_packet, int i_type) { + if (i_packet == NULL) { + return NULL; + } else { + dComIfGd_setXluListBG(); + j3dSys.getDrawBuffer(i_type)->entryImm(i_packet, 0); + dComIfGd_setList(); + return i_packet; + } } /* 800870DC-80087130 .text dKyw_setDrawPacketListXluZPos__FP9J3DPacketP4cXyz */ -void dKyw_setDrawPacketListXluZPos(J3DPacket*, cXyz*) { - /* Nonmatching */ +J3DPacket* dKyw_setDrawPacketListXluZPos(J3DPacket* i_packet, cXyz* param_1) { + if (i_packet == NULL) { + return NULL; + } else { + dComIfGd_entryZSortXluList(i_packet, *param_1); + return i_packet; + } } /* 80087130-80087168 .text draw__18dKankyo_sun_PacketFv */ void dKankyo_sun_Packet::draw() { - /* Nonmatching */ + dKyr_drawSun(j3dSys.getViewMtx(), mPos, mColor, mpTextureData); } /* 80087168-800871A0 .text draw__22dKankyo_sunlenz_PacketFv */ void dKankyo_sunlenz_Packet::draw() { - /* Nonmatching */ + dKyr_drawLenzflare(j3dSys.getViewMtx(), mPositions, mColorTmp, &mpTexSnow01); } /* 800871A0-800871DC .text __dt__8RAIN_EFFFv */ -RAIN_EFF::~RAIN_EFF() { - /* Nonmatching */ -} +RAIN_EFF::~RAIN_EFF() {} /* 800871DC-800871E0 .text __ct__8RAIN_EFFFv */ -RAIN_EFF::RAIN_EFF() { - /* Nonmatching */ -} +RAIN_EFF::RAIN_EFF() {} /* 800871E0-80087228 .text draw__19dKankyo_rain_PacketFv */ void dKankyo_rain_Packet::draw() { - /* Nonmatching */ + dKyr_drawSibuki(j3dSys.getViewMtx(), &mpTxSnow01); + dKyr_drawRain(j3dSys.getViewMtx(), &mpTxSnow01); } /* 80087228-80087264 .text __dt__8SNOW_EFFFv */ -SNOW_EFF::~SNOW_EFF() { - /* Nonmatching */ -} +SNOW_EFF::~SNOW_EFF() {} /* 80087264-80087268 .text __ct__8SNOW_EFFFv */ -SNOW_EFF::SNOW_EFF() { - /* Nonmatching */ -} +SNOW_EFF::SNOW_EFF() {} /* 80087268-80087298 .text draw__19dKankyo_snow_PacketFv */ void dKankyo_snow_Packet::draw() { - /* Nonmatching */ + dKyr_drawSnow(j3dSys.getViewMtx(), &mpTexture); } /* 80087298-800872D4 .text __dt__8STAR_EFFFv */ -STAR_EFF::~STAR_EFF() { - /* Nonmatching */ -} +STAR_EFF::~STAR_EFF() {} /* 800872D4-800872D8 .text __ct__8STAR_EFFFv */ -STAR_EFF::STAR_EFF() { - /* Nonmatching */ -} +STAR_EFF::STAR_EFF() {} /* 800872D8-80087308 .text draw__19dKankyo_star_PacketFv */ void dKankyo_star_Packet::draw() { - /* Nonmatching */ + dKyr_drawStar(j3dSys.getViewMtx(), &field_0x10); } /* 80087308-80087344 .text __dt__10POISON_EFFFv */ -POISON_EFF::~POISON_EFF() { - /* Nonmatching */ -} +POISON_EFF::~POISON_EFF() {} /* 80087344-80087348 .text __ct__10POISON_EFFFv */ -POISON_EFF::POISON_EFF() { - /* Nonmatching */ -} +POISON_EFF::POISON_EFF() {} /* 80087348-8008737C .text draw__21dKankyo_poison_PacketFv */ void dKankyo_poison_Packet::draw() { - /* Nonmatching */ + drawPoison(j3dSys.getViewMtx(), &field_0xbbac); } /* 8008737C-800873B8 .text __dt__9CLOUD_EFFFv */ -CLOUD_EFF::~CLOUD_EFF() { - /* Nonmatching */ -} +CLOUD_EFF::~CLOUD_EFF() {} /* 800873B8-800873BC .text __ct__9CLOUD_EFFFv */ -CLOUD_EFF::CLOUD_EFF() { - /* Nonmatching */ -} +CLOUD_EFF::CLOUD_EFF() {} /* 800873BC-800873EC .text draw__20dKankyo_cloud_PacketFv */ void dKankyo_cloud_Packet::draw() { - /* Nonmatching */ + drawCloudShadow(j3dSys.getViewMtx(), &mpTexture); } /* 800873EC-80087428 .text __dt__9HOUSI_EFFFv */ -HOUSI_EFF::~HOUSI_EFF() { - /* Nonmatching */ -} +HOUSI_EFF::~HOUSI_EFF() {} /* 80087428-8008742C .text __ct__9HOUSI_EFFFv */ -HOUSI_EFF::HOUSI_EFF() { - /* Nonmatching */ -} +HOUSI_EFF::HOUSI_EFF() {} /* 8008742C-8008745C .text draw__20dKankyo_housi_PacketFv */ void dKankyo_housi_Packet::draw() { - /* Nonmatching */ + dKyr_drawHousi(j3dSys.getViewMtx(), &mpTex); } /* 8008745C-80087498 .text __dt__10VRKUMO_EFFFv */ -VRKUMO_EFF::~VRKUMO_EFF() { - /* Nonmatching */ -} +VRKUMO_EFF::~VRKUMO_EFF() {} /* 80087498-8008749C .text __ct__10VRKUMO_EFFFv */ -VRKUMO_EFF::VRKUMO_EFF() { - /* Nonmatching */ -} +VRKUMO_EFF::VRKUMO_EFF() {} /* 8008749C-800874D0 .text draw__21dKankyo_vrkumo_PacketFv */ void dKankyo_vrkumo_Packet::draw() { - /* Nonmatching */ + drawVrkumo(j3dSys.getViewMtx(), mColorTmp, &mpCloudTx1); } /* 800874D0-8008750C .text __dt__8WAVE_EFFFv */ -WAVE_EFF::~WAVE_EFF() { - /* Nonmatching */ -} +WAVE_EFF::~WAVE_EFF() {} /* 8008750C-80087510 .text __ct__8WAVE_EFFFv */ -WAVE_EFF::WAVE_EFF() { - /* Nonmatching */ -} +WAVE_EFF::WAVE_EFF() {} /* 80087510-80087540 .text draw__19dKankyo_wave_PacketFv */ void dKankyo_wave_Packet::draw() { - /* Nonmatching */ + drawWave(j3dSys.getViewMtx(), &mpTexUsonami); } /* 80087540-80087570 .text dKyw_drawSun__Fi */ -void dKyw_drawSun(int) { - /* Nonmatching */ +void dKyw_drawSun(int i_type) { + dKyw_setDrawPacketListSky(g_env_light.mpSunPacket, i_type); } /* 80087570-80087594 .text dKyw_Sun_Draw__Fv */ void dKyw_Sun_Draw() { - /* Nonmatching */ + dKyw_drawSun(1); } /* 80087594-800875D8 .text dKyw_drawSunlenz__Fi */ -void dKyw_drawSunlenz(int) { - /* Nonmatching */ +void dKyw_drawSunlenz(int i_type) { + if (!g_env_light.mpSunlenzPacket->mbDrawLenzInSky) { + dKyw_setDrawPacketList(g_env_light.mpSunlenzPacket, i_type); + } else { + dKyw_setDrawPacketListSky(g_env_light.mpSunlenzPacket, i_type); + } } /* 800875D8-800875FC .text dKyw_Sunlenz_Draw__Fv */ void dKyw_Sunlenz_Draw() { - /* Nonmatching */ + dKyw_drawSunlenz(1); } /* 800875FC-8008762C .text dKyw_drawRain__Fi */ -void dKyw_drawRain(int) { - /* Nonmatching */ +void dKyw_drawRain(int i_type) { + dKyw_setDrawPacketList(g_env_light.mpRainPacket, i_type); } /* 8008762C-80087650 .text dKyw_Rain_Draw__Fv */ void dKyw_Rain_Draw() { - /* Nonmatching */ + dKyw_drawRain(1); } /* 80087650-80087680 .text dKyw_drawSnow__Fi */ -void dKyw_drawSnow(int) { - /* Nonmatching */ +void dKyw_drawSnow(int i_type) { + dKyw_setDrawPacketList(g_env_light.mpSnowPacket, i_type); } /* 80087680-800876A4 .text dKyw_Snow_Draw__Fv */ void dKyw_Snow_Draw() { - /* Nonmatching */ + dKyw_drawSnow(1); } /* 800876A4-800876D4 .text dKyw_drawStar__Fi */ -void dKyw_drawStar(int) { - /* Nonmatching */ +void dKyw_drawStar(int i_type) { + dKyw_setDrawPacketListSky(g_env_light.mpStarPacket, i_type); } /* 800876D4-800876F8 .text dKyw_Star_Draw__Fv */ void dKyw_Star_Draw() { - /* Nonmatching */ + dKyw_drawStar(1); } /* 800876F8-8008772C .text dKyw_drawPoison__Fi */ -void dKyw_drawPoison(int) { - /* Nonmatching */ +void dKyw_drawPoison(int i_type) { + dKyw_setDrawPacketListXluZPos(g_env_light.mpPoisonPacket, + &g_env_light.mpPoisonPacket->field_0xbb9c); } /* 8008772C-80087750 .text dKyw_Poison_Draw__Fv */ void dKyw_Poison_Draw() { - /* Nonmatching */ + dKyw_drawPoison(1); } /* 80087750-80087780 .text dKyw_drawHousi__Fi */ -void dKyw_drawHousi(int) { - /* Nonmatching */ +void dKyw_drawHousi(int i_type) { + dKyw_setDrawPacketList(g_env_light.mpHousiPacket, i_type); } /* 80087780-800877A4 .text dKyw_Housi_Draw__Fv */ void dKyw_Housi_Draw() { - /* Nonmatching */ + dKyw_drawHousi(1); } /* 800877A4-800877D4 .text dKyw_drawCloud__Fi */ -void dKyw_drawCloud(int) { - /* Nonmatching */ +void dKyw_drawCloud(int i_type) { + dKyw_setDrawPacketList(g_env_light.mpMoyaPacket, i_type); } /* 800877D4-800877F8 .text dKyw_Cloud_Draw__Fv */ void dKyw_Cloud_Draw() { - /* Nonmatching */ + dKyw_drawCloud(1); } /* 800877F8-80087828 .text dKyw_drawVrkumo__Fi */ -void dKyw_drawVrkumo(int) { - /* Nonmatching */ +void dKyw_drawVrkumo(int i_type) { + dKyw_setDrawPacketListSky(g_env_light.mpVrkumoPacket, i_type); } /* 80087828-8008784C .text dKyw_Vrkumo_Draw__Fv */ void dKyw_Vrkumo_Draw() { - /* Nonmatching */ + dKyw_drawVrkumo(1); } /* 8008784C-8008787C .text dKyw_drawWave__Fi */ -void dKyw_drawWave(int) { - /* Nonmatching */ +void dKyw_drawWave(int i_type) { + dKyw_setDrawPacketListXluBg(g_env_light.mpWavePacket, i_type); } /* 8008787C-800878A0 .text dKyw_Wave_Draw__Fv */ void dKyw_Wave_Draw() { - /* Nonmatching */ + dKyw_drawWave(1); } /* 800878A0-8008792C .text dKyw_wether_init__Fv */ void dKyw_wether_init() { - /* Nonmatching */ + g_env_light.mbSunInitialized = false; + g_env_light.mThunderEff.mStatus = 0; + g_env_light.mThunderEff.mMode = 0; + g_env_light.mbRainInitialized = false; + g_env_light.mRainCount = 0; + g_env_light.mbSnowInitialized = false; + g_env_light.mSnowCount = 0; + g_env_light.mbStarInitialized = false; + g_env_light.mStarCount = 0; + g_env_light.mStarCountTarget = 0.0f; + g_env_light.mMoyaInitialized = false; + g_env_light.mMoyaCount = 0; + g_env_light.mMoyaMode = 0; + g_env_light.mbHousiInitialized = false; + g_env_light.mHousiCount = 0; + g_env_light.mbPoisonInitialized = false; + g_env_light.mPoisonCount = 0; + g_env_light.mWind.mCustomWindPower = 0.0f; + g_env_light.mWaveInitialized = false; + g_env_light.field_0xa1c = 0; + g_env_light.mbWindlineInitialized = false; + g_env_light.mWindlineCount = 0; + dKyw_wind_init(); + dKyw_pntwind_init(); } /* 8008792C-80087944 .text dKyw_wether_init2__Fv */ void dKyw_wether_init2() { - /* Nonmatching */ + g_env_light.mVrkumoStatus = 0; + g_env_light.mVrkumoCount = 0; } /* 80087944-80087C28 .text dKyw_wether_delete__Fv */ void dKyw_wether_delete() { - /* Nonmatching */ + if (g_env_light.mbSunInitialized) { + delete g_env_light.mpSunPacket; + delete g_env_light.mpSunlenzPacket; + } + + if (g_env_light.mbRainInitialized) { + delete g_env_light.mpRainPacket; + } + + if (g_env_light.mbSnowInitialized) { + delete g_env_light.mpSnowPacket; + } + + if (g_env_light.mbStarInitialized) { + delete g_env_light.mpStarPacket; + } + + if (g_env_light.mbPoisonInitialized) { + delete g_env_light.mpPoisonPacket; + } + + if (g_env_light.mbHousiInitialized) { + delete g_env_light.mpHousiPacket; + } + + if (g_env_light.mMoyaInitialized) { + delete g_env_light.mpMoyaPacket; + } + + if (g_env_light.mWaveInitialized) { + delete g_env_light.mpWavePacket; + } + + if (g_env_light.mbWindlineInitialized) { + WINDEFF_SET* wind_p = g_env_light.mpWind; + for (int i = 0; i < 30; i++) { + if (wind_p->mWindEff[i].mpEmitter != NULL) { + wind_p->mWindEff[i].mpEmitter->deleteAllParticle(); + wind_p->mWindEff[i].mpEmitter->becomeInvalidEmitter(); + wind_p->mWindEff[i].mpEmitter = NULL; + } + } + + for (int i = 0; i < 2; i++) { + if (wind_p->mKamomeEff[i].mpBaseEmitter != NULL) { + wind_p->mKamomeEff[i].mpBaseEmitter->deleteAllParticle(); + wind_p->mKamomeEff[i].mpBaseEmitter->becomeInvalidEmitter(); + wind_p->mKamomeEff[i].mpBaseEmitter = NULL; + } + } + + delete g_env_light.mpWind; + } } /* 80087C28-80087C64 .text __dt__8WIND_EFFFv */ -WIND_EFF::~WIND_EFF() { - /* Nonmatching */ -} +WIND_EFF::~WIND_EFF() {} /* 80087C64-80087CA0 .text __dt__10KAMOME_EFFFv */ -KAMOME_EFF::~KAMOME_EFF() { - /* Nonmatching */ -} +KAMOME_EFF::~KAMOME_EFF() {} /* 80087CA0-80087D24 .text __dt__19dKankyo_wave_PacketFv */ -dKankyo_wave_Packet::~dKankyo_wave_Packet() { - /* Nonmatching */ -} +dKankyo_wave_Packet::~dKankyo_wave_Packet() {} /* 80087D24-80087DA8 .text __dt__20dKankyo_cloud_PacketFv */ -dKankyo_cloud_Packet::~dKankyo_cloud_Packet() { - /* Nonmatching */ -} +dKankyo_cloud_Packet::~dKankyo_cloud_Packet() {} /* 80087DA8-80087E2C .text __dt__20dKankyo_housi_PacketFv */ -dKankyo_housi_Packet::~dKankyo_housi_Packet() { - /* Nonmatching */ -} +dKankyo_housi_Packet::~dKankyo_housi_Packet() {} /* 80087E2C-80087EB0 .text __dt__21dKankyo_poison_PacketFv */ -dKankyo_poison_Packet::~dKankyo_poison_Packet() { - /* Nonmatching */ -} +dKankyo_poison_Packet::~dKankyo_poison_Packet() {} /* 80087EB0-80087F34 .text __dt__19dKankyo_star_PacketFv */ -dKankyo_star_Packet::~dKankyo_star_Packet() { - /* Nonmatching */ -} +dKankyo_star_Packet::~dKankyo_star_Packet() {} /* 80087F34-80087FB8 .text __dt__19dKankyo_snow_PacketFv */ -dKankyo_snow_Packet::~dKankyo_snow_Packet() { - /* Nonmatching */ -} +dKankyo_snow_Packet::~dKankyo_snow_Packet() {} /* 80087FB8-8008803C .text __dt__19dKankyo_rain_PacketFv */ -dKankyo_rain_Packet::~dKankyo_rain_Packet() { - /* Nonmatching */ -} +dKankyo_rain_Packet::~dKankyo_rain_Packet() {} /* 8008803C-800880C0 .text __dt__22dKankyo_sunlenz_PacketFv */ -dKankyo_sunlenz_Packet::~dKankyo_sunlenz_Packet() { - /* Nonmatching */ -} +dKankyo_sunlenz_Packet::~dKankyo_sunlenz_Packet() {} /* 800880C0-80088144 .text __dt__18dKankyo_sun_PacketFv */ -dKankyo_sun_Packet::~dKankyo_sun_Packet() { - /* Nonmatching */ -} +dKankyo_sun_Packet::~dKankyo_sun_Packet() {} /* 80088144-80088194 .text dKyw_wether_delete2__Fv */ void dKyw_wether_delete2() { - /* Nonmatching */ + if (g_env_light.mVrkumoStatus != 0) { + delete g_env_light.mpVrkumoPacket; + } } /* 80088194-80088218 .text __dt__21dKankyo_vrkumo_PacketFv */ -dKankyo_vrkumo_Packet::~dKankyo_vrkumo_Packet() { - /* Nonmatching */ -} +dKankyo_vrkumo_Packet::~dKankyo_vrkumo_Packet() {} /* 80088218-800883D4 .text wether_move_windline__Fv */ void wether_move_windline() { - /* Nonmatching */ + dStage_FileList_dt_c* fili_p = NULL; + + int roomNo = dComIfGp_roomControl_getStayNo(); + if (roomNo >= 0) { + fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + } + + g_env_light.mWindlineCount = 0; + + if (fili_p != NULL && dStage_FileList_dt_ChkPathWindEffect(fili_p) && + strcmp(dComIfGp_getStartStageName(), "GTower") != 0) + { + g_env_light.mWindlineCount = dKyw_get_wind_pow() * 10.0f; + } + + if (g_env_light.mWind.field_0x8.y < 10000000.0f) { + g_env_light.mWindlineCount = 0; + g_env_light.mWind.field_0x8.y = 10000000.0f; + } + + switch (g_env_light.mbWindlineInitialized) { + case 0: + if (g_env_light.mWindlineCount != 0) { + g_env_light.mpWind = new (0x20) WINDEFF_SET(); + + if (g_env_light.mpWind == NULL) { + return; + } + + for (int i = 0; i < 30; i++) { + g_env_light.mpWind->mWindEff[i].mState = 0; + g_env_light.mpWind->mWindEff[i].mpEmitter = NULL; + } + + dKyr_wind_init(); + dKyr_wind_move(); + g_env_light.mbWindlineInitialized = true; + } + break; + case 1: + dKyr_wind_move(); + break; + } } /* 800883D4-800883D8 .text __ct__10KAMOME_EFFFv */ -KAMOME_EFF::KAMOME_EFF() { - /* Nonmatching */ -} +KAMOME_EFF::KAMOME_EFF() {} /* 800883D8-800883DC .text __ct__8WIND_EFFFv */ -WIND_EFF::WIND_EFF() { - /* Nonmatching */ -} +WIND_EFF::WIND_EFF() {} /* 800883DC-80088444 .text wether_move_thunder__Fv */ void wether_move_thunder() { - /* Nonmatching */ + switch (g_env_light.mThunderEff.mStatus) { + case 0: + if (g_env_light.mThunderEff.mMode != 0) { + dKyr_thunder_init(); + g_env_light.mThunderEff.mStatus = true; + } + break; + case 1: + dKyr_thunder_move(); + break; + } } /* 80088444-80088468 .text dKyw_wether_move__Fv */ void dKyw_wether_move() { - /* Nonmatching */ + wether_move_thunder(); + wether_move_windline(); } /* 80088468-8008878C .text wether_move_sun__Fv */ void wether_move_sun() { - /* Nonmatching */ + if (dComIfGp_checkStatus(1) && !g_env_light.mbVrboxInvisible) { + switch (g_env_light.mbSunInitialized) { + case 0: + g_env_light.mpSunPacket = new (0x20) dKankyo_sun_Packet(); + g_env_light.mpSunlenzPacket = new (0x20) dKankyo_sunlenz_Packet(); + + if (g_env_light.mpSunPacket != NULL && g_env_light.mpSunlenzPacket != NULL) { + g_env_light.mpSunPacket->mpTextureData[0] = + (u8*)dComIfG_getObjectRes("Always", 0x87); + g_env_light.mpSunPacket->mpTextureData[1] = + (u8*)dComIfG_getObjectRes("Always", 0x88); + g_env_light.mpSunPacket->mpTextureData[2] = + (u8*)dComIfG_getObjectRes("Always", 0x89); + g_env_light.mpSunPacket->mpTextureData[3] = + (u8*)dComIfG_getObjectRes("Always", 0x8A); + g_env_light.mpSunPacket->mpTextureData[4] = + (u8*)dComIfG_getObjectRes("Always", 0x86); + g_env_light.mpSunPacket->field_0x3c = 0; + g_env_light.mpSunPacket->field_0x3d = 0; + g_env_light.mpSunPacket->mVisibility = 0.0f; + g_env_light.mpSunPacket->mSunAlpha = 0.0f; + g_env_light.mpSunPacket->mMoonAlpha = 0.0f; + g_env_light.mpSunPacket->mVizChkData[0] = 0; + g_env_light.mpSunPacket->mVizChkData[1] = 0; + g_env_light.mpSunPacket->mVizChkData[2] = 0; + g_env_light.mpSunPacket->mVizChkData[3] = 0; + + g_env_light.mpSunlenzPacket->mpTexSnow01 = + (u8*)dComIfG_getObjectRes("Always", 0x81); + g_env_light.mpSunlenzPacket->mpTexLensHalf = + (u8*)dComIfG_getObjectRes("Always", 0x82); + g_env_light.mpSunlenzPacket->mpTexRingHalf = + (u8*)dComIfG_getObjectRes("Always", 0x85); + g_env_light.mpSunlenzPacket->field_0x88 = 1000000000.0f; + g_env_light.mpSunlenzPacket->field_0x8c = 0.0f; + g_env_light.mpSunlenzPacket->mDistFalloff = 0.0f; + g_env_light.mpSunlenzPacket->mbDrawLenzInSky = false; + + dKyr_sun_move(); + dKyr_lenzflare_move(); + g_env_light.mbSunInitialized = true; + } + break; + case 1: + dKyr_sun_move(); + dKyr_lenzflare_move(); + break; + } + } } /* 8008878C-80088978 .text wether_move_rain__Fv */ void wether_move_rain() { - /* Nonmatching */ + switch (g_env_light.mbRainInitialized) { + case 0: + if (g_env_light.mRainCount != 0) { + g_env_light.mpRainPacket = new (0x20) dKankyo_rain_Packet(); + if (g_env_light.mpRainPacket == NULL) { + return; + } + + dKyr_rain_init(); + dKyr_rain_move(); + g_env_light.mbRainInitialized = true; + + if (g_env_light.mRainCount != 250) { + mDoAud_seStart(JA_SE_ATM_RAIN_START, NULL, 0, 0); + } + } + break; + case 1: + dKyr_rain_move(); + + if (g_env_light.mSnowCount == 0) { + if (g_env_light.mRainCount < 125.0f) { + mDoAud_rainPlay(0); + } else { + mDoAud_rainPlay(1); + } + } + + if (g_env_light.mRainCount == 0) { + g_env_light.mbRainInitialized = false; + mDoAud_seStart(JA_SE_ATM_RAIN_END, NULL, 0, 0); + delete g_env_light.mpRainPacket; + } + break; + } } /* 80088978-80088A50 .text wether_move_snow__Fv */ void wether_move_snow() { - /* Nonmatching */ + switch (g_env_light.mbSnowInitialized) { + case 0: + if (g_env_light.mSnowCount != 0) { + dKyr_snow_init(); + + if (g_env_light.mpSnowPacket == NULL) { + return; + } + + if (strcmp(dComIfGp_getStartStageName(), "Adanmae") != 0) { + dKyr_snow_move(); + } else { + dKyr_kazanbai_move(); + } + + g_env_light.mbSnowInitialized = true; + } + break; + case 1: + if (strcmp(dComIfGp_getStartStageName(), "Adanmae") != 0) { + dKyr_snow_move(); + } else { + dKyr_kazanbai_move(); + } + break; + } } /* 80088A50-80088D08 .text wether_move_star__Fv */ void wether_move_star() { - /* Nonmatching */ + if (dComIfGp_checkStatus(1) && (!g_env_light.mbVrboxInvisible && + strcmp(dComIfGp_getStartStageName(), "M_DragB") != 0) || + strcmp(dComIfGp_getStartStageName(), "Name") == 0) + { + f32 time = g_env_light.getDaytime(); + f32 target; + + if (strcmp(dComIfGp_getStartStageName(), "Name") == 0) { + if (time >= 315.0f || time < 60.0f) { + target = 1.0f; + } else if (time > 270.0f) { + target = 1.0f - (315.0f - time) * (1 / 45.0f); + } else if (time < 75.0f) { + target = (75.0f - time) * (1 / 15.0f); + } else { + target = 0.0f; + } + } else if (time >= 330.0f || time < 90.0f) { + target = 1.0f; + } else if (time > 300.0f) { + target = 1.0f - (330.0f - time) * (1 / 30.0f); + } else if (time < 105.0f) { + target = (105.0f - time) * (1 / 15.0f); + } else { + target = 0.0f; + } + + if (g_env_light.mColpatWeather != 0) { + target = 0.0f; + } + + if (g_env_light.mColpatCurr != 0 && g_env_light.mColPatBlend > 0.5f) { + target = 0.0f; + } + + cLib_addCalc(&g_env_light.mStarCountTarget, target, 0.1f, 0.01f, 0.000001f); + g_env_light.mStarCount = (s16)(g_env_light.mStarCountTarget * 1000.0f); + + switch (g_env_light.mbStarInitialized) { + case 0: + if (g_env_light.mStarCount != 0) { + dKyr_star_init(); + if (g_env_light.mpStarPacket == NULL) { + return; + } + + dKyr_star_move(); + g_env_light.mbStarInitialized = true; + } + break; + case 1: + dKyr_star_move(); + + if (g_env_light.mStarCount == 0) { + g_env_light.mbStarInitialized = false; + delete g_env_light.mpStarPacket; + } + break; + } + } } /* 80088D08-80088DA4 .text wether_move_poison__Fv */ void wether_move_poison() { - /* Nonmatching */ + if (strcmp(dComIfGp_getStartStageName(), "M_Dai") == 0) { + g_env_light.mPoisonCount = 500; + } + + switch (g_env_light.mbPoisonInitialized) { + case 0: + if (g_env_light.mPoisonCount != 0) { + poison_init(); + g_env_light.mbPoisonInitialized = true; + } + break; + case 1: + poison_move(); + break; + } } /* 80088DA4-80088F3C .text wether_move_housi__Fv */ void wether_move_housi() { - /* Nonmatching */ + switch (g_env_light.mbHousiInitialized) { + case 0: + if (g_env_light.mHousiCount != 0) { + g_env_light.mpHousiPacket = new (0x20) dKankyo_housi_Packet(); + if (g_env_light.mpHousiPacket == NULL) { + return; + } + + g_env_light.mpHousiPacket->mpTex = (u8*)dComIfG_getObjectRes("Always", 0x6D); + g_env_light.mpHousiPacket->field_0x5ddc = 0.0f; + + for (int i = 0; i < 300; i++) { + g_env_light.mpHousiPacket->mEff[i].mState = 0; + } + + dKyr_housi_move(); + g_env_light.mbHousiInitialized = true; + } + break; + case 1: + if (g_env_light.mHousiCount == 0 && g_env_light.mpHousiPacket->field_0x5ddc <= 0.0f) { + g_env_light.mbHousiInitialized = false; + delete g_env_light.mpHousiPacket; + } else { + dKyr_housi_move(); + g_env_light.mHousiCount = 0; + } + break; + } } /* 80088F3C-800891A8 .text wether_move_moya__Fv */ void wether_move_moya() { - /* Nonmatching */ + switch (g_env_light.mMoyaInitialized) { + case 0: + if (g_env_light.mMoyaCount != 0) { + g_env_light.mpMoyaPacket = new (0x20) dKankyo_cloud_Packet(); + if (g_env_light.mpMoyaPacket == NULL) { + return; + } + + g_env_light.mpMoyaPacket->mpTexture = (u8*)dComIfG_getObjectRes("Always", 0x84); + + for (int i = 0; i < 100; i++) { + g_env_light.mpMoyaPacket->mEff[i].mStatus = 0; + } + + g_env_light.mpMoyaPacket->mCount = 0; + cloud_shadow_move(); + g_env_light.mMoyaInitialized++; + } + break; + case 1: + if (g_env_light.mMoyaMode == 0 && dKyw_get_wind_pow() > 0.2f && g_env_light.mMoyaCount != 0) + { + if (strcmp(dComIfGp_getStartStageName(), "M_NewD2") == 0) { + if (g_env_light.mbVrboxInvisible) { + g_env_light.mMoyaSE = JA_SE_ATM_WIND_HOT; + } else { + g_env_light.mMoyaSE = JA_SE_ATM_WIND_1; + } + } + } else if (g_env_light.mMoyaMode == 1) { + g_env_light.mMoyaSE = JA_SE_ATM_WIND_HOT; + } else if (g_env_light.mMoyaMode == 2 && + strcmp(dComIfGp_getStartStageName(), "A_mori") == 0) + { + g_env_light.mMoyaSE = JA_SE_ATM_WIND_GRASS; + } + + cloud_shadow_move(); + if (g_env_light.mMoyaCount == 0 && g_env_light.mpMoyaPacket->mCount == 0) { + g_env_light.mMoyaInitialized = false; + delete g_env_light.mpMoyaPacket; + } + break; + } } /* 800891A8-80089698 .text wether_move_vrkumo__Fv */ +// NONMATCHING - almost, regswap void wether_move_vrkumo() { - /* Nonmatching */ + camera_class* camera_p = dComIfGp_getCamera(0); + static cXyz r09o(-180000.0f, 750.0f, -200000.0f); + + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { + if (dComIfGp_checkStatus(1) && !g_env_light.mbVrboxInvisible) { + g_env_light.mVrkumoCount = 50; + if ((g_env_light.mColpatCurr == 1 && g_env_light.mColPatBlend > 0.0f) || + (g_env_light.mColpatPrev == 1 && g_env_light.mColPatBlend < 1.0f) || + (g_env_light.mColpatCurr == 2 && g_env_light.mColPatBlend > 0.0f) || + (g_env_light.mColpatPrev == 2 && g_env_light.mColPatBlend < 1.0f)) + { + cLib_addCalc(&g_env_light.mVrkumoStrength, 1.0f, 0.1f, 0.003f, 0.0000001f); + } else { + cLib_addCalc(&g_env_light.mVrkumoStrength, 0.0f, 0.08f, 0.002f, 0.00000001f); + } + + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0 && + dComIfGp_roomControl_getStayNo() == 9) + { + if (camera_p->mLookat.mEye.abs(r09o) < 2500.0f) { + g_env_light.mVrkumoStrength = 1.0f; + } + } + + g_env_light.mVrkumoCount = (s16)(g_env_light.mVrkumoStrength * 50.0f + 50.0f); + if (strcmp(dComIfGp_getStartStageName(), "GTower") == 0) { + g_env_light.mVrkumoCount = 0; + } + } else { + g_env_light.mVrkumoCount = 0; + } + } else { + g_env_light.mVrkumoCount = 70; + } + + switch (g_env_light.mVrkumoStatus) { + case 0: + if (g_env_light.mVrkumoCount != 0) { + g_env_light.mpVrkumoPacket = new (0x20) dKankyo_vrkumo_Packet(); + if (g_env_light.mpVrkumoPacket == NULL) { + return; + } + + if (dComIfG_getStageRes("Stage", "vr_box.bmd") != NULL || + dComIfG_getStageRes("Stage", "vr_box.bdl")) + { + g_env_light.mpVrkumoPacket->mpCloudTx1 = + (u8*)dComIfG_getStageRes("Stage", "cloud_01.bti"); + g_env_light.mpVrkumoPacket->mpCloudTx2 = + (u8*)dComIfG_getStageRes("Stage", "cloud_02.bti"); + g_env_light.mpVrkumoPacket->mpCloudTx3 = + (u8*)dComIfG_getStageRes("Stage", "cloud_03.bti"); + } else { + g_env_light.mpVrkumoPacket->mpCloudTx1 = + (u8*)dComIfG_getStageRes("Stage", "cloudtx_01.bti"); + g_env_light.mpVrkumoPacket->mpCloudTx2 = + (u8*)dComIfG_getStageRes("Stage", "cloudtx_02.bti"); + g_env_light.mpVrkumoPacket->mpCloudTx3 = + (u8*)dComIfG_getStageRes("Stage", "cloudtx_03.bti"); + } + + if (g_env_light.mpVrkumoPacket->mpCloudTx1 == NULL) { + g_env_light.mVrkumoStatus = 99; + } + + for (int i = 0; i < 100; i++) { + g_env_light.mpVrkumoPacket->mInst[i].mStatus = 0; + } + + vrkumo_move(); + g_env_light.mVrkumoStatus++; + } + break; + case 1: + vrkumo_move(); + break; + } } /* 80089698-8008982C .text wether_move_wave__Fv */ void wether_move_wave() { - /* Nonmatching */ + switch (g_env_light.mWaveInitialized) { + case 0: + if (g_env_light.mWaveChan.mWaveCount != 0) { + g_env_light.mpWavePacket = new (0x20) dKankyo_wave_Packet(); + if (g_env_light.mpWavePacket == NULL) { + return; + } + + g_env_light.mpWavePacket->mpTexUsonami = (u8*)dComIfG_getObjectRes("Always", 0x8B); + g_env_light.mpWavePacket->mpTexUsonamiM = (u8*)dComIfG_getObjectRes("Always", 0x8C); + + for (int i = 0; i < 300; i++) { + g_env_light.mpWavePacket->mpWaveEff[i].mState = 0; + } + + wave_move(); + g_env_light.mWaveInitialized = true; + } + break; + case 1: + if (g_env_light.mWaveChan.mWaveCount == 0) { + g_env_light.mWaveInitialized = false; + delete g_env_light.mpWavePacket; + } + + wave_move(); + break; + } } /* 8008982C-800898E0 .text dKyw_wether_move_draw__Fv */ void dKyw_wether_move_draw() { - /* Nonmatching */ + g_env_light.mMoyaSE = 0; + + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { + wether_move_sun(); + wether_move_rain(); + wether_move_snow(); + } + + wether_move_star(); + + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { + wether_move_poison(); + wether_move_housi(); + wether_move_moya(); + } + + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { + wether_move_wave(); + } } /* 800898E0-80089900 .text dKyw_wether_move_draw2__Fv */ void dKyw_wether_move_draw2() { - /* Nonmatching */ + wether_move_vrkumo(); } /* 80089900-80089A48 .text dKyw_wether_draw__Fv */ void dKyw_wether_draw() { - /* Nonmatching */ + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { + if (g_env_light.mbPoisonInitialized) { + dKyw_Poison_Draw(); + } + + if (g_env_light.mWaveInitialized) { + dKyw_Wave_Draw(); + } + + if (g_env_light.mMoyaInitialized) { + dKyw_Cloud_Draw(); + } + } + + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0 && g_env_light.mbSunInitialized) { + dKyw_Sun_Draw(); + dKyw_Sunlenz_Draw(); + } + + if (g_env_light.mbStarInitialized) { + dKyw_Star_Draw(); + } + + if (strcmp(dComIfGp_getStartStageName(), "Name") != 0) { + if (g_env_light.mbRainInitialized) { + dKyw_Rain_Draw(); + } + + if (g_env_light.mbSnowInitialized) { + dKyw_Snow_Draw(); + } + + if (g_env_light.mbHousiInitialized) { + dKyw_Housi_Draw(); + } + } } /* 80089A48-80089A84 .text dKyw_wether_draw2__Fv */ void dKyw_wether_draw2() { - /* Nonmatching */ + if (g_env_light.mVrkumoStatus != 0 && g_env_light.mVrkumoStatus < 99) { + dKyw_Vrkumo_Draw(); + } } /* 80089A84-80089AA4 .text dKyw_wether_proc__Fv */ void dKyw_wether_proc() { - /* Nonmatching */ + squal_proc(); } /* 80089AA4-80089B48 .text dKyw_wind_init__Fv */ void dKyw_wind_init() { - /* Nonmatching */ + g_env_light.mWind.mWindVec.x = -1.0f; + g_env_light.mWind.mWindVec.y = 0.0f; + g_env_light.mWind.mWindVec.z = 0.0f; + g_env_light.mWind.mWindPower = 0.0f; + + if (dComIfGs_getWindX() == -1 && dComIfGs_getWindY() == -1) { + g_env_light.mWind.mTactWindAngleFlags = 0; + g_env_light.mWind.mTactWindAngleX = 0; + g_env_light.mWind.mTactWindAngleY = 0; + } else { + g_env_light.mWind.mTactWindAngleFlags = 1; + g_env_light.mWind.mTactWindAngleX = dComIfGs_getWindX(); + g_env_light.mWind.mTactWindAngleY = dComIfGs_getWindY(); + } + + g_env_light.mWind.mpWindVecOverride = NULL; + g_env_light.mWind.mWindStrengthOverride = 0.0f; + g_env_light.mWind.mEvtWindSet = 0; + g_env_light.mWind.field_0x8.x = 10000000.0f; + g_env_light.mWind.field_0x8.y = 10000000.0f; + g_env_light.mWind.field_0x8.z = 10000000.0f; } /* 80089B48-80089E50 .text dKyw_wind_set__Fv */ void dKyw_wind_set() { - /* Nonmatching */ + cXyz wind_vec; + f32 strength; + + if (g_env_light.mWind.mpWindVecOverride != NULL) { + wind_vec = *g_env_light.mWind.mpWindVecOverride; + strength = g_env_light.mWind.mWindStrengthOverride; + + cM_atan2s(wind_vec.x, wind_vec.z); + cM_atan2s(wind_vec.absXZ(), wind_vec.y); + } else { + dStage_FileList_dt_c* fili_p = NULL; + int wind_level = 0; + + s32 roomNo = dComIfGp_roomControl_getStayNo(); + if (roomNo >= 0) { + fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + } + + s16 tact_wind_x; + s16 tact_wind_y; + if (g_env_light.mWind.mEvtWindSet != 0 && g_env_light.mWind.mEvtWindSet != 0xFF) { + tact_wind_x = g_env_light.mWind.mEvtWindAngleX; + tact_wind_y = g_env_light.mWind.mEvtWindAngleY; + } else if (g_env_light.mWind.mTactWindAngleFlags != 0) { + tact_wind_x = g_env_light.mWind.mTactWindAngleX; + tact_wind_y = g_env_light.mWind.mTactWindAngleY; + } else { + tact_wind_x = 0; + tact_wind_y = 0; + } + + wind_vec.x = cM_scos(tact_wind_x) * cM_scos(tact_wind_y); + wind_vec.y = cM_ssin(tact_wind_x); + wind_vec.z = cM_scos(tact_wind_x) * cM_ssin(tact_wind_y); + + if (fili_p != NULL) { + wind_level = dStage_FileList_dt_GlobalWindLevel(fili_p); + } + + switch (wind_level) { + case 0: + strength = 0.3f; + break; + case 1: + strength = 0.6f; + break; + case 2: + strength = 0.9f; + break; + default: + strength = 0.0f; + break; + } + } + + if (g_env_light.mWind.mCustomWindPower > 0.0f) { + strength = g_env_light.mWind.mCustomWindPower; + g_env_light.mWind.mWindPower = g_env_light.mWind.mCustomWindPower; + } + + if (g_env_light.mWind.mEvtWindSet == 2) { + strength = 0.0f; + } + + if (strength > 1.0f) { + strength = 1.0f; + } + + if (g_env_light.mInitAnimTimer != 0) { + g_env_light.mWind.mWindVec = wind_vec; + g_env_light.mWind.mWindPower = strength; + } else { + cLib_addCalc(&g_env_light.mWind.mWindVec.x, wind_vec.x, 0.1f, 2.0f, 0.001f); + cLib_addCalc(&g_env_light.mWind.mWindVec.y, wind_vec.y, 0.1f, 2.0f, 0.001f); + cLib_addCalc(&g_env_light.mWind.mWindVec.z, wind_vec.z, 0.1f, 2.0f, 0.001f); + cLib_addCalc(&g_env_light.mWind.mWindPower, strength, 0.1f, 1.0f, 0.005f); + } } /* 80089E50-80089E60 .text dKyw_get_wind_vec__Fv */ -void dKyw_get_wind_vec() { - /* Nonmatching */ +cXyz* dKyw_get_wind_vec() { + return &g_env_light.mWind.mWindVec; } /* 80089E60-80089E70 .text dKyw_get_wind_pow__Fv */ -void dKyw_get_wind_pow() { - /* Nonmatching */ +f32 dKyw_get_wind_pow() { + return g_env_light.mWind.mWindPower; } /* 80089E70-80089E80 .text dKyw_get_wind_power__Fv */ -void dKyw_get_wind_power() { - /* Nonmatching */ +f32* dKyw_get_wind_power() { + return &g_env_light.mWind.mWindPower; } /* 80089E80-80089EE4 .text dKyw_get_wind_vecpow__Fv */ -void dKyw_get_wind_vecpow() { - /* Nonmatching */ +cXyz dKyw_get_wind_vecpow() { + cXyz vecpow = g_env_light.mWind.mWindVec * g_env_light.mWind.mWindPower; + return vecpow; } /* 80089EE4-80089FDC .text dKyw_squal_set__FP4cXyzssfffff */ -void dKyw_squal_set(cXyz*, short, short, float, float, float, float, float) { - /* Nonmatching */ +void dKyw_squal_set(cXyz* i_pos, s16 i_x, s16 i_y, f32 i_radius, f32 i_minRadius, f32 i_strength, + f32 i_speed, f32 i_maxStrength) { + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + + for (int i = 0; i < 5; i++) { + if (!env_light.mWindInfluenceEntity[i].mbInUse) { + env_light.mWindInfluenceEntity[i].mbInUse = true; + env_light.mWindInfluenceEntity[i].mMinRadius = i_minRadius; + env_light.mWindInfluenceEntity[i].mSpeed = i_speed; + env_light.mWindInfluenceEntity[i].mStrengthMaxVel = i_maxStrength; + + WIND_INFLUENCE* influence = &env_light.mWindInfluenceEntity[i].mInfluence; + influence->mPos = *i_pos; + influence->mDir.x = cM_scos(i_x) * cM_ssin(i_y); + influence->mDir.y = cM_ssin(i_x); + influence->mDir.z = cM_scos(i_x) * cM_scos(i_y); + influence->mRadius = i_radius; + influence->field_0x20 = influence->mRadius; + influence->mStrength = i_strength; + + dKyw_pntwind_set(influence); + return; + } + } } /* 80089FDC-8008A0F0 .text squal_proc__Fv */ void squal_proc() { - /* Nonmatching */ + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + WIND_INFLUENCE* influence; + + for (int i = 0; i < 5; i++) { + influence = &env_light.mWindInfluenceEntity[i].mInfluence; + switch (env_light.mWindInfluenceEntity[i].mbInUse) { + case 0: + break; + case 1: + influence->mPos.x += influence->mDir.x * env_light.mWindInfluenceEntity[i].mSpeed; + influence->mPos.y += influence->mDir.y * env_light.mWindInfluenceEntity[i].mSpeed; + influence->mPos.z += influence->mDir.z * env_light.mWindInfluenceEntity[i].mSpeed; + + cLib_addCalc(&influence->mStrength, 0.0f, 0.2f, + env_light.mWindInfluenceEntity[i].mStrengthMaxVel, 0.001f); + + f32 speed = 1.0f - influence->mStrength; + f32 target = env_light.mWindInfluenceEntity[i].mMinRadius; + cLib_addCalc(&influence->mRadius, target, speed, speed * target * 0.05f, 0.01f); + + if (influence->mStrength < 0.01f) { + dKyw_pntwind_cut(influence); + env_light.mWindInfluenceEntity[i].mbInUse = false; + } + break; + } + } } /* 8008A0F0-8008A144 .text dKyw_pntwind_init__Fv */ void dKyw_pntwind_init() { - /* Nonmatching */ + for (int i = 0; i < 30; i++) { + g_env_light.mpWindInfluence[i] = NULL; + } + + for (int i = 0; i < 5; i++) { + g_env_light.mWindInfluenceEntity[i].mbInUse = false; + } } /* 8008A144-8008A1A8 .text pntwind_set__FP14WIND_INFLUENCE */ -void pntwind_set(WIND_INFLUENCE*) { - /* Nonmatching */ +void pntwind_set(WIND_INFLUENCE* i_influence) { + int i = 0; + for (; i < 30; i++) { + if (g_env_light.mpWindInfluence[i] == NULL) { + g_env_light.mpWindInfluence[i] = i_influence; + g_env_light.mpWindInfluence[i]->field_0x24 = i; + break; + } + } + + if (i >= 30) { + i_influence->field_0x24 = 9999; + } } /* 8008A1A8-8008A1D0 .text dKyw_pntwind_set__FP14WIND_INFLUENCE */ -void dKyw_pntwind_set(WIND_INFLUENCE*) { - /* Nonmatching */ +void dKyw_pntwind_set(WIND_INFLUENCE* i_influence) { + i_influence->mbConstant = 0; + pntwind_set(i_influence); } /* 8008A1D0-8008A1F8 .text dKyw_pwind_cylinder_set__FP14WIND_INFLUENCE */ -void dKyw_pwind_cylinder_set(WIND_INFLUENCE*) { - /* Nonmatching */ +void dKyw_pwind_cylinder_set(WIND_INFLUENCE* i_influence) { + i_influence->mbConstant = 0; + pntwind_set(i_influence); } /* 8008A1F8-8008A230 .text dKyw_pntwind_cut__FP14WIND_INFLUENCE */ -void dKyw_pntwind_cut(WIND_INFLUENCE*) { - /* Nonmatching */ +void dKyw_pntwind_cut(WIND_INFLUENCE* i_influence) { + if (i_influence != NULL) { + if (i_influence->field_0x24 >= 0 && i_influence->field_0x24 < 30) { + g_env_light.mpWindInfluence[i_influence->field_0x24] = NULL; + } + } } /* 8008A230-8008A4C8 .text dKyw_pntwind_get_info__FP4cXyzP4cXyzPf */ -void dKyw_pntwind_get_info(cXyz*, cXyz*, float*) { - /* Nonmatching */ +void dKyw_pntwind_get_info(cXyz* param_0, cXyz* i_dir, f32* i_power) { + i_dir->x = 0.0f; + i_dir->y = 0.0f; + i_dir->z = 0.0f; + *i_power = 0.0f; + + WIND_INFLUENCE* influence; + for (int i = 0; i < 30; i++) { + influence = g_env_light.mpWindInfluence[i]; + if (influence != NULL) { + f32 dist = param_0->abs(influence->mPos); + + if (influence->mbConstant == 0) { + if (dist < influence->mRadius && influence->mStrength > 0.0f && dist != 0.0f) { + f32 temp_f0; + if (influence->mRadius > 0.0f) { + f32 temp_f0_4 = (dist / influence->mRadius); + temp_f0 = 1.0f - (temp_f0_4 * temp_f0_4); + } else { + temp_f0 = 1.0f; + } + + *i_power = influence->mStrength * temp_f0; + + cXyz sp10; + sp10.x = influence->mPos.x + -(influence->mDir.x) * influence->mRadius; + sp10.y = influence->mPos.y + -(influence->mDir.y) * influence->mRadius; + sp10.z = influence->mPos.z + -(influence->mDir.z) * influence->mRadius; + dKyr_get_vectle_calc(&sp10, param_0, i_dir); + + if (param_0->abs(sp10) < influence->mRadius) { + i_dir->x = 0.0f; + i_dir->y = 0.0f; + i_dir->z = 0.0f; + } + return; + } + } else { + if (dist < influence->mRadius && influence->mStrength > 0.0f && dist != 0.0f) { + f32 temp_f0; + if (influence->mRadius > 0.0f) { + temp_f0 = 1.0f - (dist / influence->mRadius); + } else { + temp_f0 = 1.0f; + } + + i_dir->x = influence->mDir.x; + i_dir->y = influence->mDir.y; + i_dir->z = influence->mDir.z; + *i_power = influence->mStrength * temp_f0; + return; + } + } + } + } } /* 8008A4C8-8008A53C .text dKyw_pntwind_get_vecpow__FP4cXyz */ -void dKyw_pntwind_get_vecpow(cXyz*) { - /* Nonmatching */ +cXyz dKyw_pntwind_get_vecpow(cXyz* param_0) { + cXyz direction; + f32 power; + dKyw_pntwind_get_info(param_0, &direction, &power); + + direction = direction * power; + return direction; } /* 8008A53C-8008A6F4 .text dKyw_get_AllWind_vec__FP4cXyzP4cXyzPf */ -void dKyw_get_AllWind_vec(cXyz*, cXyz*, float*) { - /* Nonmatching */ +void dKyw_get_AllWind_vec(cXyz* param_0, cXyz* i_direction, f32* i_power) { + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + dKyw_pntwind_get_info(param_0, i_direction, i_power); + + cXyz sp54; + cXyz sp30; + cXyz sp24; + + sp30 = env_light.mWind.mWindVec * (env_light.mWind.mWindPower * (1.0f - *i_power)); + sp24 = *i_direction * (*i_power * 5.0f); + sp54 = sp30 + sp24; + *i_power = sp54.abs(); + + sp54 = sp54.normZP(); + if (sp54 != cXyz::Zero) { + i_direction->x = sp54.x; + i_direction->y = sp54.y; + i_direction->z = sp54.z; + } else { + i_direction->x = env_light.mWind.mWindVec.x; + i_direction->y = env_light.mWind.mWindVec.y; + i_direction->z = env_light.mWind.mWindVec.z; + } } /* 8008A6F4-8008A7D0 .text dKyw_get_AllWind_vecpow__FP4cXyz */ -void dKyw_get_AllWind_vecpow(cXyz*) { - /* Nonmatching */ +cXyz dKyw_get_AllWind_vecpow(cXyz* param_0) { + cXyz vecpow; + cXyz sp24; + cXyz sp18; + cXyz direction; + f32 power; + dKyw_pntwind_get_info(param_0, &direction, &power); + + sp24 = g_env_light.mWind.mWindVec * (g_env_light.mWind.mWindPower * (1.0f - power)); + sp18 = direction * (power * 5.0f); + vecpow = sp24 + sp18; + + return vecpow; } /* 8008A7D0-8008A870 .text dKyw_tact_wind_set__Fss */ -void dKyw_tact_wind_set(short, short) { - /* Nonmatching */ +// NONMATCHING - small regswap... +void dKyw_tact_wind_set(s16 i_windX, s16 i_windY) { + dScnKy_env_light_c& env_light = dKy_getEnvlight(); + cXyz* wind_vec = dKyw_get_wind_vec(); + + env_light.mWind.mTactWindAngleX = i_windX; + env_light.mWind.mTactWindAngleY = i_windY; + dComIfGs_setWindX(i_windX); + dComIfGs_setWindY(i_windY); + + s16 temp_r29 = -(cM_atan2s(wind_vec->x, wind_vec->z) + 0x4000); + env_light.mWind.mTactWindAngleFlags = 1; + + if ((s16)(temp_r29 - env_light.mWind.mTactWindAngleY) < 0) { + env_light.mWind.mTactWindAngleFlags |= 0x80; + } } /* 8008A870-8008A890 .text dKyw_tact_wind_set_go__Fv */ void dKyw_tact_wind_set_go() { - /* Nonmatching */ + g_env_light.mWind.mTactWindAngleFlags |= 1; + g_env_light.mWind.mEvtWindSet = 0xFF; } /* 8008A890-8008A8B0 .text dKyw_get_tactwind_dir__Fv */ -void dKyw_get_tactwind_dir() { - /* Nonmatching */ +int dKyw_get_tactwind_dir() { + int ret = 0; + if ((g_env_light.mWind.mTactWindAngleFlags & 0x80) != 0) { + ret = 1; + } + + return ret; } /* 8008A8B0-8008A8C0 .text dKyw_custom_windpower__Ff */ -void dKyw_custom_windpower(float) { - /* Nonmatching */ +void dKyw_custom_windpower(f32 i_windpower) { + g_env_light.mWind.mCustomWindPower = i_windpower; } /* 8008A8C0-8008A944 .text dKyw_get_windsdir__Fv */ -void dKyw_get_windsdir() { - /* Nonmatching */ +int dKyw_get_windsdir() { + struct wind_tbl { + u16 min_angle; + u16 max_angle; + int direction; + }; + + static const wind_tbl wind_table[] = { + {0x0000, 0x1000, 0}, {0x1000, 0x3000, 1}, {0x3000, 0x5000, 2}, + {0x5000, 0x7000, 3}, {0x7000, 0x9000, 4}, {0x9000, 0xB000, 5}, + {0xB000, 0xD000, 6}, {0xD000, 0xF000, 7}, {0xF000, 0xFFFF, 0}, + }; + + cXyz* wind_vec = dKyw_get_wind_vec(); + u16 t = -(cM_atan2s(wind_vec->x, wind_vec->z) + 0x4000); + + int dir; + for (int i = 0; i < 9; i++) { + if (t >= wind_table[i].min_angle && t < wind_table[i].max_angle) { + dir = wind_table[i].direction; + } + } + + return dir; } /* 8008A944-8008A958 .text dKyw_evt_wind_set__Fss */ -void dKyw_evt_wind_set(short, short) { - /* Nonmatching */ +void dKyw_evt_wind_set(s16 i_windX, s16 i_windY) { + g_env_light.mWind.mEvtWindAngleX = i_windX; + g_env_light.mWind.mEvtWindAngleY = i_windY; } /* 8008A958-8008A96C .text dKyw_evt_wind_set_go__Fv */ void dKyw_evt_wind_set_go() { - /* Nonmatching */ + g_env_light.mWind.mEvtWindSet = 1; } /* 8008A96C-8008A9F8 .text dKyw_gbwind_use_check__Fv */ -void dKyw_gbwind_use_check() { - /* Nonmatching */ +BOOL dKyw_gbwind_use_check() { + dStage_FileList_dt_c* fili_p = NULL; + int rt = 0; + + if (g_env_light.mWind.mpWindVecOverride == NULL) { + s32 roomNo = dComIfGp_roomControl_getStayNo(); + if (roomNo >= 0) { + fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + } + + if (fili_p != NULL && dStage_FileList_dt_GlobalWindLevel(fili_p) <= 2) { + rt = 1; + } + } + + return rt; } /* 8008A9F8-8008AA1C .text dKyw_tornado_Notice__FP4cXyz */ -void dKyw_tornado_Notice(cXyz*) { - /* Nonmatching */ +void dKyw_tornado_Notice(cXyz* param_0) { + g_env_light.mWind.field_0x8 = *param_0; } /* 8008AA1C-8008AA30 .text dKyw_rain_set__Fi */ -void dKyw_rain_set(int) { - /* Nonmatching */ +void dKyw_rain_set(int i_count) { + g_env_light.mRainCount = i_count; + g_env_light.mRainCountOrig = i_count; } - From 12ddfa5d0023df3a72c640370aa626ddf1ceafe6 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 21:07:19 -0700 Subject: [PATCH 20/89] JUTAssert, JUTConsole, JUTException (#63) * JUTAssert * JUTConsole * JUTException --- configure.py | 2 +- include/JSystem/JUtility/JUTAssert.h | 5 +- include/JSystem/JUtility/JUTConsole.h | 15 +- include/JSystem/JUtility/JUTDirectPrint.h | 2 + include/JSystem/JUtility/JUTException.h | 7 +- include/dolphin/gx/GXFrameBuf.h | 6 + src/JSystem/JUtility/JUTAssert.cpp | 165 +++- src/JSystem/JUtility/JUTConsole.cpp | 430 ++++++++-- src/JSystem/JUtility/JUTException.cpp | 981 ++++++++++++++++++++-- 9 files changed, 1455 insertions(+), 158 deletions(-) diff --git a/configure.py b/configure.py index 74c1054bb..b670caf99 100644 --- a/configure.py +++ b/configure.py @@ -814,7 +814,7 @@ config.libs = [ Object(NonMatching, "JSystem/JUtility/JUTGamePad.cpp"), Object(NonMatching, "JSystem/JUtility/JUTException.cpp"), Object(NonMatching, "JSystem/JUtility/JUTDirectPrint.cpp"), - Object(NonMatching, "JSystem/JUtility/JUTAssert.cpp"), + Object(Matching, "JSystem/JUtility/JUTAssert.cpp"), Object(NonMatching, "JSystem/JUtility/JUTVideo.cpp"), Object(NonMatching, "JSystem/JUtility/JUTXfb.cpp"), Object(NonMatching, "JSystem/JUtility/JUTFader.cpp"), diff --git a/include/JSystem/JUtility/JUTAssert.h b/include/JSystem/JUtility/JUTAssert.h index d4f10e24e..73910d909 100644 --- a/include/JSystem/JUtility/JUTAssert.h +++ b/include/JSystem/JUtility/JUTAssert.h @@ -33,6 +33,9 @@ namespace JUTAssertion { void setMessageCount(int); }; -extern bool sAssertVisible; +extern "C" { + void setWarningMessage_f_va(u32 device, const char* file, int line, const char* msg, va_list args); + void setLogMessage_f_va(u32 device, const char* file, int line, const char* msg, va_list args); +} #endif /* JUTASSERT_H */ diff --git a/include/JSystem/JUtility/JUTConsole.h b/include/JSystem/JUtility/JUTConsole.h index 3915b9033..5ec6c776a 100644 --- a/include/JSystem/JUtility/JUTConsole.h +++ b/include/JSystem/JUtility/JUTConsole.h @@ -67,6 +67,7 @@ public: bool isVisible() const { return mVisible; } void setVisible(bool visible) { mVisible = visible; } + u8 getLineAttr(int param_0) { return mBuf[(field_0x20 + 2) * param_0]; } void setLineAttr(int param_0, u8 param_1) { mBuf[(field_0x20 + 2) * param_0] = param_1; } u8* getLinePtr(int param_0) const { return &mBuf[(field_0x20 + 2) * param_0] + 1; } int diffIndex(int param_0, int param_1) const { @@ -77,13 +78,12 @@ public: return diff += mMaxLines; } - int nextIndex(int param_0) const { - int index = param_0 + 1; - if (mMaxLines <= index) { - index = 0; - } + int prevIndex(int index) const { + return --index < 0 ? index = mMaxLines - 1 : index; + } - return index; + int nextIndex(int index) const { + return ++index >= mMaxLines ? 0 : index; } void scrollToLastLine() { scroll(mMaxLines); } @@ -94,7 +94,7 @@ private: private: /* 0x20 */ u32 field_0x20; - /* 0x24 */ u32 mMaxLines; + /* 0x24 */ int mMaxLines; /* 0x28 */ u8* mBuf; /* 0x2C */ bool field_0x2c; /* 0x30 */ int field_0x30; @@ -146,6 +146,7 @@ extern "C" JUTConsole* JUTGetWarningConsole(); extern "C" void JUTReportConsole_f_va(const char*, va_list); extern "C" void JUTReportConsole_f(const char*, ...); extern "C" void JUTWarningConsole(const char* message); +extern "C" void JUTWarningConsole_f_va(const char*, va_list); extern "C" void JUTWarningConsole_f(const char* message, ...); extern "C" void JUTReportConsole(const char* message); diff --git a/include/JSystem/JUtility/JUTDirectPrint.h b/include/JSystem/JUtility/JUTDirectPrint.h index bc17dab88..756d02c3d 100644 --- a/include/JSystem/JUtility/JUTDirectPrint.h +++ b/include/JSystem/JUtility/JUTDirectPrint.h @@ -21,8 +21,10 @@ public: /* 802E4240 */ static JUTDirectPrint* start(); + void* getFrameBuffer() { return field_0x00; } bool isActive() const { return field_0x00 != 0; } JUtility::TColor getCharColor() const { return mCharColor; } + void changeFrameBuffer(void *param_0) { changeFrameBuffer(param_0, mFrameBufferWidth, mFrameBufferHeight); } static JUTDirectPrint* getManager() { return sDirectPrint; } diff --git a/include/JSystem/JUtility/JUTException.h b/include/JSystem/JUtility/JUTException.h index 0380caf3c..f2f9b5aaf 100644 --- a/include/JSystem/JUtility/JUTException.h +++ b/include/JSystem/JUtility/JUTException.h @@ -56,7 +56,7 @@ public: }; /* 802E1D5C */ JUTException(JUTDirectPrint*); - /* 802E40EC */ virtual ~JUTException(); + /* 802E40EC */ virtual ~JUTException() {}; /* 802E22C4 */ void showFloatSub(int, f32); /* 802E2454 */ void showFloat(OSContext*); @@ -108,7 +108,7 @@ private: static OSMessageQueue sMessageQueue; static const char* sCpuExpName[17]; static JSUList sMapFileList; - static u8 sMessageBuffer[4 + 4 /* padding */]; + static OSMessage sMessageBuffer[1]; static JUTException* sErrorManager; static OSErrorHandler sPreUserCallback; static OSErrorHandler sPostUserCallback; @@ -128,10 +128,9 @@ private: /* 0x80 */ u32 mTraceSuppress; /* 0x84 */ u32 field_0x98; /* 0x88 */ u32 mPrintFlags; - /* 0x8C */ u32 mStackPointer; }; -STATIC_ASSERT(sizeof(JUTException) == 0x90); +STATIC_ASSERT(sizeof(JUTException) == 0x8C); struct JUTWarn { JUTWarn& operator<<(const char*) { return *this; } diff --git a/include/dolphin/gx/GXFrameBuf.h b/include/dolphin/gx/GXFrameBuf.h index 781a397f3..b65dd454a 100644 --- a/include/dolphin/gx/GXFrameBuf.h +++ b/include/dolphin/gx/GXFrameBuf.h @@ -8,6 +8,12 @@ extern "C" { #endif +extern GXRenderModeObj GXNtsc480IntDf; +extern GXRenderModeObj GXNtsc480Int; +extern GXRenderModeObj GXMpal480IntDf; +extern GXRenderModeObj GXPal528IntDf; +extern GXRenderModeObj GXEurgb60Hz480IntDf; + void GXSetDispCopySrc(u16 left, u16 top, u16 width, u16 height); void GXSetTexCopySrc(u16 left, u16 top, u16 width, u16 height); void GXSetDispCopyDst(u16 arg0, u16 arg1); diff --git a/src/JSystem/JUtility/JUTAssert.cpp b/src/JSystem/JUtility/JUTAssert.cpp index 59daa0746..056885bdf 100644 --- a/src/JSystem/JUtility/JUTAssert.cpp +++ b/src/JSystem/JUtility/JUTAssert.cpp @@ -4,69 +4,182 @@ // #include "JSystem/JUtility/JUTAssert.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "JSystem/JUtility/JUTDbPrint.h" +#include "JSystem/JUtility/JUTDirectPrint.h" +#include "MSL_C/stdio.h" +#include "dolphin/vi/vi.h" -/* 802C740C-802C7410 .text create__12JUTAssertionFv */ -void JUTAssertion::create() { - /* Nonmatching */ +namespace JUTAssertion { + namespace { + static char sMessageFileLine[64]; + static char sMessageString[96]; + static s32 sDisplayTime = -1; + static s32 sDevice = 3; + static bool mVisible = true; + static u32 sMessageLife; + static s32 sMessageOwner; + static u8 mSynchro; + } } +/* 802C740C-802C7410 .text create__12JUTAssertionFv */ +void JUTAssertion::create() {} + /* 802C7410-802C744C .text flush_subroutine__12JUTAssertionFv */ -void JUTAssertion::flush_subroutine() { - /* Nonmatching */ +u32 JUTAssertion::flush_subroutine() { + if (sMessageLife == 0) { + return 0; + } + + if (sMessageLife != -1) { + sMessageLife--; + } + + if (sMessageLife >= 5) { + return sMessageLife; + } + + return 0; } /* 802C744C-802C74B0 .text flushMessage__12JUTAssertionFv */ void JUTAssertion::flushMessage() { - /* Nonmatching */ + if (flush_subroutine() && mVisible == true) { + JUTDirectPrint::getManager()->drawString(16, 16, sMessageFileLine); + JUTDirectPrint::getManager()->drawString(16, 24, sMessageString); + } } /* 802C74B0-802C7690 .text flushMessage_dbPrint__12JUTAssertionFv */ void JUTAssertion::flushMessage_dbPrint() { - /* Nonmatching */ + if (flush_subroutine() && mVisible == true && JUTDbPrint::getManager() != NULL) { + JUTFont* font = JUTDbPrint::getManager()->getFont(); + if (font != NULL) { + u8 tmp = ((VIGetRetraceCount() & 0x3C) << 2) | 0xF; + font->setGX(); + font->setCharColor(JUtility::TColor(255, tmp, tmp, 255)); + font->drawString(30, 36, sMessageFileLine, true); + font->drawString(30, 54, sMessageString, true); + } + } } /* 802C7690-802C7698 .text getSDevice__12JUTAssertionFv */ -void JUTAssertion::getSDevice() { - /* Nonmatching */ +u32 JUTAssertion::getSDevice() { + return sDevice; } /* 802C7698-802C7788 .text setConfirmMessage__12JUTAssertionFUlPcibPCc */ -void JUTAssertion::setConfirmMessage(unsigned long, char*, int, bool, const char*) { - /* Nonmatching */ +void JUTAssertion::setConfirmMessage(u32 param_1, char* file, int line, bool param_4, const char* msg) { + if (param_4 == 1) { + return; + } + u32 r28 = sMessageLife; + if (r28 == 0 && (param_1 & 1) != 0) { + sMessageLife = sDisplayTime; + sMessageOwner = 2; + snprintf(sMessageFileLine, sizeof(sMessageFileLine) - 1, "FAILED [%s:%d]", file, line); + snprintf(sMessageString, sizeof(sMessageString) - 1, "%s", msg); + } + if ((r28 == 0 || mSynchro == 0) && (param_1 & 2) != 0) { + JUTWarningConsole_f("FAILED [%s:%d] %s\n", file, line, msg); + } } /* 802C7788-802C78E4 .text showAssert__12JUTAssertionFUlPCciPCc */ -void JUTAssertion::showAssert(unsigned long, const char*, int, const char*) { - /* Nonmatching */ +void JUTAssertion::showAssert(u32 device, const char* file, int line, const char* msg) { + OSReport("Failed assertion %s in \"%s\" on line %d\n", msg, file, line); + if ((device & 1) == 0) { + return; + } + if (!JUTDirectPrint::getManager()) { + return; + } + JUTDirectPrint::getManager()->erase(10, 0x10, 0x132, 0x18); + char buffer[0x100]; + snprintf(buffer, 95, "Failed assertion: %s:%d", file, line); + JUTDirectPrint::getManager()->drawString(0x10, 0x10, buffer); + snprintf(buffer, 95, "%s", msg); + JUTDirectPrint::getManager()->drawString(0x10, 0x18, buffer); + VISetNextFrameBuffer(JUTDirectPrint::getManager()->getFrameBuffer()); + VIWaitForRetrace(); + VIFlush(); + // busy loop for 2 seconds + OSTime var1 = OSGetTime(); + while (OSTicksToMilliseconds(OSGetTime() - var1) < 2000) {} } /* 802C78E4-802C79FC .text setWarningMessage_f_va */ -void setWarningMessage_f_va { - /* Nonmatching */ +void setWarningMessage_f_va(u32 device, const char* file, int line, const char* msg, va_list args) { + u32 messageLife = JUTAssertion::sMessageLife; + bool r26 = false; + if (messageLife == 0) { + if (device & 1) { + JUTAssertion::sMessageLife = JUTAssertion::sDisplayTime; + JUTAssertion::sMessageOwner = 3; + snprintf(JUTAssertion::sMessageFileLine, sizeof(JUTAssertion::sMessageFileLine) - 1, "WARNING [%s:%d]", file, line); + } + vsnprintf(JUTAssertion::sMessageString, sizeof(JUTAssertion::sMessageString) - 1, msg, args); + r26 = true; + } + if ((messageLife == 0 || JUTAssertion::mSynchro == 0) && (device & 2)) { + JUTWarningConsole_f("WARNING [%s:%d] ", file, line); + if (!r26) { + JUTWarningConsole_f_va(msg, args); + } else { + JUTWarningConsole(JUTAssertion::sMessageString); + } + JUTWarningConsole("\n"); + } } /* 802C79FC-802C7A7C .text setWarningMessage_f__12JUTAssertionFUlPciPCce */ -void JUTAssertion::setWarningMessage_f(unsigned long, char*, int, const char*, ...) { - /* Nonmatching */ +void JUTAssertion::setWarningMessage_f(u32 device, char* file, int line, const char* msg, ...) { + va_list args; + va_start(args, msg); + setWarningMessage_f_va(device, file, line, msg, args); + va_end(args); } /* 802C7A7C-802C7B94 .text setLogMessage_f_va */ -void setLogMessage_f_va { - /* Nonmatching */ +void setLogMessage_f_va(u32 device, const char* file, int line, const char* msg, va_list args) { + u32 messageLife = JUTAssertion::sMessageLife; + bool r26 = false; + if (messageLife == 0) { + if (device & 1) { + JUTAssertion::sMessageLife = JUTAssertion::sDisplayTime; + JUTAssertion::sMessageOwner = 4; + snprintf(JUTAssertion::sMessageFileLine, sizeof(JUTAssertion::sMessageFileLine) - 1, "[%s:%d]", file, line); + } + vsnprintf(JUTAssertion::sMessageString, sizeof(JUTAssertion::sMessageString) - 1, msg, args); + r26 = true; + } + if ((messageLife == 0 || JUTAssertion::mSynchro == 0) && (device & 2)) { + JUTReportConsole_f("[%s:%d] ", file, line); + if (!r26) { + JUTReportConsole_f_va(msg, args); + } else { + JUTReportConsole(JUTAssertion::sMessageString); + } + JUTReportConsole("\n"); + } } /* 802C7B94-802C7C14 .text setLogMessage_f__12JUTAssertionFUlPciPCce */ -void JUTAssertion::setLogMessage_f(unsigned long, char*, int, const char*, ...) { - /* Nonmatching */ +void JUTAssertion::setLogMessage_f(u32 device, char* file, int line, const char* msg, ...) { + va_list args; + va_start(args, msg); + setLogMessage_f_va(device, file, line, msg, args); + va_end(args); } /* 802C7C14-802C7C1C .text setVisible__12JUTAssertionFb */ -void JUTAssertion::setVisible(bool) { - /* Nonmatching */ +void JUTAssertion::setVisible(bool visible) { + mVisible = visible; } /* 802C7C1C-802C7C34 .text setMessageCount__12JUTAssertionFi */ -void JUTAssertion::setMessageCount(int) { - /* Nonmatching */ +void JUTAssertion::setMessageCount(int msg_count) { + sMessageLife = msg_count <= 0 ? 0 : msg_count; } diff --git a/src/JSystem/JUtility/JUTConsole.cpp b/src/JSystem/JUtility/JUTConsole.cpp index a2f7e64a7..febc5e286 100644 --- a/src/JSystem/JUtility/JUTConsole.cpp +++ b/src/JSystem/JUtility/JUTConsole.cpp @@ -4,100 +4,376 @@ // #include "JSystem/JUtility/JUTConsole.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTDirectPrint.h" +#include "JSystem/JUtility/JUTVideo.h" +#include "MSL_C/stdio.h" #include "dolphin/types.h" +JUTConsoleManager* JUTConsoleManager::sManager; + /* 802CA2FC-802CA3CC .text create__10JUTConsoleFUiUiP7JKRHeap */ -void JUTConsole::create(unsigned int, unsigned int, JKRHeap*) { - /* Nonmatching */ +JUTConsole* JUTConsole::create(unsigned int param_0, unsigned int maxLines, JKRHeap* p_heap) { + JUTConsoleManager* pManager = JUTConsoleManager::getManager(); + JUT_ASSERT(33, pManager != 0); + + void* buffer = JKRAllocFromHeap(p_heap, getObjectSizeFromBufferSize(param_0, maxLines), 0); + u8* tmpBuf = (u8*)buffer; + + JUTConsole* newConsole = new (tmpBuf) JUTConsole(param_0, maxLines, true); + newConsole->mBuf = tmpBuf + sizeof(JUTConsole); + newConsole->clear(); + + pManager->appendConsole(newConsole); + return newConsole; } /* 802CA3CC-802CA4C8 .text create__10JUTConsoleFUiPvUl */ -void JUTConsole::create(unsigned int, void*, unsigned long) { - /* Nonmatching */ +JUTConsole* JUTConsole::create(unsigned int param_0, void* buffer, u32 bufferSize) { + JUTConsoleManager* pManager = JUTConsoleManager::getManager(); + JUT_ASSERT(59, pManager != 0); + JUT_ASSERT(62, ( (u32)buffer & 0x3 ) == 0); + u32 maxLines = getLineFromObjectSize(bufferSize, param_0); + + JUTConsole* newConsole = new (buffer) JUTConsole(param_0, maxLines, false); + newConsole->mBuf = (u8*)buffer + sizeof(JUTConsole); + newConsole->clear(); + + pManager->appendConsole(newConsole); + return newConsole; } /* 802CA4C8-802CA5AC .text __ct__10JUTConsoleFUiUib */ -JUTConsole::JUTConsole(unsigned int, unsigned int, bool) { - /* Nonmatching */ +JUTConsole::JUTConsole(unsigned int param_0, unsigned int maxLines, bool param_2) { + field_0x2c = param_2; + field_0x20 = param_0; + mMaxLines = maxLines; + + mPositionX = 30; + mPositionY = 50; + mHeight = 20; + + if (mHeight > mMaxLines) { + mHeight = mMaxLines; + } + + mFont = NULL; + mVisible = true; + field_0x65 = false; + field_0x66 = false; + mOutput = 1; + + field_0x5c.set(0, 0, 0, 100); + field_0x60.set(0, 0, 0, 230); +} + +static void dummy1() { + OSReport("console != 0"); } /* 802CA5AC-802CA658 .text __dt__10JUTConsoleFv */ JUTConsole::~JUTConsole() { - /* Nonmatching */ + JUT_ASSERT(150, JUTConsoleManager::getManager()); + JUTConsoleManager::getManager()->removeConsole(this); } /* 802CA658-802CA668 .text getObjectSizeFromBufferSize__10JUTConsoleFUiUi */ -void JUTConsole::getObjectSizeFromBufferSize(unsigned int, unsigned int) { - /* Nonmatching */ +size_t JUTConsole::getObjectSizeFromBufferSize(unsigned int param_0, unsigned int maxLines) { + return (param_0 + 2) * maxLines + sizeof(JUTConsole); } /* 802CA668-802CA678 .text getLineFromObjectSize__10JUTConsoleFUlUi */ -void JUTConsole::getLineFromObjectSize(unsigned long, unsigned int) { - /* Nonmatching */ +size_t JUTConsole::getLineFromObjectSize(u32 bufferSize, unsigned int param_1) { + return (bufferSize - sizeof(JUTConsole)) / (param_1 + 2); } /* 802CA678-802CA6D4 .text clear__10JUTConsoleFv */ void JUTConsole::clear() { - /* Nonmatching */ + field_0x30 = 0; + field_0x34 = 0; + field_0x38 = 0; + field_0x3c = 0; + + for (u32 i = 0; i < mMaxLines; i++) { + setLineAttr(i, 0); + } + setLineAttr(0, -1); + *getLinePtr(0) = 0; } /* 802CA6D4-802CAC1C .text doDraw__10JUTConsoleCFQ210JUTConsole12EConsoleType */ -void JUTConsole::doDraw(JUTConsole::EConsoleType) const { +void JUTConsole::doDraw(JUTConsole::EConsoleType consoleType) const { /* Nonmatching */ + f32 font_yOffset; + s32 changeLine_1; + s32 changeLine_2; + + if (mVisible && (mFont != NULL || consoleType == CONSOLE_TYPE_2)) { + if (mHeight != 0) { + bool temp_r30 = consoleType == CONSOLE_TYPE_0; + font_yOffset = 2.0f + mFontSizeY; + + if (consoleType != CONSOLE_TYPE_2) { + if (JUTVideo::getManager() == NULL) { + J2DOrthoGraph ortho(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0f); + ortho.setPort(); + } else { + J2DOrthoGraph ortho(0.0f, 0.0f, JUTVideo::getManager()->getFbWidth(), + JUTVideo::getManager()->getEfbHeight(), -1.0f, 1.0f); + ortho.setPort(); + } + + const JUtility::TColor* color; + if (temp_r30) { + color = &field_0x60; + } else { + color = &field_0x5c; + } + + J2DFillBox(mPositionX - 2, (int)(mPositionY - font_yOffset), + (int)((mFontSizeX * field_0x20) + 4.0f), (int)(font_yOffset * mHeight), + *color); + mFont->setGX(); + + if (temp_r30) { + s32 s = (diffIndex(field_0x30, field_0x38) - mHeight) + 1; + if (s <= 0) { + mFont->setCharColor(JUtility::TColor(255, 255, 255, 255)); + } else if (field_0x30 == field_0x34) { + mFont->setCharColor(JUtility::TColor(255, 230, 230, 255)); + } else { + mFont->setCharColor(JUtility::TColor(230, 230, 255, 255)); + } + } else { + mFont->setCharColor(JUtility::TColor(230, 230, 230, 255)); + } + } else { + JUTDirectPrint::getManager()->erase(mPositionX - 3, mPositionY - 2, + (field_0x20 * 6) + 6, + (int)(font_yOffset * mHeight) + 4); + } + + char* linePtr; + s32 curLine = field_0x30; + s32 yFactor = 0; + + do { + linePtr = (char*)getLinePtr(curLine); + + if ((u8)linePtr[-1] != NULL) { + if (consoleType != CONSOLE_TYPE_2) { + mFont->drawString_scale(mPositionX, ((yFactor * font_yOffset) + mPositionY), + mFontSizeX, mFontSizeY, linePtr, true); + } else { + JUTDirectPrint::getManager()->drawString( + mPositionX, ((yFactor * font_yOffset) + mPositionY), linePtr); + } + + changeLine_1 = curLine + 1; + yFactor += 1; + changeLine_2 = changeLine_1 & ~(-((s32)mMaxLines <= (s32)changeLine_1)); + curLine = changeLine_2; + } else { + break; + } + } while (yFactor < mHeight && changeLine_2 != field_0x34); + } + } } /* 802CAC1C-802CAC9C .text print_f__10JUTConsoleFPCce */ -void JUTConsole::print_f(const char*, ...) { - /* Nonmatching */ +void JUTConsole::print_f(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + JUTConsole_print_f_va_(this, fmt, args); + va_end(args); } /* 802CAC9C-802CAFB0 .text print__10JUTConsoleFPCc */ -void JUTConsole::print(const char*) { - /* Nonmatching */ +void JUTConsole::print(const char* param_0) { + if (mOutput & 2) { + OSReport("%s", param_0); + } + if (mOutput & 1) { + const u8* r29 = (const u8*)param_0; + u8* r28 = getLinePtr(field_0x38) + field_0x3c; + while (*r29) { + if (field_0x66 && field_0x34 == nextIndex(field_0x38)) { + break; + } + if (*r29 == '\n') { + r29++; + field_0x3c = field_0x20; + } else if (*r29 == '\t') { + r29++; + while (field_0x3c < field_0x20) { + *(r28++) = ' '; + field_0x3c++; + if (field_0x3c % 8 == 0) { + break; + } + } + } else if (mFont && mFont->isLeadByte(*r29)) { + if (field_0x3c + 1 < field_0x20) { + *(r28++) = *(r29++); + *(r28++) = *(r29++); + field_0x3c++; + field_0x3c++; + } else { + *(r28++) = 0; + field_0x3c++; + } + } else { + *(r28++) = *(r29++); + field_0x3c++; + } + + if (field_0x3c < field_0x20) { + continue; + } + *r28 = 0; + field_0x38 = nextIndex(field_0x38); + field_0x3c = 0; + setLineAttr(field_0x38, 0xff); + r28 = getLinePtr(field_0x38); + *r28 = 0; + int local_28 = diffIndex(field_0x30, field_0x38); + if (local_28 == mHeight) { + field_0x30 = nextIndex(field_0x30); + } + if (field_0x38 == field_0x34) { + field_0x34 = nextIndex(field_0x34); + } + if (field_0x38 == field_0x30) { + field_0x30 = nextIndex(field_0x30); + } + } + *r28 = 0; + } } /* 802CAFB0-802CB03C .text JUTConsole_print_f_va_ */ -void JUTConsole_print_f_va_ { - /* Nonmatching */ +void JUTConsole_print_f_va_(JUTConsole* console, const char* fmt, va_list args) { + JUT_ASSERT(561, console!=0); + char buf[1024]; + vsnprintf(buf, sizeof(buf), fmt, args); + console->print(buf); } /* 802CB03C-802CB19C .text dumpToTerminal__10JUTConsoleFUi */ -void JUTConsole::dumpToTerminal(unsigned int) { +void JUTConsole::dumpToTerminal(unsigned int param_0) { /* Nonmatching */ + if (param_0 == 0) { + return; + } + u32 r29 = field_0x34; + if (param_0 != -1) { + r29 = field_0x38; + for (int i = 0; i != param_0; i++) { + int r25 = prevIndex(r29); + if (getLineAttr(r25) == 0) { + break; + } + r29 = r25; + if (r25 == field_0x34) { + break; + } + } + } + + int r27 = 0; + OSReport("\n:::dump of console[%x]--------------------------------\n",this); + do { + u8* r28 = getLinePtr(r29); + u8 r24 = r28[-1]; + if (r24 == 0) { + break; + } + if (field_0x65) { + OSReport("[%03d] %s\n", r27, r28); + } else { + OSReport("%s\n", r28); + } + r29 = nextIndex(r29); + r27++; + } while (r27 != field_0x34); + OSReport(":::dump of console[%x] END----------------------------\n",this); } /* 802CB19C-802CB278 .text scroll__10JUTConsoleFi */ -void JUTConsole::scroll(int) { - /* Nonmatching */ +void JUTConsole::scroll(int scrollAmnt) { + if (scrollAmnt < 0) { + int diff = diffIndex(field_0x34, field_0x30); + if (scrollAmnt < -diff) { + scrollAmnt = -diff; + } + } else { + if (scrollAmnt > 0) { + int diff = diffIndex(field_0x34, field_0x38); + if (diff + 1 <= mHeight) { + scrollAmnt = 0; + } else { + diff = diffIndex(field_0x30, field_0x38); + if (scrollAmnt > (int)(diff - mHeight) + 1) { + scrollAmnt = (int)(diff - mHeight) + 1; + } + } + } + } + + field_0x30 += scrollAmnt; + if (field_0x30 < 0) { + field_0x30 += mMaxLines; + } + + if (field_0x30 >= mMaxLines) { + field_0x30 -= mMaxLines; + } } /* 802CB278-802CB29C .text getUsedLine__10JUTConsoleCFv */ -void JUTConsole::getUsedLine() const { - /* Nonmatching */ +int JUTConsole::getUsedLine() const { + return diffIndex(field_0x34, field_0x38); } /* 802CB29C-802CB2C0 .text getLineOffset__10JUTConsoleCFv */ -void JUTConsole::getLineOffset() const { - /* Nonmatching */ +int JUTConsole::getLineOffset() const { + return diffIndex(field_0x34, field_0x30); } /* 802CB2C0-802CB2E8 .text __ct__17JUTConsoleManagerFv */ JUTConsoleManager::JUTConsoleManager() { - /* Nonmatching */ + mActiveConsole = NULL; + mDirectConsole = NULL; +} + +static void dummy2() { + OSReport("console != this && console != 0"); + OSReport("\n:::dump of console[%x]----------------\n"); + OSReport(":::dump of console[%x] END------------\n"); } /* 802CB2E8-802CB380 .text createManager__17JUTConsoleManagerFP7JKRHeap */ -void JUTConsoleManager::createManager(JKRHeap*) { - /* Nonmatching */ +JUTConsoleManager* JUTConsoleManager::createManager(JKRHeap* pHeap) { + JUT_ASSERT(922, sManager == 0); + if (pHeap == NULL) { + pHeap = JKRHeap::sCurrentHeap; + } + + JUTConsoleManager* manager = new (pHeap, 0) JUTConsoleManager(); + sManager = manager; + return manager; } /* 802CB380-802CB4C4 .text appendConsole__17JUTConsoleManagerFP10JUTConsole */ -void JUTConsoleManager::appendConsole(JUTConsole*) { +void JUTConsoleManager::appendConsole(JUTConsole* console) { /* Nonmatching */ } /* 802CB4C4-802CB674 .text removeConsole__17JUTConsoleManagerFP10JUTConsole */ -void JUTConsoleManager::removeConsole(JUTConsole*) { +void JUTConsoleManager::removeConsole(JUTConsole* console) { /* Nonmatching */ } @@ -107,61 +383,105 @@ void JUTConsoleManager::draw() const { } /* 802CB740-802CB7B4 .text drawDirect__17JUTConsoleManagerCFb */ -void JUTConsoleManager::drawDirect(bool) const { - /* Nonmatching */ +void JUTConsoleManager::drawDirect(bool waitRetrace) const { + if (mDirectConsole != NULL) { + if (waitRetrace) { + s32 interrupt_status = OSEnableInterrupts(); + u32 retrace_count = VIGetRetraceCount(); + u32 new_count; + do { + new_count = VIGetRetraceCount(); + } while (retrace_count == new_count); + OSRestoreInterrupts(interrupt_status); + } + mDirectConsole->doDraw(JUTConsole::CONSOLE_TYPE_2); + } } /* 802CB7B4-802CB810 .text setDirectConsole__17JUTConsoleManagerFP10JUTConsole */ -void JUTConsoleManager::setDirectConsole(JUTConsole*) { - /* Nonmatching */ +void JUTConsoleManager::setDirectConsole(JUTConsole* p_console) { + if (mDirectConsole != NULL) { + appendConsole(mDirectConsole); + } + + if (p_console != NULL) { + removeConsole(p_console); + } + mDirectConsole = p_console; } +static JUTConsole* sReportConsole; + /* 802CB810-802CB818 .text JUTSetReportConsole */ -void JUTSetReportConsole { - /* Nonmatching */ +void JUTSetReportConsole(JUTConsole* p_console) { + sReportConsole = p_console; } /* 802CB818-802CB820 .text JUTGetReportConsole */ -void JUTGetReportConsole { - /* Nonmatching */ +JUTConsole* JUTGetReportConsole() { + return sReportConsole; } +static JUTConsole* sWarningConsole; + /* 802CB820-802CB828 .text JUTSetWarningConsole */ -void JUTSetWarningConsole { - /* Nonmatching */ +void JUTSetWarningConsole(JUTConsole* p_console) { + sWarningConsole = p_console; } /* 802CB828-802CB830 .text JUTGetWarningConsole */ -void JUTGetWarningConsole { - /* Nonmatching */ +JUTConsole* JUTGetWarningConsole() { + return sWarningConsole; } /* 802CB830-802CB8D0 .text JUTReportConsole_f_va */ -void JUTReportConsole_f_va { - /* Nonmatching */ +void JUTReportConsole_f_va(const char* fmt, va_list args) { + char buf[256]; + + if (JUTGetReportConsole() == NULL) { + vsnprintf(buf, sizeof(buf), fmt, args); + OSReport("%s", buf); + } else if (JUTGetReportConsole()->getOutput() & (JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT)) { + vsnprintf(buf, sizeof(buf), fmt, args); + JUTGetReportConsole()->print(buf); + } } /* 802CB8D0-802CB950 .text JUTReportConsole_f */ -void JUTReportConsole_f { - /* Nonmatching */ +void JUTReportConsole_f(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + JUTReportConsole_f_va(fmt, args); + va_end(args); } /* 802CB950-802CB984 .text JUTReportConsole */ -void JUTReportConsole { - /* Nonmatching */ +void JUTReportConsole(const char* message) { + JUTReportConsole_f("%s", message); } /* 802CB984-802CBA24 .text JUTWarningConsole_f_va */ -void JUTWarningConsole_f_va { - /* Nonmatching */ +void JUTWarningConsole_f_va(const char* fmt, va_list args) { + char buf[256]; + + if (JUTGetWarningConsole() == NULL) { + vsnprintf(buf, sizeof(buf), fmt, args); + OSReport("%s", buf); + } else if (JUTGetWarningConsole()->getOutput() & (JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT)) { + vsnprintf(buf, sizeof(buf), fmt, args); + JUTGetWarningConsole()->print(buf); + } } /* 802CBA24-802CBAA4 .text JUTWarningConsole_f */ -void JUTWarningConsole_f { - /* Nonmatching */ +void JUTWarningConsole_f(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + JUTReportConsole_f_va(fmt, args); + va_end(args); } /* 802CBAA4-802CBAD8 .text JUTWarningConsole */ -void JUTWarningConsole { - /* Nonmatching */ +void JUTWarningConsole(const char* message) { + JUTReportConsole_f("%s", message); } diff --git a/src/JSystem/JUtility/JUTException.cpp b/src/JSystem/JUtility/JUTException.cpp index 7e113e680..b32a961b9 100644 --- a/src/JSystem/JUtility/JUTException.cpp +++ b/src/JSystem/JUtility/JUTException.cpp @@ -4,154 +4,1007 @@ // #include "JSystem/JUtility/JUTException.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "JSystem/JUtility/JUTDirectFile.h" +#include "JSystem/JUtility/JUTDirectPrint.h" +#include "MSL_C/math.h" +#include "MSL_C/stdio.h" +#include "MSL_C/stdlib.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/gx/GX.h" +#include "dolphin/os/OS.h" +#include "dolphin/vi/vi.h" + +struct CallbackObject { + /* 0x00 */ OSErrorHandler callback; + /* 0x04 */ u16 error; + /* 0x06 */ u16 pad_0x06; + /* 0x08 */ OSContext* context; + /* 0x0C */ int param_3; + /* 0x10 */ int param_4; +}; + +void search_name_part(u8*, u8*, int); + +OSMessageQueue JUTException::sMessageQueue = {}; +static OSTime c3bcnt[4] = {0, 0, 0, 0}; +const char* JUTException::sCpuExpName[] = { + "SYSTEM RESET", + "MACHINE CHECK", + "DSI", + "ISI", + "EXTERNAL INTERRUPT", + "ALIGNMENT", + "PROGRAM", + "FLOATING POINT", + "DECREMENTER", + "SYSTEM CALL", + "TRACE", + "PERFORMACE MONITOR", + "BREAK POINT", + "SYSTEM INTERRUPT", + "THERMAL INTERRUPT", + "PROTECTION", + "FLOATING POINT", +}; +JUTException* JUTException::sErrorManager; +OSErrorHandler JUTException::sPreUserCallback; +OSErrorHandler JUTException::sPostUserCallback; /* 802C4AC8-802C4BAC .text __ct__12JUTExceptionFP14JUTDirectPrint */ -JUTException::JUTException(JUTDirectPrint*) { - /* Nonmatching */ +JUTException::JUTException(JUTDirectPrint* directPrint) : JKRThread(0x4000, 0x10, 0) { + mDirectPrint = directPrint; + OSSetErrorHandler(EXCEPTION_DSI, errorHandler); + OSSetErrorHandler(EXCEPTION_ISI, errorHandler); + OSSetErrorHandler(EXCEPTION_PROGRAM, errorHandler); + OSSetErrorHandler(EXCEPTION_ALIGNMENT, errorHandler); + OSSetErrorHandler(EXCEPTION_MEMORY_PROTECTION, errorHandler); + setFPException(0); + + sPreUserCallback = NULL; + sPostUserCallback = NULL; + + setGamePad(NULL); + + this->mPrintWaitTime0 = 10; + this->mPrintWaitTime1 = 10; + this->mTraceSuppress = -1; + this->field_0x98 = 0; + this->mPrintFlags = + JUT_PRINT_GPR | JUT_PRINT_GPR_MAP | JUT_PRINT_SRR0_MAP | JUT_PRINT_FLOAT | JUT_PRINT_STACK; } /* 802C4BAC-802C4C14 .text create__12JUTExceptionFP14JUTDirectPrint */ -void JUTException::create(JUTDirectPrint*) { - /* Nonmatching */ +JUTException* JUTException::create(JUTDirectPrint* directPrint) { + if (!sErrorManager) { + JKRHeap* systemHeap = JKRGetSystemHeap(); + sErrorManager = new (systemHeap, 0) JUTException(directPrint); + sErrorManager->resume(); + } + + return sErrorManager; } +OSMessage JUTException::sMessageBuffer[1] = {0}; + /* 802C4C14-802C4CEC .text run__12JUTExceptionFv */ -void JUTException::run() { - /* Nonmatching */ +void* JUTException::run() { + PPCMtmsr(PPCMfmsr() & ~0x0900); + OSInitMessageQueue(&sMessageQueue, sMessageBuffer, 1); + OSMessage message; + while (true) { + OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCK); + CallbackObject* cb = (CallbackObject*)message; + OSErrorHandler callback = cb->callback; + u16 error = cb->error; + OSContext* context = cb->context; + int r24 = cb->param_3; + int r23 = cb->param_4; + mFrameMemory = (JUTExternalFB*)sErrorManager->mDirectPrint->getFrameBuffer(); + if (!sErrorManager->mDirectPrint->getFrameBuffer()) { + sErrorManager->createFB(); + } + if (callback) { + callback(error, context, r24, r23); + } + OSDisableInterrupts(); + sErrorManager->printContext(error, context, r24, r23); + } } +static CallbackObject exCallbackObject; +void* JUTException::sConsoleBuffer; +u32 JUTException::sConsoleBufferSize; +JUTConsole* JUTException::sConsole; +u32 JUTException::msr; +u32 JUTException::fpscr; + /* 802C4CEC-802C5084 .text errorHandler__12JUTExceptionFUsP9OSContextUlUl */ -void JUTException::errorHandler(unsigned short, OSContext*, unsigned long, unsigned long) { +void JUTException::errorHandler(OSError error, OSContext* context, u32 param_3, u32 param_4) { /* Nonmatching */ + if (error == 0x10) { + OSReport("\x1b[41;37m"); + OSReport(" FPE: 浮動小数点例外が発生しました。アドレスは %08x fpscr=%08x\n", context->srr0, context->fpscr); + u8 stack_38[0x20]; + u32 stack_3c; + u32 stack_40; + u32 stack_44; + u32 stack_48; + if (searchPartialModule(context->srr0, &stack_40, &stack_44, &stack_48, &stack_3c) == 1) { + search_name_part((u8*)stack_3c, stack_38, 0x20); + OSReport("%s:%x section:%d\n", stack_38, stack_48, stack_44); + } + u32 r31 = context->fpscr; + r31 &= ((context->fpscr & 0xf8) << 22) | 0x01f80700; + if (r31 & 0x20000000) { + context->fpscr &= ~0x80; + OSReport(" FPE: Invalid operation(無効な演算)\n"); + if (fpscr & 0x01000000) { + OSReport(" SNaN\n"); + } + if (fpscr & 0x00800000) { + OSReport(" Infinity - Infinity\n"); + } + if (fpscr & 0x00400000) { + OSReport(" Infinity / Infinity\n"); + } + if (fpscr & 0x00200000) { + OSReport(" 0 / 0\n"); + } + if (fpscr & 0x00100000) { + OSReport(" Infinity * 0\n"); + } + if (fpscr & 0x00080000) { + OSReport(" Invalid compare\n"); + } + if (fpscr & 0x0400) { + OSReport(" Software request\n"); + } + if (fpscr & 0x0200) { + OSReport(" Invalid square root\n"); + } + if (fpscr & 0x0100) { + OSReport(" Invalid integer convert\n"); + } + } + if (r31 & 0x10000000) { + context->fpscr &= ~0x40; + OSReport(" FPE: Overflow(オーバーフロー)\n"); + } + if (r31 & 0x08000000) { + context->fpscr &= ~0x20; + OSReport(" FPE: Underflow(アンダーフロー)\n"); + } + if (r31 & 0x04000000) { + context->fpscr &= ~0x10; + OSReport(" FPE: Zero division(0による割り算)\n"); + } + if (r31 & 0x02000000) { + context->fpscr &= ~0x08; + OSReport(" FPE: Inexact result(不正確な結果)\n"); + } + OSReport("\x1b[m"); + return; + } + + msr = PPCMfmsr(); + fpscr = context->fpscr; + OSFillFPUContext(context); + OSSetErrorHandler(error, NULL); + if (error == OS_ERROR_MEMORY_PROTECTION) { + OSProtectRange(0, NULL, 0, 3); + OSProtectRange(1, NULL, 0, 3); + OSProtectRange(2, NULL, 0, 3); + OSProtectRange(3, NULL, 0, 3); + } + + exCallbackObject.callback = sPreUserCallback; + exCallbackObject.error = error; + exCallbackObject.context = context; + exCallbackObject.param_3 = param_3; + exCallbackObject.param_4 = param_4; + + OSSendMessage(&sMessageQueue, &exCallbackObject, OS_MESSAGE_BLOCK); + OSEnableScheduler(); + OSYieldThread(); } /* 802C5084-802C50CC .text setFPException__12JUTExceptionFUl */ -void JUTException::setFPException(unsigned long) { - /* Nonmatching */ +void JUTException::setFPException(u32 fpscr_enable_bits) { + __OSFpscrEnableBits = fpscr_enable_bits; + if (fpscr_enable_bits) { + OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, errorHandler); + } else { + OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, NULL); + } } /* 802C50CC-802C525C .text showFloatSub__12JUTExceptionFif */ -void JUTException::showFloatSub(int, float) { - /* Nonmatching */ +void JUTException::showFloatSub(int index, f32 value) { + if (fpclassify(value) == FP_NAN) { + sConsole->print_f("F%02d: Nan ", index); + } else if (fpclassify(value) == FP_INFINITE) { + if (signbit(value)) { + sConsole->print_f("F%02d:+Inf ", index); + } else { + sConsole->print_f("F%02d:-Inf ", index); + } + } else if (value == 0.0f) { + sConsole->print_f("F%02d: 0.0 ", index); + } else { + sConsole->print_f("F%02d:%+.3E", index, value); + } } /* 802C525C-802C5380 .text showFloat__12JUTExceptionFP9OSContext */ -void JUTException::showFloat(OSContext*) { - /* Nonmatching */ +void JUTException::showFloat(OSContext* context) { + if (!sConsole) { + return; + } + + sConsole->print("-------------------------------- FPR\n"); + for (int i = 0; i < 10; i++) { + showFloatSub(i, context->fpr[i]); + sConsole->print(" "); + showFloatSub(i + 11, context->fpr[i + 11]); + sConsole->print(" "); + showFloatSub(i + 22, context->fpr[i + 22]); + sConsole->print("\n"); + } + showFloatSub(10, context->fpr[10]); + sConsole->print(" "); + showFloatSub(21, context->fpr[21]); + sConsole->print("\n"); } /* 802C5380-802C5440 .text searchPartialModule__12JUTExceptionFUlPUlPUlPUlPUl */ -void JUTException::searchPartialModule(unsigned long, unsigned long*, unsigned long*, unsigned long*, unsigned long*) { - /* Nonmatching */ +bool JUTException::searchPartialModule(u32 address, u32* module_id, u32* section_id, u32* section_offset, u32* name_offset) { + if (!address) { + return false; + } + + OSModuleInfo* module = *(OSModuleInfo**)0x800030C8; + while (module) { + OSSectionInfo* section = (OSSectionInfo*)module->info.sectionInfoOffset; + for (u32 i = 0; i < module->mNumSections; section = section + 1, i++) { + if (section->mSize) { + u32 addr = ALIGN_PREV(section->mOffset, 2); + if ((addr <= address) && (address < addr + section->mSize)) { + if (module_id) + *module_id = module->mId; + if (section_id) + *section_id = i; + if (section_offset) + *section_offset = address - addr; + if (name_offset) + *name_offset = module->mModuleNameOffset; + return true; + } + } + } + + module = (OSModuleInfo*)module->mNext; + } + + return false; } /* 802C5440-802C54B8 .text search_name_part__FPUcPUci */ -void search_name_part(unsigned char*, unsigned char*, int) { - /* Nonmatching */ +void search_name_part(u8* src, u8* dst, int dst_length) { + for (u8* p = src; *p; p++) { + if (*p == '\\') { + src = p; + } + } + + if (*src == '\\') { + src++; + } + + for (int i = 0; (*src != 0) && (i < dst_length);) { + if (*src == '.') + break; + *dst++ = *src++; + i++; + } + + *dst = '\0'; } /* 802C54B8-802C55BC .text showStack__12JUTExceptionFP9OSContext */ -void JUTException::showStack(OSContext*) { - /* Nonmatching */ +void JUTException::showStack(OSContext* context) { + if (!sConsole) { + return; + } + + u32 i; + u32* stackPointer; + sConsole->print("-------------------------------- TRACE\n"); + sConsole->print_f("Address: BackChain LR save\n"); + + for (i = 0, stackPointer = (u32*)context->gpr[1]; (stackPointer != NULL) && (stackPointer != (u32*)0xFFFFFFFF) && (i++ < 0x10);) { + if (i > mTraceSuppress) { + sConsole->print("Suppress trace.\n"); + return; + } + + sConsole->print_f("%08X: %08X %08X\n", stackPointer, stackPointer[0], stackPointer[1]); + showMapInfo_subroutine(stackPointer[1], false); + JUTConsoleManager* manager = JUTConsoleManager::sManager; + manager->drawDirect(true); + waitTime(mPrintWaitTime1); + stackPointer = (u32*)stackPointer[0]; + } } /* 802C55BC-802C586C .text showMainInfo__12JUTExceptionFUsP9OSContextUlUl */ -void JUTException::showMainInfo(unsigned short, OSContext*, unsigned long, unsigned long) { - /* Nonmatching */ +void JUTException::showMainInfo(u16 error, OSContext* context, u32 dsisr, u32 dar) { + if (!sConsole) { + return; + } + + sConsole->print_f("CONTEXT:%08XH (%s EXCEPTION)\n", context, sCpuExpName[error]); + + if (error == OS_ERROR_FLOATING_POINT_EXCEPTION) { + u32 flags = fpscr & (((fpscr & 0xf8) << 0x16) | 0x1f80700); + if ((flags & 0x20000000) != 0) { + sConsole->print_f(" FPE: Invalid operation\n"); + if ((fpscr & 0x1000000) != 0) { + sConsole->print_f(" SNaN\n"); + } + if ((fpscr & 0x800000) != 0) { + sConsole->print_f(" Infinity - Infinity\n"); + } + if ((fpscr & 0x400000) != 0) { + sConsole->print_f(" Infinity / Infinity\n"); + } + if ((fpscr & 0x200000) != 0) { + sConsole->print_f(" 0 / 0\n"); + } + if ((fpscr & 0x100000) != 0) { + sConsole->print_f(" Infinity * 0\n"); + } + if ((fpscr & 0x80000) != 0) { + sConsole->print_f(" Invalid compare\n"); + } + if ((fpscr & 0x400) != 0) { + sConsole->print_f(" Software request\n"); + } + if ((fpscr & 0x200) != 0) { + sConsole->print_f(" Invalid square root\n"); + } + if ((fpscr & 0x100) != 0) { + sConsole->print_f(" Invalid integer convert\n"); + } + } + if ((flags & 0x10000000) != 0) { + sConsole->print_f(" FPE: Overflow\n"); + } + if ((flags & 0x8000000) != 0) { + sConsole->print_f(" FPE: Underflow\n"); + } + if ((flags & 0x4000000) != 0) { + sConsole->print_f(" FPE: Zero division\n"); + } + if ((flags & 0x2000000) != 0) { + sConsole->print_f(" FPE: Inexact result\n"); + } + } + sConsole->print_f("SRR0: %08XH SRR1:%08XH\n", context->srr0, context->srr1); + sConsole->print_f("DSISR: %08XH DAR: %08XH\n", dsisr, dar); } /* 802C586C-802C592C .text showGPR__12JUTExceptionFP9OSContext */ -void JUTException::showGPR(OSContext*) { - /* Nonmatching */ +void JUTException::showGPR(OSContext* context) { + if (!sConsole) { + return; + } + + sConsole->print("-------------------------------- GPR\n"); + for (int i = 0; i < 10; i++) { + sConsole->print_f("R%02d:%08XH R%02d:%08XH R%02d:%08XH\n", i, context->gpr[i], i + 11, + context->gpr[i + 11], i + 22, context->gpr[i + 22]); + } + sConsole->print_f("R%02d:%08XH R%02d:%08XH\n", 10, context->gpr[10], 21, context->gpr[21]); } +JSUList JUTException::sMapFileList(false); + /* 802C592C-802C5A88 .text showMapInfo_subroutine__12JUTExceptionFUlb */ -void JUTException::showMapInfo_subroutine(unsigned long, bool) { - /* Nonmatching */ +bool JUTException::showMapInfo_subroutine(u32 address, bool begin_with_newline) { + if ((address < 0x80000000) || (0x82ffffff < address)) { + return false; + } + + u32 name_offset; + u32 module_id; + u32 section_id; + u32 section_offset; + u8 name_part[36]; + + const char* new_line = "\n"; + if (begin_with_newline == false) { + new_line = ""; + } + + bool result = + searchPartialModule(address, &module_id, §ion_id, §ion_offset, &name_offset); + if (result == true) { + search_name_part((u8*)name_offset, name_part, 32); + sConsole->print_f("%s %s:%x section:%d\n", new_line, name_part, section_offset, section_id); + begin_with_newline = false; + } + + JSUListIterator last = sMapFileList.getEnd(); + JSUListIterator first = sMapFileList.getFirst(); + if (first != last) { + u32 out_addr; + u32 out_size; + char out_line[256]; + + if (result == true) { + result = + queryMapAddress((char*)name_part, section_offset, section_id, &out_addr, &out_size, + out_line, ARRAY_SIZE(out_line), true, begin_with_newline); + } else { + result = queryMapAddress(NULL, address, -1, &out_addr, &out_size, out_line, + ARRAY_SIZE(out_line), true, begin_with_newline); + } + + if (result == true) { + return true; + } + } + + return false; } /* 802C5A88-802C5B94 .text showGPRMap__12JUTExceptionFP9OSContext */ -void JUTException::showGPRMap(OSContext*) { - /* Nonmatching */ +void JUTException::showGPRMap(OSContext* context) { + if (!sConsole) { + return; + } + + bool found_address_register = false; + sConsole->print("-------------------------------- GPRMAP\n"); + + for (int i = 0; i < 31; i++) { + u32 address = context->gpr[i]; + + if (address >= 0x80000000 && 0x83000000 - 1 >= address) { + found_address_register = true; + + sConsole->print_f("R%02d: %08XH", i, address); + if (!showMapInfo_subroutine(address, true)) { + sConsole->print(" no information\n"); + } + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime1); + } + } + + if (!found_address_register) { + sConsole->print(" no register which seem to address.\n"); + } } /* 802C5B94-802C5C58 .text showSRR0Map__12JUTExceptionFP9OSContext */ -void JUTException::showSRR0Map(OSContext*) { - /* Nonmatching */ +void JUTException::showSRR0Map(OSContext* context) { + if (!sConsole) { + return; + } + + sConsole->print("-------------------------------- SRR0MAP\n"); + u32 address = context->srr0; + if (address >= 0x80000000 && 0x83000000 - 1 >= address) { + sConsole->print_f("SRR0: %08XH", address); + if (showMapInfo_subroutine(address, true) == false) { + sConsole->print(" no information\n"); + } + JUTConsoleManager::getManager()->drawDirect(true); + } } /* 802C5C58-802C5D00 .text printDebugInfo__12JUTExceptionFQ212JUTException9EInfoPageUsP9OSContextUlUl */ -void JUTException::printDebugInfo(JUTException::EInfoPage, unsigned short, OSContext*, unsigned long, unsigned long) { - /* Nonmatching */ +void JUTException::printDebugInfo(JUTException::EInfoPage page, OSError error, OSContext* context, u32 param_3, u32 param_4) { + switch (page) { + case EINFO_PAGE_GPR: + return showGPR(context); + case EINFO_PAGE_FLOAT: + showFloat(context); + if (sConsole) { + sConsole->print_f(" MSR:%08XH\t FPSCR:%08XH\n", msr, fpscr); + } + break; + case EINFO_PAGE_STACK: + return showStack(context); + case EINFO_PAGE_GPR_MAP: + return showGPRMap(context); + case EINFO_PAGE_SSR0_MAP: + return showSRR0Map(context); + } } /* 802C5D00-802C5D3C .text isEnablePad__12JUTExceptionCFv */ -void JUTException::isEnablePad() const { - /* Nonmatching */ +bool JUTException::isEnablePad() const { + if (mGamePad == (JUTGamePad*)0xFFFFFFFF) + return true; + + if (mGamePadPort >= 0) + return true; + + return mGamePad; } /* 802C5D3C-802C62A8 .text readPad__12JUTExceptionFPUlPUl */ -void JUTException::readPad(unsigned long*, unsigned long*) { - /* Nonmatching */ +bool JUTException::readPad(u32* out_trigger, u32* out_button) { + bool result = false; + OSTime start_time = OSGetTime(); + OSTime ms; + do { + OSTime end_time = OSGetTime(); + OSTime ticks = end_time - start_time; + ms = ticks / (OS_TIMER_CLOCK / 1000); + } while (ms < 0x32); + + if (mGamePad == (JUTGamePad*)0xffffffff) { + JUTGamePad gamePad0(JUTGamePad::Port_1); + JUTGamePad gamePad1(JUTGamePad::Port_2); + JUTGamePad gamePad2(JUTGamePad::Port_3); + JUTGamePad gamePad3(JUTGamePad::Port_4); + JUTGamePad::read(); + + c3bcnt[0] = + (gamePad0.isPushing3ButtonReset() ? (c3bcnt[0] != 0 ? c3bcnt[0] : OSGetTime()) : 0); + c3bcnt[1] = + (gamePad1.isPushing3ButtonReset() ? (c3bcnt[1] != 0 ? c3bcnt[1] : OSGetTime()) : 0); + c3bcnt[2] = + (gamePad2.isPushing3ButtonReset() ? (c3bcnt[2] != 0 ? c3bcnt[2] : OSGetTime()) : 0); + c3bcnt[3] = + (gamePad3.isPushing3ButtonReset() ? (c3bcnt[3] != 0 ? c3bcnt[3] : OSGetTime()) : 0); + + OSTime resetTime0 = (c3bcnt[0] != 0) ? (OSGetTime() - c3bcnt[0]) : 0; + OSTime resetTime1 = (c3bcnt[1] != 0) ? (OSGetTime() - c3bcnt[1]) : 0; + OSTime resetTime2 = (c3bcnt[2] != 0) ? (OSGetTime() - c3bcnt[2]) : 0; + OSTime resetTime3 = (c3bcnt[3] != 0) ? (OSGetTime() - c3bcnt[3]) : 0; + + gamePad0.checkResetCallback(resetTime0); + gamePad1.checkResetCallback(resetTime1); + gamePad2.checkResetCallback(resetTime2); + gamePad3.checkResetCallback(resetTime3); + + if (out_trigger) { + *out_trigger = gamePad0.getTrigger() | gamePad1.getTrigger() | gamePad2.getTrigger() | + gamePad3.getTrigger(); + } + if (out_button) { + *out_button = gamePad0.getButton() | gamePad1.getButton() | gamePad2.getButton() | + gamePad3.getButton(); + } + + result = true; + } else if (mGamePadPort >= 0) { + JUTGamePad gamePad(mGamePadPort); + OSTime& gamePadTime = c3bcnt[0]; + gamePadTime = + (gamePad.isPushing3ButtonReset() ? (gamePadTime != 0 ? gamePadTime : OSGetTime()) : 0); + + OSTime resetTime = (gamePadTime != 0) ? (OSGetTime() - gamePadTime) : 0; + gamePad.checkResetCallback(resetTime); + + JUTGamePad::read(); + if (out_trigger) { + *out_trigger = gamePad.getTrigger(); + } + if (out_button) { + *out_button = gamePad.getButton(); + } + + result = true; + } else if (mGamePad) { + JUTGamePad::read(); + if (out_trigger) { + *out_trigger = mGamePad->getTrigger(); + } + if (out_button) { + *out_button = mGamePad->getButton(); + } + + result = true; + } + + return result; } /* 802C62A8-802C6724 .text printContext__12JUTExceptionFUsP9OSContextUlUl */ -void JUTException::printContext(unsigned short, OSContext*, unsigned long, unsigned long) { - /* Nonmatching */ +void JUTException::printContext(OSError error, OSContext* context, u32 dsisr, u32 dar) { + bool is_pad_enabled = isEnablePad() == 0; + if (!sErrorManager->mDirectPrint->isActive()) { + return; + } + + if (!sConsole) { + return; + } + + sConsole->print_f("******** EXCEPTION OCCURRED! ********\nFrameMemory:%XH\n", getFrameMemory()); + + int post_callback_executed = false; + while (true) { + showMainInfo(error, context, dsisr, dar); + + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime0); + + if ((mPrintFlags & JUT_PRINT_GPR) != 0) { + printDebugInfo(EINFO_PAGE_GPR, error, context, dsisr, dar); + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime0); + } + if ((mPrintFlags & JUT_PRINT_SRR0_MAP) != 0) { + printDebugInfo(EINFO_PAGE_SSR0_MAP, error, context, dsisr, dar); + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime0); + } + if ((mPrintFlags & JUT_PRINT_GPR_MAP) != 0) { + printDebugInfo(EINFO_PAGE_GPR_MAP, error, context, dsisr, dar); + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime0); + } + if ((mPrintFlags & JUT_PRINT_FLOAT) != 0) { + printDebugInfo(EINFO_PAGE_FLOAT, error, context, dsisr, dar); + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime0); + } + if ((mPrintFlags & JUT_PRINT_STACK) != 0) { + printDebugInfo(EINFO_PAGE_STACK, error, context, dsisr, dar); + JUTConsoleManager::sManager->drawDirect(true); + waitTime(mPrintWaitTime1); + } + + sConsole->print("--------------------------------\n"); + JUTConsoleManager::sManager->drawDirect(true); + + if (post_callback_executed == 0 && sPostUserCallback) { + BOOL enable = OSEnableInterrupts(); + post_callback_executed = true; + (*sPostUserCallback)(error, context, dsisr, dar); + OSRestoreInterrupts(enable); + } + + if (this->field_0x98 == 0 || !is_pad_enabled) { + break; + } + + sConsole->setOutput(sConsole->getOutput() & 1); + } + + if (!is_pad_enabled) { + OSEnableInterrupts(); + + u32 button; + u32 trigger; + + int down = 0; + int up = 0; + do { + readPad(&trigger, &button); + + bool draw = false; + if (trigger == 0x100) { + sConsole->scrollToLastLine(); + draw = true; + } + + if (trigger == 0x200) { + sConsole->scrollToFirstLine(); + draw = true; + } + + if (button == 8) { + JUTConsole* console = sConsole; + up = (down < 3) ? -1 : ((down < 5) ? -2 : ((down < 7) ? -4 : -8)); + + console->scroll(up); + draw = true; + up = 0; + down++; + } else if (button == 4) { + JUTConsole* console = sConsole; + down = (up < 3) ? 1 : ((up < 5) ? 2 : ((up < 7) ? 4 : 8)); + + console->scroll(down); + draw = true; + down = 0; + up++; + } else { + down = 0; + up = 0; + } + + if (draw == true) { + u32 start = VIGetRetraceCount(); + while (start == VIGetRetraceCount()) + ; + JUTConsoleManager::sManager->drawDirect(true); + } + + waitTime(30); + } while (true); + } + + while (true) { + sConsole->scrollToFirstLine(); + JUTConsoleManager::sManager->drawDirect(true); + waitTime(2000); + + int line_offset; + int used_line; + u32 height; + next: + for (u32 i = sConsole->getHeight(); i > 0; i--) { + sConsole->scroll(1); + JUTConsoleManager::sManager->drawDirect(true); + + height = sConsole->getHeight(); + JUTConsole* console = sConsole; + line_offset = console->getLineOffset(); + used_line = console->getUsedLine(); + if ((used_line - height) + 1U <= line_offset) + break; + waitTime(20); + } + + waitTime(3000); + height = sConsole->getHeight(); + JUTConsole* console = sConsole; + line_offset = console->getLineOffset(); + used_line = console->getUsedLine(); + if ((used_line - height) + 1U <= line_offset) { + continue; + } + goto next; + } } /* 802C6724-802C67AC .text waitTime__12JUTExceptionFl */ -void JUTException::waitTime(long) { - /* Nonmatching */ +void JUTException::waitTime(s32 timeout_ms) { + if (timeout_ms) { + OSTime start_time = OSGetTime(); + OSTime ms; + do { + OSTime end_time = OSGetTime(); + OSTime ticks = end_time - start_time; + ms = ticks / (OS_TIMER_CLOCK / 1000); + } while (ms < timeout_ms); + } } /* 802C67AC-802C6868 .text createFB__12JUTExceptionFv */ void JUTException::createFB() { - /* Nonmatching */ + GXRenderModeObj* renderMode = &GXNtsc480Int; + void* end = (void*)OSGetArenaHi(); + u16 width = ALIGN_NEXT(renderMode->fb_width, 16); + u16 height = renderMode->xfb_height; + u32 pixel_count = width * height; + u32 size = pixel_count * 2; + + void* begin = (void*)ALIGN_PREV((u32)end - size, 32); + void* object = (void*)ALIGN_PREV((s32)begin - sizeof(JUTExternalFB), 32); + new (object) JUTExternalFB(renderMode, GX_GM_1_7, begin, size); + + mDirectPrint->changeFrameBuffer(object); + VIConfigure(renderMode); + VISetNextFrameBuffer(begin); + VISetBlack(FALSE); + VIFlush(); + + mFrameMemory = (JUTExternalFB*)object; } /* 802C6868-802C6878 .text setPreUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v */ -void JUTException::setPreUserCallback(void (*)(unsigned short, OSContext*, unsigned long, unsigned long)) { - /* Nonmatching */ +OSErrorHandler JUTException::setPreUserCallback(OSErrorHandler callback) { + OSErrorHandler previous = sPreUserCallback; + sPreUserCallback = callback; + return previous; } /* 802C6878-802C6888 .text setPostUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v */ -void JUTException::setPostUserCallback(void (*)(unsigned short, OSContext*, unsigned long, unsigned long)) { - /* Nonmatching */ +OSErrorHandler JUTException::setPostUserCallback(OSErrorHandler callback) { + OSErrorHandler previous = sPostUserCallback; + sPostUserCallback = callback; + return previous; } /* 802C6888-802C691C .text appendMapFile__12JUTExceptionFPCc */ -void JUTException::appendMapFile(const char*) { - /* Nonmatching */ +void JUTException::appendMapFile(const char* path) { + if (!path) { + return; + } + + JSUListIterator iterator; + for (iterator = sMapFileList.getFirst(); iterator != sMapFileList.getEnd(); ++iterator) { + if (strcmp(path, iterator->mPath) == 0) { + return; + } + } + + JUTExMapFile* mapFile = new JUTExMapFile((char*)path); + sMapFileList.append(&mapFile->mLink); } /* 802C691C-802C6A0C .text queryMapAddress__12JUTExceptionFPcUllPUlPUlPcUlbb */ -void JUTException::queryMapAddress(char*, unsigned long, long, unsigned long*, unsigned long*, char*, unsigned long, bool, bool) { - /* Nonmatching */ +bool JUTException::queryMapAddress(char* mapPath, u32 address, s32 section_id, u32* out_addr, u32* out_size, char* out_line, u32 line_length, bool print, bool begin_with_newline) { + if (mapPath) { + char buffer[80]; + snprintf(buffer, sizeof(buffer), "/maps/%s.map", mapPath); + if (queryMapAddress_single(buffer, address, section_id, out_addr, out_size, out_line, + line_length, print, begin_with_newline) == true) + { + return true; + } + } else if (sMapFileList.getFirst() != sMapFileList.getEnd()) { + if (queryMapAddress_single(sMapFileList.getFirst()->getObject()->mPath, address, -1, + out_addr, out_size, out_line, line_length, print, + begin_with_newline) == true) + { + return true; + } + } + + return false; } /* 802C6A0C-802C6D60 .text queryMapAddress_single__12JUTExceptionFPcUllPUlPUlPcUlbb */ -void JUTException::queryMapAddress_single(char*, unsigned long, long, unsigned long*, unsigned long*, char*, unsigned long, bool, bool) { +bool JUTException::queryMapAddress_single(char* mapPath, u32 address, s32 section_id, u32* out_addr, u32* out_size, char* out_line, u32 line_length, bool print, bool begin_with_newline) { /* Nonmatching */ + if (!mapPath) { + return false; + } + + char section_name[16]; + char buffer[0x200]; + JUTDirectFile file; + int i = 0; + if (!file.fopen(mapPath)) { + return false; + } + + int result = 0; + do { + char* src = buffer; + int found_section = 0; + do { + i++; + while (true) { + while (true) { + int length = file.fgets(buffer, ARRAY_SIZE(buffer)); + if (length < 0) + goto next_section; + if (buffer[0] == '.') + break; + } + + char* dst = section_name; + int i = 0; + char* src = buffer + 1; + for (; *src != '\0'; i++, dst++, src++) { + *dst = *src; + if (*src == ' ' || i == 0xf) + break; + } + + section_name[i] = 0; + if (*src == 0) + break; + + if (src[1] == 's' && src[2] == 'e' && src[3] == 'c' && src[4] == 't') { + found_section = true; + break; + } + } + if ((found_section & 0xFF) == 0) + goto end; + } while (section_id >= 0 && section_id != i); + next_section:; + + u32 addr; + int size; + do { + int length; + do { + length = file.fgets(buffer, ARRAY_SIZE(buffer)); + if (length <= 4) + goto next_symbol; + } while ((length < 28) || (buffer[28] != '4')); + + addr = strtol(buffer + 19, NULL, 16); + addr = ((buffer[18] - '0') << 28) | addr; + size = strtol(buffer + 11, NULL, 16); + } while (addr > address || address >= addr + size); + + if (out_addr) + *out_addr = addr; + + if (out_size) + *out_size = size; + + if (out_line) { + src = buffer + 0x1e; + char* dst = out_line; + u32 length = 0; + for (; length < line_length - 1; src++) { + u32 ch = *(u8*)src; + if (ch < ' ' && ch != '\t') + break; + if (((int)ch == ' ' || ch == '\t') && (length != 0)) { + if (dst[-1] != ' ') { + *dst = ' '; + dst++; + length++; + } + } else { + *dst = ch; + dst++; + length++; + } + } + if (length != 0 && dst[-1] == ' ') { + dst--; + } + *dst = 0; + if (print) { + if (begin_with_newline) { + sConsole->print("\n"); + } + sConsole->print_f(" [%08X]: .%s [%08X: %XH]\n %s\n", address, section_name, addr, size, out_line); + begin_with_newline = false; + } + } + + result = true; + + next_symbol:; + } while (section_id >= 0 && section_id != i); + + if (print && begin_with_newline) { + sConsole->print("\n"); + } + +end: + file.fclose(); + bool bresult = (result & 0xff) != 0; + return bresult; } /* 802C6D60-802C6E40 .text createConsole__12JUTExceptionFPvUl */ -void JUTException::createConsole(void*, unsigned long) { - /* Nonmatching */ +void JUTException::createConsole(void* console_buffer, u32 console_buffer_size) { + if (!console_buffer || !console_buffer_size) { + return; + } + + u32 lines = JUTConsole::getLineFromObjectSize(console_buffer_size, 0x32); + if (lines != 0) { + sConsoleBuffer = console_buffer; + sConsoleBufferSize = console_buffer_size; + sConsole = JUTConsole::create(0x32, console_buffer, console_buffer_size); + + JUTConsoleManager* manager = JUTConsoleManager::sManager; + manager->setDirectConsole(sConsole); + + sConsole->setFontSize(10.0, 6.0); + sConsole->setPosition(12, 40); + sConsole->setHeight(23); + sConsole->setVisible(true); + sConsole->setOutput(JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE); + } } /* 802C6E40-802C6E60 .text __ct__13JUTExternalFBFP16_GXRenderModeObj8_GXGammaPvUl */ -JUTExternalFB::JUTExternalFB(_GXRenderModeObj*, _GXGamma, void*, unsigned long) { - /* Nonmatching */ -} - -/* 802C6E60-802C6EC0 .text __dt__12JUTExceptionFv */ -JUTException::~JUTException() { - /* Nonmatching */ -} - -/* 802C6F08-802C6F5C .text __dt__39JSUListFv */ -JSUList::~JSUList() { - /* Nonmatching */ +JUTExternalFB::JUTExternalFB(GXRenderModeObj* renderMode, GXGamma gamma, void* buffer, u32 size) { + mRenderMode = renderMode; + mSize = size; + field_0x0C = 1; + mGamma = gamma; + field_0x10 = false; } From 1ad444aa73d7d5ac8c2ecb29862866f44480e989 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 21 Sep 2023 00:09:23 -0400 Subject: [PATCH 21/89] Started d_a_arrow (#64) * More d_bg header improvements * Cleanup, use mtx inlines in more places * Added JntHit_c to headers * Started d_a_arrow --- include/SSystem/SComponent/c_bg_s_chk.h | 6 +- include/SSystem/SComponent/c_bg_s_lin_chk.h | 6 +- include/SSystem/SComponent/c_bg_w.h | 2 +- include/SSystem/SComponent/c_m3d_g_cps.h | 4 +- include/d/actor/d_a_arrow.h | 90 ++++ include/d/actor/d_a_player.h | 4 +- include/d/actor/d_a_player_link.h | 4 +- include/d/d_bg_s_gnd_chk.h | 4 +- include/d/d_bg_s_grp_pass_chk.h | 28 +- include/d/d_bg_s_lin_chk.h | 15 +- include/d/d_bg_s_poly_pass_chk.h | 16 +- include/d/d_bg_w.h | 3 +- include/d/d_cc_d.h | 8 +- include/d/d_com_inf_game.h | 11 + include/d/d_jnt_hit.h | 30 ++ include/d/d_particle.h | 1 + include/f_op/f_op_actor.h | 4 +- include/f_op/f_op_actor_mng.h | 8 +- include/m_Do/m_Do_mtx.h | 16 +- src/d/actor/d_a_arrow.cpp | 434 +++++++++++--------- src/d/actor/d_a_branch.cpp | 2 +- src/d/actor/d_a_kaji.cpp | 4 +- src/d/actor/d_a_nh.cpp | 11 +- src/d/actor/d_a_obj_movebox.cpp | 4 +- src/d/actor/d_a_obj_paper.cpp | 2 +- src/d/actor/d_a_scene_change.cpp | 6 +- src/d/actor/d_a_spotbox.cpp | 8 +- 27 files changed, 476 insertions(+), 255 deletions(-) create mode 100644 include/d/actor/d_a_arrow.h create mode 100644 include/d/d_jnt_hit.h diff --git a/include/SSystem/SComponent/c_bg_s_chk.h b/include/SSystem/SComponent/c_bg_s_chk.h index 4b76bad12..bb28ccce6 100644 --- a/include/SSystem/SComponent/c_bg_s_chk.h +++ b/include/SSystem/SComponent/c_bg_s_chk.h @@ -22,7 +22,11 @@ private: /* 0x10 */ // __vtable__ public: - cBgS_Chk(); + cBgS_Chk() { + mPolyPassChk = NULL; + mGrpPassChk = NULL; + unk_0x0C = 1; + } void SetExtChk(cBgS_Chk&); bool ChkSameActorPid(unsigned int) const; diff --git a/include/SSystem/SComponent/c_bg_s_lin_chk.h b/include/SSystem/SComponent/c_bg_s_lin_chk.h index f1ff9f872..c690833f3 100644 --- a/include/SSystem/SComponent/c_bg_s_lin_chk.h +++ b/include/SSystem/SComponent/c_bg_s_lin_chk.h @@ -18,13 +18,13 @@ public: /* 0x054 */ bool mBackFlag; public: - cBgS_LinChk(); + cBgS_LinChk() { ct(); } void ct(); void Set2(cXyz*, cXyz*, unsigned int); void PreCalc(); void GetCross(); - virtual ~cBgS_LinChk(); + virtual ~cBgS_LinChk() {} void ClrHit() { field_0x4c &= ~16; } void SetHit() { field_0x4c |= 16; } @@ -37,6 +37,6 @@ public: bool GetPreWallChk() const { return mPreWallChk; } bool GetPreGroundChk() const { return mPreGroundChk; } bool GetPreRoofChk() const { return mPreRoofChk; } -}; +}; // Size: 0x58 #endif /* C_BG_S_LIN_CHK_H */ diff --git a/include/SSystem/SComponent/c_bg_w.h b/include/SSystem/SComponent/c_bg_w.h index 9bd6781ea..ec806ff68 100644 --- a/include/SSystem/SComponent/c_bg_w.h +++ b/include/SSystem/SComponent/c_bg_w.h @@ -87,7 +87,7 @@ public: virtual void ClassifyPlane(); virtual void ChkPolyThrough(int, cBgS_PolyPassChk*); virtual void ChkShdwDrawThrough(int, cBgS_PolyPassChk*); - virtual void ChkGrpThrough(int, cBgS_GrpPassChk*, int); + virtual bool ChkGrpThrough(int, cBgS_GrpPassChk*, int); /* 0x08 */ Mtx* mpModelMtx; /* 0x0C */ Mtx mOldMtx; diff --git a/include/SSystem/SComponent/c_m3d_g_cps.h b/include/SSystem/SComponent/c_m3d_g_cps.h index e9ab1bbc4..510ef3869 100644 --- a/include/SSystem/SComponent/c_m3d_g_cps.h +++ b/include/SSystem/SComponent/c_m3d_g_cps.h @@ -15,8 +15,8 @@ class cM3dGCps : public cM3dGLin { public: /* 0x1C */ f32 mRadius; - cM3dGCps(void); - virtual ~cM3dGCps(void); + cM3dGCps(void) {} + virtual ~cM3dGCps(void) {} void Set(const cXyz&, const cXyz&, f32); void Set(const cM3dGCpsS&); void SetCps(const cM3dGCps&); diff --git a/include/d/actor/d_a_arrow.h b/include/d/actor/d_a_arrow.h new file mode 100644 index 000000000..8be7fd254 --- /dev/null +++ b/include/d/actor/d_a_arrow.h @@ -0,0 +1,90 @@ + +#include "f_op/f_op_actor_mng.h" +#include "d/d_cc_d.h" +#include "d/d_bg_s_lin_chk.h" +#include "d/d_bg_s_gnd_chk.h" +#include "d/d_particle.h" +#include "dolphin/types.h" + +class daArrow_c : fopAc_ac_c { +public: + enum ArrowType { + NORMAL_ARROWS = 0, + FIRE_ARROWS = 1, + ICE_ARROWS = 2, + LIGHT_ARROWS = 3, + }; + + BOOL _createHeap(); + void _atHit(dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); + void checkCreater(); + void setLightEffect(); + void setBlur(); + void createBlur(); + void setArrowShootSe(); + void setDrawShapeMaterial(); + void arrowShooting(); + void arrowUseMp(); + void ShieldReflect(); + void check_water_in(); + BOOL changeArrowMp(); + void changeArrowType(); + void changeArrowTypeNotReady(); + void setRoomInfo(); + void setKeepMatrix(); + void setStopActorMatrix(); + void procWait(); + void procMove(); + void procReturn(); + void procStop_BG(); + void procStop_Actor(); + void procWater(); + void checkRestMp(); + void setTypeByPlayer(); + void createInit(); + BOOL _execute(); + BOOL _draw(); + s32 _create(); + daArrow_c(); + BOOL _delete(); + +public: + /* 0x290 */ bool mbShotByZelda; + /* 0x291 */ u8 field_0x291[0x294 - 0x291]; + /* 0x294 */ J3DModel* mpModel; + /* 0x298 */ u8 field_0x298[0x2A0 - 0x298]; + /* 0x2A0 */ dBgS_ArrowLinChk mLinChk; + /* 0x30C */ dBgS_ObjGndChk mGndChk; + /* 0x360 */ dCcD_Stts mStts; + /* 0x39C */ dCcD_Cps mCps; + /* 0x4D4 */ dCcD_Sph mSph; + /* 0x600 */ u8 field_0x600[0x601 - 0x600]; + /* 0x601 */ u8 mArrowType; + /* 0x602 */ s16 field_0x602; + /* 0x604 */ s16 field_0x604; + /* 0x606 */ u8 field_0x606[0x610 - 0x606]; + /* 0x610 */ s32 mHitActorProcID; + /* 0x614 */ s32 mHitJointIndex; + /* 0x618 */ cXyz field_0x618; + /* 0x624 */ u8 field_0x624[0x668 - 0x624]; + /* 0x668 */ dPa_followEcallBack mPtclFollowCb; + /* 0x67C */ csXyz field_0x67c; + /* 0x682 */ u8 field_0x682; + /* 0x683 */ u8 field_0x683[0x684 - 0x683]; + /* 0x684 */ u32 field_0x684; + /* 0x688 */ bool field_0x688; + /* 0x689 */ u8 field_0x689[0x6A8 - 0x689]; + /* 0x6A8 */ cXyz field_0x6a8; + /* 0x6B4 */ u8 field_0x6B4[0x6E6 - 0x6B4]; + /* 0x6E6 */ csXyz field_0x6e6; + /* 0x6EC */ fopAc_ac_c* field_0x6ec; + /* 0x6F0 */ cXyz mNearestHitPos; + /* 0x6FC */ f32 mNearestHitDist; + /* 0x700 */ bool mbHitActor; + /* 0x701 */ u8 field_0x701[0x704 - 0x701]; + + static u8 m_keep_type; + static const char m_arc_name[]; +}; + +STATIC_ASSERT(sizeof(daArrow_c) == 0x704); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 9ee182448..1ea7d325d 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -90,8 +90,8 @@ public: /* 0x300 */ f32 field_0x300; /* 0x304 */ daPy_demo_c mDemo; - virtual void getLeftHandMatrix(); - virtual void getRightHandMatrix(); + virtual MtxP getLeftHandMatrix(); + virtual MtxP getRightHandMatrix(); virtual void getGroundY(); virtual void getTactMusic() const; virtual void getTactTimerCancel() const; diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index f885549bb..05fa50c6f 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -839,8 +839,8 @@ public: void checkRopeTag(); void checkPlayerNoDraw(); void getGroundY(); - void getLeftHandMatrix(); - void getRightHandMatrix(); + MtxP getLeftHandMatrix(); + MtxP getRightHandMatrix(); void checkPlayerFly() const; void checkFrontRoll() const; void checkBottleSwing() const; diff --git a/include/d/d_bg_s_gnd_chk.h b/include/d/d_bg_s_gnd_chk.h index a669d6c9e..de2c971c1 100644 --- a/include/d/d_bg_s_gnd_chk.h +++ b/include/d/d_bg_s_gnd_chk.h @@ -7,8 +7,8 @@ class dBgS_GndChk : public cBgS_GndChk, public dBgS_Chk { public: /* 8007757C */ dBgS_GndChk() { - this->SetPolyPassChk(this->GetPolyPassChkInfo()); - this->SetGrpPassChk(this->GetGrpPassChkInfo()); + SetPolyPassChk(GetPolyPassChkInfo()); + SetGrpPassChk(GetGrpPassChkInfo()); } /* 800775F0 */ virtual ~dBgS_GndChk() {} }; // Size: 0x54 diff --git a/include/d/d_bg_s_grp_pass_chk.h b/include/d/d_bg_s_grp_pass_chk.h index 54e695478..703607fbe 100644 --- a/include/d/d_bg_s_grp_pass_chk.h +++ b/include/d/d_bg_s_grp_pass_chk.h @@ -6,23 +6,33 @@ class dBgS_GrpPassChk : public cBgS_GrpPassChk { public: enum { - /* 0x1 */ NORMAL_GRP = 1, - /* 0x2 */ WATER_GRP = 2, - /* 0x3 */ FULL_GRP = NORMAL_GRP | WATER_GRP | 4 | 8, + NORMAL_GRP = 0x01, + WATER_GRP = 0x02, + YOGAN_GRP = 0x04, // Lava + DOKU_GRP = 0x08, // Unused, for poison? + SPL_GRP = WATER_GRP | YOGAN_GRP | DOKU_GRP, + FULL_GRP = NORMAL_GRP | SPL_GRP, + LIGHT_GRP = 0x10, }; /* 80077BA0 */ dBgS_GrpPassChk() { mGrp = NORMAL_GRP; } /* 80077BC4 */ virtual ~dBgS_GrpPassChk() {} - void OnWaterGrp() { mGrp |= WATER_GRP; } - void OnSpl() { mGrp |= WATER_GRP; } void OnNormalGrp() { mGrp |= NORMAL_GRP; } - void OffNormalGrp() { mGrp &= ~NORMAL_GRP; } - void OffFullGrp() { mGrp &= ~FULL_GRP; } + void OnWaterGrp() { mGrp |= WATER_GRP; } + void OnYoganGrp() { mGrp |= YOGAN_GRP; } + void OnSpl() { mGrp |= SPL_GRP; } void OnAll() { mGrp |= FULL_GRP; } - u32 MaskNormalGrp() const {return mGrp & 1; } - u32 MaskWaterGrp() const {return mGrp & 2; } + void OnLightGrp() { mGrp |= LIGHT_GRP; } + void OffNormalGrp() { mGrp &= ~NORMAL_GRP; } + void OffWaterGrp() { mGrp &= ~WATER_GRP; } + void OffFullGrp() { mGrp &= ~FULL_GRP; } + u32 MaskNormalGrp() const { return mGrp & NORMAL_GRP; } + u32 MaskWaterGrp() const { return mGrp & WATER_GRP; } + u32 MaskYoganGrp() const { return mGrp & YOGAN_GRP; } + u32 MaskDokuGrp() const { return mGrp & DOKU_GRP; } + u32 MaskLightGrp() const { return mGrp & LIGHT_GRP; } private: /* 0x4 */ u32 mGrp; }; diff --git a/include/d/d_bg_s_lin_chk.h b/include/d/d_bg_s_lin_chk.h index bda6674e8..6f4d533e5 100644 --- a/include/d/d_bg_s_lin_chk.h +++ b/include/d/d_bg_s_lin_chk.h @@ -8,10 +8,13 @@ class fopAc_ac_c; class dBgS_LinChk : public cBgS_LinChk, public dBgS_Chk { public: - /* 80077C68 */ dBgS_LinChk(); + /* 80077C68 */ dBgS_LinChk() { + SetPolyPassChk(GetPolyPassChkInfo()); + SetGrpPassChk(GetGrpPassChkInfo()); + } /* 80077D64 */ void Set(cXyz const* pi_start, cXyz const* pi_end, fopAc_ac_c const*); - /* 80077CDC */ virtual ~dBgS_LinChk(); + /* 80077CDC */ virtual ~dBgS_LinChk() {} /* 0x00 cBgS_LinChk */; /* 0x58 dBgS_Chk */; @@ -40,9 +43,13 @@ public: class dBgS_ArrowLinChk : public dBgS_LinChk { public: - /* 800781D8 */ dBgS_ArrowLinChk(); + /* 800781D8 */ dBgS_ArrowLinChk() { + SetArrow(); // Don't check arrows + OnYoganGrp(); // Check lava + OnNormalGrp(); + } - /* 80078240 */ virtual ~dBgS_ArrowLinChk(); + /* 80078240 */ virtual ~dBgS_ArrowLinChk() {} }; class dBgS_ObjLinChk : public dBgS_LinChk { diff --git a/include/d/d_bg_s_poly_pass_chk.h b/include/d/d_bg_s_poly_pass_chk.h index b8135a719..22d5d7c37 100644 --- a/include/d/d_bg_s_poly_pass_chk.h +++ b/include/d/d_bg_s_poly_pass_chk.h @@ -10,10 +10,10 @@ public: /* 0x4 */ u8 mbObjThrough; /* 0x5 */ u8 mbCamThrough; /* 0x6 */ u8 mbLinkThrough; - /* 0x7 */ u8 mbArrowsAndLightThrough; + /* 0x7 */ u8 mbArrowThrough; // Also light /* 0x8 */ u8 mbBombThrough; /* 0x9 */ u8 mbBoomerangThrough; - /* 0xA */ u8 mbHookshotThrough; + /* 0xA */ u8 mbRopeThrough; // Actually Hookshot? }; class dBgS_PolyPassChk : public cBgS_PolyPassChk { @@ -22,14 +22,20 @@ public: mbObjThrough = 0; mbCamThrough = 0; mbLinkThrough = 0; - mbArrowsAndLightThrough = 0; + mbArrowThrough = 0; mbBombThrough = 0; mbBoomerangThrough = 0; - mbHookshotThrough = 0; + mbRopeThrough = 0; } virtual ~dBgS_PolyPassChk() {} - void SetObj() { mbObjThrough = 1; } + void SetObj() { mbObjThrough = true; } + void SetCam() { mbCamThrough = true; } + void SetLink() { mbLinkThrough = true; } + void SetArrow() { mbArrowThrough = true; } + void SetBomb() { mbBombThrough = true; } + void SetBoomerang() { mbBoomerangThrough = true; } + void SetRope() { mbRopeThrough = true; } }; STATIC_ASSERT(sizeof(dBgS_PolyPassChk) == 0xC); diff --git a/include/d/d_bg_w.h b/include/d/d_bg_w.h index 79df61fed..f65e266d4 100644 --- a/include/d/d_bg_w.h +++ b/include/d/d_bg_w.h @@ -2,6 +2,7 @@ #define D_BG_W_H #include "SSystem/SComponent/c_bg_w.h" +#include "SSystem/SComponent/c_sxyz.h" class dBgS_Acch; class cM3dGPla; @@ -45,7 +46,7 @@ public: virtual ~dBgW() {} virtual void ChkPolyThrough(int, cBgS_PolyPassChk*); virtual void ChkShdwDrawThrough(int, cBgS_PolyPassChk*); - virtual void ChkGrpThrough(int, cBgS_GrpPassChk*, int); + virtual bool ChkGrpThrough(int, cBgS_GrpPassChk*, int); virtual void CrrPos(cBgS_PolyInfo&, void*, bool, cXyz*, csXyz*, csXyz*); virtual void TransPos(cBgS_PolyInfo&, void*, bool, cXyz*, csXyz*, csXyz*); virtual void MatrixCrrPos(cBgS_PolyInfo&, void*, bool, cXyz*, csXyz*, csXyz*); diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index 6a128e776..f2fb07ea4 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -173,6 +173,7 @@ public: u8 GetHitMark() { return mHitMark; } void SetRVec(cXyz& vec) { mRVec = vec; } void SetHitPos(cXyz& pos) { mHitPos = pos; } + cXyz* GetHitPosP() { return &mHitPos; } // private: /* 0x1C */ u8 mSe; @@ -202,6 +203,7 @@ public: void SetRVec(cXyz& vec) { mRVec = vec; } cXyz* GetVecP() { return &mVec; } void SetHitPos(cXyz& pos) { mHitPos = pos; } + cXyz* GetHitPosP() { return &mHitPos; } private: /* 0x1C */ u8 mSe; @@ -344,6 +346,8 @@ public: void SetAtRVec(cXyz& vec) { mGObjAt.SetRVec(vec); } void SetTgHitPos(cXyz& pos) { mGObjTg.SetHitPos(pos); } void SetAtHitPos(cXyz& pos) { mGObjAt.SetHitPos(pos); } + cXyz* GetAtHitPosP() { return mGObjAt.GetHitPosP(); } + cXyz* GetTgHitPosP() { return mGObjTg.GetHitPosP(); } protected: /* 0x050 */ dCcD_GObjAt mGObjAt; @@ -372,7 +376,7 @@ public: void Set(dCcD_SrcSph const&); void StartCAt(cXyz&); void MoveCAt(cXyz&); - virtual cCcD_ShapeAttr* GetShapeAttr(); + virtual cCcD_ShapeAttr* GetShapeAttr() { return (cCcD_ShapeAttr*)this; } virtual ~dCcD_Sph() {} }; // Size = 0x12C @@ -380,7 +384,7 @@ public: class dCcD_Cps : public dCcD_GObjInf, public cCcD_CpsAttr { public: void Set(dCcD_SrcCps const&); - cCcD_ShapeAttr* GetShapeAttr(); + cCcD_ShapeAttr* GetShapeAttr() { return (cCcD_ShapeAttr*)this; } void CalcAtVec(); void CalcTgVec(); virtual ~dCcD_Cps() {} diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 6b63209bb..e4c763af9 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -186,6 +186,9 @@ public: dTimer_c* getTimerPtr() { return mTimerInfo.mTimerPtr; } s32 getTimerMode() { return mTimerInfo.mTimerMode; } + + s16 getItemMagicCount() { return mItemMagicCount; } + void setItemMagicCount(s16 magic) { mItemMagicCount = magic; } /* 0x0000 */ dBgS mBgS; /* 0x1404 */ dCcS mCcS; @@ -984,6 +987,14 @@ inline void dComIfGp_setMessageCountNumber(s16 num) { g_dComIfG_gameInfo.play.setMessageCountNumber(num); } +inline s16 dComIfGp_getItemMagicCount() { + return g_dComIfG_gameInfo.play.getItemMagicCount(); +} + +inline void dComIfGp_setItemMagicCount(s16 magic) { + g_dComIfG_gameInfo.play.setItemMagicCount(magic); +} + /** * === EVENT ===*/ diff --git a/include/d/d_jnt_hit.h b/include/d/d_jnt_hit.h new file mode 100644 index 000000000..2b7d7292d --- /dev/null +++ b/include/d/d_jnt_hit.h @@ -0,0 +1,30 @@ +#ifndef D_JNT_HIT_H +#define D_JNT_HIT_H + +#include "global.h" +#include "SSystem/SComponent/c_xyz.h" +#include "JSystem/J3DGraphAnimator/J3DModel.h" + +struct __jnt_hit_data_c { +public: + /* 0x0 */ s16 mJointIndex; + /* 0x2 */ s16 field_0x2; + /* 0x4 */ f32 field_0x4; + /* 0x8 */ cXyz* field_0x8; +}; + +class JntHit_c { +public: + J3DModel* getModel() { return mpModel; } + + /* 0x00 */ __jnt_hit_data_c* mpHitData; + /* 0x04 */ J3DModel* mpModel; + /* 0x08 */ cXyz* field_0x08; + /* 0x0C */ short* field_0x0c; + /* 0x10 */ short* field_0x10; + /* 0x14 */ short* mpJointIndexes; + /* 0x18 */ s16 mHitDataCount; + /* 0x1A */ u8 field_0x1A[0x20 - 0x1A]; +}; + +#endif /* D_JNT_HIT_H */ diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 5d3713edf..e3ba9c64c 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -47,6 +47,7 @@ public: class dPa_followEcallBack : public dPa_levelEcallBack { public: + dPa_followEcallBack(u8, u8); virtual ~dPa_followEcallBack(); virtual void execute(JPABaseEmitter*); diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 92b134fd4..05a0bfca8 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -168,7 +168,7 @@ struct actor_attention_types { /* 0x14 */ u32 mFlags; }; // Size = 0x18 -class dJntCol_c; +class JntHit_c; struct cull_sphere { /* 0x0 */ Vec mCenter; @@ -211,7 +211,7 @@ public: } mCull; /* 0x248 */ f32 mCullSizeFar; /* 0x24C */ J3DModel* model; - /* 0x250 */ dJntCol_c* mJntCol; + /* 0x250 */ JntHit_c* mJntHit; /* 0x254 */ f32 speedF; /* 0x258 */ f32 mGravity; /* 0x25C */ f32 mMaxFallSpeed; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index cf98a4cad..85f10094b 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -119,8 +119,8 @@ inline void fopAcM_SetParam(void* p_actor, u32 param) { fpcM_SetParam(p_actor, param); } -inline void fopAcM_SetJntCol(fopAc_ac_c* i_actorP, dJntCol_c* i_jntColP) { - i_actorP->mJntCol = i_jntColP; +inline void fopAcM_SetJntHit(fopAc_ac_c* i_actorP, JntHit_c* i_jntHitP) { + i_actorP->mJntHit = i_jntHitP; } inline s16 fopAcM_GetProfName(void* pActor) { @@ -251,8 +251,8 @@ inline f32 fopAcM_GetMaxFallSpeed(fopAc_ac_c* p_actor) { return p_actor->mMaxFallSpeed; } -inline dJntCol_c* fopAcM_GetJntCol(fopAc_ac_c* i_actor) { - return i_actor->mJntCol; +inline JntHit_c* fopAcM_GetJntHit(fopAc_ac_c* i_actor) { + return i_actor->mJntHit; } inline void fopAcM_setCullSizeFar(fopAc_ac_c* i_actor, f32 i_far) { diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index 3c7a63d9c..432ba072b 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -135,6 +135,12 @@ public: */ /* 8000CD64 */ static inline void transS(cXyz const& xyz) { MTXTrans(now, xyz.x, xyz.y, xyz.z); } + /** + * Translates a new Matrix by the given cXyz and then concatenates it with the `now` matrix + * @param xyz The xyz translation vector + */ + /* 8000CD64 */ static inline void transM(cXyz const& xyz) { transM(xyz.x, xyz.y, xyz.z); } + /** * Translates a new Matrix by the given X, Y, and Z values and then concatenates it with the `now` matrix * @param x The x-axis translation value @@ -153,7 +159,7 @@ public: * Scales a new Matrix by the given cXyz and then concatenates it with the `now` matrix * @param xyz The xyz scale vector */ - /* 8000CE70 */ static void scaleM(cXyz const& xyz); + /* 8000CE70 */ static void scaleM(cXyz const& xyz) { scaleM(xyz.x, xyz.y, xyz.z); } /** * Scales a new Matrix by the given X, Y, and Z values and then concatenates it with the `now` matrix @@ -166,7 +172,7 @@ public: /* 8000CE9C */ static void XYZrotS(csXyz const& xyz); /** - * Rotates the `now` matrix by the given csXyz in the order Z, Y, X + * Rotates the `now` matrix by the given csXyz in the order X, Y, Z * @param xyz The xyz rotation vector */ /* 8000CED4 */ static void XYZrotM(csXyz const& xyz); @@ -174,10 +180,10 @@ public: /* 8000CF0C */ static void ZXYrotS(csXyz const& xyz); /** - * Rotates the `now` matrix by the given csXyz in the order X, Y, Z + * Rotates the `now` matrix by the given csXyz in the order Z, X, Y * @param xyz The xyz rotation vector */ - /* 8000CF44 */ static void ZXYrotM(csXyz const& xyz); + /* 8000CF44 */ static void ZXYrotM(csXyz const& xyz) { ZXYrotM(xyz.x, xyz.y, xyz.z); } /* 8000CF7C */ static void quatM(Quaternion const*); @@ -232,7 +238,7 @@ public: static void XYZrotS(s16 x, s16 y, s16 z) { mDoMtx_XYZrotS(now, x, y, z); } /** - * Rotates the `now` matrix by the given X, Y, and Z values in the order Z, Y, X + * Rotates the `now` matrix by the given X, Y, and Z values in the order X, Y, Z * @param x The x-axis rotation value * @param y The y-axis rotation value * @param z The z-axis rotation value diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index 9b7dcbe55..a0c831c18 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -3,47 +3,128 @@ // Translation Unit: d_a_arrow.cpp // -#include "d_a_arrow.h" +#include "d/actor/d_a_arrow.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "m_Do/m_Do_mtx.h" +#include "d/d_com_inf_game.h" +#include "d/d_procname.h" +#include "d/d_npc.h" +#include "d/actor/d_a_player.h" +#include "d/d_jnt_hit.h" #include "dolphin/types.h" +const char daArrow_c::m_arc_name[] = "Link"; + /* 800D455C-800D457C .text createHeap_CB__FP10fopAc_ac_c */ -void createHeap_CB(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL createHeap_CB(fopAc_ac_c* i_this) { + return ((daArrow_c*)i_this)->_createHeap(); } /* 800D457C-800D4648 .text _createHeap__9daArrow_cFv */ -void daArrow_c::_createHeap() { - /* Nonmatching */ +BOOL daArrow_c::_createHeap() { + // arrowglitter.bdl for Light Arrows, arrow.bdl otherwise. + s32 modelFileIndex = (mArrowType == LIGHT_ARROWS ? 0x38 : 0x37) & 0xFFFF; + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arc_name, modelFileIndex); + JUT_ASSERT(190, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x00080000, 0x11000022); + if (!mpModel) { + return FALSE; + } + return TRUE; } /* 800D4648-800D4668 .text atHit_CB__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -void atHit_CB(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) { - /* Nonmatching */ +void atHit_CB(fopAc_ac_c* i_this, dCcD_GObjInf* thisObjInf, fopAc_ac_c* hitActor, dCcD_GObjInf* hitObjInf) { + ((daArrow_c*)i_this)->_atHit(thisObjInf, hitActor, hitObjInf); } /* 800D4668-800D47C0 .text _atHit__9daArrow_cFP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -void daArrow_c::_atHit(dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) { - /* Nonmatching */ +void daArrow_c::_atHit(dCcD_GObjInf* thisObjInf, fopAc_ac_c* hitActor, dCcD_GObjInf* hitObjInf) { + // Keep track of which actor this arrow hit as well as the position the hit occurred at. + if (!hitActor) { + return; + } + if (!fopAc_IsActor(hitActor)) { + return; + } + if (!fopAcM_GetJntHit(hitActor)) { + return; + } + + cXyz hitPos(*thisObjInf->GetAtHitPosP()); + f32 hitDist = (hitPos - current.pos).abs(); + if (hitDist < mNearestHitDist) { + mNearestHitDist = hitDist; + mHitActorProcID = fpcM_GetID(hitActor); + if (hitObjInf->ChkTgShield()) { + mbHitActor = false; + field_0x6ec = NULL; + } else { + mbHitActor = true; + field_0x6ec = hitActor; + } + mNearestHitPos = *thisObjInf->GetAtHitPosP(); + } } /* 800D47C0-800D4814 .text checkCreater__9daArrow_cFv */ void daArrow_c::checkCreater() { - /* Nonmatching */ + // Check if this arrow was fired by Princess Zelda (during the Ganondorf fight). + fopAc_ac_c* archer; + if (fopAcM_SearchByID(mParentPcId, &archer)) { + if (fpcM_GetName(archer) == PROC_PZ) { + mbShotByZelda = true; + } + } } /* 800D4814-800D48E8 .text setLightEffect__9daArrow_cFv */ void daArrow_c::setLightEffect() { - /* Nonmatching */ + if (field_0x682 == mArrowType) { + if (mArrowType == NORMAL_ARROWS) { + return; + } + if (!field_0x688) { + field_0x684 = fopAcM_createChild( + PROC_ARROW_LIGHTEFF, fpcM_GetID(this), + mArrowType, &field_0x6a8, + current.roomNo, &shape_angle, NULL, -1, NULL + ); + if (field_0x684 != -1) { + field_0x688 = true; + } + } + } else { + fopAcM_delete(fopAcM_SearchByID(field_0x684)); + field_0x688 = false; + } + field_0x682 = mArrowType; } /* 800D48E8-800D4994 .text setBlur__9daArrow_cFv */ void daArrow_c::setBlur() { - /* Nonmatching */ + JPABaseEmitter* emitter = mPtclFollowCb.getEmitter(); + if (!emitter) { + return; + } + s32 alpha = emitter->getGlobalAlpha(); + if (alpha - 50 <= 0) { + mPtclFollowCb.end(); + } else { + emitter->setGlobalAlpha(alpha - 50); + } + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(field_0x67c); + emitter->setGlobalRTMatrix(mDoMtx_stack_c::get()); } /* 800D4994-800D4A04 .text createBlur__9daArrow_cFv */ void daArrow_c::createBlur() { - /* Nonmatching */ + if (!mPtclFollowCb.getEmitter()) { + dComIfGp_particle_setToon(0x48, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); + } } /* 800D4A04-800D4ADC .text setArrowShootSe__9daArrow_cFv */ @@ -63,7 +144,15 @@ void daArrow_c::arrowShooting() { /* 800D4D98-800D4DC0 .text arrowUseMp__9daArrow_cFv */ void daArrow_c::arrowUseMp() { - /* Nonmatching */ + static const s16 use_mp[4] = { + -0, // Normal Arrows + -1, // Fire Arrows + -1, // Ice Arrows + -2, // Light Arrows + }; + + s32 magic = dComIfGp_getItemMagicCount(); + dComIfGp_setItemMagicCount(magic + use_mp[mArrowType]); } /* 800D4DC0-800D50A0 .text ShieldReflect__9daArrow_cFv */ @@ -77,8 +166,9 @@ void daArrow_c::check_water_in() { } /* 800D5388-800D53AC .text changeArrowMp__9daArrow_cFv */ -void daArrow_c::changeArrowMp() { - /* Nonmatching */ +BOOL daArrow_c::changeArrowMp() { + u8 magic = dComIfGs_getMagic(); + return magic >= 1; } /* 800D53AC-800D553C .text changeArrowType__9daArrow_cFv */ @@ -93,17 +183,101 @@ void daArrow_c::changeArrowTypeNotReady() { /* 800D560C-800D56B0 .text setRoomInfo__9daArrow_cFv */ void daArrow_c::setRoomInfo() { - /* Nonmatching */ + u32 roomNo; + + mGndChk.SetPos(¤t.pos); + f32 groundY = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (groundY != -1000000000.0f) { + roomNo = dComIfG_Bgsp()->GetRoomId(mGndChk); + mTevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mGndChk); + } else { + roomNo = dComIfGp_roomControl_getStayNo(); + } + + mTevStr.mRoomNo = roomNo; + mStts.SetRoomId(roomNo); + current.roomNo = roomNo; } /* 800D56B0-800D5854 .text setKeepMatrix__9daArrow_cFv */ void daArrow_c::setKeepMatrix() { /* Nonmatching */ + // Transform the arrow onto its archer's hand. + if (mbShotByZelda) { + fopNpc_npc_c* zelda; + fopAcM_SearchByID(mParentPcId, (fopAc_ac_c**)&zelda); + + mDoMtx_stack_c::transS(0.7f, -0.07f, -0.2f); + mDoMtx_stack_c::XYZrotM(0x238E, 0x2CDF, 0x29BE); + + // Copy the matrix of Zelda's hand_R1 joint to the arrow model. + // TODO: After daPz_c is implemented, this should use her daPz_c::getRightHandMatrix() inline method. + MtxP handMtx = zelda->mpMcaMorf->getModel()->mpNodeMtx[0x13]; + cMtx_concat(handMtx, mDoMtx_stack_c::get(), mDoMtx_stack_c::get()); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + MtxP mtx = mDoMtx_stack_c::get(); + current.pos.set(mtx[0][3], mtx[1][3], mtx[2][3]); + + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &shape_angle); + current.angle.y = shape_angle.y; + current.angle.x = -shape_angle.x; + } else { + daPy_py_c* player = daPy_getPlayerActorClass(); + + mDoMtx_stack_c::transS(0.7f, -0.07f, -0.2f); + // TODO: How did they pass an unsigned short (0xB0B6) to a function that takes a signed short? + mDoMtx_stack_c::XYZrotM(0xB0B6, 0x238E, -0x6333); + + MtxP handMtx = player->getLeftHandMatrix(); + cMtx_concat(handMtx, mDoMtx_stack_c::get(), mDoMtx_stack_c::get()); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + MtxP mtx = mDoMtx_stack_c::get(); + current.pos.set(mtx[0][3], mtx[1][3], mtx[2][3]); + + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &shape_angle); + current.angle.y = shape_angle.y; + current.angle.x = -shape_angle.x; + } } /* 800D5854-800D5A70 .text setStopActorMatrix__9daArrow_cFv */ void daArrow_c::setStopActorMatrix() { - /* Nonmatching */ + s16 xRot = 0; + if (cLib_calcTimer(&field_0x604) != 0) { + f32 temp = (field_0x604 / 40.0f); + xRot = 1024.0f * temp*temp * cM_ssin(field_0x604 * 0x52FB); + } + fopAc_ac_c* hitActor = fopAcM_SearchByID(mHitActorProcID); + if (!hitActor) { + return; + } + JntHit_c* jntHit = fopAcM_GetJntHit(hitActor); + if (!jntHit) { + return; + } + J3DModel* hitModel = jntHit->getModel(); + + static cXyz offset_arrow_pos(0.0f, 0.0f, -50.0f); + + mDoMtx_stack_c::copy(hitModel->mpNodeMtx[mHitJointIndex]); + csXyz hitJointRot; + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &hitJointRot); + + mDoMtx_stack_c::transM(field_0x618); + mDoMtx_stack_c::ZXYrotM(field_0x6e6); + + cXyz pos(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&pos); + current.pos = pos; + + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(hitJointRot); + mDoMtx_stack_c::ZXYrotM(field_0x6e6); + mDoMtx_stack_c::XrotM(xRot); + mDoMtx_stack_c::transM(offset_arrow_pos); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 800D5A70-800D5B20 .text procWait__9daArrow_cFv */ @@ -138,12 +312,23 @@ void daArrow_c::procWater() { /* 800D72BC-800D72EC .text checkRestMp__9daArrow_cFv */ void daArrow_c::checkRestMp() { - /* Nonmatching */ + static const s16 use_mp[4] = { + 0, // Normal Arrows + 1, // Fire Arrows + 1, // Ice Arrows + 2, // Light Arrows + }; + + u8 currMagic = dComIfGs_getMagic(); + if (currMagic < use_mp[m_keep_type]) { + m_keep_type = 0; + } } /* 800D72EC-800D7320 .text setTypeByPlayer__9daArrow_cFv */ void daArrow_c::setTypeByPlayer() { - /* Nonmatching */ + checkRestMp(); + mArrowType = m_keep_type; } /* 800D7320-800D74FC .text createInit__9daArrow_cFv */ @@ -152,207 +337,78 @@ void daArrow_c::createInit() { } /* 800D74FC-800D7820 .text _execute__9daArrow_cFv */ -void daArrow_c::_execute() { +BOOL daArrow_c::_execute() { /* Nonmatching */ } /* 800D7820-800D7960 .text _draw__9daArrow_cFv */ -void daArrow_c::_draw() { +BOOL daArrow_c::_draw() { /* Nonmatching */ } /* 800D7960-800D7A38 .text _create__9daArrow_cFv */ -void daArrow_c::_create() { +s32 daArrow_c::_create() { /* Nonmatching */ } /* 800D7A38-800D7DB4 .text __ct__9daArrow_cFv */ -daArrow_c::daArrow_c() { - /* Nonmatching */ -} - -/* 800D7DB4-800D7E80 .text __dt__8dCcD_SphFv */ -dCcD_Sph::~dCcD_Sph() { - /* Nonmatching */ -} - -/* 800D7E80-800D7F0C .text __dt__12cCcD_SphAttrFv */ -cCcD_SphAttr::~cCcD_SphAttr() { - /* Nonmatching */ -} - -/* 800D7F0C-800D7F54 .text __dt__8cM3dGSphFv */ -cM3dGSph::~cM3dGSph() { - /* Nonmatching */ -} - -/* 800D7F54-800D8034 .text __dt__8dCcD_CpsFv */ -dCcD_Cps::~dCcD_Cps() { - /* Nonmatching */ -} - -/* 800D8034-800D807C .text __dt__9cCcD_SttsFv */ -cCcD_Stts::~cCcD_Stts() { - /* Nonmatching */ -} - -/* 800D807C-800D81D0 .text __dt__16dBgS_ArrowLinChkFv */ -dBgS_ArrowLinChk::~dBgS_ArrowLinChk() { - /* Nonmatching */ -} +daArrow_c::daArrow_c() : mPtclFollowCb(0, 0) {} /* 800D81D0-800D8200 .text _delete__9daArrow_cFv */ -void daArrow_c::_delete() { - /* Nonmatching */ +BOOL daArrow_c::_delete() { + mPtclFollowCb.end(); + return TRUE; } /* 800D8200-800D8220 .text daArrowCreate__FPv */ -void daArrowCreate(void*) { +s32 daArrowCreate(void* i_this) { /* Nonmatching */ + return ((daArrow_c*)i_this)->_create(); } /* 800D8220-800D8240 .text daArrowDelete__FPv */ -void daArrowDelete(void*) { +BOOL daArrowDelete(void* i_this) { /* Nonmatching */ + return ((daArrow_c*)i_this)->_delete(); } /* 800D8240-800D8260 .text daArrowExecute__FPv */ -void daArrowExecute(void*) { +BOOL daArrowExecute(void* i_this) { /* Nonmatching */ + return ((daArrow_c*)i_this)->_execute(); } /* 800D8260-800D8280 .text daArrowDraw__FPv */ -void daArrowDraw(void*) { - /* Nonmatching */ +BOOL daArrowDraw(void* i_this) { + return ((daArrow_c*)i_this)->_draw(); } /* 800D8280-800D8288 .text daArrowIsDelete__FPv */ -void daArrowIsDelete(void*) { - /* Nonmatching */ +BOOL daArrowIsDelete(void* i_this) { + return TRUE; } -/* 800D8288-800D8298 .text GetShapeAttr__8dCcD_SphFv */ -void dCcD_Sph::GetShapeAttr() { - /* Nonmatching */ -} - -/* 800D8298-800D82A0 .text GetCoCP__12cCcD_SphAttrCFv */ -void cCcD_SphAttr::GetCoCP() const { - /* Nonmatching */ -} - -/* 800D82A0-800D82A8 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 800D82A8-800D82B0 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 800D82B0-800D82E8 .text CrossAtTg__12cCcD_SphAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 800D82E8-800D82F0 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_AabAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D82F0-800D82F8 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_TriAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D82F8-800D8300 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_PntAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D8300-800D8338 .text CrossCo__12cCcD_SphAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D8338-800D8348 .text GetShapeAttr__8dCcD_CpsFv */ -void dCcD_Cps::GetShapeAttr() { - /* Nonmatching */ -} - -/* 800D8348-800D8350 .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 800D8350-800D8358 .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 800D8358-800D8390 .text CrossAtTg__12cCcD_CpsAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 800D8390-800D8398 .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_AabAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D8398-800D83A0 .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_TriAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D83A0-800D83A8 .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_PntAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D83A8-800D83E0 .text CrossCo__12cCcD_CpsAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 800D83E0-800D83FC .text cLib_calcTimer__FPs */ -void cLib_calcTimer(short*) { - /* Nonmatching */ -} - -/* 800D83FC-800D8404 .text @20@__dt__16dBgS_ArrowLinChkFv */ -void @20@__dt__16dBgS_ArrowLinChkFv { - /* Nonmatching */ -} - -/* 800D8404-800D840C .text @100@__dt__16dBgS_ArrowLinChkFv */ -void @100@__dt__16dBgS_ArrowLinChkFv { - /* Nonmatching */ -} - -/* 800D840C-800D8414 .text @88@__dt__16dBgS_ArrowLinChkFv */ -void @88@__dt__16dBgS_ArrowLinChkFv { - /* Nonmatching */ -} - -/* 800D8414-800D841C .text @280@__dt__8dCcD_CpsFv */ -void @280@__dt__8dCcD_CpsFv { - /* Nonmatching */ -} - -/* 800D841C-800D8424 .text @248@__dt__8dCcD_CpsFv */ -void @248@__dt__8dCcD_CpsFv { - /* Nonmatching */ -} - -/* 800D8424-800D842C .text @280@__dt__8dCcD_SphFv */ -void @280@__dt__8dCcD_SphFv { - /* Nonmatching */ -} - -/* 800D842C-800D8434 .text @248@__dt__8dCcD_SphFv */ -void @248@__dt__8dCcD_SphFv { - /* Nonmatching */ -} +actor_method_class daArrowMethodTable = { + (process_method_func)daArrowCreate, + (process_method_func)daArrowDelete, + (process_method_func)daArrowExecute, + (process_method_func)daArrowIsDelete, + (process_method_func)daArrowDraw, +}; +extern actor_process_profile_definition g_profile_ARROW = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 9, + /* ListPrio */ fpcLy_CURRENT_e, + /* ProcName */ PROC_ARROW, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daArrow_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x01BF, + /* Actor SubMtd */ &daArrowMethodTable, + /* Status */ 0x00044000, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_CUSTOM_e, +}; diff --git a/src/d/actor/d_a_branch.cpp b/src/d/actor/d_a_branch.cpp index 0a1387a5f..e70c727a9 100644 --- a/src/d/actor/d_a_branch.cpp +++ b/src/d/actor/d_a_branch.cpp @@ -241,7 +241,7 @@ s32 daBranch_Create(fopAc_ac_c* i_this) { J3DMaterial* mat = modelData->getMaterialNodePointer(j); if (mat) { J3DFog* fog = mat->getPEBlock()->getFog(); - fog->field_0x0 = 2; + fog->mType = 2; } } } diff --git a/src/d/actor/d_a_kaji.cpp b/src/d/actor/d_a_kaji.cpp index 3dd7609fa..84e5dbc90 100644 --- a/src/d/actor/d_a_kaji.cpp +++ b/src/d/actor/d_a_kaji.cpp @@ -65,7 +65,7 @@ s32 daKaji_c::_create() { if (fopAcM_entrySolidHeap(this, (heapCallbackFunc)&CheckCreateHeap, 0x660)) { mDoMtx_stack_c::transS(getPosition()); mDoMtx_stack_c::YrotM(shape_angle.y); - mDoMtx_stack_c::scaleM(mScale.x, mScale.y, mScale.z); + mDoMtx_stack_c::scaleM(mScale); MTXCopy(mDoMtx_stack_c::get(), mMtx); l_p_ship = (daObjPirateship::Act_c*)fopAcM_SearchByID(mParentPcId); @@ -102,7 +102,7 @@ BOOL daKaji_c::_execute() { mpMorf->getModel()->setBaseScale(mScale); mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); MTXCopy(mDoMtx_stack_c::get(), mMtx); diff --git a/src/d/actor/d_a_nh.cpp b/src/d/actor/d_a_nh.cpp index 92ca30e1d..8a8f0bd6e 100644 --- a/src/d/actor/d_a_nh.cpp +++ b/src/d/actor/d_a_nh.cpp @@ -202,9 +202,9 @@ void daNh_c::setBaseMtx() { glowOffset.y = l_HIO.prm.mGlowOffsetY; cXyz glowPos; cMtx_multVec(mDoMtx_stack_c::get(), &glowOffset, &glowPos); - PSMTXTrans(mDoMtx_stack_c::get(), glowPos.x, glowPos.y, glowPos.z); + mDoMtx_stack_c::transS(glowPos); mDoMtx_stack_c::scaleM(l_HIO.prm.mGlowScale, l_HIO.prm.mGlowScale, l_HIO.prm.mGlowScale); - MTXCopy(mDoMtx_stack_c::get(), mGlowMtx); + cMtx_copy(mDoMtx_stack_c::get(), mGlowMtx); } /* 800F9980-800F9A54 .text createHeap__6daNh_cFv */ @@ -229,12 +229,7 @@ static BOOL checkCreateHeap(fopAc_ac_c* i_this) { /* 800F9A74-800F9C8C .text create__6daNh_cFv */ s32 daNh_c::create() { - static u32 a_heap_size_tbl; - static s8 init; - if (!init) { - a_heap_size_tbl = 0x4000; - init = 1; - } + static u32 a_heap_size_tbl = 0x4000; s32 phase_state = cPhs_COMPLEATE_e; diff --git a/src/d/actor/d_a_obj_movebox.cpp b/src/d/actor/d_a_obj_movebox.cpp index 675152079..1c2e18a68 100644 --- a/src/d/actor/d_a_obj_movebox.cpp +++ b/src/d/actor/d_a_obj_movebox.cpp @@ -467,8 +467,8 @@ namespace daObjMovebox { } daObj::quat_rotBaseY(&temp2, temp3); - - mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::quatM(&temp2); + mDoMtx_stack_c::ZXYrotM(shape_angle); if (isFloating) { mDoMtx_stack_c::transM(0.0f, -mUnknown624, 0.0f); } diff --git a/src/d/actor/d_a_obj_paper.cpp b/src/d/actor/d_a_obj_paper.cpp index 0211638e0..7a391fd4e 100644 --- a/src/d/actor/d_a_obj_paper.cpp +++ b/src/d/actor/d_a_obj_paper.cpp @@ -291,7 +291,7 @@ namespace daObjPaper { /* 000008DC-00000948 .text set_mtx__Q210daObjPaper5Act_cFv */ void daObjPaper::Act_c::set_mtx() { mDoMtx_stack_c::transS(getPosition()); - mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } diff --git a/src/d/actor/d_a_scene_change.cpp b/src/d/actor/d_a_scene_change.cpp index 1d27e2834..c5c27798f 100644 --- a/src/d/actor/d_a_scene_change.cpp +++ b/src/d/actor/d_a_scene_change.cpp @@ -41,10 +41,10 @@ s32 daSceneChgCreate(void* i_this) { fopAcM_SetupActor(scnChg, d_a_scene_change_c); - MTXTrans(mDoMtx_stack_c::now, scnChg->current.pos.x, scnChg->current.pos.y, scnChg->current.pos.z); - mDoMtx_ZXYrotM(mDoMtx_stack_c::now, scnChg->shape_angle.x, scnChg->shape_angle.y, scnChg->shape_angle.z); + mDoMtx_stack_c::transS(scnChg->current.pos); + mDoMtx_stack_c::ZXYrotM(scnChg->shape_angle); - MTXCopy(mDoMtx_stack_c::now, scnChg->mTransformMtx); + cMtx_copy(mDoMtx_stack_c::get(), scnChg->mTransformMtx); return cPhs_COMPLEATE_e; } diff --git a/src/d/actor/d_a_spotbox.cpp b/src/d/actor/d_a_spotbox.cpp index 87f9773cb..3b8ca1699 100644 --- a/src/d/actor/d_a_spotbox.cpp +++ b/src/d/actor/d_a_spotbox.cpp @@ -41,10 +41,10 @@ int daSpotbox_c::draw() { } int daSpotbox_c::execute() { - PSMTXTrans(mDoMtx_stack_c::now, this->current.pos.x, this->current.pos.y, this->current.pos.z); - mDoMtx_YrotM(mDoMtx_stack_c::now, this->current.angle.y); - mDoMtx_stack_c::scaleM(this->mScale.x, this->mScale.y, this->mScale.z); - PSMTXCopy(mDoMtx_stack_c::now, this->mtx); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::scaleM(mScale); + cMtx_copy(mDoMtx_stack_c::get(), mtx); return TRUE; } From 246da3327b1365a0402856eee7e512b3491115ac Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 21 Sep 2023 00:10:06 -0400 Subject: [PATCH 22/89] d_a_andsw2 OK (#65) --- configure.py | 2 +- include/d/d_com_inf_game.h | 4 ++ include/d/d_event.h | 1 + src/d/actor/d_a_andsw0.cpp | 86 ++++++++++++++++++++++++-------------- src/d/actor/d_a_andsw2.cpp | 2 +- 5 files changed, 62 insertions(+), 33 deletions(-) diff --git a/configure.py b/configure.py index b670caf99..2d2450c31 100644 --- a/configure.py +++ b/configure.py @@ -1199,7 +1199,7 @@ config.libs = [ }, Rel(Matching, "f_pc_profile_lst", "f_pc/f_pc_profile_lst.cpp"), ActorRel(NonMatching, "d_a_agbsw0"), - ActorRel(NonMatching, "d_a_andsw0"), + ActorRel(Matching, "d_a_andsw0"), ActorRel(Matching, "d_a_andsw2"), ActorRel(NonMatching, "d_a_att"), ActorRel(NonMatching, "d_a_bflower"), diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index e4c763af9..db841fb1a 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1018,6 +1018,10 @@ inline void dComIfGp_event_offEventFlag(s16 flag) { return g_dComIfG_gameInfo.play.getEvent().offEventFlag(flag); } +inline void dComIfGp_event_reset() { + g_dComIfG_gameInfo.play.getEvent().reset(); +} + inline u8 dComIfGp_event_getPreItemNo() { return g_dComIfG_gameInfo.play.getEvent().getPreItemNo(); } diff --git a/include/d/d_event.h b/include/d/d_event.h index acf7f1ae8..3d78feba9 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -67,6 +67,7 @@ public: u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } void onEventFlag(u16 flag) { mEventFlag |= flag; } void offEventFlag(u16 flag) { mEventFlag &= ~flag; } + void reset() { onEventFlag(8); } bool runCheck() { return mMode != 0; } diff --git a/src/d/actor/d_a_andsw0.cpp b/src/d/actor/d_a_andsw0.cpp index 6daa4fa2a..737644320 100644 --- a/src/d/actor/d_a_andsw0.cpp +++ b/src/d/actor/d_a_andsw0.cpp @@ -31,25 +31,39 @@ public: /* 0x2A3 */ s8 mEventState; }; +// Bokoblin. TODO: Include d_a_bk.h once implemented. +struct bk_class : public fopAc_ac_c { + u8 temp[0x121C - 0x290]; + u8 field_0x121C; +}; + +// Kargaroc. TODO: Include d_a_bb.h once implemented. +struct bb_class : public fopAc_ac_c {}; + static s32 daAndsw0_Draw(andsw0_class*) { return 1; } static void daAndsw0_check(andsw0_class* i_this) { /* Nonmatching */ - u8 numToCheck = i_this->mNumSwitchesToCheck; - u32 switchIdxToCheck = i_this->mFirstSwitchToCheck ? i_this->mFirstSwitchToCheck : i_this->mSwitchToSet + 1; + s32 numToCheck = i_this->mNumSwitchesToCheck; + u32 switchIdxToCheck; + if (i_this->mFirstSwitchToCheck) { + switchIdxToCheck = i_this->mFirstSwitchToCheck; + } else { + switchIdxToCheck = i_this->mSwitchToSet + 1; + } switch(i_this->mAction) { case ACT_ON_ALL: for(int i = 0; i < numToCheck; i++) { - if(dComIfGs_isSwitch(switchIdxToCheck, i_this->current.roomNo) == false) { + if(dComIfGs_isSwitch(switchIdxToCheck, fopAcM_GetRoomNo(i_this)) == false) { break; } if(i == numToCheck - 1) { if(i_this->mBehaviorType != 3) { - dComIfGs_onSwitch(i_this->mSwitchToSet, i_this->current.roomNo); + dComIfGs_onSwitch(i_this->mSwitchToSet, fopAcM_GetRoomNo(i_this)); } switch(i_this->mBehaviorType) { @@ -71,16 +85,16 @@ static void daAndsw0_check(andsw0_class* i_this) { break; case ACT_OFF_ALL: - switchIdxToCheck = i_this->mFirstSwitchToCheck ? i_this->mFirstSwitchToCheck : i_this->mSwitchToSet + 1; + u32 switchIdxToCheck2 = i_this->mFirstSwitchToCheck ? i_this->mFirstSwitchToCheck : i_this->mSwitchToSet + 1; for(int i = 0; i < numToCheck; i++) { - if(dComIfGs_isSwitch(switchIdxToCheck, i_this->current.roomNo) == false) { - dComIfGs_offSwitch(i_this->mSwitchToSet, i_this->current.roomNo); + if(dComIfGs_isSwitch(switchIdxToCheck2, fopAcM_GetRoomNo(i_this)) == false) { + dComIfGs_offSwitch(i_this->mSwitchToSet, fopAcM_GetRoomNo(i_this)); i_this->mAction = ACT_ON_ALL; break; } - switchIdxToCheck += 1; + switchIdxToCheck2 += 1; } break; @@ -147,7 +161,7 @@ static void* ac[7]; static s32 check_count; static void* bk_s_sub1(void* i_this, void*) { - if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == 0xBE && (fopAcM_GetParam(i_this) & 0xF) == 7) { + if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_BK && (fopAcM_GetParam(i_this) & 0xF) == 7) { s32 count = check_count; //regswaps without this if(count < 2) { ac[check_count] = i_this; @@ -161,7 +175,7 @@ static void* bk_s_sub1(void* i_this, void*) { } static void* bk_s_sub2(void* i_this, void*) { - if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == 0xBE && (fopAcM_GetParam(i_this) & 0xF) == 4) { + if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_BK && (fopAcM_GetParam(i_this) & 0xF) == 4) { s32 count = check_count; //regswaps without this if(count == 2) { ac[check_count] = i_this; @@ -175,7 +189,7 @@ static void* bk_s_sub2(void* i_this, void*) { } static void* bk_s_sub3(void* i_this, void*) { - if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == 0xBE && (fopAcM_GetParam(i_this) & 0xF) == 5) { + if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_BK && (fopAcM_GetParam(i_this) & 0xF) == 5) { s32 count = check_count; //regswaps without this if(count < 5) { ac[check_count] = i_this; @@ -189,7 +203,7 @@ static void* bk_s_sub3(void* i_this, void*) { } static void* bb_s_sub(void* i_this, void*) { - if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == 0xB6) { + if(fopAcM_IsActor(i_this) && fopAcM_GetName(i_this) == PROC_BB) { s32 count = check_count; //regswaps without this if(count < 7) { ac[check_count] = i_this; @@ -224,7 +238,7 @@ static s32 hajimari_actor_entry(andsw0_class* i_this) { } static void hajimarinomori_check(andsw0_class* i_this) { - /* Nonmatching */ + fopAc_ac_c* actor = i_this; if (i_this->mBehaviorType == 0) { if (hajimari_actor_entry(i_this)) { i_this->mBehaviorType = 1; @@ -233,52 +247,62 @@ static void hajimarinomori_check(andsw0_class* i_this) { else { for(int i = 0; i < 7; i++) {} - //looks like these have something to do with bk_class and bb_class (based on the 0xB6/0xBE proc names earlier) - //finishing this probably needs some work on those if (dComIfGs_isEventBit(4)) { - fopAcM_delete((fopAc_ac_c*)ac[5]); - fopAcM_delete((fopAc_ac_c*)ac[6]); - //ac[3]->field_0x121C = 1; - //ac[4]->field_0x121C = 1; + bb_class* kargaroc = (bb_class*)ac[5]; + fopAcM_delete(kargaroc); + kargaroc = (bb_class*)ac[6]; + fopAcM_delete(kargaroc); + + bk_class* bokoblin = (bk_class*)ac[3]; + bokoblin->field_0x121C = 1; + bokoblin = (bk_class*)ac[4]; + bokoblin->field_0x121C = 1; if (dComIfGs_isEventBit(0x301)) { - //ac[0]->field_0x121C = 1; + bokoblin = (bk_class*)ac[0]; + bokoblin->field_0x121C = 1; } if (dComIfGs_isEventBit(0x480)) { - //ac[1]->field_0x121C = 1; + bokoblin = (bk_class*)ac[1]; + bokoblin->field_0x121C = 1; } if (dComIfGs_isEventBit(0x301) && dComIfGs_isEventBit(0x480)) { - //ac[2]->field_0x121C = 1; + bokoblin = (bk_class*)ac[2]; + bokoblin->field_0x121C = 1; } } else { - //ac[0]->field_0x121C = 1; - //ac[1]->field_0x121C = 1; + bk_class* bokoblin = (bk_class*)ac[0]; + bokoblin->field_0x121C = 1; + bokoblin = (bk_class*)ac[1]; + bokoblin->field_0x121C = 1; } + + fopAcM_delete(actor); } - - fopAcM_delete(i_this); } static void event_start_check(andsw0_class* i_this) { - /* Nonmatching */ + fopAc_ac_c* actor = i_this; switch (i_this->mEventState) { case 0: - if (i_this->mEventIdx != -1 && fopAcM_isSwitch(i_this, i_this->mSwitchToSet)) { - if (i_this->mEvtInfo.i_checkCommandDemoAccrpt()) { + if (i_this->mEventIdx != -1 && fopAcM_isSwitch(actor, i_this->mSwitchToSet)) { + if (actor->mEvtInfo.checkCommandDemoAccrpt()) { i_this->mEventState++; } else { - fopAcM_orderOtherEventId(i_this, i_this->mEventIdx, i_this->mEventNo, 0xFFFF, 0, 1); + fopAcM_orderOtherEventId(actor, i_this->mEventIdx, i_this->mEventNo, 0xFFFF, 0, 1); } } break; case 1: if (dComIfGp_evmng_endCheck(i_this->mEventIdx)) { - dComIfGp_event_onEventFlag(8); + dComIfGp_event_reset(); i_this->mEventState++; } break; + case 2: + break; } } diff --git a/src/d/actor/d_a_andsw2.cpp b/src/d/actor/d_a_andsw2.cpp index 12dea6235..7c60064f4 100644 --- a/src/d/actor/d_a_andsw2.cpp +++ b/src/d/actor/d_a_andsw2.cpp @@ -170,7 +170,7 @@ static s32 daAndsw2_actionEvent(daAndsw2_c* i_this) { } else { i_this->mAction = ACT_WAIT; } - dComIfGp_event_onEventFlag(8); + dComIfGp_event_reset(); } return 1; } From e9413fffa312bbfe163b1ac7312ad859ed3e1776 Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Wed, 20 Sep 2023 21:51:21 -0700 Subject: [PATCH 23/89] fix sqrt function --- include/MSL_C/math.h | 19 ++++- include/d/d_kankyo_rain.h | 29 ++++--- src/d/d_kankyo_rain.cpp | 160 +++++++++++++++++++------------------- 3 files changed, 117 insertions(+), 91 deletions(-) diff --git a/include/MSL_C/math.h b/include/MSL_C/math.h index bfac45e02..afabafac9 100644 --- a/include/MSL_C/math.h +++ b/include/MSL_C/math.h @@ -49,7 +49,6 @@ double modf(double, double*); double pow(double, double); double sin(double); float sinf(float); -double sqrt(double); double tan(double); float tanf(float); @@ -72,6 +71,24 @@ extern inline float sqrtf(float x) { return x; } +extern inline double sqrt(double x) { + if(x > 0.0) + { + double guess = __frsqrte(x); /* returns an approximation to */ + guess = .5*guess*(3.0 - guess*guess*x); /* now have 8 sig bits */ + guess = .5*guess*(3.0 - guess*guess*x); /* now have 16 sig bits */ + guess = .5*guess*(3.0 - guess*guess*x); /* now have 32 sig bits */ + guess = .5*guess*(3.0 - guess*guess*x); /* now have > 53 sig bits */ + return x*guess ; + } + else if ( x == 0 ) + return 0; + else if ( x ) + return NAN; + + return HUGE_VALF; +} + inline float atan2f(float y, float x) { return (float)atan2(y, x); } diff --git a/include/d/d_kankyo_rain.h b/include/d/d_kankyo_rain.h index 7ea0bb78a..14151d74c 100644 --- a/include/d/d_kankyo_rain.h +++ b/include/d/d_kankyo_rain.h @@ -2,21 +2,26 @@ #define D_KANKYO_D_KANKYO_RAIN_H #include "dolphin/types.h" +#include "dolphin/gx/GX.h" + +struct DOUBLE_POS { + f64 x, y, z; +}; class cXyz; -void dKyr_drawSun(f32(*)[4], cXyz*, GXColor&, u8**); -void dKyr_drawLenzflare(f32(*)[4], cXyz*, GXColor&, u8**); -void dKyr_drawRain(f32(*)[4], u8**); -void dKyr_drawSibuki(f32(*)[4], u8**); -void drawPoison(f32(*)[4], u8**); -void dKyr_drawHousi(f32(*)[4], u8**); -void dKyr_drawKazanbai(f32(*)[4], u8**); -void dKyr_drawSnow(f32(*)[4], u8**); -void dKyr_drawStar(f32(*)[4], u8**); -void drawWave(f32(*)[4], u8**); -void drawCloudShadow(f32(*)[4], u8**); -void drawVrkumo(f32(*)[4], GXColor&, u8**); +void dKyr_drawSun(Mtx, cXyz*, GXColor&, u8**); +void dKyr_drawLenzflare(Mtx, cXyz*, GXColor&, u8**); +void dKyr_drawRain(Mtx, u8**); +void dKyr_drawSibuki(Mtx, u8**); +void drawPoison(Mtx, u8**); +void dKyr_drawHousi(Mtx, u8**); +void dKyr_drawKazanbai(Mtx, u8**); +void dKyr_drawSnow(Mtx, u8**); +void dKyr_drawStar(Mtx, u8**); +void drawWave(Mtx, u8**); +void drawCloudShadow(Mtx, u8**); +void drawVrkumo(Mtx, GXColor&, u8**); void dKyr_thunder_init(); void dKyr_thunder_move(); void dKyr_poison_light_colision(); diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index d9bf697c0..102c3b01d 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -3,37 +3,87 @@ // Translation Unit: d_kankyo_rain.cpp // -#include "d_kankyo_rain.h" -#include "dolphin/types.h" +#include "d/d_kankyo_rain.h" +#include "d/d_bg_s_gnd_chk.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo.h" +#include "f_op/f_op_camera_mng.h" /* 8008AA30-8008AB3C .text vectle_calc__FP10DOUBLE_POSP4cXyz */ -void vectle_calc(DOUBLE_POS*, cXyz*) { - /* Nonmatching */ +void vectle_calc(DOUBLE_POS* i_pos, cXyz* o_out) { + double s = sqrt(i_pos->x * i_pos->x + i_pos->y * i_pos->y + i_pos->z * i_pos->z); + + if (s != 0.0) { + o_out->x = i_pos->x / s; + o_out->y = i_pos->y / s; + o_out->z = i_pos->z / s; + } else { + o_out->x = 0.0; + o_out->y = 0.0; + o_out->z = 0.0; + } } /* 8008AB3C-8008AB94 .text get_vectle_calc__FP4cXyzP4cXyzP4cXyz */ -void get_vectle_calc(cXyz*, cXyz*, cXyz*) { - /* Nonmatching */ +void get_vectle_calc(cXyz* param_0, cXyz* param_1, cXyz* param_2) { + DOUBLE_POS pos; + pos.x = param_1->x - param_0->x; + pos.y = param_1->y - param_0->y; + pos.z = param_1->z - param_0->z; + + vectle_calc(&pos, param_2); } /* 8008AB94-8008ABB4 .text dKyr_get_vectle_calc__FP4cXyzP4cXyzP4cXyz */ -void dKyr_get_vectle_calc(cXyz*, cXyz*, cXyz*) { - /* Nonmatching */ +void dKyr_get_vectle_calc(cXyz* param_0, cXyz* param_1, cXyz* param_2) { + get_vectle_calc(param_0, param_1, param_2); } /* 8008ABB4-8008AC64 .text dKy_set_eyevect_calc__FP12camera_classP3Vecff */ -void dKy_set_eyevect_calc(camera_class*, Vec*, float, float) { - /* Nonmatching */ +void dKy_set_eyevect_calc(camera_class* i_camera, Vec* param_1, f32 param_2, f32 param_3) { + cXyz tmp; + get_vectle_calc(&i_camera->mLookat.mEye, &i_camera->mLookat.mCenter, &tmp); + param_1->x = i_camera->mLookat.mEye.x + tmp.x * param_2; + param_1->y = (i_camera->mLookat.mEye.y + tmp.y * param_3) - 200.0f; + param_1->z = i_camera->mLookat.mEye.z + tmp.z * param_2; } /* 8008AC64-8008AD60 .text dKy_set_eyevect_calc2__FP12camera_classP3Vecff */ -void dKy_set_eyevect_calc2(camera_class*, Vec*, float, float) { - /* Nonmatching */ +void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* param_1, f32 param_2, f32 param_3) { + cXyz tmp; + DOUBLE_POS pos; + + pos.x = i_camera->mLookat.mCenter.x - i_camera->mLookat.mEye.x; + if (param_3 != 0.0f) { + pos.y = i_camera->mLookat.mCenter.y - i_camera->mLookat.mEye.y; + } else { + pos.y = 0.0f; + } + pos.z = i_camera->mLookat.mCenter.z - i_camera->mLookat.mEye.z; + + vectle_calc(&pos, &tmp); + + param_1->x = i_camera->mLookat.mEye.x + tmp.x * param_2; + param_1->y = i_camera->mLookat.mEye.y + tmp.y * param_3; + param_1->z = i_camera->mLookat.mEye.z + tmp.z * param_2; + + if (param_3 == 0.0f) { + param_1->y = 0.0f; + } } /* 8008AD60-8008AE54 .text dKyr_set_btitex__FP9_GXTexObjP7ResTIMG */ -void dKyr_set_btitex(_GXTexObj*, ResTIMG*) { - /* Nonmatching */ +void dKyr_set_btitex(GXTexObj* i_obj, ResTIMG* i_img) { + GXInitTexObj(i_obj, (&i_img->format + i_img->imageOffset), i_img->width, i_img->height, + (GXTexFmt)i_img->format, (GXTexWrapMode)i_img->wrapS, (GXTexWrapMode)i_img->wrapT, + (GXBool)(i_img->mipmapCount > 1)); + + GXInitTexObjLOD(i_obj, (GXTexFilter)i_img->minFilter, (GXTexFilter)i_img->magFilter, + i_img->minLOD * 0.125f, i_img->maxLOD * 0.125f, i_img->LODBias * 0.01f, + (GXBool)i_img->biasClamp, (GXBool)i_img->doEdgeLOD, + (GXAnisotropy)i_img->maxAnisotropy); + + GXLoadTexObj(i_obj, GX_TEXMAP0); } /* 8008AE54-8008B44C .text dKyr_kamome_move__Fv */ @@ -51,18 +101,13 @@ void dKyr_wind_move() { /* Nonmatching */ } -/* 8008C4BC-8008C624 .text __dt__18dBgS_ObjGndChk_AllFv */ -dBgS_ObjGndChk_All::~dBgS_ObjGndChk_All() { - /* Nonmatching */ -} - /* 8008C624-8008C888 .text dKyr_lenzflare_move__Fv */ void dKyr_lenzflare_move() { /* Nonmatching */ } /* 8008C888-8008C8B8 .text dKyr_moon_arrival_check__Fv */ -void dKyr_moon_arrival_check() { +BOOL dKyr_moon_arrival_check() { /* Nonmatching */ } @@ -86,13 +131,8 @@ void overhead_bg_chk() { /* Nonmatching */ } -/* 8008D53C-8008D638 .text __dt__12dBgS_RoofChkFv */ -dBgS_RoofChk::~dBgS_RoofChk() { - /* Nonmatching */ -} - /* 8008D638-8008DAF0 .text forward_overhead_bg_chk__FP4cXyzf */ -void forward_overhead_bg_chk(cXyz*, float) { +void forward_overhead_bg_chk(cXyz*, f32) { /* Nonmatching */ } @@ -152,7 +192,7 @@ void light_at_hit_check(cXyz*) { } /* 80092310-80092330 .text dKyr_poison_live_check__Fv */ -void dKyr_poison_live_check() { +BOOL dKyr_poison_live_check() { /* Nonmatching */ } @@ -186,63 +226,63 @@ void snap_sunmoon_proc(cXyz*, int) { /* Nonmatching */ } -/* 8009428C-8009514C .text dKyr_drawSun__FPA4_fP4cXyzR8_GXColorPPUc */ -void dKyr_drawSun(float(*)[4], cXyz*, _GXColor&, unsigned char**) { +/* 8009428C-8009514C .text dKyr_drawSun__FPA4_fP4cXyzR8GXColorPPUc */ +void dKyr_drawSun(Mtx, cXyz*, GXColor&, u8**) { /* Nonmatching */ } -/* 8009514C-80095E8C .text dKyr_drawLenzflare__FPA4_fP4cXyzR8_GXColorPPUc */ -void dKyr_drawLenzflare(float(*)[4], cXyz*, _GXColor&, unsigned char**) { +/* 8009514C-80095E8C .text dKyr_drawLenzflare__FPA4_fP4cXyzR8GXColorPPUc */ +void dKyr_drawLenzflare(Mtx, cXyz*, GXColor&, u8**) { /* Nonmatching */ } /* 80095E8C-8009682C .text dKyr_drawRain__FPA4_fPPUc */ -void dKyr_drawRain(float(*)[4], unsigned char**) { +void dKyr_drawRain(Mtx, u8**) { /* Nonmatching */ } /* 8009682C-80096D18 .text dKyr_drawSibuki__FPA4_fPPUc */ -void dKyr_drawSibuki(float(*)[4], unsigned char**) { +void dKyr_drawSibuki(Mtx, u8**) { /* Nonmatching */ } /* 80096D18-800973CC .text drawPoison__FPA4_fPPUc */ -void drawPoison(float(*)[4], unsigned char**) { +void drawPoison(Mtx, u8**) { /* Nonmatching */ } /* 800973CC-80097AD0 .text dKyr_drawHousi__FPA4_fPPUc */ -void dKyr_drawHousi(float(*)[4], unsigned char**) { +void dKyr_drawHousi(Mtx, u8**) { /* Nonmatching */ } /* 80097AD0-800987B8 .text dKyr_drawKazanbai__FPA4_fPPUc */ -void dKyr_drawKazanbai(float(*)[4], unsigned char**) { +void dKyr_drawKazanbai(Mtx, u8**) { /* Nonmatching */ } /* 800987B8-80098FF0 .text dKyr_drawSnow__FPA4_fPPUc */ -void dKyr_drawSnow(float(*)[4], unsigned char**) { +void dKyr_drawSnow(Mtx, u8**) { /* Nonmatching */ } /* 80098FF0-80099D38 .text dKyr_drawStar__FPA4_fPPUc */ -void dKyr_drawStar(float(*)[4], unsigned char**) { +void dKyr_drawStar(Mtx, u8**) { /* Nonmatching */ } /* 80099D38-8009A5D4 .text drawWave__FPA4_fPPUc */ -void drawWave(float(*)[4], unsigned char**) { +void drawWave(Mtx, u8**) { /* Nonmatching */ } /* 8009A5D4-8009AB88 .text drawCloudShadow__FPA4_fPPUc */ -void drawCloudShadow(float(*)[4], unsigned char**) { +void drawCloudShadow(Mtx, u8**) { /* Nonmatching */ } -/* 8009AB88-8009B9C4 .text drawVrkumo__FPA4_fR8_GXColorPPUc */ -void drawVrkumo(float(*)[4], _GXColor&, unsigned char**) { +/* 8009AB88-8009B9C4 .text drawVrkumo__FPA4_fR8GXColorPPUc */ +void drawVrkumo(Mtx, GXColor&, u8**) { /* Nonmatching */ } @@ -255,39 +295,3 @@ void dKyr_thunder_init() { void dKyr_thunder_move() { /* Nonmatching */ } - -/* 8009BDEC-8009BDF4 .text @20@__dt__18dBgS_ObjGndChk_AllFv */ -void @20@__dt__18dBgS_ObjGndChk_AllFv { - /* Nonmatching */ -} - -/* 8009BDF4-8009BDFC .text @76@__dt__18dBgS_ObjGndChk_AllFv */ -void @76@__dt__18dBgS_ObjGndChk_AllFv { - /* Nonmatching */ -} - -/* 8009BDFC-8009BE04 .text @64@__dt__18dBgS_ObjGndChk_AllFv */ -void @64@__dt__18dBgS_ObjGndChk_AllFv { - /* Nonmatching */ -} - -/* 8009BE04-8009BE0C .text @16@__dt__12dBgS_RoofChkFv */ -void @16@__dt__12dBgS_RoofChkFv { - /* Nonmatching */ -} - -/* 8009BE0C-8009BE14 .text @48@__dt__12dBgS_RoofChkFv */ -void @48@__dt__12dBgS_RoofChkFv { - /* Nonmatching */ -} - -/* 8009BE14-8009BE1C .text @36@__dt__12dBgS_RoofChkFv */ -void @36@__dt__12dBgS_RoofChkFv { - /* Nonmatching */ -} - -/* 8009BE1C-8009BE64 .text __dt__9dSnap_ObjFv */ -dSnap_Obj::~dSnap_Obj() { - /* Nonmatching */ -} - From 227261df4b16490a3f8fc6fc4f8cadb9e1748b83 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 19:16:46 -0700 Subject: [PATCH 24/89] JUTDirectPrint --- include/JSystem/JUtility/JUTDirectPrint.h | 20 +-- src/JSystem/JUtility/JUTDirectPrint.cpp | 173 ++++++++++++++++++++-- 2 files changed, 165 insertions(+), 28 deletions(-) diff --git a/include/JSystem/JUtility/JUTDirectPrint.h b/include/JSystem/JUtility/JUTDirectPrint.h index 756d02c3d..805f2a237 100644 --- a/include/JSystem/JUtility/JUTDirectPrint.h +++ b/include/JSystem/JUtility/JUTDirectPrint.h @@ -4,6 +4,12 @@ #include "JSystem/JUtility/TColor.h" #include "Runtime.PPCEABI.H/__va_arg.h" + +namespace std { + // no idea what this is or why it is used instead of va_list + struct __tag_va_List : __va_list_struct {}; +} + class JUTDirectPrint { private: /* 802E41E8 */ JUTDirectPrint(); @@ -13,7 +19,7 @@ public: /* 802E431C */ void drawChar(int, int, int); /* 802E456C */ void changeFrameBuffer(void*, u16, u16); /* -------- */ void print(u16, u16, char const*, ...); - /* 802E45A4 */ void printSub(u16, u16, char const*, va_list, bool); + /* 802E45A4 */ void printSub(u16, u16, char const*, std::__tag_va_List*, bool); /* 802E46D8 */ void drawString(u16, u16, char*); /* 802E4708 */ void drawString_f(u16, u16, char const*, ...); /* 802E47C8 */ void setCharColor(u8, u8, u8); @@ -23,7 +29,6 @@ public: void* getFrameBuffer() { return field_0x00; } bool isActive() const { return field_0x00 != 0; } - JUtility::TColor getCharColor() const { return mCharColor; } void changeFrameBuffer(void *param_0) { changeFrameBuffer(param_0, mFrameBufferWidth, mFrameBufferHeight); } static JUTDirectPrint* getManager() { return sDirectPrint; } @@ -44,16 +49,7 @@ private: /* 0x0C */ size_t mFrameBufferSize; /* 0x10 */ u8 field_0x10[4]; /* 0x14 */ u16* mFrameBuffer; - /* 0x18 */ JUtility::TColor mCharColor; - /* 0x1C */ u16 mCharColor_Y; - /* 0x1E */ u16 mCharColor_Cb; - /* 0x20 */ u16 mCharColor_Cb2; - /* 0x22 */ u16 mCharColor_Cb4; - /* 0x24 */ u16 mCharColor_Cr; - /* 0x26 */ u16 mCharColor_Cr2; - /* 0x28 */ u16 mCharColor_Cr4; - /* 0x2A */ u16 field_0x2A; - /* 0x2C */ + /* 0x18 */ }; #endif /* JUTDIRECTPRINT_H */ diff --git a/src/JSystem/JUtility/JUTDirectPrint.cpp b/src/JSystem/JUtility/JUTDirectPrint.cpp index d9d0ce427..07d68d2c6 100644 --- a/src/JSystem/JUtility/JUTDirectPrint.cpp +++ b/src/JSystem/JUtility/JUTDirectPrint.cpp @@ -4,44 +4,185 @@ // #include "JSystem/JUtility/JUTDirectPrint.h" -#include "dolphin/types.h" +#include "MSL_C/stdio.h" +#include "dolphin/os/OSCache.h" + +JUTDirectPrint* JUTDirectPrint::sDirectPrint; /* 802C6F5C-802C6F98 .text __ct__14JUTDirectPrintFv */ JUTDirectPrint::JUTDirectPrint() { - /* Nonmatching */ + changeFrameBuffer(NULL, 0, 0); } /* 802C6F98-802C6FE0 .text start__14JUTDirectPrintFv */ -void JUTDirectPrint::start() { - /* Nonmatching */ +JUTDirectPrint* JUTDirectPrint::start() { + if (!sDirectPrint) { + sDirectPrint = new JUTDirectPrint(); + } + + return sDirectPrint; } /* 802C6FE0-802C7074 .text erase__14JUTDirectPrintFiiii */ -void JUTDirectPrint::erase(int, int, int, int) { - /* Nonmatching */ +void JUTDirectPrint::erase(int x, int y, int width, int height) { + if (!this->field_0x00) { + return; + } + + if (400 < mFrameBufferWidth) { + x = x << 1; + width = width << 1; + } + + if (300 < mFrameBufferHeight) { + y = y << 1; + height = height << 1; + } + + u16* pixel = mFrameBuffer + mStride * y + x; + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + *pixel = 0x1080; + pixel = pixel + 1; + } + + pixel += mStride - width; + } } +u8 JUTDirectPrint::sAsciiTable[128] = { + 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0xFD, 0xFE, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x29, 0x64, 0x65, 0x66, 0x2B, 0x67, 0x68, 0x25, 0x26, 0x69, 0x2A, 0x6A, 0x27, 0x2C, 0x6B, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x24, 0x6C, 0x6D, 0x6E, 0x6F, 0x28, + 0x70, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x71, 0x72, 0x73, 0x74, 0x75, + 0xFF, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, + 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x76, 0x77, 0x78, 0x79, 0x7A, +}; + +u32 JUTDirectPrint::sFontData[64] = { + 0x70871C30, 0x8988A250, 0x88808290, 0x88830C90, 0x888402F8, 0x88882210, 0x71CF9C10, 0xF9CF9C70, + 0x8208A288, 0xF200A288, 0x0BC11C78, 0x0A222208, 0x8A222208, 0x71C21C70, 0x23C738F8, 0x5228A480, + 0x8A282280, 0x8BC822F0, 0xFA282280, 0x8A28A480, 0x8BC738F8, 0xF9C89C08, 0x82288808, 0x82088808, + 0xF2EF8808, 0x82288888, 0x82288888, 0x81C89C70, 0x8A08A270, 0x920DA288, 0xA20AB288, 0xC20AAA88, + 0xA208A688, 0x9208A288, 0x8BE8A270, 0xF1CF1CF8, 0x8A28A220, 0x8A28A020, 0xF22F1C20, 0x82AA0220, + 0x82492220, 0x81A89C20, 0x8A28A288, 0x8A28A288, 0x8A289488, 0x8A2A8850, 0x894A9420, 0x894AA220, + 0x70852220, 0xF8011000, 0x08020800, 0x10840400, 0x20040470, 0x40840400, 0x80020800, 0xF8011000, + 0x70800000, 0x88822200, 0x08820400, 0x108F8800, 0x20821000, 0x00022200, 0x20800020, 0x00000000, +}; + +u32 JUTDirectPrint::sFontData2[77] = { + 0x51421820, 0x53E7A420, 0x014A2C40, 0x01471000, 0x0142AA00, 0x03EAA400, 0x01471A78, 0x00000000, + 0x50008010, 0x20010820, 0xF8020040, 0x20420820, 0x50441010, 0x00880000, 0x00070E00, 0x01088840, + 0x78898820, 0x004A8810, 0x788A8810, 0x01098808, 0x00040E04, 0x70800620, 0x11400820, 0x12200820, + 0x10001020, 0x10000820, 0x100F8820, 0x70000620, 0x60070000, 0x110F82A0, 0x12AA8AE0, 0x084F92A0, + 0x100FBE1C, 0x10089008, 0x60070808, 0x00000000, 0x02000200, 0x7A078270, 0x8BC81E88, 0x8A2822F8, + 0x9A282280, 0x6BC79E78, 0x30000000, 0x48080810, 0x41E80000, 0x422F1830, 0xFBE88810, 0x40288890, + 0x43C89C60, 0x81000000, 0x81000000, 0x990F3C70, 0xA10AA288, 0xE10AA288, 0xA10AA288, 0x98CAA270, + 0x00000000, 0x00000020, 0xF1EF1E20, 0x8A28A0F8, 0x8A281C20, 0xF1E80220, 0x80283C38, 0x00000000, + 0x00000000, 0x8A28B688, 0x8A2A8888, 0x8A2A8878, 0x894A8808, 0x788536F0, 0x00000000, 0x00000000, + 0xF8000000, 0x10000000, 0x20000000, 0x40000000, 0xF8000000, +}; + +static u32 twiceBit[4] = { + 0, + 3, + 12, + 15, +}; + /* 802C7074-802C71E0 .text drawChar__14JUTDirectPrintFiii */ -void JUTDirectPrint::drawChar(int, int, int) { - /* Nonmatching */ +void JUTDirectPrint::drawChar(int position_x, int position_y, int ch) { + int codepoint = (100 <= ch) ? ch - 100 : ch; + int col_index = (codepoint % 5) * 6; + int row_index = (codepoint / 5) * 7; + + const u32 *font_data = (100 > ch) ? sFontData + row_index : sFontData2 + row_index; + + int scale_x = (mFrameBufferWidth < 400) ? 1 : 2; + int scale_y = (mFrameBufferHeight < 300) ? 1 : 2; + + u16 *pixel = mFrameBuffer + mStride * position_y * scale_y + position_x * scale_x; + for (int y = 0; y < 7; y++) { + u32 data = *font_data << col_index; + font_data += 1; + + for (int x = 0; x < 6; x++) { + u16 value = (data & 0x80000000) ? 0xeb80 : 0x80; + + for (int y2 = 0; y2 < scale_y; y2++) { + int tmp = mStride * y2; + for (int x2 = 0; x2 < scale_x; x2++) { + pixel[x2 + tmp] = value; + } + } + + data <<= 1; + pixel += scale_x; + } + + pixel += mStride * scale_y - 6 * scale_x; + } } /* 802C71E0-802C7218 .text changeFrameBuffer__14JUTDirectPrintFPvUsUs */ -void JUTDirectPrint::changeFrameBuffer(void*, unsigned short, unsigned short) { - /* Nonmatching */ +void JUTDirectPrint::changeFrameBuffer(void* frameBuffer, u16 width, u16 height) { + this->field_0x00 = frameBuffer; + mFrameBuffer = (u16*)frameBuffer; + mFrameBufferWidth = width; + mFrameBufferHeight = height; + mStride = ALIGN_NEXT(width & 0xFFFF, 16); + mFrameBufferSize = (u32)mStride * (u32)mFrameBufferHeight * 2; } /* 802C7218-802C734C .text printSub__14JUTDirectPrintFUsUsPCcPQ23std13__tag_va_Listb */ -void JUTDirectPrint::printSub(unsigned short, unsigned short, const char*, std::__tag_va_List*, bool) { - /* Nonmatching */ +void JUTDirectPrint::printSub(u16 position_x, u16 position_y, const char* format, std::__tag_va_List* args, bool clear) { + char buffer[256]; + if (!mFrameBuffer) { + return; + } + + int buffer_length = vsnprintf(buffer, ARRAY_SIZE(buffer), format, args); + u16 x = position_x; + if (buffer_length > 0) { + if (clear) { + erase(position_x - 6, position_y - 3, (buffer_length + 2) * 6, 0xd); + } + + char* ptr = buffer; + for (; 0 < buffer_length; buffer_length--, ptr++) { + int codepoint = sAsciiTable[*ptr & 0x7f]; + if (codepoint == 0xfe) { + position_x = x; + position_y += 7; + } else if (codepoint == 0xfd) { + s32 current_position = (int)position_x; + s32 tab = (current_position - x + 0x2f) % 0x30; + position_x = current_position + 0x30 - tab; + } else { + if (codepoint != 0xff) { + drawChar(position_x, position_y, codepoint); + } + position_x += 6; + } + } + } + + DCFlushRange(mFrameBuffer, mFrameBufferSize); } /* 802C734C-802C737C .text drawString__14JUTDirectPrintFUsUsPc */ -void JUTDirectPrint::drawString(unsigned short, unsigned short, char*) { - /* Nonmatching */ +void JUTDirectPrint::drawString(u16 position_x, u16 position_y, char* text) { + drawString_f(position_x, position_y, "%s", text); } /* 802C737C-802C740C .text drawString_f__14JUTDirectPrintFUsUsPCce */ -void JUTDirectPrint::drawString_f(unsigned short, unsigned short, const char*, ...) { - /* Nonmatching */ +void JUTDirectPrint::drawString_f(u16 position_x, u16 position_y, char const* format, ...) { + if (mFrameBuffer) { + std::__tag_va_List args; + va_start(args, format); + printSub(position_x, position_y, format, &args, false); + va_end(args); + } } From 417a614035f45d54d9a6e9da4658d5f1fd699c34 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 19:30:20 -0700 Subject: [PATCH 25/89] JUTDbPrint --- configure.py | 2 +- src/JSystem/JUtility/JUTDbPrint.cpp | 107 ++++++++++++++++++++++++---- 2 files changed, 93 insertions(+), 16 deletions(-) diff --git a/configure.py b/configure.py index 68caadf78..adff482ab 100644 --- a/configure.py +++ b/configure.py @@ -810,7 +810,7 @@ config.libs = [ Object(Matching, "JSystem/JUtility/JUTGraphFifo.cpp"), Object(Matching, "JSystem/JUtility/JUTFont.cpp"), Object(NonMatching, "JSystem/JUtility/JUTResFont.cpp"), - Object(NonMatching, "JSystem/JUtility/JUTDbPrint.cpp"), + Object(Matching, "JSystem/JUtility/JUTDbPrint.cpp"), Object(NonMatching, "JSystem/JUtility/JUTGamePad.cpp"), Object(NonMatching, "JSystem/JUtility/JUTException.cpp"), Object(NonMatching, "JSystem/JUtility/JUTDirectPrint.cpp"), diff --git a/src/JSystem/JUtility/JUTDbPrint.cpp b/src/JSystem/JUtility/JUTDbPrint.cpp index 3d08558b4..6bdd5e15c 100644 --- a/src/JSystem/JUtility/JUTDbPrint.cpp +++ b/src/JSystem/JUtility/JUTDbPrint.cpp @@ -4,44 +4,121 @@ // #include "JSystem/JUtility/JUTDbPrint.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTVideo.h" +#include "MSL_C/stdio.h" +#include "Runtime.PPCEABI.H/__va_arg.h" #include "dolphin/types.h" /* 802C328C-802C32D4 .text __ct__10JUTDbPrintFP7JUTFontP7JKRHeap */ -JUTDbPrint::JUTDbPrint(JUTFont*, JKRHeap*) { - /* Nonmatching */ +JUTDbPrint::JUTDbPrint(JUTFont* pFont, JKRHeap* pHeap) { + mFont = pFont; + mFirst = NULL; + mHeap = pHeap != NULL ? pHeap : JKRHeap::getCurrentHeap(); + mColor.set(255, 255, 255, 255); + mVisible = true; } +JUTDbPrint* JUTDbPrint::sDebugPrint; + /* 802C32D4-802C3348 .text start__10JUTDbPrintFP7JUTFontP7JKRHeap */ -void JUTDbPrint::start(JUTFont*, JKRHeap*) { - /* Nonmatching */ +JUTDbPrint* JUTDbPrint::start(JUTFont* pFont, JKRHeap* pHeap) { + if (sDebugPrint == NULL) { + if (pHeap == NULL) { + pHeap = JKRHeap::getCurrentHeap(); + } + sDebugPrint = new JUTDbPrint(pFont, pHeap); + } + + return sDebugPrint; } /* 802C3348-802C3360 .text changeFont__10JUTDbPrintFP7JUTFont */ -void JUTDbPrint::changeFont(JUTFont*) { - /* Nonmatching */ +JUTFont* JUTDbPrint::changeFont(JUTFont* pFont) { + JUTFont* old = mFont; + if (pFont != NULL) { + mFont = pFont; + } + return old; } /* 802C3360-802C33E8 .text enter__10JUTDbPrintFiiiPCci */ -void JUTDbPrint::enter(int, int, int, const char*, int) { - /* Nonmatching */ +void JUTDbPrint::enter(int param_0, int param_1, int param_2, const char* param_3, int param_4) { + if (param_4 > 0) { + unk_print* ptr = static_cast(JKRAllocFromHeap(mHeap, param_4 + 0x10, -4)); + if (ptr != NULL) { + ptr->unk_0x04 = param_0; + ptr->unk_0x06 = param_1; + ptr->unk_0x08 = param_2; + ptr->unk_0x0A = param_4; + strcpy(ptr->unk_0x0C, param_3); + ptr->mNext = mFirst; + mFirst = ptr; + } + } } /* 802C33E8-802C3504 .text flush__10JUTDbPrintFv */ void JUTDbPrint::flush() { - /* Nonmatching */ + unk_print* curPtr = (unk_print*)&mFirst; + unk_print* cur = mFirst; + if (mFont != NULL && cur != NULL) { + J2DOrthoGraph g(0, 0, 640.0f, 480.0f, -1, 1); + g.setPort(); + mFont->setGX(); + mFont->setCharColor(mColor); + + while (cur != NULL) { + if (mVisible) { + this->drawString(cur->unk_0x04, cur->unk_0x06, cur->unk_0x0A, (u8*)cur->unk_0x0C); + } + + if (--cur->unk_0x08 <= 0) { + unk_print* next = cur->mNext; + JKRFreeToHeap(mHeap, cur); + cur = next; + curPtr->mNext = next; + } else { + curPtr = cur; + cur = cur->mNext; + } + } + } } /* 802C3504-802C35F4 .text drawString__10JUTDbPrintFiiiPCUc */ -void JUTDbPrint::drawString(int, int, int, const unsigned char*) { - /* Nonmatching */ +void JUTDbPrint::drawString(int param_0, int param_1, int param_2, const unsigned char* param_3) { + JUTFont* font = mFont; + font->drawString_size_scale(param_0, param_1, font->getWidth(), font->getHeight(), (const char*)param_3, param_2, true); } /* 802C35F4-802C36C4 .text JUTReport__FiiPCce */ -void JUTReport(int, int, const char*, ...) { - /* Nonmatching */ +void JUTReport(int param_0, int param_1, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + char buf[0x100]; + int ret = vsnprintf(buf, 0x100, fmt, args); + va_end(args); + + if (ret < 0) { + return; + } + JUTDbPrint::sDebugPrint->enter(param_0, param_1, 1, buf, ret < 0x100 ? ret : 0xFF); } /* 802C36C4-802C37A0 .text JUTReport__FiiiPCce */ -void JUTReport(int, int, int, const char*, ...) { - /* Nonmatching */ +void JUTReport(int param_0, int param_1, int param_2, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + char buf[0x100]; + int ret = vsnprintf(buf, 0x100, fmt, args); + va_end(args); + + if (ret < 0) { + return; + } + JUTDbPrint::sDebugPrint->enter(param_0, param_1, param_2, buf, ret < 0x100 ? ret : 0xFF); } From 2447fb3a7807fc7a67f32a3bed6ac1cc44f7d659 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 19:45:18 -0700 Subject: [PATCH 26/89] JUTVideo --- configure.py | 2 +- src/JSystem/JUtility/JUTVideo.cpp | 169 +++++++++++++++++++++++++++--- 2 files changed, 154 insertions(+), 17 deletions(-) diff --git a/configure.py b/configure.py index adff482ab..05d8cf06c 100644 --- a/configure.py +++ b/configure.py @@ -815,7 +815,7 @@ config.libs = [ Object(NonMatching, "JSystem/JUtility/JUTException.cpp"), Object(NonMatching, "JSystem/JUtility/JUTDirectPrint.cpp"), Object(Matching, "JSystem/JUtility/JUTAssert.cpp"), - Object(NonMatching, "JSystem/JUtility/JUTVideo.cpp"), + Object(Matching, "JSystem/JUtility/JUTVideo.cpp"), Object(NonMatching, "JSystem/JUtility/JUTXfb.cpp"), Object(NonMatching, "JSystem/JUtility/JUTFader.cpp"), Object(NonMatching, "JSystem/JUtility/JUTProcBar.cpp"), diff --git a/src/JSystem/JUtility/JUTVideo.cpp b/src/JSystem/JUtility/JUTVideo.cpp index c8652fa0e..e1d72cb11 100644 --- a/src/JSystem/JUtility/JUTVideo.cpp +++ b/src/JSystem/JUtility/JUTVideo.cpp @@ -4,56 +4,193 @@ // #include "JSystem/JUtility/JUTVideo.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTDirectPrint.h" +#include "JSystem/JUtility/JUTXfb.h" +#include "dolphin/gx/GX.h" + +JUTVideo* JUTVideo::sManager; +OSTick JUTVideo::sVideoLastTick; +OSTick JUTVideo::sVideoInterval; +static bool sDrawWaiting; /* 802C7C34-802C7C8C .text createManager__8JUTVideoFPC16_GXRenderModeObj */ -void JUTVideo::createManager(const _GXRenderModeObj*) { - /* Nonmatching */ +JUTVideo* JUTVideo::createManager(const GXRenderModeObj* param_0) { + if (sManager == NULL) { + sManager = new JUTVideo(param_0); + } + return sManager; } /* 802C7C8C-802C7CD4 .text destroyManager__8JUTVideoFv */ void JUTVideo::destroyManager() { - /* Nonmatching */ + if (sManager != NULL) { + delete sManager; + sManager = NULL; + } } /* 802C7CD4-802C7DC8 .text __ct__8JUTVideoFPC16_GXRenderModeObj */ -JUTVideo::JUTVideo(const _GXRenderModeObj*) { - /* Nonmatching */ +JUTVideo::JUTVideo(const GXRenderModeObj* param_0) { + mRenderObj = NULL; + VIInit(); + setRenderMode(param_0); + mSetBlack = true; + mSetBlackFrameCount = 2; + VISetBlack(1); + VIFlush(); + field_0x8 = 0; + mRetraceCount = VIGetRetraceCount(); + field_0x10 = 1; + field_0x18 = 0; + sVideoLastTick = OSGetTick(); + sVideoInterval = 670000; + mPreRetraceCallback = VISetPreRetraceCallback(preRetraceProc); + mPostRetraceCallback = VISetPostRetraceCallback(postRetraceProc); + mPreCallback = NULL; + mPostCallback = NULL; + OSInitMessageQueue(&mMessageQueue, &mMessage, 1); + GXSetDrawDoneCallback(drawDoneCallback); } /* 802C7DC8-802C7E30 .text __dt__8JUTVideoFv */ JUTVideo::~JUTVideo() { - /* Nonmatching */ + VISetPreRetraceCallback(mPreRetraceCallback); + VISetPostRetraceCallback(mPostRetraceCallback); } /* 802C7E30-802C8054 .text preRetraceProc__8JUTVideoFUl */ -void JUTVideo::preRetraceProc(unsigned long) { - /* Nonmatching */ +void JUTVideo::preRetraceProc(u32 retrace_count) { + if (sManager->mPreCallback) { + (*sManager->mPreCallback)(retrace_count); + } + + OSTick tick = OSGetTick(); + sVideoInterval = tick - sVideoLastTick; + sVideoLastTick = tick; + + JUTXfb* xfb = JUTXfb::getManager(); + if (!xfb) { + VISetBlack(TRUE); + VIFlush(); + return; + } + + static void* frameBuffer = NULL; + + if (frameBuffer) { + JUTVideo* videoManager = JUTGetVideoManager(); + const GXRenderModeObj* renderMode = videoManager->getRenderMode(); + JUTDirectPrint* directPrint = JUTDirectPrint::getManager(); + directPrint->changeFrameBuffer(frameBuffer, renderMode->fb_width, renderMode->efb_height); + } + + if (sManager->mSetBlack == 1) { + s32 frame_count = sManager->mSetBlackFrameCount; + if (frame_count > 0) { + frame_count--; + } + + sManager->mSetBlackFrameCount = frame_count; + sManager->mSetBlack = frame_count != 0; + VISetBlack(TRUE); + VIFlush(); + return; + } + + if (!xfb) { + VISetBlack(TRUE); + VIFlush(); + return; + } + + if (xfb->getBufferNum() == 3 || xfb->getBufferNum() == 2) { + if (!sDrawWaiting) { + s16 index = xfb->getDrawnXfbIndex(); + xfb->setDisplayingXfbIndex(index); + if (index < 0) { + VISetBlack(1); + VIFlush(); + } else { + VISetBlack(FALSE); + VISetNextFrameBuffer(xfb->getDisplayingXfb()); + VIFlush(); + frameBuffer = xfb->getDisplayingXfb(); + } + } + } else if (xfb->getBufferNum() == 1) { + if (xfb->getSDrawingFlag() == 0) { + s16 index = xfb->getDrawnXfbIndex(); + if (index >= 0) { + xfb->setDisplayingXfbIndex(index); + GXCopyDisp(xfb->getDisplayingXfb(), GX_TRUE); + GXFlush(); + xfb->setSDrawingFlag(2); + frameBuffer = xfb->getDisplayingXfb(); + VISetBlack(FALSE); + } else { + VISetBlack(TRUE); + } + } + VIFlush(); + } } /* 802C8054-802C807C .text drawDoneStart__8JUTVideoFv */ void JUTVideo::drawDoneStart() { - /* Nonmatching */ + sDrawWaiting = true; + GXSetDrawDone(); } /* 802C807C-802C8088 .text dummyNoDrawWait__8JUTVideoFv */ void JUTVideo::dummyNoDrawWait() { - /* Nonmatching */ + sDrawWaiting = false; } /* 802C8088-802C8110 .text drawDoneCallback__8JUTVideoFv */ void JUTVideo::drawDoneCallback() { - /* Nonmatching */ + JUTXfb* xfb = JUTXfb::getManager(); + if (!xfb) { + return; + } + + sDrawWaiting = false; + if (xfb->getBufferNum() == 1) { + if (xfb->getSDrawingFlag() == 1) { + xfb->setSDrawingFlag(0); + + void* frameBuffer = xfb->getDrawnXfb(); + if (frameBuffer) { + VISetNextFrameBuffer(xfb->getDrawnXfb()); + VIFlush(); + } + } + } } /* 802C8110-802C815C .text postRetraceProc__8JUTVideoFUl */ -void JUTVideo::postRetraceProc(unsigned long) { - /* Nonmatching */ +void JUTVideo::postRetraceProc(u32 retrace_count) { + if (sManager->mPostCallback != NULL) { + sManager->mPostCallback(retrace_count); + } + + OSMessage message = (OSMessage*)VIGetRetraceCount(); + OSSendMessage(&sManager->mMessageQueue, message, OS_MESSAGE_NOBLOCK); } /* 802C815C-802C81D4 .text setRenderMode__8JUTVideoFPC16_GXRenderModeObj */ -void JUTVideo::setRenderMode(const _GXRenderModeObj*) { - /* Nonmatching */ +void JUTVideo::setRenderMode(const GXRenderModeObj* pObj) { + if (mRenderObj != NULL && pObj->vi_tv_mode != mRenderObj->vi_tv_mode) { + mSetBlack = true; + mSetBlackFrameCount = 4; + } + mRenderObj = (GXRenderModeObj*)pObj; + VIConfigure(mRenderObj); + VIFlush(); + + if (mSetBlack) { + VIWaitForRetrace(); + VIWaitForRetrace(); + } } /* 802C81D4-802C81D8 .text waitRetraceIfNeed__8JUTVideoFv */ From 737df499a7c7b9576fe4addfe22f3316b0b93f38 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 20:04:59 -0700 Subject: [PATCH 27/89] JUTXfb --- src/JSystem/JUtility/JUTXfb.cpp | 84 ++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 13 deletions(-) diff --git a/src/JSystem/JUtility/JUTXfb.cpp b/src/JSystem/JUtility/JUTXfb.cpp index 485ca221f..50352ff0a 100644 --- a/src/JSystem/JUtility/JUTXfb.cpp +++ b/src/JSystem/JUtility/JUTXfb.cpp @@ -4,44 +4,102 @@ // #include "JSystem/JUtility/JUTXfb.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "dolphin/gx/GX.h" + +JUTXfb* JUTXfb::sManager; /* 802C81D8-802C81EC .text clearIndex__6JUTXfbFv */ void JUTXfb::clearIndex() { - /* Nonmatching */ + mDrawingXfbIndex = -1; + mDrawnXfbIndex = -1; + mDisplayingXfbIndex = -1; } /* 802C81EC-802C8224 .text common_init__6JUTXfbFi */ -void JUTXfb::common_init(int) { - /* Nonmatching */ +void JUTXfb::common_init(int bufNum) { + mBufferNum = bufNum; + clearIndex(); + mSDrawingFlag = 99; } /* 802C8224-802C82CC .text __ct__6JUTXfbFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumber */ -JUTXfb::JUTXfb(const _GXRenderModeObj*, JKRHeap*, JUTXfb::EXfbNumber) { +JUTXfb::JUTXfb(const _GXRenderModeObj* pObj, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { /* Nonmatching */ + common_init(xfbNum); + + if (pObj) { + initiate(pObj->fb_width, pObj->xfb_height, pHeap, xfbNum); + } else { + u16 fb_width = JUTVideo::getManager()->getRenderMode()->fb_width; + u16 efb_height = JUTVideo::getManager()->getRenderMode()->efb_height; + u16 xfb_height = JUTVideo::getManager()->getRenderMode()->xfb_height; + f32 scale_factor = GXGetYScaleFactor(efb_height, xfb_height); + u16 xfb_lines = GXGetNumXfbLines(efb_height, scale_factor); + + initiate(fb_width, xfb_lines, pHeap, xfbNum); + } } /* 802C82CC-802C833C .text __dt__6JUTXfbFv */ JUTXfb::~JUTXfb() { - /* Nonmatching */ + for (int i = 0; i < 3; i++) { + delXfb(i); + } + sManager = NULL; } /* 802C833C-802C837C .text delXfb__6JUTXfbFi */ -void JUTXfb::delXfb(int) { - /* Nonmatching */ +void JUTXfb::delXfb(int xfbIdx) { + if (mXfbAllocated[xfbIdx] && mBuffer[xfbIdx]) { + delete mBuffer[xfbIdx]; + } } /* 802C837C-802C8410 .text createManager__6JUTXfbFPC16_GXRenderModeObjP7JKRHeapQ26JUTXfb10EXfbNumber */ -void JUTXfb::createManager(const _GXRenderModeObj*, JKRHeap*, JUTXfb::EXfbNumber) { - /* Nonmatching */ +JUTXfb* JUTXfb::createManager(const _GXRenderModeObj* pObj, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { + JUT_CONFIRM(203, sManager == 0); + if (sManager == NULL) { + sManager = new JUTXfb(pObj, pHeap, xfbNum); + } + return sManager; } /* 802C8410-802C8468 .text destroyManager__6JUTXfbFv */ void JUTXfb::destroyManager() { - /* Nonmatching */ + JUT_CONFIRM(344, sManager); + delete sManager; + sManager = NULL; } /* 802C8468-802C8544 .text initiate__6JUTXfbFUsUsP7JKRHeapQ26JUTXfb10EXfbNumber */ -void JUTXfb::initiate(unsigned short, unsigned short, JKRHeap*, JUTXfb::EXfbNumber) { - /* Nonmatching */ +void JUTXfb::initiate(u16 width, u16 height, JKRHeap* pHeap, JUTXfb::EXfbNumber xfbNum) { + if (pHeap == NULL) { + pHeap = JKRHeap::getSystemHeap(); + } + + int size = ((u32)width + 0xf & 0xfff0) * (u32)height * 2; + + void* buf = ::operator new[](size, pHeap, 0x20); + mBuffer[0] = buf; + mXfbAllocated[0] = true; + + if (xfbNum >= 2) { + buf = ::operator new[](size, pHeap, 0x20); + mBuffer[1] = buf; + mXfbAllocated[1] = true; + } else { + mBuffer[1] = NULL; + mXfbAllocated[1] = false; + } + + if (xfbNum >= 3) { + buf = ::operator new[](size, pHeap, 0x20); + mBuffer[2] = buf; + mXfbAllocated[2] = true; + } else { + mBuffer[2] = NULL; + mXfbAllocated[2] = false; + } } From a8e7be19da562f55deb8d791c4d171a7a575aeb8 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 20:10:50 -0700 Subject: [PATCH 28/89] JUTFader --- configure.py | 2 +- include/JSystem/JUtility/JUTFader.h | 2 +- src/JSystem/JUtility/JUTFader.cpp | 75 ++++++++++++++++++++++++----- 3 files changed, 65 insertions(+), 14 deletions(-) diff --git a/configure.py b/configure.py index 05d8cf06c..4af123a79 100644 --- a/configure.py +++ b/configure.py @@ -817,7 +817,7 @@ config.libs = [ Object(Matching, "JSystem/JUtility/JUTAssert.cpp"), Object(Matching, "JSystem/JUtility/JUTVideo.cpp"), Object(NonMatching, "JSystem/JUtility/JUTXfb.cpp"), - Object(NonMatching, "JSystem/JUtility/JUTFader.cpp"), + Object(Matching, "JSystem/JUtility/JUTFader.cpp"), Object(NonMatching, "JSystem/JUtility/JUTProcBar.cpp"), Object(NonMatching, "JSystem/JUtility/JUTConsole.cpp"), Object(NonMatching, "JSystem/JUtility/JUTDirectFile.cpp"), diff --git a/include/JSystem/JUtility/JUTFader.h b/include/JSystem/JUtility/JUTFader.h index 3ee0a6a16..1bdd62d2b 100644 --- a/include/JSystem/JUtility/JUTFader.h +++ b/include/JSystem/JUtility/JUTFader.h @@ -15,7 +15,7 @@ public: /* 802E55DC */ void control(); /* 802E57D0 */ void setStatus(JUTFader::EStatus, int); - /* 802E5840 */ virtual ~JUTFader(); + /* 802E5840 */ virtual ~JUTFader() {}; /* 802E576C */ virtual bool startFadeIn(int); /* 802E579C */ virtual bool startFadeOut(int); /* 802E56DC */ virtual void draw(); diff --git a/src/JSystem/JUtility/JUTFader.cpp b/src/JSystem/JUtility/JUTFader.cpp index 92bdaa51b..ff3d4b261 100644 --- a/src/JSystem/JUtility/JUTFader.cpp +++ b/src/JSystem/JUtility/JUTFader.cpp @@ -4,34 +4,85 @@ // #include "JSystem/JUtility/JUTFader.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "dolphin/types.h" /* 802C8544-802C85F0 .text __ct__8JUTFaderFiiiiQ28JUtility6TColor */ -JUTFader::JUTFader(int, int, int, int, JUtility::TColor) { - /* Nonmatching */ +JUTFader::JUTFader(int x, int y, int width, int height, JUtility::TColor pColor) : mColor(pColor), mBox(x, y, x + width, y + height) { + mStatus = 0; + field_0x8 = 0; + field_0xa = 0; + field_0x24 = 0; + mEStatus = UNKSTATUS_M1; } /* 802C85F0-802C86F0 .text control__8JUTFaderFv */ void JUTFader::control() { - /* Nonmatching */ + if (0 <= mEStatus && mEStatus-- == 0) { + mStatus = field_0x24; + } + + if (mStatus == 1) { + return; + } + + switch (mStatus) { + case 0: + mColor.a = 0xFF; + break; + case 2: + mColor.a = 0xFF - ((++field_0xa * 0xFF) / field_0x8); + + if (field_0xa >= field_0x8) { + mStatus = 1; + } + + break; + case 3: + mColor.a = ((++field_0xa * 0xFF) / field_0x8); + + if (field_0xa >= field_0x8) { + mStatus = 0; + } + + break; + } + draw(); } /* 802C86F0-802C8780 .text draw__8JUTFaderFv */ void JUTFader::draw() { - /* Nonmatching */ + if (mColor.a == 0) { + return; + } + + J2DOrthoGraph orthograph; + orthograph.setColor(mColor); + orthograph.fillBox(mBox); } /* 802C8780-802C87B0 .text startFadeIn__8JUTFaderFi */ -void JUTFader::startFadeIn(int) { - /* Nonmatching */ +bool JUTFader::startFadeIn(int param_0) { + bool statusCheck = mStatus == 0; + + if (statusCheck) { + mStatus = 2; + field_0xa = 0; + field_0x8 = param_0; + } + + return statusCheck; } /* 802C87B0-802C87E4 .text startFadeOut__8JUTFaderFi */ -void JUTFader::startFadeOut(int) { - /* Nonmatching */ -} +bool JUTFader::startFadeOut(int param_0) { + bool statusCheck = mStatus == 1; -/* 802C87E4-802C882C .text __dt__8JUTFaderFv */ -JUTFader::~JUTFader() { - /* Nonmatching */ + if (statusCheck) { + mStatus = 3; + field_0xa = 0; + field_0x8 = param_0; + } + + return statusCheck; } From 839d543a8c62b9c8abf5e01483cc96e6a52fa3da Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Wed, 20 Sep 2023 22:06:07 -0700 Subject: [PATCH 29/89] JUTProcBar --- include/JSystem/JUtility/JUTProcBar.h | 16 +- src/JSystem/JUtility/JUTProcBar.cpp | 263 +++++++++++++++++++++++--- 2 files changed, 256 insertions(+), 23 deletions(-) diff --git a/include/JSystem/JUtility/JUTProcBar.h b/include/JSystem/JUtility/JUTProcBar.h index 5fb899e6f..99d94e11e 100644 --- a/include/JSystem/JUtility/JUTProcBar.h +++ b/include/JSystem/JUtility/JUTProcBar.h @@ -10,7 +10,13 @@ class JUTProcBar { public: class CTime { public: - /* 802E7340 */ CTime(); + /* 802E7340 */ CTime() { clear(); } + + void clear() { + mCost = 0; + field_0x8 = 0; + field_0xc = 0; + } void start(u8 param_0, u8 param_1, u8 param_2) { mR = param_0; @@ -51,6 +57,14 @@ public: /* 0x08 */ int mPosY; /* 0x0C */ int mWidth; /* 0x10 */ int mUserPosition; + + void setBarWidth(int width) { mBarWidth = width; } + void setPosition(int x, int y) { + mPosX = x; + mPosY = y; + } + void setWidth(int width) { mWidth = width; } + void setUserPosition(int userPos) { mUserPosition = userPos; } }; /* 802E5888 */ JUTProcBar(); diff --git a/src/JSystem/JUtility/JUTProcBar.cpp b/src/JSystem/JUtility/JUTProcBar.cpp index 7b71da8b3..b712ffcfa 100644 --- a/src/JSystem/JUtility/JUTProcBar.cpp +++ b/src/JSystem/JUtility/JUTProcBar.cpp @@ -4,74 +4,293 @@ // #include "JSystem/JUtility/JUTProcBar.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTVideo.h" #include "dolphin/types.h" /* 802C882C-802C8944 .text __ct__10JUTProcBarFv */ +// missing instruction JUTProcBar::JUTProcBar() { /* Nonmatching */ + mVisible = true; + mHeapBarVisible = true; + field_0x108 = 0; + u16 height = JUTVideo::getManager()->getXfbHeight(); + if (height > 400) { + mParams.setBarWidth(2); + mParams.setPosition(39, height - 40); + mParams.setWidth(562); + mParams.setUserPosition(height - 70); + } else { + mParams.setBarWidth(1); + mParams.setPosition(39, height - 20); + mParams.setWidth(562); + mParams.setUserPosition(height - 35); + } + field_0x110 = 1; + field_0x128 = 0; + mWatchHeap = NULL; } +JUTProcBar* JUTProcBar::sManager; + /* 802C8944-802C8988 .text __dt__10JUTProcBarFv */ JUTProcBar::~JUTProcBar() { - /* Nonmatching */ + sManager = NULL; } /* 802C8988-802C89D0 .text create__10JUTProcBarFv */ -void JUTProcBar::create() { - /* Nonmatching */ +JUTProcBar* JUTProcBar::create() { + if (!sManager) { + sManager = new JUTProcBar(); + } + return sManager; } /* 802C89D0-802C8A08 .text destroy__10JUTProcBarFv */ void JUTProcBar::destroy() { - /* Nonmatching */ + if (sManager) { + delete sManager; + } + sManager = NULL; } +static f32 oneFrameRate = 8.0f; +static f32 oneFrameRateUser = 10.0f; + /* 802C8A08-802C8AD8 .text clear__10JUTProcBarFv */ void JUTProcBar::clear() { - /* Nonmatching */ + sManager->idleStart(); + sManager->cpuStart(); + sManager->gpStart(); + sManager->wholeLoopStart(); + sManager->mCostFrame = 0; + oneFrameRate = 8.0f; + oneFrameRateUser = 10.0f; } /* 802C8AD8-802C8C6C .text bar_subroutine__10JUTProcBarFiiiiiiiQ28JUtility6TColorQ28JUtility6TColor */ -void JUTProcBar::bar_subroutine(int, int, int, int, int, int, int, JUtility::TColor, JUtility::TColor) { - /* Nonmatching */ +void JUTProcBar::bar_subroutine(int param_0, int param_1, int param_2, int param_3, int param_4, int param_5, int param_6, JUtility::TColor param_7, JUtility::TColor param_8) { + int var1 = param_6 * param_3 / param_4; + J2DFillBox(param_0, param_1, param_5 * param_3 / param_4, param_2, param_7); + if (var1 < 0) { + return; + } + if (var1 < 6) { + J2DFillBox(param_0, param_1, var1, param_2, param_8); + } else { + J2DFillBox(param_0 + var1 - 6, param_1, 6.0f, param_2, param_8); + } } /* 802C8C6C-802C8DB0 .text adjustMeterLength__10JUTProcBarFUlPfffPi */ -void JUTProcBar::adjustMeterLength(unsigned long, float*, float, float, int*) { - /* Nonmatching */ +void JUTProcBar::adjustMeterLength(u32 param_0, f32* param_1, f32 param_2, f32 param_3, int* param_4) { + BOOL var2 = false; + float var1 = *param_1; + while (var1 > param_2) { + if (param_0 * var1 * 20.0f / 16666.0f <= + mParams.mWidth - 30.0f) + break; + + var1 -= (1.0f / 10.0f); + var2 = true; + } + + if (var1 >= param_3) + *param_4 = 0; + if (var1 > param_3 - (1.0f / 5.0f)) + var1 = param_3; + + while (!var2 && var1 < param_3) { + (*param_4)++; + if (*param_4 < 0x1e) + break; + if ((param_0 * var1 * 20.0f / 16666.0f) < + (mParams.mWidth - 60.0f)) + var1 += (1.0f / 5.0f); + break; + } + *param_1 = var1; } /* 802C8DB0-802C8DE4 .text draw__10JUTProcBarFv */ void JUTProcBar::draw() { - /* Nonmatching */ + drawProcessBar(); + drawHeapBar(); } /* 802C8DE4-802C9CE4 .text drawProcessBar__10JUTProcBarFv */ void JUTProcBar::drawProcessBar() { - /* Nonmatching */ + if (mVisible) { + int frameDuration = 16666; // duration in miliseconds? for how long a frame takes, + if (JUTVideo::getManager() && ((JUTVideo::getManager()->getRenderMode()->vi_tv_mode >> 2) & 0x0f) == 1) // possibly a define + frameDuration = 20000; // duration for PAL + + static int cnt = 0; + adjustMeterLength(mWholeLoop.mCost, &oneFrameRate, 1.0f, 10.0f, &cnt); + int r28 = oneFrameRate * 20.0f; + int r27 = mParams.mBarWidth * 8; + int r26 = mParams.mBarWidth * 2; + int r25 = mParams.mBarWidth * 10; + int r24 = (mParams.mWidth - 4 + r28) / r28; + + mIdle.accumePeek(); + mGp.accumePeek(); + mCpu.accumePeek(); + + u32 totalTime = (mGp.mCost - mGpWait.mCost) - mCpu.mCost; // unsure of types + u32 gpuTime = (mGp.mCost - mGpWait.mCost); + J2DFillBox(mParams.mPosX, mParams.mPosY, mParams.mWidth, r27, JUtility::TColor(0, 0, 50, 200)); + J2DDrawFrame(mParams.mPosX, mParams.mPosY, mParams.mWidth, r27, JUtility::TColor(50, 50, 150, 255), 6); + if (mCostFrame > r24) + J2DFillBox(mParams.mPosX, mParams.mPosY + r27 + 1, mParams.mWidth, 1.0f, JUtility::TColor(250, 0, 0, 200)); + else + J2DFillBox(mParams.mPosX, mParams.mPosY + r27 + 1, mCostFrame * r28 + 2, 1.0f, JUtility::TColor(0, 250, 250, 200)); + + int stack92 = mWholeLoop.mCost * r28 / frameDuration; + if (stack92 > mParams.mWidth) + J2DFillBox(mParams.mPosX, mParams.mPosY, mParams.mWidth, 1.0f, JUtility::TColor(255, 100, 0, 255)); + else + J2DFillBox(mParams.mPosX, mParams.mPosY, stack92, 1.0f, JUtility::TColor(50, 255, 0, 255)); + + if (field_0x110 == 0) { + int r23 = mParams.mPosY + mParams.mBarWidth; + bar_subroutine(mParams.mPosX + 1, r23, r26, r28, frameDuration, mGp.mCost, mGp.field_0x8, JUtility::TColor(80, 255, 80, 255), + JUtility::TColor(100, 255, 120, 255)); + r23 += mParams.mBarWidth * 2; + bar_subroutine(mParams.mPosX + 1, r23, r26, r28, frameDuration, mCpu.mCost, mCpu.field_0x8, JUtility::TColor(255, 80, 80, 255), + JUtility::TColor(255, 100, 100, 255)); + r23 += mParams.mBarWidth * 2; + bar_subroutine(mParams.mPosX + 1, r23, r26, r28, frameDuration, mIdle.mCost, mIdle.field_0x8, JUtility::TColor(180, 180, 160, 255), + JUtility::TColor(200, 200, 200, 255)); + } else { + int r22 = mParams.mPosY + mParams.mBarWidth; + int r21 = mParams.mPosX + 1; + bar_subroutine(r21, r22, r26, r28, frameDuration, gpuTime, -1, JUtility::TColor(80, 255, 80, 255), + JUtility::TColor(80, 255, 80, 255)); + int thingy1 = gpuTime * r28 / frameDuration + r21; // inline or define? + J2DFillBox(thingy1, r22, mGpWait.calcBarSize(r28, frameDuration), r26, JUtility::TColor(0, 255, 0, 255)); + int r30 = mGp.calcBarSize(r28, frameDuration) + r21; + r21 += totalTime * r28 / frameDuration; + r22 += mParams.mBarWidth * 2; + bar_subroutine(r21, r22, r26, r28, frameDuration, mCpu.mCost, -1, JUtility::TColor(255, 80, 80, 255), + JUtility::TColor(255, 80, 80, 255)); + r22 += mParams.mBarWidth * 2; + bar_subroutine(r30, r22, r26, r28, frameDuration, mIdle.mCost, -1, JUtility::TColor(180, 180, 160, 255), + JUtility::TColor(180, 180, 160, 255)); + } + for (int i = 1; i < r24; i++) { + int temp2 = mParams.mPosX + i * r28 + 1; + J2DDrawLine(temp2, mParams.mPosY + mParams.mBarWidth, temp2, mParams.mPosY + r27 - mParams.mBarWidth, + (i % 5) != 0 ? JUtility::TColor(100, 100, 255, 255) : JUtility::TColor(180, 255, 255, 255), 12); + } + u32 temp3 = 0; + for (int i = 0; i < 8; i++) { + CTime* time = &mUsers[i]; + if (++time->field_0xc >= 0x10 || time->mCost > time->field_0x8) { + time->field_0x8 = time->mCost; + time->field_0xc = 0; + } + if (time->field_0x8 > temp3) + temp3 = time->field_0x8; + } + if ((bool)temp3 == true) { + static int cntUser = 0; + adjustMeterLength(temp3, &oneFrameRateUser, 1.0f, 10.0f, &cntUser); + int r21 = oneFrameRateUser * 20.0f; + J2DFillBox(mParams.mPosX, mParams.mUserPosition, mParams.mWidth, r25, JUtility::TColor(0, 0, 50, 200)); + J2DDrawFrame(mParams.mPosX, mParams.mUserPosition, mParams.mWidth, r25, JUtility::TColor(50, 50, 150, 255), 6); + for (int i = 0; i < 8; i++) { + CTime* time = &mUsers[i]; + if (++time->field_0xc >= 0x10 || time->mCost > time->field_0x8) { + time->field_0x8 = time->mCost; + time->field_0xc = 0; + } + if (time->mCost != 0 || time->field_0x8 != 0) { + int temp4 = time->mCost * r21 / frameDuration; + int temp5 = time->field_0x8 * r21 / frameDuration; + time->mCost = 0; + J2DFillBox(mParams.mPosX + 1, mParams.mUserPosition + mParams.mBarWidth + i * mParams.mBarWidth, temp4, + mParams.mBarWidth, JUtility::TColor(time->mR, time->mG, time->mB, 255)); + + if (temp5 < 3u) + J2DFillBox(mParams.mPosX, mParams.mUserPosition + mParams.mBarWidth + i * mParams.mBarWidth, temp5, + mParams.mBarWidth, JUtility::TColor(255, 200, 50, 255)); + else + J2DFillBox(mParams.mPosX + temp5 - 3, mParams.mUserPosition + mParams.mBarWidth + i * mParams.mBarWidth, 3.0f, + mParams.mBarWidth, JUtility::TColor(255, 200, 50, 255)); + } + } + + int r22 = (mParams.mWidth - 4 + r21) / r21; + + for (int i = 1; i < r22; i++) { + int temp6 = mParams.mPosX + i * r21 + 1; + J2DDrawLine(temp6, mParams.mUserPosition + mParams.mBarWidth, temp6, mParams.mUserPosition + r25 - mParams.mBarWidth, + (i % 5) != 0 ? JUtility::TColor(100, 100, 255, 255) : JUtility::TColor(180, 255, 255, 255), 12); + } + } + field_0x108 = 0; + } } /* 802C9CE4-802C9D4C .text addrToXPos__FPvi */ -void addrToXPos(void*, int) { - /* Nonmatching */ +int addrToXPos(void* param_0, int param_1) { + return param_1 * (((u32)param_0 - 0x80000000) / (float)JKRHeap::mMemorySize); } /* 802C9D4C-802C9DB4 .text byteToXLen__Fii */ -void byteToXLen(int, int) { - /* Nonmatching */ +int byteToXLen(int param_0, int param_1) { + return param_1 * (param_0 / (float)JKRHeap::mMemorySize); } /* 802C9DB4-802C9F48 .text heapBar__FP7JKRHeapiiiii */ -void heapBar(JKRHeap*, int, int, int, int, int) { - /* Nonmatching */ +void heapBar(JKRHeap* param_0, int param_1, int param_2, int param_3, int param_4, int param_5) { + int stack52 = param_1 + addrToXPos(param_0->getStartAddr(), param_4); + int var1 = param_1 + addrToXPos(param_0->getEndAddr(), param_4); + int stack36 = byteToXLen(param_0->getTotalFreeSize(), param_4); + J2DFillBox(stack52, param_2 - param_5 * 2 + param_5 / 2, var1 - stack52, param_5 / 2, + JUtility::TColor(255, 0, 200, 255)); + J2DFillBox(stack52, param_2 - param_5 * 2 + param_5 / 2, stack36, param_5 / 2, + JUtility::TColor(255, 180, 250, 255)); } /* 802C9F48-802CA2E8 .text drawHeapBar__10JUTProcBarFv */ void JUTProcBar::drawHeapBar() { - /* Nonmatching */ -} + if (mHeapBarVisible) { + int start; // required/workaround for regswaps, end might be a shared variable too, however doesn't seem to be needed? + int posX = mParams.mPosX; + int posY = mParams.mPosY; + int barHeight = mParams.mBarWidth * 2; + int width = mParams.mWidth; + int height = mParams.mBarWidth * 2; -/* 802CA2E8-802CA2FC .text __ct__Q210JUTProcBar5CTimeFv */ -JUTProcBar::CTime::CTime() { - /* Nonmatching */ + // draw main box in opaque bordeaux red and main frame in purple? + J2DFillBox(posX, posY - (height * 2), width, height, JUtility::TColor(100, 0, 50, 200)); + J2DDrawFrame(posX, posY - (height * 2), width, height, JUtility::TColor(100, 50, 150, 255), 6); + + // Draws a pink line that shows the size of the memstart to start of arenalow? + start = posX + addrToXPos(JKRHeap::getCodeStart(), width); + int codeEnd = posX + addrToXPos(JKRHeap::getCodeEnd(), width); + J2DFillBox(start, posY - (height * 2), codeEnd - start, height, JUtility::TColor(255, 50, 150, 255)); + + // draws a dark blue line that shows how much memory is free? + start = posX + addrToXPos(JKRHeap::getUserRamStart(), width); + int userEnd = posX + addrToXPos(JKRHeap::getUserRamEnd(), width); + J2DFillBox(start, posY - (height * 2), userEnd - start, height, JUtility::TColor(0, 50, 150, 255)); + + // draws a light blue line that shows how much memory is free in the root heap(blends to light pink, not sure how this works) + int size = byteToXLen(JKRHeap::getRootHeap()->getTotalFreeSize(), width); + J2DFillBox(start, posY - (height * 2), size, height / 2, JUtility::TColor(0, 250, 250, 255)); + if (field_0x128 == 0) + { + // draws a line of either the watch heap(if available), otherwise draw the current heap + JKRHeap *heap = mWatchHeap ? mWatchHeap : JKRGetCurrentHeap(); + if (heap != JKRHeap::getSystemHeap()) { + heapBar(heap, posX, posY, barHeight, width, height); + } + + } + } } From 7aadaee7ac85af283b0defa52ed713fd5c783024 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 21 Sep 2023 04:39:46 -0700 Subject: [PATCH 30/89] JUTResFont --- include/JSystem/JUtility/JUTResFont.h | 2 +- src/JSystem/JUtility/JUTResFont.cpp | 69 ++++++++++++--------------- 2 files changed, 31 insertions(+), 40 deletions(-) diff --git a/include/JSystem/JUtility/JUTResFont.h b/include/JSystem/JUtility/JUTResFont.h index c8200136e..34f23ff0b 100644 --- a/include/JSystem/JUtility/JUTResFont.h +++ b/include/JSystem/JUtility/JUTResFont.h @@ -48,7 +48,7 @@ public: /* 0x1C */ int mWidth; /* 0x20 */ int mHeight; - /* 0x24 */ _GXTexObj field_0x24; + /* 0x24 */ _GXTexObj mTexObj; /* 0x44 */ int mTexPageIdx; /* 0x48 */ const ResFONT* mResFont; /* 0x4C */ ResFONT::INF1* mInfoBlock; diff --git a/src/JSystem/JUtility/JUTResFont.cpp b/src/JSystem/JUtility/JUTResFont.cpp index 135861bce..05f47a1a8 100644 --- a/src/JSystem/JUtility/JUTResFont.cpp +++ b/src/JSystem/JUtility/JUTResFont.cpp @@ -5,6 +5,7 @@ #include "JSystem/JUtility/JUTResFont.h" #include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JSupport/JSupport.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" #include "dolphin/gx/GX.h" @@ -221,18 +222,18 @@ void JUTResFont::setGX(JUtility::TColor col1, JUtility::TColor col2) { f32 JUTResFont::drawChar_scale(f32 posX, f32 posY, f32 scaleX, f32 scaleY, int chr, bool flag) { /* Nonmatching */ JUTFont::TWidth width; - f32 posMinX; - f32 posMinY; + f32 x1; + f32 y1; f32 scaledHeight; - f32 posMaxX; + f32 x2; JUT_ASSERT(0x179, mValid) loadFont(chr, GX_TEXMAP0, &width); if (mFixed || !flag) { - posMinX = posX; + x1 = posX; } else { - posMinX = (posX - width.field_0x0 * (scaleX / getCellWidth())); + x1 = (posX - width.field_0x0 * (scaleX / getCellWidth())); } f32 retval = mFixedWidth * (scaleX / getCellWidth()); if (!mFixed) { @@ -242,47 +243,40 @@ f32 JUTResFont::drawChar_scale(f32 posX, f32 posY, f32 scaleX, f32 scaleY, int c retval = width.field_0x1 * (scaleX / getCellWidth()); } } - posMaxX = posMinX + scaleX; - posMinY = posY - getAscent() * (scaleY / getHeight()); + x2 = x1 + scaleX; + y1 = posY - getAscent() * (scaleY / getHeight()); scaledHeight = scaleY / getHeight(); f32 descent = getDescent(); - f32 posMaxY = descent * scaledHeight + posY; + f32 y2 = descent * scaledHeight + posY; // Glyph details - ResFONT::GLY1* used_glyphs = mpGlyphBlocks[field_0x66]; - u16 texWidth = used_glyphs->textureWidth; - u16 texHeight = used_glyphs->textureHeight; - int tWidth = mWidth; - int tHeight = mHeight; - int shiftWidth = (tWidth + used_glyphs->cellWidth) << 15; - int texMinX = (tWidth << 15) / texWidth; - int texMinY = (tHeight << 15) / texHeight; - int shiftHeight = (tHeight + used_glyphs->cellHeight) << 15; - s32 texMaxX = shiftWidth / texWidth; - s32 texMaxY = shiftHeight / texHeight; + int u1 = (mWidth * 0x8000) / mpGlyphBlocks[field_0x66]->textureWidth; + int v1 = (mHeight * 0x8000) / mpGlyphBlocks[field_0x66]->textureHeight; + s32 u2 = ((mWidth + mpGlyphBlocks[field_0x66]->cellWidth) * 0x8000) / mpGlyphBlocks[field_0x66]->textureWidth; + s32 v2 = ((mHeight + mpGlyphBlocks[field_0x66]->cellHeight) * 0x8000) / mpGlyphBlocks[field_0x66]->textureHeight; GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); // Bottom Left - GXPosition3f32(posMinX, posMinY, 0.0f); + GXPosition3f32(x1, y1, 0.0f); GXColor1u32(mColor1); - GXTexCoord2s16(texMinX, texMinY); + GXTexCoord2s16(u1, v1); // Bottom Right - GXPosition3f32(posMaxX, posMinY, 0.0f); + GXPosition3f32(x2, y1, 0.0f); GXColor1u32(mColor2); - GXTexCoord2s16(texMaxX, texMinY); + GXTexCoord2s16(u2, v1); // Top Right - GXPosition3f32(posMaxX, posMaxY, 0.0f); + GXPosition3f32(x2, y2, 0.0f); GXColor1u32(mColor4); - GXTexCoord2s16(texMaxX, texMaxY); + GXTexCoord2s16(u2, v2); // Top Left - GXPosition3f32(posMinX, posMaxY, 0.0f); + GXPosition3f32(x1, y2, 0.0f); GXColor1u32(mColor3); - GXTexCoord2s16(texMinX, texMaxY); + GXTexCoord2s16(u1, v2); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); @@ -306,8 +300,7 @@ void JUTResFont::getWidthEntry(int code, JUTFont::TWidth* width) const { width->field_0x1 = mInfoBlock->width; for (int i = 0; i < mWidthBlockNum; i++) { - ResFONT::WID1* block = mpWidthBlocks[i]; - if (block->startCode <= fontCode && fontCode <= block->endCode) { + if (mpWidthBlocks[i]->startCode <= fontCode && fontCode <= mpWidthBlocks[i]->endCode) { int chunkNum = (fontCode - mpWidthBlocks[i]->startCode) * 2; u8* ptr = &mpWidthBlocks[i]->mChunkNum[chunkNum]; width->field_0x0 = ptr[0]; @@ -431,30 +424,28 @@ void JUTResFont::loadImage(int code, _GXTexMapID id) { mHeight = cellRow * mpGlyphBlocks[i]->cellHeight; if (pageIdx != mTexPageIdx || i != field_0x66) { - GXInitTexObj(&field_0x24, &mpGlyphBlocks[i]->data[pageIdx * mpGlyphBlocks[i]->textureSize], + GXInitTexObj(&mTexObj, &mpGlyphBlocks[i]->data[pageIdx * mpGlyphBlocks[i]->textureSize], mpGlyphBlocks[i]->textureWidth, mpGlyphBlocks[i]->textureHeight, (GXTexFmt)mpGlyphBlocks[i]->textureFormat, GX_CLAMP, GX_CLAMP, 0); - GXInitTexObjLOD(&field_0x24, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1); + GXInitTexObjLOD(&mTexObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1); mTexPageIdx = pageIdx; field_0x66 = i; } - GXLoadTexObj(&field_0x24, id); + GXLoadTexObj(&mTexObj, id); } /* 802C3248-802C328C .text convertSjis__10JUTResFontCFiPUs */ int JUTResFont::convertSjis(int inChar, u16* inLead) const { - /* Nonmatching */ - int outChar = (u8)inChar; - inChar = inChar >> 8 & 0xFF; - outChar -= 0x40; - if (0x40 <= outChar) { - outChar--; + int hi = JSUHiByte(inChar); + int lo = JSULoByte(inChar) - 0x40; + if (0x40 <= lo) { + lo--; } u16 lead = 0x31C; if (inLead) { lead = *inLead; } - return outChar + (inChar - 0x88) * 0xBC + -0x5E + lead; + return lo + (hi - 0x88) * 0xBC + -0x5E + lead; } From 3e26fdb75f728ba9cf265e2e335ae16cf0e7276e Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 21 Sep 2023 04:40:00 -0700 Subject: [PATCH 31/89] JUTCacheFont --- src/JSystem/JUtility/JUTCacheFont.cpp | 269 ++++++++++++++++++++++++-- 1 file changed, 249 insertions(+), 20 deletions(-) diff --git a/src/JSystem/JUtility/JUTCacheFont.cpp b/src/JSystem/JUtility/JUTCacheFont.cpp index 2f20872e8..09c53c115 100644 --- a/src/JSystem/JUtility/JUTCacheFont.cpp +++ b/src/JSystem/JUtility/JUTCacheFont.cpp @@ -4,51 +4,261 @@ // #include "JSystem/JUtility/JUTCacheFont.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "dolphin/gx/GX.h" /* 802C03D4-802C0454 .text __ct__12JUTCacheFontFPC7ResFONTUlP7JKRHeap */ -JUTCacheFont::JUTCacheFont(const ResFONT*, unsigned long, JKRHeap*) { - /* Nonmatching */ +JUTCacheFont::JUTCacheFont(const ResFONT* p_fontRes, u32 cacheSize, JKRHeap* p_heap) { + initialize_state(); + JUTResFont::initialize_state(); + JUTFont::initialize_state(); + initiate(p_fontRes, NULL, cacheSize, p_heap); } /* 802C0454-802C04E8 .text __dt__12JUTCacheFontFv */ JUTCacheFont::~JUTCacheFont() { - /* Nonmatching */ + if (isValid()) { + deleteMemBlocks_CacheFont(); + initialize_state(); + + deleteMemBlocks_ResFont(); + JUTResFont::initialize_state(); + + JUTFont::initialize_state(); + } } /* 802C04E8-802C056C .text deleteMemBlocks_CacheFont__12JUTCacheFontFv */ void JUTCacheFont::deleteMemBlocks_CacheFont() { - /* Nonmatching */ + if (field_0xb0 != 0) { + delete[] mCacheBuffer; + } + + delete field_0xac; + delete mInfoBlock; + delete mpMemBlocks; + delete field_0x7c; + delete field_0x80; + delete field_0x84; } /* 802C056C-802C05A8 .text initialize_state__12JUTCacheFontFv */ void JUTCacheFont::initialize_state() { - /* Nonmatching */ + field_0xb0 = 0; + mCacheBuffer = NULL; + + field_0xac = NULL; + mInfoBlock = NULL; + field_0x7c = NULL; + field_0x80 = NULL; + field_0x84 = NULL; + mpMemBlocks = NULL; + + mPagingType = PAGE_TYPE_0; + mMaxSheetSize = 0; + + mCacheBuffer = NULL; + field_0x9c = NULL; + field_0xa0 = NULL; } /* 802C05A8-802C0738 .text getMemorySize__12JUTCacheFontFPC7ResFONTPUsPUlPUsPUlPUsPUlPUl */ -void JUTCacheFont::getMemorySize(const ResFONT*, unsigned short*, unsigned long*, unsigned short*, unsigned long*, unsigned short*, unsigned long*, unsigned long*) { - /* Nonmatching */ +int JUTCacheFont::getMemorySize(const ResFONT* p_font, u16* o_widCount, u32* o_widSize, u16* o_glyCount, u32* o_glySize, u16* o_mapCount, u32* o_mapSize, u32* o_glyTexSize) { + if (p_font == NULL) { + return 0; + } + + u16 widBlockCount = 0; + u16 glyBlockCount = 0; + u16 mapBlockCount = 0; + u32 totalWidSize = 0; + u32 totalGlySize = 0; + u32 totalMapSize = 0; + u32 maxGlyTexSize = 0; + u32 glyTexSize; + + u8* fontInf = (u8*)p_font->data; + for (int i = 0; i < p_font->numBlocks; i++) { + switch (((BlockHeader*)fontInf)->magic) { + case 'INF1': + break; + case 'WID1': + totalWidSize += ((BlockHeader*)fontInf)->size; + widBlockCount++; + break; + case 'GLY1': + totalGlySize += ((BlockHeader*)fontInf)->size; + glyTexSize = ((ResFONT::GLY1*)fontInf)->textureSize; + glyBlockCount++; + if (glyTexSize > maxGlyTexSize) { + maxGlyTexSize = glyTexSize; + } + break; + case 'MAP1': + totalMapSize += ((BlockHeader*)fontInf)->size; + mapBlockCount++; + break; + default: + JUTReportConsole("JUTCacheFont: Unknown data block\n"); + break; + } + + fontInf += ((BlockHeader*)fontInf)->size; + } + + if (o_widCount != NULL) { + *o_widCount = widBlockCount; + } + + if (o_glyCount != NULL) { + *o_glyCount = glyBlockCount; + } + + if (o_mapCount != NULL) { + *o_mapCount = mapBlockCount; + } + + if (o_widSize != NULL) { + *o_widSize = totalWidSize; + } + + if (o_glySize != NULL) { + *o_glySize = totalGlySize; + } + + if (o_mapSize != NULL) { + *o_mapSize = totalMapSize; + } + + if (o_glyTexSize != NULL) { + *o_glyTexSize = maxGlyTexSize; + } + + return 1; } /* 802C0738-802C0798 .text initiate__12JUTCacheFontFPC7ResFONTPvUlP7JKRHeap */ -void JUTCacheFont::initiate(const ResFONT*, void*, unsigned long, JKRHeap*) { - /* Nonmatching */ +int JUTCacheFont::initiate(const ResFONT* p_fontRes, void* param_1, u32 param_2, JKRHeap* p_heap) { + if (!internal_initiate(p_fontRes, param_1, param_2, p_heap)) { + deleteMemBlocks_CacheFont(); + deleteMemBlocks_ResFont(); + JUTFont::initialize_state(); + mValid = false; + return 0; + } + + return 1; } /* 802C0798-802C089C .text internal_initiate__12JUTCacheFontFPC7ResFONTPvUlP7JKRHeap */ -void JUTCacheFont::internal_initiate(const ResFONT*, void*, unsigned long, JKRHeap*) { - /* Nonmatching */ +bool JUTCacheFont::internal_initiate(const ResFONT* p_fontRes, void* param_1, u32 param_2, JKRHeap* param_3) { + deleteMemBlocks_CacheFont(); + initialize_state(); + deleteMemBlocks_ResFont(); + JUTResFont::initialize_state(); + JUTFont::initialize_state(); + + if (p_fontRes == NULL) { + return false; + } + + mResFont = p_fontRes; + mValid = true; + getMemorySize(p_fontRes, &mWidthBlockNum, &mTotalWidSize, &mGlyphBlockNum, &mTotalGlySize, + &mMapBlockNum, &mTotalMapSize, &mMaxSheetSize); + + if (!allocArea(param_1, param_2, param_3)) { + return false; + } else if (!allocArray(param_3)) { + return false; + } + + setBlock(); + return true; } /* 802C089C-802C0A90 .text allocArea__12JUTCacheFontFPvUlP7JKRHeap */ -void JUTCacheFont::allocArea(void*, unsigned long, JKRHeap*) { - /* Nonmatching */ +bool JUTCacheFont::allocArea(void* cacheBuffer, u32 param_1, JKRHeap* heap) { + mInfoBlock = (ResFONT::INF1*)new (heap, 0) ResFONT(); + if (mInfoBlock == NULL) { + return false; + } + + if (mTotalWidSize != 0) { + field_0x7c = new (heap, 0) u8[mTotalWidSize]; + if (field_0x7c == NULL) { + return false; + } + } + + if (mGlyphBlockNum != 0) { + field_0x80 = new (heap, 0) u8[mGlyphBlockNum * sizeof(ResFONT::GLY1)]; + if (field_0x80 == NULL) { + return false; + } + + field_0xac = JKRAram::getManager()->mAramHeap->alloc( + mTotalGlySize - (mGlyphBlockNum * sizeof(ResFONT::GLY1)), JKRAramHeap::HEAD); + if (field_0xac == NULL) { + return false; + } + } + + if (mTotalMapSize != 0) { + field_0x84 = new (heap, 0) u8[mTotalMapSize]; + if (field_0x84 == NULL) { + return false; + } + } + + field_0x94 = mMaxSheetSize + 0x40; + mCachePage = param_1 / field_0x94; + u32 v1 = field_0x94 * mCachePage; + if (mCachePage == 0) { + return false; + } + + if (cacheBuffer != NULL) { + JUT_ASSERT(351, ( (u32)cacheBuffer & 0x1f ) == 0); + mCacheBuffer = cacheBuffer; + field_0xb0 = 0; + } else { + mCacheBuffer = new (heap, 0x20) u8[v1]; + if (mCacheBuffer == NULL) { + return false; + } + field_0xb0 = 1; + } + + invalidiateAllCache(); + return true; } /* 802C0A90-802C0B78 .text allocArray__12JUTCacheFontFP7JKRHeap */ -void JUTCacheFont::allocArray(JKRHeap*) { - /* Nonmatching */ +bool JUTCacheFont::allocArray(JKRHeap* heap) { + mpMemBlocks = (void**)new (heap, 0) u32[mWidthBlockNum + mGlyphBlockNum + mMapBlockNum]; + if (mpMemBlocks == NULL) { + return false; + } + + void** blocks = mpMemBlocks; + if (mWidthBlockNum) { + mpWidthBlocks = (ResFONT::WID1**)blocks; + blocks = blocks + mWidthBlockNum; + } + if (mGlyphBlockNum) { + mpGlyphBlocks = (ResFONT::GLY1**)blocks; + blocks = blocks + mGlyphBlockNum; + for (int i = 0; i < mGlyphBlockNum; i++) { + mpGlyphBlocks[i] = (ResFONT::GLY1*)((u8*)mCacheBuffer + (field_0x94 * i)); + } + } + if (mMapBlockNum) { + mpMapBlocks = (ResFONT::MAP1**)blocks; + } + return true; } /* 802C0B78-802C0DD0 .text setBlock__12JUTCacheFontFv */ @@ -82,11 +292,30 @@ void JUTCacheFont::invalidiateAllCache() { } /* 802C126C-802C12B0 .text unlink__12JUTCacheFontFPQ212JUTCacheFont15TGlyphCacheInfo */ -void JUTCacheFont::unlink(JUTCacheFont::TGlyphCacheInfo*) { - /* Nonmatching */ +void JUTCacheFont::unlink(JUTCacheFont::TGlyphCacheInfo* cacheInfo) { + if (cacheInfo->mPrev == NULL) { + field_0x9c = cacheInfo->mNext; + } else { + cacheInfo->mPrev->mNext = cacheInfo->mNext; + } + + if (cacheInfo->mNext == NULL) { + field_0xa0 = cacheInfo->mPrev; + } else { + cacheInfo->mNext->mPrev = cacheInfo->mPrev; + } } /* 802C12B0-802C12DC .text prepend__12JUTCacheFontFPQ212JUTCacheFont15TGlyphCacheInfo */ -void JUTCacheFont::prepend(JUTCacheFont::TGlyphCacheInfo*) { - /* Nonmatching */ +void JUTCacheFont::prepend(JUTCacheFont::TGlyphCacheInfo* cacheInfo) { + TGlyphCacheInfo* oldHead = field_0x9c; + field_0x9c = cacheInfo; + cacheInfo->mPrev = NULL; + cacheInfo->mNext = oldHead; + + if (oldHead == NULL) { + field_0xa0 = cacheInfo; + } else { + oldHead->mPrev = cacheInfo; + } } From 53cd6dd5a2f235ba5218c838584a745e47e886f1 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 21 Sep 2023 04:42:15 -0700 Subject: [PATCH 32/89] J2DGrafContext --- src/JSystem/J2DGraph/J2DGrafContext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JSystem/J2DGraph/J2DGrafContext.cpp b/src/JSystem/J2DGraph/J2DGrafContext.cpp index 4ddfb3b7e..35d67976f 100644 --- a/src/JSystem/J2DGraph/J2DGrafContext.cpp +++ b/src/JSystem/J2DGraph/J2DGrafContext.cpp @@ -66,7 +66,7 @@ void J2DGrafContext::setup2D() { /* 802CD340-802CD590 .text setScissor__14J2DGrafContextFv */ void J2DGrafContext::setScissor() { - JGeometry::TBox2 bounds(0, 0, 1024, 1024); + JGeometry::TBox2 bounds(0, 0, 1024, 1000); JGeometry::TBox2 curBounds(mScissorBounds); mScissorBounds.intersect(bounds); curBounds.absolute(); From 32c90472a9ac381753f3af4dc9b1f94f90cc3553 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 21 Sep 2023 11:59:02 -0700 Subject: [PATCH 33/89] missing configure.py changes from b2fc1d2683958a772da702d74bbbfd8e4a1d514c missing splits.txt changes from adb95b135c3d7498eba29bbd9728d345eed5a407 --- config/GZLJ01/splits.txt | 48 ++++++++++++++++++++-------------------- config/GZLP01/splits.txt | 48 ++++++++++++++++++++-------------------- configure.py | 26 +++++++++++----------- 3 files changed, 61 insertions(+), 61 deletions(-) diff --git a/config/GZLJ01/splits.txt b/config/GZLJ01/splits.txt index 8a10d4cd7..7f8582fd7 100644 --- a/config/GZLJ01/splits.txt +++ b/config/GZLJ01/splits.txt @@ -3955,98 +3955,98 @@ MSL_C/Math/Double_precision/w_fmod.c: MSL_C/PPC_EABI/math_ppc.c: .text start:0x8032E858 end:0x8032E8E8 -TRK_MINNOW_DOLPHIN/mainloop.c: +TRK_MINNOW_DOLPHIN/Portable/mainloop.c: .text start:0x8032E8E8 end:0x8032E9E0 -TRK_MINNOW_DOLPHIN/nubevent.c: +TRK_MINNOW_DOLPHIN/Portable/nubevent.c: .text start:0x8032E9E0 end:0x8032EC08 .bss start:0x803E53E0 end:0x803E5408 -TRK_MINNOW_DOLPHIN/nubinit.c: +TRK_MINNOW_DOLPHIN/Portable/nubinit.c: .text start:0x8032EC08 end:0x8032ED88 .rodata start:0x80364900 end:0x80364920 .bss start:0x803E5408 end:0x803E5410 -TRK_MINNOW_DOLPHIN/msg.c: +TRK_MINNOW_DOLPHIN/Portable/msg.c: .text start:0x8032ED88 end:0x8032EF64 -TRK_MINNOW_DOLPHIN/msgbuf.c: +TRK_MINNOW_DOLPHIN/Portable/msgbuf.c: .text start:0x8032EF64 end:0x8032F990 .rodata start:0x80364920 end:0x80364940 .bss start:0x803E5410 end:0x803E6DC0 -TRK_MINNOW_DOLPHIN/serpoll.c: +TRK_MINNOW_DOLPHIN/Portable/serpoll.c: .text start:0x8032F990 end:0x8032FD5C .bss start:0x803E6DC0 end:0x803E6DD8 -TRK_MINNOW_DOLPHIN/usr_put.c: +TRK_MINNOW_DOLPHIN/Portable/usr_put.c: .text start:0x8032FD5C end:0x8032FDE8 -TRK_MINNOW_DOLPHIN/dispatch.c: +TRK_MINNOW_DOLPHIN/Portable/dispatch.c: .text start:0x8032FDE8 end:0x8032FE84 .data start:0x80395D20 end:0x80395DA8 .bss start:0x803E6DD8 end:0x803E6DE0 -TRK_MINNOW_DOLPHIN/msghndlr.c: +TRK_MINNOW_DOLPHIN/Portable/msghndlr.c: .text start:0x8032FE84 end:0x803326E4 .data start:0x80395DA8 end:0x80395DE0 .bss start:0x803E6DE0 end:0x803E6DE8 -TRK_MINNOW_DOLPHIN/support.c: +TRK_MINNOW_DOLPHIN/Portable/support.c: .text start:0x803326E4 end:0x80332FA4 -TRK_MINNOW_DOLPHIN/mutex_TRK.c: +TRK_MINNOW_DOLPHIN/Portable/mutex_TRK.c: .text start:0x80332FA4 end:0x80332FBC -TRK_MINNOW_DOLPHIN/notify.c: +TRK_MINNOW_DOLPHIN/Portable/notify.c: .text start:0x80332FBC end:0x80333094 -TRK_MINNOW_DOLPHIN/flush_cache.c: +TRK_MINNOW_DOLPHIN/ppc/Generic/flush_cache.c: .text start:0x80333094 end:0x803330CC -TRK_MINNOW_DOLPHIN/mem_TRK.c: +TRK_MINNOW_DOLPHIN/Portable/mem_TRK.c: .init start:0x800034E0 end:0x80003534 .text start:0x803330CC end:0x80333188 -TRK_MINNOW_DOLPHIN/targimpl.c: +TRK_MINNOW_DOLPHIN/ppc/Generic/targimpl.c: .text start:0x80333188 end:0x80334A18 .rodata start:0x80364940 end:0x803649C8 .data start:0x80395DE0 end:0x80395E10 .bss start:0x803E6DE8 end:0x803E7368 -TRK_MINNOW_DOLPHIN/targsupp.s: comment:0 +TRK_MINNOW_DOLPHIN/ppc/Export/targsupp.s: comment:0 .text start:0x80334A20 end:0x80334A40 align:16 -TRK_MINNOW_DOLPHIN/__exception.c: comment:0 +TRK_MINNOW_DOLPHIN/ppc/Generic/__exception.c: comment:0 .init start:0x80003534 end:0x80005468 -TRK_MINNOW_DOLPHIN/dolphin_trk.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/dolphin_trk.c: .init start:0x80005468 end:0x8000556C .text start:0x80334A40 end:0x80334B80 .data start:0x80395E10 end:0x80395E50 .bss start:0x803E7368 end:0x803E7370 -TRK_MINNOW_DOLPHIN/mpc_7xx_603e.c: +TRK_MINNOW_DOLPHIN/ppc/Generic/mpc_7xx_603e.c: .text start:0x80334B80 end:0x80334EF8 -TRK_MINNOW_DOLPHIN/main_TRK.c: +TRK_MINNOW_DOLPHIN/Portable/main_TRK.c: .text start:0x80334EF8 end:0x80334F3C .bss start:0x803E7370 end:0x803E7378 -TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/dolphin_trk_glue.c: .text start:0x80334F3C end:0x803353E8 .rodata start:0x803649C8 end:0x80364A10 .data start:0x80395E50 end:0x80395E6C .bss start:0x803E7378 end:0x803E95A0 -TRK_MINNOW_DOLPHIN/targcont.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/targcont.c: .text start:0x803353E8 end:0x8033541C -TRK_MINNOW_DOLPHIN/target_options.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/target_options.c: .text start:0x8033541C end:0x80335438 .bss start:0x803E95A0 end:0x803E95A1 -TRK_MINNOW_DOLPHIN/mslsupp.c: +TRK_MINNOW_DOLPHIN/MetroTRK/Export/mslsupp.c: .text start:0x80335438 end:0x803355B0 amcstubs/AmcExi2Stubs.c: diff --git a/config/GZLP01/splits.txt b/config/GZLP01/splits.txt index 9a79cbdb2..216265d4a 100644 --- a/config/GZLP01/splits.txt +++ b/config/GZLP01/splits.txt @@ -3959,98 +3959,98 @@ MSL_C/Math/Double_precision/w_fmod.c: MSL_C/PPC_EABI/math_ppc.c: .text start:0x803363AC end:0x8033643C -TRK_MINNOW_DOLPHIN/mainloop.c: +TRK_MINNOW_DOLPHIN/Portable/mainloop.c: .text start:0x8033643C end:0x80336534 -TRK_MINNOW_DOLPHIN/nubevent.c: +TRK_MINNOW_DOLPHIN/Portable/nubevent.c: .text start:0x80336534 end:0x8033675C .bss start:0x803F9700 end:0x803F9728 -TRK_MINNOW_DOLPHIN/nubinit.c: +TRK_MINNOW_DOLPHIN/Portable/nubinit.c: .text start:0x8033675C end:0x803368DC .rodata start:0x80378140 end:0x80378160 .bss start:0x803F9728 end:0x803F9730 -TRK_MINNOW_DOLPHIN/msg.c: +TRK_MINNOW_DOLPHIN/Portable/msg.c: .text start:0x803368DC end:0x80336AB8 -TRK_MINNOW_DOLPHIN/msgbuf.c: +TRK_MINNOW_DOLPHIN/Portable/msgbuf.c: .text start:0x80336AB8 end:0x803374E4 .rodata start:0x80378160 end:0x80378180 .bss start:0x803F9730 end:0x803FB0E0 -TRK_MINNOW_DOLPHIN/serpoll.c: +TRK_MINNOW_DOLPHIN/Portable/serpoll.c: .text start:0x803374E4 end:0x803378B0 .bss start:0x803FB0E0 end:0x803FB0F8 -TRK_MINNOW_DOLPHIN/usr_put.c: +TRK_MINNOW_DOLPHIN/Portable/usr_put.c: .text start:0x803378B0 end:0x8033793C -TRK_MINNOW_DOLPHIN/dispatch.c: +TRK_MINNOW_DOLPHIN/Portable/dispatch.c: .text start:0x8033793C end:0x803379D8 .data start:0x803A9500 end:0x803A9588 .bss start:0x803FB0F8 end:0x803FB100 -TRK_MINNOW_DOLPHIN/msghndlr.c: +TRK_MINNOW_DOLPHIN/Portable/msghndlr.c: .text start:0x803379D8 end:0x8033A238 .data start:0x803A9588 end:0x803A95C0 .bss start:0x803FB100 end:0x803FB108 -TRK_MINNOW_DOLPHIN/support.c: +TRK_MINNOW_DOLPHIN/Portable/support.c: .text start:0x8033A238 end:0x8033AAF8 -TRK_MINNOW_DOLPHIN/mutex_TRK.c: +TRK_MINNOW_DOLPHIN/Portable/mutex_TRK.c: .text start:0x8033AAF8 end:0x8033AB10 -TRK_MINNOW_DOLPHIN/notify.c: +TRK_MINNOW_DOLPHIN/Portable/notify.c: .text start:0x8033AB10 end:0x8033ABE8 -TRK_MINNOW_DOLPHIN/flush_cache.c: +TRK_MINNOW_DOLPHIN/ppc/Generic/flush_cache.c: .text start:0x8033ABE8 end:0x8033AC20 -TRK_MINNOW_DOLPHIN/mem_TRK.c: +TRK_MINNOW_DOLPHIN/Portable/mem_TRK.c: .init start:0x800034E0 end:0x80003534 .text start:0x8033AC20 end:0x8033ACDC -TRK_MINNOW_DOLPHIN/targimpl.c: +TRK_MINNOW_DOLPHIN/ppc/Generic/targimpl.c: .text start:0x8033ACDC end:0x8033C56C .rodata start:0x80378180 end:0x80378208 .data start:0x803A95C0 end:0x803A95F0 .bss start:0x803FB108 end:0x803FB688 -TRK_MINNOW_DOLPHIN/targsupp.s: comment:0 +TRK_MINNOW_DOLPHIN/ppc/Export/targsupp.s: comment:0 .text start:0x8033C570 end:0x8033C590 align:16 -TRK_MINNOW_DOLPHIN/__exception.c: comment:0 +TRK_MINNOW_DOLPHIN/ppc/Generic/__exception.c: comment:0 .init start:0x80003534 end:0x80005468 -TRK_MINNOW_DOLPHIN/dolphin_trk.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/dolphin_trk.c: .init start:0x80005468 end:0x8000556C .text start:0x8033C590 end:0x8033C6D0 .data start:0x803A95F0 end:0x803A9630 .bss start:0x803FB688 end:0x803FB690 -TRK_MINNOW_DOLPHIN/mpc_7xx_603e.c: +TRK_MINNOW_DOLPHIN/ppc/Generic/mpc_7xx_603e.c: .text start:0x8033C6D0 end:0x8033CA48 -TRK_MINNOW_DOLPHIN/main_TRK.c: +TRK_MINNOW_DOLPHIN/Portable/main_TRK.c: .text start:0x8033CA48 end:0x8033CA8C .bss start:0x803FB690 end:0x803FB698 -TRK_MINNOW_DOLPHIN/dolphin_trk_glue.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/dolphin_trk_glue.c: .text start:0x8033CA8C end:0x8033CF38 .rodata start:0x80378208 end:0x80378250 .data start:0x803A9630 end:0x803A964C .bss start:0x803FB698 end:0x803FD8C0 -TRK_MINNOW_DOLPHIN/targcont.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/targcont.c: .text start:0x8033CF38 end:0x8033CF6C -TRK_MINNOW_DOLPHIN/target_options.c: +TRK_MINNOW_DOLPHIN/Os/dolphin/target_options.c: .text start:0x8033CF6C end:0x8033CF88 .bss start:0x803FD8C0 end:0x803FD8C1 -TRK_MINNOW_DOLPHIN/mslsupp.c: +TRK_MINNOW_DOLPHIN/MetroTRK/Export/mslsupp.c: .text start:0x8033CF88 end:0x8033D100 amcstubs/AmcExi2Stubs.c: diff --git a/configure.py b/configure.py index 68caadf78..30dd98e80 100644 --- a/configure.py +++ b/configure.py @@ -337,17 +337,17 @@ config.libs = [ Object(NonMatching, "d/d_chain.cpp"), Object(NonMatching, "d/d_cloth_packet.cpp"), Object(NonMatching, "d/actor/d_a_obj.cpp"), - Object(NonMatching, "d/actor/d_a_obj_tribox_static.cpp"), - Object(NonMatching, "d/actor/d_a_ship_static.cpp"), - Object(NonMatching, "d/actor/d_a_boko_static.cpp"), - Object(NonMatching, "d/actor/d_a_bomb_static.cpp"), - Object(NonMatching, "d/actor/d_a_branch_static.cpp"), - Object(NonMatching, "d/actor/d_a_mgameboard_static.cpp"), - Object(NonMatching, "d/actor/d_a_itembase_static.cpp"), - Object(NonMatching, "d/actor/d_a_item_static.cpp"), - Object(NonMatching, "d/actor/d_a_shop_item_static.cpp"), - Object(NonMatching, "d/actor/d_a_race_item_static.cpp"), - Object(NonMatching, "d/actor/d_a_leaflift_static.cpp"), + Object(NonMatching, "d/d_a_obj_tribox_static.cpp"), + Object(NonMatching, "d/d_a_ship_static.cpp"), + Object(NonMatching, "d/d_a_boko_static.cpp"), + Object(NonMatching, "d/d_a_bomb_static.cpp"), + Object(NonMatching, "d/d_a_branch_static.cpp"), + Object(NonMatching, "d/d_a_mgameboard_static.cpp"), + Object(NonMatching, "d/d_a_itembase_static.cpp"), + Object(NonMatching, "d/d_a_item_static.cpp"), + Object(NonMatching, "d/d_a_shop_item_static.cpp"), + Object(NonMatching, "d/d_a_race_item_static.cpp"), + Object(NonMatching, "d/d_a_leaflift_static.cpp"), Object(NonMatching, "d/d_demo.cpp"), Object(NonMatching, "d/d_door.cpp"), Object(NonMatching, "d/d_resorce.cpp"), @@ -400,8 +400,8 @@ config.libs = [ Object(NonMatching, "d/d_s_actor_data_mng.cpp"), Object(NonMatching, "d/d_item.cpp"), Object(NonMatching, "d/d_2dnumber.cpp"), - Object(NonMatching, "d/actor/d_a_npc_cb1_static.cpp"), - Object(NonMatching, "d/actor/d_a_npc_mk_static.cpp"), + Object(NonMatching, "d/d_a_npc_cb1_static.cpp"), + Object(NonMatching, "d/d_a_npc_mk_static.cpp"), Object(NonMatching, "d/d_salvage.cpp"), Object(NonMatching, "d/d_snap.cpp"), Object(NonMatching, "d/d_point_wind.cpp"), From 54e41169c56d7145aa201dd7eaee133c46b077e3 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 21 Sep 2023 17:18:00 -0400 Subject: [PATCH 34/89] Add .inc file association to recommended settings --- README.md | 2 +- docs/vscode.md | 3 +++ src/d/actor/d_a_player_HIO.inc | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 23a8fbad1..cee5d619d 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Building ``` git clone https://github.com/zeldaret/tww.git ``` -- Using [Dolphin Emulator](https://dolphin-emu.org/), extract your game to `orig/GZLE01` (or `GZLJ01` for JPN, `GZLE01` for PAL). +- Using [Dolphin Emulator](https://dolphin-emu.org/), extract your game to `orig/GZLE01` (or `GZLJ01` for JPN, `GZLP01` for PAL). ![](assets/dolphin-extract.png) - To save space, the only necessary files are the following. Any others can be deleted. - `sys/main.dol` diff --git a/docs/vscode.md b/docs/vscode.md index ef2f83f4e..3b5360145 100644 --- a/docs/vscode.md +++ b/docs/vscode.md @@ -21,6 +21,9 @@ Recommended `.vscode/settings.json`: }, "files.insertFinalNewline": true, "files.trimFinalNewlines": true, + "files.associations": { + "*.inc": "cpp", + }, "search.useIgnoreFiles": false, "search.exclude": { "build/*/config.json": true, diff --git a/src/d/actor/d_a_player_HIO.inc b/src/d/actor/d_a_player_HIO.inc index 86f5d2310..9173b2ab0 100644 --- a/src/d/actor/d_a_player_HIO.inc +++ b/src/d/actor/d_a_player_HIO.inc @@ -6,8 +6,8 @@ * This file is not a standalone translation unit and is instead directly * included into d_a_player_main.cpp. * - * The original name of this file is known because of an assert contained within - * a function from this file. + * The original name of this file is not known, but a best guess was taken + * based on the original names of the classes it contains. */ #include "dolphin/types.h" From e6d2a369874d5f716fe46bafe2e2048ec7880e27 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:18:57 -0400 Subject: [PATCH 35/89] daShopItem_c "OK" Functions and data matching d_a_shop_item.cpp still breaks checksum, probably from weak functions/vtables that need to be placed earlier --- configure.py | 2 +- include/d/actor/d_a_shop_item.h | 48 +++ include/d/d_cloth_packet.h | 2 +- include/m_Do/m_Do_lib.h | 7 +- src/SSystem/SComponent/c_xyz.cpp | 4 +- src/d/actor/d_a_shop_item.cpp | 88 ++--- src/d/d_a_shop_item_static.cpp | 549 ++++++++++++++++++++++++++++++- 7 files changed, 618 insertions(+), 82 deletions(-) create mode 100644 include/d/actor/d_a_shop_item.h diff --git a/configure.py b/configure.py index 87e679be8..98dd063d0 100644 --- a/configure.py +++ b/configure.py @@ -345,7 +345,7 @@ config.libs = [ Object(NonMatching, "d/d_a_mgameboard_static.cpp"), Object(NonMatching, "d/d_a_itembase_static.cpp"), Object(NonMatching, "d/d_a_item_static.cpp"), - Object(NonMatching, "d/d_a_shop_item_static.cpp"), + Object(Matching, "d/d_a_shop_item_static.cpp"), Object(NonMatching, "d/d_a_race_item_static.cpp"), Object(NonMatching, "d/d_a_leaflift_static.cpp"), Object(NonMatching, "d/d_demo.cpp"), diff --git a/include/d/actor/d_a_shop_item.h b/include/d/actor/d_a_shop_item.h new file mode 100644 index 000000000..0c375c341 --- /dev/null +++ b/include/d/actor/d_a_shop_item.h @@ -0,0 +1,48 @@ +#ifndef D_A_SHOP_ITEM_H +#define D_A_SHOP_ITEM_H + +#include "d/actor/d_a_itembase.h" +#include "d/d_cloth_packet.h" + +struct daShopItem_c_m_data { + /* 0x00 */ Vec mScale; + /* 0x0C */ Vec field_0x0C; + /* 0x18 */ SVec field_0x18; +}; + +struct daShopItem_c : public daItemBase_c { + char* getShopArcname(); + s16 getShopBmdIdx(); + void CreateInit(); + int _create(); + bool _execute(); + void set_mtx(); + bool _draw(); + + //virtual funcs + void setListStart() {} + void settingBeforeDraw(); + void setTevStr(); + s32 clothCreate(); + + //funcs in d_a_shop_item_static + cXyz* getScaleP(); + csXyz* getRotateP(); + cXyz* getPosP(); + cXyz getCenter(); + + const daShopItem_c_m_data* getData() { return mData; } + + static const char m_cloth_arcname[]; + static const f32 m_cullfar_max; + static const u8 mModelType[256]; + static const daShopItem_c_m_data mData[255]; + + /* 0x63C */ request_of_phase_process_class field_0x63C; + /* 0x644 */ dCloth_packet_c* field_0x644; + /* 0x648 */ u8 field_0x648; + /* 0x64C */ Mtx field_0x64C; + /* 0x67C */ TevType tevType; +}; + +#endif /* D_A_SHOP_ITEM_H */ diff --git a/include/d/d_cloth_packet.h b/include/d/d_cloth_packet.h index e907d0240..83aebef59 100644 --- a/include/d/d_cloth_packet.h +++ b/include/d/d_cloth_packet.h @@ -47,7 +47,7 @@ public: virtual void TexObjLoad(); virtual void TevSetting(); - void setScale(cXyz scale); + void setScale(cXyz scale) { mScale = scale; } void setMtx(Mtx mtx); }; // Size: 0xFC diff --git a/include/m_Do/m_Do_lib.h b/include/m_Do/m_Do_lib.h index 58d25435e..894aacdd5 100644 --- a/include/m_Do/m_Do_lib.h +++ b/include/m_Do/m_Do_lib.h @@ -44,8 +44,9 @@ u8 mDoLib_setResTimgObj(ResTIMG const* res, GXTexObj* o_texObj, u32 tlut_name, GXTlutObj* o_tlutObj); void mDoLib_pos2camera(Vec* src, Vec* dst); -inline u32 calcAlphaCmpID(u32 param_1, u32 param_2, u32 param_3) { - return ((param_1 & 0xff) << 5) + ((param_2 & 0xff) << 3) + (param_3 & 0xff); -} +// was causing redefinition issues +//inline u32 calcAlphaCmpID(u32 param_1, u32 param_2, u32 param_3) { +// return ((param_1 & 0xff) << 5) + ((param_2 & 0xff) << 3) + (param_3 & 0xff); +//} #endif /* M_DO_M_DO_LIB_H */ diff --git a/src/SSystem/SComponent/c_xyz.cpp b/src/SSystem/SComponent/c_xyz.cpp index 5f2cac9e8..3121db388 100644 --- a/src/SSystem/SComponent/c_xyz.cpp +++ b/src/SSystem/SComponent/c_xyz.cpp @@ -150,6 +150,6 @@ bool cXyz::operator!=(const Vec& vec) const { /* 80245CE4-80245D48 .text isZero__4cXyzCFv */ bool cXyz::isZero(void) const { - return fabsf(this->x) < 3.814697e-06f && fabsf(this->y) < 3.814697e-06f && - fabsf(this->z) < 3.814697e-06f; + return fabsf(this->x) < 3.8146972e-06f && fabsf(this->y) < 3.8146972e-06f && + fabsf(this->z) < 3.8146972e-06f; } diff --git a/src/d/actor/d_a_shop_item.cpp b/src/d/actor/d_a_shop_item.cpp index bbe154a0d..78fa1bda2 100644 --- a/src/d/actor/d_a_shop_item.cpp +++ b/src/d/actor/d_a_shop_item.cpp @@ -3,6 +3,7 @@ // Translation Unit: d_a_shop_item.cpp // +#include "d/actor/d_a_shop_item.h" #include "f_op/f_op_actor_mng.h" #include "JSystem/JKernel/JKRHeap.h" #include "d/d_procname.h" @@ -10,47 +11,10 @@ #include "d/d_s_play.h" #include "d/d_item.h" #include "d/d_item_data.h" -#include "d/actor/d_a_itembase.h" #include "d/actor/d_a_itembase_static.h" -#include "d/d_cloth_packet.h" #include "m_Do/m_Do_mtx.h" #include "m_Do/m_Do_lib.h" -struct daShopItem_c_m_data { - /* 0x00 */ cXyz mScale; - /* 0x0C */ cXyz field_0x0C; - /* 0x18 */ csXyz field_0x18; -}; - -struct daShopItem_c : public daItemBase_c { - char* getShopArcname(); - s16 getShopBmdIdx(); - void CreateInit(); - int _create(); - bool _execute(); - void set_mtx(); - bool _draw(); - - //virtual funcs - void setListStart() {} - void settingBeforeDraw(); - void setTevStr(); - s32 clothCreate(); - - daShopItem_c_m_data* getData() { return mData; } - - static const char m_cloth_arcname[]; - static const f32 m_cullfar_max; - static u8 mModelType[256]; - static daShopItem_c_m_data mData[256]; - - /* 0x63C */ request_of_phase_process_class field_0x63C; - /* 0x644 */ dCloth_packet_c* field_0x644; - /* 0x648 */ u8 field_0x648; - /* 0x64C */ Mtx field_0x64C; - /* 0x67C */ TevType tevType; -}; - const char daShopItem_c::m_cloth_arcname[] = "Cloth"; const f32 daShopItem_c::m_cullfar_max = 5000.0f; @@ -132,30 +96,32 @@ s32 daShopItem_c::clothCreate() { } void daShopItem_c::set_mtx() { - /* Nonmatching */ mModel->setBaseScale(mScale); - mDoMtx_stack_c::transM(current.pos.x, current.pos.y, current.pos.z); - mDoMtx_stack_c::XYZrotM(current.angle.x, current.angle.y, current.angle.z); + MTXTrans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z); MTXCopy(mDoMtx_stack_c::get(), field_0x64C); - cXyz* temp = &getData()[m_itemNo].field_0x0C; - mDoMtx_stack_c::transM(temp->x, temp->y, temp->z); - csXyz* temp2 = &getData()[m_itemNo].field_0x18; - mDoMtx_stack_c::XYZrotM(temp2->x, temp2->y, temp2->z); - MTXCopy(mDoMtx_stack_c::get(), mModel->getBaseTRMtx()); //mDoMtx_stack_c is loading too late + const Vec& temp1 = getData()[m_itemNo].field_0x0C; + mDoMtx_stack_c::transM(temp1.x, temp1.y, temp1.z); + const SVec& temp2 = getData()[m_itemNo].field_0x18; + mDoMtx_stack_c::ZXYrotM(temp2.x, temp2.y, temp2.z); + MTXCopy(mDoMtx_stack_c::get(), mModel->mBaseTransformMtx); if(field_0x644 != 0) { - //no clue what is actually happening here, commented stuff is to make .rodata less broken - f32 y1 = g_regHIO.mChild[8].mFloats[7] + 94.0f; - f32 y2 = g_regHIO.mChild[8].mFloats[7] + 97.5f; - //Vec local[4] = { - // {0.0f, y1, 0.0f}, - // {0.0f, y1, 0.0f}, - // {0.0f, y2, 0.0f}, - // {0.0f, y1, 0.0f} - //}; + // I have no clue why Nintendo would do this but it works + cXyz local[4]; + cXyz local2[4]; - //mDoMtx_stack_c::transM(local[field_0x648].x, local[field_0x648].y, local[field_0x648].z); + local2[3].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 94.0f, 0.0f); + local[0].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 94.0f, 0.0f); + local2[2].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 94.0f, 0.0f); + local[1].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 94.0f, 0.0f); + local2[1].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 97.5f, 0.0f); + local[2].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 97.5f, 0.0f); + local2[0].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 94.0f, 0.0f); + local[3].set(0.0f, g_regHIO.mChild[10].mFloatRegs[15] + 94.0f, 0.0f); + + mDoMtx_stack_c::transM(local[field_0x648]); mDoMtx_stack_c::YrotM(0x4000); field_0x644->setScale(mScale); field_0x644->setMtx(mDoMtx_stack_c::get()); @@ -214,7 +180,7 @@ int daShopItem_c::_create() { } arcName = getShopArcname(); - int result = dComIfG_resLoad(&this->mPhs, arcName); + int result = dComIfG_resLoad(&mPhs, arcName); if(result != cPhs_COMPLEATE_e) { return result; } @@ -252,7 +218,7 @@ int daShopItem_c::_create() { return result; } -static int daShopItem_Delete(void* i_this) { +static BOOL daShopItem_Delete(void* i_this) { daShopItem_c* inst = static_cast(i_this); if(isUseClothPacket(inst->m_itemNo)) { @@ -263,16 +229,16 @@ static int daShopItem_Delete(void* i_this) { return 1; } -int daShopItem_Draw(void* i_this) { +static BOOL daShopItem_Draw(void* i_this) { return static_cast(i_this)->_draw(); } -int daShopItem_Execute(void* i_this) { +static BOOL daShopItem_Execute(void* i_this) { return static_cast(i_this)->_execute(); } -int daShopItem_IsDelete(void*) { - return 1; +static bool daShopItem_IsDelete(void*) { + return true; } static actor_method_class daShopItemMethodTable = { diff --git a/src/d/d_a_shop_item_static.cpp b/src/d/d_a_shop_item_static.cpp index e2844bf48..3604b2497 100644 --- a/src/d/d_a_shop_item_static.cpp +++ b/src/d/d_a_shop_item_static.cpp @@ -3,26 +3,547 @@ // Translation Unit: d_a_shop_item_static.cpp // -#include "d_a_shop_item_static.h" -#include "dolphin/types.h" +#include "d/actor/d_a_shop_item.h" +#include "d/d_item_data.h" -/* 800689F0-800689F8 .text getScaleP__12daShopItem_cFv */ -void daShopItem_c::getScaleP() { - /* Nonmatching */ +const daShopItem_c_m_data daShopItem_c::mData[255] = { + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{0.7f, 0.7f, 0.7f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.5f, 1.5f, 1.5f}, {2.0f, 30.0f, 0.0f}, {0, 0, 0}}, + {{1.5f, 1.5f, 1.5f}, {2.0f, 30.0f, 0.0f}, {0, 0, 0}}, + {{1.5f, 1.5f, 1.5f}, {2.0f, 30.0f, 0.0f}, {0, 0, 0}}, + {{1.5f, 1.5f, 1.5f}, {2.0f, 30.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 00.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{0.65f, 0.65f, 0.65f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.65f, 0.65f, 0.65f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.65f, 0.65f, 0.65f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.5f, 0.5f, 0.5f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.5f, 0.5f, 0.5f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.5f, 0.5f, 0.5f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.65f, 0.65f, 0.65f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.5f, 0.5f, 0.5f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.5f, 0.5f, 0.5f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.65f, 0.65f, 0.65f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.65f, 0.65f, 0.65f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{0.5f, 0.5f, 0.5f}, {0.0f, -11.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, + {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, +}; +const u8 daShopItem_c::mModelType[256] = { + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 0 +}; + +cXyz* daShopItem_c::getScaleP() { + return &mScale; } -/* 800689F8-80068A00 .text getRotateP__12daShopItem_cFv */ -void daShopItem_c::getRotateP() { - /* Nonmatching */ +csXyz* daShopItem_c::getRotateP() { + return ¤t.angle; } -/* 80068A00-80068A08 .text getPosP__12daShopItem_cFv */ -void daShopItem_c::getPosP() { - /* Nonmatching */ +cXyz* daShopItem_c::getPosP() { + return ¤t.pos; } -/* 80068A08-80068A58 .text getCenter__12daShopItem_cFv */ -void daShopItem_c::getCenter() { - /* Nonmatching */ +cXyz daShopItem_c::getCenter() { + f32 height; + if(FLOWER_1 <= m_itemNo && m_itemNo <= PRESIDENT_STATUE) { + height = 80.0f; + } + else { + height = 40.0f; + } + + cXyz ret(0.0f, height / 2.0f, 0.0f); + return ret; } From adae400cbf7614a348a6d155571b9b43a5f87d66 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 22 Sep 2023 00:53:10 -0400 Subject: [PATCH 36/89] d_item_data OK --- configure.py | 2 +- include/JSystem/JParticle/JPAEmitter.h | 16 +- include/d/actor/d_a_item.h | 12 +- include/d/actor/d_a_player_link.h | 5 - include/d/d_item_data.h | 105 +- include/d/d_particle.h | 21 +- include/d/d_particle_name.h | 4 + src/d/actor/d_a_item.cpp | 154 +- src/d/d_item_data.cpp | 10146 ++++++++++++++++++++++- 9 files changed, 10314 insertions(+), 151 deletions(-) diff --git a/configure.py b/configure.py index 98dd063d0..9783cf3e9 100644 --- a/configure.py +++ b/configure.py @@ -394,7 +394,7 @@ config.libs = [ Object(NonMatching, "d/d_ev_camera.cpp"), Object(NonMatching, "d/d_wood.cpp"), Object(NonMatching, "d/d_flower.cpp"), - Object(NonMatching, "d/d_item_data.cpp"), + Object(Matching, "d/d_item_data.cpp"), Object(Matching, "d/d_seafightgame.cpp"), Object(NonMatching, "d/d_spline_path.cpp"), Object(NonMatching, "d/d_s_actor_data_mng.cpp"), diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index f5ce3219f..b982719fb 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -12,8 +12,6 @@ #include "dolphin/gx/GXStruct.h" #include "dolphin/mtx/mtx.h" -class JPACallBackBase; -class JPACallBackBase2; class JPADataBlockLinkInfo; enum { @@ -26,6 +24,18 @@ enum { JPAEmtrStts_Immortal = 0x40, }; +template +class JPACallBackBase { +public: + JPACallBackBase() {} + virtual ~JPACallBackBase(); + + virtual void init(JPABaseEmitter*); + virtual void execute(JPABaseEmitter*); + virtual void executeAfter(JPABaseEmitter*); + virtual void draw(JPABaseEmitter*); +}; + class JPABaseEmitter { public: typedef void (JPABaseEmitter::*VolumeFunc)(); @@ -111,7 +121,7 @@ public: /* 0x188 */ JSUPtrList mChildParticles; /* 0x194 */ JSUPtrList* mpPtclVacList; /* 0x198 */ JPADataBlockLinkInfo* mpDataLinkInfo; - /* 0x19C */ JPACallBackBase* mpEmitterCallBack; + /* 0x19C */ JPACallBackBase* mpEmitterCallBack; /* 0x1A0 */ JPACallBackBase2* mpParticleCallBack; /* 0x1A4 */ JMath::TRandom_fast_ mRandomSeed; /* 0x1A8 */ Mtx mGlobalRotation; diff --git a/include/d/actor/d_a_item.h b/include/d/actor/d_a_item.h index 015fff5c7..8627e8dda 100644 --- a/include/d/actor/d_a_item.h +++ b/include/d/actor/d_a_item.h @@ -6,6 +6,8 @@ class daItem_c : public daItemBase_c { public: + daItem_c() : mPtclFollowCb(0, 0), mPtclSmokeCb(1) {} + float getYOffset(); void set_mtx(); void set_mtx_base(J3DModel*, cXyz, csXyz); @@ -54,6 +56,8 @@ public: s32 setLock(); s32 releaseLock(); s32 checkActionNow(); + + static dCcD_SrcCyl m_cyl_src; public: /* 0x63C */ cXyz mScaleTarget; @@ -70,10 +74,10 @@ public: /* 0x669 */ u8 mStatusFlags; /* 0x66A */ u8 mMode; /* 0x66B */ u8 mCurState; - /* 0x66C */ u8 field23_0x66c[0x6BC - 0x66C]; - // /* 0x674 */ dPa_rippleEcallBack mPtclRippleCb; - // /* 0x688 */ dPa_followEcallBack mPtclFollowCb; - // /* 0x69C */ dPa_smokeEcallBack mPtclSmokeCb; + /* 0x66C */ u8 field23_0x66c[0x674 - 0x66C]; + /* 0x674 */ dPa_rippleEcallBack mPtclRippleCb; + /* 0x688 */ dPa_followEcallBack mPtclFollowCb; + /* 0x69C */ dPa_smokeEcallBack mPtclSmokeCb; /* 0x6BC */ JPABaseEmitter* mpParticleEmitter; }; diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index 05fa50c6f..1be6bde25 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -97,11 +97,6 @@ public: /* 0x0 */ u8 field_0x0[0x28]; }; -class dPa_smokeEcallBack { -public: - /* 0x0 */ u8 field_0x0[0x20]; -}; - class dPa_cutTurnEcallBack_c { public: /* 0x0 */ u8 field_0x0[0x10]; diff --git a/include/d/d_item_data.h b/include/d/d_item_data.h index 49bd4e4e9..a330605d2 100644 --- a/include/d/d_item_data.h +++ b/include/d/d_item_data.h @@ -263,70 +263,95 @@ enum ItemTable { }; struct dItem_data_item_resource { - /* 0x00 */ char* mModelArcName; - /* 0x04 */ char* mIconFilename; - /* 0x08 */ s16 mModelFileIdx; - /* 0x0A */ s16 mBtkFileIdx; - /* 0x0C */ s16 mBrkFileIdx; - /* 0x0E */ s16 field5_0xe; - /* 0x10 */ s16 field6_0x10; - /* 0x12 */ s16 field7_0x12; - /* 0x14 */ s8 mTevRegAnimFrameIndex; // If specified, keep the BRK animation on this frame. - /* 0x15 */ u8 field9_0x15; - /* 0x16 */ s16 mNameMessageId; - /* 0x18 */ u8 temp[8]; - /* 0x20 */ u16 mMaxHeapSize; - /* 0x22 */ u8 field20_0x22; - /* 0x23 */ u8 field21_0x23; + /* 0x00 */ char* mArcname; + /* 0x04 */ char* mTexture; // Filename in /files/res/Msg/itemicon.arc of its inventory icon. + /* 0x08 */ s16 mBmdIdx; + /* 0x0A */ s16 mSrtIdx; // BTK + /* 0x0C */ s16 mSrtIdx2; // BTK + /* 0x0E */ s16 mTevIdx; // BRK + /* 0x10 */ s16 mTevIdx2; // BRK + /* 0x12 */ s16 mBckIdx; + /* 0x14 */ s8 mTevFrm; // If specified, keep the BRK animation on this frame. + /* 0x16 */ s16 mItemMesgNum; // Message containing this item's name + /* 0x18 */ u32 mUnused; // Always 0, doesn't seem to be read + /* 0x1C */ u32 mUnknown; // Varies between items, but doesn't seem to be read + /* 0x20 */ u16 mHeapSize; }; STATIC_ASSERT(sizeof(dItem_data_item_resource) == 0x24); struct dItem_data_field_item_res { - /* 0x00 */ char * mModelArcName; - /* 0x04 */ short mModelFileId; - /* 0x06 */ short mBtkAnmResIdx1; - /* 0x08 */ short mBtkAnmResIdx2; - /* 0x0A */ short mBrkAnmResIdx1; - /* 0x0C */ short mBrkAnmResIdx2; - /* 0x0E */ short mBckAnmResIdx; - /* 0x10 */ u8 mTevRegAnimFrameIndex; - /* 0x11 */ u8 field8_0x11; - /* 0x12 */ u8 field9_0x12; - /* 0x13 */ u8 field10_0x13; - /* 0x14 */ u8 field11_0x14; - /* 0x15 */ u8 field12_0x15; - /* 0x16 */ u8 field13_0x16; - /* 0x17 */ u8 field14_0x17; + /* 0x00 */ char* mArc; + /* 0x04 */ s16 mBmdIdx; + /* 0x06 */ s16 mSrtIdx; // BTK + /* 0x08 */ s16 mSrtIdx2; // BTK + /* 0x0A */ s16 mTevIdx; // BRK + /* 0x0C */ s16 mTevIdx2; // BRK + /* 0x0E */ s16 mBckIdx; + /* 0x10 */ s8 mTevFrm; // Unused, the equivalent in item_resource is used instead. + /* 0x14 */ u32 mUnknown; /* 0x18 */ u16 mHeapSize; - /* 0x1A */ u8 field16_0x1a; - /* 0x1B */ u8 field17_0x1b; }; STATIC_ASSERT(sizeof(dItem_data_field_item_res) == 0x1C); struct dItem_data_item_info { - /* 0x00 */ u8 mMaybeShadowRelated; + /* 0x00 */ u8 mShadowSize; /* 0x01 */ u8 mCollisionH; // Cylinder Height /* 0x02 */ u8 mCollisionR; // Cylinder Radius - /* 0x03 */ u8 mSpecialBehaviors; + /* 0x03 */ u8 mFlag; }; STATIC_ASSERT(sizeof(dItem_data_item_info) == 0x4); +struct dItem_data_effect_info { + /* 0x00 */ u16 m_appear; + /* 0x02 */ u16 m_sp_effect; +}; + +STATIC_ASSERT(sizeof(dItem_data_effect_info) == 0x4); + class dItem_data { public: + static char* item_arcname_tbl[0x70]; + static char* item_texture_tbl[0x74]; static dItem_data_item_resource item_resource[0x100]; static dItem_data_field_item_res field_item_res[0x100]; static dItem_data_item_info item_info[0x100]; + static dItem_data_effect_info effect_info[0x81]; - static u32 getHeapSize(u8 itemNo) { return item_resource[itemNo].mMaxHeapSize; } - static u32 getFieldHeapSize(u8 itemNo) { return field_item_res[itemNo].mHeapSize; } + static char* getArcname(u8 no) { return item_resource[no].mArcname; } + static char* getTexture(u8 no) { return item_resource[no].mTexture; } + static s16 getBmdIdx(u8 no) { return item_resource[no].mBmdIdx; } + static s16 getSrtIdx(u8 no) { return item_resource[no].mSrtIdx; } + static s16 getSrtIdx2(u8 no) { return item_resource[no].mSrtIdx2; } + static s16 getTevIdx(u8 no) { return item_resource[no].mTevIdx; } + static s16 getTevIdx2(u8 no) { return item_resource[no].mTevIdx2; } + static s16 getBckIdx(u8 no) { return item_resource[no].mBckIdx; } + // static s16 getBmtIdx(u8 no) { return item_resource[no].mBmtIdx; } + static s8 getTevFrm(u8 no) { return item_resource[no].mTevFrm; } + static s16 getItemMesgNum(u8 no) { return item_resource[no].mItemMesgNum; } + static u32 getHeapSize(u8 no) { return item_resource[no].mHeapSize; } - static bool checkAppearEffect(u8 itemNo); - static s16 getAppearEffect(u8 itemNo); - static bool checkSpecialEffect(u8 itemNo); - static u16 getSpecialEffect(u8 itemNo); + static char* getFieldArc(u8 no) { return field_item_res[no].mArc; } + static s16 getFieldBmdIdx(u8 no) { return field_item_res[no].mBmdIdx; } + static s16 getFieldSrtIdx(u8 no) { return field_item_res[no].mSrtIdx; } + static s16 getFieldSrtIdx2(u8 no) { return field_item_res[no].mSrtIdx2; } + static s16 getFieldTevIdx(u8 no) { return field_item_res[no].mTevIdx; } + static s16 getFieldTevIdx2(u8 no) { return field_item_res[no].mTevIdx2; } + static s16 getFieldBckIdx(u8 no) { return field_item_res[no].mBckIdx; } + // static s16 getFieldBmtIdx(u8 no) { return field_item_res[no].mBmtIdx; } + static u32 getFieldHeapSize(u8 no) { return field_item_res[no].mHeapSize; } + + static u8 getShadowSize(u8 no) { return item_info[no].mShadowSize; } + static u8 getH(u8 no) { return item_info[no].mCollisionH; } + static u8 getR(u8 no) { return item_info[no].mCollisionR; } + static bool chkFlag(u8 no, u32 mask) { return item_info[no].mFlag & mask; } + + static bool checkAppearEffect(u8 no); + static u16 getAppearEffect(u8 no); + static bool checkSpecialEffect(u8 no); + static u16 getSpecialEffect(u8 no); }; #endif /* D_ITEM_DATA_H */ \ No newline at end of file diff --git a/include/d/d_particle.h b/include/d/d_particle.h index e3ba9c64c..4cc081445 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -29,18 +29,7 @@ public: /* 0x13 */ u8 mbAffectedByWind; }; -class JPACallBackBase { -public: - JPACallBackBase(); - virtual ~JPACallBackBase(); - - virtual void init(JPABaseEmitter*); - virtual void execute(JPABaseEmitter*); - virtual void executeAfter(JPABaseEmitter*); - virtual void draw(JPABaseEmitter*); -}; - -class dPa_levelEcallBack : public JPACallBackBase { +class dPa_levelEcallBack : public JPACallBackBase { public: virtual ~dPa_levelEcallBack() {} }; @@ -69,6 +58,9 @@ STATIC_ASSERT(sizeof(dPa_followEcallBack) == 0x14); class dPa_smokeEcallBack : dPa_followEcallBack { public: + dPa_smokeEcallBack(u8); + virtual ~dPa_smokeEcallBack(); + /* 0x14 */ s8 field_0x14; /* 0x15 */ u8 field_0x15; /* 0x16 */ _GXColor field_0x16; @@ -163,13 +155,14 @@ public: class dPa_rippleEcallBack : public dPa_levelEcallBack { public: + dPa_rippleEcallBack() { mpBaseEmitter = NULL; } + ~dPa_rippleEcallBack(); + void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); void end(); void execute(JPABaseEmitter*); void draw(JPABaseEmitter*); - ~dPa_rippleEcallBack(); - /* 0x04 */ JPABaseEmitter* mpBaseEmitter; /* 0x08 */ cXyz* mPos; /* 0x0C */ u32 mFlags; diff --git a/include/d/d_particle_name.h b/include/d/d_particle_name.h index 36d0e61de..0f55e5964 100644 --- a/include/d/d_particle_name.h +++ b/include/d/d_particle_name.h @@ -4,6 +4,10 @@ #include "dolphin/types.h" namespace dPa_name { + enum { + ID_SCENE_END = 0x8466, + }; + u16 j_o_id[]; u16 s_o_id[]; } diff --git a/src/d/actor/d_a_item.cpp b/src/d/actor/d_a_item.cpp index e22dc4409..e6a661a98 100644 --- a/src/d/actor/d_a_item.cpp +++ b/src/d/actor/d_a_item.cpp @@ -15,32 +15,34 @@ class dCcD_GObjInf; -static dCcD_SrcCyl m_cyl_src = { - 0, - 0, - 0, - 0, - 0xFFFFFFFF, // Tg damage types - 9, - 0x59, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - - // Cylinder - 0.0, // X - 0.0, // Y - 0.0, // Z - 10.0, // Radius - 50.0, // Height +dCcD_SrcCyl daItem_c::m_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0xFFFFFFFF, + /* SrcObjTg SPrm */ 0x09, + /* SrcObjCo SPrm */ 0x59, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0x04, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 10.0f, + /* Height */ 50.0f, + }, }; /* 800F4BC8-800F4BD4 .text getData__12daItemBase_cFv */ @@ -113,20 +115,23 @@ void itemGetCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) { /* 800F5044-800F53EC .text CreateInit__8daItem_cFv */ void daItem_c::CreateInit() { /* Nonmatching */ - mAcchCir.SetWall(30.0, 30.0); - cXyz* speedPtr = &speed; - mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, speedPtr, NULL, NULL); + mAcchCir.SetWall(30.0f, 30.0f); + cXyz* speedPtr; + mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, speedPtr = &speed, NULL, NULL); mAcch.m_flags &= ~0x400; mAcch.m_flags &= ~0x8; mCullMtx = mModel->mBaseTransformMtx; mStts.Init(0, 0xFF, this); mCyl.Set(m_cyl_src); + mCyl.SetStts(&mStts); mCyl.SetCoHitCallback(&itemGetCallBack); - dItem_data_item_info* item_info = &dItem_data::item_info[m_itemNo]; - f32 height = item_info->mCollisionH; - f32 radius = item_info->mCollisionR; - if (mScale.x > 1.0) { + // Regswaps if the inlines are used. + // f32 height = dItem_data::getH(m_itemNo); + // f32 radius = dItem_data::getR(m_itemNo); + f32 height = dItem_data::item_info[m_itemNo].mCollisionH; + f32 radius = dItem_data::item_info[m_itemNo].mCollisionR; + if (mScale.x > 1.0f) { height *= mScale.x; radius *= mScale.x; } @@ -135,18 +140,22 @@ void daItem_c::CreateInit() { mItemTimer = getData()->mDuration; field7_0x65a = getData()->field7_0x18; - mCurState = 0; field3_0x650 = speedPtr->y; - mStatusFlags |= 2; + mCurState = 0; mUnknownParam = (fpcM_GetParam(this) & 0x03000000) >> 0x18; + // TODO: should probably add inlines here + // e.g. getType__10daItem_prmFP8daItem_c etc + if ((fpcM_GetParam(this) & 0x03000000) >> 0x18 == 3 || (fpcM_GetParam(this) & 0x03000000) >> 0x18 == 1) { + mStatusFlags |= 2; + } mItemAction = (fpcM_GetParam(this) & 0xFC000000) >> 0x1A; show(); - if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (mStatusFlags & 2))) { - dItem_data::getSpecialEffect(m_itemNo); - // TODO: dPa_control_c::set + if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (m_itemNo == SMALL_KEY && (mStatusFlags & 2)))) { + u16 particleID = dItem_data::getSpecialEffect(m_itemNo); + dComIfGp_particle_set(particleID, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); } switch (m_itemNo) { @@ -154,27 +163,30 @@ void daItem_c::CreateInit() { case BOMB_10: case BOMB_20: case BOMB_30: - mScaleTarget.x = 0.6; - mScaleTarget.y = 0.6; - mScaleTarget.z = 0.6; + mScaleTarget.x = 0.6f; + mScaleTarget.y = 0.6f; + mScaleTarget.z = 0.6f; break; default: - mScaleTarget.x = 1.0; - mScaleTarget.y = 1.0; - mScaleTarget.z = 1.0; + mScaleTarget.x = 1.0f; + mScaleTarget.y = 1.0f; + mScaleTarget.z = 1.0f; break; } mSwitchId = (fpcM_GetParam(this) & 0x00FF0000) >> 0x10; - if (mSwitchId != 0xFF && fopAcM_isSwitch(this, mSwitchId)) { + if (mSwitchId != 0xFF && !fopAcM_isSwitch(this, mSwitchId)) { hide(); mStatusFlags |= 2; } mActivationSwitch = (orig.angle.z & 0x00FF) >> 0; + current.angle.z = 0; + orig.angle.z = 0; initAction(); switch (m_itemNo) { + case SWORD: case SHIELD: mStatus |= 0x4000; break; @@ -184,12 +196,11 @@ void daItem_c::CreateInit() { } set_mtx(); - animPlay(1.0, 1.0, 1.0, 1.0, 1.0); + animPlay(1.0f, 1.0f, 1.0f, 1.0f, 1.0f); s16 procname = PROC_BST; // Gohdan if (fopAcIt_Judge(&fpcSch_JudgeForPName, &procname)) { - // TODO: dPa_control_c::set - mpParticleEmitter = 0; + mpParticleEmitter = dComIfGp_particle_set(0x81E1, ¤t.pos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } } @@ -200,7 +211,7 @@ s32 daItem_c::_daItem_create() { m_itemNo = (fpcM_GetParam(this) & 0x000000FF) >> 0x00; - if (!dItem_data::field_item_res[m_itemNo].mModelArcName) { + if (!dItem_data::getFieldArc(m_itemNo)) { setLoadError(); return cPhs_ERROR_e; } @@ -215,10 +226,9 @@ s32 daItem_c::_daItem_create() { } } - s32 phase_state = dComIfG_resLoad(&mPhs, dItem_data::field_item_res[m_itemNo].mModelArcName); + s32 phase_state = dComIfG_resLoad(&mPhs, dItem_data::getFieldArc(m_itemNo)); if (phase_state == cPhs_COMPLEATE_e) { - u16 heapSize = dItem_data::field_item_res[m_itemNo].mHeapSize; - s32 result = fopAcM_entrySolidHeap(this, (heapCallbackFunc)&CheckFieldItemCreateHeap, heapSize); + s32 result = fopAcM_entrySolidHeap(this, &CheckFieldItemCreateHeap, dItem_data::getFieldHeapSize(m_itemNo)); if (!result) { return cPhs_ERROR_e; } @@ -332,8 +342,9 @@ void daItem_c::setTevStr() { /* 800F61C8-800F6268 .text _daItem_delete__8daItem_cFv */ s32 daItem_c::_daItem_delete() { /* Nonmatching */ - // TODO: dPa_rippleEcallBack::end() - DeleteBase(dItem_data::field_item_res[m_itemNo].mModelArcName); + mPtclRippleCb.end(); + // TODO + DeleteBase(dItem_data::getFieldArc(m_itemNo)); } /* 800F6268-800F6434 .text Reflect__FR4cXyzP4cXyzff */ @@ -367,7 +378,7 @@ bool daItem_c::checkItemDisappear() { if (mStatusFlags & 0x10) { disappearing = false; } - if (dItem_data::item_info[m_itemNo].mSpecialBehaviors & 0x01) { + if (dItem_data::chkFlag(m_itemNo, 0x01)) { disappearing = false; } if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0) { @@ -525,11 +536,6 @@ s32 daItem_c::_daItem_isdelete() { return 1; } -/* 800F89F8-800F8A14 .text getHeadTopPos__9daPy_py_cCFv */ -void daPy_py_c::getHeadTopPos() const { - /* Nonmatching */ -} - static actor_method_class l_daItem_Method = { (process_method_func)daItem_Create, (process_method_func)daItem_Delete, @@ -539,18 +545,18 @@ static actor_method_class l_daItem_Method = { }; extern actor_process_profile_definition g_profile_ITEM = { - fpcLy_CURRENT_e, - 7, - fpcPi_CURRENT_e, - PROC_ITEM, - &g_fpcLf_Method.mBase, - sizeof(daItem_c), - 0, - 0, - &g_fopAc_Method.base, - 0x00F5, - &l_daItem_Method, - 0x000C0100, - fopAc_ACTOR_e, - fopAc_CULLBOX_0_e, + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 7, + /* ListPrio */ fpcPi_CURRENT_e, + /* ProcName */ PROC_ITEM, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daItem_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x00F5, + /* Actor SubMtd */ &l_daItem_Method, + /* Status */ 0x000C0100, + /* Group */ fopAc_ACTOR_e, + /* CullType */ fopAc_CULLBOX_0_e, }; diff --git a/src/d/d_item_data.cpp b/src/d/d_item_data.cpp index 63d1b6353..b4ab01e8b 100644 --- a/src/d/d_item_data.cpp +++ b/src/d/d_item_data.cpp @@ -3,26 +3,10152 @@ // Translation Unit: d_item_data.cpp // -#include "d_item_data.h" +#include "d/d_item_data.h" +#include "d/d_particle_name.h" +#include "JSystem/JUtility/JUTAssert.h" #include "dolphin/types.h" +// Needed for the .data section to match. +static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; +static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; + +/* 80383F20-803840E0 .data item_arcname_tbl__10dItem_data */ +char* dItem_data::item_arcname_tbl[0x70] = { + "Always", + "Vhutu", + "Vhkak", + "VkeyN", + "key_01", + "tele_00", + "Bomb_00", + "Link", + "Vhane", + "Vboko", + "Vchuj", + "VmapC", + "VsaiM", + "VsaiL", + "VyatM", + "VyatL", + "Ball", + "Bin", + "VbomM", + "Boom", + "Vboot", + "VbomL", + "Bottle", + "Bottle_e", + "VboxN", + "VdunC", + "VdunM", + "Vleaf", + "VbagH", + "VbagE", + "VbagF", + "Vhyoi", + "Vesa", + "Vobj07", + "Vobj06", + "Vobj05", + "Vobj04", + "Vobj03", + "Vobj00", + "Vobj01", + "Vobj02", + "Vhook", + "Vpowr", + "Vho", + "Vmant", + "Vohom", + "Vchin", + "Vhamm", + "Vamuk", + "Vamuy", + "Med_b", + "Med_g", + "Med_r", + "Vobj08", + "Vobj09", + "Vobj11", + "Vobj10", + "Vhapp", + "Vrope", + "VmagS", + "Shinju_n", + "Sord_m", + "Sord_mvu", + "VswoN", + "VshiM", + "VshiN", + "Vtri1", + "Vtact", + "Varfi", + "VmapQ", + "Varrl", + "Vbow", + "Fa", + "Shinju_d", + "Shinju_f", + "FwBin", + "VBinY", + "VbinH", + "VbinS", + "VbinW", + "Vfuku", + "Vdoku", + "Vbelt", + "Vlupy", + "VleTT", + "VleOF", + "VleMG", + "VleMO", + "Fdai", + "Fdai", + "Fdai", + "Fdai", + "Fdai", + "Vtri2", + "Vtri3", + "Vtri4", + "Vtri5", + "Vtri6", + "Vtri7", + "Vtri8", + "Fdai", + "VmapT", + "VmapR", + "VmapH", + "VmapG", + "VboxA", + "Vtin1", + "Vtin2", + "Vtin3", + "Vtin4", + "Vtin5", + "Vbeso", +}; + +/* 803840E0-803842B0 .data item_texture_tbl__10dItem_data */ +char* dItem_data::item_texture_tbl[0x74] = { + "get_rupy.bti", + "get_key.bti", + "heart_up_01.bti", + "heart_up_02.bti", + "telescope.bti", + "whistle.bti", + "baton.bti", + "camera.bti", + "coverofbeast.bti", + "boomerang.bti", + "rope.bti", + "sail_00.bti", + "fan.bti", + "hammer_01.bti", + "boots_00.bti", + "boots_01.bti", + "coverofbait.bti", + "bow_01.bti", + "bomb_00.bti", + "sail_01.bti", + "bottle_00.bti", + "bottle_01.bti", + "bottle_02.bti", + "bottle_03.bti", + "delivery.bti", + "hookshot.bti", + "shield_02.bti", + "sail_02.bti", + "beast_01.bti", + "beast_02.bti", + "beast_03.bti", + "beast_04.bti", + "beast_05.bti", + "beast_06.bti", + "beast_07.bti", + "beast_08.bti", + "bait_01.bti", + "bait_02.bti", + "bait_03.bti", + "bait_04.bti", + "bait_05.bti", + "bait_06.bti", + "bait_07.bti", + "bait_08.bti", + "baton_stone.bti", + "god_symbol_00.bti", + "god_symbol_01.bti", + "god_symbol_02.bti", + "sword_00.bti", + "sword_01.bti", + "shield_00.bti", + "shield_01.bti", + "gloves_00.bti", + "gloves_00.bti", + "amulet_00.bti", + "amulet_01.bti", + "delivery_01.bti", + "delivery_02.bti", + "delivery_03.bti", + "delivery_04.bti", + "delivery_05.bti", + "delivery_06.bti", + "delivery_07.bti", + "delivery_08.bti", + "delivery_09.bti", + "delivery_10.bti", + "delivery_11.bti", + "delivery_12.bti", + "delivery_13.bti", + "delivery_14.bti", + "delivery_15.bti", + "delivery_16.bti", + "delivery_17.bti", + "delivery_18.bti", + "dungeon_map.bti", + "compass.bti", + "boss_key.bti", + "bottle_04.bti", + "bottle_05.bti", + "bottle_06.bti", + "bottle_07.bti", + "bottle_08.bti", + "baton_stone.bti", + "triforce_00.bti", + "triforce_01.bti", + "triforce_02.bti", + "triforce_03.bti", + "triforce_04.bti", + "triforce_05.bti", + "triforce_06.bti", + "triforce_07.bti", + "arrow_00.bti", + "arrow_01.bti", + "arrow_02.bti", + "arrow_03.bti", + "big_purse.bti", + "max_purse.bti", + "sword_02.bti", + "sword_03.bti", + "clothes.bti", + "bombpouch_1.bti", + "bombpouch_2.bti", + "arrowcase_1.bti", + "arrowcase_2.bti", + "cmap_tri2.bti", + "cmap_treasure2.bti", + "cmap_treasure2.bti", + "cmap_phantomship2.bti", + "cmap_tingle2.bti", + "arrow_power_01.bti", + "arrow_power_02.bti", + "camera_2.bti", + "tingle_figure.bti", + "bottle_09.bti", + "cmap_hint2.bti", + "delivery_19.bti", +}; + +/* 803842B0-803866B0 .data item_resource__10dItem_data */ +dItem_data_item_resource dItem_data::item_resource[0x100] = { + { + // 0x00 + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ 0x002A, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0B80 + }, + { + // 0x01 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x02 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x01, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x03 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x02, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x04 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x03, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x05 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x06 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x05, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x07 + /* mArcname */ item_arcname_tbl[0x02], + /* mTexture */ item_texture_tbl[0x03], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0194, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2420 + }, + { + // 0x08 + /* mArcname */ item_arcname_tbl[0x01], + /* mTexture */ item_texture_tbl[0x02], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2500 + }, + { + // 0x09 + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ 0x0032, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0B80 + }, + { + // 0x0A + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ 0x0033, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0B80 + }, + { + // 0x0B + /* mArcname */ item_arcname_tbl[0x06], + /* mTexture */ item_texture_tbl[0x12], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019F, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x0C + /* mArcname */ item_arcname_tbl[0x06], + /* mTexture */ item_texture_tbl[0x12], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019F, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x0D + /* mArcname */ item_arcname_tbl[0x06], + /* mTexture */ item_texture_tbl[0x12], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019F, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x0E + /* mArcname */ item_arcname_tbl[0x06], + /* mTexture */ item_texture_tbl[0x12], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019F, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x0F + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x06, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x10 + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x11], + /* mBmdIdx */ 0x001E, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x11 + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x11], + /* mBmdIdx */ 0x001E, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x2000 + }, + { + // 0x12 + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x11], + /* mBmdIdx */ 0x001E, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x13 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x5500 + }, + { + // 0x14 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x5500 + }, + { + // 0x15 + /* mArcname */ item_arcname_tbl[0x03], + /* mTexture */ item_texture_tbl[0x01], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3500 + }, + { + // 0x16 + /* mArcname */ item_arcname_tbl[0x48], + /* mTexture */ NULL, + /* mBmdIdx */ 0x001F, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x000C, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x4000 + }, + { + // 0x17 + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x03], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x18 + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x03], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x19 + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x03], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1A + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x02, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0x1B + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1C + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1D + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1E + /* mArcname */ item_arcname_tbl[0x00], + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ 0x002A, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0B80 + }, + { + // 0x1F + /* mArcname */ item_arcname_tbl[0x39], + /* mTexture */ item_texture_tbl[0x23], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A0, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x20 + /* mArcname */ item_arcname_tbl[0x05], + /* mTexture */ item_texture_tbl[0x04], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0191, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3320 + }, + { + // 0x21 + /* mArcname */ item_arcname_tbl[0x2E], + /* mTexture */ item_texture_tbl[0x05], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019C, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x22 + /* mArcname */ item_arcname_tbl[0x43], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A1, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x23 + /* mArcname */ item_arcname_tbl[0x18], + /* mTexture */ item_texture_tbl[0x07], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A2, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x24 + /* mArcname */ item_arcname_tbl[0x1D], + /* mTexture */ item_texture_tbl[0x08], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x25 + /* mArcname */ item_arcname_tbl[0x3A], + /* mTexture */ item_texture_tbl[0x0A], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0192, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x26 + /* mArcname */ item_arcname_tbl[0x69], + /* mTexture */ item_texture_tbl[0x6F], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A4, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0x27 + /* mArcname */ item_arcname_tbl[0x47], + /* mTexture */ item_texture_tbl[0x11], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A5, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x28 + /* mArcname */ item_arcname_tbl[0x2A], + /* mTexture */ item_texture_tbl[0x35], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A6, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x29 + /* mArcname */ item_arcname_tbl[0x14], + /* mTexture */ item_texture_tbl[0x0E], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A7, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x2A + /* mArcname */ item_arcname_tbl[0x3B], + /* mTexture */ item_texture_tbl[0x1A], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A8, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x2B + /* mArcname */ item_arcname_tbl[0x15], + /* mTexture */ item_texture_tbl[0x0F], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A9, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x2C + /* mArcname */ item_arcname_tbl[0x1E], + /* mTexture */ item_texture_tbl[0x10], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01AA, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x2D + /* mArcname */ item_arcname_tbl[0x13], + /* mTexture */ item_texture_tbl[0x09], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01AB, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x2E + /* mArcname */ item_arcname_tbl[0x50], + /* mTexture */ item_texture_tbl[0x34], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x2F + /* mArcname */ item_arcname_tbl[0x29], + /* mTexture */ item_texture_tbl[0x19], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01AC, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x30 + /* mArcname */ item_arcname_tbl[0x1C], + /* mTexture */ item_texture_tbl[0x18], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01AD, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x31 + /* mArcname */ item_arcname_tbl[0x06], + /* mTexture */ item_texture_tbl[0x12], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019F, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x32 + /* mArcname */ item_arcname_tbl[0x50], + /* mTexture */ item_texture_tbl[0x63], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x33 + /* mArcname */ item_arcname_tbl[0x2F], + /* mTexture */ item_texture_tbl[0x0D], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01AE, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x34 + /* mArcname */ item_arcname_tbl[0x1B], + /* mTexture */ item_texture_tbl[0x0C], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01AF, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x35 + /* mArcname */ item_arcname_tbl[0x44], + /* mTexture */ item_texture_tbl[0x6D], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B0, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x36 + /* mArcname */ item_arcname_tbl[0x46], + /* mTexture */ item_texture_tbl[0x6E], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B1, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x37 + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x63], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x38 + /* mArcname */ item_arcname_tbl[0x3F], + /* mTexture */ item_texture_tbl[0x30], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0195, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x39 + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x31], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B2, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x5500 + }, + { + // 0x3A + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x61], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B5, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x5500 + }, + { + // 0x3B + /* mArcname */ item_arcname_tbl[0x41], + /* mTexture */ item_texture_tbl[0x32], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0196, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x5000 + }, + { + // 0x3C + /* mArcname */ item_arcname_tbl[0x40], + /* mTexture */ item_texture_tbl[0x33], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B4, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x3D + /* mArcname */ item_arcname_tbl[0x3F], + /* mTexture */ item_texture_tbl[0x30], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x3E + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x62], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x3F + /* mArcname */ item_arcname_tbl[0x02], + /* mTexture */ item_texture_tbl[0x03], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0194, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2420 + }, + { + // 0x40 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x41 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x42 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x36], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0193, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x43 + /* mArcname */ item_arcname_tbl[0x31], + /* mTexture */ item_texture_tbl[0x37], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x019E, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x44 + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B5, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x45 + /* mArcname */ item_arcname_tbl[0x51], + /* mTexture */ item_texture_tbl[0x1C], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B6, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0x46 + /* mArcname */ item_arcname_tbl[0x09], + /* mTexture */ item_texture_tbl[0x1D], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B7, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x47 + /* mArcname */ item_arcname_tbl[0x08], + /* mTexture */ item_texture_tbl[0x1E], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B8, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0x48 + /* mArcname */ item_arcname_tbl[0x52], + /* mTexture */ item_texture_tbl[0x1F], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01B9, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0x49 + /* mArcname */ item_arcname_tbl[0x0A], + /* mTexture */ item_texture_tbl[0x20], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0007, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x01, + /* mItemMesgNum */ 0x01BA, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x4A + /* mArcname */ item_arcname_tbl[0x0A], + /* mTexture */ item_texture_tbl[0x21], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0007, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x01BB, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x4B + /* mArcname */ item_arcname_tbl[0x0A], + /* mTexture */ item_texture_tbl[0x22], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0007, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x02, + /* mItemMesgNum */ 0x01BC, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x4C + /* mArcname */ item_arcname_tbl[0x1A], + /* mTexture */ item_texture_tbl[0x4A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0197, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x4D + /* mArcname */ item_arcname_tbl[0x19], + /* mTexture */ item_texture_tbl[0x4B], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0198, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x4E + /* mArcname */ item_arcname_tbl[0x04], + /* mTexture */ item_texture_tbl[0x4C], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0199, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x54A0 + }, + { + // 0x4F + /* mArcname */ NULL, + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01BD, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x50 + /* mArcname */ item_arcname_tbl[0x11], + /* mTexture */ item_texture_tbl[0x14], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01BE, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x51 + /* mArcname */ item_arcname_tbl[0x34], + /* mTexture */ item_texture_tbl[0x15], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01BF, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x52 + /* mArcname */ item_arcname_tbl[0x33], + /* mTexture */ item_texture_tbl[0x16], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C0, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x53 + /* mArcname */ item_arcname_tbl[0x32], + /* mTexture */ item_texture_tbl[0x17], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C1, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x54 + /* mArcname */ item_arcname_tbl[0x4E], + /* mTexture */ item_texture_tbl[0x71], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01F0, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x55 + /* mArcname */ item_arcname_tbl[0x4E], + /* mTexture */ item_texture_tbl[0x4D], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01EE, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x56 + /* mArcname */ item_arcname_tbl[0x4F], + /* mTexture */ item_texture_tbl[0x4E], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C2, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x57 + /* mArcname */ item_arcname_tbl[0x4C], + /* mTexture */ item_texture_tbl[0x4F], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01EF, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x58 + /* mArcname */ item_arcname_tbl[0x4D], + /* mTexture */ item_texture_tbl[0x50], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01EC, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x59 + /* mArcname */ item_arcname_tbl[0x4B], + /* mTexture */ item_texture_tbl[0x51], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01ED, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x5A + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5B + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5C + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5D + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5E + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5F + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x60 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x61 + /* mArcname */ item_arcname_tbl[0x42], + /* mTexture */ item_texture_tbl[0x53], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x62 + /* mArcname */ item_arcname_tbl[0x5D], + /* mTexture */ item_texture_tbl[0x54], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x63 + /* mArcname */ item_arcname_tbl[0x5E], + /* mTexture */ item_texture_tbl[0x55], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x64 + /* mArcname */ item_arcname_tbl[0x5F], + /* mTexture */ item_texture_tbl[0x56], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x65 + /* mArcname */ item_arcname_tbl[0x60], + /* mTexture */ item_texture_tbl[0x57], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x66 + /* mArcname */ item_arcname_tbl[0x61], + /* mTexture */ item_texture_tbl[0x58], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x67 + /* mArcname */ item_arcname_tbl[0x62], + /* mTexture */ item_texture_tbl[0x59], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x68 + /* mArcname */ item_arcname_tbl[0x63], + /* mTexture */ item_texture_tbl[0x5A], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x1000 + }, + { + // 0x69 + /* mArcname */ item_arcname_tbl[0x3C], + /* mTexture */ item_texture_tbl[0x2F], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C5, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x6A + /* mArcname */ item_arcname_tbl[0x49], + /* mTexture */ item_texture_tbl[0x2D], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C6, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x6B + /* mArcname */ item_arcname_tbl[0x4A], + /* mTexture */ item_texture_tbl[0x2E], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C7, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x3000 + }, + { + // 0x6C + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x36], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C8, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x6D + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01C9, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x6E + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01CA, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x6F + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01CB, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x70 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01CC, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x71 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01CD, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x72 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x06], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01CE, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x73 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x74 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x75 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x76 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x77 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x78 + /* mArcname */ item_arcname_tbl[0x2B], + /* mTexture */ item_texture_tbl[0x0B], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01CF, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x79 + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x7A + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x7B + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x7C + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x7D + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x7E + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x7F + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x80 + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x81 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x82 + /* mArcname */ item_arcname_tbl[0x20], + /* mTexture */ item_texture_tbl[0x24], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01D3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x2000 + }, + { + // 0x83 + /* mArcname */ item_arcname_tbl[0x1F], + /* mTexture */ item_texture_tbl[0x25], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01D2, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x84 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x85 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x86 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x87 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x88 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x89 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x8A + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x8B + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x8C + /* mArcname */ item_arcname_tbl[0x26], + /* mTexture */ item_texture_tbl[0x38], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01D9, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x8D + /* mArcname */ item_arcname_tbl[0x27], + /* mTexture */ item_texture_tbl[0x39], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01DA, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x8E + /* mArcname */ item_arcname_tbl[0x28], + /* mTexture */ item_texture_tbl[0x3A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01DB, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x8F + /* mArcname */ item_arcname_tbl[0x25], + /* mTexture */ item_texture_tbl[0x3B], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01DC, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x90 + /* mArcname */ item_arcname_tbl[0x24], + /* mTexture */ item_texture_tbl[0x3C], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01DD, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x91 + /* mArcname */ item_arcname_tbl[0x23], + /* mTexture */ item_texture_tbl[0x3D], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01DE, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x92 + /* mArcname */ item_arcname_tbl[0x22], + /* mTexture */ item_texture_tbl[0x3E], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01DF, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x93 + /* mArcname */ item_arcname_tbl[0x21], + /* mTexture */ item_texture_tbl[0x3F], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E0, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x94 + /* mArcname */ item_arcname_tbl[0x35], + /* mTexture */ item_texture_tbl[0x40], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E1, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x95 + /* mArcname */ item_arcname_tbl[0x36], + /* mTexture */ item_texture_tbl[0x41], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E2, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x96 + /* mArcname */ item_arcname_tbl[0x38], + /* mTexture */ item_texture_tbl[0x42], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E3, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x97 + /* mArcname */ item_arcname_tbl[0x37], + /* mTexture */ item_texture_tbl[0x43], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E4, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x98 + /* mArcname */ item_arcname_tbl[0x54], + /* mTexture */ item_texture_tbl[0x44], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E5, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x99 + /* mArcname */ item_arcname_tbl[0x55], + /* mTexture */ item_texture_tbl[0x45], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01F6, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x9A + /* mArcname */ item_arcname_tbl[0x56], + /* mTexture */ item_texture_tbl[0x46], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E6, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x9B + /* mArcname */ item_arcname_tbl[0x57], + /* mTexture */ item_texture_tbl[0x47], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E7, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x9C + /* mArcname */ item_arcname_tbl[0x6F], + /* mTexture */ item_texture_tbl[0x48], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E8, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x9D + /* mArcname */ item_arcname_tbl[0x2D], + /* mTexture */ item_texture_tbl[0x49], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01E9, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x9E + /* mArcname */ item_arcname_tbl[0x2C], + /* mTexture */ item_texture_tbl[0x73], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01EA, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x9F + /* mArcname */ item_arcname_tbl[0x69], + /* mTexture */ item_texture_tbl[0x07], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01A4, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xA0 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x36], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01EC, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xA1 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x36], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x01ED, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xA2 + /* mArcname */ item_arcname_tbl[0x30], + /* mTexture */ item_texture_tbl[0x36], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xA3 + /* mArcname */ item_arcname_tbl[0x6A], + /* mTexture */ item_texture_tbl[0x70], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x17C0 + }, + { + // 0xA4 + /* mArcname */ item_arcname_tbl[0x6B], + /* mTexture */ item_texture_tbl[0x70], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x17C0 + }, + { + // 0xA5 + /* mArcname */ item_arcname_tbl[0x6C], + /* mTexture */ item_texture_tbl[0x70], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x17C0 + }, + { + // 0xA6 + /* mArcname */ item_arcname_tbl[0x6D], + /* mTexture */ item_texture_tbl[0x70], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x17C0 + }, + { + // 0xA7 + /* mArcname */ item_arcname_tbl[0x6E], + /* mTexture */ item_texture_tbl[0x70], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x17C0 + }, + { + // 0xA8 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA9 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAA + /* mArcname */ item_arcname_tbl[0x3F], + /* mTexture */ NULL, + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAB + /* mArcname */ item_arcname_tbl[0x0C], + /* mTexture */ item_texture_tbl[0x5F], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xAC + /* mArcname */ item_arcname_tbl[0x0D], + /* mTexture */ item_texture_tbl[0x60], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xAD + /* mArcname */ item_arcname_tbl[0x12], + /* mTexture */ item_texture_tbl[0x64], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xAE + /* mArcname */ item_arcname_tbl[0x15], + /* mTexture */ item_texture_tbl[0x65], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xAF + /* mArcname */ item_arcname_tbl[0x0E], + /* mTexture */ item_texture_tbl[0x66], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xB0 + /* mArcname */ item_arcname_tbl[0x0F], + /* mTexture */ item_texture_tbl[0x67], + /* mBmdIdx */ 0x0004, + /* mSrtIdx */ 0x0007, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x2000 + }, + { + // 0xB1 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB2 + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB3 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xB4 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xB5 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xB6 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xB7 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xB8 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x05, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xB9 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xBA + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xBB + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xBC + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xBD + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xBE + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xBF + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xC0 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xC1 + /* mArcname */ item_arcname_tbl[0x53], + /* mTexture */ item_texture_tbl[0x00], + /* mBmdIdx */ 0x0005, + /* mSrtIdx */ 0x000B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0008, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x17C0 + }, + { + // 0xC2 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC3 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC4 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC5 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC6 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC7 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC8 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xC9 + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xCA + /* mArcname */ item_arcname_tbl[0x45], + /* mTexture */ item_texture_tbl[0x72], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xCB + /* mArcname */ item_arcname_tbl[0x0B], + /* mTexture */ item_texture_tbl[0x6C], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xCC + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xCD + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xCE + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xCF + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD0 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD1 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD2 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD3 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD4 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD5 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD6 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD7 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD8 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xD9 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xDA + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xDB + /* mArcname */ item_arcname_tbl[0x68], + /* mTexture */ item_texture_tbl[0x6B], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xDC + /* mArcname */ item_arcname_tbl[0x0B], + /* mTexture */ item_texture_tbl[0x6C], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xDD + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xDE + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xDF + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE0 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE1 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE2 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE3 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE4 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE5 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE6 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE7 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE8 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xE9 + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xEA + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xEB + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xEC + /* mArcname */ item_arcname_tbl[0x66], + /* mTexture */ item_texture_tbl[0x6A], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xED + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xEE + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xEF + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF0 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF1 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF2 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF3 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF4 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF5 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF6 + /* mArcname */ item_arcname_tbl[0x67], + /* mTexture */ item_texture_tbl[0x69], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF7 + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF8 + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xF9 + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xFA + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xFB + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xFC + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xFD + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xFE + /* mArcname */ item_arcname_tbl[0x65], + /* mTexture */ item_texture_tbl[0x68], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0xFF + /* mArcname */ NULL, + /* mTexture */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mItemMesgNum */ 0x0000, + /* mUnused */ 0x00000000, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, +}; + +/* 803866B0-803882B0 .data field_item_res__10dItem_data */ +dItem_data_field_item_res dItem_data::field_item_res[0x100] = { + { + // 0x00 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x002A, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0680 + }, + { + // 0x01 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x00, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x02 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x01, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x03 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x02, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x04 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x03, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x05 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x04, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x06 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x05, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x07 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0038, + /* mSrtIdx */ 0x005B, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0C40 + }, + { + // 0x08 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0039, + /* mSrtIdx */ 0x005C, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0C60 + }, + { + // 0x09 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0032, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0700 + }, + { + // 0x0A + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0033, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0700 + }, + { + // 0x0B + /* mArc */ item_arcname_tbl[0x07], + /* mBmdIdx */ 0x003C, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0CC0 + }, + { + // 0x0C + /* mArc */ item_arcname_tbl[0x07], + /* mBmdIdx */ 0x003C, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0CC0 + }, + { + // 0x0D + /* mArc */ item_arcname_tbl[0x07], + /* mBmdIdx */ 0x003C, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0CC0 + }, + { + // 0x0E + /* mArc */ item_arcname_tbl[0x07], + /* mBmdIdx */ 0x003C, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0CC0 + }, + { + // 0x0F + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x003A, + /* mSrtIdx */ 0x005D, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0051, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ 0x06, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0CA0 + }, + { + // 0x10 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x001E, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0700 + }, + { + // 0x11 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x001E, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0B40 + }, + { + // 0x12 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x001E, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x13 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x5500 + }, + { + // 0x14 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x5500 + }, + { + // 0x15 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x002B, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0780 + }, + { + // 0x16 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x001F, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x000C, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x4000 + }, + { + // 0x17 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x18 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x19 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x1E + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x002A, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0B80 + }, + { + // 0x1F + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0029, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0015, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0FE0 + }, + { + // 0x20 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x21 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x22 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x23 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x24 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x25 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x26 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x27 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x28 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x29 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x2A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x2B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x2C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x2D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x2E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x2F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x30 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x31 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x32 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x33 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x34 + /* mArc */ item_arcname_tbl[0x1B], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x35 + /* mArc */ item_arcname_tbl[0x07], + /* mBmdIdx */ 0x0037, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x5500 + }, + { + // 0x36 + /* mArc */ item_arcname_tbl[0x07], + /* mBmdIdx */ 0x0037, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x5500 + }, + { + // 0x37 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x38 + /* mArc */ item_arcname_tbl[0x3F], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x39 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x3A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x3B + /* mArc */ item_arcname_tbl[0x41], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x5000 + }, + { + // 0x3C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x3D + /* mArc */ item_arcname_tbl[0x3F], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x3000 + }, + { + // 0x3E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x3F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x40 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x41 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x42 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x43 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x44 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0000 + }, + { + // 0x45 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0027, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0012, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x08A0 + }, + { + // 0x46 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0026, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0010, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0720 + }, + { + // 0x47 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0037, + /* mSrtIdx */ 0x005A, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x0050, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0014, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0EC0 + }, + { + // 0x48 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0025, + /* mSrtIdx */ 0x0059, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x000F, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000222, + /* mHeapSize */ 0x0760 + }, + { + // 0x49 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0036, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x004F, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0011, + /* mTevFrm */ 0x01, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0800 + }, + { + // 0x4A + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0036, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x004F, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0011, + /* mTevFrm */ 0x00, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0800 + }, + { + // 0x4B + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0036, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ 0x004F, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0011, + /* mTevFrm */ 0x02, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0800 + }, + { + // 0x4C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x4D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x4E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x4F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x50 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x51 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x52 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x53 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x54 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x55 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x56 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x57 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x58 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x59 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x5F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x60 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x61 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x62 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x63 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x64 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x65 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x66 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x67 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x68 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x69 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x6A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x6B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x6C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x6D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x6E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x6F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x70 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x71 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x72 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x73 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x74 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x75 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x76 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x77 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x78 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x79 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x7A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x7B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x7C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x7D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x7E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x7F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x80 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x81 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x82 + /* mArc */ item_arcname_tbl[0x00], + /* mBmdIdx */ 0x0028, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0013, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0740 + }, + { + // 0x83 + /* mArc */ item_arcname_tbl[0x1F], + /* mBmdIdx */ 0x0003, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0680 + }, + { + // 0x84 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x85 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x86 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x87 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x88 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x89 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x8A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x8B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x8C + /* mArc */ item_arcname_tbl[0x58], + /* mBmdIdx */ 0x0012, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0005, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x08E0 + }, + { + // 0x8D + /* mArc */ item_arcname_tbl[0x59], + /* mBmdIdx */ 0x0013, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0006, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0860 + }, + { + // 0x8E + /* mArc */ item_arcname_tbl[0x5B], + /* mBmdIdx */ 0x0014, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0007, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0880 + }, + { + // 0x8F + /* mArc */ item_arcname_tbl[0x5B], + /* mBmdIdx */ 0x0015, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1100 + }, + { + // 0x90 + /* mArc */ item_arcname_tbl[0x5B], + /* mBmdIdx */ 0x0016, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1100 + }, + { + // 0x91 + /* mArc */ item_arcname_tbl[0x5B], + /* mBmdIdx */ 0x0017, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0008, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1200 + }, + { + // 0x92 + /* mArc */ item_arcname_tbl[0x5A], + /* mBmdIdx */ 0x0018, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x0009, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x0760 + }, + { + // 0x93 + /* mArc */ item_arcname_tbl[0x5B], + /* mBmdIdx */ 0x0019, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x000A, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1200 + }, + { + // 0x94 + /* mArc */ item_arcname_tbl[0x5C], + /* mBmdIdx */ 0x001A, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x000B, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x95 + /* mArc */ item_arcname_tbl[0x64], + /* mBmdIdx */ 0x001B, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x96 + /* mArc */ item_arcname_tbl[0x5A], + /* mBmdIdx */ 0x001C, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x97 + /* mArc */ item_arcname_tbl[0x5A], + /* mBmdIdx */ 0x001D, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ 0x000E, + /* mTevFrm */ -1, + /* mUnknown */ 0x11000022, + /* mHeapSize */ 0x1000 + }, + { + // 0x98 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x99 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x9A + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x9B + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x9C + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x9D + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x9E + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0x9F + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA0 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA1 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA2 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA3 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA4 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA5 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA6 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA7 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA8 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xA9 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAA + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAB + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAC + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAD + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAE + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xAF + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB0 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB1 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB2 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB3 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB4 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB5 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB6 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB7 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB8 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xB9 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xBA + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xBB + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xBC + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xBD + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xBE + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xBF + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC0 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC1 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC2 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC3 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC4 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC5 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC6 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC7 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC8 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xC9 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xCA + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xCB + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xCC + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xCD + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xCE + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xCF + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD0 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD1 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD2 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD3 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD4 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD5 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD6 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD7 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD8 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xD9 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xDA + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xDB + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xDC + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xDD + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xDE + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xDF + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE0 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE1 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE2 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE3 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE4 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE5 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE6 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE7 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE8 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xE9 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xEA + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xEB + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xEC + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xED + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xEE + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xEF + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF0 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF1 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF2 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF3 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF4 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF5 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF6 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF7 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF8 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xF9 + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xFA + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xFB + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xFC + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xFD + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xFE + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, + { + // 0xFF + /* mArc */ NULL, + /* mBmdIdx */ -1, + /* mSrtIdx */ -1, + /* mSrtIdx2 */ -1, + /* mTevIdx */ -1, + /* mTevIdx2 */ -1, + /* mBckIdx */ -1, + /* mTevFrm */ -1, + /* mUnknown */ 0x00000000, + /* mHeapSize */ 0x0000 + }, +}; + +/* 803882B0-803886B0 .data item_info__10dItem_data */ +dItem_data_item_info dItem_data::item_info[0x100] = { + { + // 0x00 + 0x0F, + 0x28, + 0x1E, + 0x00, + }, + { + // 0x01 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x02 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x03 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x04 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x05 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x06 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x07 + 0x32, + 0x50, + 0x32, + 0x01, + }, + { + // 0x08 + 0x32, + 0x50, + 0x32, + 0x01, + }, + { + // 0x09 + 0x14, + 0x28, + 0x1E, + 0x00, + }, + { + // 0x0A + 0x19, + 0x50, + 0x1E, + 0x00, + }, + { + // 0x0B + 0x28, + 0x3C, + 0x1E, + 0x00, + }, + { + // 0x0C + 0x28, + 0x3C, + 0x1E, + 0x00, + }, + { + // 0x0D + 0x28, + 0x3C, + 0x1E, + 0x00, + }, + { + // 0x0E + 0x28, + 0x3C, + 0x1E, + 0x00, + }, + { + // 0x0F + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x10 + 0x14, + 0x50, + 0x32, + 0x00, + }, + { + // 0x11 + 0x14, + 0x50, + 0x32, + 0x00, + }, + { + // 0x12 + 0x14, + 0x50, + 0x32, + 0x00, + }, + { + // 0x13 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x14 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x15 + 0x14, + 0x28, + 0x1E, + 0x05, + }, + { + // 0x16 + 0x1E, + 0x3C, + 0x1E, + 0x00, + }, + { + // 0x17 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x18 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x19 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x1A + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x1B + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x1C + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x1D + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x1E + 0x0F, + 0x28, + 0x1E, + 0x00, + }, + { + // 0x1F + 0x1E, + 0x46, + 0x23, + 0x00, + }, + { + // 0x20 + 0x28, + 0x00, + 0x00, + 0x05, + }, + { + // 0x21 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x22 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x23 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x24 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x25 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x26 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x27 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x28 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x29 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x2A + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x2B + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x2C + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x2D + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x2E + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x2F + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x30 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x31 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x32 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x33 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x34 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x35 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x36 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x37 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x38 + 0x1E, + 0x32, + 0x1E, + 0x10, + }, + { + // 0x39 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x3A + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x3B + 0x28, + 0x3C, + 0x28, + 0x10, + }, + { + // 0x3C + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x3D + 0x00, + 0x32, + 0x1E, + 0x10, + }, + { + // 0x3E + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x3F + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x40 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x41 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x42 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x43 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x44 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x45 + 0x28, + 0x5A, + 0x32, + 0x00, + }, + { + // 0x46 + 0x1E, + 0x50, + 0x28, + 0x00, + }, + { + // 0x47 + 0x1E, + 0x5A, + 0x28, + 0x00, + }, + { + // 0x48 + 0x32, + 0x46, + 0x28, + 0x00, + }, + { + // 0x49 + 0x19, + 0x46, + 0x28, + 0x00, + }, + { + // 0x4A + 0x19, + 0x46, + 0x28, + 0x00, + }, + { + // 0x4B + 0x19, + 0x46, + 0x28, + 0x00, + }, + { + // 0x4C + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x4D + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x4E + 0x00, + 0x00, + 0x00, + 0x05, + }, + { + // 0x4F + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x50 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x51 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x52 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x53 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x54 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x55 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x56 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x57 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x58 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x59 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x5A + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x5B + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x5C + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x5D + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x5E + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x5F + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x60 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x61 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x62 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x63 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x64 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x65 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x66 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x67 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x68 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x69 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x6A + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x6B + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x6C + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x6D + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x6E + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x6F + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x70 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x71 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x72 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x73 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x74 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x75 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x76 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x77 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x78 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x79 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x7A + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x7B + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x7C + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x7D + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x7E + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x7F + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x80 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x81 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x82 + 0x19, + 0x37, + 0x23, + 0x00, + }, + { + // 0x83 + 0x19, + 0x28, + 0x28, + 0x00, + }, + { + // 0x84 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x85 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x86 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x87 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x88 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x89 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x8A + 0x19, + 0x28, + 0x28, + 0x00, + }, + { + // 0x8B + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x8C + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x8D + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x8E + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x8F + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x90 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x91 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x92 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x93 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x94 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x95 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x96 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x97 + 0x00, + 0x28, + 0x28, + 0x00, + }, + { + // 0x98 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x99 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x9A + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x9B + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x9C + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x9D + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x9E + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0x9F + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA0 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA1 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA2 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA3 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA4 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA5 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA6 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA7 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA8 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xA9 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xAA + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xAB + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xAC + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xAD + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xAE + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xAF + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB0 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB1 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB2 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB3 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB4 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB5 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB6 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB7 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB8 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xB9 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xBA + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xBB + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xBC + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xBD + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xBE + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xBF + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC0 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC1 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC2 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC3 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC4 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC5 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC6 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC7 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC8 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xC9 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xCA + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xCB + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xCC + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xCD + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xCE + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xCF + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD0 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD1 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD2 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD3 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD4 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD5 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD6 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD7 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD8 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xD9 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xDA + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xDB + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xDC + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xDD + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xDE + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xDF + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE0 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE1 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE2 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE3 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE4 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE5 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE6 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE7 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE8 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xE9 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xEA + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xEB + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xEC + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xED + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xEE + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xEF + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF0 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF1 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF2 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF3 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF4 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF5 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF6 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF7 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF8 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xF9 + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xFA + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xFB + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xFC + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xFD + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xFE + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + // 0xFF + 0x00, + 0x00, + 0x00, + 0x00, + }, +}; + +/* 803886B0-803888B4 .data effect_info__10dItem_data */ +dItem_data_effect_info dItem_data::effect_info[0x81] = { + { + // 0x00 + 0x0002, + dPa_name::ID_SCENE_END, + }, + { + // 0x01 + 0x0003, + dPa_name::ID_SCENE_END, + }, + { + // 0x02 + 0x0003, + dPa_name::ID_SCENE_END, + }, + { + // 0x03 + 0x0003, + dPa_name::ID_SCENE_END, + }, + { + // 0x04 + 0x0003, + dPa_name::ID_SCENE_END, + }, + { + // 0x05 + 0x0003, + dPa_name::ID_SCENE_END, + }, + { + // 0x06 + 0x0002, + dPa_name::ID_SCENE_END, + }, + { + // 0x07 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x08 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x09 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x0A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x0B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x0C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x0D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x0E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x0F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x10 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x11 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x12 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x13 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x14 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x15 + 0x0003, + dPa_name::ID_SCENE_END, + }, + { + // 0x16 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x17 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x18 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x19 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x1A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x1B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x1C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x1D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x1E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x1F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x20 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x21 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x22 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x23 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x24 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x25 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x26 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x27 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x28 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x29 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x2A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x2B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x2C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x2D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x2E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x2F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x30 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x31 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x32 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x33 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x34 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x35 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x36 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x37 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x38 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x39 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x3A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x3B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x3C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x3D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x3E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x3F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x40 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x41 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x42 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x43 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x44 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x45 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x46 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x47 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x48 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x49 + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x4A + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x4B + dPa_name::ID_SCENE_END, + 0x0293, + }, + { + // 0x4C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x4D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x4E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x4F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x50 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x51 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x52 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x53 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x54 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x55 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x56 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x57 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x58 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x59 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x5A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x5B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x5C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x5D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x5E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x5F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x60 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x61 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x62 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x63 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x64 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x65 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x66 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x67 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x68 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x69 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x6A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x6B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x6C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x6D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x6E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x6F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x70 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x71 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x72 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x73 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x74 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x75 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x76 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x77 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x78 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x79 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x7A + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x7B + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x7C + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x7D + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x7E + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x7F + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, + { + // 0x80 + dPa_name::ID_SCENE_END, + dPa_name::ID_SCENE_END, + }, +}; + /* 800C12F4-800C1334 .text checkAppearEffect__10dItem_dataFUc */ -bool dItem_data::checkAppearEffect(u8 itemNo) { - /* Nonmatching */ +bool dItem_data::checkAppearEffect(u8 no) { + if (no > 0x80) { + return false; + } + return effect_info[no].m_appear != dPa_name::ID_SCENE_END; } /* 800C1334-800C13B4 .text getAppearEffect__10dItem_dataFUc */ -s16 dItem_data::getAppearEffect(u8 itemNo) { - /* Nonmatching */ +u16 dItem_data::getAppearEffect(u8 no) { + JUT_ASSERT(9676, effect_info[no].m_appear != dPa_name::ID_SCENE_END); + return effect_info[no].m_appear; } /* 800C13B4-800C13F8 .text checkSpecialEffect__10dItem_dataFUc */ -bool dItem_data::checkSpecialEffect(u8 itemNo) { - /* Nonmatching */ +bool dItem_data::checkSpecialEffect(u8 no) { + if (no > 0x80) { + return false; + } + return effect_info[no].m_sp_effect != dPa_name::ID_SCENE_END; } /* 800C13F8-800C1474 .text getSpecialEffect__10dItem_dataFUc */ -u16 dItem_data::getSpecialEffect(u8 itemNo) { - /* Nonmatching */ +u16 dItem_data::getSpecialEffect(u8 no) { + JUT_ASSERT(9700, effect_info[no].m_sp_effect != dPa_name::ID_SCENE_END); + return effect_info[no].m_sp_effect; } - From afeb2a096564924ed4d397df04720021f0141259 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 22 Sep 2023 01:25:19 -0400 Subject: [PATCH 37/89] Add item enum names as comments to each entry --- src/d/d_item_data.cpp | 1794 ++++++++++++++++++++--------------------- 1 file changed, 897 insertions(+), 897 deletions(-) diff --git a/src/d/d_item_data.cpp b/src/d/d_item_data.cpp index b4ab01e8b..d2030e262 100644 --- a/src/d/d_item_data.cpp +++ b/src/d/d_item_data.cpp @@ -251,7 +251,7 @@ char* dItem_data::item_texture_tbl[0x74] = { /* 803842B0-803866B0 .data item_resource__10dItem_data */ dItem_data_item_resource dItem_data::item_resource[0x100] = { { - // 0x00 + // 0x00: HEART /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ 0x002A, @@ -267,7 +267,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0B80 }, { - // 0x01 + // 0x01: GREEN_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -283,7 +283,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x02 + // 0x02: BLUE_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -299,7 +299,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x03 + // 0x03: YELLOW_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -315,7 +315,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x04 + // 0x04: RED_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -331,7 +331,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x05 + // 0x05: PURPLE_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -347,7 +347,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x06 + // 0x06: ORANGE_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -363,7 +363,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x07 + // 0x07: KAKERA_HEART /* mArcname */ item_arcname_tbl[0x02], /* mTexture */ item_texture_tbl[0x03], /* mBmdIdx */ 0x0004, @@ -379,7 +379,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2420 }, { - // 0x08 + // 0x08: UTUWA_HEART /* mArcname */ item_arcname_tbl[0x01], /* mTexture */ item_texture_tbl[0x02], /* mBmdIdx */ 0x0004, @@ -395,7 +395,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2500 }, { - // 0x09 + // 0x09: S_MAGIC /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ 0x0032, @@ -411,7 +411,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0B80 }, { - // 0x0A + // 0x0A: L_MAGIC /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ 0x0033, @@ -427,7 +427,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0B80 }, { - // 0x0B + // 0x0B: BOMB_5 /* mArcname */ item_arcname_tbl[0x06], /* mTexture */ item_texture_tbl[0x12], /* mBmdIdx */ 0x0003, @@ -443,7 +443,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x0C + // 0x0C: BOMB_10 /* mArcname */ item_arcname_tbl[0x06], /* mTexture */ item_texture_tbl[0x12], /* mBmdIdx */ 0x0003, @@ -459,7 +459,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x0D + // 0x0D: BOMB_20 /* mArcname */ item_arcname_tbl[0x06], /* mTexture */ item_texture_tbl[0x12], /* mBmdIdx */ 0x0003, @@ -475,7 +475,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x0E + // 0x0E: BOMB_30 /* mArcname */ item_arcname_tbl[0x06], /* mTexture */ item_texture_tbl[0x12], /* mBmdIdx */ 0x0003, @@ -491,7 +491,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x0F + // 0x0F: SILVER_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -507,7 +507,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x10 + // 0x10: ARROW_10 /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x11], /* mBmdIdx */ 0x001E, @@ -523,7 +523,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x11 + // 0x11: ARROW_20 /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x11], /* mBmdIdx */ 0x001E, @@ -539,7 +539,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0x12 + // 0x12: ARROW_30 /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x11], /* mBmdIdx */ 0x001E, @@ -555,7 +555,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x13 + // 0x13: noentry19 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -571,7 +571,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x14 + // 0x14: noentry20 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -587,7 +587,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x15 + // 0x15: SMALL_KEY /* mArcname */ item_arcname_tbl[0x03], /* mTexture */ item_texture_tbl[0x01], /* mBmdIdx */ 0x0003, @@ -603,7 +603,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3500 }, { - // 0x16 + // 0x16: RECOVER_FAIRY /* mArcname */ item_arcname_tbl[0x48], /* mTexture */ NULL, /* mBmdIdx */ 0x001F, @@ -619,7 +619,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x4000 }, { - // 0x17 + // 0x17: noentry23 /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x03], /* mBmdIdx */ -1, @@ -635,7 +635,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x18 + // 0x18: noentry24 /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x03], /* mBmdIdx */ -1, @@ -651,7 +651,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x19 + // 0x19: noentry25 /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x03], /* mBmdIdx */ -1, @@ -667,7 +667,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1A + // 0x1A: SUB_DUN_RUPEE /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -683,7 +683,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0x1B + // 0x1B: noentry27 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -699,7 +699,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1C + // 0x1C: noentry28 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -715,7 +715,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1D + // 0x1D: noentry29 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -731,7 +731,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1E + // 0x1E: TRIPLE_HEART /* mArcname */ item_arcname_tbl[0x00], /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ 0x002A, @@ -747,7 +747,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0B80 }, { - // 0x1F + // 0x1F: PENDANT /* mArcname */ item_arcname_tbl[0x39], /* mTexture */ item_texture_tbl[0x23], /* mBmdIdx */ 0x0003, @@ -763,7 +763,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x20 + // 0x20: TELESCOPE /* mArcname */ item_arcname_tbl[0x05], /* mTexture */ item_texture_tbl[0x04], /* mBmdIdx */ 0x0004, @@ -779,7 +779,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3320 }, { - // 0x21 + // 0x21: TNCL_WHITSL /* mArcname */ item_arcname_tbl[0x2E], /* mTexture */ item_texture_tbl[0x05], /* mBmdIdx */ 0x0003, @@ -795,7 +795,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x22 + // 0x22: WIND_TACT /* mArcname */ item_arcname_tbl[0x43], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0003, @@ -811,7 +811,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x23 + // 0x23: CAMERA /* mArcname */ item_arcname_tbl[0x18], /* mTexture */ item_texture_tbl[0x07], /* mBmdIdx */ 0x0004, @@ -827,7 +827,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x24 + // 0x24: EMONO_BAG /* mArcname */ item_arcname_tbl[0x1D], /* mTexture */ item_texture_tbl[0x08], /* mBmdIdx */ 0x0003, @@ -843,7 +843,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x25 + // 0x25: ROPE /* mArcname */ item_arcname_tbl[0x3A], /* mTexture */ item_texture_tbl[0x0A], /* mBmdIdx */ 0x0004, @@ -859,7 +859,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x26 + // 0x26: CAMERA2 /* mArcname */ item_arcname_tbl[0x69], /* mTexture */ item_texture_tbl[0x6F], /* mBmdIdx */ 0x0004, @@ -875,7 +875,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0x27 + // 0x27: BOW /* mArcname */ item_arcname_tbl[0x47], /* mTexture */ item_texture_tbl[0x11], /* mBmdIdx */ 0x0004, @@ -891,7 +891,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x28 + // 0x28: PWR_GROOVE /* mArcname */ item_arcname_tbl[0x2A], /* mTexture */ item_texture_tbl[0x35], /* mBmdIdx */ 0x0004, @@ -907,7 +907,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x29 + // 0x29: HVY_BOOTS /* mArcname */ item_arcname_tbl[0x14], /* mTexture */ item_texture_tbl[0x0E], /* mBmdIdx */ 0x0004, @@ -923,7 +923,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x2A + // 0x2A: DRGN_SHIELD /* mArcname */ item_arcname_tbl[0x3B], /* mTexture */ item_texture_tbl[0x1A], /* mBmdIdx */ 0x0005, @@ -939,7 +939,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x2B + // 0x2B: WATER_BOOTS /* mArcname */ item_arcname_tbl[0x15], /* mTexture */ item_texture_tbl[0x0F], /* mBmdIdx */ -1, @@ -955,7 +955,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x2C + // 0x2C: ESA_BAG /* mArcname */ item_arcname_tbl[0x1E], /* mTexture */ item_texture_tbl[0x10], /* mBmdIdx */ 0x0003, @@ -971,7 +971,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x2D + // 0x2D: BOOMERANG /* mArcname */ item_arcname_tbl[0x13], /* mTexture */ item_texture_tbl[0x09], /* mBmdIdx */ 0x0003, @@ -987,7 +987,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x2E + // 0x2E: BARE_HAND /* mArcname */ item_arcname_tbl[0x50], /* mTexture */ item_texture_tbl[0x34], /* mBmdIdx */ 0x0003, @@ -1003,7 +1003,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x2F + // 0x2F: HOOKSHOT /* mArcname */ item_arcname_tbl[0x29], /* mTexture */ item_texture_tbl[0x19], /* mBmdIdx */ 0x0004, @@ -1019,7 +1019,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x30 + // 0x30: WARASHIBE_BAG /* mArcname */ item_arcname_tbl[0x1C], /* mTexture */ item_texture_tbl[0x18], /* mBmdIdx */ 0x0003, @@ -1035,7 +1035,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x31 + // 0x31: BOMB_BAG /* mArcname */ item_arcname_tbl[0x06], /* mTexture */ item_texture_tbl[0x12], /* mBmdIdx */ 0x0003, @@ -1051,7 +1051,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x32 + // 0x32: FUKU /* mArcname */ item_arcname_tbl[0x50], /* mTexture */ item_texture_tbl[0x63], /* mBmdIdx */ 0x0003, @@ -1067,7 +1067,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x33 + // 0x33: HUMMER /* mArcname */ item_arcname_tbl[0x2F], /* mTexture */ item_texture_tbl[0x0D], /* mBmdIdx */ 0x0003, @@ -1083,7 +1083,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x34 + // 0x34: DEKU_LEAF /* mArcname */ item_arcname_tbl[0x1B], /* mTexture */ item_texture_tbl[0x0C], /* mBmdIdx */ 0x0003, @@ -1099,7 +1099,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x35 + // 0x35: MAGIC_ARROW /* mArcname */ item_arcname_tbl[0x44], /* mTexture */ item_texture_tbl[0x6D], /* mBmdIdx */ 0x0004, @@ -1115,7 +1115,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x36 + // 0x36: LIGHT_ARROW /* mArcname */ item_arcname_tbl[0x46], /* mTexture */ item_texture_tbl[0x6E], /* mBmdIdx */ 0x0004, @@ -1131,7 +1131,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x37 + // 0x37: noentry55 /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x63], /* mBmdIdx */ -1, @@ -1147,7 +1147,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x38 + // 0x38: SWORD /* mArcname */ item_arcname_tbl[0x3F], /* mTexture */ item_texture_tbl[0x30], /* mBmdIdx */ 0x0003, @@ -1163,7 +1163,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x39 + // 0x39: MASTER_SWORD /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x31], /* mBmdIdx */ -1, @@ -1179,7 +1179,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x3A + // 0x3A: LV3_SWORD /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x61], /* mBmdIdx */ -1, @@ -1195,7 +1195,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x3B + // 0x3B: SHIELD /* mArcname */ item_arcname_tbl[0x41], /* mTexture */ item_texture_tbl[0x32], /* mBmdIdx */ 0x0003, @@ -1211,7 +1211,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x5000 }, { - // 0x3C + // 0x3C: MIRROR_SHIELD /* mArcname */ item_arcname_tbl[0x40], /* mTexture */ item_texture_tbl[0x33], /* mBmdIdx */ 0x0004, @@ -1227,7 +1227,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x3D + // 0x3D: DROPPED_SWORD /* mArcname */ item_arcname_tbl[0x3F], /* mTexture */ item_texture_tbl[0x30], /* mBmdIdx */ 0x0003, @@ -1243,7 +1243,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x3E + // 0x3E: MASTER_SWORD_EX /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x62], /* mBmdIdx */ -1, @@ -1259,7 +1259,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x3F + // 0x3F: KAKERA_HEART2 /* mArcname */ item_arcname_tbl[0x02], /* mTexture */ item_texture_tbl[0x03], /* mBmdIdx */ 0x0004, @@ -1275,7 +1275,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2420 }, { - // 0x40 + // 0x40: noentry64 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1291,7 +1291,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x41 + // 0x41: noentry65 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1307,7 +1307,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x42 + // 0x42: PIRATES_OMAMORI /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x36], /* mBmdIdx */ 0x0004, @@ -1323,7 +1323,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x43 + // 0x43: HEROS_OMAMORI /* mArcname */ item_arcname_tbl[0x31], /* mTexture */ item_texture_tbl[0x37], /* mBmdIdx */ 0x0004, @@ -1339,7 +1339,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x44 + // 0x44: GRASS_BALL /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ -1, @@ -1355,7 +1355,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x45 + // 0x45: SKULL_NECKLACE /* mArcname */ item_arcname_tbl[0x51], /* mTexture */ item_texture_tbl[0x1C], /* mBmdIdx */ 0x0004, @@ -1371,7 +1371,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0x46 + // 0x46: BOKOBABA_SEED /* mArcname */ item_arcname_tbl[0x09], /* mTexture */ item_texture_tbl[0x1D], /* mBmdIdx */ 0x0003, @@ -1387,7 +1387,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x47 + // 0x47: GOLDEN_FEATHER /* mArcname */ item_arcname_tbl[0x08], /* mTexture */ item_texture_tbl[0x1E], /* mBmdIdx */ 0x0005, @@ -1403,7 +1403,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0x48 + // 0x48: BOKO_BELT /* mArcname */ item_arcname_tbl[0x52], /* mTexture */ item_texture_tbl[0x1F], /* mBmdIdx */ 0x0004, @@ -1419,7 +1419,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0x49 + // 0x49: RED_JELLY /* mArcname */ item_arcname_tbl[0x0A], /* mTexture */ item_texture_tbl[0x20], /* mBmdIdx */ 0x0004, @@ -1435,7 +1435,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x4A + // 0x4A: GREEN_JELLY /* mArcname */ item_arcname_tbl[0x0A], /* mTexture */ item_texture_tbl[0x21], /* mBmdIdx */ 0x0004, @@ -1451,7 +1451,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x4B + // 0x4B: BLUE_JELLY /* mArcname */ item_arcname_tbl[0x0A], /* mTexture */ item_texture_tbl[0x22], /* mBmdIdx */ 0x0004, @@ -1467,7 +1467,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x4C + // 0x4C: MAP /* mArcname */ item_arcname_tbl[0x1A], /* mTexture */ item_texture_tbl[0x4A], /* mBmdIdx */ 0x0003, @@ -1483,7 +1483,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x4D + // 0x4D: COMPASS /* mArcname */ item_arcname_tbl[0x19], /* mTexture */ item_texture_tbl[0x4B], /* mBmdIdx */ 0x0004, @@ -1499,7 +1499,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x4E + // 0x4E: BOSS_KEY /* mArcname */ item_arcname_tbl[0x04], /* mTexture */ item_texture_tbl[0x4C], /* mBmdIdx */ 0x0004, @@ -1515,7 +1515,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x54A0 }, { - // 0x4F + // 0x4F: EMPTY_BSHIP /* mArcname */ NULL, /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ -1, @@ -1531,7 +1531,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x50 + // 0x50: EMPTY_BOTTLE /* mArcname */ item_arcname_tbl[0x11], /* mTexture */ item_texture_tbl[0x14], /* mBmdIdx */ 0x0004, @@ -1547,7 +1547,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x51 + // 0x51: RED_BOTTLE /* mArcname */ item_arcname_tbl[0x34], /* mTexture */ item_texture_tbl[0x15], /* mBmdIdx */ 0x0004, @@ -1563,7 +1563,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x52 + // 0x52: GREEN_BOTTLE /* mArcname */ item_arcname_tbl[0x33], /* mTexture */ item_texture_tbl[0x16], /* mBmdIdx */ 0x0004, @@ -1579,7 +1579,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x53 + // 0x53: BLUE_BOTTLE /* mArcname */ item_arcname_tbl[0x32], /* mTexture */ item_texture_tbl[0x17], /* mBmdIdx */ 0x0004, @@ -1595,7 +1595,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x54 + // 0x54: BOTTLESHIP /* mArcname */ item_arcname_tbl[0x4E], /* mTexture */ item_texture_tbl[0x71], /* mBmdIdx */ 0x0004, @@ -1611,7 +1611,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x55 + // 0x55: SOUP_BOTTLE /* mArcname */ item_arcname_tbl[0x4E], /* mTexture */ item_texture_tbl[0x4D], /* mBmdIdx */ 0x0004, @@ -1627,7 +1627,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x56 + // 0x56: BIN_IN_WATER /* mArcname */ item_arcname_tbl[0x4F], /* mTexture */ item_texture_tbl[0x4E], /* mBmdIdx */ 0x0004, @@ -1643,7 +1643,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x57 + // 0x57: FAIRY_BOTTLE /* mArcname */ item_arcname_tbl[0x4C], /* mTexture */ item_texture_tbl[0x4F], /* mBmdIdx */ 0x0004, @@ -1659,7 +1659,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x58 + // 0x58: FIREFLY_BOTTLE /* mArcname */ item_arcname_tbl[0x4D], /* mTexture */ item_texture_tbl[0x50], /* mBmdIdx */ 0x0005, @@ -1675,7 +1675,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x59 + // 0x59: FWATER_BOTTLE /* mArcname */ item_arcname_tbl[0x4B], /* mTexture */ item_texture_tbl[0x51], /* mBmdIdx */ 0x0004, @@ -1691,7 +1691,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x5A + // 0x5A: UNK_BOTTLE_5A /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1707,7 +1707,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5B + // 0x5B: UNK_BOTTLE_5B /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1723,7 +1723,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5C + // 0x5C: UNK_BOTTLE_5C /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1739,7 +1739,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5D + // 0x5D: UNK_BOTTLE_5D /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1755,7 +1755,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5E + // 0x5E: UNK_BOTTLE_5E /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1771,7 +1771,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5F + // 0x5F: UNK_BOTTLE_5F /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1787,7 +1787,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x60 + // 0x60: UNK_BOTTLE_60 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -1803,7 +1803,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x61 + // 0x61: TRIFORCE1 /* mArcname */ item_arcname_tbl[0x42], /* mTexture */ item_texture_tbl[0x53], /* mBmdIdx */ 0x0004, @@ -1819,7 +1819,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x62 + // 0x62: TRIFORCE2 /* mArcname */ item_arcname_tbl[0x5D], /* mTexture */ item_texture_tbl[0x54], /* mBmdIdx */ 0x0004, @@ -1835,7 +1835,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x63 + // 0x63: TRIFORCE3 /* mArcname */ item_arcname_tbl[0x5E], /* mTexture */ item_texture_tbl[0x55], /* mBmdIdx */ 0x0004, @@ -1851,7 +1851,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x64 + // 0x64: TRIFORCE4 /* mArcname */ item_arcname_tbl[0x5F], /* mTexture */ item_texture_tbl[0x56], /* mBmdIdx */ 0x0004, @@ -1867,7 +1867,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x65 + // 0x65: TRIFORCE5 /* mArcname */ item_arcname_tbl[0x60], /* mTexture */ item_texture_tbl[0x57], /* mBmdIdx */ 0x0004, @@ -1883,7 +1883,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x66 + // 0x66: TRIFORCE6 /* mArcname */ item_arcname_tbl[0x61], /* mTexture */ item_texture_tbl[0x58], /* mBmdIdx */ 0x0004, @@ -1899,7 +1899,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x67 + // 0x67: TRIFORCE7 /* mArcname */ item_arcname_tbl[0x62], /* mTexture */ item_texture_tbl[0x59], /* mBmdIdx */ 0x0004, @@ -1915,7 +1915,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x68 + // 0x68: TRIFORCE8 /* mArcname */ item_arcname_tbl[0x63], /* mTexture */ item_texture_tbl[0x5A], /* mBmdIdx */ 0x0004, @@ -1931,7 +1931,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x69 + // 0x69: PEARL1 /* mArcname */ item_arcname_tbl[0x3C], /* mTexture */ item_texture_tbl[0x2F], /* mBmdIdx */ 0x0004, @@ -1947,7 +1947,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x6A + // 0x6A: PEARL2 /* mArcname */ item_arcname_tbl[0x49], /* mTexture */ item_texture_tbl[0x2D], /* mBmdIdx */ 0x0004, @@ -1963,7 +1963,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x6B + // 0x6B: PEARL3 /* mArcname */ item_arcname_tbl[0x4A], /* mTexture */ item_texture_tbl[0x2E], /* mBmdIdx */ 0x0004, @@ -1979,7 +1979,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x6C + // 0x6C: KNOWLEDGE_TF /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x36], /* mBmdIdx */ 0x0004, @@ -1995,7 +1995,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x6D + // 0x6D: TACT_SONG1 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0004, @@ -2011,7 +2011,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x6E + // 0x6E: TACT_SONG2 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0004, @@ -2027,7 +2027,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x6F + // 0x6F: TACT_SONG3 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0004, @@ -2043,7 +2043,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x70 + // 0x70: TACT_SONG4 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0004, @@ -2059,7 +2059,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x71 + // 0x71: TACT_SONG5 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0004, @@ -2075,7 +2075,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x72 + // 0x72: TACT_SONG6 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x06], /* mBmdIdx */ 0x0004, @@ -2091,7 +2091,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x73 + // 0x73: noentry115 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2107,7 +2107,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x74 + // 0x74: noentry116 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2123,7 +2123,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x75 + // 0x75: noentry117 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2139,7 +2139,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x76 + // 0x76: noentry118 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2155,7 +2155,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x77 + // 0x77: noentry119 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2171,7 +2171,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x78 + // 0x78: NORMAL_SAIL /* mArcname */ item_arcname_tbl[0x2B], /* mTexture */ item_texture_tbl[0x0B], /* mBmdIdx */ 0x0003, @@ -2187,7 +2187,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x79 + // 0x79: TRIFORCE_MAP1 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2203,7 +2203,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x7A + // 0x7A: TRIFORCE_MAP2 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2219,7 +2219,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x7B + // 0x7B: TRIFORCE_MAP3 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2235,7 +2235,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x7C + // 0x7C: TRIFORCE_MAP4 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2251,7 +2251,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x7D + // 0x7D: TRIFORCE_MAP5 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2267,7 +2267,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x7E + // 0x7E: TRIFORCE_MAP6 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2283,7 +2283,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x7F + // 0x7F: TRIFORCE_MAP7 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2299,7 +2299,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x80 + // 0x80: TRIFORCE_MAP8 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -2315,7 +2315,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x81 + // 0x81: noentry129 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2331,7 +2331,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x82 + // 0x82: BIRD_ESA_5 /* mArcname */ item_arcname_tbl[0x20], /* mTexture */ item_texture_tbl[0x24], /* mBmdIdx */ 0x0003, @@ -2347,7 +2347,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0x83 + // 0x83: ANIMAL_ESA /* mArcname */ item_arcname_tbl[0x1F], /* mTexture */ item_texture_tbl[0x25], /* mBmdIdx */ 0x0003, @@ -2363,7 +2363,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x84 + // 0x84: ESA1 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2379,7 +2379,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x85 + // 0x85: ESA2 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2395,7 +2395,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x86 + // 0x86: ESA3 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2411,7 +2411,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x87 + // 0x87: ESA4 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2427,7 +2427,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x88 + // 0x88: ESA5 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2443,7 +2443,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x89 + // 0x89: MAGIC_BEAN /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2459,7 +2459,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x8A + // 0x8A: BIRD_ESA_10 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2475,7 +2475,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x8B + // 0x8B: noentry139 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2491,7 +2491,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x8C + // 0x8C: FLOWER_1 /* mArcname */ item_arcname_tbl[0x26], /* mTexture */ item_texture_tbl[0x38], /* mBmdIdx */ 0x0003, @@ -2507,7 +2507,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x8D + // 0x8D: FLOWER_2 /* mArcname */ item_arcname_tbl[0x27], /* mTexture */ item_texture_tbl[0x39], /* mBmdIdx */ 0x0003, @@ -2523,7 +2523,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x8E + // 0x8E: FLOWER_3 /* mArcname */ item_arcname_tbl[0x28], /* mTexture */ item_texture_tbl[0x3A], /* mBmdIdx */ 0x0003, @@ -2539,7 +2539,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x8F + // 0x8F: HEROS_FLAG /* mArcname */ item_arcname_tbl[0x25], /* mTexture */ item_texture_tbl[0x3B], /* mBmdIdx */ 0x0003, @@ -2555,7 +2555,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x90 + // 0x90: TAIRYO_FLAG /* mArcname */ item_arcname_tbl[0x24], /* mTexture */ item_texture_tbl[0x3C], /* mBmdIdx */ 0x0003, @@ -2571,7 +2571,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x91 + // 0x91: SALES_FLAG /* mArcname */ item_arcname_tbl[0x23], /* mTexture */ item_texture_tbl[0x3D], /* mBmdIdx */ 0x0003, @@ -2587,7 +2587,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x92 + // 0x92: WIND_FLAG /* mArcname */ item_arcname_tbl[0x22], /* mTexture */ item_texture_tbl[0x3E], /* mBmdIdx */ 0x0003, @@ -2603,7 +2603,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x93 + // 0x93: RED_FLAG /* mArcname */ item_arcname_tbl[0x21], /* mTexture */ item_texture_tbl[0x3F], /* mBmdIdx */ 0x0003, @@ -2619,7 +2619,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x94 + // 0x94: FOSSIL_HEAD /* mArcname */ item_arcname_tbl[0x35], /* mTexture */ item_texture_tbl[0x40], /* mBmdIdx */ 0x0003, @@ -2635,7 +2635,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x95 + // 0x95: WATER_STATUE /* mArcname */ item_arcname_tbl[0x36], /* mTexture */ item_texture_tbl[0x41], /* mBmdIdx */ 0x0003, @@ -2651,7 +2651,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x96 + // 0x96: POSTMAN_STATUE /* mArcname */ item_arcname_tbl[0x38], /* mTexture */ item_texture_tbl[0x42], /* mBmdIdx */ 0x0003, @@ -2667,7 +2667,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x97 + // 0x97: PRESIDENT_STATUE /* mArcname */ item_arcname_tbl[0x37], /* mTexture */ item_texture_tbl[0x43], /* mBmdIdx */ 0x0003, @@ -2683,7 +2683,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x98 + // 0x98: LETTER00 /* mArcname */ item_arcname_tbl[0x54], /* mTexture */ item_texture_tbl[0x44], /* mBmdIdx */ 0x0003, @@ -2699,7 +2699,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x99 + // 0x99: MAGIC_SEED /* mArcname */ item_arcname_tbl[0x55], /* mTexture */ item_texture_tbl[0x45], /* mBmdIdx */ 0x0003, @@ -2715,7 +2715,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x9A + // 0x9A: MAGYS_LETTER /* mArcname */ item_arcname_tbl[0x56], /* mTexture */ item_texture_tbl[0x46], /* mBmdIdx */ 0x0003, @@ -2731,7 +2731,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x9B + // 0x9B: MO_LETTER /* mArcname */ item_arcname_tbl[0x57], /* mTexture */ item_texture_tbl[0x47], /* mBmdIdx */ 0x0003, @@ -2747,7 +2747,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x9C + // 0x9C: COTTAGE_PAPER /* mArcname */ item_arcname_tbl[0x6F], /* mTexture */ item_texture_tbl[0x48], /* mBmdIdx */ 0x0003, @@ -2763,7 +2763,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x9D + // 0x9D: KAISEN_PRESENT1 /* mArcname */ item_arcname_tbl[0x2D], /* mTexture */ item_texture_tbl[0x49], /* mBmdIdx */ 0x0003, @@ -2779,7 +2779,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x9E + // 0x9E: KAISEN_PRESENT2 /* mArcname */ item_arcname_tbl[0x2C], /* mTexture */ item_texture_tbl[0x73], /* mBmdIdx */ 0x0003, @@ -2795,7 +2795,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x9F + // 0x9F: SALVAGE_ITEM1 /* mArcname */ item_arcname_tbl[0x69], /* mTexture */ item_texture_tbl[0x07], /* mBmdIdx */ 0x0004, @@ -2811,7 +2811,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xA0 + // 0xA0: SALVAGE_ITEM2 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x36], /* mBmdIdx */ 0x0004, @@ -2827,7 +2827,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xA1 + // 0xA1: SALVAGE_ITEM3 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x36], /* mBmdIdx */ 0x0004, @@ -2843,7 +2843,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xA2 + // 0xA2: XXX_039 /* mArcname */ item_arcname_tbl[0x30], /* mTexture */ item_texture_tbl[0x36], /* mBmdIdx */ 0x0004, @@ -2859,7 +2859,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xA3 + // 0xA3: TINGLE_STATUE1 /* mArcname */ item_arcname_tbl[0x6A], /* mTexture */ item_texture_tbl[0x70], /* mBmdIdx */ 0x0003, @@ -2875,7 +2875,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xA4 + // 0xA4: TINGLE_STATUE2 /* mArcname */ item_arcname_tbl[0x6B], /* mTexture */ item_texture_tbl[0x70], /* mBmdIdx */ 0x0003, @@ -2891,7 +2891,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xA5 + // 0xA5: TINGLE_STATUE3 /* mArcname */ item_arcname_tbl[0x6C], /* mTexture */ item_texture_tbl[0x70], /* mBmdIdx */ 0x0003, @@ -2907,7 +2907,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xA6 + // 0xA6: TINGLE_STATUE4 /* mArcname */ item_arcname_tbl[0x6D], /* mTexture */ item_texture_tbl[0x70], /* mBmdIdx */ 0x0003, @@ -2923,7 +2923,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xA7 + // 0xA7: TINGLE_STATUE5 /* mArcname */ item_arcname_tbl[0x6E], /* mTexture */ item_texture_tbl[0x70], /* mBmdIdx */ 0x0003, @@ -2939,7 +2939,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xA8 + // 0xA8: TINGLE_STATUE6 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2955,7 +2955,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA9 + // 0xA9: noentry169 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -2971,7 +2971,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAA + // 0xAA: noentry170 /* mArcname */ item_arcname_tbl[0x3F], /* mTexture */ NULL, /* mBmdIdx */ 0x0003, @@ -2987,7 +2987,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAB + // 0xAB: MAX_RUPEE_UP1 /* mArcname */ item_arcname_tbl[0x0C], /* mTexture */ item_texture_tbl[0x5F], /* mBmdIdx */ 0x0004, @@ -3003,7 +3003,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xAC + // 0xAC: MAX_RUPEE_UP2 /* mArcname */ item_arcname_tbl[0x0D], /* mTexture */ item_texture_tbl[0x60], /* mBmdIdx */ 0x0004, @@ -3019,7 +3019,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xAD + // 0xAD: MAX_BOMB_UP1 /* mArcname */ item_arcname_tbl[0x12], /* mTexture */ item_texture_tbl[0x64], /* mBmdIdx */ 0x0004, @@ -3035,7 +3035,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xAE + // 0xAE: MAX_BOMB_UP2 /* mArcname */ item_arcname_tbl[0x15], /* mTexture */ item_texture_tbl[0x65], /* mBmdIdx */ 0x0004, @@ -3051,7 +3051,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xAF + // 0xAF: MAX_ARROW_UP1 /* mArcname */ item_arcname_tbl[0x0E], /* mTexture */ item_texture_tbl[0x66], /* mBmdIdx */ 0x0004, @@ -3067,7 +3067,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xB0 + // 0xB0: MAX_ARROW_UP2 /* mArcname */ item_arcname_tbl[0x0F], /* mTexture */ item_texture_tbl[0x67], /* mBmdIdx */ 0x0004, @@ -3083,7 +3083,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x2000 }, { - // 0xB1 + // 0xB1: MAGIC_POWER /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -3099,7 +3099,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB2 + // 0xB2: MAX_MP_UP1 /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -3115,7 +3115,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB3 + // 0xB3: TINCLE_RUPEE1 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3131,7 +3131,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xB4 + // 0xB4: TINCLE_RUPEE2 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3147,7 +3147,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xB5 + // 0xB5: TINCLE_RUPEE3 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3163,7 +3163,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xB6 + // 0xB6: TINCLE_RUPEE4 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3179,7 +3179,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xB7 + // 0xB7: TINCLE_RUPEE5 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3195,7 +3195,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xB8 + // 0xB8: TINCLE_RUPEE6 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3211,7 +3211,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xB9 + // 0xB9: LITHOGRAPH1 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3227,7 +3227,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xBA + // 0xBA: LITHOGRAPH2 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3243,7 +3243,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xBB + // 0xBB: LITHOGRAPH3 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3259,7 +3259,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xBC + // 0xBC: LITHOGRAPH4 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3275,7 +3275,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xBD + // 0xBD: LITHOGRAPH5 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3291,7 +3291,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xBE + // 0xBE: LITHOGRAPH6 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3307,7 +3307,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xBF + // 0xBF: COLLECT_MAP_64 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3323,7 +3323,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xC0 + // 0xC0: COLLECT_MAP_63 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3339,7 +3339,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xC1 + // 0xC1: COLLECT_MAP_62 /* mArcname */ item_arcname_tbl[0x53], /* mTexture */ item_texture_tbl[0x00], /* mBmdIdx */ 0x0005, @@ -3355,7 +3355,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x17C0 }, { - // 0xC2 + // 0xC2: COLLECT_MAP_61 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3371,7 +3371,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC3 + // 0xC3: COLLECT_MAP_60 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3387,7 +3387,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC4 + // 0xC4: COLLECT_MAP_59 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3403,7 +3403,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC5 + // 0xC5: COLLECT_MAP_58 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3419,7 +3419,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC6 + // 0xC6: COLLECT_MAP_57 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3435,7 +3435,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC7 + // 0xC7: COLLECT_MAP_56 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3451,7 +3451,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC8 + // 0xC8: COLLECT_MAP_55 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3467,7 +3467,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xC9 + // 0xC9: COLLECT_MAP_54 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3483,7 +3483,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xCA + // 0xCA: COLLECT_MAP_53 /* mArcname */ item_arcname_tbl[0x45], /* mTexture */ item_texture_tbl[0x72], /* mBmdIdx */ 0x0003, @@ -3499,7 +3499,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xCB + // 0xCB: COLLECT_MAP_52 /* mArcname */ item_arcname_tbl[0x0B], /* mTexture */ item_texture_tbl[0x6C], /* mBmdIdx */ 0x0003, @@ -3515,7 +3515,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xCC + // 0xCC: COLLECT_MAP_51 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3531,7 +3531,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xCD + // 0xCD: COLLECT_MAP_50 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3547,7 +3547,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xCE + // 0xCE: COLLECT_MAP_49 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3563,7 +3563,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xCF + // 0xCF: COLLECT_MAP_48 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3579,7 +3579,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD0 + // 0xD0: COLLECT_MAP_47 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3595,7 +3595,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD1 + // 0xD1: COLLECT_MAP_46 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3611,7 +3611,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD2 + // 0xD2: COLLECT_MAP_45 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3627,7 +3627,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD3 + // 0xD3: COLLECT_MAP_44 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3643,7 +3643,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD4 + // 0xD4: COLLECT_MAP_43 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3659,7 +3659,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD5 + // 0xD5: COLLECT_MAP_42 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3675,7 +3675,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD6 + // 0xD6: COLLECT_MAP_41 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3691,7 +3691,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD7 + // 0xD7: COLLECT_MAP_40 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3707,7 +3707,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD8 + // 0xD8: COLLECT_MAP_39 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3723,7 +3723,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xD9 + // 0xD9: COLLECT_MAP_38 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3739,7 +3739,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xDA + // 0xDA: COLLECT_MAP_37 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3755,7 +3755,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xDB + // 0xDB: COLLECT_MAP_36 /* mArcname */ item_arcname_tbl[0x68], /* mTexture */ item_texture_tbl[0x6B], /* mBmdIdx */ 0x0003, @@ -3771,7 +3771,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xDC + // 0xDC: COLLECT_MAP_35 /* mArcname */ item_arcname_tbl[0x0B], /* mTexture */ item_texture_tbl[0x6C], /* mBmdIdx */ 0x0003, @@ -3787,7 +3787,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xDD + // 0xDD: COLLECT_MAP_34 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3803,7 +3803,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xDE + // 0xDE: COLLECT_MAP_33 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3819,7 +3819,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xDF + // 0xDF: COLLECT_MAP_32 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3835,7 +3835,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE0 + // 0xE0: COLLECT_MAP_31 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3851,7 +3851,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE1 + // 0xE1: COLLECT_MAP_30 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3867,7 +3867,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE2 + // 0xE2: COLLECT_MAP_29 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3883,7 +3883,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE3 + // 0xE3: COLLECT_MAP_28 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3899,7 +3899,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE4 + // 0xE4: COLLECT_MAP_27 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3915,7 +3915,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE5 + // 0xE5: COLLECT_MAP_26 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3931,7 +3931,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE6 + // 0xE6: COLLECT_MAP_25 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3947,7 +3947,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE7 + // 0xE7: COLLECT_MAP_24 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3963,7 +3963,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE8 + // 0xE8: COLLECT_MAP_23 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3979,7 +3979,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xE9 + // 0xE9: COLLECT_MAP_22 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -3995,7 +3995,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xEA + // 0xEA: COLLECT_MAP_21 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -4011,7 +4011,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xEB + // 0xEB: COLLECT_MAP_20 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -4027,7 +4027,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xEC + // 0xEC: COLLECT_MAP_19 /* mArcname */ item_arcname_tbl[0x66], /* mTexture */ item_texture_tbl[0x6A], /* mBmdIdx */ 0x0003, @@ -4043,7 +4043,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xED + // 0xED: COLLECT_MAP_18 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4059,7 +4059,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xEE + // 0xEE: COLLECT_MAP_17 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4075,7 +4075,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xEF + // 0xEF: COLLECT_MAP_16 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4091,7 +4091,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF0 + // 0xF0: COLLECT_MAP_15 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4107,7 +4107,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF1 + // 0xF1: COLLECT_MAP_14 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4123,7 +4123,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF2 + // 0xF2: COLLECT_MAP_13 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4139,7 +4139,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF3 + // 0xF3: COLLECT_MAP_12 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4155,7 +4155,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF4 + // 0xF4: COLLECT_MAP_11 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4171,7 +4171,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF5 + // 0xF5: COLLECT_MAP_10 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4187,7 +4187,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF6 + // 0xF6: COLLECT_MAP_09 /* mArcname */ item_arcname_tbl[0x67], /* mTexture */ item_texture_tbl[0x69], /* mBmdIdx */ 0x0003, @@ -4203,7 +4203,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF7 + // 0xF7: COLLECT_MAP_08 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4219,7 +4219,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF8 + // 0xF8: COLLECT_MAP_07 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4235,7 +4235,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xF9 + // 0xF9: COLLECT_MAP_06 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4251,7 +4251,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xFA + // 0xFA: COLLECT_MAP_05 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4267,7 +4267,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xFB + // 0xFB: COLLECT_MAP_04 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4283,7 +4283,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xFC + // 0xFC: COLLECT_MAP_03 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4299,7 +4299,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xFD + // 0xFD: COLLECT_MAP_02 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4315,7 +4315,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xFE + // 0xFE: COLLECT_MAP_01 /* mArcname */ item_arcname_tbl[0x65], /* mTexture */ item_texture_tbl[0x68], /* mBmdIdx */ 0x0003, @@ -4331,7 +4331,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0xFF + // 0xFF: NO_ITEM /* mArcname */ NULL, /* mTexture */ NULL, /* mBmdIdx */ -1, @@ -4351,7 +4351,7 @@ dItem_data_item_resource dItem_data::item_resource[0x100] = { /* 803866B0-803882B0 .data field_item_res__10dItem_data */ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { { - // 0x00 + // 0x00: HEART /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x002A, /* mSrtIdx */ -1, @@ -4364,7 +4364,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0680 }, { - // 0x01 + // 0x01: GREEN_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4377,7 +4377,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x02 + // 0x02: BLUE_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4390,7 +4390,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x03 + // 0x03: YELLOW_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4403,7 +4403,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x04 + // 0x04: RED_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4416,7 +4416,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x05 + // 0x05: PURPLE_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4429,7 +4429,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x06 + // 0x06: ORANGE_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4442,7 +4442,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x07 + // 0x07: KAKERA_HEART /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0038, /* mSrtIdx */ 0x005B, @@ -4455,7 +4455,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0C40 }, { - // 0x08 + // 0x08: UTUWA_HEART /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0039, /* mSrtIdx */ 0x005C, @@ -4468,7 +4468,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0C60 }, { - // 0x09 + // 0x09: S_MAGIC /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0032, /* mSrtIdx */ -1, @@ -4481,7 +4481,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0700 }, { - // 0x0A + // 0x0A: L_MAGIC /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0033, /* mSrtIdx */ -1, @@ -4494,7 +4494,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0700 }, { - // 0x0B + // 0x0B: BOMB_5 /* mArc */ item_arcname_tbl[0x07], /* mBmdIdx */ 0x003C, /* mSrtIdx */ -1, @@ -4507,7 +4507,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CC0 }, { - // 0x0C + // 0x0C: BOMB_10 /* mArc */ item_arcname_tbl[0x07], /* mBmdIdx */ 0x003C, /* mSrtIdx */ -1, @@ -4520,7 +4520,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CC0 }, { - // 0x0D + // 0x0D: BOMB_20 /* mArc */ item_arcname_tbl[0x07], /* mBmdIdx */ 0x003C, /* mSrtIdx */ -1, @@ -4533,7 +4533,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CC0 }, { - // 0x0E + // 0x0E: BOMB_30 /* mArc */ item_arcname_tbl[0x07], /* mBmdIdx */ 0x003C, /* mSrtIdx */ -1, @@ -4546,7 +4546,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CC0 }, { - // 0x0F + // 0x0F: SILVER_RUPEE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x003A, /* mSrtIdx */ 0x005D, @@ -4559,7 +4559,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0CA0 }, { - // 0x10 + // 0x10: ARROW_10 /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x001E, /* mSrtIdx */ -1, @@ -4572,7 +4572,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0700 }, { - // 0x11 + // 0x11: ARROW_20 /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x001E, /* mSrtIdx */ -1, @@ -4585,7 +4585,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0B40 }, { - // 0x12 + // 0x12: ARROW_30 /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x001E, /* mSrtIdx */ -1, @@ -4598,7 +4598,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x13 + // 0x13: noentry19 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4611,7 +4611,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x14 + // 0x14: noentry20 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4624,7 +4624,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x15 + // 0x15: SMALL_KEY /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x002B, /* mSrtIdx */ -1, @@ -4637,7 +4637,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0780 }, { - // 0x16 + // 0x16: RECOVER_FAIRY /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x001F, /* mSrtIdx */ -1, @@ -4650,7 +4650,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x4000 }, { - // 0x17 + // 0x17: noentry23 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4663,7 +4663,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x18 + // 0x18: noentry24 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4676,7 +4676,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x19 + // 0x19: noentry25 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4689,7 +4689,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1A + // 0x1A: SUB_DUN_RUPEE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4702,7 +4702,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1B + // 0x1B: noentry27 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4715,7 +4715,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1C + // 0x1C: noentry28 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4728,7 +4728,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1D + // 0x1D: noentry29 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4741,7 +4741,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x1E + // 0x1E: TRIPLE_HEART /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x002A, /* mSrtIdx */ -1, @@ -4754,7 +4754,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0B80 }, { - // 0x1F + // 0x1F: PENDANT /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0029, /* mSrtIdx */ -1, @@ -4767,7 +4767,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0FE0 }, { - // 0x20 + // 0x20: TELESCOPE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4780,7 +4780,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x21 + // 0x21: TNCL_WHITSL /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4793,7 +4793,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x22 + // 0x22: WIND_TACT /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4806,7 +4806,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x23 + // 0x23: CAMERA /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4819,7 +4819,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x24 + // 0x24: EMONO_BAG /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4832,7 +4832,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x25 + // 0x25: ROPE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4845,7 +4845,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x26 + // 0x26: CAMERA2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4858,7 +4858,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x27 + // 0x27: BOW /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4871,7 +4871,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x28 + // 0x28: PWR_GROOVE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4884,7 +4884,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x29 + // 0x29: HVY_BOOTS /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4897,7 +4897,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x2A + // 0x2A: DRGN_SHIELD /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4910,7 +4910,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x2B + // 0x2B: WATER_BOOTS /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4923,7 +4923,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x2C + // 0x2C: ESA_BAG /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4936,7 +4936,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x2D + // 0x2D: BOOMERANG /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4949,7 +4949,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x2E + // 0x2E: BARE_HAND /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4962,7 +4962,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x2F + // 0x2F: HOOKSHOT /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4975,7 +4975,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x30 + // 0x30: WARASHIBE_BAG /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -4988,7 +4988,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x31 + // 0x31: BOMB_BAG /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5001,7 +5001,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x32 + // 0x32: FUKU /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5014,7 +5014,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x33 + // 0x33: HUMMER /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5027,7 +5027,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x34 + // 0x34: DEKU_LEAF /* mArc */ item_arcname_tbl[0x1B], /* mBmdIdx */ 0x0003, /* mSrtIdx */ -1, @@ -5040,7 +5040,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x35 + // 0x35: MAGIC_ARROW /* mArc */ item_arcname_tbl[0x07], /* mBmdIdx */ 0x0037, /* mSrtIdx */ -1, @@ -5053,7 +5053,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x36 + // 0x36: LIGHT_ARROW /* mArc */ item_arcname_tbl[0x07], /* mBmdIdx */ 0x0037, /* mSrtIdx */ -1, @@ -5066,7 +5066,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x5500 }, { - // 0x37 + // 0x37: noentry55 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5079,7 +5079,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x38 + // 0x38: SWORD /* mArc */ item_arcname_tbl[0x3F], /* mBmdIdx */ 0x0003, /* mSrtIdx */ -1, @@ -5092,7 +5092,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x39 + // 0x39: MASTER_SWORD /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5105,7 +5105,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x3A + // 0x3A: LV3_SWORD /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5118,7 +5118,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x3B + // 0x3B: SHIELD /* mArc */ item_arcname_tbl[0x41], /* mBmdIdx */ 0x0003, /* mSrtIdx */ -1, @@ -5131,7 +5131,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x5000 }, { - // 0x3C + // 0x3C: MIRROR_SHIELD /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5144,7 +5144,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x3D + // 0x3D: DROPPED_SWORD /* mArc */ item_arcname_tbl[0x3F], /* mBmdIdx */ 0x0003, /* mSrtIdx */ -1, @@ -5157,7 +5157,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x3000 }, { - // 0x3E + // 0x3E: MASTER_SWORD_EX /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5170,7 +5170,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x3F + // 0x3F: KAKERA_HEART2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5183,7 +5183,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x40 + // 0x40: noentry64 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5196,7 +5196,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x41 + // 0x41: noentry65 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5209,7 +5209,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x42 + // 0x42: PIRATES_OMAMORI /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5222,7 +5222,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x43 + // 0x43: HEROS_OMAMORI /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5235,7 +5235,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x44 + // 0x44: GRASS_BALL /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5248,7 +5248,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x45 + // 0x45: SKULL_NECKLACE /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0027, /* mSrtIdx */ -1, @@ -5261,7 +5261,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x08A0 }, { - // 0x46 + // 0x46: BOKOBABA_SEED /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0026, /* mSrtIdx */ -1, @@ -5274,7 +5274,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0720 }, { - // 0x47 + // 0x47: GOLDEN_FEATHER /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0037, /* mSrtIdx */ 0x005A, @@ -5287,7 +5287,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0EC0 }, { - // 0x48 + // 0x48: BOKO_BELT /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0025, /* mSrtIdx */ 0x0059, @@ -5300,7 +5300,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0760 }, { - // 0x49 + // 0x49: RED_JELLY /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0036, /* mSrtIdx */ -1, @@ -5313,7 +5313,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0800 }, { - // 0x4A + // 0x4A: GREEN_JELLY /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0036, /* mSrtIdx */ -1, @@ -5326,7 +5326,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0800 }, { - // 0x4B + // 0x4B: BLUE_JELLY /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0036, /* mSrtIdx */ -1, @@ -5339,7 +5339,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0800 }, { - // 0x4C + // 0x4C: MAP /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5352,7 +5352,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x4D + // 0x4D: COMPASS /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5365,7 +5365,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x4E + // 0x4E: BOSS_KEY /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5378,7 +5378,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x4F + // 0x4F: EMPTY_BSHIP /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5391,7 +5391,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x50 + // 0x50: EMPTY_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5404,7 +5404,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x51 + // 0x51: RED_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5417,7 +5417,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x52 + // 0x52: GREEN_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5430,7 +5430,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x53 + // 0x53: BLUE_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5443,7 +5443,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x54 + // 0x54: BOTTLESHIP /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5456,7 +5456,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x55 + // 0x55: SOUP_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5469,7 +5469,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x56 + // 0x56: BIN_IN_WATER /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5482,7 +5482,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x57 + // 0x57: FAIRY_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5495,7 +5495,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x58 + // 0x58: FIREFLY_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5508,7 +5508,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x59 + // 0x59: FWATER_BOTTLE /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5521,7 +5521,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5A + // 0x5A: UNK_BOTTLE_5A /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5534,7 +5534,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5B + // 0x5B: UNK_BOTTLE_5B /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5547,7 +5547,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5C + // 0x5C: UNK_BOTTLE_5C /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5560,7 +5560,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5D + // 0x5D: UNK_BOTTLE_5D /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5573,7 +5573,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5E + // 0x5E: UNK_BOTTLE_5E /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5586,7 +5586,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x5F + // 0x5F: UNK_BOTTLE_5F /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5599,7 +5599,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x60 + // 0x60: UNK_BOTTLE_60 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5612,7 +5612,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x61 + // 0x61: TRIFORCE1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5625,7 +5625,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x62 + // 0x62: TRIFORCE2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5638,7 +5638,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x63 + // 0x63: TRIFORCE3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5651,7 +5651,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x64 + // 0x64: TRIFORCE4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5664,7 +5664,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x65 + // 0x65: TRIFORCE5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5677,7 +5677,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x66 + // 0x66: TRIFORCE6 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5690,7 +5690,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x67 + // 0x67: TRIFORCE7 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5703,7 +5703,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x68 + // 0x68: TRIFORCE8 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5716,7 +5716,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x69 + // 0x69: PEARL1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5729,7 +5729,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x6A + // 0x6A: PEARL2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5742,7 +5742,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x6B + // 0x6B: PEARL3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5755,7 +5755,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x6C + // 0x6C: KNOWLEDGE_TF /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5768,7 +5768,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x6D + // 0x6D: TACT_SONG1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5781,7 +5781,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x6E + // 0x6E: TACT_SONG2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5794,7 +5794,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x6F + // 0x6F: TACT_SONG3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5807,7 +5807,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x70 + // 0x70: TACT_SONG4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5820,7 +5820,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x71 + // 0x71: TACT_SONG5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5833,7 +5833,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x72 + // 0x72: TACT_SONG6 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5846,7 +5846,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x73 + // 0x73: noentry115 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5859,7 +5859,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x74 + // 0x74: noentry116 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5872,7 +5872,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x75 + // 0x75: noentry117 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5885,7 +5885,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x76 + // 0x76: noentry118 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5898,7 +5898,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x77 + // 0x77: noentry119 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5911,7 +5911,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x78 + // 0x78: NORMAL_SAIL /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5924,7 +5924,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x79 + // 0x79: TRIFORCE_MAP1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5937,7 +5937,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x7A + // 0x7A: TRIFORCE_MAP2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5950,7 +5950,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x7B + // 0x7B: TRIFORCE_MAP3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5963,7 +5963,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x7C + // 0x7C: TRIFORCE_MAP4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5976,7 +5976,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x7D + // 0x7D: TRIFORCE_MAP5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -5989,7 +5989,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x7E + // 0x7E: TRIFORCE_MAP6 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6002,7 +6002,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x7F + // 0x7F: TRIFORCE_MAP7 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6015,7 +6015,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x80 + // 0x80: TRIFORCE_MAP8 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6028,7 +6028,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x81 + // 0x81: noentry129 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6041,7 +6041,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x82 + // 0x82: BIRD_ESA_5 /* mArc */ item_arcname_tbl[0x00], /* mBmdIdx */ 0x0028, /* mSrtIdx */ -1, @@ -6054,7 +6054,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0740 }, { - // 0x83 + // 0x83: ANIMAL_ESA /* mArc */ item_arcname_tbl[0x1F], /* mBmdIdx */ 0x0003, /* mSrtIdx */ -1, @@ -6067,7 +6067,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0680 }, { - // 0x84 + // 0x84: ESA1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6080,7 +6080,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x85 + // 0x85: ESA2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6093,7 +6093,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x86 + // 0x86: ESA3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6106,7 +6106,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x87 + // 0x87: ESA4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6119,7 +6119,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x88 + // 0x88: ESA5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6132,7 +6132,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x89 + // 0x89: MAGIC_BEAN /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6145,7 +6145,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x8A + // 0x8A: BIRD_ESA_10 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6158,7 +6158,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x8B + // 0x8B: noentry139 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6171,7 +6171,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x8C + // 0x8C: FLOWER_1 /* mArc */ item_arcname_tbl[0x58], /* mBmdIdx */ 0x0012, /* mSrtIdx */ -1, @@ -6184,7 +6184,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x08E0 }, { - // 0x8D + // 0x8D: FLOWER_2 /* mArc */ item_arcname_tbl[0x59], /* mBmdIdx */ 0x0013, /* mSrtIdx */ -1, @@ -6197,7 +6197,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0860 }, { - // 0x8E + // 0x8E: FLOWER_3 /* mArc */ item_arcname_tbl[0x5B], /* mBmdIdx */ 0x0014, /* mSrtIdx */ -1, @@ -6210,7 +6210,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0880 }, { - // 0x8F + // 0x8F: HEROS_FLAG /* mArc */ item_arcname_tbl[0x5B], /* mBmdIdx */ 0x0015, /* mSrtIdx */ -1, @@ -6223,7 +6223,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1100 }, { - // 0x90 + // 0x90: TAIRYO_FLAG /* mArc */ item_arcname_tbl[0x5B], /* mBmdIdx */ 0x0016, /* mSrtIdx */ -1, @@ -6236,7 +6236,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1100 }, { - // 0x91 + // 0x91: SALES_FLAG /* mArc */ item_arcname_tbl[0x5B], /* mBmdIdx */ 0x0017, /* mSrtIdx */ -1, @@ -6249,7 +6249,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1200 }, { - // 0x92 + // 0x92: WIND_FLAG /* mArc */ item_arcname_tbl[0x5A], /* mBmdIdx */ 0x0018, /* mSrtIdx */ -1, @@ -6262,7 +6262,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0760 }, { - // 0x93 + // 0x93: RED_FLAG /* mArc */ item_arcname_tbl[0x5B], /* mBmdIdx */ 0x0019, /* mSrtIdx */ -1, @@ -6275,7 +6275,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1200 }, { - // 0x94 + // 0x94: FOSSIL_HEAD /* mArc */ item_arcname_tbl[0x5C], /* mBmdIdx */ 0x001A, /* mSrtIdx */ -1, @@ -6288,7 +6288,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x95 + // 0x95: WATER_STATUE /* mArc */ item_arcname_tbl[0x64], /* mBmdIdx */ 0x001B, /* mSrtIdx */ -1, @@ -6301,7 +6301,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x96 + // 0x96: POSTMAN_STATUE /* mArc */ item_arcname_tbl[0x5A], /* mBmdIdx */ 0x001C, /* mSrtIdx */ -1, @@ -6314,7 +6314,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x97 + // 0x97: PRESIDENT_STATUE /* mArc */ item_arcname_tbl[0x5A], /* mBmdIdx */ 0x001D, /* mSrtIdx */ -1, @@ -6327,7 +6327,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x1000 }, { - // 0x98 + // 0x98: LETTER00 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6340,7 +6340,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x99 + // 0x99: MAGIC_SEED /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6353,7 +6353,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x9A + // 0x9A: MAGYS_LETTER /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6366,7 +6366,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x9B + // 0x9B: MO_LETTER /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6379,7 +6379,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x9C + // 0x9C: COTTAGE_PAPER /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6392,7 +6392,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x9D + // 0x9D: KAISEN_PRESENT1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6405,7 +6405,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x9E + // 0x9E: KAISEN_PRESENT2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6418,7 +6418,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0x9F + // 0x9F: SALVAGE_ITEM1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6431,7 +6431,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA0 + // 0xA0: SALVAGE_ITEM2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6444,7 +6444,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA1 + // 0xA1: SALVAGE_ITEM3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6457,7 +6457,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA2 + // 0xA2: XXX_039 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6470,7 +6470,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA3 + // 0xA3: TINGLE_STATUE1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6483,7 +6483,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA4 + // 0xA4: TINGLE_STATUE2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6496,7 +6496,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA5 + // 0xA5: TINGLE_STATUE3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6509,7 +6509,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA6 + // 0xA6: TINGLE_STATUE4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6522,7 +6522,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA7 + // 0xA7: TINGLE_STATUE5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6535,7 +6535,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA8 + // 0xA8: TINGLE_STATUE6 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6548,7 +6548,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xA9 + // 0xA9: noentry169 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6561,7 +6561,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAA + // 0xAA: noentry170 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6574,7 +6574,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAB + // 0xAB: MAX_RUPEE_UP1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6587,7 +6587,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAC + // 0xAC: MAX_RUPEE_UP2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6600,7 +6600,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAD + // 0xAD: MAX_BOMB_UP1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6613,7 +6613,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAE + // 0xAE: MAX_BOMB_UP2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6626,7 +6626,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xAF + // 0xAF: MAX_ARROW_UP1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6639,7 +6639,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB0 + // 0xB0: MAX_ARROW_UP2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6652,7 +6652,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB1 + // 0xB1: MAGIC_POWER /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6665,7 +6665,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB2 + // 0xB2: MAX_MP_UP1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6678,7 +6678,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB3 + // 0xB3: TINCLE_RUPEE1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6691,7 +6691,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB4 + // 0xB4: TINCLE_RUPEE2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6704,7 +6704,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB5 + // 0xB5: TINCLE_RUPEE3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6717,7 +6717,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB6 + // 0xB6: TINCLE_RUPEE4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6730,7 +6730,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB7 + // 0xB7: TINCLE_RUPEE5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6743,7 +6743,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB8 + // 0xB8: TINCLE_RUPEE6 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6756,7 +6756,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xB9 + // 0xB9: LITHOGRAPH1 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6769,7 +6769,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xBA + // 0xBA: LITHOGRAPH2 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6782,7 +6782,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xBB + // 0xBB: LITHOGRAPH3 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6795,7 +6795,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xBC + // 0xBC: LITHOGRAPH4 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6808,7 +6808,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xBD + // 0xBD: LITHOGRAPH5 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6821,7 +6821,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xBE + // 0xBE: LITHOGRAPH6 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6834,7 +6834,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xBF + // 0xBF: COLLECT_MAP_64 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6847,7 +6847,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC0 + // 0xC0: COLLECT_MAP_63 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6860,7 +6860,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC1 + // 0xC1: COLLECT_MAP_62 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6873,7 +6873,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC2 + // 0xC2: COLLECT_MAP_61 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6886,7 +6886,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC3 + // 0xC3: COLLECT_MAP_60 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6899,7 +6899,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC4 + // 0xC4: COLLECT_MAP_59 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6912,7 +6912,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC5 + // 0xC5: COLLECT_MAP_58 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6925,7 +6925,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC6 + // 0xC6: COLLECT_MAP_57 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6938,7 +6938,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC7 + // 0xC7: COLLECT_MAP_56 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6951,7 +6951,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC8 + // 0xC8: COLLECT_MAP_55 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6964,7 +6964,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xC9 + // 0xC9: COLLECT_MAP_54 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6977,7 +6977,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xCA + // 0xCA: COLLECT_MAP_53 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -6990,7 +6990,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xCB + // 0xCB: COLLECT_MAP_52 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7003,7 +7003,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xCC + // 0xCC: COLLECT_MAP_51 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7016,7 +7016,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xCD + // 0xCD: COLLECT_MAP_50 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7029,7 +7029,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xCE + // 0xCE: COLLECT_MAP_49 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7042,7 +7042,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xCF + // 0xCF: COLLECT_MAP_48 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7055,7 +7055,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD0 + // 0xD0: COLLECT_MAP_47 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7068,7 +7068,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD1 + // 0xD1: COLLECT_MAP_46 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7081,7 +7081,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD2 + // 0xD2: COLLECT_MAP_45 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7094,7 +7094,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD3 + // 0xD3: COLLECT_MAP_44 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7107,7 +7107,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD4 + // 0xD4: COLLECT_MAP_43 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7120,7 +7120,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD5 + // 0xD5: COLLECT_MAP_42 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7133,7 +7133,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD6 + // 0xD6: COLLECT_MAP_41 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7146,7 +7146,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD7 + // 0xD7: COLLECT_MAP_40 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7159,7 +7159,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD8 + // 0xD8: COLLECT_MAP_39 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7172,7 +7172,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xD9 + // 0xD9: COLLECT_MAP_38 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7185,7 +7185,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xDA + // 0xDA: COLLECT_MAP_37 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7198,7 +7198,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xDB + // 0xDB: COLLECT_MAP_36 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7211,7 +7211,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xDC + // 0xDC: COLLECT_MAP_35 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7224,7 +7224,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xDD + // 0xDD: COLLECT_MAP_34 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7237,7 +7237,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xDE + // 0xDE: COLLECT_MAP_33 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7250,7 +7250,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xDF + // 0xDF: COLLECT_MAP_32 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7263,7 +7263,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE0 + // 0xE0: COLLECT_MAP_31 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7276,7 +7276,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE1 + // 0xE1: COLLECT_MAP_30 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7289,7 +7289,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE2 + // 0xE2: COLLECT_MAP_29 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7302,7 +7302,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE3 + // 0xE3: COLLECT_MAP_28 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7315,7 +7315,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE4 + // 0xE4: COLLECT_MAP_27 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7328,7 +7328,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE5 + // 0xE5: COLLECT_MAP_26 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7341,7 +7341,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE6 + // 0xE6: COLLECT_MAP_25 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7354,7 +7354,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE7 + // 0xE7: COLLECT_MAP_24 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7367,7 +7367,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE8 + // 0xE8: COLLECT_MAP_23 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7380,7 +7380,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xE9 + // 0xE9: COLLECT_MAP_22 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7393,7 +7393,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xEA + // 0xEA: COLLECT_MAP_21 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7406,7 +7406,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xEB + // 0xEB: COLLECT_MAP_20 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7419,7 +7419,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xEC + // 0xEC: COLLECT_MAP_19 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7432,7 +7432,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xED + // 0xED: COLLECT_MAP_18 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7445,7 +7445,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xEE + // 0xEE: COLLECT_MAP_17 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7458,7 +7458,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xEF + // 0xEF: COLLECT_MAP_16 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7471,7 +7471,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF0 + // 0xF0: COLLECT_MAP_15 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7484,7 +7484,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF1 + // 0xF1: COLLECT_MAP_14 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7497,7 +7497,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF2 + // 0xF2: COLLECT_MAP_13 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7510,7 +7510,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF3 + // 0xF3: COLLECT_MAP_12 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7523,7 +7523,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF4 + // 0xF4: COLLECT_MAP_11 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7536,7 +7536,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF5 + // 0xF5: COLLECT_MAP_10 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7549,7 +7549,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF6 + // 0xF6: COLLECT_MAP_09 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7562,7 +7562,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF7 + // 0xF7: COLLECT_MAP_08 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7575,7 +7575,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF8 + // 0xF8: COLLECT_MAP_07 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7588,7 +7588,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xF9 + // 0xF9: COLLECT_MAP_06 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7601,7 +7601,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xFA + // 0xFA: COLLECT_MAP_05 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7614,7 +7614,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xFB + // 0xFB: COLLECT_MAP_04 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7627,7 +7627,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xFC + // 0xFC: COLLECT_MAP_03 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7640,7 +7640,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xFD + // 0xFD: COLLECT_MAP_02 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7653,7 +7653,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xFE + // 0xFE: COLLECT_MAP_01 /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7666,7 +7666,7 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* mHeapSize */ 0x0000 }, { - // 0xFF + // 0xFF: NO_ITEM /* mArc */ NULL, /* mBmdIdx */ -1, /* mSrtIdx */ -1, @@ -7683,1792 +7683,1792 @@ dItem_data_field_item_res dItem_data::field_item_res[0x100] = { /* 803882B0-803886B0 .data item_info__10dItem_data */ dItem_data_item_info dItem_data::item_info[0x100] = { { - // 0x00 + // 0x00: HEART 0x0F, 0x28, 0x1E, 0x00, }, { - // 0x01 + // 0x01: GREEN_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x02 + // 0x02: BLUE_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x03 + // 0x03: YELLOW_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x04 + // 0x04: RED_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x05 + // 0x05: PURPLE_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x06 + // 0x06: ORANGE_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x07 + // 0x07: KAKERA_HEART 0x32, 0x50, 0x32, 0x01, }, { - // 0x08 + // 0x08: UTUWA_HEART 0x32, 0x50, 0x32, 0x01, }, { - // 0x09 + // 0x09: S_MAGIC 0x14, 0x28, 0x1E, 0x00, }, { - // 0x0A + // 0x0A: L_MAGIC 0x19, 0x50, 0x1E, 0x00, }, { - // 0x0B + // 0x0B: BOMB_5 0x28, 0x3C, 0x1E, 0x00, }, { - // 0x0C + // 0x0C: BOMB_10 0x28, 0x3C, 0x1E, 0x00, }, { - // 0x0D + // 0x0D: BOMB_20 0x28, 0x3C, 0x1E, 0x00, }, { - // 0x0E + // 0x0E: BOMB_30 0x28, 0x3C, 0x1E, 0x00, }, { - // 0x0F + // 0x0F: SILVER_RUPEE 0x19, 0x37, 0x23, 0x00, }, { - // 0x10 + // 0x10: ARROW_10 0x14, 0x50, 0x32, 0x00, }, { - // 0x11 + // 0x11: ARROW_20 0x14, 0x50, 0x32, 0x00, }, { - // 0x12 + // 0x12: ARROW_30 0x14, 0x50, 0x32, 0x00, }, { - // 0x13 + // 0x13: noentry19 0x00, 0x00, 0x00, 0x00, }, { - // 0x14 + // 0x14: noentry20 0x00, 0x00, 0x00, 0x00, }, { - // 0x15 + // 0x15: SMALL_KEY 0x14, 0x28, 0x1E, 0x05, }, { - // 0x16 + // 0x16: RECOVER_FAIRY 0x1E, 0x3C, 0x1E, 0x00, }, { - // 0x17 + // 0x17: noentry23 0x00, 0x00, 0x00, 0x00, }, { - // 0x18 + // 0x18: noentry24 0x00, 0x00, 0x00, 0x00, }, { - // 0x19 + // 0x19: noentry25 0x00, 0x00, 0x00, 0x00, }, { - // 0x1A + // 0x1A: SUB_DUN_RUPEE 0x00, 0x00, 0x00, 0x00, }, { - // 0x1B + // 0x1B: noentry27 0x00, 0x00, 0x00, 0x00, }, { - // 0x1C + // 0x1C: noentry28 0x00, 0x00, 0x00, 0x00, }, { - // 0x1D + // 0x1D: noentry29 0x00, 0x00, 0x00, 0x00, }, { - // 0x1E + // 0x1E: TRIPLE_HEART 0x0F, 0x28, 0x1E, 0x00, }, { - // 0x1F + // 0x1F: PENDANT 0x1E, 0x46, 0x23, 0x00, }, { - // 0x20 + // 0x20: TELESCOPE 0x28, 0x00, 0x00, 0x05, }, { - // 0x21 + // 0x21: TNCL_WHITSL 0x00, 0x00, 0x00, 0x00, }, { - // 0x22 + // 0x22: WIND_TACT 0x00, 0x00, 0x00, 0x00, }, { - // 0x23 + // 0x23: CAMERA 0x00, 0x00, 0x00, 0x00, }, { - // 0x24 + // 0x24: EMONO_BAG 0x00, 0x00, 0x00, 0x00, }, { - // 0x25 + // 0x25: ROPE 0x00, 0x00, 0x00, 0x00, }, { - // 0x26 + // 0x26: CAMERA2 0x00, 0x00, 0x00, 0x00, }, { - // 0x27 + // 0x27: BOW 0x00, 0x00, 0x00, 0x00, }, { - // 0x28 + // 0x28: PWR_GROOVE 0x00, 0x00, 0x00, 0x00, }, { - // 0x29 + // 0x29: HVY_BOOTS 0x00, 0x00, 0x00, 0x00, }, { - // 0x2A + // 0x2A: DRGN_SHIELD 0x00, 0x00, 0x00, 0x00, }, { - // 0x2B + // 0x2B: WATER_BOOTS 0x00, 0x00, 0x00, 0x00, }, { - // 0x2C + // 0x2C: ESA_BAG 0x00, 0x28, 0x28, 0x00, }, { - // 0x2D + // 0x2D: BOOMERANG 0x00, 0x00, 0x00, 0x00, }, { - // 0x2E + // 0x2E: BARE_HAND 0x00, 0x00, 0x00, 0x00, }, { - // 0x2F + // 0x2F: HOOKSHOT 0x00, 0x00, 0x00, 0x00, }, { - // 0x30 + // 0x30: WARASHIBE_BAG 0x00, 0x00, 0x00, 0x00, }, { - // 0x31 + // 0x31: BOMB_BAG 0x00, 0x00, 0x00, 0x00, }, { - // 0x32 + // 0x32: FUKU 0x00, 0x00, 0x00, 0x00, }, { - // 0x33 + // 0x33: HUMMER 0x00, 0x00, 0x00, 0x00, }, { - // 0x34 + // 0x34: DEKU_LEAF 0x00, 0x00, 0x00, 0x00, }, { - // 0x35 + // 0x35: MAGIC_ARROW 0x00, 0x00, 0x00, 0x00, }, { - // 0x36 + // 0x36: LIGHT_ARROW 0x00, 0x00, 0x00, 0x00, }, { - // 0x37 + // 0x37: noentry55 0x00, 0x00, 0x00, 0x00, }, { - // 0x38 + // 0x38: SWORD 0x1E, 0x32, 0x1E, 0x10, }, { - // 0x39 + // 0x39: MASTER_SWORD 0x00, 0x00, 0x00, 0x00, }, { - // 0x3A + // 0x3A: LV3_SWORD 0x00, 0x00, 0x00, 0x00, }, { - // 0x3B + // 0x3B: SHIELD 0x28, 0x3C, 0x28, 0x10, }, { - // 0x3C + // 0x3C: MIRROR_SHIELD 0x00, 0x00, 0x00, 0x00, }, { - // 0x3D + // 0x3D: DROPPED_SWORD 0x00, 0x32, 0x1E, 0x10, }, { - // 0x3E + // 0x3E: MASTER_SWORD_EX 0x00, 0x00, 0x00, 0x00, }, { - // 0x3F + // 0x3F: KAKERA_HEART2 0x00, 0x00, 0x00, 0x00, }, { - // 0x40 + // 0x40: noentry64 0x00, 0x00, 0x00, 0x00, }, { - // 0x41 + // 0x41: noentry65 0x00, 0x00, 0x00, 0x00, }, { - // 0x42 + // 0x42: PIRATES_OMAMORI 0x00, 0x00, 0x00, 0x00, }, { - // 0x43 + // 0x43: HEROS_OMAMORI 0x00, 0x00, 0x00, 0x00, }, { - // 0x44 + // 0x44: GRASS_BALL 0x00, 0x00, 0x00, 0x00, }, { - // 0x45 + // 0x45: SKULL_NECKLACE 0x28, 0x5A, 0x32, 0x00, }, { - // 0x46 + // 0x46: BOKOBABA_SEED 0x1E, 0x50, 0x28, 0x00, }, { - // 0x47 + // 0x47: GOLDEN_FEATHER 0x1E, 0x5A, 0x28, 0x00, }, { - // 0x48 + // 0x48: BOKO_BELT 0x32, 0x46, 0x28, 0x00, }, { - // 0x49 + // 0x49: RED_JELLY 0x19, 0x46, 0x28, 0x00, }, { - // 0x4A + // 0x4A: GREEN_JELLY 0x19, 0x46, 0x28, 0x00, }, { - // 0x4B + // 0x4B: BLUE_JELLY 0x19, 0x46, 0x28, 0x00, }, { - // 0x4C + // 0x4C: MAP 0x00, 0x00, 0x00, 0x00, }, { - // 0x4D + // 0x4D: COMPASS 0x00, 0x00, 0x00, 0x00, }, { - // 0x4E + // 0x4E: BOSS_KEY 0x00, 0x00, 0x00, 0x05, }, { - // 0x4F + // 0x4F: EMPTY_BSHIP 0x00, 0x28, 0x28, 0x00, }, { - // 0x50 + // 0x50: EMPTY_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x51 + // 0x51: RED_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x52 + // 0x52: GREEN_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x53 + // 0x53: BLUE_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x54 + // 0x54: BOTTLESHIP 0x00, 0x28, 0x28, 0x00, }, { - // 0x55 + // 0x55: SOUP_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x56 + // 0x56: BIN_IN_WATER 0x00, 0x28, 0x28, 0x00, }, { - // 0x57 + // 0x57: FAIRY_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x58 + // 0x58: FIREFLY_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x59 + // 0x59: FWATER_BOTTLE 0x00, 0x28, 0x28, 0x00, }, { - // 0x5A + // 0x5A: UNK_BOTTLE_5A 0x00, 0x28, 0x28, 0x00, }, { - // 0x5B + // 0x5B: UNK_BOTTLE_5B 0x00, 0x28, 0x28, 0x00, }, { - // 0x5C + // 0x5C: UNK_BOTTLE_5C 0x00, 0x28, 0x28, 0x00, }, { - // 0x5D + // 0x5D: UNK_BOTTLE_5D 0x00, 0x28, 0x28, 0x00, }, { - // 0x5E + // 0x5E: UNK_BOTTLE_5E 0x00, 0x28, 0x28, 0x00, }, { - // 0x5F + // 0x5F: UNK_BOTTLE_5F 0x00, 0x28, 0x28, 0x00, }, { - // 0x60 + // 0x60: UNK_BOTTLE_60 0x00, 0x28, 0x28, 0x00, }, { - // 0x61 + // 0x61: TRIFORCE1 0x00, 0x00, 0x00, 0x00, }, { - // 0x62 + // 0x62: TRIFORCE2 0x00, 0x00, 0x00, 0x00, }, { - // 0x63 + // 0x63: TRIFORCE3 0x00, 0x00, 0x00, 0x00, }, { - // 0x64 + // 0x64: TRIFORCE4 0x00, 0x00, 0x00, 0x00, }, { - // 0x65 + // 0x65: TRIFORCE5 0x00, 0x00, 0x00, 0x00, }, { - // 0x66 + // 0x66: TRIFORCE6 0x00, 0x00, 0x00, 0x00, }, { - // 0x67 + // 0x67: TRIFORCE7 0x00, 0x00, 0x00, 0x00, }, { - // 0x68 + // 0x68: TRIFORCE8 0x00, 0x00, 0x00, 0x00, }, { - // 0x69 + // 0x69: PEARL1 0x00, 0x00, 0x00, 0x00, }, { - // 0x6A + // 0x6A: PEARL2 0x00, 0x00, 0x00, 0x00, }, { - // 0x6B + // 0x6B: PEARL3 0x00, 0x00, 0x00, 0x00, }, { - // 0x6C + // 0x6C: KNOWLEDGE_TF 0x00, 0x00, 0x00, 0x00, }, { - // 0x6D + // 0x6D: TACT_SONG1 0x00, 0x00, 0x00, 0x00, }, { - // 0x6E + // 0x6E: TACT_SONG2 0x00, 0x00, 0x00, 0x00, }, { - // 0x6F + // 0x6F: TACT_SONG3 0x00, 0x00, 0x00, 0x00, }, { - // 0x70 + // 0x70: TACT_SONG4 0x00, 0x00, 0x00, 0x00, }, { - // 0x71 + // 0x71: TACT_SONG5 0x00, 0x00, 0x00, 0x00, }, { - // 0x72 + // 0x72: TACT_SONG6 0x00, 0x00, 0x00, 0x00, }, { - // 0x73 + // 0x73: noentry115 0x00, 0x00, 0x00, 0x00, }, { - // 0x74 + // 0x74: noentry116 0x00, 0x00, 0x00, 0x00, }, { - // 0x75 + // 0x75: noentry117 0x00, 0x00, 0x00, 0x00, }, { - // 0x76 + // 0x76: noentry118 0x00, 0x00, 0x00, 0x00, }, { - // 0x77 + // 0x77: noentry119 0x00, 0x00, 0x00, 0x00, }, { - // 0x78 + // 0x78: NORMAL_SAIL 0x00, 0x28, 0x28, 0x00, }, { - // 0x79 + // 0x79: TRIFORCE_MAP1 0x00, 0x28, 0x28, 0x00, }, { - // 0x7A + // 0x7A: TRIFORCE_MAP2 0x00, 0x28, 0x28, 0x00, }, { - // 0x7B + // 0x7B: TRIFORCE_MAP3 0x00, 0x28, 0x28, 0x00, }, { - // 0x7C + // 0x7C: TRIFORCE_MAP4 0x00, 0x28, 0x28, 0x00, }, { - // 0x7D + // 0x7D: TRIFORCE_MAP5 0x00, 0x28, 0x28, 0x00, }, { - // 0x7E + // 0x7E: TRIFORCE_MAP6 0x00, 0x28, 0x28, 0x00, }, { - // 0x7F + // 0x7F: TRIFORCE_MAP7 0x00, 0x28, 0x28, 0x00, }, { - // 0x80 + // 0x80: TRIFORCE_MAP8 0x00, 0x00, 0x00, 0x00, }, { - // 0x81 + // 0x81: noentry129 0x00, 0x00, 0x00, 0x00, }, { - // 0x82 + // 0x82: BIRD_ESA_5 0x19, 0x37, 0x23, 0x00, }, { - // 0x83 + // 0x83: ANIMAL_ESA 0x19, 0x28, 0x28, 0x00, }, { - // 0x84 + // 0x84: ESA1 0x00, 0x28, 0x28, 0x00, }, { - // 0x85 + // 0x85: ESA2 0x00, 0x28, 0x28, 0x00, }, { - // 0x86 + // 0x86: ESA3 0x00, 0x28, 0x28, 0x00, }, { - // 0x87 + // 0x87: ESA4 0x00, 0x28, 0x28, 0x00, }, { - // 0x88 + // 0x88: ESA5 0x00, 0x28, 0x28, 0x00, }, { - // 0x89 + // 0x89: MAGIC_BEAN 0x00, 0x28, 0x28, 0x00, }, { - // 0x8A + // 0x8A: BIRD_ESA_10 0x19, 0x28, 0x28, 0x00, }, { - // 0x8B + // 0x8B: noentry139 0x00, 0x00, 0x00, 0x00, }, { - // 0x8C + // 0x8C: FLOWER_1 0x00, 0x28, 0x28, 0x00, }, { - // 0x8D + // 0x8D: FLOWER_2 0x00, 0x28, 0x28, 0x00, }, { - // 0x8E + // 0x8E: FLOWER_3 0x00, 0x28, 0x28, 0x00, }, { - // 0x8F + // 0x8F: HEROS_FLAG 0x00, 0x28, 0x28, 0x00, }, { - // 0x90 + // 0x90: TAIRYO_FLAG 0x00, 0x28, 0x28, 0x00, }, { - // 0x91 + // 0x91: SALES_FLAG 0x00, 0x28, 0x28, 0x00, }, { - // 0x92 + // 0x92: WIND_FLAG 0x00, 0x28, 0x28, 0x00, }, { - // 0x93 + // 0x93: RED_FLAG 0x00, 0x28, 0x28, 0x00, }, { - // 0x94 + // 0x94: FOSSIL_HEAD 0x00, 0x28, 0x28, 0x00, }, { - // 0x95 + // 0x95: WATER_STATUE 0x00, 0x28, 0x28, 0x00, }, { - // 0x96 + // 0x96: POSTMAN_STATUE 0x00, 0x28, 0x28, 0x00, }, { - // 0x97 + // 0x97: PRESIDENT_STATUE 0x00, 0x28, 0x28, 0x00, }, { - // 0x98 + // 0x98: LETTER00 0x00, 0x00, 0x00, 0x00, }, { - // 0x99 + // 0x99: MAGIC_SEED 0x00, 0x00, 0x00, 0x00, }, { - // 0x9A + // 0x9A: MAGYS_LETTER 0x00, 0x00, 0x00, 0x00, }, { - // 0x9B + // 0x9B: MO_LETTER 0x00, 0x00, 0x00, 0x00, }, { - // 0x9C + // 0x9C: COTTAGE_PAPER 0x00, 0x00, 0x00, 0x00, }, { - // 0x9D + // 0x9D: KAISEN_PRESENT1 0x00, 0x00, 0x00, 0x00, }, { - // 0x9E + // 0x9E: KAISEN_PRESENT2 0x00, 0x00, 0x00, 0x00, }, { - // 0x9F + // 0x9F: SALVAGE_ITEM1 0x00, 0x00, 0x00, 0x00, }, { - // 0xA0 + // 0xA0: SALVAGE_ITEM2 0x00, 0x00, 0x00, 0x00, }, { - // 0xA1 + // 0xA1: SALVAGE_ITEM3 0x00, 0x00, 0x00, 0x00, }, { - // 0xA2 + // 0xA2: XXX_039 0x00, 0x00, 0x00, 0x00, }, { - // 0xA3 + // 0xA3: TINGLE_STATUE1 0x00, 0x00, 0x00, 0x00, }, { - // 0xA4 + // 0xA4: TINGLE_STATUE2 0x00, 0x00, 0x00, 0x00, }, { - // 0xA5 + // 0xA5: TINGLE_STATUE3 0x00, 0x00, 0x00, 0x00, }, { - // 0xA6 + // 0xA6: TINGLE_STATUE4 0x00, 0x00, 0x00, 0x00, }, { - // 0xA7 + // 0xA7: TINGLE_STATUE5 0x00, 0x00, 0x00, 0x00, }, { - // 0xA8 + // 0xA8: TINGLE_STATUE6 0x00, 0x00, 0x00, 0x00, }, { - // 0xA9 + // 0xA9: noentry169 0x00, 0x00, 0x00, 0x00, }, { - // 0xAA + // 0xAA: noentry170 0x00, 0x00, 0x00, 0x00, }, { - // 0xAB + // 0xAB: MAX_RUPEE_UP1 0x00, 0x00, 0x00, 0x00, }, { - // 0xAC + // 0xAC: MAX_RUPEE_UP2 0x00, 0x00, 0x00, 0x00, }, { - // 0xAD + // 0xAD: MAX_BOMB_UP1 0x00, 0x00, 0x00, 0x00, }, { - // 0xAE + // 0xAE: MAX_BOMB_UP2 0x00, 0x00, 0x00, 0x00, }, { - // 0xAF + // 0xAF: MAX_ARROW_UP1 0x00, 0x00, 0x00, 0x00, }, { - // 0xB0 + // 0xB0: MAX_ARROW_UP2 0x00, 0x00, 0x00, 0x00, }, { - // 0xB1 + // 0xB1: MAGIC_POWER 0x00, 0x00, 0x00, 0x00, }, { - // 0xB2 + // 0xB2: MAX_MP_UP1 0x00, 0x00, 0x00, 0x00, }, { - // 0xB3 + // 0xB3: TINCLE_RUPEE1 0x00, 0x00, 0x00, 0x00, }, { - // 0xB4 + // 0xB4: TINCLE_RUPEE2 0x00, 0x00, 0x00, 0x00, }, { - // 0xB5 + // 0xB5: TINCLE_RUPEE3 0x00, 0x00, 0x00, 0x00, }, { - // 0xB6 + // 0xB6: TINCLE_RUPEE4 0x00, 0x00, 0x00, 0x00, }, { - // 0xB7 + // 0xB7: TINCLE_RUPEE5 0x00, 0x00, 0x00, 0x00, }, { - // 0xB8 + // 0xB8: TINCLE_RUPEE6 0x00, 0x00, 0x00, 0x00, }, { - // 0xB9 + // 0xB9: LITHOGRAPH1 0x00, 0x00, 0x00, 0x00, }, { - // 0xBA + // 0xBA: LITHOGRAPH2 0x00, 0x00, 0x00, 0x00, }, { - // 0xBB + // 0xBB: LITHOGRAPH3 0x00, 0x00, 0x00, 0x00, }, { - // 0xBC + // 0xBC: LITHOGRAPH4 0x00, 0x00, 0x00, 0x00, }, { - // 0xBD + // 0xBD: LITHOGRAPH5 0x00, 0x00, 0x00, 0x00, }, { - // 0xBE + // 0xBE: LITHOGRAPH6 0x00, 0x00, 0x00, 0x00, }, { - // 0xBF + // 0xBF: COLLECT_MAP_64 0x00, 0x00, 0x00, 0x00, }, { - // 0xC0 + // 0xC0: COLLECT_MAP_63 0x00, 0x00, 0x00, 0x00, }, { - // 0xC1 + // 0xC1: COLLECT_MAP_62 0x00, 0x00, 0x00, 0x00, }, { - // 0xC2 + // 0xC2: COLLECT_MAP_61 0x00, 0x00, 0x00, 0x00, }, { - // 0xC3 + // 0xC3: COLLECT_MAP_60 0x00, 0x00, 0x00, 0x00, }, { - // 0xC4 + // 0xC4: COLLECT_MAP_59 0x00, 0x00, 0x00, 0x00, }, { - // 0xC5 + // 0xC5: COLLECT_MAP_58 0x00, 0x00, 0x00, 0x00, }, { - // 0xC6 + // 0xC6: COLLECT_MAP_57 0x00, 0x00, 0x00, 0x00, }, { - // 0xC7 + // 0xC7: COLLECT_MAP_56 0x00, 0x00, 0x00, 0x00, }, { - // 0xC8 + // 0xC8: COLLECT_MAP_55 0x00, 0x00, 0x00, 0x00, }, { - // 0xC9 + // 0xC9: COLLECT_MAP_54 0x00, 0x00, 0x00, 0x00, }, { - // 0xCA + // 0xCA: COLLECT_MAP_53 0x00, 0x00, 0x00, 0x00, }, { - // 0xCB + // 0xCB: COLLECT_MAP_52 0x00, 0x00, 0x00, 0x00, }, { - // 0xCC + // 0xCC: COLLECT_MAP_51 0x00, 0x00, 0x00, 0x00, }, { - // 0xCD + // 0xCD: COLLECT_MAP_50 0x00, 0x00, 0x00, 0x00, }, { - // 0xCE + // 0xCE: COLLECT_MAP_49 0x00, 0x00, 0x00, 0x00, }, { - // 0xCF + // 0xCF: COLLECT_MAP_48 0x00, 0x00, 0x00, 0x00, }, { - // 0xD0 + // 0xD0: COLLECT_MAP_47 0x00, 0x00, 0x00, 0x00, }, { - // 0xD1 + // 0xD1: COLLECT_MAP_46 0x00, 0x00, 0x00, 0x00, }, { - // 0xD2 + // 0xD2: COLLECT_MAP_45 0x00, 0x00, 0x00, 0x00, }, { - // 0xD3 + // 0xD3: COLLECT_MAP_44 0x00, 0x00, 0x00, 0x00, }, { - // 0xD4 + // 0xD4: COLLECT_MAP_43 0x00, 0x00, 0x00, 0x00, }, { - // 0xD5 + // 0xD5: COLLECT_MAP_42 0x00, 0x00, 0x00, 0x00, }, { - // 0xD6 + // 0xD6: COLLECT_MAP_41 0x00, 0x00, 0x00, 0x00, }, { - // 0xD7 + // 0xD7: COLLECT_MAP_40 0x00, 0x00, 0x00, 0x00, }, { - // 0xD8 + // 0xD8: COLLECT_MAP_39 0x00, 0x00, 0x00, 0x00, }, { - // 0xD9 + // 0xD9: COLLECT_MAP_38 0x00, 0x00, 0x00, 0x00, }, { - // 0xDA + // 0xDA: COLLECT_MAP_37 0x00, 0x00, 0x00, 0x00, }, { - // 0xDB + // 0xDB: COLLECT_MAP_36 0x00, 0x00, 0x00, 0x00, }, { - // 0xDC + // 0xDC: COLLECT_MAP_35 0x00, 0x00, 0x00, 0x00, }, { - // 0xDD + // 0xDD: COLLECT_MAP_34 0x00, 0x00, 0x00, 0x00, }, { - // 0xDE + // 0xDE: COLLECT_MAP_33 0x00, 0x00, 0x00, 0x00, }, { - // 0xDF + // 0xDF: COLLECT_MAP_32 0x00, 0x00, 0x00, 0x00, }, { - // 0xE0 + // 0xE0: COLLECT_MAP_31 0x00, 0x00, 0x00, 0x00, }, { - // 0xE1 + // 0xE1: COLLECT_MAP_30 0x00, 0x00, 0x00, 0x00, }, { - // 0xE2 + // 0xE2: COLLECT_MAP_29 0x00, 0x00, 0x00, 0x00, }, { - // 0xE3 + // 0xE3: COLLECT_MAP_28 0x00, 0x00, 0x00, 0x00, }, { - // 0xE4 + // 0xE4: COLLECT_MAP_27 0x00, 0x00, 0x00, 0x00, }, { - // 0xE5 + // 0xE5: COLLECT_MAP_26 0x00, 0x00, 0x00, 0x00, }, { - // 0xE6 + // 0xE6: COLLECT_MAP_25 0x00, 0x00, 0x00, 0x00, }, { - // 0xE7 + // 0xE7: COLLECT_MAP_24 0x00, 0x00, 0x00, 0x00, }, { - // 0xE8 + // 0xE8: COLLECT_MAP_23 0x00, 0x00, 0x00, 0x00, }, { - // 0xE9 + // 0xE9: COLLECT_MAP_22 0x00, 0x00, 0x00, 0x00, }, { - // 0xEA + // 0xEA: COLLECT_MAP_21 0x00, 0x00, 0x00, 0x00, }, { - // 0xEB + // 0xEB: COLLECT_MAP_20 0x00, 0x00, 0x00, 0x00, }, { - // 0xEC + // 0xEC: COLLECT_MAP_19 0x00, 0x00, 0x00, 0x00, }, { - // 0xED + // 0xED: COLLECT_MAP_18 0x00, 0x00, 0x00, 0x00, }, { - // 0xEE + // 0xEE: COLLECT_MAP_17 0x00, 0x00, 0x00, 0x00, }, { - // 0xEF + // 0xEF: COLLECT_MAP_16 0x00, 0x00, 0x00, 0x00, }, { - // 0xF0 + // 0xF0: COLLECT_MAP_15 0x00, 0x00, 0x00, 0x00, }, { - // 0xF1 + // 0xF1: COLLECT_MAP_14 0x00, 0x00, 0x00, 0x00, }, { - // 0xF2 + // 0xF2: COLLECT_MAP_13 0x00, 0x00, 0x00, 0x00, }, { - // 0xF3 + // 0xF3: COLLECT_MAP_12 0x00, 0x00, 0x00, 0x00, }, { - // 0xF4 + // 0xF4: COLLECT_MAP_11 0x00, 0x00, 0x00, 0x00, }, { - // 0xF5 + // 0xF5: COLLECT_MAP_10 0x00, 0x00, 0x00, 0x00, }, { - // 0xF6 + // 0xF6: COLLECT_MAP_09 0x00, 0x00, 0x00, 0x00, }, { - // 0xF7 + // 0xF7: COLLECT_MAP_08 0x00, 0x00, 0x00, 0x00, }, { - // 0xF8 + // 0xF8: COLLECT_MAP_07 0x00, 0x00, 0x00, 0x00, }, { - // 0xF9 + // 0xF9: COLLECT_MAP_06 0x00, 0x00, 0x00, 0x00, }, { - // 0xFA + // 0xFA: COLLECT_MAP_05 0x00, 0x00, 0x00, 0x00, }, { - // 0xFB + // 0xFB: COLLECT_MAP_04 0x00, 0x00, 0x00, 0x00, }, { - // 0xFC + // 0xFC: COLLECT_MAP_03 0x00, 0x00, 0x00, 0x00, }, { - // 0xFD + // 0xFD: COLLECT_MAP_02 0x00, 0x00, 0x00, 0x00, }, { - // 0xFE + // 0xFE: COLLECT_MAP_01 0x00, 0x00, 0x00, 0x00, }, { - // 0xFF + // 0xFF: NO_ITEM 0x00, 0x00, 0x00, @@ -9479,647 +9479,647 @@ dItem_data_item_info dItem_data::item_info[0x100] = { /* 803886B0-803888B4 .data effect_info__10dItem_data */ dItem_data_effect_info dItem_data::effect_info[0x81] = { { - // 0x00 + // 0x00: HEART 0x0002, dPa_name::ID_SCENE_END, }, { - // 0x01 + // 0x01: GREEN_RUPEE 0x0003, dPa_name::ID_SCENE_END, }, { - // 0x02 + // 0x02: BLUE_RUPEE 0x0003, dPa_name::ID_SCENE_END, }, { - // 0x03 + // 0x03: YELLOW_RUPEE 0x0003, dPa_name::ID_SCENE_END, }, { - // 0x04 + // 0x04: RED_RUPEE 0x0003, dPa_name::ID_SCENE_END, }, { - // 0x05 + // 0x05: PURPLE_RUPEE 0x0003, dPa_name::ID_SCENE_END, }, { - // 0x06 + // 0x06: ORANGE_RUPEE 0x0002, dPa_name::ID_SCENE_END, }, { - // 0x07 + // 0x07: KAKERA_HEART dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x08 + // 0x08: UTUWA_HEART dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x09 + // 0x09: S_MAGIC dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x0A + // 0x0A: L_MAGIC dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x0B + // 0x0B: BOMB_5 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x0C + // 0x0C: BOMB_10 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x0D + // 0x0D: BOMB_20 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x0E + // 0x0E: BOMB_30 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x0F + // 0x0F: SILVER_RUPEE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x10 + // 0x10: ARROW_10 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x11 + // 0x11: ARROW_20 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x12 + // 0x12: ARROW_30 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x13 + // 0x13: noentry19 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x14 + // 0x14: noentry20 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x15 + // 0x15: SMALL_KEY 0x0003, dPa_name::ID_SCENE_END, }, { - // 0x16 + // 0x16: RECOVER_FAIRY dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x17 + // 0x17: noentry23 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x18 + // 0x18: noentry24 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x19 + // 0x19: noentry25 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x1A + // 0x1A: SUB_DUN_RUPEE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x1B + // 0x1B: noentry27 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x1C + // 0x1C: noentry28 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x1D + // 0x1D: noentry29 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x1E + // 0x1E: TRIPLE_HEART dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x1F + // 0x1F: PENDANT dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x20 + // 0x20: TELESCOPE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x21 + // 0x21: TNCL_WHITSL dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x22 + // 0x22: WIND_TACT dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x23 + // 0x23: CAMERA dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x24 + // 0x24: EMONO_BAG dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x25 + // 0x25: ROPE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x26 + // 0x26: CAMERA2 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x27 + // 0x27: BOW dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x28 + // 0x28: PWR_GROOVE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x29 + // 0x29: HVY_BOOTS dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x2A + // 0x2A: DRGN_SHIELD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x2B + // 0x2B: WATER_BOOTS dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x2C + // 0x2C: ESA_BAG dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x2D + // 0x2D: BOOMERANG dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x2E + // 0x2E: BARE_HAND dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x2F + // 0x2F: HOOKSHOT dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x30 + // 0x30: WARASHIBE_BAG dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x31 + // 0x31: BOMB_BAG dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x32 + // 0x32: FUKU dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x33 + // 0x33: HUMMER dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x34 + // 0x34: DEKU_LEAF dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x35 + // 0x35: MAGIC_ARROW dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x36 + // 0x36: LIGHT_ARROW dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x37 + // 0x37: noentry55 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x38 + // 0x38: SWORD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x39 + // 0x39: MASTER_SWORD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x3A + // 0x3A: LV3_SWORD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x3B + // 0x3B: SHIELD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x3C + // 0x3C: MIRROR_SHIELD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x3D + // 0x3D: DROPPED_SWORD dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x3E + // 0x3E: MASTER_SWORD_EX dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x3F + // 0x3F: KAKERA_HEART2 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x40 + // 0x40: noentry64 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x41 + // 0x41: noentry65 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x42 + // 0x42: PIRATES_OMAMORI dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x43 + // 0x43: HEROS_OMAMORI dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x44 + // 0x44: GRASS_BALL dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x45 + // 0x45: SKULL_NECKLACE dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x46 + // 0x46: BOKOBABA_SEED dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x47 + // 0x47: GOLDEN_FEATHER dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x48 + // 0x48: BOKO_BELT dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x49 + // 0x49: RED_JELLY dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x4A + // 0x4A: GREEN_JELLY dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x4B + // 0x4B: BLUE_JELLY dPa_name::ID_SCENE_END, 0x0293, }, { - // 0x4C + // 0x4C: MAP dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x4D + // 0x4D: COMPASS dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x4E + // 0x4E: BOSS_KEY dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x4F + // 0x4F: EMPTY_BSHIP dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x50 + // 0x50: EMPTY_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x51 + // 0x51: RED_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x52 + // 0x52: GREEN_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x53 + // 0x53: BLUE_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x54 + // 0x54: BOTTLESHIP dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x55 + // 0x55: SOUP_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x56 + // 0x56: BIN_IN_WATER dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x57 + // 0x57: FAIRY_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x58 + // 0x58: FIREFLY_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x59 + // 0x59: FWATER_BOTTLE dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x5A + // 0x5A: UNK_BOTTLE_5A dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x5B + // 0x5B: UNK_BOTTLE_5B dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x5C + // 0x5C: UNK_BOTTLE_5C dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x5D + // 0x5D: UNK_BOTTLE_5D dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x5E + // 0x5E: UNK_BOTTLE_5E dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x5F + // 0x5F: UNK_BOTTLE_5F dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x60 + // 0x60: UNK_BOTTLE_60 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x61 + // 0x61: TRIFORCE1 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x62 + // 0x62: TRIFORCE2 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x63 + // 0x63: TRIFORCE3 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x64 + // 0x64: TRIFORCE4 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x65 + // 0x65: TRIFORCE5 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x66 + // 0x66: TRIFORCE6 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x67 + // 0x67: TRIFORCE7 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x68 + // 0x68: TRIFORCE8 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x69 + // 0x69: PEARL1 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x6A + // 0x6A: PEARL2 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x6B + // 0x6B: PEARL3 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x6C + // 0x6C: KNOWLEDGE_TF dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x6D + // 0x6D: TACT_SONG1 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x6E + // 0x6E: TACT_SONG2 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x6F + // 0x6F: TACT_SONG3 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x70 + // 0x70: TACT_SONG4 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x71 + // 0x71: TACT_SONG5 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x72 + // 0x72: TACT_SONG6 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x73 + // 0x73: noentry115 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x74 + // 0x74: noentry116 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x75 + // 0x75: noentry117 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x76 + // 0x76: noentry118 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x77 + // 0x77: noentry119 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x78 + // 0x78: NORMAL_SAIL dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x79 + // 0x79: TRIFORCE_MAP1 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x7A + // 0x7A: TRIFORCE_MAP2 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x7B + // 0x7B: TRIFORCE_MAP3 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x7C + // 0x7C: TRIFORCE_MAP4 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x7D + // 0x7D: TRIFORCE_MAP5 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x7E + // 0x7E: TRIFORCE_MAP6 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x7F + // 0x7F: TRIFORCE_MAP7 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, { - // 0x80 + // 0x80: TRIFORCE_MAP8 dPa_name::ID_SCENE_END, dPa_name::ID_SCENE_END, }, From 96c226599c34a83304b2e850d77d979636e582b0 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 21 Sep 2023 23:25:13 -0700 Subject: [PATCH 38/89] J3DSys yea --- configure.py | 2 +- include/JSystem/J3DGraphBase/J3DSys.h | 5 +- src/JSystem/J3DGraphBase/J3DSys.cpp | 375 ++++++++++++++++++++++++-- 3 files changed, 357 insertions(+), 25 deletions(-) diff --git a/configure.py b/configure.py index 98dd063d0..506e4bf39 100644 --- a/configure.py +++ b/configure.py @@ -848,7 +848,7 @@ config.libs = [ "J3DGraphBase", [ Object(NonMatching, "JSystem/J3DGraphBase/J3DGD.cpp"), - Object(NonMatching, "JSystem/J3DGraphBase/J3DSys.cpp"), + Object(Matching, "JSystem/J3DGraphBase/J3DSys.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DVertex.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DTransform.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DPacket.cpp"), diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 35fc1ca7c..471bd69a4 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -44,13 +44,16 @@ struct J3DSys { /* 0x05C */ u8 field_0x5c[0x04]; /* 0x060 */ u32 mTexCacheRegionNum; /* 0x064 */ GXTexRegion mTexCacheRegion[8]; - /* 0x0E4 */ u8 field_0xe4[0x24]; + /* 0x0E4 */ u8 field_0xe4[0x20]; + /* 0x104 */ void* field_0x104; /* 0x108 */ Mtx* mModelDrawMtx; /* 0x10C */ Mtx33* mModelNrmMtx; /* 0x110 */ void* mVtxPos; /* 0x114 */ void* mVtxNrm; /* 0x118 */ _GXColor* mVtxCol; /* 0x11C */ Vec* mNBTScale; + /* 0x120 */ void* field_0x120; + /* 0x124 */ void* field_0x124; J3DSys(); void loadPosMtxIndx(int, u16) const; diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp index 586f1764c..81a58d229 100644 --- a/src/JSystem/J3DGraphBase/J3DSys.cpp +++ b/src/JSystem/J3DGraphBase/J3DSys.cpp @@ -4,84 +4,413 @@ // #include "JSystem/J3DGraphBase/J3DSys.h" -#include "dolphin/types.h" +#include "JSystem/J3DGraphBase/J3DGD.h" +#include "JSystem/J3DGraphBase/J3DTexture.h" +#include "JSystem/J3DGraphBase/J3DShape.h" +#include "dolphin/os/OS.h" + +extern void JRNLoadTexCached(GXTexMapID, u32, GXTexCacheSize, u32, GXTexCacheSize); +extern void makeTexCoordTable(); +extern void makeAlphaCmpTable(); +extern void makeZModeTable(); +extern void makeTevSwapTable(); + +extern "C" extern J3DDefaultTexCoordInfo const j3dDefaultTexCoordInfo[8]; +extern "C" extern const GXColor j3dDefaultColInfo; +extern "C" extern u8 j3dDefaultColorChanNum; +extern "C" extern const GXColorS10 j3dDefaultTevColor; +extern "C" extern const GXColor j3dDefaultTevKColor; /* 802D8AA8-802D8B8C .text __ct__6J3DSysFv */ J3DSys::J3DSys() { - /* Nonmatching */ + makeTexCoordTable(); + makeTevSwapTable(); + makeAlphaCmpTable(); + makeZModeTable(); + + mFlags = 0; + MTXIdentity(mViewMtx); + mDrawMode = 1; + mMaterialMode = 0; + mModel = NULL; + mShape = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mDrawBuffer); i++) + mDrawBuffer[i] = NULL; + mTexture = NULL; + mMatPacket = NULL; + mShapePacket = NULL; + mModelDrawMtx = NULL; + mModelNrmMtx = NULL; + mVtxPos = NULL; + mVtxNrm = NULL; + mVtxCol = NULL; + mNBTScale = NULL; + field_0x104 = NULL; + field_0x120 = NULL; + + for (u32 i = 0; i < 32; i += 4) { + sTexCoordScaleTable[i + 0] = 1; + sTexCoordScaleTable[i + 1] = 1; + sTexCoordScaleTable[i + 2] = 0; + sTexCoordScaleTable[i + 3] = 0; + } } /* 802D8B8C-802D8BB0 .text loadPosMtxIndx__6J3DSysCFiUs */ -void J3DSys::loadPosMtxIndx(int, unsigned short) const { - /* Nonmatching */ +void J3DSys::loadPosMtxIndx(int addr, u16 indx) const { + J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, indx, 0xB000 | ((u16)(addr * 0x0C))); } /* 802D8BB0-802D8BD8 .text loadNrmMtxIndx__6J3DSysCFiUs */ -void J3DSys::loadNrmMtxIndx(int, unsigned short) const { - /* Nonmatching */ +void J3DSys::loadNrmMtxIndx(int addr, u16 indx) const { + J3DFifoLoadIndx(GX_CMD_LOAD_INDX_B, indx, 0x8000 | ((u16)((addr * 0x09) + 0x400))); } /* 802D8BD8-802D8C58 .text J3DFifoLoadPosMtxImm__FPA4_fUl */ -void J3DFifoLoadPosMtxImm(float(*)[4], unsigned long) { - /* Nonmatching */ +void J3DFifoLoadPosMtxImm(Mtx mtx, unsigned long idx) { + J3DFifoWriteXFCmd(idx << 2, 12); + u32 * mtx_u32 = (u32*)mtx; + + GFX_FIFO(u32) = mtx_u32[0]; + GFX_FIFO(u32) = mtx_u32[1]; + GFX_FIFO(u32) = mtx_u32[2]; + GFX_FIFO(u32) = mtx_u32[3]; + + GFX_FIFO(u32) = mtx_u32[4]; + GFX_FIFO(u32) = mtx_u32[5]; + GFX_FIFO(u32) = mtx_u32[6]; + GFX_FIFO(u32) = mtx_u32[7]; + + GFX_FIFO(u32) = mtx_u32[8]; + GFX_FIFO(u32) = mtx_u32[9]; + GFX_FIFO(u32) = mtx_u32[10]; + GFX_FIFO(u32) = mtx_u32[11]; } /* 802D8C58-802D8CC4 .text J3DFifoLoadNrmMtxImm__FPA4_fUl */ -void J3DFifoLoadNrmMtxImm(float(*)[4], unsigned long) { - /* Nonmatching */ +void J3DFifoLoadNrmMtxImm(Mtx mtx, unsigned long idx) { + J3DFifoWriteXFCmd(0x400 + (idx * 3), 9); + u32 * mtx_u32 = (u32*)mtx; + + GFX_FIFO(u32) = mtx_u32[0]; + GFX_FIFO(u32) = mtx_u32[1]; + GFX_FIFO(u32) = mtx_u32[2]; + + GFX_FIFO(u32) = mtx_u32[4]; + GFX_FIFO(u32) = mtx_u32[5]; + GFX_FIFO(u32) = mtx_u32[6]; + + GFX_FIFO(u32) = mtx_u32[8]; + GFX_FIFO(u32) = mtx_u32[9]; + GFX_FIFO(u32) = mtx_u32[10]; } /* 802D8CC4-802D8D30 .text J3DFifoLoadNrmMtxImm3x3__FPA3_fUl */ -void J3DFifoLoadNrmMtxImm3x3(float(*)[3], unsigned long) { - /* Nonmatching */ +void J3DFifoLoadNrmMtxImm3x3(Mtx33 mtx, unsigned long idx) { + J3DFifoWriteXFCmd(0x400 + (idx * 3), 9); + u32 * mtx_u32 = (u32*)mtx; + + GFX_FIFO(u32) = mtx_u32[0]; + GFX_FIFO(u32) = mtx_u32[1]; + GFX_FIFO(u32) = mtx_u32[2]; + + GFX_FIFO(u32) = mtx_u32[3]; + GFX_FIFO(u32) = mtx_u32[4]; + GFX_FIFO(u32) = mtx_u32[5]; + + GFX_FIFO(u32) = mtx_u32[6]; + GFX_FIFO(u32) = mtx_u32[7]; + GFX_FIFO(u32) = mtx_u32[8]; } +u8 NullTexData[16] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +Mtx j3dIdentityMtx = { + 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, +}; + /* 802D8D30-802D8EE0 .text setTexCacheRegion__6J3DSysF15_GXTexCacheSize */ -void J3DSys::setTexCacheRegion(_GXTexCacheSize) { - /* Nonmatching */ +void J3DSys::setTexCacheRegion(GXTexCacheSize size) { + const u32 kSize[] = { + 0x00008000, + 0x00020000, + 0x00080000, + 0x00000000, + }; + const u32 kRegionNum[] = {8, 4, 1, 0}; + + u32 regionNum = kRegionNum[size]; + mTexCacheRegionNum = regionNum; + + if (!!(mFlags & 0x80000000)) { + for (u32 i = 0; i < regionNum; i++) { + if (!!(i & 1)) { + GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size] + 0x80000, size, i * kSize[size], size); + JRNLoadTexCached((GXTexMapID)i, i * kSize[size] + 0x80000, size, i * kSize[size], size); + } else { + GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size], size, i * kSize[size] + 0x80000, size); + JRNLoadTexCached((GXTexMapID)i, i * kSize[size], size, i * kSize[size] + 0x80000, size); + } + } + } else { + for (u32 i = 0; i < regionNum; i++) { + GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size], size, i * kSize[size] + 0x80000, size); + JRNLoadTexCached((GXTexMapID)i, i * kSize[size], size, i * kSize[size] + 0x80000, size); + } + } } /* 802D8EE0-802D956C .text drawInit__6J3DSysFv */ void J3DSys::drawInit() { - /* Nonmatching */ + GXSetMisc(2, 0); + GXInvalidateVtxCache(); + GXSetCurrentMtx(GX_PNMTX0); + GXSetCullMode(GX_CULL_BACK); + GXSetCoPlanar(GX_FALSE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetColorUpdate(GX_TRUE); + GXSetDither(GX_TRUE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXSetZCompLoc(GX_TRUE); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR1, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX3, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX4, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX5, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX6, GX_CLR_RGBA, GX_RGBA4, 7); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX7, GX_CLR_RGBA, GX_RGBA4, 7); + + GXSetNumIndStages(0); + reinitTexture(); + + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE12, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE13, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE14, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE15, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + + for (u32 i = 0; i < 10; i++) + GXLoadTexMtxImm(j3dIdentityMtx, GX_TEXMTX0 + i * 3, GX_MTX3x4); + + Mtx23 indTexMtx = { + {0.5f, 0.0f, 0.0f}, + {0.0f, 0.5f, 0.0f}, + }; + + u8 i; + for (i = 0; i < 3; i++) + GXSetIndTexMtx((GXIndTexMtxID)(GX_ITM_0 + i), (f32*)indTexMtx, 1); + + GXSetChanMatColor(GX_COLOR0A0, j3dDefaultColInfo); + GXSetChanMatColor(GX_COLOR1A1, j3dDefaultColInfo); + + GXSetNumChans(j3dDefaultColorChanNum); + GXSetNumTexGens(1); + GXSetNumTevStages(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); + + for (i = 0; i < GX_MAX_TEXMAP; i++) + GXSetTexCoordGen2((GXTexCoordID)i, (GXTexGenType)j3dDefaultTexCoordInfo[i].mTexGenType, + (GXTexGenSrc)j3dDefaultTexCoordInfo[i].mTexGenSrc, + j3dDefaultTexCoordInfo[i].mTexGenMtx, GX_FALSE, GX_PTIDENTITY); + + for (i = 0; i < GX_MAX_INDTEXSTAGE; i++) + GXSetIndTexCoordScale((GXIndTexStageID)i, GX_ITS_1, GX_ITS_1); + + for (i = 0; i < GX_MAX_TEVREG; i++) + GXSetTevKColor((GXTevKColorID)i, j3dDefaultTevKColor); + + for (i = 0; i < GX_MAX_TEVREG; i++) + GXSetTevColorS10((GXTevRegID)i, j3dDefaultTevColor); + + for (i = 0; i < GX_MAX_TEVSTAGE; i++) { + GXSetTevColorIn((GXTevStageID)i, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, + GX_TEVPREV); + GXSetTevAlphaIn((GXTevStageID)i, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, + GX_TEVPREV); + } + + for (i = 0; i < GX_MAX_TEVSTAGE; i++) + GXSetTevSwapMode((GXTevStageID)i, GX_TEV_SWAP0, GX_TEV_SWAP0); + + GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); + GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA); + GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA); + GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA); + + for (i = 0; i < GX_MAX_TEVSTAGE; i++) + GXSetTevIndirect((GXTevStageID)i, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_NONE, GX_ITM_OFF, + GX_ITW_OFF, GX_ITW_OFF, GX_FALSE, GX_FALSE, GX_ITBA_OFF); + + i_OSInitFastCast(); + setTexCacheRegion(GX_TEXCACHE_32K); } /* 802D956C-802D95C8 .text reinitGX__6J3DSysFv */ void J3DSys::reinitGX() { - /* Nonmatching */ + reinitGenMode(); + reinitLighting(); + reinitTransform(); + reinitTexture(); + reinitTevStages(); + reinitIndStages(); + reinitPixelProc(); } /* 802D95C8-802D9614 .text reinitGenMode__6J3DSysFv */ void J3DSys::reinitGenMode() { - /* Nonmatching */ + GXSetNumChans(0); + GXSetNumTexGens(1); + GXSetNumTevStages(1); + GXSetNumIndStages(0); + GXSetCullMode(GX_CULL_BACK); + GXSetCoPlanar(GX_FALSE); } +GXColor ColorBlack = {0x00, 0x00, 0x00, 0x00}; +GXColor ColorWhite = {0xFF, 0xFF, 0xFF, 0xFF}; + /* 802D9614-802D96C0 .text reinitLighting__6J3DSysFv */ void J3DSys::reinitLighting() { - /* Nonmatching */ + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); + GXSetChanAmbColor(GX_COLOR0A0, ColorBlack); + GXSetChanAmbColor(GX_COLOR1A1, ColorBlack); + GXSetChanMatColor(GX_COLOR0A0, ColorWhite); + GXSetChanMatColor(GX_COLOR1A1, ColorWhite); } /* 802D96C0-802D97C4 .text reinitTransform__6J3DSysFv */ void J3DSys::reinitTransform() { - /* Nonmatching */ + GXSetCurrentMtx(GX_PNMTX0); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD5, GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD6, GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTexCoordGen2(GX_TEXCOORD7, GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); } /* 802D97C4-802D9868 .text reinitTexture__6J3DSysFv */ void J3DSys::reinitTexture() { - /* Nonmatching */ + GXTexObj texObj; + GXInitTexObj(&texObj, NullTexData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXLoadTexObj(&texObj, GX_TEXMAP0); + GXLoadTexObj(&texObj, GX_TEXMAP1); + GXLoadTexObj(&texObj, GX_TEXMAP2); + GXLoadTexObj(&texObj, GX_TEXMAP3); + GXLoadTexObj(&texObj, GX_TEXMAP4); + GXLoadTexObj(&texObj, GX_TEXMAP5); + GXLoadTexObj(&texObj, GX_TEXMAP6); + GXLoadTexObj(&texObj, GX_TEXMAP7); } /* 802D9868-802D9B70 .text reinitTevStages__6J3DSysFv */ void J3DSys::reinitTevStages() { - /* Nonmatching */ + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE12, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE13, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE14, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevOrder(GX_TEVSTAGE15, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + + GXSetTevColor(GX_TEVREG0, ColorWhite); + GXSetTevColor(GX_TEVREG1, ColorWhite); + GXSetTevColor(GX_TEVREG2, ColorWhite); + GXSetTevKColor(GX_KCOLOR0, ColorWhite); + GXSetTevKColor(GX_KCOLOR1, ColorWhite); + GXSetTevKColor(GX_KCOLOR2, ColorWhite); + GXSetTevKColor(GX_KCOLOR3, ColorWhite); + + for (u32 i = 0; i < GX_MAX_TEVSTAGE; i++) { + GXSetTevColorIn((GXTevStageID)i, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn((GXTevStageID)i, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevKColorSel((GXTevStageID)i, GX_TEV_KCSEL_1_4); + GXSetTevKAlphaSel((GXTevStageID)i, GX_TEV_KASEL_1); + GXSetTevSwapMode((GXTevStageID)i, GX_TEV_SWAP0, GX_TEV_SWAP0); + } + + GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA); + GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA); + GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA); + GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); } +Mtx23 IndMtx = {0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f}; + /* 802D9B70-802D9C68 .text reinitIndStages__6J3DSysFv */ void J3DSys::reinitIndStages() { - /* Nonmatching */ + for (u32 i = 0; i < GX_MAX_TEVSTAGE; i++) { + GXSetTevDirect((GXTevStageID)i); + } + + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0); + GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexOrder(GX_INDTEXSTAGE2, GX_TEXCOORD2, GX_TEXMAP2); + GXSetIndTexOrder(GX_INDTEXSTAGE3, GX_TEXCOORD3, GX_TEXMAP3); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE2, GX_ITS_1, GX_ITS_1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE3, GX_ITS_1, GX_ITS_1); + GXSetIndTexMtx(GX_ITM_0, (f32*)IndMtx, 1); + GXSetIndTexMtx(GX_ITM_1, (f32*)IndMtx, 1); + GXSetIndTexMtx(GX_ITM_2, (f32*)IndMtx, 1); } /* 802D9C68-802D9CFC .text reinitPixelProc__6J3DSysFv */ void J3DSys::reinitPixelProc() { - /* Nonmatching */ + GXSetBlendMode(GX_BM_NONE, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR); + GXSetColorUpdate(GX_TRUE); + GXSetAlphaUpdate(GX_TRUE); + GXSetDither(GX_TRUE); + GXSetFog(GX_FOG_NONE, 0.0f, 1.0f, 0.1f, 1.0f, ColorBlack); + GXSetFogRangeAdj(GX_FALSE, 0, NULL); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXSetZCompLoc(GX_TRUE); } + +J3DSys j3dSys; +Mtx J3DSys::mCurrentMtx; +Vec J3DSys::mCurrentS; +Vec J3DSys::mParentS; +u16 J3DSys::sTexCoordScaleTable[32]; + +u32 j3dDefaultViewNo; From b60bf4df329ae35f00bff57ff96e8325f478d7ca Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 21 Sep 2023 23:26:10 -0700 Subject: [PATCH 39/89] J3DNode/J3DTransform progress --- include/JSystem/J3DGraphAnimator/J3DNode.h | 17 ++++---- include/JSystem/J3DGraphBase/J3DTransform.h | 24 +---------- src/JSystem/J3DGraphAnimator/J3DNode.cpp | 17 ++++++-- src/JSystem/J3DGraphBase/J3DTransform.cpp | 46 +++++++++++++++++++-- src/JSystem/JMath/JMath.cpp | 2 +- 5 files changed, 69 insertions(+), 37 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DNode.h b/include/JSystem/J3DGraphAnimator/J3DNode.h index d5eaadc1c..342c3d3fb 100644 --- a/include/JSystem/J3DGraphAnimator/J3DNode.h +++ b/include/JSystem/J3DGraphAnimator/J3DNode.h @@ -1,6 +1,8 @@ #ifndef J3DNODE_H #define J3DNODE_H +#include "dolphin/mtx/mtx.h" + class J3DNode; typedef int (*J3DNodeCallBack)(J3DNode*, int); @@ -11,7 +13,8 @@ public: virtual void calcIn(); virtual u32 getType(); virtual ~J3DNode(); - + + J3DNode(); void appendChild(J3DNode*); J3DNode* getYounger() { return mYounger; } @@ -20,11 +23,11 @@ public: J3DNodeCallBack getCallBack() { return mCallBack; } J3DNode* getChild() { return mChild; } - /* 0x00 */ void* mCallBackUserData; - /* 0x04 */ J3DNodeCallBack mCallBack; - /* 0x08 */ void* field_0x8; - /* 0x0C */ J3DNode* mChild; - /* 0x10 */ J3DNode* mYounger; -}; // Size: 0x14 + /* 0x04 */ void* mCallBackUserData; + /* 0x08 */ J3DNodeCallBack mCallBack; + /* 0x0C */ void* field_0x8; + /* 0x10 */ J3DNode* mChild; + /* 0x14 */ J3DNode* mYounger; +}; // Size: 0x18 #endif /* J3DNODE_H */ diff --git a/include/JSystem/J3DGraphBase/J3DTransform.h b/include/JSystem/J3DGraphBase/J3DTransform.h index 2cc2cc506..10a7c9605 100644 --- a/include/JSystem/J3DGraphBase/J3DTransform.h +++ b/include/JSystem/J3DGraphBase/J3DTransform.h @@ -20,28 +20,8 @@ void J3DGetTranslateRotateMtx(s16, s16, s16, f32, f32, f32, Mtx); void J3DPSCalcInverseTranspose(f32 (*param_0)[4], f32 (*param_1)[3]); void J3DGQRSetup7(u32 param_0, u32 param_1, u32 param_2, u32 param_3); -inline void J3DPSMtx33CopyFrom34(register MtxP src, register Mtx3P dst) { - register f32 x_y1; - register f32 z1; - register f32 x_y2; - register f32 z2; - register f32 x_y3; - register f32 z3; - asm { - psq_l x_y1, 0(src), 0, 0 - lfs z1, 8(src) - psq_l x_y2, 16(src), 0, 0 - lfs z2, 0x18(src) - psq_l x_y3, 32(src), 0, 0 - lfs z3, 0x28(src) - psq_st x_y1, 0(dst), 0, 0 - stfs z1, 8(dst) - psq_st x_y2, 12(dst), 0, 0 - stfs z2, 0x14(dst) - psq_st x_y3, 24(dst), 0, 0 - stfs z3, 0x20(dst) - } -} +void J3DPSMtx33Copy(register Mtx3P src, register Mtx3P dst); +void J3DPSMtx33CopyFrom34(register MtxP src, register Mtx3P dst); // regalloc issues inline void J3DPSMulMtxVec(register MtxP mtx, register Vec* vec, register Vec* dst) { diff --git a/src/JSystem/J3DGraphAnimator/J3DNode.cpp b/src/JSystem/J3DGraphAnimator/J3DNode.cpp index c44a0ee31..006aec6f1 100644 --- a/src/JSystem/J3DGraphAnimator/J3DNode.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DNode.cpp @@ -8,7 +8,10 @@ /* 802F5BA4-802F5BC8 .text __ct__7J3DNodeFv */ J3DNode::J3DNode() { - /* Nonmatching */ + mCallBackUserData = NULL; + mCallBack = NULL; + mChild = NULL; + mYounger = NULL; } /* 802F5BC8-802F5C10 .text __dt__7J3DNodeFv */ @@ -17,8 +20,16 @@ J3DNode::~J3DNode() { } /* 802F5C10-802F5C44 .text appendChild__7J3DNodeFP7J3DNode */ -void J3DNode::appendChild(J3DNode*) { - /* Nonmatching */ +void J3DNode::appendChild(J3DNode* pChild) { + if (mChild == NULL) { + mChild = pChild; + } else { + J3DNode* curChild = mChild; + while (curChild->getYounger() != NULL) { + curChild = curChild->getYounger(); + } + curChild->setYounger(pChild); + } } /* 802F5C44-802F5C48 .text entryIn__7J3DNodeFv */ diff --git a/src/JSystem/J3DGraphBase/J3DTransform.cpp b/src/JSystem/J3DGraphBase/J3DTransform.cpp index b231a3378..952da979a 100644 --- a/src/JSystem/J3DGraphBase/J3DTransform.cpp +++ b/src/JSystem/J3DGraphBase/J3DTransform.cpp @@ -4,6 +4,7 @@ // #include "JSystem/J3DGraphBase/J3DTransform.h" +#include "JSystem/J3DGraphBase/J3DStruct.h" #include "dolphin/types.h" /* 802DA0A8-802DA0B0 .text __MTGQR7__FUl */ @@ -103,13 +104,50 @@ void J3DMtxProjConcat(float(*)[4], float(*)[4], float(*)[4]) { } /* 802DACE0-802DAD0C .text J3DPSMtx33Copy__FPA3_fPA3_f */ -void J3DPSMtx33Copy(float(*)[3], float(*)[3]) { - /* Nonmatching */ +void J3DPSMtx33Copy(register Mtx3P src, register Mtx3P dst) { + register f32 x1_y1; + register f32 z1_x2; + register f32 y2_z2; + register f32 x3_y3; + register f32 z3; + + asm { + psq_l x1_y1, 0(src), 0, 0 + psq_l z1_x2, 8(src), 0, 0 + psq_l y2_z2, 16(src), 0, 0 + psq_l x3_y3, 24(src), 0, 0 + lfs z3, 32(src) + psq_st x1_y1, 0(dst), 0, 0 + psq_st z1_x2, 8(dst), 0, 0 + psq_st y2_z2, 16(dst), 0, 0 + psq_st x3_y3, 24(dst), 0, 0 + stfs z3, 32(dst) + } } /* 802DAD0C-802DAD40 .text J3DPSMtx33CopyFrom34__FPA4_fPA3_f */ -void J3DPSMtx33CopyFrom34(float(*)[4], float(*)[3]) { - /* Nonmatching */ +void J3DPSMtx33CopyFrom34(register MtxP src, register Mtx3P dst) { + register f32 x_y1; + register f32 z1; + register f32 x_y2; + register f32 z2; + register f32 x_y3; + register f32 z3; + + asm { + psq_l x_y1, 0(src), 0, 0 + psq_st x_y1, 0(dst), 0, 0 + lfs z1, 8(src) + stfs z1, 8(dst) + psq_l x_y2, 16(src), 0, 0 + psq_st x_y2, 12(dst), 0, 0 + lfs z2, 0x18(src) + stfs z2, 0x14(dst) + psq_l x_y3, 32(src), 0, 0 + psq_st x_y3, 24(dst), 0, 0 + lfs z3, 0x28(src) + stfs z3, 0x20(dst) + } } /* 802DAD40-802DAE1C .text J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl */ diff --git a/src/JSystem/JMath/JMath.cpp b/src/JSystem/JMath/JMath.cpp index 0bedd62ae..4639bda3b 100644 --- a/src/JSystem/JMath/JMath.cpp +++ b/src/JSystem/JMath/JMath.cpp @@ -3,7 +3,7 @@ // Translation Unit: JMath.cpp // -#include "JMath.h" +#include "JSystem/JMath/JMath.h" #include "dolphin/types.h" /* 80301028-80301150 .text JMANewSinTable__FUc */ From 9829f9e4c179b17913173f4d3ccfc41483cfe633 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 00:33:04 -0700 Subject: [PATCH 40/89] J2DPane/J2DGrafContext closer --- include/JSystem/J2DGraph/J2DPane.h | 6 +- include/JSystem/J3DGraphBase/J3DGD.h | 8 +- src/JSystem/J2DGraph/J2DGrafContext.cpp | 8 +- src/JSystem/J2DGraph/J2DPane.cpp | 103 ++++++++++++++++++------ 4 files changed, 90 insertions(+), 35 deletions(-) diff --git a/include/JSystem/J2DGraph/J2DPane.h b/include/JSystem/J2DGraph/J2DPane.h index 654a80942..21a21d2ca 100644 --- a/include/JSystem/J2DGraph/J2DPane.h +++ b/include/JSystem/J2DGraph/J2DPane.h @@ -63,8 +63,8 @@ public: /* 0x04 */ u32 mMagic; /* 0x08 */ int mTag; /* 0x0C */ JGeometry::TBox2 mBounds; - /* 0x1C */ JGeometry::TBox2 mScreenPos; - /* 0x2C */ JGeometry::TBox2 mBox; + /* 0x1C */ JGeometry::TBox2 mScreenBounds; + /* 0x2C */ JGeometry::TBox2 mDrawBounds; /* 0x3C */ Mtx mMtx; /* 0x6C */ Mtx mDrawMtx; /* 0x9C */ cXy mBasePosition; @@ -75,7 +75,7 @@ public: /* 0xAB */ u8 mCullMode; /* 0xAC */ u8 mAlpha; /* 0xAD */ u8 mDrawAlpha; - /* 0xAE */ u8 field_0xae; + /* 0xAE */ u8 mInheritAlpha; /* 0xAF */ u8 field_0xaf; /* 0xB0 */ JSUTree mPaneTree; }; diff --git a/include/JSystem/J3DGraphBase/J3DGD.h b/include/JSystem/J3DGraphBase/J3DGD.h index 6047a4102..254aa8962 100644 --- a/include/JSystem/J3DGraphBase/J3DGD.h +++ b/include/JSystem/J3DGraphBase/J3DGD.h @@ -21,10 +21,10 @@ inline void J3DGDWrite_u32(u32 param) { } inline void J3DGDWriteXFCmd(u16 param_1, u32 param_2) { - J3DGDWrite_u8(0x10); - J3DGDWrite_u16(0); - J3DGDWrite_u16(param_1); - J3DGDWrite_u32(param_2); + J3DGDWrite_u8(0x10); + J3DGDWrite_u16(0); + J3DGDWrite_u16(param_1); + J3DGDWrite_u32(param_2); } void J3DGDSetGenMode(u8 texGenNum, u8 colorChanNum, u8 tevStageNum, u8 IndTexStageNum, _GXCullMode cullMode); diff --git a/src/JSystem/J2DGraph/J2DGrafContext.cpp b/src/JSystem/J2DGraph/J2DGrafContext.cpp index 35d67976f..129b1f50c 100644 --- a/src/JSystem/J2DGraph/J2DGrafContext.cpp +++ b/src/JSystem/J2DGraph/J2DGrafContext.cpp @@ -21,7 +21,6 @@ void J2DGrafContext::setPort() { setup2D(); JGeometry::TBox2 bounds(mBounds); - GXSetViewport(bounds.i.x, bounds.i.y, bounds.getWidth(), bounds.getHeight(), 0.0f, 1.875f); } @@ -66,11 +65,12 @@ void J2DGrafContext::setup2D() { /* 802CD340-802CD590 .text setScissor__14J2DGrafContextFv */ void J2DGrafContext::setScissor() { - JGeometry::TBox2 bounds(0, 0, 1024, 1000); + JGeometry::TBox2 maxBounds(0, 0, 1024, 1000); JGeometry::TBox2 curBounds(mScissorBounds); - mScissorBounds.intersect(bounds); + mScissorBounds.intersect(maxBounds); curBounds.absolute(); - if (curBounds.intersect(bounds)) { + curBounds.addPos(0.0f, -1.0f); + if (curBounds.intersect(maxBounds)) { GXSetScissor(curBounds.i.x, curBounds.i.y, curBounds.getWidth(), curBounds.getHeight()); } else { GXSetScissor(0, 0, 0, 0); diff --git a/src/JSystem/J2DGraph/J2DPane.cpp b/src/JSystem/J2DGraph/J2DPane.cpp index 66b9a60d9..4eccae0fd 100644 --- a/src/JSystem/J2DGraph/J2DPane.cpp +++ b/src/JSystem/J2DGraph/J2DPane.cpp @@ -4,8 +4,11 @@ // #include "JSystem/J2DGraph/J2DPane.h" +#include "JSystem/J2DGraph/J2DGrafContext.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/JSupport/JSURandomInputStream.h" #include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GX.h" #include "dolphin/types.h" /* 802CF8F4-802CF984 .text __ct__7J2DPaneFv */ @@ -48,7 +51,7 @@ void J2DPane::initiate() { mRotation = 0.0f; mCullMode = 0; mAlpha = 0xFF; - field_0xae = 1; + mInheritAlpha = TRUE; mDrawAlpha = 0xFF; field_0xaf = 0; calcMtx(); @@ -68,8 +71,8 @@ J2DPane::J2DPane(J2DPane* pParentPane, JSURandomInputStream* pStream) : mPaneTre /* 802CFC00-802CFEF8 .text makePaneStream__7J2DPaneFP7J2DPaneP20JSURandomInputStream */ void J2DPane::makePaneStream(J2DPane* pParentPane, JSURandomInputStream* pStream) { - u8 unk; - pStream->read(&unk, 1); + u8 size; + pStream->read(&size, 1); pStream->read(&mVisible, 1); pStream->skip(2); mTag = pStream->read32b(); @@ -80,31 +83,31 @@ void J2DPane::makePaneStream(J2DPane* pParentPane, JSURandomInputStream* pStream f32 y1 = y0 + pStream->readS16(); mBounds.set(x0, y0, x1, y1); - unk -= 6; + size -= 6; mRotation = 0; - if (unk != 0) { + if (size != 0) { mRotation = pStream->readU16(); - unk--; + size--; } - if (unk != 0) { + if (size != 0) { setBasePosition((J2DBasePosition)pStream->readU8()); - unk--; + size--; } else { setBasePosition(J2DBasePosition_0); } mAlpha = 0xFF; - if (unk != 0) { + if (size != 0) { mAlpha = pStream->readU8(); - unk--; + size--; } - field_0xae = 1; - if (unk != 0) { - field_0xae = pStream->readU8() != 0; - unk--; + mInheritAlpha = TRUE; + if (size != 0) { + mInheritAlpha = pStream->readU8() != 0; + size--; } pStream->align(4); @@ -143,13 +146,67 @@ bool J2DPane::insertChild(J2DPane* pPrev, J2DPane* pChild) { } /* 802D0078-802D054C .text draw__7J2DPaneFffPC14J2DGrafContextb */ -void J2DPane::draw(float, float, const J2DGrafContext*, bool) { - /* Nonmatching */ +void J2DPane::draw(float x, float y, const J2DGrafContext* pCtx, bool clip) { + J2DGrafContext ctx = *pCtx; + + if (pCtx->getGrafType() != 1) + clip = false; + + JSUTree * pParent = mPaneTree.getParent(); + J2DPane * pParentPane = NULL; + if (pParent != NULL) + pParentPane = pParent->getObject(); + + if (mVisible && mBounds.isValid()) { + mScreenBounds = mBounds; + mDrawBounds = mBounds; + + if (pParentPane != NULL) { + mScreenBounds.addPos(pParentPane->mScreenBounds.i.x, pParentPane->mScreenBounds.i.y); + MTXConcat(pParentPane->mDrawMtx, mMtx, mDrawMtx); + + if (clip) { + mDrawBounds.addPos(pParentPane->mScreenBounds.i.x, pParentPane->mScreenBounds.i.y); + mDrawBounds.intersect(pParentPane->mDrawBounds); + mDrawAlpha = mAlpha; + + if (mInheritAlpha) + mDrawAlpha = (mAlpha * pParentPane->mDrawAlpha) / 0xFF; + } + } else { + mScreenBounds.addPos(x, y); + makeMatrix(mBounds.i.x + x, mBounds.i.y + y); + MTXCopy(mMtx, mDrawMtx); + mDrawBounds.set(mScreenBounds); + mDrawAlpha = mAlpha; + } + + JGeometry::TBox2 clipBounds( 0.0f, 0.0f, 0.0f, 0.0f ); + if (clip) + ((J2DOrthoGraph*)pCtx)->scissorBounds(&clipBounds, &mDrawBounds); + + if (mDrawBounds.isValid() || !clip) { + ctx.place(mScreenBounds); + if (clip) { + ctx.scissor(clipBounds); + ctx.setScissor(); + } + GXSetCullMode((GXCullMode)mCullMode); + drawSelf(x, y, &ctx.mPosMtx); + + for (JSUTreeIterator iter = mPaneTree.getFirstChild(); iter.getObject(); ++iter) + iter->draw(0.0f, 0.0f, pCtx, clip); + } + } } /* 802D054C-802D05C8 .text move__7J2DPaneFff */ -void J2DPane::move(float, float) { - /* Nonmatching */ +void J2DPane::move(float x, float y) { + JGeometry::TBox2 bounds; + f32 width = mBounds.getWidth(), height = mBounds.getHeight(); + bounds.set(x, y, x + width, y + height); + mBounds = bounds; + calcMtx(); } /* 802D05C8-802D0604 .text add__7J2DPaneFff */ @@ -160,9 +217,9 @@ void J2DPane::add(f32 px, f32 py) { /* 802D0604-802D0680 .text clip__7J2DPaneFRCQ29JGeometry8TBox2 */ void J2DPane::clip(const JGeometry::TBox2& bounds) { JGeometry::TBox2 boxA(bounds); - JGeometry::TBox2 boxB(mScreenPos); + JGeometry::TBox2 boxB(mScreenBounds); boxA.addPos(boxB.i); - mBox.intersect(boxA); + mDrawBounds.intersect(boxA); } /* 802D0680-802D0714 .text search__7J2DPaneFUl */ @@ -203,8 +260,7 @@ void J2DPane::setBasePosition(J2DBasePosition pos) { if (pos % 3 == 0) { mBasePosition.x = 0.0f; } else if (pos % 3 == 1) { - f32 width = mBounds.getWidth(); - mBasePosition.x = 0.5f * width; + mBasePosition.x = mBounds.getWidth() / 2.0f; } else { mBasePosition.x = mBounds.getWidth(); } @@ -212,8 +268,7 @@ void J2DPane::setBasePosition(J2DBasePosition pos) { if (pos / 3 == 0) { mBasePosition.y = 0.0f; } else if (pos / 3 == 1) { - f32 height = mBounds.getHeight(); - mBasePosition.y = height * 0.5f; + mBasePosition.y = mBounds.getHeight() / 2.0f; } else { mBasePosition.y = mBounds.getHeight(); } From 0b034a877ef561872417d66a2b6874fc26a6c6f7 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 00:47:54 -0700 Subject: [PATCH 41/89] J3DSys not quite matching sdata2 isn't big enough? --- configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.py b/configure.py index 506e4bf39..98dd063d0 100644 --- a/configure.py +++ b/configure.py @@ -848,7 +848,7 @@ config.libs = [ "J3DGraphBase", [ Object(NonMatching, "JSystem/J3DGraphBase/J3DGD.cpp"), - Object(Matching, "JSystem/J3DGraphBase/J3DSys.cpp"), + Object(NonMatching, "JSystem/J3DGraphBase/J3DSys.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DVertex.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DTransform.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DPacket.cpp"), From 54c8c9c4e99fa643950cecf35150c5245f2c9165 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 02:11:26 -0700 Subject: [PATCH 42/89] d_point_wind match, d_path start --- configure.py | 2 +- include/d/actor/d_a_player_link.h | 5 -- include/d/d_kankyo.h | 2 +- include/d/d_kankyo_wether.h | 1 + include/d/d_path.h | 2 +- include/d/d_point_wind.h | 17 +++++++ include/d/d_stage.h | 5 +- src/d/d_path.cpp | 54 +++++++++++++++++--- src/d/d_point_wind.cpp | 49 +++++++++++++++--- src/d/d_stage.cpp | 83 ++++++++++++++++++++++++------- 10 files changed, 179 insertions(+), 41 deletions(-) create mode 100644 include/d/d_point_wind.h diff --git a/configure.py b/configure.py index 98dd063d0..8ee0a6702 100644 --- a/configure.py +++ b/configure.py @@ -404,7 +404,7 @@ config.libs = [ Object(NonMatching, "d/d_a_npc_mk_static.cpp"), Object(NonMatching, "d/d_salvage.cpp"), Object(NonMatching, "d/d_snap.cpp"), - Object(NonMatching, "d/d_point_wind.cpp"), + Object(Matching, "d/d_point_wind.cpp"), Object(NonMatching, "d/actor/d_a_agb.cpp"), Object(NonMatching, "d/actor/d_a_arrow.cpp"), Object(NonMatching, "d/actor/d_a_bg.cpp"), diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index 05fa50c6f..1be6bde25 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -97,11 +97,6 @@ public: /* 0x0 */ u8 field_0x0[0x28]; }; -class dPa_smokeEcallBack { -public: - /* 0x0 */ u8 field_0x0[0x20]; -}; - class dPa_cutTurnEcallBack_c { public: /* 0x0 */ u8 field_0x0[0x10]; diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index c97a8b4c2..575c20ece 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -35,7 +35,7 @@ struct WIND_INFLUENCE { /* 0x18 */ f32 mRadius; /* 0x1C */ f32 mStrength; /* 0x20 */ f32 field_0x20; - /* 0x24 */ int field_0x24; + /* 0x24 */ f32 field_0x24; /* 0x28 */ u8 mbConstant; }; diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h index 6fd6189b8..4aab0ff48 100644 --- a/include/d/d_kankyo_wether.h +++ b/include/d/d_kankyo_wether.h @@ -337,5 +337,6 @@ f32* dKyw_get_wind_power(); void squal_proc(); void dKyw_pntwind_set(WIND_INFLUENCE*); void dKyw_pntwind_cut(WIND_INFLUENCE*); +void dKyw_pwind_cylinder_set(WIND_INFLUENCE*); #endif /* D_KANKYO_WETHER_H */ \ No newline at end of file diff --git a/include/d/d_path.h b/include/d/d_path.h index 459609fd6..3902fea8b 100644 --- a/include/d/d_path.h +++ b/include/d/d_path.h @@ -13,7 +13,7 @@ struct dPath__Point { }; struct dPath { - /* 0x00 */ u16 mNum; + /* 0x00 */ u16 m_num; /* 0x02 */ u16 mNextPathId; /* 0x04 */ u8 mArg0; /* 0x05 */ u8 mLoops; diff --git a/include/d/d_point_wind.h b/include/d/d_point_wind.h new file mode 100644 index 000000000..310887cbe --- /dev/null +++ b/include/d/d_point_wind.h @@ -0,0 +1,17 @@ +#ifndef D_POINT_WIND_H +#define D_POINT_WIND_H + +#include "SSystem/SComponent/c_m3d_g_cps.h" +#include "d/d_kankyo.h" + +class dPointWind_c { +public: + cM3dGCpsS * mpCps; + WIND_INFLUENCE mWind; + + void set_pwind_init(cM3dGCpsS * pCps); + void set_pwind_move(); + void set_pwind_delete(); +}; + +#endif /* D_POINT_WIND_H */ \ No newline at end of file diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 341661a52..322e03da0 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -770,9 +770,8 @@ public: }; class dBgW_base; -class dStage_roomStatus_c { +class dStage_roomStatus_c : public dStage_roomDt_c { public: - /* 0x000 */ dStage_roomDt_c mRoomDt; /* 0x054 */ dKy_tevstr_c mTevStr; /* 0x104 */ u8 mFlags; /* 0x105 */ bool mDraw; @@ -800,7 +799,7 @@ public: void zoneCountCheck(int) const; void checkDrawArea() const; dStage_darkStatus_c* getDarkStatus(); - void getDarkMode(); + u32 getDarkMode(); void getBgW(int); static JKRExpHeap* createMemoryBlock(int, u32); diff --git a/src/d/d_path.cpp b/src/d/d_path.cpp index 8e46db926..59c429b0d 100644 --- a/src/d/d_path.cpp +++ b/src/d/d_path.cpp @@ -4,21 +4,61 @@ // #include "d/d_path.h" -#include "dolphin/types.h" +#include "d/d_com_inf_game.h" +#include "JSystem/JUtility/JUTAssert.h" /* 80080018-8008010C .text dPath_GetPnt__FP5dPathi */ -dPath__Point* dPath_GetPnt(dPath*, int) { - /* Nonmatching */ +dPath__Point* dPath_GetPnt(dPath* path, int pnt_index) { + JUT_ASSERT(14, path != 0); + JUT_ASSERT(15, 0 <= pnt_index && pnt_index < path->m_num); + + if (path == NULL || path->mpPnt == NULL || 0 > pnt_index || pnt_index >= path->m_num) + return NULL; + else + return &path->mpPnt[pnt_index]; } /* 8008010C-80080218 .text dPath_GetRoomPath__Fii */ -dPath* dPath_GetRoomPath(int, int) { - /* Nonmatching */ +dPath* dPath_GetRoomPath(int path_index, int room_no) { + dStage_dPath_c * pd; + if (room_no == -1) { + pd = dComIfGp_getStage().getPath2Inf(); + } else { + JUT_ASSERT(0x3d, 0 <= room_no && room_no < 64); + dStage_roomStatus_c * pRoom = dComIfGp_roomControl_getStatusRoomDt(room_no); + if (pRoom == NULL) + return NULL; + pd = pRoom->getPath2Inf(); + } + + if (pd == NULL || 0 > path_index || path_index >= pd->num) + return NULL; + else + return &pd->m_path[path_index]; } /* 80080218-80080340 .text dPath_GetNextRoomPath__FP5dPathi */ -void dPath_GetNextRoomPath(dPath*, int) { - /* Nonmatching */ +dPath* dPath_GetNextRoomPath(dPath* path, int room_no) { + dStage_dPath_c * pd; + if (room_no == -1) { + pd = dComIfGp_getStage().getPath2Inf(); + } else { + dStage_roomStatus_c * pRoom = dComIfGp_roomControl_getStatusRoomDt(room_no); + if (pRoom == NULL) + return NULL; + pd = pRoom->getPath2Inf(); + } + + s32 next_id = path->mNextPathId; + if (pd == NULL || (next_id & 0xFFFF) == 0xFFFF) { + return NULL; + } else { + JUT_ASSERT(0x72, 0 <= next_id && next_id < pd->num); + if (0 > next_id || next_id >= pd->num) + return NULL; + else + return &pd->m_path[next_id]; + } } /* 80080340-800804A4 .text dPath_GetPolyRoomPathVec__FR13cBgS_PolyInfoP4cXyzPi */ diff --git a/src/d/d_point_wind.cpp b/src/d/d_point_wind.cpp index 3882720dd..b9f930356 100644 --- a/src/d/d_point_wind.cpp +++ b/src/d/d_point_wind.cpp @@ -3,21 +3,58 @@ // Translation Unit: d_point_wind.cpp // -#include "d_point_wind.h" -#include "dolphin/types.h" +#include "d/d_point_wind.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo_rain.h" +#include "d/d_kankyo_wether.h" +#include "SSystem/SComponent/c_lib.h" /* 800CF31C-800CF398 .text set_pwind_init__12dPointWind_cFP9cM3dGCpsS */ -void dPointWind_c::set_pwind_init(cM3dGCpsS*) { - /* Nonmatching */ +void dPointWind_c::set_pwind_init(cM3dGCpsS* pCps) { + mpCps = pCps; + mWind.mPos = mpCps->mStart; + mWind.mDir = mpCps->mEnd; + mWind.mRadius = mpCps->mRadius; + mWind.field_0x20 = 0.0f; + mWind.mStrength = 1.0f; + dKyw_pwind_cylinder_set(&mWind); } /* 800CF398-800CF5C8 .text set_pwind_move__12dPointWind_cFv */ void dPointWind_c::set_pwind_move() { - /* Nonmatching */ + f32 radScale = 1.8f; + BOOL animate = TRUE; + + cXyz p0 = mpCps->mStart; + cXyz p1 = mpCps->mEnd; + cXyz dir; + dKyr_get_vectle_calc(&p0, &p1, &dir); + + if (strcmp(dComIfGp_getStartStageName(), "sea") == 0 && dComIfGp_roomControl_getStayNo() == 4) { + radScale = 11.0f; + animate = false; + mWind.mPos = p0 + (dir * -100.0f); + } + + mWind.mDir = dir; + mWind.mRadius = mpCps->mRadius * radScale; + mWind.field_0x20 = 0.0f; + + if (animate) { + cLib_addCalc(&mWind.mPos.x, mpCps->mEnd.x, 0.1f, mWind.mRadius, mWind.mRadius * 0.5f); + cLib_addCalc(&mWind.mPos.y, mpCps->mEnd.y, 0.1f, mWind.mRadius, mWind.mRadius * 0.5f); + cLib_addCalc(&mWind.mPos.z, mpCps->mEnd.z, 0.1f, mWind.mRadius, mWind.mRadius * 0.5f); + + if (mWind.mPos.abs(p1) < mWind.mRadius) { + mWind.mPos.x = mpCps->mStart.x; + mWind.mPos.y = mpCps->mStart.y; + mWind.mPos.z = mpCps->mStart.z; + } + } } /* 800CF5C8-800CF5EC .text set_pwind_delete__12dPointWind_cFv */ void dPointWind_c::set_pwind_delete() { - /* Nonmatching */ + dKyw_pntwind_cut(&mWind); } diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index d8adae160..3c9d97e15 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -35,14 +35,25 @@ void dStage_SetErrorRoom() {} /* 8004093C-80040940 .text dStage_SetErrorStage__Fv */ void dStage_SetErrorStage() {} +class dStage_KeepTresureInfo { + u8 unk[0x404]; +}; + +class dStage_KeepDoorInfo { + u8 unk[0x904]; +}; + +dStage_KeepTresureInfo TresureInfo; +dStage_KeepDoorInfo DoorInfo; + /* 80040940-8004094C .text dStage_GetKeepTresureInfo__Fv */ -void dStage_GetKeepTresureInfo() { - /* Nonmatching */ +dStage_KeepTresureInfo * dStage_GetKeepTresureInfo() { + return &TresureInfo; } /* 8004094C-80040958 .text dStage_GetKeepDoorInfo__Fv */ -void dStage_GetKeepDoorInfo() { - /* Nonmatching */ +dStage_KeepDoorInfo * dStage_GetKeepDoorInfo() { + return &DoorInfo; } /* 80040958-80040A78 .text dStage_KeepTresureInfoProc__FP11dStage_dt_cP19stage_tresure_class @@ -86,7 +97,7 @@ void dStage_roomControl_c::init() { dStage_roomStatus_c* status = mStatus; for (int i = 0; i < 64; i++) { - status->mRoomDt.init(); + status->init(); setStatusFlag(i, 0); status->mDraw = false; @@ -202,17 +213,25 @@ void dStage_roomControl_c::checkDrawArea() const { /* 800412EC-80041330 .text getDarkStatus__20dStage_roomControl_cFv */ // NONMATCHING dStage_darkStatus_c* dStage_roomControl_c::getDarkStatus() { - dStage_FileList_dt_c* plist_p = mStatus[mStayNo].mRoomDt.mpFileList; - if (plist_p == NULL) { - return NULL; - } + dStage_roomStatus_c * pRoomStatus = &mStatus[mStayNo]; + dStage_FileList_dt_c* plist_p = pRoomStatus->mpFileList; + if (plist_p == NULL) + return NULL; + + // pointer math here seems wrong... return &mDarkStatus[plist_p->mParam & 0x78]; } /* 80041330-80041370 .text getDarkMode__20dStage_roomControl_cFv */ -void dStage_roomControl_c::getDarkMode() { - /* Nonmatching */ +u32 dStage_roomControl_c::getDarkMode() { + dStage_roomStatus_c * pRoomStatus = &mStatus[mStayNo]; + dStage_FileList_dt_c* plist_p = pRoomStatus->mpFileList; + + u8 mode = 0; + if (plist_p != NULL && (plist_p->mParam & 1) != 0) + mode = 1; + return mode; } /* 80041370-800413D4 .text createMemoryBlock__20dStage_roomControl_cFiUl */ @@ -1201,8 +1220,25 @@ void dStage_playerInitIkada(fopAcM_prm_class*, void*) { } /* 800419D0-80041AEC .text dStage_chkPlayerId__Fii */ -void dStage_chkPlayerId(int, int) { - /* Nonmatching */ +u32 dStage_chkPlayerId(int playerId, int room_no) { + stage_actor_class * player; + + if (room_no == -1) { + player = dComIfGp_getStage().getPlayer(); + } else { + JUT_ASSERT(0x689, 0 <= room_no && room_no < 64); + player = dComIfGp_roomControl_getStatusRoomDt(room_no)->getPlayer(); + } + + if (player == NULL) + return FALSE; + + stage_actor_data_class * actor = player->m_entries; + for (int i = 0; i < player->num; i++, actor++) + if ((u8)actor->mAngle.z == playerId) + return TRUE; + + return FALSE; } /* 80041AF4-80041E84 .text dStage_playerInit__FP11dStage_dt_cPviPv */ @@ -1509,8 +1545,20 @@ int dStage_tgscInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { } /* 8004259C-80042628 .text dStage_roomReadInit__FP11dStage_dt_cPviPv */ -int dStage_roomReadInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { - /* Nonmatching */ +int dStage_roomReadInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* i_file) { + // logic is bad + dStage_nodeHeader* room_info = (dStage_nodeHeader*)(i_data); + roomRead_class* pRoom = (roomRead_class*)room_info->m_offset; + i_stage->setRoom(pRoom); + + roomRead_data_class ** ppEntry = pRoom->m_entries; + for (s32 i = 0; i < room_info->m_entryNum; i++, ppEntry++) { + (u8*)(*ppEntry) = (u8*)(i_file) + (u32)ppEntry; + roomRead_data_class * pEntry = *ppEntry; + pEntry->field_0x4 = (u8*)(i_file) + ((u32)pEntry->field_0x4); + } + + return 1; } /* 80042628-80042658 .text dStage_roomRead_dt_c_GetReverbStage__FR14roomRead_classi */ @@ -1552,7 +1600,8 @@ int dStage_soundInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { /* 80042814-80042848 .text dStage_eventInfoInit__FP11dStage_dt_cPviPv */ int dStage_eventInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { - /* Nonmatching */ + i_stage->setEventInfo((dStage_EventInfo_c*)((char*)i_data + 4)); + return 1; } /* 80042848-8004287C .text dStage_floorInfoInit__FP11dStage_dt_cPviPv */ @@ -2075,7 +2124,7 @@ int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no) { scls = dComIfGp_getStageSclsInfo(); } else { JUT_ASSERT(4192, 0 <= room_no && room_no < 64); - scls = dComIfGp_roomControl_getStatusRoomDt(room_no)->mRoomDt.getSclsInfo(); + scls = dComIfGp_roomControl_getStatusRoomDt(room_no)->getSclsInfo(); } if (scls == NULL) { From f65adb0f972632140ddd9ff1fccb84b58661eb35 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 10:58:13 -0700 Subject: [PATCH 43/89] f_op_camera seems good --- configure.py | 2 +- include/d/d_com_inf_game.h | 9 +++ include/d/d_demo.h | 8 ++- include/d/d_event.h | 2 +- include/d/d_s_play.h | 2 +- include/f_op/f_op_actor.h | 2 +- include/f_op/f_op_camera.h | 26 ++++++-- include/m_Do/m_Do_audio.h | 4 ++ src/f_op/f_op_actor.cpp | 129 ++++++++++++++++++++++++++----------- src/f_op/f_op_camera.cpp | 69 +++++++++++++++++--- src/f_op/f_op_kankyo.cpp | 2 +- src/f_op/f_op_msg.cpp | 10 +-- 12 files changed, 203 insertions(+), 62 deletions(-) diff --git a/configure.py b/configure.py index 8ee0a6702..7f581f2c4 100644 --- a/configure.py +++ b/configure.py @@ -272,7 +272,7 @@ config.libs = [ Object(Matching, "f_op/f_op_actor_iter.cpp"), Object(Matching, "f_op/f_op_actor_tag.cpp"), Object(NonMatching, "f_op/f_op_actor_mng.cpp"), - Object(NonMatching, "f_op/f_op_camera.cpp"), + Object(Matching, "f_op/f_op_camera.cpp"), Object(Matching, "f_op/f_op_camera_mng.cpp"), Object(Matching, "f_op/f_op_overlap.cpp"), Object(Matching, "f_op/f_op_overlap_mng.cpp"), diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 5b2677374..a886bef1f 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -36,6 +36,7 @@ class daAgb_c; class dTimer_c; class camera_class; class J2DOrthoGraph; +class dDemo_actor_c; class __d_timer_info_c { public: @@ -948,6 +949,10 @@ inline void dComIfGp_demo_update() { g_dComIfG_gameInfo.play.getDemo()->update(); } +inline dDemo_actor_c* dComIfGp_demo_getActor(u8 id) { + return g_dComIfG_gameInfo.play.getDemo()->mDemoObj.getActor(id); +} + inline void dComIfGp_setLkDemoAnmArchive(JKRArchive* i_arc) { g_dComIfG_gameInfo.play.setLkDemoAnmArchive(i_arc); } @@ -1051,6 +1056,10 @@ inline void dComIfGp_event_setItemPartnerId(u32 id) { return g_dComIfG_gameInfo.play.getEvent().setPtI_Id(id); } +inline s32 dComIfGp_event_moveApproval(void* actor) { + return g_dComIfG_gameInfo.play.getEvent().moveApproval(actor); +} + inline dEvent_manager_c& dComIfGp_getEventManager() { return g_dComIfG_gameInfo.play.getEvtManager(); } diff --git a/include/d/d_demo.h b/include/d/d_demo.h index aad241265..2484031df 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -10,6 +10,12 @@ class dDemo_light_c; class dDemo_system_c; class TControl; class dMesg_tControl; +class fopAc_ac_c; + +class dDemo_actor_c /* : public JStage::TActor */ { +public: + void setActor(fopAc_ac_c*); +}; class dDemo_object_c { public: @@ -17,7 +23,7 @@ public: ~dDemo_object_c(); void appendActor(fopAc_ac_c*); - void getActor(u8); + dDemo_actor_c* getActor(u8); void createCamera(); void getActiveCamera(); void createAmbient(); diff --git a/include/d/d_event.h b/include/d/d_event.h index 3d78feba9..c1dd57301 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -48,7 +48,7 @@ public: void soundProc(); void check(); void photoCheck(); - void moveApproval(void*); + s32 moveApproval(void*); void compulsory(void*, const char*, u16); void remove(); void getStageEventDt(); diff --git a/include/d/d_s_play.h b/include/d/d_s_play.h index 463d66306..8a5479c96 100644 --- a/include/d/d_s_play.h +++ b/include/d/d_s_play.h @@ -12,7 +12,7 @@ public: bool resetGame(); void offReset(); - static bool isPause() { return pauseTimer == 0; } + static bool isPause() { return pauseTimer != 0; } static void setPauseTimer(s8 time) { pauseTimer = time; } static s8 pauseTimer; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 05a0bfca8..764bfe8aa 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -17,7 +17,7 @@ struct actor_method_class { enum fopAc_Status_e { fopAcStts_SHOWMAP_e = 0x00000020, fopAcStts_NOEXEC_e = 0x00000080, - fopAcStts_CULLSTOP_e = 0x00000100, + fopAcStts_CULL_e = 0x00000100, fopAcStts_FREEZE_e = 0x00000400, fopAcStts_CARRY_e = 0x00002000, fopAcStts_NOPAUSE_e = 0x00020000, diff --git a/include/f_op/f_op_camera.h b/include/f_op/f_op_camera.h index 9ae93e4b5..c9504450f 100644 --- a/include/f_op/f_op_camera.h +++ b/include/f_op/f_op_camera.h @@ -2,16 +2,32 @@ #define F_F_OP_CAMERA_H_ #include "f_op/f_op_view.h" +#include "SSystem/SComponent/c_sxyz.h" +#include "SSystem/SComponent/c_phase.h" -class camera_class; +class camera_process_class : public view_class { +public: + /* 0x210 */ create_tag_class mDwTg; + /* 0x224 */ leafdraw_method_class* mpMtd; + /* 0x228 */ u8 field_0x228[4]; + /* 0x22C */ s8 mPrm1; + /* 0x22D */ s8 mPrm2; + /* 0x22E */ s8 mPrm3; + /* 0x22F */ s8 field_0x22f; + /* 0x230 */ csXyz mAngle; + /* 0x238 */ int field_0x238; +}; + +class camera_class : public camera_process_class { +public: + /* 0x23C */ int field_0x23c; + /* 0x240 */ request_of_phase_process_class mPhaseReq; + // /* 0x248 */ dCamera_c mCamera; +}; struct camera_process_profile_definition { /* 0x00 */ view_process_profile_definition mBase; /* 0x3C */ leafdraw_method_class* mSubMtd; // Subclass methods }; -static s32 fopCam_Draw(camera_class* param_1); -static int fopCam_Execute(camera_class* pCamera); -int fopCam_IsDelete(camera_class* pCamera); - #endif diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index b76f75646..f53339662 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -62,6 +62,10 @@ inline void mDoAud_seStart(u32 i_sfxID, Vec* i_sePos, u32 param_2, s8 i_reverb) mDoAud_zelAudio_c::getInterface()->seStart(i_sfxID, i_sePos, param_2, i_reverb, 1.0f, 1.0f, -1.0f, -1.0f, 0); } +inline void mDoAud_seDeleteObject(Vec* i_sePos) { + mDoAud_zelAudio_c::getInterface()->seDeleteObject(i_sePos); +} + inline void mDoAud_bgmMuteMtDragon() { mDoAud_zelAudio_c::getInterface()->bgmMuteMtDragon(); } diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp index b7dc73c9a..6e5ad7b05 100644 --- a/src/f_op/f_op_actor.cpp +++ b/src/f_op/f_op_actor.cpp @@ -4,64 +4,121 @@ // #include "f_op/f_op_actor.h" -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_actor_tag.h" +#include "f_op/f_op_draw_tag.h" +#include "f_pc/f_pc_leaf.h" +#include "d/d_demo.h" +#include "d/d_map.h" +#include "d/d_meter.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" /* 8002330C-800233C4 .text __ct__10fopAc_ac_cFv */ fopAc_ac_c::fopAc_ac_c() { - /* Nonmatching */ } -/* 800233C4-80023400 .text __dt__20fopAc_cullSizeSphereFv */ -fopAc_cullSizeSphere::~fopAc_cullSizeSphere() { - /* Nonmatching */ -} - -/* 80023400-8002343C .text __dt__17fopAc_cullSizeBoxFv */ -fopAc_cullSizeBox::~fopAc_cullSizeBox() { - /* Nonmatching */ -} - -/* 8002343C-80023478 .text __dt__12dKy_tevstr_cFv */ -dKy_tevstr_c::~dKy_tevstr_c() { - /* Nonmatching */ -} - -/* 80023478-800234C0 .text __dt__11dEvt_info_cFv */ -dEvt_info_c::~dEvt_info_c() { - /* Nonmatching */ -} - -/* 800234C0-80023514 .text __dt__10fopAc_ac_cFv */ -fopAc_ac_c::~fopAc_ac_c() { - /* Nonmatching */ -} +int g_fopAc_type; +u32 fopAc_ac_c::stopStatus; /* 80023514-80023540 .text fopAc_IsActor__FPv */ -void fopAc_IsActor(void*) { - /* Nonmatching */ +s32 fopAc_IsActor(void* pProc) { + return fpcBs_Is_JustOfType(g_fopAc_type, ((fopAc_ac_c*)pProc)->mAcType); } +extern void drawActorPointMiniMap(fopAc_ac_c*); + /* 80023540-8002362C .text fopAc_Draw__FPv */ -void fopAc_Draw(void*) { - /* Nonmatching */ +void fopAc_Draw(void* pProc) { + if (dMenu_flag()) + return; + + fopAc_ac_c * actor = (fopAc_ac_c *)pProc; + if ((dComIfGp_event_moveApproval(pProc) == 2 || !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && + (!fopAcM_checkStatus(actor, fopAcStts_CULL_e) || fopAcM_cullingCheck(actor)) && + !fopAcM_checkStatus(actor, fopAcStts_NODRAW_e)) { + fopAcM_OffCondition(actor, fopAcCnd_NODRAW_e); + fpcLf_DrawMethod(actor->mpDrawMtd, actor); + } else { + fopAcM_OnCondition(actor, fopAcCnd_NODRAW_e); + } + + fopAcM_OffStatus(actor, fopAcStts_NODRAW_e); + + if (dComIfGp_roomControl_getStayNo() >= 0 && fopAcM_checkStatus(actor, fopAcStts_SHOWMAP_e)) + drawActorPointMiniMap(actor); } +#define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1)); +#define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f) + /* 8002362C-80023BDC .text fopAc_Execute__FPv */ -void fopAc_Execute(void*) { - /* Nonmatching */ +s32 fopAc_Execute(void* pProc) { + fopAc_ac_c * actor = (fopAc_ac_c *)pProc; + s32 ret = TRUE; + + CHECK_FLOAT_CLASS(0x27d, actor->current.pos.x); + CHECK_FLOAT_CLASS(0x27e, actor->current.pos.y); + CHECK_FLOAT_CLASS(0x27f, actor->current.pos.z); + CHECK_VEC3_RANGE(0x286, actor->current.pos); + + if (fopAcM_checkStatus(actor, fopAcStts_NOPAUSE_e) || (!dMenu_flag() && !dScnPly_ply_c::isPause())) { + actor->mEvtInfo.setCondition(dEvtCnd_NONE_e); + + s32 moveApproval = dComIfGp_event_moveApproval(actor); + if (moveApproval == 2 || (moveApproval != 0 && !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && + !fopAcM_checkStatus(actor, fopAcStts_NOEXEC_e) || !fopAcM_CheckCondition(actor, fopAcStts_NODRAW_e)) { + fopAcM_OffCondition(actor, fopAcCnd_NOEXEC_e); + actor->next = actor->current; + ret = fpcMtd_Execute((process_method_class*)actor->mSubMtd, actor); + } else { + fopAcM_OnCondition(actor, fopAcCnd_NOEXEC_e); + } + + CHECK_FLOAT_CLASS(0x2b4, actor->current.pos.x); + CHECK_FLOAT_CLASS(0x2b5, actor->current.pos.y); + CHECK_FLOAT_CLASS(0x2b6, actor->current.pos.z); + CHECK_VEC3_RANGE(0x2bd, actor->current.pos); + } + + return ret; } /* 80023BDC-80023C30 .text fopAc_IsDelete__FPv */ -void fopAc_IsDelete(void*) { - /* Nonmatching */ +s32 fopAc_IsDelete(void* pProc) { + fopAc_ac_c * actor = (fopAc_ac_c *)pProc; + s32 ret = fpcMtd_IsDelete((process_method_class*)actor->mSubMtd, actor); + if (ret == 1) + fopDwTg_DrawQTo(&actor->mDwTg); + return ret; } /* 80023C30-80023CD4 .text fopAc_Delete__FPv */ -void fopAc_Delete(void*) { - /* Nonmatching */ +s32 fopAc_Delete(void* pProc) { + fopAc_ac_c * actor = (fopAc_ac_c *)pProc; + s32 ret = fpcMtd_Delete((process_method_class*)actor->mSubMtd, actor); + if (ret == 1) { + fopAcTg_ActorQTo(&actor->mAcTg); + fopDwTg_DrawQTo(&actor->mDwTg); + fopAcM_DeleteHeap(actor); + dDemo_actor_c *pDemoActor = dComIfGp_demo_getActor(actor->mDemoActorId); + if (pDemoActor != NULL) + pDemoActor->setActor(NULL); + mDoAud_seDeleteObject(&actor->mEyePos); + mDoAud_seDeleteObject(&actor->current.pos); + } + return ret; } /* 80023CD4-80023F78 .text fopAc_Create__FPv */ void fopAc_Create(void*) { /* Nonmatching */ } + +actor_method_class g_fopAc_Method = { + (process_method_func)fopAc_Create, + (process_method_func)fopAc_Delete, + (process_method_func)fopAc_Execute, + (process_method_func)fopAc_IsDelete, + (process_method_func)fopAc_Draw, +}; diff --git a/src/f_op/f_op_camera.cpp b/src/f_op/f_op_camera.cpp index 7463b4018..ec8416fa4 100644 --- a/src/f_op/f_op_camera.cpp +++ b/src/f_op/f_op_camera.cpp @@ -4,29 +4,78 @@ // #include "f_op/f_op_camera.h" +#include "f_op/f_op_draw_tag.h" #include "dolphin/types.h" +#include "d/d_meter.h" +#include "d/d_s_play.h" /* 80029278-800292CC .text fopCam_Draw__FP12camera_class */ -void fopCam_Draw(camera_class*) { - /* Nonmatching */ +s32 fopCam_Draw(camera_class* camera) { + s32 cam_proc = 1; + + if (!dMenu_flag()) { + cam_proc = fpcLf_DrawMethod(camera->mpMtd, camera); + } + return cam_proc; } /* 800292CC-80029328 .text fopCam_Execute__FP12camera_class */ -void fopCam_Execute(camera_class*) { - /* Nonmatching */ +s32 fopCam_Execute(camera_class* camera) { + int ret; + + if (!dMenu_flag() && !dScnPly_ply_c::isPause()) { + ret = fpcMtd_Execute((process_method_class*)camera->mpMtd, camera); + } + + return ret; } /* 80029328-8002937C .text fopCam_IsDelete__FP12camera_class */ -void fopCam_IsDelete(camera_class*) { - /* Nonmatching */ +s32 fopCam_IsDelete(camera_class* camera) { + s32 ret = fpcMtd_IsDelete((process_method_class*)camera->mpMtd, camera); + if (ret == 1) + fopDwTg_DrawQTo(&camera->mDwTg); + return ret; } /* 8002937C-800293D0 .text fopCam_Delete__FP12camera_class */ -void fopCam_Delete(camera_class*) { - /* Nonmatching */ +s32 fopCam_Delete(camera_class* camera) { + s32 ret = fpcMtd_Delete((process_method_class*)camera->mpMtd, camera); + if (ret == 1) + fopDwTg_DrawQTo(&camera->mDwTg); + return ret; } /* 800293D0-80029468 .text fopCam_Create__FPv */ -void fopCam_Create(void*) { - /* Nonmatching */ +s32 fopCam_Create(void* pProc) { + camera_class* camera = (camera_class*)pProc; + + if (fpcM_IsFirstCreating(pProc)) { + camera_process_profile_definition* profile = + (camera_process_profile_definition*)fpcM_GetProfile(pProc); + camera->mpMtd = profile->mSubMtd; + + fopDwTg_Init(&camera->mDwTg, camera); + u32* append = (u32*)fpcM_GetAppend(camera); + + if (append) { + fpcM_SetParam(camera, *append); + } + } + + s32 ret = fpcMtd_Create(&camera->mpMtd->mBase, camera); + if (ret == cPhs_COMPLEATE_e) { + s32 priority = fpcLf_GetPriority(camera); + fopDwTg_ToDrawQ(&camera->mDwTg, priority); + } + + return ret; } + +leafdraw_method_class g_fopCam_Method = { + (process_method_func)fopCam_Create, + (process_method_func)fopCam_Delete, + (process_method_func)fopCam_Execute, + (process_method_func)fopCam_IsDelete, + (process_method_func)fopCam_Draw, +}; diff --git a/src/f_op/f_op_kankyo.cpp b/src/f_op/f_op_kankyo.cpp index bd49d96a0..983496604 100644 --- a/src/f_op/f_op_kankyo.cpp +++ b/src/f_op/f_op_kankyo.cpp @@ -29,7 +29,7 @@ static int fopKy_Execute(void* i_this) { int ret; kankyo_class* _this = (kankyo_class*)i_this; - if (dScnPly_ply_c::isPause() && (!dMenu_flag() || fpcM_GetName(i_this) == PROC_ENVSE || fpcM_GetName(i_this) == PROC_LEVEL_SE)) { + if (!dScnPly_ply_c::isPause() && (!dMenu_flag() || fpcM_GetName(i_this) == PROC_ENVSE || fpcM_GetName(i_this) == PROC_LEVEL_SE)) { ret = fpcMtd_Execute(&_this->mSubMtd->mBase, i_this); } diff --git a/src/f_op/f_op_msg.cpp b/src/f_op/f_op_msg.cpp index 36a80b7a0..1a2783dfa 100644 --- a/src/f_op/f_op_msg.cpp +++ b/src/f_op/f_op_msg.cpp @@ -10,17 +10,17 @@ #include "d/d_s_play.h" /* 8002A688-8002A6B0 .text fopMsg_Draw__FPv */ -static int fopMsg_Draw(void* i_this) { +int fopMsg_Draw(void* i_this) { msg_class* _this = static_cast(i_this); return fpcLf_DrawMethod(_this->mSubMtd, i_this); } /* 8002A6B0-8002A6E8 .text fopMsg_Execute__FPv */ -static int fopMsg_Execute(void* i_this) { +int fopMsg_Execute(void* i_this) { msg_class* _this = static_cast(i_this); int stat = 1; - if (dScnPly_ply_c::isPause()) { + if (!dScnPly_ply_c::isPause()) { stat = fpcMtd_Execute(&_this->mSubMtd->mBase, i_this); } @@ -28,7 +28,7 @@ static int fopMsg_Execute(void* i_this) { } /* 8002A6E8-8002A73C .text fopMsg_IsDelete__FPv */ -static int fopMsg_IsDelete(void* i_this) { +int fopMsg_IsDelete(void* i_this) { msg_class* _this = static_cast(i_this); int stat = fpcMtd_IsDelete(&_this->mSubMtd->mBase, i_this); @@ -40,7 +40,7 @@ static int fopMsg_IsDelete(void* i_this) { } /* 8002A73C-8002A788 .text fopMsg_Delete__FPv */ -static int fopMsg_Delete(void* i_this) { +int fopMsg_Delete(void* i_this) { msg_class* _this = static_cast(i_this); int stat = fpcMtd_Delete(&_this->mSubMtd->mBase, i_this); From 7c32410878bbb431a18ca1d86b1a4f8c5a0521b4 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 11:17:16 -0700 Subject: [PATCH 44/89] f_op_actor progress, c_m3d_g_sph done --- configure.py | 2 +- include/SSystem/SComponent/c_m3d.h | 2 +- include/d/d_npc.h | 2 +- include/f_op/f_op_actor.h | 4 +- include/f_op/f_op_actor_mng.h | 8 +-- src/SSystem/SComponent/c_m3d_g_sph.cpp | 13 ++-- src/d/d_npc.cpp | 14 ++--- src/f_op/f_op_actor.cpp | 85 ++++++++++++++++++++------ 8 files changed, 91 insertions(+), 39 deletions(-) diff --git a/configure.py b/configure.py index 7f581f2c4..5d114de56 100644 --- a/configure.py +++ b/configure.py @@ -524,7 +524,7 @@ config.libs = [ Object(Matching, "SSystem/SComponent/c_m3d_g_aab.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_cyl.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_pla.cpp"), - Object(NonMatching, "SSystem/SComponent/c_m3d_g_sph.cpp"), + Object(Matching, "SSystem/SComponent/c_m3d_g_sph.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_tri.cpp"), Object(NonMatching, "SSystem/SComponent/c_lib.cpp"), Object(NonMatching, "SSystem/SComponent/c_angle.cpp"), diff --git a/include/SSystem/SComponent/c_m3d.h b/include/SSystem/SComponent/c_m3d.h index 23ad25f58..58bb9f192 100644 --- a/include/SSystem/SComponent/c_m3d.h +++ b/include/SSystem/SComponent/c_m3d.h @@ -58,7 +58,7 @@ int cM3d_Cross_LinSph_CrossPos(const cM3dGSph&, const cM3dGLin&, Vec*, Vec*); bool cM3d_Cross_CylSph(const cM3dGCyl*, const cM3dGSph*, f32*); bool cM3d_Cross_CylSph(const cM3dGCyl*, const cM3dGSph*, Vec*, f32*); bool cM3d_Cross_SphSph(const cM3dGSph*, const cM3dGSph*, f32*); -static bool cM3d_Cross_SphSph(const cM3dGSph*, const cM3dGSph*, f32*, f32*); +bool cM3d_Cross_SphSph(const cM3dGSph*, const cM3dGSph*, f32*, f32*); bool cM3d_Cross_SphSph(const cM3dGSph*, const cM3dGSph*, Vec*); static void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph*, const cM3dGTri*, Vec*); bool cM3d_Cross_SphTri(const cM3dGSph*, const cM3dGTri*, Vec*); diff --git a/include/d/d_npc.h b/include/d/d_npc.h index 6081215e7..4e0de30be 100644 --- a/include/d/d_npc.h +++ b/include/d/d_npc.h @@ -66,7 +66,7 @@ class dNpc_EventCut_c { /* 0x18 */ int mTimer; /* 0x1C */ char* mpActorName; /* 0x20 */ u32 field_0x20; - /* 0x24 */ s32 mSetID; + /* 0x24 */ s32 mSetId; /* 0x28 */ cXyz mOffsetPos; /* 0x34 */ cXyz mTargetActorPos; /* 0x40 */ fopAc_ac_c* mpTargetActor; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 764bfe8aa..d8c9a23f7 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -185,11 +185,11 @@ public: /* 0x0C0 */ int mAcType; /* 0x0C4 */ create_tag_class mAcTg; /* 0x0D8 */ create_tag_class mDwTg; - /* 0x0EC */ profile_method_class* mSubMtd; + /* 0x0EC */ actor_method_class* mSubMtd; /* 0x0F0 */ JKRSolidHeap* mHeap; /* 0x0F4 */ dEvt_info_c mEvtInfo; /* 0x10C */ dKy_tevstr_c mTevStr; - /* 0x1BC */ u16 mSetID; + /* 0x1BC */ u16 mSetId; /* 0x1BE */ u8 mGroup; /* 0x1BF */ s8 mCullType; /* 0x1C0 */ u8 mDemoActorId; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 85f10094b..e0984a758 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -28,10 +28,10 @@ struct fopAcM_prm_class { /* 0x00 */ u32 mParameter; // single U32 Parameter /* 0x04 */ cXyz mPos; /* 0x10 */ csXyz mAngle; // rotation - /* 0x16 */ u16 mEnemyNo; + /* 0x16 */ u16 mSetId; /* 0x18 */ u8 mScale[3]; - /* 0x1B */ u8 mGbaName; // from WW, maybe a different parameter here - /* 0x1C */ s32 mParentPId; // parent process ID + /* 0x1B */ u8 mGbaName; + /* 0x1C */ s32 mParentPcId; // parent process ID /* 0x20 */ s8 mSubtype; /* 0x21 */ s8 mRoomNo; }; @@ -315,7 +315,7 @@ inline f32 fopAcM_searchActorDistanceY(fopAc_ac_c* actorA, fopAc_ac_c* actorB) { } inline u16 fopAcM_GetSetId(fopAc_ac_c* p_actor) { - return p_actor->mSetID; + return p_actor->mSetId; } inline void dComIfGs_onActor(int bitNo, int roomNo); diff --git a/src/SSystem/SComponent/c_m3d_g_sph.cpp b/src/SSystem/SComponent/c_m3d_g_sph.cpp index cd3bd4ae0..d6845ba71 100644 --- a/src/SSystem/SComponent/c_m3d_g_sph.cpp +++ b/src/SSystem/SComponent/c_m3d_g_sph.cpp @@ -13,18 +13,19 @@ #define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f) /* 8025238C-80252624 .text SetC__8cM3dGSphFRC4cXyz */ -void cM3dGSph::SetC(const cXyz& pos) { - CHECK_FLOAT_CLASS(21, pos.x); - CHECK_FLOAT_CLASS(22, pos.y); - CHECK_FLOAT_CLASS(23, pos.z); - CHECK_VEC3_RANGE(26, pos); - mCenter = pos; +void cM3dGSph::SetC(const cXyz& p) { + CHECK_FLOAT_CLASS(18, p.x); + CHECK_FLOAT_CLASS(19, p.y); + CHECK_FLOAT_CLASS(20, p.z); + CHECK_VEC3_RANGE(23, p); + mCenter = p; } /* 80252624-80252750 .text SetR__8cM3dGSphFf */ void cM3dGSph::SetR(float r) { CHECK_FLOAT_CLASS(32, r); CHECK_FLOAT_RANGE(33, r); + mRadius = r; } /* 80252750-8025277C .text cross__8cM3dGSphCFPC8cM3dGSphP4cXyz */ diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index beaa58772..3e73bc41e 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -794,10 +794,10 @@ void dNpc_EventCut_c::cutTurnToActorStart() { u32* set = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "SetId"); if(set) { - mSetID = *set; + mSetId = *set; } else { - mSetID = 0; + mSetId = 0; } Vec* pos = dComIfGp_evmng_getMyVec3dP(mEvtStaffId, "OffsetPos"); @@ -860,7 +860,7 @@ void dNpc_EventCut_c::cutTurnToActorStart() { } void dNpc_EventCut_c::cutTurnToActorProc() { - if(mSetID != 0) { + if(mSetId != 0) { mTargetActorPos.set(0.0f, 0.0f, 0.0f); fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this); } @@ -957,10 +957,10 @@ void dNpc_EventCut_c::cutMoveToActorStart() { } if(set == 0) { - mSetID = 0; + mSetId = 0; } else { - mSetID = *set; + mSetId = *set; } if(speed == 0) { @@ -986,7 +986,7 @@ void dNpc_EventCut_c::cutMoveToActorStart() { } void dNpc_EventCut_c::cutMoveToActorProc() { - if(mSetID != 0) { + if(mSetId != 0) { mTargetActorPos.set(0.0f, 0.0f, 0.0f); fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this); } @@ -1037,7 +1037,7 @@ fopAc_ac_c* dNpc_EventCut_c::findActorCallBack(fopAc_ac_c* pActor, void* pData) return 0; } - if(cut->mSetID != 0 && pActor->mSetID == cut->mSetID) { + if(cut->mSetId != 0 && pActor->mSetId == cut->mSetId) { cut->mTargetActorPos = pActor->current.pos; cut->mpTargetActor = pActor; diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp index 6e5ad7b05..395489105 100644 --- a/src/f_op/f_op_actor.cpp +++ b/src/f_op/f_op_actor.cpp @@ -29,24 +29,26 @@ s32 fopAc_IsActor(void* pProc) { extern void drawActorPointMiniMap(fopAc_ac_c*); /* 80023540-8002362C .text fopAc_Draw__FPv */ -void fopAc_Draw(void* pProc) { - if (dMenu_flag()) - return; - +s32 fopAc_Draw(void* pProc) { fopAc_ac_c * actor = (fopAc_ac_c *)pProc; - if ((dComIfGp_event_moveApproval(pProc) == 2 || !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && - (!fopAcM_checkStatus(actor, fopAcStts_CULL_e) || fopAcM_cullingCheck(actor)) && - !fopAcM_checkStatus(actor, fopAcStts_NODRAW_e)) { - fopAcM_OffCondition(actor, fopAcCnd_NODRAW_e); - fpcLf_DrawMethod(actor->mpDrawMtd, actor); - } else { - fopAcM_OnCondition(actor, fopAcCnd_NODRAW_e); + s32 ret = TRUE; + + if (!dMenu_flag()) { + if ((dComIfGp_event_moveApproval(actor) == 2 || !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && + (!fopAcM_checkStatus(actor, fopAcStts_CULL_e) || !fopAcM_cullingCheck(actor)) && !fopAcM_checkStatus(actor, fopAcStts_NODRAW_e)) { + fopAcM_OffCondition(actor, fopAcCnd_NODRAW_e); + ret = fpcLf_DrawMethod((leafdraw_method_class*)actor->mSubMtd, actor); + } else { + fopAcM_OnCondition(actor, fopAcCnd_NODRAW_e); + } + + fopAcM_OffStatus(actor, fopAcStts_NODRAW_e); + + if (dComIfGp_roomControl_getStayNo() >= 0 && fopAcM_checkStatus(actor, fopAcStts_SHOWMAP_e)) + drawActorPointMiniMap(actor); } - fopAcM_OffStatus(actor, fopAcStts_NODRAW_e); - - if (dComIfGp_roomControl_getStayNo() >= 0 && fopAcM_checkStatus(actor, fopAcStts_SHOWMAP_e)) - drawActorPointMiniMap(actor); + return ret; } #define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1)); @@ -111,8 +113,57 @@ s32 fopAc_Delete(void* pProc) { } /* 80023CD4-80023F78 .text fopAc_Create__FPv */ -void fopAc_Create(void*) { - /* Nonmatching */ +s32 fopAc_Create(void* pProc) { + fopAc_ac_c* actor = (fopAc_ac_c*)pProc; + + if (fpcM_IsFirstCreating(actor)) { + actor_process_profile_definition* profile = (actor_process_profile_definition*)fpcM_GetProfile(pProc); + actor->mAcType = fpcBs_MakeOfType(&g_fopAc_type); + actor->mSubMtd = profile->mSubMtd; + fopAcTg_Init(&actor->mAcTg, actor); + fopAcTg_ToActorQ(&actor->mAcTg); + fopDwTg_Init(&actor->mDwTg, actor); + actor->mStatus = profile->mStatus; + actor->mGroup = profile->mGroup; + actor->mCullType = profile->mCullType; + + fopAcM_prm_class* prm = fopAcM_GetAppend(actor); + if (prm != NULL) { + fopAcM_SetParam(actor, prm->mParameter); + actor->orig.pos = prm->mPos; + actor->orig.angle = prm->mAngle; + actor->shape_angle = prm->mAngle; + actor->mParentPcId = prm->mParentPcId; + actor->mSubtype = prm->mSubtype; + actor->mCarryType = prm->mGbaName; + actor->mScale.set(prm->mScale[0] * 0.1f, prm->mScale[1] * 0.1f, prm->mScale[2] * 0.1f); + actor->mSetId = prm->mSetId; + actor->orig.roomNo = prm->mRoomNo; + } + + actor->next = actor->orig; + actor->current = actor->orig; + actor->mEyePos = actor->orig.pos; + actor->mMaxFallSpeed = -100.0f; + actor->mAttentionInfo.mDistances[0] = 1; + actor->mAttentionInfo.mDistances[1] = 2; + actor->mAttentionInfo.mDistances[2] = 3; + actor->mAttentionInfo.mDistances[3] = 7; + actor->mAttentionInfo.mDistances[4] = 8; + actor->mAttentionInfo.mDistances[7] = 15; + actor->mAttentionInfo.mDistances[5] = 16; + actor->mAttentionInfo.mDistances[6] = 16; + actor->mAttentionInfo.mPosition = actor->orig.pos; + dKy_tevstr_init(&actor->mTevStr, actor->orig.roomNo, 0xFF); + } + + s32 status = fpcMtd_Create((process_method_class*)actor->mSubMtd, actor); + if (status == cPhs_COMPLEATE_e) { + s32 priority = fpcLf_GetPriority(actor); + fopDwTg_ToDrawQ(&actor->mDwTg, priority); + } + + return status; } actor_method_class g_fopAc_Method = { From 267b501438a8e5725f3c0a65011fa2fb7329c04d Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 22 Sep 2023 20:32:52 -0400 Subject: [PATCH 45/89] d_a_itembase OK --- configure.py | 2 +- include/d/actor/d_a_itembase.h | 30 ++--- include/d/actor/d_a_player_link.h | 4 +- include/d/actor/d_a_shop_item.h | 6 +- include/d/d_com_inf_game.h | 33 +++++ include/d/d_drawlist.h | 10 ++ include/m_Do/m_Do_ext.h | 4 +- include/m_Do/m_Do_graphic.h | 4 + src/d/actor/d_a_arrow.cpp | 6 +- src/d/actor/d_a_item.cpp | 10 +- src/d/actor/d_a_itembase.cpp | 210 +++++++++++++++++++----------- src/d/actor/d_a_shop_item.cpp | 28 ++-- src/d/d_a_shop_item_static.cpp | 3 +- 13 files changed, 231 insertions(+), 119 deletions(-) diff --git a/configure.py b/configure.py index 9783cf3e9..c3eaeaf4b 100644 --- a/configure.py +++ b/configure.py @@ -420,7 +420,7 @@ config.libs = [ Object(NonMatching, "d/actor/d_a_hookshot.cpp"), Object(NonMatching, "d/actor/d_a_ib.cpp"), Object(NonMatching, "d/actor/d_a_item.cpp"), - Object(NonMatching, "d/actor/d_a_itembase.cpp"), + Object(Matching, "d/actor/d_a_itembase.cpp"), Object(NonMatching, "d/actor/d_a_nh.cpp"), Object(NonMatching, "d/actor/d_a_npc_fa1.cpp"), Object(NonMatching, "d/actor/d_a_obj_search.cpp"), diff --git a/include/d/actor/d_a_itembase.h b/include/d/actor/d_a_itembase.h index 355e5018e..ecd34edbe 100644 --- a/include/d/actor/d_a_itembase.h +++ b/include/d/actor/d_a_itembase.h @@ -36,9 +36,9 @@ STATIC_ASSERT(sizeof(daItemBase_c_m_data) == 0x4C); struct daItemBase_c : public fopAc_ac_c { public: - s32 DeleteBase(const char*); - s32 CreateItemHeap(const char*, short, short, short, short, short, short, short); - virtual s32 DrawBase(); + BOOL DeleteBase(const char*); + BOOL CreateItemHeap(const char*, short, short, short, short, short, short, short); + virtual BOOL DrawBase(); virtual void setListStart(); void setListEnd(); virtual void settingBeforeDraw(); @@ -46,7 +46,7 @@ public: virtual void setShadow(); virtual void animEntry(); void animPlay(float, float, float, float, float); - virtual s32 clothCreate(); + virtual BOOL clothCreate(); void getItemNo(); void getHeight(); @@ -65,21 +65,21 @@ public: public: /* 0x294 */ request_of_phase_process_class mPhs; - /* 0x29C */ J3DModel* mModel; - /* 0x2A0 */ J3DModel* mModelArrow[2]; // Extra models for arrow bundles - /* 0x2A8 */ mDoExt_btkAnm* mBtkAnm1; - /* 0x2AC */ mDoExt_btkAnm* mBtkAnm2; - /* 0x2B0 */ mDoExt_brkAnm* mBrkAnm1; - /* 0x2B4 */ mDoExt_brkAnm* mBrkAnm2; - /* 0x2B8 */ mDoExt_bckAnm* mBckAnm; + /* 0x29C */ J3DModel* mpModel; + /* 0x2A0 */ J3DModel* mpModelArrow[2]; // Extra models for arrow bundles + /* 0x2A8 */ mDoExt_btkAnm* mpBtkAnm1; + /* 0x2AC */ mDoExt_btkAnm* mpBtkAnm2; + /* 0x2B0 */ mDoExt_brkAnm* mpBrkAnm1; + /* 0x2B4 */ mDoExt_brkAnm* mpBrkAnm2; + /* 0x2B8 */ mDoExt_bckAnm* mpBckAnm; /* 0x2BC */ dBgS_ObjAcch mAcch; /* 0x480 */ dBgS_AcchCir mAcchCir; /* 0x4C0 */ dCcD_Stts mStts; /* 0x4FC */ dCcD_Cyl mCyl; - /* 0x62C */ u8 field14_0x62c[0x630 - 0x62C]; - /* 0x630 */ int mPickupFlag; - /* 0x634 */ int field19_0x634; - /* 0x638 */ short field20_0x638; + /* 0x62C */ s32 mShadowId; + /* 0x630 */ s32 mPickupFlag; + /* 0x634 */ s32 field_0x634; + /* 0x638 */ s16 field_0x638; /* 0x63A */ u8 m_itemNo; /* 0x63B */ u8 mDrawFlags; }; diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index 1be6bde25..c430044e4 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -1037,6 +1037,8 @@ public: void procCutKesa_init(); void procCutKesa(); void checkNoControll() const; + + J3DAnmTevRegKey* getBombBrk() { return mpBombBrk; } /* 0x0320 */ request_of_phase_process_class mPhsLoad; /* 0x0328 */ J3DModelData* mpModelData; @@ -1093,7 +1095,7 @@ public: /* 0x2E98 */ J3DModel* mpHeldItemModel; /* 0x2E9C */ mDoExt_bckAnm mSwordAnim; /* 0x2EAC */ u8 field_0x2EAC[0x2EB0 - 0x2EAC]; - /* 0x2EB0 */ J3DAnmTevRegKey* field_0x2eb0; + /* 0x2EB0 */ J3DAnmTevRegKey* mpBombBrk; /* 0x2EB4 */ J3DAnmTevRegKey* mpGwp00BrkData; /* 0x2EB8 */ J3DAnmTextureSRTKey* mpGwp00BtkData; /* 0x2EBC */ u8 field_0x2EBC[0x2ED4 - 0x2EBC]; diff --git a/include/d/actor/d_a_shop_item.h b/include/d/actor/d_a_shop_item.h index 0c375c341..a417861d2 100644 --- a/include/d/actor/d_a_shop_item.h +++ b/include/d/actor/d_a_shop_item.h @@ -14,7 +14,7 @@ struct daShopItem_c : public daItemBase_c { char* getShopArcname(); s16 getShopBmdIdx(); void CreateInit(); - int _create(); + inline int _create(); bool _execute(); void set_mtx(); bool _draw(); @@ -23,7 +23,7 @@ struct daShopItem_c : public daItemBase_c { void setListStart() {} void settingBeforeDraw(); void setTevStr(); - s32 clothCreate(); + BOOL clothCreate(); //funcs in d_a_shop_item_static cXyz* getScaleP(); @@ -35,7 +35,7 @@ struct daShopItem_c : public daItemBase_c { static const char m_cloth_arcname[]; static const f32 m_cullfar_max; - static const u8 mModelType[256]; + static const u8 mModelType[255]; static const daShopItem_c_m_data mData[255]; /* 0x63C */ request_of_phase_process_class field_0x63C; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 5b2677374..ee78f2695 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1119,6 +1119,10 @@ inline void dComIfGp_evmng_remove() { * === DRAWLIST === */ +int dComIfGd_setShadow(u32 id, s8 param_2, J3DModel* pModel, cXyz* pPos, f32 param_5, f32 param_6, + f32 y, f32 param_8, cBgS_PolyInfo& pFloorPoly, dKy_tevstr_c* param_10, + s16 rotY, f32 param_12, GXTexObj* pTexObj); + inline int dComIfGd_setSimpleShadow(cXyz* pPos, f32 param_1, f32 param_2, cXyz* param_3, s16 angle, f32 param_5, GXTexObj* pTex) { return g_dComIfG_gameInfo.drawlist.setSimpleShadow(pPos, param_1, param_2, param_3, angle, @@ -1165,15 +1169,44 @@ inline void dComIfGd_setList() { g_dComIfG_gameInfo.drawlist.setXluList(); } +inline void dComIfGd_setListMaskOff() { + g_dComIfG_gameInfo.drawlist.setOpaListMaskOff(); + g_dComIfG_gameInfo.drawlist.setXluListMaskOff(); +} + inline void dComIfGd_setListSky() { g_dComIfG_gameInfo.drawlist.setOpaListSky(); g_dComIfG_gameInfo.drawlist.setXluListSky(); } +inline void dComIfGd_setListP0() { + g_dComIfG_gameInfo.drawlist.setOpaListP0(); + g_dComIfG_gameInfo.drawlist.setXluListP0(); +} + +inline void dComIfGd_setListP1() { + g_dComIfG_gameInfo.drawlist.setOpaListP1(); + g_dComIfG_gameInfo.drawlist.setXluListP1(); +} + +inline void dComIfGd_setListBG() { + g_dComIfG_gameInfo.drawlist.setOpaListBG(); +} + inline void dComIfGd_setXluListBG() { g_dComIfG_gameInfo.drawlist.setXluListBG(); } +inline void dComIfGd_setListFilter() { + g_dComIfG_gameInfo.drawlist.setOpaListFilter(); + g_dComIfG_gameInfo.drawlist.setXluListFilter(); +} + +inline void dComIfGd_setList2D() { + g_dComIfG_gameInfo.drawlist.setOpaList2D(); + g_dComIfG_gameInfo.drawlist.setXluList2D(); +} + inline void dComIfGd_entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) { g_dComIfG_gameInfo.drawlist.entryZSortXluList(i_packet, param_1); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 4434b1ae6..aeb763ce9 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -214,10 +214,20 @@ public: void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, OPA_BUFFER); } void setOpaList() { setOpaDrawList(mpBufInvisibleModelOpa); } void setXluList() { setXluDrawList(mpBufInvisibleModelXlu); } + void setOpaListMaskOff() { setOpaDrawList(mpBufInvisibleModelMaskOffOpa); } + void setXluListMaskOff() { setXluDrawList(mpBufInvisibleModelMaskOffXlu); } void setOpaListSky() { setOpaDrawList(mpBufSkyOpa); } void setXluListSky() { setXluDrawList(mpBufSkyXlu); } + void setOpaListP0() { setOpaDrawList(mpLinkBuf); } + void setXluListP0() { setXluDrawList(mpLinkBuf); } + void setOpaListP1() { setOpaDrawList(field_0x0000c); } + void setXluListP1() { setXluDrawList(field_0x00010); } void setOpaListBG() { setOpaDrawList(mpBufWorldOpa); } void setXluListBG() { setXluDrawList(mpBufWorldXlu); } + void setOpaListFilter() { setOpaDrawList(mpWetherFxBuffer); } + void setXluListFilter() { setXluDrawList(mpWetherFxBuffer); } + void setOpaList2D() { setOpaDrawList(field_0x00038); } + void setXluList2D() { setXluDrawList(field_0x00038); } void entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) { entryZSortXluDrawList(mpBufInvisibleModelXlu, i_packet, param_1); diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 089c1128a..69b55b32b 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -45,13 +45,13 @@ class mDoExt_btkAnm : public mDoExt_baseAnm { public: mDoExt_btkAnm() { mpTexMtxAnm = NULL; } int init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, - int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, bool i_entry); + int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); void entry(J3DMaterialTable* i_matTable, f32 i_frame); void entry(J3DModelData *i_modelData, f32 i_frame); void entry(J3DModelData* i_modelData) { entry(i_modelData, getFrame()); } int init(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, int i_attribute, - f32 i_rate, s16 i_start, s16 i_end, bool i_modify, bool i_entry); + f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry); int remove(J3DModelData* i_modelData) { return i_modelData->removeTexMtxAnimator(mpAnm); } void entryFrame() { entryFrame(getFrame()); } diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index 3d3ca202b..024800f41 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -47,6 +47,7 @@ public: static bool isAutoForcus() { return data_80450BE7; } */ static void setTickRate(u32 rate) { JFWDisplay::getManager()->setTickRate(rate); } static void waitBlanking(int wait) { JFWDisplay::getManager()->waitBlanking(wait); } + static BOOL isMonotone() { return mMonotone; } static ResTIMG* getFrameBufferTimg() { return mFrameBufferTimg; } static void* getFrameBufferTex() { return mFrameBufferTex; } @@ -74,6 +75,9 @@ public: static bool mBlureFlag; static u8 mBlureRate; static u8 mFade; + static u8 mMonotone; + static s16 mMonotoneRate; + static s16 mMonotoneRateSpeed; }; #endif /* M_DO_M_DO_GRAPHIC_H */ \ No newline at end of file diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index a0c831c18..1e3061296 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -226,8 +226,10 @@ void daArrow_c::setKeepMatrix() { daPy_py_c* player = daPy_getPlayerActorClass(); mDoMtx_stack_c::transS(0.7f, -0.07f, -0.2f); - // TODO: How did they pass an unsigned short (0xB0B6) to a function that takes a signed short? - mDoMtx_stack_c::XYZrotM(0xB0B6, 0x238E, -0x6333); + // This function takes three signed shorts, but one of the literals passed here is unsigned. + // X rotation must be a float literal to force the compiler to pass an unsigned short. + // Z rotation must be an int literal to pass a signed short as normal. + mDoMtx_stack_c::XYZrotM((248.5f*65536)/360, 0x238E, -0x6333); MtxP handMtx = player->getLeftHandMatrix(); cMtx_concat(handMtx, mDoMtx_stack_c::get(), mDoMtx_stack_c::get()); diff --git a/src/d/actor/d_a_item.cpp b/src/d/actor/d_a_item.cpp index e6a661a98..1f5a2e500 100644 --- a/src/d/actor/d_a_item.cpp +++ b/src/d/actor/d_a_item.cpp @@ -120,7 +120,7 @@ void daItem_c::CreateInit() { mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, speedPtr = &speed, NULL, NULL); mAcch.m_flags &= ~0x400; mAcch.m_flags &= ~0x8; - mCullMtx = mModel->mBaseTransformMtx; + mCullMtx = mpModel->mBaseTransformMtx; mStts.Init(0, 0xFF, this); mCyl.Set(m_cyl_src); mCyl.SetStts(&mStts); @@ -329,13 +329,13 @@ void daItem_c::setTevStr() { mTevStr.mColorK0.r = 0xFF; mTevStr.mColorK0.g = 0xFF; mTevStr.mColorK0.b = 0xFF; - g_env_light.setLightTevColorType(mModel, &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); for (int i = 0; i < 2; i++) { - if (!mModelArrow[i]) { + if (!mpModelArrow[i]) { continue; } - g_env_light.setLightTevColorType(mModelArrow[i], &mTevStr); + g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr); } } @@ -405,7 +405,7 @@ void daItem_c::setItemTimer(int timer) { /* 800F6E74-800F6EC8 .text checkPlayerGet__8daItem_cFv */ BOOL daItem_c::checkPlayerGet() { - if (field20_0x638 < getData()->field47_0x42) { + if (field_0x638 < getData()->field47_0x42) { return FALSE; } if (mCurState == 3) { diff --git a/src/d/actor/d_a_itembase.cpp b/src/d/actor/d_a_itembase.cpp index 8641fa5df..2e50af0eb 100644 --- a/src/d/actor/d_a_itembase.cpp +++ b/src/d/actor/d_a_itembase.cpp @@ -4,188 +4,250 @@ // #include "d/actor/d_a_itembase.h" +#include "d/d_item.h" #include "d/d_item_data.h" #include "d/d_resorce.h" #include "d/d_drawlist.h" #include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_graphic.h" #include "JSystem/JUtility/JUTAssert.h" #include "d/d_item_data.h" #include "d/d_com_inf_game.h" +#include "d/actor/d_a_player_link.h" #include "dolphin/types.h" /* 800F8A14-800F8A3C .text DeleteBase__12daItemBase_cFPCc */ -s32 daItemBase_c::DeleteBase(const char* resName) { +BOOL daItemBase_c::DeleteBase(const char* resName) { dComIfG_resDelete(&mPhs, resName); - return 1; + return TRUE; } /* 800F8A3C-800F8A44 .text clothCreate__12daItemBase_cFv */ -s32 daItemBase_c::clothCreate() { - return 1; +BOOL daItemBase_c::clothCreate() { + return TRUE; } /* 800F8A44-800F9074 .text CreateItemHeap__12daItemBase_cFPCcsssssss */ -s32 daItemBase_c::CreateItemHeap(const char* resName, short resIdx, short btkAnm1, short btkAnm2, short brkAnm1, short brkAnm2, short bckAnm, short) { - /* Nonmatching */ +BOOL daItemBase_c::CreateItemHeap(const char* resName, short resIdx, short btkAnm1, short btkAnm2, short brkAnm1, short brkAnm2, short bckAnm, short) { JUT_ASSERT(78, 0 <= m_itemNo && m_itemNo <= 255); J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(resName, resIdx); JUT_ASSERT(85, modelData != 0); - mModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); - if (!mModel) { - return 0; + mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (!mpModel) { + return FALSE; } switch (m_itemNo) { case ARROW_30: - mModelArrow[0] = mDoExt_J3DModel__create(modelData, 8, 0x11000002); - if (!mModelArrow[0]) { - return 0; + mpModelArrow[0] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002); + if (!mpModelArrow[0]) { + return FALSE; } case ARROW_20: - mModelArrow[1] = mDoExt_J3DModel__create(modelData, 8, 0x11000002); - if (!mModelArrow[1]) { - return 0; + mpModelArrow[1] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002); + if (!mpModelArrow[1]) { + return FALSE; } break; default: - mModelArrow[1] = NULL; - mModelArrow[0] = NULL; + mpModelArrow[1] = NULL; + mpModelArrow[0] = NULL; } - mBtkAnm1 = NULL; + J3DAnmTextureSRTKey* pbtk; + mpBtkAnm1 = NULL; if (btkAnm1 != -1) { - J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm1); + pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm1); JUT_ASSERT(140, pbtk != 0); - mBtkAnm1 = new mDoExt_btkAnm(); - if (!mBtkAnm1 || !mBtkAnm1->init(modelData, pbtk, true, 2, 1.0, 0, -1, false, false)) { - return 0; + mpBtkAnm1 = new mDoExt_btkAnm(); + if (!mpBtkAnm1 || !mpBtkAnm1->init(modelData, pbtk, TRUE, 2, 1.0, 0, -1, false, 0)) { + return FALSE; } } - mBtkAnm2 = NULL; + mpBtkAnm2 = NULL; if (btkAnm2 != -1) { - J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm2); - JUT_ASSERT(172, pbtk != 0); - mBtkAnm2 = new mDoExt_btkAnm(); - if (!mBtkAnm2 || !mBtkAnm2->init(modelData, pbtk, true, 2, 1.0, 0, -1, false, false)) { - return 0; + pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm2); + JUT_ASSERT(156, pbtk != 0); + mpBtkAnm2 = new mDoExt_btkAnm(); + if (!mpBtkAnm2 || !mpBtkAnm2->init(modelData, pbtk, TRUE, 2, 1.0, 0, -1, false, 0)) { + return FALSE; } } - mBrkAnm1 = NULL; + J3DAnmTevRegKey* pbrk; + mpBrkAnm1 = NULL; if (brkAnm1 != -1) { - J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm1); + pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm1); JUT_ASSERT(172, pbrk != 0); - int shouldAnimate = dItem_data::item_resource[m_itemNo].mTevRegAnimFrameIndex == 0xFF; - mBrkAnm1 = new mDoExt_brkAnm(); - if (!mBrkAnm1 || !mBrkAnm1->init(modelData, pbrk, shouldAnimate, 2, 1.0, 0, -1, false, false)) { - return 0; + s8 tevFrm = dItem_data::getTevFrm(m_itemNo); + BOOL shouldAnimate = TRUE; + if (tevFrm != -1) { + shouldAnimate = FALSE; + } + mpBrkAnm1 = new mDoExt_brkAnm(); + if (!mpBrkAnm1 || !mpBrkAnm1->init(modelData, pbrk, shouldAnimate, 2, 1.0, 0, -1, false, false)) { + return FALSE; } } - mBrkAnm2 = NULL; + mpBrkAnm2 = NULL; if (brkAnm2 != -1) { - J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm2); + pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm2); JUT_ASSERT(197, pbrk != 0); - mBrkAnm2 = new mDoExt_brkAnm(); - if (!mBrkAnm2 || !mBrkAnm2->init(modelData, pbrk, true, 2, 1.0, 0, -1, false, false)) { - return 0; + mpBrkAnm2 = new mDoExt_brkAnm(); + if (!mpBrkAnm2 || !mpBrkAnm2->init(modelData, pbrk, TRUE, 2, 1.0, 0, -1, false, false)) { + return FALSE; } } - mBckAnm = NULL; + J3DAnmTransform* pbck; + mpBckAnm = NULL; if (bckAnm != -1) { - J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(resName, bckAnm); + pbck = (J3DAnmTransform*)dComIfG_getObjectRes(resName, bckAnm); JUT_ASSERT(212, pbck != 0); - mBckAnm = new mDoExt_bckAnm(); - if (!mBckAnm || !mBckAnm->init(modelData, pbck, true, 2, 1.0, 0, -1, false)) { - return 0; + mpBckAnm = new mDoExt_bckAnm(); + if (!mpBckAnm || !mpBckAnm->init(modelData, pbck, TRUE, 2, 1.0, 0, -1, false)) { + return FALSE; } } if (!clothCreate()) { - return 0; + return FALSE; } - return 1; + return TRUE; } /* 800F9074-800F9130 .text DrawBase__12daItemBase_cFv */ -s32 daItemBase_c::DrawBase() { +BOOL daItemBase_c::DrawBase() { setTevStr(); animEntry(); setListStart(); settingBeforeDraw(); - mDoExt_modelUpdateDL(mModel); + mDoExt_modelUpdateDL(mpModel); - if (mModelArrow[0]) { - mDoExt_modelUpdateDL(mModelArrow[0]); + if (mpModelArrow[0]) { + mDoExt_modelUpdateDL(mpModelArrow[0]); } - if (mModelArrow[1]) { - mDoExt_modelUpdateDL(mModelArrow[1]); + if (mpModelArrow[1]) { + mDoExt_modelUpdateDL(mpModelArrow[1]); } setListEnd(); setShadow(); - return 1; + return TRUE; } /* 800F9130-800F9184 .text setListStart__12daItemBase_cFv */ void daItemBase_c::setListStart() { - /* Nonmatching */ + if (!mDoGph_gInf_c::isMonotone()) { + dComIfGd_setListMaskOff(); + } else { + dComIfGd_setListP1(); + } } /* 800F9184-800F91A8 .text setListEnd__12daItemBase_cFv */ void daItemBase_c::setListEnd() { - /* Nonmatching */ + dComIfGd_setList(); } /* 800F91A8-800F9244 .text settingBeforeDraw__12daItemBase_cFv */ void daItemBase_c::settingBeforeDraw() { - /* Nonmatching */ + if (isBomb(m_itemNo)) { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + link->getBombBrk()->setFrame(0.0f); + mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL); + } + + if (m_itemNo == BOMB_BAG || m_itemNo == HUMMER || m_itemNo == SMALL_KEY) { + dDlst_texSpecmapST(&mEyePos, &mTevStr, mpModel->getModelData(), 1.0f); + } } /* 800F9244-800F92DC .text setTevStr__12daItemBase_cFv */ void daItemBase_c::setTevStr() { - /* Nonmatching */ + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + + for (int i = 0; i < 2; i++) { + if (!mpModelArrow[i]) { + continue; + } + g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr); + } } /* 800F92DC-800F93A8 .text setShadow__12daItemBase_cFv */ void daItemBase_c::setShadow() { - /* Nonmatching */ + f32 shadowSize = mScale.x * dItem_data::getShadowSize(m_itemNo); + if (!dItem_data::chkFlag(m_itemNo, 0x10)) { + dComIfGd_setSimpleShadow2( + getPositionP(), mAcch.GetGroundH(), shadowSize, mAcch.m_gnd, + 0, 1.0f, dDlst_shadowControl_c::getSimpleTex() + ); + } else { + mShadowId = dComIfGd_setShadow( + mShadowId, 1, mpModel, getPositionP(), 80.0f, shadowSize, + current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &mTevStr, + 0, 1.0f, dDlst_shadowControl_c::getSimpleTex() + ); + } } /* 800F93A8-800F94C0 .text animEntry__12daItemBase_cFv */ void daItemBase_c::animEntry() { - /* Nonmatching */ - if (mBrkAnm1) { - int constantFrame = dItem_data::item_resource[m_itemNo].mTevRegAnimFrameIndex; + if (mpBrkAnm1) { + int constantFrame = dItem_data::getTevFrm(m_itemNo); if (constantFrame != -1) { - mBrkAnm1->entry(mModel->getModelData(), constantFrame); + mpBrkAnm1->entry(mpModel->getModelData(), constantFrame); } else { - mBrkAnm1->entry(mModel->getModelData()); + mpBrkAnm1->entry(mpModel->getModelData()); } } - if (mBtkAnm1) { - mBtkAnm1->entry(mModel->getModelData()); + if (mpBtkAnm1) { + mpBtkAnm1->entry(mpModel->getModelData()); } - if (mBrkAnm2) { - mBrkAnm2->entry(mModel->getModelData()); + if (mpBrkAnm2) { + mpBrkAnm2->entry(mpModel->getModelData()); } - if (mBtkAnm2) { - mBtkAnm2->entry(mModel->getModelData()); + if (mpBtkAnm2) { + mpBtkAnm2->entry(mpModel->getModelData()); } - if (mBckAnm) { - mBckAnm->entry(mModel->getModelData()); + if (mpBckAnm) { + mpBckAnm->entry(mpModel->getModelData()); } } /* 800F94C0-800F95B8 .text animPlay__12daItemBase_cFfffff */ -void daItemBase_c::animPlay(float, float, float, float, float) { - /* Nonmatching */ +void daItemBase_c::animPlay(f32 brk1Speed, f32 brk2Speed, f32 btk1Speed, f32 btk2Speed, f32 bckSpeed) { + if (mpBrkAnm1 && dItem_data::getTevFrm(m_itemNo) == -1) { + mpBrkAnm1->setPlaySpeed(brk1Speed); + mpBrkAnm1->play(); + } + + if (mpBtkAnm1) { + mpBtkAnm1->setPlaySpeed(btk1Speed); + mpBtkAnm1->play(); + } + + if (mpBrkAnm2) { + mpBrkAnm2->setPlaySpeed(brk2Speed); + mpBrkAnm2->play(); + } + + if (mpBtkAnm2) { + mpBtkAnm2->setPlaySpeed(btk2Speed); + mpBtkAnm2->play(); + } + + if (mpBckAnm) { + mpBckAnm->setPlaySpeed(bckSpeed); + mpBckAnm->play(); + } } - diff --git a/src/d/actor/d_a_shop_item.cpp b/src/d/actor/d_a_shop_item.cpp index 78fa1bda2..190153c48 100644 --- a/src/d/actor/d_a_shop_item.cpp +++ b/src/d/actor/d_a_shop_item.cpp @@ -21,20 +21,20 @@ const f32 daShopItem_c::m_cullfar_max = 5000.0f; char* daShopItem_c::getShopArcname() { u8 type = fopAcM_GetParamBit(this, 8, 4); if(type == 1 || (type == 0 && mModelType[m_itemNo] == 0x01)) { - return dItem_data::field_item_res[m_itemNo].mModelArcName; + return dItem_data::getFieldArc(m_itemNo); } else { - return dItem_data::item_resource[m_itemNo].mModelArcName; + return dItem_data::getArcname(m_itemNo); } } s16 daShopItem_c::getShopBmdIdx() { u8 type = fopAcM_GetParamBit(this, 8, 4); if(type == 1 || (type == 0 && mModelType[m_itemNo] == 0x01)) { - return dItem_data::field_item_res[m_itemNo].mModelFileId; + return dItem_data::getFieldBmdIdx(m_itemNo); } else { - return dItem_data::item_resource[m_itemNo].mModelFileIdx; + return dItem_data::getBmdIdx(m_itemNo); } } @@ -57,10 +57,10 @@ void daShopItem_c::CreateInit() { tevType = (TevType)0x5C; } - mModel->setUserArea(0); + mpModel->setUserArea(0); } -s32 daShopItem_c::clothCreate() { +BOOL daShopItem_c::clothCreate() { if(isUseClothPacket(m_itemNo)) { dCloth_packet_c* (*clothFunc[4])(ResTIMG*, ResTIMG*, dKy_tevstr_c*, cXyz**) = {dClothVobj03_create, dClothVobj04_create, dClothVobj05_create, dClothVobj07_0_create}; u32 clothRes[4] = {0x20, 0x21, 0x22, 0x23}; @@ -96,7 +96,7 @@ s32 daShopItem_c::clothCreate() { } void daShopItem_c::set_mtx() { - mModel->setBaseScale(mScale); + mpModel->setBaseScale(mScale); MTXTrans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z); MTXCopy(mDoMtx_stack_c::get(), field_0x64C); @@ -105,7 +105,7 @@ void daShopItem_c::set_mtx() { mDoMtx_stack_c::transM(temp1.x, temp1.y, temp1.z); const SVec& temp2 = getData()[m_itemNo].field_0x18; mDoMtx_stack_c::ZXYrotM(temp2.x, temp2.y, temp2.z); - MTXCopy(mDoMtx_stack_c::get(), mModel->mBaseTransformMtx); + MTXCopy(mDoMtx_stack_c::get(), mpModel->mBaseTransformMtx); if(field_0x644 != 0) { // I have no clue why Nintendo would do this but it works @@ -139,7 +139,7 @@ bool daShopItem_c::_draw() { if(chkDraw() == 0) return 1; if(m_itemNo == WATER_STATUE || m_itemNo == POSTMAN_STATUE) { - mModel->getModelData()->getJointTree().getJointNodePointer(0)->setMtxCalc(0); + mpModel->getModelData()->getJointTree().getJointNodePointer(0)->setMtxCalc(0); } DrawBase(); @@ -150,16 +150,16 @@ bool daShopItem_c::_draw() { void daShopItem_c::settingBeforeDraw() { if(isBomb(m_itemNo) || (m_itemNo == BOMB_BAG) || (m_itemNo == HUMMER) || m_itemNo == SMALL_KEY || m_itemNo == PRESIDENT_STATUE) { - dDlst_texSpecmapST(&mEyePos, &mTevStr, mModel->getModelData(), 1.0f); + dDlst_texSpecmapST(&mEyePos, &mTevStr, mpModel->getModelData(), 1.0f); } } void daShopItem_c::setTevStr() { g_env_light.settingTevStruct(tevType, getPositionP(), &mTevStr); - g_env_light.setLightTevColorType(mModel, &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); for(int i = 0; i < 2; i++) { - if(mModelArrow[i] != 0) { - g_env_light.setLightTevColorType(mModelArrow[i], &mTevStr); + if(mpModelArrow[i] != 0) { + g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr); } } @@ -246,7 +246,7 @@ static actor_method_class daShopItemMethodTable = { (process_method_func)daShopItem_Delete, (process_method_func)daShopItem_Execute, (process_method_func)daShopItem_IsDelete, - (process_method_func)0, + (process_method_func)daShopItem_Draw, }; extern actor_process_profile_definition g_profile_ShopItem = { diff --git a/src/d/d_a_shop_item_static.cpp b/src/d/d_a_shop_item_static.cpp index 3604b2497..9ddeb63fc 100644 --- a/src/d/d_a_shop_item_static.cpp +++ b/src/d/d_a_shop_item_static.cpp @@ -263,7 +263,7 @@ const daShopItem_c_m_data daShopItem_c::mData[255] = { {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, {{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}}, }; -const u8 daShopItem_c::mModelType[256] = { +const u8 daShopItem_c::mModelType[255] = { 2, 2, 2, @@ -519,7 +519,6 @@ const u8 daShopItem_c::mModelType[256] = { 2, 2, 2, - 0 }; cXyz* daShopItem_c::getScaleP() { From f2da02f2b9a9ea84e1d48e74a6d59b1e11a8480a Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 20:02:31 -0700 Subject: [PATCH 46/89] c_lib, c_xyz, c_angle, c_bg_s_gnd_chk fix --- configure.py | 8 ++-- include/SSystem/SComponent/c_angle.h | 50 +++++++++++------------ src/SSystem/SComponent/c_angle.cpp | 6 +-- src/SSystem/SComponent/c_bg_s_gnd_chk.cpp | 2 +- src/SSystem/SComponent/c_lib.cpp | 2 +- src/SSystem/SComponent/c_xyz.cpp | 4 ++ 6 files changed, 38 insertions(+), 34 deletions(-) diff --git a/configure.py b/configure.py index a3fcdbed3..7bc9629fb 100644 --- a/configure.py +++ b/configure.py @@ -510,12 +510,12 @@ config.libs = [ Object(Matching, "SSystem/SComponent/c_request.cpp"), Object(Matching, "SSystem/SComponent/c_tag.cpp"), Object(Matching, "SSystem/SComponent/c_tag_iter.cpp"), - Object(NonMatching, "SSystem/SComponent/c_xyz.cpp"), + Object(Matching, "SSystem/SComponent/c_xyz.cpp"), Object(Matching, "SSystem/SComponent/c_sxyz.cpp"), Object(Matching, "SSystem/SComponent/c_math.cpp"), Object(NonMatching, "SSystem/SComponent/c_bg_s.cpp"), Object(Matching, "SSystem/SComponent/c_bg_s_chk.cpp"), - Object(NonMatching, "SSystem/SComponent/c_bg_s_gnd_chk.cpp"), + Object(Matching, "SSystem/SComponent/c_bg_s_gnd_chk.cpp"), Object(Matching, "SSystem/SComponent/c_bg_s_lin_chk.cpp"), Object(NonMatching, "SSystem/SComponent/c_bg_w.cpp"), Object(NonMatching, "SSystem/SComponent/c_m2d.cpp"), @@ -526,8 +526,8 @@ config.libs = [ Object(Matching, "SSystem/SComponent/c_m3d_g_pla.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_sph.cpp"), Object(Matching, "SSystem/SComponent/c_m3d_g_tri.cpp"), - Object(NonMatching, "SSystem/SComponent/c_lib.cpp"), - Object(NonMatching, "SSystem/SComponent/c_angle.cpp"), + Object(Matching, "SSystem/SComponent/c_lib.cpp"), + Object(Matching, "SSystem/SComponent/c_angle.cpp"), Object(Matching, "SSystem/SComponent/c_data_tbl.cpp"), Object(Matching, "SSystem/SStandard/s_basic.cpp"), ], diff --git a/include/SSystem/SComponent/c_angle.h b/include/SSystem/SComponent/c_angle.h index 9103b1001..13eb90cb2 100644 --- a/include/SSystem/SComponent/c_angle.h +++ b/include/SSystem/SComponent/c_angle.h @@ -23,15 +23,15 @@ public: void Val(const cSAngle&); void Val(s16); void Val(float); - float Degree(void) const; - float Radian(void) const; - float Norm(void) const; - s16 Abs(void) const; - s16 Inv(void) const; - float Sin(void) const; - float Cos(void) const; - float Tan(void) const; - cSAngle operator-(void) const; + float Degree() const; + float Radian() const; + float Norm() const; + s16 Abs() const; + s16 Inv() const; + float Sin() const; + float Cos() const; + float Tan() const; + cSAngle operator-() const; cSAngle operator+(const cSAngle&) const; cSAngle operator-(const cSAngle&) const; void operator+=(const cSAngle&); @@ -44,10 +44,10 @@ public: void operator*=(float); bool operator<(const cSAngle& other) const { return mAngle < other.mAngle; } bool operator>(const cSAngle& other) const { return mAngle > other.mAngle; } - operator s16(void) const { return mAngle; } + operator s16() const { return mAngle; } void operator=(const cSAngle& other) { mAngle = other.mAngle; } - static inline cSAngle getMaxNegative(void) { return cSAngle((s16)-0x8000); } - inline void mirrorAtMaxNeg(void) { *this = cSAngle((s16)-0x8000) - *this; } + static inline cSAngle getMaxNegative() { return cSAngle((s16)-0x8000); } + inline void mirrorAtMaxNeg() { *this = cSAngle((s16)-0x8000) - *this; } }; cSAngle operator+(short, const cSAngle&); @@ -91,11 +91,11 @@ public: cDegree(float); ~cDegree() {} - cDegree& Formal(void); + cDegree& Formal(); void Val(float); - float Radian(void) const; - float Sin(void) const; - float Cos(void) const; + float Radian() const; + float Sin() const; + float Cos() const; }; class cSPolar { @@ -107,10 +107,10 @@ private: public: cSPolar() {} cSPolar(const cXyz&); - cSPolar& Formal(void); + cSPolar& Formal(); void Val(float, short, short); void Val(const cXyz&); - cXyz Xyz(void) const; + cXyz Xyz() const; void Globe(class cSGlobe*) const; }; @@ -126,18 +126,18 @@ public: cSGlobe(float, const cSAngle&, const cSAngle&); cSGlobe(const cXyz&); ~cSGlobe() {} - cSGlobe& Formal(void); + cSGlobe& Formal(); void Val(const cSGlobe&); void Val(float, short, short); void Val(float, const cSAngle&, const cSAngle&); void Val(const cXyz&); - float R(void) const { return mRadius; } - const cSAngle& V(void) const { return mAzimuth; } - const cSAngle& U(void) const { return mInclination; } - cXyz Xyz(void) const; + float R() const { return mRadius; } + const cSAngle& V() const { return mAzimuth; } + const cSAngle& U() const { return mInclination; } + cXyz Xyz() const; void Polar(cSPolar*) const; - cXyz Norm(void) const; - cSGlobe& Invert(void); + cXyz Norm() const; + cSGlobe& Invert(); }; #endif /* C_ANGLE_H */ diff --git a/src/SSystem/SComponent/c_angle.cpp b/src/SSystem/SComponent/c_angle.cpp index 2bc4d48e8..c0090c713 100644 --- a/src/SSystem/SComponent/c_angle.cpp +++ b/src/SSystem/SComponent/c_angle.cpp @@ -326,7 +326,7 @@ void cSGlobe::Polar(cSPolar* csp) const { } /* 80254864-80254890 .text Invert__7cSGlobeFv */ -cXyz cSGlobe::Norm() const { - cSGlobe glob(1.0f, mAzimuth, mInclination); - return glob.Xyz(); +cSGlobe& cSGlobe::Invert() { + mRadius = -mRadius; + return Formal(); } diff --git a/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp b/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp index 8356377c0..ea0ace93d 100644 --- a/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp +++ b/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp @@ -10,5 +10,5 @@ cBgS_GndChk::cBgS_GndChk() { m_pos = cXyz::Zero; setActorPid(0xFFFFFFFF); - mFlags = 2; + mFlags = 3; } diff --git a/src/SSystem/SComponent/c_lib.cpp b/src/SSystem/SComponent/c_lib.cpp index 3678ef251..280a2e52c 100644 --- a/src/SSystem/SComponent/c_lib.cpp +++ b/src/SSystem/SComponent/c_lib.cpp @@ -366,7 +366,7 @@ s32 cLib_distanceAngleS(s16 x, s16 y) { return abs(static_cast(x - y)); } -static Mtx mtx[10]; +Mtx mtx[10]; Mtx* calc_mtx = mtx; diff --git a/src/SSystem/SComponent/c_xyz.cpp b/src/SSystem/SComponent/c_xyz.cpp index 3121db388..9dfc954be 100644 --- a/src/SSystem/SComponent/c_xyz.cpp +++ b/src/SSystem/SComponent/c_xyz.cpp @@ -153,3 +153,7 @@ bool cXyz::isZero(void) const { return fabsf(this->x) < 3.8146972e-06f && fabsf(this->y) < 3.8146972e-06f && fabsf(this->z) < 3.8146972e-06f; } + +// Unused, but must be in .rodata to match +static const char * fmt0 = "[%f %f %f]\n"; +static const char * fmt1 = "%s=[%f %f %f]\n"; From a6126589f02d52aacbb3847a46d470e60bd4bd64 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Sep 2023 22:10:16 -0700 Subject: [PATCH 47/89] f_op_actor_mng progress --- include/JSystem/J3DU/J3DUClipper.h | 8 +- include/d/d_map.h | 2 +- include/d/d_stage.h | 3 +- include/f_op/f_op_actor.h | 19 +- include/f_op/f_op_actor_mng.h | 21 +- include/f_pc/f_pc_base.h | 2 +- include/f_pc/f_pc_manager.h | 2 +- include/m_Do/m_Do_ext.h | 5 + src/d/d_npc.cpp | 30 +- src/d/d_stage.cpp | 12 +- src/f_op/f_op_actor.cpp | 17 +- src/f_op/f_op_actor_mng.cpp | 601 +++++++++++++++++++++-------- src/f_pc/f_pc_base.cpp | 6 +- src/f_pc/f_pc_deletor.cpp | 4 +- 14 files changed, 506 insertions(+), 226 deletions(-) diff --git a/include/JSystem/J3DU/J3DUClipper.h b/include/JSystem/J3DU/J3DUClipper.h index 8e41a7ae8..84d8a1083 100644 --- a/include/JSystem/J3DU/J3DUClipper.h +++ b/include/JSystem/J3DU/J3DUClipper.h @@ -8,10 +8,10 @@ class J3DUClipper { public: J3DUClipper() { init(); } virtual ~J3DUClipper() {} - /* 80273778 */ void init(); - /* 8027378C */ void calcViewFrustum(); - /* 802738FC */ u32 clip(f32 const (*)[4], Vec, f32) const; - /* 80273A44 */ u32 clip(f32 const (*)[4], Vec*, Vec*) const; + void init(); + void calcViewFrustum(); + u32 clip(const Mtx, Vec, f32); + u32 clip(const Mtx, Vec*, Vec*); void setFovy(f32 fovy) { mFovY = fovy; } void setAspect(f32 aspect) { mAspect = aspect; } diff --git a/include/d/d_map.h b/include/d/d_map.h index bbb0695ee..2144dae13 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -63,7 +63,7 @@ public: void drawPointAgb(u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); void getTypeAgbGcFromTypeAcs(u8, u8*, u8*); void drawPointSingle(u8, f32, f32, f32, s8, s16, u8, u8, u8); - void drawActorPointMiniMap(fopAc_ac_c*); + static void drawActorPointMiniMap(fopAc_ac_c*); void mapBufferSendAGB_commonCursor(); void mapBufferSendAGB_ocean(); void mapBufferSendAGB_dungeon(); diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 322e03da0..2e0fb21db 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -162,7 +162,7 @@ public: /* 0x08 */ u32 mParameter; /* 0x0C */ cXyz mSpawnPos; /* 0x18 */ csXyz mAngle; - /* 0x1E */ u16 mEnemyNo; + /* 0x1E */ u16 mSetId; }; // Size: 0x20 class stage_actor_class { @@ -918,6 +918,7 @@ int dStage_mapInfo_GetOceanX(stage_map_info_class*); void dStage_infoCreate(); dStage_objectNameInf* dStage_searchName(const char*); +const char* dStage_getName2(s16 i_procName, s8 i_subtype); inline s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* i_stagInfo) { return (i_stagInfo->field_0x09 >> 1) & 0x7F; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index d8c9a23f7..ef0c908c3 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -170,12 +170,19 @@ struct actor_attention_types { class JntHit_c; -struct cull_sphere { +struct fopAc_cullSizeSphere { +public: + fopAc_cullSizeSphere(cXyz, float); + /* 0x0 */ Vec mCenter; /* 0xC */ f32 mRadius; }; -struct cull_box { +struct fopAc_cullSizeBox { +public: + fopAc_cullSizeBox(const fopAc_cullSizeBox&); + fopAc_cullSizeBox(cXyz, cXyz); + /* 0x0 */ Vec mMin; /* 0xC */ Vec mMax; }; @@ -186,7 +193,7 @@ public: /* 0x0C4 */ create_tag_class mAcTg; /* 0x0D8 */ create_tag_class mDwTg; /* 0x0EC */ actor_method_class* mSubMtd; - /* 0x0F0 */ JKRSolidHeap* mHeap; + /* 0x0F0 */ JKRSolidHeap* heap; /* 0x0F4 */ dEvt_info_c mEvtInfo; /* 0x10C */ dKy_tevstr_c mTevStr; /* 0x1BC */ u16 mSetId; @@ -194,7 +201,7 @@ public: /* 0x1BF */ s8 mCullType; /* 0x1C0 */ u8 mDemoActorId; /* 0x1C1 */ s8 mSubtype; - /* 0x1C2 */ u8 mCarryType; + /* 0x1C2 */ u8 mGbaName; /* 0x1C4 */ u32 mStatus; /* 0x1C8 */ u32 mCondition; /* 0x1CC */ u32 mParentPcId; @@ -206,8 +213,8 @@ public: /* 0x220 */ cXyz speed; /* 0x22C */ MtxP mCullMtx; union { - /* 0x230 */ cull_box mBox; - /* 0x230 */ cull_sphere mSphere; + /* 0x230 */ fopAc_cullSizeBox mBox; + /* 0x230 */ fopAc_cullSizeSphere mSphere; } mCull; /* 0x248 */ f32 mCullSizeFar; /* 0x24C */ J3DModel* model; diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index e0984a758..c8c2f06d0 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -99,10 +99,6 @@ enum fopAcM_CARRY { /* 0x30 */ fopAcM_CARRY_UNK_30 = 0x30, }; -inline u32 fopAcM_CheckCarryType(fopAc_ac_c* actor, fopAcM_CARRY type) { - return actor->mCarryType & type; -} - inline u32 fopAcM_checkHookCarryNow(fopAc_ac_c* pActor) { return fopAcM_checkStatus(pActor, 0x100000); } @@ -143,10 +139,6 @@ inline fopAc_ac_c* fopAcM_Search(fopAcIt_JudgeFunc func, void* param) { return (fopAc_ac_c*)fopAcIt_Judge(func, param); } -inline fopAc_ac_c* fopAcM_SearchByID(unsigned int id) { - return (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeByID, &id); -} - inline cXyz& fopAcM_GetPosition_p(fopAc_ac_c* pActor) { return pActor->current.pos; } @@ -296,6 +288,10 @@ inline BOOL fopAcM_isSwitch(fopAc_ac_c* pActor, int sw) { return dComIfGs_isSwitch(sw, fopAcM_GetHomeRoomNo(pActor)); } +inline fopAc_ac_c* fopAcM_SearchByID(unsigned int id) { + return (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeByID, &id); +} + inline fopAc_ac_c* fopAcM_SearchByName(s16 proc_id) { return (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeForPName, &proc_id); } @@ -345,14 +341,11 @@ fopAcM_prm_class* createAppend(u16 enemyNo, u32 parameters, cXyz* p_pos, int roo void fopAcM_Log(fopAc_ac_c* p_actor, char* str); -void fopAcM_delete(fopAc_ac_c* p_actor); - +s32 fopAcM_delete(fopAc_ac_c* p_actor); s32 fopAcM_delete(unsigned int actorID); s32 fopAcM_create(char*, u32 i_parameter, cXyz* i_pos, int i_roomNo, csXyz* i_angle, cXyz* i_scale, createFunc i_createFunc); - -s32 fopAcM_create(s16 i_procName, u32 i_parameter, cXyz* i_pos, int i_roomNo, csXyz* i_angle, - cXyz* i_scale, s8 i_subType, createFunc i_createFunc); +s32 fopAcM_create(s16 i_procName, u32 i_parameter, cXyz* i_pos, int i_roomNo, csXyz* i_angle, cXyz* i_scale, s8 i_subType, createFunc i_createFunc); inline s32 fopAcM_create(s16 i_procName, createFunc i_createFunc, void*); @@ -549,7 +542,7 @@ inline void fopAcM_seStartCurrent(fopAc_ac_c* actor, u32 sfxID, u32 param_2) { inline void fopAcM_seStart(fopAc_ac_c* actor, u32 sfxID, u32 param_2) { s8 roomNo = fopAcM_GetRoomNo(actor); - // mDoAud_seStart(sfxID, &actor->mEyePos, param_2, dComIfGp_getReverb(roomNo)); + mDoAud_seStart(sfxID, &actor->mEyePos, param_2, dComIfGp_getReverb(roomNo)); } extern "C" { diff --git a/include/f_pc/f_pc_base.h b/include/f_pc/f_pc_base.h index 856c99a54..935a6cf31 100644 --- a/include/f_pc/f_pc_base.h +++ b/include/f_pc/f_pc_base.h @@ -20,7 +20,7 @@ typedef struct base_process_class { /* 0x0B */ u8 mPauseFlag; /* 0x0C */ s8 mInitState; /* 0x0D */ u8 mUnk2; - /* 0x0E */ s16 mBsTypeId; + /* 0x0E */ s16 mProfName; /* 0x10 */ process_profile_definition* mpProf; /* 0x14 */ struct create_request* mpCtRq; /* 0x18 */ layer_management_tag_class mLyTg; diff --git a/include/f_pc/f_pc_manager.h b/include/f_pc/f_pc_manager.h index 5b16ccd0a..602c62b57 100644 --- a/include/f_pc/f_pc_manager.h +++ b/include/f_pc/f_pc_manager.h @@ -30,7 +30,7 @@ inline void fpcM_SetParam(void* p_actor, u32 param) { } inline s16 fpcM_GetProfName(const void* pActor) { - return ((base_process_class*)pActor)->mBsTypeId; + return ((base_process_class*)pActor)->mProfName; } inline int fpcM_Create(s16 procName, FastCreateReqFunc createFunc, void* process) { diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 69b55b32b..1134616e4 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -327,6 +327,11 @@ int mDoExt_getSafeGameHeapSize(); int mDoExt_getSafeZeldaHeapSize(); int mDoExt_getSafeCommandHeapSize(); +JKRSolidHeap * mDoExt_createSolidHeapFromGameToCurrent(u32 size, u32 align); +void mDoExt_restoreCurrentHeap(); +void mDoExt_adjustSolidHeap(JKRSolidHeap * pHeap); +void mDoExt_destroySolidHeap(JKRSolidHeap * pHeap); + extern JKRExpHeap* zeldaHeap; extern JKRExpHeap* gameHeap; extern JKRExpHeap* commandHeap; diff --git a/src/d/d_npc.cpp b/src/d/d_npc.cpp index 3e73bc41e..31a54e950 100644 --- a/src/d/d_npc.cpp +++ b/src/d/d_npc.cpp @@ -101,7 +101,7 @@ dPath* dNpc_PathRun_c::nextPath(s8 roomNo) { cXyz dNpc_PathRun_c::getPoint(u8 pointIdx) { cXyz point(0.0f, 0.0f, 0.0f); - if(mPath != 0 && pointIdx < mPath->mNum) { + if(mPath != 0 && pointIdx < mPath->m_num) { point = mPath->mpPnt[pointIdx].mPos; } @@ -118,8 +118,8 @@ bool dNpc_PathRun_c::incIdx() { if(mPath != 0) { mCurrPointIndex += 1; - if(mCurrPointIndex >= mPath->mNum) { - mCurrPointIndex = mPath->mNum - 1; + if(mCurrPointIndex >= mPath->m_num) { + mCurrPointIndex = mPath->m_num - 1; ret = false; } } @@ -132,7 +132,7 @@ bool dNpc_PathRun_c::incIdxLoop() { if(mPath != 0) { mCurrPointIndex += 1; - if(mCurrPointIndex >= mPath->mNum) { + if(mCurrPointIndex >= mPath->m_num) { mCurrPointIndex = 0; ret = false; } @@ -147,14 +147,14 @@ bool dNpc_PathRun_c::incIdxAuto() { if(mPath != 0) { if(mPath->mLoops & 1) { mCurrPointIndex += 1; - if(mCurrPointIndex >= mPath->mNum) { + if(mCurrPointIndex >= mPath->m_num) { mCurrPointIndex = 0; } } else { mCurrPointIndex += 1; - if(mCurrPointIndex >= mPath->mNum) { - mCurrPointIndex = mPath->mNum - 1; + if(mCurrPointIndex >= mPath->m_num) { + mCurrPointIndex = mPath->m_num - 1; hitEnd = false; } } @@ -168,7 +168,7 @@ bool dNpc_PathRun_c::decIdx() { if(mPath != 0) { mCurrPointIndex -= 1; - if(mCurrPointIndex >= mPath->mNum) { + if(mCurrPointIndex >= mPath->m_num) { mCurrPointIndex = 0; ret = false; } @@ -182,8 +182,8 @@ bool dNpc_PathRun_c::decIdxLoop() { if(mPath != 0) { mCurrPointIndex -= 1; - if(mCurrPointIndex >= mPath->mNum) { - mCurrPointIndex = mPath->mNum - 1; + if(mCurrPointIndex >= mPath->m_num) { + mCurrPointIndex = mPath->m_num - 1; ret = false; } } @@ -197,13 +197,13 @@ bool dNpc_PathRun_c::decIdxAuto() { if(mPath != 0) { if(mPath->mLoops & 1) { mCurrPointIndex -= 1; - if(mCurrPointIndex >= mPath->mNum) { - mCurrPointIndex = mPath->mNum - 1; + if(mCurrPointIndex >= mPath->m_num) { + mCurrPointIndex = mPath->m_num - 1; } } else { mCurrPointIndex -= 1; - if(mCurrPointIndex >= mPath->mNum) { + if(mCurrPointIndex >= mPath->m_num) { mCurrPointIndex = 0; hitEnd = false; } @@ -275,7 +275,7 @@ s32 dNpc_PathRun_c::absIdx(u8 startIdx, u8 lastIdx) { u8 dNpc_PathRun_c::maxPoint() { u8 max = 0xFF; if(mPath != 0) { - max = mPath->mNum; + max = mPath->m_num; } return max; @@ -283,7 +283,7 @@ u8 dNpc_PathRun_c::maxPoint() { u8 dNpc_PathRun_c::pointArg(u8 idx) { u8 arg = 0; - if(mPath != 0 && idx < (u8)mPath->mNum) { + if(mPath != 0 && idx < (u8)mPath->m_num) { arg = mPath->mpPnt[idx].mArg3; } diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 3c9d97e15..550fc271a 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -1282,7 +1282,7 @@ int dStage_playerInit(dStage_dt_c* i_stage, void* i_data, int num, void* param_3 appen->mParameter = player_data->mParameter; appen->mPos = player_data->mSpawnPos; appen->mAngle = player_data->mAngle; - appen->mEnemyNo = player_data->mEnemyNo; + appen->mSetId = player_data->mSetId; if (roomParam != 0 && (int)((appen->mParameter >> 0xC) & 0xF) != 2) { appen->mParameter = (roomParam & 0xFFFFFFC0) | (appen->mParameter & 0x3F); @@ -1290,7 +1290,7 @@ int dStage_playerInit(dStage_dt_c* i_stage, void* i_data, int num, void* param_3 } dComIfGs_setRestartRoomParam(0); - appen->mEnemyNo = 0xFFFF; + appen->mSetId = 0xFFFF; appen->mRoomNo = -1; dComIfGp_getStartStage()->set(dComIfGp_getStartStageName(), appen->mParameter & 0x3F, @@ -1501,14 +1501,14 @@ int dStage_actorInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { stage_actor_data_class* actor_data = actor->m_entries; for (int i = 0; i < actor->num; i++) { - if (!dComIfGs_isActor(actor_data->mEnemyNo, i_stage->getRoomNo())) { + if (!dComIfGs_isActor(actor_data->mSetId, i_stage->getRoomNo())) { fopAcM_prm_class* appen = fopAcM_CreateAppend(); if (appen != NULL) { appen->mParameter = actor_data->mParameter; appen->mPos = actor_data->mSpawnPos; appen->mAngle = actor_data->mAngle; - appen->mEnemyNo = actor_data->mEnemyNo; + appen->mSetId = actor_data->mSetId; appen->mRoomNo = i_stage->getRoomNo(); dStage_actorCreate(actor_data, appen); } @@ -1531,7 +1531,7 @@ int dStage_tgscInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { appen->mParameter = actor_data->mParameter; appen->mPos = actor_data->mSpawnPos; appen->mAngle = actor_data->mAngle; - appen->mEnemyNo = actor_data->mEnemyNo; + appen->mSetId = actor_data->mSetId; appen->mRoomNo = i_stage->getRoomNo(); appen->mScale[0] = actor_data->field_0x20; appen->mScale[1] = actor_data->field_0x21; @@ -1553,7 +1553,7 @@ int dStage_roomReadInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* i_f roomRead_data_class ** ppEntry = pRoom->m_entries; for (s32 i = 0; i < room_info->m_entryNum; i++, ppEntry++) { - (u8*)(*ppEntry) = (u8*)(i_file) + (u32)ppEntry; + // (u8*)(*ppEntry) = (u8*)(i_file) + (u32)ppEntry; roomRead_data_class * pEntry = *ppEntry; pEntry->field_0x4 = (u8*)(i_file) + ((u32)pEntry->field_0x4); } diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp index 395489105..ed0c9404e 100644 --- a/src/f_op/f_op_actor.cpp +++ b/src/f_op/f_op_actor.cpp @@ -26,16 +26,15 @@ s32 fopAc_IsActor(void* pProc) { return fpcBs_Is_JustOfType(g_fopAc_type, ((fopAc_ac_c*)pProc)->mAcType); } -extern void drawActorPointMiniMap(fopAc_ac_c*); - /* 80023540-8002362C .text fopAc_Draw__FPv */ s32 fopAc_Draw(void* pProc) { fopAc_ac_c * actor = (fopAc_ac_c *)pProc; s32 ret = TRUE; if (!dMenu_flag()) { - if ((dComIfGp_event_moveApproval(actor) == 2 || !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && - (!fopAcM_checkStatus(actor, fopAcStts_CULL_e) || !fopAcM_cullingCheck(actor)) && !fopAcM_checkStatus(actor, fopAcStts_NODRAW_e)) { + s32 moveApproval = dComIfGp_event_moveApproval(actor); + + if ((moveApproval == 2 || !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && (!(fopAcM_checkStatus(actor, fopAcStts_CULL_e) && !fopAcM_cullingCheck(actor)) || !fopAcM_checkStatus(actor, fopAcStts_NODRAW_e))) { fopAcM_OffCondition(actor, fopAcCnd_NODRAW_e); ret = fpcLf_DrawMethod((leafdraw_method_class*)actor->mSubMtd, actor); } else { @@ -45,7 +44,7 @@ s32 fopAc_Draw(void* pProc) { fopAcM_OffStatus(actor, fopAcStts_NODRAW_e); if (dComIfGp_roomControl_getStayNo() >= 0 && fopAcM_checkStatus(actor, fopAcStts_SHOWMAP_e)) - drawActorPointMiniMap(actor); + dMap_c::drawActorPointMiniMap(actor); } return ret; @@ -68,15 +67,15 @@ s32 fopAc_Execute(void* pProc) { actor->mEvtInfo.setCondition(dEvtCnd_NONE_e); s32 moveApproval = dComIfGp_event_moveApproval(actor); - if (moveApproval == 2 || (moveApproval != 0 && !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && - !fopAcM_checkStatus(actor, fopAcStts_NOEXEC_e) || !fopAcM_CheckCondition(actor, fopAcStts_NODRAW_e)) { + + if ((moveApproval == 2 || moveApproval != 0 || !fopAcM_checkStatus(actor, fopAc_ac_c::stopStatus)) && (!fopAcM_checkStatus(actor, fopAcStts_NOEXEC_e) || !fopAcM_CheckCondition(actor, fopAcCnd_NODRAW_e))) { fopAcM_OffCondition(actor, fopAcCnd_NOEXEC_e); actor->next = actor->current; ret = fpcMtd_Execute((process_method_class*)actor->mSubMtd, actor); } else { fopAcM_OnCondition(actor, fopAcCnd_NOEXEC_e); } - + CHECK_FLOAT_CLASS(0x2b4, actor->current.pos.x); CHECK_FLOAT_CLASS(0x2b5, actor->current.pos.y); CHECK_FLOAT_CLASS(0x2b6, actor->current.pos.z); @@ -135,7 +134,7 @@ s32 fopAc_Create(void* pProc) { actor->shape_angle = prm->mAngle; actor->mParentPcId = prm->mParentPcId; actor->mSubtype = prm->mSubtype; - actor->mCarryType = prm->mGbaName; + actor->mGbaName = prm->mGbaName; actor->mScale.set(prm->mScale[0] * 0.1f, prm->mScale[1] * 0.1f, prm->mScale[2] * 0.1f); actor->mSetId = prm->mSetId; actor->orig.roomNo = prm->mRoomNo; diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index fca2ed4e7..aeea87fe0 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -4,185 +4,506 @@ // #include "f_op/f_op_actor_mng.h" -#include "dolphin/types.h" +#include "f_op/f_op_actor.h" +#include "f_op/f_op_scene_mng.h" +#include "d/d_com_inf_game.h" +#include "d/d_item_data.h" +#include "d/d_stage.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_lib.h" +#include "m_Do/m_Do_printf.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "SSystem/SComponent/c_malloc.h" /* 80024060-80024104 .text fopAcM_setStageLayer__FPv */ -void fopAcM_setStageLayer(void*) { - /* Nonmatching */ +void fopAcM_setStageLayer(void* pProc) { + scene_class* stageProc = fopScnM_SearchByID(dStage_roomControl_c::getProcID()); + JUT_ASSERT(0xee, stageProc != 0); + fpcM_ChangeLayerID(pProc, fopScnM_LayerID(stageProc)); } /* 80024104-800241C0 .text fopAcM_setRoomLayer__FPvi */ -void fopAcM_setRoomLayer(void*, int) { - /* Nonmatching */ +void fopAcM_setRoomLayer(void* pProc, int room_no) { + if (room_no >= 0) { + scene_class* roomProc = fopScnM_SearchByID(dStage_roomControl_c::getStatusProcID(room_no)); + JUT_ASSERT(0x105, roomProc != 0); + fpcM_ChangeLayerID(pProc, fopScnM_LayerID(roomProc)); + } } /* 800241C0-80024230 .text fopAcM_SearchByID__FUiPP10fopAc_ac_c */ -void fopAcM_SearchByID(unsigned int, fopAc_ac_c**) { - /* Nonmatching */ +s32 fopAcM_SearchByID(unsigned int actorID, fopAc_ac_c** pDstActor) { + if (fpcM_IsCreating(actorID)) { + *pDstActor = NULL; + } else { + fopAc_ac_c *pActor = (fopAc_ac_c *) fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeByID, &actorID); + *pDstActor = pActor; + if (*pDstActor == NULL) + return 0; + } + + return 1; } /* 80024230-800242AC .text fopAcM_SearchByName__FsPP10fopAc_ac_c */ -void fopAcM_SearchByName(short, fopAc_ac_c**) { - /* Nonmatching */ +s32 fopAcM_SearchByName(s16 procName, fopAc_ac_c** pDstActor) { + *pDstActor = (fopAc_ac_c*) fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeForPName, &procName); + if (*pDstActor == NULL) { + return 0; + } else { + if (fpcM_IsCreating(fopAcM_GetID(*pDstActor))) { + *pDstActor = NULL; + } + return 1; + } } /* 800242AC-80024320 .text fopAcM_CreateAppend__Fv */ -void fopAcM_CreateAppend() { - /* Nonmatching */ +fopAcM_prm_class* fopAcM_CreateAppend() { + fopAcM_prm_class* params = (fopAcM_prm_class*) cMl::memalignB(-4, sizeof(fopAcM_prm_class)); + if (params != NULL) { + cLib_memSet(params, 0, sizeof(fopAcM_prm_class)); + params->mSetId = 0xFFFF; + params->mRoomNo = -1; + params->mScale[0] = 10; + params->mScale[1] = 10; + params->mScale[2] = 10; + params->mParentPcId = -1; + params->mSubtype = -1; + } + return params; } /* 80024320-80024474 .text createAppend__FUlP4cXyziP5csXyzP4cXyzScUi */ -void createAppend(unsigned long, cXyz*, int, csXyz*, cXyz*, signed char, unsigned int) { - /* Nonmatching */ +fopAcM_prm_class * createAppend(u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, s8 subtype, unsigned int parentPcId) { + fopAcM_prm_class * params = fopAcM_CreateAppend(); + if (params == NULL) + return NULL; + + if (pPos != NULL) + params->mPos = *pPos; + else + params->mPos = cXyz::Zero; + + params->mRoomNo = roomNo; + + if (pAngle != NULL) + params->mAngle = *pAngle; + else + params->mAngle = csXyz::Zero; + + if (pScale != NULL) { + params->mScale[0] = 10.0f * pScale->x; + params->mScale[1] = 10.0f * pScale->y; + params->mScale[2] = 10.0f * pScale->z; + } else { + params->mScale[0] = 10.0f; + params->mScale[1] = 10.0f; + params->mScale[2] = 10.0f; + } + + params->mParameter = parameter; + params->mParentPcId = parentPcId; + params->mSubtype = subtype; + + return params; } /* 80024474-80024478 .text fopAcM_Log__FP10fopAc_ac_cPc */ void fopAcM_Log(fopAc_ac_c*, char*) { - /* Nonmatching */ + /* Empty function */ } /* 80024478-800244B8 .text fopAcM_delete__FP10fopAc_ac_c */ -void fopAcM_delete(fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_delete(fopAc_ac_c* pActor) { + /* "Deleting Actor" */ + fopAcM_Log(pActor, "アクターの削除"); + return fpcM_Delete(pActor); } /* 800244B8-8002451C .text fopAcM_delete__FUi */ -void fopAcM_delete(unsigned int) { - /* Nonmatching */ +s32 fopAcM_delete(unsigned int actorID) { + fopAc_ac_c* pActor = fopAcM_SearchByID(actorID); + + if (pActor != NULL) { + /* "Deleting Actor" */ + fopAcM_Log(pActor, "アクターの削除"); + return fpcM_Delete(pActor); + } else { + return TRUE; + } } /* 8002451C-80024598 .text fopAcM_create__FsUlP4cXyziP5csXyzP4cXyzScPFPv_i */ -void fopAcM_create(short, unsigned long, cXyz*, int, csXyz*, cXyz*, signed char, int (*)(void*)) { - /* Nonmatching */ +s32 fopAcM_create(s16 procName, u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, s8 subtype, createFunc createFunc) { + fopAcM_prm_class* params = createAppend(parameter, pPos, roomNo, pAngle, pScale, subtype, 0xFFFFFFFF); + if (params == NULL) + return -1; + + return fpcM_Create(procName, createFunc, params); } /* 80024598-80024614 .text fopAcM_create__FPcUlP4cXyziP5csXyzP4cXyzPFPv_i */ -void fopAcM_create(char*, unsigned long, cXyz*, int, csXyz*, cXyz*, int (*)(void*)) { - /* Nonmatching */ +s32 fopAcM_create(char* pProcNameString, u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, createFunc createFunc) { + dStage_objectNameInf * nameInf = dStage_searchName(pProcNameString); + if (nameInf == NULL) + return -1; + + return fopAcM_create(nameInf->mProcName, parameter, pPos, roomNo, pAngle, pScale, nameInf->mSubtype, createFunc); } /* 80024614-8002468C .text fopAcM_fastCreate__FsUlP4cXyziP5csXyzP4cXyzScPFPv_iPv */ -void fopAcM_fastCreate(short, unsigned long, cXyz*, int, csXyz*, cXyz*, signed char, int (*)(void*), void*) { - /* Nonmatching */ +void* fopAcM_fastCreate(s16 procName, u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, s8 subtype, createFunc createFunc, void* pUserData) { + fopAcM_prm_class* params = createAppend(parameter, pPos, roomNo, pAngle, pScale, subtype, 0xFFFFFFFF); + if (params == NULL) + return NULL; + + return fpcM_FastCreate(procName, createFunc, pUserData, params); } /* 8002468C-80024710 .text fopAcM_fastCreate__FPcUlP4cXyziP5csXyzP4cXyzPFPv_iPv */ -void fopAcM_fastCreate(char*, unsigned long, cXyz*, int, csXyz*, cXyz*, int (*)(void*), void*) { - /* Nonmatching */ +void* fopAcM_fastCreate(char* pProcNameString, u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, createFunc createFunc, void *pUserData) { + dStage_objectNameInf * nameInf = dStage_searchName(pProcNameString); + if (nameInf == NULL) + return NULL; + + return fopAcM_fastCreate(nameInf->mProcName, parameter, pPos, roomNo, pAngle, pScale, nameInf->mSubtype, createFunc, pUserData); } /* 80024710-80024790 .text fopAcM_createChild__FsUiUlP4cXyziP5csXyzP4cXyzScPFPv_i */ -void fopAcM_createChild(short, unsigned int, unsigned long, cXyz*, int, csXyz*, cXyz*, signed char, int (*)(void*)) { - /* Nonmatching */ +s32 fopAcM_createChild(s16 procName, unsigned int parentPcId, u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, s8 subtype, createFunc createFunc) { + fopAcM_prm_class* params = createAppend(parameter, pPos, roomNo, pAngle, pScale, subtype, parentPcId); + if (params == NULL) + return -1; + + return fpcM_Create(procName, createFunc, params); } /* 80024790-80024814 .text fopAcM_createChild__FPcUiUlP4cXyziP5csXyzP4cXyzPFPv_i */ -void fopAcM_createChild(char*, unsigned int, unsigned long, cXyz*, int, csXyz*, cXyz*, int (*)(void*)) { - /* Nonmatching */ +s32 fopAcM_createChild(char* pProcNameString, unsigned int parentPcId, u32 parameter, cXyz* pPos, int roomNo, csXyz* pAngle, cXyz* pScale, createFunc createFunc) { + dStage_objectNameInf * nameInf = dStage_searchName(pProcNameString); + if (nameInf == NULL) + return -1; + + return fopAcM_createChild(nameInf->mProcName, parentPcId, parameter, pPos, roomNo, pAngle, pScale, nameInf->mSubtype, createFunc); } /* 80024814-800249D4 .text fopAcM_createChildFromOffset__FsUiUlP4cXyziP5csXyzP4cXyzScPFPv_i */ -void fopAcM_createChildFromOffset(short, unsigned int, unsigned long, cXyz*, int, csXyz*, cXyz*, signed char, int (*)(void*)) { - /* Nonmatching */ +s32 fopAcM_createChildFromOffset(s16 procName, unsigned int parentPcId, u32 parameter, cXyz* pPosOffs, int roomNo, csXyz* pAngleOffs, cXyz* pScale, s8 subtype, createFunc createFunc) { + fopAc_ac_c * pParent = fopAcM_SearchByID(parentPcId); + s16 parentAngleY = pParent->current.angle.y; + + cXyz posOffs; + if (pPosOffs == NULL) + posOffs = cXyz::Zero; + else + posOffs = *pPosOffs; + + csXyz angleOffs; + if (pAngleOffs == NULL) + angleOffs = csXyz::Zero; + else + angleOffs = *pAngleOffs; + + cXyz pos = pParent->current.pos; + + csXyz angle(angleOffs); + angle.y += parentAngleY; + + pos.x += posOffs.z * cM_ssin(parentAngleY) + posOffs.x * cM_scos(parentAngleY); + pos.y += posOffs.y; + pos.z += posOffs.z * cM_scos(parentAngleY) - posOffs.x * cM_ssin(parentAngleY); + + fopAcM_prm_class* params = createAppend(parameter, &pos, roomNo, &angle, pScale, subtype, parentPcId); + if (params == NULL) + return -1; + + return fpcM_Create(procName, createFunc, params); } /* 800249D4-80024B78 .text fopAcM_createChildFromOffset__FPcUiUlP4cXyziP5csXyzP4cXyzPFPv_i */ -void fopAcM_createChildFromOffset(char*, unsigned int, unsigned long, cXyz*, int, csXyz*, cXyz*, int (*)(void*)) { - /* Nonmatching */ +s32 fopAcM_createChildFromOffset(char* pProcNameString, unsigned int parentPcId, u32 parameter, cXyz* pPosOffs, int roomNo, csXyz* pAngleOffs, cXyz* pScale, createFunc createFunc) { + fopAc_ac_c * pParent = fopAcM_SearchByID(parentPcId); + s16 parentAngleY = pParent->current.angle.y; + + cXyz pos = pParent->current.pos; + + cXyz posOffs; + if (pPosOffs == NULL) + posOffs = cXyz::Zero; + else + posOffs = *pPosOffs; + + csXyz angleOffs; + if (pAngleOffs == NULL) + angleOffs = csXyz::Zero; + else + angleOffs = *pAngleOffs; + + csXyz angle(angleOffs); + angle.y += parentAngleY; + + pos.x += posOffs.z * cM_ssin(parentAngleY) + posOffs.x * cM_scos(parentAngleY); + pos.y += posOffs.y; + pos.z += posOffs.z * cM_scos(parentAngleY) - posOffs.x * cM_ssin(parentAngleY); + + return fopAcM_createChild(pProcNameString, parentPcId, parameter, &pos, roomNo, &angle, pScale, createFunc); } /* 80024B78-80024CA0 .text fopAcM_createHeap__FP10fopAc_ac_cUlUl */ -void fopAcM_createHeap(fopAc_ac_c*, unsigned long, unsigned long) { - /* Nonmatching */ +s32 fopAcM_createHeap(fopAc_ac_c* i_this, u32 size, u32 align) { + JUT_ASSERT(0x33b, i_this); + JUT_ASSERT(0x33c, i_this->heap == 0); + fopAcM_Log(i_this, "アクターのヒープの生成"); + if (align == 0) + align = 0x20; + + i_this->heap = mDoExt_createSolidHeapFromGameToCurrent(size, align); + if (i_this->heap == 0) { + OSReport_Error("fopAcM_createHeap 確保失敗\n"); + JUT_CONFIRM(0x34c, i_this->heap != 0); + return FALSE; + } + + return TRUE; } /* 80024CA0-80024CD4 .text fopAcM_adjustHeap__FP10fopAc_ac_c */ -void fopAcM_adjustHeap(fopAc_ac_c*) { - /* Nonmatching */ +void fopAcM_adjustHeap(fopAc_ac_c* i_this) { + mDoExt_restoreCurrentHeap(); + mDoExt_adjustSolidHeap(i_this->heap); } /* 80024CD4-80024D24 .text fopAcM_DeleteHeap__FP10fopAc_ac_c */ -void fopAcM_DeleteHeap(fopAc_ac_c*) { - /* Nonmatching */ +void fopAcM_DeleteHeap(fopAc_ac_c* i_this) { + /* "Destroying Actor Heap" */ + fopAcM_Log(i_this, "アクターのヒープの破壊"); + + if (i_this->heap != NULL) { + mDoExt_destroySolidHeap(i_this->heap); + i_this->heap = NULL; + } +} + +namespace fopAcM { + bool HeapAdjustEntry; + bool HeapAdjustVerbose; + bool HeapAdjustQuiet; } /* 80024D24-800250E4 .text fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl */ -void fopAcM_entrySolidHeap(fopAc_ac_c*, int (*)(fopAc_ac_c*), unsigned long) { - /* Nonmatching */ +bool fopAcM_entrySolidHeap(fopAc_ac_c* i_this, heapCallbackFunc createHeapCB, u32 maxHeapSize) { + const char * pProcNameString = fopAcM_getProcNameString(i_this); + JKRSolidHeap * heap = NULL; + + if (maxHeapSize != 0) { + heap = mDoExt_createSolidHeapFromGameToCurrent(maxHeapSize, 0x20); + if (heap != NULL) { + bool result = createHeapCB(i_this); + if (heap->getFreeSize() >= 0x20) + JKRHeap::alloc(0x20, 0, NULL); + + mDoExt_restoreCurrentHeap(); + + if (!result) { + if (!fopAcM::HeapAdjustQuiet) + OSReport_Error("見積もりヒープサイズ(%08x)で登録失敗しました。[%s]\n", maxHeapSize, pProcNameString); + mDoExt_destroySolidHeap(heap); + heap = NULL; + } else { + u32 allocSize = ALIGN_NEXT(heap->getSize() - heap->getFreeSize(), 0x20); + if (maxHeapSize < allocSize + 0x40) { + mDoExt_adjustSolidHeap(heap); + i_this->heap = heap; + return true; + } + + if (fopAcM::HeapAdjustVerbose) + OSReport_Warning("見積もりヒープサイズでは空きが多すぎます。 %08x %08x\n\x1b[m", allocSize, maxHeapSize); + } + } else { + if (!fopAcM::HeapAdjustQuiet) + OSReport_Warning("見積もりヒープが確保できませんでした。\n"); + } + } + + if (heap == NULL) { + heap = mDoExt_createSolidHeapFromGameToCurrent(-1, 0x20); + JUT_ASSERT(0x453, heap); + + bool result = createHeapCB(i_this); + mDoExt_restoreCurrentHeap(); + + if (!result) { + OSReport_Error("最大空きヒープサイズで登録失敗。[%s]\n", pProcNameString); + mDoExt_destroySolidHeap(heap); + return false; + } + + if (!fopAcM::HeapAdjustQuiet) + heap->getFreeSize(); + } + + if (heap != NULL) { + if (!fopAcM::HeapAdjustEntry) { + mDoExt_adjustSolidHeap(heap); + i_this->heap = heap; + return true; + } + + JKRSolidHeap * heap1 = NULL; + u32 allocSize = ALIGN_NEXT(heap->getSize() - heap->getFreeSize(), 0x10); + if (allocSize + 0x90 < mDoExt_getGameHeap()->getFreeSize()) + heap1 = mDoExt_createSolidHeapFromGameToCurrent(allocSize, 0x20); + + if (heap1 != NULL) { + if (heap1 < heap) { + mDoExt_destroySolidHeap(heap); + heap = NULL; + bool result = createHeapCB(i_this); + mDoExt_restoreCurrentHeap(); + JUT_ASSERT(0x48d, result != 0); + if (result == 0) { + OSReport_Error("ぴったりサイズで、登録失敗?(バグ)\n"); + mDoExt_destroySolidHeap(heap1); + heap1 = NULL; + } + } else { + mDoExt_restoreCurrentHeap(); + mDoExt_destroySolidHeap(heap1); + heap1 = NULL; + } + } + + if (heap1 != NULL) { + mDoExt_adjustSolidHeap(heap1); + i_this->heap = heap1; + return true; + } + + if (heap != NULL) { + mDoExt_adjustSolidHeap(heap); + i_this->heap = heap; + return true; + } + + OSReport_Error("ばぐばぐです\n"); + JUT_ASSERT(0x4b5, 0); + } + + OSReport_Error("fopAcM_entrySolidHeap だめでした [%s]\n", pProcNameString); + return false; } /* 800250E4-80025100 .text fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff */ -void fopAcM_setCullSizeBox(fopAc_ac_c*, float, float, float, float, float, float) { - /* Nonmatching */ +void fopAcM_setCullSizeBox(fopAc_ac_c* i_this, float minX, float minY, float minZ, float maxX, float maxY, float maxZ) { + i_this->mCull.mBox.mMin.x = minX; + i_this->mCull.mBox.mMin.y = minY; + i_this->mCull.mBox.mMin.z = minZ; + i_this->mCull.mBox.mMax.x = maxX; + i_this->mCull.mBox.mMax.y = maxY; + i_this->mCull.mBox.mMax.z = maxZ; } /* 80025100-80025114 .text fopAcM_setCullSizeSphere__FP10fopAc_ac_cffff */ -void fopAcM_setCullSizeSphere(fopAc_ac_c*, float, float, float, float) { - /* Nonmatching */ +void fopAcM_setCullSizeSphere(fopAc_ac_c* i_this, float x, float y, float z, float r) { + i_this->mCull.mSphere.mCenter.x = x; + i_this->mCull.mSphere.mCenter.y = y; + i_this->mCull.mSphere.mCenter.z = z; + i_this->mCull.mSphere.mRadius = r; } /* 80025114-80025144 .text fopAcM_addAngleY__FP10fopAc_ac_css */ -void fopAcM_addAngleY(fopAc_ac_c*, short, short) { - /* Nonmatching */ +bool fopAcM_addAngleY(fopAc_ac_c* i_this, short target, short step) { + return cLib_chaseAngleS(&i_this->current.angle.y, target, step); } /* 80025144-800251A0 .text fopAcM_calcSpeed__FP10fopAc_ac_c */ -void fopAcM_calcSpeed(fopAc_ac_c*) { - /* Nonmatching */ +void fopAcM_calcSpeed(fopAc_ac_c* i_this) { + f32 speedF = fopAcM_GetSpeedF(i_this); + f32 gravity = fopAcM_GetGravity(i_this); + f32 xSpeed = speedF * cM_ssin(i_this->current.angle.y); + f32 ySpeed = i_this->speed.y + gravity; + f32 zSpeed = speedF * cM_scos(i_this->current.angle.y); + + if (ySpeed < fopAcM_GetMaxFallSpeed(i_this)) + ySpeed = fopAcM_GetMaxFallSpeed(i_this); + + fopAcM_SetSpeed(i_this, xSpeed, ySpeed, zSpeed); } /* 800251A0-8002520C .text fopAcM_posMove__FP10fopAc_ac_cPC4cXyz */ -void fopAcM_posMove(fopAc_ac_c*, const cXyz*) { - /* Nonmatching */ +void fopAcM_posMove(fopAc_ac_c* i_this, const cXyz* move) { + i_this->current.pos.x += i_this->speed.x; + i_this->current.pos.y += i_this->speed.y; + i_this->current.pos.z += i_this->speed.z; + + if (move != NULL) { + i_this->current.pos.x += move->x; + i_this->current.pos.y += move->y; + i_this->current.pos.z += move->z; + } } /* 8002520C-80025250 .text fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz */ -void fopAcM_posMoveF(fopAc_ac_c*, const cXyz*) { - /* Nonmatching */ +void fopAcM_posMoveF(fopAc_ac_c* i_this, const cXyz* move) { + fopAcM_calcSpeed(i_this); + fopAcM_posMove(i_this, move); } /* 80025250-80025278 .text fopAcM_searchActorAngleY__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_searchActorAngleY(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s16 fopAcM_searchActorAngleY(fopAc_ac_c* i_this, fopAc_ac_c* i_other) { + return cLib_targetAngleY(&i_this->current.pos, &i_other->current.pos); } /* 80025278-800252BC .text fopAcM_seenActorAngleY__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_seenActorAngleY(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_seenActorAngleY(fopAc_ac_c* i_this, fopAc_ac_c* i_other) { + s16 angleY = cLib_targetAngleY(&i_this->current.pos, &i_other->current.pos); + return abs((s16)(angleY - i_this->shape_angle.y)); } /* 800252BC-80025370 .text fopAcM_searchActorDistance__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_searchActorDistance(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +f32 fopAcM_searchActorDistance(fopAc_ac_c* i_this, fopAc_ac_c* i_other) { + cXyz delta = i_other->current.pos - i_this->current.pos; + return delta.abs(); } /* 80025370-800253C0 .text fopAcM_searchActorDistance2__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_searchActorDistance2(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +f32 fopAcM_searchActorDistance2(fopAc_ac_c* i_this, fopAc_ac_c* i_other) { + cXyz delta = i_other->current.pos - i_this->current.pos; + return delta.abs2(); } /* 800253C0-80025470 .text fopAcM_searchActorDistanceXZ__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_searchActorDistanceXZ(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +f32 fopAcM_searchActorDistanceXZ(fopAc_ac_c* i_this, fopAc_ac_c* i_other) { + cXyz delta = i_other->current.pos - i_this->current.pos; + return delta.absXZ(); } /* 80025470-800254BC .text fopAcM_searchActorDistanceXZ2__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_searchActorDistanceXZ2(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +f32 fopAcM_searchActorDistanceXZ2(fopAc_ac_c* i_this, fopAc_ac_c* i_other) { + cXyz delta = i_other->current.pos - i_this->current.pos; + return delta.abs2XZ(); } /* 800254BC-800255B4 .text fopAcM_rollPlayerCrash__FP10fopAc_ac_cfUl */ -void fopAcM_rollPlayerCrash(fopAc_ac_c*, float, unsigned long) { +s32 fopAcM_rollPlayerCrash(fopAc_ac_c*, float, u32) { /* Nonmatching */ } /* 800255B4-80025660 .text fopAcM_checkCullingBox__FPA4_fffffff */ -void fopAcM_checkCullingBox(float(*)[4], float, float, float, float, float, float) { - /* Nonmatching */ +s32 fopAcM_checkCullingBox(Mtx pMtx, float x0, float y0, float z0, float x1, float y1, float z1) { + Vec p0 = { x0, y0, z0 }; + Vec p1 = { x1, y1, z1 }; + Mtx viewMtx; + MTXConcat(j3dSys.mViewMtx, pMtx, viewMtx); + return mDoLib_clipper::clip(viewMtx, &p1, &p0) != 0; } /* 80025660-800259A8 .text fopAcM_cullingCheck__FP10fopAc_ac_c */ -void fopAcM_cullingCheck(fopAc_ac_c*) { +s32 fopAcM_cullingCheck(fopAc_ac_c*) { /* Nonmatching */ } @@ -212,7 +533,7 @@ void fopAcM_orderZHintEvent(fopAc_ac_c*, fopAc_ac_c*) { } /* 80025B3C-80025B8C .text fopAcM_orderSpeakEvent__FP10fopAc_ac_c */ -void fopAcM_orderSpeakEvent(fopAc_ac_c*) { +s32 fopAcM_orderSpeakEvent(fopAc_ac_c*) { /* Nonmatching */ } @@ -227,37 +548,37 @@ void fopAcM_orderCatchEvent(fopAc_ac_c*, fopAc_ac_c*) { } /* 80025C34-80025CC8 .text fopAcM_orderOtherEvent2__FP10fopAc_ac_cPcUsUs */ -void fopAcM_orderOtherEvent2(fopAc_ac_c*, char*, unsigned short, unsigned short) { +s32 fopAcM_orderOtherEvent2(fopAc_ac_c*, char*, u16, u16) { /* Nonmatching */ } /* 80025CC8-80025D28 .text fopAcM_orderChangeEvent__FP10fopAc_ac_cPcUsUs */ -void fopAcM_orderChangeEvent(fopAc_ac_c*, char*, unsigned short, unsigned short) { +void fopAcM_orderChangeEvent(fopAc_ac_c*, char*, u16, u16) { /* Nonmatching */ } /* 80025D28-80025D94 .text fopAcM_orderChangeEvent__FP10fopAc_ac_cP10fopAc_ac_cPcUsUs */ -void fopAcM_orderChangeEvent(fopAc_ac_c*, fopAc_ac_c*, char*, unsigned short, unsigned short) { +void fopAcM_orderChangeEvent(fopAc_ac_c*, fopAc_ac_c*, char*, u16, u16) { /* Nonmatching */ } /* 80025D94-80025E1C .text fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs */ -void fopAcM_orderChangeEventId(fopAc_ac_c*, short, unsigned short, unsigned short) { +s32 fopAcM_orderChangeEventId(fopAc_ac_c*, short, u16, u16) { /* Nonmatching */ } /* 80025E1C-80025EA4 .text fopAcM_orderChangeEventId__FP10fopAc_ac_cP10fopAc_ac_csUsUs */ -void fopAcM_orderChangeEventId(fopAc_ac_c*, fopAc_ac_c*, short, unsigned short, unsigned short) { +void fopAcM_orderChangeEventId(fopAc_ac_c*, fopAc_ac_c*, short, u16, u16) { /* Nonmatching */ } /* 80025EA4-80025F3C .text fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs */ -void fopAcM_orderOtherEventId(fopAc_ac_c*, short, unsigned char, unsigned short, unsigned short, unsigned short) { +s32 fopAcM_orderOtherEventId(fopAc_ac_c*, short, unsigned char, u16, u16, u16) { /* Nonmatching */ } /* 80025F3C-80025F9C .text fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs */ -void fopAcM_orderPotentialEvent(fopAc_ac_c*, unsigned short, unsigned short, unsigned short) { +s32 fopAcM_orderPotentialEvent(fopAc_ac_c*, u16, u16, u16) { /* Nonmatching */ } @@ -272,27 +593,27 @@ void fopAcM_orderTreasureEvent(fopAc_ac_c*, fopAc_ac_c*) { } /* 80026044-80026074 .text fopAcM_getTalkEventPartner__FP10fopAc_ac_c */ -void fopAcM_getTalkEventPartner(fopAc_ac_c*) { +fopAc_ac_c* fopAcM_getTalkEventPartner(fopAc_ac_c*) { /* Nonmatching */ } /* 80026074-800260A4 .text fopAcM_getItemEventPartner__FP10fopAc_ac_c */ -void fopAcM_getItemEventPartner(fopAc_ac_c*) { +fopAc_ac_c* fopAcM_getItemEventPartner(fopAc_ac_c*) { /* Nonmatching */ } /* 800260A4-80026118 .text fopAcM_getEventPartner__FP10fopAc_ac_c */ -void fopAcM_getEventPartner(fopAc_ac_c*) { +fopAc_ac_c* fopAcM_getEventPartner(fopAc_ac_c*) { /* Nonmatching */ } /* 80026118-800261E8 .text fopAcM_createItemForPresentDemo__FP4cXyziUciiP5csXyzP4cXyz */ -void fopAcM_createItemForPresentDemo(cXyz*, int, unsigned char, int, int, csXyz*, cXyz*) { +s32 fopAcM_createItemForPresentDemo(cXyz*, int, unsigned char, int, int, csXyz*, cXyz*) { /* Nonmatching */ } /* 800261E8-800262B4 .text fopAcM_createItemForTrBoxDemo__FP4cXyziiiP5csXyzP4cXyz */ -void fopAcM_createItemForTrBoxDemo(cXyz*, int, int, int, csXyz*, cXyz*) { +s32 fopAcM_createItemForTrBoxDemo(cXyz*, int, int, int, csXyz*, cXyz*) { /* Nonmatching */ } @@ -307,7 +628,7 @@ void fopAcM_createRaceItemFromTable(cXyz*, int, int, int, csXyz*, cXyz*, int) { } /* 800267C8-8002688C .text fopAcM_createShopItem__FP4cXyziP5csXyziP4cXyzPFPv_i */ -void fopAcM_createShopItem(cXyz*, int, csXyz*, int, cXyz*, int (*)(void*)) { +void fopAcM_createShopItem(cXyz*, int, csXyz*, int, cXyz*, createFunc createFunc) { /* Nonmatching */ } @@ -317,17 +638,17 @@ void fopAcM_createRaceItem(cXyz*, int, int, csXyz*, int, cXyz*, int) { } /* 80026980-80026A68 .text fopAcM_createDemoItem__FP4cXyziiP5csXyziP4cXyzUc */ -void fopAcM_createDemoItem(cXyz*, int, int, csXyz*, int, cXyz*, unsigned char) { +s32 fopAcM_createDemoItem(cXyz*, int, int, csXyz*, int, cXyz*, unsigned char) { /* Nonmatching */ } /* 80026A68-80026ADC .text fopAcM_createItemForBoss__FP4cXyziiP5csXyzP4cXyzi */ -void fopAcM_createItemForBoss(cXyz*, int, int, csXyz*, cXyz*, int) { +s32 fopAcM_createItemForBoss(cXyz*, int, int, csXyz*, cXyz*, int) { /* Nonmatching */ } /* 80026ADC-80026C90 .text fopAcM_createItem__FP4cXyziiiiP5csXyziP4cXyz */ -void fopAcM_createItem(cXyz*, int, int, int, int, csXyz*, int, cXyz*) { +s32 fopAcM_createItem(cXyz*, int, int, int, int, csXyz*, int, cXyz*) { /* Nonmatching */ } @@ -337,17 +658,17 @@ void fopAcM_fastCreateItem2(cXyz*, int, int, int, int, csXyz*, int, cXyz*) { } /* 80026E5C-80026F5C .text fopAcM_createItemForKP2__FP4cXyziiP5csXyzP4cXyzfffUs */ -void fopAcM_createItemForKP2(cXyz*, int, int, csXyz*, cXyz*, float, float, float, unsigned short) { +void fopAcM_createItemForKP2(cXyz*, int, int, csXyz*, cXyz*, float, float, float, u16) { /* Nonmatching */ } /* 80026F5C-80026F98 .text fopAcM_createItemForSimpleDemo__FP4cXyziiP5csXyzP4cXyzff */ -void fopAcM_createItemForSimpleDemo(cXyz*, int, int, csXyz*, cXyz*, float, float) { +void* fopAcM_createItemForSimpleDemo(cXyz*, int, int, csXyz*, cXyz*, float, float) { /* Nonmatching */ } /* 80026F98-80027254 .text fopAcM_fastCreateItem__FP4cXyziiP5csXyzP4cXyzfffiPFPv_i */ -void fopAcM_fastCreateItem(cXyz*, int, int, csXyz*, cXyz*, float, float, float, int, int (*)(void*)) { +void fopAcM_fastCreateItem(cXyz*, int, int, csXyz*, cXyz*, float, float, float, int, createFunc createFunc) { /* Nonmatching */ } @@ -362,12 +683,12 @@ void fopAcM_createStealItem(cXyz*, int, int, csXyz*, int) { } /* 800273D4-8002777C .text fopAcM_createItemFromEnemyTable__FUsiiP4cXyzP5csXyz */ -void fopAcM_createItemFromEnemyTable(unsigned short, int, int, cXyz*, csXyz*) { +void fopAcM_createItemFromEnemyTable(u16, int, int, cXyz*, csXyz*) { /* Nonmatching */ } /* 8002777C-800278D8 .text fopAcM_createIball__FP4cXyziiP5csXyzi */ -void fopAcM_createIball(cXyz*, int, int, csXyz*, int) { +s32 fopAcM_createIball(cXyz*, int, int, csXyz*, int) { /* Nonmatching */ } @@ -382,12 +703,12 @@ void enemySearchJugge(void*, void*) { } /* 80027970-80027A9C .text fopAcM_myRoomSearchEnemy__FSc */ -void fopAcM_myRoomSearchEnemy(signed char) { +fopAc_ac_c* fopAcM_myRoomSearchEnemy(signed char) { /* Nonmatching */ } /* 80027A9C-80027B24 .text fopAcM_createDisappear__FP10fopAc_ac_cP4cXyzUcUcUc */ -void fopAcM_createDisappear(fopAc_ac_c*, cXyz*, unsigned char, unsigned char, unsigned char) { +s32 fopAcM_createDisappear(fopAc_ac_c*, cXyz*, unsigned char, unsigned char, unsigned char) { /* Nonmatching */ } @@ -412,38 +733,39 @@ void fopAcM_viewCutoffCheck(fopAc_ac_c*, float) { } /* 800281D8-800282F8 .text fopAcM_otoCheck__FP10fopAc_ac_cf */ -void fopAcM_otoCheck(fopAc_ac_c*, float) { +s32 fopAcM_otoCheck(fopAc_ac_c*, float) { /* Nonmatching */ } /* 800282F8-8002833C .text fopAcM_getProcNameString__FP10fopAc_ac_c */ -void fopAcM_getProcNameString(fopAc_ac_c*) { - /* Nonmatching */ +const char * fopAcM_getProcNameString(fopAc_ac_c* i_this) { + const char * pProcNameString = dStage_getName2(fpcM_GetProfName(i_this), i_this->mSubtype); + if (pProcNameString != NULL) + return pProcNameString; + return "UNKOWN"; } /* 8002833C-80028410 .text fopAcM_findObjectCB__FP10fopAc_ac_cPv */ -void fopAcM_findObjectCB(fopAc_ac_c*, void*) { +fopAc_ac_c* fopAcM_findObjectCB(fopAc_ac_c*, void*) { /* Nonmatching */ } /* 80028410-80028448 .text fopAcM_searchFromName__FPcUlUl */ -void fopAcM_searchFromName(char*, unsigned long, unsigned long) { +fopAc_ac_c* fopAcM_searchFromName(char* pProcName, u32 paramMask, u32 parameter) { /* Nonmatching */ } /* 80028448-80028560 .text fopAcM_getWaterY__FPC4cXyzPf */ -void fopAcM_getWaterY(const cXyz*, float*) { - /* Nonmatching */ -} - -/* 80028560-80028684 .text __dt__11dBgS_WtrChkFv */ -dBgS_WtrChk::~dBgS_WtrChk() { +s32 fopAcM_getWaterY(const cXyz*, float*) { /* Nonmatching */ } /* 80028684-80028724 .text fopAcM_setGbaName__FP10fopAc_ac_cUcUcUc */ -void fopAcM_setGbaName(fopAc_ac_c*, unsigned char, unsigned char, unsigned char) { - /* Nonmatching */ +void fopAcM_setGbaName(fopAc_ac_c* i_this, u8 itemNo, u8 gbaName0, u8 gbaName1) { + if (dComIfGs_checkGetItem(itemNo) || (itemNo == BOW && (dComIfGs_checkGetItem(MAGIC_ARROW) || dComIfGs_checkGetItem(LIGHT_ARROW))) || (itemNo == MAGIC_ARROW && dComIfGs_checkGetItem(LIGHT_ARROW))) + i_this->mGbaName = gbaName1; + else + i_this->mGbaName = gbaName0; } /* 80028724-800287D8 .text fpoAcM_absolutePos__FP10fopAc_ac_cP4cXyzP4cXyz */ @@ -456,67 +778,20 @@ void fpoAcM_relativePos(fopAc_ac_c*, cXyz*, cXyz*) { /* Nonmatching */ } -/* 8002889C-80028998 .text __dt__14dBgS_SplGrpChkFv */ -dBgS_SplGrpChk::~dBgS_SplGrpChk() { - /* Nonmatching */ -} - /* 80029178-80029198 .text __ct__20fopAc_cullSizeSphereF4cXyzf */ -fopAc_cullSizeSphere::fopAc_cullSizeSphere(cXyz, float) { - /* Nonmatching */ +fopAc_cullSizeSphere::fopAc_cullSizeSphere(cXyz p, float r) { + mCenter = p; + mRadius = r; } /* 80029198-800291CC .text __ct__17fopAc_cullSizeBoxFRC17fopAc_cullSizeBox */ -fopAc_cullSizeBox::fopAc_cullSizeBox(const fopAc_cullSizeBox&) { - /* Nonmatching */ +fopAc_cullSizeBox::fopAc_cullSizeBox(const fopAc_cullSizeBox& box) { + mMin = box.mMin; + mMax = box.mMax; } /* 800291CC-80029200 .text __ct__17fopAc_cullSizeBoxF4cXyz4cXyz */ -fopAc_cullSizeBox::fopAc_cullSizeBox(cXyz, cXyz) { - /* Nonmatching */ -} - -/* 80029200-8002923C .text __dt__5l_HIOFv */ -l_HIO::~l_HIO() { - /* Nonmatching */ -} - -/* 8002923C-80029244 .text @16@__dt__11dBgS_WtrChkFv */ -void @16@__dt__11dBgS_WtrChkFv { - /* Nonmatching */ -} - -/* 80029244-8002924C .text @48@__dt__11dBgS_WtrChkFv */ -void @48@__dt__11dBgS_WtrChkFv { - /* Nonmatching */ -} - -/* 8002924C-80029254 .text @36@__dt__11dBgS_WtrChkFv */ -void @36@__dt__11dBgS_WtrChkFv { - /* Nonmatching */ -} - -/* 80029254-8002925C .text @16@__dt__14dBgS_SplGrpChkFv */ -void @16@__dt__14dBgS_SplGrpChkFv { - /* Nonmatching */ -} - -/* 8002925C-80029264 .text @48@__dt__14dBgS_SplGrpChkFv */ -void @48@__dt__14dBgS_SplGrpChkFv { - /* Nonmatching */ -} - -/* 80029264-8002926C .text @36@__dt__14dBgS_SplGrpChkFv */ -void @36@__dt__14dBgS_SplGrpChkFv { - /* Nonmatching */ -} - -/* 8002926C-80029270 .text onFrollCrashFlg__9daPy_py_cFUl */ -void daPy_py_c::onFrollCrashFlg(unsigned long) { - /* Nonmatching */ -} - -/* 80029270-80029278 .text getGrabActorID__9daPy_py_cCFv */ -void daPy_py_c::getGrabActorID() const { - /* Nonmatching */ +fopAc_cullSizeBox::fopAc_cullSizeBox(cXyz min, cXyz max) { + mMin = min; + mMax = max; } diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index 5d79c72f4..bc742bfa7 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -81,12 +81,12 @@ s32 fpcBs_Delete(base_process_class* i_proc) { } /* 8003CA60-8003CB5C .text fpcBs_Create__FsUiPv */ -base_process_class* fpcBs_Create(s16 i_procTypeID, unsigned int i_procID, void* i_data) { +base_process_class* fpcBs_Create(s16 i_profName, unsigned int i_procID, void* i_data) { process_profile_definition* procProfDef; base_process_class* procClass; u32 size; - procProfDef = (process_profile_definition*)fpcPf_Get(i_procTypeID); + procProfDef = (process_profile_definition*)fpcPf_Get(i_profName); size = procProfDef->mSize + procProfDef->mSizeOther; procClass = (base_process_class*)cMl::memalignB(-4, size); if (procClass == NULL) { @@ -101,7 +101,7 @@ base_process_class* fpcBs_Create(s16 i_procTypeID, unsigned int i_procID, void* procClass->mInitState = 0; procClass->mUnk0 = 0; procClass->mBsPcId = i_procID; - procClass->mBsTypeId = i_procTypeID; + procClass->mProfName = i_profName; procClass->mBsType = fpcBs_MakeOfType(&g_fpcBs_type); procClass->mProcName = procProfDef->mProcName; fpcPause_Init(procClass); diff --git a/src/f_pc/f_pc_deletor.cpp b/src/f_pc/f_pc_deletor.cpp index 3f9959819..a7872bb28 100644 --- a/src/f_pc/f_pc_deletor.cpp +++ b/src/f_pc/f_pc_deletor.cpp @@ -19,13 +19,13 @@ BOOL fpcDt_IsComplete() { /* 8003D2A0-8003D314 .text fpcDt_deleteMethod__FP18base_process_class */ s32 fpcDt_deleteMethod(base_process_class* i_proc) { layer_class* layer = i_proc->mDtTg.mpLayer; - s16 typeID = i_proc->mBsTypeId; + s16 profName = i_proc->mProfName; fpcLy_SetCurrentLayer(layer); fpcLnTg_QueueTo(&i_proc->mLnTg); if (fpcBs_Delete(i_proc) == 1) { fpcLy_DeletedMesg(layer); - fpcLd_Free(typeID); + fpcLd_Free(profName); return 1; } else { return 0; From ee401fb19ffab997b72672e747a8edd632ee7785 Mon Sep 17 00:00:00 2001 From: TakaRikka Date: Sat, 23 Sep 2023 00:00:37 -0700 Subject: [PATCH 48/89] work on d_a_agb --- .../J3DGraphAnimator/J3DMaterialAttach.h | 7 +- .../JSystem/J3DGraphAnimator/J3DModelData.h | 1 - include/JSystem/JUtility/JUTGba.h | 4 +- include/SSystem/SComponent/c_bg_s_chk.h | 2 +- include/SSystem/SComponent/c_bg_s_gnd_chk.h | 1 + include/d/actor/d_a_agb.h | 186 +++ include/d/actor/d_a_player.h | 12 +- include/d/actor/d_a_player_link.h | 83 +- include/d/d_bg_s.h | 52 + include/d/d_bg_s_acch.h | 4 +- include/d/d_com_inf_game.h | 69 +- include/d/d_event_manager.h | 2 +- include/d/d_kankyo_wether.h | 3 +- include/d/d_map.h | 6 +- include/d/d_save.h | 13 +- include/f_op/f_op_actor_mng.h | 4 +- include/f_op/f_op_msg_mng.h | 1 + include/m_Do/m_Do_dvd_thread.h | 1 + include/m_Do/m_Do_gba_com.h | 4 +- include/m_Do/m_Do_lib.h | 5 - src/SSystem/SComponent/c_bg_s_gnd_chk.cpp | 2 +- src/SSystem/SComponent/c_bg_s_lin_chk.cpp | 4 +- src/d/actor/d_a_agb.cpp | 1218 ++++++++++++++--- src/d/d_kankyo_rain.cpp | 55 +- src/m_Do/m_Do_gba_com.cpp | 6 +- 25 files changed, 1484 insertions(+), 261 deletions(-) create mode 100644 include/d/actor/d_a_agb.h diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index 1891eedb9..2def459b7 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -35,7 +35,6 @@ public: JUTNameTab* getMaterialName() const { return mMaterialName; } u16 getMaterialNum() const { return mMaterialNum; } - bool isLocked() const { return field_0x1c == 1; } private: /* 0x04 */ u16 mMaterialNum; @@ -43,9 +42,9 @@ private: /* 0x08 */ J3DMaterial** mMaterialNodePointer; /* 0x0C */ JUTNameTab* mMaterialName; /* 0x10 */ u32 field_0x10; - /* 0x14 */ J3DTexture* mTexture; - /* 0x18 */ JUTNameTab* mTextureName; - /* 0x1C */ u16 field_0x1c; + /* 0x14 */ u32 field_0x14; + /* 0x18 */ J3DTexture* mTexture; + /* 0x1C */ JUTNameTab* mTextureName; }; // Size: 0x20 #endif /* J3DMATERIALATTACH_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index ce8018b1b..cd23e5294 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -59,7 +59,6 @@ public: u16 checkBumpFlag() const { return mbHasBumpArray; } void setBumpFlag(u32 flag) { mbHasBumpArray = flag; } bool checkBBoardFlag() const { return mbHasBillboard == 1; } - bool isLocked() { return mMaterialTable.isLocked(); } void entryTexMtxAnimator(J3DAnmTextureSRTKey* anm) { mMaterialTable.entryTexMtxAnimator(anm); } void entryTevRegAnimator(J3DAnmTevRegKey* anm) { mMaterialTable.entryTevRegAnimator(anm); } void entryTexNoAnimator(J3DAnmTexPattern* anm) { mMaterialTable.entryTexNoAnimator(anm); } diff --git a/include/JSystem/JUtility/JUTGba.h b/include/JSystem/JUtility/JUTGba.h index b9d520e5a..21577b6da 100644 --- a/include/JSystem/JUtility/JUTGba.h +++ b/include/JSystem/JUtility/JUTGba.h @@ -16,9 +16,9 @@ public: void result_common(int, u32, u32*); void resultStatus_common(int, u32, u8*); void doJoyBoot(int, s32, s32, u8*, u32, JUTGba_Func, void*); - void resultJoyBoot(int, u8*); + int resultJoyBoot(int, u8*); void doInitProbe(int, JUTGba_Func, void*); - void resultInitProbe(int, u32*); + int resultInitProbe(int, u32*); void doProbe(int, JUTGba_Func, void*); BOOL resultProbe(int, u32*); void doReset(int, JUTGba_Func, void*); diff --git a/include/SSystem/SComponent/c_bg_s_chk.h b/include/SSystem/SComponent/c_bg_s_chk.h index bb28ccce6..e8ffbd457 100644 --- a/include/SSystem/SComponent/c_bg_s_chk.h +++ b/include/SSystem/SComponent/c_bg_s_chk.h @@ -30,7 +30,7 @@ public: void SetExtChk(cBgS_Chk&); bool ChkSameActorPid(unsigned int) const; - void setActorPid(u32 pid) { mActorPid = pid; } + void SetActorPid(u32 pid) { mActorPid = pid; } u32 GetActorPid() const { return mActorPid; } void SetPolyPassChk(cBgS_PolyPassChk* p_chk) { mPolyPassChk = p_chk; } void SetGrpPassChk(cBgS_GrpPassChk* p_chk) { mGrpPassChk = p_chk; } diff --git a/include/SSystem/SComponent/c_bg_s_gnd_chk.h b/include/SSystem/SComponent/c_bg_s_gnd_chk.h index 192406a2a..8d482dd6d 100644 --- a/include/SSystem/SComponent/c_bg_s_gnd_chk.h +++ b/include/SSystem/SComponent/c_bg_s_gnd_chk.h @@ -20,6 +20,7 @@ public: void SetNowY(f32 y) { mNowY = y; } const cXyz& GetPointP() { return m_pos; } u32 GetWallPrecheck() const { return mWallPrecheck; } + void OffWall() { mFlags &= ~2; } private: /* 0x24 */ cXyz m_pos; diff --git a/include/d/actor/d_a_agb.h b/include/d/actor/d_a_agb.h new file mode 100644 index 000000000..2146f1b6a --- /dev/null +++ b/include/d/actor/d_a_agb.h @@ -0,0 +1,186 @@ +#ifndef D_A_AGB_H +#define D_A_AGB_H + +#include "d/d_bg_s.h" +#include "d/d_bg_s_acch.h" +#include "d/d_particle.h" +#include "f_op/f_op_actor_mng.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_hostIO.h" + +class daAgb_HIO_c : public mDoHIO_entry_c { +public: + daAgb_HIO_c(); + virtual ~daAgb_HIO_c() {} + + /* 0x04 */ J3DGXColorS10 field_0x04[2]; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1c; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; +}; + +class msg_class; +class dMsgCtrl_c { +public: + int init(u16); + int execute(); + ~dMsgCtrl_c(); + + /* 0x00 */ u16 field_0x0; + /* 0x04 */ u32 mMsgID; + /* 0x08 */ msg_class* mpMsg; +}; + +class daAgb_c : public fopAc_ac_c { +public: + void NameConv(); + int uploadInitCheck(); + int uploadPortCheckWait(); + int uploadSelect(); + int uploadJoyboot1(); + int uploadJoyboot2(); + int uploadMessageLoad(); + int uploadMessageLoad2(); + int uploadConnect(); + int uploadMessageSend(); + int uploadRetryWait(); + int uploadMsgEndWait(); + int uploadMsgEndTimer(); + void modeLoad(); + void modeLookAttention(); + u8 DungeonNoGet(); + void MapNoSet(u8, u8, u8); + void onFree(); + void onHold(); + void offHold(); + void resetCursor(bool); + bool FlashCheck(); + void FlagsRecv(); + void SwitchOn(); + void GbaItemUse(); + void Shopping(); + void FlagsSend(u32); + void CursorMove(fopAc_ac_c*, u32); + void modeMove(); + void modeDelete(); + int createHeap(); + + daAgb_c(); + + inline void modeProcCall(); + + static int mEffect; + + struct daAgb_GbaFlg { + /* 0x0 */ u16 field_0x0; + /* 0x2 */ u8 field_0x2; + /* 0x3 */ u8 field_0x3; + /* 0x4 */ u16 field_0x4; + /* 0x6 */ u16 field_0x6; + }; + static daAgb_GbaFlg mGbaFlg; + + struct daAgb_Switch { + /* 0x0 */ u8 field_0x0; + /* 0x1 */ u8 field_0x1; + /* 0x1 */ u8 field_0x2; + /* 0x3 */ u8 field_0x3; + /* 0x4 */ u8 field_0x4; + u8 field_0x5[0x8 - 0x5]; + }; + static daAgb_Switch mSwitch; + + struct daAgb_Item { + /* 0x0 */ u8 field_0x0; + /* 0x1 */ u8 field_0x1; + }; + static daAgb_Item mItem; + static u8 mShop; + static u8 mItemBuy; + static u8 DungeonNoTable[]; + + struct daAgb_Flags { + /* 0x0 */ u16 field_0x0; + /* 0x2 */ u8 field_0x2; + /* 0x3 */ u8 field_0x3; + /* 0x4 */ u8 field_0x4; + /* 0x5 */ u8 field_0x5_0 : 1; + /* 0x5 */ u8 field_0x5_1 : 1; + /* 0x5 */ u8 field_0x5_2 : 1; + /* 0x5 */ u8 field_0x5_3 : 3; + /* 0x5 */ u8 field_0x5_6 : 1; + /* 0x5 */ u8 field_0x5_7 : 1; + /* 0x6 */ u8 field_0x6; + /* 0x7 */ u8 field_0x7; + /* 0x8 */ u8 field_0x8; + /* 0x9 */ u8 field_0x9; + /* 0xA */ u8 field_0xa; + /* 0xB */ u8 field_0xb_0 : 1; + /* 0xB */ u8 field_0xb_3 : 5; + /* 0xB */ u8 field_0xb_6 : 1; + /* 0xB */ u8 field_0xb_7 : 1; + }; + + static daAgb_Flags mFlags; + + typedef int (daAgb_c::*uploadFunc)(); + static uploadFunc uploadFuncTable[]; + + /* 0x290 */ request_of_phase_process_class mPhase; + /* 0x298 */ J3DModel* mpModel; + /* 0x29C */ mDoExt_brkAnm mBrk; + /* 0x2B4 */ GXTexObj mTexObj; + /* 0x2D4 */ dBgS_LinkCrrPos mCrrPos; + /* 0x424 */ dBgS_LinkAcch mAcch; + /* 0x5E8 */ dBgS_AcchCir mAcchCir; + /* 0x628 */ f32 field_0x628; + /* 0x62C */ f32 field_0x62c; + /* 0x630 */ u16 field_0x630; + /* 0x632 */ u16 field_0x632; + /* 0x634 */ cXyz field_0x634; + /* 0x640 */ int field_0x640; + /* 0x648 */ u64 mPlayerName; + /* 0x650 */ u32 field_0x650; + /* 0x654 */ int field_0x654; + /* 0x658 */ u16 field_0x658; + /* 0x65A */ u16 field_0x65a; + /* 0x65C */ u16 field_0x65c; + /* 0x65E */ u16 field_0x65e; + /* 0x660 */ u16 field_0x660; + /* 0x662 */ u16 field_0x662; + /* 0x664 */ u16 field_0x664; + /* 0x666 */ u8 mPortNo; + /* 0x667 */ u8 field_0x667[0x669 - 0x667]; + /* 0x669 */ u8 mMode; + /* 0x66A */ u8 mUploadAction; + /* 0x66B */ u8 field_0x66b; + /* 0x66C */ u8 field_0x66c; + /* 0x66D */ u8 field_0x66d; + /* 0x66E */ u8 field_0x66e; + /* 0x66F */ s8 field_0x66f; + /* 0x670 */ u8 field_0x670; + /* 0x671 */ u8 field_0x671; + /* 0x672 */ u8 field_0x672; + /* 0x673 */ u8 field_0x673; + /* 0x674 */ u8 field_0x674; + /* 0x675 */ u8 field_0x675; + /* 0x676 */ u8 field_0x676; + /* 0x677 */ u8 field_0x677; + /* 0x678 */ u8 field_0x678; + /* 0x679 */ u8 field_0x679; + /* 0x67A */ bool field_0x67a; + /* 0x67B */ u8 field_0x67b; + /* 0x67C */ u8 field_0x67c; + /* 0x67D */ u8 field_0x67d; + /* 0x67E */ u8 field_0x67e; + /* 0x67F */ u8 field_0x67f; + /* 0x680 */ u8 field_0x680; + /* 0x684 */ dPa_followEcallBack field_0x684; +}; + +#endif /* D_A_AGB_H */ \ No newline at end of file diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 1ea7d325d..b7635d71a 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -90,14 +90,14 @@ public: /* 0x300 */ f32 field_0x300; /* 0x304 */ daPy_demo_c mDemo; - virtual MtxP getLeftHandMatrix(); - virtual MtxP getRightHandMatrix(); - virtual void getGroundY(); + virtual MtxP getLeftHandMatrix() = 0; + virtual MtxP getRightHandMatrix() = 0; + virtual void getGroundY() = 0; virtual void getTactMusic() const; virtual void getTactTimerCancel() const; virtual void checkPlayerGuard() const; virtual void getGrabMissActor(); - virtual void checkPlayerFly() const; + virtual u32 checkPlayerFly() const; virtual void checkFrontRoll() const; virtual void checkBottleSwing() const; virtual void checkCutCharge() const; @@ -106,8 +106,8 @@ public: virtual void setTactZev(unsigned int, int, char*); virtual void onDekuSpReturnFlg(u8); virtual void checkComboCutTurn() const; - virtual f32 getBaseAnimeFrameRate(); - virtual void getBaseAnimeFrame(); + virtual f32 getBaseAnimeFrameRate() = 0; + virtual void getBaseAnimeFrame() = 0; virtual void getItemID() const; virtual void getThrowBoomerangID() const; virtual void getGrabActorID() const; diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index 05fa50c6f..7f7f75d54 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -97,11 +97,6 @@ public: /* 0x0 */ u8 field_0x0[0x28]; }; -class dPa_smokeEcallBack { -public: - /* 0x0 */ u8 field_0x0[0x20]; -}; - class dPa_cutTurnEcallBack_c { public: /* 0x0 */ u8 field_0x0[0x10]; @@ -189,11 +184,9 @@ public: void getBoomerangCatchPos() const; void getLineTopPos(); void getHookshotRootPos() const; - void getModelJointMtx(u16); void seStartOnlyReverb(u32); void seStartMapInfo(u32); void seStartSwordCut(u32); - void voiceStart(u32); void itemButton() const; void itemTrigger() const; void getReadyItem(); @@ -223,8 +216,6 @@ public: void setTextureScrollResource(J3DAnmTextureSRTKey*, int); void loadTextureScrollResource(u32, int); void playTextureAnime(); - void checkPlayerGuard() const; - void setOutPower(f32, s16, int); void checkSightLine(f32, cXyz*); void setBootsModel(J3DModel**); void setItemModel(); @@ -482,14 +473,7 @@ public: void setHandModel(daPy_lk_c::daPy_ANM); void getAnmData(daPy_lk_c::daPy_ANM) const; void checkGrabWeapon(int); - void onDekuSpReturnFlg(u8); - void changeTextureAnime(u16, u16, int); - void setThrowDamage(cXyz*, s16, f32, f32, int); - void setPlayerPosAndAngle(cXyz*, s16); - void setPlayerPosAndAngle(cXyz*, csXyz*); - void setPlayerPosAndAngle(float(*)[4]); void endDemoMode(); - void getBokoFlamePos(cXyz*); void setAuraEffect(); void setWaterRipple(); void setFootEffectType(int, cXyz*, int, int); @@ -708,7 +692,6 @@ public: void procCrawlEnd_init(int, s16, s16); void procCrawlEnd(); void checkGrabSpecialHeavyState(); - void getGrabMissActor(); void setWeaponBlur(); void checkGrabBarrelSearch(int); void setGrabItemPos(); @@ -835,27 +818,6 @@ public: void procRopeThrowCatch(); void procRopeUpHang_init(); void procRopeUpHang(); - void checkRopeReadyAnime() const; - void checkRopeTag(); - void checkPlayerNoDraw(); - void getGroundY(); - MtxP getLeftHandMatrix(); - MtxP getRightHandMatrix(); - void checkPlayerFly() const; - void checkFrontRoll() const; - void checkBottleSwing() const; - void checkCutCharge() const; - void checkTactWait() const; - f32 getBaseAnimeFrameRate(); - void getBaseAnimeFrame(); - void getItemID() const; - void getThrowBoomerangID() const; - void getGrabActorID() const; - void checkGrabBarrel(); - void onFrollCrashFlg(u32); - void getOldSpeedY(); - void checkComboCutTurn() const; - void cancelChangeTextureAnime(); void checkBoomerangAnime() const; void throwBoomerang(); void returnBoomerang(); @@ -886,7 +848,6 @@ public: void procBowMove_init(); void procBowMove(); void checkHookshotReturn(); - void setHookshotCarryOffset(unsigned int, const cXyz*); void setHookshotModel(); void setHookshotSight(); void freeHookshotItem(); @@ -919,11 +880,8 @@ public: void checkEndTactMusic() const; void getTactMetronomeRate(); void checkTactLastInput(); - void setTactZev(unsigned int, int, char*); void getTactTopPos(cXyz*); void getTactNormalWait() const; - void getTactMusic() const; - void getTactTimerCancel() const; void checkTactPlayMelody(); void resetTactCount(); void procTactWait_init(int); @@ -1043,6 +1001,44 @@ public: void procCutKesa(); void checkNoControll() const; + virtual MtxP getLeftHandMatrix(); + virtual MtxP getRightHandMatrix(); + virtual void getGroundY(); + virtual void getTactMusic() const; + virtual void getTactTimerCancel() const; + virtual void checkPlayerGuard() const; + virtual void getGrabMissActor(); + virtual u32 checkPlayerFly() const; + virtual void checkFrontRoll() const; + virtual void checkBottleSwing() const; + virtual void checkCutCharge() const; + virtual void getBokoFlamePos(cXyz*); + virtual void checkTactWait() const; + virtual void setTactZev(unsigned int, int, char*); + virtual void onDekuSpReturnFlg(u8); + virtual void checkComboCutTurn() const; + virtual f32 getBaseAnimeFrameRate(); + virtual void getBaseAnimeFrame(); + virtual void getItemID() const; + virtual void getThrowBoomerangID() const; + virtual void getGrabActorID() const; + virtual void checkGrabBarrel(); + virtual void checkPlayerNoDraw(); + virtual void checkRopeTag(); + virtual void checkRopeReadyAnime() const; + virtual void voiceStart(u32); + virtual void setOutPower(f32, s16, int); + virtual void onFrollCrashFlg(u32); + virtual void getModelJointMtx(u16); + virtual void getOldSpeedY(); + virtual void setHookshotCarryOffset(unsigned int, const cXyz*); + virtual void setPlayerPosAndAngle(cXyz*, s16); + virtual void setPlayerPosAndAngle(cXyz*, csXyz*); + virtual void setPlayerPosAndAngle(float (*)[4]); + virtual void setThrowDamage(cXyz*, s16, f32, f32, int); + virtual void changeTextureAnime(u16, u16, int); + virtual void cancelChangeTextureAnime(); + /* 0x0320 */ request_of_phase_process_class mPhsLoad; /* 0x0328 */ J3DModelData* mpModelData; /* 0x032C */ J3DModel* mpCLModel; @@ -1218,7 +1214,8 @@ public: /* 0x3532 */ s16 field_0x3532; /* 0x3534 */ u8 field_0x3534[0x3544 - 0x3534]; /* 0x3544 */ s16 field_0x3544; - /* 0x3546 */ u8 field_0x3546[0x354E - 0x3546]; + /* 0x3546 */ u8 field_0x3546[0x354C - 0x3546]; + /* 0x354C */ s16 field_0x354c; /* 0x354E */ s16 field_0x354e; /* 0x3550 */ u8 field_0x3550[0x3554 - 0x3550]; /* 0x3554 */ s16 field_0x3554; diff --git a/include/d/d_bg_s.h b/include/d/d_bg_s.h index 6e04b5a6a..db8171b31 100644 --- a/include/d/d_bg_s.h +++ b/include/d/d_bg_s.h @@ -3,6 +3,10 @@ #include "SSystem/SComponent/c_sxyz.h" #include "SSystem/SComponent/c_xyz.h" +#include "SSystem/SComponent/c_bg_s_gnd_chk.h" +#include "SSystem/SComponent/c_bg_s_lin_chk.h" +#include "SSystem/SComponent/c_m3d_g_cyl.h" +#include "d/d_bg_s_chk.h" #include "d/d_bg_w.h" #include "global.h" @@ -122,4 +126,52 @@ public: bool WaterChk(dBgS_SplGrpChk* chk) { return SplGrpChk(chk); } }; // Size: 0x1404 +class dBgS_CrrPos : public cBgS_PolyInfo, public dBgS_Chk, public cBgS_Chk { +public: + dBgS_CrrPos(); + void CrrPos(dBgS&); + + virtual ~dBgS_CrrPos() {} + + void Set(cXyz* i_pos, cXyz* i_line, void* param_2, cXyz* param_3) { + mpLine0 = i_line; + pm_pos = i_pos; + field_0x058 = param_2; + SetActorPid(-1); + field_0x3c = param_3->y; + field_0x40 = param_3->z; + } + + void SetGndUpY(f32 param_0) { mOffsY2 = param_0; } + + void ClrNoRoof() { + mGndChk.OffWall(); + field_0x38 &= ~8; + } + + /* 0x038 */ u32 field_0x38; + /* 0x03C */ f32 field_0x3c; + /* 0x040 */ f32 field_0x40; + /* 0x044 */ cXyz* pm_pos; + /* 0x048 */ cXyz* mpLine0; + /* 0x04C */ u8 field_0x04C[0x058 - 0x04C]; + /* 0x058 */ void* field_0x058; + /* 0x05C */ f32 field_0x05c; + /* 0x060 */ u8 field_0x060; + /* 0x064 */ f32 mOffsY2; + /* 0x068 */ f32 field_0x068; + /* 0x06C */ cM3dGCyl mCyl0; + /* 0x084 */ cM3dGCyl mCyl1; + /* 0x09C */ cM3dGLin mLin; + /* 0x0B8 */ cBgS_GndChk mGndChk; + /* 0x0F8 */ cBgS_LinChk mLinChk; +}; // Size: 0x150 + +class dBgS_LinkCrrPos : public dBgS_CrrPos { +public: + dBgS_LinkCrrPos(); + + virtual ~dBgS_LinkCrrPos() {} +}; + #endif /* D_BG_D_BG_S_H */ \ No newline at end of file diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index a79861f78..a1125fd00 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -194,9 +194,9 @@ STATIC_ASSERT(sizeof(dBgS_Acch) == 0x1C4); class dBgS_LinkAcch : public dBgS_Acch { public: - dBgS_LinkAcch() { /* SetLink(); */ } + dBgS_LinkAcch() { SetLink(); } - /* 80140F30 */ virtual ~dBgS_LinkAcch(); + /* 80140F30 */ virtual ~dBgS_LinkAcch() {} }; class dBgS_ObjAcch : public dBgS_Acch { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 5b2677374..d8607ad30 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -165,7 +165,7 @@ public: s8 getPlayerCameraID(int idx) { return mCurCamera[idx]; } int getItemRupeeCount() { return mItemRupeeCount; } - void setItemRupeeCount(int count) { mItemRupeeCount += count; } + void setItemRupeeCount(s32 count) { mItemRupeeCount += count; } void setMessageCountNumber(s16 num) { mMsgCountNumber = num; } void setLkDemoAnmArchive(JKRArchive* i_arc) { mpLkDArc = i_arc; } @@ -189,7 +189,17 @@ public: s32 getTimerMode() { return mTimerInfo.mTimerMode; } s16 getItemMagicCount() { return mItemMagicCount; } - void setItemMagicCount(s16 magic) { mItemMagicCount = magic; } + void setItemMagicCount(s16 magic) { mItemMagicCount += magic; } + + void setItemLifeCount(f32 num) { + mItemLifeCount += num; + } + + u8 checkMesgCancelButton() { return field_0x4949; } + + void setPlayerStatus(int param_0, int i, u32 flag) { mPlayerStatus[param_0][i] |= flag; } + void clearPlayerStatus(int param_0, int i, u32 flag) { mPlayerStatus[param_0][i] &= ~flag; } + bool checkPlayerStatus(int param_0, int i, u32 flag) { return flag & mPlayerStatus[param_0][i]; } /* 0x0000 */ dBgS mBgS; /* 0x1404 */ dCcS mCcS; @@ -572,6 +582,10 @@ inline BOOL dComIfGs_isSwitch(s32 i_no, s32 i_roomNo) { return g_dComIfG_gameInfo.save.isSwitch(i_no, i_roomNo); } +inline void dComIfGs_revSwitch(int i_no, int i_roomNo) { + g_dComIfG_gameInfo.save.revSwitch(i_no, i_roomNo); +} + inline void dComIfGs_onItem(int bitNo, int roomNo) { g_dComIfG_gameInfo.save.onItem(bitNo, roomNo); } @@ -676,6 +690,38 @@ inline void dComIfGs_setWindX(s16 i_windX) { g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusB().setWindX(i_windX); } +inline const char* dComIfGs_getPlayerName() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerInfo().getPlayerName(); +} + +inline u8 dComIfGs_getGbaRupeeCount() { + return g_dComIfG_gameInfo.save.getDan().getGbaRupeeCount(); +} + +inline void dComIfGs_incGbaRupeeCount() { + g_dComIfG_gameInfo.save.getDan().incGbaRupeeCount(); +} + +inline u8 dComIfGs_checkBaitItemEmpty() { + return g_dComIfG_gameInfo.save.getPlayer().getBagItem().checkBaitItemEmpty(); +} + +inline u8 dComIfGs_getBombMax() { + return g_dComIfG_gameInfo.save.getPlayer().getItemMax().getBombNum(); +} + +inline u8 dComIfGs_getArrowMax() { + return g_dComIfG_gameInfo.save.getPlayer().getItemMax().getArrowNum(); +} + +inline u16 dComIfGs_getMaxLife() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getMaxLife(); +} + +inline u8 dComIfGs_getMaxMagic() { + return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getMaxMagic(); +} + /** * === PLAY === */ @@ -996,10 +1042,14 @@ inline int dComIfGp_getItemRupeeCount() { return g_dComIfG_gameInfo.play.getItemRupeeCount(); } -inline void dComIfGp_setItemRupeeCount(int count) { +inline void dComIfGp_setItemRupeeCount(s32 count) { g_dComIfG_gameInfo.play.setItemRupeeCount(count); } +inline void dComIfGp_setItemLifeCount(f32 amount) { + g_dComIfG_gameInfo.play.setItemLifeCount(amount); +} + inline void dComIfGp_setMessageCountNumber(s16 num) { g_dComIfG_gameInfo.play.setMessageCountNumber(num); } @@ -1016,6 +1066,19 @@ inline void dComIfGp_setItemMagicCount(s16 magic) { g_dComIfG_gameInfo.play.setItemMagicCount(magic); } +inline u8 dComIfGp_checkMesgCancelButton() { + return g_dComIfG_gameInfo.play.checkMesgCancelButton(); +} + +inline bool dComIfGp_checkPlayerStatus0(int param_0, u32 flag) { + return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 0, flag); +} + +inline bool dComIfGp_checkPlayerStatus1(int param_0, u32 flag) { + return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 1, flag); +} + + /** * === EVENT ===*/ diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index b9df33a52..e3044c15d 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -38,7 +38,7 @@ public: s16 getEventIdx(const char*, u8); void order(s16); void startCheck(s16); - void startCheckOld(const char*); + BOOL startCheckOld(const char*); BOOL endCheck(s16); BOOL endCheckOld(const char*); int getMyStaffId(const char*, fopAc_ac_c*, int); diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h index 6fd6189b8..e4041dbeb 100644 --- a/include/d/d_kankyo_wether.h +++ b/include/d/d_kankyo_wether.h @@ -297,7 +297,8 @@ struct KAMOME_EFF { /* 0x10 */ s16 field_0x10; /* 0x12 */ s16 field_0x12; /* 0x14 */ f32 field_0x14; - /* 0x18 */ u8 field_0x18[0x1E - 0x18]; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ s16 field_0x1c; /* 0x1E */ u8 field_0x1e; }; diff --git a/include/d/d_map.h b/include/d/d_map.h index bbb0695ee..d66d314e9 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -6,7 +6,7 @@ class dMap_c { public: static void create(); void isEnableEnlargementScroll(); - void isEnableDispMap(); + static bool isEnableDispMap(); void getKindMapType(); static void remove(); void setImage(int, int, f32); @@ -17,7 +17,7 @@ public: void mapDrawFrame(u8); void mapDrawEnlargementSize(f32, f32, f32, f32, u8); void mapDrawRealSize(f32, f32, u8); - void mapAGBSendIslandData(); + static void mapAGBSendIslandData(); void setPlayerStayAgbMapTypeNow(f32, f32); void agbMapNoSet(u8, u8); void agbMapNoSetCall(); @@ -62,7 +62,7 @@ public: void drawPointMain(u8, u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); void drawPointAgb(u8, f32, f32, f32, s8, s16, u8, u8, u8, u8); void getTypeAgbGcFromTypeAcs(u8, u8*, u8*); - void drawPointSingle(u8, f32, f32, f32, s8, s16, u8, u8, u8); + static void drawPointSingle(u8, f32, f32, f32, s8, s16, u8, u8, u8); void drawActorPointMiniMap(fopAc_ac_c*); void mapBufferSendAGB_commonCursor(); void mapBufferSendAGB_ocean(); diff --git a/include/d/d_save.h b/include/d/d_save.h index 8fe301f3a..1500beb42 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -12,6 +12,8 @@ public: u8 getWalletSize() { return mWalletSize; } int getRupee() const { return mRupee; } u8 getMagic() { return mMagic; } + u8 getMaxMagic() { return mMaxMagic; } + u16 getMaxLife() { return mMaxLife; } /* 0x00 */ u16 mMaxLife; /* 0x02 */ u16 mLife; @@ -128,6 +130,9 @@ class dSv_player_item_max_c { public: /* 800598D8 */ void init(); + u8 getArrowNum() const { return mArrowNum; } + u8 getBombNum() const { return mBombNum; } + /* 0x0 */ u8 field_0x0; /* 0x1 */ u8 mArrowNum; /* 0x2 */ u8 mBombNum; @@ -260,6 +265,8 @@ class dSv_player_info_c { public: /* 8005BE84 */ void init(); + const char* getPlayerName() const { return mPlayerName; } + /* 0x00 */ u8 field_0x0[0x10]; /* 0x10 */ u16 field_0x10; /* 0x10 */ u16 field_0x12; @@ -492,8 +499,11 @@ public: /* 8005CD60 */ BOOL isSwitch(int); /* 8005CE10 */ BOOL revSwitch(int); + u8 getGbaRupeeCount() { return mGbaRupeeCount; } + void incGbaRupeeCount() { mGbaRupeeCount++; } + /* 0x0 */ s8 mStageNo; - /* 0x1 */ u8 field_0x1; + /* 0x1 */ u8 mGbaRupeeCount; /* 0x4 */ u32 mSwitch[2]; }; // Size: 0xC @@ -645,6 +655,7 @@ public: dSv_restart_c& getRestart() { return mRestart; } dSv_turnRestart_c& getTurnRestart() { return mTurnRestart; } dSv_memory_c& getMemory() { return mMemory; } + dSv_danBit_c& getDan() { return mDan; } dSv_zone_c& getZone(int id) { return mZone[id]; } void removeZone(int zoneNo) { mZone[zoneNo].reset(); } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 85f10094b..6e944808b 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -548,8 +548,8 @@ inline void fopAcM_seStartCurrent(fopAc_ac_c* actor, u32 sfxID, u32 param_2) { } inline void fopAcM_seStart(fopAc_ac_c* actor, u32 sfxID, u32 param_2) { - s8 roomNo = fopAcM_GetRoomNo(actor); - // mDoAud_seStart(sfxID, &actor->mEyePos, param_2, dComIfGp_getReverb(roomNo)); + s32 roomNo = fopAcM_GetRoomNo(actor); + mDoAud_seStart(sfxID, &actor->mEyePos, param_2, dComIfGp_getReverb(roomNo)); } extern "C" { diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index 80a69df88..77f584b3f 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -67,5 +67,6 @@ inline s32 fopMsgM_Timer_create(s16 param_0, u8 param_1, u32 param_2, u8 param_3 } u32 fopMsgM_searchMessageNumber(u32); +void fopMsgM_messageSendOn(); #endif diff --git a/include/m_Do/m_Do_dvd_thread.h b/include/m_Do/m_Do_dvd_thread.h index f118bde03..3cc236728 100644 --- a/include/m_Do/m_Do_dvd_thread.h +++ b/include/m_Do/m_Do_dvd_thread.h @@ -31,6 +31,7 @@ public: /* 800164BC */ virtual s32 execute(); void* getMemAddress() const { return mData; } + s32 getMemSize() const { return mDataSize; } private: /* 0x14 */ u8 mMountDirection; diff --git a/include/m_Do/m_Do_gba_com.h b/include/m_Do/m_Do_gba_com.h index fa925c341..9a3750be2 100644 --- a/include/m_Do/m_Do_gba_com.h +++ b/include/m_Do/m_Do_gba_com.h @@ -36,7 +36,7 @@ public: int mDoGaC_SendEntry(u8, u32); int mDoGaC_SendStatusCheck(u8); int mDoGaC_SendEndCheck(u8); - bool mDoGaC_RecvStatusCheck(u8); + BOOL mDoGaC_RecvStatusCheck(u8); void mDoGaC_DataStatusReset(u8); int mDoGaC_StatusSendSet(u8); void mDoGaC_ProbeCheck0(); @@ -96,6 +96,8 @@ public: extern mDoGaC_agbCom_c g_mDoGaC_gbaCom; extern mDoGaC_DataManag_c TestDataManager[16]; +u32 BigLittleChange(u32); + inline u8 mDoGaC_getPortNo() { return g_mDoGaC_gbaCom.getPortNo(); } diff --git a/include/m_Do/m_Do_lib.h b/include/m_Do/m_Do_lib.h index 894aacdd5..9b2044915 100644 --- a/include/m_Do/m_Do_lib.h +++ b/include/m_Do/m_Do_lib.h @@ -44,9 +44,4 @@ u8 mDoLib_setResTimgObj(ResTIMG const* res, GXTexObj* o_texObj, u32 tlut_name, GXTlutObj* o_tlutObj); void mDoLib_pos2camera(Vec* src, Vec* dst); -// was causing redefinition issues -//inline u32 calcAlphaCmpID(u32 param_1, u32 param_2, u32 param_3) { -// return ((param_1 & 0xff) << 5) + ((param_2 & 0xff) << 3) + (param_3 & 0xff); -//} - #endif /* M_DO_M_DO_LIB_H */ diff --git a/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp b/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp index 8356377c0..67101fd9c 100644 --- a/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp +++ b/src/SSystem/SComponent/c_bg_s_gnd_chk.cpp @@ -9,6 +9,6 @@ /* 8024738C-80247418 .text __ct__11cBgS_GndChkFv */ cBgS_GndChk::cBgS_GndChk() { m_pos = cXyz::Zero; - setActorPid(0xFFFFFFFF); + SetActorPid(0xFFFFFFFF); mFlags = 2; } diff --git a/src/SSystem/SComponent/c_bg_s_lin_chk.cpp b/src/SSystem/SComponent/c_bg_s_lin_chk.cpp index e35a2f9fd..cdd092f08 100644 --- a/src/SSystem/SComponent/c_bg_s_lin_chk.cpp +++ b/src/SSystem/SComponent/c_bg_s_lin_chk.cpp @@ -12,7 +12,7 @@ void cBgS_LinChk::ct() { mLin.mStart = zero; mLin.mEnd = zero; field_0x40 = zero; - setActorPid(-1); + SetActorPid(-1); field_0x4c = 0; mFrontFlag = 1; mBackFlag = 0; @@ -23,7 +23,7 @@ void cBgS_LinChk::Set2(cXyz* pStart, cXyz* pEnd, unsigned int actorPid) { mLin.mStart.set(*pStart); mLin.mEnd.set(*pEnd); field_0x40 = *pEnd; - setActorPid(actorPid); + SetActorPid(actorPid); field_0x4c &= ~0x10; ClearPi(); } diff --git a/src/d/actor/d_a_agb.cpp b/src/d/actor/d_a_agb.cpp index e67c04c9d..6e8a671b4 100644 --- a/src/d/actor/d_a_agb.cpp +++ b/src/d/actor/d_a_agb.cpp @@ -3,157 +3,875 @@ // Translation Unit: d_a_agb.cpp // -#include "d_a_agb.h" -#include "dolphin/types.h" +#include "d/actor/d_a_agb.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTGba.h" +#include "d/actor/d_a_player_link.h" +#include "d/d_bg_s_lin_chk.h" +#include "d/d_com_inf_game.h" +#include "d/d_item_data.h" +#include "d/d_meter.h" +#include "d/d_procname.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "m_Do/m_Do_gba_com.h" +#include "m_Do/m_Do_mtx.h" + +// stripped or compiler generated? +static u32 unused_lit_2100[] = {0x3F800000, 0x3F800000, 0x3F800000, + 0x3F800000, 0x3F800000, 0x3F800000}; + +// temp +class daNpc_Md_c { +public: + static bool m_flying; +}; + +class daNpc_Cb1_c { +public: + static bool m_flying; +}; + +class daBomb_c { +public: + enum State_e { + STATE_8_e = 8, + }; + + static u32 prm_make(State_e, bool, bool); +}; + +static mDoDvdThd_toMainRam_c* l_gbaCommand; + +int daAgb_c::mEffect; +u8 daAgb_c::mItemBuy; +daAgb_c::daAgb_GbaFlg daAgb_c::mGbaFlg; +daAgb_c::daAgb_Switch daAgb_c::mSwitch; +daAgb_c::daAgb_Item daAgb_c::mItem; +u8 daAgb_c::mShop; /* 800CF5EC-800CF6B8 .text __ct__11daAgb_HIO_cFv */ daAgb_HIO_c::daAgb_HIO_c() { - /* Nonmatching */ + field_0x04[0].r = 0; + field_0x04[0].g = 255; + field_0x04[0].b = 0; + field_0x04[0].a = 255; + + field_0x04[1].r = 0; + field_0x04[1].g = 30; + field_0x04[1].b = 0; + field_0x04[1].a = 0; + + field_0x14 = 24.0f; + field_0x18 = 50.0f; + field_0x1c = 781.25f; + field_0x20 = 170.0f; + field_0x24 = 0.0f; + field_0x28 = 5.0f; + field_0x2c = 10.0f; + field_0x30 = 15.0f; } -/* 800CF6B8-800CF700 .text __dt__14mDoHIO_entry_cFv */ -mDoHIO_entry_c::~mDoHIO_entry_c() { - /* Nonmatching */ -} +static daAgb_HIO_c l_HIO; /* 800CF700-800CF71C .text init__10dMsgCtrl_cFUs */ -void dMsgCtrl_c::init(unsigned short) { - /* Nonmatching */ +int dMsgCtrl_c::init(u16 param_0) { + field_0x0 = param_0; + mMsgID = -1; + mpMsg = NULL; + return 1; } /* 800CF71C-800CF7B4 .text execute__10dMsgCtrl_cFv */ -void dMsgCtrl_c::execute() { - /* Nonmatching */ +int dMsgCtrl_c::execute() { + if (mMsgID == -1) { + mMsgID = fopMsgM_messageSet(field_0x0); + } else if (mpMsg == NULL) { + mpMsg = fopMsgM_SearchByID(mMsgID); + } else { + if (mpMsg->mMode == 18) { + mpMsg->mMode = 19; + dComIfGp_event_onEventFlag(8); + } + + return mpMsg->mMode; + } + + return -1; } +static dMsgCtrl_c l_msgCtrl; + /* 800CF7B4-800CF7F8 .text sjis2chrNo__FUc */ -void sjis2chrNo(unsigned char) { - /* Nonmatching */ +u8 sjis2chrNo(u8 i_chr) { + static u8 l_sjis2chrNo[] = { + ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', + 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', + 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', ' ', 0xf8, 0xd8, 0xfe, 0xde, 0x9c, 0x8c, 0xe6, 0xc6, 0xf0, 0xd0, 0xc7, + 0xe7, 0xdf, ' ', ' ', '+', 0xbf, 0xa1, 0xab, 0xbb, 0x84, 0x93, '!', ' ', '-', '?', + ' ', ' ', '(', ')', ' ', '.', ' ', 0xd7, 0xf7, '\'', '\"', 0x85, '/', 0xc0, 0xc8, + 0xcc, 0xd2, 0xd9, 0xe0, 0xe8, 0xec, 0xf2, 0xf9, 0xc1, 0xc9, 0xcd, 0xd3, 0xda, 0xdd, 0xe1, + 0xe9, 0xed, 0xf3, 0xfa, 0xfd, 0xc2, 0xca, 0xce, 0xd4, 0xdb, 0xe2, 0xea, 0xee, 0xf4, 0xfb, + 0xc3, 0xd1, 0xd5, 0xe3, 0xf1, 0xf5, 0xc4, 0xcb, 0xcf, 0xd6, 0xdc, 0x9f, 0xe4, 0xeb, 0xef, + 0xf6, 0xfc, 0xff, 0xc5, 0xe5, 0x8a, 0x9a, 0xba, 0xaa, + }; + + for (u8 i = 0; i < 159; i++) { + if (i_chr == l_sjis2chrNo[i]) { + return i; + } + } + + return 0xFF; } /* 800CF7F8-800CF894 .text NameConv__7daAgb_cFv */ void daAgb_c::NameConv() { - /* Nonmatching */ + int i; + const char* name = dComIfGs_getPlayerName(); + mPlayerName = 0; + + for (i = 0; i < 8; i++) { + u8 chr = sjis2chrNo(*name); + mPlayerName |= chr; + name++; + + if (i < 7) { + mPlayerName <<= 8; + } + } } /* 800CF894-800CFA30 .text uploadInitCheck__7daAgb_cFv */ -void daAgb_c::uploadInitCheck() { - /* Nonmatching */ +int daAgb_c::uploadInitCheck() { + s32 roomNo = dComIfGp_roomControl_getStayNo(); + dStage_FileList_dt_c* fili_p = + dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + + if ((dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != 7 && + !dMap_c::isEnableDispMap()) || + (fili_p != NULL && (fili_p->mParam & 2))) + { + l_msgCtrl.init(1); + mUploadAction = 10; + } else if (g_mDoGaC_gbaCom.field_0x0 == 0) { + field_0x66f = 0; + field_0x678 = 0; + JUTGba::getManager()->doInitProbe(1, NULL, NULL); + JUTGba::getManager()->doInitProbe(2, NULL, NULL); + JUTGba::getManager()->doInitProbe(3, NULL, NULL); + mUploadAction = 1; + } else if (g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { + l_msgCtrl.init(2); + mUploadAction = 10; + } else { + JUTGba::getManager()->doInitProbe(1, NULL, NULL); + JUTGba::getManager()->doInitProbe(2, NULL, NULL); + JUTGba::getManager()->doInitProbe(3, NULL, NULL); + mUploadAction = 1; + g_mDoGaC_gbaCom.mDoGaC_ConnectSleep(); + } + + return 1; } /* 800CFA30-800CFB68 .text uploadPortCheckWait__7daAgb_cFv */ -void daAgb_c::uploadPortCheckWait() { - /* Nonmatching */ +int daAgb_c::uploadPortCheckWait() { + u32 sp14[3]; + int sp8[3]; + + for (int i = 0; i < 3; i++) { + sp8[i] = JUTGba::getManager()->resultInitProbe(i + 1, &sp14[i]); + if (sp8[i] == -2) { + return 1; + } + } + + if (g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { + l_msgCtrl.init(2); + mUploadAction = 10; + } else { + for (int i = 0; i < 3; i++) { + if (sp8[i] == 0 && sp14[i] == 0x40000) { + mPortNo = i + 1; + l_msgCtrl.init(5); + mUploadAction = 2; + return 1; + } + } + + l_msgCtrl.init(3); + mUploadAction = 10; + g_mDoGaC_gbaCom.mDoGaC_ConnectWake(); + } + + return 1; } +extern JKRHeap* dMsg_getAgbWorkArea(); + /* 800CFB68-800CFC94 .text uploadSelect__7daAgb_cFv */ -void daAgb_c::uploadSelect() { - /* Nonmatching */ +int daAgb_c::uploadSelect() { + if (l_msgCtrl.execute() == 14) { + if (dComIfGp_checkMesgCancelButton() || (int)l_msgCtrl.mpMsg->mSelectedChoiceIdx != 0) { + l_msgCtrl.mpMsg->mMode = 16; + g_mDoGaC_gbaCom.mDoGaC_ConnectWake(); + } else { + l_msgCtrl.mpMsg->mMode = 15; + fopMsgM_messageSet(6); // "Now calling Tingle..." + mUploadAction = 3; + + l_gbaCommand = + mDoDvdThd_toMainRam_c::create("/res/Gba/client_u.bin", 0, dMsg_getAgbWorkArea()); + JUT_ASSERT(860, l_gbaCommand != 0); + + g_mDoGaC_gbaCom.mDoGaC_GbaReboot(); + g_mDoGaC_gbaCom.mPortNo = mPortNo; + field_0x66f = 0; + field_0x678 = 0; + } + } + + return 1; } /* 800CFC94-800CFD60 .text uploadJoyboot1__7daAgb_cFv */ -void daAgb_c::uploadJoyboot1() { - /* Nonmatching */ +int daAgb_c::uploadJoyboot1() { + if (l_gbaCommand->sync()) { + void* programp = l_gbaCommand->getMemAddress(); + JUT_ASSERT(891, programp != 0); + + JUTGba::getManager()->doJoyBoot(mDoGaC_getPortNo(), 3, -1, (u8*)programp, + l_gbaCommand->getMemSize() - 4, NULL, NULL); + mUploadAction = 4; + field_0x664 = 450; + } + + return 1; } /* 800CFD60-800CFEA0 .text uploadJoyboot2__7daAgb_cFv */ -void daAgb_c::uploadJoyboot2() { - /* Nonmatching */ +int daAgb_c::uploadJoyboot2() { + u8 sp8[16]; + + int result = JUTGba::getManager()->resultJoyBoot(mDoGaC_getPortNo(), sp8); + if (result != -2) { + JKRHeap::free(l_gbaCommand->getMemAddress(), NULL); + delete l_gbaCommand; + + if (result == 0) { + field_0x664 = 15; + mUploadAction = 6; + } else { + l_msgCtrl.mpMsg->mMode = 15; + fopMsgM_messageSet(7); // "An error has occurred." + fopMsgM_messageSendOn(); + mUploadAction = 10; + } + } else { + field_0x664--; + if (field_0x664 == 0) { + l_msgCtrl.mpMsg->mMode = 15; + fopMsgM_messageSet(7); // "An error has occurred." + fopMsgM_messageSendOn(); + mUploadAction = 10; + + JKRHeap::free(l_gbaCommand->getMemAddress(), NULL); + delete l_gbaCommand; + } + } + + return 1; } /* 800CFEA0-800CFF58 .text uploadMessageLoad__7daAgb_cFv */ -void daAgb_c::uploadMessageLoad() { - /* Nonmatching */ +int daAgb_c::uploadMessageLoad() { + field_0x664--; + if (field_0x664 == 0) { + l_gbaCommand = mDoDvdThd_toMainRam_c::create("/res/Gba/msg_LZ.bin", 0, NULL); + JUT_ASSERT(1000, l_gbaCommand != 0); + + mUploadAction = 7; + g_mDoGaC_gbaCom.field_0x0 = 1; + g_mDoGaC_gbaCom.mDoGaC_ComStart(); + } + + return 1; } /* 800CFF58-800CFF78 .text uploadMessageLoad2__7daAgb_cFv */ -void daAgb_c::uploadMessageLoad2() { - /* Nonmatching */ +int daAgb_c::uploadMessageLoad2() { + if (l_gbaCommand->sync()) { + mUploadAction = 5; + } + + return 1; } /* 800CFF78-800D00C8 .text uploadConnect__7daAgb_cFv */ -void daAgb_c::uploadConnect() { - /* Nonmatching */ +int daAgb_c::uploadConnect() { + if (g_mDoGaC_gbaCom.field_0x0 != 0 && g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { + void* programp = l_gbaCommand->getMemAddress(); + JUT_ASSERT(1045, programp != 0); + g_mDoGaC_gbaCom.mDoGaC_SendDataSet((u32*)programp, l_gbaCommand->getMemSize(), 0, 0); + + mUploadAction = 8; + NameConv(); + g_mDoGaC_gbaCom.mDoGaC_SendDataSet((u32*)&mPlayerName, sizeof(mPlayerName), 10, 0); + + dMap_c::mapAGBSendIslandData(); + } else { + g_mDoGaC_gbaCom.mDoGaC_GbaReboot(); + l_msgCtrl.mpMsg->mMode = 15; + fopMsgM_messageSet(7); // "An error has occurred." + fopMsgM_messageSendOn(); + mUploadAction = 10; + + JKRHeap::free(l_gbaCommand->getMemAddress(), NULL); + delete l_gbaCommand; + } + + return 1; } /* 800D00C8-800D01F4 .text uploadMessageSend__7daAgb_cFv */ -void daAgb_c::uploadMessageSend() { - /* Nonmatching */ +int daAgb_c::uploadMessageSend() { + if (g_mDoGaC_gbaCom.field_0x110->field_0x4 == 0) { + field_0x678 = 1; + if (field_0x67a != 0) { + l_msgCtrl.mpMsg->mMode = 15; + fopMsgM_messageSet(8); // "Tingle appeared on your Game Boy Advance!" + fopMsgM_messageSendOn(); + mUploadAction = 11; + field_0x664 = 60; + + dComIfGs_onEventBit(0x1A20); + dComIfGp_particle_set(0x2E7, ¤t.pos, NULL, NULL, 255, &field_0x684, -1, NULL, + NULL, NULL); + + JKRHeap::free(l_gbaCommand->getMemAddress(), NULL); + delete l_gbaCommand; + } + } else if (g_mDoGaC_gbaCom.field_0x110->field_0x4 == 9) { + field_0x664 = 5; + mUploadAction = 9; + } + + return 1; } /* 800D01F4-800D021C .text uploadRetryWait__7daAgb_cFv */ -void daAgb_c::uploadRetryWait() { - /* Nonmatching */ +int daAgb_c::uploadRetryWait() { + field_0x664--; + if (field_0x664 == 0) { + mUploadAction = 5; + } + + return 1; } /* 800D021C-800D0264 .text uploadMsgEndWait__7daAgb_cFv */ -void daAgb_c::uploadMsgEndWait() { - /* Nonmatching */ +int daAgb_c::uploadMsgEndWait() { + if (l_msgCtrl.execute() == 14) { + l_msgCtrl.mpMsg->mMode = 16; + } + + return 1; } /* 800D0264-800D02E8 .text uploadMsgEndTimer__7daAgb_cFv */ -void daAgb_c::uploadMsgEndTimer() { - /* Nonmatching */ +int daAgb_c::uploadMsgEndTimer() { + l_msgCtrl.execute(); + if (field_0x664 != 0) { + field_0x664--; + + if (field_0x664 == 0) { + l_msgCtrl.mpMsg->mMode = 16; + fopMsgM_messageSendOn(); + } else if (field_0x664 == 30) { + field_0x66f = 1; + } + } + + return 1; } +daAgb_c::uploadFunc daAgb_c::uploadFuncTable[] = { + &daAgb_c::uploadInitCheck, &daAgb_c::uploadPortCheckWait, &daAgb_c::uploadSelect, + &daAgb_c::uploadJoyboot1, &daAgb_c::uploadJoyboot2, &daAgb_c::uploadConnect, + &daAgb_c::uploadMessageLoad, &daAgb_c::uploadMessageLoad2, &daAgb_c::uploadMessageSend, + &daAgb_c::uploadRetryWait, &daAgb_c::uploadMsgEndWait, &daAgb_c::uploadMsgEndTimer, +}; + /* 800D02E8-800D0364 .text modeLoad__7daAgb_cFv */ void daAgb_c::modeLoad() { - /* Nonmatching */ + if (mEvtInfo.checkCommandTalk()) { + uploadFunc func = uploadFuncTable[mUploadAction]; + (this->*func)(); + } else { + mUploadAction = 0; + mEvtInfo.onCondition(1); + mMode = 0; + } } /* 800D0364-800D0490 .text modeLookAttention__7daAgb_cFv */ void daAgb_c::modeLookAttention() { - /* Nonmatching */ + static bool se_flag = false; + + if (mEvtInfo.checkCommandDemoAccrpt()) { + if (!se_flag) { + fopAcM_seStart(this, JA_SE_CV_CHI_MEGAHORN, 0); + se_flag = true; + } + + if (dComIfGp_getEventManager().endCheckOld("DEFAULT_AGB_LOOK_ATTENTION")) { + dComIfGp_event_onEventFlag(8); + mMode = 0; + se_flag = false; + + field_0x65c = 1; + if (field_0x674 == 0) { + shape_angle.x = 0; + shape_angle.y = 0; + shape_angle.z = 0; + field_0x628 = 2.5f; + } + } + } else { + fopAcM_orderOtherEvent2(this, "DEFAULT_AGB_LOOK_ATTENTION", 4, 0xFFFF); + } } +u8 daAgb_c::DungeonNoTable[] = { + 0, 11, 11, 1, 2, 3, 4, 5, 17, 17, 17, 17, 17, 17, 17, 17, +}; + /* 800D0490-800D0580 .text DungeonNoGet__7daAgb_cFv */ -void daAgb_c::DungeonNoGet() { - /* Nonmatching */ +u8 daAgb_c::DungeonNoGet() { + u8 var_r0 = DungeonNoTable[field_0x66c]; + + u8 dungeon_no = var_r0; + if (dungeon_no == 0) { + if (field_0x67e != 0) { + switch (field_0x66d) { + case 1: + dungeon_no = 10; + break; + case 11: + dungeon_no = 6; + break; + case 13: + dungeon_no = 7; + break; + case 41: + dungeon_no = 8; + break; + case 44: + dungeon_no = 9; + break; + case 4: + dungeon_no = 14; + break; + case 20: + dungeon_no = 15; + break; + case 23: + dungeon_no = 12; + break; + case 40: + dungeon_no = 16; + break; + case 45: + dungeon_no = 13; + break; + } + } + + if (field_0x66d != field_0x66e) { + resetCursor(true); + } + } + + field_0x66e = field_0x66d; + return dungeon_no; } /* 800D0580-800D05D4 .text MapNoSet__7daAgb_cFUcUcUc */ -void daAgb_c::MapNoSet(unsigned char, unsigned char, unsigned char) { - /* Nonmatching */ +void daAgb_c::MapNoSet(u8 param_0, u8 param_1, u8 param_2) { + field_0x66c = param_0; + field_0x66d = param_1; + field_0x67e = param_2 != 0; + field_0x670 = 1; + + mFlags.field_0xb_3 = DungeonNoGet(); } /* 800D05D4-800D05F0 .text onFree__7daAgb_cFv */ void daAgb_c::onFree() { - /* Nonmatching */ + field_0x671 = 1; + field_0x650 = -1; + field_0x677 = 0; } /* 800D05F0-800D0608 .text onHold__7daAgb_cFv */ void daAgb_c::onHold() { - /* Nonmatching */ + field_0x674 = 1; + mBrk.setPlaySpeed(6.0f); } /* 800D0608-800D0620 .text offHold__7daAgb_cFv */ void daAgb_c::offHold() { - /* Nonmatching */ + field_0x674 = 0; + mBrk.setPlaySpeed(1.0f); } /* 800D0620-800D070C .text resetCursor__7daAgb_cFb */ -void daAgb_c::resetCursor(bool) { - /* Nonmatching */ +void daAgb_c::resetCursor(bool param_0) { + fopAc_ac_c* player_p = dComIfGp_getPlayer(0); + field_0x671 = 0; + field_0x677 = 0; + field_0x650 = -1; + + if (fopAcM_GetName(player_p) != PROC_NPC_KAM) { + current.pos = player_p->current.pos; + orig.pos = player_p->current.pos; + } else { + current.pos = daPy_getPlayerLinkActorClass()->current.pos; + orig.pos = daPy_getPlayerLinkActorClass()->current.pos; + } + + field_0x628 = 2.5f; + shape_angle.x = 0; + shape_angle.y = 0; + shape_angle.z = 0; + + if (param_0) { + if (field_0x66b == 14) { + field_0x65c = 0; + } + + field_0x675 = 0; + field_0x676 = 0; + } + + field_0x674 = 0; + mBrk.setPlaySpeed(1.0f); } /* 800D070C-800D0734 .text FlashCheck__7daAgb_cFv */ -void daAgb_c::FlashCheck() { - /* Nonmatching */ +bool daAgb_c::FlashCheck() { + if (field_0x671 != 0 || field_0x677 == 1) { + return true; + } + + return false; } /* 800D0734-800D0978 .text FlagsRecv__7daAgb_cFv */ +// NONMATCHING - a lot of issues, not really sure what's going on here void daAgb_c::FlagsRecv() { - /* Nonmatching */ + int portNo = mDoGaC_getPortNo(); + interface_of_controller_pad* pad_p = &g_mDoCPd_cpadInfo[portNo]; + u32 temp_r3 = BigLittleChange(mGbaFlg.field_0x0); + + u32 temp_r0 = temp_r3 >> 0x10U; + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~0x10) | ((temp_r3 >> 0x12) & 0x10)); + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~0x20) | ((temp_r3 >> 0x12) & 0x20)); + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~0x80) | ((temp_r3 >> 0xE) & 0x80)); + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~0x40) | ((temp_r3 >> 0xE) & 0x40)); + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~1) | ((temp_r3 >> 0x10) & 1)); + pad_p->mButtonHold1 = (u8)((pad_p->mButtonHold1 & ~0x80) | ((temp_r3 >> 0xA) & 0x80)); + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~4) | ((temp_r3 >> 0x16) & 4)); + pad_p->mButtonHold0 = (u8)((pad_p->mButtonHold0 & ~2) | ((temp_r3 >> 0x18) & 2)); + pad_p->mButtonHold1 = + (u8)((pad_p->mButtonHold1 & ~0x10) | ((((temp_r3 >> 0x13) & 1) << 4) & 0x10)); + + u32 temp_r5 = temp_r0 & (temp_r0 ^ field_0x65a); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~0x10) | ((temp_r5 >> 2) & 0x10)); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~0x20) | ((temp_r5 >> 2) & 0x20)); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~0x80) | ((temp_r5 << 2) & 0x80)); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~0x40) | ((temp_r5 << 2) & 0x40)); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~1) | (temp_r5 & 1)); + pad_p->mButtonTrig1 = (u8)((pad_p->mButtonTrig1 & ~0x80) | ((temp_r5 << 6) & 0x80)); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~4) | ((temp_r5 >> 6) & 4)); + pad_p->mButtonTrig0 = (u8)((pad_p->mButtonTrig0 & ~2) | ((temp_r5 >> 8) & 2)); + pad_p->mButtonTrig1 = (u8)((pad_p->mButtonTrig1 & ~0x10) | ((temp_r5 << 1) & 0x10)); + + g_mDoCPd_cpadInfo[portNo].mGamepadErrorFlags = 0; + + field_0x65a = temp_r0; + field_0x673 = mGbaFlg.field_0x3 != 0; + field_0x630 = BigLittleChange(mGbaFlg.field_0x4) >> 0x10; + field_0x632 = BigLittleChange(mGbaFlg.field_0x6) >> 0x10; + field_0x67a = (mGbaFlg.field_0x2 >> 2); + + if (!dComIfGs_isEventBit(0x1708) && ((mGbaFlg.field_0x2 >> 3) & 1)) { + dComIfGs_onEventBit(0x1708); + } + + if (!dComIfGs_isEventBit(0x1A10) && ((mGbaFlg.field_0x2 >> 4) & 1)) { + dComIfGs_onEventBit(0x1A10); + } + + if (!dComIfGs_isEventBit(0x1A08) && ((mGbaFlg.field_0x2 >> 5) & 1)) { + dComIfGs_onEventBit(0x1A08); + } } /* 800D0978-800D0A54 .text SwitchOn__7daAgb_cFv */ void daAgb_c::SwitchOn() { - /* Nonmatching */ + if (mSwitch.field_0x1 == (u8)dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo())) { + u8 var_r31 = mSwitch.field_0x3 - 1; + + if (mSwitch.field_0x0 != 0xFF) { + dComIfGs_revSwitch(mSwitch.field_0x0, mSwitch.field_0x2); + } + + if (var_r31 != 9) { + u8 sw = mSwitch.field_0x4; + if (sw != 0xFF) { + if (var_r31 <= 1 || var_r31 == 8) { + dComIfGs_onSwitch(sw, mSwitch.field_0x2); + } else { + dComIfGs_revSwitch(sw, mSwitch.field_0x2); + } + } + } + } + + g_mDoGaC_gbaCom.mDoGaC_DataStatusReset(8); } /* 800D0A54-800D1188 .text GbaItemUse__7daAgb_cFv */ +// NONMATCHING - mostly done, some regswaps void daAgb_c::GbaItemUse() { - /* Nonmatching */ + u32 temp_r29 = mItem.field_0x0; + u32 var_r28 = 0; + + u32 temp_r0 = temp_r29 - 3; + if (temp_r0 == 0 || temp_r0 == 1 || temp_r0 == 2 || temp_r29 == 0x11 || temp_r29 == 0x12) { + s32 roomNo = dComIfGp_roomControl_getStayNo(); + dStage_FileList_dt_c* fili_p = + dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + + if (fili_p != NULL && fili_p->mParam & 4) { + if (field_0x67c != 0) { + mEffect = BigLittleChange((field_0x660 << 0x10) | 0x300); + return; + } else if (temp_r29 == 5) { + f32 temp_f1 = cM_rndF(100.0f); + + if (temp_f1 < 10.0f) { + var_r28 = 0x13; + } else if (temp_f1 < 40.0) { + var_r28 = 0xA; + } else if (temp_f1 < 70.0) { + var_r28 = 0xD; + } else if (dComIfGs_isEventBit(0x2E08)) { + var_r28 = 0xC; + } else { + var_r28 = 0xD; + } + + if ((var_r28 == 0xC || var_r28 == 0xD) && + (daPy_getPlayerLinkActorClass()->field_0x2a0 & 1)) + { + var_r28 = 0xA; + } + } + } else { + mEffect = 0x20000; + return; + } + } + + if (dComIfGs_getRupee() < mItem.field_0x1) { + mEffect = 0x10000; + return; + } + + switch (temp_r29) { + case 16: + if (daPy_getPlayerLinkActorClass() != dComIfGp_getPlayer(0) || + dComIfGp_checkPlayerStatus0(0, 0x8000000) || + (daPy_getPlayerLinkActorClass()->checkPlayerFly() && + !dComIfGp_checkPlayerStatus0(0, 0x100000) && !dComIfGp_checkPlayerStatus0(0, 0x10000))) + { + mEffect = BigLittleChange(0x1F0300); + return; + } else if (field_0x67d != 0) { + mEffect = BigLittleChange((field_0x662 << 0x10) | 0x300); + return; + } + field_0x67f = 1; + break; + case 2: + if (field_0x67b != 0) { + mEffect = BigLittleChange((field_0x65e << 0x10) | 0x300); + return; + } + + if (daPy_getPlayerLinkActorClass() != dComIfGp_getPlayer(0) && + fopAcM_searchPlayerDistanceXZ(this) < 232.0f) + { + mEffect = 0; + return; + } + + if ((int)field_0x671 != 0 || (int)field_0x677 == 1) { + if ((int)field_0x671 == 0 && dComIfGs_getGbaRupeeCount() < 24 && + fopAcM_IsExecuting(field_0x650)) + { + fopAc_ac_c* actor_p = fopAcM_SearchByID(field_0x650); + + if (cM_rndF(5.0f) < 4.0) { + field_0x640 = 3; + } else { + field_0x640 = 4; + } + + field_0x634 = actor_p->current.pos; + dComIfGs_incGbaRupeeCount(); + temp_r29 = 15; + } + + fopAcM_create(0x128, daBomb_c::prm_make(daBomb_c::STATE_8_e, false, false), + ¤t.pos, -1, NULL, NULL, -1, NULL); + field_0x65c = 0x78; + } else { + temp_r29 = 0xe; + onFree(); + field_0x65c = 0x10e; + mBrk.setPlaySpeed(6.0f); + } + break; + case 0x15: + resetCursor(false); + fopAcM_create(0x128, daBomb_c::prm_make(daBomb_c::STATE_8_e, false, false), ¤t.pos, + -1, NULL, NULL, -1, NULL); + field_0x65c = 0x78; + break; + case 0x11: + mEffect = BigLittleChange(temp_r29); + return; + case 3: + daPy_lk_c* temp_r3 = daPy_getPlayerLinkActorClass(); + temp_r3->field_0x29c |= 0x1000; + temp_r3->field_0x354c = 0x96; + resetCursor(false); + field_0x65c = 0x96; + mBrk.setPlaySpeed(6.0f); + break; + case 0x12: + if (daPy_getPlayerLinkActorClass()->field_0x2a0 & 1) { + mEffect = 0; + return; + } else { + mEffect = BigLittleChange(temp_r29); + return; + } + break; + case 4: + if (daPy_getPlayerLinkActorClass()->field_0x2a0 & 1) { + mEffect = 0; + return; + } else { + daPy_getPlayerLinkActorClass()->field_0x354e = 300; + resetCursor(false); + field_0x65c = 300; + mBrk.setPlaySpeed(6.0f); + } + break; + case 12: + if (field_0x67c != 0) { + mEffect = BigLittleChange((field_0x660 << 0x10) | 0x300); + return; + } else { + daPy_lk_c* temp_r4 = daPy_getPlayerLinkActorClass(); + temp_r4->field_0x29c |= 0x1000; + temp_r4->field_0x354c = 300; + if (!(daPy_getPlayerLinkActorClass()->field_0x2a0 & 1)) { + temp_r4->field_0x354e = 300; + } + + resetCursor(false); + field_0x65c = 300; + mBrk.setPlaySpeed(6.0f); + } + break; + case 13: + if (field_0x67c != 0) { + mEffect = BigLittleChange((field_0x660 << 0x10) | 0x300); + return; + } else { + if ((daPy_getPlayerLinkActorClass()->field_0x2a0 & 1)) { + mEffect = 0; + return; + } + + daPy_getPlayerLinkActorClass()->field_0x354e = 600; + + resetCursor(false); + field_0x65c = 600; + mBrk.setPlaySpeed(6.0f); + } + break; + case 5: + temp_r29 |= (var_r28 << 8); + resetCursor(false); + break; + case 0x13: + resetCursor(false); + field_0x65c = 30; + break; + case 7: + if (dComIfGs_checkGetItem(ESA_BAG)) { + if (dComIfGs_checkBaitItemEmpty()) { + temp_r29 |= 0x1000000; + } + + if (dComIfGs_checkGetItem(BOMB_BAG) && dComIfGs_getBombNum() < dComIfGs_getBombMax()) { + temp_r29 |= 0x10000; + } + + if (dComIfGs_getItem(12) != NO_ITEM && dComIfGs_getArrowNum() < dComIfGs_getArrowMax()) + { + temp_r29 |= 0x100; + } + } + break; + case 0x14: + resetCursor(false); + break; + case 8: + dComIfGp_setItemLifeCount(12.0f); + resetCursor(false); + field_0x65c = 60; + break; + case 9: + dComIfGp_setItemMagicCount(8); + resetCursor(false); + field_0x65c = 60; + break; + case 10: + dComIfGp_setItemLifeCount(dComIfGs_getMaxLife()); + dComIfGp_setItemMagicCount(dComIfGs_getMaxMagic()); + resetCursor(false); + field_0x65c = 60; + break; + default: + mEffect = 0; + return; + } + + field_0x672 = 0; + dComIfGp_setItemRupeeCount(-mItem.field_0x1); + mEffect = BigLittleChange(temp_r29); + field_0x66b = temp_r29; } /* 800D1188-800D12E4 .text Shopping__7daAgb_cFv */ @@ -162,17 +880,12 @@ void daAgb_c::Shopping() { } /* 800D12E4-800D1A3C .text FlagsSend__7daAgb_cFUl */ -void daAgb_c::FlagsSend(unsigned long) { +void daAgb_c::FlagsSend(u32) { /* Nonmatching */ } /* 800D1A3C-800D25D8 .text CursorMove__7daAgb_cFP10fopAc_ac_cUl */ -void daAgb_c::CursorMove(fopAc_ac_c*, unsigned long) { - /* Nonmatching */ -} - -/* 800D25D8-800D272C .text __dt__15dBgS_LinkLinChkFv */ -dBgS_LinkLinChk::~dBgS_LinkLinChk() { +void daAgb_c::CursorMove(fopAc_ac_c*, u32) { /* Nonmatching */ } @@ -183,146 +896,299 @@ void daAgb_c::modeMove() { /* 800D303C-800D30D4 .text modeDelete__7daAgb_cFv */ void daAgb_c::modeDelete() { - /* Nonmatching */ + if (field_0x664 == 0 && g_mDoGaC_gbaCom.mDoGaC_GbaLink() && + g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(1)) + { + mPlayerName = 0x1000000; + g_mDoGaC_gbaCom.mDoGaC_SendDataSet((u32*)&mPlayerName, 4, 1, 0); + field_0x664++; + } +} + +void daAgb_c::modeProcCall() { + typedef void (daAgb_c::*modeProc)(); + static modeProc mode_proc[] = { + &daAgb_c::modeMove, + &daAgb_c::modeLookAttention, + &daAgb_c::modeLoad, + &daAgb_c::modeDelete, + }; + + (this->*mode_proc[mMode])(); } /* 800D30D4-800D36F4 .text daAgb_Execute__FP7daAgb_c */ -void daAgb_Execute(daAgb_c*) { - /* Nonmatching */ +// NONMATCHING - regswap +int daAgb_Execute(daAgb_c* i_this) { + daPy_lk_c* temp_r29 = (daPy_lk_c*)dComIfGp_getPlayer(0); + i_this->field_0x679 = 0; + + if (g_mDoGaC_gbaCom.mDoGaC_GbaLink() && g_mDoGaC_gbaCom.mDoGaC_RecvStatusCheck(4)) { + i_this->FlagsRecv(); + g_mDoGaC_gbaCom.mDoGaC_DataStatusReset(4); + } else { + g_mDoCPd_cpadInfo[mDoGaC_getPortNo()].mGamepadErrorFlags = 1; + } + + BOOL var_r27 = dComIfGp_event_runCheck() != 0; + var_r27 |= dMenu_flag(); + + u32 st_type = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); + + if (g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { + if (g_mDoGaC_gbaCom.mDoGaC_RecvStatusCheck(8)) { + i_this->SwitchOn(); + } + + if (g_mDoGaC_gbaCom.mDoGaC_SendStatusCheck(9)) { + i_this->FlagsSend(st_type); + } + + i_this->field_0x680 = 1; + } else if (i_this->field_0x680) { + i_this->field_0x680 = 0; + i_this->resetCursor(true); + i_this->field_0x672 = 0; + + if (i_this->field_0x65c != 0) { + if (i_this->field_0x66b == 3 || i_this->field_0x66b == 12) { + daPy_lk_c* player_p = daPy_getPlayerLinkActorClass(); + player_p->field_0x29c |= 0x1000; + player_p->field_0x354c = 10; + } else if (i_this->field_0x66b == 4 || i_this->field_0x66b == 13 || + i_this->field_0x66b == 12) + { + daPy_lk_c* player_p = daPy_getPlayerLinkActorClass(); + player_p->field_0x354e = 10; + } + + i_this->field_0x65c = 0; + } + + i_this->field_0x66b = 0; + i_this->field_0x630 = 0; + i_this->field_0x632 = 0; + i_this->field_0x684.end(); + } + + i_this->modeProcCall(); + + if (g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { + if ((int)i_this->field_0x671 != 0) { + if (i_this->current.pos.x != i_this->next.pos.x || + i_this->current.pos.z != i_this->next.pos.z) + { + daAgb_c::mFlags.field_0x5_3 = 1; + } else { + daAgb_c::mFlags.field_0x5_3 = 0; + } + } else { + daPy_lk_c* player_p2 = daPy_getPlayerLinkActorClass(); + if ((dComIfGp_getPlayer(0) == player_p2 && !temp_r29->checkPlayerFly()) || + ((fopAcM_GetName(temp_r29) == PROC_NPC_MD && !daNpc_Md_c::m_flying) || + (fopAcM_GetName(temp_r29) == PROC_NPC_CB1 && !daNpc_Cb1_c::m_flying) || + fopAcM_GetName(temp_r29) == PROC_NPC_OS)) + { + f32 speedF = fabs(temp_r29->speedF); + + if (speedF <= 0.0f) { + daAgb_c::mFlags.field_0x5_3 = 0; + } else if (speedF < 5.0f) { + daAgb_c::mFlags.field_0x5_3 = 1; + } else if (speedF < 10.0f) { + daAgb_c::mFlags.field_0x5_3 = 2; + } else if (speedF < 15.0f) { + daAgb_c::mFlags.field_0x5_3 = 3; + } else { + daAgb_c::mFlags.field_0x5_3 = 4; + } + } else { + daAgb_c::mFlags.field_0x5_3 = 0; + } + } + + if ((int)i_this->field_0x674 != 0 && var_r27 == 0 && i_this->mMode != 1) { + if (i_this->field_0x675 != 0) { + if (i_this->field_0x676 != 0) { + i_this->shape_angle.z += 0x1000; + } else { + i_this->shape_angle.z = fopAcM_searchPlayerAngleY(i_this); + } + } else { + i_this->shape_angle.z += 0x200; + } + } + + mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y + i_this->field_0x628, + i_this->current.pos.z); + mDoMtx_stack_c::YrotM(i_this->shape_angle.y); + mDoMtx_stack_c::XrotM(i_this->shape_angle.x); + mDoMtx_stack_c::ZrotM(i_this->shape_angle.z); + i_this->mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + if (i_this->mMode == 1) { + i_this->mBrk.setFrame(15.0f); + } else if (i_this->field_0x65c != 0 && + (i_this->field_0x66b == 4 || i_this->field_0x66b == 13 || + i_this->field_0x66b == 12 || i_this->field_0x66b == 3)) + { + if (i_this->field_0x65c > 60) { + i_this->mBrk.setFrame(19.0f); + } else { + i_this->mBrk.play(); + } + } else if ((((int)i_this->field_0x672 != 0 || i_this->field_0x676 != 0) && + ((int)i_this->field_0x671 != 0 || (int)i_this->field_0x677 == 1)) || + (i_this->field_0x66b == 14 && i_this->field_0x65c > 120)) + { + i_this->mBrk.play(); + } else { + i_this->mBrk.setFrame(0.0f); + } + } + + return 1; } /* 800D36F4-800D38EC .text daAgb_Draw__FP7daAgb_c */ -void daAgb_Draw(daAgb_c*) { - /* Nonmatching */ +int daAgb_Draw(daAgb_c* i_this) { + u8 var_r6 = 1; + + if (g_mDoGaC_gbaCom.mDoGaC_GbaLink()) { + if (i_this->field_0x66f != 0 && !(daAgb_c::mFlags.field_0xa & 1) && + (!dComIfGp_event_runCheck() || + dComIfGp_getEventManager().startCheckOld("DEFAULT_AGB_LOOK_ATTENTION") || + i_this->mMode == 2) && + (i_this->field_0x65c == 0 || i_this->mMode == 1 || i_this->field_0x66b == 0x10 || + i_this->field_0x66b == 3 || i_this->field_0x66b == 12 || i_this->field_0x66b == 4 || + i_this->field_0x66b == 13 || (i_this->field_0x66b == 14 && i_this->field_0x65c > 120))) + { + i_this->mBrk.getBrkAnm()->setFrame(i_this->mBrk.getFrame()); + + J3DModelData* modelData = i_this->mpModel->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* mat_p = modelData->getMaterialNodePointer(i); + mat_p->setTevColor(1, &l_HIO.field_0x04[0]); + mat_p->setTevColor(2, &l_HIO.field_0x04[1]); + } + + mDoExt_modelUpdateDL(i_this->mpModel); + + if (i_this->field_0x679 != 0 && + i_this->current.pos.y - i_this->mCrrPos.field_0x05c > 2.5f) + { + dComIfGd_setSimpleShadow2(&i_this->current.pos, i_this->mCrrPos.field_0x05c, 50.0f, + i_this->mCrrPos.mGndChk, 0, 1.0f, &i_this->mTexObj); + } + + var_r6 = 0; + } + } + + dMap_c::drawPointSingle(3, i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z, + i_this->current.roomNo, -0x8000, var_r6, 0, 0); + return 1; } /* 800D38EC-800D38F0 .text setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10 */ -void J3DTevBlock::setTevColor(unsigned long, const J3DGXColorS10*) { +void J3DTevBlock::setTevColor(u32, const J3DGXColorS10*) { /* Nonmatching */ } /* 800D38F0-800D38F8 .text daAgb_IsDelete__FP7daAgb_c */ -void daAgb_IsDelete(daAgb_c*) { - /* Nonmatching */ +int daAgb_IsDelete(daAgb_c* i_this) { + return 1; } /* 800D38F8-800D394C .text daAgb_Delete__FP7daAgb_c */ -void daAgb_Delete(daAgb_c*) { - /* Nonmatching */ +int daAgb_Delete(daAgb_c* i_this) { + dComIfG_resDelete(&i_this->mPhase, "Agb"); + i_this->field_0x684.end(); + return 1; } /* 800D394C-800D396C .text createHeap_CB__FP10fopAc_ac_c */ -void createHeap_CB(fopAc_ac_c*) { - /* Nonmatching */ +int createHeap_CB(fopAc_ac_c* i_this) { + return static_cast(i_this)->createHeap(); } /* 800D396C-800D3B58 .text createHeap__7daAgb_cFv */ -void daAgb_c::createHeap() { - /* Nonmatching */ +int daAgb_c::createHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Agb", 4); + JUT_ASSERT(3277, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002); + if (mpModel == NULL) { + return 0; + } + + J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Agb", 7); + if (!mBrk.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 1)) { + return 0; + } + + ResTIMG* img_p = modelData->getTexture()->getResTIMG(1); + GXInitTexObj(&mTexObj, (u8*)img_p + img_p->imageOffset, img_p->width, img_p->height, + (GXTexFmt)img_p->format, (GXTexWrapMode)img_p->wrapS, (GXTexWrapMode)img_p->wrapT, + (GXBool)(img_p->mipmapCount > 1)); + GXInitTexObjLOD(&mTexObj, (GXTexFilter)img_p->minFilter, (GXTexFilter)img_p->magFilter, + img_p->minLOD * 0.125f, img_p->maxLOD * 0.125f, img_p->LODBias * 0.01f, + img_p->biasClamp, img_p->doEdgeLOD, (GXAnisotropy)img_p->maxAnisotropy); + + return 1; } /* 800D3B58-800D3D2C .text daAgb_Create__FP10fopAc_ac_c */ -void daAgb_Create(fopAc_ac_c*) { - /* Nonmatching */ +// NONMATCHING - dBgS_CrrPos::Set needs works +int daAgb_Create(fopAc_ac_c* i_this) { + fopAcM_SetupActor(i_this, daAgb_c); + daAgb_c* a_this = (daAgb_c*)i_this; + + int phase = dComIfG_resLoad(&a_this->mPhase, "Agb"); + if (phase == cPhs_COMPLEATE_e) { + dComIfGp_setAgb(a_this); + if (!fopAcM_entrySolidHeap(a_this, createHeap_CB, 0x500)) { + return cPhs_ERROR_e; + } + + // a_this->mCrrPos.Set(&a_this->current.pos, &a_this->next.pos, NULL, ); + a_this->mCrrPos.mpLine0 = &a_this->current.pos; + a_this->mCrrPos.pm_pos = &a_this->next.pos; + a_this->mCrrPos.field_0x058 = NULL; + a_this->mCrrPos.SetActorPid(-1); + a_this->mCrrPos.field_0x3c = 171.0f; + a_this->mCrrPos.field_0x40 = 50.0f; + + a_this->mCrrPos.SetGndUpY(170.0f); + a_this->mCrrPos.ClrNoRoof(); + a_this->mAcch.Set(&a_this->current.pos, &a_this->next.pos, a_this, 1, &a_this->mAcchCir, + NULL, NULL, NULL); + a_this->mAcch.OnLineCheck(); + a_this->mAcch.SetGrndNone(); + a_this->mAcchCir.SetWall(171.01f, 40.0f); + + TestDataManager[4].field_0x0 = (u32)&daAgb_c::mGbaFlg; + TestDataManager[8].field_0x0 = (u32)&daAgb_c::mSwitch; + TestDataManager[6].field_0x0 = (u32)&daAgb_c::mItem; + TestDataManager[12].field_0x0 = (u32)&daAgb_c::mShop; + + a_this->field_0x670 = 0; + a_this->field_0x65c = 0; + a_this->field_0x66b = 0; + a_this->field_0x66f = g_mDoGaC_gbaCom.field_0x0; + a_this->field_0x678 = g_mDoGaC_gbaCom.field_0x0 > 0; + a_this->field_0x654 = 0; + a_this->field_0x650 = -1; + a_this->field_0x677 = 0; + a_this->field_0x67b = 0; + a_this->field_0x680 = 1; + + fopAcM_setStageLayer(a_this); + a_this->mEvtInfo.setEventName("DEFAULT_AGB_USE"); + } + + return phase; } /* 800D3D2C-800D3DDC .text __ct__7daAgb_cFv */ -daAgb_c::daAgb_c() { - /* Nonmatching */ -} - -/* 800D3DDC-800D3E4C .text __dt__13dBgS_LinkAcchFv */ -dBgS_LinkAcch::~dBgS_LinkAcch() { - /* Nonmatching */ -} - -/* 800D3E4C-800D3EC4 .text __dt__15dBgS_LinkCrrPosFv */ -dBgS_LinkCrrPos::~dBgS_LinkCrrPos() { - /* Nonmatching */ -} - -/* 800D3EC4-800D4088 .text __dt__11dBgS_CrrPosFv */ -dBgS_CrrPos::~dBgS_CrrPos() { - /* Nonmatching */ -} - -/* 800D4088-800D40E4 .text __ct__15dBgS_LinkCrrPosFv */ -dBgS_LinkCrrPos::dBgS_LinkCrrPos() { - /* Nonmatching */ -} - -/* 800D40E4-800D42D8 .text __ct__11dBgS_CrrPosFv */ -dBgS_CrrPos::dBgS_CrrPos() { - /* Nonmatching */ -} - -/* 800D42D8-800D4334 .text __dt__11daAgb_HIO_cFv */ -daAgb_HIO_c::~daAgb_HIO_c() { - /* Nonmatching */ -} - -/* 800D44C0-800D44FC .text __dt__10dMsgCtrl_cFv */ -dMsgCtrl_c::~dMsgCtrl_c() { - /* Nonmatching */ -} - -/* 800D44FC-800D4504 .text @20@__dt__15dBgS_LinkLinChkFv */ -void @20@__dt__15dBgS_LinkLinChkFv { - /* Nonmatching */ -} - -/* 800D4504-800D450C .text @100@__dt__15dBgS_LinkLinChkFv */ -void @100@__dt__15dBgS_LinkLinChkFv { - /* Nonmatching */ -} - -/* 800D450C-800D4514 .text @88@__dt__15dBgS_LinkLinChkFv */ -void @88@__dt__15dBgS_LinkLinChkFv { - /* Nonmatching */ -} - -/* 800D4514-800D451C .text @32@__dt__13dBgS_LinkAcchFv */ -void @32@__dt__13dBgS_LinkAcchFv { - /* Nonmatching */ -} - -/* 800D451C-800D4524 .text @20@__dt__13dBgS_LinkAcchFv */ -void @20@__dt__13dBgS_LinkAcchFv { - /* Nonmatching */ -} - -/* 800D4524-800D452C .text @28@__dt__15dBgS_LinkCrrPosFv */ -void @28@__dt__15dBgS_LinkCrrPosFv { - /* Nonmatching */ -} - -/* 800D452C-800D4534 .text @16@__dt__15dBgS_LinkCrrPosFv */ -void @16@__dt__15dBgS_LinkCrrPosFv { - /* Nonmatching */ -} - -/* 800D4534-800D453C .text @36@__dt__15dBgS_LinkCrrPosFv */ -void @36@__dt__15dBgS_LinkCrrPosFv { - /* Nonmatching */ -} - -/* 800D453C-800D4544 .text @28@__dt__11dBgS_CrrPosFv */ -void @28@__dt__11dBgS_CrrPosFv { - /* Nonmatching */ -} - -/* 800D4544-800D454C .text @16@__dt__11dBgS_CrrPosFv */ -void @16@__dt__11dBgS_CrrPosFv { - /* Nonmatching */ -} - -/* 800D454C-800D4554 .text @36@__dt__11dBgS_CrrPosFv */ -void @36@__dt__11dBgS_CrrPosFv { - /* Nonmatching */ -} - -/* 800D4554-800D455C .text checkPlayerFly__9daPy_py_cCFv */ -void daPy_py_c::checkPlayerFly() const { - /* Nonmatching */ -} - +daAgb_c::daAgb_c() : field_0x684(0, 0) {} diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index 102c3b01d..ab5386f9d 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -7,7 +7,9 @@ #include "d/d_bg_s_gnd_chk.h" #include "d/d_com_inf_game.h" #include "d/d_kankyo.h" +#include "d/d_kankyo_wether.h" #include "f_op/f_op_camera_mng.h" +#include "m_Do/m_Do_lib.h" /* 8008AA30-8008AB3C .text vectle_calc__FP10DOUBLE_POSP4cXyz */ void vectle_calc(DOUBLE_POS* i_pos, cXyz* o_out) { @@ -93,7 +95,15 @@ void dKyr_kamome_move() { /* 8008B44C-8008B504 .text dKyr_wind_init__Fv */ void dKyr_wind_init() { - /* Nonmatching */ + g_env_light.mpWind->mbHasCustomWindPower = false; + g_env_light.mpWind->field_0x759 = 0; + + for (int i = 0; i < 2; i++) { + g_env_light.mpWind->mKamomeEff[i].field_0x1e = 0; + g_env_light.mpWind->mKamomeEff[i].field_0x18 = 0.0f; + g_env_light.mpWind->mKamomeEff[i].field_0x1c = cM_rndF(1800.0f); + g_env_light.mpWind->mKamomeEff[i].mpBaseEmitter = NULL; + } } /* 8008B504-8008C4BC .text dKyr_wind_move__Fv */ @@ -102,8 +112,49 @@ void dKyr_wind_move() { } /* 8008C624-8008C888 .text dKyr_lenzflare_move__Fv */ +// NONMATCHING void dKyr_lenzflare_move() { - /* Nonmatching */ + dKankyo_sun_Packet* sun_p = g_env_light.mpSunPacket; + dKankyo_sunlenz_Packet* lenz_p = g_env_light.mpSunlenzPacket; + camera_class* camera_p = dComIfGp_getCamera(0); + + if (!(g_env_light.mpSunPacket->mVisibility < 0.0001f)) { + cXyz eyeVect; + dKy_set_eyevect_calc(dComIfGp_getCamera(0), &eyeVect, 7200.0005f, 7200.0005f); + + cXyz sunDirSmth; + dKyr_get_vectle_calc(&eyeVect, sun_p->mPos, &sunDirSmth); + lenz_p->mPositions[0] = sun_p->mPos[0]; + lenz_p->mPositions[1] = sun_p->mPos[0]; + + cXyz projected; + mDoLib_project(lenz_p->mPositions, &projected); + + cXyz center; + center.x = 320.0f; + center.y = 240.0f; + center.z = 0.0f; + + cXyz vectle; + dKyr_get_vectle_calc(¢er, &projected, &vectle); + s16 angle = cM_atan2s(vectle.x, vectle.y); + + lenz_p->mAngleDeg = angle; + lenz_p->mAngleDeg *= 0.005493164f; + lenz_p->mAngleDeg += 180.0f; + + cXyz camFwd; + dKyr_get_vectle_calc(&camera_p->mLookat.mEye, &camera_p->mLookat.mCenter, &camFwd); + + f32 var_f4 = sunDirSmth.abs(camFwd); + var_f4 = (var_f4 * 350.0f) + 250.0f; + + for (int i = 2; i < 8; i++) { + lenz_p->mPositions[i].x = sun_p->mPos[0].x - i * sunDirSmth.x * var_f4; + lenz_p->mPositions[i].y = sun_p->mPos[0].y - i * sunDirSmth.y * var_f4; + lenz_p->mPositions[i].z = sun_p->mPos[0].z - i * sunDirSmth.z * var_f4; + } + } } /* 8008C888-8008C8B8 .text dKyr_moon_arrival_check__Fv */ diff --git a/src/m_Do/m_Do_gba_com.cpp b/src/m_Do/m_Do_gba_com.cpp index e2cc16248..9cd46f88a 100644 --- a/src/m_Do/m_Do_gba_com.cpp +++ b/src/m_Do/m_Do_gba_com.cpp @@ -11,8 +11,6 @@ mDoGaC_agbCom_c g_mDoGaC_gbaCom; mDoGaC_DataManag_c TestDataManager[16]; -static u32 BigLittleChange(u32); - /* 8001A498-8001A4C0 .text ProbeCheck_0__FP11JUTGbaParamPv */ void ProbeCheck_0(JUTGbaParam*, void*) { g_mDoGaC_gbaCom.mDoGaC_ProbeCheck0(); @@ -358,8 +356,8 @@ int mDoGaC_agbCom_c::mDoGaC_SendEndCheck(u8 param_0) { } /* 8001ADE4-8001AE04 .text mDoGaC_RecvStatusCheck__15mDoGaC_agbCom_cFUc */ -bool mDoGaC_agbCom_c::mDoGaC_RecvStatusCheck(u8 param_0) { - return field_0x110[param_0].field_0x4 == 8; +BOOL mDoGaC_agbCom_c::mDoGaC_RecvStatusCheck(u8 param_0) { + return field_0x110[param_0].field_0x4 == 8 ? TRUE : FALSE; } /* 8001AE04-8001AE44 .text mDoGaC_DataStatusReset__15mDoGaC_agbCom_cFUc */ From f962a7c884ccd97288c745dd7490518e985b2adc Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 00:52:44 -0700 Subject: [PATCH 49/89] f_op_actor_mng event work --- include/d/d_com_inf_game.h | 34 ++++++++++- include/d/d_event.h | 22 +++++++- include/d/d_event_manager.h | 2 +- include/f_op/f_op_actor.h | 2 + include/f_op/f_op_actor_mng.h | 3 +- src/f_op/f_op_actor_mng.cpp | 103 +++++++++++++++++++++------------- 6 files changed, 122 insertions(+), 44 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 96c0ced72..b274b1bc6 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1123,11 +1123,43 @@ inline s32 dComIfGp_event_moveApproval(void* actor) { return g_dComIfG_gameInfo.play.getEvent().moveApproval(actor); } +inline s32 dComIfGp_event_order(u16 eventType, u16 priority, u16 flag, u16 hind, void* pActor1, void* pActor2, s16 eventID, u8 infoIdx) { + return g_dComIfG_gameInfo.play.getEvent().order(eventType, priority, flag, hind, pActor1, pActor2, eventID, infoIdx); +} + +inline s32 dComIfGp_event_orderOld(u16 eventType, u16 priority, u16 flag, u16 hind, void* pActor1, void* pActor2, const char *pEventName) { + return g_dComIfG_gameInfo.play.getEvent().orderOld(eventType, priority, flag, hind, pActor1, pActor2, pEventName); +} + +inline fopAc_ac_c* dComIfGp_event_getTalkPartner() { + u32 t = g_dComIfG_gameInfo.play.getEvent().mPtTalk; + return g_dComIfG_gameInfo.play.getEvent().convPId(t); +} + +inline fopAc_ac_c* dComIfGp_event_getItemPartner() { + u32 i = g_dComIfG_gameInfo.play.getEvent().mPtItem; + return g_dComIfG_gameInfo.play.getEvent().convPId(i); +} + +inline fopAc_ac_c* dComIfGp_event_getPt1() { + u32 pt1 = g_dComIfG_gameInfo.play.getEvent().mPt1; + return g_dComIfG_gameInfo.play.getEvent().convPId(pt1); +} + +inline fopAc_ac_c* dComIfGp_event_getPt2() { + u32 pt2 = g_dComIfG_gameInfo.play.getEvent().mPt2; + return g_dComIfG_gameInfo.play.getEvent().convPId(pt2); +} + inline dEvent_manager_c& dComIfGp_getEventManager() { return g_dComIfG_gameInfo.play.getEvtManager(); } -inline u32 dComIfGp_evmng_getEventIdx(char* pName, u8 evNo) { +inline s32 dComIfGp_evmng_getEventPrio(s16 eventIdx) { + return dComIfGp_getEventManager().getEventPrio(eventIdx); +} + +inline s16 dComIfGp_evmng_getEventIdx(char* pName, u8 evNo) { return dComIfGp_getEventManager().getEventIdx(pName, evNo); } diff --git a/include/d/d_event.h b/include/d/d_event.h index c1dd57301..464231fc4 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -5,6 +5,22 @@ class fopAc_ac_c; +enum dEvtType_e { + /* 0x00 */ dEvtType_TALK_e, + /* 0x01 */ dEvtType_DOOR_e, + /* 0x02 */ dEvtType_OTHER_e, + /* 0x03 */ dEvtType_COMPULSORY_e, + /* 0x04 */ dEvtType_POTENTIAL_e, + /* 0x05 */ dEvtType_ITEM_e, + /* 0x06 */ dEvtType_SHOWITEM_X_e, + /* 0x07 */ dEvtType_SHOWITEM_Y_e, + /* 0x08 */ dEvtType_SHOWITEM_Z_e, + /* 0x09 */ dEvtType_CATCH_e, + /* 0x0A */ dEvtType_TREASURE_e, + /* 0x0B */ dEvtType_PHOTO_e, + /* 0x0A */ dEvtType_CHANGE_e, +}; + class dEvt_order_c { public: ~dEvt_order_c() {} @@ -25,8 +41,8 @@ class dEvt_control_c { public: dEvt_control_c(); - void orderOld(u16, u16, u16, u16, void*, void*, const void*); - void order(u16, u16, u16, u16, void*, void*, s16, u8); + s32 orderOld(u16, u16, u16, u16, void*, void*, const void*); + s32 order(u16, u16, u16, u16, void*, void*, s16, u8); void setParam(dEvt_order_c*); void beforeFlagProc(dEvt_order_c*); void afterFlagProc(dEvt_order_c*); @@ -54,7 +70,7 @@ public: void getStageEventDt(); void nextStageEventDt(void*); void getPId(void*); - void convPId(unsigned int); + fopAc_ac_c * convPId(unsigned int); void getTactFreeMStick(int); void getTactFreeCStick(int); void giveItemCut(u8); diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index e3044c15d..4be016f03 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -50,7 +50,7 @@ public: void* getMySubstanceP(int, const char*, int); void getMySubstanceNum(int, const char*); void cutEnd(int); - void getEventPrio(s16); + u16 getEventPrio(s16); void getEventEndSound(s16); void exceptionProc(); void issueStaff(const char*); diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index ef0c908c3..c1b79af2d 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -172,6 +172,7 @@ class JntHit_c; struct fopAc_cullSizeSphere { public: + fopAc_cullSizeSphere() {} fopAc_cullSizeSphere(cXyz, float); /* 0x0 */ Vec mCenter; @@ -180,6 +181,7 @@ public: struct fopAc_cullSizeBox { public: + fopAc_cullSizeBox() {} fopAc_cullSizeBox(const fopAc_cullSizeBox&); fopAc_cullSizeBox(cXyz, cXyz); diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index c315656d3..45e75568e 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -416,7 +416,8 @@ s32 fopAcM_orderCatchEvent(fopAc_ac_c*, fopAc_ac_c*, u16, u16); s32 fopAcM_orderOtherEvent(fopAc_ac_c*, char*, u16, u16, u16); s32 fopAcM_orderOtherEvent(fopAc_ac_c*, fopAc_ac_c*, char*, u16, u16, u16); s32 fopAcM_orderOtherEvent2(fopAc_ac_c*, char*, u16, u16); -s32 fopAcM_orderChangeEventId(fopAc_ac_c*, s16, u16, u16); +s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_this, s16 eventIdx, u16 flag, u16 hind); +s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_this, fopAc_ac_c* i_partner, s16 eventIdx, u16 flag, u16 hind); s32 fopAcM_orderOtherEventId(fopAc_ac_c* actor, s16 eventID, u8 mapToolID, u16 param_3, u16 priority, u16 flag); s32 fopAcM_orderMapToolEvent(fopAc_ac_c*, u8, s16, u16, u16, u16); diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index aeea87fe0..c50a7004e 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -508,103 +508,130 @@ s32 fopAcM_cullingCheck(fopAc_ac_c*) { } /* 800259A8-800259F8 .text fopAcM_orderTalkEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderTalkEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderTalkEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_TALK_e, 0x1FF, 0, 0x14F, i_this, i_partner, -1, 0xFF); } /* 800259F8-80025A48 .text fopAcM_orderTalkXBtnEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderTalkXBtnEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderTalkXBtnEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_SHOWITEM_X_e, 0x1F4, 0, 0x14F, i_this, i_partner, -1, 0xFF); } /* 80025A48-80025A98 .text fopAcM_orderTalkYBtnEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderTalkYBtnEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderTalkYBtnEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_SHOWITEM_Y_e, 0x1F4, 0, 0x14F, i_this, i_partner, -1, 0xFF); } /* 80025A98-80025AE8 .text fopAcM_orderTalkZBtnEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderTalkZBtnEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderTalkZBtnEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_SHOWITEM_Z_e, 0x1F4, 0, 0x14F, i_this, i_partner, -1, 0xFF); } /* 80025AE8-80025B3C .text fopAcM_orderZHintEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderZHintEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderZHintEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_TALK_e, 0x1FF, 0, 0xFFFF, i_this, i_partner, -1, 0xFF); } /* 80025B3C-80025B8C .text fopAcM_orderSpeakEvent__FP10fopAc_ac_c */ -s32 fopAcM_orderSpeakEvent(fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_this) { + return dComIfGp_event_order(dEvtType_TALK_e, 0x1EA, 0, 0x14F, dComIfGp_getPlayer(0), i_this, -1, 0xFF); } /* 80025B8C-80025BE0 .text fopAcM_orderDoorEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderDoorEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderDoorEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_DOOR_e, 0xFF, 0, 0xFFFF, i_this, i_partner, -1, 0xFF); } /* 80025BE0-80025C34 .text fopAcM_orderCatchEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderCatchEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderCatchEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_CATCH_e, 1, 0, 0xFFFF, i_this, i_partner, -1, 0xFF); } /* 80025C34-80025CC8 .text fopAcM_orderOtherEvent2__FP10fopAc_ac_cPcUsUs */ -s32 fopAcM_orderOtherEvent2(fopAc_ac_c*, char*, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderOtherEvent2(fopAc_ac_c* i_this, char* pEventName, u16 flag, u16 hind) { + u16 prio = dComIfGp_evmng_getEventPrio(dComIfGp_evmng_getEventIdx(pEventName, 0xFF)); + if (prio == 0) + prio = 0xFF; + + return dComIfGp_event_orderOld(dEvtType_OTHER_e, prio, flag, hind, i_this, dComIfGp_getPlayer(0), pEventName); } /* 80025CC8-80025D28 .text fopAcM_orderChangeEvent__FP10fopAc_ac_cPcUsUs */ -void fopAcM_orderChangeEvent(fopAc_ac_c*, char*, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderChangeEvent(fopAc_ac_c* i_this, char* pEventName, u16 flag, u16 hind) { + return fopAcM_orderChangeEventId(i_this, dComIfGp_evmng_getEventIdx(pEventName, 0xFF), flag, hind); } /* 80025D28-80025D94 .text fopAcM_orderChangeEvent__FP10fopAc_ac_cP10fopAc_ac_cPcUsUs */ -void fopAcM_orderChangeEvent(fopAc_ac_c*, fopAc_ac_c*, char*, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderChangeEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner, char* pEventName, u16 flag, u16 hind) { + return fopAcM_orderChangeEventId(i_this, i_partner, dComIfGp_evmng_getEventIdx(pEventName, 0xFF), flag, hind); } /* 80025D94-80025E1C .text fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs */ -s32 fopAcM_orderChangeEventId(fopAc_ac_c*, short, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_this, s16 eventIdx, u16 flag, u16 hind) { + u16 prio = dComIfGp_evmng_getEventPrio(eventIdx); + if (prio == 0) + prio = 0xFF; + + return dComIfGp_event_order(dEvtType_CHANGE_e, prio, flag, hind, i_this, dComIfGp_getPlayer(0), eventIdx, 0xFF); } /* 80025E1C-80025EA4 .text fopAcM_orderChangeEventId__FP10fopAc_ac_cP10fopAc_ac_csUsUs */ -void fopAcM_orderChangeEventId(fopAc_ac_c*, fopAc_ac_c*, short, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_this, fopAc_ac_c* i_partner, s16 eventIdx, u16 flag, u16 hind) { + u16 prio = dComIfGp_evmng_getEventPrio(eventIdx); + if (prio == 0) + prio = 0xFF; + + return dComIfGp_event_order(dEvtType_CHANGE_e, prio, flag, hind, i_this, i_partner, eventIdx, 0xFF); } /* 80025EA4-80025F3C .text fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs */ -s32 fopAcM_orderOtherEventId(fopAc_ac_c*, short, unsigned char, u16, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderOtherEventId(fopAc_ac_c* i_this, s16 eventIdx, u8 infoIdx, u16 hind, u16 priority, u16 flag) { + u16 prio; + if (priority != 0) { + prio = priority; + } else { + prio = dComIfGp_evmng_getEventPrio(eventIdx); + if (prio == 0) + prio = 0xFF; + } + + return dComIfGp_event_order(dEvtType_OTHER_e, prio, flag, hind, i_this, dComIfGp_getPlayer(0), eventIdx, infoIdx); } /* 80025F3C-80025F9C .text fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs */ -s32 fopAcM_orderPotentialEvent(fopAc_ac_c*, u16, u16, u16) { - /* Nonmatching */ +s32 fopAcM_orderPotentialEvent(fopAc_ac_c* i_this, u16 flag, u16 hind, u16 priority) { + if (priority == 0) + priority = 0xFF; + + return dComIfGp_event_order(dEvtType_POTENTIAL_e, priority, flag, hind, i_this, dComIfGp_getPlayer(0), -1, 0xFF); } /* 80025F9C-80025FF0 .text fopAcM_orderItemEvent__FP10fopAc_ac_c */ -void fopAcM_orderItemEvent(fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderItemEvent(fopAc_ac_c* i_this) { + return dComIfGp_event_order(dEvtType_ITEM_e, 0xFF, 0, 0xFFFF, dComIfGp_getPlayer(0), i_this, -1, 0xFF); } /* 80025FF0-80026044 .text fopAcM_orderTreasureEvent__FP10fopAc_ac_cP10fopAc_ac_c */ -void fopAcM_orderTreasureEvent(fopAc_ac_c*, fopAc_ac_c*) { - /* Nonmatching */ +s32 fopAcM_orderTreasureEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner) { + return dComIfGp_event_order(dEvtType_TREASURE_e, 0xFF, 0, 0xFFFF, i_this, i_partner, -1, 0xFF); } /* 80026044-80026074 .text fopAcM_getTalkEventPartner__FP10fopAc_ac_c */ fopAc_ac_c* fopAcM_getTalkEventPartner(fopAc_ac_c*) { - /* Nonmatching */ + return dComIfGp_event_getTalkPartner(); } /* 80026074-800260A4 .text fopAcM_getItemEventPartner__FP10fopAc_ac_c */ fopAc_ac_c* fopAcM_getItemEventPartner(fopAc_ac_c*) { - /* Nonmatching */ + return dComIfGp_event_getItemPartner(); } /* 800260A4-80026118 .text fopAcM_getEventPartner__FP10fopAc_ac_c */ -fopAc_ac_c* fopAcM_getEventPartner(fopAc_ac_c*) { - /* Nonmatching */ +fopAc_ac_c* fopAcM_getEventPartner(fopAc_ac_c* i_this) { + if (dComIfGp_event_getPt1() != i_this) + return dComIfGp_event_getPt1(); + + return dComIfGp_event_getPt2(); } /* 80026118-800261E8 .text fopAcM_createItemForPresentDemo__FP4cXyziUciiP5csXyzP4cXyz */ From 96b3728ba582a6f6347125494479ce6f9e22c038 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 01:54:44 -0700 Subject: [PATCH 50/89] c_dylink 99% rodata mismatch --- include/c/c_dylink.h | 11 +- include/d/d_procname.h | 1 + src/c/c_dylink.cpp | 615 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 589 insertions(+), 38 deletions(-) diff --git a/include/c/c_dylink.h b/include/c/c_dylink.h index 27cb75e3c..6b8d68cff 100644 --- a/include/c/c_dylink.h +++ b/include/c/c_dylink.h @@ -4,11 +4,12 @@ #include "f_op/f_op_scene_mng.h" struct cDylPhs { - /* 80018804 */ static int phase_01(void*); - /* 8001880C */ static int phase_02(s16*); - /* 80018844 */ static int phase_03(void*); - /* 8001884C */ static int Link(request_of_phase_process_class*, s16); - /* 80018890 */ static int Unlink(request_of_phase_process_class*, s16); + static int phase_01(void*); + static int phase_02(s16*); + static int phase_03(void*); + static int Link(request_of_phase_process_class*, s16); + static int Unlink(request_of_phase_process_class*, s16); + }; struct DynamicNameTableEntry { diff --git a/include/d/d_procname.h b/include/d/d_procname.h index a6bb37d75..aebd97c70 100644 --- a/include/d/d_procname.h +++ b/include/d/d_procname.h @@ -504,6 +504,7 @@ enum { PROC_SCP = 0x01F3, PROC_PB = 0x01F4, PROC_GAMEOVER = 0x01F5, + PROC_COUNT_e, }; #endif /* D_PROCNAME_H */ diff --git a/src/c/c_dylink.cpp b/src/c/c_dylink.cpp index 618e37ce0..8e31a1451 100644 --- a/src/c/c_dylink.cpp +++ b/src/c/c_dylink.cpp @@ -4,74 +4,623 @@ // #include "c/c_dylink.h" -#include "dolphin/types.h" +#include "d/d_com_lib_game.h" +#include "d/d_procname.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_printf.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JKernel/JKRFileCache.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "DynamicLink.h" +#include "dolphin/OS/OS.h" +#include "MSL_C/string.h" + +DynamicModuleControl * DMC[PROC_COUNT_e]; +bool DMC_initialized = false; +BOOL cDyl_Initialized = false; +mDoDvdThd_callback_c * cDyl_DVD = NULL; + +const DynamicNameTableEntry DynamicNameTable[] = { + {PROC_ALLDIE, "d_a_alldie"}, + {PROC_TAG_EVSW, "d_a_tag_evsw"}, + {PROC_Obj_Swpush, "d_a_obj_swpush"}, + {PROC_Obj_Swheavy, "d_a_obj_swheavy"}, + {PROC_Obj_Swflat, "d_a_obj_swflat"}, + {PROC_Obj_Swlight, "d_a_obj_swlight"}, + {PROC_Obj_Swhammer, "d_a_obj_swhammer"}, + {PROC_Obj_Quake, "d_a_obj_quake"}, + {PROC_Obj_Drift, "d_a_obj_drift"}, + {PROC_Tag_Volcano, "d_a_tag_volcano"}, + {PROC_TAG_SO, "d_a_tag_so"}, + {PROC_Obj_Pbco, "d_a_obj_pbco"}, + {PROC_SEATAG, "d_a_seatag"}, + {PROC_Obj_Tide, "d_a_obj_tide"}, + {PROC_Hmlif, "d_a_hmlif"}, + {PROC_SCENECHG, "d_a_scene_change"}, + {PROC_Obj_Magmarock, "d_a_obj_magmarock"}, + {PROC_Obj_Movebox, "d_a_obj_movebox"}, + {PROC_Obj_Tribox, "d_a_obj_tribox"}, + {PROC_Obj_Shelf, "d_a_obj_shelf"}, + {PROC_Obj_Hlift, "d_a_obj_hlift"}, + {PROC_Obj_Hami2, "d_a_obj_hami2"}, + {PROC_Obj_Hami3, "d_a_obj_hami3"}, + {PROC_Obj_Hami4, "d_a_obj_hami4"}, + {PROC_Obj_Hbrf1, "d_a_obj_hbrf1"}, + {PROC_Obj_Volcano, "d_a_obj_volcano"}, + {PROC_Obj_Vmc, "d_a_obj_vmc"}, + {PROC_Obj_Usovmc, "d_a_obj_usovmc"}, + {PROC_Obj_Vfan, "d_a_obj_vfan"}, + {PROC_Obj_Iceisland, "d_a_obj_iceisland"}, + {PROC_Obj_Dragonhead, "d_a_obj_dragonhead"}, + {PROC_Obj_Pirateship, "d_a_obj_pirateship"}, + {PROC_Obj_Tousekiki, "d_a_obj_tousekiki"}, + {PROC_Tag_Ret, "d_a_tag_ret"}, + {PROC_Kaji, "d_a_kaji"}, + {PROC_Canon, "d_a_canon"}, + {PROC_MGBOARD, "d_a_mgameboard"}, + {PROC_OBJ_CANON, "d_a_obj_canon"}, + {PROC_OBJ_OTBLE, "d_a_obj_otble"}, + {PROC_OBJ_WARPT, "d_a_obj_warpt"}, + {PROC_OBJ_TORIPOST, "d_a_obj_toripost"}, + {PROC_OBJ_IKADA, "d_a_obj_ikada"}, + {PROC_OBJ_MJDOOR, "d_a_obj_majyuu_door"}, + {PROC_OBJ_PFALL, "d_a_obj_pfall"}, + {PROC_OBJ_HOLE, "d_a_obj_hole"}, + {PROC_Obj_Stair, "d_a_obj_stair"}, + {PROC_Obj_Lpalm, "d_a_obj_lpalm"}, + {PROC_Obj_Mtest, "d_a_obj_mtest"}, + {PROC_Obj_Mkie, "d_a_obj_mkie"}, + {PROC_Obj_Mkie, "d_a_obj_mkiek"}, + {PROC_Obj_MknjD, "d_a_obj_mknjd"}, + {PROC_Obj_Msdan, "d_a_obj_msdan"}, + {PROC_Obj_Msdan, "d_a_obj_msdan_sub"}, + {PROC_Obj_Msdan, "d_a_obj_msdan2"}, + {PROC_Obj_MsdanSub2, "d_a_obj_msdan_sub2"}, + {PROC_Obj_Nest, "d_a_obj_nest"}, + {PROC_Obj_Ojtree, "d_a_obj_ojtree"}, + {PROC_Obj_Ospbox, "d_a_obj_ospbox"}, + {PROC_Obj_Ladder, "d_a_obj_ladder"}, + {PROC_Obj_Smplbg, "d_a_obj_smplbg"}, + {PROC_Obj_Akabe, "d_a_obj_akabe"}, + {PROC_Obj_Ashut, "d_a_obj_ashut"}, + {PROC_BRIDGE, "d_a_bridge"}, + {PROC_MSW, "d_a_msw"}, + {PROC_MFLFT, "d_a_mflft"}, + {PROC_KLFT, "d_a_klft"}, + {PROC_ICE_LIFT, "d_a_icelift"}, + {PROC_AMI_PROP, "d_a_amiprop"}, + {PROC_PEDESTAL, "d_a_pedestal"}, + {PROC_FLOOR, "d_a_floor"}, + {PROC_KITA, "d_a_kita"}, + {PROC_KOKIIE, "d_a_kokiie"}, + {PROC_SHAND, "d_a_shand"}, + {PROC_BITA, "d_a_bita"}, + {PROC_SK, "d_a_sk"}, + {PROC_SK2, "d_a_sk2"}, + {PROC_SSK, "d_a_ssk"}, + {PROC_WARPFLOWER, "d_a_warpf"}, + {PROC_WARPFOUT, "d_a_warpfout"}, + {PROC_WARPLIGHT, "d_a_warpls"}, + {PROC_WARPHYRULE, "d_a_warphr"}, + {PROC_WARPDEMO20, "d_a_warpdm20"}, + {PROC_WARPGANON, "d_a_warpgn"}, + {PROC_WARPMAJYUU, "d_a_warpmj"}, + {PROC_Balancelift, "d_a_obj_balancelift"}, + {PROC_SHUTTER, "d_a_shutter"}, + {PROC_SHUTTER2, "d_a_shutter2"}, + {PROC_WINDMILL, "d_a_windmill"}, + {PROC_MBDOOR, "d_a_mbdoor"}, + {PROC_NPC_DE1, "d_a_npc_de1"}, + {PROC_NPC_NZ, "d_a_npc_nz"}, + {PROC_NPC_SO, "d_a_npc_so"}, + {PROC_FM, "d_a_fm"}, + {PROC_LEAF_LIFT, "d_a_leaflift"}, + {PROC_Obj_Roten, "d_a_obj_roten"}, + {PROC_TOGE, "d_a_toge"}, + {PROC_Obj_Ferris, "d_a_obj_ferris"}, + {PROC_Obj_Xfuta, "d_a_obj_xfuta"}, + {PROC_Obj_Gaship, "d_a_obj_gaship"}, + {PROC_Obj_Rforce, "d_a_obj_rforce"}, + {PROC_Obj_Gaship2, "d_a_obj_gaship2"}, + {PROC_Obj_Light, "d_a_obj_light"}, + {PROC_Obj_Homen, "d_a_obj_homen"}, + {PROC_Obj_Homensmk, "d_a_obj_homensmoke"}, + {PROC_Obj_Ftree, "d_a_obj_ftree"}, + {PROC_Obj_Vds, "d_a_obj_Vds"}, + {PROC_Obj_Vyasi, "d_a_obj_vyasi"}, + {PROC_Obj_Ajav, "d_a_obj_ajav"}, + {PROC_Obj_Trap, "d_a_obj_trap"}, + {PROC_Obj_Hha, "d_a_obj_hha"}, + {PROC_Obj_Htetu1, "d_a_obj_htetu1"}, + {PROC_Obj_Gnntakis, "d_a_obj_gnndemotakis"}, + {PROC_Obj_Gnntakie, "d_a_obj_gnndemotakie"}, + {PROC_Obj_Gnnbtaki, "d_a_obj_gnnbtltaki"}, + {PROC_Obj_Rcloud, "d_a_obj_rcloud"}, + {PROC_Obj_Gryw00, "d_a_obj_gryw00"}, + {PROC_Obj_AjavW, "d_a_obj_AjavW"}, + {PROC_Obj_Leaves, "d_a_obj_leaves"}, + {PROC_Obj_YLzou, "d_a_obj_YLzou"}, + {PROC_Obj_Gbed, "d_a_obj_ganonbed"}, + {PROC_Obj_Vteng, "d_a_obj_Vteng"}, + {PROC_Obj_Hfuck1, "d_a_obj_hfuck1"}, + {PROC_Obj_Ohatch, "d_a_obj_ohatch"}, + {PROC_Obj_Hcbh, "d_a_obj_hcbh"}, + {PROC_Obj_Ygush00, "d_a_obj_Ygush00"}, + {PROC_Obj_Bscurtain, "d_a_obj_bscurtain"}, + {PROC_Obj_Shmrgrd, "d_a_obj_shmrgrd"}, + {PROC_Obj_Eayogn, "d_a_obj_eayogn"}, + {PROC_Obj_Vmsms, "d_a_obj_vmsms"}, + {PROC_Obj_Vmsdz, "d_a_obj_vmsdz"}, + {PROC_Ygcwp, "d_a_ygcwp"}, + {PROC_Obj_Vgnfd, "d_a_obj_vgnfd"}, + {PROC_Obj_Kanoke, "d_a_obj_kanoke"}, + {PROC_Obj_Eskban, "d_a_obj_eskban"}, + {PROC_Obj_Ekskz, "d_a_obj_ekskz"}, + {PROC_Obj_Ebomzo, "d_a_obj_ebomzo"}, + {PROC_Obj_Kanat, "d_a_obj_kanat"}, + {PROC_Obj_Aygr, "d_a_obj_aygr"}, + {PROC_SHIP, "d_a_ship"}, + {PROC_Obj_Jump, "d_a_obj_jump"}, + {PROC_NPC_MK, "d_a_npc_mk"}, + {PROC_SAIL, "d_a_sail"}, + {PROC_PIRATE_FLAG, "d_a_pirate_flag"}, + {PROC_MAJUU_FLAG, "d_a_majuu_flag"}, + {PROC_Tori_Flag, "d_a_tori_flag"}, + {PROC_Sie_Flag, "d_a_sie_flag"}, + {PROC_SYAN, "d_a_syan"}, + {PROC_AYUSH, "d_a_ghostship"}, + {PROC_OSHIP, "d_a_oship"}, + {PROC_RECTANGLE, "d_a_rectangle"}, + {PROC_BB, "d_a_bb"}, + {PROC_KANBAN, "d_a_kanban"}, + {PROC_HITOBJ, "d_a_hitobj"}, + {PROC_KT, "d_a_kt"}, + {PROC_EP, "d_a_ep"}, + {PROC_LAMP, "d_a_lamp"}, + {PROC_FF, "d_a_ff"}, + {PROC_MO2, "d_a_mo2"}, + {PROC_BK, "d_a_bk"}, + {PROC_ST, "d_a_st"}, + {PROC_TN, "d_a_tn"}, + {PROC_MANT, "d_a_mant"}, + {PROC_KANTERA, "d_a_kantera"}, + {PROC_KAMOME, "d_a_kamome"}, + {PROC_NPC_KAM, "d_a_npc_kamome"}, + {PROC_WBIRD, "d_a_wbird"}, + {PROC_DEMO_KMM, "d_a_demo_kmm"}, + {PROC_NZ, "d_a_nz"}, + {PROC_NZG, "d_a_nzg"}, + {PROC_KN, "d_a_kn"}, + {PROC_DEMO_DK, "d_a_demo_dk"}, + {PROC_AM, "d_a_am"}, + {PROC_AM2, "d_a_am2"}, + {PROC_GM, "d_a_gm"}, + {PROC_KS, "d_a_ks"}, + {PROC_CC, "d_a_cc"}, + {PROC_BL, "d_a_bl"}, + {PROC_WZ, "d_a_wz"}, + {PROC_PH, "d_a_ph"}, + {PROC_PZ, "d_a_pz"}, + {PROC_BPW, "d_a_bpw"}, + {PROC_PW, "d_a_pw"}, + {PROC_JBO, "d_a_jbo"}, + {PROC_BO, "d_a_bo"}, + {PROC_KI, "d_a_ki"}, + {PROC_MT, "d_a_mt"}, + {PROC_BWD, "d_a_bwd"}, + {PROC_BWDS, "d_a_bwds"}, + {PROC_BWDG, "d_a_bwdg"}, + {PROC_KB, "d_a_kb"}, + {PROC_DR, "d_a_dr"}, + {PROC_DR2, "d_a_dr2"}, + {PROC_RD, "d_a_rd"}, + {PROC_DAIOCTA, "d_a_daiocta"}, + {PROC_DAIOCTA_EYE, "d_a_daiocta_eye"}, + {PROC_OQ, "d_a_oq"}, + {PROC_GY, "d_a_gy"}, + {PROC_GY_CTRL, "d_a_gy_ctrl"}, + {PROC_GY_CTRLB, "d_a_gy_ctrl"}, + {PROC_Hot_Floor, "d_a_hot_floor"}, + {PROC_Beam, "d_a_beam"}, + {PROC_Bemos, "d_a_obj_bemos"}, + {PROC_BTD, "d_a_btd"}, + {PROC_BMD, "d_a_bmd"}, + {PROC_BMDHAND, "d_a_bmdhand"}, + {PROC_BMDFOOT, "d_a_bmdfoot"}, + {PROC_DK, "d_a_dk"}, + {PROC_BDK, "d_a_bdk"}, + {PROC_BDKOBJ, "d_a_bdkobj"}, + {PROC_BST, "d_a_bst"}, + {PROC_FGANON, "d_a_fganon"}, + {PROC_FGMAHOU, "d_a_fgmahou"}, + {PROC_BGN, "d_a_bgn"}, + {PROC_BGN2, "d_a_bgn2"}, + {PROC_BGN3, "d_a_bgn3"}, + {PROC_GND, "d_a_gnd"}, + {PROC_PT, "d_a_pt"}, + {PROC_SWTDOOR, "d_a_swtdoor"}, + {PROC_MOZO, "d_a_mozo"}, + {PROC_KUI, "d_a_kui"}, + {PROC_SS, "d_a_ss"}, + {PROC_SSS, "d_a_sss"}, + {PROC_SITEM, "d_a_sitem"}, + {PROC_MACHINE, "d_a_machine"}, + {PROC_BOSSITEM, "d_a_boss_item"}, + {PROC_Demo_Item, "d_a_demo_item"}, + {PROC_RACEITEM, "d_a_race_item"}, + {PROC_ShopItem, "d_a_shop_item"}, + {PROC_DEKU_ITEM, "d_a_deku_item"}, + {PROC_Obj_Paper, "d_a_obj_paper"}, + {PROC_Obj_Demo_Barrel,"d_a_obj_demo_barrel"}, + {PROC_Obj_Dmgroom, "d_a_obj_dmgroom"}, + {PROC_Obj_Doguu, "d_a_obj_doguu"}, + {PROC_Obj_Wood, "d_a_obj_wood"}, + {PROC_Obj_Flame, "d_a_obj_flame"}, + {PROC_Obj_Buoyrace, "d_a_obj_buoyrace"}, + {PROC_Obj_Coming, "d_a_obj_coming"}, + {PROC_Coming2, "d_a_coming2"}, + {PROC_Coming3, "d_a_coming3"}, + {PROC_Obj_Mmrr, "d_a_obj_mmrr"}, + {PROC_Obj_Pbka, "d_a_obj_pbka"}, + {PROC_Obj_Plant, "d_a_obj_plant"}, + {PROC_Obj_Gtaki, "d_a_obj_gtaki"}, + {PROC_Obj_Yboil, "d_a_obj_Yboil"}, + {PROC_Obj_Rflw, "d_a_obj_rflw"}, + {PROC_Obj_Table, "d_a_obj_table"}, + {PROC_Obj_Tenmado, "d_a_obj_tenmado"}, + {PROC_Obj_Cafelmp, "d_a_obj_cafelmp"}, + {PROC_Obj_Apzl, "d_a_obj_apzl"}, + {PROC_Obj_Adnno, "d_a_obj_adnno"}, + {PROC_Obj_Auzu, "d_a_obj_auzu"}, + {PROC_Obj_Gong, "d_a_obj_gong"}, + {PROC_Obj_Barrier, "d_a_obj_barrier"}, + {PROC_Obj_Firewall, "d_a_obj_firewall"}, + {PROC_Obj_TnTrap, "d_a_obj_tntrap"}, + {PROC_Obj_Monument, "d_a_obj_monument"}, + {PROC_Obj_Tapestry, "d_a_obj_tapestry"}, + {PROC_Obj_HSH, "d_a_obj_hsehi1"}, + {PROC_Goal_Flag, "d_a_goal_flag"}, + {PROC_TBOX, "d_a_tbox"}, + {PROC_SBOX, "d_a_sbox"}, + {PROC_BOMB_FLOWER, "d_a_bflower"}, + {PROC_ACORN_LEAF, "d_a_acorn_leaf"}, + {PROC_SWC00, "d_a_swc00"}, + {PROC_FAN, "d_a_fan"}, + {PROC_DOOR10, "d_a_door10"}, + {PROC_DOOR12, "d_a_door12"}, + {PROC_ATDOOR, "d_a_atdoor"}, + {PROC_MDOOR, "d_a_mdoor"}, + {PROC_KDDOOR, "d_a_kddoor"}, + {PROC_KNOB00, "d_a_knob00"}, + {PROC_MTOGE, "d_a_mtoge"}, + {PROC_ANDSW0, "d_a_andsw0"}, + {PROC_ANDSW2, "d_a_andsw2"}, + {PROC_DAI, "d_a_dai"}, + {PROC_SW_ATTACK, "d_a_swattack"}, + {PROC_SW_ITEM, "d_a_switem"}, + {PROC_SW_TACT, "d_a_swtact"}, + {PROC_NPC_OS, "d_a_npc_os"}, + {PROC_NPC_YM1, "d_a_npc_ym1"}, + {PROC_NPC_YM2, "d_a_npc_ym1"}, + {PROC_NPC_YW1, "d_a_npc_yw1"}, + {PROC_NPC_JI1, "d_a_npc_ji1"}, + {PROC_NPC_KO1, "d_a_npc_ko1"}, + {PROC_NPC_KO2, "d_a_npc_ko1"}, + {PROC_NPC_LS1, "d_a_npc_ls1"}, + {PROC_NPC_P1, "d_a_npc_p1"}, + {PROC_NPC_P2, "d_a_npc_p2"}, + {PROC_NPC_SARACE, "d_a_npc_sarace"}, + {PROC_NPC_TC, "d_a_npc_tc"}, + {PROC_NPC_BM1, "d_a_npc_bm1"}, + {PROC_NPC_BM2, "d_a_npc_bm1"}, + {PROC_NPC_BM3, "d_a_npc_bm1"}, + {PROC_NPC_BM4, "d_a_npc_bm1"}, + {PROC_NPC_BM5, "d_a_npc_bm1"}, + {PROC_NPC_OB1, "d_a_npc_ob1"}, + {PROC_NPC_AJ1, "d_a_npc_aj1"}, + {PROC_NPC_KM1, "d_a_npc_km1"}, + {PROC_NPC_CB1, "d_a_npc_cb1"}, + {PROC_NPC_BA1, "d_a_npc_ba1"}, + {PROC_NPC_BJ1, "d_a_npc_bj1"}, + {PROC_NPC_BJ2, "d_a_npc_bj1"}, + {PROC_NPC_BJ3, "d_a_npc_bj1"}, + {PROC_NPC_BJ4, "d_a_npc_bj1"}, + {PROC_NPC_BJ5, "d_a_npc_bj1"}, + {PROC_NPC_BJ6, "d_a_npc_bj1"}, + {PROC_NPC_BJ7, "d_a_npc_bj1"}, + {PROC_NPC_BJ8, "d_a_npc_bj1"}, + {PROC_NPC_BJ9, "d_a_npc_bj1"}, + {PROC_NPC_BS1, "d_a_npc_bs1"}, + {PROC_NPC_BMCON1, "d_a_npc_bmcon1"}, + {PROC_NPC_BMS1, "d_a_npc_bms1"}, + {PROC_NPC_BMSW, "d_a_npc_bmsw"}, + {PROC_NPC_BTSW, "d_a_npc_btsw"}, + {PROC_NPC_BTSW2, "d_a_npc_btsw2"}, + {PROC_NPC_DS1, "d_a_npc_ds1"}, + {PROC_NPC_RSH1, "d_a_npc_rsh1"}, + {PROC_NPC_KK1, "d_a_npc_kk1"}, + {PROC_NPC_PM1, "d_a_npc_pm1"}, + {PROC_NPC_KP1, "d_a_npc_kp1"}, + {PROC_NPC_PF1, "d_a_npc_pf1"}, + {PROC_NPC_GP1, "d_a_npc_gp1"}, + {PROC_NPC_JB1, "d_a_npc_jb1"}, + {PROC_NPC_KF1, "d_a_npc_kf1"}, + {PROC_NPC_AUCTION, "d_a_npc_auction"}, + {PROC_NPC_KG1, "d_a_npc_kg1"}, + {PROC_NPC_KG2, "d_a_npc_kg2"}, + {PROC_NPC_TT, "d_a_npc_tt"}, + {PROC_NPC_HR, "d_a_npc_hr"}, + {PROC_NPC_HO, "d_a_npc_ho"}, + {PROC_NPC_MD, "d_a_npc_md"}, + {PROC_NPC_UK, "d_a_npc_uk"}, + {PROC_BIGELF, "d_a_bigelf"}, + {PROC_NPC_CO1, "d_a_npc_co1"}, + {PROC_NPC_ZK1, "d_a_npc_zk1"}, + {PROC_NPC_ROTEN, "d_a_npc_roten"}, + {PROC_NPC_PEOPLE, "d_a_npc_people"}, + {PROC_NPC_GK1, "d_a_npc_gk1"}, + {PROC_NPC_PHOTO, "d_a_npc_photo"}, + {PROC_NPC_AC1, "d_a_npc_ac1"}, + {PROC_NPC_HI1, "d_a_npc_hi1"}, + {PROC_NPC_SV, "d_a_npc_sv"}, + {PROC_NPC_MT, "d_a_npc_mt"}, + {PROC_NPC_MN, "d_a_npc_mn"}, + {PROC_NPC_AH, "d_a_npc_ah"}, + {PROC_AUCTION, "d_a_auction"}, + {PROC_KYTAG00, "d_a_kytag00"}, + {PROC_KYTAG01, "d_a_kytag01"}, + {PROC_KYTAG02, "d_a_kytag02"}, + {PROC_KYTAG03, "d_a_kytag03"}, + {PROC_KYTAG04, "d_a_kytag04"}, + {PROC_KYTAG05, "d_a_kytag05"}, + {PROC_KYTAG06, "d_a_kytag06"}, + {PROC_KYTAG07, "d_a_kytag07"}, + {PROC_WindTag, "d_a_wind_tag"}, + {PROC_YOUGAN, "d_a_yougan"}, + {PROC_Mmusic, "d_a_mmusic"}, + {PROC_Komore, "d_a_komore"}, + {PROC_Tpota, "d_a_tpota"}, + {PROC_Obj_Itnak, "d_a_obj_Itnak"}, + {PROC_Obj_Zouk, "d_a_obj_zouK"}, + {PROC_Ykgr, "d_a_ykgr"}, + {PROC_SAKU, "d_a_saku"}, + {PROC_Salvage, "d_a_salvage"}, + {PROC_SALVAGE_TBOX, "d_a_salvage_tbox"}, + {PROC_Kmon, "d_a_kmon"}, + {PROC_OBJ_FIGURE, "d_a_obj_figure"}, + {PROC_OBJ_HAT, "d_a_obj_hat"}, + {PROC_Lwood, "d_a_lwood"}, + {PROC_Dummy, "d_a_dummy"}, + {PROC_TAG_EVENT, "d_a_tag_event"}, + {PROC_TAG_HINT, "d_a_tag_hint"}, + {PROC_TAG_MSG, "d_a_tag_msg"}, + {PROC_TAG_ETC, "d_a_tag_etc"}, + {PROC_TAG_ISLAND, "d_a_tag_island"}, + {PROC_TAG_KF1, "d_a_tag_kf1"}, + {PROC_TAG_KK1, "d_a_tag_kk1"}, + {PROC_TAG_PHOTO, "d_a_tag_photo"}, + {PROC_TAG_KB_ITEM, "d_a_tag_kb_item"}, + {PROC_TAG_MK, "d_a_tag_mk"}, + {PROC_TAG_MDCB, "d_a_tag_md_cb"}, + {PROC_TAG_BA1, "d_a_tag_ba1"}, + {PROC_TagRock, "d_a_fallrock_tag"}, + {PROC_FallRock, "d_a_fallrock"}, + {PROC_SteamTag, "d_a_steam_tag"}, + {PROC_Fire, "d_a_fire"}, + {PROC_BRANCH, "d_a_branch"}, + {PROC_NPC_ZL1, "d_a_npc_zl1"}, + {PROC_WATERFALL, "d_a_waterfall"}, + {PROC_LIGHTBRIDGE, "d_a_lbridge"}, + {PROC_LIGHTSTAIR, "d_a_lstair"}, + {PROC_WALL, "d_a_wall"}, + {PROC_SW_PROPELLER, "d_a_swpropeller"}, + {PROC_IKARI, "d_a_ikari"}, + {PROC_AGBSW0, "d_a_agbsw0"}, + {PROC_MAGMA, "d_a_magma"}, + {PROC_GRASS, "d_a_grass"}, + {PROC_Obj_Tower, "d_a_obj_tower"}, + {PROC_Obj_DoguuD, "d_a_obj_doguu_demo"}, + {PROC_SPOTBOX, "d_a_spotbox"}, + {PROC_TORNADO, "d_a_tornado"}, + {PROC_TITLE, "d_a_title"}, + {PROC_MP, "d_a_movie_player"}, + {PROC_LODBG, "d_a_lod_bg"}, + {PROC_HIMO3, "d_a_himo3"}, + {PROC_ATT, "d_a_att"}, + {PROC_Hys, "d_a_hys"}, + {PROC_SWHIT0, "d_a_swhit0"}, + {PROC_TAG_GSHIP, "d_a_tag_ghostship"}, + {PROC_TSUBO, "d_a_tsubo"}, + {PROC_STONE, "d_a_stone"}, + {PROC_Stone2, "d_a_stone2"}, + {PROC_Obj_Barrel, "d_a_obj_barrel"}, + {PROC_Obj_Barrel2, "d_a_obj_barrel2"}, + {PROC_Obj_Try, "d_a_obj_try"}, + {PROC_Obj_Vtil, "d_a_obj_vtil"}, + {PROC_Obj_Ice, "d_a_obj_ice"}, + {PROC_Obj_Mshokki, "d_a_obj_mshokki"}, + {PROC_BOKO, "d_a_boko"}, + {PROC_TAMA, "d_a_tama"}, + {PROC_Obj_Buoyflag, "d_a_obj_buoyflag"}, + {PROC_Obj_Correct, "d_a_obj_correct"}, + {PROC_Obj_Eff, "d_a_obj_eff"}, + {PROC_Tag_Light, "d_a_tag_light"}, + {PROC_Tag_Attention, "d_a_tag_attention"}, + {PROC_Tag_Waterlevel, "d_a_tag_waterlevel"}, + {PROC_ARROW_ICEEFF, "d_a_arrow_iceeff"}, + {PROC_ARROW_LIGHTEFF, "d_a_arrow_lighteff"}, + {PROC_Obj_Timer, "d_a_obj_timer"}, + + {0xFFFF, NULL}, +}; /* 800227A0-800229E0 .text cCc_Init__Fv */ -void cCc_Init() { - /* Nonmatching */ +s32 cCc_Init() { + JUT_ASSERT(0x2a, !DMC_initialized); + + JKRSolidHeap * pHeap = JKRSolidHeap::create(0x5648, mDoExt_getArchiveHeap(), false); + JKRHeap * pOldHeap = pHeap->becomeCurrentHeap(); + memset(DMC, 0, sizeof(DMC)); + + for (int i = 0; i < ARRAY_SIZE(DynamicNameTable); i++) { + const DynamicNameTableEntry & d = DynamicNameTable[i]; + if (d.name == NULL) + continue; + + JUT_ASSERT(0x39, d.mKey < (sizeof(DMC) / sizeof(DMC[0]))); + JUT_ASSERT(0x3a, DMC[d.mKey] == 0); + + for (int j = 0; j < ARRAY_SIZE(DMC); j++) { + if (DMC[j] != NULL) { + if (!strcmp(d.name, DMC[j]->getModuleName())) { + DMC[d.mKey] = DMC[j]; + break; + } + } + } + + if (DMC[d.mKey] == NULL) + DMC[d.mKey] = new DynamicModuleControl(d.name); + } + + pHeap->adjustSize(); + pOldHeap->becomeCurrentHeap(); + DMC_initialized = TRUE; + return TRUE; } /* 800229E0-80022A80 .text cDyl_IsLinked__Fs */ -void cDyl_IsLinked(short) { - /* Nonmatching */ +s32 cDyl_IsLinked(s16 i_ProfName) { + JUT_ASSERT(0xae, cDyl_Initialized); + + if (DMC[i_ProfName] != NULL) + return DMC[i_ProfName]->isLinked(); + + return TRUE; } /* 80022A80-80022B58 .text cDyl_Unlink__Fs */ -void cDyl_Unlink(short) { - /* Nonmatching */ +s32 cDyl_Unlink(s16 i_ProfName) { + JUT_ASSERT(0xc5, cDyl_Initialized); + JUT_ASSERT(0xc6, i_ProfName < (sizeof(DMC) / sizeof(DMC[0]))); + + if (DMC[i_ProfName] != NULL) + return DMC[i_ProfName]->unlink(); + + return 0; } /* 80022B58-80022CEC .text cDyl_LinkASync__Fs */ -void cDyl_LinkASync(short) { - /* Nonmatching */ +s32 cDyl_LinkASync(s16 i_ProfName) { + JUT_ASSERT(0x101, DMC_initialized); + + if (!cDyl_Initialized) + return cPhs_INIT_e; + + if (i_ProfName >= ARRAY_SIZE(DMC)) { + OSReport_Error("cDyl_Link i_ProfName=%d\n", i_ProfName); + return cPhs_ERROR_e; + } + + JUT_ASSERT(0x111, i_ProfName < (sizeof(DMC) / sizeof(DMC[0]))); + DynamicModuleControl * d = DMC[i_ProfName]; + if (d != NULL) { + JUT_ASSERT(0x115, cDyl_Initialized); + if (d->load_async()) { + if (d->link()) { + return cPhs_COMPLEATE_e; + } else { + OSReport_Error("cDyl_LinkASync: リンクに失敗しました。諦めます\n"); + return cPhs_ERROR_e; + } + } + + return cPhs_INIT_e; + } + + return cPhs_COMPLEATE_e; } /* 80022CEC-80022DF8 .text cDyl_InitCallback__FPv */ -void cDyl_InitCallback(void*) { - /* Nonmatching */ +BOOL cDyl_InitCallback(void*) { + JUT_ASSERT(0x12f, !cDyl_Initialized); + JKRFileLoader * pFileLoader = JKRFileCache::mount("/", mDoExt_getArchiveHeap(), NULL); + DynamicModuleControl::initialize(); + void * pData = JKRFileLoader::getGlbResource("/dvd/framework.str"); + JKRFileLoader::detachResource(pData, pFileLoader); + pFileLoader->unmount(); + OSSetStringTable(pData); + + DynamicModuleControl dmc("f_pc_profile_lst"); + dmc.link(); + cDyl_Initialized = TRUE; + return TRUE; } /* 80022DF8-80022E70 .text cDyl_InitAsync__Fv */ void cDyl_InitAsync() { - /* Nonmatching */ + cCc_Init(); + + JUT_ASSERT(0x145, cDyl_DVD == 0); + cDyl_DVD = mDoDvdThd_callback_c::create((mDoDvdThd_callback_func) cDyl_InitCallback, NULL); } /* 80022E70-80022EDC .text cDyl_InitAsyncIsDone__Fv */ -void cDyl_InitAsyncIsDone() { - /* Nonmatching */ +int cDyl_InitAsyncIsDone() { + if (cDyl_DVD == NULL) + return TRUE; + + if (cDyl_DVD->sync()) { + cDyl_DVD->destroy(); + cDyl_DVD = NULL; + return TRUE; + } + + return FALSE; } /* 80022EDC-80022EE4 .text phase_01__7cDylPhsFPv */ -void cDylPhs::phase_01(void*) { - /* Nonmatching */ +int cDylPhs::phase_01(void*) { + return cPhs_NEXT_e; } /* 80022EE4-80022F1C .text phase_02__7cDylPhsFPs */ -void cDylPhs::phase_02(short*) { - /* Nonmatching */ +int cDylPhs::phase_02(s16* pProf) { + s32 ret = cDyl_LinkASync(*pProf); + return ret == cPhs_COMPLEATE_e ? cPhs_NEXT_e : ret; } /* 80022F1C-80022F24 .text phase_03__7cDylPhsFPv */ -void cDylPhs::phase_03(void*) { - /* Nonmatching */ +int cDylPhs::phase_03(void*) { + return cPhs_INIT_e; } /* 80022F24-80022F68 .text Link__7cDylPhsFP30request_of_phase_process_classs */ -void cDylPhs::Link(request_of_phase_process_class*, short) { - /* Nonmatching */ +int cDylPhs::Link(request_of_phase_process_class* i_phase, s16 profName) { + static cPhs__Handler l_method[] = { + (cPhs__Handler) &cDylPhs::phase_01, + (cPhs__Handler) &cDylPhs::phase_02, + (cPhs__Handler) &cDylPhs::phase_03, + }; + + if (i_phase->id == cPhs_NEXT_e) + return cPhs_COMPLEATE_e; + + return dComLbG_PhaseHandler(i_phase, l_method, &profName); } /* 80022F68-80023004 .text Unlink__7cDylPhsFP30request_of_phase_process_classs */ -void cDylPhs::Unlink(request_of_phase_process_class*, short) { - /* Nonmatching */ -} +int cDylPhs::Unlink(request_of_phase_process_class* i_phase, s16 profName) { + JUT_ASSERT(0x1a6, i_phase->id != 1); -/* 80023004-8002300C .text getModuleName__24DynamicModuleControlBaseCFv */ -void DynamicModuleControlBase::getModuleName() const { - /* Nonmatching */ -} - -/* 8002300C-8002306C .text __dt__20DynamicModuleControlFv */ -DynamicModuleControl::~DynamicModuleControl() { - /* Nonmatching */ + s32 ret; + if (i_phase->id == cPhs_NEXT_e) { + ret = cDyl_Unlink(profName); + i_phase->id = cPhs_INIT_e; + } else { + ret = cPhs_INIT_e; + } + return ret; } From d33055236182c621efb5e28acdf5dd05fd02907c Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 03:40:46 -0700 Subject: [PATCH 51/89] d_attention work --- include/d/d_attention.h | 58 ++++---- include/d/d_com_inf_game.h | 10 ++ include/d/d_kankyo.h | 2 +- src/d/actor/d_a_agb.cpp | 4 +- src/d/d_att_dist.cpp | 3 - src/d/d_attention.cpp | 262 +++++++++++++++++++++++++++++-------- src/d/d_com_inf_game.cpp | 4 +- src/d/d_kankyo.cpp | 4 +- src/d/d_kankyo_rain.cpp | 121 ++++++++++++++++- src/d/d_kankyo_wether.cpp | 18 +-- 10 files changed, 384 insertions(+), 102 deletions(-) diff --git a/include/d/d_attention.h b/include/d/d_attention.h index df8072f73..c34dbbf7e 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -5,6 +5,19 @@ #include "m_Do/m_Do_ext.h" class fopAc_ac_c; +class mDoExt_McaMorf; +class J3DAnmColor; +class J3DMatColorAnm; + +class dAttDraw_c { +public: + void setAnm(int, int, int); + void draw(cXyz&, Mtx); + + /* 0x0 */ mDoExt_McaMorf * mpMorf; + /* 0x4 */ J3DAnmColor * mpAnmClr; + /* 0x8 */ J3DMatColorAnm * mpAnmMatClr; +}; class dAttHint_c { public: @@ -66,10 +79,11 @@ public: class dAttLook_c { public: - /* 80073CA4 */ fopAc_ac_c* convPId(unsigned int); - /* 80073CD4 */ void init(); - /* 80073CEC */ void proc(); - /* 80073D08 */ void request(fopAc_ac_c*, f32, f32, f32, s16, int); + fopAc_ac_c* convPId(unsigned int); + void init(); + void proc(); + void request(fopAc_ac_c*, f32, f32, f32, s16, int); + void requestF(fopAc_ac_c*, s16, int); private: u32 field_0x0; @@ -105,24 +119,24 @@ public: dAttention_c(fopAc_ac_c*, u32); ~dAttention_c(); - void GetActionList(s32); - void GetLockonList(s32); - void getActionBtnB(); - void getActionBtnXYZ_local(int); - void getActionBtnX(); - void getActionBtnY(); - void getActionBtnZ(); + dAttList_c* GetActionList(s32); + dAttList_c* GetLockonList(s32); + dAttList_c* getActionBtnB(); + dAttList_c* getActionBtnXYZ_local(int); + dAttList_c* getActionBtnX(); + dAttList_c* getActionBtnY(); + dAttList_c* getActionBtnZ(); void chkAttMask(u32, u32); void calcWeight(int, fopAc_ac_c*, f32, s16, s16, u32*); void setLList(fopAc_ac_c*, f32, f32, u32); void setAList(fopAc_ac_c*, f32, f32, u32); void initList(u32); - void makeList(); + s32 makeList(); void SelectAttention(fopAc_ac_c*); void sortList(); void stockAttention(u32); void nextAttention(u32); - void freeAttention(); + s32 freeAttention(); void chaseAttention(); void EnemyDistance(fopAc_ac_c*); void runSoundProc(); @@ -136,12 +150,11 @@ public: void judgementStatusHd(u32); void Run(u32); void Draw(); - void LockonTarget(s32); + fopAc_ac_c* LockonTarget(s32); void LockonReleaseDistanse(); - void LockonTargetPId(s32); - void ActionTarget(s32); - void LockonTruth(); - void Lockon(); + unsigned int LockonTargetPId(s32); + fopAc_ac_c* ActionTarget(s32); + bool LockonTruth(); void Init(fopAc_ac_c* i_owner, u32 i_playerNo) { mpPlayer = (daPy_lk_c*)i_owner; @@ -158,7 +171,7 @@ public: public: /* 0x000 */ daPy_lk_c* mpPlayer; /* 0x004 */ int mLockOnTargetBsPcID; - /* 0x008 */ dAttDraw_CallBack_c field_0x8; + /* 0x008 */ dAttDraw_CallBack_c mpCallBack; /* 0x00C */ int mPlayerNo; /* 0x010 */ u32 mFlagMask; /* 0x014 */ u8 field_0x014[0x018 - 0x014]; @@ -171,7 +184,9 @@ public: /* 0x020 */ u32 mFlags; /* 0x024 */ JKRHeap* mpHeap; /* 0x028 */ u8 field_0x028; - /* 0x029 */ u8 field_0x029[0x054 - 0x029]; + /* 0x02C */ cXyz field_0x02c; + /* 0x038 */ dAttDraw_c mDraw[2]; + /* 0x050 */ u32 field_0x050; /* 0x054 */ dAttList_c mLockOnList[8]; /* 0x0D4 */ int mLockOnNum; /* 0x0D8 */ int mLockOnOffs; @@ -180,8 +195,7 @@ public: /* 0x120 */ int mActionOffs; /* 0x124 */ dAttHint_c mHint; /* 0x130 */ dAttCatch_c mCatch; - /* 0x148 */ dAttLook_c field_0x148; - /* 0x158 */ dAttLook_c field_0x158; + /* 0x148 */ dAttLook_c mLook[2]; /* 0x168 */ int mEnemyBsPcId; /* 0x16C */ f32 mEnemyDistance; /* 0x170 */ dAttParam_c mAttParam; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index b274b1bc6..e0b52a878 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -723,6 +723,8 @@ inline u8 dComIfGs_getMaxMagic() { return g_dComIfG_gameInfo.save.getPlayer().getPlayerStatusA().getMaxMagic(); } +u8 dComIfGs_checkGetItemNum(u8 i_itemNo); + /** * === PLAY === */ @@ -1315,6 +1317,14 @@ inline void dComIfGd_entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) { g_dComIfG_gameInfo.drawlist.entryZSortXluList(i_packet, param_1); } +inline view_class* dComIfGd_getView() { + return (view_class*)g_dComIfG_gameInfo.drawlist.mpCamera; +} + +inline MtxP dComIfGd_getViewRotMtx() { + return dComIfGd_getView()->mViewMtxNoTrans; +} + /** * === RESOURCE === */ diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 575c20ece..5e81226ab 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -35,7 +35,7 @@ struct WIND_INFLUENCE { /* 0x18 */ f32 mRadius; /* 0x1C */ f32 mStrength; /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; + /* 0x24 */ s32 mRegistIdx; /* 0x28 */ u8 mbConstant; }; diff --git a/src/d/actor/d_a_agb.cpp b/src/d/actor/d_a_agb.cpp index 6e8a671b4..00720cf6f 100644 --- a/src/d/actor/d_a_agb.cpp +++ b/src/d/actor/d_a_agb.cpp @@ -149,7 +149,7 @@ void daAgb_c::NameConv() { int daAgb_c::uploadInitCheck() { s32 roomNo = dComIfGp_roomControl_getStayNo(); dStage_FileList_dt_c* fili_p = - dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo(); if ((dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) != 7 && !dMap_c::isEnableDispMap()) || @@ -656,7 +656,7 @@ void daAgb_c::GbaItemUse() { if (temp_r0 == 0 || temp_r0 == 1 || temp_r0 == 2 || temp_r29 == 0x11 || temp_r29 == 0x12) { s32 roomNo = dComIfGp_roomControl_getStayNo(); dStage_FileList_dt_c* fili_p = - dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo(); if (fili_p != NULL && fili_p->mParam & 4) { if (field_0x67c != 0) { diff --git a/src/d/d_att_dist.cpp b/src/d/d_att_dist.cpp index 5ae63cbf0..2f3fef0a2 100644 --- a/src/d/d_att_dist.cpp +++ b/src/d/d_att_dist.cpp @@ -3,6 +3,3 @@ // Translation Unit: d_att_dist.cpp // -#include "d_att_dist.h" -#include "dolphin/types.h" - diff --git a/src/d/d_attention.cpp b/src/d/d_attention.cpp index ec43e222e..1e9fb4bc8 100644 --- a/src/d/d_attention.cpp +++ b/src/d/d_attention.cpp @@ -3,8 +3,9 @@ // Translation Unit: d_attention.cpp // -#include "d_attention.h" -#include "dolphin/types.h" +#include "d/d_attention.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_com_inf_game.h" /* 8009D220-8009D268 .text __ct__11dAttParam_cFl */ dAttParam_c::dAttParam_c(long) { @@ -32,38 +33,53 @@ dAttention_c::~dAttention_c() { } /* 8009D6EC-8009D728 .text GetActionList__12dAttention_cFl */ -void dAttention_c::GetActionList(long) { - /* Nonmatching */ +dAttList_c* dAttention_c::GetActionList(long idx) { + if (mActionNum != 0) + return &mActionList[(mActionOffs + idx) % mActionNum]; + else + return NULL; } /* 8009D728-8009D764 .text GetLockonList__12dAttention_cFl */ -void dAttention_c::GetLockonList(long) { - /* Nonmatching */ +dAttList_c* dAttention_c::GetLockonList(long idx) { + if (mLockOnNum != 0) + return &mLockOnList[(mLockOnOffs + idx) % mLockOnNum]; + else + return NULL; } /* 8009D764-8009D858 .text getActionBtnB__12dAttention_cFv */ -void dAttention_c::getActionBtnB() { +dAttList_c* dAttention_c::getActionBtnB() { /* Nonmatching */ } /* 8009D858-8009D9A8 .text getActionBtnXYZ_local__12dAttention_cFi */ -void dAttention_c::getActionBtnXYZ_local(int) { +dAttList_c* dAttention_c::getActionBtnXYZ_local(int) { /* Nonmatching */ } /* 8009D9A8-8009D9FC .text getActionBtnX__12dAttention_cFv */ -void dAttention_c::getActionBtnX() { - /* Nonmatching */ +dAttList_c* dAttention_c::getActionBtnX() { + if (!dComIfGs_checkGetItemNum(g_dComIfG_gameInfo.play.mEquippedItems[0])) + return NULL; + + return getActionBtnXYZ_local(0); } /* 8009D9FC-8009DA50 .text getActionBtnY__12dAttention_cFv */ -void dAttention_c::getActionBtnY() { - /* Nonmatching */ +dAttList_c* dAttention_c::getActionBtnY() { + if (!dComIfGs_checkGetItemNum(g_dComIfG_gameInfo.play.mEquippedItems[1])) + return NULL; + + return getActionBtnXYZ_local(1); } /* 8009DA50-8009DAA4 .text getActionBtnZ__12dAttention_cFv */ -void dAttention_c::getActionBtnZ() { - /* Nonmatching */ +dAttList_c* dAttention_c::getActionBtnZ() { + if (!dComIfGs_checkGetItemNum(g_dComIfG_gameInfo.play.mEquippedItems[2])) + return NULL; + + return getActionBtnXYZ_local(2); } /* 8009DAA4-8009DAF4 .text chkAttMask__12dAttention_cFUlUl */ @@ -102,27 +118,86 @@ void dAttention_c::calcWeight(int, fopAc_ac_c*, float, short, short, unsigned lo } /* 8009E03C-8009E128 .text setLList__12dAttention_cFP10fopAc_ac_cffUl */ -void dAttention_c::setLList(fopAc_ac_c*, float, float, unsigned long) { - /* Nonmatching */ +void dAttention_c::setLList(fopAc_ac_c* i_actor, float weight, float distance, unsigned long type) { + float bestWeight = 0.0f; + + if (weight > 0.0f) { + int bestIdx; + if (mLockOnNum < (s32)ARRAY_SIZE(mLockOnList)) { + bestIdx = mLockOnNum++; + } else { + for (int i = (s32)ARRAY_SIZE(mLockOnList); i >= 0; i--) { + if (weight > bestWeight) { + bestIdx = i; + bestWeight = weight; + } + } + } + + if (weight < mLockOnList[bestIdx].mWeight) { + mLockOnList[bestIdx].setActor(i_actor); + mLockOnList[bestIdx].mWeight = weight; + mLockOnList[bestIdx].mDistance = distance; + mLockOnList[bestIdx].mType = type; + } + } } /* 8009E128-8009E214 .text setAList__12dAttention_cFP10fopAc_ac_cffUl */ -void dAttention_c::setAList(fopAc_ac_c*, float, float, unsigned long) { - /* Nonmatching */ +void dAttention_c::setAList(fopAc_ac_c* i_actor, float weight, float distance, unsigned long type) { + float bestWeight = 0.0f; + + if (weight > 0.0f) { + int bestIdx; + if (mActionNum < (s32)ARRAY_SIZE(mActionList)) { + bestIdx = mActionNum++; + } else { + for (int i = (s32)ARRAY_SIZE(mActionList); i >= 0; i--) { + if (weight > bestWeight) { + bestIdx = i; + bestWeight = weight; + } + } + } + + if (weight < mActionList[bestIdx].mWeight) { + mActionList[bestIdx].setActor(i_actor); + mActionList[bestIdx].mWeight = weight; + mActionList[bestIdx].mDistance = distance; + mActionList[bestIdx].mType = type; + } + } } /* 8009E214-8009E2CC .text initList__12dAttention_cFUl */ -void dAttention_c::initList(unsigned long) { - /* Nonmatching */ +void dAttention_c::initList(unsigned long flagMask) { + int i; + + mFlagMask = flagMask; + + for (i = 0; i < (s32)ARRAY_SIZE(mLockOnList); i++) { + mLockOnList[i].setActor(NULL); + mLockOnList[i].mWeight = 3.4028235E38f; + } + mLockOnOffs = 0; + mLockOnNum = 0; + + for (i = 0; i < (s32)ARRAY_SIZE(mActionList); i++) { + mActionList[i].setActor(NULL); + mActionList[i].mWeight = 3.4028235E38f; + } + mActionOffs = 0; + mActionNum = 0; } /* 8009E2CC-8009E2F8 .text select_attention__FP10fopAc_ac_cPv */ -void select_attention(fopAc_ac_c*, void*) { - /* Nonmatching */ +void select_attention(fopAc_ac_c* pActor, void* i_attention) { + dAttention_c * pAttention = (dAttention_c*)i_attention; + pAttention->SelectAttention(pActor); } /* 8009E2F8-8009E33C .text makeList__12dAttention_cFv */ -void dAttention_c::makeList() { +s32 dAttention_c::makeList() { /* Nonmatching */ } @@ -137,18 +212,47 @@ void dAttention_c::sortList() { } /* 8009E5C4-8009E684 .text stockAttention__12dAttention_cFUl */ -void dAttention_c::stockAttention(unsigned long) { - /* Nonmatching */ +void dAttention_c::stockAttention(unsigned long interactMask) { + fopAc_ac_c * pTarget = LockonTarget(0); + initList(interactMask); + if (makeList()) + sortList(); + + if (pTarget != mLockOnList[0].getActor()) { + if (pTarget != NULL) { + if (mLockOnList[0].getActor() != NULL) + mFlags |= 2; + } else { + mFlags |= 1; + } + + mFlags |= 4; + } + + LockonTarget(0); } /* 8009E684-8009E728 .text nextAttention__12dAttention_cFUl */ -void dAttention_c::nextAttention(unsigned long) { - /* Nonmatching */ +void dAttention_c::nextAttention(unsigned long interactMask) { + fopAc_ac_c * pTarget = fopAcM_SearchByID(mLockOnTargetBsPcID); + initList(interactMask); + if (makeList()) + sortList(); + + if (pTarget == mLockOnList[0].getActor() && mLockOnNum > 1) + mLockOnOffs = 1; + + LockonTarget(0); } /* 8009E728-8009E764 .text freeAttention__12dAttention_cFv */ -void dAttention_c::freeAttention() { - /* Nonmatching */ +s32 dAttention_c::freeAttention() { + mLockOnOffs = 0; + mLockOnNum = 0; + mActionOffs = 0; + mActionNum = 0; + initList(0xFFFFFFFF); + return 0; } /* 8009E764-8009E978 .text chaseAttention__12dAttention_cFv */ @@ -232,8 +336,15 @@ void dAttDraw_c::draw(cXyz&, float(*)[4]) { } /* 8009F834-8009F88C .text LockonTarget__12dAttention_cFl */ -void dAttention_c::LockonTarget(long) { - /* Nonmatching */ +fopAc_ac_c* dAttention_c::LockonTarget(s32 idx) { + if (idx >= mLockOnNum) + return NULL; + + s32 listIdx = mLockOnOffs + idx; + if (listIdx >= mLockOnNum) + listIdx -= mLockOnNum; + + return mLockOnList[listIdx].getActor(); } /* 8009F88C-8009F980 .text LockonReleaseDistanse__12dAttention_cFv */ @@ -242,68 +353,101 @@ void dAttention_c::LockonReleaseDistanse() { } /* 8009F980-8009F9B8 .text LockonTargetPId__12dAttention_cFl */ -void dAttention_c::LockonTargetPId(long) { - /* Nonmatching */ +unsigned int dAttention_c::LockonTargetPId(s32 idx) { + if (idx >= mLockOnNum) + return NULL; + + s32 listIdx = mLockOnOffs + idx; + if (listIdx >= mLockOnNum) + listIdx -= mLockOnNum; + + return mLockOnList[listIdx].getPid(); } /* 8009F9B8-8009FA10 .text ActionTarget__12dAttention_cFl */ -void dAttention_c::ActionTarget(long) { - /* Nonmatching */ +fopAc_ac_c* dAttention_c::ActionTarget(s32 idx) { + if (idx >= mActionNum) + return NULL; + + s32 listIdx = mActionOffs + idx; + if (listIdx >= mActionNum) + listIdx -= mActionNum; + + return mActionList[listIdx].getActor(); } /* 8009FA10-8009FA64 .text LockonTruth__12dAttention_cFv */ -void dAttention_c::LockonTruth() { - /* Nonmatching */ +bool dAttention_c::LockonTruth() { + return mLockOnState == 1 || (mLockOnState == 2 && LockonTarget(0)); } /* 8009FA64-8009FA98 .text getActor__10dAttList_cFv */ -void dAttList_c::getActor() { - /* Nonmatching */ +fopAc_ac_c* dAttList_c::getActor() { + return fopAcM_SearchByID(mActorID); } /* 8009FA98-8009FAB4 .text setActor__10dAttList_cFP10fopAc_ac_c */ -void dAttList_c::setActor(fopAc_ac_c*) { - /* Nonmatching */ +void dAttList_c::setActor(fopAc_ac_c* i_actor) { + mActorID = fpcM_GetID(i_actor); } /* 8009FAB4-8009FACC .text getPId__10dAttHint_cFPv */ -void dAttHint_c::getPId(void*) { - /* Nonmatching */ +u32 dAttHint_c::getPId(void* i_proc) { + return fpcM_GetID(i_proc); } /* 8009FACC-8009FAFC .text convPId__10dAttHint_cFUi */ -void dAttHint_c::convPId(unsigned int) { - /* Nonmatching */ +fopAc_ac_c* dAttHint_c::convPId(unsigned int i_procID) { + return fopAcM_SearchByID(i_procID); } /* 8009FAFC-8009FB58 .text request__10dAttHint_cFP10fopAc_ac_ci */ -void dAttHint_c::request(fopAc_ac_c*, int) { - /* Nonmatching */ +int dAttHint_c::request(fopAc_ac_c* i_actor, int priority) { + if (priority < 0) + priority = 0x1FF; + + if (priority <= mPriority) { + mHintActorID = getPId(i_actor); + mPriority = priority; + } + + return TRUE; } /* 8009FB58-8009FB70 .text init__10dAttHint_cFv */ void dAttHint_c::init() { - /* Nonmatching */ + mHintActorID = -1; + field_0x8 = -1; + mPriority = 0x200; } /* 8009FB70-8009FB8C .text proc__10dAttHint_cFv */ void dAttHint_c::proc() { - /* Nonmatching */ + field_0x8 = mHintActorID; + mHintActorID = -1; + mPriority = 0x200; } /* 8009FB8C-8009FBBC .text convPId__11dAttCatch_cFUi */ -void dAttCatch_c::convPId(unsigned int) { - /* Nonmatching */ +fopAc_ac_c* dAttCatch_c::convPId(unsigned int i_procID) { + return fopAcM_SearchByID(i_procID); } /* 8009FBBC-8009FBDC .text init__11dAttCatch_cFv */ void dAttCatch_c::init() { - /* Nonmatching */ + field_0xc = 0x56; + field_0x0 = -1; + mCatghTargetID = -1; + field_0x4 = 3; } /* 8009FBDC-8009FC08 .text proc__11dAttCatch_cFv */ void dAttCatch_c::proc() { - /* Nonmatching */ + mCatghTargetID = field_0x0; + mChangeItem = field_0xc; + field_0x0 = -1; + field_0x4 = 3; + field_0xc = 0x56; } /* 8009FC08-8009FE10 .text request__11dAttCatch_cFP10fopAc_ac_cUcfffsi */ @@ -312,18 +456,22 @@ void dAttCatch_c::request(fopAc_ac_c*, unsigned char, float, float, float, short } /* 8009FE10-8009FE40 .text convPId__10dAttLook_cFUi */ -void dAttLook_c::convPId(unsigned int) { - /* Nonmatching */ +fopAc_ac_c* dAttLook_c::convPId(unsigned int i_procID) { + return fopAcM_SearchByID(i_procID); } /* 8009FE40-8009FE58 .text init__10dAttLook_cFv */ void dAttLook_c::init() { - /* Nonmatching */ + field_0x0 = -1; + mLookTargetID = -1; + field_0x4 = 3; } /* 8009FE58-8009FE74 .text proc__10dAttLook_cFv */ void dAttLook_c::proc() { - /* Nonmatching */ + mLookTargetID = field_0x0; + field_0x0 = -1; + field_0x4 = 3; } /* 8009FE74-800A009C .text request__10dAttLook_cFP10fopAc_ac_cfffsi */ diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 13f011723..dea1270c2 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -616,7 +616,7 @@ stage_camera_class* dComIfGp_getRoomCamera(int i_roomNo) { return NULL; } - return status->mRoomDt.getCamera(); + return status->getCamera(); } /* 80053778-800537C8 .text dComIfGp_getRoomArrow__Fi */ @@ -627,7 +627,7 @@ stage_arrow_class* dComIfGp_getRoomArrow(int i_roomNo) { return NULL; } - return status->mRoomDt.getArrow(); + return status->getArrow(); } /* 800537C8-8005388C .text dComIfGp_setNextStage__FPCcsScScfUliSc */ diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index db389ffaf..e1764eb5d 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -80,7 +80,7 @@ static u16 lightMaskData[] = { BOOL toon_proc_check() { s32 roomNo = dComIfGp_roomControl_getStayNo(); if (roomNo >= 0) { - dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo(); } return false; @@ -1718,7 +1718,7 @@ void dScnKy_env_light_c::SetBaseLight() { int roomNo = dComIfGp_roomControl_getStayNo(); if (roomNo >= 0) { - plight_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getLightVecInfo(); + plight_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getLightVecInfo(); } if (plight_p != NULL) { diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index ab5386f9d..b0668b507 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -74,6 +74,12 @@ void dKy_set_eyevect_calc2(camera_class* i_camera, Vec* param_1, f32 param_2, f3 } } +static inline void dKyr_init_btitex(GXTexObj* i_obj, ResTIMG* i_img) { + GXInitTexObj(i_obj, (&i_img->format + i_img->imageOffset), i_img->width, i_img->height, + (GXTexFmt)i_img->format, (GXTexWrapMode)i_img->wrapS, (GXTexWrapMode)i_img->wrapT, + (GXBool)(i_img->mipmapCount > 1)); +} + /* 8008AD60-8008AE54 .text dKyr_set_btitex__FP9_GXTexObjP7ResTIMG */ void dKyr_set_btitex(GXTexObj* i_obj, ResTIMG* i_img) { GXInitTexObj(i_obj, (&i_img->format + i_img->imageOffset), i_img->width, i_img->height, @@ -269,7 +275,19 @@ void vrkumo_move() { /* 800940D4-80094144 .text dKy_wave_chan_init__Fv */ void dKy_wave_chan_init() { - /* Nonmatching */ + g_env_light.mWaveChan.field_0x0 = -1.0f; + g_env_light.mWaveChan.field_0x4 = 0.0f; + g_env_light.mWaveChan.field_0x8 = 0.0f; + g_env_light.mWaveChan.mWaveSpeed = 0.1f; + g_env_light.mWaveChan.mWaveSpawnDist = 3000.0f; + g_env_light.mWaveChan.mWaveSpawnRadius = 3150.0f; + g_env_light.mWaveChan.mWaveScale = 250.0f; + g_env_light.mWaveChan.mWaveScaleRand = 0.217f; + g_env_light.mWaveChan.mWaveCounterSpeedScale = 1.6f; + g_env_light.mWaveChan.mWaveScaleBottom = 5.0f; + g_env_light.mWaveChan.mWaveCount = 0; + g_env_light.mWaveChan.mWaveReset = 0; + g_env_light.mWaveChan.field_0x2f = 0; } /* 80094144-8009428C .text snap_sunmoon_proc__FP4cXyzi */ @@ -293,8 +311,103 @@ void dKyr_drawRain(Mtx, u8**) { } /* 8009682C-80096D18 .text dKyr_drawSibuki__FPA4_fPPUc */ -void dKyr_drawSibuki(Mtx, u8**) { - /* Nonmatching */ +void dKyr_drawSibuki(Mtx drawMtx, u8** pImg) { + dKankyo_rain_Packet * pPkt = g_env_light.mpRainPacket; + camera_class *pCamera = dComIfGp_getCamera(0); + + if (g_env_light.mSnowCount != 0 || dComIfGd_getView() == NULL) + return; + + Mtx camMtx; + MTXInverse(dComIfGd_getViewRotMtx(), camMtx); + + f32 alpha = 200.0f; + if (pPkt->mStatus & 1) + alpha = 0.0f; + + cLib_addCalc(&pPkt->mSibukiAlpha, alpha, 0.2f, 30.0f, 0.001f); + + cXyz eyevect, camDir; + dKy_set_eyevect_calc(pCamera, &eyevect, 7000.0f, 4000.0f); + dKyr_get_vectle_calc(&pCamera->mLookat.mEye, &pCamera->mLookat.mCenter, &camDir); + + float alphaFade = 0.0f; + if (camDir.y <= 0.0f) + alphaFade = 1.0f; + else if (camDir.y < 0.5f) + alphaFade = 1.0f - (camDir.y / 0.5f); + + GXColor color = { 0xB4, 0xC8, 0xC8, 0x00 }; + color.a = (u8)(pPkt->mSibukiAlpha * alphaFade); + + GXTexObj texObj; + dKyr_init_btitex(&texObj, (ResTIMG*)pImg[1]); + GXLoadTexObj(&texObj, GX_TEXMAP0); + + GXSetNumChans(0); + GXSetTevColor(GX_TEVREG0, color); + GXSetTevColor(GX_TEVREG1, color); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, false, GX_PTIDENTITY); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); + GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); + GXSetZMode(true, GX_GEQUAL, false); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_DISABLE); + GXSetNumIndStages(0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXLoadPosMtxImm(drawMtx, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + + f32 scale; + if (dComIfGd_getView() == NULL) { + scale = 0.2f; + } else { + scale = dComIfGd_getView()->mFovy / 20.0f; + if (scale >= 1.0f) + scale = 1.0f; + scale = 1.0f - scale; + } + + for (s32 i = 0; i < g_env_light.mRainCount / 2; i++) { + f32 size = 20.0f + scale * cM_rndF(25.0f); + + f32 x = eyevect.x + cM_rndFX(3600.0f); + f32 y = eyevect.y + cM_rndFX(1500.0f); + f32 z = eyevect.z + cM_rndFX(3600.0f); + + f32 x0 = x - size, x1 = x + size; + f32 z0 = z - size, z1 = z + size; + + cXyz p0( x0, y, z0 ); + cXyz p1( x1, y, z0 ); + cXyz p2( x1, y, z1 ); + cXyz p3( x0, y, z1 ); + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(p0.x, p0.y, p0.z); + GXTexCoord2s16(0, 0); + GXPosition3f32(p1.x, p1.y, p1.z); + GXTexCoord2s16(0x1FF, 0); + GXPosition3f32(p2.x, p2.y, p2.z); + GXTexCoord2s16(0x1FF, 0x1FF); + GXPosition3f32(p3.x, p3.y, p3.z); + GXTexCoord2s16(0, 0x1FF); + i_GXEnd(); + } + + GXSetClipMode(GX_CLIP_ENABLE); + J3DShape::sOldVcdVatCmd = NULL; } /* 80096D18-800973CC .text drawPoison__FPA4_fPPUc */ @@ -339,7 +452,7 @@ void drawVrkumo(Mtx, GXColor&, u8**) { /* 8009B9C4-8009B9D8 .text dKyr_thunder_init__Fv */ void dKyr_thunder_init() { - /* Nonmatching */ + g_env_light.mThunderEff.mStateTimer = 0; } /* 8009B9D8-8009BDEC .text dKyr_thunder_move__Fv */ diff --git a/src/d/d_kankyo_wether.cpp b/src/d/d_kankyo_wether.cpp index 6cfe103bd..64883b07e 100644 --- a/src/d/d_kankyo_wether.cpp +++ b/src/d/d_kankyo_wether.cpp @@ -399,7 +399,7 @@ void wether_move_windline() { int roomNo = dComIfGp_roomControl_getStayNo(); if (roomNo >= 0) { - fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo(); } g_env_light.mWindlineCount = 0; @@ -989,7 +989,7 @@ void dKyw_wind_set() { s32 roomNo = dComIfGp_roomControl_getStayNo(); if (roomNo >= 0) { - fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo(); } s16 tact_wind_x; @@ -1146,16 +1146,16 @@ void dKyw_pntwind_init() { /* 8008A144-8008A1A8 .text pntwind_set__FP14WIND_INFLUENCE */ void pntwind_set(WIND_INFLUENCE* i_influence) { int i = 0; - for (; i < 30; i++) { + for (; i < ARRAY_SIZE(g_env_light.mpWindInfluence); i++) { if (g_env_light.mpWindInfluence[i] == NULL) { g_env_light.mpWindInfluence[i] = i_influence; - g_env_light.mpWindInfluence[i]->field_0x24 = i; + g_env_light.mpWindInfluence[i]->mRegistIdx = i; break; } } if (i >= 30) { - i_influence->field_0x24 = 9999; + i_influence->mRegistIdx = 9999; } } @@ -1174,8 +1174,8 @@ void dKyw_pwind_cylinder_set(WIND_INFLUENCE* i_influence) { /* 8008A1F8-8008A230 .text dKyw_pntwind_cut__FP14WIND_INFLUENCE */ void dKyw_pntwind_cut(WIND_INFLUENCE* i_influence) { if (i_influence != NULL) { - if (i_influence->field_0x24 >= 0 && i_influence->field_0x24 < 30) { - g_env_light.mpWindInfluence[i_influence->field_0x24] = NULL; + if (i_influence->mRegistIdx >= 0 && i_influence->mRegistIdx < 30) { + g_env_light.mpWindInfluence[i_influence->mRegistIdx] = NULL; } } } @@ -1188,7 +1188,7 @@ void dKyw_pntwind_get_info(cXyz* param_0, cXyz* i_dir, f32* i_power) { *i_power = 0.0f; WIND_INFLUENCE* influence; - for (int i = 0; i < 30; i++) { + for (int i = 0; i < ARRAY_SIZE(g_env_light.mpWindInfluence); i++) { influence = g_env_light.mpWindInfluence[i]; if (influence != NULL) { f32 dist = param_0->abs(influence->mPos); @@ -1376,7 +1376,7 @@ BOOL dKyw_gbwind_use_check() { if (g_env_light.mWind.mpWindVecOverride == NULL) { s32 roomNo = dComIfGp_roomControl_getStayNo(); if (roomNo >= 0) { - fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); + fili_p = dComIfGp_roomControl_getStatusRoomDt(roomNo)->getFileListInfo(); } if (fili_p != NULL && dStage_FileList_dt_GlobalWindLevel(fili_p) <= 2) { From 70abad34a440e4d2c995847b6c2a9b059fc44ce3 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 03:47:34 -0700 Subject: [PATCH 52/89] d_letter match --- configure.py | 2 +- include/d/d_letter.h | 4 +++- src/d/d_letter.cpp | 53 ++++++++++++++++++++++++++------------------ 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/configure.py b/configure.py index 7bc9629fb..6781476ff 100644 --- a/configure.py +++ b/configure.py @@ -442,7 +442,7 @@ config.libs = [ Object(NonMatching, "d/d_kyeff.cpp"), Object(NonMatching, "d/d_kyeff2.cpp"), Object(NonMatching, "d/d_ky_thunder.cpp"), - Object(NonMatching, "d/d_letter.cpp"), + Object(Matching, "d/d_letter.cpp"), Object(NonMatching, "d/d_level_se.cpp"), Object(NonMatching, "d/d_menu_cloth.cpp"), Object(NonMatching, "d/d_menu_collect.cpp"), diff --git a/include/d/d_letter.h b/include/d/d_letter.h index 92b3cce7d..277e1d06e 100644 --- a/include/d/d_letter.h +++ b/include/d/d_letter.h @@ -1,10 +1,12 @@ #ifndef D_LETTER_H #define D_LETTER_H +#include "dolphin/types.h" + bool dLetter_isNoSend(u16); void dLetter_send(u16); bool dLetter_isSend(u16); -bool dLetter_stock(u16); +void dLetter_stock(u16); bool dLetter_isStock(u16); void dLetter_read(u16); bool dLetter_isRead(u16); diff --git a/src/d/d_letter.cpp b/src/d/d_letter.cpp index 4e93971fd..ca4b8b911 100644 --- a/src/d/d_letter.cpp +++ b/src/d/d_letter.cpp @@ -3,56 +3,65 @@ // Translation Unit: d_letter.cpp // -#include "d_letter.h" -#include "dolphin/types.h" +#include "d/d_letter.h" +#include "d/d_com_inf_game.h" + +enum dLetterStts_e { + NOSEND_e, + SEND_e, + STOCK_e, + READ_e, +}; /* 801990CC-80199108 .text dLetter_isNoSend__FUs */ -void dLetter_isNoSend(unsigned short) { - /* Nonmatching */ +bool dLetter_isNoSend(u16 idx) { + return dComIfGs_getEventReg(idx) == NOSEND_e; } /* 80199108-8019913C .text dLetter_send__FUs */ -void dLetter_send(unsigned short) { - /* Nonmatching */ +void dLetter_send(u16 idx) { + dComIfGs_setEventReg(idx, SEND_e); } /* 8019913C-8019917C .text dLetter_isSend__FUs */ -void dLetter_isSend(unsigned short) { - /* Nonmatching */ +bool dLetter_isSend(u16 idx) { + return dComIfGs_getEventReg(idx) == SEND_e; } /* 8019917C-801991B0 .text dLetter_stock__FUs */ -void dLetter_stock(unsigned short) { - /* Nonmatching */ +void dLetter_stock(u16 idx) { + dComIfGs_setEventReg(idx, STOCK_e); } /* 801991B0-801991F0 .text dLetter_isStock__FUs */ -void dLetter_isStock(unsigned short) { - /* Nonmatching */ +bool dLetter_isStock(u16 idx) { + return dComIfGs_getEventReg(idx) == STOCK_e; } /* 801991F0-80199224 .text dLetter_read__FUs */ -void dLetter_read(unsigned short) { - /* Nonmatching */ +void dLetter_read(u16 idx) { + dComIfGs_setEventReg(idx, READ_e); } /* 80199224-80199264 .text dLetter_isRead__FUs */ -void dLetter_isRead(unsigned short) { - /* Nonmatching */ +bool dLetter_isRead(u16 idx) { + return dComIfGs_getEventReg(idx) == READ_e; } /* 80199264-801992A0 .text dLetter_delivery__FUs */ -void dLetter_delivery(unsigned short) { - /* Nonmatching */ +void dLetter_delivery(u16 idx) { + if (dLetter_isSend(idx)) + dLetter_stock(idx); } /* 801992A0-801992DC .text dLetter_autoStock__FUs */ -void dLetter_autoStock(unsigned short) { - /* Nonmatching */ +void dLetter_autoStock(u16 idx) { + if (dLetter_isNoSend(idx)) + dLetter_stock(idx); } /* 801992DC-80199308 .text dLetter_isDelivery__FUs */ -void dLetter_isDelivery(unsigned short) { - /* Nonmatching */ +bool dLetter_isDelivery(u16 idx) { + return !dLetter_isNoSend(idx); } From 53555ffbcfef497dc0a78bf365942fb2ddb5ce1e Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sat, 23 Sep 2023 07:27:10 -0400 Subject: [PATCH 53/89] Link J3DSys --- configure.py | 2 +- src/JSystem/J3DGraphBase/J3DSys.cpp | 2 +- src/m_Do/m_Do_main.cpp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/configure.py b/configure.py index 7bc9629fb..cbbe1b189 100644 --- a/configure.py +++ b/configure.py @@ -848,7 +848,7 @@ config.libs = [ "J3DGraphBase", [ Object(NonMatching, "JSystem/J3DGraphBase/J3DGD.cpp"), - Object(NonMatching, "JSystem/J3DGraphBase/J3DSys.cpp"), + Object(Matching, "JSystem/J3DGraphBase/J3DSys.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DVertex.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DTransform.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DPacket.cpp"), diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp index 81a58d229..c1e76c230 100644 --- a/src/JSystem/J3DGraphBase/J3DSys.cpp +++ b/src/JSystem/J3DGraphBase/J3DSys.cpp @@ -123,7 +123,7 @@ void J3DFifoLoadNrmMtxImm3x3(Mtx33 mtx, unsigned long idx) { GFX_FIFO(u32) = mtx_u32[8]; } -u8 NullTexData[16] = { +u8 NullTexData[16] __attribute__((aligned(32))) = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 5a251f01d..304386ae8 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -51,7 +51,8 @@ void HeapCheck::CheckHeap1() { } // unused data? -static u32 lit_2100[] = {0x3F800000, 0x3F800000, 0x3F800000, 0x3F800000, 0x3F800000, 0x3F800000}; +static u32 lit_2100[] = {0x3F800000, 0x3F800000, 0x3F800000}; +static u32 lit_2080[] = {0x3F800000, 0x3F800000, 0x3F800000}; char mDoMain::COPYDATE_STRING[18] = "??/??/?? ??:??:??"; From f0737907d562915aef7c8b725780251b98ab7cad Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 13:34:07 -0700 Subject: [PATCH 54/89] d_resorce mostly there --- .../JSystem/J3DGraphAnimator/J3DMaterialAnm.h | 50 +- include/JSystem/J3DGraphLoader/J3DAnmLoader.h | 7 +- .../JSystem/J3DGraphLoader/J3DModelLoader.h | 7 +- include/d/d_drawlist.h | 5 + include/d/d_resorce.h | 11 +- include/m_Do/m_Do_ext.h | 16 +- src/d/d_resorce.cpp | 623 ++++++++++++++---- src/m_Do/m_Do_ext.cpp | 2 +- 8 files changed, 568 insertions(+), 153 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h index b2d5316af..dec569648 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h @@ -8,8 +8,8 @@ typedef struct _GXColorS10 GXColorS10; class J3DMatColorAnm { public: - /* 8003B2B8 */ ~J3DMatColorAnm() {}; - /* 8003B2F4 */ J3DMatColorAnm() {}; + ~J3DMatColorAnm() {}; + J3DMatColorAnm() {}; void operator=(J3DMatColorAnm const& other) { mAnmColor = other.mAnmColor; @@ -29,9 +29,9 @@ private: class J3DTexNoAnm { public: - /* 8003B1F8 */ ~J3DTexNoAnm() {}; - /* 8003B240 */ J3DTexNoAnm() {}; - /* 8003C82C */ virtual void calc(u16* param_0) const { mAnmTexPattern->getTexNo(field_0x4, param_0); } + ~J3DTexNoAnm() {}; + J3DTexNoAnm() {}; + virtual void calc(u16* param_0) const { mAnmTexPattern->getTexNo(field_0x4, param_0); } void operator=(J3DTexNoAnm const& other) { mAnmTexPattern = other.mAnmTexPattern; @@ -51,8 +51,8 @@ private: class J3DTexMtxAnm { public: - /* 8003B264 */ ~J3DTexMtxAnm() {}; - /* 8003B2A0 */ J3DTexMtxAnm() {}; + ~J3DTexMtxAnm() {}; + J3DTexMtxAnm() {}; void operator=(J3DTexMtxAnm const& other) { mAnmTransform = other.mAnmTransform; @@ -74,8 +74,8 @@ private: class J3DTevKColorAnm { public: - /* 8003B150 */ ~J3DTevKColorAnm() {}; - /* 8003B18C */ J3DTevKColorAnm() {}; + ~J3DTevKColorAnm() {}; + J3DTevKColorAnm() {}; void operator=(J3DTevKColorAnm const& other) { mAnmTevReg = other.mAnmTevReg; @@ -95,8 +95,8 @@ private: class J3DTevColorAnm { public: - /* 8003B1A4 */ ~J3DTevColorAnm() {}; - /* 8003B1E0 */ J3DTevColorAnm() {}; + ~J3DTevColorAnm() {}; + J3DTevColorAnm() {}; void operator=(J3DTevColorAnm const& other) { mAnmTevReg = other.mAnmTevReg; @@ -118,24 +118,24 @@ class J3DMaterialAnm { public: J3DMaterialAnm() { initialize(); } - /* 8032C320 */ void initialize(); - /* 8032C5A4 */ void setMatColorAnm(int, J3DMatColorAnm*); - /* 8032C5E4 */ void setTexMtxAnm(int, J3DTexMtxAnm*); - /* 8032C624 */ void setTexNoAnm(int, J3DTexNoAnm*); - /* 8032C664 */ void setTevColorAnm(int, J3DTevColorAnm*); - /* 8032C6A4 */ void setTevKColorAnm(int, J3DTevKColorAnm*); + void initialize(); + void setMatColorAnm(int, J3DMatColorAnm*); + void setTexMtxAnm(int, J3DTexMtxAnm*); + void setTexNoAnm(int, J3DTexNoAnm*); + void setTevColorAnm(int, J3DTevColorAnm*); + void setTevKColorAnm(int, J3DTevKColorAnm*); - /* 800A4820 */ virtual ~J3DMaterialAnm() {}; - /* 8032C3C4 */ virtual void calc(J3DMaterial*) const; + virtual ~J3DMaterialAnm() {}; + virtual void calc(J3DMaterial*) const; - const J3DTexMtxAnm& getTexMtxAnm(int i) const { return mTexMtxAnm[i]; } + const J3DTexMtxAnm& getTexMtxAnm(int i) const { return *mTexMtxAnm[i]; } private: - /* 0x04 */ J3DMatColorAnm mMatColorAnm[2]; - /* 0x14 */ J3DTexMtxAnm mTexMtxAnm[8]; - /* 0x54 */ J3DTexNoAnm mTexNoAnm[8]; - /* 0xB4 */ J3DTevColorAnm mTevColorAnm[4]; - /* 0xD4 */ J3DTevKColorAnm mTevKColorAnm[4]; + /* 0x04 */ J3DMatColorAnm * mMatColorAnm[2]; + /* 0x14 */ J3DTexMtxAnm * mTexMtxAnm[8]; + /* 0x54 */ J3DTexNoAnm * mTexNoAnm[8]; + /* 0xB4 */ J3DTevColorAnm * mTevColorAnm[4]; + /* 0xD4 */ J3DTevKColorAnm * mTevKColorAnm[4]; }; // Size: 0xF4 #endif /* J3DMATERIALANM_H */ diff --git a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h index 937866341..9acc44d81 100644 --- a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h @@ -8,10 +8,9 @@ enum J3DAnmLoaderDataBaseFlag { J3DLOADER_UNK_FLAG0 }; class J3DAnmBase; struct J3DAnmLoaderDataBase { - /* 80337B40 */ static void* load(void const*, J3DAnmLoaderDataBaseFlag); - /* 80338134 */ static void setResource(J3DAnmBase*, void const*); - - static void* load(void const* param_0) { return load(param_0, J3DLOADER_UNK_FLAG0); } + static void* load(void const*, J3DAnmLoaderDataBaseFlag); + static void* load(void const*); + static void setResource(J3DAnmBase*, void const*); }; #endif /* J3DANMLOADER_H */ diff --git a/include/JSystem/J3DGraphLoader/J3DModelLoader.h b/include/JSystem/J3DGraphLoader/J3DModelLoader.h index deff8ed97..987a74320 100644 --- a/include/JSystem/J3DGraphLoader/J3DModelLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DModelLoader.h @@ -3,9 +3,14 @@ #include "dolphin/types.h" +class J3DModelData; +class J3DMaterialTable; + class J3DModelLoaderDataBase { public: - /* 803346BC */ static void* load(void const*, u32); + static J3DModelData* load(void const*, u32); + static J3DModelData* loadBinaryDisplayList(void const*, u32); + static J3DMaterialTable* loadMaterialTable(void const*); }; #endif /* J3DMODELLOADER_H */ diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index aeb763ce9..2a9b091f2 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -6,6 +6,8 @@ #include "global.h" #include "m_Do/m_Do_ext.h" +class ResTIMG; + class dDlst_base_c { public: dDlst_base_c() {} @@ -289,6 +291,9 @@ public: /* 0x00250 */ dDlst_shadowControl_c mShadowControl; /* 0x16078 */ mDoExt_3DlineMatSortPacket m3DLineMatSortPacket[2]; /* 0x160A0 */ dDlst_peekZ_c mPeekZ; + + static ResTIMG * mToonImage; + static ResTIMG * mToonExImage; }; // Size: 0x16234 STATIC_ASSERT(sizeof(dDlst_list_c) == 0x16234); diff --git a/include/d/d_resorce.h b/include/d/d_resorce.h index 328393fdb..49a5e724b 100644 --- a/include/d/d_resorce.h +++ b/include/d/d_resorce.h @@ -1,6 +1,10 @@ #ifndef D_D_RESORCE_H #define D_D_RESORCE_H +#include "dolphin/types.h" +#include "global.h" +#include "JSystem/JKernel/JKRMemArchive.h" + class JKRArchive; class JKRHeap; class JKRSolidHeap; @@ -12,13 +16,12 @@ public: ~dRes_info_c(); int set(char const*, char const*, u8, JKRHeap*); int loadResource(); - void deleteArchiveRes(); int setRes(JKRArchive*, JKRHeap*); int setRes(); static void dump_long(dRes_info_c*, int); static void dump(dRes_info_c*, int); - void* getRes(u32 resIdx) { return *(mpRes + resIdx); } + void* getRes(u32 resIdx) { return *(mRes + resIdx); } int getCount() { return mCount; } char* getArchiveName() { return mArchiveName; } mDoDvdThd_mountArchive_c* getDMCommand() { return mpDMCommand; } @@ -34,8 +37,8 @@ private: /* 0x10 */ mDoDvdThd_mountArchive_c* mpDMCommand; /* 0x14 */ JKRArchive* mpArchive; /* 0x18 */ JKRHeap* mpParentHeap; - /* 0x1C */ JKRSolidHeap* mpDataHeap; - /* 0x20 */ void** mpRes; + /* 0x1C */ JKRSolidHeap* mDataHeap; + /* 0x20 */ void** mRes; }; // Size: 0x24 STATIC_ASSERT(sizeof(dRes_info_c) == 0x24); diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 1134616e4..f3f98dfb1 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -178,6 +178,17 @@ private: /* 0x4 */ J3DAnmTransform* mAnmTransform; }; // Size: 0x8 +class mDoExt_transAnmBas : public J3DAnmTransformKey { +public: + mDoExt_transAnmBas(void* bas) { mBas = bas; } + virtual ~mDoExt_transAnmBas(); + + void* getBas() { return mBas; } + +private: + /* 0x28 */ void* mBas; +}; + class mDoExt_MtxCalcOldFrame { public: /* 8000F848 */ void initOldFrameMorf(f32, u16, u16); @@ -327,9 +338,12 @@ int mDoExt_getSafeGameHeapSize(); int mDoExt_getSafeZeldaHeapSize(); int mDoExt_getSafeCommandHeapSize(); +s32 mDoExt_resIDToIndex(JKRArchive*, u16); + JKRSolidHeap * mDoExt_createSolidHeapFromGameToCurrent(u32 size, u32 align); +JKRSolidHeap * mDoExt_createSolidHeapToCurrent(u32, JKRHeap *, u32 align); void mDoExt_restoreCurrentHeap(); -void mDoExt_adjustSolidHeap(JKRSolidHeap * pHeap); +u32 mDoExt_adjustSolidHeap(JKRSolidHeap * pHeap); void mDoExt_destroySolidHeap(JKRSolidHeap * pHeap); extern JKRExpHeap* zeldaHeap; diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp index be3cd5f49..0c0e51596 100644 --- a/src/d/d_resorce.cpp +++ b/src/d/d_resorce.cpp @@ -3,8 +3,25 @@ // Translation Unit: d_resorce.cpp // -#include "d_resorce.h" +#include "d/d_resorce.h" +#include "d/d_bg_s.h" +#include "d/d_com_inf_game.h" #include "m_Do/m_Do_printf.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "JSystem/J3DGraphLoader/J3DAnmLoader.h" +#include "JSystem/J3DGraphLoader/J3DClusterLoader.h" +#include "JSystem/J3DGraphLoader/J3DModelLoader.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/JKernel/JKRArchive.h" +#include "JSystem/JKernel/JKRFileFinder.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "JSystem/JUtility/JUTTexture.h" +#include "MSL_C/stdio.h" +#include "MSL_C/string.h" +#include "dolphin/os/OSCache.h" /* 8006D804-8006D824 .text __ct__11dRes_info_cFv */ dRes_info_c::dRes_info_c() @@ -12,8 +29,8 @@ dRes_info_c::dRes_info_c() , mpDMCommand(NULL) , mpArchive(NULL) , mpParentHeap(NULL) - , mpDataHeap(NULL) - , mpRes(NULL) + , mDataHeap(NULL) + , mRes(NULL) { } @@ -23,70 +40,333 @@ dRes_info_c::~dRes_info_c() { delete mpDMCommand; mpDMCommand = NULL; } else if (mpArchive != NULL) { - deleteArchiveRes(); - if (mpDataHeap != NULL) { - mDoExt_destroySolidHeap(mpDataHeap); - mpDataHeap = NULL; - mpArchive->unmount(); + if (mDataHeap != NULL) { + mDoExt_destroySolidHeap(mDataHeap); + mDataHeap = NULL; } - mpRes = NULL; + if (mRes != NULL) + mRes = NULL; + + mpArchive->unmount(); mpArchive = NULL; } } /* 8006D8F4-8006D990 .text set__11dRes_info_cFPCcPCcUcP7JKRHeap */ -int dRes_info_c::set(char const* pArcName, char const* pArcPath, u8 param_2, JKRHeap* pHeap) { +int dRes_info_c::set(char const* pArcName, char const* pArcPath, u8 direction, JKRHeap* pHeap) { char path[40]; - if (*pArcPath != NULL) { - snprintf(path, 40, "%s%s.arc", pArcPath, pArcName); - mDMCommand = mDoDvdThd_mountArchive_c::create(path, param_2, pHeap); + snprintf(path, 40, "%s%s.arc", pArcPath, pArcName); + mpDMCommand = mDoDvdThd_mountArchive_c::create(path, direction, pHeap); - if (mDMCommand == NULL) { - return false; - } - } - strncpy(mArchiveName, pArcName, 10); + if (mpDMCommand == NULL) + return false; + + strncpy(mArchiveName, pArcName, 14); return true; } /* 8006D990-8006DCEC .text setToonTex__FP12J3DModelData */ static void setToonTex(J3DModelData* pModel) { - /* Nonmatching */ + J3DTexture * pTexture = pModel->getTexture(); + if (pTexture != NULL) { + JUTNameTab * pTextureName = pModel->getTextureName(); + if (pTextureName != NULL) { + for (u16 i = 0; i < pTexture->getNum(); i++) { + const char * pName = pTextureName->getName(i); + if (pName[0] == 'Z') { + if (pName[1] == 'A') + pTexture->setResTIMG(i, *dDlst_list_c::mToonImage); + else if (pName[1] == 'B') + pTexture->setResTIMG(i, *dDlst_list_c::mToonExImage); + } + } + + j3dSys.setTexture(pTexture); + + s32 isBDL = (pModel->getJointTree().getModelDataType() == 1); + + for (u16 i = 0; i < pModel->getMaterialNum() ; i++) { + J3DMaterial * pMaterial = pModel->getMaterialNodePointer(i); + J3DTevBlock * pTevBlock = pMaterial->getTevBlock(); + + if (pTevBlock != NULL) { + GXColorS10 * pTev3 = pTevBlock->getTevColor(3); + if (pTev3 != NULL) + pTev3->a = pTevBlock->getTevStageNum(); + + if (isBDL) { + J3DDisplayListObj* pDL = pMaterial->getSharedDisplayListObj(); + BOOL ret = OSDisableInterrupts(); + GDInitGDLObj(&J3DDisplayListObj::sGDLObj, pDL->getDisplayList(0), pDL->getDisplayListSize()); + GDSetCurrent(&J3DDisplayListObj::sGDLObj); + pTevBlock->patchTexNoAndTexCoordScale(); + OSRestoreInterrupts(ret); + GDSetCurrent(NULL); + } + } + } + } + } } /* 8006DCEC-8006DFD4 .text setToonTex__FP16J3DMaterialTable */ -static void setToonTex(J3DMaterialTable* pMaterial) { - /* Nonmatching */ +static void setToonTex(J3DMaterialTable* pMaterialTable) { + J3DTexture * pTexture = pMaterialTable->getTexture(); + if (pTexture != NULL) { + JUTNameTab * pTextureName = pMaterialTable->getTextureName(); + if (pTextureName != NULL) { + for (u16 i = 0; i < pTexture->getNum(); i++) { + const char * pName = pTextureName->getName(i); + if (pName[0] == 'Z') { + if (pName[1] == 'A') + pTexture->setResTIMG(i, *dDlst_list_c::mToonImage); + else if (pName[1] == 'B') + pTexture->setResTIMG(i, *dDlst_list_c::mToonExImage); + } + } + + for (u16 i = 0; i < pMaterialTable->getMaterialNum() ; i++) { + J3DMaterial * pMaterial = pMaterialTable->getMaterialNodePointer(i); + J3DTevBlock * pTevBlock = pMaterial->getTevBlock(); + + if (pTevBlock != NULL) { + GXColorS10 * pTev3 = pTevBlock->getTevColor(3); + if (pTev3 != NULL) + pTev3->a = pTevBlock->getTevStageNum(); + } + } + } + } } /* 8006DFD4-8006E7A4 .text loadResource__11dRes_info_cFv */ -void dRes_info_c::loadResource() { - /* Nonmatching */ -} +int dRes_info_c::loadResource() { + // nonmatching, missing mDoExt_transAnmBas anm case -/* 8006E7A4-8006E7EC .text __dt__13JKRFileFinderFv */ -JKRFileFinder::~JKRFileFinder() { - /* Nonmatching */ -} + JUT_ASSERT(0x254, mRes == 0); -/* 8006E7EC-8006E858 .text __dt__18J3DAnmTransformKeyFv */ -J3DAnmTransformKey::~J3DAnmTransformKey() { - /* Nonmatching */ -} + s32 fileNum = mpArchive->countFile(); + mRes = new void*[fileNum]; + if (mRes == NULL) { + OSReport_Error("<%s.arc> setRes: res pointer buffer nothing !!\n", this); + return -1; + } -/* 8006E858-8006E8B4 .text __dt__15J3DAnmTransformFv */ -J3DAnmTransform::~J3DAnmTransform() { - /* Nonmatching */ -} + static u32 l_readResType[] = { + 'BMD ', + 'BMDM', + 'BMDC', + 'BMDS', + 'BSMD', + 'BMT ', + 'BLS ', + 'BCK ', + 'BPK ', + 'BRK ', + 'BLK ', + 'BTP ', + 'BTK ', + 'BAS ', + 'BDL ', + 'BDLM', + 'BDLC', + 'BDLI', + 'DZB ', + 'DZR ', + 'DZS ', + 'TIM ', + 'MSG ', + 'TEX ', + 'STB ', + 'BCKS', + 'DAT ', + 'BVA ', + 'BMTM', + }; -/* 8006E8B4-8006E8FC .text __dt__10J3DAnmBaseFv */ -J3DAnmBase::~J3DAnmBase() { - /* Nonmatching */ + u32 i = 0; + while (fileNum-- > 0) + mRes[i++] = NULL; + + u32 *pResType = &l_readResType[0]; + for (i = 0; i < ARRAY_SIZE(l_readResType); i++, pResType++) { + JKRArcFinder * pArcFinder = mpArchive->getFirstResource(*pResType); + + for (; pArcFinder->isAvailable(); pArcFinder->findNextFile()) { + void * pRes = JKRArchive::getGlbResource(*pResType, pArcFinder->mEntryName, mpArchive); + if (pRes == NULL) { + OSReport_Error("<%s> res == NULL !!\n", pArcFinder->mEntryName); + continue; + } + + u32 resType = *pResType; + if (resType == 'BMD ') { + pRes = J3DModelLoaderDataBase::load(pRes, 0x51240020); + if (pRes == NULL) + return -1; + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BMDM') { + pRes = J3DModelLoaderDataBase::load(pRes, 0x51240020); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DModelData*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DModelData*)pRes)->getMaterialNodePointer(j); + pMaterial->change(); + + J3DMaterialAnm* pAnm = new J3DMaterialAnm(); + if (pAnm == NULL) + return -1; + pMaterial->setMaterialAnm(pAnm); + } + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BMDC') { + pRes = J3DModelLoaderDataBase::load(pRes, 0x51240020); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DModelData*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DModelData*)pRes)->getMaterialNodePointer(j); + pMaterial->change(); + } + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BMDS') { + pRes = J3DModelLoaderDataBase::load(pRes, 0x00220020); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DModelData*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DModelData*)pRes)->getMaterialNodePointer(j); + pMaterial->change(); + + J3DMaterialAnm* pAnm = new J3DMaterialAnm(); + if (pAnm == NULL) + return -1; + pMaterial->setMaterialAnm(pAnm); + } + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BSMD') { + pRes = J3DModelLoaderDataBase::load(pRes, 0x01020020); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DModelData*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DModelData*)pRes)->getMaterialNodePointer(j); + + J3DMaterialAnm* pAnm = new J3DMaterialAnm(); + if (pAnm == NULL) + return -1; + + pMaterial->setMaterialAnm(pAnm); + } + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BDL ') { + pRes = J3DModelLoaderDataBase::loadBinaryDisplayList(pRes, 0x00002020); + if (pRes == NULL) + return -1; + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BDLL') { + pRes = J3DModelLoaderDataBase::loadBinaryDisplayList(pRes, 0x00001020); + if (pRes == NULL) + return -1; + } else if (resType == 'BDLM') { + pRes = J3DModelLoaderDataBase::loadBinaryDisplayList(pRes, 0x00001020); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DModelData*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DModelData*)pRes)->getMaterialNodePointer(j); + + J3DMaterialAnm* pAnm = new J3DMaterialAnm(); + if (pAnm == NULL) + return -1; + + pMaterial->setMaterialAnm(pAnm); + } + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BDLI') { + pRes = J3DModelLoaderDataBase::loadBinaryDisplayList(pRes, 0x01002020); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DModelData*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DModelData*)pRes)->getMaterialNodePointer(j); + + J3DMaterialAnm* pAnm = new J3DMaterialAnm(); + if (pAnm == NULL) + return -1; + pMaterial->setMaterialAnm(pAnm); + } + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BDLC') { + pRes = J3DModelLoaderDataBase::loadBinaryDisplayList(pRes, 0x00002020); + if (pRes == NULL) + return -1; + + setToonTex(((J3DModelData*)pRes)); + } else if (resType == 'BLS ') { + pRes = J3DClusterLoaderDataBase::load(pRes); + if (pRes == NULL) + return -1; + } else if (resType == 'BCKS' || resType == 'BCK') { + // TODO + } else if (resType == 'BTP ' || resType == 'BTK ' || resType == 'BPK ' || resType == 'BRK ' || resType == 'BLK ' || resType == 'BVA ') { + pRes = J3DAnmLoaderDataBase::load(pRes); + if (pRes == NULL) + return -1; + } else if (resType == 'BMT ') { + pRes = J3DModelLoaderDataBase::loadMaterialTable(pRes); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DMaterialTable*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DMaterialTable*)pRes)->getMaterialNodePointer(j); + pMaterial->change(); + } + + setToonTex((J3DMaterialTable*)pRes); + } else if (resType == 'BMTM') { + pRes = J3DModelLoaderDataBase::loadMaterialTable(pRes); + if (pRes == NULL) + return -1; + + for (u16 j = 0; j < ((J3DMaterialTable*)pRes)->getMaterialNum(); j++) { + J3DMaterial* pMaterial = ((J3DMaterialTable*)pRes)->getMaterialNodePointer(j); + pMaterial->change(); + + J3DMaterialAnm* pAnm = new J3DMaterialAnm(); + if (pAnm == NULL) + return -1; + pMaterial->setMaterialAnm(pAnm); + } + + setToonTex((J3DMaterialTable*)pRes); + } else if (resType == 'DZB ') { + pRes = cBgS::ConvDzb(pRes); + } + + mRes[pArcFinder->mEntryFileIndex] = pRes; + } + + delete pArcFinder; + } + + return 0; } /* 8006E8FC-8006EBD0 .text setRes__11dRes_info_cFv */ int dRes_info_c::setRes() { + // nonmatching + if (mpArchive == NULL) { if (mpDMCommand == NULL) { return -1; @@ -106,34 +386,66 @@ int dRes_info_c::setRes() { return -1; } if (mpParentHeap != NULL) { - mpParentHeap->lock(); - mpDataHeap = mDoExt_createSolidHeapToCurrent(0, mpParentHeap, 0x20); + mDataHeap = mDoExt_createSolidHeapToCurrent(0, mpParentHeap, 0x20); + JUT_ASSERT(0x3f5, mDataHeap != 0); - int rt = loadResource(); + loadResource(); mDoExt_restoreCurrentHeap(); - mDoExt_adjustSolidHeap(mpDataHeap); - heap->unlock(); - - if (rt < 0) { - return -1; - } + mDoExt_adjustSolidHeap(mDataHeap); } else { - mpDataHeap = mDoExt_createSolidHeapFromGameToCurrent(0, 0); - if (mpDataHeap == NULL) { - OSReport_Error("<%s.arc> mDMCommandsetRes: can't alloc memory\n", mArchiveName); - return -1; + mDataHeap = mDoExt_createSolidHeapFromGameToCurrent(0, 0); + if (mDataHeap == NULL) { + OSReport_Error("<%s.arc> mDMCommandsetRes: can\'t alloc memory\n", this); + return 0xFFFFFFFF; } - int rt = loadResource(); - mDoExt_restoreCurrentHeap(); - mDoExt_adjustSolidHeap(mpDataHeap); - if (rt < 0) { - return -1; + loadResource(); + mDoExt_restoreCurrentHeap(); + + static volatile s32 mode = 1; + static JKRExpHeap::EAllocMode allocMode = JKRExpHeap::ALLOC_MODE_1; + mDoExt_getGameHeap()->setAllocationMode(allocMode); + mode = 2; + + if (mode == 0) { + u32 allocSize = (mDataHeap->getSize() - mpParentHeap->getFreeSize()) + 0x8c; + JKRSolidHeap * pHeap = mDoExt_createSolidHeapFromGameToCurrent(allocSize, 0); + if (pHeap != NULL) { + mDoExt_adjustSolidHeap(mDataHeap); + mRes = NULL; + mDoExt_destroySolidHeap(mDataHeap); + loadResource(); + mDoExt_restoreCurrentHeap(); + mDoExt_adjustSolidHeap(pHeap); + mDataHeap = pHeap; + } else { + mDoExt_adjustSolidHeap(mDataHeap); + } + } else if (mode == 1) { + JKRSolidHeap * pHeap = mDoExt_createSolidHeapFromGameToCurrent(mDoExt_adjustSolidHeap(mDataHeap) + 0x10, 0); + if (pHeap != NULL) { + if (pHeap < mDataHeap) { + mRes = NULL; + mDoExt_destroySolidHeap(mDataHeap); + loadResource(); + mDoExt_adjustSolidHeap(pHeap); + mDataHeap = pHeap; + } else { + mDoExt_destroySolidHeap(pHeap); + } + + mDoExt_restoreCurrentHeap(); + } + } else { + mDoExt_adjustSolidHeap(mDataHeap); } + + JKRExpHeap * pGameHeap = mDoExt_getGameHeap(); + pGameHeap->mAllocMode = 0; } - u32 heapSize = mpDataHeap->getHeapSize(); - void* heapStartAddr = mpDataHeap->getStartAddr(); + u32 heapSize = mDataHeap->getHeapSize(); + void* heapStartAddr = mDataHeap->getStartAddr(); DCStoreRangeNoSync(heapStartAddr, heapSize); } @@ -152,42 +464,118 @@ static SArcHeader* getArcHeader(JKRArchive* pArchive) { return NULL; } +static const char * dump_str = "%5.1f %5x %5.1f %5x %3d %s\n"; + /* 8006EBF8-8006ECF4 .text dump_long__11dRes_info_cFP11dRes_info_ci */ -void dRes_info_c::dump_long(dRes_info_c*, int) { - /* Nonmatching */ +void dRes_info_c::dump_long(dRes_info_c* pRes, int num) { + // regalloc + void* header; + int size; + int heapSize; + JKRArchive * archive; + mDoDvdThd_command_c * command; + + JUTReportConsole_f("dRes_info_c::dump %08x %d\n", pRes, num); + JUTReportConsole_f("No Command Archive ArcHeader(size) SolidHeap(size) Resource Count ArchiveName\n"); + + for (s32 i = 0; i < num; i++) { + s32 refCount = pRes->getCount(); + if (refCount != 0) { + heapSize = JKRHeap::getSize(pRes->mDataHeap, NULL); + size = JKRHeap::getSize(getArcHeader(pRes->getArchive()), NULL); + archive = pRes->getArchive(); + command = pRes->getDMCommand(); + header = getArcHeader(archive); + + JUTReportConsole_f("%2d %08x %08x %08x(%5x) %08x(%5x) %08x %3d %s\n", + i, command, archive, header, size, pRes->mDataHeap, + heapSize, pRes->mRes, refCount, pRes->getArchiveName()); + } + pRes++; + } } /* 8006ECF4-8006EE6C .text dump__11dRes_info_cFP11dRes_info_ci */ -void dRes_info_c::dump(dRes_info_c*, int) { - /* Nonmatching */ +void dRes_info_c::dump(dRes_info_c* pRes, int num) { + // sda + int totalArcHeaderSize; + int totalHeapSize; + int arcHeaderSize; + int heapSize; + char* archiveName; + JUTReportConsole_f("dRes_info_c::dump %08x %d\n", pRes, num); + JUTReportConsole_f("No ArchiveSize(KB) SolidHeapSize(KB) Cnt ArchiveName\n"); + totalArcHeaderSize = 0; + totalHeapSize = 0; + for (int i = 0; i < num; i++) { + if (pRes->getCount()) { + arcHeaderSize = JKRGetMemBlockSize(NULL, getArcHeader(pRes->getArchive())); + heapSize = JKRGetMemBlockSize(NULL, pRes->mDataHeap); + archiveName = pRes->getArchiveName(); + JUTReportConsole_f("%2d %6.1f %6x %6.1f %6x %3d %s\n", i, arcHeaderSize / 1024.0f, + arcHeaderSize, heapSize / 1024.0f, heapSize, pRes->getCount(), + archiveName); + totalArcHeaderSize += arcHeaderSize; + totalHeapSize += heapSize; + } + pRes++; + } + JUTReportConsole_f( + "----------------------------------------------\n %6.1f %6x %6.1f %6x Total\n\n", + totalArcHeaderSize / 1024.0f, totalArcHeaderSize, totalHeapSize / 1024.0f, totalHeapSize); } /* 8006EE6C-8006EF34 .text __dt__14dRes_control_cFv */ dRes_control_c::~dRes_control_c() { - /* Nonmatching */ + for (s32 i = 0; i < (s32)ARRAY_SIZE(mObjectInfo); i++) + mObjectInfo[i].~dRes_info_c(); + for (s32 i = 0; i < (s32)ARRAY_SIZE(mStageInfo); i++) + mStageInfo[i].~dRes_info_c(); } /* 8006EF34-8006F01C .text setRes__14dRes_control_cFPCcP11dRes_info_ciPCcUcP7JKRHeap */ -void dRes_control_c::setRes(const char*, dRes_info_c*, int, const char*, unsigned char, JKRHeap*) { - /* Nonmatching */ +int dRes_control_c::setRes(const char* pArcName, dRes_info_c* pInfoArr, int infoNum, const char* pArcPath, u8 direction, JKRHeap* pHeap) { + // small regalloc issue + + dRes_info_c * pInfo = getResInfo(pArcName, pInfoArr, infoNum); + + if (pInfo == NULL) { + pInfo = newResInfo(pInfoArr, infoNum); + if (pInfo == NULL) { + OSReport_Error("<%s.arc> dRes_control_c::setRes: 空きリソース情報ポインタがありません\n", pInfo); + pInfo->~dRes_info_c(); + return FALSE; + } + + if (!pInfo->set(pArcName, pArcPath, direction, pHeap)) { + OSReport_Error("<%s.arc> dRes_control_c::setRes: res info set error !!\n", pInfo); + pInfo->~dRes_info_c(); + return FALSE; + } + } + + pInfo->incCount(); + return TRUE; } /* 8006F01C-8006F074 .text syncRes__14dRes_control_cFPCcP11dRes_info_ci */ -int dRes_control_c::syncRes(char const* arcName, dRes_info_c* pInfo, int infoSize) { - dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize); +int dRes_control_c::syncRes(char const* pArcName, dRes_info_c* pInfo, int infoNum) { + dRes_info_c* resInfo = getResInfo(pArcName, pInfo, infoNum); if (resInfo == NULL) { - return -1; + OSReport_Error("<%s.arc> syncRes: リソース未登録!!\n", pArcName); + return 1; } else { return resInfo->setRes(); } } /* 8006F074-8006F0E8 .text deleteRes__14dRes_control_cFPCcP11dRes_info_ci */ -int dRes_control_c::deleteRes(char const* arcName, dRes_info_c* pInfo, int infoSize) { - dRes_info_c* resInfo = getResInfo(arcName, pInfo, infoSize); +int dRes_control_c::deleteRes(char const* pArcName, dRes_info_c* pInfo, int infoNum) { + dRes_info_c* resInfo = getResInfo(pArcName, pInfo, infoNum); if (resInfo == NULL) { + OSReport_Error("<%s.arc> deleteRes: res nothing !!\n(未登録のリソースを削除してるのを発見しました!修正してください。)\n", pArcName); return 0; } else { if (resInfo->decCount() == 0) { @@ -198,21 +586,20 @@ int dRes_control_c::deleteRes(char const* arcName, dRes_info_c* pInfo, int infoS } /* 8006F0E8-8006F164 .text getResInfo__14dRes_control_cFPCcP11dRes_info_ci */ -dRes_info_c* dRes_control_c::getResInfo(char const* pArcName, dRes_info_c* pResInfo, int infoSize) { - for (int i = 0; i < infoSize; i++) { - if (pResInfo->getCount() != 0) { - if (!stricmp(pArcName, pResInfo->getArchiveName())) { +dRes_info_c* dRes_control_c::getResInfo(char const* pArcName, dRes_info_c* pResInfo, int infoNum) { + for (s32 i = 0; i < infoNum; i++) { + if (pResInfo->getCount() != 0) + if (!strcmp(pArcName, pResInfo->getArchiveName())) return pResInfo; - } - } pResInfo++; } + return NULL; } /* 8006F164-8006F18C .text newResInfo__14dRes_control_cFP11dRes_info_ci */ -dRes_info_c* dRes_control_c::newResInfo(dRes_info_c* pResInfo, int infoSize) { - for (int i = 0; i < infoSize; i++) { +dRes_info_c* dRes_control_c::newResInfo(dRes_info_c* pResInfo, int infoNum) { + for (int i = 0; i < infoNum; i++) { if (pResInfo->getCount() == 0) { return pResInfo; } @@ -222,31 +609,32 @@ dRes_info_c* dRes_control_c::newResInfo(dRes_info_c* pResInfo, int infoSize) { } /* 8006F18C-8006F208 .text getResInfoLoaded__14dRes_control_cFPCcP11dRes_info_ci */ -dRes_info_c* dRes_control_c::getResInfoLoaded(char const* arcName, dRes_info_c* pResInfo, - int infoSize) { - dRes_info_c* resInfo = getResInfo(arcName, pResInfo, infoSize); +dRes_info_c* dRes_control_c::getResInfoLoaded(char const* pArcName, dRes_info_c* pResInfo, + int infoNum) { + dRes_info_c* resInfo = getResInfo(pArcName, pResInfo, infoNum); if (resInfo == NULL) { + OSReport_Error("<%s.arc> getRes: res nothing !!\n", pArcName); resInfo = NULL; } else if (resInfo->getArchive() == NULL) { - OSReport_Warning("<%s.arc> getRes: res during reading !!\n", arcName); + OSReport_Error("<%s.arc> getRes: res during reading !!\n", pArcName); resInfo = NULL; } return resInfo; } /* 8006F208-8006F298 .text getRes__14dRes_control_cFPCclP11dRes_info_ci */ -void* dRes_control_c::getRes(char const* arcName, s32 resIdx, dRes_info_c* pInfo, int infoSize) { - dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize); +void* dRes_control_c::getRes(char const* pArcName, s32 resIdx, dRes_info_c* pInfo, int infoNum) { + dRes_info_c* resInfo = getResInfoLoaded(pArcName, pInfo, infoNum); - if (resInfo == NULL) { + if (resInfo == NULL) return resInfo; - } + JKRArchive* archive = resInfo->getArchive(); u32 fileCount = archive->countFile(); if (resIdx >= (int)fileCount) { - OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", arcName, resIdx, + OSReport_Error("<%s.arc> getRes: res index over !! index=%d count=%d\n", pArcName, resIdx, fileCount); return NULL; } @@ -254,33 +642,35 @@ void* dRes_control_c::getRes(char const* arcName, s32 resIdx, dRes_info_c* pInfo } /* 8006F298-8006F34C .text getRes__14dRes_control_cFPCcPCcP11dRes_info_ci */ -void* dRes_control_c::getRes(char const* arcName, char const* resName, dRes_info_c* pInfo, int infoSize) { - dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize); +void* dRes_control_c::getRes(char const* pArcName, char const* resName, dRes_info_c* pInfo, int infoNum) { + dRes_info_c* resInfo = getResInfoLoaded(pArcName, pInfo, infoNum); - if (resInfo == NULL) { + if (resInfo == NULL) return resInfo; + + s32 fileNum = resInfo->getArchive()->countFile(); + for (s32 i = 0; i < fileNum; i++) { + if (resInfo->getRes(i) != NULL) { + JKRArchive::SDirEntry dirEntry; + resInfo->getArchive()->getDirEntry(&dirEntry, i); + if (strcmp(resName, dirEntry.name) == 0) + return resInfo->getRes(i); + } } - JKRArchive* archive = resInfo->getArchive(); - JKRArchive::SDIFileEntry* entry = archive->findNameResource(resName); - - if (entry != NULL) { - return resInfo->getRes(entry - archive->mFiles); - } else { - return NULL; - } + return NULL; } /* 8006F34C-8006F3BC .text getIDRes__14dRes_control_cFPCcUsP11dRes_info_ci */ -void* dRes_control_c::getIDRes(char const* arcName, u16 param_1, dRes_info_c* pInfo, int infoSize) { - dRes_info_c* resInfo = getResInfoLoaded(arcName, pInfo, infoSize); +void* dRes_control_c::getIDRes(char const* pArcName, u16 param_1, dRes_info_c* pInfo, int infoNum) { + dRes_info_c* resInfo = getResInfoLoaded(pArcName, pInfo, infoNum); if (resInfo == NULL) { return resInfo; } JKRArchive* archive = resInfo->getArchive(); - int index = mDoExt_resIDToIndex(archive, param_1); + s32 index = mDoExt_resIDToIndex(archive, param_1); if (index < 0) { return 0; @@ -290,8 +680,8 @@ void* dRes_control_c::getIDRes(char const* arcName, u16 param_1, dRes_info_c* pI } /* 8006F3BC-8006F430 .text syncAllRes__14dRes_control_cFP11dRes_info_ci */ -int dRes_control_c::syncAllRes(dRes_info_c* pInfo, int infoSize) { - for (int i = 0; i < infoSize; i++) { +int dRes_control_c::syncAllRes(dRes_info_c* pInfo, int infoNum) { + for (int i = 0; i < infoNum; i++) { if (pInfo->getDMCommand() != NULL && pInfo->setRes() > 0) { return 1; } @@ -301,10 +691,19 @@ int dRes_control_c::syncAllRes(dRes_info_c* pInfo, int infoSize) { } /* 8006F430-8006F500 .text setStageRes__14dRes_control_cFPCcP7JKRHeap */ -int dRes_control_c::setStageRes(char const* arcName, JKRHeap* pHeap) { +int dRes_control_c::setStageRes(char const* pArcName, JKRHeap* pHeap) { + // very strange ordering of loads for the snprintf call + + bool special = false; + + if (strcmp(dComIfGp_getStartStageName(), "ma2room") == 0 && dComIfGs_isEventBit(0x1820)) + special = true; + + const char *fmt = "/res/Stage/%s/"; + char path[20]; - snprintf(path, 20, "/res/Stage/%s/", dComIfGp_getStartStageName()); - return setRes(arcName, &mStageInfo[0], 0x40, path, 1, pHeap); + snprintf(path, sizeof(path), fmt, special ? "ma3room" : dComIfGp_getStartStageName()); + return setRes(pArcName, &mStageInfo[0], ARRAY_SIZE(mStageInfo), path, 1, pHeap); } /* 8006F500-8006F580 .text dump__14dRes_control_cFv */ @@ -317,13 +716,3 @@ void dRes_control_c::dump() { dRes_info_c::dump(&mStageInfo[0], ARRAY_SIZE(mStageInfo)); dRes_info_c::dump_long(&mStageInfo[0], ARRAY_SIZE(mStageInfo)); } - -/* 8006F580-8006F5FC .text __dt__18mDoExt_transAnmBasFv */ -mDoExt_transAnmBas::~mDoExt_transAnmBas() { - /* Nonmatching */ -} - -/* 8006F5FC-8006F62C .text getTransform__18J3DAnmTransformKeyCFUsP16J3DTransformInfo */ -void J3DAnmTransformKey::getTransform(unsigned short, J3DTransformInfo*) const { - /* Nonmatching */ -} diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index df949da9a..66b2d8eeb 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -764,7 +764,7 @@ void mDoExt_createSolidHeapFromGameToCurrent(unsigned long, unsigned long) { } /* 80011D0C-80011D48 .text mDoExt_adjustSolidHeap__FP12JKRSolidHeap */ -void mDoExt_adjustSolidHeap(JKRSolidHeap*) { +u32 mDoExt_adjustSolidHeap(JKRSolidHeap*) { /* Nonmatching */ } From 3416c1966e8bff50a40564bbc94c1b51f6cc8d18 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 13:51:55 -0700 Subject: [PATCH 55/89] f_pc_manager drawDvdCondition 90% --- include/JSystem/JFramework/JFWDisplay.h | 42 ++++++++++++------------- include/d/d_com_inf_game.h | 17 +++++++--- src/f_pc/f_pc_manager.cpp | 40 +++++++++++++++++++++-- 3 files changed, 71 insertions(+), 28 deletions(-) diff --git a/include/JSystem/JFramework/JFWDisplay.h b/include/JSystem/JFramework/JFWDisplay.h index 24576aa43..f7257ee98 100644 --- a/include/JSystem/JFramework/JFWDisplay.h +++ b/include/JSystem/JFramework/JFWDisplay.h @@ -40,28 +40,28 @@ public: /* 0x1 */ UNK_METHOD_1 = 1 }; - /* 80272040 */ void ctor_subroutine(const _GXRenderModeObj*, bool enableAlpha); - /* 802720F8 */ JFWDisplay(const _GXRenderModeObj*, JKRHeap*, JUTXfb::EXfbNumber, bool); - /* 802721DC */ static JFWDisplay* createManager(JKRHeap*, JUTXfb::EXfbNumber, bool); - /* 802722B8 */ void prepareCopyDisp(); - /* 802723AC */ void drawendXfb_single(); - /* 802723F4 */ void exchangeXfb_double(); - /* 802724FC */ void exchangeXfb_triple(); - /* 80272574 */ void copyXfb_triple(); - /* 802725F8 */ void preGX(); - /* 8027268C */ void endGX(); - /* 80272C60 */ void waitBlanking(int); - /* 80272E10 */ void threadSleep(s64); - /* 80272EB8 */ void clearEfb_init(); - /* 80272F9C */ void clearEfb(int param_0, int param_1, int param_2, int param_3, GXColor color); - /* 80272F2C */ void clearEfb(); - /* 80272F58 */ void clearEfb(_GXColor color); - /* 8027331C */ void calcCombinationRatio(); + void ctor_subroutine(const _GXRenderModeObj*, bool enableAlpha); + JFWDisplay(const _GXRenderModeObj*, JKRHeap*, JUTXfb::EXfbNumber, bool); + static JFWDisplay* createManager(JKRHeap*, JUTXfb::EXfbNumber, bool); + void prepareCopyDisp(); + void drawendXfb_single(); + void exchangeXfb_double(); + void exchangeXfb_triple(); + void copyXfb_triple(); + void preGX(); + void endGX(); + void waitBlanking(int); + void threadSleep(s64); + void clearEfb_init(); + void clearEfb(int param_0, int param_1, int param_2, int param_3, GXColor color); + void clearEfb(); + void clearEfb(_GXColor color); + void calcCombinationRatio(); - /* 80272798 */ virtual void beginRender(); - /* 80272A04 */ virtual void endRender(); - /* 80272AB0 */ virtual void endFrame(); - /* 80272160 */ virtual ~JFWDisplay(); + virtual void beginRender(); + virtual void endRender(); + virtual void endFrame(); + virtual ~JFWDisplay(); static JFWDisplay* getManager() { return sManager; } diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index e0b52a878..56f5dc5bb 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -202,6 +202,11 @@ public: void clearPlayerStatus(int param_0, int i, u32 flag) { mPlayerStatus[param_0][i] &= ~flag; } bool checkPlayerStatus(int param_0, int i, u32 flag) { return flag & mPlayerStatus[param_0][i]; } + void setCurrentGrafPort(J2DOrthoGraph* i_graf) { mCurrentGrafPort = i_graf; } + void setCurrentWindow(dDlst_window_c* i_window) { mCurrentWindow = i_window; } + void setCurrentView(view_class* i_view) { mCurrentView = i_view; } + void setCurrentViewport(view_port_class* i_viewport) { mCurrentViewport = i_viewport; } + /* 0x0000 */ dBgS mBgS; /* 0x1404 */ dCcS mCcS; /* 0x3DF8 */ dADM mADM; @@ -357,10 +362,10 @@ public: /* 0x4A28 */ u32 mPlayerStatus[2][2]; /* 0x4A38 */ u8 field_0x4A38[0x4A40 - 0x4A38]; /* 0x4A40 */ __d_timer_info_c mTimerInfo; - /* 0x4A54 */ dDlst_window_c* field_0x4a54; - /* 0x4A58 */ camera_class* field_0x4a58; - /* 0x4A5C */ dDlst_window_c* field_0x4a5c; - /* 0x4A60 */ J2DOrthoGraph* mp2DOrthoGraph; + /* 0x4A54 */ dDlst_window_c* mCurrentWindow; + /* 0x4A58 */ view_class* mCurrentView; + /* 0x4A5C */ view_port_class* mCurrentViewport; + /* 0x4A60 */ J2DOrthoGraph* mCurrentGrafPort; /* 0x4A64 */ u8 mShipId; /* 0x4A65 */ u8 mShipRoomId; /* 0x4A66 */ u8 mIkadaShipBeforeRoomId; @@ -1085,6 +1090,10 @@ inline bool dComIfGp_checkPlayerStatus1(int param_0, u32 flag) { return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 1, flag); } +inline void dComIfGp_setCurrentGrafPort(J2DOrthoGraph* i_graf) { + g_dComIfG_gameInfo.play.setCurrentGrafPort(i_graf); +} + /** * === EVENT ===*/ diff --git a/src/f_pc/f_pc_manager.cpp b/src/f_pc/f_pc_manager.cpp index eecdf2387..876ac7110 100644 --- a/src/f_pc/f_pc_manager.cpp +++ b/src/f_pc/f_pc_manager.cpp @@ -12,11 +12,16 @@ #include "f_pc/f_pc_line.h" #include "f_pc/f_pc_pause.h" #include "f_pc/f_pc_priority.h" -#include "dolphin/dvd/DVD.h" +#include "d/d_com_inf_game.h" +#include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_Reset.h" #include "SSystem/SComponent/c_lib.h" #include "SSystem/SComponent/c_API_graphic.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/JUtility/JUTAssert.h" +#include "dolphin/dvd/DVD.h" +#include "dolphin/gx/GX.h" /* 8003E318-8003E338 .text fpcM_Draw__FPv */ void fpcM_Draw(void* i_proc) { @@ -44,13 +49,42 @@ BOOL fpcM_IsCreating(unsigned int pID) { } /* 8003E3D0-8003E9F0 .text messageSet__FUl */ -void messageSet(unsigned long) { +void messageSet(unsigned long status) { /* Nonmatching */ } /* 8003E9F0-8003EBD4 .text drawDvdCondition__Fl */ void drawDvdCondition(long status) { - /* Nonmatching */ + JFWDisplay::getManager()->setFader(NULL); + GXColor backColor = mDoGph_gInf_c::getBackColor(); + JFWDisplay::getManager()->setClearColor(backColor); + JFWDisplay::getManager()->beginRender(); + GXSetAlphaUpdate(GX_FALSE); + j3dSys.drawInit(); + + J2DOrthoGraph draw2D(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0); + draw2D.setOrtho(-9.0f, -21.0f, 650.0f, 503.0f, -1.0f, 1.0f); + draw2D.setPort(); + dComIfGp_setCurrentGrafPort(&draw2D); + + if (status == 4) { + messageSet(2); + } else if (status == 5) { + messageSet(1); + } else if (status == 6) { + messageSet(3); + } else if (status == 12) { + messageSet(4); + } else if (status == 1) { + messageSet(0); + } else if (status == -1) { + messageSet(5); + // JAInter::StreamLib::stop(); + } else { + JUT_WARN(0x1e1, "Dvd Error !! <%d>\n", status); + } + + JFWDisplay::getManager()->endRender(); } /* 8003EBD4-8003EC84 .text checkDvdCondition__Fv */ From f04f4f219f673ebf36aa9505be13cbfffe9edc47 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 14:13:59 -0700 Subject: [PATCH 56/89] minor cleanup --- include/JSystem/JUtility/JUTGamePad.h | 13 ++----------- src/c/c_dylink.cpp | 6 +++--- src/m_Do/m_Do_controller_pad.cpp | 1 - src/m_Do/m_Do_main.cpp | 15 +++------------ 4 files changed, 8 insertions(+), 27 deletions(-) diff --git a/include/JSystem/JUtility/JUTGamePad.h b/include/JSystem/JUtility/JUTGamePad.h index dc90bf5cb..e25b7affb 100644 --- a/include/JSystem/JUtility/JUTGamePad.h +++ b/include/JSystem/JUtility/JUTGamePad.h @@ -81,27 +81,19 @@ public: } u32 getButton() const { return mButton.mButton; } - u32 getTrigger() const { return mButton.mTrigger; } f32 getMainStickX() const { return mMainStick.mPosX; } - f32 getMainStickY() const { return mMainStick.mPosY; } - f32 getMainStickValue() const { return mMainStick.mValue; } - s16 getMainStickAngle() const { return mMainStick.mAngle; } f32 getSubStickX() const { return mSubStick.mPosX; } - f32 getSubStickY() const { return mSubStick.mPosY; } - f32 getSubStickValue() const { return mSubStick.mValue; } - s16 getSubStickAngle() const { return mSubStick.mAngle; } u8 getAnalogA() const { return mButton.mAnalogA; } - u8 getAnalogB() const { return mButton.mAnalogB; } u8 getAnalogL() const { return mButton.mAnalogL; } @@ -111,14 +103,13 @@ public: f32 getAnalogRf() const { return mButton.mAnalogRf; } s8 getErrorStatus() const { return mErrorStatus; } - s16 getPortNum() const { return mPortNum; } JUTGamePadRecordBase* getPadReplay() const { return mPadReplay; } - JUTGamePadRecordBase* getPadRecord() const { return mPadRecord; } - u32 testTrigger(u32 button) const { return mButton.mTrigger & button; } + u32 testButton(u32 button) const { return getButton() & button; } + u32 testTrigger(u32 button) const { return getTrigger() & button; } bool isPushing3ButtonReset() const { bool isPushingReset = false; diff --git a/src/c/c_dylink.cpp b/src/c/c_dylink.cpp index 8e31a1451..41754cc51 100644 --- a/src/c/c_dylink.cpp +++ b/src/c/c_dylink.cpp @@ -72,11 +72,11 @@ const DynamicNameTableEntry DynamicNameTable[] = { {PROC_Obj_Lpalm, "d_a_obj_lpalm"}, {PROC_Obj_Mtest, "d_a_obj_mtest"}, {PROC_Obj_Mkie, "d_a_obj_mkie"}, - {PROC_Obj_Mkie, "d_a_obj_mkiek"}, + {PROC_Obj_Mkiek, "d_a_obj_mkiek"}, {PROC_Obj_MknjD, "d_a_obj_mknjd"}, {PROC_Obj_Msdan, "d_a_obj_msdan"}, - {PROC_Obj_Msdan, "d_a_obj_msdan_sub"}, - {PROC_Obj_Msdan, "d_a_obj_msdan2"}, + {PROC_Obj_MsdanSub, "d_a_obj_msdan_sub"}, + {PROC_Obj_Msdan2, "d_a_obj_msdan2"}, {PROC_Obj_MsdanSub2, "d_a_obj_msdan_sub2"}, {PROC_Obj_Nest, "d_a_obj_nest"}, {PROC_Obj_Ojtree, "d_a_obj_ojtree"}, diff --git a/src/m_Do/m_Do_controller_pad.cpp b/src/m_Do/m_Do_controller_pad.cpp index d90c8a9ad..4ae299469 100644 --- a/src/m_Do/m_Do_controller_pad.cpp +++ b/src/m_Do/m_Do_controller_pad.cpp @@ -31,7 +31,6 @@ inline void mDoCPd_TRIGGER_CONV(u8 analog, f32& param_1) { /* 80007598-800078C0 .text mDoCPd_Convert__FP27interface_of_controller_padP10JUTGamePad */ // NONMATCHING static s32 mDoCPd_Convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad) { - // pInterface->mButtonFlags = pPad->getButton(); pInterface->mMainStickPosX = pPad->getMainStickX(); pInterface->mMainStickPosY = pPad->getMainStickY(); pInterface->mMainStickValue = pPad->getMainStickValue(); diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 304386ae8..090447896 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -93,11 +93,8 @@ void CheckHeap(JUTGamePad* i_pad) { bool comboCheck = false; // if L + R + Z is pressed - if ((i_pad->getButton() & ~CButton::Z) == (CButton::L + CButton::R) && - i_pad->getTrigger() & CButton::Z) - { + if ((i_pad->testButton(~CButton::Z)) == (CButton::L | CButton::R) && i_pad->testTrigger(CButton::Z)) comboCheck = true; - } int saveRel = comboCheck; for (int i = 0; i < HeapCheckTableNum; i++) { @@ -377,18 +374,12 @@ void debug() { CheckHeap(g_mDoCPd_gamePad[2]); } - if ((g_mDoCPd_gamePad[2]->getButton() & ~CButton::Z) == CButton::R && - g_mDoCPd_gamePad[2]->testTrigger(CButton::Z)) - { + if (g_mDoCPd_gamePad[2]->testButton(~CButton::Z) == CButton::R && g_mDoCPd_gamePad[2]->testTrigger(CButton::Z)) mDisplayHeapSize ^= 1; - } if (mDisplayHeapSize) { - if ((g_mDoCPd_gamePad[2]->getButton() & ~CButton::Z) == CButton::L && - g_mDoCPd_gamePad[2]->testTrigger(CButton::Z)) - { + if (g_mDoCPd_gamePad[2]->testButton(~CButton::Z) == CButton::L && g_mDoCPd_gamePad[2]->testTrigger(CButton::Z)) mHeapBriefType < 5 ? mHeapBriefType++ : mHeapBriefType = 1; - } debugDisplay(); } From 5e43515ca760d09f4b5e605127fbccf5766aea1e Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 15:52:17 -0700 Subject: [PATCH 57/89] J3DMatBlock start --- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 142 +- .../J3DGraphAnimator/J3DMaterialAttach.h | 33 +- include/JSystem/J3DGraphBase/J3DMatBlock.h | 174 +-- include/JSystem/J3DGraphBase/J3DMaterial.h | 37 +- include/JSystem/J3DGraphBase/J3DStruct.h | 8 +- include/JSystem/J3DGraphBase/J3DTevs.h | 26 +- include/JSystem/J3DGraphBase/J3DTexture.h | 28 +- src/JSystem/J3DGraphAnimator/J3DAnimation.cpp | 20 +- .../J3DGraphAnimator/J3DMaterialAttach.cpp | 8 +- src/JSystem/J3DGraphBase/J3DMatBlock.cpp | 1192 ++++++++--------- src/JSystem/J3DGraphBase/J3DMaterial.cpp | 100 +- src/JSystem/J3DGraphBase/J3DPacket.cpp | 24 +- src/JSystem/J3DGraphLoader/J3DModelLoader.cpp | 6 +- 13 files changed, 892 insertions(+), 906 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 00bd2b865..d5d600a4c 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -303,10 +303,10 @@ private: class J3DAnmTransform : public J3DAnmBase { public: - /* 80328E40 */ J3DAnmTransform(s16, f32*, s16*, f32*); + J3DAnmTransform(s16, f32*, s16*, f32*); - /* 8003B93C */ virtual ~J3DAnmTransform(); - /* 8003C77C */ virtual s32 getKind() const; + virtual ~J3DAnmTransform(); + virtual s32 getKind() const; virtual void getTransform(u16, J3DTransformInfo*) const = 0; private: @@ -326,11 +326,11 @@ public: field_0x24 = 0; } - /* 80329A34 */ void calcTransform(f32, u16, J3DTransformInfo*) const; + void calcTransform(f32, u16, J3DTransformInfo*) const; - /* 8003B8D0 */ virtual ~J3DAnmTransformKey(); - /* 8003C800 */ virtual s32 getKind() const; - /* 8003C808 */ virtual void getTransform(u16, J3DTransformInfo*) const; + virtual ~J3DAnmTransformKey(); + virtual s32 getKind() const; + virtual void getTransform(u16, J3DTransformInfo*) const; private: /* 0x20 */ int field_0x20; @@ -339,9 +339,9 @@ private: class J3DAnmTransformFull : public J3DAnmTransform { public: - /* 8032C2AC */ virtual ~J3DAnmTransformFull(); - /* 8032C318 */ virtual s32 getKind() const; - /* 80328E90 */ virtual void getTransform(u16, J3DTransformInfo*) const; + virtual ~J3DAnmTransformFull(); + virtual s32 getKind() const; + virtual void getTransform(u16, J3DTransformInfo*) const; private: /* 0x20 */ int field_0x20; @@ -349,9 +349,9 @@ private: class J3DAnmTransformFullWithLerp : public J3DAnmTransformFull { public: - /* 8032C228 */ virtual ~J3DAnmTransformFullWithLerp(); - /* 8032C2A4 */ virtual s32 getKind() const; - /* 803291F0 */ virtual void getTransform(u16, J3DTransformInfo*) const; + virtual ~J3DAnmTransformFullWithLerp(); + virtual s32 getKind() const; + virtual void getTransform(u16, J3DTransformInfo*) const; }; // Size: 0x24 struct J3DTextureSRTInfo; @@ -360,13 +360,13 @@ class J3DMaterialTable; class J3DAnmTextureSRTKey : public J3DAnmBase { public: - /* 80329E5C */ J3DAnmTextureSRTKey(); - /* 80329F14 */ void calcTransform(f32, u16, J3DTextureSRTInfo*) const; - /* 8032B0C0 */ void searchUpdateMaterialID(J3DMaterialTable*); - /* 8032B1D4 */ void searchUpdateMaterialID(J3DModelData*); + J3DAnmTextureSRTKey(); + void calcTransform(f32, u16, J3DTextureSRTInfo*) const; + void searchUpdateMaterialID(J3DMaterialTable*); + void searchUpdateMaterialID(J3DModelData*); - /* 8032C198 */ virtual ~J3DAnmTextureSRTKey(); - /* 8032C220 */ virtual s32 getKind() const; + virtual ~J3DAnmTextureSRTKey(); + virtual s32 getKind() const; void getTransform(u16 param_0, J3DTextureSRTInfo* pSRTInfo) const { calcTransform(getFrame(), param_0, pSRTInfo); @@ -404,15 +404,32 @@ private: /* 0x78 */ u32 mTexMtxCalcType; }; // Size: 0x7C +class J3DAnmVisibilityFull : public J3DAnmBase { +public: + J3DAnmVisibilityFull(); + bool getVisibility(u16, u8*) const; + + virtual ~J3DAnmVisibilityFull(); + virtual s32 getKind() const; + +private: + /* 0x0C */ void* field_0xc; + /* 0x10 */ void* mAnmTable; + /* 0x14 */ u16 field_0x14; + /* 0x16 */ u16 mUpdateMaterialNum; + /* 0x18 */ u16* field_0x18; + /* 0x1C */ JUTNameTab field_0x1c; +}; // Size: 0x2C + class J3DAnmTexPattern : public J3DAnmBase { public: - /* 8032AED8 */ J3DAnmTexPattern(); - /* 8032AF50 */ void getTexNo(u16, u16*) const; - /* 8032B004 */ void searchUpdateMaterialID(J3DMaterialTable*); - /* 8032B09C */ void searchUpdateMaterialID(J3DModelData*); + J3DAnmTexPattern(); + void getTexNo(u16, u16*) const; + void searchUpdateMaterialID(J3DMaterialTable*); + void searchUpdateMaterialID(J3DModelData*); - /* 8032BD20 */ virtual ~J3DAnmTexPattern(); - /* 8032BD94 */ virtual s32 getKind() const; + virtual ~J3DAnmTexPattern(); + virtual s32 getKind() const; private: /* 0x0C */ void* field_0xc; @@ -425,14 +442,14 @@ private: class J3DAnmTevRegKey : public J3DAnmBase { public: - /* 8032AE18 */ J3DAnmTevRegKey(); - /* 8032B1F8 */ void getTevColorReg(u16, _GXColorS10*) const; - /* 8032B4BC */ void getTevKonstReg(u16, _GXColor*) const; - /* 8032B780 */ void searchUpdateMaterialID(J3DMaterialTable*); - /* 8032B87C */ void searchUpdateMaterialID(J3DModelData*); + J3DAnmTevRegKey(); + void getTevColorReg(u16, _GXColorS10*) const; + void getTevKonstReg(u16, _GXColor*) const; + void searchUpdateMaterialID(J3DMaterialTable*); + void searchUpdateMaterialID(J3DModelData*); - /* 8032BD9C */ virtual ~J3DAnmTevRegKey(); - /* 8032BE24 */ virtual s32 getKind() const; + virtual ~J3DAnmTevRegKey(); + virtual s32 getKind() const; u16 getCRegUpdateMaterialNum() const { return mCRegUpdateMaterialNum; } u16 getKRegUpdateMaterialNum() const { return mKRegUpdateMaterialNum; } @@ -469,12 +486,13 @@ private: class J3DAnmColor : public J3DAnmBase { public: - /* 8032A828 */ J3DAnmColor(); - /* 8032A8A4 */ void searchUpdateMaterialID(J3DMaterialTable*); + J3DAnmColor(); + void searchUpdateMaterialID(J3DMaterialTable*); + void searchUpdateMaterialID(J3DModelData*); - /* 8032BCAC */ virtual ~J3DAnmColor(); - /* 8032BF44 */ virtual s32 getKind() const; - /* 8032BF4C */ virtual void getColor(u16, _GXColor*) const; + virtual ~J3DAnmColor(); + virtual s32 getKind() const; + virtual void getColor(u16, _GXColor*) const; u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; } @@ -492,11 +510,11 @@ private: class J3DAnmColorKey : public J3DAnmColor { public: - /* 8032AB00 */ J3DAnmColorKey(); + J3DAnmColorKey(); - /* 8032BE2C */ virtual ~J3DAnmColorKey(); - /* 8032BEB0 */ virtual s32 getKind() const; - /* 8032AB54 */ virtual void getColor(u16, _GXColor*) const; + virtual ~J3DAnmColorKey(); + virtual s32 getKind() const; + virtual void getColor(u16, _GXColor*) const; private: /* 0x2C */ int field_0x2c; @@ -508,11 +526,11 @@ private: class J3DAnmColorFull : public J3DAnmColor { public: - /* 8032AB00 */ J3DAnmColorFull(); + J3DAnmColorFull(); - /* 8032BE2C */ virtual ~J3DAnmColorFull(); - /* 8032BEB0 */ virtual s32 getKind() const; - /* 8032AB54 */ virtual void getColor(u16, _GXColor*) const; + virtual ~J3DAnmColorFull(); + virtual s32 getKind() const; + virtual void getColor(u16, _GXColor*) const; private: /* 0x2C */ int field_0x2c; @@ -537,22 +555,22 @@ private: class J3DAnmVtxColorKey : public J3DAnmVtxColor { public: - /* 8032A4E0 */ J3DAnmVtxColorKey(); + J3DAnmVtxColorKey(); - /* 8032BF50 */ virtual ~J3DAnmVtxColorKey(); - /* 8032BFBC */ virtual s32 getKind() const; - /* 8032A53C */ virtual void getColor(u8, u16, _GXColor*) const; + virtual ~J3DAnmVtxColorKey(); + virtual s32 getKind() const; + virtual void getColor(u8, u16, _GXColor*) const; private: /* 0x18 */ int field_0x18[2]; }; class J3DAnmVtxColorFull : public J3DAnmVtxColor { - /* 8032A30C */ J3DAnmVtxColorFull(); + J3DAnmVtxColorFull(); - /* 8032BFC4 */ virtual ~J3DAnmVtxColorFull(); - /* 8032C030 */ virtual s32 getKind() const; - /* 8032A368 */ virtual void getColor(u8, u16, _GXColor*) const; + virtual ~J3DAnmVtxColorFull(); + virtual s32 getKind() const; + virtual void getColor(u8, u16, _GXColor*) const; private: /* 0x18 */ int field_0x18[2]; @@ -560,9 +578,9 @@ private: class J3DAnmCluster : public J3DAnmBase { public: - /* 8032BCAC */ virtual ~J3DAnmCluster(); - /* 8032BF44 */ virtual s32 getKind() const; - /* 8032BF4C */ virtual f32 getWeight(u16) const; + virtual ~J3DAnmCluster(); + virtual s32 getKind() const; + virtual f32 getWeight(u16) const; private: /* 0x0C */ f32* field_0xc; @@ -570,9 +588,9 @@ private: class J3DAnmClusterFull : public J3DAnmCluster { public: - /* 8032BCAC */ virtual ~J3DAnmClusterFull(); - /* 8032BF44 */ virtual s32 getKind() const; - /* 8032BF4C */ virtual f32 getWeight(u16) const; + virtual ~J3DAnmClusterFull(); + virtual s32 getKind() const; + virtual f32 getWeight(u16) const; private: /* 0x10 */ int field_0x10; @@ -580,9 +598,9 @@ private: class J3DAnmClusterKey : public J3DAnmCluster { public: - /* 8032C044 */ virtual ~J3DAnmClusterKey(); - /* 8032C0B0 */ virtual s32 getKind() const; - /* 8032A218 */ virtual f32 getWeight(u16) const; + virtual ~J3DAnmClusterKey(); + virtual s32 getKind() const; + virtual f32 getWeight(u16) const; private: /* 0x10 */ int field_0x10; diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index 2def459b7..6e4c17ea8 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -9,23 +9,32 @@ class J3DAnmColor; class J3DAnmTexPattern; class J3DAnmTextureSRTKey; class J3DAnmTevRegKey; +class J3DMatColorAnm; +class J3DTexNoAnm; +class J3DTexMtxAnm; +class J3DTevColorAnm; +class J3DTevKColorAnm; class JUTNameTab; class J3DMaterialTable { public: - /* 8032F5A8 */ void clear(); - /* 8032F5D0 */ J3DMaterialTable(); - /* 8032F64C */ int removeMatColorAnimator(J3DAnmColor*); - /* 8032F6F8 */ int removeTexNoAnimator(J3DAnmTexPattern*); - /* 8032F7B4 */ int removeTexMtxAnimator(J3DAnmTextureSRTKey*); - /* 8032F880 */ int removeTevRegAnimator(J3DAnmTevRegKey*); - /* 8032F9C0 */ void createTexMtxForAnimator(J3DAnmTextureSRTKey*); - /* 8032FAF4 */ void entryMatColorAnimator(J3DAnmColor*); - /* 8032FBC8 */ void entryTexNoAnimator(J3DAnmTexPattern*); - /* 8032FCC4 */ void entryTexMtxAnimator(J3DAnmTextureSRTKey*); - /* 8032FE70 */ void entryTevRegAnimator(J3DAnmTevRegKey*); + void clear(); + J3DMaterialTable(); + int removeMatColorAnimator(J3DAnmColor*); + int removeTexNoAnimator(J3DAnmTexPattern*); + int removeTexMtxAnimator(J3DAnmTextureSRTKey*); + int removeTevRegAnimator(J3DAnmTevRegKey*); + void createTexMtxForAnimator(J3DAnmTextureSRTKey*); + void entryMatColorAnimator(J3DAnmColor*); + void entryTexNoAnimator(J3DAnmTexPattern*); + void entryTexMtxAnimator(J3DAnmTextureSRTKey*); + void entryTevRegAnimator(J3DAnmTevRegKey*); + void setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm *); + void setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*); + void setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*); + void setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*); - /* 8032F604 */ virtual ~J3DMaterialTable(); + virtual ~J3DMaterialTable(); J3DMaterial* getMaterialNodePointer(u16 idx) const { return mMaterialNodePointer[idx]; } diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index b4d0f0776..e9df1d45d 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -46,7 +46,7 @@ public: virtual void setNBTScale(J3DNBTScale const*); virtual void setNBTScale(J3DNBTScale); virtual J3DNBTScale* getNBTScale(); - virtual bool getTexMtxOffset() const; + virtual u32 getTexMtxOffset() const; virtual void setTexMtxOffset(u32); virtual ~J3DTexGenBlock(); }; @@ -77,7 +77,7 @@ public: virtual J3DTexCoord* getTexCoord(u32); virtual void setTexMtx(u32, J3DTexMtx*); virtual J3DTexMtx* getTexMtx(u32); - virtual bool getTexMtxOffset() const; + virtual u32 getTexMtxOffset() const; virtual void setTexMtxOffset(u32); virtual ~J3DTexGenBlockPatched(); @@ -165,28 +165,28 @@ public: virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); - virtual bool getTevKAlphaSel(u32); + virtual u8 getTevKAlphaSel(u32); virtual void setTevStageNum(u8 const*); virtual void setTevStageNum(u8); virtual u8 getTevStageNum() const; virtual void setTevStage(u32, J3DTevStage const*); virtual void setTevStage(u32, J3DTevStage); - virtual bool getTevStage(u32); + virtual J3DTevStage * getTevStage(u32); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo const*); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable const*); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable); - virtual bool getTevSwapModeTable(u32); + virtual J3DTevSwapModeTable * getTevSwapModeTable(u32); virtual void setIndTevStage(u32, J3DIndTevStage const*); virtual void setIndTevStage(u32, J3DIndTevStage); - virtual bool getIndTevStage(u32); - virtual bool getTexNoOffset() const; - virtual bool getTevRegOffset() const; + virtual J3DIndTevStage * getIndTevStage(u32); + virtual u32 getTexNoOffset() const; + virtual u32 getTevRegOffset() const; virtual void setTexNoOffset(u32); virtual void setTevRegOffset(u32); virtual ~J3DTevBlock(); -private: +protected: void indexToPtr_private(u32); /* 0x4 */ u32 mTexNoOffset; @@ -234,12 +234,12 @@ public: virtual u8 getTevStageNum() const; virtual void setTevStage(u32, J3DTevStage const*); virtual void setTevStage(u32, J3DTevStage); - virtual bool getTevStage(u32); + virtual J3DTevStage * getTevStage(u32); virtual void setIndTevStage(u32, J3DIndTevStage const*); virtual void setIndTevStage(u32, J3DIndTevStage); - virtual bool getIndTevStage(u32); - virtual bool getTexNoOffset() const; - virtual bool getTevRegOffset() const; + virtual J3DIndTevStage * getIndTevStage(u32); + virtual u32 getTexNoOffset() const; + virtual u32 getTevRegOffset() const; virtual void setTevRegOffset(u32); virtual ~J3DTevBlockPatched(); @@ -298,23 +298,23 @@ public: virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); - virtual bool getTevKAlphaSel(u32); + virtual u8 getTevKAlphaSel(u32); virtual void setTevStageNum(u8 const*); virtual void setTevStageNum(u8); virtual u8 getTevStageNum() const; virtual void setTevStage(u32, J3DTevStage const*); virtual void setTevStage(u32, J3DTevStage); - virtual bool getTevStage(u32); + virtual J3DTevStage * getTevStage(u32); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo const*); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable const*); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable); - virtual bool getTevSwapModeTable(u32); + virtual J3DTevSwapModeTable * getTevSwapModeTable(u32); virtual void setIndTevStage(u32, J3DIndTevStage const*); virtual void setIndTevStage(u32, J3DIndTevStage); - virtual bool getIndTevStage(u32); - virtual bool getTexNoOffset() const; - virtual bool getTevRegOffset() const; + virtual J3DIndTevStage * getIndTevStage(u32); + virtual u32 getTexNoOffset() const; + virtual u32 getTevRegOffset() const; virtual void setTevRegOffset(u32); virtual ~J3DTevBlock4(); @@ -371,23 +371,23 @@ public: virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); - virtual bool getTevKAlphaSel(u32); + virtual u8 getTevKAlphaSel(u32); virtual void setTevStageNum(u8 const*); virtual void setTevStageNum(u8); virtual u8 getTevStageNum() const; virtual void setTevStage(u32, J3DTevStage const*); virtual void setTevStage(u32, J3DTevStage); - virtual bool getTevStage(u32); + virtual J3DTevStage * getTevStage(u32); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo const*); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable const*); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable); - virtual bool getTevSwapModeTable(u32); + virtual J3DTevSwapModeTable * getTevSwapModeTable(u32); virtual void setIndTevStage(u32, J3DIndTevStage const*); virtual void setIndTevStage(u32, J3DIndTevStage); - virtual bool getIndTevStage(u32); - virtual bool getTexNoOffset() const; - virtual bool getTevRegOffset() const; + virtual J3DIndTevStage * getIndTevStage(u32); + virtual u32 getTexNoOffset() const; + virtual u32 getTevRegOffset() const; virtual void setTevRegOffset(u32); virtual ~J3DTevBlock2(); @@ -444,23 +444,23 @@ public: virtual u8 getTevKColorSel(u32); virtual void setTevKAlphaSel(u32, u8 const*); virtual void setTevKAlphaSel(u32, u8); - virtual bool getTevKAlphaSel(u32); + virtual u8 getTevKAlphaSel(u32); virtual void setTevStageNum(u8); virtual void setTevStageNum(u8 const*); virtual u8 getTevStageNum() const; virtual void setTevStage(u32, J3DTevStage const*); virtual void setTevStage(u32, J3DTevStage); - virtual bool getTevStage(u32); + virtual J3DTevStage * getTevStage(u32); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo const*); virtual void setTevSwapModeInfo(u32, J3DTevSwapModeInfo); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable const*); virtual void setTevSwapModeTable(u32, J3DTevSwapModeTable); - virtual bool getTevSwapModeTable(u32); + virtual J3DTevSwapModeTable * getTevSwapModeTable(u32); virtual void setIndTevStage(u32, J3DIndTevStage const*); virtual void setIndTevStage(u32, J3DIndTevStage); - virtual bool getIndTevStage(u32); - virtual bool getTexNoOffset() const; - virtual bool getTevRegOffset() const; + virtual J3DIndTevStage * getIndTevStage(u32); + virtual u32 getTexNoOffset() const; + virtual u32 getTevRegOffset() const; virtual void setTevRegOffset(u32); virtual ~J3DTevBlock16(); @@ -511,11 +511,11 @@ public: virtual u8 getTevStageNum() const; virtual void setTevStage(u32, J3DTevStage const*); virtual void setTevStage(u32, J3DTevStage); - virtual bool getTevStage(u32); + virtual J3DTevStage * getTevStage(u32); virtual void setIndTevStage(u32, J3DIndTevStage const*); virtual void setIndTevStage(u32, J3DIndTevStage); - virtual bool getIndTevStage(u32); - virtual bool getTexNoOffset() const; + virtual J3DIndTevStage * getIndTevStage(u32); + virtual u32 getTexNoOffset() const; virtual ~J3DTevBlock1(); private: @@ -629,21 +629,21 @@ public: virtual void setFog(J3DFog*); virtual J3DFog* getFog(); virtual void setAlphaComp(J3DAlphaComp const*); - virtual void setAlphaComp(J3DAlphaComp const&); + virtual void setAlphaComp(J3DAlphaComp); virtual J3DAlphaComp* getAlphaComp(); virtual void setBlend(J3DBlend const*); - virtual void setBlend(J3DBlend const&); - virtual bool getBlend(); + virtual void setBlend(J3DBlend); + virtual J3DBlend* getBlend(); virtual void setZMode(J3DZMode const*); virtual void setZMode(J3DZMode); virtual J3DZMode* getZMode(); virtual void setZCompLoc(u8 const*); virtual void setZCompLoc(u8); - virtual bool getZCompLoc() const; + virtual u8 getZCompLoc() const; virtual void setDither(u8 const*); virtual void setDither(u8); - virtual bool getDither() const; - virtual bool getFogOffset() const; + virtual u8 getDither() const; + virtual u32 getFogOffset() const; virtual void setFogOffset(u32); virtual ~J3DPEBlock(); }; @@ -690,33 +690,33 @@ public: virtual void setFog(J3DFog*); virtual J3DFog* getFog(); virtual void setAlphaComp(J3DAlphaComp const*); - virtual void setAlphaComp(J3DAlphaComp const&); + virtual void setAlphaComp(J3DAlphaComp); virtual J3DAlphaComp* getAlphaComp(); virtual void setBlend(J3DBlend const*); - virtual void setBlend(J3DBlend const&); - virtual bool getBlend(); + virtual void setBlend(J3DBlend); + virtual J3DBlend* getBlend(); virtual void setZMode(J3DZMode const*); virtual void setZMode(J3DZMode); virtual J3DZMode* getZMode(); virtual void setZCompLoc(u8 const*); virtual void setZCompLoc(u8); - virtual bool getZCompLoc() const; + virtual u8 getZCompLoc() const; virtual void setDither(u8 const*); virtual void setDither(u8); - virtual bool getDither() const; - virtual bool getFogOffset() const; + virtual u8 getDither() const; + virtual u32 getFogOffset() const; virtual void setFogOffset(u32); virtual ~J3DPEBlockFull(); private: - /* 0x04 */ J3DFog mFog; - /* 0x30 */ J3DAlphaComp mAlphaComp; - /* 0x34 */ J3DBlend mBlend; - /* 0x38 */ J3DZMode mZMode; - /* 0x3A */ u8 mZCompLoc; - /* 0x3B */ u8 mDither; - /* 0x3C */ u32 mFogOffset; -}; // Size: 0x40 + /* 0x04 */ J3DFog * mFog; + /* 0x08 */ J3DAlphaComp mAlphaComp; + /* 0x0C */ J3DBlend mBlend; + /* 0x10 */ J3DZMode mZMode; + /* 0x14 */ u8 mZCompLoc; + /* 0x15 */ u8 mDither; + /* 0x18 */ u32 mFogOffset; +}; // Size: 0x1C class J3DPEBlockFogOff : public J3DPEBlock { public: @@ -732,20 +732,20 @@ public: virtual s32 countDLSize(); virtual u32 getType(); virtual void setAlphaComp(J3DAlphaComp const*); - virtual void setAlphaComp(J3DAlphaComp const&); + virtual void setAlphaComp(J3DAlphaComp); virtual J3DAlphaComp* getAlphaComp(); virtual void setBlend(J3DBlend const*); - virtual void setBlend(J3DBlend const&); - virtual bool getBlend(); + virtual void setBlend(J3DBlend); + virtual J3DBlend* getBlend(); virtual void setZMode(J3DZMode const*); virtual void setZMode(J3DZMode); virtual J3DZMode* getZMode(); virtual void setZCompLoc(u8 const*); virtual void setZCompLoc(u8); - virtual bool getZCompLoc() const; + virtual u8 getZCompLoc() const; virtual void setDither(u8 const*); virtual void setDither(u8); - virtual bool getDither() const; + virtual u8 getDither() const; virtual ~J3DPEBlockFogOff(); private: @@ -762,8 +762,7 @@ struct J3DIndTexCoordScale { /* 0x0 */ u8 mScaleS; /* 0x1 */ u8 mScaleT; - /* 0x2 */ u8 field_0x2; - /* 0x3 */ u8 field_0x3; + u8 pad[2]; }; struct J3DIndTexMtx { @@ -794,13 +793,13 @@ public: virtual u8 getIndTexStageNum() const; virtual void setIndTexOrder(u32, J3DIndTexOrder); virtual void setIndTexOrder(u32, J3DIndTexOrder const*); - virtual bool getIndTexOrder(u32); + virtual J3DIndTexOrder * getIndTexOrder(u32); virtual void setIndTexMtx(u32, J3DIndTexMtx const*); virtual void setIndTexMtx(u32, J3DIndTexMtx); - virtual bool getIndTexMtx(u32); + virtual J3DIndTexMtx * getIndTexMtx(u32); virtual void setIndTexCoordScale(u32, J3DIndTexCoordScale); virtual void setIndTexCoordScale(u32, J3DIndTexCoordScale const*); - virtual bool getIndTexCoordScale(u32); + virtual J3DIndTexCoordScale * getIndTexCoordScale(u32); virtual ~J3DIndBlock(); }; @@ -820,13 +819,13 @@ public: virtual u8 getIndTexStageNum() const; virtual void setIndTexOrder(u32, J3DIndTexOrder); virtual void setIndTexOrder(u32, J3DIndTexOrder const*); - virtual bool getIndTexOrder(u32); + virtual J3DIndTexOrder * getIndTexOrder(u32); virtual void setIndTexMtx(u32, J3DIndTexMtx const*); virtual void setIndTexMtx(u32, J3DIndTexMtx); - virtual bool getIndTexMtx(u32); + virtual J3DIndTexMtx * getIndTexMtx(u32); virtual void setIndTexCoordScale(u32, J3DIndTexCoordScale const*); virtual void setIndTexCoordScale(u32, J3DIndTexCoordScale); - virtual bool getIndTexCoordScale(u32); + virtual J3DIndTexCoordScale * getIndTexCoordScale(u32); virtual ~J3DIndBlockFull(); private: @@ -882,7 +881,7 @@ public: virtual GXColor* getMatColor(u32); virtual void setAmbColor(u32, J3DGXColor const*); virtual void setAmbColor(u32, J3DGXColor); - virtual bool getAmbColor(u32); + virtual GXColor* getAmbColor(u32); virtual void setColorChanNum(u8); virtual void setColorChanNum(u8 const*); virtual u8 getColorChanNum() const; @@ -890,12 +889,12 @@ public: virtual void setColorChan(u32, J3DColorChan const*); virtual J3DColorChan* getColorChan(u32); virtual void setLight(u32, J3DLightObj*); - virtual bool getLight(u32); + virtual J3DLightObj* getLight(u32); virtual void setCullMode(u8 const*); virtual void setCullMode(u8); - virtual s32 getCullMode() const; - virtual bool getMatColorOffset() const; - virtual bool getColorChanOffset() const; + virtual u8 getCullMode() const; + virtual u32 getMatColorOffset() const; + virtual u32 getColorChanOffset() const; virtual void setMatColorOffset(u32); virtual void setColorChanOffset(u32); virtual ~J3DColorBlock(); @@ -923,7 +922,7 @@ public: virtual GXColor* getMatColor(u32); virtual void setAmbColor(u32, J3DGXColor const*); virtual void setAmbColor(u32, J3DGXColor); - virtual bool getAmbColor(u32); + virtual GXColor* getAmbColor(u32); virtual void setColorChanNum(u8); virtual void setColorChanNum(u8 const*); virtual u8 getColorChanNum() const; @@ -931,19 +930,19 @@ public: virtual void setColorChan(u32, J3DColorChan const*); virtual J3DColorChan* getColorChan(u32); virtual void setLight(u32, J3DLightObj*); - virtual bool getLight(u32); + virtual J3DLightObj* getLight(u32); virtual void setCullMode(u8 const*); virtual void setCullMode(u8); - virtual s32 getCullMode() const; - virtual bool getMatColorOffset() const; - virtual bool getColorChanOffset() const; + virtual u8 getCullMode() const; + virtual u32 getMatColorOffset() const; + virtual u32 getColorChanOffset() const; virtual void setMatColorOffset(u32); virtual void setColorChanOffset(u32); virtual ~J3DColorBlockLightOn(); private: - /* 0x04 */ J3DGXColor mMatColor[2]; - /* 0x0C */ J3DGXColor mAmbColor[2]; + /* 0x04 */ GXColor mMatColor[2]; + /* 0x0C */ GXColor mAmbColor[2]; /* 0x14 */ u8 mColorChanNum; /* 0x16 */ J3DColorChan mColorChan[4]; /* 0x20 */ J3DLightObj* mLight[8]; @@ -966,6 +965,7 @@ public: virtual void patchLight(); virtual void diff(u32); virtual void diffMatColor(); + virtual void diffLight(); virtual s32 countDLSize(); virtual u32 getType(); virtual void setMatColor(u32, J3DGXColor const*); @@ -979,15 +979,15 @@ public: virtual J3DColorChan* getColorChan(u32); virtual void setCullMode(u8 const*); virtual void setCullMode(u8); - virtual s32 getCullMode() const; - virtual bool getMatColorOffset() const; - virtual bool getColorChanOffset() const; + virtual u8 getCullMode() const; + virtual u32 getMatColorOffset() const; + virtual u32 getColorChanOffset() const; virtual void setMatColorOffset(u32); virtual void setColorChanOffset(u32); virtual ~J3DColorBlockLightOff(); -private: - /* 0x04 */ J3DGXColor mMatColor[2]; +protected: + /* 0x04 */ GXColor mMatColor[2]; /* 0x0C */ u8 mColorChanNum; /* 0x0E */ J3DColorChan mColorChan[4]; /* 0x16 */ u8 mCullMode; @@ -1008,11 +1008,11 @@ public: virtual u32 getType(); virtual void setAmbColor(u32, J3DGXColor const*); virtual void setAmbColor(u32, J3DGXColor); - virtual bool getAmbColor(u32); + virtual GXColor* getAmbColor(u32); virtual ~J3DColorBlockAmbientOn(); -private: - /* 0x20 */ J3DGXColor mAmbColor[2]; +protected: + /* 0x20 */ GXColor mAmbColor[2]; }; // Size: 0x28 #endif /* J3DMATBLOCK_H */ diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 6f6ed6721..9dc13072c 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -31,7 +31,7 @@ public: s32 newSharedDisplayList(u32); s32 newSingleSharedDisplayList(u32); - virtual void calc(f32 const (*)[4]); + virtual void calc(const Mtx); virtual void makeDisplayList(); virtual void makeSharedDisplayList(); virtual void load(); @@ -97,29 +97,30 @@ public: class J3DPatchedMaterial : public J3DMaterial { public: - /* 80316FB8 */ void initialize(); + void initialize(); - /* 80316FD8 */ virtual void makeDisplayList(); - /* 80316FDC */ virtual void makeSharedDisplayList(); - /* 80316FE0 */ virtual void load(); - /* 80316FFC */ virtual void loadSharedDL(); - /* 8031703C */ virtual void reset(); - /* 80317040 */ virtual void change(); + virtual void calc(const Mtx); + virtual void makeDisplayList(); + virtual void makeSharedDisplayList(); + virtual void load(); + virtual void loadSharedDL(); + virtual void reset(); + virtual void change(); }; class J3DLockedMaterial : public J3DMaterial { public: - /* 80317044 */ void initialize(); + void initialize(); - /* 803170D0 */ virtual void calc(f32 const (*)[4]); - /* 80317064 */ virtual void makeDisplayList(); - /* 80317068 */ virtual void makeSharedDisplayList(); - /* 8031706C */ virtual void load(); - /* 80317088 */ virtual void loadSharedDL(); - /* 803170C8 */ virtual void patch(); - /* 803170CC */ virtual void diff(u32); - /* 803170D4 */ virtual void reset(); - /* 803170D8 */ virtual void change(); + virtual void calc(const Mtx); + virtual void makeDisplayList(); + virtual void makeSharedDisplayList(); + virtual void load(); + virtual void loadSharedDL(); + virtual void patch(); + virtual void diff(u32); + virtual void reset(); + virtual void change(); }; #endif /* J3DMATERIAL_H */ diff --git a/include/JSystem/J3DGraphBase/J3DStruct.h b/include/JSystem/J3DGraphBase/J3DStruct.h index b2e613ecd..4b2988a12 100644 --- a/include/JSystem/J3DGraphBase/J3DStruct.h +++ b/include/JSystem/J3DGraphBase/J3DStruct.h @@ -54,15 +54,11 @@ struct J3DTexMtxInfo { }; // Size: 0x64 struct J3DIndTexMtxInfo { - /* 803257DC */ void operator=(J3DIndTexMtxInfo const&); - /* 0x00 */ Mtx23 field_0x0; /* 0x18 */ u8 field_0x18; }; // Size: 0x1C struct J3DFogInfo { - /* 80325800 */ void operator=(J3DFogInfo const&); - /* 0x00 */ u8 mType; /* 0x01 */ u8 mAdjEnable; /* 0x02 */ u16 mCenter; @@ -75,10 +71,10 @@ struct J3DFogInfo { }; // Size: 0x2C struct J3DNBTScaleInfo { - /* 8032587C */ void operator=(J3DNBTScaleInfo const&); - /* 0x0 */ u8 mbHasScale; /* 0x4 */ Vec mScale; + + inline void operator=(const J3DNBTScaleInfo & other) { mbHasScale = other.mbHasScale; mScale = other.mScale; } }; // Size: 0x10 #endif /* J3DSTRUCT_H */ diff --git a/include/JSystem/J3DGraphBase/J3DTevs.h b/include/JSystem/J3DGraphBase/J3DTevs.h index 09081c527..0b29af869 100644 --- a/include/JSystem/J3DGraphBase/J3DTevs.h +++ b/include/JSystem/J3DGraphBase/J3DTevs.h @@ -4,7 +4,7 @@ #include "dolphin/types.h" struct J3DTevStageInfo { - /* 0x0 */ u8 field_0x0; + /* 0x0 */ u8 mTevMode; /* 0x1 */ u8 mTevColorOp; /* 0x2 */ u8 mTevColorAB; /* 0x3 */ u8 mTevColorCD; @@ -15,9 +15,9 @@ struct J3DTevStageInfo { }; struct J3DTevStage : public J3DTevStageInfo { - /* 8000E230 */ J3DTevStage(); - /* 8000E298 */ void setTevStageInfo(J3DTevStageInfo const&); - /* 8003AACC */ J3DTevStage(J3DTevStageInfo const&); + J3DTevStage(); + void setTevStageInfo(J3DTevStageInfo const&); + J3DTevStage(J3DTevStageInfo const&); }; struct J3DIndTevStageInfo { @@ -33,24 +33,20 @@ struct J3DIndTevStageInfo { }; struct J3DIndTevStage { - /* 8000E14C */ J3DIndTevStage(); + J3DIndTevStage(); /* 0x0 */ u32 mInfo; }; struct J3DTevOrderInfo { - void operator=(const J3DTevOrderInfo& other) { - *(u32*) this = *(u32*)&other; - } - - /* 0x0 */ u8 field_0x0; + /* 0x0 */ u8 mTexCoord; /* 0x1 */ u8 mTexMap; - /* 0x2 */ u8 field_0x2; + /* 0x2 */ u8 mColorChan; /* 0x3 */ u8 field_0x3; // Maybe padding }; struct J3DTevOrder : public J3DTevOrderInfo { - /* 8000E140 */ J3DTevOrder(); + J3DTevOrder(); J3DTevOrder(const J3DTevOrderInfo& info) { *(J3DTevOrderInfo*)this = info; } @@ -59,12 +55,14 @@ struct J3DTevOrder : public J3DTevOrderInfo { }; struct J3DTevSwapModeTable { - /* 8000E134 */ J3DTevSwapModeTable(); + J3DTevSwapModeTable(); /* 0x0 */ u8 field_0x0; }; // Size: 0x1 -struct J3DTevSwapModeInfo {}; +struct J3DTevSwapModeInfo { + /* 0x0 */ u8 field_0x0; +}; struct J3DNBTScale; void loadNBTScale(J3DNBTScale& param_0); diff --git a/include/JSystem/J3DGraphBase/J3DTexture.h b/include/JSystem/J3DGraphBase/J3DTexture.h index 8f646bbe9..e5b4a31d1 100644 --- a/include/JSystem/J3DGraphBase/J3DTexture.h +++ b/include/JSystem/J3DGraphBase/J3DTexture.h @@ -12,10 +12,10 @@ private: /* 0x4 */ ResTIMG* mpRes; public: - /* 8031204C */ void loadGX(u16, _GXTexMapID) const; - /* 803121A4 */ void entryNum(u16); - /* 8031221C */ void addResTIMG(u16, ResTIMG const*); - /* 803366A4 */ virtual ~J3DTexture(); + void loadGX(u16, _GXTexMapID) const; + void entryNum(u16); + void addResTIMG(u16, ResTIMG const*); + virtual ~J3DTexture(); u16 getNum() const { return mNum; } ResTIMG* getResTIMG(u16 entry) const { return &mpRes[entry]; } @@ -31,12 +31,12 @@ public: J3DTexMtx(const J3DTexMtxInfo& info) { mTexMtxInfo = info; } - /* 803238C4 */ void load(u32) const; - /* 80323900 */ void calc(f32 const (*)[4]); - /* 80323920 */ void calcTexMtx(f32 const (*)[4]); - /* 80323C0C */ void calcPostTexMtx(f32 const (*)[4]); - /* 80324358 */ void loadTexMtx(u32) const; - /* 803243BC */ void loadPostTexMtx(u32) const; + void load(u32) const; + void calc(f32 const (*)[4]); + void calcTexMtx(f32 const (*)[4]); + void calcPostTexMtx(f32 const (*)[4]); + void loadTexMtx(u32) const; + void loadPostTexMtx(u32) const; J3DTexMtxInfo& getTexMtxInfo() { return mTexMtxInfo; } Mtx& getMtx() { return mMtx; } @@ -51,13 +51,11 @@ struct J3DTexCoordInfo { /* 0x0 */ u8 mTexGenType; /* 0x1 */ u8 mTexGenSrc; /* 0x2 */ u8 mTexGenMtx; - void operator=(J3DTexCoordInfo const& other) { - *(u32*) this = *(u32*)&other; - } }; struct J3DTexCoord : public J3DTexCoordInfo { - /* 8000E464 */ J3DTexCoord(); + J3DTexCoord(); + void setTexCoordInfo(J3DTexCoordInfo *param_1) { *(J3DTexCoordInfo*)this = *param_1; } @@ -69,7 +67,7 @@ struct J3DTexCoord : public J3DTexCoordInfo { mTexMtxReg = mTexGenMtx; } - /* 0x4 */ u16 mTexMtxReg; + /* 0x4 */ u8 mTexMtxReg; }; // Size: 0x6 struct J3DDefaultTexCoordInfo { diff --git a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp index 447d70118..128323b06 100644 --- a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -12,7 +12,7 @@ void J3DFrameCtrl::init(short) { } /* 802EF608-802EFBA8 .text checkPass__12J3DFrameCtrlFf */ -void J3DFrameCtrl::checkPass(float) { +BOOL J3DFrameCtrl::checkPass(float) { /* Nonmatching */ } @@ -47,12 +47,12 @@ void J3DAnmTextureSRTKey::calcTransform(float, unsigned short, J3DTextureSRTInfo } /* 802F10D4-802F1188 .text getWeight__17J3DAnmClusterFullCFUs */ -void J3DAnmClusterFull::getWeight(unsigned short) const { +f32 J3DAnmClusterFull::getWeight(unsigned short) const { /* Nonmatching */ } /* 802F1188-802F120C .text getWeight__16J3DAnmClusterKeyCFUs */ -void J3DAnmClusterKey::getWeight(unsigned short) const { +f32 J3DAnmClusterKey::getWeight(unsigned short) const { /* Nonmatching */ } @@ -92,7 +92,7 @@ void J3DAnmTexPattern::getTexNo(unsigned short, unsigned short*) const { } /* 802F200C-802F20EC .text getVisibility__20J3DAnmVisibilityFullCFUsPUc */ -void J3DAnmVisibilityFull::getVisibility(unsigned short, unsigned char*) const { +bool J3DAnmVisibilityFull::getVisibility(u16, u8*) const { /* Nonmatching */ } @@ -136,16 +136,6 @@ void J3DAnmTevRegKey::searchUpdateMaterialID(J3DModelData*) { /* Nonmatching */ } -/* 802F2A88-802F2DAC .text J3DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePs */ -void J3DGetKeyFrameInterpolation(float, J3DAnmKeyTableBase*, short*) { - /* Nonmatching */ -} - -/* 802F2DAC-802F2EF8 .text J3DGetKeyFrameInterpolation__FfP18J3DAnmKeyTableBasePf */ -void J3DGetKeyFrameInterpolation(float, J3DAnmKeyTableBase*, float*) { - /* Nonmatching */ -} - /* 802F2EF8-802F2F7C .text __dt__14J3DAnmColorKeyFv */ J3DAnmColorKey::~J3DAnmColorKey() { /* Nonmatching */ @@ -197,7 +187,7 @@ J3DAnmCluster::~J3DAnmCluster() { } /* 802F3278-802F3280 .text getWeight__13J3DAnmClusterCFUs */ -void J3DAnmCluster::getWeight(unsigned short) const { +f32 J3DAnmCluster::getWeight(unsigned short) const { /* Nonmatching */ } diff --git a/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp b/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp index 3f8a9f477..5e5689140 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp @@ -37,22 +37,22 @@ void J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey*) { } /* 802F61E8-802F6260 .text removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */ -void J3DMaterialTable::removeMatColorAnimator(J3DAnmColor*) { +int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor*) { /* Nonmatching */ } /* 802F6260-802F62F4 .text removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */ -void J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern*) { +int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern*) { /* Nonmatching */ } /* 802F62F4-802F6398 .text removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -void J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey*) { +int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey*) { /* Nonmatching */ } /* 802F6398-802F64B8 .text removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -void J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey*) { +int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey*) { /* Nonmatching */ } diff --git a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp index 24d02f514..b057620ca 100644 --- a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -6,19 +6,40 @@ #include "JSystem/J3DGraphBase/J3DMatBlock.h" #include "dolphin/types.h" +extern "C" extern const GXColor j3dDefaultColInfo; +extern "C" extern const GXColor j3dDefaultAmbInfo; + /* 802DF794-802DF7E4 .text initialize__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::initialize() { - /* Nonmatching */ + mColorChanNum = 0; + for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) + mMatColor[i] = j3dDefaultColInfo; + mMatColorOffset = 0; + mColorChanOffset = 0; } /* 802DF7E4-802DF870 .text initialize__22J3DColorBlockAmbientOnFv */ void J3DColorBlockAmbientOn::initialize() { - /* Nonmatching */ + mColorChanNum = 0; + for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) + mMatColor[i] = j3dDefaultColInfo; + for (u32 i = 0; i < ARRAY_SIZE(mAmbColor); i++) + mAmbColor[i] = j3dDefaultAmbInfo; + mMatColorOffset = 0; + mColorChanOffset = 0; } /* 802DF870-802DF91C .text initialize__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::initialize() { - /* Nonmatching */ + mColorChanNum = 0; + for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) + mMatColor[i] = j3dDefaultColInfo; + for (u32 i = 0; i < ARRAY_SIZE(mAmbColor); i++) + mAmbColor[i] = j3dDefaultAmbInfo; + for (u32 i = 0; i < ARRAY_SIZE(mLight); i++) + mLight[i] = NULL; + mMatColorOffset = 0; + mColorChanOffset = 0; } /* 802DF91C-802DF94C .text initialize__21J3DTexGenBlockPatchedFv */ @@ -82,88 +103,88 @@ void J3DPEBlockFull::initialize() { } /* 802DFE50-802DFE58 .text countDLSize__21J3DColorBlockLightOffFv */ -void J3DColorBlockLightOff::countDLSize() { - /* Nonmatching */ +s32 J3DColorBlockLightOff::countDLSize() { + return 0x22; } /* 802DFE58-802DFE60 .text countDLSize__22J3DColorBlockAmbientOnFv */ -void J3DColorBlockAmbientOn::countDLSize() { - /* Nonmatching */ +s32 J3DColorBlockAmbientOn::countDLSize() { + return 0x2f; } /* 802DFE60-802DFE68 .text countDLSize__20J3DColorBlockLightOnFv */ -void J3DColorBlockLightOn::countDLSize() { - /* Nonmatching */ +s32 J3DColorBlockLightOn::countDLSize() { + return 0x26f; } /* 802DFE68-802DFE70 .text countDLSize__21J3DTexGenBlockPatchedFv */ -void J3DTexGenBlockPatched::countDLSize() { - /* Nonmatching */ +s32 J3DTexGenBlockPatched::countDLSize() { + return 0x1a8; } /* 802DFE70-802DFE78 .text countDLSize__15J3DTexGenBlock4Fv */ -void J3DTexGenBlock4::countDLSize() { - /* Nonmatching */ +s32 J3DTexGenBlock4::countDLSize() { + return 0xfe; } /* 802DFE78-802DFE80 .text countDLSize__19J3DTexGenBlockBasicFv */ -void J3DTexGenBlockBasic::countDLSize() { - /* Nonmatching */ +s32 J3DTexGenBlockBasic::countDLSize() { + return 0x1f2; } /* 802DFE80-802DFE88 .text countDLSize__18J3DTevBlockPatchedFv */ -void J3DTevBlockPatched::countDLSize() { - /* Nonmatching */ +s32 J3DTevBlockPatched::countDLSize() { + return 0x230; } /* 802DFE88-802DFE90 .text countDLSize__12J3DTevBlock1Fv */ -void J3DTevBlock1::countDLSize() { - /* Nonmatching */ +s32 J3DTevBlock1::countDLSize() { + return 0x69; } /* 802DFE90-802DFE98 .text countDLSize__12J3DTevBlock2Fv */ -void J3DTevBlock2::countDLSize() { - /* Nonmatching */ +s32 J3DTevBlock2::countDLSize() { + return 0x14f; } /* 802DFE98-802DFEA0 .text countDLSize__12J3DTevBlock4Fv */ -void J3DTevBlock4::countDLSize() { - /* Nonmatching */ +s32 J3DTevBlock4::countDLSize() { + return 0x244; } /* 802DFEA0-802DFEA8 .text countDLSize__13J3DTevBlock16Fv */ -void J3DTevBlock16::countDLSize() { - /* Nonmatching */ +s32 J3DTevBlock16::countDLSize() { + return 0x3e8; } /* 802DFEA8-802DFEB0 .text countDLSize__15J3DIndBlockFullFv */ -void J3DIndBlockFull::countDLSize() { - /* Nonmatching */ +s32 J3DIndBlockFull::countDLSize() { + return 0x8c; } /* 802DFEB0-802DFEB8 .text countDLSize__13J3DPEBlockOpaFv */ -void J3DPEBlockOpa::countDLSize() { - /* Nonmatching */ +s32 J3DPEBlockOpa::countDLSize() { + return 0x1e; } /* 802DFEB8-802DFEC0 .text countDLSize__17J3DPEBlockTexEdgeFv */ -void J3DPEBlockTexEdge::countDLSize() { - /* Nonmatching */ +s32 J3DPEBlockTexEdge::countDLSize() { + return 0x1e; } /* 802DFEC0-802DFEC8 .text countDLSize__13J3DPEBlockXluFv */ -void J3DPEBlockXlu::countDLSize() { - /* Nonmatching */ +s32 J3DPEBlockXlu::countDLSize() { + return 0x1e; } /* 802DFEC8-802DFED0 .text countDLSize__16J3DPEBlockFogOffFv */ -void J3DPEBlockFogOff::countDLSize() { - /* Nonmatching */ +s32 J3DPEBlockFogOff::countDLSize() { + return 0x1e; } /* 802DFED0-802DFED8 .text countDLSize__14J3DPEBlockFullFv */ -void J3DPEBlockFull::countDLSize() { - /* Nonmatching */ +s32 J3DPEBlockFull::countDLSize() { + return 0x55; } /* 802DFED8-802E0438 .text load__21J3DColorBlockLightOffFv */ @@ -212,7 +233,7 @@ void J3DColorBlockLightOn::patchLight() { } /* 802E1E18-802E1E80 .text diff__21J3DColorBlockLightOffFUl */ -void J3DColorBlockLightOff::diff(unsigned long) { +void J3DColorBlockLightOff::diff(u32 i) { /* Nonmatching */ } @@ -227,7 +248,7 @@ void J3DColorBlockLightOff::diffLight() { } /* 802E2408-802E2478 .text diff__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::diff(unsigned long) { +void J3DColorBlockLightOn::diff(u32 i) { /* Nonmatching */ } @@ -267,7 +288,7 @@ void J3DTexGenBlockBasic::patch() { } /* 802E2D28-802E2D90 .text diff__21J3DTexGenBlockPatchedFUl */ -void J3DTexGenBlockPatched::diff(unsigned long) { +void J3DTexGenBlockPatched::diff(u32 i) { /* Nonmatching */ } @@ -328,7 +349,6 @@ void J3DTevBlock1::patchTexNo() { /* 802E4450-802E4454 .text patchTevReg__12J3DTevBlock1Fv */ void J3DTevBlock1::patchTevReg() { - /* Nonmatching */ } /* 802E4454-802E4538 .text patchTexNoAndTexCoordScale__12J3DTevBlock1Fv */ @@ -402,7 +422,7 @@ void J3DTevBlock16::patch() { } /* 802E4EB0-802E4F6C .text diff__11J3DTevBlockFUl */ -void J3DTevBlock::diff(unsigned long) { +void J3DTevBlock::diff(u32 i) { /* Nonmatching */ } @@ -542,7 +562,7 @@ void J3DTevBlockPatched::ptrToIndex() { } /* 802E6204-802E6298 .text indexToPtr_private__11J3DTevBlockFUl */ -void J3DTevBlock::indexToPtr_private(unsigned long) { +void J3DTevBlock::indexToPtr_private(u32 i) { /* Nonmatching */ } @@ -552,7 +572,7 @@ void J3DIndBlockFull::load() { } /* 802E6494-802E657C .text diff__15J3DIndBlockFullFUl */ -void J3DIndBlockFull::diff(unsigned long) { +void J3DIndBlockFull::diff(u32 i) { /* Nonmatching */ } @@ -602,7 +622,7 @@ void J3DPEBlockFull::diffBlend() { } /* 802E7E44-802E7EAC .text diff__14J3DPEBlockFullFUl */ -void J3DPEBlockFull::diff(unsigned long) { +void J3DPEBlockFull::diff(u32 i) { /* Nonmatching */ } @@ -677,143 +697,138 @@ void J3DPEBlockFull::reset(J3DPEBlock*) { } /* 802E96C8-802E9920 .text calc__21J3DTexGenBlockPatchedFPA4_Cf */ -void J3DTexGenBlockPatched::calc(const float(*)[4]) { +void J3DTexGenBlockPatched::calc(const Mtx) { /* Nonmatching */ } /* 802E9920-802E9984 .text load__9J3DTexMtxCFUl */ -void J3DTexMtx::load(unsigned long) const { +void J3DTexMtx::load(u32 i) const { /* Nonmatching */ } /* 802E9984-802E9F04 .text J3DGDLoadTexMtxImm__FPA4_fUl13_GXTexMtxType */ -void J3DGDLoadTexMtxImm(float(*)[4], unsigned long, _GXTexMtxType) { +void J3DGDLoadTexMtxImm(Mtx pMtx, u32 i, GXTexMtxType) { /* Nonmatching */ } /* 802E9F04-802E9F08 .text diffTevReg__11J3DTevBlockFv */ void J3DTevBlock::diffTevReg() { - /* Nonmatching */ } /* 802E9F08-802E9F0C .text diffTevStageIndirect__11J3DTevBlockFv */ void J3DTevBlock::diffTevStageIndirect() { - /* Nonmatching */ } /* 802E9F0C-802E9F10 .text diffTevStage__11J3DTevBlockFv */ void J3DTevBlock::diffTevStage() { - /* Nonmatching */ } /* 802E9F10-802E9F14 .text diffTexCoordScale__11J3DTevBlockFv */ void J3DTevBlock::diffTexCoordScale() { - /* Nonmatching */ } /* 802E9F14-802E9F18 .text diffTexNo__11J3DTevBlockFv */ void J3DTevBlock::diffTexNo() { - /* Nonmatching */ } /* 802E9F18-802E9F24 .text getType__14J3DPEBlockFullFv */ -void J3DPEBlockFull::getType() { - /* Nonmatching */ +u32 J3DPEBlockFull::getType() { + return 'PEFL'; } /* 802E9F24-802E9F2C .text setFog__14J3DPEBlockFullFP6J3DFog */ -void J3DPEBlockFull::setFog(J3DFog*) { - /* Nonmatching */ +void J3DPEBlockFull::setFog(J3DFog* pFog) { + mFog = pFog; } /* 802E9F2C-802E9F34 .text getFog__14J3DPEBlockFullFv */ -void J3DPEBlockFull::getFog() { - /* Nonmatching */ +J3DFog * J3DPEBlockFull::getFog() { + return mFog; } /* 802E9F34-802E9F50 .text setAlphaComp__14J3DPEBlockFullF12J3DAlphaComp */ -void J3DPEBlockFull::setAlphaComp(J3DAlphaComp) { - /* Nonmatching */ +void J3DPEBlockFull::setAlphaComp(J3DAlphaComp alphaComp) { + mAlphaComp = alphaComp; } /* 802E9F50-802E9F6C .text setAlphaComp__14J3DPEBlockFullFPC12J3DAlphaComp */ -void J3DPEBlockFull::setAlphaComp(const J3DAlphaComp*) { - /* Nonmatching */ +void J3DPEBlockFull::setAlphaComp(const J3DAlphaComp* pAlphaComp) { + mAlphaComp = *pAlphaComp; } /* 802E9F6C-802E9F74 .text getAlphaComp__14J3DPEBlockFullFv */ -void J3DPEBlockFull::getAlphaComp() { - /* Nonmatching */ +J3DAlphaComp * J3DPEBlockFull::getAlphaComp() { + return &mAlphaComp; } /* 802E9F74-802E9F98 .text setBlend__14J3DPEBlockFullF8J3DBlend */ -void J3DPEBlockFull::setBlend(J3DBlend) { - /* Nonmatching */ +void J3DPEBlockFull::setBlend(J3DBlend blend) { + mBlend = blend; } /* 802E9F98-802E9FBC .text setBlend__14J3DPEBlockFullFPC8J3DBlend */ -void J3DPEBlockFull::setBlend(const J3DBlend*) { - /* Nonmatching */ +void J3DPEBlockFull::setBlend(const J3DBlend* pBlend) { + mBlend = *pBlend; } /* 802E9FBC-802E9FC4 .text getBlend__14J3DPEBlockFullFv */ -void J3DPEBlockFull::getBlend() { - /* Nonmatching */ +J3DBlend * J3DPEBlockFull::getBlend() { + return &mBlend; } /* 802E9FC4-802E9FD0 .text setZMode__14J3DPEBlockFullF8J3DZMode */ -void J3DPEBlockFull::setZMode(J3DZMode) { - /* Nonmatching */ +void J3DPEBlockFull::setZMode(J3DZMode zMode) { + mZMode = zMode; } /* 802E9FD0-802E9FDC .text setZMode__14J3DPEBlockFullFPC8J3DZMode */ -void J3DPEBlockFull::setZMode(const J3DZMode*) { - /* Nonmatching */ +void J3DPEBlockFull::setZMode(const J3DZMode* pZMode) { + mZMode = *pZMode; } /* 802E9FDC-802E9FE4 .text getZMode__14J3DPEBlockFullFv */ -void J3DPEBlockFull::getZMode() { - /* Nonmatching */ +J3DZMode * J3DPEBlockFull::getZMode() { + return &mZMode; } /* 802E9FE4-802E9FEC .text setZCompLoc__14J3DPEBlockFullFUc */ -void J3DPEBlockFull::setZCompLoc(unsigned char) { - /* Nonmatching */ +void J3DPEBlockFull::setZCompLoc(u8 zCompLoc) { + mZCompLoc = zCompLoc; } /* 802E9FEC-802E9FF8 .text setZCompLoc__14J3DPEBlockFullFPCUc */ -void J3DPEBlockFull::setZCompLoc(const unsigned char*) { - /* Nonmatching */ +void J3DPEBlockFull::setZCompLoc(const u8* pZCompLoc) { + mZCompLoc = *pZCompLoc; } /* 802E9FF8-802EA000 .text getZCompLoc__14J3DPEBlockFullCFv */ -void J3DPEBlockFull::getZCompLoc() const { - /* Nonmatching */ +u8 J3DPEBlockFull::getZCompLoc() const { + return mZCompLoc; } /* 802EA000-802EA008 .text setDither__14J3DPEBlockFullFUc */ -void J3DPEBlockFull::setDither(unsigned char) { - /* Nonmatching */ +void J3DPEBlockFull::setDither(u8 dither) { + mDither = dither; } /* 802EA008-802EA014 .text setDither__14J3DPEBlockFullFPCUc */ -void J3DPEBlockFull::setDither(const unsigned char*) { - /* Nonmatching */ +void J3DPEBlockFull::setDither(const u8* pDither) { + mDither = *pDither; } /* 802EA014-802EA01C .text getDither__14J3DPEBlockFullCFv */ -void J3DPEBlockFull::getDither() const { - /* Nonmatching */ +u8 J3DPEBlockFull::getDither() const { + return mDither; } /* 802EA01C-802EA024 .text getFogOffset__14J3DPEBlockFullCFv */ -void J3DPEBlockFull::getFogOffset() const { - /* Nonmatching */ +u32 J3DPEBlockFull::getFogOffset() const { + return mFogOffset; } /* 802EA024-802EA02C .text setFogOffset__14J3DPEBlockFullFUl */ -void J3DPEBlockFull::setFogOffset(unsigned long) { - /* Nonmatching */ +void J3DPEBlockFull::setFogOffset(u32 offs) { + mFogOffset = offs; } /* 802EA02C-802EA088 .text __dt__14J3DPEBlockFullFv */ @@ -822,88 +837,88 @@ J3DPEBlockFull::~J3DPEBlockFull() { } /* 802EA088-802EA0BC .text diff__16J3DPEBlockFogOffFUl */ -void J3DPEBlockFogOff::diff(unsigned long) { +void J3DPEBlockFogOff::diff(u32 i) { /* Nonmatching */ } /* 802EA0BC-802EA0C8 .text getType__16J3DPEBlockFogOffFv */ -void J3DPEBlockFogOff::getType() { - /* Nonmatching */ +u32 J3DPEBlockFogOff::getType() { + return 'PEFG'; } /* 802EA0C8-802EA0E4 .text setAlphaComp__16J3DPEBlockFogOffF12J3DAlphaComp */ -void J3DPEBlockFogOff::setAlphaComp(J3DAlphaComp) { - /* Nonmatching */ +void J3DPEBlockFogOff::setAlphaComp(J3DAlphaComp alphaComp) { + mAlphaComp = alphaComp; } /* 802EA0E4-802EA100 .text setAlphaComp__16J3DPEBlockFogOffFPC12J3DAlphaComp */ -void J3DPEBlockFogOff::setAlphaComp(const J3DAlphaComp*) { - /* Nonmatching */ +void J3DPEBlockFogOff::setAlphaComp(const J3DAlphaComp* pAlphaComp) { + mAlphaComp = *pAlphaComp; } /* 802EA100-802EA108 .text getAlphaComp__16J3DPEBlockFogOffFv */ -void J3DPEBlockFogOff::getAlphaComp() { - /* Nonmatching */ +J3DAlphaComp * J3DPEBlockFogOff::getAlphaComp() { + return &mAlphaComp; } /* 802EA108-802EA12C .text setBlend__16J3DPEBlockFogOffF8J3DBlend */ -void J3DPEBlockFogOff::setBlend(J3DBlend) { - /* Nonmatching */ +void J3DPEBlockFogOff::setBlend(J3DBlend blend) { + mBlend = blend; } /* 802EA12C-802EA150 .text setBlend__16J3DPEBlockFogOffFPC8J3DBlend */ -void J3DPEBlockFogOff::setBlend(const J3DBlend*) { - /* Nonmatching */ +void J3DPEBlockFogOff::setBlend(const J3DBlend* pBlend) { + mBlend = *pBlend; } /* 802EA150-802EA158 .text getBlend__16J3DPEBlockFogOffFv */ -void J3DPEBlockFogOff::getBlend() { - /* Nonmatching */ +J3DBlend * J3DPEBlockFogOff::getBlend() { + return &mBlend; } /* 802EA158-802EA164 .text setZMode__16J3DPEBlockFogOffF8J3DZMode */ -void J3DPEBlockFogOff::setZMode(J3DZMode) { - /* Nonmatching */ +void J3DPEBlockFogOff::setZMode(J3DZMode zMode) { + mZMode = zMode; } /* 802EA164-802EA170 .text setZMode__16J3DPEBlockFogOffFPC8J3DZMode */ -void J3DPEBlockFogOff::setZMode(const J3DZMode*) { - /* Nonmatching */ +void J3DPEBlockFogOff::setZMode(const J3DZMode* pZMode) { + mZMode = *pZMode; } /* 802EA170-802EA178 .text getZMode__16J3DPEBlockFogOffFv */ -void J3DPEBlockFogOff::getZMode() { - /* Nonmatching */ +J3DZMode * J3DPEBlockFogOff::getZMode() { + return &mZMode; } /* 802EA178-802EA180 .text setZCompLoc__16J3DPEBlockFogOffFUc */ -void J3DPEBlockFogOff::setZCompLoc(unsigned char) { - /* Nonmatching */ +void J3DPEBlockFogOff::setZCompLoc(u8 zCompLoc) { + mZCompLoc = zCompLoc; } /* 802EA180-802EA18C .text setZCompLoc__16J3DPEBlockFogOffFPCUc */ -void J3DPEBlockFogOff::setZCompLoc(const unsigned char*) { - /* Nonmatching */ +void J3DPEBlockFogOff::setZCompLoc(const u8* pZCompLoc) { + mZCompLoc = *pZCompLoc; } /* 802EA18C-802EA194 .text getZCompLoc__16J3DPEBlockFogOffCFv */ -void J3DPEBlockFogOff::getZCompLoc() const { - /* Nonmatching */ +u8 J3DPEBlockFogOff::getZCompLoc() const { + return mZCompLoc; } /* 802EA194-802EA19C .text setDither__16J3DPEBlockFogOffFUc */ -void J3DPEBlockFogOff::setDither(unsigned char) { - /* Nonmatching */ +void J3DPEBlockFogOff::setDither(u8 dither) { + mDither = dither; } /* 802EA19C-802EA1A8 .text setDither__16J3DPEBlockFogOffFPCUc */ -void J3DPEBlockFogOff::setDither(const unsigned char*) { - /* Nonmatching */ +void J3DPEBlockFogOff::setDither(const u8* pDither) { + mDither = *pDither; } /* 802EA1A8-802EA1B0 .text getDither__16J3DPEBlockFogOffCFv */ -void J3DPEBlockFogOff::getDither() const { - /* Nonmatching */ +u8 J3DPEBlockFogOff::getDither() const { + return mDither; } /* 802EA1B0-802EA20C .text __dt__16J3DPEBlockFogOffFv */ @@ -913,187 +928,187 @@ J3DPEBlockFogOff::~J3DPEBlockFogOff() { /* 802EA20C-802EA230 .text indexToPtr__13J3DTevBlock16Fv */ void J3DTevBlock16::indexToPtr() { - /* Nonmatching */ + return indexToPtr_private(mTexNoOffset); } /* 802EA230-802EA23C .text getType__13J3DTevBlock16Fv */ -void J3DTevBlock16::getType() { - /* Nonmatching */ +u32 J3DTevBlock16::getType() { + return 'TV16'; } /* 802EA23C-802EA24C .text setTexNo__13J3DTevBlock16FUlUs */ -void J3DTevBlock16::setTexNo(unsigned long, unsigned short) { - /* Nonmatching */ +void J3DTevBlock16::setTexNo(u32 i, u16 no) { + mTexNo[i] = no; } /* 802EA24C-802EA260 .text setTexNo__13J3DTevBlock16FUlPCUs */ -void J3DTevBlock16::setTexNo(unsigned long, const unsigned short*) { - /* Nonmatching */ +void J3DTevBlock16::setTexNo(u32 i, const u16* pNo) { + mTexNo[i] = *pNo; } /* 802EA260-802EA270 .text getTexNo__13J3DTevBlock16CFUl */ -void J3DTevBlock16::getTexNo(unsigned long) const { - /* Nonmatching */ +u16 J3DTevBlock16::getTexNo(u32 i) const { + return mTexNo[i]; } /* 802EA270-802EA294 .text setTevOrder__13J3DTevBlock16FUl11J3DTevOrder */ -void J3DTevBlock16::setTevOrder(unsigned long, J3DTevOrder) { - /* Nonmatching */ +void J3DTevBlock16::setTevOrder(u32 i, J3DTevOrder order) { + mTevOrder[i] = order; } /* 802EA294-802EA2B8 .text setTevOrder__13J3DTevBlock16FUlPC11J3DTevOrder */ -void J3DTevBlock16::setTevOrder(unsigned long, const J3DTevOrder*) { - /* Nonmatching */ +void J3DTevBlock16::setTevOrder(u32 i, const J3DTevOrder* pOrder) { + mTevOrder[i] = *pOrder; } /* 802EA2B8-802EA2CC .text getTevOrder__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevOrder(unsigned long) { - /* Nonmatching */ +J3DTevOrder * J3DTevBlock16::getTevOrder(u32 i) { + return &mTevOrder[i]; } /* 802EA2CC-802EA2F8 .text setTevColor__13J3DTevBlock16FUl13J3DGXColorS10 */ -void J3DTevBlock16::setTevColor(unsigned long, J3DGXColorS10) { - /* Nonmatching */ +void J3DTevBlock16::setTevColor(u32 i, J3DGXColorS10 color) { + mTevColor[i] = color; } /* 802EA2F8-802EA324 .text setTevColor__13J3DTevBlock16FUlPC13J3DGXColorS10 */ -void J3DTevBlock16::setTevColor(unsigned long, const J3DGXColorS10*) { - /* Nonmatching */ +void J3DTevBlock16::setTevColor(u32 i, const J3DGXColorS10* pColor) { + mTevColor[i] = *pColor; } /* 802EA324-802EA338 .text getTevColor__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevColor(unsigned long) { - /* Nonmatching */ +GXColorS10 * J3DTevBlock16::getTevColor(u32 i) { + return &mTevColor[i]; } /* 802EA338-802EA364 .text setTevKColor__13J3DTevBlock16FUl10J3DGXColor */ -void J3DTevBlock16::setTevKColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DTevBlock16::setTevKColor(u32 i, J3DGXColor color) { + mTevKColor[i] = color; } /* 802EA364-802EA390 .text setTevKColor__13J3DTevBlock16FUlPC10J3DGXColor */ -void J3DTevBlock16::setTevKColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DTevBlock16::setTevKColor(u32 i, const J3DGXColor* pColor) { + mTevKColor[i] = *pColor; } /* 802EA390-802EA3A4 .text getTevKColor__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevKColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DTevBlock16::getTevKColor(u32 i) { + return &mTevKColor[i]; } /* 802EA3A4-802EA3B0 .text setTevKColorSel__13J3DTevBlock16FUlUc */ -void J3DTevBlock16::setTevKColorSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlock16::setTevKColorSel(u32 i, u8 num) { + mTevKColorSel[i] = num; } /* 802EA3B0-802EA3C0 .text setTevKColorSel__13J3DTevBlock16FUlPCUc */ -void J3DTevBlock16::setTevKColorSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock16::setTevKColorSel(u32 i, const u8* pNum) { + mTevKColorSel[i] = *pNum; } /* 802EA3C0-802EA3CC .text getTevKColorSel__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevKColorSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlock16::getTevKColorSel(u32 i) { + return mTevKAlphaSel[i]; } /* 802EA3CC-802EA3D8 .text setTevKAlphaSel__13J3DTevBlock16FUlUc */ -void J3DTevBlock16::setTevKAlphaSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlock16::setTevKAlphaSel(u32 i, u8 num) { + mTevKAlphaSel[i] = num; } /* 802EA3D8-802EA3E8 .text setTevKAlphaSel__13J3DTevBlock16FUlPCUc */ -void J3DTevBlock16::setTevKAlphaSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock16::setTevKAlphaSel(u32 i, const u8* pNum) { + mTevKAlphaSel[i] = *pNum; } /* 802EA3E8-802EA3F4 .text getTevKAlphaSel__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevKAlphaSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlock16::getTevKAlphaSel(u32 i) { + return mTevKAlphaSel[i]; } /* 802EA3F4-802EA3FC .text setTevStageNum__13J3DTevBlock16FUc */ -void J3DTevBlock16::setTevStageNum(unsigned char) { - /* Nonmatching */ +void J3DTevBlock16::setTevStageNum(u8 num) { + mTevStageNum = num; } /* 802EA3FC-802EA408 .text setTevStageNum__13J3DTevBlock16FPCUc */ -void J3DTevBlock16::setTevStageNum(const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock16::setTevStageNum(const u8* pNum) { + mTevStageNum = *pNum; } /* 802EA408-802EA410 .text getTevStageNum__13J3DTevBlock16CFv */ -void J3DTevBlock16::getTevStageNum() const { +u8 J3DTevBlock16::getTevStageNum() const { /* Nonmatching */ } /* 802EA410-802EA44C .text setTevStage__13J3DTevBlock16FUl11J3DTevStage */ -void J3DTevBlock16::setTevStage(unsigned long, J3DTevStage) { +void J3DTevBlock16::setTevStage(u32 i, J3DTevStage stage) { /* Nonmatching */ } /* 802EA44C-802EA488 .text setTevStage__13J3DTevBlock16FUlPC11J3DTevStage */ -void J3DTevBlock16::setTevStage(unsigned long, const J3DTevStage*) { +void J3DTevBlock16::setTevStage(u32 i, const J3DTevStage* pStage) { /* Nonmatching */ } /* 802EA488-802EA49C .text getTevStage__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevStage(unsigned long) { +J3DTevStage * J3DTevBlock16::getTevStage(u32 i) { /* Nonmatching */ } /* 802EA49C-802EA4D4 .text setTevSwapModeInfo__13J3DTevBlock16FUl18J3DTevSwapModeInfo */ -void J3DTevBlock16::setTevSwapModeInfo(unsigned long, J3DTevSwapModeInfo) { +void J3DTevBlock16::setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo) { /* Nonmatching */ } /* 802EA4D4-802EA50C .text setTevSwapModeInfo__13J3DTevBlock16FUlPC18J3DTevSwapModeInfo */ -void J3DTevBlock16::setTevSwapModeInfo(unsigned long, const J3DTevSwapModeInfo*) { +void J3DTevBlock16::setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { /* Nonmatching */ } /* 802EA50C-802EA51C .text setTevSwapModeTable__13J3DTevBlock16FUl19J3DTevSwapModeTable */ -void J3DTevBlock16::setTevSwapModeTable(unsigned long, J3DTevSwapModeTable) { +void J3DTevBlock16::setTevSwapModeTable(u32 i, J3DTevSwapModeTable table) { /* Nonmatching */ } /* 802EA51C-802EA52C .text setTevSwapModeTable__13J3DTevBlock16FUlPC19J3DTevSwapModeTable */ -void J3DTevBlock16::setTevSwapModeTable(unsigned long, const J3DTevSwapModeTable*) { +void J3DTevBlock16::setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) { /* Nonmatching */ } /* 802EA52C-802EA53C .text getTevSwapModeTable__13J3DTevBlock16FUl */ -void J3DTevBlock16::getTevSwapModeTable(unsigned long) { +J3DTevSwapModeTable * J3DTevBlock16::getTevSwapModeTable(u32 i) { /* Nonmatching */ } /* 802EA53C-802EA550 .text setIndTevStage__13J3DTevBlock16FUl14J3DIndTevStage */ -void J3DTevBlock16::setIndTevStage(unsigned long, J3DIndTevStage) { - /* Nonmatching */ +void J3DTevBlock16::setIndTevStage(u32 i, J3DIndTevStage stage) { + mIndTevStage[i] = stage; } /* 802EA550-802EA564 .text setIndTevStage__13J3DTevBlock16FUlPC14J3DIndTevStage */ -void J3DTevBlock16::setIndTevStage(unsigned long, const J3DIndTevStage*) { - /* Nonmatching */ +void J3DTevBlock16::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { + mIndTevStage[i] = *pStage; } /* 802EA564-802EA578 .text getIndTevStage__13J3DTevBlock16FUl */ -void J3DTevBlock16::getIndTevStage(unsigned long) { +J3DIndTevStage * J3DTevBlock16::getIndTevStage(u32 i) { /* Nonmatching */ } /* 802EA578-802EA580 .text getTexNoOffset__13J3DTevBlock16CFv */ -void J3DTevBlock16::getTexNoOffset() const { +u32 J3DTevBlock16::getTexNoOffset() const { /* Nonmatching */ } /* 802EA580-802EA588 .text getTevRegOffset__13J3DTevBlock16CFv */ -void J3DTevBlock16::getTevRegOffset() const { - /* Nonmatching */ +u32 J3DTevBlock16::getTevRegOffset() const { + return mTevRegOffset; } /* 802EA588-802EA590 .text setTevRegOffset__13J3DTevBlock16FUl */ -void J3DTevBlock16::setTevRegOffset(unsigned long) { - /* Nonmatching */ +void J3DTevBlock16::setTevRegOffset(u32 offs) { + mTevRegOffset = offs; } /* 802EA590-802EA5EC .text __dt__13J3DTevBlock16Fv */ @@ -1102,7 +1117,7 @@ J3DTevBlock16::~J3DTevBlock16() { } /* 802EA5EC-802EA5F4 .text setTexNoOffset__11J3DTevBlockFUl */ -void J3DTevBlock::setTexNoOffset(unsigned long) { +void J3DTevBlock::setTexNoOffset(u32 i) { /* Nonmatching */ } @@ -1113,187 +1128,187 @@ void J3DTevBlock4::ptrToIndex() { /* 802EA5F8-802EA61C .text indexToPtr__12J3DTevBlock4Fv */ void J3DTevBlock4::indexToPtr() { - /* Nonmatching */ + return indexToPtr_private(mTexNoOffset); } /* 802EA61C-802EA628 .text getType__12J3DTevBlock4Fv */ -void J3DTevBlock4::getType() { +u32 J3DTevBlock4::getType() { /* Nonmatching */ } /* 802EA628-802EA638 .text setTexNo__12J3DTevBlock4FUlUs */ -void J3DTevBlock4::setTexNo(unsigned long, unsigned short) { - /* Nonmatching */ +void J3DTevBlock4::setTexNo(u32 i, u16 no) { + mTexNo[i] = no; } /* 802EA638-802EA64C .text setTexNo__12J3DTevBlock4FUlPCUs */ -void J3DTevBlock4::setTexNo(unsigned long, const unsigned short*) { - /* Nonmatching */ +void J3DTevBlock4::setTexNo(u32 i, const u16* pNo) { + mTexNo[i] = *pNo; } /* 802EA64C-802EA65C .text getTexNo__12J3DTevBlock4CFUl */ -void J3DTevBlock4::getTexNo(unsigned long) const { - /* Nonmatching */ +u16 J3DTevBlock4::getTexNo(u32 i) const { + return mTexNo[i]; } /* 802EA65C-802EA680 .text setTevOrder__12J3DTevBlock4FUl11J3DTevOrder */ -void J3DTevBlock4::setTevOrder(unsigned long, J3DTevOrder) { - /* Nonmatching */ +void J3DTevBlock4::setTevOrder(u32 i, J3DTevOrder order) { + mTevOrder[i] = order; } /* 802EA680-802EA6A4 .text setTevOrder__12J3DTevBlock4FUlPC11J3DTevOrder */ -void J3DTevBlock4::setTevOrder(unsigned long, const J3DTevOrder*) { - /* Nonmatching */ +void J3DTevBlock4::setTevOrder(u32 i, const J3DTevOrder* pOrder) { + mTevOrder[i] = *pOrder; } /* 802EA6A4-802EA6B8 .text getTevOrder__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevOrder(unsigned long) { - /* Nonmatching */ +J3DTevOrder * J3DTevBlock4::getTevOrder(u32 i) { + return &mTevOrder[i]; } /* 802EA6B8-802EA6E4 .text setTevColor__12J3DTevBlock4FUl13J3DGXColorS10 */ -void J3DTevBlock4::setTevColor(unsigned long, J3DGXColorS10) { - /* Nonmatching */ +void J3DTevBlock4::setTevColor(u32 i, J3DGXColorS10 color) { + mTevColor[i] = color; } /* 802EA6E4-802EA710 .text setTevColor__12J3DTevBlock4FUlPC13J3DGXColorS10 */ -void J3DTevBlock4::setTevColor(unsigned long, const J3DGXColorS10*) { - /* Nonmatching */ +void J3DTevBlock4::setTevColor(u32 i, const J3DGXColorS10* pColor) { + mTevColor[i] = *pColor; } /* 802EA710-802EA724 .text getTevColor__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevColor(unsigned long) { - /* Nonmatching */ +GXColorS10 * J3DTevBlock4::getTevColor(u32 i) { + return &mTevColor[i]; } /* 802EA724-802EA750 .text setTevKColor__12J3DTevBlock4FUl10J3DGXColor */ -void J3DTevBlock4::setTevKColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DTevBlock4::setTevKColor(u32 i, J3DGXColor color) { + mTevKColor[i] = color; } /* 802EA750-802EA77C .text setTevKColor__12J3DTevBlock4FUlPC10J3DGXColor */ -void J3DTevBlock4::setTevKColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DTevBlock4::setTevKColor(u32 i, const J3DGXColor* pColor) { + mTevKColor[i] = *pColor; } /* 802EA77C-802EA790 .text getTevKColor__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevKColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DTevBlock4::getTevKColor(u32 i) { + return &mTevKColor[i]; } /* 802EA790-802EA79C .text setTevKColorSel__12J3DTevBlock4FUlUc */ -void J3DTevBlock4::setTevKColorSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlock4::setTevKColorSel(u32 i, u8 num) { + mTevKColorSel[i] = num; } /* 802EA79C-802EA7AC .text setTevKColorSel__12J3DTevBlock4FUlPCUc */ -void J3DTevBlock4::setTevKColorSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock4::setTevKColorSel(u32 i, const u8* pNum) { + mTevKColorSel[i] = *pNum; } /* 802EA7AC-802EA7B8 .text getTevKColorSel__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevKColorSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlock4::getTevKColorSel(u32 i) { + return mTevKAlphaSel[i]; } /* 802EA7B8-802EA7C4 .text setTevKAlphaSel__12J3DTevBlock4FUlUc */ -void J3DTevBlock4::setTevKAlphaSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlock4::setTevKAlphaSel(u32 i, u8 num) { + mTevKAlphaSel[i] = num; } /* 802EA7C4-802EA7D4 .text setTevKAlphaSel__12J3DTevBlock4FUlPCUc */ -void J3DTevBlock4::setTevKAlphaSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock4::setTevKAlphaSel(u32 i, const u8* pNum) { + mTevKAlphaSel[i] = *pNum; } /* 802EA7D4-802EA7E0 .text getTevKAlphaSel__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevKAlphaSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlock4::getTevKAlphaSel(u32 i) { + return mTevKAlphaSel[i]; } /* 802EA7E0-802EA7E8 .text setTevStageNum__12J3DTevBlock4FUc */ -void J3DTevBlock4::setTevStageNum(unsigned char) { - /* Nonmatching */ +void J3DTevBlock4::setTevStageNum(u8 num) { + mTevStageNum = num; } /* 802EA7E8-802EA7F4 .text setTevStageNum__12J3DTevBlock4FPCUc */ -void J3DTevBlock4::setTevStageNum(const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock4::setTevStageNum(const u8* pNum) { + mTevStageNum = *pNum; } /* 802EA7F4-802EA7FC .text getTevStageNum__12J3DTevBlock4CFv */ -void J3DTevBlock4::getTevStageNum() const { +u8 J3DTevBlock4::getTevStageNum() const { /* Nonmatching */ } /* 802EA7FC-802EA838 .text setTevStage__12J3DTevBlock4FUl11J3DTevStage */ -void J3DTevBlock4::setTevStage(unsigned long, J3DTevStage) { +void J3DTevBlock4::setTevStage(u32 i, J3DTevStage stage) { /* Nonmatching */ } /* 802EA838-802EA874 .text setTevStage__12J3DTevBlock4FUlPC11J3DTevStage */ -void J3DTevBlock4::setTevStage(unsigned long, const J3DTevStage*) { +void J3DTevBlock4::setTevStage(u32 i, const J3DTevStage* pStage) { /* Nonmatching */ } /* 802EA874-802EA888 .text getTevStage__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevStage(unsigned long) { +J3DTevStage * J3DTevBlock4::getTevStage(u32 i) { /* Nonmatching */ } /* 802EA888-802EA8C0 .text setTevSwapModeInfo__12J3DTevBlock4FUl18J3DTevSwapModeInfo */ -void J3DTevBlock4::setTevSwapModeInfo(unsigned long, J3DTevSwapModeInfo) { +void J3DTevBlock4::setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo) { /* Nonmatching */ } /* 802EA8C0-802EA8F8 .text setTevSwapModeInfo__12J3DTevBlock4FUlPC18J3DTevSwapModeInfo */ -void J3DTevBlock4::setTevSwapModeInfo(unsigned long, const J3DTevSwapModeInfo*) { +void J3DTevBlock4::setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { /* Nonmatching */ } /* 802EA8F8-802EA908 .text setTevSwapModeTable__12J3DTevBlock4FUl19J3DTevSwapModeTable */ -void J3DTevBlock4::setTevSwapModeTable(unsigned long, J3DTevSwapModeTable) { +void J3DTevBlock4::setTevSwapModeTable(u32 i, J3DTevSwapModeTable table) { /* Nonmatching */ } /* 802EA908-802EA918 .text setTevSwapModeTable__12J3DTevBlock4FUlPC19J3DTevSwapModeTable */ -void J3DTevBlock4::setTevSwapModeTable(unsigned long, const J3DTevSwapModeTable*) { +void J3DTevBlock4::setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) { /* Nonmatching */ } /* 802EA918-802EA928 .text getTevSwapModeTable__12J3DTevBlock4FUl */ -void J3DTevBlock4::getTevSwapModeTable(unsigned long) { +J3DTevSwapModeTable * J3DTevBlock4::getTevSwapModeTable(u32 i) { /* Nonmatching */ } /* 802EA928-802EA93C .text setIndTevStage__12J3DTevBlock4FUl14J3DIndTevStage */ -void J3DTevBlock4::setIndTevStage(unsigned long, J3DIndTevStage) { - /* Nonmatching */ +void J3DTevBlock4::setIndTevStage(u32 i, J3DIndTevStage stage) { + mIndTevStage[i] = stage; } /* 802EA93C-802EA950 .text setIndTevStage__12J3DTevBlock4FUlPC14J3DIndTevStage */ -void J3DTevBlock4::setIndTevStage(unsigned long, const J3DIndTevStage*) { - /* Nonmatching */ +void J3DTevBlock4::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { + mIndTevStage[i] = *pStage; } /* 802EA950-802EA964 .text getIndTevStage__12J3DTevBlock4FUl */ -void J3DTevBlock4::getIndTevStage(unsigned long) { +J3DIndTevStage * J3DTevBlock4::getIndTevStage(u32 i) { /* Nonmatching */ } /* 802EA964-802EA96C .text getTexNoOffset__12J3DTevBlock4CFv */ -void J3DTevBlock4::getTexNoOffset() const { +u32 J3DTevBlock4::getTexNoOffset() const { /* Nonmatching */ } /* 802EA96C-802EA974 .text getTevRegOffset__12J3DTevBlock4CFv */ -void J3DTevBlock4::getTevRegOffset() const { - /* Nonmatching */ +u32 J3DTevBlock4::getTevRegOffset() const { + return mTevRegOffset; } /* 802EA974-802EA97C .text setTevRegOffset__12J3DTevBlock4FUl */ -void J3DTevBlock4::setTevRegOffset(unsigned long) { - /* Nonmatching */ +void J3DTevBlock4::setTevRegOffset(u32 offs) { + mTevRegOffset = offs; } /* 802EA97C-802EA9D8 .text __dt__12J3DTevBlock4Fv */ @@ -1308,187 +1323,187 @@ void J3DTevBlock2::ptrToIndex() { /* 802EA9DC-802EAA00 .text indexToPtr__12J3DTevBlock2Fv */ void J3DTevBlock2::indexToPtr() { - /* Nonmatching */ + return indexToPtr_private(mTexNoOffset); } /* 802EAA00-802EAA0C .text getType__12J3DTevBlock2Fv */ -void J3DTevBlock2::getType() { - /* Nonmatching */ +u32 J3DTevBlock2::getType() { + return 'TVB2'; } /* 802EAA0C-802EAA1C .text setTexNo__12J3DTevBlock2FUlUs */ -void J3DTevBlock2::setTexNo(unsigned long, unsigned short) { - /* Nonmatching */ +void J3DTevBlock2::setTexNo(u32 i, u16 no) { + mTexNo[i] = no; } /* 802EAA1C-802EAA30 .text setTexNo__12J3DTevBlock2FUlPCUs */ -void J3DTevBlock2::setTexNo(unsigned long, const unsigned short*) { - /* Nonmatching */ +void J3DTevBlock2::setTexNo(u32 i, const u16* pNo) { + mTexNo[i] = *pNo; } /* 802EAA30-802EAA40 .text getTexNo__12J3DTevBlock2CFUl */ -void J3DTevBlock2::getTexNo(unsigned long) const { - /* Nonmatching */ +u16 J3DTevBlock2::getTexNo(u32 i) const { + return mTexNo[i]; } /* 802EAA40-802EAA64 .text setTevOrder__12J3DTevBlock2FUl11J3DTevOrder */ -void J3DTevBlock2::setTevOrder(unsigned long, J3DTevOrder) { - /* Nonmatching */ +void J3DTevBlock2::setTevOrder(u32 i, J3DTevOrder order) { + mTevOrder[i] = order; } /* 802EAA64-802EAA88 .text setTevOrder__12J3DTevBlock2FUlPC11J3DTevOrder */ -void J3DTevBlock2::setTevOrder(unsigned long, const J3DTevOrder*) { - /* Nonmatching */ +void J3DTevBlock2::setTevOrder(u32 i, const J3DTevOrder* pOrder) { + mTevOrder[i] = *pOrder; } /* 802EAA88-802EAA9C .text getTevOrder__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevOrder(unsigned long) { - /* Nonmatching */ +J3DTevOrder * J3DTevBlock2::getTevOrder(u32 i) { + return &mTevOrder[i]; } /* 802EAA9C-802EAAC8 .text setTevColor__12J3DTevBlock2FUl13J3DGXColorS10 */ -void J3DTevBlock2::setTevColor(unsigned long, J3DGXColorS10) { - /* Nonmatching */ +void J3DTevBlock2::setTevColor(u32 i, J3DGXColorS10 color) { + mTevColor[i] = color; } /* 802EAAC8-802EAAF4 .text setTevColor__12J3DTevBlock2FUlPC13J3DGXColorS10 */ -void J3DTevBlock2::setTevColor(unsigned long, const J3DGXColorS10*) { - /* Nonmatching */ +void J3DTevBlock2::setTevColor(u32 i, const J3DGXColorS10* pColor) { + mTevColor[i] = *pColor; } /* 802EAAF4-802EAB08 .text getTevColor__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevColor(unsigned long) { - /* Nonmatching */ +GXColorS10 * J3DTevBlock2::getTevColor(u32 i) { + return &mTevColor[i]; } /* 802EAB08-802EAB34 .text setTevKColor__12J3DTevBlock2FUl10J3DGXColor */ -void J3DTevBlock2::setTevKColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DTevBlock2::setTevKColor(u32 i, J3DGXColor color) { + mTevKColor[i] = color; } /* 802EAB34-802EAB60 .text setTevKColor__12J3DTevBlock2FUlPC10J3DGXColor */ -void J3DTevBlock2::setTevKColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DTevBlock2::setTevKColor(u32 i, const J3DGXColor* pColor) { + mTevKColor[i] = *pColor; } /* 802EAB60-802EAB74 .text getTevKColor__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevKColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DTevBlock2::getTevKColor(u32 i) { + return &mTevKColor[i]; } /* 802EAB74-802EAB80 .text setTevKColorSel__12J3DTevBlock2FUlUc */ -void J3DTevBlock2::setTevKColorSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlock2::setTevKColorSel(u32 i, u8 num) { + mTevKColorSel[i] = num; } /* 802EAB80-802EAB90 .text setTevKColorSel__12J3DTevBlock2FUlPCUc */ -void J3DTevBlock2::setTevKColorSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock2::setTevKColorSel(u32 i, const u8* pNum) { + mTevKColorSel[i] = *pNum; } /* 802EAB90-802EAB9C .text getTevKColorSel__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevKColorSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlock2::getTevKColorSel(u32 i) { + return mTevKAlphaSel[i]; } /* 802EAB9C-802EABA8 .text setTevKAlphaSel__12J3DTevBlock2FUlUc */ -void J3DTevBlock2::setTevKAlphaSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlock2::setTevKAlphaSel(u32 i, u8 num) { + mTevKAlphaSel[i] = num; } /* 802EABA8-802EABB8 .text setTevKAlphaSel__12J3DTevBlock2FUlPCUc */ -void J3DTevBlock2::setTevKAlphaSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock2::setTevKAlphaSel(u32 i, const u8* pNum) { + mTevKAlphaSel[i] = *pNum; } /* 802EABB8-802EABC4 .text getTevKAlphaSel__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevKAlphaSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlock2::getTevKAlphaSel(u32 i) { + return mTevKAlphaSel[i]; } /* 802EABC4-802EABCC .text setTevStageNum__12J3DTevBlock2FUc */ -void J3DTevBlock2::setTevStageNum(unsigned char) { - /* Nonmatching */ +void J3DTevBlock2::setTevStageNum(u8 num) { + mTevStageNum = num; } /* 802EABCC-802EABD8 .text setTevStageNum__12J3DTevBlock2FPCUc */ -void J3DTevBlock2::setTevStageNum(const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock2::setTevStageNum(const u8* pNum) { + mTevStageNum = *pNum; } /* 802EABD8-802EABE0 .text getTevStageNum__12J3DTevBlock2CFv */ -void J3DTevBlock2::getTevStageNum() const { - /* Nonmatching */ +u8 J3DTevBlock2::getTevStageNum() const { + return mTevStageNum; } /* 802EABE0-802EAC1C .text setTevStage__12J3DTevBlock2FUl11J3DTevStage */ -void J3DTevBlock2::setTevStage(unsigned long, J3DTevStage) { - /* Nonmatching */ +void J3DTevBlock2::setTevStage(u32 i, J3DTevStage stage) { + mTevStage[i] = stage; } /* 802EAC1C-802EAC58 .text setTevStage__12J3DTevBlock2FUlPC11J3DTevStage */ -void J3DTevBlock2::setTevStage(unsigned long, const J3DTevStage*) { - /* Nonmatching */ +void J3DTevBlock2::setTevStage(u32 i, const J3DTevStage* pStage) { + mTevStage[i] = *pStage; } /* 802EAC58-802EAC6C .text getTevStage__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevStage(unsigned long) { - /* Nonmatching */ +J3DTevStage * J3DTevBlock2::getTevStage(u32 i) { + return &mTevStage[i]; } /* 802EAC6C-802EACA4 .text setTevSwapModeInfo__12J3DTevBlock2FUl18J3DTevSwapModeInfo */ -void J3DTevBlock2::setTevSwapModeInfo(unsigned long, J3DTevSwapModeInfo) { - /* Nonmatching */ +void J3DTevBlock2::setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo swapModeInfo) { + // mTevStage[i].mTevSwapModeInfo = swapModeInfo; } /* 802EACA4-802EACDC .text setTevSwapModeInfo__12J3DTevBlock2FUlPC18J3DTevSwapModeInfo */ -void J3DTevBlock2::setTevSwapModeInfo(unsigned long, const J3DTevSwapModeInfo*) { - /* Nonmatching */ +void J3DTevBlock2::setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo* pSwapModeInfo) { + // mTevStage[i].mTevSwapModeInfo = *pSwapModeInfo; } /* 802EACDC-802EACEC .text setTevSwapModeTable__12J3DTevBlock2FUl19J3DTevSwapModeTable */ -void J3DTevBlock2::setTevSwapModeTable(unsigned long, J3DTevSwapModeTable) { - /* Nonmatching */ +void J3DTevBlock2::setTevSwapModeTable(u32 i, J3DTevSwapModeTable table) { + mTevSwapModeTable[i] = table; } /* 802EACEC-802EACFC .text setTevSwapModeTable__12J3DTevBlock2FUlPC19J3DTevSwapModeTable */ -void J3DTevBlock2::setTevSwapModeTable(unsigned long, const J3DTevSwapModeTable*) { - /* Nonmatching */ +void J3DTevBlock2::setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) { + mTevSwapModeTable[i] = *pTable; } /* 802EACFC-802EAD0C .text getTevSwapModeTable__12J3DTevBlock2FUl */ -void J3DTevBlock2::getTevSwapModeTable(unsigned long) { - /* Nonmatching */ +J3DTevSwapModeTable * J3DTevBlock2::getTevSwapModeTable(u32 i) { + return &mTevSwapModeTable[i]; } /* 802EAD0C-802EAD20 .text setIndTevStage__12J3DTevBlock2FUl14J3DIndTevStage */ -void J3DTevBlock2::setIndTevStage(unsigned long, J3DIndTevStage) { - /* Nonmatching */ +void J3DTevBlock2::setIndTevStage(u32 i, J3DIndTevStage stage) { + mIndTevStage[i] = stage; } /* 802EAD20-802EAD34 .text setIndTevStage__12J3DTevBlock2FUlPC14J3DIndTevStage */ -void J3DTevBlock2::setIndTevStage(unsigned long, const J3DIndTevStage*) { - /* Nonmatching */ +void J3DTevBlock2::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { + mIndTevStage[i] = *pStage; } /* 802EAD34-802EAD48 .text getIndTevStage__12J3DTevBlock2FUl */ -void J3DTevBlock2::getIndTevStage(unsigned long) { - /* Nonmatching */ +J3DIndTevStage * J3DTevBlock2::getIndTevStage(u32 i) { + return &mIndTevStage[i]; } /* 802EAD48-802EAD50 .text getTexNoOffset__12J3DTevBlock2CFv */ -void J3DTevBlock2::getTexNoOffset() const { - /* Nonmatching */ +u32 J3DTevBlock2::getTexNoOffset() const { + return mTexNoOffset; } /* 802EAD50-802EAD58 .text getTevRegOffset__12J3DTevBlock2CFv */ -void J3DTevBlock2::getTevRegOffset() const { - /* Nonmatching */ +u32 J3DTevBlock2::getTevRegOffset() const { + return mTevRegOffset; } /* 802EAD58-802EAD60 .text setTevRegOffset__12J3DTevBlock2FUl */ -void J3DTevBlock2::setTevRegOffset(unsigned long) { - /* Nonmatching */ +void J3DTevBlock2::setTevRegOffset(u32 offs) { + mTevRegOffset = offs; } /* 802EAD60-802EADBC .text __dt__12J3DTevBlock2Fv */ @@ -1498,97 +1513,94 @@ J3DTevBlock2::~J3DTevBlock2() { /* 802EADBC-802EADC0 .text ptrToIndex__12J3DTevBlock1Fv */ void J3DTevBlock1::ptrToIndex() { - /* Nonmatching */ } /* 802EADC0-802EADE4 .text indexToPtr__12J3DTevBlock1Fv */ void J3DTevBlock1::indexToPtr() { - /* Nonmatching */ + return indexToPtr_private(mTexNoOffset); } /* 802EADE4-802EADF0 .text getType__12J3DTevBlock1Fv */ -void J3DTevBlock1::getType() { - /* Nonmatching */ +u32 J3DTevBlock1::getType() { + return 'TVB1'; } /* 802EADF0-802EAE00 .text setTexNo__12J3DTevBlock1FUlUs */ -void J3DTevBlock1::setTexNo(unsigned long, unsigned short) { - /* Nonmatching */ +void J3DTevBlock1::setTexNo(u32 i, u16 no) { + mTexNo[i] = no; } /* 802EAE00-802EAE14 .text setTexNo__12J3DTevBlock1FUlPCUs */ -void J3DTevBlock1::setTexNo(unsigned long, const unsigned short*) { - /* Nonmatching */ +void J3DTevBlock1::setTexNo(u32 i, const u16* pNo) { + mTexNo[i] = *pNo; } /* 802EAE14-802EAE24 .text getTexNo__12J3DTevBlock1CFUl */ -void J3DTevBlock1::getTexNo(unsigned long) const { - /* Nonmatching */ +u16 J3DTevBlock1::getTexNo(u32 i) const { + return mTexNo[i]; } /* 802EAE24-802EAE48 .text setTevOrder__12J3DTevBlock1FUl11J3DTevOrder */ -void J3DTevBlock1::setTevOrder(unsigned long, J3DTevOrder) { - /* Nonmatching */ +void J3DTevBlock1::setTevOrder(u32 i, J3DTevOrder order) { + mTevOrder[i] = order; } /* 802EAE48-802EAE6C .text setTevOrder__12J3DTevBlock1FUlPC11J3DTevOrder */ -void J3DTevBlock1::setTevOrder(unsigned long, const J3DTevOrder*) { - /* Nonmatching */ +void J3DTevBlock1::setTevOrder(u32 i, const J3DTevOrder* pOrder) { + mTevOrder[i] = *pOrder; } /* 802EAE6C-802EAE80 .text getTevOrder__12J3DTevBlock1FUl */ -void J3DTevBlock1::getTevOrder(unsigned long) { - /* Nonmatching */ +J3DTevOrder * J3DTevBlock1::getTevOrder(u32 i) { + return &mTevOrder[i]; } /* 802EAE80-802EAE84 .text setTevStageNum__12J3DTevBlock1FUc */ -void J3DTevBlock1::setTevStageNum(unsigned char) { - /* Nonmatching */ +void J3DTevBlock1::setTevStageNum(u8 num) { } /* 802EAE84-802EAE88 .text setTevStageNum__12J3DTevBlock1FPCUc */ -void J3DTevBlock1::setTevStageNum(const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock1::setTevStageNum(const u8* pNum) { } /* 802EAE88-802EAE90 .text getTevStageNum__12J3DTevBlock1CFv */ -void J3DTevBlock1::getTevStageNum() const { - /* Nonmatching */ +u8 J3DTevBlock1::getTevStageNum() const { + return 1; } /* 802EAE90-802EAECC .text setTevStage__12J3DTevBlock1FUl11J3DTevStage */ -void J3DTevBlock1::setTevStage(unsigned long, J3DTevStage) { - /* Nonmatching */ +void J3DTevBlock1::setTevStage(u32 i, J3DTevStage stage) { + mTevStage[i] = stage; } /* 802EAECC-802EAF08 .text setTevStage__12J3DTevBlock1FUlPC11J3DTevStage */ -void J3DTevBlock1::setTevStage(unsigned long, const J3DTevStage*) { - /* Nonmatching */ +void J3DTevBlock1::setTevStage(u32 i, const J3DTevStage* pStage) { + mTevStage[i] = *pStage; } /* 802EAF08-802EAF1C .text getTevStage__12J3DTevBlock1FUl */ -void J3DTevBlock1::getTevStage(unsigned long) { - /* Nonmatching */ +J3DTevStage * J3DTevBlock1::getTevStage(u32 i) { + return &mTevStage[i]; } /* 802EAF1C-802EAF30 .text setIndTevStage__12J3DTevBlock1FUl14J3DIndTevStage */ -void J3DTevBlock1::setIndTevStage(unsigned long, J3DIndTevStage) { - /* Nonmatching */ +void J3DTevBlock1::setIndTevStage(u32 i, J3DIndTevStage stage) { + mIndTevStage[i] = stage; } /* 802EAF30-802EAF44 .text setIndTevStage__12J3DTevBlock1FUlPC14J3DIndTevStage */ -void J3DTevBlock1::setIndTevStage(unsigned long, const J3DIndTevStage*) { - /* Nonmatching */ +void J3DTevBlock1::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { + mIndTevStage[i] = *pStage; } /* 802EAF44-802EAF58 .text getIndTevStage__12J3DTevBlock1FUl */ -void J3DTevBlock1::getIndTevStage(unsigned long) { - /* Nonmatching */ +J3DIndTevStage * J3DTevBlock1::getIndTevStage(u32 i) { + return &mIndTevStage[i]; } /* 802EAF58-802EAF60 .text getTexNoOffset__12J3DTevBlock1CFv */ -void J3DTevBlock1::getTexNoOffset() const { - /* Nonmatching */ +u32 J3DTevBlock1::getTexNoOffset() const { + return mTexNoOffset; } /* 802EAF60-802EAFBC .text __dt__12J3DTevBlock1Fv */ @@ -1597,188 +1609,181 @@ J3DTevBlock1::~J3DTevBlock1() { } /* 802EAFBC-802EAFC0 .text setTevKColorSel__11J3DTevBlockFUlPCUc */ -void J3DTevBlock::setTevKColorSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock::setTevKColorSel(u32 i, const u8* pNum) { } /* 802EAFC0-802EAFC4 .text setTevKAlphaSel__11J3DTevBlockFUlPCUc */ -void J3DTevBlock::setTevKAlphaSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock::setTevKAlphaSel(u32 i, const u8* pNum) { } /* 802EAFC4-802EAFC8 .text setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo */ -void J3DTevBlock::setTevSwapModeInfo(unsigned long, J3DTevSwapModeInfo) { - /* Nonmatching */ +void J3DTevBlock::setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo) { } /* 802EAFC8-802EAFCC .text setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo */ -void J3DTevBlock::setTevSwapModeInfo(unsigned long, const J3DTevSwapModeInfo*) { - /* Nonmatching */ +void J3DTevBlock::setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { } /* 802EAFCC-802EAFD0 .text setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable */ -void J3DTevBlock::setTevSwapModeTable(unsigned long, const J3DTevSwapModeTable*) { - /* Nonmatching */ +void J3DTevBlock::setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) { } /* 802EAFD0-802EAFD8 .text getTevRegOffset__11J3DTevBlockCFv */ -void J3DTevBlock::getTevRegOffset() const { - /* Nonmatching */ +u32 J3DTevBlock::getTevRegOffset() const { + return 0; } /* 802EAFD8-802EAFDC .text setTevRegOffset__11J3DTevBlockFUl */ -void J3DTevBlock::setTevRegOffset(unsigned long) { - /* Nonmatching */ +void J3DTevBlock::setTevRegOffset(u32 offs) { } /* 802EAFDC-802EAFE0 .text load__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::load() { - /* Nonmatching */ } /* 802EAFE0-802EB004 .text indexToPtr__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::indexToPtr() { - /* Nonmatching */ + return indexToPtr_private(mTexNoOffset); } /* 802EB004-802EB010 .text getType__18J3DTevBlockPatchedFv */ -void J3DTevBlockPatched::getType() { - /* Nonmatching */ +u32 J3DTevBlockPatched::getType() { + return 'TVPT'; } /* 802EB010-802EB018 .text setTevStageNum__18J3DTevBlockPatchedFUc */ -void J3DTevBlockPatched::setTevStageNum(unsigned char) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevStageNum(u8 num) { + mTevStageNum = num; } /* 802EB018-802EB024 .text setTevStageNum__18J3DTevBlockPatchedFPCUc */ -void J3DTevBlockPatched::setTevStageNum(const unsigned char*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevStageNum(const u8* pNum) { + mTevStageNum = *pNum; } /* 802EB024-802EB02C .text getTevStageNum__18J3DTevBlockPatchedCFv */ -void J3DTevBlockPatched::getTevStageNum() const { - /* Nonmatching */ +u8 J3DTevBlockPatched::getTevStageNum() const { + return mTevStageNum; } /* 802EB02C-802EB03C .text setTexNo__18J3DTevBlockPatchedFUlUs */ -void J3DTevBlockPatched::setTexNo(unsigned long, unsigned short) { - /* Nonmatching */ +void J3DTevBlockPatched::setTexNo(u32 i, u16 no) { + mTexNo[i] = no; } /* 802EB03C-802EB050 .text setTexNo__18J3DTevBlockPatchedFUlPCUs */ -void J3DTevBlockPatched::setTexNo(unsigned long, const unsigned short*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTexNo(u32 i, const u16* pNo) { + mTexNo[i] = *pNo; } /* 802EB050-802EB060 .text getTexNo__18J3DTevBlockPatchedCFUl */ -void J3DTevBlockPatched::getTexNo(unsigned long) const { - /* Nonmatching */ +u16 J3DTevBlockPatched::getTexNo(u32 i) const { + return mTexNo[i]; } /* 802EB060-802EB084 .text setTevOrder__18J3DTevBlockPatchedFUl11J3DTevOrder */ -void J3DTevBlockPatched::setTevOrder(unsigned long, J3DTevOrder) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevOrder(u32 i, J3DTevOrder order) { + mTevOrder[i] = order; } /* 802EB084-802EB0A8 .text setTevOrder__18J3DTevBlockPatchedFUlPC11J3DTevOrder */ -void J3DTevBlockPatched::setTevOrder(unsigned long, const J3DTevOrder*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevOrder(u32 i, const J3DTevOrder* pOrder) { + mTevOrder[i] = *pOrder; } /* 802EB0A8-802EB0BC .text getTevOrder__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::getTevOrder(unsigned long) { - /* Nonmatching */ +J3DTevOrder * J3DTevBlockPatched::getTevOrder(u32 i) { + return &mTevOrder[i]; } /* 802EB0BC-802EB0F8 .text setTevStage__18J3DTevBlockPatchedFUl11J3DTevStage */ -void J3DTevBlockPatched::setTevStage(unsigned long, J3DTevStage) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevStage(u32 i, J3DTevStage stage) { + mTevStage[i] = stage; } /* 802EB0F8-802EB134 .text setTevStage__18J3DTevBlockPatchedFUlPC11J3DTevStage */ -void J3DTevBlockPatched::setTevStage(unsigned long, const J3DTevStage*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevStage(u32 i, const J3DTevStage* pStage) { + mTevStage[i] = *pStage; } /* 802EB134-802EB148 .text getTevStage__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::getTevStage(unsigned long) { - /* Nonmatching */ +J3DTevStage * J3DTevBlockPatched::getTevStage(u32 i) { + return &mTevStage[i]; } /* 802EB148-802EB15C .text setIndTevStage__18J3DTevBlockPatchedFUl14J3DIndTevStage */ -void J3DTevBlockPatched::setIndTevStage(unsigned long, J3DIndTevStage) { - /* Nonmatching */ +void J3DTevBlockPatched::setIndTevStage(u32 i, J3DIndTevStage stage) { + mIndTevStage[i] = stage; } /* 802EB15C-802EB170 .text setIndTevStage__18J3DTevBlockPatchedFUlPC14J3DIndTevStage */ -void J3DTevBlockPatched::setIndTevStage(unsigned long, const J3DIndTevStage*) { - /* Nonmatching */ +void J3DTevBlockPatched::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { + mIndTevStage[i] = *pStage; } /* 802EB170-802EB184 .text getIndTevStage__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::getIndTevStage(unsigned long) { - /* Nonmatching */ +J3DIndTevStage * J3DTevBlockPatched::getIndTevStage(u32 i) { + return &mIndTevStage[i]; } /* 802EB184-802EB1B0 .text setTevColor__18J3DTevBlockPatchedFUl13J3DGXColorS10 */ -void J3DTevBlockPatched::setTevColor(unsigned long, J3DGXColorS10) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevColor(u32 i, J3DGXColorS10 color) { + mTevColor[i] = color; } /* 802EB1B0-802EB1DC .text setTevColor__18J3DTevBlockPatchedFUlPC13J3DGXColorS10 */ -void J3DTevBlockPatched::setTevColor(unsigned long, const J3DGXColorS10*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevColor(u32 i, const J3DGXColorS10* pColor) { + mTevColor[i] = *pColor; } /* 802EB1DC-802EB1F0 .text getTevColor__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::getTevColor(unsigned long) { - /* Nonmatching */ +GXColorS10 * J3DTevBlockPatched::getTevColor(u32 i) { + return &mTevColor[i]; } /* 802EB1F0-802EB21C .text setTevKColor__18J3DTevBlockPatchedFUl10J3DGXColor */ -void J3DTevBlockPatched::setTevKColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevKColor(u32 i, J3DGXColor color) { + mTevKColor[i] = color; } /* 802EB21C-802EB248 .text setTevKColor__18J3DTevBlockPatchedFUlPC10J3DGXColor */ -void J3DTevBlockPatched::setTevKColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevKColor(u32 i, const J3DGXColor* pColor) { + mTevKColor[i] = *pColor; } /* 802EB248-802EB25C .text getTevKColor__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::getTevKColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DTevBlockPatched::getTevKColor(u32 i) { + return &mTevKColor[i]; } /* 802EB25C-802EB268 .text setTevKColorSel__18J3DTevBlockPatchedFUlUc */ -void J3DTevBlockPatched::setTevKColorSel(unsigned long, unsigned char) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevKColorSel(u32 i, u8 sel) { + mTevKColorSel[i] = sel; } /* 802EB268-802EB278 .text setTevKColorSel__18J3DTevBlockPatchedFUlPCUc */ -void J3DTevBlockPatched::setTevKColorSel(unsigned long, const unsigned char*) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevKColorSel(u32 i, const u8* pSel) { + mTevKColorSel[i] = *pSel; } /* 802EB278-802EB284 .text getTevKColorSel__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::getTevKColorSel(unsigned long) { - /* Nonmatching */ +u8 J3DTevBlockPatched::getTevKColorSel(u32 i) { + return mTevKColorSel[i]; } /* 802EB284-802EB28C .text getTexNoOffset__18J3DTevBlockPatchedCFv */ -void J3DTevBlockPatched::getTexNoOffset() const { - /* Nonmatching */ +u32 J3DTevBlockPatched::getTexNoOffset() const { + return mTexNoOffset; } /* 802EB28C-802EB294 .text getTevRegOffset__18J3DTevBlockPatchedCFv */ -void J3DTevBlockPatched::getTevRegOffset() const { - /* Nonmatching */ +u32 J3DTevBlockPatched::getTevRegOffset() const { + return mTevRegOffset; } /* 802EB294-802EB29C .text setTevRegOffset__18J3DTevBlockPatchedFUl */ -void J3DTevBlockPatched::setTevRegOffset(unsigned long) { - /* Nonmatching */ +void J3DTevBlockPatched::setTevRegOffset(u32 offs) { + mTevRegOffset = offs; } /* 802EB29C-802EB2F8 .text __dt__18J3DTevBlockPatchedFv */ @@ -1787,23 +1792,23 @@ J3DTevBlockPatched::~J3DTevBlockPatched() { } /* 802EB2F8-802EB304 .text getType__19J3DTexGenBlockBasicFv */ -void J3DTexGenBlockBasic::getType() { - /* Nonmatching */ +u32 J3DTexGenBlockBasic::getType() { + return 'TGBC'; } /* 802EB304-802EB328 .text setNBTScale__19J3DTexGenBlockBasicF11J3DNBTScale */ -void J3DTexGenBlockBasic::setNBTScale(J3DNBTScale) { - /* Nonmatching */ +void J3DTexGenBlockBasic::setNBTScale(J3DNBTScale scale) { + mNBTScale = scale; } /* 802EB328-802EB34C .text setNBTScale__19J3DTexGenBlockBasicFPC11J3DNBTScale */ -void J3DTexGenBlockBasic::setNBTScale(const J3DNBTScale*) { - /* Nonmatching */ +void J3DTexGenBlockBasic::setNBTScale(const J3DNBTScale* pScale) { + mNBTScale = *pScale; } /* 802EB34C-802EB354 .text getNBTScale__19J3DTexGenBlockBasicFv */ -void J3DTexGenBlockBasic::getNBTScale() { - /* Nonmatching */ +J3DNBTScale * J3DTexGenBlockBasic::getNBTScale() { + return &mNBTScale; } /* 802EB354-802EB3C0 .text __dt__19J3DTexGenBlockBasicFv */ @@ -1812,68 +1817,68 @@ J3DTexGenBlockBasic::~J3DTexGenBlockBasic() { } /* 802EB3C0-802EB3C8 .text setTexGenNum__21J3DTexGenBlockPatchedFUl */ -void J3DTexGenBlockPatched::setTexGenNum(unsigned long) { - /* Nonmatching */ +void J3DTexGenBlockPatched::setTexGenNum(u32 num) { + mTexGenNum = num; } /* 802EB3C8-802EB3D4 .text setTexGenNum__21J3DTexGenBlockPatchedFPCUl */ -void J3DTexGenBlockPatched::setTexGenNum(const unsigned long*) { - /* Nonmatching */ +void J3DTexGenBlockPatched::setTexGenNum(const u32* pNum) { + mTexGenNum = *pNum; } /* 802EB3D4-802EB3DC .text getTexGenNum__21J3DTexGenBlockPatchedCFv */ -void J3DTexGenBlockPatched::getTexGenNum() const { - /* Nonmatching */ +u32 J3DTexGenBlockPatched::getTexGenNum() const { + return mTexGenNum; } /* 802EB3DC-802EB400 .text setTexCoord__21J3DTexGenBlockPatchedFUlPC11J3DTexCoord */ -void J3DTexGenBlockPatched::setTexCoord(unsigned long, const J3DTexCoord*) { - /* Nonmatching */ +void J3DTexGenBlockPatched::setTexCoord(u32 i, const J3DTexCoord* pCoord) { + mTexCoord[i] = *pCoord; } /* 802EB400-802EB414 .text getTexCoord__21J3DTexGenBlockPatchedFUl */ -void J3DTexGenBlockPatched::getTexCoord(unsigned long) { - /* Nonmatching */ +J3DTexCoord * J3DTexGenBlockPatched::getTexCoord(u32 i) { + return &mTexCoord[i]; } /* 802EB414-802EB424 .text setTexMtx__21J3DTexGenBlockPatchedFUlP9J3DTexMtx */ -void J3DTexGenBlockPatched::setTexMtx(unsigned long, J3DTexMtx*) { - /* Nonmatching */ +void J3DTexGenBlockPatched::setTexMtx(u32 i, J3DTexMtx* pMtx) { + mTexMtx[i] = pMtx; } /* 802EB424-802EB434 .text getTexMtx__21J3DTexGenBlockPatchedFUl */ -void J3DTexGenBlockPatched::getTexMtx(unsigned long) { - /* Nonmatching */ +J3DTexMtx * J3DTexGenBlockPatched::getTexMtx(u32 i) { + return mTexMtx[i]; } /* 802EB434-802EB43C .text getTexMtxOffset__21J3DTexGenBlockPatchedCFv */ -void J3DTexGenBlockPatched::getTexMtxOffset() const { - /* Nonmatching */ +u32 J3DTexGenBlockPatched::getTexMtxOffset() const { + return mTexMtxOffset; } /* 802EB43C-802EB444 .text setTexMtxOffset__21J3DTexGenBlockPatchedFUl */ -void J3DTexGenBlockPatched::setTexMtxOffset(unsigned long) { - /* Nonmatching */ +void J3DTexGenBlockPatched::setTexMtxOffset(u32 offs) { + mTexMtxOffset = offs; } /* 802EB444-802EB450 .text getType__15J3DTexGenBlock4Fv */ -void J3DTexGenBlock4::getType() { - /* Nonmatching */ +u32 J3DTexGenBlock4::getType() { + return 'TGB4'; } /* 802EB450-802EB474 .text setNBTScale__15J3DTexGenBlock4F11J3DNBTScale */ -void J3DTexGenBlock4::setNBTScale(J3DNBTScale) { - /* Nonmatching */ +void J3DTexGenBlock4::setNBTScale(J3DNBTScale scale) { + mNBTScale = scale; } /* 802EB474-802EB498 .text setNBTScale__15J3DTexGenBlock4FPC11J3DNBTScale */ -void J3DTexGenBlock4::setNBTScale(const J3DNBTScale*) { - /* Nonmatching */ +void J3DTexGenBlock4::setNBTScale(const J3DNBTScale* pScale) { + mNBTScale = *pScale; } /* 802EB498-802EB4A0 .text getNBTScale__15J3DTexGenBlock4Fv */ -void J3DTexGenBlock4::getNBTScale() { - /* Nonmatching */ +J3DNBTScale * J3DTexGenBlock4::getNBTScale() { + return &mNBTScale; } /* 802EB4A0-802EB50C .text __dt__15J3DTexGenBlock4Fv */ @@ -1887,118 +1892,118 @@ void J3DTexGenBlockPatched::load() { } /* 802EB510-802EB51C .text getType__21J3DTexGenBlockPatchedFv */ -void J3DTexGenBlockPatched::getType() { - /* Nonmatching */ +u32 J3DTexGenBlockPatched::getType() { + return 'TGPT'; } /* 802EB51C-802EB528 .text getType__20J3DColorBlockLightOnFv */ -void J3DColorBlockLightOn::getType() { - /* Nonmatching */ +u32 J3DColorBlockLightOn::getType() { + return 'CLON'; } /* 802EB528-802EB554 .text setMatColor__20J3DColorBlockLightOnFUl10J3DGXColor */ -void J3DColorBlockLightOn::setMatColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DColorBlockLightOn::setMatColor(u32 i, J3DGXColor color) { + mMatColor[i] = color; } /* 802EB554-802EB580 .text setMatColor__20J3DColorBlockLightOnFUlPC10J3DGXColor */ -void J3DColorBlockLightOn::setMatColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DColorBlockLightOn::setMatColor(u32 i, const J3DGXColor* pColor) { + mMatColor[i] = *pColor; } /* 802EB580-802EB594 .text getMatColor__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::getMatColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DColorBlockLightOn::getMatColor(u32 i) { + return &mMatColor[i]; } /* 802EB594-802EB5C0 .text setAmbColor__20J3DColorBlockLightOnFUl10J3DGXColor */ -void J3DColorBlockLightOn::setAmbColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DColorBlockLightOn::setAmbColor(u32 i, J3DGXColor color) { + mAmbColor[i] = color; } /* 802EB5C0-802EB5EC .text setAmbColor__20J3DColorBlockLightOnFUlPC10J3DGXColor */ -void J3DColorBlockLightOn::setAmbColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DColorBlockLightOn::setAmbColor(u32 i, const J3DGXColor* pColor) { + mAmbColor[i] = *pColor; } /* 802EB5EC-802EB600 .text getAmbColor__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::getAmbColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DColorBlockLightOn::getAmbColor(u32 i) { + return &mAmbColor[i]; } /* 802EB600-802EB60C .text setColorChanNum__20J3DColorBlockLightOnFPCUc */ -void J3DColorBlockLightOn::setColorChanNum(const unsigned char*) { - /* Nonmatching */ +void J3DColorBlockLightOn::setColorChanNum(const u8* pNum) { + mColorChanNum = *pNum; } /* 802EB60C-802EB614 .text setColorChanNum__20J3DColorBlockLightOnFUc */ -void J3DColorBlockLightOn::setColorChanNum(unsigned char) { - /* Nonmatching */ +void J3DColorBlockLightOn::setColorChanNum(u8 num) { + mColorChanNum = num; } /* 802EB614-802EB61C .text getColorChanNum__20J3DColorBlockLightOnCFv */ -void J3DColorBlockLightOn::getColorChanNum() const { - /* Nonmatching */ +u8 J3DColorBlockLightOn::getColorChanNum() const { + return mColorChanNum; } /* 802EB61C-802EB630 .text setColorChan__20J3DColorBlockLightOnFUlPC12J3DColorChan */ -void J3DColorBlockLightOn::setColorChan(unsigned long, const J3DColorChan*) { - /* Nonmatching */ +void J3DColorBlockLightOn::setColorChan(u32 i, const J3DColorChan* pChan) { + mColorChan[i] = *pChan; } /* 802EB630-802EB644 .text setColorChan__20J3DColorBlockLightOnFUlRC12J3DColorChan */ -void J3DColorBlockLightOn::setColorChan(unsigned long, const J3DColorChan&) { - /* Nonmatching */ +void J3DColorBlockLightOn::setColorChan(u32 i, const J3DColorChan& chan) { + mColorChan[i] = chan; } /* 802EB644-802EB658 .text getColorChan__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::getColorChan(unsigned long) { - /* Nonmatching */ +J3DColorChan * J3DColorBlockLightOn::getColorChan(u32 i) { + return &mColorChan[i]; } /* 802EB658-802EB668 .text setLight__20J3DColorBlockLightOnFUlP11J3DLightObj */ -void J3DColorBlockLightOn::setLight(unsigned long, J3DLightObj*) { - /* Nonmatching */ +void J3DColorBlockLightOn::setLight(u32 i, J3DLightObj* pLight) { + mLight[i] = pLight; } /* 802EB668-802EB678 .text getLight__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::getLight(unsigned long) { - /* Nonmatching */ +J3DLightObj * J3DColorBlockLightOn::getLight(u32 i) { + return mLight[i]; } /* 802EB678-802EB680 .text setCullMode__20J3DColorBlockLightOnFUc */ -void J3DColorBlockLightOn::setCullMode(unsigned char) { - /* Nonmatching */ +void J3DColorBlockLightOn::setCullMode(u8 mode) { + mCullMode = mode; } /* 802EB680-802EB68C .text setCullMode__20J3DColorBlockLightOnFPCUc */ -void J3DColorBlockLightOn::setCullMode(const unsigned char*) { - /* Nonmatching */ +void J3DColorBlockLightOn::setCullMode(const u8* pMode) { + mCullMode = *pMode; } /* 802EB68C-802EB694 .text getCullMode__20J3DColorBlockLightOnCFv */ -void J3DColorBlockLightOn::getCullMode() const { - /* Nonmatching */ +u8 J3DColorBlockLightOn::getCullMode() const { + return mCullMode; } /* 802EB694-802EB69C .text getMatColorOffset__20J3DColorBlockLightOnCFv */ -void J3DColorBlockLightOn::getMatColorOffset() const { - /* Nonmatching */ +u32 J3DColorBlockLightOn::getMatColorOffset() const { + return mMatColorOffset; } /* 802EB69C-802EB6A4 .text getColorChanOffset__20J3DColorBlockLightOnCFv */ -void J3DColorBlockLightOn::getColorChanOffset() const { - /* Nonmatching */ +u32 J3DColorBlockLightOn::getColorChanOffset() const { + return mColorChanOffset; } /* 802EB6A4-802EB6AC .text setMatColorOffset__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::setMatColorOffset(unsigned long) { - /* Nonmatching */ +void J3DColorBlockLightOn::setMatColorOffset(u32 offs) { + mMatColorOffset = offs; } /* 802EB6AC-802EB6B4 .text setColorChanOffset__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::setColorChanOffset(unsigned long) { - /* Nonmatching */ +void J3DColorBlockLightOn::setColorChanOffset(u32 offs) { + mColorChanOffset = offs; } /* 802EB6B4-802EB710 .text __dt__20J3DColorBlockLightOnFv */ @@ -2007,23 +2012,23 @@ J3DColorBlockLightOn::~J3DColorBlockLightOn() { } /* 802EB710-802EB71C .text getType__22J3DColorBlockAmbientOnFv */ -void J3DColorBlockAmbientOn::getType() { - /* Nonmatching */ +u32 J3DColorBlockAmbientOn::getType() { + return 'CLAB'; } /* 802EB71C-802EB748 .text setAmbColor__22J3DColorBlockAmbientOnFUl10J3DGXColor */ -void J3DColorBlockAmbientOn::setAmbColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DColorBlockAmbientOn::setAmbColor(u32 i, J3DGXColor color) { + mAmbColor[i] = color; } /* 802EB748-802EB774 .text setAmbColor__22J3DColorBlockAmbientOnFUlPC10J3DGXColor */ -void J3DColorBlockAmbientOn::setAmbColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DColorBlockAmbientOn::setAmbColor(u32 i, const J3DGXColor* color) { + mAmbColor[i] = *color; } /* 802EB774-802EB788 .text getAmbColor__22J3DColorBlockAmbientOnFUl */ -void J3DColorBlockAmbientOn::getAmbColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DColorBlockAmbientOn::getAmbColor(u32 i) { + return &mAmbColor[i]; } /* 802EB788-802EB7F4 .text __dt__22J3DColorBlockAmbientOnFv */ @@ -2032,88 +2037,88 @@ J3DColorBlockAmbientOn::~J3DColorBlockAmbientOn() { } /* 802EB7F4-802EB820 .text setMatColor__21J3DColorBlockLightOffFUl10J3DGXColor */ -void J3DColorBlockLightOff::setMatColor(unsigned long, J3DGXColor) { - /* Nonmatching */ +void J3DColorBlockLightOff::setMatColor(u32 i, J3DGXColor color) { + mMatColor[i] = color; } /* 802EB820-802EB84C .text setMatColor__21J3DColorBlockLightOffFUlPC10J3DGXColor */ -void J3DColorBlockLightOff::setMatColor(unsigned long, const J3DGXColor*) { - /* Nonmatching */ +void J3DColorBlockLightOff::setMatColor(u32 i, const J3DGXColor* pColor) { + mMatColor[i] = *pColor; } /* 802EB84C-802EB860 .text getMatColor__21J3DColorBlockLightOffFUl */ -void J3DColorBlockLightOff::getMatColor(unsigned long) { - /* Nonmatching */ +GXColor * J3DColorBlockLightOff::getMatColor(u32 i) { + return &mMatColor[i]; } /* 802EB860-802EB86C .text setColorChanNum__21J3DColorBlockLightOffFPCUc */ -void J3DColorBlockLightOff::setColorChanNum(const unsigned char*) { - /* Nonmatching */ +void J3DColorBlockLightOff::setColorChanNum(const u8* pNum) { + mColorChanNum = *pNum; } /* 802EB86C-802EB874 .text setColorChanNum__21J3DColorBlockLightOffFUc */ -void J3DColorBlockLightOff::setColorChanNum(unsigned char) { - /* Nonmatching */ +void J3DColorBlockLightOff::setColorChanNum(u8 num) { + mColorChanNum = num; } /* 802EB874-802EB87C .text getColorChanNum__21J3DColorBlockLightOffCFv */ -void J3DColorBlockLightOff::getColorChanNum() const { - /* Nonmatching */ +u8 J3DColorBlockLightOff::getColorChanNum() const { + return mColorChanNum; } /* 802EB87C-802EB890 .text setColorChan__21J3DColorBlockLightOffFUlPC12J3DColorChan */ -void J3DColorBlockLightOff::setColorChan(unsigned long, const J3DColorChan*) { - /* Nonmatching */ +void J3DColorBlockLightOff::setColorChan(u32 i, const J3DColorChan* pChan) { + mColorChan[i] = *pChan; } /* 802EB890-802EB8A4 .text setColorChan__21J3DColorBlockLightOffFUlRC12J3DColorChan */ -void J3DColorBlockLightOff::setColorChan(unsigned long, const J3DColorChan&) { - /* Nonmatching */ +void J3DColorBlockLightOff::setColorChan(u32 i, const J3DColorChan& chan) { + mColorChan[i] = chan; } /* 802EB8A4-802EB8B8 .text getColorChan__21J3DColorBlockLightOffFUl */ -void J3DColorBlockLightOff::getColorChan(unsigned long) { - /* Nonmatching */ +J3DColorChan * J3DColorBlockLightOff::getColorChan(u32 i) { + return &mColorChan[i]; } /* 802EB8B8-802EB8C0 .text setCullMode__21J3DColorBlockLightOffFUc */ -void J3DColorBlockLightOff::setCullMode(unsigned char) { - /* Nonmatching */ +void J3DColorBlockLightOff::setCullMode(u8 mode) { + mCullMode = mode; } /* 802EB8C0-802EB8CC .text setCullMode__21J3DColorBlockLightOffFPCUc */ -void J3DColorBlockLightOff::setCullMode(const unsigned char*) { - /* Nonmatching */ +void J3DColorBlockLightOff::setCullMode(const u8* pMode) { + mCullMode = *pMode; } /* 802EB8CC-802EB8D4 .text getCullMode__21J3DColorBlockLightOffCFv */ -void J3DColorBlockLightOff::getCullMode() const { - /* Nonmatching */ +u8 J3DColorBlockLightOff::getCullMode() const { + return mCullMode; } /* 802EB8D4-802EB8DC .text getMatColorOffset__21J3DColorBlockLightOffCFv */ -void J3DColorBlockLightOff::getMatColorOffset() const { - /* Nonmatching */ +u32 J3DColorBlockLightOff::getMatColorOffset() const { + return mMatColorOffset; } /* 802EB8DC-802EB8E4 .text getColorChanOffset__21J3DColorBlockLightOffCFv */ -void J3DColorBlockLightOff::getColorChanOffset() const { - /* Nonmatching */ +u32 J3DColorBlockLightOff::getColorChanOffset() const { + return mColorChanOffset; } /* 802EB8E4-802EB8EC .text setMatColorOffset__21J3DColorBlockLightOffFUl */ -void J3DColorBlockLightOff::setMatColorOffset(unsigned long) { - /* Nonmatching */ +void J3DColorBlockLightOff::setMatColorOffset(u32 offs) { + mMatColorOffset = offs; } /* 802EB8EC-802EB8F4 .text setColorChanOffset__21J3DColorBlockLightOffFUl */ -void J3DColorBlockLightOff::setColorChanOffset(unsigned long) { - /* Nonmatching */ +void J3DColorBlockLightOff::setColorChanOffset(u32 offs) { + mColorChanOffset = offs; } /* 802EB8F4-802EB900 .text getType__13J3DPEBlockXluFv */ -void J3DPEBlockXlu::getType() { - /* Nonmatching */ +u32 J3DPEBlockXlu::getType() { + return 'PEXL'; } /* 802EB900-802EB95C .text __dt__13J3DPEBlockXluFv */ @@ -2122,8 +2127,8 @@ J3DPEBlockXlu::~J3DPEBlockXlu() { } /* 802EB95C-802EB968 .text getType__17J3DPEBlockTexEdgeFv */ -void J3DPEBlockTexEdge::getType() { - /* Nonmatching */ +u32 J3DPEBlockTexEdge::getType() { + return 'PEED'; } /* 802EB968-802EB9C4 .text __dt__17J3DPEBlockTexEdgeFv */ @@ -2132,8 +2137,8 @@ J3DPEBlockTexEdge::~J3DPEBlockTexEdge() { } /* 802EB9C4-802EB9D0 .text getType__13J3DPEBlockOpaFv */ -void J3DPEBlockOpa::getType() { - /* Nonmatching */ +u32 J3DPEBlockOpa::getType() { + return 'PEOP'; } /* 802EB9D0-802EBA2C .text __dt__13J3DPEBlockOpaFv */ @@ -2142,63 +2147,63 @@ J3DPEBlockOpa::~J3DPEBlockOpa() { } /* 802EBA2C-802EBA38 .text getType__15J3DIndBlockFullFv */ -void J3DIndBlockFull::getType() { - /* Nonmatching */ +u32 J3DIndBlockFull::getType() { + return 'IBLF'; } /* 802EBA38-802EBA40 .text setIndTexStageNum__15J3DIndBlockFullFUc */ -void J3DIndBlockFull::setIndTexStageNum(unsigned char) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexStageNum(u8 num) { + mIndTexStageNum = num; } /* 802EBA40-802EBA48 .text getIndTexStageNum__15J3DIndBlockFullCFv */ -void J3DIndBlockFull::getIndTexStageNum() const { - /* Nonmatching */ +u8 J3DIndBlockFull::getIndTexStageNum() const { + return mIndTexStageNum; } /* 802EBA48-802EBA64 .text setIndTexOrder__15J3DIndBlockFullFUl14J3DIndTexOrder */ -void J3DIndBlockFull::setIndTexOrder(unsigned long, J3DIndTexOrder) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexOrder(u32 i, J3DIndTexOrder order) { + mIndTexOrder[i] = order; } /* 802EBA64-802EBA80 .text setIndTexOrder__15J3DIndBlockFullFUlPC14J3DIndTexOrder */ -void J3DIndBlockFull::setIndTexOrder(unsigned long, const J3DIndTexOrder*) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexOrder(u32 i, const J3DIndTexOrder* pOrder) { + mIndTexOrder[i] = *pOrder; } /* 802EBA80-802EBA94 .text getIndTexOrder__15J3DIndBlockFullFUl */ -void J3DIndBlockFull::getIndTexOrder(unsigned long) { - /* Nonmatching */ +J3DIndTexOrder * J3DIndBlockFull::getIndTexOrder(u32 i) { + return &mIndTexOrder[i]; } /* 802EBA94-802EBAEC .text setIndTexMtx__15J3DIndBlockFullFUl12J3DIndTexMtx */ -void J3DIndBlockFull::setIndTexMtx(unsigned long, J3DIndTexMtx) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexMtx(u32 i, J3DIndTexMtx mtx) { + mIndTexMtx[i] = mtx; } /* 802EBAEC-802EBB44 .text setIndTexMtx__15J3DIndBlockFullFUlPC12J3DIndTexMtx */ -void J3DIndBlockFull::setIndTexMtx(unsigned long, const J3DIndTexMtx*) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexMtx(u32 i, const J3DIndTexMtx* pMtx) { + mIndTexMtx[i] = *pMtx; } /* 802EBB44-802EBB58 .text getIndTexMtx__15J3DIndBlockFullFUl */ -void J3DIndBlockFull::getIndTexMtx(unsigned long) { - /* Nonmatching */ +J3DIndTexMtx * J3DIndBlockFull::getIndTexMtx(u32 i) { + return &mIndTexMtx[i]; } /* 802EBB58-802EBB74 .text setIndTexCoordScale__15J3DIndBlockFullFUl19J3DIndTexCoordScale */ -void J3DIndBlockFull::setIndTexCoordScale(unsigned long, J3DIndTexCoordScale) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexCoordScale(u32 i, J3DIndTexCoordScale scale) { + mIndTexCoordScale[i] = scale; } /* 802EBB74-802EBB90 .text setIndTexCoordScale__15J3DIndBlockFullFUlPC19J3DIndTexCoordScale */ -void J3DIndBlockFull::setIndTexCoordScale(unsigned long, const J3DIndTexCoordScale*) { - /* Nonmatching */ +void J3DIndBlockFull::setIndTexCoordScale(u32 i, const J3DIndTexCoordScale* pScale) { + mIndTexCoordScale[i] = *pScale; } /* 802EBB90-802EBBA4 .text getIndTexCoordScale__15J3DIndBlockFullFUl */ -void J3DIndBlockFull::getIndTexCoordScale(unsigned long) { - /* Nonmatching */ +J3DIndTexCoordScale * J3DIndBlockFull::getIndTexCoordScale(u32 i) { + return &mIndTexCoordScale[i]; } /* 802EBBA4-802EBC40 .text __dt__15J3DIndBlockFullFv */ @@ -2208,45 +2213,38 @@ J3DIndBlockFull::~J3DIndBlockFull() { /* 802EBC40-802EBC44 .text patchTexNo__11J3DTevBlockFv */ void J3DTevBlock::patchTexNo() { - /* Nonmatching */ } /* 802EBC44-802EBC48 .text patchTevReg__11J3DTevBlockFv */ void J3DTevBlock::patchTevReg() { - /* Nonmatching */ } /* 802EBC48-802EBC4C .text setTexNo__11J3DTevBlockFUlPCUs */ -void J3DTevBlock::setTexNo(unsigned long, const unsigned short*) { - /* Nonmatching */ +void J3DTevBlock::setTexNo(u32 i, const u16*) { } /* 802EBC4C-802EBC50 .text setTevOrder__11J3DTevBlockFUlPC11J3DTevOrder */ -void J3DTevBlock::setTevOrder(unsigned long, const J3DTevOrder*) { - /* Nonmatching */ +void J3DTevBlock::setTevOrder(u32 i, const J3DTevOrder* pOrder) { } /* 802EBC50-802EBC54 .text setTevStageNum__11J3DTevBlockFPCUc */ -void J3DTevBlock::setTevStageNum(const unsigned char*) { - /* Nonmatching */ +void J3DTevBlock::setTevStageNum(const u8* pNum) { } /* 802EBC54-802EBC58 .text setTevStage__11J3DTevBlockFUlPC11J3DTevStage */ -void J3DTevBlock::setTevStage(unsigned long, const J3DTevStage*) { - /* Nonmatching */ +void J3DTevBlock::setTevStage(u32 i, const J3DTevStage* pStage) { } /* 802EBC58-802EBC5C .text setIndTevStage__11J3DTevBlockFUlPC14J3DIndTevStage */ -void J3DTevBlock::setIndTevStage(unsigned long, const J3DIndTevStage*) { - /* Nonmatching */ +void J3DTevBlock::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { } /* 802EBC5C-802EBC64 .text getTexNoOffset__11J3DTevBlockCFv */ -void J3DTevBlock::getTexNoOffset() const { - /* Nonmatching */ +u32 J3DTevBlock::getTexNoOffset() const { + return 0; } /* 802EBC64-802EBC70 .text getType__21J3DColorBlockLightOffFv */ -void J3DColorBlockLightOff::getType() { - /* Nonmatching */ +u32 J3DColorBlockLightOff::getType() { + return 'CLOF'; } diff --git a/src/JSystem/J3DGraphBase/J3DMaterial.cpp b/src/JSystem/J3DGraphBase/J3DMaterial.cpp index 264bebc80..e83bdefcb 100644 --- a/src/JSystem/J3DGraphBase/J3DMaterial.cpp +++ b/src/JSystem/J3DGraphBase/J3DMaterial.cpp @@ -7,52 +7,52 @@ #include "dolphin/types.h" /* 802DDBC4-802DDDC4 .text createColorBlock__11J3DMaterialFUl */ -void J3DMaterial::createColorBlock(unsigned long) { +J3DColorBlock * J3DMaterial::createColorBlock(u32) { /* Nonmatching */ } /* 802DDDC4-802DDF28 .text createTexGenBlock__11J3DMaterialFUl */ -void J3DMaterial::createTexGenBlock(unsigned long) { +J3DTexGenBlock * J3DMaterial::createTexGenBlock(u32) { /* Nonmatching */ } /* 802DDF28-802DE29C .text createTevBlock__11J3DMaterialFi */ -void J3DMaterial::createTevBlock(int) { +J3DTevBlock * J3DMaterial::createTevBlock(int) { /* Nonmatching */ } /* 802DE29C-802DE384 .text createIndBlock__11J3DMaterialFi */ -void J3DMaterial::createIndBlock(int) { +J3DIndBlock * J3DMaterial::createIndBlock(int) { /* Nonmatching */ } /* 802DE384-802DE548 .text createPEBlock__11J3DMaterialFUlUl */ -void J3DMaterial::createPEBlock(unsigned long, unsigned long) { +J3DPEBlock * J3DMaterial::createPEBlock(u32, u32) { /* Nonmatching */ } /* 802DE548-802DE598 .text calcSizeColorBlock__11J3DMaterialFUl */ -void J3DMaterial::calcSizeColorBlock(unsigned long) { +u32 J3DMaterial::calcSizeColorBlock(u32) { /* Nonmatching */ } /* 802DE598-802DE5C4 .text calcSizeTexGenBlock__11J3DMaterialFUl */ -void J3DMaterial::calcSizeTexGenBlock(unsigned long) { +u32 J3DMaterial::calcSizeTexGenBlock(u32) { /* Nonmatching */ } /* 802DE5C4-802DE60C .text calcSizeTevBlock__11J3DMaterialFi */ -void J3DMaterial::calcSizeTevBlock(int) { +u32 J3DMaterial::calcSizeTevBlock(int) { /* Nonmatching */ } /* 802DE60C-802DE620 .text calcSizeIndBlock__11J3DMaterialFi */ -void J3DMaterial::calcSizeIndBlock(int) { +u32 J3DMaterial::calcSizeIndBlock(int) { /* Nonmatching */ } /* 802DE620-802DE688 .text calcSizePEBlock__11J3DMaterialFUlUl */ -void J3DMaterial::calcSizePEBlock(unsigned long, unsigned long) { +u32 J3DMaterial::calcSizePEBlock(u32, u32) { /* Nonmatching */ } @@ -62,7 +62,7 @@ void J3DMaterial::initialize() { } /* 802DE6D8-802DE78C .text countDLSize__11J3DMaterialFv */ -void J3DMaterial::countDLSize() { +u32 J3DMaterial::countDLSize() { /* Nonmatching */ } @@ -97,7 +97,7 @@ void J3DMaterial::patch() { } /* 802DEC38-802DEE3C .text diff__11J3DMaterialFUl */ -void J3DMaterial::diff(unsigned long) { +void J3DMaterial::diff(u32) { /* Nonmatching */ } @@ -132,12 +132,12 @@ void J3DMaterial::change() { } /* 802DF118-802DF1AC .text newSharedDisplayList__11J3DMaterialFUl */ -void J3DMaterial::newSharedDisplayList(unsigned long) { +s32 J3DMaterial::newSharedDisplayList(u32) { /* Nonmatching */ } /* 802DF1AC-802DF240 .text newSingleSharedDisplayList__11J3DMaterialFUl */ -void J3DMaterial::newSingleSharedDisplayList(unsigned long) { +s32 J3DMaterial::newSingleSharedDisplayList(u32) { /* Nonmatching */ } @@ -167,7 +167,7 @@ void J3DPatchedMaterial::loadSharedDL() { } /* 802DF2EC-802DF338 .text calc__18J3DPatchedMaterialFPA4_Cf */ -void J3DPatchedMaterial::calc(const float(*)[4]) { +void J3DPatchedMaterial::calc(const Mtx) { /* Nonmatching */ } @@ -212,7 +212,7 @@ void J3DLockedMaterial::patch() { } /* 802DF3F0-802DF3F4 .text diff__17J3DLockedMaterialFUl */ -void J3DLockedMaterial::diff(unsigned long) { +void J3DLockedMaterial::diff(u32) { /* Nonmatching */ } @@ -267,27 +267,27 @@ J3DPEBlock::~J3DPEBlock() { } /* 802DF620-802DF628 .text countDLSize__14J3DTexGenBlockFv */ -void J3DTexGenBlock::countDLSize() { +s32 J3DTexGenBlock::countDLSize() { /* Nonmatching */ } /* 802DF628-802DF630 .text countDLSize__13J3DColorBlockFv */ -void J3DColorBlock::countDLSize() { +s32 J3DColorBlock::countDLSize() { /* Nonmatching */ } /* 802DF630-802DF638 .text countDLSize__11J3DTevBlockFv */ -void J3DTevBlock::countDLSize() { +s32 J3DTevBlock::countDLSize() { /* Nonmatching */ } /* 802DF638-802DF640 .text countDLSize__11J3DIndBlockFv */ -void J3DIndBlock::countDLSize() { +s32 J3DIndBlock::countDLSize() { /* Nonmatching */ } /* 802DF640-802DF648 .text countDLSize__10J3DPEBlockFv */ -void J3DPEBlock::countDLSize() { +s32 J3DPEBlock::countDLSize() { /* Nonmatching */ } @@ -297,7 +297,7 @@ void J3DColorBlock::load() { } /* 802DF64C-802DF654 .text getCullMode__13J3DColorBlockCFv */ -void J3DColorBlock::getCullMode() const { +u8 J3DColorBlock::getCullMode() const { /* Nonmatching */ } @@ -307,7 +307,7 @@ void J3DTevBlock::load() { } /* 802DF658-802DF660 .text getNBTScale__14J3DTexGenBlockFv */ -void J3DTexGenBlock::getNBTScale() { +J3DNBTScale * J3DTexGenBlock::getNBTScale() { /* Nonmatching */ } @@ -317,12 +317,12 @@ void J3DColorBlock::patch() { } /* 802DF664-802DF668 .text diff__13J3DColorBlockFUl */ -void J3DColorBlock::diff(unsigned long) { +void J3DColorBlock::diff(u32) { /* Nonmatching */ } /* 802DF668-802DF66C .text diff__10J3DPEBlockFUl */ -void J3DPEBlock::diff(unsigned long) { +void J3DPEBlock::diff(u32) { /* Nonmatching */ } @@ -382,37 +382,37 @@ void J3DPEBlock::setZMode(const J3DZMode*) { } /* 802DF698-802DF69C .text setZCompLoc__10J3DPEBlockFPCUc */ -void J3DPEBlock::setZCompLoc(const unsigned char*) { +void J3DPEBlock::setZCompLoc(const u8*) { /* Nonmatching */ } /* 802DF69C-802DF6A0 .text setDither__10J3DPEBlockFUc */ -void J3DPEBlock::setDither(unsigned char) { +void J3DPEBlock::setDither(u8) { /* Nonmatching */ } /* 802DF6A0-802DF6A4 .text setDither__10J3DPEBlockFPCUc */ -void J3DPEBlock::setDither(const unsigned char*) { +void J3DPEBlock::setDither(const u8*) { /* Nonmatching */ } /* 802DF6A4-802DF6AC .text getDither__10J3DPEBlockCFv */ -void J3DPEBlock::getDither() const { +u8 J3DPEBlock::getDither() const { /* Nonmatching */ } /* 802DF6AC-802DF6B4 .text getFogOffset__10J3DPEBlockCFv */ -void J3DPEBlock::getFogOffset() const { +u32 J3DPEBlock::getFogOffset() const { /* Nonmatching */ } /* 802DF6B4-802DF6B8 .text setFogOffset__10J3DPEBlockFUl */ -void J3DPEBlock::setFogOffset(unsigned long) { +void J3DPEBlock::setFogOffset(u32) { /* Nonmatching */ } /* 802DF6B8-802DF6BC .text diff__15J3DIndBlockNullFUl */ -void J3DIndBlockNull::diff(unsigned long) { +void J3DIndBlockNull::diff(u32) { /* Nonmatching */ } @@ -427,7 +427,7 @@ void J3DIndBlockNull::reset(J3DIndBlock*) { } /* 802DF6C4-802DF6D0 .text getType__15J3DIndBlockNullFv */ -void J3DIndBlockNull::getType() { +u32 J3DIndBlockNull::getType() { /* Nonmatching */ } @@ -437,27 +437,27 @@ J3DIndBlockNull::~J3DIndBlockNull() { } /* 802DF72C-802DF730 .text setIndTexOrder__11J3DIndBlockFUlPC14J3DIndTexOrder */ -void J3DIndBlock::setIndTexOrder(unsigned long, const J3DIndTexOrder*) { +void J3DIndBlock::setIndTexOrder(u32, const J3DIndTexOrder*) { /* Nonmatching */ } /* 802DF730-802DF734 .text setIndTexOrder__11J3DIndBlockFUl14J3DIndTexOrder */ -void J3DIndBlock::setIndTexOrder(unsigned long, J3DIndTexOrder) { +void J3DIndBlock::setIndTexOrder(u32, J3DIndTexOrder) { /* Nonmatching */ } /* 802DF734-802DF738 .text setIndTexMtx__11J3DIndBlockFUlPC12J3DIndTexMtx */ -void J3DIndBlock::setIndTexMtx(unsigned long, const J3DIndTexMtx*) { +void J3DIndBlock::setIndTexMtx(u32, const J3DIndTexMtx*) { /* Nonmatching */ } /* 802DF738-802DF73C .text setIndTexCoordScale__11J3DIndBlockFUlPC19J3DIndTexCoordScale */ -void J3DIndBlock::setIndTexCoordScale(unsigned long, const J3DIndTexCoordScale*) { +void J3DIndBlock::setIndTexCoordScale(u32, const J3DIndTexCoordScale*) { /* Nonmatching */ } /* 802DF73C-802DF740 .text setTexGenNum__14J3DTexGenBlockFPCUl */ -void J3DTexGenBlock::setTexGenNum(const unsigned long*) { +void J3DTexGenBlock::setTexGenNum(const u32*) { /* Nonmatching */ } @@ -472,12 +472,12 @@ void J3DTexGenBlock::setNBTScale(const J3DNBTScale*) { } /* 802DF748-802DF750 .text getTexMtxOffset__14J3DTexGenBlockCFv */ -void J3DTexGenBlock::getTexMtxOffset() const { +u32 J3DTexGenBlock::getTexMtxOffset() const { /* Nonmatching */ } /* 802DF750-802DF754 .text setTexMtxOffset__14J3DTexGenBlockFUl */ -void J3DTexGenBlock::setTexMtxOffset(unsigned long) { +void J3DTexGenBlock::setTexMtxOffset(u32) { /* Nonmatching */ } @@ -497,51 +497,51 @@ void J3DColorBlock::diffLight() { } /* 802DF760-802DF764 .text setMatColor__13J3DColorBlockFUlPC10J3DGXColor */ -void J3DColorBlock::setMatColor(unsigned long, const J3DGXColor*) { +void J3DColorBlock::setMatColor(u32, const J3DGXColor*) { /* Nonmatching */ } /* 802DF764-802DF768 .text setAmbColor__13J3DColorBlockFUlPC10J3DGXColor */ -void J3DColorBlock::setAmbColor(unsigned long, const J3DGXColor*) { +void J3DColorBlock::setAmbColor(u32, const J3DGXColor*) { /* Nonmatching */ } /* 802DF768-802DF76C .text setColorChanNum__13J3DColorBlockFPCUc */ -void J3DColorBlock::setColorChanNum(const unsigned char*) { +void J3DColorBlock::setColorChanNum(const u8*) { /* Nonmatching */ } /* 802DF76C-802DF770 .text setColorChan__13J3DColorBlockFUlPC12J3DColorChan */ -void J3DColorBlock::setColorChan(unsigned long, const J3DColorChan*) { +void J3DColorBlock::setColorChan(u32, const J3DColorChan*) { /* Nonmatching */ } /* 802DF770-802DF778 .text getLight__13J3DColorBlockFUl */ -void J3DColorBlock::getLight(unsigned long) { +J3DLightObj * J3DColorBlock::getLight(u32) { /* Nonmatching */ } /* 802DF778-802DF77C .text setCullMode__13J3DColorBlockFPCUc */ -void J3DColorBlock::setCullMode(const unsigned char*) { +void J3DColorBlock::setCullMode(const u8*) { /* Nonmatching */ } /* 802DF77C-802DF784 .text getMatColorOffset__13J3DColorBlockCFv */ -void J3DColorBlock::getMatColorOffset() const { +u32 J3DColorBlock::getMatColorOffset() const { /* Nonmatching */ } /* 802DF784-802DF78C .text getColorChanOffset__13J3DColorBlockCFv */ -void J3DColorBlock::getColorChanOffset() const { +u32 J3DColorBlock::getColorChanOffset() const { /* Nonmatching */ } /* 802DF78C-802DF790 .text setMatColorOffset__13J3DColorBlockFUl */ -void J3DColorBlock::setMatColorOffset(unsigned long) { +void J3DColorBlock::setMatColorOffset(u32) { /* Nonmatching */ } /* 802DF790-802DF794 .text setColorChanOffset__13J3DColorBlockFUl */ -void J3DColorBlock::setColorChanOffset(unsigned long) { +void J3DColorBlock::setColorChanOffset(u32) { /* Nonmatching */ } diff --git a/src/JSystem/J3DGraphBase/J3DPacket.cpp b/src/JSystem/J3DGraphBase/J3DPacket.cpp index ee5e48a5e..9e2e58854 100644 --- a/src/JSystem/J3DGraphBase/J3DPacket.cpp +++ b/src/JSystem/J3DGraphBase/J3DPacket.cpp @@ -351,19 +351,8 @@ void J3DShapePacket::draw() { if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) { prepareDraw(); -#if 0 - if (mpTexMtxObj != NULL) { - J3DMaterial* material = mpShape->getMaterial(); - J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock(); - J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj(); - } else { - J3DDifferedTexMtx::sTexGenBlock = NULL; - } -#endif - - if (mpDisplayListObj != NULL) { + if (mpDisplayListObj != NULL) mpDisplayListObj->callDL(); - } mpShape->draw(); } @@ -373,17 +362,6 @@ void J3DShapePacket::draw() { void J3DShapePacket::drawFast() { if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) { prepareDraw(); - -#if 0 - if (mpTexMtxObj != NULL) { - J3DMaterial* material = mpShape->getMaterial(); - J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock(); - J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj(); - } else { - J3DDifferedTexMtx::sTexGenBlock = NULL; - } -#endif - mpShape->drawFast(); } } diff --git a/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp b/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp index c408fa65a..4dc0bc082 100644 --- a/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp @@ -7,17 +7,17 @@ #include "dolphin/types.h" /* 802FB758-802FB8A4 .text load__22J3DModelLoaderDataBaseFPCvUl */ -void J3DModelLoaderDataBase::load(const void*, unsigned long) { +J3DModelData * J3DModelLoaderDataBase::load(const void*, unsigned long) { /* Nonmatching */ } /* 802FB8A4-802FB94C .text loadMaterialTable__22J3DModelLoaderDataBaseFPCv */ -void J3DModelLoaderDataBase::loadMaterialTable(const void*) { +J3DMaterialTable * J3DModelLoaderDataBase::loadMaterialTable(const void*) { /* Nonmatching */ } /* 802FB94C-802FBA04 .text loadBinaryDisplayList__22J3DModelLoaderDataBaseFPCvUl */ -void J3DModelLoaderDataBase::loadBinaryDisplayList(const void*, unsigned long) { +J3DModelData * J3DModelLoaderDataBase::loadBinaryDisplayList(const void*, unsigned long) { /* Nonmatching */ } From 45eef35f728198a518affe1796920c6d51bb8d81 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sat, 23 Sep 2023 19:53:32 -0400 Subject: [PATCH 58/89] More J3DMatBlock progress with terrible alignment hacks (and some real fixes too) --- include/JSystem/J3DGraphBase/J3DMatBlock.h | 5 ++--- include/JSystem/J3DGraphBase/J3DTevs.h | 6 +----- include/global.h | 3 +++ src/JSystem/J3DGraphBase/J3DMatBlock.cpp | 17 ++++++++--------- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index e9df1d45d..bf1b23604 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -760,9 +760,8 @@ struct J3DIndTexCoordScale { ~J3DIndTexCoordScale(); J3DIndTexCoordScale(); - /* 0x0 */ u8 mScaleS; + /* 0x0 */ u8 mScaleS __attribute__((aligned(4))); /* 0x1 */ u8 mScaleT; - u8 pad[2]; }; struct J3DIndTexMtx { @@ -800,7 +799,7 @@ public: virtual void setIndTexCoordScale(u32, J3DIndTexCoordScale); virtual void setIndTexCoordScale(u32, J3DIndTexCoordScale const*); virtual J3DIndTexCoordScale * getIndTexCoordScale(u32); - virtual ~J3DIndBlock(); + virtual ~J3DIndBlock() {} }; class J3DIndBlockFull : public J3DIndBlock { diff --git a/include/JSystem/J3DGraphBase/J3DTevs.h b/include/JSystem/J3DGraphBase/J3DTevs.h index 0b29af869..6d7311c88 100644 --- a/include/JSystem/J3DGraphBase/J3DTevs.h +++ b/include/JSystem/J3DGraphBase/J3DTevs.h @@ -39,17 +39,13 @@ struct J3DIndTevStage { }; struct J3DTevOrderInfo { - /* 0x0 */ u8 mTexCoord; + /* 0x0 */ u8 mTexCoord __attribute__((aligned(2))); /* 0x1 */ u8 mTexMap; /* 0x2 */ u8 mColorChan; - /* 0x3 */ u8 field_0x3; // Maybe padding }; struct J3DTevOrder : public J3DTevOrderInfo { J3DTevOrder(); - J3DTevOrder(const J3DTevOrderInfo& info) { - *(J3DTevOrderInfo*)this = info; - } u8 getTexMap() { return mTexMap; } }; diff --git a/include/global.h b/include/global.h index 30b845f1b..331f7ed49 100644 --- a/include/global.h +++ b/include/global.h @@ -24,6 +24,9 @@ #define _SDA2_BASE_(dummy) 0 #ifndef IN_VSCODE_EDITOR +#ifndef offsetof +#define offsetof(type, member) ((size_t) & (((type*)0)->member)) +#endif #define GLUE(a, b) a##b #define GLUE2(a, b) GLUE(a, b) #define STATIC_ASSERT(cond) typedef char GLUE2(static_assertion_failed, __LINE__)[(cond) ? 1 : -1] diff --git a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp index b057620ca..686e38483 100644 --- a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -1008,7 +1008,7 @@ void J3DTevBlock16::setTevKColorSel(u32 i, const u8* pNum) { /* 802EA3C0-802EA3CC .text getTevKColorSel__13J3DTevBlock16FUl */ u8 J3DTevBlock16::getTevKColorSel(u32 i) { - return mTevKAlphaSel[i]; + return mTevKColorSel[i]; } /* 802EA3CC-802EA3D8 .text setTevKAlphaSel__13J3DTevBlock16FUlUc */ @@ -1038,7 +1038,7 @@ void J3DTevBlock16::setTevStageNum(const u8* pNum) { /* 802EA408-802EA410 .text getTevStageNum__13J3DTevBlock16CFv */ u8 J3DTevBlock16::getTevStageNum() const { - /* Nonmatching */ + return mTevStageNum; } /* 802EA410-802EA44C .text setTevStage__13J3DTevBlock16FUl11J3DTevStage */ @@ -1098,7 +1098,7 @@ J3DIndTevStage * J3DTevBlock16::getIndTevStage(u32 i) { /* 802EA578-802EA580 .text getTexNoOffset__13J3DTevBlock16CFv */ u32 J3DTevBlock16::getTexNoOffset() const { - /* Nonmatching */ + return mTexNoOffset; } /* 802EA580-802EA588 .text getTevRegOffset__13J3DTevBlock16CFv */ @@ -1118,7 +1118,7 @@ J3DTevBlock16::~J3DTevBlock16() { /* 802EA5EC-802EA5F4 .text setTexNoOffset__11J3DTevBlockFUl */ void J3DTevBlock::setTexNoOffset(u32 i) { - /* Nonmatching */ + mTexNoOffset = i; } /* 802EA5F4-802EA5F8 .text ptrToIndex__12J3DTevBlock4Fv */ @@ -1208,7 +1208,7 @@ void J3DTevBlock4::setTevKColorSel(u32 i, const u8* pNum) { /* 802EA7AC-802EA7B8 .text getTevKColorSel__12J3DTevBlock4FUl */ u8 J3DTevBlock4::getTevKColorSel(u32 i) { - return mTevKAlphaSel[i]; + return mTevKColorSel[i]; } /* 802EA7B8-802EA7C4 .text setTevKAlphaSel__12J3DTevBlock4FUlUc */ @@ -1238,7 +1238,7 @@ void J3DTevBlock4::setTevStageNum(const u8* pNum) { /* 802EA7F4-802EA7FC .text getTevStageNum__12J3DTevBlock4CFv */ u8 J3DTevBlock4::getTevStageNum() const { - /* Nonmatching */ + return mTevStageNum; } /* 802EA7FC-802EA838 .text setTevStage__12J3DTevBlock4FUl11J3DTevStage */ @@ -1298,7 +1298,7 @@ J3DIndTevStage * J3DTevBlock4::getIndTevStage(u32 i) { /* 802EA964-802EA96C .text getTexNoOffset__12J3DTevBlock4CFv */ u32 J3DTevBlock4::getTexNoOffset() const { - /* Nonmatching */ + return mTexNoOffset; } /* 802EA96C-802EA974 .text getTevRegOffset__12J3DTevBlock4CFv */ @@ -1403,7 +1403,7 @@ void J3DTevBlock2::setTevKColorSel(u32 i, const u8* pNum) { /* 802EAB90-802EAB9C .text getTevKColorSel__12J3DTevBlock2FUl */ u8 J3DTevBlock2::getTevKColorSel(u32 i) { - return mTevKAlphaSel[i]; + return mTevKColorSel[i]; } /* 802EAB9C-802EABA8 .text setTevKAlphaSel__12J3DTevBlock2FUlUc */ @@ -2208,7 +2208,6 @@ J3DIndTexCoordScale * J3DIndBlockFull::getIndTexCoordScale(u32 i) { /* 802EBBA4-802EBC40 .text __dt__15J3DIndBlockFullFv */ J3DIndBlockFull::~J3DIndBlockFull() { - /* Nonmatching */ } /* 802EBC40-802EBC44 .text patchTexNo__11J3DTevBlockFv */ From 15343897d041f6fce71028a467ad8339ec1fceb1 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 16:58:32 -0700 Subject: [PATCH 59/89] even more J3DMatBlock --- include/JSystem/J3DGraphBase/J3DMatBlock.h | 21 +- include/JSystem/J3DGraphBase/J3DTevs.h | 14 +- include/dolphin/gd/GDBase.h | 16 + src/JSystem/J3DGraphBase/J3DMatBlock.cpp | 345 +++++++++++++++++---- 4 files changed, 311 insertions(+), 85 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index bf1b23604..940108e06 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -81,7 +81,7 @@ public: virtual void setTexMtxOffset(u32); virtual ~J3DTexGenBlockPatched(); -private: +protected: /* 0x04 */ u32 mTexGenNum; /* 0x08 */ J3DTexCoord mTexCoord[8]; /* 0x38 */ J3DTexMtx* mTexMtx[8]; @@ -248,8 +248,8 @@ private: /* 0x18 */ J3DTevOrder mTevOrder[8]; /* 0x38 */ J3DTevStage mTevStage[8]; /* 0x78 */ J3DIndTevStage mIndTevStage[8]; - /* 0x98 */ J3DGXColorS10 mTevColor[4]; - /* 0xB8 */ J3DGXColor mTevKColor[4]; + /* 0x98 */ GXColorS10 mTevColor[4]; + /* 0xB8 */ GXColor mTevKColor[4]; /* 0xC8 */ u8 mTevKColorSel[8]; /* 0xD0 */ u8 mTevStageNum; /* 0xD4 */ u32 mTevRegOffset; @@ -323,8 +323,8 @@ private: /* 0x10 */ J3DTevOrder mTevOrder[4]; /* 0x20 */ u8 mTevStageNum; /* 0x21 */ J3DTevStage mTevStage[4]; - /* 0x42 */ J3DGXColorS10 mTevColor[4]; - /* 0x62 */ J3DGXColor mTevKColor[4]; + /* 0x42 */ GXColorS10 mTevColor[4]; + /* 0x62 */ GXColor mTevKColor[4]; /* 0x72 */ u8 mTevKColorSel[4]; /* 0x76 */ u8 mTevKAlphaSel[4]; /* 0x7A */ J3DTevSwapModeTable mTevSwapModeTable[4]; @@ -394,10 +394,10 @@ public: private: /* 0x08 */ u16 mTexNo[2]; /* 0x0C */ J3DTevOrder mTevOrder[2]; - /* 0x14 */ J3DGXColorS10 mTevColor[4]; + /* 0x14 */ GXColorS10 mTevColor[4]; /* 0x34 */ u8 mTevStageNum; /* 0x35 */ J3DTevStage mTevStage[2]; - /* 0x45 */ J3DGXColor mTevKColor[4]; + /* 0x45 */ GXColor mTevKColor[4]; /* 0x55 */ u8 mTevKColorSel[2]; /* 0x57 */ u8 mTevKAlphaSel[2]; /* 0x59 */ J3DTevSwapModeTable mTevSwapModeTable[4]; @@ -469,8 +469,8 @@ private: /* 0x018 */ J3DTevOrder mTevOrder[16]; /* 0x058 */ u8 mTevStageNum; /* 0x059 */ J3DTevStage mTevStage[16]; - /* 0x0DA */ J3DGXColorS10 mTevColor[4]; - /* 0x0FA */ J3DGXColor mTevKColor[4]; + /* 0x0DA */ GXColorS10 mTevColor[4]; + /* 0x0FA */ GXColor mTevKColor[4]; /* 0x10A */ u8 mTevKColorSel[16]; /* 0x11A */ u8 mTevKAlphaSel[16]; /* 0x12A */ J3DTevSwapModeTable mTevSwapModeTable[4]; @@ -550,9 +550,6 @@ struct J3DZMode { }; struct J3DBlendInfo { - void operator=(J3DBlendInfo const& other) { - *(int*)&mType = *(int*)&other.mType; - } /* 0x0 */ u8 mType; /* 0x1 */ u8 mSrcFactor; /* 0x2 */ u8 mDstFactor; diff --git a/include/JSystem/J3DGraphBase/J3DTevs.h b/include/JSystem/J3DGraphBase/J3DTevs.h index 6d7311c88..0905c36c0 100644 --- a/include/JSystem/J3DGraphBase/J3DTevs.h +++ b/include/JSystem/J3DGraphBase/J3DTevs.h @@ -4,14 +4,14 @@ #include "dolphin/types.h" struct J3DTevStageInfo { - /* 0x0 */ u8 mTevMode; - /* 0x1 */ u8 mTevColorOp; - /* 0x2 */ u8 mTevColorAB; - /* 0x3 */ u8 mTevColorCD; + /* 0x0 */ u8 field_0x0; + /* 0x1 */ u8 field_0x1; + /* 0x2 */ u8 field_0x2; + /* 0x3 */ u8 field_0x3; /* 0x4 */ u8 field_0x4; - /* 0x5 */ u8 mTevAlphaOp; - /* 0x6 */ u8 mTevAlphaAB; - /* 0x7 */ u8 mTevSwapModeInfo; + /* 0x5 */ u8 field_0x5; + /* 0x6 */ u8 field_0x6; + /* 0x7 */ u8 field_0x7; }; struct J3DTevStage : public J3DTevStageInfo { diff --git a/include/dolphin/gd/GDBase.h b/include/dolphin/gd/GDBase.h index 712b92f24..32fdeba3c 100644 --- a/include/dolphin/gd/GDBase.h +++ b/include/dolphin/gd/GDBase.h @@ -28,6 +28,22 @@ inline u32 GDGetGDLObjOffset(GDLObj* obj) { return (u32)(obj->ptr - obj->start); } +inline void GDSetCurrOffset(s32 offs) { + __GDCurrentDL->ptr = __GDCurrentDL->start + offs; +} + +inline void GDAdvCurrOffset(s32 offs) { + __GDCurrentDL->ptr += offs; +} + +inline GDLObj* GDGetCurrent() { + return __GDCurrentDL; +} + +inline u8* GDGetCurrPointer() { + return __GDCurrentDL->ptr; +} + void GDInitGDLObj(GDLObj*, u8*, u32); void GDFlushCurrToMem(); void GDPadCurr32(); diff --git a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp index 686e38483..0c8f6a4c3 100644 --- a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -4,10 +4,22 @@ // #include "JSystem/J3DGraphBase/J3DMatBlock.h" +#include "JSystem/J3DGraphBase/J3DGD.h" +#include "dolphin/gd/GDBase.h" +#include "dolphin/os/OSCache.h" #include "dolphin/types.h" extern "C" extern const GXColor j3dDefaultColInfo; extern "C" extern const GXColor j3dDefaultAmbInfo; +extern "C" extern const GXColorS10 j3dDefaultTevColor; +extern "C" extern const GXColor j3dDefaultTevKColor; + +extern bool isTexNoReg(void*); +extern u16 getTexNoReg(void*); +extern void loadTexNo(u32, const u16 &); + +extern void J3DGDSetTevColorS10(GXTevRegID, GXColorS10); +extern void J3DGDSetTevKColor(GXTevKColorID, GXColor); /* 802DF794-802DF7E4 .text initialize__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::initialize() { @@ -44,62 +56,158 @@ void J3DColorBlockLightOn::initialize() { /* 802DF91C-802DF94C .text initialize__21J3DTexGenBlockPatchedFv */ void J3DTexGenBlockPatched::initialize() { - /* Nonmatching */ + mTexGenNum = 0; + for (u32 i = 0; i < 8; i++) + mTexMtx[i] = NULL; + mTexMtxOffset = 0; } /* 802DF94C-802DF97C .text initialize__15J3DTexGenBlock4Fv */ void J3DTexGenBlock4::initialize() { - /* Nonmatching */ + mTexGenNum = 0; + for (u32 i = 0; i < 4; i++) + mTexMtx[i] = NULL; + mTexMtxOffset = 0; } /* 802DF97C-802DF9AC .text initialize__19J3DTexGenBlockBasicFv */ void J3DTexGenBlockBasic::initialize() { - /* Nonmatching */ + mTexGenNum = 0; + for (u32 i = 0; i < 8; i++) + mTexMtx[i] = NULL; + mTexMtxOffset = 0; } /* 802DF9AC-802DF9B8 .text initialize__15J3DTevBlockNullFv */ void J3DTevBlockNull::initialize() { - /* Nonmatching */ + mTexNoOffset = 0; } /* 802DF9B8-802DFABC .text initialize__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::initialize() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) + mTexNo[i] = 0xFFFF; + for (u32 i = 0; i < ARRAY_SIZE(mTevStage); i++) { + mTevStage[i].field_0x0 = 0xC0 + i * 2; + mTevStage[i].field_0x4 = 0xC1 + i * 2; + } + for (u32 i = 0; i < 3; i++) + mTevColor[i] = j3dDefaultTevColor; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + mTevKColor[i] = j3dDefaultTevKColor; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) + mTevKColorSel[i] = GX_TEV_KCSEL_K0; + mTevStageNum = 1; + mTexNoOffset = 0; + mTevRegOffset = 0; } /* 802DFABC-802DFAE4 .text initialize__12J3DTevBlock1Fv */ void J3DTevBlock1::initialize() { - /* Nonmatching */ + mTexNo[0] = 0xFFFF; + mTevStage[0].field_0x0 = 0xC0; + mTevStage[0].field_0x4 = 0xC1; + mTexNoOffset = 0; } /* 802DFAE4-802DFBBC .text initialize__12J3DTevBlock2Fv */ void J3DTevBlock2::initialize() { - /* Nonmatching */ + mTexNo[0] = 0xFFFF; + mTexNo[1] = 0xFFFF; + mTevStageNum = 1; + + mTevStage[0].field_0x0 = 0xC0; + mTevStage[0].field_0x4 = 0xC1; + mTevStage[1].field_0x0 = 0xC2; + mTevStage[1].field_0x4 = 0xC3; + mTevKColorSel[0] = GX_TEV_KCSEL_K0; + mTevKColorSel[1] = GX_TEV_KCSEL_K0; + mTevKAlphaSel[0] = GX_TEV_KASEL_K0_A; + mTevKAlphaSel[1] = GX_TEV_KASEL_K0_A; + + for (u32 i = 0; i < 3; i++) + mTevColor[i] = j3dDefaultTevColor; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + mTevKColor[i] = j3dDefaultTevKColor; + mTexNoOffset = 0; + mTevRegOffset = 0; } /* 802DFBBC-802DFCCC .text initialize__12J3DTevBlock4Fv */ void J3DTevBlock4::initialize() { - /* Nonmatching */ + mTexNo[0] = 0xFFFF; + mTexNo[1] = 0xFFFF; + mTexNo[2] = 0xFFFF; + mTexNo[3] = 0xFFFF; + mTevStageNum = 1; + + mTevStage[0].field_0x0 = 0xC0; + mTevStage[0].field_0x4 = 0xC1; + mTevStage[1].field_0x0 = 0xC2; + mTevStage[1].field_0x4 = 0xC3; + mTevStage[2].field_0x0 = 0xC4; + mTevStage[2].field_0x4 = 0xC5; + mTevStage[3].field_0x0 = 0xC6; + mTevStage[3].field_0x4 = 0xC7; + mTevKColorSel[0] = GX_TEV_KCSEL_K0; + mTevKColorSel[1] = GX_TEV_KCSEL_K0; + mTevKColorSel[2] = GX_TEV_KCSEL_K0; + mTevKColorSel[3] = GX_TEV_KCSEL_K0; + mTevKAlphaSel[0] = GX_TEV_KASEL_K0_A; + mTevKAlphaSel[1] = GX_TEV_KASEL_K0_A; + mTevKAlphaSel[2] = GX_TEV_KASEL_K0_A; + mTevKAlphaSel[3] = GX_TEV_KASEL_K0_A; + + for (u32 i = 0; i < 3; i++) + mTevColor[i] = j3dDefaultTevColor; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + mTevKColor[i] = j3dDefaultTevKColor; + mTexNoOffset = 0; + mTevRegOffset = 0; } /* 802DFCCC-802DFDF0 .text initialize__13J3DTevBlock16Fv */ void J3DTevBlock16::initialize() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) + mTexNo[i] = 0xFFFF; + mTevStageNum = 1; + for (u32 i = 0; i < 3; i++) + mTevColor[i] = j3dDefaultTevColor; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + mTevKColor[i] = j3dDefaultTevKColor; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) + mTevKColorSel[i] = GX_TEV_KCSEL_K0; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) + mTevKAlphaSel[i] = GX_TEV_KASEL_K0_A; + for (u32 i = 0; i < ARRAY_SIZE(mTevStage); i++) { + mTevStage[i].field_0x0 = 0xC0 + i * 2; + mTevStage[i].field_0x4 = 0xC1 + i * 2; + } + mTexNoOffset = 0; + mTevRegOffset = 0; } /* 802DFDF0-802DFDFC .text initialize__15J3DIndBlockFullFv */ void J3DIndBlockFull::initialize() { - /* Nonmatching */ + mIndTexStageNum = 0; } /* 802DFDFC-802DFE20 .text initialize__16J3DPEBlockFogOffFv */ void J3DPEBlockFogOff::initialize() { - /* Nonmatching */ + mAlphaComp.field_0x0 = 0xFFFF; + mZMode.mZModeID = 0xFFFF; + mZCompLoc = 0xFF; + mDither = 1; } /* 802DFE20-802DFE50 .text initialize__14J3DPEBlockFullFv */ void J3DPEBlockFull::initialize() { - /* Nonmatching */ + mFog = NULL; + mAlphaComp.field_0x0 = 0xFFFF; + mZMode.mZModeID = 0xFFFF; + mZCompLoc = 0xFF; + mDither = 1; + mFogOffset = 0; } /* 802DFE50-802DFE58 .text countDLSize__21J3DColorBlockLightOffFv */ @@ -204,7 +312,8 @@ void J3DColorBlockLightOn::load() { /* 802E1180-802E11CC .text patch__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::patch() { - /* Nonmatching */ + patchMatColor(); + patchLight(); } /* 802E11CC-802E1378 .text patchMatColor__21J3DColorBlockLightOffFv */ @@ -219,7 +328,8 @@ void J3DColorBlockLightOff::patchLight() { /* 802E17B4-802E1800 .text patch__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::patch() { - /* Nonmatching */ + patchMatColor(); + patchLight(); } /* 802E1800-802E19AC .text patchMatColor__20J3DColorBlockLightOnFv */ @@ -233,8 +343,11 @@ void J3DColorBlockLightOn::patchLight() { } /* 802E1E18-802E1E80 .text diff__21J3DColorBlockLightOffFUl */ -void J3DColorBlockLightOff::diff(u32 i) { - /* Nonmatching */ +void J3DColorBlockLightOff::diff(u32 flag) { + if ((flag & 0x1) != 0) + diffMatColor(); + if ((flag & 0x2) != 0) + diffLight(); } /* 802E1E80-802E1FFC .text diffMatColor__21J3DColorBlockLightOffFv */ @@ -248,8 +361,11 @@ void J3DColorBlockLightOff::diffLight() { } /* 802E2408-802E2478 .text diff__20J3DColorBlockLightOnFUl */ -void J3DColorBlockLightOn::diff(u32 i) { - /* Nonmatching */ +void J3DColorBlockLightOn::diff(u32 flag) { + if ((flag & 0x1)) + diffMatColor(); + if ((flag & 0x2) || (flag >> 4) & 0x0f) + diffLight(); } /* 802E2478-802E25F4 .text diffMatColor__20J3DColorBlockLightOnFv */ @@ -288,8 +404,12 @@ void J3DTexGenBlockBasic::patch() { } /* 802E2D28-802E2D90 .text diff__21J3DTexGenBlockPatchedFUl */ -void J3DTexGenBlockPatched::diff(u32 i) { - /* Nonmatching */ +void J3DTexGenBlockPatched::diff(u32 flag) { + if ((flag >> 8) & 0x0f) { + diffTexMtx(); + if (flag & 0x1000) + diffTexGen(); + } } /* 802E2D90-802E2DF0 .text diffTexMtx__21J3DTexGenBlockPatchedFv */ @@ -329,7 +449,16 @@ void J3DTevBlockPatched::patchTexNo() { /* 802E414C-802E4218 .text patchTevReg__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::patchTevReg() { - /* Nonmatching */ + GDSetCurrOffset(mTevRegOffset); + u8 *pStart = GDGetCurrPointer(); + + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); + + u8 *pEnd = GDGetCurrPointer(); + DCFlushRange(pStart, pEnd - pStart); } /* 802E4218-802E4394 .text patchTexNoAndTexCoordScale__18J3DTevBlockPatchedFv */ @@ -339,12 +468,20 @@ void J3DTevBlockPatched::patchTexNoAndTexCoordScale() { /* 802E4394-802E43E0 .text patch__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::patch() { - /* Nonmatching */ + patchTexNo(); + patchTevReg(); } /* 802E43E0-802E4450 .text patchTexNo__12J3DTevBlock1Fv */ void J3DTevBlock1::patchTexNo() { - /* Nonmatching */ + GDSetCurrOffset(mTexNoOffset); + u8 *pStart = GDGetCurrPointer(); + + if (mTexNo[0] != 0xFFFF) + loadTexNo(0, mTexNo[0]); + + u8 *pEnd = GDGetCurrPointer(); + DCFlushRange(pStart, pEnd - pStart); } /* 802E4450-802E4454 .text patchTevReg__12J3DTevBlock1Fv */ @@ -368,7 +505,16 @@ void J3DTevBlock2::patchTexNo() { /* 802E45F8-802E46C4 .text patchTevReg__12J3DTevBlock2Fv */ void J3DTevBlock2::patchTevReg() { - /* Nonmatching */ + GDSetCurrOffset(mTevRegOffset); + u8 *pStart = GDGetCurrPointer(); + + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); + + u8 *pEnd = GDGetCurrPointer(); + DCFlushRange(pStart, pEnd - pStart); } /* 802E46C4-802E4814 .text patchTexNoAndTexCoordScale__12J3DTevBlock2Fv */ @@ -378,7 +524,8 @@ void J3DTevBlock2::patchTexNoAndTexCoordScale() { /* 802E4814-802E4860 .text patch__12J3DTevBlock2Fv */ void J3DTevBlock2::patch() { - /* Nonmatching */ + patchTexNo(); + patchTevReg(); } /* 802E4860-802E48F4 .text patchTexNo__12J3DTevBlock4Fv */ @@ -388,7 +535,16 @@ void J3DTevBlock4::patchTexNo() { /* 802E48F4-802E49C0 .text patchTevReg__12J3DTevBlock4Fv */ void J3DTevBlock4::patchTevReg() { - /* Nonmatching */ + GDSetCurrOffset(mTevRegOffset); + u8 *pStart = GDGetCurrPointer(); + + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); + + u8 *pEnd = GDGetCurrPointer(); + DCFlushRange(pStart, pEnd - pStart); } /* 802E49C0-802E4B3C .text patchTexNoAndTexCoordScale__12J3DTevBlock4Fv */ @@ -398,7 +554,8 @@ void J3DTevBlock4::patchTexNoAndTexCoordScale() { /* 802E4B3C-802E4B88 .text patch__12J3DTevBlock4Fv */ void J3DTevBlock4::patch() { - /* Nonmatching */ + patchTexNo(); + patchTevReg(); } /* 802E4B88-802E4C1C .text patchTexNo__13J3DTevBlock16Fv */ @@ -408,7 +565,16 @@ void J3DTevBlock16::patchTexNo() { /* 802E4C1C-802E4CE8 .text patchTevReg__13J3DTevBlock16Fv */ void J3DTevBlock16::patchTevReg() { - /* Nonmatching */ + GDSetCurrOffset(mTevRegOffset); + u8 *pStart = GDGetCurrPointer(); + + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); + + u8 *pEnd = GDGetCurrPointer(); + DCFlushRange(pStart, pEnd - pStart); } /* 802E4CE8-802E4E64 .text patchTexNoAndTexCoordScale__13J3DTevBlock16Fv */ @@ -418,17 +584,30 @@ void J3DTevBlock16::patchTexNoAndTexCoordScale() { /* 802E4E64-802E4EB0 .text patch__13J3DTevBlock16Fv */ void J3DTevBlock16::patch() { - /* Nonmatching */ + patchTexNo(); + patchTevReg(); } /* 802E4EB0-802E4F6C .text diff__11J3DTevBlockFUl */ -void J3DTevBlock::diff(u32 i) { - /* Nonmatching */ +void J3DTevBlock::diff(u32 flag) { + if ((flag >> 16) & 0x0f) + diffTexNo(); + if (flag & 0x4000000) + diffTexCoordScale(); + if ((flag >> 20) & 0x0f) { + diffTevStage(); + if (flag & 0x8000000) + diffTevStageIndirect(); + } + if (flag & 0x01000000) + diffTevReg(); } /* 802E4F6C-802E4FD0 .text diffTexNo__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTexNo() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) + if (mTexNo[i] != 0xFFFF) + loadTexNo(i, mTexNo[i]); } /* 802E4FD0-802E50E4 .text diffTevStage__18J3DTevBlockPatchedFv */ @@ -443,7 +622,10 @@ void J3DTevBlockPatched::diffTevStageIndirect() { /* 802E5194-802E5230 .text diffTevReg__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTevReg() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); } /* 802E5230-802E5328 .text diffTexCoordScale__18J3DTevBlockPatchedFv */ @@ -453,12 +635,12 @@ void J3DTevBlockPatched::diffTexCoordScale() { /* 802E5328-802E5360 .text diffTexNo__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTexNo() { - /* Nonmatching */ + if (mTexNo[0] != 0xFFFF) + loadTexNo(0, mTexNo[0]); } /* 802E5360-802E5364 .text diffTevReg__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTevReg() { - /* Nonmatching */ } /* 802E5364-802E5454 .text diffTevStage__12J3DTevBlock1Fv */ @@ -478,12 +660,17 @@ void J3DTevBlock1::diffTexCoordScale() { /* 802E553C-802E55A0 .text diffTexNo__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTexNo() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) + if (mTexNo[i] != 0xFFFF) + loadTexNo(i, mTexNo[i]); } /* 802E55A0-802E563C .text diffTevReg__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTevReg() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); } /* 802E563C-802E5750 .text diffTevStage__12J3DTevBlock2Fv */ @@ -503,12 +690,17 @@ void J3DTevBlock2::diffTexCoordScale() { /* 802E58C4-802E5928 .text diffTexNo__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTexNo() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) + if (mTexNo[i] != 0xFFFF) + loadTexNo(i, mTexNo[i]); } /* 802E5928-802E59C4 .text diffTevReg__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTevReg() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); } /* 802E59C4-802E5AD8 .text diffTevStage__12J3DTevBlock4Fv */ @@ -528,12 +720,17 @@ void J3DTevBlock4::diffTexCoordScale() { /* 802E5C80-802E5CE4 .text diffTexNo__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTexNo() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) + if (mTexNo[i] != 0xFFFF) + loadTexNo(i, mTexNo[i]); } /* 802E5CE4-802E5D80 .text diffTevReg__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTevReg() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) + J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]); + for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) + J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]); } /* 802E5D80-802E5E94 .text diffTevStage__13J3DTevBlock16Fv */ @@ -562,8 +759,21 @@ void J3DTevBlockPatched::ptrToIndex() { } /* 802E6204-802E6298 .text indexToPtr_private__11J3DTevBlockFUl */ -void J3DTevBlock::indexToPtr_private(u32 i) { - /* Nonmatching */ +void J3DTevBlock::indexToPtr_private(u32 offs) { + GDSetCurrOffset(offs); + u8* pStart = GDGetCurrPointer(); + + for (u32 i = 0; ; i++) { + u8* pDL = GDGetCurrPointer(); + if (!isTexNoReg(pDL)) + break; + + u16 texNoReg = getTexNoReg(pDL); + loadTexNo(i, texNoReg); + } + + u8 *pEnd = GDGetCurrPointer(); + DCFlushRange(pStart, pEnd - pStart); } /* 802E6298-802E6494 .text load__15J3DIndBlockFullFv */ @@ -572,7 +782,7 @@ void J3DIndBlockFull::load() { } /* 802E6494-802E657C .text diff__15J3DIndBlockFullFUl */ -void J3DIndBlockFull::diff(u32 i) { +void J3DIndBlockFull::diff(u32 flag) { /* Nonmatching */ } @@ -622,8 +832,11 @@ void J3DPEBlockFull::diffBlend() { } /* 802E7E44-802E7EAC .text diff__14J3DPEBlockFullFUl */ -void J3DPEBlockFull::diff(u32 i) { - /* Nonmatching */ +void J3DPEBlockFull::diff(u32 flag) { + if ((flag & 0x10000000)) + diffFog(); + if ((flag & 0x20000000)) + diffBlend(); } /* 802E7EAC-802E7F88 .text reset__21J3DColorBlockLightOffFP13J3DColorBlock */ @@ -837,8 +1050,9 @@ J3DPEBlockFull::~J3DPEBlockFull() { } /* 802EA088-802EA0BC .text diff__16J3DPEBlockFogOffFUl */ -void J3DPEBlockFogOff::diff(u32 i) { - /* Nonmatching */ +void J3DPEBlockFogOff::diff(u32 flag) { + if ((flag & 0x20000000) != 0) + diffBlend(); } /* 802EA0BC-802EA0C8 .text getType__16J3DPEBlockFogOffFv */ @@ -1043,17 +1257,17 @@ u8 J3DTevBlock16::getTevStageNum() const { /* 802EA410-802EA44C .text setTevStage__13J3DTevBlock16FUl11J3DTevStage */ void J3DTevBlock16::setTevStage(u32 i, J3DTevStage stage) { - /* Nonmatching */ + mTevStage[i] = stage; } /* 802EA44C-802EA488 .text setTevStage__13J3DTevBlock16FUlPC11J3DTevStage */ void J3DTevBlock16::setTevStage(u32 i, const J3DTevStage* pStage) { - /* Nonmatching */ + mTevStage[i] = *pStage; } /* 802EA488-802EA49C .text getTevStage__13J3DTevBlock16FUl */ J3DTevStage * J3DTevBlock16::getTevStage(u32 i) { - /* Nonmatching */ + return &mTevStage[i]; } /* 802EA49C-802EA4D4 .text setTevSwapModeInfo__13J3DTevBlock16FUl18J3DTevSwapModeInfo */ @@ -1068,17 +1282,17 @@ void J3DTevBlock16::setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { /* 802EA50C-802EA51C .text setTevSwapModeTable__13J3DTevBlock16FUl19J3DTevSwapModeTable */ void J3DTevBlock16::setTevSwapModeTable(u32 i, J3DTevSwapModeTable table) { - /* Nonmatching */ + mTevSwapModeTable[i] = table; } /* 802EA51C-802EA52C .text setTevSwapModeTable__13J3DTevBlock16FUlPC19J3DTevSwapModeTable */ void J3DTevBlock16::setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) { - /* Nonmatching */ + mTevSwapModeTable[i] = *pTable; } /* 802EA52C-802EA53C .text getTevSwapModeTable__13J3DTevBlock16FUl */ J3DTevSwapModeTable * J3DTevBlock16::getTevSwapModeTable(u32 i) { - /* Nonmatching */ + return &mTevSwapModeTable[i]; } /* 802EA53C-802EA550 .text setIndTevStage__13J3DTevBlock16FUl14J3DIndTevStage */ @@ -1093,7 +1307,7 @@ void J3DTevBlock16::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { /* 802EA564-802EA578 .text getIndTevStage__13J3DTevBlock16FUl */ J3DIndTevStage * J3DTevBlock16::getIndTevStage(u32 i) { - /* Nonmatching */ + return &mIndTevStage[i]; } /* 802EA578-802EA580 .text getTexNoOffset__13J3DTevBlock16CFv */ @@ -1117,13 +1331,12 @@ J3DTevBlock16::~J3DTevBlock16() { } /* 802EA5EC-802EA5F4 .text setTexNoOffset__11J3DTevBlockFUl */ -void J3DTevBlock::setTexNoOffset(u32 i) { - mTexNoOffset = i; +void J3DTevBlock::setTexNoOffset(u32 offs) { + mTexNoOffset = offs; } /* 802EA5F4-802EA5F8 .text ptrToIndex__12J3DTevBlock4Fv */ void J3DTevBlock4::ptrToIndex() { - /* Nonmatching */ } /* 802EA5F8-802EA61C .text indexToPtr__12J3DTevBlock4Fv */ @@ -1133,7 +1346,7 @@ void J3DTevBlock4::indexToPtr() { /* 802EA61C-802EA628 .text getType__12J3DTevBlock4Fv */ u32 J3DTevBlock4::getType() { - /* Nonmatching */ + return 'TVB4'; } /* 802EA628-802EA638 .text setTexNo__12J3DTevBlock4FUlUs */ @@ -1243,17 +1456,17 @@ u8 J3DTevBlock4::getTevStageNum() const { /* 802EA7FC-802EA838 .text setTevStage__12J3DTevBlock4FUl11J3DTevStage */ void J3DTevBlock4::setTevStage(u32 i, J3DTevStage stage) { - /* Nonmatching */ + mTevStage[i] = stage; } /* 802EA838-802EA874 .text setTevStage__12J3DTevBlock4FUlPC11J3DTevStage */ void J3DTevBlock4::setTevStage(u32 i, const J3DTevStage* pStage) { - /* Nonmatching */ + mTevStage[i] = *pStage; } /* 802EA874-802EA888 .text getTevStage__12J3DTevBlock4FUl */ J3DTevStage * J3DTevBlock4::getTevStage(u32 i) { - /* Nonmatching */ + return &mTevStage[i]; } /* 802EA888-802EA8C0 .text setTevSwapModeInfo__12J3DTevBlock4FUl18J3DTevSwapModeInfo */ @@ -1268,17 +1481,17 @@ void J3DTevBlock4::setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { /* 802EA8F8-802EA908 .text setTevSwapModeTable__12J3DTevBlock4FUl19J3DTevSwapModeTable */ void J3DTevBlock4::setTevSwapModeTable(u32 i, J3DTevSwapModeTable table) { - /* Nonmatching */ + mTevSwapModeTable[i] = table; } /* 802EA908-802EA918 .text setTevSwapModeTable__12J3DTevBlock4FUlPC19J3DTevSwapModeTable */ void J3DTevBlock4::setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) { - /* Nonmatching */ + mTevSwapModeTable[i] = *pTable; } /* 802EA918-802EA928 .text getTevSwapModeTable__12J3DTevBlock4FUl */ J3DTevSwapModeTable * J3DTevBlock4::getTevSwapModeTable(u32 i) { - /* Nonmatching */ + return &mTevSwapModeTable[i]; } /* 802EA928-802EA93C .text setIndTevStage__12J3DTevBlock4FUl14J3DIndTevStage */ @@ -1293,7 +1506,7 @@ void J3DTevBlock4::setIndTevStage(u32 i, const J3DIndTevStage* pStage) { /* 802EA950-802EA964 .text getIndTevStage__12J3DTevBlock4FUl */ J3DIndTevStage * J3DTevBlock4::getIndTevStage(u32 i) { - /* Nonmatching */ + return &mIndTevStage[i]; } /* 802EA964-802EA96C .text getTexNoOffset__12J3DTevBlock4CFv */ From 2741687de13ee1e9b86d78908a2c87eb26f217c4 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 17:08:08 -0700 Subject: [PATCH 60/89] J3DShape full match --- configure.py | 2 +- src/JSystem/J3DGraphBase/J3DShape.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/configure.py b/configure.py index d34159048..a5da38af6 100644 --- a/configure.py +++ b/configure.py @@ -853,7 +853,7 @@ config.libs = [ Object(NonMatching, "JSystem/J3DGraphBase/J3DTransform.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DPacket.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DShapeMtx.cpp"), - Object(NonMatching, "JSystem/J3DGraphBase/J3DShape.cpp"), + Object(Matching, "JSystem/J3DGraphBase/J3DShape.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DMaterial.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DMatBlock.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DTevs.cpp"), diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp index 1dcd464de..966890774 100644 --- a/src/JSystem/J3DGraphBase/J3DShape.cpp +++ b/src/JSystem/J3DGraphBase/J3DShape.cpp @@ -152,7 +152,9 @@ void J3DShape::makeVtxArrayCmd() { mHasNBT = true; stride[GX_VA_NRM - GX_VA_POS] *= 3; array[GX_VA_NRM - GX_VA_POS] = mVertexData->getVtxNBTArray(); - } else if (vtxDesc->attr == GX_VA_PNMTXIDX && vtxDesc->type != GX_NONE) { + } + + if (vtxDesc->attr == GX_VA_PNMTXIDX && vtxDesc->type != GX_NONE) { mHasPNMTXIdx = true; } } From 4e40d0643968886b2c8cdacfed655400fd8ffb49 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 18:33:12 -0700 Subject: [PATCH 61/89] J3DShapeMtx progress --- include/JSystem/J3DGraphBase/J3DShape.h | 30 +-- include/JSystem/J3DGraphBase/J3DShapeMtx.h | 81 ++++-- include/JSystem/J3DGraphBase/J3DSys.h | 80 +++--- src/JSystem/J3DGraphBase/J3DShape.cpp | 4 +- src/JSystem/J3DGraphBase/J3DShapeMtx.cpp | 294 +++++++++++++++------ src/JSystem/J3DGraphBase/J3DSys.cpp | 2 +- 6 files changed, 343 insertions(+), 148 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DShape.h b/include/JSystem/J3DGraphBase/J3DShape.h index a1fdf2479..a4a95716d 100644 --- a/include/JSystem/J3DGraphBase/J3DShape.h +++ b/include/JSystem/J3DGraphBase/J3DShape.h @@ -72,22 +72,22 @@ public: kVcdVatDLSize = 0xC0, }; - /* 80314B48 */ void initialize(); - /* 80314BB8 */ void addTexMtxIndexInDL(_GXAttr, u32); - /* 80314CBC */ void addTexMtxIndexInVcd(_GXAttr); - /* 80314DA8 */ void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]); - /* 80314E28 */ u32 countBumpMtxNum() const; - /* 80314EEC */ void loadVtxArray() const; - /* 80314F5C */ bool isSameVcdVatCmd(J3DShape*); - /* 80314F98 */ void makeVtxArrayCmd(); - /* 80315260 */ void makeVcdVatCmd(); - /* 80315300 */ void loadPreDrawSetting() const; - /* 80315398 */ void setArrayAndBindPipeline() const; + void initialize(); + void addTexMtxIndexInDL(_GXAttr, u32); + void addTexMtxIndexInVcd(_GXAttr); + void calcNBTScale(Vec const&, Mtx33*, Mtx33*); + u32 countBumpMtxNum() const; + void loadVtxArray() const; + bool isSameVcdVatCmd(J3DShape*); + void makeVtxArrayCmd(); + void makeVcdVatCmd(); + void loadPreDrawSetting() const; + void setArrayAndBindPipeline() const; - /* 803155E0 */ virtual void draw() const; - /* 8031544C */ virtual void drawFast() const; - /* 80315628 */ virtual void simpleDraw() const; - /* 803156AC */ virtual void simpleDrawCache() const; + virtual void draw() const; + virtual void drawFast() const; + virtual void simpleDraw() const; + virtual void simpleDrawCache() const; void onFlag(u32 flag) { mFlags |= flag; } void offFlag(u32 flag) { mFlags &= ~flag; } diff --git a/include/JSystem/J3DGraphBase/J3DShapeMtx.h b/include/JSystem/J3DGraphBase/J3DShapeMtx.h index 8c2a29f8a..5435ed7df 100644 --- a/include/JSystem/J3DGraphBase/J3DShapeMtx.h +++ b/include/JSystem/J3DGraphBase/J3DShapeMtx.h @@ -27,13 +27,10 @@ public: static J3DTexMtxObj* sTexMtxObj; }; -extern u8 struct_804515B0; -extern u8 struct_804515B1; -extern u8 struct_804515B2; -extern u8 struct_804515B3; - class J3DShapeMtx { public: + typedef void (J3DShapeMtx::*MtxLoadIndx)(int mtxNo, u16 index) const; + J3DShapeMtx(u16 useMtxIndex) : mUseMtxIndex(useMtxIndex) {} void resetMtxLoadCache(); @@ -49,25 +46,58 @@ public: virtual void load() const; virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]); - static u8 sMtxLoadPipeline[48]; - static u16 sMtxLoadCache[10 + 2 /* padding */]; + static MtxLoadIndx sMtxLoadPipeline[4]; static u32 sCurrentPipeline; - // static J3DScaleFlag sCurrentScaleFlag; static u8* sCurrentScaleFlag; static u8 sNBTFlag; - static u32 sTexMtxLoadType; static void setCurrentPipeline(u32 pipeline) { sCurrentPipeline = pipeline; } - static void setLODFlag(u8 flag) { struct_804515B1 = flag; } - static u8 getLODFlag() { return struct_804515B1; } static void resetMtxLoadCache(); -private: +protected: /* 0x04 */ u16 mUseMtxIndex; }; +class J3DShapeMtxImm : public J3DShapeMtx { +public: + typedef void (J3DShapeMtxImm::*MtxLoadImm)(int mtxNo, u16 index) const; + + J3DShapeMtxImm(u16 useMtxIndex) : J3DShapeMtx(useMtxIndex) {} + + virtual ~J3DShapeMtxImm(); + virtual u32 getType() const; + virtual void load() const; + virtual void loadNrmMtx(int, u16) const; + + void loadMtxImm_PNGP(int, u16) const; + void loadMtxImm_PCPU(int, u16) const; + void loadMtxImm_NCPU(int, u16) const; + void loadMtxImm_PNCPU(int, u16) const; + void loadMtxImm_PNGP_LOD(int, u16) const; + + static MtxLoadImm sMtxLoadPipeline[4]; +}; + +class J3DShapeMtxMultiImm : public J3DShapeMtxImm { +public: + J3DShapeMtxMultiImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} + + virtual ~J3DShapeMtxMultiImm(); + virtual u32 getType() const; + virtual u32 getUseMtxNum() const; + virtual u32 getUseMtxIndex(u16) const; + virtual void load() const; + virtual void loadNrmMtx(int, u16) const; + +private: + /* 0x6 */ u16 mUseMtxNum; + /* 0x8 */ u16* mUseMtxIndexTable; +}; + class J3DShapeMtxConcatView : public J3DShapeMtx { public: + typedef void (J3DShapeMtxConcatView::*MtxLoadConcatView)(int mtxNo, u16 index) const; + J3DShapeMtxConcatView(u16 useMtxIndex) : J3DShapeMtx(useMtxIndex) {} virtual ~J3DShapeMtxConcatView(); @@ -82,9 +112,26 @@ public: void loadMtxConcatView_PNCPU(int, u16) const; void loadMtxConcatView_PNGP_LOD(int, u16) const; - static u8 sMtxLoadPipeline[48]; - static u8 sMtxLoadLODPipeline[48]; - static u8 sMtxPtrTbl[8]; + static MtxLoadConcatView sMtxLoadPipeline[4]; + static Mtx * sMtxPtrTbl[2]; +}; + +class J3DShapeMtxBBoardImm : public J3DShapeMtxImm { +public: + J3DShapeMtxBBoardImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} + + virtual ~J3DShapeMtxBBoardImm(); + virtual u32 getType() const; + virtual void load() const; +}; + +class J3DShapeMtxYBBoardImm : public J3DShapeMtxImm { +public: + J3DShapeMtxYBBoardImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} + + virtual ~J3DShapeMtxYBBoardImm(); + virtual u32 getType() const; + virtual void load() const; }; class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView { @@ -115,7 +162,7 @@ public: virtual u32 getUseMtxNum() const; virtual u32 getUseMtxIndex(u16) const; virtual void load() const; - virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]); + virtual void calcNBTScale(Vec const&, Mtx33*, Mtx33*); private: /* 0x6 */ u16 mUseMtxNum; @@ -141,4 +188,4 @@ private: /* 0x8 */ u16* mUseMtxIndexTable; }; -#endif /* J3DSHAPEMTX_H */ \ No newline at end of file +#endif /* J3DSHAPEMTX_H */ diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 471bd69a4..7fd030089 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -30,45 +30,7 @@ enum J3DSysFlag { }; struct J3DSys { - /* 0x000 */ Mtx mViewMtx; - /* 0x030 */ J3DMtxCalc* mCurrentMtxCalc; - /* 0x034 */ u32 mFlags; - /* 0x038 */ J3DModel* mModel; - /* 0x03C */ J3DMatPacket* mMatPacket; - /* 0x040 */ J3DShapePacket* mShapePacket; - /* 0x044 */ J3DShape* mShape; - /* 0x048 */ J3DDrawBuffer* mDrawBuffer[2]; - /* 0x050 */ u32 mDrawMode; - /* 0x054 */ u32 mMaterialMode; - /* 0x058 */ J3DTexture* mTexture; - /* 0x05C */ u8 field_0x5c[0x04]; - /* 0x060 */ u32 mTexCacheRegionNum; - /* 0x064 */ GXTexRegion mTexCacheRegion[8]; - /* 0x0E4 */ u8 field_0xe4[0x20]; - /* 0x104 */ void* field_0x104; - /* 0x108 */ Mtx* mModelDrawMtx; - /* 0x10C */ Mtx33* mModelNrmMtx; - /* 0x110 */ void* mVtxPos; - /* 0x114 */ void* mVtxNrm; - /* 0x118 */ _GXColor* mVtxCol; - /* 0x11C */ Vec* mNBTScale; - /* 0x120 */ void* field_0x120; - /* 0x124 */ void* field_0x124; - - J3DSys(); - void loadPosMtxIndx(int, u16) const; - void loadNrmMtxIndx(int, u16) const; - void setTexCacheRegion(_GXTexCacheSize); - void drawInit(); - void reinitGX(); - void reinitGenMode(); - void reinitLighting(); - void reinitTransform(); - void reinitTexture(); - void reinitTevStages(); - void reinitIndStages(); - void reinitPixelProc(); - +public: enum DrawMode { /* 0x3 */ OPA_TEX_EDGE = 3, /* 0x4 */ XLU, @@ -130,11 +92,51 @@ struct J3DSys { void setViewMtx(Mtx m) { MTXCopy(m, mViewMtx); } J3DModel* getModel() { return mModel; } + Vec& getNBTScale() { return *mNBTScale; } static Mtx mCurrentMtx; static Vec mCurrentS; static Vec mParentS; static u16 sTexCoordScaleTable[32]; + + /* 0x000 */ Mtx mViewMtx; + /* 0x030 */ J3DMtxCalc* mCurrentMtxCalc; + /* 0x034 */ u32 mFlags; + /* 0x038 */ J3DModel* mModel; + /* 0x03C */ J3DMatPacket* mMatPacket; + /* 0x040 */ J3DShapePacket* mShapePacket; + /* 0x044 */ J3DShape* mShape; + /* 0x048 */ J3DDrawBuffer* mDrawBuffer[2]; + /* 0x050 */ u32 mDrawMode; + /* 0x054 */ u32 mMaterialMode; + /* 0x058 */ J3DTexture* mTexture; + /* 0x05C */ u8 field_0x5c[0x04]; + /* 0x060 */ u32 mTexCacheRegionNum; + /* 0x064 */ GXTexRegion mTexCacheRegion[8]; + /* 0x0E4 */ u8 field_0xe4[0x20]; + /* 0x104 */ void* field_0x104; + /* 0x108 */ Mtx* mModelDrawMtx; + /* 0x10C */ Mtx33* mModelNrmMtx; + /* 0x110 */ void* mVtxPos; + /* 0x114 */ void* mVtxNrm; + /* 0x118 */ _GXColor* mVtxCol; + /* 0x11C */ void* field_0x11c; + /* 0x120 */ void* field_0x120; + /* 0x124 */ Vec* mNBTScale; + + J3DSys(); + void loadPosMtxIndx(int, u16) const; + void loadNrmMtxIndx(int, u16) const; + void setTexCacheRegion(_GXTexCacheSize); + void drawInit(); + void reinitGX(); + void reinitGenMode(); + void reinitLighting(); + void reinitTransform(); + void reinitTexture(); + void reinitTevStages(); + void reinitIndStages(); + void reinitPixelProc(); }; extern u32 j3dDefaultViewNo; diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp index 966890774..76ed4ab02 100644 --- a/src/JSystem/J3DGraphBase/J3DShape.cpp +++ b/src/JSystem/J3DGraphBase/J3DShape.cpp @@ -44,9 +44,9 @@ void J3DShape::initialize() { } /* 802DD1FC-802DD27C .text calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f */ -void J3DShape::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) { +void J3DShape::calcNBTScale(Vec const& scale, Mtx33* pSrc, Mtx33* pDst) { for (u16 i = 0; i < getMtxGroupNum(); i++) - getShapeMtx(i)->calcNBTScale(param_0, param_1, param_2); + getShapeMtx(i)->calcNBTScale(scale, pSrc, pDst); } /* 802DD27C-802DD2F0 .text countBumpMtxNum__8J3DShapeCFv */ diff --git a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp index 4db60deeb..ade45064f 100644 --- a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp +++ b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp @@ -4,136 +4,282 @@ // #include "JSystem/J3DGraphBase/J3DShapeMtx.h" -#include "dolphin/types.h" +#include "JSystem/J3DGraphBase/J3DGD.h" +#include "JSystem/J3DGraphBase/J3DPacket.h" +#include "JSystem/J3DGraphAnimator/J3DModel.h" +#include "JSystem/J3DGraphBase/J3DShapeDraw.h" +#include "JSystem/J3DGraphBase/J3DSys.h" + +extern void J3DFifoLoadNrmMtxImm(Mtx, u32); +extern void J3DFifoLoadNrmMtxImm3x3(Mtx33, u32); +extern void J3DFifoLoadPosMtxImm(Mtx, u32); +extern void J3DPSMtx33Copy(Mtx33, Mtx33); +extern void J3DScaleNrmMtx(Mtx, Vec const &); +extern void J3DScaleNrmMtx33(Mtx33, Vec const &); +extern void J3DCalcBBoardMtx(Mtx); + +u32 J3DShapeMtx::sCurrentPipeline; /* 802DB9D8-802DBA1C .text loadMtxIndx_PNGP__11J3DShapeMtxCFiUs */ -void J3DShapeMtx::loadMtxIndx_PNGP(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtx::loadMtxIndx_PNGP(int mtxNo, u16 index) const { + J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, index, 0xB000 | ((u16)(mtxNo * 0x0C))); + J3DFifoLoadIndx(GX_CMD_LOAD_INDX_B, index, 0x8000 | ((u16)((mtxNo * 0x09) + 0x400))); } /* 802DBA1C-802DBA7C .text loadMtxIndx_PCPU__11J3DShapeMtxCFiUs */ -void J3DShapeMtx::loadMtxIndx_PCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtx::loadMtxIndx_PCPU(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); + j3dSys.loadNrmMtxIndx(mtxNo, index); } /* 802DBA7C-802DBAC8 .text loadMtxIndx_NCPU__11J3DShapeMtxCFiUs */ -void J3DShapeMtx::loadMtxIndx_NCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtx::loadMtxIndx_NCPU(int mtxNo, u16 index) const { + j3dSys.loadPosMtxIndx(mtxNo, index); + J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); } /* 802DBAC8-802DBB20 .text loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs */ -void J3DShapeMtx::loadMtxIndx_PNCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtx::loadMtxIndx_PNCPU(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); + J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); } /* 802DBB20-802DBB94 .text loadMtxImm_PNGP__14J3DShapeMtxImmCFiUs */ -void J3DShapeMtxImm::loadMtxImm_PNGP(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxImm::loadMtxImm_PNGP(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(j3dSys.getModelDrawMtx(index), mtxNo * 3); + loadNrmMtx(mtxNo, index); } /* 802DBB94-802DBC00 .text loadMtxImm_PCPU__14J3DShapeMtxImmCFiUs */ -void J3DShapeMtxImm::loadMtxImm_PCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxImm::loadMtxImm_PCPU(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); + loadNrmMtx(mtxNo, index); } /* 802DBC00-802DBC60 .text loadMtxImm_NCPU__14J3DShapeMtxImmCFiUs */ -void J3DShapeMtxImm::loadMtxImm_NCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxImm::loadMtxImm_NCPU(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(j3dSys.getModelDrawMtx(index), mtxNo * 3); + J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); } /* 802DBC60-802DBCB8 .text loadMtxImm_PNCPU__14J3DShapeMtxImmCFiUs */ -void J3DShapeMtxImm::loadMtxImm_PNCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxImm::loadMtxImm_PNCPU(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); + J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); } /* 802DBCB8-802DBD44 .text loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs */ -void J3DShapeMtxConcatView::loadMtxConcatView_PNGP(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxConcatView::loadMtxConcatView_PNGP(int mtxNo, u16 index) const { + Mtx mtx; + MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(index), mtx); + J3DFifoLoadPosMtxImm(mtx, mtxNo * 3); + loadNrmMtx(mtxNo, index, mtx); } /* 802DBD44-802DBDD4 .text loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs */ -void J3DShapeMtxConcatView::loadMtxConcatView_PCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxConcatView::loadMtxConcatView_PCPU(int mtxNo, u16 index) const { + Mtx mtx; + MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(index), mtx); + J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); + loadNrmMtx(mtxNo, index, mtx); } /* 802DBDD4-802DBE4C .text loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs */ -void J3DShapeMtxConcatView::loadMtxConcatView_NCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxConcatView::loadMtxConcatView_NCPU(int mtxNo, u16 index) const { + Mtx mtx; + MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(index), mtx); + J3DFifoLoadPosMtxImm(mtx, mtxNo * 3); + J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); } /* 802DBE4C-802DBEA4 .text loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs */ -void J3DShapeMtxConcatView::loadMtxConcatView_PNCPU(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxConcatView::loadMtxConcatView_PNCPU(int mtxNo, u16 index) const { + J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); + J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), mtxNo * 3); } +J3DShapeMtx::MtxLoadIndx J3DShapeMtx::sMtxLoadPipeline[] = { + &J3DShapeMtx::loadMtxIndx_PNGP, + &J3DShapeMtx::loadMtxIndx_PCPU, + &J3DShapeMtx::loadMtxIndx_NCPU, + &J3DShapeMtx::loadMtxIndx_PNCPU, +}; + /* 802DBEA4-802DBF00 .text load__11J3DShapeMtxCFv */ void J3DShapeMtx::load() const { - /* Nonmatching */ + MtxLoadIndx f = sMtxLoadPipeline[sCurrentPipeline]; + (this->*f)(0, mUseMtxIndex); } /* 802DBF00-802DBF60 .text calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f */ -void J3DShapeMtx::calcNBTScale(const Vec&, float(*)[3][3], float(*)[3][3]) { - /* Nonmatching */ +void J3DShapeMtx::calcNBTScale(const Vec& scale, Mtx33* pSrc, Mtx33* pDst) { + J3DPSMtx33Copy(pSrc[mUseMtxIndex], pDst[mUseMtxIndex]); + J3DScaleNrmMtx33(pDst[mUseMtxIndex], scale); } +J3DShapeMtxImm::MtxLoadImm J3DShapeMtxImm::sMtxLoadPipeline[] = { + &J3DShapeMtxImm::loadMtxImm_PNGP, + &J3DShapeMtxImm::loadMtxImm_PCPU, + &J3DShapeMtxImm::loadMtxImm_NCPU, + &J3DShapeMtxImm::loadMtxImm_PNCPU, +}; + /* 802DBF60-802DBFBC .text load__14J3DShapeMtxImmCFv */ void J3DShapeMtxImm::load() const { - /* Nonmatching */ + MtxLoadImm f = sMtxLoadPipeline[sCurrentPipeline]; + (this->*f)(0, mUseMtxIndex); } +J3DShapeMtxConcatView::MtxLoadConcatView J3DShapeMtxConcatView::sMtxLoadPipeline[] = { + &J3DShapeMtxConcatView::loadMtxConcatView_PNGP, + &J3DShapeMtxConcatView::loadMtxConcatView_PCPU, + &J3DShapeMtxConcatView::loadMtxConcatView_NCPU, + &J3DShapeMtxConcatView::loadMtxConcatView_PNCPU, +}; + +Mtx * J3DShapeMtxConcatView::sMtxPtrTbl[2]; + /* 802DBFBC-802DC08C .text load__21J3DShapeMtxConcatViewCFv */ void J3DShapeMtxConcatView::load() const { - /* Nonmatching */ + sMtxPtrTbl[0] = j3dSys.getModel()->mpNodeMtx; + sMtxPtrTbl[1] = j3dSys.getModel()->mpWeightEnvMtx; + + MtxLoadConcatView f = sMtxLoadPipeline[sCurrentPipeline]; + j3dSys.setModelDrawMtx(sMtxPtrTbl[j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex)]); + (this->*f)(0, j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex)); } /* 802DC08C-802DC184 .text loadNrmMtx__14J3DShapeMtxImmCFiUs */ -void J3DShapeMtxImm::loadNrmMtx(int, unsigned short) const { - /* Nonmatching */ +void J3DShapeMtxImm::loadNrmMtx(int mtxNo, u16 index) const { + if (J3DShapeMtx::sCurrentScaleFlag[index] == 1) { + if (J3DShapeMtx::sNBTFlag == 0) { + J3DFifoLoadNrmMtxImm(j3dSys.getModelDrawMtx(index), 0); + } else { + Mtx33 mtx; + J3DPSMtx33CopyFrom34(j3dSys.getModelDrawMtx(index), mtx); + J3DScaleNrmMtx33(mtx, j3dSys.getNBTScale()); + J3DFifoLoadNrmMtxImm3x3(mtx, 0); + } + } else { + Mtx33 mtx; + J3DPSCalcInverseTranspose(j3dSys.getModelDrawMtx(index), mtx); + + if (J3DShapeMtx::sNBTFlag == 0) { + J3DFifoLoadNrmMtxImm(j3dSys.getModelDrawMtx(index), 0); + } else { + J3DScaleNrmMtx33(mtx, j3dSys.getNBTScale()); + J3DFifoLoadNrmMtxImm3x3(mtx, 0); + } + } } /* 802DC184-802DC254 .text loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f */ -void J3DShapeMtxConcatView::loadNrmMtx(int, unsigned short, float(*)[4]) const { - /* Nonmatching */ +void J3DShapeMtxConcatView::loadNrmMtx(int mtxNo, u16 index, Mtx mtx) const { } /* 802DC254-802DC2F4 .text load__16J3DShapeMtxMultiCFv */ void J3DShapeMtxMulti::load() const { - /* Nonmatching */ + MtxLoadIndx f = sMtxLoadPipeline[sCurrentPipeline]; + + for (s32 i = 0; i < mUseMtxNum; i++) { + if (mUseMtxIndexTable[i] != 0xFFFF) { + (this->*f)(i, mUseMtxIndexTable[i]); + } + } } /* 802DC2F4-802DC388 .text calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f */ -void J3DShapeMtxMulti::calcNBTScale(const Vec&, float(*)[3][3], float(*)[3][3]) { +void J3DShapeMtxMulti::calcNBTScale(const Vec&, Mtx33*, Mtx33*) { /* Nonmatching */ } /* 802DC388-802DC428 .text load__19J3DShapeMtxMultiImmCFv */ void J3DShapeMtxMultiImm::load() const { - /* Nonmatching */ + MtxLoadImm f = sMtxLoadPipeline[sCurrentPipeline]; + + for (s32 i = 0; i < mUseMtxNum; i++) { + if (mUseMtxIndexTable[i] != 0xFFFF) { + (this->*f)(i, mUseMtxIndexTable[i]); + } + } } /* 802DC428-802DC524 .text load__26J3DShapeMtxMultiConcatViewCFv */ void J3DShapeMtxMultiConcatView::load() const { - /* Nonmatching */ + sMtxPtrTbl[0] = j3dSys.getModel()->mpNodeMtx; + sMtxPtrTbl[1] = j3dSys.getModel()->mpWeightEnvMtx; + + MtxLoadConcatView f = sMtxLoadPipeline[sCurrentPipeline]; + + for (s32 i = 0; i < mUseMtxNum; i++) { + u16 useMtxIndex = mUseMtxIndexTable[i]; + if (useMtxIndex != 0xFFFF) { + u16 drawMtxIndex = j3dSys.getModel()->getModelData()->getDrawMtxIndex(useMtxIndex); + j3dSys.setModelDrawMtx(sMtxPtrTbl[j3dSys.getModel()->getModelData()->getDrawMtxFlag(useMtxIndex)]); + (this->*f)(i, drawMtxIndex); + } + } } /* 802DC524-802DC620 .text loadNrmMtx__19J3DShapeMtxMultiImmCFiUs */ -void J3DShapeMtxMultiImm::loadNrmMtx(int, unsigned short) const { +void J3DShapeMtxMultiImm::loadNrmMtx(int mtxNo, u16 index) const { /* Nonmatching */ } /* 802DC620-802DC6F4 .text loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f */ -void J3DShapeMtxMultiConcatView::loadNrmMtx(int, unsigned short, float(*)[4]) const { +void J3DShapeMtxMultiConcatView::loadNrmMtx(int, u16, Mtx) const { /* Nonmatching */ } /* 802DC6F4-802DC7B8 .text load__20J3DShapeMtxBBoardImmCFv */ void J3DShapeMtxBBoardImm::load() const { - /* Nonmatching */ + Mtx mtx; + MTXCopy(j3dSys.getModelDrawMtx(mUseMtxIndex), mtx); + J3DCalcBBoardMtx(mtx); + J3DFifoLoadPosMtxImm(mtx, 0); + + mtx[0][0] = 1.0f / mtx[0][0]; + mtx[1][1] = 1.0f / mtx[1][1]; + mtx[2][2] = 1.0f / mtx[2][2]; + mtx[0][3] = 0.0f; + mtx[1][3] = 0.0f; + mtx[2][3] = 0.0f; + + if (sNBTFlag == 0) { + J3DFifoLoadNrmMtxImm(mtx, 0); + } else { + J3DScaleNrmMtx(mtx, j3dSys.getNBTScale()); + J3DFifoLoadNrmMtxImm(mtx, 0); + } } /* 802DC7B8-802DC8C0 .text load__27J3DShapeMtxBBoardConcatViewCFv */ void J3DShapeMtxBBoardConcatView::load() const { - /* Nonmatching */ + u16 drawMtxIndex = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex); + + Mtx mtx; + if (j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex) == 0) { + MTXConcat(j3dSys.getViewMtx(), j3dSys.getModel()->mpNodeMtx[drawMtxIndex], mtx); + } else { + MTXConcat(j3dSys.getViewMtx(), j3dSys.getModel()->mpWeightEnvMtx[drawMtxIndex], mtx); + } + + J3DCalcBBoardMtx(mtx); + J3DFifoLoadPosMtxImm(mtx, 0); + + mtx[0][0] = 1.0f / mtx[0][0]; + mtx[1][1] = 1.0f / mtx[1][1]; + mtx[2][2] = 1.0f / mtx[2][2]; + mtx[0][3] = 0.0f; + mtx[1][3] = 0.0f; + mtx[2][3] = 0.0f; + + if (sNBTFlag == 0) { + J3DFifoLoadNrmMtxImm(mtx, 0); + } else { + J3DScaleNrmMtx(mtx, j3dSys.getNBTScale()); + J3DFifoLoadNrmMtxImm(mtx, 0); + } } /* 802DC8C0-802DC9B8 .text load__21J3DShapeMtxYBBoardImmCFv */ @@ -167,13 +313,13 @@ J3DShapeMtxYBBoardConcatView::~J3DShapeMtxYBBoardConcatView() { } /* 802DCBF4-802DCC00 .text getType__21J3DShapeMtxYBBoardImmCFv */ -void J3DShapeMtxYBBoardImm::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxYBBoardImm::getType() const { + return 'SMYB'; } /* 802DCC00-802DCC08 .text getUseMtxIndex__11J3DShapeMtxCFUs */ -void J3DShapeMtx::getUseMtxIndex(unsigned short) const { - /* Nonmatching */ +u32 J3DShapeMtx::getUseMtxIndex(u16 i) const { + return mUseMtxIndex; } /* 802DCC08-802DCC74 .text __dt__21J3DShapeMtxYBBoardImmFv */ @@ -187,8 +333,8 @@ J3DShapeMtxBBoardConcatView::~J3DShapeMtxBBoardConcatView() { } /* 802DCCF0-802DCCFC .text getType__20J3DShapeMtxBBoardImmCFv */ -void J3DShapeMtxBBoardImm::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxBBoardImm::getType() const { + return 'SMBB'; } /* 802DCCFC-802DCD68 .text __dt__20J3DShapeMtxBBoardImmFv */ @@ -202,22 +348,22 @@ J3DShapeMtxMultiConcatView::~J3DShapeMtxMultiConcatView() { } /* 802DCDE4-802DCDF0 .text getType__26J3DShapeMtxMultiConcatViewCFv */ -void J3DShapeMtxMultiConcatView::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxMultiConcatView::getType() const { + return 'SMMI'; } /* 802DCDF0-802DCDF8 .text getUseMtxNum__26J3DShapeMtxMultiConcatViewCFv */ -void J3DShapeMtxMultiConcatView::getUseMtxNum() const { - /* Nonmatching */ +u32 J3DShapeMtxMultiConcatView::getUseMtxNum() const { + return mUseMtxNum; } /* 802DCDF8-802DCE08 .text getUseMtxIndex__26J3DShapeMtxMultiConcatViewCFUs */ -void J3DShapeMtxMultiConcatView::getUseMtxIndex(unsigned short) const { - /* Nonmatching */ +u32 J3DShapeMtxMultiConcatView::getUseMtxIndex(u16 i) const { + return mUseMtxIndexTable[i]; } /* 802DCE08-802DCE0C .text loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUs */ -void J3DShapeMtxMultiConcatView::loadNrmMtx(int, unsigned short) const { +void J3DShapeMtxMultiConcatView::loadNrmMtx(int mtxNo, u16 index) const { /* Nonmatching */ } @@ -227,18 +373,18 @@ J3DShapeMtxMultiImm::~J3DShapeMtxMultiImm() { } /* 802DCE78-802DCE84 .text getType__19J3DShapeMtxMultiImmCFv */ -void J3DShapeMtxMultiImm::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxMultiImm::getType() const { + return 'SMMI'; } /* 802DCE84-802DCE8C .text getUseMtxNum__19J3DShapeMtxMultiImmCFv */ -void J3DShapeMtxMultiImm::getUseMtxNum() const { - /* Nonmatching */ +u32 J3DShapeMtxMultiImm::getUseMtxNum() const { + return mUseMtxNum; } /* 802DCE8C-802DCE9C .text getUseMtxIndex__19J3DShapeMtxMultiImmCFUs */ -void J3DShapeMtxMultiImm::getUseMtxIndex(unsigned short) const { - /* Nonmatching */ +u32 J3DShapeMtxMultiImm::getUseMtxIndex(u16 i) const { + return mUseMtxIndexTable[i]; } /* 802DCE9C-802DCEF8 .text __dt__16J3DShapeMtxMultiFv */ @@ -247,18 +393,18 @@ J3DShapeMtxMulti::~J3DShapeMtxMulti() { } /* 802DCEF8-802DCF04 .text getType__16J3DShapeMtxMultiCFv */ -void J3DShapeMtxMulti::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxMulti::getType() const { + return 'SMML'; } /* 802DCF04-802DCF0C .text getUseMtxNum__16J3DShapeMtxMultiCFv */ -void J3DShapeMtxMulti::getUseMtxNum() const { - /* Nonmatching */ +u32 J3DShapeMtxMulti::getUseMtxNum() const { + return mUseMtxNum; } /* 802DCF0C-802DCF1C .text getUseMtxIndex__16J3DShapeMtxMultiCFUs */ -void J3DShapeMtxMulti::getUseMtxIndex(unsigned short) const { - /* Nonmatching */ +u32 J3DShapeMtxMulti::getUseMtxIndex(u16 i) const { + return mUseMtxIndexTable[i]; } /* 802DCF1C-802DCF88 .text __dt__21J3DShapeMtxConcatViewFv */ @@ -267,12 +413,12 @@ J3DShapeMtxConcatView::~J3DShapeMtxConcatView() { } /* 802DCF88-802DCF94 .text getType__21J3DShapeMtxConcatViewCFv */ -void J3DShapeMtxConcatView::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxConcatView::getType() const { + return 'SMCV'; } /* 802DCF94-802DCF98 .text loadNrmMtx__21J3DShapeMtxConcatViewCFiUs */ -void J3DShapeMtxConcatView::loadNrmMtx(int, unsigned short) const { +void J3DShapeMtxConcatView::loadNrmMtx(int mtxNo, u16 index) const { /* Nonmatching */ } @@ -282,8 +428,8 @@ J3DShapeMtxImm::~J3DShapeMtxImm() { } /* 802DCFF4-802DD000 .text getType__14J3DShapeMtxImmCFv */ -void J3DShapeMtxImm::getType() const { - /* Nonmatching */ +u32 J3DShapeMtxImm::getType() const { + return 'SMIM'; } /* 802DD000-802DD048 .text __dt__11J3DShapeMtxFv */ @@ -292,6 +438,6 @@ J3DShapeMtx::~J3DShapeMtx() { } /* 802DD048-802DD054 .text getType__11J3DShapeMtxCFv */ -void J3DShapeMtx::getType() const { - /* Nonmatching */ +u32 J3DShapeMtx::getType() const { + return 'SMTX'; } diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp index c1e76c230..8f2f571fe 100644 --- a/src/JSystem/J3DGraphBase/J3DSys.cpp +++ b/src/JSystem/J3DGraphBase/J3DSys.cpp @@ -44,7 +44,7 @@ J3DSys::J3DSys() { mVtxPos = NULL; mVtxNrm = NULL; mVtxCol = NULL; - mNBTScale = NULL; + field_0x11c = NULL; field_0x104 = NULL; field_0x120 = NULL; From a8ccae5d966f59631922c1658063911dbb65f39b Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 23 Sep 2023 16:04:11 -0400 Subject: [PATCH 62/89] Ygush 98% (one regswap remaining) --- include/f_op/f_op_actor_mng.h | 4 +-- src/d/actor/d_a_mozo.cpp | 2 +- src/d/actor/d_a_obj_Ygush00.cpp | 59 +++++++++++++++++++-------------- 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 45e75568e..89c6aad1a 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -537,8 +537,8 @@ inline f32 fopAcM_searchPlayerDistance(fopAc_ac_c* actor) { s8 dComIfGp_getReverb(int roomNo); inline void fopAcM_seStartCurrent(fopAc_ac_c* actor, u32 sfxID, u32 param_2) { - s8 roomNo = fopAcM_GetRoomNo(actor); - mDoAud_seStart(sfxID, &actor->current.pos, param_2, dComIfGp_getReverb(roomNo)); + s8 reverb = dComIfGp_getReverb(fopAcM_GetRoomNo(actor)); + mDoAud_seStart(sfxID, &actor->current.pos, param_2, reverb); } inline void fopAcM_seStart(fopAc_ac_c* actor, u32 sfxID, u32 param_2) { diff --git a/src/d/actor/d_a_mozo.cpp b/src/d/actor/d_a_mozo.cpp index fd256d8e7..ab57828d1 100644 --- a/src/d/actor/d_a_mozo.cpp +++ b/src/d/actor/d_a_mozo.cpp @@ -238,7 +238,7 @@ s32 daMozo_c::CreateInit() { // TODO: insert missing assignment here - mAnimMorf->getModel()->setUserArea(this); + mAnimMorf->getModel()->setUserArea((u32)this); for (int i = 0; i < mdlData->getJointNum(); i++) { if (i == 2) { mdlData->getJointNodePointer(2)->setCallBack((J3DNodeCallBack)daMozo_nodeCallBack); diff --git a/src/d/actor/d_a_obj_Ygush00.cpp b/src/d/actor/d_a_obj_Ygush00.cpp index 13ff1a2cd..631871a20 100644 --- a/src/d/actor/d_a_obj_Ygush00.cpp +++ b/src/d/actor/d_a_obj_Ygush00.cpp @@ -15,7 +15,7 @@ struct daObjGryw00_c { public: - f32 get_draw_water_lvl(void *i_this); + f32 get_draw_water_lv(void *i_this); }; struct daObjYgush00_c : public fopAc_ac_c { @@ -30,23 +30,29 @@ public: bool _execute(); bool _draw(); bool create_heap(); - static s32 solidHeapCB(fopAc_ac_c*); + static BOOL solidHeapCB(fopAc_ac_c*); public: - request_of_phase_process_class mPhs; - J3DModel * mpModel; - mDoExt_btkAnm mBtkAnm; - mDoExt_bckAnm mBckAnm; - s32 mType; - daObjGryw00_c * mpGryw00; + /* 0x290 */ request_of_phase_process_class mPhs; + /* 0x298 */ J3DModel * mpModel; + /* 0x29C */ mDoExt_btkAnm mBtkAnm; + /* 0x2B0 */ mDoExt_bckAnm mBckAnm; + /* 0x2C0 */ s32 mType; + /* 0x2C4 */ daObjGryw00_c * mpGryw00; }; namespace { static const char l_arcname[] = "Ygush00"; }; +// Needed for the .data section to match. +static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; +static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; +static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01}; +static f64 dummy4[2] = {3.0, 0.5}; + /* 00000078-0000009C .text solidHeapCB__14daObjYgush00_cFP10fopAc_ac_c */ -s32 daObjYgush00_c::solidHeapCB(fopAc_ac_c* ac) { +BOOL daObjYgush00_c::solidHeapCB(fopAc_ac_c* ac) { return ((daObjYgush00_c*)ac)->create_heap(); } @@ -56,25 +62,28 @@ bool daObjYgush00_c::create_heap() { static u32 btk_table[] = { 0x0E, 0x0D, 0x0D, 0x0D }; static u32 bck_table[] = { 0x06, 0x05, 0x05, 0x05 }; + J3DModelData * pModelData; bool ret = true; - - J3DModelData * pModelData = (J3DModelData *)dComIfG_getObjectRes(l_arcname, mdl_table[mType]); + + // TODO regswap + // r29 -> r30: g_dComIfG_gameInfo.mResControl.mObjectInfo / btkRet + // r30 -> r29: pModelData + pModelData = (J3DModelData *)dComIfG_getObjectRes(l_arcname, mdl_table[mType]); J3DAnmTextureSRTKey * pBtk = (J3DAnmTextureSRTKey *)dComIfG_getObjectRes(l_arcname, btk_table[mType]); J3DAnmTransform * pBck = (J3DAnmTransform *)dComIfG_getObjectRes(l_arcname, bck_table[mType]); if (!pModelData || !pBtk || !pBck) { JUT_ASSERT(207, 0); ret = false; - return ret; + } else { + mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, 0x11000222); + s32 btkRet = mBtkAnm.init(pModelData, pBtk, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + s32 bckRet = mBckAnm.init(pModelData, pBck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); + + if (!mpModel || !btkRet || !bckRet) + ret = false; } - mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, 0x11000222); - s32 btkRet = mBtkAnm.init(pModelData, pBtk, true, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, false); - s32 bckRet = mBckAnm.init(pModelData, pBck, true, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); - - if (!mpModel || !btkRet || !bckRet) - ret = false; - return ret; } @@ -124,7 +133,7 @@ bool daObjYgush00_c::_execute() { if (mType == 1) { if (mpGryw00 != NULL) { - if (mpGryw00->get_draw_water_lvl(mpGryw00) <= getPosition().y) { + if (mpGryw00->get_draw_water_lv(mpGryw00) <= getPosition().y) { fopAcM_seStartCurrent(this, 0x61fe, 0); } } else { @@ -148,27 +157,27 @@ bool daObjYgush00_c::_draw() { } /* 000006FC-0000071C .text daObjYgush00_Create__FP14daObjYgush00_c */ -s32 daObjYgush00_Create(daObjYgush00_c* i_this) { +static s32 daObjYgush00_Create(daObjYgush00_c* i_this) { return i_this->_create(); } /* 0000071C-00000740 .text daObjYgush00_Delete__FP14daObjYgush00_c */ -s32 daObjYgush00_Delete(daObjYgush00_c* i_this) { +static s32 daObjYgush00_Delete(daObjYgush00_c* i_this) { return i_this->_delete(); } /* 00000740-00000764 .text daObjYgush00_Execute__FP14daObjYgush00_c */ -s32 daObjYgush00_Execute(daObjYgush00_c* i_this) { +static s32 daObjYgush00_Execute(daObjYgush00_c* i_this) { return i_this->_execute(); } /* 00000764-00000788 .text daObjYgush00_Draw__FP14daObjYgush00_c */ -s32 daObjYgush00_Draw(daObjYgush00_c* i_this) { +static s32 daObjYgush00_Draw(daObjYgush00_c* i_this) { return i_this->_draw(); } /* 00000788-00000790 .text daObjYgush00_IsDelete__FP14daObjYgush00_c */ -s32 daObjYgush00_IsDelete(daObjYgush00_c* i_this) { +static s32 daObjYgush00_IsDelete(daObjYgush00_c* i_this) { return 1; } From 7ed024acfd822a4bc7932a85ea7763ecb62bde01 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 23 Sep 2023 01:58:35 -0400 Subject: [PATCH 63/89] Some d_cc_d work --- include/SSystem/SComponent/c_cc_d.h | 6 +- include/d/d_cc_d.h | 25 +-- src/d/d_cc_d.cpp | 248 +++++++++++++++++----------- 3 files changed, 172 insertions(+), 107 deletions(-) diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index 926469245..6c1ff3403 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -346,10 +346,12 @@ public: void setRPrm(s32 rprm) { mRPrm = rprm; } s32 getRPrm() const { return mRPrm; } cCcD_Obj* GetHitObj() { return mHitObj; } + void ClrObj() { mHitObj = NULL; } u32 MskSPrm(u32 mask) const { return mSPrm & mask; } u32 MskRPrm(u32 mask) { return mRPrm & mask; } void OnSPrmBit(u32 flag) { mSPrm |= flag; } void OffSPrmBit(u32 flag) { mSPrm &= ~flag; } + void ClrRPrm(u32 flag) { mRPrm &= ~flag; } void Set(cCcD_SrcObjCommonBase const& src) { mSPrm = src.mSPrm; @@ -364,7 +366,7 @@ public: virtual ~cCcD_ObjAt() {} void SetHit(cCcD_Obj*); void Set(cCcD_SrcObjAt const&); - void ClrHit(); + void ClrHit() { ClrObj(); } int GetType() const { return mType; } u32 GetGrp() const { return MskSPrm(0x1E); } bool ChkSet() const { return MskSPrm(1); } @@ -373,6 +375,7 @@ public: void SetType(u32 type) { mType = type; } void SetAtp(int atp) { mAtp = atp; } void ClrSet() { OffSPrmBit(1); } + void OffHitBit() { ClrRPrm(1); } u32 ChkHit() { return MskRPrm(1); } protected: @@ -470,6 +473,7 @@ public: void SetTgType(u32 type) { mObjTg.SetType(type); } void OnTgSPrmBit(u32 flag) { mObjTg.OnSPrmBit(flag); } void OffAtSetBit() { mObjAt.ClrSet(); } + void OffAtHitBit() { mObjAt.OffHitBit(); } void OnTgSetBit() { mObjTg.OnSPrmBit(1); } void OffTgSetBit() { mObjTg.ClrSet(); } void OnCoSetBit() { mObjCo.OnSPrmBit(1); } diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index f2fb07ea4..e22f5f1e7 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -68,7 +68,7 @@ struct dCcD_SrcCps { class dCcD_GStts : public cCcD_GStts { public: dCcD_GStts(); - virtual ~dCcD_GStts() {} + virtual ~dCcD_GStts(); void Ct(); void Move(); @@ -108,7 +108,7 @@ public: virtual void Ct(); virtual void ClrAt(); virtual void ClrTg(); - virtual ~dCcD_Stts() {} + virtual ~dCcD_Stts(); }; // Size = 0x3C @@ -129,15 +129,18 @@ public: public: dCcD_GAtTgCoCommonBase() { ct(); } - void ClrActorInfo(); + void ClrActorInfo() { + mApid = -1; + mAc = NULL; + } void ct(); void SetHitApid(unsigned int); fopAc_ac_c* GetAc(); void Set(dCcD_SrcGAtTgCoCommonBase const&); void SetEffCounterTimer(); - void SubtractEffCounter(); - bool ChkEffCounter(); - virtual ~dCcD_GAtTgCoCommonBase() {} + void SubtractEffCounter() { mEffCounter -= 1; } + bool ChkEffCounter() { return mEffCounter >= 0; } + virtual ~dCcD_GAtTgCoCommonBase(); void ClrEffCounter() { mEffCounter = 0; } u32 GetGFlag() const { return mGFlag; } @@ -152,14 +155,13 @@ public: bool ChkRPrm(u32 flag) const { return MskRPrm(flag); } void SetHitCallback(dCcD_HitCallback callback) { mHitCallback = callback; } dCcD_HitCallback GetHitCallback() { return mHitCallback; } - void ClrHit() { ClrActorInfo(); } }; // Size = 0x1C // Attack (At) Collider class dCcD_GObjAt : public dCcD_GAtTgCoCommonBase { public: void Set(dCcD_SrcGObjAt const&); - virtual ~dCcD_GObjAt() {} + virtual ~dCcD_GObjAt(); void SetVec(cXyz& vec) { mVec = vec; } cXyz& GetVec() { return mVec; } cXyz* GetVecP() { return &mVec; } @@ -174,6 +176,7 @@ public: void SetRVec(cXyz& vec) { mRVec = vec; } void SetHitPos(cXyz& pos) { mHitPos = pos; } cXyz* GetHitPosP() { return &mHitPos; } + void ClrHit() { ClrActorInfo(); } // private: /* 0x1C */ u8 mSe; @@ -189,7 +192,7 @@ public: class dCcD_GObjTg : public dCcD_GAtTgCoCommonBase { public: void Set(dCcD_SrcGObjTg const&); - virtual ~dCcD_GObjTg() {} + virtual ~dCcD_GObjTg(); void SetSe(u8 se) { mSe = se; } void SetVec(cXyz& vec) { mVec = vec; } cXyz& GetVec() { return mVec; } @@ -219,7 +222,7 @@ private: // Correction (Co) Collider class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase { public: - virtual ~dCcD_GObjCo() {} + virtual ~dCcD_GObjCo(); void Set(dCcD_SrcGObjCo const& pSrc) { dCcD_GAtTgCoCommonBase::Set(pSrc.mBase); } }; // Size = 0x1C ? @@ -363,6 +366,8 @@ public: void Set(dCcD_SrcCyl const&); cCcD_ShapeAttr* GetShapeAttr() { return this; } void StartCAt(cXyz&); + void StartCTg(cXyz&); + void MoveCAtTg(cXyz&); void MoveCAt(cXyz&); void MoveCTg(cXyz&); virtual ~dCcD_Cyl() {} diff --git a/src/d/d_cc_d.cpp b/src/d/d_cc_d.cpp index 9ad40c914..0377e51df 100644 --- a/src/d/d_cc_d.cpp +++ b/src/d/d_cc_d.cpp @@ -3,22 +3,41 @@ // Translation Unit: d_cc_d.cpp // -#include "d_cc_d.h" +#include "d/d_cc_d.h" +#include "f_op/f_op_actor_mng.h" #include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" /* 800AB2AC-800AB328 .text GetAc__22dCcD_GAtTgCoCommonBaseFv */ -void dCcD_GAtTgCoCommonBase::GetAc() { - /* Nonmatching */ +fopAc_ac_c* dCcD_GAtTgCoCommonBase::GetAc() { + if (mApid == -1) { + return NULL; + } + if (mAc == NULL) { + mAc = fopAcM_SearchByID(mApid); + if (mAc == NULL) { + mApid = -1; + } + } + return mAc; } /* 800AB328-800AB334 .text SetEffCounterTimer__22dCcD_GAtTgCoCommonBaseFv */ void dCcD_GAtTgCoCommonBase::SetEffCounterTimer() { - /* Nonmatching */ + mEffCounter = 5; } /* 800AB334-800AB384 .text __ct__10dCcD_GSttsFv */ dCcD_GStts::dCcD_GStts() { - /* Nonmatching */ + mAt = 0; + mTg = 0; + mRoomId = 0; + field_0x08 = -1; + mAtApid = -1; + mAtOldApid = -1; + mTgApid = -1; + mTgOldApid = -1; + field_0x1C = 0; } /* 800AB384-800AB3BC .text Ct__10dCcD_GSttsFv */ @@ -28,12 +47,34 @@ void dCcD_GStts::Ct() { /* 800AB3BC-800AB3DC .text Move__10dCcD_GSttsFv */ void dCcD_GStts::Move() { - /* Nonmatching */ + mAtOldApid = mAtApid; + mAtApid = NULL; + mTgOldApid = mTgApid; + mTgApid = NULL; } /* 800AB3DC-800AB46C .text Init__9dCcD_SttsFiiP10fopAc_ac_c */ -void dCcD_Stts::Init(int, int, fopAc_ac_c*) { - /* Nonmatching */ +void dCcD_Stts::Init(int param_0, int param_1, fopAc_ac_c* pActor) { + u32 procId; + if (pActor) { + procId = fpcM_GetID(pActor); + } else { + procId = -1; + } + cCcD_Stts::Init(param_0, param_1, pActor, procId); + + s32 roomNo; + if (pActor) { + roomNo = pActor->current.roomNo; + } else { + roomNo = 0; + OnNoActor(); + } + if (roomNo != -1) { + SetRoomId(roomNo); + } else { + SetRoomId(0); + } } /* 800AB46C-800AB4A0 .text Ct__9dCcD_SttsFv */ @@ -62,38 +103,53 @@ dCcD_GObjInf::~dCcD_GObjInf() { } /* 800AB7C0-800AB7C4 .text GetGObjInf__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetGObjInf() { - /* Nonmatching */ +cCcD_GObjInf* dCcD_GObjInf::GetGObjInf() { + return (cCcD_GObjInf*)this; } /* 800AB7C4-800AB81C .text ClrAtHit__12dCcD_GObjInfFv */ void dCcD_GObjInf::ClrAtHit() { - /* Nonmatching */ + OffAtHitBit(); + cCcD_Obj::ClrAtHit(); + mGObjAt.ClrHit(); + OffAtShieldHit(); + OffAtHitNoActor(); + SubtractAtEffCounter(); + if (!ChkAtEffCounter()) { + ClrAtEffCounter(); + } } +#if VERSION != VERSION_JPN /* 800AB81C-800AB874 .text ChkAtHit__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkAtHit() { +u32 dCcD_GObjInf::ChkAtHit() { /* Nonmatching */ } +#endif /* 800AB874-800AB8B4 .text ResetAtHit__12dCcD_GObjInfFv */ void dCcD_GObjInf::ResetAtHit() { - /* Nonmatching */ + ClrAtHit(); + ClrAtEffCounter(); } /* 800AB8B4-800AB904 .text GetAtHitObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetAtHitObj() { +cCcD_Obj* dCcD_GObjInf::GetAtHitObj() { /* Nonmatching */ } /* 800AB904-800AB938 .text GetAtHitGObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetAtHitGObj() { - /* Nonmatching */ +cCcD_GObjInf* dCcD_GObjInf::GetAtHitGObj() { + cCcD_Obj* atHitObj = GetAtHitObj(); + if (atHitObj == NULL) { + return NULL; + } + return dCcD_GetGObjInf(atHitObj); } /* 800AB938-800AB958 .text ChkAtNoGuard__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkAtNoGuard() { - /* Nonmatching */ +u8 dCcD_GObjInf::ChkAtNoGuard() { + return GetAtSpl() >= 8; } /* 800AB958-800AB9B0 .text ClrTgHit__12dCcD_GObjInfFv */ @@ -101,10 +157,12 @@ void dCcD_GObjInf::ClrTgHit() { /* Nonmatching */ } +#if VERSION != VERSION_JPN /* 800AB9B0-800ABA08 .text ChkTgHit__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkTgHit() { +u32 dCcD_GObjInf::ChkTgHit() { /* Nonmatching */ } +#endif /* 800ABA08-800ABA48 .text ResetTgHit__12dCcD_GObjInfFv */ void dCcD_GObjInf::ResetTgHit() { @@ -112,17 +170,17 @@ void dCcD_GObjInf::ResetTgHit() { } /* 800ABA48-800ABA98 .text GetTgHitObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetTgHitObj() { +cCcD_Obj* dCcD_GObjInf::GetTgHitObj() { /* Nonmatching */ } /* 800ABA98-800ABACC .text GetTgHitGObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetTgHitGObj() { +dCcD_GObjInf* dCcD_GObjInf::GetTgHitGObj() { /* Nonmatching */ } /* 800ABACC-800ABB00 .text GetTgHitObjSe__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetTgHitObjSe() { +u8 dCcD_GObjInf::GetTgHitObjSe() { /* Nonmatching */ } @@ -131,13 +189,15 @@ void dCcD_GObjInf::ClrCoHit() { /* Nonmatching */ } +#if VERSION != VERSION_JPN /* 800ABB4C-800ABBA4 .text ChkCoHit__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkCoHit() { +u32 dCcD_GObjInf::ChkCoHit() { /* Nonmatching */ } +#endif /* 800ABBA4-800ABBF4 .text GetCoHitObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetCoHitObj() { +cCcD_Obj* dCcD_GObjInf::GetCoHitObj() { /* Nonmatching */ } @@ -147,8 +207,10 @@ void dCcD_GObjInf::Set(const dCcD_SrcGObjInf&) { } /* 800ABC54-800ABCC4 .text dCcD_GetGObjInf__FP8cCcD_Obj */ -void dCcD_GetGObjInf(cCcD_Obj*) { +dCcD_GObjInf* dCcD_GetGObjInf(cCcD_Obj* pobj) { /* Nonmatching */ + JUT_ASSERT(531, pobj != 0); + return (dCcD_GObjInf*)pobj->GetGObjInf(); } /* 800ABCC4-800ABD34 .text Set__8dCcD_CpsFRC11dCcD_SrcCps */ @@ -206,85 +268,85 @@ void dCcD_Sph::MoveCAt(cXyz&) { /* Nonmatching */ } -/* 800AC0E8-800AC130 .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} +// /* 800AC0E8-800AC130 .text __dt__10cCcD_GSttsFv */ +// cCcD_GStts::~cCcD_GStts() { +// /* Nonmatching */ +// } -/* 800AC130-800AC228 .text __dt__12cCcD_GObjInfFv */ -cCcD_GObjInf::~cCcD_GObjInf() { - /* Nonmatching */ -} +// /* 800AC130-800AC228 .text __dt__12cCcD_GObjInfFv */ +// cCcD_GObjInf::~cCcD_GObjInf() { +// /* Nonmatching */ +// } -/* 800AC228-800AC310 .text __dt__8cCcD_ObjFv */ -cCcD_Obj::~cCcD_Obj() { - /* Nonmatching */ -} +// /* 800AC228-800AC310 .text __dt__8cCcD_ObjFv */ +// cCcD_Obj::~cCcD_Obj() { +// /* Nonmatching */ +// } -/* 800AC310-800AC3D0 .text __dt__14cCcD_ObjHitInfFv */ -cCcD_ObjHitInf::~cCcD_ObjHitInf() { - /* Nonmatching */ -} +// /* 800AC310-800AC3D0 .text __dt__14cCcD_ObjHitInfFv */ +// cCcD_ObjHitInf::~cCcD_ObjHitInf() { +// /* Nonmatching */ +// } -/* 800AC3D0-800AC42C .text __dt__10cCcD_ObjCoFv */ -cCcD_ObjCo::~cCcD_ObjCo() { - /* Nonmatching */ -} +// /* 800AC3D0-800AC42C .text __dt__10cCcD_ObjCoFv */ +// cCcD_ObjCo::~cCcD_ObjCo() { +// /* Nonmatching */ +// } -/* 800AC42C-800AC488 .text __dt__10cCcD_ObjTgFv */ -cCcD_ObjTg::~cCcD_ObjTg() { - /* Nonmatching */ -} +// /* 800AC42C-800AC488 .text __dt__10cCcD_ObjTgFv */ +// cCcD_ObjTg::~cCcD_ObjTg() { +// /* Nonmatching */ +// } -/* 800AC488-800AC4E4 .text __dt__10cCcD_ObjAtFv */ -cCcD_ObjAt::~cCcD_ObjAt() { - /* Nonmatching */ -} +// /* 800AC488-800AC4E4 .text __dt__10cCcD_ObjAtFv */ +// cCcD_ObjAt::~cCcD_ObjAt() { +// /* Nonmatching */ +// } -/* 800AC4E4-800AC52C .text __dt__18cCcD_ObjCommonBaseFv */ -cCcD_ObjCommonBase::~cCcD_ObjCommonBase() { - /* Nonmatching */ -} +// /* 800AC4E4-800AC52C .text __dt__18cCcD_ObjCommonBaseFv */ +// cCcD_ObjCommonBase::~cCcD_ObjCommonBase() { +// /* Nonmatching */ +// } -/* 800AC52C-800AC534 .text GetGObjInf__8cCcD_ObjFv */ -void cCcD_Obj::GetGObjInf() { - /* Nonmatching */ -} +// /* 800AC52C-800AC534 .text GetGObjInf__8cCcD_ObjFv */ +// cCcD_GObjInf* cCcD_Obj::GetGObjInf() { +// /* Nonmatching */ +// } -/* 800AC534-800AC538 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} +// /* 800AC534-800AC538 .text GetGObjInf__12cCcD_GObjInfCFv */ +// cCcD_GObjInf const* cCcD_GObjInf::GetGObjInf() const { +// /* Nonmatching */ +// } -/* 800AC538-800AC540 .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} +// /* 800AC538-800AC540 .text GetShapeAttr__8cCcD_ObjCFv */ +// cCcD_ShapeAttr const* cCcD_Obj::GetShapeAttr() const { +// /* Nonmatching */ +// } -/* 800AC540-800AC558 .text ClrAtHit__12cCcD_GObjInfFv */ -void cCcD_GObjInf::ClrAtHit() { - /* Nonmatching */ -} +// /* 800AC540-800AC558 .text ClrAtHit__12cCcD_GObjInfFv */ +// void cCcD_GObjInf::ClrAtHit() { +// /* Nonmatching */ +// } -/* 800AC558-800AC570 .text ClrTgHit__12cCcD_GObjInfFv */ -void cCcD_GObjInf::ClrTgHit() { - /* Nonmatching */ -} +// /* 800AC558-800AC570 .text ClrTgHit__12cCcD_GObjInfFv */ +// void cCcD_GObjInf::ClrTgHit() { +// /* Nonmatching */ +// } -/* 800AC570-800AC588 .text ClrCoHit__12cCcD_GObjInfFv */ -void cCcD_GObjInf::ClrCoHit() { - /* Nonmatching */ -} +// /* 800AC570-800AC588 .text ClrCoHit__12cCcD_GObjInfFv */ +// void cCcD_GObjInf::ClrCoHit() { +// /* Nonmatching */ +// } -/* 800AC588-800AC58C .text GetGObjInf__12cCcD_GObjInfFv */ -void cCcD_GObjInf::GetGObjInf() { - /* Nonmatching */ -} +// /* 800AC588-800AC58C .text GetGObjInf__12cCcD_GObjInfFv */ +// cCcD_GObjInf* cCcD_GObjInf::GetGObjInf() { +// /* Nonmatching */ +// } -/* 800AC58C-800AC594 .text GetGObjInf__8cCcD_ObjCFv */ -void cCcD_Obj::GetGObjInf() const { - /* Nonmatching */ -} +// /* 800AC58C-800AC594 .text GetGObjInf__8cCcD_ObjCFv */ +// cCcD_GObjInf const* cCcD_Obj::GetGObjInf() const { +// /* Nonmatching */ +// } /* 800AC594-800AC5F0 .text __dt__11dCcD_GObjCoFv */ dCcD_GObjCo::~dCcD_GObjCo() { @@ -307,7 +369,7 @@ dCcD_GAtTgCoCommonBase::~dCcD_GAtTgCoCommonBase() { } /* 800AC6F0-800AC700 .text GetGStts__9dCcD_SttsFv */ -void dCcD_Stts::GetGStts() { +cCcD_GStts* dCcD_Stts::GetGStts() { /* Nonmatching */ } @@ -330,9 +392,3 @@ dCcD_Stts::~dCcD_Stts() { dCcD_GStts::~dCcD_GStts() { /* Nonmatching */ } - -/* 800AC808-800AC810 .text @28@__dt__9dCcD_SttsFv */ -void @28@__dt__9dCcD_SttsFv { - /* Nonmatching */ -} - From 14f58584ff3ce4211b0adec766ca5a250c3ad037 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 23 Sep 2023 23:36:21 -0400 Subject: [PATCH 64/89] d_a_arrow 50% --- include/SSystem/SComponent/c_m3d_g_lin.h | 5 +- include/d/actor/d_a_arrow.h | 78 ++++- include/d/actor/d_a_player.h | 6 +- include/d/actor/d_a_player_link.h | 7 +- include/d/d_cc_d.h | 5 +- include/d/d_com_inf_game.h | 9 +- src/d/actor/d_a_arrow.cpp | 379 +++++++++++++++++++++-- 7 files changed, 444 insertions(+), 45 deletions(-) diff --git a/include/SSystem/SComponent/c_m3d_g_lin.h b/include/SSystem/SComponent/c_m3d_g_lin.h index f7ebd875f..1b780b078 100644 --- a/include/SSystem/SComponent/c_m3d_g_lin.h +++ b/include/SSystem/SComponent/c_m3d_g_lin.h @@ -15,7 +15,10 @@ public: cM3dGLin() {} cM3dGLin(const cXyz&, const cXyz&); virtual ~cM3dGLin() {} - void SetStartEnd(const cXyz&, const cXyz&); + void SetStartEnd(const cXyz& start, const cXyz& end) { + mStart = start; + mEnd = end; + } void SetStartEnd(const Vec&, const Vec&); void CalcPos(Vec*, f32) const; void CalcVec(Vec* pOut) const { VECSubtract(&this->mEnd, &this->mStart, pOut); } diff --git a/include/d/actor/d_a_arrow.h b/include/d/actor/d_a_arrow.h index 8be7fd254..e766313ce 100644 --- a/include/d/actor/d_a_arrow.h +++ b/include/d/actor/d_a_arrow.h @@ -1,3 +1,5 @@ +#ifndef D_A_ARROW_H +#define D_A_ARROW_H #include "f_op/f_op_actor_mng.h" #include "d/d_cc_d.h" @@ -6,15 +8,20 @@ #include "d/d_particle.h" #include "dolphin/types.h" +class J3DAnmTextureSRTKey; +class J3DMaterial; + class daArrow_c : fopAc_ac_c { public: enum ArrowType { - NORMAL_ARROWS = 0, - FIRE_ARROWS = 1, - ICE_ARROWS = 2, - LIGHT_ARROWS = 3, + TYPE_NORMAL = 0, + TYPE_FIRE = 1, + TYPE_ICE = 2, + TYPE_LIGHT = 3, }; + typedef BOOL (daArrow_c::*daArrow_c_ProcFunc)(); + BOOL _createHeap(); void _atHit(dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); void checkCreater(); @@ -33,26 +40,40 @@ public: void setRoomInfo(); void setKeepMatrix(); void setStopActorMatrix(); - void procWait(); - void procMove(); - void procReturn(); - void procStop_BG(); - void procStop_Actor(); - void procWater(); + BOOL procWait(); + BOOL procMove(); + BOOL procReturn(); + BOOL procStop_BG(); + BOOL procStop_Actor(); + BOOL procWater(); void checkRestMp(); void setTypeByPlayer(); - void createInit(); + BOOL createInit(); BOOL _execute(); BOOL _draw(); s32 _create(); daArrow_c(); BOOL _delete(); + + // TODO inlines + // setAtHitPosBuff__9daArrow_cFP4cXyz + // setAtHitNormal__9daArrow_cFv + // setAtHitNormalActor__9daArrow_cFP10fopAc_ac_c + // clrAtHitNormal__9daArrow_cFv + // isSetByZelda__9daArrow_cFv + // clrAtHitPosBuff__9daArrow_cFP4cXyz + // getAtHitPosBuffP__9daArrow_cFv + // getAtHitNormalActor__9daArrow_cFv + // chkAtHitNormal__9daArrow_cFv + // isLinkReflect__9daArrow_cFv + // ArrowAtOff__9daArrow_cFv public: /* 0x290 */ bool mbShotByZelda; /* 0x291 */ u8 field_0x291[0x294 - 0x291]; /* 0x294 */ J3DModel* mpModel; - /* 0x298 */ u8 field_0x298[0x2A0 - 0x298]; + /* 0x298 */ J3DMaterial* mpTipMat; + /* 0x29C */ J3DAnmTextureSRTKey* mpBtk; /* 0x2A0 */ dBgS_ArrowLinChk mLinChk; /* 0x30C */ dBgS_ObjGndChk mGndChk; /* 0x360 */ dCcD_Stts mStts; @@ -62,20 +83,37 @@ public: /* 0x601 */ u8 mArrowType; /* 0x602 */ s16 field_0x602; /* 0x604 */ s16 field_0x604; - /* 0x606 */ u8 field_0x606[0x610 - 0x606]; + /* 0x606 */ u8 field_0x606[0x608 - 0x606]; + /* 0x608 */ s16 field_0x608; + /* 0x60A */ u8 field_0x60A[0x60C - 0x60A]; + /* 0x60C */ JPABaseEmitter* mpSparkleEmitter; /* 0x610 */ s32 mHitActorProcID; /* 0x614 */ s32 mHitJointIndex; /* 0x618 */ cXyz field_0x618; - /* 0x624 */ u8 field_0x624[0x668 - 0x624]; + /* 0x624 */ u8 field_0x624[0x660 - 0x624]; + /* 0x660 */ f32 mBtkFrame; + /* 0x664 */ u8 field_0x664; + /* 0x665 */ u8 field_0x665[0x668 - 0x665]; /* 0x668 */ dPa_followEcallBack mPtclFollowCb; /* 0x67C */ csXyz field_0x67c; /* 0x682 */ u8 field_0x682; /* 0x683 */ u8 field_0x683[0x684 - 0x683]; /* 0x684 */ u32 field_0x684; /* 0x688 */ bool field_0x688; - /* 0x689 */ u8 field_0x689[0x6A8 - 0x689]; + /* 0x689 */ u8 field_0x689[0x68C - 0x689]; + /* 0x68C */ daArrow_c_ProcFunc mCurrProcFunc; + /* 0x698 */ u8 field_0x698; + /* 0x699 */ u8 field_0x699; + /* 0x69A */ u8 field_0x69a; + /* 0x69B */ u8 field_0x69B[0x69C - 0x69B]; + /* 0x69C */ s16 field_0x69c; + /* 0x69E */ u8 field_0x69E[0x6A0 - 0x69E]; + /* 0x6A0 */ s32 field_0x6a0; + /* 0x6A4 */ s32 mInWaterTimer; /* 0x6A8 */ cXyz field_0x6a8; - /* 0x6B4 */ u8 field_0x6B4[0x6E6 - 0x6B4]; + /* 0x6B4 */ u8 field_0x6B4[0x6E4 - 0x6B4]; + /* 0x6E4 */ u8 field_0x6e4; + /* 0x6E5 */ u8 field_0x6E5[0x6E6 - 0x6E5]; /* 0x6E6 */ csXyz field_0x6e6; /* 0x6EC */ fopAc_ac_c* field_0x6ec; /* 0x6F0 */ cXyz mNearestHitPos; @@ -84,7 +122,15 @@ public: /* 0x701 */ u8 field_0x701[0x704 - 0x701]; static u8 m_keep_type; + static s16 m_count; static const char m_arc_name[]; + static const dCcD_SrcCps m_at_cps_src; + static const dCcD_SrcSph m_co_sph_src; }; +// Intellisense doesn't understand PTMF sizes +#ifndef __INTELLISENSE__ STATIC_ASSERT(sizeof(daArrow_c) == 0x704); +#endif + +#endif /* D_A_ARROW_H */ diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index b7635d71a..f57ed7a8b 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -79,7 +79,8 @@ public: /* 0x2A8 */ f32 field_0x2a8; /* 0x2AC */ u8 field_0x2AC[0x2B0 - 0x2AC]; /* 0x2B0 */ f32 field_0x2b0; - /* 0x2B4 */ u8 field_0x2B4[0x2BC - 0x2B4]; + /* 0x2B4 */ csXyz mBodyAngle; + /* 0x2BA */ u8 field_0x2BA[0x2BC - 0x2BA]; /* 0x2BC */ cXyz mHeadTopPos; /* 0x2C8 */ cXyz mSwordTopPos; /* 0x2D4 */ cXyz field_0x2d4; @@ -90,6 +91,9 @@ public: /* 0x300 */ f32 field_0x300; /* 0x304 */ daPy_demo_c mDemo; + s16 getBodyAngleX() { return mBodyAngle.x; } + s16 getBodyAngleY() { return mBodyAngle.y; } + virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual void getGroundY() = 0; diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index d9bc7ba9e..3f6acbef1 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -1002,6 +1002,8 @@ public: void checkNoControll() const; J3DAnmTevRegKey* getBombBrk() { return mpBombBrk; } + J3DAnmTextureSRTKey* getIceArrowBtk() { return mpIceArrowBtk; } + J3DAnmTextureSRTKey* getLightArrowBtk() { return mpLightArrowBtk; } virtual MtxP getLeftHandMatrix(); virtual MtxP getRightHandMatrix(); @@ -1099,7 +1101,10 @@ public: /* 0x2EB0 */ J3DAnmTevRegKey* mpBombBrk; /* 0x2EB4 */ J3DAnmTevRegKey* mpGwp00BrkData; /* 0x2EB8 */ J3DAnmTextureSRTKey* mpGwp00BtkData; - /* 0x2EBC */ u8 field_0x2EBC[0x2ED4 - 0x2EBC]; + /* 0x2EBC */ u8 field_0x2EBC[0x2EC0 - 0x2EBC]; + /* 0x2EC0 */ J3DAnmTextureSRTKey* mpIceArrowBtk; + /* 0x2EC4 */ J3DAnmTextureSRTKey* mpLightArrowBtk; + /* 0x2EC8 */ u8 field_0x2EC8[0x2ED4 - 0x2EC8]; /* 0x2ED4 */ J3DAnmTextureSRTKey* mpHeldItemModelAnimTexEx; /* 0x2ED8 */ J3DAnmTextureSRTKey* mpSwordAnimBTK; /* 0x2EDC */ J3DAnmTevRegKey* mpHeldItemAnimBRK; diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index e22f5f1e7..40d8b8485 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -390,7 +390,10 @@ class dCcD_Cps : public dCcD_GObjInf, public cCcD_CpsAttr { public: void Set(dCcD_SrcCps const&); cCcD_ShapeAttr* GetShapeAttr() { return (cCcD_ShapeAttr*)this; } - void CalcAtVec(); + void CalcAtVec() { + cXyz* atVecP = GetAtVecP(); + CalcVec(atVecP); + } void CalcTgVec(); virtual ~dCcD_Cps() {} dCcD_Cps() {} diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 56f5dc5bb..73522c788 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -360,7 +360,9 @@ public: /* 0x49B0 */ u8 field_0x49B0[0x4A24 - 0x49B0]; /* 0x4A24 */ daAgb_c* mpAgb; /* 0x4A28 */ u32 mPlayerStatus[2][2]; - /* 0x4A38 */ u8 field_0x4A38[0x4A40 - 0x4A38]; + /* 0x4A38 */ u8 field_0x4A38[0x4A3A - 0x4A38]; + /* 0x4A3A */ u8 mMiniGameType; + /* 0x4A3B */ u8 field_0x4A3B[0x4A40 - 0x4A3B]; /* 0x4A40 */ __d_timer_info_c mTimerInfo; /* 0x4A54 */ dDlst_window_c* mCurrentWindow; /* 0x4A58 */ view_class* mCurrentView; @@ -1094,6 +1096,11 @@ inline void dComIfGp_setCurrentGrafPort(J2DOrthoGraph* i_graf) { g_dComIfG_gameInfo.play.setCurrentGrafPort(i_graf); } +inline u8 dComIfGp_getMiniGameType() { + // TODO add enum for minigame type. + // 0 for none, 8 for shooting the fishman, 2/6 for orca, 7 for mail sorting, etc + return g_dComIfG_gameInfo.play.mMiniGameType; +} /** * === EVENT ===*/ diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index 1e3061296..f7416f835 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -9,12 +9,80 @@ #include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_npc.h" +#include "d/d_item_data.h" #include "d/actor/d_a_player.h" +#include "d/actor/d_a_player_link.h" #include "d/d_jnt_hit.h" +#include "d/d_s_play.h" #include "dolphin/types.h" +// Needed for the .data section to match. +static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; +static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; + +s16 daArrow_c::m_count; + const char daArrow_c::m_arc_name[] = "Link"; +const dCcD_SrcCps daArrow_c::m_at_cps_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_NORMAL_ARROW, + /* SrcObjAt Atp */ 2, + /* SrcObjAt SPrm */ 0xB, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 7, + /* SrcGObjAt HitMark */ 0xD, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCpsS + { + /* Start */ 0.0f, 0.0f, 0.0f, + /* End */ 0.0f, 0.0f, 0.0f, + /* Radius */ 5.0f, + }, +}; + +const dCcD_SrcSph daArrow_c::m_co_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0x119, + /* SrcGObjAt Se */ 7, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0x04, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 25.0f, + }, +}; + /* 800D455C-800D457C .text createHeap_CB__FP10fopAc_ac_c */ static BOOL createHeap_CB(fopAc_ac_c* i_this) { return ((daArrow_c*)i_this)->_createHeap(); @@ -23,7 +91,7 @@ static BOOL createHeap_CB(fopAc_ac_c* i_this) { /* 800D457C-800D4648 .text _createHeap__9daArrow_cFv */ BOOL daArrow_c::_createHeap() { // arrowglitter.bdl for Light Arrows, arrow.bdl otherwise. - s32 modelFileIndex = (mArrowType == LIGHT_ARROWS ? 0x38 : 0x37) & 0xFFFF; + s32 modelFileIndex = (mArrowType == TYPE_LIGHT ? 0x38 : 0x37) & 0xFFFF; J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(m_arc_name, modelFileIndex); JUT_ASSERT(190, modelData != 0); @@ -82,7 +150,7 @@ void daArrow_c::checkCreater() { /* 800D4814-800D48E8 .text setLightEffect__9daArrow_cFv */ void daArrow_c::setLightEffect() { if (field_0x682 == mArrowType) { - if (mArrowType == NORMAL_ARROWS) { + if (mArrowType == TYPE_NORMAL) { return; } if (!field_0x688) { @@ -129,17 +197,112 @@ void daArrow_c::createBlur() { /* 800D4A04-800D4ADC .text setArrowShootSe__9daArrow_cFv */ void daArrow_c::setArrowShootSe() { - /* Nonmatching */ + static const s32 se[8] = { + 0, + 0, + JA_SE_LK_FIT_FIRE_ARROW, + JA_SE_LK_SHOOT_FIRE_ARROW, + JA_SE_LK_FIT_ICE_ARROW, + JA_SE_LK_SHOOT_ICE_ARROW, + JA_SE_LK_FIT_LIGHT_ARROW, + JA_SE_LK_SHOOT_LIGHT_ARROW, + }; + + if (mArrowType == TYPE_NORMAL) { + return; + } + + fopAcM_seStartCurrent(this, se[mArrowType*2+0], 0); + + fopAcM_seStartCurrent(this, se[mArrowType*2+1], 0); } /* 800D4ADC-800D4B70 .text setDrawShapeMaterial__9daArrow_cFv */ void daArrow_c::setDrawShapeMaterial() { - /* Nonmatching */ + struct ArrowAttackInfo { + u32 mAtType; + u8 mAtp; + u16 mTipJointIdx; + }; + static const ArrowAttackInfo arrow_mat[] = { + { + /* mAtType */ AT_TYPE_NORMAL_ARROW, + /* mAtp */ 2, + /* mTipJointIdx */ 4, + }, + { + /* mAtType */ AT_TYPE_FIRE_ARROW, + /* mAtp */ 4, + /* mTipJointIdx */ 2, + }, + { + /* mAtType */ AT_TYPE_ICE_ARROW, + /* mAtp */ 4, + /* mTipJointIdx */ 3, + }, + { + /* mAtType */ AT_TYPE_LIGHT_ARROW, + /* mAtp */ 0xFF, + /* mTipJointIdx */ 0, + }, + }; + + mCps.SetAtType(arrow_mat[mArrowType].mAtType); + mCps.SetAtAtp(arrow_mat[mArrowType].mAtp); + + if (mbShotByZelda) { + mCps.SetAtAtp(4); + mCps.SetAtType(arrow_mat[0].mAtType); + mCps.OnAtSPrmBit(0xE); + } + + if (arrow_mat[mArrowType].mTipJointIdx != 0) { + J3DModelData* modelData = mpModel->getModelData(); + J3DJoint* tipJoint = modelData->getJointNodePointer(arrow_mat[mArrowType].mTipJointIdx); + mpTipMat = tipJoint->getMesh(); + } } /* 800D4B70-800D4D98 .text arrowShooting__9daArrow_cFv */ void daArrow_c::arrowShooting() { - /* Nonmatching */ + field_0x6a8 = current.pos; + f32 xCos = cM_scos(current.angle.x); + speed.x = 200.0f * cM_ssin(current.angle.y) * xCos; + speed.y = 200.0f * cM_ssin(current.angle.x); + speed.z = 200.0f * cM_scos(current.angle.y) * xCos; + + setArrowShootSe(); + + if (mArrowType == TYPE_LIGHT && !mbShotByZelda) { + if (strcmp(dComIfGp_getStartStageName(), "GanonK") != 0) { + // Not in Puppet Ganon's boss room. + mCps.SetAtSpl((dCcG_At_Spl)0xB); + } + } + + field_0x67c = shape_angle; + + createBlur(); + + field_0x602 = m_count; + m_count += 1; + if (m_count == 5) { + m_count = 0; + } + + cXyz end = current.pos + speed*1.25f; + mCps.SetStartEnd(current.pos, end); + mCps.SetR(5.0f); + mCps.CalcAtVec(); + + dComIfG_Ccsp()->Set(&mCps); + // Using the dComIfG_Ccsp inline here breaks the match. + // dComIfG_Ccsp()->SetMass(&mCps, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(&mCps, 1); + + mbHitActor = false; + mNearestHitPos = end; + mNearestHitDist = MAXFLOAT; } /* 800D4D98-800D4DC0 .text arrowUseMp__9daArrow_cFv */ @@ -151,13 +314,57 @@ void daArrow_c::arrowUseMp() { -2, // Light Arrows }; - s32 magic = dComIfGp_getItemMagicCount(); - dComIfGp_setItemMagicCount(magic + use_mp[mArrowType]); + dComIfGp_setItemMagicCount(use_mp[mArrowType]); +} + +// This is a fake inline (not present in debug maps) which is required for ShieldReflect to match. +inline void setSphereCoordsFromXYAngles(cXyz& xyz, f32 mag, s16 targetAngleX, s16 targetAngleY) { + f32 normZ; + f32 normY; + f32 normX; + normX = cM_ssin(targetAngleY) * cM_scos(targetAngleX); + normY = -cM_ssin(targetAngleX); + normZ = cM_scos(targetAngleY) * cM_scos(targetAngleX); + xyz.x = normX * mag; + xyz.y = normY * mag; + xyz.z = normZ * mag; } /* 800D4DC0-800D50A0 .text ShieldReflect__9daArrow_cFv */ void daArrow_c::ShieldReflect() { - /* Nonmatching */ + f32 vel = speed.abs(); + + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + s16 targetAngleY = link->shape_angle.y + link->getBodyAngleY(); + s16 targetAngleX = link->getBodyAngleX(); + + fopAc_ac_c* ganondorf; + if (fopAcM_SearchByName(PROC_GND, &ganondorf) && dComIfGp_getAttention().LockonTruth() && dComIfGp_getAttention().LockonTarget(0) == ganondorf) { + cXyz ganondorfChestPos = ganondorf->current.pos; + ganondorfChestPos.y = g_regHIO.mChild[8].mFloatRegs[0] + 130.0f; + targetAngleX = -cLib_targetAngleX(&link->current.pos, &ganondorfChestPos); + fpcM_SetParam(ganondorf, 0x23); + field_0x608 = g_regHIO.mChild[0].mShortRegs[3] + 15; + mpSparkleEmitter = dComIfGp_particle_set(0x3EE, &link->current.pos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + } + + // // Regswaps without creating a fake inline. + // // f1 -> f3: normY + // // f3 -> f1: normZ + // f32 normZ; + // f32 normY; + // f32 normX; + // normX = cM_ssin(targetAngleY) * cM_scos(targetAngleX); + // normY = -cM_ssin(targetAngleX); + // normZ = cM_scos(targetAngleY) * cM_scos(targetAngleX); + // speed.x = normX * vel; + // speed.y = normY * vel; + // speed.z = normZ * vel; + setSphereCoordsFromXYAngles(speed, vel, targetAngleX, targetAngleY); + + shape_angle.x = cM_atan2s(-speed.y, -speed.absXZ()); + shape_angle.y = cM_atan2s(-speed.x, -speed.z); + shape_angle.z = 0; } /* 800D50A0-800D5388 .text check_water_in__9daArrow_cFv */ @@ -178,7 +385,29 @@ void daArrow_c::changeArrowType() { /* 800D553C-800D560C .text changeArrowTypeNotReady__9daArrow_cFv */ void daArrow_c::changeArrowTypeNotReady() { - /* Nonmatching */ + if (m_keep_type == TYPE_NORMAL) { + if (dComIfGs_getMagic() < 1) { + return; + } + if (dComIfGs_getItem(0xC) == MAGIC_ARROW || dComIfGs_getItem(0xC) == LIGHT_ARROW) { + m_keep_type = TYPE_FIRE; + } + } else if (m_keep_type == TYPE_FIRE) { + if (dComIfGs_getMagic() < 1) { + return; + } + if (dComIfGs_getItem(0xC) == MAGIC_ARROW || dComIfGs_getItem(0xC) == LIGHT_ARROW) { + m_keep_type = TYPE_ICE; + } + } else if (m_keep_type == TYPE_ICE) { + if (dComIfGs_getMagic() >= 2 && dComIfGs_getItem(0xC) == LIGHT_ARROW) { + m_keep_type = TYPE_LIGHT; + } else { + m_keep_type = TYPE_NORMAL; + } + } else if (m_keep_type == TYPE_LIGHT) { + m_keep_type = TYPE_NORMAL; + } } /* 800D560C-800D56B0 .text setRoomInfo__9daArrow_cFv */ @@ -201,7 +430,6 @@ void daArrow_c::setRoomInfo() { /* 800D56B0-800D5854 .text setKeepMatrix__9daArrow_cFv */ void daArrow_c::setKeepMatrix() { - /* Nonmatching */ // Transform the arrow onto its archer's hand. if (mbShotByZelda) { fopNpc_npc_c* zelda; @@ -283,33 +511,39 @@ void daArrow_c::setStopActorMatrix() { } /* 800D5A70-800D5B20 .text procWait__9daArrow_cFv */ -void daArrow_c::procWait() { +BOOL daArrow_c::procWait() { /* Nonmatching */ } /* 800D5B20-800D6BF4 .text procMove__9daArrow_cFv */ -void daArrow_c::procMove() { +BOOL daArrow_c::procMove() { /* Nonmatching */ } /* 800D6BF4-800D6E70 .text procReturn__9daArrow_cFv */ -void daArrow_c::procReturn() { +BOOL daArrow_c::procReturn() { /* Nonmatching */ } /* 800D6E70-800D71F8 .text procStop_BG__9daArrow_cFv */ -void daArrow_c::procStop_BG() { +BOOL daArrow_c::procStop_BG() { /* Nonmatching */ } /* 800D71F8-800D727C .text procStop_Actor__9daArrow_cFv */ -void daArrow_c::procStop_Actor() { +BOOL daArrow_c::procStop_Actor() { /* Nonmatching */ } /* 800D727C-800D72BC .text procWater__9daArrow_cFv */ -void daArrow_c::procWater() { - /* Nonmatching */ +BOOL daArrow_c::procWater() { + if (mInWaterTimer <= 0) { + fopAcM_delete(this); + return TRUE; + } + + mInWaterTimer--; + return TRUE; } /* 800D72BC-800D72EC .text checkRestMp__9daArrow_cFv */ @@ -334,8 +568,54 @@ void daArrow_c::setTypeByPlayer() { } /* 800D7320-800D74FC .text createInit__9daArrow_cFv */ -void daArrow_c::createInit() { - /* Nonmatching */ +BOOL daArrow_c::createInit() { + if (mArrowType == TYPE_LIGHT) { + mpBtk = daPy_getPlayerLinkActorClass()->getLightArrowBtk(); + } else { + mpBtk = daPy_getPlayerLinkActorClass()->getIceArrowBtk(); + } + + mCurrProcFunc = &procWait; + + setKeepMatrix(); + mCullMtx = mpModel->getBaseTRMtx(); + mCull.mBox.mMin.x = -6.0f; + mCull.mBox.mMin.y = -6.0f; + mCull.mBox.mMin.z = 0.0f; + mCull.mBox.mMax.x = 6.0f; + mCull.mBox.mMax.y = 6.0f; + mCull.mBox.mMax.z = 65.0f; + + mStts.Init(10, 0xFF, this); + mCps.Set(m_at_cps_src); + mCps.SetStts(&mStts); + mCps.SetAtHitCallback(&atHit_CB); + mSph.Set(m_co_sph_src); + mSph.SetStts(&mStts); + + field_0x602 = -1; + + if (mArrowType != TYPE_LIGHT) { + J3DModelData* modelData = mpModel->getModelData(); + modelData->getJointNodePointer(4)->getMesh()->getShape()->hide(); + modelData->getJointNodePointer(2)->getMesh()->getShape()->hide(); + modelData->getJointNodePointer(3)->getMesh()->getShape()->hide(); + modelData->getJointNodePointer(3)->getMesh()->getNext()->getShape()->hide(); + } + setDrawShapeMaterial(); + + field_0x698 = 1; + field_0x699 = 0; + field_0x69a = 0; + field_0x69c = 0; + field_0x6a0 = 300; + mInWaterTimer = 0; + field_0x6e4 = 0; + field_0x688 = 0; + field_0x664 = 0; + field_0x604 = 0; + + return TRUE; } /* 800D74FC-800D7820 .text _execute__9daArrow_cFv */ @@ -345,12 +625,66 @@ BOOL daArrow_c::_execute() { /* 800D7820-800D7960 .text _draw__9daArrow_cFv */ BOOL daArrow_c::_draw() { - /* Nonmatching */ + if (!field_0x698) { + return TRUE; + } + + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &mTevStr); + g_env_light.setLightTevColorType(mpModel, &mTevStr); + + if (mArrowType != TYPE_LIGHT) { + mpTipMat->getShape()->show(); + J3DMaterial* nextMat = mpTipMat->getNext(); + if (nextMat) { + nextMat->getShape()->show(); + } + } + + mpBtk->setFrame(mBtkFrame); + dComIfGd_setListP1(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + + if (mArrowType != TYPE_LIGHT) { + mpTipMat->getShape()->hide(); + J3DMaterial* nextMat = mpTipMat->getNext(); + if (nextMat) { + nextMat->getShape()->hide(); + } + } + + return TRUE; } /* 800D7960-800D7A38 .text _create__9daArrow_cFv */ s32 daArrow_c::_create() { - /* Nonmatching */ + fopAcM_SetupActor(this, daArrow_c); + + checkCreater(); + + if (mbShotByZelda) { + mArrowType = TYPE_LIGHT; + } else { + setTypeByPlayer(); + } + + if (dComIfGp_getMiniGameType() == 8) { + mArrowType = TYPE_NORMAL; + } + + const static u32 heap_size[] = { + 0x1300, + 0x1300, + 0x1300, + 0x820, + }; + if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)&createHeap_CB, heap_size[mArrowType])) { + return cPhs_ERROR_e; + } + + // Using the enum here breaks the match. + // return createInit() ? cPhs_COMPLEATE_e : cPhs_ERROR_e; + return createInit() ? 4 : 5; } /* 800D7A38-800D7DB4 .text __ct__9daArrow_cFv */ @@ -364,19 +698,16 @@ BOOL daArrow_c::_delete() { /* 800D8200-800D8220 .text daArrowCreate__FPv */ s32 daArrowCreate(void* i_this) { - /* Nonmatching */ return ((daArrow_c*)i_this)->_create(); } /* 800D8220-800D8240 .text daArrowDelete__FPv */ BOOL daArrowDelete(void* i_this) { - /* Nonmatching */ return ((daArrow_c*)i_this)->_delete(); } /* 800D8240-800D8260 .text daArrowExecute__FPv */ BOOL daArrowExecute(void* i_this) { - /* Nonmatching */ return ((daArrow_c*)i_this)->_execute(); } From 3f669fb895d4119461d158419d0fc1f4fedccd70 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 21:06:24 -0700 Subject: [PATCH 65/89] J3DMaterialAttach progress --- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 135 ++++----- .../JSystem/J3DGraphAnimator/J3DMaterialAnm.h | 66 +++-- .../J3DGraphAnimator/J3DMaterialAttach.h | 22 +- include/JSystem/J3DGraphBase/J3DTexture.h | 2 + .../J3DGraphAnimator/J3DMaterialAttach.cpp | 273 ++++++++++++++++-- 5 files changed, 372 insertions(+), 126 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index d5d600a4c..8b4ec14ea 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -57,7 +57,7 @@ struct J3DAnmTransformFullTable { struct J3DAnmTexPatternFullTable { /* 0x00 */ u16 mMaxFrame; /* 0x02 */ u16 mOffset; - /* 0x04 */ u8 _4; + /* 0x04 */ u8 mTexNo; /* 0x06 */ u16 _6; }; // Size = 0x8 @@ -66,7 +66,7 @@ struct J3DAnmCRegKeyTable { /* 0x06 */ J3DAnmKeyTableBase mGTable; /* 0x0C */ J3DAnmKeyTableBase mBTable; /* 0x12 */ J3DAnmKeyTableBase mATable; - /* 0x18 */ u8 _18; + /* 0x18 */ u8 mColorId; u8 padding[3]; }; // Size = 0x1C @@ -75,7 +75,7 @@ struct J3DAnmKRegKeyTable { /* 0x06 */ J3DAnmKeyTableBase mGTable; /* 0x0C */ J3DAnmKeyTableBase mBTable; /* 0x12 */ J3DAnmKeyTableBase mATable; - /* 0x18 */ u8 _18; + /* 0x18 */ u8 mColorId; u8 padding[3]; }; // Size = 0x1C @@ -373,36 +373,42 @@ public: } u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; } - u16 getUpdateMaterialNum() const { return field_0x14 / 3; } + u16 getUpdateMaterialNum() const { return mTrackNum / 3; } + u16 getUpdateTexMtxID(u16 idx) const { return mUpdateTexMtxID[idx]; } + + u32 getTexMtxCalcType() const { return mTexMtxCalcType; } + Vec& getSRTCenter(u16 idx) const { return mSRTCenter[idx]; } private: - /* 0x0C */ int field_0xc; - /* 0x10 */ int field_0x10; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u16 field_0x16; - /* 0x18 */ u16 field_0x18; - /* 0x1A */ u16 field_0x1a; - /* 0x1C */ int field_0x1c; - /* 0x20 */ int field_0x20; - /* 0x24 */ int field_0x24; - /* 0x28 */ u8 mUpdateTexMtxID[4]; - /* 0x2C */ u16* mUpdateMaterialID; - /* 0x30 */ JUTNameTab field_0x30; - /* 0x40 */ int field_0x40; - /* 0x44 */ u16 field_0x44; - /* 0x46 */ u16 field_0x46; - /* 0x48 */ u16 field_0x48; - /* 0x4A */ u16 field_0x4a; - /* 0x4C */ int field_0x4c; - /* 0x50 */ int field_0x50; - /* 0x54 */ int field_0x54; - /* 0x58 */ int field_0x58; - /* 0x5C */ u8 field_0x5c[4]; - /* 0x60 */ u16* field_0x60; - /* 0x64 */ JUTNameTab field_0x64; - /* 0x74 */ u8 field_0x74[4]; - /* 0x78 */ u32 mTexMtxCalcType; -}; // Size: 0x7C + /* 0x0C */ void* field_0xc; + /* 0x10 */ int mDecShift; + /* 0x14 */ u16 mTrackNum; + /* 0x18 */ void* mAnmTable; + /* 0x1C */ u16 mScaleNum; + /* 0x1E */ u16 mRotNum; + /* 0x20 */ u16 mTransNum; + /* 0x24 */ f32* mScaleData; + /* 0x28 */ f32* mRotData; + /* 0x2C */ f32* mTransData; + /* 0x30 */ u8* mUpdateTexMtxID; + /* 0x34 */ u16* mUpdateMaterialID; + /* 0x38 */ JUTNameTab mMaterialName; + /* 0x48 */ Vec* mSRTCenter; + /* 0x4C */ u16 mPostTrackNum; + /* 0x50 */ void * mPostAnmTable; + /* 0x54 */ void * field_0x54; + /* 0x58 */ void * field_0x58; + /* 0x5C */ f32* mPostScaleData; + /* 0x60 */ f32* mPostRotData; + /* 0x64 */ f32* mPostTransData; + /* 0x68 */ u8* mPostUpdateTexMtxID; + /* 0x68 */ u16* mPostUpdateMaterialID; + /* 0x70 */ JUTNameTab mDualName; + /* 0x80 */ Vec* mPostSRTCenter; + /* 0x80 */ u32 mTexMtxCalcType; +}; // Size: 0x88 + +STATIC_ASSERT(sizeof(J3DAnmTextureSRTKey) == 0x88); class J3DAnmVisibilityFull : public J3DAnmBase { public: @@ -428,16 +434,22 @@ public: void searchUpdateMaterialID(J3DMaterialTable*); void searchUpdateMaterialID(J3DModelData*); + u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; } + u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } + + J3DAnmTexPatternFullTable * getAnmTable() const { return mAnmTable; } + virtual ~J3DAnmTexPattern(); virtual s32 getKind() const; private: /* 0x0C */ void* field_0xc; - /* 0x10 */ void* mAnmTable; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u16 mUpdateMaterialNum; - /* 0x18 */ u16* field_0x18; - /* 0x1C */ JUTNameTab field_0x1c; + /* 0x10 */ s16* mTextureIndex; + /* 0x14 */ J3DAnmTexPatternFullTable* mAnmTable; + /* 0x18 */ u16 field_0x18; + /* 0x1A */ u16 mUpdateMaterialNum; + /* 0x1C */ u16* mUpdateMaterialID; + /* 0x20 */ JUTNameTab mMaterialName; }; // Size: 0x2C class J3DAnmTevRegKey : public J3DAnmBase { @@ -457,32 +469,24 @@ public: u16 getCRegUpdateMaterialID(u16 idx) const { return mCRegUpdateMaterialID[idx]; } u16 getKRegUpdateMaterialID(u16 idx) const { return mKRegUpdateMaterialID[idx]; } + J3DAnmCRegKeyTable * getAnmCRegKeyTable() const { return mAnmCRegKeyTable; } + J3DAnmKRegKeyTable * getAnmKRegKeyTable() const { return mAnmKRegKeyTable; } + private: - /* 0x0C */ u16 mCRegUpdateMaterialNum; - /* 0x0E */ u16 mKRegUpdateMaterialNum; - /* 0x10 */ u16 field_0x10; - /* 0x12 */ u16 field_0x12; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u16 field_0x16; - /* 0x18 */ u16 field_0x18; - /* 0x1A */ u16 field_0x1a; - /* 0x1C */ u16 field_0x1c; - /* 0x1E */ u16 field_0x1e; - /* 0x20 */ u16* mCRegUpdateMaterialID; - /* 0x24 */ JUTNameTab field_0x24; - /* 0x34 */ u16* mKRegUpdateMaterialID; - /* 0x38 */ JUTNameTab field_0x38; - /* 0x48 */ void* field_0x48; - /* 0x4C */ void* field_0x4c; - /* 0x50 */ int field_0x50; - /* 0x54 */ int field_0x54; - /* 0x58 */ int field_0x58; - /* 0x5C */ int field_0x5c; - /* 0x60 */ int field_0x60; - /* 0x64 */ int field_0x64; - /* 0x68 */ int field_0x68; - /* 0x6C */ int field_0x6c; -}; // Size: 0x70 + /* 0x0C */ u32 field_0x0c; + /* 0x10 */ u16 mCRegUpdateMaterialNum; + /* 0x12 */ u16 mKRegUpdateMaterialNum; + /* 0x14 */ u16 mCRegDataCount[4]; + /* 0x1C */ u16 mKRegDataCount[4]; + /* 0x24 */ u16* mCRegUpdateMaterialID; + /* 0x28 */ JUTNameTab mCRegNameTab; + /* 0x38 */ u16* mKRegUpdateMaterialID; + /* 0x3C */ JUTNameTab mKRegNameTab; + /* 0x4C */ J3DAnmCRegKeyTable* mAnmCRegKeyTable; + /* 0x50 */ J3DAnmKRegKeyTable* mAnmKRegKeyTable; + /* 0x54 */ s16 * mAnmCRegData[4]; + /* 0x64 */ s16 * mAnmKRegData[4]; +}; // Size: 0x74 class J3DAnmColor : public J3DAnmBase { public: @@ -503,10 +507,11 @@ private: /* 0x0E */ u16 field_0xe; /* 0x10 */ u16 field_0x10; /* 0x12 */ u16 field_0x12; - /* 0x14 */ u16 mUpdateMaterialNum; - /* 0x18 */ u16* mUpdateMaterialID; - /* 0x1C */ JUTNameTab field_0x1c; -}; // Size: 0x2C + /* 0x14 */ u32 field_0x14; + /* 0x18 */ u16 mUpdateMaterialNum; + /* 0x1C */ u16* mUpdateMaterialID; + /* 0x20 */ JUTNameTab field_0x1c; +}; // Size: 0x30 class J3DAnmColorKey : public J3DAnmColor { public: diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h index dec569648..fd986b8c0 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h @@ -8,21 +8,25 @@ typedef struct _GXColorS10 GXColorS10; class J3DMatColorAnm { public: - ~J3DMatColorAnm() {}; - J3DMatColorAnm() {}; + ~J3DMatColorAnm() {} + J3DMatColorAnm() {} + J3DMatColorAnm(J3DAnmColor * pAnm, u16 materialIdx) { + mAnmColor = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DMatColorAnm const& other) { mAnmColor = other.mAnmColor; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } - void calc(_GXColor* pColor) const { mAnmColor->getColor(field_0x0, pColor); } + void calc(_GXColor* pColor) const { mAnmColor->getColor(mMaterialIdx, pColor); } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmColor* mAnmColor; }; // Size: 0x8 @@ -51,65 +55,77 @@ private: class J3DTexMtxAnm { public: - ~J3DTexMtxAnm() {}; - J3DTexMtxAnm() {}; + ~J3DTexMtxAnm() {} + J3DTexMtxAnm() {} + J3DTexMtxAnm(J3DAnmTextureSRTKey * pAnm, u16 materialIdx) { + mAnmTransform = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DTexMtxAnm const& other) { mAnmTransform = other.mAnmTransform; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } void calc(J3DTextureSRTInfo* pSRTInfo) const { - mAnmTransform->getTransform(field_0x0, pSRTInfo); + mAnmTransform->getTransform(mMaterialIdx, pSRTInfo); } bool getAnmFlag() const { return mAnmFlag; } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmTextureSRTKey* mAnmTransform; }; // Size: 0x8 class J3DTevKColorAnm { public: - ~J3DTevKColorAnm() {}; - J3DTevKColorAnm() {}; + ~J3DTevKColorAnm() {} + J3DTevKColorAnm() {} + J3DTevKColorAnm(J3DAnmTevRegKey * pAnm, u16 materialIdx) { + mAnmTevReg = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DTevKColorAnm const& other) { mAnmTevReg = other.mAnmTevReg; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } - void calc(_GXColor* pColor) const { mAnmTevReg->getTevKonstReg(field_0x0, pColor); } + void calc(_GXColor* pColor) const { mAnmTevReg->getTevKonstReg(mMaterialIdx, pColor); } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmTevRegKey* mAnmTevReg; }; // Size: 0x8 class J3DTevColorAnm { public: - ~J3DTevColorAnm() {}; - J3DTevColorAnm() {}; + ~J3DTevColorAnm() {} + J3DTevColorAnm() {} + J3DTevColorAnm(J3DAnmTevRegKey * pAnm, u16 materialIdx) { + mAnmTevReg = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DTevColorAnm const& other) { mAnmTevReg = other.mAnmTevReg; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } - void calc(_GXColorS10* pColor) const { mAnmTevReg->getTevColorReg(field_0x0, pColor); } + void calc(_GXColorS10* pColor) const { mAnmTevReg->getTevColorReg(mMaterialIdx, pColor); } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmTevRegKey* mAnmTevReg; }; // Size: 0x8 @@ -119,11 +135,11 @@ public: J3DMaterialAnm() { initialize(); } void initialize(); - void setMatColorAnm(int, J3DMatColorAnm*); - void setTexMtxAnm(int, J3DTexMtxAnm*); - void setTexNoAnm(int, J3DTexNoAnm*); - void setTevColorAnm(int, J3DTevColorAnm*); - void setTevKColorAnm(int, J3DTevKColorAnm*); + inline void setMatColorAnm(int i, J3DMatColorAnm* pAnm) { mMatColorAnm[i] = pAnm; } + inline void setTexMtxAnm(int i, J3DTexMtxAnm* pAnm) { mTexMtxAnm[i] = pAnm; } + inline void setTexNoAnm(int i, J3DTexNoAnm* pAnm) { mTexNoAnm[i] = pAnm; } + inline void setTevColorAnm(int i, J3DTevColorAnm* pAnm) { mTevColorAnm[i] = pAnm; } + inline void setTevKColorAnm(int i, J3DTevKColorAnm* pAnm) { mTevKColorAnm[i] = pAnm; } virtual ~J3DMaterialAnm() {}; virtual void calc(J3DMaterial*) const; diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index 6e4c17ea8..f274de05a 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -20,19 +20,18 @@ class J3DMaterialTable { public: void clear(); J3DMaterialTable(); + s32 entryMatColorAnimator(J3DAnmColor*); + s32 entryTexNoAnimator(J3DAnmTexPattern*); + s32 entryTexMtxAnimator(J3DAnmTextureSRTKey*); + s32 entryTevRegAnimator(J3DAnmTevRegKey*); int removeMatColorAnimator(J3DAnmColor*); int removeTexNoAnimator(J3DAnmTexPattern*); int removeTexMtxAnimator(J3DAnmTextureSRTKey*); int removeTevRegAnimator(J3DAnmTevRegKey*); - void createTexMtxForAnimator(J3DAnmTextureSRTKey*); - void entryMatColorAnimator(J3DAnmColor*); - void entryTexNoAnimator(J3DAnmTexPattern*); - void entryTexMtxAnimator(J3DAnmTextureSRTKey*); - void entryTevRegAnimator(J3DAnmTevRegKey*); - void setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm *); - void setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*); - void setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*); - void setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*); + s32 setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm *); + s32 setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*); + s32 setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*); + s32 setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*); virtual ~J3DMaterialTable(); @@ -50,10 +49,11 @@ private: /* 0x06 */ u16 mUniqueMatNum; /* 0x08 */ J3DMaterial** mMaterialNodePointer; /* 0x0C */ JUTNameTab* mMaterialName; - /* 0x10 */ u32 field_0x10; + /* 0x10 */ u16 field_0x10; /* 0x14 */ u32 field_0x14; /* 0x18 */ J3DTexture* mTexture; /* 0x1C */ JUTNameTab* mTextureName; -}; // Size: 0x20 + /* 0x20 */ u16 field_0x20; +}; // Size: 0x22 #endif /* J3DMATERIALATTACH_H */ diff --git a/include/JSystem/J3DGraphBase/J3DTexture.h b/include/JSystem/J3DGraphBase/J3DTexture.h index e5b4a31d1..46840e139 100644 --- a/include/JSystem/J3DGraphBase/J3DTexture.h +++ b/include/JSystem/J3DGraphBase/J3DTexture.h @@ -63,6 +63,8 @@ struct J3DTexCoord : public J3DTexCoordInfo { u8 getTexGenMtx() { return mTexGenMtx & 0xff; } u16 getTexMtxReg() { return mTexMtxReg & 0xff; } + void setTexGenMtx(u8 v) { mTexGenMtx = v; } + void resetTexMtxReg() { mTexMtxReg = mTexGenMtx; } diff --git a/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp b/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp index 5e5689140..34c144458 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp @@ -4,16 +4,24 @@ // #include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" /* 802F5C48-802F5C70 .text clear__16J3DMaterialTableFv */ void J3DMaterialTable::clear() { - /* Nonmatching */ + mMaterialNum = 0; + mMaterialNodePointer = NULL; + mMaterialName = NULL; + field_0x10 = NULL; + field_0x14 = NULL; + mTexture = NULL; + mTextureName = NULL; + field_0x20 = 0; } /* 802F5C70-802F5CAC .text __ct__16J3DMaterialTableFv */ J3DMaterialTable::J3DMaterialTable() { - /* Nonmatching */ + clear(); } /* 802F5CAC-802F5CF4 .text __dt__16J3DMaterialTableFv */ @@ -22,56 +30,271 @@ J3DMaterialTable::~J3DMaterialTable() { } /* 802F5CF4-802F5DC8 .text entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */ -void J3DMaterialTable::entryMatColorAnimator(J3DAnmColor*) { - /* Nonmatching */ +s32 J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setMatColorAnm(0, new J3DMatColorAnm(pAnm, i)); + } + } + + return ret; } /* 802F5DC8-802F6058 .text entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -void J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey*) { - /* Nonmatching */ +s32 J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) { } /* 802F6058-802F61E8 .text entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -void J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey*) { - /* Nonmatching */ +s32 J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* pAnm) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < cRegMaterialNum; i++) { + u16 materialID = pAnm->getCRegUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, new J3DTevColorAnm(pAnm, i)); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + u16 materialID = pAnm->getKRegUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevKColorAnm(colorId, new J3DTevKColorAnm(pAnm, i)); + } + } + + return ret; } /* 802F61E8-802F6260 .text removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */ -int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor*) { - /* Nonmatching */ +int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setMatColorAnm(0, NULL); + } + } + + return ret; } /* 802F6260-802F62F4 .text removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */ -int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern*) { - /* Nonmatching */ +int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 texNo = pAnm->getAnmTable()[i].mTexNo; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTexNoAnm(texNo, NULL); + } + } + + return ret; } /* 802F62F4-802F6398 .text removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey*) { - /* Nonmatching */ +int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterial * pMaterial = getMaterialNodePointer(materialID); + J3DMaterialAnm * pMatAnm = pMaterial->getMaterialAnm(); + u8 texMtxID = pAnm->getUpdateTexMtxID(i); + if (pMatAnm == NULL) { + ret = 1; + } else if (texMtxID != 0xFF) { + pMatAnm->setTexMtxAnm(texMtxID, NULL); + } + } + } + + return ret; } /* 802F6398-802F64B8 .text removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey*) { - /* Nonmatching */ +int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* pAnm) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + for (u16 i = 0; i < cRegMaterialNum; i++) { + if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, NULL); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) { + ret = 1; + } else { + pMatAnm->setTevKColorAnm(colorId, NULL); + } + } + } + + return ret; } /* 802F64B8-802F6550 .text setMatColorAnimator__16J3DMaterialTableFP11J3DAnmColorP14J3DMatColorAnm */ -void J3DMaterialTable::setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setMatColorAnimator(J3DAnmColor* pAnm, J3DMatColorAnm* pAnmR) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setMatColorAnm(0, &pAnmR[i]); + } + } + + return ret; } /* 802F6550-802F6600 .text setTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPatternP11J3DTexNoAnm */ -void J3DMaterialTable::setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setTexNoAnimator(J3DAnmTexPattern* pAnm, J3DTexNoAnm* pAnmR) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 texNo = pAnm->getAnmTable()[i].mTexNo; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTexNoAnm(texNo, &pAnmR[i]); + } + } + + return ret; } /* 802F6600-802F6798 .text setTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKeyP12J3DTexMtxAnmP12J3DTexMtxAnm */ -void J3DMaterialTable::setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setTexMtxAnimator(J3DAnmTextureSRTKey* pAnm, J3DTexMtxAnm* pTexAnmR, J3DTexMtxAnm* pDualAnmR) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterial * pMaterial = getMaterialNodePointer(materialID); + J3DMaterialAnm * pMatAnm = pMaterial->getMaterialAnm(); + u8 texMtxID = pAnm->getUpdateTexMtxID(i); + if (pMatAnm == NULL) { + ret = 1; + } else if (texMtxID != 0xFF) { + if (pMaterial->getTexGenBlock()->getTexCoord(texMtxID) != NULL) { + pMaterial->getTexGenBlock()->getTexCoord(texMtxID)->setTexGenMtx(GX_TEXMTX0 + (texMtxID & 0xFF) * 3); + } + + J3DTexMtx *pTexMtx = pMaterial->getTexGenBlock()->getTexMtx(texMtxID); + pTexMtx->getTexMtxInfo().mInfo = ((pTexMtx->getTexMtxInfo().mInfo) & 0x7F) | (u8)(pAnm->getTexMtxCalcType() << 7); + pTexMtx->getTexMtxInfo().mCenter.x = pAnm->getSRTCenter(i).x; + pTexMtx->getTexMtxInfo().mCenter.x = pAnm->getSRTCenter(i).y; + pTexMtx->getTexMtxInfo().mCenter.z = pAnm->getSRTCenter(i).z; + + pMatAnm->setTexMtxAnm(texMtxID, &pTexAnmR[i]); + } + } + } + + return ret; } /* 802F6798-802F68F0 .text setTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKeyP14J3DTevColorAnmP15J3DTevKColorAnm */ -void J3DMaterialTable::setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setTevRegAnimator(J3DAnmTevRegKey* pAnm, J3DTevColorAnm* pCRegAnmR, J3DTevKColorAnm* pKRegAnmR) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < cRegMaterialNum; i++) { + if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, &pCRegAnmR[i]); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) { + ret = 1; + } else { + pMatAnm->setTevKColorAnm(colorId, &pKRegAnmR[i]); + } + } + } + + return ret; } From 3b025cc2dd91c655a26abf629052530fc7a0fbe7 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 22:51:27 -0700 Subject: [PATCH 66/89] J3DModel halfway --- include/JSystem/J3DGraphAnimator/J3DJoint.h | 32 +- .../JSystem/J3DGraphAnimator/J3DJointTree.h | 15 +- .../J3DGraphAnimator/J3DMaterialAttach.h | 3 +- include/JSystem/J3DGraphAnimator/J3DModel.h | 58 ++- .../JSystem/J3DGraphAnimator/J3DModelData.h | 23 +- .../JSystem/J3DGraphAnimator/J3DMtxBuffer.h | 24 +- .../JSystem/J3DGraphAnimator/J3DShapeTable.h | 12 +- .../JSystem/J3DGraphAnimator/J3DSkinDeform.h | 59 ++- include/JSystem/J3DGraphBase/J3DSys.h | 3 + src/JSystem/J3DGraphAnimator/J3DModel.cpp | 476 ++++++++++++++++-- 10 files changed, 576 insertions(+), 129 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DJoint.h b/include/JSystem/J3DGraphAnimator/J3DJoint.h index b776f24da..26e4f4c36 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJoint.h +++ b/include/JSystem/J3DGraphAnimator/J3DJoint.h @@ -11,17 +11,13 @@ class J3DMtxBuffer; class J3DMtxCalc { public: - /* 80325D1C */ static void setMtxBuffer(J3DMtxBuffer*); + static void setMtxBuffer(J3DMtxBuffer*); - /* 8000D948 */ virtual ~J3DMtxCalc(); - /* 80014E90 */ virtual void setAnmTransform(J3DAnmTransform*); - /* 80014E9C */ virtual bool getAnmTransform(); - /* 80014E8C */ virtual void setAnmTransform(u8, J3DAnmTransform*); - /* 80014E94 */ virtual bool getAnmTransform(u8); - /* 80014EA4 */ virtual void setWeight(u8, f32); - /* 80014EA8 */ virtual void getWeight(u8) const; - virtual void init(Vec const& param_0, Mtx*) = 0; + virtual ~J3DMtxCalc(); + virtual void init(Vec const& param_0, const Mtx&) = 0; + virtual void recursiveCalc(J3DNode *); virtual void calc() = 0; + virtual void calcTransform(u16, J3DTransformInfo const &) = 0; static J3DMtxBuffer* getMtxBuffer() { return mMtxBuffer; } static J3DJoint* getJoint() { return mJoint; } @@ -33,7 +29,7 @@ public: class J3DMtxCalcNoAnmBase : public J3DMtxCalc { public: - /* 8000FA8C */ virtual ~J3DMtxCalcNoAnmBase(); + virtual ~J3DMtxCalcNoAnmBase(); }; template @@ -47,9 +43,9 @@ public: class J3DJoint : public J3DNode { public: - /* 8032F170 */ J3DJoint(); - /* 8032F254 */ void entryIn(); - /* 8032F3F8 */ void recursiveCalc(); + J3DJoint(); + void entryIn(); + void recursiveCalc(); J3DMaterial* getMesh() { return mMesh; } u16 getJntNo() const { return mJntNo; } @@ -83,23 +79,23 @@ private: }; // Size: 0x54 struct J3DMtxCalcJ3DSysInitMaya { - /* 8032ECAC */ static void init(Vec const&, f32 const (&)[3][4]); + static void init(Vec const&, f32 const (&)[3][4]); }; struct J3DMtxCalcJ3DSysInitBasic { - /* 8032EC28 */ static void init(Vec const&, f32 const (&)[3][4]); + static void init(Vec const&, f32 const (&)[3][4]); }; struct J3DMtxCalcCalcTransformSoftimage { - /* 8032EE50 */ static void calcTransform(J3DTransformInfo const&); + static void calcTransform(J3DTransformInfo const&); }; struct J3DMtxCalcCalcTransformMaya { - /* 8032EFBC */ static void calcTransform(J3DTransformInfo const&); + static void calcTransform(J3DTransformInfo const&); }; struct J3DMtxCalcCalcTransformBasic { - /* 8032ED30 */ static void calcTransform(J3DTransformInfo const&); + static void calcTransform(J3DTransformInfo const&); }; #endif /* J3DJOINT_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index af85bbd5c..e7324aee4 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -15,8 +15,8 @@ struct J3DModelHierarchy { class J3DMaterialTable; struct J3DDrawMtxData { - /* 803115E0 */ J3DDrawMtxData(); - /* 803115F4 */ ~J3DDrawMtxData(); + J3DDrawMtxData(); + ~J3DDrawMtxData(); /* 0x0 */ u16 mEntryNum; /* 0x2 */ u16 mDrawFullWgtMtxNum; @@ -28,13 +28,12 @@ class J3DShapeTable; class J3DJointTree { public: - /* 80325A18 */ J3DJointTree(); - /* 80325A9C */ void makeHierarchy(J3DJoint*, J3DModelHierarchy const**, J3DMaterialTable*, - J3DShapeTable*); - /* 80325C00 */ void findImportantMtxIndex(); + J3DJointTree(); + void makeHierarchy(J3DJoint*, J3DModelHierarchy const**, J3DMaterialTable*, J3DShapeTable*); + void findImportantMtxIndex(); - /* 80325CAC */ virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]); - /* 80325D24 */ virtual ~J3DJointTree(); + virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]); + virtual ~J3DJointTree(); u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; } u8 getWEvlpMixMtxNum(u16 idx) const { return mWEvlpMixMtxNum[idx]; } diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index f274de05a..5182c354c 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -53,7 +53,6 @@ private: /* 0x14 */ u32 field_0x14; /* 0x18 */ J3DTexture* mTexture; /* 0x1C */ JUTNameTab* mTextureName; - /* 0x20 */ u16 field_0x20; -}; // Size: 0x22 +}; // Size: 0x20 #endif /* J3DMATERIALATTACH_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index 761048ed5..5e116750b 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -31,17 +31,21 @@ typedef void (*J3DCalcCallBack)(J3DModel*, u32 timing); class J3DMatPacket; class J3DShapePacket; -class J3DVisibilityManager; + +class J3DVisibilityManager { +public: + virtual ~J3DVisibilityManager(); + virtual void setVisibility(J3DModelData*); +}; + +class J3DUnkCallBack { +public: + virtual void calc(J3DModel*); +}; class J3DModel { public: - J3DModel() { - initialize(); - } - J3DModel(J3DModelData* param_0, u32 param_1, u32 param_2) { - initialize(); - entryModelData(param_0, param_1, param_2); - } + J3DModel(); void initialize(); s32 entryModelData(J3DModelData*, u32, u32); @@ -57,9 +61,15 @@ public: void calcWeightEnvelopeMtx(); void calcNrmMtx(); void calcBumpMtx(); - void calcBBoardMtx(); + void calcBBoard(); + void calcDrawMtx(); void prepareShapePackets(); - MtxP getAnmMtx(int); + MtxP getAnmMtx(int idx) { return mpNodeMtx[idx]; } + + s32 setNoUseDrawMtx(); + s32 createSingleDrawMtx(J3DModelData*); + s32 createDoubleDrawMtx(J3DModelData*, u32); + s32 createBumpMtxArray(J3DModelData*, u32); virtual void update(); virtual void entry(); @@ -77,15 +87,31 @@ public: bool isCpuSkinningOn() const { return (mFlags & J3DMdlFlag_SkinPosCpu) && (mFlags & J3DMdlFlag_SkinNrmCpu); } + void swapDrawMtx() { + Mtx* tmp = mpDrawMtxBuf[0][mCurrentViewNo]; + mpDrawMtxBuf[0][mCurrentViewNo] = mpDrawMtxBuf[1][mCurrentViewNo]; + mpDrawMtxBuf[1][mCurrentViewNo] = tmp; + } + + void swapNrmMtx() { + Mtx33* tmp = mpNrmMtxBuf[0][mCurrentViewNo]; + mpNrmMtxBuf[0][mCurrentViewNo] = mpNrmMtxBuf[1][mCurrentViewNo]; + mpNrmMtxBuf[1][mCurrentViewNo] = tmp; + } + Mtx& getBaseTRMtx() { return mBaseTransformMtx; } void setBaseTRMtx(Mtx m) { MTXCopy(m, mBaseTransformMtx); } u32 getMtxCalcMode() const { return mFlags & 0x03; } + u32* getCurrentViewNoPtr() { return &mCurrentViewNo; } + u8* getScaleFlagArray() const { return mpScaleFlagArr; } J3DVertexBuffer* getVertexBuffer() const { return (J3DVertexBuffer*)&mVertexBuffer; } J3DMatPacket* getMatPacket(u16 idx) const { return &mpMatPacket[idx]; } J3DShapePacket* getShapePacket(u16 idx) const { return &mpShapePacket[idx]; } - // Mtx33* getBumpMtxPtr(int idx) const { return mMtxBuffer->getBumpMtxPtr(idx); } - Mtx33* getNrmMtxPtr() const { return mpNrmMtxBuf[1][mCurrentViewNo]; } + Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxBuf[1]; } Mtx* getDrawMtxPtr() const { return mpDrawMtxBuf[1][mCurrentViewNo]; } + Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxBuf[1]; } + Mtx33* getNrmMtxPtr() const { return mpNrmMtxBuf[1][mCurrentViewNo]; } + Mtx33*** getBumpMtxPtrPtr() const { return mpBumpMtxArr[1]; } void setBaseScale(const Vec& scale) { mBaseScale = scale; } void setUserArea(u32 area) { mUserArea = area; } u32 getUserArea() const { return mUserArea; } @@ -112,9 +138,15 @@ public: /* 0x0B8 */ J3DShapePacket* mpShapePacket; /* 0x0BC */ J3DDeformData* mpDeformData; /* 0x0C0 */ J3DSkinDeform* mpSkinDeform; - /* 0x0C4 */ void * pad4[2]; + /* 0x0C4 */ J3DUnkCallBack * field_0xc4; + /* 0x0C8 */ J3DUnkCallBack * field_0xc8; /* 0x0CC */ J3DVertexBuffer mVertexBuffer; /* 0x104 */ J3DVisibilityManager * mpVisibilityManager; + + static Mtx sNoUseDrawMtx; + static Mtx33 sNoUseNrmMtx; + static Mtx* sNoUseDrawMtxPtr; + static Mtx33* sNoUseNrmMtxPtr; }; STATIC_ASSERT(sizeof(J3DModel) == 0x108); diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index cd23e5294..3f5bd7d30 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -13,16 +13,16 @@ class JUTNameTab; class J3DModelData { public: - /* 80325D88 */ void clear(); - /* 80325DA0 */ J3DModelData(); - /* 80325E14 */ s32 newSharedDisplayList(u32); - /* 80325EC8 */ void indexToPtr(); - /* 80325F94 */ void makeSharedDL(); - /* 8032600C */ void simpleCalcMaterial(u16, f32 (*)[4]); - /* 803260CC */ void syncJ3DSysPointers() const; - /* 803260F8 */ void syncJ3DSysFlags() const; + void clear(); + J3DModelData(); + s32 newSharedDisplayList(u32); + void indexToPtr(); + void makeSharedDL(); + void simpleCalcMaterial(u16, f32 (*)[4]); + void syncJ3DSysPointers() const; + void syncJ3DSysFlags() const; - /* 8032617C */ virtual ~J3DModelData(); + virtual ~J3DModelData(); J3DMaterialTable& getMaterialTable() { return mMaterialTable; } JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); } @@ -87,7 +87,10 @@ private: /* 0x10 */ J3DJointTree mJointTree; /* 0x58 */ J3DMaterialTable mMaterialTable; /* 0x78 */ J3DShapeTable mShapeTable; - /* 0x88 */ J3DVertexData mVertexData; + /* 0x84 */ J3DVertexData mVertexData; + /* 0xE0 */ JUTNameTab * mName; }; // Size: 0xE4 +STATIC_ASSERT(sizeof(J3DModelData) == 0xE4); + #endif /* J3DMODELDATA_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h b/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h index 904fa1d36..1b791fc63 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h +++ b/include/JSystem/J3DGraphAnimator/J3DMtxBuffer.h @@ -10,17 +10,17 @@ class J3DMtxBuffer { public: J3DMtxBuffer() { initialize(); } - /* 80326214 */ void initialize(); - /* 80326258 */ s32 create(J3DModelData*, u32); - /* 80326364 */ s32 createAnmMtx(J3DModelData*); - /* 803263F0 */ s32 createWeightEnvelopeMtx(J3DModelData*); - /* 8032648C */ s32 setNoUseDrawMtx(); - /* 803264B8 */ s32 createDoubleDrawMtx(J3DModelData*, u32); - /* 80326664 */ s32 createBumpMtxArray(J3DModelData*, u32); - /* 803268D4 */ void calcWeightEnvelopeMtx(); - /* 80326ACC */ void calcDrawMtx(u32, Vec const&, f32 const (&)[3][4]); - /* 80326D3C */ void calcNrmMtx(); - /* 80326EF0 */ void calcBBoardMtx(); + void initialize(); + s32 create(J3DModelData*, u32); + s32 createAnmMtx(J3DModelData*); + s32 createWeightEnvelopeMtx(J3DModelData*); + s32 setNoUseDrawMtx(); + s32 createDoubleDrawMtx(J3DModelData*, u32); + s32 createBumpMtxArray(J3DModelData*, u32); + void calcWeightEnvelopeMtx(); + void calcDrawMtx(u32, Vec const&, f32 const (&)[3][4]); + void calcNrmMtx(); + void calcBBoardMtx(); MtxP getAnmMtx(int idx) const { return mpAnmMtx[idx]; } void setAnmMtx(int i, Mtx m) { MTXCopy(m, (MtxP)mpAnmMtx[i]); } @@ -72,7 +72,7 @@ private: /* 0x34 */ Mtx* mpUserAnmMtx; public: - /* 803283B4 */ virtual ~J3DMtxBuffer(); + virtual ~J3DMtxBuffer(); }; void J3DCalcViewBaseMtx(f32 (*param_0)[4], Vec const& param_1, f32 const (¶m_2)[3][4], diff --git a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h index 4df0f6e0b..321d8b1c2 100644 --- a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h +++ b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h @@ -11,13 +11,12 @@ public: J3DShapeTable() { mShapeNum = 0; mShapeNodePointer = NULL; - mShapeName = NULL; } - /* 803258A0 */ void hide(); - /* 803258D8 */ void show(); - /* 80325910 */ void initShapeNodes(J3DDrawMtxData*, J3DVertexData*); - /* 8032597C */ void sortVcdVatCmd(); + void hide(); + void show(); + void initShapeNodes(J3DDrawMtxData*, J3DVertexData*); + void sortVcdVatCmd(); virtual ~J3DShapeTable(); @@ -27,7 +26,6 @@ public: private: /* 0x4 */ u16 mShapeNum; /* 0x8 */ J3DShape** mShapeNodePointer; - /* 0xC */ JUTNameTab* mShapeName; -}; // Size: 0x10 +}; // Size: 0x0C #endif /* J3DSHAPETABLE_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h index 1844f2f15..48e7746eb 100644 --- a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h +++ b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h @@ -11,11 +11,11 @@ class J3DAnmCluster; class J3DDeformData { public: - /* 8032E1F8 */ J3DDeformData(); - /* 8032E230 */ void offAllFlag(u32); - /* 8032E298 */ void deform(J3DVertexBuffer*); - /* 8032E274 */ void deform(J3DModel*); - /* 8032E364 */ void setAnm(J3DAnmCluster*); + J3DDeformData(); + void offAllFlag(u32); + void deform(J3DVertexBuffer*); + void deform(J3DModel*); + void setAnm(J3DAnmCluster*); private: /* 0x00 */ u16 mClusterNum; @@ -33,9 +33,9 @@ private: }; // Size: 0x28 struct J3DSkinNList { - /* 8032C6E4 */ J3DSkinNList(); - /* 8032C85C */ void calcSkin_VtxPosF32(f32 (*)[4], void*, void*); - /* 8032C8E4 */ void calcSkin_VtxNrmF32(f32 (*)[4], void*, void*); + J3DSkinNList(); + void calcSkin_VtxPosF32(f32 (*)[4], void*, void*); + void calcSkin_VtxNrmF32(f32 (*)[4], void*, void*); /* 0x00 */ u16* field_0x0; /* 0x04 */ u16* field_0x4; @@ -47,20 +47,19 @@ struct J3DSkinNList { class J3DSkinDeform { public: - /* 8032C96C */ J3DSkinDeform(); - /* 8032C9B0 */ void initSkinInfo(J3DModelData*); - /* 8032CF44 */ int initMtxIndexArray(J3DModelData*); - /* 8032D378 */ void changeFastSkinDL(J3DModelData*); - /* 8032D5C4 */ void calcNrmMtx(J3DMtxBuffer*); - /* 8032D738 */ void transformVtxPosNrm(J3DModelData*); - /* 8032D87C */ void calcAnmInvJointMtx(J3DMtxBuffer*); - /* 8032D8F4 */ void deformFastVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const; - /* 8032DA1C */ void deformFastVtxNrm_F32(J3DVertexBuffer*, J3DMtxBuffer*) const; - /* 8032DB50 */ void deformVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const; - /* 8032DC74 */ void deformVtxPos_S16(J3DVertexBuffer*, J3DMtxBuffer*) const; - /* 8032DDB8 */ void deformVtxNrm_F32(J3DVertexBuffer*) const; - /* 8032DEBC */ void deformVtxNrm_S16(J3DVertexBuffer*) const; - /* 8032DFDC */ void deform(J3DModel*); + J3DSkinDeform(); + void initSkinInfo(J3DModelData*); + int initMtxIndexArray(J3DModelData*); + void changeFastSkinDL(J3DModelData*); + void calcNrmMtx(J3DMtxBuffer*); + void transformVtxPosNrm(J3DModelData*); + void calcAnmInvJointMtx(J3DMtxBuffer*); + void deformFastVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const; + void deformFastVtxNrm_F32(J3DVertexBuffer*, J3DMtxBuffer*) const; + void deformVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const; + void deformVtxPos_S16(J3DVertexBuffer*, J3DMtxBuffer*) const; + void deformVtxNrm_F32(J3DVertexBuffer*) const; + void deformVtxNrm_S16(J3DVertexBuffer*) const; void setNrmMtx(int i, MtxP mtx) { J3DPSMtx33CopyFrom34(mtx, (Mtx3P)mNrmMtx[i]); } @@ -69,8 +68,8 @@ public: void offFlag(u32 flag) { mFlags &= ~flag; } bool checkFlag(u32 flag) { return mFlags & flag; } - /* 8032E064 */ virtual void deform(J3DVertexBuffer*, J3DMtxBuffer*); - /* 8032E1B0 */ virtual ~J3DSkinDeform(); + virtual void deform(J3DModel*); + virtual ~J3DSkinDeform(); static u16* sWorkArea_WEvlpMixMtx[1024]; static f32* sWorkArea_WEvlpMixWeight[1024]; @@ -91,12 +90,12 @@ private: class J3DDeformer { public: - /* 8032E39C */ J3DDeformer(J3DDeformData*); - /* 8032EAB4 */ void deform(J3DVertexBuffer*, u16, f32*); - /* 8032E3BC */ void deform(J3DVertexBuffer*, u16); - /* 8032E4A4 */ void deform_VtxPosF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*); - /* 8032E60C */ void deform_VtxNrmF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*); - /* 8032EBCC */ void normalizeWeight(int, f32*); + J3DDeformer(J3DDeformData*); + void deform(J3DVertexBuffer*, u16, f32*); + void deform(J3DVertexBuffer*, u16); + void deform_VtxPosF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*); + void deform_VtxNrmF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*); + void normalizeWeight(int, f32*); private: /* 0x00 */ J3DDeformData* mDeformData; diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 7fd030089..f94b4da65 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -57,6 +57,9 @@ public: J3DMatPacket* getMatPacket() { return mMatPacket; } void setMaterialMode(u32 mode) { mMaterialMode = mode; } + void setCurrentMtxCalc(J3DMtxCalc * pCalc) { mCurrentMtxCalc = pCalc; } + J3DMtxCalc * getCurrentMtxCalc() const { return mCurrentMtxCalc; } + void setTexture(J3DTexture* pTex) { mTexture = pTex; } J3DTexture* getTexture() { return mTexture; } diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 8f54a16c9..04a393261 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -4,11 +4,19 @@ // #include "JSystem/J3DGraphAnimator/J3DModel.h" -#include "dolphin/types.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/J3DGraphBase/J3DSys.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "dolphin/os/OSCache.h" + +Mtx J3DModel::sNoUseDrawMtx; +Mtx33 J3DModel::sNoUseNrmMtx; +Mtx* J3DModel::sNoUseDrawMtxPtr = &J3DModel::sNoUseDrawMtx; +Mtx33* J3DModel::sNoUseNrmMtxPtr = &J3DModel::sNoUseNrmMtx; /* 802ED564-802ED5AC .text __ct__8J3DModelFv */ J3DModel::J3DModel() { - /* Nonmatching */ + initialize(); } /* 802ED5AC-802ED610 .text __dt__8J3DModelFv */ @@ -18,77 +26,357 @@ J3DModel::~J3DModel() { /* 802ED610-802ED6C4 .text initialize__8J3DModelFv */ void J3DModel::initialize() { - /* Nonmatching */ + mModelData = NULL; + mFlags = 0; + mDiffFlag = 0; + mCalcCallBack = NULL; + mUserArea = 0; + + mBaseScale.x = 1.0f; + mBaseScale.y = 1.0f; + mBaseScale.z = 1.0f; + + MTXIdentity(mBaseTransformMtx); + MTXIdentity(mInternalView); + + mpScaleFlagArr = NULL; + mpEvlpScaleFlagArr = NULL; + mpNodeMtx = NULL; + mpWeightEnvMtx = NULL; + mpDrawMtxBuf[0] = NULL; + mpDrawMtxBuf[1] = NULL; + mpNrmMtxBuf[0] = NULL; + mpNrmMtxBuf[1] = NULL; + mpBumpMtxArr[0] = NULL; + mpBumpMtxArr[1] = NULL; + mMtxBufferFlag = 1; + mCurrentViewNo = 0; + mpMatPacket = NULL; + mpShapePacket = NULL; + mpDeformData = NULL; + mpSkinDeform = NULL; + field_0xc4 = NULL; + field_0xc8 = NULL; + mpVisibilityManager = NULL; +} + +enum { + J3DMdlDataFlag_ConcatView = 0x10, + J3DMdlDataFlag_NoUseDrawMtx = 0x20, + J3DMdlDataFlag_NoAnimation = 0x100, +}; + +static inline u32 getMdlDataFlag_MtxLoadType(u32 flag) { + return flag & 0xF0; } /* 802ED6C4-802ED8D8 .text entryModelData__8J3DModelFP12J3DModelDataUlUl */ -void J3DModel::entryModelData(J3DModelData*, unsigned long, unsigned long) { - /* Nonmatching */ +s32 J3DModel::entryModelData(J3DModelData* pModelData, u32 modelFlag, u32 mtxBufferFlag) { + s32 ret = kJ3DError_Success; + + mModelData = pModelData; + mMtxBufferFlag = mtxBufferFlag; + + if (pModelData->getJointNum() != 0) { + mpScaleFlagArr = new u8[pModelData->getJointNum()]; + if (pModelData->getWEvlpMtxNum() != 0) + mpEvlpScaleFlagArr = new u8[pModelData->getWEvlpMtxNum()]; + mpNodeMtx = new Mtx[pModelData->getJointNum()]; + } + + if (pModelData->getWEvlpMtxNum() != 0) { + mpWeightEnvMtx = new Mtx[pModelData->getWEvlpMtxNum()]; + } + + if (mpScaleFlagArr == NULL) + return kJ3DError_Alloc; + + if (pModelData->getWEvlpMtxNum() != 0 && mpEvlpScaleFlagArr == NULL) + return kJ3DError_Alloc; + + if (mpNodeMtx == NULL) + return kJ3DError_Alloc; + + if (pModelData->getWEvlpMtxNum() != 0 && mpWeightEnvMtx == NULL) + return kJ3DError_Alloc; + + if (pModelData->checkFlag(J3DMdlDataFlag_NoAnimation)) { + setNoUseDrawMtx(); + } else { + switch (getMdlDataFlag_MtxLoadType(pModelData->getFlag())) { + case J3DMdlDataFlag_NoUseDrawMtx: + ret = setNoUseDrawMtx(); + break; + case J3DMdlDataFlag_ConcatView: + ret = createSingleDrawMtx(pModelData); + break; + case 0: + default: + ret = createDoubleDrawMtx(pModelData, mtxBufferFlag); + break; + } + } + + if (ret != kJ3DError_Success) + return ret; + + ret = createShapePacket(pModelData); + if (ret != kJ3DError_Success) + return ret; + + ret = createMatPacket(pModelData, modelFlag); + if (ret != kJ3DError_Success) + return ret; + + if (pModelData->checkFlag(J3DMdlDataFlag_ConcatView)) { + mModelData->setBumpFlag(0); + } else { + ret = createBumpMtxArray(pModelData, mtxBufferFlag); + if (ret != kJ3DError_Success) + return ret; + } + + mVertexBuffer.setVertexData(&pModelData->getVertexData()); + prepareShapePackets(); + ret = kJ3DError_Success; + + return ret; } /* 802ED8D8-802ED904 .text setNoUseDrawMtx__8J3DModelFv */ -void J3DModel::setNoUseDrawMtx() { - /* Nonmatching */ +s32 J3DModel::setNoUseDrawMtx() { + mpDrawMtxBuf[1] = &sNoUseDrawMtxPtr; + mpDrawMtxBuf[0] = &sNoUseDrawMtxPtr; + mpNrmMtxBuf[1] = &sNoUseNrmMtxPtr; + mpNrmMtxBuf[0] = &sNoUseNrmMtxPtr; + mpBumpMtxArr[1] = NULL; + mpBumpMtxArr[0] = NULL; + return kJ3DError_Success; } /* 802ED904-802EDA14 .text createSingleDrawMtx__8J3DModelFP12J3DModelData */ -void J3DModel::createSingleDrawMtx(J3DModelData*) { - /* Nonmatching */ +s32 J3DModel::createSingleDrawMtx(J3DModelData* pModelData) { + mpDrawMtxBuf[0] = new Mtx*[1]; + mpDrawMtxBuf[1] = mpDrawMtxBuf[0]; + mpNrmMtxBuf[0] = new Mtx33*[1]; + mpNrmMtxBuf[1] = mpNrmMtxBuf[0]; + mpBumpMtxArr[0] = NULL; + mpBumpMtxArr[1] = NULL; + + if (mpDrawMtxBuf[0] == NULL) + return kJ3DError_Alloc; + if (mpNrmMtxBuf[0] == NULL) + return kJ3DError_Alloc; + + if (pModelData->getDrawMtxNum() != 0) { + mpDrawMtxBuf[0][0] = new (0x20) Mtx[pModelData->getDrawMtxNum()]; + mpDrawMtxBuf[1][0] = mpDrawMtxBuf[0][0]; + mpNrmMtxBuf[0][0] = new (0x20) Mtx33[1]; + mpNrmMtxBuf[1][0] = mpNrmMtxBuf[0][0]; + } + + if (pModelData->getDrawMtxNum() != 0 && mpDrawMtxBuf[0][0] == NULL) + return kJ3DError_Alloc; + + return kJ3DError_Success; } /* 802EDA14-802EDBC0 .text createDoubleDrawMtx__8J3DModelFP12J3DModelDataUl */ -void J3DModel::createDoubleDrawMtx(J3DModelData*, unsigned long) { - /* Nonmatching */ +s32 J3DModel::createDoubleDrawMtx(J3DModelData* pModelData, u32 num) { + if (num != 0) { + for (s32 i = 0; i < 2; i++) { + mpDrawMtxBuf[i] = new Mtx*[num]; + mpNrmMtxBuf[i] = new Mtx33*[num]; + mpBumpMtxArr[i] = NULL; + } + } + + if (num != 0) { + for (u32 i = 0; i < 2; i++) { + if (mpDrawMtxBuf[i] == NULL) + return kJ3DError_Alloc; + if (mpNrmMtxBuf[i] == NULL) + return kJ3DError_Alloc; + } + } + + for (s32 i = 0; i < 2; i++) { + for (u32 j = 0; j < num; j++) { + if (pModelData->getDrawMtxNum() != 0) { + mpDrawMtxBuf[i][j] = new (0x20) Mtx[pModelData->getDrawMtxNum()]; + mpNrmMtxBuf[i][j] = new (0x20) Mtx33[pModelData->getDrawMtxNum()]; + } + } + } + + for (s32 i = 0; i < 2; i++) { + for (u32 j = 0; j < num; j++) { + if (pModelData->getDrawMtxNum() != 0) { + if (mpDrawMtxBuf[i][j] == NULL) + return kJ3DError_Alloc; + if (mpNrmMtxBuf[i][j] == NULL) + return kJ3DError_Alloc; + } + } + } + + return kJ3DError_Success; } /* 802EDBC0-802EDC8C .text createShapePacket__8J3DModelFP12J3DModelData */ -void J3DModel::createShapePacket(J3DModelData*) { - /* Nonmatching */ +s32 J3DModel::createShapePacket(J3DModelData* pModelData) { + if (pModelData->getShapeNum() != 0) { + u16 shapeNum = pModelData->getShapeNum(); + + mpShapePacket = new J3DShapePacket[shapeNum]; + if (mpShapePacket == NULL) + return kJ3DError_Alloc; + + for (int i = 0; i < pModelData->getShapeNum(); i++) { + J3DShape* shapeNode = pModelData->getShapeNodePointer(i); + mpShapePacket[i].setShape(shapeNode); + mpShapePacket[i].setModel(this); + } + } + + return kJ3DError_Success; } /* 802EDC8C-802EDF60 .text createMatPacket__8J3DModelFP12J3DModelDataUl */ -void J3DModel::createMatPacket(J3DModelData*, unsigned long) { +s32 J3DModel::createMatPacket(J3DModelData*, unsigned long) { /* Nonmatching */ } /* 802EDF60-802EE1D4 .text createBumpMtxArray__8J3DModelFP12J3DModelDataUl */ -void J3DModel::createBumpMtxArray(J3DModelData*, unsigned long) { +s32 J3DModel::createBumpMtxArray(J3DModelData*, unsigned long) { /* Nonmatching */ } /* 802EE1D4-802EE254 .text newDifferedDisplayList__8J3DModelFUl */ -void J3DModel::newDifferedDisplayList(unsigned long) { - /* Nonmatching */ +s32 J3DModel::newDifferedDisplayList(u32 flag) { + mDiffFlag = flag; + for (u16 i = 0; i < getModelData()->getShapeNum(); i++) { + s32 ret = getShapePacket(i)->newDifferedDisplayList(flag); + if (ret != kJ3DError_Success) + return ret; + } + return kJ3DError_Success; } /* 802EE254-802EE28C .text lock__8J3DModelFv */ void J3DModel::lock() { - /* Nonmatching */ + u16 matNum = mModelData->getMaterialNum(); + + for (int i = 0; i < matNum; i++) { + mpMatPacket[i].lock(); + } } /* 802EE28C-802EE2C4 .text unlock__8J3DModelFv */ void J3DModel::unlock() { - /* Nonmatching */ + u16 matNum = mModelData->getMaterialNum(); + + for (int i = 0; i < matNum; i++) { + mpMatPacket[i].unlock(); + } } /* 802EE2C4-802EE42C .text calcMaterial__8J3DModelFv */ void J3DModel::calcMaterial() { - /* Nonmatching */ + j3dSys.setTexture(mModelData->getTexture()); + + if (checkFlag(4)) { + j3dSys.onFlag(4); + } else { + j3dSys.offFlag(4); + } + + if (checkFlag(8)) { + j3dSys.onFlag(8); + } else { + j3dSys.offFlag(8); + } + + j3dSys.setModel(this); + + for (u16 i = 0; i < mModelData->getMaterialNum(); i++) { + j3dSys.setMatPacket(&mpMatPacket[i]); + + J3DMaterial* pMaterial = mModelData->getMaterialNodePointer(i); + if (pMaterial->getMaterialAnm() != NULL) + pMaterial->getMaterialAnm()->calc(pMaterial); + + s32 jntNo = pMaterial->getJoint()->getJntNo(); + pMaterial->calc(getAnmMtx(jntNo)); + } } /* 802EE42C-802EE4BC .text diff__8J3DModelFv */ void J3DModel::diff() { - /* Nonmatching */ + for (u16 i = 0; i < getModelData()->getMaterialNum(); i++) { + j3dSys.setMatPacket(&mpMatPacket[i]); + getModelData()->getMaterialNodePointer(i)->diff(mDiffFlag); + } } /* 802EE4BC-802EE5D8 .text setSkinDeform__8J3DModelFP13J3DSkinDeformUl */ -void J3DModel::setSkinDeform(J3DSkinDeform*, unsigned long) { - /* Nonmatching */ +s32 J3DModel::setSkinDeform(J3DSkinDeform* pSkinDeform, u32 flags) { + mpSkinDeform = pSkinDeform; + + s32 ret = kJ3DError_Success; + + if (pSkinDeform == NULL) { + offFlag(J3DMdlFlag_SkinPosCpu); + offFlag(J3DMdlFlag_SkinNrmCpu); + return 5; + } else { + mpSkinDeform->initMtxIndexArray(mModelData); + + ret = mModelData->checkFlag(0x100); + if (ret != kJ3DError_Success) { + mpSkinDeform->changeFastSkinDL(mModelData); + flags &= ~2; + flags &= ~4; + } + + ret = 0; + if ((~flags & 2)) { + ret = mVertexBuffer.allocTransformedVtxPosArray(); + if (ret != kJ3DError_Success) { + offFlag(J3DMdlFlag_SkinPosCpu); + return ret; + } + onFlag(J3DMdlFlag_SkinPosCpu); + } else { + offFlag(J3DMdlFlag_SkinPosCpu); + } + + if ((~flags & 4)) { + ret = mVertexBuffer.allocTransformedVtxNrmArray(); + if (ret != kJ3DError_Success) { + offFlag(J3DMdlFlag_SkinNrmCpu); + return ret; + } + onFlag(J3DMdlFlag_SkinNrmCpu); + } else { + offFlag(J3DMdlFlag_SkinNrmCpu); + } + } + + return ret; } /* 802EE5D8-802EE67C .text calcAnmMtx__8J3DModelFv */ void J3DModel::calcAnmMtx() { - /* Nonmatching */ + j3dSys.setCurrentMtxCalc(getModelData()->getJointTree().getBasicMtxCalc()); + j3dSys.setModel(this); + + if (checkFlag(2)) + j3dSys.getCurrentMtxCalc()->init(j3dDefaultScale, j3dDefaultMtx); + else + j3dSys.getCurrentMtxCalc()->init(mBaseScale, mBaseTransformMtx); + + j3dSys.getCurrentMtxCalc()->recursiveCalc(getModelData()->getJointTree().getRootNode()); } /* 802EE67C-802EE874 .text calcWeightEnvelopeMtx__8J3DModelFv */ @@ -98,17 +386,74 @@ void J3DModel::calcWeightEnvelopeMtx() { /* 802EE874-802EE8C0 .text update__8J3DModelFv */ void J3DModel::update() { - /* Nonmatching */ + calc(); + entry(); } /* 802EE8C0-802EEA2C .text calc__8J3DModelFv */ void J3DModel::calc() { - /* Nonmatching */ + j3dSys.setModel(this); + + if (checkFlag(J3DMdlFlag_SkinPosCpu)) { + j3dSys.onFlag(J3DSysFlag_SkinPosCpu); + } else { + j3dSys.offFlag(J3DSysFlag_SkinPosCpu); + } + + if (checkFlag(J3DMdlFlag_SkinNrmCpu)) { + j3dSys.onFlag(J3DSysFlag_SkinNrmCpu); + } else { + j3dSys.offFlag(J3DSysFlag_SkinNrmCpu); + } + + mVertexBuffer.frameInit(); + + if (mpVisibilityManager != NULL) + mpVisibilityManager->setVisibility(getModelData()); + + if (mpDeformData != NULL) + mpDeformData->deform(this); + + if (field_0xc4 != NULL) + field_0xc4->calc(this); + + if (field_0xc8 != NULL) + field_0xc8->calc(this); + + calcAnmMtx(); + calcWeightEnvelopeMtx(); + + if (mpSkinDeform != NULL) + mpSkinDeform->deform(this); + + if (mCalcCallBack != NULL) + mCalcCallBack(this, 0); } /* 802EEA2C-802EEB24 .text entry__8J3DModelFv */ void J3DModel::entry() { - /* Nonmatching */ + j3dSys.setModel(this); + + if (checkFlag(J3DMdlFlag_SkinPosCpu)) { + j3dSys.onFlag(J3DSysFlag_SkinPosCpu); + } else { + j3dSys.offFlag(J3DSysFlag_SkinPosCpu); + } + + if (checkFlag(J3DMdlFlag_SkinNrmCpu)) { + j3dSys.onFlag(J3DSysFlag_SkinNrmCpu); + } else { + j3dSys.offFlag(J3DSysFlag_SkinNrmCpu); + } + + j3dSys.setTexture(getModelData()->getTexture()); + + for (u16 i = 0; i < getModelData()->getJointNum(); i++) { + J3DJoint* joint = getModelData()->getJointNodePointer(i); + if (joint->getMesh() != NULL) { + joint->entryIn(); + } + } } /* 802EEB24-802EEBDC .text calcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f */ @@ -123,7 +468,41 @@ void J3DModel::calcDrawMtx() { /* 802EEE30-802EF050 .text viewCalc__8J3DModelFv */ void J3DModel::viewCalc() { - /* Nonmatching */ + swapDrawMtx(); + swapNrmMtx(); + + if (mModelData->checkFlag(0x20)) { + if (getMtxCalcMode() == 2) + calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mInternalView); + + prepareShapePackets(); + } else if (isCpuSkinningOn()) { + if (getMtxCalcMode() == 2) + calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mInternalView); + + prepareShapePackets(); + } else { + if (checkFlag(J3DMdlFlag_SkinPosCpu)) { + calcDrawMtx(); + calcNrmMtx(); + calcBumpMtx(); + DCStoreRange(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx)); + DCStoreRange(getNrmMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx33)); + } else if (checkFlag(J3DMdlFlag_SkinNrmCpu)) { + calcDrawMtx(); + calcBBoard(); + DCStoreRange(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx)); + } else { + calcDrawMtx(); + calcNrmMtx(); + calcBBoard(); + calcBumpMtx(); + DCStoreRange(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx)); + DCStoreRange(getNrmMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx33)); + } + + prepareShapePackets(); + } } /* 802EF050-802EF1B8 .text calcNrmMtx__8J3DModelFv */ @@ -143,5 +522,44 @@ void J3DModel::calcBBoard() { /* 802EF414-802EF5D8 .text prepareShapePackets__8J3DModelFv */ void J3DModel::prepareShapePackets() { - /* Nonmatching */ + u16 shapeNum = getModelData()->getShapeNum(); + for (u16 i = 0; i < shapeNum; i++) { + J3DShapePacket* pkt = getShapePacket(i); + pkt->mpScaleFlagArray = getScaleFlagArray(); + pkt->mpDrawMtx = getDrawMtxPtrPtr(); + pkt->mpNrmMtx = getNrmMtxPtrPtr(); + pkt->mpCurrentViewNo = getCurrentViewNoPtr(); + } + + for (u16 i = 0; i < shapeNum; i++) { + J3DShape *pShape = getModelData()->getShapeNodePointer(i); + J3DShapePacket* pkt = getShapePacket(i); + + if (checkFlag(J3DMdlFlag_SkinPosCpu)) + pShape->onFlag(J3DSysFlag_SkinPosCpu); + else + pShape->offFlag(J3DSysFlag_SkinPosCpu); + + if (checkFlag(J3DMdlFlag_SkinNrmCpu) && !pShape->checkFlag(J3DShpFlag_EnableLod)) + pShape->onFlag(J3DSysFlag_SkinNrmCpu); + else + pShape->offFlag(J3DSysFlag_SkinNrmCpu); + + if (getMtxCalcMode() == 2) + pkt->setBaseMtxPtr(&mInternalView); + else + pkt->setBaseMtxPtr(&j3dSys.mViewMtx); + } + + if (getModelData()->checkBumpFlag() == 1) { + for (s32 i = 0; i < getModelData()->getMaterialNum(); i++) { + J3DMaterial* pMaterial = getModelData()->getMaterialNodePointer(i); + if (pMaterial->getTexGenBlock()->getNBTScale()->mbHasScale) { + J3DShape *pShape = pMaterial->getShape(); + J3DShapePacket *pPacket = getShapePacket(pShape->getIndex()); + u32 bumpMtxOffset = pShape->getBumpMtxOffset(); + pPacket->setNrmMtx(getBumpMtxPtrPtr()[bumpMtxOffset]); + } + } + } } From 2f918f337e7bb40d7fb506998fc93818901f50b5 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Sep 2023 23:07:35 -0700 Subject: [PATCH 67/89] J3DModel createMatPacket 100% the beast has been tamed --- include/JSystem/J3DGraphBase/J3DPacket.h | 2 + src/JSystem/J3DGraphAnimator/J3DModel.cpp | 74 ++++++++++++++++++++++- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DPacket.h b/include/JSystem/J3DGraphBase/J3DPacket.h index 143065ab0..737c56294 100644 --- a/include/JSystem/J3DGraphBase/J3DPacket.h +++ b/include/JSystem/J3DGraphBase/J3DPacket.h @@ -207,6 +207,8 @@ public: J3DMaterial* getMaterial() const { return mpMaterial; } J3DShapePacket* getShapePacket() const { return mpShapePacket; } void setShapePacket(J3DShapePacket* packet) { mpShapePacket = packet; } + void setMaterial(J3DMaterial* pMaterial) { mpMaterial = pMaterial; } + void setTexture(J3DTexture* pTexture) { mpTexture = pTexture; } void setInitShapePacket(J3DShapePacket* packet) { mpInitShapePacket = packet; } void setMaterialAnmID(J3DMaterialAnm* materialAnm) { mpMaterialAnm = materialAnm; } bool isChanged() const { return mDiffFlag & 0x80000000; } diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 04a393261..187e4c1a8 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -243,8 +243,78 @@ s32 J3DModel::createShapePacket(J3DModelData* pModelData) { } /* 802EDC8C-802EDF60 .text createMatPacket__8J3DModelFP12J3DModelDataUl */ -s32 J3DModel::createMatPacket(J3DModelData*, unsigned long) { - /* Nonmatching */ +s32 J3DModel::createMatPacket(J3DModelData* pModelData, u32 flag) { + if (pModelData->getMaterialNum() != 0) { + mpMatPacket = new J3DMatPacket[pModelData->getMaterialNum()]; + + if (mpMatPacket == NULL) + return kJ3DError_Alloc; + } + + s32 ret; + + u32 singleDLFlag = flag & 0x40000; + for (s32 i = 0; i < pModelData->getMaterialNum(); i++) { + mpMatPacket[i].setMaterial(pModelData->getMaterialNodePointer(i)); + J3DShapePacket* shapePacket = getShapePacket(pModelData->getMaterialNodePointer(i)->getShape()->getIndex()); + mpMatPacket[i].setInitShapePacket(shapePacket); + mpMatPacket[i].addShapePacket(shapePacket); + mpMatPacket[i].setTexture(pModelData->getMaterialTable().getTexture()); + mpMatPacket[i].mDiffFlag = pModelData->getMaterialNodePointer(i)->mDiffFlag; + + if (pModelData->getModelDataType() == 1) + mpMatPacket[i].mFlags |= 0x01; + + if (!!(flag & 0x80000)) { + mpMatPacket[i].mpDisplayListObj = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + } else { + if (pModelData->getModelDataType() == 1) { + if (!!(flag & 0x40000)) { + mpMatPacket[i].mpDisplayListObj = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + } else { + J3DDisplayListObj* sharedDL = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + ret = sharedDL->single_To_Double(); + if (ret != kJ3DError_Success) + return ret; + + mpMatPacket[i].mpDisplayListObj = sharedDL; + } + } else if (!!(flag & 0x20000)) { + if (!!(flag & 0x40000)) { + ret = pModelData->getMaterialNodePointer(i)->newSingleSharedDisplayList(pModelData->getMaterialNodePointer(i)->countDLSize()); + if (ret != kJ3DError_Success) + return ret; + + mpMatPacket[i].mpDisplayListObj = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + } else { + ret = pModelData->getMaterialNodePointer(i)->newSharedDisplayList(pModelData->getMaterialNodePointer(i)->countDLSize()); + if (ret != kJ3DError_Success) + return ret; + + J3DDisplayListObj* sharedDL = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + ret = sharedDL->single_To_Double(); + if (ret != kJ3DError_Success) + return ret; + + mpMatPacket[i].mpDisplayListObj = sharedDL; + } + } else { + if (!!(flag & 0x40000)) { + u32 size = pModelData->getMaterialNodePointer(i)->countDLSize(); + ret = mpMatPacket[i].newSingleDisplayList(size); + if (ret != kJ3DError_Success) + return ret; + } else { + u32 size = pModelData->getMaterialNodePointer(i)->countDLSize(); + ret = mpMatPacket[i].newDisplayList(size); + if (ret != kJ3DError_Success) + return ret; + } + } + } + } + + return kJ3DError_Success; } /* 802EDF60-802EE1D4 .text createBumpMtxArray__8J3DModelFP12J3DModelDataUl */ From 2d719328f67f6fa080a7e52319fcd2920acd5364 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 00:30:34 -0700 Subject: [PATCH 68/89] J3DModelData 99% just one regswap --- include/JSystem/J3DGraphAnimator/J3DJoint.h | 1 + .../JSystem/J3DGraphAnimator/J3DJointTree.h | 10 +- .../J3DGraphAnimator/J3DMaterialAttach.h | 4 + .../JSystem/J3DGraphAnimator/J3DModelData.h | 20 ++- include/JSystem/J3DGraphAnimator/J3DNode.h | 3 +- .../JSystem/J3DGraphAnimator/J3DShapeTable.h | 10 +- include/JSystem/J3DGraphBase/J3DShapeDraw.h | 8 +- include/JSystem/J3DGraphBase/J3DShapeMtx.h | 24 +-- include/JSystem/J3DGraphBase/J3DVertex.h | 2 + src/JSystem/J3DGraphAnimator/J3DModelData.cpp | 155 +++++++++++++++--- src/JSystem/J3DGraphBase/J3DShapeMtx.cpp | 98 +++-------- 11 files changed, 202 insertions(+), 133 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DJoint.h b/include/JSystem/J3DGraphAnimator/J3DJoint.h index 26e4f4c36..742a0888e 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJoint.h +++ b/include/JSystem/J3DGraphAnimator/J3DJoint.h @@ -46,6 +46,7 @@ public: J3DJoint(); void entryIn(); void recursiveCalc(); + void addMesh(J3DMaterial*); J3DMaterial* getMesh() { return mMesh; } u16 getJntNo() const { return mJntNo; } diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index e7324aee4..dee523852 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.h @@ -25,16 +25,18 @@ struct J3DDrawMtxData { }; // Size: 0xC class J3DShapeTable; +class J3DShape; class J3DJointTree { public: - J3DJointTree(); - void makeHierarchy(J3DJoint*, J3DModelHierarchy const**, J3DMaterialTable*, J3DShapeTable*); + J3DJointTree() { clear(); } + void clear(); + void makeHierarchy(J3DNode*, const J3DModelHierarchy**, J3DMaterialTable*, J3DShape**); void findImportantMtxIndex(); - virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]); - virtual ~J3DJointTree(); + virtual ~J3DJointTree() {} + J3DDrawMtxData * getDrawMtxData() { return &mDrawMtxData; } u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; } u8 getWEvlpMixMtxNum(u16 idx) const { return mWEvlpMixMtxNum[idx]; } u16 * getWEvlpMixIndex() const { return mWEvlpMixIndex; } diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index 5182c354c..38b5c7e22 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -39,12 +39,16 @@ public: J3DTexture* getTexture() const { return mTexture; } JUTNameTab* getTextureName() const { return mTextureName; } + void setTexture(J3DTexture* pTexture) { mTexture = pTexture; } + void setTextureName(JUTNameTab* pTextureName) { mTextureName = pTextureName; } JUTNameTab* getMaterialName() const { return mMaterialName; } u16 getMaterialNum() const { return mMaterialNum; } private: + friend class J3DJointTree; + /* 0x04 */ u16 mMaterialNum; /* 0x06 */ u16 mUniqueMatNum; /* 0x08 */ J3DMaterial** mMaterialNodePointer; diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index 3f5bd7d30..bbf3da2ae 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -11,22 +11,29 @@ typedef struct _GXColor GXColor; class JUTNameTab; +enum J3DMaterialCopyFlag { + J3DMatCopyFlag_Material = 0x01, + J3DMatCopyFlag_Texture = 0x02, +}; + class J3DModelData { public: void clear(); J3DModelData(); s32 newSharedDisplayList(u32); + bool isDeformablePositionFormat() const; void indexToPtr(); void makeSharedDL(); - void simpleCalcMaterial(u16, f32 (*)[4]); - void syncJ3DSysPointers() const; - void syncJ3DSysFlags() const; + void initShapeNodes(); + void sortVcdVatCmd(); + void setMaterialTable(J3DMaterialTable*, J3DMaterialCopyFlag); virtual ~J3DModelData(); J3DMaterialTable& getMaterialTable() { return mMaterialTable; } JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); } J3DVertexData& getVertexData() { return mVertexData; } + GXVtxAttrFmtList* getVtxAttrFmtList() const { return ((J3DVertexData*)&mVertexData)->getVtxAttrFmtList(); } u16 getShapeNum() const { return mShapeTable.getShapeNum(); } u16 getMaterialNum() const { return mMaterialTable.getMaterialNum(); } u16 getJointNum() const { return mJointTree.getJointNum(); } @@ -36,6 +43,7 @@ public: } u32 getVtxNum() const { return mVertexData.getVtxNum(); } u32 getNrmNum() const { return mVertexData.getNrmNum(); } + J3DDrawMtxData * getDrawMtxData() { return mJointTree.getDrawMtxData(); } u8 getDrawMtxFlag(u16 idx) const { return mJointTree.getDrawMtxFlag(idx); } u16 getDrawMtxIndex(u16 idx) const { return mJointTree.getDrawMtxIndex(idx); } J3DShape* getShapeNodePointer(u16 idx) const { return mShapeTable.getShapeNodePointer(idx); } @@ -45,6 +53,8 @@ public: Mtx& getInvJointMtx(s32 idx) const { return mJointTree.getInvJointMtx(idx); } J3DTexture* getTexture() const { return mMaterialTable.getTexture(); } JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); } + void setTexture(J3DTexture* pTexture) { mMaterialTable.setTexture(pTexture); } + void setTextureName(JUTNameTab* pTextureName) { mMaterialTable.setTextureName(pTextureName); } u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); } u16* getWEvlpMixMtxIndex() const { return mJointTree.getWEvlpMixIndex(); } f32* getWEvlpMixWeight() const { return mJointTree.getWEvlpMixWeight(); } @@ -74,10 +84,6 @@ public: int removeMatColorAnimator(J3DAnmColor* anm) { return mMaterialTable.removeMatColorAnimator(anm); } - void syncJ3DSys() { - syncJ3DSysFlags(); - syncJ3DSysPointers(); - } private: /* 0x04 */ void* mpRawData; diff --git a/include/JSystem/J3DGraphAnimator/J3DNode.h b/include/JSystem/J3DGraphAnimator/J3DNode.h index 342c3d3fb..ec61c56f1 100644 --- a/include/JSystem/J3DGraphAnimator/J3DNode.h +++ b/include/JSystem/J3DGraphAnimator/J3DNode.h @@ -11,7 +11,8 @@ public: virtual void init(Vec const& param_0, Mtx*); virtual void entryIn(); virtual void calcIn(); - virtual u32 getType(); + virtual void calcOut(); + virtual u32 getType() const; virtual ~J3DNode(); J3DNode(); diff --git a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h index 321d8b1c2..e67c58717 100644 --- a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h +++ b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h @@ -8,22 +8,16 @@ class JUTNameTab; class J3DShapeTable { public: - J3DShapeTable() { + inline void clear() { mShapeNum = 0; mShapeNodePointer = NULL; } - void hide(); - void show(); - void initShapeNodes(J3DDrawMtxData*, J3DVertexData*); - void sortVcdVatCmd(); - - virtual ~J3DShapeTable(); - u16 getShapeNum() const { return mShapeNum; } J3DShape* getShapeNodePointer(u16 idx) const { return mShapeNodePointer[idx]; } private: + /* 0x0 */ void *field_0x0; /* 0x4 */ u16 mShapeNum; /* 0x8 */ J3DShape** mShapeNodePointer; }; // Size: 0x0C diff --git a/include/JSystem/J3DGraphBase/J3DShapeDraw.h b/include/JSystem/J3DGraphBase/J3DShapeDraw.h index 2293fd633..0dbd4dc88 100644 --- a/include/JSystem/J3DGraphBase/J3DShapeDraw.h +++ b/include/JSystem/J3DGraphBase/J3DShapeDraw.h @@ -5,12 +5,10 @@ class J3DShapeDraw { public: - /* 80314924 */ u32 countVertex(u32); - /* 80314974 */ void addTexMtxIndexInDL(u32, u32, u32); - /* 80314ABC */ J3DShapeDraw(u8 const*, u32); - /* 80314AD4 */ void draw() const; + J3DShapeDraw(u8 const*, u32); + void draw() const; - /* 80314B00 */ virtual ~J3DShapeDraw(); + virtual ~J3DShapeDraw() {} u8* getDisplayList() const { return (u8*)mDisplayList; } u32 getDisplayListSize() const { return mDisplayListSize; } diff --git a/include/JSystem/J3DGraphBase/J3DShapeMtx.h b/include/JSystem/J3DGraphBase/J3DShapeMtx.h index 5435ed7df..4a9c0c1e5 100644 --- a/include/JSystem/J3DGraphBase/J3DShapeMtx.h +++ b/include/JSystem/J3DGraphBase/J3DShapeMtx.h @@ -39,7 +39,7 @@ public: void loadMtxIndx_NCPU(int, u16) const; void loadMtxIndx_PNCPU(int, u16) const; - virtual ~J3DShapeMtx(); + virtual ~J3DShapeMtx() {} virtual u32 getType() const; virtual u32 getUseMtxNum() const; virtual u32 getUseMtxIndex(u16) const; @@ -64,7 +64,7 @@ public: J3DShapeMtxImm(u16 useMtxIndex) : J3DShapeMtx(useMtxIndex) {} - virtual ~J3DShapeMtxImm(); + virtual ~J3DShapeMtxImm() {} virtual u32 getType() const; virtual void load() const; virtual void loadNrmMtx(int, u16) const; @@ -82,7 +82,7 @@ class J3DShapeMtxMultiImm : public J3DShapeMtxImm { public: J3DShapeMtxMultiImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} - virtual ~J3DShapeMtxMultiImm(); + virtual ~J3DShapeMtxMultiImm() {} virtual u32 getType() const; virtual u32 getUseMtxNum() const; virtual u32 getUseMtxIndex(u16) const; @@ -94,13 +94,13 @@ private: /* 0x8 */ u16* mUseMtxIndexTable; }; -class J3DShapeMtxConcatView : public J3DShapeMtx { +class J3DShapeMtxConcatView : public J3DShapeMtxImm { public: typedef void (J3DShapeMtxConcatView::*MtxLoadConcatView)(int mtxNo, u16 index) const; - J3DShapeMtxConcatView(u16 useMtxIndex) : J3DShapeMtx(useMtxIndex) {} + J3DShapeMtxConcatView(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} - virtual ~J3DShapeMtxConcatView(); + virtual ~J3DShapeMtxConcatView() {} virtual u32 getType() const; virtual void load() const; virtual void loadNrmMtx(int, u16) const; @@ -120,7 +120,7 @@ class J3DShapeMtxBBoardImm : public J3DShapeMtxImm { public: J3DShapeMtxBBoardImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} - virtual ~J3DShapeMtxBBoardImm(); + virtual ~J3DShapeMtxBBoardImm() {} virtual u32 getType() const; virtual void load() const; }; @@ -129,7 +129,7 @@ class J3DShapeMtxYBBoardImm : public J3DShapeMtxImm { public: J3DShapeMtxYBBoardImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {} - virtual ~J3DShapeMtxYBBoardImm(); + virtual ~J3DShapeMtxYBBoardImm() {} virtual u32 getType() const; virtual void load() const; }; @@ -138,7 +138,7 @@ class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView { public: J3DShapeMtxYBBoardConcatView(u16 useMtxIndex) : J3DShapeMtxConcatView(useMtxIndex) {} - virtual ~J3DShapeMtxYBBoardConcatView(); + virtual ~J3DShapeMtxYBBoardConcatView() {} virtual u32 getType() const; virtual void load() const; }; @@ -147,7 +147,7 @@ class J3DShapeMtxBBoardConcatView : public J3DShapeMtxConcatView { public: J3DShapeMtxBBoardConcatView(u16 useMtxIndex) : J3DShapeMtxConcatView(useMtxIndex) {} - virtual ~J3DShapeMtxBBoardConcatView(); + virtual ~J3DShapeMtxBBoardConcatView() {} virtual u32 getType() const; virtual void load() const; }; @@ -157,7 +157,7 @@ public: J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable) : J3DShapeMtx(useMtxIndex), mUseMtxNum(useMtxNum), mUseMtxIndexTable(useMtxIndexTable) {} - virtual ~J3DShapeMtxMulti(); + virtual ~J3DShapeMtxMulti() {} virtual u32 getType() const; virtual u32 getUseMtxNum() const; virtual u32 getUseMtxIndex(u16) const; @@ -175,7 +175,7 @@ public: : J3DShapeMtxConcatView(useMtxIndex), mUseMtxNum(useMtxNum), mUseMtxIndexTable(useMtxIndexTable) {} - virtual ~J3DShapeMtxMultiConcatView(); + virtual ~J3DShapeMtxMultiConcatView() {} virtual u32 getType() const; virtual u32 getUseMtxNum() const; virtual u32 getUseMtxIndex(u16) const; diff --git a/include/JSystem/J3DGraphBase/J3DVertex.h b/include/JSystem/J3DGraphBase/J3DVertex.h index 5598f4914..f6252a53d 100644 --- a/include/JSystem/J3DGraphBase/J3DVertex.h +++ b/include/JSystem/J3DGraphBase/J3DVertex.h @@ -24,6 +24,8 @@ public: J3DVertexData(); ~J3DVertexData(); + inline void clear() { mPacketNum = 0; } + void* getVtxPosArray() const { return mVtxPosArray; } void* getVtxNrmArray() const { return mVtxNrmArray; } GXColor* getVtxColorArray(u8 idx) const { return mVtxColorArray[idx]; } diff --git a/src/JSystem/J3DGraphAnimator/J3DModelData.cpp b/src/JSystem/J3DGraphAnimator/J3DModelData.cpp index c9c69e6b3..3c04517bf 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModelData.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModelData.cpp @@ -4,64 +4,179 @@ // #include "JSystem/J3DGraphAnimator/J3DModelData.h" +#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" +#include "JSystem/JUtility/JUTNameTab.h" #include "dolphin/types.h" /* 802ECF30-802ECF70 .text clear__12J3DJointTreeFv */ void J3DJointTree::clear() { - /* Nonmatching */ + mHierarchy = NULL; + mFlags = 0; + mModelDataType = 0; + mRootNode = NULL; + mBasicMtxCalc = NULL; + mJointNum = NULL; + mJointNodePointer = NULL; + field_0x40 = NULL; + mWEvlpMtxNum = 0; + mWEvlpMixMtxNum = NULL; + mWEvlpMixIndex = NULL; + mWEvlpMixWeight = NULL; + mInvJointMtx = NULL; + mJointName = NULL; } /* 802ECF70-802ED108 .text makeHierarchy__12J3DJointTreeFP7J3DNodePPC17J3DModelHierarchyP16J3DMaterialTablePP8J3DShape */ -void J3DJointTree::makeHierarchy(J3DNode*, const J3DModelHierarchy**, J3DMaterialTable*, J3DShape**) { - /* Nonmatching */ +void J3DJointTree::makeHierarchy(J3DNode* pRootNode, const J3DModelHierarchy** pHierarchy, J3DMaterialTable* pMaterialTable, J3DShape** pShapeTable) { + enum { + kTypeEnd = 0x00, + kTypeBeginChild = 0x01, + kTypeEndChild = 0x02, + kTypeJoint = 0x10, + kTypeMaterial = 0x11, + kTypeShape = 0x12, + }; + + J3DNode * pCurNode = pRootNode; + + while (true) { + J3DNode * pNewNode = NULL; + J3DMaterial * pNewMaterial = NULL; + J3DShape * pNewShape = NULL; + const J3DModelHierarchy * inf = *pHierarchy; + + switch (inf->mType) { + case kTypeBeginChild: + *pHierarchy = inf + 1; + makeHierarchy(pCurNode, pHierarchy, pMaterialTable, pShapeTable); + break; + case kTypeEndChild: + *pHierarchy = inf + 1; + return; + case kTypeEnd: + return; + case kTypeJoint: + { + J3DJoint ** pJoints = mJointNodePointer; + *pHierarchy = inf + 1; + pNewNode = pJoints[inf->mValue]; + } + break; + case kTypeMaterial: + *pHierarchy = inf + 1; + pNewMaterial = pMaterialTable->mMaterialNodePointer[inf->mValue]; + break; + case kTypeShape: + *pHierarchy = inf + 1; + pNewShape = pShapeTable[inf->mValue]; + break; + } + + if (pNewNode != NULL) { + pCurNode = pNewNode; + if (pRootNode == NULL) + mRootNode = (J3DJoint*)pNewNode; + else + pRootNode->appendChild(pNewNode); + } else if (pNewMaterial != NULL && pRootNode->getType() == 'NJNT') { + ((J3DJoint*)pRootNode)->addMesh(pNewMaterial); + pNewMaterial->mJoint = ((J3DJoint*)pRootNode); + } else if (pNewShape != NULL && pNewNode->getType() == 'NJNT') { + pNewMaterial = ((J3DJoint*)pRootNode)->getMesh(); + pNewMaterial->mShape = pNewShape; + pNewShape->mMaterial = pNewMaterial; + } + } } /* 802ED108-802ED130 .text clear__12J3DModelDataFv */ void J3DModelData::clear() { - /* Nonmatching */ + mpRawData = NULL; + mFlags = 0; + mbHasBumpArray = 0; + mbHasBillboard = 0; + mShapeTable.clear(); + mName = NULL; + mVertexData.clear(); } /* 802ED130-802ED1A8 .text __ct__12J3DModelDataFv */ J3DModelData::J3DModelData() { - /* Nonmatching */ + clear(); } /* 802ED1A8-802ED238 .text __dt__12J3DModelDataFv */ J3DModelData::~J3DModelData() { - /* Nonmatching */ } /* 802ED238-802ED2A4 .text initShapeNodes__12J3DModelDataFv */ void J3DModelData::initShapeNodes() { - /* Nonmatching */ + for (u16 i = 0; i < getShapeNum(); i++) { + J3DShape *pShape = getShapeNodePointer(i); + pShape->setDrawMtxDataPointer(getDrawMtxData()); + pShape->setVertexDataPointer(&getVertexData()); + pShape->makeVcdVatCmd(); + } } /* 802ED2A4-802ED340 .text sortVcdVatCmd__12J3DModelDataFv */ void J3DModelData::sortVcdVatCmd() { - /* Nonmatching */ + for (u16 i = 0; i < getShapeNum(); i++) + for (u16 j = 0; j < i; j++) + if (getShapeNodePointer(i)->isSameVcdVatCmd(getShapeNodePointer(j))) + getShapeNodePointer(i)->setVcdVatCmd(getShapeNodePointer(j)->getVcdVatCmd()); } /* 802ED340-802ED3E8 .text indexToPtr__12J3DModelDataFv */ void J3DModelData::indexToPtr() { - /* Nonmatching */ + j3dSys.setTexture(getTexture()); + + GDLObj dlObj; + for (u16 i = 0; i < getMaterialNum(); i++) { + J3DDisplayListObj *pDLObj = getMaterialNodePointer(i)->getSharedDisplayListObj(); + GDInitGDLObj(&dlObj, pDLObj->getDisplayList(0), pDLObj->getDisplayListSize()); + GDSetCurrent(&dlObj); + getMaterialNodePointer(i)->getTevBlock()->indexToPtr(); + } + + GDSetCurrent(NULL); } /* 802ED3E8-802ED434 .text isDeformablePositionFormat__12J3DModelDataCFv */ -void J3DModelData::isDeformablePositionFormat() const { - /* Nonmatching */ +bool J3DModelData::isDeformablePositionFormat() const { + GXVtxAttrFmtList *vtxAttr = getVtxAttrFmtList(); + + for (; vtxAttr->mAttrib != GX_VA_NULL; vtxAttr++) { + switch (vtxAttr->mAttrib) { + case GX_VA_POS: + if (vtxAttr->mCompType == GX_F32 && vtxAttr->mCompCnt == GX_POS_XYZ) + return true; + break; + } + } + + return false; } /* 802ED434-802ED4F4 .text setMaterialTable__12J3DModelDataFP16J3DMaterialTable19J3DMaterialCopyFlag */ -void J3DModelData::setMaterialTable(J3DMaterialTable*, J3DMaterialCopyFlag) { - /* Nonmatching */ +void J3DModelData::setMaterialTable(J3DMaterialTable* pMaterialTable, J3DMaterialCopyFlag flag) { + if (flag & J3DMatCopyFlag_Material) { + for (u16 i = 0; i < pMaterialTable->getMaterialNum(); i++) { + JUTNameTab *pMaterialName = getMaterialName(); + const char *pName = pMaterialTable->getMaterialName()->getName(i); + s32 nameIndex = pMaterialName->getIndex(pName); + if (nameIndex != -1) + getMaterialNodePointer(nameIndex)->copy(pMaterialTable->getMaterialNodePointer(i)); + } + } + + if ((flag & J3DMatCopyFlag_Texture) && pMaterialTable->getTexture()->getNum() != 0) { + setTexture(pMaterialTable->getTexture()); + setTextureName(pMaterialTable->getTextureName()); + } } /* 802ED4F4-802ED500 .text getType__7J3DNodeCFv */ -void J3DNode::getType() const { - /* Nonmatching */ -} - -/* 802ED500-802ED564 .text __dt__12J3DJointTreeFv */ -J3DJointTree::~J3DJointTree() { - /* Nonmatching */ +u32 J3DNode::getType() const { + return 'NNON'; } diff --git a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp index ade45064f..73acec3dc 100644 --- a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp +++ b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp @@ -20,6 +20,11 @@ extern void J3DCalcBBoardMtx(Mtx); u32 J3DShapeMtx::sCurrentPipeline; +/* 802DD048-802DD054 .text getType__11J3DShapeMtxCFv */ +u32 J3DShapeMtx::getType() const { + return 'SMTX'; +} + /* 802DB9D8-802DBA1C .text loadMtxIndx_PNGP__11J3DShapeMtxCFiUs */ void J3DShapeMtx::loadMtxIndx_PNGP(int mtxNo, u16 index) const { J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, index, 0xB000 | ((u16)(mtxNo * 0x0C))); @@ -282,6 +287,16 @@ void J3DShapeMtxBBoardConcatView::load() const { } } +/* 802DCF88-802DCF94 .text getType__21J3DShapeMtxConcatViewCFv */ +u32 J3DShapeMtxConcatView::getType() const { + return 'SMCV'; +} + +/* 802DCF94-802DCF98 .text loadNrmMtx__21J3DShapeMtxConcatViewCFiUs */ +void J3DShapeMtxConcatView::loadNrmMtx(int mtxNo, u16 index) const { + /* Nonmatching */ +} + /* 802DC8C0-802DC9B8 .text load__21J3DShapeMtxYBBoardImmCFv */ void J3DShapeMtxYBBoardImm::load() const { /* Nonmatching */ @@ -292,26 +307,6 @@ void J3DShapeMtxYBBoardConcatView::load() const { /* Nonmatching */ } -/* 802DCAEC-802DCB04 .text __ct__12J3DShapeDrawFPCUcUl */ -J3DShapeDraw::J3DShapeDraw(const unsigned char*, unsigned long) { - /* Nonmatching */ -} - -/* 802DCB04-802DCB30 .text draw__12J3DShapeDrawCFv */ -void J3DShapeDraw::draw() const { - /* Nonmatching */ -} - -/* 802DCB30-802DCB78 .text __dt__12J3DShapeDrawFv */ -J3DShapeDraw::~J3DShapeDraw() { - /* Nonmatching */ -} - -/* 802DCB78-802DCBF4 .text __dt__28J3DShapeMtxYBBoardConcatViewFv */ -J3DShapeMtxYBBoardConcatView::~J3DShapeMtxYBBoardConcatView() { - /* Nonmatching */ -} - /* 802DCBF4-802DCC00 .text getType__21J3DShapeMtxYBBoardImmCFv */ u32 J3DShapeMtxYBBoardImm::getType() const { return 'SMYB'; @@ -322,31 +317,11 @@ u32 J3DShapeMtx::getUseMtxIndex(u16 i) const { return mUseMtxIndex; } -/* 802DCC08-802DCC74 .text __dt__21J3DShapeMtxYBBoardImmFv */ -J3DShapeMtxYBBoardImm::~J3DShapeMtxYBBoardImm() { - /* Nonmatching */ -} - -/* 802DCC74-802DCCF0 .text __dt__27J3DShapeMtxBBoardConcatViewFv */ -J3DShapeMtxBBoardConcatView::~J3DShapeMtxBBoardConcatView() { - /* Nonmatching */ -} - /* 802DCCF0-802DCCFC .text getType__20J3DShapeMtxBBoardImmCFv */ u32 J3DShapeMtxBBoardImm::getType() const { return 'SMBB'; } -/* 802DCCFC-802DCD68 .text __dt__20J3DShapeMtxBBoardImmFv */ -J3DShapeMtxBBoardImm::~J3DShapeMtxBBoardImm() { - /* Nonmatching */ -} - -/* 802DCD68-802DCDE4 .text __dt__26J3DShapeMtxMultiConcatViewFv */ -J3DShapeMtxMultiConcatView::~J3DShapeMtxMultiConcatView() { - /* Nonmatching */ -} - /* 802DCDE4-802DCDF0 .text getType__26J3DShapeMtxMultiConcatViewCFv */ u32 J3DShapeMtxMultiConcatView::getType() const { return 'SMMI'; @@ -367,11 +342,6 @@ void J3DShapeMtxMultiConcatView::loadNrmMtx(int mtxNo, u16 index) const { /* Nonmatching */ } -/* 802DCE0C-802DCE78 .text __dt__19J3DShapeMtxMultiImmFv */ -J3DShapeMtxMultiImm::~J3DShapeMtxMultiImm() { - /* Nonmatching */ -} - /* 802DCE78-802DCE84 .text getType__19J3DShapeMtxMultiImmCFv */ u32 J3DShapeMtxMultiImm::getType() const { return 'SMMI'; @@ -387,11 +357,6 @@ u32 J3DShapeMtxMultiImm::getUseMtxIndex(u16 i) const { return mUseMtxIndexTable[i]; } -/* 802DCE9C-802DCEF8 .text __dt__16J3DShapeMtxMultiFv */ -J3DShapeMtxMulti::~J3DShapeMtxMulti() { - /* Nonmatching */ -} - /* 802DCEF8-802DCF04 .text getType__16J3DShapeMtxMultiCFv */ u32 J3DShapeMtxMulti::getType() const { return 'SMML'; @@ -407,37 +372,18 @@ u32 J3DShapeMtxMulti::getUseMtxIndex(u16 i) const { return mUseMtxIndexTable[i]; } -/* 802DCF1C-802DCF88 .text __dt__21J3DShapeMtxConcatViewFv */ -J3DShapeMtxConcatView::~J3DShapeMtxConcatView() { - /* Nonmatching */ -} - -/* 802DCF88-802DCF94 .text getType__21J3DShapeMtxConcatViewCFv */ -u32 J3DShapeMtxConcatView::getType() const { - return 'SMCV'; -} - -/* 802DCF94-802DCF98 .text loadNrmMtx__21J3DShapeMtxConcatViewCFiUs */ -void J3DShapeMtxConcatView::loadNrmMtx(int mtxNo, u16 index) const { - /* Nonmatching */ -} - -/* 802DCF98-802DCFF4 .text __dt__14J3DShapeMtxImmFv */ -J3DShapeMtxImm::~J3DShapeMtxImm() { - /* Nonmatching */ -} - /* 802DCFF4-802DD000 .text getType__14J3DShapeMtxImmCFv */ u32 J3DShapeMtxImm::getType() const { return 'SMIM'; } -/* 802DD000-802DD048 .text __dt__11J3DShapeMtxFv */ -J3DShapeMtx::~J3DShapeMtx() { - /* Nonmatching */ +/* 802DCAEC-802DCB04 .text __ct__12J3DShapeDrawFPCUcUl */ +J3DShapeDraw::J3DShapeDraw(const u8* pDL, u32 size) { + mDisplayList = (void*) pDL; + mDisplayListSize = size; } -/* 802DD048-802DD054 .text getType__11J3DShapeMtxCFv */ -u32 J3DShapeMtx::getType() const { - return 'SMTX'; +/* 802DCB04-802DCB30 .text draw__12J3DShapeDrawCFv */ +void J3DShapeDraw::draw() const { + GXCallDisplayList(mDisplayList, mDisplayListSize); } From 7345a747d0f5ab53118b6bc5d5b5172ef2d88dea Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 21 Sep 2023 13:59:07 -0700 Subject: [PATCH 69/89] JKRStdHeap --- include/JSystem/JKernel/JKRStdHeap.h | 34 +++++++ include/dolphin/os/OSAlloc.h | 7 +- src/JSystem/JKernel/JKRStdHeap.cpp | 142 ++++++++++++++++++--------- 3 files changed, 135 insertions(+), 48 deletions(-) create mode 100644 include/JSystem/JKernel/JKRStdHeap.h diff --git a/include/JSystem/JKernel/JKRStdHeap.h b/include/JSystem/JKernel/JKRStdHeap.h new file mode 100644 index 000000000..c52c875bb --- /dev/null +++ b/include/JSystem/JKernel/JKRStdHeap.h @@ -0,0 +1,34 @@ +#ifndef JKRSTDHEAP_H +#define JKRSTDHEAP_H + +#include "JSystem/JKernel/JKRHeap.h" +#include "dolphin/os/OSAlloc.h" + +class JKRStdHeap : public JKRHeap { + static JKRStdHeap* create(u32, JKRHeap*, bool); + void do_destroy(); + JKRStdHeap(void*, u32, JKRHeap*, bool); + ~JKRStdHeap(); + void* do_alloc(u32, int); + void do_free(void*); + void do_freeAll(); + void do_freeTail(); + s32 do_resize(void*, u32); + s32 do_getFreeSize(); + void* do_getMaxFreeBlock(); + void state_register(JKRHeap::TState*, u32) const; + bool state_compare(const JKRHeap::TState&, const JKRHeap::TState&) const; + void do_freeFill(); + u32 getHeapType() { return 'STDH'; } + bool check() { return OSCheckHeap(mHeapHandle) != -1; } + bool dump() { + OSDumpHeap(mHeapHandle); + return OSCheckHeap(mHeapHandle) != -1; + } + s32 do_getSize(void* ptr) { return OSReferentSize(ptr); }; + s32 do_getTotalFreeSize() { return getFreeSize(); }; + + OSHeapHandle mHeapHandle; +}; + +#endif /* JKRSTDHEAP_H */ \ No newline at end of file diff --git a/include/dolphin/os/OSAlloc.h b/include/dolphin/os/OSAlloc.h index ffb5e0c9c..31a69d317 100644 --- a/include/dolphin/os/OSAlloc.h +++ b/include/dolphin/os/OSAlloc.h @@ -22,7 +22,7 @@ typedef struct OSHeapCell { /* 0x14 */ char field_0x14[0x20 - 0x14]; } OSHeapCell; -typedef u32 OSHeapHandle; +typedef s32 OSHeapHandle; extern volatile s32 __OSCurrHeap; @@ -36,10 +36,15 @@ extern volatile s32 __OSCurrHeap; #define OSRoundDownPtr(x, align) ((void*)(((u32)(x)) & (~((align)-1)))) static OSHeapCell* DLInsert(OSHeapCell* list, OSHeapCell* child); +void* OSAllocFromHeap(OSHeapHandle handle, u32 size); void OSFreeToHeap(OSHeapHandle handle, void* ptr); s32 OSSetCurrentHeap(OSHeapHandle handle); void* OSInitAlloc(void* lo, void* hi, s32 maxHeaps); OSHeapHandle OSCreateHeap(void* start, void* end); +void OSDestroyHeap(OSHeapHandle handle); +s32 OSCheckHeap(OSHeapHandle handle); +s32 OSReferentSize(void* ptr); +void OSDumpHeap(OSHeapHandle handle); #ifdef __cplusplus }; diff --git a/src/JSystem/JKernel/JKRStdHeap.cpp b/src/JSystem/JKernel/JKRStdHeap.cpp index c3f1f3735..015167447 100644 --- a/src/JSystem/JKernel/JKRStdHeap.cpp +++ b/src/JSystem/JKernel/JKRStdHeap.cpp @@ -4,99 +4,147 @@ // #include "JSystem/JKernel/JKRStdHeap.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "global.h" /* 802B0F34-802B0FE0 .text create__10JKRStdHeapFUlP7JKRHeapb */ -void JKRStdHeap::create(unsigned long, JKRHeap*, bool) { +JKRStdHeap* JKRStdHeap::create(u32 size, JKRHeap* parent, bool errorFlag) { /* Nonmatching */ + if (!parent) { + parent = sRootHeap; + } + if (size == -1) { + size = parent->getMaxAllocatableSize(0x20); + } + + u32 alignedSize = ALIGN_PREV(size, 0x20); + if (alignedSize < 0xC0) { + return NULL; + } + u8* memory = (u8*)JKRAllocFromHeap(parent, alignedSize, 0x20); + u32 stdHeapSize = ALIGN_NEXT(sizeof(JKRStdHeap), 0x20); + if (!memory) { + return NULL; + } + u8* dataPtr = (memory + stdHeapSize); + JKRStdHeap* newHeap = new(memory) JKRStdHeap(dataPtr, alignedSize - stdHeapSize, parent, errorFlag); + return newHeap; } /* 802B0FE0-802B1040 .text do_destroy__10JKRStdHeapFv */ void JKRStdHeap::do_destroy() { - /* Nonmatching */ + JKRHeap* heap = mChildTree.getParent()->getObject(); + if (heap) { + this->~JKRStdHeap(); + free(this, heap); + } } /* 802B1040-802B108C .text __ct__10JKRStdHeapFPvUlP7JKRHeapb */ -JKRStdHeap::JKRStdHeap(void*, unsigned long, JKRHeap*, bool) { - /* Nonmatching */ +JKRStdHeap::JKRStdHeap(void* data, u32 size, JKRHeap* parent, bool errorFlag) : JKRHeap(data, size, parent, errorFlag) { + mHeapHandle = OSCreateHeap(mStart, mEnd); } /* 802B108C-802B1104 .text __dt__10JKRStdHeapFv */ JKRStdHeap::~JKRStdHeap() { - /* Nonmatching */ + dispose(); + if (mHeapHandle != -1) { + OSDestroyHeap(mHeapHandle); + } +} + +static void dummy() { + OSReport("JKRStdHeap.cpp"); + OSReport("allocFixed from %x to %x in heap %x"); + OSReport("allocFixed: cannot alloc memory (from %x to %x).\n"); } /* 802B1104-802B11A4 .text do_alloc__10JKRStdHeapFUli */ -void JKRStdHeap::do_alloc(unsigned long, int) { +void* JKRStdHeap::do_alloc(u32 size, int alignment) { + if (mHeapHandle == -1) { + return NULL; + } + void* ptr = OSAllocFromHeap(mHeapHandle, size); + if (!ptr) { + JUTWarningConsole_f("alloc: cannot alloc memory (0x%x byte).\n", size); + if (mErrorFlag == true && mErrorHandler) { + mErrorHandler(this, size, alignment); + } + } + return ptr; /* Nonmatching */ } /* 802B11A4-802B1228 .text do_free__10JKRStdHeapFPv */ -void JKRStdHeap::do_free(void*) { +void JKRStdHeap::do_free(void* ptr) { + if (mHeapHandle != -1) { + if (mStart <= ptr && ptr <= mEnd) { + OSFreeToHeap(mHeapHandle, ptr); + } else { + JUT_WARN(279, "free: memblock %x not in heap %x", ptr, this); + } + } /* Nonmatching */ } /* 802B1228-802B1278 .text do_freeAll__10JKRStdHeapFv */ void JKRStdHeap::do_freeAll() { /* Nonmatching */ + if (mHeapHandle == -1) { + return; + } + JKRHeap::callAllDisposer(); + OSDestroyHeap(mHeapHandle); + mHeapHandle = OSCreateHeap(mStart, mEnd); } /* 802B1278-802B12A4 .text do_freeTail__10JKRStdHeapFv */ void JKRStdHeap::do_freeTail() { - /* Nonmatching */ + JUTWarningConsole("freeTail: freeTail() is not work\n"); } /* 802B12A4-802B12D8 .text do_resize__10JKRStdHeapFPvUl */ -void JKRStdHeap::do_resize(void*, unsigned long) { - /* Nonmatching */ +s32 JKRStdHeap::do_resize(void*, u32) { + JUTWarningConsole_f("resize: cannot resize memory block (%08x: %d)\n"); + return -1; } /* 802B12D8-802B1308 .text do_getFreeSize__10JKRStdHeapFv */ -void JKRStdHeap::do_getFreeSize() { - /* Nonmatching */ +s32 JKRStdHeap::do_getFreeSize() { + JUTWarningConsole("getFreeSize: cannot get free size\n"); + return -1; } /* 802B1308-802B1338 .text do_getMaxFreeBlock__10JKRStdHeapFv */ -void JKRStdHeap::do_getMaxFreeBlock() { - /* Nonmatching */ +void* JKRStdHeap::do_getMaxFreeBlock() { + JUTWarningConsole("getFreeSize: cannot get free block"); + return NULL; } /* 802B1338-802B13F0 .text state_register__10JKRStdHeapCFPQ27JKRHeap6TStateUl */ -void JKRStdHeap::state_register(JKRHeap::TState*, unsigned long) const { - /* Nonmatching */ +void JKRStdHeap::state_register(JKRHeap::TState* p, u32 id) const { + JUT_ASSERT(370, p != 0); + JUT_ASSERT(371, p->getHeap() == this); + setState_u32ID_(p, id); + setState_uUsedSize_(p, 0); + setState_u32CheckCode_(p, 0); } /* 802B13F0-802B1490 .text state_compare__10JKRStdHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState */ -void JKRStdHeap::state_compare(const JKRHeap::TState&, const JKRHeap::TState&) const { - /* Nonmatching */ +bool JKRStdHeap::state_compare(const JKRHeap::TState& r1, const JKRHeap::TState& r2) const { + JUT_ASSERT(394, r1.getHeap() == r2.getHeap()); + bool result = true; + if (r1.mCheckCode != r2.mCheckCode) { + result = false; + } + + if (r1.mUsedSize != r2.mUsedSize) { + result = false; + } + + return result; } /* 802B1490-802B1494 .text do_freeFill__10JKRStdHeapFv */ -void JKRStdHeap::do_freeFill() { - /* Nonmatching */ -} - -/* 802B1494-802B14A0 .text getHeapType__10JKRStdHeapFv */ -void JKRStdHeap::getHeapType() { - /* Nonmatching */ -} - -/* 802B14A0-802B14D0 .text check__10JKRStdHeapFv */ -void JKRStdHeap::check() { - /* Nonmatching */ -} - -/* 802B14D0-802B1514 .text dump__10JKRStdHeapFv */ -void JKRStdHeap::dump() { - /* Nonmatching */ -} - -/* 802B1514-802B1538 .text do_getSize__10JKRStdHeapFPv */ -void JKRStdHeap::do_getSize(void*) { - /* Nonmatching */ -} - -/* 802B1538-802B1558 .text do_getTotalFreeSize__10JKRStdHeapFv */ -void JKRStdHeap::do_getTotalFreeSize() { - /* Nonmatching */ -} +void JKRStdHeap::do_freeFill() {} From 2de84990541822818281a22c3a78b97d8e1c35cf Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Thu, 21 Sep 2023 14:21:05 -0700 Subject: [PATCH 70/89] JKRSolidHeap --- configure.py | 2 +- include/JSystem/JKernel/JKRSolidHeap.h | 12 +- src/JSystem/JKernel/JKRSolidHeap.cpp | 257 ++++++++++++++++++++----- 3 files changed, 213 insertions(+), 58 deletions(-) diff --git a/configure.py b/configure.py index a5da38af6..6f180e680 100644 --- a/configure.py +++ b/configure.py @@ -758,7 +758,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRStdHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRExpHeap.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRSolidHeap.cpp"), + Object(Matching, "JSystem/JKernel/JKRSolidHeap.cpp"), Object(Matching, "JSystem/JKernel/JKRDisposer.cpp"), Object(Matching, "JSystem/JKernel/JKRThread.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAram.cpp"), diff --git a/include/JSystem/JKernel/JKRSolidHeap.h b/include/JSystem/JKernel/JKRSolidHeap.h index 83a6e918a..79beebb2a 100644 --- a/include/JSystem/JKernel/JKRSolidHeap.h +++ b/include/JSystem/JKernel/JKRSolidHeap.h @@ -23,8 +23,8 @@ protected: static s32 getUsedSize(JKRSolidHeap* heap) { return heap->mSize - heap->getTotalFreeSize(); } public: - /* vt[04] */ virtual u32 getHeapType(void); /* override */ - /* vt[05] */ virtual bool check(void); /* override */ + /* vt[04] */ virtual u32 getHeapType(void) { return 'SLID'; } /* override */ + /* vt[05] */ virtual bool check(void); /* override */ /* vt[07] */ virtual bool dump(void); /* override */ /* vt[08] */ virtual void do_destroy(void); /* override */ @@ -35,11 +35,11 @@ public: /* vt[13] */ virtual void do_freeFill(void); /* override */ /* vt[14] */ virtual s32 do_resize(void*, u32); /* override */ /* vt[15] */ virtual s32 do_getSize(void*); /* override */ - /* vt[16] */ virtual s32 do_getFreeSize(void); /* override */ - /* vt[17] */ virtual void* do_getMaxFreeBlock(void); /* override */ - /* vt[18] */ virtual s32 do_getTotalFreeSize(void); /* override */ + /* vt[16] */ virtual s32 do_getFreeSize(void) { return mFreeSize;} /* override */ + /* vt[17] */ virtual void* do_getMaxFreeBlock(void) { return mSolidHead; } /* override */ + /* vt[18] */ virtual s32 do_getTotalFreeSize(void) { return getFreeSize(); } /* override */ - /* vt[21] */ virtual u32 state_register(JKRHeap::TState*, u32) const; /* override */ + /* vt[21] */ virtual void state_register(JKRHeap::TState*, u32) const; /* override */ /* vt[22] */ virtual bool state_compare(JKRHeap::TState const&, JKRHeap::TState const&) const; /* override */ diff --git a/src/JSystem/JKernel/JKRSolidHeap.cpp b/src/JSystem/JKernel/JKRSolidHeap.cpp index 4027b9bbd..428043dbe 100644 --- a/src/JSystem/JKernel/JKRSolidHeap.cpp +++ b/src/JSystem/JKernel/JKRSolidHeap.cpp @@ -4,114 +4,269 @@ // #include "JSystem/JKernel/JKRSolidHeap.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "global.h" /* 802B3290-802B333C .text create__12JKRSolidHeapFUlP7JKRHeapb */ -void JKRSolidHeap::create(unsigned long, JKRHeap*, bool) { - /* Nonmatching */ +JKRSolidHeap* JKRSolidHeap::create(u32 size, JKRHeap* heap, bool useErrorHandler) { + if (!heap) { + heap = getRootHeap(); + } + + if (size == 0xffffffff) { + size = heap->getMaxAllocatableSize(0x10); + } + + u32 alignedSize = ALIGN_PREV(size, 0x10); + u32 solidHeapSize = ALIGN_NEXT(sizeof(JKRSolidHeap), 0x10); + if (alignedSize < solidHeapSize) + return NULL; + + JKRSolidHeap* solidHeap = (JKRSolidHeap*)JKRAllocFromHeap(heap, alignedSize, 0x10); + void* dataPtr = (u8*)solidHeap + solidHeapSize; + if (!solidHeap) + return NULL; + + solidHeap = + new (solidHeap) JKRSolidHeap(dataPtr, alignedSize - solidHeapSize, heap, useErrorHandler); + return solidHeap; } /* 802B333C-802B339C .text do_destroy__12JKRSolidHeapFv */ void JKRSolidHeap::do_destroy() { - /* Nonmatching */ + JKRHeap* parent = getParent(); + if (parent) { + this->~JKRSolidHeap(); + JKRFreeToHeap(parent, this); + } } /* 802B339C-802B33F8 .text __ct__12JKRSolidHeapFPvUlP7JKRHeapb */ -JKRSolidHeap::JKRSolidHeap(void*, unsigned long, JKRHeap*, bool) { - /* Nonmatching */ +JKRSolidHeap::JKRSolidHeap(void* start, u32 size, JKRHeap* parent, bool useErrorHandler) : JKRHeap(start, size, parent, useErrorHandler) { + mFreeSize = mSize; + mSolidHead = (u8*)mStart; + mSolidTail = (u8*)mEnd; + field_0x78 = NULL; } /* 802B33F8-802B3460 .text __dt__12JKRSolidHeapFv */ JKRSolidHeap::~JKRSolidHeap() { - /* Nonmatching */ + dispose(); } /* 802B3460-802B351C .text adjustSize__12JKRSolidHeapFv */ -void JKRSolidHeap::adjustSize() { - /* Nonmatching */ +s32 JKRSolidHeap::adjustSize() { + JKRHeap* parent = getParent(); + if (parent) { + lock(); + u32 thisSize = (u32)mStart - (u32)this; + u32 newSize = ALIGN_NEXT(mSolidHead - mStart, 0x20); + if (parent->resize(this, thisSize + newSize) != -1) { + mFreeSize = 0; + mSize = newSize; + mEnd = mStart + mSize; + mSolidHead = mEnd; + mSolidTail = mEnd; + } + + unlock(); + + return thisSize + newSize; + } + + return -1; } /* 802B351C-802B35C4 .text do_alloc__12JKRSolidHeapFUli */ -void JKRSolidHeap::do_alloc(unsigned long, int) { - /* Nonmatching */ +void* JKRSolidHeap::do_alloc(u32 size, int alignment) { + lock(); + + if (size < 4) { + size = 4; + } + + void* ptr; + if (alignment >= 0) { + ptr = allocFromHead(size, alignment < 4 ? 4 : alignment); + } else { + if (-alignment < 4) { + alignment = 4; + } else { + alignment = -alignment; + } + + ptr = allocFromTail(size, alignment); + } + + unlock(); + return ptr; } /* 802B35C4-802B368C .text allocFromHead__12JKRSolidHeapFUli */ -void JKRSolidHeap::allocFromHead(unsigned long, int) { - /* Nonmatching */ +void* JKRSolidHeap::allocFromHead(u32 size, int alignment) { + size = ALIGN_NEXT(size, 0x4); + void* ptr = NULL; + u32 alignedStart = (alignment - 1 + (u32)mSolidHead) & ~(alignment - 1); + u32 offset = alignedStart - (u32)mSolidHead; + u32 totalSize = size + offset; + if (totalSize <= mFreeSize) { + ptr = (void*)alignedStart; + mSolidHead += totalSize; + mFreeSize -= totalSize; + } else { + JUTWarningConsole_f("allocFromHead: cannot alloc memory (0x%x byte).\n", totalSize); + if (getErrorFlag() == true) { + callErrorHandler(this, size, alignment); + } + } + + return ptr; } /* 802B368C-802B3750 .text allocFromTail__12JKRSolidHeapFUli */ -void JKRSolidHeap::allocFromTail(unsigned long, int) { - /* Nonmatching */ +void* JKRSolidHeap::allocFromTail(u32 size, int alignment) { + size = ALIGN_NEXT(size, 4); + void* ptr = NULL; + u32 alignedStart = ALIGN_PREV((u32)mSolidTail - size, alignment); + u32 totalSize = (u32)mSolidTail - (u32)alignedStart; + if (totalSize <= mFreeSize) { + ptr = (void*)alignedStart; + mSolidTail -= totalSize; + mFreeSize -= totalSize; + } else { + JUTWarningConsole_f("allocFromTail: cannot alloc memory (0x%x byte).\n", totalSize); + if (getErrorFlag() == true) { + callErrorHandler(this, size, alignment); + } + } + return ptr; } /* 802B3750-802B3780 .text do_free__12JKRSolidHeapFPv */ -void JKRSolidHeap::do_free(void*) { - /* Nonmatching */ +void JKRSolidHeap::do_free(void* ptr) { + JUTWarningConsole_f("free: cannot free memory block (%08x)\n", ptr); } /* 802B3780-802B37E0 .text do_freeAll__12JKRSolidHeapFv */ void JKRSolidHeap::do_freeAll() { - /* Nonmatching */ + lock(); + + this->JKRHeap::callAllDisposer(); + mFreeSize = mSize; + mSolidHead = (u8*)mStart; + mSolidTail = (u8*)mEnd; + field_0x78 = NULL; + + unlock(); } /* 802B37E0-802B386C .text do_freeTail__12JKRSolidHeapFv */ void JKRSolidHeap::do_freeTail() { - /* Nonmatching */ + lock(); + + if (mSolidTail != mEnd) { + dispose(mSolidTail, mEnd); + } + + this->mFreeSize = ((u32)mEnd - (u32)mSolidTail + mFreeSize); + this->mSolidTail = mEnd; + + JKRSolidHeap::Unknown* unknown = field_0x78; + while (unknown) { + unknown->field_0xc = mEnd; + unknown = unknown->mNext; + } + + unlock(); } /* 802B386C-802B38A0 .text do_resize__12JKRSolidHeapFPvUl */ -void JKRSolidHeap::do_resize(void*, unsigned long) { - /* Nonmatching */ +s32 JKRSolidHeap::do_resize(void* ptr, u32 newSize) { + JUTWarningConsole_f("resize: cannot resize memory block (%08x: %d)\n", ptr, newSize); + return -1; } /* 802B38A0-802B38D4 .text do_getSize__12JKRSolidHeapFPv */ -void JKRSolidHeap::do_getSize(void*) { - /* Nonmatching */ +s32 JKRSolidHeap::do_getSize(void* ptr) { + JUTWarningConsole_f("getSize: cannot get memory block size (%08x)\n", ptr); + return -1; } /* 802B38D4-802B3964 .text check__12JKRSolidHeapFv */ -void JKRSolidHeap::check() { - /* Nonmatching */ +bool JKRSolidHeap::check() { + lock(); + + bool result = true; + u32 calculatedSize = + ((u32)mSolidHead - (u32)mStart) + mFreeSize + ((u32)mEnd - (u32)mSolidTail); + u32 availableSize = mSize; + if (calculatedSize != availableSize) { + result = false; + JUTWarningConsole_f("check: bad total memory block size (%08X, %08X)\n", availableSize, + calculatedSize); + } + + unlock(); + return result; } /* 802B3964-802B3968 .text do_freeFill__12JKRSolidHeapFv */ -void JKRSolidHeap::do_freeFill() { - /* Nonmatching */ -} +void JKRSolidHeap::do_freeFill() {} /* 802B3968-802B3A68 .text dump__12JKRSolidHeapFv */ -void JKRSolidHeap::dump() { - /* Nonmatching */ +bool JKRSolidHeap::dump() { + bool result = check(); + + lock(); + u32 headSize = ((u32)mSolidHead - (u32)mStart); + u32 tailSize = ((u32)mEnd - (u32)mSolidTail); + s32 htSize = headSize + tailSize; + JUTReportConsole_f("head %08x: %08x\n", mStart, headSize); + JUTReportConsole_f("tail %08x: %08x\n", mSolidTail, ((u32)mEnd - (u32)mSolidTail)); + + u32 totalSize = mSize; + float percentage = (float)htSize / (float)totalSize * 100.0f; + JUTReportConsole_f("%d / %d bytes (%6.2f%%) used\n", htSize, totalSize, percentage); + unlock(); + + return result; } /* 802B3A68-802B3B4C .text state_register__12JKRSolidHeapCFPQ27JKRHeap6TStateUl */ -void JKRSolidHeap::state_register(JKRHeap::TState*, unsigned long) const { - /* Nonmatching */ +void JKRSolidHeap::state_register(JKRHeap::TState* p, u32 id) const { +#if VERSION == VERSION_JPN + JUT_ASSERT(610, p != 0); + JUT_ASSERT(611, p->getHeap() == this); +#else + JUT_ASSERT(607, p != 0); + JUT_ASSERT(608, p->getHeap() == this); +#endif + + getState_(p); + setState_u32ID_(p, id); + setState_uUsedSize_(p, getUsedSize((JKRSolidHeap*)this)); + u32 r29 = (u32)mSolidHead; + r29 += (u32)mSolidTail * 3; + setState_u32CheckCode_(p, r29); } /* 802B3B4C-802B3BF4 .text state_compare__12JKRSolidHeapCFRCQ27JKRHeap6TStateRCQ27JKRHeap6TState */ -void JKRSolidHeap::state_compare(const JKRHeap::TState&, const JKRHeap::TState&) const { - /* Nonmatching */ -} +bool JKRSolidHeap::state_compare(const JKRHeap::TState& r1, const JKRHeap::TState& r2) const { +#if VERSION == VERSION_JPN + JUT_ASSERT(638, r1.getHeap() == r2.getHeap()); +#else + JUT_ASSERT(635, r1.getHeap() == r2.getHeap()); +#endif -/* 802B3BF4-802B3C00 .text getHeapType__12JKRSolidHeapFv */ -void JKRSolidHeap::getHeapType() { - /* Nonmatching */ -} + bool result = true; + if (r1.getCheckCode() != r2.getCheckCode()) { + result = false; + } -/* 802B3C00-802B3C08 .text do_getFreeSize__12JKRSolidHeapFv */ -void JKRSolidHeap::do_getFreeSize() { - /* Nonmatching */ -} + if (r1.getUsedSize() != r2.getUsedSize()) { + result = false; + } -/* 802B3C08-802B3C10 .text do_getMaxFreeBlock__12JKRSolidHeapFv */ -void JKRSolidHeap::do_getMaxFreeBlock() { - /* Nonmatching */ -} - -/* 802B3C10-802B3C30 .text do_getTotalFreeSize__12JKRSolidHeapFv */ -void JKRSolidHeap::do_getTotalFreeSize() { - /* Nonmatching */ + return result; } From b70bc6dd30a040c648321ac1aad2a7c2a0d9b001 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 15:55:06 -0700 Subject: [PATCH 71/89] JKRAram --- configure.py | 2 +- include/JSystem/JKernel/JKRAram.h | 4 +- include/JSystem/JKernel/JKRArchive.h | 4 - include/JSystem/JKernel/JKRDecomp.h | 11 +- include/dolphin/ar/ar.h | 23 ++ include/dolphin/ar/arq.h | 43 ++ src/JSystem/JKernel/JKRAram.cpp | 534 +++++++++++++++++++++++-- src/JSystem/JKernel/JKRAramArchive.cpp | 1 + src/JSystem/JKernel/JKRDvdArchive.cpp | 1 + 9 files changed, 582 insertions(+), 41 deletions(-) create mode 100644 include/dolphin/ar/ar.h create mode 100644 include/dolphin/ar/arq.h diff --git a/configure.py b/configure.py index 6f180e680..30f1ab3bf 100644 --- a/configure.py +++ b/configure.py @@ -761,7 +761,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRSolidHeap.cpp"), Object(Matching, "JSystem/JKernel/JKRDisposer.cpp"), Object(Matching, "JSystem/JKernel/JKRThread.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRAram.cpp"), + Object(Matching, "JSystem/JKernel/JKRAram.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramBlock.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"), diff --git a/include/JSystem/JKernel/JKRAram.h b/include/JSystem/JKernel/JKRAram.h index 07f6bb231..e66c696a6 100644 --- a/include/JSystem/JKernel/JKRAram.h +++ b/include/JSystem/JKernel/JKRAram.h @@ -34,10 +34,12 @@ public: public: static JKRAram* create(u32, u32, long, long, long); - static void checkOkAddress(u8*, u32, JKRAramBlock*, u32); + static bool checkOkAddress(u8*, u32, JKRAramBlock*, u32); static void changeGroupIdIfNeed(u8*, int); static JKRAramBlock* mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int); + static JKRAramBlock* mainRamToAram(u8*, JKRAramBlock*, u32, JKRExpandSwitch, u32, JKRHeap*, int); static u8* aramToMainRam(u32, u8*, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*); + static u8* aramToMainRam(JKRAramBlock*, u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int, u32*); static void dump(void); static JKRAram* getManager() { return sAramObject; } diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index 8ef03c411..ca184c2e7 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -41,10 +41,6 @@ inline u16 read_big_endian_u16(void* ptr) { return ((u16)uptr[0] << 8) | ((u16)uptr[1]); } -inline u32 JKRDecompExpandSize(u8* pBuf) { - return (pBuf[4] << 0x18) | (pBuf[5] << 0x10) | (pBuf[6] << 8) | pBuf[7]; -} - extern u32 sCurrentDirID__10JKRArchive; // JKRArchive::sCurrentDirID class JKRArchive : public JKRFileLoader { diff --git a/include/JSystem/JKernel/JKRDecomp.h b/include/JSystem/JKernel/JKRDecomp.h index 539695d2a..e7ef48c68 100644 --- a/include/JSystem/JKernel/JKRDecomp.h +++ b/include/JSystem/JKernel/JKRDecomp.h @@ -62,11 +62,12 @@ inline JKRDecomp* JKRCreateDecompManager(long priority) { return JKRDecomp::create(priority); } -inline JKRCompression JKRCheckCompressed_noASR(u8 *pBuf) { - JKRCompression compression = JKRDecomp::checkCompressed(pBuf); - if (compression == COMPRESSION_ASR) // ternary i had before was either incorrect, or was not a ternary at all - compression = COMPRESSION_NONE; - return compression; +inline JKRCompression JKRCheckCompressed(u8 *pBuf) { + return JKRDecomp::checkCompressed(pBuf); +} + +inline u32 JKRDecompExpandSize(u8* pBuf) { + return (pBuf[4] << 0x18) | (pBuf[5] << 0x10) | (pBuf[6] << 8) | pBuf[7]; } #endif /* JKRDECOMP_H */ diff --git a/include/dolphin/ar/ar.h b/include/dolphin/ar/ar.h new file mode 100644 index 000000000..c04e41f1d --- /dev/null +++ b/include/dolphin/ar/ar.h @@ -0,0 +1,23 @@ +#ifndef AR_H +#define AR_H + +#include "dolphin/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*ARCallback)(void); + +ARCallback ARRegisterDMACallback(ARCallback callback); +u32 ARGetDMAStatus(void); +void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length); +u32 ARInit(u32* stack_index_addr, u32 num_entries); +u32 ARAlloc(u32 length); +u32 ARGetSize(void); + +#ifdef __cplusplus +}; +#endif + +#endif /* AR_H */ diff --git a/include/dolphin/ar/arq.h b/include/dolphin/ar/arq.h new file mode 100644 index 000000000..083c118a4 --- /dev/null +++ b/include/dolphin/ar/arq.h @@ -0,0 +1,43 @@ +#ifndef ARQ_H +#define ARQ_H + +#include "dolphin/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ARQ_CHUNK_SIZE_DEFAULT 4096 + +typedef void (*ARQCallback)(u32 request_address); + +typedef enum _ARamType { + ARAM_DIR_MRAM_TO_ARAM, + ARAM_DIR_ARAM_TO_MRAM, +} ARamType; + +typedef enum _ArqPriotity { + ARQ_PRIORITY_LOW, + ARQ_PRIORITY_HIGH, +} ArqPriotity; + +typedef struct ARQRequest { + struct ARQRequest* next; + u32 owner; + u32 type; + u32 priority; + u32 source; + u32 destination; + u32 length; + ARQCallback callback; +} ARQRequest; + +void ARQInit(void); +void ARQPostRequest(ARQRequest* task, u32 owner, u32 type, u32 priority, u32 source, + u32 destination, u32 length, ARQCallback callback); + +#ifdef __cplusplus +}; +#endif + +#endif /* ARQ_H */ diff --git a/src/JSystem/JKernel/JKRAram.cpp b/src/JSystem/JKernel/JKRAram.cpp index aac4abb77..e20e34068 100644 --- a/src/JSystem/JKernel/JKRAram.cpp +++ b/src/JSystem/JKernel/JKRAram.cpp @@ -4,79 +4,553 @@ // #include "JSystem/JKernel/JKRAram.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAramPiece.h" +#include "JSystem/JKernel/JKRAramStream.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/JUtility/JUTException.h" +#include "MSL_C/string.h" +#include "dolphin/ar/ar.h" +#include "dolphin/ar/arq.h" +#include "dolphin/os/OS.h" +#include "global.h" + +static int JKRDecompressFromAramToMainRam(u32, void*, u32, u32, u32); +static int decompSZS_subroutine(u8*, u8*); +static u8* firstSrcData(); +static u8* nextSrcData(u8*); + +JKRAram* JKRAram::sAramObject; /* 802B42C4-802B4360 .text create__7JKRAramFUlUllll */ -void JKRAram::create(unsigned long, unsigned long, long, long, long) { - /* Nonmatching */ +JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size, long stream_priority, long decomp_priority, long piece_priority) { + if (!sAramObject) { + sAramObject = new (JKRHeap::getSystemHeap(), 0) + JKRAram(aram_audio_buffer_size, aram_audio_graph_size, piece_priority); + } + + JKRCreateAramStreamManager(stream_priority); + JKRCreateDecompManager(decomp_priority); + sAramObject->resume(); + return sAramObject; } +OSMessage JKRAram::sMessageBuffer[4] = { NULL, NULL, NULL, NULL }; +OSMessageQueue JKRAram::sMessageQueue = {0}; + /* 802B4360-802B44D8 .text __ct__7JKRAramFUlUll */ -JKRAram::JKRAram(unsigned long, unsigned long, long) { - /* Nonmatching */ +JKRAram::JKRAram(u32 audio_buffer_size, u32 audio_graph_size, long priority) : JKRThread(0x4000, 0x10, priority) { + u32 aramBase = ARInit(mStackArray, ARRAY_SIZE(mStackArray)); + ARQInit(); + + u32 aramSize = ARGetSize(); + OSReport("ARAM size = %08x\n", aramSize); + + mAudioMemorySize = audio_buffer_size; + if (audio_graph_size == 0xFFFFFFFF) { + mGraphMemorySize = (aramSize - audio_buffer_size) - aramBase; + mAramMemorySize = 0; + } else { + mGraphMemorySize = audio_graph_size; + mAramMemorySize = (aramSize - (audio_buffer_size + audio_graph_size)) - aramBase; + } + + mAudioMemoryPtr = ARAlloc(mAudioMemorySize); + mGraphMemoryPtr = ARAlloc(mGraphMemorySize); + + if (mAramMemorySize) { + mAramMemoryPtr = ARAlloc(mAramMemorySize); + } else { + mAramMemoryPtr = NULL; + } + OSReport("ARAM audio area %08x: %08x\n", mAudioMemoryPtr, mAudioMemorySize); + OSReport("ARAM graph area %08x: %08x\n", mGraphMemoryPtr, mGraphMemorySize); + OSReport("ARAM user area %08x: %08x\n", mAramMemoryPtr, mAramMemorySize); + + mAramHeap = new (JKRHeap::getSystemHeap(), 0) JKRAramHeap(mGraphMemoryPtr, mGraphMemorySize); } /* 802B44D8-802B4568 .text __dt__7JKRAramFv */ JKRAram::~JKRAram() { - /* Nonmatching */ + sAramObject = NULL; + if (mAramHeap) { + delete mAramHeap; + } } /* 802B4568-802B45D4 .text run__7JKRAramFv */ -void JKRAram::run() { - /* Nonmatching */ +void* JKRAram::run() { + int result; + JKRAMCommand* command; + JKRAramPiece::Message* message; + OSInitMessageQueue(&sMessageQueue, sMessageBuffer, 4); + do { + OSReceiveMessage(&sMessageQueue, (OSMessage*)&message, OS_MESSAGE_BLOCK); + result = message->field_0x00; + command = message->command; + delete message; + + switch (result) { + case 1: + JKRAramPiece::startDMA(command); + break; + } + } while (true); } /* 802B45D4-802B4664 .text checkOkAddress__7JKRAramFPUcUlP12JKRAramBlockUl */ -void JKRAram::checkOkAddress(unsigned char*, unsigned long, JKRAramBlock*, unsigned long) { - /* Nonmatching */ +bool JKRAram::checkOkAddress(u8* addr, u32 size, JKRAramBlock* block, u32 param_4) { + if (!IS_ALIGNED((u32)addr, 0x20) && !IS_ALIGNED(size, 0x20)) { + OSPanic(__FILE__, 226, ":::address not 32Byte aligned."); + return false; + } + + if (block && !IS_ALIGNED((u32)block->getAddress() + param_4, 0x20)) { + OSPanic(__FILE__, 235, ":::address not 32Byte aligned."); + return false; + } + return true; } /* 802B4664-802B46C0 .text changeGroupIdIfNeed__7JKRAramFPUci */ -void JKRAram::changeGroupIdIfNeed(unsigned char*, int) { - /* Nonmatching */ +void JKRAram::changeGroupIdIfNeed(u8* data, int groupId) { + if (groupId < 0) { + return; + } + JKRHeap* currentHeap = JKRHeap::getCurrentHeap(); + if (currentHeap->getHeapType() == 'EXPH') { + JKRExpHeap::CMemBlock* block = JKRExpHeap::CMemBlock::getBlock(data); + block->newGroupId(groupId); + } } /* 802B46C0-802B490C .text mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapi */ -void JKRAram::mainRamToAram(unsigned char*, unsigned long, unsigned long, JKRExpandSwitch, unsigned long, JKRHeap*, int) { - /* Nonmatching */ +JKRAramBlock* JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap* heap, int id) { + JKRAramBlock *block = NULL; + checkOkAddress(buf, bufSize, NULL, 0); + if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { + expandSwitch = (JKRCheckCompressed(buf) == COMPRESSION_NONE) ? EXPAND_SWITCH_UNKNOWN0 : EXPAND_SWITCH_UNKNOWN1; + } + if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { + u32 expandSize = JKRCheckCompressed(buf) != COMPRESSION_NONE ? JKRDecompExpandSize(buf) : 0; + if (fileSize == 0 || fileSize > expandSize) { + fileSize = expandSize; + } + if (bufSize == 0) { + JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(fileSize, JKRAramHeap::HEAD); + block = (JKRAramBlock*)allocatedBlock; + if (allocatedBlock == NULL) + return NULL; + + allocatedBlock->newGroupID(decideAramGroupId(id)); + bufSize = allocatedBlock->getAddress(); + } + if (alignedSize == 0 || alignedSize > expandSize) + alignedSize = expandSize; + + if (fileSize > alignedSize) + fileSize = alignedSize; + + void *allocatedMem = JKRAllocFromHeap(heap, fileSize, -32); + if (allocatedMem == NULL) { + if (block != NULL) { + JKRFreeToAram(block); + } + block = NULL; + } + else { + JKRDecompress(buf, (u8 *)allocatedMem, fileSize, 0); + JKRAramPcs(0, (u32)allocatedMem, bufSize, alignedSize, block); + JKRFreeToHeap(heap, allocatedMem); + block = block == NULL ? (JKRAramBlock *)-1 : block; + } + } + else { + if (bufSize == 0) { + + JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(alignedSize, JKRAramHeap::HEAD); + block = allocatedBlock; + block->newGroupID(decideAramGroupId(id)); + if (block == NULL) + return NULL; + + bufSize = allocatedBlock->getAddress(); + } + + JKRAramPcs(0, (u32)buf, bufSize, alignedSize, block); + block = block == NULL ? (JKRAramBlock *)-1 : block; + } + return block; } /* 802B490C-802B49DC .text mainRamToAram__7JKRAramFPUcP12JKRAramBlockUl15JKRExpandSwitchUlP7JKRHeapi */ -void JKRAram::mainRamToAram(unsigned char*, JKRAramBlock*, unsigned long, JKRExpandSwitch, unsigned long, JKRHeap*, int) { +JKRAramBlock* JKRAram::mainRamToAram(u8 *buf, JKRAramBlock* block, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap* heap, int id) { /* Nonmatching */ + checkOkAddress(buf, 0, block, 0); + if (!block) { + return mainRamToAram(buf, u32(0), alignedSize, expandSwitch, fileSize, heap, id); + } + u32 blockSize = block->mSize; + if (expandSwitch == 1) { + fileSize = fileSize >= blockSize ? blockSize : fileSize; + } + return mainRamToAram(buf, block->mAddress, alignedSize > blockSize ? blockSize : alignedSize, expandSwitch, fileSize, heap, id); } /* 802B49DC-802B4C54 .text aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl */ -void JKRAram::aramToMainRam(unsigned long, unsigned char*, unsigned long, JKRExpandSwitch, unsigned long, JKRHeap*, int, unsigned long*) { - /* Nonmatching */ +u8* JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandSwitch, u32 p5, JKRHeap* heap, int id, u32 *pSize) { + JKRCompression compression = COMPRESSION_NONE; + if (pSize != NULL) + *pSize = 0; + + checkOkAddress(buf, address, NULL, 0); + + u32 expandSize; + if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { + u8 buffer[64]; + u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buffer, 32); + JKRAramPcs(1, address, (u32)bufPtr, sizeof(buffer) / 2, NULL); // probably change sizeof(buffer) / 2 to 32 + compression = JKRCheckCompressed(bufPtr); + expandSize = JKRDecompExpandSize(bufPtr); + } + + if (compression == COMPRESSION_YAZ0) { // SZS + if (p5 != 0 && p5 < expandSize) + expandSize = p5; + + if (buf == NULL) + buf = (u8 *)JKRAllocFromHeap(heap, expandSize, 32); + if (buf == NULL) + return NULL; + else { + changeGroupIdIfNeed(buf, id); + JKRDecompressFromAramToMainRam(address, buf, p3, expandSize, 0); + if (pSize != NULL) { + *pSize = expandSize; + } + return buf; + } + } + else if (compression == COMPRESSION_YAY0) { // SZP + u8 *szpSpace = (u8 *)JKRAllocFromHeap(heap, p3, -32); + if (szpSpace == NULL) { + return NULL; + } + else { + JKRAramPcs(1, address, (u32)szpSpace, p3, NULL); + if (p5 != 0 && p5 < expandSize) + expandSize = p5; + + u8* rv; + if (buf == NULL) { + rv = (u8 *)JKRAllocFromHeap(heap, expandSize, 32); + } else { + rv = buf; + } + + if (rv == NULL) { + i_JKRFree(szpSpace); + return NULL; + } + else { + changeGroupIdIfNeed(rv, id); + JKRDecompress(szpSpace, rv, expandSize, 0); + JKRFreeToHeap(heap, szpSpace); + if (pSize != NULL) { + *pSize = expandSize; + } + return rv; + } + } + } + else { // Not compressed or ASR + if (buf == NULL) + buf = (u8 *)JKRAllocFromHeap(heap, p3, 32); + if (buf == NULL) { + return NULL; + } + else { + changeGroupIdIfNeed(buf, id); + JKRAramPcs(1, address, (u32)buf, p3, NULL); + if (pSize != NULL) { + *pSize = p3; + } + return buf; + } + } } /* 802B4C54-802B4D4C .text aramToMainRam__7JKRAramFP12JKRAramBlockPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl */ -void JKRAram::aramToMainRam(JKRAramBlock*, unsigned char*, unsigned long, unsigned long, JKRExpandSwitch, unsigned long, JKRHeap*, int, unsigned long*) { +u8* JKRAram::aramToMainRam(JKRAramBlock* block, u8 *buf, u32 p3, u32 p4, JKRExpandSwitch expandSwitch, u32 p6, JKRHeap* heap, int id, u32 *pSize) { /* Nonmatching */ + if (pSize) { + *pSize = 0; + } + checkOkAddress(buf, 0, block, p4); + if (!block) { +#if VERSION == VERSION_JPN + OSPanic(__FILE__, 690, ":::Bad Aram Block specified.\n"); +#else + OSPanic(__FILE__, 683, ":::Bad Aram Block specified.\n"); +#endif + } + if (p4 >= block->mSize) { + return NULL; + } + p3 = p3 == 0 ? block->mSize : p3; + if (p4 + p3 > block->mSize) { + p3 = block->mSize - p4; + } + return aramToMainRam(p4 + block->mAddress, buf, p3, expandSwitch, p6, heap, id, pSize); } +static void dummy() { + OSReport("---------------- BAD SYNC. you'd set callback, but now call sync.\n"); +} +JSUList JKRAram::sAramCommandList; +static OSMutex decompMutex; +u32 JKRAram::sSzpBufferSize = 0x00000400; +static u8* szpBuf; +static u8* szpEnd; +static u8* refBuf; +static u8* refEnd; +static u8* refCurrent; +static u32 srcOffset; +static u32 transLeft; +static u8* srcLimit; +static u32 srcAddress; +static u32 fileOffset; +static u32 readCount; +static u32 maxDest; +static bool sIsInitMutex; + /* 802B4D4C-802B4F20 .text JKRDecompressFromAramToMainRam__FUlPvUlUlUl */ -void JKRDecompressFromAramToMainRam(unsigned long, void*, unsigned long, unsigned long, unsigned long) { - /* Nonmatching */ +static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset) { + BOOL interrupts = OSDisableInterrupts(); + if (sIsInitMutex == false) { + OSInitMutex(&decompMutex); + sIsInitMutex = true; + } + OSRestoreInterrupts(interrupts); + OSLockMutex(&decompMutex); + + u32 szsBufferSize = JKRAram::getSzpBufferSize(); + szpBuf = (u8 *)JKRAllocFromSysHeap(szsBufferSize, 32); +#if VERSION == VERSION_JPN + JUT_ASSERT(1091, szpBuf != 0); +#else + JUT_ASSERT(1077, szpBuf != 0); +#endif + + szpEnd = szpBuf + szsBufferSize; + if (offset != 0) { + refBuf = (u8 *)JKRAllocFromSysHeap(0x1120, 0); +#if VERSION == VERSION_JPN + JUT_ASSERT(1100, refBuf != 0); +#else + JUT_ASSERT(1086, refBuf != 0); +#endif + refEnd = refBuf + 0x1120; + refCurrent = refBuf; + } + else { + refBuf = NULL; + } + srcAddress = src; + srcOffset = 0; + transLeft = (srcLength != 0) ? srcLength : -1; + fileOffset = offset; + readCount = 0; + maxDest = dstLength; + + u8* data = firstSrcData(); + u32 decompressedSize = ((u32*)data)[1]; + decompSZS_subroutine(data, (u8 *)dst); + i_JKRFree(szpBuf); + if (refBuf) { + i_JKRFree(refBuf); + } + + DCStoreRangeNoSync(dst, decompressedSize); + OSUnlockMutex(&decompMutex); + + return 0; } /* 802B4F20-802B51A4 .text decompSZS_subroutine__FPUcPUc */ -void decompSZS_subroutine(unsigned char*, unsigned char*) { - /* Nonmatching */ +static int decompSZS_subroutine(u8 *src, u8 *dest) { + u8 *endPtr; + s32 validBitCount = 0; + s32 currCodeByte = 0; + u32 ts = 0; + + if (src[0] != 'Y' || src[1] != 'a' || src[2] != 'z' || src[3] != '0') { + return -1; + } + + SYaz0Header *header = (SYaz0Header *)src; + endPtr = dest + (header->length - fileOffset); + if (endPtr > dest + maxDest) { + endPtr = dest + maxDest; + } + + src += 0x10; + do { + if (validBitCount == 0) { + if ((src > srcLimit) && transLeft) { + src = nextSrcData(src); + } + currCodeByte = *src; + validBitCount = 8; + src++; + } + if (currCodeByte & 0x80) { + if (fileOffset != 0) { + if (readCount >= fileOffset) { + *dest = *src; + dest++; + ts++; + if (dest == endPtr) + { + break; + } + } + *(refCurrent++) = *src; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + src++; + } + else { + *dest = *src; + dest++; + src++; + ts++; + if (dest == endPtr) { + break; + } + } + readCount++; + } + else { + u32 dist = ((src[0] & 0x0f) << 8) | src[1]; + s32 numBytes = src[0] >> 4; + src += 2; + u8 *copySource; + if (fileOffset != 0) { + copySource = refCurrent - dist - 1; + if (copySource < refBuf) { + copySource += refEnd - refBuf; + } + } + else { + copySource = dest - dist - 1; + } + if (numBytes == 0) { + numBytes = *src + 0x12; + src += 1; + } + else { + numBytes += 2; + } + if (fileOffset != 0) { + do { + if (readCount >= fileOffset) { + *dest = *copySource; + dest++; + ts++; + if (dest == endPtr) { + break; + } + } + *(refCurrent++) = *copySource; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + copySource++; + if (copySource == refEnd) { + copySource = refBuf; + } + readCount++; + numBytes--; + } while (numBytes != 0); + } + else { + do { + *dest = *copySource; + dest++; + ts++; + if (dest == endPtr) { + break; + } + readCount++; + numBytes--; + copySource++; + } while (numBytes != 0); + } + } + currCodeByte <<= 1; + validBitCount--; + } while (dest < endPtr); + return 0; } /* 802B51A4-802B5248 .text firstSrcData__Fv */ -void firstSrcData() { - /* Nonmatching */ +static u8* firstSrcData() { + srcLimit = szpEnd - 0x19; + u8* buffer = szpBuf; + + u32 length; + u32 size = szpEnd - szpBuf; + if (transLeft < size) { + length = transLeft; + } else { + length = size; + } + + u32 src = (u32)(srcAddress + srcOffset); + u32 dst = (u32)buffer; + u32 alignedLength = ALIGN_NEXT(length, 0x20); + JKRAramPcs(1, src, dst, alignedLength, NULL); + + srcOffset += length; + transLeft -= length; + if (!transLeft) { + srcLimit = buffer + length; + } + + return buffer; } /* 802B5248-802B5350 .text nextSrcData__FPUc */ -void nextSrcData(unsigned char*) { - /* Nonmatching */ -} +static u8* nextSrcData(u8* current) { + u8 *dest; + u32 left = (u32)(szpEnd - current); + if (IS_NOT_ALIGNED(left, 0x20)) { + dest = szpBuf + 0x20 - (left & (0x20 - 1)); + } else { + dest = szpBuf; + } -/* 802B5394-802B53E8 .text __dt__23JSUList<12JKRAMCommand>Fv */ -JSUList::~JSUList() { - /* Nonmatching */ + memcpy(dest, current, left); + u32 transSize = (u32)(szpEnd - (dest + left)); + if (transSize > transLeft) { + transSize = transLeft; + } +#if VERSION == VERSION_JPN + JUT_ASSERT(1376, transSize > 0) +#else + JUT_ASSERT(1361, transSize > 0) +#endif + + JKRAramPcs(1, (u32)(srcAddress + srcOffset), ((u32)dest + left), ALIGN_NEXT(transSize, 0x20), + NULL); + srcOffset += transSize; + transLeft -= transSize; + + if (transLeft == 0) + srcLimit = (dest + left) + transSize; + + return dest; } diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index 314591d4e..08230cabb 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -7,6 +7,7 @@ #include "JSystem/JKernel/JKRAram.h" #include "JSystem/JKernel/JKRAramBlock.h" #include "JSystem/JKernel/JKRAramHeap.h" +#include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JKernel/JKRDvdRipper.h" #include "JSystem/JKernel/JKRDvdAramRipper.h" diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index 7ec088dba..23b5ef693 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -4,6 +4,7 @@ // #include "JSystem/JKernel/JKRDvdArchive.h" +#include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JKernel/JKRDvdRipper.h" #include "JSystem/JKernel/JKRHeap.h" From cdbe2b5174f0997fb0a5522e7ef7d9bf347f30d1 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 16:32:19 -0700 Subject: [PATCH 72/89] JKRAramHeap --- configure.py | 2 +- include/JSystem/JKernel/JKRAramBlock.h | 2 +- src/JSystem/JKernel/JKRAramHeap.cpp | 141 +++++++++++++++++++++---- 3 files changed, 124 insertions(+), 21 deletions(-) diff --git a/configure.py b/configure.py index 30f1ab3bf..7826ed5b7 100644 --- a/configure.py +++ b/configure.py @@ -762,7 +762,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRDisposer.cpp"), Object(Matching, "JSystem/JKernel/JKRThread.cpp"), Object(Matching, "JSystem/JKernel/JKRAram.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRAramHeap.cpp"), + Object(Matching, "JSystem/JKernel/JKRAramHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramBlock.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"), diff --git a/include/JSystem/JKernel/JKRAramBlock.h b/include/JSystem/JKernel/JKRAramBlock.h index 15058145b..630547f07 100644 --- a/include/JSystem/JKernel/JKRAramBlock.h +++ b/include/JSystem/JKernel/JKRAramBlock.h @@ -29,7 +29,7 @@ public: /* 0x18 */ u32 mSize; /* 0x1C */ u32 mFreeSize; /* 0x20 */ u8 mGroupId; - /* 0x21 */ u8 mIsTempMemory; + /* 0x21 */ bool mIsTempMemory; /* 0x22 */ u8 padding[2]; }; diff --git a/src/JSystem/JKernel/JKRAramHeap.cpp b/src/JSystem/JKernel/JKRAramHeap.cpp index 78b974efc..ab2488349 100644 --- a/src/JSystem/JKernel/JKRAramHeap.cpp +++ b/src/JSystem/JKernel/JKRAramHeap.cpp @@ -4,49 +4,152 @@ // #include "JSystem/JKernel/JKRAramHeap.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "dolphin/os/OS.h" +#include "global.h" + +JSUList JKRAramHeap::sAramList; /* 802B53E8-802B54B8 .text __ct__11JKRAramHeapFUlUl */ -JKRAramHeap::JKRAramHeap(unsigned long, unsigned long) { - /* Nonmatching */ +JKRAramHeap::JKRAramHeap(u32 startAddress, u32 size) { + OSInitMutex(&mMutex); + + mHeap = JKRHeap::findFromRoot(this); + mSize = ALIGN_PREV(size, 0x20); + mHeadAddress = ALIGN_NEXT(startAddress, 0x20); + mTailAddress = mHeadAddress + mSize; + mGroupId = -1; + + JKRAramBlock* block = new (mHeap, 0) JKRAramBlock(mHeadAddress, 0, mSize, -1, false); + sAramList.append(&block->mBlockLink); } /* 802B54B8-802B5560 .text __dt__11JKRAramHeapFv */ JKRAramHeap::~JKRAramHeap() { - /* Nonmatching */ + JSUListIterator iterator(sAramList.getFirst()); + while (iterator != sAramList.getEnd()) { + delete (iterator++).getObject(); + } } /* 802B5560-802B55D8 .text alloc__11JKRAramHeapFUlQ211JKRAramHeap10EAllocMode */ -void JKRAramHeap::alloc(unsigned long, JKRAramHeap::EAllocMode) { - /* Nonmatching */ +JKRAramBlock* JKRAramHeap::alloc(u32 size, JKRAramHeap::EAllocMode allocationMode) { + lock(); + + JKRAramBlock* block; + if (allocationMode == JKRAramHeap::HEAD) { + block = allocFromHead(size); + } else { + block = allocFromTail(size); + } + + unlock(); + return block; } /* 802B55D8-802B5660 .text allocFromHead__11JKRAramHeapFUl */ -void JKRAramHeap::allocFromHead(unsigned long) { - /* Nonmatching */ +JKRAramBlock* JKRAramHeap::allocFromHead(u32 size) { + u32 alignedSize = ALIGN_NEXT(size, 0x20); + u32 bestFreeSize = UINT32_MAX; + JKRAramBlock* bestBlock = NULL; + + JSUList* list = &sAramList; + for (JSUListIterator iterator = list; iterator != list->getEnd(); ++iterator) { + JKRAramBlock* block = iterator.getObject(); + if (block->mFreeSize < alignedSize) + continue; + if (bestFreeSize <= block->mFreeSize) + continue; + + bestFreeSize = block->mFreeSize; + bestBlock = block; + + if (block->mFreeSize == alignedSize) { + break; + } + } + + if (bestBlock) { + return bestBlock->allocHead(alignedSize, mGroupId, this); + } + + return NULL; } /* 802B5660-802B56D8 .text allocFromTail__11JKRAramHeapFUl */ -void JKRAramHeap::allocFromTail(unsigned long) { - /* Nonmatching */ +JKRAramBlock* JKRAramHeap::allocFromTail(u32 size) { + u32 alignedSize = ALIGN_NEXT(size, 0x20); + JKRAramBlock* tailBlock = NULL; + + JSUList* list = &sAramList; + JSUListIterator iterator = list->getLast(); + for (; iterator != list->getEnd(); --iterator) { + JKRAramBlock* block = iterator.getObject(); + if (block->mFreeSize >= alignedSize) { + tailBlock = block; + break; + } + } + + if (tailBlock) { + return tailBlock->allocTail(alignedSize, mGroupId, this); + } + + return NULL; } /* 802B56D8-802B5750 .text getFreeSize__11JKRAramHeapFv */ -void JKRAramHeap::getFreeSize() { - /* Nonmatching */ +u32 JKRAramHeap::getFreeSize() { + u32 maxFreeSize = 0; + + lock(); + + JSUList* list = &sAramList; + JSUListIterator iterator = list; + for (; iterator != list->getEnd(); ++iterator) { + if (iterator->mFreeSize > maxFreeSize) { + maxFreeSize = iterator->mFreeSize; + } + } + + unlock(); + return maxFreeSize; } /* 802B5750-802B57BC .text getTotalFreeSize__11JKRAramHeapFv */ -void JKRAramHeap::getTotalFreeSize() { - /* Nonmatching */ +u32 JKRAramHeap::getTotalFreeSize() { + u32 totalFreeSize = 0; + + lock(); + + JSUList* list = &sAramList; + JSUListIterator iterator = list; + for (; iterator != list->getEnd(); ++iterator) { + totalFreeSize += iterator->mFreeSize; + } + + unlock(); + return totalFreeSize; } /* 802B57BC-802B590C .text dump__11JKRAramHeapFv */ void JKRAramHeap::dump() { - /* Nonmatching */ -} + lock(); -/* 802B5950-802B59A4 .text __dt__23JSUList<12JKRAramBlock>Fv */ -JSUList::~JSUList() { - /* Nonmatching */ + OSReport("\nJKRAramHeap dump\n"); + OSReport(" attr address: size gid\n"); + u32 bytesUsed = 0; + for (JSUListIterator iterator = sAramList.getFirst() ; iterator != sAramList.getEnd(); ++iterator) { + if (iterator->mSize) { + const char* type; + OSReport("%s %08x: %08x %3d\n", iterator->isTempMemory() ? " temp" : "alloc", iterator->mAddress, iterator->mSize, iterator->mGroupId); + } + if (iterator->mFreeSize) { + OSReport(" free %08x: %08x 0\n", iterator->mAddress + iterator->mSize, iterator->mFreeSize); + } + bytesUsed += iterator->mSize; + } + OSReport("%d / %d bytes (%6.2f%%) used\n", bytesUsed, mSize, (f32)bytesUsed / (f32)mSize * 100.0f); + + unlock(); } From 183474b9f166dedb66681317af657aea204f531b Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 16:40:03 -0700 Subject: [PATCH 73/89] JKRAramBlock --- configure.py | 2 +- src/JSystem/JKernel/JKRAramBlock.cpp | 54 ++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/configure.py b/configure.py index 7826ed5b7..f4fdf5130 100644 --- a/configure.py +++ b/configure.py @@ -763,7 +763,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRThread.cpp"), Object(Matching, "JSystem/JKernel/JKRAram.cpp"), Object(Matching, "JSystem/JKernel/JKRAramHeap.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRAramBlock.cpp"), + Object(Matching, "JSystem/JKernel/JKRAramBlock.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"), Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), diff --git a/src/JSystem/JKernel/JKRAramBlock.cpp b/src/JSystem/JKernel/JKRAramBlock.cpp index 931d4d6e7..a5866ac90 100644 --- a/src/JSystem/JKernel/JKRAramBlock.cpp +++ b/src/JSystem/JKernel/JKRAramBlock.cpp @@ -4,24 +4,64 @@ // #include "JSystem/JKernel/JKRAramBlock.h" +#include "JSystem/JKernel/JKRAramHeap.h" +#include "JSystem/JKernel/JKRHeap.h" #include "dolphin/types.h" /* 802B59A4-802B5A18 .text __ct__12JKRAramBlockFUlUlUlUcb */ -JKRAramBlock::JKRAramBlock(unsigned long, unsigned long, unsigned long, unsigned char, bool) { - /* Nonmatching */ +JKRAramBlock::JKRAramBlock(u32 address, u32 size, u32 freeSize, u8 groupId, bool isTempMemory) : mBlockLink(this) { + mAddress = address; + mSize = size; + mFreeSize = freeSize; + mGroupId = groupId; + mIsTempMemory = isTempMemory; } /* 802B5A18-802B5AD4 .text __dt__12JKRAramBlockFv */ JKRAramBlock::~JKRAramBlock() { - /* Nonmatching */ + JSUList* list = mBlockLink.getSupervisor(); + JSULink* prev = mBlockLink.getPrev(); + + if (prev) { + JKRAramBlock* block = prev->getObject(); + block->mFreeSize = mSize + mFreeSize + block->mFreeSize; + list->remove(&mBlockLink); + } else { + mFreeSize = mFreeSize + mSize; + mSize = 0; + } } /* 802B5AD4-802B5B70 .text allocHead__12JKRAramBlockFUlUcP11JKRAramHeap */ -void JKRAramBlock::allocHead(unsigned long, unsigned char, JKRAramHeap*) { - /* Nonmatching */ +JKRAramBlock* JKRAramBlock::allocHead(u32 size, u8 groupId, JKRAramHeap* aramHeap) { + u32 address = mAddress; + u32 usedSize = mSize; + u32 nextAddress = address + usedSize; + u32 freeSize = mFreeSize; + u32 nextFreeSize = freeSize - size; + + JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0) JKRAramBlock(nextAddress, size, nextFreeSize, groupId, false); + + mFreeSize = 0; + JSULink* next = mBlockLink.getNext(); + JSUList* list = mBlockLink.getSupervisor(); + list->insert(next, &block->mBlockLink); + return block; } /* 802B5B70-802B5C14 .text allocTail__12JKRAramBlockFUlUcP11JKRAramHeap */ -void JKRAramBlock::allocTail(unsigned long, unsigned char, JKRAramHeap*) { - /* Nonmatching */ +JKRAramBlock* JKRAramBlock::allocTail(u32 size, u8 groupId, JKRAramHeap* aramHeap) { + u32 freeSize = mFreeSize; + u32 address = mAddress; + u32 usedSize = mSize; + u32 endAddress = address + usedSize + freeSize; + u32 tailAddress = endAddress - size; + + JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0) JKRAramBlock(tailAddress, size, 0, groupId, true); + + mFreeSize -= size; + JSULink* next = mBlockLink.getNext(); + JSUList* list = mBlockLink.getSupervisor(); + list->insert(next, &block->mBlockLink); + return block; } From 5197b766346068795925a4ee48b3b569ade4f6bf Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 16:58:23 -0700 Subject: [PATCH 74/89] JKRAramPiece --- configure.py | 2 +- src/JSystem/JKernel/JKRAramPiece.cpp | 137 +++++++++++++++++++++++---- 2 files changed, 120 insertions(+), 19 deletions(-) diff --git a/configure.py b/configure.py index f4fdf5130..dcf49da38 100644 --- a/configure.py +++ b/configure.py @@ -764,7 +764,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRAram.cpp"), Object(Matching, "JSystem/JKernel/JKRAramHeap.cpp"), Object(Matching, "JSystem/JKernel/JKRAramBlock.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"), + Object(Matching, "JSystem/JKernel/JKRAramPiece.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"), Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), Object(NonMatching, "JSystem/JKernel/JKRFileFinder.cpp"), diff --git a/src/JSystem/JKernel/JKRAramPiece.cpp b/src/JSystem/JKernel/JKRAramPiece.cpp index d591be0a5..308825166 100644 --- a/src/JSystem/JKernel/JKRAramPiece.cpp +++ b/src/JSystem/JKernel/JKRAramPiece.cpp @@ -4,49 +4,150 @@ // #include "JSystem/JKernel/JKRAramPiece.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "dolphin/os/OS.h" /* 802B5C14-802B5C94 .text prepareCommand__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v */ -void JKRAramPiece::prepareCommand(int, unsigned long, unsigned long, unsigned long, JKRAramBlock*, void (*)(unsigned long)) { - /* Nonmatching */ +JKRAMCommand* JKRAramPiece::prepareCommand(int direction, u32 src, u32 dst, u32 length, JKRAramBlock* block, JKRAMCommand::AsyncCallback callback) { + JKRAMCommand* command = new (JKRHeap::getSystemHeap(), -4) JKRAMCommand(); + command->mTransferDirection = direction; + command->mSrc = src; + command->mDst = dst; + command->mAramBlock = block; + command->mDataLength = length; + command->mCallback = callback; + return command; } /* 802B5C94-802B5CB4 .text sendCommand__12JKRAramPieceFP12JKRAMCommand */ -void JKRAramPiece::sendCommand(JKRAMCommand*) { - /* Nonmatching */ +void JKRAramPiece::sendCommand(JKRAMCommand* command) { + startDMA(command); } +JSUList JKRAramPiece::sAramPieceCommandList; +OSMutex JKRAramPiece::mMutex; + /* 802B5CB4-802B5E0C .text orderAsync__12JKRAramPieceFiUlUlUlP12JKRAramBlockPFUl_v */ -void JKRAramPiece::orderAsync(int, unsigned long, unsigned long, unsigned long, JKRAramBlock*, void (*)(unsigned long)) { - /* Nonmatching */ +JKRAMCommand* JKRAramPiece::orderAsync(int direction, u32 source, u32 destination, u32 length, JKRAramBlock* block, JKRAMCommand::AsyncCallback callback) { + lock(); + if ((source & 0x1f) != 0 || (destination & 0x1f) != 0) { + OSReport("direction = %x\n", direction); + OSReport("source = %x\n", source); + OSReport("destination = %x\n", destination); + OSReport("length = %x\n", length); + OSPanic(__FILE__, 102, "Abort."); + } + + Message* message = new (JKRHeap::getSystemHeap(), -4) Message(); + JKRAMCommand* command = + JKRAramPiece::prepareCommand(direction, source, destination, length, block, callback); + message->field_0x00 = 1; + message->command = command; + + OSSendMessage(&JKRAram::sMessageQueue, message, OS_MESSAGE_BLOCK); + if (command->mCallback != NULL) { + sAramPieceCommandList.append(&command->mPieceLink); + } + + unlock(); + return command; } /* 802B5E0C-802B5ED4 .text sync__12JKRAramPieceFP12JKRAMCommandi */ -void JKRAramPiece::sync(JKRAMCommand*, int) { - /* Nonmatching */ +BOOL JKRAramPiece::sync(JKRAMCommand* command, int is_non_blocking) { + OSMessage message; + + lock(); + if (is_non_blocking == 0) { + OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCK); + sAramPieceCommandList.remove(&command->mPieceLink); + unlock(); + return TRUE; + } + + BOOL result = OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NOBLOCK); + if (!result) { + unlock(); + return FALSE; + } + + sAramPieceCommandList.remove(&command->mPieceLink); + unlock(); + return TRUE; } /* 802B5ED4-802B5F68 .text orderSync__12JKRAramPieceFiUlUlUlP12JKRAramBlock */ -void JKRAramPiece::orderSync(int, unsigned long, unsigned long, unsigned long, JKRAramBlock*) { - /* Nonmatching */ +BOOL JKRAramPiece::orderSync(int direction, u32 source, u32 destination, u32 length, JKRAramBlock* block) { + lock(); + + JKRAMCommand* command = + JKRAramPiece::orderAsync(direction, source, destination, length, block, NULL); + BOOL result = JKRAramPiece::sync(command, 0); + delete command; + + unlock(); + return result; } /* 802B5F68-802B5FE0 .text startDMA__12JKRAramPieceFP12JKRAMCommand */ -void JKRAramPiece::startDMA(JKRAMCommand*) { - /* Nonmatching */ +void JKRAramPiece::startDMA(JKRAMCommand* command) { + if (command->mTransferDirection == 1) { + DCInvalidateRange((void*)command->mDst, command->mDataLength); + } else { + DCStoreRange((void*)command->mSrc, command->mDataLength); + } + + ARQPostRequest(&command->mRequest, 0, command->mTransferDirection, 0, command->mSrc, + command->mDst, command->mDataLength, JKRAramPiece::doneDMA); } /* 802B5FE0-802B6088 .text doneDMA__12JKRAramPieceFUl */ -void JKRAramPiece::doneDMA(unsigned long) { - /* Nonmatching */ +void JKRAramPiece::doneDMA(u32 requestAddress) { + JKRAMCommand* command = (JKRAMCommand*)requestAddress; + + if (command->mTransferDirection == 1) { + DCInvalidateRange((void*)command->mDst, command->mDataLength); + } + + if (command->field_0x60 != 0) { + if (command->field_0x60 == 2) { + JKRDecomp::sendCommand(command->mDecompCommand); + } + return; + } + + if (command->mCallback) { + (*command->mCallback)(requestAddress); + } else if (command->field_0x5C) { + OSSendMessage(command->field_0x5C, command, OS_MESSAGE_NOBLOCK); + } else { + OSSendMessage(&command->mMessageQueue, command, OS_MESSAGE_NOBLOCK); + } } /* 802B6088-802B60F8 .text __ct__12JKRAMCommandFv */ -JKRAMCommand::JKRAMCommand() { - /* Nonmatching */ +JKRAMCommand::JKRAMCommand() : mPieceLink(this), field_0x30(this) { + OSInitMessageQueue(&mMessageQueue, &mMessage, OS_MESSAGE_BLOCK); + mCallback = NULL; + field_0x5C = NULL; + field_0x60 = 0; + field_0x8C = NULL; + field_0x90 = NULL; + field_0x94 = NULL; } /* 802B60F8-802B61A0 .text __dt__12JKRAMCommandFv */ JKRAMCommand::~JKRAMCommand() { - /* Nonmatching */ + if (field_0x8C) { + delete field_0x8C; + } + if (field_0x90) { + delete field_0x90; + } + + if (field_0x94) { + JKRHeap::free(field_0x94, NULL); + } } From 76871d76a85409c1828bc0ac5ab327471915aafa Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 17:42:03 -0700 Subject: [PATCH 75/89] JKRAramStream --- include/JSystem/JKernel/JKRAramStream.h | 25 ++-- src/JSystem/JKernel/JKRAramStream.cpp | 187 +++++++++++++++++++++--- 2 files changed, 176 insertions(+), 36 deletions(-) diff --git a/include/JSystem/JKernel/JKRAramStream.h b/include/JSystem/JKernel/JKRAramStream.h index cc42bd609..9cbd22435 100644 --- a/include/JSystem/JKernel/JKRAramStream.h +++ b/include/JSystem/JKernel/JKRAramStream.h @@ -22,22 +22,21 @@ public: /* 0x0C */ u32 field_0x0c; /* 0x10 */ JSUFileInputStream* mStream; /* 0x14 */ u32 mOffset; - /* 0x18 */ u32* mReturnSize; - /* 0x1C */ u8* mTransferBuffer; - /* 0x20 */ u32 mTransferBufferSize; - /* 0x24 */ JKRHeap* mHeap; - /* 0x28 */ bool mAllocatedTransferBuffer; - /* 0x29 */ u8 padding_0x29[3]; - /* 0x2C */ u32 field_0x2c; - /* 0x30 */ OSMessageQueue mMessageQueue; - /* 0x50 */ OSMessage mMessage; - /* 0x54 */ u32 field_0x54; - /* 0x58 */ u32 field_0x58; + /* 0x18 */ u8* mTransferBuffer; + /* 0x1C */ u32 mTransferBufferSize; + /* 0x20 */ JKRHeap* mHeap; + /* 0x24 */ bool mAllocatedTransferBuffer; + /* 0x25 */ u8 padding_0x29[3]; + /* 0x28 */ u32 field_0x2c; + /* 0x2C */ OSMessageQueue mMessageQueue; + /* 0x4C */ OSMessage mMessage; + /* 0x50 */ u32 field_0x54; + /* 0x54 */ u32 field_0x58; }; class JKRAramStream : public JKRThread { private: - JKRAramStream(long); + JKRAramStream(s32); virtual ~JKRAramStream(); /* vt[03] */ void* run(void); /* override */ @@ -47,7 +46,7 @@ public: static s32 readFromAram(void); static s32 writeToAram(JKRAramStreamCommand*); - static JKRAramStreamCommand* write_StreamToAram_Async(JSUFileInputStream*, u32, u32, u32, u32*); + static JKRAramStreamCommand* write_StreamToAram_Async(JSUFileInputStream*, u32, u32, u32); static JKRAramStreamCommand* sync(JKRAramStreamCommand*, BOOL); static void setTransBuffer(u8*, u32, JKRHeap*); diff --git a/src/JSystem/JKernel/JKRAramStream.cpp b/src/JSystem/JKernel/JKRAramStream.cpp index 4bcf69054..5ca40cc8e 100644 --- a/src/JSystem/JKernel/JKRAramStream.cpp +++ b/src/JSystem/JKernel/JKRAramStream.cpp @@ -4,59 +4,200 @@ // #include "JSystem/JKernel/JKRAramStream.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAramPiece.h" +#include "JSystem/JSupport/JSUFileStream.h" +#include "dolphin/os/OS.h" +#include "global.h" + +JKRAramStream* JKRAramStream::sAramStreamObject; /* 802B61E4-802B6254 .text create__13JKRAramStreamFl */ -void JKRAramStream::create(long) { - /* Nonmatching */ +JKRAramStream* JKRAramStream::create(s32 priority) { + if (!sAramStreamObject) { + sAramStreamObject = new (JKRGetSystemHeap(), 0) JKRAramStream(priority); + setTransBuffer(NULL, 0, NULL); + } + + return sAramStreamObject; } +void* JKRAramStream::sMessageBuffer[4] = { NULL, NULL, NULL, NULL }; +OSMessageQueue JKRAramStream::sMessageQueue = {0}; + /* 802B6254-802B62A4 .text __ct__13JKRAramStreamFl */ -JKRAramStream::JKRAramStream(long) { - /* Nonmatching */ +JKRAramStream::JKRAramStream(s32 priority) : JKRThread (0x4000, 0x10, priority) { + resume(); } /* 802B62A4-802B6304 .text __dt__13JKRAramStreamFv */ -JKRAramStream::~JKRAramStream() { - /* Nonmatching */ -} +JKRAramStream::~JKRAramStream() {} /* 802B6304-802B6374 .text run__13JKRAramStreamFv */ -void JKRAramStream::run() { - /* Nonmatching */ +void* JKRAramStream::run() { + OSInitMessageQueue(&sMessageQueue, sMessageBuffer, ARRAY_SIZE(sMessageBuffer)); + + for (;;) { + OSMessage message; + OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCK); + JKRAramStreamCommand* command = (JKRAramStreamCommand*)message; + + switch (command->mType) { + case JKRAramStreamCommand::READ: + readFromAram(); + break; + case JKRAramStreamCommand::WRITE: + writeToAram(command); + break; + } + } } /* 802B6374-802B637C .text readFromAram__13JKRAramStreamFv */ -void JKRAramStream::readFromAram() { - /* Nonmatching */ +s32 JKRAramStream::readFromAram() { + return 1; } /* 802B637C-802B6568 .text writeToAram__13JKRAramStreamFP20JKRAramStreamCommand */ -void JKRAramStream::writeToAram(JKRAramStreamCommand*) { - /* Nonmatching */ +s32 JKRAramStream::writeToAram(JKRAramStreamCommand* command) { + u32 dstSize = command->mSize; + u32 offset = command->mOffset; + u32 writtenLength = 0; + u32 destination = command->mAddress; + u8* buffer = command->mTransferBuffer; + u32 bufferSize = command->mTransferBufferSize; + JKRHeap* heap = command->mHeap; + + if (buffer) { + bufferSize = (bufferSize) ? bufferSize : 0x400; + + command->mTransferBufferSize = bufferSize; + command->mAllocatedTransferBuffer = false; + } else { + bufferSize = (bufferSize) ? bufferSize : 0x400; + + if (heap) { + buffer = (u8*)JKRAllocFromHeap(heap, bufferSize, -0x20); + command->mTransferBuffer = buffer; + } else { + buffer = (u8*)JKRAllocFromHeap(NULL, bufferSize, -0x20); + command->mTransferBuffer = buffer; + } + + command->mTransferBufferSize = bufferSize; + command->mAllocatedTransferBuffer = true; + } + + if (!buffer) { + if (!heap) { + JKRGetCurrentHeap()->dump(); + } else { + heap->dump(); + } + + OSReport(":::Cannot alloc memory [%s][%d]\n", __FILE__, 168); + OSPanic(__FILE__, 169, "abort\n"); + } + + if (buffer) { + command->mStream->seek(offset, JSUStreamSeekFrom_SET); + while (dstSize != 0) { + u32 length = (dstSize > bufferSize) ? bufferSize : dstSize; + + s32 readLength = command->mStream->read(buffer, length); + if (readLength == 0) { + writtenLength = 0; + break; + } + + JKRAramPcs(0, (u32)buffer, destination, length, NULL); + dstSize -= length; + writtenLength += length; + destination += length; + } + + if (command->mAllocatedTransferBuffer) { + i_JKRFree(buffer); + command->mAllocatedTransferBuffer = false; + } + } + + OSSendMessage(&command->mMessageQueue, (OSMessage)writtenLength, OS_MESSAGE_NOBLOCK); + return writtenLength; } +u8* JKRAramStream::transBuffer; +u32 JKRAramStream::transSize; +JKRHeap* JKRAramStream::transHeap; + /* 802B6568-802B6624 .text write_StreamToAram_Async__13JKRAramStreamFP18JSUFileInputStreamUlUlUl */ -void JKRAramStream::write_StreamToAram_Async(JSUFileInputStream*, unsigned long, unsigned long, unsigned long) { - /* Nonmatching */ +JKRAramStreamCommand* JKRAramStream::write_StreamToAram_Async(JSUFileInputStream* stream, u32 addr, u32 size, u32 offset) { + JKRAramStreamCommand* command = new (JKRGetSystemHeap(), -4) JKRAramStreamCommand(); + command->mType = JKRAramStreamCommand::WRITE; + command->mAddress = addr; + command->mSize = size; + command->mStream = stream; + command->field_0x2c = 0; + command->mOffset = offset; + command->mTransferBuffer = transBuffer; + command->mHeap = transHeap; + command->mTransferBufferSize = transSize; + + OSInitMessageQueue(&command->mMessageQueue, &command->mMessage, 1); + OSSendMessage(&sMessageQueue, command, OS_MESSAGE_BLOCK); + return command; } /* 802B6624-802B66B8 .text sync__13JKRAramStreamFP20JKRAramStreamCommandi */ -void JKRAramStream::sync(JKRAramStreamCommand*, int) { - /* Nonmatching */ +JKRAramStreamCommand* JKRAramStream::sync(JKRAramStreamCommand* command, int isNonBlocking) { + OSMessage message; + if (isNonBlocking == 0) { + OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCK); + if (message == NULL) { + command = NULL; + return command; + } else { + return command; + } + } else { + BOOL receiveResult = + OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NOBLOCK); + if (receiveResult == FALSE) { + command = NULL; + return command; + } else if (message == NULL) { + command = NULL; + return command; + } else { + return command; + } + } } /* 802B66B8-802B6708 .text setTransBuffer__13JKRAramStreamFPUcUlP7JKRHeap */ -void JKRAramStream::setTransBuffer(unsigned char*, unsigned long, JKRHeap*) { - /* Nonmatching */ +void JKRAramStream::setTransBuffer(u8* buffer, u32 bufferSize, JKRHeap* heap) { + transBuffer = NULL; + transSize = 0x400; + transHeap = NULL; + + if (buffer) { + transBuffer = (u8*)ALIGN_NEXT((u32)buffer, 0x20); + } + + if (bufferSize) { + transSize = ALIGN_PREV(bufferSize, 0x20); + } + + if (heap && !buffer) { + transHeap = heap; + } } /* 802B6708-802B6714 .text __ct__20JKRAramStreamCommandFv */ JKRAramStreamCommand::JKRAramStreamCommand() { - /* Nonmatching */ + mAllocatedTransferBuffer = false; } /* 802B6714-802B6770 .text getAvailable__20JSURandomInputStreamCFv */ -void JSURandomInputStream::getAvailable() const { - /* Nonmatching */ +s32 JSURandomInputStream::getAvailable() const { + return getLength() - getPosition(); } From 1e91dff441bffa1187991ffbff18f096b4727d8a Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 18:30:18 -0700 Subject: [PATCH 76/89] JKRFileFinder --- configure.py | 2 +- include/JSystem/JKernel/JKRFileFinder.h | 4 +- src/JSystem/JKernel/JKRFileFinder.cpp | 65 ++++++++++++++++++++----- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/configure.py b/configure.py index dcf49da38..adf1d07b5 100644 --- a/configure.py +++ b/configure.py @@ -767,7 +767,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRAramPiece.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"), Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRFileFinder.cpp"), + Object(Matching, "JSystem/JKernel/JKRFileFinder.cpp"), Object(NonMatching, "JSystem/JKernel/JKRFileCache.cpp"), Object(NonMatching, "JSystem/JKernel/JKRArchivePub.cpp"), Object(NonMatching, "JSystem/JKernel/JKRArchivePri.cpp"), diff --git a/include/JSystem/JKernel/JKRFileFinder.h b/include/JSystem/JKernel/JKRFileFinder.h index d41709086..fece8bb2b 100644 --- a/include/JSystem/JKernel/JKRFileFinder.h +++ b/include/JSystem/JKernel/JKRFileFinder.h @@ -16,7 +16,7 @@ public: mIsAvailable = false; mIsFileOrDirectory = false; } - inline virtual ~JKRFileFinder(); + inline virtual ~JKRFileFinder() {}; bool isAvailable() const { return mIsAvailable; } bool isFile() const { return mIsFileOrDirectory; } @@ -37,7 +37,7 @@ class JKRArchive; class JKRArcFinder : public JKRFileFinder { public: JKRArcFinder(JKRArchive*, s32, s32); - inline virtual ~JKRArcFinder(); + inline virtual ~JKRArcFinder() {}; public: /* vt[3] */ virtual bool findNextFile(void); /* override */ diff --git a/src/JSystem/JKernel/JKRFileFinder.cpp b/src/JSystem/JKernel/JKRFileFinder.cpp index 6c709bcf4..2e18ebc44 100644 --- a/src/JSystem/JKernel/JKRFileFinder.cpp +++ b/src/JSystem/JKernel/JKRFileFinder.cpp @@ -4,34 +4,73 @@ // #include "JSystem/JKernel/JKRFileFinder.h" +#include "JSystem/JKernel/JKRArchive.h" #include "dolphin/types.h" /* 802B6CB8-802B6D44 .text __ct__12JKRArcFinderFP10JKRArchivell */ -JKRArcFinder::JKRArcFinder(JKRArchive*, long, long) { - /* Nonmatching */ +JKRArcFinder::JKRArcFinder(JKRArchive* archive, s32 startIndex, s32 numEntries) { + mArchive = archive; + mIsAvailable = numEntries > 0; + mStartIndex = startIndex; + mEndIndex = startIndex + numEntries - 1; + mNextIndex = mStartIndex; + findNextFile(); } /* 802B6D44-802B6DF0 .text findNextFile__12JKRArcFinderFv */ -void JKRArcFinder::findNextFile() { - /* Nonmatching */ +bool JKRArcFinder::findNextFile() { + JKRArchive::SDirEntry entry; + + if (mIsAvailable) { + mIsAvailable = !(mNextIndex > mEndIndex); + if (mIsAvailable) { + mIsAvailable = mArchive->getDirEntry(&entry, mNextIndex); + mEntryName = entry.name; + mEntryFileIndex = mNextIndex; + mEntryId = entry.id; + mEntryTypeFlags = entry.flags; + mIsFileOrDirectory = (mEntryTypeFlags >> 1) & 1; + mNextIndex++; + } + } + return mIsAvailable; } /* 802B6DF0-802B6E74 .text __ct__12JKRDvdFinderFPCc */ -JKRDvdFinder::JKRDvdFinder(const char*) { - /* Nonmatching */ +JKRDvdFinder::JKRDvdFinder(const char* directory) { + mDvdIsOpen = DVDOpenDir(directory, &mDvdDirectory); + mIsAvailable = mDvdIsOpen; + findNextFile(); } /* 802B6E74-802B6EF4 .text __dt__12JKRDvdFinderFv */ JKRDvdFinder::~JKRDvdFinder() { - /* Nonmatching */ + if (mDvdIsOpen) { + DVDCloseDir(&mDvdDirectory); + } } /* 802B6EF4-802B6F90 .text findNextFile__12JKRDvdFinderFv */ -void JKRDvdFinder::findNextFile() { - /* Nonmatching */ -} +bool JKRDvdFinder::findNextFile() { + if (mIsAvailable) { + DVDDirectoryEntry directoryEntry; + mIsAvailable = DVDReadDir(&mDvdDirectory, &directoryEntry); -/* 802B6F90-802B6FEC .text __dt__12JKRArcFinderFv */ -JKRArcFinder::~JKRArcFinder() { - /* Nonmatching */ + if (mIsAvailable) { + mIsFileOrDirectory = directoryEntry.is_directory != 0; + mEntryName = directoryEntry.name; + mEntryFileIndex = directoryEntry.entry_number; + mEntryId = 0; + + // only matches with enum + // TODO: placeholder + enum EntryTypeFlags { + EntryTypeFlags1 = 1, + EntryTypeFlags2 = 2, + }; + mEntryTypeFlags = mIsFileOrDirectory ? EntryTypeFlags2 : EntryTypeFlags1; + } + } + + return mIsAvailable; } From db18620f38e69b0832d4bf905081ea1002014ece Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 18:59:11 -0700 Subject: [PATCH 77/89] JKRFileCache --- configure.py | 2 +- include/JSystem/JKernel/JKRFileCache.h | 8 +- src/JSystem/JKernel/JKRFileCache.cpp | 393 +++++++++++++++++++++---- 3 files changed, 339 insertions(+), 64 deletions(-) diff --git a/configure.py b/configure.py index adf1d07b5..35921b930 100644 --- a/configure.py +++ b/configure.py @@ -768,7 +768,7 @@ config.libs = [ Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"), Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), Object(Matching, "JSystem/JKernel/JKRFileFinder.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRFileCache.cpp"), + Object(Matching, "JSystem/JKernel/JKRFileCache.cpp"), Object(NonMatching, "JSystem/JKernel/JKRArchivePub.cpp"), Object(NonMatching, "JSystem/JKernel/JKRArchivePri.cpp"), Object(Matching, "JSystem/JKernel/JKRMemArchive.cpp"), diff --git a/include/JSystem/JKernel/JKRFileCache.h b/include/JSystem/JKernel/JKRFileCache.h index b4b9830bc..892f1670b 100644 --- a/include/JSystem/JKernel/JKRFileCache.h +++ b/include/JSystem/JKernel/JKRFileCache.h @@ -41,10 +41,10 @@ public: /* vt[12] */ virtual u32 getResSize(const void*) const; /* override */ /* vt[13] */ virtual u32 countFile(const char*) const; /* override */ /* vt[14] */ virtual JKRFileFinder* getFirstFile(const char*) const; /* override */ - /* vt[15] */ virtual void* getFsResource(const char*); - /* vt[16] */ virtual void* getNameResource(u32, const char*); - /* vt[17] */ virtual u32 readFsResource(void*, u32, const char*); - /* vt[18] */ virtual u32 readNameResource(void*, u32, u32, const char*); + /* vt[15] */ virtual void* getFsResource(const char* path) { return getResource(path); } + /* vt[16] */ virtual void* getNameResource(u32 type, const char* path) { return getResource(type, path); } + /* vt[17] */ virtual u32 readFsResource(void* dst, u32 dstLength, const char* path) { return readResource(dst, dstLength, path); } + /* vt[18] */ virtual u32 readNameResource(void* dst, u32 dstLength, u32 type, const char* path) { return readResource(dst, dstLength, type, path); } private: /* 0x00 */ // vtable diff --git a/src/JSystem/JKernel/JKRFileCache.cpp b/src/JSystem/JKernel/JKRFileCache.cpp index 26190b9d3..89f60a249 100644 --- a/src/JSystem/JKernel/JKRFileCache.cpp +++ b/src/JSystem/JKernel/JKRFileCache.cpp @@ -4,124 +4,399 @@ // #include "JSystem/JKernel/JKRFileCache.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JKernel/JKRFileFinder.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/MSL_Common/Src/ctype.h" +#include "MSL_C/string.h" +#include "global.h" /* 802B6FEC-802B70EC .text mount__12JKRFileCacheFPCcP7JKRHeapPCc */ -void JKRFileCache::mount(const char*, JKRHeap*, const char*) { - /* Nonmatching */ +JKRFileCache* JKRFileCache::mount(const char* path, JKRHeap* heap, const char* param_3) { + if (!path || *path != '/') { + return NULL; + } + + u32 pathLength = strlen(path); + if (pathLength != 1 && path[pathLength - 1] == '/') { + return NULL; + } + + JSUList& volumeList = getVolumeList(); + JSUListIterator iterator; + for (iterator = volumeList.getFirst(); iterator != volumeList.getEnd(); ++iterator) { + if (iterator->getVolumeType() == 'CASH') { + JKRFileCache* fileCache = (JKRFileCache*)iterator.getObject(); + if (fileCache->mRootPath) { + if (strcmp(fileCache->mRootPath, path) == 0) { + fileCache->mMountCount++; + return fileCache; + } + } + } + } + + return new (heap, 0) JKRFileCache(path, param_3); } /* 802B70EC-802B72A8 .text __ct__12JKRFileCacheFPCcPCc */ -JKRFileCache::JKRFileCache(const char*, const char*) { - /* Nonmatching */ +JKRFileCache::JKRFileCache(const char* path, const char* volume) { + mParentHeap = JKRHeap::findFromRoot(this); + mMountCount = 1; + mVolumeType = 'CASH'; + + u32 pathLength = strlen(path); + mRootPath = (char*)JKRAllocFromHeap(mParentHeap, pathLength + 1, 1); + mCurrentPath = (char*)JKRAllocFromSysHeap(pathLength + 2, 1); + strcpy(mRootPath, path); + strcpy(mCurrentPath, path); + + if (path[1] != '\0') { + convStrLower(mRootPath); + convStrLower(mCurrentPath); + strcat(mCurrentPath, "/"); + + const char* volumePath = volume; + if (!volume) { + volumePath = strrchr(mRootPath, '/'); + volumePath++; + } + + u32 volumeLength = strlen(volumePath) + 1; + mVolumePath = (char*)JKRAllocFromSysHeap(volumeLength, 0); + strcpy(mVolumePath, volumePath); + convStrLower(mVolumePath); + mVolumeName = mVolumePath; + } else { + const char* volumePath = volume; + if (!volume) { + volumePath = "dvd"; + } + + u32 volumeLength = strlen(volumePath) + 1; + mVolumePath = (char*)JKRAllocFromSysHeap(volumeLength, 0); + strcpy(mVolumePath, volumePath); + convStrLower(mVolumePath); + mVolumeName = mVolumePath; + } + + getVolumeList().prepend(&mFileLoaderLink); + mIsMounted = true; } /* 802B72A8-802B737C .text __dt__12JKRFileCacheFv */ JKRFileCache::~JKRFileCache() { - /* Nonmatching */ + removeResourceAll(); + if (mRootPath) + JKRFreeToHeap(mParentHeap, mRootPath); + if (mCurrentPath) + JKRFreeToSysHeap(mCurrentPath); + if (mVolumePath) + JKRFreeToSysHeap(mVolumePath); + + getVolumeList().remove(&mFileLoaderLink); } /* 802B737C-802B7410 .text becomeCurrent__12JKRFileCacheFPCc */ -void JKRFileCache::becomeCurrent(const char*) { - /* Nonmatching */ +bool JKRFileCache::becomeCurrent(const char* path) { + char* dvdPathName = getDvdPathName(path); + + bool result = DVDChangeDir(dvdPathName); + if (result) { + sCurrentVolume = this; + JKRHeap::sSystemHeap->free(mCurrentPath); + mCurrentPath = dvdPathName; + if (mCurrentPath[1] != '\0') { + strcat(mCurrentPath, "/"); + } + } else { + JKRHeap::sSystemHeap->free(dvdPathName); + } + + return result; } /* 802B7410-802B7564 .text getResource__12JKRFileCacheFPCc */ -void JKRFileCache::getResource(const char*) { - /* Nonmatching */ +void* JKRFileCache::getResource(const char* path) { + JUT_ASSERT(237, isMounted()); + + void* buffer = NULL; + char* name = getDvdPathName(path); + + JKRDvdFile dvdFile(name); + if (dvdFile.isAvailable()) { + CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID()); + if (!cacheBlock) { + u32 fileSize = dvdFile.getFileInfo()->length; + u32 alignedSize = ALIGN_NEXT(fileSize, 0x20); + buffer = JKRAllocFromHeap(mParentHeap, alignedSize, 0x20); + if (buffer) { + dvdFile.read(buffer, alignedSize, 0); + + cacheBlock = new (JKRHeap::getSystemHeap(), 0) + CCacheBlock(dvdFile.getFileID(), dvdFile.getFileInfo()->length, buffer); + mCacheBlockList.append(&cacheBlock->mCacheBlockLink); + } + } else { + cacheBlock->mReferenceCount++; + buffer = cacheBlock->mMemoryPtr; + } + } + + JKRFreeToSysHeap(name); + return buffer; } /* 802B7564-802B7630 .text getResource__12JKRFileCacheFUlPCc */ -void JKRFileCache::getResource(unsigned long, const char*) { - /* Nonmatching */ +void* JKRFileCache::getResource(unsigned long, const char* path) { + JUT_ASSERT(303, isMounted()); + + char finalPath[256]; + u32 rootLength = strlen(mRootPath); + char* filePath = finalPath + rootLength; + strcpy(finalPath, mRootPath); + + bool found = findFile(finalPath, path); + if (found) { + return getResource(filePath); + } + + return NULL; } /* 802B7630-802B7754 .text readResource__12JKRFileCacheFPvUlPCc */ -void JKRFileCache::readResource(void*, unsigned long, const char*) { - /* Nonmatching */ +u32 JKRFileCache::readResource(void* dst, u32 dstLength, const char* path) { + JUT_ASSERT(344, isMounted()); + + char* name = getDvdPathName(path); + JKRDvdFile dvdFile(name); + + u32 resourceSize = 0; + + while (true) { + if (!dvdFile.isAvailable()) { + break; + } + u32 fileSize = dvdFile.getFileInfo()->length; + resourceSize = ALIGN_NEXT(fileSize, 0x20); + dstLength = ALIGN_PREV(dstLength, 0x20); + if (resourceSize > dstLength) { + resourceSize = dstLength; + } + + CCacheBlock* cacheBlock = findCacheBlock(dvdFile.getFileID()); + if (!cacheBlock) { + dvdFile.read(dst, resourceSize, 0); + } else { + memcpy(dst, cacheBlock->mMemoryPtr, resourceSize); + } + } + + JKRFreeToSysHeap(name); + return resourceSize; } /* 802B7754-802B7830 .text readResource__12JKRFileCacheFPvUlUlPCc */ -void JKRFileCache::readResource(void*, unsigned long, unsigned long, const char*) { - /* Nonmatching */ +u32 JKRFileCache::readResource(void* dst, u32 dstLength, u32, const char* path) { + JUT_ASSERT(412, isMounted()); + + char finalPath[256]; + u32 rootLength = strlen(mRootPath); + char* filePath = finalPath + rootLength; + strcpy(finalPath, mRootPath); + + bool found = findFile(finalPath, path); + if (found) + return readResource(dst, dstLength, filePath); + + return NULL; } /* 802B7830-802B7904 .text removeResourceAll__12JKRFileCacheFv */ void JKRFileCache::removeResourceAll() { - /* Nonmatching */ + JUT_ASSERT(441, isMounted()); + + JSUListIterator iterator; + iterator = mCacheBlockList.getFirst(); + while (iterator != mCacheBlockList.getEnd()) { + JKRFreeToHeap(mParentHeap, iterator->mMemoryPtr); + mCacheBlockList.remove(&iterator.getObject()->mCacheBlockLink); + CCacheBlock* cacheBlock = (iterator++).getObject(); + delete cacheBlock; + } } /* 802B7904-802B79E4 .text removeResource__12JKRFileCacheFPv */ -void JKRFileCache::removeResource(void*) { - /* Nonmatching */ +bool JKRFileCache::removeResource(void* resource) { + JUT_ASSERT(463, isMounted()); + + CCacheBlock* cacheBlock = findCacheBlock(resource); + if (!cacheBlock) + return false; + + u32 referenceCount = cacheBlock->mReferenceCount - 1; + cacheBlock->mReferenceCount = referenceCount; + if (referenceCount == 0) { + JKRFreeToHeap(mParentHeap, resource); + mCacheBlockList.remove(&cacheBlock->mCacheBlockLink); + delete cacheBlock; + } + + return true; } /* 802B79E4-802B7AA8 .text detachResource__12JKRFileCacheFPv */ -void JKRFileCache::detachResource(void*) { - /* Nonmatching */ +bool JKRFileCache::detachResource(void* resource) { + JUT_ASSERT(490, isMounted()); + + CCacheBlock* cacheBlock = findCacheBlock(resource); + if (!cacheBlock) + return false; + + mCacheBlockList.remove(&cacheBlock->mCacheBlockLink); + delete cacheBlock; + return true; } /* 802B7AA8-802B7ADC .text getResSize__12JKRFileCacheCFPCv */ -void JKRFileCache::getResSize(const void*) const { - /* Nonmatching */ +u32 JKRFileCache::getResSize(const void* resource) const { + CCacheBlock* cacheBlock = findCacheBlock(resource); + if (cacheBlock == NULL) { + return -1; + } else { + return cacheBlock->mFileSize; + } } /* 802B7ADC-802B7B58 .text countFile__12JKRFileCacheCFPCc */ -void JKRFileCache::countFile(const char*) const { - /* Nonmatching */ +u32 JKRFileCache::countFile(const char* path) const { + DVDDirectory dir; + DVDDirectoryEntry dirEntry; + + u32 count = 0; + char* name = getDvdPathName(path); + BOOL result = DVDOpenDir(name, &dir); + if (result != 0) { + while (result = DVDReadDir(&dir, &dirEntry), result != FALSE) { + count = count + 1; + } + + DVDCloseDir(&dir); + } + + JKRFreeToSysHeap(name); + return count; } /* 802B7B58-802B7BF4 .text getFirstFile__12JKRFileCacheCFPCc */ -void JKRFileCache::getFirstFile(const char*) const { - /* Nonmatching */ +JKRFileFinder* JKRFileCache::getFirstFile(const char* path) const { + char* name = getDvdPathName(path); + JKRHeap* systemHeap = JKRHeap::getSystemHeap(); + JKRDvdFinder* finder = new (systemHeap, 0) JKRDvdFinder(name); + JKRFreeToSysHeap(name); + + if (finder->isAvailable() != true) { + delete finder; + return NULL; + } + + return finder; } /* 802B7BF4-802B7C20 .text findCacheBlock__12JKRFileCacheCFPCv */ -void JKRFileCache::findCacheBlock(const void*) const { - /* Nonmatching */ +JKRFileCache::CCacheBlock* JKRFileCache::findCacheBlock(const void* resource) const { + JSUListIterator iterator; + for (iterator = mCacheBlockList.getFirst(); iterator != mCacheBlockList.getEnd(); ++iterator) { + if (iterator->mMemoryPtr == resource) { + return iterator.getObject(); + } + } + + return NULL; } /* 802B7C20-802B7C4C .text findCacheBlock__12JKRFileCacheCFUl */ -void JKRFileCache::findCacheBlock(unsigned long) const { - /* Nonmatching */ +JKRFileCache::CCacheBlock* JKRFileCache::findCacheBlock(u32 fileID) const { + JSUListIterator iterator; + for (iterator = mCacheBlockList.getFirst(); iterator != mCacheBlockList.getEnd(); ++iterator) { + if (iterator->mFileId == fileID) { + return iterator.getObject(); + } + } + + return NULL; } /* 802B7C4C-802B7D58 .text findFile__12JKRFileCacheCFPcPCc */ -void JKRFileCache::findFile(char*, const char*) const { - /* Nonmatching */ +bool JKRFileCache::findFile(char* path, const char* fileName) const { + DVDDirectory dir; + DVDDirectoryEntry dirEntry; + + bool result = false; + u32 pathLength = strlen(path); + if (DVDOpenDir(path, &dir)) { + while (DVDReadDir(&dir, &dirEntry)) { + if (dirEntry.is_directory) { + char* endOfPath = path + pathLength; + *endOfPath = '/'; + strcpy(path + pathLength + 1, dirEntry.name); + result = findFile(path, fileName); + if (result) + break; + *endOfPath = '\0'; + } else { + result = (strcmp(fileName, dirEntry.name) == 0); + if (result) { + strcat(path, "/"); + strcat(path, fileName); + break; + } + } + } + + DVDCloseDir(&dir); + } + + return result; } /* 802B7D58-802B7E60 .text getDvdPathName__12JKRFileCacheCFPCc */ -void JKRFileCache::getDvdPathName(const char*) const { - /* Nonmatching */ +char* JKRFileCache::getDvdPathName(const char* path) const { + char* newPath; + if (path[0] == '/') { + u32 length = strlen(mRootPath) + strlen(path) + 2; + newPath = (char*)JKRAllocFromSysHeap(length, 1); + strcpy(newPath, mRootPath); + if (path[1]) { + if (mRootPath[1] == 0) { + strcat(newPath, path + 1); + } else { + strcat(newPath, path); + } + } + } else { + u32 length = strlen(mCurrentPath) + strlen(path) + 2; + newPath = (char*)JKRAllocFromSysHeap(length, 1); + strcpy(newPath, mCurrentPath); + strcat(newPath, path); + } + + convStrLower(newPath); + return newPath; } /* 802B7E60-802B7EA8 .text convStrLower__12JKRFileCacheCFPc */ -void JKRFileCache::convStrLower(char*) const { - /* Nonmatching */ +void JKRFileCache::convStrLower(char* buffer) const { + while (*buffer) { + *buffer++ = tolower(*buffer); + } } /* 802B7EA8-802B7F04 .text __ct__Q212JKRFileCache11CCacheBlockFUlUlPCv */ -JKRFileCache::CCacheBlock::CCacheBlock(unsigned long, unsigned long, const void*) { - /* Nonmatching */ -} - -/* 802B7F04-802B7F30 .text getFsResource__12JKRFileCacheFPCc */ -void JKRFileCache::getFsResource(const char*) { - /* Nonmatching */ -} - -/* 802B7F30-802B7F5C .text getNameResource__12JKRFileCacheFUlPCc */ -void JKRFileCache::getNameResource(unsigned long, const char*) { - /* Nonmatching */ -} - -/* 802B7F5C-802B7F88 .text readFsResource__12JKRFileCacheFPvUlPCc */ -void JKRFileCache::readFsResource(void*, unsigned long, const char*) { - /* Nonmatching */ -} - -/* 802B7F88-802B7FB4 .text readNameResource__12JKRFileCacheFPvUlUlPCc */ -void JKRFileCache::readNameResource(void*, unsigned long, unsigned long, const char*) { - /* Nonmatching */ +JKRFileCache::CCacheBlock::CCacheBlock(u32 fileId, u32 fileSize, const void* resource) : mCacheBlockLink(this) { + mReferenceCount = 1; + mFileId = fileId; + mFileSize = fileSize; + mMemoryPtr = (void*)resource; // todo: don't cast away const } From a320fd26941b98421ae896c35a962cdd8924a2cb Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 19:21:37 -0700 Subject: [PATCH 78/89] JKRDvdFile --- include/JSystem/JKernel/JKRDvdFile.h | 2 +- src/JSystem/JKernel/JKRDvdFile.cpp | 133 ++++++++++++++++++++------- 2 files changed, 103 insertions(+), 32 deletions(-) diff --git a/include/JSystem/JKernel/JKRDvdFile.h b/include/JSystem/JKernel/JKRDvdFile.h index 9fe03fda6..1ea018241 100644 --- a/include/JSystem/JKernel/JKRDvdFile.h +++ b/include/JSystem/JKernel/JKRDvdFile.h @@ -30,7 +30,7 @@ public: /* vt[04] */ virtual void close(void); /* override */ /* vt[05] */ virtual s32 readData(void*, s32, s32); /* override */ /* vt[06] */ virtual s32 writeData(const void*, s32, s32); /* override */ - /* vt[07] */ virtual s32 getFileSize(void) const; /* override */ + /* vt[07] */ virtual s32 getFileSize(void) const { return mFileInfo.length; } /* override */ /* vt[08] */ virtual bool open(s32); // private: diff --git a/src/JSystem/JKernel/JKRDvdFile.cpp b/src/JSystem/JKernel/JKRDvdFile.cpp index 3cdc52ce2..dc4898e6b 100644 --- a/src/JSystem/JKernel/JKRDvdFile.cpp +++ b/src/JSystem/JKernel/JKRDvdFile.cpp @@ -4,74 +4,145 @@ // #include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JUtility/JUTAssert.h" #include "dolphin/types.h" +JSUList JKRDvdFile::sDvdList; + /* 802BC6B4-802BC728 .text __ct__10JKRDvdFileFv */ -JKRDvdFile::JKRDvdFile() { - /* Nonmatching */ +JKRDvdFile::JKRDvdFile() : mDvdLink(this) { + initiate(); } /* 802BC728-802BC7D0 .text __ct__10JKRDvdFileFPCc */ -JKRDvdFile::JKRDvdFile(const char*) { - /* Nonmatching */ +JKRDvdFile::JKRDvdFile(const char* name) : mDvdLink(this) { + initiate(); + bool result = open(name); + mIsAvailable = result; + // weird code. doesn't match without this, maybe remains from assert or something? + if (mIsAvailable) { + return; + } else { + return; + } } /* 802BC7D0-802BC878 .text __ct__10JKRDvdFileFl */ -JKRDvdFile::JKRDvdFile(long) { - /* Nonmatching */ +JKRDvdFile::JKRDvdFile(s32 entryNum) : mDvdLink(this) { + initiate(); + bool result = open(entryNum); + mIsAvailable = result; + // weird code. doesn't match without this, maybe remains from assert or something? + if (mIsAvailable) { + return; + } else { + return; + } } /* 802BC878-802BC914 .text __dt__10JKRDvdFileFv */ JKRDvdFile::~JKRDvdFile() { - /* Nonmatching */ + close(); } /* 802BC914-802BC980 .text initiate__10JKRDvdFileFv */ void JKRDvdFile::initiate() { - /* Nonmatching */ + mDvdFile = this; + OSInitMutex(&mMutex1); + OSInitMutex(&mMutex2); + OSInitMessageQueue(&mMessageQueue2, &mMessage2, 1); + OSInitMessageQueue(&mMessageQueue1, &mMessage1, 1); + mOSThread = NULL; + field_0x50 = 0; + field_0x58 = 0; } /* 802BC980-802BC9F4 .text open__10JKRDvdFileFPCc */ -void JKRDvdFile::open(const char*) { - /* Nonmatching */ +bool JKRDvdFile::open(const char* name) { + if (!mIsAvailable) { + mIsAvailable = DVDOpen(name, &mFileInfo); + if (mIsAvailable) { + getDvdList().append(&mDvdLink); + getStatus(); + } + } + return mIsAvailable; } /* 802BC9F4-802BCA68 .text open__10JKRDvdFileFl */ -void JKRDvdFile::open(long) { - /* Nonmatching */ +bool JKRDvdFile::open(s32 entryNum) { + if (!mIsAvailable) { + mIsAvailable = DVDFastOpen(entryNum, &mFileInfo); + if (mIsAvailable) { + getDvdList().append(&mDvdLink); + getStatus(); + } + } + return mIsAvailable; } /* 802BCA68-802BCAE0 .text close__10JKRDvdFileFv */ void JKRDvdFile::close() { - /* Nonmatching */ + if (mIsAvailable) { + s32 result = DVDClose(&mFileInfo); + if (result != 0) { + mIsAvailable = false; + getDvdList().remove(&mDvdLink); + } else { + OSPanic(__FILE__, 212, "cannot close DVD file\n"); + } + } } /* 802BCAE0-802BCBCC .text readData__10JKRDvdFileFPvll */ -void JKRDvdFile::readData(void*, long, long) { - /* Nonmatching */ +s32 JKRDvdFile::readData(void* param_1, s32 length, s32 param_3) { + /* clang-format off */ + JUT_ASSERT(236, ( length & 0x1f ) == 0); + /* clang-format on */ + + OSLockMutex(&mMutex1); + if (mOSThread) { + OSUnlockMutex(&mMutex1); + return -1; + } + + mOSThread = OSGetCurrentThread(); + + s32 result = -1; + s32 readAsyncResult = + DVDReadAsyncPrio(&mFileInfo, param_1, length, param_3, JKRDvdFile::doneProcess, 2); + if (readAsyncResult) { + result = sync(); + } + + mOSThread = NULL; + OSUnlockMutex(&mMutex1); + + return result; } /* 802BCBCC-802BCC24 .text writeData__10JKRDvdFileFPCvll */ -void JKRDvdFile::writeData(const void*, long, long) { - /* Nonmatching */ +s32 JKRDvdFile::writeData(const void* param_0, s32 length, s32 param_2) { + /* clang-format off */ + JUT_ASSERT(340, ( length & 0x1f ) == 0); + /* clang-format on */ + + return -1; } /* 802BCC24-802BCC78 .text sync__10JKRDvdFileFv */ -void JKRDvdFile::sync() { - /* Nonmatching */ +s32 JKRDvdFile::sync() { + OSMessage message; + OSLockMutex(&mMutex1); + OSReceiveMessage(&mMessageQueue2, &message, 1); + mOSThread = NULL; + OSUnlockMutex(&mMutex1); + return (int)message; } /* 802BCC78-802BCCAC .text doneProcess__10JKRDvdFileFlP11DVDFileInfo */ -void JKRDvdFile::doneProcess(long, DVDFileInfo*) { - /* Nonmatching */ -} - -/* 802BCCAC-802BCCB4 .text getFileSize__10JKRDvdFileCFv */ -void JKRDvdFile::getFileSize() const { - /* Nonmatching */ -} - -/* 802BCCF8-802BCD4C .text __dt__21JSUList<10JKRDvdFile>Fv */ -JSUList::~JSUList() { - /* Nonmatching */ +void JKRDvdFile::doneProcess(s32 id, DVDFileInfo* fileInfo) { + // fileInfo->field_0x3c looks like some kind of user pointer? + JKRDvdFile* dvdFile = *(JKRDvdFile**)((u8*)fileInfo + 0x3c); + OSSendMessage(&dvdFile->mMessageQueue2, (OSMessage)id, OS_MESSAGE_NOBLOCK); } From 3f8cc0a6d9703e2a032450aae6f51ace6c6e328b Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Fri, 22 Sep 2023 21:40:56 -0700 Subject: [PATCH 79/89] JKRDvdRipper --- configure.py | 2 +- include/JSystem/JKernel/JKRDvdRipper.h | 3 +- src/JSystem/JKernel/JKRDvdRipper.cpp | 445 +++++++++++++++++++++++-- 3 files changed, 425 insertions(+), 25 deletions(-) diff --git a/configure.py b/configure.py index 35921b930..48c0d4934 100644 --- a/configure.py +++ b/configure.py @@ -777,7 +777,7 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRCompArchive.cpp"), Object(Matching, "JSystem/JKernel/JKRFile.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdFile.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRDvdRipper.cpp"), + Object(Matching, "JSystem/JKernel/JKRDvdRipper.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdAramRipper.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDecomp.cpp"), ], diff --git a/include/JSystem/JKernel/JKRDvdRipper.h b/include/JSystem/JKernel/JKRDvdRipper.h index 139b8a7fd..7534f9ee9 100644 --- a/include/JSystem/JKernel/JKRDvdRipper.h +++ b/include/JSystem/JKernel/JKRDvdRipper.h @@ -26,6 +26,7 @@ class JKRDvdRipper { public: static JSUList sDvdAsyncList; static u32 sSzpBufferSize; + static bool errorRetry; enum EAllocDirection { UNKNOWN_EALLOC_DIRECTION = 0, @@ -42,7 +43,7 @@ public: static void* loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*); - static u8 isErrorRetry(void); + static bool isErrorRetry(void) { return errorRetry; } inline static u32 getSzpBufferSize() { return sSzpBufferSize; } }; diff --git a/src/JSystem/JKernel/JKRDvdRipper.cpp b/src/JSystem/JKernel/JKRDvdRipper.cpp index 7e2787b49..289feb668 100644 --- a/src/JSystem/JKernel/JKRDvdRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdRipper.cpp @@ -4,49 +4,448 @@ // #include "JSystem/JKernel/JKRDvdRipper.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/string.h" +#include "dolphin/os/OS.h" +#include "dolphin/vi/vi.h" +#include "global.h" + +static int JKRDecompressFromDVD(JKRDvdFile*, void*, u32, u32, u32, u32); +static int decompSZS_subroutine(u8*, u8*); +static u8* firstSrcData(); +static u8* nextSrcData(u8*); /* 802BCD4C-802BCE00 .text loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPi */ -void JKRDvdRipper::loadToMainRAM(const char*, unsigned char*, JKRExpandSwitch, unsigned long, JKRHeap*, JKRDvdRipper::EAllocDirection, unsigned long, int*) { - /* Nonmatching */ +void* JKRDvdRipper::loadToMainRAM(const char* name, u8* dst, JKRExpandSwitch expandSwitch, u32 dstLength, JKRHeap* heap, EAllocDirection allocDirection, u32 offset, int* pCompression) { + JKRDvdFile file; + if (!file.open(name)) { + return NULL; + } + return loadToMainRAM(&file, dst, expandSwitch, dstLength, heap, allocDirection, offset, pCompression); } /* 802BCE00-802BCEB4 .text loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPi */ -void JKRDvdRipper::loadToMainRAM(long, unsigned char*, JKRExpandSwitch, unsigned long, JKRHeap*, JKRDvdRipper::EAllocDirection, unsigned long, int*) { - /* Nonmatching */ +void* JKRDvdRipper::loadToMainRAM(s32 entryNumber, u8* dst, JKRExpandSwitch expandSwitch, u32 dstLength, JKRHeap* heap, EAllocDirection allocDirection, u32 offset, int* pCompression) { + JKRDvdFile file; + if (!file.open(entryNumber)) { + return NULL; + } + return loadToMainRAM(&file, dst, expandSwitch, dstLength, heap, allocDirection, offset, pCompression); } +bool JKRDvdRipper::errorRetry = true; + /* 802BCEB4-802BD324 .text loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPi */ -void JKRDvdRipper::loadToMainRAM(JKRDvdFile*, unsigned char*, JKRExpandSwitch, unsigned long, JKRHeap*, JKRDvdRipper::EAllocDirection, unsigned long, int*) { - /* Nonmatching */ +void* JKRDvdRipper::loadToMainRAM(JKRDvdFile* dvdFile, u8* dst, JKRExpandSwitch expandSwitch, u32 dstLength, JKRHeap* heap, EAllocDirection allocDirection, u32 offset, int* pCompression) { + s32 fileSizeAligned; + bool hasAllocated = false; + JKRCompression compression = COMPRESSION_NONE; + u32 expandSize; + u8 *mem = NULL; + + fileSizeAligned = ALIGN_NEXT(dvdFile->getFileSize(), 32); + if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { + u8 buffer[0x40]; + u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buffer, 32); + while (true) { + int readBytes = DVDReadPrio(dvdFile->getFileInfo(), bufPtr, 0x20, 0, 2); + if (readBytes >= 0) { + break; + } + + if (readBytes == -3 || !isErrorRetry()) { + return NULL; + } + + VIWaitForRetrace(); + } + DCInvalidateRange(bufPtr, 0x20); + + compression = JKRCheckCompressed(bufPtr); + expandSize = JKRDecompExpandSize(bufPtr); + } + + if (pCompression) { + *pCompression = (int)compression; + } + + if (expandSwitch == EXPAND_SWITCH_UNKNOWN1 && compression != COMPRESSION_NONE) { + if (dstLength != 0 && expandSize > dstLength) { + expandSize = dstLength; + } + if (dst == NULL) { + dst = (u8 *)JKRAllocFromHeap(heap, expandSize, allocDirection == ALLOC_DIRECTION_FORWARD ? 32 : -32); + hasAllocated = true; + } + if (dst == NULL) { + return NULL; + } + if (compression == COMPRESSION_YAY0) { + mem = (u8 *)JKRAllocFromHeap((heap), fileSizeAligned, 32); + if (mem == NULL) { + if (hasAllocated == true) { + i_JKRFree(dst); + return NULL; + } + } + } + } else { + if (dst == NULL) { + dst = (u8 *)JKRAllocFromHeap(heap, fileSizeAligned - offset, allocDirection == ALLOC_DIRECTION_FORWARD ? 32 : -32); + hasAllocated = true; + } + if (dst == NULL) { + return NULL; + } + } + if (compression == COMPRESSION_NONE) { + JKRCompression compression2 = COMPRESSION_NONE; // maybe for a sub archive? + + if (offset != 0) { + u8 buffer[0x40]; + u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buffer, 32); + while (true) { + int readBytes = DVDReadPrio(dvdFile->getFileInfo(), bufPtr, 32, (s32)offset, 2); + if (readBytes >= 0) { + break; + } + + if (readBytes == -3 || !isErrorRetry()) { + if (hasAllocated == true) { + i_JKRFree(dst); + } + return NULL; + } + VIWaitForRetrace(); + } + DCInvalidateRange(bufPtr, 32); + + compression2 = JKRCheckCompressed(bufPtr); + } + if ((compression2 == COMPRESSION_NONE || expandSwitch == EXPAND_SWITCH_UNKNOWN2) || expandSwitch == EXPAND_SWITCH_UNKNOWN0) { + s32 size = fileSizeAligned - offset; + if (dstLength != 0 && dstLength < size) + size = dstLength; // probably a ternary + while (true) { + int readBytes = DVDReadPrio(dvdFile->getFileInfo(), dst, size, (s32)offset, 2); + if (readBytes >= 0) { + break; + } + + if (readBytes == -3 || !isErrorRetry()) { + if (hasAllocated == true) { + i_JKRFree(dst); + } + return NULL; + } + VIWaitForRetrace(); + } + + return dst; + } + else if (compression2 == COMPRESSION_YAZ0) { + JKRDecompressFromDVD(dvdFile, dst, fileSizeAligned, dstLength, 0, offset); + } else { +#if VERSION == VERSION_JPN + OSPanic(__FILE__, 337, "Sorry, not prepared for SZP resource\n"); +#else + OSPanic(__FILE__, 314, "Sorry, not prepared for SZP resource\n"); +#endif + } + return dst; + } + else if (compression == COMPRESSION_YAY0) + { + // SZP decompression + // s32 readoffset = startOffset; + if (offset != 0) { +#if VERSION == VERSION_JPN + OSPanic(__FILE__, 347, ":::Not support SZP with offset read"); +#else + OSPanic(__FILE__, 324, ":::Not support SZP with offset read"); +#endif + } + while (true) { + int readBytes = DVDReadPrio(dvdFile->getFileInfo(), mem, fileSizeAligned, 0, 2); + if (readBytes >= 0) + break; + + if (readBytes == -3 || !isErrorRetry()) { + if (hasAllocated == true) + i_JKRFree(dst); + + i_JKRFree(mem); + return NULL; + } + VIWaitForRetrace(); + } + JKRDecompress(mem, dst, expandSize, offset); + i_JKRFree(mem); + return dst; + } else if (compression == COMPRESSION_YAZ0) { + if (JKRDecompressFromDVD(dvdFile, dst, fileSizeAligned, expandSize, offset, 0) != 0u) + { + if (hasAllocated) + i_JKRFree(dst); + dst = NULL; + } + return dst; + } + else if (hasAllocated) + { + i_JKRFree(dst); + dst = NULL; + } + return NULL; } +JSUList JKRDvdRipper::sDvdAsyncList; +static OSMutex decompMutex; +u32 JKRDvdRipper::sSzpBufferSize = 0x00000400; +static u8* szpBuf; +static u8* szpEnd; +static u8* refBuf; +static u8* refEnd; +static u8* refCurrent; +static u32 srcOffset; +static u32 transLeft; +static u8* srcLimit; +static JKRDvdFile* srcFile; +static u32 fileOffset; +static u32 readCount; +static u32 maxDest; +static bool isInitMutex; + /* 802BD324-802BD4F0 .text JKRDecompressFromDVD__FP10JKRDvdFilePvUlUlUlUl */ -void JKRDecompressFromDVD(JKRDvdFile*, void*, unsigned long, unsigned long, unsigned long, unsigned long) { - /* Nonmatching */ +static int JKRDecompressFromDVD(JKRDvdFile* dvdFile, void* dst, u32 fileSize, u32 inMaxDest, u32 inFileOffset, u32 inSrcOffset) { + BOOL interrupts = OSDisableInterrupts(); + if (isInitMutex == false) { + OSInitMutex(&decompMutex); + isInitMutex = true; + } + OSRestoreInterrupts(interrupts); + OSLockMutex(&decompMutex); + int bufSize = JKRDvdRipper::getSzpBufferSize(); + szpBuf = (u8 *)JKRAllocFromSysHeap(bufSize, -0x20); +#if VERSION == VERSION_JPN + JUT_ASSERT(913, szpBuf != 0); +#else + JUT_ASSERT(884, szpBuf != 0); +#endif + + szpEnd = szpBuf + bufSize; + if (inFileOffset != 0) { + refBuf = (u8 *)JKRAllocFromSysHeap(0x1120, -4); +#if VERSION == VERSION_JPN + JUT_ASSERT(922, refBuf != 0); +#else + JUT_ASSERT(893, refBuf != 0); +#endif + refEnd = refBuf + 0x1120; + refCurrent = refBuf; + } else { + refBuf = NULL; + } + srcFile = dvdFile; + srcOffset = inSrcOffset; + transLeft = fileSize - inSrcOffset; + fileOffset = inFileOffset; + readCount = 0; + maxDest = inMaxDest; + u8 *data = firstSrcData(); + u32 result = (data != NULL) ? decompSZS_subroutine(data, (u8 *)dst) : -1; // figure out correct datatypes + u32 decompressedSize = ((u32*)data)[1]; + i_JKRFree(szpBuf); + if (refBuf) { + i_JKRFree(refBuf); + } + DCStoreRangeNoSync(dst, decompressedSize); + OSUnlockMutex(&decompMutex); + return result; } /* 802BD4F0-802BD784 .text decompSZS_subroutine__FPUcPUc */ -void decompSZS_subroutine(unsigned char*, unsigned char*) { - /* Nonmatching */ +static int decompSZS_subroutine(u8* src, u8* dest) { + u8 *endPtr; + s32 validBitCount = 0; + s32 currCodeByte = 0; + u32 ts = 0; + + if (src[0] != 'Y' || src[1] != 'a' || src[2] != 'z' || src[3] != '0') { + return -1; + } + + SYaz0Header *header = (SYaz0Header *)src; + endPtr = dest + (header->length - fileOffset); + if (endPtr > dest + maxDest) { + endPtr = dest + maxDest; + } + + src += 0x10; + do { + if (validBitCount == 0) { + if ((src > srcLimit) && transLeft) { + src = nextSrcData(src); + if (!src) { + return -1; + } + } + currCodeByte = *src; + validBitCount = 8; + src++; + } + if (currCodeByte & 0x80) { + if (fileOffset != 0) { + if (readCount >= fileOffset) { + *dest = *src; + dest++; + ts++; + if (dest == endPtr) { + break; + } + } + *(refCurrent++) = *src; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + src++; + } else { + *dest = *src; + dest++; + src++; + ts++; + if (dest == endPtr) { + break; + } + } + readCount++; + } else { + u32 dist = ((src[0] & 0x0f) << 8) | src[1]; + s32 numBytes = src[0] >> 4; + src += 2; + u8 *copySource; + if (fileOffset != 0) { + copySource = refCurrent - dist - 1; + if (copySource < refBuf) { + copySource += refEnd - refBuf; + } + } else { + copySource = dest - dist - 1; + } + if (numBytes == 0) { + numBytes = *src + 0x12; + src += 1; + } else { + numBytes += 2; + } + if (fileOffset != 0) { + do { + if (readCount >= fileOffset) { + *dest = *copySource; + dest++; + ts++; + if (dest == endPtr) { + break; + } + } + *(refCurrent++) = *copySource; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + copySource++; + if (copySource == refEnd) { + copySource = refBuf; + } + readCount++; + numBytes--; + } while (numBytes != 0); + } else { + do { + *dest = *copySource; + dest++; + ts++; + if (dest == endPtr) { + break; + } + readCount++; + numBytes--; + copySource++; + } while (numBytes != 0); + } + } + currCodeByte <<= 1; + validBitCount--; + } while (dest < endPtr); + return 0; } /* 802BD784-802BD84C .text firstSrcData__Fv */ -void firstSrcData() { - /* Nonmatching */ +static u8* firstSrcData() { + srcLimit = szpEnd - 0x19; + u8* buffer = szpBuf; + u32 bufSize = szpEnd - buffer; + u32 length = transLeft < bufSize ? transLeft : bufSize; + + while (true) { + int result = DVDReadPrio(srcFile->getFileInfo(), buffer, length, srcOffset, 2); + if (result >= 0) { + break; + } + + if (result == -3 || !JKRDvdRipper::isErrorRetry()) { + return NULL; + } + VIWaitForRetrace(); + } + + srcOffset += length; + transLeft -= length; + if (transLeft == 0) { + srcLimit = buffer + length; + } + return buffer; } /* 802BD84C-802BD974 .text nextSrcData__FPUc */ -void nextSrcData(unsigned char*) { - /* Nonmatching */ -} +static u8* nextSrcData(u8* src) { + u32 limit = szpEnd - src; + u8 *buf; + if (IS_NOT_ALIGNED(limit, 0x20)) { + buf = szpBuf + 0x20 - (limit & (0x20 - 1)); + } else { + buf = szpBuf; + } -/* 802BD974-802BD97C .text isErrorRetry__12JKRDvdRipperFv */ -void JKRDvdRipper::isErrorRetry() { - /* Nonmatching */ -} + memcpy(buf, src, limit); + u32 transSize = (u32)(szpEnd - (buf + limit)); + if (transSize > transLeft) { + transSize = transLeft; + } +#if VERSION == VERSION_JPN + JUT_ASSERT(1228, transSize > 0); +#else + JUT_ASSERT(1176, transSize > 0); +#endif -/* 802BD9C0-802BDA14 .text __dt__23JSUList<12JKRDMCommand>Fv */ -JSUList::~JSUList() { - /* Nonmatching */ + while (true) { + s32 result = DVDReadPrio(srcFile->getFileInfo(), (buf + limit), transSize, srcOffset, 2); + if (result >= 0) { + break; + } + // bug: supposed to call isErrorRetry, but didn't + if (result == -3 || !JKRDvdRipper::isErrorRetry) { + return NULL; + } + + VIWaitForRetrace(); + } + srcOffset += transSize; + transLeft -= transSize; + if (transLeft == 0) { + srcLimit = transSize + (buf + limit); + } + + return buf; } From 7a09374e53dcb8d0efe1ffad0537bb1f4d09794a Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 24 Sep 2023 01:37:17 -0700 Subject: [PATCH 80/89] JKRDvdAramRipper --- include/JSystem/JKernel/JKRAramStream.h | 4 + include/JSystem/JKernel/JKRDvdAramRipper.h | 36 +- src/JSystem/JKernel/JKRDvdAramRipper.cpp | 410 +++++++++++++++++++-- 3 files changed, 400 insertions(+), 50 deletions(-) diff --git a/include/JSystem/JKernel/JKRAramStream.h b/include/JSystem/JKernel/JKRAramStream.h index 9cbd22435..cdbfbd5ca 100644 --- a/include/JSystem/JKernel/JKRAramStream.h +++ b/include/JSystem/JKernel/JKRAramStream.h @@ -64,4 +64,8 @@ inline JKRAramStream* JKRCreateAramStreamManager(long priority) { return JKRAramStream::create(priority); } +inline JKRAramStreamCommand* JKRStreamToAram_Async(JSUFileInputStream *stream, u32 addr, u32 size, u32 offset, void (*callback)(u32)) { + return JKRAramStream::write_StreamToAram_Async(stream, addr, size, offset); +} + #endif /* JKRARAMSTREAM_H */ diff --git a/include/JSystem/JKernel/JKRDvdAramRipper.h b/include/JSystem/JKernel/JKRDvdAramRipper.h index 3561a7e99..6c3ba1de7 100644 --- a/include/JSystem/JKernel/JKRDvdAramRipper.h +++ b/include/JSystem/JKernel/JKRDvdAramRipper.h @@ -13,23 +13,22 @@ public: ~JKRADCommand(); /* 0x00 */ JSULink mLink; - /* 0x10 */ int field_0x10; - /* 0x14 */ int field_0x14; - /* 0x18 */ int field_0x18; - /* 0x1C */ int field_0x1c; - /* 0x20 */ int field_0x20; - /* 0x24 */ int field_0x24; - /* 0x28 */ JKRDvdFile* mDvdFile; - /* 0x2C */ u32 field_0x2c; - /* 0x30 */ JKRAramBlock* mBlock; + /* 0x10 */ JKRDvdFile* mDvdFile; + /* 0x14 */ u32 mOffset; + /* 0x18 */ u32 field_0x18; + /* 0x1C */ u32 mAddress; + /* 0x20 */ JKRAramBlock* mBlock; + /* 0x24 */ JKRExpandSwitch mExpandSwitch; + /* 0x28 */ int field_0x28; + /* 0x2C */ int field_0x2c; + /* 0x30 */ int field_0x30; /* 0x34 */ int field_0x34; - /* 0x38 */ void (*field_0x38)(u32); - /* 0x3C */ u32 field_0x3c; - /* 0x40 */ u32 field_0x40; - /* 0x44 */ u32* field_0x44; - /* 0x48 */ int field_0x48; - /* 0x4C */ u8 field_0x4c; - /* 0x50 */ JKRAramStreamCommand* mStreamCommand; + /* 0x38 */ int field_0x38; + /* 0x3C */ int field_0x3c; + /* 0x40 */ void (*mCallback)(u32); + /* 0x44 */ int field_0x44; + /* 0x48 */ bool field_0x48; + /* 0x4C */ JKRAramStreamCommand* mStreamCommand; }; class JKRDvdFile; @@ -42,11 +41,12 @@ public: static JKRADCommand* callCommand_Async(JKRADCommand*); static bool syncAram(JKRADCommand*, int); + static u32 getSzpBufferSize() { return sSzpBufferSize; } static void setSzpBufferSize(u32 size) { sSzpBufferSize = size; } - // TODO: fix type - static u8 sDvdAramAsyncList[12]; + static JSUList sDvdAramAsyncList; static u32 sSzpBufferSize; + static bool errorRetry; }; inline JKRAramBlock *JKRDvdToAram(s32 entrynum, u32 p2, JKRExpandSwitch expSwitch, u32 p4, u32 p5) { diff --git a/src/JSystem/JKernel/JKRDvdAramRipper.cpp b/src/JSystem/JKernel/JKRDvdAramRipper.cpp index 0d2b2612c..9a6dfafef 100644 --- a/src/JSystem/JKernel/JKRDvdAramRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdAramRipper.cpp @@ -4,74 +4,420 @@ // #include "JSystem/JKernel/JKRDvdAramRipper.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramPiece.h" +#include "JSystem/JKernel/JKRAramStream.h" +#include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRDvdFile.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JSupport/JSUFileStream.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "MSL_C/string.h" +#include "dolphin/os/OSCache.h" +#include "dolphin/os/OSInterrupt.h" +#include "dolphin/vi/vi.h" +#include "global.h" + +static int JKRDecompressFromDVDToAram(JKRDvdFile*, u32, u32, u32, u32, u32); +static int decompSZS_subroutine(u8*, u32); +static u8* firstSrcData(); +static u8* nextSrcData(u8*); +static u32 dmaBufferFlush(u32); /* 802BDA14-802BDAB0 .text loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUl */ -void JKRDvdAramRipper::loadToAram(long, unsigned long, JKRExpandSwitch, unsigned long, unsigned long) { - /* Nonmatching */ +JKRAramBlock* JKRDvdAramRipper::loadToAram(s32 entryNumber, u32 address, JKRExpandSwitch expandSwitch, u32 param_3, u32 param_4) { + JKRDvdFile dvdFile; + if (!dvdFile.open(entryNumber)) { + return NULL; + } else { + return loadToAram(&dvdFile, address, expandSwitch, param_3, param_4); + } } /* 802BDAB0-802BDB50 .text loadToAram__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchUlUl */ -void JKRDvdAramRipper::loadToAram(JKRDvdFile*, unsigned long, JKRExpandSwitch, unsigned long, unsigned long) { - /* Nonmatching */ +JKRAramBlock* JKRDvdAramRipper::loadToAram(JKRDvdFile* dvdFile, u32 address, JKRExpandSwitch expandSwitch, u32 param_3, u32 param_4) { + JKRADCommand* command = loadToAram_Async(dvdFile, address, expandSwitch, NULL, param_3, param_4); + syncAram(command, 0); + + if (command->field_0x44 < 0) { + delete command; + return NULL; + } + + if (address) { + delete command; + return (JKRAramBlock*)-1; + } + + JKRAramBlock* result = command->mBlock; + delete command; + return result; } +bool JKRDvdAramRipper::errorRetry = true; + /* 802BDB50-802BDBFC .text loadToAram_Async__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchPFUl_vUlUl */ -void JKRDvdAramRipper::loadToAram_Async(JKRDvdFile*, unsigned long, JKRExpandSwitch, void (*)(unsigned long), unsigned long, unsigned long) { - /* Nonmatching */ +JKRADCommand* JKRDvdAramRipper::loadToAram_Async(JKRDvdFile* dvdFile, u32 address, JKRExpandSwitch expandSwitch, void (*callback)(u32), u32 param_4, u32 param_5) { + JKRADCommand* command = new (JKRGetSystemHeap(), -4) JKRADCommand(); + command->mDvdFile = dvdFile; + command->mAddress = address; + command->mBlock = NULL; + command->mExpandSwitch = expandSwitch; + command->mCallback = callback; + command->mOffset = param_4; + command->field_0x18 = param_5; + + if (!callCommand_Async(command)) { + delete command; + return NULL; + } + + return command; } +JSUList JKRDvdAramRipper::sDvdAramAsyncList; + /* 802BDBFC-802BDF34 .text callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand */ -void JKRDvdAramRipper::callCommand_Async(JKRADCommand*) { +JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { /* Nonmatching */ -} + s32 compression; + s32 uncompressedSize; + bool bVar1 = true; + JKRDvdFile* dvdFile = command->mDvdFile; + compression = 0; + OSLockMutex(&dvdFile->mMutex2); -/* 802BDF34-802BDFA4 .text __dt__18JSUFileInputStreamFv */ -JSUFileInputStream::~JSUFileInputStream() { - /* Nonmatching */ + if (dvdFile->field_0x50) { + bVar1 = false; + } else { + dvdFile->field_0x50 = OSGetCurrentThread(); + JSUFileInputStream* stream = new (JKRGetSystemHeap(), -4) JSUFileInputStream(dvdFile); + dvdFile->mFileStream = stream; + u32 fileSize = dvdFile->getFileSize(); + if (command->field_0x18 && fileSize > command->field_0x18) { + fileSize = command->field_0x18; + } + fileSize = ALIGN_NEXT(fileSize, 0x20); + if (command->mExpandSwitch == 1) { + u8 buffer[0x40]; + u8* bufPtr = (u8*)ALIGN_NEXT((u32)&buffer, 0x20); + while (true) { + if (DVDReadPrio(dvdFile->getFileInfo(), bufPtr, 0x20, 0, 2) >= 0) { + break; + } + + if (errorRetry == 0) { + delete stream; + return NULL; + } + + VIWaitForRetrace(); + } + DCInvalidateRange(bufPtr, 0x20); + + compression = JKRCheckCompressed(bufPtr); + uncompressedSize = JKRDecompExpandSize(bufPtr); + if (command->field_0x18 && command->field_0x18 > uncompressedSize) { + uncompressedSize = command->field_0x18; + } + } + + if (compression == 0) { + command->mExpandSwitch = EXPAND_SWITCH_UNKNOWN0; + } + + if (command->mExpandSwitch == EXPAND_SWITCH_UNKNOWN1) { + if (command->mAddress == 0 && command->mBlock == NULL) { + command->mBlock = + JKRAram::getAramHeap()->alloc(uncompressedSize, JKRAramHeap::HEAD); + if (command->mBlock) { + command->mAddress = command->mBlock->mAddress; + } + dvdFile->mBlock = command->mBlock; + } + + if (command->mBlock) { + command->mAddress = command->mBlock->mAddress; + } + + if (command->mAddress == 0) { + dvdFile->field_0x50 = NULL; + return NULL; + } + } else { + if (command->mAddress == 0 && !command->mBlock) { + command->mBlock = JKRAram::getAramHeap()->alloc(fileSize, JKRAramHeap::HEAD); + } + + if (command->mBlock) { + command->mAddress = command->mBlock->mAddress; + } + + if (command->mAddress == 0) { + dvdFile->field_0x50 = NULL; + return NULL; + } + } + + if (compression == 0) { + command->mStreamCommand = JKRStreamToAram_Async(stream, command->mAddress, fileSize - command->mOffset, command->mOffset, NULL); + } else if (compression == 1) { + command->mStreamCommand = JKRStreamToAram_Async(stream, command->mAddress, fileSize - command->mOffset, command->mOffset, NULL); + } else if (compression == 2) { + command->mStreamCommand = NULL; + JKRDecompressFromDVDToAram(command->mDvdFile, command->mAddress, fileSize, uncompressedSize, command->mOffset, 0); + } + + if (!command->mCallback) { + (*((JSUList*)&sDvdAramAsyncList)).append(&command->mLink); + } else { + command->mCallback((u32)command); + } + } + + OSUnlockMutex(&dvdFile->mMutex2); + return bVar1 == true ? command : NULL; } /* 802BDFA4-802BE078 .text syncAram__16JKRDvdAramRipperFP12JKRADCommandi */ -void JKRDvdAramRipper::syncAram(JKRADCommand*, int) { - /* Nonmatching */ +bool JKRDvdAramRipper::syncAram(JKRADCommand* command, int param_1) { + JKRDvdFile* dvdFile = command->mDvdFile; + OSLockMutex(&dvdFile->mMutex2); + + if (command->mStreamCommand) { + JKRAramStreamCommand* var1 = JKRAramStream::sync(command->mStreamCommand, param_1); + command->field_0x44 = -(var1 == NULL); + + if (param_1 != 0 && var1 == NULL) { + OSUnlockMutex(&dvdFile->mMutex2); + return false; + } + } + + (*((JSUList*)&sDvdAramAsyncList)).remove(&command->mLink); + if (command->mStreamCommand) { + delete command->mStreamCommand; + } + + delete dvdFile->mFileStream; + dvdFile->field_0x50 = NULL; + OSUnlockMutex(&dvdFile->mMutex2); + return true; } /* 802BE078-802BE0B8 .text __ct__12JKRADCommandFv */ -JKRADCommand::JKRADCommand() { - /* Nonmatching */ +JKRADCommand::JKRADCommand() : mLink(this) { + field_0x44 = 0; + field_0x48 = false; } /* 802BE0B8-802BE144 .text __dt__12JKRADCommandFv */ JKRADCommand::~JKRADCommand() { - /* Nonmatching */ + if (field_0x48 == true) { + delete mDvdFile; + } } +static OSMutex decompMutex; +u32 JKRDvdAramRipper::sSzpBufferSize = 0x00000400; +static u8* szpBuf; +static u8* szpEnd; +static u8* refBuf; +static u8* refEnd; +static u8* refCurrent; +static u8* dmaBuf; +static u8* dmaEnd; +static u8* dmaCurrent; +static u32 srcOffset; +static u32 transLeft; +static u8* srcLimit; +static JKRDvdFile* srcFile; +static u32 fileOffset; +static int readCount; +static u32 maxDest; +static bool isInitMutex; + /* 802BE144-802BE34C .text JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUl */ -void JKRDecompressFromDVDToAram(JKRDvdFile*, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long) { - /* Nonmatching */ +static int JKRDecompressFromDVDToAram(JKRDvdFile* dvdFile, u32 param_1, u32 fileSize, u32 uncompressedSize, u32 param_4, u32 param_5) { + BOOL level = OSDisableInterrupts(); + if (!isInitMutex) { + OSInitMutex(&decompMutex); + isInitMutex = true; + } + + OSRestoreInterrupts(level); + OSLockMutex(&decompMutex); + u32 bufferSize = JKRDvdAramRipper::getSzpBufferSize(); + szpBuf = (u8*)JKRAllocFromSysHeap(bufferSize, 0x20); + JUT_ASSERT(693, szpBuf != 0); + szpEnd = szpBuf + bufferSize; + refBuf = (u8*)JKRAllocFromSysHeap(0x1120, 0); + JUT_ASSERT(701, refBuf != 0); + refEnd = refBuf + 0x1120; + refCurrent = refBuf; + dmaBuf = (u8*)JKRAllocFromSysHeap(0x100, 0x20); + JUT_ASSERT(710, dmaBuf != 0); + dmaEnd = dmaBuf + 0x100; + dmaCurrent = dmaBuf; + srcFile = dvdFile; + srcOffset = param_5; + transLeft = fileSize - param_5; + fileOffset = param_4; + readCount = 0; + maxDest = uncompressedSize; + u8* first = firstSrcData(); + int result = first ? decompSZS_subroutine(first, param_1) : -1; + JKRHeap::free(szpBuf, 0); + JKRHeap::free(refBuf, 0); + JKRHeap::free(dmaBuf, 0); + OSUnlockMutex(&decompMutex); + return result; } /* 802BE34C-802BE5C0 .text decompSZS_subroutine__FPUcUl */ -void decompSZS_subroutine(unsigned char*, unsigned long) { - /* Nonmatching */ +static int decompSZS_subroutine(u8* src, u32 dest) { + u32 endAddr; + s32 validBitCount = 0; + u32 currCodeByte = 0; + u32 startDest = dest; + + if (src[0] != 'Y' || src[1] != 'a' || src[2] != 'z' || src[3] != '0') { + return -1; + } + + SYaz0Header* header = (SYaz0Header*)src; + endAddr = dest + (header->length - fileOffset); + if (endAddr > dest + maxDest) { + endAddr = dest + maxDest; + } + + src += 0x10; + do { + if (validBitCount == 0) { + if ((src > srcLimit) && transLeft) { + src = nextSrcData(src); + } + currCodeByte = *src; + validBitCount = 8; + src++; + } + if (currCodeByte & 0x80) { + if (readCount >= fileOffset) { + *(dmaCurrent++) = *src; + dest++; + if (dmaCurrent == dmaEnd) { + startDest += dmaBufferFlush(startDest); + } + if (dest == endAddr) { + break; + } + } + *(refCurrent++) = *src; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + readCount++; + src++; + } else { + u32 dist = ((src[0] & 0x0f) << 8) | src[1]; + s32 numBytes = src[0] >> 4; + src += 2; + u8* copySource = refCurrent - dist - 1; + if (copySource < refBuf) { + copySource += refEnd - refBuf; + } + if (numBytes == 0) { + numBytes = *src + 0x12; + src += 1; + } else { + numBytes += 2; + } + do { + if (readCount >= fileOffset) { + *(dmaCurrent++) = *copySource; + dest++; + if (dmaCurrent == dmaEnd) { + startDest += dmaBufferFlush(startDest); + } + if (dest == endAddr) { + break; + } + } + *(refCurrent++) = *copySource; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + copySource++; + if (copySource == refEnd) { + copySource = refBuf; + } + readCount++; + numBytes--; + } while (numBytes != 0); + } + currCodeByte <<= 1; + validBitCount--; + } while (dest < endAddr); + dmaBufferFlush(startDest); + return 0; } /* 802BE5C0-802BE674 .text firstSrcData__Fv */ -void firstSrcData() { - /* Nonmatching */ +static u8* firstSrcData() { + srcLimit = szpEnd - 0x19; + u8* buffer = szpBuf; + u32 bufSize = szpEnd - buffer; + u32 length = transLeft < bufSize ? transLeft : bufSize; + while (true) { + int result = DVDReadPrio(&srcFile->mFileInfo, buffer, length, 0, 2); + if (result >= 0) { + break; + } + if (JKRDvdAramRipper::errorRetry == 0) { + return NULL; + } + VIWaitForRetrace(); + } + srcOffset += length; + transLeft -= length; + return buffer; } /* 802BE674-802BE790 .text nextSrcData__FPUc */ -void nextSrcData(unsigned char*) { - /* Nonmatching */ +static u8* nextSrcData(u8* src) { + u32 size = szpEnd - src; + u8* dest = IS_NOT_ALIGNED(size, 0x20) ? szpBuf + 0x20 - (size & (0x20 - 1)) : szpBuf; + memcpy(dest, src, size); + u32 transSize = szpEnd - (dest + size); + if (transSize > transLeft) { + transSize = transLeft; + } + JUT_ASSERT(966, transSize > 0); + while (true) { + s32 result = DVDReadPrio(&srcFile->mFileInfo, dest + size, transSize, srcOffset, 2); + if (result >= 0) { + break; + } + if (JKRDvdAramRipper::errorRetry == 0) { + return NULL; + } + VIWaitForRetrace(); + } + srcOffset += transSize; + transLeft -= transSize; + if (transLeft == 0) { + srcLimit = dest + size + transSize; + } + return dest; } /* 802BE790-802BE7F8 .text dmaBufferFlush__FUl */ -void dmaBufferFlush(unsigned long) { - /* Nonmatching */ -} - -/* 802BE83C-802BE890 .text __dt__23JSUList<12JKRADCommand>Fv */ -JSUList::~JSUList() { - /* Nonmatching */ +static u32 dmaBufferFlush(u32 param_1) { + if (dmaCurrent == dmaBuf) { + return 0; + } + u32 size = ALIGN_NEXT(dmaCurrent - dmaBuf, 0x20); + JKRAramPiece::orderSync(0, (u32)dmaBuf, param_1, size, NULL); + dmaCurrent = dmaBuf; + return size; } From 4f4e84bbe1216dc7d3785c4dee0f2da28d12ef20 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 10:58:23 -0700 Subject: [PATCH 81/89] J3DShapeMtx fix --- include/JSystem/J3DGraphBase/J3DShapeMtx.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DShapeMtx.h b/include/JSystem/J3DGraphBase/J3DShapeMtx.h index 4a9c0c1e5..70b82b365 100644 --- a/include/JSystem/J3DGraphBase/J3DShapeMtx.h +++ b/include/JSystem/J3DGraphBase/J3DShapeMtx.h @@ -139,7 +139,6 @@ public: J3DShapeMtxYBBoardConcatView(u16 useMtxIndex) : J3DShapeMtxConcatView(useMtxIndex) {} virtual ~J3DShapeMtxYBBoardConcatView() {} - virtual u32 getType() const; virtual void load() const; }; @@ -148,7 +147,6 @@ public: J3DShapeMtxBBoardConcatView(u16 useMtxIndex) : J3DShapeMtxConcatView(useMtxIndex) {} virtual ~J3DShapeMtxBBoardConcatView() {} - virtual u32 getType() const; virtual void load() const; }; From 1e3a1cc8b18da53852436e2a83791801c7f9bc1b Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 11:00:14 -0700 Subject: [PATCH 82/89] J3DPacket fix --- configure.py | 2 +- include/JSystem/J3DGraphBase/J3DPacket.h | 22 +++++++++++----------- src/JSystem/J3DGraphBase/J3DPacket.cpp | 5 ----- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/configure.py b/configure.py index 48c0d4934..abe117f60 100644 --- a/configure.py +++ b/configure.py @@ -851,7 +851,7 @@ config.libs = [ Object(Matching, "JSystem/J3DGraphBase/J3DSys.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DVertex.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DTransform.cpp"), - Object(NonMatching, "JSystem/J3DGraphBase/J3DPacket.cpp"), + Object(Matching, "JSystem/J3DGraphBase/J3DPacket.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DShapeMtx.cpp"), Object(Matching, "JSystem/J3DGraphBase/J3DShape.cpp"), Object(NonMatching, "JSystem/J3DGraphBase/J3DMaterial.cpp"), diff --git a/include/JSystem/J3DGraphBase/J3DPacket.h b/include/JSystem/J3DGraphBase/J3DPacket.h index 737c56294..71156fbe8 100644 --- a/include/JSystem/J3DGraphBase/J3DPacket.h +++ b/include/JSystem/J3DGraphBase/J3DPacket.h @@ -154,16 +154,6 @@ public: /* 0x20 */ J3DDisplayListObj* mpDisplayListObj; }; // Size: 0x28 -class J3DCallBackPacket : public J3DPacket { -public: - ~J3DCallBackPacket(); - virtual void draw(); - -public: - typedef void (*CallBack)(J3DCallBackPacket * pPacket, u32 timing); - CallBack mpCallBack; -}; - class J3DShapePacket : public J3DDrawPacket { public: J3DShapePacket(); @@ -202,7 +192,6 @@ public: void addShapePacket(J3DShapePacket*); void beginDiff(); void endDiff(); - bool isSame(J3DMatPacket*) const; J3DMaterial* getMaterial() const { return mpMaterial; } J3DShapePacket* getShapePacket() const { return mpShapePacket; } @@ -217,6 +206,7 @@ public: virtual ~J3DMatPacket(); virtual int entry(J3DDrawBuffer*); virtual void draw(); + virtual bool isSame(J3DMatPacket*) const; public: /* 0x28 */ J3DShapePacket* mpInitShapePacket; @@ -227,4 +217,14 @@ public: /* 0x3C */ J3DMaterialAnm* mpMaterialAnm; }; // Size: 0x40 +class J3DCallBackPacket : public J3DPacket { +public: + virtual ~J3DCallBackPacket() {} + virtual void draw(); + +public: + typedef void (*CallBack)(J3DCallBackPacket * pPacket, u32 timing); + CallBack mpCallBack; +}; + #endif /* J3DPACKET_H */ diff --git a/src/JSystem/J3DGraphBase/J3DPacket.cpp b/src/JSystem/J3DGraphBase/J3DPacket.cpp index 9e2e58854..82db2c6fd 100644 --- a/src/JSystem/J3DGraphBase/J3DPacket.cpp +++ b/src/JSystem/J3DGraphBase/J3DPacket.cpp @@ -379,8 +379,3 @@ bool J3DMatPacket::isSame(J3DMatPacket* pOther) const { /* 802DB978-802DB97C .text draw__9J3DPacketFv */ void J3DPacket::draw() { } - -/* 802DB97C-802DB9D8 .text __dt__17J3DCallBackPacketFv */ -J3DCallBackPacket::~J3DCallBackPacket() { - /* Nonmatching */ -} From 76f4e19cdcd18b5bd7b089822112b5b4a2890c3b Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 11:58:08 -0700 Subject: [PATCH 83/89] JUTConsole closer --- include/JSystem/JGadget/linklist.h | 28 +++++++++++-- include/JSystem/JUtility/JUTConsole.h | 54 ++++++++++++------------- src/JSystem/JUtility/JUTConsole.cpp | 58 ++++++++++++++++----------- 3 files changed, 87 insertions(+), 53 deletions(-) diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h index 6a30e2a72..f865c62f4 100644 --- a/include/JSystem/JGadget/linklist.h +++ b/include/JSystem/JGadget/linklist.h @@ -20,9 +20,8 @@ struct TNodeLinkList { struct iterator { iterator(TLinkListNode* pNode) { node = pNode; } iterator(const iterator& iter) { *this = iter; } - iterator& operator++() { - node = node->getNext(); - return *this; + operator bool() const { + return node != NULL; } TLinkListNode* node; @@ -31,6 +30,9 @@ struct TNodeLinkList { struct const_iterator { const_iterator(TLinkListNode* pNode) { node = pNode; } const_iterator(const const_iterator& iter) { *this = iter; } + operator bool() const { + return node != NULL; + } TLinkListNode* node; }; @@ -53,11 +55,17 @@ struct TNodeLinkList { return iter; } + const_iterator begin() const { + const_iterator iter(ocObject_.mNext); + return iter; + } + ~TNodeLinkList(); iterator erase(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList::iterator); iterator erase(JGadget::TNodeLinkList::iterator); void splice(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList&, JGadget::TNodeLinkList::iterator); + iterator Find(const JGadget::TLinkListNode*); iterator Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); iterator Erase(JGadget::TLinkListNode*); void Remove(JGadget::TLinkListNode*); @@ -74,6 +82,14 @@ struct TLinkList : public TNodeLinkList { iterator(TNodeLinkList::iterator iter) : TNodeLinkList::iterator(iter) {} }; + struct const_iterator : TNodeLinkList::const_iterator { + const_iterator(TNodeLinkList::const_iterator iter) : TNodeLinkList::const_iterator(iter) {} + const_iterator& operator++() { + node = node->getNext(); + return *this; + } + }; + TLinkListNode* Element_toNode(T* element) const { return &element->ocObject_; } void Insert(TLinkList::iterator iter, T* element) { @@ -98,6 +114,12 @@ struct TLinkList : public TNodeLinkList { return iter; } + TLinkList::const_iterator begin() const { + TNodeLinkList::const_iterator node_iter = TNodeLinkList::begin(); + TLinkList::const_iterator iter(node_iter); + return iter; + } + void Push_back(T* element) { TLinkList::iterator iter(TLinkList::end()); this->Insert(iter, element); diff --git a/include/JSystem/JUtility/JUTConsole.h b/include/JSystem/JUtility/JUTConsole.h index 5ec6c776a..5be1e6f47 100644 --- a/include/JSystem/JUtility/JUTConsole.h +++ b/include/JSystem/JUtility/JUTConsole.h @@ -10,8 +10,8 @@ class JUTConsole : public JKRDisposer { public: enum EConsoleType { - CONSOLE_TYPE_0 = 0, - CONSOLE_TYPE_1 = 1, + ACTIVE = 0, + INACTIVE = 1, CONSOLE_TYPE_2 = 2, }; @@ -22,21 +22,21 @@ public: /* 0x3 */ OUTPUT_OSR_AND_CONSOLE, }; - /* 802E73E4 */ static JUTConsole* create(unsigned int, void*, u32); - /* 802E7354 */ static JUTConsole* create(unsigned int, unsigned int, JKRHeap*); - /* 802E746C */ JUTConsole(unsigned int, unsigned int, bool); - /* 802E75CC */ static size_t getObjectSizeFromBufferSize(unsigned int, unsigned int); - /* 802E75DC */ static size_t getLineFromObjectSize(u32, unsigned int); - /* 802E75EC */ void clear(); - /* 802E7648 */ void doDraw(JUTConsole::EConsoleType) const; - /* 802E7BB8 */ void print_f(char const*, ...); - /* 802E7C38 */ void print(char const*); - /* 802E7F7C */ void dumpToTerminal(unsigned int); - /* 802E80A8 */ void scroll(int); - /* 802E8184 */ int getUsedLine() const; - /* 802E81A8 */ int getLineOffset() const; + static JUTConsole* create(unsigned int, void*, u32); + static JUTConsole* create(unsigned int, unsigned int, JKRHeap*); + JUTConsole(unsigned int, unsigned int, bool); + static size_t getObjectSizeFromBufferSize(unsigned int, unsigned int); + static size_t getLineFromObjectSize(u32, unsigned int); + void clear(); + void doDraw(JUTConsole::EConsoleType) const; + void print_f(char const*, ...); + void print(char const*); + void dumpToTerminal(unsigned int); + void scroll(int); + int getUsedLine() const; + int getLineOffset() const; - /* 802E755C */ virtual ~JUTConsole(); + virtual ~JUTConsole(); void setOutput(unsigned int output) { mOutput = output; } void setPosition(int x, int y) { @@ -89,16 +89,16 @@ public: void scrollToLastLine() { scroll(mMaxLines); } void scrollToFirstLine() { scroll(-mMaxLines); } -private: +public: /* 0x18 */ JGadget::TLinkListNode mListNode; private: /* 0x20 */ u32 field_0x20; - /* 0x24 */ int mMaxLines; + /* 0x24 */ s32 mMaxLines; /* 0x28 */ u8* mBuf; /* 0x2C */ bool field_0x2c; - /* 0x30 */ int field_0x30; - /* 0x34 */ int field_0x34; + /* 0x30 */ s32 field_0x30; + /* 0x34 */ s32 field_0x34; /* 0x38 */ int field_0x38; /* 0x3C */ int field_0x3c; /* 0x40 */ int mPositionX; @@ -118,13 +118,13 @@ private: class JUTConsoleManager { public: - /* 802E81CC */ JUTConsoleManager(); - /* 802E81F4 */ static JUTConsoleManager* createManager(JKRHeap*); - /* 802E8240 */ void appendConsole(JUTConsole*); - /* 802E82B0 */ void removeConsole(JUTConsole*); - /* 802E8384 */ void draw() const; - /* 802E8450 */ void drawDirect(bool) const; - /* 802E84C4 */ void setDirectConsole(JUTConsole*); + JUTConsoleManager(); + static JUTConsoleManager* createManager(JKRHeap*); + void appendConsole(JUTConsole*); + void removeConsole(JUTConsole*); + void draw() const; + void drawDirect(bool) const; + void setDirectConsole(JUTConsole*); JUTConsole* getDirectConsole() const { return mDirectConsole; } diff --git a/src/JSystem/JUtility/JUTConsole.cpp b/src/JSystem/JUtility/JUTConsole.cpp index febc5e286..28d717b46 100644 --- a/src/JSystem/JUtility/JUTConsole.cpp +++ b/src/JSystem/JUtility/JUTConsole.cpp @@ -107,21 +107,19 @@ void JUTConsole::clear() { void JUTConsole::doDraw(JUTConsole::EConsoleType consoleType) const { /* Nonmatching */ f32 font_yOffset; - s32 changeLine_1; - s32 changeLine_2; if (mVisible && (mFont != NULL || consoleType == CONSOLE_TYPE_2)) { if (mHeight != 0) { - bool temp_r30 = consoleType == CONSOLE_TYPE_0; + bool temp_r30 = consoleType == ACTIVE; font_yOffset = 2.0f + mFontSizeY; if (consoleType != CONSOLE_TYPE_2) { - if (JUTVideo::getManager() == NULL) { + if (JUTGetVideoManager() == NULL) { J2DOrthoGraph ortho(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0f); ortho.setPort(); } else { - J2DOrthoGraph ortho(0.0f, 0.0f, JUTVideo::getManager()->getFbWidth(), - JUTVideo::getManager()->getEfbHeight(), -1.0f, 1.0f); + JUTVideo * pVideo = JUTGetVideoManager(); + J2DOrthoGraph ortho(0.0f, 0.0f, pVideo->getFbWidth(), pVideo->getEfbHeight(), -1.0f, 1.0f); ortho.setPort(); } @@ -157,28 +155,24 @@ void JUTConsole::doDraw(JUTConsole::EConsoleType consoleType) const { char* linePtr; s32 curLine = field_0x30; - s32 yFactor = 0; + s32 y = 0; do { linePtr = (char*)getLinePtr(curLine); if ((u8)linePtr[-1] != NULL) { if (consoleType != CONSOLE_TYPE_2) { - mFont->drawString_scale(mPositionX, ((yFactor * font_yOffset) + mPositionY), - mFontSizeX, mFontSizeY, linePtr, true); + mFont->drawString_scale(mPositionX, ((y * font_yOffset) + mPositionY), mFontSizeX, mFontSizeY, linePtr, true); } else { - JUTDirectPrint::getManager()->drawString( - mPositionX, ((yFactor * font_yOffset) + mPositionY), linePtr); + JUTDirectPrint::getManager()->drawString(mPositionX, ((y * font_yOffset) + mPositionY), linePtr); } - changeLine_1 = curLine + 1; - yFactor += 1; - changeLine_2 = changeLine_1 & ~(-((s32)mMaxLines <= (s32)changeLine_1)); - curLine = changeLine_2; + curLine = ((curLine + 1) <= mMaxLines) ? 0 : (curLine + 1); + y++; } else { break; } - } while (yFactor < mHeight && changeLine_2 != field_0x34); + } while (y < mHeight && curLine != field_0x34); } } } @@ -268,7 +262,8 @@ void JUTConsole::dumpToTerminal(unsigned int param_0) { if (param_0 == 0) { return; } - u32 r29 = field_0x34; + + s32 r29 = field_0x34; if (param_0 != -1) { r29 = field_0x38; for (int i = 0; i != param_0; i++) { @@ -283,22 +278,24 @@ void JUTConsole::dumpToTerminal(unsigned int param_0) { } } - int r27 = 0; + s32 i = 0; OSReport("\n:::dump of console[%x]--------------------------------\n",this); - do { + while (true) { u8* r28 = getLinePtr(r29); u8 r24 = r28[-1]; if (r24 == 0) { break; } if (field_0x65) { - OSReport("[%03d] %s\n", r27, r28); + OSReport("[%03d] %s\n", i, r28); } else { OSReport("%s\n", r28); } r29 = nextIndex(r29); - r27++; - } while (r27 != field_0x34); + i++; + if (r29 == field_0x34) + break; + } OSReport(":::dump of console[%x] END----------------------------\n",this); } @@ -328,7 +325,7 @@ void JUTConsole::scroll(int scrollAmnt) { field_0x30 += mMaxLines; } - if (field_0x30 >= mMaxLines) { + if (field_0x30 >= (u32)mMaxLines) { field_0x30 -= mMaxLines; } } @@ -370,6 +367,11 @@ JUTConsoleManager* JUTConsoleManager::createManager(JKRHeap* pHeap) { /* 802CB380-802CB4C4 .text appendConsole__17JUTConsoleManagerFP10JUTConsole */ void JUTConsoleManager::appendConsole(JUTConsole* console) { /* Nonmatching */ + JUT_ASSERT(0x3bf, sManager != 0 && console != 0); + + // need to figure out how TLinkList works + JGadget::TLinkListNode node = console->mListNode; + mLinkList.Find(&node); } /* 802CB4C4-802CB674 .text removeConsole__17JUTConsoleManagerFP10JUTConsole */ @@ -380,6 +382,16 @@ void JUTConsoleManager::removeConsole(JUTConsole* console) { /* 802CB674-802CB740 .text draw__17JUTConsoleManagerCFv */ void JUTConsoleManager::draw() const { /* Nonmatching */ + + // need to figure out how TLinkList works + for (JGadget::TLinkList::const_iterator iter = mLinkList.begin(); iter; ++iter) { + const JUTConsole * pConsole = (const JUTConsole*) (&iter.node - offsetof(JUTConsole, mListNode)); + if (pConsole != mActiveConsole) + pConsole->doDraw(JUTConsole::INACTIVE); + } + + if (mActiveConsole != NULL) + mActiveConsole->doDraw(JUTConsole::ACTIVE); } /* 802CB740-802CB7B4 .text drawDirect__17JUTConsoleManagerCFb */ From a13590ff2133bed4d56ceb027628bdb38b11c53d Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 12:14:12 -0700 Subject: [PATCH 84/89] JKRStdHeap, JKRArchive match --- configure.py | 6 +++--- include/JSystem/JKernel/JKRArchive.h | 8 ++++---- include/JSystem/JKernel/JKRArchivePri.h | 5 ----- include/JSystem/JKernel/JKRArchivePub.h | 5 ----- include/JSystem/JKernel/JKRCompArchive.h | 2 +- src/JSystem/JKernel/JKRArchivePub.cpp | 23 ++++++++++++----------- src/JSystem/JKernel/JKRStdHeap.cpp | 2 +- 7 files changed, 21 insertions(+), 30 deletions(-) delete mode 100644 include/JSystem/JKernel/JKRArchivePri.h delete mode 100644 include/JSystem/JKernel/JKRArchivePub.h diff --git a/configure.py b/configure.py index abe117f60..962df3413 100644 --- a/configure.py +++ b/configure.py @@ -756,7 +756,7 @@ config.libs = [ "JKernel", [ Object(Matching, "JSystem/JKernel/JKRHeap.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRStdHeap.cpp"), + Object(Matching, "JSystem/JKernel/JKRStdHeap.cpp"), Object(NonMatching, "JSystem/JKernel/JKRExpHeap.cpp"), Object(Matching, "JSystem/JKernel/JKRSolidHeap.cpp"), Object(Matching, "JSystem/JKernel/JKRDisposer.cpp"), @@ -769,8 +769,8 @@ config.libs = [ Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"), Object(Matching, "JSystem/JKernel/JKRFileFinder.cpp"), Object(Matching, "JSystem/JKernel/JKRFileCache.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRArchivePub.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRArchivePri.cpp"), + Object(Matching, "JSystem/JKernel/JKRArchivePub.cpp"), + Object(Matching, "JSystem/JKernel/JKRArchivePri.cpp"), Object(Matching, "JSystem/JKernel/JKRMemArchive.cpp"), Object(NonMatching, "JSystem/JKernel/JKRAramArchive.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdArchive.cpp"), diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index ca184c2e7..f3bb0f5bd 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -41,8 +41,6 @@ inline u16 read_big_endian_u16(void* ptr) { return ((u16)uptr[0] << 8) | ((u16)uptr[1]); } -extern u32 sCurrentDirID__10JKRArchive; // JKRArchive::sCurrentDirID - class JKRArchive : public JKRFileLoader { public: struct SDirEntry { @@ -118,7 +116,6 @@ public: protected: JKRArchive(); JKRArchive(long, EMountMode); - virtual ~JKRArchive(); public: bool getDirEntry(SDirEntry*, u32) const; @@ -165,6 +162,9 @@ public: u8 getMountMode() const { return mMountMode; } bool isFileEntry(u32 param_0) { return getFileAttribute(param_0) & 1; } +protected: + virtual ~JKRArchive(); + public: /* 0x00 */ // vtable /* 0x04 */ // JKRFileLoader @@ -189,7 +189,7 @@ public: static JKRArchive* mount(void*, JKRHeap*, EMountDirection); static JKRArchive* mount(s32, EMountMode, JKRHeap*, EMountDirection); static void* getGlbResource(u32, const char*, JKRArchive*); - static void readTypeResource(void*, u32, u32, const char*, JKRArchive*); + static u32 readTypeResource(void*, u32, u32, const char*, JKRArchive*); static JKRCompression convertAttrToCompressionType(u32 attr) { #define JKRARCHIVE_ATTR_COMPRESSION 0x04 diff --git a/include/JSystem/JKernel/JKRArchivePri.h b/include/JSystem/JKernel/JKRArchivePri.h deleted file mode 100644 index a2cb65220..000000000 --- a/include/JSystem/JKernel/JKRArchivePri.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef JKRARCHIVEPRI_H -#define JKRARCHIVEPRI_H - - -#endif /* JKRARCHIVEPRI_H */ diff --git a/include/JSystem/JKernel/JKRArchivePub.h b/include/JSystem/JKernel/JKRArchivePub.h deleted file mode 100644 index bd2bdfa8a..000000000 --- a/include/JSystem/JKernel/JKRArchivePub.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef JKRARCHIVEPUB_H -#define JKRARCHIVEPUB_H - - -#endif /* JKRARCHIVEPUB_H */ diff --git a/include/JSystem/JKernel/JKRCompArchive.h b/include/JSystem/JKernel/JKRCompArchive.h index 338332fb6..4fb13152a 100644 --- a/include/JSystem/JKernel/JKRCompArchive.h +++ b/include/JSystem/JKernel/JKRCompArchive.h @@ -16,7 +16,7 @@ public: /* vt[09] */ void removeResourceAll(void); /* override */ /* vt[10] */ bool removeResource(void*); /* override */ - /* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */ + /* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */ /* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */ /* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */ diff --git a/src/JSystem/JKernel/JKRArchivePub.cpp b/src/JSystem/JKernel/JKRArchivePub.cpp index f080e84ad..23852d895 100644 --- a/src/JSystem/JKernel/JKRArchivePub.cpp +++ b/src/JSystem/JKernel/JKRArchivePub.cpp @@ -168,21 +168,22 @@ void* JKRArchive::getResource(u32 type, const char* path) { /* 802B8528-802B85F0 .text readTypeResource__10JKRArchiveFPvUlUlPCcP10JKRArchive */ // missing instructions -void JKRArchive::readTypeResource(void* buffer, u32 bufferSize, u32 type, const char* path, JKRArchive* archive) { - /* Nonmatching */ +u32 JKRArchive::readTypeResource(void* buffer, u32 bufferSize, u32 type, const char* path, JKRArchive* archive) { + u32 ret = 0; + if (archive) { - archive->readResource(buffer, bufferSize, type, path); - return; - } - JSUListIterator iterator; - for (iterator = sVolumeList.getFirst(); iterator != sVolumeList.getEnd(); iterator++) { - if (iterator->getVolumeType() == 'RARC') { - u32 result = iterator->readResource(buffer, bufferSize, type, path); - if (result != 0) { - return; + ret = archive->readResource(buffer, bufferSize, type, path); + } else { + for (JSUListIterator it = sVolumeList.getFirst(); it != sVolumeList.getEnd(); it++) { + if (it->getVolumeType() == 'RARC') { + ret = it->readResource(buffer, bufferSize, type, path); + if (ret != 0) + break; } } } + + return ret; } /* 802B85F0-802B86DC .text readResource__10JKRArchiveFPvUlUlPCc */ diff --git a/src/JSystem/JKernel/JKRStdHeap.cpp b/src/JSystem/JKernel/JKRStdHeap.cpp index 015167447..147e417e4 100644 --- a/src/JSystem/JKernel/JKRStdHeap.cpp +++ b/src/JSystem/JKernel/JKRStdHeap.cpp @@ -24,10 +24,10 @@ JKRStdHeap* JKRStdHeap::create(u32 size, JKRHeap* parent, bool errorFlag) { } u8* memory = (u8*)JKRAllocFromHeap(parent, alignedSize, 0x20); u32 stdHeapSize = ALIGN_NEXT(sizeof(JKRStdHeap), 0x20); + u8* dataPtr = (memory + stdHeapSize); if (!memory) { return NULL; } - u8* dataPtr = (memory + stdHeapSize); JKRStdHeap* newHeap = new(memory) JKRStdHeap(dataPtr, alignedSize - stdHeapSize, parent, errorFlag); return newHeap; } From 9cff8c08f34ef1cccbad6649b0529e8b7930c373 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 12:51:24 -0700 Subject: [PATCH 85/89] fix JKRArchivePub J --- src/JSystem/JKernel/JKRArchivePub.cpp | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/JSystem/JKernel/JKRArchivePub.cpp b/src/JSystem/JKernel/JKRArchivePub.cpp index 23852d895..aa13e7dcd 100644 --- a/src/JSystem/JKernel/JKRArchivePub.cpp +++ b/src/JSystem/JKernel/JKRArchivePub.cpp @@ -134,7 +134,12 @@ void* JKRArchive::getGlbResource(u32 param_0, const char* path, JKRArchive* arch /* 802B8380-802B8450 .text getResource__10JKRArchiveFPCc */ void* JKRArchive::getResource(const char* path) { +#if VERSION == VERSION_JP + JUT_ASSERT(337, isMounted()); +#else JUT_ASSERT(285, isMounted()); +#endif + SDIFileEntry* fileEntry; if (*path == '/') { fileEntry = findFsResource(path + 1, 0); @@ -151,7 +156,12 @@ void* JKRArchive::getResource(const char* path) { /* 802B8450-802B8528 .text getResource__10JKRArchiveFUlPCc */ void* JKRArchive::getResource(u32 type, const char* path) { +#if VERSION == VERSION_JP + JUT_ASSERT(384, isMounted()); +#else JUT_ASSERT(332, isMounted()); +#endif + SDIFileEntry* fileEntry; if (type == 0 || type == '????') { fileEntry = findNameResource(path); @@ -188,7 +198,12 @@ u32 JKRArchive::readTypeResource(void* buffer, u32 bufferSize, u32 type, const c /* 802B85F0-802B86DC .text readResource__10JKRArchiveFPvUlUlPCc */ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u32 type, const char* path) { +#if VERSION == VERSION_JP + JUT_ASSERT(543, isMounted()); +#else JUT_ASSERT(491, isMounted()); +#endif + SDIFileEntry* fileEntry; if (type == 0 || type == '????') { fileEntry = findNameResource(path); @@ -207,7 +222,12 @@ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u32 type, const char* /* 802B86DC-802B87C0 .text readResource__10JKRArchiveFPvUlPCc */ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, const char* path) { +#if VERSION == VERSION_JP + JUT_ASSERT(589, isMounted()); +#else JUT_ASSERT(537, isMounted()); +#endif + SDIFileEntry* fileEntry; if (*path == '/') { fileEntry = findFsResource(path + 1, 0); @@ -226,7 +246,12 @@ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, const char* path) { /* 802B87C0-802B8878 .text readIdxResource__10JKRArchiveFPvUlUl */ u32 JKRArchive::readIdxResource(void* buffer, u32 bufferSize, u32 index) { +#if VERSION == VERSION_JP + JUT_ASSERT(645, isMounted()); +#else JUT_ASSERT(593, isMounted()); +#endif + SDIFileEntry* fileEntry = findIdxResource(index); if (fileEntry) { u32 resourceSize; @@ -239,7 +264,12 @@ u32 JKRArchive::readIdxResource(void* buffer, u32 bufferSize, u32 index) { /* 802B8878-802B8930 .text readResource__10JKRArchiveFPvUlUs */ u32 JKRArchive::readResource(void* buffer, u32 bufferSize, u16 id) { +#if VERSION == VERSION_JP + JUT_ASSERT(679, isMounted()); +#else JUT_ASSERT(627, isMounted()); +#endif + SDIFileEntry* fileEntry = findIdResource(id); if (fileEntry) { u32 resourceSize; @@ -265,7 +295,12 @@ void JKRArchive::removeResourceAll() { /* 802B89B8-802B8A54 .text removeResource__10JKRArchiveFPv */ bool JKRArchive::removeResource(void* resource) { +#if VERSION == VERSION_JP + JUT_ASSERT(755, resource != 0); +#else JUT_ASSERT(687, resource != 0); +#endif + SDIFileEntry* fileEntry = findPtrResource(resource); if (fileEntry == NULL) return false; @@ -277,7 +312,12 @@ bool JKRArchive::removeResource(void* resource) { /* 802B8A54-802B8AE4 .text detachResource__10JKRArchiveFPv */ bool JKRArchive::detachResource(void* resource) { +#if VERSION == VERSION_JP + JUT_ASSERT(787, resource != 0); +#else JUT_ASSERT(719, resource != 0); +#endif + SDIFileEntry* fileEntry = findPtrResource(resource); if (fileEntry == NULL) return false; @@ -288,7 +328,12 @@ bool JKRArchive::detachResource(void* resource) { /* 802B8AE4-802B8B6C .text getResSize__10JKRArchiveCFPCv */ u32 JKRArchive::getResSize(const void* resource) const { +#if VERSION == VERSION_JP + JUT_ASSERT(814, resource != 0); +#else JUT_ASSERT(746, resource != 0); +#endif + SDIFileEntry* fileEntry = findPtrResource(resource); if (fileEntry == NULL) return -1; From 3994791ee389b53a62358bf30fda4b1aa5fdf1ac Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 12:56:13 -0700 Subject: [PATCH 86/89] JSUInputStream match --- configure.py | 2 +- include/JSystem/JSupport/JSURandomInputStream.h | 5 ++++- src/JSystem/JKernel/JKRAramStream.cpp | 5 ----- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/configure.py b/configure.py index 962df3413..4fac3a52e 100644 --- a/configure.py +++ b/configure.py @@ -786,7 +786,7 @@ config.libs = [ "JSupport", [ Object(Matching, "JSystem/JSupport/JSUList.cpp"), - Object(NonMatching, "JSystem/JSupport/JSUInputStream.cpp"), + Object(Matching, "JSystem/JSupport/JSUInputStream.cpp"), Object(Matching, "JSystem/JSupport/JSUMemoryStream.cpp"), Object(Matching, "JSystem/JSupport/JSUFileStream.cpp"), ], diff --git a/include/JSystem/JSupport/JSURandomInputStream.h b/include/JSystem/JSupport/JSURandomInputStream.h index 49da046eb..774ad3b4d 100644 --- a/include/JSystem/JSupport/JSURandomInputStream.h +++ b/include/JSystem/JSupport/JSURandomInputStream.h @@ -8,13 +8,16 @@ public: JSURandomInputStream() {} virtual ~JSURandomInputStream() {} - /* vt[3] */ virtual s32 getAvailable() const; /* override */ /* vt[4] */ virtual s32 skip(s32); /* override */ /* vt[5] */ virtual u32 readData(void*, s32) = 0; /* vt[6] */ virtual s32 getLength() const = 0; /* vt[7] */ virtual s32 getPosition() const = 0; /* vt[8] */ virtual s32 seekPos(s32, JSUStreamSeekFrom) = 0; + /* vt[3] */ virtual s32 getAvailable() const /* override */ { + return getLength() - getPosition(); + } + // TODO: fix return types s32 align(s32); s32 peek(void*, s32); diff --git a/src/JSystem/JKernel/JKRAramStream.cpp b/src/JSystem/JKernel/JKRAramStream.cpp index 5ca40cc8e..0b42cead2 100644 --- a/src/JSystem/JKernel/JKRAramStream.cpp +++ b/src/JSystem/JKernel/JKRAramStream.cpp @@ -196,8 +196,3 @@ void JKRAramStream::setTransBuffer(u8* buffer, u32 bufferSize, JKRHeap* heap) { JKRAramStreamCommand::JKRAramStreamCommand() { mAllocatedTransferBuffer = false; } - -/* 802B6714-802B6770 .text getAvailable__20JSURandomInputStreamCFv */ -s32 JSURandomInputStream::getAvailable() const { - return getLength() - getPosition(); -} From 427136bbd6cc68f7d24599f8ed3bafe276c7a459 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 24 Sep 2023 13:29:46 -0700 Subject: [PATCH 87/89] JUTDirectFile match --- configure.py | 2 +- include/JSystem/JUtility/JUTDirectFile.h | 12 +-- include/dolphin/dvd/dvd.h | 3 + src/JSystem/JUtility/JUTDirectFile.cpp | 123 +++++++++++++++++++++-- 4 files changed, 123 insertions(+), 17 deletions(-) diff --git a/configure.py b/configure.py index 4fac3a52e..631d5fa6f 100644 --- a/configure.py +++ b/configure.py @@ -820,7 +820,7 @@ config.libs = [ Object(Matching, "JSystem/JUtility/JUTFader.cpp"), Object(NonMatching, "JSystem/JUtility/JUTProcBar.cpp"), Object(NonMatching, "JSystem/JUtility/JUTConsole.cpp"), - Object(NonMatching, "JSystem/JUtility/JUTDirectFile.cpp"), + Object(Matching, "JSystem/JUtility/JUTDirectFile.cpp"), Object(NonMatching, "JSystem/JUtility/JUTGba.cpp"), Object(NonMatching, "JSystem/JUtility/JUTFontData_Ascfont_fix12.s"), ], diff --git a/include/JSystem/JUtility/JUTDirectFile.h b/include/JSystem/JUtility/JUTDirectFile.h index 583e7c88c..ec527ac3b 100644 --- a/include/JSystem/JUtility/JUTDirectFile.h +++ b/include/JSystem/JUtility/JUTDirectFile.h @@ -6,12 +6,12 @@ #define JUTDF_BUFSIZE (0x800) struct JUTDirectFile { - /* 802E8730 */ int fetch32byte(); - /* 802E87F8 */ JUTDirectFile(); - /* 802E881C */ ~JUTDirectFile(); - /* 802E8860 */ bool fopen(char const*); - /* 802E88FC */ void fclose(); - /* 802E8958 */ int fgets(void*, int); + int fetch32byte(); + JUTDirectFile(); + ~JUTDirectFile(); + bool fopen(char const*); + void fclose(); + int fgets(void*, int); /* 0x000 */ u8 mBuffer[0x820]; /* 0x820 */ u8* mSectorStart; diff --git a/include/dolphin/dvd/dvd.h b/include/dolphin/dvd/dvd.h index 3c55da4c8..c2998bf5e 100644 --- a/include/dolphin/dvd/dvd.h +++ b/include/dolphin/dvd/dvd.h @@ -109,6 +109,9 @@ typedef struct DVDBB2 { typedef void (*DVDOptionalCommandChecker)(DVDCommandBlock* block, void (*cb)(u32 intType)); +#define DVDGetLength(fi) (fi)->length +#define DVDGetFileInfoStatus(fi) (DVDGetCommandBlockStatus(&(fi)->block)) + void DVDInit(void); BOOL DVDOpen(const char* filename, DVDFileInfo* fileinfo); BOOL DVDClose(DVDFileInfo* fileinfo); diff --git a/src/JSystem/JUtility/JUTDirectFile.cpp b/src/JSystem/JUtility/JUTDirectFile.cpp index 7e120f6a3..f1966e8c5 100644 --- a/src/JSystem/JUtility/JUTDirectFile.cpp +++ b/src/JSystem/JUtility/JUTDirectFile.cpp @@ -4,34 +4,137 @@ // #include "JSystem/JUtility/JUTDirectFile.h" -#include "dolphin/types.h" +#include "dolphin/dvd/dvd.h" +#include "dolphin/os/OS.h" +#include "global.h" /* 802CBAD8-802CBBA0 .text fetch32byte__13JUTDirectFileFv */ -void JUTDirectFile::fetch32byte() { - /* Nonmatching */ +int JUTDirectFile::fetch32byte() { + mToRead = mLength - ALIGN_PREV(mPos, 0x20); + if (mToRead > 0x800) + mToRead = 0x800; + + BOOL interrupt = OSEnableInterrupts(); + BOOL ret = DVDReadAsyncPrio(&mFileInfo, mSectorStart, ALIGN_NEXT(mToRead, 0x20), ALIGN_PREV(mPos, 0x20), NULL, 2); + OSRestoreInterrupts(interrupt); + + if (!ret) + return -1; + + interrupt = OSEnableInterrupts(); + while (true) { + if (!DVDGetFileInfoStatus(&mFileInfo)) + break; + } + OSRestoreInterrupts(interrupt); + return mToRead; } /* 802CBBA0-802CBBC4 .text __ct__13JUTDirectFileFv */ JUTDirectFile::JUTDirectFile() { - /* Nonmatching */ + mLength = 0; + mPos = 0; + mToRead = 0; + mSectorStart = (u8*)ALIGN_NEXT((u32)mBuffer, 0x20); + mIsOpen = false; } /* 802CBBC4-802CBC08 .text __dt__13JUTDirectFileFv */ JUTDirectFile::~JUTDirectFile() { - /* Nonmatching */ + mIsOpen = false; } /* 802CBC08-802CBCA4 .text fopen__13JUTDirectFileFPCc */ -void JUTDirectFile::fopen(const char*) { - /* Nonmatching */ +bool JUTDirectFile::fopen(const char* pFilename) { + if (pFilename == NULL) + return false; + + BOOL interrupt = OSEnableInterrupts(); + BOOL ret = DVDOpen(pFilename, &mFileInfo); + OSRestoreInterrupts(interrupt); + + if (!ret) { + mIsOpen = false; + return false; + } + + interrupt = OSEnableInterrupts(); + mLength = DVDGetLength(&mFileInfo); + OSRestoreInterrupts(interrupt); + mPos = 0; + mIsOpen = true; + return true; } /* 802CBCA4-802CBD00 .text fclose__13JUTDirectFileFv */ void JUTDirectFile::fclose() { - /* Nonmatching */ + if (mIsOpen) { + BOOL interrupt = OSEnableInterrupts(); + DVDClose(&mFileInfo); + OSRestoreInterrupts(interrupt); + mIsOpen = false; + } } /* 802CBD00-802CBEB0 .text fgets__13JUTDirectFileFPvi */ -void JUTDirectFile::fgets(void*, int) { - /* Nonmatching */ +int JUTDirectFile::fgets(void* pBuf, int n) { + if (!mIsOpen) + return -1; + + if (n == 0) + return 0; + if (n == 1) + return 1; + if (pBuf == NULL) + return -1; + if (mPos >= mLength) + return -1; + + u8* pDst = (u8*)pBuf; + s32 size = 0; + + while (mPos < mLength) { + if (mToRead == 0 && fetch32byte() < 0) + return -1; + + u32 readPos = mPos & 0x7FF; + u32 bufLeft = mToRead - readPos; + if ((size + bufLeft) > (n - 1)) + bufLeft = n - size - 1; + + BOOL endLine = FALSE; + for (u32 i = 0; i < bufLeft; i++) { + u8 c = mSectorStart[readPos++]; + *pDst++ = c; + + if (c == '\n') { + endLine = true; + bufLeft = i + 1; + break; + } + } + + if (readPos >= 0x800) + mToRead = 0; + + if (endLine == TRUE) { + *pDst = '\0'; + mPos += bufLeft; + size += bufLeft; + break; + } + + mPos += bufLeft; + size += bufLeft; + + if (size >= (n - 1)) { + *pDst = '\0'; + break; + } + } + + if (mPos >= mLength) + *pDst = '\0'; + + return size; } From 9f6812b78b823c42f2e7a5dc847f2fb3e19d36ba Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 24 Sep 2023 14:40:58 -0700 Subject: [PATCH 88/89] JKernel fixes --- include/JSystem/JKernel/JKRAram.h | 2 +- include/JSystem/JKernel/JKRAramArchive.h | 4 ++-- include/JSystem/JKernel/JKRAramStream.h | 4 ++-- include/JSystem/JKernel/JKRArchive.h | 2 +- include/JSystem/JKernel/JKRAssertHeap.h | 2 +- include/JSystem/JKernel/JKRCompArchive.h | 4 ++-- include/JSystem/JKernel/JKRDecomp.h | 2 +- include/JSystem/JKernel/JKRDvdAramRipper.h | 2 +- include/JSystem/JKernel/JKRDvdFile.h | 2 +- include/JSystem/JKernel/JKRDvdRipper.h | 2 +- include/JSystem/JKernel/JKRFile.h | 2 +- include/JSystem/JKernel/JKRFileLoader.h | 2 +- include/JSystem/JKernel/JKRMemArchive.h | 4 ++-- src/JSystem/JKernel/JKRAram.cpp | 10 +++++----- src/JSystem/JKernel/JKRFile.cpp | 2 +- src/JSystem/JKernel/JKRFileCache.cpp | 2 +- src/JSystem/JKernel/JKRFileLoader.cpp | 2 +- src/JSystem/JKernel/JKRMemArchive.cpp | 4 ++-- 18 files changed, 27 insertions(+), 27 deletions(-) diff --git a/include/JSystem/JKernel/JKRAram.h b/include/JSystem/JKernel/JKRAram.h index e66c696a6..a9f2564e4 100644 --- a/include/JSystem/JKernel/JKRAram.h +++ b/include/JSystem/JKernel/JKRAram.h @@ -33,7 +33,7 @@ public: /* 0x84 */ u32 mStackArray[3]; public: - static JKRAram* create(u32, u32, long, long, long); + static JKRAram* create(u32, u32, s32, s32, s32); static bool checkOkAddress(u8*, u32, JKRAramBlock*, u32); static void changeGroupIdIfNeed(u8*, int); static JKRAramBlock* mainRamToAram(u8*, u32, u32, JKRExpandSwitch, u32, JKRHeap*, int); diff --git a/include/JSystem/JKernel/JKRAramArchive.h b/include/JSystem/JKernel/JKRAramArchive.h index 5f8d28413..392be1be5 100644 --- a/include/JSystem/JKernel/JKRAramArchive.h +++ b/include/JSystem/JKernel/JKRAramArchive.h @@ -9,10 +9,10 @@ class JKRDvdFile; class JKRAramArchive : public JKRArchive { public: - JKRAramArchive(long, JKRArchive::EMountDirection); + JKRAramArchive(s32, JKRArchive::EMountDirection); virtual ~JKRAramArchive(); - bool open(long); + bool open(s32); u32 getAramAddress_Entry(SDIFileEntry*); u32 getAramAddress(char const*); diff --git a/include/JSystem/JKernel/JKRAramStream.h b/include/JSystem/JKernel/JKRAramStream.h index cdbfbd5ca..ee36d5fcf 100644 --- a/include/JSystem/JKernel/JKRAramStream.h +++ b/include/JSystem/JKernel/JKRAramStream.h @@ -42,7 +42,7 @@ private: /* vt[03] */ void* run(void); /* override */ public: - static JKRAramStream* create(long); + static JKRAramStream* create(s32); static s32 readFromAram(void); static s32 writeToAram(JKRAramStreamCommand*); @@ -60,7 +60,7 @@ private: static JKRHeap* transHeap; }; -inline JKRAramStream* JKRCreateAramStreamManager(long priority) { +inline JKRAramStream* JKRCreateAramStreamManager(s32 priority) { return JKRAramStream::create(priority); } diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index f3bb0f5bd..46ebcd0c4 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -115,7 +115,7 @@ public: protected: JKRArchive(); - JKRArchive(long, EMountMode); + JKRArchive(s32, EMountMode); public: bool getDirEntry(SDirEntry*, u32) const; diff --git a/include/JSystem/JKernel/JKRAssertHeap.h b/include/JSystem/JKernel/JKRAssertHeap.h index 48a79d95e..d0e8d876c 100644 --- a/include/JSystem/JKernel/JKRAssertHeap.h +++ b/include/JSystem/JKernel/JKRAssertHeap.h @@ -5,7 +5,7 @@ class JKRAssertHeap : public JKRHeap { protected: - JKRAssertHeap(void*, unsigned long, JKRHeap*, bool); + JKRAssertHeap(void*, u32, JKRHeap*, bool); virtual ~JKRAssertHeap(); public: diff --git a/include/JSystem/JKernel/JKRCompArchive.h b/include/JSystem/JKernel/JKRCompArchive.h index 4fb13152a..14d24b7eb 100644 --- a/include/JSystem/JKernel/JKRCompArchive.h +++ b/include/JSystem/JKernel/JKRCompArchive.h @@ -8,10 +8,10 @@ class JKRDvdFile; class JKRCompArchive : public JKRArchive { public: - JKRCompArchive(long, JKRArchive::EMountDirection); + JKRCompArchive(s32, JKRArchive::EMountDirection); virtual ~JKRCompArchive(); - bool open(long); + bool open(s32); /* vt[09] */ void removeResourceAll(void); /* override */ /* vt[10] */ bool removeResource(void*); /* override */ diff --git a/include/JSystem/JKernel/JKRDecomp.h b/include/JSystem/JKernel/JKRDecomp.h index e7ef48c68..f69425713 100644 --- a/include/JSystem/JKernel/JKRDecomp.h +++ b/include/JSystem/JKernel/JKRDecomp.h @@ -58,7 +58,7 @@ inline void JKRDecompress(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLe JKRDecomp::orderSync(srcBuffer, dstBuffer, srcLength, dstLength); } -inline JKRDecomp* JKRCreateDecompManager(long priority) { +inline JKRDecomp* JKRCreateDecompManager(s32 priority) { return JKRDecomp::create(priority); } diff --git a/include/JSystem/JKernel/JKRDvdAramRipper.h b/include/JSystem/JKernel/JKRDvdAramRipper.h index 6c3ba1de7..50957d4e0 100644 --- a/include/JSystem/JKernel/JKRDvdAramRipper.h +++ b/include/JSystem/JKernel/JKRDvdAramRipper.h @@ -34,7 +34,7 @@ public: class JKRDvdFile; class JKRDvdAramRipper { public: - static JKRAramBlock* loadToAram(long, u32, JKRExpandSwitch, u32, u32); + static JKRAramBlock* loadToAram(s32, u32, JKRExpandSwitch, u32, u32); static JKRAramBlock* loadToAram(JKRDvdFile*, u32, JKRExpandSwitch, u32, u32); static JKRADCommand* loadToAram_Async(JKRDvdFile*, u32, JKRExpandSwitch, void (*)(u32), u32, u32); diff --git a/include/JSystem/JKernel/JKRDvdFile.h b/include/JSystem/JKernel/JKRDvdFile.h index 1ea018241..c0c1ea3e2 100644 --- a/include/JSystem/JKernel/JKRDvdFile.h +++ b/include/JSystem/JKernel/JKRDvdFile.h @@ -52,7 +52,7 @@ public: /* 0xF4 */ OSThread* mOSThread; public: - static void doneProcess(long, DVDFileInfo*); + static void doneProcess(s32, DVDFileInfo*); static JSUList& getDvdList() { return sDvdList; } diff --git a/include/JSystem/JKernel/JKRDvdRipper.h b/include/JSystem/JKernel/JKRDvdRipper.h index 7534f9ee9..83fabe2a4 100644 --- a/include/JSystem/JKernel/JKRDvdRipper.h +++ b/include/JSystem/JKernel/JKRDvdRipper.h @@ -38,7 +38,7 @@ public: static void* loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*); - static void* loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, + static void* loadToMainRAM(s32, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*); static void* loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*); diff --git a/include/JSystem/JKernel/JKRFile.h b/include/JSystem/JKernel/JKRFile.h index 4e1be4db8..ed9d35a2c 100644 --- a/include/JSystem/JKernel/JKRFile.h +++ b/include/JSystem/JKernel/JKRFile.h @@ -8,7 +8,7 @@ public: JKRFile() : mIsAvailable(false) {} virtual ~JKRFile() {} - s32 read(void*, long, long); + s32 read(void*, s32, s32); bool isAvailable() const { return mIsAvailable; } diff --git a/include/JSystem/JKernel/JKRFileLoader.h b/include/JSystem/JKernel/JKRFileLoader.h index c02dedc10..9e05be16a 100644 --- a/include/JSystem/JKernel/JKRFileLoader.h +++ b/include/JSystem/JKernel/JKRFileLoader.h @@ -43,7 +43,7 @@ public: static bool removeResource(void*, JKRFileLoader*); static bool detachResource(void*, JKRFileLoader*); static JKRFileLoader* findVolume(const char**); - static const char* fetchVolumeName(char*, long, const char*); + static const char* fetchVolumeName(char*, s32, const char*); static JKRFileLoader* getCurrentVolume() { return sCurrentVolume; } static void setCurrentVolume(JKRFileLoader* fileLoader) { sCurrentVolume = fileLoader; } diff --git a/include/JSystem/JKernel/JKRMemArchive.h b/include/JSystem/JKernel/JKRMemArchive.h index 54fc72459..93c051920 100644 --- a/include/JSystem/JKernel/JKRMemArchive.h +++ b/include/JSystem/JKernel/JKRMemArchive.h @@ -11,13 +11,13 @@ enum JKRMemBreakFlag { class JKRMemArchive : public JKRArchive { public: JKRMemArchive(); - JKRMemArchive(long, JKRArchive::EMountDirection); + JKRMemArchive(s32, JKRArchive::EMountDirection); virtual ~JKRMemArchive(); void fixedInit(s32); bool mountFixed(void*, JKRMemBreakFlag); void unmountFixed(); - bool open(long, JKRArchive::EMountDirection); + bool open(s32, JKRArchive::EMountDirection); bool open(void*, u32, JKRMemBreakFlag); /* vt[09] */ void removeResourceAll(void); /* override */ diff --git a/src/JSystem/JKernel/JKRAram.cpp b/src/JSystem/JKernel/JKRAram.cpp index e20e34068..1aad48247 100644 --- a/src/JSystem/JKernel/JKRAram.cpp +++ b/src/JSystem/JKernel/JKRAram.cpp @@ -24,7 +24,7 @@ static u8* nextSrcData(u8*); JKRAram* JKRAram::sAramObject; /* 802B42C4-802B4360 .text create__7JKRAramFUlUllll */ -JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size, long stream_priority, long decomp_priority, long piece_priority) { +JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size, s32 stream_priority, s32 decomp_priority, s32 piece_priority) { if (!sAramObject) { sAramObject = new (JKRHeap::getSystemHeap(), 0) JKRAram(aram_audio_buffer_size, aram_audio_graph_size, piece_priority); @@ -40,7 +40,7 @@ OSMessage JKRAram::sMessageBuffer[4] = { NULL, NULL, NULL, NULL }; OSMessageQueue JKRAram::sMessageQueue = {0}; /* 802B4360-802B44D8 .text __ct__7JKRAramFUlUll */ -JKRAram::JKRAram(u32 audio_buffer_size, u32 audio_graph_size, long priority) : JKRThread(0x4000, 0x10, priority) { +JKRAram::JKRAram(u32 audio_buffer_size, u32 audio_graph_size, s32 priority) : JKRThread(0x4000, 0x10, priority) { u32 aramBase = ARInit(mStackArray, ARRAY_SIZE(mStackArray)); ARQInit(); @@ -323,14 +323,14 @@ static u32 srcAddress; static u32 fileOffset; static u32 readCount; static u32 maxDest; -static bool sIsInitMutex; +static bool isInitMutex; /* 802B4D4C-802B4F20 .text JKRDecompressFromAramToMainRam__FUlPvUlUlUl */ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset) { BOOL interrupts = OSDisableInterrupts(); - if (sIsInitMutex == false) { + if (isInitMutex == false) { OSInitMutex(&decompMutex); - sIsInitMutex = true; + isInitMutex = true; } OSRestoreInterrupts(interrupts); OSLockMutex(&decompMutex); diff --git a/src/JSystem/JKernel/JKRFile.cpp b/src/JSystem/JKernel/JKRFile.cpp index 04cb11a6c..8d6654b1f 100644 --- a/src/JSystem/JKernel/JKRFile.cpp +++ b/src/JSystem/JKernel/JKRFile.cpp @@ -8,7 +8,7 @@ #include "dolphin/vi/vi.h" /* 802BC610-802BC6B4 .text read__7JKRFileFPvll */ -s32 JKRFile::read(void* data, s32 length, long offset) { +s32 JKRFile::read(void* data, s32 length, s32 offset) { JUT_ASSERT(34, ( length & 0x1f ) == 0); while (true) { s32 result = readData(data, length, offset); diff --git a/src/JSystem/JKernel/JKRFileCache.cpp b/src/JSystem/JKernel/JKRFileCache.cpp index 89f60a249..7f91ceff4 100644 --- a/src/JSystem/JKernel/JKRFileCache.cpp +++ b/src/JSystem/JKernel/JKRFileCache.cpp @@ -149,7 +149,7 @@ void* JKRFileCache::getResource(const char* path) { } /* 802B7564-802B7630 .text getResource__12JKRFileCacheFUlPCc */ -void* JKRFileCache::getResource(unsigned long, const char* path) { +void* JKRFileCache::getResource(u32, const char* path) { JUT_ASSERT(303, isMounted()); char finalPath[256]; diff --git a/src/JSystem/JKernel/JKRFileLoader.cpp b/src/JSystem/JKernel/JKRFileLoader.cpp index 397d3e3fc..3c28189a3 100644 --- a/src/JSystem/JKernel/JKRFileLoader.cpp +++ b/src/JSystem/JKernel/JKRFileLoader.cpp @@ -127,7 +127,7 @@ JKRFileLoader* JKRFileLoader::findVolume(const char** volumeName) { static char rootPath[2] = "/"; /* 802B6B44-802B6C20 .text fetchVolumeName__13JKRFileLoaderFPclPCc */ -const char* JKRFileLoader::fetchVolumeName(char* buffer, long bufferSize, const char* path) { +const char* JKRFileLoader::fetchVolumeName(char* buffer, s32 bufferSize, const char* path) { if (strcmp(path, "/") == 0) { strcpy(buffer, rootPath); return rootPath; diff --git a/src/JSystem/JKernel/JKRMemArchive.cpp b/src/JSystem/JKernel/JKRMemArchive.cpp index 3216b6c56..25501e5ba 100644 --- a/src/JSystem/JKernel/JKRMemArchive.cpp +++ b/src/JSystem/JKernel/JKRMemArchive.cpp @@ -56,10 +56,10 @@ void JKRMemArchive::fixedInit(s32 param_1) { /* 802B9740-802B9810 .text mountFixed__13JKRMemArchiveFPv15JKRMemBreakFlag */ bool JKRMemArchive::mountFixed(void* param_1, JKRMemBreakFlag param_2) { - if (check_mount_already((long)param_1)) { + if (check_mount_already((s32)param_1)) { return false; } - fixedInit((long)param_1); + fixedInit((s32)param_1); if (!open(param_1, 0xffff, param_2)) { return false; } From 4d7a01f07909c72b8c6094bf25f594497cf74323 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 24 Sep 2023 15:46:02 -0700 Subject: [PATCH 89/89] JKRDecomp --- configure.py | 2 +- include/JSystem/JKernel/JKRDecomp.h | 6 +- src/JSystem/JKernel/JKRDecomp.cpp | 274 ++++++++++++++++++++++++---- 3 files changed, 247 insertions(+), 35 deletions(-) diff --git a/configure.py b/configure.py index 631d5fa6f..8c0b18f6d 100644 --- a/configure.py +++ b/configure.py @@ -779,7 +779,7 @@ config.libs = [ Object(NonMatching, "JSystem/JKernel/JKRDvdFile.cpp"), Object(Matching, "JSystem/JKernel/JKRDvdRipper.cpp"), Object(NonMatching, "JSystem/JKernel/JKRDvdAramRipper.cpp"), - Object(NonMatching, "JSystem/JKernel/JKRDecomp.cpp"), + Object(Matching, "JSystem/JKernel/JKRDecomp.cpp"), ], ), JSystemLib( diff --git a/include/JSystem/JKernel/JKRDecomp.h b/include/JSystem/JKernel/JKRDecomp.h index f69425713..c4b9c949a 100644 --- a/include/JSystem/JKernel/JKRDecomp.h +++ b/include/JSystem/JKernel/JKRDecomp.h @@ -32,13 +32,13 @@ public: class JKRDecomp : public JKRThread { private: - JKRDecomp(long); + JKRDecomp(s32); virtual ~JKRDecomp(); /* vt[03] */ virtual void* run(); /* override */ public: - static JKRDecomp* create(long); + static JKRDecomp* create(s32); static JKRDecompCommand* prepareCommand(u8*, u8*, u32, u32, JKRDecompCommand::AsyncCallback); static void sendCommand(JKRDecompCommand*); static bool sync(JKRDecompCommand*, int); @@ -50,7 +50,7 @@ public: static JKRCompression checkCompressed(u8*); static JKRDecomp* sDecompObject; - static OSMessage sMessageBuffer[8]; + static OSMessage sMessageBuffer[4]; static OSMessageQueue sMessageQueue; }; diff --git a/src/JSystem/JKernel/JKRDecomp.cpp b/src/JSystem/JKernel/JKRDecomp.cpp index 2b3c514b2..e07fdda8c 100644 --- a/src/JSystem/JKernel/JKRDecomp.cpp +++ b/src/JSystem/JKernel/JKRDecomp.cpp @@ -4,79 +4,291 @@ // #include "JSystem/JKernel/JKRDecomp.h" +#include "JSystem/JKernel/JKRAramPiece.h" #include "dolphin/types.h" +JKRDecomp* JKRDecomp::sDecompObject; + /* 802BE890-802BE8F0 .text create__9JKRDecompFl */ -void JKRDecomp::create(long) { - /* Nonmatching */ +JKRDecomp* JKRDecomp::create(s32 priority) { + if (!sDecompObject) { + sDecompObject = new (JKRHeap::getSystemHeap(), 0) JKRDecomp(priority); + } + + return sDecompObject; } +OSMessage JKRDecomp::sMessageBuffer[4] = {NULL}; +OSMessageQueue JKRDecomp::sMessageQueue = {0}; + /* 802BE8F0-802BE940 .text __ct__9JKRDecompFl */ -JKRDecomp::JKRDecomp(long) { - /* Nonmatching */ +JKRDecomp::JKRDecomp(s32 priority) : JKRThread(0x4000, 0x10, priority) { + resume(); } /* 802BE940-802BE9A0 .text __dt__9JKRDecompFv */ -JKRDecomp::~JKRDecomp() { - /* Nonmatching */ -} +JKRDecomp::~JKRDecomp() {} /* 802BE9A0-802BEA68 .text run__9JKRDecompFv */ -void JKRDecomp::run() { - /* Nonmatching */ +void* JKRDecomp::run() { + OSInitMessageQueue(&sMessageQueue, sMessageBuffer, 4); + while (true) { + OSMessage message; + OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCK); + + JKRDecompCommand* command = (JKRDecompCommand*)message; + decode(command->mSrcBuffer, command->mDstBuffer, command->mSrcLength, command->mDstLength); + + if (command->field_0x20 != 0) { + if (command->field_0x20 == 1) { + JKRAramPiece::sendCommand(command->mAMCommand); + } + continue; + } + + if (command->mCallback) { + (*command->mCallback)((u32)command); + continue; + } + + if (command->field_0x1c) { + OSSendMessage(command->field_0x1c, (OSMessage)1, OS_MESSAGE_NOBLOCK); + } else { + OSSendMessage(&command->mMessageQueue, (OSMessage)1, OS_MESSAGE_NOBLOCK); + } + } } /* 802BEA68-802BEAE0 .text prepareCommand__9JKRDecompFPUcPUcUlUlPFUl_v */ -void JKRDecomp::prepareCommand(unsigned char*, unsigned char*, unsigned long, unsigned long, void (*)(unsigned long)) { - /* Nonmatching */ +JKRDecompCommand* JKRDecomp::prepareCommand(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength, JKRDecompCommand::AsyncCallback callback) { + JKRDecompCommand* command = new (JKRHeap::getSystemHeap(), -4) JKRDecompCommand(); + command->mSrcBuffer = srcBuffer; + command->mDstBuffer = dstBuffer; + command->mSrcLength = srcLength; + command->mDstLength = dstLength; + command->mCallback = callback; + return command; } /* 802BEAE0-802BEB10 .text sendCommand__9JKRDecompFP16JKRDecompCommand */ -void JKRDecomp::sendCommand(JKRDecompCommand*) { - /* Nonmatching */ +void JKRDecomp::sendCommand(JKRDecompCommand* command) { + OSSendMessage(&sMessageQueue, command, OS_MESSAGE_BLOCK); } /* 802BEB10-802BEB44 .text orderAsync__9JKRDecompFPUcPUcUlUlPFUl_v */ -void JKRDecomp::orderAsync(unsigned char*, unsigned char*, unsigned long, unsigned long, void (*)(unsigned long)) { - /* Nonmatching */ +JKRDecompCommand* JKRDecomp::orderAsync(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength, JKRDecompCommand::AsyncCallback callback) { + JKRDecompCommand* command = + prepareCommand(srcBuffer, dstBuffer, srcLength, dstLength, callback); + sendCommand(command); + return command; } /* 802BEB44-802BEB98 .text sync__9JKRDecompFP16JKRDecompCommandi */ -void JKRDecomp::sync(JKRDecompCommand*, int) { - /* Nonmatching */ +bool JKRDecomp::sync(JKRDecompCommand* command, int isNonBlocking) { + OSMessage message; + bool result; + if (isNonBlocking == JKRDECOMP_SYNC_BLOCKING) { + OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_BLOCK); + result = true; + } else { + result = + OSReceiveMessage(&command->mMessageQueue, &message, OS_MESSAGE_NOBLOCK) != FALSE; + } + + return result; } /* 802BEB98-802BEBEC .text orderSync__9JKRDecompFPUcPUcUlUl */ -void JKRDecomp::orderSync(unsigned char*, unsigned char*, unsigned long, unsigned long) { - /* Nonmatching */ +bool JKRDecomp::orderSync(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) { + JKRDecompCommand* command = orderAsync(srcBuffer, dstBuffer, srcLength, dstLength, NULL); + bool result = sync(command, JKRDECOMP_SYNC_BLOCKING); + delete command; + return result; } /* 802BEBEC-802BEC68 .text decode__9JKRDecompFPUcPUcUlUl */ -void JKRDecomp::decode(unsigned char*, unsigned char*, unsigned long, unsigned long) { - /* Nonmatching */ +void JKRDecomp::decode(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) { + JKRCompression compression = checkCompressed(srcBuffer); + if (compression == COMPRESSION_YAY0) { + decodeSZP(srcBuffer, dstBuffer, srcLength, dstLength); + } else if (compression == COMPRESSION_YAZ0) { + decodeSZS(srcBuffer, dstBuffer, srcLength, dstLength); + } } /* 802BEC68-802BEE24 .text decodeSZP__9JKRDecompFPUcPUcUlUl */ -void JKRDecomp::decodeSZP(unsigned char*, unsigned char*, unsigned long, unsigned long) { - /* Nonmatching */ +void JKRDecomp::decodeSZP(u8* src, u8* dst, u32 srcLength, u32 dstLength) { + int srcChunkOffset; + int count; + int dstOffset; + u32 length = srcLength; + int linkInfo; + int offset; + int i; + + int decodedSize = READU32_BE(src, 4); + int linkTableOffset = READU32_BE(src, 8); + int srcDataOffset = READU32_BE(src, 12); + + dstOffset = 0; + u32 counter = 0; + srcChunkOffset = 16; + + u32 chunkBits; + if (srcLength == 0) + return; + if (dstLength > decodedSize) + return; + + do + { + if (counter == 0) + { + chunkBits = READU32_BE(src, srcChunkOffset); + srcChunkOffset += sizeof(u32); + counter = sizeof(u32) * 8; + } + + if (chunkBits & 0x80000000) + { + if (dstLength == 0) + { + dst[dstOffset] = src[srcDataOffset]; + length--; + if (length == 0) + return; + } + else + { + dstLength--; + } + dstOffset++; + srcDataOffset++; + } + else + { + linkInfo = src[linkTableOffset] << 8 | src[linkTableOffset + 1]; + linkTableOffset += sizeof(u16); + + offset = dstOffset - (linkInfo & 0xFFF); + count = (linkInfo >> 12); + if (count == 0) + { + count = (u32)src[srcDataOffset++] + 0x12; + } + else + count += 2; + + if (count > decodedSize - dstOffset) + count = decodedSize - dstOffset; + + for (i = 0; i < count; i++, dstOffset++, offset++) + { + if (dstLength == 0) + { + dst[dstOffset] = dst[offset - 1]; + length--; + if (length == 0) + return; + } + else + dstLength--; + } + } + + chunkBits <<= 1; + counter--; + } while (dstOffset < decodedSize); } /* 802BEE24-802BEF08 .text decodeSZS__9JKRDecompFPUcPUcUlUl */ -void JKRDecomp::decodeSZS(unsigned char*, unsigned char*, unsigned long, unsigned long) { - /* Nonmatching */ +void JKRDecomp::decodeSZS(u8* src_buffer, u8* dst_buffer, u32 srcSize, u32 dstSize) { + u8* decompEnd; + u8* copyStart; + s32 copyByteCount; + s32 chunkBitsLeft = 0; + s32 chunkBits; + + decompEnd = dst_buffer + *(int*)(src_buffer + 4) - dstSize; + + if (srcSize == 0) { + return; + } + if (dstSize > *(u32*)src_buffer) { + return; + } + + u8* curSrcPos = src_buffer + 0x10; + do { + if (chunkBitsLeft == 0) { + chunkBits = curSrcPos[0]; + chunkBitsLeft = 8; + curSrcPos++; + } + if ((chunkBits & 0x80) != 0) { + if (dstSize == 0) { + dst_buffer[0] = curSrcPos[0]; + srcSize--; + dst_buffer++; + if (srcSize == 0) + return; + } else { + dstSize--; + } + curSrcPos++; + } else { + u32 local_28 = curSrcPos[1] | (curSrcPos[0] & 0xF) << 8; + u32 r31 = curSrcPos[0] >> 4; + curSrcPos += 2; + copyStart = dst_buffer - local_28; + if (r31 == 0) { + copyByteCount = curSrcPos[0] + 0x12; + curSrcPos++; + } else { + copyByteCount = r31 + 2; + } + do { + if (dstSize == 0) { + dst_buffer[0] = copyStart[-1]; + srcSize--; + dst_buffer++; + if (srcSize == 0) + return; + } else { + dstSize--; + } + copyByteCount--; + copyStart++; + } while (copyByteCount != 0); + } + chunkBits <<= 1; + chunkBitsLeft--; + } while (dst_buffer != decompEnd); } /* 802BEF08-802BEF58 .text checkCompressed__9JKRDecompFPUc */ -void JKRDecomp::checkCompressed(unsigned char*) { - /* Nonmatching */ +JKRCompression JKRDecomp::checkCompressed(u8* src) { + if ((src[0] == 'Y') && (src[1] == 'a') && (src[3] == '0')) { + if (src[2] == 'y') { + return COMPRESSION_YAY0; + } + + if (src[2] == 'z') { + return COMPRESSION_YAZ0; + } + } + + return COMPRESSION_NONE; } /* 802BEF58-802BEFA8 .text __ct__16JKRDecompCommandFv */ JKRDecompCommand::JKRDecompCommand() { - /* Nonmatching */ + OSInitMessageQueue(&mMessageQueue, &mMessage, 1); + mCallback = NULL; + field_0x1c = NULL; + mThis = this; + field_0x20 = 0; } /* 802BEFA8-802BEFE4 .text __dt__16JKRDecompCommandFv */ -JKRDecompCommand::~JKRDecompCommand() { - /* Nonmatching */ -} +JKRDecompCommand::~JKRDecompCommand() {}