3401 lines
116 KiB
C
3401 lines
116 KiB
C
#include "dolphin/gx/GXEnum.h"
|
|
#include "dolphin/gx/GXVert.h"
|
|
#include "dolphin/mtx/GeoTypes.h"
|
|
#include "ext_math.h"
|
|
#include "game/chrman.h"
|
|
#include "game/gamework_data.h"
|
|
#include "game/hsfanim.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/hsfload.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/init.h"
|
|
#include "game/memory.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/object.h"
|
|
#include "game/objsub.h"
|
|
#include "game/pad.h"
|
|
#include "game/sprite.h"
|
|
#include "game/window.h"
|
|
#include "game/wipe.h"
|
|
#include "string.h"
|
|
|
|
#include "REL/m428Dll.h"
|
|
|
|
#ifndef __MWERKS__
|
|
#include "game/esprite.h"
|
|
#include "game/frand.h"
|
|
#endif
|
|
|
|
typedef struct M428DllBss13CStruct {
|
|
/* 0x00 */ float unk_00;
|
|
/* 0x04 */ char pad_04[0x3C]; /* maybe part of unk_00[0x10]? */
|
|
} M428DllBss13CStruct; /* size = 0x40 */
|
|
|
|
typedef struct M428DllData4B0Struct {
|
|
Vec unk_00;
|
|
float unk_0C;
|
|
} M428DllData4B0Struct; /* size = 0x10 */
|
|
|
|
typedef struct M428DllData500Struct {
|
|
/* 0x00 */ s32 unk_00;
|
|
/* 0x04 */ s32 unk_04;
|
|
} M428DllData500Struct; /* size = 0x08 */
|
|
|
|
typedef struct M428DllPlayerWork {
|
|
omObjData *unk_00[2]; // M428DllPlayerWork2
|
|
s16 unk_08[2];
|
|
s16 unk_0C;
|
|
s16 unk_0E;
|
|
s16 unk_10;
|
|
s16 unk_12;
|
|
s32 unk_14;
|
|
s32 unk_18;
|
|
float unk_1C;
|
|
s32 unk_20;
|
|
s32 unk_24;
|
|
s32 unk_28;
|
|
float unk_2C;
|
|
float unk_30;
|
|
float unk_34;
|
|
s32 unk_38;
|
|
Vec unk_3C;
|
|
float unk_48;
|
|
float unk_4C[2];
|
|
float unk_54[2];
|
|
float unk_5C;
|
|
float unk_60;
|
|
Vec unk_64[2];
|
|
Vec unk_7C;
|
|
Vec unk_88;
|
|
Vec unk_94;
|
|
Vec unk_A0;
|
|
Vec unk_AC;
|
|
s32 unk_B8;
|
|
s32 unk_BC;
|
|
s32 unk_C0;
|
|
s32 unk_C4;
|
|
float unk_C8;
|
|
} M428DllPlayerWork; /* size = 0xCC */
|
|
|
|
typedef struct M428DllPlayerWork2 {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
s16 unk_04;
|
|
s16 unk_06;
|
|
s16 unk_08;
|
|
s16 unk_0A;
|
|
s16 unk_0C;
|
|
s16 unk_0E;
|
|
s16 unk_10;
|
|
float unk_14;
|
|
float unk_18;
|
|
s16 unk_1C;
|
|
s16 unk_1E;
|
|
s16 unk_20;
|
|
s16 unk_22;
|
|
s16 unk_24;
|
|
s16 unk_26;
|
|
float unk_28;
|
|
float unk_2C;
|
|
s32 unk_30;
|
|
s32 unk_34;
|
|
s32 unk_38;
|
|
Vec unk_3C;
|
|
Vec unk_48;
|
|
Vec unk_54;
|
|
Mtx unk_60;
|
|
Vec unk_90;
|
|
char unk_9C[0x100];
|
|
s32 unk_19C;
|
|
s32 unk_1A0;
|
|
s32 unk_1A4;
|
|
s32 unk_1A8;
|
|
float unk_1AC;
|
|
s32 unk_1B0;
|
|
s32 unk_1B4;
|
|
Vec unk_1B8;
|
|
} M428DllPlayerWork2; /* size = 0x1C4 */
|
|
|
|
typedef struct M428DllPlayerWork3 {
|
|
s32 unk_00;
|
|
s32 unk_04[2];
|
|
float unk_0C[2][2];
|
|
s32 unk_1C[2];
|
|
float unk_24[2][2];
|
|
AnimData *unk_34;
|
|
AnimData *unk_38;
|
|
s32 unk_3C[2][2];
|
|
s32 unk_4C[2][2];
|
|
} M428DllPlayerWork3; /* size = 0x5C */
|
|
|
|
typedef struct M428DllPlayerUnkStruct {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
s32 unk_04;
|
|
Vec unk_08[4];
|
|
} M428DllPlayerUnkStruct; /* size = 0x38 */
|
|
|
|
typedef struct M428DllPlayerUnk120Struct {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
float unk_04;
|
|
float unk_08;
|
|
s32 unk_0C;
|
|
s32 unk_10;
|
|
float unk_14;
|
|
float unk_18;
|
|
s32 unk_1C;
|
|
Vec unk_20;
|
|
Vec unk_2C;
|
|
Vec unk_38;
|
|
s32 unk_44;
|
|
float unk_48;
|
|
float unk_4C;
|
|
float unk_50;
|
|
M428DllPlayerUnkStruct *unk_54;
|
|
} M428DllPlayerUnk120Struct; /* size = 0x58 */
|
|
|
|
typedef struct M428DllPlayerUnkStruct2 {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
float unk_04;
|
|
float unk_08;
|
|
float unk_0C;
|
|
char unk10[8];
|
|
float unk_18;
|
|
char unk1C[0xC];
|
|
float unk_28;
|
|
float unk_2C;
|
|
float unk_30;
|
|
float unk_34;
|
|
Vec unk_38;
|
|
GXColor unk_44;
|
|
s32 unk_48;
|
|
} M428DllPlayerUnkStruct2; /* size = 0x4C */
|
|
|
|
typedef void (*M428DllPlayerHook)(ModelData *model, struct M428DllPlayerUnk120Struct2 *arg1, Mtx matrix);
|
|
|
|
typedef struct M428DllPlayerUnk120Struct2 {
|
|
s16 unk_00;
|
|
s16 unk_02;
|
|
char unk04[0x1C];
|
|
u8 unk_20;
|
|
u8 unk_21;
|
|
u8 unk_22;
|
|
u8 unk_23;
|
|
char unk24[2];
|
|
s16 unk_26;
|
|
s32 unk_28;
|
|
s32 unk_2C;
|
|
u32 unk_30;
|
|
u32 unk_34;
|
|
AnimData *unk_38;
|
|
M428DllPlayerUnkStruct2 *unk_3C;
|
|
Vec *unk_40;
|
|
Vec2f *unk_44;
|
|
void *unk_48;
|
|
M428DllPlayerHook unk_4C;
|
|
ModelData *unk_50;
|
|
} M428DllPlayerUnk120Struct2; /* size = 0x54 */
|
|
|
|
typedef struct M428DllPlayerWork4 {
|
|
s32 unk_00[2];
|
|
s32 unk_08[2];
|
|
AnimData *unk_10;
|
|
} M428DllPlayerWork4; /* size = 0x14 */
|
|
|
|
void fn_1_102A8(ModelData *modle, Mtx matrix);
|
|
void fn_1_10530(s32 arg0, Vec *arg1, Vec *arg2);
|
|
void fn_1_10590(s32 arg0, s32 arg1, s32 arg2, Vec *arg3);
|
|
void fn_1_105E8(s32 arg0, float arg8, float arg9);
|
|
s32 fn_1_10788(s32 arg0, Vec *arg1, Vec *arg2, Vec *arg3);
|
|
void fn_1_10A88(void);
|
|
void fn_1_11014(omObjData *object);
|
|
void fn_1_115F8(void);
|
|
void fn_1_118A8(s32 arg0, float arg8);
|
|
void fn_1_11930(void);
|
|
void fn_1_11A60(omObjData *object);
|
|
void fn_1_11C20(void);
|
|
s32 fn_1_11DE4(s32 arg0, Vec arg1, Vec arg2, float arg8, float arg9, float argA, float argB, GXColor arg3);
|
|
float fn_1_1236C(float arg8, float arg9, float argA);
|
|
void fn_1_129B4(float arg8, Vec *arg0, Vec *arg1, Vec *arg2);
|
|
void fn_1_12AA4(float arg8, Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3);
|
|
s16 fn_1_12CD4(AnimData *arg0, s16 arg1);
|
|
void fn_1_134C0(ModelData *model, Mtx matrix);
|
|
void fn_1_13D9C(s16 arg0, s16 arg1, s32 arg2);
|
|
void fn_1_13E14(s16 arg0, s16 arg1, Vec arg2);
|
|
void fn_1_13EC8(s16 arg0, s16 arg1, float arg8);
|
|
s32 fn_1_13F54(s16 arg0, char *arg1, Mtx arg2, s32 arg3);
|
|
void fn_1_14088(HsfObject *arg0, Mtx arg1, char *arg2, Mtx arg3);
|
|
void fn_1_A108(omObjData *object);
|
|
void fn_1_A4C8(omObjData *object);
|
|
void fn_1_B3D4(omObjData *object);
|
|
void fn_1_B43C(omObjData *object);
|
|
void fn_1_BBD0(omObjData *object);
|
|
void fn_1_E5F4(omObjData *object);
|
|
void fn_1_E600(omObjData *object);
|
|
s32 fn_1_F288(Vec *arg0, Vec *arg1, float arg8);
|
|
s32 fn_1_F538(Vec *arg0, Vec *arg1, Vec *arg2, float arg8);
|
|
s32 fn_1_FB8C(Vec *arg0, Vec *arg1, float arg8, s32 arg2, s32 arg3);
|
|
|
|
SHARED_SYM extern u32 GlobalCounter;
|
|
|
|
Vec lbl_1_data_150[4] = {
|
|
{ -140.0f, -400.0f, 0.0f },
|
|
{ 140.0f, -300.0f, 0.0f },
|
|
{ -140.0f, -300.0f, 0.0f },
|
|
{ 140.0f, -400.0f, 0.0f },
|
|
};
|
|
Vec lbl_1_data_180[4] = {
|
|
{ -100.0f, -10.0f, 150.0f },
|
|
{ 100.0f, -10.0f, 150.0f },
|
|
{ -100.0f, -10.0f, 150.0f },
|
|
{ 100.0f, -10.0f, 150.0f },
|
|
};
|
|
Vec lbl_1_data_1B0[4][0xE] = {
|
|
{
|
|
{ -11.0f, 214.0f, 39.0f },
|
|
{ -11.0f, 400.0f, 46.0f },
|
|
{ -11.0f, 668.0f, 56.0f },
|
|
{ -11.0f, 931.0f, 42.0f },
|
|
{ 7.0f, 1131.0f, 65.0f },
|
|
{ -452.0f, 1449.0f, 57.0f },
|
|
{ -478.0f, 1763.0f, 48.0f },
|
|
{ -452.0f, 2001.0f, 44.0f },
|
|
{ -311.0f, 2120.0f, 55.0f },
|
|
{ -85.0f, 2442.0f, 42.0f },
|
|
{ -32.0f, 2876.0f, 43.0f },
|
|
{ -12.0f, 3300.0f, 48.0f },
|
|
{ -42.0f, 4500.0f, 48.0f },
|
|
{ -42.0f, 4500.0f, 48.0f },
|
|
},
|
|
{
|
|
{ 16.0f, 203.0f, 40.0f },
|
|
{ 0.0f, 456.0f, 50.0f },
|
|
{ 15.0f, 650.0f, 58.0f },
|
|
{ -268.0f, 935.0f, 51.0f },
|
|
{ -463.0f, 1205.0f, 66.0f },
|
|
{ -663.0f, 1313.0f, 69.0f },
|
|
{ -460.0f, 1600.0f, 59.0f },
|
|
{ -333.0f, 1946.0f, 46.0f },
|
|
{ -82.0f, 2188.0f, 44.0f },
|
|
{ -76.0f, 2374.0f, 40.0f },
|
|
{ -108.0f, 2620.0f, 43.0f },
|
|
{ -95.0f, 2990.0f, 46.0f },
|
|
{ -270.0f, 3445.0f, 46.0f },
|
|
{ -42.0f, 4500.0f, 48.0f },
|
|
},
|
|
{
|
|
{ 26.0f, 354.0f, 46.0f },
|
|
{ 29.0f, 604.0f, 57.0f },
|
|
{ 30.0f, 877.0f, 39.0f },
|
|
{ 51.0f, 1086.0f, 64.0f },
|
|
{ 360.0f, 1196.0f, 46.0f },
|
|
{ 398.0f, 1416.0f, 39.0f },
|
|
{ 468.0f, 1658.0f, 43.0f },
|
|
{ 468.0f, 1944.0f, 53.0f },
|
|
{ 135.0f, 2174.0f, 47.0f },
|
|
{ 107.0f, 2430.0f, 61.0f },
|
|
{ 98.0f, 2698.0f, 43.0f },
|
|
{ 90.0f, 2995.0f, 50.0f },
|
|
{ 0.0f, 4500.0f, 48.0f },
|
|
{ 0.0f, 4500.0f, 48.0f },
|
|
},
|
|
{
|
|
{ -24.0f, 313.0f, 41.0f },
|
|
{ -11.0f, 529.0f, 51.0f },
|
|
{ -33.0f, 799.0f, 44.0f },
|
|
{ 7.0f, 990.0f, 53.0f },
|
|
{ 135.0f, 1196.0f, 57.0f },
|
|
{ 393.0f, 1379.0f, 39.0f },
|
|
{ 429.0f, 1457.0f, 42.0f },
|
|
{ 420.0f, 1984.0f, 54.0f },
|
|
{ 190.0f, 2239.0f, 53.0f },
|
|
{ 70.0f, 2532.0f, 55.0f },
|
|
{ 75.0f, 2933.0f, 44.0f },
|
|
{ 75.0f, 4500.0f, 48.0f },
|
|
{ 75.0f, 4500.0f, 48.0f },
|
|
{ 75.0f, 4500.0f, 48.0f },
|
|
},
|
|
};
|
|
Vec lbl_1_data_450[4] = {
|
|
{ -30.000002f, -10.0f, -90.0f },
|
|
{ 20.0f, -10.0f, -70.0f },
|
|
{ 0.0f, -10.0f, 0.0f },
|
|
{ 0.0f, -10.0f, 0.0f },
|
|
};
|
|
Vec lbl_1_data_480[4] = {
|
|
{ 15.0f, 150.0f, 0.0f },
|
|
{ 15.0f, 210.0f, 0.0f },
|
|
{ 0.0f, 180.0f, 0.0f },
|
|
{ 0.0f, 180.0f, 0.0f },
|
|
};
|
|
M428DllData4B0Struct lbl_1_data_4B0[5] = {
|
|
{ { -400.0f, 700.0f, 0.0f }, 200.0f },
|
|
{ { 400.0f, 900.0f, 0.0f }, 200.0f },
|
|
{ { 0.0f, 1800.0f, 0.0f }, 220.0f },
|
|
{ { -600.0f, 3100.0f, 0.0f }, 300.0f },
|
|
{ { 600.0f, 2880.0f, 0.0f }, 300.0f },
|
|
};
|
|
M428DllData500Struct lbl_1_data_500[0xC] = {
|
|
{ 0x5F0000, 0 },
|
|
{ 0x5F0002, 0 },
|
|
{ 0x5F0003, 0 },
|
|
{ -1, 0 },
|
|
{ -1, 1 },
|
|
{ -1, 2 },
|
|
{ -1, 3 },
|
|
{ 0x5F0006, 0 },
|
|
{ 0x5F0014, 0 },
|
|
{ 0x5F005B, 0 },
|
|
{ 0x5F0017, 0 },
|
|
{ 0x5F0018, 0 },
|
|
};
|
|
s32 lbl_1_data_560[4][8] = {
|
|
{
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x11),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x12),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x13),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x14),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x15),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x16),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x17),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x18),
|
|
},
|
|
{
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x19),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x1A),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x1B),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x1C),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x1D),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x1E),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x1F),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x20),
|
|
},
|
|
{
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x21),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x22),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x23),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x24),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x25),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x26),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x27),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x28),
|
|
},
|
|
{
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x29),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x2A),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x2B),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x2C),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x2D),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x2E),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x2F),
|
|
DATA_MAKE_NUM(DATADIR_M428, 0x30),
|
|
},
|
|
};
|
|
Vec lbl_1_data_5E0[8] = {
|
|
{ 0.0f, -10.0f, -20.0f },
|
|
{ 0.0f, -10.0f, -20.0f },
|
|
{ 0.0f, -30.000002f, -20.0f },
|
|
{ 0.0f, -10.0f, -20.0f },
|
|
{ 0.0f, -10.0f, -20.0f },
|
|
{ 0.0f, 10.0f, -10.0f },
|
|
{ 0.0f, -30.000002f, -20.0f },
|
|
{ 0.0f, -10.0f, -20.0f },
|
|
};
|
|
s32 lbl_1_data_640[4] = { 0x80000000, 0x40000000, 0x20000000, 0x10000000 };
|
|
GXColor lbl_1_data_650 = { 0xFF, 0xFF, 0xFF, 0x20 };
|
|
GXColor lbl_1_data_654 = { 0xFF, 0xFF, 0xFF, 0x40 };
|
|
|
|
Process *lbl_1_bss_2D0;
|
|
// M428DllPlayerWork
|
|
omObjData *lbl_1_bss_2C8[2];
|
|
omObjData *lbl_1_bss_2B8[4];
|
|
// M428DllPlayerWork3
|
|
omObjData *lbl_1_bss_2B4;
|
|
// M428DllPlayerWork4
|
|
omObjData *lbl_1_bss_2B0;
|
|
M428DllPlayerWork *lbl_1_bss_2AC;
|
|
M428DllPlayerWork2 *lbl_1_bss_2A8;
|
|
s32 lbl_1_bss_2A4;
|
|
s32 lbl_1_bss_29C[2];
|
|
Mtx lbl_1_bss_23C[2];
|
|
M428DllBss13CStruct lbl_1_bss_1BC[2];
|
|
M428DllBss13CStruct lbl_1_bss_13C[2];
|
|
s32 lbl_1_bss_138;
|
|
s32 lbl_1_bss_134;
|
|
s32 lbl_1_bss_130;
|
|
|
|
omObjData *fn_1_9F5C(Process *process)
|
|
{
|
|
s32 var_r31;
|
|
|
|
lbl_1_bss_2D0 = process;
|
|
lbl_1_bss_2A4 = 0;
|
|
lbl_1_bss_2AC = HuMemDirectMallocNum(HEAP_SYSTEM, 2 * sizeof(M428DllPlayerWork), MEMORY_DEFAULT_NUM);
|
|
memset(lbl_1_bss_2AC, 0, 2 * sizeof(M428DllPlayerWork));
|
|
lbl_1_bss_2A8 = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(M428DllPlayerWork2), MEMORY_DEFAULT_NUM);
|
|
memset(lbl_1_bss_2A8, 0, 4 * sizeof(M428DllPlayerWork2));
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
lbl_1_bss_2C8[var_r31] = omAddObjEx(process, 0x40, 1, 0, -1, fn_1_A108);
|
|
lbl_1_bss_2C8[var_r31]->work[0] = var_r31;
|
|
}
|
|
fn_1_10A88();
|
|
fn_1_11798(0);
|
|
fn_1_11930();
|
|
lbl_1_bss_29C[0] = lbl_1_bss_29C[1] = 0;
|
|
return lbl_1_bss_2C8[var_r31];
|
|
}
|
|
|
|
void fn_1_A0B0(void)
|
|
{
|
|
s32 var_r31;
|
|
|
|
fn_1_115F8();
|
|
fn_1_11C20();
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
fn_1_B3D4(lbl_1_bss_2C8[var_r31]);
|
|
}
|
|
}
|
|
|
|
void fn_1_A108(omObjData *object)
|
|
{
|
|
M428DllPlayerWork *work;
|
|
s32 var_r30;
|
|
s32 var_r28;
|
|
s32 var_r27;
|
|
|
|
var_r28 = object->work[0];
|
|
work = &lbl_1_bss_2AC[var_r28];
|
|
object->data = work;
|
|
work->unk_0C = var_r28;
|
|
work->unk_0E = 0;
|
|
work->unk_10 = 0;
|
|
work->unk_12 = (u8)frand() % 4;
|
|
work->unk_14 = 0;
|
|
work->unk_18 = 0;
|
|
work->unk_1C = 0.0f;
|
|
work->unk_20 = 0;
|
|
work->unk_24 = 0;
|
|
work->unk_28 = 0;
|
|
work->unk_2C = 0.0f;
|
|
work->unk_30 = 0.0f;
|
|
work->unk_34 = 0.0f;
|
|
work->unk_B8 = 0;
|
|
work->unk_BC = -1;
|
|
work->unk_C0 = work->unk_C4 = 0;
|
|
work->unk_C8 = 0.0f;
|
|
work->unk_38 = -1;
|
|
work->unk_4C[0] = work->unk_4C[1] = 0.0f;
|
|
work->unk_48 = 400.0f;
|
|
work->unk_54[0] = work->unk_5C = 200.0f;
|
|
work->unk_54[1] = work->unk_60 = 200.0f;
|
|
work->unk_64[0].x = 0.5f * (lbl_1_data_150[0].x + lbl_1_data_150[1].x);
|
|
work->unk_64[0].y = 0.5f * (lbl_1_data_150[0].y + lbl_1_data_150[1].y);
|
|
work->unk_64[0].z = 0.5f * (lbl_1_data_150[0].z + lbl_1_data_150[1].z);
|
|
work->unk_64[1] = work->unk_64[0];
|
|
work->unk_7C = work->unk_64[0];
|
|
work->unk_88 = work->unk_64[1];
|
|
work->unk_94.x = work->unk_94.y = work->unk_94.z = 0.0f;
|
|
work->unk_A0.x = work->unk_A0.y = work->unk_A0.z = 0.0f;
|
|
work->unk_AC.x = work->unk_AC.y = work->unk_AC.z = 0.0f;
|
|
for (var_r30 = 0; var_r30 < 2; var_r30++) {
|
|
var_r27 = lbl_1_bss_50[var_r30 + (var_r28 * 2)];
|
|
work->unk_08[var_r30] = var_r27;
|
|
work->unk_00[var_r30] = lbl_1_bss_2B8[var_r27] = omAddObjEx(lbl_1_bss_2D0, 0x41, 2, 0xC, -1, fn_1_B43C);
|
|
work->unk_00[var_r30]->data = NULL;
|
|
work->unk_00[var_r30]->work[0] = var_r27;
|
|
work->unk_00[var_r30]->work[1] = work->unk_0C;
|
|
work->unk_00[var_r30]->work[2] = var_r30;
|
|
}
|
|
object->model[0] = fn_1_FB8C(&lbl_1_data_150[0], &lbl_1_data_150[1], 400.0f, 0x30, work->unk_0C);
|
|
if (work->unk_0C == 0) {
|
|
Hu3DModelCameraSet(object->model[0], 1);
|
|
}
|
|
else {
|
|
Hu3DModelCameraSet(object->model[0], 2);
|
|
}
|
|
object->func = fn_1_A4C8;
|
|
}
|
|
|
|
void fn_1_A4C8(omObjData *object)
|
|
{
|
|
Vec sp50;
|
|
Vec sp44;
|
|
Vec sp38;
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
float var_f25;
|
|
M428DllPlayerWork *var_r31;
|
|
M428DllPlayerWork2 *var_r30;
|
|
M428DllPlayerWork2 *var_r29;
|
|
s32 var_r27;
|
|
s32 var_r26;
|
|
s32 var_r25;
|
|
s32 var_r24;
|
|
s32 var_r23;
|
|
s32 var_r22;
|
|
s32 var_r21;
|
|
|
|
var_r22 = 0;
|
|
var_r24 = 0;
|
|
var_r23 = 0;
|
|
var_r31 = object->data;
|
|
var_r30 = var_r31->unk_00[0]->data;
|
|
var_r29 = var_r31->unk_00[1]->data;
|
|
if (!var_r30 || !var_r29) {
|
|
return;
|
|
}
|
|
if ((fn_1_26E0() < 7) || (lbl_1_bss_2A4 == 0)) {
|
|
sp50.x = var_r30->unk_90.x;
|
|
sp50.y = var_r30->unk_90.y;
|
|
sp50.z = var_r30->unk_90.z;
|
|
sp44.x = var_r29->unk_90.x;
|
|
sp44.y = var_r29->unk_90.y;
|
|
sp44.z = var_r29->unk_90.z;
|
|
VECAdd(&sp50, &sp44, &sp2C);
|
|
VECScale(&sp2C, &sp2C, 0.5f);
|
|
var_r21 = fn_1_10788(object->model[0], &sp50, &sp44, &sp38);
|
|
if (var_r21 != -1) {
|
|
if (var_r31->unk_38 != var_r21) {
|
|
var_r31->unk_38 = var_r21;
|
|
var_r31->unk_3C = sp38;
|
|
var_r23 = 1;
|
|
}
|
|
else {
|
|
var_r23 = 0;
|
|
}
|
|
var_r31->unk_64[1] = var_r31->unk_3C;
|
|
var_r31->unk_64[0] = var_r31->unk_64[1];
|
|
var_f31 = var_r31->unk_4C[0] + var_r31->unk_4C[1];
|
|
if (var_f31 >= 400.0f) {
|
|
if (var_r23 != 0) {
|
|
var_r31->unk_48 = var_f31;
|
|
}
|
|
else {
|
|
var_r31->unk_48 + (400.0f - var_r31->unk_48) * 0.01f; // bug
|
|
(void)var_r22;
|
|
}
|
|
var_f31 = 1.0f / var_f31;
|
|
var_r31->unk_54[0] = var_r31->unk_48 * (var_r31->unk_4C[0] * var_f31);
|
|
var_r31->unk_54[1] = var_r31->unk_48 * (var_r31->unk_4C[1] * var_f31);
|
|
}
|
|
else {
|
|
var_f31 = 1.0f / var_f31;
|
|
var_r31->unk_54[0] = 400.0f * (var_r31->unk_4C[0] * var_f31);
|
|
var_r31->unk_54[1] = 400.0f * (var_r31->unk_4C[1] * var_f31);
|
|
var_r31->unk_48 = 400.0f;
|
|
}
|
|
var_f31 = var_r31->unk_54[0] + var_r31->unk_54[1];
|
|
var_r26 = 48.0f * (var_r31->unk_54[0] / var_f31);
|
|
if (var_r26 < 1) {
|
|
var_r26 = 1;
|
|
}
|
|
else if (var_r26 > 0x2E) {
|
|
var_r26 = 0x2E;
|
|
}
|
|
fn_1_10590(object->model[0], 1, var_r26, &var_r31->unk_3C);
|
|
var_f31 = (var_r31->unk_4C[0] + var_r31->unk_4C[1]) / var_r31->unk_48;
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
fn_1_105E8(object->model[0], 1.0f - var_f31, 1.0f - var_f31);
|
|
}
|
|
else {
|
|
var_r31->unk_38 = -1;
|
|
fn_1_10590(object->model[0], 0, 0x18, &var_r31->unk_3C);
|
|
var_f31 = (var_r31->unk_4C[0] + var_r31->unk_4C[1]) / 400.0f;
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
fn_1_105E8(object->model[0], 1.0f - var_f31, 1.0f - var_f31);
|
|
var_r31->unk_48 = 400.0f;
|
|
var_r31->unk_64[1] = sp2C;
|
|
var_r31->unk_64[0] = var_r31->unk_64[1];
|
|
var_r31->unk_54[0] = 200.0f;
|
|
var_r31->unk_54[1] = 200.0f;
|
|
}
|
|
var_r31->unk_54[0] = var_r31->unk_5C + (0.01f * (var_r31->unk_54[0] - var_r31->unk_5C));
|
|
var_r31->unk_54[1] = var_r31->unk_60 + (0.01f * (var_r31->unk_54[1] - var_r31->unk_60));
|
|
fn_1_129B4(0.1f, &var_r31->unk_64[2], &var_r31->unk_64[0], &var_r31->unk_64[0]);
|
|
fn_1_129B4(0.1f, &var_r31->unk_88, &var_r31->unk_64[1], &var_r31->unk_64[1]);
|
|
var_r31->unk_5C = var_r31->unk_54[0];
|
|
var_r31->unk_60 = var_r31->unk_54[1];
|
|
var_r31->unk_7C = var_r31->unk_64[0];
|
|
var_r31->unk_88 = var_r31->unk_64[1];
|
|
if (var_r31->unk_38 != -1) {
|
|
var_r31->unk_94 = var_r31->unk_64[0];
|
|
var_r31->unk_A0 = var_r31->unk_64[1];
|
|
}
|
|
else if (var_r30->unk_20 == 4) {
|
|
var_r31->unk_94 = var_r29->unk_90;
|
|
var_r31->unk_A0 = var_r30->unk_90;
|
|
}
|
|
else if (var_r29->unk_20 == 4) {
|
|
var_r31->unk_94 = var_r30->unk_90;
|
|
var_r31->unk_A0 = var_r29->unk_90;
|
|
}
|
|
else {
|
|
var_r31->unk_94 = var_r31->unk_64[0];
|
|
var_r31->unk_A0 = var_r31->unk_64[1];
|
|
}
|
|
if (lbl_1_bss_29C[var_r31->unk_0C] == 5) {
|
|
var_r24 = 1;
|
|
}
|
|
if ((fn_1_26E0() != 4) || (var_r31->unk_18 != 0)) {
|
|
var_r24 = 0;
|
|
}
|
|
if (var_r24 != 0) {
|
|
var_r27 = -1;
|
|
if ((var_r30->unk_20 == 2) && (var_r29->unk_20 == 3)) {
|
|
var_r27 = 0;
|
|
}
|
|
else if ((var_r30->unk_20 == 3) && (var_r29->unk_20 == 2)) {
|
|
var_r27 = 1;
|
|
}
|
|
else if ((var_r30->unk_20 == 2) && (var_r29->unk_20 == 2)) {
|
|
if (sp50.y > sp44.y) {
|
|
var_r27 = 0;
|
|
}
|
|
else {
|
|
var_r27 = 1;
|
|
}
|
|
}
|
|
if (var_r27 == 0) {
|
|
var_r30->unk_20 = 4;
|
|
var_r30->unk_22 = 0;
|
|
var_r30->unk_34 = 0;
|
|
var_r30->unk_38 = 0;
|
|
var_r30->unk_3C.x = 0.0f;
|
|
var_r30->unk_3C.y = var_r30->unk_3C.z = 0.0f;
|
|
var_r31->unk_2C = sp50.y;
|
|
var_r31->unk_AC = sp50;
|
|
var_r31->unk_34 = 0.0f;
|
|
}
|
|
else if (var_r27 == 1) {
|
|
var_r29->unk_20 = 4;
|
|
var_r29->unk_22 = 0;
|
|
var_r29->unk_34 = 0;
|
|
var_r29->unk_38 = 0;
|
|
var_r29->unk_3C.x = 0.0f;
|
|
var_r29->unk_3C.y = var_r29->unk_3C.z = 0.0f;
|
|
var_r31->unk_2C = sp44.y;
|
|
var_r31->unk_AC = sp44;
|
|
var_r31->unk_34 = 0.0f;
|
|
}
|
|
}
|
|
if ((var_r30->unk_20 == 4) || (var_r29->unk_20 == 4)) {
|
|
var_r31->unk_24 = 1;
|
|
var_r31->unk_28 = 1;
|
|
}
|
|
else {
|
|
var_r31->unk_24 = 0;
|
|
}
|
|
if (lbl_1_bss_29C[var_r31->unk_0C] != 5) {
|
|
var_r31->unk_28 = 0;
|
|
}
|
|
sp50.x = var_r30->unk_90.x;
|
|
sp50.y = var_r30->unk_90.y;
|
|
sp50.z = var_r30->unk_90.z;
|
|
sp44.x = var_r29->unk_90.x;
|
|
sp44.y = var_r29->unk_90.y;
|
|
sp44.z = var_r29->unk_90.z;
|
|
fn_1_10530(object->model[0], &sp50, &sp44);
|
|
if (var_r31->unk_00[0]->trans.y > var_r31->unk_00[1]->trans.y) {
|
|
var_r31->unk_1C = var_r31->unk_00[0]->trans.y;
|
|
var_r31->unk_10 = 0;
|
|
}
|
|
else if (var_r31->unk_00[1]->trans.y > var_r31->unk_00[0]->trans.y) {
|
|
var_r31->unk_1C = var_r31->unk_00[1]->trans.y;
|
|
var_r31->unk_10 = 1;
|
|
}
|
|
else {
|
|
var_r25 = frand() & 1;
|
|
var_r31->unk_1C = var_r31->unk_00[var_r25]->trans.y;
|
|
var_r31->unk_10 = var_r25;
|
|
}
|
|
fn_1_118A8(var_r31->unk_0C, var_r31->unk_1C / 3800.0f);
|
|
if (fn_1_26E0() == 4) {
|
|
sp50.x = var_r31->unk_00[0]->trans.x;
|
|
sp50.y = var_r31->unk_00[0]->trans.y;
|
|
sp50.z = var_r31->unk_00[0]->trans.z;
|
|
sp44.x = var_r31->unk_00[1]->trans.x;
|
|
sp44.y = var_r31->unk_00[1]->trans.y;
|
|
sp44.z = var_r31->unk_00[1]->trans.z;
|
|
VECAdd(&sp50, &sp44, &sp2C);
|
|
VECScale(&sp2C, &sp2C, 0.5f);
|
|
VECSubtract(&sp50, &sp44, &sp20);
|
|
sp20.z = 0.0f;
|
|
var_f29 = VECMag(&sp20);
|
|
if (var_f29 < 100.0f) {
|
|
var_f27 = 0.0f;
|
|
}
|
|
else if (var_f29 >= 300.0f) {
|
|
var_f27 = 1.0f;
|
|
}
|
|
else {
|
|
var_f27 = (var_f29 - 100.0f) / 200.0f;
|
|
}
|
|
var_f29 = 1500.0f + (500.0f * var_f27);
|
|
var_f28 = sp2C.x;
|
|
if (var_f28 > 400.0f) {
|
|
var_f28 = 400.0f;
|
|
}
|
|
else if (var_f28 < -400.0f) {
|
|
var_f28 = -400.0f;
|
|
}
|
|
var_f26 = sp2C.y;
|
|
if (var_f26 < 400.0f) {
|
|
var_f26 = 400.0f;
|
|
}
|
|
var_f25 = var_r31->unk_1C;
|
|
if (var_f25 < 20.0f) {
|
|
var_f30 = 0.0f;
|
|
}
|
|
else {
|
|
var_f30 = (var_f25 - 20.0f) / 3780.0f;
|
|
if (var_f30 >= 1.0f) {
|
|
var_f30 = 1.0f;
|
|
}
|
|
}
|
|
sp14.x = var_f28;
|
|
sp14.y = var_f26;
|
|
sp14.z = 0.0f;
|
|
sp8.x = 70.0f * var_f30;
|
|
sp8.y = 0.0f;
|
|
sp8.z = 0.0f;
|
|
if (var_r31->unk_C4 > 0) {
|
|
var_f30 = var_r31->unk_C8 * ((float)var_r31->unk_C0 / var_r31->unk_C4);
|
|
var_r25 = (var_r31->unk_C0 * 0x2D) % 360;
|
|
var_f30 = var_f30 * sind(var_r25);
|
|
var_f30 = var_f30;
|
|
sp14.x += var_f30;
|
|
sp14.y += var_f30;
|
|
if (--var_r31->unk_C0 <= 0) {
|
|
var_r31->unk_C0 = var_r31->unk_C4 = 0;
|
|
}
|
|
var_r22 = 1;
|
|
}
|
|
if (var_r22 == 0) {
|
|
fn_1_9A30(var_r31->unk_0C, 12.0f, &sp14, &sp8, var_f29);
|
|
}
|
|
else {
|
|
fn_1_9A30(var_r31->unk_0C, 3.0f, &sp14, &sp8, var_f29);
|
|
}
|
|
}
|
|
if (var_r31->unk_BC != -1) {
|
|
if (var_r31->unk_BC == 0) {
|
|
var_r31->unk_B8++;
|
|
if (var_r31->unk_B8 == 1) {
|
|
omVibrate(var_r31->unk_08[0], 0xC, 6, 6);
|
|
omVibrate(var_r31->unk_08[1], 0xC, 6, 6);
|
|
return;
|
|
}
|
|
if (var_r31->unk_B8 >= 45.0f) {
|
|
var_r31->unk_B8 = 0;
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_B8++;
|
|
if (var_r31->unk_B8 == 1) {
|
|
omVibrate(var_r31->unk_08[0], 0xC, 0xC, 0);
|
|
omVibrate(var_r31->unk_08[1], 0xC, 0xC, 0);
|
|
return;
|
|
}
|
|
if (var_r31->unk_B8 >= 6.0f) {
|
|
var_r31->unk_B8 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
switch (fn_1_26E0()) {
|
|
case 7:
|
|
if (lbl_1_bss_2A4 != 0) {
|
|
if (var_r31->unk_14 != 0) {
|
|
var_r30->unk_20 = 7;
|
|
var_r30->unk_22 = 0;
|
|
var_r29->unk_20 = 7;
|
|
var_r29->unk_22 = 0;
|
|
}
|
|
else {
|
|
var_r30->unk_20 = 9;
|
|
var_r30->unk_22 = 0;
|
|
var_r29->unk_20 = 9;
|
|
var_r29->unk_22 = 0;
|
|
}
|
|
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
|
|
}
|
|
break;
|
|
case 8:
|
|
break;
|
|
case 9:
|
|
if ((var_r31->unk_14 != 0) && (lbl_1_bss_2A4 != 0)) {
|
|
var_r30->unk_20 = 8;
|
|
var_r30->unk_22 = 0;
|
|
var_r29->unk_20 = 8;
|
|
var_r29->unk_22 = 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_B3D4(omObjData *object)
|
|
{
|
|
s32 var_r31;
|
|
M428DllPlayerWork *work = object->data;
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
fn_1_E5F4(work->unk_00[var_r31]);
|
|
work->unk_00[var_r31] = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_B43C(omObjData *object)
|
|
{
|
|
M428DllPlayerWork2 *var_r31;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
u32 var_r27;
|
|
M428DllPlayerWork *var_r26;
|
|
u32 var_r25;
|
|
u32 var_r24;
|
|
|
|
var_r27 = object->work[0];
|
|
var_r25 = object->work[1];
|
|
var_r24 = object->work[2];
|
|
var_r26 = &lbl_1_bss_2AC[var_r25];
|
|
var_r31 = object->data = &lbl_1_bss_2A8[var_r27];
|
|
var_r31->unk_00 = var_r27;
|
|
var_r31->unk_02 = var_r25;
|
|
var_r31->unk_04 = var_r24;
|
|
var_r31->unk_06 = GWPlayerCfg[var_r27].character;
|
|
var_r31->unk_08 = GWPlayerCfg[var_r27].pad_idx;
|
|
var_r31->unk_0A = GWPlayerCfg[var_r27].iscom;
|
|
var_r31->unk_0C = GWPlayerCfg[var_r27].diff;
|
|
if ((var_r31->unk_0A == 0) && ((lbl_1_data_640[var_r31->unk_08] & HuPadRumbleGet()) == 0)) {
|
|
lbl_1_bss_18 = 0;
|
|
}
|
|
if (var_r31->unk_0A != 0) {
|
|
var_r26->unk_0E = var_r26->unk_0E | (1 << var_r31->unk_04);
|
|
}
|
|
var_r31->unk_0E = var_r31->unk_10 = 0;
|
|
var_r31->unk_14 = var_r31->unk_18 = 0.0f;
|
|
var_r31->unk_1C = -1;
|
|
var_r31->unk_1E = 4;
|
|
var_r31->unk_20 = 0;
|
|
var_r31->unk_22 = var_r31->unk_24 = 0;
|
|
var_r31->unk_26 = 0;
|
|
var_r31->unk_28 = 200.0f;
|
|
var_r31->unk_2C = var_r31->unk_28;
|
|
var_r31->unk_30 = 0;
|
|
var_r31->unk_34 = 0;
|
|
var_r31->unk_38 = 0;
|
|
var_r31->unk_3C.x = var_r31->unk_3C.y = var_r31->unk_3C.z = 0.0f;
|
|
var_r31->unk_48.x = var_r31->unk_48.y = var_r31->unk_48.z = 0.0f;
|
|
var_r31->unk_54.x = 0.0f;
|
|
var_r31->unk_54.z = 0.0f;
|
|
var_r31->unk_54.y = 75.0f;
|
|
mtxRot(var_r31->unk_60, 0.0f, 0.0f, 0.0f);
|
|
mtxTransCat(var_r31->unk_60, lbl_1_data_5E0[var_r31->unk_06].x, lbl_1_data_5E0[var_r31->unk_06].y, lbl_1_data_5E0[var_r31->unk_06].z);
|
|
var_r31->unk_90.x = lbl_1_data_150[var_r31->unk_04].x;
|
|
var_r31->unk_90.y = 80.0f + lbl_1_data_150[var_r31->unk_04].y;
|
|
var_r31->unk_90.z = lbl_1_data_150[var_r31->unk_04].z;
|
|
strcpy(var_r31->unk_9C, MakeObjectName(CharModelHookNameGet(var_r31->unk_06, 4, 4)));
|
|
var_r31->unk_19C = -1;
|
|
var_r31->unk_1A0 = 30.0f * ((frand() & 0x7FFF) % 5);
|
|
var_r31->unk_1A4 = 0;
|
|
var_r31->unk_1A8 = 0;
|
|
var_r31->unk_1AC = 0.0f;
|
|
var_r31->unk_1B0 = 0;
|
|
var_r31->unk_1B4 = 0;
|
|
var_r31->unk_1B8.x = 0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f));
|
|
var_r31->unk_1B8.y = 0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f));
|
|
var_r31->unk_1B8.z = 0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f));
|
|
var_r29 = CharModelCreate(var_r31->unk_06, 4);
|
|
object->model[0] = var_r29;
|
|
if (var_r31->unk_02 == 0) {
|
|
Hu3DModelCameraSet(var_r29, 1);
|
|
fn_1_4170(var_r29, 1);
|
|
}
|
|
else {
|
|
Hu3DModelCameraSet(var_r29, 2);
|
|
fn_1_4170(var_r29, 2);
|
|
}
|
|
Hu3DModelLayerSet(var_r29, 2);
|
|
CharModelStepTypeSet(var_r31->unk_06, 0);
|
|
if (var_r31->unk_02 == 0) {
|
|
var_r29 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M428, 0x07));
|
|
object->model[1] = var_r29;
|
|
Hu3DModelCameraSet(var_r29, 1);
|
|
}
|
|
else {
|
|
var_r29 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M428, 0x08));
|
|
object->model[1] = var_r29;
|
|
Hu3DModelCameraSet(var_r29, 2);
|
|
}
|
|
Hu3DModelLayerSet(var_r29, 2);
|
|
for (var_r28 = 0; var_r28 < 0xC; var_r28++) {
|
|
if (lbl_1_data_500[var_r28].unk_00 != 0xFFFFFFFF) {
|
|
object->motion[var_r28] = CharModelMotionCreate(var_r31->unk_06, lbl_1_data_500[var_r28].unk_00);
|
|
}
|
|
else {
|
|
object->motion[var_r28] = Hu3DJointMotionFile(object->model[0], lbl_1_data_560[lbl_1_data_500[var_r28].unk_04][var_r31->unk_06]);
|
|
}
|
|
}
|
|
var_r31->unk_1C = 3;
|
|
CharModelMotionSet(var_r31->unk_06, object->motion[var_r31->unk_1C]);
|
|
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
|
|
CharModelMotionDataClose(var_r31->unk_06);
|
|
object->trans.x = var_r31->unk_48.x = lbl_1_data_150[var_r31->unk_04].x;
|
|
object->trans.y = var_r31->unk_48.y = lbl_1_data_150[var_r31->unk_04].y;
|
|
object->trans.z = var_r31->unk_48.z = lbl_1_data_150[var_r31->unk_04].z;
|
|
object->rot.x = object->rot.z = 0.0f;
|
|
object->rot.y = 180.0f;
|
|
object->func = fn_1_BBD0;
|
|
}
|
|
|
|
void fn_1_BBD0(omObjData *object)
|
|
{
|
|
Mtx sp104;
|
|
Vec spF8;
|
|
Vec spEC;
|
|
Vec spE0;
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f27;
|
|
float var_f26;
|
|
float var_f25;
|
|
float var_f24;
|
|
float var_f23;
|
|
float var_f22;
|
|
M428DllPlayerWork2 *var_r31;
|
|
M428DllPlayerWork *var_r29;
|
|
omObjData *var_r28;
|
|
M428DllPlayerWork2 *var_r27;
|
|
s32 var_r26;
|
|
ModelData *var_r25;
|
|
s32 var_r24;
|
|
s32 var_r23;
|
|
s32 var_r22;
|
|
s32 var_r21;
|
|
s32 var_r20;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = &lbl_1_bss_2AC[var_r31->unk_02];
|
|
var_r22 = var_r31->unk_04 ^ 1;
|
|
var_r28 = var_r29->unk_00[var_r22];
|
|
var_r27 = var_r28->data;
|
|
if (fn_1_26E0() == 4) {
|
|
if (var_r31->unk_0A != 0) {
|
|
var_r31->unk_0E = var_r31->unk_10 = 0;
|
|
var_r31->unk_14 = var_r31->unk_18 = 0.0f;
|
|
fn_1_E600(object);
|
|
}
|
|
else {
|
|
var_r31->unk_0E = HuPadBtnDown[var_r31->unk_08];
|
|
var_r31->unk_10 = HuPadBtn[var_r31->unk_08];
|
|
var_r31->unk_14 = HuPadStkX[var_r31->unk_08];
|
|
var_r31->unk_18 = HuPadStkY[var_r31->unk_08];
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_0E = var_r31->unk_10 = 0;
|
|
var_r31->unk_14 = var_r31->unk_18 = 0.0f;
|
|
}
|
|
switch (var_r31->unk_20) {
|
|
case 0:
|
|
var_r31->unk_20 = 1;
|
|
var_r31->unk_22 = 0;
|
|
break;
|
|
case 1:
|
|
if (object->trans.y < 0.0f) {
|
|
object->trans.y += 1.6f;
|
|
var_r26 = 3;
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r31->unk_1C = var_r26;
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0x40000001);
|
|
}
|
|
}
|
|
else {
|
|
object->trans.y = 0.0f;
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
}
|
|
spF8 = var_r31->unk_90;
|
|
VECSubtract(&spF8, &var_r29->unk_64[var_r31->unk_04], &spEC);
|
|
var_r31->unk_30 = 0;
|
|
var_f31 = VECMag(&spEC);
|
|
var_r29->unk_4C[var_r31->unk_04] = var_f31;
|
|
spF8.x = object->trans.x + var_r31->unk_54.x;
|
|
spF8.y = object->trans.y + var_r31->unk_54.y;
|
|
spF8.z = object->trans.z + var_r31->unk_54.z;
|
|
if (fn_1_9990(&spF8) != 0) {
|
|
object->trans.z = 50.0f + spF8.z;
|
|
}
|
|
if (fn_1_26E0() >= 4) {
|
|
var_r31->unk_20 = 2;
|
|
var_r31->unk_22 = 0;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (((var_r31->unk_0E & 0x100) != 0) || (var_r29->unk_24 != 0) || (var_r29->unk_28 != 0)) {
|
|
if (var_r31->unk_1C == 4) {
|
|
var_r31->unk_1E = 5;
|
|
}
|
|
else {
|
|
var_r31->unk_1E = 4;
|
|
}
|
|
var_r31->unk_26 = 0;
|
|
var_r31->unk_20 = 3;
|
|
var_r31->unk_22 = 0;
|
|
}
|
|
else {
|
|
if (fabs(var_r31->unk_14) >= 8.0) {
|
|
var_f27 = 0.025f * var_r31->unk_14;
|
|
}
|
|
else {
|
|
var_f27 = 0.0f;
|
|
}
|
|
if (fabs(var_r31->unk_18) >= 8.0) {
|
|
var_f24 = 0.025f * var_r31->unk_18;
|
|
}
|
|
else {
|
|
var_f24 = 0.0f;
|
|
}
|
|
spE0.x = var_f27;
|
|
spE0.y = var_f24;
|
|
spE0.z = 0.0f;
|
|
if (VECMag(&spE0) > 0.0f) {
|
|
spF8.x = object->trans.x + var_r31->unk_54.x;
|
|
spF8.y = object->trans.y + var_r31->unk_54.y;
|
|
spF8.z = object->trans.z + var_r31->unk_54.z;
|
|
if (fn_1_F288(&spF8, &spE0, 75.0f) != 0) {
|
|
object->trans.x += spE0.x;
|
|
object->trans.y += spE0.y;
|
|
}
|
|
else {
|
|
object->trans.x = spF8.x - var_r31->unk_54.x;
|
|
object->trans.y = spF8.y - var_r31->unk_54.y;
|
|
}
|
|
if ((var_r27->unk_20 == 2) || (var_r27->unk_20 == 3)) {
|
|
spE0.x = (object->trans.x + var_r31->unk_54.x) - (var_r28->trans.x + var_r27->unk_54.x);
|
|
spE0.y = (object->trans.y + var_r31->unk_54.y) - (var_r28->trans.y + var_r27->unk_54.y);
|
|
spE0.z = (object->trans.z + var_r31->unk_54.z) - (var_r28->trans.z + var_r27->unk_54.z);
|
|
var_f30 = VECMag(&spE0);
|
|
if (var_f30 <= 200.0f) {
|
|
if (var_f30 <= 0.0f) {
|
|
spE0.y = -1.0f;
|
|
}
|
|
VECNormalize(&spE0, &spE0);
|
|
VECScale(&spE0, &spE0, 200.0f);
|
|
object->trans.x = spE0.x + (var_r28->trans.x + var_r27->unk_54.x);
|
|
object->trans.y = spE0.y + (var_r28->trans.y + var_r27->unk_54.x);
|
|
object->trans.z = spE0.z + (var_r28->trans.z + var_r27->unk_54.x);
|
|
}
|
|
}
|
|
}
|
|
spF8 = var_r31->unk_90;
|
|
VECSubtract(&spF8, &var_r29->unk_64[var_r31->unk_04], &spEC);
|
|
var_r31->unk_30 = 0;
|
|
var_f31 = VECMag(&spEC);
|
|
var_r29->unk_4C[var_r31->unk_04] = var_f31;
|
|
if (var_f31 > var_r29->unk_54[var_r31->unk_04]) {
|
|
var_r31->unk_30 = 1;
|
|
VECNormalize(&spEC, &spEC);
|
|
VECScale(&spEC, &spEC, var_r29->unk_54[var_r31->unk_04]);
|
|
VECAdd(&var_r29->unk_64[var_r31->unk_04], &spEC, &spF8);
|
|
object->trans.x += spF8.x - var_r31->unk_90.x;
|
|
object->trans.y += spF8.y - var_r31->unk_90.y;
|
|
object->trans.z += spF8.z - var_r31->unk_90.z;
|
|
var_r20 = 1;
|
|
}
|
|
if ((var_r20 != 0) || (object->trans.x != var_r31->unk_48.x) || (object->trans.y != var_r31->unk_48.y)) {
|
|
spF8.x = var_r31->unk_48.x + var_r31->unk_54.x;
|
|
spF8.y = var_r31->unk_48.y + var_r31->unk_54.y;
|
|
spF8.z = var_r31->unk_48.z + var_r31->unk_54.z;
|
|
spE0.x = (object->trans.x + var_r31->unk_54.x) - spF8.x;
|
|
spE0.y = (object->trans.y + var_r31->unk_54.y) - spF8.y;
|
|
spE0.z = (object->trans.z + var_r31->unk_54.z) - spF8.z;
|
|
if (fn_1_F288(&spF8, &spE0, 75.0f) == 0) {
|
|
object->trans.x = spF8.x - var_r31->unk_54.x;
|
|
object->trans.y = spF8.y - var_r31->unk_54.y;
|
|
var_r20 = 1;
|
|
}
|
|
}
|
|
if (object->trans.x < -700.0f) {
|
|
object->trans.x = -700.0f;
|
|
}
|
|
else if (object->trans.x > 700.0f) {
|
|
object->trans.x = 700.0f;
|
|
}
|
|
if (object->trans.y < -200.0f) {
|
|
object->trans.y = -200.0f;
|
|
}
|
|
spF8.x = object->trans.x + var_r31->unk_54.x;
|
|
spF8.y = object->trans.y + var_r31->unk_54.y;
|
|
spF8.z = object->trans.z + var_r31->unk_54.z;
|
|
if (fn_1_9990(&spF8) != 0) {
|
|
object->trans.z = 50.0f + spF8.z;
|
|
}
|
|
var_f31 = sqrtf((var_r31->unk_14 * var_r31->unk_14) + (var_r31->unk_18 * var_r31->unk_18));
|
|
var_f31 *= 0.02f;
|
|
CharModelMotionSpeedSet(var_r31->unk_06, var_f31);
|
|
if ((var_f27 == 0.0f) && (var_f24 == 0.0f)) {
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
if ((var_r31->unk_1C != 8) && (var_r31->unk_1C != 9) && (var_r31->unk_1C != 6)) {
|
|
var_r26 = var_r31->unk_1C;
|
|
}
|
|
else {
|
|
var_r26 = 4;
|
|
}
|
|
var_f22 = object->rot.z;
|
|
}
|
|
else {
|
|
if (fabs(var_f27) > (2.0 * fabs(var_f24))) {
|
|
if (var_f27 > 0.0f) {
|
|
var_r26 = 4;
|
|
}
|
|
else {
|
|
var_r26 = 5;
|
|
}
|
|
var_f22 = 0.0f;
|
|
}
|
|
else {
|
|
var_r26 = 3;
|
|
if (var_f24 > 0.0f) {
|
|
var_f22 = -30.0f * (var_f27 / 1.6f);
|
|
}
|
|
else {
|
|
var_f22 = -(-30.0f * (var_f27 / 1.6f));
|
|
CharModelMotionSpeedSet(var_r31->unk_06, -var_f31);
|
|
}
|
|
}
|
|
}
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r23 = var_r31->unk_1C;
|
|
var_r31->unk_1C = var_r26;
|
|
if (var_r23 != 6) {
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0x40000001);
|
|
}
|
|
else {
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 25.0f, 0x40000001);
|
|
}
|
|
}
|
|
else {
|
|
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
|
|
}
|
|
object->rot.x = 0.0f;
|
|
object->rot.y = 180.0f;
|
|
object->rot.z = fn_1_1236C(var_f22, object->rot.z, 1.25f);
|
|
}
|
|
break;
|
|
case 3:
|
|
spF8 = var_r31->unk_90;
|
|
VECSubtract(&spF8, &var_r29->unk_64[var_r31->unk_04], &spEC);
|
|
var_r31->unk_30 = 0;
|
|
var_f31 = VECMag(&spEC);
|
|
var_r29->unk_4C[var_r31->unk_04] = var_f31;
|
|
if (fn_1_26E0() != 4) {
|
|
var_r31->unk_10 = 0;
|
|
var_r31->unk_26 = 0;
|
|
}
|
|
if (((var_r31->unk_10 & 0x100) != 0) || (var_r29->unk_24 != 0) || (var_r29->unk_28 != 0) || (var_r31->unk_26 != 0)) {
|
|
if (var_r31->unk_26 > 0) {
|
|
var_r31->unk_26--;
|
|
}
|
|
if (var_r29->unk_24 != 0) {
|
|
if (fabs(var_r29->unk_34) > 0.0) {
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
var_r29->unk_A0.z = object->trans.z;
|
|
VECSubtract(&var_r29->unk_A0, &spF8, &spEC);
|
|
var_f30 = VECMag(&spEC);
|
|
if (var_f30 < var_r29->unk_34) {
|
|
var_r29->unk_34 = var_f30;
|
|
}
|
|
if (var_f30 > 0.0f) {
|
|
VECNormalize(&spEC, &spEC);
|
|
VECScale(&spEC, &spEC, var_r29->unk_34);
|
|
VECAdd(&spF8, &var_r31->unk_54, &spF8);
|
|
if (fn_1_F288(&spF8, &spEC, 75.0f) != 0) {
|
|
for (var_r24 = 0; var_r24 < 6; var_r24++) {
|
|
spF8.x = object->trans.x + (0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f)));
|
|
spF8.y = 100.0f + object->trans.y + 0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f));
|
|
spF8.z = object->trans.z - 47.5f;
|
|
var_f31 = -22.5f + (45.0f * (0.007874016f * (frand() & 0x7F)));
|
|
spE0.x = 2.5 * sind(var_f31);
|
|
spE0.y = 2.5 * cosd(var_f31);
|
|
spE0.z = 0.0f;
|
|
fn_1_11DE4(var_r29->unk_0C, spF8, spE0, 50.0f, 5.0f, 100.0f, 0.5f, lbl_1_data_650);
|
|
}
|
|
object->trans.x += spEC.x;
|
|
object->trans.y += spEC.y;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
if (fn_1_9990(&spF8) != 0) {
|
|
object->trans.z = 50.0f + spF8.z;
|
|
}
|
|
if (object->trans.x < -700.0f) {
|
|
object->trans.x = -700.0f;
|
|
}
|
|
else if (object->trans.x > 700.0f) {
|
|
object->trans.x = 700.0f;
|
|
}
|
|
if (object->trans.y < -200.0f) {
|
|
object->trans.y = -200.0f;
|
|
}
|
|
if (lbl_1_bss_29C[var_r29->unk_0C] == 5) {
|
|
var_r26 = 6;
|
|
if ((object->rot.z > 180.0f) || (object->rot.z < 45.0f)) {
|
|
object->rot.z += 5.0f;
|
|
}
|
|
if (object->rot.z >= 360.0f) {
|
|
object->rot.z -= 360.0f;
|
|
}
|
|
}
|
|
else {
|
|
var_r26 = var_r31->unk_1E;
|
|
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP);
|
|
}
|
|
if ((var_r26 != var_r31->unk_1C) && (var_r26 != -1) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r23 = var_r31->unk_1C;
|
|
var_r31->unk_1C = var_r26;
|
|
if (var_r31->unk_1C != 6) {
|
|
if (var_r23 != 6) {
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0);
|
|
}
|
|
else {
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 25.0f, 0);
|
|
}
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
}
|
|
else {
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0x40000001);
|
|
}
|
|
}
|
|
if ((var_r31->unk_1C != 6) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
CharModelMotionTimeSet(var_r31->unk_06, 0.0f);
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
}
|
|
if (var_r31->unk_1C == 6) {
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 2.0f);
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_20 = 2;
|
|
var_r31->unk_22 = 0;
|
|
}
|
|
break;
|
|
case 4:
|
|
spF8 = var_r31->unk_90;
|
|
VECSubtract(&spF8, &var_r29->unk_64[var_r31->unk_04], &spEC);
|
|
var_r31->unk_30 = 0;
|
|
var_f31 = VECMag(&spEC);
|
|
var_r29->unk_4C[var_r31->unk_04] = var_f31;
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
var_r31->unk_3C.y -= 0.65333337f;
|
|
if (var_r29->unk_38 == -1) {
|
|
var_r29->unk_30 = 400.0f;
|
|
var_r29->unk_94.x = var_r28->trans.x + var_r27->unk_54.x;
|
|
var_r29->unk_94.y = var_r28->trans.y + var_r27->unk_54.y;
|
|
var_r29->unk_94.z = var_r28->trans.z + var_r27->unk_54.z;
|
|
}
|
|
else {
|
|
var_r29->unk_30 = var_r29->unk_48 - var_r29->unk_54[var_r22];
|
|
}
|
|
VECAdd(&spF8, &var_r31->unk_54, &spF8);
|
|
if ((fn_1_F288(&spF8, &var_r31->unk_3C, 75.0f) != 0) && ((object->trans.y + var_r31->unk_3C.y) >= -200.0f)) {
|
|
spF8.x = object->trans.x + var_r31->unk_3C.x;
|
|
spF8.y = object->trans.y + var_r31->unk_3C.y;
|
|
spF8.z = object->trans.z + var_r31->unk_3C.z;
|
|
if (object->trans.x < -700.0f) {
|
|
object->trans.x = -700.0f;
|
|
}
|
|
else if (object->trans.x > 700.0f) {
|
|
object->trans.x = 700.0f;
|
|
}
|
|
if (object->trans.y < -200.0f) {
|
|
object->trans.y = -200.0f;
|
|
}
|
|
VECSubtract(&spF8, &var_r29->unk_94, &spEC);
|
|
var_f31 = VECMag(&spEC);
|
|
if (var_f31 > var_r29->unk_30) {
|
|
VECNormalize(&spEC, &spEC);
|
|
VECScale(&spEC, &spEC, var_r29->unk_30);
|
|
VECAdd(&var_r29->unk_94, &spEC, &spF8);
|
|
if (fabs(spEC.x) < 180.0) {
|
|
var_r31->unk_34 = 1;
|
|
}
|
|
}
|
|
object->trans.x = spF8.x;
|
|
object->trans.y = spF8.y;
|
|
object->trans.z = spF8.z;
|
|
}
|
|
else {
|
|
object->trans.x = spF8.x - var_r31->unk_54.x;
|
|
object->trans.y = spF8.y - var_r31->unk_54.y;
|
|
object->trans.z = spF8.z - var_r31->unk_54.z;
|
|
if ((object->trans.y + var_r31->unk_3C.y) >= -200.0f) {
|
|
for (var_r24 = 0; var_r24 < 6; var_r24++) {
|
|
var_f30 = -90.0f + (36.0f * var_r24);
|
|
spF8.x = object->trans.x + (12.5 * sind(var_f30));
|
|
spF8.z = object->trans.z + 12.5 * cosd(var_f30);
|
|
spF8.y = (object->trans.y - 25.0f) + (0.25f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f)));
|
|
var_f31 = -22.5f + (45.0f * (0.007874016f * (frand() & 0x7F)));
|
|
var_f23 = 0.3f + (0.7f * (0.007874016f * (frand() & 0x7F)));
|
|
spE0.x = var_f23 * ((2.5 * sind(var_f30)) + (2.5 * sind(var_f31)));
|
|
spE0.y = var_f23 * (2.5 * cosd(var_f31));
|
|
spE0.z = var_f23 * (2.5 * cosd(var_f30));
|
|
fn_1_11DE4(var_r29->unk_0C, spF8, spE0, 100.0f, 5.0f, 100.0f, 0.5f * var_f23, lbl_1_data_654);
|
|
}
|
|
}
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.x;
|
|
var_r31->unk_38 = 1;
|
|
var_r31->unk_3C.x = var_r31->unk_3C.y = var_r31->unk_3C.z = 0.0f;
|
|
var_r29->unk_34 = 0.0f;
|
|
var_r31->unk_1E = 4;
|
|
var_r31->unk_26 = 0x12;
|
|
var_r31->unk_20 = 5;
|
|
var_r31->unk_22 = 0;
|
|
break;
|
|
}
|
|
if (var_r31->unk_34 == 0) {
|
|
var_r29->unk_34 = 0.0f;
|
|
var_r31->unk_22++;
|
|
var_r31->unk_24 = 0;
|
|
var_f31 = 2.0f * var_r31->unk_22;
|
|
if (var_f31 >= 90.0f) {
|
|
var_f31 = 90.0f;
|
|
}
|
|
if ((object->trans.z = object->trans.z + (10.0 * cosd(var_f31))) >= (150.0f + var_r29->unk_AC.z)) {
|
|
object->trans.z = 150.0f + var_r29->unk_AC.z;
|
|
}
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
if (fn_1_9990(&spF8) != 0) {
|
|
spF8.z += 50.0f;
|
|
}
|
|
else {
|
|
spF8.z = 50.0f;
|
|
}
|
|
if (object->trans.z < spF8.z) {
|
|
object->trans.z = spF8.z;
|
|
}
|
|
var_r26 = 8;
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r31->unk_1C = var_r26;
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0);
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
}
|
|
}
|
|
else {
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
VECSubtract(&spF8, &var_r29->unk_94, &spEC);
|
|
if (fabs(spEC.x) < 100.0) {
|
|
if ((var_r31->unk_3C.y += 0.65333337f) > 0.0f) {
|
|
var_r31->unk_3C.y = 0.0f;
|
|
}
|
|
var_r31->unk_3C.x *= 0.96f;
|
|
var_r31->unk_3C.y *= 0.97f;
|
|
}
|
|
else {
|
|
var_r31->unk_22++;
|
|
}
|
|
var_r29->unk_34 = fabs(0.45f * sqrtf((var_r31->unk_3C.x * var_r31->unk_3C.x) + (var_r31->unk_3C.y * var_r31->unk_3C.y)));
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
if (fn_1_9990(&spF8) != 0) {
|
|
spF8.z += 50.0f;
|
|
}
|
|
else {
|
|
spF8.z = 50.0f;
|
|
}
|
|
if ((object->trans.z -= 5.0f) < spF8.z) {
|
|
object->trans.z = 50.0f + spF8.z;
|
|
}
|
|
var_r26 = 9;
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r31->unk_1C = var_r26;
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0);
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
}
|
|
if (++var_r31->unk_24 > var_r31->unk_22) {
|
|
var_r31->unk_1E = 4;
|
|
var_r31->unk_26 = 0x12;
|
|
var_r31->unk_20 = 5;
|
|
var_r31->unk_22 = 0;
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 5:
|
|
spF8 = var_r31->unk_90;
|
|
VECSubtract(&spF8, &var_r29->unk_64[var_r31->unk_04], &spEC);
|
|
var_r31->unk_30 = 0;
|
|
var_f31 = VECMag(&spEC);
|
|
var_r29->unk_4C[var_r31->unk_04] = var_f31;
|
|
if (var_r31->unk_38 != 0) {
|
|
var_r26 = 7;
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r31->unk_1C = var_r26;
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0);
|
|
CharModelMotionSpeedSet(var_r31->unk_06, 0.0f);
|
|
}
|
|
}
|
|
var_r21 = 0;
|
|
if ((var_r27->unk_20 == 2) || (var_r27->unk_20 == 3)) {
|
|
spE0.x = (object->trans.x + var_r31->unk_54.x) - (var_r28->trans.x + var_r27->unk_54.x);
|
|
spE0.y = (object->trans.y + var_r31->unk_54.y) - (var_r28->trans.y + var_r27->unk_54.y);
|
|
spE0.z = (object->trans.z + var_r31->unk_54.z) - (var_r28->trans.z + var_r27->unk_54.z);
|
|
var_f30 = VECMag(&spE0);
|
|
if (var_f30 <= 200.0f) {
|
|
if (object->trans.x > var_r28->trans.x) {
|
|
var_f30 = 10.0f;
|
|
}
|
|
else {
|
|
var_f30 = -10.0f;
|
|
}
|
|
spF8.x = object->trans.x + var_r31->unk_54.x;
|
|
spF8.y = object->trans.y + var_r31->unk_54.y;
|
|
spF8.z = object->trans.z + var_r31->unk_54.z;
|
|
spE0.x = var_f30;
|
|
spE0.y = spE0.z = 0.0f;
|
|
if (fn_1_F288(&spF8, &spE0, 75.0f) != 0) {
|
|
object->trans.x += spE0.x;
|
|
object->trans.y += spE0.y;
|
|
object->trans.z += spE0.z;
|
|
}
|
|
else {
|
|
object->trans.x = spF8.x - var_r31->unk_54.x;
|
|
object->trans.y = spF8.y - var_r31->unk_54.y;
|
|
object->trans.z = spF8.z - var_r31->unk_54.z;
|
|
}
|
|
spF8.x = var_r28->trans.x + var_r27->unk_54.x;
|
|
spF8.y = var_r28->trans.y + var_r27->unk_54.y;
|
|
spF8.z = var_r28->trans.z + var_r27->unk_54.z;
|
|
spE0.x = -var_f30;
|
|
spE0.y = spE0.z = 0.0f;
|
|
if (fn_1_F288(&spF8, &spE0, 75.0f) != 0) {
|
|
var_r28->trans.x += spE0.x;
|
|
var_r28->trans.y += spE0.y;
|
|
var_r28->trans.z += spE0.z;
|
|
}
|
|
else {
|
|
var_r28->trans.x = spF8.x - var_r27->unk_54.x;
|
|
var_r28->trans.y = spF8.y - var_r27->unk_54.y;
|
|
var_r28->trans.z = spF8.z - var_r27->unk_54.z;
|
|
}
|
|
var_r21 = 1;
|
|
}
|
|
}
|
|
if (object->trans.x < -700.0f) {
|
|
object->trans.x = -700.0f;
|
|
}
|
|
else if (object->trans.x > 700.0f) {
|
|
object->trans.x = 700.0f;
|
|
}
|
|
if (object->trans.y < -200.0f) {
|
|
object->trans.y = -200.0f;
|
|
}
|
|
spF8.x = object->trans.x;
|
|
spF8.y = object->trans.y;
|
|
spF8.z = object->trans.z;
|
|
if (fn_1_9990(&spF8) != 0) {
|
|
spF8.z += 50.0f;
|
|
}
|
|
else {
|
|
spF8.z = 50.0f;
|
|
}
|
|
if ((object->trans.z - spF8.z) > 30.000002f) {
|
|
object->trans.z -= 30.000002f;
|
|
}
|
|
else {
|
|
object->trans.z = spF8.z;
|
|
if (var_r21 == 0) {
|
|
var_r31->unk_20 = 3;
|
|
var_r31->unk_22 = 0;
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
object->trans.x = lbl_1_data_180[var_r31->unk_04].x;
|
|
object->trans.y = lbl_1_data_180[var_r31->unk_04].y;
|
|
object->trans.z = lbl_1_data_180[var_r31->unk_04].z;
|
|
object->rot.x = object->rot.y = object->rot.z = 0.0f;
|
|
var_r25 = &Hu3DData[object->model[0]];
|
|
var_r25->unk_F0[0][3] = 0.0f;
|
|
var_r25->unk_F0[1][3] = 0.0f;
|
|
var_r25->unk_F0[2][3] = 0.0f;
|
|
var_r25 = &Hu3DData[object->model[1]];
|
|
MTXIdentity(var_r25->unk_F0);
|
|
Hu3DModelPosSet(
|
|
object->model[1], lbl_1_data_450[var_r31->unk_04].x, lbl_1_data_450[var_r31->unk_04].y, lbl_1_data_450[var_r31->unk_04].z);
|
|
Hu3DModelRotSet(
|
|
object->model[1], lbl_1_data_480[var_r31->unk_04].x, lbl_1_data_480[var_r31->unk_04].y, lbl_1_data_480[var_r31->unk_04].z);
|
|
if (var_r31->unk_02 == 0) {
|
|
fn_1_4170(object->model[1], 1);
|
|
}
|
|
else {
|
|
fn_1_4170(object->model[1], 2);
|
|
}
|
|
var_r26 = 0;
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r31->unk_1C = var_r26;
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0x40000001);
|
|
}
|
|
break;
|
|
case 8:
|
|
var_r26 = 0xA;
|
|
if ((var_r26 != var_r31->unk_1C) && (CharModelMotionShiftIDGet(var_r31->unk_06) == -1)) {
|
|
var_r31->unk_1C = var_r26;
|
|
CharModelMotionShiftSet(var_r31->unk_06, object->motion[var_r31->unk_1C], 0.0f, 8.0f, 0);
|
|
}
|
|
break;
|
|
case 9:
|
|
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
|
|
break;
|
|
}
|
|
var_r31->unk_48.x = object->trans.x;
|
|
var_r31->unk_48.y = object->trans.y;
|
|
var_r31->unk_48.z = object->trans.z;
|
|
if (var_r31->unk_20 < 7) {
|
|
if (fn_1_13F54(object->model[0], var_r31->unk_9C, sp104, 0) != 0) {
|
|
var_r25 = &Hu3DData[object->model[1]];
|
|
MTXConcat(sp104, var_r31->unk_60, sp104);
|
|
MTXCopy(sp104, var_r25->unk_F0);
|
|
var_r31->unk_90.x = sp104[0][3];
|
|
var_r31->unk_90.y = sp104[1][3];
|
|
var_r31->unk_90.z = sp104[2][3];
|
|
}
|
|
else {
|
|
OSReport("NO OBJECT %d %s \n", var_r31->unk_06, CharModelHookNameGet(var_r31->unk_06, 4, 4));
|
|
}
|
|
spF8.x = 0.0f;
|
|
spF8.y = 100.0f;
|
|
spF8.z = 0.0f;
|
|
spE0.x = spF8.y * sind((180.0f + object->rot.z));
|
|
spE0.y = spF8.y * sind((90.0f + object->rot.z));
|
|
spE0.z = 0.0f;
|
|
VECSubtract(&spE0, &spF8, &spEC);
|
|
var_r25 = &Hu3DData[object->model[0]];
|
|
var_r25->unk_F0[0][3] = spEC.x;
|
|
var_r25->unk_F0[1][3] = spEC.y;
|
|
var_r25->unk_F0[2][3] = spEC.z;
|
|
}
|
|
}
|
|
|
|
void fn_1_E5F4(omObjData *object)
|
|
{
|
|
object->func = NULL;
|
|
}
|
|
|
|
void fn_1_E600(omObjData *object)
|
|
{
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
s32 sp8;
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
M428DllPlayerWork2 *var_r31;
|
|
M428DllPlayerWork *var_r29;
|
|
omObjData *var_r28;
|
|
s32 var_r27;
|
|
s32 var_r26;
|
|
s32 var_r25;
|
|
s32 var_r24;
|
|
|
|
var_r31 = object->data;
|
|
var_r29 = &lbl_1_bss_2AC[var_r31->unk_02];
|
|
var_r24 = var_r31->unk_04 ^ 1;
|
|
var_r28 = var_r29->unk_00[var_r24];
|
|
if ((var_r29->unk_0E == 3) && (var_r29->unk_10 == var_r31->unk_04)) {
|
|
var_r26 = 1;
|
|
}
|
|
else {
|
|
var_r26 = 0;
|
|
}
|
|
if ((lbl_1_bss_29C[var_r31->unk_02] == 6) || (var_r31->unk_19C == -1)) {
|
|
if (var_r29->unk_0E != 3) {
|
|
var_r31->unk_19C = 2;
|
|
}
|
|
else {
|
|
var_r25 = (s32)(50.0f * (0.007874016f * (frand() & 0x7F))) + var_r31->unk_0C * 0xF + 5;
|
|
var_r31->unk_1A0 = (u8)frand() % 90;
|
|
if (var_r26 == 0) {
|
|
var_r31->unk_1A0 = (u8)frand() % 60;
|
|
}
|
|
if (var_r25 < 0x2D) {
|
|
var_r31->unk_19C = 0;
|
|
}
|
|
else if (var_r25 < 0x4B) {
|
|
var_r31->unk_19C = 1;
|
|
}
|
|
else {
|
|
var_r31->unk_19C = 2;
|
|
}
|
|
}
|
|
}
|
|
var_f31 = 1.0f;
|
|
switch (var_r31->unk_19C) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
if (lbl_1_bss_29C[var_r31->unk_02] != 0) {
|
|
if (var_r31->unk_1A0 > 0) {
|
|
var_r31->unk_1A0--;
|
|
}
|
|
else {
|
|
var_r31->unk_0E |= 0x100;
|
|
var_r31->unk_10 |= 0x100;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if ((lbl_1_bss_29C[var_r31->unk_02] == 3) || (lbl_1_bss_29C[var_r31->unk_02] == 5)) {
|
|
var_r31->unk_0E |= 0x100;
|
|
var_r31->unk_10 |= 0x100;
|
|
}
|
|
break;
|
|
}
|
|
if (var_r26 != 0) {
|
|
for (var_r27 = 0; var_r27 < 0x10; var_r27++) {
|
|
if ((lbl_1_data_1B0[var_r29->unk_12][var_r27].y - 100.0f) > object->trans.y) {
|
|
break;
|
|
}
|
|
}
|
|
var_r31->unk_1B0 = var_r27;
|
|
sp18 = lbl_1_data_1B0[var_r29->unk_12][var_r31->unk_1B0];
|
|
sp8 = var_r31->unk_1B0;
|
|
sp24.x = object->trans.x;
|
|
sp24.y = object->trans.y;
|
|
sp24.z = object->trans.z;
|
|
VECSubtract(&var_r31->unk_48, &sp24, &spC);
|
|
if ((VECMag(&spC) < 1.0f) && (lbl_1_bss_29C[var_r31->unk_02] != 0)) {
|
|
var_r31->unk_1B4++;
|
|
}
|
|
if (var_r31->unk_1B4 >= 180.0f) {
|
|
if (var_r31->unk_1B4 < 300.0f) {
|
|
if ((var_r31->unk_1B0 >= 2) && (var_r31->unk_1B0 <= 3)) {
|
|
if (fabs(object->trans.x) < 500.0) {
|
|
if (object->trans.x > 0.0f) {
|
|
var_r31->unk_14 = 64.0f;
|
|
}
|
|
else {
|
|
var_r31->unk_14 = -64.0f;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (fabs(object->trans.x) > 50.0) {
|
|
if (object->trans.x > 0.0f) {
|
|
var_r31->unk_14 = -64.0f;
|
|
}
|
|
else {
|
|
var_r31->unk_14 = 64.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (var_r31->unk_1B0 > 0) {
|
|
var_r31->unk_1B0--;
|
|
var_r31->unk_1B4 = 0;
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_1B4 = 0;
|
|
sp24.x = object->trans.x;
|
|
sp24.y = object->trans.y;
|
|
sp24.z = object->trans.z;
|
|
VECAdd(&sp18, &var_r31->unk_1B8, &sp18);
|
|
VECSubtract(&sp18, &sp24, &spC);
|
|
var_f30 = VECMag(&spC);
|
|
VECNormalize(&spC, &spC);
|
|
var_r31->unk_14 = 64.0f * (spC.x * var_f31);
|
|
var_r31->unk_18 = 64.0f * (spC.y * var_f31);
|
|
if (++var_r31->unk_1A4 > 180.0f) {
|
|
var_r31->unk_1B8.x = 0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f));
|
|
var_r31->unk_1B8.y = 0.5f * (100.0f * (0.007874016f * (frand() & 0x7F)));
|
|
var_r31->unk_1B8.z = 0.5f * (100.0f * ((0.007874016f * (frand() & 0x7F)) - 0.5f));
|
|
var_r31->unk_1A4++;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
sp24.x = object->trans.x;
|
|
sp24.y = object->trans.y;
|
|
sp24.z = object->trans.z;
|
|
sp18.x = var_r28->trans.x;
|
|
sp18.y = var_r28->trans.y;
|
|
sp18.z = var_r28->trans.z;
|
|
VECSubtract(&sp18, &sp24, &spC);
|
|
var_f30 = VECMag(&spC);
|
|
if (var_f30 != 0.0f) {
|
|
var_f29 = atan2d(spC.x, spC.y);
|
|
}
|
|
else {
|
|
spC.y = 1.0f;
|
|
var_f29 = 0.0;
|
|
}
|
|
if (var_f30 < 230.0f) {
|
|
spC.x *= -1.0f;
|
|
spC.y *= -1.0f;
|
|
var_f29 += 180.0f;
|
|
}
|
|
if ((var_f30 >= 250.0f) || (var_f30 <= 230.0f)) {
|
|
VECNormalize(&spC, &spC);
|
|
if (var_f30 >= 250.0f) {
|
|
var_f31 = (var_f30 - 250.0f) / 20.0f;
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
}
|
|
else {
|
|
var_f31 = 1.0f;
|
|
}
|
|
sp24.x = object->trans.x;
|
|
sp24.y = object->trans.y;
|
|
sp24.z = object->trans.z;
|
|
VECAdd(&sp24, &var_r31->unk_54, &sp24);
|
|
var_f29 = var_f29 + var_r31->unk_1AC;
|
|
sp18.x = 64.0 * sind(var_f29);
|
|
sp18.y = 64.0 * cosd(var_f29);
|
|
sp18.z = 0.0f;
|
|
var_r31->unk_14 = sp18.x * var_f31;
|
|
var_r31->unk_18 = sp18.y * var_f31;
|
|
var_r31->unk_1A8 = 0;
|
|
}
|
|
}
|
|
var_r31->unk_1A4++;
|
|
}
|
|
|
|
s32 fn_1_F080(Vec *arg0, Vec *arg1, float arg8)
|
|
{
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
float var_f31;
|
|
float var_f30;
|
|
s32 var_r31;
|
|
|
|
if (VECMag(arg1) <= 0.0f) {
|
|
return 0;
|
|
}
|
|
var_f30 = atan2d(arg1->x, arg1->y);
|
|
var_f30 = var_f30;
|
|
sp24 = *arg0;
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
var_f31 = -45.0f + (15.0f * var_r31);
|
|
var_f31 += var_f30;
|
|
spC.x = sind(var_f31);
|
|
spC.y = cosd(var_f31);
|
|
spC.z = 0.0f;
|
|
VECNormalize(&spC, &spC);
|
|
VECScale(&spC, &spC, arg8);
|
|
VECAdd(arg0, &spC, &sp24);
|
|
if (fn_1_9990(&sp24) != 0) {
|
|
if (var_r31 == 3) {
|
|
sp18 = sp24;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r31 < 6) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
s32 fn_1_F288(Vec *arg0, Vec *arg1, float arg2)
|
|
{
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
s32 var_r30;
|
|
|
|
sp24 = *arg0;
|
|
sp18 = *arg1;
|
|
var_r30 = fn_1_F538(&sp24, &sp18, &spC, arg2);
|
|
if (var_r30 != 0) {
|
|
*arg0 = spC;
|
|
return 0;
|
|
}
|
|
*arg0 = sp24;
|
|
return 1;
|
|
}
|
|
|
|
s32 fn_1_F354(void)
|
|
{
|
|
s32 var_r31;
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
if (lbl_1_bss_2B8[var_r31]->trans.y < 0.0f) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r31 < 4) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
s32 fn_1_F3BC(s32 arg0)
|
|
{
|
|
M428DllPlayerWork *var_r31 = &lbl_1_bss_2AC[arg0];
|
|
if (var_r31->unk_1C >= 3800.0f) {
|
|
return var_r31->unk_18 = 1;
|
|
}
|
|
return var_r31->unk_18 = 0;
|
|
}
|
|
|
|
void fn_1_F414(s32 arg0)
|
|
{
|
|
M428DllPlayerWork *var_r31 = &lbl_1_bss_2AC[arg0];
|
|
var_r31->unk_14 = 1;
|
|
lbl_1_bss_2A4 = 1;
|
|
}
|
|
|
|
void fn_1_F454(s32 arg0, s32 arg1)
|
|
{
|
|
lbl_1_bss_29C[arg0] = arg1;
|
|
}
|
|
|
|
void fn_1_F46C(s32 arg0, s32 arg1)
|
|
{
|
|
if (lbl_1_bss_18 != 0) {
|
|
M428DllPlayerWork *var_r31 = &lbl_1_bss_2AC[arg0];
|
|
var_r31->unk_B8 = 0;
|
|
var_r31->unk_BC = arg1;
|
|
}
|
|
}
|
|
|
|
void fn_1_F4B4(s32 arg0, s32 arg1, float arg8)
|
|
{
|
|
M428DllPlayerWork *var_r31 = &lbl_1_bss_2AC[arg0];
|
|
var_r31->unk_C4 = arg1;
|
|
var_r31->unk_C0 = arg1;
|
|
var_r31->unk_C8 = arg8;
|
|
}
|
|
|
|
s32 fn_1_F4E8(s32 arg0)
|
|
{
|
|
M428DllPlayerWork *var_r31 = &lbl_1_bss_2AC[arg0];
|
|
if (var_r31->unk_1C >= 500.0f) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
s32 fn_1_F538(Vec *arg0, Vec *arg1, Vec *arg2, float arg8)
|
|
{
|
|
Vec sp38;
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
float var_f30;
|
|
float var_f29;
|
|
M428DllData4B0Struct *var_r30;
|
|
s32 var_r27;
|
|
|
|
*arg2 = *arg0;
|
|
var_r30 = lbl_1_data_4B0;
|
|
for (var_r27 = 0; var_r27 < 5; var_r27++, var_r30++) {
|
|
sp38 = var_r30->unk_00;
|
|
VECAdd(arg0, arg1, &sp2C);
|
|
if ((arg0->y >= (sp38.y + arg8)) && (sp2C.y <= (sp38.y + arg8))) {
|
|
sp8.x = sp2C.y - arg0->y;
|
|
sp8.y = arg0->x - sp2C.x;
|
|
sp8.z = -((sp8.x * arg0->x) + (sp8.y * arg0->y));
|
|
var_f29 = -((sp8.z + (sp8.y * (sp38.y + arg8))) / sp8.x);
|
|
if ((var_f29 >= (sp38.x - (var_r30->unk_0C + arg8))) && (var_f29 <= (sp38.x + (var_r30->unk_0C + arg8)))) {
|
|
arg2->x = arg0->x + arg1->x;
|
|
arg2->y = 0.1f + (sp38.y + arg8);
|
|
arg2->z = arg0->z + arg1->z;
|
|
return 1;
|
|
}
|
|
}
|
|
VECSubtract(&sp2C, &sp38, &sp20);
|
|
var_f30 = VECMag(&sp20);
|
|
if (var_f30 == 0.0f) {
|
|
sp20.y = 1.0f;
|
|
}
|
|
sp14 = sp20;
|
|
if ((var_f30 < (var_r30->unk_0C + arg8)) && (sp20.y < arg8)) {
|
|
sp38 = var_r30->unk_00;
|
|
sp2C = *arg0;
|
|
VECSubtract(&sp2C, &sp38, &sp20);
|
|
var_f30 = VECMag(&sp20);
|
|
if (var_f30 == 0.0f) {
|
|
sp20.y = 1.0f;
|
|
}
|
|
if (sp20.y <= arg8) {
|
|
VECNormalize(&sp14, &sp20);
|
|
VECScale(&sp20, &sp20, var_r30->unk_0C + arg8);
|
|
VECAdd(&sp38, &sp20, arg2);
|
|
return 1;
|
|
}
|
|
arg2->x = arg0->x + arg1->x;
|
|
arg2->y = 0.1f + (sp38.y + arg8);
|
|
arg2->z = arg0->z + arg1->z;
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
s32 fn_1_F88C(Vec *arg0, Vec *arg1, Vec *arg2)
|
|
{
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
float var_f31;
|
|
float var_f30;
|
|
M428DllData4B0Struct *var_r30;
|
|
s32 var_r27;
|
|
|
|
*arg2 = *arg0;
|
|
var_r30 = lbl_1_data_4B0;
|
|
for (var_r27 = 0; var_r27 < 5; var_r27++, var_r30++) {
|
|
sp2C = var_r30->unk_00;
|
|
VECAdd(arg0, arg1, &sp20);
|
|
if ((arg0->y >= sp2C.y) && (sp20.y <= sp2C.y)) {
|
|
sp8.x = sp20.y - arg0->y;
|
|
sp8.y = arg0->x - sp20.x;
|
|
sp8.z = -((sp8.x * arg0->x) + (sp8.y * arg0->y));
|
|
var_f30 = -((sp8.z + (sp8.y * sp2C.y)) / sp8.x);
|
|
if ((var_f30 >= (sp2C.x - var_r30->unk_0C)) && (var_f30 <= (sp2C.x + var_r30->unk_0C))) {
|
|
arg2->x = arg0->x + arg1->x;
|
|
arg2->y = sp2C.y;
|
|
arg2->z = arg0->z + arg1->z;
|
|
return 1;
|
|
}
|
|
}
|
|
VECSubtract(&sp20, &sp2C, &sp14);
|
|
var_f31 = VECMag(&sp14);
|
|
if (var_f31 == 0.0f) {
|
|
sp14.y = 1.0f;
|
|
}
|
|
if ((var_f31 < var_r30->unk_0C) && (sp14.y <= 0.0f)) {
|
|
sp2C = var_r30->unk_00;
|
|
sp20 = *arg0;
|
|
VECSubtract(&sp20, &sp2C, &sp14);
|
|
var_f31 = VECMag(&sp14);
|
|
if (var_f31 == 0.0f) {
|
|
sp14.y = 1.0f;
|
|
}
|
|
if (sp14.y <= 0.0f) {
|
|
VECNormalize(&sp14, &sp14);
|
|
VECScale(&sp14, &sp14, var_r30->unk_0C);
|
|
VECAdd(&sp2C, &sp14, arg2);
|
|
return var_r27;
|
|
}
|
|
arg2->x = arg0->x + arg1->x;
|
|
arg2->y = sp2C.y;
|
|
arg2->z = arg0->z + arg1->z;
|
|
return var_r27;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
s32 fn_1_FB8C(Vec *arg0, Vec *arg1, float arg8, s32 arg2, s32 arg3)
|
|
{
|
|
float var_f31;
|
|
M428DllPlayerUnk120Struct *var_r31;
|
|
M428DllPlayerUnkStruct *var_r30;
|
|
s32 var_r29;
|
|
ModelData *var_r28;
|
|
s32 var_r26;
|
|
|
|
var_r26 = Hu3DHookFuncCreate(fn_1_102A8);
|
|
var_r28 = &Hu3DData[var_r26];
|
|
Hu3DModelLayerSet(var_r26, 2);
|
|
var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M428DllPlayerUnk120Struct), var_r28->unk_48);
|
|
var_r28->unk_120 = var_r31;
|
|
memset(var_r31, 0, sizeof(M428DllPlayerUnk120Struct));
|
|
var_r30 = HuMemDirectMallocNum(HEAP_DATA, arg2 * sizeof(M428DllPlayerUnkStruct), var_r28->unk_48);
|
|
var_r31->unk_54 = var_r30;
|
|
memset(var_r30, 0, arg2 * sizeof(M428DllPlayerUnkStruct));
|
|
var_r31->unk_00 = var_r26;
|
|
var_r31->unk_02 = arg2;
|
|
var_r31->unk_04 = arg8;
|
|
var_r31->unk_08 = arg8 / (arg2 - 1);
|
|
var_r31->unk_0C = 0;
|
|
var_r31->unk_10 = arg3;
|
|
var_r31->unk_14 = 0.0f;
|
|
var_r31->unk_18 = 0.0f;
|
|
var_r31->unk_1C = 0;
|
|
var_r31->unk_20 = *arg0;
|
|
var_r31->unk_2C = *arg1;
|
|
var_r31->unk_38.x = var_r31->unk_38.y = var_r31->unk_38.z = 0.0f;
|
|
var_r31->unk_44 = -1;
|
|
var_r31->unk_48 = var_r31->unk_4C = var_r31->unk_50 = 0.0f;
|
|
for (var_r29 = 0; var_r29 < arg2; var_r29++, var_r30++) {
|
|
var_r30->unk_00 = var_r29;
|
|
if (var_r29 == 0) {
|
|
var_r30->unk_02 = 0;
|
|
}
|
|
else if (var_r29 == (arg2 - 1)) {
|
|
var_r30->unk_02 = 1;
|
|
}
|
|
else {
|
|
var_r30->unk_02 = -1;
|
|
}
|
|
var_r30->unk_04 = 0;
|
|
var_f31 = (float)var_r29 / (arg2 - 1);
|
|
var_r30->unk_08[0].x = var_r31->unk_20.x + (var_f31 * (var_r31->unk_2C.x - var_r31->unk_20.x));
|
|
var_r30->unk_08[0].y = var_r31->unk_20.y + (var_f31 * (var_r31->unk_2C.y - var_r31->unk_20.y));
|
|
var_r30->unk_08[0].z = var_r31->unk_20.z + (var_f31 * (var_r31->unk_2C.z - var_r31->unk_20.z));
|
|
var_r30->unk_08[1] = var_r30->unk_08[0];
|
|
var_r30->unk_08[2] = var_r30->unk_08[0];
|
|
var_r30->unk_08[3].x = var_r30->unk_08[3].y = var_r30->unk_08[3].z = 0.0f;
|
|
}
|
|
return var_r26;
|
|
}
|
|
|
|
void fn_1_FE98(M428DllPlayerUnk120Struct *arg0)
|
|
{
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
s32 sp8;
|
|
float var_f31;
|
|
float var_f30;
|
|
M428DllPlayerUnkStruct *var_r30;
|
|
s32 var_r29;
|
|
|
|
if (arg0->unk_1C == 0) {
|
|
fn_1_129B4(0.5f, &arg0->unk_20, &arg0->unk_2C, &spC);
|
|
spC.y -= arg0->unk_14 * (0.75f * arg0->unk_04);
|
|
for (var_r30 = arg0->unk_54, var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r30++) {
|
|
var_f31 = (float)var_r29 / (arg0->unk_02 - 1);
|
|
fn_1_12AA4(var_f31, &arg0->unk_20, &spC, &arg0->unk_2C, &var_r30->unk_08[0]);
|
|
fn_1_129B4(var_f31, &arg0->unk_20, &arg0->unk_2C, &var_r30->unk_08[2]);
|
|
}
|
|
}
|
|
else {
|
|
arg0->unk_38.z = 0.5f * (arg0->unk_20.z + arg0->unk_2C.z);
|
|
fn_1_129B4(0.5f, &arg0->unk_20, &arg0->unk_38, &spC);
|
|
spC.y -= arg0->unk_14 * (0.375f * arg0->unk_04);
|
|
for (var_r30 = arg0->unk_54, var_r29 = 0; var_r29 < arg0->unk_44; var_r29++, var_r30++) {
|
|
var_f31 = (float)var_r29 / (arg0->unk_44 - 1);
|
|
fn_1_12AA4(var_f31, &arg0->unk_20, &spC, &arg0->unk_38, &var_r30->unk_08[0]);
|
|
fn_1_129B4(var_f31, &arg0->unk_20, &arg0->unk_38, &var_r30->unk_08[2]);
|
|
}
|
|
fn_1_129B4(0.1f, &arg0->unk_38, &arg0->unk_2C, &spC);
|
|
spC.y -= arg0->unk_18 * (0.375f * arg0->unk_04);
|
|
for (var_r30 = &arg0->unk_54[arg0->unk_44], var_r29 = arg0->unk_44; var_r29 < arg0->unk_02; var_r29++, var_r30++) {
|
|
var_f31 = (float)(var_r29 - arg0->unk_44) / ((arg0->unk_02 - arg0->unk_44) - 1);
|
|
fn_1_12AA4(var_f31, &arg0->unk_38, &spC, &arg0->unk_2C, &var_r30->unk_08[0]);
|
|
fn_1_129B4(var_f31, &arg0->unk_38, &arg0->unk_2C, &var_r30->unk_08[2]);
|
|
}
|
|
}
|
|
for (var_r29 = 0, var_r30 = arg0->unk_54; var_r29 < arg0->unk_02; var_r29++, var_r30++) {
|
|
VECSubtract(&var_r30->unk_08[0], &var_r30->unk_08[2], &sp24);
|
|
var_f30 = var_r30->unk_08[0].z;
|
|
if ((sp8 = fn_1_F88C(&var_r30->unk_08[2], &sp24, &sp18)) != -1) {
|
|
var_r30->unk_08[0] = sp18;
|
|
var_r30->unk_08[0].z = var_f30;
|
|
var_r30->unk_04 = 1;
|
|
}
|
|
else {
|
|
var_r30->unk_04 = 0;
|
|
}
|
|
if (var_r30->unk_02 == -1) {
|
|
fn_1_129B4(0.9f, &var_r30->unk_08[1], &var_r30->unk_08[0], &var_r30->unk_08[0]);
|
|
}
|
|
var_r30->unk_08[1] = var_r30->unk_08[0];
|
|
}
|
|
}
|
|
|
|
GXColor lbl_1_data_694[2] = { { 0xFF, 0xA0, 0x40, 0xFF }, { 0x00, 0xC8, 0xFF, 0xFF } };
|
|
s16 lbl_1_data_69C[2] = { -0x10, 0x10 };
|
|
s16 lbl_1_data_6A0[2] = { 0x1A4, 0x60 };
|
|
Vec lbl_1_data_6A4[4] = {
|
|
{ -0.5f, 0.5f, 0.0f },
|
|
{ 0.5f, 0.5f, 0.0f },
|
|
{ 0.5f, -0.5f, 0.0f },
|
|
{ -0.5f, -0.5f, 0.0f },
|
|
};
|
|
Vec2f lbl_1_data_6D4[4] = { { 0.0f, 0.0f }, { 0.25f, 0.0f }, { 0.25f, 0.25f }, { 0.0f, 0.25f } };
|
|
|
|
void fn_1_102A8(ModelData *model, Mtx matrix)
|
|
{
|
|
Mtx sp8;
|
|
s16 var_r30;
|
|
|
|
M428DllPlayerUnk120Struct *var_r31 = model->unk_120;
|
|
if (omPauseChk() == 0) {
|
|
fn_1_FE98(var_r31);
|
|
}
|
|
GXLoadPosMtxImm(matrix, 0);
|
|
MTXInvXpose(matrix, sp8);
|
|
GXLoadNrmMtxImm(sp8, 0);
|
|
GXSetNumTevStages(1);
|
|
GXSetNumTexGens(1);
|
|
GXSetNumChans(1);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D);
|
|
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_RASC);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0);
|
|
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_TEVREG0);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_VTX, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_SPEC);
|
|
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
|
|
GXSetZCompLoc(GX_FALSE);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_ONE, GX_BL_ZERO, GX_LO_NOOP);
|
|
GXSetLineWidth(0x10, GX_TO_ZERO);
|
|
// bug, it should be var_r31->unk_54
|
|
DCFlushRange(&var_r31->unk_54, var_r31->unk_02 * sizeof(M428DllPlayerUnkStruct));
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSETARRAY(GX_VA_POS, var_r31->unk_54->unk_08, sizeof(var_r31->unk_54->unk_08), sizeof(M428DllPlayerUnkStruct));
|
|
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
|
GXSETARRAY(GX_VA_CLR0, &lbl_1_data_694[var_r31->unk_10], sizeof(GXColor), sizeof(GXColor));
|
|
GXBegin(GX_LINESTRIP, GX_VTXFMT0, var_r31->unk_02);
|
|
for (var_r30 = 0; var_r30 < var_r31->unk_02; var_r30++) {
|
|
GXPosition1x16(var_r30);
|
|
GXColor1x16(0);
|
|
}
|
|
}
|
|
|
|
void fn_1_10530(s32 arg0, Vec *arg1, Vec *arg2)
|
|
{
|
|
ModelData *var_r30 = &Hu3DData[arg0];
|
|
M428DllPlayerUnk120Struct *var_r31 = var_r30->unk_120;
|
|
var_r31->unk_20 = *arg1;
|
|
var_r31->unk_2C = *arg2;
|
|
}
|
|
|
|
void fn_1_10590(s32 arg0, s32 arg1, s32 arg2, Vec *arg3)
|
|
{
|
|
ModelData *var_r30 = &Hu3DData[arg0];
|
|
M428DllPlayerUnk120Struct *var_r31 = var_r30->unk_120;
|
|
var_r31->unk_1C = arg1;
|
|
if (arg1 != 0) {
|
|
var_r31->unk_38 = *arg3;
|
|
var_r31->unk_44 = arg2;
|
|
}
|
|
}
|
|
|
|
void fn_1_105E8(s32 arg0, float arg8, float arg9)
|
|
{
|
|
ModelData *var_r30 = &Hu3DData[arg0];
|
|
M428DllPlayerUnk120Struct *var_r31 = var_r30->unk_120;
|
|
if (arg8 > 1.0f) {
|
|
arg8 = 1.0f;
|
|
}
|
|
else if (arg8 < 0.0f) {
|
|
arg8 = 0.0f;
|
|
}
|
|
if (arg9 > 1.0f) {
|
|
arg9 = 1.0f;
|
|
}
|
|
else if (arg9 < 0.0f) {
|
|
arg9 = 0.0f;
|
|
}
|
|
var_r31->unk_14 = arg8;
|
|
var_r31->unk_18 = arg9;
|
|
}
|
|
|
|
s32 fn_1_106A8(s32 arg0, s32 arg1, Vec *arg2, float *arg3)
|
|
{
|
|
M428DllPlayerUnkStruct *var_r30;
|
|
s32 var_r29;
|
|
|
|
ModelData *var_r28 = &Hu3DData[arg0];
|
|
M428DllPlayerUnk120Struct *var_r31 = var_r28->unk_120;
|
|
float var_f31 = 0.0f;
|
|
for (var_r29 = 0; var_r29 < var_r31->unk_02; var_f31 += var_r31->unk_08, var_r29++) {
|
|
if (arg1 == 0) {
|
|
var_r30 = &var_r31->unk_54[var_r29];
|
|
}
|
|
else {
|
|
var_r30 = &var_r31->unk_54[(var_r31->unk_02 - 1) - var_r29];
|
|
}
|
|
if (var_r30->unk_04 != 0) {
|
|
*arg2 = var_r30->unk_08[0];
|
|
*arg3 = var_f31;
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
s32 fn_1_10788(s32 arg0, Vec *arg1, Vec *arg2, Vec *arg3)
|
|
{
|
|
Vec sp30;
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
ModelData *sp8;
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
M428DllData4B0Struct *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
|
|
sp8 = &Hu3DData[arg0];
|
|
sp18.x = arg2->y - arg1->y;
|
|
sp18.y = arg1->x - arg2->x;
|
|
sp18.z = -((sp18.x * arg1->x) + (sp18.y * arg1->y));
|
|
if (arg1->x < arg2->x) {
|
|
var_f27 = arg1->x;
|
|
var_f26 = arg2->x;
|
|
}
|
|
else {
|
|
var_f27 = arg2->x;
|
|
var_f26 = arg1->x;
|
|
}
|
|
if (arg1->y < arg2->y) {
|
|
var_f30 = arg1->y;
|
|
var_f29 = arg2->y;
|
|
}
|
|
else {
|
|
var_f30 = arg2->y;
|
|
var_f29 = arg1->y;
|
|
}
|
|
for (var_r30 = 0, var_r31 = lbl_1_data_4B0; var_r30 < 5; var_r30++, var_r31++) {
|
|
sp30 = var_r31->unk_00;
|
|
sp30.x -= var_r31->unk_0C;
|
|
sp24 = var_r31->unk_00;
|
|
sp24.x += var_r31->unk_0C;
|
|
spC.x = sp24.y - sp30.y;
|
|
spC.y = sp30.x - sp24.x;
|
|
spC.z = -((spC.x * sp30.x) + (spC.y * sp30.y));
|
|
if ((var_r31->unk_00.y >= var_f30) && (var_r31->unk_00.y <= var_f29) && (sp18.x != 0.0f)) {
|
|
var_f31 = -((sp18.z + (sp18.y * var_r31->unk_00.y)) / sp18.x);
|
|
var_f28 = var_r31->unk_00.y;
|
|
if ((var_f31 >= sp30.x) && (var_f31 <= sp24.x)) {
|
|
var_r29 = 1;
|
|
}
|
|
else {
|
|
var_r29 = 0;
|
|
}
|
|
if ((var_f31 >= var_f27) && (var_f31 <= var_f26) && (var_f28 >= var_f30) && (var_f28 <= var_f29)) {
|
|
var_r28 = 1;
|
|
}
|
|
else {
|
|
var_r28 = 0;
|
|
}
|
|
if ((var_r29 != 0) && (var_r28 != 0)) {
|
|
if (var_f31 < var_r31->unk_00.x) {
|
|
*arg3 = sp30;
|
|
}
|
|
else {
|
|
*arg3 = sp24;
|
|
}
|
|
return var_r30;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
void fn_1_10A88(void)
|
|
{
|
|
M428DllPlayerWork3 *var_r31;
|
|
omObjData *var_r30;
|
|
s32 var_r29;
|
|
M428DllPlayerUnk120Struct2 *var_r28;
|
|
ModelData *var_r27;
|
|
s32 var_r26;
|
|
s32 var_r25;
|
|
|
|
var_r30 = lbl_1_bss_2B4 = omAddObjEx(lbl_1_bss_2D0, 0x42, 0xA, 0, -1, fn_1_11014);
|
|
var_r31 = var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M428DllPlayerWork3), MEMORY_DEFAULT_NUM);
|
|
memset(var_r31, 0, sizeof(M428DllPlayerWork3));
|
|
var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_M428, 0x0E), 0x80, 0);
|
|
var_r31->unk_00 = var_r29;
|
|
espDispOn(var_r29);
|
|
espDrawNoSet(var_r29, 0);
|
|
espAttrSet(var_r29, HUSPR_ATTR_NOANIM);
|
|
espPosSet(var_r29, 288.0, 240.0);
|
|
var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_M428, 0x0C), 0x50, 0);
|
|
var_r31->unk_04[0] = var_r29;
|
|
espDispOn(var_r29);
|
|
espDrawNoSet(var_r29, 0);
|
|
espAttrSet(var_r29, HUSPR_ATTR_NOANIM);
|
|
espPosSet(var_r29, 288.0, 240.0);
|
|
var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_M428, 0x0D), 0x50, 0);
|
|
var_r31->unk_04[1] = var_r29;
|
|
espDispOn(var_r29);
|
|
espDrawNoSet(var_r29, 0);
|
|
espAttrSet(var_r29, HUSPR_ATTR_NOANIM);
|
|
espPosSet(var_r29, 288.0, 240.0);
|
|
var_r31->unk_0C[0][0] = var_r31->unk_0C[0][1] = 0.0f;
|
|
var_r31->unk_0C[1][0] = var_r31->unk_0C[1][1] = 0.0f;
|
|
var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_M428, 0x10), 0x100, 0);
|
|
var_r31->unk_1C[0] = var_r29;
|
|
espDispOn(var_r29);
|
|
espDrawNoSet(var_r29, 0);
|
|
espAttrSet(var_r29, HUSPR_ATTR_NOANIM);
|
|
espPosSet(var_r29, 144.0, 240.0);
|
|
espScaleSet(var_r29, 36.0, 60.0);
|
|
espColorSet(var_r29, 0xFF, 0xFF, 0xFF);
|
|
espTPLvlSet(var_r29, 0.0);
|
|
var_r29 = espEntry(DATA_MAKE_NUM(DATADIR_M428, 0x10), 0x100, 0);
|
|
var_r31->unk_1C[1] = var_r29;
|
|
espDispOn(var_r29);
|
|
espDrawNoSet(var_r29, 0);
|
|
espAttrSet(var_r29, HUSPR_ATTR_NOANIM);
|
|
espPosSet(var_r29, 432.0, 240.0);
|
|
espScaleSet(var_r29, 36.0, 60.0);
|
|
espColorSet(var_r29, 0xFF, 0xFF, 0xFF);
|
|
espTPLvlSet(var_r29, 0.0);
|
|
var_r31->unk_24[0][0] = var_r31->unk_24[0][1] = 0.0f;
|
|
var_r31->unk_24[1][0] = var_r31->unk_24[1][1] = 0.0f;
|
|
var_r31->unk_34 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M428, 0x0A), MEMORY_DEFAULT_NUM));
|
|
var_r31->unk_38 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M428, 0x0B), MEMORY_DEFAULT_NUM));
|
|
var_r30->model[0] = fn_1_12CD4(var_r31->unk_34, 2);
|
|
Hu3DModelCameraSet(var_r30->model[0], 1);
|
|
Hu3DModelLayerSet(var_r30->model[0], 5);
|
|
fn_1_13D9C(var_r30->model[0], -1, 0);
|
|
var_r27 = &Hu3DData[var_r30->model[0]];
|
|
var_r28 = var_r27->unk_120;
|
|
var_r28->unk_22 |= 3;
|
|
var_r30->model[1] = fn_1_12CD4(var_r31->unk_38, 2);
|
|
Hu3DModelCameraSet(var_r30->model[1], 1);
|
|
Hu3DModelLayerSet(var_r30->model[1], 5);
|
|
fn_1_13D9C(var_r30->model[1], -1, 0);
|
|
var_r27 = &Hu3DData[var_r30->model[1]];
|
|
var_r28 = var_r27->unk_120;
|
|
var_r28->unk_22 |= 3;
|
|
var_r30->model[2] = fn_1_12CD4(var_r31->unk_34, 2);
|
|
Hu3DModelCameraSet(var_r30->model[2], 2);
|
|
Hu3DModelLayerSet(var_r30->model[2], 5);
|
|
fn_1_13D9C(var_r30->model[2], -1, 0);
|
|
var_r27 = &Hu3DData[var_r30->model[2]];
|
|
var_r28 = var_r27->unk_120;
|
|
var_r28->unk_22 |= 3;
|
|
var_r30->model[3] = fn_1_12CD4(var_r31->unk_38, 2);
|
|
Hu3DModelCameraSet(var_r30->model[3], 2);
|
|
Hu3DModelLayerSet(var_r30->model[3], 5);
|
|
fn_1_13D9C(var_r30->model[3], -1, 0);
|
|
var_r27 = &Hu3DData[var_r30->model[3]];
|
|
var_r28 = var_r27->unk_120;
|
|
var_r28->unk_22 |= 3;
|
|
for (var_r26 = 0; var_r26 < 2; var_r26++) {
|
|
for (var_r25 = 0; var_r25 < 2; var_r25++) {
|
|
var_r31->unk_3C[var_r26][var_r25] = var_r31->unk_4C[var_r26][var_r25] = -1;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_11014(omObjData *object)
|
|
{
|
|
Vec sp20;
|
|
float var_f31;
|
|
float var_f30;
|
|
s32 var_r31;
|
|
s32 var_r29;
|
|
omObjData *var_r27;
|
|
M428DllPlayerWork *var_r26;
|
|
|
|
M428DllPlayerWork3 *var_r30 = object->data;
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
var_r30->unk_0C[var_r31][0] = var_r30->unk_0C[var_r31][0] + (0.05f * (var_r30->unk_0C[var_r31][1] - var_r30->unk_0C[var_r31][0]));
|
|
var_f30 = lbl_1_data_6A0[0] + (var_r30->unk_0C[var_r31][0] * (lbl_1_data_6A0[1] - lbl_1_data_6A0[0]));
|
|
espPosSet(var_r30->unk_04[var_r31], 288.0f + lbl_1_data_69C[var_r31], var_f30);
|
|
}
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
var_r30->unk_24[var_r31][0] = var_r30->unk_24[var_r31][0] + (0.05f * (var_r30->unk_24[var_r31][1] - var_r30->unk_24[var_r31][0]));
|
|
espTPLvlSet(var_r30->unk_1C[var_r31], var_r30->unk_24[var_r31][0]);
|
|
}
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
for (var_r29 = 0; var_r29 < 2; var_r29++) {
|
|
var_r26 = lbl_1_bss_2C8[var_r31]->data;
|
|
var_r27 = var_r26->unk_00[var_r29];
|
|
if (var_r30->unk_3C[var_r31][var_r29] > 0) {
|
|
var_f31 = (30.0f - var_r30->unk_3C[var_r31][var_r29]) / 6.0f;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 = 0.0f;
|
|
}
|
|
else if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
var_f31 = sind((180.0f * var_f31));
|
|
sp20.x = var_r27->trans.x;
|
|
sp20.y = 200.0f + var_r27->trans.y;
|
|
sp20.z = var_r27->trans.z;
|
|
fn_1_13E14(object->model[var_r31 * 2], var_r29, sp20);
|
|
fn_1_13EC8(object->model[var_r31 * 2], var_r29, 125.0f * (1.0f + var_f31));
|
|
var_r30->unk_3C[var_r31][var_r29] -= 1;
|
|
}
|
|
else {
|
|
fn_1_13D9C(object->model[var_r31 * 2], var_r29, 0);
|
|
}
|
|
if (var_r30->unk_4C[var_r31][var_r29] > 0) {
|
|
var_f31 = (30.0f - var_r30->unk_4C[var_r31][var_r29]) / 6.0f;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 = 0.0f;
|
|
}
|
|
else if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
var_f31 = sind((180.0f * var_f31));
|
|
sp20.x = var_r27->trans.x;
|
|
sp20.y = 200.0f + var_r27->trans.y;
|
|
sp20.z = var_r27->trans.z;
|
|
fn_1_13E14(object->model[(var_r31 * 2) + 1], var_r29, sp20);
|
|
fn_1_13EC8(object->model[(var_r31 * 2) + 1], var_r29, 125.0f * (1.0f + var_f31));
|
|
var_r30->unk_4C[var_r31][var_r29] -= 1;
|
|
}
|
|
else {
|
|
fn_1_13D9C(object->model[(var_r31 * 2) + 1], var_r29, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_115F8(void)
|
|
{
|
|
M428DllPlayerWork3 *var_r31 = lbl_1_bss_2B4->data;
|
|
espKill(var_r31->unk_00);
|
|
espKill(var_r31->unk_04[0]);
|
|
espKill(var_r31->unk_04[1]);
|
|
espKill(var_r31->unk_1C[0]);
|
|
espKill(var_r31->unk_1C[1]);
|
|
Hu3DModelKill(lbl_1_bss_2B4->model[0]);
|
|
Hu3DModelKill(lbl_1_bss_2B4->model[1]);
|
|
Hu3DModelKill(lbl_1_bss_2B4->model[2]);
|
|
Hu3DModelKill(lbl_1_bss_2B4->model[3]);
|
|
HuSprAnimKill(var_r31->unk_34);
|
|
HuSprAnimKill(var_r31->unk_38);
|
|
}
|
|
|
|
void fn_1_116C4(s32 arg0, s32 arg1)
|
|
{
|
|
if (lbl_1_bss_2B4) {
|
|
s32 var_r31;
|
|
M428DllPlayerWork3 *var_r30 = lbl_1_bss_2B4->data;
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
if (arg1 == 0) {
|
|
var_r30->unk_3C[arg0][var_r31] = 0x1E;
|
|
}
|
|
else {
|
|
var_r30->unk_4C[arg0][var_r31] = 0x1E;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_11754(s32 arg0, float arg8)
|
|
{
|
|
if (lbl_1_bss_2B4) {
|
|
M428DllPlayerWork3 *var_r31 = lbl_1_bss_2B4->data;
|
|
var_r31->unk_24[arg0][1] = arg8;
|
|
}
|
|
}
|
|
|
|
void fn_1_11798(s32 sp8)
|
|
{
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
|
|
if (lbl_1_bss_2B4) {
|
|
M428DllPlayerWork3 *work = lbl_1_bss_2B4->data;
|
|
if (sp8 == 0) {
|
|
espDispOff(work->unk_00);
|
|
espDispOff(work->unk_04[0]);
|
|
espDispOff(work->unk_04[1]);
|
|
espDispOff(work->unk_1C[0]);
|
|
espDispOff(work->unk_1C[1]);
|
|
}
|
|
else {
|
|
espDispOn(work->unk_00);
|
|
espDispOn(work->unk_04[0]);
|
|
espDispOn(work->unk_04[1]);
|
|
espDispOn(work->unk_1C[0]);
|
|
espDispOn(work->unk_1C[1]);
|
|
}
|
|
for (var_r30 = 0; var_r30 < 2; var_r30++) {
|
|
for (var_r29 = 0; var_r29 < 2; var_r29++) {
|
|
work->unk_3C[var_r30][var_r29] = work->unk_4C[var_r30][var_r29] = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_118A8(s32 arg0, float var_f1)
|
|
{
|
|
M428DllPlayerWork3 *var_r31;
|
|
if (lbl_1_bss_2B4) {
|
|
var_r31 = lbl_1_bss_2B4->data;
|
|
if (var_f1 < 0.0f) {
|
|
var_f1 = 0.0f;
|
|
}
|
|
else if (var_f1 > 1.0f) {
|
|
var_f1 = 1.0f;
|
|
}
|
|
var_r31->unk_0C[arg0][1] = var_f1;
|
|
}
|
|
}
|
|
|
|
void fn_1_11930(void)
|
|
{
|
|
M428DllPlayerWork4 *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
omObjData *var_r28;
|
|
M428DllPlayerUnk120Struct2 *var_r27;
|
|
ModelData *var_r26;
|
|
AnimData *var_r25;
|
|
|
|
var_r28 = lbl_1_bss_2B0 = omAddObjEx(lbl_1_bss_2D0, 0xBF, 0, 0, -1, fn_1_11A60);
|
|
var_r31 = var_r28->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M428DllPlayerWork4), MEMORY_DEFAULT_NUM);
|
|
memset(var_r31, 0, sizeof(M428DllPlayerWork4));
|
|
var_r25 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M428, 0x0F), MEMORY_DEFAULT_NUM));
|
|
var_r31->unk_10 = var_r25;
|
|
for (var_r30 = 0; var_r30 < 2; var_r30++) {
|
|
var_r29 = fn_1_12CD4(var_r25, 0x200);
|
|
var_r31->unk_00[var_r30] = var_r29;
|
|
if (var_r30 == 0) {
|
|
Hu3DModelCameraSet(var_r29, 1);
|
|
}
|
|
else {
|
|
Hu3DModelCameraSet(var_r29, 2);
|
|
}
|
|
Hu3DModelLayerSet(var_r29, 3);
|
|
var_r31->unk_08[var_r30] = 0;
|
|
var_r26 = &Hu3DData[var_r29];
|
|
var_r27 = var_r26->unk_120;
|
|
var_r27->unk_20 = 0;
|
|
}
|
|
}
|
|
|
|
void fn_1_11A60(omObjData *object)
|
|
{
|
|
s32 temp_r4;
|
|
M428DllPlayerUnkStruct2 *var_r31;
|
|
M428DllPlayerWork4 *var_r30;
|
|
s32 var_r29;
|
|
M428DllPlayerUnk120Struct2 *var_r28;
|
|
s32 var_r27;
|
|
ModelData *var_r26;
|
|
|
|
var_r30 = object->data;
|
|
for (var_r29 = 0; var_r29 < 2; var_r29++) {
|
|
if (var_r30->unk_08[var_r29] <= 0) {
|
|
Hu3DModelAttrSet(var_r30->unk_00[var_r29], HU3D_ATTR_DISPOFF);
|
|
}
|
|
else {
|
|
Hu3DModelAttrReset(var_r30->unk_00[var_r29], HU3D_ATTR_DISPOFF);
|
|
var_r26 = &Hu3DData[var_r30->unk_00[var_r29]];
|
|
var_r28 = var_r26->unk_120;
|
|
var_r31 = var_r28->unk_3C;
|
|
var_r28->unk_23 = 0;
|
|
for (var_r27 = 0; var_r27 < var_r28->unk_26; var_r27++, var_r31++) {
|
|
if (!(var_r31->unk_30 <= 0.0f)) {
|
|
var_r31->unk_38.x += var_r31->unk_04;
|
|
var_r31->unk_38.y += var_r31->unk_08;
|
|
var_r31->unk_38.z += var_r31->unk_0C;
|
|
var_r31->unk_34 = var_r31->unk_34 + var_r31->unk_18;
|
|
if (var_r31->unk_34 >= 360.0f) {
|
|
var_r31->unk_34 = var_r31->unk_34 - 360.0f;
|
|
}
|
|
var_r31->unk_48 = var_r31->unk_28;
|
|
var_r31->unk_28 = var_r31->unk_28 + var_r31->unk_2C;
|
|
if (var_r31->unk_48 >= 0x10) {
|
|
var_r31->unk_48 = 0;
|
|
var_r31->unk_00 = 0;
|
|
var_r31->unk_30 = 0.0f;
|
|
var_r30->unk_08[var_r29] -= 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_11C20(void)
|
|
{
|
|
|
|
omObjData *var_r30 = lbl_1_bss_2B0;
|
|
M428DllPlayerWork4 *var_r31 = var_r30->data;
|
|
Hu3DModelAttrSet(var_r31->unk_00[0], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(var_r31->unk_00[1], HU3D_ATTR_DISPOFF);
|
|
HuSprAnimKill(var_r31->unk_10);
|
|
var_r30->func = NULL;
|
|
}
|
|
|
|
s32 fn_1_11C8C(s32 arg0, Vec arg1, Vec arg2, GXColor arg3, float arg8, float arg9, float argA)
|
|
{
|
|
M428DllPlayerUnkStruct2 *var_r31;
|
|
M428DllPlayerUnk120Struct2 *var_r30;
|
|
s32 var_r29;
|
|
M428DllPlayerWork4 *var_r28;
|
|
omObjData *var_r27;
|
|
ModelData *var_r26;
|
|
|
|
var_r27 = lbl_1_bss_2B0;
|
|
var_r28 = var_r27->data;
|
|
var_r26 = &Hu3DData[var_r28->unk_00[arg0]];
|
|
var_r30 = var_r26->unk_120;
|
|
for (var_r31 = var_r30->unk_3C, var_r29 = 0; var_r29 < var_r30->unk_26; var_r29++, var_r31++) {
|
|
if (var_r31->unk_30 <= 0.0f) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r29 >= var_r30->unk_26) {
|
|
return -1;
|
|
}
|
|
var_r31->unk_00 = var_r31->unk_02 = 0;
|
|
var_r31->unk_38.x = arg1.x;
|
|
var_r31->unk_38.y = arg1.y;
|
|
var_r31->unk_38.z = arg1.z;
|
|
var_r31->unk_04 = arg2.x;
|
|
var_r31->unk_08 = arg2.y;
|
|
var_r31->unk_0C = arg2.z;
|
|
var_r31->unk_18 = arg9;
|
|
var_r31->unk_30 = arg8;
|
|
var_r31->unk_44.r = arg3.r;
|
|
var_r31->unk_44.g = arg3.g;
|
|
var_r31->unk_44.b = arg3.b;
|
|
var_r31->unk_44.a = arg3.a;
|
|
var_r31->unk_34 = 0.0f;
|
|
var_r31->unk_48 = 0;
|
|
var_r31->unk_00 = 0;
|
|
var_r31->unk_28 = 0.0f;
|
|
var_r31->unk_2C = argA;
|
|
var_r28->unk_08[arg0]++;
|
|
return var_r29;
|
|
}
|
|
|
|
static inline s32 fn_1_11C8C_inlined(s32 arg0, Vec arg1, Vec arg2, GXColor arg3, float arg8, float arg9, float argA)
|
|
{
|
|
M428DllPlayerUnkStruct2 *var_r31;
|
|
M428DllPlayerUnk120Struct2 *var_r30;
|
|
s32 var_r29;
|
|
M428DllPlayerWork4 *var_r28;
|
|
omObjData *var_r27;
|
|
ModelData *var_r26;
|
|
|
|
var_r27 = lbl_1_bss_2B0;
|
|
var_r28 = var_r27->data;
|
|
var_r26 = &Hu3DData[var_r28->unk_00[arg0]];
|
|
var_r30 = var_r26->unk_120;
|
|
for (var_r31 = var_r30->unk_3C, var_r29 = 0; var_r29 < var_r30->unk_26; var_r29++, var_r31++) {
|
|
if (var_r31->unk_30 <= 0.0f) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r29 >= var_r30->unk_26) {
|
|
return -1;
|
|
}
|
|
var_r31->unk_00 = var_r31->unk_02 = 0;
|
|
var_r31->unk_38.x = arg1.x;
|
|
var_r31->unk_38.y = arg1.y;
|
|
var_r31->unk_38.z = arg1.z;
|
|
var_r31->unk_04 = arg2.x;
|
|
var_r31->unk_08 = arg2.y;
|
|
var_r31->unk_0C = arg2.z;
|
|
var_r31->unk_18 = arg9;
|
|
var_r31->unk_30 = arg8;
|
|
var_r31->unk_44.r = arg3.r;
|
|
var_r31->unk_44.g = arg3.g;
|
|
var_r31->unk_44.b = arg3.b;
|
|
var_r31->unk_44.a = arg3.a;
|
|
var_r31->unk_34 = 0.0f;
|
|
var_r31->unk_48 = 0;
|
|
var_r31->unk_00 = 0;
|
|
var_r31->unk_28 = 0.0f;
|
|
var_r31->unk_2C = argA;
|
|
var_r28->unk_08[arg0]++;
|
|
return var_r29;
|
|
}
|
|
|
|
s32 fn_1_11DE4(s32 arg0, Vec arg1, Vec arg2, float arg8, float arg9, float argA, float argB, GXColor arg3)
|
|
{
|
|
Vec sp64;
|
|
Vec sp58;
|
|
s32 sp24;
|
|
s32 sp20;
|
|
float var_f31;
|
|
|
|
sp58.x = arg2.z;
|
|
sp58.z = arg2.x;
|
|
sp58.y = 0.0f;
|
|
VECNormalize(&sp58, &sp58);
|
|
var_f31 = 0.5f * argA;
|
|
sp64.x = arg1.x + (sp58.x * var_f31);
|
|
sp64.y = arg1.y + (sp58.y * var_f31);
|
|
sp64.z = arg1.z + (sp58.z * var_f31);
|
|
|
|
sp24 = fn_1_11C8C_inlined(arg0, sp64, arg2, arg3, arg8, arg9, argB);
|
|
sp64.x = arg1.x - (sp58.x * var_f31);
|
|
sp64.y = arg1.y - (sp58.y * var_f31);
|
|
sp64.z = arg1.z - (sp58.z * var_f31);
|
|
|
|
sp20 = fn_1_11C8C_inlined(arg0, sp64, arg2, arg3, arg8, -arg9, argB);
|
|
return (sp24 << 0x10) | sp20;
|
|
}
|
|
|
|
float fn_1_12254(float arg8, float arg9)
|
|
{
|
|
float var_f31;
|
|
|
|
if (arg8 >= 360.0f) {
|
|
arg8 -= 360.0f;
|
|
}
|
|
else if (arg8 < 0.0f) {
|
|
arg8 += 360.0f;
|
|
}
|
|
if (arg9 >= 360.0f) {
|
|
arg9 -= 360.0f;
|
|
}
|
|
else if (arg9 < 0.0f) {
|
|
arg9 += 360.0f;
|
|
}
|
|
var_f31 = arg8 - arg9;
|
|
if (var_f31 <= -180.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
else if (var_f31 >= 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
return var_f31;
|
|
}
|
|
|
|
float fn_1_1236C(float arg8, float arg9, float argA)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
if (arg8 >= 360.0) {
|
|
arg8 -= 360.0;
|
|
}
|
|
else if (arg8 < 0.0) {
|
|
arg8 += 360.0;
|
|
}
|
|
if (arg9 >= 360.0) {
|
|
arg9 -= 360.0;
|
|
}
|
|
else if (arg9 < 0.0) {
|
|
arg9 += 360.0;
|
|
}
|
|
var_f30 = 360.0 + (arg8 - arg9);
|
|
if (fabs(var_f30) >= 360.0) {
|
|
var_f30 = fmod(var_f30, 360.0);
|
|
}
|
|
if (var_f30 < 180.0) {
|
|
if (var_f30 <= argA) {
|
|
var_f31 = var_f30;
|
|
}
|
|
else {
|
|
var_f31 = argA;
|
|
}
|
|
}
|
|
else if (360.0 - var_f30 <= argA) {
|
|
var_f31 = -(360.0 - var_f30);
|
|
}
|
|
else {
|
|
var_f31 = -argA;
|
|
}
|
|
var_f31 += arg9;
|
|
if (var_f31 >= 360.0) {
|
|
var_f31 -= 360.0;
|
|
}
|
|
else if (var_f31 < 0.0) {
|
|
var_f31 += 360.0;
|
|
}
|
|
return var_f31;
|
|
}
|
|
|
|
float fn_1_125BC(float arg8, float arg9, float argA)
|
|
{
|
|
float var_f24;
|
|
float var_f23;
|
|
|
|
var_f23 = fn_1_12254(argA, arg9);
|
|
var_f24 = fabs(var_f23 * arg8);
|
|
return fn_1_1236C(argA, arg9, var_f24);
|
|
}
|
|
|
|
void fn_1_129B4(float arg8, Vec *arg0, Vec *arg1, Vec *arg2)
|
|
{
|
|
Vec sp8;
|
|
sp8.x = arg0->x + (arg8 * (arg1->x - arg0->x));
|
|
sp8.y = arg0->y + (arg8 * (arg1->y - arg0->y));
|
|
sp8.z = arg0->z + (arg8 * (arg1->z - arg0->z));
|
|
*arg2 = sp8;
|
|
}
|
|
|
|
float fn_1_12A2C(float arg8, float arg9, float argA, float argB)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
var_f31 = 1.0 - arg8;
|
|
var_f30 = (argB * (arg8 * arg8)) + ((arg9 * (var_f31 * var_f31)) + (2.0 * (argA * (var_f31 * arg8))));
|
|
return var_f30;
|
|
}
|
|
|
|
void fn_1_12AA4(float arg8, Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3)
|
|
{
|
|
arg3->x = fn_1_12A2C(arg8, arg0->x, arg1->x, arg2->x);
|
|
arg3->y = fn_1_12A2C(arg8, arg0->y, arg1->y, arg2->y);
|
|
arg3->z = fn_1_12A2C(arg8, arg0->z, arg1->z, arg2->z);
|
|
}
|
|
|
|
s16 fn_1_12CD4(AnimData *sp8, s16 var_r26)
|
|
{
|
|
s16 var_r30;
|
|
M428DllPlayerUnkStruct2 *var_r29;
|
|
Vec2f *var_r28;
|
|
Vec *var_r25;
|
|
void *var_r24;
|
|
void *var_r22;
|
|
|
|
s16 var_r23 = Hu3DHookFuncCreate(fn_1_134C0);
|
|
ModelData *var_r27 = &Hu3DData[var_r23];
|
|
M428DllPlayerUnk120Struct2 *var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M428DllPlayerUnk120Struct2), var_r27->unk_48);
|
|
var_r27->unk_120 = var_r31;
|
|
var_r31->unk_38 = sp8;
|
|
var_r31->unk_26 = var_r26;
|
|
var_r31->unk_20 = 0;
|
|
var_r31->unk_22 = 0;
|
|
var_r31->unk_4C = 0;
|
|
var_r31->unk_50 = 0;
|
|
var_r31->unk_28 = 0;
|
|
var_r31->unk_21 = 0;
|
|
var_r31->unk_23 = 0;
|
|
var_r31->unk_30 = 0;
|
|
var_r31->unk_00 = var_r31->unk_02 = 0;
|
|
var_r29 = HuMemDirectMallocNum(HEAP_DATA, var_r26 * sizeof(M428DllPlayerUnkStruct2), var_r27->unk_48);
|
|
var_r31->unk_3C = var_r29;
|
|
memset(var_r29, 0, var_r26 * sizeof(M428DllPlayerUnkStruct2));
|
|
for (var_r30 = 0; var_r30 < var_r26; var_r30++, var_r29++) {
|
|
var_r29->unk_30 = 0.0f;
|
|
var_r29->unk_34 = 0.0f;
|
|
var_r29->unk_28 = 0.0f;
|
|
var_r29->unk_2C = 1.0f;
|
|
var_r29->unk_38.x = ((frand() & 0x7F) - 0x40) * 0x14;
|
|
var_r29->unk_38.y = ((frand() & 0x7F) - 0x40) * 0x1E;
|
|
var_r29->unk_38.z = ((frand() & 0x7F) - 0x40) * 0x14;
|
|
var_r29->unk_44.r = var_r29->unk_44.g = var_r29->unk_44.b = var_r29->unk_44.a = 0xFF;
|
|
var_r29->unk_48 = 0;
|
|
}
|
|
var_r25 = HuMemDirectMallocNum(HEAP_DATA, var_r26 * sizeof(Vec) * 4, var_r27->unk_48);
|
|
var_r31->unk_40 = var_r25;
|
|
for (var_r30 = 0; var_r30 < (var_r26 * 4); var_r30++, var_r25++) {
|
|
var_r25->x = var_r25->y = var_r25->z = 0.0f;
|
|
}
|
|
var_r28 = HuMemDirectMallocNum(HEAP_DATA, var_r26 * sizeof(Vec2f) * 4, var_r27->unk_48);
|
|
var_r31->unk_44 = var_r28;
|
|
for (var_r30 = 0; var_r30 < var_r26; var_r30++) {
|
|
var_r28->x = 0.0f;
|
|
var_r28->y = 0.0f;
|
|
var_r28++;
|
|
var_r28->x = 1.0f;
|
|
var_r28->y = 0.0f;
|
|
var_r28++;
|
|
var_r28->x = 1.0f;
|
|
var_r28->y = 1.0f;
|
|
var_r28++;
|
|
var_r28->x = 0.0f;
|
|
var_r28->y = 1.0f;
|
|
var_r28++;
|
|
}
|
|
var_r24 = HuMemDirectMallocNum(HEAP_DATA, 0x10000, var_r27->unk_48);
|
|
var_r22 = var_r24;
|
|
DCFlushRange(var_r24, 0x10000);
|
|
GXBeginDisplayList(var_r22, 0x10000);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, var_r26 * 4);
|
|
for (var_r30 = 0; var_r30 < var_r26; var_r30++) {
|
|
GXUnknownu16(var_r30 * 4);
|
|
GXUnknownu16(var_r30);
|
|
GXUnknownu16(var_r30 * 4);
|
|
GXUnknownu16(var_r30 * 4 + 1);
|
|
GXUnknownu16(var_r30);
|
|
GXUnknownu16(var_r30 * 4 + 1);
|
|
GXUnknownu16(var_r30 * 4 + 2);
|
|
GXUnknownu16(var_r30);
|
|
GXUnknownu16(var_r30 * 4 + 2);
|
|
GXUnknownu16(var_r30 * 4 + 3);
|
|
GXUnknownu16(var_r30);
|
|
GXUnknownu16(var_r30 * 4 + 3);
|
|
}
|
|
var_r31->unk_34 = GXEndDisplayList();
|
|
var_r31->unk_48 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_34, var_r27->unk_48);
|
|
memcpy(var_r31->unk_48, var_r24, var_r31->unk_34);
|
|
DCFlushRange(var_r31->unk_48, var_r31->unk_34);
|
|
HuMemDirectFree(var_r24);
|
|
(void)var_r30;
|
|
(void)var_r26;
|
|
return var_r23;
|
|
}
|
|
|
|
s16 fn_1_13184(s16 sp8)
|
|
{
|
|
M428DllPlayerUnk120Struct2 *var_r31;
|
|
M428DllPlayerUnkStruct2 *var_r30;
|
|
Vec2f *var_r29;
|
|
s16 var_r28;
|
|
ModelData *var_r27;
|
|
M428DllPlayerUnk120Struct2 *var_r26;
|
|
Vec *var_r25;
|
|
s32 var_r24;
|
|
ModelData *var_r23;
|
|
s16 var_r22;
|
|
|
|
var_r23 = &Hu3DData[sp8];
|
|
var_r26 = var_r23->unk_120;
|
|
var_r22 = Hu3DHookFuncCreate(var_r23->hook);
|
|
var_r27 = &Hu3DData[var_r22];
|
|
var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M428DllPlayerUnk120Struct2), var_r27->unk_48);
|
|
var_r27->unk_120 = var_r31;
|
|
var_r31->unk_38 = var_r26->unk_38;
|
|
var_r31->unk_26 = var_r26->unk_26;
|
|
var_r24 = var_r31->unk_26;
|
|
var_r31->unk_20 = 0;
|
|
var_r31->unk_22 = var_r26->unk_22;
|
|
var_r31->unk_4C = NULL;
|
|
var_r31->unk_50 = NULL;
|
|
var_r31->unk_28 = 0;
|
|
var_r31->unk_21 = 0;
|
|
var_r31->unk_30 = 0;
|
|
var_r31->unk_00 = var_r31->unk_02 = 0;
|
|
var_r30 = HuMemDirectMallocNum(HEAP_DATA, var_r24 * sizeof(M428DllPlayerUnkStruct2), var_r27->unk_48);
|
|
var_r31->unk_3C = var_r30;
|
|
for (var_r28 = 0; var_r28 < var_r24; var_r28++, var_r30++) {
|
|
var_r30->unk_30 = 0.0f;
|
|
var_r30->unk_34 = 0.0f;
|
|
var_r30->unk_28 = 0.0f;
|
|
var_r30->unk_2C = 1.0f;
|
|
var_r30->unk_38.x = ((frand() & 0x7F) - 0x40) * 0x14;
|
|
var_r30->unk_38.y = ((frand() & 0x7F) - 0x40) * 0x1E;
|
|
var_r30->unk_38.z = ((frand() & 0x7F) - 0x40) * 0x14;
|
|
var_r30->unk_44.r = var_r30->unk_44.g = var_r30->unk_44.b = var_r30->unk_44.a = 0xFF;
|
|
var_r30->unk_48 = 0;
|
|
}
|
|
var_r25 = HuMemDirectMallocNum(HEAP_DATA, var_r24 * sizeof(Vec) * 4, var_r27->unk_48);
|
|
var_r31->unk_40 = var_r25;
|
|
for (var_r28 = 0; var_r28 < (var_r24 * 4); var_r28++, var_r25++) {
|
|
var_r25->x = var_r25->y = var_r25->z = 0.0f;
|
|
}
|
|
var_r29 = HuMemDirectMallocNum(HEAP_DATA, var_r24 * sizeof(Vec2f) * 4, var_r27->unk_48);
|
|
var_r31->unk_44 = var_r29;
|
|
for (var_r28 = 0; var_r28 < var_r24; var_r28++) {
|
|
var_r29->x = 0.0f;
|
|
var_r29->y = 0.0f;
|
|
var_r29++;
|
|
var_r29->x = 1.0f;
|
|
var_r29->y = 0.0f;
|
|
var_r29++;
|
|
var_r29->x = 1.0f;
|
|
var_r29->y = 1.0f;
|
|
var_r29++;
|
|
var_r29->x = 0.0f;
|
|
var_r29->y = 1.0f;
|
|
var_r29++;
|
|
}
|
|
var_r31->unk_34 = var_r26->unk_34;
|
|
var_r31->unk_48 = var_r26->unk_48;
|
|
return var_r22;
|
|
}
|
|
|
|
void fn_1_134C0(ModelData *var_r23, Mtx var_r22)
|
|
{
|
|
Mtx sp128;
|
|
Mtx spF8;
|
|
Mtx spC8;
|
|
Vec sp98[4];
|
|
Vec sp68[4];
|
|
Vec sp38[4];
|
|
ROMtx sp8;
|
|
M428DllPlayerUnk120Struct2 *var_r31;
|
|
Vec *var_r30;
|
|
M428DllPlayerUnkStruct2 *var_r29;
|
|
Vec2f *var_r28;
|
|
Vec *var_r27;
|
|
s16 var_r26;
|
|
s16 var_r25;
|
|
Vec *var_r24;
|
|
s16 var_r21;
|
|
s16 var_r20;
|
|
s16 var_r19;
|
|
M428DllPlayerHook var_r18;
|
|
|
|
var_r31 = var_r23->unk_120;
|
|
if ((var_r31->unk_2C != GlobalCounter) || (shadowModelDrawF != 0)) {
|
|
if ((var_r31->unk_50) && (var_r31->unk_50 != var_r23)) {
|
|
fn_1_134C0(var_r31->unk_50, var_r22);
|
|
}
|
|
GXLoadPosMtxImm(var_r22, 0);
|
|
GXSetNumTevStages(1);
|
|
GXSetNumTexGens(1);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
if (shadowModelDrawF != 0) {
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ONE, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
|
|
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
|
|
}
|
|
else {
|
|
var_r21 = var_r31->unk_38->bmp->dataFmt & 0xF;
|
|
if ((var_r21 == 7) || (var_r21 == 8)) {
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ONE, GX_CC_RASC, GX_CC_ZERO);
|
|
}
|
|
else {
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO);
|
|
}
|
|
if ((var_r31->unk_22 & 1) != 0) {
|
|
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
|
|
}
|
|
else if ((var_r23->attr & 2) != 0) {
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
|
}
|
|
else {
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
|
|
}
|
|
}
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, 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, 1, GX_TEVPREV);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
HuSprTexLoad(var_r31->unk_38, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR);
|
|
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
|
|
GXSetZCompLoc(0);
|
|
switch (var_r31->unk_20) {
|
|
case 0:
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
|
break;
|
|
case 1:
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP);
|
|
break;
|
|
case 2:
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP);
|
|
break;
|
|
}
|
|
if (HmfInverseMtxF3X3(var_r22, &sp128[0]) == 0) {
|
|
MTXIdentity(sp128);
|
|
}
|
|
MTXReorder(sp128, sp8);
|
|
if (var_r31->unk_4C) {
|
|
var_r18 = var_r31->unk_4C;
|
|
var_r18(var_r23, var_r31, var_r22);
|
|
}
|
|
var_r29 = var_r31->unk_3C;
|
|
var_r30 = var_r31->unk_40;
|
|
var_r28 = var_r31->unk_44;
|
|
MTXROMultVecArray(sp8, lbl_1_data_6A4, &sp38[0], 4);
|
|
for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
|
|
if (!var_r29->unk_30) {
|
|
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
|
var_r30++;
|
|
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
|
var_r30++;
|
|
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
|
var_r30++;
|
|
var_r30->x = var_r30->y = var_r30->z = 0.0f;
|
|
var_r30++;
|
|
}
|
|
else if (!var_r29->unk_34) {
|
|
var_r27 = &sp98[0];
|
|
var_r24 = &sp38[0];
|
|
VECScale(var_r24++, var_r27, var_r29->unk_30);
|
|
VECAdd(var_r27++, &var_r29->unk_38, var_r30++);
|
|
VECScale(var_r24++, var_r27, var_r29->unk_30);
|
|
VECAdd(var_r27++, &var_r29->unk_38, var_r30++);
|
|
VECScale(var_r24++, var_r27, var_r29->unk_30);
|
|
VECAdd(var_r27++, &var_r29->unk_38, var_r30++);
|
|
VECScale(var_r24++, var_r27, var_r29->unk_30);
|
|
VECAdd(var_r27++, &var_r29->unk_38, var_r30++);
|
|
}
|
|
else {
|
|
VECScale(lbl_1_data_6A4, &sp98[0], var_r29->unk_30);
|
|
VECScale(&lbl_1_data_6A4[1], &sp98[1], var_r29->unk_30);
|
|
VECScale(&lbl_1_data_6A4[2], &sp98[2], var_r29->unk_30);
|
|
VECScale(&lbl_1_data_6A4[3], &sp98[3], var_r29->unk_30);
|
|
MTXRotRad(spC8, 0x5A, var_r29->unk_34);
|
|
MTXConcat(&sp128[0], spC8, spF8);
|
|
MTXMultVecArray(spF8, &sp98[0], &sp68[0], 4);
|
|
VECAdd(&sp68[0], &var_r29->unk_38, var_r30++);
|
|
VECAdd(&sp68[1], &var_r29->unk_38, var_r30++);
|
|
VECAdd(&sp68[2], &var_r29->unk_38, var_r30++);
|
|
VECAdd(&sp68[3], &var_r29->unk_38, var_r30++);
|
|
}
|
|
}
|
|
var_r29 = var_r31->unk_3C;
|
|
var_r28 = var_r31->unk_44;
|
|
if ((var_r31->unk_22 & 2) == 0) {
|
|
for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
|
|
var_r20 = var_r29->unk_48 & 3;
|
|
var_r19 = (var_r29->unk_48 >> 2) & 3;
|
|
for (var_r25 = 0; var_r25 < 4; var_r25++, var_r28++) {
|
|
var_r28->x = (0.25f * var_r20) + lbl_1_data_6D4[var_r25].x;
|
|
var_r28->y = (0.25f * var_r19) + lbl_1_data_6D4[var_r25].y;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
for (var_r26 = 0; var_r26 < var_r31->unk_26; var_r26++, var_r29++) {
|
|
for (var_r25 = 0; var_r25 < 4; var_r25++, var_r28++) {
|
|
var_r28->x = 4.0f * lbl_1_data_6D4[var_r25].x;
|
|
var_r28->y = 4.0f * lbl_1_data_6D4[var_r25].y;
|
|
}
|
|
}
|
|
}
|
|
DCFlushRangeNoSync(var_r31->unk_40, var_r31->unk_26 * 0xC * 4);
|
|
DCFlushRangeNoSync(var_r31->unk_44, var_r31->unk_26 * 8 * 4);
|
|
DCFlushRangeNoSync(var_r31->unk_3C, var_r31->unk_26 * 0x4C);
|
|
PPCSync();
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSETARRAY(GX_VA_POS, var_r31->unk_40, var_r31->unk_26 * sizeof(Vec) * 4, sizeof(Vec));
|
|
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
|
GXSETARRAY(GX_VA_CLR0, &var_r31->unk_3C->unk_44, sizeof(GXColor), sizeof(M428DllPlayerUnkStruct2)); // bug?
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
|
GXSETARRAY(GX_VA_TEX0, var_r31->unk_44, var_r31->unk_26 * sizeof(Vec2f) * 4, sizeof(Vec2f));
|
|
GXCallDisplayList(var_r31->unk_48, var_r31->unk_34);
|
|
if (shadowModelDrawF == 0) {
|
|
if ((var_r31->unk_21 & 2) == 0) {
|
|
var_r31->unk_28++;
|
|
}
|
|
if ((var_r31->unk_30 != 0) && (var_r31->unk_30 <= var_r31->unk_28)) {
|
|
if ((var_r31->unk_21 & 1) != 0) {
|
|
var_r31->unk_28 = 0;
|
|
}
|
|
var_r31->unk_28 = var_r31->unk_30;
|
|
}
|
|
var_r31->unk_2C = GlobalCounter;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_13D9C(s16 arg0, s16 arg1, s32 arg2)
|
|
{
|
|
if (arg2 == 0) {
|
|
fn_1_13EC8(arg0, arg1, 0.0f);
|
|
return;
|
|
}
|
|
fn_1_13EC8(arg0, arg1, 1.0f);
|
|
}
|
|
|
|
void fn_1_13E14(s16 arg0, s16 arg1, Vec arg2)
|
|
{
|
|
M428DllPlayerUnkStruct2 *var_r31;
|
|
M428DllPlayerUnk120Struct2 *var_r30;
|
|
s32 var_r29;
|
|
ModelData *var_r28;
|
|
|
|
var_r28 = &Hu3DData[arg0];
|
|
var_r30 = var_r28->unk_120;
|
|
if (arg1 != -1) {
|
|
var_r31 = &var_r30->unk_3C[arg1];
|
|
var_r31->unk_38 = arg2;
|
|
return;
|
|
}
|
|
for (var_r31 = var_r30->unk_3C, var_r29 = 0; var_r29 < var_r30->unk_26; var_r29++, var_r31++) {
|
|
var_r31->unk_38 = arg2;
|
|
}
|
|
}
|
|
|
|
void fn_1_13EC8(s16 arg0, s16 arg1, float arg8)
|
|
{
|
|
M428DllPlayerUnkStruct2 *var_r31;
|
|
M428DllPlayerUnk120Struct2 *var_r30;
|
|
s32 var_r29;
|
|
ModelData *var_r28;
|
|
|
|
var_r28 = &Hu3DData[arg0];
|
|
var_r30 = var_r28->unk_120;
|
|
if (arg1 != -1) {
|
|
var_r31 = &var_r30->unk_3C[arg1];
|
|
var_r31->unk_30 = arg8;
|
|
return;
|
|
}
|
|
for (var_r31 = var_r30->unk_3C, var_r29 = 0; var_r29 < var_r30->unk_26; var_r29++, var_r31++) {
|
|
var_r31->unk_30 = arg8;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_13F54(s16 arg0, char *arg1, Mtx arg2, s32 arg3)
|
|
{
|
|
Mtx sp44;
|
|
Mtx sp14;
|
|
ModelData *var_r31;
|
|
HsfData *var_r30;
|
|
|
|
var_r31 = &Hu3DData[arg0];
|
|
var_r30 = var_r31->hsfData;
|
|
lbl_1_bss_130 = 0;
|
|
if (var_r31->unk_08 != -1) {
|
|
lbl_1_bss_134 = 1;
|
|
}
|
|
else {
|
|
lbl_1_bss_134 = 0;
|
|
}
|
|
mtxRot(sp14, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z);
|
|
MTXScale(sp44, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z);
|
|
MTXConcat(sp14, sp44, sp44);
|
|
mtxTransCat(sp44, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z);
|
|
MTXConcat(sp44, var_r31->unk_F0, sp44);
|
|
if (arg3 != 0) {
|
|
MTXConcat(arg2, sp44, sp44);
|
|
}
|
|
fn_1_14088(var_r30->root, sp44, arg1, arg2);
|
|
return lbl_1_bss_130;
|
|
}
|
|
|
|
void fn_1_14088(HsfObject *arg0, Mtx arg1, char *arg2, Mtx arg3)
|
|
{
|
|
Mtx spF8;
|
|
Mtx spC8;
|
|
Mtx sp98;
|
|
Mtx sp68;
|
|
Mtx sp38;
|
|
Mtx sp8;
|
|
HsfTransform *var_r31;
|
|
HsfTransform *var_r30;
|
|
HsfTransform *var_r29;
|
|
HsfObject *var_r28;
|
|
HsfObject *var_r27;
|
|
u32 var_r25;
|
|
u32 var_r24;
|
|
u32 var_r23;
|
|
|
|
if (lbl_1_bss_130 == 0) {
|
|
if (lbl_1_bss_134 != 0) {
|
|
var_r31 = &arg0->data.curr;
|
|
}
|
|
else {
|
|
var_r31 = &arg0->data.base;
|
|
}
|
|
if ((var_r31->scale.x <= 0.0f) && (var_r31->scale.y <= 0.0f) && (var_r31->scale.z <= 0.0f)) {
|
|
MTXCopy(arg1, spF8);
|
|
OSReport("OBJ MTX CHECK ERROR %s \n", arg0->name);
|
|
}
|
|
else {
|
|
mtxRot(spC8, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z);
|
|
MTXScale(spF8, var_r31->scale.x, var_r31->scale.y, var_r31->scale.z);
|
|
MTXConcat(spC8, spF8, spF8);
|
|
mtxTransCat(spF8, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z);
|
|
MTXConcat(arg1, spF8, spF8);
|
|
}
|
|
if (lbl_1_bss_138 != 0) {
|
|
OSReport("%s \n", arg0->name);
|
|
}
|
|
if (strcmp(arg2, arg0->name) == 0) {
|
|
MTXCopy(spF8, arg3);
|
|
lbl_1_bss_130 = 1;
|
|
}
|
|
for (var_r25 = 0; var_r25 < arg0->data.childrenCount; var_r25++) {
|
|
var_r28 = arg0->data.children[var_r25];
|
|
if (lbl_1_bss_130 == 0) {
|
|
if (lbl_1_bss_134 != 0) {
|
|
var_r30 = &var_r28->data.curr;
|
|
}
|
|
else {
|
|
var_r30 = &var_r28->data.base;
|
|
}
|
|
if ((var_r30->scale.x <= 0.0f) && (var_r30->scale.y <= 0.0f) && (var_r30->scale.z <= 0.0f)) {
|
|
MTXCopy(spF8, sp68);
|
|
OSReport("OBJ MTX CHECK ERROR %s \n", var_r28->name);
|
|
}
|
|
else {
|
|
mtxRot(&sp98[0], var_r30->rot.x, var_r30->rot.y, var_r30->rot.z);
|
|
MTXScale(sp68, var_r30->scale.x, var_r30->scale.y, var_r30->scale.z);
|
|
MTXConcat(&sp98[0], sp68, sp68);
|
|
mtxTransCat(sp68, var_r30->pos.x, var_r30->pos.y, var_r30->pos.z);
|
|
MTXConcat(spF8, sp68, sp68);
|
|
}
|
|
if (lbl_1_bss_138 != 0) {
|
|
OSReport("%s \n", var_r28->name);
|
|
}
|
|
if (strcmp(arg2, var_r28->name) == 0) {
|
|
MTXCopy(sp68, arg3);
|
|
lbl_1_bss_130 = 1;
|
|
}
|
|
for (var_r24 = 0; var_r24 < var_r28->data.childrenCount; var_r24++) {
|
|
var_r27 = var_r28->data.children[var_r24];
|
|
if (lbl_1_bss_130 == 0) {
|
|
if (lbl_1_bss_134 != 0) {
|
|
var_r29 = &var_r27->data.curr;
|
|
}
|
|
else {
|
|
var_r29 = &var_r27->data.base;
|
|
}
|
|
if ((var_r29->scale.x <= 0.0f) && (var_r29->scale.y <= 0.0f) && (var_r29->scale.z <= 0.0f)) {
|
|
MTXCopy(sp68, sp8);
|
|
OSReport("OBJ MTX CHECK ERROR %s \n", var_r27->name);
|
|
}
|
|
else {
|
|
mtxRot(sp38, var_r29->rot.x, var_r29->rot.y, var_r29->rot.z);
|
|
MTXScale(sp8, var_r29->scale.x, var_r29->scale.y, var_r29->scale.z);
|
|
MTXConcat(sp38, sp8, sp8);
|
|
mtxTransCat(sp8, var_r29->pos.x, var_r29->pos.y, var_r29->pos.z);
|
|
MTXConcat(sp68, sp8, sp8);
|
|
}
|
|
if (lbl_1_bss_138 != 0) {
|
|
OSReport("%s \n", var_r27->name);
|
|
}
|
|
if (strcmp(arg2, var_r27->name) == 0) {
|
|
MTXCopy(sp8, arg3);
|
|
lbl_1_bss_130 = 1;
|
|
}
|
|
for (var_r23 = 0; var_r23 < var_r27->data.childrenCount; var_r23++) {
|
|
fn_1_14088(var_r27->data.children[var_r23], sp8, arg2, arg3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_14560(s16 arg0)
|
|
{
|
|
CameraData *var_r31 = &Hu3DCamera[arg0];
|
|
C_MTXLookAt(lbl_1_bss_23C[arg0], &var_r31->pos, &var_r31->up, &var_r31->target);
|
|
GXGetProjectionv(&lbl_1_bss_1BC[arg0].unk_00);
|
|
GXGetViewportv(&lbl_1_bss_13C[arg0].unk_00);
|
|
}
|
|
|
|
void fn_1_145F8(s16 var_r29, Vec *var_r31, float *var_r30)
|
|
{
|
|
GXProject(var_r31->x, var_r31->y, var_r31->z, lbl_1_bss_23C[var_r29], &lbl_1_bss_1BC[var_r29].unk_00, &lbl_1_bss_13C[var_r29].unk_00, var_r30,
|
|
&var_r30[1], &var_r30[2]);
|
|
}
|