marioparty4/src/REL/m430Dll/water.c
2025-01-09 05:46:22 +01:00

1818 lines
65 KiB
C

#include "dolphin/gx/GXEnum.h"
#include "dolphin/gx/GXStruct.h"
#include "dolphin/gx/GXVert.h"
#include "ext_math.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/flag.h"
#include "game/gamework_data.h"
#include "game/hsfanim.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "game/minigame_seq.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/printfunc.h"
#include "game/sprite.h"
#include "game/window.h"
#include "game/wipe.h"
#include "string.h"
#include "REL/m430Dll.h"
#ifndef __MWERKS__
#include "game/esprite.h"
#include "game/frand.h"
void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXBool signed_offsets, GXBool replace_mode, GXIndTexMtxID matrix_sel);
#endif
inline double fabs2(double x)
{
return (double)fabs(x);
}
typedef struct M430DllUnkStruct2 {
s32 unk_00;
s16 unk_04;
char unk06[2];
s16 unk_08;
s16 unk_0A;
Vec unk_0C;
Vec unk_18;
float unk_24;
float unk_28;
float unk_2C;
float unk_30;
float unk_34;
float unk_38;
} M430DllUnkStruct2; /* size 0x3C */
typedef struct M430DllWork {
s32 unk_00;
Vec unk_04;
s32 unk_10;
s32 unk_14;
s16 unk_18;
s16 unk_1A;
s16 unk_1C;
s16 unk_1E;
float unk_20;
s16 unk_24[0xC];
s32 unk_3C;
s16 unk_40[0xA];
s16 unk_54[0xA];
s16 unk_68[0xA];
s32 unk_7C;
s16 unk_80[6];
s16 unk_8C[6];
s16 unk_98[6];
s32 unk_A4[6];
s32 unk_BC;
M430DllUnkStruct2 *unk_C0;
} M430DllWork; /* size 0xC4 */
typedef struct M430DllWork2 {
s16 unk_00;
char unk02[4];
s16 unk_06;
Vec unk_08;
Vec unk_14;
float unk_20;
float unk_24;
float unk_28;
float unk_2C;
float unk_30;
float unk_34;
float unk_38;
float unk_3C;
} M430DllWork2; /* size 0x40 */
typedef struct M430DllBss60Struct {
/* 0x00 */ u32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ u32 unk_1C;
/* 0x20 */ s32 unk_20;
/* 0x24 */ float unk_24;
/* 0x28 */ float unk_28;
/* 0x2C */ Vec *unk_2C;
/* 0x30 */ Vec *unk_30;
/* 0x34 */ void *unk_34;
/* 0x38 */ void *unk_38;
/* 0x3C */ char pad_3C[4];
/* 0x40 */ s32 unk_40;
/* 0x44 */ Vec *unk_44[2];
/* 0x4C */ char pad_4C[8];
/* 0x54 */ GXColor *unk_54[2];
/* 0x5C */ s32 unk_5C;
/* 0x60 */ void *unk_60;
/* 0x64 */ u32 unk_64;
/* 0x68 */ u32 unk_68;
/* 0x6C */ void *unk_6C;
} M430DllBss60Struct; /* size = 0x70 */
void fn_1_4CB4(omObjData *object);
void fn_1_5DF8(omObjData *object);
void fn_1_6180(M430DllWork *arg0);
void fn_1_6540(M430DllWork *arg0);
void fn_1_6754(M430DllWork *arg0);
void fn_1_6DC8(M430DllWork *arg0);
M430DllUnkStruct2 *fn_1_70AC(omObjData *arg0, s32 arg1, s16 arg2);
void fn_1_732C(omObjData *object, M430DllUnkStruct2 *arg1);
void fn_1_76D8(omObjData *object, M430DllUnkStruct2 *arg1);
void fn_1_7848(omObjData *object);
void fn_1_7CAC(omObjData *object);
void fn_1_7EAC(omObjData *object, M430DllWork2 *arg1);
void fn_1_803C(omObjData *object);
void fn_1_8264(omObjData *object);
void fn_1_82F4(omObjData *object, M430DllBss60Struct *arg1);
void fn_1_86B4(omObjData *object, M430DllBss60Struct *arg1);
void fn_1_8B5C(omObjData *object, M430DllBss60Struct *arg1);
void fn_1_8CE0(ModelData *model, Mtx matrix);
void fn_1_963C(ModelData *model, Mtx matrix, u32 arg2);
void fn_1_9C90(ModelData *model, Mtx matrix);
void fn_1_A3A8(ModelData *model, Mtx matrix);
void fn_1_AB98(ModelData *model, Mtx matrix);
void fn_1_AC84(ModelData *model, Mtx matrix);
void fn_1_AD04(ModelData *model, ParticleData *particle, Mtx matrix);
void fn_1_B394(ModelData *model, ParticleData *particle, Mtx matrix);
float fn_1_BB54(u32 arg0);
AnimData *lbl_1_bss_150;
AnimData *lbl_1_bss_14C;
AnimData *lbl_1_bss_148;
AnimData *lbl_1_bss_144;
AnimData *lbl_1_bss_140;
M430DllBss60Struct lbl_1_bss_60[2];
s32 lbl_1_bss_5C;
omObjData *lbl_1_bss_58;
omObjData *lbl_1_bss_54;
omObjData *lbl_1_bss_50;
float lbl_1_bss_4C;
float lbl_1_bss_48;
s32 lbl_1_bss_44;
s32 lbl_1_bss_40;
void fn_1_4A80(Process *process)
{
omObjData *object;
lbl_1_bss_150 = HuSprAnimRead(HuDataReadNum(0x3D0019, 0x10000000));
lbl_1_bss_14C = HuSprAnimRead(HuDataReadNum(0x3D001A, 0x10000000));
lbl_1_bss_148 = HuSprAnimRead(HuDataReadNum(0x3D0014, 0x10000000));
lbl_1_bss_144 = HuSprAnimRead(HuDataReadNum(0x3D0017, 0x10000000));
lbl_1_bss_140 = HuSprAnimRead(HuDataReadNum(0x3D0018, 0x10000000));
object = lbl_1_bss_58 = omAddObjEx(process, 0x1E, 0x68, 0, -1, fn_1_4CB4);
object->work[0] = 0;
object = lbl_1_bss_54 = omAddObjEx(process, 0x1E, 7, 0, -1, fn_1_803C);
object->work[0] = 0;
object = lbl_1_bss_50 = omAddObjEx(process, 0x1E, 0, 0, -1, fn_1_7848);
object->work[0] = 0;
lbl_1_bss_5C = 0;
lbl_1_bss_44 = lbl_1_bss_40 = 0;
lbl_1_bss_4C = lbl_1_bss_48 = 0.0f;
}
void fn_1_4C48(void)
{
HuSprAnimKill(lbl_1_bss_150);
HuSprAnimKill(lbl_1_bss_14C);
HuSprAnimKill(lbl_1_bss_148);
HuSprAnimKill(lbl_1_bss_144);
HuSprAnimKill(lbl_1_bss_140);
}
void fn_1_4CB4(omObjData *object)
{
s32 var_r31;
M430DllWork *var_r30;
s32 var_r28;
s32 var_r27;
HsfData *var_r26;
s32 var_r25;
M430DllWork *work;
u32 spC[1] = { 0x3D0001 };
s32 sp8[1];
u32 sp90[4] = { 0x003D000B, 0x003D000C, 0x003D000D, 0x003D000E };
u32 sp80[4] = { 0x003D0002, 0x003D0002, 0x003D0003, 0x003D0003 };
u32 sp70[4] = { 0x003D0004, 0x003D0004, 0x00000000, 0x00000000 };
u32 sp60[4] = { 0x003D0006, 0x003D0007, 0x003D0008, 0x003D0009 };
s32 sp50[4];
s32 sp40[4];
s32 sp30[4];
s32 sp20[4];
s32 sp18[2] = { 1, 2 };
s32 sp10[2];
s32 spA0[6] = { 0, 3, 2, 1, 2, 3 };
object->stat |= 0x100;
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 2 * sizeof(M430DllWork), MEMORY_DEFAULT_NUM);
work = object->data;
memset(work, 0, 2 * sizeof(M430DllWork));
for (var_r30 = work, var_r31 = 0; var_r31 < 2; var_r31++, var_r30++) {
var_r30->unk_00 = var_r31;
var_r30->unk_04.x = var_r30->unk_04.y = var_r30->unk_04.z = 0.0f;
var_r30->unk_3C = 0;
var_r30->unk_7C = 0;
var_r30->unk_BC = 0;
}
var_r30 = work;
for (var_r31 = 0; var_r31 < 2; var_r31++) {
object->model[var_r31] = Hu3DModelCreateFile(0x3D0000);
var_r30[var_r31].unk_18 = object->model[var_r31];
Hu3DModelLayerSet(var_r30[var_r31].unk_18, 0);
Hu3DModelScaleSet(var_r30[var_r31].unk_18, 1.15f, 1.15f, 1.15f);
var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(0x3D000A), 1);
var_r30[var_r31].unk_1A = var_r27;
Hu3DModelLayerSet(var_r27, 1);
*((s16 *)Hu3DData[var_r27].unk_120) = 1;
var_r30[var_r31].unk_1C = Hu3DTexScrollCreate(var_r30[var_r31].unk_18, "pa_sk2");
var_r30[var_r31].unk_1E = Hu3DTexScrollCreate(var_r30[var_r31].unk_18, "pa_sk3");
Hu3DTexScrollPosMoveSet(var_r30[var_r31].unk_1C, -0.00009166667f, 0.0f, 0.0f);
Hu3DTexScrollPosMoveSet(var_r30[var_r31].unk_1E, -0.00020000001f, 0.0f, 0.0f);
var_r30[var_r31].unk_20 = 50000.0f;
var_r26 = Hu3DData[var_r30[var_r31].unk_18].hsfData;
for (var_r28 = 0; var_r28 < var_r26->materialCnt; var_r28++) {
var_r26->material[var_r28].flags &= 0xFFFFFDFF;
var_r26->material[var_r28].pass = 1;
var_r26->material[var_r28].invAlpha = 0.001f;
}
}
object->model[2] = Hu3DModelCreateFile(0x3D000F);
Hu3DModelLayerSet(object->model[2], 1);
Hu3DModelScaleSet(object->model[2], 1.5f, 1.5f, 1.5f);
object->model[3] = Hu3DModelCreateFile(0x3D0010);
Hu3DModelLayerSet(object->model[3], 2);
Hu3DModelScaleSet(object->model[3], 1.5f, 1.5f, 1.5f);
for (var_r31 = 0; var_r31 < 2; var_r31++) {
var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(0x3D0015), 0x64);
object->model[var_r31 + 4] = var_r27;
var_r30[var_r31].unk_10 = var_r27;
Hu3DModelLayerSet(var_r27, 2);
Hu3DParticleColSet(var_r27, 0xFF, 0xFF, 0xFF);
Hu3DParticleHookSet(var_r27, fn_1_AD04);
Hu3DModelPosSet(var_r27, 0.0f, 0.0f, 0.0f);
*((s16 *)Hu3DData[var_r27].unk_120) = 0;
}
for (var_r31 = 0; var_r31 < 2; var_r31++) {
var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(0x3D0015), 0x64);
object->model[var_r31 + 6] = var_r27;
var_r30[var_r31].unk_14 = var_r27;
Hu3DModelLayerSet(var_r27, 1);
Hu3DParticleColSet(var_r27, 0xFF, 0xFF, 0xFF);
Hu3DParticleHookSet(var_r27, fn_1_B394);
Hu3DModelPosSet(var_r27, 0.0f, 0.0f, 0.0f);
*((s16 *)Hu3DData[var_r27].unk_120) = 0;
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
sp20[var_r31] = Hu3DModelCreateFile(sp90[var_r31]);
}
for (var_r31 = 0; var_r31 < 0xC; var_r31++) {
var_r27 = sp20[var_r31 % 4];
object->model[var_r31 + 8] = Hu3DModelLink(var_r27);
object->model[var_r31 + 0x14] = Hu3DModelLink(var_r27);
var_r30[0].unk_24[var_r31] = object->model[var_r31 + 8];
var_r30[1].unk_24[var_r31] = object->model[var_r31 + 0x14];
Hu3DModelLayerSet(var_r30[0].unk_24[var_r31], 1);
Hu3DModelLayerSet(var_r30[1].unk_24[var_r31], 1);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
sp50[var_r31] = Hu3DModelCreateFile(sp80[var_r31]);
sp40[var_r31] = -1;
sp30[var_r31] = -1;
if (sp70[var_r31] != 0) {
sp40[var_r31] = Hu3DModelCreateFile(sp70[var_r31]);
}
}
for (var_r31 = 0; var_r31 < 6; var_r31++) {
s32 sp10[2] = { 0x5C, 0x62 };
var_r25 = spA0[var_r31];
var_r27 = sp50[var_r25];
for (var_r28 = 0; var_r28 < 2; var_r28++) {
object->model[var_r31 + sp10[var_r28]] = Hu3DModelLink(var_r27);
var_r30[var_r28].unk_80[var_r31] = object->model[var_r31 + sp10[var_r28]];
Hu3DModelLayerSet(var_r30[var_r28].unk_80[var_r31], 1);
}
for (var_r28 = 0; var_r28 < 2; var_r28++) {
var_r30[var_r28].unk_8C[var_r31] = -1;
var_r30[var_r28].unk_98[var_r31] = -1;
}
if (sp40[var_r25] >= 0) {
var_r27 = sp40[var_r25];
for (var_r28 = 0; var_r28 < 2; var_r28++) {
var_r30[var_r28].unk_8C[var_r31] = Hu3DModelLink(var_r27);
Hu3DModelLayerSet(var_r30[var_r28].unk_8C[var_r31], 4);
Hu3DModelAttrSet(var_r30[var_r28].unk_8C[var_r31], HU3D_ATTR_ZWRITE_OFF);
}
}
if (sp60[var_r25] != 0) {
for (var_r28 = 0; var_r28 < 2; var_r28++) {
var_r27 = Hu3DParticleCreate(HuSprAnimReadFile(sp60[var_r25]), 1);
var_r30[var_r28].unk_98[var_r31] = var_r27;
Hu3DModelLayerSet(var_r27, 5);
Hu3DParticleColSet(var_r27, 0xFF, 0xFF, 0xFF);
Hu3DModelPosSet(var_r27, 0.0f, 0.0f, 0.0f);
*((s16 *)Hu3DData[var_r27].unk_120) = 1;
}
}
}
for (var_r31 = 0; var_r31 < 1; var_r31++) {
sp8[var_r31] = Hu3DModelCreateFile(spC[var_r31]);
}
for (var_r31 = 0; var_r31 < 0x1E; var_r31 += 3) {
var_r27 = sp8[frandmod(1)];
object->model[var_r31 + 0x20] = Hu3DModelLink(var_r27);
object->model[var_r31 + 0x21] = Hu3DModelLink(var_r27);
object->model[var_r31 + 0x22] = Hu3DModelLink(var_r27);
object->model[var_r31 + 0x3E] = Hu3DModelLink(var_r27);
object->model[var_r31 + 0x3F] = Hu3DModelLink(var_r27);
object->model[var_r31 + 0x40] = Hu3DModelLink(var_r27);
var_r30->unk_40[var_r31 / 3] = object->model[var_r31 + 0x20];
var_r30->unk_54[var_r31 / 3] = object->model[var_r31 + 0x21];
var_r30->unk_68[var_r31 / 3] = object->model[var_r31 + 0x22];
var_r30[1].unk_40[var_r31 / 3] = object->model[var_r31 + 0x3E];
var_r30[1].unk_54[var_r31 / 3] = object->model[var_r31 + 0x3F];
var_r30[1].unk_68[var_r31 / 3] = object->model[var_r31 + 0x40];
Hu3DModelLayerSet(var_r30->unk_40[var_r31 / 3], 1);
Hu3DModelLayerSet(var_r30->unk_54[var_r31 / 3], 1);
Hu3DModelLayerSet(var_r30->unk_68[var_r31 / 3], 1);
Hu3DModelLayerSet(var_r30[1].unk_40[var_r31 / 3], 1);
Hu3DModelLayerSet(var_r30[1].unk_54[var_r31 / 3], 1);
Hu3DModelLayerSet(var_r30[1].unk_68[var_r31 / 3], 1);
}
for (var_r31 = 0; var_r31 < 2; var_r31++) {
var_r30[var_r31].unk_C0 = fn_1_70AC(object, var_r31, 8);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
Hu3DModelKill(sp20[var_r31]);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
Hu3DModelKill(sp50[var_r31]);
if (sp40[var_r31] >= 0) {
Hu3DModelKill(sp40[var_r31]);
}
if (sp30[var_r31] >= 0) {
Hu3DModelKill(sp30[var_r31]);
}
}
for (var_r31 = 0; var_r31 < 1; var_r31++) {
Hu3DModelKill(sp8[var_r31]);
}
for (var_r30 = work, var_r31 = 0; var_r31 < 2; var_r31++, var_r30++) {
Hu3DModelCameraSet(var_r30->unk_18, sp18[var_r31]);
Hu3DModelCameraSet(var_r30->unk_1A, sp18[var_r31]);
Hu3DModelCameraSet(var_r30->unk_10, sp18[var_r31]);
Hu3DModelCameraSet(var_r30->unk_14, sp18[var_r31]);
for (var_r28 = 0; var_r28 < 0xC; var_r28++) {
Hu3DModelCameraSet(var_r30->unk_24[var_r28], sp18[var_r31]);
}
for (var_r28 = 0; var_r28 < 6; var_r28++) {
Hu3DModelCameraSet(var_r30->unk_80[var_r28], sp18[var_r31]);
Hu3DModelAttrSet(var_r30->unk_80[var_r28], HU3D_ATTR_DISPOFF);
if (var_r30->unk_8C[var_r28] >= 0) {
Hu3DModelCameraSet(var_r30->unk_8C[var_r28], sp18[var_r31]);
Hu3DModelAttrSet(var_r30->unk_8C[var_r28], HU3D_ATTR_DISPOFF);
}
if (var_r30->unk_98[var_r28] >= 0) {
Hu3DModelCameraSet(var_r30->unk_98[var_r28], sp18[var_r31]);
Hu3DModelAttrSet(var_r30->unk_98[var_r28], HU3D_ATTR_DISPOFF);
}
}
for (var_r28 = 0; var_r28 < 0xA; var_r28++) {
Hu3DModelCameraSet(var_r30->unk_40[var_r28], sp18[var_r31]);
Hu3DModelCameraSet(var_r30->unk_54[var_r28], sp18[var_r31]);
Hu3DModelCameraSet(var_r30->unk_68[var_r28], sp18[var_r31]);
Hu3DModelAttrSet(var_r30->unk_40[var_r28], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(var_r30->unk_54[var_r28], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(var_r30->unk_68[var_r28], HU3D_ATTR_DISPOFF);
}
}
Hu3DModelCameraSet(object->model[2], sp18[0]);
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
Hu3DModelCameraSet(object->model[3], sp18[0]);
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
object->func = fn_1_5DF8;
}
void fn_1_5DF8(omObjData *object)
{
M430DllWork *var_r31;
s32 var_r29;
M430DllWork *work;
work = object->data;
if ((fn_1_4070() >= 2) && (fn_1_4030() != 0)) {
var_r31 = work;
if ((lbl_1_bss_44 == 0) && (fn_1_4130() < 5.0f)) {
lbl_1_bss_4C = var_r31[0].unk_04.x;
if (lbl_1_bss_4C > var_r31[1].unk_04.x) {
lbl_1_bss_4C = var_r31[1].unk_04.x;
}
lbl_1_bss_44 = 1;
}
if ((lbl_1_bss_40 == 0) && (fn_1_4130() < 1.8f)) {
lbl_1_bss_48 = var_r31[0].unk_04.x;
if (lbl_1_bss_48 > var_r31[1].unk_04.x) {
lbl_1_bss_48 = var_r31[1].unk_04.x;
}
lbl_1_bss_40 = 1;
}
}
for (var_r31 = work, var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) {
var_r31->unk_04.z = var_r31->unk_04.x;
var_r31->unk_04.x = var_r31->unk_04.y;
fn_1_6180(var_r31);
fn_1_6540(var_r31);
fn_1_6DC8(var_r31);
fn_1_6754(var_r31);
fn_1_732C(object, var_r31->unk_C0);
fn_1_76D8(object, var_r31->unk_C0);
if (var_r29 != 0) {
if (fn_1_4030() != 0) {
Hu3DModelCameraSet(var_r31->unk_10, 2);
Hu3DModelCameraSet(var_r31->unk_14, 2);
}
else {
Hu3DModelCameraSet(var_r31->unk_10, 1);
Hu3DModelCameraSet(var_r31->unk_14, 1);
}
}
}
if (lbl_1_bss_5C != 0) {
Vec sp20 = { 0.0f, 3000.0f, 0.0f };
Vec sp14 = { 0.0f, 0.0f, 0.0f };
Vec sp8 = { 0.0f, 1.0f, 0.0f };
Hu3DModelAttrReset(object->model[2], HU3D_ATTR_DISPOFF);
Hu3DModelShadowMapSet(object->model[2]);
Hu3DModelPosSet(object->model[2], 0.0f, 0.0f, fn_1_7FBC(0) - 400.0f);
Hu3DModelAttrReset(object->model[3], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(object->model[3], 0.0f, 0.0f, fn_1_7FBC(0) - 400.0f);
sp20.z = sp14.z = fn_1_7FBC(0) - 400.0f;
sp20.z += 100.0f;
Hu3DShadowPosSet(&sp20, &sp8, &sp14);
return;
}
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
}
void fn_1_6180(M430DllWork *work)
{
Vec sp28;
Vec sp1C;
Vec sp10;
HsfanimStruct01 *var_r30;
s32 var_r29;
float sp8[2] = { -450.0f, 450.0f };
sp1C.x = CenterM[work->unk_00].x;
sp1C.y = CenterM[work->unk_00].y + (CZoomM[work->unk_00] * sind(-CRotM[work->unk_00].x));
sp1C.z = CenterM[work->unk_00].z + (CZoomM[work->unk_00] * cosd(-CRotM[work->unk_00].x));
sp28.x = sp1C.x;
sp28.y = 0.0f;
sp28.z = sp1C.z - 450000.0f;
PSVECSubtract(&sp28, &sp1C, &sp10);
PSVECNormalize(&sp10, &sp10);
PSVECScale(&sp10, &sp10, 6000.0f);
PSVECAdd(&sp1C, &sp10, &sp28);
Hu3DModelPosSetV(work->unk_18, &sp28);
if ((fn_1_4070() >= 2) && (fn_1_4030() != 0)) {
if ((lbl_1_bss_40 != 0) && (lbl_1_bss_48 >= work->unk_04.x)) {
if (work->unk_20 > 0.0f) {
work->unk_20 = fn_1_7FBC(work->unk_00) - 23000.0f;
}
sp28.x = 0.0f;
sp28.y = 0.0f;
sp28.z = work->unk_20 - fn_1_7FBC(work->unk_00);
PSVECSubtract(&sp28, &sp1C, &sp10);
PSVECNormalize(&sp10, &sp10);
PSVECScale(&sp10, &sp10, 5000.0f);
PSVECAdd(&sp1C, &sp10, &sp28);
sp28.y += 237.5f;
Hu3DModelPosSet(work->unk_1A, 0.0f, 593.75f, work->unk_20);
var_r30 = ((ParticleData *)Hu3DData[work->unk_1A].unk_120)->unk_48;
var_r30->unk34.x = var_r30->unk34.y = var_r30->unk34.z = 0.0f;
var_r30->unk2C = 2000.0f;
var_r29 = var_r30->unk40.a;
var_r29 += 2;
if (var_r29 > 0xFF) {
var_r29 = 0xFF;
}
var_r30->unk40.a = var_r29;
}
}
else {
var_r30 = ((ParticleData *)Hu3DData[work->unk_1A].unk_120)->unk_48;
var_r30->unk2C = 0.0f;
var_r30->unk40.a = 0;
}
DCStoreRange(var_r30, sizeof(HsfanimStruct01));
}
void fn_1_6540(M430DllWork *work)
{
float var_f31;
float var_f30;
float var_f29;
s32 var_r30;
s32 var_r29;
s32 var_r28;
var_r28 = 1;
var_f29 = work->unk_04.x;
work->unk_3C = (s32)(fabs2(var_f29) / 1000.0) % 12;
var_r30 = work->unk_3C;
var_f31 = 1000.0f * (s32)(work->unk_04.x / 1000.0f);
var_f30 = 4000.0f;
for (var_r29 = 0; var_r29 < 0xC; var_r29++) {
if (var_r28 != 0) {
Hu3DModelAttrReset(work->unk_24[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(work->unk_24[var_r30], 0.0f, 0.0f, var_f31);
var_f31 -= 1000.0f;
var_f30 -= 1000.0f;
if (var_f30 < 0.0f) {
var_r28 = 0;
}
}
else {
Hu3DModelAttrSet(work->unk_24[var_r30], HU3D_ATTR_DISPOFF);
}
var_r30 = (var_r30 + 1) % 12;
}
}
void fn_1_6754(M430DllWork *work)
{
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
float var_f26;
s32 var_r30;
HsfanimStruct01 *var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
s32 var_r23;
var_r27 = 1;
{
float sp20[6] = { -1800.0f, 2000.0f, -1800.0f, 2000.0f, -1800.0f, 2000.0f };
Vec2f sp38[6] = {
{ -130.0f, 500.0f },
{ 180.0f, 70.0f },
{ 100.0f, 50.0f },
{ -30.000002f, 500.0f },
{ 100.0f, 50.0f },
{ 180.0f, 70.0f },
};
float sp8[6] = { 2750.0f, 1550.0f, 1450.0f, 2750.0f, 1450.0f, 1550.0f };
if (lbl_1_bss_5C != 0) {
var_r27 = 0;
}
if ((fn_1_4070() == 0) || (fn_1_4030() == 0) || (lbl_1_bss_44 == 0) || !(lbl_1_bss_4C > work->unk_04.x)) {
for (var_r28 = 0; var_r28 < 6; var_r28++) {
work->unk_A4[var_r28] = 1;
}
}
var_f26 = work->unk_04.x;
work->unk_BC = (s32)(fabs2(var_f26) / 5000.0) % 6;
var_r30 = work->unk_BC;
var_f31 = 1000.0f + (5000.0f * (s32)(work->unk_04.x / 5000.0f));
var_f28 = (1000.0f + work->unk_04.x) - 9000.0f;
var_f27 = (1000.0f + work->unk_04.x) - 20000.0f;
for (var_r28 = 0; var_r28 < 6; var_r28++) {
var_r25 = var_r24 = var_r23 = 1;
if ((var_r27 != 0) && (work->unk_A4[var_r30] != 0)) {
if ((var_f31 > var_f28) || ((work->unk_98[var_r30] >= 0) && (var_f31 > var_f27))) {
if (var_f31 > var_f28) {
Hu3DModelAttrReset(work->unk_80[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(work->unk_80[var_r30], sp20[var_r30], 0.0f, var_f31);
if (work->unk_8C[var_r30] >= 0) {
Hu3DModelAttrReset(work->unk_8C[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(work->unk_8C[var_r30], sp20[var_r30], 0.0f, var_f31);
}
var_r25 = var_r24 = 0;
}
if ((work->unk_98[var_r30] >= 0) && (var_f31 > var_f27) && (var_f31 < (1000.0f + var_f28))) {
var_r26 = work->unk_98[var_r30];
Hu3DModelAttrReset(var_r26, HU3D_ATTR_DISPOFF);
var_r29 = ((ParticleData *)Hu3DData[var_r26].unk_120)->unk_48;
Hu3DModelPosSet(work->unk_98[var_r30], sp20[var_r30] + sp38[var_r30].x, sp38[var_r30].y, var_f31);
var_r29->unk34.x = var_r29->unk34.y = var_r29->unk34.z = 0.0f;
var_r29->unk2C = sp8[var_r30];
var_r29->unk40.a = -1;
var_f30 = fabs(var_f27 - var_f31);
var_f29 = 1000.0f - (var_f31 - var_f28);
if (var_f30 < 2000.0f) {
var_f30 *= 0.0005f;
var_r29->unk40.a = 255.0f * var_f30;
}
else if (var_f29 < 1000.0f) {
var_f29 *= 0.001f;
var_r29->unk40.a = 255.0f * var_f29;
}
DCStoreRange(var_r29, sizeof(HsfanimStruct01));
var_r23 = 0;
}
}
}
else {
work->unk_A4[var_r30] = 0;
}
if (var_r25 != 0) {
Hu3DModelAttrSet(work->unk_80[var_r30], HU3D_ATTR_DISPOFF);
}
if ((var_r24 != 0) && (work->unk_8C[var_r30] >= 0)) {
Hu3DModelAttrSet(work->unk_8C[var_r30], HU3D_ATTR_DISPOFF);
}
if ((var_r23 != 0) && (work->unk_98[var_r30] >= 0)) {
Hu3DModelAttrSet(work->unk_98[var_r30], HU3D_ATTR_DISPOFF);
}
var_f31 -= 5000.0f;
if (var_f31 < var_f27) {
var_r27 = 0;
}
var_r30 = (var_r30 + 1) % 6;
}
}
}
void fn_1_6DC8(M430DllWork *work)
{
float var_f31;
float var_f30;
float var_f29;
s32 var_r30;
s32 var_r29;
s32 var_r28;
var_r28 = 1;
if (lbl_1_bss_5C != 0) {
var_r28 = 0;
}
var_f29 = work->unk_04.x;
work->unk_7C = (s32)(fabs2(var_f29) / 1000.0) % 10;
var_r30 = work->unk_7C;
var_f31 = 1000.0f + (1000.0f * (s32)(work->unk_04.x / 1000.0f));
var_f30 = 8000.0f;
for (var_r29 = 0; var_r29 < 0xA; var_r29++) {
if (var_r28 != 0) {
Hu3DModelAttrReset(work->unk_40[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelAttrReset(work->unk_54[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelAttrReset(work->unk_68[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(work->unk_40[var_r30], -920.0f, 0.0f, var_f31);
Hu3DModelPosSet(work->unk_54[var_r30], 0.0f, 0.0f, var_f31);
Hu3DModelPosSet(work->unk_68[var_r30], 920.0f, 0.0f, var_f31);
var_f31 -= 1000.0f;
var_f30 -= 1000.0f;
if (var_f30 < 0.0f) {
var_r28 = 0;
}
}
else {
Hu3DModelAttrSet(work->unk_40[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(work->unk_54[var_r30], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(work->unk_68[var_r30], HU3D_ATTR_DISPOFF);
}
var_r30 = (var_r30 + 1) % 10;
}
}
M430DllUnkStruct2 *fn_1_70AC(omObjData *arg0, s32 var_r27, s16 var_r28)
{
float var_f31;
float var_f30;
float var_f29;
M430DllUnkStruct2 *var_r31;
s32 var_r30;
M430DllUnkStruct2 *var_r29;
u32 sp10[2] = { 0x003D0011, 0x003D0012 };
s32 sp8[2] = { 1, 2 };
var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r28 * sizeof(M430DllUnkStruct2), MEMORY_DEFAULT_NUM);
memset(var_r29, 0, var_r28 * 0x3C);
var_f31 = -90.0f;
for (var_r31 = var_r29, var_r30 = 0; var_r30 < var_r28; var_r30++, var_r31++) {
var_r31->unk_00 = var_r27;
var_r31->unk_04 = Hu3DModelCreateFile(sp10[var_r30 & 1]);
Hu3DModelLayerSet(var_r31->unk_04, 1);
Hu3DModelCameraSet(var_r31->unk_04, sp8[var_r31->unk_00]);
var_f30 = frandmod(0x168);
var_f29 = frandmod(0x118);
var_r31->unk_0C.x = var_f29 * sind(var_f30) + fn_1_BB54(var_r27);
var_r31->unk_0C.y = var_f31;
var_r31->unk_0C.z = var_f29 * cosd(var_f30);
var_r31->unk_2C = frandmod(0x168);
var_r31->unk_34 = 1.0f;
var_r31->unk_38 = 0.0f;
var_f31 -= 10.0f;
var_r31->unk_0A = var_r28;
}
return var_r29;
}
void fn_1_732C(omObjData *object, M430DllUnkStruct2 *arg1)
{
Vec sp8;
float var_f31;
float var_f30;
float var_f29;
s32 var_r30;
s32 var_r29;
s32 var_r28;
var_r28 = arg1->unk_0A;
for (var_r30 = 0; var_r30 < var_r28; var_r30++, arg1++) {
var_r29 = 0;
if (arg1->unk_34 > arg1->unk_38) {
var_r29 = 1;
}
else {
PSVECSubtract(&arg1->unk_18, &arg1->unk_0C, &sp8);
var_f31 = PSVECMag(&sp8);
if (var_f31 < 50.0f) {
var_r29 = 1;
}
}
if (var_r29 != 0) {
var_f31 = frandmod(0x168);
var_f30 = 400.0f + frandmod(0x15E);
arg1->unk_18.x = var_f30 * sind(var_f31) + fn_1_BB54(arg1->unk_00);
arg1->unk_18.z = 2.0 * (var_f30 * cosd(var_f31));
arg1->unk_18.y = arg1->unk_0C.y;
arg1->unk_34 = 0.0f;
arg1->unk_38 = 200.0f + frandmod(0x258);
arg1->unk_28 = 400.0f;
}
PSVECSubtract(&arg1->unk_18, &arg1->unk_0C, &sp8);
arg1->unk_30 = atan2d(sp8.x, sp8.z);
arg1->unk_2C = fn_1_48B0(arg1->unk_2C, arg1->unk_30, 0.08f);
arg1->unk_28 += 0.05f * (300.0f - arg1->unk_28);
arg1->unk_24 += 0.2f * (arg1->unk_28 - arg1->unk_24);
arg1->unk_0C.x = arg1->unk_0C.x + ((0.016666668f * arg1->unk_24) * sind(arg1->unk_2C));
arg1->unk_0C.z = arg1->unk_0C.z + ((0.016666668f * arg1->unk_24) * cosd(arg1->unk_2C));
arg1->unk_34 += 0.016666668f * arg1->unk_24;
}
}
void fn_1_76D8(omObjData *object, M430DllUnkStruct2 *arg1)
{
float var_f31;
s32 var_r30;
s32 var_r29;
var_r29 = arg1->unk_0A;
if (lbl_1_bss_5C != 0) {
for (var_r30 = 0; var_r30 < var_r29; var_r30++, arg1++) {
Hu3DModelAttrSet(arg1->unk_04, HU3D_ATTR_DISPOFF);
}
return;
}
var_f31 = (s32)(0.00011111111f * (1000.0f + fn_1_7FBC(arg1->unk_00)));
var_f31 = (100.0f * (90.0f * var_f31)) - 5000.0f;
for (var_r30 = 0; var_r30 < var_r29; var_r30++, arg1++) {
Hu3DModelPosSet(arg1->unk_04, arg1->unk_0C.x, arg1->unk_0C.y, arg1->unk_0C.z + var_f31);
Hu3DModelRotSet(arg1->unk_04, 0.0f, arg1->unk_2C, 0.0f);
Hu3DModelAttrReset(arg1->unk_04, HU3D_ATTR_DISPOFF);
}
}
void fn_1_7848(omObjData *object)
{
float var_f31;
float var_f30;
float var_f29;
float var_f28;
M430DllWork2 *var_r31;
s16 var_r30;
s32 var_r29;
M430DllWork2 *work;
s32 var_r26;
var_r30 = 0x20;
work = HuMemDirectMallocNum(HEAP_SYSTEM, var_r30 * sizeof(M430DllWork2), MEMORY_DEFAULT_NUM);
object->data = work;
memset(work, 0, var_r30 * sizeof(M430DllWork2));
var_r26 = Hu3DModelCreateFile(0x3D0013);
var_f29 = 1000.0f;
for (var_r31 = work, var_r29 = 0; var_r29 < var_r30; var_r29++, var_r31++) {
var_r31->unk_00 = Hu3DModelLink(var_r26);
Hu3DModelLayerSet(var_r31->unk_00, 1);
Hu3DModelCameraSet(var_r31->unk_00, 1);
Hu3DModelAttrSet(var_r31->unk_00, HU3D_ATTR_DISPOFF);
var_r31->unk_14.x = (2.8f * frandmod(0x3E8)) - 1400.0f;
var_r31->unk_14.z = 0.7f * frandmod(0x3E8) - 350.0f;
var_r31->unk_14.y = 300.0f + (0.8f * frandmod(0x3E8));
var_f30 = frandmod(0x168);
var_f31 = 200.0f + frandmod(0xAF);
var_r31->unk_08.x = var_f31 * sind(var_f30);
var_r31->unk_08.y = 0.0f;
var_r31->unk_08.z = var_f31 * cosd(var_f30);
PSVECAdd(&var_r31->unk_14, &var_r31->unk_08, &var_r31->unk_08);
var_r31->unk_38 = 60.0f - (0.13483146f * var_f31);
var_r31->unk_28 = frandmod(0x168);
if (frandmod(0x3E8) < 0x1F4) {
var_f28 = -70.0f + (0.1f * frandmod(0x32));
}
else {
var_f28 = 70.0f - (0.1f * frandmod(0x32));
}
var_r31->unk_3C = var_f28;
if (var_r31->unk_3C < 0.0f) {
var_r31->unk_38 = -var_r31->unk_38;
}
var_r31->unk_30 = 1.0f;
var_r31->unk_34 = 0.0f;
var_f29 -= 50.0f;
var_r31->unk_06 = var_r30;
}
(void)var_r29;
(void)object;
Hu3DModelKill(var_r26);
object->func = fn_1_7CAC;
}
void fn_1_7CAC(omObjData *object)
{
Vec spC;
s32 sp8;
s32 var_r29;
M430DllWork2 *work = object->data;
s32 var_r28 = work->unk_06;
if (fn_1_4070() >= 4) {
for (var_r29 = 0; var_r29 < var_r28; var_r29++, work++) {
sp8 = 0;
PSVECSubtract(&work->unk_14, &work->unk_08, &spC);
work->unk_2C = atan2d(spC.x, spC.z);
work->unk_28 = fn_1_48B0(work->unk_28, work->unk_2C + work->unk_3C, 0.08f);
work->unk_24 += (0.05f * (600.0f - work->unk_24));
work->unk_20 += (0.2f * (work->unk_24 - work->unk_20));
work->unk_08.x += ((0.016666668f * work->unk_20) * sind(work->unk_28));
work->unk_08.z += ((0.016666668f * work->unk_20) * cosd(work->unk_28));
work->unk_30 += (0.016666668f * work->unk_20);
}
fn_1_7EAC(object, object->data);
}
}
void fn_1_7EAC(omObjData *object, M430DllWork2 *var_r31)
{
Mtx sp8;
float var_f31;
s32 var_r30;
Mtx *var_r29;
s32 var_r28;
var_r28 = var_r31->unk_06;
var_f31 = fn_1_7FBC(0) - 2000.0f;
for (var_r30 = 0; var_r30 < var_r28; var_r30++, var_r31++) {
Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_08.x, var_r31->unk_08.y, var_r31->unk_08.z + var_f31);
var_r29 = &Hu3DData[var_r31->unk_00].unk_F0;
PSMTXRotRad(*var_r29, 0x59, 0.017453292f * var_r31->unk_28);
PSMTXRotRad(sp8, 0x5A, 0.017453292f * var_r31->unk_38);
PSMTXConcat(*var_r29, sp8, *var_r29);
Hu3DModelAttrReset(var_r31->unk_00, HU3D_ATTR_DISPOFF);
}
}
float fn_1_7FBC(s32 arg0)
{
M430DllWork *var_r31;
M430DllWork *var_r30;
var_r30 = lbl_1_bss_58->data;
arg0 &= 1;
var_r31 = var_r30;
return var_r31[arg0].unk_04.x;
}
void fn_1_7FFC(s32 arg0, float arg8)
{
M430DllWork *var_r31;
M430DllWork *var_r30;
var_r30 = lbl_1_bss_58->data;
arg0 &= 1;
var_r31 = var_r30;
var_r31[arg0].unk_04.y = arg8;
}
void fn_1_803C(omObjData *var_r31)
{
var_r31->stat |= 0x100;
omSetStatBit(var_r31, 0xA0);
var_r31->model[0] = Hu3DHookFuncCreate(fn_1_8CE0);
Hu3DModelLayerSet(var_r31->model[0], 4);
Hu3DModelCameraSet(var_r31->model[0], 1);
var_r31->model[1] = Hu3DHookFuncCreate(fn_1_8CE0);
Hu3DModelLayerSet(var_r31->model[1], 4);
Hu3DModelCameraSet(var_r31->model[1], 2);
var_r31->model[2] = Hu3DHookFuncCreate(fn_1_9C90);
Hu3DModelLayerSet(var_r31->model[2], 0);
Hu3DModelCameraSet(var_r31->model[2], 1);
var_r31->model[3] = Hu3DHookFuncCreate(fn_1_9C90);
Hu3DModelLayerSet(var_r31->model[3], 0);
Hu3DModelCameraSet(var_r31->model[3], 2);
var_r31->model[4] = Hu3DHookFuncCreate(fn_1_A3A8);
Hu3DModelLayerSet(var_r31->model[4], 1);
Hu3DModelCameraSet(var_r31->model[4], 3);
var_r31->model[5] = Hu3DHookFuncCreate(fn_1_AB98);
Hu3DModelLayerSet(var_r31->model[5], 3);
Hu3DModelCameraSet(var_r31->model[5], 3);
var_r31->model[6] = Hu3DHookFuncCreate(fn_1_AC84);
Hu3DModelLayerSet(var_r31->model[6], 7);
Hu3DModelCameraSet(var_r31->model[6], 3);
lbl_1_bss_60->unk_00 = 0;
lbl_1_bss_60->unk_04 = var_r31->model[0];
fn_1_82F4(var_r31, lbl_1_bss_60);
lbl_1_bss_60[1].unk_00 = 1;
lbl_1_bss_60[1].unk_04 = var_r31->model[1];
fn_1_82F4(var_r31, &lbl_1_bss_60[1]);
var_r31->func = fn_1_8264;
}
void fn_1_8264(omObjData *object)
{
lbl_1_bss_60[0].unk_08 = lbl_1_bss_60[1].unk_08 = 0;
lbl_1_bss_60[0].unk_0C = lbl_1_bss_60[1].unk_0C = 0;
lbl_1_bss_60[0].unk_10 = lbl_1_bss_60[1].unk_10 = 0;
lbl_1_bss_60[0].unk_14 = lbl_1_bss_60[1].unk_14 = 0;
lbl_1_bss_60[0].unk_18 = lbl_1_bss_60[1].unk_18 = 0;
}
void fn_1_82F4(omObjData *object, M430DllBss60Struct *var_r31)
{
float var_f31;
float var_f30;
s32 var_r30;
Vec *var_r29;
GXColor *var_r28;
s32 var_r27;
s32 sp8[8] = { 0, 0x16, 1, 0x17, 1, 0, 0x17, 0x16 };
var_r31->unk_2C = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(Vec), MEMORY_DEFAULT_NUM);
var_r31->unk_30 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(Vec), MEMORY_DEFAULT_NUM);
var_r31->unk_34 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14A0, MEMORY_DEFAULT_NUM);
var_r31->unk_38 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x6E0, MEMORY_DEFAULT_NUM);
var_r31->unk_40 = 0;
for (var_r30 = 0; var_r30 < 2; var_r30++) {
var_r31->unk_44[var_r30] = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(Vec), MEMORY_DEFAULT_NUM);
var_r31->unk_54[var_r30] = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B8 * sizeof(GXColor), MEMORY_DEFAULT_NUM);
}
var_r31->unk_5C = 0x12D0;
var_r31->unk_60 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_5C, MEMORY_DEFAULT_NUM);
DCFlushRange(var_r31->unk_60, var_r31->unk_5C);
var_r31->unk_64 = 0;
var_r31->unk_68 = GXGetTexBufferSize(0x140, 0x1E0, 5, 0, 0);
if (var_r31->unk_00 == 0) {
var_r31->unk_68 *= 2;
}
var_r31->unk_6C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_68, MEMORY_DEFAULT_NUM);
DCFlushRange(var_r31->unk_6C, var_r31->unk_68);
var_r31->unk_1C = 0;
var_r31->unk_20 = 0;
var_r31->unk_24 = 0.0f;
var_r31->unk_28 = 0.0f;
var_r29 = var_r31->unk_2C;
var_f31 = 0.0f;
var_f30 = -2000.0f;
for (var_r30 = 0; var_r30 < 0x14; var_r30++) {
var_f31 = 65.47619f - var_f31;
for (var_r27 = 0; var_r27 < 0x16; var_r27++) {
var_r29->x = ((130.95238f * var_r27) - 1375.0f) + var_f31;
var_r29->y = 0.0f;
var_r29->z = var_f30;
var_r29++;
}
var_f30 += 210.52632f;
}
memset(var_r31->unk_30, 0, 0x1B8 * sizeof(Vec));
for (var_r29 = var_r31->unk_30, var_r30 = 0; var_r30 < 0x1B8; var_r30++, var_r29++) {
var_r29->y = (0.05f * frandmod(0x3E8)) - 20.0f;
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
memcpy(var_r31->unk_44[var_r30], var_r31->unk_2C, 0x1B8 * sizeof(Vec));
for (var_r28 = var_r31->unk_54[var_r30], var_r27 = 0; var_r27 < 0x1B8; var_r27++, var_r28++) {
var_r28->r = 0x32;
var_r28->g = 0x8C;
var_r28->b = 0xB4;
var_r28->a = 0;
}
}
fn_1_86B4(object, var_r31);
fn_1_8B5C(object, var_r31);
}
void fn_1_86B4(omObjData *object, M430DllBss60Struct *arg1)
{
Vec sp14;
Vec sp8;
float var_f31;
float var_f30;
float var_f29;
float var_f28;
GXColor *var_r30;
s32 var_r29;
Vec *var_r28;
Vec *var_r27;
Vec *var_r26;
u32 var_r25;
s32 var_r24;
s32 var_r23;
M430DllWork *var_r22;
M430DllWork *var_r21;
if (omPauseChk() == 0) {
arg1->unk_1C++;
}
arg1->unk_40 = 1 - arg1->unk_40;
var_r25 = arg1->unk_00;
var_r21 = lbl_1_bss_58->data;
var_r25 &= 1;
var_r22 = var_r21;
var_f29 = var_r22[var_r25].unk_04.x;
var_f28 = var_f29;
var_f30 = var_f28;
var_r24 = 0.002375f * var_f30;
arg1->unk_28 = 421.05264f * var_r24;
arg1->unk_24 = var_f30 - arg1->unk_28;
arg1->unk_20 = (var_r24 * 2) % 20;
var_r23 = (arg1->unk_20 + 0x14) % 20;
Hu3DModelPosSet(arg1->unk_04, fn_1_BB54(arg1->unk_00), 0.0f, arg1->unk_28 - 500.0f);
var_r28 = arg1->unk_2C;
var_r30 = arg1->unk_54[arg1->unk_40];
sp14.x = 0.0f;
sp14.y = 0.0f;
sp14.z = 2000.0f + arg1->unk_24;
if (lbl_1_bss_5C != 0) {
for (var_r29 = 0; var_r29 < 0x1B8; var_r29++) {
PSVECSubtract(var_r28, &sp14, &sp8);
var_f31 = 0.00025f * PSVECMag(&sp8);
if (var_f31 < 0.3f) {
var_r30->a = -1;
}
else if (var_f31 > 0.75f) {
var_r30->a = 0;
}
else {
var_f31 = 255.0f - (566.6667f * (var_f31 - 0.3f));
var_r30->a = var_f31;
}
var_r28++;
var_r30++;
}
}
else {
for (var_r29 = 0; var_r29 < 0x1B8; var_r29++) {
PSVECSubtract(var_r28, &sp14, &sp8);
var_f31 = 0.00025f * PSVECMag(&sp8);
if (var_f31 < 0.25f) {
var_r30->a = -0x1A;
}
else if (var_f31 > 0.85f) {
var_r30->a = 0;
}
else {
var_f31 = 230.0f - (383.3333f * (var_f31 - 0.25f));
var_r30->a = var_f31;
}
var_r28++;
var_r30++;
}
}
if (lbl_1_bss_5C != 0) {
memcpy(arg1->unk_44[arg1->unk_40], arg1->unk_2C, 0x1B8 * sizeof(Vec));
}
else {
var_r28 = arg1->unk_2C;
var_r26 = arg1->unk_44[arg1->unk_40];
var_r29 = (0x14 - var_r23) * 0x16;
var_r27 = &arg1->unk_30[0x1B8 - var_r29];
while (var_r29-- != 0) {
PSVECAdd(var_r28, var_r27, var_r26);
var_r28++;
var_r27++;
var_r26++;
}
var_r29 = var_r23 * 0x16;
var_r27 = arg1->unk_30;
while (var_r29-- != 0) {
PSVECAdd(var_r28, var_r27, var_r26);
var_r28++;
var_r27++;
var_r26++;
}
memcpy(arg1->unk_44[arg1->unk_40], arg1->unk_2C, 0x16 * sizeof(Vec));
}
DCStoreRangeNoSync(arg1->unk_44[arg1->unk_40], 0x1B8 * sizeof(Vec));
DCStoreRangeNoSync(arg1->unk_54[arg1->unk_40], 0x1B8 * sizeof(GXColor));
PPCSync();
}
void fn_1_8B5C(omObjData *object, M430DllBss60Struct *var_r30)
{
s32 var_r31;
s32 var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
s32 sp28[5] = { 0, 0, 0, 1, 1 };
s32 sp18[4] = { 1, 0, 0, 0 };
s32 sp8[4] = { 0, 0, 1, 2 };
GXBeginDisplayList(var_r30->unk_60, var_r30->unk_5C);
var_r26 = 0;
var_r31 = 0;
for (var_r29 = 0; var_r29 < 0x13; var_r29++) {
var_r24 = 0x2B - (((var_r26 * 2) + sp8[var_r31]) * 2);
var_r27 = sp18[var_r31];
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, var_r24);
for (var_r28 = 0; var_r28 < var_r24; var_r28++) {
var_r25 = (var_r28 >> 1) + ((var_r29 + var_r27) * 0x16) + (var_r26 + sp28[var_r31 + var_r27]);
GXUnknownu16(var_r25);
GXUnknownu16(var_r25);
var_r27 = 1 - var_r27;
}
var_r31++;
if (var_r31 >= 4) {
var_r31 = 0;
var_r26++;
}
}
var_r30->unk_64 = GXEndDisplayList();
}
void fn_1_8CE0(ModelData *model, Mtx matrix)
{
Mtx sp194;
Mtx sp164;
Mtx sp134;
Mtx sp104;
Mtx spD4;
Mtx spA4;
Mtx sp74;
Mtx sp44;
GXTexObj sp24;
float var_f31;
float var_f30;
M430DllBss60Struct *var_r31;
GXColor sp20 = { 0xFF, 0xFF, 0xFF, 0xFF };
GXColor sp1C = { 0x08, 0x08, 0x08, 0xFF };
GXColor sp18 = { 0x00, 0x00, 0x00, 0x80 };
GXColor sp14 = { 0xCC, 0xBF, 0xB2, 0x33 };
GXColor sp10 = { 0xE0, 0xD8, 0xF4, 0x08 };
var_r31 = lbl_1_bss_60;
if (var_r31->unk_10 != 0) {
var_r31 = &var_r31[1];
}
var_r31->unk_10 = 1;
fn_1_963C(model, matrix, var_r31->unk_00);
PSMTXCopy(matrix, sp134);
if (fn_1_4030() != 0) {
var_f30 = 1.0f;
var_f31 = fn_1_BB54(var_r31->unk_00);
}
else {
var_f30 = 1.5f;
var_f31 = 0.0f;
}
PSMTXTrans(sp164, var_f31 - fn_1_BB54(var_r31->unk_00), 0.0f, 0.0f);
PSMTXConcat(sp134, sp164, sp134);
PSMTXScale(sp194, var_f30, 1.0f, 1.0f);
PSMTXConcat(sp134, sp194, sp134);
GXLoadPosMtxImm(sp134, 0);
PSMTXInvXpose(sp134, sp194);
GXLoadNrmMtxImm(sp194, 0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
if ((fn_1_4030() == 0) && (var_r31->unk_00 == 0)) {
GXInitTexObj(&sp24, var_r31->unk_6C, 0x280, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0);
}
else {
GXInitTexObj(&sp24, var_r31->unk_6C, 0x140, 0x1E0, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, 0);
}
GXInitTexObjLOD(&sp24, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&sp24, GX_TEXMAP0);
HuSprTexLoad(lbl_1_bss_150, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR);
HuSprTexLoad(lbl_1_bss_148, 0, 2, GX_CLAMP, GX_CLAMP, GX_LINEAR);
GXSetNumTexGens(3);
if (fn_1_4030() != 0) {
C_MTXLightPerspective(sp104, 41.5f, 0.6f, 0.5f, -0.5f, 0.5f, 0.5f);
}
else {
C_MTXLightPerspective(sp104, 41.5f, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f);
}
PSMTXInverse(Hu3DCameraMtx, spD4);
PSMTXConcat(spD4, sp134, spD4);
PSMTXConcat(sp104, Hu3DCameraMtx, spA4);
PSMTXConcat(spA4, spD4, spD4);
GXLoadTexMtxImm(spD4, 0x1E, GX_MTX3x4);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D);
C_MTXLightPerspective(sp104, 70.0f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f);
PSMTXInverse(Hu3DCameraMtx, sp74);
PSMTXConcat(sp74, sp134, sp74);
PSMTXConcat(sp104, Hu3DCameraMtx, sp44);
PSMTXConcat(sp44, sp74, sp74);
GXLoadTexMtxImm(sp74, 0x24, GX_MTX3x4);
GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX3x4, GX_TG_POS, 0x24, GX_FALSE, 0x7D);
PSMTXRotRad(sp164, 0x58, 1.5707964f);
var_f31 = 0.00075f * var_f30;
PSMTXScale(sp194, var_f31, -0.003f, 0.00075f);
PSMTXConcat(sp164, sp194, sp164);
PSMTXTrans(sp194, (var_r31->unk_1C & 0x3FF) / (1024.0f * var_f31), 0.0f, (0.7f * var_r31->unk_28) - (0.3f * var_r31->unk_24));
PSMTXConcat(sp164, sp194, sp164);
sp164[0][1] = -0.001f;
GXLoadTexMtxImm(sp164, 0x21, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D);
GXSetNumIndStages(2);
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetTevIndWarp(0, 0, GX_TRUE, GX_FALSE, 1);
PSMTXScale(sp164, -0.25f, -0.5f, 0.5f);
GXSetIndTexMtx(GX_ITM_0, (float(*)[3])sp164, -4);
GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD1, GX_TEXMAP1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1);
GXSetTevIndWarp(1, 1, GX_TRUE, GX_FALSE, 2);
PSMTXScale(sp164, 0.4f, 0.5f, 0.5f);
GXSetIndTexMtx(GX_ITM_1, (float(*)[3])sp164, -1);
GXSetNumTevStages(2);
GXSetTevColor(GX_TEVREG0, sp14);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_TEXC, GX_CC_RASA, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A0, GX_CA_ZERO, GX_CA_RASA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD2, GX_TEXMAP2, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_CPREV);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST);
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
GXSetZMode(1, GX_LEQUAL, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetArray(GX_VA_POS, var_r31->unk_44[var_r31->unk_40], sizeof(Vec));
GXSetArray(GX_VA_CLR0, var_r31->unk_54[var_r31->unk_40], sizeof(GXColor));
GXSetCullMode(GX_CULL_NONE);
GXCallDisplayList(var_r31->unk_60, var_r31->unk_64);
GXSetCullMode(GX_CULL_BACK);
GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1);
}
Vec lbl_1_data_60[6] = {
{ -2750.0f, 0.0f, -2500.0f },
{ 2750.0f, 0.0f, -2500.0f },
{ -2750.0f, 0.0f, 0.0f },
{ 2750.0f, 0.0f, 0.0f },
{ -1375.0f, 0.0f, 2500.0f },
{ 1375.0f, 0.0f, 2500.0f },
};
GXColor lbl_1_data_A8[6] = {
{ 5, 0x38, 0xA2, 0 },
{ 5, 0x38, 0xA2, 0xFF },
{ 0x14, 0x54, 0xAB, 0xFF },
{ 0x1E, 0x6D, 0xB0, 0xFF },
{ 0x2A, 0x7E, 0xB4, 0xFF },
{ 0x32, 0x8C, 0xB4, 0xFF },
};
void fn_1_963C(ModelData *model, Mtx matrix, u32 var_r31)
{
Mtx sp100;
Mtx spD0;
Mtx spA0;
Mtx sp70;
Mtx sp40;
Mtx sp10;
float var_f31;
float var_f30;
GXColor spC = { 0x32, 0x8C, 0xB4, 0x33 };
if (fn_1_4030() != 0) {
var_f30 = 1.0f;
var_f31 = fn_1_BB54(var_r31);
}
else {
var_f30 = 1.5f;
var_f31 = 0.0f;
}
PSMTXTrans(spD0, var_f31, 0.0f, ((lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24) - 2500.0f) - 2000.0f);
PSMTXScale(sp100, var_f30, 1.0f, 1.0f);
PSMTXConcat(spD0, sp100, spD0);
PSMTXConcat(Hu3DCameraMtx, spD0, spA0);
GXLoadPosMtxImm(spA0, 0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
HuSprTexLoad(lbl_1_bss_14C, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR);
HuSprTexLoad(lbl_1_bss_148, 0, 1, GX_CLAMP, GX_CLAMP, GX_LINEAR);
GXSetNumTexGens(2);
C_MTXLightPerspective(sp70, 70.0f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f);
PSMTXInverse(Hu3DCameraMtx, sp40);
PSMTXConcat(sp40, spA0, sp40);
PSMTXConcat(sp70, Hu3DCameraMtx, sp10);
PSMTXConcat(sp10, sp40, sp40);
GXLoadTexMtxImm(sp40, 0x21, GX_MTX3x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D);
PSMTXRotRad(spD0, 0x58, 1.5707964f);
var_f31 = 0.00075f * var_f30;
PSMTXScale(sp100, var_f31, -0.003f, 0.00075f);
PSMTXConcat(spD0, sp100, spD0);
PSMTXTrans(sp100, (lbl_1_bss_60[var_r31].unk_1C & 0x3FF) / (1024.0f * var_f31), 0.0f,
0.3f * (lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24));
PSMTXConcat(spD0, sp100, spD0);
GXLoadTexMtxImm(spD0, 0x1E, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D);
GXSetNumIndStages(1);
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetTevIndWarp(0, 0, GX_TRUE, GX_FALSE, 1);
PSMTXScale(spD0, 0.5f, 0.6f, 0.6f);
GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spD0, -1);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, spC);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_RASC);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetArray(GX_VA_POS, lbl_1_data_60, sizeof(Vec));
GXSetArray(GX_VA_CLR0, lbl_1_data_A8, sizeof(GXColor));
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 6);
GXPosition1x8(0);
GXColor1x8(3);
GXPosition1x8(1);
GXColor1x8(3);
GXPosition1x8(2);
GXColor1x8(4);
GXPosition1x8(3);
GXColor1x8(4);
GXPosition1x8(4);
GXColor1x8(5);
GXPosition1x8(5);
GXColor1x8(5);
GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0);
}
Vec lbl_1_data_C0[8] = {
{ -2750.0f, 20.0f, 0.0f },
{ 2750.0f, 20.0f, 0.0f },
{ -2750.0f, -20.0f, 0.0f },
{ 2750.0f, -20.0f, 0.0f },
{ -2750.0f, -160.0f, 0.0f },
{ 2750.0f, -160.0f, 0.0f },
{ -2750.0f, -340.0f, 0.0f },
{ 2750.0f, -340.0f, 0.0f },
};
Vec lbl_1_data_120[6] = {
{ -700.0f, 0.0f, -1750.0f },
{ 700.0f, 0.0f, -1750.0f },
{ -700.0f, 0.0f, -1400.0f },
{ 700.0f, 0.0f, -1400.0f },
{ -700.0f, 0.0f, 700.0f },
{ 700.0f, 0.0f, 700.0f },
};
void fn_1_9C90(ModelData *model, Mtx matrix)
{
Mtx sp124;
Mtx spF4;
Mtx spC4;
Mtx sp94;
Mtx sp64;
Mtx sp34;
Vec sp28;
Vec sp1C;
Vec sp10;
float var_f31;
float var_f30;
s32 var_r31;
s32 var_r30;
GXColor spC = { 0x32, 0x8C, 0xB4, 0x33 };
var_r31 = 0;
if (lbl_1_bss_60[var_r31].unk_14 != 0) {
var_r31++;
}
lbl_1_bss_60[var_r31].unk_14 = 1;
sp1C.x = CenterM[var_r31].x;
sp1C.y = CenterM[var_r31].y + (CZoomM[var_r31] * sind(-CRotM[var_r31].x));
sp1C.z = CenterM[var_r31].z + (CZoomM[var_r31] * cosd(-CRotM[var_r31].x));
sp28.x = sp1C.x;
sp28.y = 0.0f;
sp28.z = sp1C.z - 450000.0f;
PSVECSubtract(&sp28, &sp1C, &sp10);
PSVECNormalize(&sp10, &sp10);
PSVECScale(&sp10, &sp10, 8000.0f);
PSVECAdd(&sp1C, &sp10, &sp28);
PSMTXTrans(spF4, sp28.x, sp28.y, sp28.z);
var_f31 = 1.0f;
if (fn_1_4030() == 0) {
var_f31 = 1.5f;
PSMTXScale(sp124, var_f31, 1.0f, 1.0f);
PSMTXConcat(spF4, sp124, spF4);
}
PSMTXConcat(Hu3DCameraMtx, spF4, spC4);
GXLoadPosMtxImm(spC4, 0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
HuSprTexLoad(lbl_1_bss_14C, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR);
HuSprTexLoad(lbl_1_bss_148, 0, 1, GX_CLAMP, GX_CLAMP, GX_LINEAR);
GXSetNumTexGens(2);
C_MTXLightPerspective(sp94, 70.0f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f);
PSMTXInverse(Hu3DCameraMtx, sp64);
PSMTXConcat(sp64, spC4, sp64);
PSMTXConcat(sp94, Hu3DCameraMtx, sp34);
PSMTXConcat(sp34, sp64, sp64);
GXLoadTexMtxImm(sp64, 0x21, GX_MTX3x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D);
var_f30 = 0.00075f * var_f31;
PSMTXScale(spF4, var_f30, -0.005f, 0.00075f);
PSMTXTrans(sp124, (lbl_1_bss_60[var_r31].unk_1C & 0x3FF) / (1024.0f * var_f30),
0.03f * -(lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24), 0.0f);
PSMTXConcat(spF4, sp124, spF4);
GXLoadTexMtxImm(spF4, 0x1E, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D);
GXSetNumIndStages(1);
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetTevIndWarp(0, 0, GX_TRUE, GX_FALSE, 1);
PSMTXScale(spF4, 0.5f, 0.6f, 0.6f);
GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spF4, -1);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG0, spC);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A0, GX_CC_RASC);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetArray(GX_VA_POS, lbl_1_data_C0, 0xC);
GXSetArray(GX_VA_CLR0, lbl_1_data_A8, 4);
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 8);
for (var_r30 = 0; var_r30 < 8; var_r30++) {
GXPosition1x8(var_r30);
GXColor1x8(var_r30 >> 1);
}
GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0);
}
GXColor lbl_1_data_168[2] = { { 0xFF, 0xFF, 0xFF, 0 }, { 0xFF, 0xFF, 0xFF, 0xFF } };
void fn_1_A3A8(ModelData *model, Mtx matrix)
{
Mtx sp48;
Mtx sp18;
float var_f31;
float var_f30;
u8 *var_r30;
u8 *var_r29;
GXColor sp14 = { 0xFF, 0xA5, 0x59, 0xB2 };
GXColor sp10 = { 0x99, 0x72, 0x59, 0xB2 };
s32 var_r31 = 0;
if (lbl_1_bss_60[var_r31].unk_0C != 0) {
var_r31++;
}
lbl_1_bss_60[var_r31].unk_0C = 1;
if (fn_1_4030() != 0) {
var_f30 = 1.0f;
var_f31 = fn_1_BB54(var_r31);
}
else {
var_f30 = 1.5f;
var_f31 = 0.0f;
}
if (lbl_1_bss_5C != 0) {
PSMTXTrans(sp18, var_f31, 0.0f, 300.0f + (lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24));
GXSetTevColor(GX_TEVREG0, sp10);
}
else {
PSMTXTrans(sp18, var_f31, -150.0f, lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24);
GXSetTevColor(GX_TEVREG0, sp14);
}
PSMTXScale(sp48, var_f30, 1.0f, 1.0f);
PSMTXConcat(sp18, sp48, sp18);
PSMTXConcat(Hu3DCameraMtx, sp18, sp18);
GXLoadPosMtxImm(sp18, 0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
HuSprTexLoad(lbl_1_bss_144, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR);
HuSprTexLoad(lbl_1_bss_140, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR);
GXSetNumTexGens(2);
PSMTXRotRad(sp18, 0x58, 1.5707964f);
var_f31 = 0.004f * var_f30;
PSMTXScale(sp48, var_f31, -0.004f, 0.004f);
PSMTXConcat(sp18, sp48, sp18);
PSMTXTrans(sp48, (lbl_1_bss_60[var_r31].unk_1C & 0x3FF) / (512.0f * var_f31), 0.0f,
(1.2499999f * (lbl_1_bss_60[var_r31].unk_1C % 400)) + (lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24));
PSMTXConcat(sp18, sp48, sp18);
GXLoadTexMtxImm(sp18, 0x1E, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1E, GX_FALSE, 0x7D);
PSMTXRotRad(sp18, 0x58, 1.5707964f);
var_f31 = 0.004f * var_f30;
PSMTXScale(sp48, var_f31, -0.004f, 0.004f);
PSMTXConcat(sp18, sp48, sp18);
PSMTXTrans(sp48, (lbl_1_bss_60[var_r31].unk_1C % 300) / (150.0f * var_f31), 0.0f, lbl_1_bss_60[var_r31].unk_28 + lbl_1_bss_60[var_r31].unk_24);
PSMTXConcat(sp18, sp48, sp18);
GXLoadTexMtxImm(sp18, 0x21, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_POS, 0x21, GX_FALSE, 0x7D);
GXSetNumTevStages(2);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_SET);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetArray(GX_VA_POS, lbl_1_data_120, 0xC);
GXSetArray(GX_VA_CLR0, lbl_1_data_168, 4);
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 6);
GXPosition1x8(0);
GXColor1x8(0);
GXPosition1x8(1);
GXColor1x8(0);
GXPosition1x8(2);
GXColor1x8(1);
GXPosition1x8(3);
GXColor1x8(1);
GXPosition1x8(4);
GXColor1x8(1);
GXPosition1x8(5);
GXColor1x8(1);
}
void fn_1_AB98(ModelData *model, Mtx matrix)
{
s32 var_r31 = 0;
if (lbl_1_bss_60[var_r31].unk_08 != 0) {
var_r31++;
}
if ((fn_1_4030() == 0) && (var_r31 == 0)) {
GXSetTexCopySrc(0, 0, 0x280, 0x1E0);
GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGB5A3, 0);
}
else {
GXSetTexCopySrc(var_r31 * 0x140, 0, 0x140, 0x1E0);
GXSetTexCopyDst(0x140, 0x1E0, GX_TF_RGB5A3, 0);
}
GXCopyTex(lbl_1_bss_60[var_r31].unk_6C, 0);
GXPixModeSync();
lbl_1_bss_60[var_r31].unk_08 = 1;
}
void fn_1_AC84(ModelData *model, Mtx matrix)
{
s32 var_r31 = 0;
if (lbl_1_bss_60[var_r31].unk_18 != 0) {
var_r31++;
}
lbl_1_bss_60[var_r31].unk_18 = 1;
fn_1_86B4(lbl_1_bss_54, &lbl_1_bss_60[var_r31]);
}
void fn_1_AD04(ModelData *model, ParticleData *particle, Mtx matrix)
{
HsfanimStruct01 *var_r31;
s32 var_r29;
if ((particle->unk_00 == 0) || (lbl_1_bss_5C != 0)) {
particle->unk_00++;
for (var_r31 = particle->unk_48, var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
var_r31->unk00 = 0;
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
return;
}
for (var_r31 = particle->unk_48, var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
if (var_r31->unk00_s16 != 0) {
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
PSVECScale(&var_r31->unk08, &var_r31->unk08, 0.97f);
if (var_r31->unk00_s16 < 24.0f) {
var_r31->unk40.a = 0.9f * var_r31->unk40.a;
}
var_r31->unk2C += 1.5f;
if (--var_r31->unk00_s16 == 0) {
var_r31->unk00_s16 = 0;
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
}
}
DCStoreRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
}
void fn_1_AEE0(s32 arg0, Vec *arg1, float arg8, float arg9)
{
Vec sp10;
float var_f31;
float var_f30;
float var_f28;
HsfanimStruct01 *var_r31;
ParticleData *var_r30;
s32 var_r29;
M430DllWork *var_r28;
u32 var_r27;
void *var_r26;
var_r26 = lbl_1_bss_58->data;
var_r28 = var_r26;
var_r30 = Hu3DData[var_r28[arg0].unk_10].unk_120;
if (var_r30->unk_00 != 0) {
var_r31 = var_r30->unk_48;
if (!(frandmod(0x3E8) > (1200.0f * arg9))) {
var_r27 = 1;
var_f28 = 30.0f;
for (var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) {
if (var_r31->unk00_s16 == 0) {
var_r31->unk00 = 60.0f * (0.5f + (0.0005f * frandmod(0x3E8)));
var_f30 = (0.002f * frandmod(0x3E8)) - 1.0f;
var_f30 = arg8 + (var_f30 * var_f28);
sp10.x = sind(var_f30);
sp10.y = 0.0f;
sp10.z = cosd(var_f30);
var_r31->unk34 = *arg1;
var_r31->unk34.y = -20.0f;
var_f31 = 5.0f + arg9 * (1.6666667f * (2.0f * (0.001f * frandmod(0x3E8))));
var_r31->unk08.x = sp10.x * var_f31;
var_r31->unk08.y = -0.2f * var_f31;
var_r31->unk08.z = sp10.z * var_f31;
var_f31 = 0.001f * frandmod(0x3E8);
var_f31 += (1.0f - var_f31) * (0.5f * arg9);
var_r31->unk30 = frandmod(0x168);
var_r31->unk2C = 80.0f + frandmod(0x46);
var_r31->unk40.a = frandmod(0x64) + 0x64;
var_r31->unk40.r = 150.0f + (95.0f * var_f31);
var_r31->unk40.g = 160.0f + (80.0f * var_f31);
var_r31->unk40.b = 166.0f + (60.0f * var_f31);
if (--var_r27 == 0) {
break;
}
}
}
}
}
}
void fn_1_B394(ModelData *model, ParticleData *var_r30, Mtx matrix)
{
HsfanimStruct01 *var_r31;
s32 var_r29;
if ((var_r30->unk_00 == 0) || (lbl_1_bss_5C != 0)) {
var_r30->unk_00++;
for (var_r31 = var_r30->unk_48, var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) {
var_r31->unk00_s16 = 0;
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
return;
}
for (var_r31 = var_r30->unk_48, var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) {
if (var_r31->unk00_s16 != 0) {
var_r31->unk00_s16--;
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
var_r31->unk2C += 0.5f;
if (var_r31->unk00_s16 < 30.0) {
var_r31->unk40.a = 0.98f * var_r31->unk40.a;
}
if ((var_r31->unk34.y < -40.0f) || (var_r31->unk00_s16 == 0)) {
var_r31->unk00_s16 = 0;
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
}
}
DCStoreRange(var_r30->unk_48, var_r30->unk_30 * sizeof(HsfanimStruct01));
}
void fn_1_B570(s32 arg0, Vec *arg1, float arg8, float arg9, Vec *arg2)
{
Vec sp28;
Vec sp1C;
s32 sp18;
float var_f31;
float var_f30;
float var_f28;
HsfanimStruct01 *var_r31;
ParticleData *var_r30;
s32 var_r29;
M430DllWork *var_r28;
u32 var_r27;
M430DllWork *var_r26;
var_r26 = lbl_1_bss_58->data;
{
float sp14[2] = { -100.0f, 100.0f };
var_r28 = var_r26;
var_r30 = Hu3DData[var_r28[arg0].unk_14].unk_120;
if (var_r30->unk_00 != 0) {
var_r31 = var_r30->unk_48;
if (!(frandmod(0x3E8) > (1000.0f * arg9))) {
var_r27 = 2;
var_f28 = 40.0f;
PSVECScale(arg2, &sp1C, 0.2f);
sp1C.x = 0.0f;
for (var_r29 = 0; var_r29 < var_r30->unk_30; var_r29++, var_r31++) {
if (var_r31->unk00_s16 == 0) {
var_r31->unk00_s16 = 60.0f * (0.5f + (0.0005f * frandmod(0x3E8)));
var_f30 = (0.002f * frandmod(0x3E8)) - 1.0f;
var_f30 = arg8 + sp14[var_r29 & 1] + (var_f30 * var_f28);
sp28.x = sind(var_f30);
sp28.y = 0.0f;
sp28.z = cosd(var_f30);
var_r31->unk34 = *arg1;
var_r31->unk34.x = var_r31->unk34.x + ((0.05f * frandmod(0x3E8)) - 25.0f);
var_r31->unk34.z = var_r31->unk34.z + ((0.05f * frandmod(0x3E8)) - 25.0f);
var_r31->unk34.y = 40.0f;
var_f31 = 1.6666667f + (arg9 * (0.0016666667f * frandmod(0x3E8)));
var_r31->unk08.x = sp28.x * var_f31;
var_r31->unk08.z = sp28.z * var_f31;
var_r31->unk08.y = 0.0f;
PSVECAdd(&var_r31->unk08, &sp1C, &var_r31->unk08);
var_f31 = 0.001f * frandmod(0x3E8);
var_f31 += (1.0f - var_f31) * (0.3f * arg9);
var_r31->unk30 = frandmod(0x168);
var_r31->unk2C = 60.0f + frandmod(0x50);
var_r31->unk40.a = (60.0f * arg9) + frandmod(0x50);
var_r31->unk40.r = 150.0f + (95.0f * var_f31);
var_r31->unk40.g = 160.0f + (80.0f * var_f31);
var_r31->unk40.b = 166.0f + (60.0f * var_f31);
if (--var_r27 == 0) {
break;
}
}
}
}
}
}
}
float fn_1_BB54(u32 arg0)
{
float sp8[2] = { -450.0f, 450.0f };
return sp8[arg0 & 1];
}
float fn_1_BB88(void)
{
return 0.0f;
}
void fn_1_BB98(u32 arg0)
{
lbl_1_bss_5C = 0;
if (arg0 != 0) {
lbl_1_bss_5C = 1;
}
}