2279 lines
75 KiB
C
2279 lines
75 KiB
C
#include "version.h"
|
|
#define HUSPR_USE_OLD_DEFS
|
|
#include "ext_math.h"
|
|
#include "game/audio.h"
|
|
#include "game/chrman.h"
|
|
#include "game/gamework.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/sprite.h"
|
|
#include "game/wipe.h"
|
|
|
|
#include "REL/m442Dll.h"
|
|
|
|
typedef struct M442StructBss5C {
|
|
/* 0x00 */ float unk_00; // probably Vec
|
|
/* 0x04 */ float unk_04;
|
|
/* 0x08 */ float unk_08;
|
|
/* 0x0C */ float unk_0C;
|
|
/* 0x10 */ float unk_10;
|
|
/* 0x14 */ char unk14[4];
|
|
/* 0x18 */ s16 unk_18;
|
|
/* 0x1A */ s16 unk_1A;
|
|
/* 0x1C */ float unk_1C;
|
|
/* 0x20 */ float unk_20;
|
|
/* 0x24 */ float unk_24;
|
|
/* 0x28 */ float unk_28;
|
|
/* 0x2C */ float unk_2C;
|
|
} M442StructBss5C; /* size = 0x30 */
|
|
|
|
typedef struct M442StructBssC05C {
|
|
/* 0x00 */ void *unk_00;
|
|
/* 0x04 */ u16 unk_04;
|
|
/* 0x06 */ u16 unk_06;
|
|
/* 0x08 */ u16 unk_08;
|
|
/* 0x0A */ u16 unk_0A;
|
|
/* 0x0C */ u32 unk_0C;
|
|
/* 0x10 */ s32 unk_10;
|
|
} M442StructBssC05C; /* size = 0x14 */
|
|
|
|
typedef struct M442StructBssC084 {
|
|
/* 0x00 */ Vec unk_00;
|
|
/* 0x0C */ u8 unk_0C;
|
|
/* 0x0E */ s16 unk_0E;
|
|
/* 0x10 */ float unk_10;
|
|
} M442StructBssC084; /* size = 0x14 */
|
|
|
|
typedef struct M442StructBssC9F8 {
|
|
/* 0x00 */ Vec unk_00;
|
|
/* 0x0C */ u8 unk_0C;
|
|
/* 0x0E */ s16 unk_0E;
|
|
/* 0x10 */ omObjData *unk_10;
|
|
} M442StructBssC9F8; /* size = 0x14 */
|
|
|
|
typedef struct M442MainWork {
|
|
/* 0x00 */ struct {
|
|
u8 unk_00_field0 : 1;
|
|
u8 unk_00_field1 : 1;
|
|
u8 unk_00_field2 : 1;
|
|
u8 unk_00_field3 : 1;
|
|
};
|
|
/* 0x02 */ s16 unk_02;
|
|
/* 0x04 */ s16 unk_04;
|
|
/* 0x06 */ s8 unk_06;
|
|
/* 0x07 */ s8 unk_07;
|
|
/* 0x08 */ u16 unk_08;
|
|
/* 0x0A */ u16 unk_0A;
|
|
/* 0x0C */ s32 unk_0C;
|
|
/* 0x10 */ s16 unk_10;
|
|
/* 0x12 */ s16 unk_12;
|
|
/* 0x14 */ s16 unk_14;
|
|
/* 0x16 */ s16 unk_16;
|
|
/* 0x18 */ float unk_18;
|
|
/* 0x1C */ float unk_1C;
|
|
/* 0x20 */ char unk20[4];
|
|
/* 0x24 */ Vec unk_24;
|
|
/* 0x30 */ s32 unk_30;
|
|
/* 0x34 */ s32 unk_34;
|
|
/* 0x38 */ float unk_38;
|
|
/* 0x3C */ s16 unk_3C;
|
|
/* 0x3E */ s16 unk_3E;
|
|
/* 0x40 */ s16 unk_40;
|
|
/* 0x42 */ s16 unk_42;
|
|
/* 0x44 */ float unk_44;
|
|
/* 0x48 */ s16 unk_48;
|
|
/* 0x4A */ char unk4A[2];
|
|
/* 0x4C */ float unk_4C;
|
|
/* 0x50 */ float unk_50;
|
|
/* 0x54 */ float unk_54;
|
|
/* 0x58 */ float unk_58;
|
|
/* 0x5C */ s32 unk_5C;
|
|
/* 0x60 */ char unk60[0xC];
|
|
/* 0x6C */ s16 unk_6C;
|
|
/* 0x70 */ Vec unk_70;
|
|
/* 0x7C */ s32 unk_7C;
|
|
} M442MainWork; /* size = 0x80 */
|
|
|
|
typedef struct M442StructData0 {
|
|
/* 0x00 */ float unk_00;
|
|
/* 0x04 */ float unk_04;
|
|
/* 0x08 */ float unk_08;
|
|
/* 0x0C */ float unk_0C;
|
|
/* 0x10 */ float unk_10;
|
|
/* 0x14 */ float unk_14;
|
|
/* 0x18 */ float unk_18;
|
|
} M442StructData0; /* size = 0x1C */
|
|
|
|
typedef struct M442MainWork2 {
|
|
/* 0x00 */ struct {
|
|
u8 unk_00_field0 : 1;
|
|
};
|
|
/* 0x02 */ s16 unk_02;
|
|
/* 0x04 */ s16 unk_04;
|
|
/* 0x06 */ s16 unk_06;
|
|
/* 0x08 */ float unk_08;
|
|
/* 0x0C */ s16 unk_0C;
|
|
/* 0x0E */ s16 unk_0E;
|
|
/* 0x10 */ s32 unk_10;
|
|
/* 0x14 */ s16 unk_14;
|
|
/* 0x16 */ s16 unk_16;
|
|
/* 0x18 */ float unk_18;
|
|
} M442MainWork2; /* size = 0x1C */
|
|
|
|
void fn_1_A30(omObjData *object);
|
|
void fn_1_A90(Process *arg0);
|
|
void fn_1_D9C(void);
|
|
s32 fn_1_E04(void);
|
|
void fn_1_E88(omObjData *object);
|
|
void fn_1_2254(omObjData *object);
|
|
s16 fn_1_31FC(omObjData *object);
|
|
void fn_1_35AC(omObjData *object);
|
|
void fn_1_3658(omObjData *object);
|
|
void fn_1_37B8(omObjData *object);
|
|
void fn_1_394(omObjData *object);
|
|
s32 fn_1_3AE4(omObjData *object, Vec *arg1);
|
|
void fn_1_3C20(omObjData *object);
|
|
void fn_1_3C94(omObjData *object);
|
|
void fn_1_3E14(omObjData *object);
|
|
void fn_1_3E64(Process *arg0);
|
|
void fn_1_3EBC(void);
|
|
void fn_1_3EC0(omObjData *object);
|
|
void fn_1_4364(omObjData *object);
|
|
void fn_1_4444(s32 arg0);
|
|
void fn_1_448(omObjData *object);
|
|
void fn_1_485C(ModelData *model, Mtx mtx);
|
|
void fn_1_54C8(ModelData *model, Mtx mtx);
|
|
s16 fn_1_5918(Vec *arg0);
|
|
void fn_1_5A48(ModelData *model, Mtx mtx);
|
|
void fn_1_5EDC(ModelData *model, Mtx mtx);
|
|
void fn_1_64B4(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
void fn_1_6BB4(Process *arg0);
|
|
void fn_1_6CC8(void);
|
|
void fn_1_6D24(omObjData *object);
|
|
void fn_1_72C4(omObjData *object);
|
|
s32 fn_1_75DC(Vec *arg0);
|
|
void fn_1_7734(s32 arg0, s32 arg1);
|
|
void fn_1_7848(omObjData *object);
|
|
void fn_1_7890(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
void fn_1_7EBC(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
void fn_1_8520(M442StructBssC05C *arg0, u8 arg1);
|
|
float fn_1_85E8(float arg8, float arg9, float argA);
|
|
void fn_1_86EC(omObjData *object);
|
|
void fn_1_8738(s32 arg0, s32 arg1, float arg8);
|
|
void fn_1_8988(omObjData *object);
|
|
s32 fn_1_90FC(void);
|
|
|
|
M442StructData0 lbl_1_data_0[3] = {
|
|
{ 500.0f, 0.0f, 500.0f, 350.0f, 84.0f, 0.0f, 0.0f },
|
|
{ 600.0f, 0.0f, 350.0f, 400.0f, -30.0f, 0.0f, 0.0f },
|
|
{ 3300.0f, 0.0f, 150.0f, 150.0f, -37.0f, 0.0f, 0.0f },
|
|
};
|
|
|
|
Vec lbl_1_data_54 = { 700.0f, 2500.0f, -700.0f };
|
|
|
|
Vec lbl_1_data_60 = { 0.0f, 0.0f, 0.0f };
|
|
|
|
GXColor lbl_1_data_6C = { 0xFF, 0xFF, 0xFF, 0xFF };
|
|
|
|
Vec lbl_1_data_70 = { 200.0f, 15000.0f, -200.0f };
|
|
|
|
Vec lbl_1_data_7C = { 0.0f, 1.0f, 0.0f };
|
|
|
|
omObjData *lbl_1_bss_11F40;
|
|
omObjData *lbl_1_bss_11F3C;
|
|
omObjData *lbl_1_bss_11F38;
|
|
s32 lbl_1_bss_11F34;
|
|
u32 lbl_1_bss_11F30;
|
|
s32 lbl_1_bss_11F2C[1];
|
|
s32 lbl_1_bss_11F28[1];
|
|
s32 lbl_1_bss_11F24;
|
|
s32 lbl_1_bss_11F20;
|
|
s16 lbl_1_bss_11F1C;
|
|
s16 lbl_1_bss_11F1A;
|
|
s16 lbl_1_bss_11F18;
|
|
s16 lbl_1_bss_11F16;
|
|
s16 lbl_1_bss_11F14[1];
|
|
AnimData *lbl_1_bss_11F10;
|
|
AnimData *lbl_1_bss_11F04[3];
|
|
AnimData *lbl_1_bss_11F00;
|
|
AnimData *lbl_1_bss_11EFC;
|
|
AnimData *lbl_1_bss_11EEC[4];
|
|
s16 lbl_1_bss_11EE8;
|
|
s32 lbl_1_bss_11EE4;
|
|
s32 lbl_1_bss_11EE0;
|
|
u8 lbl_1_bss_11C6D[0x271];
|
|
char lbl_1_bss_119FC[0x271];
|
|
s32 lbl_1_bss_119F8;
|
|
M442StructBssC9F8 lbl_1_bss_C9F8[0x400];
|
|
M442StructBssC084 lbl_1_bss_C084[11][11];
|
|
M442StructBssC05C lbl_1_bss_C05C[2];
|
|
M442StructBss5C lbl_1_bss_5C[0x400];
|
|
float lbl_1_bss_20[0xF];
|
|
#if VERSION_PAL
|
|
s32 lbl_1_bss_20_pal;
|
|
#endif
|
|
Vec lbl_1_bss_14;
|
|
s16 lbl_1_bss_12;
|
|
s16 lbl_1_bss_10;
|
|
char pad_05_00000000_bss[0x10];
|
|
|
|
void ObjectSetup(void)
|
|
{
|
|
Process *var_r31;
|
|
CameraData *var_r30;
|
|
s16 var_r29;
|
|
|
|
var_r30 = Hu3DCamera;
|
|
OSReport("******* M442ObjectSetup *********\n");
|
|
var_r31 = omInitObjMan(0x32, 0x2000);
|
|
omGameSysInit(var_r31);
|
|
Hu3DCameraCreate(1);
|
|
Hu3DCameraPerspectiveSet(1, 30.0f, 20.0f, 25000.0f, 1.2f);
|
|
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
|
|
lbl_1_bss_11F38 = omAddObjEx(var_r31, 0x7FDA, 0, 0, -1, omOutView);
|
|
lbl_1_bss_14.x = lbl_1_data_60.x - lbl_1_data_54.x;
|
|
lbl_1_bss_14.y = lbl_1_data_60.y - lbl_1_data_54.y;
|
|
lbl_1_bss_14.z = lbl_1_data_60.z - lbl_1_data_54.z;
|
|
VECNormalize(&lbl_1_bss_14, &lbl_1_bss_14);
|
|
var_r29 = Hu3DGLightCreateV(&lbl_1_data_54, &lbl_1_bss_14, &lbl_1_data_6C);
|
|
Hu3DGLightInfinitytSet(var_r29);
|
|
Hu3DGLightStaticSet(var_r29, 1);
|
|
Hu3DShadowCreate(10.0f, var_r30->near, var_r30->far);
|
|
Hu3DShadowTPLvlSet(0.625f);
|
|
Hu3DShadowPosSet(&lbl_1_data_70, &lbl_1_data_7C, &lbl_1_data_60);
|
|
HuAudSndGrpSet(0x44);
|
|
lbl_1_bss_11F40 = omAddObjEx(var_r31, 0, 0, 0, -1, fn_1_394);
|
|
lbl_1_bss_11F3C = omAddObjEx(var_r31, 0xA, 0, 0, -1, fn_1_86EC);
|
|
fn_1_A90(var_r31);
|
|
fn_1_3E64(var_r31);
|
|
fn_1_6BB4(var_r31);
|
|
if (GWMGRecordGet(4) == 0) {
|
|
GWMGRecordSet(4, 0);
|
|
}
|
|
fn_1_91AC(var_r31, GWMGRecordGet(4));
|
|
fn_1_94AC(0);
|
|
}
|
|
|
|
void fn_1_374(u32 arg0)
|
|
{
|
|
lbl_1_bss_11F30 = arg0;
|
|
}
|
|
|
|
u32 fn_1_384(void)
|
|
{
|
|
return lbl_1_bss_11F30;
|
|
}
|
|
|
|
void fn_1_394(omObjData *object)
|
|
{
|
|
lbl_1_bss_11F30 = 0;
|
|
lbl_1_bss_11F24 = REFRESH_RATE;
|
|
lbl_1_bss_11F1C = 60;
|
|
lbl_1_bss_11F1A = REFRESH_RATE;
|
|
lbl_1_bss_11F18 = -1;
|
|
lbl_1_bss_11F16 = 0;
|
|
lbl_1_bss_11EE8 = 0;
|
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_448;
|
|
}
|
|
|
|
s32 lbl_1_data_AC = -1;
|
|
|
|
void fn_1_448(omObjData *object)
|
|
{
|
|
s32 var_r31;
|
|
|
|
switch (lbl_1_bss_11F30) {
|
|
case 0:
|
|
if (lbl_1_bss_11F24 == REFRESH_RATE) {
|
|
HuAudFXPlay(0x71B);
|
|
HuAudFXPlay(0x71F);
|
|
}
|
|
if (--lbl_1_bss_11F24 == 0) {
|
|
lbl_1_bss_11F30 = 1;
|
|
lbl_1_bss_11F24 = 2 * REFRESH_RATE;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (--lbl_1_bss_11F24 == 0) {
|
|
lbl_1_bss_11F30 = 2;
|
|
lbl_1_bss_11F24 = 2 * REFRESH_RATE;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (--lbl_1_bss_11F24 == 0) {
|
|
lbl_1_bss_11F30 = 3;
|
|
lbl_1_bss_12 = MGSeqCreate(3, 0);
|
|
}
|
|
break;
|
|
case 3:
|
|
if (MGSeqStatGet(lbl_1_bss_12) == 0) {
|
|
lbl_1_bss_11F30 = 4;
|
|
lbl_1_bss_10 = MGSeqCreate(1, 60, -1, -1);
|
|
}
|
|
if (lbl_1_data_AC < 0 && (MGSeqStatGet(lbl_1_bss_12) & 0x10)) {
|
|
lbl_1_data_AC = HuAudSeqPlay(0x43);
|
|
}
|
|
break;
|
|
case 4:
|
|
if (--lbl_1_bss_11F1A == 0) {
|
|
lbl_1_bss_11F1C -= 1;
|
|
MGSeqParamSet(lbl_1_bss_10, 1, lbl_1_bss_11F1C);
|
|
lbl_1_bss_11F1A = REFRESH_RATE;
|
|
}
|
|
if (lbl_1_bss_11F1C == 0 || lbl_1_bss_11EE4 == 0) {
|
|
lbl_1_bss_11F30 = 5;
|
|
lbl_1_bss_12 = MGSeqCreate(3, 1);
|
|
HuAudSeqFadeOut(lbl_1_data_AC, 100);
|
|
}
|
|
break;
|
|
case 5:
|
|
if (lbl_1_bss_10 >= 0) {
|
|
MGSeqParamSet(lbl_1_bss_10, 2, -1);
|
|
lbl_1_bss_10 = -1;
|
|
}
|
|
if (MGSeqStatGet(lbl_1_bss_12) == 0 && fn_1_E04()) {
|
|
if (GWMGRecordGet(4) < lbl_1_bss_11EE8) {
|
|
GWMGRecordSet(4, lbl_1_bss_11EE8);
|
|
lbl_1_bss_11F30 = 6;
|
|
lbl_1_bss_11F24 = REFRESH_RATE;
|
|
lbl_1_bss_12 = MGSeqCreate(0xE, lbl_1_bss_11EE8);
|
|
fn_1_94AC(1);
|
|
}
|
|
else {
|
|
lbl_1_bss_11F30 = 9;
|
|
lbl_1_bss_11F24 = REFRESH_RATE;
|
|
}
|
|
mgRecordExtra = lbl_1_bss_11EE8;
|
|
}
|
|
break;
|
|
case 6:
|
|
if (MGSeqStatGet(lbl_1_bss_12) == 0) {
|
|
lbl_1_bss_11F30 = 9;
|
|
lbl_1_bss_11F24 = REFRESH_RATE;
|
|
}
|
|
break;
|
|
case 9:
|
|
if (--lbl_1_bss_11F24 == 0) {
|
|
lbl_1_bss_11F30 = 11;
|
|
if (lbl_1_bss_11EE8) {
|
|
HuAudSStreamPlay(1);
|
|
}
|
|
else {
|
|
HuAudSStreamPlay(4);
|
|
}
|
|
lbl_1_bss_11F24 = 3.5f * REFRESH_RATE;
|
|
}
|
|
break;
|
|
case 11:
|
|
if (--lbl_1_bss_11F24 == 0) {
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_A30;
|
|
}
|
|
break;
|
|
}
|
|
if (lbl_1_bss_11F16 != 0) {
|
|
lbl_1_bss_11F18++;
|
|
for (var_r31 = 0; var_r31 < lbl_1_bss_11F16; var_r31++) {
|
|
GWPlayerCoinWinSet(lbl_1_bss_11F14[var_r31], lbl_1_bss_11F18);
|
|
}
|
|
lbl_1_bss_11F16 = 0;
|
|
}
|
|
if ((omSysExitReq != 0) && (WipeStatGet() == 0)) {
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_A30;
|
|
}
|
|
}
|
|
|
|
void fn_1_A30(omObjData *object)
|
|
{
|
|
if (WipeStatGet() == 0) {
|
|
fn_1_D9C();
|
|
fn_1_3EBC();
|
|
fn_1_6CC8();
|
|
MGSeqKillAll();
|
|
HuAudFadeOut(1);
|
|
omOvlReturnEx(1, 1);
|
|
OSReport("******* M442Exit *********\n");
|
|
}
|
|
}
|
|
|
|
void fn_1_A90(Process *arg0)
|
|
{
|
|
s32 var_r31;
|
|
s32 var_r30;
|
|
|
|
s32 sp8[4] = { 0x00490003, 0x00490006, 0x00490005, 0x00490004 };
|
|
|
|
lbl_1_bss_11F2C[0] = lbl_1_bss_11F2C[1] = lbl_1_bss_11F2C[2] = lbl_1_bss_11F2C[3] = -1;
|
|
lbl_1_bss_11F28[0] = lbl_1_bss_11F28[1] = lbl_1_bss_11F28[2] = lbl_1_bss_11F28[3] = -1;
|
|
lbl_1_bss_11F20 = 0;
|
|
|
|
#if VERSION_PAL
|
|
lbl_1_bss_20_pal = fn_1_90FC();
|
|
#endif
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
if (GWPlayerCfg[var_r31].iscom != 1) {
|
|
break;
|
|
}
|
|
lbl_1_bss_11F20++;
|
|
}
|
|
omMakeGroupEx(arg0, 0, 1);
|
|
for (var_r31 = 0; var_r31 < 1; var_r31++) {
|
|
omAddObjEx(arg0, 5, 0xA, 0x32, 0, fn_1_E88);
|
|
}
|
|
lbl_1_bss_11F00 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M442, 0x0A), MEMORY_DEFAULT_NUM));
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
lbl_1_bss_11EEC[var_r31] = HuSprAnimRead(HuDataReadNum(sp8[var_r31], MEMORY_DEFAULT_NUM));
|
|
}
|
|
memset(lbl_1_bss_C084, 0, 0x974);
|
|
for (var_r31 = 0; var_r31 < 9; var_r31++) {
|
|
for (var_r30 = 0; var_r30 < 9; var_r30++) {
|
|
lbl_1_bss_C084[var_r31 + 1][var_r30 + 1].unk_00.x = 1600.0f * (var_r30 - 4) / 8;
|
|
lbl_1_bss_C084[var_r31 + 1][var_r30 + 1].unk_00.y = 0.0f;
|
|
lbl_1_bss_C084[var_r31 + 1][var_r30 + 1].unk_00.z = 1600.0f * (var_r31 - 4) / 8;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_D9C(void)
|
|
{
|
|
s32 var_r31;
|
|
omObjData **var_r30;
|
|
|
|
var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
if (var_r30 != NULL) {
|
|
for (var_r31 = 0; var_r31 < 1; var_r31++) {
|
|
fn_1_3E14(var_r30[var_r31]);
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_E04(void)
|
|
{
|
|
s32 var_r31;
|
|
omObjData **var_r30;
|
|
M442MainWork *var_r29;
|
|
|
|
var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (var_r31 = 0; var_r31 < 1; var_r31++) {
|
|
var_r29 = var_r30[var_r31]->data;
|
|
if (!var_r29->unk_00_field1) {
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
s32 lbl_1_data_FC[7] = {
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x03),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x05),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x2B),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x48),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x18),
|
|
};
|
|
|
|
s32 lbl_1_data_118[2] = { 0x490010, 0x490018 };
|
|
|
|
Vec lbl_1_data_120[4] = {
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
};
|
|
|
|
void fn_1_E88(omObjData *object)
|
|
{
|
|
M442MainWork *var_r30;
|
|
u32 var_r29;
|
|
u32 var_r28;
|
|
ModelData *var_r27;
|
|
s32 var_r26;
|
|
|
|
var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M442MainWork), MEMORY_DEFAULT_NUM);
|
|
object->data = var_r30;
|
|
memset(var_r30, 0, sizeof(M442MainWork));
|
|
var_r30->unk_02 = lbl_1_bss_11F20++;
|
|
var_r30->unk_04 = GWPlayerCfg[var_r30->unk_02].pad_idx;
|
|
#if VERSION_NTSC
|
|
var_r30->unk_0C = fn_1_90FC();
|
|
#else
|
|
var_r30->unk_0C = lbl_1_bss_20_pal;
|
|
#endif
|
|
var_r26 = GWPlayerCfg[var_r30->unk_02].character;
|
|
var_r30->unk_10 = var_r26;
|
|
var_r30->unk_12 = GWPlayerCfg[var_r30->unk_02].diff;
|
|
var_r30->unk_14 = GWPlayerCfg[var_r30->unk_02].group;
|
|
object->model[0] = CharModelCreate(var_r26, 8);
|
|
Hu3DModelLayerSet(object->model[0], 1);
|
|
Hu3DModelShadowSet(object->model[0]);
|
|
object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M442, 0x01));
|
|
Hu3DModelHookSet(object->model[0], "test11_tex_we-itemhook-r", object->model[1]);
|
|
var_r30->unk_30 = 0;
|
|
for (var_r29 = 0; var_r29 < 7; var_r29++) {
|
|
object->motion[var_r29] = CharModelMotionCreate(var_r30->unk_10, lbl_1_data_FC[var_r29]);
|
|
}
|
|
for (var_r28 = 0; var_r28 < 2; var_r28++) {
|
|
object->motion[var_r29 + var_r28] = CharModelMotionCreate(var_r30->unk_10, var_r30->unk_10 + lbl_1_data_118[var_r28]);
|
|
}
|
|
Hu3DMotionSet(object->model[0], object->motion[0]);
|
|
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DMotionOverlaySet(object->model[0], object->motion[7]);
|
|
CharModelVoiceEnableSet(var_r30->unk_10, object->motion[5], 0);
|
|
object->trans.x = lbl_1_data_120[var_r30->unk_02].x;
|
|
object->trans.y = lbl_1_data_120[var_r30->unk_02].y;
|
|
object->trans.z = lbl_1_data_120[var_r30->unk_02].z;
|
|
object->model[2] = Hu3DParticleCreate(lbl_1_bss_11F00, 0x32);
|
|
Hu3DParticleHookSet(object->model[2], fn_1_7890);
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelLayerSet(object->model[2], 1);
|
|
var_r30->unk_5C = -1;
|
|
var_r30->unk_40 = -1;
|
|
object->model[3] = Hu3DHookFuncCreate(fn_1_5EDC);
|
|
Hu3DModelLayerSet(object->model[3], 7);
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
var_r27 = &Hu3DData[object->model[3]];
|
|
var_r27->unk_120 = var_r30;
|
|
CharModelDataClose(var_r30->unk_10);
|
|
var_r30->unk_00_field2 = 1;
|
|
var_r30->unk_00_field3 = 1;
|
|
object->func = fn_1_2254;
|
|
}
|
|
|
|
void fn_1_1200(omObjData *object)
|
|
{
|
|
void *sp8;
|
|
s32 var_r31;
|
|
|
|
sp8 = object->data;
|
|
var_r31 = lbl_1_bss_11F30;
|
|
if (var_r31 >= 2) {
|
|
(void)var_r31;
|
|
}
|
|
}
|
|
|
|
typedef struct Vec2s16 {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
} Vec2s16;
|
|
|
|
s16 lbl_1_data_16A[8][2] = {
|
|
{ 0xFFFF, 0xFFFF },
|
|
{ 0, 0xFFFF },
|
|
{ 1, 0xFFFF },
|
|
{ 1, 0 },
|
|
{ 1, 1 },
|
|
{ 0, 1 },
|
|
{ 0xFFFF, 1 },
|
|
{ 0xFFFF, 0 },
|
|
};
|
|
|
|
void fn_1_1230(omObjData *object)
|
|
{
|
|
Vec2s16 sp2AC[0x51];
|
|
Vec2s16 sp168[0x51];
|
|
s16 sp24[0xA2];
|
|
Vec sp18;
|
|
Vec2s16 sp14;
|
|
Vec2s16 sp10;
|
|
Vec2s16 spC;
|
|
Vec2s16 sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
|
|
s32 var_r31;
|
|
M442MainWork *var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
omObjData **var_r27;
|
|
u32 var_r25;
|
|
s32 var_r24;
|
|
s16 var_r23;
|
|
s16 var_r22;
|
|
s32 var_r21;
|
|
s16 var_r20;
|
|
M442MainWork *var_r19;
|
|
|
|
var_r30 = object->data;
|
|
var_f28 = 1.0f;
|
|
VECSubtract(&var_r30->unk_70, &object->trans, &sp18);
|
|
var_f30 = VECMag(&sp18);
|
|
if (var_f30 < 300.0f) {
|
|
if (var_f30 < 140.0f) {
|
|
if ((frand() & 1) == 0) {
|
|
var_r30->unk_6C = 1;
|
|
}
|
|
else {
|
|
var_r30->unk_00_field2 = 1;
|
|
}
|
|
}
|
|
else {
|
|
var_f29 = 32.0f;
|
|
VECNormalize(&sp18, &sp18);
|
|
var_r30->unk_06 = sp18.x * var_f29;
|
|
var_r30->unk_07 = -sp18.z * var_f29;
|
|
}
|
|
return;
|
|
}
|
|
sp14.unk_00 = 4.0f + ((8.0f * object->trans.x) / 1600.0f);
|
|
sp14.unk_02 = 4.0f + ((8.0f * object->trans.z) / 1600.0f);
|
|
sp8.unk_00 = 4.0f + ((8.0f * var_r30->unk_70.x) / 1600.0f);
|
|
sp8.unk_02 = 4.0f + ((8.0f * var_r30->unk_70.z) / 1600.0f);
|
|
for (var_r31 = 0; var_r31 < 9; var_r31++) {
|
|
for (var_r29 = 0; var_r29 < 9; var_r29++) {
|
|
lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_0C = 0;
|
|
lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_10 = 0.0f;
|
|
var_r27 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (var_r28 = 0; var_r28 < 1; var_r28++) {
|
|
if (var_r27[var_r28] != object) {
|
|
VECSubtract(&lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_00, &var_r27[var_r28]->trans, &sp18);
|
|
var_f30 = VECMag(&sp18);
|
|
if (var_f30 < 800.0f) {
|
|
var_f31 = cosd(((90.0f * var_f30) / 800.0f));
|
|
var_f31 *= var_f31;
|
|
if (var_f31 > lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_10) {
|
|
lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_10 = var_f31;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var_r27 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
for (var_r28 = 0; var_r28 < 15; var_r28++) {
|
|
var_r19 = var_r27[var_r28]->data;
|
|
if (var_r19->unk_00_field0) {
|
|
VECSubtract(&lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_00, &var_r27[var_r28]->trans, &sp18);
|
|
var_f30 = VECMag(&sp18);
|
|
if (var_f30 < 800.0f) {
|
|
var_f31 = cosd(((90.0f * var_f30) / 800.0f));
|
|
var_f31 *= var_f31;
|
|
if (var_f31 > lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_10) {
|
|
lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_10 = var_f31;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var_r23 = var_r20 = 0;
|
|
lbl_1_bss_C084[sp14.unk_02 + 1][sp14.unk_00 + 1].unk_0C = 1;
|
|
sp2AC[var_r20++] = sp14;
|
|
do {
|
|
for (var_r31 = 0; var_r31 < 8U; var_r31++) {
|
|
sp10.unk_00 = sp2AC[var_r23].unk_00 + lbl_1_data_16A[var_r31][0];
|
|
sp10.unk_02 = sp2AC[var_r23].unk_02 + lbl_1_data_16A[var_r31][1];
|
|
if ((sp10.unk_00 >= 0) && (sp10.unk_00 < 9) && (sp10.unk_02 >= 0) && (sp10.unk_02 < 9)
|
|
&& (lbl_1_bss_C084[sp10.unk_02 + 1][sp10.unk_00 + 1].unk_0C == 0)
|
|
&& (lbl_1_bss_C084[sp10.unk_02 + 1][sp10.unk_00 + 1].unk_10 >= 0.0f)) {
|
|
lbl_1_bss_C084[sp10.unk_02 + 1][sp10.unk_00 + 1].unk_0C
|
|
= lbl_1_bss_C084[sp2AC[var_r23].unk_02 + 1][sp2AC[var_r23].unk_00 + 1].unk_0C + 1;
|
|
sp2AC[var_r20++] = sp10;
|
|
}
|
|
}
|
|
var_r23++;
|
|
} while (var_r23 != var_r20);
|
|
var_r24 = lbl_1_bss_C084[sp8.unk_02 + 1][sp8.unk_00 + 1].unk_0C;
|
|
for (var_r31 = 0; var_r31 < 9; var_r31++) {
|
|
for (var_r29 = 0; var_r29 < 9; var_r29++) {
|
|
if (lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_0C >= var_r24) {
|
|
lbl_1_bss_C084[var_r31 + 1][var_r29 + 1].unk_0C = 0;
|
|
}
|
|
}
|
|
}
|
|
lbl_1_bss_C084[sp8.unk_02 + 1][sp8.unk_00 + 1].unk_0C = var_r24;
|
|
if (var_r24 > 1) {
|
|
for (var_r31 = var_r24 - 1; var_r31 > 1; var_r31--) {
|
|
for (var_r29 = 0; var_r29 < 9; var_r29++) {
|
|
for (var_r28 = 0; var_r28 < 9; var_r28++) {
|
|
if (var_r31 == lbl_1_bss_C084[var_r29 + 1][var_r28 + 1].unk_0C) {
|
|
var_r21 = 0;
|
|
for (var_r25 = 0; var_r25 < 8; var_r25++) {
|
|
if ((var_r31 - 1)
|
|
== lbl_1_bss_C084[lbl_1_data_16A[var_r25][1] + var_r29 + 1][lbl_1_data_16A[var_r25][0] + var_r28 + 1].unk_0C) {
|
|
var_r21 |= 1;
|
|
}
|
|
else if ((var_r31 + 1)
|
|
== lbl_1_bss_C084[lbl_1_data_16A[var_r25][1] + var_r29 + 1][lbl_1_data_16A[var_r25][0] + var_r28 + 1].unk_0C) {
|
|
var_r21 |= 2;
|
|
}
|
|
}
|
|
if (var_r21 != 3) {
|
|
lbl_1_bss_C084[var_r29 + 1][var_r28 + 1].unk_0C = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var_r22 = 0;
|
|
sp2AC[var_r22++] = sp14;
|
|
var_f28 = 1.0f;
|
|
do {
|
|
var_r22--;
|
|
spC = sp2AC[var_r22];
|
|
sp168[lbl_1_bss_C084[spC.unk_02 + 1][spC.unk_00 + 1].unk_0C - 1] = spC;
|
|
|
|
if (lbl_1_bss_C084[spC.unk_02 + 1][spC.unk_00 + 1].unk_0C >= var_r24) {
|
|
var_f31 = 0.0f;
|
|
for (var_r31 = 1; var_r31 < var_r24; var_r31++) {
|
|
if (lbl_1_bss_C084[sp168[var_r31].unk_02 + 1][sp168[var_r31].unk_00 + 1].unk_10 > var_f31) {
|
|
var_f31 = lbl_1_bss_C084[sp168[var_r31].unk_02 + 1][sp168[var_r31].unk_00 + 1].unk_10;
|
|
}
|
|
}
|
|
if (var_f31 < var_f28) {
|
|
var_f28 = var_f31;
|
|
memcpy(&sp24, &sp168[0], var_r24 * 4);
|
|
}
|
|
}
|
|
else {
|
|
for (var_r31 = 0; var_r31 < 8U; var_r31++) {
|
|
sp10.unk_00 = spC.unk_00 + lbl_1_data_16A[var_r31][0];
|
|
sp10.unk_02 = spC.unk_02 + lbl_1_data_16A[var_r31][1];
|
|
if (lbl_1_bss_C084[sp10.unk_02 + 1][sp10.unk_00 + 1].unk_0C == (lbl_1_bss_C084[spC.unk_02 + 1][spC.unk_00 + 1].unk_0C + 1)) {
|
|
sp2AC[var_r22++] = sp10;
|
|
}
|
|
}
|
|
}
|
|
} while (var_r22 != 0);
|
|
VECSubtract(&lbl_1_bss_C084[sp24[3] + 1][sp24[2] + 1].unk_00, &object->trans, &sp18);
|
|
var_f30 = VECMag(&sp18);
|
|
var_f29 = 64.0f + (0.2f * (32.0f * var_r30->unk_12));
|
|
var_r30->unk_18 = fn_1_85E8(var_r30->unk_18, atan2d(sp18.x, sp18.z), 0.1f);
|
|
var_r30->unk_06 = var_f29 * sind(var_r30->unk_18);
|
|
var_r30->unk_07 = var_f29 * -cosd(var_r30->unk_18);
|
|
|
|
if (++var_r30->unk_7C > 5 * REFRESH_RATE) {
|
|
var_r30->unk_00_field2 = 1;
|
|
var_r30->unk_7C = 0;
|
|
}
|
|
(void)object;
|
|
(void)var_r25;
|
|
(void)var_r24;
|
|
(void)var_r23;
|
|
}
|
|
|
|
void fn_1_2010(omObjData *object)
|
|
{
|
|
omObjData *sp8[15];
|
|
|
|
M442MainWork *var_r31;
|
|
s32 var_r30;
|
|
omObjData **var_r29;
|
|
s32 var_r28;
|
|
M442MainWork *var_r26;
|
|
|
|
var_r31 = object->data;
|
|
if (var_r31->unk_00_field2) {
|
|
var_r31->unk_00_field2 = 0;
|
|
var_r31->unk_6C = 0;
|
|
var_r31->unk_7C = 0;
|
|
if (((frand() & 0x1F) < (var_r31->unk_12 + 4)) && !var_r31->unk_00_field3) {
|
|
var_r29 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
var_r28 = 0;
|
|
for (var_r30 = 0; var_r30 < 15; var_r30++) {
|
|
var_r26 = var_r29[var_r30]->data;
|
|
if (!var_r26->unk_00_field0) {
|
|
sp8[var_r28++] = var_r29[var_r30];
|
|
}
|
|
}
|
|
if (var_r28 == 0) {
|
|
return;
|
|
}
|
|
var_r30 = (var_r28 * (frand() & 0xFF)) >> 8;
|
|
var_r31->unk_70.x = sp8[var_r30]->trans.x;
|
|
var_r31->unk_70.z = sp8[var_r30]->trans.z;
|
|
}
|
|
else {
|
|
var_r31->unk_00_field3 = 0;
|
|
var_r31->unk_70.x = 800.0f * ((frand() & 0x1FF) - 256.0f) / 256;
|
|
var_r31->unk_70.z = 800.0f * ((frand() & 0x1FF) - 256.0f) / 256;
|
|
}
|
|
}
|
|
switch (var_r31->unk_6C) {
|
|
case 0:
|
|
fn_1_1230(object);
|
|
break;
|
|
case 1:
|
|
var_r31->unk_0A |= 0x100;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void fn_1_2254(omObjData *object)
|
|
{
|
|
Vec spC;
|
|
float sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
double var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
|
|
M442MainWork *var_r31;
|
|
s32 var_r29;
|
|
u32 var_r28;
|
|
s32 var_r27;
|
|
void *var_r26;
|
|
omObjData **var_r25;
|
|
M442MainWork *var_r24;
|
|
s32 var_r23;
|
|
s32 var_r22;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = var_r31->unk_30;
|
|
var_r28 = var_r31->unk_34;
|
|
var_f28 = var_r31->unk_38;
|
|
|
|
if (!var_r31->unk_00_field1) {
|
|
var_r23 = lbl_1_bss_11F30;
|
|
if (var_r23 == 5 && (var_r31->unk_16 == 0 || var_r31->unk_16 == 5)) {
|
|
var_r31->unk_00_field1 = 1;
|
|
object->func = fn_1_3C20;
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
var_r22 = lbl_1_bss_11F30;
|
|
if (var_r22 < 4) {
|
|
return;
|
|
}
|
|
switch (var_r31->unk_16) {
|
|
case 0:
|
|
if (GWPlayerCfg[var_r31->unk_02].iscom == 0) {
|
|
var_r31->unk_06 = HuPadStkX[var_r31->unk_04];
|
|
var_r31->unk_07 = HuPadStkY[var_r31->unk_04];
|
|
var_r31->unk_08 = HuPadBtn[var_r31->unk_04];
|
|
var_r31->unk_0A = HuPadBtnDown[var_r31->unk_04];
|
|
}
|
|
else {
|
|
var_r31->unk_08 = var_r31->unk_0A = 0;
|
|
var_r31->unk_06 = var_r31->unk_07 = 0;
|
|
fn_1_2010(object);
|
|
}
|
|
var_f31 = var_r31->unk_06;
|
|
var_f30 = -(float)var_r31->unk_07;
|
|
var_f27 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30));
|
|
if (var_f27 > 0.0f) {
|
|
var_f31 /= var_f27;
|
|
var_f30 /= var_f27;
|
|
if (var_f27 > 72.0f) {
|
|
var_f27 = 72.0f;
|
|
}
|
|
var_f26 = ((VERSION_NTSC ? 10.0f : 12.0f) * var_f27) / 72.0f;
|
|
var_r31->unk_24.x = var_f31 * var_f26;
|
|
var_r31->unk_24.z = var_f30 * var_f26;
|
|
var_r31->unk_1C = var_f26;
|
|
object->rot.y = fn_1_85E8(object->rot.y, atan2d(var_r31->unk_24.x, var_r31->unk_24.z), 0.5f);
|
|
if (var_r31->unk_1C < (450.0f / REFRESH_RATE)) {
|
|
var_r29 = 1;
|
|
var_f28 = var_r31->unk_1C / (450.0f / REFRESH_RATE);
|
|
}
|
|
else {
|
|
var_r29 = 2;
|
|
var_f28 = var_r31->unk_1C / (VERSION_NTSC ? 10.0f : 12.0f);
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_24.x = var_r31->unk_24.z = 0.0f;
|
|
var_r29 = 0;
|
|
var_f28 = 1.0f;
|
|
}
|
|
var_r28 = HU3D_MOTATTR_LOOP;
|
|
object->trans.x += var_r31->unk_24.x;
|
|
object->trans.z += var_r31->unk_24.z;
|
|
fn_1_37B8(object);
|
|
fn_1_3658(object);
|
|
fn_1_35AC(object);
|
|
var_r31->unk_48 = fn_1_31FC(object);
|
|
if (var_r31->unk_0A & 0x100) {
|
|
if (var_r31->unk_48 < 0) {
|
|
spC.x = object->trans.x + (140.0 * sind(object->rot.y));
|
|
spC.y = object->trans.y;
|
|
spC.z = object->trans.z + (140.0 * cosd(object->rot.y));
|
|
}
|
|
else {
|
|
spC = lbl_1_bss_C9F8[var_r31->unk_48].unk_00;
|
|
}
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
if ((fn_1_3AE4(object, &spC) == 1)
|
|
&& ((var_r31->unk_48 >= 0
|
|
&& ((lbl_1_bss_C9F8[var_r31->unk_48].unk_10 == object) || (lbl_1_bss_C9F8[var_r31->unk_48].unk_10 == NULL)))
|
|
|| (var_r31->unk_48 < 0))) {
|
|
var_r31->unk_16 = 1;
|
|
var_r31->unk_3C = var_r31->unk_3E = 60;
|
|
if (var_r31->unk_48 >= 0) {
|
|
lbl_1_bss_C9F8[var_r31->unk_48].unk_10 = object;
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_16 = 2;
|
|
var_r31->unk_3C = var_r31->unk_3E = 24;
|
|
var_r31->unk_00_field2 = 1;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if (var_r31->unk_3C == (var_r31->unk_3E - 8)) {
|
|
Hu3DMotionOverlayReset(object->model[0]);
|
|
}
|
|
if (var_r31->unk_3C == (var_r31->unk_3E / 2)) {
|
|
if (var_r31->unk_48 < 0) {
|
|
if (var_r31->unk_00_field0) {
|
|
spC.x = object->trans.x + (140.0 * sind(object->rot.y));
|
|
spC.y = object->trans.y;
|
|
spC.z = object->trans.z + 140.0 * cosd(object->rot.y);
|
|
var_r31->unk_48 = fn_1_5918(&spC);
|
|
lbl_1_bss_C9F8[var_r31->unk_48].unk_10 = object;
|
|
}
|
|
else {
|
|
var_r31->unk_00_field2 = 1;
|
|
}
|
|
}
|
|
if ((var_r31->unk_48 >= 0) && (lbl_1_bss_C9F8[var_r31->unk_48].unk_0C < 3)) {
|
|
lbl_1_bss_C9F8[var_r31->unk_48].unk_0C += 1;
|
|
lbl_1_bss_C9F8[var_r31->unk_48].unk_0E = 2 * REFRESH_RATE;
|
|
HuAudFXPlay(0x71C);
|
|
if (lbl_1_bss_C9F8[var_r31->unk_48].unk_0C == 3) {
|
|
var_r31->unk_00_field2 = 1;
|
|
if (var_r31->unk_5C >= 0) {
|
|
fn_1_7734(var_r31->unk_5C, var_r31->unk_48);
|
|
}
|
|
}
|
|
var_r26 = Hu3DData[object->model[2]].unk_120;
|
|
*(s16 *)var_r26 = 0;
|
|
(void)var_r26;
|
|
Hu3DModelAttrReset(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelPosSet(object->model[2], object->trans.x + (140.0 * sind(object->rot.y)), object->trans.y,
|
|
object->trans.z + (140.0 * cosd(object->rot.y)));
|
|
}
|
|
}
|
|
var_r29 = 8;
|
|
var_f28 = 1.0f;
|
|
var_r28 = HU3D_MOTATTR_NONE;
|
|
object->trans.x += 0.2f * (var_r31->unk_4C - object->trans.x);
|
|
object->trans.z += 0.2f * (var_r31->unk_54 - object->trans.z);
|
|
object->rot.y = fn_1_85E8(object->rot.y, var_r31->unk_58, 0.2f);
|
|
if (--var_r31->unk_3C == 0) {
|
|
var_r31->unk_16 = 0;
|
|
Hu3DMotionOverlaySet(object->model[0], object->motion[7]);
|
|
}
|
|
break;
|
|
case 2:
|
|
if (var_r31->unk_3C == (var_r31->unk_3E - 8)) {
|
|
Hu3DMotionOverlayReset(object->model[0]);
|
|
}
|
|
var_r29 = 8;
|
|
var_f28 = var_r31->unk_3C < (var_r31->unk_3E / 2) ? 0.0f : 1.0f;
|
|
var_r28 = HU3D_MOTATTR_NONE;
|
|
object->trans.x += 0.2f * (var_r31->unk_4C - object->trans.x);
|
|
object->trans.z += 0.2f * (var_r31->unk_54 - object->trans.z);
|
|
object->rot.y = fn_1_85E8(object->rot.y, var_r31->unk_58, 0.2f);
|
|
if (--var_r31->unk_3C == 0) {
|
|
var_r31->unk_16 = 0;
|
|
Hu3DMotionOverlaySet(object->model[0], object->motion[7]);
|
|
}
|
|
break;
|
|
}
|
|
if (var_r31->unk_5C >= 0 && (var_r31->unk_48 < 0 || (var_r31->unk_48 >= 0 && lbl_1_bss_C9F8[var_r31->unk_48].unk_0C < 3))) {
|
|
var_r25 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
var_r24 = var_r25[var_r31->unk_5C]->data;
|
|
var_r27 = var_r24->unk_14;
|
|
}
|
|
else {
|
|
var_r27 = -1;
|
|
}
|
|
if (var_r27 != var_r31->unk_40) {
|
|
var_r31->unk_40 = var_r27;
|
|
if (var_r27 < 0) {
|
|
var_r31->unk_42 = 0;
|
|
}
|
|
}
|
|
if (var_r31->unk_40 >= 0) {
|
|
if (var_r31->unk_0C == 0) {
|
|
Hu3DModelAttrReset(object->model[3], HU3D_ATTR_DISPOFF);
|
|
}
|
|
switch (var_r31->unk_40) {
|
|
case 0:
|
|
var_r31->unk_44 = 0.75 + sind(((90.0f * (var_r31->unk_42 % (REFRESH_RATE / 4))) / (float)(REFRESH_RATE / 4)));
|
|
if (VERSION_NTSC ? 1 : var_r31->unk_0C == 1) {
|
|
if ((var_r31->unk_42 % (REFRESH_RATE / 3)) == 0) {
|
|
omVibrate(var_r31->unk_02, 0xC, 0xC, 0);
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
var_r31->unk_44 = 0.75 + (0.75 * sind(((90.0f * (var_r31->unk_42 % (REFRESH_RATE / 2))) / (0.5f * REFRESH_RATE))));
|
|
if (VERSION_NTSC ? 1 : var_r31->unk_0C == 1) {
|
|
if ((var_r31->unk_42 % (REFRESH_RATE / 3)) == 0) {
|
|
omVibrate(var_r31->unk_02, 0xC, 4, 2);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
var_r31->unk_44 = 0.75 + (0.5 * sind(((90.0f * (var_r31->unk_42 % REFRESH_RATE)) / (1.0f * REFRESH_RATE))));
|
|
if (VERSION_NTSC ? 1 : var_r31->unk_0C == 1) {
|
|
if ((var_r31->unk_42 % (REFRESH_RATE / 3)) == 0) {
|
|
omVibrate(var_r31->unk_02, 12, 6, 6);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
var_r31->unk_42++;
|
|
}
|
|
else {
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
}
|
|
Hu3DModelPosSet(object->model[3], object->trans.x, 300.0f + object->trans.y, object->trans.z);
|
|
if ((var_r29 >= 0 && var_r29 != var_r31->unk_30) || var_r28 != var_r31->unk_34) {
|
|
var_r31->unk_30 = var_r29;
|
|
var_r31->unk_34 = var_r28;
|
|
CharModelMotionShiftSet(var_r31->unk_10, object->motion[var_r31->unk_30], 0.0f, 8.0f, var_r28);
|
|
}
|
|
var_r31->unk_38 = var_f28;
|
|
CharModelMotionSpeedSet(var_r31->unk_10, var_f28);
|
|
}
|
|
|
|
s16 fn_1_31FC(omObjData *object)
|
|
{
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
M442MainWork *var_r31;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
M442StructBssC9F8 *var_r27;
|
|
s32 var_r26;
|
|
|
|
var_r29 = -1;
|
|
var_r26 = 0;
|
|
var_f30 = 50.0f;
|
|
var_r31 = object->data;
|
|
sp8.x = sind(object->rot.y);
|
|
sp8.y = 0.0f;
|
|
sp8.z = cosd(object->rot.y);
|
|
sp20.x = object->trans.x + (140.0f * sp8.x);
|
|
sp20.y = object->trans.y;
|
|
sp20.z = object->trans.z + (140.0f * sp8.z);
|
|
if (sp20.x >= -800.0f && sp20.x < 800.0f && sp20.z >= -800.0f && sp20.z < 800.0f) {
|
|
for (var_r27 = lbl_1_bss_C9F8, var_r28 = 0; var_r28 < lbl_1_bss_119F8; var_r28++, var_r27++) {
|
|
VECSubtract(&var_r27->unk_00, &sp20, &sp14);
|
|
var_f31 = VECMag(&sp14);
|
|
VECSubtract(&var_r27->unk_00, &object->trans, &sp14);
|
|
VECNormalize(&sp14, &sp14);
|
|
var_f29 = VECDotProduct(&sp14, &sp8);
|
|
if (var_f31 < var_f30 && var_f29 >= 0.0f) {
|
|
var_f30 = var_f31;
|
|
var_r29 = var_r28;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var_r26 = 1;
|
|
}
|
|
if (var_r29 >= 0 && lbl_1_bss_C9F8[var_r29].unk_0C < 3) {
|
|
VECSubtract(&object->trans, &lbl_1_bss_C9F8[var_r29].unk_00, &sp14);
|
|
VECNormalize(&sp14, &sp14);
|
|
var_r31->unk_4C = (140.0f * sp14.x) + lbl_1_bss_C9F8[var_r29].unk_00.x;
|
|
var_r31->unk_50 = 0.0f;
|
|
var_r31->unk_54 = (140.0f * sp14.z) + lbl_1_bss_C9F8[var_r29].unk_00.z;
|
|
var_r31->unk_58 = atan2d(-sp14.x, -sp14.z);
|
|
var_r31->unk_5C = fn_1_75DC(&lbl_1_bss_C9F8[var_r29].unk_00);
|
|
}
|
|
else {
|
|
var_r31->unk_4C = object->trans.x;
|
|
var_r31->unk_50 = object->trans.y;
|
|
var_r31->unk_54 = object->trans.z;
|
|
var_r31->unk_58 = object->rot.y;
|
|
var_r31->unk_5C = fn_1_75DC(&sp20);
|
|
var_r31->unk_00_field0 = 0;
|
|
if (var_r29 < 0 && var_r26 == 0) {
|
|
var_r31->unk_00_field0 = 1;
|
|
}
|
|
}
|
|
return var_r29;
|
|
}
|
|
|
|
void fn_1_35AC(omObjData *object)
|
|
{
|
|
if (object->trans.x < -800.0f) {
|
|
object->trans.x = -800.0f;
|
|
}
|
|
else if (object->trans.x > 800.0f) {
|
|
object->trans.x = 800.0f;
|
|
}
|
|
if (object->trans.z < -800.0f) {
|
|
object->trans.z = -800.0f;
|
|
return;
|
|
}
|
|
if (object->trans.z > 800.0f) {
|
|
object->trans.z = 800.0f;
|
|
}
|
|
}
|
|
|
|
void fn_1_3658(omObjData *object)
|
|
{
|
|
Vec spC;
|
|
M442MainWork *sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
s32 var_r30;
|
|
omObjData **var_r29;
|
|
M442MainWork *var_r28;
|
|
|
|
sp8 = object->data;
|
|
var_r29 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
for (var_r30 = 0; var_r30 < 15; var_r30++) {
|
|
var_r28 = var_r29[var_r30]->data;
|
|
if (var_r28->unk_00_field0) {
|
|
VECSubtract(&object->trans, &var_r29[var_r30]->trans, &spC);
|
|
var_f31 = VECMag(&spC);
|
|
if (var_f31 < 70.0f) {
|
|
var_f30 = 70.0f - var_f31;
|
|
if (var_f31 != 0.0f) {
|
|
VECNormalize(&spC, &spC);
|
|
}
|
|
else {
|
|
spC.x = 0.0f;
|
|
spC.z = 1.0f;
|
|
}
|
|
object->trans.x += spC.x * var_f30;
|
|
object->trans.z += spC.z * var_f30;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_37B8(omObjData *object)
|
|
{
|
|
Vec sp10;
|
|
void *spC;
|
|
void *sp8;
|
|
|
|
float var_f30;
|
|
float var_f31;
|
|
|
|
s32 var_r30;
|
|
omObjData *var_r29;
|
|
omObjData **var_r28;
|
|
|
|
spC = object->data;
|
|
var_r28 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (var_r30 = 0; var_r30 < 1; var_r30++) {
|
|
var_r29 = var_r28[var_r30];
|
|
if (object != var_r29) {
|
|
sp8 = var_r29->data;
|
|
VECSubtract(&object->trans, &var_r29->trans, &sp10);
|
|
var_f31 = VECMag(&sp10);
|
|
if (var_f31 < 100.0f) {
|
|
var_f30 = 100.0f - var_f31;
|
|
if (var_f31 != 0.0f) {
|
|
VECNormalize(&sp10, &sp10);
|
|
}
|
|
else {
|
|
sp10.x = 0.0f;
|
|
sp10.z = 1.0f;
|
|
}
|
|
object->trans.x += sp10.x * var_f30;
|
|
object->trans.z += sp10.z * var_f30;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_3908(omObjData *object)
|
|
{
|
|
Vec sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
|
|
omObjData *var_r31;
|
|
s32 var_r29;
|
|
omObjData **var_r28;
|
|
M442MainWork *var_r27;
|
|
M442MainWork *var_r26;
|
|
|
|
var_r27 = object->data;
|
|
var_r28 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (var_r29 = 0; var_r29 < 1; var_r29++) {
|
|
var_r31 = var_r28[var_r29];
|
|
if (object != var_r31) {
|
|
var_r26 = var_r31->data;
|
|
VECSubtract(&object->trans, &var_r31->trans, &sp8);
|
|
var_f27 = VECMag(&sp8);
|
|
if (var_f27 < 100.0f) {
|
|
var_f31 = 100.0f - var_f27;
|
|
var_f29 = VECMag(&var_r27->unk_24);
|
|
var_f26 = VECMag(&var_r26->unk_24);
|
|
if (var_f29 + var_f26 == 0.0f) {
|
|
var_f30 = var_f28 = 0.5f;
|
|
}
|
|
else {
|
|
var_f30 = var_f29 / (var_f29 + var_f26);
|
|
var_f28 = 1.0f - var_f30;
|
|
}
|
|
VECNormalize(&sp8, &sp8);
|
|
object->trans.x += var_f28 * (sp8.x * var_f31);
|
|
object->trans.z += var_f28 * (sp8.z * var_f31);
|
|
var_r31->trans.x += var_f30 * (-sp8.x * var_f31);
|
|
var_r31->trans.z += var_f30 * (-sp8.z * var_f31);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_3AE4(omObjData *object, Vec *arg1)
|
|
{
|
|
Vec sp18;
|
|
Vec spC;
|
|
void *sp8;
|
|
|
|
float var_f30;
|
|
float var_f31;
|
|
|
|
s32 var_r31;
|
|
omObjData **var_r30;
|
|
s32 var_r28;
|
|
|
|
sp8 = object->data;
|
|
VECSubtract(arg1, &object->trans, &spC);
|
|
VECNormalize(&spC, &spC);
|
|
var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
var_r28 = 1;
|
|
for (var_r31 = 0; var_r31 < 1; var_r31++) {
|
|
if (object != var_r30[var_r31]) {
|
|
VECSubtract(&var_r30[var_r31]->trans, arg1, &sp18);
|
|
var_f30 = VECMag(&sp18);
|
|
VECSubtract(&var_r30[var_r31]->trans, &object->trans, &sp18);
|
|
VECNormalize(&sp18, &sp18);
|
|
var_f31 = VECDotProduct(&sp18, &spC);
|
|
if (var_f31 >= 0.0f && var_f30 < 80.0f) {
|
|
var_r28 = 0;
|
|
}
|
|
}
|
|
}
|
|
(void)var_f31;
|
|
return var_r28;
|
|
}
|
|
|
|
void fn_1_3C20(omObjData *object)
|
|
{
|
|
M442MainWork *var_r30;
|
|
|
|
var_r30 = object->data;
|
|
Hu3DMotionOverlayReset(object->model[0]);
|
|
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
var_r30->unk_3C = REFRESH_RATE / 5.5;
|
|
object->func = fn_1_3C94;
|
|
}
|
|
|
|
void fn_1_3C94(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
|
|
M442MainWork *var_r31;
|
|
s32 var_r29;
|
|
u32 var_r28;
|
|
s32 var_r27;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = var_r31->unk_30;
|
|
var_r28 = var_r31->unk_34;
|
|
var_f31 = var_r31->unk_38;
|
|
var_r27 = lbl_1_bss_11F30;
|
|
if (var_r27 < 11) {
|
|
var_r29 = 0;
|
|
var_f31 = 1.0f;
|
|
var_r28 = HU3D_MOTATTR_LOOP;
|
|
}
|
|
else {
|
|
object->rot.y = fn_1_85E8(object->rot.y, 0.0f, 0.2f);
|
|
if (lbl_1_bss_11EE8 != 0) {
|
|
var_r29 = 5;
|
|
var_f31 = 1.0f;
|
|
var_r28 = HU3D_MOTATTR_NONE;
|
|
if (var_r31->unk_3C != 0) {
|
|
if (--var_r31->unk_3C == 0) {
|
|
HuAudCharVoicePlay(var_r31->unk_10, 0x125);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
var_r29 = 6;
|
|
var_f31 = 1.0f;
|
|
var_r28 = HU3D_MOTATTR_NONE;
|
|
}
|
|
}
|
|
if ((var_r29 >= 0 && var_r29 != var_r31->unk_30) || var_r28 != var_r31->unk_34) {
|
|
var_r31->unk_30 = var_r29;
|
|
var_r31->unk_34 = var_r28;
|
|
CharModelMotionShiftSet(var_r31->unk_10, object->motion[var_r31->unk_30], 0.0f, 8.0f, var_r28);
|
|
}
|
|
var_r31->unk_38 = var_f31;
|
|
CharModelMotionSpeedSet(var_r31->unk_10, var_f31);
|
|
}
|
|
|
|
void fn_1_3E14(omObjData *object)
|
|
{
|
|
void *sp8;
|
|
|
|
sp8 = object->data;
|
|
if (object->data != NULL) {
|
|
HuMemDirectFree(object->data);
|
|
object->data = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_3E64(Process *arg0)
|
|
{
|
|
omMakeGroupEx(arg0, 1, 1);
|
|
omAddObjEx(arg0, 10, 6, 0, 1, fn_1_3EC0);
|
|
}
|
|
|
|
void fn_1_3EBC(void) { }
|
|
|
|
u16 lbl_1_data_18A[2][5] = {
|
|
{ 0x280, 0x1E0, 0x280, 0x1E0, 0 },
|
|
{ 0x280, 0x1E0, 0x280, 0x1E0, 0 },
|
|
};
|
|
|
|
s32 lbl_1_data_1A0[3] = { 0x490007, 0x490008, 0x490009 };
|
|
|
|
void fn_1_3EC0(omObjData *object)
|
|
{
|
|
s32 var_r31;
|
|
s16 var_r29;
|
|
ParticleData *var_r28;
|
|
|
|
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M442, 0));
|
|
Hu3DModelLayerSet(object->model[0], 1);
|
|
Hu3DModelShadowMapObjSet(object->model[0], "oasis-grid4");
|
|
object->model[1] = Hu3DParticleCreate(HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M442, 12), MEMORY_DEFAULT_NUM)), 1);
|
|
Hu3DModelLayerSet(object->model[1], 7);
|
|
Hu3DParticleHookSet(object->model[1], fn_1_64B4);
|
|
var_r28 = Hu3DData[object->model[1]].unk_120;
|
|
object->model[2] = Hu3DParticleCreate(HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M442, 13), MEMORY_DEFAULT_NUM)), 20);
|
|
Hu3DModelLayerSet(object->model[2], 7);
|
|
var_r28->unk_1C = Hu3DData[object->model[2]].unk_120;
|
|
var_r29 = espEntry(0x49000E, 0x8000, 0);
|
|
espPosSet(var_r29, 288.0, 240.0);
|
|
espScaleSet(var_r29, 80.0, 60.0);
|
|
espColorSet(var_r29, 0xFF, 0xFF, 0xFF);
|
|
var_r28->unk_02 = var_r29;
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
lbl_1_bss_C05C[var_r31].unk_04 = lbl_1_data_18A[var_r31][0];
|
|
lbl_1_bss_C05C[var_r31].unk_06 = lbl_1_data_18A[var_r31][1];
|
|
lbl_1_bss_C05C[var_r31].unk_08 = lbl_1_data_18A[var_r31][2];
|
|
lbl_1_bss_C05C[var_r31].unk_0A = lbl_1_data_18A[var_r31][3];
|
|
lbl_1_bss_C05C[var_r31].unk_10 = lbl_1_data_18A[var_r31][4];
|
|
lbl_1_bss_C05C[var_r31].unk_0C = GXGetTexBufferSize(lbl_1_bss_C05C[var_r31].unk_08, lbl_1_bss_C05C[var_r31].unk_0A, 4, GX_FALSE, 0);
|
|
lbl_1_bss_C05C[var_r31].unk_00 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_C05C[var_r31].unk_0C, MEMORY_DEFAULT_NUM);
|
|
memset(lbl_1_bss_C05C[var_r31].unk_00, 0, lbl_1_bss_C05C[var_r31].unk_0C);
|
|
}
|
|
for (var_r31 = 0; var_r31 < 1024; var_r31++) {
|
|
fn_1_4444(var_r31);
|
|
}
|
|
object->model[3] = Hu3DHookFuncCreate(fn_1_485C);
|
|
lbl_1_bss_11F10 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M442, 0x0B));
|
|
object->model[4] = Hu3DHookFuncCreate(fn_1_54C8);
|
|
Hu3DModelLayerSet(object->model[4], 6);
|
|
for (var_r31 = 0; var_r31 < 15; var_r31++) {
|
|
lbl_1_bss_20[var_r31] = ((float)(frand() & 0xFF)) / 256;
|
|
}
|
|
memset(lbl_1_bss_119FC, 0, 0x271);
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
lbl_1_bss_11F04[var_r31] = HuSprAnimReadFile(lbl_1_data_1A0[var_r31]);
|
|
}
|
|
object->model[5] = Hu3DHookFuncCreate(fn_1_5A48);
|
|
Hu3DModelLayerSet(object->model[5], 2);
|
|
object->func = fn_1_4364;
|
|
}
|
|
|
|
void fn_1_4364(omObjData *object) { }
|
|
|
|
void fn_1_4368(u8 arg0, u8 arg1, Vec *arg2)
|
|
{
|
|
arg2->x = (66.666664f * (arg0 - 12)) + (33.333332f * (arg1 & 1));
|
|
arg2->y = 0.0f;
|
|
arg2->z = 66.666664f * (arg1 - 12);
|
|
}
|
|
|
|
void fn_1_4444(s32 arg0)
|
|
{
|
|
lbl_1_bss_5C[arg0].unk_00 = 100.0f * (18.0f * ((frand() & 0x1FF) - 256.0f)) / 256;
|
|
lbl_1_bss_5C[arg0].unk_04 = 0.0f;
|
|
lbl_1_bss_5C[arg0].unk_08 = 100.0f * (18.0f * ((frand() & 0x1FF) - 256.0f)) / 256;
|
|
lbl_1_bss_5C[arg0].unk_0C = lbl_1_bss_5C[arg0].unk_00;
|
|
lbl_1_bss_5C[arg0].unk_10 = (25.0f / REFRESH_RATE) + ((100.0f / REFRESH_RATE) * (frand() & 0xFF) / 256);
|
|
lbl_1_bss_5C[arg0].unk_18 = lbl_1_bss_5C[arg0].unk_1A = (frand() & 0x3F) + 0x20;
|
|
lbl_1_bss_5C[arg0].unk_1C = 0.1f + (0.9f * (frand() & 0xFF) / 256);
|
|
lbl_1_bss_5C[arg0].unk_20 = 360.0f * (frand() & 0xFF) / 256;
|
|
lbl_1_bss_5C[arg0].unk_24 = 4.0f * (frand() & 0xFF) / 256;
|
|
lbl_1_bss_5C[arg0].unk_28 = 100.0f * (frand() & 0xFF) / 256;
|
|
lbl_1_bss_5C[arg0].unk_2C = 1.0f + (3.0f * (frand() & 0xFF) / 256);
|
|
}
|
|
|
|
GXColor lbl_1_data_1B8 = { 0xFF, 0xFF, 0xFF, 0x20 };
|
|
|
|
GXColor lbl_1_data_1BC = { 0x00, 0x7E, 0x7E, 0xFF };
|
|
|
|
Vec lbl_1_data_1C0[4] = {
|
|
{ -1.0f, 1.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 0.0f },
|
|
{ 1.0f, -1.0f, 0.0f },
|
|
{ -1.0f, -1.0f, 0.0f },
|
|
};
|
|
|
|
void fn_1_485C(ModelData *model, Mtx mtx)
|
|
{
|
|
Mtx sp100;
|
|
Mtx spD0;
|
|
Mtx spA0;
|
|
ROMtx sp70;
|
|
Mtx sp40;
|
|
Vec sp34; // ! - uninitialized
|
|
Vec sp28; // ! - uninitialized
|
|
Vec sp1C; // ! - uninitialized
|
|
Vec sp10;
|
|
|
|
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;
|
|
float var_f22;
|
|
float var_f21;
|
|
float var_f20;
|
|
float var_f19;
|
|
|
|
M442StructBss5C *var_r31;
|
|
s32 var_r30;
|
|
CameraData *var_r29;
|
|
u16 var_r28;
|
|
u16 var_r27;
|
|
u16 var_r26;
|
|
u16 var_r25;
|
|
|
|
var_r29 = Hu3DCamera;
|
|
C_MTXOrtho(sp100, 0.0f, 480.0f, 0.0f, 640.0f, 0.0f, 100.0f);
|
|
GXSetProjection(sp100, GX_ORTHOGRAPHIC);
|
|
MTXIdentity(spD0);
|
|
GXLoadPosMtxImm(spD0, 0);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_1BC);
|
|
GXSetNumTexGens(0);
|
|
HuSprTexLoad(lbl_1_bss_11F10, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
|
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
|
|
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
|
|
GXSetCullMode(GX_CULL_BACK);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
|
GXSetScissor(0, 0, lbl_1_bss_C05C[0].unk_08, lbl_1_bss_C05C[0].unk_0A);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_U16, 0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition2u16(0, 0);
|
|
GXPosition2u16(lbl_1_bss_C05C[0].unk_08, 0);
|
|
GXPosition2u16(lbl_1_bss_C05C[0].unk_08, lbl_1_bss_C05C[0].unk_0A);
|
|
GXPosition2u16(0, lbl_1_bss_C05C[0].unk_0A);
|
|
GXDrawDone();
|
|
GXSetNumTexGens(1);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC);
|
|
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_TEXA, GX_CA_RASA, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXClearVtxDesc();
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
C_MTXPerspective(sp40, var_r29->fov, var_r29->aspect, var_r29->near, var_r29->far);
|
|
GXSetProjection(sp40, GX_PERSPECTIVE);
|
|
MTXInverse(mtx, spA0);
|
|
spA0[0][3] = spA0[1][3] = spA0[2][3] = 0.0f;
|
|
PSMTXReorder(spA0, sp70);
|
|
PSMTXROMultVecArray(sp70, &lbl_1_data_1C0[0], &sp10, 4);
|
|
GXLoadPosMtxImm(mtx, 0);
|
|
var_r31 = lbl_1_bss_5C;
|
|
for (var_r30 = 0; var_r30 < 1024; var_r30++, var_r31++) {
|
|
var_f31 = 50.0f * var_r31->unk_1C;
|
|
lbl_1_data_1B8.a = 255.0 * sind(((180.0f * var_r31->unk_18) / var_r31->unk_1A));
|
|
GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_1B8);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3f32(
|
|
var_r31->unk_00 + (var_r31->unk_2C * (sp10.x * var_f31)), var_r31->unk_04 + (sp10.y * var_f31), var_r31->unk_08 + (sp10.z * var_f31));
|
|
GXTexCoord2f32(0.0f, 0.0f);
|
|
GXPosition3f32(
|
|
var_r31->unk_00 + (var_r31->unk_2C * (sp1C.x * var_f31)), var_r31->unk_04 + (sp1C.y * var_f31), var_r31->unk_08 + (sp1C.z * var_f31));
|
|
GXTexCoord2f32(1.0f, 0.0f);
|
|
GXPosition3f32(
|
|
var_r31->unk_00 + (var_r31->unk_2C * (sp28.x * var_f31)), var_r31->unk_04 + (sp28.y * var_f31), var_r31->unk_08 + (sp28.z * var_f31));
|
|
GXTexCoord2f32(1.0f, 1.0f);
|
|
GXPosition3f32(
|
|
var_r31->unk_00 + (var_r31->unk_2C * (sp34.x * var_f31)), var_r31->unk_04 + (sp34.y * var_f31), var_r31->unk_08 + (sp34.z * var_f31));
|
|
GXTexCoord2f32(0.0f, 1.0f);
|
|
var_r31->unk_20 += var_r31->unk_24;
|
|
var_r31->unk_00 = var_r31->unk_0C + (var_r31->unk_28 * sind(var_r31->unk_20));
|
|
var_r31->unk_04 += var_r31->unk_10;
|
|
if (--var_r31->unk_18 == 0) {
|
|
fn_1_4444(var_r30);
|
|
}
|
|
}
|
|
GXDrawDone();
|
|
fn_1_8520(&lbl_1_bss_C05C[0], 1);
|
|
}
|
|
|
|
GXColor lbl_1_data_1F0 = { 0xFF, 0xFF, 0xFF, 0x40 };
|
|
|
|
float lbl_1_data_1F4[2][3] = {
|
|
{ 0.0f, 0.0f, 0.025f },
|
|
{ 0.0f, 0.025f, 0.0f },
|
|
};
|
|
|
|
GXColor lbl_1_data_20C[3] = {
|
|
{ 0xFF, 0x00, 0x00, 0xFF },
|
|
{ 0xFF, 0xFF, 0xFF, 0x40 },
|
|
{ 0xFF, 0x00, 0x00, 0xFF },
|
|
};
|
|
|
|
void fn_1_54C8(ModelData *model, Mtx mtx)
|
|
{
|
|
Mtx sp5C;
|
|
Mtx sp2C;
|
|
GXTexObj spC;
|
|
|
|
fn_1_8520(&lbl_1_bss_C05C[1], 0);
|
|
C_MTXOrtho(sp5C, 0.0f, 480.0f, 0.0f, 640.0f, 0.0f, 100.0f);
|
|
GXSetProjection(sp5C, GX_ORTHOGRAPHIC);
|
|
MTXIdentity(sp2C);
|
|
GXLoadPosMtxImm(sp2C, 0);
|
|
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
|
|
GXSetNumTexGens(2);
|
|
GXInitTexObj(&spC, lbl_1_bss_C05C[1].unk_00, lbl_1_bss_C05C[1].unk_08, lbl_1_bss_C05C[1].unk_0A, 4, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
|
GXLoadTexObj(&spC, GX_TEXMAP0);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC);
|
|
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_ZERO, GX_CA_ZERO, GX_CA_KONST);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTevColor(GX_TEVREG0, lbl_1_data_1F0);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXInitTexObj(&spC, lbl_1_bss_C05C->unk_00, lbl_1_bss_C05C->unk_08, lbl_1_bss_C05C->unk_0A, 4, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
|
GXLoadTexObj(&spC, GX_TEXMAP1);
|
|
GXSetNumIndStages(1);
|
|
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
|
|
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1);
|
|
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
|
|
GXSetIndTexMtx(GX_ITM_0, lbl_1_data_1F4, 0);
|
|
GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
|
GXClearVtxDesc();
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_U16, 0);
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetCullMode(GX_CULL_BACK);
|
|
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition2u16(0, 0);
|
|
GXTexCoord2f32(0.0f, 0.0f);
|
|
GXPosition2u16(640, 0);
|
|
GXTexCoord2f32(1.0f, 0.0f);
|
|
GXPosition2u16(640, 480);
|
|
GXTexCoord2f32(1.0f, 1.0f);
|
|
GXPosition2u16(0, 480);
|
|
GXTexCoord2f32(0.0f, 1.0f);
|
|
|
|
GXSetNumIndStages(0);
|
|
GXSetTevDirect(GX_TEVSTAGE0);
|
|
GXSetTevDirect(GX_TEVSTAGE1);
|
|
}
|
|
|
|
s16 fn_1_5918(Vec *arg0)
|
|
{
|
|
s32 var_r30;
|
|
M442StructBssC9F8 *var_r31;
|
|
|
|
var_r30 = lbl_1_bss_119F8;
|
|
var_r31 = &lbl_1_bss_C9F8[lbl_1_bss_119F8];
|
|
var_r31->unk_00.x = arg0->x;
|
|
var_r31->unk_00.y = arg0->y;
|
|
var_r31->unk_00.z = arg0->z;
|
|
var_r31->unk_0C = 0;
|
|
var_r31->unk_0E = 0;
|
|
var_r31->unk_10 = NULL;
|
|
lbl_1_bss_119F8 = (lbl_1_bss_119F8 + 1) % 1024;
|
|
return var_r30;
|
|
}
|
|
|
|
s32 fn_1_59C0(Vec *arg0)
|
|
{
|
|
Vec spC;
|
|
s32 var_r31;
|
|
|
|
for (var_r31 = 0; var_r31 < lbl_1_bss_119F8; var_r31++) {
|
|
VECSubtract(&lbl_1_bss_C9F8[var_r31].unk_00, arg0, &spC);
|
|
if (VECMag(&spC) < 50.0f) {
|
|
return var_r31;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_5A48(ModelData *arg0, Mtx arg1)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
float var_f25;
|
|
float var_f24;
|
|
|
|
M442StructBssC9F8 *var_r31;
|
|
s32 var_r30;
|
|
|
|
GXLoadPosMtxImm(arg1, 0);
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
|
GXSetNumTexGens(1);
|
|
for (var_r30 = 0; var_r30 < 3; var_r30++) {
|
|
HuSprTexLoad(lbl_1_bss_11F04[var_r30], 0, var_r30, GX_REPEAT, GX_REPEAT, GX_LINEAR); // TODO
|
|
}
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC);
|
|
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_ZERO, GX_CA_ZERO, GX_CA_TEXA);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
|
GXClearVtxDesc();
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetCullMode(GX_CULL_BACK);
|
|
var_r31 = lbl_1_bss_C9F8;
|
|
for (var_r30 = 0; var_r30 < lbl_1_bss_119F8; var_r30++, var_r31++) {
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, var_r31->unk_0C - 1, GX_COLOR0A0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3f32(var_r31->unk_00.x - 50.0f, 1.0f, var_r31->unk_00.z - 50.0f);
|
|
GXTexCoord2f32(0.0f, 0.0f);
|
|
|
|
GXPosition3f32(50.0f + var_r31->unk_00.x, 1.0f, var_r31->unk_00.z - 50.0f);
|
|
GXTexCoord2f32(1.0f, 0.0f);
|
|
|
|
GXPosition3f32(50.0f + var_r31->unk_00.x, 1.0f, 50.0f + var_r31->unk_00.z);
|
|
GXTexCoord2f32(1.0f, 1.0f);
|
|
|
|
GXPosition3f32(var_r31->unk_00.x - 50.0f, 1.0f, 50.0f + var_r31->unk_00.z);
|
|
GXTexCoord2f32(0.0f, 1.0f);
|
|
|
|
if (var_r31->unk_0E != 0) {
|
|
if (--var_r31->unk_0E == 0) {
|
|
var_r31->unk_10 = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
GXColor lbl_1_data_218 = { 0xFF, 0xFF, 0xFF, 0x80 };
|
|
|
|
void fn_1_5EDC(ModelData *model, float (*mtx)[4])
|
|
{
|
|
float sp38;
|
|
float sp28;
|
|
Mtx spC;
|
|
|
|
M442MainWork *var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = model->unk_120;
|
|
MTXInverse(mtx, spC);
|
|
spC[0][3] = spC[1][3] = spC[2][3] = 0.0f;
|
|
MTXConcat(mtx, &spC[0], mtx);
|
|
GXLoadPosMtxImm(mtx, 0);
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
|
GXSetNumTexGens(1);
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
HuSprTexLoad(lbl_1_bss_11EEC[var_r30], 0, var_r30, GX_CLAMP, GX_CLAMP, GX_LINEAR); // TODO
|
|
}
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC);
|
|
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_TEXA, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_218);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
|
GXClearVtxDesc();
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetCullMode(GX_CULL_BACK);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
|
|
GXPosition3f32(-80.0f, 80.0f, 0.0f);
|
|
GXTexCoord2f32(0.0f, 0.0f);
|
|
|
|
GXPosition3f32(80.0f, 80.0f, 0.0f);
|
|
GXTexCoord2f32(1.0f, 0.0f);
|
|
|
|
GXPosition3f32(80.0f, -80.0f, 0.0f);
|
|
GXTexCoord2f32(1.0f, 1.0f);
|
|
|
|
GXPosition3f32(-80.0f, -80.0f, 0.0f);
|
|
GXTexCoord2f32(0.0f, 1.0f);
|
|
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, var_r31->unk_40 + 1, GX_COLOR0A0);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA);
|
|
mtxScaleCat(mtx, var_r31->unk_44, var_r31->unk_44, var_r31->unk_44);
|
|
GXLoadPosMtxImm(mtx, 0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
|
|
GXPosition3f32(-80.0f, 80.0f, 0.0f);
|
|
GXTexCoord2f32(0.0f, 0.0f);
|
|
|
|
GXPosition3f32(80.0f, 80.0f, 0.0f);
|
|
GXTexCoord2f32(1.0f, 0.0f);
|
|
|
|
GXPosition3f32(80.0f, -80.0f, 0.0f);
|
|
GXTexCoord2f32(1.0f, 1.0f);
|
|
|
|
GXPosition3f32(-80.0f, -80.0f, 0.0f);
|
|
GXTexCoord2f32(0.0f, 1.0f);
|
|
}
|
|
|
|
void fn_1_64B4(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
Vec sp38;
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
HsfanimStruct01 *var_r31;
|
|
ParticleData *var_r29;
|
|
s32 var_r28;
|
|
|
|
var_r29 = particle->unk_1C;
|
|
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
|
|
if (particle->unk_00 == 0) {
|
|
particle->unk_00 = 1;
|
|
var_r31 = particle->unk_48;
|
|
for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) {
|
|
var_r31->unk2C = 2000.0f;
|
|
var_r31->unk08.x = 20.0f;
|
|
var_r31->unk08.y = 100.0f;
|
|
var_r31->unk08.z = 0.0f;
|
|
VECNormalize(&var_r31->unk08, &var_r31->unk08);
|
|
var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = var_r31->unk40.a = 0xFF;
|
|
}
|
|
var_r31 = var_r29->unk_48;
|
|
for (var_r28 = 0; var_r28 < var_r29->unk_30; var_r28++, var_r31++) {
|
|
var_r31->unk2C = 50.0f + 500.0f * (frand() & 0xFF) / 256;
|
|
var_r31->unk40.r = (frand() & 0x3F) + 0xC0;
|
|
var_r31->unk40.g = (frand() & 0x3F) + 0xC0;
|
|
var_r31->unk40.b = (frand() & 0x3F) + 0xC0;
|
|
var_r31->unk40.a = 0x40;
|
|
var_r31->unk08.x = (frand() & 0xFF) / 4096.0f;
|
|
}
|
|
}
|
|
sp14.x = sind(CRot.y) * cosd(CRot.x);
|
|
sp14.y = -sind(CRot.x);
|
|
sp14.z = cosd(CRot.y) * cosd(CRot.x);
|
|
sp38.x = Center.x + (sp14.x * CZoom);
|
|
sp38.y = Center.y + (sp14.y * CZoom);
|
|
sp38.z = Center.z + (sp14.z * CZoom);
|
|
|
|
var_r31 = particle->unk_48;
|
|
sp2C.x = sp38.x + (2500.0f * var_r31->unk08.x);
|
|
sp2C.y = sp38.y + (2500.0f * var_r31->unk08.y);
|
|
sp2C.z = sp38.z + (2500.0f * var_r31->unk08.z);
|
|
|
|
var_r31->unk30 += 0.0034906585560035243;
|
|
var_r31->unk34 = sp2C;
|
|
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * 0x44);
|
|
var_f29 = (var_r31->unk08.z * -sp14.z) + ((var_r31->unk08.x * -sp14.x) + (var_r31->unk08.y * -sp14.y));
|
|
|
|
sp8.x = -var_r31->unk08.x + (2.0f * -sp14.x * var_f29);
|
|
sp8.y = -var_r31->unk08.y + (2.0f * -sp14.y * var_f29);
|
|
sp8.z = -var_r31->unk08.z + (2.0f * -sp14.z * var_f29);
|
|
sp20.x = sp38.x + (2500.0f * sp8.x);
|
|
sp20.y = sp38.y + (2500.0f * sp8.y);
|
|
sp20.z = sp38.z + (2500.0f * sp8.z);
|
|
var_f31 = -VECDotProduct(&var_r31->unk08, &sp14);
|
|
if (var_f31 >= 0.0f) {
|
|
espTPLvlSet(particle->unk_02, 0.5f * var_f31 * var_f31);
|
|
}
|
|
else {
|
|
espTPLvlSet(particle->unk_02, 0.0);
|
|
}
|
|
var_r31 = var_r29->unk_48;
|
|
for (var_r28 = 0; var_r28 < var_r29->unk_30; var_r28++, var_r31++) {
|
|
var_f30 = var_r31->unk08.x + ((float)(var_r28 - 2) / (var_r29->unk_30 - 2));
|
|
var_r31->unk34.x = sp2C.x + (var_f30 * (sp20.x - sp2C.x));
|
|
var_r31->unk34.y = sp2C.y + (var_f30 * (sp20.y - sp2C.y));
|
|
var_r31->unk34.z = sp2C.z + (var_f30 * (sp20.z - sp2C.z));
|
|
if (var_f31 >= 0.0f) {
|
|
var_r31->unk40.a = 64.0f * (var_f31 * var_f31);
|
|
}
|
|
}
|
|
DCStoreRangeNoSync(var_r29->unk_48, var_r29->unk_30 * 0x44);
|
|
}
|
|
|
|
void fn_1_6BB4(Process *arg0)
|
|
{
|
|
s32 var_r31;
|
|
s32 var_r30;
|
|
|
|
lbl_1_bss_11EE4 = 15;
|
|
lbl_1_bss_11EE0 = 0;
|
|
omMakeGroupEx(arg0, 2, 15);
|
|
for (var_r31 = 0; var_r31 < 15; var_r31++) {
|
|
omAddObjEx(arg0, 10, 2, 0, 2, fn_1_6D24);
|
|
}
|
|
memset(lbl_1_bss_11C6D, 0, 0x271);
|
|
for (var_r31 = 9; var_r31 < 16; var_r31++) {
|
|
for (var_r30 = 9; var_r30 < 16; var_r30++) {
|
|
*(lbl_1_bss_11C6D + (var_r31 * 0x19) + var_r30) = 1;
|
|
}
|
|
}
|
|
lbl_1_bss_11EFC = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M442, 15), MEMORY_DEFAULT_NUM));
|
|
}
|
|
|
|
void fn_1_6CC8(void)
|
|
{
|
|
s32 var_r31;
|
|
omObjData **var_r30;
|
|
|
|
var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
for (var_r31 = 0; var_r31 < 15; var_r31++) {
|
|
fn_1_7848(var_r30[var_r31]);
|
|
}
|
|
}
|
|
|
|
s16 lbl_1_data_21C[16] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0 };
|
|
|
|
void fn_1_6D24(omObjData *object)
|
|
{
|
|
s16 sp18[625][2];
|
|
Vec spC;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
s32 var_r30;
|
|
M442MainWork2 *var_r29;
|
|
s32 var_r28;
|
|
s32 var_r27;
|
|
u8 var_r26;
|
|
u8 var_r25;
|
|
|
|
var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M442MainWork2), MEMORY_DEFAULT_NUM);
|
|
object->data = var_r29;
|
|
memset(var_r29, 0, sizeof(M442MainWork2));
|
|
var_r29->unk_16 = lbl_1_bss_11EE0++;
|
|
var_r29->unk_18 = 1.0f;
|
|
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M442, 0x02));
|
|
Hu3DModelLayerSet(object->model[0], 7);
|
|
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
|
|
object->model[1] = Hu3DParticleCreate(lbl_1_bss_11EFC, 0x64);
|
|
Hu3DParticleHookSet(object->model[1], fn_1_7EBC);
|
|
Hu3DModelLayerSet(object->model[1], 7);
|
|
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
|
|
for (var_r27 = 0, var_r30 = 1; var_r30 < 24; var_r30++) {
|
|
for (var_r28 = 1; var_r28 < 24; var_r28++) {
|
|
if (*(lbl_1_bss_11C6D + (var_r30 * 0x19) + var_r28) == 0) {
|
|
sp18[var_r27][0] = var_r28;
|
|
sp18[var_r27][1] = var_r30;
|
|
var_r27++;
|
|
}
|
|
}
|
|
}
|
|
var_r30 = (var_r27 * (frand() & 0xFF)) >> 8;
|
|
var_r26 = sp18[var_r30][1];
|
|
var_r25 = sp18[var_r30][0];
|
|
fn_1_4368(var_r25, var_r26, &object->trans);
|
|
var_r29->unk_04 = sp18[var_r30][0];
|
|
var_r29->unk_06 = sp18[var_r30][1];
|
|
for (var_r30 = 0; var_r30 < 25; var_r30++) {
|
|
for (var_r28 = 0; var_r28 < 25; var_r28++) {
|
|
fn_1_4368(var_r28, var_r30, &spC);
|
|
var_f31 = spC.x - object->trans.x;
|
|
var_f30 = spC.z - object->trans.z;
|
|
|
|
if (sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)) < 250.0f) {
|
|
*(lbl_1_bss_11C6D + (var_r30 * 0x19) + var_r28) = 1;
|
|
}
|
|
}
|
|
}
|
|
var_r29->unk_14 = lbl_1_data_21C[var_r29->unk_16];
|
|
var_r29->unk_08 = 0.0f;
|
|
Hu3DModelPosSet(object->model[1], object->trans.x, object->trans.y, object->trans.z);
|
|
object->func = fn_1_72C4;
|
|
}
|
|
|
|
s32 lbl_1_data_23C[3] = { 0x721, 0x71E, 0x720 };
|
|
|
|
void fn_1_72C4(omObjData *object)
|
|
{
|
|
M442MainWork2 *var_r31 = object->data;
|
|
float sp8[3] = { 1.0f, 0.6f, 0.3f };
|
|
|
|
switch (var_r31->unk_02) {
|
|
case 0:
|
|
if (var_r31->unk_00_field0) {
|
|
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrReset(object->model[1], HU3D_ATTR_DISPOFF);
|
|
var_r31->unk_02 = 1;
|
|
var_r31->unk_18 = 0.0f;
|
|
var_r31->unk_0C = REFRESH_RATE;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (var_r31->unk_18 < 0.3f) {
|
|
var_r31->unk_18 += 0.05f;
|
|
}
|
|
var_r31->unk_02 = 2;
|
|
var_r31->unk_0C = var_r31->unk_0E = 0.75 * REFRESH_RATE;
|
|
var_r31->unk_10 = HuAudFXPlay(lbl_1_data_23C[var_r31->unk_14]);
|
|
break;
|
|
case 2:
|
|
var_r31->unk_18 = 0.30000001192092896 + (0.800000011920929 * cosd(((90.0f * var_r31->unk_0C) / var_r31->unk_0E)));
|
|
if (--var_r31->unk_0C == 0) {
|
|
var_r31->unk_02 = 3;
|
|
var_r31->unk_0C = 90;
|
|
}
|
|
break;
|
|
case 3:
|
|
var_r31->unk_18 = 1.0 + (0.10000000149011612 * sind(var_r31->unk_0C));
|
|
var_r31->unk_0C += 3;
|
|
break;
|
|
}
|
|
object->scale.x = object->scale.z = sp8[var_r31->unk_14];
|
|
object->scale.y = var_r31->unk_18 * sp8[var_r31->unk_14];
|
|
var_r31->unk_08 = 400.0f * object->scale.y;
|
|
Hu3DModelPosSet(object->model[1], object->trans.x, object->trans.y, object->trans.z);
|
|
Hu3DModelScaleSet(object->model[1], object->scale.x, object->scale.y, object->scale.z);
|
|
}
|
|
|
|
s32 fn_1_75DC(Vec *arg0)
|
|
{
|
|
Vec spC;
|
|
float sp8;
|
|
|
|
float var_f31;
|
|
|
|
s32 var_r30;
|
|
omObjData **var_r29;
|
|
M442MainWork *var_r28;
|
|
|
|
sp8 = 10000.0f;
|
|
if ((arg0->x < -800.0f) || (arg0->x >= 800.0f) || (arg0->z < -800.0f) || (arg0->z >= 800.0f)) {
|
|
return -1;
|
|
}
|
|
var_r29 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
for (var_r30 = 0; var_r30 < 15; var_r30++) {
|
|
var_r28 = var_r29[var_r30]->data;
|
|
if (var_r28->unk_00_field0 == 0) {
|
|
VECSubtract(&var_r29[var_r30]->trans, arg0, &spC);
|
|
var_f31 = VECMag(&spC);
|
|
if (var_f31 < 100.0f) {
|
|
return var_r30;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
s16 lbl_1_data_248[4] = { 0x64, 0xA, 1, 0 };
|
|
|
|
void fn_1_7734(s32 arg0, s32 arg1)
|
|
{
|
|
omObjData *var_r31;
|
|
M442MainWork *var_r30;
|
|
omObjData **var_r29;
|
|
|
|
var_r29 = omGetGroupMemberListEx(HuPrcCurrentGet(), 2);
|
|
var_r31 = var_r29[arg0];
|
|
var_r30 = var_r31->data;
|
|
var_r30->unk_00_field0 = 1;
|
|
var_r31->trans.x = lbl_1_bss_C9F8[arg1].unk_00.x;
|
|
var_r31->trans.y = lbl_1_bss_C9F8[arg1].unk_00.y;
|
|
var_r31->trans.z = lbl_1_bss_C9F8[arg1].unk_00.z;
|
|
HuAudFXPlay(0x71D);
|
|
lbl_1_bss_11EE8 += lbl_1_data_248[var_r30->unk_14];
|
|
lbl_1_bss_11EE4--;
|
|
}
|
|
|
|
void fn_1_7848(omObjData *object)
|
|
{
|
|
if (object->data != NULL) {
|
|
HuMemDirectFree(object->data);
|
|
object->data = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_7890(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
HsfanimStruct01 *var_r31;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
|
|
if (particle->unk_00 == 0) {
|
|
particle->unk_00 = 1;
|
|
var_r31 = particle->unk_48;
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r31++, var_r29++) {
|
|
var_r31->unk2C = (50.0f + (20.0f * (frand() & 0xFF))) / 256;
|
|
var_f31 = 360.0f * (frand() & 0xFF) / 256;
|
|
var_r31->unk34.x = 100.0 * (0.20000000298023224 * sind(var_f31));
|
|
var_r31->unk34.y = 0.0f;
|
|
var_r31->unk34.z = 100.0 * (0.20000000298023224 * cosd(var_f31));
|
|
var_f30 = (100.0f / REFRESH_RATE) + ((150.0f / REFRESH_RATE) * (frand() & 0xFF) / 256);
|
|
var_f31 = 360.0f * (frand() & 0xFF) / 256;
|
|
var_r31->unk08.x = var_f30 * sind(var_f31);
|
|
var_r31->unk08.z = var_f30 * cosd(var_f31);
|
|
var_r31->unk08.y = (1000.0f / REFRESH_RATE) * (frand() & 0xFF) / 256;
|
|
var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = var_r31->unk40.a = 0xFF;
|
|
}
|
|
}
|
|
var_r28 = 0;
|
|
var_r31 = particle->unk_48;
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
|
|
if (var_r31->unk34.y < -50.0f) {
|
|
var_r28++;
|
|
}
|
|
else {
|
|
var_r31->unk08.y += VERSION_NTSC ? -0.50000006f : -0.6f;
|
|
var_r31->unk34.x += var_r31->unk08.x;
|
|
var_r31->unk34.y += var_r31->unk08.y;
|
|
var_r31->unk34.z += var_r31->unk08.z;
|
|
}
|
|
}
|
|
if (var_r28 == particle->unk_30) {
|
|
model->attr |= 1;
|
|
}
|
|
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * 0x44);
|
|
}
|
|
|
|
void fn_1_7C8C(HsfanimStruct01 *arg0)
|
|
{
|
|
float sp8;
|
|
|
|
arg0->unk2C = 30.0f + (10.0f * (frand() & 0xFF) / 256);
|
|
sp8 = 360.0f * (frand() & 0xFF) / 256;
|
|
arg0->unk34.x = 0.0f;
|
|
arg0->unk34.y = 0.0f;
|
|
arg0->unk34.z = 0.0f;
|
|
arg0->unk08.x = 0.0f;
|
|
arg0->unk08.y = 0.2f + (0.8f * (frand() & 0xFF) / 256);
|
|
arg0->unk08.z = ((frand() & 0xFF) * 0x168) >> 8;
|
|
arg0->unk14.x = 0.5f + (0.5f * (frand() & 0xFF) / 256);
|
|
arg0->unk40.r = 0x19;
|
|
arg0->unk40.g = 0x13;
|
|
arg0->unk40.b = 0x1E;
|
|
arg0->unk40.a = 0xFF;
|
|
}
|
|
|
|
void fn_1_7EBC(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
s32 sp14;
|
|
float sp10;
|
|
float spC;
|
|
float sp8;
|
|
|
|
float var_f31;
|
|
|
|
HsfanimStruct01 *var_r31;
|
|
s32 var_r29;
|
|
|
|
if (particle->unk_00 == 0) {
|
|
particle->unk_00 = 1;
|
|
var_r31 = particle->unk_48;
|
|
sp10 = atan2d(particle->unk_04.x, particle->unk_04.z);
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
|
|
fn_1_7C8C(var_r31);
|
|
var_r31->unk08.x = 30.0f * (frand() & 0xFF) / 256;
|
|
var_r31->unk2C *= model->scale.x;
|
|
}
|
|
}
|
|
sp14 = 0;
|
|
var_r31 = particle->unk_48;
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
|
|
var_f31 = var_r31->unk08.x - 20.0f;
|
|
var_r31->unk34.y = 400.0f + (var_f31 * (-var_r31->unk08.y * var_f31));
|
|
var_r31->unk34.x = 2.0 * (var_r31->unk08.x * sind(var_r31->unk08.z));
|
|
var_r31->unk34.z = 2.0 * (var_r31->unk08.x * cosd(var_r31->unk08.z));
|
|
var_r31->unk08.x += var_r31->unk14.x;
|
|
if (var_r31->unk08.x > 30.0f) {
|
|
fn_1_7C8C(var_r31);
|
|
var_r31->unk2C *= model->scale.x;
|
|
}
|
|
}
|
|
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * 0x44);
|
|
}
|
|
|
|
void fn_1_8520(M442StructBssC05C *arg0, u8 arg1)
|
|
{
|
|
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_TRUE);
|
|
GXSetTexCopySrc(0, 0, arg0->unk_04, arg0->unk_06);
|
|
GXSetTexCopyDst(arg0->unk_08, arg0->unk_0A, GX_TF_RGB565, arg0->unk_10);
|
|
GXSetCopyClear(BGColor, 0xFFFFFF);
|
|
GXCopyTex(arg0->unk_00, arg1);
|
|
GXPixModeSync();
|
|
DCFlushRange(arg0->unk_00, arg0->unk_0C);
|
|
}
|
|
|
|
float fn_1_85E8(float arg8, float arg9, float argA)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
var_f31 = fmod(arg9 - arg8, 360.0);
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
if (var_f31 > 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
var_f30 = fmod(arg8 + (argA * var_f31), 360.0);
|
|
if (var_f30 < 0.0f) {
|
|
var_f30 += 360.0f;
|
|
}
|
|
return var_f30;
|
|
}
|
|
|
|
void fn_1_86EC(omObjData *object)
|
|
{
|
|
fn_1_8738(0, 0, 0.0f);
|
|
object->func = fn_1_8988;
|
|
}
|
|
|
|
void fn_1_8738(s32 arg0, s32 arg1, float arg8)
|
|
{
|
|
CZoom = lbl_1_data_0[arg0].unk_00 + (arg8 * (lbl_1_data_0[arg1].unk_00 - lbl_1_data_0[arg0].unk_00));
|
|
Center.x = lbl_1_data_0[arg0].unk_04 + (arg8 * (lbl_1_data_0[arg1].unk_04 - lbl_1_data_0[arg0].unk_04));
|
|
Center.y = lbl_1_data_0[arg0].unk_08 + (arg8 * (lbl_1_data_0[arg1].unk_08 - lbl_1_data_0[arg0].unk_08));
|
|
Center.z = lbl_1_data_0[arg0].unk_0C + (arg8 * (lbl_1_data_0[arg1].unk_0C - lbl_1_data_0[arg0].unk_0C));
|
|
CRot.x = lbl_1_data_0[arg0].unk_10 + (arg8 * (lbl_1_data_0[arg1].unk_10 - lbl_1_data_0[arg0].unk_10));
|
|
CRot.y = lbl_1_data_0[arg0].unk_14 + (arg8 * (lbl_1_data_0[arg1].unk_14 - lbl_1_data_0[arg0].unk_14));
|
|
CRot.z = lbl_1_data_0[arg0].unk_18 + (arg8 * (lbl_1_data_0[arg1].unk_18 - lbl_1_data_0[arg0].unk_18));
|
|
}
|
|
|
|
float lbl_1_data_250[2] = { 0.0f, 0.0f };
|
|
|
|
void fn_1_8988(omObjData *arg0)
|
|
{
|
|
CameraData *sp8 = Hu3DCamera;
|
|
switch (lbl_1_bss_11F30) {
|
|
case 1:
|
|
fn_1_8738(0, 1, sind((90.0f * lbl_1_data_250[0])));
|
|
if (lbl_1_data_250[0] < 1.0f) {
|
|
lbl_1_data_250[0] += 1.0f / REFRESH_RATE;
|
|
if (lbl_1_data_250[0] > 1.0f) {
|
|
lbl_1_data_250[0] = 1.0f;
|
|
return;
|
|
}
|
|
}
|
|
case 3:
|
|
case 4:
|
|
break;
|
|
case 2:
|
|
fn_1_8738(1, 2, 1.0 - cosd((90.0f * lbl_1_data_250[1])));
|
|
if (lbl_1_data_250[1] < 1.0f) {
|
|
lbl_1_data_250[1] += 1.0f / REFRESH_RATE;
|
|
if (lbl_1_data_250[1] > 1.0f) {
|
|
lbl_1_data_250[1] = 1.0f;
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 8:
|
|
fn_1_8738(1, 1, 0.0f);
|
|
break;
|
|
case 9:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
s16 fn_1_90EC(void)
|
|
{
|
|
return lbl_1_bss_11EE8;
|
|
}
|
|
|
|
s32 lbl_1_data_258[4] = { 0x80000000, 0x40000000, 0x20000000, 0x10000000 };
|
|
|
|
s32 fn_1_90FC(void)
|
|
{
|
|
s32 var_r31;
|
|
u32 var_r30;
|
|
|
|
var_r30 = HuPadRumbleGet();
|
|
for (var_r31 = 0; var_r31 < 1; var_r31++) {
|
|
if (GWPlayerCfg[var_r31].iscom == 0 && (var_r30 & lbl_1_data_258[GWPlayerCfg[var_r31].pad_idx]) == 0) {
|
|
return 0;
|
|
}
|
|
}
|
|
return GWGameStat.rumble;
|
|
}
|