From c8c4ef763c82301c4b4d32b23e984c4975dde2a3 Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Thu, 9 Jan 2025 05:48:18 +0100 Subject: [PATCH] Match m430Dll/water.c (#516) --- config/GMPE01_00/rels/m430Dll/symbols.txt | 32 +- configure.py | 4 +- include/REL/m430Dll.h | 2 +- src/REL/m430Dll/water.c | 1818 +++++++++++++++++++++ 4 files changed, 1837 insertions(+), 19 deletions(-) create mode 100644 src/REL/m430Dll/water.c diff --git a/config/GMPE01_00/rels/m430Dll/symbols.txt b/config/GMPE01_00/rels/m430Dll/symbols.txt index df73f081..a4b72fe6 100644 --- a/config/GMPE01_00/rels/m430Dll/symbols.txt +++ b/config/GMPE01_00/rels/m430Dll/symbols.txt @@ -252,11 +252,11 @@ lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data: lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x14 scope:local data:4byte lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x10 scope:local data:4byte lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x10 scope:local data:4byte -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x1 scope:local data:byte -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x1 scope:local data:byte -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x1 scope:local data:byte -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x1 scope:local data:byte -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:byte lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float @@ -270,13 +270,13 @@ lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 scope:local data: lbl_1_rodata_3D4 = .rodata:0x000003D4; // type:object size:0x4 scope:local data:float lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 scope:local data:float lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 scope:local data:double -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:byte lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:byte lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x1 scope:local data:byte -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:byte lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 scope:local data:float @@ -300,11 +300,11 @@ lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x4 scope:local data: lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x8 scope:local data:double lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x4 scope:local data:float lbl_1_rodata_464 = .rodata:0x00000464; // type:object size:0x4 scope:local data:float -lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_468 = .rodata:0x00000468; // type:object size:0x8 scope:local data:float lbl_1_rodata_470 = .rodata:0x00000470; // type:object size:0x4 scope:local data:float lbl_1_rodata_474 = .rodata:0x00000474; // type:object size:0x4 scope:local data:float lbl_1_rodata_478 = .rodata:0x00000478; // type:object size:0x4 scope:local data:float -lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0xC scope:local data:float lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x8 scope:local data:double lbl_1_rodata_490 = .rodata:0x00000490; // type:object size:0x8 scope:local data:double lbl_1_rodata_498 = .rodata:0x00000498; // type:object size:0x4 scope:local data:float @@ -429,12 +429,12 @@ lbl_1_data_24 = .data:0x00000024; // type:object size:0x4 lbl_1_data_28 = .data:0x00000028; // type:object size:0xC data:float lbl_1_data_34 = .data:0x00000034; // type:object size:0xC data:float lbl_1_data_40 = .data:0x00000040; // type:object size:0xC data:float -lbl_1_data_50 = .data:0x00000050; // type:object size:0x7 data:string -lbl_1_data_57 = .data:0x00000057; // type:object size:0x7 data:string -lbl_1_data_60 = .data:0x00000060; // type:object size:0x48 +lbl_1_data_50 = .data:0x00000050; // type:object size:0x7 scope:local data:string +lbl_1_data_57 = .data:0x00000057; // type:object size:0x7 scope:local data:string +lbl_1_data_60 = .data:0x00000060; // type:object size:0x48 data:float lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x18 -lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x60 -lbl_1_data_120 = .data:0x00000120; // type:object size:0x48 +lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x60 data:float +lbl_1_data_120 = .data:0x00000120; // type:object size:0x48 data:float lbl_1_data_168 = .data:0x00000168; // type:object size:0x8 lbl_1_data_170 = .data:0x00000170; // type:object size:0x38 lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x20 diff --git a/configure.py b/configure.py index e0f1746d..ce78fe3b 100644 --- a/configure.py +++ b/configure.py @@ -1087,8 +1087,8 @@ config.libs = [ Rel( "m430Dll", # Pair-a-sailing objects={ - Object(Matching, "REL/m430Dll/main.c"), - Object(NonMatching, "REL/m430Dll/water.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m430Dll/main.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m430Dll/water.c"), Object(NonMatching, "REL/m430Dll/player.c"), }, ), diff --git a/include/REL/m430Dll.h b/include/REL/m430Dll.h index f6a826a0..e1a47014 100644 --- a/include/REL/m430Dll.h +++ b/include/REL/m430Dll.h @@ -17,7 +17,7 @@ void fn_1_4C48(void); float fn_1_7FBC(s32 arg0); void fn_1_7FFC(s32 arg0, float arg8); void fn_1_AEE0(s32 arg0, Vec *arg1, float arg8, float arg9); -void fn_1_B570(s32 arg0, Vec *arg1, float arg8, float arg9); +void fn_1_B570(s32 arg0, Vec *arg1, float arg8, float arg9, Vec *arg2); void fn_1_BB98(u32 arg0); void fn_1_BBC4(Process *process); diff --git a/src/REL/m430Dll/water.c b/src/REL/m430Dll/water.c new file mode 100644 index 00000000..1d295c95 --- /dev/null +++ b/src/REL/m430Dll/water.c @@ -0,0 +1,1818 @@ +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXStruct.h" +#include "dolphin/gx/GXVert.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/flag.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/wipe.h" +#include "string.h" + +#include "REL/m430Dll.h" + +#ifndef __MWERKS__ +#include "game/esprite.h" +#include "game/frand.h" + +void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXBool signed_offsets, GXBool replace_mode, GXIndTexMtxID matrix_sel); +#endif + +inline double fabs2(double x) +{ + return (double)fabs(x); +} + +typedef struct M430DllUnkStruct2 { + s32 unk_00; + s16 unk_04; + char unk06[2]; + s16 unk_08; + s16 unk_0A; + Vec unk_0C; + Vec unk_18; + float unk_24; + float unk_28; + float unk_2C; + float unk_30; + float unk_34; + float unk_38; +} M430DllUnkStruct2; /* size 0x3C */ + +typedef struct M430DllWork { + s32 unk_00; + Vec unk_04; + s32 unk_10; + s32 unk_14; + s16 unk_18; + s16 unk_1A; + s16 unk_1C; + s16 unk_1E; + float unk_20; + s16 unk_24[0xC]; + s32 unk_3C; + s16 unk_40[0xA]; + s16 unk_54[0xA]; + s16 unk_68[0xA]; + s32 unk_7C; + s16 unk_80[6]; + s16 unk_8C[6]; + s16 unk_98[6]; + s32 unk_A4[6]; + s32 unk_BC; + M430DllUnkStruct2 *unk_C0; +} M430DllWork; /* size 0xC4 */ + +typedef struct M430DllWork2 { + s16 unk_00; + char unk02[4]; + s16 unk_06; + Vec unk_08; + Vec unk_14; + float unk_20; + float unk_24; + float unk_28; + float unk_2C; + float unk_30; + float unk_34; + float unk_38; + float unk_3C; +} M430DllWork2; /* size 0x40 */ + +typedef struct M430DllBss60Struct { + /* 0x00 */ u32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; + /* 0x1C */ u32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ Vec *unk_2C; + /* 0x30 */ Vec *unk_30; + /* 0x34 */ void *unk_34; + /* 0x38 */ void *unk_38; + /* 0x3C */ char pad_3C[4]; + /* 0x40 */ s32 unk_40; + /* 0x44 */ Vec *unk_44[2]; + /* 0x4C */ char pad_4C[8]; + /* 0x54 */ GXColor *unk_54[2]; + /* 0x5C */ s32 unk_5C; + /* 0x60 */ void *unk_60; + /* 0x64 */ u32 unk_64; + /* 0x68 */ u32 unk_68; + /* 0x6C */ void *unk_6C; +} M430DllBss60Struct; /* size = 0x70 */ + +void fn_1_4CB4(omObjData *object); +void fn_1_5DF8(omObjData *object); +void fn_1_6180(M430DllWork *arg0); +void fn_1_6540(M430DllWork *arg0); +void fn_1_6754(M430DllWork *arg0); +void fn_1_6DC8(M430DllWork *arg0); +M430DllUnkStruct2 *fn_1_70AC(omObjData *arg0, s32 arg1, s16 arg2); +void fn_1_732C(omObjData *object, M430DllUnkStruct2 *arg1); +void fn_1_76D8(omObjData *object, M430DllUnkStruct2 *arg1); +void fn_1_7848(omObjData *object); +void fn_1_7CAC(omObjData *object); +void fn_1_7EAC(omObjData *object, M430DllWork2 *arg1); +void fn_1_803C(omObjData *object); +void fn_1_8264(omObjData *object); +void fn_1_82F4(omObjData *object, M430DllBss60Struct *arg1); +void fn_1_86B4(omObjData *object, M430DllBss60Struct *arg1); +void fn_1_8B5C(omObjData *object, M430DllBss60Struct *arg1); +void fn_1_8CE0(ModelData *model, Mtx matrix); +void fn_1_963C(ModelData *model, Mtx matrix, u32 arg2); +void fn_1_9C90(ModelData *model, Mtx matrix); +void fn_1_A3A8(ModelData *model, Mtx matrix); +void fn_1_AB98(ModelData *model, Mtx matrix); +void fn_1_AC84(ModelData *model, Mtx matrix); +void fn_1_AD04(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_1_B394(ModelData *model, ParticleData *particle, Mtx matrix); +float fn_1_BB54(u32 arg0); + +AnimData *lbl_1_bss_150; +AnimData *lbl_1_bss_14C; +AnimData *lbl_1_bss_148; +AnimData *lbl_1_bss_144; +AnimData *lbl_1_bss_140; +M430DllBss60Struct lbl_1_bss_60[2]; +s32 lbl_1_bss_5C; +omObjData *lbl_1_bss_58; +omObjData *lbl_1_bss_54; +omObjData *lbl_1_bss_50; +float lbl_1_bss_4C; +float lbl_1_bss_48; +s32 lbl_1_bss_44; +s32 lbl_1_bss_40; + +void fn_1_4A80(Process *process) +{ + omObjData *object; + + lbl_1_bss_150 = HuSprAnimRead(HuDataReadNum(0x3D0019, 0x10000000)); + lbl_1_bss_14C = HuSprAnimRead(HuDataReadNum(0x3D001A, 0x10000000)); + lbl_1_bss_148 = HuSprAnimRead(HuDataReadNum(0x3D0014, 0x10000000)); + lbl_1_bss_144 = HuSprAnimRead(HuDataReadNum(0x3D0017, 0x10000000)); + lbl_1_bss_140 = HuSprAnimRead(HuDataReadNum(0x3D0018, 0x10000000)); + object = lbl_1_bss_58 = omAddObjEx(process, 0x1E, 0x68, 0, -1, fn_1_4CB4); + object->work[0] = 0; + object = lbl_1_bss_54 = omAddObjEx(process, 0x1E, 7, 0, -1, fn_1_803C); + object->work[0] = 0; + object = lbl_1_bss_50 = omAddObjEx(process, 0x1E, 0, 0, -1, fn_1_7848); + object->work[0] = 0; + lbl_1_bss_5C = 0; + lbl_1_bss_44 = lbl_1_bss_40 = 0; + lbl_1_bss_4C = lbl_1_bss_48 = 0.0f; +} + +void fn_1_4C48(void) +{ + HuSprAnimKill(lbl_1_bss_150); + HuSprAnimKill(lbl_1_bss_14C); + HuSprAnimKill(lbl_1_bss_148); + HuSprAnimKill(lbl_1_bss_144); + HuSprAnimKill(lbl_1_bss_140); +} + +void fn_1_4CB4(omObjData *object) +{ + s32 var_r31; + M430DllWork *var_r30; + s32 var_r28; + s32 var_r27; + HsfData *var_r26; + s32 var_r25; + M430DllWork *work; + + u32 spC[1] = { 0x3D0001 }; + s32 sp8[1]; + u32 sp90[4] = { 0x003D000B, 0x003D000C, 0x003D000D, 0x003D000E }; + u32 sp80[4] = { 0x003D0002, 0x003D0002, 0x003D0003, 0x003D0003 }; + u32 sp70[4] = { 0x003D0004, 0x003D0004, 0x00000000, 0x00000000 }; + u32 sp60[4] = { 0x003D0006, 0x003D0007, 0x003D0008, 0x003D0009 }; + s32 sp50[4]; + s32 sp40[4]; + s32 sp30[4]; + s32 sp20[4]; + s32 sp18[2] = { 1, 2 }; + s32 sp10[2]; + s32 spA0[6] = { 0, 3, 2, 1, 2, 3 }; + + object->stat |= 0x100; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 2 * sizeof(M430DllWork), MEMORY_DEFAULT_NUM); + work = object->data; + memset(work, 0, 2 * sizeof(M430DllWork)); + for (var_r30 = work, var_r31 = 0; var_r31 < 2; var_r31++, var_r30++) { + var_r30->unk_00 = var_r31; + var_r30->unk_04.x = var_r30->unk_04.y = var_r30->unk_04.z = 0.0f; + var_r30->unk_3C = 0; + var_r30->unk_7C = 0; + var_r30->unk_BC = 0; + } + var_r30 = work; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + object->model[var_r31] = Hu3DModelCreateFile(0x3D0000); + var_r30[var_r31].unk_18 = object->model[var_r31]; + Hu3DModelLayerSet(var_r30[var_r31].unk_18, 0); + Hu3DModelScaleSet(var_r30[var_r31].unk_18, 1.15f, 1.15f, 1.15f); + var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(0x3D000A), 1); + var_r30[var_r31].unk_1A = var_r27; + Hu3DModelLayerSet(var_r27, 1); + *((s16 *)Hu3DData[var_r27].unk_120) = 1; + var_r30[var_r31].unk_1C = Hu3DTexScrollCreate(var_r30[var_r31].unk_18, "pa_sk2"); + var_r30[var_r31].unk_1E = Hu3DTexScrollCreate(var_r30[var_r31].unk_18, "pa_sk3"); + Hu3DTexScrollPosMoveSet(var_r30[var_r31].unk_1C, -0.00009166667f, 0.0f, 0.0f); + Hu3DTexScrollPosMoveSet(var_r30[var_r31].unk_1E, -0.00020000001f, 0.0f, 0.0f); + var_r30[var_r31].unk_20 = 50000.0f; + var_r26 = Hu3DData[var_r30[var_r31].unk_18].hsfData; + for (var_r28 = 0; var_r28 < var_r26->materialCnt; var_r28++) { + var_r26->material[var_r28].flags &= 0xFFFFFDFF; + var_r26->material[var_r28].pass = 1; + var_r26->material[var_r28].invAlpha = 0.001f; + } + } + object->model[2] = Hu3DModelCreateFile(0x3D000F); + Hu3DModelLayerSet(object->model[2], 1); + Hu3DModelScaleSet(object->model[2], 1.5f, 1.5f, 1.5f); + object->model[3] = Hu3DModelCreateFile(0x3D0010); + Hu3DModelLayerSet(object->model[3], 2); + Hu3DModelScaleSet(object->model[3], 1.5f, 1.5f, 1.5f); + for (var_r31 = 0; var_r31 < 2; var_r31++) { + var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(0x3D0015), 0x64); + object->model[var_r31 + 4] = var_r27; + var_r30[var_r31].unk_10 = var_r27; + Hu3DModelLayerSet(var_r27, 2); + Hu3DParticleColSet(var_r27, 0xFF, 0xFF, 0xFF); + Hu3DParticleHookSet(var_r27, fn_1_AD04); + Hu3DModelPosSet(var_r27, 0.0f, 0.0f, 0.0f); + *((s16 *)Hu3DData[var_r27].unk_120) = 0; + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(0x3D0015), 0x64); + object->model[var_r31 + 6] = var_r27; + var_r30[var_r31].unk_14 = var_r27; + Hu3DModelLayerSet(var_r27, 1); + Hu3DParticleColSet(var_r27, 0xFF, 0xFF, 0xFF); + Hu3DParticleHookSet(var_r27, fn_1_B394); + Hu3DModelPosSet(var_r27, 0.0f, 0.0f, 0.0f); + *((s16 *)Hu3DData[var_r27].unk_120) = 0; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp20[var_r31] = Hu3DModelCreateFile(sp90[var_r31]); + } + for (var_r31 = 0; var_r31 < 0xC; var_r31++) { + var_r27 = sp20[var_r31 % 4]; + object->model[var_r31 + 8] = Hu3DModelLink(var_r27); + object->model[var_r31 + 0x14] = Hu3DModelLink(var_r27); + var_r30[0].unk_24[var_r31] = object->model[var_r31 + 8]; + var_r30[1].unk_24[var_r31] = object->model[var_r31 + 0x14]; + Hu3DModelLayerSet(var_r30[0].unk_24[var_r31], 1); + Hu3DModelLayerSet(var_r30[1].unk_24[var_r31], 1); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp50[var_r31] = Hu3DModelCreateFile(sp80[var_r31]); + sp40[var_r31] = -1; + sp30[var_r31] = -1; + if (sp70[var_r31] != 0) { + sp40[var_r31] = Hu3DModelCreateFile(sp70[var_r31]); + } + } + for (var_r31 = 0; var_r31 < 6; var_r31++) { + s32 sp10[2] = { 0x5C, 0x62 }; + var_r25 = spA0[var_r31]; + var_r27 = sp50[var_r25]; + for (var_r28 = 0; var_r28 < 2; var_r28++) { + object->model[var_r31 + sp10[var_r28]] = Hu3DModelLink(var_r27); + var_r30[var_r28].unk_80[var_r31] = object->model[var_r31 + sp10[var_r28]]; + Hu3DModelLayerSet(var_r30[var_r28].unk_80[var_r31], 1); + } + for (var_r28 = 0; var_r28 < 2; var_r28++) { + var_r30[var_r28].unk_8C[var_r31] = -1; + var_r30[var_r28].unk_98[var_r31] = -1; + } + if (sp40[var_r25] >= 0) { + var_r27 = sp40[var_r25]; + for (var_r28 = 0; var_r28 < 2; var_r28++) { + var_r30[var_r28].unk_8C[var_r31] = Hu3DModelLink(var_r27); + Hu3DModelLayerSet(var_r30[var_r28].unk_8C[var_r31], 4); + Hu3DModelAttrSet(var_r30[var_r28].unk_8C[var_r31], HU3D_ATTR_ZWRITE_OFF); + } + } + if (sp60[var_r25] != 0) { + for (var_r28 = 0; var_r28 < 2; var_r28++) { + var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(sp60[var_r25]), 1); + var_r30[var_r28].unk_98[var_r31] = var_r27; + Hu3DModelLayerSet(var_r27, 5); + Hu3DParticleColSet(var_r27, 0xFF, 0xFF, 0xFF); + Hu3DModelPosSet(var_r27, 0.0f, 0.0f, 0.0f); + *((s16 *)Hu3DData[var_r27].unk_120) = 1; + } + } + } + for (var_r31 = 0; var_r31 < 1; var_r31++) { + sp8[var_r31] = Hu3DModelCreateFile(spC[var_r31]); + } + for (var_r31 = 0; var_r31 < 0x1E; var_r31 += 3) { + var_r27 = sp8[frandmod(1)]; + object->model[var_r31 + 0x20] = Hu3DModelLink(var_r27); + object->model[var_r31 + 0x21] = Hu3DModelLink(var_r27); + object->model[var_r31 + 0x22] = Hu3DModelLink(var_r27); + object->model[var_r31 + 0x3E] = Hu3DModelLink(var_r27); + object->model[var_r31 + 0x3F] = Hu3DModelLink(var_r27); + object->model[var_r31 + 0x40] = Hu3DModelLink(var_r27); + var_r30->unk_40[var_r31 / 3] = object->model[var_r31 + 0x20]; + var_r30->unk_54[var_r31 / 3] = object->model[var_r31 + 0x21]; + var_r30->unk_68[var_r31 / 3] = object->model[var_r31 + 0x22]; + var_r30[1].unk_40[var_r31 / 3] = object->model[var_r31 + 0x3E]; + var_r30[1].unk_54[var_r31 / 3] = object->model[var_r31 + 0x3F]; + var_r30[1].unk_68[var_r31 / 3] = object->model[var_r31 + 0x40]; + Hu3DModelLayerSet(var_r30->unk_40[var_r31 / 3], 1); + Hu3DModelLayerSet(var_r30->unk_54[var_r31 / 3], 1); + Hu3DModelLayerSet(var_r30->unk_68[var_r31 / 3], 1); + Hu3DModelLayerSet(var_r30[1].unk_40[var_r31 / 3], 1); + Hu3DModelLayerSet(var_r30[1].unk_54[var_r31 / 3], 1); + Hu3DModelLayerSet(var_r30[1].unk_68[var_r31 / 3], 1); + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + var_r30[var_r31].unk_C0 = fn_1_70AC(object, var_r31, 8); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + Hu3DModelKill(sp20[var_r31]); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + Hu3DModelKill(sp50[var_r31]); + if (sp40[var_r31] >= 0) { + Hu3DModelKill(sp40[var_r31]); + } + if (sp30[var_r31] >= 0) { + Hu3DModelKill(sp30[var_r31]); + } + } + for (var_r31 = 0; var_r31 < 1; var_r31++) { + Hu3DModelKill(sp8[var_r31]); + } + for (var_r30 = work, var_r31 = 0; var_r31 < 2; var_r31++, var_r30++) { + Hu3DModelCameraSet(var_r30->unk_18, sp18[var_r31]); + Hu3DModelCameraSet(var_r30->unk_1A, sp18[var_r31]); + Hu3DModelCameraSet(var_r30->unk_10, sp18[var_r31]); + Hu3DModelCameraSet(var_r30->unk_14, sp18[var_r31]); + for (var_r28 = 0; var_r28 < 0xC; var_r28++) { + Hu3DModelCameraSet(var_r30->unk_24[var_r28], sp18[var_r31]); + } + for (var_r28 = 0; var_r28 < 6; var_r28++) { + Hu3DModelCameraSet(var_r30->unk_80[var_r28], sp18[var_r31]); + Hu3DModelAttrSet(var_r30->unk_80[var_r28], HU3D_ATTR_DISPOFF); + if (var_r30->unk_8C[var_r28] >= 0) { + Hu3DModelCameraSet(var_r30->unk_8C[var_r28], sp18[var_r31]); + Hu3DModelAttrSet(var_r30->unk_8C[var_r28], HU3D_ATTR_DISPOFF); + } + if (var_r30->unk_98[var_r28] >= 0) { + Hu3DModelCameraSet(var_r30->unk_98[var_r28], sp18[var_r31]); + Hu3DModelAttrSet(var_r30->unk_98[var_r28], HU3D_ATTR_DISPOFF); + } + } + for (var_r28 = 0; var_r28 < 0xA; var_r28++) { + Hu3DModelCameraSet(var_r30->unk_40[var_r28], sp18[var_r31]); + Hu3DModelCameraSet(var_r30->unk_54[var_r28], sp18[var_r31]); + Hu3DModelCameraSet(var_r30->unk_68[var_r28], sp18[var_r31]); + Hu3DModelAttrSet(var_r30->unk_40[var_r28], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(var_r30->unk_54[var_r28], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(var_r30->unk_68[var_r28], HU3D_ATTR_DISPOFF); + } + } + Hu3DModelCameraSet(object->model[2], sp18[0]); + Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF); + Hu3DModelCameraSet(object->model[3], sp18[0]); + Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF); + object->func = fn_1_5DF8; +} + +void fn_1_5DF8(omObjData *object) +{ + M430DllWork *var_r31; + s32 var_r29; + M430DllWork *work; + + work = object->data; + if ((fn_1_4070() >= 2) && (fn_1_4030() != 0)) { + var_r31 = work; + if ((lbl_1_bss_44 == 0) && (fn_1_4130() < 5.0f)) { + lbl_1_bss_4C = var_r31[0].unk_04.x; + if (lbl_1_bss_4C > var_r31[1].unk_04.x) { + lbl_1_bss_4C = var_r31[1].unk_04.x; + } + lbl_1_bss_44 = 1; + } + if ((lbl_1_bss_40 == 0) && (fn_1_4130() < 1.8f)) { + lbl_1_bss_48 = var_r31[0].unk_04.x; + if (lbl_1_bss_48 > var_r31[1].unk_04.x) { + lbl_1_bss_48 = var_r31[1].unk_04.x; + } + lbl_1_bss_40 = 1; + } + } + for (var_r31 = work, var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) { + var_r31->unk_04.z = var_r31->unk_04.x; + var_r31->unk_04.x = var_r31->unk_04.y; + fn_1_6180(var_r31); + fn_1_6540(var_r31); + fn_1_6DC8(var_r31); + fn_1_6754(var_r31); + fn_1_732C(object, var_r31->unk_C0); + fn_1_76D8(object, var_r31->unk_C0); + if (var_r29 != 0) { + if (fn_1_4030() != 0) { + Hu3DModelCameraSet(var_r31->unk_10, 2); + Hu3DModelCameraSet(var_r31->unk_14, 2); + } + else { + Hu3DModelCameraSet(var_r31->unk_10, 1); + Hu3DModelCameraSet(var_r31->unk_14, 1); + } + } + } + if (lbl_1_bss_5C != 0) { + Vec sp20 = { 0.0f, 3000.0f, 0.0f }; + Vec sp14 = { 0.0f, 0.0f, 0.0f }; + Vec sp8 = { 0.0f, 1.0f, 0.0f }; + + Hu3DModelAttrReset(object->model[2], HU3D_ATTR_DISPOFF); + Hu3DModelShadowMapSet(object->model[2]); + Hu3DModelPosSet(object->model[2], 0.0f, 0.0f, fn_1_7FBC(0) - 400.0f); + Hu3DModelAttrReset(object->model[3], HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(object->model[3], 0.0f, 0.0f, fn_1_7FBC(0) - 400.0f); + sp20.z = sp14.z = fn_1_7FBC(0) - 400.0f; + sp20.z += 100.0f; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + return; + } + Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF); +} + +void fn_1_6180(M430DllWork *work) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + HsfanimStruct01 *var_r30; + s32 var_r29; + + float sp8[2] = { -450.0f, 450.0f }; + sp1C.x = CenterM[work->unk_00].x; + sp1C.y = CenterM[work->unk_00].y + (CZoomM[work->unk_00] * sind(-CRotM[work->unk_00].x)); + sp1C.z = CenterM[work->unk_00].z + (CZoomM[work->unk_00] * cosd(-CRotM[work->unk_00].x)); + sp28.x = sp1C.x; + sp28.y = 0.0f; + sp28.z = sp1C.z - 450000.0f; + PSVECSubtract(&sp28, &sp1C, &sp10); + PSVECNormalize(&sp10, &sp10); + PSVECScale(&sp10, &sp10, 6000.0f); + PSVECAdd(&sp1C, &sp10, &sp28); + Hu3DModelPosSetV(work->unk_18, &sp28); + if ((fn_1_4070() >= 2) && (fn_1_4030() != 0)) { + if ((lbl_1_bss_40 != 0) && (lbl_1_bss_48 >= work->unk_04.x)) { + if (work->unk_20 > 0.0f) { + work->unk_20 = fn_1_7FBC(work->unk_00) - 23000.0f; + } + sp28.x = 0.0f; + sp28.y = 0.0f; + sp28.z = work->unk_20 - fn_1_7FBC(work->unk_00); + PSVECSubtract(&sp28, &sp1C, &sp10); + PSVECNormalize(&sp10, &sp10); + PSVECScale(&sp10, &sp10, 5000.0f); + PSVECAdd(&sp1C, &sp10, &sp28); + sp28.y += 237.5f; + Hu3DModelPosSet(work->unk_1A, 0.0f, 593.75f, work->unk_20); + var_r30 = ((ParticleData *)Hu3DData[work->unk_1A].unk_120)->unk_48; + var_r30->unk34.x = var_r30->unk34.y = var_r30->unk34.z = 0.0f; + var_r30->unk2C = 2000.0f; + var_r29 = var_r30->unk40.a; + var_r29 += 2; + if (var_r29 > 0xFF) { + var_r29 = 0xFF; + } + var_r30->unk40.a = var_r29; + } + } + else { + var_r30 = ((ParticleData *)Hu3DData[work->unk_1A].unk_120)->unk_48; + var_r30->unk2C = 0.0f; + var_r30->unk40.a = 0; + } + DCStoreRange(var_r30, sizeof(HsfanimStruct01)); +} + +void fn_1_6540(M430DllWork *work) +{ + float var_f31; + float var_f30; + float var_f29; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = 1; + var_f29 = work->unk_04.x; + work->unk_3C = (s32)(fabs2(var_f29) / 1000.0) % 12; + var_r30 = work->unk_3C; + var_f31 = 1000.0f * (s32)(work->unk_04.x / 1000.0f); + var_f30 = 4000.0f; + for (var_r29 = 0; var_r29 < 0xC; var_r29++) { + if (var_r28 != 0) { + Hu3DModelAttrReset(work->unk_24[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(work->unk_24[var_r30], 0.0f, 0.0f, var_f31); + var_f31 -= 1000.0f; + var_f30 -= 1000.0f; + if (var_f30 < 0.0f) { + var_r28 = 0; + } + } + else { + Hu3DModelAttrSet(work->unk_24[var_r30], HU3D_ATTR_DISPOFF); + } + var_r30 = (var_r30 + 1) % 12; + } +} + +void fn_1_6754(M430DllWork *work) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f26; + s32 var_r30; + HsfanimStruct01 *var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + + var_r27 = 1; + { + float sp20[6] = { -1800.0f, 2000.0f, -1800.0f, 2000.0f, -1800.0f, 2000.0f }; + Vec2f sp38[6] = { + { -130.0f, 500.0f }, + { 180.0f, 70.0f }, + { 100.0f, 50.0f }, + { -30.000002f, 500.0f }, + { 100.0f, 50.0f }, + { 180.0f, 70.0f }, + }; + float sp8[6] = { 2750.0f, 1550.0f, 1450.0f, 2750.0f, 1450.0f, 1550.0f }; + if (lbl_1_bss_5C != 0) { + var_r27 = 0; + } + if ((fn_1_4070() == 0) || (fn_1_4030() == 0) || (lbl_1_bss_44 == 0) || !(lbl_1_bss_4C > work->unk_04.x)) { + for (var_r28 = 0; var_r28 < 6; var_r28++) { + work->unk_A4[var_r28] = 1; + } + } + var_f26 = work->unk_04.x; + work->unk_BC = (s32)(fabs2(var_f26) / 5000.0) % 6; + var_r30 = work->unk_BC; + var_f31 = 1000.0f + (5000.0f * (s32)(work->unk_04.x / 5000.0f)); + var_f28 = (1000.0f + work->unk_04.x) - 9000.0f; + var_f27 = (1000.0f + work->unk_04.x) - 20000.0f; + for (var_r28 = 0; var_r28 < 6; var_r28++) { + var_r25 = var_r24 = var_r23 = 1; + if ((var_r27 != 0) && (work->unk_A4[var_r30] != 0)) { + if ((var_f31 > var_f28) || ((work->unk_98[var_r30] >= 0) && (var_f31 > var_f27))) { + if (var_f31 > var_f28) { + Hu3DModelAttrReset(work->unk_80[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(work->unk_80[var_r30], sp20[var_r30], 0.0f, var_f31); + if (work->unk_8C[var_r30] >= 0) { + Hu3DModelAttrReset(work->unk_8C[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(work->unk_8C[var_r30], sp20[var_r30], 0.0f, var_f31); + } + var_r25 = var_r24 = 0; + } + if ((work->unk_98[var_r30] >= 0) && (var_f31 > var_f27) && (var_f31 < (1000.0f + var_f28))) { + var_r26 = work->unk_98[var_r30]; + Hu3DModelAttrReset(var_r26, HU3D_ATTR_DISPOFF); + var_r29 = ((ParticleData *)Hu3DData[var_r26].unk_120)->unk_48; + Hu3DModelPosSet(work->unk_98[var_r30], sp20[var_r30] + sp38[var_r30].x, sp38[var_r30].y, var_f31); + var_r29->unk34.x = var_r29->unk34.y = var_r29->unk34.z = 0.0f; + var_r29->unk2C = sp8[var_r30]; + var_r29->unk40.a = -1; + var_f30 = fabs(var_f27 - var_f31); + var_f29 = 1000.0f - (var_f31 - var_f28); + if (var_f30 < 2000.0f) { + var_f30 *= 0.0005f; + var_r29->unk40.a = 255.0f * var_f30; + } + else if (var_f29 < 1000.0f) { + var_f29 *= 0.001f; + var_r29->unk40.a = 255.0f * var_f29; + } + DCStoreRange(var_r29, sizeof(HsfanimStruct01)); + var_r23 = 0; + } + } + } + else { + work->unk_A4[var_r30] = 0; + } + if (var_r25 != 0) { + Hu3DModelAttrSet(work->unk_80[var_r30], HU3D_ATTR_DISPOFF); + } + if ((var_r24 != 0) && (work->unk_8C[var_r30] >= 0)) { + Hu3DModelAttrSet(work->unk_8C[var_r30], HU3D_ATTR_DISPOFF); + } + if ((var_r23 != 0) && (work->unk_98[var_r30] >= 0)) { + Hu3DModelAttrSet(work->unk_98[var_r30], HU3D_ATTR_DISPOFF); + } + var_f31 -= 5000.0f; + if (var_f31 < var_f27) { + var_r27 = 0; + } + var_r30 = (var_r30 + 1) % 6; + } + } +} + +void fn_1_6DC8(M430DllWork *work) +{ + float var_f31; + float var_f30; + float var_f29; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = 1; + if (lbl_1_bss_5C != 0) { + var_r28 = 0; + } + var_f29 = work->unk_04.x; + work->unk_7C = (s32)(fabs2(var_f29) / 1000.0) % 10; + var_r30 = work->unk_7C; + var_f31 = 1000.0f + (1000.0f * (s32)(work->unk_04.x / 1000.0f)); + var_f30 = 8000.0f; + for (var_r29 = 0; var_r29 < 0xA; var_r29++) { + if (var_r28 != 0) { + Hu3DModelAttrReset(work->unk_40[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(work->unk_54[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(work->unk_68[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(work->unk_40[var_r30], -920.0f, 0.0f, var_f31); + Hu3DModelPosSet(work->unk_54[var_r30], 0.0f, 0.0f, var_f31); + Hu3DModelPosSet(work->unk_68[var_r30], 920.0f, 0.0f, var_f31); + var_f31 -= 1000.0f; + var_f30 -= 1000.0f; + if (var_f30 < 0.0f) { + var_r28 = 0; + } + } + else { + Hu3DModelAttrSet(work->unk_40[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(work->unk_54[var_r30], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(work->unk_68[var_r30], HU3D_ATTR_DISPOFF); + } + var_r30 = (var_r30 + 1) % 10; + } +} + +M430DllUnkStruct2 *fn_1_70AC(omObjData *arg0, s32 var_r27, s16 var_r28) +{ + float var_f31; + float var_f30; + float var_f29; + M430DllUnkStruct2 *var_r31; + s32 var_r30; + M430DllUnkStruct2 *var_r29; + + u32 sp10[2] = { 0x003D0011, 0x003D0012 }; + s32 sp8[2] = { 1, 2 }; + var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r28 * sizeof(M430DllUnkStruct2), MEMORY_DEFAULT_NUM); + memset(var_r29, 0, var_r28 * 0x3C); + var_f31 = -90.0f; + for (var_r31 = var_r29, var_r30 = 0; var_r30 < var_r28; var_r30++, var_r31++) { + var_r31->unk_00 = var_r27; + var_r31->unk_04 = Hu3DModelCreateFile(sp10[var_r30 & 1]); + Hu3DModelLayerSet(var_r31->unk_04, 1); + Hu3DModelCameraSet(var_r31->unk_04, sp8[var_r31->unk_00]); + var_f30 = frandmod(0x168); + var_f29 = frandmod(0x118); + var_r31->unk_0C.x = var_f29 * sind(var_f30) + fn_1_BB54(var_r27); + var_r31->unk_0C.y = var_f31; + var_r31->unk_0C.z = var_f29 * cosd(var_f30); + var_r31->unk_2C = frandmod(0x168); + var_r31->unk_34 = 1.0f; + var_r31->unk_38 = 0.0f; + var_f31 -= 10.0f; + var_r31->unk_0A = var_r28; + } + return var_r29; +} + +void fn_1_732C(omObjData *object, M430DllUnkStruct2 *arg1) +{ + Vec sp8; + float var_f31; + float var_f30; + float var_f29; + s32 var_r30; + s32 var_r29; + s32 var_r28; + + var_r28 = arg1->unk_0A; + for (var_r30 = 0; var_r30 < var_r28; var_r30++, arg1++) { + var_r29 = 0; + if (arg1->unk_34 > arg1->unk_38) { + var_r29 = 1; + } + else { + PSVECSubtract(&arg1->unk_18, &arg1->unk_0C, &sp8); + var_f31 = PSVECMag(&sp8); + if (var_f31 < 50.0f) { + var_r29 = 1; + } + } + if (var_r29 != 0) { + var_f31 = frandmod(0x168); + var_f30 = 400.0f + frandmod(0x15E); + arg1->unk_18.x = var_f30 * sind(var_f31) + fn_1_BB54(arg1->unk_00); + arg1->unk_18.z = 2.0 * (var_f30 * cosd(var_f31)); + arg1->unk_18.y = arg1->unk_0C.y; + arg1->unk_34 = 0.0f; + arg1->unk_38 = 200.0f + frandmod(0x258); + arg1->unk_28 = 400.0f; + } + PSVECSubtract(&arg1->unk_18, &arg1->unk_0C, &sp8); + arg1->unk_30 = atan2d(sp8.x, sp8.z); + arg1->unk_2C = fn_1_48B0(arg1->unk_2C, arg1->unk_30, 0.08f); + arg1->unk_28 += 0.05f * (300.0f - arg1->unk_28); + arg1->unk_24 += 0.2f * (arg1->unk_28 - arg1->unk_24); + arg1->unk_0C.x = arg1->unk_0C.x + ((0.016666668f * arg1->unk_24) * sind(arg1->unk_2C)); + arg1->unk_0C.z = arg1->unk_0C.z + ((0.016666668f * arg1->unk_24) * cosd(arg1->unk_2C)); + arg1->unk_34 += 0.016666668f * arg1->unk_24; + } +} + +void fn_1_76D8(omObjData *object, M430DllUnkStruct2 *arg1) +{ + float var_f31; + s32 var_r30; + s32 var_r29; + + var_r29 = arg1->unk_0A; + if (lbl_1_bss_5C != 0) { + for (var_r30 = 0; var_r30 < var_r29; var_r30++, arg1++) { + Hu3DModelAttrSet(arg1->unk_04, HU3D_ATTR_DISPOFF); + } + return; + } + var_f31 = (s32)(0.00011111111f * (1000.0f + fn_1_7FBC(arg1->unk_00))); + var_f31 = (100.0f * (90.0f * var_f31)) - 5000.0f; + for (var_r30 = 0; var_r30 < var_r29; var_r30++, arg1++) { + Hu3DModelPosSet(arg1->unk_04, arg1->unk_0C.x, arg1->unk_0C.y, arg1->unk_0C.z + var_f31); + Hu3DModelRotSet(arg1->unk_04, 0.0f, arg1->unk_2C, 0.0f); + Hu3DModelAttrReset(arg1->unk_04, HU3D_ATTR_DISPOFF); + } +} + +void fn_1_7848(omObjData *object) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + M430DllWork2 *var_r31; + s16 var_r30; + s32 var_r29; + M430DllWork2 *work; + s32 var_r26; + + var_r30 = 0x20; + work = HuMemDirectMallocNum(HEAP_SYSTEM, var_r30 * sizeof(M430DllWork2), MEMORY_DEFAULT_NUM); + object->data = work; + memset(work, 0, var_r30 * sizeof(M430DllWork2)); + var_r26 = Hu3DModelCreateFile(0x3D0013); + var_f29 = 1000.0f; + for (var_r31 = work, var_r29 = 0; var_r29 < var_r30; var_r29++, var_r31++) { + var_r31->unk_00 = Hu3DModelLink(var_r26); + Hu3DModelLayerSet(var_r31->unk_00, 1); + Hu3DModelCameraSet(var_r31->unk_00, 1); + Hu3DModelAttrSet(var_r31->unk_00, HU3D_ATTR_DISPOFF); + var_r31->unk_14.x = (2.8f * frandmod(0x3E8)) - 1400.0f; + var_r31->unk_14.z = 0.7f * frandmod(0x3E8) - 350.0f; + var_r31->unk_14.y = 300.0f + (0.8f * frandmod(0x3E8)); + var_f30 = frandmod(0x168); + var_f31 = 200.0f + frandmod(0xAF); + var_r31->unk_08.x = var_f31 * sind(var_f30); + var_r31->unk_08.y = 0.0f; + var_r31->unk_08.z = var_f31 * cosd(var_f30); + PSVECAdd(&var_r31->unk_14, &var_r31->unk_08, &var_r31->unk_08); + var_r31->unk_38 = 60.0f - (0.13483146f * var_f31); + var_r31->unk_28 = frandmod(0x168); + if (frandmod(0x3E8) < 0x1F4) { + var_f28 = -70.0f + (0.1f * frandmod(0x32)); + } + else { + var_f28 = 70.0f - (0.1f * frandmod(0x32)); + } + var_r31->unk_3C = var_f28; + if (var_r31->unk_3C < 0.0f) { + var_r31->unk_38 = -var_r31->unk_38; + } + var_r31->unk_30 = 1.0f; + var_r31->unk_34 = 0.0f; + var_f29 -= 50.0f; + var_r31->unk_06 = var_r30; + } + (void)var_r29; + (void)object; + Hu3DModelKill(var_r26); + object->func = fn_1_7CAC; +} + +void fn_1_7CAC(omObjData *object) +{ + Vec spC; + s32 sp8; + s32 var_r29; + + M430DllWork2 *work = object->data; + s32 var_r28 = work->unk_06; + if (fn_1_4070() >= 4) { + for (var_r29 = 0; var_r29 < var_r28; var_r29++, work++) { + sp8 = 0; + PSVECSubtract(&work->unk_14, &work->unk_08, &spC); + work->unk_2C = atan2d(spC.x, spC.z); + work->unk_28 = fn_1_48B0(work->unk_28, work->unk_2C + work->unk_3C, 0.08f); + work->unk_24 += (0.05f * (600.0f - work->unk_24)); + work->unk_20 += (0.2f * (work->unk_24 - work->unk_20)); + work->unk_08.x += ((0.016666668f * work->unk_20) * sind(work->unk_28)); + work->unk_08.z += ((0.016666668f * work->unk_20) * cosd(work->unk_28)); + work->unk_30 += (0.016666668f * work->unk_20); + } + fn_1_7EAC(object, object->data); + } +} + +void fn_1_7EAC(omObjData *object, M430DllWork2 *var_r31) +{ + Mtx sp8; + float var_f31; + s32 var_r30; + Mtx *var_r29; + s32 var_r28; + + var_r28 = var_r31->unk_06; + var_f31 = fn_1_7FBC(0) - 2000.0f; + for (var_r30 = 0; var_r30 < var_r28; var_r30++, var_r31++) { + Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_08.x, var_r31->unk_08.y, var_r31->unk_08.z + var_f31); + var_r29 = &Hu3DData[var_r31->unk_00].unk_F0; + PSMTXRotRad(*var_r29, 0x59, 0.017453292f * var_r31->unk_28); + PSMTXRotRad(sp8, 0x5A, 0.017453292f * var_r31->unk_38); + PSMTXConcat(*var_r29, sp8, *var_r29); + Hu3DModelAttrReset(var_r31->unk_00, HU3D_ATTR_DISPOFF); + } +} + +float fn_1_7FBC(s32 arg0) +{ + M430DllWork *var_r31; + M430DllWork *var_r30; + + var_r30 = lbl_1_bss_58->data; + arg0 &= 1; + var_r31 = var_r30; + return var_r31[arg0].unk_04.x; +} + +void fn_1_7FFC(s32 arg0, float arg8) +{ + M430DllWork *var_r31; + M430DllWork *var_r30; + + var_r30 = lbl_1_bss_58->data; + arg0 &= 1; + var_r31 = var_r30; + var_r31[arg0].unk_04.y = arg8; +} + +void fn_1_803C(omObjData *var_r31) +{ + var_r31->stat |= 0x100; + omSetStatBit(var_r31, 0xA0); + var_r31->model[0] = Hu3DHookFuncCreate(fn_1_8CE0); + Hu3DModelLayerSet(var_r31->model[0], 4); + Hu3DModelCameraSet(var_r31->model[0], 1); + var_r31->model[1] = Hu3DHookFuncCreate(fn_1_8CE0); + Hu3DModelLayerSet(var_r31->model[1], 4); + Hu3DModelCameraSet(var_r31->model[1], 2); + var_r31->model[2] = Hu3DHookFuncCreate(fn_1_9C90); + Hu3DModelLayerSet(var_r31->model[2], 0); + Hu3DModelCameraSet(var_r31->model[2], 1); + var_r31->model[3] = Hu3DHookFuncCreate(fn_1_9C90); + Hu3DModelLayerSet(var_r31->model[3], 0); + Hu3DModelCameraSet(var_r31->model[3], 2); + var_r31->model[4] = Hu3DHookFuncCreate(fn_1_A3A8); + Hu3DModelLayerSet(var_r31->model[4], 1); + Hu3DModelCameraSet(var_r31->model[4], 3); + var_r31->model[5] = Hu3DHookFuncCreate(fn_1_AB98); + Hu3DModelLayerSet(var_r31->model[5], 3); + Hu3DModelCameraSet(var_r31->model[5], 3); + var_r31->model[6] = Hu3DHookFuncCreate(fn_1_AC84); + Hu3DModelLayerSet(var_r31->model[6], 7); + Hu3DModelCameraSet(var_r31->model[6], 3); + lbl_1_bss_60->unk_00 = 0; + lbl_1_bss_60->unk_04 = var_r31->model[0]; + fn_1_82F4(var_r31, lbl_1_bss_60); + lbl_1_bss_60[1].unk_00 = 1; + lbl_1_bss_60[1].unk_04 = var_r31->model[1]; + fn_1_82F4(var_r31, &lbl_1_bss_60[1]); + var_r31->func = fn_1_8264; +} + +void fn_1_8264(omObjData *object) +{ + lbl_1_bss_60[0].unk_08 = lbl_1_bss_60[1].unk_08 = 0; + lbl_1_bss_60[0].unk_0C = lbl_1_bss_60[1].unk_0C = 0; + lbl_1_bss_60[0].unk_10 = lbl_1_bss_60[1].unk_10 = 0; + lbl_1_bss_60[0].unk_14 = lbl_1_bss_60[1].unk_14 = 0; + lbl_1_bss_60[0].unk_18 = lbl_1_bss_60[1].unk_18 = 0; +} + +void fn_1_82F4(omObjData *object, M430DllBss60Struct *var_r31) +{ + float var_f31; + float var_f30; + s32 var_r30; + Vec *var_r29; + GXColor *var_r28; + s32 var_r27; + + s32 sp8[8] = { 0, 0x16, 1, 0x17, 1, 0, 0x17, 0x16 }; + + var_r31->unk_2C = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(Vec), MEMORY_DEFAULT_NUM); + var_r31->unk_30 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(Vec), MEMORY_DEFAULT_NUM); + var_r31->unk_34 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14A0, MEMORY_DEFAULT_NUM); + var_r31->unk_38 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x6E0, MEMORY_DEFAULT_NUM); + var_r31->unk_40 = 0; + for (var_r30 = 0; var_r30 < 2; var_r30++) { + var_r31->unk_44[var_r30] = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(Vec), MEMORY_DEFAULT_NUM); + var_r31->unk_54[var_r30] = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(GXColor), MEMORY_DEFAULT_NUM); + } + var_r31->unk_5C = 0x12D0; + var_r31->unk_60 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_5C, MEMORY_DEFAULT_NUM); + DCFlushRange(var_r31->unk_60, var_r31->unk_5C); + var_r31->unk_64 = 0; + var_r31->unk_68 = GXGetTexBufferSize(0x140, 0x1E0, 5, 0, 0); + if (var_r31->unk_00 == 0) { + var_r31->unk_68 *= 2; + } + var_r31->unk_6C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_68, MEMORY_DEFAULT_NUM); + DCFlushRange(var_r31->unk_6C, var_r31->unk_68); + var_r31->unk_1C = 0; + var_r31->unk_20 = 0; + var_r31->unk_24 = 0.0f; + var_r31->unk_28 = 0.0f; + var_r29 = var_r31->unk_2C; + var_f31 = 0.0f; + var_f30 = -2000.0f; + for (var_r30 = 0; var_r30 < 0x14; var_r30++) { + var_f31 = 65.47619f - var_f31; + for (var_r27 = 0; var_r27 < 0x16; var_r27++) { + var_r29->x = ((130.95238f * var_r27) - 1375.0f) + var_f31; + var_r29->y = 0.0f; + var_r29->z = var_f30; + var_r29++; + } + var_f30 += 210.52632f; + } + memset(var_r31->unk_30, 0, 0x1B8 * sizeof(Vec)); + for (var_r29 = var_r31->unk_30, var_r30 = 0; var_r30 < 0x1B8; var_r30++, var_r29++) { + var_r29->y = (0.05f * frandmod(0x3E8)) - 20.0f; + } + for (var_r30 = 0; var_r30 < 2; var_r30++) { + memcpy(var_r31->unk_44[var_r30], var_r31->unk_2C, 0x1B8 * sizeof(Vec)); + for (var_r28 = var_r31->unk_54[var_r30], var_r27 = 0; var_r27 < 0x1B8; var_r27++, var_r28++) { + var_r28->r = 0x32; + var_r28->g = 0x8C; + var_r28->b = 0xB4; + var_r28->a = 0; + } + } + fn_1_86B4(object, var_r31); + fn_1_8B5C(object, var_r31); +} + +void fn_1_86B4(omObjData *object, M430DllBss60Struct *arg1) +{ + Vec sp14; + Vec sp8; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + GXColor *var_r30; + s32 var_r29; + Vec *var_r28; + Vec *var_r27; + Vec *var_r26; + u32 var_r25; + s32 var_r24; + s32 var_r23; + M430DllWork *var_r22; + M430DllWork *var_r21; + + if (omPauseChk() == 0) { + arg1->unk_1C++; + } + arg1->unk_40 = 1 - arg1->unk_40; + var_r25 = arg1->unk_00; + var_r21 = lbl_1_bss_58->data; + var_r25 &= 1; + var_r22 = var_r21; + var_f29 = var_r22[var_r25].unk_04.x; + var_f28 = var_f29; + var_f30 = var_f28; + var_r24 = 0.002375f * var_f30; + arg1->unk_28 = 421.05264f * var_r24; + arg1->unk_24 = var_f30 - arg1->unk_28; + arg1->unk_20 = (var_r24 * 2) % 20; + var_r23 = (arg1->unk_20 + 0x14) % 20; + Hu3DModelPosSet(arg1->unk_04, fn_1_BB54(arg1->unk_00), 0.0f, arg1->unk_28 - 500.0f); + var_r28 = arg1->unk_2C; + var_r30 = arg1->unk_54[arg1->unk_40]; + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = 2000.0f + arg1->unk_24; + if (lbl_1_bss_5C != 0) { + for (var_r29 = 0; var_r29 < 0x1B8; var_r29++) { + PSVECSubtract(var_r28, &sp14, &sp8); + var_f31 = 0.00025f * PSVECMag(&sp8); + if (var_f31 < 0.3f) { + var_r30->a = -1; + } + else if (var_f31 > 0.75f) { + var_r30->a = 0; + } + else { + var_f31 = 255.0f - (566.6667f * (var_f31 - 0.3f)); + var_r30->a = var_f31; + } + var_r28++; + var_r30++; + } + } + else { + for (var_r29 = 0; var_r29 < 0x1B8; var_r29++) { + PSVECSubtract(var_r28, &sp14, &sp8); + var_f31 = 0.00025f * PSVECMag(&sp8); + if (var_f31 < 0.25f) { + var_r30->a = -0x1A; + } + else if (var_f31 > 0.85f) { + var_r30->a = 0; + } + else { + var_f31 = 230.0f - (383.3333f * (var_f31 - 0.25f)); + var_r30->a = var_f31; + } + var_r28++; + var_r30++; + } + } + if (lbl_1_bss_5C != 0) { + memcpy(arg1->unk_44[arg1->unk_40], arg1->unk_2C, 0x1B8 * sizeof(Vec)); + } + else { + var_r28 = arg1->unk_2C; + var_r26 = arg1->unk_44[arg1->unk_40]; + var_r29 = (0x14 - var_r23) * 0x16; + var_r27 = &arg1->unk_30[0x1B8 - var_r29]; + while (var_r29-- != 0) { + PSVECAdd(var_r28, var_r27, var_r26); + var_r28++; + var_r27++; + var_r26++; + } + var_r29 = var_r23 * 0x16; + var_r27 = arg1->unk_30; + while (var_r29-- != 0) { + PSVECAdd(var_r28, var_r27, var_r26); + var_r28++; + var_r27++; + var_r26++; + } + memcpy(arg1->unk_44[arg1->unk_40], arg1->unk_2C, 0x16 * sizeof(Vec)); + } + DCStoreRangeNoSync(arg1->unk_44[arg1->unk_40], 0x1B8 * sizeof(Vec)); + DCStoreRangeNoSync(arg1->unk_54[arg1->unk_40], 0x1B8 * sizeof(GXColor)); + PPCSync(); +} + +void fn_1_8B5C(omObjData *object, M430DllBss60Struct *var_r30) +{ + s32 var_r31; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r25; + s32 var_r24; + + s32 sp28[5] = { 0, 0, 0, 1, 1 }; + s32 sp18[4] = { 1, 0, 0, 0 }; + s32 sp8[4] = { 0, 0, 1, 2 }; + GXBeginDisplayList(var_r30->unk_60, var_r30->unk_5C); + var_r26 = 0; + var_r31 = 0; + for (var_r29 = 0; var_r29 < 0x13; var_r29++) { + var_r24 = 0x2B - (((var_r26 * 2) + sp8[var_r31]) * 2); + var_r27 = sp18[var_r31]; + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, var_r24); + for (var_r28 = 0; var_r28 < var_r24; var_r28++) { + var_r25 = (var_r28 >> 1) + ((var_r29 + var_r27) * 0x16) + (var_r26 + sp28[var_r31 + var_r27]); + GXUnknownu16(var_r25); + GXUnknownu16(var_r25); + var_r27 = 1 - var_r27; + } + var_r31++; + if (var_r31 >= 4) { + var_r31 = 0; + var_r26++; + } + } + var_r30->unk_64 = GXEndDisplayList(); +} + +void fn_1_8CE0(ModelData *model, Mtx matrix) +{ + Mtx sp194; + Mtx sp164; + Mtx sp134; + Mtx sp104; + Mtx spD4; + Mtx spA4; + Mtx sp74; + Mtx sp44; + GXTexObj sp24; + float var_f31; + float var_f30; + M430DllBss60Struct *var_r31; + + GXColor sp20 = { 0xFF, 0xFF, 0xFF, 0xFF }; + GXColor sp1C = { 0x08, 0x08, 0x08, 0xFF }; + GXColor sp18 = { 0x00, 0x00, 0x00, 0x80 }; + GXColor sp14 = { 0xCC, 0xBF, 0xB2, 0x33 }; + GXColor sp10 = { 0xE0, 0xD8, 0xF4, 0x08 }; + var_r31 = lbl_1_bss_60; + if (var_r31->unk_10 != 0) { + var_r31 = &var_r31[1]; + } + var_r31->unk_10 = 1; + fn_1_963C(model, matrix, var_r31->unk_00); + PSMTXCopy(matrix, sp134); + if (fn_1_4030() != 0) { + var_f30 = 1.0f; + var_f31 = fn_1_BB54(var_r31->unk_00); + } + else { + var_f30 = 1.5f; + var_f31 = 0.0f; + } + PSMTXTrans(sp164, var_f31 - fn_1_BB54(var_r31->unk_00), 0.0f, 0.0f); + PSMTXConcat(sp134, sp164, sp134); + PSMTXScale(sp194, var_f30, 1.0f, 1.0f); + PSMTXConcat(sp134, sp194, sp134); + GXLoadPosMtxImm(sp134, 0); + PSMTXInvXpose(sp134, sp194); + GXLoadNrmMtxImm(sp194, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + if ((fn_1_4030() == 0) && (var_r31->unk_00 == 0)) { + GXInitTexObj(&sp24, var_r31->unk_6C, 0x280, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0); + } + else { + GXInitTexObj(&sp24, var_r31->unk_6C, 0x140, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0); + } + GXInitTexObjLOD(&sp24, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXLoadTexObj(&sp24, GX_TEXMAP0); + HuSprTexLoad(lbl_1_bss_150, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_148, 0, 2, GX_CLAMP, GX_CLAMP, GX_LINEAR); + GXSetNumTexGens(3); + if (fn_1_4030() != 0) { + C_MTXLightPerspective(sp104, 41.5f, 0.6f, 0.5f, -0.5f, 0.5f, 0.5f); + } + else { + C_MTXLightPerspective(sp104, 41.5f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f); + } + PSMTXInverse(Hu3DCameraMtx, spD4); + PSMTXConcat(spD4, sp134, spD4); + PSMTXConcat(sp104, Hu3DCameraMtx, spA4); + PSMTXConcat(spA4, spD4, spD4); + GXLoadTexMtxImm(spD4, 0x1E, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D); + C_MTXLightPerspective(sp104, 70.0f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f); + PSMTXInverse(Hu3DCameraMtx, sp74); + PSMTXConcat(sp74, sp134, sp74); + PSMTXConcat(sp104, Hu3DCameraMtx, sp44); + PSMTXConcat(sp44, sp74, sp74); + GXLoadTexMtxImm(sp74, 0x24, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX3x4, GX_TG_POS, 0x24, GX_FALSE, 0x7D); + PSMTXRotRad(sp164, 0x58, 1.5707964f); + var_f31 = 0.00075f * var_f30; + PSMTXScale(sp194, var_f31, -0.003f, 0.00075f); + PSMTXConcat(sp164, sp194, sp164); + PSMTXTrans(sp194, (var_r31->unk_1C & 0x3FF) / (1024.0f * var_f31), 0.0f, (0.7f * var_r31->unk_28) - (0.3f * var_r31->unk_24)); + PSMTXConcat(sp164, sp194, sp164); + sp164[0][1] = -0.001f; + GXLoadTexMtxImm(sp164, 0x21, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D); + GXSetNumIndStages(2); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(0, 0, GX_TRUE, GX_FALSE, 1); + PSMTXScale(sp164, -0.25f, -0.5f, 0.5f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])sp164, -4); + GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD1, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(1, 1, GX_TRUE, GX_FALSE, 2); + PSMTXScale(sp164, 0.4f, 0.5f, 0.5f); + GXSetIndTexMtx(GX_ITM_1, (float(*)[3])sp164, -1); + GXSetNumTevStages(2); + GXSetTevColor(GX_TEVREG0, sp14); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_TEXC, GX_CC_RASA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A0, GX_CA_ZERO, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); + GXSetZMode(1, GX_LEQUAL, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_POS, var_r31->unk_44[var_r31->unk_40], sizeof(Vec)); + GXSetArray(GX_VA_CLR0, var_r31->unk_54[var_r31->unk_40], sizeof(GXColor)); + GXSetCullMode(GX_CULL_NONE); + GXCallDisplayList(var_r31->unk_60, var_r31->unk_64); + GXSetCullMode(GX_CULL_BACK); + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); +} + +Vec lbl_1_data_60[6] = { + { -2750.0f, 0.0f, -2500.0f }, + { 2750.0f, 0.0f, -2500.0f }, + { -2750.0f, 0.0f, 0.0f }, + { 2750.0f, 0.0f, 0.0f }, + { -1375.0f, 0.0f, 2500.0f }, + { 1375.0f, 0.0f, 2500.0f }, +}; +GXColor lbl_1_data_A8[6] = { + { 5, 0x38, 0xA2, 0 }, + { 5, 0x38, 0xA2, 0xFF }, + { 0x14, 0x54, 0xAB, 0xFF }, + { 0x1E, 0x6D, 0xB0, 0xFF }, + { 0x2A, 0x7E, 0xB4, 0xFF }, + { 0x32, 0x8C, 0xB4, 0xFF }, +}; + +void fn_1_963C(ModelData *model, Mtx matrix, u32 var_r31) +{ + Mtx sp100; + Mtx spD0; + Mtx spA0; + Mtx sp70; + Mtx sp40; + Mtx sp10; + float var_f31; + float var_f30; + + GXColor spC = { 0x32, 0x8C, 0xB4, 0x33 }; + if (fn_1_4030() != 0) { + var_f30 = 1.0f; + var_f31 = fn_1_BB54(var_r31); + } + else { + var_f30 = 1.5f; + var_f31 = 0.0f; + } + PSMTXTrans(spD0, var_f31, 0.0f, ((lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24) - 2500.0f) - 2000.0f); + PSMTXScale(sp100, var_f30, 1.0f, 1.0f); + PSMTXConcat(spD0, sp100, spD0); + PSMTXConcat(Hu3DCameraMtx, spD0, spA0); + GXLoadPosMtxImm(spA0, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + HuSprTexLoad(lbl_1_bss_14C, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_148, 0, 1, GX_CLAMP, GX_CLAMP, GX_LINEAR); + GXSetNumTexGens(2); + C_MTXLightPerspective(sp70, 70.0f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f); + PSMTXInverse(Hu3DCameraMtx, sp40); + PSMTXConcat(sp40, spA0, sp40); + PSMTXConcat(sp70, Hu3DCameraMtx, sp10); + PSMTXConcat(sp10, sp40, sp40); + GXLoadTexMtxImm(sp40, 0x21, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D); + PSMTXRotRad(spD0, 0x58, 1.5707964f); + var_f31 = 0.00075f * var_f30; + PSMTXScale(sp100, var_f31, -0.003f, 0.00075f); + PSMTXConcat(spD0, sp100, spD0); + PSMTXTrans(sp100, (lbl_1_bss_60[var_r31].unk_1C & 0x3FF) / (1024.0f * var_f31), 0.0f, + 0.3f * (lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24)); + PSMTXConcat(spD0, sp100, spD0); + GXLoadTexMtxImm(spD0, 0x1E, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D); + GXSetNumIndStages(1); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(0, 0, GX_TRUE, GX_FALSE, 1); + PSMTXScale(spD0, 0.5f, 0.6f, 0.6f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spD0, -1); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, spC); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_RASC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_POS, lbl_1_data_60, sizeof(Vec)); + GXSetArray(GX_VA_CLR0, lbl_1_data_A8, sizeof(GXColor)); + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 6); + GXPosition1x8(0); + GXColor1x8(3); + GXPosition1x8(1); + GXColor1x8(3); + GXPosition1x8(2); + GXColor1x8(4); + GXPosition1x8(3); + GXColor1x8(4); + GXPosition1x8(4); + GXColor1x8(5); + GXPosition1x8(5); + GXColor1x8(5); + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); +} + +Vec lbl_1_data_C0[8] = { + { -2750.0f, 20.0f, 0.0f }, + { 2750.0f, 20.0f, 0.0f }, + { -2750.0f, -20.0f, 0.0f }, + { 2750.0f, -20.0f, 0.0f }, + { -2750.0f, -160.0f, 0.0f }, + { 2750.0f, -160.0f, 0.0f }, + { -2750.0f, -340.0f, 0.0f }, + { 2750.0f, -340.0f, 0.0f }, +}; +Vec lbl_1_data_120[6] = { + { -700.0f, 0.0f, -1750.0f }, + { 700.0f, 0.0f, -1750.0f }, + { -700.0f, 0.0f, -1400.0f }, + { 700.0f, 0.0f, -1400.0f }, + { -700.0f, 0.0f, 700.0f }, + { 700.0f, 0.0f, 700.0f }, +}; + +void fn_1_9C90(ModelData *model, Mtx matrix) +{ + Mtx sp124; + Mtx spF4; + Mtx spC4; + Mtx sp94; + Mtx sp64; + Mtx sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f31; + float var_f30; + s32 var_r31; + s32 var_r30; + + GXColor spC = { 0x32, 0x8C, 0xB4, 0x33 }; + var_r31 = 0; + if (lbl_1_bss_60[var_r31].unk_14 != 0) { + var_r31++; + } + lbl_1_bss_60[var_r31].unk_14 = 1; + sp1C.x = CenterM[var_r31].x; + sp1C.y = CenterM[var_r31].y + (CZoomM[var_r31] * sind(-CRotM[var_r31].x)); + sp1C.z = CenterM[var_r31].z + (CZoomM[var_r31] * cosd(-CRotM[var_r31].x)); + sp28.x = sp1C.x; + sp28.y = 0.0f; + sp28.z = sp1C.z - 450000.0f; + PSVECSubtract(&sp28, &sp1C, &sp10); + PSVECNormalize(&sp10, &sp10); + PSVECScale(&sp10, &sp10, 8000.0f); + PSVECAdd(&sp1C, &sp10, &sp28); + PSMTXTrans(spF4, sp28.x, sp28.y, sp28.z); + var_f31 = 1.0f; + if (fn_1_4030() == 0) { + var_f31 = 1.5f; + PSMTXScale(sp124, var_f31, 1.0f, 1.0f); + PSMTXConcat(spF4, sp124, spF4); + } + PSMTXConcat(Hu3DCameraMtx, spF4, spC4); + GXLoadPosMtxImm(spC4, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + HuSprTexLoad(lbl_1_bss_14C, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_148, 0, 1, GX_CLAMP, GX_CLAMP, GX_LINEAR); + GXSetNumTexGens(2); + C_MTXLightPerspective(sp94, 70.0f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f); + PSMTXInverse(Hu3DCameraMtx, sp64); + PSMTXConcat(sp64, spC4, sp64); + PSMTXConcat(sp94, Hu3DCameraMtx, sp34); + PSMTXConcat(sp34, sp64, sp64); + GXLoadTexMtxImm(sp64, 0x21, GX_MTX3x4); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D); + var_f30 = 0.00075f * var_f31; + PSMTXScale(spF4, var_f30, -0.005f, 0.00075f); + PSMTXTrans(sp124, (lbl_1_bss_60[var_r31].unk_1C & 0x3FF) / (1024.0f * var_f30), + 0.03f * -(lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24), 0.0f); + PSMTXConcat(spF4, sp124, spF4); + GXLoadTexMtxImm(spF4, 0x1E, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D); + GXSetNumIndStages(1); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); + GXSetTevIndWarp(0, 0, GX_TRUE, GX_FALSE, 1); + PSMTXScale(spF4, 0.5f, 0.6f, 0.6f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spF4, -1); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, spC); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_RASC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_POS, lbl_1_data_C0, 0xC); + GXSetArray(GX_VA_CLR0, lbl_1_data_A8, 4); + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 8); + for (var_r30 = 0; var_r30 < 8; var_r30++) { + GXPosition1x8(var_r30); + GXColor1x8(var_r30 >> 1); + } + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); +} + +GXColor lbl_1_data_168[2] = { { 0xFF, 0xFF, 0xFF, 0 }, { 0xFF, 0xFF, 0xFF, 0xFF } }; + +void fn_1_A3A8(ModelData *model, Mtx matrix) +{ + Mtx sp48; + Mtx sp18; + float var_f31; + float var_f30; + u8 *var_r30; + u8 *var_r29; + + GXColor sp14 = { 0xFF, 0xA5, 0x59, 0xB2 }; + GXColor sp10 = { 0x99, 0x72, 0x59, 0xB2 }; + s32 var_r31 = 0; + if (lbl_1_bss_60[var_r31].unk_0C != 0) { + var_r31++; + } + lbl_1_bss_60[var_r31].unk_0C = 1; + if (fn_1_4030() != 0) { + var_f30 = 1.0f; + var_f31 = fn_1_BB54(var_r31); + } + else { + var_f30 = 1.5f; + var_f31 = 0.0f; + } + if (lbl_1_bss_5C != 0) { + PSMTXTrans(sp18, var_f31, 0.0f, 300.0f + (lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24)); + GXSetTevColor(GX_TEVREG0, sp10); + } + else { + PSMTXTrans(sp18, var_f31, -150.0f, lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24); + GXSetTevColor(GX_TEVREG0, sp14); + } + PSMTXScale(sp48, var_f30, 1.0f, 1.0f); + PSMTXConcat(sp18, sp48, sp18); + PSMTXConcat(Hu3DCameraMtx, sp18, sp18); + GXLoadPosMtxImm(sp18, 0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + HuSprTexLoad(lbl_1_bss_144, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(lbl_1_bss_140, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetNumTexGens(2); + PSMTXRotRad(sp18, 0x58, 1.5707964f); + var_f31 = 0.004f * var_f30; + PSMTXScale(sp48, var_f31, -0.004f, 0.004f); + PSMTXConcat(sp18, sp48, sp18); + PSMTXTrans(sp48, (lbl_1_bss_60[var_r31].unk_1C & 0x3FF) / (512.0f * var_f31), 0.0f, + (1.2499999f * (lbl_1_bss_60[var_r31].unk_1C % 400)) + (lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24)); + PSMTXConcat(sp18, sp48, sp18); + GXLoadTexMtxImm(sp18, 0x1E, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D); + PSMTXRotRad(sp18, 0x58, 1.5707964f); + var_f31 = 0.004f * var_f30; + PSMTXScale(sp48, var_f31, -0.004f, 0.004f); + PSMTXConcat(sp18, sp48, sp18); + PSMTXTrans(sp48, (lbl_1_bss_60[var_r31].unk_1C % 300) / (150.0f * var_f31), 0.0f, lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24); + PSMTXConcat(sp18, sp48, sp18); + GXLoadTexMtxImm(sp18, 0x21, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D); + GXSetNumTevStages(2); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_SET); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_POS, lbl_1_data_120, 0xC); + GXSetArray(GX_VA_CLR0, lbl_1_data_168, 4); + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 6); + GXPosition1x8(0); + GXColor1x8(0); + GXPosition1x8(1); + GXColor1x8(0); + GXPosition1x8(2); + GXColor1x8(1); + GXPosition1x8(3); + GXColor1x8(1); + GXPosition1x8(4); + GXColor1x8(1); + GXPosition1x8(5); + GXColor1x8(1); +} + +void fn_1_AB98(ModelData *model, Mtx matrix) +{ + s32 var_r31 = 0; + if (lbl_1_bss_60[var_r31].unk_08 != 0) { + var_r31++; + } + if ((fn_1_4030() == 0) && (var_r31 == 0)) { + GXSetTexCopySrc(0, 0, 0x280, 0x1E0); + GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGB5A3, 0); + } + else { + GXSetTexCopySrc(var_r31 * 0x140, 0, 0x140, 0x1E0); + GXSetTexCopyDst(0x140, 0x1E0, GX_TF_RGB5A3, 0); + } + GXCopyTex(lbl_1_bss_60[var_r31].unk_6C, 0); + GXPixModeSync(); + lbl_1_bss_60[var_r31].unk_08 = 1; +} + +void fn_1_AC84(ModelData *model, Mtx matrix) +{ + s32 var_r31 = 0; + if (lbl_1_bss_60[var_r31].unk_18 != 0) { + var_r31++; + } + lbl_1_bss_60[var_r31].unk_18 = 1; + fn_1_86B4(lbl_1_bss_54, &lbl_1_bss_60[var_r31]); +} + +void fn_1_AD04(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *var_r31; + s32 var_r29; + + if ((particle->unk_00 == 0) || (lbl_1_bss_5C != 0)) { + particle->unk_00++; + for (var_r31 = particle->unk_48, var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + var_r31->unk00 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + return; + } + for (var_r31 = particle->unk_48, var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 != 0) { + PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); + PSVECScale(&var_r31->unk08, &var_r31->unk08, 0.97f); + if (var_r31->unk00_s16 < 24.0f) { + var_r31->unk40.a = 0.9f * var_r31->unk40.a; + } + var_r31->unk2C += 1.5f; + if (--var_r31->unk00_s16 == 0) { + var_r31->unk00_s16 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + } + } + DCStoreRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); +} + +void fn_1_AEE0(s32 arg0, Vec *arg1, float arg8, float arg9) +{ + Vec sp10; + float var_f31; + float var_f30; + float var_f28; + HsfanimStruct01 *var_r31; + ParticleData *var_r30; + s32 var_r29; + M430DllWork *var_r28; + u32 var_r27; + void *var_r26; + + var_r26 = lbl_1_bss_58->data; + var_r28 = var_r26; + var_r30 = Hu3DData[var_r28[arg0].unk_10].unk_120; + if (var_r30->unk_00 != 0) { + var_r31 = var_r30->unk_48; + if (!(frandmod(0x3E8) > (1200.0f * arg9))) { + var_r27 = 1; + var_f28 = 30.0f; + for (var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 == 0) { + var_r31->unk00 = 60.0f * (0.5f + (0.0005f * frandmod(0x3E8))); + var_f30 = (0.002f * frandmod(0x3E8)) - 1.0f; + var_f30 = arg8 + (var_f30 * var_f28); + sp10.x = sind(var_f30); + sp10.y = 0.0f; + sp10.z = cosd(var_f30); + var_r31->unk34 = *arg1; + var_r31->unk34.y = -20.0f; + var_f31 = 5.0f + arg9 * (1.6666667f * (2.0f * (0.001f * frandmod(0x3E8)))); + var_r31->unk08.x = sp10.x * var_f31; + var_r31->unk08.y = -0.2f * var_f31; + var_r31->unk08.z = sp10.z * var_f31; + var_f31 = 0.001f * frandmod(0x3E8); + var_f31 += (1.0f - var_f31) * (0.5f * arg9); + var_r31->unk30 = frandmod(0x168); + var_r31->unk2C = 80.0f + frandmod(0x46); + var_r31->unk40.a = frandmod(0x64) + 0x64; + var_r31->unk40.r = 150.0f + (95.0f * var_f31); + var_r31->unk40.g = 160.0f + (80.0f * var_f31); + var_r31->unk40.b = 166.0f + (60.0f * var_f31); + if (--var_r27 == 0) { + break; + } + } + } + } + } +} + +void fn_1_B394(ModelData *model, ParticleData *var_r30, Mtx matrix) +{ + HsfanimStruct01 *var_r31; + s32 var_r29; + + if ((var_r30->unk_00 == 0) || (lbl_1_bss_5C != 0)) { + var_r30->unk_00++; + for (var_r31 = var_r30->unk_48, var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) { + var_r31->unk00_s16 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + return; + } + for (var_r31 = var_r30->unk_48, var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 != 0) { + var_r31->unk00_s16--; + PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); + var_r31->unk2C += 0.5f; + if (var_r31->unk00_s16 < 30.0) { + var_r31->unk40.a = 0.98f * var_r31->unk40.a; + } + if ((var_r31->unk34.y < -40.0f) || (var_r31->unk00_s16 == 0)) { + var_r31->unk00_s16 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + } + } + DCStoreRange(var_r30->unk_48, var_r30->unk_30 * sizeof(HsfanimStruct01)); +} + +void fn_1_B570(s32 arg0, Vec *arg1, float arg8, float arg9, Vec *arg2) +{ + Vec sp28; + Vec sp1C; + s32 sp18; + float var_f31; + float var_f30; + float var_f28; + HsfanimStruct01 *var_r31; + ParticleData *var_r30; + s32 var_r29; + M430DllWork *var_r28; + u32 var_r27; + M430DllWork *var_r26; + + var_r26 = lbl_1_bss_58->data; + { + float sp14[2] = { -100.0f, 100.0f }; + var_r28 = var_r26; + var_r30 = Hu3DData[var_r28[arg0].unk_14].unk_120; + if (var_r30->unk_00 != 0) { + var_r31 = var_r30->unk_48; + if (!(frandmod(0x3E8) > (1000.0f * arg9))) { + var_r27 = 2; + var_f28 = 40.0f; + PSVECScale(arg2, &sp1C, 0.2f); + sp1C.x = 0.0f; + for (var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 == 0) { + var_r31->unk00_s16 = 60.0f * (0.5f + (0.0005f * frandmod(0x3E8))); + var_f30 = (0.002f * frandmod(0x3E8)) - 1.0f; + var_f30 = arg8 + sp14[var_r29 & 1] + (var_f30 * var_f28); + sp28.x = sind(var_f30); + sp28.y = 0.0f; + sp28.z = cosd(var_f30); + var_r31->unk34 = *arg1; + var_r31->unk34.x = var_r31->unk34.x + ((0.05f * frandmod(0x3E8)) - 25.0f); + var_r31->unk34.z = var_r31->unk34.z + ((0.05f * frandmod(0x3E8)) - 25.0f); + var_r31->unk34.y = 40.0f; + var_f31 = 1.6666667f + (arg9 * (0.0016666667f * frandmod(0x3E8))); + var_r31->unk08.x = sp28.x * var_f31; + var_r31->unk08.z = sp28.z * var_f31; + var_r31->unk08.y = 0.0f; + PSVECAdd(&var_r31->unk08, &sp1C, &var_r31->unk08); + var_f31 = 0.001f * frandmod(0x3E8); + var_f31 += (1.0f - var_f31) * (0.3f * arg9); + var_r31->unk30 = frandmod(0x168); + var_r31->unk2C = 60.0f + frandmod(0x50); + var_r31->unk40.a = (60.0f * arg9) + frandmod(0x50); + var_r31->unk40.r = 150.0f + (95.0f * var_f31); + var_r31->unk40.g = 160.0f + (80.0f * var_f31); + var_r31->unk40.b = 166.0f + (60.0f * var_f31); + if (--var_r27 == 0) { + break; + } + } + } + } + } + } +} + +float fn_1_BB54(u32 arg0) +{ + float sp8[2] = { -450.0f, 450.0f }; + + return sp8[arg0 & 1]; +} + +float fn_1_BB88(void) +{ + return 0.0f; +} + +void fn_1_BB98(u32 arg0) +{ + lbl_1_bss_5C = 0; + if (arg0 != 0) { + lbl_1_bss_5C = 1; + } +}