From 312f8471c8ebce75a58edbabebec89ae5118216a Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Wed, 5 Feb 2025 03:08:50 +0100 Subject: [PATCH] Finish m427Dll (#558) --- config/GMPE01_00/rels/m427Dll/symbols.txt | 16 +- configure.py | 2 +- include/REL/m427Dll.h | 36 +- src/REL/m427Dll/main.c | 5 - src/REL/m427Dll/map.c | 2645 +++++++++++++++++++-- src/REL/m427Dll/player.c | 10 +- 6 files changed, 2495 insertions(+), 219 deletions(-) diff --git a/config/GMPE01_00/rels/m427Dll/symbols.txt b/config/GMPE01_00/rels/m427Dll/symbols.txt index d075d6af..96db2763 100644 --- a/config/GMPE01_00/rels/m427Dll/symbols.txt +++ b/config/GMPE01_00/rels/m427Dll/symbols.txt @@ -271,11 +271,11 @@ lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data: 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:0xC scope:local data:4byte +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0xC 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:0x1 scope:local data:byte +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:byte 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 @@ -353,8 +353,8 @@ lbl_1_data_D0 = .data:0x000000D0; // type:object size:0x8 lbl_1_data_D8 = .data:0x000000D8; // type:object size:0x4 lbl_1_data_DC = .data:0x000000DC; // type:object size:0x4 lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x4 data:2byte -lbl_1_data_E8 = .data:0x000000E8; // type:object size:0x4 data:2byte -lbl_1_data_EC = .data:0x000000EC; // type:object size:0x5 data:string +lbl_1_data_E8 = .data:0x000000E8; // type:object size:0x4 data:byte +lbl_1_data_EC = .data:0x000000EC; // type:object size:0x5 scope:local data:string lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x4 data:float lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x4 data:float lbl_1_data_FC = .data:0x000000FC; // type:object size:0x30 @@ -365,10 +365,10 @@ lbl_1_data_1D4 = .data:0x000001D4; // type:object size:0x8 lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x8 lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x8 lbl_1_data_1EC = .data:0x000001EC; // type:object size:0x4 -lbl_1_data_1F0 = .data:0x000001F0; // type:object size:0x13 data:string -lbl_1_data_203 = .data:0x00000203; // type:object size:0x10 data:string -lbl_1_data_213 = .data:0x00000213; // type:object size:0x26 data:string -lbl_1_data_239 = .data:0x00000239; // type:object size:0x25 +lbl_1_data_1F0 = .data:0x000001F0; // type:object size:0x13 scope:local data:string +lbl_1_data_203 = .data:0x00000203; // type:object size:0x10 scope:local data:string +lbl_1_data_213 = .data:0x00000213; // type:object size:0x26 scope:local data:string +lbl_1_data_239 = .data:0x00000239; // type:object size:0x24 scope:local data:string lbl_1_data_260 = .data:0x00000260; // type:object size:0x15C lbl_1_data_3BC = .data:0x000003BC; // type:object size:0x15C lbl_1_data_518 = .data:0x00000518; // type:object size:0x1C diff --git a/configure.py b/configure.py index 6d5e0024..1a3c04d9 100644 --- a/configure.py +++ b/configure.py @@ -1084,7 +1084,7 @@ config.libs = [ "m427Dll", # Right Oar Left? objects={ Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/main.c"), - Object(NonMatching, "REL/m427Dll/map.c"), + Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/map.c"), Object(MatchingFor("GMPE01_00", "GMPE01_01"), "REL/m427Dll/player.c"), }, ), diff --git a/include/REL/m427Dll.h b/include/REL/m427Dll.h index c8290376..ceda94c3 100644 --- a/include/REL/m427Dll.h +++ b/include/REL/m427Dll.h @@ -1,21 +1,35 @@ #include "dolphin.h" #include "game/object.h" -s32 fn_1_1788(void); -void fn_1_1798(s32 arg0, float arg8); -s32 fn_1_1884(void); -s32 fn_1_32EC(void); +typedef struct M427DllStruct { + s32 unk0; + s32 unk4; +} M427DllStruct; -void fn_1_32F4(Process* arg0); -void fn_1_3B20(s8 arg0, s16 arg1); +s32 fn_1_1788(void); +void fn_1_1798(s32 arg0, float arg8); +s32 fn_1_1884(void); +s32 fn_1_32EC(void); + +void fn_1_32F4(Process *arg0); +void fn_1_3B20(s8 arg0, s16 arg1); void fn_1_3A88(void); -void fn_1_91E0(s16 arg0, float arg8, float arg9, float argA, float argB); -float fn_1_AE78(s16 arg0, float arg8, float arg9); -void fn_1_E98C(Process*); +void fn_1_91E0(s16 arg0, float arg8, float arg9, float argA, float argB); +float fn_1_AE78(s16 arg0, float arg8, float arg9); +void fn_1_E98C(Process *); void fn_1_EC54(void); s32 fn_1_10FE8(s32 arg0, s32 *arg1); -void fn_1_110E8(s32, s32*); -void fn_1_111C0(s32, s32*); +void fn_1_110E8(s32, s32 *); +void fn_1_111C0(s32, s32 *); void fn_1_11298(f32); s32 fn_1_113F0(s32); f32 fn_1_168FC(f32, f32, f32); + +s32 fn_1_15F10(Vec arg0, Vec arg1, s32 arg2, s32 arg3, s32 arg4); +s32 fn_1_15FD0(Vec arg0, float arg8, s32 arg1, s32 arg2, s32 arg3); + +extern s32 lbl_1_bss_580; +extern Vec *lbl_1_bss_558; +extern Vec *lbl_1_bss_554; +extern Vec *lbl_1_bss_550; +extern M427DllStruct lbl_1_bss_0[8]; diff --git a/src/REL/m427Dll/main.c b/src/REL/m427Dll/main.c index 84bcb03b..fdf0de2d 100644 --- a/src/REL/m427Dll/main.c +++ b/src/REL/m427Dll/main.c @@ -10,11 +10,6 @@ #include "game/objsub.h" #include "game/wipe.h" -typedef struct M427DllStruct { - s32 unk0; - s32 unk4; -} M427DllStruct; - typedef struct M427DllStruct2 { s32 unk0[3]; s32 unkC; diff --git a/src/REL/m427Dll/map.c b/src/REL/m427Dll/map.c index acbbb20e..1678f422 100644 --- a/src/REL/m427Dll/map.c +++ b/src/REL/m427Dll/map.c @@ -1,19 +1,27 @@ #include "REL/m427Dll.h" +#include "dolphin/gx/GXEnum.h" +#include "dolphin/gx/GXStruct.h" +#include "dolphin/gx/GXVert.h" +#include "dolphin/pad.h" #include "ext_math.h" #include "game/animdata.h" +#include "game/audio.h" +#include "game/hsfanim.h" #include "game/hsfdraw.h" #include "game/hsfman.h" #include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/object.h" +#include "game/pad.h" #include "game/sprite.h" +#include "string.h" + +extern s32 rand8(void); +extern LightData Hu3DLocalLight[0x20]; #define FABS(value) ((value < 0) ? -(value) : (value)) -typedef struct M427DllStruct { - s32 unk0; - s32 unk4; -} M427DllStruct; - typedef struct M427DllStruct2 { s32 unk0[3]; s32 unkC; @@ -35,24 +43,38 @@ typedef struct M427DllStruct3 { Vec rot; Vec cen; f32 zoom; -} M427DllStruct3; +} M427DllStruct3; // sizeof 0x1C typedef struct M427DllMapStruct { - char unk_0[0x2]; + u8 unk0; + char unk_1; s16 unk2; s16 unk4; char unk_6[0x2]; - AnimData* unk8; - char unk_C[0x74]; - void* unk80; - char unk_84[0x14]; + AnimData *unk8; + Vec unkC; + Vec unk18; + Vec unk24; + Vec unk30; + Vec2f unk3C; + Vec2f unk44; + Vec2f unk4C; + Vec2f unk54; + Vec2f unk5C[4]; + GXColor unk7C; + void *unk80; + s32 unk84; + float unk88; + float unk8C; + float unk90; + float unk94; } M427DllMapStruct; // sizeof 0x98 typedef struct M427DllMapStruct2 { s8 unk0; s16 unk2; s16 unk4; -} M427DllMapStruct2; +} M427DllMapStruct2; // sizeof 0x6 typedef struct M427DllMapSubstruct { s16 unk0; @@ -62,31 +84,46 @@ typedef struct M427DllMapSubstruct { typedef struct M427DllMapSubstruct2 { s16 unk0; Vec unk4; - s16 unk10; - s16 unk12; + s16 unk10[2]; s16 unk14[4]; } M427DllMapSubstruct2; // sizeof 0x1C -typedef struct M427DllMapSubstruct4 { - char unk[0x28]; - AnimData* unk28; -} M427DllMapSubstruct4; - typedef struct M427DllMapSubstruct7 { s16 unk0; s32 unk4; - void* unk8; -} M427DllMapSubstruct7; + void *unk8; +} M427DllMapSubstruct7; // sizeof 0xC -typedef struct M427DllMapUNKBA { - s16 unk0; - char unk[0x2E]; -} M427DllMapUNKBA; - -typedef struct M427DllMapUNK180 { +typedef struct M427DllMapUNKB8 { s16 unk0; s16 unk2; -} M427DllMapUNK180; + s16 unk4; + s16 unk6; + u8 unk8; + s16 unkA; + float unkC; + float unk_10; + float unk_14; + s16 unk18; + s16 unk1A; + s16 unk1C; + s16 unk1E; + float unk20; + float unk24; + float unk28; + float unk2C; +} M427DllMapUNKB8; // sizeof 0x30 + +typedef struct M427DllMapUNK17E { + s16 unk0; + s16 unk2; +} M427DllMapUNK17E; // sizeof 0x4 + +typedef struct M427DllMapSubstruct3Sub { + s16 unk0; + void *unk4; + u32 unk8; +} M427DllMapSubstruct3Sub; // sizeof 0xC typedef struct M427DllMapSubstruct3 { s16 unk0; @@ -96,30 +133,44 @@ typedef struct M427DllMapSubstruct3 { s16 unk1C; s16 unk1E; s16 unk20; - char unk_22[0x3A]; + char unk_22[2]; + float unk24[4]; + s16 unk34[4]; + s16 unk3C[4]; + s16 unk44[0xB]; + s16 unk5A; s16 unk5C; - char unk_5E[0x1A]; + char unk_5E[2]; + Vec unk_60; + Vec unk_6C; Vec unk78; Vec unk84; f32 unk90; - char unk_94[0x4]; - void* unk98; - M427DllMapSubstruct7* unk9C; + M427DllMapSubstruct3Sub unk94; char unk_A0[0xC]; - M427DllMapSubstruct4* unkAC; - char unk_B0[0xA]; - M427DllMapUNKBA unkBA[2][2]; - char unk_17A[0x6]; - M427DllMapUNK180 unk180[2][2]; - char unk_190[0x8]; + struct M427DllMapStruct6 *unkAC; + s16 unkB0[1]; + char unk_B2[0x6]; + M427DllMapUNKB8 unkB8[2][2]; + s16 unk178[3]; + M427DllMapUNK17E unk17E[2][2]; + s16 unk18E[2]; + char unk194[4]; } M427DllMapSubstruct3; // sizeof 0x198 +typedef struct M427DllMapStruct3Sub { + AnimData *unk_00; + AnimData *unk_04; + float unk_08; + float unk_0C; + float unk_10; + float unk_14; +} M427DllMapStruct3Sub; // sizeof 0x18 + typedef struct M427DllMapStruct3 { u8 unk0; M427DllMapSubstruct3 unk4[2]; - AnimData* unk334; - AnimData* unk338; - char unk_33C[0x10]; + M427DllMapStruct3Sub unk334; M427DllMapSubstruct2 unk34C[3]; M427DllMapSubstruct unk3A0[5]; } M427DllMapStruct3; // sizeof 0x3F0 @@ -130,24 +181,24 @@ typedef struct M427DllMapSubstruct5 { s16 unk4; s16 unk6; Vec unk8; - char unk[0x8]; -} M427DllMapSubstruct5; + char unk14[0x8]; +} M427DllMapSubstruct5; // sizeof 0x1C typedef struct M427DllMapStruct4 { s16 unk0; - Vec* unk4; - Vec2f* unk8; - Vec* unkC; - GXColor* unk10; + Vec *unk4; + Vec2f *unk8; + Vec *unkC; + GXColor *unk10; s16 unk14; s16 unk16; s16 unk18; - M427DllMapSubstruct5* unk1C; - void* unk20; + M427DllMapSubstruct5 *unk1C; + void *unk20; u32 unk24; - void* unk28; + void *unk28; u32 unk2C; - void* unk30; + void *unk30; u32 unk34; f32 unk38; f32 unk3C; @@ -155,7 +206,7 @@ typedef struct M427DllMapStruct4 { f32 unk44; s16 unk48[1]; s16 unk4A; -} M427DllMapStruct4; +} M427DllMapStruct4; // sizeof 0x4C typedef struct M427DllMapStruct5 { f32 unk0; @@ -165,56 +216,193 @@ typedef struct M427DllMapStruct5 { f32 unk10; } M427DllMapStruct5; // sizeof 0x14 -omObjData* lbl_1_bss_548; +typedef struct M427DllMapStruct6 { + s16 unk_00; + Vec *unk_04; + Vec *unk_08; + float unk_0C; + float unk_10; + float unk_14; + float unk_18; + float unk_1C; + float unk_20; + float unk_24; + AnimData *unk_28; + Vec *unk_2C; + Vec2f *unk_30; + Vec *unk_34; + s16 unk_38; + s16 unk_3A; + s16 unk_3C; + char pad_3E[2]; + void *unk_40; + u32 unk_44; + M427DllMapSubstruct5 *unk_48; + float unk_4C; + float unk_50; + float unk_54; + float unk_58; + float unk_5C; + /* 0x60 */ float unk_60; +} M427DllMapStruct6; /* size = 0x64, stored in unk_120 */ + +typedef struct M427DllMapSubstruct6 { + /* 0x00 */ float unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ char pad_0C[0xC]; /* maybe part of unk_08[4]? */ + /* 0x18 */ float unk_18; + /* 0x1C */ float unk_1C; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ float unk_30; + /* 0x34 */ s16 unk_34; + /* 0x36 */ s16 unk_36; + /* 0x38 */ s16 unk_38; + /* 0x3A */ char pad_3A[2]; + /* 0x3C */ s32 unk_3C; + /* 0x40 */ s16 unk_40; + /* 0x42 */ char pad_42[2]; + /* 0x44 */ float unk_44; + /* 0x48 */ Vec unk_48; + /* 0x54 */ Vec unk_54; + /* 0x60 */ s16 unk_60; + /* 0x62 */ s8 unk_62; + /* 0x63 */ char pad_63[1]; +} M427DllMapSubstruct6; // sizeof 0x64 + +typedef void (*M427DllHook)(ModelData *model, struct M427DllMapStruct7 *particle, Mtx matrix); + +typedef struct M427DllMapStruct7 { + /* 0x00 */ s16 unk_00; + /* 0x02 */ char pad_02[2]; + /* 0x04 */ u32 unk_04; + /* 0x08 */ u8 unk_08; + /* 0x09 */ char pad_09[3]; /* maybe part of unk_08[4]? */ + /* 0x0C */ M427DllHook unk_0C; + /* 0x10 */ AnimData *unk_10; + /* 0x14 */ s16 unk_14; + /* 0x16 */ char pad_16[2]; + /* 0x18 */ M427DllMapSubstruct6 *unk_18; + /* 0x1C */ Vec *unk_1C; + /* 0x20 */ Vec2f *unk_20; + /* 0x24 */ GXColor *unk_24; + /* 0x28 */ void *unk_28; + /* 0x2C */ Vec unk_2C; + /* 0x38 */ float unk_38; + /* 0x3C */ float unk_3C; + /* 0x40 */ float unk_40; + /* 0x44 */ float unk_44; + /* 0x48 */ float unk_48; + /* 0x4C */ float unk_4C; + /* 0x50 */ float unk_50; + /* 0x54 */ float unk_54; + /* 0x58 */ float unk_58; + /* 0x5C */ Vec2f *unk_5C; + /* 0x60 */ float unk_60; + /* 0x64 */ float unk_64; +} M427DllMapStruct7; /* size = 0x68, stored in unk_120 */ + +GXColor lbl_1_data_E8 = { 0xFF, 0xFF, 0xFF, 0xFF }; + +omObjData *lbl_1_bss_548; M427DllMapStruct3 lbl_1_bss_158; M427DllMapStruct2 lbl_1_bss_F8[0x10]; -M427DllMapStruct* lbl_1_bss_F0; +AnimData *lbl_1_bss_F4; +M427DllMapStruct *lbl_1_bss_F0; s16 lbl_1_bss_EC[2]; s16 lbl_1_bss_E8[2]; -M427DllMapStruct5* lbl_1_bss_E4; +M427DllMapStruct5 *lbl_1_bss_E4; M427DllMapStruct4 lbl_1_bss_98; f32 lbl_1_bss_94; +s8 lbl_1_bss_91; +s8 lbl_1_bss_90; void fn_1_372C(void); -void fn_1_4218(omObjData*); +void fn_1_4218(omObjData *object); void fn_1_44F4(f32, f32, f32, f32, f32); -void fn_1_48EC(ModelData*, Mtx); -void fn_1_4D7C(ModelData*, Mtx); -void fn_1_50A0(ModelData*, Mtx); +void fn_1_48EC(ModelData *model, Mtx matrix); +void fn_1_4D7C(ModelData *model, Mtx matrix); +void fn_1_50A0(ModelData *model, Mtx matrix); void fn_1_510C(s32, s16, s16); -void fn_1_558C(M427DllMapStruct4*); -void fn_1_618C(ModelData*, Mtx); -void fn_1_6760(omObjData*); -void fn_1_C2C8(Vec*, Vec*, Vec*, void*); -void fn_1_D22C(void); -s16 fn_1_D63C(AnimData*, s32, f32, s32, s32); +void fn_1_558C(M427DllMapStruct4 *); +void fn_1_618C(ModelData *model, Mtx matrix); +void fn_1_6760(omObjData *object); +void fn_1_C2C8(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3); +void fn_1_D22C(ModelData *model, struct M427DllMapStruct7 *arg1, Mtx matrix); +s16 fn_1_D63C(AnimData *arg0, s16 arg1, float arg8, s16 arg2, s16 arg3); void fn_1_DB80(s16); -void fn_1_DC64(s16, void (*)(void)); -void fn_1_DC9C(s16, s32); +void fn_1_DC64(s16, M427DllHook); +void fn_1_DC9C(s16, u8); +void fn_1_72E4(omObjData *arg0); +void fn_1_73BC(void); +void fn_1_794C(M427DllMapSubstruct3 *arg0, s16 arg1); +void fn_1_7C34(void); +void fn_1_7E60(s16 arg0, M427DllMapSubstruct3 *arg1); +void fn_1_7F38(void); +void fn_1_85D4(s16 arg0, M427DllMapSubstruct3 *arg1); +void fn_1_8768(M427DllMapSubstruct3 *arg0, M427DllMapUNKB8 *arg1, s16 arg2, float arg8, float arg9); +void fn_1_8E1C(u8 arg0, M427DllMapSubstruct3 *arg1, M427DllMapUNKB8 *arg2); +void fn_1_8F90(omObjData *object); +void fn_1_9240(void); +void fn_1_9318(s16 *arg0, s16 arg1); +void fn_1_93EC(s32 arg0, s32 arg1, float arg8, float arg9, float argA, float argB); +s16 fn_1_95E8(s32 arg0, s16 arg1, s16 arg2, float arg8, float arg9, float argA, float argB, float argC); +void fn_1_9958(s16 arg0, u8 arg1); +void fn_1_999C(s16 arg0, u8 arg1); +void fn_1_99E4(s16 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4); +void fn_1_9A2C(s16 arg0, float arg8, float arg9, float argA); +void fn_1_9AA0(s16 arg0, float arg8, float arg9, float argA); +void fn_1_9B14(s16 arg0, float arg8, float arg9, float argA); +void fn_1_9B88(ModelData *model, Mtx matrix); +void fn_1_A148(ModelData *model, Mtx matrix); +s16 fn_1_A1F4(s32 arg0, s16 arg1, s16 arg2, s16 arg3, float arg8, Vec *arg4, Vec *arg5); +void fn_1_A7F8(M427DllMapStruct6 *arg0); +void fn_1_B194(M427DllMapStruct6 *arg0, float arg8, Vec *arg1); +void fn_1_B3CC(ModelData *model, Mtx matrix); +void fn_1_C154(ModelData *model, Mtx matrix); +void fn_1_C200(ModelData *model, Mtx matrix); +void fn_1_C2AC(Vec *arg0, float arg8, float arg9, float argA); +void fn_1_C2BC(Vec2f *arg0, float arg8, float arg9); +s16 fn_1_C41C(float arg8, float arg9, float argA, float argB, float argC, float argD, u8 arg0, u8 arg1, u8 arg2); +void fn_1_C528(s16 arg0, s16 arg1, float arg8, float arg9, float argA, float argB, float argC, float argD, u8 arg2, u8 arg3, u8 arg4); +void fn_1_C68C(LightData *arg0, Vec *arg1, Vec *arg2, GXColor *arg3); +void fn_1_C76C(u8 arg0, float arg8, float arg9, float argA, s16 arg1, float argB, float argC, s16 arg2); +s16 fn_1_D430(float arg8, float arg9, float argA, s16 arg0); +M427DllMapSubstruct6 *fn_1_D4FC(s16 arg0, Vec *arg1, Vec *arg2, float arg8, GXColor *arg3); +M427DllMapSubstruct6 *fn_1_DC0C(s16 arg0, s16 arg1); +void fn_1_DCD4(ModelData *model, Mtx matrix); +void fn_1_E2B0(Vec2f *arg0, s16 arg1, s16 arg2, float arg8, float arg9); +void fn_1_E37C(Vec2f *arg0, Vec2f *arg1, s16 arg2, float arg8, float arg9); +void fn_1_E420(Vec *arg0, Vec *arg1, Vec *arg2, s16 arg3); -void fn_1_32F4(Process* arg0) { +void fn_1_32F4(Process *arg0) +{ s16 var_r31; - AnimData* temp_r30; + AnimData *temp_r30; s32 var_r29; s32 var_r28; lbl_1_bss_158.unk0 = 0; lbl_1_bss_548 = omAddObjEx(arg0, 0x7F, 0, 0, -1, fn_1_6760); - lbl_1_bss_F0 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x10 * sizeof(M427DllMapStruct), 0x10000000); - + lbl_1_bss_F0 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x10 * sizeof(M427DllMapStruct), MEMORY_DEFAULT_NUM); + for (var_r31 = 0; var_r31 < 0x10; var_r31++) { lbl_1_bss_F0[var_r31].unk2 = -1; } - temp_r30 = HuSprAnimRead(HuDataReadNum(0x3A0017, MEMORY_DEFAULT_NUM)); + temp_r30 = HuSprAnimRead(HuDataReadNum(0x3A0017, MEMORY_DEFAULT_NUM)); for (var_r31 = 0; var_r31 < 2; var_r31++) { lbl_1_bss_EC[var_r31] = fn_1_D63C(temp_r30, 0x200, 80.0f, 0x40, 0x40); - fn_1_DC64(lbl_1_bss_EC[var_r31], &fn_1_D22C); + fn_1_DC64(lbl_1_bss_EC[var_r31], fn_1_D22C); fn_1_DC9C(lbl_1_bss_EC[var_r31], 1); Hu3DModelLayerSet(lbl_1_bss_EC[var_r31], 7); if (var_r31 == 0) { var_r29 = 1; - } else { + } + else { var_r29 = 2; } Hu3DModelCameraSet(lbl_1_bss_EC[var_r31], var_r29); @@ -226,13 +414,14 @@ void fn_1_32F4(Process* arg0) { Hu3DModelLayerSet(lbl_1_bss_E8[var_r31], 7); if (var_r31 == 0) { var_r28 = 1; - } else { + } + else { var_r28 = 2; } Hu3DModelCameraSet(lbl_1_bss_E8[var_r31], var_r28); } fn_1_372C(); - + for (var_r31 = 0; var_r31 < 0x10; var_r31++) { lbl_1_bss_F8[var_r31].unk0 = -1; lbl_1_bss_F8[var_r31].unk2 = Hu3DModelCreateFile(0x3A0012); @@ -245,77 +434,62 @@ void fn_1_32F4(Process* arg0) { } } -void fn_1_372C(void) { - M427DllMapSubstruct* var_r29 = &lbl_1_bss_158.unk3A0[0]; - M427DllMapSubstruct2* var_r30 = &lbl_1_bss_158.unk34C[0]; +void fn_1_372C(void) +{ + M427DllMapSubstruct *var_r29 = &lbl_1_bss_158.unk3A0[0]; + M427DllMapSubstruct2 *var_r30 = &lbl_1_bss_158.unk34C[0]; s16 sp1A[5] = { 0, 0, 1, 1, 0 }; - Vec sp60[5] = { - { -700.0f, -150.0f, -7000.0f }, - { 0.0f, -300.0f, -12000.0f }, - { 800.0f, -350.0f, -12700.0f }, - { 600.0f, -350.0f, -13700.0f }, - { 825.0f, -450.0f, -15000.0f } - }; + Vec sp60[5] = { { -700.0f, -150.0f, -7000.0f }, { 0.0f, -300.0f, -12000.0f }, { 800.0f, -350.0f, -12700.0f }, { 600.0f, -350.0f, -13700.0f }, + { 825.0f, -450.0f, -15000.0f } }; s16 sp8[3] = { 1, 1, 0 }; - s16 spE[3][2] = { { 4, 5 }, { 8, -1 }, { 9, -1 } }; - s16 sp24[3][4] = { - { 180, 120, 60, 60 }, - { 90, 180, 60, 60 }, - { 90, 180, 60, 60 } - }; - Vec sp3C[3] = { - -350.0f, -300.0f, -10000.0f, - -700.0f, -600.0f, -17000.0f, - 700.0f, -600.0f, -19000.0f - }; + s16 spE[3][2] = { { 4, 5 }, { 8, -1 }, { 9, -1 } }; + s16 sp24[3][4] = { { 180, 120, 60, 60 }, { 90, 180, 60, 60 }, { 90, 180, 60, 60 } }; + Vec sp3C[3] = { -350.0f, -300.0f, -10000.0f, -700.0f, -600.0f, -17000.0f, 700.0f, -600.0f, -19000.0f }; s16 var_r28; s16 var_r31; - + for (var_r31 = 0; var_r31 < 5; var_r31++, var_r29++) { var_r29->unk0 = sp1A[var_r31]; var_r29->unk4.x = sp60[var_r31].x; var_r29->unk4.y = sp60[var_r31].y; var_r29->unk4.z = sp60[var_r31].z; } - + for (var_r31 = 0; var_r31 < 3; var_r31++, var_r30++) { var_r30->unk0 = sp8[var_r31]; var_r30->unk4.x = sp3C[var_r31].x; var_r30->unk4.y = sp3C[var_r31].y; var_r30->unk4.z = sp3C[var_r31].z; - var_r30->unk10 = spE[var_r31][0]; - var_r30->unk12 = spE[var_r31][1]; + var_r30->unk10[0] = spE[var_r31][0]; + var_r30->unk10[1] = spE[var_r31][1]; for (var_r28 = 0; var_r28 < 4; var_r28++) { var_r30->unk14[var_r28] = sp24[var_r31][var_r28]; } } } -void fn_1_3A88(void) { - M427DllMapStruct* sp8; +void fn_1_3A88(void) +{ + M427DllMapStruct *sp8; s16 var_r30; - M427DllMapSubstruct3* var_r31; + M427DllMapSubstruct3 *var_r31; sp8 = lbl_1_bss_F0; - HuSprAnimKill(lbl_1_bss_158.unk334); - HuSprAnimKill(lbl_1_bss_158.unk338); - + HuSprAnimKill(lbl_1_bss_158.unk334.unk_00); + HuSprAnimKill(lbl_1_bss_158.unk334.unk_04); + for (var_r30 = 0, var_r31 = &lbl_1_bss_158.unk4[0]; var_r30 < 2; var_r30++, var_r31++) { - if (var_r31->unk98) { - HuMemDirectFree(var_r31->unk98); + if (var_r31->unk94.unk4) { + HuMemDirectFree(var_r31->unk94.unk4); } } } -void fn_1_3B20(s8 arg0, s16 arg1) { - M427DllMapStruct2* var_r31 = &lbl_1_bss_F8[0]; - M427DllMapSubstruct3* temp_r30 = &lbl_1_bss_158.unk4[arg1]; - Vec sp54[4] = { - { 110.0f, -20.0f, 0.0f }, - { -110.0f, -20.0f, 0.0f }, - { 110.0f, -20.0f, 190.0f }, - { -110.0f, -20.0f, 190.0f } - }; +void fn_1_3B20(s8 arg0, s16 arg1) +{ + M427DllMapStruct2 *var_r31 = &lbl_1_bss_F8[0]; + M427DllMapSubstruct3 *temp_r30 = &lbl_1_bss_158.unk4[arg1]; + Vec sp54[4] = { { 110.0f, -20.0f, 0.0f }, { -110.0f, -20.0f, 0.0f }, { 110.0f, -20.0f, 190.0f }, { -110.0f, -20.0f, 190.0f } }; Mtx sp24; f32 sp14[4] = { 135.0f, 225.0f, 45.0f, 315.0f }; Point3d sp8; @@ -324,20 +498,22 @@ void fn_1_3B20(s8 arg0, s16 arg1) { s32 var_r27; for (var_r29 = 0; var_r29 < 0x10; var_r29++, var_r31++) { - if (var_r31->unk0 == -1) break; + if (var_r31->unk0 == -1) + break; } if (var_r29 != 0x10) { var_r31->unk0 = arg0; temp_f31 = temp_r30->unk90; - PSMTXRotRad(sp24, 0x59, MTXDegToRad(temp_f31)); - PSMTXMultVec(sp24, &sp54[arg0], &sp8); + MTXRotRad(sp24, 0x59, MTXDegToRad(temp_f31)); + MTXMultVec(sp24, &sp54[arg0], &sp8); sp8.x += temp_r30->unk84.x; sp8.y += temp_r30->unk84.y; sp8.z += temp_r30->unk84.z; Hu3DModelAttrReset(var_r31->unk2, 1); if (arg1 == 0) { var_r27 = 1; - } else { + } + else { var_r27 = 2; } Hu3DModelCameraSet(var_r31->unk2, var_r27); @@ -346,15 +522,17 @@ void fn_1_3B20(s8 arg0, s16 arg1) { Hu3DMotionTimeSet(var_r31->unk2, 0.0f); if (arg0 < 2) { Hu3DModelAmbSet(var_r31->unk2, 1.0f, 1.0f, 1.0f); - } else { + } + else { Hu3DModelAmbSet(var_r31->unk2, 0.5f, 0.5f, 0.5f); } Hu3DAnimBankSet(var_r31->unk4, 0); } } -void fn_1_3DBC(void) { - M427DllMapStruct2* var_r31; +void fn_1_3DBC(void) +{ + M427DllMapStruct2 *var_r31; s16 var_r30; f32 temp_f31; @@ -370,13 +548,14 @@ void fn_1_3DBC(void) { } } -void fn_1_3E58(omObjData* arg0) { +void fn_1_3E58(omObjData *arg0) +{ s32 sp8[8]; - M427DllMapStruct* var_r26; - M427DllMapSubstruct3* var_r31; - ModelData* temp_r25; + M427DllMapStruct *var_r26; + M427DllMapSubstruct3 *var_r31; + ModelData *temp_r25; s16 var_r30; - M427DllMapStruct4* var_r29; + M427DllMapStruct4 *var_r29; s16 var_r28; s16 var_r27; @@ -388,22 +567,22 @@ void fn_1_3E58(omObjData* arg0) { temp_r25 = &Hu3DData[sp8[var_r30]]; temp_r25->unk_38[4] = temp_r25->unk_38[5] = temp_r25->unk_38[6] = temp_r25->unk_38[7] = -1; } - + for (var_r30 = 0; var_r30 < 2; var_r30++) { for (var_r27 = 0; var_r27 < 2; var_r27++) { - Hu3DModelKill(var_r31->unk180[var_r30][var_r27].unk0); + Hu3DModelKill(var_r31->unk17E[var_r30][var_r27].unk2); } } for (var_r30 = 0; var_r30 < 2; var_r30++) { for (var_r27 = 0; var_r27 < 2; var_r27++) { - Hu3DModelKill(var_r31->unkBA[var_r30][var_r27].unk0); + Hu3DModelKill(var_r31->unkB8[var_r30][var_r27].unk2); } } - HuSprAnimKill(var_r31->unkAC->unk28); + HuSprAnimKill(var_r31->unkAC->unk_28); Hu3DModelKill(var_r31->unk1A); Hu3DModelKill(var_r31->unk1C); - HuMemDirectFree(var_r31->unk98); - var_r31->unk98 = NULL; + HuMemDirectFree(var_r31->unk94.unk4); + var_r31->unk94.unk4 = NULL; fn_1_DB80(lbl_1_bss_EC[var_r28]); fn_1_DB80(lbl_1_bss_E8[var_r28]); @@ -442,13 +621,14 @@ void fn_1_3E58(omObjData* arg0) { arg0->func = fn_1_4218; } -void fn_1_4218(omObjData* arg0) { +void fn_1_4218(omObjData *arg0) +{ f32 var_f31; f32 temp_f30; f32 var_f29; - M427DllMapStruct5* var_r31; + M427DllMapStruct5 *var_r31; s16 var_r30; - M427DllMapStruct4* var_r29; + M427DllMapStruct4 *var_r29; s32 temp_r28; var_r29 = &lbl_1_bss_98; @@ -462,7 +642,7 @@ void fn_1_4218(omObjData* arg0) { fn_1_44F4(var_f31, 0.0f, temp_f30, var_f29, 0.0f); } } - + for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) { if (-1.0f != var_r31->unk10) { var_r31->unkC += 20.0f; @@ -474,14 +654,16 @@ void fn_1_4218(omObjData* arg0) { } } -void fn_1_44F4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { - M427DllMapStruct5* var_r31; +void fn_1_44F4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) +{ + M427DllMapStruct5 *var_r31; s16 var_r30; var_r31 = &lbl_1_bss_E4[0]; - + for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) { - if (-1.0f == var_r31->unk10) break; + if (-1.0f == var_r31->unk10) + break; } if (var_r30 != 0x10) { var_r31->unk0 = arg0; @@ -494,18 +676,19 @@ void fn_1_44F4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { f32 lbl_1_data_F4 = 450.0f; -f32 fn_1_4570(Vec* arg0) { +f32 fn_1_4570(Vec *arg0) +{ f32 temp_f31; f32 temp_f30; f32 var_f28; f32 var_f27; f32 var_f23; - M427DllMapStruct5* var_r31; + M427DllMapStruct5 *var_r31; s16 var_r30; var_r31 = &lbl_1_bss_E4[0]; var_f27 = 0.0f; - + for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) { if (-1.0f != var_r31->unk10) { temp_f31 = arg0->x - var_r31->unk0; @@ -527,7 +710,8 @@ f32 fn_1_4570(Vec* arg0) { return var_f27; } -void fn_1_48EC(ModelData* arg0, Mtx arg1) { +void fn_1_48EC(ModelData *arg0, Mtx arg1) +{ Vec sp3C; Vec sp30; Vec sp24; @@ -548,7 +732,7 @@ void fn_1_48EC(ModelData* arg0, Mtx arg1) { CenterM->x = -CenterM->x; CenterM->y = -CenterM->y; CenterM->z = CenterM->z; - CRotM->x = 180.0f + CRotM->x; + CRotM->x = 180.0f + CRotM->x; CRotM->y = 180.0f + -CRotM->y; CRotM->z = CRotM->z; *CZoomM = *CZoomM; @@ -574,7 +758,8 @@ void fn_1_48EC(ModelData* arg0, Mtx arg1) { *CZoomM = temp_f29; } -void fn_1_4D7C(ModelData* arg0, Mtx arg1) { +void fn_1_4D7C(ModelData *arg0, Mtx arg1) +{ Vec sp24; Vec sp18; Vec spC; @@ -602,7 +787,8 @@ void fn_1_4D7C(ModelData* arg0, Mtx arg1) { } } -void fn_1_50A0(ModelData* arg0, Mtx arg1) { +void fn_1_50A0(ModelData *arg0, Mtx arg1) +{ if (lbl_1_bss_98.unk28) { GXSetTexCopySrc(0, 0, 0x280, 0x1E0); GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGB5A3, 0); @@ -610,20 +796,21 @@ void fn_1_50A0(ModelData* arg0, Mtx arg1) { } } -void fn_1_510C(s32 arg0, s16 arg1, s16 arg2) { +void fn_1_510C(s32 arg0, s16 arg1, s16 arg2) +{ s16 sp12; s16 sp10; s16 spE; s16 spC; s16 spA; s16 sp8; - M427DllMapStruct4* var_r31; - M427DllMapSubstruct5* var_r30; + M427DllMapStruct4 *var_r31; + M427DllMapSubstruct5 *var_r30; s16 var_r29; - ModelData* temp_r28; + ModelData *temp_r28; s16 var_r27; - M427DllMapSubstruct5* var_r26; - M427DllMapSubstruct5* var_r23; + M427DllMapSubstruct5 *var_r26; + M427DllMapSubstruct5 *var_r23; var_r31 = &lbl_1_bss_98; var_r29 = Hu3DHookFuncCreate(fn_1_618C); @@ -657,7 +844,7 @@ void fn_1_510C(s32 arg0, s16 arg1, s16 arg2) { DCFlushRange(var_r26, 0x20000); GXBeginDisplayList(var_r23, 0x20000); GXBegin(GX_QUADS, GX_VTXFMT0, (arg1 * arg2 * 4)); - + for (var_r29 = 0; var_r29 < arg2; var_r29++) { for (var_r27 = 0; var_r27 < arg1; var_r30++, var_r27++) { var_r30->unk0 = var_r27 + var_r29 * var_r31->unk16; @@ -689,7 +876,8 @@ void fn_1_510C(s32 arg0, s16 arg1, s16 arg2) { f32 lbl_1_data_F8 = -1.0f; -void fn_1_558C(M427DllMapStruct4* arg0) { +void fn_1_558C(M427DllMapStruct4 *arg0) +{ Mtx spAC; Mtx sp7C; Mtx sp4C; @@ -703,14 +891,14 @@ void fn_1_558C(M427DllMapStruct4* arg0) { f32 var_f26; f32 var_f25; f32 var_f20; - M427DllMapSubstruct5* var_r30; - Vec* var_r29; - Vec* var_r28; + M427DllMapSubstruct5 *var_r30; + Vec *var_r29; + Vec *var_r28; s16 var_r27; - M427DllMapStruct5* var_r26; - Vec2f* var_r25; + M427DllMapStruct5 *var_r26; + Vec2f *var_r25; s16 var_r24; - CameraData* var_r23; + CameraData *var_r23; s16 var_r22; var_r23 = &Hu3DCamera[0]; @@ -737,12 +925,12 @@ void fn_1_558C(M427DllMapStruct4* arg0) { sp2C.x = sp44.x; sp2C.y = (sp44.y - sp44.x) / (arg0->unk18 - 1); var_f25 = arg0->unk44; - + for (var_r27 = 0; var_r27 < arg0->unk18; var_r27++) { sp34.x = sp3C.x; sp34.y = (sp3C.y - sp3C.x) / (arg0->unk16 - 1); var_f26 = arg0->unk40; - + for (var_r24 = 0; var_r24 < arg0->unk16; var_r28++, var_r29++, var_r24++) { var_r28->x = sp34.x; var_r28->z = sp2C.x; @@ -763,7 +951,7 @@ void fn_1_558C(M427DllMapStruct4* arg0) { } var_r30 = arg0->unk1C; var_r24 = (arg0->unk16 - 1) * (arg0->unk18 - 1); - + for (var_r27 = 0; var_r27 < var_r24; var_r27++, var_r30++) { fn_1_C2C8(&arg0->unk4[var_r30->unk0], &arg0->unk4[var_r30->unk2], &arg0->unk4[var_r30->unk4], &var_r30->unk8); arg0->unkC[var_r30->unk0].x += var_r30->unk8.x; @@ -779,7 +967,7 @@ void fn_1_558C(M427DllMapStruct4* arg0) { arg0->unkC[var_r30->unk6].y += var_r30->unk8.y; arg0->unkC[var_r30->unk6].z += var_r30->unk8.z; } - + var_r29 = arg0->unkC; for (var_r27 = 0; var_r27 < arg0->unk14; var_r27++, var_r29++) { var_f20 = sqrtf((var_r29->x * var_r29->x) + (var_r29->y * var_r29->y) + (var_r29->z * var_r29->z)); @@ -792,7 +980,7 @@ void fn_1_558C(M427DllMapStruct4* arg0) { C_MTXLookAt(spAC, &var_r23->pos, &var_r23->up, &var_r23->target); GXGetProjectionv(&sp7C[0][0]); GXGetViewportv(&sp4C[0][0]); - + for (var_r27 = 0; var_r27 < arg0->unk14; var_r27++, var_r28++, var_r25++) { GXProject(var_r28->x, var_r28->y, var_r28->z, spAC, &sp7C[0][0], &sp4C[0][0], &sp28, &sp24, &sp20); var_r25->x = 0.0015625f * sp28; @@ -811,14 +999,15 @@ void fn_1_558C(M427DllMapStruct4* arg0) { PPCSync(); } -void fn_1_618C(ModelData* arg0, Mtx arg1) { +void fn_1_618C(ModelData *arg0, Mtx arg1) +{ Mtx sp64; Mtx sp34; GXTexObj sp14; GXColor spC; - M427DllMapStruct4* var_r31 = &lbl_1_bss_98; - AnimData** var_r30 = &lbl_1_bss_158.unk334; - + M427DllMapStruct4 *var_r31 = &lbl_1_bss_98; + M427DllMapStruct3Sub *var_r30 = &lbl_1_bss_158.unk334; + fn_1_558C(var_r31); GXLoadPosMtxImm(arg1, 0); GXClearVtxDesc(); @@ -837,7 +1026,7 @@ void fn_1_618C(ModelData* arg0, Mtx arg1) { GXInitTexObj(&sp14, var_r31->unk28, 0x280, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0); GXInitTexObjLOD(&sp14, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1); GXLoadTexObj(&sp14, GX_TEXMAP1); - HuSprTexLoad(*var_r30, 0, 2, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(var_r30->unk_00, 0, 2, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXSetNumTevStages(3); spC.r = 0; spC.g = 0x10; @@ -846,40 +1035,40 @@ void fn_1_618C(ModelData* arg0, Mtx arg1) { GXSetTevColor(GX_TEVREG2, spC); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ONE, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVREG0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVREG0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0); GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP1, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_TEXC, GX_CC_C0, GX_CC_A2, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVREG1); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG1); GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVREG1); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG1); GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD0, GX_TEXMAP1, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_C1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C2); - GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetNumIndStages(1); GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP2); GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0); GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); - PSMTXScale(sp64, -0.1f, 0.0f, 1.0f); + MTXScale(sp64, -0.1f, 0.0f, 1.0f); GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])(sp64), 0); GXSetNumTexGens(2); if (omPauseChk() == 0) { var_r31->unk38 += 0.001f; var_r31->unk3C += 0.0005f; } - PSMTXRotRad(sp64, 0x58, 1.5707964f); - PSMTXScale(sp34, 0.001f, 0.001f, 0.001f); - PSMTXConcat(sp64, sp34, sp64); + MTXRotRad(sp64, 0x58, 1.5707964f); + MTXScale(sp34, 0.001f, 0.001f, 0.001f); + MTXConcat(sp64, sp34, sp64); mtxTransCat(sp64, var_r31->unk38, var_r31->unk3C, 0.0f); GXLoadTexMtxImm(sp64, 0x1E, GX_MTX2x4); - GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, 0, 0x7D); - GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_POS, 0x1E, 0, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); - GXSetZMode(1, GX_LEQUAL, 1); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); GXSetZCompLoc(0); GXSetBlendMode(GX_BM_NONE, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); @@ -888,3 +1077,2081 @@ void fn_1_618C(ModelData* arg0, Mtx arg1) { GXSetTevDirect(GX_TEVSTAGE0); GXSetTevDirect(GX_TEVSTAGE1); } + +s32 lbl_1_data_FC[0xC] = { + 0x3A0000, + 0x3A0001, + 0x3A0002, + 0x3A0003, + 0x3A0004, + 0x3A0005, + 0x3A0006, + 0x3A0007, + 0x3A0008, + 0x3A0009, + 0x3A000A, + 0x3A000B, +}; +s32 lbl_1_data_12C[2] = { 0x3A000C, 0x3A000D }; +s32 lbl_1_data_134[4] = { 0x3A000E, 0x3A000F, 0x3F800000, 0x01000000 }; + +void fn_1_6760(omObjData *object) +{ + s16 sp14[2][0x20]; + s16 sp10[2]; + s16 spC[2]; + s16 sp8[2]; + M427DllMapSubstruct3 *var_r31; + s16 var_r30; + M427DllMapUNKB8 *var_r29; + s16 var_r28; + M427DllMapUNK17E *var_r27; + s16 var_r26; + M427DllMapSubstruct3Sub *var_r25; + M427DllMapStruct3 *var_r24; + u16 var_r23; + + var_r24 = &lbl_1_bss_158; + Hu3DFogSet(3500.0f, 20000.0f, 0, 0, 0); + for (var_r28 = 0, var_r31 = &var_r24->unk4[0]; var_r28 < 2; var_r28++, var_r31++) { + var_r31->unk0 = var_r28; + sp10[var_r28] = 0; + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r31->unk178[var_r30] = 0; + } + for (var_r30 = 0; var_r30 < 0xB; var_r30++) { + var_r31->unk2[var_r30] = Hu3DModelCreateFile(lbl_1_data_FC[var_r30]); + var_r31->unk44[var_r30] = -1; + if (var_r30 < 0xA) { + Hu3DModelLayerSet(var_r31->unk2[var_r30], 2); + } + else { + Hu3DModelLayerSet(var_r31->unk2[var_r30], 5); + } + Hu3DModelAmbSet(var_r31->unk2[var_r30], 0.1f, 0.1f, 0.1f); + if (var_r28 == 0) { + Hu3DModelCameraSet(var_r31->unk2[var_r30], 1); + } + else { + Hu3DModelCameraSet(var_r31->unk2[var_r30], 2); + } + sp14[var_r28][sp10[var_r28]++] = var_r31->unk2[var_r30]; + } + var_r30 = Hu3DHookFuncCreate(fn_1_C154); + var_r31->unk1E = var_r30; + Hu3DModelLayerSet(var_r30, 4); + if (var_r28 == 0) { + Hu3DModelCameraSet(var_r30, 1); + } + else { + Hu3DModelCameraSet(var_r30, 2); + } + var_r30 = Hu3DHookFuncCreate(fn_1_C200); + var_r31->unk20 = var_r30; + Hu3DModelLayerSet(var_r30, 6); + if (var_r28 == 0) { + Hu3DModelCameraSet(var_r30, 1); + } + else { + Hu3DModelCameraSet(var_r30, 2); + } + for (var_r30 = 0; var_r30 < 2; var_r30++) { + var_r29 = var_r31->unkB8[var_r30]; + for (var_r26 = 0; var_r26 < 2; var_r26++, var_r29++) { + if ((var_r28 == 0) && (var_r26 == 0)) { + var_r29->unk2 = spC[var_r30] = Hu3DModelCreateFile(lbl_1_data_134[var_r30]); + } + else { + var_r29->unk2 = Hu3DModelLink(spC[var_r30]); + } + Hu3DModelAttrSet(var_r29->unk2, HU3D_ATTR_DISPOFF); + Hu3DModelLayerSet(var_r29->unk2, 2); + Hu3DModelAmbSet(var_r29->unk2, 0.0f, 0.0f, 0.0f); + if (var_r28 == 0) { + Hu3DModelCameraSet(var_r29->unk2, 1); + } + else { + Hu3DModelCameraSet(var_r29->unk2, 2); + } + sp14[var_r28][sp10[var_r28]++] = var_r29->unk2; + var_r29->unk6 = fn_1_95E8(0x3A0018, var_r28, 0, 0.0f, -400.0f, 700.0f, 800.0f, -5.0f); + fn_1_9958(var_r29->unk6, 1); + fn_1_99E4(var_r29->unk6, 0xFF, 0xFF, 0xFF, 0); + var_r29->unk4 = 2 * var_r30 + 4 + var_r26; + fn_1_C528(var_r29->unk2, var_r29->unk4, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0xFF, 0xA0, 0x60); + Hu3DLLightStaticSet(var_r29->unk2, var_r29->unk4, 1); + Hu3DLLightPointSet(var_r29->unk2, var_r29->unk4, 1.0f, 0.6f, 3); + } + } + for (var_r30 = 0; var_r30 < 2; var_r30++) { + var_r27 = var_r31->unk17E[var_r30]; + for (var_r26 = 0; var_r26 < 2; var_r26++, var_r27++) { + if ((var_r28 == 0) && (var_r26 == 0)) { + var_r27->unk2 = sp8[var_r30] = Hu3DModelCreateFile(lbl_1_data_12C[var_r30]); + } + else { + var_r27->unk2 = Hu3DModelLink(sp8[var_r30]); + } + Hu3DModelAttrSet(var_r27->unk2, HU3D_ATTR_DISPOFF); + Hu3DModelLayerSet(var_r27->unk2, 2); + Hu3DModelAmbSet(var_r27->unk2, 0.0f, 0.0f, 0.0f); + if (var_r28 == 0) { + Hu3DModelCameraSet(var_r27->unk2, 1); + } + else { + Hu3DModelCameraSet(var_r27->unk2, 2); + } + sp14[var_r28][sp10[var_r28]++] = var_r27->unk2; + } + } + for (var_r30 = 0; var_r30 < 4; var_r30++) { + var_r31->unk34[var_r30] = fn_1_C41C(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0xFF, 0xFF, 0xFF); + var_r31->unk24[var_r30] = -1.0f; + } + } + for (var_r28 = 0, var_r31 = var_r24->unk4; var_r28 < 2; var_r28++, var_r31++) { + var_r31->unk5C = Hu3DLLightCreate(var_r31->unk2[0], 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0xFA, 0xF0, 0xD2); + Hu3DLLightSpotSet(var_r31->unk2[0], var_r31->unk5C, 37.5f, 4); + Hu3DLLightStaticSet(var_r31->unk2[0], var_r31->unk5C, 1); + var_r31->unk78.x = 0.0f; + var_r31->unk78.y = 0.0f; + var_r31->unk78.z = 0.0f; + var_r31->unk84.x = 0.0f; + var_r31->unk84.y = 0.0f; + var_r31->unk84.z = 0.0f; + var_r31->unk90 = 0.0f; + } + fn_1_93EC(0x3A0016, 0x3A0014, 2000.0f, 6000.0f, 4.0f, 9.0f); + for (var_r28 = 0, var_r31 = var_r24->unk4; var_r28 < 2; var_r28++, var_r31++) { + var_r31->unkB0[0] = fn_1_95E8(0x3A0015, var_r28, 0.0f, 0.0f, -900.0f, 500.0f, 700.0f, -10.0f); + var_r25 = &var_r31->unk94; + var_r25->unk0 = var_r28; + var_r25->unk8 = GXGetTexBufferSize(0x140, 0x1E0, 5, 0, 0); + var_r25->unk4 = HuMemDirectMalloc(HEAP_DATA, var_r25->unk8); + var_r30 = Hu3DHookFuncCreate(fn_1_A148); + var_r31->unk1C = var_r30; + Hu3DModelCameraSet(var_r30, var_r28 ? 2 : 1); + Hu3DModelLayerSet(var_r30, 1); + Hu3DData[var_r30].unk_120 = var_r25; + var_r31->unk1A = fn_1_A1F4(0x3A0013, 0xA, 0x1E, var_r28, 6000.0f, lbl_1_bss_554, lbl_1_bss_558); + fn_1_C528(var_r31->unk1A, 1, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0xC8, 0xF0, 0xA0); + Hu3DLLightStaticSet(var_r31->unk1A, 1, 1); + Hu3DLLightPointSet(var_r31->unk1A, 1, 125.0f, 0.5f, 3); + fn_1_C528(var_r31->unk1A, 2, 0.0f, -500.0f, -23500.0f, 0.0f, 0.0f, 0.0f, 0xFA, 0xF0, 0xD2); + Hu3DLLightStaticSet(var_r31->unk1A, 2, 1); + Hu3DLLightPointSet(var_r31->unk1A, 2, 800.0f, 0.5f, 3); + sp14[var_r28][sp10[var_r28]++] = var_r31->unk1A; + fn_1_9318(sp14[var_r28], sp10[var_r28]); + } + object->func = fn_1_72E4; +} + +void fn_1_72E4(omObjData *object) +{ + float var_f31; + M427DllMapStruct2 *var_r31; + s16 var_r30; + + if (fn_1_1788() == 7) { + object->func = fn_1_3E58; + } + fn_1_73BC(); + fn_1_7C34(); + fn_1_7F38(); + fn_1_8F90(object); + fn_1_9240(); + for (var_r31 = lbl_1_bss_F8, var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) { + if (var_r31->unk0 != -1) { + var_f31 = Hu3DMotionMaxTimeGet(var_r31->unk2); + if (Hu3DMotionTimeGet(var_r31->unk2) >= var_f31) { + var_r31->unk0 = -1; + Hu3DModelAttrSet(var_r31->unk2, HU3D_ATTR_DISPOFF); + } + } + } +} + +void fn_1_73BC(void) +{ + float var_f31; + M427DllMapSubstruct3 *var_r31; + M427DllMapSubstruct6 *var_r30; + s16 var_r29; + ModelData *var_r28; + s16 var_r27; + + for (var_r27 = 0, var_r31 = lbl_1_bss_158.unk4; var_r27 < 2; var_r27++, var_r31++) { + for (var_r29 = 0; var_r29 < 0xA; var_r29++) { + var_r28 = &Hu3DData[var_r31->unk2[var_r29]]; + var_r30 = fn_1_DC0C(lbl_1_bss_E8[var_r31->unk0], var_r31->unk3C[var_r31->unk44[var_r29]]); + var_f31 = -2000.0f * var_r29; + if (((var_r31->unk84.z - 25000.0f) < var_f31) && ((3000.0f + var_r31->unk84.z) > var_f31)) { + if (var_r31->unk44[var_r29] == -1) { + fn_1_794C(var_r31, var_r29); + var_r28->attr &= 0xFFFFFFFE; + } + else { + if (var_r30) { + var_r30->unk_24 += 5.0f; + if (var_r30->unk_24 >= 360.0f) { + var_r30->unk_24 -= 360.0f; + } + var_r30->unk_48.x = var_r30->unk_48.y = var_r30->unk_48.z = 1.0 + (0.05000000074505806 * sind(var_r30->unk_24)); + } + var_r31->unk24[var_r31->unk44[var_r29]] += 5.0f; + if (var_r31->unk24[var_r31->unk44[var_r29]] >= 360.0f) { + var_r31->unk24[var_r31->unk44[var_r29]] -= 360.0f; + } + var_f31 = 50.0 * sind(var_r31->unk24[var_r31->unk44[var_r29]]); + var_f31 = var_f31; + Hu3DLLightPointSet(var_r31->unk2[var_r29], 1, 400.0f + var_f31, 0.5f, 3); + if (var_r29 == 0) { + var_r30 = fn_1_DC0C(lbl_1_bss_E8[var_r31->unk0], var_r31->unk5A); + if (var_r30->unk_24 >= 360.0f) { + var_r30->unk_24 -= 360.0f; + } + var_r30->unk_48.x = var_r30->unk_48.y = var_r30->unk_48.z = 1.0 + (0.05000000074505806 * sind(var_r30->unk_24)); + var_r31->unk24[1] += 5.0f; + if (var_r31->unk24[1] >= 360.0f) { + var_r31->unk24[1] -= 360.0f; + } + var_f31 = 50.0 * sind(var_r31->unk24[1]); + var_f31 = var_f31; + Hu3DLLightPointSet(var_r31->unk2[var_r29], 2, 400.0f + var_f31, 0.5f, 3); + } + } + } + else { + if (var_r31->unk44[var_r29] != -1) { + if (var_r30) { + var_r30->unk_62 = 0; + } + var_r28->unk_38[1] = -1; + var_r31->unk24[var_r31->unk44[var_r29]] = -1.0f; + var_r31->unk44[var_r29] = -1; + if (var_r29 == 0) { + var_r30 = fn_1_DC0C(lbl_1_bss_E8[var_r31->unk0], var_r31->unk5A); + var_r30->unk_62 = 0; + var_r28->unk_38[2] = -1; + var_r31->unk24[1] = -1.0f; + } + } + var_r28->attr |= 1; + } + } + } +} + +Vec lbl_1_data_144[0xC] = { + { -670.0f, 400.0f, 1750.0f }, + { 930.0f, 400.0f, -1000.0f }, + { -930.0f, 400.0f, -3000.0f }, + { 230.0f, 400.0f, -5000.0f }, + { -1630.0f, 300.0f, -7000.0f }, + { 530.0f, 100.0f, -9000.0f }, + { -530.0f, 100.0f, -11000.0f }, + { 1630.0f, 100.0f, -13000.0f }, + { -230.0f, 0.0f, -15000.0f }, + { 930.0f, -200.0f, -17000.0f }, + { -930.0f, -200.0f, -19000.0f }, + { 930.0f, -200.0f, -21000.0f }, +}; + +void fn_1_794C(M427DllMapSubstruct3 *arg0, s16 arg1) +{ + Vec sp14; + s16 var_r30; + ModelData *var_r28; + + var_r28 = &Hu3DData[arg0->unk2[arg1]]; + { + Vec sp8 = { 0.0f, 0.0f, 0.0f }; + if (arg1 != 0xA) { + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (arg0->unk24[var_r30] == -1.0f) { + break; + } + } + if (var_r30 != 4) { + var_r28->unk_38[1] = arg0->unk34[var_r30]; + arg0->unk24[var_r30] = 0.0f; + arg0->unk44[arg1] = var_r30; + if (var_r28->unk_38[1] != -1) { + sp14.x = lbl_1_data_144[arg1 + 1].x; + sp14.y = lbl_1_data_144[arg1 + 1].y; + sp14.z = lbl_1_data_144[arg1 + 1].z; + Hu3DLLightPointSet(arg0->unk2[arg1], 1, 400.0f, 0.5f, 3); + Hu3DLLightPosSetV(arg0->unk2[arg1], 1, &sp14, &sp8); + } + arg0->unk3C[var_r30] = fn_1_D430(sp14.x, sp14.y, sp14.z, lbl_1_bss_E8[arg0->unk0]); + if (arg1 == 0) { + var_r30 = 1; + var_r28->unk_38[2] = arg0->unk34[var_r30]; + arg0->unk24[var_r30] = 0.0f; + sp14.x = lbl_1_data_144[0].x; + sp14.y = lbl_1_data_144[0].y; + sp14.z = lbl_1_data_144[0].z; + Hu3DLLightPointSet(arg0->unk2[0], 2, 400.0f, 0.5f, 3); + Hu3DLLightPosSetV(arg0->unk2[0], 2, &sp14, &sp8); + arg0->unk5A = fn_1_D430(sp14.x, sp14.y, sp14.z, lbl_1_bss_E8[arg0->unk0]); + } + } + } + } +} + +float lbl_1_data_1D4[2] = { 50.0f, 80.0f }; + +void fn_1_7C34(void) +{ + Vec sp14; + M427DllMapSubstruct3 *var_r31; + ModelData *var_r30; + s16 var_r29; + s16 var_r28; + M427DllMapUNK17E *var_r27; + M427DllMapSubstruct *var_r26; + s16 var_r25; + + for (var_r26 = lbl_1_bss_158.unk3A0, var_r29 = 0; var_r29 < 5; var_r29++, var_r26++) { + for (var_r28 = 0, var_r31 = lbl_1_bss_158.unk4; var_r28 < 2; var_r28++, var_r31++) { + if ((var_r31->unk18E[var_r29] == 0) && ((var_r31->unk84.z - 7000.0f) < var_r26->unk4.z) + && ((1000.0f + var_r31->unk84.z) > var_r26->unk4.z)) { + fn_1_7E60(var_r29, var_r31); + } + } + } + for (var_r29 = 0, var_r31 = lbl_1_bss_158.unk4; var_r29 < 2; var_r29++, var_r31++) { + for (var_r28 = 0; var_r28 < 2; var_r28++) { + var_r27 = var_r31->unk17E[var_r28]; + for (var_r25 = 0; var_r25 < 2; var_r25++, var_r27++) { + var_r30 = &Hu3DData[var_r27->unk2]; + if ((var_r30->attr & 1) == 0) { + if (((var_r31->unk84.z - 7000.0f) > var_r30->pos.z) || ((1000.0f + var_r31->unk84.z) < var_r30->pos.z)) { + var_r30->attr |= 1; + var_r31->unk18E[var_r27->unk0] = 0; + } + else { + sp14.x = var_r30->pos.x; + sp14.z = var_r30->pos.z; + fn_1_15FD0(sp14, lbl_1_data_1D4[var_r28], 0, 1, var_r31->unk0); + } + } + } + } + } +} + +void fn_1_7E60(s16 arg0, M427DllMapSubstruct3 *arg1) +{ + M427DllMapUNK17E *var_r31; + M427DllMapSubstruct *var_r30; + s16 var_r29; + ModelData *var_r28; + + var_r30 = &lbl_1_bss_158.unk3A0[arg0]; + var_r31 = arg1->unk17E[var_r30->unk0]; + for (var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) { + var_r28 = &Hu3DData[var_r31->unk2]; + if ((var_r28->attr & 1) != 0) { + Hu3DModelAttrReset(var_r31->unk2, HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(var_r31->unk2, var_r30->unk4.x, var_r30->unk4.y, var_r30->unk4.z); + var_r31->unk0 = arg0; + arg1->unk18E[arg0] = 1; + return; + } + } +} + +void fn_1_7F38(void) +{ + Vec sp14; + float var_f31; + M427DllMapUNKB8 *var_r31; + M427DllMapSubstruct3 *var_r30; + ModelData *var_r29; + s16 var_r28; + s16 var_r27; + M427DllMapSubstruct2 *var_r26; + s16 var_r25; + s32 var_r24; + s32 var_r23; + + for (var_r26 = lbl_1_bss_158.unk34C, var_r27 = 0; var_r27 < 3; var_r27++, var_r26++) { + for (var_r28 = 0, var_r30 = lbl_1_bss_158.unk4; var_r28 < 2; var_r28++, var_r30++) { + if ((var_r30->unk178[var_r27] == 0) && ((var_r30->unk84.z - 7000.0f) < var_r26->unk4.z) + && ((1000.0f + var_r30->unk84.z) > var_r26->unk4.z)) { + fn_1_85D4(var_r27, var_r30); + } + } + } + for (var_r27 = 0, var_r30 = lbl_1_bss_158.unk4; var_r27 < 2; var_r27++, var_r30++) { + for (var_r28 = 0; var_r28 < 2; var_r28++) { + var_r31 = var_r30->unkB8[var_r28]; + for (var_r25 = 0; var_r25 < 2; var_r25++, var_r31++) { + var_r29 = &Hu3DData[var_r31->unk2]; + if ((var_r29->attr & 1) == 0) { + if (((var_r30->unk84.z - 7000.0f) > var_r29->pos.z) || ((1000.0f + var_r30->unk84.z) < var_r29->pos.z)) { + if (var_r31->unk8 == 0) { + fn_1_8E1C(1, var_r30, var_r31); + fn_1_9958(var_r31->unk6, 1); + var_r29->attr |= 1; + var_r31->unk8 = 0x63; + var_r30->unk178[var_r31->unk0] = 0; + } + else if (var_r31->unk8 != 2) { + var_r31->unkA = 0; + var_r31->unk8 = 2; + } + } + switch (var_r31->unk8) { + case 0: + if (++var_r31->unkA > var_r31->unk18) { + var_r31->unkA = 0; + var_r31->unkC = 0.0f; + var_r31->unk20 = ((rand8() << 8) | rand8()) % 361; + var_r31->unk24 = ((rand8() << 8) | rand8()) % 361; + var_r31->unk28 = 1.0f; + var_r31->unk2C = 0.0f; + var_r31->unk8++; + } + break; + case 1: + if (++var_r31->unkA > var_r31->unk1E) { + var_r31->unkA = 0; + var_r31->unk8++; + if (fn_1_1788() <= 4) { + if (var_r27 == 0) { + var_r24 = HuAudFXPlay(0x65A); + } + else { + var_r24 = HuAudFXPlay(0x65B); + } + var_r23 = var_r27 * 4 + var_r28 * 2 + var_r25; + lbl_1_bss_0[var_r23].unk0 = var_r24; + lbl_1_bss_0[var_r23].unk4 = 0x78; + } + } + var_r31->unk_14 = 0.1f; + fn_1_8768(var_r30, var_r31, var_r28, 0.2f, var_r31->unk_14); + break; + case 2: + if (++var_r31->unkA > var_r31->unk1A) { + var_r31->unkA = 0; + var_r31->unk8++; + } + if (var_r31->unk_14 < 1.0f) { + var_r31->unk_14 += 0.05f; + } + if (var_r31->unk_14 > 1.0f) { + var_r31->unk_14 = 1.0f; + } + var_r31->unk_10 += 40.0f; + var_r31->unkC += 0.05f; + fn_1_8768(var_r30, var_r31, var_r28, 1.0f, var_r31->unk_14); + break; + case 3: + var_r31->unkA++; + var_f31 = 1.0f - ((float)var_r31->unkA / var_r31->unk1C); + if (var_r31->unkA > var_r31->unk1C) { + var_r31->unkA = 0; + var_f31 = 0.0f; + var_r31->unk8 = 0; + } + var_r31->unk_10 = 400.0 * sind((90.0f * var_f31)); + var_r31->unkC = 1.2f * var_f31; + var_r31->unk_14 = var_f31; + fn_1_8768(var_r30, var_r31, var_r28, var_f31, var_r31->unk_14); + break; + } + sp14.x = var_r29->pos.x; + sp14.z = var_r29->pos.z; + fn_1_15FD0(sp14, 50.0f, 0, 1, var_r30->unk0); + } + } + } + } +} + +void fn_1_85D4(s16 arg0, M427DllMapSubstruct3 *arg1) +{ + float var_f31; + M427DllMapUNKB8 *var_r31; + M427DllMapSubstruct2 *var_r30; + s16 var_r29; + ModelData *var_r27; + + var_r30 = &lbl_1_bss_158.unk34C[arg0]; + var_r31 = arg1->unkB8[var_r30->unk0]; + for (var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) { + var_r27 = &Hu3DData[var_r31->unk2]; + if ((var_r27->attr & 1) != 0) { + Hu3DModelAttrReset(var_r31->unk2, HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(var_r31->unk2, var_r30->unk4.x, var_r30->unk4.y, var_r30->unk4.z); + var_r31->unk8 = 0; + var_r31->unkA = 0; + var_r31->unk18 = var_r30->unk14[0]; + var_r31->unk1A = var_r30->unk14[1]; + var_r31->unk1C = var_r30->unk14[2]; + var_r31->unk1E = var_r30->unk14[3]; + var_r31->unk0 = arg0; + arg1->unk178[arg0] = 1; + fn_1_9A2C(var_r31->unk6, var_r30->unk4.x, var_r30->unk4.y, var_r30->unk4.z); + if (var_r30->unk0 == 0) { + var_f31 = 90.0f; + } + else { + var_f31 = 270.0f; + } + fn_1_9B14(var_r31->unk6, 0.0f, var_f31, 0.0f); + fn_1_999C(var_r31->unk6, 1); + fn_1_8E1C(0, arg1, var_r31); + return; + } + } +} + +float lbl_1_data_1DC[2] = { -1.0f, 1.0f }; +float lbl_1_data_1E4[2] = { 270.0f, 90.0f }; + +void fn_1_8768(M427DllMapSubstruct3 *var_r28, M427DllMapUNKB8 *var_r31, s16 var_r27, float var_f28, float var_f29) +{ + Vec sp50; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + float var_f31; + float var_f30; + ModelData *var_r30; + M427DllMapStruct *var_r29; + + var_r30 = &Hu3DData[var_r31->unk2]; + var_f31 = var_f28 * var_r31->unk28; + sp50.x = var_r30->pos.x + (60.0f * lbl_1_data_1DC[var_r27]); + sp50.y = 80.0f + var_r30->pos.y; + sp50.z = var_r30->pos.z; + if (var_r31->unk8 == 1) { + fn_1_C76C(0, sp50.x, sp50.y, sp50.z, 1, lbl_1_data_1E4[var_r27], var_f31, lbl_1_bss_EC[var_r28->unk0]); + return; + } + fn_1_C76C(1, sp50.x, sp50.y, sp50.z, 1, lbl_1_data_1E4[var_r27], var_f31, lbl_1_bss_EC[var_r28->unk0]); + if (var_r31->unk_10 > (400.0f * var_r31->unk28)) { + var_r31->unk_10 = 400.0f * var_r31->unk28; + } + else if (var_r31->unk_10 < 1.0f) { + var_r31->unk_10 = 1.0f; + } + var_r31->unk2C += 30.0f; + if (var_r31->unk2C >= 360.0f) { + var_r31->unk2C -= 360.0f; + } + sp50.x = var_r30->pos.x + (240.0f * lbl_1_data_1DC[var_r27]); + sp50.y = 100.0f + var_r30->pos.y; + sp50.z = var_r30->pos.z; + sp44.x = sp44.y = sp44.z = 0.0f; + var_f30 = var_r31->unk_10 + (var_f28 * (50.0 * sind(var_r31->unk2C))); + Hu3DLLightPointSet(var_r31->unk2, var_r31->unk4, var_f30, 0.5f, 3); + Hu3DLLightPosSetV(var_r31->unk2, var_r31->unk4, &sp50, &sp44); + var_r29 = &lbl_1_bss_F0[var_r31->unk6]; + var_r29->unk90 -= 0.0005f; + var_r29->unk8C += 0.005f; + var_r29->unk94 += 0.001f; + if (var_r31->unkC > 1.0f) { + var_r31->unkC = 1.0f; + } + else if (var_r31->unkC < 0.0f) { + var_r31->unkC = 0.0f; + } + fn_1_99E4(var_r31->unk6, 0xFF, 0xA0, 0x60, 255.0f * var_r31->unkC); + var_r31->unk20 += 2.0f; + var_r31->unk24 += (((rand8() << 8) | rand8()) % 5) + 4; + if (var_r31->unk20 >= 360.0f) { + var_r31->unk20 -= 360.0f; + } + if (var_r31->unk24 >= 360.0f) { + var_r31->unk24 -= 360.0f; + } + sp38.x = 1.0 + (0.009999999776482582 * sind(var_r31->unk24)); + sp38.z = var_r31->unk28 + (0.009999999776482582 * sind(var_r31->unk20)); + fn_1_9AA0(var_r31->unk6, sp38.x, 1.0f, sp38.z); + if (var_r27 == 0) { + sp2C.x = var_r30->pos.x - (700.0f * var_f31 * var_f29); + sp20.x = var_r30->pos.x - 50.0f; + } + else { + sp2C.x = 50.0f + var_r30->pos.x; + sp20.x = var_r30->pos.x + (700.0f * var_f31 * var_f29); + } + sp2C.z = var_r30->pos.z - 30.0f; + sp20.z = 30.0f + var_r30->pos.z; + fn_1_15F10(sp2C, sp20, 1, 1, var_r28->unk0); +} + +void fn_1_8E1C(u8 arg0, M427DllMapSubstruct3 *arg1, M427DllMapUNKB8 *arg2) +{ + s32 spC[8]; + s16 var_r30; + ModelData *var_r29; + M427DllMapSubstruct2 *var_r27; + s16 var_r26; + ModelData *var_r25; + s16 var_r24; + + var_r27 = &lbl_1_bss_158.unk34C[arg2->unk0]; + var_r25 = &Hu3DData[arg2->unk2]; + if (arg0 == 0) { + var_r26 = var_r25->unk_38[arg2->unk4]; + } + else { + var_r26 = -1; + } + var_r24 = fn_1_10FE8(arg1->unk0, spC); + for (var_r30 = 0; var_r30 < var_r24; var_r30++) { + var_r29 = &Hu3DData[spC[var_r30]]; + var_r29->unk_38[arg2->unk4] = var_r26; + } + var_r29 = &Hu3DData[arg1->unk1A]; + var_r29->unk_38[arg2->unk4] = var_r26; + for (var_r30 = 0; var_r30 < 2; var_r30++) { + if (var_r27->unk10[var_r30] != -1) { + var_r29 = &Hu3DData[arg1->unk2[var_r27->unk10[var_r30]]]; + var_r29->unk_38[arg2->unk4] = var_r26; + } + } +} + +void fn_1_8F90(omObjData *object) +{ + Vec sp14; + Vec sp8; + float var_f31; + float var_f30; + M427DllMapSubstruct3 *var_r31; + s16 var_r30; + M427DllMapStruct3 *var_r29; + + var_r29 = &lbl_1_bss_158; + for (var_r30 = 0, var_r31 = var_r29->unk4; var_r30 < 2; var_r30++, var_r31++) { + var_f31 = sind(var_r31->unk90); + var_f30 = cosd(var_r31->unk90); + var_r31->unk_60.x = var_r31->unk84.x - (25.0f * var_f31); + var_r31->unk_60.y = 100.0f + var_r31->unk84.y; + var_r31->unk_60.z = var_r31->unk84.z - (25.0f * var_f30); + var_r31->unk_6C.x = var_r31->unk_60.x - (50.0f * var_f31); + var_r31->unk_6C.y = var_r31->unk_60.y; + var_r31->unk_6C.z = var_r31->unk_60.z - (50.0f * var_f30); + Hu3DLLightPosSet(var_r31->unk2[0], var_r31->unk5C, var_r31->unk_60.x, var_r31->unk_60.y, var_r31->unk_60.z, 0.0f, 0.0f, 0.0f); + Hu3DLLightPosAimSetV(var_r31->unk2[0], var_r31->unk5C, &var_r31->unk_60, &var_r31->unk_6C); + fn_1_9A2C(var_r31->unkB0[0], var_r31->unk84.x, var_r31->unk84.y, var_r31->unk84.z); + fn_1_9B14(var_r31->unkB0[0], 0.0f, var_r31->unk90, 0.0f); + sp14.x = var_r31->unk84.x; + sp14.y = 100.0f + var_r31->unk84.y; + sp14.z = 50.0f + var_r31->unk84.z; + sp8.x = sp8.y = sp8.z = 0.0f; + Hu3DLLightPosSetV(var_r31->unk1A, 1, &sp14, &sp8); + } +} + +void fn_1_91E0(s16 arg0, float arg8, float arg9, float argA, float argB) +{ + M427DllMapSubstruct3 *var_r31; + + var_r31 = &lbl_1_bss_158.unk4[arg0]; + var_r31->unk84.x = arg8; + var_r31->unk84.y = arg9; + var_r31->unk84.z = argA; + var_r31->unk90 = argB; + if (var_r31->unkAC) { + var_r31->unkAC->unk_0C = 1500.0f + argA; + } +} + +void fn_1_9240(void) +{ + M427DllMapStruct *var_r31; + M427DllMapSubstruct3 *var_r30; + s16 var_r29; + s16 var_r28; + + for (var_r30 = lbl_1_bss_158.unk4, var_r28 = 0; var_r28 < 2; var_r28++, var_r30++) { + for (var_r29 = 0; var_r29 < 1; var_r29++) { + var_r31 = &lbl_1_bss_F0[var_r30->unkB0[var_r29]]; + var_r31->unk90 -= 0.0005f; + var_r31->unk8C += 0.0005f; + var_r31->unk94 += 0.0005f; + } + } +} + +void fn_1_9318(s16 *arg0, s16 arg1) +{ + s16 var_r31; + ModelData *var_r30; + ModelData *var_r29; + s16 var_r28; + + var_r30 = &Hu3DData[*arg0]; + for (var_r28 = 1; var_r28 < arg1; var_r28++) { + var_r29 = &Hu3DData[arg0[var_r28]]; + for (var_r31 = 0; var_r31 < 8; var_r31++) { + if (var_r30->unk_38[var_r31] != -1) { + var_r29->unk_38[var_r31] = var_r30->unk_38[var_r31]; + } + } + var_r29->attr |= 0x1000; + } +} + +void fn_1_93EC(s32 sp8, s32 spC, float var_f30, float var_f31, float sp10, float sp14) +{ + M427DllMapStruct3Sub *var_r31; + + var_r31 = &lbl_1_bss_158.unk334; + var_r31->unk_00 = HuSprAnimRead(HuDataReadNum(sp8, MEMORY_DEFAULT_NUM)); + var_r31->unk_04 = HuSprAnimRead(HuDataReadNum(spC, MEMORY_DEFAULT_NUM)); + var_r31->unk_08 = 0.5f * var_f30; + var_r31->unk_0C = 0.5f * var_f31; + var_r31->unk_10 = sp10 / var_f30; + var_r31->unk_14 = sp14 / var_f31; +} + +void fn_1_94BC(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, float arg8, Vec2f *arg4, s16 arg5) +{ + Mtx sp58; + Mtx sp28; + Vec sp1C; + Vec sp10; + M427DllMapStruct3Sub *var_r31; + s16 var_r28; + + var_r31 = &lbl_1_bss_158.unk334; + for (var_r28 = 0; var_r28 < arg5; var_r28++, arg2++, arg4++) { + MTXScale(sp58, arg3->x, arg3->y, arg3->z); + MTXRotRad(sp28, 0x59, MTXDegToRad(arg8)); + MTXConcat(sp58, sp28, sp58); + MTXMultVec(sp58, arg2, &sp1C); + sp10.x = var_r31->unk_08 + ((sp1C.x + arg1->x) - arg0->x); + sp10.z = var_r31->unk_0C + ((sp1C.z + arg1->z) - arg0->z); + arg4->x = sp10.x * var_r31->unk_10; + arg4->y = sp10.z * var_r31->unk_14; + } +} + +s16 fn_1_95E8(s32 arg0, s16 arg1, s16 arg2, float arg8, float arg9, float argA, float argB, float argC) +{ + M427DllMapStruct *var_r31; + s16 var_r30; + s16 var_r29; + void *var_r28; + void *var_r26; + + for (var_r31 = lbl_1_bss_F0, var_r29 = 0; var_r29 < 0x10; var_r29++, var_r31++) { + if (var_r31->unk2 == -1) { + break; + } + } + if (var_r29 == 0x10) { + return -1; + } + var_r31->unk4 = Hu3DHookFuncCreate(fn_1_9B88); + Hu3DModelCameraSet(var_r31->unk4, arg1 ? 2 : 1); + Hu3DModelLayerSet(var_r31->unk4, arg2); + Hu3DData[var_r31->unk4].unk_120 = var_r31; + Hu3DModelPosSet(var_r31->unk4, 0.0f, 0.0f, -2000.0f); + var_r31->unk0 = 0; + var_r31->unk2 = arg1; + var_r31->unk7C.r = var_r31->unk7C.g = var_r31->unk7C.b = var_r31->unk7C.a = 0xFF; + var_r31->unk88 = var_r31->unk8C = 0.0f; + var_r31->unk90 = var_r31->unk94 = 0.0f; + var_r31->unk8 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM)); + fn_1_C2AC(&var_r31->unkC, arg8 - argA, argC, arg9 - argB); + fn_1_C2BC(&var_r31->unk3C, 0.0f, 0.0f); + fn_1_C2AC(&var_r31->unk18, arg8 + argA, argC, arg9 - argB); + fn_1_C2BC(&var_r31->unk44, 1.0f, 0.0f); + fn_1_C2AC(&var_r31->unk24, arg8 + argA, argC, arg9 + argB); + fn_1_C2BC(&var_r31->unk4C, 1.0f, 1.0f); + fn_1_C2AC(&var_r31->unk30, arg8 - argA, argC, arg9 + argB); + fn_1_C2BC(&var_r31->unk54, 0.0f, 1.0f); + DCFlushRangeNoSync(&var_r31->unkC, 0x30); + DCFlushRangeNoSync(&var_r31->unk3C, 0x20); + PPCSync(); + var_r28 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1000, MEMORY_DEFAULT_NUM); + var_r26 = var_r28; + DCFlushRange(var_r28, 0x1000); + GXBeginDisplayList(var_r26, 0x1000); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + for (var_r30 = 0; var_r30 < 4; var_r30++) { + GXPosition1x16(var_r30); + GXPosition1x16(var_r30); + GXPosition1x16(var_r30); + } + var_r31->unk84 = GXEndDisplayList(); + var_r31->unk80 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk84, MEMORY_DEFAULT_NUM); + memcpy(var_r31->unk80, var_r28, var_r31->unk84); + DCFlushRange(var_r31->unk80, var_r31->unk84); + HuMemDirectFree(var_r28); + return var_r29; +} + +void fn_1_9958(s16 arg0, u8 arg1) +{ + M427DllMapStruct *var_r31; + + if (arg0 != -1) { + var_r31 = &lbl_1_bss_F0[arg0]; + var_r31->unk0 |= arg1; + } +} + +void fn_1_999C(s16 arg0, u8 arg1) +{ + M427DllMapStruct *var_r31; + + if (arg0 != -1) { + var_r31 = &lbl_1_bss_F0[arg0]; + var_r31->unk0 &= ~arg1; + } +} + +void fn_1_99E4(s16 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) +{ + M427DllMapStruct *var_r31; + + if (arg0 != -1) { + var_r31 = &lbl_1_bss_F0[arg0]; + var_r31->unk7C.r = arg1; + var_r31->unk7C.g = arg2; + var_r31->unk7C.b = arg3; + var_r31->unk7C.a = arg4; + } +} + +void fn_1_9A2C(s16 arg0, float arg8, float arg9, float argA) +{ + M427DllMapStruct *var_r31; + + if (arg0 != -1) { + var_r31 = &lbl_1_bss_F0[arg0]; + Hu3DModelPosSet(var_r31->unk4, arg8, arg9, argA); + } +} + +void fn_1_9AA0(s16 arg0, float arg8, float arg9, float argA) +{ + M427DllMapStruct *var_r31; + + if (arg0 != -1) { + var_r31 = &lbl_1_bss_F0[arg0]; + Hu3DModelScaleSet(var_r31->unk4, arg8, arg9, argA); + } +} + +void fn_1_9B14(s16 arg0, float arg8, float arg9, float argA) +{ + M427DllMapStruct *var_r31; + + if (arg0 != -1) { + var_r31 = &lbl_1_bss_F0[arg0]; + Hu3DModelRotSet(var_r31->unk4, arg8, arg9, argA); + } +} + +void fn_1_9B88(ModelData *model, Mtx matrix) +{ + Mtx sp88; + M427DllMapStruct *var_r31; + M427DllMapSubstruct3 *var_r27; + M427DllMapStruct3Sub *var_r26; + + var_r31 = model->unk_120; + var_r27 = &lbl_1_bss_158.unk4[var_r31->unk2]; + var_r26 = &lbl_1_bss_158.unk334; + if ((var_r31->unk0 & 1) == 0) { + fn_1_94BC(&var_r27->unk78, &model->pos, &var_r31->unkC, &model->scale, model->rot.y, var_r31->unk5C, 4); + DCFlushRangeNoSync(var_r31->unk5C, 4 * sizeof(Vec2f)); + PPCSync(); + GXLoadPosMtxImm(matrix, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_POS, &var_r31->unkC, sizeof(Vec)); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_TEX0, &var_r31->unk3C, sizeof(Vec2f)); + GXSetVtxDesc(GX_VA_TEX1, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_TEX1, var_r31->unk5C, sizeof(Vec2f)); + HuSprTexLoad(var_r31->unk8, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(var_r26->unk_04, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(var_r26->unk_00, 0, 2, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetNumTexGens(3); + MTXScale(sp88, 1.0f, 1.0f, 1.0f); + mtxTransCat(sp88, var_r31->unk88, var_r31->unk90, 0.0f); + GXLoadTexMtxImm(sp88, 0x1E, GX_MTX2x4); + MTXScale(sp88, 1.0f, 1.0f, 1.0f); + mtxTransCat(sp88, var_r31->unk8C, var_r31->unk94, 0.0f); + GXLoadTexMtxImm(sp88, 0x21, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, 0, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, 0x1E, 0, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX0, 0x21, 0, 0x7D); + GXSetNumTevStages(2); + GXSetTevColor(GX_TEVREG1, var_r31->unk7C); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_C1, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_A1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumIndStages(1); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD2, GX_TEXMAP2); + GXSetTevIndWarp(0, 0, 1, 0, 1); + MTXScale(sp88, 0.1f, 0.10000000149011612 * -sind(model->rot.y), 1.0f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])sp88, 0); + GXSetNumChans(0); + GXSetZMode(0, GX_LEQUAL, 0); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + GXCallDisplayList(var_r31->unk80, var_r31->unk84); + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); + } +} + +void fn_1_A148(ModelData *model, Mtx matrix) +{ + M427DllMapSubstruct3Sub *var_r31; + + var_r31 = model->unk_120; + if (var_r31->unk0 == 0) { + GXSetTexCopySrc(0, 0, 0x140, 0x1E0); + GXSetTexCopyDst(0x140, 0x1E0, GX_TF_RGB5A3, 0); + } + else { + GXSetTexCopySrc(0x140, 0, 0x140, 0x1E0); + GXSetTexCopyDst(0x140, 0x1E0, GX_TF_RGB5A3, 0); + } + GXCopyTex(var_r31->unk4, 1); + DCFlushRange(var_r31->unk4, var_r31->unk8); +} + +s16 fn_1_A1F4(s32 arg0, s16 arg1, s16 arg2, s16 arg3, float arg8, Vec *arg4, Vec *arg5) +{ + float var_f31; + float var_f30; + float var_f29; + float var_f28; + M427DllMapStruct6 *var_r31; + M427DllMapSubstruct5 *var_r30; + ModelData *var_r29; + s16 var_r28; + s16 var_r27; + Vec2f *var_r26; + void *var_r25; + M427DllMapStruct3 *var_r22; + u16 var_r21; + s16 var_r19; + void *var_r18; + + var_r22 = &lbl_1_bss_158; + var_r28 = Hu3DHookFuncCreate(fn_1_B3CC); + var_r19 = var_r28; + Hu3DModelCameraSet(var_r28, arg3 ? 2 : 1); + Hu3DModelLayerSet(var_r28, 5); + var_r29 = &Hu3DData[var_r28]; + var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M427DllMapStruct6), var_r29->unk_48); + var_r29->unk_120 = var_r31; + var_r22->unk4[arg3].unkAC = var_r31; + var_r31->unk_00 = arg3; + var_r31->unk_0C = 0.0f; + var_r31->unk_10 = arg8; + var_r31->unk_04 = arg4; + var_r31->unk_08 = arg5; + var_r31->unk_14 = var_r31->unk_18 = 0.0f; + var_r31->unk_1C = var_r31->unk_20 = 0.0f; + var_r31->unk_4C = var_r31->unk_50 = 0.0f; + var_r31->unk_54 = 120.0f; + var_r31->unk_58 = 72.0f; + var_r31->unk_5C = 10.0f; + var_r31->unk_60 = 10.0f; + var_r31->unk_28 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM)); + var_r31->unk_3A = arg1 + 1; + var_r31->unk_3C = arg2 + 1; + var_r31->unk_38 = var_r31->unk_3A * var_r31->unk_3C; + var_r31->unk_2C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_38 * sizeof(Vec), var_r29->unk_48); + var_r26 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_38 * sizeof(Vec2f), var_r29->unk_48); + var_r31->unk_30 = var_r26; + var_r31->unk_34 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_38 * sizeof(Vec), var_r29->unk_48); + var_r30 = HuMemDirectMallocNum(HEAP_DATA, arg2 * (arg1 * sizeof(M427DllMapSubstruct5)), var_r29->unk_48); + var_r31->unk_48 = var_r30; + var_r25 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, var_r29->unk_48); + var_r18 = var_r25; + DCFlushRange(var_r25, 0x20000); + GXBeginDisplayList(var_r18, 0x20000); + GXBegin(GX_QUADS, GX_VTXFMT0, arg1 * arg2 * 4); + for (var_r28 = 0; var_r28 < arg2; var_r28++) { + for (var_r27 = 0; var_r27 < arg1; var_r27++) { + var_r30->unk0 = var_r27 + (var_r28 * var_r31->unk_3A); + var_r30->unk2 = var_r27 + var_r28 * var_r31->unk_3A + 1; + var_r30->unk4 = var_r27 + ((var_r28 + 1) * var_r31->unk_3A) + 1; + var_r30->unk6 = var_r27 + ((var_r28 + 1) * var_r31->unk_3A); + GXPosition1x16(var_r30->unk0); + GXPosition1x16(var_r30->unk0); + GXPosition1x16(var_r30->unk0); + GXPosition1x16(var_r30->unk2); + GXPosition1x16(var_r30->unk2); + GXPosition1x16(var_r30->unk2); + GXPosition1x16(var_r30->unk4); + GXPosition1x16(var_r30->unk4); + GXPosition1x16(var_r30->unk4); + GXPosition1x16(var_r30->unk6); + GXPosition1x16(var_r30->unk6); + GXPosition1x16(var_r30->unk6); + fn_1_C2C8(&var_r31->unk_2C[var_r30->unk0], &var_r31->unk_2C[var_r30->unk2], &var_r31->unk_2C[var_r30->unk4], &var_r30->unk8); + var_r30++; + } + } + var_r31->unk_44 = GXEndDisplayList(); + var_r31->unk_40 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_44, var_r29->unk_48); + memcpy(var_r31->unk_40, var_r25, var_r31->unk_44); + DCFlushRange(var_r31->unk_40, var_r31->unk_44); + HuMemDirectFree(var_r25); + fn_1_A7F8(var_r31); + var_f29 = 3.0f / (var_r31->unk_3A - 1); + var_f28 = 5.0f / (var_r31->unk_3C - 1); + var_f30 = 0.0f; + for (var_r28 = 0; var_r28 < var_r31->unk_3C; var_r28++) { + var_f31 = 0.0f; + for (var_r27 = 0; var_r27 < var_r31->unk_3A; var_r27++) { + var_r26->x = var_f31; + var_r26->y = var_f30; + var_f31 += var_f29; + var_r26++; + } + var_f30 += var_f28; + } + DCFlushRangeNoSync(var_r31->unk_30, var_r31->unk_38 * 8); + PPCSync(); + return var_r19; +} + +void fn_1_A7F8(M427DllMapStruct6 *var_r31) +{ + Vec sp1C; + float sp14[2]; + float spC[2]; + float var_f29; + float var_f28; + float var_f27; + M427DllMapSubstruct5 *var_r30; + Vec *var_r29; + s16 var_r28; + Vec *var_r27; + s16 var_r26; + s16 var_r25; + + if (omPauseChk() == 0) { + var_r31->unk_4C += 1.0f; + var_r31->unk_50 += 1.5f; + } + if (var_r31->unk_4C >= 360.0f) { + var_r31->unk_4C -= 360.0f; + } + if (var_r31->unk_50 >= 360.0f) { + var_r31->unk_50 -= 360.0f; + } + var_r27 = var_r31->unk_2C; + var_r29 = var_r31->unk_34; + spC[0] = var_r31->unk_0C - var_r31->unk_10; + spC[1] = var_r31->unk_10 / (var_r31->unk_3C - 1); + var_f28 = var_r31->unk_50; + for (var_r28 = 0; var_r28 < var_r31->unk_3C; var_r28++) { + fn_1_B194(var_r31, spC[0], &sp1C); + sp14[0] = sp1C.x; + sp14[1] = (sp1C.y - sp1C.x) / (var_r31->unk_3A - 1); + var_f29 = var_r31->unk_4C; + for (var_r26 = 0; var_r26 < var_r31->unk_3A; var_r26++) { + var_r27->x = sp14[0]; + var_r27->y = sp1C.z + (var_r31->unk_5C * sind(var_f29)) + var_r31->unk_60 * sind(var_f28); + var_r27->z = spC[0]; + sp14[0] += sp14[1]; + var_r27++; + var_r29->x = var_r29->y = var_r29->z = 0.0f; + var_r29++; + var_f29 += var_r31->unk_54; + if (var_f29 >= 360.0f) { + var_f29 -= 360.0f; + } + } + spC[0] += spC[1]; + var_f28 += var_r31->unk_58; + if (var_f28 >= 360.0f) { + var_f28 -= 360.0f; + } + } + var_r30 = var_r31->unk_48; + var_r25 = (var_r31->unk_3A - 1) * (var_r31->unk_3C - 1); + for (var_r28 = 0; var_r28 < var_r25; var_r28++) { + fn_1_C2C8(&var_r31->unk_2C[var_r30->unk0], &var_r31->unk_2C[var_r30->unk2], &var_r31->unk_2C[var_r30->unk4], &var_r30->unk8); + var_r31->unk_34[var_r30->unk0].x += var_r30->unk8.x; + var_r31->unk_34[var_r30->unk0].y += var_r30->unk8.y; + var_r31->unk_34[var_r30->unk0].z += var_r30->unk8.z; + + var_r31->unk_34[var_r30->unk2].x += var_r30->unk8.x; + var_r31->unk_34[var_r30->unk2].y += var_r30->unk8.y; + var_r31->unk_34[var_r30->unk2].z += var_r30->unk8.z; + + var_r31->unk_34[var_r30->unk4].x += var_r30->unk8.x; + var_r31->unk_34[var_r30->unk4].y += var_r30->unk8.y; + var_r31->unk_34[var_r30->unk4].z += var_r30->unk8.z; + + var_r31->unk_34[var_r30->unk6].x += var_r30->unk8.x; + var_r31->unk_34[var_r30->unk6].y += var_r30->unk8.y; + var_r31->unk_34[var_r30->unk6].z += var_r30->unk8.z; + var_r30++; + } + var_r29 = var_r31->unk_34; + for (var_r28 = 0; var_r28 < var_r31->unk_38; var_r28++) { + var_f27 = sqrtf((var_r29->z * var_r29->z) + ((var_r29->x * var_r29->x) + (var_r29->y * var_r29->y))); + var_r29->x /= var_f27; + var_r29->y /= var_f27; + var_r29->z /= var_f27; + var_r29++; + } + DCFlushRangeNoSync(var_r31->unk_2C, var_r31->unk_38 * sizeof(Vec)); + DCFlushRangeNoSync(var_r31->unk_34, var_r31->unk_38 * sizeof(Vec)); + PPCSync(); +} + +s16 lbl_1_data_1EC[2] = { 0, 0 }; + +float fn_1_AE78(s16 arg0, float arg8, float arg9) +{ + float sp8[2]; + float var_f31; + float var_f30; + Vec *var_r31; + s16 var_r30; + M427DllMapSubstruct3 *var_r29; + Vec *var_r28; + s16 var_r27; + s16 var_r26; + + var_r29 = &lbl_1_bss_158.unk4[arg0]; + if (lbl_1_bss_158.unk0 != 0) { + if (lbl_1_bss_158.unk0 == 1) { + lbl_1_data_1EC[arg0] = 0; + lbl_1_bss_158.unk0 = 2; + } + if (!lbl_1_bss_98.unk4) { + return 0.0f; + } + var_r28 = lbl_1_bss_98.unk4; + var_r31 = &lbl_1_bss_98.unk4[lbl_1_data_1EC[arg0]]; + var_r27 = lbl_1_bss_98.unk14; + var_r26 = lbl_1_bss_98.unk16; + for (var_r30 = lbl_1_data_1EC[arg0]; var_r30 < var_r27; var_r30++, var_r31++) { + if (arg9 >= var_r31->z && arg8 >= var_r31->x) { + break; + } + } + if (var_r30 == var_r27) { + return 0.0f; + } + } + else { + if (!var_r29->unkAC) { + return 0.0f; + } + var_r28 = var_r29->unkAC->unk_2C; + var_r31 = &var_r29->unkAC->unk_2C[lbl_1_data_1EC[arg0]]; + var_r27 = var_r29->unkAC->unk_38; + var_r26 = var_r29->unkAC->unk_3A; + for (var_r30 = lbl_1_data_1EC[arg0]; var_r30 < var_r27; var_r30++, var_r31++) { + if (arg9 <= var_r31->z && arg8 <= var_r31->x) { + break; + } + } + if (var_r30 == var_r27) { + return 0.0f; + } + } + sp8[0] = var_r31->x - var_r28[var_r30 - 1].x; + sp8[1] = arg8 - var_r28[var_r30 - 1].x; + var_f30 = sp8[1] / sp8[0]; + var_f31 = var_r31->y - var_r28[var_r30 - 1].y; + var_f31 = var_r28[var_r30 - 1].y + (var_f31 * var_f30); + lbl_1_data_1EC[arg0] = var_r30 - (var_r26 * 2); + return 20.0f + var_f31; +} + +void fn_1_B194(M427DllMapStruct6 *arg0, float arg8, Vec *arg1) +{ + float sp10[2]; + float sp8[2]; + float var_f31; + s16 var_r31; + + for (var_r31 = lbl_1_bss_580; var_r31 != 0;) { + var_r31--; + if (arg0->unk_04[var_r31].z >= arg8) { + if (var_r31 == (lbl_1_bss_580 - 1)) { + arg1->x = arg0->unk_08[var_r31].x; + arg1->y = arg0->unk_04[var_r31].x; + arg1->z = arg0->unk_04[var_r31].y; + } + else { + var_f31 = (arg0->unk_04[var_r31].z - arg8) / (arg0->unk_04[var_r31].z - arg0->unk_04[var_r31 + 1].z); + sp10[0] = arg0->unk_08[var_r31].x - 100.0f; + sp10[1] = arg0->unk_08[var_r31 + 1].x - 100.0f; + sp8[0] = 100.0f + arg0->unk_04[var_r31].x; + sp8[1] = 100.0f + arg0->unk_04[var_r31 + 1].x; + arg1->x = sp10[0] + (var_f31 * (sp10[1] - sp10[0])); + arg1->y = sp8[0] + (var_f31 * (sp8[1] - sp8[0])); + arg1->z = arg0->unk_04[var_r31].y + (var_f31 * (arg0->unk_04[var_r31 + 1].y - arg0->unk_04[var_r31].y)); + } + return; + } + } +} + +void fn_1_B3CC(ModelData *model, Mtx matrix) +{ + Mtx sp154; + Mtx sp124; + Mtx spF4; + Mtx spC4; + GXTexObj sp44; + Vec2f sp18; + GXColor sp14; + float var_f31; + M427DllMapStruct6 *var_r31; + M427DllMapSubstruct3 *var_r30; + M427DllMapSubstruct3Sub *var_r27; + M427DllMapStruct3Sub *var_r24; + s16 var_r21; + + var_r31 = model->unk_120; + var_r30 = &lbl_1_bss_158.unk4[var_r31->unk_00]; + var_r27 = &var_r30->unk94; + var_r24 = &lbl_1_bss_158.unk334; + fn_1_A7F8(var_r31); + GXLoadPosMtxImm(matrix, 0); + MTXInvXpose(matrix, spF4); + GXLoadNrmMtxImm(spF4, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, var_r31->unk_2C, sizeof(Vec)); + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); + GXSetArray(GX_VA_NRM, var_r31->unk_34, sizeof(Vec)); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_TEX0, var_r31->unk_30, 8); + if (var_r31->unk_00 == 0) { + GXInitTexObj(&sp44, var_r27->unk4, 0x140, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0); + } + else { + GXInitTexObj(&sp44, var_r27->unk4, 0x140, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0); + } + GXInitTexObjLOD(&sp44, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1); + GXLoadTexObj(&sp44, GX_TEXMAP0); + HuSprTexLoad(var_r31->unk_28, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + HuSprTexLoad(var_r24->unk_00, 0, 2, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetNumTevStages(3); + sp14.r = 0; + sp14.g = 0xB6; + sp14.b = 0xCC; + sp14.a = 0x40; + GXSetTevColor(GX_TEVREG2, sp14); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, GX_TRUE, GX_TEVREG0); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXA, GX_CC_C2, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG1); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG1); + GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_C1, GX_CC_RASC, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumIndStages(1); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD2, GX_TEXMAP2); + GXSetTevIndWarp(1, 0, 1, 0, 1); + MTXScale(spF4, -0.1f, 0.1f, 1.0f); + GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spF4, 0); + GXSetNumTexGens(3); + C_MTXLightPerspective(sp154, 45.0f, 0.6f, 0.5f, -0.5f, 0.5f, 0.5f); + MTXCopy(matrix, sp124); + MTXInverse(Hu3DCameraMtx, spF4); + MTXConcat(spF4, sp124, spF4); + MTXConcat(sp154, Hu3DCameraMtx, spC4); + MTXConcat(spC4, spF4, spF4); + GXLoadTexMtxImm(spF4, 0x1E, GX_MTX3x4); + { + Vec sp38 = { 1.0f, 1.0f, 1.0f }; + var_f31 = 0.0f; + fn_1_94BC(&var_r30->unk78, &var_r30->unk84, var_r31->unk_2C, &sp38, var_f31, &sp18, 1); + } + if (omPauseChk() == 0) { + var_r31->unk_20 = var_r31->unk_20 - 0.001f; + } + MTXScale(spF4, 1.0f, 1.0f, 1.0f); + mtxTransCat(spF4, 0.0f, var_r31->unk_20 + (0.3f * sp18.y), 0.0f); + GXLoadTexMtxImm(spF4, 0x21, GX_MTX2x4); + if (omPauseChk() == 0) { + var_r31->unk_24 += 0.05f; + } + if (var_r31->unk_24 >= 360.0f) { + var_r31->unk_24 -= 360.0f; + } + var_r31->unk_14 = sind(var_r31->unk_24); + if (omPauseChk() == 0) { + var_r31->unk_1C += 0.0005f; + } + MTXScale(spF4, 0.5f, 0.5f, 0.5f); + mtxTransCat(spF4, var_r31->unk_14, var_r31->unk_1C, 0.0f); + GXLoadTexMtxImm(spF4, 0x24, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, 0x21, GX_FALSE, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX0, 0x24, GX_FALSE, 0x7D); + GXSetNumChans(1); + var_r21 = Hu3DLightSet(model, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, 0.0f); + GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_REG, var_r21, GX_DF_CLAMP, GX_AF_SPOT); + sp14.r = sp14.g = sp14.b = 0x10; + sp14.a = 0xFF; + GXSetChanAmbColor(GX_COLOR0A0, sp14); + sp14.r = sp14.g = sp14.b = 0xFF; + sp14.a = 0xFF; + GXSetChanMatColor(GX_COLOR0A0, sp14); + GXSetZMode(1, GX_LEQUAL, GX_TRUE); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + GXCallDisplayList(var_r31->unk_40, var_r31->unk_44); + GXSetNumIndStages(0); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); +} + +void fn_1_BD2C(ModelData *model, Mtx matrix) +{ + GXColor sp14 = { 0, 0, 0, 0xFF }; + GXSetFog(GX_FOG_EXP, 10000.0f, 20000.0f, 300.0f, 50000.0f, sp14); + GXLoadPosMtxImm(matrix, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + HuSprTexLoad(lbl_1_bss_F4, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); + GXSetNumChans(0); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(GX_FALSE); + GXSetBlendMode(GX_BM_NONE, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(-1000.0f, 1000.0f, -24000.0f); + GXTexCoord2f32(0.0f, 0.0f); + + GXPosition3f32(1000.0f, 1000.0f, -24000.0f); + GXTexCoord2f32(1.0f, 0.0f); + + GXPosition3f32(1000.0f, -1000.0f, -24000.0f); + GXTexCoord2f32(1.0f, 1.0f); + + GXPosition3f32(-1000.0f, -1000.0f, -24000.0f); + GXTexCoord2f32(0.0f, 1.0f); + + GXSetFog(GX_FOG_EXP, 3500.0f, 20000.0f, 300.0f, 50000.0f, sp14); +} + +void fn_1_C154(ModelData *model, Mtx matrix) +{ + GXColor spC = { 0, 0, 0, 255 }; + GXSetFog(GX_FOG_EXP, 10000.0f, 20000.0f, 300.0f, 50000.0f, spC); +} + +void fn_1_C200(ModelData *model, Mtx matrix) +{ + GXColor spC = { 0, 0, 0, 255 }; + GXSetFog(GX_FOG_EXP, 3500.0f, 20000.0f, 300.0f, 50000.0f, spC); +} + +void fn_1_C2AC(Vec *arg0, float arg8, float arg9, float argA) +{ + arg0->x = arg8; + arg0->y = arg9; + arg0->z = argA; +} + +void fn_1_C2BC(Vec2f *arg0, float arg8, float arg9) +{ + arg0->x = arg8; + arg0->y = arg9; +} + +void fn_1_C2C8(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3) +{ + Vec sp14; + Vec sp8; + + sp14.x = arg1->x - arg0->x; + sp14.y = arg1->y - arg0->y; + sp14.z = arg1->z - arg0->z; + sp8.x = arg2->x - arg1->x; + sp8.y = arg2->y - arg1->y; + sp8.z = arg2->z - arg1->z; + arg3->x = -((sp14.y * sp8.z) - (sp14.z * sp8.y)); + arg3->y = -((sp14.z * sp8.x) - (sp14.x * sp8.z)); + arg3->z = -((sp14.x * sp8.y) - (sp14.y * sp8.x)); +} + +// is this one of the structs? +void fn_1_C3A0(float *arg0, float *arg1) +{ + arg1[0] = arg0[0]; + arg1[4] = arg0[1]; + arg1[8] = arg0[2]; + arg1[1] = arg0[4]; + arg1[5] = arg0[5]; + arg1[9] = arg0[6]; + arg1[2] = arg0[8]; + arg1[6] = arg0[9]; + arg1[10] = arg0[10]; + arg1[3] = 0.0f; + arg1[7] = 0.0f; + arg1[11] = 0.0f; +} + +s16 fn_1_C41C(float x1, float y1, float z1, float x2, float y2, float z2, u8 r, u8 g, u8 b) +{ + Vec sp34; + Vec sp28; + GXColor sp23; + LightData *var_r31; + s16 var_r30; + + sp34.x = x1; + sp34.y = y1; + sp34.z = z1; + sp28.x = x2; + sp28.y = y2; + sp28.z = z2; + sp23.r = r; + sp23.g = g; + sp23.b = b; + sp23.a = 0xFF; + for (var_r31 = Hu3DLocalLight, var_r30 = 0; var_r30 < 0x20; var_r30++, var_r31++) { + if (var_r31->unk_00 == -1) { + break; + } + } + if (var_r30 == 0x20) { + return -1; + } + fn_1_C68C(var_r31, &sp34, &sp28, &sp23); + var_r31->unk_00 |= 0x8000; + return var_r30; +} + +void fn_1_C528(s16 sp8, s16 var_r28, float x1, float y1, float z1, float x2, float y2, float z2, u8 r, u8 g, u8 b) +{ + Vec sp38; + Vec sp2C; + GXColor sp27; + ModelData *var_r31; + LightData *var_r30; + s16 var_r29; + + var_r31 = &Hu3DData[sp8]; + sp38.x = x1; + sp38.y = y1; + sp38.z = z1; + sp2C.x = x2; + sp2C.y = y2; + sp2C.z = z2; + sp27.r = r; + sp27.g = g; + sp27.b = b; + sp27.a = 0xFF; + for (var_r30 = Hu3DLocalLight, var_r29 = 0; var_r29 < 0x20; var_r29++, var_r30++) { + if (var_r30->unk_00 == -1) { + break; + } + } + if (var_r29 == 0x20) { + OSReport("Light Entry Over!\n"); + return; + } + fn_1_C68C(var_r30, &sp38, &sp2C, &sp27); + if (var_r31->unk_38[var_r28] == -1) { + var_r31->unk_38[var_r28] = var_r29; + var_r31->attr |= 0x1000; + } +} + +void fn_1_C68C(LightData *arg0, Vec *arg1, Vec *arg2, GXColor *arg3) +{ + arg0->unk_00 = 0; + arg0->unk_1C = *arg1; + arg0->unk_28 = *arg2; + arg0->unk_34.x = arg0->unk_34.y = arg0->unk_34.z = 0.0f; + arg0->unk_04 = 30.0f; + arg0->unk_02 = 2; + VECNormalize(&arg0->unk_28, &arg0->unk_28); + arg0->color.r = arg3->r; + arg0->color.g = arg3->g; + arg0->color.b = arg3->b; + arg0->color.a = arg3->a; +} + +void fn_1_C76C(u8 arg0, float arg8, float arg9, float argA, s16 arg1, float argB, float argC, s16 arg2) +{ + Vec sp24; + Vec sp18; + float sp10[2]; + GXColor spC; + M427DllMapSubstruct6 *var_r31; + s16 var_r30; + + if (arg0 != 0) { + argB += (((rand8() << 8) | rand8()) % 21) - 0xA; + } + else { + argB += (((rand8() << 8) | rand8()) % 61) - 0x1E; + } + sp10[0] = sind(argB); + sp10[1] = cosd(argB); + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + if (arg0 != 0) { + sp24.x = arg8 + ((((rand8() << 8) | rand8()) % 21) - 0xA); + sp24.y = arg9 + ((((rand8() << 8) | rand8()) % 21) - 0xA); + sp24.z = argA + ((((rand8() << 8) | rand8()) % 21) - 0xA); + } + else { + sp24.x = arg8 + ((((rand8() << 8) | rand8()) % 41) - 0x14); + sp24.y = arg9 + ((((rand8() << 8) | rand8()) % 41) - 0x14); + sp24.z = argA + ((((rand8() << 8) | rand8()) % 41) - 0x14); + } + sp18.x = sp18.y = sp18.z = 0.0f; + spC.r = spC.g = spC.b = spC.a = 0xFF; + var_r31 = fn_1_D4FC(arg2, &sp24, &sp18, 0.0f, &spC); + if (!var_r31) { + break; + } + var_r31->unk_38 = arg0; + if (arg0 != 0) { + var_r31->unk_34 = 0; + var_r31->unk_36 = 3; + var_r31->unk_00 = argC * (sp10[0] * (0.1f * ((((rand8() << 8) | rand8()) % 151) + 0x96))); + var_r31->unk_04 = 0.1f * ((((rand8() << 8) | rand8()) % 31) - 0x14); + var_r31->unk_08 = argC * (sp10[1] * (0.1f * ((((rand8() << 8) | rand8()) % 151) + 0x96))); + var_r31->unk_18 = 0.01f * var_r31->unk_00; + var_r31->unk_1C = 0.1f; + var_r31->unk_20 = 0.01f * var_r31->unk_08; + var_r31->unk_24 = argC * (0.1f * ((((rand8() << 8) | rand8()) % 11) + 0xA)); + var_r31->unk_28 = argC * (0.01f * ((((rand8() << 8) | rand8()) % 101) + 0x32) / (var_r31->unk_36 * 0xE)); + } + else { + var_r31->unk_34 = 0; + var_r31->unk_36 = 2; + var_r31->unk_00 = sp10[0] * (0.1f * ((((rand8() << 8) | rand8()) % 31) + 0x32)); + var_r31->unk_04 = 0.1f * ((((rand8() << 8) | rand8()) % 31) - 0x14); + var_r31->unk_08 = sp10[1] * (0.1f * (((((rand8() << 8) | rand8()) % 31)) + 0x32)); + var_r31->unk_18 = 0.0f; + var_r31->unk_1C = 0.1f; + var_r31->unk_20 = 0.0f; + var_r31->unk_24 = 0.3f * (0.1f * ((((rand8() << 8) | rand8()) % 11) + 0xA)); + var_r31->unk_28 = 0.4f * ((0.01f * ((((rand8() << 8) | rand8()) % 51) + 0x32)) / (var_r31->unk_36 * 0xE)); + } + var_r31->unk_2C = 1024.0f * argC; + var_r31->unk_30 = var_r31->unk_2C / (var_r31->unk_36 * 0xE); + } +} + +void fn_1_D22C(ModelData *model, M427DllMapStruct7 *arg1, Mtx matrix) +{ + M427DllMapSubstruct6 *var_r31; + GXColor *var_r30; + s16 var_r29; + u8 var_r28; + + var_r31 = arg1->unk_18; + var_r30 = arg1->unk_24; + for (var_r29 = 0; var_r29 < arg1->unk_00; var_r29++, var_r31++, var_r30++) { + if (var_r31->unk_62 != 0) { + var_r31->unk_54.x += var_r31->unk_00; + var_r31->unk_54.y += var_r31->unk_04; + var_r31->unk_54.z += var_r31->unk_08; + if (var_r31->unk_38 != 0) { + var_r31->unk_00 -= var_r31->unk_18; + var_r31->unk_04 += var_r31->unk_1C; + var_r31->unk_08 -= var_r31->unk_20; + var_r31->unk_18 = 0.01f * var_r31->unk_00; + var_r31->unk_1C *= 1.04f; + var_r31->unk_20 = 0.01f * var_r31->unk_08; + } + else { + var_r31->unk_04 += var_r31->unk_1C; + var_r31->unk_1C *= 1.1f; + } + var_r31->unk_24 += var_r31->unk_28; + var_r31->unk_48.x = var_r31->unk_48.y = var_r31->unk_48.z = var_r31->unk_24; + var_r31->unk_2C -= var_r31->unk_30; + if (var_r31->unk_2C > 255.0f) { + var_r28 = 0xFF; + } + else { + var_r28 = (s32)var_r31->unk_2C; + } + var_r30->a = (s32)var_r28; + var_r31->unk_34++; + if (var_r31->unk_34 >= var_r31->unk_36) { + var_r31->unk_34 = 0; + var_r31->unk_60++; + } + if (var_r31->unk_60 >= arg1->unk_14) { + var_r31->unk_62 = 0; + } + } + } +} + +s16 fn_1_D430(float arg8, float arg9, float argA, s16 arg0) +{ + Vec sp28; + Vec sp1C; + GXColor sp16; + M427DllMapSubstruct6 *var_r31; + + sp28.x = arg8; + sp28.y = arg9; + sp28.z = argA; + sp1C.x = sp1C.y = sp1C.z = 1.0f; + sp16.r = 0xFF; + sp16.g = 0xA0; + sp16.b = 0x60; + sp16.a = 0xFF; + var_r31 = fn_1_D4FC(arg0, &sp28, &sp1C, 0.0f, &sp16); + if (!var_r31) { + return -1; + } + var_r31->unk_24 = 0.0f; + return var_r31->unk_40; +} + +M427DllMapSubstruct6 *fn_1_D4FC(s16 arg0, Vec *arg1, Vec *arg2, float arg8, GXColor *arg3) +{ + M427DllMapSubstruct6 *var_r31; + M427DllMapStruct7 *var_r30; + s16 var_r29; + ModelData *var_r28; + + var_r28 = &Hu3DData[arg0]; + var_r30 = var_r28->unk_120; + for (var_r29 = 0, var_r31 = var_r30->unk_18; var_r29 < var_r30->unk_00; var_r29++, var_r31++) { + if (var_r31->unk_62 == 0) { + break; + } + } + if (var_r29 == var_r30->unk_00) { + return NULL; + } + var_r30->unk_24[var_r29].r = arg3->r; + var_r30->unk_24[var_r29].g = arg3->g; + var_r30->unk_24[var_r29].b = arg3->b; + var_r30->unk_24[var_r29].a = arg3->a; + var_r31->unk_40 = var_r29; + var_r31->unk_44 = arg8; + var_r31->unk_48 = *arg2; + var_r31->unk_54 = *arg1; + var_r31->unk_60 = 0; + var_r31->unk_3C = 0; + var_r31->unk_62 = 1; + return var_r31; +} + +s16 fn_1_D63C(AnimData *arg0, s16 arg1, float arg8, s16 arg2, s16 arg3) +{ + float temp_f0; + M427DllMapStruct7 *var_r31; + s16 var_r30; + Vec2f *var_r29; + ModelData *var_r28; + GXColor *var_r27; + Vec *var_r25; + M427DllMapSubstruct6 *var_r24; + s16 var_r22; + void *var_r21; + s16 var_r20; + s16 var_r19; + void *var_r18; + + var_r20 = Hu3DHookFuncCreate(fn_1_DCD4); + var_r28 = &Hu3DData[var_r20]; + var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M427DllMapStruct7), var_r28->unk_48); + var_r28->unk_120 = var_r31; + arg0->useNum++; + var_r31->unk_10 = arg0; + var_r31->unk_00 = arg1; + var_r31->unk_08 = 0; + var_r31->unk_0C = 0; + var_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(M427DllMapSubstruct6), var_r28->unk_48); + var_r31->unk_18 = var_r24; + for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r24++) { + var_r24->unk_60 = -1; + var_r24->unk_62 = 0; + } + var_r25 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec) * 4, var_r28->unk_48); + var_r31->unk_1C = var_r25; + for (var_r30 = 0; var_r30 < (arg1 * 4); var_r30++, var_r25++) { + var_r25->x = var_r25->y = var_r25->z = 0.0f; + } + var_r27 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(GXColor), var_r28->unk_48); + var_r31->unk_24 = var_r27; + for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r27++) { + var_r27->r = var_r27->g = var_r27->b = var_r27->a = 0xFF; + } + var_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec2f) * 4, var_r28->unk_48); + var_r31->unk_20 = var_r29; + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + var_r29->x = 0.0f; + var_r29->y = 0.0f; + var_r29++; + var_r29->x = 1.0f; + var_r29->y = 0.0f; + var_r29++; + var_r29->x = 1.0f; + var_r29->y = 1.0f; + var_r29++; + var_r29->x = 0.0f; + var_r29->y = 1.0f; + var_r29++; + } + if ((arg2 != 0) || (arg3 != 0)) { + var_r22 = arg0->bmp->sizeX / arg2; + var_r19 = arg0->bmp->sizeY / arg3; + var_r31->unk_14 = var_r22 * var_r19; + var_r31->unk_60 = 1.0f / var_r22; + var_r31->unk_64 = 1.0f / var_r19; + } + else { + var_r22 = 1; + var_r31->unk_14 = 1; + var_r31->unk_60 = 1.0f; + var_r31->unk_64 = 1.0f; + } + var_r31->unk_5C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_14 * sizeof(Vec2f), var_r28->unk_48); + fn_1_E2B0(var_r31->unk_5C, var_r31->unk_14, var_r22, var_r31->unk_60, var_r31->unk_64); + var_r31->unk_2C.x = var_r31->unk_50 = var_r31->unk_48 = var_r31->unk_54 = -arg8; + var_r31->unk_38 = var_r31->unk_44 = var_r31->unk_2C.y = var_r31->unk_3C = arg8; + var_r31->unk_2C.z = var_r31->unk_40 = var_r31->unk_4C = var_r31->unk_58 = 0.0f; + var_r21 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, var_r28->unk_48); + var_r18 = var_r21; + DCFlushRange(var_r21, 0x20000); + GXBeginDisplayList(var_r18, 0x20000); + GXBegin(GX_QUADS, GX_VTXFMT0, arg1 * 4); + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + GXPosition1x16(var_r30 * 4); + GXPosition1x16(var_r30); + GXPosition1x16(var_r30 * 4); + GXPosition1x16(var_r30 * 4 + 1); + GXPosition1x16(var_r30); + GXPosition1x16(var_r30 * 4 + 1); + GXPosition1x16(var_r30 * 4 + 2); + GXPosition1x16(var_r30); + GXPosition1x16(var_r30 * 4 + 2); + GXPosition1x16(var_r30 * 4 + 3); + GXPosition1x16(var_r30); + GXPosition1x16(var_r30 * 4 + 3); + } + var_r31->unk_04 = GXEndDisplayList(); + var_r31->unk_28 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_04, var_r28->unk_48); + memcpy(var_r31->unk_28, var_r21, var_r31->unk_04); + DCFlushRange(var_r31->unk_28, var_r31->unk_04); + HuMemDirectFree(var_r21); + return var_r20; +} + +void fn_1_DB80(s16 arg0) +{ + ModelData *var_r31; + M427DllMapStruct7 *var_r30; + + var_r31 = &Hu3DData[arg0]; + var_r30 = var_r31->unk_120; + HuSprAnimKill(var_r30->unk_10); + Hu3DModelKill(arg0); +} + +void *fn_1_DBE0(s16 arg0) +{ + ModelData *var_r31; + + var_r31 = &Hu3DData[arg0]; + return var_r31->unk_120; +} + +M427DllMapSubstruct6 *fn_1_DC0C(s16 arg0, s16 arg1) +{ + ModelData *var_r31; + M427DllMapStruct7 *var_r30; + + var_r31 = &Hu3DData[arg0]; + var_r30 = var_r31->unk_120; + if (arg1 == -1) { + return NULL; + } + return &var_r30->unk_18[arg1]; +} + +void fn_1_DC64(s16 arg0, M427DllHook arg1) +{ + ModelData *var_r31; + M427DllMapStruct7 *var_r30; + + var_r31 = &Hu3DData[arg0]; + var_r30 = var_r31->unk_120; + var_r30->unk_0C = arg1; +} + +void fn_1_DC9C(s16 arg0, u8 arg1) +{ + ModelData *var_r31; + M427DllMapStruct7 *var_r30; + + var_r31 = &Hu3DData[arg0]; + var_r30 = var_r31->unk_120; + var_r30->unk_08 = arg1; +} + +void fn_1_DCD4(ModelData *model, Mtx matrix) +{ + Mtx sp128; + ROMtx spF8; + Mtx spC8; + Mtx sp98; + Vec sp68[4]; + Vec sp5C; + Vec sp50; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + Vec *var_r31; + M427DllMapStruct7 *var_r30; + M427DllMapSubstruct6 *var_r29; + Vec2f *var_r26; + s16 var_r25; + s16 var_r24; + M427DllHook var_r23; + + var_r30 = model->unk_120; + GXLoadPosMtxImm(matrix, 0); + GXSetNumTevStages(1); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + var_r24 = var_r30->unk_10->bmp->dataFmt & 0xF; + if ((var_r24 == 7) || (var_r24 == 8)) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXA, GX_CC_RASC, GX_CC_ZERO); + } + else { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + } + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_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); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + if ((model->attr & 2) != 0) { + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + } + else { + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); + } + HuSprTexLoad(var_r30->unk_10, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(0); + switch (var_r30->unk_08) { + case 0: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + break; + case 1: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + break; + case 2: + GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP); + break; + } + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, var_r30->unk_1C, 0xC); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, var_r30->unk_24, 4); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_TEX0, var_r30->unk_20, 8); + sp128[0][0] = matrix[0][0]; + sp128[1][0] = matrix[0][1]; + sp128[2][0] = matrix[0][2]; + sp128[0][1] = matrix[1][0]; + sp128[1][1] = matrix[1][1]; + sp128[2][1] = matrix[1][2]; + sp128[0][2] = matrix[2][0]; + sp128[1][2] = matrix[2][1]; + sp128[2][2] = matrix[2][2]; + sp128[0][3] = 0.0f; + sp128[1][3] = 0.0f; + sp128[2][3] = 0.0f; + PSMTXReorder(sp128, spF8); + if ((omPauseChk() == 0) && (var_r30->unk_0C)) { + var_r23 = var_r30->unk_0C; + var_r23(model, var_r30, matrix); + } + var_r29 = var_r30->unk_18; + var_r31 = var_r30->unk_1C; + var_r26 = var_r30->unk_20; + PSMTXROMultVecArray(spF8, &var_r30->unk_2C, sp68, 4); + for (var_r25 = 0; var_r25 < var_r30->unk_00; var_r25++, var_r29++, var_r26 += 4) { + if (var_r29->unk_62 == 0) { + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + } + else { + if (var_r29->unk_44 == 0.0f) { + fn_1_E420(sp68, &sp38, &var_r29->unk_48, 4); + PSVECAdd(&sp38, &var_r29->unk_54, var_r31++); + PSVECAdd(&sp44, &var_r29->unk_54, var_r31++); + PSVECAdd(&sp50, &var_r29->unk_54, var_r31++); + PSVECAdd(&sp5C, &var_r29->unk_54, var_r31++); + } + else { + fn_1_E420(&var_r30->unk_2C, &sp38, &var_r29->unk_48, 4); + PSMTXRotRad(spC8, 0x5A, MTXDegToRad(var_r29->unk_44)); + PSMTXConcat(sp128, spC8, sp98); + PSMTXMultVecArray(sp98, &sp38, &sp8, 4); + PSVECAdd(&sp8, &var_r29->unk_54, var_r31++); + PSVECAdd(&sp14, &var_r29->unk_54, var_r31++); + PSVECAdd(&sp20, &var_r29->unk_54, var_r31++); + PSVECAdd(&sp2C, &var_r29->unk_54, var_r31++); + } + if (var_r29->unk_60 != -1) { + fn_1_E37C(var_r26, var_r30->unk_5C, var_r29->unk_60, var_r30->unk_60, var_r30->unk_64); + } + } + } + DCFlushRangeNoSync(var_r30->unk_1C, var_r30->unk_00 * sizeof(Vec) * 4); + DCFlushRangeNoSync(var_r30->unk_20, var_r30->unk_00 * sizeof(Vec2f) * 4); + PPCSync(); + GXCallDisplayList(var_r30->unk_28, var_r30->unk_04); +} + +void fn_1_E2B0(Vec2f *arg0, s16 arg1, s16 arg2, float arg8, float arg9) +{ + s16 var_r31; + s16 var_r30; + s16 var_r29; + + for (var_r31 = 0; var_r31 < arg1; var_r31++, arg0++) { + var_r30 = var_r31 % arg2; + var_r29 = var_r31 / arg2; + arg0->x = var_r30 * arg8; + arg0->y = var_r29 * arg9; + } +} + +void fn_1_E37C(Vec2f *arg0, Vec2f *arg1, s16 arg2, float arg8, float arg9) +{ + arg0[0].x = arg1[arg2].x; + arg0[0].y = arg1[arg2].y; + arg0[1].x = arg8 + arg1[arg2].x; + arg0[1].y = arg1[arg2].y; + arg0[2].x = arg8 + arg1[arg2].x; + arg0[2].y = arg9 + arg1[arg2].y; + arg0[3].x = arg1[arg2].x; + arg0[3].y = arg9 + arg1[arg2].y; +} + +void fn_1_E420(Vec *arg0, Vec *arg1, Vec *arg2, s16 arg3) +{ + s16 var_r31; + + for (var_r31 = 0; var_r31 < arg3; var_r31++, arg0++, arg1++) { + arg1->x = arg0->x * arg2->x; + arg1->y = arg0->y * arg2->y; + arg1->z = arg0->z * arg2->z; + } +} + +void fn_1_E488(void) +{ + if ((HuPadBtnDown[0] & PAD_TRIGGER_L) != 0) { + lbl_1_bss_91 ^= 1; + } + if (lbl_1_bss_91 != 0) { + if ((HuPadBtnDown[0] & PAD_TRIGGER_Z) != 0) { + lbl_1_bss_90 = lbl_1_bss_90 ^ 1; + } + if ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) { + CRotM[lbl_1_bss_90].y += 1.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) { + CRotM[lbl_1_bss_90].y -= 1.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_UP) != 0) { + CRotM[lbl_1_bss_90].x -= 1.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0) { + CRotM[lbl_1_bss_90].x += 1.0f; + } + CenterM[lbl_1_bss_90].x += HuPadSubStkX[0]; + if ((HuPadBtn[0] & PAD_TRIGGER_R) != 0) { + CenterM[lbl_1_bss_90].y += HuPadSubStkY[0]; + } + else { + CenterM[lbl_1_bss_90].z += HuPadSubStkY[0]; + } + if ((HuPadBtn[0] & PAD_BUTTON_X) != 0) { + CZoomM[lbl_1_bss_90] += 10.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_Y) != 0) { + CZoomM[lbl_1_bss_90] -= 10.0f; + } + if ((HuPadBtnDown[0] & PAD_BUTTON_A) != 0) { + OSReport("\nCZoom = %.2f \n", CZoomM[lbl_1_bss_90]); + OSReport("Center x = %.2f: y = %.2f: z = %.2f \n", CenterM[lbl_1_bss_90].x, CenterM[lbl_1_bss_90].y, CenterM[lbl_1_bss_90].z); + OSReport("CRot x = %.2f: y = %.2f: z = %.2f \n", CRotM[lbl_1_bss_90].x, CRotM[lbl_1_bss_90].y, CRotM[lbl_1_bss_90].z); + } + } +} diff --git a/src/REL/m427Dll/player.c b/src/REL/m427Dll/player.c index b27e5584..fe097531 100644 --- a/src/REL/m427Dll/player.c +++ b/src/REL/m427Dll/player.c @@ -1967,7 +1967,7 @@ block_18: return 0; } -s32 fn_1_15F10(Vec *arg0, Vec *arg1, s32 arg2, s32 arg3, s32 arg4) +s32 fn_1_15F10(Vec arg0, Vec arg1, s32 arg2, s32 arg3, s32 arg4) { M427DllBss57CStruct *var_r31; s32 var_r30; @@ -1986,12 +1986,12 @@ s32 fn_1_15F10(Vec *arg0, Vec *arg1, s32 arg2, s32 arg3, s32 arg4) var_r31->unk_10 = arg4; var_r31->unk_18 = arg3; var_r31->unk_14 = 0; - var_r31->unk_1C = *arg0; - var_r31->unk_28 = *arg1; + var_r31->unk_1C = arg0; + var_r31->unk_28 = arg1; return var_r30; } -s32 fn_1_15FD0(Vec *arg0, s32 arg1, s32 arg2, s32 arg3, float arg8) +s32 fn_1_15FD0(Vec arg0, float arg8, s32 arg1, s32 arg2, s32 arg3) { M427DllBss57CStruct *var_r31; s32 var_r30; @@ -2010,7 +2010,7 @@ s32 fn_1_15FD0(Vec *arg0, s32 arg1, s32 arg2, s32 arg3, float arg8) var_r31->unk_10 = arg3; var_r31->unk_18 = arg2; var_r31->unk_14 = 0; - var_r31->unk_1C = *arg0; + var_r31->unk_1C = arg0; var_r31->unk_34 = arg8; return var_r30; }