diff --git a/config/GMPE01_00/rels/m444dll/symbols.txt b/config/GMPE01_00/rels/m444dll/symbols.txt index 270bf155..901a279d 100644 --- a/config/GMPE01_00/rels/m444dll/symbols.txt +++ b/config/GMPE01_00/rels/m444dll/symbols.txt @@ -229,9 +229,10 @@ lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 data:double lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x4 data:float lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 data:double lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x118 +lbl_1_data_0 = .data:0x00000000; // type:object size:0x118 data:float lbl_1_data_118 = .data:0x00000118; // type:object size:0x28 -lbl_1_data_14C = .data:0x00000140; // type:object size:0x3C data:float +lbl_1_data_140 = .data:0x00000140; // type:object size:0xC data:float +lbl_1_data_14C = .data:0x0000014C; // type:object size:0x3C data:float lbl_1_data_188 = .data:0x00000188; // type:object size:0xC lbl_1_data_194 = .data:0x00000194; // type:object size:0x20 lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0x24 data:string @@ -267,9 +268,9 @@ lbl_1_data_36E = .data:0x0000036E; // type:object size:0xD data:string lbl_1_data_37B = .data:0x0000037B; // type:object size:0xD data:string jumptable_1_data_388 = .data:0x00000388; // type:object size:0x1C scope:local lbl_1_data_3A4 = .data:0x000003A4; // type:object size:0x8 -lbl_1_data_3AC = .data:0x000003AC; // type:object size:0x30 -lbl_1_data_3DC = .data:0x000003DC; // type:object size:0x24 -lbl_1_data_400 = .data:0x00000400; // type:object size:0x54 +lbl_1_data_3AC = .data:0x000003AC; // type:object size:0x30 data:float +lbl_1_data_3DC = .data:0x000003DC; // type:object size:0x24 data:float +lbl_1_data_400 = .data:0x00000400; // type:object size:0x54 data:float lbl_1_data_454 = .data:0x00000454; // type:object size:0xC lbl_1_data_460 = .data:0x00000460; // type:object size:0x10 data:string lbl_1_data_470 = .data:0x00000470; // type:object size:0x127C @@ -291,7 +292,8 @@ lbl_1_bss_2DC = .bss:0x000002DC; // type:object size:0x2 data:2byte lbl_1_bss_2E0 = .bss:0x000002E0; // type:object size:0x4 data:float lbl_1_bss_2E4 = .bss:0x000002E4; // type:object size:0xC data:float lbl_1_bss_2F0 = .bss:0x000002F0; // type:object size:0xC data:4byte -lbl_1_bss_2FC = .bss:0x000002FC; // type:object size:0xC data:4byte +lbl_1_bss_2FC = .bss:0x000002FC; // type:object size:0x4 data:4byte +lbl_1_bss_300 = .bss:0x00000300; // type:object size:0x8 data:4byte lbl_1_bss_308 = .bss:0x00000308; // type:object size:0x4 data:4byte lbl_1_bss_30C = .bss:0x0000030C; // type:object size:0x4 data:4byte lbl_1_bss_310 = .bss:0x00000310; // type:object size:0x1 data:byte @@ -317,6 +319,6 @@ lbl_1_bss_18F0 = .bss:0x000018F0; // type:object size:0xC000 lbl_1_bss_D8F0 = .bss:0x0000D8F0; // type:object size:0xC000 lbl_1_bss_198F0 = .bss:0x000198F0; // type:object size:0x14 lbl_1_bss_19908 = .bss:0x00019908; // type:object size:0x2 -lbl_1_bss_1990A = .bss:0x0001990A; // type:object size:0x2 data:2byte +lbl_1_bss_1990A = .bss:0x0001990A; // type:object size:0x4 data:2byte lbl_1_bss_1990E = .bss:0x0001990E; // type:object size:0xB4 data:2byte lbl_1_bss_199C2 = .bss:0x000199C2; // type:object size:0xB4 data:2byte diff --git a/configure.py b/configure.py index 7feb3c28..7a223397 100644 --- a/configure.py +++ b/configure.py @@ -1172,8 +1172,8 @@ config.libs = [ objects={ Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m444dll/main.c"), - Object(NonMatching, "REL/m444dll/pinball.c"), - Object(NonMatching, "REL/m444dll/datalist.c"), + Object(Matching, "REL/m444dll/pinball.c"), + Object(Matching, "REL/m444dll/datalist.c"), Object(NonMatching, "REL/m444dll/shadow.c"), }, ), diff --git a/include/REL/m444dll.h b/include/REL/m444dll.h new file mode 100644 index 00000000..b0165d19 --- /dev/null +++ b/include/REL/m444dll.h @@ -0,0 +1,73 @@ +#ifndef M444DLL_H +#define M444DLL_H + +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/sprite.h" + +typedef struct datalist_model { + s32 datanum; + u32 attr; + s16 type; + s16 link; + s16 mot_link; + Vec pos; + Vec rot; + Vec scale; +} DataListModel; + +typedef struct datalist_sprite { + u32 datanum; + s16 attr; + s16 prio; + float x; + float y; + GXColor color; +} DataListSprite; + +void fn_1_8180(s16 view); +void fn_1_8424(void); +void fn_1_861C(s16 arg0); +s16 fn_1_8DD0(s16 arg0); + +void fn_1_9418(s16 arg0); +void fn_1_9CAC(s16 arg0, s16 arg1); + +void fn_1_A060(void); +void fn_1_C214(void); + + +void fn_1_D1E0(s16 model); +void fn_1_D558(DataListModel *model_list); +void fn_1_D818(DataListSprite *sprite_list); +void fn_1_D950(void); +void fn_1_D9C8(void); + +extern s16 lbl_1_bss_199C2[90]; +extern s16 lbl_1_bss_1990E[90]; +extern s16 lbl_1_bss_1990A[2]; +extern s16 lbl_1_bss_19908; + +extern Vec lbl_1_bss_34C[3]; +extern Vec lbl_1_bss_328[3]; +extern s16 lbl_1_bss_320[4]; +extern Vec lbl_1_bss_2F0; +extern Vec lbl_1_bss_2E4; +extern float lbl_1_bss_2E0; +extern s16 lbl_1_bss_2DC; +extern s16 lbl_1_bss_2DA; +extern s16 lbl_1_bss_2D8; +extern s16 lbl_1_bss_2D6; +extern s16 lbl_1_bss_2D4; +extern s16 lbl_1_bss_2D2; +extern s16 lbl_1_bss_2D0; +extern s16 lbl_1_bss_2C0[8]; +extern Vec lbl_1_bss_2A8[2]; +extern Vec lbl_1_bss_290[2]; +extern float lbl_1_bss_288[2]; + +extern DataListModel lbl_1_data_470[]; + +#endif \ No newline at end of file diff --git a/include/ext_math.h b/include/ext_math.h index 8a1e464a..8c748948 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -18,6 +18,7 @@ typedef struct vec2f { #define VECSumXZ(a, b) sqrtf((((a)->x+(b)->x)*((a)->x+(b)->x))+(((a)->z+(b)->z)*((a)->z+(b)->z))) #define VECMagXZ(a) sqrtf(((a)->x*(a)->x)+((a)->z*(a)->z)) +#define VECMag2Point(a) (((a)->x*(a)->x)+((a)->y*(a)->y)+((a)->z*(a)->z)) #define VECMagPoint(x, y, z) sqrtf(((x)*(x))+((y)*(y))+((z)*(z))) #define sind(x) sin(M_PI*(x)/180.0) diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 704648c6..7e04d841 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -211,7 +211,6 @@ void Hu3DLLightStaticSet(s16, s16, s32); s32 Hu3DModelLightInfoSet(s16, s16); s16 Hu3DLightSet(ModelData*, Mtx*, Mtx*, f32); void lightSet(LightData* arg0, s16 arg1, Mtx *arg2, Mtx *arg3, f32 arg8); -void Hu3DReflectMapSet(AnimData* arg0); void Hu3DReflectNoSet(s16 arg0); void Hu3DFogSet(f32, f32, u8, u8, u8); void Hu3DFogClear(void); diff --git a/src/REL/m444dll/datalist.c b/src/REL/m444dll/datalist.c new file mode 100644 index 00000000..9f085a98 --- /dev/null +++ b/src/REL/m444dll/datalist.c @@ -0,0 +1,180 @@ +#include "REL/m444dll.h" + +s16 lbl_1_bss_199C2[90]; +s16 lbl_1_bss_1990E[90]; +s16 lbl_1_bss_1990A[2]; +s16 lbl_1_bss_19908; + +DataListModel lbl_1_data_470[] = { + { 0x4B0000, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0000, 0, 0, 0, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0000, 0, 0, 0, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0001, 0, 0, -1, -1, { 0, 150, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0002, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0003, 0, 0, -1, -1, { 0, 150, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0004, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0005, 0, 0, -1, -1, { 0, 150, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0006, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0007, 0x40000002, 0, -1, 10, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0008, 0, 1, -1, 9, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0015, 0x40000002, 0, -1, 12, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0016, 0, 1, -1, 11, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0017, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0018, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0014, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0020, 0x40000001, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001F, 0x40000001, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B002C, 0x40000001, 0, -1, 19, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B002D, 0, 1, -1, 18, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B002E, 0, 1, -1, 18, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B002F, 0, 1, -1, 18, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0030, 0x40000001, 0, -1, 23, { 200, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0031, 0, 1, -1, 22, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0032, 0, 1, -1, 22, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0033, 0, 1, -1, 22, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0034, 0x40000001, 0, -1, 27, { 400, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0035, 0, 1, -1, 26, { -200, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0036, 0, 1, -1, 26, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0037, 0, 1, -1, 26, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0038, 0x40000001, 0, -1, 31, { -200, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0039, 0, 1, -1, 30, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B003A, 0, 1, -1, 30, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B003B, 0, 1, -1, 30, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B003C, 0x40000001, 0, -1, 35, { -400, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B003D, 0, 1, -1, 34, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B003E, 0, 1, -1, 34, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B003F, 0, 1, -1, 34, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0040, 0x40000001, 0, -1, 43, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0040, 0x40000001, 0, -1, 43, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0040, 0x40000001, 0, -1, 43, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0040, 0x40000001, 0, -1, 43, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0040, 0x40000001, 0, -1, 43, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0041, 0, 1, -1, 38, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0042, 0, 1, -1, 38, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0043, 0, 1, -1, 38, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0044, 0, 1, -1, 38, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0024, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0009, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0009, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0009, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0019, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0019, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B0019, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001A, 0, 1, -1, 58, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001B, 0, 1, -1, 58, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001C, 0, 1, -1, 58, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001E, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001D, 0x40000002, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001D, 0x40000002, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B001D, 0x40000002, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B000A, 0x40000002, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B000A, 0x40000002, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B000A, 0x40000002, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1, 1, 1 } }, + { 0x4B000B, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.15f, 0.15f, 0.15f } }, + { 0x4B000B, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.15f, 0.15f, 0.15f } }, + { 0x4B000B, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.15f, 0.15f, 0.15f } }, + { 0x4B0024, 0x1, 2, 47, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B0024, 0x1, 2, 48, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B0024, 0x1, 2, 49, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B0024, 0x1, 2, 50, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B000F, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B0011, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B000D, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B0010, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B000E, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B000C, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B000C, 0x1, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 0.4f, 0.4f, 0.4f } }, + { 0x4B0021, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x4B0021, 0, 2, 85, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x4B0021, 0, 2, 85, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x4B0021, 0, 2, 85, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { 0x4B0021, 0, 0, 85, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, + { -1, 0, 0, -1, -1, { 0, 0, 0 }, { 0, 0, 0 }, { 1.0f, 1.0f, 1.0f } }, +}; + +void fn_1_D588(DataListModel *model_list) +{ + DataListModel *list; + s16 i; + s16 model; + s16 clear_i; + ModelData *model_ptr; + void *data; + list = model_list; + for(clear_i=0; clear_i<90; clear_i++) { + lbl_1_bss_199C2[clear_i] = lbl_1_bss_1990E[clear_i] = -1; + } + for(i=0; list->datanum != 0xFFFFFFFF; list++, i++) { + if(list->type == 0) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + model = Hu3DModelCreate(data); + lbl_1_bss_199C2[i] = model; + Hu3DModelAttrSet(model, list->attr); + Hu3DModelPosSetV(model, &list->pos); + Hu3DModelRotSetV(model, &list->rot); + Hu3DModelScaleSetV(model, &list->scale); + model_ptr = &Hu3DData[model]; + if(model_ptr->unk_08 != -1) { + lbl_1_bss_1990E[i] = model_ptr->unk_08; + } + } else if(list->type == 1) { + data = HuDataSelHeapReadNum(list->datanum, MEMORY_DEFAULT_NUM, HEAP_DATA); + lbl_1_bss_1990E[i] = Hu3DJointMotion(lbl_1_bss_199C2[list->mot_link], data); + + } + (void)i; + } + list = model_list; + for(i=0; list->datanum != 0xFFFFFFFF; list++, i++) { + if(list->type == 2) { + model = Hu3DModelLink(lbl_1_bss_199C2[list->link]); + lbl_1_bss_199C2[i] = model; + Hu3DModelAttrSet(model, list->attr); + Hu3DModelPosSetV(model, &list->pos); + Hu3DModelRotSetV(model, &list->rot); + Hu3DModelScaleSetV(model, &list->scale); + } + if(list->type == 0 && list->mot_link != -1) { + Hu3DMotionSet(lbl_1_bss_199C2[i], lbl_1_bss_1990E[list->mot_link]); + } + (void)i; + } +} + +void fn_1_D818(DataListSprite *sprite_list) +{ + DataListSprite *list; + s16 sprite; + s16 clear_i; + s16 i; + list = sprite_list; + for(clear_i=0; clear_i<1; clear_i++) { + lbl_1_bss_1990A[clear_i] = -1; + } + for(i=0; list->datanum; i++, list++) { + sprite = espEntry(list->datanum, 100, 0); + lbl_1_bss_1990A[i] = sprite; + espPosSet(sprite, list->x, list->y); + espColorSet(sprite, list->color.r, list->color.g, list->color.b); + espTPLvlSet(sprite, list->color.a/255.0f); + espPriSet(sprite, list->prio); + espAttrSet(sprite, list->attr); + } +} + +void fn_1_D950(void) +{ + s16 i; + for(i=0; i<1; i++) { + if(lbl_1_bss_1990A[i] != -1) { + espKill(lbl_1_bss_1990A[i]); + } + } +} \ No newline at end of file diff --git a/src/REL/m444dll/main.c b/src/REL/m444dll/main.c new file mode 100644 index 00000000..7e9eda5a --- /dev/null +++ b/src/REL/m444dll/main.c @@ -0,0 +1,1498 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/pad.h" + +#include "game/window.h" +#include "game/wipe.h" +#include "game/audio.h" +#include "game/esprite.h" +#include "game/chrman.h" + +#include "game/board/ui.h" +#include "game/gamework_data.h" +#include "game/gamework.h" + +#include "REL/m444dll.h" +#include "ext_math.h" +#include "math.h" + +#include "rel_sqrt_consts.h" + +typedef struct camera_view_params { + Vec rot; + Vec pos; + float zoom; +} CameraViewParams; + +CameraViewParams lbl_1_data_0[] = { + { { -55, 0, 0 }, { 0, 60, -57 }, 806 }, + { { -71, 0, 0 }, { 0, 100, -131 }, 900 }, + { { -87, 0, 0 }, { 0, 46, -117 }, 566 }, + { { -87, 0, 0 }, { 0, 46, -117 }, 566 }, + { { -90, 0, 0 }, { -22, 39, -153 }, 432 }, + { { -40, 0, 0 }, { 0, 130, -186 }, 6530 }, + { { -23, 0, 0 }, { -9, 1, -70 }, 1318 }, + { { -25, 0, 0 }, { 0, 242, 90 }, 343 }, + { { -30, 0, 0 }, { 0, 223, -60 }, 505 }, + { { -23, 0, 0 }, { 0, 65, -97 }, 1318 }, +}; + +DataListSprite lbl_1_data_118[] = { + { 0x4B0022, 0, 10, 288, -200, { 255, 255, 255, 255 } }, + { 0, 0, 0, 0, 0, { 0, 0, 0, 0 } } +}; + +float lbl_1_data_140[] = { + 90, 250, 420 +}; + +Vec lbl_1_data_14C[] = { + { -75, -300, 0 }, + { 25, -300, 0 }, + { -75, -300, 0 }, + { 25, -300, 0 }, + { -25, -400, 0 }, +}; + +s16 lbl_1_data_188[] = { + 1, 1, 2, 2, 2 +}; + +s32 lbl_1_data_194[] = { + 0x4B0024, + 0x4B0025, + 0x4B0026, + 0x4B0027, + 0x4B0028, + 0x4B0029, + 0x4B002A, + 0x4B002B +}; + +omObjData *lbl_1_bss_30C; +Process *lbl_1_bss_308; +s32 lbl_1_bss_300[2]; +s32 lbl_1_bss_2FC; +Vec lbl_1_bss_2F0; +Vec lbl_1_bss_2E4; +float lbl_1_bss_2E0; +s16 lbl_1_bss_2DC; +s16 lbl_1_bss_2DA; +s16 lbl_1_bss_2D8; +s16 lbl_1_bss_2D6; +s16 lbl_1_bss_2D4; +s16 lbl_1_bss_2D2; +s16 lbl_1_bss_2D0; +s16 lbl_1_bss_2C0[8]; +Vec lbl_1_bss_2A8[2]; +Vec lbl_1_bss_290[2]; +float lbl_1_bss_288[2]; +s16 lbl_1_bss_148[20][8]; +s16 lbl_1_bss_8[20][8]; +s16 lbl_1_bss_4; +s32 lbl_1_bss_0; + +void fn_1_470(void); +void fn_1_6E3C(void); +void fn_1_6EDC(omObjData *object); +void fn_1_7290(omObjData *object); + +void ModuleProlog(void) +{ + s32 light; + OSReport("******* M444 ObjectSetup *********\n"); + lbl_1_bss_308 = omInitObjMan(50, 8192); + omGameSysInit(lbl_1_bss_308); + lbl_1_bss_2A8[0].x = -70; + lbl_1_bss_2A8[0].y = 0; + lbl_1_bss_2A8[0].z = 0; + lbl_1_bss_290[0].x = 0; + lbl_1_bss_290[0].y = 130; + lbl_1_bss_290[0].z = -186; + lbl_1_bss_288[0] = 1360; + lbl_1_bss_2F0 = lbl_1_bss_2A8[0]; + lbl_1_bss_2E4 = lbl_1_bss_290[0]; + lbl_1_bss_2E0 = lbl_1_bss_288[0]; + lbl_1_bss_2FC = 0; + lbl_1_bss_2D6 = -2; + lbl_1_bss_2D4 = -2; + lbl_1_bss_2D2 = -2; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 30, 20, 15000, 1.2f); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + light = Hu3DGLightCreate(-1000, 1000, 0, 1, -1, 0, 255, 255, 255); + Hu3DGLightInfinitytSet(light); + Hu3DGLightStaticSet(light, 1); + light = Hu3DGLightCreate(0, 50, 1000, 0, -0.05f, -1, 96, 96, 96); + Hu3DGLightInfinitytSet(light); + HuPrcChildCreate(fn_1_470, 100, 12288, 0, lbl_1_bss_308); + HuPrcChildCreate(fn_1_6E3C, 200, 4096, 0, lbl_1_bss_308); + lbl_1_bss_30C = omAddObjEx(lbl_1_bss_308, 32730, 0, 0, -1, fn_1_6EDC); + omAddObjEx(lbl_1_bss_308, 0, 32, 32, -1, fn_1_7290); + Hu3DBGColorSet(0, 0, 0); + HuWinInit(1); + BoardStatusCreate(); +} + +void fn_1_3B7C(void); + +void fn_1_4DEC(void); + +void fn_1_655C(void); +void fn_1_6D80(s16 window); + +void fn_1_8180(s16 view); +void fn_1_8210(s16 view); +float fn_1_82FC(void); + +void fn_1_470(void) +{ + float temp_f31; + float temp_f30; + + s16 temp_r31; + s16 temp_r30; + s16 temp_r29; + u32 temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + u32 temp_r24; + ModelData *temp_r23; + + Vec sp1C; + Vec sp10; + float sp8[2]; + + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(GWPlayerCfg[temp_r31].group == 0) { + break; + } + } + lbl_1_bss_2DC = temp_r31; + lbl_1_bss_2D8 = GWPlayerCfg[temp_r31].pad_idx; + lbl_1_bss_2DA = GWPlayerCfg[temp_r31].character; + fn_1_655C(); + fn_1_8210(5); + fn_1_8180(6); + Hu3DModelPosSet(lbl_1_bss_2D0, 0, 0, 250); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + HuAudSeqPlay(76); + while(WipeStatGet()) { + HuPrcVSleep(); + } + while(fn_1_82FC() > 10.0f) { + HuPrcVSleep(); + } + Hu3DModelAttrReset(lbl_1_bss_199C2[18], 1); + Hu3DMotionSet(lbl_1_bss_199C2[18], lbl_1_bss_1990E[20]); + Hu3DModelRotSet(lbl_1_bss_199C2[18], 0, 90, 0); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + if(temp_r31 <= 30) { + espPosSet(lbl_1_bss_1990A[0], 288, (200.0*sind(3.0*temp_r31))-100.0); + } + Hu3DModelPosSet(lbl_1_bss_199C2[18], (-300.0*cosd(1.5*temp_r31))+(-160.0), 0, 155); + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<=30; temp_r31++) { + if(temp_r31 <= 20) { + Hu3DModelRotSet(lbl_1_bss_199C2[18], 0, (30.0*(1.0-(temp_r31/20.0f)))+60.0, 0); + } + if(temp_r31 > 10) { + temp_r29 = temp_r31-10; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (-(temp_r29/20.0f))*120.0f, 0); + } + if(temp_r31 == 10) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[18], lbl_1_bss_1990E[19], 0, 16, 0x40000001); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 8, 0x40000001); + } + HuPrcVSleep(); + } + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 8, 0x40000001); + HuWinMesMaxSizeGet(1, sp8, 0x1C0000); + temp_r30 = HuWinExCreateStyled(-10000, 340, sp8[0], sp8[1], -1, 1); + HuWinExAnimIn(temp_r30); + HuWinMesPalSet(temp_r30, 7, 0, 0, 0); + fn_1_6D80(temp_r30); + HuWinMesSet(temp_r30, 0x1C0000); + HuWinMesWait(temp_r30); + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + HuWinComKeyReset(); + Hu3DMotionShiftSet(lbl_1_bss_199C2[18], lbl_1_bss_1990E[20], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<=20; temp_r31++) { + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<=30; temp_r31++) { + if(temp_r31 <= 10) { + Hu3DModelRotSet(lbl_1_bss_199C2[18], 0, 30.0f-((temp_r31/10.0f)*120.0f), 0); + } + if(temp_r31 <= 20) { + espPosSet(lbl_1_bss_1990A[0], 288, (200.0*cosd(temp_r31*4.5))-100.0); + } + Hu3DModelPosSet(lbl_1_bss_199C2[18], ((1.0-cosd(temp_r31*3.0))*-200.0)+ -160.0, 0, 155); + HuPrcVSleep(); + } + Hu3DModelAttrSet(lbl_1_bss_199C2[18], 1); + Hu3DModelAttrReset(lbl_1_bss_199C2[22], 1); + Hu3DMotionSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[24]); + Hu3DModelRotSet(lbl_1_bss_199C2[22], 0, 90, 0); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + Hu3DModelPosSet(lbl_1_bss_199C2[22], (-300.0*cosd(1.5*temp_r31))+(-160.0), 0, 155); + if(temp_r31 > 20) { + temp_r29 = temp_r31-40; + Hu3DModelRotSet(lbl_1_bss_199C2[22], 0, (30.0*(1.0-(temp_r29/20.0f)))+60.0, 0); + } + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[23], 0, 10, 0x40000001); + } + if(temp_r31 > 40) { + temp_r29 = temp_r31-40; + for(temp_r27=0; temp_r27<3; temp_r27++) { + lbl_1_bss_34C[temp_r27].y = (180.0*sind(4.5*temp_r29))-100.0; + } + } + HuPrcVSleep(); + } + HuWinMesMaxSizeGet(1, sp8, 0x1C0001); + temp_r30 = HuWinExCreateStyled(-10000, 340, sp8[0], sp8[1], -1, 1); + HuWinExAnimIn(temp_r30); + HuWinMesPalSet(temp_r30, 7, 0, 0, 0); + fn_1_6D80(temp_r30); + HuWinMesSet(temp_r30, 0x1C0001); + HuWinMesWait(temp_r30); + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + HuWinComKeyReset(); + Hu3DModelAttrReset(lbl_1_bss_199C2[11], 0x40000002); + HuAudFXPlay(1854); + Hu3DMotionShiftSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[24], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f31 = temp_r31/20.0f; + Hu3DModelRotSet(lbl_1_bss_199C2[22], 0, (150.0f*temp_f31)+30.0f, 0); + HuPrcVSleep(); + } + Hu3DMotionShiftSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[23], 0, 10, 0x40000001); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f31 = temp_r31/20.0f; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, -120.0f-(60.0f*temp_f31), 0); + HuPrcVSleep(); + } + HuAudFXPlay(1855); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + while(Hu3DMotionEndCheck(lbl_1_bss_199C2[11]) == 0) { + HuPrcVSleep(); + } + HuAudFXPlay(1856); + fn_1_861C(0); + Hu3DModelAttrReset(lbl_1_bss_199C2[9], 0x40000002); + HuAudFXPlay(1863); + while(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) < lbl_1_data_140[0]) { + HuPrcVSleep(); + } + HuAudFXPlay(1857); + Hu3DMotionTimeSet(lbl_1_bss_199C2[9], lbl_1_data_140[0]); + Hu3DModelAttrSet(lbl_1_bss_199C2[9], 0x40000002); + HuPrcSleep(20); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 8, 0x40000001); + sp1C.x = 124; + sp1C.y = 0; + sp1C.z = -180; + for(temp_r31=0; temp_r31<=40; temp_r31++) { + temp_f31 = temp_r31/40.0f; + Hu3DModelPosSet(lbl_1_bss_2D0, temp_f31*sp1C.x, temp_f31*sp1C.y, (temp_f31*sp1C.z)+250.0f); + if(temp_r31 <= 20) { + temp_f30 = atan2d(sp1C.x, sp1C.z)-180.0; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (temp_f30*(temp_r31/20.0))+180.0, 0); + } + if(temp_r31 > 30) { + temp_r29 = temp_r31-30; + temp_f30 = atan2d(sp1C.x, sp1C.z)-180.0; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (temp_f30*(1.0-(temp_r29/10.0)))+180.0, 0); + } + HuPrcVSleep(); + } + lbl_1_bss_2D6 = -1; + fn_1_9418(0); + temp_r26 = fn_1_8DD0(0); + lbl_1_bss_2D6 = lbl_1_bss_320[temp_r26]; + HuAudFXPlay(1859); + fn_1_9CAC(0, temp_r26); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + lbl_1_bss_328[0].x = lbl_1_bss_328[0].y = lbl_1_bss_328[0].z = (0.1*sind(temp_r31*18.0))+0.3; + HuPrcVSleep(); + } + HuPrcSleep(40); + Hu3DModelAttrSet(lbl_1_bss_199C2[64], 1); + fn_1_8180(9); + Hu3DMotionShiftSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[24], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<=30; temp_r31++) { + if(temp_r31 <= 10) { + Hu3DModelRotSet(lbl_1_bss_199C2[22], 0, (90.0*(temp_r31/10.0))+180.0, 0); + } + if(temp_r31 == 10) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + } + if(temp_r31 > 10 && temp_r31 <= 25) { + temp_r29 = temp_r31-10; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (90.0*(temp_r29/15.0))+180.0, 0); + } + if(temp_r31 == 25) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + } + Hu3DModelPosSet(lbl_1_bss_199C2[22], (-300.0*(1.0-cosd(3.0*temp_r31)))+(-160.0), 0, 155); + HuPrcVSleep(); + } + Hu3DModelAttrSet(lbl_1_bss_199C2[22], 1); + Hu3DModelAttrReset(lbl_1_bss_199C2[26], 1); + Hu3DMotionSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[28]); + Hu3DModelRotSet(lbl_1_bss_199C2[26], 0, 90, 0); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + Hu3DModelPosSet(lbl_1_bss_199C2[26], (-300.0*cosd(1.5*temp_r31))+(-160.0), 0, 155); + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[27], 0, 10, 0x40000001); + } + HuPrcVSleep(); + } + HuWinMesMaxSizeGet(1, sp8, 0x1C0002); + temp_r30 = HuWinExCreateStyled(-10000, 340, sp8[0], sp8[1], -1, 1); + HuWinExAnimIn(temp_r30); + HuWinMesPalSet(temp_r30, 7, 0, 0, 0); + fn_1_6D80(temp_r30); + HuWinInsertMesSet(temp_r30, GWPlayerCfg[lbl_1_bss_2D6].character, 0); + HuWinMesSet(temp_r30, 0x1C0002); + HuWinMesWait(temp_r30); + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + HuWinComKeyReset(); + Hu3DMotionShiftSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[28], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f31 = temp_r31/20.0f; + Hu3DModelRotSet(lbl_1_bss_199C2[26], 0, (temp_f31*90.0f)+90.0f, 0); + HuPrcVSleep(); + } + Hu3DMotionShiftSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[27], 0, 10, 0x40000001); + fn_1_861C(1); + Hu3DModelAttrReset(lbl_1_bss_199C2[9], 0x40000002); + HuAudFXPlay(1862); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f31 = 1.0-(temp_r31/20.0f); + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (temp_f31*90.0f)+180.0f, 0); + HuPrcVSleep(); + } + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + while(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) < lbl_1_data_140[1]) { + if(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) == 128.0f) { + HuAudFXPlay(1850); + } + if(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) == 200.0f) { + HuAudFXPlay(1863); + } + HuPrcVSleep(); + } + HuAudFXPlay(1857); + Hu3DMotionTimeSet(lbl_1_bss_199C2[9], lbl_1_data_140[1]); + Hu3DModelAttrSet(lbl_1_bss_199C2[9], 0x40000002); + HuPrcSleep(20); + lbl_1_bss_2D4 = -1; + fn_1_9418(1); + temp_r26 = fn_1_8DD0(1); + lbl_1_bss_2D4 = lbl_1_bss_320[temp_r26]; + HuAudFXPlay(1860); + fn_1_9CAC(1, temp_r26); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + lbl_1_bss_328[1].x = lbl_1_bss_328[1].y = lbl_1_bss_328[1].z = (0.1*sind(temp_r31*18.0))+0.3; + HuPrcVSleep(); + } + HuPrcSleep(40); + Hu3DModelAttrSet(lbl_1_bss_199C2[64], 1); + fn_1_8180(9); + Hu3DMotionShiftSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[28], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<=30; temp_r31++) { + if(temp_r31 <= 10) { + Hu3DModelRotSet(lbl_1_bss_199C2[26], 0, (90.0*(temp_r31/10.0))+180.0, 0); + } + if(temp_r31 == 10) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + } + if(temp_r31 > 10 && temp_r31 <= 25) { + temp_r29 = temp_r31-10; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (90.0*(temp_r29/15.0))+180.0, 0); + } + if(temp_r31 == 25) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + } + Hu3DModelPosSet(lbl_1_bss_199C2[26], (-400.0*(1.0-cosd(3.0*temp_r31)))+(-160.0), 0, 155); + HuPrcVSleep(); + } + Hu3DModelAttrSet(lbl_1_bss_199C2[26], 1); + Hu3DModelAttrReset(lbl_1_bss_199C2[30], 1); + Hu3DMotionSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[32]); + Hu3DModelRotSet(lbl_1_bss_199C2[30], 0, 90, 0); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + Hu3DModelPosSet(lbl_1_bss_199C2[30], (-400.0*cosd(1.5*temp_r31))+(-160.0), 100, 155); + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[31], 0, 10, 0x40000001); + } + HuPrcVSleep(); + } + HuWinMesMaxSizeGet(1, sp8, 0x1C0003); + temp_r30 = HuWinExCreateStyled(-10000, 340, sp8[0], sp8[1], -1, 1); + HuWinExAnimIn(temp_r30); + HuWinMesPalSet(temp_r30, 7, 0, 0, 0); + fn_1_6D80(temp_r30); + HuWinInsertMesSet(temp_r30, GWPlayerCfg[lbl_1_bss_2D6].character, 0); + HuWinInsertMesSet(temp_r30, GWPlayerCfg[lbl_1_bss_2D4].character, 2); + HuWinMesSet(temp_r30, 0x1C0003); + HuWinMesWait(temp_r30); + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + HuWinComKeyReset(); + Hu3DMotionShiftSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[32], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f31 = temp_r31/20.0f; + Hu3DModelRotSet(lbl_1_bss_199C2[30], 0, (temp_f31*90.0f)+90.0f, 0); + HuPrcVSleep(); + } + Hu3DMotionShiftSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[31], 0, 10, 0x40000001); + fn_1_861C(2); + Hu3DModelAttrReset(lbl_1_bss_199C2[9], 0x40000002); + HuAudFXPlay(1862); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f31 = 1.0-(temp_r31/20.0f); + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (temp_f31*90.0f)+180.0f, 0); + HuPrcVSleep(); + } + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + while(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) < lbl_1_data_140[2]) { + if(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) == 300.0f) { + HuAudFXPlay(1850); + } + if(Hu3DMotionTimeGet(lbl_1_bss_199C2[9]) == 372.0f) { + HuAudFXPlay(1863); + } + HuPrcVSleep(); + } + HuAudFXPlay(1857); + Hu3DMotionTimeSet(lbl_1_bss_199C2[9], lbl_1_data_140[2]); + Hu3DModelAttrSet(lbl_1_bss_199C2[9], 0x40000002); + HuPrcSleep(20); + lbl_1_bss_2D2 = -1; + fn_1_9418(2); + temp_r26 = fn_1_8DD0(2); + lbl_1_bss_2D2 = temp_r26; + HuAudFXPlay(1861); + fn_1_9CAC(2, temp_r26); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + lbl_1_bss_328[2].x = lbl_1_bss_328[2].y = lbl_1_bss_328[2].z = (0.1*sind(temp_r31*18.0))+0.3; + HuPrcVSleep(); + } + HuPrcSleep(40); + Hu3DModelAttrSet(lbl_1_bss_199C2[64], 1); + fn_1_8180(9); + Hu3DMotionShiftSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[32], 0, 10, 0x40000001); + for(temp_r31=0; temp_r31<=30; temp_r31++) { + if(temp_r31 <= 10) { + Hu3DModelRotSet(lbl_1_bss_199C2[30], 0, (90.0*(temp_r31/10.0))+180.0, 0); + } + if(temp_r31 == 10) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + } + if(temp_r31 > 10 && temp_r31 <= 25) { + temp_r29 = temp_r31-10; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, (90.0*(temp_r29/15.0))+180.0, 0); + } + if(temp_r31 == 25) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + } + Hu3DModelPosSet(lbl_1_bss_199C2[30], (-400.0*(1.0-cosd(3.0*temp_r31)))+(-160.0), 100, 155); + HuPrcVSleep(); + } + HuAudFXPlay(1862); + Hu3DModelAttrReset(lbl_1_bss_199C2[9], 0x40000002); + while(Hu3DMotionEndCheck(lbl_1_bss_199C2[9]) == 0) { + HuPrcVSleep(); + } + Hu3DModelAttrReset(lbl_1_bss_199C2[11], 0x40000002); + HuAudFXPlay(1855); + Hu3DModelAttrSet(lbl_1_bss_199C2[11], 0x40000004); + while(Hu3DMotionTimeGet(lbl_1_bss_199C2[11]) > 0.0f) { + if(Hu3DMotionTimeGet(lbl_1_bss_199C2[11]) == 25.0f) { + HuAudFXPlay(1854); + } + HuPrcVSleep(); + } + HuAudFXPlay(1856); + Hu3DModelAttrReset(lbl_1_bss_199C2[34], 1); + Hu3DMotionSet(lbl_1_bss_199C2[34], lbl_1_bss_1990E[36]); + Hu3DModelRotSet(lbl_1_bss_199C2[34], 0, 90, 0); + for(temp_r31=0; temp_r31<=60; temp_r31++) { + Hu3DModelPosSet(lbl_1_bss_199C2[34], -154.0+(-500.0*(1.0-(temp_r31/60.0f))), 0, -403); + if(temp_r31 > 20) { + temp_r29 = temp_r31-40; + Hu3DModelRotSet(lbl_1_bss_199C2[34], 0, (30.0*(1.0-(temp_r29/20.0f)))+60.0, 0); + } + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[34], lbl_1_bss_1990E[35], 0, 10, 0x40000001); + } + if(temp_r31 == 40) { + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + } + if(temp_r31 >= 40) { + temp_r29 = temp_r31-40; + Hu3DModelRotSet(lbl_1_bss_2D0, 0, -90.0-(45.0*(temp_r29/20.0)), 0); + } + HuPrcVSleep(); + } + fn_1_8180(7); + temp_r23 = &Hu3DData[lbl_1_bss_2D0]; + sp1C.x = 0; + sp1C.y = 0; + sp1C.z = -200; + sp10 = temp_r23->pos; + VECSubtract(&sp1C, &sp10, &sp1C); + for(temp_r31=0; temp_r31<=30; temp_r31++) { + temp_f31 = temp_r31/30.0; + Hu3DModelPosSet(lbl_1_bss_2D0, (temp_f31*sp1C.x)+sp10.x, (temp_f31*sp1C.y)+sp10.y, (temp_f31*sp1C.z)+sp10.z); + HuPrcVSleep(); + } + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + BoardStatusShowSet(lbl_1_bss_2D6, 1); + BoardStatusShowSet(lbl_1_bss_2D4, 1); + sp1C.x = -112; + sp1C.y = 200; + sp1C.z = 0; + BoardStatusPosSet(lbl_1_bss_2D6, &sp1C); + sp1C.x = 688; + sp1C.y = 200; + sp1C.z = 0; + BoardStatusPosSet(lbl_1_bss_2D4, &sp1C); + for(temp_r31=0; temp_r31<=20; temp_r31++) { + if(temp_r31 > 10) { + temp_r29 = temp_r31-10; + sp1C.x = 138.0-(250.0*cosd(temp_r29*9.0)); + sp1C.y = 200; + sp1C.z = 0; + BoardStatusTargetPosSet(lbl_1_bss_2D6, &sp1C); + sp1C.x = 438.0+(250.0*cosd(temp_r29*9.0)); + sp1C.y = 200; + sp1C.z = 0; + BoardStatusTargetPosSet(lbl_1_bss_2D4, &sp1C); + } + HuPrcVSleep(); + } + temp_r25 = 1; + switch(lbl_1_bss_2D2) { + case 0: + if(GWPlayer[lbl_1_bss_2D6].coins <= 0 && GWPlayer[lbl_1_bss_2D4].coins <= 0) { + temp_r28 = 0x1C0016; + temp_r25 = 0; + + } else { + temp_r28 = 0x1C0006; + } + temp_r24 = 0x1C0009; + break; + + case 1: + if(GWPlayer[lbl_1_bss_2D6].coins <= 0 && GWPlayer[lbl_1_bss_2D4].coins <= 0 + && GWPlayer[lbl_1_bss_2D6].stars <= 0 && GWPlayer[lbl_1_bss_2D4].stars <= 0) { + temp_r25 = 0; + temp_r28 = 0x1C0017; + } else { + temp_r28 = 0x1C0006; + } + temp_r24 = 0x1C000D; + break; + + case 2: + if(GWPlayer[lbl_1_bss_2D6].stars > 0) { + temp_r28 = 0x1C0004; + } else { + temp_r28 = 0x1C0008; + temp_r25 = 0; + } + temp_r24 = 0x1C000A; + break; + + case 3: + if(GWPlayer[lbl_1_bss_2D6].stars <= 0 && GWPlayer[lbl_1_bss_2D4].stars <= 0) { + temp_r25 = 0; + temp_r28 = 0x1C0015; + } else { + temp_r28 = 0x1C0006; + } + temp_r24 = 0x1C000E; + break; + + case 4: + if(GWPlayer[lbl_1_bss_2D6].stars > 0) { + temp_r28 = 0x1C0004; + } else { + temp_r28 = 0x1C0008; + temp_r25 = 0; + } + temp_r24 = 0x1C000C; + break; + + case 5: + case 6: + if(GWPlayer[lbl_1_bss_2D6].coins > 0) { + temp_r28 = 0x1C0004; + } else { + temp_r28 = 0x1C0007; + temp_r25 = 0; + } + temp_r24 = 0x1C000B; + break; + + default: + break; + } + HuWinInsertMesSizeGet((u32)GWPlayerCfg[lbl_1_bss_2D6].character, 0); + HuWinInsertMesSizeGet(temp_r24, 1); + HuWinInsertMesSizeGet((u32)GWPlayerCfg[lbl_1_bss_2D4].character, 2); + HuWinMesMaxSizeGet(1, sp8, temp_r28); + temp_r30 = HuWinExCreateStyled(-10000, 340, sp8[0], sp8[1], -1, 1); + HuWinExAnimIn(temp_r30); + HuWinMesPalSet(temp_r30, 7, 0, 0, 0); + HuWinInsertMesSet(temp_r30, GWPlayerCfg[lbl_1_bss_2D6].character, 0); + HuWinInsertMesSet(temp_r30, temp_r24, 1); + HuWinInsertMesSet(temp_r30, GWPlayerCfg[lbl_1_bss_2D4].character, 2); + fn_1_6D80(temp_r30); + HuWinMesSet(temp_r30, temp_r28); + HuWinMesWait(temp_r30); + HuWinExAnimOut(temp_r30); + HuWinExCleanup(temp_r30); + HuWinComKeyReset(); + if(temp_r25) { + fn_1_4DEC(); + HuPrcSleep(60); + } else { + HuPrcSleep(30); + } + sp1C.x = -112; + sp1C.y = 200; + sp1C.z = 0; + BoardStatusTargetPosSet(lbl_1_bss_2D6, &sp1C); + sp1C.x = 688; + sp1C.y = 200; + sp1C.z = 0; + BoardStatusTargetPosSet(lbl_1_bss_2D4, &sp1C); + while(!BoardStatusStopCheck(lbl_1_bss_2D6)) { + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<=20; temp_r31++) { + for(temp_r27=0; temp_r27<3; temp_r27++) { + lbl_1_bss_34C[temp_r27].y = (180.0*cosd(4.5*temp_r29))-100.0; + } + HuPrcVSleep(); + } + fn_1_3B7C(); + lbl_1_bss_2FC = 1; + while(1) { + lbl_1_bss_288[0] += 10.0f; + HuPrcVSleep(); + } +} + +void fn_1_3B7C(void) +{ + float temp_f31; + s16 temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + float sp8[2]; + fn_1_8180(8); + for(temp_r30=0; temp_r30<100; temp_r30++) { + temp_r31 = temp_r30; + if(temp_r31 == 0) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[34], lbl_1_bss_1990E[36], 0, 10, 0x40000001); + } + if(temp_r31 <= 20) { + Hu3DModelRotSet(lbl_1_bss_199C2[34], 0, (30.0*(temp_r31/20.0))+60.0, 0); + } + if(temp_r31 > 10 && temp_r31 <= 60) { + temp_r29 = temp_r31-10; + Hu3DModelPosSet(lbl_1_bss_199C2[34], -154.0f+(354.0*(temp_r29/50.0)), 0, -403); + } + if(temp_r31 > 50 && temp_r31 <= 70) { + temp_r29 = temp_r31-50; + Hu3DModelRotSet(lbl_1_bss_199C2[34], 0, (110.0*(1.0-(temp_r29/20.0)))+ -20.0, 0); + } + if(temp_r31 == 70) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[34], lbl_1_bss_1990E[35], 0, 10, 0x40000001); + } + temp_r31 = temp_r30; + if(temp_r31 == 0) { + Hu3DMotionSet(lbl_1_bss_199C2[18], lbl_1_bss_1990E[20]); + temp_f31 = atan2d(400.0, 200.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[18], 0, temp_f31, 0); + Hu3DModelAttrReset(lbl_1_bss_199C2[18], 1); + } + if(temp_r31 <= 50) { + Hu3DModelPosSet(lbl_1_bss_199C2[18], 400.0*(1.0-(temp_r31/50.0)), 0, -553.0+(200.0*(1.0-(temp_r31/50.0)))); + } + if(temp_r31 > 40 && temp_r31 <= 60) { + temp_r29 = temp_r31-40; + temp_f31 = atan2d(400.0, 200.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[18], 0, temp_f31*(1.0-(temp_r29/20.0)), 0); + } + if(temp_r31 == 60) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[18], lbl_1_bss_1990E[19], 0, 10, 0x40000001); + } + if(temp_r30 >= 20) { + temp_r31 = temp_r30-20; + if(temp_r31 == 0) { + Hu3DMotionSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[28]); + temp_f31 = atan2d(-300.0, 200.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[26], 0, temp_f31, 0); + Hu3DModelAttrReset(lbl_1_bss_199C2[26], 1); + } + if(temp_r31 <= 40) { + Hu3DModelPosSet(lbl_1_bss_199C2[26], -100.0+(-300.0*(1.0-(temp_r31/40.0))), 0, -478.0+(200.0*(1.0-(temp_r31/40.0)))); + } + if(temp_r31 > 30 && temp_r31 <= 50) { + temp_r29 = temp_r31-30; + temp_f31 = atan2d(-300.0, 200.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[26], 0, (temp_f31-10.0f)*(1.0-(temp_r29/20.0))+10.0, 0); + } + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[27], 0, 10, 0x40000001); + } + } + if(temp_r30 >= 30) { + temp_r31 = temp_r30-30; + if(temp_r31 == 0) { + Hu3DMotionSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[32]); + temp_f31 = atan2d(200.0, 500.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[30], 0, temp_f31, 0); + Hu3DModelAttrReset(lbl_1_bss_199C2[30], 1); + } + if(temp_r31 <= 40) { + Hu3DModelPosSet(lbl_1_bss_199C2[30], 100.0+(200.0*(1.0-(temp_r31/40.0))), 100, -478.0+(500.0*(1.0-(temp_r31/40.0)))); + } + if(temp_r31 > 30 && temp_r31 <= 50) { + temp_r29 = temp_r31-30; + temp_f31 = atan2d(200.0, 500.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[30], 0, (temp_f31- -10.0f)*(1.0-(temp_r29/20.0))+ -10.0, 0); + } + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[31], 0, 10, 0x40000001); + } + } + if(temp_r30 >= 40) { + temp_r31 = temp_r30-40; + if(temp_r31 == 0) { + Hu3DMotionSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[24]); + temp_f31 = atan2d(-300.0, 100.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[22], 0, temp_f31, 0); + Hu3DModelAttrReset(lbl_1_bss_199C2[22], 1); + } + if(temp_r31 <= 40) { + Hu3DModelPosSet(lbl_1_bss_199C2[22], -200.0+(-300.0*(1.0-(temp_r31/40.0))), 0, -403.0+(100.0*(1.0-(temp_r31/40.0)))); + } + if(temp_r31 > 30 && temp_r31 <= 50) { + temp_r29 = temp_r31-30; + temp_f31 = atan2d(-300.0, 100.0)+180.0; + Hu3DModelRotSet(lbl_1_bss_199C2[22], 0, (temp_f31-20.0f)*(1.0-(temp_r29/20.0))+20.0, 0); + } + if(temp_r31 == 50) { + Hu3DMotionShiftSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[23], 0, 10, 0x40000001); + } + } + if(temp_r30 >= 30) { + temp_r31 = temp_r30-30; + if(temp_r31 == 0) { + Hu3DMotionShiftSet(lbl_1_bss_2D0, lbl_1_bss_2C0[1], 0, 10, 0x40000001); + } + if(temp_r31 <= 20) { + Hu3DModelRotSet(lbl_1_bss_2D0, 0, -135.0-(45.0*(temp_r31/20.0)), 0); + } + if(temp_r31 == 20) { + Hu3DMotionShiftSet(lbl_1_bss_2D0, lbl_1_bss_2C0[0], 0, 10, 0x40000001); + } + } + HuPrcVSleep(); + } + HuWinMesMaxSizeGet(1, sp8, 0x1C0005); + temp_r28 = HuWinExCreateStyled(-10000, 340, sp8[0], sp8[1], -1, 1); + HuWinExAnimIn(temp_r28); + HuWinMesPalSet(temp_r28, 7, 0, 0, 0); + fn_1_6D80(temp_r28); + HuAudFXPlay(55); + HuAudFXPlay(64); + HuAudFXPlay(67); + HuAudFXPlay(70); + HuAudFXPlay(75); + HuWinMesSet(temp_r28, 0x1C0005); + HuWinMesWait(temp_r28); + HuWinExAnimOut(temp_r28); + HuWinExCleanup(temp_r28); + HuWinComKeyReset(); + Hu3DMotionShiftSet(lbl_1_bss_199C2[18], lbl_1_bss_1990E[21], 0, 10, 0x40000001); + HuPrcSleep(5); + Hu3DMotionShiftSet(lbl_1_bss_199C2[22], lbl_1_bss_1990E[25], 0, 10, 0x40000001); + Hu3DMotionShiftSet(lbl_1_bss_199C2[26], lbl_1_bss_1990E[29], 0, 10, 0x40000001); + HuPrcSleep(10); + Hu3DMotionShiftSet(lbl_1_bss_199C2[30], lbl_1_bss_1990E[33], 0, 10, 0x40000001); + HuPrcSleep(10); + Hu3DMotionShiftSet(lbl_1_bss_199C2[34], lbl_1_bss_1990E[37], 0, 10, 0x40000001); +} + +void fn_1_55B0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s32 arg4); + +void fn_1_4DEC(void) +{ + s16 coins; + s16 stars; + switch(lbl_1_bss_2D2) { + case 0: + lbl_1_bss_4 = 2; + if(GWPlayer[lbl_1_bss_2D6].coins >= GWPlayer[lbl_1_bss_2D4].coins) { + fn_1_55B0(2, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].coins, 1); + fn_1_55B0(3, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].coins, 0); + } else { + fn_1_55B0(2, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].coins, 0); + fn_1_55B0(3, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].coins, 1); + } + break; + + case 1: + lbl_1_bss_4 = 2; + if(GWPlayer[lbl_1_bss_2D6].coins >= GWPlayer[lbl_1_bss_2D4].coins) { + fn_1_55B0(2, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].coins, 1); + fn_1_55B0(3, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].coins, 0); + } else { + fn_1_55B0(2, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].coins, 0); + fn_1_55B0(3, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].coins, 1); + } + while(lbl_1_bss_4 != 0) { + HuPrcVSleep(); + } + lbl_1_bss_4 = 2; + if(GWPlayer[lbl_1_bss_2D6].stars >= GWPlayer[lbl_1_bss_2D4].stars) { + fn_1_55B0(0, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].stars, 1); + fn_1_55B0(1, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].stars, 0); + } else { + fn_1_55B0(0, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].stars, 0); + fn_1_55B0(1, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].stars, 1); + } + break; + + case 2: + lbl_1_bss_4 = 1; + fn_1_55B0(0, lbl_1_bss_2D6, lbl_1_bss_2D4, 1, 1); + break; + + case 3: + lbl_1_bss_4 = 2; + if(GWPlayer[lbl_1_bss_2D6].stars >= GWPlayer[lbl_1_bss_2D4].stars) { + fn_1_55B0(0, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].stars, 1); + fn_1_55B0(1, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].stars, 0); + } else { + fn_1_55B0(0, lbl_1_bss_2D6, lbl_1_bss_2D4, GWPlayer[lbl_1_bss_2D6].stars, 0); + fn_1_55B0(1, lbl_1_bss_2D4, lbl_1_bss_2D6, GWPlayer[lbl_1_bss_2D4].stars, 1); + } + break; + + case 4: + lbl_1_bss_4 = 1; + if(GWPlayer[lbl_1_bss_2D6].stars < 2) { + stars = GWPlayer[lbl_1_bss_2D6].stars; + } else { + stars = 2; + } + fn_1_55B0(1, lbl_1_bss_2D6, lbl_1_bss_2D4, stars, 1); + break; + + case 5: + case 6: + lbl_1_bss_4 = 1; + if(GWPlayer[lbl_1_bss_2D6].coins < 20) { + coins = GWPlayer[lbl_1_bss_2D6].coins; + } else { + coins = 20; + } + fn_1_55B0(2, lbl_1_bss_2D6, lbl_1_bss_2D4, coins, 1); + break; + + default: + break; + } + while(lbl_1_bss_4 > 0) { + HuPrcVSleep(); + } +} + +typedef struct work_5774 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6[20]; + s16 unk2E[20]; + float unk58; + s32 unk5C; +} Work5774; + +void fn_1_5774(void); +void fn_1_5E68(void); + +void fn_1_55B0(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s32 arg4) +{ + Work5774 *work; + Process *newProcess; + float temp_f31; + + if(arg3 == 0) { + lbl_1_bss_4--; + return; + } + switch(arg0) { + case 0: + newProcess = HuPrcChildCreate(fn_1_5774, 100, 8192, 0, lbl_1_bss_308); + temp_f31 = -100; + break; + + case 1: + newProcess = HuPrcChildCreate(fn_1_5774, 100, 8192, 0, lbl_1_bss_308); + temp_f31 = -50; + break; + + case 2: + newProcess = HuPrcChildCreate(fn_1_5E68, 100, 8192, 0, lbl_1_bss_308); + temp_f31 = -100; + break; + + case 3: + newProcess = HuPrcChildCreate(fn_1_5E68, 100, 8192, 0, lbl_1_bss_308); + temp_f31 = -50; + break; + } + work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work5774), MEMORY_DEFAULT_NUM); + newProcess->user_data = work; + work->unk0 = arg1; + work->unk2 = arg2; + work->unk4 = arg3; + work->unk58 = temp_f31; + work->unk5C = arg4; +} + +void fn_1_5774(void) +{ + float temp_f31; + float temp_f30; + + Work5774 *temp_r31; + s16 temp_r30; + s16 temp_r29; + Process *temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + s16 temp_r24; + s16 temp_r23; + s32 temp_r22; + s32 temp_r21; + + Vec sp20; + Vec sp14; + Vec sp8; + + temp_r28 = HuPrcCurrentGet(); + temp_r31 = temp_r28->user_data; + temp_r23 = 0; + BoardStatusPosGet(temp_r31->unk0, &sp20); + BoardStatusPosGet(temp_r31->unk2, &sp14); + for(temp_r30=0; temp_r30<20; temp_r30++) { + temp_r31->unk6[temp_r30] = -1; + } + temp_r25 = temp_r31->unk4; + temp_r27 = temp_r25; + temp_f31 = 300/temp_r27; + if(temp_f31 < 15.0f) { + temp_r24 = 1; + } else { + temp_r24 = 3; + } + temp_f31 -= temp_r24+1; + if(temp_f31 < 15.0f) { + temp_f31 = 15.0f; + } + if(temp_f31 > 40.0f) { + temp_f31 = 40.0f; + } + if(temp_r31->unk5C) { + temp_r22 = HuAudFXPlay(1864); + temp_r21 = HuAudFXPlay(24); + } + while(1) { + if(temp_r25 > 0) { + if(((temp_r23++) & temp_r24) == 0) { + for(temp_r30=0; temp_r30<20; temp_r30++) { + if(lbl_1_bss_148[temp_r30][1] == 0) { + break; + } + } + if(temp_r30 != 20) { + for(temp_r29=0; temp_r29<20; temp_r29++) { + if(temp_r31->unk6[temp_r29] == -1) { + lbl_1_bss_148[temp_r30][1] = 1; + temp_r31->unk6[temp_r29] = temp_r30; + temp_r31->unk2E[temp_r29] = 0; + GWStarsSet(temp_r31->unk0, GWPlayer[temp_r31->unk0].stars-1); + temp_r25--; + break; + } + } + } + } + } + for(temp_r30=0; temp_r30<20; temp_r30++) { + if(temp_r31->unk6[temp_r30] == -1) { + continue; + } + temp_r26 = lbl_1_bss_148[temp_r31->unk6[temp_r30]][0]; + Hu3DModelAttrReset(temp_r26, 1); + temp_r31->unk2E[temp_r30]++; + if(temp_r31->unk2E[temp_r30] > temp_f31) { + Hu3DModelAttrSet(temp_r26, 1); + lbl_1_bss_148[temp_r31->unk6[temp_r30]][1] = 0; + temp_r31->unk6[temp_r30] = -1; + GWStarsSet(temp_r31->unk2, GWPlayer[temp_r31->unk2].stars+1); + temp_r27--; + } else { + temp_f30 = 0.1f; + if(temp_r31->unk2E[temp_r30] < temp_f31/2.0f) { + temp_f30 = 0.1*sind((90.0/(temp_f31/2.0f))*temp_r31->unk2E[temp_r30]); + } + if(temp_r31->unk2E[temp_r30] > temp_f31/2.0f) { + temp_f30 = 0.1*cosd((90.0/(temp_f31/2.0f))*(temp_r31->unk2E[temp_r30]-(temp_f31/2.0f))); + } + Hu3DModelScaleSet(temp_r26, temp_f30, temp_f30, temp_f30); + sp8.x = (sp14.x-sp20.x)*(temp_r31->unk2E[temp_r30]/temp_f31)+sp20.x; + sp8.y = sp20.y+(temp_r31->unk58*sind((180.0/temp_f31)*temp_r31->unk2E[temp_r30])); + sp8.z = 200; + Hu3D2Dto3D(&sp8, 1, &sp8); + Hu3DModelPosSetV(temp_r26, &sp8); + } + } + if(temp_r27 <= 0) { + break; + } + HuPrcVSleep(); + } + HuAudFXPlay(8); + if(temp_r31->unk5C) { + HuAudFXStop(temp_r22); + HuAudFXStop(temp_r21); + } + lbl_1_bss_4--; + HuMemDirectFree(temp_r28->user_data); + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_5E68(void) +{ + float temp_f31; + float temp_f30; + + Work5774 *temp_r31; + s16 temp_r30; + s16 temp_r29; + Process *temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + s16 temp_r24; + s16 temp_r23; + s32 temp_r22; + s32 temp_r21; + + Vec sp20; + Vec sp14; + Vec sp8; + + temp_r28 = HuPrcCurrentGet(); + temp_r31 = temp_r28->user_data; + temp_r23 = 0; + BoardStatusPosGet(temp_r31->unk0, &sp20); + BoardStatusPosGet(temp_r31->unk2, &sp14); + for(temp_r30=0; temp_r30<20; temp_r30++) { + temp_r31->unk6[temp_r30] = -1; + } + temp_r25 = temp_r31->unk4; + temp_r27 = temp_r25; + temp_f31 = 300/temp_r27; + if(temp_f31 < 15.0f) { + temp_r24 = 1; + } else { + temp_r24 = 3; + } + temp_f31 -= temp_r24+1; + if(temp_f31 < 15.0f) { + temp_f31 = 15.0f; + } + if(temp_f31 > 40.0f) { + temp_f31 = 40.0f; + } + if(temp_r31->unk5C) { + temp_r22 = HuAudFXPlay(1864); + temp_r21 = HuAudFXPlay(23); + } + while(1) { + if(temp_r25 > 0) { + if(((temp_r23++) & temp_r24) == 0) { + for(temp_r30=0; temp_r30<20; temp_r30++) { + if(lbl_1_bss_8[temp_r30][1] == 0) { + break; + } + } + if(temp_r30 != 20) { + for(temp_r29=0; temp_r29<20; temp_r29++) { + if(temp_r31->unk6[temp_r29] == -1) { + lbl_1_bss_8[temp_r30][1] = 1; + temp_r31->unk6[temp_r29] = temp_r30; + temp_r31->unk2E[temp_r29] = 0; + GWCoinsSet(temp_r31->unk0, GWPlayer[temp_r31->unk0].coins-1); + temp_r25--; + break; + } + } + } + } + } + for(temp_r30=0; temp_r30<20; temp_r30++) { + if(temp_r31->unk6[temp_r30] == -1) { + continue; + } + temp_r26 = lbl_1_bss_8[temp_r31->unk6[temp_r30]][0]; + Hu3DModelAttrReset(temp_r26, 1); + temp_r31->unk2E[temp_r30]++; + if(temp_r31->unk2E[temp_r30] > temp_f31) { + Hu3DModelAttrSet(temp_r26, 1); + lbl_1_bss_8[temp_r31->unk6[temp_r30]][1] = 0; + temp_r31->unk6[temp_r30] = -1; + GWCoinsSet(temp_r31->unk2, GWPlayer[temp_r31->unk2].coins+1); + temp_r27--; + } else { + temp_f30 = 0.1f; + if(temp_r31->unk2E[temp_r30] < temp_f31/2.0f) { + temp_f30 = 0.1*sind((90.0/(temp_f31/2.0f))*temp_r31->unk2E[temp_r30]); + } + if(temp_r31->unk2E[temp_r30] > temp_f31/2.0f) { + temp_f30 = 0.1*cosd((90.0/(temp_f31/2.0f))*(temp_r31->unk2E[temp_r30]-(temp_f31/2.0f))); + } + Hu3DModelScaleSet(temp_r26, temp_f30, temp_f30, temp_f30); + sp8.x = (sp14.x-sp20.x)*(temp_r31->unk2E[temp_r30]/temp_f31)+sp20.x; + sp8.y = sp20.y+(temp_r31->unk58*sind((180.0/temp_f31)*temp_r31->unk2E[temp_r30])); + sp8.z = 200; + Hu3D2Dto3D(&sp8, 1, &sp8); + Hu3DModelPosSetV(temp_r26, &sp8); + } + } + if(temp_r27 <= 0) { + break; + } + HuPrcVSleep(); + } + HuAudFXPlay(7); + if(temp_r31->unk5C) { + HuAudFXStop(temp_r22); + HuAudFXStop(temp_r21); + } + lbl_1_bss_4--; + HuMemDirectFree(temp_r28->user_data); + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_655C(void) +{ + s16 i; + s16 model; + + Vec pos; + Vec target; + Vec up; + Hu3DShadowCreate(20, 100, 5000); + Hu3DShadowTPLvlSet(0.3f); + Hu3DShadowSizeSet(192); + target.x = target.y = target.z = 0; + pos.x = -800; + pos.z = 1600; + pos.y = 3200; + up.x = 0; + up.y = 1; + up.z = 0; + Hu3DShadowPosSet(&pos, &up, &target); + Hu3DReflectMapSet(HuDataSelHeapReadNum(0x4B0023, MEMORY_DEFAULT_NUM, HEAP_DATA)); + for(i=0; i<4; i++) { + lbl_1_data_470[i+47].datanum = lbl_1_data_470[i+51].datanum = lbl_1_data_194[GWPlayerCfg[i].character]; + } + fn_1_D588(lbl_1_data_470); + fn_1_D818(lbl_1_data_118); + Hu3DModelHookSet(lbl_1_bss_199C2[9], "itemhook1", lbl_1_bss_199C2[3]); + Hu3DModelHookSet(lbl_1_bss_199C2[9], "itemhook2", lbl_1_bss_199C2[5]); + Hu3DModelHookSet(lbl_1_bss_199C2[9], "itemhook3", lbl_1_bss_199C2[7]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook1", lbl_1_bss_199C2[47]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook2", lbl_1_bss_199C2[48]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook3", lbl_1_bss_199C2[49]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook4", lbl_1_bss_199C2[50]); + Hu3DModelHookSet(lbl_1_bss_199C2[11], "L_itemhook", lbl_1_bss_199C2[13]); + Hu3DModelHookSet(lbl_1_bss_199C2[11], "R_itemhook", lbl_1_bss_199C2[14]); + Hu3DModelAttrSet(lbl_1_bss_199C2[13], 0x40000001); + Hu3DModelAttrSet(lbl_1_bss_199C2[14], 0x40000001); + for(i=0; i<4; i++) { + Hu3DModelAttrSet(lbl_1_bss_199C2[i+51], 1); + } + fn_1_D1E0(lbl_1_bss_199C2[4]); + model = CharModelCreate(lbl_1_bss_2DA, 2); + lbl_1_bss_2D0 = model; + lbl_1_bss_2C0[0] = CharModelMotionCreate(lbl_1_bss_2DA, 0x5F0000); + lbl_1_bss_2C0[1] = CharModelMotionCreate(lbl_1_bss_2DA, 0x5F0002); + lbl_1_bss_2C0[2] = CharModelMotionCreate(lbl_1_bss_2DA, lbl_1_bss_2DA+0x4B0045); + lbl_1_bss_2C0[3] = CharModelMotionCreate(lbl_1_bss_2DA, lbl_1_bss_2DA+0x4B004D); + CharModelMotionSet(lbl_1_bss_2DA, lbl_1_bss_2C0[0]); + Hu3DModelPosSet(model, 0, 0, 200); + Hu3DModelAttrSet(model, 0x40000001); + Hu3DModelShadowSet(model); + HuPrcChildCreate(fn_1_C214, 50, 12288, 0, lbl_1_bss_308); + HuPrcChildCreate(fn_1_A060, 50, 12288, 0, lbl_1_bss_308); + Hu3DModelAttrSet(lbl_1_bss_199C2[18], 1); + Hu3DModelShadowSet(lbl_1_bss_199C2[18]); + Hu3DModelAttrSet(lbl_1_bss_199C2[26], 1); + Hu3DModelShadowSet(lbl_1_bss_199C2[26]); + Hu3DModelAttrSet(lbl_1_bss_199C2[30], 1); + Hu3DModelShadowSet(lbl_1_bss_199C2[30]); + Hu3DModelAttrSet(lbl_1_bss_199C2[22], 1); + Hu3DModelShadowSet(lbl_1_bss_199C2[22]); + Hu3DModelAttrSet(lbl_1_bss_199C2[34], 1); + Hu3DModelShadowSet(lbl_1_bss_199C2[34]); + Hu3DModelShadowMapSet(lbl_1_bss_199C2[15]); + Hu3DModelShadowMapSet(lbl_1_bss_199C2[9]); + Hu3DModelShadowMapSet(lbl_1_bss_199C2[11]); + Hu3DModelShadowMapSet(lbl_1_bss_199C2[3]); + Hu3DModelShadowMapSet(lbl_1_bss_199C2[5]); + Hu3DModelShadowMapSet(lbl_1_bss_199C2[7]); + CharModelLayerSetAll(1); + CharModelEffectNpcInit(lbl_1_bss_199C2[18], lbl_1_bss_1990E[20], 0, 9); + CharModelEffectNpcInit(lbl_1_bss_199C2[26], lbl_1_bss_1990E[28], 0, 10); + CharModelEffectNpcInit(lbl_1_bss_199C2[22], lbl_1_bss_1990E[24], 0, 14); + CharModelEffectNpcInit(lbl_1_bss_199C2[34], lbl_1_bss_1990E[36], 0, 12); + fn_1_8424(); + for(i=0; i<20; i++) { + if(i == 0) { + model = Hu3DModelCreateFile(0x4B0013); + } else { + model = Hu3DModelLink(lbl_1_bss_148[0][0]); + } + lbl_1_bss_148[i][0] = model; + lbl_1_bss_148[i][1] = 0; + Hu3DModelAttrSet(model, 1); + Hu3DModelScaleSet(model, 0.2, 0.2, 0.2); + Hu3DModelLayerSet(model, 7); + } + for(i=0; i<20; i++) { + if(i == 0) { + model = Hu3DModelCreateFile(0x4B0012); + } else { + model = Hu3DModelLink(lbl_1_bss_8[0][0]); + } + lbl_1_bss_8[i][0] = model; + lbl_1_bss_8[i][1] = 0; + Hu3DModelAttrSet(model, 1); + Hu3DModelScaleSet(model, 0.2, 0.2, 0.2); + Hu3DModelLayerSet(model, 7); + } + fn_1_D9C8(); +} + +void fn_1_6D80(s16 window) +{ + s16 i; + WindowData *winPtr = &winData[window]; + winPtr->active_pad = 1 << lbl_1_bss_2D8; + if(GWPlayerCfg[lbl_1_bss_2DC].iscom) { + for(i=0; i<10; i++) { + HuWinComKeyWait(256, 256, 256, 256, GWMessDelayGet()); + } + } +} + +void fn_1_6E3C(void) +{ + while(1) { + if(lbl_1_bss_2FC || omSysExitReq) { + break; + } + HuPrcVSleep(); + } + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudFadeOut(1000); + while(WipeStatGet()) { + HuPrcVSleep(); + } + BoardStatusKill(); + omOvlReturnEx(1, 1); + HuPrcEnd(); +} + +u16 lbl_1_data_240[] = { + 1, 2 +}; + + +void fn_1_6EDC(omObjData *object) +{ + s16 i; + for(i=0; i<1; i++) { + Vec pos, target, up; + float x, y, z; + + x = lbl_1_bss_2A8[i].x; + y = lbl_1_bss_2A8[i].y; + z = lbl_1_bss_2A8[i].z; + + pos.x = (((sind(y)*cosd(x))*lbl_1_bss_288[i])+lbl_1_bss_290[i].x); + pos.y = (-sind(x)*lbl_1_bss_288[i])+lbl_1_bss_290[i].y; + pos.z = ((cosd(y)*cosd(x))*lbl_1_bss_288[i])+lbl_1_bss_290[i].z; + target.x = lbl_1_bss_290[i].x; + target.y = lbl_1_bss_290[i].y; + target.z = lbl_1_bss_290[i].z; + up.x = sind(y)*sind(x); + up.y = cosd(x); + up.z = cosd(y)*sind(x); + Hu3DCameraPosSet(lbl_1_data_240[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + } +} + +void fn_1_7EBC(void); +void fn_1_7290(omObjData *object) +{ + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; + + f32 z_rot; + s8 stick_pos; + if(lbl_1_bss_0 == 0) { + fn_1_7EBC(); + return; + } + lbl_1_bss_2A8[0].y += 0.1f * HuPadStkX[0]; + lbl_1_bss_2A8[0].x += 0.1f * HuPadStkY[0]; + lbl_1_bss_288[0] += HuPadTrigL[0] / 2; + lbl_1_bss_288[0] -= HuPadTrigR[0] / 2; + if(HuPadBtnDown[0] & PAD_BUTTON_B) { + OSReport("%f,%f,%f\n", lbl_1_bss_2A8[0].x, lbl_1_bss_2A8[0].y, lbl_1_bss_2A8[0].z); + OSReport("%f,%f,%f\n", lbl_1_bss_290[0].x, lbl_1_bss_290[0].y, lbl_1_bss_290[0].z); + OSReport("%f\n", lbl_1_bss_288[0]); + } + if (lbl_1_bss_288[0] < 100.0f) { + lbl_1_bss_288[0] = 100.0f; + } + pos.x = lbl_1_bss_290[0].x + (lbl_1_bss_288[0] * (sind(lbl_1_bss_2A8[0].y) * cosd(lbl_1_bss_2A8[0].x))); + pos.y = (lbl_1_bss_290[0].y + (lbl_1_bss_288[0] * -sind(lbl_1_bss_2A8[0].x))); + pos.z = (lbl_1_bss_290[0].z + (lbl_1_bss_288[0] * (cosd(lbl_1_bss_2A8[0].y) * cosd(lbl_1_bss_2A8[0].x)))); + offset.x = lbl_1_bss_290[0].x - pos.x; + offset.y = lbl_1_bss_290[0].y - pos.y; + offset.z = lbl_1_bss_290[0].z - pos.z; + dir.x = (sind(lbl_1_bss_2A8[0].y) * sind(lbl_1_bss_2A8[0].x)); + dir.y = cosd(lbl_1_bss_2A8[0].x); + dir.z = (cosd(lbl_1_bss_2A8[0].y) * sind(lbl_1_bss_2A8[0].x)); + z_rot = lbl_1_bss_2A8[0].z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); + + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); + + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); + + PSVECCrossProduct(&dir, &offset, &offset); + PSVECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + lbl_1_bss_290[0].x += 0.05f * (offset.x * stick_pos); + lbl_1_bss_290[0].y += 0.05f * (offset.y * stick_pos); + lbl_1_bss_290[0].z += 0.05f * (offset.z * stick_pos); + } + PSVECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + lbl_1_bss_290[0].x += 0.05f * (offset.x * stick_pos); + lbl_1_bss_290[0].y += 0.05f * (offset.y * stick_pos); + lbl_1_bss_290[0].z += 0.05f * (offset.z * stick_pos); + } +} + +void fn_1_7EBC(void) +{ + Vec dist; + float dist_zoom; + if(lbl_1_bss_2FC != 0) { + return; + } + VECSubtract(&lbl_1_bss_2F0, &lbl_1_bss_2A8[0], &dist); + if(VECMag(&dist) > 0.2) { + VECScale(&dist, &dist, 0.05f); + VECAdd(&lbl_1_bss_2A8[0], &dist, &lbl_1_bss_2A8[0]); + } else { + lbl_1_bss_2A8[0] = lbl_1_bss_2F0; + } + VECSubtract(&lbl_1_bss_2E4, &lbl_1_bss_290[0], &dist); + if(VECMag(&dist) > 0.2) { + VECScale(&dist, &dist, 0.05f); + VECAdd(&lbl_1_bss_290[0], &dist, &lbl_1_bss_290[0]); + } else { + lbl_1_bss_290[0] = lbl_1_bss_2E4; + } + dist_zoom = lbl_1_bss_2E0-lbl_1_bss_288[0]; + if(sqrtf(dist_zoom*dist_zoom) > 0.2) { + dist_zoom *= 0.05f; + lbl_1_bss_288[0] += dist_zoom; + } else { + lbl_1_bss_288[0] = lbl_1_bss_2E0; + } +} + +void fn_1_8180(s16 view) +{ + lbl_1_bss_2F0 = lbl_1_data_0[view].rot; + lbl_1_bss_2E4 = lbl_1_data_0[view].pos; + lbl_1_bss_2E0 = lbl_1_data_0[view].zoom; +} + +void fn_1_8210(s16 view) +{ + lbl_1_bss_2A8[0] = lbl_1_data_0[view].rot; + lbl_1_bss_2F0 = lbl_1_bss_2A8[0]; + lbl_1_bss_290[0] = lbl_1_data_0[view].pos; + lbl_1_bss_2E4 = lbl_1_bss_290[0]; + lbl_1_bss_2E0 = lbl_1_bss_288[0] = lbl_1_data_0[view].zoom; +} + +float fn_1_82FC(void) +{ + float zoom = lbl_1_bss_2E0-lbl_1_bss_288[0]; + return sqrtf(zoom*zoom); +} \ No newline at end of file diff --git a/src/REL/m444dll/pinball.c b/src/REL/m444dll/pinball.c new file mode 100644 index 00000000..e4f9b3d7 --- /dev/null +++ b/src/REL/m444dll/pinball.c @@ -0,0 +1,1201 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/hsfman.h" +#include "game/hsfdraw.h" +#include "game/hsfex.h" + +#include "game/hsfmotion.h" + +#include "game/pad.h" + +#include "game/window.h" +#include "game/wipe.h" +#include "game/audio.h" +#include "game/esprite.h" +#include "game/chrman.h" + +#include "game/board/ui.h" +#include "game/gamework_data.h" +#include "game/gamework.h" + +#include "REL/m444dll.h" +#include "ext_math.h" +#include "math.h" + +s16 lbl_1_bss_198F0[5][2]; +Vec lbl_1_bss_D8F0[4096]; +Vec lbl_1_bss_18F0[4096]; +Vec lbl_1_bss_18B4[5]; +s32 lbl_1_bss_18A0[5]; +Vec lbl_1_bss_1894; +Vec lbl_1_bss_1888; +u16 lbl_1_bss_1884; +u8 lbl_1_bss_884[4096]; +Vec lbl_1_bss_860[3]; +Vec lbl_1_bss_824[5]; +Mtx lbl_1_bss_794[3]; +float lbl_1_bss_788[3]; +Vec lbl_1_bss_77C; +Vec lbl_1_bss_770; +float lbl_1_bss_370[256]; +Vec lbl_1_bss_34C[3]; +Vec lbl_1_bss_328[3]; +s16 lbl_1_bss_320[4]; +Vec lbl_1_bss_314; +s16 lbl_1_bss_312; +u8 lbl_1_bss_310; + +float lbl_1_data_258[3] = { + 90, 250, 420 +}; + +Vec lbl_1_data_264[5] = { + { -75, -300, 0 }, + { 25, -300, 0 }, + { -75, -300, 0 }, + { 25, -300, 0 }, + { -25, -400, 0 } +}; + +float lbl_1_data_2A0[5*2] = { + -100, -60, + 10, 50, + -100, -60, + 10, 50, + -50, 0 +}; + +s16 lbl_1_data_2C8[5] = { + 1, 1, 2, 2, 2, +}; + +void fn_1_8424(void) +{ + s16 i; + for(i=0; i<5; i++) { + lbl_1_bss_18B4[i] = lbl_1_data_264[i]; + lbl_1_bss_824[i].x = lbl_1_bss_18B4[i].x; + lbl_1_bss_824[i].y = 215; + lbl_1_bss_824[i].z = lbl_1_bss_18B4[i].y; + lbl_1_bss_198F0[i][0] = 10; + lbl_1_bss_198F0[i][1] = 0; + } + for(i=0; i<3; i++) { + lbl_1_bss_860[i].x = 128; + lbl_1_bss_860[i].y = 230; + lbl_1_bss_860[i].z = -100; + MTXIdentity(lbl_1_bss_794[i]); + lbl_1_bss_788[i] = 0; + } +} + +void fn_1_861C(s16 arg0) +{ + s16 temp_r31; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + lbl_1_bss_312 = 0; + for(temp_r31=0; temp_r31<256; temp_r31++) { + lbl_1_bss_370[temp_r31] = 1000000.0f; + } + lbl_1_bss_1894.x = 128; + lbl_1_bss_1894.y = -100; + lbl_1_bss_1894.z = 0; + lbl_1_bss_1888.x = lbl_1_bss_1888.z = 0; + lbl_1_bss_1888.y = -30; + lbl_1_bss_860[arg0].x = lbl_1_bss_1894.x; + lbl_1_bss_860[arg0].y = 230; + lbl_1_bss_860[arg0].z = lbl_1_bss_1894.y; + fn_1_D1E0(lbl_1_bss_199C2[(arg0*2)+4]); + if(arg0 == 0) { + for(temp_r31=0; temp_r31<4; temp_r31++) { + lbl_1_bss_320[temp_r31] = temp_r31; + } + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_r29 = frandmod(4); + temp_r28 = frandmod(4); + temp_r27 = lbl_1_bss_320[temp_r29]; + lbl_1_bss_320[temp_r29] = lbl_1_bss_320[temp_r28]; + lbl_1_bss_320[temp_r28] = temp_r27; + } + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook1", lbl_1_bss_199C2[lbl_1_bss_320[0]+47]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook2", lbl_1_bss_199C2[lbl_1_bss_320[1]+47]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook3", lbl_1_bss_199C2[lbl_1_bss_320[2]+47]); + Hu3DModelHookSet(lbl_1_bss_199C2[3], "d1_itemhook4", lbl_1_bss_199C2[lbl_1_bss_320[3]+47]); + for(temp_r31=0; temp_r31<4; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+51], 1); + } + } else if(arg0 == 1) { + for(temp_r31=temp_r29=0; temp_r31<4; temp_r31++) { + if(temp_r31 != lbl_1_bss_2D6) { + lbl_1_bss_320[temp_r29] = temp_r31; + temp_r29++; + } + } + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_r29 = frandmod(3); + temp_r28 = frandmod(3); + temp_r27 = lbl_1_bss_320[temp_r29]; + lbl_1_bss_320[temp_r29] = lbl_1_bss_320[temp_r28]; + lbl_1_bss_320[temp_r28] = temp_r27; + } + Hu3DModelAttrReset(lbl_1_bss_199C2[lbl_1_bss_320[0]+51], 1); + Hu3DModelAttrReset(lbl_1_bss_199C2[lbl_1_bss_320[1]+51], 1); + Hu3DModelAttrReset(lbl_1_bss_199C2[lbl_1_bss_320[2]+51], 1); + Hu3DModelAttrSet(lbl_1_bss_199C2[lbl_1_bss_2D6+51], 1); + Hu3DModelHookSet(lbl_1_bss_199C2[5], "d2_itemhook1", lbl_1_bss_199C2[lbl_1_bss_320[0]+51]); + Hu3DModelHookSet(lbl_1_bss_199C2[5], "d2_itemhook2", lbl_1_bss_199C2[lbl_1_bss_320[1]+51]); + Hu3DModelHookSet(lbl_1_bss_199C2[5], "d2_itemhook3", lbl_1_bss_199C2[lbl_1_bss_320[2]+51]); + } + Hu3DModelAttrSet(lbl_1_bss_199C2[arg0+65], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_199C2[arg0+65], 0); + Hu3DModelAttrSet(lbl_1_bss_199C2[arg0+55], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_199C2[arg0+55], 0); + Hu3DMotionSpeedSet(lbl_1_bss_199C2[arg0+55], 2); + Hu3DMotionSet(lbl_1_bss_199C2[arg0+58], lbl_1_bss_1990E[61]); + Hu3DModelAttrSet(lbl_1_bss_199C2[arg0+58], 0x40000001); + for(temp_r31=0; temp_r31<5; temp_r31++) { + if(arg0 == lbl_1_data_2C8[temp_r31]) { + lbl_1_bss_18A0[temp_r31] = 1; + } else { + lbl_1_bss_18A0[temp_r31] = 0; + } + lbl_1_bss_198F0[temp_r31][0] = 10; + lbl_1_bss_198F0[temp_r31][1] = 0; + } +} + +void fn_1_ABD0(s16 arg0, s16 arg1); +s16 fn_1_B1E8(Vec *arg0, Vec *arg1, s16 arg2); + +s16 fn_1_8DD0(s16 arg0) +{ + s16 temp_r30; + s16 temp_r29; + s32 temp_r28; + s16 temp_r27; + Mtx sp24; + Vec sp18; + Vec spC; + float sp8 = 0; + Hu3DMotionTimeSet(lbl_1_bss_199C2[9], lbl_1_data_258[arg0]); + Hu3DModelAttrSet(lbl_1_bss_199C2[9], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_199C2[arg0+65], 0x40000002); + Hu3DMotionSpeedSet(lbl_1_bss_199C2[arg0+65], 0.1*(-lbl_1_bss_1888.y-14.0f)+1.0); + temp_r28 = 0; + spC.z = spC.y = spC.x = 0; + fn_1_8180(1); + while(1) { + temp_r27 = fn_1_B1E8(&lbl_1_bss_1894, &lbl_1_bss_1888, arg0); + lbl_1_bss_860[arg0].x = lbl_1_bss_1894.x; + lbl_1_bss_860[arg0].y = 230; + lbl_1_bss_860[arg0].z = lbl_1_bss_1894.y; + if(VECMag(&lbl_1_bss_1888)) { + sp18.x = 0; + sp18.y = 0; + sp18.z = 1; + VECCrossProduct(&sp18, &lbl_1_bss_1888, &sp18); + sp18.z = sp18.y; + sp18.y = 0; + MTXRotAxisDeg(sp24, &sp18, 360.0*(VECMag(&lbl_1_bss_1888)/81.68140899333463)); + MTXConcat(lbl_1_bss_794[arg0], sp24, lbl_1_bss_794[arg0]); + } + lbl_1_bss_2E4.z = lbl_1_bss_860[arg0].z; + for(temp_r30=temp_r29=0; temp_r30<5; temp_r30++) { + if(arg0 == lbl_1_data_2C8[temp_r30]) { + fn_1_ABD0(temp_r30, arg0); + if(lbl_1_bss_198F0[temp_r30][1] & 0x2) { + temp_r29++; + } + } + } + if(temp_r29) { + if(Hu3DMotionIDGet(lbl_1_bss_199C2[arg0+58]) != lbl_1_bss_1990E[62]) { + Hu3DMotionSet(lbl_1_bss_199C2[arg0+58], lbl_1_bss_1990E[62]); + } + } else { + if(Hu3DMotionIDGet(lbl_1_bss_199C2[arg0+58]) != lbl_1_bss_1990E[61]) { + Hu3DMotionSet(lbl_1_bss_199C2[arg0+58], lbl_1_bss_1990E[61]); + } + } + if(temp_r27 != -1) { + break; + } + if(lbl_1_bss_1894.x < 85.0f && temp_r28 == 0) { + lbl_1_bss_D8F0[lbl_1_bss_1884].x = 100; + lbl_1_bss_D8F0[lbl_1_bss_1884].y = 100; + lbl_1_bss_D8F0[lbl_1_bss_1884].z = 0; + lbl_1_bss_18F0[lbl_1_bss_1884].x = 100; + lbl_1_bss_18F0[lbl_1_bss_1884].y = -500; + lbl_1_bss_18F0[lbl_1_bss_1884].z = 0; + lbl_1_bss_1884++; + Hu3DModelAttrReset(lbl_1_bss_199C2[arg0+55], 0x40000002); + Hu3DMotionTimeSet(lbl_1_bss_199C2[arg0+55], 0); + temp_r28 = 1; + } + HuPrcVSleep(); + } + for(temp_r30=0; temp_r30<5; temp_r30++) { + if(arg0 == lbl_1_data_2C8[temp_r30]) { + lbl_1_bss_198F0[temp_r30][1] = 4; + fn_1_ABD0(temp_r30, arg0); + } + } + HuAudFXPlay(1851); + return temp_r27; +} + +void fn_1_9418(s16 arg0) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + + s16 temp_r31; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + s16 temp_r24; + s16 temp_r23; + float sp8[2]; + temp_f31 = 0; + fn_1_8180(0); + Hu3DModelPosSet(lbl_1_bss_2D0, 124, 0, 70); + Hu3DModelRotSet(lbl_1_bss_2D0, 0, 180, 0); + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[3], 0, 4, 0x40000020); + HuPrcSleep(12); + HuWinMesMaxSizeGet(1, sp8, 0x1C000F); + temp_r29 = HuWinCreate(-10000, 340, sp8[0], sp8[1], 1); + HuWinMesSpeedSet(temp_r29, 0); + HuWinBGTPLvlSet(temp_r29, 0); + HuWinMesSet(temp_r29, 0x1C000F); + CharModelMotionSet(lbl_1_bss_2DA, lbl_1_bss_2C0[2]); + Hu3DModelAttrSet(lbl_1_bss_2D0, 0x40000002); + temp_f29 = Hu3DMotionTimeGet(lbl_1_bss_2D0); + temp_f28 = Hu3DMotionMaxTimeGet(lbl_1_bss_2D0); + if(GWPlayerCfg[lbl_1_bss_2DC].iscom) { + temp_r27 = frandmod(100)+20; + } + while(1) { + temp_r26 = HuPadBtnDown[lbl_1_bss_2D8]; + temp_r23 = HuPadBtn[lbl_1_bss_2D8]; + temp_r25 = HuPadStkY[lbl_1_bss_2D8]; + if(GWPlayerCfg[lbl_1_bss_2DC].iscom) { + temp_r23 = 0; + if(temp_r27 != 0) { + temp_r27--; + temp_r25 = -72; + } else { + temp_r26 = PAD_BUTTON_A; + } + } + if((temp_r26 & PAD_BUTTON_A) && lbl_1_bss_788[arg0] > 0) { + break; + } + if(HuPadTrigR[lbl_1_bss_2D8] > 10) { + if(temp_f31 < 90.0f) { + temp_f31 += 5.0f; + } + fn_1_8180(arg0+2); + } else { + fn_1_8180(0); + if(temp_f31 > 0.0f) { + temp_f31 -= 5.0f; + } + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_34C[temp_r31].y = 80.0-(150.0*sind(temp_f31)); + } + temp_f30 = -(temp_r25 >> 3); + temp_f30 /= 20.0f; + if(temp_f30) { + if(temp_f30+lbl_1_bss_788[arg0] < 0.0f) { + temp_f30 = -lbl_1_bss_788[arg0]; + } else { + if(temp_f30+lbl_1_bss_788[arg0] > 50.0f) { + temp_f30 = 50.0f-lbl_1_bss_788[arg0]; + } + } + temp_f29 += temp_f30; + if(temp_f29 >= temp_f28) { + temp_f29 -= temp_f28; + } + } else { + temp_f30 = -0.3f; + if(temp_f30+lbl_1_bss_788[arg0] < 0.0f) { + temp_f30 = -lbl_1_bss_788[arg0]; + } + } + Hu3DMotionTimeSet(lbl_1_bss_2D0, temp_f29); + lbl_1_bss_788[arg0] += temp_f30; + Hu3DModelPosSet(lbl_1_bss_2D0, 124, 0, 70+lbl_1_bss_788[arg0]); + for(temp_r31=0; temp_r31<5; temp_r31++) { + if(arg0 == lbl_1_data_2C8[temp_r31]) { + fn_1_ABD0(temp_r31, arg0); + } + } + HuPrcVSleep(); + } + if(temp_f31 > 0) { + fn_1_8180(0); + for(temp_r28=0; temp_r28<10; temp_r28++) { + temp_f31 -= 10.0f; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_34C[temp_r31].y = 80.0-(150.0*sind(temp_f31)); + } + if(temp_f31 == 0.0f) { + break; + } + HuPrcVSleep(); + } + } + CharModelMotionShiftSet(lbl_1_bss_2DA, lbl_1_bss_2C0[3], 0, 8, 0x0); + HuPrcSleep(4); + temp_r24 = lbl_1_bss_788[arg0]/4; + lbl_1_bss_1888.y = (-15-temp_r24)+(0.1*(float)frandmod(10)); + lbl_1_bss_788[arg0] = 0; + HuWinExCleanup(temp_r29); + HuAudFXPlay(1852); +} + +void fn_1_9CAC(s16 arg0, s16 arg1) +{ + Mtx sp38; + Mtx sp8; + ModelData *temp_r29; + + Hu3DMotionSet(lbl_1_bss_199C2[arg0+58], lbl_1_bss_1990E[63]); + Hu3DModelAttrSet(lbl_1_bss_199C2[arg0+58], 0x40000001); + Hu3DModelAttrReset(lbl_1_bss_199C2[64], 0x1); + Hu3DModelAttrSet(lbl_1_bss_199C2[64], 0x40000001); + Hu3DMotionTimeSet(lbl_1_bss_199C2[64], 0); + MTXTrans(sp8, 0, -150, 0); + if(arg0 == 0) { + switch(arg1) { + case 0: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[3], "d1_itemhook1", sp38); + break; + + case 1: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[3], "d1_itemhook2", sp38); + break; + + case 2: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[3], "d1_itemhook3", sp38); + break; + + case 3: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[3], "d1_itemhook4", sp38); + break; + } + } else if(arg0 == 1) { + switch(arg1) { + case 0: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[5], "d2_itemhook1", sp38); + break; + + case 1: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[5], "d2_itemhook2", sp38); + break; + + case 2: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[5], "d2_itemhook3", sp38); + break; + } + } else { + switch(arg1) { + case 0: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook1", sp38); + break; + + case 1: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook4", sp38); + break; + + case 2: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook2", sp38); + break; + + case 3: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook7", sp38); + break; + + case 4: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook6", sp38); + break; + + case 5: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook3", sp38); + break; + + case 6: + Hu3DModelObjMtxGet(lbl_1_bss_199C2[7], "d3_itemhook5", sp38); + break; + } + mtxScaleCat(sp8, 0.8, 1, 0.8); + } + temp_r29 = &Hu3DData[lbl_1_bss_199C2[64]]; + MTXConcat(sp38, sp8, sp38); + MTXCopy(sp38, temp_r29->unk_F0); +} + +void fn_1_A060(void) +{ + s16 temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + Vec sp20; + Vec sp14; + float sp8[3] = { 0, 40, 60 }; + for(temp_r30=0; temp_r30<3; temp_r30++) { + lbl_1_bss_34C[temp_r30].y = -100; + lbl_1_bss_34C[temp_r30].z = 200; + lbl_1_bss_328[temp_r30].x = lbl_1_bss_328[temp_r30].y = lbl_1_bss_328[temp_r30].z = 0.3f; + Hu3DModelAttrReset(lbl_1_bss_199C2[temp_r30+71], 1); + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r30+71], 0x40000001); + } + lbl_1_bss_34C[0].x = 188; + lbl_1_bss_34C[1].x = 388; + lbl_1_bss_34C[2].x = 288; + temp_r29 = temp_r27 = 0; + while(1) { + for(temp_r30=0; temp_r30<3; temp_r30++) { + sp14 = lbl_1_bss_34C[temp_r30]; + sp14.y += 5.0*sind(sp8[temp_r30]); + Hu3D2Dto3D(&sp14, 1, &sp20); + Hu3DModelPosSet(lbl_1_bss_199C2[temp_r30+71], sp20.x, sp20.y, sp20.z); + Hu3DModelRotSet(lbl_1_bss_199C2[temp_r30+71], lbl_1_bss_2A8[0].x , lbl_1_bss_2A8[0].y, lbl_1_bss_2A8[0].z); + Hu3DModelScaleSet(lbl_1_bss_199C2[temp_r30+71], lbl_1_bss_328[temp_r30].x/2.0, lbl_1_bss_328[temp_r30].y/2.0, lbl_1_bss_328[temp_r30].z/2.0); + switch(temp_r30) { + case 0: + for(temp_r31=0; temp_r31<4; temp_r31++) { + Hu3DModelScaleSet(lbl_1_bss_199C2[temp_r31+74], lbl_1_bss_328[temp_r30].x*1.2, lbl_1_bss_328[temp_r30].y*1.2, lbl_1_bss_328[temp_r30].z*1.2); + } + if(lbl_1_bss_2D6 != -2) { + if(lbl_1_bss_2D6 == -1) { + if((temp_r27 & 0x7) == 0 && (++temp_r29) >= 4) { + temp_r29 = 0; + } + temp_r27++; + temp_r28 = lbl_1_bss_199C2[temp_r29+74]; + for(temp_r31=0; temp_r31<4; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+74], 1); + } + Hu3DModelAttrReset(temp_r28, 1); + } else { + temp_r28 = lbl_1_bss_199C2[lbl_1_bss_2D6+74]; + for(temp_r31=0; temp_r31<4; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+74], 1); + } + Hu3DModelAttrReset(temp_r28, 1); + } + Hu3DModelPosSet(temp_r28, sp20.x, sp20.y, sp20.z); + Hu3DModelRotSet(temp_r28, 90.0f+lbl_1_bss_2A8[0].x , lbl_1_bss_2A8[0].y, lbl_1_bss_2A8[0].z); + } + break; + + case 1: + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(temp_r31 == lbl_1_bss_2D6) { + continue; + } + Hu3DModelScaleSet(lbl_1_bss_199C2[temp_r31+74], lbl_1_bss_328[temp_r30].x*1.2, lbl_1_bss_328[temp_r30].y*1.2, lbl_1_bss_328[temp_r30].z*1.2); + } + if(lbl_1_bss_2D4 != -2) { + if(lbl_1_bss_2D4 == -1) { + if((temp_r27 & 0x7) == 0) { + temp_r29++; + if(temp_r29 == lbl_1_bss_2D6) { + temp_r29++; + } + if(temp_r29 >= 4) { + temp_r29 = 0; + if(lbl_1_bss_2D6 == 0) { + temp_r29++; + } + } + + } else { + if(temp_r29 == lbl_1_bss_2D6) { + temp_r29++; + if(temp_r29 >= 4) { + temp_r29 = 0; + } + } + } + temp_r27++; + temp_r28 = lbl_1_bss_199C2[temp_r29+74]; + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(temp_r31 != lbl_1_bss_2D6) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+74], 1); + } + + } + Hu3DModelAttrReset(temp_r28, 1); + } else { + temp_r28 = lbl_1_bss_199C2[lbl_1_bss_2D4+74]; + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(temp_r31 != lbl_1_bss_2D6) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+74], 1); + } + + } + Hu3DModelAttrReset(temp_r28, 1); + } + Hu3DModelPosSet(temp_r28, sp20.x, sp20.y, sp20.z); + Hu3DModelRotSet(temp_r28, 90.0f+lbl_1_bss_2A8[0].x , lbl_1_bss_2A8[0].y, lbl_1_bss_2A8[0].z); + } + break; + + case 2: + for(temp_r31=0; temp_r31<7; temp_r31++) { + Hu3DModelScaleSet(lbl_1_bss_199C2[temp_r31+78], lbl_1_bss_328[temp_r30].x*1.2, lbl_1_bss_328[temp_r30].y*1.2, lbl_1_bss_328[temp_r30].z*1.2); + } + if(lbl_1_bss_2D2 != -2) { + if(lbl_1_bss_2D2 == -1) { + if((temp_r27 & 0x7) == 0 && (++temp_r29) >= 7) { + temp_r29 = 0; + } + temp_r27++; + temp_r28 = lbl_1_bss_199C2[temp_r29+78]; + for(temp_r31=0; temp_r31<7; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+78], 1); + } + Hu3DModelAttrReset(temp_r28, 1); + } else { + temp_r28 = lbl_1_bss_199C2[lbl_1_bss_2D2+78]; + for(temp_r31=0; temp_r31<7; temp_r31++) { + Hu3DModelAttrSet(lbl_1_bss_199C2[temp_r31+78], 1); + } + Hu3DModelAttrReset(temp_r28, 1); + } + Hu3DModelPosSet(temp_r28, sp20.x, sp20.y, sp20.z); + Hu3DModelRotSet(temp_r28, 90.0f+lbl_1_bss_2A8[0].x , lbl_1_bss_2A8[0].y, lbl_1_bss_2A8[0].z); + } + break; + } + sp8[temp_r30] += 4.0*(1.0+(temp_r30*0.05)); + if(sp8[temp_r30] > 360.0f) { + sp8[temp_r30] -= 360.0f; + } + } + HuPrcVSleep(); + } + +} + +void fn_1_ABD0(s16 arg0, s16 arg1) +{ + float temp_f31; + float temp_f30; + float temp_f29; + s16 *temp_r31; + s16 temp_r29; + s16 temp_r28; + Vec sp14; + Vec sp8; + temp_r31 = &lbl_1_bss_198F0[arg0][0]; + temp_r29 = lbl_1_bss_199C2[arg0+38]; + if(temp_r31[1] & 0x2) { + if(temp_r31[0] == 85) { + if(Hu3DMotionIDGet(temp_r29) != lbl_1_bss_1990E[45] && Hu3DMotionShiftIDGet(temp_r29) != lbl_1_bss_1990E[45]) { + Hu3DMotionShiftSet(temp_r29, lbl_1_bss_1990E[45], 0, 8, 0); + } + } else { + if(Hu3DMotionIDGet(temp_r29) != lbl_1_bss_1990E[46] && Hu3DMotionShiftIDGet(temp_r29) != lbl_1_bss_1990E[46]) { + Hu3DMotionShiftSet(temp_r29, lbl_1_bss_1990E[46], 0, 8, 0x40000001); + } + } + temp_r31[0]--; + if(temp_r31[0] <= 0) { + temp_r31[1] &= ~0x2; + temp_r31[1] |= 0x4; + temp_r31[0] = 20; + } + } else { + if(temp_r31[1] & 0x4) { + if(Hu3DMotionIDGet(temp_r29) != lbl_1_bss_1990E[43] && Hu3DMotionShiftIDGet(temp_r29) != lbl_1_bss_1990E[43]) { + Hu3DMotionShiftSet(temp_r29, lbl_1_bss_1990E[43], 0, 16, 0x40000001); + } + temp_r31[0]--; + if(temp_r31[0] <= 0) { + temp_r31[1] &= ~0x4; + temp_r31[0] = frandmod(30)+30; + } + } else { + temp_r31[0]--; + if(temp_r31[0] <= 0) { + temp_r31[1] |= 4; + temp_r31[0] = 60; + } else { + if(Hu3DMotionIDGet(temp_r29) != lbl_1_bss_1990E[44] ) { + Hu3DMotionSet(temp_r29, lbl_1_bss_1990E[44]); + } + if(temp_r31[1] & 0x1) { + temp_f31 = -1; + temp_f30 = -90; + } else { + temp_f31 = 1; + temp_f30 = 90; + } + sp8 = lbl_1_bss_18B4[arg0]; + sp8.x += temp_f31; + for(temp_r28=0; temp_r28<5; temp_r28++) { + if(temp_r28 == arg0 || lbl_1_bss_18A0[temp_r28] == 0) { + continue; + } + VECSubtract(&sp8, &lbl_1_bss_18B4[temp_r28], &sp14); + if(VECMag(&sp14) < 55.0f) { + break; + } + } + if(temp_r28 == 5) { + lbl_1_bss_18B4[arg0].x += temp_f31; + if(lbl_1_bss_18B4[arg0].x < lbl_1_data_2A0[(arg0*2)]) { + lbl_1_bss_18B4[arg0].x = lbl_1_data_2A0[(arg0*2)]; + temp_r31[1] ^= 0x1; + temp_r31[1] |= 0x4; + temp_r31[0] = 60; + } + if(lbl_1_bss_18B4[arg0].x > lbl_1_data_2A0[(arg0*2)+1]) { + lbl_1_bss_18B4[arg0].x = lbl_1_data_2A0[(arg0*2)+1]; + temp_r31[1] ^= 0x1; + temp_r31[1] |= 0x4; + temp_r31[0] = 60; + } + } else { + temp_r31[1] ^= 0x1; + temp_r31[1] |= 0x4; + temp_r31[0] = 60; + } + } + } + } + lbl_1_bss_824[arg0].x = lbl_1_bss_18B4[arg0].x; + lbl_1_bss_824[arg0].y = 215; + lbl_1_bss_824[arg0].z = lbl_1_bss_18B4[arg0].y; +} + +s16 lbl_1_data_3A4[] = { + 4, 3, 7 +}; + +Vec lbl_1_data_3AC[] = { + { -118.75, -70, 0}, + { -56.25, -70, 0 }, + { 6.25, -70, 0 }, + { 68.75, -70, 0} +}; + +Vec lbl_1_data_3DC[] = { + { -108.35, -70, 0}, + { -25.05, -70, 0 }, + { 58.25, -70, 0 }, +}; + +Vec lbl_1_data_400[] = { + { -125, -70, 0 }, + { -75, -70, 0 }, + { -25, -70, 0 }, + { 25, -70, 0 }, + { 75, -70, 0 }, + { -85, -190, 0 }, + { 35, -190, 0 } +}; + +Vec *lbl_1_data_454[] = { + lbl_1_data_3AC, + lbl_1_data_3DC, + lbl_1_data_400 +}; + +Vec *fn_1_CA30(Vec *arg0, Vec *arg1, Vec *arg2); + +float fn_1_CB70(Vec *arg0, Vec *arg1, Vec *arg2); + +s16 fn_1_B1E8(Vec *arg0, Vec *arg1, s16 arg2) +{ + float temp_f31; + float temp_f30; + float temp_f28; + float temp_f27; + + s16 temp_r30; + Vec *temp_r28; + s32 temp_r27; + Vec *temp_r25; + u8 temp_r24; + s16 temp_r23; + Vec sp4C; + + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + s32 spC; + + temp_r23 = -1; + spC = 1; + temp_f28 = VECMag(arg1); + sp1C = *arg1; + temp_r27 = 0; + sp10 = *arg0; + temp_r24 = lbl_1_bss_310-120; + for(temp_r30=temp_f30=0; temp_r30<120; temp_r30++, temp_r24++) { + temp_f30 += lbl_1_bss_370[temp_r24]; + } + if(temp_f30 < 120.0f*sqrtf(6.0f)) { + lbl_1_bss_312 = 10; + } + while(temp_f28 > 0.0f) { + if(temp_f28 > 3.0f) { + temp_f28 -= 3.0f; + temp_f31 = 3.0f; + } else { + temp_f31 = temp_f28; + temp_f28 = 0; + } + VECNormalize(&sp1C, &sp1C); + VECScale(&sp1C, &sp1C, temp_f31); + VECAdd(arg0, &sp1C, &sp4C); + temp_f31 = VECMag(&sp1C); + if(lbl_1_bss_312 == 0) { + for(temp_r30=0; temp_r30<5; temp_r30++) { + if(lbl_1_bss_18A0[temp_r30] == 0) { + continue; + } + VECSubtract(&sp4C, &lbl_1_bss_18B4[temp_r30], &sp34); + temp_f30 = VECMag(&sp34); + if(temp_f30 < 33.0) { + VECNormalize(&sp34, &sp34); + VECScale(&sp34, &sp28, 33.0f); + VECAdd(&lbl_1_bss_18B4[temp_r30], &sp28, &sp4C); + VECScale(&sp1C, &sp28, -1.0f); + temp_f27 = (sp28.x*sp34.x)+(sp28.y*sp34.y); + sp34.x = (2.0*sp34.x*temp_f27)-sp28.x; + sp34.y = (2.0*sp34.y*temp_f27)-sp28.y; + sp34.z = 0; + VECNormalize(&sp34, &sp34); + VECScale(&sp34, &sp1C, temp_f31); + VECAdd(&sp4C, &sp1C, &sp34); + temp_f30 = VECSquareDistance(&sp34, &lbl_1_bss_18B4[temp_r30]); + if(temp_f30 < 1089.0) { + VECScale(&sp1C, &sp1C, -1.0f); + } + lbl_1_bss_198F0[temp_r30][1] = 2; + lbl_1_bss_198F0[temp_r30][0] = 100; + temp_r27 = 1; + } + } + } else { + lbl_1_bss_312--; + } + for(temp_r30=0; temp_r30= 169.0f && VECSquareDistance(&lbl_1_bss_18F0[temp_r30], &sp4C) >= 169.0f) { + VECSubtract(temp_r25, &lbl_1_bss_D8F0[temp_r30], &sp34); + if(VECMag2Point(&sp34) > VECMag2Point(&sp40)) { + continue; + } + VECSubtract(temp_r25, &lbl_1_bss_18F0[temp_r30], &sp34); + if(VECMag2Point(&sp34) > VECMag2Point(&sp40)) { + continue; + } + } + VECSubtract(&sp4C, temp_r25, &sp34); + VECNormalize(&sp34, &sp34); + VECScale(&sp34, &sp34, 13.0f); + VECAdd(temp_r25, &sp34, &sp4C); + VECSubtract(arg0, &sp4C, &sp34); + *arg0 = sp4C; + temp_f31 -= VECMag(&sp34); + if(temp_f31 < 0.0f) { + temp_f28 -= temp_f31; + temp_f31 = ABS(temp_f31); + } + sp34 = sp40; + sp34.z = 1; + VECCrossProduct(&sp34, &sp40, &sp34); + VECNormalize(&sp34, &sp34); + VECScale(&sp1C, &sp28, -1.0f); + temp_f27 = (sp28.x*sp34.x)+(sp28.y*sp34.y); + sp34.x = (1.5*sp34.x*temp_f27)-sp28.x; + sp34.y = (1.5*sp34.y*temp_f27)-sp28.y; + sp34.z = 0; + VECNormalize(&sp34, &sp34); + VECScale(&sp34, &sp1C, temp_f31); + lbl_1_bss_884[temp_r30] = 10; + VECScale(arg1, arg1, 0.96f); + VECNormalize(&sp1C, &sp34); + VECNormalize(arg1, &sp28); + if(VECDotProduct(&sp34, &sp28) < 0.5) { + temp_r27 = 1; + } + } + } + VECAdd(arg0, &sp1C, arg0); + if(arg0->x >= lbl_1_bss_77C.x-13.0f) { + arg0->x = lbl_1_bss_77C.x-13.0f-1.0f; + } + if(arg0->y >= lbl_1_bss_77C.y-13.0f) { + arg0->y = lbl_1_bss_77C.y-13.0f-1.0f; + } + if(arg0->x <= lbl_1_bss_770.x+13.0f) { + arg0->x = lbl_1_bss_770.x+13.0f+1.0f; + } + if(arg0->y <= lbl_1_bss_770.y+13.0f) { + arg0->y = lbl_1_bss_770.y+13.0f+1.0f; + } + } + temp_f31 = VECMag(arg1); + VECNormalize(&sp1C, &sp1C); + VECScale(&sp1C, arg1, temp_f31); + if(temp_r27 != 0) { + HuAudFXPlay(1853); + } + if(arg2 < 0 || arg2 >= 3) { + arg2 = 0; + } + temp_r28 = lbl_1_data_454[arg2]; + for(temp_r30=0; temp_r30x = arg1->y = arg1->z = 0; + *arg0 = *temp_r28; + temp_r23= temp_r30; + break; + } + if(temp_f30 < 20.0f) { + VECScale(arg1, arg1, 0.9f); + VECNormalize(&sp34, &sp34); + VECScale(&sp34, &sp34, 0.1*(20.0f-temp_f30)); + VECAdd(arg1, &sp34, arg1); + break; + } + } + if(temp_r30 == lbl_1_data_3A4[arg2]) { + arg1->y += 0.3; + } + if(arg0->x >= lbl_1_bss_77C.x-13.0f) { + arg0->x = lbl_1_bss_77C.x-13.0f-1.0f; + } + if(arg0->y >= lbl_1_bss_77C.y-13.0f) { + arg0->y = lbl_1_bss_77C.y-13.0f-1.0f; + } + if(arg0->x <= lbl_1_bss_770.x+13.0f) { + arg0->x = lbl_1_bss_770.x+13.0f+1.0f; + } + if(arg0->y <= lbl_1_bss_770.y+13.0f) { + arg0->y = lbl_1_bss_770.y+13.0f+1.0f; + } + VECSubtract(arg0, &sp10, &sp34); + lbl_1_bss_370[lbl_1_bss_310++] = VECMag(&sp34); + return temp_r23; +} + +void fn_1_C214(void) +{ + Mtx sp98; + Mtx sp68; + Mtx sp38; + Mtx sp8; + ModelData *temp_r31; + s16 temp_r30; + s16 temp_r29; + MTXRotDeg(sp8, 'z', 120); + while(1) { + temp_r31 = &Hu3DData[lbl_1_bss_199C2[9]]; + Hu3DMotionExec(lbl_1_bss_199C2[9], temp_r31->unk_08, temp_r31->unk_64, 0); + Hu3DModelObjMtxGet(lbl_1_bss_199C2[9], "kaitendai-r_dai", sp38); + for(temp_r30=0; temp_r30<3; temp_r30++) { + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r30]]; + MTXTrans(sp68, lbl_1_bss_860[temp_r30].x, lbl_1_bss_860[temp_r30].y, lbl_1_bss_860[temp_r30].z); + MTXConcat(sp68, lbl_1_bss_794[temp_r30], sp68); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r30+55]]; + MTXTrans(sp68, 0, 150, 0); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r30+58]]; + MTXTrans(sp68, 0, 150, 0); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r30+65]]; + MTXTrans(sp68, 0, 150, 0); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r30+68]]; + MTXTrans(sp68, 0, 150, lbl_1_bss_788[temp_r30]-5.0f); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + for(temp_r29=0; temp_r29<5; temp_r29++) { + if(temp_r30 != lbl_1_data_2C8[temp_r29]) { + continue; + } + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r29+38]]; + MTXTrans(sp68, lbl_1_bss_824[temp_r29].x, lbl_1_bss_824[temp_r29].y, lbl_1_bss_824[temp_r29].z); + mtxScaleCat(sp68, 0.35f, 0.35f, 0.35f); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + temp_r31 = &Hu3DData[lbl_1_bss_199C2[temp_r29+85]]; + MTXTrans(sp68, lbl_1_bss_824[temp_r29].x, lbl_1_bss_824[temp_r29].y+1.0f, lbl_1_bss_824[temp_r29].z); + mtxScaleCat(sp68, 0.5f, 0.5f, 0.5f); + MTXConcat(sp38, sp68, sp98); + MTXCopy(sp98, temp_r31->unk_F0); + } + MTXConcat(sp38, sp8, sp38); + } + HuPrcVSleep(); + } + +} + +void fn_1_C73C(ModelData *model, Mtx matrix) +{ + s16 temp_r31; + u8 temp_r30; + u8 temp_r29; + u8 temp_r28; + + 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_S8, 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(matrix, GX_PNMTX0); + temp_r30 = temp_r29 = temp_r28 = 255; + for(temp_r31=0; temp_r31x*(b)->x)-((a)->x*(c)->x))+(((a)->y*(b)->y)-((a)->y*(c)->y))+(((a)->z*(b)->z)-((a)->z*(c)->z))) + +Vec *fn_1_CA30(Vec *arg0, Vec *arg1, Vec *arg2) +{ + float temp_f31; + Vec spC; + VECNormalize(arg2, &spC); + temp_f31 = -VECDistance2XYZ3(&spC, arg1, arg0); + temp_f31 /= VECMag2Point(&spC); + lbl_1_bss_314.x = (arg1->x+(spC.x*temp_f31)); + lbl_1_bss_314.y = (arg1->y+(spC.y*temp_f31)); + lbl_1_bss_314.z = (arg1->z+(spC.z*temp_f31)); + return &lbl_1_bss_314; +} + +float fn_1_CB70(Vec *arg0, Vec *arg1, Vec *arg2) +{ + Vec *temp_r31 = fn_1_CA30(arg0, arg1, arg2); + temp_r31->x -= arg0->x; + temp_r31->y -= arg0->y; + temp_r31->z -= arg0->z; + return sqrtf(VECMag2Point(temp_r31)); + +} + +s32 fn_1_CE08(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4) +{ + float temp_f31; + float temp_f30; + s32 sp8 = 1; + temp_f31 = (arg1->x*(arg2->y-arg0->y))-(arg1->y*(arg2->x-arg0->x)); + if(0.0f != (arg3->x*arg1->y)-(arg3->y*arg1->x)) { + temp_f31 /= (arg3->x*arg1->y)-(arg3->y*arg1->x); + } else { + return 0; + } + if(arg1->x != 0.0) { + temp_f30 = (((temp_f31*arg3->x)+arg2->x)-arg0->x)/arg1->x; + } else if(arg1->y != 0.0) { + temp_f30 = (((temp_f31*arg3->y)+arg2->y)-arg0->y)/arg1->y; + } else { + temp_f30 = (((temp_f31*arg3->z)+arg2->z)-arg0->z)/arg1->z; + } + arg4->x = (temp_f30*arg1->x)+arg0->x; + arg4->y = (temp_f30*arg1->y)+arg0->y; + arg4->z = (temp_f30*arg1->z)+arg0->z; + return 1; +} + +s32 fn_1_CF9C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4) +{ + float temp_f31; + float temp_f30; + Vec sp14; + Vec sp8; + sp14.x = arg1->x-arg0->x; + sp14.y = arg1->y-arg0->y; + sp14.z = arg1->z-arg0->z; + sp8.x = arg3->x-arg2->x; + sp8.y = arg3->y-arg2->y; + sp8.z = arg3->z-arg2->z; + temp_f31 = (sp14.x*(arg2->y-arg0->y))-(sp14.y*(arg2->x-arg0->x)); + if(0.0f != (sp8.x*sp14.y)-(sp8.y*sp14.x)) { + temp_f31 /= (sp8.x*sp14.y)-(sp8.y*sp14.x); + } else { + return 0; + } + if(sp14.x != 0.0) { + temp_f30 = (((temp_f31*sp8.x)+arg2->x)-arg0->x)/sp14.x; + } else if(sp14.y != 0.0) { + temp_f30 = (((temp_f31*sp8.y)+arg2->y)-arg0->y)/sp14.y; + } else { + temp_f30 = (((temp_f31*sp8.z)+arg2->z)-arg0->z)/sp14.z; + } + if(temp_f30 < 0.0f || temp_f30 > 1.0f || temp_f31 < 0.0f || temp_f31 > 1.0f) { + return 0; + } + arg4->x = (temp_f30*sp14.x)+arg0->x; + arg4->y = (temp_f30*sp14.y)+arg0->y; + arg4->z = (temp_f30*sp14.z)+arg0->z; + return 1; +} + +void fn_1_D1E0(s16 model) +{ + Vec sp14[4]; + Vec sp8; + s32 temp_r31; + s32 temp_r30; + HsfData *temp_r29; + HsfBuffer *temp_r28; + HsfFace *temp_r27; + s32 temp_r26; + s32 temp_r25; + s32 temp_r24; + s32 temp_r23; + HsfBuffer *temp_r22; + temp_r29 = Hu3DData[model].hsfData; + lbl_1_bss_77C.x = lbl_1_bss_77C.y = -100000; + lbl_1_bss_770.x = lbl_1_bss_770.y = 100000; + temp_r28 = temp_r29->face; + for(temp_r24=temp_r31=0; temp_r24faceCnt; temp_r24++, temp_r28++) { + temp_r27 = temp_r28->data; + for(temp_r23=0; temp_r23count; temp_r23++, temp_r27++) { + switch(temp_r27->type & 0x7) { + case 0: + case 1: + case 2: + break; + + case 3: + temp_r22 = temp_r29->vertex; + for(temp_r26=temp_r25=0; temp_r26<4; temp_r26++) { + sp8 = ((Vec *)temp_r22->data)[temp_r27->indices[temp_r26][0]]; + for(temp_r30=0; temp_r30 lbl_1_bss_77C.x) { + lbl_1_bss_77C.x = sp14[0].x; + } + if(sp14[0].z > lbl_1_bss_77C.y) { + lbl_1_bss_77C.y = sp14[0].z; + } + if(sp14[0].x < lbl_1_bss_770.x) { + lbl_1_bss_770.x = sp14[0].x; + } + if(sp14[0].z < lbl_1_bss_770.y) { + lbl_1_bss_770.y = sp14[0].z; + } + lbl_1_bss_18F0[temp_r31].x = sp14[1].x; + lbl_1_bss_18F0[temp_r31].y = sp14[1].z; + lbl_1_bss_18F0[temp_r31].z = 0; + + if(sp14[1].x > lbl_1_bss_77C.x) { + lbl_1_bss_77C.x = sp14[1].x; + } + if(sp14[1].z > lbl_1_bss_77C.y) { + lbl_1_bss_77C.y = sp14[1].z; + } + if(sp14[1].x < lbl_1_bss_770.x) { + lbl_1_bss_770.x = sp14[1].x; + } + if(sp14[1].z < lbl_1_bss_770.y) { + lbl_1_bss_770.y = sp14[1].z; + } + temp_r31++; + break; + + case 4: + break; + + default: + break; + } + } + } + lbl_1_bss_1884 = temp_r31; +} \ No newline at end of file