diff --git a/config/GMPE01_00/rels/modeltestDll/splits.txt b/config/GMPE01_00/rels/modeltestDll/splits.txt index f065b13e..9ff3fae5 100644 --- a/config/GMPE01_00/rels/modeltestDll/splits.txt +++ b/config/GMPE01_00/rels/modeltestDll/splits.txt @@ -17,12 +17,12 @@ REL/modeltestDll/main.c: REL/modeltestDll/modeltest00.c: .text start:0x000034B0 end:0x00004AC8 - .rodata start:0x00000130 end:0x000001E0 + .rodata start:0x00000130 end:0x000001C8 .data start:0x00000358 end:0x00000388 .bss start:0x000009A8 end:0x00000A00 REL/modeltestDll/modeltest01.c: .text start:0x00004AC8 end:0x000086B8 - .rodata start:0x000001E0 end:0x00000290 + .rodata start:0x000001C8 end:0x00000290 .data start:0x00000388 end:0x000007AE .bss start:0x00000A00 end:0x00000AC8 diff --git a/config/GMPE01_00/rels/modeltestDll/symbols.txt b/config/GMPE01_00/rels/modeltestDll/symbols.txt index 52d3b800..4b7a4796 100644 --- a/config/GMPE01_00/rels/modeltestDll/symbols.txt +++ b/config/GMPE01_00/rels/modeltestDll/symbols.txt @@ -102,39 +102,39 @@ lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data: lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC scope:local data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 data:double -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 data:float -lbl_1_rodata_244 = .rodata:0x00000244; // type:object size:0xC data:4byte -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0xC data:4byte -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 data:double -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0xC data:4byte -lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float -lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x8 scope:local data:double +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 scope:local data:float +lbl_1_rodata_244 = .rodata:0x00000244; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x8 scope:local data:double +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x20 data:4byte lbl_1_data_20 = .data:0x00000020; // type:object size:0x28 scope:local data:string lbl_1_data_48 = .data:0x00000048; // type:object size:0x9 scope:local data:string @@ -167,7 +167,7 @@ lbl_1_data_318 = .data:0x00000318; // type:object size:0xA scope:local data:stri lbl_1_data_322 = .data:0x00000322; // type:object size:0x36 lbl_1_data_358 = .data:0x00000358; // type:object size:0x8 lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 scope:local data:string -lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 data:string +lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 scope:local data:string lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x58 lbl_1_data_408 = .data:0x00000408; // type:object size:0x58 lbl_1_data_460 = .data:0x00000460; // type:object size:0x58 @@ -177,19 +177,19 @@ lbl_1_data_568 = .data:0x00000568; // type:object size:0x58 lbl_1_data_5C0 = .data:0x000005C0; // type:object size:0x58 lbl_1_data_618 = .data:0x00000618; // type:object size:0x58 lbl_1_data_670 = .data:0x00000670; // type:object size:0x20 -lbl_1_data_690 = .data:0x00000690; // type:object size:0x10 data:string -lbl_1_data_6A0 = .data:0x000006A0; // type:object size:0xD data:string -lbl_1_data_6AD = .data:0x000006AD; // type:object size:0xD data:string -lbl_1_data_6BA = .data:0x000006BA; // type:object size:0xD data:string -lbl_1_data_6C7 = .data:0x000006C7; // type:object size:0xB data:string -lbl_1_data_6D2 = .data:0x000006D2; // type:object size:0x8 data:string -lbl_1_data_6DA = .data:0x000006DA; // type:object size:0xF data:string -lbl_1_data_6E9 = .data:0x000006E9; // type:object size:0xB +lbl_1_data_690 = .data:0x00000690; // type:object size:0x10 scope:local data:string +lbl_1_data_6A0 = .data:0x000006A0; // type:object size:0xD scope:local data:string +lbl_1_data_6AD = .data:0x000006AD; // type:object size:0xD scope:local data:string +lbl_1_data_6BA = .data:0x000006BA; // type:object size:0xD scope:local data:string +lbl_1_data_6C7 = .data:0x000006C7; // type:object size:0xB scope:local data:string +lbl_1_data_6D2 = .data:0x000006D2; // type:object size:0x8 scope:local data:string +lbl_1_data_6DA = .data:0x000006DA; // type:object size:0xF scope:local data:string +lbl_1_data_6E9 = .data:0x000006E9; // type:object size:0xB scope:local lbl_1_data_6F4 = .data:0x000006F4; // type:object size:0x60 lbl_1_data_754 = .data:0x00000754; // type:object size:0x4 data:4byte lbl_1_data_758 = .data:0x00000758; // type:object size:0x12 lbl_1_data_76A = .data:0x0000076A; // type:object size:0x2E -lbl_1_data_798 = .data:0x00000798; // type:object size:0x14 +lbl_1_data_798 = .data:0x00000798; // type:object size:0x14 scope:local lbl_1_data_7AC = .data:0x000007AC; // type:object size:0x2 data:2byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:float lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte @@ -225,8 +225,10 @@ lbl_1_bss_9F8 = .bss:0x000009F8; // type:object size:0x8 data:4byte lbl_1_bss_A00 = .bss:0x00000A00; // type:object size:0x4 data:4byte lbl_1_bss_A04 = .bss:0x00000A04; // type:object size:0x4 data:4byte lbl_1_bss_A08 = .bss:0x00000A08; // type:object size:0x2 data:2byte -lbl_1_bss_A0C = .bss:0x00000A0C; // type:object size:0x8 data:float +lbl_1_bss_A0C = .bss:0x00000A0C; // type:object size:0x4 data:float +lbl_1_bss_A10 = .bss:0x00000A10; // type:object size:0x4 data:float lbl_1_bss_A14 = .bss:0x00000A14; // type:object size:0x4 data:4byte lbl_1_bss_A18 = .bss:0x00000A18; // type:object size:0xA4 data:float lbl_1_bss_ABC = .bss:0x00000ABC; // type:object size:0x4 data:4byte -lbl_1_bss_AC0 = .bss:0x00000AC0; // type:object size:0x8 data:4byte +lbl_1_bss_AC0 = .bss:0x00000AC0; // type:object size:0x4 data:4byte +lbl_1_bss_AC4 = .bss:0x00000AC4; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 6923097f..f3e25d2e 100644 --- a/configure.py +++ b/configure.py @@ -1346,7 +1346,7 @@ config.libs = [ Object(Matching, "REL/executor.c"), Object(Matching, "REL/modeltestDll/main.c"), Object(Matching, "REL/modeltestDll/modeltest00.c"), - Object(NonMatching, "REL/modeltestDll/modeltest01.c"), + Object(Matching, "REL/modeltestDll/modeltest01.c"), }, ), Rel( diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index cb6e51fc..9438febb 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -228,7 +228,4 @@ void fn_1_46F0(void) // -------------------------------------------------------------------------- // -const Point3d lbl_1_rodata_1C8 = {0.0f, 0.0f, 0.0f}; -const Point3d lbl_1_rodata_1D4 = {0.0f, 0.0f, -1.0f}; - // -------------------------------------------------------------------------- // \ No newline at end of file diff --git a/src/REL/modeltestDll/modeltest01.c b/src/REL/modeltestDll/modeltest01.c index e69de29b..d30e6c6a 100644 --- a/src/REL/modeltestDll/modeltest01.c +++ b/src/REL/modeltestDll/modeltest01.c @@ -0,0 +1,753 @@ +#include "game/object.h" +#include "game/hsfman.h" +#include "game/hsfload.h" +#include "game/hsfdraw.h" +#include "game/printfunc.h" + +#include "game/hsfmotion.h" + +#include "game/wipe.h" +#include "game/audio.h" +#include "game/msm.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/gamework_data.h" + +#include "math.h" +#include "ext_math.h" + +typedef struct unk_bss_a18 { + u32 unk0; + Vec unk4; + Vec unk10; + u8 unk1C[0x88]; +} UnkBssA18; + +omObjData *lbl_1_bss_AC4; +omObjData *lbl_1_bss_AC0; +omObjData *lbl_1_bss_ABC; +UnkBssA18 lbl_1_bss_A18; +s32 lbl_1_bss_A14; +float lbl_1_bss_A10; +float lbl_1_bss_A0C; +s16 lbl_1_bss_A08; +Process *lbl_1_bss_A04; +Process *lbl_1_bss_A00; + +void fn_1_4DF8(omObjData *object); +void fn_1_5A60(omObjData *object); +void fn_1_5DA8(void); +void fn_1_6AE0(ModelData *model, Mtx mtx); +void fn_1_83B4(void); + + +static const Vec lbl_1_rodata_1C8 = {0.0f, 0.0f, 0.0f}; +static const Vec lbl_1_rodata_1D4 = {0.0f, 0.0f, -1.0f}; + +void fn_1_4AC8(void) +{ + Vec sp14; + Vec sp8; + Process *objman; + OSReport("******* MODELTESTObjectSetup *********\n"); + objman = omInitObjMan(50, 8192); + CRot.x = -22; + CRot.y = 0; + CRot.z = 0; + Center.x = 0; + Center.y = 100; + Center.z = 0; + CZoom = 400; + Hu3DCameraCreate(1); + lbl_1_bss_A0C = 45; + Hu3DCameraPerspectiveSet(1, lbl_1_bss_A0C, 20, 5000, 1.2f); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + Hu3DCameraScissorSet(1, 0, 0, 640, 480); + lbl_1_bss_ABC = omAddObjEx(objman, 0, 32, 32, -1, fn_1_4DF8); + lbl_1_bss_AC0 = omAddObjEx(objman, 32730, 0, 0, -1, fn_1_5A60); + lbl_1_bss_A00 = HuPrcCreate(fn_1_5DA8, 100, 8192, 0); + Hu3DBGColorSet(16, 16, 16); + Hu3DHookFuncCreate(fn_1_6AE0); + HuPrcChildCreate(fn_1_83B4, 100, 12288, 0, objman); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + sp14 = lbl_1_rodata_1C8; + sp8 = lbl_1_rodata_1D4; + lbl_1_bss_A18.unk0 = 64; + lbl_1_bss_A18.unk10.x = 0; + lbl_1_bss_A18.unk10.y = 0; + lbl_1_bss_A18.unk10.z = 0; + msmSeSetListener(&sp14, &sp8, 2000, 1000, 0); +} + +void fn_1_4DF8(omObjData *object) +{ + float temp_f31; + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + s8 temp_r31; + + if(HuPadBtnDown[0] & PAD_BUTTON_START) { + if(lbl_1_bss_A00) { + HuPrcKill(lbl_1_bss_A00); + } + if(lbl_1_bss_A04) { + HuPrcKill(lbl_1_bss_A04); + } + HuAudFXListnerKill(); + omOvlReturnEx(1, 1); + return; + } + CRot.y += 0.1f*HuPadStkX[0]; + CRot.x += 0.1f*HuPadStkY[0]; + CZoom += HuPadTrigL[0]/2; + CZoom -= HuPadTrigR[0]/2; + if(CZoom < 100) { + CZoom = 100; + } + if(CZoom > 2000) { + CZoom = 2000; + } + pos.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x))); + pos.y = (Center.y + (CZoom * -sind(CRot.x))); + pos.z = (Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x)))); + offset.x = Center.x - pos.x; + offset.y = Center.y - pos.y; + offset.z = Center.z - pos.z; + dir.x = (sind(CRot.y) * sind(CRot.x)); + dir.y = cosd(CRot.x); + dir.z = (cosd(CRot.y) * sind(CRot.x)); + temp_f31 = CRot.z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(temp_f31)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(temp_f31)) - offset.z * sind(temp_f31)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(temp_f31)) + offset.y * sind(temp_f31)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(temp_f31)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(temp_f31)) + offset.z * sind(temp_f31)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(temp_f31)) - offset.x * sind(temp_f31)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(temp_f31)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(temp_f31)) - offset.y * sind(temp_f31)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(temp_f31)) + offset.x * sind(temp_f31))); + VECCrossProduct(&dir, &offset, &offset); + VECNormalize(&offset, &offset); + temp_r31 = (HuPadSubStkX[0] & 0xF8); + if (temp_r31 != 0) { + Center.x += 0.05f * (offset.x * temp_r31); + Center.y += 0.05f * (offset.y * temp_r31); + Center.z += 0.05f * (offset.z * temp_r31); + } + PSVECNormalize(&y_offset, &offset); + temp_r31 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r31 != 0) { + Center.x += 0.05f * (offset.x * temp_r31); + Center.y += 0.05f * (offset.y * temp_r31); + Center.z += 0.05f * (offset.z * temp_r31); + } + Hu3DCameraPerspectiveSet(1, lbl_1_bss_A0C, 20, 5000, 1.2f); +} + +void fn_1_5A60(omObjData *object) +{ + Mtx rotAxis; + Vec pos, target, up; + float x, y, z; + + x = CRot.x; + y = CRot.y; + z = CRot.z; + + pos.x = (((sind(y)*cosd(x))*CZoom)+Center.x); + pos.y = (-sind(x)*CZoom)+Center.y; + pos.z = ((cosd(y)*cosd(x))*CZoom)+Center.z; + target.x = Center.x; + target.y = Center.y; + target.z = Center.z; + up.x = sind(y)*sind(x); + up.y = cosd(x); + up.z = cosd(y)*sind(x); + Hu3DCameraPosSet(1, pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + MTXRotDeg(rotAxis, 'y', -y); + MTXMultVec(rotAxis, &pos, &up); + VECSubtract(&target, &pos, &up); + VECNormalize(&up, &up); + HuAudFXListnerUpdate(&pos, &up); +} + +u32 lbl_1_data_3B0[] = { + 0x005D0000, 0x00000000, + 0x005E0000, 0x00000000, + 0x005E0001, 0x00000000, + 0x005F0006, 0x00000001, + 0x005F0000, 0x00000001, + 0x005F0002, 0x00000001, + 0x005F0003, 0x00000001, + 0x005F0005, 0x00000000, + 0x005F0017, 0x00000000, + 0x005F0018, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_408[] = { + 0x00170000, 0x00000000, + 0x00170002, 0x00000000, + 0x00170003, 0x00000000, + 0x0017000D, 0x00000001, + 0x00170005, 0x00000001, + 0x00170007, 0x00000001, + 0x00170008, 0x00000001, + 0x0017000C, 0x00000000, + 0x00170028, 0x00000000, + 0x00170029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_460[] = { + 0x006A0000, 0x00000000, + 0x006A0002, 0x00000000, + 0x006A0003, 0x00000000, + 0x006A000D, 0x00000001, + 0x006A0005, 0x00000001, + 0x006A0007, 0x00000001, + 0x006A0008, 0x00000001, + 0x006A000C, 0x00000000, + 0x006A0028, 0x00000000, + 0x006A0029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_4B8[] = { + 0x00870000, 0x00000000, + 0x00870002, 0x00000000, + 0x00870003, 0x00000000, + 0x0087000D, 0x00000001, + 0x00870005, 0x00000001, + 0x00870007, 0x00000001, + 0x00870008, 0x00000001, + 0x0087000C, 0x00000000, + 0x00870028, 0x00000000, + 0x00870029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_510[] = { + 0x00820000, 0x00000000, + 0x00820002, 0x00000000, + 0x00820003, 0x00000000, + 0x0082000D, 0x00000001, + 0x00820005, 0x00000001, + 0x00820007, 0x00000001, + 0x00820008, 0x00000001, + 0x0082000C, 0x00000000, + 0x00820028, 0x00000000, + 0x00820029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_568[] = { + 0x000E0000, 0x00000000, + 0x000E0002, 0x00000000, + 0x000E0003, 0x00000000, + 0x000E000D, 0x00000001, + 0x000E0005, 0x00000001, + 0x000E0007, 0x00000001, + 0x000E0008, 0x00000001, + 0x000E000C, 0x00000000, + 0x000E0028, 0x00000000, + 0x000E0029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_5C0[] = { + 0x000A0000, 0x00000000, + 0x000A0002, 0x00000000, + 0x000A0003, 0x00000000, + 0x000A000D, 0x00000001, + 0x000A0005, 0x00000001, + 0x000A0007, 0x00000001, + 0x000A0008, 0x00000001, + 0x000A000C, 0x00000000, + 0x000A0028, 0x00000000, + 0x000A0029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 lbl_1_data_618[] = { + 0x007E0000, 0x00000000, + 0x007E0002, 0x00000000, + 0x007E0003, 0x00000000, + 0x007E000D, 0x00000001, + 0x007E0005, 0x00000001, + 0x007E0007, 0x00000001, + 0x007E0008, 0x00000001, + 0x007E000C, 0x00000000, + 0x007E0028, 0x00000000, + 0x007E0029, 0x00000000, + 0x00000000, 0x00000000 +}; + +u32 *lbl_1_data_670[] = { + lbl_1_data_3B0, + lbl_1_data_408, + lbl_1_data_460, + lbl_1_data_4B8, + lbl_1_data_510, + lbl_1_data_568, + lbl_1_data_5C0, + lbl_1_data_618 +}; + +void fn_1_69C8(s16 arg0, s16 arg1, s16 arg2); + +void fn_1_5DA8(void) +{ + u32 *temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + + s32 temp_r24 = 0; + s16 sp40[3][32]; + Vec sp34; + + Vec sp28 = { 0, 0, 0 }; + Vec sp1C = { 0, 1, 0 }; + s16 sp16[3]; + s16 sp10[3]; + float spC; + s16 sp8 = 0; + Hu3DGLightCreate(0, 500, 1000, 0, -0.5, -1, 255, 255, 255); + temp_r28 = GWPlayerCfg[0].character; + temp_r31 = lbl_1_data_670[temp_r28]; + sp16[0] = Hu3DModelCreateFile(temp_r31[0]); + sp16[1] = Hu3DModelCreateFile(temp_r31[2]); + sp16[2] = Hu3DModelCreateFile(temp_r31[4]); + HuDataDirClose(temp_r31[0]); + HuDataDirClose(temp_r31[2]); + HuDataDirClose(temp_r31[4]); + temp_r27 = 0; + temp_r29 = 0; + while(1) { + if(temp_r31[(temp_r29*2)+8] == 0) { + if(temp_r27 == 0) { + temp_r27 = temp_r29; + } + break; + } + if(temp_r31[(temp_r29*2)+8] == 0xFFFFFFFF) { + temp_r27 = temp_r29; + } else { + sp40[0][temp_r29] = Hu3DJointMotionFile(sp16[0], temp_r31[(temp_r29*2)+8]); + sp40[1][temp_r29] = Hu3DJointMotionFile(sp16[1], temp_r31[(temp_r29*2)+8]); + sp40[2][temp_r29] = Hu3DJointMotionFile(sp16[2], temp_r31[(temp_r29*2)+8]); + } + temp_r29++; + } + sp10[0] = Hu3DJointMotionFile(sp16[0], temp_r31[6]); + sp10[1] = Hu3DJointMotionFile(sp16[1], temp_r31[6]); + sp10[2] = Hu3DJointMotionFile(sp16[2], temp_r31[6]); + temp_r26 = 0; + temp_r30 = 0; + Hu3DMotionSet(sp16[0], sp40[0][temp_r30]); + Hu3DModelAttrSet(sp16[0], 0x40000001); + Hu3DMotionSet(sp16[1], sp40[1][temp_r30]); + Hu3DModelAttrSet(sp16[1], 0x40000001); + Hu3DMotionSet(sp16[2], sp40[2][temp_r30]); + Hu3DModelAttrSet(sp16[2], 0x40000001); + Hu3DModelAttrSet(sp16[1], 0x1); + Hu3DModelAttrSet(sp16[2], 0x1); + while(1) { + temp_r25 = 0; + if(HuPadBtnDown[0] & PAD_BUTTON_X) { + temp_r30++; + if(temp_r30 >= temp_r27) { + temp_r30 = 0; + } + Hu3DMotionSet(sp16[0], sp40[0][temp_r30]); + Hu3DMotionSet(sp16[1], sp40[1][temp_r30]); + Hu3DMotionSet(sp16[2], sp40[2][temp_r30]); + if(temp_r31[(temp_r30*2)+9] != 0) { + Hu3DModelAttrSet(sp16[0], 0x40000001); + Hu3DModelAttrSet(sp16[1], 0x40000001); + Hu3DModelAttrSet(sp16[2], 0x40000001); + } else { + Hu3DModelAttrReset(sp16[0], 0x40000001); + Hu3DModelAttrReset(sp16[1], 0x40000001); + Hu3DModelAttrReset(sp16[2], 0x40000001); + } + fn_1_69C8(temp_r28, sp16[0], 0); + fn_1_69C8(temp_r28, sp16[1], 1); + fn_1_69C8(temp_r28, sp16[2], 2); + temp_r25 = 1; + } + if(HuPadBtnDown[0] & PAD_BUTTON_Y) { + temp_r30--; + if(temp_r30 < 0) { + temp_r30 = temp_r27-1; + } + Hu3DMotionSet(sp16[0], sp40[0][temp_r30]); + Hu3DMotionSet(sp16[1], sp40[1][temp_r30]); + Hu3DMotionSet(sp16[2], sp40[2][temp_r30]); + if(temp_r31[(temp_r30*2)+9] != 0) { + Hu3DModelAttrSet(sp16[0], 0x40000001); + Hu3DModelAttrSet(sp16[1], 0x40000001); + Hu3DModelAttrSet(sp16[2], 0x40000001); + } else { + Hu3DModelAttrReset(sp16[0], 0x40000001); + Hu3DModelAttrReset(sp16[1], 0x40000001); + Hu3DModelAttrReset(sp16[2], 0x40000001); + } + fn_1_69C8(temp_r28, sp16[0], 0); + fn_1_69C8(temp_r28, sp16[1], 1); + fn_1_69C8(temp_r28, sp16[2], 2); + temp_r25 = 1; + } + if(temp_r31[(temp_r30*2)+9] == 0) { + if(HuPadBtn[0] & PAD_BUTTON_A) { + Hu3DModelAttrSet(sp16[0], 0x40000001); + Hu3DModelAttrSet(sp16[1], 0x40000001); + Hu3DModelAttrSet(sp16[2], 0x40000001); + temp_r25 = 1; + } else { + if(temp_r30 != 3 && temp_r30 != 2) { + Hu3DModelAttrReset(sp16[0], 0x40000001); + Hu3DModelAttrReset(sp16[1], 0x40000001); + Hu3DModelAttrReset(sp16[2], 0x40000001); + } + } + } + if(temp_r25 != 0) { + if(temp_r30 == 3) { + Hu3DMotionSet(sp16[0], sp40[0][temp_r30]); + Hu3DMotionSet(sp16[1], sp40[1][temp_r30]); + Hu3DMotionSet(sp16[2], sp40[2][temp_r30]); + Hu3DModelAttrReset(sp16[0], 0x40000001); + Hu3DModelAttrReset(sp16[1], 0x40000001); + Hu3DModelAttrReset(sp16[2], 0x40000001); + for(temp_r29=0; temp_r29<=30; temp_r29++) { + Hu3DModelPosSet(sp16[0], 0, sind(temp_r29*6.0f)*150, 0); + Hu3DModelPosSet(sp16[1], 0, sind(temp_r29*6.0f)*150, 0); + Hu3DModelPosSet(sp16[2], 0, sind(temp_r29*6.0f)*150, 0); + if(temp_r29 == 25) { + Hu3DMotionSet(sp16[0], sp10[0]); + Hu3DMotionSet(sp16[1], sp10[1]); + Hu3DMotionSet(sp16[2], sp10[2]); + } + HuPrcVSleep(); + } + while(!Hu3DMotionEndCheck(sp16[0])) { + HuPrcVSleep(); + } + fn_1_69C8(temp_r28, sp16[0], 0); + fn_1_69C8(temp_r28, sp16[1], 1); + fn_1_69C8(temp_r28, sp16[2], 2); + Hu3DMotionShiftSet(sp16[0], sp40[0][0], 0, 16, 0x40000001); + Hu3DMotionShiftSet(sp16[1], sp40[1][0], 0, 16, 0x40000001); + Hu3DMotionShiftSet(sp16[2], sp40[2][0], 0, 16, 0x40000001); + } + temp_r24 = 0; + } + sp34.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x))); + sp34.y = (Center.y + (CZoom * -sind(CRot.x))); + sp34.z = (Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x)))); + + spC = VECMag(&sp34); + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + temp_r26++; + if(temp_r26 >= 3) { + temp_r26 = 0; + } + } + Hu3DModelAttrSet(sp16[0], 1); + Hu3DModelAttrSet(sp16[1], 1); + Hu3DModelAttrSet(sp16[2], 1); + switch(temp_r26) { + case 0: + Hu3DModelAttrReset(sp16[0], 1); + break; + + case 1: + Hu3DModelAttrReset(sp16[1], 1); + break; + + case 2: + Hu3DModelAttrReset(sp16[2], 1); + break; + } + HuPrcVSleep(); + } +} + +char *lbl_1_data_6F4[] = { + "s3_mario_eyes_1", + "mario_eyes_2", + "mario_eyes_2", + "S3c001m0_eye", + "S3c001m1_eye", + "c001m3_eye", + "GC-eyes", + "s3tc_GC-eyes_2", + "s3tc_GC-eyes_2", + "S3c003m1", + "S3c003m1", + "S3c003m1", + "GC-eyes", + "s3tc_GC-eyes_2", + "s3tc_GC-eyes_2", + "GC-eyes", + "s3tc_GC-eyes_2", + "s3tc_GC-eyes_2", + "GC-eyes", + "s3tc_GC-eyes_2", + "s3tc_GC-eyes_2", + "GC-eyes", + "s3tc_GC-eyes_2", + "s3tc_GC-eyes_2", +}; + +void fn_1_69C8(s16 arg0, s16 arg1, s16 arg2) +{ + HsfdrawStruct01 *temp_r31; + HsfAttribute *temp_r30; + ModelData *temp_r29; + s16 temp_r28; + char *temp_r27; + temp_r29 = &Hu3DData[arg1]; + temp_r30 = temp_r29->hsfData->attribute; + temp_r27 = MakeObjectName(lbl_1_data_6F4[arg2+(arg0*3)]); + for(temp_r28=0; temp_r28hsfData->attributeCnt; temp_r28++, temp_r30++) { + if(temp_r30->bitmap->name[0] == temp_r27[0] && strcmp(temp_r30->bitmap->name, temp_r27) == 0 && temp_r30->unk04) { + temp_r31 = temp_r30->unk04; + temp_r31->unk08 = temp_r31->unk0C = temp_r31->unk10 = 0; + temp_r31->unk14 = temp_r31->unk18 = temp_r31->unk1C = 0; + } + } +} + +s32 lbl_1_data_754 = 20; + +void fn_1_6AE0(ModelData *model, Mtx mtx) +{ + s32 temp_r31; + u8 temp_r30, temp_r29, temp_r28; + s32 sp84 = 0; + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGB, GX_RGB8, 0); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXLoadPosMtxImm(mtx, GX_PNMTX0); + GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754+1)*4); + for(temp_r31=0; temp_r31<=lbl_1_data_754; temp_r31++) { + temp_r30 = temp_r29 = temp_r28 = 255; + GXPosition3f32((temp_r31*100)-((lbl_1_data_754/2)*100), 0, (-(lbl_1_data_754/2))*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((temp_r31*100)-((lbl_1_data_754/2)*100), 0, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32(-(lbl_1_data_754/2)*100, 0, (temp_r31*100)-((lbl_1_data_754/2)*100)); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((lbl_1_data_754/2)*100, 0, (temp_r31*100)-((lbl_1_data_754/2)*100)); + GXColor3u8(temp_r30, temp_r29, temp_r28); + } + GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754+1)*4); + for(temp_r31=0; temp_r31<=lbl_1_data_754; temp_r31++) { + temp_r30 = temp_r29 = temp_r28 = 255; + GXPosition3f32((temp_r31*100)-((lbl_1_data_754/2)*100), lbl_1_data_754*100, (-(lbl_1_data_754/2))*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((temp_r31*100)-((lbl_1_data_754/2)*100), 0, -(lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32(-(lbl_1_data_754/2)*100, temp_r31*100, -(lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((lbl_1_data_754/2)*100, temp_r31*100, -(lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + } + GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754+1)*4); + for(temp_r31=0; temp_r31<=lbl_1_data_754; temp_r31++) { + temp_r30 = temp_r29 = temp_r28 = 255; + GXPosition3f32((temp_r31*100)-((lbl_1_data_754/2)*100), lbl_1_data_754*100, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((temp_r31*100)-((lbl_1_data_754/2)*100), 0, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32(-(lbl_1_data_754/2)*100, temp_r31*100, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((lbl_1_data_754/2)*100, temp_r31*100, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + } + GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754+1)*4); + for(temp_r31=0; temp_r31<=lbl_1_data_754; temp_r31++) { + temp_r30 = temp_r29 = temp_r28 = 255; + GXPosition3f32((lbl_1_data_754/2)*100, lbl_1_data_754*100, (temp_r31*100)-((lbl_1_data_754/2)*100)); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((lbl_1_data_754/2)*100, 0, (temp_r31*100)-((lbl_1_data_754/2)*100)); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((lbl_1_data_754/2)*100, temp_r31*100, -(lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32((lbl_1_data_754/2)*100, temp_r31*100, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + } + GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754+1)*4); + for(temp_r31=0; temp_r31<=lbl_1_data_754; temp_r31++) { + temp_r30 = temp_r29 = temp_r28 = 255; + GXPosition3f32(-(lbl_1_data_754/2)*100, lbl_1_data_754*100, (temp_r31*100)-((lbl_1_data_754/2)*100)); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32(-(lbl_1_data_754/2)*100, 0, (temp_r31*100)-((lbl_1_data_754/2)*100)); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32(-(lbl_1_data_754/2)*100, temp_r31*100, -(lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + GXPosition3f32(-(lbl_1_data_754/2)*100, temp_r31*100, (lbl_1_data_754/2)*100); + GXColor3u8(temp_r30, temp_r29, temp_r28); + } +} + +s16 lbl_1_data_758[] = { + 1, + 3, + 2, + 13, + 14, + 15, + 16, + 68, + -1 +}; + +s16 lbl_1_data_76A[] = { + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + -1 +}; + +void fn_1_814C(void) +{ + s16 temp_r31 = 0; + s16 temp_r30 = 0; + s16 temp_r29 = 0; + s16 temp_r28; + Vec sp8 = { 0, 0, 0 }; + while(1) { + lbl_1_bss_A14 = HuAudFXEmiterPlay(1282, &sp8); + HuPrcSleep(60); + if(HuPadBtnDown[1] & PAD_BUTTON_A) { + HuAudSeqFadeOut(temp_r28, 60); + temp_r28 = HuAudSeqPlay(lbl_1_data_758[temp_r31]); + temp_r31++; + if(lbl_1_data_758[temp_r31] == -1) { + temp_r31 = 0; + } + temp_r29 = 30; + } + if(HuPadBtnDown[1] & PAD_BUTTON_B) { + HuAudFXPlay(lbl_1_data_76A[temp_r30]); + temp_r30++; + if(lbl_1_data_76A[temp_r30] == -1) { + temp_r30 = 0; + } + temp_r29 = 30; + } + if(temp_r29) { + temp_r29--; + print8(16, 430, 2.0f, "MusicNo:%d SENo:%d", temp_r31, temp_r30); + } + HuPrcVSleep(); + } +} + +s16 lbl_1_data_7AC = -1; + +u32 fn_1_82C8(void) +{ + s16 temp_r31; + temp_r31 = HuPadBtn[0]; + if(lbl_1_bss_A08) { + lbl_1_bss_A08--; + if(!temp_r31) { + lbl_1_bss_A08 = 0; + } else { + temp_r31 = 0; + } + } else if(temp_r31) { + if(lbl_1_data_7AC == temp_r31) { + lbl_1_bss_A08 = 3; + } else { + lbl_1_bss_A08 = 20; + } + lbl_1_data_7AC = temp_r31; + } else { + lbl_1_data_7AC = 0; + } + return temp_r31; +} + +void fn_1_83B4(void) +{ + u32 temp_r29; + Process *temp_r28; + temp_r28 = HuPrcCurrentGet(); + HuPrcSetStat(temp_r28, 0xC); + while(1) { + temp_r29 = fn_1_82C8(); + if(HuPadBtn[0] & PAD_BUTTON_RIGHT) { + while(1) { + temp_r29 = fn_1_82C8(); + if(HuPadBtn[0] & PAD_BUTTON_LEFT) { + break; + } + if(!temp_r29) { + HuPrcAllPause(1); + Hu3DPauseSet(1); + } else { + HuPrcAllPause(0); + Hu3DPauseSet(0); + } + HuPrcVSleep(); + } + HuPrcAllPause(0); + Hu3DPauseSet(0); + } + if(temp_r29 & PAD_BUTTON_UP) { + if(lbl_1_bss_A0C < 120.0f) { + lbl_1_bss_A0C++; + } + } + if(temp_r29 & PAD_BUTTON_DOWN) { + if(lbl_1_bss_A0C > 5.0f) { + lbl_1_bss_A0C--; + } + } + HuPrcVSleep(); + } +} \ No newline at end of file