183 lines
6.3 KiB
C
183 lines
6.3 KiB
C
#include "datadir_enum.h"
|
|
#include "ext_math.h"
|
|
#include "game/audio.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
|
|
#include "REL/m443Dll.h"
|
|
|
|
void fn_1_4AB4(omObjData *object);
|
|
void fn_1_4D14(omObjData *object);
|
|
|
|
s32 lbl_1_data_240[5] = { 1, 2, 4, 8, 0x10 };
|
|
|
|
void fn_1_4A5C(Process *process)
|
|
{
|
|
omObjData *var_r31 = omAddObjEx(process, 0x1E, 0xD, 0, -1, fn_1_4AB4);
|
|
var_r31->work[0] = 0;
|
|
}
|
|
|
|
void fn_1_4AB0(void) { }
|
|
|
|
void fn_1_4AB4(omObjData *object)
|
|
{
|
|
s32 var_r30;
|
|
|
|
omSetTra(object, 0.0f, 0.0f, 0.0f);
|
|
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 0));
|
|
Hu3DModelLayerSet(object->model[0], 2);
|
|
object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 2));
|
|
Hu3DModelLayerSet(object->model[2], 2);
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
object->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 4));
|
|
Hu3DModelLayerSet(object->model[3], 2);
|
|
Hu3DMotionSpeedSet(object->model[3], 0.0f);
|
|
object->model[4] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 3));
|
|
Hu3DModelLayerSet(object->model[4], 2);
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
object->model[var_r30 + 5] = Hu3DModelLink(object->model[4]);
|
|
Hu3DModelLayerSet(object->model[var_r30 + 5], 2);
|
|
Hu3DModelScaleSet(object->model[var_r30 + 5], 0.93f, 0.93f, 0.93f);
|
|
}
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
object->model[var_r30 + 9] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M443, 1));
|
|
Hu3DModelLayerSet(object->model[var_r30 + 9], 2);
|
|
Hu3DMotionSpeedSet(object->model[var_r30 + 9], 0.0f);
|
|
}
|
|
object->work[0] = 0;
|
|
object->work[1] = 0;
|
|
object->work[2] = 0;
|
|
object->work[3] = 0;
|
|
object->func = fn_1_4D14;
|
|
}
|
|
|
|
typedef struct M443DllMapUnkStruct {
|
|
Vec unk_00[4];
|
|
float unk_30;
|
|
} M443DllMapUnkStruct; /* size = 0x34 */
|
|
|
|
void fn_1_4D14(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
M443DllCameraStruct *var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
|
|
var_r28 = 1;
|
|
{
|
|
Mtx sp5C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8 = { 0.0f, 0.0f, 0.0f };
|
|
Vec sp2C[4] = {
|
|
{ -50.0f, 0.0f, -150.0f },
|
|
{ 50.0f, 0.0f, -150.0f },
|
|
{ -50.0f, 0.0f, -150.0f },
|
|
{ 50.0f, 0.0f, -150.0f },
|
|
};
|
|
|
|
for (var_r29 = 0; var_r29 < 5; var_r29++) {
|
|
var_r30 = fn_1_40AC(lbl_1_data_240[var_r29]);
|
|
sp20.x = var_r30->unk_1C.x + (var_r30->unk_34 * (sind(var_r30->unk_28.y) * cosd(var_r30->unk_28.x)));
|
|
sp20.y = var_r30->unk_1C.y + (var_r30->unk_34 * -sind(var_r30->unk_28.x));
|
|
sp20.z = var_r30->unk_1C.z + (var_r30->unk_34 * (cosd(var_r30->unk_28.y) * cosd(var_r30->unk_28.x)));
|
|
Hu3DModelPosSetV(object->model[var_r29 + 4], &sp20);
|
|
fn_1_421C(object->model[var_r29 + 4], lbl_1_data_240[var_r29]);
|
|
}
|
|
object->work[1] += 1;
|
|
var_f31 = 150.0f;
|
|
switch (object->work[0]) {
|
|
case 0:
|
|
if (fn_1_3FFC() == 4) {
|
|
object->work[0] += 1;
|
|
object->work[1] = 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
var_f30 = 1.0f - (0.016666668f * object->work[1]);
|
|
if (var_f30 <= 0.0f) {
|
|
object->work[0] += 1;
|
|
object->work[1] = 0;
|
|
var_f30 = 0.0f;
|
|
}
|
|
var_f31 = var_f31 * var_f30;
|
|
break;
|
|
case 2:
|
|
var_f31 = 0.0f;
|
|
if (fn_1_42E4() < 2) {
|
|
object->work[1] = 0;
|
|
}
|
|
if (object->work[1] >= 60.0f) {
|
|
object->work[0] += 1;
|
|
object->work[1] = 0;
|
|
}
|
|
break;
|
|
case 3:
|
|
var_f30 = 0.016666668f * object->work[1];
|
|
if (var_f30 > 1.0f) {
|
|
object->work[0] += 1;
|
|
object->work[1] = 0;
|
|
var_r28 = 0;
|
|
}
|
|
var_f31 = var_f31 * var_f30;
|
|
break;
|
|
default:
|
|
var_r28 = 0;
|
|
break;
|
|
}
|
|
for (var_r29 = 0; var_r29 < 4; var_r29++) {
|
|
var_r30 = fn_1_40AC(lbl_1_data_240[var_r29 + 1]);
|
|
mtxRot(sp5C, var_r30->unk_28.x, var_r30->unk_28.y, 0.0f);
|
|
sp8.z = var_r30->unk_34;
|
|
MTXMultVec(sp5C, &sp8, &sp14);
|
|
VECAdd(&var_r30->unk_1C, &sp14, &sp20);
|
|
sp2C[var_r29].y += var_f31;
|
|
MTXMultVec(sp5C, &sp2C[var_r29], &sp14);
|
|
VECAdd(&sp20, &sp14, &sp20);
|
|
Hu3DModelPosSetV(object->model[var_r29 + 9], &sp20);
|
|
Hu3DModelRotSet(object->model[var_r29 + 9], var_r30->unk_28.x, var_r30->unk_28.y, 0.0f);
|
|
Hu3DModelScaleSet(object->model[var_r29 + 9], 0.15f, 0.15f, 0.15f);
|
|
fn_1_421C(object->model[var_r29 + 9], lbl_1_data_240[var_r29 + 1]);
|
|
if (fn_1_42E4() >= 1) {
|
|
if (object->work[2] == 0) {
|
|
object->work[2] = 1;
|
|
object->work[3] = 0;
|
|
}
|
|
Hu3DMotionSpeedSet(object->model[var_r29 + 9], 0.95f);
|
|
if (var_r28 == 0) {
|
|
Hu3DModelAttrSet(object->model[var_r29 + 9], HU3D_ATTR_DISPOFF);
|
|
}
|
|
}
|
|
}
|
|
if (object->work[2] != 0) {
|
|
object->work[3] += 1;
|
|
if (object->work[3] >= 60.0f) {
|
|
switch (object->work[2]) {
|
|
case 1:
|
|
case 2:
|
|
HuAudFXPlay(0x725);
|
|
break;
|
|
case 3:
|
|
HuAudFXPlay(0x726);
|
|
break;
|
|
}
|
|
object->work[2] += 1;
|
|
object->work[3] = 0;
|
|
}
|
|
}
|
|
if (fn_1_42E4() == 2) {
|
|
Hu3DMotionSpeedSet(object->model[3], 1.0f);
|
|
}
|
|
else if (fn_1_42E4() == 5) {
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
}
|
|
if (fn_1_42E4() == 5) {
|
|
Hu3DModelAttrReset(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelShadowMapSet(object->model[0]);
|
|
Hu3DModelShadowMapSet(object->model[2]);
|
|
}
|
|
}
|
|
}
|