marioparty4/src/REL/m440Dll/object.c

1203 lines
39 KiB
C

#include "REL/m440Dll.h"
#include "ext_math.h"
#include "game/chrman.h"
#include "game/flag.h"
#include "game/gamework_data.h"
#include "game/hsfmotion.h"
#include "game/pad.h"
#include "math.h"
#include "string.h"
#include "version.h"
#ifdef __MWERKS__
#include "game/audio.h"
#endif
// bss
omObjData *lbl_1_bss_C0[4];
s16 lbl_1_bss_B8[4];
Vec lbl_1_bss_88[4];
f32 lbl_1_bss_84;
Vec lbl_1_bss_78;
s16 lbl_1_bss_74;
u8 lbl_1_bss_72;
s16 lbl_1_bss_70;
// data
s16 lbl_1_data_1D8 = 2;
s16 lbl_1_data_1DA = -1;
u32 lbl_1_data_1DC[8][2] = { { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00), 0 }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02), 0 },
{ DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x03), 0 }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x38), 0 }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x48), 0 },
{ DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17), 0 }, { 0x47000C, 1 }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x36), 0 } };
f32 lbl_1_data_21C[4] = { 210.0f, 190.0f, 170.0f, 0.0f };
// prototypes
void fn_1_B180(omObjData *);
void fn_1_AE08(Process *arg0)
{
s16 var_r31;
omMakeGroupEx(arg0, 0, 4);
omGetGroupMemberListEx(arg0, 0);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
lbl_1_bss_C0[var_r31] = omAddObjEx(arg0, 0x64, 9, 8, 0, fn_1_AEE4);
lbl_1_bss_C0[var_r31]->work[0] = var_r31;
}
omAddObjEx(arg0, 0x65, 0, 0, -1, fn_1_B180);
}
void fn_1_AEE4(omObjData *arg0)
{
f32 var_f31;
s32 temp_r28;
s16 var_r29;
unkObjStruct *temp_r31;
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x78, MEMORY_DEFAULT_NUM);
temp_r31 = (unkObjStruct *)arg0->data;
memset(temp_r31, 0, 0x78);
arg0->stat |= 0x100;
temp_r31->unk4 = arg0->work[0];
temp_r31->unk6 = GWPlayerCfg[temp_r31->unk4].pad_idx;
temp_r31->unk8 = GWPlayerCfg[temp_r31->unk4].character;
arg0->model[0] = CharModelCreate(temp_r31->unk8, 4);
Hu3DModelLayerSet(arg0->model[0], 1);
Hu3DModelShadowSet(arg0->model[0]);
for (var_r29 = 0; var_r29 < 8; var_r29++) {
if (lbl_1_data_1DC[var_r29][1] == 0) {
arg0->motion[var_r29] = CharModelMotionCreate(temp_r31->unk8, lbl_1_data_1DC[var_r29][0]);
}
else {
arg0->motion[var_r29] = CharModelMotionCreate(temp_r31->unk8, temp_r31->unk8 + lbl_1_data_1DC[var_r29][0]);
}
}
CharModelVoiceEnableSet(temp_r31->unk8, arg0->motion[4], 0);
CharModelMotionDataClose(temp_r31->unk8);
Hu3DMotionSet(arg0->model[0], arg0->motion[0]);
temp_r31->unk18.x = temp_r31->unk18.y = temp_r31->unk18.z = 0.0f;
temp_r31->unk30.x = temp_r31->unk30.y = temp_r31->unk30.z = 0.0f;
temp_r31->unk3C.y = 90.0f;
temp_r31->unkC = 0;
temp_r31->unkE = 2 * REFRESH_RATE_F;
temp_r31->unk10 = temp_r31->unk12 = temp_r31->unk14 = 0;
if (temp_r31->unk8 == 5) {
var_f31 = 350.0f;
}
else {
var_f31 = 410.0f;
}
temp_r31->unk5C = var_f31;
temp_r28 = temp_r31->unk4;
if (_CheckFlag(FLAG_ID_MAKE(1, 12)) == 0) {
GWPlayer[temp_r28].coin_win = 0;
}
arg0->func = fn_1_B17C;
}
void fn_1_B17C(omObjData *arg0)
{
return;
}
void fn_1_B180(omObjData *arg0)
{
s16 var_r29;
s16 var_r31;
s32 var_r28;
u32 temp_r0;
u32 temp_r3;
u32 temp_r3_2;
unkObjStruct *temp_r30;
var_r28 = GWSystem.player_curr;
if (var_r28 < 0) {
var_r28 = 0;
}
var_r29 = var_r28;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
lbl_1_bss_B8[var_r31] = var_r29;
var_r29 = (var_r29 + 1) % 4;
}
lbl_1_bss_88->x = (700.0f * cos(M_PI / 2 - M_PI / 9));
lbl_1_bss_88->z = (700.0f * sin(M_PI / 2 - M_PI / 9));
for (var_r31 = 1; var_r31 < 4; var_r31++) {
lbl_1_bss_88[var_r31].x = lbl_1_bss_88[var_r31 - 1].x - 150.0f;
lbl_1_bss_88[var_r31].z = lbl_1_bss_88->z;
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
temp_r30 = lbl_1_bss_C0[lbl_1_bss_B8[var_r31]]->data;
temp_r30->unkA = var_r31;
temp_r30->unk24.x = (lbl_1_bss_88[var_r31].x - 1000.0f);
temp_r30->unk24.y = 0.0f;
temp_r30->unk24.z = lbl_1_bss_88->z;
}
arg0->func = fn_1_B3A4;
}
void fn_1_B3A4(omObjData *arg0)
{
f32 sp14;
ModelData *sp8;
f32 var_f31;
s16 var_r28;
s16 var_r29;
omObjData *var_r30;
unkObjStruct *var_r31;
for (var_r29 = 0; var_r29 < 4; var_r29++) {
if (lbl_1_bss_B8[var_r29] != -1) {
var_r30 = lbl_1_bss_C0[lbl_1_bss_B8[var_r29]];
sp8 = &Hu3DData[var_r30->model[0]];
var_r31 = (unkObjStruct *)var_r30->data;
switch (var_r31->unk0 & 0xF) {
case 1:
var_r31->unkC++;
var_f31 = (f32)var_r31->unkC / var_r31->unkE;
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
var_r31->unkC = 0;
if (lbl_1_bss_72 == 0) {
lbl_1_bss_72 = 1;
fn_1_F228();
}
else {
fn_1_F4D4(var_r31, 15, 7);
Hu3DMotionShiftSet(var_r30->model[0], var_r30->motion[1], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
}
var_r28 = (var_r31->unkA == -1) ? 0 : var_r31->unkA;
var_r31->unk18.x = var_r31->unk24.x + (lbl_1_bss_88[var_r28].x - var_r31->unk24.x) * var_f31;
var_r31->unk18.y = 0.0f;
var_r31->unk18.z = var_r31->unk24.z + (lbl_1_bss_88[var_r28].z - var_r31->unk24.z) * var_f31;
var_r31->unk14++;
var_f31 = var_r31->unk14 / (REFRESH_RATE_F / 3.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
}
var_r31->unk30.y = var_r31->unk3C.y + (90.0f - var_r31->unk3C.y) * var_f31;
break;
case 7:
var_r31->unkC++;
var_f31 = (f32)var_r31->unkC / (2.0f * REFRESH_RATE_F / 3);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
var_r31->unkC = 0;
fn_1_F4D4(var_r31, 15, 8);
Hu3DMotionShiftSet(var_r30->model[0], var_r30->motion[0], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
var_r31->unk30.y = 90.0f + (lbl_1_data_21C[var_r31->unkA] - 90.0f) * var_f31;
var_r31->unk3C = var_r31->unk30;
break;
case 2:
fn_1_B884(var_r30, var_r31);
break;
case 3:
if (fn_1_1954() != 0) {
fn_1_16D8();
fn_1_C1D4(var_r30, var_r31);
fn_1_C944(var_r30, var_r31);
fn_1_D34C(var_r30, var_r31);
}
break;
case 4:
fn_1_D7F8(var_r30, var_r31);
break;
case 5:
fn_1_E034(var_r30, var_r31);
break;
case 6:
if (fn_1_E8AC(var_r30, var_r31) != 0) {
lbl_1_bss_B8[var_r29] = -1;
}
break;
case 0:
case 8:
break;
}
Hu3DModelPosSet(var_r30->model[0], var_r31->unk18.x, var_r31->unk18.y, var_r31->unk18.z);
Hu3DModelRotSet(var_r30->model[0], var_r31->unk30.x, var_r31->unk30.y, var_r31->unk30.z);
}
}
}
f32 lbl_1_data_250 = 70.0f;
void fn_1_B884(omObjData *arg0, unkObjStruct *arg1)
{
s16 sp8[5] = { 3, 1, 0, 2, 4 };
f32 var_f29;
f32 var_f28;
f32 var_f31;
f32 var_f30;
s16 temp_r0;
s16 temp_r0_2;
s16 temp_r3;
s16 var_r30;
switch (lbl_1_bss_74) {
case 0:
lbl_1_data_250 -= (REFRESH_RATE_F / 120);
if (lbl_1_data_250 <= 45.0f) {
lbl_1_data_250 = 45.0f;
lbl_1_bss_74++;
}
arg1->unk24 = arg1->unk18;
arg1->unk18.x = (700.0 * cosd(lbl_1_data_250));
arg1->unk18.z = (700.0 * sind(lbl_1_data_250));
var_f29 = (arg1->unk18.x - arg1->unk24.x);
var_f28 = (arg1->unk18.z - arg1->unk24.z);
var_f30 = atan2d(var_f29, var_f28);
if (var_f30 < 0.0f) {
var_f30 += 360.0f;
}
arg1->unk68 = var_f30;
arg1->unk30.y = var_f30;
return;
case 1:
arg1->unkE++;
var_f31 = arg1->unkE / (REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
}
var_f30 = 225.0f;
arg1->unk30.y = arg1->unk68 + (var_f31 * (var_f30 - arg1->unk68));
arg1->unkC++;
var_f31 = arg1->unkC / (5.0f * REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
arg1->unkC = arg1->unkE = 0;
arg1->unk68 = arg1->unk30.y;
for (var_r30 = 0; var_r30 < 5; var_r30++) {
if (lbl_1_data_14[sp8[var_r30]] != 0) {
arg1->unk4A = arg1->unk60 = sp8[var_r30];
break;
}
}
lbl_1_bss_74++;
}
var_f29 = 700.0f + ((arg1->unk5C - 700.0f) * var_f31);
arg1->unk18.x = (var_f29 * cos(M_PI / 4));
arg1->unk18.z = (var_f29 * sin(M_PI / 4));
var_f29 = 0.1f;
var_f28 = 0.6f;
if (var_f31 >= var_f29) {
var_f31 -= var_f29;
var_f31 *= (1.0f / var_f28);
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
arg1->unk18.y = 150.0f * var_f31;
}
break;
case 2:
lbl_1_data_250 += REFRESH_RATE_F / 60.0f;
if (lbl_1_data_250 >= lbl_1_data_0[arg1->unk60]) {
lbl_1_data_250 = lbl_1_data_0[arg1->unk60];
lbl_1_bss_74++;
}
arg1->unk24 = arg1->unk18;
arg1->unk18.x = (arg1->unk5C * cosd(lbl_1_data_250));
arg1->unk18.z = (arg1->unk5C * sind(lbl_1_data_250));
var_f29 = (arg1->unk18.x - arg1->unk24.x);
var_f28 = (arg1->unk18.z - arg1->unk24.z);
var_f30 = atan2d(var_f29, var_f28);
if (var_f30 < 0.0f) {
var_f30 += 360.0f;
}
arg1->unkC++;
var_f31 = arg1->unkC / (REFRESH_RATE_F / 6.0f);
if (var_f31 < 1.0f) {
arg1->unk30.y = arg1->unk68 + (var_f31 * (var_f30 - arg1->unk68));
}
else {
arg1->unk30.y = var_f30;
}
arg1->unk6C = arg1->unk30.y;
return;
case 3:
arg1->unkE++;
var_f31 = arg1->unkE / (REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
arg1->unkC = arg1->unkE = 0;
lbl_1_bss_74++;
Hu3DMotionShiftSet(*arg0->model, *arg0->motion, 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
var_f30 = 90.0f - lbl_1_data_0[arg1->unk60];
arg1->unk30.y = fn_1_927C(arg1->unk6C, var_f30, var_f31);
return;
case 4:
if (++arg1->unkC > (REFRESH_RATE / 4)) {
lbl_1_bss_74++;
}
break;
case 5:
if (lbl_1_data_1DA < 0) {
fn_1_181C();
lbl_1_data_1DA++;
return;
}
if (lbl_1_data_1DA == 0) {
if (fn_1_1890() == 0) {
lbl_1_data_1DA++;
return;
}
}
else {
lbl_1_bss_74 = 0;
lbl_1_data_250 = 70.0f;
arg1->unk48 = 0;
arg1->unkC = arg1->unkE = 0;
arg1->unk68 = lbl_1_data_0[arg1->unk60];
arg1->unk6C = 0.0f;
arg1->unk60 = 0;
fn_1_D24C(arg1, arg1->unk30.y, arg1->unk30.y);
fn_1_F4D4(arg1, 15, 3);
fn_1_1768();
}
break;
}
}
void fn_1_C1D4(omObjData *arg0, unkObjStruct *arg1)
{
s16 sp12[5];
s16 sp8[5];
f32 var_f28;
f32 var_f29;
f32 var_f30;
f32 var_f31;
s16 temp_r0;
s16 temp_r0_2;
s16 temp_r3;
s16 var_r29;
s16 var_r28;
s16 var_r30;
if (GWPlayerCfg[arg1->unk4].iscom != 0) {
HuPadStkX[arg1->unk6] = 0;
HuPadStkY[arg1->unk6] = 0;
HuPadTrigR[arg1->unk6] = 0;
HuPadBtn[arg1->unk6] = 0;
switch (GWPlayerCfg[arg1->unk4].diff) {
case 0:
var_f31 = 0.3f;
break;
case 1:
var_f31 = 0.3f;
break;
case 2:
var_f31 = 0.3f;
break;
case 3:
var_f31 = 0.3f;
break;
}
var_f31 += (0.1f * lbl_1_bss_70);
for (var_r30 = 0, var_r29 = 0; var_r30 < 5; var_r30++) {
if (lbl_1_data_14[var_r30] != 0) {
sp8[var_r29++] = var_r30;
}
}
var_r29--;
if (arg1->unk50 == -1) {
if (arg1->unk4C < var_f31) {
arg1->unk50 = fn_1_4E54(-1);
}
else {
for (var_r30 = 0, var_r28 = 0; var_r30 < 5; var_r30++) {
if ((var_r30 != fn_1_4E54(-1)) && (lbl_1_data_14[var_r30] != 0)) {
sp12[var_r28++] = var_r30;
}
}
var_r28--;
var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r28 + 1));
arg1->unk50 = sp12[var_r30];
}
var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r29 + 1));
arg1->unk52 = sp8[var_r30];
}
if (arg1->unk54 == 0) {
var_f30 = ABS(arg1->unk68 - lbl_1_data_0[arg1->unk50]);
if (var_f30 < 5.0f) {
HuPadTrigR[arg1->unk6] = 0x96;
HuPadBtn[arg1->unk6] = 0x20;
return;
}
if (arg1->unk68 < lbl_1_data_0[arg1->unk50]) {
HuPadStkX[arg1->unk6] = -0x2D;
return;
}
if (arg1->unk68 > lbl_1_data_0[arg1->unk50]) {
HuPadStkX[arg1->unk6] = 0x2D;
}
}
else {
var_f30 = ABS(arg1->unk68 - lbl_1_data_0[arg1->unk52]);
if (var_f30 < 5.0f) {
if (arg1->unk5A != 0) {
arg1->unk56++;
var_f31 = arg1->unk56 / (2.0f * REFRESH_RATE_F / 3.0f);
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
arg1->unk5A = 0;
arg1->unk54--;
var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r29 + 1));
arg1->unk52 = sp8[var_r30];
}
HuPadTrigR[arg1->unk6] = (u8)(arg1->unk58 * var_f31);
return;
}
if ((((rand8() << 8) | rand8()) % 101) < 0x32) {
arg1->unk56 = 0;
arg1->unk58 = ((((rand8() << 8) | rand8()) % 81) + 0x32);
arg1->unk5A = 1;
return;
}
arg1->unk54--;
var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r29 + 1));
arg1->unk52 = sp8[var_r30];
return;
}
if (arg1->unk68 < lbl_1_data_0[arg1->unk52]) {
HuPadStkX[arg1->unk6] = -0x2D;
return;
}
if (arg1->unk68 > lbl_1_data_0[arg1->unk52]) {
HuPadStkX[arg1->unk6] = 0x2D;
}
}
}
}
void fn_1_C944(omObjData *arg0, unkObjStruct *arg1)
{
s16 sp8;
f32 var_f26;
f32 var_f25;
f32 var_f28;
f32 temp_f27;
f32 var_f29;
f32 var_f30;
f32 var_f31;
s16 var_r28;
s16 var_r30;
s16 var_r29;
if (fn_1_17CC() < -1) {
fn_1_1708();
HuPadStkX[arg1->unk6] = 0;
HuPadStkY[arg1->unk6] = 0;
HuPadTrigR[arg1->unk6] = 0x96;
HuPadBtn[arg1->unk6] = 0x20;
}
else {
var_r29 = HuPadStkX[arg1->unk6];
sp8 = HuPadStkY[arg1->unk6];
}
if ((arg1->unk48 & 8) == 0) {
var_r30 = -1;
if (ABS(var_r29) < 7) {
var_r30 = fn_1_CFAC(arg1, 0);
}
else {
if (var_r29 > 0) {
arg1->unk48 = arg1->unk48 & 0xFFFFFFFD;
arg1->unk48 = arg1->unk48 | 1;
}
else {
arg1->unk48 = arg1->unk48 & 0xFFFFFFFE;
arg1->unk48 = arg1->unk48 | 2;
}
var_r30 = fn_1_CFAC(arg1, 1);
if (var_r30 >= 0x64) {
var_r30 -= 0x64;
arg1->unk4A = var_r30;
arg1->unk48 = arg1->unk48 & 0xFFFFFFFC;
}
}
if ((arg1->unk48 & 1) != 0) {
arg1->unk68 -= REFRESH_RATE_F / 60.0f;
if ((var_r30 != -1) && (lbl_1_data_0[var_r30] > arg1->unk68)) {
arg1->unk68 = lbl_1_data_0[var_r30];
arg1->unk4A = var_r30;
arg1->unk48 = arg1->unk48 & 0xFFFFFFFE;
}
}
else if ((arg1->unk48 & 2) != 0) {
arg1->unk68 += REFRESH_RATE_F / 60.0f;
if ((var_r30 != -1) && (lbl_1_data_0[var_r30] < arg1->unk68)) {
arg1->unk68 = lbl_1_data_0[var_r30];
arg1->unk4A = var_r30;
arg1->unk48 = arg1->unk48 & 0xFFFFFFFD;
}
}
arg1->unk24 = arg1->unk18;
arg1->unk18.x = (arg1->unk5C * cosd(arg1->unk68));
arg1->unk18.z = (arg1->unk5C * sind(arg1->unk68));
if ((arg1->unk48 & 3) != 0) {
arg1->unk48 = arg1->unk48 & ~4;
var_f26 = (arg1->unk18.x - arg1->unk24.x);
var_f25 = (arg1->unk18.z - arg1->unk24.z);
var_f29 = atan2d(var_f26, var_f25);
if (var_f29 < 0.0f) {
var_f29 += 360.0f;
}
fn_1_D24C(arg1, arg1->unk30.y, var_f29);
}
else {
arg1->unk48 |= 4;
var_f29 = 90.0f - lbl_1_data_0[arg1->unk4A];
fn_1_D24C(arg1, arg1->unk30.y, var_f29);
}
arg1->unkC++;
var_f28 = (f32)arg1->unkC / arg1->unkE;
if (arg1->unkC >= arg1->unkE) {
arg1->unkC = arg1->unkE;
var_f28 = 1.0f;
if ((arg1->unk48 & 4) != 0) {
fn_1_ED88(arg0, 0, HU3D_MOTATTR_LOOP);
}
else {
fn_1_ED88(arg0, 2, HU3D_MOTATTR_LOOP);
}
}
else {
fn_1_ED88(arg0, 2, HU3D_MOTATTR_LOOP);
}
if ((arg1->unk48 & 4) != 0) {
arg1->unk30.y = fn_1_927C(arg1->unk6C, arg1->unk70, var_f28);
return;
}
var_f31 = arg1->unk6C;
temp_f27 = arg1->unk70;
if ((arg1->unk48 & 1) != 0) {
if (var_f31 > temp_f27) {
var_f31 -= 360.0f;
}
}
else if (((arg1->unk48 & 2) != 0) && (var_f31 < temp_f27)) {
var_f31 += 360.0f;
}
var_f30 = var_f31 + (var_f28 * (temp_f27 - var_f31));
if (var_f30 < 0.0f) {
var_f30 += 360.0f;
}
else {
if (var_f30 >= 360.0f) {
var_f30 -= 360.0f;
}
}
arg1->unk30.y = var_f30;
}
}
s16 fn_1_CFAC(unkObjStruct *arg0, u8 arg1)
{
f32 var_f31;
s16 var_r30;
s16 var_r31;
var_f31 = 999.0f;
var_r30 = -1;
if ((arg0->unk48 & 1) != 0) {
for (var_r31 = 0; var_r31 < 5; var_r31++) {
if (lbl_1_data_14[var_r31] != 0) {
if (arg1 == 0) {
if (lbl_1_data_0[var_r31] > arg0->unk68) {
continue;
}
}
else if (lbl_1_data_0[var_r31] >= arg0->unk68) {
continue;
}
if (var_f31 > (arg0->unk68 - lbl_1_data_0[var_r31])) {
var_r30 = var_r31;
var_f31 = arg0->unk68 - lbl_1_data_0[var_r31];
}
}
}
}
else if ((arg0->unk48 & 2) != 0) {
for (var_r31 = 0; var_r31 < 5; var_r31++) {
if (lbl_1_data_14[var_r31] != 0) {
if (arg1 == 0) {
if (lbl_1_data_0[var_r31] < arg0->unk68) {
continue;
}
}
else if (lbl_1_data_0[var_r31] <= arg0->unk68) {
continue;
}
if (var_f31 > (lbl_1_data_0[var_r31] - arg0->unk68)) {
var_r30 = var_r31;
var_f31 = lbl_1_data_0[var_r31] - arg0->unk68;
}
}
}
}
if ((var_r30 == -1) && (arg1 != 0)) {
for (var_r31 = 0; var_r31 < 5; var_r31++) {
if ((lbl_1_data_14[var_r31] != 0) && (arg0->unk68 == lbl_1_data_0[var_r31])) {
var_r30 = var_r31 + 0x64;
}
}
}
return var_r30;
}
void fn_1_D24C(unkObjStruct *arg0, f32 arg1, f32 arg2)
{
f32 var_f28;
f32 var_f29;
f32 var_f30;
f32 var_f31;
var_f28 = REFRESH_RATE_F / 6.0f;
arg0->unk6C = arg1;
arg0->unk70 = arg2;
var_f31 = ABS(arg1 - arg2);
if (var_f31 > 180.0f) {
var_f31 -= 360.0f;
}
var_f31 = ABS(var_f31);
arg0->unkC = 0;
arg0->unkE = ((var_f28 / 90.0f) * var_f31);
}
void fn_1_D34C(omObjData *arg0, unkObjStruct *arg1)
{
ModelData *temp_r30;
f32 temp_f28;
f32 temp_f29;
f32 temp_f30;
f32 var_f31;
f32 var_f26;
temp_r30 = &Hu3DData[arg0->model[0]];
temp_f29 = 7.0f;
temp_f28 = Hu3DMotionMaxTimeGet(arg0->model[0]) - temp_f29;
temp_f30 = HuPadTrigR[arg1->unk6];
if ((temp_r30->unk_0C == -1) && (temp_r30->unk_08 == arg0->motion[0]) && ((arg1->unk48 & 8) == 0) && (temp_f30 > 10.0f)) {
arg1->unk48 |= 8;
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[3], 0.0f, 7.0f, HU3D_MOTATTR_NONE);
}
if ((arg1->unk48 & 8) != 0) {
if (temp_f30 <= 10.0f) {
fn_1_4E00(arg1->unk4A, -1.0f);
arg1->unk48 &= ~8;
temp_r30->unk_68 = 1.0f;
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[0], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
else if (temp_f30 > 10.0f) {
if ((HuPadBtn[arg1->unk6] & 0x20) != 0) {
arg1->unk60 = 0;
arg1->unk68 = temp_f30;
arg1->unk6C = 0.0f;
arg1->unk48 = 0;
lbl_1_data_14[arg1->unk4A] = 0;
if (fn_1_17CC() < (4.5f * REFRESH_RATE)) {
fn_1_1708();
}
fn_1_F4D4(arg1, 15, 4);
}
if (temp_r30->unk_0C == -1) {
temp_r30->unk_68 = 0.0f;
var_f31 = 0.006666667f * (temp_f30 - 10.0f);
if (var_f31 > 0.8f) {
var_f31 = 0.8f;
}
var_f31 = temp_f29 + (var_f31 * temp_f28);
var_f26 = ABS(temp_r30->unk_64 - var_f31);
if (var_f26 < 1.0f) {
temp_r30->unk_64 = var_f31;
}
if (temp_r30->unk_64 < var_f31) {
temp_r30->unk_64 += 1.0f;
}
else if (temp_r30->unk_64 > var_f31) {
temp_r30->unk_64 -= 1.0f;
}
var_f31 = (temp_r30->unk_64 - temp_f29) / temp_f28;
fn_1_4E00(arg1->unk4A, var_f31);
}
}
arg1->unk18.x = (410.0 * cosd(lbl_1_data_0[arg1->unk4A]));
arg1->unk18.z = (410.0 * sind(lbl_1_data_0[arg1->unk4A]));
}
}
void fn_1_D7F8(omObjData *arg0, unkObjStruct *arg1)
{
ModelData *temp_r29;
f32 temp_f28;
f32 temp_f29;
f32 var_f26;
f32 var_f30;
f32 var_f31;
temp_r29 = &Hu3DData[arg0->model[0]];
temp_f29 = 7.0f;
temp_f28 = Hu3DMotionMaxTimeGet(arg0->model[0]) - temp_f29;
switch (arg1->unk60) {
case 0:
if (temp_r29->unk_0C == -1) {
arg1->unk68 += 40.0f;
temp_r29->unk_68 = 0.0f;
var_f31 = 0.006666667f * (arg1->unk68 - 10.0f);
if (var_f31 > 0.8f) {
var_f31 = 0.8f;
}
var_f30 = 0.01f * (arg1->unk68 - 130.0f);
if (var_f30 > 0.19999999f) {
var_f30 = 0.19999999f;
}
else if (var_f30 < 0.0f) {
var_f30 = 0.0f;
}
var_f31 += var_f30;
var_f31 = var_f30 = temp_f29 + (var_f31 * temp_f28);
var_f26 = ABS(temp_r29->unk_64 - var_f31);
if (var_f26 < 1.0f) {
temp_r29->unk_64 = var_f31;
}
if (temp_r29->unk_64 < var_f31) {
temp_r29->unk_64 += 3.0f;
}
else if (temp_r29->unk_64 > var_f31) {
temp_r29->unk_64 -= 3.0f;
}
var_f31 = (temp_r29->unk_64 - temp_f29) / temp_f28;
fn_1_4E00(arg1->unk4A, var_f31);
arg1->unk18.x = (410.0 * cosd(lbl_1_data_0[arg1->unk4A]));
arg1->unk18.z = (410.0 * sind(lbl_1_data_0[arg1->unk4A]));
if (arg1->unk68 >= 150.0f) {
arg1->unk68 = 150.0f;
if (temp_r29->unk_64 == var_f30) {
arg1->unkC = 0;
arg1->unk68 = arg1->unk30.y;
arg1->unk6C = 180.0f + arg1->unk30.y;
if (arg1->unk6C >= 360.0f) {
arg1->unk6C -= 360.0f;
}
arg1->unk60++;
HuAudFXPlay(0x70B);
}
}
}
break;
case 1:
if (++arg1->unkC > (REFRESH_RATE / 6)) {
arg1->unkC = 0;
Hu3DMotionSpeedSet(arg0->model[0], 2.0f);
if ((arg1->unk6C - arg1->unk68) > 0.0f) {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[7], 64.0f, 7.0f, HU3D_MOTATTR_NONE);
}
else {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[7], 4.0f, 7.0f, HU3D_MOTATTR_NONE);
}
Hu3DMotionShiftSpeedSet(arg0->model[0], 2.0f);
arg1->unk60++;
}
break;
case 2:
arg1->unkC++;
var_f31 = arg1->unkC / (0.5f * REFRESH_RATE_F);
arg1->unk18.x = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * cosd(lbl_1_data_0[arg1->unk4A]));
arg1->unk18.z = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * sind(lbl_1_data_0[arg1->unk4A]));
if (var_f31 >= 1.0f) {
arg1->unkC = 0;
var_f31 = 1.0f;
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[0], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
arg1->unk60++;
}
else if (((arg1->unk6C - arg1->unk68) < 0.0f) && (Hu3DMotionShiftIDGet(arg0->model[0]) < 0)) {
if (Hu3DMotionTimeGet(arg0->model[0]) >= 60.0f) {
Hu3DMotionSpeedSet(arg0->model[0], 0.0f);
}
}
arg1->unk30.y = fn_1_927C(arg1->unk68, arg1->unk6C, var_f31);
break;
case 3:
if (++arg1->unkC > (s32)REFRESH_RATE_F) {
if (fn_1_4E54(arg1->unk4A) == 0) {
fn_1_4EEC(7U, 3U);
}
else {
fn_1_4EEC(7U, 4U);
}
arg1->unkC = 0;
arg1->unk60++;
}
break;
case 4:
if (fn_1_4EA8(0x100U) != 0) {
fn_1_4EEC(0x100U, 0U);
if (fn_1_4E54(arg1->unk4A) == 0) {
fn_1_F4D4(arg1, 15, 5);
}
else {
fn_1_F4D4(arg1, 15, 6);
}
arg1->unkC = arg1->unkE = 0;
arg1->unk60 = arg1->unk62 = 0;
arg1->unk68 = arg1->unk6C = 0.0f;
}
break;
}
if (fn_1_17F4() >= 0) {
if (fn_1_17CC() < (4.5f * REFRESH_RATE)) {
fn_1_1708();
return;
}
fn_1_16D8();
}
}
void fn_1_E034(omObjData *arg0, unkObjStruct *arg1)
{
ModelData *temp_r27;
f32 var_f28;
f32 var_f29;
f32 var_f30;
f32 var_f31;
s16 var_r28;
s16 var_r29;
temp_r27 = &Hu3DData[arg0->model[0]];
switch (arg1->unk60) {
case 0:
lbl_1_bss_84 = lbl_1_data_0[arg1->unk4A];
#if VERSION_NTSC
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[4], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
#else
Hu3DMotionSet(arg0->model[0], arg0->motion[4]);
#endif
HuAudCharVoicePlay(arg1->unk8, 0x125);
arg1->unk60++;
break;
case 1:
if (temp_r27->unk_64 >= (Hu3DMotionMaxTimeGet(arg0->model[0]) - 1.0f)) {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[2], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
arg1->unkC = arg1->unkE = 0;
arg1->unk68 = arg1->unk30.y;
for (var_r29 = 0, var_r28 = -1; var_r29 < 5; var_r29++) {
if (lbl_1_data_14[var_r29] != 0) {
var_r28++;
}
}
if (var_r28 == 0) {
lbl_1_bss_70++;
fn_1_4EEC(0x18, 0x18);
HuAudFXPlay(0x70E);
}
arg1->unk60++;
}
break;
case 2:
lbl_1_bss_84 += REFRESH_RATE_F / 60.0f;
if (lbl_1_bss_84 >= 135.0f) {
lbl_1_bss_84 = 135.0f;
arg1->unkE = arg1->unk10 = 0;
fn_1_F228();
arg1->unk60++;
}
arg1->unk24 = arg1->unk18;
arg1->unk18.x = (arg1->unk5C * cosd(lbl_1_bss_84));
arg1->unk18.z = (arg1->unk5C * sind(lbl_1_bss_84));
var_f29 = (arg1->unk18.x - arg1->unk24.x);
var_f28 = (arg1->unk18.z - arg1->unk24.z);
var_f30 = atan2d(var_f29, var_f28);
if (var_f30 < 0.0f) {
var_f30 += 360.0f;
}
arg1->unkC++;
var_f31 = arg1->unkC / (REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
}
arg1->unk30.y = fn_1_927C(arg1->unk68, var_f30, var_f31);
arg1->unk6C = arg1->unk30.y;
break;
case 3:
arg1->unkE++;
var_f31 = arg1->unkE / (REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
}
var_f30 = 315.0f;
arg1->unk30.y = arg1->unk6C + (var_f31 * (var_f30 - arg1->unk6C));
arg1->unk10++;
var_f31 = arg1->unk10 / (5.0f * REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
arg1->unkC = arg1->unkE = arg1->unk10 = 0;
arg1->unk68 = arg1->unk30.y;
arg1->unk60++;
}
var_f29 = arg1->unk5C + ((700.0f - arg1->unk5C) * var_f31);
arg1->unk18.x = var_f29 * cosd(135);
arg1->unk18.z = var_f29 * sind(135);
var_f29 = 0.3f;
var_f28 = 0.6f;
if (var_f31 >= var_f29) {
var_f31 -= var_f29;
var_f31 *= (1.0f / var_f28);
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
}
arg1->unk18.y = 150.0f * (1.0f - var_f31);
}
break;
case 4:
lbl_1_bss_84 -= REFRESH_RATE_F / 120;
if (lbl_1_bss_84 <= 110.0f) {
lbl_1_bss_84 = 110.0f;
arg1->unk60 = 0;
arg1->unkC = 0;
arg1->unkE = (3 - lbl_1_data_1D8) * (s32)(0.5f * REFRESH_RATE_F);
arg1->unk14 = 0;
arg1->unk3C.y = 90.0f;
fn_1_F4D4(arg1, 15, 1);
}
arg1->unk24 = arg1->unk18;
arg1->unk18.x = (700.0 * cosd(lbl_1_bss_84));
arg1->unk18.z = (700.0 * sind(lbl_1_bss_84));
var_f29 = (arg1->unk18.x - arg1->unk24.x);
var_f28 = (arg1->unk18.z - arg1->unk24.z);
var_f30 = atan2d(var_f29, var_f28);
if (var_f30 < 0.0f) {
var_f30 += 360.0f;
}
arg1->unk10++;
var_f31 = arg1->unk10 / (REFRESH_RATE_F / 6.0f);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
}
arg1->unk30.y = fn_1_927C(arg1->unk68, var_f30, var_f31);
break;
}
}
u8 fn_1_E8AC(omObjData *arg0, unkObjStruct *arg1)
{
ModelData *temp_r29;
f32 var_f31;
s32 temp_r28;
s16 temp_r27;
temp_r29 = &Hu3DData[arg0->model[0]];
switch (arg1->unk60) {
case 0:
lbl_1_bss_70 = 0;
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[6], 0.0f, 7.0f, HU3D_MOTATTR_NONE);
HuAudCharVoicePlay(arg1->unk8, 0x12E);
arg1->unk60++;
break;
case 1:
if (fn_1_4EA8(7U) == 5) {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[0], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
arg1->unkC = 0;
arg1->unk68 = arg1->unk30.y;
var_f31 = lbl_1_data_0[arg1->unk4A];
lbl_1_bss_78 = arg1->unk18;
if ((arg1->unk4A == 4) || (arg1->unk4A == 3)) {
arg1->unk24.x = (840.0000610351563 * cosd(var_f31));
arg1->unk24.y = 0.0f;
arg1->unk24.z = (840.0000610351563 * sind(var_f31));
}
else {
arg1->unk24.x = (1050.0 * cosd(var_f31));
arg1->unk24.y = 0.0f;
arg1->unk24.z = (1050.0 * sind(var_f31));
}
arg1->unk30.y = 0.0f;
PSMTXRotRad(temp_r29->unk_F0, 0x59, 0.017453292f * arg1->unk68);
arg1->unk60++;
if (lbl_1_data_1D8 == 0) {
fn_1_18E0();
}
}
break;
case 2:
arg1->unkC++;
arg1->unk68 += 40.0f;
var_f31 = arg1->unkC / (1.5f * REFRESH_RATE_F);
if (var_f31 >= 1.0f) {
var_f31 = 1.0f;
arg1->unk60++;
}
arg1->unk18.x = lbl_1_bss_78.x + (var_f31 * (arg1->unk24.x - lbl_1_bss_78.x));
arg1->unk18.y = fn_1_93D0(lbl_1_bss_78.y, 1400.0f + lbl_1_bss_78.y, 0.0f, var_f31);
arg1->unk18.z = lbl_1_bss_78.z + (var_f31 * (arg1->unk24.z - lbl_1_bss_78.x));
arg1->unk30.x = 180.0f * var_f31;
PSMTXRotRad(temp_r29->unk_F0, 0x59, 0.017453292f * arg1->unk68);
break;
case 3:
fn_1_F4D4(arg1, 15, 8);
Hu3DModelAttrSet(arg0->model[0], HU3D_ATTR_DISPOFF);
temp_r27 = lbl_1_data_1D8 + 1;
temp_r28 = arg1->unk4;
GWPlayerCoinWinSet(temp_r28, temp_r27);
lbl_1_data_1D8 -= 1;
return 1;
}
return 0;
}
s32 fn_1_ED88(omObjData *arg0, s16 arg1, u32 arg2)
{
s16 var_r28;
s16 var_r29;
var_r28 = Hu3DData[arg0->model[0]].unk_08;
var_r29 = Hu3DData[arg0->model[0]].unk_0C;
if ((var_r29 != arg0->motion[arg1]) && (var_r28 != arg0->motion[arg1])) {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[arg1], 0.0f, 7.0f, arg2);
}
}
void fn_1_EE78(void)
{
s16 var_r31;
unkObjStruct *var_r30;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
var_r30 = (unkObjStruct *)lbl_1_bss_C0[var_r31]->data;
if (fn_1_F4C0(var_r30, 15) == 8) {
Hu3DMotionShiftSet(lbl_1_bss_C0[var_r31]->model[0], lbl_1_bss_C0[var_r31]->motion[6], 0.0f, 7.0f, HU3D_MOTATTR_NONE);
}
}
}
void fn_1_EF50(void)
{
unkObjStruct *var_r30;
s16 var_r28;
s16 var_r29;
s16 var_r31;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
var_r30 = (unkObjStruct *)lbl_1_bss_C0[var_r31]->data;
if (fn_1_F4C0(var_r30, 15) == 8) {
var_r28 = Hu3DData[lbl_1_bss_C0[var_r31]->model[0]].unk_08;
var_r29 = Hu3DData[lbl_1_bss_C0[var_r31]->model[0]].unk_0C;
if ((var_r29 != lbl_1_bss_C0[var_r31]->motion[0]) && (var_r28 != lbl_1_bss_C0[var_r31]->motion[0])) {
Hu3DMotionShiftSet(lbl_1_bss_C0[var_r31]->model[0], lbl_1_bss_C0[var_r31]->motion[0], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
}
}
}
s16 fn_1_F0FC(void)
{
s16 var_r31;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
if (lbl_1_bss_B8[var_r31] != -1) {
return lbl_1_bss_B8[var_r31];
}
}
return 0;
}
void fn_1_F168(void)
{
omObjData *temp_r31;
s16 var_r30;
unkObjStruct *var_r29;
for (var_r30 = 0; var_r30 < 4; var_r30++) {
temp_r31 = lbl_1_bss_C0[lbl_1_bss_B8[var_r30]];
var_r29 = (unkObjStruct *)temp_r31->data;
fn_1_F4D4(var_r29, 15, 1);
Hu3DMotionShiftSet(temp_r31->model[0], temp_r31->motion[2], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
}
void fn_1_F228(void)
{
omObjData *temp_r30;
s16 temp_r0;
s16 var_r29;
s32 temp_r27;
s32 temp_r27_2;
s32 var_r28;
u32 temp_r0_2;
u32 temp_r3;
u32 temp_r3_2;
unkObjStruct *temp_r31;
for (var_r29 = 0; var_r29 < 4; var_r29++) {
if (lbl_1_bss_B8[var_r29] != -1) {
temp_r30 = lbl_1_bss_C0[lbl_1_bss_B8[var_r29]];
temp_r31 = (unkObjStruct *)temp_r30->data;
if (temp_r31->unkA == 0) {
switch (GWPlayerCfg[temp_r31->unk4].diff) {
case 0:
var_r28 = 3;
break;
case 1:
var_r28 = 2;
break;
case 2:
var_r28 = 1;
break;
case 3:
var_r28 = 0;
break;
}
temp_r31->unk4C = ((((rand8() << 8) | rand8()) % 256) / 255.0f);
temp_r31->unk54 = (((rand8() << 8) | rand8()) % (s16)(var_r28 + 1));
temp_r31->unk50 = -1;
temp_r31->unk56 = temp_r31->unk5A = 0;
temp_r31->unkA = -1;
temp_r31->unkC = temp_r31->unkE = 0;
fn_1_F4D4(temp_r31, 15, 2);
}
else if (temp_r31->unkA == -1) {
temp_r31->unkA = lbl_1_data_1D8;
}
else {
temp_r31->unkA--;
temp_r31->unk24 = temp_r31->unk18;
temp_r31->unkC = 0;
temp_r31->unkE = (s32)(0.5f * REFRESH_RATE_F);
temp_r31->unk14 = 0;
fn_1_F4D4(temp_r31, 15, 1);
}
if (temp_r30->motion[2] != Hu3DData[temp_r30->model[0]].unk_08) {
Hu3DMotionShiftSet(temp_r30->model[0], temp_r30->motion[2], 0.0f, 7.0f, HU3D_MOTATTR_LOOP);
}
}
}
}
u16 fn_1_F4C0(unkObjStruct *arg0, u16 arg1)
{
return arg0->unk0 & arg1;
}
void fn_1_F4D4(unkObjStruct *arg0, u16 arg1, u16 arg2)
{
arg0->unk0 &= ~arg1;
arg0->unk0 |= arg2;
}
s32 fn_1_F4FC(s32 arg0)
{
return lbl_1_bss_B8[arg0];
}