3157 lines
107 KiB
C
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);
|
|
}
|
|
}
|
|
}
|