195 lines
5 KiB
C
195 lines
5 KiB
C
#include "game/process.h"
|
|
#include "game/object.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/hsfdraw.h"
|
|
|
|
#include "REL/m407dll.h"
|
|
|
|
typedef struct unkDominationData4 {
|
|
/* 0x00 */ u32 unk_00;
|
|
/* 0x04 */ u32 unk_04;
|
|
/* 0x08 */ s32 unk_08;
|
|
/* 0x0C */ s32 unk_0C;
|
|
/* 0x10 */ f32 unk_10;
|
|
/* 0x14 */ f32 unk_14;
|
|
/* 0x18 */ f32 unk_18;
|
|
/* 0x1C */ s32 unk_1C;
|
|
} unkDominationData4; //size of 0x20
|
|
|
|
//function signatures
|
|
void fn_1_4858(omObjData* arg0);
|
|
void fn_1_485C(omObjData* arg0);
|
|
void fn_1_46EC(omObjData* arg0);
|
|
void fn_1_465C(omObjData* arg0, s32 arg1);
|
|
void fn_1_4808(omObjData* arg0);
|
|
|
|
//bss
|
|
Process* lbl_1_bss_3970;
|
|
omObjData* lbl_1_bss_37E0[100];
|
|
|
|
//data
|
|
s32 lbl_1_data_288[] = {
|
|
DATA_MAKE_NUM(DATADIR_M407, 0x15),
|
|
DATA_MAKE_NUM(DATADIR_M407, 0x16),
|
|
DATA_MAKE_NUM(DATADIR_M407, 0x17),
|
|
DATA_MAKE_NUM(DATADIR_M407, 0x18),
|
|
DATA_MAKE_NUM(DATADIR_M407, 0x19)
|
|
};
|
|
|
|
ObjFuncs lbl_1_data_29C[] = {
|
|
fn_1_4858,
|
|
fn_1_485C,
|
|
};
|
|
|
|
void fn_1_41CC(Process* arg0) {
|
|
Process* sp8;
|
|
u32 i;
|
|
u32 temp_r30;
|
|
|
|
lbl_1_bss_3970 = arg0;
|
|
temp_r30 = 0;
|
|
|
|
for (i = 0; i < 40; i++) {
|
|
lbl_1_bss_37E0[i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
|
|
lbl_1_bss_37E0[i]->work[0] = i;
|
|
lbl_1_bss_37E0[i]->work[1] = 0;
|
|
}
|
|
|
|
temp_r30 += i;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 1;
|
|
}
|
|
|
|
temp_r30 += i;
|
|
|
|
for (i = 0; i < 30; i++) {
|
|
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 2;
|
|
}
|
|
|
|
temp_r30 += i;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 3;
|
|
}
|
|
|
|
temp_r30 += i;
|
|
|
|
for (i = 0; i < 22; i++) {
|
|
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
|
|
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 4;
|
|
}
|
|
}
|
|
|
|
void fn_1_44F4(void) {
|
|
u32 i;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37E0); i++) {
|
|
fn_1_4808(lbl_1_bss_37E0[i]);
|
|
}
|
|
}
|
|
|
|
void fn_1_4544(s32 arg0, s32 arg1, f32 arg2, f32 arg3, f32 arg4) {
|
|
omObjData* temp_r29;
|
|
unkDominationData4* temp_r31;
|
|
u32 i;
|
|
|
|
if ((arg4 < (Center.z - 2000.0f)) || (arg4 > (2000.0f + Center.z))) {
|
|
return;
|
|
}
|
|
|
|
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37E0); i++) {
|
|
temp_r29 = lbl_1_bss_37E0[i];
|
|
temp_r31 = temp_r29->data;
|
|
if ((temp_r31->unk_08 == arg0) && (temp_r31->unk_0C == 0)) {
|
|
temp_r31->unk_04 = arg1;
|
|
temp_r31->unk_10 = arg2;
|
|
temp_r31->unk_14 = arg3;
|
|
temp_r31->unk_18 = arg4;
|
|
fn_1_465C(temp_r29, 1);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_465C(omObjData* arg0, s32 arg1) {
|
|
unkDominationData4* temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
temp_r31->unk_0C = arg1;
|
|
temp_r31->unk_1C = 0;
|
|
}
|
|
|
|
void fn_1_4680(omObjData* arg0) {
|
|
unkDominationData4* temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
lbl_1_data_29C[temp_r31->unk_0C](arg0);
|
|
omSetTra(arg0, temp_r31->unk_10, temp_r31->unk_14, temp_r31->unk_18);
|
|
}
|
|
|
|
void fn_1_46EC(omObjData* arg0) {
|
|
unkDominationData4* temp_r30;
|
|
|
|
arg0->func = fn_1_4680;
|
|
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData4), MEMORY_DEFAULT_NUM);
|
|
temp_r30 = arg0->data;
|
|
temp_r30->unk_00 = arg0->work[0];
|
|
temp_r30->unk_08 = arg0->work[1];
|
|
temp_r30->unk_1C = 0;
|
|
arg0->model[0] = Hu3DModelCreateFile(lbl_1_data_288[temp_r30->unk_08]);
|
|
Hu3DModelAttrSet(arg0->model[0], 0x4000);
|
|
Hu3DModelAttrSet(arg0->model[0], 0x40000002);
|
|
Hu3DModelAttrSet(arg0->model[0], 1);
|
|
temp_r30->unk_10 = 0.0f;
|
|
temp_r30->unk_14 = 0.0f;
|
|
temp_r30->unk_18 = 0.0f;
|
|
fn_1_465C(arg0, 0);
|
|
}
|
|
|
|
void fn_1_4808(omObjData* arg0) {
|
|
unkDominationData4* sp8;
|
|
sp8 = arg0->data;
|
|
|
|
Hu3DModelKill(arg0->model[0]);
|
|
|
|
if (arg0->data) {
|
|
HuMemDirectFree(arg0->data);
|
|
}
|
|
}
|
|
|
|
void fn_1_4858(omObjData* arg0) {
|
|
|
|
}
|
|
|
|
void fn_1_485C(omObjData* arg0) {
|
|
unkDominationData4* temp_r30;
|
|
|
|
temp_r30 = arg0->data;
|
|
if (temp_r30->unk_04 != 0) {
|
|
temp_r30->unk_04--;
|
|
}
|
|
|
|
if (temp_r30->unk_1C == 0) {
|
|
Hu3DMotionTimeSet(*arg0->model, 0.0f);
|
|
Hu3DModelAttrReset(*arg0->model, 1);
|
|
Hu3DModelAttrReset(*arg0->model, 0x40000002);
|
|
Hu3DModelAttrSet(*arg0->model, 0x40000001);
|
|
temp_r30->unk_1C++;
|
|
} else if (temp_r30->unk_1C == 1) {
|
|
Hu3DModelAttrReset(arg0->model[0], 0x40000001);
|
|
temp_r30->unk_1C++;
|
|
}
|
|
|
|
if (Hu3DMotionEndCheck(*arg0->model) != 0) {
|
|
Hu3DModelAttrSet(*arg0->model, 1);
|
|
fn_1_465C(arg0, 0);
|
|
}
|
|
}
|