diff --git a/config/GMPE01_00/rels/m401Dll/symbols.txt b/config/GMPE01_00/rels/m401Dll/symbols.txt index 0b63df81..bdfc8937 100644 --- a/config/GMPE01_00/rels/m401Dll/symbols.txt +++ b/config/GMPE01_00/rels/m401Dll/symbols.txt @@ -511,10 +511,11 @@ lbl_2_bss_11C = .bss:0x0000011C; // type:object size:0x4 data:4byte lbl_2_bss_120 = .bss:0x00000120; // type:object size:0x2 data:2byte lbl_2_bss_124 = .bss:0x00000124; // type:object size:0x4 data:float lbl_2_bss_128 = .bss:0x00000128; // type:object size:0x4 data:float -lbl_2_bss_12C = .bss:0x0000012C; // type:object size:0x8 data:float +lbl_2_bss_12C = .bss:0x0000012C; // type:object size:0x4 data:float +lbl_2_bss_130 = .bss:0x00000130; // type:object size:0x4 data:float lbl_2_bss_134 = .bss:0x00000134; // type:object size:0x2 data:2byte lbl_2_bss_136 = .bss:0x00000136; // type:object size:0x8 -lbl_2_bss_13E = .bss:0x0000013E; // type:object size:0xE2 +lbl_2_bss_13E = .bss:0x0000013E; // type:object size:0xE0 lbl_2_bss_220 = .bss:0x00000220; // type:object size:0x18 data:4byte lbl_2_bss_238 = .bss:0x00000238; // type:object size:0x4 data:4byte lbl_2_bss_23C = .bss:0x0000023C; // type:object size:0x4 data:4byte 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/m401Dll.h b/include/REL/m401Dll.h index 4f218ffb..0f735435 100644 --- a/include/REL/m401Dll.h +++ b/include/REL/m401Dll.h @@ -8,6 +8,10 @@ extern float lbl_2_bss_12C; extern float lbl_2_bss_128; extern float lbl_2_bss_124; extern s16 lbl_2_bss_120; +extern Vec lbl_2_bss_6C; +extern Vec lbl_2_bss_60; +extern float lbl_2_bss_50; +extern omObjData **lbl_2_bss_118; typedef struct m401_work_player { s16 unk0; @@ -59,6 +63,10 @@ typedef struct unkwork_10A88 { float unk1C; } UnkWork10A88; +void fn_2_169C(s16 arg0); + +void fn_2_A8A4(omObjData *object, float x, float y, float z); + void fn_2_10240(Vec *arg0, Vec *arg1); void fn_2_1041C(void); void fn_2_10710(void); @@ -66,7 +74,7 @@ void fn_2_10710(void); void fn_2_1079C(void); omObjData *fn_2_10A88(Vec *arg0, s16 arg1); -void fn_2_141B0(void); +omObjData *fn_2_141B0(void); omObjData *fn_2_14640(Process *objman); #endif \ No newline at end of file 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 6e9dafdd..8c748948 100644 --- a/include/ext_math.h +++ b/include/ext_math.h @@ -11,11 +11,14 @@ typedef struct vec2f { #define ABS(x) (((x) < 0) ? -(x) : (x)) +#define VECDistanceXYZ(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->y-(b)->y)*((a)->y-(b)->y))+(((a)->z-(b)->z)*((a)->z-(b)->z))) + #define VECDistanceXZ(a, b) sqrtf((((a)->x-(b)->x)*((a)->x-(b)->x))+(((a)->z-(b)->z)*((a)->z-(b)->z))) #define VECDistanceZY(a, b) sqrtf((((a)->z-(b)->z)*((a)->z-(b)->z))+(((a)->y-(b)->y)*((a)->y-(b)->y))) #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/m401Dll/main_ex.c b/src/REL/m401Dll/main_ex.c new file mode 100644 index 00000000..10e2bf6c --- /dev/null +++ b/src/REL/m401Dll/main_ex.c @@ -0,0 +1,1135 @@ +#include "game/hsfman.h" +#include "game/sprite.h" +#include "game/object.h" +#include "game/hsfanim.h" +#include "game/hsfmotion.h" +#include "game/audio.h" +#include "game/objsub.h" +#include "game/frand.h" + +#include "ext_math.h" + +#include "REL/m401Dll.h" + +struct Bss13EData { + s16 unk0; + s16 unk2[3]; +}; + +AnimData *lbl_2_bss_250; +AnimData *lbl_2_bss_24C; +AnimData *lbl_2_bss_248; +AnimData *lbl_2_bss_244; +AnimData *lbl_2_bss_240; +AnimData *lbl_2_bss_23C; +AnimData *lbl_2_bss_238; +AnimData *lbl_2_bss_220[2][3]; +struct Bss13EData lbl_2_bss_13E[28]; +s16 lbl_2_bss_136[4]; +s16 lbl_2_bss_134; +float lbl_2_bss_130; +float lbl_2_bss_12C; +float lbl_2_bss_128; +float lbl_2_bss_124; +s16 lbl_2_bss_120; + + +void fn_2_10240(Vec *arg0, Vec *arg1) +{ + CameraData *camera; + Mtx lookat; + Mtx44 proj; + float coord[4]; + arg0->y = -arg0->y; + camera = &Hu3DCamera[0]; + MTXLookAt(lookat, &camera->pos, &camera->up, &camera->target); + MTXMultVec(lookat, arg0, arg0); + MTXPerspective(proj, camera->fov, camera->aspect, camera->near, camera->far); + coord[0] = (arg0->x*proj[0][0])+(arg0->y*proj[0][1])+(arg0->z*proj[0][2])+proj[0][3]; + coord[1] = (arg0->x*proj[1][0])+(arg0->y*proj[1][1])+(arg0->z*proj[1][2])+proj[1][3]; + coord[2] = (arg0->x*proj[2][0])+(arg0->y*proj[2][1])+(arg0->z*proj[2][2])+proj[2][3]; + coord[3] = (arg0->x*proj[3][0])+(arg0->y*proj[3][1])+(arg0->z*proj[3][2])+proj[3][3]; + arg1->x = ((coord[0]/coord[3])*320.0f)+320.0f; + arg1->y = ((coord[1]/coord[3])*240.0f)+240.0f; + arg1->z = coord[2]/coord[3]; +} + +void fn_2_1041C(void) +{ + s32 i; + lbl_2_bss_250 = HuSprAnimReadFile(0x200011); + lbl_2_bss_24C = HuSprAnimReadFile(0x200012); + lbl_2_bss_248 = HuSprAnimReadFile(0x200013); + lbl_2_bss_240 = HuSprAnimReadFile(0x200014); + lbl_2_bss_23C = HuSprAnimReadFile(0x200015); + lbl_2_bss_238 = HuSprAnimReadFile(0x200016); + HuSprAnimLock(lbl_2_bss_250); + HuSprAnimLock(lbl_2_bss_24C); + HuSprAnimLock(lbl_2_bss_248); + HuSprAnimLock(lbl_2_bss_240); + HuSprAnimLock(lbl_2_bss_23C); + HuSprAnimLock(lbl_2_bss_238); + lbl_2_bss_244 = HuSprAnimReadFile(0x200026); + HuSprAnimLock(lbl_2_bss_244); + lbl_2_bss_220[0][0] = lbl_2_bss_250; + lbl_2_bss_220[0][1] = lbl_2_bss_24C; + lbl_2_bss_220[0][2] = lbl_2_bss_248; + lbl_2_bss_220[1][0] = lbl_2_bss_240; + lbl_2_bss_220[1][1] = lbl_2_bss_23C; + lbl_2_bss_220[1][2] = lbl_2_bss_238; + for(i=0; i<4; i++) { + lbl_2_bss_136[i] = Hu3DModelCreateFile(0x200017); + Hu3DModelAttrSet(lbl_2_bss_136[i], 1); + Hu3DModelAttrSet(lbl_2_bss_136[i], 0x40000001); + Hu3DModelScaleSet(lbl_2_bss_136[i], 1.5f, 1.5f, 1.0f); + Hu3DModelLayerSet(lbl_2_bss_136[i], 2); + } +} + +void fn_2_10710(void) +{ + HuSprAnimKill(lbl_2_bss_250); + HuSprAnimKill(lbl_2_bss_24C); + HuSprAnimKill(lbl_2_bss_248); + HuSprAnimKill(lbl_2_bss_240); + HuSprAnimKill(lbl_2_bss_23C); + HuSprAnimKill(lbl_2_bss_238); + HuSprAnimKill(lbl_2_bss_244); +} + +void fn_2_1079C(void) +{ + s32 i; + for(i=0; i<28; i++) { + lbl_2_bss_13E[i].unk0 = 0; + lbl_2_bss_13E[i].unk2[0] = Hu3DParticleCreate(lbl_2_bss_250, 80); + lbl_2_bss_13E[i].unk2[1] = Hu3DParticleCreate(lbl_2_bss_24C, 80); + lbl_2_bss_13E[i].unk2[2] = Hu3DParticleCreate(lbl_2_bss_248, 80); + Hu3DModelAttrSet(lbl_2_bss_13E[i].unk2[0], 1); + Hu3DModelAttrSet(lbl_2_bss_13E[i].unk2[1], 1); + Hu3DModelAttrSet(lbl_2_bss_13E[i].unk2[2], 1); + } + lbl_2_bss_134 = 0; +} + +s16 fn_2_108C8(void) +{ + s32 i; + s32 j; + for(i=0; i<28; i++) { + if(!lbl_2_bss_13E[i].unk0) { + for(j=0; j<3; j++) { + Hu3DModelAttrReset(lbl_2_bss_13E[i].unk2[j], 1); + } + lbl_2_bss_13E[i].unk0 = 1; + return i; + } + } + return -1; +} + +void fn_2_10980(s16 arg0) +{ + s32 i; + lbl_2_bss_13E[arg0].unk0 = 0; + for(i=0; i<3; i++) { + Hu3DModelAttrSet(lbl_2_bss_13E[arg0].unk2[i], 1); + } +} + +s16 fn_2_10A08(void) +{ + s16 temp_r31 = lbl_2_bss_136[lbl_2_bss_134]; + lbl_2_bss_134 = (lbl_2_bss_134+1)&0x3; + Hu3DModelTPLvlSet(temp_r31, 1.0f); + return temp_r31; +} + +void fn_2_113AC(omObjData *object); +void fn_2_11A68(omObjData *object); +void fn_2_11B78(omObjData *object); +void fn_2_11C30(omObjData *object); +void fn_2_11D40(omObjData *object); +void fn_2_11E44(omObjData *object); +void fn_2_11EFC(omObjData *object); + +void fn_2_11FB4(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_2_126C8(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_2_126F4(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_2_12B30(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_2_1301C(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_2_1350C(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_2_13B7C(ModelData *model, ParticleData *particle, Mtx matrix); + +omObjData *fn_2_10A88(Vec *arg0, s16 arg1) +{ + omObjData *temp_r31; + s32 temp_r30; + ParticleData *temp_r28; + UnkWork10A88 *temp_r27; + s16 temp_r24 = fn_2_108C8(); + if(temp_r24 < 0) { + return NULL; + } + { + s16 temp_r22 = -1; + if(arg1 == 0) { + temp_r22 = 1; + } + temp_r31 = omAddObjEx(HuPrcCurrentGet(), 0x514, 3, 0, temp_r22, NULL); + } + + + temp_r31->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWork10A88), MEMORY_DEFAULT_NUM); + temp_r27 = temp_r31->data; + temp_r27->unk0 = *arg0; + for(temp_r30=0; temp_r30<3; temp_r30++) { + temp_r31->model[temp_r30] = lbl_2_bss_13E[temp_r24].unk2[temp_r30]; + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + Hu3DParticleCntSet(temp_r31->model[temp_r30], 0); + Hu3DParticleAnimModeSet(temp_r31->model[temp_r30], 0); + Hu3DModelLayerSet(temp_r31->model[temp_r30], 1); + if(arg1 == 1) { + temp_r31->unk10 = fn_2_10A08(); + Hu3DModelAttrReset(temp_r31->unk10, 1); + temp_r28->unk_44 = lbl_2_bss_220[1][temp_r30]; + temp_r27->unk1C = 1.0f; + temp_r31->work[3] = 45; + Hu3DModelTPLvlSet(temp_r31->unk10, temp_r27->unk1C); + } else { + temp_r28->unk_44 = lbl_2_bss_220[0][temp_r30]; + } + } + temp_r27->unk10 = 3; + temp_r27->unk12 = temp_r24; + //I am not table to force arg1 to get reloaded without deleting code or serious temporary register allocation issues + (void)arg1; + switch((temp_r27->unk18 = arg1)) { + case 1: + Hu3DModelPosSet(temp_r31->unk10, arg0->x, arg0->y, lbl_2_bss_60.z+arg0->z); + + case 0: + temp_r31->trans.x = arg0->x; + temp_r31->trans.y = arg0->y; + temp_r31->trans.z = lbl_2_bss_60.z+arg0->z; + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_11FB4); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 0); + temp_r28->unk_00 = (temp_r30*4.5f)/3.0f; + temp_r28->unk_02 = 0; + temp_r28->unk_1C = temp_r31; + } + temp_r27->unk14 = 0; + temp_r31->func = fn_2_113AC; + break; + + case 2: + fn_2_A8A4(temp_r31, arg0->x, arg0->y, arg0->z); + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_126C8); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 0); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + temp_r28->unk_00 = (temp_r30*2)+(frand() & 0x7); + temp_r28->unk_1C = temp_r31; + } + temp_r31->func = fn_2_11A68; + break; + + case 3: + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_126F4); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], arg0->x, arg0->y, arg0->z); + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 0); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + temp_r28->unk_00 = (temp_r30*2)+(frand() & 0x7); + temp_r28->unk_1C = temp_r31; + } + temp_r31->func = fn_2_11B78; + break; + + case 4: + fn_2_A8A4(temp_r31, arg0->x, arg0->y, arg0->z); + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_12B30); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 0); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + temp_r28->unk_00 = (temp_r30*2)+(frand() & 0x7); + temp_r28->unk_1C = temp_r31; + } + temp_r31->func = fn_2_11C30; + break; + + case 5: + fn_2_A8A4(temp_r31, arg0->x, arg0->y, arg0->z); + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_1301C); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 1); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + temp_r28->unk_00 = (temp_r30*2)+(frand() & 0x7); + temp_r28->unk_1C = temp_r31; + } + temp_r31->func = fn_2_11D40; + break; + + case 6: + omSetTra(temp_r31, arg0->x, arg0->y, arg0->z); + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_1350C); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 1); + } + temp_r31->func = fn_2_11E44; + break; + + case 7: + omSetTra(temp_r31, arg0->x, arg0->y, arg0->z); + for(temp_r30=0; temp_r30<3; temp_r30++) { + Hu3DParticleHookSet(temp_r31->model[temp_r30], fn_2_13B7C); + Hu3DParticleColSet(temp_r31->model[temp_r30], 255, 255, 255); + Hu3DModelPosSet(temp_r31->model[temp_r30], temp_r31->trans.x, temp_r31->trans.y, temp_r31->trans.z); + temp_r28 = Hu3DData[temp_r31->model[temp_r30]].unk_120; + Hu3DParticleBlendModeSet(temp_r31->model[temp_r30], 1); + } + temp_r31->func = fn_2_11EFC; + break; + + default: + break; + } + return temp_r31; +} + +void fn_2_118B0(omObjData *object); +void fn_2_123F8(ModelData *model, ParticleData *particle, Mtx matrix); + +void fn_2_113AC(omObjData *object) +{ + UnkWork10A88 *temp_r30; + s32 temp_r29; + M401WorkPlayer *temp_r28; + omObjData *temp_r27; + ParticleData *temp_r25; + s16 temp_r24; + temp_r30 = object->data; + temp_r30->unk0.z += (lbl_2_bss_50*0.5f); + object->trans.x = temp_r30->unk0.x; + object->trans.y = temp_r30->unk0.y; + object->trans.z = lbl_2_bss_60.z+temp_r30->unk0.z; + if(object->unk10 != 0) { + Hu3DModelPosSet(object->unk10, object->trans.x, object->trans.y, object->trans.z); + } + for(temp_r29=1; temp_r29<3; temp_r29++) { + Hu3DModelRotSet(object->model[temp_r29], object->rot.x, object->rot.y, object->rot.z); + Hu3DModelPosSet(object->model[temp_r29], object->trans.x, object->trans.y, object->trans.z); + } + for(temp_r29=0; temp_r29<4; temp_r29++) { + float dist; + temp_r27 = lbl_2_bss_118[temp_r29]; + temp_r28 = temp_r27->data; + if(temp_r28->unk78 != 0) { + continue; + } + dist = VECDistanceXYZ(&object->trans, &temp_r27->trans); + if(dist < 108.00001f) { + Hu3DMotionShiftSet(lbl_2_bss_118[temp_r29]->model[0], lbl_2_bss_118[temp_r29]->motion[6], 0, 10, 0); + HuAudFXPlay(1288); + if(temp_r30->unk18 == 0) { + HuAudFXPlay(9); + temp_r28->unk72++; + omVibrate(temp_r28->unk4, 12, 6, 6); + } else { + HuAudFXPlay(1292); + temp_r28->unk74 = 3; + temp_r28->unk72 += 3; + fn_2_169C(temp_r28->unk4); + omVibrate(temp_r28->unk4, 12, 4, 2); + } + temp_r28->unk84 = 50; + for(temp_r29=0; temp_r29<3; temp_r29++) { + temp_r25 = Hu3DData[object->model[temp_r29]].unk_120; + temp_r25->unk_02 = 0; + Hu3DParticleHookSet(object->model[temp_r29], fn_2_123F8); + } + object->func = fn_2_118B0; + break; + } + } + if(temp_r30->unk0.z > 850.0f) { + temp_r30->unk14 = 1; + } + if(object->unk10) { + if(object->work[3] != 0) { + object->work[3]--; + } else { + temp_r30->unk1C -= 0.033333335f; + if(temp_r30->unk1C < 0) { + temp_r30->unk1C = 0; + } + Hu3DModelTPLvlSet(object->unk10, temp_r30->unk1C); + } + } + if(temp_r30->unk10 == 0) { + if(object->unk10) { + Hu3DModelAttrSet(object->unk10, 1); + } + fn_2_10980(temp_r30->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } + +} + +void fn_2_118B0(omObjData *object) +{ + UnkWork10A88 *temp_r30; + s32 temp_r29; + + temp_r30 = object->data; + temp_r30->unk0.z += (lbl_2_bss_50*0.5f); + object->trans.x = temp_r30->unk0.x; + object->trans.y = temp_r30->unk0.y; + object->trans.z = lbl_2_bss_60.z+temp_r30->unk0.z; + for(temp_r29=1; temp_r29<3; temp_r29++) { + Hu3DModelPosSet(object->model[temp_r29], object->trans.x, object->trans.y, object->trans.z); + } + if(object->unk10 != 0) { + Hu3DModelPosSet(object->unk10, object->trans.x, object->trans.y, object->trans.z); + temp_r30->unk1C -= 0.033333335f; + if(temp_r30->unk1C < 0) { + temp_r30->unk1C = 0; + } + Hu3DModelTPLvlSet(object->unk10, temp_r30->unk1C); + } + + + if(temp_r30->unk10 == 0) { + if(object->unk10) { + Hu3DModelAttrSet(object->unk10, 1); + } + fn_2_10980(temp_r30->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_11A68(omObjData *object) +{ + s32 temp_r30; + UnkWork10A88 *temp_r29; + UnkWork10A88 *sp8; + temp_r29 = object->data; + sp8 = temp_r29->unkC->data; + omSetTra(object, 0, 0, 0); + for(temp_r30=1; temp_r30<3; temp_r30++) { + Hu3DModelPosSet(object->model[temp_r30], object->trans.x, object->trans.y, object->trans.z); + } + if(object->work[0] == 1) { + fn_2_10980(temp_r29->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + + +void fn_2_11B78(omObjData *object) +{ + UnkWork10A88 *temp_r29; + temp_r29 = object->data; + if(object->work[0] == 1) { + fn_2_10980(temp_r29->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_11C30(omObjData *object) +{ + s32 temp_r30; + UnkWork10A88 *temp_r29; + UnkWork10A88 *sp8; + temp_r29 = object->data; + sp8 = temp_r29->unkC->data; + omSetTra(object, 0, 0, 0); + for(temp_r30=1; temp_r30<3; temp_r30++) { + Hu3DModelPosSet(object->model[temp_r30], object->trans.x, object->trans.y, object->trans.z); + } + if(object->work[1] == 1) { + fn_2_10980(temp_r29->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_11D40(omObjData *object) +{ + s32 temp_r30; + UnkWork10A88 *temp_r29; + UnkWork10A88 *sp8; + temp_r29 = object->data; + sp8 = temp_r29->unkC->data; + omSetTra(object, temp_r29->unkC->trans.x, temp_r29->unkC->trans.y, temp_r29->unkC->trans.z); + for(temp_r30=1; temp_r30<3; temp_r30++) { + Hu3DModelPosSet(object->model[temp_r30], object->trans.x, object->trans.y, object->trans.z); + } + if(object->work[1] == 1) { + fn_2_10980(temp_r29->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_11E44(omObjData *object) +{ + UnkWork10A88 *temp_r29; + temp_r29 = object->data; + if(object->work[0] == 1) { + fn_2_10980(temp_r29->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_11EFC(omObjData *object) +{ + UnkWork10A88 *temp_r29; + temp_r29 = object->data; + if(object->work[0] == 1) { + fn_2_10980(temp_r29->unk12); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_11FB4(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + float temp_f29; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + UnkWork10A88 *temp_r28; + s32 temp_r27; + temp_r28 = ((omObjData *)(particle->unk_1C))->data; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + temp_f29 = 360.0f/(particle->unk_30/2); + temp_f31 = particle->unk_00; + for(temp_r29=0; temp_r29unk_30/2; temp_r29++, temp_r31++) { + temp_f30 = (0.1f*(rand8() % 50))+50; + temp_r31->unk2C = (0.1f*(rand8() % 41))+8.0f; + temp_r31->unk08.x = temp_f31; + temp_r31->unk08.y = temp_f30; + temp_r31->unk08.z = 0; + temp_r31->unk14.x = (10.0f/255.0f)*((u8)frand()); + temp_r31->unk40.a = 180; + temp_f31 += temp_f29; + temp_r31->unk34.z = 0; + } + for(temp_r29=0; temp_r29unk_30/2; temp_r29++, temp_r31++) { + temp_r31->unk2C = 0; + temp_r31->unk40.a = 0; + } + } + temp_r31 = particle->unk_48; + temp_r27 = 0; + for(temp_r29=0; temp_r29unk_30/2; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a != 0) { + temp_r27++; + temp_f30 = (6.0*sind(temp_r31->unk08.z))+temp_r31->unk08.y; + temp_r31->unk34.x = temp_f30*cosd(temp_r31->unk08.x); + temp_r31->unk34.y = temp_f30*sind(temp_r31->unk08.x); + temp_r31->unk08.z += temp_r31->unk14.x; + if(temp_r31->unk08.z >= 360.0f) { + temp_r31->unk08.z -= 360.0f; + } + temp_f31 = temp_r31->unk40.a; + if(temp_r28->unk14) { + temp_f31 -= 3.0f; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + } + } + temp_r31->unk40.a = temp_f31; + } + } + if(!temp_r27) { + temp_r28->unk10--; + } +} + +void fn_2_123F8(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + UnkWork10A88 *temp_r27; + if(!particle->unk_02) { + particle->unk_02 = 1; + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30/2; temp_r29++, temp_r31++) { + temp_r31->unk08.x = temp_r31->unk34.x; + temp_r31->unk14.x = 0; + temp_r31->unk14.y = 5.0f+((35.0f/255.0f)*((u8)frand())); + temp_r31->unk14.z = 8.0f+((8.0f/255.0f)*((u8)frand())); + temp_r31->unk24 = 3.0f+((5.0f/255.0f)*((u8)frand())); + } + } + temp_r31 = particle->unk_48; + temp_r28 = 0; + for(temp_r29=0; temp_r29unk_30/2; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a != 0) { + temp_r28++; + temp_r31->unk34.x = temp_r31->unk08.x+(temp_r31->unk14.z*sind(temp_r31->unk14.x)); + temp_r31->unk14.x += temp_r31->unk14.y; + if(temp_r31->unk14.x >= 360.0f) { + temp_r31->unk14.x -= 360.0f; + } + temp_r31->unk34.y += temp_r31->unk24; + temp_f31 = temp_r31->unk40.a; + temp_f31 -= 3.0f; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + } + temp_r31->unk40.a = temp_f31; + } + } + if(temp_r28 == 0) { + UnkWork10A88 *temp_r27 = ((omObjData *)(particle->unk_1C))->data; + temp_r27->unk10--; + } +} + +//Here exclusively to match fn_2_126C8 +static inline void DummyInline(s32 arg0) +{ + s32 temp1, temp2, temp3, temp4, temp5; + if(arg0 != 0) { + temp1 = 1; + temp2 = temp1*2; + temp3 = temp2*3; + temp4 = temp3*4; + temp5 = temp4*5; + temp5 = temp5/2; + } +} + +void fn_2_126C8(ModelData *model, ParticleData *particle, Mtx matrix) +{ + DummyInline(0); +} + +void fn_2_126F4(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk40.a = 0; + temp_r31->unk2C = 0; + } + particle->unk_00 = 0; + } + if(particle->unk_00 == 0) { + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r28=0; temp_r28unk_30; temp_r28++, temp_r31++) { + if(temp_r31->unk40.a == 0) { + break; + } + } + if(temp_r28 == particle->unk_30) { + continue; + } + temp_r31->unk08.x = -50.0f+(0.3921569f*((u8)frand())); + temp_r31->unk08.y = 0.058823533f*((u8)frand()); + temp_r31->unk14.x = (90.0f/255.0f)*((u8)frand()); + temp_r31->unk14.y = 5.0f+(0.098039225f*((u8)frand())); + temp_r31->unk14.z = (float)(frand() % 10) + 8.0f; + temp_r31->unk34.z = -5.0f+((11.0f/255.0f)*((u8)frand())); + temp_r31->unk34.y = (float)(frand() % 31) + -5.0f; + temp_r31->unk2C = temp_r31->unk08.y+35.0f; + temp_r31->unk40.a = 210; + temp_r31->unk08.y = (0.2*temp_r31->unk08.y)+5.0; + particle->unk_00 = (frand()%10)+10; + } + } else { + particle->unk_00--; + } + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a == 0) { + continue; + } + temp_r31->unk34.x = (temp_r31->unk14.z*sind(temp_r31->unk14.x))+temp_r31->unk08.x; + temp_r31->unk14.x += temp_r31->unk14.y; + if(temp_r31->unk14.x >= 360.0f) { + temp_r31->unk14.x -= 360.0f; + } + temp_r31->unk34.y += temp_r31->unk08.y; + temp_r31->unk40.a--; + } +} + +void fn_2_12B30(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *temp_r31; + s32 temp_r29; + M401WorkPlayer *temp_r28; + omObjData *temp_r27; + s32 temp_r26; + s32 temp_r25; + UnkWork10A88 *temp_r24; + temp_r27 = particle->unk_1C; + temp_r24 = ((omObjData *)(particle->unk_1C))->data; + temp_r28 = temp_r24->unkC->data; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk40.a = 0; + temp_r31->unk2C = 0; + temp_r31->unk20 = 0; + } + particle->unk_00 = 0; + } + if(particle->unk_00 == 0 && temp_r27->work[0] == 0) { + for(temp_r29=0; temp_r29<10; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r26=0; temp_r26unk_30; temp_r26++, temp_r31++) { + if(temp_r31->unk20 == 0) { + break; + } + } + if(temp_r26 == particle->unk_30) { + continue; + } + temp_r31->unk08.x = (((40.0f/255.0f)*((u8)frand()))+(temp_r28->unk18.x-20.0f)); + temp_r31->unk08.y = (frand() % 5)+3; + temp_r31->unk14.x = ((90.0f/255.0f)*((u8)frand())); + temp_r31->unk14.y = 5.0f+((45.0f/255.0f)*((u8)frand())); + temp_r31->unk14.z = 2.0f+(0.011764707f*((u8)frand())); + temp_r31->unk40.a = 180; + temp_r31->unk34.z = ((0.121568635f*((u8)frand()))+(temp_r28->unk18.z+70.0f)); + temp_r31->unk34.y = ((0.20000002f*((u8)frand()))+(temp_r28->unk18.y-25.0f)); + particle->unk_00 = (frand()%6)+5; + temp_r31->unk20 = 1; + temp_r31->unk2C = 11; + } + } else { + particle->unk_00--; + } + temp_r31 = particle->unk_48; + temp_r25 = 0; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a != 0) { + float temp_f31; + temp_r31->unk34.x = (temp_r31->unk14.z*sind(temp_r31->unk14.x))+temp_r31->unk08.x; + temp_r31->unk14.x += temp_r31->unk14.y; + if(temp_r31->unk14.x >= 360.0f) { + temp_r31->unk14.x -= 360.0f; + } + temp_r31->unk34.y += 3.0f; + temp_f31 = temp_r31->unk40.a; + temp_f31 -= temp_r31->unk08.y; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + temp_r31->unk20 = 0; + } + + temp_r31->unk40.a = temp_f31; + temp_r25++; + } + } + if(temp_r25 == 0 && temp_r27->work[0] == 1) { + temp_r27->work[1] = 1; + } +} + +void fn_2_1301C(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *temp_r31; + s32 temp_r29; + M401WorkPlayer *temp_r28; + omObjData *temp_r27; + s32 temp_r26; + s32 temp_r25; + UnkWork10A88 *temp_r24; + temp_r27 = particle->unk_1C; + temp_r24 = (temp_r27)->data; + temp_r28 = temp_r24->unkC->data; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk40.a = 0; + temp_r31->unk2C = 0; + temp_r31->unk20 = 0; + } + particle->unk_00 = 0; + } + if(particle->unk_00 == 0 && temp_r27->work[0] == 0) { + for(temp_r29=0; temp_r29<10; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r26=0; temp_r26unk_30; temp_r26++, temp_r31++) { + if(temp_r31->unk20 == 0) { + break; + } + } + if(temp_r26 == particle->unk_30) { + continue; + } + temp_r31->unk08.x = (((80.0f/255.0f)*((u8)frand()))+(-40.0f)); + temp_r31->unk08.y = (frand() % 10)+7; + temp_r31->unk14.x = ((90.0f/255.0f)*((u8)frand())); + temp_r31->unk14.y = 5.0f+((45.0f/255.0f)*((u8)frand())); + temp_r31->unk14.z = 2.0f+(frand() % 3); + temp_r31->unk40.a = 180; + temp_r31->unk34.z = ((0.121568635f*((u8)frand()))+(85.0f)); + temp_r31->unk34.y = ((0.2392157f*((u8)frand()))+(-30.0f)); + particle->unk_00 = (frand()%3)+3; + temp_r31->unk20 = 1; + temp_r31->unk2C = 11; + } + } else { + particle->unk_00--; + } + temp_r31 = particle->unk_48; + temp_r25 = 0; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a != 0) { + float temp_f31; + temp_r31->unk34.x = (temp_r31->unk14.z*sind(temp_r31->unk14.x))+temp_r31->unk08.x; + temp_r31->unk14.x += temp_r31->unk14.y; + if(temp_r31->unk14.x >= 360.0f) { + temp_r31->unk14.x -= 360.0f; + } + temp_r31->unk34.y += 3.0f; + temp_r31->unk34.z -= 1.0f; + temp_f31 = temp_r31->unk40.a; + temp_f31 -= temp_r31->unk08.y; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + temp_r31->unk20 = 0; + } + + temp_r31->unk40.a = temp_f31; + temp_r25++; + } + } + if(temp_r25 == 0 && temp_r27->work[0] == 1) { + temp_r27->work[1] = 1; + } +} + +void fn_2_1350C(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk2C = 0; + } + particle->unk_1C = (void *)1; + particle->unk_02 = 0; + particle->unk_00 = 0; + } + if(particle->unk_00 == 0) { + for(temp_r29=0; temp_r29<16; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r28=0; temp_r28unk_30; temp_r28++, temp_r31++) { + if(temp_r31->unk2C == 0) { + break; + } + } + if(temp_r28 == particle->unk_30) { + continue; + } + temp_f30 = (360.0f/255.0f)*((u8)frand()); + temp_r31->unk20 = 45*sind(temp_f30); + temp_r31->unk28 = 45*cosd(temp_f30); + temp_r31->unk24 = 0; + temp_f28 = 0.098039225f*((u8)frand())+50.0f; + temp_f29 = (2.0f/255.0f)*((u8)frand())+2.5f; + temp_r31->unk08.x = temp_f29*sind(temp_f30)*cosd(temp_f28); + temp_r31->unk08.y = 0.8f*(temp_f29*sind(temp_f28)); + temp_r31->unk08.z = temp_f29*cosd(temp_f30)*cosd(temp_f28); + temp_r31->unk14.x = 1; + temp_r31->unk14.y = 255; + temp_r31->unk2C = (4.0f/255.0f)*((u8)frand())+3.0f; + temp_r31->unk40.r = (155.0f/255.0f)*((u8)frand())+100.0f; + temp_r31->unk40.g = 0.21568629f*((u8)frand())+200.0f; + temp_r31->unk40.b = 255; + temp_r31->unk40.a = temp_r31->unk14.y; + } + particle->unk_00 = 0.058823533f*((u8)frand())+30.0f; + } else { + particle->unk_00--; + } + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk2C != 0) { + temp_f31 = temp_r31->unk14.x; + temp_r31->unk34.x = (temp_r31->unk08.x*temp_f31)+temp_r31->unk20; + temp_r31->unk34.z = (temp_r31->unk08.z*temp_f31)+temp_r31->unk28; + temp_r31->unk34.y = ((temp_r31->unk08.y*temp_f31)+temp_r31->unk24)-(0.2*temp_f31*temp_f31); + temp_r31->unk14.y -= 3.5f; + temp_r31->unk40.a = temp_r31->unk14.y; + if(temp_r31->unk2C < 0 || temp_r31->unk14.y < 10.0f || temp_r31->unk34.y <= 0.0f) { + temp_r31->unk2C = 0; + particle->unk_02++; + } + + temp_r31->unk14.x += 0.7f; + } + } +} + +void fn_2_13B7C(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk2C = 0; + } + particle->unk_1C = (void *)1; + particle->unk_02 = 0; + particle->unk_00 = 0; + } + if(particle->unk_1C) { + for(temp_r29=0; temp_r29<20; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r28=0; temp_r28unk_30; temp_r28++, temp_r31++) { + if(temp_r31->unk2C == 0) { + break; + } + } + if(temp_r28 != particle->unk_30) { + temp_f30 = (360.0f/255.0f)*((u8)frand()); + temp_r31->unk20 = 40*sind(temp_f30); + temp_r31->unk28 = 40*cosd(temp_f30); + temp_r31->unk24 = 0; + temp_f28 = (20.0f/255.0f)*((u8)frand())+70.0f; + temp_f29 = (4.0f/255.0f)*((u8)frand())+5.0f; + temp_r31->unk08.x = temp_f29*sind(temp_f30)*cosd(temp_f28); + temp_r31->unk08.y = temp_f29*sind(temp_f28); + temp_r31->unk08.z = temp_f29*cosd(temp_f30)*cosd(temp_f28); + temp_r31->unk14.x = 1; + temp_r31->unk14.y = 255; + temp_r31->unk2C = (4.0f/255.0f)*((u8)frand())+5.0f; + temp_r31->unk40.r = (155.0f/255.0f)*((u8)frand())+100.0f; + temp_r31->unk40.g = 0.21568629f*((u8)frand())+200.0f; + temp_r31->unk40.b = 255; + temp_r31->unk40.a = temp_r31->unk14.y; + } else { + particle->unk_1C = NULL; + break; + } + } + } + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk2C != 0) { + temp_f31 = temp_r31->unk14.x; + temp_r31->unk34.x = (temp_r31->unk08.x*temp_f31)+temp_r31->unk20; + temp_r31->unk34.z = (temp_r31->unk08.z*temp_f31)+temp_r31->unk28; + temp_r31->unk34.y = ((temp_r31->unk08.y*temp_f31)+temp_r31->unk24)-(0.2*temp_f31*temp_f31); + temp_r31->unk14.y -= 3.5f; + temp_r31->unk40.a = temp_r31->unk14.y; + if(temp_r31->unk2C < 0 || temp_r31->unk14.y < 10.0f || temp_r31->unk34.y <= 0.0f) { + temp_r31->unk2C = 0; + particle->unk_02++; + } + temp_r31->unk14.x += 1.0f; + } + } + if(particle->unk_02 >= particle->unk_30 && particle->unk_1C == NULL) { + particle->unk_00 = 1; + } +} + +void fn_2_142D0(omObjData *object); +void fn_2_142D4(ModelData *model, ParticleData *particle, Mtx matrix); + +omObjData *fn_2_141B0(void) +{ + omObjData *object = omAddObjEx(HuPrcCurrentGet(), 1300, 5, 0, -1, fn_2_142D0); + ParticleData *particle; + omSetStatBit(object, 0x100); + object->model[0] = Hu3DParticleCreate(lbl_2_bss_244, 200); + Hu3DParticleHookSet(object->model[0], fn_2_142D4); + Hu3DParticleColSet(object->model[0], 255, 255, 255); + Hu3DModelPosSet(object->model[0], 0, 0, 0); + Hu3DParticleAnimModeSet(object->model[0], 0); + Hu3DModelLayerSet(object->model[0], 1); + Hu3DParticleBlendModeSet(object->model[0], 1); + particle = Hu3DData[object->model[0]].unk_120; + return object; +} + +void fn_2_142D0(omObjData *object) +{ + +} + +void fn_2_142D4(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk2C = 0; + temp_r31->unk34.y = 950; + } + } + if(particle->unk_00 == 0) { + for(temp_r29=0; temp_r29<30; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r28=0; temp_r28unk_30; temp_r28++, temp_r31++) { + if(temp_r31->unk2C == 0) { + break; + } + } + if(temp_r28 == particle->unk_30) { + continue; + } + temp_r31->unk2C = 1; + temp_r31->unk40.a = 150; + temp_r31->unk34.x = ((11.764707f*((u8)frand()))+(-1500.0f)); + temp_r31->unk34.z = ((6.666667f*((u8)frand()))+(-2000.0f)); + temp_r31->unk08.x = 0; + temp_r31->unk08.y = (((5.0f/255.0f)*((u8)frand()))+(5.0f)); + temp_r31->unk08.z = ((0.011764707f*((u8)frand()))+(18.0f)); + } + particle->unk_00 = (frand() % 5)+4; + } else { + particle->unk_00--; + } + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk2C != 0) { + temp_r31->unk34.x += 1.1f; + temp_r31->unk34.z += 1.1f; + temp_r31->unk2C = (temp_r31->unk08.z*sind(temp_r31->unk08.x))+1.0; + temp_r31->unk08.x += temp_r31->unk08.y; + if(temp_r31->unk08.x >= 180.0f) { + temp_r31->unk2C = 0.0f; + } + } + } +} + +void fn_2_14738(omObjData *object); +void fn_2_147B4(ModelData *model, ParticleData *particle, Mtx matrix); + +omObjData *fn_2_14640(Process *objman) +{ + omObjData *object; + object = omAddObjEx(objman, 1300, 1, 0, -1, fn_2_14738); + object->model[0] = Hu3DParticleCreate(lbl_2_bss_250, 450); + Hu3DParticleHookSet(object->model[0], fn_2_147B4); + Hu3DParticleColSet(object->model[0], 255, 255, 255); + Hu3DModelPosSet(object->model[0], 0, -6000, -21000); + Hu3DParticleAnimModeSet(object->model[0], 0); + Hu3DModelLayerSet(object->model[0], 1); + Hu3DParticleBlendModeSet(object->model[0], 1); + return object; +} + +void fn_2_14738(omObjData *object) +{ + omSetTra(object, lbl_2_bss_6C.x, lbl_2_bss_6C.y, lbl_2_bss_6C.z); + if(object->work[0] == 1) { + Hu3DModelAttrSet(object->model[0], 1); + omDelObjEx(HuPrcCurrentGet(), object); + } +} + +void fn_2_147B4(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + s32 temp_r28; + if(particle->unk_34 == 0) { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk40.a = 180; + temp_r31->unk08.x = ((3.9215689f*((u8)frand()))+(-500.0f)); + temp_r31->unk08.y = ((3.529412f*((u8)frand()))+(-500.0f)); + temp_r31->unk08.z = (-300.0f)-((3.9215689f*((u8)frand()))); + temp_r31->unk14.x = (360.0f/255.0f)*((u8)frand()); + temp_r31->unk14.y = (4.0f/255.0f)*((u8)frand()); + temp_r31->unk2C = 2; + } + particle->unk_00 = 0; + } + if(particle->unk_00 == 0) { + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_r31 = particle->unk_48; + for(temp_r28=0; temp_r28unk_30; temp_r28++, temp_r31++) { + if(temp_r31->unk40.a == 0) { + break; + } + } + if(temp_r28 == particle->unk_30) { + continue; + } + temp_r31->unk40.a = 180; + temp_r31->unk08.x = -50.0f+(0.3921569f*((u8)frand())); + temp_r31->unk08.y = 0.058823533f*((u8)frand()); + temp_r31->unk14.x = (90.0f/255.0f)*((u8)frand()); + temp_r31->unk14.y = 5.0f+(0.098039225f*((u8)frand())); + temp_r31->unk14.z = (float)(frand() % 10) + 8.0f; + temp_r31->unk34.z = -5.0f+((11.0f/255.0f)*((u8)frand())); + temp_r31->unk34.y = (float)(frand() % 31) + -5.0f; + temp_r31->unk2C = temp_r31->unk08.y+35.0f; + temp_r31->unk40.a = 210; + temp_r31->unk08.y = (0.2*temp_r31->unk08.y)+5.0; + particle->unk_00 = (frand()%10)+10; + } + + } else { + particle->unk_00--; + } + temp_r31 = particle->unk_48; + temp_f30 = lbl_2_bss_50*0.3f; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk40.a == 0) { + continue; + } + temp_r31->unk34.x = temp_r31->unk08.x; + temp_r31->unk34.y = temp_r31->unk08.y; + temp_r31->unk34.z = temp_r31->unk08.z; + temp_r31->unk08.x -= 0.5*sind(temp_r31->unk14.x); + temp_r31->unk08.z -= -temp_f30; + temp_r31->unk14.x += temp_r31->unk14.y; + if(temp_r31->unk14.x >= 360.0f) { + temp_r31->unk14.x -= 360.0f; + } + if(temp_r31->unk08.z >= 0.0f) { + temp_f31 = 800.0f+((300.0f/255.0f)*((u8)frand())); + temp_r31->unk08.z -= temp_f31; + } + } +} \ No newline at end of file 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