From 5b7e7e35bc8612e83e2d30dac2aeb10653232b9f Mon Sep 17 00:00:00 2001 From: CreateSource Date: Mon, 4 Dec 2023 16:16:45 -0500 Subject: [PATCH 1/4] small funcs, slight data changes --- src/game/hsfman.c | 43 +- tools/hsfman-output.txt | 6525 --------------------------------------- 2 files changed, 38 insertions(+), 6530 deletions(-) delete mode 100644 tools/hsfman-output.txt diff --git a/src/game/hsfman.c b/src/game/hsfman.c index 259c635a..b7c5d124 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -8,7 +8,9 @@ typedef struct ThreeDDataStruct { s16 unk_0E; char unk_10[0x12]; u16 unk_22; - char unk_24[0x2C]; + char unk_24[0x24]; + u32 unk_48; + char unk_4C[0x4]; s32 unk_50; s32 unk_54; char unk_58[0xC]; @@ -37,13 +39,19 @@ typedef struct ThreeDCameraStruct { char unk_04[0x54]; } ThreeDCameraStruct; typedef struct ThreeDProjectionStruct { - char unk_00[0x4]; + s8 unk_00; + char unk_01[0x3]; s32 unk_04; - char unk_08[0x90]; + char unk_08[0xC]; + Vec3f unk_14; + Vec3f unk_20; + Vec3f unk_2C; + char unk_38[0x60]; } ThreeDProjectionStruct; typedef struct ThreeDShadowStruct { - char unk_00[0x4]; - s32 unk_04; + char unk_00[0x2]; + u16 unk_02; + void*unk_04; char unk_08[0x90]; } ThreeDShadowStruct; @@ -53,6 +61,7 @@ void Hu3DLighInit(void); void Hu3DMotionInit(void); void Hu3DParManInit(void); char *HuSprAnimRead(char*); +void HuSprAnimKill(s32); s16 Hu3DCameraExistF; ThreeDDataStruct Hu3DData[0x200]; ThreeDCameraStruct Hu3DCamera[0x10]; @@ -83,6 +92,7 @@ char *hiliteAnim[4]; ThreeDProjectionStruct Hu3DProjection[4]; ThreeDShadowStruct Hu3DShadowData; GXColor BGColor; +f32 lbl_801D4AFC; void Hu3DInit(void) { ThreeDDataStruct* data; @@ -131,3 +141,26 @@ void Hu3DInit(void) { Hu3DPauseF = 0; NoSyncF = 0; } + +void Hu3DShadowSizeSet(u16 arg0) { + Hu3DShadowData.unk_02 = arg0; + if (Hu3DShadowData.unk_04 != 0) { + HuMemDirectFree(Hu3DShadowData.unk_04); + } + Hu3DShadowData.unk_04 = HuMemDirectMalloc(HEAP_DATA, arg0 * arg0); +} + +void Hu3DProjectionKill(s16 arg0) { + HuSprAnimKill(Hu3DProjection[arg0].unk_04); + Hu3DProjection[arg0].unk_04 = 0; +} + +void Hu3DProjectionPosSet(s16 arg0, Vec3f arg1, Vec3f arg2, Vec3f arg3) { + Hu3DProjection[arg0].unk_14 = arg1; + Hu3DProjection[arg0].unk_20 = arg3; + Hu3DProjection[arg0].unk_2C = arg2; +} + +void Hu3DProjectionTPLvlSet(s16 arg0, f32 arg8) { + Hu3DProjection[arg0].unk_00 = (s8) (lbl_801D4AFC * arg8); +} diff --git a/tools/hsfman-output.txt b/tools/hsfman-output.txt deleted file mode 100644 index bc19822a..00000000 --- a/tools/hsfman-output.txt +++ /dev/null @@ -1,6525 +0,0 @@ -global function Hu3DInit: - 0x8001f9ac | Stack Size += 0x30 - 0x8001f9b0 | r0 set to Link Register - 0x8001f9b4 | Stack[0x34] = r0 (s32/u32) - 0x8001f9b8 | r11 = r1 + 0x30 - 0x8001f9bc | call _savegpr_25 - 0x8001f9c0 | (^u16) r3 = (^u16) refMapData0 - 0x8001f9c4 | r29 = r3 + (vu16) refMapData0 - 0x8001f9c8 | (^u16) r3 = (^u16) Hu3DData - 0x8001f9cc | r31 = r3 + (vu16) Hu3DData - 0x8001f9d0 | r25 = r29 + 0x1 - 0x8001f9d4 | r26 = r31 + 0x2 - 0x8001f9d8 | (^u16) r3 = (^u16) Hu3DData - 0x8001f9dc | r28 = r3 + (vu16) Hu3DData - 0x8001f9e0 | r30 = 0x0 - 0x8001f9e4 | goto 0x8001f9f8 - - from later address: - 0x8001f9e8 | r0 = 0x0 - 0x8001f9ec | r28[0xc4] = r0 (s32/u32) - 0x8001f9f0 | r30 += 0x1 - 0x8001f9f4 | r28 += 0x124 - - from 0x8001f9e4: - 0x8001f9f8 | s32 r0 = s16 r30 - 0x8001f9fc | (cmp) - 0x8001fa00 | if r0 < 0x200 : goto 0x8001f9e8 (s32/u32) - 0x8001fa04 | r27 = r26 + 0x4800 - 0x8001fa08 | r30 = 0x0 - 0x8001fa0c | goto 0x8001fa20 - - from later address: - 0x8001fa10 | f0 = r2[lbl_801D4AB0@sda21] (f32) - 0x8001fa14 | r27[0x0] = f0 (f32) - 0x8001fa18 | r30 += 0x1 - 0x8001fa1c | r27 += 0x58 - - from 0x8001fa0c: - 0x8001fa20 | s32 r0 = s16 r30 - 0x8001fa24 | (cmp) - 0x8001fa28 | if r0 < 0x10 : goto 0x8001fa10 (s32/u32) - 0x8001fa2c | call Hu3DMotionInit - 0x8001fa30 | call Hu3DLighInit - 0x8001fa34 | r0 = 0x0 - 0x8001fa38 | r3 = r13 - BGColor@sda21 - 0x8001fa3c | r3[0x2] = r0 (s8/u8) - 0x8001fa40 | r3 = r13 - BGColor@sda21 - 0x8001fa44 | r3[0x1] = r0 (s8/u8) - 0x8001fa48 | Stack[BGColor@sda21] = r0 (s8/u8) - 0x8001fa4c | r0 = 0xff - 0x8001fa50 | r3 = r13 - BGColor@sda21 - 0x8001fa54 | r3[0x3] = r0 (s8/u8) - 0x8001fa58 | r30 = 0x0 - 0x8001fa5c | goto 0x8001fa8c - - from later address: - 0x8001fa60 | r4 = 0x0 - 0x8001fa64 | s32 r0 = s16 r30 - 0x8001fa68 | r0 = r0 << 1 (s32/u32) - 0x8001fa6c | r3 = r26 + 0x4d80 - 0x8001fa70 | r3[r0] = r4 (s16/u16) - 0x8001fa74 | r4 = 0x0 - 0x8001fa78 | s32 r0 = s16 r30 - 0x8001fa7c | r0 = r0 << 2 (s32/u32) - 0x8001fa80 | r3 = r26 + 0x4d90 - 0x8001fa84 | unable to interpret: ['stwx', 'r4,', 'r3,', 'r0'] - 0x8001fa88 | r30 += 0x1 - - from 0x8001fa5c: - 0x8001fa8c | s32 r0 = s16 r30 - 0x8001fa90 | (cmp) - 0x8001fa94 | if r0 < 0x8 : goto 0x8001fa60 (s32/u32) - 0x8001fa98 | r3 = r29 + 0x0 - 0x8001fa9c | call HuSprAnimRead - 0x8001faa0 | r26[0x4db0] = r3 (s32/u32) - 0x8001faa4 | r3 = r29 + 0x1240 - 0x8001faa8 | call HuSprAnimRead - 0x8001faac | r4 = r26 + 0x4db0 - 0x8001fab0 | r4[0x4] = r3 (s32/u32) - 0x8001fab4 | r3 = r29 + 0x2340 - 0x8001fab8 | call HuSprAnimRead - 0x8001fabc | r4 = r26 + 0x4db0 - 0x8001fac0 | r4[0x8] = r3 (s32/u32) - 0x8001fac4 | r3 = r29 + 0x43c0 - 0x8001fac8 | call HuSprAnimRead - 0x8001facc | r4 = r26 + 0x4db0 - 0x8001fad0 | r4[0xc] = r3 (s32/u32) - 0x8001fad4 | r3 = r29 + 0x6440 - 0x8001fad8 | call HuSprAnimRead - 0x8001fadc | r4 = r26 + 0x4db0 - 0x8001fae0 | r4[0x10] = r3 (s32/u32) - 0x8001fae4 | r0 = 0x0 - 0x8001fae8 | Stack[reflectMapNo@sda21] = r0 (s16/u16) - 0x8001faec | r3 = r25 - 0x7b40 - 0x8001faf0 | call HuSprAnimRead - 0x8001faf4 | Stack[toonAnim@sda21] = r3 (s32/u32) - 0x8001faf8 | r3 = r25 - 0x6240 - 0x8001fafc | call HuSprAnimRead - 0x8001fb00 | r26[0x4dc4] = r3 (s32/u32) - 0x8001fb04 | r3 = r25 - 0x5dc0 - 0x8001fb08 | call HuSprAnimRead - 0x8001fb0c | r4 = r26 + 0x4dc4 - 0x8001fb10 | r4[0x4] = r3 (s32/u32) - 0x8001fb14 | r3 = r25 - 0x5940 - 0x8001fb18 | call HuSprAnimRead - 0x8001fb1c | r4 = r26 + 0x4dc4 - 0x8001fb20 | r4[0x8] = r3 (s32/u32) - 0x8001fb24 | r3 = r25 - 0x54c0 - 0x8001fb28 | call HuSprAnimRead - 0x8001fb2c | r4 = r26 + 0x4dc4 - 0x8001fb30 | r4[0xc] = r3 (s32/u32) - 0x8001fb34 | call Hu3DFogClear - 0x8001fb38 | call Hu3DAnimInit - 0x8001fb3c | call Hu3DParManInit - 0x8001fb40 | r30 = 0x0 - 0x8001fb44 | goto 0x8001fb64 - - from later address: - 0x8001fb48 | r5 = 0x0 - 0x8001fb4c | s32 r0 = s16 r30 - 0x8001fb50 | r4 = r0 * 0x98 - 0x8001fb54 | r3 = r26 + 0x4dd4 - 0x8001fb58 | r0 = r4 + 0x4 - 0x8001fb5c | r3[r0] = r5 (s32/u32) - 0x8001fb60 | r30 += 0x1 - - from 0x8001fb44: - 0x8001fb64 | s32 r0 = s16 r30 - 0x8001fb68 | (cmp) - 0x8001fb6c | if r0 < 0x4 : goto 0x8001fb48 (s32/u32) - 0x8001fb70 | r0 = 0x0 - 0x8001fb74 | Stack[Hu3DShadowCamBit@sda21] = r0 (s16/u16) - 0x8001fb78 | r0 = 0x0 - 0x8001fb7c | r3 = r26 + 0x5034 - 0x8001fb80 | r3[0x4] = r0 (s32/u32) - 0x8001fb84 | r0 = 0x0 - 0x8001fb88 | Stack[Hu3DShadowF@sda21] = r0 (s32/u32) - 0x8001fb8c | r0 = 0x0 - 0x8001fb90 | Stack[Hu3DProjectionNum@sda21] = r0 (s16/u16) - 0x8001fb94 | r0 = 0x0 - 0x8001fb98 | Stack[Hu3DCameraExistF@sda21] = r0 (s16/u16) - 0x8001fb9c | r0 = 0x0 - 0x8001fba0 | Stack[modelKillAllF@sda21] = r0 (s32/u32) - 0x8001fba4 | r0 = 0x0 - 0x8001fba8 | Stack[Hu3DPauseF@sda21] = r0 (s16/u16) - 0x8001fbac | r0 = 0x0 - 0x8001fbb0 | Stack[NoSyncF@sda21] = r0 (s16/u16) - 0x8001fbb4 | r11 = r1 + 0x30 - 0x8001fbb8 | call _restgpr_25 - 0x8001fbbc | r0 = Stack[0x34] (s32/u32) - 0x8001fbc0 | Link Register set to r0 - 0x8001fbc4 | r1 += 0x30 - 0x8001fbc8 | return -Hu3DInit end - -global function Hu3DPreProc: - 0x8001fbcc | Stack Size += 0x20 - 0x8001fbd0 | r0 set to Link Register - 0x8001fbd4 | Stack[0x24] = r0 (s32/u32) - 0x8001fbd8 | Stack[0x1c] = r31 (s32/u32) - 0x8001fbdc | Stack[0x18] = r30 (s32/u32) - 0x8001fbe0 | Stack[0x14] = r29 (s32/u32) - 0x8001fbe4 | r0 = Stack[BGColor@sda21] (s8/u8) - 0x8001fbe8 | Stack[0x8] = r0 (s8/u8) - 0x8001fbec | r0 = Stack[BGColor+0x1@sda21] (s8/u8) - 0x8001fbf0 | Stack[0x9] = r0 (s8/u8) - 0x8001fbf4 | r0 = Stack[BGColor+0x2@sda21] (s8/u8) - 0x8001fbf8 | Stack[0xa] = r0 (s8/u8) - 0x8001fbfc | r0 = Stack[BGColor+0x3@sda21] (s8/u8) - 0x8001fc00 | Stack[0xb] = r0 (s8/u8) - 0x8001fc04 | r29 = r1 + 0x8 - 0x8001fc08 | r3 = r29 - 0x8001fc0c | (^u16) r4 = 0x100 - 0x8001fc10 | r4 -= 0x1 - 0x8001fc14 | call GXSetCopyClear - 0x8001fc18 | (^u16) r3 = (^u16) Hu3DData - 0x8001fc1c | r31 = r3 + (vu16) Hu3DData - 0x8001fc20 | r30 = 0x0 - 0x8001fc24 | goto 0x8001fc48 - - from later address: - 0x8001fc28 | r0 = r31[0xc4] (s32/u32) - 0x8001fc2c | (cmp) - 0x8001fc30 | if r0 == 0x0 : goto 0x8001fc40 (s32/u32) - 0x8001fc34 | r0 = r31[0x50] (s32/u32) - 0x8001fc38 | r0 = rotate(r0, 0) & (bits 21 to 19) - 0x8001fc3c | r31[0x50] = r0 (s32/u32) - - from 0x8001fc30: - 0x8001fc40 | r30 += 0x1 - 0x8001fc44 | r31 += 0x124 - - from 0x8001fc24: - 0x8001fc48 | s32 r0 = s16 r30 - 0x8001fc4c | (cmp) - 0x8001fc50 | if r0 < 0x200 : goto 0x8001fc28 (s32/u32) - 0x8001fc54 | r0 = Stack[totalPolyCnt_801D3BE4@sda21] (s32/u32) - 0x8001fc58 | Stack[totalPolyCnted@sda21] = r0 (s32/u32) - 0x8001fc5c | r0 = Stack[totalMatCnt_801D3BDC@sda21] (s32/u32) - 0x8001fc60 | Stack[totalMatCnted_801D3BD8@sda21] = r0 (s32/u32) - 0x8001fc64 | r0 = Stack[totalTexCnt_801D3BD4@sda21] (s32/u32) - 0x8001fc68 | Stack[totalTexCnted_801D3BD0@sda21] = r0 (s32/u32) - 0x8001fc6c | r0 = Stack[totalTexCacheCnt_801D3BCC@sda21] (s32/u32) - 0x8001fc70 | Stack[totalTexCacheCnted_801D3BC8@sda21] = r0 (s32/u32) - 0x8001fc74 | r0 = 0x0 - 0x8001fc78 | Stack[totalTexCacheCnt_801D3BCC@sda21] = r0 (s32/u32) - 0x8001fc7c | Stack[totalTexCnt_801D3BD4@sda21] = r0 (s32/u32) - 0x8001fc80 | Stack[totalMatCnt_801D3BDC@sda21] = r0 (s32/u32) - 0x8001fc84 | Stack[totalPolyCnt_801D3BE4@sda21] = r0 (s32/u32) - 0x8001fc88 | r31 = Stack[0x1c] (s32/u32) - 0x8001fc8c | r30 = Stack[0x18] (s32/u32) - 0x8001fc90 | r29 = Stack[0x14] (s32/u32) - 0x8001fc94 | r0 = Stack[0x24] (s32/u32) - 0x8001fc98 | Link Register set to r0 - 0x8001fc9c | r1 += 0x20 - 0x8001fca0 | return -Hu3DPreProc end - -global function Hu3DExec: - 0x8001fca4 | Stack Size += 0xb0 - 0x8001fca8 | r0 set to Link Register - 0x8001fcac | Stack[0xb4] = r0 (s32/u32) - 0x8001fcb0 | r11 = r1 + 0xb0 - 0x8001fcb4 | call _savegpr_19 - 0x8001fcb8 | (^u16) r3 = (^u16) Hu3DData - 0x8001fcbc | r31 = r3 + (vu16) Hu3DData - 0x8001fcc0 | r19 = r31 + 0x2 - 0x8001fcc4 | r0 = r2[lbl_801D6BE0@sda21] (s8/u8) - 0x8001fcc8 | Stack[0xc] = r0 (s8/u8) - 0x8001fccc | r0 = r2[lbl_801D6BE1@sda21] (s8/u8) - 0x8001fcd0 | Stack[0xd] = r0 (s8/u8) - 0x8001fcd4 | r0 = r2[lbl_801D6BE2@sda21] (s8/u8) - 0x8001fcd8 | Stack[0xe] = r0 (s8/u8) - 0x8001fcdc | r0 = r2[lbl_801D6BE3@sda21] (s8/u8) - 0x8001fce0 | Stack[0xf] = r0 (s8/u8) - 0x8001fce4 | r3 = 0x3 - 0x8001fce8 | call HuPerfBegin - 0x8001fcec | r3 = 0x0 - 0x8001fcf0 | call GXSetCurrentMtx - 0x8001fcf4 | r27 = r19 + 0x4800 - 0x8001fcf8 | r0 = 0x0 - 0x8001fcfc | Stack[shadowModelDrawF@sda21] = r0 (s32/u32) - 0x8001fd00 | call HuSprBegin - 0x8001fd04 | r24 = 0x0 - 0x8001fd08 | r0 = 0x0 - 0x8001fd0c | Stack[Hu3DCameraNo@sda21] = r0 (s16/u16) - 0x8001fd10 | goto 0x80020270 - - from later address: - 0x8001fd14 | f1 = r2[lbl_801D4AB0@sda21] (f32) - 0x8001fd18 | f0 = r27[0x0] (f32) - 0x8001fd1c | (cmp) - 0x8001fd20 | if f1 == f0 : goto 0x80020260 (f32/f64) - 0x8001fd24 | call GXInvalidateVtxCache - 0x8001fd28 | r3 = 0x1 - 0x8001fd2c | r0 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fd30 | unable to interpret: ['slw', 'r0,', 'r3,', 'r0'] - 0x8001fd34 | s32 r22 = s16 r0 - 0x8001fd38 | Stack[Hu3DCameraBit@sda21] = r22 (s16/u16) - 0x8001fd3c | r0 = Stack[NoSyncF@sda21] (s16/u16) - 0x8001fd40 | (cmp) - 0x8001fd44 | if r0 != 0x0 : goto 0x8001fd94 (s32/u32) - 0x8001fd48 | r0 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fd4c | (cmp) - 0x8001fd50 | if r0 != 0x0 : goto 0x8001fd7c (s32/u32) - 0x8001fd54 | r0 = Stack[Hu3DShadowF@sda21] (s32/u32) - 0x8001fd58 | (cmp) - 0x8001fd5c | if r0 == 0x0 : goto 0x8001fd7c (s32/u32) - 0x8001fd60 | r0 = Stack[Hu3DShadowCamBit@sda21] (s16/u16) - 0x8001fd64 | (cmp) - 0x8001fd68 | if r0 == 0x0 : goto 0x8001fd7c (s32/u32) - 0x8001fd6c | call Hu3DShadowExec - 0x8001fd70 | r24 = 0x1 - 0x8001fd74 | call GXSetDrawDone - 0x8001fd78 | goto 0x8001fdbc - - from 0x8001fd68: - 0x8001fd7c | r0 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fd80 | (cmp) - 0x8001fd84 | if r0 == 0x0 : goto 0x8001fdbc (s32/u32) - 0x8001fd88 | r24 = 0x1 - 0x8001fd8c | call GXSetDrawDone - 0x8001fd90 | goto 0x8001fdbc - - from 0x8001fd44: - 0x8001fd94 | r0 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fd98 | (cmp) - 0x8001fd9c | if r0 != 0x0 : goto 0x8001fdbc (s32/u32) - 0x8001fda0 | r0 = Stack[Hu3DShadowF@sda21] (s32/u32) - 0x8001fda4 | (cmp) - 0x8001fda8 | if r0 == 0x0 : goto 0x8001fdbc (s32/u32) - 0x8001fdac | r0 = Stack[Hu3DShadowCamBit@sda21] (s16/u16) - 0x8001fdb0 | (cmp) - 0x8001fdb4 | if r0 == 0x0 : goto 0x8001fdbc (s32/u32) - 0x8001fdb8 | call Hu3DShadowExec - - from 0x8001fdb4: - 0x8001fdbc | r26 = r19 + 0x4dd4 - 0x8001fdc0 | r29 = 0x0 - 0x8001fdc4 | goto 0x8001fdf0 - - from later address: - 0x8001fdc8 | r0 = r26[0x4] (s32/u32) - 0x8001fdcc | (cmp) - 0x8001fdd0 | if r0 == 0x0 : goto 0x8001fde8 (s32/u32) - 0x8001fdd4 | r3 = r26 + 0x38 - 0x8001fdd8 | r4 = r26 + 0x14 - 0x8001fddc | r5 = r26 + 0x2c - 0x8001fde0 | r6 = r26 + 0x20 - 0x8001fde4 | call C_MTXLookAt - - from 0x8001fdd0: - 0x8001fde8 | r29 += 0x1 - 0x8001fdec | r26 += 0x98 - - from 0x8001fdc4: - 0x8001fdf0 | s32 r0 = s16 r29 - 0x8001fdf4 | (cmp) - 0x8001fdf8 | if r0 < 0x4 : goto 0x8001fdc8 (s32/u32) - 0x8001fdfc | r0 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fe00 | (cmp) - 0x8001fe04 | if r0 != 0x0 : goto 0x8001fe14 (s32/u32) - 0x8001fe08 | call HuSprDispInit - 0x8001fe0c | r3 = 0x7f - 0x8001fe10 | call HuSprExec - - from 0x8001fe04: - 0x8001fe14 | r0 = Stack[0x50cc] (s32/u32) - 0x8001fe18 | (cmp) - 0x8001fe1c | if r0 == 0x0 : goto 0x8001fe6c (s32/u32) - 0x8001fe20 | r3 = r19 + 0x50cc - 0x8001fe24 | r0 = r3[0xc] (s8/u8) - 0x8001fe28 | Stack[0x8] = r0 (s8/u8) - 0x8001fe2c | r0 = r3[0xd] (s8/u8) - 0x8001fe30 | Stack[0x9] = r0 (s8/u8) - 0x8001fe34 | r0 = r3[0xe] (s8/u8) - 0x8001fe38 | Stack[0xa] = r0 (s8/u8) - 0x8001fe3c | r0 = r3[0xf] (s8/u8) - 0x8001fe40 | Stack[0xb] = r0 (s8/u8) - 0x8001fe44 | r20 = r1 + 0x8 - 0x8001fe48 | r3 = Stack[0x50cc] (s32/u32) - 0x8001fe4c | r4 = r19 + 0x50cc - 0x8001fe50 | f1 = r4[0x4] (f32) - 0x8001fe54 | r4 = r19 + 0x50cc - 0x8001fe58 | f2 = r4[0x8] (f32) - 0x8001fe5c | f3 = r27[0x4] (f32) - 0x8001fe60 | f4 = r27[0x8] (f32) - 0x8001fe64 | r4 = r20 - 0x8001fe68 | call GXSetFog - - from 0x8001fe1c: - 0x8001fe6c | r28 = 0x0 - 0x8001fe70 | goto 0x80020254 - - from later address: - 0x8001fe74 | s32 r0 = s16 r28 - 0x8001fe78 | r0 = r0 << 2 (s32/u32) - 0x8001fe7c | r3 = r19 + 0x4d90 - 0x8001fe80 | r0 = r3[r0] (s32/u32) - 0x8001fe84 | (cmp) - 0x8001fe88 | if r0 == 0x0 : goto 0x8001fec4 (s32/u32) - 0x8001fe8c | r3 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fe90 | r4 = r19 + 0x50dc - 0x8001fe94 | call Hu3DCameraSet - 0x8001fe98 | r3 = r19 + 0x50dc - 0x8001fe9c | r4 = r19 + 0x510c - 0x8001fea0 | call PSMTXInvXpose - 0x8001fea4 | s32 r0 = s16 r28 - 0x8001fea8 | r0 = r0 << 2 (s32/u32) - 0x8001feac | r3 = r19 + 0x4d90 - 0x8001feb0 | r21 = r3[r0] (s32/u32) - 0x8001feb4 | r3 = r28 - 0x8001feb8 | r12 = r21 - 0x8001febc | Count Register set to r12 - 0x8001fec0 | Call to Subroutine - - from 0x8001fe88: - 0x8001fec4 | s32 r0 = s16 r28 - 0x8001fec8 | r0 = r0 << 1 (s32/u32) - 0x8001fecc | r3 = r19 + 0x4d80 - 0x8001fed0 | r0 = r3[r0] (s16/u16) - 0x8001fed4 | (cmp) - 0x8001fed8 | if r0 == 0x0 : goto 0x80020250 (s32/u32) - 0x8001fedc | call Hu3DDrawPreInit - 0x8001fee0 | r3 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x8001fee4 | r4 = r19 + 0x50dc - 0x8001fee8 | call Hu3DCameraSet - 0x8001feec | r3 = r19 + 0x50dc - 0x8001fef0 | r4 = r19 + 0x510c - 0x8001fef4 | call PSMTXInvXpose - 0x8001fef8 | (^u16) r3 = (^u16) Hu3DData - 0x8001fefc | r30 = r3 + (vu16) Hu3DData - 0x8001ff00 | r29 = 0x0 - 0x8001ff04 | r23 = r29 - 0x8001ff08 | goto 0x80020240 - - from later address: - 0x8001ff0c | r0 = r30[0xc4] (s32/u32) - 0x8001ff10 | (cmp) - 0x8001ff14 | if r0 == 0x0 : goto 0x80020238 (s32/u32) - 0x8001ff18 | r0 = r30[0x50] (s32/u32) - 0x8001ff1c | r0 = rotate(r0, 0) & (bits 15 to 15) - 0x8001ff20 | (cmp) - 0x8001ff24 | if r0 == 0x0 : goto 0x8001ff34 (s32/u32) - 0x8001ff28 | r3 = r29 - 0x8001ff2c | call Hu3DCameraMotionExec - 0x8001ff30 | goto 0x80020238 - - from 0x8001ff24: - 0x8001ff34 | r0 = r30[0x50] (s32/u32) - 0x8001ff38 | r0 &= 0x2001 - 0x8001ff3c | (cmp) - 0x8001ff40 | if r0 != 0x2001 : goto 0x8001ff64 (s32/u32) - 0x8001ff44 | r0 = r30[0x8] (s16/u16) - 0x8001ff48 | (cmp) - 0x8001ff4c | if r0 == -0x1 : goto 0x8001ff64 (s32/u32) - 0x8001ff50 | r3 = r29 - 0x8001ff54 | r4 = r30[0x8] (s16/u16) - 0x8001ff58 | f1 = r30[0x64] (f32) - 0x8001ff5c | r5 = 0x0 - 0x8001ff60 | call Hu3DMotionExec - - from 0x8001ff4c: - 0x8001ff64 | r0 = r30[0x50] (s32/u32) - 0x8001ff68 | r0 &= 0x9 - 0x8001ff6c | (cmp) - 0x8001ff70 | if r0 != 0x0 : goto 0x80020238 (s32/u32) - 0x8001ff74 | r3 = r30[0x22] (s16/u16) - 0x8001ff78 | s32 r0 = s16 r22 - 0x8001ff7c | r0 = r3 & r0 - 0x8001ff80 | (cmp) - 0x8001ff84 | if r0 == 0x0 : goto 0x80020238 (s32/u32) - 0x8001ff88 | r0 = r30[0x6] (s16/u16) - 0x8001ff8c | s32 r3 = s16 r0 - 0x8001ff90 | s32 r0 = s16 r28 - 0x8001ff94 | (cmp) - 0x8001ff98 | if r3 != r0 : goto 0x80020238 (s32/u32) - 0x8001ff9c | r0 = r30[0x50] (s32/u32) - 0x8001ffa0 | r0 = rotate(r0, 0) & (bits 20 to 20) - 0x8001ffa4 | (cmp) - 0x8001ffa8 | if r0 != 0x0 : goto 0x8001ffbc (s32/u32) - 0x8001ffac | r0 = r30[0x50] (s32/u32) - 0x8001ffb0 | r0 = rotate(r0, 0) & (bits 23 to 23) - 0x8001ffb4 | (cmp) - 0x8001ffb8 | if r0 == 0x0 : goto 0x8001ffdc (s32/u32) - - from 0x8001ffa8: - 0x8001ffbc | r0 = r30[0x50] (s32/u32) - 0x8001ffc0 | r0 = rotate(r0, 0) & (bits 23 to 23) - 0x8001ffc4 | (cmp) - 0x8001ffc8 | if r0 == 0x0 : goto 0x8002013c (s32/u32) - 0x8001ffcc | r0 = r30[0x0] (s8/u8) - 0x8001ffd0 | r0 = remove(r0, 31) - 0x8001ffd4 | (cmp) - 0x8001ffd8 | if r0 == 0x0 : goto 0x8002013c (s32/u32) - - from 0x8001ffb8: - 0x8001ffdc | r25 = 0x0 - 0x8001ffe0 | r0 = r30[0x54] (s32/u32) - 0x8001ffe4 | r0 = rotate(r0, 0) & (bits 2 to 0) - 0x8001ffe8 | r30[0x54] = r0 (s32/u32) - 0x8001ffec | r0 = r30[0x8] (s16/u16) - 0x8001fff0 | (cmp) - 0x8001fff4 | if r0 == -0x1 : goto 0x8002000c (s32/u32) - 0x8001fff8 | r3 = r29 - 0x8001fffc | r4 = r30[0x8] (s16/u16) - 0x80020000 | f1 = r30[0x64] (f32) - 0x80020004 | r5 = 0x0 - 0x80020008 | call Hu3DMotionExec - - from 0x8001fff4: - 0x8002000c | r0 = r30[0xc] (s16/u16) - 0x80020010 | (cmp) - 0x80020014 | if r0 == -0x1 : goto 0x80020020 (s32/u32) - 0x80020018 | r3 = r29 - 0x8002001c | call Hu3DSubMotionExec - - from 0x80020014: - 0x80020020 | r0 = r30[0xa] (s16/u16) - 0x80020024 | (cmp) - 0x80020028 | if r0 == -0x1 : goto 0x80020040 (s32/u32) - 0x8002002c | r3 = r29 - 0x80020030 | r4 = r30[0xa] (s16/u16) - 0x80020034 | f1 = r30[0x74] (f32) - 0x80020038 | r5 = 0x1 - 0x8002003c | call Hu3DMotionExec - - from 0x80020028: - 0x80020040 | r0 = r30[0x50] (s32/u32) - 0x80020044 | r0 = rotate(r0, 0) & (bits 21 to 21) - 0x80020048 | (cmp) - 0x8002004c | if r0 == 0x0 : goto 0x8002005c (s32/u32) - 0x80020050 | r3 = r30 - 0x80020054 | call ClusterMotionExec - 0x80020058 | r25 = 0x1 - - from 0x8002004c: - 0x8002005c | r0 = r30[0xe] (s16/u16) - 0x80020060 | (cmp) - 0x80020064 | if r0 == -0x1 : goto 0x800200a4 (s32/u32) - 0x80020068 | r0 = r30[0x8] (s16/u16) - 0x8002006c | (cmp) - 0x80020070 | if r0 != -0x1 : goto 0x8002008c (s32/u32) - 0x80020074 | r3 = r29 - 0x80020078 | r4 = r30[0xe] (s16/u16) - 0x8002007c | f1 = r30[0x94] (f32) - 0x80020080 | r5 = 0x0 - 0x80020084 | call Hu3DMotionExec - 0x80020088 | goto 0x800200a0 - - from 0x80020070: - 0x8002008c | r3 = r29 - 0x80020090 | r4 = r30[0xe] (s16/u16) - 0x80020094 | f1 = r30[0x94] (f32) - 0x80020098 | r5 = 0x1 - 0x8002009c | call Hu3DMotionExec - - from 0x80020088: - 0x800200a0 | r25 = 0x1 - - from 0x80020064: - 0x800200a4 | r0 = r30[0x50] (s32/u32) - 0x800200a8 | r0 &= 0x90 - 0x800200ac | (cmp) - 0x800200b0 | if r0 != 0x0 : goto 0x80020120 (s32/u32) - 0x800200b4 | r0 = r30[0x54] (s32/u32) - 0x800200b8 | (^u16) r3 = 0x4000 - 0x800200bc | r3 += 0x2 - 0x800200c0 | r0 &= r3 - 0x800200c4 | (cmp) - 0x800200c8 | if r0 != 0x0 : goto 0x80020120 (s32/u32) - 0x800200cc | r25 = 0x1 - 0x800200d0 | r3 = r30[0xc4] (s32/u32) - 0x800200d4 | call InitVtxParm - 0x800200d8 | r0 = r30[0xe] (s16/u16) - 0x800200dc | (cmp) - 0x800200e0 | if r0 == -0x1 : goto 0x800200ec (s32/u32) - 0x800200e4 | r3 = r30[0xc4] (s32/u32) - 0x800200e8 | call ShapeProc - - from 0x800200e0: - 0x800200ec | r0 = r30[0x50] (s32/u32) - 0x800200f0 | r0 = rotate(r0, 0) & (bits 21 to 21) - 0x800200f4 | (cmp) - 0x800200f8 | if r0 == 0x0 : goto 0x80020104 (s32/u32) - 0x800200fc | r3 = r30 - 0x80020100 | call ClusterProc - - from 0x800200f8: - 0x80020104 | r3 = r30[0xc4] (s32/u32) - 0x80020108 | r0 = r3[0x6e] (s16/u16) - 0x8002010c | (cmp) - 0x80020110 | if r0 == 0x0 : goto 0x8002011c (s32/u32) - 0x80020114 | r3 = r30[0xc4] (s32/u32) - 0x80020118 | call EnvelopeProc - - from 0x80020110: - 0x8002011c | call PPCSync - - from 0x800200c8: - 0x80020120 | s32 r0 = s16 r25 - 0x80020124 | (cmp) - 0x80020128 | if r0 == 0x0 : goto 0x80020130 (s32/u32) - 0x8002012c | call GXInvalidateVtxCache - - from 0x80020128: - 0x80020130 | r0 = r30[0x50] (s32/u32) - 0x80020134 | r0 |= 0x800 - 0x80020138 | r30[0x50] = r0 (s32/u32) - - from 0x8001ffd8: - 0x8002013c | s32 r0 = s16 r24 - 0x80020140 | (cmp) - 0x80020144 | if r0 == 0x0 : goto 0x80020160 (s32/u32) - 0x80020148 | r0 = r30[0x50] (s32/u32) - 0x8002014c | r0 = rotate(r0, 0) & (bits 27 to 27) - 0x80020150 | (cmp) - 0x80020154 | if r0 == 0x0 : goto 0x80020160 (s32/u32) - 0x80020158 | call GXWaitDrawDone - 0x8002015c | r24 = 0x0 - - from 0x80020154: - 0x80020160 | r0 = r30[0x50] (s32/u32) - 0x80020164 | r0 = rotate(r0, 0) & (bits 16 to 16) - 0x80020168 | (cmp) - 0x8002016c | if r0 != 0x0 : goto 0x8002020c (s32/u32) - 0x80020170 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020174 | f0 = r30[0xe4] (f32) - 0x80020178 | (cmp) - 0x8002017c | if f1 != f0 : goto 0x800201a0 (f32/f64) - 0x80020180 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020184 | f0 = r30[0xe8] (f32) - 0x80020188 | (cmp) - 0x8002018c | if f1 != f0 : goto 0x800201a0 (f32/f64) - 0x80020190 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020194 | f0 = r30[0xec] (f32) - 0x80020198 | (cmp) - 0x8002019c | if f1 == f0 : goto 0x8002020c (f32/f64) - - from 0x8002018c: - 0x800201a0 | r3 = r1 + 0x40 - 0x800201a4 | f1 = r30[0xd8] (f32) - 0x800201a8 | f2 = r30[0xdc] (f32) - 0x800201ac | f3 = r30[0xe0] (f32) - 0x800201b0 | call mtxRot - 0x800201b4 | r3 = r1 + 0x40 - 0x800201b8 | f1 = r30[0xe4] (f32) - 0x800201bc | f2 = r30[0xe8] (f32) - 0x800201c0 | f3 = r30[0xec] (f32) - 0x800201c4 | call mtxScaleCat - 0x800201c8 | r3 = r1 + 0x40 - 0x800201cc | f1 = r30[0xcc] (f32) - 0x800201d0 | f2 = r30[0xd0] (f32) - 0x800201d4 | f3 = r30[0xd4] (f32) - 0x800201d8 | call mtxTransCat - 0x800201dc | r3 = r19 + 0x50dc - 0x800201e0 | r4 = r1 + 0x40 - 0x800201e4 | r5 = r1 + 0x10 - 0x800201e8 | call PSMTXConcat - 0x800201ec | r3 = r1 + 0x10 - 0x800201f0 | r4 = r30 + 0xf0 - 0x800201f4 | r5 = r1 + 0x10 - 0x800201f8 | call PSMTXConcat - 0x800201fc | r3 = r30 - 0x80020200 | r4 = r1 + 0x10 - 0x80020204 | r5 = r30 + 0xe4 - 0x80020208 | call Hu3DDraw - - from 0x8002019c: - 0x8002020c | r3 = r30[0x0] (s8/u8) - 0x80020210 | r0 = r3 + 0x1 - 0x80020214 | r30[0x0] = r0 (s8/u8) - 0x80020218 | r23 += 0x1 - 0x8002021c | s32 r4 = s16 r23 - 0x80020220 | s32 r0 = s16 r28 - 0x80020224 | r0 = r0 << 1 (s32/u32) - 0x80020228 | r3 = r19 + 0x4d80 - 0x8002022c | r0 = r3[r0] (s16/u16) - 0x80020230 | (cmp) - 0x80020234 | if r4 >= r0 : goto 0x8002024c (s32/u32) - - from 0x8001ff98: - 0x80020238 | r29 += 0x1 - 0x8002023c | r30 += 0x124 - - from 0x8001ff08: - 0x80020240 | s32 r0 = s16 r29 - 0x80020244 | (cmp) - 0x80020248 | if r0 < 0x200 : goto 0x8001ff0c (s32/u32) - - from 0x80020234: - 0x8002024c | call Hu3DDrawPost - - from 0x8001fed8: - 0x80020250 | r28 += 0x1 - - from 0x8001fe70: - 0x80020254 | s32 r0 = s16 r28 - 0x80020258 | (cmp) - 0x8002025c | if r0 < 0x8 : goto 0x8001fe74 (s32/u32) - - from 0x8001fd20: - 0x80020260 | r3 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x80020264 | r0 = r3 + 0x1 - 0x80020268 | Stack[Hu3DCameraNo@sda21] = r0 (s16/u16) - 0x8002026c | r27 += 0x58 - - from 0x8001fd10: - 0x80020270 | r0 = Stack[Hu3DCameraNo@sda21] (s16/u16) - 0x80020274 | (cmp) - 0x80020278 | if r0 < 0x10 : goto 0x8001fd14 (s32/u32) - 0x8002027c | call HuSprDispInit - 0x80020280 | r3 = 0x0 - 0x80020284 | call HuSprExec - 0x80020288 | (^u16) r3 = (^u16) Hu3DData - 0x8002028c | r30 = r3 + (vu16) Hu3DData - 0x80020290 | r29 = 0x0 - 0x80020294 | goto 0x800202f8 - - from later address: - 0x80020298 | r0 = r30[0xc4] (s32/u32) - 0x8002029c | (cmp) - 0x800202a0 | if r0 == 0x0 : goto 0x800202f0 (s32/u32) - 0x800202a4 | r0 = r30[0x8] (s16/u16) - 0x800202a8 | (cmp) - 0x800202ac | if r0 != -0x1 : goto 0x800202cc (s32/u32) - 0x800202b0 | r0 = r30[0x50] (s32/u32) - 0x800202b4 | r0 = rotate(r0, 0) & (bits 21 to 21) - 0x800202b8 | (cmp) - 0x800202bc | if r0 != 0x0 : goto 0x800202cc (s32/u32) - 0x800202c0 | r0 = r30[0xe] (s16/u16) - 0x800202c4 | (cmp) - 0x800202c8 | if r0 == -0x1 : goto 0x800202f0 (s32/u32) - - from 0x800202bc: - 0x800202cc | r0 = Stack[Hu3DPauseF@sda21] (s16/u16) - 0x800202d0 | (cmp) - 0x800202d4 | if r0 == 0x0 : goto 0x800202e8 (s32/u32) - 0x800202d8 | r0 = r30[0x50] (s32/u32) - 0x800202dc | r0 = rotate(r0, 0) & (bits 10 to 10) - 0x800202e0 | (cmp) - 0x800202e4 | if r0 == 0x0 : goto 0x800202f0 (s32/u32) - - from 0x800202d4: - 0x800202e8 | r3 = r29 - 0x800202ec | call Hu3DMotionNext - - from 0x800202e4: - 0x800202f0 | r29 += 0x1 - 0x800202f4 | r30 += 0x124 - - from 0x80020294: - 0x800202f8 | s32 r0 = s16 r29 - 0x800202fc | (cmp) - 0x80020300 | if r0 < 0x200 : goto 0x80020298 (s32/u32) - 0x80020304 | call HuSprFinish - 0x80020308 | call Hu3DAnimExec - 0x8002030c | r3 = 0x3 - 0x80020310 | call HuPerfEnd - 0x80020314 | r11 = r1 + 0xb0 - 0x80020318 | call _restgpr_19 - 0x8002031c | r0 = Stack[0xb4] (s32/u32) - 0x80020320 | Link Register set to r0 - 0x80020324 | r1 += 0xb0 - 0x80020328 | return -Hu3DExec end - -global function Hu3DAllKill: - 0x8002032c | Stack Size += 0x20 - 0x80020330 | r0 set to Link Register - 0x80020334 | Stack[0x24] = r0 (s32/u32) - 0x80020338 | Stack[0x1c] = r31 (s32/u32) - 0x8002033c | Stack[0x18] = r30 (s32/u32) - 0x80020340 | Stack[0x14] = r29 (s32/u32) - 0x80020344 | (^u16) r3 = (^u16) Hu3DData - 0x80020348 | r31 = r3 + (vu16) Hu3DData - 0x8002034c | r29 = r31 + 0x2 - 0x80020350 | call Hu3DModelAllKill - 0x80020354 | call Hu3DMotionAllKill - 0x80020358 | call Hu3DCameraAllKill - 0x8002035c | call Hu3DLightAllKill - 0x80020360 | call Hu3DAnimAllKill - 0x80020364 | r4 = r29[0x4db0] (s32/u32) - 0x80020368 | (^u16) r3 = (^u16) refMapData0 - 0x8002036c | r0 = r3 + (vu16) refMapData0 - 0x80020370 | (cmp) - 0x80020374 | if r4 == r0 : goto 0x80020380 (s32/u32) - 0x80020378 | r3 = r29[0x4db0] (s32/u32) - 0x8002037c | call HuMemDirectFree - - from 0x80020374: - 0x80020380 | (^u16) r3 = (^u16) refMapData0 - 0x80020384 | r3 += (vu16) refMapData0 - 0x80020388 | call HuSprAnimRead - 0x8002038c | r29[0x4db0] = r3 (s32/u32) - 0x80020390 | r3 = r29 + 0x5034 - 0x80020394 | r0 = r3[0x4] (s32/u32) - 0x80020398 | (cmp) - 0x8002039c | if r0 == 0x0 : goto 0x800203c8 (s32/u32) - 0x800203a0 | r3 = r29 + 0x5034 - 0x800203a4 | r3 = r3[0x4] (s32/u32) - 0x800203a8 | call HuMemDirectFree - 0x800203ac | r0 = 0x0 - 0x800203b0 | Stack[Hu3DShadowCamBit@sda21] = r0 (s16/u16) - 0x800203b4 | r0 = 0x0 - 0x800203b8 | r3 = r29 + 0x5034 - 0x800203bc | r3[0x4] = r0 (s32/u32) - 0x800203c0 | r0 = 0x0 - 0x800203c4 | Stack[Hu3DShadowF@sda21] = r0 (s32/u32) - - from 0x8002039c: - 0x800203c8 | call Hu3DFogClear - 0x800203cc | r30 = 0x0 - 0x800203d0 | goto 0x80020400 - - from later address: - 0x800203d4 | r4 = 0x0 - 0x800203d8 | s32 r0 = s16 r30 - 0x800203dc | r0 = r0 << 1 (s32/u32) - 0x800203e0 | r3 = r29 + 0x4d80 - 0x800203e4 | r3[r0] = r4 (s16/u16) - 0x800203e8 | r4 = 0x0 - 0x800203ec | s32 r0 = s16 r30 - 0x800203f0 | r0 = r0 << 2 (s32/u32) - 0x800203f4 | r3 = r29 + 0x4d90 - 0x800203f8 | unable to interpret: ['stwx', 'r4,', 'r3,', 'r0'] - 0x800203fc | r30 += 0x1 - - from 0x800203d0: - 0x80020400 | s32 r0 = s16 r30 - 0x80020404 | (cmp) - 0x80020408 | if r0 < 0x8 : goto 0x800203d4 (s32/u32) - 0x8002040c | r30 = 0x0 - 0x80020410 | goto 0x80020454 - - from later address: - 0x80020414 | s32 r0 = s16 r30 - 0x80020418 | r4 = r0 * 0x98 - 0x8002041c | r3 = r29 + 0x4dd4 - 0x80020420 | r0 = r4 + 0x4 - 0x80020424 | r0 = r3[r0] (s32/u32) - 0x80020428 | (cmp) - 0x8002042c | if r0 == 0x0 : goto 0x80020438 (s32/u32) - 0x80020430 | r3 = r30 - 0x80020434 | call Hu3DProjectionKill - - from 0x8002042c: - 0x80020438 | r5 = 0x0 - 0x8002043c | s32 r0 = s16 r30 - 0x80020440 | r4 = r0 * 0x98 - 0x80020444 | r3 = r29 + 0x4dd4 - 0x80020448 | r0 = r4 + 0x4 - 0x8002044c | unable to interpret: ['stwx', 'r5,', 'r3,', 'r0'] - 0x80020450 | r30 += 0x1 - - from 0x80020410: - 0x80020454 | s32 r0 = s16 r30 - 0x80020458 | (cmp) - 0x8002045c | if r0 < 0x4 : goto 0x80020414 (s32/u32) - 0x80020460 | r0 = 0x0 - 0x80020464 | Stack[NoSyncF@sda21] = r0 (s16/u16) - 0x80020468 | r31 = Stack[0x1c] (s32/u32) - 0x8002046c | r30 = Stack[0x18] (s32/u32) - 0x80020470 | r29 = Stack[0x14] (s32/u32) - 0x80020474 | r0 = Stack[0x24] (s32/u32) - 0x80020478 | Link Register set to r0 - 0x8002047c | r1 += 0x20 - 0x80020480 | return -Hu3DAllKill end - -global function Hu3DBGColorSet: - 0x80020484 | Stack[BGColor@sda21] = r3 (s8/u8) - 0x80020488 | r6 = r13 - BGColor@sda21 - 0x8002048c | r6[0x1] = r4 (s8/u8) - 0x80020490 | r6 = r13 - BGColor@sda21 - 0x80020494 | r6[0x2] = r5 (s8/u8) - 0x80020498 | return -Hu3DBGColorSet end - -global function Hu3DLayerHookSet: - 0x8002049c | s32 r0 = s16 r3 - 0x800204a0 | r6 = r0 << 2 (s32/u32) - 0x800204a4 | (^u16) r5 = (^u16) layerHook - 0x800204a8 | r0 = r5 - layerHook@l - 0x800204ac | r5 = r0 + r6 - 0x800204b0 | r5[0x0] = r4 (s32/u32) - 0x800204b4 | return -Hu3DLayerHookSet end - -global function Hu3DPauseSet: - 0x800204b8 | s32 r0 = s16 r3 - 0x800204bc | Stack[Hu3DPauseF@sda21] = r0 (s16/u16) - 0x800204c0 | return -Hu3DPauseSet end - -global function Hu3DNoSyncSet: - 0x800204c4 | r0 = remove(r3, 16) - 0x800204c8 | Stack[NoSyncF@sda21] = r0 (s16/u16) - 0x800204cc | return -Hu3DNoSyncSet end - -global function Hu3DModelCreate: - 0x800204d0 | Stack Size += 0x20 - 0x800204d4 | r0 set to Link Register - 0x800204d8 | Stack[0x24] = r0 (s32/u32) - 0x800204dc | Stack[0x1c] = r31 (s32/u32) - 0x800204e0 | Stack[0x18] = r30 (s32/u32) - 0x800204e4 | Stack[0x14] = r29 (s32/u32) - 0x800204e8 | Stack[0x8] = r3 (s32/u32) - 0x800204ec | (^u16) r3 = (^u16) Hu3DData - 0x800204f0 | r31 = r3 + (vu16) Hu3DData - 0x800204f4 | r30 = 0x0 - 0x800204f8 | goto 0x80020510 - - from later address: - 0x800204fc | r0 = r31[0xc4] (s32/u32) - 0x80020500 | (cmp) - 0x80020504 | if r0 == 0x0 : goto 0x8002051c (s32/u32) - 0x80020508 | r30 += 0x1 - 0x8002050c | r31 += 0x124 - - from 0x800204f8: - 0x80020510 | s32 r0 = s16 r30 - 0x80020514 | (cmp) - 0x80020518 | if r0 < 0x200 : goto 0x800204fc (s32/u32) - - from 0x80020504: - 0x8002051c | s32 r0 = s16 r30 - 0x80020520 | (cmp) - 0x80020524 | if r0 != 0x200 : goto 0x80020540 (s32/u32) - 0x80020528 | (^u16) r3 = (^u16) lbl_8012D560 - 0x8002052c | r3 -= lbl_8012D560@l - 0x80020530 | clear(cr1eq) - 0x80020534 | call OSReport - 0x80020538 | r3 = -0x1 - 0x8002053c | goto 0x800207e4 - - from 0x80020524: - 0x80020540 | r3 = Stack[0x8] (s32/u32) - 0x80020544 | call LoadHSF - 0x80020548 | r31[0xc4] = r3 (s32/u32) - 0x8002054c | r0 = r31[0xc4] (s32/u32) - 0x80020550 | Stack[Hu3DMallocNo@sda21] = r0 (s32/u32) - 0x80020554 | r31[0x48] = r0 (s32/u32) - 0x80020558 | r0 = 0x0 - 0x8002055c | r31[0x50] = r0 (s32/u32) - 0x80020560 | r0 = 0x0 - 0x80020564 | r31[0x54] = r0 (s32/u32) - 0x80020568 | r0 = 0x0 - 0x8002056c | r31[0x2] = r0 (s8/u8) - 0x80020570 | r3 = r30 - 0x80020574 | r4 = r31[0x48] (s32/u32) - 0x80020578 | call MakeDisplayList - 0x8002057c | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80020580 | r31[0x68] = f0 (f32) - 0x80020584 | r29 = 0x0 - 0x80020588 | goto 0x800205a4 - - from later address: - 0x8002058c | r4 = -0x1 - 0x80020590 | s32 r0 = s16 r29 - 0x80020594 | r3 = r0 << 1 (s32/u32) - 0x80020598 | r0 = r3 + 0x10 - 0x8002059c | r31[r0] = r4 (s16/u16) - 0x800205a0 | r29 += 0x1 - - from 0x80020588: - 0x800205a4 | s32 r0 = s16 r29 - 0x800205a8 | (cmp) - 0x800205ac | if r0 < 0x4 : goto 0x8002058c (s32/u32) - 0x800205b0 | r0 = -0x1 - 0x800205b4 | r31[0xa] = r0 (s16/u16) - 0x800205b8 | r0 = -0x1 - 0x800205bc | r31[0xc] = r0 (s16/u16) - 0x800205c0 | r0 = -0x1 - 0x800205c4 | r31[0xe] = r0 (s16/u16) - 0x800205c8 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x800205cc | r31[0x64] = f0 (f32) - 0x800205d0 | r3 = r31[0xc4] (s32/u32) - 0x800205d4 | r0 = r3[0x7a] (s16/u16) - 0x800205d8 | (cmp) - 0x800205dc | if r0 == 0x0 : goto 0x80020670 (s32/u32) - 0x800205e0 | r3 = r30 - 0x800205e4 | call Hu3DMotionModelCreate - 0x800205e8 | r31[0x20] = r3 (s16/u16) - 0x800205ec | r31[0x8] = r3 (s16/u16) - 0x800205f0 | r3 = r31[0xc4] (s32/u32) - 0x800205f4 | r0 = r3[0x6e] (s16/u16) - 0x800205f8 | (cmp) - 0x800205fc | if r0 == 0x0 : goto 0x80020620 (s32/u32) - 0x80020600 | r3 = r30 - 0x80020604 | r4 = r31[0x8] (s16/u16) - 0x80020608 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x8002060c | r5 = 0x0 - 0x80020610 | call Hu3DMotionExec - 0x80020614 | r3 = r31[0xc4] (s32/u32) - 0x80020618 | call EnvelopeProc - 0x8002061c | call PPCSync - - from 0x800205fc: - 0x80020620 | r3 = r31[0xc4] (s32/u32) - 0x80020624 | r0 = r3[0x72] (s16/u16) - 0x80020628 | (cmp) - 0x8002062c | if r0 == 0x0 : goto 0x8002063c (s32/u32) - 0x80020630 | r3 = r30 - 0x80020634 | r4 = r31[0x8] (s16/u16) - 0x80020638 | call Hu3DMotionClusterSet - - from 0x8002062c: - 0x8002063c | r3 = r31[0xc4] (s32/u32) - 0x80020640 | r0 = r3[0x76] (s16/u16) - 0x80020644 | (cmp) - 0x80020648 | if r0 == 0x0 : goto 0x80020658 (s32/u32) - 0x8002064c | r3 = r30 - 0x80020650 | r4 = r31[0x8] (s16/u16) - 0x80020654 | call Hu3DMotionShapeSet - - from 0x80020648: - 0x80020658 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x8002065c | r31[0x6c] = f0 (f32) - 0x80020660 | r3 = r30 - 0x80020664 | call Hu3DMotionMaxTimeGet - 0x80020668 | r31[0x70] = f1 (f32) - 0x8002066c | goto 0x8002067c - - from 0x800205dc: - 0x80020670 | r0 = -0x1 - 0x80020674 | r31[0x8] = r0 (s16/u16) - 0x80020678 | r31[0x20] = r0 (s16/u16) - - from 0x8002066c: - 0x8002067c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020680 | r31[0xd4] = f0 (f32) - 0x80020684 | r31[0xd0] = f0 (f32) - 0x80020688 | r31[0xcc] = f0 (f32) - 0x8002068c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020690 | r31[0xe0] = f0 (f32) - 0x80020694 | r31[0xdc] = f0 (f32) - 0x80020698 | r31[0xd8] = f0 (f32) - 0x8002069c | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x800206a0 | r31[0xec] = f0 (f32) - 0x800206a4 | r31[0xe8] = f0 (f32) - 0x800206a8 | r31[0xe4] = f0 (f32) - 0x800206ac | (^u16) r3 = 0x1 - 0x800206b0 | r3 -= 0x1 - 0x800206b4 | r31[0x22] = r3 (s16/u16) - 0x800206b8 | r0 = 0x0 - 0x800206bc | r31[0x6] = r0 (s16/u16) - 0x800206c0 | r0 = 0x0 - 0x800206c4 | r31[0x120] = r0 (s32/u32) - 0x800206c8 | r0 = 0x0 - 0x800206cc | r31[0x26] = r0 (s16/u16) - 0x800206d0 | r0 = 0x0 - 0x800206d4 | r31[0x3] = r0 (s8/u8) - 0x800206d8 | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x800206dc | r31[0x5c] = f0 (f32) - 0x800206e0 | r31[0x60] = f0 (f32) - 0x800206e4 | r31[0x58] = f0 (f32) - 0x800206e8 | r0 = -0x1 - 0x800206ec | r31[0x4] = r0 (s8/u8) - 0x800206f0 | r0 = -0x1 - 0x800206f4 | r31[0x24] = r0 (s16/u16) - 0x800206f8 | r29 = 0x0 - 0x800206fc | goto 0x80020718 - - from later address: - 0x80020700 | r4 = -0x1 - 0x80020704 | s32 r0 = s16 r29 - 0x80020708 | r3 = r0 << 1 (s32/u32) - 0x8002070c | r0 = r3 + 0x38 - 0x80020710 | r31[r0] = r4 (s16/u16) - 0x80020714 | r29 += 0x1 - - from 0x800206fc: - 0x80020718 | s32 r0 = s16 r29 - 0x8002071c | (cmp) - 0x80020720 | if r0 < 0x8 : goto 0x80020700 (s32/u32) - 0x80020724 | r0 = 0x0 - 0x80020728 | r31[0x1] = r0 (s8/u8) - 0x8002072c | r0 = remove(r30, 24) - 0x80020730 | r31[0x0] = r0 (s8/u8) - 0x80020734 | r3 = r31 + 0xf0 - 0x80020738 | call PSMTXIdentity - 0x8002073c | (^u16) r3 = (^u16) layerNum - 0x80020740 | r3 -= layerNum@l - 0x80020744 | r3 = r3[0x0] (s16/u16) - 0x80020748 | r0 = r3 + 0x1 - 0x8002074c | (^u16) r3 = (^u16) layerNum - 0x80020750 | r3 -= layerNum@l - 0x80020754 | r3[0x0] = r0 (s16/u16) - 0x80020758 | r3 = 0x2 - 0x8002075c | call HuMemDCFlush - 0x80020760 | r3 = r31[0xc4] (s32/u32) - 0x80020764 | r0 = r3[0x58] (s16/u16) - 0x80020768 | (cmp) - 0x8002076c | if r0 == 0x0 : goto 0x800207e0 (s32/u32) - 0x80020770 | r3 = r31[0xc4] (s32/u32) - 0x80020774 | r3 = r3[0x8] (s32/u32) - 0x80020778 | f1 = r3[0x4] (f32) - 0x8002077c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020780 | (cmp) - 0x80020784 | if f1 != f0 : goto 0x800207a0 (f32/f64) - 0x80020788 | r3 = r31[0xc4] (s32/u32) - 0x8002078c | r3 = r3[0x8] (s32/u32) - 0x80020790 | f1 = r3[0x8] (f32) - 0x80020794 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020798 | (cmp) - 0x8002079c | if f1 == f0 : goto 0x800207e0 (f32/f64) - - from 0x80020784: - 0x800207a0 | r3 = r31[0xc4] (s32/u32) - 0x800207a4 | r3 = r3[0x8] (s32/u32) - 0x800207a8 | f1 = r3[0x4] (f32) - 0x800207ac | r3 = r31[0xc4] (s32/u32) - 0x800207b0 | r3 = r3[0x8] (s32/u32) - 0x800207b4 | f2 = r3[0x8] (f32) - 0x800207b8 | r3 = r31[0xc4] (s32/u32) - 0x800207bc | r3 = r3[0x8] (s32/u32) - 0x800207c0 | r3 = r3[0xc] (s8/u8) - 0x800207c4 | r4 = r31[0xc4] (s32/u32) - 0x800207c8 | r4 = r4[0x8] (s32/u32) - 0x800207cc | r4 = r4[0xd] (s8/u8) - 0x800207d0 | r5 = r31[0xc4] (s32/u32) - 0x800207d4 | r5 = r5[0x8] (s32/u32) - 0x800207d8 | r5 = r5[0xe] (s8/u8) - 0x800207dc | call Hu3DFogSet - - from 0x8002079c: - 0x800207e0 | r3 = r30 - - from 0x8002053c: - 0x800207e4 | r31 = Stack[0x1c] (s32/u32) - 0x800207e8 | r30 = Stack[0x18] (s32/u32) - 0x800207ec | r29 = Stack[0x14] (s32/u32) - 0x800207f0 | r0 = Stack[0x24] (s32/u32) - 0x800207f4 | Link Register set to r0 - 0x800207f8 | r1 += 0x20 - 0x800207fc | return -Hu3DModelCreate end - -global function Hu3DModelLink: - 0x80020800 | Stack Size += 0x20 - 0x80020804 | r0 set to Link Register - 0x80020808 | Stack[0x24] = r0 (s32/u32) - 0x8002080c | r11 = r1 + 0x20 - 0x80020810 | call _savegpr_26 - 0x80020814 | r26 = r3 - 0x80020818 | s32 r0 = s16 r26 - 0x8002081c | r4 = r0 * 0x124 - 0x80020820 | (^u16) r3 = (^u16) Hu3DData - 0x80020824 | r0 = r3 + (vu16) Hu3DData - 0x80020828 | r30 = r0 + r4 - 0x8002082c | (^u16) r3 = (^u16) Hu3DData - 0x80020830 | r31 = r3 + (vu16) Hu3DData - 0x80020834 | r28 = 0x0 - 0x80020838 | goto 0x80020850 - - from later address: - 0x8002083c | r0 = r31[0xc4] (s32/u32) - 0x80020840 | (cmp) - 0x80020844 | if r0 == 0x0 : goto 0x8002085c (s32/u32) - 0x80020848 | r28 += 0x1 - 0x8002084c | r31 += 0x124 - - from 0x80020838: - 0x80020850 | s32 r0 = s16 r28 - 0x80020854 | (cmp) - 0x80020858 | if r0 < 0x200 : goto 0x8002083c (s32/u32) - - from 0x80020844: - 0x8002085c | s32 r0 = s16 r28 - 0x80020860 | (cmp) - 0x80020864 | if r0 != 0x200 : goto 0x80020870 (s32/u32) - 0x80020868 | r3 = -0x1 - 0x8002086c | goto 0x80020ad0 - - from 0x80020864: - 0x80020870 | r0 = r30[0xc4] (s32/u32) - 0x80020874 | r31[0xc8] = r0 (s32/u32) - 0x80020878 | r3 = 0x2 - 0x8002087c | r4 = 0x80 - 0x80020880 | r5 = r31[0x4c] (s32/u32) - 0x80020884 | call HuMemDirectMallocNum - 0x80020888 | r31[0xc4] = r3 (s32/u32) - 0x8002088c | r0 = r31[0xc4] (s32/u32) - 0x80020890 | r31[0x4c] = r0 (s32/u32) - 0x80020894 | r4 = r30[0xc4] (s32/u32) - 0x80020898 | r3 = r31[0xc4] (s32/u32) - 0x8002089c | r5 = r3 - 0x4 - 0x800208a0 | r4 -= 0x4 - 0x800208a4 | r0 = 0x10 - 0x800208a8 | Count Register set to r0 - - from later address: - 0x800208ac | r3 = r4[0x4] (s32/u32) - 0x800208b0 | unable to interpret: ['lwzu', 'r0,', '0x8(r4)'] - 0x800208b4 | r5[0x4] = r3 (s32/u32) - 0x800208b8 | Stack Size += x8 - 0x800208bc | unable to interpret: ['bdnz', '.L_800208AC'] - 0x800208c0 | r3 = r31[0xc4] (s32/u32) - 0x800208c4 | r4 = r31[0x4c] (s32/u32) - 0x800208c8 | call Hu3DObjDuplicate - 0x800208cc | r27 = r3 - 0x800208d0 | r3 = r31[0xc4] (s32/u32) - 0x800208d4 | r4 = r3[0x4c] (s32/u32) - 0x800208d8 | r3 = r31[0xc4] (s32/u32) - 0x800208dc | r0 = r3[0x30] (s32/u32) - 0x800208e0 | r0 = r4 - r0 - 0x800208e4 | r0 = r27 + r0 - 0x800208e8 | r3 = r31[0xc4] (s32/u32) - 0x800208ec | r3[0x30] = r0 (s32/u32) - 0x800208f0 | r3 = r31[0xc4] (s32/u32) - 0x800208f4 | r3[0x4c] = r27 (s32/u32) - 0x800208f8 | r0 = r30[0x48] (s32/u32) - 0x800208fc | r31[0x48] = r0 (s32/u32) - 0x80020900 | r0 = r30[0x50] (s32/u32) - 0x80020904 | r31[0x50] = r0 (s32/u32) - 0x80020908 | r0 = r30[0x50] (s32/u32) - 0x8002090c | r0 |= 0x10 - 0x80020910 | r30[0x50] = r0 (s32/u32) - 0x80020914 | r0 = r30[0x54] (s32/u32) - 0x80020918 | r31[0x54] = r0 (s32/u32) - 0x8002091c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020920 | r31[0xd4] = f0 (f32) - 0x80020924 | r31[0xd0] = f0 (f32) - 0x80020928 | r31[0xcc] = f0 (f32) - 0x8002092c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020930 | r31[0xe0] = f0 (f32) - 0x80020934 | r31[0xdc] = f0 (f32) - 0x80020938 | r31[0xd8] = f0 (f32) - 0x8002093c | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80020940 | r31[0xec] = f0 (f32) - 0x80020944 | r31[0xe8] = f0 (f32) - 0x80020948 | r31[0xe4] = f0 (f32) - 0x8002094c | r0 = r30[0x8] (s16/u16) - 0x80020950 | r31[0x8] = r0 (s16/u16) - 0x80020954 | r0 = r31[0x8] (s16/u16) - 0x80020958 | (cmp) - 0x8002095c | if r0 == -0x1 : goto 0x80020974 (s32/u32) - 0x80020960 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020964 | r31[0x6c] = f0 (f32) - 0x80020968 | r3 = r28 - 0x8002096c | call Hu3DMotionMaxTimeGet - 0x80020970 | r31[0x70] = f1 (f32) - - from 0x8002095c: - 0x80020974 | r0 = -0x1 - 0x80020978 | r31[0xe] = r0 (s16/u16) - 0x8002097c | r31[0xa] = r0 (s16/u16) - 0x80020980 | r31[0xc] = r0 (s16/u16) - 0x80020984 | r29 = 0x0 - 0x80020988 | goto 0x80020a00 - - from later address: - 0x8002098c | s32 r0 = s16 r29 - 0x80020990 | r3 = r0 << 1 (s32/u32) - 0x80020994 | r0 = r3 + 0x10 - 0x80020998 | r4 = r30[r0] (s16/u16) - 0x8002099c | s32 r0 = s16 r29 - 0x800209a0 | r3 = r0 << 1 (s32/u32) - 0x800209a4 | r0 = r3 + 0x10 - 0x800209a8 | r31[r0] = r4 (s16/u16) - 0x800209ac | s32 r0 = s16 r29 - 0x800209b0 | r3 = r0 << 1 (s32/u32) - 0x800209b4 | r0 = r3 + 0x10 - 0x800209b8 | r0 = r31[r0] (s16/u16) - 0x800209bc | (cmp) - 0x800209c0 | if r0 == -0x1 : goto 0x800209fc (s32/u32) - 0x800209c4 | r3 = r31[0xc4] (s32/u32) - 0x800209c8 | s32 r0 = s16 r29 - 0x800209cc | r4 = r0 << 1 (s32/u32) - 0x800209d0 | r0 = r4 + 0x10 - 0x800209d4 | r0 = r31[r0] (s16/u16) - 0x800209d8 | r5 = r0 << 3 (s32/u32) - 0x800209dc | (^u16) r4 = (^u16) Hu3DMotion - 0x800209e0 | r0 = r4 - Hu3DMotion@l - 0x800209e4 | r4 = r0 + r5 - 0x800209e8 | r4 = r4[0x4] (s32/u32) - 0x800209ec | call ClusterAdjustObject - 0x800209f0 | r0 = r31[0x50] (s32/u32) - 0x800209f4 | r0 |= 0x400 - 0x800209f8 | r31[0x50] = r0 (s32/u32) - - from 0x800209c0: - 0x800209fc | r29 += 0x1 - - from 0x80020988: - 0x80020a00 | s32 r0 = s16 r29 - 0x80020a04 | (cmp) - 0x80020a08 | if r0 < 0x4 : goto 0x8002098c (s32/u32) - 0x80020a0c | f0 = r30[0x64] (f32) - 0x80020a10 | r31[0x64] = f0 (f32) - 0x80020a14 | f0 = r30[0x68] (f32) - 0x80020a18 | r31[0x68] = f0 (f32) - 0x80020a1c | r0 = r30[0x20] (s16/u16) - 0x80020a20 | r31[0x20] = r0 (s16/u16) - 0x80020a24 | (^u16) r3 = 0x1 - 0x80020a28 | r3 -= 0x1 - 0x80020a2c | r31[0x22] = r3 (s16/u16) - 0x80020a30 | r0 = 0x0 - 0x80020a34 | r31[0x6] = r0 (s16/u16) - 0x80020a38 | r0 = 0x0 - 0x80020a3c | r31[0x120] = r0 (s32/u32) - 0x80020a40 | r0 = 0x0 - 0x80020a44 | r31[0x26] = r0 (s16/u16) - 0x80020a48 | r0 = 0x0 - 0x80020a4c | r31[0x3] = r0 (s8/u8) - 0x80020a50 | r0 = 0x0 - 0x80020a54 | r31[0x2] = r0 (s8/u8) - 0x80020a58 | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80020a5c | r31[0x5c] = f0 (f32) - 0x80020a60 | r31[0x60] = f0 (f32) - 0x80020a64 | r31[0x58] = f0 (f32) - 0x80020a68 | r0 = -0x1 - 0x80020a6c | r31[0x4] = r0 (s8/u8) - 0x80020a70 | r31[0x24] = r26 (s16/u16) - 0x80020a74 | r29 = 0x0 - 0x80020a78 | goto 0x80020a94 - - from later address: - 0x80020a7c | r4 = -0x1 - 0x80020a80 | s32 r0 = s16 r29 - 0x80020a84 | r3 = r0 << 1 (s32/u32) - 0x80020a88 | r0 = r3 + 0x38 - 0x80020a8c | r31[r0] = r4 (s16/u16) - 0x80020a90 | r29 += 0x1 - - from 0x80020a78: - 0x80020a94 | s32 r0 = s16 r29 - 0x80020a98 | (cmp) - 0x80020a9c | if r0 < 0x8 : goto 0x80020a7c (s32/u32) - 0x80020aa0 | r0 = 0x0 - 0x80020aa4 | r31[0x1] = r0 (s8/u8) - 0x80020aa8 | r3 = r31 + 0xf0 - 0x80020aac | call PSMTXIdentity - 0x80020ab0 | (^u16) r3 = (^u16) layerNum - 0x80020ab4 | r3 -= layerNum@l - 0x80020ab8 | r3 = r3[0x0] (s16/u16) - 0x80020abc | r0 = r3 + 0x1 - 0x80020ac0 | (^u16) r3 = (^u16) layerNum - 0x80020ac4 | r3 -= layerNum@l - 0x80020ac8 | r3[0x0] = r0 (s16/u16) - 0x80020acc | r3 = r28 - - from 0x8002086c: - 0x80020ad0 | r11 = r1 + 0x20 - 0x80020ad4 | call _restgpr_26 - 0x80020ad8 | r0 = Stack[0x24] (s32/u32) - 0x80020adc | Link Register set to r0 - 0x80020ae0 | r1 += 0x20 - 0x80020ae4 | return -Hu3DModelLink end - -global function Hu3DHookFuncCreate: - 0x80020ae8 | Stack Size += 0x20 - 0x80020aec | r0 set to Link Register - 0x80020af0 | Stack[0x24] = r0 (s32/u32) - 0x80020af4 | Stack[0x1c] = r31 (s32/u32) - 0x80020af8 | Stack[0x18] = r30 (s32/u32) - 0x80020afc | Stack[0x14] = r29 (s32/u32) - 0x80020b00 | Stack[0x8] = r3 (s32/u32) - 0x80020b04 | (^u16) r3 = (^u16) Hu3DData - 0x80020b08 | r31 = r3 + (vu16) Hu3DData - 0x80020b0c | r29 = 0x0 - 0x80020b10 | goto 0x80020b28 - - from later address: - 0x80020b14 | r0 = r31[0xc4] (s32/u32) - 0x80020b18 | (cmp) - 0x80020b1c | if r0 == 0x0 : goto 0x80020b34 (s32/u32) - 0x80020b20 | r29 += 0x1 - 0x80020b24 | r31 += 0x124 - - from 0x80020b10: - 0x80020b28 | s32 r0 = s16 r29 - 0x80020b2c | (cmp) - 0x80020b30 | if r0 < 0x200 : goto 0x80020b14 (s32/u32) - - from 0x80020b1c: - 0x80020b34 | s32 r0 = s16 r29 - 0x80020b38 | (cmp) - 0x80020b3c | if r0 != 0x200 : goto 0x80020b48 (s32/u32) - 0x80020b40 | r3 = -0x1 - 0x80020b44 | goto 0x80020c94 - - from 0x80020b3c: - 0x80020b48 | r0 = Stack[0x8] (s32/u32) - 0x80020b4c | r31[0xc4] = r0 (s32/u32) - 0x80020b50 | s32 r3 = s16 r29 - 0x80020b54 | r0 = r3 + 0x2710 - 0x80020b58 | r31[0x48] = r0 (s32/u32) - 0x80020b5c | r0 = 0x10 - 0x80020b60 | r31[0x50] = r0 (s32/u32) - 0x80020b64 | r0 = 0x0 - 0x80020b68 | r31[0x54] = r0 (s32/u32) - 0x80020b6c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020b70 | r31[0xd4] = f0 (f32) - 0x80020b74 | r31[0xd0] = f0 (f32) - 0x80020b78 | r31[0xcc] = f0 (f32) - 0x80020b7c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020b80 | r31[0xe0] = f0 (f32) - 0x80020b84 | r31[0xdc] = f0 (f32) - 0x80020b88 | r31[0xd8] = f0 (f32) - 0x80020b8c | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80020b90 | r31[0xec] = f0 (f32) - 0x80020b94 | r31[0xe8] = f0 (f32) - 0x80020b98 | r31[0xe4] = f0 (f32) - 0x80020b9c | r0 = -0x1 - 0x80020ba0 | r31[0xe] = r0 (s16/u16) - 0x80020ba4 | r31[0xa] = r0 (s16/u16) - 0x80020ba8 | r31[0xc] = r0 (s16/u16) - 0x80020bac | r31[0x8] = r0 (s16/u16) - 0x80020bb0 | r30 = 0x0 - 0x80020bb4 | goto 0x80020bd0 - - from later address: - 0x80020bb8 | r4 = -0x1 - 0x80020bbc | s32 r0 = s16 r30 - 0x80020bc0 | r3 = r0 << 1 (s32/u32) - 0x80020bc4 | r0 = r3 + 0x10 - 0x80020bc8 | r31[r0] = r4 (s16/u16) - 0x80020bcc | r30 += 0x1 - - from 0x80020bb4: - 0x80020bd0 | s32 r0 = s16 r30 - 0x80020bd4 | (cmp) - 0x80020bd8 | if r0 < 0x4 : goto 0x80020bb8 (s32/u32) - 0x80020bdc | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80020be0 | r31[0x64] = f0 (f32) - 0x80020be4 | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80020be8 | r31[0x68] = f0 (f32) - 0x80020bec | r0 = -0x1 - 0x80020bf0 | r31[0x20] = r0 (s16/u16) - 0x80020bf4 | (^u16) r3 = 0x1 - 0x80020bf8 | r3 -= 0x1 - 0x80020bfc | r31[0x22] = r3 (s16/u16) - 0x80020c00 | r0 = 0x0 - 0x80020c04 | r31[0x6] = r0 (s16/u16) - 0x80020c08 | r0 = 0x0 - 0x80020c0c | r31[0x120] = r0 (s32/u32) - 0x80020c10 | r0 = 0x0 - 0x80020c14 | r31[0x26] = r0 (s16/u16) - 0x80020c18 | r0 = 0x0 - 0x80020c1c | r31[0x3] = r0 (s8/u8) - 0x80020c20 | r0 = -0x1 - 0x80020c24 | r31[0x24] = r0 (s16/u16) - 0x80020c28 | r0 = 0x0 - 0x80020c2c | r31[0x2] = r0 (s8/u8) - 0x80020c30 | r0 = -0x1 - 0x80020c34 | r31[0x4] = r0 (s8/u8) - 0x80020c38 | r30 = 0x0 - 0x80020c3c | goto 0x80020c58 - - from later address: - 0x80020c40 | r4 = -0x1 - 0x80020c44 | s32 r0 = s16 r30 - 0x80020c48 | r3 = r0 << 1 (s32/u32) - 0x80020c4c | r0 = r3 + 0x38 - 0x80020c50 | r31[r0] = r4 (s16/u16) - 0x80020c54 | r30 += 0x1 - - from 0x80020c3c: - 0x80020c58 | s32 r0 = s16 r30 - 0x80020c5c | (cmp) - 0x80020c60 | if r0 < 0x8 : goto 0x80020c40 (s32/u32) - 0x80020c64 | r0 = 0x0 - 0x80020c68 | r31[0x1] = r0 (s8/u8) - 0x80020c6c | r3 = r31 + 0xf0 - 0x80020c70 | call PSMTXIdentity - 0x80020c74 | (^u16) r3 = (^u16) layerNum - 0x80020c78 | r3 -= layerNum@l - 0x80020c7c | r3 = r3[0x0] (s16/u16) - 0x80020c80 | r0 = r3 + 0x1 - 0x80020c84 | (^u16) r3 = (^u16) layerNum - 0x80020c88 | r3 -= layerNum@l - 0x80020c8c | r3[0x0] = r0 (s16/u16) - 0x80020c90 | r3 = r29 - - from 0x80020b44: - 0x80020c94 | r31 = Stack[0x1c] (s32/u32) - 0x80020c98 | r30 = Stack[0x18] (s32/u32) - 0x80020c9c | r29 = Stack[0x14] (s32/u32) - 0x80020ca0 | r0 = Stack[0x24] (s32/u32) - 0x80020ca4 | Link Register set to r0 - 0x80020ca8 | r1 += 0x20 - 0x80020cac | return -Hu3DHookFuncCreate end - -global function Hu3DModelKill: - 0x80020cb0 | Stack Size += 0x30 - 0x80020cb4 | r0 set to Link Register - 0x80020cb8 | Stack[0x34] = r0 (s32/u32) - 0x80020cbc | r11 = r1 + 0x30 - 0x80020cc0 | call _savegpr_25 - 0x80020cc4 | r25 = r3 - 0x80020cc8 | s32 r0 = s16 r25 - 0x80020ccc | r4 = r0 * 0x124 - 0x80020cd0 | (^u16) r3 = (^u16) Hu3DData - 0x80020cd4 | r0 = r3 + (vu16) Hu3DData - 0x80020cd8 | r31 = r0 + r4 - 0x80020cdc | r28 = r31[0xc4] (s32/u32) - 0x80020ce0 | (cmp) - 0x80020ce4 | if r28 == 0x0 : goto 0x80020fe4 (s32/u32) - 0x80020ce8 | r0 = r31[0x50] (s32/u32) - 0x80020cec | r0 = rotate(r0, 0) & (bits 29 to 29) - 0x80020cf0 | (cmp) - 0x80020cf4 | if r0 == 0x0 : goto 0x80020d04 (s32/u32) - 0x80020cf8 | r3 = Stack[Hu3DShadowCamBit@sda21] (s16/u16) - 0x80020cfc | r0 = r3 - 0x1 - 0x80020d00 | Stack[Hu3DShadowCamBit@sda21] = r0 (s16/u16) - - from 0x80020cf4: - 0x80020d04 | r0 = r31[0x6] (s16/u16) - 0x80020d08 | r4 = r0 << 1 (s32/u32) - 0x80020d0c | (^u16) r3 = (^u16) layerNum - 0x80020d10 | r0 = r3 - layerNum@l - 0x80020d14 | r4 = r0 + r4 - 0x80020d18 | r3 = r4[0x0] (s16/u16) - 0x80020d1c | r0 = r3 - 0x1 - 0x80020d20 | r4[0x0] = r0 (s16/u16) - 0x80020d24 | r0 = r31[0x50] (s32/u32) - 0x80020d28 | r0 = rotate(r0, 0) & (bits 27 to 27) - 0x80020d2c | (cmp) - 0x80020d30 | if r0 == 0x0 : goto 0x80020d7c (s32/u32) - 0x80020d34 | r3 = 0x2 - 0x80020d38 | r4 = r31[0x48] (s32/u32) - 0x80020d3c | call HuMemDirectFreeNum - 0x80020d40 | r0 = r31[0x50] (s32/u32) - 0x80020d44 | r0 = rotate(r0, 0) & (bits 26 to 26) - 0x80020d48 | (cmp) - 0x80020d4c | if r0 == 0x0 : goto 0x80020d5c (s32/u32) - 0x80020d50 | r26 = r31[0x120] (s32/u32) - 0x80020d54 | r3 = r26[0x44] (s32/u32) - 0x80020d58 | call HuSprAnimKill - - from 0x80020d4c: - 0x80020d5c | r0 = 0x0 - 0x80020d60 | r31[0xc4] = r0 (s32/u32) - 0x80020d64 | r0 = Stack[modelKillAllF@sda21] (s32/u32) - 0x80020d68 | (cmp) - 0x80020d6c | if r0 != 0x0 : goto 0x80020d78 (s32/u32) - 0x80020d70 | r3 = 0x2 - 0x80020d74 | call HuMemDCFlush - - from 0x80020d6c: - 0x80020d78 | goto 0x80020fe4 - - from 0x80020d30: - 0x80020d7c | r0 = r31[0x50] (s32/u32) - 0x80020d80 | r0 = rotate(r0, 0) & (bits 15 to 15) - 0x80020d84 | (cmp) - 0x80020d88 | if r0 == 0x0 : goto 0x80020db8 (s32/u32) - 0x80020d8c | r0 = r31[0x8] (s16/u16) - 0x80020d90 | (cmp) - 0x80020d94 | if r0 == -0x1 : goto 0x80020da0 (s32/u32) - 0x80020d98 | r3 = r31[0x8] (s16/u16) - 0x80020d9c | call Hu3DMotionKill - - from 0x80020d94: - 0x80020da0 | r3 = 0x2 - 0x80020da4 | r4 = r31[0x48] (s32/u32) - 0x80020da8 | call HuMemDirectFreeNum - 0x80020dac | r0 = 0x0 - 0x80020db0 | r31[0xc4] = r0 (s32/u32) - 0x80020db4 | goto 0x80020fe4 - - from 0x80020d88: - 0x80020db8 | r3 = r25 - 0x80020dbc | call Hu3DAnimModelKill - 0x80020dc0 | r0 = r31[0x24] (s16/u16) - 0x80020dc4 | (cmp) - 0x80020dc8 | if r0 == -0x1 : goto 0x80020de8 (s32/u32) - 0x80020dcc | r3 = r31[0xc4] (s32/u32) - 0x80020dd0 | call HuMemDirectFree - 0x80020dd4 | r3 = 0x2 - 0x80020dd8 | r4 = r31[0x4c] (s32/u32) - 0x80020ddc | call HuMemDirectFreeNum - 0x80020de0 | r28 = r31[0xc8] (s32/u32) - 0x80020de4 | r31[0xc4] = r28 (s32/u32) - - from 0x80020dc8: - 0x80020de8 | (^u16) r3 = (^u16) Hu3DData - 0x80020dec | r30 = r3 + (vu16) Hu3DData - 0x80020df0 | r29 = 0x0 - 0x80020df4 | r27 = r29 - 0x80020df8 | goto 0x80020e38 - - from later address: - 0x80020dfc | r0 = r30[0xc4] (s32/u32) - 0x80020e00 | (cmp) - 0x80020e04 | if r0 == 0x0 : goto 0x80020e30 (s32/u32) - 0x80020e08 | r0 = r30[0xc4] (s32/u32) - 0x80020e0c | (cmp) - 0x80020e10 | if r0 == r28 : goto 0x80020e2c (s32/u32) - 0x80020e14 | r0 = r30[0x24] (s16/u16) - 0x80020e18 | (cmp) - 0x80020e1c | if r0 == -0x1 : goto 0x80020e30 (s32/u32) - 0x80020e20 | r0 = r30[0xc8] (s32/u32) - 0x80020e24 | (cmp) - 0x80020e28 | if r0 != r28 : goto 0x80020e30 (s32/u32) - - from 0x80020e10: - 0x80020e2c | r27 += 0x1 - - from 0x80020e28: - 0x80020e30 | r29 += 0x1 - 0x80020e34 | r30 += 0x124 - - from 0x80020df8: - 0x80020e38 | s32 r0 = s16 r29 - 0x80020e3c | (cmp) - 0x80020e40 | if r0 < 0x200 : goto 0x80020dfc (s32/u32) - 0x80020e44 | s32 r0 = s16 r27 - 0x80020e48 | (cmp) - 0x80020e4c | if r0 <= 0x1 : goto 0x80020ee0 (s32/u32) - 0x80020e50 | r0 = 0x0 - 0x80020e54 | r31[0xc4] = r0 (s32/u32) - 0x80020e58 | (^u16) r3 = (^u16) Hu3DData - 0x80020e5c | r30 = r3 + (vu16) Hu3DData - 0x80020e60 | r0 = r31[0x20] (s16/u16) - 0x80020e64 | (cmp) - 0x80020e68 | if r0 == -0x1 : goto 0x80020ec8 (s32/u32) - 0x80020e6c | r29 = 0x0 - 0x80020e70 | goto 0x80020ebc - - from later address: - 0x80020e74 | r0 = r30[0xc4] (s32/u32) - 0x80020e78 | (cmp) - 0x80020e7c | if r0 == 0x0 : goto 0x80020eb4 (s32/u32) - 0x80020e80 | r0 = r30[0x24] (s16/u16) - 0x80020e84 | (cmp) - 0x80020e88 | if r0 == -0x1 : goto 0x80020eb4 (s32/u32) - 0x80020e8c | r0 = r30[0xc8] (s32/u32) - 0x80020e90 | (cmp) - 0x80020e94 | if r0 != r28 : goto 0x80020eb4 (s32/u32) - 0x80020e98 | r0 = r31[0x20] (s16/u16) - 0x80020e9c | r4 = r0 << 3 (s32/u32) - 0x80020ea0 | (^u16) r3 = (^u16) Hu3DMotion - 0x80020ea4 | r0 = r3 - Hu3DMotion@l - 0x80020ea8 | r3 = r0 + r4 - 0x80020eac | r3[0x2] = r29 (s16/u16) - 0x80020eb0 | goto 0x80020ec8 - - from 0x80020e94: - 0x80020eb4 | r29 += 0x1 - 0x80020eb8 | r30 += 0x124 - - from 0x80020e70: - 0x80020ebc | s32 r0 = s16 r29 - 0x80020ec0 | (cmp) - 0x80020ec4 | if r0 < 0x200 : goto 0x80020e74 (s32/u32) - - from 0x80020eb0: - 0x80020ec8 | r0 = Stack[modelKillAllF@sda21] (s32/u32) - 0x80020ecc | (cmp) - 0x80020ed0 | if r0 != 0x0 : goto 0x80020edc (s32/u32) - 0x80020ed4 | r3 = 0x2 - 0x80020ed8 | call HuMemDCFlush - - from 0x80020ed0: - 0x80020edc | goto 0x80020fe4 - - from 0x80020e4c: - 0x80020ee0 | r0 = r31[0x20] (s16/u16) - 0x80020ee4 | (cmp) - 0x80020ee8 | if r0 == -0x1 : goto 0x80020f44 (s32/u32) - 0x80020eec | r3 = r31[0x20] (s16/u16) - 0x80020ef0 | call Hu3DMotionKill - 0x80020ef4 | (cmp) - 0x80020ef8 | if r3 != 0x0 : goto 0x80020f44 (s32/u32) - 0x80020efc | r5 = -0x1 - 0x80020f00 | r0 = r31[0x20] (s16/u16) - 0x80020f04 | r4 = r0 << 3 (s32/u32) - 0x80020f08 | (^u16) r3 = (^u16) Hu3DMotion - 0x80020f0c | r0 = r3 - Hu3DMotion@l - 0x80020f10 | r3 = r0 + r4 - 0x80020f14 | r3[0x2] = r5 (s16/u16) - 0x80020f18 | r3 = 0x2 - 0x80020f1c | r4 = r31[0x48] (s32/u32) - 0x80020f20 | call HuMemDirectFreeNum - 0x80020f24 | r0 = 0x0 - 0x80020f28 | r31[0xc4] = r0 (s32/u32) - 0x80020f2c | r0 = Stack[modelKillAllF@sda21] (s32/u32) - 0x80020f30 | (cmp) - 0x80020f34 | if r0 != 0x0 : goto 0x80020f40 (s32/u32) - 0x80020f38 | r3 = 0x2 - 0x80020f3c | call HuMemDCFlush - - from 0x80020f34: - 0x80020f40 | goto 0x80020fe4 - - from 0x80020ef8: - 0x80020f44 | r3 = r31[0xc4] (s32/u32) - 0x80020f48 | call HuMemDirectFree - 0x80020f4c | r3 = 0x2 - 0x80020f50 | r4 = r31[0x48] (s32/u32) - 0x80020f54 | call HuMemDirectFreeNum - 0x80020f58 | r29 = 0x0 - 0x80020f5c | goto 0x80020f7c - - from later address: - 0x80020f60 | s32 r0 = s16 r29 - 0x80020f64 | r3 = r0 << 1 (s32/u32) - 0x80020f68 | r0 = r3 + 0x28 - 0x80020f6c | unable to interpret: ['lhzx', 'r0,', 'r31,', 'r0'] - 0x80020f70 | s32 r3 = s16 r0 - 0x80020f74 | call Hu3DGLightKill - 0x80020f78 | r29 += 0x1 - - from 0x80020f5c: - 0x80020f7c | s32 r3 = s16 r29 - 0x80020f80 | r0 = r31[0x26] (s16/u16) - 0x80020f84 | (cmp) - 0x80020f88 | if r3 < r0 : goto 0x80020f60 (s32/u32) - 0x80020f8c | r29 = 0x0 - 0x80020f90 | goto 0x80020fbc - - from later address: - 0x80020f94 | s32 r0 = s16 r29 - 0x80020f98 | r3 = r0 << 1 (s32/u32) - 0x80020f9c | r0 = r3 + 0x38 - 0x80020fa0 | r0 = r31[r0] (s16/u16) - 0x80020fa4 | (cmp) - 0x80020fa8 | if r0 == -0x1 : goto 0x80020fb8 (s32/u32) - 0x80020fac | r3 = r25 - 0x80020fb0 | r4 = r29 - 0x80020fb4 | call Hu3DLLightKill - - from 0x80020fa8: - 0x80020fb8 | r29 += 0x1 - - from 0x80020f90: - 0x80020fbc | s32 r0 = s16 r29 - 0x80020fc0 | (cmp) - 0x80020fc4 | if r0 < 0x8 : goto 0x80020f94 (s32/u32) - 0x80020fc8 | r0 = 0x0 - 0x80020fcc | r31[0xc4] = r0 (s32/u32) - 0x80020fd0 | r0 = Stack[modelKillAllF@sda21] (s32/u32) - 0x80020fd4 | (cmp) - 0x80020fd8 | if r0 != 0x0 : goto 0x80020fe4 (s32/u32) - 0x80020fdc | r3 = 0x2 - 0x80020fe0 | call HuMemDCFlush - - from 0x80020fd8: - 0x80020fe4 | r11 = r1 + 0x30 - 0x80020fe8 | call _restgpr_25 - 0x80020fec | r0 = Stack[0x34] (s32/u32) - 0x80020ff0 | Link Register set to r0 - 0x80020ff4 | r1 += 0x30 - 0x80020ff8 | return -Hu3DModelKill end - -global function Hu3DModelAllKill: - 0x80020ffc | Stack Size += 0x10 - 0x80021000 | r0 set to Link Register - 0x80021004 | Stack[0x14] = r0 (s32/u32) - 0x80021008 | Stack[0xc] = r31 (s32/u32) - 0x8002100c | Stack[0x8] = r30 (s32/u32) - 0x80021010 | r0 = 0x1 - 0x80021014 | Stack[modelKillAllF@sda21] = r0 (s32/u32) - 0x80021018 | (^u16) r3 = (^u16) Hu3DData - 0x8002101c | r30 = r3 + (vu16) Hu3DData - 0x80021020 | r31 = 0x0 - 0x80021024 | goto 0x80021044 - - from later address: - 0x80021028 | r0 = r30[0xc4] (s32/u32) - 0x8002102c | (cmp) - 0x80021030 | if r0 == 0x0 : goto 0x8002103c (s32/u32) - 0x80021034 | r3 = r31 - 0x80021038 | call Hu3DModelKill - - from 0x80021030: - 0x8002103c | r31 += 0x1 - 0x80021040 | r30 += 0x124 - - from 0x80021024: - 0x80021044 | s32 r0 = s16 r31 - 0x80021048 | (cmp) - 0x8002104c | if r0 < 0x200 : goto 0x80021028 (s32/u32) - 0x80021050 | r0 = 0x0 - 0x80021054 | Stack[modelKillAllF@sda21] = r0 (s32/u32) - 0x80021058 | r31 = 0x0 - 0x8002105c | goto 0x8002109c - - from later address: - 0x80021060 | r5 = 0x0 - 0x80021064 | s32 r0 = s16 r31 - 0x80021068 | r4 = r0 << 1 (s32/u32) - 0x8002106c | (^u16) r3 = (^u16) layerNum - 0x80021070 | r0 = r3 - layerNum@l - 0x80021074 | r3 = r0 + r4 - 0x80021078 | r3[0x0] = r5 (s16/u16) - 0x8002107c | r5 = 0x0 - 0x80021080 | s32 r0 = s16 r31 - 0x80021084 | r4 = r0 << 2 (s32/u32) - 0x80021088 | (^u16) r3 = (^u16) layerHook - 0x8002108c | r0 = r3 - layerHook@l - 0x80021090 | r3 = r0 + r4 - 0x80021094 | r3[0x0] = r5 (s32/u32) - 0x80021098 | r31 += 0x1 - - from 0x8002105c: - 0x8002109c | s32 r0 = s16 r31 - 0x800210a0 | (cmp) - 0x800210a4 | if r0 < 0x8 : goto 0x80021060 (s32/u32) - 0x800210a8 | call Hu3DParManAllKill - 0x800210ac | r3 = 0x2 - 0x800210b0 | call HuMemDCFlush - 0x800210b4 | r31 = Stack[0xc] (s32/u32) - 0x800210b8 | r30 = Stack[0x8] (s32/u32) - 0x800210bc | r0 = Stack[0x14] (s32/u32) - 0x800210c0 | Link Register set to r0 - 0x800210c4 | r1 += 0x10 - 0x800210c8 | return -Hu3DModelAllKill end - -global function Hu3DModelPosSet: - 0x800210cc | Stack Size += 0x10 - 0x800210d0 | Stack[0xc] = r31 (s32/u32) - 0x800210d4 | s32 r0 = s16 r3 - 0x800210d8 | r5 = r0 * 0x124 - 0x800210dc | (^u16) r4 = (^u16) Hu3DData - 0x800210e0 | r0 = r4 + (vu16) Hu3DData - 0x800210e4 | r31 = r0 + r5 - 0x800210e8 | r31[0xcc] = f1 (f32) - 0x800210ec | r31[0xd0] = f2 (f32) - 0x800210f0 | r31[0xd4] = f3 (f32) - 0x800210f4 | r31 = Stack[0xc] (s32/u32) - 0x800210f8 | r1 += 0x10 - 0x800210fc | return -Hu3DModelPosSet end - -global function Hu3DModelPosSetV: - 0x80021100 | Stack Size += 0x10 - 0x80021104 | Stack[0xc] = r31 (s32/u32) - 0x80021108 | s32 r0 = s16 r3 - 0x8002110c | r6 = r0 * 0x124 - 0x80021110 | (^u16) r5 = (^u16) Hu3DData - 0x80021114 | r0 = r5 + (vu16) Hu3DData - 0x80021118 | r31 = r0 + r6 - 0x8002111c | r5 = r4[0x0] (s32/u32) - 0x80021120 | r0 = r4[0x4] (s32/u32) - 0x80021124 | r31[0xcc] = r5 (s32/u32) - 0x80021128 | r31[0xd0] = r0 (s32/u32) - 0x8002112c | r0 = r4[0x8] (s32/u32) - 0x80021130 | r31[0xd4] = r0 (s32/u32) - 0x80021134 | r31 = Stack[0xc] (s32/u32) - 0x80021138 | r1 += 0x10 - 0x8002113c | return -Hu3DModelPosSetV end - -global function Hu3DModelRotSet: - 0x80021140 | Stack Size += 0x10 - 0x80021144 | Stack[0xc] = r31 (s32/u32) - 0x80021148 | s32 r0 = s16 r3 - 0x8002114c | r5 = r0 * 0x124 - 0x80021150 | (^u16) r4 = (^u16) Hu3DData - 0x80021154 | r0 = r4 + (vu16) Hu3DData - 0x80021158 | r31 = r0 + r5 - 0x8002115c | r31[0xd8] = f1 (f32) - 0x80021160 | r31[0xdc] = f2 (f32) - 0x80021164 | r31[0xe0] = f3 (f32) - 0x80021168 | r31 = Stack[0xc] (s32/u32) - 0x8002116c | r1 += 0x10 - 0x80021170 | return -Hu3DModelRotSet end - -global function Hu3DModelRotSetV: - 0x80021174 | Stack Size += 0x10 - 0x80021178 | Stack[0xc] = r31 (s32/u32) - 0x8002117c | s32 r0 = s16 r3 - 0x80021180 | r6 = r0 * 0x124 - 0x80021184 | (^u16) r5 = (^u16) Hu3DData - 0x80021188 | r0 = r5 + (vu16) Hu3DData - 0x8002118c | r31 = r0 + r6 - 0x80021190 | r5 = r4[0x0] (s32/u32) - 0x80021194 | r0 = r4[0x4] (s32/u32) - 0x80021198 | r31[0xd8] = r5 (s32/u32) - 0x8002119c | r31[0xdc] = r0 (s32/u32) - 0x800211a0 | r0 = r4[0x8] (s32/u32) - 0x800211a4 | r31[0xe0] = r0 (s32/u32) - 0x800211a8 | r31 = Stack[0xc] (s32/u32) - 0x800211ac | r1 += 0x10 - 0x800211b0 | return -Hu3DModelRotSetV end - -global function Hu3DModelScaleSet: - 0x800211b4 | Stack Size += 0x10 - 0x800211b8 | Stack[0xc] = r31 (s32/u32) - 0x800211bc | s32 r0 = s16 r3 - 0x800211c0 | r5 = r0 * 0x124 - 0x800211c4 | (^u16) r4 = (^u16) Hu3DData - 0x800211c8 | r0 = r4 + (vu16) Hu3DData - 0x800211cc | r31 = r0 + r5 - 0x800211d0 | r31[0xe4] = f1 (f32) - 0x800211d4 | r31[0xe8] = f2 (f32) - 0x800211d8 | r31[0xec] = f3 (f32) - 0x800211dc | r31 = Stack[0xc] (s32/u32) - 0x800211e0 | r1 += 0x10 - 0x800211e4 | return -Hu3DModelScaleSet end - -global function Hu3DModelScaleSetV: - 0x800211e8 | Stack Size += 0x10 - 0x800211ec | Stack[0xc] = r31 (s32/u32) - 0x800211f0 | s32 r0 = s16 r3 - 0x800211f4 | r6 = r0 * 0x124 - 0x800211f8 | (^u16) r5 = (^u16) Hu3DData - 0x800211fc | r0 = r5 + (vu16) Hu3DData - 0x80021200 | r31 = r0 + r6 - 0x80021204 | r5 = r4[0x0] (s32/u32) - 0x80021208 | r0 = r4[0x4] (s32/u32) - 0x8002120c | r31[0xe4] = r5 (s32/u32) - 0x80021210 | r31[0xe8] = r0 (s32/u32) - 0x80021214 | r0 = r4[0x8] (s32/u32) - 0x80021218 | r31[0xec] = r0 (s32/u32) - 0x8002121c | r31 = Stack[0xc] (s32/u32) - 0x80021220 | r1 += 0x10 - 0x80021224 | return -Hu3DModelScaleSetV end - -global function Hu3DModelAttrSet: - 0x80021228 | Stack Size += 0x10 - 0x8002122c | Stack[0xc] = r31 (s32/u32) - 0x80021230 | s32 r0 = s16 r3 - 0x80021234 | r6 = r0 * 0x124 - 0x80021238 | (^u16) r5 = (^u16) Hu3DData - 0x8002123c | r0 = r5 + (vu16) Hu3DData - 0x80021240 | r31 = r0 + r6 - 0x80021244 | r0 = rotate(r4, 0) & (bits 1 to 1) - 0x80021248 | (cmp) - 0x8002124c | if r0 == 0x0 : goto 0x80021264 (s32/u32) - 0x80021250 | r5 = r31[0x54] (s32/u32) - 0x80021254 | r0 = rotate(r4, 0) & (bits 2 to 0) - 0x80021258 | r0 = r5 | r0 - 0x8002125c | r31[0x54] = r0 (s32/u32) - 0x80021260 | goto 0x80021270 - - from 0x8002124c: - 0x80021264 | r0 = r31[0x50] (s32/u32) - 0x80021268 | r0 |= r4 - 0x8002126c | r31[0x50] = r0 (s32/u32) - - from 0x80021260: - 0x80021270 | r31 = Stack[0xc] (s32/u32) - 0x80021274 | r1 += 0x10 - 0x80021278 | return -Hu3DModelAttrSet end - -global function Hu3DModelAttrReset: - 0x8002127c | Stack Size += 0x10 - 0x80021280 | Stack[0xc] = r31 (s32/u32) - 0x80021284 | s32 r0 = s16 r3 - 0x80021288 | r6 = r0 * 0x124 - 0x8002128c | (^u16) r5 = (^u16) Hu3DData - 0x80021290 | r0 = r5 + (vu16) Hu3DData - 0x80021294 | r31 = r0 + r6 - 0x80021298 | r0 = rotate(r4, 0) & (bits 1 to 1) - 0x8002129c | (cmp) - 0x800212a0 | if r0 == 0x0 : goto 0x800212b4 (s32/u32) - 0x800212a4 | r0 = r31[0x54] (s32/u32) - 0x800212a8 | r0 &= r4 - 0x800212ac | r31[0x54] = r0 (s32/u32) - 0x800212b0 | goto 0x800212c0 - - from 0x800212a0: - 0x800212b4 | r0 = r31[0x50] (s32/u32) - 0x800212b8 | r0 &= r4 - 0x800212bc | r31[0x50] = r0 (s32/u32) - - from 0x800212b0: - 0x800212c0 | r31 = Stack[0xc] (s32/u32) - 0x800212c4 | r1 += 0x10 - 0x800212c8 | return -Hu3DModelAttrReset end - -global function Hu3DModelAttrGet: - 0x800212cc | Stack Size += 0x10 - 0x800212d0 | Stack[0xc] = r31 (s32/u32) - 0x800212d4 | s32 r0 = s16 r3 - 0x800212d8 | r5 = r0 * 0x124 - 0x800212dc | (^u16) r4 = (^u16) Hu3DData - 0x800212e0 | r0 = r4 + (vu16) Hu3DData - 0x800212e4 | r31 = r0 + r5 - 0x800212e8 | r3 = r31[0x50] (s32/u32) - 0x800212ec | r31 = Stack[0xc] (s32/u32) - 0x800212f0 | r1 += 0x10 - 0x800212f4 | return -Hu3DModelAttrGet end - -global function Hu3DModelMotionAttrGet: - 0x800212f8 | Stack Size += 0x10 - 0x800212fc | Stack[0xc] = r31 (s32/u32) - 0x80021300 | s32 r0 = s16 r3 - 0x80021304 | r5 = r0 * 0x124 - 0x80021308 | (^u16) r4 = (^u16) Hu3DData - 0x8002130c | r0 = r4 + (vu16) Hu3DData - 0x80021310 | r31 = r0 + r5 - 0x80021314 | r3 = r31[0x54] (s32/u32) - 0x80021318 | r31 = Stack[0xc] (s32/u32) - 0x8002131c | r1 += 0x10 - 0x80021320 | return -Hu3DModelMotionAttrGet end - -global function Hu3DModelClusterAttrSet: - 0x80021324 | Stack Size += 0x10 - 0x80021328 | Stack[0xc] = r31 (s32/u32) - 0x8002132c | s32 r0 = s16 r3 - 0x80021330 | r7 = r0 * 0x124 - 0x80021334 | (^u16) r6 = (^u16) Hu3DData - 0x80021338 | r0 = r6 + (vu16) Hu3DData - 0x8002133c | r31 = r0 + r7 - 0x80021340 | s32 r0 = s16 r4 - 0x80021344 | r6 = r0 << 1 (s32/u32) - 0x80021348 | r6 += 0x18 - 0x8002134c | r0 = r31[r6] (s16/u16) - 0x80021350 | r0 |= r5 - 0x80021354 | s32 r0 = s16 r0 - 0x80021358 | r31[r6] = r0 (s16/u16) - 0x8002135c | r31 = Stack[0xc] (s32/u32) - 0x80021360 | r1 += 0x10 - 0x80021364 | return -Hu3DModelClusterAttrSet end - -global function Hu3DModelClusterAttrReset: - 0x80021368 | Stack Size += 0x10 - 0x8002136c | Stack[0xc] = r31 (s32/u32) - 0x80021370 | s32 r0 = s16 r3 - 0x80021374 | r7 = r0 * 0x124 - 0x80021378 | (^u16) r6 = (^u16) Hu3DData - 0x8002137c | r0 = r6 + (vu16) Hu3DData - 0x80021380 | r31 = r0 + r7 - 0x80021384 | s32 r0 = s16 r4 - 0x80021388 | r6 = r0 << 1 (s32/u32) - 0x8002138c | r6 += 0x18 - 0x80021390 | r0 = r31[r6] (s16/u16) - 0x80021394 | r0 &= r5 - 0x80021398 | s32 r0 = s16 r0 - 0x8002139c | r31[r6] = r0 (s16/u16) - 0x800213a0 | r31 = Stack[0xc] (s32/u32) - 0x800213a4 | r1 += 0x10 - 0x800213a8 | return -Hu3DModelClusterAttrReset end - -global function Hu3DModelCameraSet: - 0x800213ac | Stack Size += 0x10 - 0x800213b0 | Stack[0xc] = r31 (s32/u32) - 0x800213b4 | s32 r0 = s16 r3 - 0x800213b8 | r6 = r0 * 0x124 - 0x800213bc | (^u16) r5 = (^u16) Hu3DData - 0x800213c0 | r0 = r5 + (vu16) Hu3DData - 0x800213c4 | r31 = r0 + r6 - 0x800213c8 | r31[0x22] = r4 (s16/u16) - 0x800213cc | r31 = Stack[0xc] (s32/u32) - 0x800213d0 | r1 += 0x10 - 0x800213d4 | return -Hu3DModelCameraSet end - -global function Hu3DModelLayerSet: - 0x800213d8 | Stack Size += 0x10 - 0x800213dc | Stack[0xc] = r31 (s32/u32) - 0x800213e0 | s32 r0 = s16 r3 - 0x800213e4 | r6 = r0 * 0x124 - 0x800213e8 | (^u16) r5 = (^u16) Hu3DData - 0x800213ec | r0 = r5 + (vu16) Hu3DData - 0x800213f0 | r31 = r0 + r6 - 0x800213f4 | r0 = r31[0x6] (s16/u16) - 0x800213f8 | r6 = r0 << 1 (s32/u32) - 0x800213fc | (^u16) r5 = (^u16) layerNum - 0x80021400 | r0 = r5 - layerNum@l - 0x80021404 | r6 = r0 + r6 - 0x80021408 | r5 = r6[0x0] (s16/u16) - 0x8002140c | r0 = r5 - 0x1 - 0x80021410 | r6[0x0] = r0 (s16/u16) - 0x80021414 | r31[0x6] = r4 (s16/u16) - 0x80021418 | s32 r0 = s16 r4 - 0x8002141c | r6 = r0 << 1 (s32/u32) - 0x80021420 | (^u16) r5 = (^u16) layerNum - 0x80021424 | r0 = r5 - layerNum@l - 0x80021428 | r6 = r0 + r6 - 0x8002142c | r5 = r6[0x0] (s16/u16) - 0x80021430 | r0 = r5 + 0x1 - 0x80021434 | r6[0x0] = r0 (s16/u16) - 0x80021438 | r31 = Stack[0xc] (s32/u32) - 0x8002143c | r1 += 0x10 - 0x80021440 | return -Hu3DModelLayerSet end - -global function Hu3DModelObjPtrGet: - 0x80021444 | Stack Size += 0x120 - 0x80021448 | r0 set to Link Register - 0x8002144c | Stack[0x124] = r0 (s32/u32) - 0x80021450 | Stack[0x11c] = r31 (s32/u32) - 0x80021454 | Stack[0x118] = r30 (s32/u32) - 0x80021458 | Stack[0x114] = r29 (s32/u32) - 0x8002145c | Stack[0x110] = r28 (s32/u32) - 0x80021460 | Stack[0x8] = r3 (s16/u16) - 0x80021464 | Stack[0xc] = r4 (s32/u32) - 0x80021468 | r0 = Stack[0x8] (s16/u16) - 0x8002146c | r4 = r0 * 0x124 - 0x80021470 | (^u16) r3 = (^u16) Hu3DData - 0x80021474 | r0 = r3 + (vu16) Hu3DData - 0x80021478 | r3 = r0 + r4 - 0x8002147c | r31 = r3[0xc4] (s32/u32) - 0x80021480 | r29 = r31[0x4c] (s32/u32) - 0x80021484 | r3 = Stack[0xc] (s32/u32) - 0x80021488 | call MakeObjectName - 0x8002148c | r4 = r3 - 0x80021490 | r3 = r1 + 0x10 - 0x80021494 | call strcpy - 0x80021498 | r30 = 0x0 - 0x8002149c | goto 0x800214c8 - - from later address: - 0x800214a0 | r28 = r29 - 0x800214a4 | r3 = r1 + 0x10 - 0x800214a8 | r4 = r28[0x0] (s32/u32) - 0x800214ac | call strcmp - 0x800214b0 | (cmp) - 0x800214b4 | if r3 != 0x0 : goto 0x800214c0 (s32/u32) - 0x800214b8 | r3 = r29 - 0x800214bc | goto 0x800214fc - - from 0x800214b4: - 0x800214c0 | r29 += 0x144 - 0x800214c4 | r30 += 0x1 - - from 0x8002149c: - 0x800214c8 | s32 r3 = s16 r30 - 0x800214cc | r0 = r31[0x6c] (s16/u16) - 0x800214d0 | (cmp) - 0x800214d4 | if r3 < r0 : goto 0x800214a0 (s32/u32) - 0x800214d8 | s32 r3 = s16 r30 - 0x800214dc | r0 = r31[0x6c] (s16/u16) - 0x800214e0 | (cmp) - 0x800214e4 | if r3 != r0 : goto 0x800214f8 (s32/u32) - 0x800214e8 | (^u16) r3 = (^u16) lbl_8012D57B - 0x800214ec | r3 -= lbl_8012D57B@l - 0x800214f0 | clear(cr1eq) - 0x800214f4 | call OSReport - - from 0x800214e4: - 0x800214f8 | r3 = 0x0 - - from 0x800214bc: - 0x800214fc | r31 = Stack[0x11c] (s32/u32) - 0x80021500 | r30 = Stack[0x118] (s32/u32) - 0x80021504 | r29 = Stack[0x114] (s32/u32) - 0x80021508 | r28 = Stack[0x110] (s32/u32) - 0x8002150c | r0 = Stack[0x124] (s32/u32) - 0x80021510 | Link Register set to r0 - 0x80021514 | r1 += 0x120 - 0x80021518 | return -Hu3DModelObjPtrGet end - -global function Hu3DModelTPLvlSet: - 0x8002151c | Stack Size += 0x30 - 0x80021520 | r0 set to Link Register - 0x80021524 | Stack[0x34] = r0 (s32/u32) - 0x80021528 | r11 = r1 + 0x30 - 0x8002152c | call _savegpr_25 - 0x80021530 | s32 r0 = s16 r3 - 0x80021534 | r5 = r0 * 0x124 - 0x80021538 | (^u16) r4 = (^u16) Hu3DData - 0x8002153c | r0 = r4 + (vu16) Hu3DData - 0x80021540 | r28 = r0 + r5 - 0x80021544 | r30 = r28[0xc4] (s32/u32) - 0x80021548 | r31 = r30[0x10] (s32/u32) - 0x8002154c | r29 = 0x0 - 0x80021550 | goto 0x8002159c - - from later address: - 0x80021554 | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80021558 | f0 -= f1 - 0x8002155c | r31[0x1c] = f0 (f32) - 0x80021560 | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80021564 | (cmp) - 0x80021568 | if f0 == f1 : goto 0x80021584 (f32/f64) - 0x8002156c | r0 = r31[0x8] (s16/u16) - 0x80021570 | r0 = rotate(r0, 0) & (bits 24 to 27) - 0x80021574 | r0 |= 0x1 - 0x80021578 | r0 = remove(r0, 16) - 0x8002157c | r31[0x8] = r0 (s16/u16) - 0x80021580 | goto 0x80021594 - - from 0x80021568: - 0x80021584 | r0 = r31[0x8] (s16/u16) - 0x80021588 | r0 = rotate(r0, 0) & (bits 24 to 27) - 0x8002158c | r0 = remove(r0, 16) - 0x80021590 | r31[0x8] = r0 (s16/u16) - - from 0x80021580: - 0x80021594 | r29 += 0x1 - 0x80021598 | r31 += 0x3c - - from 0x80021550: - 0x8002159c | s32 r4 = s16 r29 - 0x800215a0 | r0 = r30[0x5c] (s16/u16) - 0x800215a4 | (cmp) - 0x800215a8 | if r4 < r0 : goto 0x80021554 (s32/u32) - 0x800215ac | r26 = r30[0x4c] (s32/u32) - 0x800215b0 | r29 = 0x0 - 0x800215b4 | goto 0x800215e0 - - from later address: - 0x800215b8 | r27 = r26 - 0x800215bc | r0 = r27[0x4] (s32/u32) - 0x800215c0 | (cmp) - 0x800215c4 | if r0 != 0x2 : goto 0x800215d8 (s32/u32) - 0x800215c8 | r25 = r27[0x8] (s32/u32) - 0x800215cc | r0 = r25[0x0] (s32/u32) - 0x800215d0 | r0 |= 0x1 - 0x800215d4 | r25[0x0] = r0 (s32/u32) - - from 0x800215c4: - 0x800215d8 | r26 += 0x144 - 0x800215dc | r29 += 0x1 - - from 0x800215b4: - 0x800215e0 | s32 r4 = s16 r29 - 0x800215e4 | r0 = r30[0x6c] (s16/u16) - 0x800215e8 | (cmp) - 0x800215ec | if r4 < r0 : goto 0x800215b8 (s32/u32) - 0x800215f0 | r0 = r28[0x50] (s32/u32) - 0x800215f4 | r0 |= 0x4 - 0x800215f8 | r28[0x50] = r0 (s32/u32) - 0x800215fc | r11 = r1 + 0x30 - 0x80021600 | call _restgpr_25 - 0x80021604 | r0 = Stack[0x34] (s32/u32) - 0x80021608 | Link Register set to r0 - 0x8002160c | r1 += 0x30 - 0x80021610 | return -Hu3DModelTPLvlSet end - -global function Hu3DModelHiliteMapSet: - 0x80021614 | Stack Size += 0x20 - 0x80021618 | r0 set to Link Register - 0x8002161c | Stack[0x24] = r0 (s32/u32) - 0x80021620 | r11 = r1 + 0x20 - 0x80021624 | call _savegpr_26 - 0x80021628 | s32 r0 = s16 r3 - 0x8002162c | r6 = r0 * 0x124 - 0x80021630 | (^u16) r5 = (^u16) Hu3DData - 0x80021634 | r0 = r5 + (vu16) Hu3DData - 0x80021638 | r26 = r0 + r6 - 0x8002163c | r30 = r26[0xc4] (s32/u32) - 0x80021640 | r27 = r30[0x4c] (s32/u32) - 0x80021644 | r28 = 0x0 - 0x80021648 | goto 0x80021684 - - from later address: - 0x8002164c | r31 = r27 - 0x80021650 | r0 = r31[0x4] (s32/u32) - 0x80021654 | (cmp) - 0x80021658 | if r0 != 0x2 : goto 0x8002167c (s32/u32) - 0x8002165c | r0 = r31[0xc] (s32/u32) - 0x80021660 | r0 |= 0x100 - 0x80021664 | r31[0xc] = r0 (s32/u32) - 0x80021668 | r29 = r31[0x8] (s32/u32) - 0x8002166c | r0 = r29[0x0] (s32/u32) - 0x80021670 | r0 |= 0x8000 - 0x80021674 | r29[0x0] = r0 (s32/u32) - 0x80021678 | r29[0x40] = r4 (s32/u32) - - from 0x80021658: - 0x8002167c | r27 += 0x144 - 0x80021680 | r28 += 0x1 - - from 0x80021648: - 0x80021684 | s32 r5 = s16 r28 - 0x80021688 | r0 = r30[0x6c] (s16/u16) - 0x8002168c | (cmp) - 0x80021690 | if r5 < r0 : goto 0x8002164c (s32/u32) - 0x80021694 | r11 = r1 + 0x20 - 0x80021698 | call _restgpr_26 - 0x8002169c | r0 = Stack[0x24] (s32/u32) - 0x800216a0 | Link Register set to r0 - 0x800216a4 | r1 += 0x20 - 0x800216a8 | return -Hu3DModelHiliteMapSet end - -global function Hu3DModelShadowSet: - 0x800216ac | Stack Size += 0x20 - 0x800216b0 | r0 set to Link Register - 0x800216b4 | Stack[0x24] = r0 (s32/u32) - 0x800216b8 | r11 = r1 + 0x20 - 0x800216bc | call _savegpr_26 - 0x800216c0 | s32 r0 = s16 r3 - 0x800216c4 | r5 = r0 * 0x124 - 0x800216c8 | (^u16) r4 = (^u16) Hu3DData - 0x800216cc | r0 = r4 + (vu16) Hu3DData - 0x800216d0 | r31 = r0 + r5 - 0x800216d4 | r30 = r31[0xc4] (s32/u32) - 0x800216d8 | r0 = r31[0x50] (s32/u32) - 0x800216dc | r0 = rotate(r0, 0) & (bits 29 to 29) - 0x800216e0 | (cmp) - 0x800216e4 | if r0 != 0x0 : goto 0x800216f4 (s32/u32) - 0x800216e8 | r4 = Stack[Hu3DShadowCamBit@sda21] (s16/u16) - 0x800216ec | r0 = r4 + 0x1 - 0x800216f0 | Stack[Hu3DShadowCamBit@sda21] = r0 (s16/u16) - - from 0x800216e4: - 0x800216f4 | r0 = r31[0x50] (s32/u32) - 0x800216f8 | r0 |= 0x4 - 0x800216fc | r31[0x50] = r0 (s32/u32) - 0x80021700 | r27 = r30[0x4c] (s32/u32) - 0x80021704 | r28 = 0x0 - 0x80021708 | goto 0x80021734 - - from later address: - 0x8002170c | r29 = r27 - 0x80021710 | r0 = r29[0x8] (s32/u32) - 0x80021714 | (cmp) - 0x80021718 | if r0 == 0x0 : goto 0x8002172c (s32/u32) - 0x8002171c | r26 = r29[0x8] (s32/u32) - 0x80021720 | r0 = r26[0x0] (s32/u32) - 0x80021724 | r0 |= 0x400 - 0x80021728 | r26[0x0] = r0 (s32/u32) - - from 0x80021718: - 0x8002172c | r28 += 0x1 - 0x80021730 | r27 += 0x144 - - from 0x80021708: - 0x80021734 | s32 r4 = s16 r28 - 0x80021738 | r0 = r30[0x6c] (s16/u16) - 0x8002173c | (cmp) - 0x80021740 | if r4 < r0 : goto 0x8002170c (s32/u32) - 0x80021744 | r11 = r1 + 0x20 - 0x80021748 | call _restgpr_26 - 0x8002174c | r0 = Stack[0x24] (s32/u32) - 0x80021750 | Link Register set to r0 - 0x80021754 | r1 += 0x20 - 0x80021758 | return -Hu3DModelShadowSet end - -global function Hu3DModelShadowReset: - 0x8002175c | Stack Size += 0x20 - 0x80021760 | r0 set to Link Register - 0x80021764 | Stack[0x24] = r0 (s32/u32) - 0x80021768 | r11 = r1 + 0x20 - 0x8002176c | call _savegpr_26 - 0x80021770 | s32 r0 = s16 r3 - 0x80021774 | r5 = r0 * 0x124 - 0x80021778 | (^u16) r4 = (^u16) Hu3DData - 0x8002177c | r0 = r4 + (vu16) Hu3DData - 0x80021780 | r31 = r0 + r5 - 0x80021784 | r30 = r31[0xc4] (s32/u32) - 0x80021788 | r0 = r31[0x50] (s32/u32) - 0x8002178c | r0 = rotate(r0, 0) & (bits 30 to 28) - 0x80021790 | r31[0x50] = r0 (s32/u32) - 0x80021794 | r4 = Stack[Hu3DShadowCamBit@sda21] (s16/u16) - 0x80021798 | r0 = r4 - 0x1 - 0x8002179c | Stack[Hu3DShadowCamBit@sda21] = r0 (s16/u16) - 0x800217a0 | r27 = r30[0x4c] (s32/u32) - 0x800217a4 | r28 = 0x0 - 0x800217a8 | goto 0x800217d4 - - from later address: - 0x800217ac | r29 = r27 - 0x800217b0 | r0 = r29[0x8] (s32/u32) - 0x800217b4 | (cmp) - 0x800217b8 | if r0 == 0x0 : goto 0x800217cc (s32/u32) - 0x800217bc | r26 = r29[0x8] (s32/u32) - 0x800217c0 | r0 = r26[0x0] (s32/u32) - 0x800217c4 | r0 = rotate(r0, 0) & (bits 22 to 20) - 0x800217c8 | r26[0x0] = r0 (s32/u32) - - from 0x800217b8: - 0x800217cc | r28 += 0x1 - 0x800217d0 | r27 += 0x144 - - from 0x800217a8: - 0x800217d4 | s32 r4 = s16 r28 - 0x800217d8 | r0 = r30[0x6c] (s16/u16) - 0x800217dc | (cmp) - 0x800217e0 | if r4 < r0 : goto 0x800217ac (s32/u32) - 0x800217e4 | r11 = r1 + 0x20 - 0x800217e8 | call _restgpr_26 - 0x800217ec | r0 = Stack[0x24] (s32/u32) - 0x800217f0 | Link Register set to r0 - 0x800217f4 | r1 += 0x20 - 0x800217f8 | return -Hu3DModelShadowReset end - -global function Hu3DModelShadowDispOn: - 0x800217fc | Stack Size += 0x10 - 0x80021800 | Stack[0xc] = r31 (s32/u32) - 0x80021804 | s32 r0 = s16 r3 - 0x80021808 | r5 = r0 * 0x124 - 0x8002180c | (^u16) r4 = (^u16) Hu3DData - 0x80021810 | r0 = r4 + (vu16) Hu3DData - 0x80021814 | r31 = r0 + r5 - 0x80021818 | r0 = r31[0x50] (s32/u32) - 0x8002181c | r0 |= 0x4 - 0x80021820 | r31[0x50] = r0 (s32/u32) - 0x80021824 | r31 = Stack[0xc] (s32/u32) - 0x80021828 | r1 += 0x10 - 0x8002182c | return -Hu3DModelShadowDispOn end - -global function Hu3DModelShadowDispOff: - 0x80021830 | Stack Size += 0x10 - 0x80021834 | Stack[0xc] = r31 (s32/u32) - 0x80021838 | s32 r0 = s16 r3 - 0x8002183c | r5 = r0 * 0x124 - 0x80021840 | (^u16) r4 = (^u16) Hu3DData - 0x80021844 | r0 = r4 + (vu16) Hu3DData - 0x80021848 | r31 = r0 + r5 - 0x8002184c | r0 = r31[0x50] (s32/u32) - 0x80021850 | r0 = rotate(r0, 0) & (bits 30 to 28) - 0x80021854 | r31[0x50] = r0 (s32/u32) - 0x80021858 | r31 = Stack[0xc] (s32/u32) - 0x8002185c | r1 += 0x10 - 0x80021860 | return -Hu3DModelShadowDispOff end - -global function Hu3DModelShadowMapSet: - 0x80021864 | Stack Size += 0x20 - 0x80021868 | r0 set to Link Register - 0x8002186c | Stack[0x24] = r0 (s32/u32) - 0x80021870 | r11 = r1 + 0x20 - 0x80021874 | call _savegpr_27 - 0x80021878 | s32 r0 = s16 r3 - 0x8002187c | r5 = r0 * 0x124 - 0x80021880 | (^u16) r4 = (^u16) Hu3DData - 0x80021884 | r0 = r4 + (vu16) Hu3DData - 0x80021888 | r4 = r0 + r5 - 0x8002188c | r31 = r4[0xc4] (s32/u32) - 0x80021890 | r28 = r31[0x4c] (s32/u32) - 0x80021894 | r29 = 0x0 - 0x80021898 | goto 0x800218c4 - - from later address: - 0x8002189c | r30 = r28 - 0x800218a0 | r0 = r30[0x8] (s32/u32) - 0x800218a4 | (cmp) - 0x800218a8 | if r0 == 0x0 : goto 0x800218bc (s32/u32) - 0x800218ac | r27 = r30[0x8] (s32/u32) - 0x800218b0 | r0 = r27[0x0] (s32/u32) - 0x800218b4 | r0 |= 0x8 - 0x800218b8 | r27[0x0] = r0 (s32/u32) - - from 0x800218a8: - 0x800218bc | r29 += 0x1 - 0x800218c0 | r28 += 0x144 - - from 0x80021898: - 0x800218c4 | s32 r4 = s16 r29 - 0x800218c8 | r0 = r31[0x6c] (s16/u16) - 0x800218cc | (cmp) - 0x800218d0 | if r4 < r0 : goto 0x8002189c (s32/u32) - 0x800218d4 | r11 = r1 + 0x20 - 0x800218d8 | call _restgpr_27 - 0x800218dc | r0 = Stack[0x24] (s32/u32) - 0x800218e0 | Link Register set to r0 - 0x800218e4 | r1 += 0x20 - 0x800218e8 | return -Hu3DModelShadowMapSet end - -global function Hu3DModelShadowMapObjSet: - 0x800218ec | Stack Size += 0x130 - 0x800218f0 | r0 set to Link Register - 0x800218f4 | Stack[0x134] = r0 (s32/u32) - 0x800218f8 | r11 = r1 + 0x130 - 0x800218fc | call _savegpr_27 - 0x80021900 | Stack[0x8] = r3 (s16/u16) - 0x80021904 | Stack[0xc] = r4 (s32/u32) - 0x80021908 | r0 = Stack[0x8] (s16/u16) - 0x8002190c | r4 = r0 * 0x124 - 0x80021910 | (^u16) r3 = (^u16) Hu3DData - 0x80021914 | r0 = r3 + (vu16) Hu3DData - 0x80021918 | r3 = r0 + r4 - 0x8002191c | r30 = r3[0xc4] (s32/u32) - 0x80021920 | r28 = r30[0x4c] (s32/u32) - 0x80021924 | r3 = Stack[0xc] (s32/u32) - 0x80021928 | call MakeObjectName - 0x8002192c | r4 = r3 - 0x80021930 | r3 = r1 + 0x10 - 0x80021934 | call strcpy - 0x80021938 | r29 = 0x0 - 0x8002193c | goto 0x80021980 - - from later address: - 0x80021940 | r31 = r28 - 0x80021944 | r0 = r31[0x8] (s32/u32) - 0x80021948 | (cmp) - 0x8002194c | if r0 == 0x0 : goto 0x80021978 (s32/u32) - 0x80021950 | r3 = r1 + 0x10 - 0x80021954 | r4 = r31[0x0] (s32/u32) - 0x80021958 | call strcmp - 0x8002195c | (cmp) - 0x80021960 | if r3 != 0x0 : goto 0x80021978 (s32/u32) - 0x80021964 | r27 = r31[0x8] (s32/u32) - 0x80021968 | r0 = r27[0x0] (s32/u32) - 0x8002196c | r0 |= 0x8 - 0x80021970 | r27[0x0] = r0 (s32/u32) - 0x80021974 | goto 0x80021990 - - from 0x80021960: - 0x80021978 | r29 += 0x1 - 0x8002197c | r28 += 0x144 - - from 0x8002193c: - 0x80021980 | s32 r3 = s16 r29 - 0x80021984 | r0 = r30[0x6c] (s16/u16) - 0x80021988 | (cmp) - 0x8002198c | if r3 < r0 : goto 0x80021940 (s32/u32) - - from 0x80021974: - 0x80021990 | r11 = r1 + 0x130 - 0x80021994 | call _restgpr_27 - 0x80021998 | r0 = Stack[0x134] (s32/u32) - 0x8002199c | Link Register set to r0 - 0x800219a0 | r1 += 0x130 - 0x800219a4 | return -Hu3DModelShadowMapObjSet end - -global function Hu3DModelAmbSet: - 0x800219a8 | Stack Size += 0x10 - 0x800219ac | Stack[0xc] = r31 (s32/u32) - 0x800219b0 | s32 r0 = s16 r3 - 0x800219b4 | r5 = r0 * 0x124 - 0x800219b8 | (^u16) r4 = (^u16) Hu3DData - 0x800219bc | r0 = r4 + (vu16) Hu3DData - 0x800219c0 | r31 = r0 + r5 - 0x800219c4 | r31[0x58] = f1 (f32) - 0x800219c8 | r31[0x60] = f2 (f32) - 0x800219cc | r31[0x5c] = f3 (f32) - 0x800219d0 | r31 = Stack[0xc] (s32/u32) - 0x800219d4 | r1 += 0x10 - 0x800219d8 | return -Hu3DModelAmbSet end - -global function Hu3DModelHookSet: - 0x800219dc | Stack Size += 0x130 - 0x800219e0 | r0 set to Link Register - 0x800219e4 | Stack[0x134] = r0 (s32/u32) - 0x800219e8 | r11 = r1 + 0x130 - 0x800219ec | call _savegpr_24 - 0x800219f0 | Stack[0x8] = r3 (s16/u16) - 0x800219f4 | r24 = r4 - 0x800219f8 | r25 = r5 - 0x800219fc | r0 = Stack[0x8] (s16/u16) - 0x80021a00 | r4 = r0 * 0x124 - 0x80021a04 | (^u16) r3 = (^u16) Hu3DData - 0x80021a08 | r0 = r3 + (vu16) Hu3DData - 0x80021a0c | r3 = r0 + r4 - 0x80021a10 | r30 = r3[0xc4] (s32/u32) - 0x80021a14 | r27 = r30[0x4c] (s32/u32) - 0x80021a18 | r3 = r24 - 0x80021a1c | call MakeObjectName - 0x80021a20 | r4 = r3 - 0x80021a24 | r3 = r1 + 0xa - 0x80021a28 | call strcpy - 0x80021a2c | r28 = 0x0 - 0x80021a30 | goto 0x80021a8c - - from later address: - 0x80021a34 | r31 = r27 - 0x80021a38 | r0 = r31[0x8] (s32/u32) - 0x80021a3c | (cmp) - 0x80021a40 | if r0 == 0x0 : goto 0x80021a84 (s32/u32) - 0x80021a44 | r3 = r1 + 0xa - 0x80021a48 | r4 = r31[0x0] (s32/u32) - 0x80021a4c | call strcmp - 0x80021a50 | (cmp) - 0x80021a54 | if r3 != 0x0 : goto 0x80021a84 (s32/u32) - 0x80021a58 | r26 = r31[0x8] (s32/u32) - 0x80021a5c | r26[0x4] = r25 (s16/u16) - 0x80021a60 | s32 r0 = s16 r25 - 0x80021a64 | r4 = r0 * 0x124 - 0x80021a68 | (^u16) r3 = (^u16) Hu3DData - 0x80021a6c | r0 = r3 + (vu16) Hu3DData - 0x80021a70 | r29 = r0 + r4 - 0x80021a74 | r0 = r29[0x50] (s32/u32) - 0x80021a78 | r0 |= 0x8000 - 0x80021a7c | r29[0x50] = r0 (s32/u32) - 0x80021a80 | goto 0x80021ab0 - - from 0x80021a54: - 0x80021a84 | r28 += 0x1 - 0x80021a88 | r27 += 0x144 - - from 0x80021a30: - 0x80021a8c | s32 r3 = s16 r28 - 0x80021a90 | r0 = r30[0x6c] (s16/u16) - 0x80021a94 | (cmp) - 0x80021a98 | if r3 < r0 : goto 0x80021a34 (s32/u32) - 0x80021a9c | (^u16) r3 = (^u16) lbl_8012D591 - 0x80021aa0 | r3 -= lbl_8012D591@l - 0x80021aa4 | r4 = r24 - 0x80021aa8 | clear(cr1eq) - 0x80021aac | call OSReport - - from 0x80021a80: - 0x80021ab0 | r11 = r1 + 0x130 - 0x80021ab4 | call _restgpr_24 - 0x80021ab8 | r0 = Stack[0x134] (s32/u32) - 0x80021abc | Link Register set to r0 - 0x80021ac0 | r1 += 0x130 - 0x80021ac4 | return -Hu3DModelHookSet end - -global function Hu3DModelHookReset: - 0x80021ac8 | Stack Size += 0x30 - 0x80021acc | r0 set to Link Register - 0x80021ad0 | Stack[0x34] = r0 (s32/u32) - 0x80021ad4 | r11 = r1 + 0x30 - 0x80021ad8 | call _savegpr_25 - 0x80021adc | s32 r0 = s16 r3 - 0x80021ae0 | r5 = r0 * 0x124 - 0x80021ae4 | (^u16) r4 = (^u16) Hu3DData - 0x80021ae8 | r0 = r4 + (vu16) Hu3DData - 0x80021aec | r4 = r0 + r5 - 0x80021af0 | r30 = r4[0xc4] (s32/u32) - 0x80021af4 | r26 = r30[0x4c] (s32/u32) - 0x80021af8 | r27 = 0x0 - 0x80021afc | goto 0x80021b54 - - from later address: - 0x80021b00 | r29 = r26 - 0x80021b04 | r0 = r29[0x8] (s32/u32) - 0x80021b08 | (cmp) - 0x80021b0c | if r0 == 0x0 : goto 0x80021b4c (s32/u32) - 0x80021b10 | r31 = r29[0x8] (s32/u32) - 0x80021b14 | r0 = r31[0x4] (s16/u16) - 0x80021b18 | (cmp) - 0x80021b1c | if r0 == -0x1 : goto 0x80021b4c (s32/u32) - 0x80021b20 | r25 = r31[0x4] (s16/u16) - 0x80021b24 | s32 r0 = s16 r25 - 0x80021b28 | r5 = r0 * 0x124 - 0x80021b2c | (^u16) r4 = (^u16) Hu3DData - 0x80021b30 | r0 = r4 + (vu16) Hu3DData - 0x80021b34 | r28 = r0 + r5 - 0x80021b38 | r0 = r28[0x50] (s32/u32) - 0x80021b3c | r0 = rotate(r0, 0) & (bits 17 to 15) - 0x80021b40 | r28[0x50] = r0 (s32/u32) - 0x80021b44 | r0 = -0x1 - 0x80021b48 | r31[0x4] = r0 (s16/u16) - - from 0x80021b1c: - 0x80021b4c | r27 += 0x1 - 0x80021b50 | r26 += 0x144 - - from 0x80021afc: - 0x80021b54 | s32 r4 = s16 r27 - 0x80021b58 | r0 = r30[0x6c] (s16/u16) - 0x80021b5c | (cmp) - 0x80021b60 | if r4 < r0 : goto 0x80021b00 (s32/u32) - 0x80021b64 | r11 = r1 + 0x30 - 0x80021b68 | call _restgpr_25 - 0x80021b6c | r0 = Stack[0x34] (s32/u32) - 0x80021b70 | Link Register set to r0 - 0x80021b74 | r1 += 0x30 - 0x80021b78 | return -Hu3DModelHookReset end - -global function Hu3DModelHookObjReset: - 0x80021b7c | Stack Size += 0x130 - 0x80021b80 | r0 set to Link Register - 0x80021b84 | Stack[0x134] = r0 (s32/u32) - 0x80021b88 | r11 = r1 + 0x130 - 0x80021b8c | call _savegpr_24 - 0x80021b90 | Stack[0x8] = r3 (s16/u16) - 0x80021b94 | r24 = r4 - 0x80021b98 | r0 = Stack[0x8] (s16/u16) - 0x80021b9c | r4 = r0 * 0x124 - 0x80021ba0 | (^u16) r3 = (^u16) Hu3DData - 0x80021ba4 | r0 = r3 + (vu16) Hu3DData - 0x80021ba8 | r3 = r0 + r4 - 0x80021bac | r30 = r3[0xc4] (s32/u32) - 0x80021bb0 | r26 = r30[0x4c] (s32/u32) - 0x80021bb4 | r3 = r24 - 0x80021bb8 | call MakeObjectName - 0x80021bbc | r4 = r3 - 0x80021bc0 | r3 = r1 + 0xa - 0x80021bc4 | call strcpy - 0x80021bc8 | r27 = 0x0 - 0x80021bcc | goto 0x80021c30 - - from later address: - 0x80021bd0 | r31 = r26 - 0x80021bd4 | r0 = r31[0x8] (s32/u32) - 0x80021bd8 | (cmp) - 0x80021bdc | if r0 == 0x0 : goto 0x80021c28 (s32/u32) - 0x80021be0 | r3 = r1 + 0xa - 0x80021be4 | r4 = r31[0x0] (s32/u32) - 0x80021be8 | call strcmp - 0x80021bec | (cmp) - 0x80021bf0 | if r3 != 0x0 : goto 0x80021c28 (s32/u32) - 0x80021bf4 | r29 = r31[0x8] (s32/u32) - 0x80021bf8 | r25 = r29[0x4] (s16/u16) - 0x80021bfc | s32 r0 = s16 r25 - 0x80021c00 | r4 = r0 * 0x124 - 0x80021c04 | (^u16) r3 = (^u16) Hu3DData - 0x80021c08 | r0 = r3 + (vu16) Hu3DData - 0x80021c0c | r28 = r0 + r4 - 0x80021c10 | r0 = r28[0x50] (s32/u32) - 0x80021c14 | r0 = rotate(r0, 0) & (bits 17 to 15) - 0x80021c18 | r28[0x50] = r0 (s32/u32) - 0x80021c1c | r0 = -0x1 - 0x80021c20 | r29[0x4] = r0 (s16/u16) - 0x80021c24 | goto 0x80021c54 - - from 0x80021bf0: - 0x80021c28 | r27 += 0x1 - 0x80021c2c | r26 += 0x144 - - from 0x80021bcc: - 0x80021c30 | s32 r3 = s16 r27 - 0x80021c34 | r0 = r30[0x6c] (s16/u16) - 0x80021c38 | (cmp) - 0x80021c3c | if r3 < r0 : goto 0x80021bd0 (s32/u32) - 0x80021c40 | (^u16) r3 = (^u16) lbl_8012D5B2 - 0x80021c44 | r3 -= lbl_8012D5B2@l - 0x80021c48 | r4 = r24 - 0x80021c4c | clear(cr1eq) - 0x80021c50 | call OSReport - - from 0x80021c24: - 0x80021c54 | r11 = r1 + 0x130 - 0x80021c58 | call _restgpr_24 - 0x80021c5c | r0 = Stack[0x134] (s32/u32) - 0x80021c60 | Link Register set to r0 - 0x80021c64 | r1 += 0x130 - 0x80021c68 | return -Hu3DModelHookObjReset end - -global function Hu3DModelProjectionSet: - 0x80021c6c | Stack Size += 0x10 - 0x80021c70 | Stack[0xc] = r31 (s32/u32) - 0x80021c74 | s32 r0 = s16 r3 - 0x80021c78 | r6 = r0 * 0x124 - 0x80021c7c | (^u16) r5 = (^u16) Hu3DData - 0x80021c80 | r0 = r5 + (vu16) Hu3DData - 0x80021c84 | r31 = r0 + r6 - 0x80021c88 | r6 = r31[0x2] (s8/u8) - 0x80021c8c | r5 = 0x1 - 0x80021c90 | s32 r0 = s16 r4 - 0x80021c94 | unable to interpret: ['slw', 'r0,', 'r5,', 'r0'] - 0x80021c98 | r0 = r6 | r0 - 0x80021c9c | r0 = remove(r0, 24) - 0x80021ca0 | r31[0x2] = r0 (s8/u8) - 0x80021ca4 | r31 = Stack[0xc] (s32/u32) - 0x80021ca8 | r1 += 0x10 - 0x80021cac | return -Hu3DModelProjectionSet end - -global function Hu3DModelProjectionReset: - 0x80021cb0 | Stack Size += 0x10 - 0x80021cb4 | Stack[0xc] = r31 (s32/u32) - 0x80021cb8 | s32 r0 = s16 r3 - 0x80021cbc | r6 = r0 * 0x124 - 0x80021cc0 | (^u16) r5 = (^u16) Hu3DData - 0x80021cc4 | r0 = r5 + (vu16) Hu3DData - 0x80021cc8 | r31 = r0 + r6 - 0x80021ccc | r6 = r31[0x2] (s8/u8) - 0x80021cd0 | r5 = 0x1 - 0x80021cd4 | s32 r0 = s16 r4 - 0x80021cd8 | unable to interpret: ['slw', 'r0,', 'r5,', 'r0'] - 0x80021cdc | r0 = r6 & r0 - 0x80021ce0 | r0 = remove(r0, 24) - 0x80021ce4 | r31[0x2] = r0 (s8/u8) - 0x80021ce8 | r31 = Stack[0xc] (s32/u32) - 0x80021cec | r1 += 0x10 - 0x80021cf0 | return -Hu3DModelProjectionReset end - -global function Hu3DModelHiliteTypeSet: - 0x80021cf4 | Stack Size += 0x20 - 0x80021cf8 | r0 set to Link Register - 0x80021cfc | Stack[0x24] = r0 (s32/u32) - 0x80021d00 | r11 = r1 + 0x20 - 0x80021d04 | call _savegpr_27 - 0x80021d08 | s32 r0 = s16 r3 - 0x80021d0c | r6 = r0 * 0x124 - 0x80021d10 | (^u16) r5 = (^u16) Hu3DData - 0x80021d14 | r0 = r5 + (vu16) Hu3DData - 0x80021d18 | r27 = r0 + r6 - 0x80021d1c | r30 = r27[0xc4] (s32/u32) - 0x80021d20 | r31 = r30[0x10] (s32/u32) - 0x80021d24 | s32 r0 = s16 r4 - 0x80021d28 | r0 = r0 << 4 (s32/u32) - 0x80021d2c | s32 r4 = s16 r0 - 0x80021d30 | r0 = rotate(r4, 0) & (bits 24 to 27) - 0x80021d34 | s32 r4 = s16 r0 - 0x80021d38 | r28 = 0x0 - 0x80021d3c | goto 0x80021d68 - - from later address: - 0x80021d40 | r0 = r31[0x8] (s16/u16) - 0x80021d44 | r0 = remove(r0, 28) - 0x80021d48 | r0 |= r4 - 0x80021d4c | r0 = remove(r0, 16) - 0x80021d50 | r31[0x8] = r0 (s16/u16) - 0x80021d54 | r0 = r31[0x30] (s32/u32) - 0x80021d58 | r0 |= 0x100 - 0x80021d5c | r31[0x30] = r0 (s32/u32) - 0x80021d60 | r28 += 0x1 - 0x80021d64 | r31 += 0x3c - - from 0x80021d3c: - 0x80021d68 | s32 r5 = s16 r28 - 0x80021d6c | r0 = r30[0x5c] (s16/u16) - 0x80021d70 | (cmp) - 0x80021d74 | if r5 < r0 : goto 0x80021d40 (s32/u32) - 0x80021d78 | s32 r0 = s16 r3 - 0x80021d7c | r6 = r0 * 0x124 - 0x80021d80 | (^u16) r5 = (^u16) Hu3DData - 0x80021d84 | r0 = r5 + (vu16) Hu3DData - 0x80021d88 | r29 = r0 + r6 - 0x80021d8c | r0 = r29[0x50] (s32/u32) - 0x80021d90 | r0 |= 0x2 - 0x80021d94 | r29[0x50] = r0 (s32/u32) - 0x80021d98 | r11 = r1 + 0x20 - 0x80021d9c | call _restgpr_27 - 0x80021da0 | r0 = Stack[0x24] (s32/u32) - 0x80021da4 | Link Register set to r0 - 0x80021da8 | r1 += 0x20 - 0x80021dac | return -Hu3DModelHiliteTypeSet end - -global function Hu3DModelReflectTypeSet: - 0x80021db0 | Stack Size += 0x10 - 0x80021db4 | Stack[0xc] = r31 (s32/u32) - 0x80021db8 | s32 r0 = s16 r3 - 0x80021dbc | r6 = r0 * 0x124 - 0x80021dc0 | (^u16) r5 = (^u16) Hu3DData - 0x80021dc4 | r0 = r5 + (vu16) Hu3DData - 0x80021dc8 | r31 = r0 + r6 - 0x80021dcc | s32 r0 = s8 r4 - 0x80021dd0 | r31[0x4] = r0 (s8/u8) - 0x80021dd4 | r31 = Stack[0xc] (s32/u32) - 0x80021dd8 | r1 += 0x10 - 0x80021ddc | return -Hu3DModelReflectTypeSet end - -global function Hu3DCameraCreate: - 0x80021de0 | Stack Size += 0x30 - 0x80021de4 | Stack[0x2c] = r31 (s32/u32) - 0x80021de8 | Stack[0x28] = r30 (s32/u32) - 0x80021dec | Stack[0x24] = r29 (s32/u32) - 0x80021df0 | r4 = Stack[RenderMode@sda21] (s32/u32) - 0x80021df4 | r0 = r4[0x4] (s16/u16) - 0x80021df8 | f1 = r2[lbl_801D4AC0@sda21] (f64) - 0x80021dfc | Stack[0xc] = r0 (s32/u32) - 0x80021e00 | (^u16) r0 = 0x4330 - 0x80021e04 | Stack[0x8] = r0 (s32/u32) - 0x80021e08 | f0 = Stack[0x8] (f64) - 0x80021e0c | f0 -= f1 - 0x80021e10 | (^u16) r4 = (^u16) defCamera - 0x80021e14 | r4 -= defCamera@l - 0x80021e18 | r4[0x48] = f0 (f32) - 0x80021e1c | r4 = Stack[RenderMode@sda21] (s32/u32) - 0x80021e20 | r0 = r4[0x6] (s16/u16) - 0x80021e24 | f1 = r2[lbl_801D4AC0@sda21] (f64) - 0x80021e28 | Stack[0x14] = r0 (s32/u32) - 0x80021e2c | (^u16) r0 = 0x4330 - 0x80021e30 | Stack[0x10] = r0 (s32/u32) - 0x80021e34 | f0 = Stack[0x10] (f64) - 0x80021e38 | f0 -= f1 - 0x80021e3c | (^u16) r4 = (^u16) defCamera - 0x80021e40 | r4 -= defCamera@l - 0x80021e44 | r4[0x4c] = f0 (f32) - 0x80021e48 | r4 = Stack[RenderMode@sda21] (s32/u32) - 0x80021e4c | r0 = r4[0x4] (s16/u16) - 0x80021e50 | s32 r0 = s16 r0 - 0x80021e54 | (^u16) r4 = (^u16) defCamera - 0x80021e58 | r4 -= defCamera@l - 0x80021e5c | r4[0x3c] = r0 (s16/u16) - 0x80021e60 | r4 = Stack[RenderMode@sda21] (s32/u32) - 0x80021e64 | r0 = r4[0x6] (s16/u16) - 0x80021e68 | s32 r0 = s16 r0 - 0x80021e6c | (^u16) r4 = (^u16) defCamera - 0x80021e70 | r4 -= defCamera@l - 0x80021e74 | r4[0x3e] = r0 (s16/u16) - 0x80021e78 | r0 = Stack[Hu3DCameraExistF@sda21] (s16/u16) - 0x80021e7c | r0 |= r3 - 0x80021e80 | r0 = remove(r0, 16) - 0x80021e84 | Stack[Hu3DCameraExistF@sda21] = r0 (s16/u16) - 0x80021e88 | r31 = 0x0 - 0x80021e8c | r30 = 0x1 - 0x80021e90 | goto 0x80021ef4 - - from later address: - 0x80021e94 | s32 r0 = s16 r30 - 0x80021e98 | r0 = r3 & r0 - 0x80021e9c | (cmp) - 0x80021ea0 | if r0 == 0x0 : goto 0x80021ee4 (s32/u32) - 0x80021ea4 | s32 r0 = s16 r31 - 0x80021ea8 | r5 = r0 * 0x58 - 0x80021eac | (^u16) r4 = (^u16) Hu3DCamera - 0x80021eb0 | r0 = r4 - Hu3DCamera@l - 0x80021eb4 | r29 = r0 + r5 - 0x80021eb8 | r6 = r29 - 0x4 - 0x80021ebc | (^u16) r4 = (^u16) defCamera - 0x80021ec0 | r4 -= defCamera@l - 0x80021ec4 | r5 = r4 - 0x4 - 0x80021ec8 | r0 = 0xb - 0x80021ecc | Count Register set to r0 - - from later address: - 0x80021ed0 | r4 = r5[0x4] (s32/u32) - 0x80021ed4 | unable to interpret: ['lwzu', 'r0,', '0x8(r5)'] - 0x80021ed8 | r6[0x4] = r4 (s32/u32) - 0x80021edc | Stack Size += x8 - 0x80021ee0 | unable to interpret: ['bdnz', '.L_80021ED0'] - - from 0x80021ea0: - 0x80021ee4 | r31 += 0x1 - 0x80021ee8 | s32 r0 = s16 r30 - 0x80021eec | r0 = r0 << 1 (s32/u32) - 0x80021ef0 | s32 r30 = s16 r0 - - from 0x80021e90: - 0x80021ef4 | s32 r0 = s16 r31 - 0x80021ef8 | (cmp) - 0x80021efc | if r0 < 0x10 : goto 0x80021e94 (s32/u32) - 0x80021f00 | r31 = Stack[0x2c] (s32/u32) - 0x80021f04 | r30 = Stack[0x28] (s32/u32) - 0x80021f08 | r29 = Stack[0x24] (s32/u32) - 0x80021f0c | r1 += 0x30 - 0x80021f10 | return -Hu3DCameraCreate end - -global function Hu3DCameraPerspectiveSet: - 0x80021f14 | Stack Size += 0x20 - 0x80021f18 | Stack[0x1c] = r31 (s32/u32) - 0x80021f1c | Stack[0x18] = r30 (s32/u32) - 0x80021f20 | Stack[0x14] = r29 (s32/u32) - 0x80021f24 | r30 = 0x0 - 0x80021f28 | r29 = 0x1 - 0x80021f2c | goto 0x80021f74 - - from later address: - 0x80021f30 | s32 r0 = s16 r29 - 0x80021f34 | r0 = r3 & r0 - 0x80021f38 | (cmp) - 0x80021f3c | if r0 == 0x0 : goto 0x80021f64 (s32/u32) - 0x80021f40 | s32 r0 = s16 r30 - 0x80021f44 | r5 = r0 * 0x58 - 0x80021f48 | (^u16) r4 = (^u16) Hu3DCamera - 0x80021f4c | r0 = r4 - Hu3DCamera@l - 0x80021f50 | r31 = r0 + r5 - 0x80021f54 | r31[0x0] = f1 (f32) - 0x80021f58 | r31[0x4] = f2 (f32) - 0x80021f5c | r31[0x8] = f3 (f32) - 0x80021f60 | r31[0xc] = f4 (f32) - - from 0x80021f3c: - 0x80021f64 | r30 += 0x1 - 0x80021f68 | s32 r0 = s16 r29 - 0x80021f6c | r0 = r0 << 1 (s32/u32) - 0x80021f70 | s32 r29 = s16 r0 - - from 0x80021f2c: - 0x80021f74 | s32 r0 = s16 r30 - 0x80021f78 | (cmp) - 0x80021f7c | if r0 < 0x10 : goto 0x80021f30 (s32/u32) - 0x80021f80 | r31 = Stack[0x1c] (s32/u32) - 0x80021f84 | r30 = Stack[0x18] (s32/u32) - 0x80021f88 | r29 = Stack[0x14] (s32/u32) - 0x80021f8c | r1 += 0x20 - 0x80021f90 | return -Hu3DCameraPerspectiveSet end - -global function Hu3DCameraViewportSet: - 0x80021f94 | Stack Size += 0x20 - 0x80021f98 | Stack[0x1c] = r31 (s32/u32) - 0x80021f9c | Stack[0x18] = r30 (s32/u32) - 0x80021fa0 | Stack[0x14] = r29 (s32/u32) - 0x80021fa4 | r30 = 0x0 - 0x80021fa8 | r29 = 0x1 - 0x80021fac | goto 0x80021ffc - - from later address: - 0x80021fb0 | s32 r0 = s16 r29 - 0x80021fb4 | r0 = r3 & r0 - 0x80021fb8 | (cmp) - 0x80021fbc | if r0 == 0x0 : goto 0x80021fec (s32/u32) - 0x80021fc0 | s32 r0 = s16 r30 - 0x80021fc4 | r5 = r0 * 0x58 - 0x80021fc8 | (^u16) r4 = (^u16) Hu3DCamera - 0x80021fcc | r0 = r4 - Hu3DCamera@l - 0x80021fd0 | r31 = r0 + r5 - 0x80021fd4 | r31[0x40] = f1 (f32) - 0x80021fd8 | r31[0x44] = f2 (f32) - 0x80021fdc | r31[0x48] = f3 (f32) - 0x80021fe0 | r31[0x4c] = f4 (f32) - 0x80021fe4 | r31[0x50] = f5 (f32) - 0x80021fe8 | r31[0x54] = f6 (f32) - - from 0x80021fbc: - 0x80021fec | r30 += 0x1 - 0x80021ff0 | s32 r0 = s16 r29 - 0x80021ff4 | r0 = r0 << 1 (s32/u32) - 0x80021ff8 | s32 r29 = s16 r0 - - from 0x80021fac: - 0x80021ffc | s32 r0 = s16 r30 - 0x80022000 | (cmp) - 0x80022004 | if r0 < 0x10 : goto 0x80021fb0 (s32/u32) - 0x80022008 | r31 = Stack[0x1c] (s32/u32) - 0x8002200c | r30 = Stack[0x18] (s32/u32) - 0x80022010 | r29 = Stack[0x14] (s32/u32) - 0x80022014 | r1 += 0x20 - 0x80022018 | return -Hu3DCameraViewportSet end - -global function Hu3DCameraScissorSet: - 0x8002201c | Stack Size += 0x20 - 0x80022020 | Stack[0x1c] = r31 (s32/u32) - 0x80022024 | Stack[0x18] = r30 (s32/u32) - 0x80022028 | Stack[0x14] = r29 (s32/u32) - 0x8002202c | r30 = 0x0 - 0x80022030 | r29 = 0x1 - 0x80022034 | goto 0x8002208c - - from later address: - 0x80022038 | s32 r0 = s16 r29 - 0x8002203c | r0 = r3 & r0 - 0x80022040 | (cmp) - 0x80022044 | if r0 == 0x0 : goto 0x8002207c (s32/u32) - 0x80022048 | s32 r0 = s16 r30 - 0x8002204c | r9 = r0 * 0x58 - 0x80022050 | (^u16) r8 = (^u16) Hu3DCamera - 0x80022054 | r0 = r8 - Hu3DCamera@l - 0x80022058 | r31 = r0 + r9 - 0x8002205c | s32 r0 = s16 r4 - 0x80022060 | r31[0x38] = r0 (s16/u16) - 0x80022064 | s32 r0 = s16 r5 - 0x80022068 | r31[0x3a] = r0 (s16/u16) - 0x8002206c | s32 r0 = s16 r6 - 0x80022070 | r31[0x3c] = r0 (s16/u16) - 0x80022074 | s32 r0 = s16 r7 - 0x80022078 | r31[0x3e] = r0 (s16/u16) - - from 0x80022044: - 0x8002207c | r30 += 0x1 - 0x80022080 | s32 r0 = s16 r29 - 0x80022084 | r0 = r0 << 1 (s32/u32) - 0x80022088 | s32 r29 = s16 r0 - - from 0x80022034: - 0x8002208c | s32 r0 = s16 r30 - 0x80022090 | (cmp) - 0x80022094 | if r0 < 0x10 : goto 0x80022038 (s32/u32) - 0x80022098 | r31 = Stack[0x1c] (s32/u32) - 0x8002209c | r30 = Stack[0x18] (s32/u32) - 0x800220a0 | r29 = Stack[0x14] (s32/u32) - 0x800220a4 | r1 += 0x20 - 0x800220a8 | return -Hu3DCameraScissorSet end - -global function Hu3DCameraPosSet: - 0x800220ac | Stack Size += 0x20 - 0x800220b0 | Stack[0x1c] = r31 (s32/u32) - 0x800220b4 | Stack[0x18] = r30 (s32/u32) - 0x800220b8 | Stack[0x14] = r29 (s32/u32) - 0x800220bc | r30 = 0x0 - 0x800220c0 | r29 = 0x1 - 0x800220c4 | goto 0x80022124 - - from later address: - 0x800220c8 | s32 r0 = s16 r29 - 0x800220cc | r0 = r3 & r0 - 0x800220d0 | (cmp) - 0x800220d4 | if r0 == 0x0 : goto 0x80022114 (s32/u32) - 0x800220d8 | s32 r0 = s16 r30 - 0x800220dc | r5 = r0 * 0x58 - 0x800220e0 | (^u16) r4 = (^u16) Hu3DCamera - 0x800220e4 | r0 = r4 - Hu3DCamera@l - 0x800220e8 | r31 = r0 + r5 - 0x800220ec | r31[0x14] = f1 (f32) - 0x800220f0 | r31[0x18] = f2 (f32) - 0x800220f4 | r31[0x1c] = f3 (f32) - 0x800220f8 | r31[0x20] = f4 (f32) - 0x800220fc | r31[0x24] = f5 (f32) - 0x80022100 | r31[0x28] = f6 (f32) - 0x80022104 | r31[0x2c] = f7 (f32) - 0x80022108 | r31[0x30] = f8 (f32) - 0x8002210c | f0 = Stack[0x28] (f32) - 0x80022110 | r31[0x34] = f0 (f32) - - from 0x800220d4: - 0x80022114 | r30 += 0x1 - 0x80022118 | s32 r0 = s16 r29 - 0x8002211c | r0 = r0 << 1 (s32/u32) - 0x80022120 | s32 r29 = s16 r0 - - from 0x800220c4: - 0x80022124 | s32 r0 = s16 r30 - 0x80022128 | (cmp) - 0x8002212c | if r0 < 0x10 : goto 0x800220c8 (s32/u32) - 0x80022130 | r31 = Stack[0x1c] (s32/u32) - 0x80022134 | r30 = Stack[0x18] (s32/u32) - 0x80022138 | r29 = Stack[0x14] (s32/u32) - 0x8002213c | r1 += 0x20 - 0x80022140 | return -Hu3DCameraPosSet end - -global function Hu3DCameraPosSetV: - 0x80022144 | Stack Size += 0x20 - 0x80022148 | Stack[0x1c] = r31 (s32/u32) - 0x8002214c | Stack[0x18] = r30 (s32/u32) - 0x80022150 | Stack[0x14] = r29 (s32/u32) - 0x80022154 | r30 = 0x0 - 0x80022158 | r29 = 0x1 - 0x8002215c | goto 0x800221dc - - from later address: - 0x80022160 | s32 r0 = s16 r29 - 0x80022164 | r0 = r3 & r0 - 0x80022168 | (cmp) - 0x8002216c | if r0 == 0x0 : goto 0x800221cc (s32/u32) - 0x80022170 | s32 r0 = s16 r30 - 0x80022174 | r8 = r0 * 0x58 - 0x80022178 | (^u16) r7 = (^u16) Hu3DCamera - 0x8002217c | r0 = r7 - Hu3DCamera@l - 0x80022180 | r31 = r0 + r8 - 0x80022184 | r7 = r4[0x0] (s32/u32) - 0x80022188 | r0 = r4[0x4] (s32/u32) - 0x8002218c | r31[0x14] = r7 (s32/u32) - 0x80022190 | r31[0x18] = r0 (s32/u32) - 0x80022194 | r0 = r4[0x8] (s32/u32) - 0x80022198 | r31[0x1c] = r0 (s32/u32) - 0x8002219c | r7 = r5[0x0] (s32/u32) - 0x800221a0 | r0 = r5[0x4] (s32/u32) - 0x800221a4 | r31[0x20] = r7 (s32/u32) - 0x800221a8 | r31[0x24] = r0 (s32/u32) - 0x800221ac | r0 = r5[0x8] (s32/u32) - 0x800221b0 | r31[0x28] = r0 (s32/u32) - 0x800221b4 | r7 = r6[0x0] (s32/u32) - 0x800221b8 | r0 = r6[0x4] (s32/u32) - 0x800221bc | r31[0x2c] = r7 (s32/u32) - 0x800221c0 | r31[0x30] = r0 (s32/u32) - 0x800221c4 | r0 = r6[0x8] (s32/u32) - 0x800221c8 | r31[0x34] = r0 (s32/u32) - - from 0x8002216c: - 0x800221cc | r30 += 0x1 - 0x800221d0 | s32 r0 = s16 r29 - 0x800221d4 | r0 = r0 << 1 (s32/u32) - 0x800221d8 | s32 r29 = s16 r0 - - from 0x8002215c: - 0x800221dc | s32 r0 = s16 r30 - 0x800221e0 | (cmp) - 0x800221e4 | if r0 < 0x10 : goto 0x80022160 (s32/u32) - 0x800221e8 | r31 = Stack[0x1c] (s32/u32) - 0x800221ec | r30 = Stack[0x18] (s32/u32) - 0x800221f0 | r29 = Stack[0x14] (s32/u32) - 0x800221f4 | r1 += 0x20 - 0x800221f8 | return -Hu3DCameraPosSetV end - -global function Hu3DCameraKill: - 0x800221fc | Stack Size += 0x20 - 0x80022200 | Stack[0x1c] = r31 (s32/u32) - 0x80022204 | Stack[0x18] = r30 (s32/u32) - 0x80022208 | Stack[0x14] = r29 (s32/u32) - 0x8002220c | r31 = 0x0 - 0x80022210 | r30 = 0x1 - 0x80022214 | goto 0x80022254 - - from later address: - 0x80022218 | s32 r0 = s16 r30 - 0x8002221c | r0 = r3 & r0 - 0x80022220 | (cmp) - 0x80022224 | if r0 == 0x0 : goto 0x80022244 (s32/u32) - 0x80022228 | s32 r0 = s16 r31 - 0x8002222c | r5 = r0 * 0x58 - 0x80022230 | (^u16) r4 = (^u16) Hu3DCamera - 0x80022234 | r0 = r4 - Hu3DCamera@l - 0x80022238 | r29 = r0 + r5 - 0x8002223c | f0 = r2[lbl_801D4AB0@sda21] (f32) - 0x80022240 | r29[0x0] = f0 (f32) - - from 0x80022224: - 0x80022244 | r31 += 0x1 - 0x80022248 | s32 r0 = s16 r30 - 0x8002224c | r0 = r0 << 1 (s32/u32) - 0x80022250 | s32 r30 = s16 r0 - - from 0x80022214: - 0x80022254 | s32 r0 = s16 r31 - 0x80022258 | (cmp) - 0x8002225c | if r0 < 0x10 : goto 0x80022218 (s32/u32) - 0x80022260 | r31 = Stack[0x1c] (s32/u32) - 0x80022264 | r30 = Stack[0x18] (s32/u32) - 0x80022268 | r29 = Stack[0x14] (s32/u32) - 0x8002226c | r1 += 0x20 - 0x80022270 | return -Hu3DCameraKill end - -global function Hu3DCameraAllKill: - 0x80022274 | Stack Size += 0x20 - 0x80022278 | r0 set to Link Register - 0x8002227c | Stack[0x24] = r0 (s32/u32) - 0x80022280 | r11 = r1 + 0x20 - 0x80022284 | call _savegpr_26 - 0x80022288 | (^u16) r3 = (^u16) Hu3DCamera - 0x8002228c | r31 = r3 - Hu3DCamera@l - 0x80022290 | r29 = 0x0 - 0x80022294 | r28 = 0x1 - 0x80022298 | goto 0x80022318 - - from later address: - 0x8002229c | f1 = r2[lbl_801D4AB0@sda21] (f32) - 0x800222a0 | f0 = r31[0x0] (f32) - 0x800222a4 | (cmp) - 0x800222a8 | if f1 == f0 : goto 0x80022304 (f32/f64) - 0x800222ac | r30 = 0x0 - 0x800222b0 | r27 = 0x1 - 0x800222b4 | goto 0x800222f8 - - from later address: - 0x800222b8 | s32 r3 = s16 r28 - 0x800222bc | s32 r0 = s16 r27 - 0x800222c0 | r0 = r3 & r0 - 0x800222c4 | (cmp) - 0x800222c8 | if r0 == 0x0 : goto 0x800222e8 (s32/u32) - 0x800222cc | s32 r0 = s16 r30 - 0x800222d0 | r4 = r0 * 0x58 - 0x800222d4 | (^u16) r3 = (^u16) Hu3DCamera - 0x800222d8 | r0 = r3 - Hu3DCamera@l - 0x800222dc | r26 = r0 + r4 - 0x800222e0 | f0 = r2[lbl_801D4AB0@sda21] (f32) - 0x800222e4 | r26[0x0] = f0 (f32) - - from 0x800222c8: - 0x800222e8 | r30 += 0x1 - 0x800222ec | s32 r0 = s16 r27 - 0x800222f0 | r0 = r0 << 1 (s32/u32) - 0x800222f4 | s32 r27 = s16 r0 - - from 0x800222b4: - 0x800222f8 | s32 r0 = s16 r30 - 0x800222fc | (cmp) - 0x80022300 | if r0 < 0x10 : goto 0x800222b8 (s32/u32) - - from 0x800222a8: - 0x80022304 | r29 += 0x1 - 0x80022308 | s32 r0 = s16 r28 - 0x8002230c | r0 = r0 << 1 (s32/u32) - 0x80022310 | s32 r28 = s16 r0 - 0x80022314 | r31 += 0x58 - - from 0x80022298: - 0x80022318 | s32 r0 = s16 r29 - 0x8002231c | (cmp) - 0x80022320 | if r0 < 0x10 : goto 0x8002229c (s32/u32) - 0x80022324 | r0 = 0x0 - 0x80022328 | Stack[Hu3DCameraExistF@sda21] = r0 (s16/u16) - 0x8002232c | r11 = r1 + 0x20 - 0x80022330 | call _restgpr_26 - 0x80022334 | r0 = Stack[0x24] (s32/u32) - 0x80022338 | Link Register set to r0 - 0x8002233c | r1 += 0x20 - 0x80022340 | return -Hu3DCameraAllKill end - -global function Hu3DCameraSet: - 0x80022344 | Stack Size += 0x60 - 0x80022348 | r0 set to Link Register - 0x8002234c | Stack[0x64] = r0 (s32/u32) - 0x80022350 | Stack[0x5c] = r31 (s32/u32) - 0x80022354 | Stack[0x8] = r3 (s32/u32) - 0x80022358 | Stack[0xc] = r4 (s32/u32) - 0x8002235c | r0 = Stack[0x8] (s32/u32) - 0x80022360 | r4 = r0 * 0x58 - 0x80022364 | (^u16) r3 = (^u16) Hu3DCamera - 0x80022368 | r0 = r3 - Hu3DCamera@l - 0x8002236c | r31 = r0 + r4 - 0x80022370 | r3 = r1 + 0x10 - 0x80022374 | f1 = r31[0x0] (f32) - 0x80022378 | f2 = r31[0xc] (f32) - 0x8002237c | f3 = r31[0x4] (f32) - 0x80022380 | f4 = r31[0x8] (f32) - 0x80022384 | call C_MTXPerspective - 0x80022388 | r3 = r1 + 0x10 - 0x8002238c | r4 = 0x0 - 0x80022390 | call GXSetProjection - 0x80022394 | r3 = Stack[RenderMode@sda21] (s32/u32) - 0x80022398 | r0 = r3[0x18] (s8/u8) - 0x8002239c | (cmp) - 0x800223a0 | if r0 == 0x0 : goto 0x800223c8 (s32/u32) - 0x800223a4 | call VIGetNextField - 0x800223a8 | f1 = r31[0x40] (f32) - 0x800223ac | f2 = r31[0x44] (f32) - 0x800223b0 | f3 = r31[0x48] (f32) - 0x800223b4 | f4 = r31[0x4c] (f32) - 0x800223b8 | f5 = r31[0x50] (f32) - 0x800223bc | f6 = r31[0x54] (f32) - 0x800223c0 | call GXSetViewportJitter - 0x800223c4 | goto 0x800223e4 - - from 0x800223a0: - 0x800223c8 | f1 = r31[0x40] (f32) - 0x800223cc | f2 = r31[0x44] (f32) - 0x800223d0 | f3 = r31[0x48] (f32) - 0x800223d4 | f4 = r31[0x4c] (f32) - 0x800223d8 | f5 = r31[0x50] (f32) - 0x800223dc | f6 = r31[0x54] (f32) - 0x800223e0 | call GXSetViewport - - from 0x800223c4: - 0x800223e4 | r3 = r31[0x38] (s16/u16) - 0x800223e8 | r4 = r31[0x3a] (s16/u16) - 0x800223ec | r5 = r31[0x3c] (s16/u16) - 0x800223f0 | r6 = r31[0x3e] (s16/u16) - 0x800223f4 | call GXSetScissor - 0x800223f8 | r3 = Stack[0xc] (s32/u32) - 0x800223fc | r4 = r31 + 0x14 - 0x80022400 | r5 = r31 + 0x20 - 0x80022404 | r6 = r31 + 0x2c - 0x80022408 | call C_MTXLookAt - 0x8002240c | r31 = Stack[0x5c] (s32/u32) - 0x80022410 | r0 = Stack[0x64] (s32/u32) - 0x80022414 | Link Register set to r0 - 0x80022418 | r1 += 0x60 - 0x8002241c | return -Hu3DCameraSet end - -global function Hu3DModelCameraInfoSet: - 0x80022420 | Stack Size += 0x140 - 0x80022424 | r0 set to Link Register - 0x80022428 | Stack[0x144] = r0 (s32/u32) - 0x8002242c | Stack[0x130] = f31 (f64) - 0x80022430 | Stack[0x138] = rotate(f31, qr0) (128-bit) - 0x80022434 | Stack[0x120] = f30 (f64) - 0x80022438 | Stack[0x128] = rotate(f30, qr0) (128-bit) - 0x8002243c | Stack[0x110] = f29 (f64) - 0x80022440 | Stack[0x118] = rotate(f29, qr0) (128-bit) - 0x80022444 | Stack[0x100] = f28 (f64) - 0x80022448 | Stack[0x108] = rotate(f28, qr0) (128-bit) - 0x8002244c | Stack[0xf0] = f27 (f64) - 0x80022450 | Stack[0xf8] = rotate(f27, qr0) (128-bit) - 0x80022454 | Stack[0xe0] = f26 (f64) - 0x80022458 | Stack[0xe8] = rotate(f26, qr0) (128-bit) - 0x8002245c | Stack[0xd0] = f25 (f64) - 0x80022460 | Stack[0xd8] = rotate(f25, qr0) (128-bit) - 0x80022464 | Stack[0xc0] = f24 (f64) - 0x80022468 | Stack[0xc8] = rotate(f24, qr0) (128-bit) - 0x8002246c | Stack[0xb0] = f23 (f64) - 0x80022470 | Stack[0xb8] = rotate(f23, qr0) (128-bit) - 0x80022474 | Stack[0xa0] = f22 (f64) - 0x80022478 | Stack[0xa8] = rotate(f22, qr0) (128-bit) - 0x8002247c | Stack[0x90] = f21 (f64) - 0x80022480 | Stack[0x98] = rotate(f21, qr0) (128-bit) - 0x80022484 | Stack[0x80] = f20 (f64) - 0x80022488 | Stack[0x88] = rotate(f20, qr0) (128-bit) - 0x8002248c | Stack[0x70] = f19 (f64) - 0x80022490 | Stack[0x78] = rotate(f19, qr0) (128-bit) - 0x80022494 | Stack[0x60] = f18 (f64) - 0x80022498 | Stack[0x68] = rotate(f18, qr0) (128-bit) - 0x8002249c | r11 = r1 + 0x60 - 0x800224a0 | call _savegpr_17 - 0x800224a4 | r17 = r3 - 0x800224a8 | r19 = r4 - 0x800224ac | s32 r0 = s16 r17 - 0x800224b0 | r4 = r0 * 0x124 - 0x800224b4 | (^u16) r3 = (^u16) Hu3DData - 0x800224b8 | r0 = r3 + (vu16) Hu3DData - 0x800224bc | r28 = r0 + r4 - 0x800224c0 | r27 = r28[0xc4] (s32/u32) - 0x800224c4 | r0 = remove(r19, 16) - 0x800224c8 | r4 = r0 * 0x58 - 0x800224cc | (^u16) r3 = (^u16) Hu3DCamera - 0x800224d0 | r0 = r3 - Hu3DCamera@l - 0x800224d4 | r18 = r0 + r4 - 0x800224d8 | r23 = r27[0x4c] (s32/u32) - 0x800224dc | r22 = 0x0 - 0x800224e0 | goto 0x80022744 - - from later address: - 0x800224e4 | r31 = r23 - 0x800224e8 | r0 = r31[0x4] (s32/u32) - 0x800224ec | (cmp) - 0x800224f0 | if r0 != 0x7 : goto 0x8002273c (s32/u32) - 0x800224f4 | f31 = r31[0x28] (f32) - 0x800224f8 | Stack[0x10] = f31 (f32) - 0x800224fc | r3 = r31 + 0x10 - 0x80022500 | r4 = r31 + 0x1c - 0x80022504 | r5 = r1 + 0x8 - 0x80022508 | call PSVECSubtract - 0x8002250c | f0 = r2[lbl_801D4AD0@sda21] (f64) - 0x80022510 | f1 = f0 * f31 - 0x80022514 | f0 = r2[lbl_801D4AD8@sda21] (f64) - 0x80022518 | f1 /= f0 - 0x8002251c | call sin - 0x80022520 | f0 = Stack[0x10] (f32) - 0x80022524 | f18 = f0 * f1 - 0x80022528 | f0 = r2[lbl_801D4AD0@sda21] (f64) - 0x8002252c | f1 = f0 * f31 - 0x80022530 | f0 = r2[lbl_801D4AD8@sda21] (f64) - 0x80022534 | f1 /= f0 - 0x80022538 | call cos - 0x8002253c | f0 = r2[lbl_801D4AC8@sda21] (f64) - 0x80022540 | f2 = f0 - f1 - 0x80022544 | f1 = Stack[0x8] (f32) - 0x80022548 | f0 = Stack[0xc] (f32) - 0x8002254c | f0 = f1 * f0 - 0x80022550 | f0 *= f2 - 0x80022554 | f0 -= f18 - 0x80022558 | (f32) f0 = (f64) f0 - 0x8002255c | Stack[0x14] = f0 (f32) - 0x80022560 | f0 = r2[lbl_801D4AD0@sda21] (f64) - 0x80022564 | f1 = f0 * f31 - 0x80022568 | f0 = r2[lbl_801D4AD8@sda21] (f64) - 0x8002256c | f1 /= f0 - 0x80022570 | call cos - 0x80022574 | f3 = r2[lbl_801D4AB8@sda21] (f32) - 0x80022578 | f2 = Stack[0xc] (f32) - 0x8002257c | f0 = Stack[0xc] (f32) - 0x80022580 | f0 = f2 * f0 - 0x80022584 | f0 = f3 - f0 - 0x80022588 | f2 = f0 * f1 - 0x8002258c | f1 = Stack[0xc] (f32) - 0x80022590 | f0 = Stack[0xc] (f32) - 0x80022594 | f0 = f1 * f0 - 0x80022598 | f0 += f2 - 0x8002259c | (f32) f0 = (f64) f0 - 0x800225a0 | Stack[0x18] = f0 (f32) - 0x800225a4 | f0 = r2[lbl_801D4AD0@sda21] (f64) - 0x800225a8 | f1 = f0 * f31 - 0x800225ac | f0 = r2[lbl_801D4AD8@sda21] (f64) - 0x800225b0 | f1 /= f0 - 0x800225b4 | call sin - 0x800225b8 | f0 = Stack[0x8] (f32) - 0x800225bc | f18 = f0 * f1 - 0x800225c0 | f0 = r2[lbl_801D4AD0@sda21] (f64) - 0x800225c4 | f1 = f0 * f31 - 0x800225c8 | f0 = r2[lbl_801D4AD8@sda21] (f64) - 0x800225cc | f1 /= f0 - 0x800225d0 | call cos - 0x800225d4 | f0 = r2[lbl_801D4AC8@sda21] (f64) - 0x800225d8 | f2 = f0 - f1 - 0x800225dc | f1 = Stack[0xc] (f32) - 0x800225e0 | f0 = Stack[0x10] (f32) - 0x800225e4 | f0 = f1 * f0 - 0x800225e8 | f0 *= f2 - 0x800225ec | f0 += f18 - 0x800225f0 | (f32) f0 = (f64) f0 - 0x800225f4 | Stack[0x1c] = f0 (f32) - 0x800225f8 | r3 = r1 + 0x14 - 0x800225fc | r4 = r1 + 0x8 - 0x80022600 | call PSVECNormalize - 0x80022604 | f22 = r31[0x24] (f32) - 0x80022608 | f23 = r31[0x20] (f32) - 0x8002260c | f24 = r31[0x1c] (f32) - 0x80022610 | f25 = Stack[0x10] (f32) - 0x80022614 | f26 = Stack[0xc] (f32) - 0x80022618 | f27 = Stack[0x8] (f32) - 0x8002261c | f28 = r31[0x18] (f32) - 0x80022620 | f29 = r31[0x14] (f32) - 0x80022624 | f30 = r31[0x10] (f32) - 0x80022628 | r26 = 0x0 - 0x8002262c | r21 = 0x1 - 0x80022630 | goto 0x80022690 - - from later address: - 0x80022634 | r3 = remove(r19, 16) - 0x80022638 | s32 r0 = s16 r21 - 0x8002263c | r0 = r3 & r0 - 0x80022640 | (cmp) - 0x80022644 | if r0 == 0x0 : goto 0x80022680 (s32/u32) - 0x80022648 | s32 r0 = s16 r26 - 0x8002264c | r4 = r0 * 0x58 - 0x80022650 | (^u16) r3 = (^u16) Hu3DCamera - 0x80022654 | r0 = r3 - Hu3DCamera@l - 0x80022658 | r30 = r0 + r4 - 0x8002265c | r30[0x14] = f30 (f32) - 0x80022660 | r30[0x18] = f29 (f32) - 0x80022664 | r30[0x1c] = f28 (f32) - 0x80022668 | r30[0x20] = f27 (f32) - 0x8002266c | r30[0x24] = f26 (f32) - 0x80022670 | r30[0x28] = f25 (f32) - 0x80022674 | r30[0x2c] = f24 (f32) - 0x80022678 | r30[0x30] = f23 (f32) - 0x8002267c | r30[0x34] = f22 (f32) - - from 0x80022644: - 0x80022680 | r26 += 0x1 - 0x80022684 | s32 r0 = s16 r21 - 0x80022688 | r0 = r0 << 1 (s32/u32) - 0x8002268c | s32 r21 = s16 r0 - - from 0x80022630: - 0x80022690 | s32 r0 = s16 r26 - 0x80022694 | (cmp) - 0x80022698 | if r0 < 0x10 : goto 0x80022634 (s32/u32) - 0x8002269c | f19 = r31[0x34] (f32) - 0x800226a0 | f20 = r31[0x30] (f32) - 0x800226a4 | f21 = r31[0x2c] (f32) - 0x800226a8 | r25 = 0x0 - 0x800226ac | r20 = 0x1 - 0x800226b0 | goto 0x80022700 - - from later address: - 0x800226b4 | r3 = remove(r19, 16) - 0x800226b8 | s32 r0 = s16 r20 - 0x800226bc | r0 = r3 & r0 - 0x800226c0 | (cmp) - 0x800226c4 | if r0 == 0x0 : goto 0x800226f0 (s32/u32) - 0x800226c8 | s32 r0 = s16 r25 - 0x800226cc | r4 = r0 * 0x58 - 0x800226d0 | (^u16) r3 = (^u16) Hu3DCamera - 0x800226d4 | r0 = r3 - Hu3DCamera@l - 0x800226d8 | r29 = r0 + r4 - 0x800226dc | r29[0x0] = f21 (f32) - 0x800226e0 | r29[0x4] = f20 (f32) - 0x800226e4 | r29[0x8] = f19 (f32) - 0x800226e8 | f0 = r2[lbl_801D4AE0@sda21] (f32) - 0x800226ec | r29[0xc] = f0 (f32) - - from 0x800226c4: - 0x800226f0 | r25 += 0x1 - 0x800226f4 | s32 r0 = s16 r20 - 0x800226f8 | r0 = r0 << 1 (s32/u32) - 0x800226fc | s32 r20 = s16 r0 - - from 0x800226b0: - 0x80022700 | s32 r0 = s16 r25 - 0x80022704 | (cmp) - 0x80022708 | if r0 < 0x10 : goto 0x800226b4 (s32/u32) - 0x8002270c | r0 = remove(r19, 24) - 0x80022710 | r28[0x1] = r0 (s8/u8) - 0x80022714 | s32 r0 = s16 r17 - 0x80022718 | r4 = r0 * 0x124 - 0x8002271c | (^u16) r3 = (^u16) Hu3DData - 0x80022720 | r0 = r3 + (vu16) Hu3DData - 0x80022724 | r24 = r0 + r4 - 0x80022728 | r0 = r24[0x50] (s32/u32) - 0x8002272c | r0 |= 0x2000 - 0x80022730 | r24[0x50] = r0 (s32/u32) - 0x80022734 | r3 = 0x1 - 0x80022738 | goto 0x80022758 - - from 0x800224f0: - 0x8002273c | r22 += 0x1 - 0x80022740 | r23 += 0x144 - - from 0x800224e0: - 0x80022744 | s32 r3 = s16 r22 - 0x80022748 | r0 = r27[0x6c] (s16/u16) - 0x8002274c | (cmp) - 0x80022750 | if r3 < r0 : goto 0x800224e4 (s32/u32) - 0x80022754 | r3 = 0x0 - - from 0x80022738: - 0x80022758 | + rotate(f31, qr0) = Stack[0x138] (128-bit) - 0x8002275c | f31 = Stack[0x130] (f64) - 0x80022760 | + rotate(f30, qr0) = Stack[0x128] (128-bit) - 0x80022764 | f30 = Stack[0x120] (f64) - 0x80022768 | + rotate(f29, qr0) = Stack[0x118] (128-bit) - 0x8002276c | f29 = Stack[0x110] (f64) - 0x80022770 | + rotate(f28, qr0) = Stack[0x108] (128-bit) - 0x80022774 | f28 = Stack[0x100] (f64) - 0x80022778 | + rotate(f27, qr0) = Stack[0xf8] (128-bit) - 0x8002277c | f27 = Stack[0xf0] (f64) - 0x80022780 | + rotate(f26, qr0) = Stack[0xe8] (128-bit) - 0x80022784 | f26 = Stack[0xe0] (f64) - 0x80022788 | + rotate(f25, qr0) = Stack[0xd8] (128-bit) - 0x8002278c | f25 = Stack[0xd0] (f64) - 0x80022790 | + rotate(f24, qr0) = Stack[0xc8] (128-bit) - 0x80022794 | f24 = Stack[0xc0] (f64) - 0x80022798 | + rotate(f23, qr0) = Stack[0xb8] (128-bit) - 0x8002279c | f23 = Stack[0xb0] (f64) - 0x800227a0 | + rotate(f22, qr0) = Stack[0xa8] (128-bit) - 0x800227a4 | f22 = Stack[0xa0] (f64) - 0x800227a8 | + rotate(f21, qr0) = Stack[0x98] (128-bit) - 0x800227ac | f21 = Stack[0x90] (f64) - 0x800227b0 | + rotate(f20, qr0) = Stack[0x88] (128-bit) - 0x800227b4 | f20 = Stack[0x80] (f64) - 0x800227b8 | + rotate(f19, qr0) = Stack[0x78] (128-bit) - 0x800227bc | f19 = Stack[0x70] (f64) - 0x800227c0 | + rotate(f18, qr0) = Stack[0x68] (128-bit) - 0x800227c4 | f18 = Stack[0x60] (f64) - 0x800227c8 | r11 = r1 + 0x60 - 0x800227cc | call _restgpr_17 - 0x800227d0 | r0 = Stack[0x144] (s32/u32) - 0x800227d4 | Link Register set to r0 - 0x800227d8 | r1 += 0x140 - 0x800227dc | return -Hu3DModelCameraInfoSet end - -global function Hu3DModelCameraCreate: - 0x800227e0 | Stack Size += 0x20 - 0x800227e4 | r0 set to Link Register - 0x800227e8 | Stack[0x24] = r0 (s32/u32) - 0x800227ec | Stack[0x1c] = r31 (s32/u32) - 0x800227f0 | Stack[0x18] = r30 (s32/u32) - 0x800227f4 | Stack[0x8] = r3 (s16/u16) - 0x800227f8 | Stack[0xa] = r4 (s16/u16) - 0x800227fc | r3 = -0x1 - 0x80022800 | call Hu3DHookFuncCreate - 0x80022804 | r30 = r3 - 0x80022808 | s32 r0 = s16 r30 - 0x8002280c | r4 = r0 * 0x124 - 0x80022810 | (^u16) r3 = (^u16) Hu3DData - 0x80022814 | r0 = r3 + (vu16) Hu3DData - 0x80022818 | r31 = r0 + r4 - 0x8002281c | r0 = r31[0x50] (s32/u32) - 0x80022820 | r0 = rotate(r0, 0) & (bits 28 to 26) - 0x80022824 | r31[0x50] = r0 (s32/u32) - 0x80022828 | r0 = r31[0x50] (s32/u32) - 0x8002282c | r0 |= 0x1 - 0x80022830 | r0 |= 0x2000 - 0x80022834 | r31[0x50] = r0 (s32/u32) - 0x80022838 | r0 = Stack[0x8] (s16/u16) - 0x8002283c | r31[0x8] = r0 (s16/u16) - 0x80022840 | r0 = Stack[0xa] (s16/u16) - 0x80022844 | r0 = remove(r0, 24) - 0x80022848 | r31[0x1] = r0 (s8/u8) - 0x8002284c | r3 = r30 - 0x80022850 | r31 = Stack[0x1c] (s32/u32) - 0x80022854 | r30 = Stack[0x18] (s32/u32) - 0x80022858 | r0 = Stack[0x24] (s32/u32) - 0x8002285c | Link Register set to r0 - 0x80022860 | r1 += 0x20 - 0x80022864 | return -Hu3DModelCameraCreate end - -global function Hu3DCameraMotionOn: - 0x80022868 | Stack Size += 0x10 - 0x8002286c | Stack[0xc] = r31 (s32/u32) - 0x80022870 | Stack[0x8] = r30 (s32/u32) - 0x80022874 | s32 r0 = s16 r3 - 0x80022878 | r6 = r0 * 0x124 - 0x8002287c | (^u16) r5 = (^u16) Hu3DData - 0x80022880 | r0 = r5 + (vu16) Hu3DData - 0x80022884 | r30 = r0 + r6 - 0x80022888 | r0 = remove(r4, 24) - 0x8002288c | r30[0x1] = r0 (s8/u8) - 0x80022890 | s32 r0 = s16 r3 - 0x80022894 | r6 = r0 * 0x124 - 0x80022898 | (^u16) r5 = (^u16) Hu3DData - 0x8002289c | r0 = r5 + (vu16) Hu3DData - 0x800228a0 | r31 = r0 + r6 - 0x800228a4 | r0 = r31[0x50] (s32/u32) - 0x800228a8 | r0 |= 0x2000 - 0x800228ac | r31[0x50] = r0 (s32/u32) - 0x800228b0 | r31 = Stack[0xc] (s32/u32) - 0x800228b4 | r30 = Stack[0x8] (s32/u32) - 0x800228b8 | r1 += 0x10 - 0x800228bc | return -Hu3DCameraMotionOn end - -global function Hu3DCameraMotionStart: - 0x800228c0 | Stack Size += 0x30 - 0x800228c4 | r0 set to Link Register - 0x800228c8 | Stack[0x34] = r0 (s32/u32) - 0x800228cc | r11 = r1 + 0x30 - 0x800228d0 | call _savegpr_27 - 0x800228d4 | r31 = r3 - 0x800228d8 | Stack[0x8] = r4 (s16/u16) - 0x800228dc | s32 r0 = s16 r31 - 0x800228e0 | r4 = r0 * 0x124 - 0x800228e4 | (^u16) r3 = (^u16) Hu3DData - 0x800228e8 | r0 = r3 + (vu16) Hu3DData - 0x800228ec | r28 = r0 + r4 - 0x800228f0 | s32 r0 = s16 r31 - 0x800228f4 | r4 = r0 * 0x124 - 0x800228f8 | (^u16) r3 = (^u16) Hu3DData - 0x800228fc | r0 = r3 + (vu16) Hu3DData - 0x80022900 | r27 = r0 + r4 - 0x80022904 | r0 = Stack[0x8] (s16/u16) - 0x80022908 | r0 = remove(r0, 24) - 0x8002290c | r27[0x1] = r0 (s8/u8) - 0x80022910 | s32 r0 = s16 r31 - 0x80022914 | r4 = r0 * 0x124 - 0x80022918 | (^u16) r3 = (^u16) Hu3DData - 0x8002291c | r0 = r3 + (vu16) Hu3DData - 0x80022920 | r29 = r0 + r4 - 0x80022924 | r0 = r29[0x50] (s32/u32) - 0x80022928 | r0 |= 0x2000 - 0x8002292c | r29[0x50] = r0 (s32/u32) - 0x80022930 | s32 r0 = s16 r31 - 0x80022934 | r4 = r0 * 0x124 - 0x80022938 | (^u16) r3 = (^u16) Hu3DData - 0x8002293c | r0 = r3 + (vu16) Hu3DData - 0x80022940 | r30 = r0 + r4 - 0x80022944 | r0 = r30[0x54] (s32/u32) - 0x80022948 | (^u16) r3 = 0xc000 - 0x8002294c | r3 -= 0x3 - 0x80022950 | r0 &= r3 - 0x80022954 | r30[0x54] = r0 (s32/u32) - 0x80022958 | r3 = r28[0x8] (s16/u16) - 0x8002295c | call Hu3DMotionMotionMaxTimeGet - 0x80022960 | f2 = f1 - 0x80022964 | r3 = r31 - 0x80022968 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x8002296c | call Hu3DMotionStartEndSet - 0x80022970 | r3 = r31 - 0x80022974 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80022978 | call Hu3DMotionTimeSet - 0x8002297c | r11 = r1 + 0x30 - 0x80022980 | call _restgpr_27 - 0x80022984 | r0 = Stack[0x34] (s32/u32) - 0x80022988 | Link Register set to r0 - 0x8002298c | r1 += 0x30 - 0x80022990 | return -Hu3DCameraMotionStart end - -global function Hu3DCameraMotionOff: - 0x80022994 | Stack Size += 0x10 - 0x80022998 | Stack[0xc] = r31 (s32/u32) - 0x8002299c | s32 r0 = s16 r3 - 0x800229a0 | r5 = r0 * 0x124 - 0x800229a4 | (^u16) r4 = (^u16) Hu3DData - 0x800229a8 | r0 = r4 + (vu16) Hu3DData - 0x800229ac | r31 = r0 + r5 - 0x800229b0 | r0 = r31[0x50] (s32/u32) - 0x800229b4 | r0 = rotate(r0, 0) & (bits 19 to 17) - 0x800229b8 | r31[0x50] = r0 (s32/u32) - 0x800229bc | r31 = Stack[0xc] (s32/u32) - 0x800229c0 | r1 += 0x10 - 0x800229c4 | return -Hu3DCameraMotionOff end - -global function Hu3DLighInit: - 0x800229c8 | Stack Size += 0x10 - 0x800229cc | Stack[0xc] = r31 (s32/u32) - 0x800229d0 | Stack[0x8] = r30 (s32/u32) - 0x800229d4 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x800229d8 | r31 = r3 - Hu3DGlobalLight@l - 0x800229dc | r30 = 0x0 - 0x800229e0 | goto 0x800229f4 - - from later address: - 0x800229e4 | r0 = -0x1 - 0x800229e8 | r31[0x0] = r0 (s16/u16) - 0x800229ec | r30 += 0x1 - 0x800229f0 | r31 += 0x44 - - from 0x800229e0: - 0x800229f4 | s32 r0 = s16 r30 - 0x800229f8 | (cmp) - 0x800229fc | if r0 < 0x8 : goto 0x800229e4 (s32/u32) - 0x80022a00 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x80022a04 | r31 = r3 - Hu3DLocalLight@l - 0x80022a08 | r30 = 0x0 - 0x80022a0c | goto 0x80022a20 - - from later address: - 0x80022a10 | r0 = -0x1 - 0x80022a14 | r31[0x0] = r0 (s16/u16) - 0x80022a18 | r30 += 0x1 - 0x80022a1c | r31 += 0x44 - - from 0x80022a0c: - 0x80022a20 | s32 r0 = s16 r30 - 0x80022a24 | (cmp) - 0x80022a28 | if r0 < 0x20 : goto 0x80022a10 (s32/u32) - 0x80022a2c | r31 = Stack[0xc] (s32/u32) - 0x80022a30 | r30 = Stack[0x8] (s32/u32) - 0x80022a34 | r1 += 0x10 - 0x80022a38 | return -Hu3DLighInit end - -global function Hu3DGLightCreate: - 0x80022a3c | Stack Size += 0x40 - 0x80022a40 | r0 set to Link Register - 0x80022a44 | Stack[0x44] = r0 (s32/u32) - 0x80022a48 | Stack[0x8] = f1 (f32) - 0x80022a4c | Stack[0xc] = f2 (f32) - 0x80022a50 | Stack[0x10] = f3 (f32) - 0x80022a54 | Stack[0x14] = f4 (f32) - 0x80022a58 | Stack[0x18] = f5 (f32) - 0x80022a5c | Stack[0x1c] = f6 (f32) - 0x80022a60 | Stack[0x20] = r3 (s8/u8) - 0x80022a64 | Stack[0x21] = r4 (s8/u8) - 0x80022a68 | Stack[0x22] = r5 (s8/u8) - 0x80022a6c | f0 = Stack[0x8] (f32) - 0x80022a70 | Stack[0x34] = f0 (f32) - 0x80022a74 | f0 = Stack[0xc] (f32) - 0x80022a78 | Stack[0x38] = f0 (f32) - 0x80022a7c | f0 = Stack[0x10] (f32) - 0x80022a80 | Stack[0x3c] = f0 (f32) - 0x80022a84 | f0 = Stack[0x14] (f32) - 0x80022a88 | Stack[0x28] = f0 (f32) - 0x80022a8c | f0 = Stack[0x18] (f32) - 0x80022a90 | Stack[0x2c] = f0 (f32) - 0x80022a94 | f0 = Stack[0x1c] (f32) - 0x80022a98 | Stack[0x30] = f0 (f32) - 0x80022a9c | r0 = Stack[0x20] (s8/u8) - 0x80022aa0 | Stack[0x23] = r0 (s8/u8) - 0x80022aa4 | r0 = Stack[0x21] (s8/u8) - 0x80022aa8 | Stack[0x24] = r0 (s8/u8) - 0x80022aac | r0 = Stack[0x22] (s8/u8) - 0x80022ab0 | Stack[0x25] = r0 (s8/u8) - 0x80022ab4 | r0 = 0xff - 0x80022ab8 | Stack[0x26] = r0 (s8/u8) - 0x80022abc | r3 = r1 + 0x34 - 0x80022ac0 | r4 = r1 + 0x28 - 0x80022ac4 | r5 = r1 + 0x23 - 0x80022ac8 | call Hu3DGLightCreateV - 0x80022acc | r0 = Stack[0x44] (s32/u32) - 0x80022ad0 | Link Register set to r0 - 0x80022ad4 | r1 += 0x40 - 0x80022ad8 | return -Hu3DGLightCreate end - -global function Hu3DGLightCreateV: - 0x80022adc | Stack Size += 0x20 - 0x80022ae0 | r0 set to Link Register - 0x80022ae4 | Stack[0x24] = r0 (s32/u32) - 0x80022ae8 | r11 = r1 + 0x20 - 0x80022aec | call _savegpr_27 - 0x80022af0 | r27 = r3 - 0x80022af4 | r28 = r4 - 0x80022af8 | r29 = r5 - 0x80022afc | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80022b00 | r31 = r3 - Hu3DGlobalLight@l - 0x80022b04 | r30 = 0x0 - 0x80022b08 | goto 0x80022b20 - - from later address: - 0x80022b0c | r0 = r31[0x0] (s16/u16) - 0x80022b10 | (cmp) - 0x80022b14 | if r0 == -0x1 : goto 0x80022b2c (s32/u32) - 0x80022b18 | r30 += 0x1 - 0x80022b1c | r31 += 0x44 - - from 0x80022b08: - 0x80022b20 | s32 r0 = s16 r30 - 0x80022b24 | (cmp) - 0x80022b28 | if r0 < 0x8 : goto 0x80022b0c (s32/u32) - - from 0x80022b14: - 0x80022b2c | s32 r0 = s16 r30 - 0x80022b30 | (cmp) - 0x80022b34 | if r0 != 0x8 : goto 0x80022b40 (s32/u32) - 0x80022b38 | r3 = -0x1 - 0x80022b3c | goto 0x80022bc8 - - from 0x80022b34: - 0x80022b40 | r0 = 0x0 - 0x80022b44 | r31[0x0] = r0 (s16/u16) - 0x80022b48 | r3 = r27[0x0] (s32/u32) - 0x80022b4c | r0 = r27[0x4] (s32/u32) - 0x80022b50 | r31[0x1c] = r3 (s32/u32) - 0x80022b54 | r31[0x20] = r0 (s32/u32) - 0x80022b58 | r0 = r27[0x8] (s32/u32) - 0x80022b5c | r31[0x24] = r0 (s32/u32) - 0x80022b60 | r3 = r28[0x0] (s32/u32) - 0x80022b64 | r0 = r28[0x4] (s32/u32) - 0x80022b68 | r31[0x28] = r3 (s32/u32) - 0x80022b6c | r31[0x2c] = r0 (s32/u32) - 0x80022b70 | r0 = r28[0x8] (s32/u32) - 0x80022b74 | r31[0x30] = r0 (s32/u32) - 0x80022b78 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80022b7c | r31[0x3c] = f0 (f32) - 0x80022b80 | r31[0x38] = f0 (f32) - 0x80022b84 | r31[0x34] = f0 (f32) - 0x80022b88 | f0 = r2[lbl_801D4AE4@sda21] (f32) - 0x80022b8c | r31[0x4] = f0 (f32) - 0x80022b90 | r0 = 0x2 - 0x80022b94 | r31[0x2] = r0 (s16/u16) - 0x80022b98 | r3 = r31 + 0x28 - 0x80022b9c | r4 = r31 + 0x28 - 0x80022ba0 | call PSVECNormalize - 0x80022ba4 | r0 = r29[0x0] (s8/u8) - 0x80022ba8 | r31[0x40] = r0 (s8/u8) - 0x80022bac | r0 = r29[0x1] (s8/u8) - 0x80022bb0 | r31[0x41] = r0 (s8/u8) - 0x80022bb4 | r0 = r29[0x2] (s8/u8) - 0x80022bb8 | r31[0x42] = r0 (s8/u8) - 0x80022bbc | r0 = r29[0x3] (s8/u8) - 0x80022bc0 | r31[0x43] = r0 (s8/u8) - 0x80022bc4 | r3 = r30 - - from 0x80022b3c: - 0x80022bc8 | r11 = r1 + 0x20 - 0x80022bcc | call _restgpr_27 - 0x80022bd0 | r0 = Stack[0x24] (s32/u32) - 0x80022bd4 | Link Register set to r0 - 0x80022bd8 | r1 += 0x20 - 0x80022bdc | return -Hu3DGLightCreateV end - -global function Hu3DLLightCreate: - 0x80022be0 | Stack Size += 0x50 - 0x80022be4 | r0 set to Link Register - 0x80022be8 | Stack[0x54] = r0 (s32/u32) - 0x80022bec | Stack[0x8] = r3 (s16/u16) - 0x80022bf0 | Stack[0xc] = f1 (f32) - 0x80022bf4 | Stack[0x10] = f2 (f32) - 0x80022bf8 | Stack[0x14] = f3 (f32) - 0x80022bfc | Stack[0x18] = f4 (f32) - 0x80022c00 | Stack[0x1c] = f5 (f32) - 0x80022c04 | Stack[0x20] = f6 (f32) - 0x80022c08 | Stack[0x24] = r4 (s8/u8) - 0x80022c0c | Stack[0x25] = r5 (s8/u8) - 0x80022c10 | Stack[0x26] = r6 (s8/u8) - 0x80022c14 | f0 = Stack[0xc] (f32) - 0x80022c18 | Stack[0x38] = f0 (f32) - 0x80022c1c | f0 = Stack[0x10] (f32) - 0x80022c20 | Stack[0x3c] = f0 (f32) - 0x80022c24 | f0 = Stack[0x14] (f32) - 0x80022c28 | Stack[0x40] = f0 (f32) - 0x80022c2c | f0 = Stack[0x18] (f32) - 0x80022c30 | Stack[0x2c] = f0 (f32) - 0x80022c34 | f0 = Stack[0x1c] (f32) - 0x80022c38 | Stack[0x30] = f0 (f32) - 0x80022c3c | f0 = Stack[0x20] (f32) - 0x80022c40 | Stack[0x34] = f0 (f32) - 0x80022c44 | r0 = Stack[0x24] (s8/u8) - 0x80022c48 | Stack[0x27] = r0 (s8/u8) - 0x80022c4c | r0 = Stack[0x25] (s8/u8) - 0x80022c50 | Stack[0x28] = r0 (s8/u8) - 0x80022c54 | r0 = Stack[0x26] (s8/u8) - 0x80022c58 | Stack[0x29] = r0 (s8/u8) - 0x80022c5c | r0 = 0xff - 0x80022c60 | Stack[0x2a] = r0 (s8/u8) - 0x80022c64 | r3 = Stack[0x8] (s16/u16) - 0x80022c68 | r4 = r1 + 0x38 - 0x80022c6c | r5 = r1 + 0x2c - 0x80022c70 | r6 = r1 + 0x27 - 0x80022c74 | call Hu3DLLightCreateV - 0x80022c78 | r0 = Stack[0x54] (s32/u32) - 0x80022c7c | Link Register set to r0 - 0x80022c80 | r1 += 0x50 - 0x80022c84 | return -Hu3DLLightCreate end - -global function Hu3DLLightCreateV: - 0x80022c88 | Stack Size += 0x30 - 0x80022c8c | r0 set to Link Register - 0x80022c90 | Stack[0x34] = r0 (s32/u32) - 0x80022c94 | r11 = r1 + 0x30 - 0x80022c98 | call _savegpr_25 - 0x80022c9c | Stack[0x8] = r3 (s16/u16) - 0x80022ca0 | r25 = r4 - 0x80022ca4 | r26 = r5 - 0x80022ca8 | r27 = r6 - 0x80022cac | r0 = Stack[0x8] (s16/u16) - 0x80022cb0 | r4 = r0 * 0x124 - 0x80022cb4 | (^u16) r3 = (^u16) Hu3DData - 0x80022cb8 | r0 = r3 + (vu16) Hu3DData - 0x80022cbc | r29 = r0 + r4 - 0x80022cc0 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x80022cc4 | r31 = r3 - Hu3DLocalLight@l - 0x80022cc8 | r28 = 0x0 - 0x80022ccc | goto 0x80022ce4 - - from later address: - 0x80022cd0 | r0 = r31[0x0] (s16/u16) - 0x80022cd4 | (cmp) - 0x80022cd8 | if r0 == -0x1 : goto 0x80022cf0 (s32/u32) - 0x80022cdc | r28 += 0x1 - 0x80022ce0 | r31 += 0x44 - - from 0x80022ccc: - 0x80022ce4 | s32 r0 = s16 r28 - 0x80022ce8 | (cmp) - 0x80022cec | if r0 < 0x20 : goto 0x80022cd0 (s32/u32) - - from 0x80022cd8: - 0x80022cf0 | s32 r0 = s16 r28 - 0x80022cf4 | (cmp) - 0x80022cf8 | if r0 != 0x20 : goto 0x80022d04 (s32/u32) - 0x80022cfc | r3 = -0x1 - 0x80022d00 | goto 0x80022dec - - from 0x80022cf8: - 0x80022d04 | r0 = 0x0 - 0x80022d08 | r31[0x0] = r0 (s16/u16) - 0x80022d0c | r3 = r25[0x0] (s32/u32) - 0x80022d10 | r0 = r25[0x4] (s32/u32) - 0x80022d14 | r31[0x1c] = r3 (s32/u32) - 0x80022d18 | r31[0x20] = r0 (s32/u32) - 0x80022d1c | r0 = r25[0x8] (s32/u32) - 0x80022d20 | r31[0x24] = r0 (s32/u32) - 0x80022d24 | r3 = r26[0x0] (s32/u32) - 0x80022d28 | r0 = r26[0x4] (s32/u32) - 0x80022d2c | r31[0x28] = r3 (s32/u32) - 0x80022d30 | r31[0x2c] = r0 (s32/u32) - 0x80022d34 | r0 = r26[0x8] (s32/u32) - 0x80022d38 | r31[0x30] = r0 (s32/u32) - 0x80022d3c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80022d40 | r31[0x3c] = f0 (f32) - 0x80022d44 | r31[0x38] = f0 (f32) - 0x80022d48 | r31[0x34] = f0 (f32) - 0x80022d4c | f0 = r2[lbl_801D4AE4@sda21] (f32) - 0x80022d50 | r31[0x4] = f0 (f32) - 0x80022d54 | r0 = 0x2 - 0x80022d58 | r31[0x2] = r0 (s16/u16) - 0x80022d5c | r3 = r31 + 0x28 - 0x80022d60 | r4 = r31 + 0x28 - 0x80022d64 | call PSVECNormalize - 0x80022d68 | r0 = r27[0x0] (s8/u8) - 0x80022d6c | r31[0x40] = r0 (s8/u8) - 0x80022d70 | r0 = r27[0x1] (s8/u8) - 0x80022d74 | r31[0x41] = r0 (s8/u8) - 0x80022d78 | r0 = r27[0x2] (s8/u8) - 0x80022d7c | r31[0x42] = r0 (s8/u8) - 0x80022d80 | r0 = r27[0x3] (s8/u8) - 0x80022d84 | r31[0x43] = r0 (s8/u8) - 0x80022d88 | r30 = 0x0 - 0x80022d8c | goto 0x80022dac - - from later address: - 0x80022d90 | s32 r0 = s16 r30 - 0x80022d94 | r3 = r0 << 1 (s32/u32) - 0x80022d98 | r0 = r3 + 0x38 - 0x80022d9c | r0 = r29[r0] (s16/u16) - 0x80022da0 | (cmp) - 0x80022da4 | if r0 == -0x1 : goto 0x80022db8 (s32/u32) - 0x80022da8 | r30 += 0x1 - - from 0x80022d8c: - 0x80022dac | s32 r0 = s16 r30 - 0x80022db0 | (cmp) - 0x80022db4 | if r0 < 0x8 : goto 0x80022d90 (s32/u32) - - from 0x80022da4: - 0x80022db8 | s32 r0 = s16 r30 - 0x80022dbc | (cmp) - 0x80022dc0 | if r0 != 0x8 : goto 0x80022dcc (s32/u32) - 0x80022dc4 | r3 = -0x1 - 0x80022dc8 | goto 0x80022dec - - from 0x80022dc0: - 0x80022dcc | s32 r0 = s16 r30 - 0x80022dd0 | r3 = r0 << 1 (s32/u32) - 0x80022dd4 | r0 = r3 + 0x38 - 0x80022dd8 | r29[r0] = r28 (s16/u16) - 0x80022ddc | r0 = r29[0x50] (s32/u32) - 0x80022de0 | r0 |= 0x1000 - 0x80022de4 | r29[0x50] = r0 (s32/u32) - 0x80022de8 | r3 = r30 - - from 0x80022dc8: - 0x80022dec | r11 = r1 + 0x30 - 0x80022df0 | call _restgpr_25 - 0x80022df4 | r0 = Stack[0x34] (s32/u32) - 0x80022df8 | Link Register set to r0 - 0x80022dfc | r1 += 0x30 - 0x80022e00 | return -Hu3DLLightCreateV end - -global function Hu3DGLightSpotSet: - 0x80022e04 | Stack Size += 0x10 - 0x80022e08 | Stack[0xc] = r31 (s32/u32) - 0x80022e0c | s32 r0 = s16 r3 - 0x80022e10 | r6 = r0 * 0x44 - 0x80022e14 | (^u16) r5 = (^u16) Hu3DGlobalLight - 0x80022e18 | r0 = r5 - Hu3DGlobalLight@l - 0x80022e1c | r31 = r0 + r6 - 0x80022e20 | r0 = r31[0x0] (s16/u16) - 0x80022e24 | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80022e28 | s32 r0 = s16 r0 - 0x80022e2c | r31[0x0] = r0 (s16/u16) - 0x80022e30 | r31[0x4] = f1 (f32) - 0x80022e34 | s32 r0 = s16 r4 - 0x80022e38 | r31[0x2] = r0 (s16/u16) - 0x80022e3c | r31 = Stack[0xc] (s32/u32) - 0x80022e40 | r1 += 0x10 - 0x80022e44 | return -Hu3DGLightSpotSet end - -global function Hu3DLLightSpotSet: - 0x80022e48 | Stack Size += 0x10 - 0x80022e4c | Stack[0xc] = r31 (s32/u32) - 0x80022e50 | Stack[0x8] = r30 (s32/u32) - 0x80022e54 | s32 r0 = s16 r3 - 0x80022e58 | r7 = r0 * 0x124 - 0x80022e5c | (^u16) r6 = (^u16) Hu3DData - 0x80022e60 | r0 = r6 + (vu16) Hu3DData - 0x80022e64 | r30 = r0 + r7 - 0x80022e68 | s32 r0 = s16 r4 - 0x80022e6c | r6 = r0 << 1 (s32/u32) - 0x80022e70 | r0 = r6 + 0x38 - 0x80022e74 | r0 = r30[r0] (s16/u16) - 0x80022e78 | r7 = r0 * 0x44 - 0x80022e7c | (^u16) r6 = (^u16) Hu3DLocalLight - 0x80022e80 | r0 = r6 - Hu3DLocalLight@l - 0x80022e84 | r31 = r0 + r7 - 0x80022e88 | r0 = r31[0x0] (s16/u16) - 0x80022e8c | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80022e90 | s32 r0 = s16 r0 - 0x80022e94 | r31[0x0] = r0 (s16/u16) - 0x80022e98 | r31[0x4] = f1 (f32) - 0x80022e9c | s32 r0 = s16 r5 - 0x80022ea0 | r31[0x2] = r0 (s16/u16) - 0x80022ea4 | r31 = Stack[0xc] (s32/u32) - 0x80022ea8 | r30 = Stack[0x8] (s32/u32) - 0x80022eac | r1 += 0x10 - 0x80022eb0 | return -Hu3DLLightSpotSet end - -global function Hu3DGLightInfinitytSet: - 0x80022eb4 | Stack Size += 0x10 - 0x80022eb8 | Stack[0xc] = r31 (s32/u32) - 0x80022ebc | s32 r0 = s16 r3 - 0x80022ec0 | r5 = r0 * 0x44 - 0x80022ec4 | (^u16) r4 = (^u16) Hu3DGlobalLight - 0x80022ec8 | r0 = r4 - Hu3DGlobalLight@l - 0x80022ecc | r31 = r0 + r5 - 0x80022ed0 | r0 = r31[0x0] (s16/u16) - 0x80022ed4 | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80022ed8 | s32 r0 = s16 r0 - 0x80022edc | r31[0x0] = r0 (s16/u16) - 0x80022ee0 | r0 = r31[0x0] (s16/u16) - 0x80022ee4 | r0 |= 0x1 - 0x80022ee8 | s32 r0 = s16 r0 - 0x80022eec | r31[0x0] = r0 (s16/u16) - 0x80022ef0 | r31 = Stack[0xc] (s32/u32) - 0x80022ef4 | r1 += 0x10 - 0x80022ef8 | return -Hu3DGLightInfinitytSet end - -global function Hu3DLLightInfinitytSet: - 0x80022efc | Stack Size += 0x10 - 0x80022f00 | Stack[0xc] = r31 (s32/u32) - 0x80022f04 | Stack[0x8] = r30 (s32/u32) - 0x80022f08 | s32 r0 = s16 r3 - 0x80022f0c | r6 = r0 * 0x124 - 0x80022f10 | (^u16) r5 = (^u16) Hu3DData - 0x80022f14 | r0 = r5 + (vu16) Hu3DData - 0x80022f18 | r30 = r0 + r6 - 0x80022f1c | s32 r0 = s16 r4 - 0x80022f20 | r5 = r0 << 1 (s32/u32) - 0x80022f24 | r0 = r5 + 0x38 - 0x80022f28 | r0 = r30[r0] (s16/u16) - 0x80022f2c | r6 = r0 * 0x44 - 0x80022f30 | (^u16) r5 = (^u16) Hu3DLocalLight - 0x80022f34 | r0 = r5 - Hu3DLocalLight@l - 0x80022f38 | r31 = r0 + r6 - 0x80022f3c | r0 = r31[0x0] (s16/u16) - 0x80022f40 | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80022f44 | s32 r0 = s16 r0 - 0x80022f48 | r31[0x0] = r0 (s16/u16) - 0x80022f4c | r0 = r31[0x0] (s16/u16) - 0x80022f50 | r0 |= 0x1 - 0x80022f54 | s32 r0 = s16 r0 - 0x80022f58 | r31[0x0] = r0 (s16/u16) - 0x80022f5c | r31 = Stack[0xc] (s32/u32) - 0x80022f60 | r30 = Stack[0x8] (s32/u32) - 0x80022f64 | r1 += 0x10 - 0x80022f68 | return -Hu3DLLightInfinitytSet end - -global function Hu3DGLightPointSet: - 0x80022f6c | Stack Size += 0x10 - 0x80022f70 | Stack[0xc] = r31 (s32/u32) - 0x80022f74 | s32 r0 = s16 r3 - 0x80022f78 | r6 = r0 * 0x44 - 0x80022f7c | (^u16) r5 = (^u16) Hu3DGlobalLight - 0x80022f80 | r0 = r5 - Hu3DGlobalLight@l - 0x80022f84 | r31 = r0 + r6 - 0x80022f88 | r0 = r31[0x0] (s16/u16) - 0x80022f8c | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80022f90 | s32 r0 = s16 r0 - 0x80022f94 | r31[0x0] = r0 (s16/u16) - 0x80022f98 | r0 = r31[0x0] (s16/u16) - 0x80022f9c | r0 |= 0x2 - 0x80022fa0 | s32 r0 = s16 r0 - 0x80022fa4 | r31[0x0] = r0 (s16/u16) - 0x80022fa8 | r31[0x4] = f1 (f32) - 0x80022fac | r31[0x8] = f2 (f32) - 0x80022fb0 | s32 r0 = s16 r4 - 0x80022fb4 | r31[0x2] = r0 (s16/u16) - 0x80022fb8 | r31 = Stack[0xc] (s32/u32) - 0x80022fbc | r1 += 0x10 - 0x80022fc0 | return -Hu3DGLightPointSet end - -global function Hu3DLLightPointSet: - 0x80022fc4 | Stack Size += 0x10 - 0x80022fc8 | Stack[0xc] = r31 (s32/u32) - 0x80022fcc | Stack[0x8] = r30 (s32/u32) - 0x80022fd0 | s32 r0 = s16 r3 - 0x80022fd4 | r7 = r0 * 0x124 - 0x80022fd8 | (^u16) r6 = (^u16) Hu3DData - 0x80022fdc | r0 = r6 + (vu16) Hu3DData - 0x80022fe0 | r30 = r0 + r7 - 0x80022fe4 | s32 r0 = s16 r4 - 0x80022fe8 | r6 = r0 << 1 (s32/u32) - 0x80022fec | r0 = r6 + 0x38 - 0x80022ff0 | r0 = r30[r0] (s16/u16) - 0x80022ff4 | r7 = r0 * 0x44 - 0x80022ff8 | (^u16) r6 = (^u16) Hu3DLocalLight - 0x80022ffc | r0 = r6 - Hu3DLocalLight@l - 0x80023000 | r31 = r0 + r7 - 0x80023004 | r0 = r31[0x0] (s16/u16) - 0x80023008 | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x8002300c | s32 r0 = s16 r0 - 0x80023010 | r31[0x0] = r0 (s16/u16) - 0x80023014 | r0 = r31[0x0] (s16/u16) - 0x80023018 | r0 |= 0x2 - 0x8002301c | s32 r0 = s16 r0 - 0x80023020 | r31[0x0] = r0 (s16/u16) - 0x80023024 | r31[0x4] = f1 (f32) - 0x80023028 | r31[0x8] = f2 (f32) - 0x8002302c | s32 r0 = s16 r5 - 0x80023030 | r31[0x2] = r0 (s16/u16) - 0x80023034 | r31 = Stack[0xc] (s32/u32) - 0x80023038 | r30 = Stack[0x8] (s32/u32) - 0x8002303c | r1 += 0x10 - 0x80023040 | return -Hu3DLLightPointSet end - -global function Hu3DGLightKill: - 0x80023044 | r6 = -0x1 - 0x80023048 | s32 r0 = s16 r3 - 0x8002304c | r5 = r0 * 0x44 - 0x80023050 | (^u16) r4 = (^u16) Hu3DGlobalLight - 0x80023054 | r0 = r4 - Hu3DGlobalLight@l - 0x80023058 | r4 = r0 + r5 - 0x8002305c | r4[0x0] = r6 (s16/u16) - 0x80023060 | return -Hu3DGLightKill end - -global function Hu3DLLightKill: - 0x80023064 | Stack Size += 0x20 - 0x80023068 | Stack[0x1c] = r31 (s32/u32) - 0x8002306c | Stack[0x18] = r30 (s32/u32) - 0x80023070 | Stack[0x14] = r29 (s32/u32) - 0x80023074 | s32 r0 = s16 r3 - 0x80023078 | r6 = r0 * 0x124 - 0x8002307c | (^u16) r5 = (^u16) Hu3DData - 0x80023080 | r0 = r5 + (vu16) Hu3DData - 0x80023084 | r31 = r0 + r6 - 0x80023088 | s32 r0 = s16 r4 - 0x8002308c | r5 = r0 << 1 (s32/u32) - 0x80023090 | r0 = r5 + 0x38 - 0x80023094 | r0 = r31[r0] (s16/u16) - 0x80023098 | r6 = r0 * 0x44 - 0x8002309c | (^u16) r5 = (^u16) Hu3DLocalLight - 0x800230a0 | r0 = r5 - Hu3DLocalLight@l - 0x800230a4 | r29 = r0 + r6 - 0x800230a8 | r0 = -0x1 - 0x800230ac | r29[0x0] = r0 (s16/u16) - 0x800230b0 | r6 = -0x1 - 0x800230b4 | s32 r0 = s16 r4 - 0x800230b8 | r5 = r0 << 1 (s32/u32) - 0x800230bc | r0 = r5 + 0x38 - 0x800230c0 | r31[r0] = r6 (s16/u16) - 0x800230c4 | r30 = 0x0 - 0x800230c8 | goto 0x800230e8 - - from later address: - 0x800230cc | s32 r0 = s16 r30 - 0x800230d0 | r5 = r0 << 1 (s32/u32) - 0x800230d4 | r0 = r5 + 0x38 - 0x800230d8 | r0 = r31[r0] (s16/u16) - 0x800230dc | (cmp) - 0x800230e0 | if r0 == -0x1 : goto 0x800230f4 (s32/u32) - 0x800230e4 | r30 += 0x1 - - from 0x800230c8: - 0x800230e8 | s32 r0 = s16 r30 - 0x800230ec | (cmp) - 0x800230f0 | if r0 < 0x8 : goto 0x800230cc (s32/u32) - - from 0x800230e0: - 0x800230f4 | s32 r0 = s16 r30 - 0x800230f8 | (cmp) - 0x800230fc | if r0 != 0x8 : goto 0x8002310c (s32/u32) - 0x80023100 | r0 = r31[0x50] (s32/u32) - 0x80023104 | r0 = rotate(r0, 0) & (bits 20 to 18) - 0x80023108 | r31[0x50] = r0 (s32/u32) - - from 0x800230fc: - 0x8002310c | r31 = Stack[0x1c] (s32/u32) - 0x80023110 | r30 = Stack[0x18] (s32/u32) - 0x80023114 | r29 = Stack[0x14] (s32/u32) - 0x80023118 | r1 += 0x20 - 0x8002311c | return -Hu3DLLightKill end - -global function Hu3DLightAllKill: - 0x80023120 | Stack Size += 0x10 - 0x80023124 | Stack[0xc] = r31 (s32/u32) - 0x80023128 | Stack[0x8] = r30 (s32/u32) - 0x8002312c | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023130 | r30 = r3 - Hu3DGlobalLight@l - 0x80023134 | r31 = 0x0 - 0x80023138 | goto 0x8002316c - - from later address: - 0x8002313c | r0 = r30[0x0] (s16/u16) - 0x80023140 | (cmp) - 0x80023144 | if r0 == -0x1 : goto 0x80023164 (s32/u32) - 0x80023148 | r5 = -0x1 - 0x8002314c | s32 r0 = s16 r31 - 0x80023150 | r4 = r0 * 0x44 - 0x80023154 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023158 | r0 = r3 - Hu3DGlobalLight@l - 0x8002315c | r3 = r0 + r4 - 0x80023160 | r3[0x0] = r5 (s16/u16) - - from 0x80023144: - 0x80023164 | r31 += 0x1 - 0x80023168 | r30 += 0x44 - - from 0x80023138: - 0x8002316c | s32 r0 = s16 r31 - 0x80023170 | (cmp) - 0x80023174 | if r0 < 0x8 : goto 0x8002313c (s32/u32) - 0x80023178 | r31 = Stack[0xc] (s32/u32) - 0x8002317c | r30 = Stack[0x8] (s32/u32) - 0x80023180 | r1 += 0x10 - 0x80023184 | return -Hu3DLightAllKill end - -global function Hu3DGLightColorSet: - 0x80023188 | Stack Size += 0x10 - 0x8002318c | Stack[0xc] = r31 (s32/u32) - 0x80023190 | s32 r0 = s16 r3 - 0x80023194 | r9 = r0 * 0x44 - 0x80023198 | (^u16) r8 = (^u16) Hu3DGlobalLight - 0x8002319c | r0 = r8 - Hu3DGlobalLight@l - 0x800231a0 | r31 = r0 + r9 - 0x800231a4 | r31[0x40] = r4 (s8/u8) - 0x800231a8 | r31[0x41] = r5 (s8/u8) - 0x800231ac | r31[0x42] = r6 (s8/u8) - 0x800231b0 | r31[0x43] = r7 (s8/u8) - 0x800231b4 | r31 = Stack[0xc] (s32/u32) - 0x800231b8 | r1 += 0x10 - 0x800231bc | return -Hu3DGLightColorSet end - -global function Hu3DLLightColorSet: - 0x800231c0 | Stack Size += 0x10 - 0x800231c4 | Stack[0xc] = r31 (s32/u32) - 0x800231c8 | Stack[0x8] = r30 (s32/u32) - 0x800231cc | s32 r0 = s16 r3 - 0x800231d0 | r10 = r0 * 0x124 - 0x800231d4 | (^u16) r9 = (^u16) Hu3DData - 0x800231d8 | r0 = r9 + (vu16) Hu3DData - 0x800231dc | r30 = r0 + r10 - 0x800231e0 | s32 r0 = s16 r4 - 0x800231e4 | r9 = r0 << 1 (s32/u32) - 0x800231e8 | r0 = r9 + 0x38 - 0x800231ec | r0 = r30[r0] (s16/u16) - 0x800231f0 | r10 = r0 * 0x44 - 0x800231f4 | (^u16) r9 = (^u16) Hu3DLocalLight - 0x800231f8 | r0 = r9 - Hu3DLocalLight@l - 0x800231fc | r31 = r0 + r10 - 0x80023200 | r31[0x40] = r5 (s8/u8) - 0x80023204 | r31[0x41] = r6 (s8/u8) - 0x80023208 | r31[0x42] = r7 (s8/u8) - 0x8002320c | r31[0x43] = r8 (s8/u8) - 0x80023210 | r31 = Stack[0xc] (s32/u32) - 0x80023214 | r30 = Stack[0x8] (s32/u32) - 0x80023218 | r1 += 0x10 - 0x8002321c | return -Hu3DLLightColorSet end - -global function Hu3DGLightPosSetV: - 0x80023220 | Stack Size += 0x20 - 0x80023224 | r0 set to Link Register - 0x80023228 | Stack[0x24] = r0 (s32/u32) - 0x8002322c | Stack[0x1c] = r31 (s32/u32) - 0x80023230 | Stack[0x18] = r30 (s32/u32) - 0x80023234 | Stack[0x8] = r3 (s16/u16) - 0x80023238 | r30 = r4 - 0x8002323c | Stack[0xc] = r5 (s32/u32) - 0x80023240 | r0 = Stack[0x8] (s16/u16) - 0x80023244 | r4 = r0 * 0x44 - 0x80023248 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x8002324c | r0 = r3 - Hu3DGlobalLight@l - 0x80023250 | r31 = r0 + r4 - 0x80023254 | r3 = r30[0x0] (s32/u32) - 0x80023258 | r0 = r30[0x4] (s32/u32) - 0x8002325c | r31[0x1c] = r3 (s32/u32) - 0x80023260 | r31[0x20] = r0 (s32/u32) - 0x80023264 | r0 = r30[0x8] (s32/u32) - 0x80023268 | r31[0x24] = r0 (s32/u32) - 0x8002326c | r3 = Stack[0xc] (s32/u32) - 0x80023270 | r4 = r31 + 0x28 - 0x80023274 | call PSVECNormalize - 0x80023278 | r31 = Stack[0x1c] (s32/u32) - 0x8002327c | r30 = Stack[0x18] (s32/u32) - 0x80023280 | r0 = Stack[0x24] (s32/u32) - 0x80023284 | Link Register set to r0 - 0x80023288 | r1 += 0x20 - 0x8002328c | return -Hu3DGLightPosSetV end - -global function Hu3DLLightPosSetV: - 0x80023290 | Stack Size += 0x20 - 0x80023294 | r0 set to Link Register - 0x80023298 | Stack[0x24] = r0 (s32/u32) - 0x8002329c | Stack[0x1c] = r31 (s32/u32) - 0x800232a0 | Stack[0x18] = r30 (s32/u32) - 0x800232a4 | Stack[0x14] = r29 (s32/u32) - 0x800232a8 | Stack[0x8] = r3 (s16/u16) - 0x800232ac | Stack[0xa] = r4 (s16/u16) - 0x800232b0 | r29 = r5 - 0x800232b4 | Stack[0xc] = r6 (s32/u32) - 0x800232b8 | r0 = Stack[0x8] (s16/u16) - 0x800232bc | r4 = r0 * 0x124 - 0x800232c0 | (^u16) r3 = (^u16) Hu3DData - 0x800232c4 | r0 = r3 + (vu16) Hu3DData - 0x800232c8 | r30 = r0 + r4 - 0x800232cc | r0 = Stack[0xa] (s16/u16) - 0x800232d0 | r3 = r0 << 1 (s32/u32) - 0x800232d4 | r0 = r3 + 0x38 - 0x800232d8 | r0 = r30[r0] (s16/u16) - 0x800232dc | r4 = r0 * 0x44 - 0x800232e0 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x800232e4 | r0 = r3 - Hu3DLocalLight@l - 0x800232e8 | r31 = r0 + r4 - 0x800232ec | r3 = r29[0x0] (s32/u32) - 0x800232f0 | r0 = r29[0x4] (s32/u32) - 0x800232f4 | r31[0x1c] = r3 (s32/u32) - 0x800232f8 | r31[0x20] = r0 (s32/u32) - 0x800232fc | r0 = r29[0x8] (s32/u32) - 0x80023300 | r31[0x24] = r0 (s32/u32) - 0x80023304 | r3 = Stack[0xc] (s32/u32) - 0x80023308 | r4 = r31 + 0x28 - 0x8002330c | call PSVECNormalize - 0x80023310 | r31 = Stack[0x1c] (s32/u32) - 0x80023314 | r30 = Stack[0x18] (s32/u32) - 0x80023318 | r29 = Stack[0x14] (s32/u32) - 0x8002331c | r0 = Stack[0x24] (s32/u32) - 0x80023320 | Link Register set to r0 - 0x80023324 | r1 += 0x20 - 0x80023328 | return -Hu3DLLightPosSetV end - -global function Hu3DGLightPosSet: - 0x8002332c | Stack Size += 0x30 - 0x80023330 | r0 set to Link Register - 0x80023334 | Stack[0x34] = r0 (s32/u32) - 0x80023338 | Stack[0x2c] = r31 (s32/u32) - 0x8002333c | Stack[0x8] = r3 (s16/u16) - 0x80023340 | Stack[0xc] = f1 (f32) - 0x80023344 | Stack[0x10] = f2 (f32) - 0x80023348 | Stack[0x14] = f3 (f32) - 0x8002334c | Stack[0x18] = f4 (f32) - 0x80023350 | Stack[0x1c] = f5 (f32) - 0x80023354 | Stack[0x20] = f6 (f32) - 0x80023358 | r0 = Stack[0x8] (s16/u16) - 0x8002335c | r4 = r0 * 0x44 - 0x80023360 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023364 | r0 = r3 - Hu3DGlobalLight@l - 0x80023368 | r31 = r0 + r4 - 0x8002336c | f0 = Stack[0xc] (f32) - 0x80023370 | r31[0x1c] = f0 (f32) - 0x80023374 | f0 = Stack[0x10] (f32) - 0x80023378 | r31[0x20] = f0 (f32) - 0x8002337c | f0 = Stack[0x14] (f32) - 0x80023380 | r31[0x24] = f0 (f32) - 0x80023384 | f0 = Stack[0x18] (f32) - 0x80023388 | r31[0x28] = f0 (f32) - 0x8002338c | f0 = Stack[0x1c] (f32) - 0x80023390 | r31[0x2c] = f0 (f32) - 0x80023394 | f0 = Stack[0x20] (f32) - 0x80023398 | r31[0x30] = f0 (f32) - 0x8002339c | r3 = r31 + 0x28 - 0x800233a0 | r4 = r31 + 0x28 - 0x800233a4 | call PSVECNormalize - 0x800233a8 | r31 = Stack[0x2c] (s32/u32) - 0x800233ac | r0 = Stack[0x34] (s32/u32) - 0x800233b0 | Link Register set to r0 - 0x800233b4 | r1 += 0x30 - 0x800233b8 | return -Hu3DGLightPosSet end - -global function Hu3DLLightPosSet: - 0x800233bc | Stack Size += 0x30 - 0x800233c0 | r0 set to Link Register - 0x800233c4 | Stack[0x34] = r0 (s32/u32) - 0x800233c8 | Stack[0x2c] = r31 (s32/u32) - 0x800233cc | Stack[0x28] = r30 (s32/u32) - 0x800233d0 | Stack[0x8] = r3 (s16/u16) - 0x800233d4 | Stack[0xa] = r4 (s16/u16) - 0x800233d8 | Stack[0xc] = f1 (f32) - 0x800233dc | Stack[0x10] = f2 (f32) - 0x800233e0 | Stack[0x14] = f3 (f32) - 0x800233e4 | Stack[0x18] = f4 (f32) - 0x800233e8 | Stack[0x1c] = f5 (f32) - 0x800233ec | Stack[0x20] = f6 (f32) - 0x800233f0 | r0 = Stack[0x8] (s16/u16) - 0x800233f4 | r4 = r0 * 0x124 - 0x800233f8 | (^u16) r3 = (^u16) Hu3DData - 0x800233fc | r0 = r3 + (vu16) Hu3DData - 0x80023400 | r30 = r0 + r4 - 0x80023404 | r0 = Stack[0xa] (s16/u16) - 0x80023408 | r3 = r0 << 1 (s32/u32) - 0x8002340c | r0 = r3 + 0x38 - 0x80023410 | r0 = r30[r0] (s16/u16) - 0x80023414 | r4 = r0 * 0x44 - 0x80023418 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x8002341c | r0 = r3 - Hu3DLocalLight@l - 0x80023420 | r31 = r0 + r4 - 0x80023424 | f0 = Stack[0xc] (f32) - 0x80023428 | r31[0x1c] = f0 (f32) - 0x8002342c | f0 = Stack[0x10] (f32) - 0x80023430 | r31[0x20] = f0 (f32) - 0x80023434 | f0 = Stack[0x14] (f32) - 0x80023438 | r31[0x24] = f0 (f32) - 0x8002343c | f0 = Stack[0x18] (f32) - 0x80023440 | r31[0x28] = f0 (f32) - 0x80023444 | f0 = Stack[0x1c] (f32) - 0x80023448 | r31[0x2c] = f0 (f32) - 0x8002344c | f0 = Stack[0x20] (f32) - 0x80023450 | r31[0x30] = f0 (f32) - 0x80023454 | r3 = r31 + 0x28 - 0x80023458 | r4 = r31 + 0x28 - 0x8002345c | call PSVECNormalize - 0x80023460 | r31 = Stack[0x2c] (s32/u32) - 0x80023464 | r30 = Stack[0x28] (s32/u32) - 0x80023468 | r0 = Stack[0x34] (s32/u32) - 0x8002346c | Link Register set to r0 - 0x80023470 | r1 += 0x30 - 0x80023474 | return -Hu3DLLightPosSet end - -global function Hu3DGLightPosAimSetV: - 0x80023478 | Stack Size += 0x20 - 0x8002347c | r0 set to Link Register - 0x80023480 | Stack[0x24] = r0 (s32/u32) - 0x80023484 | Stack[0x1c] = r31 (s32/u32) - 0x80023488 | Stack[0x18] = r30 (s32/u32) - 0x8002348c | Stack[0x8] = r3 (s16/u16) - 0x80023490 | r30 = r4 - 0x80023494 | Stack[0xc] = r5 (s32/u32) - 0x80023498 | r0 = Stack[0x8] (s16/u16) - 0x8002349c | r4 = r0 * 0x44 - 0x800234a0 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x800234a4 | r0 = r3 - Hu3DGlobalLight@l - 0x800234a8 | r31 = r0 + r4 - 0x800234ac | r3 = r30[0x0] (s32/u32) - 0x800234b0 | r0 = r30[0x4] (s32/u32) - 0x800234b4 | r31[0x1c] = r3 (s32/u32) - 0x800234b8 | r31[0x20] = r0 (s32/u32) - 0x800234bc | r0 = r30[0x8] (s32/u32) - 0x800234c0 | r31[0x24] = r0 (s32/u32) - 0x800234c4 | r3 = Stack[0xc] (s32/u32) - 0x800234c8 | r4 = r30 - 0x800234cc | r5 = r31 + 0x28 - 0x800234d0 | call PSVECSubtract - 0x800234d4 | r3 = r31 + 0x28 - 0x800234d8 | r4 = r31 + 0x28 - 0x800234dc | call PSVECNormalize - 0x800234e0 | r31 = Stack[0x1c] (s32/u32) - 0x800234e4 | r30 = Stack[0x18] (s32/u32) - 0x800234e8 | r0 = Stack[0x24] (s32/u32) - 0x800234ec | Link Register set to r0 - 0x800234f0 | r1 += 0x20 - 0x800234f4 | return -Hu3DGLightPosAimSetV end - -global function Hu3DLLightPosAimSetV: - 0x800234f8 | Stack Size += 0x20 - 0x800234fc | r0 set to Link Register - 0x80023500 | Stack[0x24] = r0 (s32/u32) - 0x80023504 | Stack[0x1c] = r31 (s32/u32) - 0x80023508 | Stack[0x18] = r30 (s32/u32) - 0x8002350c | Stack[0x14] = r29 (s32/u32) - 0x80023510 | Stack[0x8] = r3 (s16/u16) - 0x80023514 | Stack[0xa] = r4 (s16/u16) - 0x80023518 | r29 = r5 - 0x8002351c | Stack[0xc] = r6 (s32/u32) - 0x80023520 | r0 = Stack[0x8] (s16/u16) - 0x80023524 | r4 = r0 * 0x124 - 0x80023528 | (^u16) r3 = (^u16) Hu3DData - 0x8002352c | r0 = r3 + (vu16) Hu3DData - 0x80023530 | r30 = r0 + r4 - 0x80023534 | r0 = Stack[0xa] (s16/u16) - 0x80023538 | r3 = r0 << 1 (s32/u32) - 0x8002353c | r0 = r3 + 0x38 - 0x80023540 | r0 = r30[r0] (s16/u16) - 0x80023544 | r4 = r0 * 0x44 - 0x80023548 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x8002354c | r0 = r3 - Hu3DLocalLight@l - 0x80023550 | r31 = r0 + r4 - 0x80023554 | r3 = r29[0x0] (s32/u32) - 0x80023558 | r0 = r29[0x4] (s32/u32) - 0x8002355c | r31[0x1c] = r3 (s32/u32) - 0x80023560 | r31[0x20] = r0 (s32/u32) - 0x80023564 | r0 = r29[0x8] (s32/u32) - 0x80023568 | r31[0x24] = r0 (s32/u32) - 0x8002356c | r3 = Stack[0xc] (s32/u32) - 0x80023570 | r4 = r29 - 0x80023574 | r5 = r31 + 0x28 - 0x80023578 | call PSVECSubtract - 0x8002357c | r3 = r31 + 0x28 - 0x80023580 | r4 = r31 + 0x28 - 0x80023584 | call PSVECNormalize - 0x80023588 | r31 = Stack[0x1c] (s32/u32) - 0x8002358c | r30 = Stack[0x18] (s32/u32) - 0x80023590 | r29 = Stack[0x14] (s32/u32) - 0x80023594 | r0 = Stack[0x24] (s32/u32) - 0x80023598 | Link Register set to r0 - 0x8002359c | r1 += 0x20 - 0x800235a0 | return -Hu3DLLightPosAimSetV end - -global function Hu3DGLightPosAimSet: - 0x800235a4 | Stack Size += 0x50 - 0x800235a8 | r0 set to Link Register - 0x800235ac | Stack[0x54] = r0 (s32/u32) - 0x800235b0 | Stack[0x4c] = r31 (s32/u32) - 0x800235b4 | Stack[0x48] = r30 (s32/u32) - 0x800235b8 | Stack[0x8] = r3 (s16/u16) - 0x800235bc | Stack[0xc] = f1 (f32) - 0x800235c0 | Stack[0x10] = f2 (f32) - 0x800235c4 | Stack[0x14] = f3 (f32) - 0x800235c8 | Stack[0x18] = f4 (f32) - 0x800235cc | Stack[0x1c] = f5 (f32) - 0x800235d0 | Stack[0x20] = f6 (f32) - 0x800235d4 | f0 = Stack[0xc] (f32) - 0x800235d8 | Stack[0x30] = f0 (f32) - 0x800235dc | f0 = Stack[0x10] (f32) - 0x800235e0 | Stack[0x34] = f0 (f32) - 0x800235e4 | f0 = Stack[0x14] (f32) - 0x800235e8 | Stack[0x38] = f0 (f32) - 0x800235ec | f0 = Stack[0x18] (f32) - 0x800235f0 | Stack[0x24] = f0 (f32) - 0x800235f4 | f0 = Stack[0x1c] (f32) - 0x800235f8 | Stack[0x28] = f0 (f32) - 0x800235fc | f0 = Stack[0x20] (f32) - 0x80023600 | Stack[0x2c] = f0 (f32) - 0x80023604 | r0 = Stack[0x8] (s16/u16) - 0x80023608 | r4 = r0 * 0x44 - 0x8002360c | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023610 | r0 = r3 - Hu3DGlobalLight@l - 0x80023614 | r30 = r0 + r4 - 0x80023618 | r31 = r30 - 0x8002361c | r3 = Stack[0x30] (s32/u32) - 0x80023620 | r0 = Stack[0x34] (s32/u32) - 0x80023624 | r31[0x1c] = r3 (s32/u32) - 0x80023628 | r31[0x20] = r0 (s32/u32) - 0x8002362c | r0 = Stack[0x38] (s32/u32) - 0x80023630 | r31[0x24] = r0 (s32/u32) - 0x80023634 | r3 = r1 + 0x24 - 0x80023638 | r4 = r1 + 0x30 - 0x8002363c | r5 = r31 + 0x28 - 0x80023640 | call PSVECSubtract - 0x80023644 | r3 = r31 + 0x28 - 0x80023648 | r4 = r31 + 0x28 - 0x8002364c | call PSVECNormalize - 0x80023650 | r31 = Stack[0x4c] (s32/u32) - 0x80023654 | r30 = Stack[0x48] (s32/u32) - 0x80023658 | r0 = Stack[0x54] (s32/u32) - 0x8002365c | Link Register set to r0 - 0x80023660 | r1 += 0x50 - 0x80023664 | return -Hu3DGLightPosAimSet end - -global function Hu3DLLightPosAimSet: - 0x80023668 | Stack Size += 0x50 - 0x8002366c | r0 set to Link Register - 0x80023670 | Stack[0x54] = r0 (s32/u32) - 0x80023674 | Stack[0x4c] = r31 (s32/u32) - 0x80023678 | Stack[0x48] = r30 (s32/u32) - 0x8002367c | Stack[0x44] = r29 (s32/u32) - 0x80023680 | Stack[0x8] = r3 (s16/u16) - 0x80023684 | Stack[0xa] = r4 (s16/u16) - 0x80023688 | Stack[0xc] = f1 (f32) - 0x8002368c | Stack[0x10] = f2 (f32) - 0x80023690 | Stack[0x14] = f3 (f32) - 0x80023694 | Stack[0x18] = f4 (f32) - 0x80023698 | Stack[0x1c] = f5 (f32) - 0x8002369c | Stack[0x20] = f6 (f32) - 0x800236a0 | f0 = Stack[0xc] (f32) - 0x800236a4 | Stack[0x30] = f0 (f32) - 0x800236a8 | f0 = Stack[0x10] (f32) - 0x800236ac | Stack[0x34] = f0 (f32) - 0x800236b0 | f0 = Stack[0x14] (f32) - 0x800236b4 | Stack[0x38] = f0 (f32) - 0x800236b8 | f0 = Stack[0x18] (f32) - 0x800236bc | Stack[0x24] = f0 (f32) - 0x800236c0 | f0 = Stack[0x1c] (f32) - 0x800236c4 | Stack[0x28] = f0 (f32) - 0x800236c8 | f0 = Stack[0x20] (f32) - 0x800236cc | Stack[0x2c] = f0 (f32) - 0x800236d0 | r0 = Stack[0x8] (s16/u16) - 0x800236d4 | r4 = r0 * 0x124 - 0x800236d8 | (^u16) r3 = (^u16) Hu3DData - 0x800236dc | r0 = r3 + (vu16) Hu3DData - 0x800236e0 | r30 = r0 + r4 - 0x800236e4 | r0 = Stack[0xa] (s16/u16) - 0x800236e8 | r3 = r0 << 1 (s32/u32) - 0x800236ec | r0 = r3 + 0x38 - 0x800236f0 | r0 = r30[r0] (s16/u16) - 0x800236f4 | r4 = r0 * 0x44 - 0x800236f8 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x800236fc | r0 = r3 - Hu3DLocalLight@l - 0x80023700 | r29 = r0 + r4 - 0x80023704 | r31 = r29 - 0x80023708 | r3 = Stack[0x30] (s32/u32) - 0x8002370c | r0 = Stack[0x34] (s32/u32) - 0x80023710 | r31[0x1c] = r3 (s32/u32) - 0x80023714 | r31[0x20] = r0 (s32/u32) - 0x80023718 | r0 = Stack[0x38] (s32/u32) - 0x8002371c | r31[0x24] = r0 (s32/u32) - 0x80023720 | r3 = r1 + 0x24 - 0x80023724 | r4 = r1 + 0x30 - 0x80023728 | r5 = r31 + 0x28 - 0x8002372c | call PSVECSubtract - 0x80023730 | r3 = r31 + 0x28 - 0x80023734 | r4 = r31 + 0x28 - 0x80023738 | call PSVECNormalize - 0x8002373c | r31 = Stack[0x4c] (s32/u32) - 0x80023740 | r30 = Stack[0x48] (s32/u32) - 0x80023744 | r29 = Stack[0x44] (s32/u32) - 0x80023748 | r0 = Stack[0x54] (s32/u32) - 0x8002374c | Link Register set to r0 - 0x80023750 | r1 += 0x50 - 0x80023754 | return -Hu3DLLightPosAimSet end - -global function Hu3DGLightStaticSet: - 0x80023758 | Stack Size += 0x10 - 0x8002375c | Stack[0xc] = r31 (s32/u32) - 0x80023760 | s32 r0 = s16 r3 - 0x80023764 | r6 = r0 * 0x44 - 0x80023768 | (^u16) r5 = (^u16) Hu3DGlobalLight - 0x8002376c | r0 = r5 - Hu3DGlobalLight@l - 0x80023770 | r31 = r0 + r6 - 0x80023774 | (cmp) - 0x80023778 | if r4 == 0x0 : goto 0x80023790 (s32/u32) - 0x8002377c | r0 = r31[0x0] (s16/u16) - 0x80023780 | r0 |= 0x8000 - 0x80023784 | s32 r0 = s16 r0 - 0x80023788 | r31[0x0] = r0 (s16/u16) - 0x8002378c | goto 0x800237a0 - - from 0x80023778: - 0x80023790 | r0 = r31[0x0] (s16/u16) - 0x80023794 | r0 = rotate(r0, 0) & (bits 17 to 15) - 0x80023798 | s32 r0 = s16 r0 - 0x8002379c | r31[0x0] = r0 (s16/u16) - - from 0x8002378c: - 0x800237a0 | r31 = Stack[0xc] (s32/u32) - 0x800237a4 | r1 += 0x10 - 0x800237a8 | return -Hu3DGLightStaticSet end - -global function Hu3DLLightStaticSet: - 0x800237ac | Stack Size += 0x10 - 0x800237b0 | Stack[0xc] = r31 (s32/u32) - 0x800237b4 | Stack[0x8] = r30 (s32/u32) - 0x800237b8 | s32 r0 = s16 r3 - 0x800237bc | r7 = r0 * 0x124 - 0x800237c0 | (^u16) r6 = (^u16) Hu3DData - 0x800237c4 | r0 = r6 + (vu16) Hu3DData - 0x800237c8 | r30 = r0 + r7 - 0x800237cc | s32 r0 = s16 r4 - 0x800237d0 | r6 = r0 << 1 (s32/u32) - 0x800237d4 | r0 = r6 + 0x38 - 0x800237d8 | r0 = r30[r0] (s16/u16) - 0x800237dc | r7 = r0 * 0x44 - 0x800237e0 | (^u16) r6 = (^u16) Hu3DLocalLight - 0x800237e4 | r0 = r6 - Hu3DLocalLight@l - 0x800237e8 | r31 = r0 + r7 - 0x800237ec | (cmp) - 0x800237f0 | if r5 == 0x0 : goto 0x80023808 (s32/u32) - 0x800237f4 | r0 = r31[0x0] (s16/u16) - 0x800237f8 | r0 |= 0x8000 - 0x800237fc | s32 r0 = s16 r0 - 0x80023800 | r31[0x0] = r0 (s16/u16) - 0x80023804 | goto 0x80023818 - - from 0x800237f0: - 0x80023808 | r0 = r31[0x0] (s16/u16) - 0x8002380c | r0 = rotate(r0, 0) & (bits 17 to 15) - 0x80023810 | s32 r0 = s16 r0 - 0x80023814 | r31[0x0] = r0 (s16/u16) - - from 0x80023804: - 0x80023818 | r31 = Stack[0xc] (s32/u32) - 0x8002381c | r30 = Stack[0x8] (s32/u32) - 0x80023820 | r1 += 0x10 - 0x80023824 | return -Hu3DLLightStaticSet end - -global function Hu3DModelLightInfoSet: - 0x80023828 | Stack Size += 0x170 - 0x8002382c | r0 set to Link Register - 0x80023830 | Stack[0x174] = r0 (s32/u32) - 0x80023834 | Stack[0x160] = f31 (f64) - 0x80023838 | Stack[0x168] = rotate(f31, qr0) (128-bit) - 0x8002383c | Stack[0x150] = f30 (f64) - 0x80023840 | Stack[0x158] = rotate(f30, qr0) (128-bit) - 0x80023844 | Stack[0x140] = f29 (f64) - 0x80023848 | Stack[0x148] = rotate(f29, qr0) (128-bit) - 0x8002384c | Stack[0x130] = f28 (f64) - 0x80023850 | Stack[0x138] = rotate(f28, qr0) (128-bit) - 0x80023854 | Stack[0x120] = f27 (f64) - 0x80023858 | Stack[0x128] = rotate(f27, qr0) (128-bit) - 0x8002385c | Stack[0x110] = f26 (f64) - 0x80023860 | Stack[0x118] = rotate(f26, qr0) (128-bit) - 0x80023864 | Stack[0x100] = f25 (f64) - 0x80023868 | Stack[0x108] = rotate(f25, qr0) (128-bit) - 0x8002386c | Stack[0xf0] = f24 (f64) - 0x80023870 | Stack[0xf8] = rotate(f24, qr0) (128-bit) - 0x80023874 | Stack[0xe0] = f23 (f64) - 0x80023878 | Stack[0xe8] = rotate(f23, qr0) (128-bit) - 0x8002387c | Stack[0xd0] = f22 (f64) - 0x80023880 | Stack[0xd8] = rotate(f22, qr0) (128-bit) - 0x80023884 | Stack[0xc0] = f21 (f64) - 0x80023888 | Stack[0xc8] = rotate(f21, qr0) (128-bit) - 0x8002388c | Stack[0xb0] = f20 (f64) - 0x80023890 | Stack[0xb8] = rotate(f20, qr0) (128-bit) - 0x80023894 | Stack[0xa0] = f19 (f64) - 0x80023898 | Stack[0xa8] = rotate(f19, qr0) (128-bit) - 0x8002389c | r11 = r1 + 0xa0 - 0x800238a0 | call _savegpr_17 - 0x800238a4 | Stack[0x8] = r3 (s16/u16) - 0x800238a8 | Stack[0xa] = r4 (s16/u16) - 0x800238ac | r0 = Stack[0x8] (s16/u16) - 0x800238b0 | r4 = r0 * 0x124 - 0x800238b4 | (^u16) r3 = (^u16) Hu3DData - 0x800238b8 | r0 = r3 + (vu16) Hu3DData - 0x800238bc | r28 = r0 + r4 - 0x800238c0 | r21 = r28[0xc4] (s32/u32) - 0x800238c4 | r0 = r28[0x26] (s16/u16) - 0x800238c8 | (cmp) - 0x800238cc | if r0 == 0x0 : goto 0x800238d8 (s32/u32) - 0x800238d0 | r3 = r28[0x26] (s16/u16) - 0x800238d4 | goto 0x80023c78 - - from 0x800238cc: - 0x800238d8 | r18 = r21[0x4c] (s32/u32) - 0x800238dc | r25 = 0x0 - 0x800238e0 | r17 = r25 - 0x800238e4 | goto 0x80023c5c - - from later address: - 0x800238e8 | r31 = r18 - 0x800238ec | r0 = r31[0x4] (s32/u32) - 0x800238f0 | (cmp) - 0x800238f4 | if r0 != 0x8 : goto 0x80023c54 (s32/u32) - 0x800238f8 | f1 = r31[0x1c] (f32) - 0x800238fc | f0 = r31[0x10] (f32) - 0x80023900 | f0 = f1 - f0 - 0x80023904 | Stack[0x48] = f0 (f32) - 0x80023908 | f1 = r31[0x20] (f32) - 0x8002390c | f0 = r31[0x14] (f32) - 0x80023910 | f0 = f1 - f0 - 0x80023914 | Stack[0x4c] = f0 (f32) - 0x80023918 | f1 = r31[0x24] (f32) - 0x8002391c | f0 = r31[0x18] (f32) - 0x80023920 | f0 = f1 - f0 - 0x80023924 | Stack[0x50] = f0 (f32) - 0x80023928 | r0 = r31[0x2b] (s8/u8) - 0x8002392c | Stack[0xc] = r0 (s8/u8) - 0x80023930 | r0 = r31[0x2a] (s8/u8) - 0x80023934 | Stack[0xd] = r0 (s8/u8) - 0x80023938 | r0 = r31[0x29] (s8/u8) - 0x8002393c | Stack[0xe] = r0 (s8/u8) - 0x80023940 | f27 = Stack[0x50] (f32) - 0x80023944 | f28 = Stack[0x4c] (f32) - 0x80023948 | f29 = r31[0x18] (f32) - 0x8002394c | f30 = r31[0x14] (f32) - 0x80023950 | f31 = r31[0x10] (f32) - 0x80023954 | Stack[0x30] = f31 (f32) - 0x80023958 | Stack[0x34] = f30 (f32) - 0x8002395c | Stack[0x38] = f29 (f32) - 0x80023960 | f0 = Stack[0x48] (f32) - 0x80023964 | Stack[0x3c] = f0 (f32) - 0x80023968 | Stack[0x40] = f28 (f32) - 0x8002396c | Stack[0x44] = f27 (f32) - 0x80023970 | r0 = Stack[0xe] (s8/u8) - 0x80023974 | Stack[0x28] = r0 (s8/u8) - 0x80023978 | r0 = Stack[0xd] (s8/u8) - 0x8002397c | Stack[0x29] = r0 (s8/u8) - 0x80023980 | r0 = Stack[0xc] (s8/u8) - 0x80023984 | Stack[0x2a] = r0 (s8/u8) - 0x80023988 | r0 = 0xff - 0x8002398c | Stack[0x2b] = r0 (s8/u8) - 0x80023990 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023994 | r23 = r3 - Hu3DGlobalLight@l - 0x80023998 | r22 = 0x0 - 0x8002399c | goto 0x800239b4 - - from later address: - 0x800239a0 | r0 = r23[0x0] (s16/u16) - 0x800239a4 | (cmp) - 0x800239a8 | if r0 == -0x1 : goto 0x800239c0 (s32/u32) - 0x800239ac | r22 += 0x1 - 0x800239b0 | r23 += 0x44 - - from 0x8002399c: - 0x800239b4 | s32 r0 = s16 r22 - 0x800239b8 | (cmp) - 0x800239bc | if r0 < 0x8 : goto 0x800239a0 (s32/u32) - - from 0x800239a8: - 0x800239c0 | s32 r0 = s16 r22 - 0x800239c4 | (cmp) - 0x800239c8 | if r0 != 0x8 : goto 0x800239d8 (s32/u32) - 0x800239cc | r0 = -0x1 - 0x800239d0 | Stack[0x10] = r0 (s16/u16) - 0x800239d4 | goto 0x80023a64 - - from 0x800239c8: - 0x800239d8 | r30 = r23 - 0x800239dc | r0 = 0x0 - 0x800239e0 | r30[0x0] = r0 (s16/u16) - 0x800239e4 | r3 = Stack[0x30] (s32/u32) - 0x800239e8 | r0 = Stack[0x34] (s32/u32) - 0x800239ec | r30[0x1c] = r3 (s32/u32) - 0x800239f0 | r30[0x20] = r0 (s32/u32) - 0x800239f4 | r0 = Stack[0x38] (s32/u32) - 0x800239f8 | r30[0x24] = r0 (s32/u32) - 0x800239fc | r3 = Stack[0x3c] (s32/u32) - 0x80023a00 | r0 = Stack[0x40] (s32/u32) - 0x80023a04 | r30[0x28] = r3 (s32/u32) - 0x80023a08 | r30[0x2c] = r0 (s32/u32) - 0x80023a0c | r0 = Stack[0x44] (s32/u32) - 0x80023a10 | r30[0x30] = r0 (s32/u32) - 0x80023a14 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023a18 | r30[0x3c] = f0 (f32) - 0x80023a1c | r30[0x38] = f0 (f32) - 0x80023a20 | r30[0x34] = f0 (f32) - 0x80023a24 | f0 = r2[lbl_801D4AE4@sda21] (f32) - 0x80023a28 | r30[0x4] = f0 (f32) - 0x80023a2c | r0 = 0x2 - 0x80023a30 | r30[0x2] = r0 (s16/u16) - 0x80023a34 | r3 = r30 + 0x28 - 0x80023a38 | r4 = r30 + 0x28 - 0x80023a3c | call PSVECNormalize - 0x80023a40 | r0 = Stack[0x28] (s8/u8) - 0x80023a44 | r30[0x40] = r0 (s8/u8) - 0x80023a48 | r0 = Stack[0x29] (s8/u8) - 0x80023a4c | r30[0x41] = r0 (s8/u8) - 0x80023a50 | r0 = Stack[0x2a] (s8/u8) - 0x80023a54 | r30[0x42] = r0 (s8/u8) - 0x80023a58 | r0 = Stack[0x2b] (s8/u8) - 0x80023a5c | r30[0x43] = r0 (s8/u8) - 0x80023a60 | Stack[0x10] = r22 (s16/u16) - - from 0x800239d4: - 0x80023a64 | r0 = Stack[0x10] (s16/u16) - 0x80023a68 | Stack[0x12] = r0 (s16/u16) - 0x80023a6c | r26 = Stack[0x12] (s16/u16) - 0x80023a70 | r4 = remove(r26, 16) - 0x80023a74 | s32 r0 = s16 r25 - 0x80023a78 | r3 = r0 << 1 (s32/u32) - 0x80023a7c | r0 = r3 + 0x28 - 0x80023a80 | r28[r0] = r4 (s16/u16) - 0x80023a84 | s32 r0 = s16 r26 - 0x80023a88 | r4 = r0 * 0x44 - 0x80023a8c | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023a90 | r0 = r3 - Hu3DGlobalLight@l - 0x80023a94 | r0 += r4 - 0x80023a98 | Stack[0x2c] = r0 (s32/u32) - 0x80023a9c | s32 r0 = s16 r26 - 0x80023aa0 | r4 = r0 * 0x44 - 0x80023aa4 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023aa8 | r0 = r3 - Hu3DGlobalLight@l - 0x80023aac | r0 += r4 - 0x80023ab0 | Stack[0x24] = r0 (s32/u32) - 0x80023ab4 | r20 = Stack[0x24] (s32/u32) - 0x80023ab8 | r0 = Stack[0xa] (s16/u16) - 0x80023abc | (cmp) - 0x80023ac0 | if r0 == 0x0 : goto 0x80023ad8 (s32/u32) - 0x80023ac4 | r0 = r20[0x0] (s16/u16) - 0x80023ac8 | r0 |= 0x8000 - 0x80023acc | s32 r0 = s16 r0 - 0x80023ad0 | r20[0x0] = r0 (s16/u16) - 0x80023ad4 | goto 0x80023ae8 - - from 0x80023ac0: - 0x80023ad8 | r0 = r20[0x0] (s16/u16) - 0x80023adc | r0 = rotate(r0, 0) & (bits 17 to 15) - 0x80023ae0 | s32 r0 = s16 r0 - 0x80023ae4 | r20[0x0] = r0 (s16/u16) - - from 0x80023ad4: - 0x80023ae8 | r0 = r31[0x28] (s8/u8) - 0x80023aec | (cmp) - 0x80023af0 | if r0 == 0x1 : goto 0x80023b50 (s32/u32) - 0x80023af4 | if r0 >= 0x1 : goto 0x80023b04 (s32/u32) - 0x80023af8 | (cmp) - 0x80023afc | if r0 >= 0x0 : goto 0x80023b10 (s32/u32) - 0x80023b00 | goto 0x80023c44 - - from 0x80023af4: - 0x80023b04 | (cmp) - 0x80023b08 | if r0 >= 0x3 : goto 0x80023c44 (s32/u32) - 0x80023b0c | goto 0x80023c08 - - from 0x80023afc: - 0x80023b10 | f26 = r31[0x38] (f32) - 0x80023b14 | s32 r0 = s16 r26 - 0x80023b18 | r4 = r0 * 0x44 - 0x80023b1c | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023b20 | r0 = r3 - Hu3DGlobalLight@l - 0x80023b24 | r0 += r4 - 0x80023b28 | Stack[0x20] = r0 (s32/u32) - 0x80023b2c | r24 = Stack[0x20] (s32/u32) - 0x80023b30 | r0 = r24[0x0] (s16/u16) - 0x80023b34 | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80023b38 | s32 r0 = s16 r0 - 0x80023b3c | r24[0x0] = r0 (s16/u16) - 0x80023b40 | r24[0x4] = f26 (f32) - 0x80023b44 | r0 = 0x2 - 0x80023b48 | r24[0x2] = r0 (s16/u16) - 0x80023b4c | goto 0x80023c44 - - from 0x80023af0: - 0x80023b50 | f1 = r31[0x34] (f32) - 0x80023b54 | f0 = r31[0x30] (f32) - 0x80023b58 | f25 = f1 - f0 - 0x80023b5c | s32 r0 = s16 r26 - 0x80023b60 | r4 = r0 * 0x44 - 0x80023b64 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023b68 | r0 = r3 - Hu3DGlobalLight@l - 0x80023b6c | r0 += r4 - 0x80023b70 | Stack[0x1c] = r0 (s32/u32) - 0x80023b74 | r27 = Stack[0x1c] (s32/u32) - 0x80023b78 | r0 = r27[0x0] (s16/u16) - 0x80023b7c | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80023b80 | s32 r0 = s16 r0 - 0x80023b84 | r27[0x0] = r0 (s16/u16) - 0x80023b88 | r0 = r27[0x0] (s16/u16) - 0x80023b8c | r0 |= 0x2 - 0x80023b90 | s32 r0 = s16 r0 - 0x80023b94 | r27[0x0] = r0 (s16/u16) - 0x80023b98 | r27[0x4] = f25 (f32) - 0x80023b9c | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023ba0 | r27[0x8] = f0 (f32) - 0x80023ba4 | r0 = 0x2 - 0x80023ba8 | r27[0x2] = r0 (s16/u16) - 0x80023bac | f19 = r31[0x24] (f32) - 0x80023bb0 | f20 = r31[0x20] (f32) - 0x80023bb4 | f21 = r31[0x1c] (f32) - 0x80023bb8 | f22 = r31[0x18] (f32) - 0x80023bbc | f23 = r31[0x14] (f32) - 0x80023bc0 | f24 = r31[0x10] (f32) - 0x80023bc4 | s32 r0 = s16 r26 - 0x80023bc8 | r4 = r0 * 0x44 - 0x80023bcc | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023bd0 | r0 = r3 - Hu3DGlobalLight@l - 0x80023bd4 | r0 += r4 - 0x80023bd8 | Stack[0x18] = r0 (s32/u32) - 0x80023bdc | r29 = Stack[0x18] (s32/u32) - 0x80023be0 | r29[0x1c] = f24 (f32) - 0x80023be4 | r29[0x20] = f23 (f32) - 0x80023be8 | r29[0x24] = f22 (f32) - 0x80023bec | r29[0x28] = f21 (f32) - 0x80023bf0 | r29[0x2c] = f20 (f32) - 0x80023bf4 | r29[0x30] = f19 (f32) - 0x80023bf8 | r3 = r29 + 0x28 - 0x80023bfc | r4 = r29 + 0x28 - 0x80023c00 | call PSVECNormalize - 0x80023c04 | goto 0x80023c44 - - from 0x80023b0c: - 0x80023c08 | s32 r0 = s16 r26 - 0x80023c0c | r4 = r0 * 0x44 - 0x80023c10 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023c14 | r0 = r3 - Hu3DGlobalLight@l - 0x80023c18 | r0 += r4 - 0x80023c1c | Stack[0x14] = r0 (s32/u32) - 0x80023c20 | r19 = Stack[0x14] (s32/u32) - 0x80023c24 | r0 = Stack[0x0] (s16/u16) - 0x80023c28 | r0 = rotate(r0, 0) & (bits 16 to 23) - 0x80023c2c | s32 r0 = s16 r0 - 0x80023c30 | Stack[0x0] = r0 (s16/u16) - 0x80023c34 | r0 = Stack[0x0] (s16/u16) - 0x80023c38 | r0 |= 0x1 - 0x80023c3c | s32 r0 = s16 r0 - 0x80023c40 | Stack[0x0] = r0 (s16/u16) - - from 0x80023c04: - 0x80023c44 | r25 += 0x1 - 0x80023c48 | s32 r0 = s16 r25 - 0x80023c4c | (cmp) - 0x80023c50 | if r0 >= 0x8 : goto 0x80023c6c (s32/u32) - - from 0x800238f4: - 0x80023c54 | r17 += 0x1 - 0x80023c58 | r18 += 0x144 - - from 0x800238e4: - 0x80023c5c | s32 r3 = s16 r17 - 0x80023c60 | r0 = r21[0x6c] (s16/u16) - 0x80023c64 | (cmp) - 0x80023c68 | if r3 < r0 : goto 0x800238e8 (s32/u32) - - from 0x80023c50: - 0x80023c6c | r0 = remove(r25, 16) - 0x80023c70 | r28[0x26] = r0 (s16/u16) - 0x80023c74 | s32 r3 = s16 r25 - - from 0x800238d4: - 0x80023c78 | + rotate(f31, qr0) = Stack[0x168] (128-bit) - 0x80023c7c | f31 = Stack[0x160] (f64) - 0x80023c80 | + rotate(f30, qr0) = Stack[0x158] (128-bit) - 0x80023c84 | f30 = Stack[0x150] (f64) - 0x80023c88 | + rotate(f29, qr0) = Stack[0x148] (128-bit) - 0x80023c8c | f29 = Stack[0x140] (f64) - 0x80023c90 | + rotate(f28, qr0) = Stack[0x138] (128-bit) - 0x80023c94 | f28 = Stack[0x130] (f64) - 0x80023c98 | + rotate(f27, qr0) = Stack[0x128] (128-bit) - 0x80023c9c | f27 = Stack[0x120] (f64) - 0x80023ca0 | + rotate(f26, qr0) = Stack[0x118] (128-bit) - 0x80023ca4 | f26 = Stack[0x110] (f64) - 0x80023ca8 | + rotate(f25, qr0) = Stack[0x108] (128-bit) - 0x80023cac | f25 = Stack[0x100] (f64) - 0x80023cb0 | + rotate(f24, qr0) = Stack[0xf8] (128-bit) - 0x80023cb4 | f24 = Stack[0xf0] (f64) - 0x80023cb8 | + rotate(f23, qr0) = Stack[0xe8] (128-bit) - 0x80023cbc | f23 = Stack[0xe0] (f64) - 0x80023cc0 | + rotate(f22, qr0) = Stack[0xd8] (128-bit) - 0x80023cc4 | f22 = Stack[0xd0] (f64) - 0x80023cc8 | + rotate(f21, qr0) = Stack[0xc8] (128-bit) - 0x80023ccc | f21 = Stack[0xc0] (f64) - 0x80023cd0 | + rotate(f20, qr0) = Stack[0xb8] (128-bit) - 0x80023cd4 | f20 = Stack[0xb0] (f64) - 0x80023cd8 | + rotate(f19, qr0) = Stack[0xa8] (128-bit) - 0x80023cdc | f19 = Stack[0xa0] (f64) - 0x80023ce0 | r11 = r1 + 0xa0 - 0x80023ce4 | call _restgpr_17 - 0x80023ce8 | r0 = Stack[0x174] (s32/u32) - 0x80023cec | Link Register set to r0 - 0x80023cf0 | r1 += 0x170 - 0x80023cf4 | return -Hu3DModelLightInfoSet end - -global function Hu3DLightSet: - 0x80023cf8 | Stack Size += 0x30 - 0x80023cfc | r0 set to Link Register - 0x80023d00 | Stack[0x34] = r0 (s32/u32) - 0x80023d04 | Stack[0x28] = f31 (f64) - 0x80023d08 | r11 = r1 + 0x28 - 0x80023d0c | call _savegpr_25 - 0x80023d10 | r27 = r3 - 0x80023d14 | r25 = r4 - 0x80023d18 | r26 = r5 - 0x80023d1c | f31 = f1 - 0x80023d20 | r28 = 0x0 - 0x80023d24 | r30 = 0x1 - 0x80023d28 | (^u16) r3 = (^u16) Hu3DGlobalLight - 0x80023d2c | r29 = r3 - Hu3DGlobalLight@l - 0x80023d30 | r31 = 0x0 - 0x80023d34 | goto 0x80023d74 - - from later address: - 0x80023d38 | r0 = r29[0x0] (s16/u16) - 0x80023d3c | (cmp) - 0x80023d40 | if r0 == -0x1 : goto 0x80023d6c (s32/u32) - 0x80023d44 | r3 = r29 - 0x80023d48 | r4 = r30 - 0x80023d4c | r5 = r26 - 0x80023d50 | r6 = r25 - 0x80023d54 | f1 = f31 - 0x80023d58 | call lightSet - 0x80023d5c | r28 |= r30 - 0x80023d60 | s32 r0 = s16 r30 - 0x80023d64 | r0 = r0 << 1 (s32/u32) - 0x80023d68 | s32 r30 = s16 r0 - - from 0x80023d40: - 0x80023d6c | r31 += 0x1 - 0x80023d70 | r29 += 0x44 - - from 0x80023d34: - 0x80023d74 | s32 r0 = s16 r31 - 0x80023d78 | (cmp) - 0x80023d7c | if r0 < 0x8 : goto 0x80023d38 (s32/u32) - 0x80023d80 | r0 = r27[0x50] (s32/u32) - 0x80023d84 | r0 = rotate(r0, 0) & (bits 19 to 19) - 0x80023d88 | (cmp) - 0x80023d8c | if r0 == 0x0 : goto 0x80023e08 (s32/u32) - 0x80023d90 | r31 = 0x0 - 0x80023d94 | goto 0x80023dfc - - from later address: - 0x80023d98 | s32 r0 = s16 r31 - 0x80023d9c | r3 = r0 << 1 (s32/u32) - 0x80023da0 | r0 = r3 + 0x38 - 0x80023da4 | r0 = r27[r0] (s16/u16) - 0x80023da8 | (cmp) - 0x80023dac | if r0 == -0x1 : goto 0x80023df8 (s32/u32) - 0x80023db0 | s32 r0 = s16 r31 - 0x80023db4 | r3 = r0 << 1 (s32/u32) - 0x80023db8 | r0 = r3 + 0x38 - 0x80023dbc | r0 = r27[r0] (s16/u16) - 0x80023dc0 | r4 = r0 * 0x44 - 0x80023dc4 | (^u16) r3 = (^u16) Hu3DLocalLight - 0x80023dc8 | r0 = r3 - Hu3DLocalLight@l - 0x80023dcc | r29 = r0 + r4 - 0x80023dd0 | r3 = r29 - 0x80023dd4 | r4 = r30 - 0x80023dd8 | r5 = r26 - 0x80023ddc | r6 = r25 - 0x80023de0 | f1 = f31 - 0x80023de4 | call lightSet - 0x80023de8 | r28 |= r30 - 0x80023dec | s32 r0 = s16 r30 - 0x80023df0 | r0 = r0 << 1 (s32/u32) - 0x80023df4 | s32 r30 = s16 r0 - - from 0x80023dac: - 0x80023df8 | r31 += 0x1 - - from 0x80023d94: - 0x80023dfc | s32 r0 = s16 r31 - 0x80023e00 | (cmp) - 0x80023e04 | if r0 < 0x8 : goto 0x80023d98 (s32/u32) - - from 0x80023d8c: - 0x80023e08 | r3 = r28 - 0x80023e0c | f31 = Stack[0x28] (f64) - 0x80023e10 | r11 = r1 + 0x28 - 0x80023e14 | call _restgpr_25 - 0x80023e18 | r0 = Stack[0x34] (s32/u32) - 0x80023e1c | Link Register set to r0 - 0x80023e20 | r1 += 0x30 - 0x80023e24 | return -Hu3DLightSet end - -local function lightSet: - 0x80023e28 | Stack Size += 0x90 - 0x80023e2c | r0 set to Link Register - 0x80023e30 | Stack[0x94] = r0 (s32/u32) - 0x80023e34 | Stack[0x80] = f31 (f64) - 0x80023e38 | Stack[0x88] = rotate(f31, qr0) (128-bit) - 0x80023e3c | Stack[0x7c] = r31 (s32/u32) - 0x80023e40 | Stack[0x78] = r30 (s32/u32) - 0x80023e44 | r31 = r3 - 0x80023e48 | Stack[0x8] = r4 (s16/u16) - 0x80023e4c | Stack[0xc] = r5 (s32/u32) - 0x80023e50 | Stack[0x10] = r6 (s32/u32) - 0x80023e54 | f31 = f1 - 0x80023e58 | r0 = r31[0x0] (s16/u16) - 0x80023e5c | r0 = remove(r0, 24) - 0x80023e60 | (cmp) - 0x80023e64 | if r0 == 0x1 : goto 0x80023eb8 (s32/u32) - 0x80023e68 | if r0 >= 0x1 : goto 0x80023e78 (s32/u32) - 0x80023e6c | (cmp) - 0x80023e70 | if r0 >= 0x0 : goto 0x80023e84 (s32/u32) - 0x80023e74 | goto 0x80023f44 - - from 0x80023e68: - 0x80023e78 | (cmp) - 0x80023e7c | if r0 >= 0x3 : goto 0x80023f44 (s32/u32) - 0x80023e80 | goto 0x80023f10 - - from 0x80023e70: - 0x80023e84 | r3 = r1 + 0x30 - 0x80023e88 | f1 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023e8c | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023e90 | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023e94 | f4 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023e98 | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023e9c | f6 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ea0 | call GXInitLightAttn - 0x80023ea4 | r3 = r1 + 0x30 - 0x80023ea8 | f1 = r31[0x4] (f32) - 0x80023eac | r4 = r31[0x2] (s16/u16) - 0x80023eb0 | call GXInitLightSpot - 0x80023eb4 | goto 0x80023f44 - - from 0x80023e64: - 0x80023eb8 | r3 = r1 + 0x30 - 0x80023ebc | f1 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023ec0 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ec4 | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ec8 | f4 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023ecc | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ed0 | f6 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ed4 | call GXInitLightAttn - 0x80023ed8 | r3 = r1 + 0x30 - 0x80023edc | f1 = r2[lbl_801D4AE8@sda21] (f32) - 0x80023ee0 | r4 = 0x2 - 0x80023ee4 | call GXInitLightSpot - 0x80023ee8 | r3 = r1 + 0x30 - 0x80023eec | f1 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023ef0 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ef4 | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ef8 | call GXInitLightAttnK - 0x80023efc | r3 = r31 + 0x28 - 0x80023f00 | r4 = r31 + 0x1c - 0x80023f04 | f1 = r2[lbl_801D4AEC@sda21] (f32) - 0x80023f08 | call PSVECScale - 0x80023f0c | goto 0x80023f44 - - from 0x80023e80: - 0x80023f10 | r3 = r1 + 0x30 - 0x80023f14 | f1 = r2[lbl_801D4AB8@sda21] (f32) - 0x80023f18 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023f1c | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023f20 | f4 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023f24 | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023f28 | f6 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023f2c | call GXInitLightAttn - 0x80023f30 | r3 = r1 + 0x30 - 0x80023f34 | f1 = r31[0x4] (f32) - 0x80023f38 | f2 = r31[0x8] (f32) - 0x80023f3c | r4 = r31[0x2] (s16/u16) - 0x80023f40 | call GXInitLightDistAttn - - from 0x80023f0c: - 0x80023f44 | r0 = r31[0x0] (s16/u16) - 0x80023f48 | r0 = rotate(r0, 0) & (bits 16 to 16) - 0x80023f4c | (cmp) - 0x80023f50 | if r0 == 0x0 : goto 0x80023f8c (s32/u32) - 0x80023f54 | r3 = Stack[0xc] (s32/u32) - 0x80023f58 | r4 = r31 + 0x28 - 0x80023f5c | r5 = r1 + 0x24 - 0x80023f60 | call PSMTXMultVec - 0x80023f64 | r3 = Stack[0x10] (s32/u32) - 0x80023f68 | r4 = r31 + 0x1c - 0x80023f6c | r5 = r1 + 0x18 - 0x80023f70 | call PSMTXMultVec - 0x80023f74 | r3 = r1 + 0x30 - 0x80023f78 | f1 = Stack[0x18] (f32) - 0x80023f7c | f2 = Stack[0x1c] (f32) - 0x80023f80 | f3 = Stack[0x20] (f32) - 0x80023f84 | call GXInitLightPos - 0x80023f88 | goto 0x80023fb8 - - from 0x80023f50: - 0x80023f8c | r3 = r1 + 0x30 - 0x80023f90 | f1 = r31[0x1c] (f32) - 0x80023f94 | f2 = r31[0x20] (f32) - 0x80023f98 | f3 = r31[0x24] (f32) - 0x80023f9c | call GXInitLightPos - 0x80023fa0 | r3 = r31[0x28] (s32/u32) - 0x80023fa4 | r0 = r31[0x2c] (s32/u32) - 0x80023fa8 | Stack[0x24] = r3 (s32/u32) - 0x80023fac | Stack[0x28] = r0 (s32/u32) - 0x80023fb0 | r0 = r31[0x30] (s32/u32) - 0x80023fb4 | Stack[0x2c] = r0 (s32/u32) - - from 0x80023f88: - 0x80023fb8 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023fbc | (cmp) - 0x80023fc0 | if f0 != f31 : goto 0x80023fdc (f32/f64) - 0x80023fc4 | r3 = r1 + 0x30 - 0x80023fc8 | f1 = Stack[0x24] (f32) - 0x80023fcc | f2 = Stack[0x28] (f32) - 0x80023fd0 | f3 = Stack[0x2c] (f32) - 0x80023fd4 | call GXInitLightDir - 0x80023fd8 | goto 0x80024020 - - from 0x80023fc0: - 0x80023fdc | r3 = r1 + 0x30 - 0x80023fe0 | f1 = Stack[0x24] (f32) - 0x80023fe4 | f2 = Stack[0x28] (f32) - 0x80023fe8 | f3 = Stack[0x2c] (f32) - 0x80023fec | call GXInitSpecularDir - 0x80023ff0 | r3 = r1 + 0x30 - 0x80023ff4 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ff8 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80023ffc | f3 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024000 | f0 = r2[lbl_801D4AF0@sda21] (f32) - 0x80024004 | f4 = f31 * f0 - 0x80024008 | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x8002400c | f6 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024010 | f0 = r2[lbl_801D4AF0@sda21] (f32) - 0x80024014 | f0 = f31 * f0 - 0x80024018 | f6 -= f0 - 0x8002401c | call GXInitLightAttn - - from 0x80023fd8: - 0x80024020 | r0 = r31[0x40] (s8/u8) - 0x80024024 | Stack[0x14] = r0 (s8/u8) - 0x80024028 | r0 = r31[0x41] (s8/u8) - 0x8002402c | Stack[0x15] = r0 (s8/u8) - 0x80024030 | r0 = r31[0x42] (s8/u8) - 0x80024034 | Stack[0x16] = r0 (s8/u8) - 0x80024038 | r0 = r31[0x43] (s8/u8) - 0x8002403c | Stack[0x17] = r0 (s8/u8) - 0x80024040 | r30 = r1 + 0x14 - 0x80024044 | r3 = r1 + 0x30 - 0x80024048 | r4 = r30 - 0x8002404c | call GXInitLightColor - 0x80024050 | r3 = r1 + 0x30 - 0x80024054 | r4 = Stack[0x8] (s16/u16) - 0x80024058 | call GXLoadLightObjImm - 0x8002405c | + rotate(f31, qr0) = Stack[0x88] (128-bit) - 0x80024060 | f31 = Stack[0x80] (f64) - 0x80024064 | r31 = Stack[0x7c] (s32/u32) - 0x80024068 | r30 = Stack[0x78] (s32/u32) - 0x8002406c | r0 = Stack[0x94] (s32/u32) - 0x80024070 | Link Register set to r0 - 0x80024074 | r1 += 0x90 - 0x80024078 | return -lightSet end - -global function Hu3DReflectMapSet: - 0x8002407c | Stack Size += 0x10 - 0x80024080 | r0 set to Link Register - 0x80024084 | Stack[0x14] = r0 (s32/u32) - 0x80024088 | Stack[0x8] = r3 (s32/u32) - 0x8002408c | (^u16) r3 = (^u16) reflectAnim - 0x80024090 | r3 -= reflectAnim@l - 0x80024094 | r4 = r3[0x0] (s32/u32) - 0x80024098 | (^u16) r3 = (^u16) refMapData0 - 0x8002409c | r0 = r3 + (vu16) refMapData0 - 0x800240a0 | (cmp) - 0x800240a4 | if r4 == r0 : goto 0x800240b8 (s32/u32) - 0x800240a8 | (^u16) r3 = (^u16) reflectAnim - 0x800240ac | r3 -= reflectAnim@l - 0x800240b0 | r3 = r3[0x0] (s32/u32) - 0x800240b4 | call HuMemDirectFree - - from 0x800240a4: - 0x800240b8 | r3 = Stack[0x8] (s32/u32) - 0x800240bc | call HuSprAnimRead - 0x800240c0 | (^u16) r4 = (^u16) reflectAnim - 0x800240c4 | r4 -= reflectAnim@l - 0x800240c8 | r4[0x0] = r3 (s32/u32) - 0x800240cc | r0 = 0x0 - 0x800240d0 | Stack[reflectMapNo@sda21] = r0 (s16/u16) - 0x800240d4 | r0 = Stack[0x14] (s32/u32) - 0x800240d8 | Link Register set to r0 - 0x800240dc | r1 += 0x10 - 0x800240e0 | return -Hu3DReflectMapSet end - -global function Hu3DReflectNoSet: - 0x800240e4 | Stack[reflectMapNo@sda21] = r3 (s16/u16) - 0x800240e8 | return -Hu3DReflectNoSet end - -global function Hu3DFogSet: - 0x800240ec | r0 = 0x4 - 0x800240f0 | (^u16) r6 = (^u16) FogData - 0x800240f4 | r6 -= FogData@l - 0x800240f8 | r6[0x0] = r0 (s32/u32) - 0x800240fc | (^u16) r6 = (^u16) FogData - 0x80024100 | r6 -= FogData@l - 0x80024104 | r6[0x4] = f1 (f32) - 0x80024108 | (^u16) r6 = (^u16) FogData - 0x8002410c | r6 -= FogData@l - 0x80024110 | r6[0x8] = f2 (f32) - 0x80024114 | (^u16) r6 = (^u16) FogData - 0x80024118 | r6 -= FogData@l - 0x8002411c | r6[0xc] = r3 (s8/u8) - 0x80024120 | (^u16) r6 = (^u16) FogData - 0x80024124 | r6 -= FogData@l - 0x80024128 | r6[0xd] = r4 (s8/u8) - 0x8002412c | (^u16) r6 = (^u16) FogData - 0x80024130 | r6 -= FogData@l - 0x80024134 | r6[0xe] = r5 (s8/u8) - 0x80024138 | r0 = 0xff - 0x8002413c | (^u16) r6 = (^u16) FogData - 0x80024140 | r6 -= FogData@l - 0x80024144 | r6[0xf] = r0 (s8/u8) - 0x80024148 | return -Hu3DFogSet end - -global function Hu3DFogClear: - 0x8002414c | Stack Size += 0x20 - 0x80024150 | r0 set to Link Register - 0x80024154 | Stack[0x24] = r0 (s32/u32) - 0x80024158 | Stack[0x1c] = r31 (s32/u32) - 0x8002415c | r0 = 0x0 - 0x80024160 | (^u16) r3 = (^u16) FogData - 0x80024164 | r3 -= FogData@l - 0x80024168 | r3[0x0] = r0 (s32/u32) - 0x8002416c | r0 = Stack[BGColor@sda21] (s8/u8) - 0x80024170 | Stack[0x8] = r0 (s8/u8) - 0x80024174 | r0 = Stack[BGColor+0x1@sda21] (s8/u8) - 0x80024178 | Stack[0x9] = r0 (s8/u8) - 0x8002417c | r0 = Stack[BGColor+0x2@sda21] (s8/u8) - 0x80024180 | Stack[0xa] = r0 (s8/u8) - 0x80024184 | r0 = Stack[BGColor+0x3@sda21] (s8/u8) - 0x80024188 | Stack[0xb] = r0 (s8/u8) - 0x8002418c | r31 = r1 + 0x8 - 0x80024190 | r3 = 0x0 - 0x80024194 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024198 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x8002419c | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x800241a0 | f4 = r2[lbl_801D4AB4@sda21] (f32) - 0x800241a4 | r4 = r31 - 0x800241a8 | call GXSetFog - 0x800241ac | r31 = Stack[0x1c] (s32/u32) - 0x800241b0 | r0 = Stack[0x24] (s32/u32) - 0x800241b4 | Link Register set to r0 - 0x800241b8 | r1 += 0x20 - 0x800241bc | return -Hu3DFogClear end - -global function Hu3DShadowCreate: - 0x800241c0 | Stack Size += 0x20 - 0x800241c4 | r0 set to Link Register - 0x800241c8 | Stack[0x24] = r0 (s32/u32) - 0x800241cc | Stack[0x10] = f31 (f64) - 0x800241d0 | Stack[0x18] = rotate(f31, qr0) (128-bit) - 0x800241d4 | f31 = f1 - 0x800241d8 | Stack[0x8] = f2 (f32) - 0x800241dc | Stack[0xc] = f3 (f32) - 0x800241e0 | r0 = 0xc0 - 0x800241e4 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800241e8 | r3 -= Hu3DShadowData@l - 0x800241ec | r3[0x2] = r0 (s16/u16) - 0x800241f0 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800241f4 | r3 -= Hu3DShadowData@l - 0x800241f8 | r0 = r3[0x4] (s32/u32) - 0x800241fc | (cmp) - 0x80024200 | if r0 != 0x0 : goto 0x80024220 (s32/u32) - 0x80024204 | r3 = 0x2 - 0x80024208 | (^u16) r4 = 0x1 - 0x8002420c | r4 -= 0x7000 - 0x80024210 | call HuMemDirectMalloc - 0x80024214 | (^u16) r4 = (^u16) Hu3DShadowData - 0x80024218 | r4 -= Hu3DShadowData@l - 0x8002421c | r4[0x4] = r3 (s32/u32) - - from 0x80024200: - 0x80024220 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024224 | r3 -= Hu3DShadowData@l - 0x80024228 | r3[0x8] = f31 (f32) - 0x8002422c | f0 = Stack[0x8] (f32) - 0x80024230 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024234 | r3 -= Hu3DShadowData@l - 0x80024238 | r3[0xc] = f0 (f32) - 0x8002423c | f0 = Stack[0xc] (f32) - 0x80024240 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024244 | r3 -= Hu3DShadowData@l - 0x80024248 | r3[0x10] = f0 (f32) - 0x8002424c | f0 = r2[lbl_801D4AF4@sda21] (f32) - 0x80024250 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024254 | r3 -= Hu3DShadowData@l - 0x80024258 | r3[0x14] = f0 (f32) - 0x8002425c | f0 = r2[lbl_801D4AF4@sda21] (f32) - 0x80024260 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024264 | r3 -= Hu3DShadowData@l - 0x80024268 | r3[0x18] = f0 (f32) - 0x8002426c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024270 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024274 | r3 -= Hu3DShadowData@l - 0x80024278 | r3[0x1c] = f0 (f32) - 0x8002427c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024280 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024284 | r3 -= Hu3DShadowData@l - 0x80024288 | r3[0x28] = f0 (f32) - 0x8002428c | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024290 | r3 -= Hu3DShadowData@l - 0x80024294 | r3[0x24] = f0 (f32) - 0x80024298 | (^u16) r3 = (^u16) Hu3DShadowData - 0x8002429c | r3 -= Hu3DShadowData@l - 0x800242a0 | r3[0x20] = f0 (f32) - 0x800242a4 | f0 = r2[lbl_801D4AB0@sda21] (f32) - 0x800242a8 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800242ac | r3 -= Hu3DShadowData@l - 0x800242b0 | r3[0x2c] = f0 (f32) - 0x800242b4 | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x800242b8 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800242bc | r3 -= Hu3DShadowData@l - 0x800242c0 | r3[0x30] = f0 (f32) - 0x800242c4 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x800242c8 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800242cc | r3 -= Hu3DShadowData@l - 0x800242d0 | r3[0x34] = f0 (f32) - 0x800242d4 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800242d8 | r3 -= Hu3DShadowData@l - 0x800242dc | r3 += 0x68 - 0x800242e0 | f1 = f31 - 0x800242e4 | f2 = r2[lbl_801D4AE0@sda21] (f32) - 0x800242e8 | f3 = r2[lbl_801D4AF0@sda21] (f32) - 0x800242ec | f4 = r2[lbl_801D4AF8@sda21] (f32) - 0x800242f0 | f5 = r2[lbl_801D4AF0@sda21] (f32) - 0x800242f4 | f6 = r2[lbl_801D4AF0@sda21] (f32) - 0x800242f8 | call C_MTXLightPerspective - 0x800242fc | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024300 | r3 -= Hu3DShadowData@l - 0x80024304 | r3 += 0x2c - 0x80024308 | (^u16) r4 = (^u16) Hu3DShadowData - 0x8002430c | r4 -= Hu3DShadowData@l - 0x80024310 | r4 += 0x2c - 0x80024314 | call PSVECNormalize - 0x80024318 | r0 = 0x80 - 0x8002431c | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024320 | r3 -= Hu3DShadowData@l - 0x80024324 | r3[0x0] = r0 (s8/u8) - 0x80024328 | r0 = 0x1 - 0x8002432c | Stack[Hu3DShadowF@sda21] = r0 (s32/u32) - 0x80024330 | + rotate(f31, qr0) = Stack[0x18] (128-bit) - 0x80024334 | f31 = Stack[0x10] (f64) - 0x80024338 | r0 = Stack[0x24] (s32/u32) - 0x8002433c | Link Register set to r0 - 0x80024340 | r1 += 0x20 - 0x80024344 | return -Hu3DShadowCreate end - -global function Hu3DShadowPosSet: - 0x80024348 | (^u16) r6 = (^u16) Hu3DShadowData - 0x8002434c | r7 = r6 - Hu3DShadowData@l - 0x80024350 | r6 = r3[0x0] (s32/u32) - 0x80024354 | r0 = r3[0x4] (s32/u32) - 0x80024358 | r7[0x14] = r6 (s32/u32) - 0x8002435c | r7[0x18] = r0 (s32/u32) - 0x80024360 | r0 = r3[0x8] (s32/u32) - 0x80024364 | r7[0x1c] = r0 (s32/u32) - 0x80024368 | (^u16) r6 = (^u16) Hu3DShadowData - 0x8002436c | r7 = r6 - Hu3DShadowData@l - 0x80024370 | r6 = r5[0x0] (s32/u32) - 0x80024374 | r0 = r5[0x4] (s32/u32) - 0x80024378 | r7[0x20] = r6 (s32/u32) - 0x8002437c | r7[0x24] = r0 (s32/u32) - 0x80024380 | r0 = r5[0x8] (s32/u32) - 0x80024384 | r7[0x28] = r0 (s32/u32) - 0x80024388 | (^u16) r6 = (^u16) Hu3DShadowData - 0x8002438c | r7 = r6 - Hu3DShadowData@l - 0x80024390 | r6 = r4[0x0] (s32/u32) - 0x80024394 | r0 = r4[0x4] (s32/u32) - 0x80024398 | r7[0x2c] = r6 (s32/u32) - 0x8002439c | r7[0x30] = r0 (s32/u32) - 0x800243a0 | r0 = r4[0x8] (s32/u32) - 0x800243a4 | r7[0x34] = r0 (s32/u32) - 0x800243a8 | return -Hu3DShadowPosSet end - -global function Hu3DShadowTPLvlSet: - 0x800243ac | Stack Size += 0x10 - 0x800243b0 | f0 = r2[lbl_801D4AFC@sda21] (f32) - 0x800243b4 | f0 *= f1 - 0x800243b8 | (s32) f0 = (float) f0 - 0x800243bc | Stack[0x8] = f0 (f64) - 0x800243c0 | r0 = Stack[0xc] (s32/u32) - 0x800243c4 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800243c8 | r3 -= Hu3DShadowData@l - 0x800243cc | r3[0x0] = r0 (s8/u8) - 0x800243d0 | r1 += 0x10 - 0x800243d4 | return -Hu3DShadowTPLvlSet end - -global function Hu3DShadowSizeSet: - 0x800243d8 | Stack Size += 0x10 - 0x800243dc | r0 set to Link Register - 0x800243e0 | Stack[0x14] = r0 (s32/u32) - 0x800243e4 | Stack[0xc] = r31 (s32/u32) - 0x800243e8 | r31 = r3 - 0x800243ec | (^u16) r3 = (^u16) Hu3DShadowData - 0x800243f0 | r3 -= Hu3DShadowData@l - 0x800243f4 | r3[0x2] = r31 (s16/u16) - 0x800243f8 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800243fc | r3 -= Hu3DShadowData@l - 0x80024400 | r0 = r3[0x4] (s32/u32) - 0x80024404 | (cmp) - 0x80024408 | if r0 == 0x0 : goto 0x8002441c (s32/u32) - 0x8002440c | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024410 | r3 -= Hu3DShadowData@l - 0x80024414 | r3 = r3[0x4] (s32/u32) - 0x80024418 | call HuMemDirectFree - - from 0x80024408: - 0x8002441c | r3 = 0x2 - 0x80024420 | r4 = remove(r31, 16) - 0x80024424 | r0 = remove(r31, 16) - 0x80024428 | r4 *= r0 - 0x8002442c | call HuMemDirectMalloc - 0x80024430 | (^u16) r4 = (^u16) Hu3DShadowData - 0x80024434 | r4 -= Hu3DShadowData@l - 0x80024438 | r4[0x4] = r3 (s32/u32) - 0x8002443c | r31 = Stack[0xc] (s32/u32) - 0x80024440 | r0 = Stack[0x14] (s32/u32) - 0x80024444 | Link Register set to r0 - 0x80024448 | r1 += 0x10 - 0x8002444c | return -Hu3DShadowSizeSet end - -global function Hu3DShadowExec: - 0x80024450 | Stack Size += 0x120 - 0x80024454 | r0 set to Link Register - 0x80024458 | Stack[0x124] = r0 (s32/u32) - 0x8002445c | r11 = r1 + 0x120 - 0x80024460 | call _savegpr_25 - 0x80024464 | r0 = r2[lbl_801D6BE4@sda21] (s8/u8) - 0x80024468 | Stack[0x14] = r0 (s8/u8) - 0x8002446c | r0 = r2[lbl_801D6BE5@sda21] (s8/u8) - 0x80024470 | Stack[0x15] = r0 (s8/u8) - 0x80024474 | r0 = r2[lbl_801D6BE6@sda21] (s8/u8) - 0x80024478 | Stack[0x16] = r0 (s8/u8) - 0x8002447c | r0 = r2[lbl_801D6BE7@sda21] (s8/u8) - 0x80024480 | Stack[0x17] = r0 (s8/u8) - 0x80024484 | call Hu3DDrawPreInit - 0x80024488 | r0 = Stack[0x14] (s8/u8) - 0x8002448c | Stack[0x10] = r0 (s8/u8) - 0x80024490 | r0 = Stack[0x15] (s8/u8) - 0x80024494 | Stack[0x11] = r0 (s8/u8) - 0x80024498 | r0 = Stack[0x16] (s8/u8) - 0x8002449c | Stack[0x12] = r0 (s8/u8) - 0x800244a0 | r0 = Stack[0x17] (s8/u8) - 0x800244a4 | Stack[0x13] = r0 (s8/u8) - 0x800244a8 | r27 = r1 + 0x10 - 0x800244ac | r3 = r27 - 0x800244b0 | (^u16) r4 = 0x100 - 0x800244b4 | r4 -= 0x1 - 0x800244b8 | call GXSetCopyClear - 0x800244bc | r3 = r1 + 0x18 - 0x800244c0 | (^u16) r4 = (^u16) Hu3DShadowData - 0x800244c4 | r4 -= Hu3DShadowData@l - 0x800244c8 | f1 = r4[0x8] (f32) - 0x800244cc | f2 = r2[lbl_801D4AE0@sda21] (f32) - 0x800244d0 | (^u16) r4 = (^u16) Hu3DShadowData - 0x800244d4 | r4 -= Hu3DShadowData@l - 0x800244d8 | f3 = r4[0xc] (f32) - 0x800244dc | (^u16) r4 = (^u16) Hu3DShadowData - 0x800244e0 | r4 -= Hu3DShadowData@l - 0x800244e4 | f4 = r4[0x10] (f32) - 0x800244e8 | call C_MTXPerspective - 0x800244ec | r3 = r1 + 0x18 - 0x800244f0 | r4 = 0x0 - 0x800244f4 | call GXSetProjection - 0x800244f8 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800244fc | r3 -= Hu3DShadowData@l - 0x80024500 | r0 = r3[0x2] (s16/u16) - 0x80024504 | (cmp) - 0x80024508 | if r0 > 0xf0 : goto 0x800245e4 (s32/u32) - 0x8002450c | r3 = 0x2 - 0x80024510 | r4 = 0x2 - 0x80024514 | (^u16) r5 = (^u16) Hu3DShadowData - 0x80024518 | r5 -= Hu3DShadowData@l - 0x8002451c | r0 = r5[0x2] (s16/u16) - 0x80024520 | r5 = r0 << 1 (s32/u32) - 0x80024524 | r5 -= 0x4 - 0x80024528 | (^u16) r6 = (^u16) Hu3DShadowData - 0x8002452c | r6 -= Hu3DShadowData@l - 0x80024530 | r0 = r6[0x2] (s16/u16) - 0x80024534 | r6 = r0 << 1 (s32/u32) - 0x80024538 | r6 -= 0x4 - 0x8002453c | call GXSetScissor - 0x80024540 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024544 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024548 | (^u16) r3 = (^u16) Hu3DShadowData - 0x8002454c | r3 -= Hu3DShadowData@l - 0x80024550 | r0 = r3[0x2] (s16/u16) - 0x80024554 | r0 = r0 << 1 (s32/u32) - 0x80024558 | f3 = r2[lbl_801D4B00@sda21] (f64) - 0x8002455c | r0 ^= 0x8000 - 0x80024560 | Stack[0xec] = r0 (s32/u32) - 0x80024564 | (^u16) r0 = 0x4330 - 0x80024568 | Stack[0xe8] = r0 (s32/u32) - 0x8002456c | f0 = Stack[0xe8] (f64) - 0x80024570 | f3 = f0 - f3 - 0x80024574 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024578 | r3 -= Hu3DShadowData@l - 0x8002457c | r0 = r3[0x2] (s16/u16) - 0x80024580 | r0 = r0 << 1 (s32/u32) - 0x80024584 | f4 = r2[lbl_801D4B00@sda21] (f64) - 0x80024588 | r0 ^= 0x8000 - 0x8002458c | Stack[0xf4] = r0 (s32/u32) - 0x80024590 | (^u16) r0 = 0x4330 - 0x80024594 | Stack[0xf0] = r0 (s32/u32) - 0x80024598 | f0 = Stack[0xf0] (f64) - 0x8002459c | f4 = f0 - f4 - 0x800245a0 | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x800245a4 | f6 = r2[lbl_801D4AB8@sda21] (f32) - 0x800245a8 | call GXSetViewport - 0x800245ac | (^u16) r3 = (^u16) Hu3DShadowData - 0x800245b0 | r3 -= Hu3DShadowData@l - 0x800245b4 | r3 = r3[0x2] (s16/u16) - 0x800245b8 | r0 = r3 >> 31 (s32/u32) - 0x800245bc | r0 += r3 - 0x800245c0 | r4 = r0 >> 1 (s32/u32) (signed) - 0x800245c4 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800245c8 | r3 -= Hu3DShadowData@l - 0x800245cc | r3 = r3[0x2] (s16/u16) - 0x800245d0 | r0 = r3 >> 31 (s32/u32) - 0x800245d4 | r0 += r3 - 0x800245d8 | r0 = r0 >> 1 (s32/u32) (signed) - 0x800245dc | r28 = r4 * r0 - 0x800245e0 | goto 0x80024688 - - from 0x80024508: - 0x800245e4 | r3 = 0x1 - 0x800245e8 | r4 = 0x1 - 0x800245ec | (^u16) r5 = (^u16) Hu3DShadowData - 0x800245f0 | r5 -= Hu3DShadowData@l - 0x800245f4 | r5 = r5[0x2] (s16/u16) - 0x800245f8 | r5 -= 0x2 - 0x800245fc | (^u16) r6 = (^u16) Hu3DShadowData - 0x80024600 | r6 -= Hu3DShadowData@l - 0x80024604 | r6 = r6[0x2] (s16/u16) - 0x80024608 | r6 -= 0x2 - 0x8002460c | call GXSetScissor - 0x80024610 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024614 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024618 | (^u16) r3 = (^u16) Hu3DShadowData - 0x8002461c | r3 -= Hu3DShadowData@l - 0x80024620 | r0 = r3[0x2] (s16/u16) - 0x80024624 | f3 = r2[lbl_801D4AC0@sda21] (f64) - 0x80024628 | Stack[0xf4] = r0 (s32/u32) - 0x8002462c | (^u16) r0 = 0x4330 - 0x80024630 | Stack[0xf0] = r0 (s32/u32) - 0x80024634 | f0 = Stack[0xf0] (f64) - 0x80024638 | f3 = f0 - f3 - 0x8002463c | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024640 | r3 -= Hu3DShadowData@l - 0x80024644 | r0 = r3[0x2] (s16/u16) - 0x80024648 | f4 = r2[lbl_801D4AC0@sda21] (f64) - 0x8002464c | Stack[0xec] = r0 (s32/u32) - 0x80024650 | (^u16) r0 = 0x4330 - 0x80024654 | Stack[0xe8] = r0 (s32/u32) - 0x80024658 | f0 = Stack[0xe8] (f64) - 0x8002465c | f4 = f0 - f4 - 0x80024660 | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024664 | f6 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024668 | call GXSetViewport - 0x8002466c | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024670 | r3 -= Hu3DShadowData@l - 0x80024674 | r4 = r3[0x2] (s16/u16) - 0x80024678 | (^u16) r3 = (^u16) Hu3DShadowData - 0x8002467c | r3 -= Hu3DShadowData@l - 0x80024680 | r0 = r3[0x2] (s16/u16) - 0x80024684 | r28 = r4 * r0 - - from 0x800245e0: - 0x80024688 | (^u16) r3 = (^u16) Hu3DCameraMtx - 0x8002468c | r3 -= Hu3DCameraMtx@l - 0x80024690 | (^u16) r4 = (^u16) Hu3DShadowData - 0x80024694 | r4 -= Hu3DShadowData@l - 0x80024698 | r4 += 0x14 - 0x8002469c | (^u16) r5 = (^u16) Hu3DShadowData - 0x800246a0 | r5 -= Hu3DShadowData@l - 0x800246a4 | r5 += 0x2c - 0x800246a8 | (^u16) r6 = (^u16) Hu3DShadowData - 0x800246ac | r6 -= Hu3DShadowData@l - 0x800246b0 | r6 += 0x20 - 0x800246b4 | call C_MTXLookAt - 0x800246b8 | (^u16) r3 = (^u16) Hu3DCameraMtx - 0x800246bc | r3 -= Hu3DCameraMtx@l - 0x800246c0 | (^u16) r4 = (^u16) Hu3DShadowData - 0x800246c4 | r4 -= Hu3DShadowData@l - 0x800246c8 | r4 += 0x38 - 0x800246cc | call PSMTXCopy - 0x800246d0 | (^u16) r3 = (^u16) Hu3DData - 0x800246d4 | r31 = r3 + (vu16) Hu3DData - 0x800246d8 | r0 = 0x1 - 0x800246dc | Stack[shadowModelDrawF@sda21] = r0 (s32/u32) - 0x800246e0 | call GXInvalidateTexAll - 0x800246e4 | r0 = Stack[BGColor@sda21] (s8/u8) - 0x800246e8 | Stack[0xc] = r0 (s8/u8) - 0x800246ec | r0 = Stack[BGColor+0x1@sda21] (s8/u8) - 0x800246f0 | Stack[0xd] = r0 (s8/u8) - 0x800246f4 | r0 = Stack[BGColor+0x2@sda21] (s8/u8) - 0x800246f8 | Stack[0xe] = r0 (s8/u8) - 0x800246fc | r0 = Stack[BGColor+0x3@sda21] (s8/u8) - 0x80024700 | Stack[0xf] = r0 (s8/u8) - 0x80024704 | r26 = r1 + 0xc - 0x80024708 | r3 = 0x0 - 0x8002470c | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024710 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024714 | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024718 | f4 = r2[lbl_801D4AB4@sda21] (f32) - 0x8002471c | r4 = r26 - 0x80024720 | call GXSetFog - 0x80024724 | r30 = 0x0 - 0x80024728 | goto 0x80024940 - - from later address: - 0x8002472c | r0 = r31[0xc4] (s32/u32) - 0x80024730 | (cmp) - 0x80024734 | if r0 == 0x0 : goto 0x80024938 (s32/u32) - 0x80024738 | r0 = r31[0x50] (s32/u32) - 0x8002473c | r0 = rotate(r0, 0) & (bits 29 to 29) - 0x80024740 | (cmp) - 0x80024744 | if r0 == 0x0 : goto 0x80024938 (s32/u32) - 0x80024748 | r0 = r31[0x50] (s32/u32) - 0x8002474c | r0 = remove(r0, 31) - 0x80024750 | (cmp) - 0x80024754 | if r0 != 0x0 : goto 0x80024938 (s32/u32) - 0x80024758 | r0 = r31[0x50] (s32/u32) - 0x8002475c | r0 = rotate(r0, 0) & (bits 16 to 16) - 0x80024760 | (cmp) - 0x80024764 | if r0 != 0x0 : goto 0x80024938 (s32/u32) - 0x80024768 | r0 = r31[0x50] (s32/u32) - 0x8002476c | r0 = rotate(r0, 0) & (bits 28 to 28) - 0x80024770 | (cmp) - 0x80024774 | if r0 == 0x0 : goto 0x800248b8 (s32/u32) - 0x80024778 | r29 = 0x0 - 0x8002477c | r0 = r31[0x8] (s16/u16) - 0x80024780 | (cmp) - 0x80024784 | if r0 == -0x1 : goto 0x8002479c (s32/u32) - 0x80024788 | r3 = r30 - 0x8002478c | r4 = r31[0x8] (s16/u16) - 0x80024790 | f1 = r31[0x64] (f32) - 0x80024794 | r5 = 0x0 - 0x80024798 | call Hu3DMotionExec - - from 0x80024784: - 0x8002479c | r0 = r31[0xc] (s16/u16) - 0x800247a0 | (cmp) - 0x800247a4 | if r0 == -0x1 : goto 0x800247b0 (s32/u32) - 0x800247a8 | r3 = r30 - 0x800247ac | call Hu3DSubMotionExec - - from 0x800247a4: - 0x800247b0 | r0 = r31[0xa] (s16/u16) - 0x800247b4 | (cmp) - 0x800247b8 | if r0 == -0x1 : goto 0x800247d0 (s32/u32) - 0x800247bc | r3 = r30 - 0x800247c0 | r4 = r31[0xa] (s16/u16) - 0x800247c4 | f1 = r31[0x74] (f32) - 0x800247c8 | r5 = 0x1 - 0x800247cc | call Hu3DMotionExec - - from 0x800247b8: - 0x800247d0 | r0 = r31[0x50] (s32/u32) - 0x800247d4 | r0 = rotate(r0, 0) & (bits 21 to 21) - 0x800247d8 | (cmp) - 0x800247dc | if r0 == 0x0 : goto 0x800247ec (s32/u32) - 0x800247e0 | r3 = r31 - 0x800247e4 | call ClusterMotionExec - 0x800247e8 | r29 = 0x1 - - from 0x800247dc: - 0x800247ec | r0 = r31[0xe] (s16/u16) - 0x800247f0 | (cmp) - 0x800247f4 | if r0 == -0x1 : goto 0x80024830 (s32/u32) - 0x800247f8 | r0 = r31[0x8] (s16/u16) - 0x800247fc | (cmp) - 0x80024800 | if r0 != -0x1 : goto 0x8002481c (s32/u32) - 0x80024804 | r3 = r30 - 0x80024808 | r4 = r31[0xe] (s16/u16) - 0x8002480c | f1 = r31[0x94] (f32) - 0x80024810 | r5 = 0x0 - 0x80024814 | call Hu3DMotionExec - 0x80024818 | goto 0x80024830 - - from 0x80024800: - 0x8002481c | r3 = r30 - 0x80024820 | r4 = r31[0xe] (s16/u16) - 0x80024824 | f1 = r31[0x94] (f32) - 0x80024828 | r5 = 0x1 - 0x8002482c | call Hu3DMotionExec - - from 0x80024818: - 0x80024830 | r0 = r31[0x50] (s32/u32) - 0x80024834 | r0 &= 0x90 - 0x80024838 | (cmp) - 0x8002483c | if r0 == 0x0 : goto 0x80024858 (s32/u32) - 0x80024840 | r0 = r31[0x54] (s32/u32) - 0x80024844 | (^u16) r3 = 0x4000 - 0x80024848 | r3 += 0x2 - 0x8002484c | r0 &= r3 - 0x80024850 | (cmp) - 0x80024854 | if r0 != 0x0 : goto 0x800248ac (s32/u32) - - from 0x8002483c: - 0x80024858 | r29 = 0x1 - 0x8002485c | r3 = r31[0xc4] (s32/u32) - 0x80024860 | call InitVtxParm - 0x80024864 | r0 = r31[0xe] (s16/u16) - 0x80024868 | (cmp) - 0x8002486c | if r0 == -0x1 : goto 0x80024878 (s32/u32) - 0x80024870 | r3 = r31[0xc4] (s32/u32) - 0x80024874 | call ShapeProc - - from 0x8002486c: - 0x80024878 | r0 = r31[0x50] (s32/u32) - 0x8002487c | r0 = rotate(r0, 0) & (bits 21 to 21) - 0x80024880 | (cmp) - 0x80024884 | if r0 == 0x0 : goto 0x80024890 (s32/u32) - 0x80024888 | r3 = r31 - 0x8002488c | call ClusterProc - - from 0x80024884: - 0x80024890 | r3 = r31[0xc4] (s32/u32) - 0x80024894 | r0 = r3[0x6e] (s16/u16) - 0x80024898 | (cmp) - 0x8002489c | if r0 == 0x0 : goto 0x800248a8 (s32/u32) - 0x800248a0 | r3 = r31[0xc4] (s32/u32) - 0x800248a4 | call EnvelopeProc - - from 0x8002489c: - 0x800248a8 | call PPCSync - - from 0x80024854: - 0x800248ac | r0 = r31[0x50] (s32/u32) - 0x800248b0 | r0 |= 0x800 - 0x800248b4 | r31[0x50] = r0 (s32/u32) - - from 0x80024774: - 0x800248b8 | r3 = r1 + 0x58 - 0x800248bc | f1 = r31[0xd8] (f32) - 0x800248c0 | f2 = r31[0xdc] (f32) - 0x800248c4 | f3 = r31[0xe0] (f32) - 0x800248c8 | call mtxRot - 0x800248cc | r3 = r1 + 0xb8 - 0x800248d0 | f1 = r31[0xe4] (f32) - 0x800248d4 | f2 = r31[0xe8] (f32) - 0x800248d8 | f3 = r31[0xec] (f32) - 0x800248dc | call PSMTXScale - 0x800248e0 | r3 = r1 + 0x58 - 0x800248e4 | r4 = r1 + 0xb8 - 0x800248e8 | r5 = r1 + 0xb8 - 0x800248ec | call PSMTXConcat - 0x800248f0 | r3 = r1 + 0xb8 - 0x800248f4 | f1 = r31[0xcc] (f32) - 0x800248f8 | f2 = r31[0xd0] (f32) - 0x800248fc | f3 = r31[0xd4] (f32) - 0x80024900 | call mtxTransCat - 0x80024904 | (^u16) r3 = (^u16) Hu3DCameraMtx - 0x80024908 | r3 -= Hu3DCameraMtx@l - 0x8002490c | r4 = r1 + 0xb8 - 0x80024910 | r5 = r1 + 0x88 - 0x80024914 | call PSMTXConcat - 0x80024918 | r3 = r1 + 0x88 - 0x8002491c | r4 = r31 + 0xf0 - 0x80024920 | r5 = r1 + 0x88 - 0x80024924 | call PSMTXConcat - 0x80024928 | r3 = r31 - 0x8002492c | r4 = r1 + 0x88 - 0x80024930 | r5 = r31 + 0xe4 - 0x80024934 | call Hu3DDraw - - from 0x80024764: - 0x80024938 | r30 += 0x1 - 0x8002493c | r31 += 0x124 - - from 0x80024728: - 0x80024940 | s32 r0 = s16 r30 - 0x80024944 | (cmp) - 0x80024948 | if r0 < 0x200 : goto 0x8002472c (s32/u32) - 0x8002494c | call Hu3DDrawPost - 0x80024950 | r0 = 0x0 - 0x80024954 | Stack[shadowModelDrawF@sda21] = r0 (s32/u32) - 0x80024958 | (^u16) r3 = (^u16) Hu3DShadowData - 0x8002495c | r3 -= Hu3DShadowData@l - 0x80024960 | r0 = r3[0x2] (s16/u16) - 0x80024964 | (cmp) - 0x80024968 | if r0 > 0xf0 : goto 0x800249c8 (s32/u32) - 0x8002496c | r3 = 0x0 - 0x80024970 | r4 = 0x0 - 0x80024974 | (^u16) r5 = (^u16) Hu3DShadowData - 0x80024978 | r5 -= Hu3DShadowData@l - 0x8002497c | r0 = r5[0x2] (s16/u16) - 0x80024980 | r0 = r0 << 1 (s32/u32) - 0x80024984 | r5 = remove(r0, 16) - 0x80024988 | (^u16) r6 = (^u16) Hu3DShadowData - 0x8002498c | r6 -= Hu3DShadowData@l - 0x80024990 | r0 = r6[0x2] (s16/u16) - 0x80024994 | r0 = r0 << 1 (s32/u32) - 0x80024998 | r6 = remove(r0, 16) - 0x8002499c | call GXSetTexCopySrc - 0x800249a0 | (^u16) r3 = (^u16) Hu3DShadowData - 0x800249a4 | r3 -= Hu3DShadowData@l - 0x800249a8 | r3 = r3[0x2] (s16/u16) - 0x800249ac | (^u16) r4 = (^u16) Hu3DShadowData - 0x800249b0 | r4 -= Hu3DShadowData@l - 0x800249b4 | r4 = r4[0x2] (s16/u16) - 0x800249b8 | r5 = 0x28 - 0x800249bc | r6 = 0x1 - 0x800249c0 | call GXSetTexCopyDst - 0x800249c4 | goto 0x80024a10 - - from 0x80024968: - 0x800249c8 | r3 = 0x0 - 0x800249cc | r4 = 0x0 - 0x800249d0 | (^u16) r5 = (^u16) Hu3DShadowData - 0x800249d4 | r5 -= Hu3DShadowData@l - 0x800249d8 | r5 = r5[0x2] (s16/u16) - 0x800249dc | (^u16) r6 = (^u16) Hu3DShadowData - 0x800249e0 | r6 -= Hu3DShadowData@l - 0x800249e4 | r6 = r6[0x2] (s16/u16) - 0x800249e8 | call GXSetTexCopySrc - 0x800249ec | (^u16) r3 = (^u16) Hu3DShadowData - 0x800249f0 | r3 -= Hu3DShadowData@l - 0x800249f4 | r3 = r3[0x2] (s16/u16) - 0x800249f8 | (^u16) r4 = (^u16) Hu3DShadowData - 0x800249fc | r4 -= Hu3DShadowData@l - 0x80024a00 | r4 = r4[0x2] (s16/u16) - 0x80024a04 | r5 = 0x28 - 0x80024a08 | r6 = 0x0 - 0x80024a0c | call GXSetTexCopyDst - - from 0x800249c4: - 0x80024a10 | (^u16) r3 = (^u16) Hu3DShadowData - 0x80024a14 | r3 -= Hu3DShadowData@l - 0x80024a18 | r3 = r3[0x4] (s32/u32) - 0x80024a1c | r4 = 0x1 - 0x80024a20 | call GXCopyTex - 0x80024a24 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024a28 | f2 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024a2c | r3 = Stack[RenderMode@sda21] (s32/u32) - 0x80024a30 | r0 = r3[0x4] (s16/u16) - 0x80024a34 | f3 = r2[lbl_801D4AC0@sda21] (f64) - 0x80024a38 | Stack[0xf4] = r0 (s32/u32) - 0x80024a3c | (^u16) r0 = 0x4330 - 0x80024a40 | Stack[0xf0] = r0 (s32/u32) - 0x80024a44 | f0 = Stack[0xf0] (f64) - 0x80024a48 | f3 = f0 - f3 - 0x80024a4c | r3 = Stack[RenderMode@sda21] (s32/u32) - 0x80024a50 | r0 = r3[0x8] (s16/u16) - 0x80024a54 | f4 = r2[lbl_801D4AC0@sda21] (f64) - 0x80024a58 | Stack[0xec] = r0 (s32/u32) - 0x80024a5c | (^u16) r0 = 0x4330 - 0x80024a60 | Stack[0xe8] = r0 (s32/u32) - 0x80024a64 | f0 = Stack[0xe8] (f64) - 0x80024a68 | f4 = f0 - f4 - 0x80024a6c | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024a70 | f6 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024a74 | call GXSetViewport - 0x80024a78 | r3 = 0x0 - 0x80024a7c | r4 = 0x0 - 0x80024a80 | r5 = Stack[RenderMode@sda21] (s32/u32) - 0x80024a84 | r5 = r5[0x4] (s16/u16) - 0x80024a88 | r6 = Stack[RenderMode@sda21] (s32/u32) - 0x80024a8c | r6 = r6[0x6] (s16/u16) - 0x80024a90 | call GXSetScissor - 0x80024a94 | r3 = r1 + 0x18 - 0x80024a98 | f1 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024a9c | f2 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024aa0 | f3 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024aa4 | f4 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024aa8 | f5 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024aac | f6 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024ab0 | call C_MTXOrtho - 0x80024ab4 | r3 = r1 + 0x18 - 0x80024ab8 | r4 = 0x1 - 0x80024abc | call GXSetProjection - 0x80024ac0 | call GXClearVtxDesc - 0x80024ac4 | r3 = 0x9 - 0x80024ac8 | r4 = 0x1 - 0x80024acc | call GXSetVtxDesc - 0x80024ad0 | r3 = 0x0 - 0x80024ad4 | r4 = 0x9 - 0x80024ad8 | r5 = 0x1 - 0x80024adc | r6 = 0x0 - 0x80024ae0 | r7 = 0x0 - 0x80024ae4 | call GXSetVtxAttrFmt - 0x80024ae8 | r0 = Stack[BGColor@sda21] (s8/u8) - 0x80024aec | Stack[0x8] = r0 (s8/u8) - 0x80024af0 | r0 = Stack[BGColor+0x1@sda21] (s8/u8) - 0x80024af4 | Stack[0x9] = r0 (s8/u8) - 0x80024af8 | r0 = Stack[BGColor+0x2@sda21] (s8/u8) - 0x80024afc | Stack[0xa] = r0 (s8/u8) - 0x80024b00 | r0 = Stack[BGColor+0x3@sda21] (s8/u8) - 0x80024b04 | Stack[0xb] = r0 (s8/u8) - 0x80024b08 | r25 = r1 + 0x8 - 0x80024b0c | r3 = 0x1 - 0x80024b10 | r4 = r25 - 0x80024b14 | call GXSetTevColor - 0x80024b18 | r3 = 0x0 - 0x80024b1c | call GXSetNumTexGens - 0x80024b20 | r3 = 0x1 - 0x80024b24 | call GXSetNumTevStages - 0x80024b28 | r3 = 0x0 - 0x80024b2c | r4 = 0xff - 0x80024b30 | r5 = 0xff - 0x80024b34 | r6 = 0x0 - 0x80024b38 | call GXSetTevOrder - 0x80024b3c | r3 = 0x0 - 0x80024b40 | r4 = 0xf - 0x80024b44 | r5 = 0xf - 0x80024b48 | r6 = 0xf - 0x80024b4c | r7 = 0x2 - 0x80024b50 | call GXSetTevColorIn - 0x80024b54 | r3 = 0x0 - 0x80024b58 | r4 = 0x0 - 0x80024b5c | r5 = 0x0 - 0x80024b60 | r6 = 0x0 - 0x80024b64 | r7 = 0x1 - 0x80024b68 | r8 = 0x0 - 0x80024b6c | call GXSetTevColorOp - 0x80024b70 | r3 = 0x0 - 0x80024b74 | r4 = 0x7 - 0x80024b78 | r5 = 0x7 - 0x80024b7c | r6 = 0x7 - 0x80024b80 | r7 = 0x6 - 0x80024b84 | call GXSetTevAlphaIn - 0x80024b88 | r3 = 0x0 - 0x80024b8c | r4 = 0x0 - 0x80024b90 | r5 = 0x0 - 0x80024b94 | r6 = 0x0 - 0x80024b98 | r7 = 0x1 - 0x80024b9c | r8 = 0x0 - 0x80024ba0 | call GXSetTevAlphaOp - 0x80024ba4 | r3 = 0x0 - 0x80024ba8 | call GXSetNumChans - 0x80024bac | r3 = r1 + 0x88 - 0x80024bb0 | call PSMTXIdentity - 0x80024bb4 | r3 = r1 + 0x88 - 0x80024bb8 | r4 = 0x0 - 0x80024bbc | call GXLoadPosMtxImm - 0x80024bc0 | r3 = 0x0 - 0x80024bc4 | r4 = 0x7 - 0x80024bc8 | r5 = 0x1 - 0x80024bcc | call GXSetZMode - 0x80024bd0 | r3 = 0x1 - 0x80024bd4 | call GXSetNumChans - 0x80024bd8 | r3 = 0x4 - 0x80024bdc | r4 = 0x0 - 0x80024be0 | r5 = 0x0 - 0x80024be4 | r6 = 0x0 - 0x80024be8 | r7 = 0x0 - 0x80024bec | r8 = 0x2 - 0x80024bf0 | r9 = 0x2 - 0x80024bf4 | call GXSetChanCtrl - 0x80024bf8 | r3 = 0x80 - 0x80024bfc | r4 = 0x0 - 0x80024c00 | r5 = 0x4 - 0x80024c04 | call GXBegin - 0x80024c08 | r0 = 0x0 - 0x80024c0c | (^u16) r3 = 0xcc01 - 0x80024c10 | r3[-0x8000] = r0 (s8/u8) - 0x80024c14 | r0 = 0x0 - 0x80024c18 | (^u16) r3 = 0xcc01 - 0x80024c1c | r3[-0x8000] = r0 (s8/u8) - 0x80024c20 | r0 = 0x0 - 0x80024c24 | (^u16) r3 = 0xcc01 - 0x80024c28 | r3[-0x8000] = r0 (s8/u8) - 0x80024c2c | r0 = 0x1 - 0x80024c30 | (^u16) r3 = 0xcc01 - 0x80024c34 | r3[-0x8000] = r0 (s8/u8) - 0x80024c38 | r0 = 0x0 - 0x80024c3c | (^u16) r3 = 0xcc01 - 0x80024c40 | r3[-0x8000] = r0 (s8/u8) - 0x80024c44 | r0 = 0x0 - 0x80024c48 | (^u16) r3 = 0xcc01 - 0x80024c4c | r3[-0x8000] = r0 (s8/u8) - 0x80024c50 | r0 = 0x1 - 0x80024c54 | (^u16) r3 = 0xcc01 - 0x80024c58 | r3[-0x8000] = r0 (s8/u8) - 0x80024c5c | r0 = 0x1 - 0x80024c60 | (^u16) r3 = 0xcc01 - 0x80024c64 | r3[-0x8000] = r0 (s8/u8) - 0x80024c68 | r0 = 0x0 - 0x80024c6c | (^u16) r3 = 0xcc01 - 0x80024c70 | r3[-0x8000] = r0 (s8/u8) - 0x80024c74 | r0 = 0x0 - 0x80024c78 | (^u16) r3 = 0xcc01 - 0x80024c7c | r3[-0x8000] = r0 (s8/u8) - 0x80024c80 | r0 = 0x1 - 0x80024c84 | (^u16) r3 = 0xcc01 - 0x80024c88 | r3[-0x8000] = r0 (s8/u8) - 0x80024c8c | r0 = 0x0 - 0x80024c90 | (^u16) r3 = 0xcc01 - 0x80024c94 | r3[-0x8000] = r0 (s8/u8) - 0x80024c98 | r11 = r1 + 0x120 - 0x80024c9c | call _restgpr_25 - 0x80024ca0 | r0 = Stack[0x124] (s32/u32) - 0x80024ca4 | Link Register set to r0 - 0x80024ca8 | r1 += 0x120 - 0x80024cac | return -Hu3DShadowExec end - -global function Hu3DProjectionCreate: - 0x80024cb0 | Stack Size += 0x30 - 0x80024cb4 | r0 set to Link Register - 0x80024cb8 | Stack[0x34] = r0 (s32/u32) - 0x80024cbc | Stack[0x20] = f31 (f64) - 0x80024cc0 | Stack[0x28] = rotate(f31, qr0) (128-bit) - 0x80024cc4 | Stack[0x1c] = r31 (s32/u32) - 0x80024cc8 | Stack[0x18] = r30 (s32/u32) - 0x80024ccc | Stack[0x8] = r3 (s32/u32) - 0x80024cd0 | f31 = f1 - 0x80024cd4 | Stack[0xc] = f2 (f32) - 0x80024cd8 | Stack[0x10] = f3 (f32) - 0x80024cdc | (^u16) r3 = (^u16) Hu3DProjection - 0x80024ce0 | r31 = r3 - Hu3DProjection@l - 0x80024ce4 | r30 = 0x0 - 0x80024ce8 | goto 0x80024d00 - - from later address: - 0x80024cec | r0 = r31[0x4] (s32/u32) - 0x80024cf0 | (cmp) - 0x80024cf4 | if r0 == 0x0 : goto 0x80024d0c (s32/u32) - 0x80024cf8 | r30 += 0x1 - 0x80024cfc | r31 += 0x98 - - from 0x80024ce8: - 0x80024d00 | s32 r0 = s16 r30 - 0x80024d04 | (cmp) - 0x80024d08 | if r0 < 0x4 : goto 0x80024cec (s32/u32) - - from 0x80024cf4: - 0x80024d0c | s32 r0 = s16 r30 - 0x80024d10 | (cmp) - 0x80024d14 | if r0 != 0x4 : goto 0x80024d20 (s32/u32) - 0x80024d18 | r3 = -0x1 - 0x80024d1c | goto 0x80024dc0 - - from 0x80024d14: - 0x80024d20 | r0 = Stack[0x8] (s32/u32) - 0x80024d24 | r31[0x4] = r0 (s32/u32) - 0x80024d28 | r31[0x8] = f31 (f32) - 0x80024d2c | f0 = Stack[0xc] (f32) - 0x80024d30 | r31[0xc] = f0 (f32) - 0x80024d34 | f0 = Stack[0x10] (f32) - 0x80024d38 | r31[0x10] = f0 (f32) - 0x80024d3c | f0 = r2[lbl_801D4B08@sda21] (f32) - 0x80024d40 | r31[0x14] = f0 (f32) - 0x80024d44 | f0 = r2[lbl_801D4B08@sda21] (f32) - 0x80024d48 | r31[0x18] = f0 (f32) - 0x80024d4c | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024d50 | r31[0x1c] = f0 (f32) - 0x80024d54 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024d58 | r31[0x28] = f0 (f32) - 0x80024d5c | r31[0x24] = f0 (f32) - 0x80024d60 | r31[0x20] = f0 (f32) - 0x80024d64 | f0 = r2[lbl_801D4AB0@sda21] (f32) - 0x80024d68 | r31[0x2c] = f0 (f32) - 0x80024d6c | f0 = r2[lbl_801D4AB8@sda21] (f32) - 0x80024d70 | r31[0x30] = f0 (f32) - 0x80024d74 | f0 = r2[lbl_801D4AB4@sda21] (f32) - 0x80024d78 | r31[0x34] = f0 (f32) - 0x80024d7c | r3 = r31 + 0x68 - 0x80024d80 | f1 = f31 - 0x80024d84 | f2 = r2[lbl_801D4AE0@sda21] (f32) - 0x80024d88 | f3 = r2[lbl_801D4AF0@sda21] (f32) - 0x80024d8c | f4 = r2[lbl_801D4AF8@sda21] (f32) - 0x80024d90 | f5 = r2[lbl_801D4AF0@sda21] (f32) - 0x80024d94 | f6 = r2[lbl_801D4AF0@sda21] (f32) - 0x80024d98 | call C_MTXLightPerspective - 0x80024d9c | r3 = r31 + 0x2c - 0x80024da0 | r4 = r31 + 0x2c - 0x80024da4 | call PSVECNormalize - 0x80024da8 | r0 = 0x80 - 0x80024dac | r31[0x0] = r0 (s8/u8) - 0x80024db0 | r3 = Stack[Hu3DProjectionNum@sda21] (s16/u16) - 0x80024db4 | r0 = r3 + 0x1 - 0x80024db8 | Stack[Hu3DProjectionNum@sda21] = r0 (s16/u16) - 0x80024dbc | r3 = r30 - - from 0x80024d1c: - 0x80024dc0 | + rotate(f31, qr0) = Stack[0x28] (128-bit) - 0x80024dc4 | f31 = Stack[0x20] (f64) - 0x80024dc8 | r31 = Stack[0x1c] (s32/u32) - 0x80024dcc | r30 = Stack[0x18] (s32/u32) - 0x80024dd0 | r0 = Stack[0x34] (s32/u32) - 0x80024dd4 | Link Register set to r0 - 0x80024dd8 | r1 += 0x30 - 0x80024ddc | return -Hu3DProjectionCreate end - -global function Hu3DProjectionKill: - 0x80024de0 | Stack Size += 0x10 - 0x80024de4 | r0 set to Link Register - 0x80024de8 | Stack[0x14] = r0 (s32/u32) - 0x80024dec | Stack[0xc] = r31 (s32/u32) - 0x80024df0 | r31 = r3 - 0x80024df4 | s32 r0 = s16 r31 - 0x80024df8 | r4 = r0 * 0x98 - 0x80024dfc | (^u16) r3 = (^u16) Hu3DProjection - 0x80024e00 | r0 = r3 - Hu3DProjection@l - 0x80024e04 | r3 = r0 + r4 - 0x80024e08 | r3 = r3[0x4] (s32/u32) - 0x80024e0c | call HuSprAnimKill - 0x80024e10 | r5 = 0x0 - 0x80024e14 | s32 r0 = s16 r31 - 0x80024e18 | r4 = r0 * 0x98 - 0x80024e1c | (^u16) r3 = (^u16) Hu3DProjection - 0x80024e20 | r0 = r3 - Hu3DProjection@l - 0x80024e24 | r3 = r0 + r4 - 0x80024e28 | r3[0x4] = r5 (s32/u32) - 0x80024e2c | r31 = Stack[0xc] (s32/u32) - 0x80024e30 | r0 = Stack[0x14] (s32/u32) - 0x80024e34 | Link Register set to r0 - 0x80024e38 | r1 += 0x10 - 0x80024e3c | return -Hu3DProjectionKill end - -global function Hu3DProjectionPosSet: - 0x80024e40 | s32 r0 = s16 r3 - 0x80024e44 | r8 = r0 * 0x98 - 0x80024e48 | (^u16) r7 = (^u16) Hu3DProjection - 0x80024e4c | r0 = r7 - Hu3DProjection@l - 0x80024e50 | r8 = r0 + r8 - 0x80024e54 | r7 = r4[0x0] (s32/u32) - 0x80024e58 | r0 = r4[0x4] (s32/u32) - 0x80024e5c | r8[0x14] = r7 (s32/u32) - 0x80024e60 | r8[0x18] = r0 (s32/u32) - 0x80024e64 | r0 = r4[0x8] (s32/u32) - 0x80024e68 | r8[0x1c] = r0 (s32/u32) - 0x80024e6c | s32 r0 = s16 r3 - 0x80024e70 | r8 = r0 * 0x98 - 0x80024e74 | (^u16) r7 = (^u16) Hu3DProjection - 0x80024e78 | r0 = r7 - Hu3DProjection@l - 0x80024e7c | r8 = r0 + r8 - 0x80024e80 | r7 = r6[0x0] (s32/u32) - 0x80024e84 | r0 = r6[0x4] (s32/u32) - 0x80024e88 | r8[0x20] = r7 (s32/u32) - 0x80024e8c | r8[0x24] = r0 (s32/u32) - 0x80024e90 | r0 = r6[0x8] (s32/u32) - 0x80024e94 | r8[0x28] = r0 (s32/u32) - 0x80024e98 | s32 r0 = s16 r3 - 0x80024e9c | r8 = r0 * 0x98 - 0x80024ea0 | (^u16) r7 = (^u16) Hu3DProjection - 0x80024ea4 | r0 = r7 - Hu3DProjection@l - 0x80024ea8 | r8 = r0 + r8 - 0x80024eac | r7 = r5[0x0] (s32/u32) - 0x80024eb0 | r0 = r5[0x4] (s32/u32) - 0x80024eb4 | r8[0x2c] = r7 (s32/u32) - 0x80024eb8 | r8[0x30] = r0 (s32/u32) - 0x80024ebc | r0 = r5[0x8] (s32/u32) - 0x80024ec0 | r8[0x34] = r0 (s32/u32) - 0x80024ec4 | return -Hu3DProjectionPosSet end - -global function Hu3DProjectionTPLvlSet: - 0x80024ec8 | Stack Size += 0x10 - 0x80024ecc | f0 = r2[lbl_801D4AFC@sda21] (f32) - 0x80024ed0 | f0 *= f1 - 0x80024ed4 | (s32) f0 = (float) f0 - 0x80024ed8 | Stack[0x8] = f0 (f64) - 0x80024edc | r6 = Stack[0xc] (s32/u32) - 0x80024ee0 | s32 r0 = s16 r3 - 0x80024ee4 | r5 = r0 * 0x98 - 0x80024ee8 | (^u16) r4 = (^u16) Hu3DProjection - 0x80024eec | r0 = r4 - Hu3DProjection@l - 0x80024ef0 | r4 = r0 + r5 - 0x80024ef4 | r4[0x0] = r6 (s8/u8) - 0x80024ef8 | r1 += 0x10 - 0x80024efc | return -Hu3DProjectionTPLvlSet end - -global function Hu3DMipMapSet: - 0x80024f00 | Stack Size += 0x40 - 0x80024f04 | r0 set to Link Register - 0x80024f08 | Stack[0x44] = r0 (s32/u32) - 0x80024f0c | r11 = r1 + 0x40 - 0x80024f10 | call _savegpr_21 - 0x80024f14 | Stack[0x8] = r3 (s32/u32) - 0x80024f18 | Stack[0xc] = r4 (s16/u16) - 0x80024f1c | r21 = r5 - 0x80024f20 | r0 = Stack[0xc] (s16/u16) - 0x80024f24 | r4 = r0 * 0x124 - 0x80024f28 | (^u16) r3 = (^u16) Hu3DData - 0x80024f2c | r0 = r3 + (vu16) Hu3DData - 0x80024f30 | r25 = r0 + r4 - 0x80024f34 | r27 = r25[0xc4] (s32/u32) - 0x80024f38 | r26 = r27[0xc] (s32/u32) - 0x80024f3c | r29 = 0x0 - 0x80024f40 | goto 0x80024f64 - - from later address: - 0x80024f44 | r3 = r21 - 0x80024f48 | r4 = r26[0x80] (s32/u32) - 0x80024f4c | r4 = r4[0x0] (s32/u32) - 0x80024f50 | call strcmp - 0x80024f54 | (cmp) - 0x80024f58 | if r3 == 0x0 : goto 0x80024f74 (s32/u32) - 0x80024f5c | r29 += 0x1 - 0x80024f60 | r26 += 0x84 - - from 0x80024f40: - 0x80024f64 | s32 r3 = s16 r29 - 0x80024f68 | r0 = r27[0x5a] (s16/u16) - 0x80024f6c | (cmp) - 0x80024f70 | if r3 < r0 : goto 0x80024f44 (s32/u32) - - from 0x80024f58: - 0x80024f74 | s32 r3 = s16 r29 - 0x80024f78 | r0 = r27[0x5a] (s16/u16) - 0x80024f7c | (cmp) - 0x80024f80 | if r3 != r0 : goto 0x80024f9c (s32/u32) - 0x80024f84 | (^u16) r3 = (^u16) lbl_8012D630 - 0x80024f88 | r3 -= lbl_8012D630@l - 0x80024f8c | r4 = r21 - 0x80024f90 | clear(cr1eq) - 0x80024f94 | call OSReport - 0x80024f98 | goto 0x800250d0 - - from 0x80024f80: - 0x80024f9c | r31 = r26[0x80] (s32/u32) - 0x80024fa0 | r3 = Stack[0x8] (s32/u32) - 0x80024fa4 | call HuSprAnimRead - 0x80024fa8 | r28 = r3 - 0x80024fac | r30 = r28[0x10] (s32/u32) - 0x80024fb0 | r29 = 0x0 - 0x80024fb4 | s32 r24 = s16 r29 - 0x80024fb8 | goto 0x80024fcc - - from later address: - 0x80024fbc | r0 = r30[0x8] (s32/u32) - 0x80024fc0 | r24 += r0 - 0x80024fc4 | r29 += 0x1 - 0x80024fc8 | r30 += 0x14 - - from 0x80024fb8: - 0x80024fcc | s32 r3 = s16 r29 - 0x80024fd0 | r0 = r28[0x4] (s16/u16) - 0x80024fd4 | (cmp) - 0x80024fd8 | if r3 < r0 : goto 0x80024fbc (s32/u32) - 0x80024fdc | r3 = 0x2 - 0x80024fe0 | r4 = r24 - 0x80024fe4 | r5 = r25[0x48] (s32/u32) - 0x80024fe8 | call HuMemDirectMallocNum - 0x80024fec | r23 = r3 - 0x80024ff0 | r22 = r23 - 0x80024ff4 | r30 = r28[0x10] (s32/u32) - 0x80024ff8 | r31[0x1c] = r22 (s32/u32) - 0x80024ffc | r0 = r30[0x4] (s16/u16) - 0x80025000 | r31[0xa] = r0 (s16/u16) - 0x80025004 | r0 = r30[0x6] (s16/u16) - 0x80025008 | r31[0xc] = r0 (s16/u16) - 0x8002500c | r0 = r30[0x2] (s16/u16) - 0x80025010 | r31[0xe] = r0 (s16/u16) - 0x80025014 | r0 = r30[0xc] (s32/u32) - 0x80025018 | r31[0x14] = r0 (s32/u32) - 0x8002501c | r0 = r28[0x4] (s16/u16) - 0x80025020 | r31[0x4] = r0 (s32/u32) - 0x80025024 | r0 = r30[0x1] (s8/u8) - 0x80025028 | (cmp) - 0x8002502c | if r0 == 0x2 : goto 0x8002505c (s32/u32) - 0x80025030 | if r0 >= 0x2 : goto 0x80025040 (s32/u32) - 0x80025034 | (cmp) - 0x80025038 | if r0 == 0x0 : goto 0x80025050 (s32/u32) - 0x8002503c | goto 0x8002508c - - from 0x80025030: - 0x80025040 | (cmp) - 0x80025044 | if r0 == 0x4 : goto 0x8002507c (s32/u32) - 0x80025048 | if r0 >= 0x4 : goto 0x8002508c (s32/u32) - 0x8002504c | goto 0x80025068 - - from 0x80025038: - 0x80025050 | r0 = 0x6 - 0x80025054 | r31[0x8] = r0 (s8/u8) - 0x80025058 | goto 0x8002508c - - from 0x8002502c: - 0x8002505c | r0 = 0x5 - 0x80025060 | r31[0x8] = r0 (s8/u8) - 0x80025064 | goto 0x8002508c - - from 0x8002504c: - 0x80025068 | r0 = 0xa - 0x8002506c | r31[0x8] = r0 (s8/u8) - 0x80025070 | r0 = 0x8 - 0x80025074 | r31[0x9] = r0 (s8/u8) - 0x80025078 | goto 0x8002508c - - from 0x80025044: - 0x8002507c | r0 = 0xa - 0x80025080 | r31[0x8] = r0 (s8/u8) - 0x80025084 | r0 = 0x4 - 0x80025088 | r31[0x9] = r0 (s8/u8) - - from 0x80025078: - 0x8002508c | r29 = 0x0 - 0x80025090 | goto 0x800250b4 - - from later address: - 0x80025094 | r3 = r23 - 0x80025098 | r4 = r30[0x10] (s32/u32) - 0x8002509c | r5 = r30[0x8] (s32/u32) - 0x800250a0 | call memcpy - 0x800250a4 | r0 = r30[0x8] (s32/u32) - 0x800250a8 | r23 += r0 - 0x800250ac | r29 += 0x1 - 0x800250b0 | r30 += 0x14 - - from 0x80025090: - 0x800250b4 | s32 r3 = s16 r29 - 0x800250b8 | r0 = r28[0x4] (s16/u16) - 0x800250bc | (cmp) - 0x800250c0 | if r3 < r0 : goto 0x80025094 (s32/u32) - 0x800250c4 | r3 = r22 - 0x800250c8 | r4 = r24 - 0x800250cc | call DCFlushRange - - from 0x80024f98: - 0x800250d0 | r11 = r1 + 0x40 - 0x800250d4 | call _restgpr_21 - 0x800250d8 | r0 = Stack[0x44] (s32/u32) - 0x800250dc | Link Register set to r0 - 0x800250e0 | r1 += 0x40 - 0x800250e4 | return -Hu3DMipMapSet end From 23242ba7845de1b05c215ace955ab18798fb386f Mon Sep 17 00:00:00 2001 From: CreateSource Date: Tue, 5 Dec 2023 21:36:58 -0500 Subject: [PATCH 2/4] ye --- src/game/hsfman.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/game/hsfman.c b/src/game/hsfman.c index b7c5d124..da719b23 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -1,5 +1,39 @@ #include "common.h" +#include "game/memory.h" +typedef struct ThreeDDataSubstruct { + char unk_00[0x8]; + void *unk_08; + void *unk_0C; + void *unk_10; + void *unk_14; + void *unk_18; + char unk_20[0x4]; + void *unk_24; + void *unk_28; + void *unk_2C; + void *unk_30; + char unk_34[0x14]; + void *unk_48; + void *unk_4C; + char unk_50[0x8]; + s16 unk_58; + s16 unk_5A; + s16 unk_5C; + s16 unk_5E; + s16 unk_60; + s16 unk_62; + s16 unk_64; + s16 unk_66; + s16 unk_68; + s16 unk_6A; + s16 unk_6C; + s16 unk_6E; +} ThreeDDataSubstruct; + +// 801677C0 +// |=> unk_C4 -> 807d65a0 +// | |=> unk_08 -> 807d6650 typedef struct ThreeDDataStruct { f32 unk_00; f32 unk_04; @@ -43,9 +77,9 @@ typedef struct ThreeDProjectionStruct { char unk_01[0x3]; s32 unk_04; char unk_08[0xC]; - Vec3f unk_14; - Vec3f unk_20; - Vec3f unk_2C; + Vec unk_14; + Vec unk_20; + Vec unk_2C; char unk_38[0x60]; } ThreeDProjectionStruct; typedef struct ThreeDShadowStruct { @@ -155,7 +189,7 @@ void Hu3DProjectionKill(s16 arg0) { Hu3DProjection[arg0].unk_04 = 0; } -void Hu3DProjectionPosSet(s16 arg0, Vec3f arg1, Vec3f arg2, Vec3f arg3) { +void Hu3DProjectionPosSet(s16 arg0, Vec arg1, Vec arg2, Vec arg3) { Hu3DProjection[arg0].unk_14 = arg1; Hu3DProjection[arg0].unk_20 = arg3; Hu3DProjection[arg0].unk_2C = arg2; From f5bc2b7dee2d53f776dca95f25ca4f871a445d68 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 6 Dec 2023 19:31:32 -0500 Subject: [PATCH 3/4] the BEEG functions are IN --- include/game/hsfman.h | 72 ++++++++ src/game/hsfman.c | 385 +++++++++++++++++++++++++++++++----------- 2 files changed, 355 insertions(+), 102 deletions(-) create mode 100644 include/game/hsfman.h diff --git a/include/game/hsfman.h b/include/game/hsfman.h new file mode 100644 index 00000000..ebe0b43c --- /dev/null +++ b/include/game/hsfman.h @@ -0,0 +1,72 @@ +#include "common.h" +#include "game/memory.h" +#include "game/hsfformat.h" +#include "game/sprite.h" + +typedef struct model_data { + u8 unk_00; + u8 unk_01; + s16 unk_02; + s16 unk_04; + s16 unk_06; + s16 unk_08; + s16 unk_0A; + s16 unk_0C; + s16 unk_0E; + char unk_10[0x12]; + u16 unk_22; + char unk_24[0x24]; + u32 unk_48; + char unk_4C[0x4]; + u32 unk_50; + u32 unk_54; + char unk_58[0xC]; + f32 unk_64; + char unk_68[0xC]; + f32 unk_74; + char unk_78[0x1C]; + f32 unk_94; + char unk_98[0x2C]; + HsfData *hsfData; + char unk_C8[0x4]; + f32 unk_CC; + f32 unk_D0; + f32 unk_D4; + f32 unk_D8; + f32 unk_DC; + f32 unk_E0; + f32 unk_E4; + f32 unk_E8; + f32 unk_EC; + f32 unk_F0[3][4]; + char unk_120[0x4]; +} ModelData; +typedef struct ThreeDCameraStruct { + f32 unk_00; + f32 start; + f32 end; + char unk_04[0x4C]; +} ThreeDCameraStruct; +typedef struct ThreeDProjectionStruct { + s8 unk_00; + char unk_01[0x3]; + u32 unk_04; + char unk_08[0xC]; + Point3d unk_14; + Point3d unk_20; + Vec unk_2C; + Mtx unk_38; + char unk_68[0x30]; +} ThreeDProjectionStruct; +typedef struct ThreeDShadowStruct { + char unk_00[0x2]; + u16 unk_02; + void*unk_04; + char unk_08[0x90]; +} ThreeDShadowStruct; +typedef struct fog_data { + GXFogType fogType; + f32 start; + f32 end; + GXColor color; +} FogStruct; diff --git a/src/game/hsfman.c b/src/game/hsfman.c index da719b23..f08ee4a2 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -1,93 +1,4 @@ -#include "common.h" -#include "game/memory.h" - -typedef struct ThreeDDataSubstruct { - char unk_00[0x8]; - void *unk_08; - void *unk_0C; - void *unk_10; - void *unk_14; - void *unk_18; - char unk_20[0x4]; - void *unk_24; - void *unk_28; - void *unk_2C; - void *unk_30; - char unk_34[0x14]; - void *unk_48; - void *unk_4C; - char unk_50[0x8]; - s16 unk_58; - s16 unk_5A; - s16 unk_5C; - s16 unk_5E; - s16 unk_60; - s16 unk_62; - s16 unk_64; - s16 unk_66; - s16 unk_68; - s16 unk_6A; - s16 unk_6C; - s16 unk_6E; -} ThreeDDataSubstruct; - -// 801677C0 -// |=> unk_C4 -> 807d65a0 -// | |=> unk_08 -> 807d6650 -typedef struct ThreeDDataStruct { - f32 unk_00; - f32 unk_04; - f32 unk_08; - s16 unk_0C; - s16 unk_0E; - char unk_10[0x12]; - u16 unk_22; - char unk_24[0x24]; - u32 unk_48; - char unk_4C[0x4]; - s32 unk_50; - s32 unk_54; - char unk_58[0xC]; - f32 unk_64; - char unk_68[0xC]; - f32 unk_74; - char unk_78[0x1C]; - f32 unk_94; - char unk_98[0x2C]; - void*unk_C4; - char unk_C8[0x4]; - f32 unk_CC; - f32 unk_D0; - f32 unk_D4; - f32 unk_D8; - f32 unk_DC; - f32 unk_E0; - f32 unk_E4; - f32 unk_E8; - f32 unk_EC; - f32 unk_F0[4]; - char unk_100[0x24]; -} ThreeDDataStruct; -typedef struct ThreeDCameraStruct { - f32 unk_00; - char unk_04[0x54]; -} ThreeDCameraStruct; -typedef struct ThreeDProjectionStruct { - s8 unk_00; - char unk_01[0x3]; - s32 unk_04; - char unk_08[0xC]; - Vec unk_14; - Vec unk_20; - Vec unk_2C; - char unk_38[0x60]; -} ThreeDProjectionStruct; -typedef struct ThreeDShadowStruct { - char unk_00[0x2]; - u16 unk_02; - void*unk_04; - char unk_08[0x90]; -} ThreeDShadowStruct; +#include "game/hsfman.h" void Hu3DAnimInit(void); void Hu3DFogClear(void); @@ -96,14 +7,24 @@ void Hu3DMotionInit(void); void Hu3DParManInit(void); char *HuSprAnimRead(char*); void HuSprAnimKill(s32); + s16 Hu3DCameraExistF; -ThreeDDataStruct Hu3DData[0x200]; -ThreeDCameraStruct Hu3DCamera[0x10]; +ModelData Hu3DData[0x200] = {}; +ThreeDCameraStruct Hu3DCamera[0x10] = {}; +s16 layerNum[8] = {}; +void (*layerHook[8])(s16) = {}; +char *reflectAnim[5] = {}; +char *hiliteAnim[4] = {}; +ThreeDProjectionStruct Hu3DProjection[4] = {}; +ThreeDShadowStruct Hu3DShadowData = {}; +FogStruct FogData = {}; +Mtx Hu3DCameraMtx = {}; +Mtx Hu3DCameraMtxXPose = {}; s16 Hu3DPauseF; s16 Hu3DProjectionNum; s16 Hu3DShadowCamBit; s32 Hu3DShadowF; -s16 NoSyncF; +u16 NoSyncF; f32 lbl_801D4AB0; s32 modelKillAllF; char refMapData0[0x1240] = {}; @@ -117,25 +38,41 @@ char hiliteData[0x480] = {}; char hiliteData2[0x480] = {}; char hiliteData3[0x480] = {}; char hiliteData4[0x480] = {}; +const char lbl_8012D630[] = "Error: Not Found %s for MipMapSet\n"; s16 reflectMapNo; char *toonAnim; -s16 layerNum[8]; -s32 layerHook[8]; -char *reflectAnim[5]; -char *hiliteAnim[4]; -ThreeDProjectionStruct Hu3DProjection[4]; -ThreeDShadowStruct Hu3DShadowData; GXColor BGColor; -f32 lbl_801D4AFC; +void Hu3DAnimInit(void); +void Hu3DFogClear(void); +void Hu3DLighInit(void); +void Hu3DMotionInit(void); +void Hu3DParManInit(void); +char *HuSprAnimRead(char*); +void HuSprAnimKill(s32); + + +extern s16 Hu3DCameraBit; +extern s16 Hu3DCameraNo; +extern f32 lbl_801D4AB4; +extern f32 lbl_801D4AFC; +extern GXColor lbl_801D6BE0; +extern s32 shadowModelDrawF; +extern u32 totalMatCnt; +extern u32 totalMatCnted; +extern u32 totalPolyCnt; +extern u32 totalTexCacheCnt; +extern u32 totalTexCacheCnted; +extern u32 totalTexCnt; +extern u32 totalTexCnted; void Hu3DInit(void) { - ThreeDDataStruct* data; + ModelData* data; ThreeDCameraStruct* camera; s16 i; data = Hu3DData; for (i = 0; i < 0x200; i++, data++) { - data->unk_C4 = NULL; + data->hsfData = NULL; } camera = Hu3DCamera; for (i = 0; i < 0x10; i++, camera++) { @@ -176,6 +113,187 @@ void Hu3DInit(void) { NoSyncF = 0; } +void Hu3DPreProc(void) { + u8 spB; + u8 spA; + u8 sp9; + GXColor sp8; + ModelData *var_r31; + s16 var_r30; + + GXSetCopyClear(BGColor, 0xFFFFFF); + var_r31 = &Hu3DData[0]; + for (var_r30 = 0; var_r30 < 0x200; var_r31++) { + if (var_r31->hsfData != 0) { + var_r31->unk_50 &= 0xFFFFF7FF; + } + var_r30++; + } + totalPolyCnted = totalPolyCnt; + totalMatCnted = totalMatCnt; + totalTexCnted = totalTexCnt; + totalTexCacheCnted = totalTexCacheCnt; + totalPolyCnt = totalMatCnt = totalTexCnt = totalTexCacheCnt = 0; +} + +void Hu3DExec(void) { + GXColor spC; + GXColor sp8; + ThreeDCameraStruct* var_r27; + ModelData* var_r30; + ModelData* var_r30_2; + s16 temp_r22; + s16 var_r23; + s16 var_r25; + s16 var_r24; + s16 j; + s16 i; + void (* temp)(s16); + Mtx sp40; + Mtx sp10; + ThreeDProjectionStruct* var_r26; + + spC = lbl_801D6BE0; + HuPerfBegin(3); + GXSetCurrentMtx(0U); + var_r27 = Hu3DCamera; + shadowModelDrawF = 0; + HuSprBegin(); + var_r24 = 0; + for (Hu3DCameraNo = 0; Hu3DCameraNo < 0x10; Hu3DCameraNo++, var_r27++) { + if (lbl_801D4AB0 != var_r27->unk_00) { + GXInvalidateVtxCache(); + temp_r22 = (s16) (1 << Hu3DCameraNo); + Hu3DCameraBit = temp_r22; + if (NoSyncF == 0) { + if (Hu3DCameraNo == 0 && Hu3DShadowF != 0 && Hu3DShadowCamBit != 0) { + Hu3DShadowExec(); + var_r24 = 1; + GXSetDrawDone(); + } else if (Hu3DCameraNo != 0) { + var_r24 = 1; + GXSetDrawDone(); + } + } else if (Hu3DCameraNo == 0 && Hu3DShadowF != 0 && Hu3DShadowCamBit != 0) { + Hu3DShadowExec(); + } + var_r26 = &Hu3DProjection[0]; + for (i = 0; i < 4; i++, var_r26++) { + if (var_r26->unk_04 != 0) { + C_MTXLookAt(var_r26->unk_38, &var_r26->unk_14, &var_r26->unk_2C, &var_r26->unk_20); + } + } + if (Hu3DCameraNo == 0) { + HuSprDispInit(); + HuSprExec(0x7F); + } + if (FogData.fogType != GX_FOG_NONE) { + GXSetFog(FogData.fogType, FogData.start, FogData.end, var_r27->start, var_r27->end, FogData.color); + } + for (j = 0; j < 8; j++) { + if (layerHook[j] != 0) { + Hu3DCameraSet(Hu3DCameraNo, Hu3DCameraMtx); + PSMTXInvXpose(Hu3DCameraMtx, Hu3DCameraMtxXPose); + temp = layerHook[j]; + temp(j); + } + if (layerNum[j] != 0) { + Hu3DDrawPreInit(); + Hu3DCameraSet(Hu3DCameraNo, Hu3DCameraMtx); + PSMTXInvXpose(Hu3DCameraMtx, Hu3DCameraMtxXPose); + var_r30 = Hu3DData; + for (i = 0, var_r23 = i; i < 0x200; i++, var_r30++) { + if (var_r30->hsfData != 0) { + if ((var_r30->unk_50 & 0x10000) != 0) { + Hu3DCameraMotionExec(i); + } else { + if ((var_r30->unk_50 & 0x2001) == 0x2001 && var_r30->unk_08 != -1) { + Hu3DMotionExec(i, var_r30->unk_08, var_r30->unk_64, 0); + } + if ((var_r30->unk_50 & 9) == 0 && (var_r30->unk_22 & temp_r22) != 0 && var_r30->unk_06 == j) { + if (((var_r30->unk_50 & 0x800) == 0 && (var_r30->unk_50 & 0x100) == 0) || ((var_r30->unk_50 & 0x100) != 0 && (var_r30->unk_00 & 1) != 0)) { + var_r25 = 0; + var_r30->unk_54 &= 0xBFFFFFFF; + if (var_r30->unk_08 != -1) { + Hu3DMotionExec(i, var_r30->unk_08, var_r30->unk_64, 0); + } + if (var_r30->unk_0C != -1) { + Hu3DSubMotionExec(i); + } + if (var_r30->unk_0A != -1) { + Hu3DMotionExec(i, var_r30->unk_0A, var_r30->unk_74, 1); + } + if ((var_r30->unk_50 & 0x400) != 0) { + ClusterMotionExec(var_r30); + var_r25 = 1; + } + if (var_r30->unk_0E != -1) { + if (var_r30->unk_08 == -1) { + Hu3DMotionExec(i, var_r30->unk_0E, var_r30->unk_94, 0); + } else { + Hu3DMotionExec(i, var_r30->unk_0E, var_r30->unk_94, 1); + } + var_r25 = 1; + } + if ((var_r30->unk_50 & 0x90) == 0 && (var_r30->unk_54 & 0x40000002) == 0) { + var_r25 = 1; + InitVtxParm(var_r30->hsfData); + if (var_r30->unk_0E != -1) { + ShapeProc(var_r30->hsfData); + } + if ((var_r30->unk_50 & 0x400) != 0) { + ClusterProc(var_r30); + } + if (var_r30->hsfData->cenvCnt != 0) { + EnvelopeProc(var_r30->hsfData); + } + PPCSync(); + } + if (var_r25 != 0) { + GXInvalidateVtxCache(); + } + var_r30->unk_50 |= 0x800; + } + if (var_r24 != 0 && (var_r30->unk_50 & 0x10) != 0) { + GXWaitDrawDone(); + var_r24 = 0; + } + if ((var_r30->unk_50 & 0x8000) == 0 && (lbl_801D4AB4 != var_r30->unk_E4 || lbl_801D4AB4 != var_r30->unk_E8 || lbl_801D4AB4 != var_r30->unk_EC)) { + mtxRot(sp40, var_r30->unk_D8, var_r30->unk_DC, var_r30->unk_E0); + mtxScaleCat(sp40, var_r30->unk_E4, var_r30->unk_E8, var_r30->unk_EC); + mtxTransCat(sp40, var_r30->unk_CC, var_r30->unk_D0, var_r30->unk_D4); + PSMTXConcat(Hu3DCameraMtx, sp40, sp10); + PSMTXConcat(sp10, var_r30->unk_F0, sp10); + Hu3DDraw(var_r30, sp10[0], &var_r30->unk_E4); + } + var_r30->unk_00++; + var_r23++; + if (var_r23 >= layerNum[j]) { + break; + } + } + } + } + } + Hu3DDrawPost(); + } + } + } + } + HuSprDispInit(); + HuSprExec(0); + var_r30 = Hu3DData; + for (i = 0; i < 0x200; i++, var_r30++) { + if (var_r30->hsfData != 0 && (var_r30->unk_08 != -1 || (var_r30->unk_50 & 0x400) != 0 || var_r30->unk_0E != -1) && (Hu3DPauseF == 0 || (var_r30->unk_50 & 0x200000) != 0)) { + Hu3DMotionNext(i); + } + } + HuSprFinish(); + Hu3DAnimExec(); + HuPerfEnd(3); +} + + void Hu3DShadowSizeSet(u16 arg0) { Hu3DShadowData.unk_02 = arg0; if (Hu3DShadowData.unk_04 != 0) { @@ -198,3 +316,66 @@ void Hu3DProjectionPosSet(s16 arg0, Vec arg1, Vec arg2, Vec arg3) { void Hu3DProjectionTPLvlSet(s16 arg0, f32 arg8) { Hu3DProjection[arg0].unk_00 = (s8) (lbl_801D4AFC * arg8); } + +void Hu3DMipMapSet(char* arg0, s16 arg1, s32 arg2, f32 arg8) { + HsfBitmap* temp_r31; + AnimBmpData* var_r30; + s16 i; + HsfData* temp_r27; + HsfAttribute* var_r26; + ModelData* temp_r25; + s32 var_r24; + void *var_r23; + void* temp_r22; + AnimData* temp_r3; + + temp_r25 = &Hu3DData[arg1]; + temp_r27 = temp_r25->hsfData; + var_r26 = temp_r27->attribute; + for (i = 0; i < temp_r27->attributeCnt; i++, var_r26++) { + if (strcmp(arg2, var_r26->bitmap->name) == 0) { + break; + } + } + if (i == temp_r27->attributeCnt) { + OSReport(lbl_8012D630, arg2); + return; + } + temp_r31 = var_r26->bitmap; + temp_r3 = HuSprAnimRead(arg0); + var_r30 = temp_r3->bmp; + for ( i = 0, var_r24 = i; i < temp_r3->bmpNum; i++, var_r30++) { + var_r24 += var_r30->dataSize; + } + var_r23 = HuMemDirectMallocNum(HEAP_DATA, var_r24, temp_r25->unk_48); + temp_r22 = var_r23; + var_r30 = temp_r3->bmp; + temp_r31->data = temp_r22; + temp_r31->sizeX = var_r30->sizeX; + temp_r31->sizeY = var_r30->sizeY; + temp_r31->palSize = var_r30->palNum; + temp_r31->palData = var_r30->palData; + temp_r31->maxLod = temp_r3->bmpNum; + switch (var_r30->dataFmt) { /* irregular */ + case 0: + temp_r31->dataFmt = 6; + break; + case 2: + temp_r31->dataFmt = 5; + break; + case 3: + temp_r31->dataFmt = 0xA; + temp_r31->pixSize = 8; + break; + case 4: + temp_r31->dataFmt = 0xA; + temp_r31->pixSize = 4; + break; + } + + for (i = 0; i < temp_r3->bmpNum; i++, var_r30++) { + memcpy(var_r23, var_r30->data, var_r30->dataSize); + var_r23 = (void*) ((int) var_r23 + var_r30->dataSize); + } + DCFlushRange(temp_r22, var_r24); +} From 303f4da0914bc8332f0c62c402d3cb902a64445c Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 6 Dec 2023 19:38:14 -0500 Subject: [PATCH 4/4] "include guards" what a silly name --- include/game/hsfman.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/game/hsfman.h b/include/game/hsfman.h index ebe0b43c..a07dad08 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -1,3 +1,6 @@ +#ifndef _GAME_HSFMAN_H +#define _GAME_HSFMAN_H + #include "common.h" #include "game/memory.h" #include "game/hsfformat.h" @@ -70,3 +73,4 @@ typedef struct fog_data { f32 end; GXColor color; } FogStruct; +#endif