diff --git a/config/GMPE01_00/rels/m446dll/symbols.txt b/config/GMPE01_00/rels/m446dll/symbols.txt index bdae2793..0900c8ff 100644 --- a/config/GMPE01_00/rels/m446dll/symbols.txt +++ b/config/GMPE01_00/rels/m446dll/symbols.txt @@ -110,7 +110,7 @@ fn_1_709C = .text:0x0000709C; // type:function size:0x244 fn_1_72E0 = .text:0x000072E0; // type:function size:0x18 fn_1_72F8 = .text:0x000072F8; // type:function size:0x58 fn_1_7350 = .text:0x00007350; // type:function size:0x1A4 -fn_1_74F4 = .text:0x000074F4; // type:function size:0x1F4 +m446CursorCreate = .text:0x000074F4; // type:function size:0x1F4 fn_1_76E8 = .text:0x000076E8; // type:function size:0xE0 fn_1_77C8 = .text:0x000077C8; // type:function size:0xBC fn_1_7884 = .text:0x00007884; // type:function size:0x84 @@ -121,18 +121,18 @@ fn_1_7AB4 = .text:0x00007AB4; // type:function size:0x13C fn_1_7BF0 = .text:0x00007BF0; // type:function size:0x18 fn_1_7C08 = .text:0x00007C08; // type:function size:0x58 fn_1_7C60 = .text:0x00007C60; // type:function size:0x460 -fn_1_80C0 = .text:0x000080C0; // type:function size:0x330 +m446StageCreate = .text:0x000080C0; // type:function size:0x330 fn_1_83F0 = .text:0x000083F0; // type:function size:0xBC fn_1_84AC = .text:0x000084AC; // type:function size:0x80 fn_1_852C = .text:0x0000852C; // type:function size:0xE0 fn_1_860C = .text:0x0000860C; // type:function size:0xC _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x8 data:double -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x30 data:4byte -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x8 scope:local data:double +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x30 scope:local data:4byte +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:float lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x14 scope:local lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x14 scope:local lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double @@ -229,19 +229,19 @@ lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data: lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:double lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 data:double -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0xC lbl_1_data_C = .data:0x0000000C; // type:object size:0xC lbl_1_data_18 = .data:0x00000018; // type:object size:0x4 data:float @@ -252,7 +252,7 @@ lbl_1_data_38 = .data:0x00000038; // type:object size:0x18 lbl_1_data_50 = .data:0x00000050; // type:object size:0x18 lbl_1_data_68 = .data:0x00000068; // type:object size:0x8 lbl_1_data_70 = .data:0x00000070; // type:object size:0x10 -lbl_1_data_80 = .data:0x00000080; // type:object size:0x20 +lbl_1_data_80 = .data:0x00000080; // type:object size:0x20 scope:local lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x14 jumptable_1_data_B4 = .data:0x000000B4; // type:object size:0x30 scope:local jumptable_1_data_E4 = .data:0x000000E4; // type:object size:0x68 scope:local @@ -280,7 +280,7 @@ lbl_1_data_410 = .data:0x00000410; // type:object size:0x14 lbl_1_data_424 = .data:0x00000424; // type:object size:0x3C lbl_1_data_460 = .data:0x00000460; // type:object size:0x54 data:byte lbl_1_data_4B4 = .data:0x000004B4; // type:object size:0x24 -lbl_1_data_4D8 = .data:0x000004D8; // type:object size:0x1E data:string +lbl_1_data_4D8 = .data:0x000004D8; // type:object size:0x1E scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index ac873397..7feb3c28 100644 --- a/configure.py +++ b/configure.py @@ -1195,7 +1195,7 @@ config.libs = [ Object(Matching, "REL/m446Dll/player.c"), Object(Matching, "REL/m446Dll/camera.c"), Object(Matching, "REL/m446Dll/cursor.c"), - Object(NonMatching, "REL/m446Dll/stage.c"), + Object(Matching, "REL/m446Dll/stage.c"), }, ), Rel( diff --git a/include/REL/m446Dll.h b/include/REL/m446Dll.h index f6fa460c..df708146 100644 --- a/include/REL/m446Dll.h +++ b/include/REL/m446Dll.h @@ -3,6 +3,7 @@ #include "game/process.h" #include "game/object.h" +////// TYPES ////// typedef struct _unkStruct { s32 unk0; s16 unk4; @@ -14,7 +15,7 @@ typedef struct _unkStruct { s32 unk18; s32 unk1C; struct _unkStruct6* unk20; - s32 unk24; + struct _unkStruct9* unk24; struct _unkStruct5* unk28; struct _unkStruct8* unk2C[2]; struct _unkStruct4* unk34; @@ -24,7 +25,7 @@ typedef struct _unkStruct { } unkStruct; typedef struct _unkStruct2 { - struct _unkStruct4* *unk0; + void** unk0; s32 unk4; s32 unk8; } unkStruct2; @@ -40,8 +41,7 @@ typedef struct _unkStruct4 { s32 unk4; u8 unk8; u8 unk9; - s16 unkA; - s16 unkC; + s16 unkA[2]; s16 unkE; Vec unk10; Vec unk1C; @@ -145,12 +145,34 @@ typedef struct _unkStruct8 { s32 unkC8; } unkStruct8; +typedef struct _unkStruct9 { + s16 unk0[5]; + s16 unkA[2]; + s16 unkE; + f32 unk10; + f32 unk14; + s32 unk18; + s32 unk1C; + s32 unk20; + s32 unk24; + s32 unk28; + s32 unk2C; +} unkStruct9; + +typedef struct _unkStruct10 { + Vec unk0; + Vec unkC; + GXColor unk18; +} unkStruct10; + typedef void (*m446Func)(s32); typedef void (*m446Func1)(unkStruct*); typedef void (*m446Func4)(unkStruct4*); typedef void (*m446Func8)(unkStruct8*); ////// BSS ////// +// stage.c +extern unkStruct3* lbl_1_bss_A0; // cursor.c extern unkStruct3* lbl_1_bss_98; // camera.c @@ -193,6 +215,7 @@ extern f32 lbl_1_data_34; extern Vec lbl_1_data_38[2]; extern Vec lbl_1_data_50[2]; extern f32 lbl_1_data_68[2]; +extern s32 lbl_1_data_70[2][2]; extern m446Func1 lbl_1_data_A0[5]; // card.c extern m446Func4 lbl_1_data_150[3]; @@ -204,6 +227,10 @@ extern m446Func8 lbl_1_data_2DC[5]; extern Vec lbl_1_data_370; // cursor.c extern s32 lbl_1_data_3C8[9]; +// stage.c +extern unkStruct10 lbl_1_data_460[3]; +extern Vec lbl_1_data_424[5]; +extern Vec lbl_1_data_4B4[3]; ////// PROTOTYPES ////// // main.c @@ -225,9 +252,9 @@ extern void fn_1_19D4(void); // card.c extern unkStruct2* fn_1_1C64(s32); extern void fn_1_1CF8(unkStruct2*); -extern s32 fn_1_1D30(unkStruct2*, unkStruct4*); +extern s32 fn_1_1D30(unkStruct2*, void*); extern s32 fn_1_1D6C(unkStruct2*, unkStruct4**); -extern s32 fn_1_1DA8(unkStruct2*, unkStruct4**); +extern s32 fn_1_1DA8(unkStruct2*, void**); extern BOOL fn_1_1DDC(unkStruct2*); extern s32 fn_1_1DEC(unkStruct2*); extern unkStruct3* fn_1_1DF4(void*); @@ -320,11 +347,20 @@ extern void fn_1_709C(void); extern s32 fn_1_72E0(void); extern void fn_1_72F8(void); extern void fn_1_7350(void); -extern unkStruct7* fn_1_74F4(s32); +extern unkStruct7* m446CursorCreate(s32); extern void fn_1_76E8(unkStruct7*); extern void fn_1_77C8(unkStruct7*, u8); extern void fn_1_7884(unkStruct7*); extern void fn_1_7908(unkStruct7*, Vec*, s32); extern void fn_1_799C(unkStruct7*); extern void fn_1_7A38(unkStruct7*); -extern void fn_1_7AB4(unkStruct7*); \ No newline at end of file +extern void fn_1_7AB4(unkStruct7*); +// stage.c +extern s32 fn_1_7BF0(void); +extern void fn_1_7C08(void); +extern void fn_1_7C60(void); +extern unkStruct9* m446StageCreate(void); +extern void fn_1_83F0(unkStruct9*); +extern void fn_1_84AC(unkStruct9*); +extern void fn_1_852C(unkStruct9*); +extern void fn_1_860C(unkStruct9*); \ No newline at end of file diff --git a/src/REL/m446Dll/card.c b/src/REL/m446Dll/card.c index eac82b2b..8f4c5f72 100644 --- a/src/REL/m446Dll/card.c +++ b/src/REL/m446Dll/card.c @@ -33,7 +33,7 @@ void fn_1_1CF8(unkStruct2* arg0) { HuMemDirectFree(arg0); } -s32 fn_1_1D30(unkStruct2* arg0, unkStruct4* arg1) { +s32 fn_1_1D30(unkStruct2* arg0, void* arg1) { if (arg0->unk4 <= arg0->unk8) { return 0; } else { @@ -53,7 +53,7 @@ s32 fn_1_1D6C(unkStruct2* arg0, unkStruct4** arg1) { } } -s32 fn_1_1DA8(unkStruct2* arg0, unkStruct4** arg1) { +s32 fn_1_1DA8(unkStruct2* arg0, void** arg1) { if (arg0->unk8 <= 0) { return 0; } else { @@ -174,7 +174,7 @@ s32 fn_1_2064(void) { } void fn_1_207C(void) { - void* var_r30; + unkStruct4* var_r30; unkStruct3* var_r31; var_r31 = lbl_1_bss_18; @@ -271,14 +271,14 @@ unkStruct4* m446CardCreate(s32 arg0) { temp_r31->unk74 = 0; temp_r31->unk78 = 0; temp_r31->unk7C = 0; - temp_r31->unkA = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_rodata_58[arg0], 0x10000000, HEAP_DATA)); - Hu3DModelAmbSet(temp_r31->unkA, 0.0f, 0.0f, 0.0f); - Hu3DModelShadowSet(temp_r31->unkA); - Hu3DModelLayerSet(temp_r31->unkA, 0); - temp_r31->unkC = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_rodata_6C[arg0], 0x10000000, HEAP_DATA)); - Hu3DModelAmbSet(temp_r31->unkC, 1.0f, 1.0f, 1.0f); - Hu3DModelAttrSet(temp_r31->unkC, 0x40000001U); - Hu3DModelLayerSet(temp_r31->unkA, 0); + temp_r31->unkA[0] = Hu3DModelCreateFile(lbl_1_rodata_58[arg0]); + Hu3DModelAmbSet(temp_r31->unkA[0], 0.0f, 0.0f, 0.0f); + Hu3DModelShadowSet(temp_r31->unkA[0]); + Hu3DModelLayerSet(temp_r31->unkA[0], 0); + temp_r31->unkA[1] = Hu3DModelCreateFile(lbl_1_rodata_6C[arg0]); + Hu3DModelAmbSet(temp_r31->unkA[1], 1.0f, 1.0f, 1.0f); + Hu3DModelAttrSet(temp_r31->unkA[1], 0x40000001U); + Hu3DModelLayerSet(temp_r31->unkA[0], 0); fn_1_2A58(temp_r31); fn_1_2EC0(temp_r31, 1); temp_r30 = fn_1_1DF4(temp_r31); @@ -297,22 +297,20 @@ unkStruct4* m446CardCreate(s32 arg0) { void fn_1_2688(unkStruct4* arg0) { unkStruct3* var_r31 = lbl_1_bss_18; -loop_1: - if (arg0 == var_r31->unk0) { - if (var_r31 == lbl_1_bss_18) { - lbl_1_bss_18 = var_r31->unk8; + do { + if (arg0 == var_r31->unk0) { + if (var_r31 == lbl_1_bss_18) { + lbl_1_bss_18 = var_r31->unk8; + } + fn_1_1F04(var_r31); + fn_1_1E5C(var_r31); + Hu3DModelKill(arg0->unkA[0]); + Hu3DModelKill(arg0->unkA[1]); + HuMemDirectFree(arg0); + return; } - fn_1_1F04(var_r31); - fn_1_1E5C(var_r31); - Hu3DModelKill(arg0->unkA); - Hu3DModelKill(arg0->unkC); - HuMemDirectFree(arg0); - return; - } - var_r31 = var_r31->unk8; - if (var_r31) { - goto loop_1; - } + var_r31 = var_r31->unk8; + } while (var_r31); } void fn_1_272C(unkStruct4* arg0) { @@ -369,12 +367,12 @@ void fn_1_29B4(unkStruct4* arg0, f32 arg8, s32 arg1) { } void fn_1_2A1C(unkStruct4* arg0) { - Hu3DModelAttrReset(arg0->unkC, 1); + Hu3DModelAttrReset(arg0->unkA[1], 1); arg0->unk6C = 1; } void fn_1_2A58(unkStruct4* arg0) { - Hu3DModelAttrSet(arg0->unkC, 1); + Hu3DModelAttrSet(arg0->unkA[1], 1); arg0->unk6C = 0; } @@ -389,7 +387,7 @@ void fn_1_2AA8(unkStruct4* arg0) { switch (arg0->unk8) { case 0: arg0->unk8 = 1; - Hu3DModelAttrReset(arg0->unkC, 1); + Hu3DModelAttrReset(arg0->unkA[1], 1); arg0->unk6C = 1; arg0->unk8 = 1; // ? case 1: @@ -457,7 +455,7 @@ void fn_1_2AA8(unkStruct4* arg0) { if (arg0->unk78 != 0) break; arg0->unk4 = 0; arg0->unk8 = 0; - Hu3DModelAttrSet(arg0->unkC, 1); + Hu3DModelAttrSet(arg0->unkA[1], 1); arg0->unk6C = 0; return; } @@ -502,25 +500,25 @@ void fn_1_2DA8(unkStruct4* arg0) { void fn_1_2EC0(unkStruct4* arg0, s32 arg1) { if (arg1 != 0) { - Hu3DModelShadowDispOn(arg0->unkA); - Hu3DModelAmbSet(arg0->unkA, 0.0f, 0.0f, 0.0f); + Hu3DModelShadowDispOn(arg0->unkA[0]); + Hu3DModelAmbSet(arg0->unkA[0], 0.0f, 0.0f, 0.0f); return; } - Hu3DModelShadowDispOff(arg0->unkA); - Hu3DModelAmbSet(arg0->unkA, 1.0f, 1.0f, 1.0f); + Hu3DModelShadowDispOff(arg0->unkA[0]); + Hu3DModelAmbSet(arg0->unkA[0], 1.0f, 1.0f, 1.0f); } void fn_1_2F64(unkStruct4* arg0) { if ((arg0->unk58 > 1.0f) || (arg0->unk58 < 1.0f)) { - Hu3DModelLayerSet(arg0->unkA, 1); - Hu3DModelLayerSet(arg0->unkC, 1); + Hu3DModelLayerSet(arg0->unkA[0], 1); + Hu3DModelLayerSet(arg0->unkA[1], 1); } else { - Hu3DModelLayerSet(arg0->unkA, 0); - Hu3DModelLayerSet(arg0->unkC, 0); + Hu3DModelLayerSet(arg0->unkA[0], 0); + Hu3DModelLayerSet(arg0->unkA[1], 0); } - Hu3DModelPosSet(arg0->unkA, arg0->unk10.x, arg0->unk10.y, arg0->unk10.z); - Hu3DModelPosSet(arg0->unkC, arg0->unk10.x, 0.1f + arg0->unk10.y, arg0->unk10.z); - Hu3DModelScaleSet(arg0->unkA, arg0->unk58, arg0->unk58, arg0->unk58); - Hu3DModelScaleSet(arg0->unkC, arg0->unk58, arg0->unk58, arg0->unk58); - Hu3DModelRotSet(arg0->unkA, arg0->unk34.x, arg0->unk34.y, arg0->unk34.z); + Hu3DModelPosSet(arg0->unkA[0], arg0->unk10.x, arg0->unk10.y, arg0->unk10.z); + Hu3DModelPosSet(arg0->unkA[1], arg0->unk10.x, 0.1f + arg0->unk10.y, arg0->unk10.z); + Hu3DModelScaleSet(arg0->unkA[0], arg0->unk58, arg0->unk58, arg0->unk58); + Hu3DModelScaleSet(arg0->unkA[1], arg0->unk58, arg0->unk58, arg0->unk58); + Hu3DModelRotSet(arg0->unkA[0], arg0->unk34.x, arg0->unk34.y, arg0->unk34.z); } \ No newline at end of file diff --git a/src/REL/m446Dll/cursor.c b/src/REL/m446Dll/cursor.c index 03c21389..6c67c262 100644 --- a/src/REL/m446Dll/cursor.c +++ b/src/REL/m446Dll/cursor.c @@ -65,7 +65,7 @@ void fn_1_7350(void) { } } -unkStruct7* fn_1_74F4(s32 arg0) { +unkStruct7* m446CursorCreate(s32 arg0) { s32 var_r30; unkStruct7* var_r31; unkStruct3* var_r29; diff --git a/src/REL/m446Dll/deck.c b/src/REL/m446Dll/deck.c index 0e14dc2d..df75516a 100644 --- a/src/REL/m446Dll/deck.c +++ b/src/REL/m446Dll/deck.c @@ -39,7 +39,7 @@ unkStruct5* fn_1_3064(void) { return temp_r3; } -void fn_1_3180(unkStruct2** arg0) { // typing nightmare +void fn_1_3180(unkStruct2** arg0) { unkStruct4* sp8; while (fn_1_1D6C(*arg0, &sp8) != 0) { diff --git a/src/REL/m446Dll/main.c b/src/REL/m446Dll/main.c index b91e036c..1a4d425b 100644 --- a/src/REL/m446Dll/main.c +++ b/src/REL/m446Dll/main.c @@ -10,14 +10,6 @@ #include "game/frand.h" #include "game/minigame_seq.h" -// stage.c -extern s32 fn_1_7BF0(void); -extern void fn_1_7C08(void); -extern void fn_1_7C60(void); -extern s32 fn_1_80C0(void); -extern void fn_1_83F0(s32); -extern void fn_1_84AC(s32); - // bss s32 lbl_1_bss_14; s32 lbl_1_bss_10; @@ -106,7 +98,7 @@ unkStruct* m446FlowCreate(void) { temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x9C, 0x10000000); if (temp_r3 == 0) { - OSReport("[!] m446FlowCreate() ERROR"); + OSReport("[!] m446FlowCreate() ERROR...\n"); return NULL; } temp_r3->unk4 = -1; @@ -120,7 +112,7 @@ unkStruct* m446FlowCreate(void) { for (var_r30 = 0; var_r30 < 23; var_r30++) { temp_r3->unk38[var_r30] = 0; } - temp_r3->unk24 = fn_1_80C0(); + temp_r3->unk24 = m446StageCreate(); temp_r3->unk20 = fn_1_39D0(); lbl_1_bss_10 = 0; diff --git a/src/REL/m446Dll/player.c b/src/REL/m446Dll/player.c index 7144e7fc..6055f092 100644 --- a/src/REL/m446Dll/player.c +++ b/src/REL/m446Dll/player.c @@ -9,7 +9,7 @@ #include "game/objsub.h" // cursor.c -extern unkStruct7 *fn_1_74F4(s32); +extern unkStruct7 *m446CursorCreate(s32); extern void fn_1_76E8(unkStruct7*); extern void fn_1_77C8(unkStruct7*, u8); @@ -167,7 +167,7 @@ unkStruct8* m446PlayerCreate(s32 arg0, unkStruct6* arg1) { for (var_r30 = 0; var_r30 < 3; var_r30++) { var_r31->unk2C[var_r30] = NULL; } - var_r31->unk8 = fn_1_74F4(1); + var_r31->unk8 = m446CursorCreate(1); if (!var_r31->unk8) { HuMemDirectFree(var_r31); return NULL; diff --git a/src/REL/m446Dll/stage.c b/src/REL/m446Dll/stage.c new file mode 100644 index 00000000..11fbfee3 --- /dev/null +++ b/src/REL/m446Dll/stage.c @@ -0,0 +1,211 @@ +#include "REL/m446Dll.h" + +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +// bss +unkStruct3* lbl_1_bss_A0; + +// data +s32 lbl_1_data_410[5] = { 0x4D0008, 0x4D0007, 0x4D0006, 0x4D001F, 0x4D001F }; +Vec lbl_1_data_424[5] = { + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.1f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 160.0f, 160.0f, 0.0f }, + { -160.0f, 160.0f, 0.0f }, +}; +unkStruct10 lbl_1_data_460[3] = { + { + { 160.0f, 160.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0xFF, 0xFF, 0xFF, 0xFF } + }, + { + { -160.0f, 160.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0xFF, 0xFF, 0xFF, 0xFF } + }, + { + { 0.0f, 160.0f, 500.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0xB0, 0xB0, 0xB0, 0xFF } + } +}; +Vec lbl_1_data_4B4[3] = { + { 1.0f, 3000.0f, 1.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, +}; + +s32 fn_1_7BF0(void) { + lbl_1_bss_A0 = 0; + return 1; +} + +void fn_1_7C08(void) { + unkStruct3* var_r31; + unkStruct9* var_r30; + + var_r31 = lbl_1_bss_A0; + if (var_r31) { + do { + var_r30 = var_r31->unk0; + fn_1_2688((unkStruct4*)var_r30); // ??? + var_r31 = var_r31->unk8; + } while (var_r31); + } +} + +void fn_1_7C60(void) { + s32 var_r30; + unkStruct3* var_r29; + unkStruct9* temp_r31; + + var_r29 = lbl_1_bss_A0; + if (var_r29) { + do { + temp_r31 = var_r29->unk0; + if ((temp_r31->unk28 != 0) && (temp_r31->unk14 < 1.0f)) { + if ((temp_r31->unk14 += 0.002f) > 1.0f) { + temp_r31->unk14 = 1.0f; + } + Hu3DGLightColorSet(temp_r31->unkA[2], lbl_1_data_460[2].unk18.r * temp_r31->unk14, lbl_1_data_460[2].unk18.g * temp_r31->unk14, lbl_1_data_460[2].unk18.b * temp_r31->unk14, lbl_1_data_460[2].unk18.a * temp_r31->unk14); + } + if (temp_r31->unk24 != 0) { + for (var_r30 = 0; var_r30 <= 1; var_r30++) { + if (temp_r31->unk10 < 1.0f) { + if ((temp_r31->unk10 += 0.002f) > 1.0f) { + temp_r31->unk10 = 1.0f; + } + Hu3DGLightColorSet(temp_r31->unkA[var_r30], temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.r, temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.g, temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.b, temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.a); + } + } + if ((temp_r31->unk18 == 0) && (Hu3DMotionEndCheck(temp_r31->unk0[2]) != 0)) { + Hu3DMotionStartEndSet(temp_r31->unk0[2], 180.0f, 359.0f); + Hu3DModelAttrSet(temp_r31->unk0[2], 0x40000001); + temp_r31->unk18 = 1; + } + if ((temp_r31->unk1C == 0) && (Hu3DMotionEndCheck(temp_r31->unk0[3]) != 0)) { + Hu3DMotionStartEndSet(temp_r31->unk0[3], 120.0f, 159.0f); + Hu3DModelAttrSet(temp_r31->unk0[3], 0x40000001); + temp_r31->unk1C = 1; + } + if ((temp_r31->unk20 == 0) && (Hu3DMotionEndCheck(temp_r31->unk0[4]) != 0)) { + Hu3DMotionStartEndSet(temp_r31->unk0[4], 120.0f, 159.0f); + Hu3DModelAttrSet(temp_r31->unk0[4], 0x40000001); + temp_r31->unk20 = 1; + } + } + var_r29 = var_r29->unk8; + } while (var_r29); + } +} + +unkStruct9* m446StageCreate(void) { + s32 var_r30; + unkStruct3* var_r29; + unkStruct3* temp_ret; + unkStruct9* var_r31; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x30, 0x10000000); + if (!var_r31) { + return NULL; + } + var_r31->unk10 = 0.0f; + var_r31->unk14 = 0.0f; + var_r31->unk18 = 0; + var_r31->unk1C = 0; + var_r31->unk20 = 0; + var_r31->unk24 = 0; + var_r31->unk28 = 0; + var_r31->unk2C = 0; + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + var_r31->unk0[var_r30] = Hu3DModelCreateFile(lbl_1_data_410[var_r30]); + Hu3DModelPosSet(var_r31->unk0[var_r30], lbl_1_data_424[var_r30].x, lbl_1_data_424[var_r30].y, lbl_1_data_424[var_r30].z); + } + Hu3DModelAttrSet(var_r31->unk0[3], 1); + Hu3DModelAttrSet(var_r31->unk0[4], 1); + Hu3DModelAttrSet(var_r31->unk0[3], 0x40000002); + Hu3DModelAttrSet(var_r31->unk0[4], 0x40000002); + Hu3DModelAttrReset(var_r31->unk0[3], 0x40000001); + Hu3DModelAttrReset(var_r31->unk0[4], 0x40000001); + Hu3DModelAttrReset(var_r31->unk0[2], 0x40000001); + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r31->unkA[var_r30] = Hu3DGLightCreateV(&lbl_1_data_460[var_r30].unk0, &lbl_1_data_460[var_r30].unkC, &lbl_1_data_460[var_r30].unk18); + Hu3DGLightStaticSet(var_r31->unkA[var_r30], 1); + Hu3DGLightPointSet(var_r31->unkA[var_r30], 100.0f, 1.0f, 3); + Hu3DGLightColorSet(var_r31->unkA[var_r30], 0, 0, 0, 0); + } + Hu3DShadowCreate(30.0f, 20.0f, 20000.0f); + Hu3DShadowTPLvlSet(1.0f); + Hu3DShadowPosSet(&lbl_1_data_4B4[0], &lbl_1_data_4B4[1], &lbl_1_data_4B4[2]); + Hu3DModelShadowMapSet(var_r31->unk0[0]); + Hu3DModelShadowSet(var_r31->unk0[1]); + var_r29 = fn_1_1DF4(var_r31); + if (!var_r29) { + OSReport("[!] m446StageCreate ERROR...\n"); + HuMemDirectFree(var_r31); + return NULL; + } + if (lbl_1_bss_A0) { + fn_1_1EC8(lbl_1_bss_A0, var_r29); + } else { + lbl_1_bss_A0 = var_r29; + } + return var_r31; +} + +void fn_1_83F0(unkStruct9* arg0) { + s32 var_r30; + unkStruct3* var_r31; + + var_r31 = lbl_1_bss_A0; + do { + if (arg0 == var_r31->unk0) { + if (var_r31 == lbl_1_bss_A0) { + lbl_1_bss_A0 = var_r31->unk8; + } + fn_1_1F04(var_r31); + fn_1_1E5C(var_r31); + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + Hu3DModelKill(arg0->unk0[var_r30]); + } + HuMemDirectFree(arg0); + return; + } + var_r31 = var_r31->unk8; + } while (var_r31); +} + +void fn_1_84AC(unkStruct9* arg0) { + Hu3DModelAttrReset(arg0->unk0[3], 1); + Hu3DModelAttrReset(arg0->unk0[4], 1); + Hu3DModelAttrReset(arg0->unk0[3], 0x40000002); + Hu3DModelAttrReset(arg0->unk0[4], 0x40000002); + arg0->unk24 = 1; + arg0->unk1C = 0; + arg0->unk20 = 0; + arg0->unk18 = 0; +} + +void fn_1_852C(unkStruct9* arg0) { + Hu3DModelAttrSet(arg0->unk0[3], 1U); + Hu3DModelAttrSet(arg0->unk0[4], 1U); + Hu3DModelAttrSet(arg0->unk0[3], 0x40000002U); + Hu3DModelAttrSet(arg0->unk0[4], 0x40000002U); + Hu3DMotionStartEndSet(arg0->unk0[2], 0.0f, 359.0f); + Hu3DMotionStartEndSet(arg0->unk0[3], 0.0f, 119.0f); + Hu3DMotionStartEndSet(arg0->unk0[4], 0.0f, 119.0f); + arg0->unk24 = 0; + arg0->unk1C = 0; + arg0->unk20 = 0; + arg0->unk18 = 0; +} + +void fn_1_860C(unkStruct9* arg0) { + arg0->unk28 = 1; +} \ No newline at end of file diff --git a/src/REL/m446Dll/table.c b/src/REL/m446Dll/table.c index a1dee33a..56d45462 100644 --- a/src/REL/m446Dll/table.c +++ b/src/REL/m446Dll/table.c @@ -50,7 +50,7 @@ unkStruct6* fn_1_39D0(void) { Hu3DModelAmbSet(var_r31->unk4, 0.0f, 0.0f, 0.0f); Hu3DModelShadowMapSet(var_r31->unk4); Hu3DModelLayerSet(var_r31->unk4, 0); - var_r31->unk0 = fn_1_74F4(0); + var_r31->unk0 = m446CursorCreate(0); fn_1_7884(var_r31->unk0); var_r31->unk60 = 10; var_r31->unk5C = 0;