From 33b771b393d690646bef2841af48c0d1963c8512 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 27 May 2024 10:53:14 -0500 Subject: [PATCH] Decompile m408dll/camera.c --- config/GMPE01_00/rels/m408Dll/symbols.txt | 164 ++--- configure.py | 2 +- include/REL/m408Dll.h | 5 + include/game/hsfanim.h | 4 +- src/REL/m408Dll/camera.c | 828 ++++++++++++++++++++++ src/game/board/item.c | 2 +- 6 files changed, 919 insertions(+), 86 deletions(-) create mode 100644 src/REL/m408Dll/camera.c diff --git a/config/GMPE01_00/rels/m408Dll/symbols.txt b/config/GMPE01_00/rels/m408Dll/symbols.txt index 1fe4deb2..98a68858 100644 --- a/config/GMPE01_00/rels/m408Dll/symbols.txt +++ b/config/GMPE01_00/rels/m408Dll/symbols.txt @@ -223,88 +223,88 @@ lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x8 scope:local data: lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 scope:local data:double lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x8 scope:local data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 data:double -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 data:double -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 data:double -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 data:float -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 data:float -lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 data:float -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x8 data:double -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x48 -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 data:float -lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 data:float -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 data:float -lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 data:float -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 data:float -lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 data:float -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x4 data:float -lbl_1_rodata_42C = .rodata:0x0000042C; // type:object size:0x4 data:float -lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 data:float -lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 data:float -lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float -lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 data:float -lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x10 data:4byte -lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x10 data:4byte -lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x28 data:2byte -lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 data:float -lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x10 data:4byte -lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x10 data:4byte -lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 data:float -lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 data:float -lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 data:float -lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x8 data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 scope:local data:double +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x8 scope:local data:double +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 scope:local data:float +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float +lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x48 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +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 +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 scope:local data:float +lbl_1_rodata_414 = .rodata:0x00000414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_41C = .rodata:0x0000041C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x4 scope:local data:float +lbl_1_rodata_424 = .rodata:0x00000424; // type:object size:0x4 scope:local data:float +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x4 scope:local data:float +lbl_1_rodata_42C = .rodata:0x0000042C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 scope:local data:float +lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_440 = .rodata:0x00000440; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_450 = .rodata:0x00000450; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_460 = .rodata:0x00000460; // type:object size:0x28 scope:local data:2byte +lbl_1_rodata_488 = .rodata:0x00000488; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48C = .rodata:0x0000048C; // type:object size:0x10 scope:local data:float +lbl_1_rodata_49C = .rodata:0x0000049C; // type:object size:0x10 scope:local data:float +lbl_1_rodata_4AC = .rodata:0x000004AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B0 = .rodata:0x000004B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B4 = .rodata:0x000004B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4B8 = .rodata:0x000004B8; // type:object size:0x8 scope:local data:float lbl_1_rodata_4C0 = .rodata:0x000004C0; // type:object size:0x4 data:float lbl_1_rodata_4C4 = .rodata:0x000004C4; // type:object size:0x4 data:float lbl_1_rodata_4C8 = .rodata:0x000004C8; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index e0893baf..1454d7cd 100644 --- a/configure.py +++ b/configure.py @@ -883,7 +883,7 @@ config.libs = [ objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m408Dll/main.c"), - Object(NonMatching, "REL/m408Dll/camera.c"), + Object(Matching, "REL/m408Dll/camera.c"), Object(NonMatching, "REL/m408Dll/stage.c"), Object(NonMatching, "REL/m408Dll/object.c"), }, diff --git a/include/REL/m408Dll.h b/include/REL/m408Dll.h index c1dde96b..5a6198ef 100644 --- a/include/REL/m408Dll.h +++ b/include/REL/m408Dll.h @@ -35,6 +35,8 @@ typedef struct work_2FAC { u32 fn_1_6878(void); Work2FAC *fn_1_68A8(s32 arg0); +void fn_1_817C(Vec *arg0, Vec *arg1); +void fn_1_84C4(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5); float fn_1_883C(float arg0, float arg1, float arg2); void fn_1_C3C0(Vec *arg0, Vec *arg1); u32 fn_1_C43C(void); @@ -45,4 +47,7 @@ void fn_1_C44C(Process *objman); void fn_1_118D0(Process *objman); s32 fn_1_162CC(Vec *arg0, Vec *arg1); +extern s32 lbl_1_bss_44; +extern s32 lbl_1_bss_40; + #endif diff --git a/include/game/hsfanim.h b/include/game/hsfanim.h index e06f19f9..e2e63117 100644 --- a/include/game/hsfanim.h +++ b/include/game/hsfanim.h @@ -32,8 +32,8 @@ typedef struct { typedef struct particle_data { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 unk_02; - /* 0x04 */ float unk_04; - /* 0x08 */ char unk_08[0x14]; + /* 0x04 */ Vec unk_04; + /* 0x10 */ char unk_10[0x0C]; /* 0x1C */ void *unk_1C; /* 0x20 */ s16 unk_20; /* 0x22 */ s16 unk_22; diff --git a/src/REL/m408Dll/camera.c b/src/REL/m408Dll/camera.c new file mode 100644 index 00000000..4e39b1b1 --- /dev/null +++ b/src/REL/m408Dll/camera.c @@ -0,0 +1,828 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "game/chrman.h" +#include "game/minigame_seq.h" +#include "game/pad.h" + +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/sprite.h" + +#include "game/audio.h" +#include "game/gamework_data.h" + +#include "REL/m408Dll.h" + +#include "math.h" +#include "ext_math.h" + +omObjData *lbl_1_bss_110; +u32 lbl_1_bss_10C; +Vec lbl_1_bss_100; +Vec lbl_1_bss_F4; +HsfanimStruct01 *lbl_1_bss_A4[20]; +u32 lbl_1_bss_A0; +HsfanimStruct01 *lbl_1_bss_94[3]; +s32 lbl_1_bss_88[3]; +s32 lbl_1_bss_84; +s32 lbl_1_bss_80; + +void fn_1_8A20(omObjData *object); +void fn_1_9770(omObjData *object); + +void fn_1_8958(Process *objman) +{ + omObjData *object; + lbl_1_bss_10C = 0; + object = omAddObjEx(objman, 20, 9, 0, -1, fn_1_8A20); + object->work[0] = 0; + lbl_1_bss_110 = omAddObjEx(objman, 21, 2, 0, -1, fn_1_9770); + lbl_1_bss_110->work[0] = 0; + lbl_1_bss_84 = lbl_1_bss_80 = -1; +} + +void fn_1_8FAC(omObjData *object); + +void fn_1_A894(ModelData *model, ParticleData *particle, Mtx matrix); +void fn_1_B700(s16 arg0, u32 arg1); +void fn_1_BB94(void); +void fn_1_BDE0(void); + +void fn_1_8A20(omObjData *object) +{ + s16 temp_r31; + s32 temp_r29; + for(temp_r29=0; temp_r29<20; temp_r29++) { + lbl_1_bss_A4[temp_r29] = NULL; + } + lbl_1_bss_A0 = 0; + for(temp_r29=0; temp_r29<3; temp_r29++) { + lbl_1_bss_94[temp_r29] = NULL; + lbl_1_bss_88[temp_r29] = 0; + } + object->model[0] = Hu3DModelCreateFile(0x270000); + omSetSca(object, 0.1f, 0.1f, 0.1f); + object->model[1] = Hu3DModelCreateFile(0x270001); + Hu3DModelScaleSet(object->model[1], 0.1f, 0.1f, 0.1f); + Hu3DModelPosSet(object->model[1], 0, 11990, 0); + Hu3DModelShadowMapSet(object->model[1]); + temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x27000B), 1); + object->model[2] = temp_r31; + Hu3DModelLayerSet(temp_r31, 6); + Hu3DParticleColSet(temp_r31, 255, 255, 255); + Hu3DParticleHookSet(temp_r31, fn_1_A894); + Hu3DModelPosSet(temp_r31, 0, 0, 0); + Hu3DData[temp_r31].unk_120->unk_00 = 0; + Hu3DData[temp_r31].unk_120->unk_02 = 0; + temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x27000D), 1); + object->model[3] = temp_r31; + Hu3DParticleBlendModeSet(temp_r31, 1); + Hu3DModelLayerSet(temp_r31, 6); + Hu3DParticleColSet(temp_r31, 255, 255, 255); + Hu3DParticleHookSet(temp_r31, fn_1_A894); + Hu3DModelPosSet(temp_r31, 0, 0, 0); + Hu3DData[temp_r31].unk_120->unk_00 = 0; + Hu3DData[temp_r31].unk_120->unk_02 = 1; + temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x270011), 1); + object->model[5] = temp_r31; + Hu3DModelLayerSet(temp_r31, 7); + Hu3DParticleColSet(temp_r31, 255, 255, 255); + Hu3DParticleHookSet(temp_r31, fn_1_A894); + Hu3DModelPosSet(temp_r31, 0, 0, 0); + Hu3DData[temp_r31].unk_120->unk_00 = 0; + Hu3DData[temp_r31].unk_120->unk_02 = 2; + temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x270010), 8); + object->model[6] = temp_r31; + Hu3DParticleBlendModeSet(temp_r31, 1); + Hu3DModelLayerSet(temp_r31, 6); + Hu3DModelPosSet(temp_r31, 0, 0, 0); + fn_1_B700(temp_r31, 0); + temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x27000F), 6); + object->model[6] = temp_r31; + Hu3DParticleBlendModeSet(temp_r31, 1); + Hu3DModelLayerSet(temp_r31, 6); + Hu3DModelPosSet(temp_r31, 0, 0, 0); + fn_1_B700(temp_r31, 1); + temp_r31 = Hu3DParticleCreate(HuSprAnimReadFile(0x27000D), 5); + object->model[6] = temp_r31; + Hu3DParticleBlendModeSet(temp_r31, 1); + Hu3DModelLayerSet(temp_r31, 6); + Hu3DModelPosSet(temp_r31, 0, 0, 0); + fn_1_B700(temp_r31, 2); + fn_1_BB94(); + lbl_1_bss_10C = 1; + object->func = fn_1_8FAC; + object->work[1] = 0; +} + +void fn_1_9514(omObjData *object); + +void fn_1_8FAC(omObjData *object) +{ + object->work[1]++; + switch(lbl_1_bss_10C) { + case 1: + if(lbl_1_bss_110->work[0] == 4) { + lbl_1_bss_10C = 2; + fn_1_817C(&lbl_1_bss_100, &lbl_1_bss_F4); + object->work[1] = 0; + } + break; + + case 2: + fn_1_817C(&lbl_1_bss_100, &lbl_1_bss_F4); + if(lbl_1_bss_80 < 0) { + lbl_1_bss_80 = HuAudFXPlay(1361); + } + lbl_1_bss_10C = 3; + object->work[1] = 0; + break; + + case 3: + lbl_1_bss_F4.y += -6.666667f; + lbl_1_bss_F4.z += -0.5833334f; + lbl_1_bss_100.y += 20.0f/60.0f; + fn_1_817C(&lbl_1_bss_100, &lbl_1_bss_F4); + if(lbl_1_bss_F4.y > 12010) { + break; + } + if(lbl_1_bss_84 < 0) { + lbl_1_bss_84 = HuAudFXPlay(1357); + } + if(lbl_1_bss_80 >= 0) { + HuAudFXStop(lbl_1_bss_80); + lbl_1_bss_80 = -1; + } + lbl_1_bss_10C = 4; + object->work[1] = 0; + object->work[2] = 0; + break; + + case 4: + if(object->work[1] < 24.0f) { + lbl_1_bss_100.y += 4.0f/12.0f; + fn_1_817C(&lbl_1_bss_100, &lbl_1_bss_F4); + } else { + if(object->work[2] == 0) { + if(!lbl_1_bss_40) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + lbl_1_bss_44 = 1; + } + object->work[2]++; + } + CZoom -= 2.5000002f; + if(object->work[1] < 90.0f) { + break; + } + lbl_1_bss_10C = 5; + object->work[1] = 0; + } + break; + + default: + lbl_1_bss_10C = 5; + break; + } + omSetTra(object, Center.x+(sind(CRot.y)*cosd(CRot.x)*CZoom), Center.y+(-sind(CRot.x)*CZoom), Center.z+(cosd(CRot.y)*cosd(CRot.x)*CZoom)); + fn_1_BDE0(); + if(lbl_1_bss_10C == 5) { + Hu3DModelAttrSet(object->model[0], 1); + Hu3DModelAttrSet(object->model[1], 1); + lbl_1_bss_10C = 5; + object->func = fn_1_9514; + } +} + +void fn_1_9514(omObjData *object) +{ + if(!WipeStatGet() && object->work[2] != 0) { + if(!lbl_1_bss_40) { + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + lbl_1_bss_44 = 0; + } + object->work[2] = 0; + } + if(fn_1_6878() >= 4) { + Hu3DModelAttrReset(object->model[0], 1); + } + omSetTra(object, Center.x+(sind(CRot.y)*cosd(CRot.x)*CZoom), Center.y+(-sind(CRot.x)*CZoom)-1000, Center.z+(cosd(CRot.y)*cosd(CRot.x)*CZoom)); +} + +typedef struct work_99C8 { + Vec unk0; + Vec unkC; + Vec unk18; + Vec unk24; + Vec unk30; + Vec unk3C; + s32 unk48[2]; +} Work99C8; + +void fn_1_99C8(omObjData *object); +void fn_1_A37C(ModelData *model, ParticleData *particle, Mtx matrix); + +void fn_1_9770(omObjData *object) +{ + Work99C8 *temp_r31; + s32 temp_r29; + + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work99C8), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + object->model[0] = Hu3DModelCreateFile(0x27000A); + Hu3DModelAttrSet(object->model[0], 0x40000001); + Hu3DMotionSpeedSet(object->model[0], 3.0f); + Hu3DModelShadowSet(object->model[0]); + object->func = fn_1_99C8; + object->work[0] = 0; + object->work[1] = 0; + temp_r31->unk3C.x = temp_r31->unk3C.y = temp_r31->unk3C.z = 0; + temp_r31->unk0.x = temp_r31->unk0.y = temp_r31->unk0.z = 0; + temp_r31->unk0.z = 1000; + omSetTra(object, 0, 12080, -2*temp_r31->unk0.z); + omSetSca(object, 0.5f, 0.5f, 0.5f); + temp_r29 = Hu3DParticleCreate(HuSprAnimReadFile(0x270024), 1024); + object->model[1] = temp_r29; + Hu3DModelLayerSet(temp_r29, 6); + Hu3DParticleColSet(temp_r29, 255, 255, 255); + Hu3DParticleHookSet(temp_r29, fn_1_A37C); + Hu3DModelPosSet(temp_r29, 0, 0, 0); + Hu3DData[temp_r29].unk_120->unk_00 = 0; + temp_r31->unk30.y = -35; + temp_r31->unk30.z = 350; + temp_r31->unk18.y = 800+object->trans.y; + temp_r31->unk48[0] = temp_r31->unk48[1] = -1; + HuDataDirClose(0x27000A); +} + +void fn_1_A334(omObjData *object); +void fn_1_A4E8(s32 arg0, Vec *arg1, u32 arg2); + +void fn_1_99C8(omObjData *object) +{ + float temp_f31; + float temp_f30; + + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + + Work99C8 *temp_r31; + temp_r31 = object->data; + object->trans.x += temp_r31->unk0.x*(1.0f/60.0f); + object->trans.y += temp_r31->unk0.y*(1.0f/60.0f); + object->trans.z += temp_r31->unk0.z*(1.0f/60.0f); + object->work[1]++; + switch(object->work[0]) { + case 0: + if(object->work[1] < 120.0f) { + temp_f30 = (1.0f/60.0f)*(1.5f*(120.0f-object->work[1])); + if(temp_f30 > 1.0f) { + temp_f30 = 1.0f; + } + temp_f31 = temp_r31->unk18.z; + temp_r31->unk30.z -= (175.0f/60.0f)*temp_f30; + temp_r31->unk30.y += 1.1666667f*temp_f30; + temp_r31->unk18.x = object->trans.x+(temp_r31->unk30.z*sind(temp_r31->unk30.y)); + temp_r31->unk18.z = object->trans.z+(temp_r31->unk30.z*cosd(temp_r31->unk30.y)); + temp_r31->unk18.y -= 8.333334f*temp_f30; + temp_r31->unk24.x = 0; + temp_r31->unk24.y = 0; + temp_r31->unk24.z = 0.96f*temp_r31->unk0.z; + } else { + temp_r31->unk18.z += temp_r31->unk24.z*(1.0f/60.0f); + } + temp_r31->unkC.x = object->trans.x; + temp_r31->unkC.y = object->trans.y; + temp_r31->unkC.z = object->trans.z; + sp2C.x = object->trans.x; + sp2C.y = object->trans.y; + sp2C.z = object->trans.z; + if(temp_r31->unk48[0] < 0) { + temp_r31->unk48[0] = HuAudFXEmiterPlay(1362, &sp2C); + } + if(temp_r31->unk48[1] < 0) { + temp_r31->unk48[1] = HuAudFXEmiterPlay(1356, &sp2C); + } + if(object->work[1] < 180.0f) { + break; + } + object->work[0] = 1; + object->work[1] = 0; + break; + + case 1: + temp_r31->unk24.z *= 0.6f; + temp_r31->unk18.z += (temp_r31->unk24.z*(1.0f/60.0f)); + temp_r31->unk18.x += (temp_r31->unk24.z*(1.0f/60.0f)); + temp_r31->unkC.x = object->trans.x; + temp_r31->unkC.y = object->trans.y; + temp_r31->unkC.z = object->trans.z; + if(object->work[1] < 60.0f) { + break; + } + object->work[0] = 2; + object->work[1] = 0; + break; + + case 2: + temp_r31->unk3C.x += 1.5000001f; + temp_r31->unk0.z = 1000.0*cosd(temp_r31->unk3C.x); + temp_r31->unk0.y = 1000.0*sind(temp_r31->unk3C.x); + temp_r31->unkC.x = object->trans.x; + temp_r31->unkC.y = object->trans.y; + temp_r31->unkC.z = object->trans.z; + if(object->work[1] < 120.0f) { + break; + } + object->work[0] = 3; + object->work[1] = 0; + temp_r31->unk3C.x = 180; + break; + + case 3: + temp_r31->unk3C.z += 3.0000002f; + temp_f31 = (1.0f/60.0f)*object->work[1]; + temp_f31 = 1.0f-(temp_f31*temp_f31); + temp_r31->unkC.x += temp_f31*(object->trans.x-temp_r31->unkC.x); + temp_r31->unkC.y += temp_f31*(object->trans.y-temp_r31->unkC.y); + temp_r31->unkC.z += temp_f31*(object->trans.z-temp_r31->unkC.z); + if(object->work[1] < 60.0f) { + break; + } + lbl_1_bss_F4.x = temp_r31->unkC.x; + lbl_1_bss_F4.y = temp_r31->unkC.y; + lbl_1_bss_F4.z = temp_r31->unkC.z; + lbl_1_bss_100.x = temp_r31->unk18.x; + lbl_1_bss_100.y = temp_r31->unk18.y; + lbl_1_bss_100.z = temp_r31->unk18.z; + object->work[0] = 4; + object->work[1] = 0; + break; + + case 4: + temp_r31->unk3C.z += 3.0000002f; + if(object->work[1] > 42.0f) { + if(temp_r31->unk48[0] >= 0) { + HuAudFXStop(temp_r31->unk48[0]); + temp_r31->unk48[0] = -1; + } + if(temp_r31->unk48[1] >= 0) { + HuAudFXStop(temp_r31->unk48[1]); + temp_r31->unk48[1] = -1; + } + } + if(object->work[1] < 240.0f) { + break; + } + object->work[0] = 5; + object->work[1] = 0; + break; + + default: + object->work[0] = 5; + object->func = fn_1_A334; + break; + } + omSetRot(object, -temp_r31->unk3C.x, temp_r31->unk3C.y, temp_r31->unk3C.z); + if(object->trans.y < 12150.0f) { + sp20.x = object->trans.x; + sp20.y = object->trans.y; + sp20.z = object->trans.z+10; + fn_1_A4E8(object->model[1], &sp20, 4); + sp20.x = sp8.x = object->trans.x; + sp20.z = object->trans.z; + sp8.z = object->trans.z-10; + sp20.y = object->trans.y+250.0f; + sp8.y = object->trans.y; + sp14.x = 0; + sp14.y = 0; + sp14.z = 1; + Hu3DShadowPosSet(&sp20, &sp14, &sp8); + } + if(temp_r31->unk48[0] >= 0) { + sp2C.x = object->trans.x-30; + sp2C.y = object->trans.y; + sp2C.z = object->trans.z+25; + HuAudFXEmiterUpDate(temp_r31->unk48[0], &sp2C); + } + if(temp_r31->unk48[1] < 0) { + sp2C.x = object->trans.x+30; + sp2C.y = object->trans.y; + sp2C.z = object->trans.z+25; + HuAudFXEmiterUpDate(temp_r31->unk48[1], &sp2C); + } + if(object->work[0] < 4) { + fn_1_84C4(temp_r31->unk18.x, temp_r31->unk18.y, temp_r31->unk18.z, temp_r31->unkC.x, temp_r31->unkC.y, temp_r31->unkC.z); + } + if(fn_1_C43C() == 5) { + object->func = fn_1_A334; + } +} + +void fn_1_A334(omObjData *object) +{ + Hu3DModelAttrSet(object->model[1], 1); + Hu3DModelAttrSet(object->model[0], 1); +} + + +void fn_1_A37C(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01 *temp_r31; + s32 temp_r29; + if(particle->unk_00 == 0) { + particle->unk_00++; + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk00 = 0; + temp_r31->unk2C = 0; + temp_r31->unk40.a = 0; + } + } else { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk00_s16) { + 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->unk2C += temp_r31->unk14.x; + temp_r31->unk14.y -= temp_r31->unk14.z; + temp_r31->unk40.a = temp_r31->unk14.y; + if(--temp_r31->unk00_s16 == 0) { + temp_r31->unk00_s16 = 0; + temp_r31->unk2C = 0; + temp_r31->unk40.a =0; + } + } + } + DCStoreRange(particle->unk_48, particle->unk_30*sizeof(HsfanimStruct01)); + } +} + +void fn_1_A4E8(s32 arg0, Vec *arg1, u32 arg2) +{ + float temp_f31; + HsfanimStruct01 *temp_r31; + ParticleData *temp_r30; + s32 temp_r29; + temp_r30 = Hu3DData[arg0].unk_120; + if(temp_r30->unk_00) { + temp_r31 = temp_r30->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk00_s16 != 0) { + continue; + } + temp_r31->unk00_s16 = 60.0f*(((1.5f/1000.0f)*frandmod(1000))+1.0f); + temp_r31->unk34.x = arg1->x; + temp_r31->unk34.y = 12000; + temp_r31->unk34.z = arg1->z; + temp_r31->unk08.x = (1.0f/60.0f)*((0.6f*frandmod(1000))-300.0f); + temp_r31->unk08.y = (1.0f/60.0f)*((0.04f*frandmod(1000))+10.0f); + temp_r31->unk08.z = 0; + temp_r31->unk14.x = 0.3f+((3.0f/1000.0f)*frandmod(1000)); + temp_r31->unk2C = 10; + temp_r31->unk40.a = frandmod(127)+64; + temp_r31->unk14.y = temp_r31->unk40.a; + temp_r31->unk14.z = temp_r31->unk14.y*(1.0f/temp_r31->unk00_s16); + temp_f31 = frandmod(1000)*(1.0f/1000.0f); + temp_r31->unk40.r = (temp_f31*55)+200; + temp_r31->unk40.g = (temp_f31*50)+205; + temp_r31->unk40.b = (temp_f31*5)+250; + if(--arg2 == 0) { + break; + } + } + } +} + +void fn_1_A894(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r31; + s32 temp_r29; + float sp14[][6] = { + { + 600, 1, 0.95, 0.8, 1, 0 + }, + { + 600, 1, 0.6, 0.9, 0.3, 0 + }, + { + 13, 1, 1, 1, 0.5, 0 + }, + }; + Vec sp8; + if(particle->unk_00 == 0) { + particle->unk_00++; + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk00 = 1; + temp_r31->unk2C = sp14[particle->unk_02][0]; + temp_r31->unk40.r = 255*sp14[particle->unk_02][1]; + temp_r31->unk40.g = 255*sp14[particle->unk_02][2]; + temp_r31->unk40.b = 255*sp14[particle->unk_02][3]; + temp_r31->unk40.a = 255*sp14[particle->unk_02][4]; + temp_f31 = -70; + temp_f30 = -10; + temp_r31->unk08.x = sind(temp_f30)*cosd(temp_f31); + temp_r31->unk08.y = -sind(temp_f31); + temp_r31->unk08.z = cosd(temp_f30)*cosd(temp_f31); + } + } else { + particle->unk_00++; + if(particle->unk_00 < 339.0f) { + return; + } + if(particle->unk_00 >= 600.0f) { + particle->unk_00 = 601; + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + temp_r31->unk00 = 0; + temp_r31->unk2C = 0; + temp_r31->unk40.a = 0; + } + } else { + temp_r31 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r31++) { + if(temp_r31->unk00_s16 == 0) { + continue; + } + sp8.x = sind(CRot.y)*cosd(CRot.x); + sp8.y = -sind(CRot.x); + sp8.z = cosd(CRot.y)*cosd(CRot.x); + if(particle->unk_02 < 2) { + temp_f31 = 4500; + temp_r31->unk34.x = (Center.x+(temp_r31->unk08.x*temp_f31))+(sp8.x*CZoom); + temp_r31->unk34.y = (Center.y+(temp_r31->unk08.y*temp_f31))+(sp8.y*CZoom); + temp_r31->unk34.z = (Center.z+(temp_r31->unk08.z*temp_f31))+(sp8.z*CZoom); + if(particle->unk_02 != 0) { + temp_f31 = -((sp8.x*temp_r31->unk08.x)+(sp8.y*temp_r31->unk08.y)+(sp8.z*temp_r31->unk08.z)); + if(temp_f31 > 0.77f) { + temp_f30 = (1.0f/0.23f)*(temp_f31-0.77f); + temp_r31->unk2C = 1400*temp_f30; + temp_r31->unk40.a = (32.0f*temp_f30)+16.0f; + } else { + temp_r31->unk2C = 0; + } + } + } else { + temp_f31 = CZoom-10; + temp_r31->unk34.x = (sp8.x*temp_f31)+Center.x; + temp_r31->unk34.y = (sp8.y*temp_f31)+Center.y; + temp_r31->unk34.z = (sp8.z*temp_f31)+Center.z; + temp_f31 = -((sp8.x*temp_r31->unk08.x)+(sp8.y*temp_r31->unk08.y)+(sp8.z*temp_r31->unk08.z)); + if(temp_f31 > 0.9f) { + temp_f30 = 10.0f*(temp_f31-0.9f); + temp_r31->unk40.a = temp_f30*210.0f; + } else { + temp_r31->unk40.a = 0; + } + } + } + DCStoreRange(particle->unk_48, particle->unk_30*sizeof(HsfanimStruct01)); + } + } +} + +void fn_1_AFF4(ModelData *model, ParticleData *particle, Mtx matrix) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r30; + s32 temp_r29; + Vec sp20; + Vec sp14; + Vec sp8; + if(particle->unk_00 == 0) { + particle->unk_00++; + temp_f31 = -70; + temp_f30 = -10; + particle->unk_04.x = sind(temp_f30)*cosd(temp_f31); + particle->unk_04.y = -sind(temp_f31); + particle->unk_04.z = cosd(temp_f30)*cosd(temp_f31); + temp_f31 = 0; + temp_r30 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r30++) { + temp_r30->unk00 = 1; + temp_f31 += 1.0f/particle->unk_30; + temp_r30->unk2C = 40.0f+((1.0f-temp_f31)*(100.0f+frandmod(1000))); + temp_r30->unk40.r = frandmod(127)+128; + temp_r30->unk40.g = frandmod(127)+128; + temp_r30->unk40.b = frandmod(127)+128; + temp_r30->unk40.a = frandmod(16)+16; + } + } else { + particle->unk_00++; + if(particle->unk_00 < 339.0f) { + return; + } + if(particle->unk_00 >= 600.0f) { + particle->unk_00 = 601; + temp_r30 = particle->unk_48; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r30++) { + temp_r30->unk00 = 0; + temp_r30->unk2C = 0; + temp_r30->unk40.a = 0; + } + } else { + sp20.x = sind(CRot.y)*cosd(CRot.x); + sp20.y = -sind(CRot.x); + sp20.z = cosd(CRot.y)*cosd(CRot.x); + temp_f31 = -((-particle->unk_04.x*-sp20.x)+(-particle->unk_04.y*-sp20.y)+(-particle->unk_04.z*-sp20.z)); + sp14.x = -sp20.x+(-2.0f*particle->unk_04.x*temp_f31); + sp14.y = -sp20.y+(-2.0f*particle->unk_04.y*temp_f31); + sp14.z = -sp20.z+(-2.0f*particle->unk_04.z*temp_f31); + temp_f31 = 4500; + sp8.x = (Center.x+(particle->unk_04.x*temp_f31))+(sp20.x*CZoom); + sp8.y = (Center.y+(particle->unk_04.y*temp_f31))+(sp20.y*CZoom); + sp8.z = (Center.z+(particle->unk_04.z*temp_f31))+(sp20.z*CZoom); + temp_r30 = particle->unk_48; + temp_f30 = 0; + for(temp_r29=0; temp_r29unk_30; temp_r29++, temp_r30++) { + if(temp_r30->unk00_s16 == 0) { + continue; + } + temp_f30 += 1.0f/particle->unk_30; + temp_f31 = 10.0f*(430.0f*(1.0f-((1.0f-temp_f30)*(1.0f-temp_f30)))); + temp_r30->unk34.x = sp8.x+(sp14.x*temp_f31); + temp_r30->unk34.y = sp8.y+(sp14.y*temp_f31); + temp_r30->unk34.z = sp8.z+(sp14.z*temp_f31); + } + DCStoreRange(particle->unk_48, particle->unk_30*sizeof(HsfanimStruct01)); + } + } +} + +void fn_1_B700(s16 arg0, u32 arg1) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r31; + ParticleData *temp_r30; + s32 temp_r29; + s32 temp_r27; + float sp1C[] = { + 0.4f, 0.21f, 0.16f, 1.0f + }; + float spC[] = { + 0.15f, 0.6f, 1.3f, 1.0f + }; + s16 sp2C[] = { + 1, 0, + 2, 0, + 0, 1, + 2, 0, + 0, 1, + 2, 1, + 0, 0, + 1, 2, + 0, 1, + 2, -1 + }; + arg1 &= 0x3; + temp_r30 = Hu3DData[arg0].unk_120; + temp_r30->unk_00 = 1; + temp_f31 = -70; + temp_f30 = -10; + temp_r30->unk_04.x = sind(temp_f30)*cosd(temp_f31); + temp_r30->unk_04.y = -sind(temp_f31); + temp_r30->unk_04.z = cosd(temp_f30)*cosd(temp_f31); + temp_r31 = temp_r30->unk_48; + for(temp_r27=0; temp_r27unk_30; temp_r27++, temp_r31++) { + temp_r31->unk00 = 1; + temp_r31->unk02 = arg1; + for(temp_r29=0; sp2C[temp_r29] >= 0; temp_r29++) { + if(arg1 != sp2C[temp_r29]) { + continue; + } + if(lbl_1_bss_A4[temp_r29] == NULL) { + break; + } + } + if(sp2C[temp_r29] < 0) { + temp_r31->unk2C = 0; + temp_r31->unk40.a = 0; + continue; + } + lbl_1_bss_A4[temp_r29] = temp_r31; + lbl_1_bss_A0++; + temp_r31->unk2C = 800.0f*(spC[arg1]*(1.0f+((0.7f/1000.0f)*frandmod(1000)))); + temp_r31->unk40.r = frandmod(160)+32; + temp_r31->unk40.g = frandmod(160)+32; + temp_r31->unk40.b = frandmod(160)+32; + temp_r31->unk40.a = (255.0f*sp1C[arg1])-frandmod(16); + } + lbl_1_bss_94[arg1] = temp_r30->unk_48; + lbl_1_bss_88[arg1] = temp_r30->unk_30; +} + +void fn_1_BB94(void) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r31; + s32 temp_r30; + float sp18[] = { + 0.02f, 0.08f, 0.07f, 0.5f + }; + float sp8[] = { + 0.0009f, 0.00020000001f, 0.00001f, 0.0005f + }; + temp_f31 = 0.1f; + for(temp_r30=0; temp_r30unk02]*(1.0f+(frandmod(1000)*sp8[temp_r31->unk02]))); + temp_f31 += temp_f30; + temp_r31->unk14.x = temp_f31; + temp_f31 += temp_f30; + } + temp_f31 = 1.0f/temp_f31; + for(temp_r30=0; temp_r30unk14.x *= temp_f31; + temp_r31->unk2C *= (0.8f-(0.4f*temp_r31->unk14.x)); + temp_r31->unk14.x = 10.0f*(400.0f*temp_r31->unk14.x); + } + for(temp_r30=0; temp_r30<3; temp_r30++) { + DCStoreRangeNoSync(lbl_1_bss_94[temp_r30], lbl_1_bss_88[temp_r30]*sizeof(HsfanimStruct01)); + } + PPCSync(); +} + +void fn_1_BDE0(void) +{ + float temp_f31; + float temp_f30; + HsfanimStruct01 *temp_r31; + s32 temp_r30; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + temp_r31 = lbl_1_bss_A4[0]; + temp_r31->unk00_s16++; + if(temp_r31->unk00_s16 < 339.0f) { + return; + } + if(temp_r31->unk00_s16 >= 600.0f) { + temp_r31->unk00_s16 = 601; + for(temp_r30=0; temp_r30unk00_s16 = 0; + temp_r31->unk2C = 0; + temp_r31->unk40.a = 0; + } + return; + } + sp2C.x = sind(CRot.y)*cosd(CRot.x); + sp2C.y = -sind(CRot.x); + sp2C.z = cosd(CRot.y)*cosd(CRot.x); + temp_f31 = -70; + temp_f30 = -10; + sp20.x = sind(temp_f30)*cosd(temp_f31); + sp20.y = -sind(temp_f31); + sp20.z = cosd(temp_f30)*cosd(temp_f31); + temp_f31 = 4500; + sp8.x = (Center.x+(sp20.x*temp_f31))+(sp2C.x*CZoom); + sp8.y = (Center.y+(sp20.y*temp_f31))+(sp2C.y*CZoom); + sp8.z = (Center.z+(sp20.z*temp_f31))+(sp2C.z*CZoom); + temp_f31 = -((-sp20.x*-sp2C.x)+(-sp20.y*-sp2C.y)+(-sp20.z*-sp2C.z)); + sp14.x = -sp2C.x+(-2.0f*sp20.x*temp_f31); + sp14.y = -sp2C.y+(-2.0f*sp20.y*temp_f31); + sp14.z = -sp2C.z+(-2.0f*sp20.z*temp_f31); + if(temp_f31 > 0.5f) { + temp_f30 = 3.0f-(2.0f*temp_f31); + } else { + temp_f30 = 1.0f; + } + for(temp_r30=0; temp_r30unk34.x = sp8.x+(temp_f30*(sp14.x*temp_r31->unk14.x)); + temp_r31->unk34.y = sp8.y+(temp_f30*(sp14.y*temp_r31->unk14.x)); + temp_r31->unk34.z = sp8.z+(temp_f30*(sp14.z*temp_r31->unk14.x)); + } + for(temp_r30=0; temp_r30<3; temp_r30++) { + DCStoreRangeNoSync(lbl_1_bss_94[temp_r30], lbl_1_bss_88[temp_r30]*sizeof(HsfanimStruct01)); + } + PPCSync(); +} + +void fn_1_C3C0(Vec *arg0, Vec *arg1) +{ + arg0->x = lbl_1_bss_110->trans.x; + arg0->y = lbl_1_bss_110->trans.y; + arg0->z = lbl_1_bss_110->trans.z; + arg1->x = lbl_1_bss_110->rot.x; + arg1->y = lbl_1_bss_110->rot.y; + arg1->z = lbl_1_bss_110->rot.z; +} + +u32 fn_1_C43C(void) +{ + return lbl_1_bss_10C; +} \ No newline at end of file diff --git a/src/game/board/item.c b/src/game/board/item.c index e9486df6..76563ee2 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -1943,7 +1943,7 @@ static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx mat var_r31->unk2C = 0.0f; var_r31->unk40.a = 0; } - particle->unk_04 = 0.0f; + particle->unk_04.x = 0.0f; particle->unk_00 = 0; } if (particle->unk_00 == 0) {