marioparty4/src/REL/m427Dll/map.c
2025-04-01 06:40:22 +02:00

3157 lines
107 KiB
C

#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 M427DllStruct2 {
s32 unk0[3];
s32 unkC;
s32 unk10;
s32 unk14[7];
s32 unk30[7];
HsfVector2f unk4C[7];
f32 unk84;
f32 unk88;
s32 unk8C;
f32 unk90;
f32 unk94;
f32 unk98;
s32 unk9C;
s32 unkA0;
} M427DllStruct2; // sizeof 0xA4
typedef struct M427DllStruct3 {
Vec rot;
Vec cen;
f32 zoom;
} M427DllStruct3; // sizeof 0x1C
typedef struct M427DllMapStruct {
u8 unk0;
char unk_1;
s16 unk2;
s16 unk4;
char unk_6[0x2];
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; // sizeof 0x6
typedef struct M427DllMapSubstruct {
s16 unk0;
Vec unk4;
} M427DllMapSubstruct; // sizeof 0x10
typedef struct M427DllMapSubstruct2 {
s16 unk0;
Vec unk4;
s16 unk10[2];
s16 unk14[4];
} M427DllMapSubstruct2; // sizeof 0x1C
typedef struct M427DllMapSubstruct7 {
s16 unk0;
s32 unk4;
void *unk8;
} M427DllMapSubstruct7; // sizeof 0xC
typedef struct M427DllMapUNKB8 {
s16 unk0;
s16 unk2;
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;
s16 unk2[11];
s16 unk18;
s16 unk1A;
s16 unk1C;
s16 unk1E;
s16 unk20;
char unk_22[2];
float unk24[4];
s16 unk34[4];
s16 unk3C[4];
s16 unk44[0xB];
s16 unk5A;
s16 unk5C;
char unk_5E[2];
Vec unk_60;
Vec unk_6C;
Vec unk78;
Vec unk84;
f32 unk90;
M427DllMapSubstruct3Sub unk94;
char unk_A0[0xC];
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];
M427DllMapStruct3Sub unk334;
M427DllMapSubstruct2 unk34C[3];
M427DllMapSubstruct unk3A0[5];
} M427DllMapStruct3; // sizeof 0x3F0
typedef struct M427DllMapSubstruct5 {
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
Vec unk8;
char unk14[0x8];
} M427DllMapSubstruct5; // sizeof 0x1C
typedef struct M427DllMapStruct4 {
s16 unk0;
Vec *unk4;
Vec2f *unk8;
Vec *unkC;
GXColor *unk10;
s16 unk14;
s16 unk16;
s16 unk18;
M427DllMapSubstruct5 *unk1C;
void *unk20;
u32 unk24;
void *unk28;
u32 unk2C;
void *unk30;
u32 unk34;
f32 unk38;
f32 unk3C;
f32 unk40;
f32 unk44;
s16 unk48[1];
s16 unk4A;
} M427DllMapStruct4; // sizeof 0x4C
typedef struct M427DllMapStruct5 {
f32 unk0;
f32 unk4;
f32 unk8;
f32 unkC;
f32 unk10;
} M427DllMapStruct5; // sizeof 0x14
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];
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;
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 *object);
void fn_1_44F4(f32, f32, f32, f32, f32);
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 *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, 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)
{
s16 var_r31;
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), 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));
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_DC9C(lbl_1_bss_EC[var_r31], 1);
Hu3DModelLayerSet(lbl_1_bss_EC[var_r31], 7);
if (var_r31 == 0) {
var_r29 = 1;
}
else {
var_r29 = 2;
}
Hu3DModelCameraSet(lbl_1_bss_EC[var_r31], var_r29);
}
temp_r30 = HuSprAnimRead(HuDataReadNum(0x3A001A, MEMORY_DEFAULT_NUM));
for (var_r31 = 0; var_r31 < 2; var_r31++) {
lbl_1_bss_E8[var_r31] = fn_1_D63C(temp_r30, 4, 120.0f, 0, 0);
fn_1_DC9C(lbl_1_bss_E8[var_r31], 1);
Hu3DModelLayerSet(lbl_1_bss_E8[var_r31], 7);
if (var_r31 == 0) {
var_r28 = 1;
}
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);
Hu3DModelAttrSet(lbl_1_bss_F8[var_r31].unk2, 1);
Hu3DModelScaleSet(lbl_1_bss_F8[var_r31].unk2, 0.75f, 0.75f, 0.75f);
Hu3DModelLayerSet(lbl_1_bss_F8[var_r31].unk2, 4);
Hu3DMotionSpeedSet(lbl_1_bss_F8[var_r31].unk2, 2.0f);
lbl_1_bss_F8[var_r31].unk4 = Hu3DAnimCreate(HuDataReadNum(0x3A001B, MEMORY_DEFAULT_NUM), lbl_1_bss_F8[var_r31].unk2, "db91");
Hu3DAnimSpeedSet(lbl_1_bss_F8[var_r31].unk4, 2.0f);
}
}
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 } };
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 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[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;
s16 var_r30;
M427DllMapSubstruct3 *var_r31;
sp8 = lbl_1_bss_F0;
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->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 } };
Mtx sp24;
f32 sp14[4] = { 135.0f, 225.0f, 45.0f, 315.0f };
Vec sp8;
f32 temp_f31;
s16 var_r29;
s32 var_r27;
for (var_r29 = 0; var_r29 < 0x10; var_r29++, var_r31++) {
if (var_r31->unk0 == -1)
break;
}
if (var_r29 != 0x10) {
var_r31->unk0 = arg0;
temp_f31 = temp_r30->unk90;
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 {
var_r27 = 2;
}
Hu3DModelCameraSet(var_r31->unk2, var_r27);
Hu3DModelPosSet(var_r31->unk2, sp8.x, sp8.y, sp8.z);
Hu3DModelRotSet(var_r31->unk2, 0.0f, temp_f31 + sp14[arg0], 0.0f);
Hu3DMotionTimeSet(var_r31->unk2, 0.0f);
if (arg0 < 2) {
Hu3DModelAmbSet(var_r31->unk2, 1.0f, 1.0f, 1.0f);
}
else {
Hu3DModelAmbSet(var_r31->unk2, 0.5f, 0.5f, 0.5f);
}
Hu3DAnimBankSet(var_r31->unk4, 0);
}
}
void fn_1_3DBC(void)
{
M427DllMapStruct2 *var_r31;
s16 var_r30;
f32 temp_f31;
var_r31 = &lbl_1_bss_F8[0];
for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) {
if (var_r31->unk0 != -1) {
temp_f31 = Hu3DMotionMaxTimeGet(var_r31->unk2);
if (Hu3DMotionTimeGet(var_r31->unk2) >= temp_f31) {
var_r31->unk0 = -1;
Hu3DModelAttrSet(var_r31->unk2, 1U);
}
}
}
}
void fn_1_3E58(omObjData *arg0)
{
s32 sp8[8];
M427DllMapStruct *var_r26;
M427DllMapSubstruct3 *var_r31;
ModelData *temp_r25;
s16 var_r30;
M427DllMapStruct4 *var_r29;
s16 var_r28;
s16 var_r27;
var_r29 = &lbl_1_bss_98;
for (var_r28 = 0, var_r31 = lbl_1_bss_158.unk4; var_r28 < 2; var_r28++, var_r31++) {
var_r27 = fn_1_10FE8(var_r31->unk0, &sp8[0]);
for (var_r30 = 0; var_r30 < var_r27; var_r30++) {
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->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->unkB8[var_r30][var_r27].unk2);
}
}
HuSprAnimKill(var_r31->unkAC->unk_28);
Hu3DModelKill(var_r31->unk1A);
Hu3DModelKill(var_r31->unk1C);
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]);
for (var_r30 = 0; var_r30 < 11; var_r30++) {
Hu3DModelKill(var_r31->unk2[var_r30]);
}
Hu3DModelKill(var_r31->unk1E);
Hu3DModelKill(var_r31->unk20);
}
for (var_r28 = 0, var_r26 = lbl_1_bss_F0; var_r28 < 0x10; var_r28++, var_r26++) {
if (var_r26->unk2 != -1) {
Hu3DModelKill(var_r26->unk4);
HuSprAnimKill(var_r26->unk8);
HuMemDirectFree(var_r26->unk80);
}
}
HuMemDirectFree(lbl_1_bss_F0);
Hu3DFogClear();
var_r30 = Hu3DModelCreateFile(0x3A0011);
Hu3DModelCameraSet(var_r30, 1);
Hu3DModelLayerSet(var_r30, 1);
Hu3DModelPosSet(var_r30, 0.0f, 0.0f, 0.0f);
var_r29->unk0 = Hu3DModelCreateFile(0x3A0010);
Hu3DModelCameraSet(var_r29->unk0, 1);
Hu3DModelLayerSet(var_r29->unk0, 3);
Hu3DModelPosSet(var_r29->unk0, 0.0f, 0.0f, 0.0f);
lbl_1_bss_158.unk0 = 1;
var_r29->unk48[0] = 0;
var_r29->unk4A = 0;
var_r29->unk4 = 0;
lbl_1_bss_E4 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x10 * sizeof(M427DllMapStruct5), MEMORY_DEFAULT_NUM);
for (var_r28 = 0; var_r28 < 0x10; var_r28++) {
lbl_1_bss_E4[var_r28].unk10 = -1.0f;
}
fn_1_510C(0, 0x32, 0x32);
arg0->func = fn_1_4218;
}
void fn_1_4218(omObjData *arg0)
{
f32 var_f31;
f32 temp_f30;
f32 var_f29;
M427DllMapStruct5 *var_r31;
s16 var_r30;
M427DllMapStruct4 *var_r29;
s32 temp_r28;
var_r29 = &lbl_1_bss_98;
var_r31 = &lbl_1_bss_E4[0];
for (var_r30 = 0; var_r30 < 1; var_r30++) {
if (--var_r29->unk48[var_r30] < 0.0f) {
var_r29->unk48[var_r30] = (f32)((((rand8() << 8) | rand8()) % 241) + 0x78);
var_f31 = ((((rand8() << 8) | rand8()) % 4001) - 0x7D0);
temp_f30 = -3000.0f;
var_f29 = ((((rand8() << 8) | rand8()) % 21) + 0xA);
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;
var_r31->unk10 -= 0.2f;
if (var_r31->unk10 < 0.0f) {
var_r31->unk10 = -1.0f;
}
}
}
}
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 (var_r30 != 0x10) {
var_r31->unk0 = arg0;
var_r31->unk4 = arg1;
var_r31->unk8 = arg2;
var_r31->unkC = arg4;
var_r31->unk10 = arg3;
}
}
f32 lbl_1_data_F4 = 450.0f;
f32 fn_1_4570(Vec *arg0)
{
f32 temp_f31;
f32 temp_f30;
f32 var_f28;
f32 var_f27;
f32 var_f23;
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;
temp_f30 = arg0->z - var_r31->unk8;
if (FABS(temp_f31) > (var_r31->unkC + lbl_1_data_F4)) {
if (FABS(temp_f30) > (var_r31->unkC + lbl_1_data_F4)) {
continue;
}
}
var_f28 = sqrtf((temp_f31 * temp_f31) + (temp_f30 * temp_f30));
var_f23 = FABS(var_f28 - var_r31->unkC);
var_f28 = 1.0f - (var_f23 / lbl_1_data_F4);
if (var_f28 < 0.0f) {
var_f28 = 0.0f;
}
var_f27 += var_r31->unk10 * sind(90.0f * var_f28);
}
}
return var_f27;
}
void fn_1_48EC(ModelData *arg0, Mtx arg1)
{
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
Vec spC;
f32 sp8;
f32 temp_f29;
f32 temp_f30;
f32 temp_f31;
sp3C.x = CenterM->x;
sp3C.y = CenterM->y;
sp3C.z = CenterM->z;
sp30.x = CRotM->x;
sp30.y = CRotM->y;
sp30.z = CRotM->z;
temp_f29 = *CZoomM;
CenterM->x = -CenterM->x;
CenterM->y = -CenterM->y;
CenterM->z = CenterM->z;
CRotM->x = 180.0f + CRotM->x;
CRotM->y = 180.0f + -CRotM->y;
CRotM->z = CRotM->z;
*CZoomM = *CZoomM;
temp_f31 = CRotM->x;
temp_f30 = CRotM->y;
sp8 = CRotM->z;
sp24.x = (CenterM->x + (*CZoomM * (sind(temp_f30) * cosd(temp_f31))));
sp24.y = (CenterM->y + (*CZoomM * -sind(temp_f31)));
sp24.z = (CenterM->z + (*CZoomM * (cosd(temp_f30) * cosd(temp_f31))));
spC.x = CenterM->x;
spC.y = CenterM->y;
spC.z = CenterM->z;
sp18.x = (sind(temp_f30) * sind(temp_f31));
sp18.y = cosd(temp_f31);
sp18.z = (cosd(temp_f30) * sind(temp_f31));
Hu3DCameraPosSetV(1, &sp24, &sp18, &spC);
CenterM->x = sp3C.x;
CenterM->y = sp3C.y;
CenterM->z = sp3C.z;
CRotM->x = sp30.x;
CRotM->y = sp30.y;
CRotM->z = sp30.z;
*CZoomM = temp_f29;
}
void fn_1_4D7C(ModelData *arg0, Mtx arg1)
{
Vec sp24;
Vec sp18;
Vec spC;
f32 sp8;
f32 temp_f30;
f32 temp_f31;
temp_f31 = CRotM->x;
temp_f30 = CRotM->y;
sp8 = CRotM->z;
sp24.x = CenterM->x + sind(temp_f30) * cosd(temp_f31) * *CZoomM;
sp24.y = CenterM->y + *CZoomM * -sind(temp_f31);
sp24.z = CenterM->z + cosd(temp_f30) * cosd(temp_f31) * *CZoomM;
sp18.x = CenterM->x;
sp18.y = CenterM->y;
sp18.z = CenterM->z;
spC.x = sind(temp_f30) * sind(temp_f31);
spC.y = cosd(temp_f31);
spC.z = cosd(temp_f30) * sind(temp_f31);
Hu3DCameraPosSetV(1, &sp24, &spC, &sp18);
if (lbl_1_bss_98.unk30) {
GXSetTexCopySrc(0, 0, 0x280, 0x1E0);
GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGB5A3, 0);
GXCopyTex(lbl_1_bss_98.unk30, 1);
}
}
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);
GXCopyTex(lbl_1_bss_98.unk28, 0);
}
}
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;
s16 var_r29;
ModelData *temp_r28;
s16 var_r27;
M427DllMapSubstruct5 *var_r26;
M427DllMapSubstruct5 *var_r23;
var_r31 = &lbl_1_bss_98;
var_r29 = Hu3DHookFuncCreate(fn_1_618C);
Hu3DModelCameraSet(var_r29, 1);
Hu3DModelLayerSet(var_r29, 5);
temp_r28 = &Hu3DData[var_r29];
var_r29 = Hu3DHookFuncCreate(fn_1_48EC);
Hu3DModelCameraSet(var_r29, 1);
Hu3DModelLayerSet(var_r29, 0);
var_r29 = Hu3DHookFuncCreate(fn_1_4D7C);
Hu3DModelCameraSet(var_r29, 1);
Hu3DModelLayerSet(var_r29, 2);
var_r29 = Hu3DHookFuncCreate(fn_1_50A0);
Hu3DModelCameraSet(var_r29, 1);
Hu3DModelLayerSet(var_r29, 4);
var_r31->unk38 = var_r31->unk3C = 0.0f;
var_r31->unk34 = GXGetTexBufferSize(0x280, 0x1E0, 5, 0, 0);
var_r31->unk30 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk34, temp_r28->unk_48);
var_r31->unk2C = GXGetTexBufferSize(0x280, 0x1E0, 5, 0, 0);
var_r31->unk28 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk2C, temp_r28->unk_48);
var_r31->unk16 = arg1 + 1;
var_r31->unk18 = arg2 + 1;
var_r31->unk14 = var_r31->unk16 * var_r31->unk18;
var_r31->unk4 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * sizeof(Vec), temp_r28->unk_48);
var_r31->unk8 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * sizeof(Vec2f), temp_r28->unk_48);
var_r31->unkC = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * sizeof(Vec), temp_r28->unk_48);
var_r31->unk10 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * sizeof(Vec), temp_r28->unk_48);
var_r31->unk1C = HuMemDirectMallocNum(HEAP_DATA, arg2 * (arg1 * sizeof(M427DllMapSubstruct5)), temp_r28->unk_48);
var_r30 = var_r31->unk1C;
var_r23 = var_r26 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, temp_r28->unk_48);
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;
var_r30->unk2 = (var_r29 * var_r31->unk16) + var_r27 + 1;
var_r30->unk4 = ((var_r29 + 1) * var_r31->unk16) + var_r27 + 1;
var_r30->unk6 = var_r27 + ((var_r29 + 1) * var_r31->unk16);
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->unk4[var_r30->unk0], &var_r31->unk4[var_r30->unk2], &var_r31->unk4[var_r30->unk4], &var_r30->unk8);
}
}
var_r31->unk24 = GXEndDisplayList();
var_r31->unk20 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk24, temp_r28->unk_48);
memcpy(var_r31->unk20, var_r26, var_r31->unk24);
DCFlushRange(var_r31->unk20, var_r31->unk24);
HuMemDirectFree(var_r26);
fn_1_558C(var_r31);
}
f32 lbl_1_data_F8 = -1.0f;
void fn_1_558C(M427DllMapStruct4 *arg0)
{
Mtx spAC;
Mtx sp7C;
Mtx sp4C;
Vec2f sp44;
Vec2f sp3C;
Vec2f sp34;
Vec2f sp2C;
f32 sp28;
f32 sp24;
f32 sp20;
f32 var_f26;
f32 var_f25;
f32 var_f20;
M427DllMapSubstruct5 *var_r30;
Vec *var_r29;
Vec *var_r28;
s16 var_r27;
M427DllMapStruct5 *var_r26;
Vec2f *var_r25;
s16 var_r24;
CameraData *var_r23;
s16 var_r22;
var_r23 = &Hu3DCamera[0];
if (lbl_1_data_F8 == -1.0f) {
lbl_1_bss_94 = 720.0f / arg0->unk16;
lbl_1_data_F8 = 1440.0f / arg0->unk18;
}
if (omPauseChk() == 0) {
arg0->unk40 += 1.0f;
arg0->unk44 += 1.5f;
}
if (arg0->unk40 >= 360.0f) {
arg0->unk40 -= 360.0f;
}
if (arg0->unk44 >= 360.0f) {
arg0->unk44 -= 360.0f;
}
var_r28 = arg0->unk4;
var_r29 = arg0->unkC;
sp3C.x = 2000.0f;
sp3C.y = -2000.0f;
sp44.x = 1000.0f;
sp44.y = -2500.0f;
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;
sp24 = 5.0 * sind(var_f26) + 10.0 * sind(var_f25);
sp34.x += sp34.y;
var_f26 += lbl_1_bss_94;
if (var_f26 >= 360.0f) {
var_f26 -= 360.0f;
}
var_r28->y = sp24 + fn_1_4570(var_r28);
var_r29->x = var_r29->y = var_r29->z = 0.0f;
}
sp2C.x += sp2C.y;
var_f25 += lbl_1_data_F8;
if (var_f25 >= 360.0f) {
var_f25 -= 360.0f;
}
}
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;
arg0->unkC[var_r30->unk0].y += var_r30->unk8.y;
arg0->unkC[var_r30->unk0].z += var_r30->unk8.z;
arg0->unkC[var_r30->unk2].x += var_r30->unk8.x;
arg0->unkC[var_r30->unk2].y += var_r30->unk8.y;
arg0->unkC[var_r30->unk2].z += var_r30->unk8.z;
arg0->unkC[var_r30->unk4].x += var_r30->unk8.x;
arg0->unkC[var_r30->unk4].y += var_r30->unk8.y;
arg0->unkC[var_r30->unk4].z += var_r30->unk8.z;
arg0->unkC[var_r30->unk6].x += var_r30->unk8.x;
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));
var_r29->x /= var_f20;
var_r29->y /= var_f20;
var_r29->z /= var_f20;
}
var_r28 = arg0->unk4;
var_r25 = arg0->unk8;
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;
var_r25->y = 0.0020833f * sp24;
var_r25->x += 0.05f * arg0->unkC[var_r27].x;
var_r25->y += 0.05f * arg0->unkC[var_r27].z;
arg0->unk10[var_r27].r = 0xFF;
arg0->unk10[var_r27].g = 0xFF;
arg0->unk10[var_r27].b = 0xFF;
arg0->unk10[var_r27].a = 0xFF;
}
DCFlushRangeNoSync(arg0->unk4, arg0->unk14 * 0xC);
DCFlushRangeNoSync(arg0->unkC, arg0->unk14 * 0xC);
DCFlushRangeNoSync(arg0->unk8, arg0->unk14 * 8);
DCFlushRangeNoSync(arg0->unk10, arg0->unk14 * 4);
PPCSync();
}
void fn_1_618C(ModelData *arg0, Mtx arg1)
{
Mtx sp64;
Mtx sp34;
GXTexObj sp14;
GXColor spC;
M427DllMapStruct4 *var_r31 = &lbl_1_bss_98;
M427DllMapStruct3Sub *var_r30 = &lbl_1_bss_158.unk334;
fn_1_558C(var_r31);
GXLoadPosMtxImm(arg1, 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->unk4, 0xC);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0);
GXSetArray(GX_VA_TEX0, var_r31->unk8, 8);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0);
GXSetArray(GX_VA_CLR0, var_r31->unk10, 4);
GXInitTexObj(&sp14, var_r31->unk30, 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_TEXMAP0);
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->unk_00, 0, 2, GX_REPEAT, GX_REPEAT, GX_LINEAR);
GXSetNumTevStages(3);
spC.r = 0;
spC.g = 0x10;
spC.b = 0x1E;
spC.a = 0x4C;
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, 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_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, 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_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, 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_TEXCOORD1, GX_TEXMAP2);
GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
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;
}
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, 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(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);
GXCallDisplayList(var_r31->unk20, var_r31->unk24);
GXSetNumIndStages(0);
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);
}
}
}