marioparty4/src/REL/m410Dll/player.c
2025-04-14 03:54:06 +02:00

1135 lines
37 KiB
C

#include "ext_math.h"
#include "game/chrman.h"
#include "game/gamework_data.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "game/object.h"
#include "game/pad.h"
#include "game/sprite.h"
#include "REL/m410Dll.h"
#ifndef __MWERKS__
#include "game/esprite.h"
#endif
omObjData *lbl_1_bss_74;
AnimData *lbl_1_bss_70;
s32 lbl_1_bss_60[4];
char *lbl_1_data_140[] = { "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r",
"dmy-itemhook-r", "dmy-itemhook-r" };
char *lbl_1_data_16C[] = { "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r" };
s32 lbl_1_data_18C[] = {
DATA_MAKE_NUM(DATADIR_M410, 0),
DATA_MAKE_NUM(DATADIR_M410, 1),
DATA_MAKE_NUM(DATADIR_M410, 2),
DATA_MAKE_NUM(DATADIR_M410, 3),
DATA_MAKE_NUM(DATADIR_M410, 4),
DATA_MAKE_NUM(DATADIR_M410, 5),
DATA_MAKE_NUM(DATADIR_M410, 6),
DATA_MAKE_NUM(DATADIR_M410, 7),
};
u32 lbl_1_data_1AC[] = {
0,
DATA_MAKE_NUM(DATADIR_M410, 70),
DATA_MAKE_NUM(DATADIR_M410, 22),
DATA_MAKE_NUM(DATADIR_M410, 30),
DATA_MAKE_NUM(DATADIR_M410, 38),
DATA_MAKE_NUM(DATADIR_M410, 46),
DATA_MAKE_NUM(DATADIR_M410, 62),
DATA_MAKE_NUM(DATADIR_M410, 54),
DATA_MAKE_NUM(DATADIR_E3SETUP, 23),
DATA_MAKE_NUM(DATADIR_E3SETUP, 24),
};
UnkM410Struct10 lbl_1_data_1D4[] = {
{ 0.0f, 0.0f, 12.0f, HU3D_MOTATTR_LOOP },
{ 0.0f, 0.0f, 1.1999999f, HU3D_MOTATTR_NONE },
{ 0.0f, 0.0f, 12.0f, HU3D_MOTATTR_LOOP },
{ 0.0f, 0.0f, 6.0f, HU3D_MOTATTR_NONE },
{ 6.0f, 0.0f, 4.7999997f, HU3D_MOTATTR_NONE },
{ 0.0f, 0.0f, 1.1999999f, HU3D_MOTATTR_NONE },
{ 0.0f, 0.0f, 1.1999999f, HU3D_MOTATTR_NONE },
{ 0.0f, 0.0f, 1.1999999f, HU3D_MOTATTR_NONE },
{ 0.0f, 0.0f, 12.0f, HU3D_MOTATTR_NONE },
{ 0.0f, 0.0f, 12.0f, HU3D_MOTATTR_NONE },
};
s32 lbl_1_data_274[] = {
DATA_MAKE_NUM(DATADIR_MGCONST, 0),
DATA_MAKE_NUM(DATADIR_MGCONST, 1),
DATA_MAKE_NUM(DATADIR_MGCONST, 2),
DATA_MAKE_NUM(DATADIR_MGCONST, 3),
DATA_MAKE_NUM(DATADIR_MGCONST, 4),
DATA_MAKE_NUM(DATADIR_MGCONST, 5),
DATA_MAKE_NUM(DATADIR_MGCONST, 6),
DATA_MAKE_NUM(DATADIR_MGCONST, 7),
};
GXColor lbl_1_data_294[] = {
{ 102, 0, 0, 255 },
{ 0, 0, 102, 255 },
{ 102, 0, 91, 255 },
{ 0, 102, 0, 255 },
{ 66, 0, 76, 255 },
{ 71, 40, 0, 255 },
{ 102, 102, 0, 255 },
{ 0, 0, 0, 255 },
};
void fn_1_80A0(omObjData *object);
void fn_1_8414(omObjData *object);
void fn_1_8678(omObjData *object);
void fn_1_88D8(omObjData *object);
void fn_1_8A10(omObjData *object);
void fn_1_8ABC(omObjData *object);
void fn_1_9E0C(omObjData *arg0, u32 arg1);
void fn_1_96F4(omObjData *object);
s32 fn_1_9A90(omObjData *object);
s32 fn_1_9C84(omObjData *object);
s32 fn_1_9EFC(omObjData *object);
s32 fn_1_9F70(omObjData *object, u32 arg1);
void fn_1_A0A4(omObjData *object);
void fn_1_A3C0(omObjData *object);
void fn_1_A828(u16 arg0, u16 arg1, u16 arg2);
void fn_1_A9A4(UnkM410Struct13 *arg0);
void fn_1_B140(ModelData *arg0, Mtx arg1);
void fn_1_7E30(Process *objman)
{
u32 sp18[4];
u32 sp8[4];
s16 var_r31;
s16 var_r30;
u32 var_r29;
omObjData *var_r27;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
sp18[var_r31] = frandmod(1000);
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_60[sp8[var_r31]] = var_r31;
}
omMakeGroupEx(objman, 0, 4);
omGetGroupMemberListEx(objman, 0);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
var_r27 = omAddObjEx(objman, 40, 2, 10, 0, fn_1_80A0);
var_r27->work[0] = var_r31;
}
lbl_1_bss_74 = omAddObjEx(objman, 10, 1, 0, -1, fn_1_A0A4);
lbl_1_bss_70 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M410, 19), MEMORY_DEFAULT_NUM));
}
void fn_1_806C(void)
{
HuSprAnimKill(lbl_1_bss_70);
CharModelKill(-1);
}
void fn_1_80A0(omObjData *object)
{
s32 sp8;
UnkM410Struct5 *var_r31;
s16 var_r29;
s32 var_r28;
s32 var_r27;
UnkM410Struct6 spC = { { 0.0f, 0.13f, 0.26f, 0.4f } };
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 148, MEMORY_DEFAULT_NUM);
var_r31 = object->data;
memset(var_r31, 0, 148);
var_r27 = object->work[0];
var_r28 = GWPlayerCfg[var_r27].character;
var_r31->unk_00 = var_r28;
var_r31->unk_04 = lbl_1_bss_60[object->work[0]];
sp8 = var_r31->unk_08 = 0;
var_r31->unk_4C = spC.unk_00[GWPlayerCfg[var_r27].diff & 3];
object->model[0] = CharModelCreate(var_r28, 2);
Hu3DModelLayerSet(object->model[0], 4);
Hu3DModelShadowSet(object->model[0]);
object->model[1] = Hu3DModelCreateFile(lbl_1_data_18C[var_r28]);
Hu3DModelShadowSet(object->model[1]);
Hu3DModelLayerSet(object->model[1], 4);
for (var_r29 = 0; var_r29 < 10; var_r29++) {
if (lbl_1_data_1AC[var_r29] < 0x10000) {
object->motion[var_r29] = CharModelMotionCreate(var_r28, lbl_1_data_1AC[var_r29]);
}
else {
object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], var_r28 + lbl_1_data_1AC[var_r29]);
}
}
CharModelMotionDataClose(var_r28);
object->trans.x = var_r31->unk_58.x = 2.0f * var_r31->unk_04 * 100.0f - 300.0f;
object->trans.y = var_r31->unk_58.y = 0.0f;
object->trans.z = var_r31->unk_58.z = 0.0f;
var_r31->unk_64 = var_r31->unk_68 = var_r31->unk_6C = 0.0f;
var_r31->unk_3C = var_r31->unk_40 = 0.0f;
var_r31->unk_44 = 0.0f;
var_r31->unk_48 = 0.02f;
var_r31->unk_70.x = var_r31->unk_58.x;
var_r31->unk_70.y = 100.0f + var_r31->unk_58.y;
var_r31->unk_70.z = 400.0f + var_r31->unk_58.z;
var_r31->unk_14 = 1;
var_r31->unk_0C = -1;
fn_1_9E0C(object, 0);
Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z);
var_r31->unk_34 = 0;
object->func = fn_1_8414;
}
void fn_1_8414(omObjData *object)
{
UnkM410Struct5 *var_r31;
var_r31 = object->data;
{
UnkM410Struct7 sp8 = { { 42, 78, 108, 125 } };
switch (var_r31->unk_34) {
case 0:
fn_1_9F70(object, 0);
if (fn_1_2804()) {
var_r31->unk_38 = 0;
var_r31->unk_34++;
}
break;
case 1:
if (var_r31->unk_38 >= sp8.unk_00[var_r31->unk_04]) {
var_r31->unk_28 = 1;
var_r31->unk_34++;
}
break;
case 2:
fn_1_96F4(object);
if (var_r31->unk_38 >= (2.8f + 0.00040000002f * frandmod(1000)) * 60.0f) {
var_r31->unk_2C = 1;
var_r31->unk_38 = 0;
var_r31->unk_34++;
}
break;
case 3:
if (var_r31->unk_24) {
if (var_r31->unk_38 >= 27.0f) {
var_r31->unk_30 = 1;
}
}
if (fn_1_9A90(object)) {
var_r31->unk_34++;
}
break;
case 4:
fn_1_9F70(object, 0);
break;
}
}
fn_1_8A10(object);
var_r31->unk_38++;
if (fn_1_2804() == 2) {
var_r31->unk_28 = 1;
var_r31->unk_34 = 0;
object->func = fn_1_8678;
}
}
void fn_1_8678(omObjData *object)
{
UnkM410Struct5 *var_r31 = object->data;
s32 var_r29 = 0;
var_r31->unk_10 = 0;
if (fn_1_281C() == 2) {
var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx];
if (GWPlayerCfg[object->work[0]].iscom) {
fn_1_8ABC(object);
}
}
switch (var_r31->unk_34) {
case 0:
if (fn_1_9F70(object, 0)) {
var_r31->unk_28 = 1;
}
fn_1_96F4(object);
if (var_r31->unk_18) {
var_r31->unk_34++;
}
break;
case 1:
if (!var_r31->unk_1C && !var_r31->unk_20) {
if (var_r31->unk_10 & 0x100) {
if (fn_1_281C() == 2) {
var_r31->unk_2C = 1;
}
}
else if (var_r31->unk_10 & 0x200 && fn_1_281C() == 2) {
if (fabs(fn_1_30F0(var_r31->unk_3C, var_r31->unk_40)) < 45.0) {
var_r31->unk_30 = 1;
}
}
var_r29 = 1;
}
else if (var_r31->unk_24 && var_r31->unk_10 & 0x200) {
var_r31->unk_30 = 1;
}
if (fn_1_9A90(object) || fn_1_9C84(object)) {
var_r31->unk_36 = 0;
var_r31->unk_34--;
}
break;
}
fn_1_8A10(object);
if (fn_1_281C() == 3 && var_r29) {
fn_1_287C(object->work[0]);
var_r31->unk_34 = 0;
object->func = fn_1_88D8;
}
}
void fn_1_88D8(omObjData *object)
{
UnkM410Struct5 *var_r31;
var_r31 = object->data;
fn_1_8A10(object);
switch (var_r31->unk_34) {
case 0:
var_r31->unk_34++;
return;
case 1:
if (fn_1_2834() == 1) {
Hu3DModelHookReset(object->model[0]);
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
if ((1 << object->work[0]) & fn_1_2864()) {
fn_1_9E0C(object, 8);
}
else {
fn_1_9E0C(object, 9);
}
var_r31->unk_40 = 0.0f;
var_r31->unk_44 = 0.0f;
var_r31->unk_48 = 0.005f;
var_r31->unk_34++;
}
break;
case 2:
if (fn_1_9EFC(object)) {
fn_1_28AC(object->work[0]);
var_r31->unk_34++;
}
break;
default:
break;
}
}
void fn_1_8A10(omObjData *object)
{
UnkM410Struct5 *var_r31;
var_r31 = object->data;
var_r31->unk_36++;
object->trans.x = var_r31->unk_58.x;
object->trans.y = var_r31->unk_58.y;
object->trans.z = var_r31->unk_58.z;
var_r31->unk_44 += var_r31->unk_48;
if (var_r31->unk_44 > 0.45f) {
var_r31->unk_44 = 0.45f;
}
var_r31->unk_3C = fn_1_2FD4(var_r31->unk_3C, var_r31->unk_40, var_r31->unk_44);
object->rot.y = var_r31->unk_3C;
}
void fn_1_8ABC(omObjData *object)
{
Vec sp34;
Vec sp28;
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
UnkM410Struct5 *var_r31;
s32 var_r30;
s32 var_r29;
var_r31 = object->data;
var_r31->unk_10 = 0;
switch (var_r31->unk_50) {
case 0:
if (!var_r31->unk_18) {
return;
}
if (frandmod(1000) <= 1000.0f * var_r31->unk_4C) {
var_f28 = 42.0f;
if (frandmod(1000) <= 1000.0f * var_r31->unk_4C) {
var_f29 = 280.0f;
var_r31->unk_54 = 31.8f + frandmod(6);
}
else {
var_f29 = 419.99997f;
var_r31->unk_54 = 9.0f + frandmod(15);
}
var_f27 = var_f28 + var_r31->unk_54;
var_r29 = -1;
var_f31 = 10000.0f;
for (var_r30 = 0; var_r30 < 18; var_r30++) {
fn_1_7888(var_r30, (s32)var_f27, &sp28);
if (fabs(sp28.y - var_f29) > 10.0) {
continue;
}
fn_1_7840(var_r30, &sp34);
if (fabs(sp34.x) < 1.9166667461395264) {
continue;
}
var_f30 = sp28.x - var_r31->unk_88.x;
if (sp34.x >= 0.0f) {
if (var_f30 < 0.0f) {
if (fabs(var_f30) < var_f31) {
var_r29 = var_r30;
var_f31 = fabs(var_f30);
}
}
}
else if (var_f30 > 0.0f) {
if (fabs(var_f30) < var_f31) {
var_r29 = var_r30;
var_f31 = fabs(var_f30);
}
}
}
if (var_r29 < 0) {
return;
}
fn_1_7840(var_r29, &sp34);
var_f31 /= fabs(sp34.x);
var_r31->unk_52 = var_f27 + var_f31 - var_f28 - var_r31->unk_54;
}
else {
var_r31->unk_52 = 24.0f + frandmod(36);
var_r31->unk_54 = 12.0f + frandmod(18);
}
var_r31->unk_50++;
return;
case 1:
if (!var_r31->unk_52) {
var_r31->unk_10 |= 256;
var_r31->unk_50++;
}
var_r31->unk_52--;
return;
case 2:
if (!var_r31->unk_54) {
var_r31->unk_10 |= 512;
var_r31->unk_50 = 0;
}
var_r31->unk_54--;
break;
}
}
void fn_1_9040(omObjData *object)
{
Mtx sp38;
Vec sp2C;
Vec sp20;
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
float var_f26;
float var_f25;
UnkM410Struct5 *var_r31;
s32 var_r29;
s32 var_r28;
s16 var_r27;
var_r31 = object->data;
fn_1_79F8(object->model[0], lbl_1_data_16C[var_r31->unk_08], sp38);
var_r31->unk_70.x = sp38[0][3];
var_r31->unk_70.y = sp38[1][3];
var_r31->unk_70.z = sp38[2][3];
if (fn_1_2804() == 1) {
var_r31->unk_88 = var_r31->unk_70;
var_r28 = -1;
var_f30 = 10000.0f;
for (var_r29 = 0; var_r29 < 18; var_r29++) {
fn_1_77F8(var_r29, &sp20);
if (sp20.y < 350.0f) {
continue;
}
VECSubtract(&sp20, &var_r31->unk_58, &sp2C);
var_f28 = VECMag(&sp2C);
if (var_f28 < var_f30) {
var_r28 = var_r29;
var_f30 = var_f28;
}
}
fn_1_77F8(var_r28, &sp20);
var_f29 = 5.0f + sp20.y;
var_f31 = 0.65f + 0.000100000005f * frandmod(1000);
var_f26 = -3430.0002f;
var_f27 = (var_f29 - var_r31->unk_70.y - (var_f31 * var_f31 * var_f26 * 0.5f)) / var_f31;
sp2C.x = (0.016666668f * (sp20.x - var_r31->unk_70.x)) / var_f31;
sp2C.y = 0.016666668f * var_f27;
sp2C.z = (0.016666668f * (sp20.z - var_r31->unk_70.z)) / var_f31;
}
else {
if (var_r31->unk_20 != 0) {
var_f30 = -450.0f + (0.05f * frandmod(1000));
var_f29 = -100.0f;
var_f31 = 0.75f + (0.000100000005f * frandmod(1000));
sp20.x = var_r31->unk_70.x + (0.05f * (frandmod(2000) - 1000));
sp20.y = var_f29;
sp20.z = var_f30;
}
else {
var_f30 = -700.0f;
var_f29 = 420.0f;
if (var_r31->unk_68 < -600.0f) {
var_f29 = 280.0f;
}
var_f31 = 0.65f + (0.000100000005f * frandmod(1000));
var_r27 = 60.0f * var_f31;
var_r28 = -1;
var_f30 = 10000.0f;
for (var_r29 = 0; var_r29 < 18; var_r29++) {
fn_1_7888(var_r29, var_r27, &sp20);
if (fabs(sp20.y - var_f29) > 20.0) {
continue;
}
var_f28 = fabs(sp20.x - var_r31->unk_88.x);
if (var_f28 < var_f30) {
var_r28 = var_r29;
var_f30 = var_f28;
}
}
var_f25 = 75.0f;
if (GWPlayerCfg[object->work[0]].iscom) {
var_f25 *= 0.25f;
}
if (var_r28 >= 0 && var_f30 <= var_f25) {
fn_1_7888(var_r28, var_r27, &sp20);
}
else {
sp20.x = var_r31->unk_88.x;
sp20.y = var_f29;
sp20.z = -700.0f;
}
}
var_f26 = -3430.0002f;
var_f27 = ((sp20.y - var_r31->unk_70.y) - var_f31 * var_f31 * var_f26 * 0.5f) / var_f31;
sp2C.x = (sp20.x - var_r31->unk_70.x) * 0.016666668f / var_f31;
sp2C.y = 0.016666668f * var_f27;
sp2C.z = (sp20.z - var_r31->unk_70.z) * 0.016666668f / var_f31;
}
fn_1_76B8(var_r31->unk_70, sp2C, object->work[0]);
var_r31->unk_18 = 0;
var_r31->unk_24 = 0;
if (var_r31->unk_1C) {
fn_1_9E0C(object, 5);
}
Hu3DModelHookReset(object->model[0]);
Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z);
}
void fn_1_96F4(omObjData *object)
{
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
UnkM410Struct5 *var_r31;
var_r31 = object->data;
if (!var_r31->unk_18 && (!var_r31->unk_14 || var_r31->unk_28)) {
var_f29 = -3430.0002f;
var_f30 = 70.0f + object->trans.y;
var_f31 = 0.3f;
if (var_r31->unk_14 && var_r31->unk_28) {
var_r31->unk_14 = 0;
var_r31->unk_28 = 0;
Hu3DModelAttrReset(object->model[1], HU3D_ATTR_DISPOFF);
var_r31->unk_36 = 0;
var_r31->unk_70.x = object->trans.x;
var_r31->unk_70.y = 100.0f + object->trans.y;
var_r31->unk_70.z = 500.0f + object->trans.z;
var_f28 = ((var_f30 - var_r31->unk_70.y) - (var_f31 * var_f31 * var_f29 * 0.5f)) / var_f31;
var_f27 = 70.0f + object->trans.z;
var_r31->unk_7C.x = 0.0f;
var_r31->unk_7C.y = 0.016666668f * var_f28;
var_r31->unk_7C.z = (0.016666668f * (var_f27 - var_r31->unk_70.z)) / var_f31;
var_r31->unk_40 = 0.0f;
var_r31->unk_44 = 0.0f;
var_r31->unk_48 = 0.04f;
}
VECAdd(&var_r31->unk_70, &var_r31->unk_7C, &var_r31->unk_70);
var_r31->unk_7C.y = var_r31->unk_7C.y + (0.0002777778f * var_f29);
if ((var_r31->unk_7C.y < 0.0f) && (var_r31->unk_70.y <= var_f30)) {
var_r31->unk_18 = 1;
var_r31->unk_14 = 1;
var_r31->unk_28 = 0;
Hu3DModelHookSet(object->model[0], lbl_1_data_140[var_r31->unk_08], object->model[1]);
CharModelMotionSpeedSet(var_r31->unk_00, 2.0f);
var_r31->unk_40 = 180.0f;
var_r31->unk_44 = 0.0f;
var_r31->unk_48 = 0.005f;
HuAudFXPlay(1376);
}
if (var_r31->unk_18 != 0) {
Hu3DModelPosSet(object->model[1], 0.0f, 0.0f, 0.0f);
}
else {
Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z);
}
if (var_r31->unk_36 >= (60.0f * (var_f31 - 0.17f))) {
fn_1_9E0C(object, 1);
}
}
}
s32 fn_1_9A90(omObjData *object)
{
UnkM410Struct5 *var_r31;
s32 var_r29;
var_r31 = object->data;
var_r29 = 0;
if (var_r31->unk_20) {
return var_r29;
}
if (!var_r31->unk_18) {
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
}
if (var_r31->unk_18 && !var_r31->unk_1C && var_r31->unk_2C) {
var_r31->unk_1C = 1;
var_r31->unk_2C = 0;
fn_1_9E0C(object, 4);
var_r31->unk_48 = 0.05f;
var_r31->unk_68 = 1300.0f;
}
if (var_r31->unk_1C) {
var_r31->unk_58.y = var_r31->unk_58.y + (0.016666668f * var_r31->unk_68);
var_r31->unk_68 += -66.66667014360428;
if (var_r31->unk_58.y <= 0.0f) {
var_r31->unk_1C = 0;
if (var_r31->unk_18) {
fn_1_9E0C(object, 7);
}
else {
var_r29 = 1;
fn_1_9E0C(object, 6);
}
var_r31->unk_58.y = 0.0f;
}
var_r31->unk_24 = 0;
if (var_r31->unk_58.y >= 30.000002f && var_r31->unk_18) {
var_r31->unk_24 = 1;
if (var_r31->unk_30) {
fn_1_9040(object);
var_r31->unk_24 = 0;
var_r31->unk_30 = 0;
}
}
}
else if (var_r31->unk_18) {
fn_1_9F70(object, 2);
}
return var_r29;
}
s32 fn_1_9C84(omObjData *object)
{
UnkM410Struct5 *var_r31;
s32 var_r29;
object = object;
var_r31 = object->data;
var_r29 = 0;
if (!var_r31->unk_18) {
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
}
if (!var_r31->unk_20 && var_r31->unk_18 && !var_r31->unk_1C && var_r31->unk_30) {
fn_1_9E0C(object, 3);
var_r31->unk_30 = 0;
var_r31->unk_20 = 1;
var_r31->unk_36 = 0;
}
else if (var_r31->unk_20) {
if (var_r31->unk_18) {
if (var_r31->unk_36 >= 18.0f) {
fn_1_9040(object);
}
}
else if (var_r31->unk_36 >= 30.0f && fn_1_9EFC(object)) {
var_r31->unk_30 = 0;
var_r31->unk_2C = 0;
var_r31->unk_20 = 0;
var_r29 = 1;
}
}
return var_r29;
}
void fn_1_9E0C(omObjData *object, u32 arg1)
{
float var_f31;
UnkM410Struct5 *var_r31;
var_r31 = object->data;
if ((var_r31->unk_0C != arg1) && (arg1 < 10)) {
var_f31 = lbl_1_data_1D4[arg1].unk_08;
if (var_r31->unk_0C < 0) {
var_f31 = 0.0f;
}
var_r31->unk_0C = arg1;
CharModelMotionShiftSet(var_r31->unk_00, object->motion[arg1], lbl_1_data_1D4[arg1].unk_00, var_f31, lbl_1_data_1D4[arg1].unk_0C);
CharModelMotionSpeedSet(var_r31->unk_00, 1.0f);
}
}
s32 fn_1_9EFC(omObjData *object)
{
UnkM410Struct5 *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_9F70(omObjData *object, u32 arg1)
{
UnkM410Struct5 *var_r28;
s32 var_r27;
s32 var_r26;
var_r27 = 0;
var_r28 = object->data;
var_r26 = 0;
if (CharModelMotionEndCheck(var_r28->unk_00) && (CharModelMotionShiftIDGet(var_r28->unk_00) < 0)) {
var_r26 = 1;
}
if (var_r26) {
fn_1_9E0C(object, arg1);
var_r27 = 1;
}
return var_r27;
}
void fn_1_A0A4(omObjData *object)
{
UnkM410Struct9 *var_r31;
UnkM410Struct14 *var_r30;
s32 var_r28;
float sp8[4][2] = { { 36.0f, 64.0f }, { 476.0f, 64.0f }, { 36.0f, 416.0f }, { 476.0f, 416.0f } };
object->stat |= 256;
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM410Struct14), MEMORY_DEFAULT_NUM);
var_r30 = object->data;
memset(var_r30, 0, sizeof(UnkM410Struct14));
var_r30->unk_F80 = GXGetTexBufferSize(640, 480, GX_TF_RGB5A3, GX_FALSE, 0);
var_r30->unk_F84 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r30->unk_F80, MEMORY_DEFAULT_NUM);
DCFlushRange(var_r30->unk_F84, var_r30->unk_F80);
fn_1_A9A4(&var_r30->unk_120);
var_r31 = var_r30->unk_00;
for (var_r28 = 0; var_r28 < 4; var_r28++, var_r31++) {
var_r31->unk_0C = sp8[lbl_1_bss_60[var_r28]][0];
var_r31->unk_10 = sp8[lbl_1_bss_60[var_r28]][1];
var_r31->unk_2C[0] = var_r31->unk_2C[1] = 1.0f;
var_r31->unk_3C[0] = var_r31->unk_3C[1] = var_r31->unk_40 = var_r31->unk_42 = -1;
var_r31->unk_3C[0] = espEntry(6357043, 2, 0);
var_r31->unk_3C[1] = espEntry(6357043, 2, 0);
var_r31->unk_40 = espEntry(lbl_1_data_274[GWPlayerCfg[var_r28].character], 2, 0);
var_r31->unk_42 = espEntry(6357014, 3, 0);
espPosSet(var_r31->unk_42, 36.0f + var_r31->unk_0C, var_r31->unk_10);
var_r31->unk_44 = espEntry(6357015, 4, 0);
espPosSet(var_r31->unk_44, 36.0f + var_r31->unk_0C, var_r31->unk_10);
espColorSet(var_r31->unk_44, 0, 0, 0);
espTPLvlSet(var_r31->unk_44, 0.5);
espDispOff(var_r31->unk_3C[0]);
espDispOff(var_r31->unk_3C[1]);
espDispOff(var_r31->unk_40);
espDispOff(var_r31->unk_42);
espDispOff(var_r31->unk_44);
var_r31->unk_00 = 0;
}
fn_1_77E8(fn_1_A828);
object->model[0] = Hu3DHookFuncCreate(fn_1_B140);
Hu3DModelLayerSet(object->model[0], 3);
HuDataDirClose(DATADIR_MGCONST);
object->func = fn_1_A3C0;
}
void fn_1_A3C0(omObjData *object)
{
float var_f31;
UnkM410Struct9 *var_r31;
UnkM410Struct8 *var_r30;
s32 var_r29;
s32 var_r28;
UnkM410Struct14 *var_r27;
u32 var_r26;
s32 var_r25;
var_r27 = object->data;
var_r31 = var_r27->unk_00;
for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) {
switch (var_r31->unk_14) {
case 0:
if (fn_1_281C() == 2) {
var_r31->unk_14 = 1;
}
break;
case 1:
var_r31->unk_18 = 0;
var_r31->unk_20 = var_r31->unk_08 % 10;
var_r31->unk_1C = (var_r31->unk_08 / 10) % 10;
espDispOn(var_r31->unk_3C[0]);
espDispOn(var_r31->unk_3C[1]);
espDispOn(var_r31->unk_40);
espDispOn(var_r31->unk_42);
espDispOn(var_r31->unk_44);
espBankSet(var_r31->unk_3C[0], var_r31->unk_1C);
espBankSet(var_r31->unk_3C[1], var_r31->unk_20);
espBankSet(var_r31->unk_40, var_r31->unk_24);
if (var_r31->unk_00) {
var_r31->unk_2C[0] = var_r31->unk_2C[1] = 0.5f;
var_r31->unk_14++;
}
else {
var_r31->unk_00 = 1;
var_r31->unk_2C[0] = var_r31->unk_2C[1] = 1.0f;
var_r31->unk_14 += 3;
break;
}
case 2:
var_f31 = var_r31->unk_2C[0];
var_f31 += 0.10000001f;
if (var_f31 >= 1.5f) {
var_r31->unk_14++;
}
var_r31->unk_2C[0] = var_r31->unk_2C[1] = var_f31;
break;
case 3:
var_f31 = var_r31->unk_2C[0];
var_f31 -= 0.10000001f;
if (var_f31 <= 1.0f) {
var_f31 = 1.0f;
var_r31->unk_14 = var_r31->unk_14 + 1;
}
var_r31->unk_2C[0] = var_r31->unk_2C[1] = var_f31;
break;
}
var_r31->unk_18++;
for (var_r28 = 0; var_r28 < 2; var_r28++) {
espPosSet(var_r31->unk_3C[var_r28], 34.0f + var_r31->unk_0C + (21.0f * var_r28), 2.0f + var_r31->unk_10);
espScaleSet(var_r31->unk_3C[var_r28], var_r31->unk_2C[var_r28], var_r31->unk_2C[var_r28]);
}
espPosSet(var_r31->unk_40, var_r31->unk_0C, var_r31->unk_10 - 2.0f);
}
var_r30 = var_r27->unk_120.unk_00;
for (var_r29 = 0; var_r29 < 16; var_r29++, var_r30++) {
if (var_r30->unk_00) {
var_r30->unk_00++;
if (var_r30->unk_00 < 12.0f) {
var_r30->unk_04 += 0.058333337f;
}
else {
var_r30->unk_04 += 0.025000002f;
var_r30->unk_0C -= 0.050000004f;
}
if (var_r30->unk_0C < 0.0f) {
var_r30->unk_00 = 0;
}
}
}
if (fn_1_281C() == 3) {
var_r25 = 0;
var_r31 = var_r27->unk_00;
var_r26 = 0;
for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) {
if (var_r31->unk_04 > var_r26) {
var_r26 = var_r31->unk_04;
}
}
if (var_r26) {
var_r31 = var_r27->unk_00;
for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) {
if (var_r31->unk_04 >= var_r26) {
var_r25 |= 1 << var_r29;
}
}
}
fn_1_284C(var_r25);
}
}
void fn_1_A828(u16 arg0, u16 arg1, u16 arg2)
{
UnkM410Struct8 *var_r31;
UnkM410Struct9 *var_r30;
s32 var_r29;
UnkM410Struct14 *var_r27;
var_r27 = lbl_1_bss_74->data;
if (fn_1_281C() == 2 || fn_1_281C() == 3) {
var_r30 = var_r27->unk_00;
var_r30[arg0].unk_04 += arg1;
var_r30[arg0].unk_08 += arg1;
var_r30[arg0].unk_14 = 1;
var_r31 = var_r27->unk_120.unk_00;
for (var_r29 = 0; var_r29 < 16; var_r29++, var_r31++) {
if (!var_r31->unk_00) {
break;
}
}
if (var_r29 < 16) {
var_r31->unk_00 = 1;
var_r31->unk_02 = GWPlayerCfg[arg0].character;
var_r31->unk_0C = 1.0f;
var_r31->unk_04 = 0.25f;
var_r31->unk_08 = frandmod(360);
fn_1_77F8(arg2, &var_r31->unk_10);
var_r31->unk_10.y -= 30.000002f;
}
}
}
void fn_1_A9A4(UnkM410Struct13 *arg0)
{
float sp88[32][2];
float sp8[32];
float var_f31;
float var_f30;
float var_f29;
float var_f28;
s32 var_r31;
UnkM410Struct12 *var_r29;
UnkM410Struct11 *var_r28;
var_f31 = 0.0f;
for (var_r31 = 0; var_r31 < 32; var_r31++) {
var_f28 = 1.0f + (0.001f * frandmod(1000));
sp8[var_r31] = var_f28;
var_f31 += var_f28;
sp88[var_r31][1] = 80.0f * var_f28;
sp88[var_r31][0] = 10.0f + (0.02f * frandmod(1000));
}
var_f31 = 360.0f / var_f31;
for (var_r31 = 0; var_r31 < 32; var_r31++) {
sp8[var_r31] *= var_f31;
}
var_f31 = frandmod(90);
var_r28 = arg0->unk_1C0;
var_r29 = arg0->unk_940;
for (var_r31 = 0; var_r31 < 32; var_r28++, var_r29++, var_r31++) {
var_f29 = -cosd(var_f31);
var_f30 = sind(var_f31);
var_r28->unk_24 = var_f29 * sp88[var_r31][0];
var_r28->unk_28 = var_f30 * sp88[var_r31][0];
var_r28->unk_0C = var_f29 * (sp88[var_r31][0] + sp88[var_r31][1]);
var_r28->unk_10 = var_f30 * (sp88[var_r31][0] + sp88[var_r31][1]);
var_r28->unk_00 = var_f29 * (sp88[var_r31][0] + (0.85f * sp88[var_r31][1]));
var_r28->unk_04 = var_f30 * (sp88[var_r31][0] + (0.85f * sp88[var_r31][1]));
var_r29->unk_00 = -0.3f * -var_f29;
var_r29->unk_04 = -0.3f * var_f30;
var_f29 = -cosd(var_f31 - (0.4f * sp8[var_r31]));
var_f30 = sind(var_f31 - (0.4f * (&sp8[0])[var_r31]));
var_r28->unk_30 = var_f29 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1]));
var_r28->unk_34 = var_f30 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1]));
var_f29 = -cosd(var_f31 + (0.4f * sp8[var_r31]));
var_f30 = sind(var_f31 + (0.4f * sp8[var_r31]));
var_r28->unk_18 = var_f29 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1]));
var_r28->unk_1C = var_f30 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1]));
var_r29->unk_08 = var_r29->unk_0C = var_r29->unk_10 = var_r29->unk_14 = 0.0f;
var_r29->unk_18 = var_r29->unk_1C = var_r29->unk_20 = var_r29->unk_24 = 0.0f;
var_f31 += sp8[var_r31];
}
for (var_r31 = 0; var_r31 < 5; var_r31++) {
arg0->unk_E40[var_r31].r = arg0->unk_E40[var_r31].g = arg0->unk_E40[var_r31].b = 255;
arg0->unk_E40[var_r31].a = 255;
}
arg0->unk_E54 = 0x6C0;
arg0->unk_E5C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0->unk_E54, MEMORY_DEFAULT_NUM);
DCFlushRange(arg0->unk_E5C, arg0->unk_E54);
GXBeginDisplayList(arg0->unk_E5C, arg0->unk_E54);
for (var_r31 = 0; var_r31 < 32; var_r31++) {
GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6);
GXPosition1x16(var_r31 * 5);
GXColor1x16(0);
GXTexCoord1x16(var_r31 * 5);
GXPosition1x16(var_r31 * 5 + 1);
GXColor1x16(1);
GXTexCoord1x16(var_r31 * 5 + 1);
GXPosition1x16(var_r31 * 5 + 2);
GXColor1x16(2);
GXTexCoord1x16(var_r31 * 5 + 2);
GXPosition1x16(var_r31 * 5 + 3);
GXColor1x16(3);
GXTexCoord1x16(var_r31 * 5 + 3);
GXPosition1x16(var_r31 * 5 + 4);
GXColor1x16(4);
GXTexCoord1x16(var_r31 * 5 + 4);
GXPosition1x16(var_r31 * 5 + 1);
GXColor1x16(1);
GXTexCoord1x16(var_r31 * 5 + 1);
}
arg0->unk_E58 = GXEndDisplayList();
DCStoreRange(arg0, sizeof(UnkM410Struct13));
}
void fn_1_B140(ModelData *arg0, Mtx arg1)
{
Mtx sp124;
Mtx spF4;
Mtx spC4;
Mtx sp94;
Mtx sp64;
Mtx sp34;
GXTexObj sp14;
UnkM410Struct8 *var_r31;
UnkM410Struct14 *var_r30;
s32 var_r29;
var_r30 = lbl_1_bss_74->data;
{
GXColor sp10 = { 204, 204, 204, 204 };
GXSetTexCopySrc(0, 0, 640, 480);
GXSetTexCopyDst(640, 480, GX_TF_RGB5A3, GX_FALSE);
GXCopyTex(var_r30->unk_F84, GX_FALSE);
GXPixModeSync();
DCStoreRange(&sp10, 4);
DCStoreRange(&lbl_1_data_294, 32);
MTXTrans(spF4, -400.0f, 400.0f, -700.0f);
MTXConcat(Hu3DCameraMtx, spF4, sp64);
GXLoadPosMtxImm(sp64, 0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
GXInitTexObj(&sp14, var_r30->unk_F84, 640, 480, 5, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXInitTexObjLOD(&sp14, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&sp14, GX_TEXMAP0);
HuSprTexLoad(lbl_1_bss_70, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR);
GXSetNumTexGens(2);
C_MTXLightPerspective(sp94, 41.5f, 1.2f, 0.5555555f, -0.5f, 0.5555555f, 0.5f);
MTXConcat(sp94, Hu3DCameraMtx, sp94);
MTXInverse(Hu3DCameraMtx, sp34);
MTXConcat(sp34, sp64, sp124);
MTXConcat(sp94, sp124, spF4);
GXLoadTexMtxImm(spF4, 30, GX_MTX3x4);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 30, GX_FALSE, 125);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEXCOORD0, 33, GX_FALSE, 125);
GXSetNumIndStages(1);
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0);
MTXScale(spF4, -0.5f, -0.5f, 0.5f);
GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spF4, -1);
GXSetNumTevStages(1);
GXSetTevColor(GX_TEVREG1, sp10);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C1, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_RASA, GX_CA_A0, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSETARRAY(GX_VA_POS, var_r30->unk_120.unk_1C0, sizeof(var_r30->unk_120.unk_1C0), sizeof(Vec));
GXSETARRAY(GX_VA_CLR0, var_r30->unk_120.unk_E40, sizeof(var_r30->unk_120.unk_E40), sizeof(GXColor));
GXSETARRAY(GX_VA_TEX0, var_r30->unk_120.unk_940, sizeof(var_r30->unk_120.unk_940), sizeof(Vec2f));
var_r31 = var_r30->unk_120.unk_00;
for (var_r29 = 0; var_r29 < 16; var_r29++, var_r31++) {
if (var_r31->unk_00) {
lbl_1_data_294[var_r31->unk_02].a = 255.0f * var_r31->unk_0C;
GXSetTevColor(GX_TEVREG0, lbl_1_data_294[var_r31->unk_02]);
MTXTrans(spF4, var_r31->unk_10.x, var_r31->unk_10.y, var_r31->unk_10.z);
MTXRotRad(sp124, 90, 0.017453292f * var_r31->unk_08);
MTXConcat(spF4, sp124, spF4);
MTXScale(spC4, var_r31->unk_04, var_r31->unk_04, var_r31->unk_04);
MTXConcat(spF4, spC4, spF4);
MTXConcat(Hu3DCameraMtx, spF4, sp64);
GXLoadPosMtxImm(sp64, 0);
MTXConcat(sp34, sp64, sp124);
MTXConcat(sp94, sp124, spF4);
GXLoadTexMtxImm(spF4, 30, GX_MTX3x4);
MTXRotRad(sp124, 90, 0.017453292f * -var_r31->unk_08);
GXLoadTexMtxImm(sp124, 33, GX_MTX2x4);
GXCallDisplayList(var_r30->unk_120.unk_E5C, var_r30->unk_120.unk_E58);
}
}
GXSetNumIndStages(0);
GXSetTevDirect(GX_TEVSTAGE0);
}
#ifdef TARGET_PC
GXDestroyTexObj(&sp14);
#endif
}