1818 lines
65 KiB
C
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;
|
|
}
|
|
}
|