283 lines
7.7 KiB
C
283 lines
7.7 KiB
C
#include "REL/m424Dll.h"
|
|
|
|
#include "math.h"
|
|
#include "game/audio.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
|
|
// STRUCT
|
|
typedef struct _M424DllMapStruct {
|
|
f32 unk0;
|
|
f32 unk4;
|
|
Mtx unk8;
|
|
s32 unk38;
|
|
f32 unk3C;
|
|
s32 unk40;
|
|
s32 unk44;
|
|
s32 unk48;
|
|
s32 unk4C;
|
|
s32 unk50;
|
|
} M424DllMapStruct; // sizeof 0x54
|
|
|
|
// BSS
|
|
Process* lbl_1_bss_54;
|
|
omObjData* lbl_1_bss_50;
|
|
|
|
// DATA
|
|
Vec lbl_1_data_E0 = { 0.0f, 3000.0f, 1.0f };
|
|
Vec lbl_1_data_EC = { 0.0f, 1.0f, 0.0f };
|
|
Vec lbl_1_data_F8 = { 0.0f, 0.0f, 0.0f };
|
|
|
|
// PROTO
|
|
void fn_1_1BB8(omObjData*);
|
|
void fn_1_1E1C(omObjData*);
|
|
void fn_1_2130(omObjData*);
|
|
void fn_1_2438(f32);
|
|
|
|
omObjData* fn_1_1AB8(Process* arg0) {
|
|
lbl_1_bss_54 = arg0;
|
|
lbl_1_bss_50 = omAddObjEx(arg0, 0x7F, 6, 0, -1, fn_1_1BB8);
|
|
lbl_1_bss_50->data = NULL;
|
|
Hu3DShadowCreate(45.0f, 1000.0f, 250000.0f);
|
|
Hu3DShadowTPLvlSet(0.3f);
|
|
Hu3DShadowPosSet(&lbl_1_data_E0, &lbl_1_data_EC, &lbl_1_data_F8);
|
|
return lbl_1_bss_50;
|
|
}
|
|
|
|
void fn_1_1B8C(void) {
|
|
fn_1_2130(lbl_1_bss_50);
|
|
}
|
|
|
|
void fn_1_1BB8(omObjData* arg0) {
|
|
M424DllMapStruct* var_r30;
|
|
|
|
var_r30 = arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x54, 0x10000000);
|
|
memset(var_r30, 0, 0x54);
|
|
var_r30->unk0 = 0.0f;
|
|
var_r30->unk4 = 0.0f;
|
|
var_r30->unk38 = -1;
|
|
var_r30->unk3C = 0.0f;
|
|
var_r30->unk40 = 0;
|
|
var_r30->unk44 = -1;
|
|
var_r30->unk48 = 0;
|
|
var_r30->unk4C = 0;
|
|
var_r30->unk50 = -1;
|
|
arg0->model[0] = Hu3DModelCreateFile(0x370017);
|
|
arg0->model[1] = Hu3DModelCreateFile(0x370018);
|
|
arg0->model[2] = Hu3DModelCreateFile(0x370019);
|
|
arg0->model[3] = Hu3DModelCreateFile(0x37001A);
|
|
arg0->model[4] = Hu3DModelCreateFile(0x37001B);
|
|
arg0->model[5] = Hu3DModelCreateFile(0x37001C);
|
|
Hu3DModelAttrSet(arg0->model[4], 1);
|
|
Hu3DMotionSpeedSet(arg0->model[1], var_r30->unk0);
|
|
Hu3DModelAttrSet(arg0->model[1], 0x40000001);
|
|
Hu3DMotionSpeedSet(arg0->model[0], 0.15f);
|
|
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
|
|
Hu3DModelPosSet(arg0->model[2], 847.135f, 0.0f, 424.56f);
|
|
Hu3DMotionSpeedSet(arg0->model[4], 2.0f);
|
|
Hu3DModelAttrSet(arg0->model[4], 0x40000001);
|
|
Hu3DModelShadowMapSet(arg0->model[0]);
|
|
Hu3DModelShadowMapSet(arg0->model[1]);
|
|
Hu3DModelShadowMapSet(arg0->model[2]);
|
|
arg0->func = fn_1_1E1C;
|
|
}
|
|
|
|
void fn_1_1E1C(omObjData* arg0) {
|
|
f32 temp_f31;
|
|
M424DllMapStruct* temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
if (temp_r31->unk40 > 0) {
|
|
fn_1_2438(temp_r31->unk3C);
|
|
if ((--temp_r31->unk40 <= 0) && (temp_r31->unk44 != -1)) {
|
|
HuAudFXStop(temp_r31->unk44);
|
|
temp_r31->unk44 = -1;
|
|
}
|
|
}
|
|
switch (fn_1_FE0()) {
|
|
case 0:
|
|
temp_r31->unk0 = 0.5f;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
temp_r31->unk0 = 0.0f;
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
temp_r31->unk0 += 0.001f;
|
|
if (temp_r31->unk0 > 0.04f) {
|
|
temp_r31->unk0 = 0.04f;
|
|
}
|
|
if (temp_r31->unk38 != -1) break;
|
|
|
|
temp_r31->unk38 = HuAudFXPlay(0x626);
|
|
break;
|
|
default:
|
|
if ((fn_1_B804() == 0) && (fn_1_8A2C() != 0)) {
|
|
temp_r31->unk0 *= 0.9f;
|
|
if (temp_r31->unk0 < 0.01f) {
|
|
temp_r31->unk0 = 0.0f;
|
|
}
|
|
temp_f31 = temp_r31->unk0 / 0.04f;
|
|
if (temp_r31->unk38 != -1) {
|
|
HuAudFXVolSet(temp_r31->unk38, (s16) (-8191.0f * (1.0f - temp_f31)));
|
|
HuAudFXPitchSet(temp_r31->unk38, (s16) (127.0f * temp_f31));
|
|
if (temp_f31 <= 0.0f) {
|
|
HuAudFXStop(temp_r31->unk38);
|
|
temp_r31->unk38 = -1;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (temp_r31->unk48 != 0) {
|
|
if (temp_r31->unk4C != 0) {
|
|
temp_r31->unk4C = (temp_r31->unk4C - 1);
|
|
} else {
|
|
temp_r31->unk48 = (temp_r31->unk48 - 1);
|
|
if (temp_r31->unk48 != 0) {
|
|
Hu3DModelAttrReset(arg0->model[4], 1);
|
|
Hu3DModelAttrSet(arg0->model[5], 1);
|
|
} else {
|
|
Hu3DModelAttrSet(arg0->model[4], 1);
|
|
Hu3DModelAttrReset(arg0->model[5], 1);
|
|
if (temp_r31->unk50 != -1) {
|
|
HuAudFXStop(temp_r31->unk50);
|
|
temp_r31->unk50 = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
temp_r31->unk4 = (20.0f * temp_r31->unk0);
|
|
PSMTXRotRad(temp_r31->unk8, 0x59, MTXDegToRad(temp_r31->unk4));
|
|
Hu3DMotionSpeedSet(arg0->model[1], temp_r31->unk0);
|
|
}
|
|
|
|
void fn_1_2130(omObjData* arg0) {
|
|
arg0->func = NULL;
|
|
}
|
|
|
|
f32 fn_1_213C(void) {
|
|
M424DllMapStruct* var_r31;
|
|
if (!lbl_1_bss_50) {
|
|
return 0.0f;
|
|
}
|
|
if (!lbl_1_bss_50->data) {
|
|
return 0.0f;
|
|
}
|
|
var_r31 = lbl_1_bss_50->data;
|
|
return var_r31->unk4;
|
|
}
|
|
|
|
void fn_1_21B0(Mtx arg0) {
|
|
M424DllMapStruct* var_r31;
|
|
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
|
|
var_r31 = lbl_1_bss_50->data;
|
|
PSMTXCopy(var_r31->unk8, *(Mtx*)&arg0);
|
|
}
|
|
}
|
|
|
|
void fn_1_2220(Vec* arg0, Vec* arg1) {
|
|
Vec spC;
|
|
M424DllMapStruct* temp_r30;
|
|
|
|
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
|
|
temp_r30 = lbl_1_bss_50->data;
|
|
if (sqrtf((arg0->x * arg0->x) + (arg0->z * arg0->z)) < 700.0f) {
|
|
spC.x = (temp_r30->unk8[0][0] * arg0->x) + (temp_r30->unk8[0][2] * arg0->z);
|
|
spC.z = (temp_r30->unk8[2][0] * arg0->x) + (temp_r30->unk8[2][2] * arg0->z);
|
|
spC.y = arg0->y;
|
|
} else {
|
|
spC = *arg0;
|
|
}
|
|
PSVECSubtract(&spC, arg0, &spC);
|
|
*arg1 = spC;
|
|
}
|
|
}
|
|
|
|
void fn_1_2438(f32 arg0) {
|
|
M424DllMapStruct* spC;
|
|
HsfAttribute* var_r31;
|
|
ModelData* temp_r30;
|
|
HsfData* temp_r29;
|
|
s32 var_r28;
|
|
HsfBitmap* var_r27;
|
|
omObjData* var_r26;
|
|
|
|
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
|
|
var_r26 = lbl_1_bss_50;
|
|
spC = lbl_1_bss_50->data;
|
|
temp_r30 = &Hu3DData[var_r26->model[2]];
|
|
temp_r29 = temp_r30->hsfData;
|
|
var_r31 = temp_r30->hsfData->attribute;
|
|
for (var_r28 = 0; var_r28 < temp_r29->attributeCnt; var_r28++, var_r31++) {
|
|
var_r27 = var_r31->bitmap;
|
|
if (strcmp("cr_dk2", var_r27->name) == 0) break;
|
|
}
|
|
if (var_r28 < temp_r29->attributeCnt) {
|
|
var_r31->unk30 += arg0;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_252C(f32 arg8, s32 arg0) {
|
|
omObjData* sp10;
|
|
M424DllMapStruct* temp_r31;
|
|
|
|
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
|
|
sp10 = lbl_1_bss_50;
|
|
temp_r31 = lbl_1_bss_50->data;
|
|
temp_r31->unk44 = HuAudFXPlay(0x627);
|
|
temp_r31->unk3C = arg8;
|
|
temp_r31->unk40 = arg0;
|
|
}
|
|
}
|
|
|
|
f32 fn_1_25C0(void) {
|
|
omObjData* sp8;
|
|
M424DllMapStruct* temp_r31;
|
|
|
|
if (!lbl_1_bss_50) {
|
|
return 0.0f;
|
|
}
|
|
if (!lbl_1_bss_50->data) {
|
|
return 0.0f;
|
|
}
|
|
sp8 = lbl_1_bss_50;
|
|
temp_r31 = lbl_1_bss_50->data;
|
|
if (temp_r31->unk40 != 0) {
|
|
return 250.0f * temp_r31->unk3C;
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
void fn_1_2670(s32 arg0, s32 arg1) {
|
|
omObjData* temp_r30;
|
|
M424DllMapStruct* temp_r31;
|
|
|
|
if (lbl_1_bss_50 && lbl_1_bss_50->data) {
|
|
temp_r30 = lbl_1_bss_50;
|
|
temp_r31 = lbl_1_bss_50->data;
|
|
temp_r31->unk50 = HuAudFXPlay(0x629);
|
|
temp_r31->unk48 = arg0;
|
|
temp_r31->unk4C = arg1;
|
|
Hu3DMotionTimeSet(temp_r30->model[4], 0.0f);
|
|
}
|
|
}
|
|
|
|
// UNUSED (guessing types)
|
|
M424DllMainStruct lbl_1_data_10C = {
|
|
{ 0.0f, 0.0f, 5500.0f },
|
|
{ -3950.0f, 0.0f, -0.7f },
|
|
0.6f
|
|
};
|
|
|
|
GXColor lbl_1_data_128 = { 0xFF, 0xFF, 0xFF, 0xFF };
|
|
M424DllMainStruct lbl_1_data_12C = {
|
|
{ 0.0f, 5500.0f, -3950.0f },
|
|
{ 0.0f, 1.0f, 0.0f },
|
|
0.0f
|
|
};
|
|
|
|
s32 lbl_1_data_148[2] = {0};
|