1267 lines
39 KiB
C
1267 lines
39 KiB
C
#include "ext_math.h"
|
|
#include "game/audio.h"
|
|
#include "game/chrman.h"
|
|
#include "game/gamework_data.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/objsub.h"
|
|
#include "game/pad.h"
|
|
#include "game/wipe.h"
|
|
|
|
#include "REL/m417Dll.h"
|
|
|
|
typedef struct UnkM417Struct8 {
|
|
/* 0x00 */ u16 unk_00;
|
|
/* 0x04 */ float unk_04;
|
|
/* 0x08 */ float unk_08;
|
|
/* 0x0C */ float unk_0C;
|
|
/* 0x10 */ u32 unk_10;
|
|
} UnkM417Struct8; /* size = 0x14 */
|
|
|
|
typedef struct UnkM417Struct10 {
|
|
/* 0x04 */ s32 unk_00;
|
|
/* 0x08 */ s32 unk_04;
|
|
/* 0x08 */ s32 unk_08;
|
|
/* 0x0C */ u32 unk_0C;
|
|
/* 0x10 */ u32 unk_10;
|
|
/* 0x14 */ s32 unk_14;
|
|
/* 0x18 */ s32 unk_18;
|
|
/* 0x1C */ s32 unk_1C;
|
|
/* 0x20 */ float unk_20;
|
|
/* 0x24 */ float unk_24;
|
|
/* 0x28 */ s32 unk_28;
|
|
/* 0x2C */ s32 unk_2C;
|
|
/* 0x30 */ s32 unk_30;
|
|
/* 0x34 */ s32 unk_34;
|
|
/* 0x38 */ s32 unk_38;
|
|
/* 0x3C */ s32 unk_3C;
|
|
/* 0x40 */ s32 unk_40;
|
|
/* 0x44 */ s32 unk_44;
|
|
/* 0x48 */ s32 unk_48;
|
|
/* 0x4C */ s32 unk_4C;
|
|
/* 0x50 */ u16 unk_50;
|
|
/* 0x52 */ char unk52[2];
|
|
/* 0x54 */ s32 unk_54;
|
|
/* 0x58 */ char unk58[4];
|
|
/* 0x5C */ s16 unk_5C;
|
|
/* 0x5E */ char unk5E[6];
|
|
/* 0x64 */ float unk_64;
|
|
/* 0x68 */ float unk_68;
|
|
/* 0x6C */ float unk_6C;
|
|
/* 0x70 */ float unk_70;
|
|
/* 0x74 */ float unk_74;
|
|
/* 0x78 */ s32 unk_78;
|
|
/* 0x7C */ float unk_7C;
|
|
/* 0x80 */ u32 unk_80;
|
|
/* 0x84 */ u32 unk_84;
|
|
/* 0x88 */ float unk_88;
|
|
/* 0x8C */ float unk_8C;
|
|
/* 0x90 */ u32 unk_90;
|
|
/* 0x94 */ char unk94[4];
|
|
/* 0x98 */ float unk_98;
|
|
/* 0x9C */ s32 unk_9C;
|
|
/* 0xA0 */ s32 unk_A0;
|
|
/* 0xA4 */ u32 unk_A4;
|
|
/* 0xA8 */ u32 unk_A8;
|
|
/* 0xAC */ float unk_AC;
|
|
/* 0xB0 */ float unk_B0;
|
|
/* 0xB4 */ Vec unk_B4;
|
|
/* 0xC0 */ u32 unk_C0;
|
|
/* 0xC4 */ u32 unk_C4;
|
|
/* 0xC8 */ Vec unk_C8;
|
|
/* 0xD4 */ Vec unk_D4;
|
|
/* 0xE0 */ Vec unk_E0;
|
|
/* 0xEC */ Vec unk_EC;
|
|
/* 0xF8 */ Vec unk_F8;
|
|
/* 0x104 */ Vec unk_104;
|
|
/* 0x110 */ Vec unk_110;
|
|
/* 0x11C */ Quaternion unk_11C;
|
|
/* 0x12C */ float unk_12C;
|
|
/* 0x130 */ float unk_130;
|
|
/* 0x134 */ float unk_134;
|
|
/* 0x138 */ float unk_138;
|
|
/* 0x13C */ float unk_13C;
|
|
/* 0x140 */ float unk_140;
|
|
/* 0x144 */ float unk_144;
|
|
/* 0x148 */ float unk_148;
|
|
/* 0x14C */ Vec unk_14C;
|
|
/* 0x158 */ char unk_158[0xC];
|
|
/* 0x164 */ Quaternion unk_164;
|
|
/* 0x174 */ Quaternion unk_174;
|
|
/* 0x184 */ Quaternion unk_184;
|
|
/* 0x194 */ Quaternion unk_194;
|
|
/* 0x1A4 */ Quaternion unk_1A4;
|
|
/* 0x1B4 */ Quaternion unk_1B4;
|
|
/* 0x1C4 */ Mtx unk_1C4;
|
|
/* 0x1F4 */ Mtx unk_1F4;
|
|
/* 0x224 */ Mtx unk_224;
|
|
/* 0x254 */ Vec unk_254[16]; // maybe less
|
|
} UnkM417Struct10; /* size = 0x314 */
|
|
|
|
void fn_1_7C8C(omObjData *object);
|
|
void fn_1_82FC(omObjData *object);
|
|
void fn_1_86E8(omObjData *object);
|
|
void fn_1_8B0C(omObjData *object);
|
|
void fn_1_8D30(omObjData *object);
|
|
void fn_1_8E44(omObjData *object);
|
|
void fn_1_91E0(omObjData *object);
|
|
void fn_1_9298(omObjData *object);
|
|
void fn_1_9A1C(omObjData *object);
|
|
void fn_1_9C14(omObjData *object);
|
|
void fn_1_9FF0(omObjData *object);
|
|
void fn_1_AD24(omObjData *object);
|
|
void fn_1_ADC4(omObjData *object);
|
|
void fn_1_B2C0(omObjData *object);
|
|
void fn_1_B8A0(omObjData *object, u32 arg1);
|
|
s32 fn_1_BA2C(omObjData *object);
|
|
void fn_1_BC70(float arg8, float arg9, Quaternion *arg0);
|
|
|
|
s32 lbl_1_data_50[][2] = {
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 6) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 7) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 8) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 9) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 10) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 11) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 12) },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 1), DATA_MAKE_NUM(DATADIR_M417, 13) },
|
|
};
|
|
|
|
u32 lbl_1_data_90[11][3] = {
|
|
{ 0, 1, 1 },
|
|
{ 23, 1, 1 },
|
|
{ 24, 1, 1 },
|
|
{ 2, 1, 0 },
|
|
{ 3, 1, 0 },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 18), 1, 0 },
|
|
{ DATA_MAKE_NUM(DATADIR_M417, 26), 1, 0 },
|
|
{ 5, 0, 1 },
|
|
{ 6, 0, 1 },
|
|
{ 8, 0, 1 },
|
|
{ 9, 0, 1 },
|
|
};
|
|
|
|
UnkM417Struct8 lbl_1_data_114[11] = {
|
|
{ 0, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_LOOP },
|
|
{ 1, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
{ 2, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
{ 3, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_LOOP },
|
|
{ 4, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_LOOP },
|
|
{ 5, 0.5f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
{ 6, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_LOOP },
|
|
{ 7, 0.03f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
{ 8, 0.0f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
{ 9, 0.2f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
{ 10, 0.0f, 0.0f, -1.0f, HU3D_MOTATTR_NONE },
|
|
};
|
|
|
|
s32 lbl_1_bss_8AC; // unused
|
|
s32 lbl_1_bss_8A8; // unused
|
|
omObjData *lbl_1_bss_898[4];
|
|
u32 lbl_1_bss_888[4];
|
|
u32 lbl_1_bss_884;
|
|
u32 lbl_1_bss_880;
|
|
|
|
void fn_1_7A34(Process *arg0)
|
|
{
|
|
u32 sp18[4];
|
|
u32 sp8[4];
|
|
|
|
s16 var_r31;
|
|
s16 var_r30;
|
|
s32 var_r29;
|
|
omObjData *var_r28;
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
sp18[var_r31] = GWPlayerCfg[var_r31].group;
|
|
sp8[var_r31] = var_r31;
|
|
}
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
for (var_r30 = var_r31 + 1; var_r30 < 4; var_r30++) {
|
|
if (sp18[var_r31] > sp18[var_r30]) {
|
|
var_r29 = sp18[var_r31];
|
|
sp18[var_r31] = sp18[var_r30];
|
|
sp18[var_r30] = var_r29;
|
|
var_r29 = sp8[var_r31];
|
|
sp8[var_r31] = sp8[var_r30];
|
|
sp8[var_r30] = var_r29;
|
|
}
|
|
}
|
|
}
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
lbl_1_bss_888[sp8[var_r31]] = var_r31;
|
|
}
|
|
omMakeGroupEx(arg0, 0, 4);
|
|
omGetGroupMemberListEx(arg0, 0);
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
var_r28 = lbl_1_bss_898[var_r31] = omAddObjEx(arg0, 40, 2, 11, 0, fn_1_7C8C);
|
|
var_r28->work[0] = var_r31;
|
|
}
|
|
lbl_1_bss_880 = lbl_1_bss_884 = 0;
|
|
}
|
|
|
|
void fn_1_7C68(void)
|
|
{
|
|
CharModelKill(-1);
|
|
}
|
|
|
|
void fn_1_7C8C(omObjData *object)
|
|
{
|
|
s32 sp8;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
u32 var_r27;
|
|
u32 var_r26;
|
|
|
|
float sp44[4] = { 0.25f, 0.5f, 0.75f, 1.0f };
|
|
float sp34[4] = { 0.0f, 650.0f, 650.0f, 650.0f };
|
|
float sp24[4] = { 180.0f, 180.0f, 300.0f, 60.0f };
|
|
|
|
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM417Struct10), MEMORY_DEFAULT_NUM);
|
|
var_r31 = object->data;
|
|
memset(var_r31, 0, sizeof(UnkM417Struct10));
|
|
object->stat |= 256;
|
|
var_r26 = object->work[0];
|
|
var_r28 = GWPlayerCfg[var_r26].character;
|
|
var_r31->unk_00 = var_r28;
|
|
sp8 = var_r31->unk_04 = 0;
|
|
var_r31->unk_0C = lbl_1_bss_888[object->work[0]];
|
|
var_r27 = 0;
|
|
if (var_r31->unk_0C) {
|
|
var_r27++;
|
|
}
|
|
fn_1_2808(object->work[0], var_r31->unk_0C, var_r31->unk_00);
|
|
var_r31->unk_74 = sp44[GWPlayerCfg[var_r26].diff & 3];
|
|
var_r31->unk_44 = GWPlayerCfg[object->work[0]].iscom;
|
|
object->model[0] = CharModelCreate(var_r28, 4);
|
|
Hu3DModelLayerSet(object->model[0], 4);
|
|
Hu3DModelShadowSet(object->model[0]);
|
|
for (var_r29 = 0; var_r29 < 11; var_r29++) {
|
|
if (lbl_1_data_90[var_r29][var_r27 + 1]) {
|
|
if (lbl_1_data_90[var_r29][0] < 65536) {
|
|
object->motion[var_r29] = CharModelMotionCreate(var_r28, lbl_1_data_90[var_r29][0]);
|
|
}
|
|
else {
|
|
object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], var_r28 + lbl_1_data_90[var_r29][0]);
|
|
}
|
|
}
|
|
}
|
|
CharModelMotionDataClose(var_r28);
|
|
object->model[1] = Hu3DModelCreateFile(lbl_1_data_50[var_r28][var_r27]);
|
|
Hu3DModelShadowMapSet(object->model[1]);
|
|
|
|
var_r31->unk_B4.x = sp24[var_r31->unk_0C];
|
|
var_r31->unk_B4.y = 0.0f;
|
|
var_r31->unk_B4.z = sp34[var_r31->unk_0C];
|
|
|
|
object->trans.x = var_r31->unk_C8.x = var_r31->unk_B4.z * sind(var_r31->unk_B4.x);
|
|
object->trans.y = var_r31->unk_C8.y = 0.0f;
|
|
object->trans.z = var_r31->unk_C8.z = var_r31->unk_B4.z * cosd(var_r31->unk_B4.x);
|
|
|
|
var_r31->unk_D4 = var_r31->unk_C8;
|
|
var_r31->unk_F8 = var_r31->unk_C8;
|
|
var_r31->unk_104 = var_r31->unk_F8;
|
|
|
|
var_r31->unk_64 = var_r31->unk_68 = var_r31->unk_B4.x - 180.0f;
|
|
var_r31->unk_6C = 0.0f;
|
|
var_r31->unk_70 = 0.02f;
|
|
if (var_r31->unk_0C) {
|
|
Vec sp18 = { 0.0f, 1.0f, 0.0f };
|
|
PSMTXRotAxisRad(var_r31->unk_1C4, &sp18, 0.017453292f * var_r31->unk_64);
|
|
}
|
|
else {
|
|
Vec spC = { 0.0f, 1.0f, 0.0f };
|
|
PSMTXIdentity(var_r31->unk_1C4);
|
|
C_QUATRotAxisRad(&var_r31->unk_184, &spC, 0.0f);
|
|
var_r31->unk_194 = var_r31->unk_184;
|
|
PSQUATInverse(&var_r31->unk_194, &var_r31->unk_1A4);
|
|
var_r31->unk_1B4 = var_r31->unk_1A4;
|
|
var_r31->unk_164 = var_r31->unk_194;
|
|
var_r31->unk_174 = var_r31->unk_194;
|
|
var_r31->unk_144 = 1.0f;
|
|
var_r31->unk_D4.z += 50.0f;
|
|
}
|
|
PSMTXInverse(var_r31->unk_1C4, var_r31->unk_1F4);
|
|
PSMTXCopy(var_r31->unk_1F4, var_r31->unk_224);
|
|
var_r31->unk_134 = var_r31->unk_138 = 0.0f;
|
|
var_r31->unk_12C = 1.0f;
|
|
var_r31->unk_08 = -1;
|
|
fn_1_B8A0(object, 0);
|
|
var_r31->unk_78 = 0;
|
|
var_r31->unk_9C = -1;
|
|
lbl_1_bss_884 = object->work[0];
|
|
lbl_1_bss_880 = 60.0f * (4.0f + (0.002f * frandmod(1000)));
|
|
var_r31->unk_28 = 1;
|
|
var_r31->unk_50 = 0;
|
|
if (!var_r27) {
|
|
object->func = fn_1_82FC;
|
|
return;
|
|
}
|
|
var_r31->unk_2C = 1;
|
|
object->func = fn_1_86E8;
|
|
}
|
|
|
|
void fn_1_82FC(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
double var_f29;
|
|
float var_f28;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r29;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = 0;
|
|
var_r31->unk_10 = var_r31->unk_18 = 0;
|
|
var_r31->unk_14 = 0;
|
|
var_r31->unk_20 = 0.0f;
|
|
var_r31->unk_24 = 0.0f;
|
|
if (fn_1_26F8() == 2) {
|
|
if (var_r31->unk_44) {
|
|
fn_1_ADC4(object);
|
|
}
|
|
else {
|
|
var_r31->unk_14 = HuPadBtn[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_f31 = HuPadStkX[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_f30 = -HuPadStkY[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_r31->unk_20 = atan2d(var_f31, var_f30);
|
|
var_r31->unk_24 = 0.013888889f * sqrtf((var_f31 * var_f31) + (var_f30 * var_f30));
|
|
if (var_r31->unk_24 > 1.0f) {
|
|
var_r31->unk_24 = 1.0f;
|
|
}
|
|
}
|
|
}
|
|
if ((s32)var_r31->unk_50 != 0) {
|
|
(void)var_r29;
|
|
}
|
|
else {
|
|
var_r29 = 1;
|
|
}
|
|
fn_1_9FF0(object);
|
|
fn_1_9C14(object);
|
|
fn_1_91E0(object);
|
|
fn_1_AD24(object);
|
|
if (fn_1_26F8() == 3) {
|
|
if (var_r29 && fn_1_27D0()) {
|
|
var_r31->unk_50 = 0;
|
|
object->func = fn_1_8B0C;
|
|
}
|
|
}
|
|
else if (var_r31->unk_3C) {
|
|
var_r31->unk_40 = 1;
|
|
fn_1_2728(2);
|
|
var_r31->unk_50 = 0;
|
|
object->func = fn_1_8E44;
|
|
}
|
|
}
|
|
|
|
void fn_1_86E8(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
double var_f29;
|
|
float var_f28;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = 0;
|
|
var_r31->unk_10 = var_r31->unk_18 = 0;
|
|
var_r31->unk_14 = 0;
|
|
var_r31->unk_20 = 0.0f;
|
|
var_r31->unk_24 = 0.0f;
|
|
if (fn_1_26F8() == 2) {
|
|
if (var_r31->unk_44 != 0) {
|
|
var_r31->unk_1C = 0;
|
|
fn_1_B2C0(object);
|
|
}
|
|
else {
|
|
var_r31->unk_14 = HuPadBtn[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_f31 = HuPadStkX[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_f30 = -HuPadStkY[GWPlayerCfg[object->work[0]].pad_idx];
|
|
var_r31->unk_20 = atan2d(var_f31, var_f30);
|
|
var_r31->unk_24 = 0.013888889f * sqrtf((var_f31 * var_f31) + (var_f30 * var_f30));
|
|
if (var_r31->unk_24 > 1.0f) {
|
|
var_r31->unk_24 = 1.0f;
|
|
}
|
|
var_r28 = var_r31->unk_1C;
|
|
var_r31->unk_1C = 0;
|
|
if (HuPadTrigL[GWPlayerCfg[object->work[0]].pad_idx] > 80) {
|
|
var_r31->unk_1C = 1;
|
|
}
|
|
var_r31->unk_18 = var_r31->unk_1C & ~var_r28;
|
|
}
|
|
}
|
|
fn_1_9298(object);
|
|
if ((s32)var_r31->unk_50 != 0) {
|
|
(void)var_r29;
|
|
}
|
|
else if (var_r31->unk_2C) {
|
|
var_r29 = 1;
|
|
}
|
|
fn_1_91E0(object);
|
|
fn_1_AD24(object);
|
|
if (fn_1_26F8() == 3 && var_r29 && fn_1_27D0()) {
|
|
fn_1_2770(object->work[0]);
|
|
var_r31->unk_50 = 0;
|
|
object->func = fn_1_8D30;
|
|
}
|
|
}
|
|
|
|
void fn_1_8B0C(omObjData *object)
|
|
{
|
|
Vec sp8;
|
|
|
|
float var_f31;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
var_r31->unk_10 = var_r31->unk_18 = 0;
|
|
var_r31->unk_14 = 0;
|
|
var_r31->unk_20 = 0.0f;
|
|
var_r31->unk_24 = 0.0f;
|
|
|
|
switch (var_r31->unk_50) {
|
|
case 0:
|
|
sp8 = var_r31->unk_EC;
|
|
sp8.y = 0.0f;
|
|
var_f31 = VECMag(&sp8);
|
|
if (var_f31 > 30.000002f) {
|
|
var_r31->unk_20 = atan2d(-sp8.x, -sp8.z);
|
|
var_r31->unk_24 = 0.01f * var_f31;
|
|
if (var_r31->unk_24 > 1.0f) {
|
|
var_r31->unk_24 = 1.0f;
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_20 = 0.0f;
|
|
var_r31->unk_24 = 0.01f;
|
|
fn_1_2770(object->work[0]);
|
|
var_r31->unk_50++;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (fn_1_2710() == 1) {
|
|
var_r31->unk_28 = 0;
|
|
if (fn_1_2740(object->work[0]) >= 0) {
|
|
fn_1_B8A0(object, 1);
|
|
}
|
|
else {
|
|
fn_1_B8A0(object, 2);
|
|
}
|
|
var_r31->unk_50++;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (fn_1_BA2C(object)) {
|
|
fn_1_27A0(object->work[0]);
|
|
}
|
|
break;
|
|
}
|
|
fn_1_9FF0(object);
|
|
fn_1_9C14(object);
|
|
fn_1_91E0(object);
|
|
fn_1_AD24(object);
|
|
}
|
|
|
|
void fn_1_8D30(omObjData *object)
|
|
{
|
|
UnkM417Struct10 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
var_r31->unk_10 = var_r31->unk_18 = 0;
|
|
var_r31->unk_14 = 0;
|
|
var_r31->unk_20 = 0.0f;
|
|
var_r31->unk_24 = 0.0f;
|
|
switch (var_r31->unk_50) {
|
|
case 0:
|
|
if (fn_1_2710() == 1) {
|
|
var_r31->unk_28 = 0;
|
|
if (fn_1_2740(object->work[0]) >= 0) {
|
|
var_r31->unk_68 = 0.0f;
|
|
fn_1_B8A0(object, 1);
|
|
}
|
|
else {
|
|
fn_1_B8A0(object, 2);
|
|
}
|
|
var_r31->unk_50++;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (fn_1_BA2C(object)) {
|
|
fn_1_27A0(object->work[0]);
|
|
}
|
|
break;
|
|
}
|
|
fn_1_9298(object);
|
|
fn_1_91E0(object);
|
|
fn_1_AD24(object);
|
|
}
|
|
|
|
void fn_1_8E44(omObjData *object)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
|
|
float var_f31;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
var_r31->unk_10 = var_r31->unk_18 = 0;
|
|
var_r31->unk_14 = 0;
|
|
var_r31->unk_20 = 0.0f;
|
|
var_r31->unk_24 = 0.0f;
|
|
switch (var_r31->unk_50) {
|
|
case 0:
|
|
sp8 = var_r31->unk_14C;
|
|
sp8.y = 0.0f;
|
|
if (VECMag(&sp8) > 0.0f) {
|
|
VECNormalize(&sp8, &sp8);
|
|
}
|
|
else {
|
|
sp8.x = 1.0f;
|
|
sp8.z = 0.0f;
|
|
}
|
|
var_r31->unk_68 = atan2d(-sp8.x, -sp8.z);
|
|
VECScale(&sp8, &var_r31->unk_E0, 1.6666667f);
|
|
fn_1_B8A0(object, 5);
|
|
Hu3DModelLayerSet(object->model[0], 0);
|
|
Hu3DModelShadowReset(object->model[0]);
|
|
var_r31->unk_50++;
|
|
|
|
case 1:
|
|
var_r31->unk_E0.y += -0.8166667f;
|
|
if ((var_r31->unk_D4.y < -50.0f) && (var_r31->unk_9C < 0)) {
|
|
var_r31->unk_9C = HuAudFXPlay(1483);
|
|
}
|
|
if (var_r31->unk_D4.y < -300.0f) {
|
|
sp8 = var_r31->unk_D4;
|
|
sp8.y = 0.0f;
|
|
if (VECMag(&sp8) > 0.0f) {
|
|
VECNormalize(&sp8, &sp8);
|
|
}
|
|
else {
|
|
sp8.x = 0.0f;
|
|
sp8.z = 1.0f;
|
|
}
|
|
VECScale(&sp8, &sp14, 250.0f);
|
|
sp14.y = -100.0f;
|
|
VECSubtract(&sp14, &var_r31->unk_D4, &sp8);
|
|
VECScale(&sp8, &var_r31->unk_E0, 1.0f / 60.0f);
|
|
fn_1_B8A0(object, 6);
|
|
var_r31->unk_50++;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (-100.0f > var_r31->unk_D4.y) {
|
|
break;
|
|
}
|
|
var_r31->unk_E0.x = var_r31->unk_E0.y = var_r31->unk_E0.z = 0.0f;
|
|
fn_1_2770(object->work[0]);
|
|
fn_1_27A0(object->work[0]);
|
|
var_r31->unk_50++;
|
|
case 3:
|
|
var_f31 = fn_1_78BC(var_r31->unk_D4.x, var_r31->unk_D4.y, var_r31->unk_D4.z);
|
|
var_r31->unk_D4.y += (0.1f * ((var_f31 - 80.0f) - var_r31->unk_D4.y));
|
|
|
|
break;
|
|
}
|
|
VECAdd(&var_r31->unk_D4, &var_r31->unk_E0, &var_r31->unk_D4);
|
|
fn_1_9FF0(object);
|
|
fn_1_91E0(object);
|
|
fn_1_AD24(object);
|
|
}
|
|
|
|
void fn_1_91E0(omObjData *object)
|
|
{
|
|
UnkM417Struct10 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
var_r31->unk_5C++;
|
|
var_r31->unk_54++;
|
|
object->trans.x = var_r31->unk_C8.x;
|
|
object->trans.y = var_r31->unk_C8.y;
|
|
object->trans.z = var_r31->unk_C8.z;
|
|
var_r31->unk_6C += var_r31->unk_70;
|
|
if (var_r31->unk_6C > 0.45f) {
|
|
var_r31->unk_6C = 0.45f;
|
|
}
|
|
var_r31->unk_64 = fn_1_2F08(var_r31->unk_64, var_r31->unk_68, var_r31->unk_6C);
|
|
object->rot.y = var_r31->unk_64;
|
|
}
|
|
|
|
void fn_1_9298(omObjData *object)
|
|
{
|
|
Vec sp20;
|
|
Vec sp14;
|
|
|
|
float var_f31;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
{
|
|
Vec sp8 = { 0.0f, 1.0f, 0.0f };
|
|
fn_1_9A1C(object);
|
|
var_f31 = fn_1_78BC(var_r31->unk_F8.x, var_r31->unk_F8.y, var_r31->unk_F8.z);
|
|
var_r31->unk_F8.y += (0.2f * (var_f31 - var_r31->unk_F8.y));
|
|
var_f31 = 0.0f;
|
|
if (var_r31->unk_24 > 0.05f && var_r31->unk_2C) {
|
|
sp20.x = sind(90.0f + var_r31->unk_B4.x);
|
|
sp20.y = 0.0f;
|
|
sp20.z = cosd(90.0f + var_r31->unk_B4.x);
|
|
sp14.x = sind(var_r31->unk_20);
|
|
sp14.y = 0.0f;
|
|
sp14.z = cosd(var_r31->unk_20);
|
|
var_f31 = VECDotProduct(&sp20, &sp14);
|
|
var_f31 *= (1.0f / 60.0f) * (30.0f * var_r31->unk_24);
|
|
}
|
|
var_r31->unk_B4.y += (0.1f * (var_f31 - var_r31->unk_B4.y));
|
|
var_r31->unk_B4.x += var_r31->unk_B4.y;
|
|
if (var_r31->unk_B4.x >= 360.0f) {
|
|
var_r31->unk_B4.x -= 360.0f;
|
|
}
|
|
else if (var_r31->unk_B4.x < 0.0f) {
|
|
var_r31->unk_B4.x += 360.0f;
|
|
}
|
|
PSMTXRotAxisRad(var_r31->unk_1C4, &sp8, 0.017453292f * var_r31->unk_B4.x);
|
|
}
|
|
object->rot.y = var_r31->unk_68 = var_r31->unk_B4.x - 180.0f;
|
|
object->trans.x = var_r31->unk_D4.x = var_r31->unk_F8.x = var_r31->unk_C8.x = var_r31->unk_B4.z * sind(var_r31->unk_B4.x);
|
|
object->trans.z = var_r31->unk_D4.z = var_r31->unk_F8.z = var_r31->unk_C8.z = var_r31->unk_B4.z * cosd(var_r31->unk_B4.x);
|
|
if (var_r31->unk_10 & 256) {
|
|
var_r31->unk_A8 = 9;
|
|
}
|
|
if (var_r31->unk_A8) {
|
|
var_r31->unk_A8--;
|
|
}
|
|
switch (var_r31->unk_A0) {
|
|
case 0:
|
|
var_r31->unk_2C = 1;
|
|
var_r31->unk_34 = 0;
|
|
if (var_r31->unk_28) {
|
|
fn_1_B8A0(object, 0);
|
|
if (var_r31->unk_A8) {
|
|
var_r31->unk_2C = 0;
|
|
var_r31->unk_38 = 0;
|
|
fn_1_B8A0(object, 7);
|
|
var_r31->unk_A4 = 9;
|
|
var_r31->unk_A0++;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
var_r31->unk_A4--;
|
|
if (!var_r31->unk_A4) {
|
|
var_r31->unk_30 = 1;
|
|
fn_1_BC70(400.0f, 0.3f, &var_r31->unk_11C);
|
|
var_r31->unk_E0.y = (1.0f / 60.0f) * var_r31->unk_11C.z;
|
|
var_r31->unk_AC = 0.0f;
|
|
var_r31->unk_A0++;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (var_r31->unk_E0.y >= 0.0f) {
|
|
var_r31->unk_AC += (1.0f / 60.0f);
|
|
}
|
|
else {
|
|
var_r31->unk_AC -= (1.0f / 60.0f);
|
|
}
|
|
var_r31->unk_34 = 0;
|
|
var_r31->unk_B0 = 0.0f;
|
|
var_f31 = var_r31->unk_AC - 0.060000002f;
|
|
if (var_f31 > 0.0f) {
|
|
var_r31->unk_34 = 1;
|
|
var_f31 = var_f31 * 9.009008f;
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
var_r31->unk_B0 = var_f31;
|
|
}
|
|
if (var_r31->unk_34 && var_r31->unk_10 & 320) {
|
|
var_r31->unk_34 = 0;
|
|
var_r31->unk_38 = 1;
|
|
var_r31->unk_E0.y = 0.0f;
|
|
fn_1_B8A0(object, 9);
|
|
var_r31->unk_A0++;
|
|
}
|
|
else {
|
|
var_r31->unk_E0.y += (0.016666668f * (0.016666668f * var_r31->unk_11C.w));
|
|
var_r31->unk_D4.y += var_r31->unk_E0.y;
|
|
if (var_r31->unk_D4.y <= var_r31->unk_F8.y) {
|
|
var_r31->unk_30 = 0;
|
|
var_r31->unk_34 = 0;
|
|
var_r31->unk_E0.y = 0.0f;
|
|
var_r31->unk_D4.y = var_r31->unk_F8.y;
|
|
var_r31->unk_A0 = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
if (fn_1_BA2C(object)) {
|
|
var_r31->unk_A0++;
|
|
}
|
|
break;
|
|
case 4:
|
|
var_r31->unk_E0.y += (0.016666668f * (0.016666668f * var_r31->unk_11C.w));
|
|
var_r31->unk_D4.y += +var_r31->unk_E0.y;
|
|
if (var_r31->unk_D4.y <= var_r31->unk_F8.y) {
|
|
fn_1_7510(var_r31->unk_F8.x, 0.0f, var_r31->unk_F8.z, var_r31->unk_B0);
|
|
HuAudFXEmiterPlay(1482, &var_r31->unk_D4);
|
|
omVibrate(object->work[0], 12, 4, 2);
|
|
var_r31->unk_30 = 0;
|
|
var_r31->unk_E0.y = 0.0f;
|
|
var_r31->unk_D4.y = var_r31->unk_F8.y;
|
|
fn_1_B8A0(object, 10);
|
|
var_r31->unk_A0 = var_r31->unk_A0 + 1;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (fn_1_BA2C(object) != 0) {
|
|
var_r31->unk_38 = 0;
|
|
var_r31->unk_A0 = 0;
|
|
}
|
|
break;
|
|
}
|
|
if (!var_r31->unk_30) {
|
|
var_r31->unk_D4.y = var_r31->unk_F8.y;
|
|
}
|
|
}
|
|
|
|
void fn_1_9A1C(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
s32 var_r31;
|
|
UnkM417Struct10 *var_r30;
|
|
UnkM417Struct10 *var_r29;
|
|
UnkM417Struct10 *var_r28;
|
|
s32 var_r27;
|
|
|
|
var_r30 = object->data;
|
|
var_r30->unk_C0++;
|
|
if (((UnkM417Struct10 *)lbl_1_bss_898[0]->data)->unk_C4 == var_r30->unk_C0) {
|
|
return;
|
|
}
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
((UnkM417Struct10 *)lbl_1_bss_898[var_r31]->data)->unk_C4 = var_r30->unk_C0;
|
|
}
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
var_r29 = lbl_1_bss_898[var_r31]->data;
|
|
if (!var_r29->unk_0C) {
|
|
continue;
|
|
}
|
|
for (var_r27 = 0; var_r27 < 4; var_r27++) {
|
|
if (var_r31 == var_r27) {
|
|
continue;
|
|
}
|
|
var_r28 = lbl_1_bss_898[var_r27]->data;
|
|
if (!var_r28->unk_0C) {
|
|
continue;
|
|
}
|
|
var_f31 = fn_1_3024(var_r29->unk_B4.x, var_r28->unk_B4.x);
|
|
if (fabs(var_f31) > 23.0) {
|
|
continue;
|
|
}
|
|
if (var_f31 == 0.0f) {
|
|
var_f30 = 11.5f;
|
|
}
|
|
else {
|
|
var_f30 = 23.0 - fabs(var_f31);
|
|
var_f30 = (0.5f * var_f30) * (var_f31 / fabs(var_f31));
|
|
}
|
|
var_r29->unk_B4.x -= var_f30;
|
|
var_r28->unk_B4.x += var_f30;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_9C14(omObjData *object)
|
|
{
|
|
Qtrn sp28;
|
|
Vec sp1C;
|
|
Vec sp10;
|
|
float spC;
|
|
float sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
if (var_r31->unk_24 > 0.0f) {
|
|
var_r31->unk_68 = var_r31->unk_20;
|
|
}
|
|
if (var_r31->unk_24 > 0.05f) {
|
|
var_r31->unk_E0.x = 0.01666666753590107 * (500.0 * (var_r31->unk_24 * sind(var_r31->unk_20)));
|
|
var_r31->unk_E0.z = 0.01666666753590107 * (500.0 * (var_r31->unk_24 * cosd(var_r31->unk_20)));
|
|
var_r31->unk_6C = 0.2f;
|
|
var_r31->unk_70 = 0.0f;
|
|
if (CharModelMotionShiftIDGet(var_r31->unk_00) < 0) {
|
|
var_f30 = 0.5f;
|
|
if (var_r31->unk_08 == 4) {
|
|
var_f30 = 0.45f;
|
|
}
|
|
if (var_r31->unk_24 > var_f30) {
|
|
fn_1_B8A0(object, 4);
|
|
var_f29 = var_r31->unk_24;
|
|
}
|
|
else {
|
|
fn_1_B8A0(object, 3);
|
|
var_f29 = var_r31->unk_24 / var_f30;
|
|
}
|
|
CharModelMotionSpeedSet(var_r31->unk_00, var_f29);
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_E0.x = var_r31->unk_E0.y = var_r31->unk_E0.z = 0.0f;
|
|
if (var_r31->unk_28 && CharModelMotionShiftIDGet(var_r31->unk_00) < 0) {
|
|
fn_1_B8A0(object, 0);
|
|
}
|
|
}
|
|
VECSubtract(&var_r31->unk_D4, &var_r31->unk_104, &sp1C);
|
|
if (fn_1_26F8() == 2) {
|
|
sp1C.y += -5.8333335f * var_r31->unk_148;
|
|
}
|
|
PSMTXMultVec(var_r31->unk_224, &sp1C, &sp1C);
|
|
VECAdd(&sp1C, &var_r31->unk_E0, &sp1C);
|
|
sp10 = sp1C;
|
|
sp10.y = 0.0f;
|
|
var_f31 = sp8 = VECMag(&sp10);
|
|
if (var_f31 > 150.0f) {
|
|
var_f31 = 150.0f / var_f31;
|
|
sp1C.x = sp1C.x * var_f31;
|
|
sp1C.z *= var_f31;
|
|
}
|
|
sp1C.y = 80.0f;
|
|
var_r31->unk_EC = sp1C;
|
|
spC = atan2d(sp1C.x, sp1C.z);
|
|
PSMTXMultVec(var_r31->unk_1C4, &sp1C, &sp1C);
|
|
VECAdd(&sp1C, &var_r31->unk_F8, &var_r31->unk_D4);
|
|
if (var_r31->unk_13C >= 0.95f) {
|
|
var_r31->unk_3C = 1;
|
|
return;
|
|
}
|
|
PSQUATNormalize(&var_r31->unk_194, &sp28);
|
|
if (sp28.w < cos(0.4363323129985824)) {
|
|
var_r31->unk_3C = 1;
|
|
}
|
|
}
|
|
|
|
void fn_1_9FF0(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
float var_f25;
|
|
float var_f24;
|
|
float var_f23;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r30;
|
|
UnkM417Struct2 *var_r29;
|
|
s32 var_r28;
|
|
|
|
var_r31 = object->data;
|
|
{
|
|
Quaternion sp3C;
|
|
Quaternion sp2C = { 0.0f, 0.0f, 0.0f, 1.0f };
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8 = { 0.0f, 0.0f, 0.0f };
|
|
|
|
if (fn_1_26F8() == 2) {
|
|
var_r31->unk_148 += 0.0011111111f;
|
|
if (var_r31->unk_148 > 1.0f) {
|
|
var_r31->unk_148 = 1.0f;
|
|
}
|
|
}
|
|
var_r31->unk_1B4 = var_r31->unk_1A4;
|
|
PSMTXCopy(var_r31->unk_1F4, var_r31->unk_224);
|
|
var_r31->unk_104 = var_r31->unk_F8;
|
|
var_f31 = fn_1_75BC();
|
|
for (var_r30 = 0; var_r30 < 8; var_r30++) {
|
|
var_f29 = 45.0f * var_r30;
|
|
var_f31 += fn_1_78BC(0.5 * (150.0 * sind(var_f29)), 0.0f, 0.5 * (150.0 * cosd(var_f29)));
|
|
}
|
|
var_f31 *= 0.11111111f;
|
|
var_r31->unk_F8.y = var_r31->unk_F8.y + var_r31->unk_98;
|
|
if (var_f31 > var_r31->unk_F8.y || (!var_r31->unk_30 && fn_1_26F8() != 2)) {
|
|
var_r31->unk_F8.y = var_r31->unk_F8.y + (0.1388889f * (var_f31 - var_r31->unk_F8.y));
|
|
var_r31->unk_98 = var_r31->unk_F8.y - var_r31->unk_104.y;
|
|
var_r31->unk_98 += -0.27222225f;
|
|
var_r31->unk_30 = 0;
|
|
}
|
|
else {
|
|
var_r31->unk_98 = var_r31->unk_F8.y - var_r31->unk_104.y;
|
|
var_r31->unk_98 += -0.8166667f;
|
|
var_r31->unk_30 = 1;
|
|
}
|
|
if (var_r31->unk_40) {
|
|
var_r31->unk_12C += 1.0f / 60.0f;
|
|
if (var_r31->unk_12C > 2.0f) {
|
|
var_r31->unk_12C = 2.0f;
|
|
}
|
|
}
|
|
var_r31->unk_130 += 1.0f / 60.0f;
|
|
var_f28 = 0.1f * var_r31->unk_130;
|
|
var_f26 = fmod(var_f28, 1.0);
|
|
var_f25 = var_f26;
|
|
var_r31->unk_134 = 360.0f * var_f25;
|
|
var_f27 = var_r31->unk_130;
|
|
var_f24 = fmod(var_f27, 1.0);
|
|
var_f23 = var_f24;
|
|
var_r31->unk_138 = 0.04712389037013054 * sind((360.0f * var_f23));
|
|
|
|
sp8.x = sind(var_r31->unk_134);
|
|
sp8.y = 0.0f;
|
|
sp8.z = cosd(var_r31->unk_134);
|
|
C_QUATRotAxisRad(&var_r31->unk_164, &sp8, var_r31->unk_138 * var_r31->unk_12C);
|
|
if (!var_r31->unk_40) {
|
|
sp20 = var_r31->unk_EC;
|
|
sp20.y = 0.0f;
|
|
var_f31 = (2.0f / 300.0f) * VECMag(&sp20);
|
|
if (var_f31 <= 0.0f) {
|
|
var_f31 = 0.0f;
|
|
sp8.x = 1.0f;
|
|
sp8.y = sp8.z = 0.0f;
|
|
}
|
|
else {
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
sp8.x = sp20.z;
|
|
sp8.y = 0.0f;
|
|
sp8.z = -sp20.x;
|
|
}
|
|
C_QUATRotAxisRad(&var_r31->unk_174, &sp8, 0.09424778f * var_f31);
|
|
if (!var_r31->unk_30 && !var_r31->unk_40) {
|
|
for (var_r29 = fn_1_7A28(); var_r29->unk_00 > -2; var_r29++) {
|
|
if (var_r29->unk_00 >= 0 && var_r29->unk_00 < 16) {
|
|
var_r28 = var_r29->unk_00;
|
|
var_f31 = var_r29->unk_08 * var_r29->unk_0C;
|
|
if (var_r31->unk_254[var_r28].y <= var_f31) {
|
|
var_r31->unk_254[var_r28].y += 0.044444446f;
|
|
var_r31->unk_254[var_r28].x = var_r29->unk_04;
|
|
}
|
|
if (fn_1_26F8() == 2 && var_r31->unk_254[var_r28].z <= var_f31) {
|
|
var_r31->unk_254[var_r28].z += 0.08888889f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sp2C.w = 1.0f;
|
|
sp2C.x = sp2C.y = sp2C.z = 0.0f;
|
|
|
|
sp20.x = sp20.y = sp20.z = 0.0f;
|
|
|
|
var_f30 = 0.0f;
|
|
for (var_r30 = 0; var_r30 < 16; var_r30++) {
|
|
if (var_r31->unk_254[var_r30].z > 0.0f) {
|
|
var_f30 += 0.5f * var_r31->unk_254[var_r30].z;
|
|
if (var_r31->unk_30 == 0) {
|
|
var_r31->unk_254[var_r30].z -= 1.0f / 60.0f;
|
|
if (var_r31->unk_254[var_r30].z < 0.0f) {
|
|
var_r31->unk_254[var_r30].z = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
if (var_r31->unk_254[var_r30].y > 0.0f) {
|
|
sp20.x += var_r31->unk_254[var_r30].y * sind(var_r31->unk_254[var_r30].x);
|
|
sp20.z += var_r31->unk_254[var_r30].y * cosd(var_r31->unk_254[var_r30].x);
|
|
var_r31->unk_254[var_r30].y -= 0.012820514f;
|
|
if (var_r31->unk_254[var_r30].y < 0.0f) {
|
|
var_r31->unk_254[var_r30].y = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
if (var_f30 > 1.0f) {
|
|
var_f30 = 1.0f;
|
|
}
|
|
var_f30 *= 1.0f / 60.0f;
|
|
var_f30 *= var_r31->unk_148;
|
|
var_r31->unk_144 = var_r31->unk_144 + (0.1f * (var_f30 - var_r31->unk_144));
|
|
var_f31 = 90.0 + (atan2d(sp20.x, sp20.z));
|
|
sp8.x = sind(var_f31);
|
|
sp8.y = 0.0f;
|
|
sp8.z = cosd(var_f31);
|
|
var_f29 = VECMag(&sp20);
|
|
if (var_f29 > 0.5f) {
|
|
var_f29 = 0.5f;
|
|
}
|
|
C_QUATRotAxisRad(&sp2C, &sp8, 3.1415927f * var_f29 * 0.18f);
|
|
if (!var_r31->unk_40) {
|
|
if (fn_1_26F8() == 2) {
|
|
sp20 = var_r31->unk_EC;
|
|
sp20.y = 0.0f;
|
|
var_f31 = VECMag(&sp20);
|
|
var_f29 = 0.006666667f * var_f31;
|
|
if (var_f31 > 0.0f) {
|
|
VECNormalize(&sp20, &sp20);
|
|
}
|
|
VECSubtract(&sp20, &var_r31->unk_14C, &sp14);
|
|
if (VECMag(&sp14)) {
|
|
VECNormalize(&sp14, &sp14);
|
|
}
|
|
VECScale(&sp14, &sp14, (0.0033333336f * var_f29) + var_r31->unk_144);
|
|
VECAdd(&var_r31->unk_14C, &sp14, &var_r31->unk_14C);
|
|
}
|
|
else {
|
|
VECScale(&var_r31->unk_14C, &var_r31->unk_14C, 0.98f);
|
|
}
|
|
var_r31->unk_14C.y = 0.0f;
|
|
var_f31 = VECMag(&var_r31->unk_14C);
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f / var_f31;
|
|
var_r31->unk_14C.x *= var_f31;
|
|
var_r31->unk_14C.z *= var_f31;
|
|
var_f31 = 1.0f;
|
|
}
|
|
var_r31->unk_13C = var_f31;
|
|
var_r31->unk_140 = atan2d(var_r31->unk_14C.x, var_r31->unk_14C.z);
|
|
if (var_f31 > 0.0f) {
|
|
sp8.x = var_r31->unk_14C.z;
|
|
sp8.y = 0.0f;
|
|
sp8.z = -var_r31->unk_14C.x;
|
|
}
|
|
else {
|
|
sp8.x = 1.0f;
|
|
sp8.y = sp8.z = 0.0f;
|
|
}
|
|
C_QUATRotAxisRad(&var_r31->unk_184, &sp8, 0.9424779f * var_f31);
|
|
}
|
|
else {
|
|
sp8.x = var_r31->unk_14C.z;
|
|
sp8.y = 0.0f;
|
|
sp8.z = -var_r31->unk_14C.x;
|
|
C_QUATRotAxisRad(&sp3C, &sp8, M_PI);
|
|
C_QUATSlerp(&var_r31->unk_184, &sp3C, &var_r31->unk_184, 0.027777778f);
|
|
}
|
|
PSQUATMultiply(&var_r31->unk_174, &var_r31->unk_184, &var_r31->unk_194);
|
|
PSQUATMultiply(&var_r31->unk_164, &var_r31->unk_194, &var_r31->unk_194);
|
|
PSQUATMultiply(&sp2C, &var_r31->unk_194, &var_r31->unk_194);
|
|
PSMTXQuat(var_r31->unk_1C4, &var_r31->unk_194);
|
|
PSMTXInverse(var_r31->unk_1C4, var_r31->unk_1F4);
|
|
PSQUATInverse(&var_r31->unk_194, &var_r31->unk_1A4);
|
|
}
|
|
}
|
|
|
|
void fn_1_AD24(omObjData *object)
|
|
{
|
|
UnkM417Struct10 *var_r30;
|
|
|
|
var_r30 = object->data;
|
|
Hu3DModelPosSetV(object->model[0], &var_r30->unk_D4);
|
|
Hu3DModelRotSet(object->model[0], 0.0f, var_r30->unk_64, 0.0f);
|
|
Hu3DModelPosSetV(object->model[1], &var_r30->unk_F8);
|
|
PSMTXCopy(var_r30->unk_1C4, Hu3DData[object->model[1]].unk_F0);
|
|
}
|
|
|
|
void fn_1_ADC4(omObjData *object)
|
|
{
|
|
Vec sp28;
|
|
Vec sp1C;
|
|
Vec sp10;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
|
|
var_r31 = object->data;
|
|
{
|
|
float sp8[2] = { 30.000002f, 80.0f };
|
|
|
|
if (!var_r31->unk_84) {
|
|
sp28 = var_r31->unk_14C;
|
|
sp28.y = 0.0f;
|
|
var_f31 = 0.75f + (2.5f * (var_r31->unk_74 * var_r31->unk_74));
|
|
VECScale(&sp28, &sp28, 150.0f * -var_f31);
|
|
var_f31 = VECMag(&sp28);
|
|
if (var_f31 > 150.0f) {
|
|
var_f31 = 150.0f / var_f31;
|
|
sp28.x *= var_f31;
|
|
sp28.z *= var_f31;
|
|
}
|
|
sp28.x += (100.0 * ((0.9f - (0.3f * var_r31->unk_74)) * ((0.002 * (float)frandmod(1000)) - 1.0)));
|
|
sp28.z += (100.0 * ((0.9f - (0.3f * var_r31->unk_74)) * ((0.002 * (float)frandmod(1000)) - 1.0)));
|
|
sp1C = var_r31->unk_110;
|
|
sp1C.y = 0.0f;
|
|
VECSubtract(&sp28, &sp1C, &sp10);
|
|
var_f31 = VECMag(&sp10);
|
|
if (var_f31 > (100.0f * (1.2f - (0.3f * var_r31->unk_74)))) {
|
|
var_r31->unk_110 = sp28;
|
|
}
|
|
var_r31->unk_84 = 60.0f * ((0.23f - (0.04f * var_r31->unk_74)) + (0.001f * ((0.4f - (0.15f * var_r31->unk_74)) * frandmod(1000))));
|
|
}
|
|
else {
|
|
var_r31->unk_84--;
|
|
}
|
|
sp28 = var_r31->unk_110;
|
|
sp28.y = 0.0f;
|
|
sp1C = var_r31->unk_EC;
|
|
sp1C.y = 0.0f;
|
|
VECSubtract(&sp28, &sp1C, &sp10);
|
|
var_f31 = VECMag(&sp10);
|
|
if (var_r31->unk_48) {
|
|
var_r30 = 1;
|
|
}
|
|
else {
|
|
var_r30 = 0;
|
|
}
|
|
var_r29 = var_r30;
|
|
if (var_f31 > sp8[var_r29]) {
|
|
var_r31->unk_48 = 0;
|
|
var_r31->unk_20 = fn_1_2F08(var_r31->unk_64, atan2d(sp10.x, sp10.z), 0.5f);
|
|
var_f30 = 0.014285714f * var_f31;
|
|
if (var_f30 > 1.0f) {
|
|
var_f30 = 1.0f;
|
|
}
|
|
var_r31->unk_24 = var_f30;
|
|
return;
|
|
}
|
|
var_r31->unk_48 = 1;
|
|
var_r31->unk_110 = var_r31->unk_EC;
|
|
}
|
|
}
|
|
|
|
void fn_1_B2C0(omObjData *object)
|
|
{
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r29;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = 0;
|
|
if (var_r31->unk_90) {
|
|
var_r31->unk_90--;
|
|
}
|
|
else {
|
|
var_r31->unk_88 = 1.0f;
|
|
if (frandmod(1000) < 500) {
|
|
var_r31->unk_88 = -1.0f;
|
|
}
|
|
var_r31->unk_8C = 0.001f * frandmod(1000);
|
|
var_r31->unk_90 = 0.15f * frandmod(1000);
|
|
}
|
|
var_r31->unk_20 = var_r31->unk_B4.x + (90.0f * var_r31->unk_88);
|
|
var_r31->unk_24 = 0.5f + (0.5f * var_r31->unk_74);
|
|
if (lbl_1_bss_884 >= object->work[0]) {
|
|
if (lbl_1_bss_880) {
|
|
lbl_1_bss_880--;
|
|
}
|
|
else {
|
|
lbl_1_bss_880 = 60.0f * (8.0f + (0.004f * frandmod(1000)));
|
|
}
|
|
}
|
|
lbl_1_bss_884 = object->work[0];
|
|
if (var_r31->unk_2C) {
|
|
if (!var_r31->unk_4C && lbl_1_bss_880 < 132.0f && lbl_1_bss_880 > 30.0f) {
|
|
var_r31->unk_80 = 0;
|
|
var_r29 = 1;
|
|
}
|
|
if (!var_r31->unk_80) {
|
|
if (var_r29) {
|
|
var_r31->unk_80 = lbl_1_bss_880;
|
|
var_r31->unk_80 -= (60.0f * (0.16f + (0.6f * (0.1f + (0.5f * var_r31->unk_74)))));
|
|
var_r31->unk_4C = 1;
|
|
if (var_r31->unk_80 > 240.0f) {
|
|
var_r31->unk_80 = 1;
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_80 = 60.0f * (0.00080000004f * ((1.05f - var_r31->unk_74) * frandmod(1000)));
|
|
var_r31->unk_80 += (var_r31->unk_8C * (30.0f + (0.03f * frandmod(1000))));
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_80--;
|
|
if (!var_r31->unk_80) {
|
|
var_r31->unk_10 |= 256;
|
|
var_r31->unk_7C = (0.5f * var_r31->unk_74) + (((1.2f * var_r31->unk_74) / 1000.0f) * frandmod(1000));
|
|
if (var_r31->unk_7C < 0.25f) {
|
|
var_r31->unk_7C = 0.25f;
|
|
}
|
|
if (var_r31->unk_4C) {
|
|
var_r31->unk_7C = 0.0f;
|
|
}
|
|
var_r31->unk_4C = 0;
|
|
}
|
|
}
|
|
}
|
|
if (var_r31->unk_34 && ((var_r31->unk_E0.y < 0.0f && var_r31->unk_B0 < var_r31->unk_7C) || !lbl_1_bss_880)) {
|
|
var_r31->unk_10 |= 256;
|
|
}
|
|
}
|
|
|
|
void fn_1_B8A0(omObjData *object, u32 arg1)
|
|
{
|
|
float var_f31;
|
|
|
|
UnkM417Struct10 *var_r30;
|
|
|
|
var_r30 = object->data;
|
|
if (var_r30->unk_08 != arg1 && arg1 < 11) {
|
|
var_f31 = 60.0f * lbl_1_data_114[arg1].unk_04;
|
|
if (var_r30->unk_08 < 0) {
|
|
var_f31 = 0.0f;
|
|
}
|
|
var_r30->unk_08 = arg1;
|
|
CharModelMotionShiftSet(
|
|
var_r30->unk_00, object->motion[lbl_1_data_114[arg1].unk_00], 60.0f * lbl_1_data_114[arg1].unk_08, var_f31, lbl_1_data_114[arg1].unk_10);
|
|
if (lbl_1_data_114[arg1].unk_0C >= 0.0f) {
|
|
Hu3DMotionShiftStartEndSet(*object->model, 60.0f * lbl_1_data_114[arg1].unk_08, 60.0f * lbl_1_data_114[arg1].unk_0C);
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_BA2C(omObjData *object)
|
|
{
|
|
UnkM417Struct10 *var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = object->data;
|
|
var_r30 = 0;
|
|
if (CharModelMotionEndCheck(var_r31->unk_00) && CharModelMotionShiftIDGet(var_r31->unk_00) < 0) {
|
|
var_r30 = 1;
|
|
}
|
|
return var_r30;
|
|
}
|
|
|
|
s32 fn_1_BAA0(omObjData *object, u32 arg1)
|
|
{
|
|
s32 var_r27;
|
|
|
|
var_r27 = 0;
|
|
if (fn_1_BA2C(object)) {
|
|
fn_1_B8A0(object, arg1);
|
|
var_r27 = 1;
|
|
}
|
|
return var_r27;
|
|
}
|
|
|
|
void fn_1_BC70(float arg8, float arg9, Quaternion *arg0)
|
|
{
|
|
arg0->x = arg9;
|
|
arg0->y = arg8;
|
|
arg0->w = (2.0f * -arg8) / (arg9 * arg9);
|
|
arg0->z = -arg0->w * arg9;
|
|
}
|