699 lines
No EOL
22 KiB
C
699 lines
No EOL
22 KiB
C
#include "REL/m440Dll.h"
|
|
|
|
#include "rel_sqrt_consts.h"
|
|
#include "math.h"
|
|
#include "game/frand.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/wipe.h"
|
|
#include "game/audio.h"
|
|
#include "game/objsub.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/sprite.h"
|
|
|
|
// prototypes
|
|
void fn_1_2D28(omObjData* object);
|
|
void fn_1_33D4(omObjData* object);
|
|
void fn_1_3DD8(omObjData* object);
|
|
void fn_1_4660(omObjData* object);
|
|
u16 fn_1_4EA8(s32);
|
|
void fn_1_4EEC(s32, s32);
|
|
void fn_1_57B4(s32);
|
|
void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32);
|
|
f32 fn_1_93C0(f32, f32, f32);
|
|
unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*);
|
|
s16 fn_1_956C(AnimData*, s32, f32, s32, s32);
|
|
void fn_1_9AB0(s16);
|
|
void fn_1_9B94(s16, m440Func5);
|
|
void fn_1_AE08(Process*);
|
|
// object.c
|
|
s16 fn_1_F0FC(void);
|
|
void fn_1_F168(void);
|
|
|
|
// bss
|
|
omObjData* lbl_1_bss_6C;
|
|
omObjData* lbl_1_bss_68;
|
|
s16 lbl_1_bss_10[10];
|
|
s16 lbl_1_bss_E;
|
|
u8 lbl_1_bss_C;
|
|
u8 lbl_1_bss_B;
|
|
u8 lbl_1_bss_A;
|
|
s16 lbl_1_bss_8;
|
|
s16 lbl_1_bss_6;
|
|
s16 lbl_1_bss_4;
|
|
s8 lbl_1_bss_2;
|
|
s8 lbl_1_bss_1;
|
|
s8 lbl_1_bss_0;
|
|
|
|
// data
|
|
f32 lbl_1_data_0[5] = { 90.0f, 80.0f, 100.0f, 70.0f, 110.0f };
|
|
Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f };
|
|
Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f };
|
|
GXColor lbl_1_data_44 = { 0xFF, 0xFF, 0xFF, 0xFF };
|
|
Vec lbl_1_data_48 = { 10.0f, 45.0f, 0.0f }; // UNUSED
|
|
Vec lbl_1_data_54 = { 1300.0f, 2500.0f, 1300.0f };
|
|
Vec lbl_1_data_60 = { 0.0f, 1.0f, 0.0f };
|
|
Vec lbl_1_data_6C = { 0.0f, 0.0f, -500.0f };
|
|
unkStruct lbl_1_data_78[3] = {
|
|
{ 1450.0f, { 0.0f, 452.0f, 0.0f }, { 11.0f, -23.0f, 0.0f } },
|
|
{ 1700.0f, { 0.0f, 315.0f, 0.0f }, { -2.0f, 0.0f, 0.0f } },
|
|
{ 1040.0f, { 200.0f, 21.0f, 0.0f }, { -6.0f, 0.0f, 0.0f } },
|
|
};
|
|
|
|
void ModuleProlog(void) {
|
|
Vec sp8;
|
|
LightData* var_r30;
|
|
Process* var_r31;
|
|
|
|
Hu3DLightAllKill();
|
|
lbl_1_bss_E = Hu3DGLightCreateV(&lbl_1_data_2C, &lbl_1_data_38, &lbl_1_data_44);
|
|
Hu3DGLightInfinitytSet(lbl_1_bss_E);
|
|
var_r30 = &Hu3DGlobalLight[lbl_1_bss_E];
|
|
var_r30->unk_00 |= 0x8000;
|
|
sp8.x = sp8.y = sp8.z = 0.0f;
|
|
Hu3DGLightPosAimSetV(lbl_1_bss_E, &lbl_1_data_2C, &sp8);
|
|
Hu3DShadowCreate(45.0f, 20.0f, 10000.0f);
|
|
Hu3DShadowTPLvlSet(0.5f);
|
|
Hu3DShadowPosSet(&lbl_1_data_54, &lbl_1_data_60, &lbl_1_data_6C);
|
|
HuAudSndGrpSet(0x42);
|
|
var_r31 = omInitObjMan(0x32, 0x2000);
|
|
omGameSysInit(var_r31);
|
|
Hu3DCameraCreate(1);
|
|
Hu3DCameraPerspectiveSet(1, 41.5f, 5.0f, 5000.0f, 1.2f);
|
|
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
|
|
omAddObjEx(var_r31, 0x7FDA, 0, 0, -1, omOutView);
|
|
CRot.x = lbl_1_data_78[0].rot.x;
|
|
CRot.y = lbl_1_data_78[0].rot.y;
|
|
CRot.z = lbl_1_data_78[0].rot.z;
|
|
Center.x = lbl_1_data_78[0].center.x;
|
|
Center.y = lbl_1_data_78[0].center.y;
|
|
Center.z = lbl_1_data_78[0].center.z;
|
|
CZoom = lbl_1_data_78[0].zoom;
|
|
omAddObjEx(var_r31, 0x3E8, 0, 0, -1, fn_1_3C4);
|
|
lbl_1_bss_6C = omAddObjEx(var_r31, 10, 9, 0, -1, fn_1_8F0);
|
|
lbl_1_bss_68 = omAddObjEx(var_r31, 50, 9, 9, -1, fn_1_2470);
|
|
Hu3DBGColorSet(0, 0, 0);
|
|
fn_1_AE08(var_r31);
|
|
}
|
|
|
|
void fn_1_3C4(omObjData* object) {
|
|
if ((omSysExitReq != 0) || (lbl_1_bss_0 != 0)) {
|
|
WipeCreate(2, 0, 0x3C);
|
|
object->func = &fn_1_434;
|
|
}
|
|
}
|
|
|
|
void fn_1_434(omObjData* object) {
|
|
if ((WipeStatGet() == 0) && (MGSeqDoneCheck() != 0)) {
|
|
HuMemDirectFree(lbl_1_bss_64);
|
|
fn_1_9AB0(lbl_1_bss_10[0]);
|
|
MGSeqKillAll();
|
|
HuAudFadeOut(1);
|
|
omOvlReturnEx(1, 1);
|
|
}
|
|
}
|
|
|
|
s32 fn_1_4A4(void) {
|
|
f32 var_f31;
|
|
unkStruct *var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = &lbl_1_data_78[0];
|
|
var_r30 = 0;
|
|
lbl_1_bss_4++;
|
|
var_f31 = lbl_1_bss_4 / 120.0f;
|
|
if (var_f31 > 1.0f) {
|
|
lbl_1_bss_4 = 0;
|
|
var_f31 = 1.0f;
|
|
var_r30 = 1;
|
|
}
|
|
|
|
var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0));
|
|
CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31);
|
|
Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31);
|
|
Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31);
|
|
Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31);
|
|
CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31);
|
|
CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31);
|
|
CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31);
|
|
return var_r30;
|
|
}
|
|
|
|
s32 fn_1_6C8(void) {
|
|
f32 var_f31;
|
|
unkStruct *var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = &lbl_1_data_78[1];
|
|
var_r30 = 0;
|
|
lbl_1_bss_4++;
|
|
var_f31 = lbl_1_bss_4 / 120.0f;
|
|
if (var_f31 > 1.0f) {
|
|
lbl_1_bss_4 = 0;
|
|
var_f31 = 1.0f;
|
|
var_r30 = 1;
|
|
}
|
|
|
|
var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0));
|
|
CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31);
|
|
Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31);
|
|
Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31);
|
|
Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31);
|
|
CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31);
|
|
CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31);
|
|
CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31);
|
|
return var_r30;
|
|
}
|
|
|
|
void fn_1_8F0(omObjData* arg0) {
|
|
s16 var_r30;
|
|
unkStruct2* temp_r31;
|
|
AnimData *anim;
|
|
|
|
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x10, 0x10000000);
|
|
temp_r31 = (unkStruct2*)arg0->data;
|
|
temp_r31->unk0 = 1;
|
|
temp_r31->unk4 = -1;
|
|
temp_r31->unk8 = -1;
|
|
temp_r31->unk6 = 0x12C;
|
|
temp_r31->unkA = 0;
|
|
temp_r31->unkC = -1;
|
|
|
|
for (var_r30 = 1; var_r30 < 4; var_r30++) {
|
|
lbl_1_bss_10[var_r30] = Hu3DModelCreate(HuDataSelHeapReadNum(0x47000A, 0x10000000, HEAP_DATA));
|
|
Hu3DModelAttrSet(lbl_1_bss_10[var_r30], 1);
|
|
Hu3DModelAttrSet(lbl_1_bss_10[var_r30], 0x40000002);
|
|
Hu3DModelLayerSet(lbl_1_bss_10[var_r30], 7);
|
|
Hu3DModelScaleSet(lbl_1_bss_10[var_r30], 3.0f, 3.0f, 3.0f);
|
|
}
|
|
|
|
anim = HuSprAnimRead(HuDataReadNum(0x47000B, 0x10000000));
|
|
lbl_1_bss_10[0] = fn_1_956C(anim, 0x40, 50.0f, 0x40, 0x40);
|
|
fn_1_9B94(lbl_1_bss_10[0], fn_1_2240);
|
|
Hu3DModelLayerSet(lbl_1_bss_10[0], 7);
|
|
arg0->func = &fn_1_AE0;
|
|
}
|
|
|
|
void fn_1_AE0(omObjData* arg0) {
|
|
f32 temp_f31;
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
switch (fn_1_23E4(7)) {
|
|
case 1:
|
|
if (lbl_1_bss_A == 0) {
|
|
WipeCreate(1, 0, 0x3C);
|
|
lbl_1_bss_A = 1;
|
|
}
|
|
if (WipeStatGet() != 0) break;
|
|
fn_1_2428(7, 2);
|
|
break;
|
|
case 2:
|
|
if (fn_1_E14(arg0) != 0) {
|
|
fn_1_2428(7, 3);
|
|
}
|
|
break;
|
|
case 3:
|
|
if (temp_r31->unk8 != -1) {
|
|
MGSeqParamSet(temp_r31->unk8, 1, ((temp_r31->unk6 + 0x3B) / 60));
|
|
}
|
|
if ((temp_r31->unkC < 0) && ((MGSeqStatGet(temp_r31->unk4) & 0x10) != 0)) {
|
|
temp_r31->unkC = HuAudSeqPlay(0x49);
|
|
}
|
|
if (lbl_1_bss_2 == 0) {
|
|
if (temp_r31->unkA != 0) {
|
|
temp_r31->unkA++;
|
|
temp_f31 = (((rand8() << 8) | rand8()) % 361);
|
|
Center.x = (lbl_1_data_78[1].center.x + (10.0 * sin((M_PI * temp_f31) / 180.0)));
|
|
Center.y = (lbl_1_data_78[1].center.y + (10.0 * cos((M_PI * temp_f31) / 180.0)));
|
|
if (temp_r31->unkA > 0x28) {
|
|
temp_r31->unkA = 0;
|
|
return;
|
|
}
|
|
} else {
|
|
Center.x = lbl_1_data_78[1].center.x;
|
|
Center.y = lbl_1_data_78[1].center.y;
|
|
Center.z = lbl_1_data_78[1].center.z;
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
if (fn_1_1138(arg0) != 0) {
|
|
fn_1_2428(7, 5);
|
|
return;
|
|
}
|
|
break;
|
|
case 5:
|
|
lbl_1_bss_0 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_E14(omObjData* arg0) {
|
|
f32 var_f31;
|
|
unkStruct* var_r31;
|
|
u8 var_r30;
|
|
|
|
switch (lbl_1_bss_6) {
|
|
case 0:
|
|
fn_1_4EEC(7, 1);
|
|
fn_1_4EEC(0x18, 8);
|
|
HuAudFXPlay(0x70E);
|
|
lbl_1_bss_6++;
|
|
break;
|
|
case 1:
|
|
if (++lbl_1_bss_8 > 0x1E) {
|
|
fn_1_F168();
|
|
lbl_1_bss_8 = 0;
|
|
lbl_1_bss_6++;
|
|
}
|
|
break;
|
|
case 2:
|
|
var_r31 = lbl_1_data_78;
|
|
var_r30 = 0;
|
|
lbl_1_bss_4++;
|
|
var_f31 = lbl_1_bss_4 / 120.0f;
|
|
if (var_f31 > 1.0f) {
|
|
lbl_1_bss_4 = 0;
|
|
var_f31 = 1.0f;
|
|
var_r30 = 1;
|
|
}
|
|
var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0));
|
|
CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31);
|
|
Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31);
|
|
Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31);
|
|
Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31);
|
|
CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31);
|
|
CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31);
|
|
CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31);
|
|
if (var_r30 != 0) {
|
|
lbl_1_bss_8 = 0;
|
|
lbl_1_bss_6 = 0;
|
|
return 1;
|
|
}
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
s32 fn_1_1138(omObjData* object) {
|
|
unkStruct2* sp8;
|
|
f32 var_f31;
|
|
f32 var_f30;
|
|
s16 temp_r29;
|
|
u8 var_r28;
|
|
unkStruct3* temp_r30;
|
|
unkStruct* var_r31;
|
|
|
|
sp8 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
temp_r29 = fn_1_F0FC();
|
|
temp_r30 = (unkStruct3*)lbl_1_bss_C0[temp_r29]->data;
|
|
switch (lbl_1_bss_6) {
|
|
case 0:
|
|
if (lbl_1_bss_8 == 0) {
|
|
Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[1], 0.0f, 7.0f, 0x40000001);
|
|
temp_r30->unk40 = temp_r30->unk34;
|
|
}
|
|
lbl_1_bss_8++;
|
|
var_f30 = lbl_1_bss_8 / 30.0f;
|
|
if (var_f30 >= 1.0f) {
|
|
var_f30 = 1.0f;
|
|
if (lbl_1_bss_B == 0) {
|
|
lbl_1_bss_B = 1;
|
|
Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[0], 0.0f, 7.0f, 0x40000001);
|
|
}
|
|
}
|
|
temp_r30->unk34 = (temp_r30->unk40 + (var_f30 * (360.0f - temp_r30->unk40)));
|
|
var_r31 = &lbl_1_data_78[1]; // could be fn_1_6C8
|
|
var_r28 = 0;
|
|
lbl_1_bss_4++;
|
|
var_f31 = lbl_1_bss_4 / 120.0f;
|
|
if (var_f31 > 1.0f) {
|
|
lbl_1_bss_4 = 0;
|
|
var_f31 = 1.0f;
|
|
var_r28 = 1;
|
|
}
|
|
var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0));
|
|
CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31);
|
|
Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31);
|
|
Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31);
|
|
Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31);
|
|
CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31);
|
|
CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31);
|
|
CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31);
|
|
if (var_r28 != 0) {
|
|
lbl_1_bss_8 = 0;
|
|
lbl_1_bss_6++;
|
|
}
|
|
break;
|
|
case 1:
|
|
Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[5], 0.0f, 7.0f, 0);
|
|
HuAudSStreamPlay(1);
|
|
lbl_1_bss_6++;
|
|
lbl_1_bss_8 = 0;
|
|
break;
|
|
case 2:
|
|
if (++lbl_1_bss_8 > 210.0f) {
|
|
lbl_1_bss_6 = 0;
|
|
return 1;
|
|
}
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void fn_1_16D8(void) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
temp_r31->unk6--;
|
|
}
|
|
|
|
void fn_1_1708(void) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
if (temp_r31->unk8 != -1) {
|
|
MGSeqParamSet(temp_r31->unk8, 2, -1);
|
|
temp_r31->unk8 = -1;
|
|
temp_r31->unk6 = 0;
|
|
}
|
|
}
|
|
|
|
void fn_1_1768(void) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
if (temp_r31->unk8 == -1) {
|
|
temp_r31->unk6 = 0x12C;
|
|
temp_r31->unk8 = MGSeqCreate(1, 5, -1, -1);
|
|
}
|
|
}
|
|
|
|
s16 fn_1_17CC(void) {
|
|
unkStruct2* var_r31;
|
|
|
|
var_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
return var_r31->unk6;
|
|
}
|
|
|
|
s16 fn_1_17F4(void) {
|
|
unkStruct2* var_r31;
|
|
|
|
var_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
return var_r31->unk8;
|
|
}
|
|
|
|
void fn_1_181C(void) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
if (temp_r31->unk4 == -1) {
|
|
temp_r31->unk4 = MGSeqCreate(3, 0);
|
|
MGSeqPosSet(temp_r31->unk4, 320.0f, 240.0f);
|
|
}
|
|
}
|
|
|
|
u8 fn_1_1890(void) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
if (temp_r31->unk4 != -1) {
|
|
return MGSeqStatGet(temp_r31->unk4);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
void fn_1_18E0(void) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
temp_r31->unk4 = MGSeqCreate(3, 1);
|
|
MGSeqPosSet(temp_r31->unk4, 320.0f, 240.0f);
|
|
HuAudSeqFadeOut(temp_r31->unkC, 0x64);
|
|
}
|
|
|
|
s32 fn_1_1954(void) {
|
|
unkStruct2* sp8;
|
|
|
|
sp8 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
if ((lbl_1_bss_2 != 0) || (lbl_1_bss_1 != 0)) {
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
void fn_1_19B0(void) {
|
|
f32 temp_f29;
|
|
f32 var_f28;
|
|
f32 var_f27;
|
|
f32 temp_f31;
|
|
f32 var_f30;
|
|
s16 var_r31;
|
|
|
|
var_f30 = (((rand8() << 8) | rand8()) % 361);
|
|
|
|
for (var_r31 = 1; var_r31 < 4; var_r31++, var_f30+=120.0f) {
|
|
temp_f31 = 0.01f * ((((rand8() << 8) | rand8()) % 51) + 50);
|
|
temp_f29 = (temp_f31 * (200.0 * sin((M_PI * var_f30) / 180.0)));
|
|
var_f28 = (temp_f31 * (200.0 * cos((M_PI * var_f30) / 180.0)));
|
|
var_f27 = 0.0f;
|
|
Hu3DModelPosSet(lbl_1_bss_10[var_r31], temp_f29, 300.0f + var_f28, var_f27);
|
|
temp_f31 = 0.1f * ((((rand8() << 8) | rand8()) % 11) + 25);
|
|
Hu3DModelScaleSet(lbl_1_bss_10[var_r31], temp_f31, temp_f31, temp_f31);
|
|
Hu3DModelAttrReset(lbl_1_bss_10[var_r31], 1);
|
|
Hu3DModelAttrReset(lbl_1_bss_10[var_r31], 0x40000002);
|
|
}
|
|
}
|
|
|
|
void fn_1_1CAC(void) {
|
|
s16 var_r31;
|
|
|
|
for (var_r31 = 1; var_r31 < 4; var_r31++) {
|
|
Hu3DMotionTimeSet(lbl_1_bss_10[var_r31], 0.0f);
|
|
Hu3DModelAttrSet(lbl_1_bss_10[var_r31], 1);
|
|
Hu3DModelAttrSet(lbl_1_bss_10[var_r31], 0x40000002);
|
|
}
|
|
}
|
|
|
|
void fn_1_1D54(f32 arg8, f32 arg9, f32 argA, s16 arg0, f32 argB, s16 arg1) {
|
|
Vec sp30;
|
|
Vec sp24;
|
|
GXColor sp1E;
|
|
f32 temp_f30;
|
|
f32 temp_f29;
|
|
f32 temp_f31;
|
|
s16 var_r30;
|
|
unkStruct4* var_r31;
|
|
|
|
for (var_r30 = 0; var_r30 < arg0; var_r30++) {
|
|
temp_f31 = argB + ((((rand8() << 8) | rand8()) % 11) - 5);
|
|
temp_f30 = sin((M_PI * temp_f31) / 180.0);
|
|
temp_f29 = cos((M_PI * temp_f31) / 180.0);
|
|
sp30.x = arg8 + ((((rand8() << 8) | rand8()) % 21) - 10);
|
|
sp30.y = arg9 + ((((rand8() << 8) | rand8()) % 21) - 10);
|
|
sp30.z = argA;
|
|
sp24.x = sp24.y = sp24.z = 1.0f;
|
|
sp1E.r = sp1E.g = sp1E.b = 0xFF;
|
|
sp1E.a = 0x80;
|
|
var_r31 = fn_1_942C(arg1, &sp30, &sp24, 0.0f, &sp1E);
|
|
if (!var_r31) break;
|
|
|
|
var_r31->unk34 = 0;
|
|
var_r31->unk36 = ((rand8() << 8) | rand8()) % 2 + 2;
|
|
var_r31->unk0.x = (temp_f30 * (0.1f * ((((rand8() << 8) | rand8()) % 41) + 0x28)));
|
|
var_r31->unk0.y = (temp_f29 * (0.1f * ((((rand8() << 8) | rand8()) % 61) + 0x3C)));
|
|
var_r31->unk0.z = 0.0f;
|
|
var_r31->unk18 = (0.01f * var_r31->unk0.x);
|
|
var_r31->unk1C = 0.1f;
|
|
var_r31->unk24 = 1.5f;
|
|
var_r31->unk28 = ((0.1f * ((((rand8() << 8) | rand8()) % 7) + 2)) / (var_r31->unk36 * 0xE));
|
|
var_r31->unk2C = sp1E.a;
|
|
var_r31->unk30 = (var_r31->unk2C / (var_r31->unk36 * 0xE));
|
|
}
|
|
}
|
|
|
|
void fn_1_2240(omObjData* object, unkStruct5* arg1, Mtx* arg2) {
|
|
unkStruct4* var_r31;
|
|
GXColor* var_r30;
|
|
s16 var_r29;
|
|
|
|
var_r31 = arg1->unk18;
|
|
var_r30 = arg1->unk24;
|
|
|
|
for (var_r29 = 0; var_r29 < arg1->unk0; var_r29++, var_r31++, var_r30++) {
|
|
if (var_r31->unk62 != 0) {
|
|
var_r31->unk54.x += var_r31->unk0.x;
|
|
var_r31->unk54.y += var_r31->unk0.y;
|
|
var_r31->unk54.z += var_r31->unk0.z;
|
|
var_r31->unk0.x -= var_r31->unk18;
|
|
var_r31->unk0.y += var_r31->unk1C;
|
|
var_r31->unk18 = (0.001f * var_r31->unk0.x);
|
|
var_r31->unk1C *= 1.05f;
|
|
var_r31->unk24 += var_r31->unk28;
|
|
var_r31->unk48.x = var_r31->unk48.y = var_r31->unk48.z = var_r31->unk24;
|
|
var_r31->unk2C -= var_r31->unk30;
|
|
var_r30->a = var_r31->unk2C > 255.0f ? 255 : (u8)var_r31->unk2C;
|
|
var_r31->unk34++;
|
|
if (var_r31->unk34 >= var_r31->unk36) {
|
|
var_r31->unk34 = 0;
|
|
var_r31->unk60++;
|
|
}
|
|
if (var_r31->unk60 >= arg1->unk14 - 2) {
|
|
var_r31->unk62 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
u16 fn_1_23E4(u16 arg0) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
if (!temp_r31) {
|
|
return 0;
|
|
}
|
|
return temp_r31->unk0 & arg0;
|
|
}
|
|
|
|
void fn_1_2428(u16 arg0, u16 arg1) {
|
|
unkStruct2* temp_r31;
|
|
|
|
temp_r31 = (unkStruct2*)lbl_1_bss_6C->data;
|
|
temp_r31->unk0 = (temp_r31->unk0 & ~arg0);
|
|
temp_r31->unk0 = (temp_r31->unk0 | arg1);
|
|
}
|
|
|
|
void fn_1_2470(omObjData* arg0) {
|
|
ModelData* temp_r29;
|
|
HsfObject* temp_r28;
|
|
f32 temp_f31;
|
|
f32 var_f30;
|
|
f32 var_f29;
|
|
s16 temp_r26;
|
|
s16 var_r30;
|
|
unkStruct2* temp_r27;
|
|
|
|
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, 0x10000000);
|
|
temp_r27 = arg0->data;
|
|
arg0->stat |= 0x100;
|
|
arg0->model[0] = Hu3DModelCreateFile(0x470008);
|
|
arg0->model[1] = Hu3DModelCreateFile(0x470009);
|
|
arg0->model[2] = Hu3DModelCreateFile(0x470000);
|
|
arg0->model[3] = Hu3DModelCreateFile(0x470002);
|
|
arg0->model[8] = Hu3DModelCreateFile(0x470003);
|
|
arg0->model[6] = Hu3DModelCreateFile(0x470004);
|
|
arg0->model[4] = Hu3DModelCreateFile(0x470005);
|
|
arg0->model[5] = Hu3DModelCreateFile(0x470006);
|
|
arg0->model[7] = Hu3DModelCreateFile(0x470007);
|
|
temp_r26 = Hu3DModelCreateFile(0x470001);
|
|
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
|
|
Hu3DModelAttrSet(arg0->model[2], 0x20000);
|
|
Hu3DModelAttrSet(arg0->model[2], 0x40000002);
|
|
Hu3DModelAttrSet(temp_r26, 1);
|
|
|
|
for (var_r30 = 0; var_r30 < 8; var_r30++) {
|
|
Hu3DModelLayerSet(arg0->model[var_r30], 1);
|
|
}
|
|
Hu3DModelPosSet(arg0->model[2], 0.0f, 5000.0f, 0.0f);
|
|
Hu3DModelPosSet(arg0->model[3], 0.0f, 5000.0f, 0.0f);
|
|
Hu3DModelShadowSet(arg0->model[2]);
|
|
Hu3DModelShadowSet(arg0->model[3]);
|
|
Hu3DModelShadowMapSet(arg0->model[0]);
|
|
|
|
for (var_r30 = 0; var_r30 < 5; var_r30++) {
|
|
temp_f31 = (450.0 * cos(M_PI * lbl_1_data_0[var_r30] / 180.0));
|
|
var_f29 = (450.0 * sin(M_PI * lbl_1_data_0[var_r30] / 180.0));
|
|
Hu3DModelPosSet(arg0->model[var_r30+4], temp_f31, 0.0f, var_f29);
|
|
var_f30 = 90.0f - lbl_1_data_0[var_r30];
|
|
Hu3DModelRotSet(arg0->model[var_r30+4], 0.0f, var_f30, 0.0f);
|
|
Hu3DMotionSpeedSet(arg0->model[var_r30+4], 0.0f);
|
|
}
|
|
temp_r27->unk0 = 0;
|
|
temp_r27->unk1C = 5;
|
|
temp_r29 = &Hu3DData[temp_r26];
|
|
temp_r28 = temp_r29->hsfData->root;
|
|
lbl_1_bss_60 = temp_r28->data.childrenCount;
|
|
lbl_1_bss_64 = HuMemDirectMalloc(HEAP_DATA, lbl_1_bss_60 * 64);
|
|
OSReport("Koopa Object Count %d\n", temp_r29->hsfData->objectCnt);
|
|
|
|
for (var_r30 = 0; var_r30 < lbl_1_bss_60; var_r30++) {
|
|
lbl_1_bss_64[var_r30].unk20 = 0;
|
|
}
|
|
|
|
for (var_r30 = 0; var_r30 < lbl_1_bss_60; var_r30++) {
|
|
lbl_1_bss_64[var_r30].unk4 = var_r30;
|
|
fn_1_5C2C(temp_r26, temp_r28->data.children[var_r30], &lbl_1_bss_64[var_r30], 2);
|
|
if (lbl_1_bss_64[var_r30].unk20 != 0) {
|
|
Hu3DModelAttrSet(lbl_1_bss_64[var_r30].unk0, 1);
|
|
Hu3DModelPosSet(lbl_1_bss_64[var_r30].unk0, 0.0f, 250.0f, 0.0f);
|
|
lbl_1_bss_64[var_r30].unk38 = &fn_1_57B4;
|
|
}
|
|
}
|
|
arg0->func = &fn_1_2A74;
|
|
}
|
|
|
|
void fn_1_2A74(omObjData* object) {
|
|
fn_1_2AB4(object);
|
|
fn_1_2CA8(object);
|
|
fn_1_4660(object);
|
|
}
|
|
|
|
void fn_1_2AB4(omObjData* object) {
|
|
unkStruct2* sp8;
|
|
|
|
sp8 = (unkStruct2*)object->data;
|
|
|
|
switch (fn_1_4EA8(0x20)) {
|
|
case 0x20:
|
|
fn_1_2B04(object);
|
|
}
|
|
}
|
|
|
|
s16 lbl_1_data_E4[2] = {0, 0};
|
|
s16 lbl_1_data_E8[2] = {0, 0};
|
|
|
|
void fn_1_2B04(omObjData* object) {
|
|
f32 temp_f31;
|
|
unkStruct* temp_r31;
|
|
|
|
temp_r31 = (unkStruct*)object->data;
|
|
switch (lbl_1_data_E4[0]) {
|
|
case 0:
|
|
lbl_1_data_E8[0]++;
|
|
temp_f31 = lbl_1_data_E8[0] / 360.0f;
|
|
if (temp_f31 > 1.0f) {
|
|
temp_f31 = 1.0f;
|
|
Hu3DModelAttrSet(object->model[3], 1);
|
|
lbl_1_data_E8[0] = 0;
|
|
lbl_1_data_E4[0] = 0;
|
|
fn_1_4EEC(0x20, 0);
|
|
return;
|
|
}
|
|
temp_f31 = sin((M_PI * (90.0f * temp_f31)) / 180.0);
|
|
temp_r31->center.y = (250.0f + (1750.0f * temp_f31));
|
|
}
|
|
Hu3DModelPosSet(object->model[3], temp_r31->center.x, temp_r31->center.y, temp_r31->center.z);
|
|
Hu3DModelRotSet(object->model[3], temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z);
|
|
}
|
|
|
|
void fn_1_2CA8(omObjData* arg0) {
|
|
unkStruct2* sp8;
|
|
|
|
sp8 = (unkStruct2*)arg0->data;
|
|
|
|
switch (fn_1_4EA8(7)) {
|
|
case 1:
|
|
fn_1_2D28(arg0);
|
|
break;
|
|
case 3:
|
|
fn_1_33D4(arg0);
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
fn_1_3DD8(arg0);
|
|
}
|
|
} |