Complete m443/player.c

This commit is contained in:
CreateSource 2024-11-01 21:54:27 -04:00
parent 0e5ead6543
commit 3eb6855600
3 changed files with 551 additions and 13 deletions

View file

@ -14,12 +14,20 @@
#include "REL/m443Dll.h"
typedef struct M443DllUnkStruct {
s32 unk0;
s32 unk4;
s32 unk8;
Vec2f unkC;
s16 unk14[11];
} M443DllUnkStruct;
typedef struct M443DllWorkStruct {
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
u32 unk10;
s32 unk14;
f32 unk18;
s32 unk1C;
@ -45,12 +53,12 @@ typedef struct M443DllWorkStruct {
u32 unk74;
f32 unk78;
f32 unk7C;
s32 unk80;
char unk84[0x4];
u32 unk80;
u32 unk84;
f32 unk88;
char unk8C[0x4];
f32 unk90;
char unk94[0x4];
f32 unk94;
f32 unk98;
f32 unk9C;
f32 unkA0;
@ -69,27 +77,48 @@ typedef struct M443DllWorkStruct {
char unkF4[0xC];
M443DllCameraStruct* unk100;
M443DllCameraStruct* unk104;
s32 unk108;
char unk10C[0x28];
union {
M443DllUnkStruct unk108s;
struct {
s32 unk108;
s32 unk10C;
};
};
} M443DllWorkStruct; /* size = 0x134 */
typedef struct M443DllStruct8 {
u16 unk0;
f32 unk4;
f32 unk8;
f32 unkC;
u32 unk10;
} M443DllStruct8; // copy of UnkM417Struct8
void fn_1_5680(omObjData* object);
void fn_1_5BD4(omObjData* object);
void fn_1_6458(omObjData* object);
void fn_1_6674(omObjData* object);
void fn_1_6750(omObjData* object);
void fn_1_69B4(omObjData* object);
void fn_1_6B90(omObjData* object);
void fn_1_6DA8(omObjData* object);
void fn_1_7130(omObjData* object);
void fn_1_7340(omObjData* object);
void fn_1_8138(omObjData*, s32);
void fn_1_8138(omObjData*, u32);
s32 fn_1_82C4(omObjData* object);
void fn_1_8508(omObjData*);
void fn_1_8680(omObjData* object);
f32 fn_1_8AC8(u32, f32);
f32 fn_1_8C68(f32);
f32 fn_1_8C8C(s32, f32);
f32 fn_1_8D00(u32, f32);
f32 fn_1_8D74(f32);
void fn_1_8E34(s32);
void fn_1_8FFC(u32, Vec*, f32, f32);
void fn_1_95A4(u32);
s32 lbl_1_bss_78[6];
omObjData* lbl_1_bss_90[4];
s32 lbl_1_bss_78[6];
char* lbl_1_data_264[0x8] = {
"itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r",
@ -105,6 +134,13 @@ u32 lbl_1_data_2C4[4] = {
0, 0x4A0020, 0x17, 0x72
};
M443DllStruct8 lbl_1_data_2D4[4] = {
{ 0x0, 0.2f, 0.0f, -1.0f, 0x40000001 },
{ 0x1, 0.2f, 0.0f, -1.0f, 0x40000001 },
{ 0x2, 0.2f, 0.0f, -1.0f, 0x0 },
{ 0x3, 0.2f, 0.0f, -1.0f, 0x0 }
};
s32 lbl_1_data_324[4] = {
0x727, 0x728, 0x729, 0x72A,
};
@ -653,3 +689,505 @@ void fn_1_7130(omObjData* object) {
}
}
}
void fn_1_7340(omObjData* object) {
M443DllWorkStruct* temp_r31 = object->data;
HsfObject* var_r29;
f32 sp28[8] = {
0.0f, 40.0f, 0.0f, 0.0f,
-16.0f, 40.0f, -16.0f, 0.0f
};
f32 var_f31;
f32 var_f29;
u32 temp_r24;
temp_r24 = temp_r31->unk80;
if (temp_r31->unk88 > 3300.0f) {
if (fn_1_42E4() == 2) {
temp_r31->unk10C = 0;
if (temp_r31->unk84 == 0) {
if ((temp_r31->unk10 & 0x100) != 0) {
if (temp_r31->unk80 < 3) {
temp_r31->unk80++;
temp_r31->unk84 = 30;
}
} else {
if (temp_r31->unk88 >= 8000.0f) {
temp_r31->unk10C = 1;
}
}
} else {
temp_r31->unk84--;
}
}
} else if ((temp_r31->unk88 < 1500.0f) && (temp_r31->unk80 != 0)) {
temp_r31->unk80--;
temp_r31->unk84 = 30;
}
if (temp_r31->unk80 != temp_r24) {
temp_r31->unk88 = fn_1_8D00(temp_r31->unk80, temp_r31->unk90);
omVibrate(object->work[0], 0xC, 4, 2);
}
var_f31 = (1.5f * temp_r31->unk18) - 0.5f;
if (var_f31 < -0.4f) {
var_f31 = -1.0f;
}
var_f29 = 0.75f;
if ((var_f31 > -0.5f) && (temp_r31->unkA0 < 1.0f)) {
var_f29 += 0.25f * (1.0f - temp_r31->unkA0);
}
var_f31 = var_f31 * fn_1_8AC8(temp_r31->unk80, temp_r31->unk88);
var_f31 -= temp_r31->unkA0 * fn_1_8D74(fn_1_8C8C(temp_r31->unk80, temp_r31->unk88));
var_f31 = var_f29 * fn_1_8C68(var_f31);
temp_r31->unk90 += 0.016666668f * var_f31;
temp_r31->unk7C += temp_r31->unkA0 * (temp_r31->unk90 - temp_r31->unk7C);
var_f31 = temp_r31->unk90 + temp_r31->unkA0 * (temp_r31->unk7C - temp_r31->unk90);
temp_r31->unk88 = fn_1_8D00(temp_r31->unk80, var_f31);
if (fn_1_42E4() <= 2) {
if (fn_1_42E4() == 2) {
if (temp_r31->unk18 <= 0.0f) {
temp_r31->unk90 *= 0.98f;
}
}
if ((temp_r31->unk88 > 8000.0f) && ((temp_r31->unk40 & 0xF) == 0)) {
omVibrate(object->work[0], 0xC, 6, 6);
}
}
if (temp_r31->unk88 > 9500.0f) {
temp_r31->unk88 = 9000.0f;
temp_r31->unk90 = fn_1_8C8C(temp_r31->unk80, temp_r31->unk88);
} else if (temp_r31->unk88 < 1000.0f) {
temp_r31->unk88 = 1000.0f;
temp_r31->unk90 = fn_1_8C8C(temp_r31->unk80, temp_r31->unk88);
}
temp_r31->unk94 = (0.31206876f * temp_r31->unk90);
if (temp_r31->unkA0 < 1.0f) {
var_f31 = temp_r31->unk90 - temp_r31->unk7C;
if (var_f31 > 2.0f) {
var_f31 = 1.0f - (0.02f * var_f31);
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
if (var_f31 < 0.0f) {
var_f31 = 0.0f;
}
var_f31 = (1.0f - var_f31 * var_f31);
temp_r31->unkA0 += (1.0f / 3000.0f) * (1.0f - 1.5f * var_f31);
if (temp_r31->unkA0 > 0.9f) {
temp_r31->unkA0 = 1.0f;
}
if (temp_r31->unkA0 < 0.0001f) {
temp_r31->unkA0 = 0.0001f;
}
} else {
temp_r31->unkA0 = 1.0f;
}
}
temp_r31->unk78 += 1.6666667f * temp_r31->unk7C;
if (fn_1_42E4() < 2) {
temp_r31->unk7C = 0.0f;
temp_r31->unk78 = 0.0f;
temp_r31->unkA0 = 0.0f;
}
if (temp_r31->unk78 >= 40000.0f) {
if (temp_r31->unk7C >= 30.0f) {
Hu3DMotionSpeedSet(object->model[2], 1.0f);
Hu3DModelAttrReset(object->model[2], 1U);
if (fn_1_42E4() == 2) {
HuAudFXPlay(0x733);
}
}
}
fn_1_8680(object);
temp_r31->unk74 = 1 - temp_r31->unk74;
var_f31 = 22.5f * (temp_r31->unk40 & 0xF);
var_r29 = Hu3DModelObjPtrGet(object->model[2], "ballon");
var_r29->data.base.rot.z = var_f31;
var_r29 = Hu3DModelObjPtrGet(object->model[1], "r_tire");
if ((temp_r31->unk7C <= 0.0f) && (temp_r31->unk94 < 1.5f)) {
temp_r31->unk94 = 0.0f;
}
var_r29->data.base.rot.x += 6.0000005f * temp_r31->unk94;
var_r29->data.base.rot.x = fmod(var_r29->data.base.rot.x, 360.0);
var_r29 = Hu3DModelObjPtrGet(object->model[1], "f_tire");
var_r29->data.base.rot.x += 6.0000005f * (0.003978877f * (100.0f * temp_r31->unk7C));
var_r29->data.base.rot.x = fmod(var_r29->data.base.rot.x, 360.0);
var_f31 = 0.110999994f * temp_r31->unk94;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
Hu3DMotionTimeSet(object->model[1], 30.0f * var_f31);
fn_1_4314(object->work[0], temp_r31->unk78);
fn_1_6B90(object);
if (temp_r31->unkA0 < 1.0f) {
var_f31 = (320.4422f * temp_r31->unk94) - (100.0f * temp_r31->unk7C);
if (var_f31 > 0.0f) {
var_f31 *= 0.0002f;
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
fn_1_8FFC(object->work[0], &temp_r31->unkDC, var_f31, 100.0f * temp_r31->unk7C);
}
}
fn_1_8E34(object->model[3]);
if (temp_r31->unkB4 >= 0) {
HuAudFXPitchSet(temp_r31->unkB4, (8191.0f * (0.0001f * temp_r31->unk88)));
if (fn_1_42E4() >= 5) {
HuAudFXFadeOut(temp_r31->unkB4, 0x3C);
temp_r31->unkB4 = -1;
}
}
if (fn_1_42E4() < 2) {
if (temp_r31->unkA8 < 0) {
temp_r31->unkA8 = HuAudFXPlay(lbl_1_data_344[object->work[0]]);
}
if (temp_r31->unkA8 >= 0) {
var_f31 = fn_1_8C8C(temp_r31->unk80, 10000.0f);
var_f31 = (1.0f / (0.31206876f * var_f31));
HuAudFXPitchSet(temp_r31->unkA8, (8191.0f * (temp_r31->unk94 * var_f31)));
var_f31 = 127.0f;
if (temp_r31->unk94 < 0.1f) {
var_f31 = 0.0f;
}
HuAudFXVolSet(temp_r31->unkA8, var_f31);
}
} else if (fn_1_42E4() <= 2) {
if (temp_r31->unkA8 < 0) {
temp_r31->unkA8 = HuAudFXPlay(lbl_1_data_344[object->work[0]]);
}
if (temp_r31->unkA8 >= 0) {
HuAudFXPitchSet(temp_r31->unkA8, (8191.0f * (0.0001f * temp_r31->unk88) * (1.0f - temp_r31->unkA0)));
var_f31 = 127.0f;
if (temp_r31->unkA0 >= 1.0f) {
var_f31 = 0.0f;
}
HuAudFXVolSet(temp_r31->unkA8, var_f31);
}
} else if (temp_r31->unkA8 >= 0) {
HuAudFXStop(temp_r31->unkA8);
temp_r31->unkA8 = -1;
}
if ((fn_1_42E4() >= 1) && (temp_r31->unkB0 >= 0)) {
HuAudFXFadeOut(temp_r31->unkB0, 30);
temp_r31->unkB0 = -1;
}
if ((fn_1_42E4() == 2) && (temp_r31->unkB8 < 0)) {
temp_r31->unkB8 = HuAudFXPlay(lbl_1_data_354[object->work[0]]);
}
if (temp_r31->unkB8 >= 0) {
var_f31 = 0.012048192f * temp_r31->unk7C;
HuAudFXPitchSet(temp_r31->unkB8, ((2.0f * (8191.0f * var_f31)) - 8191.0f));
HuAudFXVolSet(temp_r31->unkB8, (127.0f * var_f31));
if (fn_1_42E4() >= 5U) {
HuAudFXFadeOut(temp_r31->unkB8, 0x3C);
temp_r31->unkB8 = -1;
}
}
}
void fn_1_8138(omObjData* object, u32 arg1) { // near replica of fn_1_B8A0 of m417Dll
f32 var_f31;
M443DllWorkStruct* temp_r30;
temp_r30 = object->data;
if ((temp_r30->unk8 != arg1) && (arg1 < 4)) {
var_f31 = 60.0f * lbl_1_data_2D4[arg1].unk4;
if (temp_r30->unk8 < 0) {
var_f31 = 0.0f;
}
temp_r30->unk8 = arg1;
CharModelMotionShiftSet(temp_r30->unk0, object->motion[lbl_1_data_2D4[arg1].unk0], 60.0f * lbl_1_data_2D4[arg1].unk8, var_f31, lbl_1_data_2D4[arg1].unk10);
if (lbl_1_data_2D4[arg1].unkC >= 0.0f) {
Hu3DMotionShiftStartEndSet(object->model[0], 60.0f * lbl_1_data_2D4[arg1].unk8, 60.0f * lbl_1_data_2D4[arg1].unkC);
}
}
}
s32 fn_1_82C4(omObjData* object) {
s32 var_r30;
M443DllWorkStruct* temp_r31;
temp_r31 = object->data;
var_r30 = 0;
if ((CharModelMotionEndCheck(temp_r31->unk0) != 0) && (CharModelMotionShiftIDGet(temp_r31->unk0) < 0)) {
var_r30 = 1;
}
return var_r30;
}
s32 fn_1_8338(omObjData* object, u32 arg1) {
s32 var_r27;
s32 var_r26;
M443DllWorkStruct* temp_r31;
var_r27 = 0;
temp_r31 = object->data;
var_r26 = 0;
if ((CharModelMotionEndCheck(temp_r31->unk0) != 0) && (CharModelMotionShiftIDGet(temp_r31->unk0) < 0)) {
var_r26 = 1;
}
if (var_r26 != 0) {
fn_1_8138(object, arg1);
var_r27 = 1;
}
return var_r27;
}
u32 lbl_1_data_410[11][2] = {
{ 0x4A0015, 0xFA },
{ 0x4A0016, 0xF0 },
{ 0x4A0017, 0xE6 },
{ 0x4A0018, 0xF0 },
{ 0x4A0019, 0xF0 },
{ 0x4A001A, 0xF0 },
{ 0x4A001B, 0xF0 },
{ 0x61002E, 0xF0 },
{ 0x61002E, 0xF0 },
{ 0x61002E, 0xF0 },
{ 0x4A001C, 0xF0 },
};
Vec2f lbl_1_data_468[4] = {
{ 64.0f, 54.0f },
{ 46.0f, 54.0f },
{ 64.0f, 44.0f },
{ 46.0f, 44.0f },
};
void fn_1_8508(omObjData* object) {
s32 var_r30;
M443DllWorkStruct* temp_r28;
M443DllUnkStruct* temp_r31;
f32* temp_r4;
temp_r28 = object->data;
temp_r31 = &temp_r28->unk108s;
for (var_r30 = 0; var_r30 < 11; var_r30++) {
temp_r31->unk14[var_r30] = -1;
if (lbl_1_data_410[var_r30][0] != 0) {
temp_r31->unk14[var_r30] = espEntry(lbl_1_data_410[var_r30][0], lbl_1_data_410[var_r30][1], 0);
espAttrSet(temp_r31->unk14[var_r30], 8);
espDispOff(temp_r31->unk14[var_r30]);
}
}
espColorSet(temp_r31->unk14[0], 0, 0, 0);
espTPLvlSet(temp_r31->unk14[0], 0.5);
espScaleSet(temp_r31->unk14[1], 0.75, 0.75);
espScaleSet(temp_r31->unk14[2], 0.75, 0.75);
temp_r31->unkC = lbl_1_data_468[object->work[0]];
}
f32 lbl_1_data_488[][2] = {
{ 20.0f, 4.0f },
{ 18.0f, 6.0f },
{ 46.0f, 33.0f },
{ 72.0f, 32.0f },
{ 72.0f, 14.0f },
{ 72.0f, -4.0f },
{ 72.0f, -22.0f },
{ -140.0f, 32.0f },
{ -158.0f, 32.0f },
{ -176.0f, 32.0f },
{ -96.0f, 32.0f },
};
void fn_1_8680(omObjData* object) {
f32 var_f31;
s32 var_r27;
s32 var_r30;
u32 var_r28;
M443DllWorkStruct* temp_r29;
M443DllUnkStruct* temp_r31;
temp_r29 = object->data;
temp_r31 = &temp_r29->unk108s;
temp_r31->unk8++;
for (var_r30 = 0; var_r30 < 11; var_r30++) {
if (temp_r31->unk14[var_r30] >= 0) {
if (temp_r31->unk0 == 0) {
espDispOff(temp_r31->unk14[var_r30]);
} else {
espDispOn(temp_r31->unk14[var_r30]);
espPosSet(
temp_r31->unk14[var_r30],
0.9f * (temp_r29->unk104->unk_44 + temp_r31->unkC.x + lbl_1_data_488[var_r30][0]),
temp_r29->unk104->unk_48 + temp_r31->unkC.y + lbl_1_data_488[var_r30][1]
);
}
}
}
var_f31 = 0.0f;
if (temp_r29->unk88 > 8000.0f) {
var_f31 = (0.004f * frandmod(0x3E8)) - 2.0f;
}
espZRotSet(temp_r31->unk14[2], (90.0f * (0.0001f * temp_r29->unk88)) + var_f31);
for (var_r30 = 0; var_r30 < 4; var_r30++) {
var_r27 = 0;
if (temp_r29->unk80 == var_r30) {
var_r27 = 2;
} else if (((temp_r29->unk80 + 1) == var_r30) && (temp_r31->unk4 != 0)) {
var_r27 += (temp_r31->unk8 >> 1) & 1;
}
espBankSet(temp_r31->unk14[var_r30 + 3], var_r27);
}
var_r28 = (3.6f * temp_r29->unk7C);
var_r30 = var_r28 % 10;
espBankSet(temp_r31->unk14[7], var_r30);
var_r28 = (var_r28 - var_r30) / 10;
var_r30 = var_r28 % 10;
espBankSet(temp_r31->unk14[8], var_r30);
var_r28 = (var_r28 - var_r30) / 10;
var_r30 = var_r28 % 10;
espBankSet(temp_r31->unk14[9], var_r30);
}
f32 lbl_1_data_4E0[4] = {
18.5f, 9.25f, 6.66f, 5.55f
};
f32 fn_1_8958(u32 arg0) {
if (arg0 >= 4) {
if (arg0 >= 4) {
}
}
return lbl_1_data_4E0[arg0];
}
f32 fn_1_8990(f32 arg8) {
f32 var_f30;
f32 var_f31;
var_f30 = 0.8f * (0.00016666666f * (6000.0f - arg8));
var_f30 = 0.6f * (1.0f - (var_f30 * var_f30));
var_f31 = 0.000400000002f * (6500.0f - arg8);
var_f31 = 0.4f * (1.0f - (var_f31 * var_f31));
if (var_f31 > 0.0f) {
var_f30 += var_f31;
}
var_f31 = arg8 - 8000.0f;
if (var_f31 > 0.0f) {
var_f31 = 1.0f - (0.00033333333f * var_f31);
var_f30 = var_f31 * (var_f30 * var_f31);
}
return 55.0f * var_f30;
}
f32 fn_1_8AC8(u32 arg0, f32 arg1) {
return 1.7647059f * (fn_1_8990(arg1) * fn_1_8958(arg0));
}
f32 fn_1_8C68(f32 arg0) {
return 9.8f * (0.0012820513f * arg0);
}
f32 fn_1_8C8C(s32 arg0, f32 arg1) {
return 3.204422f * ((0.016666668f * arg1) / fn_1_8958(arg0));
}
f32 fn_1_8D00(u32 arg0, f32 arg1) {
return 0.31206876f * (60.0f * arg1) * fn_1_8958(arg0);
}
f32 fn_1_8D74(f32 arg0) {
return 0.024899999f * (arg0 * arg0);
}
f32 fn_1_8D8C(u32 arg0, f32 arg8) {
return arg8 / fn_1_8958(arg0);
}
f32 fn_1_8DE0(u32 arg0, f32 arg8) {
return arg8 * fn_1_8958(arg0);
}
void fn_1_8E34(s32 arg0) {
s32 var_r29;
ParticleData* temp_r30;
HsfanimStruct01* var_r31;
temp_r30 = Hu3DData[arg0].unk_120;
var_r31 = temp_r30->unk_48;
for (var_r29 = 0; var_r29 < temp_r30->unk_30; var_r29++, var_r31++) {
if (var_r31->unk00_s16 != 0) {
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
var_r31->unk08.z -= 0.3f;
var_r31->unk2C += 2.0f;
var_r31->unk40.a *= 0.98f;
if (var_r31->unk00_s16 < 24.0f) {
var_r31->unk40.a = var_r31->unk40.a * 0.9f;
}
if (--var_r31->unk00_s16 == 0) {
var_r31->unk00 = 0;
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
}
}
DCStoreRange(temp_r30->unk_48, temp_r30->unk_30 * 0x44);
}
static inline f32 isEven(u32 arg) {
if ((arg & 1) != 0) {
return 1.0f;
} else {
return -1.0f;
}
}
void fn_1_8FFC(u32 arg0, Point3d* arg1, f32 arg2, f32 arg3) {
f32 temp_f31;
f32 var_f29;
ParticleData* temp_r29;
s32 var_r28;
u32 var_r27;
HsfanimStruct01* var_r31;
temp_r29 = Hu3DData[lbl_1_bss_90[arg0]->model[3]].unk_120;
if (frandmod(0x3E8) > 1000.0f * arg2) return;
var_r27 = 2;
var_r31 = temp_r29->unk_48;
for (var_r28 = 0; var_r28 < temp_r29->unk_30; var_r28++, var_r31++) {
if (var_r31->unk00_s16 != 0) continue;
var_r31->unk00_s16 = (60.0f * (0.6f + (0.0005f * frandmod(0x3E8))));
var_f29 = isEven(var_r27);
temp_f31 = 0.030000001f * frandmod(0x3E8);
var_r31->unk34.x = arg1->x + var_f29 * (70.0f + (0.07f * frandmod(0x3E8)));
var_r31->unk34.y = 10.0f + (arg1->y + (0.02f * frandmod(0x3E8)));
var_r31->unk34.z = (250.0f + arg1->z);
temp_f31 = 0.8333334f + 0.0016666667f * frandmod(0x3E8);
temp_f31 *= 1.0f + arg2;
var_r31->unk08.x = (0.0025f * frandmod(0x3E8) - 1.25f);
var_r31->unk08.y = (3.3333335f + 0.0016666667f * frandmod(0x3E8));
var_r31->unk08.z = ((4.166667f + (0.0016666667f * frandmod(0x3E8))) - (0.016666668f * (0.5f * arg3)));
var_r31->unk30 = frandmod(0x168);
temp_f31 = 0.001f * frandmod(0x3E8);
var_r31->unk2C = (50.0f + (100.0f * temp_f31));
var_r31->unk40.a = (70.0f + (80.0f * (1.0f - temp_f31)));
var_r31->unk40.r = (50.0f + (145.0f * temp_f31));
var_r31->unk40.g = (55.0f + (140.0f * temp_f31));
var_r31->unk40.b = (70.0f + (125.0f * temp_f31));
if (--var_r27 < 1) break;
}
}
void fn_1_95A4(u32 arg0) {
s32 var_r29;
ParticleData* temp_r30;
HsfanimStruct01* var_r31;
temp_r30 = Hu3DData[lbl_1_bss_90[arg0]->model[3]].unk_120;
var_r31 = temp_r30->unk_48;
for (var_r29 = 0; var_r29 < temp_r30->unk_30; var_r29++, var_r31++) {
var_r31->unk00 = 0;
var_r31->unk2C = 0.0f;
var_r31->unk40.a = 0;
}
}