* Add missing imports and mark uninitialized variables * Work on PAL symbols * Ported m457Dll to all versions * Some naming progress on m457Dll Changed some names in present and option
1410 lines
46 KiB
C
1410 lines
46 KiB
C
#include "REL/m424Dll.h"
|
|
|
|
#include "math.h"
|
|
#include "ext_math.h"
|
|
#include "game/audio.h"
|
|
#include "game/chrman.h"
|
|
#include "game/gamework_data.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/pad.h"
|
|
|
|
// STRUCT
|
|
typedef struct _M424DllClawStruct {
|
|
s16 unk0;
|
|
s16 unk2;
|
|
s16 unk4;
|
|
s16 unk6;
|
|
s16 unk8;
|
|
s16 unkA;
|
|
s16 unkC;
|
|
s16 unkE;
|
|
s16 unk10;
|
|
s16 unk12;
|
|
s16 unk14;
|
|
s16 unk16;
|
|
s16 unk18;
|
|
f32 unk1C;
|
|
f32 unk20;
|
|
f32 unk24;
|
|
f32 unk28;
|
|
f32 unk2C;
|
|
Vec unk30;
|
|
Vec unk3C[12];
|
|
Vec unkCC[12];
|
|
s32 unk15C;
|
|
s32 unk160;
|
|
s32 unk164;
|
|
s32 unk168;
|
|
s32 unk16C;
|
|
s32 unk170;
|
|
Vec unk174;
|
|
f32 unk180;
|
|
s32 unk184;
|
|
s32 unk188;
|
|
s32 unk18C;
|
|
s32 unk190;
|
|
s32 unk194;
|
|
s32 unk198;
|
|
s32 unk19C;
|
|
s32 unk1A0;
|
|
s32 unk1A4;
|
|
f32 unk1A8;
|
|
s32 unk1AC;
|
|
} M424DllClawStruct; // sizeof 0x1B0
|
|
|
|
typedef struct _M424DllClawStruct2 {
|
|
s32 unk0;
|
|
f32 unk4;
|
|
f32 unk8;
|
|
f32 unkC;
|
|
} M424DllClawStruct2; // sizeof 0x10
|
|
|
|
typedef struct _M424DllClawStruct3 {
|
|
s32 unk0;
|
|
s32 unk4;
|
|
} M424DllClawStruct3; // sizeof 0x8
|
|
|
|
// BSS
|
|
Process* lbl_1_bss_6DC;
|
|
omObjData* lbl_1_bss_6D8;
|
|
s32 lbl_1_bss_6D0[2];
|
|
s32 lbl_1_bss_6CC;
|
|
s32 lbl_1_bss_6C8;
|
|
s32 lbl_1_bss_6C4;
|
|
s32 lbl_1_bss_6C0;
|
|
M424DllClawStruct3 lbl_1_bss_640[0x10];
|
|
|
|
// DATA
|
|
Vec lbl_1_data_1E0[4] = {
|
|
{ 950.0f, 275.0f, 0.0f },
|
|
{ 900.0f, 360.0f, 320.0f },
|
|
{ 494.99996f, 220.0f, 494.99996f },
|
|
{ 0.0f, 225.0f, 0.0f },
|
|
};
|
|
f32 lbl_1_data_210[3] = { 12.0f, 11.0f, 17.5f };
|
|
char lbl_1_data_21C[12][0x10] = {
|
|
"tsume10",
|
|
"tsume11",
|
|
"tsume12",
|
|
"tsume20",
|
|
"tsume21",
|
|
"tsume22",
|
|
"tsume30",
|
|
"tsume31",
|
|
"tsume32",
|
|
"tsume40",
|
|
"tsume41",
|
|
"tsume42",
|
|
};
|
|
u8 lbl_1_data_2DC[12] = { 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 };
|
|
s32 lbl_1_data_2E8[9] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x03),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x05), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x06), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x42),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x08), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x18) };
|
|
Vec lbl_1_data_30C = { 0.0f, 0.0f, 0.0f };
|
|
|
|
// PROTO
|
|
void fn_1_88E8(u8, f32, f32, f32);
|
|
void fn_1_8924(u8, s32);
|
|
u8 fn_1_8950(u8);
|
|
u8 fn_1_897C(u8);
|
|
u8 fn_1_89A8(u8);
|
|
Vec *fn_1_89D4(u8);
|
|
void fn_1_94D0(omObjData *);
|
|
void fn_1_9A64(omObjData *);
|
|
void fn_1_AE58(omObjData *);
|
|
void fn_1_AE64(omObjData *);
|
|
u16 fn_1_B79C(f32, f32, f32);
|
|
s32 fn_1_B9E0(Vec *arg0, Vec *arg1, f32 arg8, Vec *arg2, s32 arg3);
|
|
void fn_1_C604(s32, s32);
|
|
s32 fn_1_C878(s16, const char *, Mtx, s32);
|
|
void fn_1_C99C(HsfObject *, Mtx, const char *, Mtx);
|
|
void fn_1_CE74(s32);
|
|
void fn_1_CF00(Process *);
|
|
void fn_1_CF80(omObjData *);
|
|
s32 fn_1_D010(s32, s32);
|
|
|
|
omObjData *fn_1_93F0(Process *arg0)
|
|
{
|
|
lbl_1_bss_6DC = arg0;
|
|
lbl_1_bss_6D8 = omAddObjEx(arg0, 0x40, 5, 9, -1, fn_1_94D0);
|
|
lbl_1_bss_6CC = 0;
|
|
lbl_1_bss_6C8 = 0;
|
|
lbl_1_bss_6C4 = 0;
|
|
lbl_1_bss_6C0 = 0;
|
|
fn_1_CF00(arg0);
|
|
return lbl_1_bss_6D8;
|
|
}
|
|
|
|
void fn_1_94A4(void)
|
|
{
|
|
fn_1_AE58(lbl_1_bss_6D8);
|
|
}
|
|
|
|
void fn_1_94D0(omObjData *arg0)
|
|
{
|
|
s32 var_r29;
|
|
M424DllClawStruct *var_r31;
|
|
|
|
var_r31 = arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1B0, 0x10000000);
|
|
memset(var_r31, 0, 0x1B0);
|
|
var_r31->unk0 = lbl_1_bss_24[3];
|
|
var_r31->unk2 = GWPlayerCfg[var_r31->unk0].character;
|
|
var_r31->unk4 = GWPlayerCfg[var_r31->unk0].pad_idx;
|
|
var_r31->unk6 = GWPlayerCfg[var_r31->unk0].iscom;
|
|
var_r31->unk8 = GWPlayerCfg[var_r31->unk0].diff;
|
|
var_r31->unkA = var_r31->unkC = 0;
|
|
var_r31->unk10 = 0;
|
|
var_r31->unk12 = 0;
|
|
var_r31->unk14 = 0;
|
|
var_r31->unk16 = 0;
|
|
var_r31->unk18 = 0;
|
|
var_r31->unk1C = 0.0f;
|
|
var_r31->unk20 = 1.0f;
|
|
var_r31->unk24 = 0.0f;
|
|
var_r31->unk28 = 0.0f;
|
|
var_r31->unk2C = 1.0f;
|
|
var_r31->unk15C = 0;
|
|
var_r31->unk160 = 0;
|
|
var_r31->unk164 = 0;
|
|
var_r31->unk168 = -1;
|
|
var_r31->unk16C = -1;
|
|
var_r31->unk170 = -1;
|
|
var_r31->unk174 = lbl_1_data_30C;
|
|
// @todo how did this happen
|
|
var_r31->unk180 = atan2d(-102.864990234375, 424.559997558593750);
|
|
if (var_r31->unk180 < 0.0f) {
|
|
var_r31->unk180 += 360.0f;
|
|
}
|
|
var_r31->unk184 = -1;
|
|
var_r31->unk30 = lbl_1_data_30C;
|
|
|
|
for (var_r29 = 0; var_r29 < 0xC; var_r29++) {
|
|
var_r31->unk3C[var_r29] = lbl_1_data_30C;
|
|
var_r31->unkCC[var_r29] = lbl_1_data_30C;
|
|
}
|
|
var_r31->unk188 = 0;
|
|
var_r31->unk18C = -1;
|
|
var_r31->unk190 = 0;
|
|
var_r31->unk194 = 0;
|
|
var_r31->unk198 = 0;
|
|
var_r31->unk19C = 0;
|
|
var_r31->unk1A0 = 0;
|
|
var_r31->unk1A4 = 0;
|
|
var_r31->unk1A8 = 0.0f;
|
|
var_r31->unk1AC = 0;
|
|
arg0->model[0] = CharModelCreate(var_r31->unk2, 1);
|
|
Hu3DModelShadowSet(arg0->model[0]);
|
|
CharModelStepTypeSet(var_r31->unk2, 1);
|
|
for (var_r29 = 0; var_r29 < 9; var_r29++) {
|
|
arg0->motion[var_r29] = CharModelMotionCreate(var_r31->unk2, lbl_1_data_2E8[var_r29]);
|
|
}
|
|
var_r31->unkE = 5;
|
|
CharModelMotionSet(var_r31->unk2, arg0->motion[var_r31->unkE]);
|
|
arg0->model[1] = Hu3DModelCreateFile(0x37001D);
|
|
Hu3DModelShadowSet(arg0->model[1]);
|
|
arg0->model[2] = Hu3DModelCreateFile(0x37001E);
|
|
Hu3DModelShadowSet(arg0->model[2]);
|
|
arg0->model[3] = Hu3DModelCreateFile(0x37001F);
|
|
Hu3DModelShadowSet(arg0->model[3]);
|
|
arg0->model[4] = Hu3DModelCreateFile(0x370020);
|
|
Hu3DModelShadowSet(arg0->model[4]);
|
|
Hu3DModelScaleSet(arg0->model[4], 0.9f, 0.9f, 0.9f);
|
|
Hu3DModelHookSet(arg0->model[1], "hook1", arg0->model[2]);
|
|
Hu3DModelHookSet(arg0->model[2], "hook2", arg0->model[3]);
|
|
Hu3DModelHookSet(arg0->model[3], "hook3", arg0->model[4]);
|
|
Hu3DModelPosSet(arg0->model[1], 950.0f, 0.0f, 0.0f);
|
|
Hu3DModelAttrSet(arg0->model[2], 0x40000002);
|
|
Hu3DModelAttrSet(arg0->model[4], 0x40000002);
|
|
arg0->trans.x = 950.0f;
|
|
arg0->trans.y = 275.0f;
|
|
arg0->trans.z = 0.0f;
|
|
arg0->rot.y = 270.0f;
|
|
var_r31->unk10 = 3;
|
|
var_r31->unk24 = 0.45f;
|
|
var_r31->unk12 = 0;
|
|
arg0->func = fn_1_9A64;
|
|
}
|
|
|
|
void fn_1_9A64(omObjData *arg0)
|
|
{
|
|
Mtx sp74;
|
|
Mtx sp44;
|
|
Vec sp38;
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
f32 var_f31;
|
|
f32 temp_f30;
|
|
M424DllClawStruct *temp_r31;
|
|
s32 var_r29;
|
|
s32 temp_r28;
|
|
s32 var_r27;
|
|
s32 var_r26;
|
|
s32 var_r25;
|
|
|
|
temp_r31 = arg0->data;
|
|
if (fn_1_FE0() == 4) {
|
|
temp_r31->unkC = HuPadBtn[temp_r31->unk4];
|
|
temp_r31->unkA = HuPadBtnDown[temp_r31->unk4];
|
|
if (temp_r31->unk6 != 0) {
|
|
fn_1_AE64(arg0);
|
|
}
|
|
}
|
|
else {
|
|
temp_r31->unkC = 0;
|
|
temp_r31->unkA = 0;
|
|
}
|
|
if (fn_1_FE0() <= 1) {
|
|
var_r25 = -1;
|
|
}
|
|
else {
|
|
var_r25 = temp_r31->unk10;
|
|
}
|
|
switch (var_r25) {
|
|
case 0:
|
|
if (fn_1_FE0() >= 4) {
|
|
temp_r31->unk10 = 1;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (fn_1_FE0() > 4) {
|
|
temp_r31->unk10 = 10;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
else if ((temp_r31->unkA & 0x100) != 0) {
|
|
HuAudFXPlay(0x62A);
|
|
temp_r31->unk184 = HuAudFXPlay(0x621);
|
|
temp_r31->unk10 = 2;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 2:
|
|
temp_r31->unk12++;
|
|
temp_r31->unk24 += ((1.0f / 60.0f) * temp_r31->unk20);
|
|
if (temp_r31->unk24 >= 1.0f) {
|
|
temp_r31->unk24 = 1.0f;
|
|
temp_r31->unk20 = -1.0f;
|
|
}
|
|
else {
|
|
if (temp_r31->unk24 <= 0.0f) {
|
|
temp_r31->unk24 = 0.0f;
|
|
temp_r31->unk20 = 1.0f;
|
|
}
|
|
}
|
|
if (fn_1_FE0() > 4) {
|
|
if (temp_r31->unk184 != -1) {
|
|
HuAudFXStop(temp_r31->unk184);
|
|
temp_r31->unk184 = -1;
|
|
}
|
|
HuAudFXPlay(0x622);
|
|
temp_r31->unk10 = 10;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
else if (((temp_r31->unkC & 0x100) == 0) || (temp_r31->unk12 >= 360.0f)) {
|
|
if (temp_r31->unk184 != -1) {
|
|
HuAudFXStop(temp_r31->unk184);
|
|
temp_r31->unk184 = -1;
|
|
}
|
|
HuAudFXPlay(0x622);
|
|
temp_r31->unk184 = HuAudFXPlay(0x62C);
|
|
temp_r31->unk168 = -1;
|
|
temp_r31->unk16C = -1;
|
|
temp_r31->unk10 = 3;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 3:
|
|
temp_r31->unk12++;
|
|
if (temp_r31->unk15C == 0) {
|
|
temp_r31->unk28 += (1.0f / 60.0f);
|
|
}
|
|
if (temp_r31->unk28 > 1.0f) {
|
|
temp_r31->unk28 = 1.0f;
|
|
}
|
|
if (temp_r31->unk12 >= 0x3C) {
|
|
if (temp_r31->unk184 != -1) {
|
|
HuAudFXStop(temp_r31->unk184);
|
|
temp_r31->unk184 = -1;
|
|
}
|
|
HuAudFXPlay(0x62D);
|
|
HuAudFXPlay(0x625);
|
|
temp_r31->unk10 = 4;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
temp_r31->unk15C = 0;
|
|
break;
|
|
case 4:
|
|
temp_r31->unk12++;
|
|
if (temp_r31->unk160 == 0) {
|
|
temp_r31->unk2C -= (1.0f / 60.0f);
|
|
}
|
|
if (temp_r31->unk2C < 0.0f) {
|
|
temp_r31->unk2C = 0.0f;
|
|
}
|
|
if (temp_r31->unk12 >= 0x3C) {
|
|
temp_r31->unk10 = 5;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
temp_r31->unk160 = 0;
|
|
break;
|
|
case 5:
|
|
temp_r31->unk12++;
|
|
if (temp_r31->unk12 >= 6.0f) {
|
|
temp_r31->unk184 = HuAudFXPlay(0x62C);
|
|
if ((temp_r31->unk168 != -1)) {
|
|
var_r27 = fn_1_897C(temp_r31->unk168);
|
|
if (var_r27 != 0) {
|
|
var_r26 = fn_1_89A8(temp_r31->unk168);
|
|
HuAudCharVoicePlay(var_r26, 0x128);
|
|
}
|
|
}
|
|
temp_r31->unk10 = 6;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 6:
|
|
temp_r31->unk12++;
|
|
temp_r31->unk28 -= (1.0f / 45.0f);
|
|
if (temp_r31->unk28 <= 0.0f) {
|
|
if (temp_r31->unk184 != -1) {
|
|
HuAudFXStop(temp_r31->unk184);
|
|
temp_r31->unk184 = -1;
|
|
}
|
|
HuAudFXPlay(0x62D);
|
|
temp_r31->unk28 = 0.0f;
|
|
if (temp_r31->unk168 != -1) {
|
|
var_r27 = fn_1_897C(temp_r31->unk168);
|
|
}
|
|
else {
|
|
var_r27 = -1;
|
|
}
|
|
if (temp_r31->unk168 == -1) {
|
|
if (fn_1_FE0() > 4) {
|
|
temp_r31->unk10 = 10;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
else {
|
|
temp_r31->unk10 = 8;
|
|
temp_r31->unk12 = 0;
|
|
HuAudFXPlay(0x625);
|
|
}
|
|
}
|
|
else if (var_r27 == 0) {
|
|
temp_r31->unk10 = 8;
|
|
temp_r31->unk12 = 0;
|
|
HuAudFXPlay(0x625);
|
|
}
|
|
else {
|
|
if (temp_r31->unk168 != -1) {
|
|
fn_1_252C(-0.01f, 0x3C);
|
|
fn_1_2670(0x75, 0);
|
|
}
|
|
HuAudFXPlay(0x62B);
|
|
temp_r31->unk184 = HuAudFXPlay(0x623);
|
|
temp_r31->unk10 = 7;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
if (arg0->rot.y < temp_r31->unk180) {
|
|
arg0->rot.y += 1.25f;
|
|
}
|
|
else if (arg0->rot.y > temp_r31->unk180) {
|
|
arg0->rot.y = temp_r31->unk180;
|
|
}
|
|
var_f31 = 0.35f - temp_r31->unk24;
|
|
if (var_f31 > 0.0125f) {
|
|
temp_r31->unk24 += 0.0125f;
|
|
}
|
|
else if (var_f31 < -0.0125f) {
|
|
temp_r31->unk24 -= 0.0125f;
|
|
}
|
|
else {
|
|
temp_r31->unk24 = 0.35f;
|
|
}
|
|
if ((arg0->rot.y == temp_r31->unk180) && (0.35f == temp_r31->unk24)) {
|
|
if (temp_r31->unk184 != -1) {
|
|
HuAudFXStop(temp_r31->unk184);
|
|
temp_r31->unk184 = -1;
|
|
}
|
|
HuAudFXPlay(0x624);
|
|
HuAudFXPlay(0x625);
|
|
temp_r31->unk10 = 8;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 8:
|
|
if ((temp_r31->unk12 == 0) && (temp_r31->unk168 != -1)) {
|
|
if (fn_1_897C(temp_r31->unk168) != 0) {
|
|
fn_1_8924(temp_r31->unk168, 4);
|
|
var_r26 = fn_1_89A8(temp_r31->unk168);
|
|
HuAudCharVoicePlay(var_r26, 0x123);
|
|
fn_1_D010(0x628, 30);
|
|
}
|
|
else {
|
|
fn_1_8924(temp_r31->unk168, 2);
|
|
}
|
|
temp_r31->unk16C = temp_r31->unk168;
|
|
temp_r31->unk168 = -1;
|
|
}
|
|
temp_r31->unk12++;
|
|
temp_r31->unk2C += 0.033333335f;
|
|
if (temp_r31->unk2C > 1.0f) {
|
|
temp_r31->unk2C = 1.0f;
|
|
}
|
|
if (temp_r31->unk2C >= 1.0f) {
|
|
if (arg0->rot.y == temp_r31->unk180) {
|
|
temp_r31->unk184 = HuAudFXPlay(0x623);
|
|
}
|
|
if (temp_r31->unk16C != -1) {
|
|
if (fn_1_897C(temp_r31->unk16C) != 0) {
|
|
lbl_1_bss_6CC++;
|
|
}
|
|
}
|
|
temp_r31->unk10 = 9;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 9:
|
|
temp_r31->unk12++;
|
|
if (arg0->rot.y > 270.0f) {
|
|
arg0->rot.y -= 1.25f;
|
|
}
|
|
else if (arg0->rot.y < 270.0f) {
|
|
arg0->rot.y = 270.0f;
|
|
}
|
|
if (temp_r31->unk24 > 0.025f) {
|
|
temp_r31->unk24 -= 0.025f;
|
|
}
|
|
else if (temp_r31->unk24 < 0.05f) {
|
|
temp_r31->unk24 = 0.0f;
|
|
}
|
|
if ((270.0f == arg0->rot.y) && (0.0f == temp_r31->unk24)) {
|
|
if (temp_r31->unk184 != -1) {
|
|
HuAudFXStop(temp_r31->unk184);
|
|
temp_r31->unk184 = -1;
|
|
HuAudFXPlay(0x624);
|
|
}
|
|
temp_r31->unk20 = 1.0f;
|
|
temp_r31->unk10 = 1;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 10:
|
|
if (fn_1_B888() != 0) {
|
|
temp_r31->unkE = 5;
|
|
CharModelMotionSet(temp_r31->unk2, arg0->motion[temp_r31->unkE]);
|
|
temp_r31->unkE = 3;
|
|
CharModelMotionShiftSet(temp_r31->unk2, arg0->motion[temp_r31->unkE], 0.0f, 8.0f, 0U);
|
|
temp_r31->unk16 = 0;
|
|
temp_r31->unk14 = 0;
|
|
temp_r31->unk1C = lbl_1_data_210[0];
|
|
temp_r31->unk18 = fn_1_B79C(lbl_1_data_1E0[0].y, lbl_1_data_1E0[1].y, temp_r31->unk1C);
|
|
temp_r31->unk10 = 11;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
else {
|
|
temp_r31->unk10 = 13;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 11:
|
|
var_r29 = temp_r31->unk14;
|
|
if (var_r29 > 2) {
|
|
var_r29 = 2;
|
|
}
|
|
if (temp_r31->unk16 == 0) {
|
|
temp_r31->unk12++;
|
|
sp14 = lbl_1_data_1E0[var_r29];
|
|
sp8 = lbl_1_data_1E0[var_r29 + 1];
|
|
arg0->rot.y = fn_1_1470(atan2d((sp8.x - arg0->trans.x), (sp8.z - arg0->trans.z)), arg0->rot.y, 10.0f);
|
|
var_f31 = (f32)temp_r31->unk12 / temp_r31->unk18;
|
|
arg0->trans.x = sp14.x + (var_f31 * (sp8.x - sp14.x));
|
|
arg0->trans.z = sp14.z + (var_f31 * (sp8.z - sp14.z));
|
|
arg0->trans.y += temp_r31->unk1C;
|
|
temp_r31->unk1C -= 0.65333337f;
|
|
if (temp_r31->unk14 == 2) {
|
|
if ((temp_r31->unk12 >= (0.4f * temp_r31->unk18)) && (temp_r31->unkE != 6) && (CharModelMotionShiftIDGet(temp_r31->unk2) == -1)) {
|
|
temp_r31->unkE = 6;
|
|
CharModelMotionShiftSet(temp_r31->unk2, arg0->motion[temp_r31->unkE], 0.0f, 8.0f, 0);
|
|
}
|
|
}
|
|
if (temp_r31->unk12 >= temp_r31->unk18) {
|
|
arg0->trans.x = sp8.x;
|
|
arg0->trans.y = sp8.y;
|
|
arg0->trans.z = sp8.z;
|
|
temp_r31->unkE = 4;
|
|
CharModelMotionShiftSet(temp_r31->unk2, arg0->motion[temp_r31->unkE], 0.0f, 8.0f, 0U);
|
|
temp_r31->unk12 = 0;
|
|
temp_r31->unk16 ^= 1;
|
|
if (++temp_r31->unk14 >= 3) {
|
|
temp_r31->unk10 = 0xC;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
sp14 = lbl_1_data_1E0[var_r29];
|
|
sp8 = lbl_1_data_1E0[var_r29 + 1];
|
|
var_f31 = atan2d((sp8.x - arg0->trans.x), (sp8.z - arg0->trans.z));
|
|
arg0->rot.y = fn_1_1470(var_f31, arg0->rot.y, 10.0f);
|
|
if ((fn_1_1358(var_f31, arg0->rot.y) < 1.0f) && (CharModelMotionShiftIDGet(temp_r31->unk2) == -1)) {
|
|
temp_r31->unkE = 3;
|
|
CharModelMotionShiftSet(temp_r31->unk2, arg0->motion[temp_r31->unkE], 0.0f, 8.0f, 0);
|
|
temp_r31->unk1C = lbl_1_data_210[var_r29];
|
|
temp_r31->unk18 = fn_1_B79C(sp14.y, sp8.y, temp_r31->unk1C);
|
|
temp_r31->unk12 = 0;
|
|
temp_r31->unk16 ^= 1;
|
|
}
|
|
}
|
|
break;
|
|
case 12:
|
|
if ((temp_r31->unkE != 0) && (CharModelMotionShiftIDGet(temp_r31->unk2) == -1)) {
|
|
temp_r31->unkE = 0;
|
|
CharModelMotionShiftSet(temp_r31->unk2, arg0->motion[temp_r31->unkE], 0.0f, 8.0f, 0x40000008);
|
|
}
|
|
arg0->rot.y = fn_1_1470(0.0f, arg0->rot.y, 10.0f);
|
|
if ((fn_1_1358(0.0f, arg0->rot.y) < 1.0f) && (temp_r31->unkE == 0)) {
|
|
temp_r31->unk10 = 0xD;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
break;
|
|
case 13:
|
|
if (fn_1_FE0() >= 7) {
|
|
if (fn_1_B888() != 0) {
|
|
temp_r31->unk10 = 14;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
else {
|
|
temp_r31->unk10 = 15;
|
|
temp_r31->unk12 = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 14:
|
|
if ((temp_r31->unkE != 7) && (CharModelMotionShiftIDGet(temp_r31->unk2) == -1)) {
|
|
temp_r31->unkE = 7;
|
|
CharModelMotionShiftSet(temp_r31->unk2, arg0->motion[temp_r31->unkE], 0.0f, 8.0f, 0);
|
|
}
|
|
break;
|
|
case 15:
|
|
break;
|
|
}
|
|
if (temp_r31->unk10 <= 9) {
|
|
Hu3DModelRotSet(arg0->model[1], 0.0f, 90.0f + arg0->rot.y, 0.0f);
|
|
}
|
|
temp_r28 = arg0->model[2];
|
|
Hu3DMotionTimeSet(temp_r28, temp_r31->unk24 * Hu3DMotionMaxTimeGet(temp_r28));
|
|
fn_1_CE74(temp_r28);
|
|
temp_f30 = 0.2f + (0.8f * temp_r31->unk28);
|
|
Hu3DModelScaleSet(arg0->model[3], 1.0f, temp_f30, 1.0f);
|
|
Hu3DModelScaleSet(arg0->model[4], 1.0f, 1.0f / temp_f30, 1.0f);
|
|
temp_r28 = arg0->model[4];
|
|
Hu3DMotionTimeSet(temp_r28, temp_r31->unk2C * Hu3DMotionMaxTimeGet(temp_r28));
|
|
fn_1_CE74(temp_r28);
|
|
fn_1_C878(arg0->model[1], "hook1", sp74, 0);
|
|
fn_1_C878(arg0->model[2], "hook2", sp74, 1);
|
|
fn_1_C878(arg0->model[3], "hook3", sp74, 1);
|
|
MTXCopy(sp74, sp44);
|
|
temp_r31->unk30.x = sp74[0][3];
|
|
temp_r31->unk30.y = sp74[1][3];
|
|
temp_r31->unk30.z = sp74[2][3];
|
|
|
|
for (var_r29 = 0; var_r29 < 0xC; var_r29++) {
|
|
MTXCopy(sp44, sp74);
|
|
fn_1_C878(arg0->model[4], lbl_1_data_21C[var_r29], sp74, 1);
|
|
temp_r31->unkCC[var_r29] = temp_r31->unk3C[var_r29];
|
|
temp_r31->unk3C[var_r29].x = sp74[0][3];
|
|
temp_r31->unk3C[var_r29].y = sp74[1][3];
|
|
temp_r31->unk3C[var_r29].z = sp74[2][3];
|
|
}
|
|
if ((temp_r31->unk168 != -1) && (temp_r31->unk10 >= 6)) {
|
|
sp2C.x = 0.0f;
|
|
sp2C.y = temp_r31->unk174.y;
|
|
sp2C.z = 0.0f;
|
|
VECSubtract(&temp_r31->unk174, &sp2C, &sp20);
|
|
var_f31 = VECMag(&sp20);
|
|
if (var_f31 != 0.0f) {
|
|
VECNormalize(&sp20, &sp20);
|
|
VECScale(&sp20, &sp20, 0.9f * var_f31);
|
|
VECAdd(&sp2C, &sp20, &temp_r31->unk174);
|
|
}
|
|
VECAdd(&temp_r31->unk30, &temp_r31->unk174, &sp38);
|
|
fn_1_88E8(temp_r31->unk168, sp38.x, sp38.y, sp38.z);
|
|
}
|
|
temp_r31->unk164 = 1;
|
|
}
|
|
|
|
void fn_1_AE58(omObjData *arg0)
|
|
{
|
|
arg0->func = NULL;
|
|
}
|
|
|
|
f32 lbl_1_data_36C[4][2] = { 30.0f, 24.0f, 24.0f, 18.0f, 12.0f, 6.0f, 6.0f, 0.0f };
|
|
|
|
f32 lbl_1_data_38C[4][2] = { 0.2f, 0.15f, 0.15f, 0.1f, 0.1f, 0.05f, 0.05f, 0.0f };
|
|
|
|
void fn_1_AE64(omObjData *arg0)
|
|
{
|
|
M424DllClawStruct2 sp20[8];
|
|
M424DllClawStruct2 sp10;
|
|
s32 spC;
|
|
f32 var_f31;
|
|
f32 var_f29;
|
|
f32 temp_f28;
|
|
f32 temp_f27;
|
|
f32 temp_f26;
|
|
f32 var_f25;
|
|
f32 var_f24;
|
|
s32 temp_r24;
|
|
s32 temp_r23;
|
|
M424DllClawStruct *temp_r31;
|
|
Vec *var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
s32 var_r27;
|
|
M424DllBallStruct2 *var_r26;
|
|
s32 var_r25;
|
|
|
|
spC = 0;
|
|
temp_r31 = arg0->data;
|
|
var_r26 = &lbl_1_bss_60[0];
|
|
if (var_r26) {
|
|
temp_r31->unkC = 0;
|
|
temp_r31->unkA = 0;
|
|
switch (temp_r31->unk10) {
|
|
case 1:
|
|
if (temp_r31->unk188 == 0) {
|
|
temp_r31->unk188 = 1;
|
|
temp_r31->unk18C = -1;
|
|
temp_r31->unk190 = 0;
|
|
temp_r31->unk194 = 0;
|
|
temp_r31->unk198 = 0;
|
|
temp_r31->unk19C = 0;
|
|
temp_r31->unk1A0 = 0;
|
|
temp_r31->unk1A4 = 0;
|
|
temp_r31->unk1A8 = 0.0f;
|
|
}
|
|
if (temp_r31->unk18C == -1) {
|
|
for (var_r29 = 0, var_r28 = 0; var_r29 < lbl_1_bss_58; var_r29++, var_r26++) {
|
|
if ((fn_1_897C(var_r29) != 0) && (fn_1_8950(var_r29) <= 2)) {
|
|
var_r30 = fn_1_89D4(var_r29);
|
|
var_f31 = atan2d(var_r30->x, var_r30->z);
|
|
if (var_f31 > 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
if (var_r28 < 8) {
|
|
if (var_f31 >= -90.0f) {
|
|
if (var_f31 <= 45.0f) {
|
|
sp20[var_r28].unk0 = var_r29;
|
|
sp20[var_r28].unkC = var_f31;
|
|
sp20[var_r28].unk4 = var_r30->x;
|
|
sp20[var_r28].unk8 = var_r30->z;
|
|
var_r28++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (var_r28 != 0) {
|
|
for (var_r29 = 0; var_r29 < (var_r28 - 1); var_r29++) {
|
|
var_r27 = var_r29 + 1;
|
|
for (; var_r27 < var_r28; var_r27++) {
|
|
if (sp20[var_r29].unkC < sp20[var_r27].unkC) {
|
|
sp10 = sp20[var_r29];
|
|
sp20[var_r29] = sp20[var_r27];
|
|
sp20[var_r27] = sp10;
|
|
}
|
|
}
|
|
}
|
|
temp_r31->unk18C = sp20[0].unk0;
|
|
temp_r31->unk1A8 = sp20[0].unkC;
|
|
temp_r31->unk19C = 0;
|
|
temp_r31->unk1A0 = 0;
|
|
temp_r31->unk1A4 = 0;
|
|
temp_r31->unk1AC = 0;
|
|
}
|
|
}
|
|
if (temp_r31->unk18C != -1) {
|
|
var_r30 = fn_1_89D4(temp_r31->unk18C);
|
|
var_f31 = atan2d(var_r30->x, var_r30->z);
|
|
if (var_f31 > 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
if (var_f31 >= 30.0f) {
|
|
if (temp_r31->unk19C != 0) {
|
|
temp_f27 = lbl_1_data_36C[temp_r31->unk8][0];
|
|
temp_f26 = lbl_1_data_36C[temp_r31->unk8][1];
|
|
temp_r24 = ((temp_f26 - temp_f27) * (temp_f27 * (0.007874016f * (frand() & 0x7F))));
|
|
temp_f27 = lbl_1_data_38C[temp_r31->unk8][0];
|
|
temp_f26 = lbl_1_data_38C[temp_r31->unk8][1];
|
|
temp_r23 = ((temp_f26 - temp_f27) * (temp_f27 * (0.007874016f * (frand() & 0x7F))));
|
|
temp_r31->unk190 = ((3.0f * temp_r31->unk1A4) + temp_r24);
|
|
temp_f28 = (var_r30->x * var_r30->x) + (var_r30->z * var_r30->z);
|
|
var_f29 = sqrtf(temp_f28);
|
|
var_f29 = (var_f29 - 350.0f) / 250.0f + temp_r23;
|
|
if (var_f29 < 0.0f) {
|
|
var_f29 = 0.0f;
|
|
}
|
|
else if (var_f29 > 1.0f) {
|
|
var_f29 = 1.0f;
|
|
}
|
|
temp_r31->unk194 = (60.0f * (1.0f - var_f29));
|
|
var_f25 = (1.5f + (-1.5f * var_f29));
|
|
temp_r31->unk190 -= (s32)(60.0f * var_f25);
|
|
var_f25 = (1.0f + (-1.1f * var_f29));
|
|
temp_r31->unk198 = (60.0f * var_f25);
|
|
temp_r31->unk19C = 0;
|
|
temp_r31->unk1A0 = 0;
|
|
temp_r31->unk1AC = 0;
|
|
temp_r31->unk1AC = (temp_r31->unk1AC + (60.0f * (1.0f - var_f29)));
|
|
}
|
|
if (++temp_r31->unk1AC >= (temp_r31->unk190 - temp_r31->unk198)) {
|
|
temp_r31->unkA |= 0x100;
|
|
temp_r31->unkC |= 0x100;
|
|
temp_r31->unk1AC = 0;
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
if (var_f31 >= (15.0f + temp_r31->unk1A8)) {
|
|
temp_r31->unk1A0++;
|
|
temp_r31->unk1A8 = var_f31;
|
|
temp_r31->unk1A4 = (temp_r31->unk19C / temp_r31->unk1A0);
|
|
return;
|
|
}
|
|
temp_r31->unk19C++;
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (temp_r31->unk18C != -1) {
|
|
var_r25 = 1;
|
|
if (++temp_r31->unk1AC >= temp_r31->unk194) {
|
|
var_r25 = 0;
|
|
}
|
|
}
|
|
else {
|
|
var_r25 = 0;
|
|
}
|
|
if (var_r25 != 0) {
|
|
temp_r31->unkC |= 0x100;
|
|
}
|
|
temp_r31->unk188 = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
u16 fn_1_B79C(f32 arg0, f32 arg1, f32 arg2)
|
|
{
|
|
f32 var_f31;
|
|
f32 var_f3;
|
|
u16 var_r31;
|
|
|
|
var_r31 = 0;
|
|
for (var_f31 = arg0; arg2 > 0.0f || var_f31 > arg1; var_r31++) {
|
|
var_f31 += arg2;
|
|
arg2 -= 0.65333337f;
|
|
}
|
|
return var_r31;
|
|
}
|
|
|
|
s32 fn_1_B804(void)
|
|
{
|
|
M424DllClawStruct *temp_r31;
|
|
|
|
if (!lbl_1_bss_6D8) {
|
|
return 0;
|
|
}
|
|
if (!lbl_1_bss_6D8->data) {
|
|
return 0;
|
|
}
|
|
temp_r31 = lbl_1_bss_6D8->data;
|
|
if ((temp_r31->unk10 >= 1) && (temp_r31->unk10 < 6)) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
s32 fn_1_B888(void)
|
|
{
|
|
if (lbl_1_bss_6CC >= 3) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_B8AC(void)
|
|
{
|
|
M424DllClawStruct *temp_r31;
|
|
|
|
if (!lbl_1_bss_6D8) {
|
|
return 0;
|
|
}
|
|
if (!lbl_1_bss_6D8->data) {
|
|
return 0;
|
|
}
|
|
|
|
temp_r31 = lbl_1_bss_6D8->data;
|
|
if (temp_r31->unk10 >= 10) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
s32 fn_1_B924(void)
|
|
{
|
|
M424DllClawStruct *temp_r31;
|
|
|
|
if (!lbl_1_bss_6D8) {
|
|
return 0;
|
|
}
|
|
if (!lbl_1_bss_6D8->data) {
|
|
return 0;
|
|
}
|
|
|
|
temp_r31 = lbl_1_bss_6D8->data;
|
|
if (temp_r31->unk10 >= 13) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void fn_1_B99C(Vec *arg0, Vec *arg1, f32 arg8, Vec *arg2)
|
|
{
|
|
fn_1_B9E0(arg0, arg1, arg8, arg2, 0x10);
|
|
}
|
|
|
|
s32 fn_1_B9E0(Vec *arg0, Vec *arg1, f32 arg8, Vec *arg2, s32 arg3)
|
|
{
|
|
Vec sp60;
|
|
Vec sp54;
|
|
Vec sp48;
|
|
Vec sp3C;
|
|
Vec sp30;
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
f32 temp_f30;
|
|
f32 var_f29;
|
|
f32 temp_f28;
|
|
f32 temp_f27;
|
|
f32 temp_f26;
|
|
f32 var_f25;
|
|
f32 var_f24;
|
|
f32 var_f23;
|
|
M424DllClawStruct *temp_r31;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
s32 var_r26;
|
|
omObjData *var_r24;
|
|
s32 var_r23;
|
|
|
|
var_r23 = 1;
|
|
var_r28 = 0;
|
|
var_r24 = lbl_1_bss_6D8;
|
|
temp_r31 = var_r24->data;
|
|
VECAdd(arg0, arg1, &sp24);
|
|
spC = *arg1;
|
|
*arg2 = *arg0;
|
|
temp_f30 = 5.0f + arg8;
|
|
if (temp_r31->unk164 == 0) {
|
|
return 0;
|
|
}
|
|
switch (temp_r31->unk10) {
|
|
case 3:
|
|
for (var_r29 = 0; var_r29 < 0xC; var_r29++) {
|
|
if (var_r28 != 0) {
|
|
sp24 = *arg2;
|
|
VECSubtract(&sp24, arg0, &spC);
|
|
}
|
|
VECSubtract(&sp24, &temp_r31->unk3C[var_r29], &sp18);
|
|
var_f29 = VECMag(&sp18);
|
|
if (var_f29 < temp_f30) {
|
|
if (0.0f == var_f29) {
|
|
var_f29 = temp_f30;
|
|
sp18.x = 0.0f;
|
|
sp18.y = 0.0f;
|
|
sp18.z = 1.0f;
|
|
}
|
|
var_f23 = sqrtf((sp18.x * sp18.x) + (sp18.z * sp18.z));
|
|
if ((temp_r31->unk3C[var_r29].y > sp24.y) && (var_f23 < 17.599999999999998)) {
|
|
temp_r31->unk15C = 1;
|
|
}
|
|
else {
|
|
VECNormalize(&sp18, &sp18);
|
|
VECScale(&sp18, &sp18, temp_f30);
|
|
VECAdd(&temp_r31->unk3C[var_r29], &sp18, arg2);
|
|
}
|
|
var_r28 = 1;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
for (var_r29 = 0; var_r29 < 0xC; var_r29++) {
|
|
if (var_r28 != 0) {
|
|
sp24 = *arg2;
|
|
VECSubtract(&sp24, arg0, &spC);
|
|
}
|
|
var_r26 = 0;
|
|
sp60 = temp_r31->unk3C[var_r29];
|
|
VECAdd(&temp_r31->unkCC[var_r29], &spC, &sp54);
|
|
VECSubtract(&sp60, &sp54, &sp18);
|
|
VECSubtract(&sp24, &sp54, &sp48);
|
|
temp_f26 = (sp18.z * sp18.z) + ((sp18.x * sp18.x) + (sp18.y * sp18.y));
|
|
if (temp_f26 != 0.0f) {
|
|
var_f24 = (sp18.x * sp48.x) + (sp18.y * sp48.y) + (sp18.z * sp48.z);
|
|
temp_f27 = var_f24 / temp_f26;
|
|
if (temp_f27 >= 0.0f) {
|
|
if (temp_f27 <= 1.0f) {
|
|
VECScale(&sp18, &sp18, temp_f27);
|
|
VECAdd(&sp54, &sp18, &sp3C);
|
|
VECSubtract(&sp24, &sp3C, &sp30);
|
|
var_f29 = VECMag(&sp30);
|
|
if (var_f29 == 0.0f) {
|
|
if (VECMag(&sp18) <= 0.0f) {
|
|
sp18.x = sp18.y = 0.0f;
|
|
sp18.z = 1.0f;
|
|
}
|
|
VECNormalize(&sp18, &sp30);
|
|
VECScale(&sp30, &sp30, temp_f30);
|
|
VECAdd(&sp60, &sp30, arg2);
|
|
var_r28 = 1;
|
|
var_r26 = 1;
|
|
}
|
|
else if (var_f29 < temp_f30) {
|
|
if (VECMag(&sp30) <= 0.0f) {
|
|
|
|
sp30.x = sp30.y = 0.0f;
|
|
sp30.z = 1.0f;
|
|
}
|
|
VECNormalize(&sp30, &sp30);
|
|
VECScale(&sp30, &sp30, temp_f30);
|
|
VECAdd(&sp3C, &sp30, arg2);
|
|
var_r28 = 1;
|
|
var_r26 = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (var_r26 == 0) {
|
|
VECSubtract(&sp24, &sp60, &sp18);
|
|
var_f29 = VECMag(&sp18);
|
|
if (var_f29 < temp_f30) {
|
|
if (var_f29 <= 0.0f) {
|
|
sp18.x = sp18.y = 0.0f;
|
|
sp18.z = 1.0f;
|
|
}
|
|
VECNormalize(&sp18, &sp18);
|
|
VECScale(&sp18, &sp18, temp_f30);
|
|
VECAdd(&temp_r31->unk3C[var_r29], &sp18, arg2);
|
|
var_r28 = 1;
|
|
var_r26 = 1;
|
|
}
|
|
}
|
|
if (var_r26 == 0) {
|
|
VECSubtract(&sp24, &sp54, &sp18);
|
|
var_f29 = VECMag(&sp18);
|
|
if (var_f29 < temp_f30) {
|
|
if (var_f29 <= 0.0f) {
|
|
sp18.x = sp18.y = 0.0f;
|
|
sp18.z = 1.0f;
|
|
}
|
|
VECNormalize(&sp18, &sp18);
|
|
VECScale(&sp18, &sp18, temp_f30);
|
|
VECAdd(&temp_r31->unk3C[var_r29], &sp18, arg2);
|
|
var_r28 = 1;
|
|
var_r26 = 1;
|
|
}
|
|
}
|
|
if ((lbl_1_data_2DC[var_r29] != 0) && (var_r26 == 0)) {
|
|
var_r23 = 0;
|
|
}
|
|
}
|
|
if ((temp_r31->unk10 == 4) && (var_r23 != 0)) {
|
|
arg2->x = temp_r31->unk30.x;
|
|
arg2->y = arg0->y;
|
|
arg2->z = temp_r31->unk30.z;
|
|
arg3 = 0;
|
|
temp_r31->unk160 = 1;
|
|
}
|
|
break;
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 9:
|
|
break;
|
|
}
|
|
if (var_r28 != 0) {
|
|
if (--arg3 > 0) {
|
|
sp24 = *arg2;
|
|
VECSubtract(&sp24, arg0, &spC);
|
|
if (fn_1_B9E0(arg0, &spC, arg8, &sp24, arg3) != 0) {
|
|
*arg2 = sp24;
|
|
}
|
|
}
|
|
}
|
|
|
|
(void)temp_f30; // @todo fix
|
|
(void)temp_f30;
|
|
return var_r28;
|
|
}
|
|
|
|
s32 fn_1_C210(Vec *arg0)
|
|
{
|
|
Vec sp1C;
|
|
Vec sp10;
|
|
f32 spC;
|
|
M424DllClawStruct *temp_r31;
|
|
omObjData *var_r30;
|
|
s32 var_r29;
|
|
|
|
var_r29 = 0;
|
|
var_r30 = lbl_1_bss_6D8;
|
|
temp_r31 = var_r30->data;
|
|
if (temp_r31->unk164 == 0) {
|
|
return 0;
|
|
}
|
|
switch (temp_r31->unk10) {
|
|
case 5:
|
|
sp1C.x = temp_r31->unk30.x;
|
|
sp1C.y = -120.00001f + temp_r31->unk30.y;
|
|
sp1C.z = temp_r31->unk30.z;
|
|
VECSubtract(arg0, &sp1C, &sp10);
|
|
if ((spC = VECMag(&sp10)) < 50.0f) {
|
|
var_r29 = 1;
|
|
}
|
|
}
|
|
return var_r29;
|
|
}
|
|
|
|
void fn_1_C2E0(s32 arg0)
|
|
{
|
|
Vec sp4C;
|
|
Vec sp40;
|
|
Vec sp34;
|
|
Vec sp28;
|
|
Vec *spC;
|
|
M424DllBallStruct2 *temp_r27;
|
|
Vec *temp_r28;
|
|
M424DllClawStruct *temp_r31;
|
|
s32 var_r30;
|
|
s32 var_r26;
|
|
omObjData *var_r25;
|
|
|
|
if ((u8)omPauseChk() != 0U)
|
|
return;
|
|
|
|
var_r25 = lbl_1_bss_6D8;
|
|
if (lbl_1_bss_6D8) {
|
|
temp_r31 = var_r25->data;
|
|
if (temp_r31 && (temp_r31->unk164 != 0)) {
|
|
temp_r27 = &lbl_1_bss_60[0];
|
|
if (temp_r27) {
|
|
var_r26 = 0x10;
|
|
|
|
for (var_r30 = 0; var_r30 < lbl_1_bss_58; var_r30++) {
|
|
temp_r27 = &lbl_1_bss_60[var_r30];
|
|
if ((fn_1_8950(var_r30) == 3) || (fn_1_8950(var_r30) == 4))
|
|
continue;
|
|
temp_r28 = fn_1_89D4(var_r30);
|
|
spC = fn_1_8A00(var_r30);
|
|
sp28 = *temp_r28;
|
|
sp4C = temp_r27->unk60;
|
|
VECSubtract(temp_r28, &sp4C, &sp40);
|
|
if (fn_1_B9E0(&sp4C, &sp40, 100.0f, &sp34, 0x10) != 0) {
|
|
*temp_r28 = sp34;
|
|
sp4C = sp34;
|
|
if ((temp_r27->unk4 < 3) && (fn_1_907C(&sp4C, &sp34) != 0)) {
|
|
*temp_r28 = sp34;
|
|
sp4C = sp34;
|
|
}
|
|
fn_1_C604(var_r30, 0x20);
|
|
if ((sp28.y != sp4C.y) && (var_r30 != temp_r31->unk168) && (var_r30 != temp_r31->unk16C)) {
|
|
temp_r28->y = sp28.y;
|
|
sp4C.y = sp28.y;
|
|
if (var_r26 > 0) {
|
|
var_r30--;
|
|
var_r26--;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
if (temp_r31->unk168 == -1) {
|
|
if (fn_1_C210(&sp4C) != 0) {
|
|
temp_r31->unk168 = var_r30;
|
|
temp_r31->unk170 = fn_1_897C(var_r30);
|
|
VECSubtract(&sp4C, &temp_r31->unk30, &temp_r31->unk174);
|
|
fn_1_88E8(temp_r31->unk168, sp4C.x, sp4C.y, sp4C.z);
|
|
}
|
|
}
|
|
var_r26 = 0x10;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_C604(s32 arg0, s32 arg1)
|
|
{
|
|
Vec sp30;
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
M424DllBallStruct2 *sp8;
|
|
Vec *var_r31;
|
|
f32 temp_f31;
|
|
f32 var_f30;
|
|
s32 var_r30; // ! - uninitialized
|
|
M424DllBallStruct2 *var_r28;
|
|
Vec *var_r27;
|
|
|
|
sp8 = &lbl_1_bss_60[var_r30];
|
|
var_r27 = fn_1_89D4(arg0);
|
|
sp30 = *var_r27;
|
|
for (var_r30 = 0; var_r30 < lbl_1_bss_58; var_r30++) {
|
|
if ((var_r30 != arg0) && (fn_1_8950(var_r30) < 3)) {
|
|
var_r28 = &lbl_1_bss_60[var_r30];
|
|
var_r31 = fn_1_89D4(var_r30);
|
|
sp24 = *var_r31;
|
|
VECSubtract(&sp24, &sp30, &sp18);
|
|
var_f30 = VECMag(&sp18);
|
|
if (var_f30 < 200.0f) {
|
|
if (var_f30 > 0.0f) {
|
|
temp_f31 = 1.0f / var_f30;
|
|
sp18.x *= temp_f31;
|
|
sp18.y *= temp_f31;
|
|
sp18.z *= temp_f31;
|
|
}
|
|
else {
|
|
sp18.x = 0.0f;
|
|
sp18.y = 0.0f;
|
|
sp18.z = 1.0f;
|
|
}
|
|
temp_f31 = 1.0f + (200.0f - var_f30);
|
|
sp24.x += (sp18.x * temp_f31);
|
|
sp24.z += (sp18.z * temp_f31);
|
|
var_r31->x = sp24.x;
|
|
var_r31->z = sp24.z;
|
|
if ((var_r28->unk4 < 3) && (fn_1_907C(&sp24, &spC) != 0)) {
|
|
var_r31->x = sp24.x = spC.x;
|
|
var_r31->z = sp24.z = spC.z;
|
|
}
|
|
if (arg1 > 0) {
|
|
arg1--;
|
|
fn_1_C604(var_r30, arg1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_C854(void)
|
|
{
|
|
fn_1_C2E0(0);
|
|
}
|
|
|
|
s32 fn_1_C878(s16 arg0, const char *arg1, Mtx arg2, s32 arg3)
|
|
{
|
|
Mtx sp44;
|
|
Mtx sp14;
|
|
HsfData *temp_r30;
|
|
ModelData *temp_r31;
|
|
|
|
temp_r31 = &Hu3DData[arg0];
|
|
temp_r30 = temp_r31->hsfData;
|
|
lbl_1_bss_6C8 = 0;
|
|
if (temp_r31->unk_08 != -1) {
|
|
lbl_1_bss_6C4 = 1;
|
|
}
|
|
else {
|
|
lbl_1_bss_6C4 = 0;
|
|
}
|
|
mtxRot(sp14, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z);
|
|
MTXScale(sp44, temp_r31->scale.x, temp_r31->scale.y, temp_r31->scale.z);
|
|
MTXConcat(sp14, sp44, sp44);
|
|
mtxTransCat(sp44, temp_r31->pos.x, temp_r31->pos.y, temp_r31->pos.z);
|
|
if (arg3 != 0) {
|
|
MTXConcat(arg2, sp44, sp44);
|
|
}
|
|
fn_1_C99C(temp_r30->root, sp44, arg1, arg2);
|
|
return lbl_1_bss_6C8;
|
|
}
|
|
|
|
void fn_1_C99C(HsfObject *arg0, Mtx arg1, const char *arg2, Mtx arg3)
|
|
{
|
|
Mtx spF8;
|
|
Mtx spC8;
|
|
Mtx sp98;
|
|
Mtx sp68;
|
|
Mtx sp38;
|
|
Mtx sp8;
|
|
HsfTransform *var_r31;
|
|
HsfTransform *var_r30;
|
|
HsfTransform *var_r29;
|
|
HsfObject *temp_r28;
|
|
HsfObject *temp_r27;
|
|
u32 var_r25;
|
|
u32 var_r24;
|
|
u32 var_r23;
|
|
|
|
if (lbl_1_bss_6C8 == 0) {
|
|
if (lbl_1_bss_6C4 != 0) {
|
|
var_r31 = &arg0->data.curr;
|
|
}
|
|
else {
|
|
var_r31 = &arg0->data.base;
|
|
}
|
|
if ((var_r31->scale.x <= 0.0f) && (var_r31->scale.y <= 0.0f) && (var_r31->scale.z <= 0.0f)) {
|
|
MTXCopy(arg1, spF8);
|
|
OSReport("OBJ MTX CHECK ERROR %s \n", arg0->name);
|
|
}
|
|
else {
|
|
mtxRot(spC8, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z);
|
|
MTXScale(spF8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z);
|
|
MTXConcat(spC8, spF8, spF8);
|
|
mtxTransCat(spF8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z);
|
|
MTXConcat(arg1, spF8, spF8);
|
|
}
|
|
if (lbl_1_bss_6C0 != 0) {
|
|
OSReport("%s \n", arg0->name);
|
|
}
|
|
if (strcmp(arg2, arg0->name) == 0) {
|
|
MTXCopy(spF8, arg3);
|
|
lbl_1_bss_6C8 = 1;
|
|
}
|
|
for (var_r25 = 0; var_r25 < arg0->data.childrenCount; var_r25++) {
|
|
temp_r28 = arg0->data.children[var_r25];
|
|
if (lbl_1_bss_6C8 == 0) {
|
|
if (lbl_1_bss_6C4 != 0) {
|
|
var_r30 = &temp_r28->data.curr;
|
|
}
|
|
else {
|
|
var_r30 = &temp_r28->data.base;
|
|
}
|
|
if ((var_r30->scale.x <= 0.0f) && (var_r30->scale.y <= 0.0f) && (var_r30->scale.z <= 0.0f)) {
|
|
MTXCopy(spF8, sp68);
|
|
OSReport("OBJ MTX CHECK ERROR %s \n", temp_r28->name);
|
|
}
|
|
else {
|
|
mtxRot(sp98, var_r30->rot.x, var_r30->rot.y, var_r30->rot.z);
|
|
MTXScale(sp68, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z);
|
|
MTXConcat(sp98, sp68, sp68);
|
|
mtxTransCat(sp68, var_r30->pos.x, var_r30->pos.y, var_r30->pos.z);
|
|
MTXConcat(spF8, sp68, sp68);
|
|
}
|
|
if (lbl_1_bss_6C0 != 0) {
|
|
OSReport("%s \n", temp_r28->name);
|
|
}
|
|
if (strcmp(arg2, temp_r28->name) == 0) {
|
|
MTXCopy(sp68, arg3);
|
|
lbl_1_bss_6C8 = 1;
|
|
}
|
|
for (var_r24 = 0; var_r24 < temp_r28->data.childrenCount; var_r24++) {
|
|
temp_r27 = temp_r28->data.children[var_r24];
|
|
if (lbl_1_bss_6C8 == 0) {
|
|
if (lbl_1_bss_6C4 != 0) {
|
|
var_r29 = &temp_r27->data.curr;
|
|
}
|
|
else {
|
|
var_r29 = &temp_r27->data.base;
|
|
}
|
|
if ((var_r29->scale.x <= 0.0f) && (var_r29->scale.y <= 0.0f) && (var_r29->scale.z <= 0.0f)) {
|
|
MTXCopy(sp68, sp8);
|
|
OSReport("OBJ MTX CHECK ERROR %s \n", temp_r27->name);
|
|
}
|
|
else {
|
|
mtxRot(sp38, var_r29->rot.x, var_r29->rot.y, var_r29->rot.z);
|
|
MTXScale(sp8, var_r29->scale.x, var_r29->scale.y, var_r29->scale.z);
|
|
MTXConcat(sp38, sp8, sp8);
|
|
mtxTransCat(sp8, var_r29->pos.x, var_r29->pos.y, var_r29->pos.z);
|
|
MTXConcat(sp68, sp8, sp8);
|
|
}
|
|
if (lbl_1_bss_6C0 != 0) {
|
|
OSReport("%s \n", temp_r27->name);
|
|
}
|
|
if (strcmp(arg2, temp_r27->name) == 0) {
|
|
MTXCopy(sp8, arg3);
|
|
lbl_1_bss_6C8 = 1;
|
|
}
|
|
for (var_r23 = 0; var_r23 < temp_r27->data.childrenCount; var_r23++) {
|
|
fn_1_C99C(temp_r27->data.children[var_r23], sp8, arg2, arg3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_CE74(s32 arg0)
|
|
{
|
|
ModelData *temp_r31;
|
|
|
|
temp_r31 = &Hu3DData[arg0];
|
|
if (temp_r31->unk_08 != -1) {
|
|
Hu3DMotionExec(arg0, temp_r31->unk_08, temp_r31->unk_64, 0);
|
|
}
|
|
if (temp_r31->unk_0C != -1) {
|
|
Hu3DSubMotionExec(arg0);
|
|
}
|
|
if (temp_r31->hsfData->cenvCnt != 0) {
|
|
EnvelopeProc(temp_r31->hsfData);
|
|
}
|
|
}
|
|
|
|
void fn_1_CF00(Process *arg0)
|
|
{
|
|
M424DllClawStruct3 *var_r31;
|
|
s32 var_r30;
|
|
|
|
omAddObjEx(arg0, 0x40, 0, 0, -1, fn_1_CF80);
|
|
var_r31 = &lbl_1_bss_640[0];
|
|
|
|
for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) {
|
|
var_r31->unk0 = -1;
|
|
var_r31->unk4 = -1;
|
|
}
|
|
}
|
|
|
|
void fn_1_CF80(omObjData *arg0)
|
|
{
|
|
M424DllClawStruct3 *var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = &lbl_1_bss_640[0];
|
|
for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) {
|
|
if ((var_r31->unk0 >= 0) && (var_r31->unk4 > 0)) {
|
|
if (--var_r31->unk4 <= 0) {
|
|
HuAudFXPlay(var_r31->unk0);
|
|
var_r31->unk0 = -1;
|
|
var_r31->unk4 = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_D010(s32 arg0, s32 arg1)
|
|
{
|
|
M424DllClawStruct3 *var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = &lbl_1_bss_640[0];
|
|
for (var_r30 = 0; var_r30 < 0x10; var_r30++, var_r31++) {
|
|
if (var_r31->unk0 == -1)
|
|
break;
|
|
}
|
|
if (var_r30 >= 0x10) {
|
|
return -1;
|
|
}
|
|
var_r31->unk0 = arg0;
|
|
var_r31->unk4 = arg1;
|
|
return var_r30;
|
|
}
|