marioparty4/src/REL/m420dll/player.c
2024-11-04 00:05:52 +01:00

938 lines
28 KiB
C

#include "ext_math.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/esprite.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/wipe.h"
#include "REL/m420dll.h"
typedef void (*M420DllUnkFunc)(M420DllPlayerStruct *);
typedef struct M420DllUnkStruct2 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ s32 unk_1C;
} M420DllUnkStruct2; /* size = 0x20 */
void fn_1_1F14(void);
void fn_1_1F54(M420DllPlayerStruct *arg0);
void fn_1_1F94(M420DllPlayerStruct *arg0);
void fn_1_200C(M420DllPlayerStruct *arg0);
void fn_1_20EC(M420DllPlayerStruct *arg0);
void fn_1_211C(M420DllPlayerStruct *arg0);
void fn_1_2174(M420DllPlayerStruct *arg0);
void fn_1_2260(M420DllPlayerStruct *arg0);
void fn_1_22CC(M420DllPlayerStruct *arg0);
void fn_1_276C(M420DllPlayerStruct *arg0);
void fn_1_2CE0(M420DllPlayerStruct *arg0);
void fn_1_2D7C(M420DllPlayerStruct *arg0);
void fn_1_2EA8(M420DllPlayerStruct *arg0);
void fn_1_3098(M420DllPlayerStruct *arg0);
void fn_1_326C(M420DllPlayerStruct *arg0);
void fn_1_3450(M420DllPlayerStruct *arg0);
s32 fn_1_34AC(M420DllPlayerStruct *arg0);
void fn_1_355C(M420DllPlayerStruct *arg0);
void fn_1_36E4(M420DllPlayerStruct *arg0);
void fn_1_374C(M420DllPlayerStruct *arg0);
void fn_1_378C(M420DllPlayerStruct *arg0);
void fn_1_3854(void);
void fn_1_3970(M420DllPlayerStruct *arg0);
void fn_1_3F94(M420DllPlayerStruct *arg0);
void fn_1_4294(M420DllPlayerStruct *arg0);
void fn_1_4574(M420DllPlayerStruct *arg0);
void fn_1_476C(M420DllPlayerStruct *arg0);
M420DllUnkStruct2 lbl_1_data_50[4] = {
{ 0x19, 0x01, 0x2A, 0x08, 0x2D, 0x10, 0x01, 0x01 },
{ 0x19, 0x01, 0x22, 0x06, 0x22, 0x0C, 0x01, 0x01 },
{ 0x19, 0x01, 0x1B, 0x05, 0x14, 0x0A, 0x01, 0x01 },
{ 0x19, 0x01, 0x14, 0x04, 0x0A, 0x08, 0x01, 0x01 },
};
// TODO MAKE_NUM
static const s32 lbl_1_rodata_F8[8][0xB] = {
{ 0x5F0000, 0x5F0017, 0x5F0018, 0x5F0068, 0x5F0069, 0x5F006A, 0x5F0035, 0x5F006B, 0x5F006E, 0x5F0049, 0x33001B },
{ 0x1A0000, 0x1A0017, 0x1A0018, 0x1A0068, 0x1A0069, 0x1A006A, 0x1A0035, 0x1A006B, 0x1A006E, 0x1A0049, 0x33001C },
{ 0x6D0000, 0x6D0017, 0x6D0018, 0x6D0068, 0x6D0069, 0x6D006A, 0x6D0035, 0x6D006B, 0x6D006E, 0x6D0049, 0x33001D },
{ 0x8A0000, 0x8A0017, 0x8A0018, 0x8A0068, 0x8A0069, 0x8A006A, 0x8A0035, 0x8A006B, 0x8A006E, 0x8A0049, 0x33001E },
{ 0x850000, 0x850017, 0x850018, 0x850068, 0x850069, 0x85006A, 0x850035, 0x85006B, 0x85006E, 0x850049, 0x33001F },
{ 0x110000, 0x110017, 0x110018, 0x110068, 0x110069, 0x11006A, 0x110035, 0x11006B, 0x11006E, 0x110049, 0x330020 },
{ 0x0D0000, 0x0D0017, 0x0D0018, 0x0D0068, 0x0D0069, 0x0D006A, 0x0D0035, 0x0D006B, 0x0D006E, 0x0D0049, 0x330021 },
{ 0x810000, 0x810017, 0x810018, 0x810068, 0x810069, 0x81006A, 0x810035, 0x81006B, 0x81006E, 0x810049, 0x330022 },
};
static const Vec lbl_1_rodata_258[4][2] = {
{ { -372.0f, 300.0f, -220.0f }, { 0.0f, 50.0f, 0.0f } },
{ { 435.0f, 300.0f, -260.0f }, { 0.0f, 140.0f, 0.0f } },
{ { 315.0f, 300.0f, -153.0f }, { 0.0f, 140.0f, 0.0f } },
{ { 195.0f, 300.0f, -46.0f }, { 0.0f, 140.0f, 0.0f } },
};
M420DllPlayerStruct *fn_1_1B8C(s32 arg0, s32 arg1)
{
M420DllPlayerStruct *var_r31;
s32 var_r30;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M420DllPlayerStruct), MEMORY_DEFAULT_NUM);
if (!var_r31) {
OSReport("M420PlayerCreate ERROR...\n");
return NULL;
}
var_r31->unk_04 = arg0;
var_r31->unk_4C = arg1;
var_r31->unk_08 = GWPlayerCfg[arg0].diff;
var_r31->unk_00_field0 = GWPlayerCfg[arg0].iscom;
var_r31->unk_0A = GWPlayerCfg[arg0].character;
var_r31->unk_0C = GWPlayerCfg[arg0].pad_idx;
var_r31->unk_10 = lbl_1_rodata_258[arg1][0];
var_r31->unk_1C = lbl_1_rodata_258[arg1][1];
var_r31->unk_48 = 0;
var_r31->unk_50 = 0;
var_r31->unk_00_field2 = 0;
var_r31->unk_00_field1 = 0;
var_r31->unk_E8 = NULL;
for (var_r30 = 0; var_r30 < 0xA; var_r30++) {
var_r31->unk_84[var_r30] = 7;
}
fn_1_1F54(var_r31);
fn_1_1F94(var_r31);
switch (arg1) {
case 0:
if (var_r31->unk_0A == 5) {
CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0xA]);
Hu3DMotionStartEndSet(var_r31->unk_AC, 0.0f, 1.0f);
Hu3DMotionTimeSet(var_r31->unk_AC, 0.0f);
}
else {
CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0]);
}
break;
case 1:
case 2:
case 3:
var_r31->unk_1C.y = 0.0f;
CharModelMotionSet(var_r31->unk_0A, var_r31->unk_AE[0]);
break;
default:
break;
}
CharModelMotionDataClose(var_r31->unk_0A);
fn_1_200C(var_r31);
var_r31->unk_40 = HuPrcChildCreate(fn_1_1F14, 0x64, 0x5000, 0, lbl_1_bss_4);
var_r31->unk_40->user_data = var_r31;
return var_r31;
}
void fn_1_1E14(M420DllPlayerStruct *arg0)
{
fn_1_2174(arg0);
fn_1_211C(arg0);
fn_1_20EC(arg0);
HuPrcKill(arg0->unk_40);
HuMemDirectFree(arg0);
}
void fn_1_1E64(M420DllPlayerStruct *arg0, s32 arg1, s32 arg2)
{
switch (arg1) {
case 0:
omVibrate(arg0->unk_04, arg2, 6, 6);
break;
case 1:
omVibrate(arg0->unk_04, arg2, 4, 2);
break;
case 2:
omVibrate(arg0->unk_04, arg2, 0xC, 0);
break;
}
}
M420DllUnkFunc lbl_1_data_EC[0xC] = {
fn_1_2260,
fn_1_22CC,
fn_1_2D7C,
fn_1_276C,
fn_1_2CE0,
fn_1_2EA8,
fn_1_2260,
fn_1_4574,
fn_1_476C,
fn_1_3F94,
fn_1_4294,
fn_1_3970,
};
void fn_1_1F14(void)
{
M420DllPlayerStruct *var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
lbl_1_data_EC[var_r31->unk_48](var_r31);
}
}
void fn_1_1F54(M420DllPlayerStruct *arg0)
{
arg0->unk_AC = CharModelCreate(arg0->unk_0A, 2);
Hu3DModelShadowSet(arg0->unk_AC);
}
void fn_1_1F94(M420DllPlayerStruct *arg0)
{
s32 var_r31;
for (var_r31 = 0; var_r31 < 0xB; var_r31++) {
arg0->unk_AE[var_r31] = CharModelMotionCreate(arg0->unk_0A, lbl_1_rodata_F8[arg0->unk_0A][var_r31]);
}
}
void fn_1_200C(M420DllPlayerStruct *arg0)
{
s32 var_r30;
for (var_r30 = 0; var_r30 <= 9; var_r30++) {
arg0->unk_C4[var_r30] = espEntry(0x330018, 0, 0);
espDispOff(arg0->unk_C4[var_r30]);
}
switch (arg0->unk_4C) {
case 0:
arg0->unk_D8 = espEntry(0x330019, 1, 0);
break;
case 1:
case 2:
case 3:
arg0->unk_D8 = espEntry(0x33001A, 1, 0);
break;
default:
break;
}
espDispOff(arg0->unk_D8);
espTPLvlSet(arg0->unk_D8, 0.8f);
}
void fn_1_20EC(M420DllPlayerStruct *arg0)
{
CharModelKill(arg0->unk_0A);
}
void fn_1_211C(M420DllPlayerStruct *arg0)
{
s32 var_r31;
for (var_r31 = 0; var_r31 < 0xB; var_r31++) {
CharModelMotionKill(arg0->unk_0A, arg0->unk_AE[var_r31]);
}
}
void fn_1_2174(M420DllPlayerStruct *arg0)
{
s32 var_r31;
for (var_r31 = 0; var_r31 < 0xB; var_r31++) {
espKill(arg0->unk_C4[var_r31]);
}
}
void fn_1_21C8(M420DllPlayerStruct *arg0, Vec *arg1, s32 arg2, s32 arg3)
{
arg0->unk_34 = *arg1;
arg0->unk_28 = arg0->unk_1C;
arg0->unk_DC = 0.0f;
arg0->unk_E0 = 1.0f / arg2;
arg0->unk_E4 = arg3;
arg0->unk_00_field2 = 1;
}
void fn_1_2260(M420DllPlayerStruct *arg0)
{
s32 var_r30;
s32 var_r29;
while (TRUE) {
for (var_r30 = 0; var_r30 < 1; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
}
#define WAITMODECHG(player, maxTime) \
do { \
s32 time; \
s32 mode; \
for (time = 0; time < maxTime; time++) { \
fn_1_355C(arg0); \
mode = arg0->unk_48; \
HuPrcVSleep(); \
if (arg0->unk_48 != mode) { \
return; \
} \
} \
} while (0)
void fn_1_22CC(M420DllPlayerStruct *arg0)
{
float var_f31;
float var_f30;
M420DllUnkStruct2 *var_r30;
s32 var_r29;
s32 var_r28;
s32 var_r26;
s32 var_r23;
s32 var_r21;
s32 var_r18;
var_r30 = &lbl_1_data_50[arg0->unk_08];
fn_1_3098(arg0);
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[8], 0.0f, 10.0f, 0x40000001);
arg0->unk_50 = 0;
arg0->unk_58 = var_r30->unk_00 + (fn_1_8944() % var_r30->unk_04);
while (arg0->unk_50 < 6) {
fn_1_326C(arg0);
do {
if (arg0->unk_00_field0 == 0) {
var_r29 = fn_1_34AC(arg0);
}
else if (arg0->unk_58 > 0) {
arg0->unk_58--;
var_r29 = 0;
}
else if ((fn_1_8944() % 30) != 0) {
var_r29 = 1;
arg0->unk_58 = (var_r30->unk_08 - (var_r30->unk_0C / 2)) + (fn_1_8944() % var_r30->unk_0C);
}
else {
var_r29 = 2;
arg0->unk_58 = (var_r30->unk_08 - (var_r30->unk_0C / 2)) + (fn_1_8944() % var_r30->unk_0C);
}
switch (var_r29) {
case 0:
WAITMODECHG(arg0, 1);
break;
case 1:
var_f31 = 5.0f * arg0->unk_50;
var_f30 = 5.0f + var_f31;
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]);
Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_PAUSE);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_LOOP);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_REV);
arg0->unk_5C[arg0->unk_50++] = 1;
HuAudFXPlay(0x5F4);
fn_1_60F0();
WAITMODECHG(arg0, 5);
break;
case 2:
if (arg0->unk_50 <= 0) {
WAITMODECHG(arg0, 1);
}
else {
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_PAUSE);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_LOOP);
Hu3DModelAttrSet(arg0->unk_AC, HU3D_MOTATTR_REV);
fn_1_63EC();
while (!Hu3DMotionEndCheck(arg0->unk_AC))
WAITMODECHG(arg0, 1);
for (var_r28 = 0; var_r28 < 0xA; var_r28++) {
arg0->unk_5C[var_r28] = 0;
}
arg0->unk_50 = 0;
var_f31 = 0.0f;
var_f30 = 0.0f;
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[5]);
Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_LOOP);
}
break;
default:
break;
}
} while (var_r29 == 0);
}
fn_1_326C(arg0);
WAITMODECHG(arg0, 5);
fn_1_3450(arg0);
arg0->unk_48 = 2;
}
void fn_1_276C(M420DllPlayerStruct *arg0)
{
s32 sp8[4];
float var_f31;
float var_f30;
s32 var_r30;
M420DllUnkStruct2 *var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
s32 var_r23;
s32 var_r22;
s32 var_r21;
s32 var_r20;
s32 var_r19;
s32 var_r18;
s32 var_r17;
var_r29 = &lbl_1_data_50[arg0->unk_08];
if (arg0->unk_4C == 1) {
HuAudFXPlay(0x5F1);
fn_1_669C(1);
fn_1_6554();
WAITMODECHG(arg0, 15);
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0);
WAITMODECHG(arg0, 6);
fn_1_669C(0);
fn_1_36E4(arg0);
HuAudFXPlay(0x5F2);
}
fn_1_3098(arg0);
arg0->unk_50 = 0;
arg0->unk_58 = var_r29->unk_10 + (fn_1_8944() % var_r29->unk_14);
while (arg0->unk_50 < 1) {
fn_1_326C(arg0);
do {
if (arg0->unk_00_field0 == 0) {
var_r30 = fn_1_34AC(arg0);
}
else if (arg0->unk_58 > 0) {
arg0->unk_58--;
var_r30 = 0;
}
else if (fn_1_8944() % 30) {
var_r30 = 1;
}
else {
var_r30 = 2;
}
switch (var_r30) {
case 0:
WAITMODECHG(arg0, 1);
break;
case 1:
if (arg0->unk_4C != 1) {
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[7], 0.0f, 6.0f, 0);
WAITMODECHG(arg0, 6);
fn_1_374C(arg0->unk_E8);
fn_1_36E4(arg0);
HuAudFXPlay(0x5F2);
}
arg0->unk_5C[arg0->unk_50++] = 1;
switch (arg0->unk_4C) {
case 1:
case 2:
var_f31 = 0.0f;
var_f30 = 34.0f;
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]);
Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DMotionSpeedSet(arg0->unk_AC, 2.0f);
break;
case 3:
arg0->unk_48 = 5;
return;
}
break;
case 2:
switch (arg0->unk_4C) {
case 1:
var_f31 = 0.0f;
var_f30 = 10.0f;
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]);
Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_PAUSE);
WAITMODECHG(arg0, 30);
var_f31 = 60.0f;
var_f30 = 70.0f;
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[4]);
Hu3DMotionStartEndSet(arg0->unk_AC, var_f31, var_f30);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_PAUSE);
WAITMODECHG(arg0, 30);
break;
case 2:
case 3:
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[9], 0.0f, 2.0f, 0);
WAITMODECHG(arg0, 60);
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0);
break;
}
break;
}
} while (var_r30 == 0);
}
fn_1_326C(arg0);
WAITMODECHG(arg0, 18);
fn_1_3450(arg0);
arg0->unk_48 = 6;
}
void fn_1_2CE0(M420DllPlayerStruct *arg0)
{
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001);
WAITMODECHG(arg0, 35);
arg0->unk_48 = 0;
}
void fn_1_2D7C(M420DllPlayerStruct *arg0)
{
float var_f31;
float var_f30;
s32 var_r30;
s32 var_r29;
var_f30 = 0.0f;
var_f31 = 30.0f;
Hu3DMotionStartEndSet(arg0->unk_AC, var_f30, var_f31);
Hu3DMotionTimeSet(arg0->unk_AC, var_f31);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_PAUSE);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_LOOP);
Hu3DModelAttrSet(arg0->unk_AC, HU3D_MOTATTR_REV);
HuAudFXPlay(0x5F6);
fn_1_6268();
fn_1_5AA8(0, 22.5f);
fn_1_1E64(arg0, 1, 0x1E);
// fn_1_2260?
for (var_r30 = 0; var_r30 < 0x1E; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
arg0->unk_48 = 0;
}
void fn_1_2EA8(M420DllPlayerStruct *arg0)
{
s16 var_r30;
s32 var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
s32 var_r23;
s32 var_r22;
fn_1_326C(arg0);
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[3], 0.0f, 1.0f, 0);
var_r30 = fn_1_6660();
Hu3DModelAttrReset(var_r30, HU3D_MOTATTR_PAUSE);
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP);
Hu3DMotionTimeSet(var_r30, 0.0f);
{
s32 var_r30;
s32 var_r29;
for (var_r30 = 0; var_r30 < 24; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
HuAudFXPlay(0x5F7);
fn_1_636C();
fn_1_1E64(arg0, 1, 0x1E);
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_PAUSE);
fn_1_5AA8(1, 22.5f);
{
s32 var_r30;
s32 var_r29;
for (var_r30 = 0; var_r30 < 20; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
HuAudFXPlay(0x5F8);
fn_1_3450(arg0);
fn_1_378C(arg0);
{
s32 var_r30;
s32 var_r29;
for (var_r30 = 0; var_r30 < 20; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 30.0f, 0x40000001);
{
s32 var_r30;
s32 var_r29;
for (var_r30 = 0; var_r30 < 25; var_r30++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
arg0->unk_48 = 6;
}
void fn_1_3098(M420DllPlayerStruct *arg0)
{
s32 var_r30;
s32 var_r29;
s32 var_r28;
for (var_r30 = 0; var_r30 < 0xA; var_r30++) {
arg0->unk_5C[var_r30] = 0;
}
arg0->unk_50 = 0;
switch (arg0->unk_4C) {
case 0:
for (var_r29 = 0; var_r29 < 6;) {
arg0->unk_84[var_r29] = fn_1_8944() % 7;
if (arg0->unk_84[var_r29] == 6) {
arg0->unk_84[var_r29] = 0;
}
if ((var_r29 <= 0) || (arg0->unk_84[var_r29] != arg0->unk_84[var_r29 - 1])) {
for (var_r30 = 0, var_r28 = 0; var_r30 < var_r29; var_r30++) {
if (arg0->unk_84[var_r29] == arg0->unk_84[var_r30]) {
var_r28++;
}
}
if (var_r28 < 2) {
var_r29++;
}
}
}
break;
case 1:
case 2:
case 3:
for (var_r30 = 0; var_r30 < 0xA; var_r30++) {
arg0->unk_84[1] = arg0->unk_84[0];
arg0->unk_84[0] = fn_1_8944() % 7;
if (arg0->unk_84[0] == 6) {
arg0->unk_84[0] = 0;
}
if (arg0->unk_84[0] != arg0->unk_84[1]) {
break;
}
}
break;
default:
break;
}
}
static const s32 lbl_1_rodata_2F8[4] = { 6, 1, 1, 1 };
void fn_1_326C(M420DllPlayerStruct *arg0)
{
Vec sp14;
Vec sp8;
s32 var_r30;
s16 var_r29;
s32 var_r28;
s32 var_r26;
sp14 = arg0->unk_10;
sp14.y += 300.0f;
Hu3D3Dto2D(&sp14, 1, &sp8);
var_r26 = arg0->unk_4C == 0 ? -6 : 0;
espPosSet(arg0->unk_D8, sp8.x + var_r26, 6.0f + sp8.y);
espDispOn(arg0->unk_D8);
var_r28 = lbl_1_rodata_2F8[arg0->unk_4C];
sp8.x -= (var_r28 / 2) * 0x1E;
for (var_r30 = 0; var_r30 < var_r28; var_r30++) {
var_r29 = arg0->unk_C4[var_r30];
if (arg0->unk_5C[var_r30] != 0) {
espBankSet(var_r29, arg0->unk_84[var_r30] + 7);
}
else {
espBankSet(var_r29, arg0->unk_84[var_r30]);
}
espPosSet(var_r29, sp8.x + var_r30 * 0x20, sp8.y);
espDispOn(var_r29);
}
}
void fn_1_3450(M420DllPlayerStruct *arg0)
{
s32 var_r31;
for (var_r31 = 0; var_r31 < 0xA; var_r31++) {
espDispOff(arg0->unk_C4[var_r31]);
}
espDispOff(arg0->unk_D8);
}
static const s32 lbl_1_rodata_30C[7] = { 0x100, 0x200, 0x40, 0x20, 0x800, 0x400, 0x10 };
s32 fn_1_34AC(M420DllPlayerStruct *arg0)
{
s32 var_r31;
u16 var_r30;
u16 var_r29;
var_r31 = 0;
var_r30 = HuPadBtnDown[arg0->unk_0C] & 0xF60;
var_r29 = lbl_1_rodata_30C[arg0->unk_84[arg0->unk_50]];
if (var_r30 != 0) {
var_r31 = 2;
}
if (((var_r30 & var_r29) != 0) && ((var_r30 & ~var_r29) == 0)) {
var_r31 = 1;
}
return var_r31;
}
void fn_1_355C(M420DllPlayerStruct *arg0)
{
float var_f31;
arg0 = HuPrcCurrentGet()->user_data;
Hu3DModelPosSet(arg0->unk_AC, arg0->unk_10.x, arg0->unk_10.y, arg0->unk_10.z);
if (arg0->unk_00_field2) {
switch (arg0->unk_E4) {
case 0:
var_f31 = arg0->unk_DC;
break;
case 1:
var_f31 = sind((90.0f * arg0->unk_DC));
var_f31 *= var_f31;
break;
}
arg0->unk_1C.x = arg0->unk_28.x + (var_f31 * (arg0->unk_34.x - arg0->unk_28.x));
arg0->unk_1C.y = arg0->unk_28.y + (var_f31 * (arg0->unk_34.y - arg0->unk_28.y));
arg0->unk_1C.z = arg0->unk_28.z + (var_f31 * (arg0->unk_34.z - arg0->unk_28.z));
if ((arg0->unk_DC += arg0->unk_E0) >= 1.0f) {
arg0->unk_1C = arg0->unk_34;
arg0->unk_00_field2 = 0;
}
}
Hu3DModelRotSet(arg0->unk_AC, arg0->unk_1C.x, arg0->unk_1C.y, arg0->unk_1C.z);
}
void fn_1_36E4(M420DllPlayerStruct *arg0)
{
Hu3DModelHookSet(arg0->unk_AC, "test11_tex_we-itemhook-r", fn_1_6660());
arg0->unk_00_field1 = 1;
fn_1_1E64(arg0, 1, 0x14);
}
void fn_1_374C(M420DllPlayerStruct *arg0)
{
Hu3DModelHookReset(arg0->unk_AC);
arg0->unk_00_field1 = 0;
}
void fn_1_378C(M420DllPlayerStruct *arg0)
{
Mtx sp20;
Vec sp14;
Vec sp8;
if (arg0->unk_00_field1) {
Hu3DModelObjMtxGet(arg0->unk_AC, "test11_tex_we-itemhook-r", sp20);
Hu3DModelHookObjReset(arg0->unk_AC, "test11_tex_we-itemhook-r");
Hu3DMtxTransGet(sp20, &sp14);
Hu3DMtxRotGet(sp20, &sp8);
Hu3DModelPosSetV(fn_1_6660(), &sp14);
Hu3DModelRotSetV(fn_1_6660(), &sp8);
}
HuPrcChildCreate(fn_1_3854, 0x64, 0x2000, 0, lbl_1_bss_4);
arg0->unk_00_field1 = 0;
}
char lbl_1_data_135[1] = { 0 };
void fn_1_3854(void)
{
Mtx sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
float var_f31;
s16 var_r31;
var_r31 = fn_1_6660();
Hu3DModelObjMtxGet(var_r31, lbl_1_data_135, sp2C);
Hu3DMtxRotGet(sp2C, &sp8);
Hu3DMtxTransGet(sp2C, &sp20);
var_f31 = 0.0f;
while (var_f31 < 1.0f) {
sp14.x = cosd((90.0f * var_f31));
sp14.y = sp14.z = sp14.x;
Hu3DModelScaleSet(var_r31, sp14.x, sp14.y, sp14.z);
var_f31 += 0.05f;
HuPrcVSleep();
}
fn_1_6728();
sp14.x = sp14.y = sp14.z = 1.0f;
Hu3DModelScaleSet(var_r31, sp14.x, sp14.y, sp14.z);
HuPrcEnd();
while (TRUE) {
HuPrcVSleep();
}
}
void fn_1_3970(M420DllPlayerStruct *arg0)
{
Vec sp38;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
if (arg0->unk_00_field1) {
fn_1_378C(arg0);
}
else if (arg0->unk_4C == 1) {
fn_1_378C(arg0);
}
fn_1_3450(arg0);
if (arg0->unk_4C == 0) {
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_PAUSE);
Hu3DModelAttrReset(arg0->unk_AC, HU3D_MOTATTR_LOOP);
Hu3DModelAttrSet(arg0->unk_AC, HU3D_MOTATTR_REV);
fn_1_63EC();
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[6], 0.0f, 32.0f, 0);
Hu3DMotionShiftStartEndSet(arg0->unk_AC, 0.0f, 59.0f);
sp38 = arg0->unk_1C;
sp38.y = 0.0f;
fn_1_21C8(arg0, &sp38, 60, 1);
}
for (var_r27 = 0; var_r27 < 0x3C; var_r27++) {
fn_1_355C(arg0);
var_r25 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r25) {
return;
}
}
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 16.0f, 0);
for (var_r26 = 0; var_r26 < 0x3C; var_r26++) {
fn_1_355C(arg0);
var_r24 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r24) {
return;
}
}
arg0->unk_48 = 0;
}
void fn_1_3F94(M420DllPlayerStruct *arg0)
{
Vec sp8;
s32 var_r29;
s32 var_r28;
if (arg0->unk_4C != 0) {
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[6]);
Hu3DMotionStartEndSet(arg0->unk_AC, 60.0f, 119.0f);
Hu3DMotionTimeSet(arg0->unk_AC, 60.0f);
sp8 = arg0->unk_1C;
sp8.y = lbl_1_rodata_258[arg0->unk_4C][1].y;
fn_1_21C8(arg0, &sp8, 60, 1);
while (arg0->unk_00_field2 != 0) {
for (var_r28 = 0; var_r28 < 1; var_r28++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 4.0f, 0);
}
arg0->unk_48 = 0;
}
void fn_1_4294(M420DllPlayerStruct *arg0)
{
Vec sp8;
s32 var_r29;
s32 var_r28;
if (arg0->unk_4C != 0) {
CharModelMotionSet(arg0->unk_0A, arg0->unk_AE[6]);
Hu3DMotionStartEndSet(arg0->unk_AC, 0.0f, 59.0f);
sp8 = arg0->unk_1C;
sp8.y = 0.0f;
fn_1_21C8(arg0, &sp8, 60, 1);
while (arg0->unk_00_field2 != 0) {
for (var_r28 = 0; var_r28 < 1; var_r28++) {
fn_1_355C(arg0);
var_r29 = arg0->unk_48;
HuPrcVSleep();
if (arg0->unk_48 != var_r29) {
return;
}
}
}
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[0], 0.0f, 8.0f, 0);
}
arg0->unk_48 = 0;
}
void fn_1_4574(M420DllPlayerStruct *arg0)
{
float var_f31;
M420DllPlayerStruct *var_r31;
s32 var_r29;
s32 var_r28;
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[1], 0.0f, 4.0f, 0);
fn_1_2260(arg0);
}
void fn_1_476C(M420DllPlayerStruct *arg0)
{
float var_f31;
M420DllPlayerStruct *var_r31;
s32 var_r29;
s32 var_r28;
CharModelMotionShiftSet(arg0->unk_0A, arg0->unk_AE[2], 0.0f, 4.0f, 0);
fn_1_2260(arg0);
}