diff --git a/config/GMPE01_00/rels/modeltestDll/splits.txt b/config/GMPE01_00/rels/modeltestDll/splits.txt index 531cd645..2f84ebd2 100644 --- a/config/GMPE01_00/rels/modeltestDll/splits.txt +++ b/config/GMPE01_00/rels/modeltestDll/splits.txt @@ -5,3 +5,21 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/modeltestDll/main.c: + .text start:0x000000A0 end:0x000034B0 + .rodata start:0x00000000 end:0x00000130 + .data start:0x00000000 end:0x00000358 + .bss start:0x00000000 end:0x000009A8 + +REL/modeltestDll/modeltest00.c: + .text start:0x000034B0 end:0x00004AC8 + .rodata start:0x00000130 end:0x000001E0 + .data start:0x00000358 end:0x00000388 + .bss start:0x000009A8 end:0x00000A00 + +REL/modeltestDll/modeltest01.c: + .text start:0x00004AC8 end:0x000086B8 + .rodata start:0x000001E0 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 3c87f506..f6f8dd36 100644 --- a/config/GMPE01_00/rels/modeltestDll/symbols.txt +++ b/config/GMPE01_00/rels/modeltestDll/symbols.txt @@ -23,56 +23,56 @@ fn_1_82C8 = .text:0x000082C8; // type:function size:0xEC fn_1_83B4 = .text:0x000083B4; // type:function size:0x304 _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:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0xC data:4byte lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0xC data:4byte -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x10 data:2byte -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:double -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 data:double -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x10 scope:local data:2byte +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float @@ -136,34 +136,35 @@ 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_data_0 = .data:0x00000000; // type:object size:0x20 data:4byte -lbl_1_data_20 = .data:0x00000020; // type:object size:0x28 data:string -lbl_1_data_48 = .data:0x00000048; // type:object size:0x9 data:string -lbl_1_data_51 = .data:0x00000051; // type:object size:0x9 data:string -lbl_1_data_5A = .data:0x0000005A; // type:object size:0x9 data:string -lbl_1_data_63 = .data:0x00000063; // type:object size:0x9 data:string -lbl_1_data_6C = .data:0x0000006C; // type:object size:0x9 data:string -lbl_1_data_75 = .data:0x00000075; // type:object size:0x9 data:string -lbl_1_data_7E = .data:0x0000007E; // type:object size:0x9 data:string -lbl_1_data_87 = .data:0x00000087; // type:object size:0x9 data:string -lbl_1_data_90 = .data:0x00000090; // type:object size:0x9 data:string -lbl_1_data_99 = .data:0x00000099; // type:object size:0x9 data:string -lbl_1_data_A2 = .data:0x000000A2; // type:object size:0x9 data:string -lbl_1_data_AB = .data:0x000000AB; // type:object size:0x9 data:string -lbl_1_data_B4 = .data:0x000000B4; // type:object size:0x9 data:string -lbl_1_data_BD = .data:0x000000BD; // type:object size:0x9 data:string -lbl_1_data_C6 = .data:0x000000C6; // type:object size:0x9 data:string -lbl_1_data_CF = .data:0x000000CF; // type:object size:0x9 data:string +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 +lbl_1_data_51 = .data:0x00000051; // type:object size:0x9 scope:local data:string +lbl_1_data_5A = .data:0x0000005A; // type:object size:0x9 scope:local data:string +lbl_1_data_63 = .data:0x00000063; // type:object size:0x9 scope:local data:string +lbl_1_data_6C = .data:0x0000006C; // type:object size:0x9 scope:local data:string +lbl_1_data_75 = .data:0x00000075; // type:object size:0x9 scope:local data:string +lbl_1_data_7E = .data:0x0000007E; // type:object size:0x9 scope:local data:string +lbl_1_data_87 = .data:0x00000087; // type:object size:0x9 scope:local data:string +lbl_1_data_90 = .data:0x00000090; // type:object size:0x9 scope:local data:string +lbl_1_data_99 = .data:0x00000099; // type:object size:0x9 scope:local data:string +lbl_1_data_A2 = .data:0x000000A2; // type:object size:0x9 scope:local data:string +lbl_1_data_AB = .data:0x000000AB; // type:object size:0x9 scope:local data:string +lbl_1_data_B4 = .data:0x000000B4; // type:object size:0x9 scope:local data:string +lbl_1_data_BD = .data:0x000000BD; // type:object size:0x9 scope:local data:string +lbl_1_data_C6 = .data:0x000000C6; // type:object size:0x9 scope:local data:string +lbl_1_data_CF = .data:0x000000CF; // type:object size:0x9 scope:local data:string lbl_1_data_D8 = .data:0x000000D8; // type:object size:0x40 lbl_1_data_118 = .data:0x00000118; // type:object size:0x50 data:float lbl_1_data_168 = .data:0x00000168; // type:object size:0xA0 lbl_1_data_208 = .data:0x00000208; // type:object size:0x50 lbl_1_data_258 = .data:0x00000258; // type:object size:0x50 -lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x1A data:string -lbl_1_data_2C2 = .data:0x000002C2; // type:object size:0x16 -lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x10 data:string -lbl_1_data_2E8 = .data:0x000002E8; // type:object size:0x4 data:string -lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C data:string -lbl_1_data_318 = .data:0x00000318; // type:object size:0x40 +lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x1A scope:local data:string +lbl_1_data_2C2 = .data:0x000002C2; // type:object size:0x16 scope:local +lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x10 scope:local data:string +lbl_1_data_2E8 = .data:0x000002E8; // type:object size:0x4 scope:local data:string +lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C scope:local data:string +lbl_1_data_318 = .data:0x00000318; // type:object size:0xA scope:local data:string +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 data:string lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 data:string @@ -200,7 +201,8 @@ lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 data:2byte lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:float lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x1 data:byte lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x10 data:4byte -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x414 +lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x410 +unk_bss_450 = .bss:0x00000450; // type:object size:0x4 data:4byte lbl_1_bss_454 = .bss:0x00000454; // type:object size:0x4 data:4byte lbl_1_bss_458 = .bss:0x00000458; // type:object size:0x2 data:2byte lbl_1_bss_45A = .bss:0x0000045A; // type:object size:0x6 data:2byte diff --git a/configure.py b/configure.py index 79d4f1f9..49f17192 100644 --- a/configure.py +++ b/configure.py @@ -861,6 +861,14 @@ config.libs = [ Object(NonMatching, "REL/mgmodedll/minigame.c"), } ), + Rel('modeltestDll', + objects = { + Object(Matching, "REL/executor.c"), + Object(Matching, "REL/modeltestDll/main.c"), + Object(NonMatching, "REL/modeltestDll/modeltest00.c"), + Object(NonMatching, "REL/modeltestDll/modeltest01.c"), + } + ), Rel('modeseldll', objects = { Object(Matching, "REL/executor.c"), diff --git a/include/REL/modeltestDll.h b/include/REL/modeltestDll.h new file mode 100644 index 00000000..40e74cc0 --- /dev/null +++ b/include/REL/modeltestDll.h @@ -0,0 +1,46 @@ +#ifndef REL_MODELTEST_H +#define REL_MODELTEST_H + +#include "game/hsfdraw.h" +#include "game/objsub.h" + +// -------------------------------------------------------------------------- // + +#define US_PER_60TH_SEC (1000000.0f / 60.0f) +#define US_TO_60TH_SEC(us) ((us) / US_PER_60TH_SEC) +#define FB_SIZE(width, height) width * height * 2 +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +// -------------------------------------------------------------------------- // + +typedef struct +{ + s16 unk0[7]; +} HuUnkF9C2; + +typedef struct +{ + Point3d pos; // 0000 + Point3d rot; // 000C + Point3d scale; // 0018 + s32 unk24; + s32 unk28; + s32 unk2C; + HsfObject * obj; // 0030 +} HuObjUnk; + +extern Point3d CRot; +extern Point3d Center; +extern f32 CZoom; +void fn_1_29C(); +void fn_1_28F8(Point3d * arg0, Point3d * arg1); +extern void omOutView(); + +s16 MGSeqCreate(s16, ...); +void MGSeqParamSet(s16, s16, s16); +typedef void (omObjFunc2)(struct om_obj_data *); +omObjFunc2 fn_1_F9C; + +#endif + +// -------------------------------------------------------------------------- // \ No newline at end of file diff --git a/include/unsplit.h b/include/unsplit.h index 7f4e6841..35d6ade4 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -8,6 +8,7 @@ void MGSeqKillAll(void); void MGSeqPracticeInit(void); void CharMotionClose(s16 character); void CharModelClose(s16 character); +void CharMotionDataClose(s16 character); void CharModelKill(s16 character); s16 CharModelCreate(s16 character, s16 lod); s16 CharMotionCreate(s16 character, s32 data_num); diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c new file mode 100644 index 00000000..c4a8570d --- /dev/null +++ b/src/REL/modeltestDll/main.c @@ -0,0 +1,826 @@ +#include "math.h" +#include "unsplit.h" +#include "game/object.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/hsfanim.h" +#include "game/hsfmotion.h" +#include "game/hsfex.h" +#include "game/printfunc.h" +#include "game/window.h" +#include "game/gamework_data.h" + +#include "REL/modeltestDll.h" + +// -------------------------------------------------------------------------- // + +s32 lbl_1_data_0[8] = { + 0x005F001B, + 0x005F0015, + 0x005F0016, + 0x005F0006, + 0x005F0000, + 0x005F0000, + 0x005F0000, + 0x005F0004, +}; + +const f64 unk_rodata_0 = 0.5; +const f64 unk_rodata_8 = 3.0; +omObjData * lbl_1_bss_9A4; +omObjData * lbl_1_bss_9A0; + +// -------------------------------------------------------------------------- // + +void fn_1_A0(void) +{ + Process * prc; + OSReport("******* MODELTESTObjectSetup *********\n"); + + prc = omInitObjMan(0x32, 0x2000); + omGameSysInit(prc); + + CRot.x = -30.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 0.0f; + Center.z = 0.0f; + CZoom = 800.0f; + + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 45.0f, 20.0f, 20000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + + lbl_1_bss_9A4 = omAddObjEx(prc, 0, 0x20, 0x20, -1, fn_1_29C); + lbl_1_bss_9A0 = omAddObjEx(prc, 0x7FDA, 0, 0, -1, omOutView); + + Hu3DBGColorSet(0x20U, 0x80U, 0x80U); + WipeCreate(1, 0, 0x1E); +} + +// -------------------------------------------------------------------------- // + +char * lbl_1_data_D8[16] = { + "target1A", + "target1B", + "target2A", + "target2B", + "target3A", + "target3B", + "target4A", + "target4B", + "target5A", + "target5B", + "target6A", + "target6B", + "target7A", + "target7B", + "target8A", + "target8B" +}; + + +HsfanimStruct00 lbl_1_data_118 = { + /* unk00 */ 40, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 90.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, + /* unk1C */ 50.0f, + /* unk20 */ 0.800000011920929f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 4, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, + /* unk3E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}}, +}; + +HsfanimStruct00 lbl_1_data_168[2] = { +{ + /* unk00 */ 50, + /* unk02 */ {0, 0}, + /* unk04 */ 5.0f, + /* unk08 */ 10.0f, + /* unk0C */ 10.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 2.0f, + /* unk20 */ 1.0099999904632568f, + /* unk24 */ 30.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 48, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 64, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}, +{ + /* unk00 */ 30, + /* unk02 */ {0, 0}, + /* unk04 */ 3.299999952316284f, + /* unk08 */ 10.0f, + /* unk0C */ 0.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, + /* unk1C */ 2.0f, + /* unk20 */ 1.0f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9800000190734863f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 64, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 255, /* g */ 128, /* b */ 128, /* a */ 0}, { /* r */ 255, /* g */ 64, /* b */ 32, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}}; + +HsfanimStruct00 lbl_1_data_208 = { + /* unk00 */ 40, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 180.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 30.0f, + /* unk20 */ 0.8999999761581421f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 4, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, + /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}; + +HsfanimStruct00 lbl_1_data_258 = { + /* unk00 */ 30, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 90.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 30.0f, + /* unk20 */ 0.949999988079071f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}; + +const Point3d lbl_1_rodata_38 = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_44 = {0.0f, 1.0f, 0.0f}; +s16 lbl_1_bss_99C; +s16 lbl_1_bss_99A; +s16 lbl_1_bss_98A[8]; +s16 lbl_1_bss_88A[8][16]; +s16 lbl_1_bss_888; +s16 unk_bss_886; +s16 lbl_1_bss_884; +s16 lbl_1_bss_864[16]; +s16 lbl_1_bss_664[256]; +s16 lbl_1_bss_460[258]; +s16 lbl_1_bss_45A[3]; +s16 lbl_1_bss_458; +AnimData * lbl_1_bss_454; +s32 unk_bss_450; +HuObjUnk lbl_1_bss_40[20]; +void * lbl_1_bss_30[4]; +u8 lbl_1_bss_2C; +f32 lbl_1_bss_28; +s16 lbl_1_bss_24; +f32 lbl_1_bss_20; +Process * lbl_1_bss_18[2]; +Process * lbl_1_bss_14; +Process * lbl_1_bss_10; +s32 lbl_1_bss_C; +f32 lbl_1_bss_8; +static u8 unk_bss[8]; + +// -------------------------------------------------------------------------- // + +void fn_1_29C(omObjData * arg0) +{ + Point3d sp20; + Point3d sp14; + Point3d sp8; + Mtx sp2C; + s16 var_r31; + s16 temp_r27; + u32 temp_r26; + s16 temp_r3; + void * temp_r29; + AnimData * temp_r28; + f32 temp_r5; + f32 temp_f30; + s16 chrIdx; + s32 temp_r0; + + sp14 = lbl_1_rodata_38; + sp8 = lbl_1_rodata_44; + + var_r31 = Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU); + Hu3DGLightInfinitytSet(var_r31); + Hu3DShadowCreate(45.0f, 500.0f, 8000.0f); + Hu3DShadowTPLvlSet(0.5f); + + Hu3DShadowSizeSet(0xC0U); + sp20.x = -500.0f; + sp20.y = 1000.0f; + sp20.z = 1000.0f; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + + for (var_r31 = 0; var_r31 < 1; ++var_r31) + { + chrIdx = 0; + lbl_1_bss_98A[var_r31] = CharModelCreate(chrIdx, 2); + if (var_r31 == 1) { + Hu3DModelLayerSet(lbl_1_bss_98A[var_r31], 1); + } + + lbl_1_bss_88A[var_r31][0] = CharMotionCreate(chrIdx, lbl_1_data_0[0]); + lbl_1_bss_88A[var_r31][1] = CharMotionCreate(chrIdx, lbl_1_data_0[1]); + lbl_1_bss_88A[var_r31][2] = CharMotionCreate(chrIdx, lbl_1_data_0[2]); + lbl_1_bss_88A[var_r31][3] = CharMotionCreate(chrIdx, lbl_1_data_0[3]); + lbl_1_bss_88A[var_r31][4] = CharMotionCreate(chrIdx, lbl_1_data_0[4]); + lbl_1_bss_88A[var_r31][5] = CharMotionCreate(chrIdx, lbl_1_data_0[5]); + lbl_1_bss_88A[var_r31][6] = CharMotionCreate(chrIdx, lbl_1_data_0[6]); + lbl_1_bss_88A[var_r31][7] = CharMotionCreate(chrIdx, lbl_1_data_0[7]); + lbl_1_bss_88A[var_r31][0] = CharMotionCreate(chrIdx, 0x5F004D); + CharModelMotionSet(chrIdx, lbl_1_bss_88A[var_r31][0]); + Hu3DModelAttrSet(lbl_1_bss_98A[var_r31], 0x40000001U); + Hu3DModelPosSet(lbl_1_bss_98A[var_r31], (var_r31 / 4 * 0xC8) - 100, 0.0f, -(var_r31 % 4) * 0x96); + CharMotionDataClose(chrIdx); + } + temp_r26 = OSGetTick(); + + for (var_r31 = 0; var_r31 < 8; ++var_r31) { + Hu3DModelObjMtxGet(lbl_1_bss_98A[0], "test11_tex_we-ske_R_shoe1", sp2C); + } + + temp_r5 = OSTicksToMicroseconds(OSGetTick() - temp_r26); + OSReport("time %f\n", US_TO_60TH_SEC(temp_r5)); + var_r31 = Hu3DModelCreateFile(0x700024); + Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f); + Hu3DModelShadowMapSet(var_r31); + var_r31 = Hu3DModelCreateFile(0x26001E); + temp_r27 = Hu3DJointMotion(var_r31, HuDataSelHeapReadNum(0x26002F, 0x10000000, 2)); + Hu3DMotionSet(var_r31, temp_r27); + Hu3DModelAttrSet(var_r31, 0x40000001U); + + for (var_r31 = 0; var_r31 < 10; ++var_r31) { + if (var_r31 == 0) { + lbl_1_bss_664[var_r31] = Hu3DModelCreateFile(0x700019); + } else { + lbl_1_bss_664[var_r31] = Hu3DModelLink(lbl_1_bss_664[0]); + } + Hu3DModelShadowSet(lbl_1_bss_664[var_r31]); + Hu3DModelPosSet(lbl_1_bss_664[var_r31], ((( var_r31 / 5) * 0x1F4) + 0xC8), 0.0f, (-( var_r31 % 5) * 0x12C)); + Hu3DModelAttrSet(lbl_1_bss_664[var_r31], 0x4000U); + Hu3DModelAttrSet(lbl_1_bss_664[var_r31], 0x40000001U); + } + temp_r29 = HuDataSelHeapReadNum(0x700013, 0x10000000, 2); + temp_r28 = HuSprAnimRead(temp_r29); + lbl_1_bss_99C = HuSprGrpCreate(0x14); + + for (var_r31 = 0; var_r31 < 0x14; ++var_r31) { + lbl_1_bss_99A = HuSprCreate(temp_r28, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_99C, var_r31, lbl_1_bss_99A); + HuSprPosSet(lbl_1_bss_99C, var_r31, 640.0f, 240.0f); + } + + HuSprExecLayerSet(0x40, 1); + HuSprGrpDrawNoSet(lbl_1_bss_99C, 0x40); + lbl_1_bss_458 = 0x293; + lbl_1_bss_45A[0] = MGSeqCreate(1, lbl_1_bss_458 / 60, -1, -1); + temp_r29 = HuDataSelHeapReadNum(0x120001, 0x10000000, 2); + temp_r28 = HuSprAnimRead(temp_r29); + lbl_1_bss_888 = Hu3DParManCreate(temp_r28, 0x3E8, &lbl_1_data_208); + Hu3DParManAttrSet(lbl_1_bss_888, 0x45); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_888), 1U); + Hu3DParManRotSet(lbl_1_bss_888, 0.0f, 0.0f, 0.0f); + Hu3DParManVacumeSet(lbl_1_bss_888, 500.0f, 0.0f, 0.0f, 1.0f); + lbl_1_bss_884 = Hu3DParManLink(lbl_1_bss_888, &lbl_1_data_258); + Hu3DParManAttrSet(lbl_1_bss_884, 0x143); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_884), 1U); + Hu3DParManVecSet(lbl_1_bss_884, 0.0f, 1.0f, 0.0f); + Hu3DParManVacumeSet(lbl_1_bss_884, 500.0f, 0.0f, 0.0f, 1.0f); + Hu3DParManColorSet(lbl_1_bss_884, 0); + temp_r29 = HuDataSelHeapReadNum(0x120002, 0x10000000, 2); + temp_r28 = HuSprAnimRead(temp_r29); + + for (var_r31 = 0; var_r31 < 10; ++var_r31) { + lbl_1_bss_864[var_r31] = Hu3DParManCreate(temp_r28, 0x1F4, &lbl_1_data_168[0]); + Hu3DParManAttrSet(lbl_1_bss_864[var_r31], 0x864); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_864[var_r31]), 1U); + Hu3DParManPosSet(lbl_1_bss_864[var_r31], (100.0 * sin((M_PI * (36.0f * var_r31)) / 180.0)), 0.0f, 100.0 * cos((M_PI * (36.0f * var_r31)) / 180.0)); + Hu3DParManRotSet(lbl_1_bss_864[var_r31], -90.0f, 0.0f, 0.0f); + } + + lbl_1_bss_C = 0; + Hu3DFogSet(5000.0f, 10000.0f, 0x20U, 0x10U, 0x30U); + arg0->func = fn_1_F9C; +} + +// -------------------------------------------------------------------------- // + +s32 unrefData[] = { + 0,0,0 +}; + +// -------------------------------------------------------------------------- // + +void fn_1_F38(void) +{ + f32 var_f31; + var_f31 = 0.0f; + + while(TRUE) { + Hu3DModelRotSet(lbl_1_bss_460[0], 0.0f, var_f31, 0.0f); + var_f31 += 1.0f; + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) { + s8 temp_r28; + + temp_r28 = HuPadSubStkX[0] & 0xF8; + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } + PSVECNormalize(sp18, sp30); + temp_r28 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } +} + +// -------------------------------------------------------------------------- // + +const HuUnkF9C2 lbl_1_rodata_B8 = { + {8, 6, 4, 7, 9, 10, 11} +}; + +// -------------------------------------------------------------------------- // + +void fn_1_F9C(struct om_obj_data * omData) +{ + Point3d sp3C; + Point3d sp30; + Point3d sp24; + Point3d sp18; + f32 temp_f31; + s32 var_r31; + s16 var_r30; + HuUnkF9C2 teropPatterns; + + if (omSysExitReq != 0) { + if (lbl_1_bss_10 != 0) { + HuPrcKill(lbl_1_bss_10); + } + if (lbl_1_bss_14 != 0) { + HuPrcKill(lbl_1_bss_14); + } + if (lbl_1_bss_18[0] != 0) { + HuPrcKill(lbl_1_bss_18[0]); + } + CharModelKill(-1); + 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 (((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) && (lbl_1_data_118.unk0C < 360.0f)) { + lbl_1_data_118.unk0C += 1.0f; + } + + if (((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) && (lbl_1_data_118.unk0C > 0.0f)) { + lbl_1_data_118.unk0C -= 1.0f; + } + + if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) { + Hu3DParManAttrSet(lbl_1_bss_888, 0x81); + Hu3DParManAttrSet(lbl_1_bss_884, 0x81); + } + + lbl_1_bss_20 += 2.0f; + if (lbl_1_bss_20 > 360.0f) { + lbl_1_bss_20 -= 360.0f; + } + + for (var_r30 = 0; var_r30 < 10; ++var_r30) { + f32 temp_f30; + s32 var_r29; + s32 var_fake; + + while (0) { + (void) temp_f30; + (void) temp_f30; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r30; + (void) var_r30; + (void) var_r30; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + } + } + + if (lbl_1_bss_458 > 0) { + MGSeqParamSet(lbl_1_bss_45A[0], 1, lbl_1_bss_458 / 60); + --lbl_1_bss_458; + if (lbl_1_bss_458 <= 0) { + MGSeqParamSet(lbl_1_bss_45A[0], 2, -1); + } + } + + sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + sp30.x = Center.x - sp3C.x; + sp30.y = Center.y - sp3C.y; + sp30.z = Center.z - sp3C.z; + sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + sp24.y = cos((M_PI * CRot.x) / 180.0); + sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + temp_f31 = CRot.z; + + sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0)); + + sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0)) + + sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0)); + + sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0)) + + (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0))); + + PSVECCrossProduct(&sp24, &sp30, &sp30); + PSVECNormalize(&sp30, &sp30); + + if (lbl_1_bss_C == 0) { + HuControlCamCenter(&sp18, &sp30); + } + + teropPatterns = lbl_1_rodata_B8; + + if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) { + ++lbl_1_bss_24; + if (lbl_1_bss_24 >= 7) { + lbl_1_bss_24 = 0; + } + } + + if ((HuPadBtnDown[0] & PAD_BUTTON_B) != 0) { + var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 0); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_A) != 0) { + var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 2); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { + var_r30 = MGSeqCreate(0xE, 0x3B); + } + + if ((HuPadBtnDown[0] & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)) != 0) { + if ((HuPadBtnDown[0] & PAD_BUTTON_UP) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, -1, -1, -1); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_LEFT) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, -1, -1); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_DOWN) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, -1); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_RIGHT) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, GWPlayerCfg[3].character); + } + } + fontcolor = 5; + print8(0x10, 0x190, 1.5f, "Terop Pattern%d", lbl_1_bss_24 + 1); + lbl_1_bss_8 += 5.0f; + if (lbl_1_bss_8 > 360.0f) { + lbl_1_bss_8 -= 360.0f; + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_20F4(void) +{ + s16 temp_r3; + s16 var_r29; + HsfObject * temp_r3_2; + HuObjUnk * temp_r31; + Mtx spC0; + Vec sp24; + Mtx sp90; + Mtx sp60; + Mtx sp30; + Vec sp18; + Vec spC; + f32 temp_f27; + f32 var_f29; // ! - uninitialized + s16 var_r27; // ! - uninitialized + s32 var_r26; + f32 temp_f30; + + temp_r3 = Hu3DModelCreateFile(0x6C0000); + Hu3DModelPosSet(temp_r3, 0.0f, 0.0f, 100.0f); + + for (var_r29 = 0; var_r29 < 16; ++var_r29) + { + OSReport("%s\n", lbl_1_data_D8[var_r29]); + temp_r3_2 = Hu3DModelObjPtrGet(temp_r3, lbl_1_data_D8[var_r29]); + lbl_1_bss_40[var_r29].obj = temp_r3_2; + + Hu3DMotionNoMotSet(temp_r3, lbl_1_data_D8[var_r29], 0x380); + + lbl_1_bss_40[var_r29].pos.x = temp_r3_2->data.base.pos.x; + lbl_1_bss_40[var_r29].pos.y = temp_r3_2->data.base.pos.y; + lbl_1_bss_40[var_r29].pos.z = temp_r3_2->data.base.pos.z; + lbl_1_bss_40[var_r29].rot.x = temp_r3_2->data.base.rot.x; + lbl_1_bss_40[var_r29].rot.y = temp_r3_2->data.base.rot.y; + lbl_1_bss_40[var_r29].rot.z = temp_r3_2->data.base.rot.z; + lbl_1_bss_40[var_r29].scale.x = temp_r3_2->data.base.scale.x; + lbl_1_bss_40[var_r29].scale.y = temp_r3_2->data.base.scale.y; + lbl_1_bss_40[var_r29].scale.z = temp_r3_2->data.base.scale.z; + + OSReport( + "%d:(%3.2f,%3.2f,%3.2f),(%3.2f,%3.2f,%3.2f)\n", + var_r29, + temp_r3_2->data.base.pos.x, + temp_r3_2->data.base.pos.y, + temp_r3_2->data.base.pos.z, + temp_r3_2->data.base.rot.x, + temp_r3_2->data.base.rot.y, + temp_r3_2->data.base.rot.z + ); + } + while (TRUE) + { + Hu3DModelObjMtxGet(temp_r3, "ske_skirt", sp30); + + for (var_r29 = 0; var_r29 < 8; ++var_r29) + { + temp_r31 = &lbl_1_bss_40[var_r29 * 2]; + temp_r31->obj->data.curr.rot.x = temp_r31->rot.x; + temp_r31->obj->data.curr.rot.y = temp_r31->rot.y; + temp_r31->obj->data.curr.rot.z = temp_r31->rot.z; + + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[var_r29 * 2], sp90); + + temp_r31 = &lbl_1_bss_40[(var_r29 * 2) + 1]; + temp_r31->obj->data.curr.rot.x = temp_r31->rot.x; + temp_r31->obj->data.curr.rot.y = temp_r31->rot.y; + temp_r31->obj->data.curr.rot.z = temp_r31->rot.z; + + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0); + Hu3DMtxTransGet(spC0, &sp18); + PSMTXInverse(sp30, sp60); + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0); + Hu3DMtxTransGet(spC0, &sp18); + PSMTXMultVec(sp60, &sp18, &sp18); + + temp_f27 = 180.0 * (atan2(sp18.z, sp18.x) / M_PI); + temp_r31 = &lbl_1_bss_40[var_r29 * 2]; + temp_r31->obj->data.curr.rot.x = temp_r31->rot.x + (var_f29 * (2.0 * (sin((M_PI * temp_f27) / 180.0) * sin((M_PI * var_r27) / 180.0)))); + temp_r31->obj->data.curr.rot.y = temp_r31->rot.y; + temp_r31->obj->data.curr.rot.z = temp_r31->rot.z + (var_f29 * cos((M_PI * var_r27) / 180.0)); + + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0); + Hu3DMtxTransGet(spC0, &sp24); + fn_1_28F8(&sp24, &spC); + HuSprPosSet(lbl_1_bss_99C, var_r29, spC.x, spC.y); + } + + var_r27 += 5; + if (var_r27 > 0x168) { + var_r27 -= 0x168; + } + + if (HuPadSubStkX[1] < 0) { + var_r26 = -HuPadSubStkX[1]; + } else { + var_r26 = HuPadSubStkX[1]; + } + + + if (var_r26 < 0xA && ABS(HuPadSubStkY[1]) < 0xA) { + var_r27 = 0x168; + var_f29 = 0.0f; + } else { + var_r27 = 180.0 * (atan2(HuPadSubStkX[1], HuPadSubStkY[1]) / M_PI); + temp_f30 = (HuPadSubStkX[1] * HuPadSubStkX[1]) + (HuPadSubStkY[1] * HuPadSubStkY[1]); + var_f29 = sqrtf(temp_f30); + if (var_f29 > 80.0f) { + var_f29 = 80.0f; + } + } + + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_28F8(Point3d * arg0, Point3d * arg1) +{ + Point3d spC; + Mtx sp18; + CameraData * cam; + f32 temp_f31; + f32 temp_f30; + + cam = &Hu3DCamera[0]; + C_MTXLookAt(sp18, &cam->pos, &cam->up, &cam->target); + PSMTXMultVec(sp18, arg0, &spC); + + temp_f31 = (1.2f * (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0))))); + temp_f30 = (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0)))); + arg1->x = 288.0f + (spC.x * (288.0f / -temp_f31)); + arg1->y = 240.0f + (spC.y * (240.0f / temp_f30)); +} + +void fn_1_2AFC(void) { + s16 temp_r3; + + HuWinInit(1); + temp_r3 = HuWinCreate(-10000.0f, -10000.0f, 480, 0x80, 0); + HuWinMesSpeedSet(temp_r3, 3); + + while (TRUE) { + HuWinMesSet(temp_r3, 0x200011); + HuWinMesWait(temp_r3); + } +} + +// -------------------------------------------------------------------------- // + +// unreferenced data +u8 lbl_1_data_322[54] = { + 255, 255, 255, 255, 0, 0, 60, 68, 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 68, 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, +}; + +// -------------------------------------------------------------------------- // + +void fn_1_2B68(ModelData * mdl, Mtx arg1) +{ + GXColor sp17; + Mtx sp150; + Mtx sp120; + Mtx spF0; + Mtx spC0; + Mtx sp90; + GXTexObj sp30; + f32 sp18[2][3]; + Mtx44 sp50; + AnimBmpData * sp10; + f32 temp_f31; + f32 var_f30; // ! - uninitialized + f32 var_f29; // ! - uninitialized + f32 var_f28; // ! - uninitialized + f32 var_f27; // ! - uninitialized + + if (!lbl_1_bss_30[0]) { + lbl_1_bss_30[0] = HuMemDirectMallocNum(HEAP_SYSTEM, FB_SIZE(640, 480), 0x10000000); + } + + GXSetTexCopySrc(0, 0, 640, 480); + GXSetTexCopyDst(640, 480, GX_TF_RGB565, GX_FALSE); + GXCopyTex(lbl_1_bss_30[0], GX_FALSE); + DCFlushRangeNoSync(lbl_1_bss_30[0], FB_SIZE(640, 480)); + C_MTXOrtho(sp50, 0.0f, 480.0f, 0.0f, 576.0f, 0.0f, 10.0f); + GXSetProjection(sp50, GX_ORTHOGRAPHIC); + GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + GXSetScissor(0, 0, 640, 480); + GXInvalidateTexAll(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxDesc(GX_VA_NRM, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0U); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0U); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0U); + GXSetCullMode(GX_CULL_NONE); + GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3CU, 0U, 0x7DU); + GXSetNumTevStages(1); + + sp17.r = + sp17.g = + sp17.b = + sp17.a = 255; + GXSetChanMatColor(GX_COLOR0A0, sp17); + + sp17.r = + sp17.g = + sp17.b = 128; + sp17.a = 255; + GXSetChanAmbColor(GX_COLOR0A0, sp17); + + GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE); + GXSetNumChans(1U); + GXSetChanCtrl(GX_COLOR0, 1U, GX_SRC_REG, GX_SRC_VTX, 1U, GX_DF_CLAMP, GX_AF_SPOT); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetAlphaCompare(GX_GEQUAL, 1U, GX_AOP_AND, GX_GEQUAL, 1U); + GXSetZCompLoc(0U); + PSMTXIdentity(arg1); + GXLoadPosMtxImm(arg1, 0U); + + PSMTXInvXpose(arg1, sp90); + GXLoadNrmMtxImm(sp90, 0); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + + sp10 = lbl_1_bss_454->bmp; + lbl_1_bss_2C += 1; + HuSprTexLoad(lbl_1_bss_454, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + + PPCSync(); + GXInitTexObj(&sp30, lbl_1_bss_30[0], 0x280U, 0x1E0U, 4U, GX_CLAMP, GX_CLAMP, 0U); + GXInitTexObjLOD(&sp30, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1); + GXLoadTexObj(&sp30, GX_TEXMAP0); + GXSetNumIndStages(1U); + + PSMTXScale(sp150, 0.1f, 0.1f, 0.0f); + sp18[0][0] = sp150[0][0]; + sp18[0][1] = sp150[0][1]; + sp18[0][2] = 0.0f; + sp18[1][0] = sp150[1][0]; + sp18[1][1] = sp150[1][1]; + sp18[1][2] = 0.0f; + + PSMTXRotRad(spF0, 0x58, -1.5707964f); + mtxRot(spF0, 0.0f, 0.0f, 0.0f); + temp_f31 = 0.0015625f; + PSMTXScale(sp120, temp_f31, temp_f31, temp_f31); + PSMTXConcat(sp120, spF0, sp150); + PSMTXTrans(spC0, 0.5f, 0.0f, 0.5f); + GXLoadTexMtxImm(sp150, 0x1EU, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1EU, 0U, 0x7DU); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_4, GX_ITS_4); + GXSetIndTexMtx(GX_ITM_0, sp18, 0); + GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0); + + lbl_1_bss_28 += 5.0f; + if (lbl_1_bss_28 > 360.0f) { + lbl_1_bss_28 -= 360.0f; + } + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f30 / 640.0f, var_f29 / 480.0f); + + GXPosition3f32(640.0f, 0.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f28 / 640.0f, var_f29 / 480.0f); + + GXPosition3f32(640.0f, 480.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f28 / 640.0f, var_f27 / 480.0f); + + GXPosition3f32(0.0f, 480.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f30 / 640.0f, var_f27 / 480.0f); + + GXEnd(); + GXSetNumIndStages(0U); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); +} + +// -------------------------------------------------------------------------- // \ No newline at end of file diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c new file mode 100644 index 00000000..e69de29b diff --git a/src/REL/modeltestDll/modeltest01.c b/src/REL/modeltestDll/modeltest01.c new file mode 100644 index 00000000..e69de29b