1492 lines
50 KiB
C
1492 lines
50 KiB
C
#include "ext_math.h"
|
|
#include "game/chrman.h"
|
|
#include "game/frand.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/msm.h"
|
|
#include "game/object.h"
|
|
#include "game/objsub.h"
|
|
#include "game/pad.h"
|
|
#include "game/sprite.h"
|
|
#include "game/wipe.h"
|
|
#include "rel_sqrt_consts.h"
|
|
#include "string.h"
|
|
|
|
typedef struct UnkM404Struct {
|
|
s16 unk_00;
|
|
s16 unk_02[6];
|
|
s16 unk0E[10];
|
|
} UnkM404Struct;
|
|
|
|
typedef struct UnkM404Struct2 {
|
|
float unk_00;
|
|
float unk_04;
|
|
float unk_08;
|
|
float unk_0C;
|
|
float unk_10;
|
|
float unk_14;
|
|
float unk_18;
|
|
} UnkM404Struct2;
|
|
|
|
typedef struct UnkM404Struct3 {
|
|
struct {
|
|
u8 unk_00_field0 : 1;
|
|
u8 unk_00_field1 : 1;
|
|
u8 unk_00_field2 : 1;
|
|
};
|
|
s8 unk01;
|
|
s16 unk_02;
|
|
s16 unk_04;
|
|
s8 unk_06;
|
|
s8 unk_07;
|
|
u16 unk_08;
|
|
u16 unk_0A;
|
|
s16 unk_0C;
|
|
s16 unk_0E;
|
|
s16 unk_10;
|
|
s16 unk_12;
|
|
float unk_14;
|
|
s32 unk18[2];
|
|
float unk_20;
|
|
float unk_24;
|
|
float unk_28;
|
|
s32 unk_2C;
|
|
s32 unk30[2];
|
|
s16 unk_38;
|
|
s16 unk3A;
|
|
AnimData *unk_3C;
|
|
AnimData *unk_40;
|
|
void *unk_44;
|
|
s32 unk_48;
|
|
AnimData *unk_4C;
|
|
AnimData *unk_50;
|
|
u16 unk_54;
|
|
u16 unk_56;
|
|
u16 unk_58;
|
|
u16 unk_5A;
|
|
u16 unk_5C;
|
|
u16 unk_5E;
|
|
float unk_60;
|
|
float unk_64;
|
|
float unk_68;
|
|
u16 unk_6C;
|
|
float (*unk_70)[2];
|
|
s32 unk_74;
|
|
s32 unk78[91];
|
|
} UnkM404Struct3; // size 0x1E4
|
|
|
|
omObjData *lbl_1_bss_58;
|
|
omObjData *lbl_1_bss_54;
|
|
omObjData *lbl_1_bss_50;
|
|
omObjData *lbl_1_bss_4C;
|
|
s32 lbl_1_bss_48;
|
|
s32 lbl_1_bss_38[4];
|
|
s32 lbl_1_bss_28[4];
|
|
s32 lbl_1_bss_24;
|
|
s32 lbl_1_bss_20;
|
|
s32 lbl_1_bss_1C;
|
|
Vec lbl_1_bss_10;
|
|
s16 lbl_1_bss_C;
|
|
s32 lbl_1_bss_8;
|
|
float lbl_1_bss_4;
|
|
s32 lbl_1_bss_0;
|
|
|
|
float lbl_1_data_0[][2] = {
|
|
{ -0.00026f, 0.51953f },
|
|
{ 0.02825f, 0.51563f },
|
|
{ 0.04108f, 0.5166f },
|
|
{ 0.05996f, 0.5166f },
|
|
{ 0.07878f, 0.39063f },
|
|
{ 0.08437f, 0.35254f },
|
|
{ 0.09284f, 0.2998f },
|
|
{ 0.10234f, 0.2998f },
|
|
{ 0.11283f, 0.2998f },
|
|
{ 0.1319f, 0.2959f },
|
|
{ 0.1373f, 0.40918f },
|
|
{ 0.15072f, 0.38574f },
|
|
{ 0.17747f, 0.38183f },
|
|
{ 0.19753f, 0.47168f },
|
|
{ 0.20098f, 0.74902f },
|
|
{ 0.2235f, 0.73438f },
|
|
{ 0.26048f, 0.71094f },
|
|
{ 0.27695f, 0.27344f },
|
|
{ 0.30872f, 0.29883f },
|
|
{ 0.32409f, 0.30566f },
|
|
{ 0.3291f, 0.56738f },
|
|
{ 0.34388f, 0.58594f },
|
|
{ 0.36296f, 0.58789f },
|
|
{ 0.3653f, 0.33984f },
|
|
{ 0.38112f, 0.32227f },
|
|
{ 0.38717f, 0.31543f },
|
|
{ 0.40221f, 0.4541f },
|
|
{ 0.42044f, 0.44433f },
|
|
{ 0.4375f, 0.43555f },
|
|
{ 0.46302f, 0.13281f },
|
|
{ 0.48229f, 0.13965f },
|
|
{ 0.50013f, 0.14844f },
|
|
{ 0.51406f, 0.14844f },
|
|
{ 0.52493f, 0.29394f },
|
|
{ 0.53854f, 0.5166f },
|
|
{ 0.53105f, 0.86816f },
|
|
{ 0.50755f, 0.87207f },
|
|
{ 0.48893f, 0.85254f },
|
|
{ 0.47923f, 0.64258f },
|
|
{ 0.48828f, 0.35156f },
|
|
{ 0.49401f, 0.19238f },
|
|
{ 0.50228f, 0.16797f },
|
|
{ 0.52454f, 0.1709f },
|
|
{ 0.54518f, 0.17188f },
|
|
{ 0.55547f, 0.1748f },
|
|
{ 0.57611f, 0.16992f },
|
|
{ 0.5916f, 0.16797f },
|
|
{ 0.61471f, 0.56543f },
|
|
{ 0.62467f, 0.76367f },
|
|
{ 0.65156f, 0.76465f },
|
|
{ 0.65742f, 0.75488f },
|
|
{ 0.69544f, 0.75488f },
|
|
{ 0.69544f, 0.63477f },
|
|
{ 0.69538f, 0.33203f },
|
|
{ 0.69544f, 0.22949f },
|
|
{ 0.7028f, 0.22558f },
|
|
{ 0.73079f, 0.2207f },
|
|
{ 0.76628f, 0.22558f },
|
|
{ 0.78555f, 0.22754f },
|
|
{ 0.79388f, 0.72949f },
|
|
{ 0.81113f, 0.73047f },
|
|
{ 0.83034f, 0.72949f },
|
|
{ 0.83789f, 0.33789f },
|
|
{ 0.86953f, 0.35449f },
|
|
{ 0.88047f, 0.36035f },
|
|
{ 0.88242f, 0.60058f },
|
|
{ 0.89479f, 0.63672f },
|
|
{ 0.93939f, 0.68555f },
|
|
{ 0.9252f, 0.52051f },
|
|
{ 0.94284f, 0.51758f },
|
|
{ 0.96113f, 0.51367f },
|
|
{ 0.99303f, 0.50977f },
|
|
{ 1.0f, 0.50683f },
|
|
};
|
|
float lbl_1_data_248[][2] = { { -0.00026f, 0.51953f }, { 0.02825f, 0.51563f }, { 0.0541f, 0.78222f }, { 0.07298f, 0.78222f }, { 0.0918f, 0.65625f },
|
|
{ 0.0724f, 0.16504f }, { 0.08607f, 0.15918f }, { 0.09928f, 0.15918f }, { 0.11615f, 0.47852f }, { 0.1248f, 0.60156f }, { 0.13379f, 0.73144f },
|
|
{ 0.15592f, 0.66602f }, { 0.17044f, 0.66308f }, { 0.18418f, 0.64355f }, { 0.19603f, 0.1748f }, { 0.22279f, 0.1709f }, { 0.26087f, 0.17383f },
|
|
{ 0.27507f, 0.16308f }, { 0.30443f, 0.16602f }, { 0.32142f, 0.16992f }, { 0.26738f, 0.70019f }, { 0.27487f, 0.70996f }, { 0.29395f, 0.71191f },
|
|
{ 0.35384f, 0.70703f }, { 0.36966f, 0.71289f }, { 0.37565f, 0.71582f }, { 0.37122f, 0.36523f }, { 0.38763f, 0.36621f }, { 0.40117f, 0.36719f },
|
|
{ 0.42135f, 0.16406f }, { 0.44062f, 0.1709f }, { 0.45846f, 0.17969f }, { 0.5099f, 0.07813f }, { 0.52077f, 0.22363f }, { 0.53437f, 0.44629f },
|
|
{ 0.53262f, 0.90722f }, { 0.50911f, 0.91113f }, { 0.49049f, 0.8916f }, { 0.48496f, 0.76758f }, { 0.48984f, 0.5f }, { 0.49557f, 0.34082f },
|
|
{ 0.5127f, 0.40234f }, { 0.53496f, 0.40527f }, { 0.55605f, 0.40625f }, { 0.56322f, 0.20801f }, { 0.58118f, 0.21387f }, { 0.59499f, 0.21875f },
|
|
{ 0.60208f, 0.35644f }, { 0.61634f, 0.37305f }, { 0.62865f, 0.37305f }, { 0.63242f, 0.30566f }, { 0.64707f, 0.30957f }, { 0.66439f, 0.31348f },
|
|
{ 0.67487f, 0.6084f }, { 0.69551f, 0.6084f }, { 0.69499f, 0.44922f }, { 0.69486f, 0.30078f }, { 0.69492f, 0.19824f }, { 0.70228f, 0.19433f },
|
|
{ 0.74681f, 0.18945f }, { 0.78229f, 0.19433f }, { 0.80156f, 0.19629f }, { 0.8194f, 0.76074f }, { 0.83665f, 0.76172f }, { 0.85586f, 0.76074f },
|
|
{ 0.85488f, 0.30859f }, { 0.88132f, 0.30469f }, { 0.89225f, 0.31055f }, { 0.89076f, 0.74902f }, { 0.90312f, 0.78516f }, { 0.94772f, 0.83398f },
|
|
{ 0.93092f, 0.52832f }, { 0.94857f, 0.52539f }, { 0.96686f, 0.52148f }, { 0.99303f, 0.50977f }, { 1.0f, 0.50683f } };
|
|
float lbl_1_data_4A8[][2] = { { -0.00026f, 0.51953f }, { 0.02825f, 0.51563f }, { 0.0332f, 0.55176f }, { 0.04759f, 0.4375f }, { 0.05775f, 0.2959f },
|
|
{ 0.06413f, 0.19629f }, { 0.08991f, 0.19531f }, { 0.10723f, 0.19531f }, { 0.11543f, 0.49707f }, { 0.12305f, 0.65918f }, { 0.13607f, 0.94336f },
|
|
{ 0.14779f, 0.68945f }, { 0.15514f, 0.53222f }, { 0.16204f, 0.4043f }, { 0.18034f, 0.49512f }, { 0.1847f, 0.35449f }, { 0.19095f, 0.15625f },
|
|
{ 0.20742f, 0.17285f }, { 0.22279f, 0.1709f }, { 0.24108f, 0.16894f }, { 0.24896f, 0.08887f }, { 0.2569f, 0.36328f }, { 0.26159f, 0.53125f },
|
|
{ 0.2679f, 0.69922f }, { 0.28079f, 0.80859f }, { 0.29987f, 0.89941f }, { 0.31224f, 0.7334f }, { 0.32246f, 0.55664f }, { 0.33112f, 0.41016f },
|
|
{ 0.36022f, 0.43164f }, { 0.37207f, 0.60058f }, { 0.38906f, 0.8457f }, { 0.40573f, 0.64844f }, { 0.42227f, 0.39941f }, { 0.43411f, 0.23926f },
|
|
{ 0.46732f, 0.79199f }, { 0.4875f, 0.82813f }, { 0.51387f, 0.83496f }, { 0.52324f, 0.13574f }, { 0.48893f, 0.12988f }, { 0.46237f, 0.16699f },
|
|
{ 0.46589f, 0.63086f }, { 0.48184f, 0.72266f }, { 0.49629f, 0.81836f }, { 0.50579f, 0.82422f }, { 0.52806f, 0.82715f }, { 0.54915f, 0.82813f },
|
|
{ 0.54974f, 0.19433f }, { 0.56764f, 0.17773f }, { 0.57936f, 0.16699f }, { 0.59199f, 0.16894f }, { 0.60111f, 0.16992f }, { 0.60124f, 0.4668f },
|
|
{ 0.60124f, 0.45996f }, { 0.60124f, 0.63183f }, { 0.61302f, 0.62695f }, { 0.6321f, 0.63477f }, { 0.65273f, 0.63477f }, { 0.65254f, 0.55176f },
|
|
{ 0.65254f, 0.49121f }, { 0.6526f, 0.39551f }, { 0.69297f, 0.39844f }, { 0.69642f, 0.62402f }, { 0.71595f, 0.61621f }, { 0.73451f, 0.61035f },
|
|
{ 0.74297f, 0.22266f }, { 0.77773f, 0.21484f }, { 0.79701f, 0.20898f }, { 0.79167f, 0.79102f }, { 0.80892f, 0.79785f }, { 0.83607f, 0.80762f },
|
|
{ 0.8487f, 0.4707f }, { 0.87995f, 0.47168f }, { 0.89089f, 0.47754f }, { 0.88796f, 0.14453f }, { 0.90833f, 0.13379f }, { 0.95078f, 0.18066f },
|
|
{ 0.95039f, 0.38183f }, { 0.95169f, 0.50977f }, { 0.96999f, 0.50488f }, { 0.99303f, 0.50977f }, { 1.0f, 0.50683f } };
|
|
|
|
UnkM404Struct2 lbl_1_data_738[] = { { 11000.0f, 450.0f, 0.0f, -87.5f, 323.2f, 42.7f, 0.0f }, { 6175.0f, 100.0f, 0.0f, -87.5f, 323.2f, 0.0f, 0.0f } };
|
|
|
|
Vec lbl_1_data_770 = { 700.0f, 2500.0f, -700.0f };
|
|
Vec lbl_1_data_77C = { 0 };
|
|
GXColor lbl_1_data_788 = { 255, 255, 255, 255 };
|
|
Vec lbl_1_data_78C = { 1500.0f, 3000.0f, -200.0f };
|
|
Vec lbl_1_data_798 = { 0.0f, 1.0f, 0.0f };
|
|
|
|
s32 fn_1_E48(void);
|
|
void fn_1_39C(omObjData *object);
|
|
void fn_1_400(omObjData *object);
|
|
void fn_1_784(omObjData *object);
|
|
void fn_1_7E0(omObjData *object);
|
|
void fn_1_A9C(omObjData *object);
|
|
void fn_1_D00(Process *arg0);
|
|
void fn_1_DEC(void);
|
|
void fn_1_1160(void);
|
|
void fn_1_1344(omObjData *object);
|
|
void fn_1_1AFC(omObjData *object);
|
|
float fn_1_2EBC(float arg0[], float arg8);
|
|
void fn_1_4C7C(omObjData *object);
|
|
void fn_1_44A0(omObjData *object);
|
|
void fn_1_4F4C(omObjData *object);
|
|
void fn_1_5278(omObjData *object);
|
|
void fn_1_5598(Process *arg0);
|
|
void fn_1_553C(omObjData *object);
|
|
void fn_1_55F0(void);
|
|
void fn_1_55F4(omObjData *object);
|
|
void fn_1_57A0(omObjData *object);
|
|
void fn_1_58E4(ModelData *modelData, Mtx arg1);
|
|
AnimData *fn_1_5D64(u16 arg0, u16 arg1, s32 arg2);
|
|
void fn_1_5E74(AnimData *arg0, u16 arg1, u16 arg2, u16 arg3);
|
|
u16 fn_1_607C(AnimData *arg0, u16 arg1, u16 arg2);
|
|
s32 fn_1_6248(void *arg0, s32 arg1);
|
|
void fn_1_6440(omObjData *object);
|
|
void fn_1_648C(s32 arg0, s32 arg1, float arg8);
|
|
void fn_1_66DC(omObjData *object);
|
|
|
|
void ObjectSetup(void)
|
|
{
|
|
CameraData *var_r30;
|
|
Process *var_r31;
|
|
s16 var_r29;
|
|
|
|
var_r30 = Hu3DCamera;
|
|
OSReport("******* M404ObjectSetup *********\n");
|
|
var_r31 = omInitObjMan(50, 8192);
|
|
omGameSysInit(var_r31);
|
|
Hu3DCameraCreate(1);
|
|
Hu3DCameraPerspectiveSet(1, 10.0f, 20.0f, 25000.0f, 1.2f);
|
|
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
|
|
lbl_1_bss_50 = omAddObjEx(var_r31, 32730, 0, 0, -1, omOutView);
|
|
lbl_1_bss_10.x = lbl_1_data_77C.x - lbl_1_data_770.x;
|
|
lbl_1_bss_10.y = lbl_1_data_77C.y - lbl_1_data_770.y;
|
|
lbl_1_bss_10.z = lbl_1_data_77C.z - lbl_1_data_770.z;
|
|
PSVECNormalize(&lbl_1_bss_10, &lbl_1_bss_10);
|
|
var_r29 = Hu3DGLightCreateV(&lbl_1_data_770, &lbl_1_bss_10, &lbl_1_data_788);
|
|
Hu3DGLightInfinitytSet(var_r29);
|
|
Hu3DGLightStaticSet(var_r29, 1);
|
|
Hu3DShadowCreate(45.0f, var_r30->near, var_r30->far);
|
|
Hu3DShadowTPLvlSet(0.625f);
|
|
Hu3DShadowPosSet(&lbl_1_data_78C, &lbl_1_data_798, &lbl_1_data_77C);
|
|
HuAudSndGrpSet(29);
|
|
lbl_1_bss_1C = ((s32)(frand() & 0xFF) * 3) >> 8;
|
|
lbl_1_bss_58 = omAddObjEx(var_r31, 0, 0, 0, -1, fn_1_39C);
|
|
lbl_1_bss_54 = omAddObjEx(var_r31, 0xA, 0, 0, -1, fn_1_6440);
|
|
lbl_1_bss_4C = omAddObjEx(var_r31, 0xB, 0, 0, -1, fn_1_7E0);
|
|
fn_1_D00(var_r31);
|
|
fn_1_5598(var_r31);
|
|
}
|
|
|
|
s32 lbl_1_data_7C8 = 0xFFFFFFFFF;
|
|
|
|
void fn_1_37C(s32 arg0)
|
|
{
|
|
lbl_1_bss_48 = arg0;
|
|
}
|
|
|
|
s32 fn_1_38C(void)
|
|
{
|
|
return lbl_1_bss_48;
|
|
}
|
|
|
|
void fn_1_39C(omObjData *object)
|
|
{
|
|
fn_1_37C(0);
|
|
lbl_1_bss_24 = 60;
|
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_400;
|
|
}
|
|
|
|
void fn_1_400(omObjData *object)
|
|
{
|
|
switch (fn_1_38C()) {
|
|
case 0:
|
|
if (--lbl_1_bss_24) {
|
|
break;
|
|
}
|
|
fn_1_37C(1);
|
|
lbl_1_bss_24 = 180;
|
|
break;
|
|
case 1:
|
|
if (--lbl_1_bss_24) {
|
|
break;
|
|
}
|
|
fn_1_37C(2);
|
|
lbl_1_bss_C = MGSeqCreate(3, 0);
|
|
break;
|
|
case 2:
|
|
if (!MGSeqStatGet(lbl_1_bss_C)) {
|
|
fn_1_37C(3);
|
|
}
|
|
if (lbl_1_data_7C8 >= 0) {
|
|
break;
|
|
}
|
|
if (!(MGSeqStatGet(lbl_1_bss_C) & 16)) {
|
|
break;
|
|
}
|
|
lbl_1_data_7C8 = HuAudSeqPlay(69);
|
|
break;
|
|
case 3:
|
|
if (!fn_1_E48()) {
|
|
break;
|
|
}
|
|
fn_1_37C(4);
|
|
lbl_1_bss_C = MGSeqCreate(3, 1);
|
|
HuAudSeqFadeOut(lbl_1_data_7C8, 100);
|
|
break;
|
|
case 4:
|
|
if (!MGSeqStatGet(lbl_1_bss_C)) {
|
|
fn_1_37C(5);
|
|
WipeColorSet(255, 255, 255);
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30);
|
|
lbl_1_bss_24 = 60;
|
|
}
|
|
case 5:
|
|
if (--lbl_1_bss_24) {
|
|
break;
|
|
}
|
|
fn_1_37C(6);
|
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
|
|
break;
|
|
case 6:
|
|
if (WipeStatGet()) {
|
|
break;
|
|
}
|
|
fn_1_37C(7);
|
|
lbl_1_bss_24 = 180;
|
|
break;
|
|
case 7:
|
|
if (--lbl_1_bss_24) {
|
|
break;
|
|
}
|
|
fn_1_37C(9);
|
|
fn_1_1160();
|
|
if (lbl_1_bss_38[0] >= 0) {
|
|
HuAudSStreamPlay(1);
|
|
}
|
|
else {
|
|
HuAudSStreamPlay(4);
|
|
}
|
|
lbl_1_bss_24 = 210;
|
|
break;
|
|
case 8:
|
|
break;
|
|
case 9:
|
|
if (--lbl_1_bss_24) {
|
|
break;
|
|
}
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_784;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (omSysExitReq && !WipeStatGet()) {
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_784;
|
|
}
|
|
}
|
|
|
|
void fn_1_784(omObjData *object)
|
|
{
|
|
if (!WipeStatGet()) {
|
|
fn_1_DEC();
|
|
fn_1_55F0();
|
|
MGSeqKillAll();
|
|
HuAudFadeOut(1);
|
|
omOvlReturnEx(1, 1);
|
|
OSReport("******* M404Exit *********\n");
|
|
}
|
|
}
|
|
|
|
u16 lbl_1_data_810[] = { 0, 1, 2, 3, 3, 3 };
|
|
|
|
float lbl_1_data_81C[][2] = { { 0.0f, 0.0f }, { 0.0f, 0.0f }, { -46.0f, -2.0f }, { -8.0f, 2.0f }, { 10.0f, 2.0f }, { 28.0f, 2.0f } };
|
|
|
|
float lbl_1_data_84C[][2] = { { 472.0f, 128.0f }, { 472.0f, 208.0f }, { 472.0f, 288.0f }, { 472.0f, 368.0f } };
|
|
|
|
s32 lbl_1_data_86C[] = {
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x00),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x01),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x02),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x03),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x04),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x05),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x06),
|
|
DATA_MAKE_NUM(DATADIR_MGCONST, 0x07),
|
|
};
|
|
|
|
s32 lbl_1_data_88C = 0xFFFFFFFF;
|
|
|
|
u32 lbl_1_data_890[][2] = {
|
|
{ DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00), 0x00000000 },
|
|
{ DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02), 0x00000000 },
|
|
{ DATA_MAKE_NUM(DATADIR_M404, 0x22), 0x00000001 },
|
|
{ DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17), 0x00000000 },
|
|
{ DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x18), 0x00000000 },
|
|
};
|
|
|
|
s32 lbl_1_data_8B8[] = {
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x01),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x02),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x03),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x04),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x05),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x06),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x07),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x08),
|
|
};
|
|
|
|
float lbl_1_data_8D8[] = { 35.0f, 30.000002f, 25.0f, 20.0f };
|
|
|
|
float (*lbl_1_data_8E8[])[2] = { lbl_1_data_0, lbl_1_data_248, lbl_1_data_4A8 };
|
|
|
|
u16 lbl_1_data_8F4[] = { 73, 76, 82, 0 };
|
|
|
|
s32 lbl_1_data_8FC[][2] = {
|
|
{ DATA_MAKE_NUM(DATADIR_M404, 0x13), DATA_MAKE_NUM(DATADIR_M404, 0x14) },
|
|
{ DATA_MAKE_NUM(DATADIR_M404, 0x15), DATA_MAKE_NUM(DATADIR_M404, 0x16) },
|
|
{ DATA_MAKE_NUM(DATADIR_M404, 0x17), DATA_MAKE_NUM(DATADIR_M404, 0x18) },
|
|
};
|
|
|
|
void fn_1_7E0(omObjData *object)
|
|
{
|
|
UnkM404Struct *var_r31;
|
|
u32 var_r30;
|
|
s32 var_r29;
|
|
UnkM404Struct *var_r27;
|
|
omObjData **var_r26;
|
|
|
|
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM404Struct) * 4, MEMORY_DEFAULT_NUM);
|
|
object->data = var_r31;
|
|
memset(object->data, 0, 136);
|
|
var_r26 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
|
|
for (var_r29 = 0; var_r29 < 4; var_r31++, var_r29++) {
|
|
for (var_r27 = var_r26[var_r29]->data, var_r30 = 0; var_r30 < 6; var_r30++) {
|
|
switch (lbl_1_data_810[var_r30]) {
|
|
case 0:
|
|
var_r31->unk_02[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 0x14), 1, 0);
|
|
espPriSet(var_r31->unk_02[var_r30], 256);
|
|
break;
|
|
case 1:
|
|
var_r31->unk_02[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 0x15), 0, 0);
|
|
espPriSet(var_r31->unk_02[var_r30], 257);
|
|
espColorSet(var_r31->unk_02[var_r30], 0, 0, 0);
|
|
espTPLvlSet(var_r31->unk_02[var_r30], 0.5f);
|
|
break;
|
|
case 2:
|
|
var_r31->unk_02[var_r30] = espEntry(lbl_1_data_86C[var_r27->unk_02[5]]);
|
|
espPriSet(var_r31->unk_02[var_r30], 255);
|
|
break;
|
|
case 3:
|
|
var_r31->unk_02[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 0x33), 1, 0);
|
|
espPriSet(var_r31->unk_02[var_r30], 255);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
espDispOff(var_r31->unk_02[var_r30]);
|
|
espDrawNoSet(var_r31->unk_02[var_r30], 0);
|
|
espAttrSet(var_r31->unk_02[var_r30], 1);
|
|
espPosSet(var_r31->unk_02[var_r30], lbl_1_data_84C[var_r29][0] + lbl_1_data_81C[var_r30][0],
|
|
lbl_1_data_84C[var_r29][1] + lbl_1_data_81C[var_r30][1]);
|
|
}
|
|
}
|
|
|
|
HuDataDirClose(DATADIR_MGCONST);
|
|
object->func = fn_1_A9C;
|
|
}
|
|
|
|
void fn_1_A9C(omObjData *object)
|
|
{
|
|
s32 var_r31;
|
|
UnkM404Struct *var_r30;
|
|
s32 var_r29;
|
|
UnkM404Struct3 *var_r28;
|
|
omObjData **var_r27;
|
|
|
|
var_r30 = object->data;
|
|
switch (fn_1_38C()) {
|
|
case 6:
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
for (var_r29 = 0; var_r29 < 6; var_r29++) {
|
|
espDispOn(var_r30[var_r31].unk_02[var_r29]);
|
|
}
|
|
}
|
|
break;
|
|
case 7:
|
|
var_r27 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (var_r29 = 0, var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
var_r28 = var_r27[var_r31]->data;
|
|
var_r30[var_r31].unk_00 = var_r28->unk_58;
|
|
if (var_r28->unk_00_field1) {
|
|
var_r29++;
|
|
}
|
|
}
|
|
if ((var_r29 >= 4) && (lbl_1_bss_0 == 0)) {
|
|
HuAudFXPlay(1325);
|
|
lbl_1_bss_0 = 1;
|
|
}
|
|
if ((lbl_1_bss_0 == 0) && (lbl_1_data_88C < 0)) {
|
|
lbl_1_data_88C = HuAudFXPlay(1324);
|
|
}
|
|
break;
|
|
}
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
espBankSet(var_r30[var_r31].unk_02[3], var_r30[var_r31].unk_00 / 100);
|
|
espBankSet(var_r30[var_r31].unk_02[4], (var_r30[var_r31].unk_00 / 10) % 10);
|
|
espBankSet(var_r30[var_r31].unk_02[5], var_r30[var_r31].unk_00 % 10);
|
|
}
|
|
}
|
|
|
|
void fn_1_CD0(void)
|
|
{
|
|
HuMemDirectFree(lbl_1_bss_4C->data);
|
|
}
|
|
|
|
void fn_1_D00(Process *process)
|
|
{
|
|
s32 var_r31;
|
|
|
|
lbl_1_bss_38[0] = lbl_1_bss_38[1] = lbl_1_bss_38[2] = lbl_1_bss_38[3] = -1;
|
|
lbl_1_bss_28[0] = lbl_1_bss_28[1] = lbl_1_bss_28[2] = lbl_1_bss_28[3] = -1;
|
|
lbl_1_bss_20 = 0;
|
|
omMakeGroupEx(process, 0, 4);
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
omAddObjEx(process, 5, 10, 50, 0, fn_1_1344);
|
|
}
|
|
}
|
|
|
|
void fn_1_DEC(void)
|
|
{
|
|
s32 var_r31;
|
|
omObjData **var_r30;
|
|
|
|
var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
fn_1_553C(var_r30[var_r31]);
|
|
}
|
|
}
|
|
|
|
s32 fn_1_E48(void)
|
|
{
|
|
s32 var_r31;
|
|
omObjData **var_r30;
|
|
UnkM404Struct3 *var_r29;
|
|
|
|
var_r30 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
var_r29 = var_r30[var_r31]->data;
|
|
if (!var_r29->unk_00_field0) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r31 < 4) {
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
u16 fn_1_ED4(omObjData *object)
|
|
{
|
|
UnkM404Struct3 *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
|
|
var_r31 = object->data;
|
|
|
|
for (var_r28 = 0, var_r30 = 0; var_r30 < var_r31->unk_3C->bmp->sizeY; var_r30++) {
|
|
for (var_r29 = 0; var_r29 < var_r31->unk_3C->bmp->sizeX; var_r29++) {
|
|
if (!fn_1_607C(var_r31->unk_3C, var_r29, var_r30)) {
|
|
var_r28++;
|
|
}
|
|
}
|
|
}
|
|
return var_r28;
|
|
}
|
|
|
|
s32 fn_1_F70(omObjData *object, float arg8)
|
|
{
|
|
UnkM404Struct3 *var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
u16 var_r28;
|
|
u16 var_r27;
|
|
s32 var_r26;
|
|
u16 var_r25;
|
|
u16 var_r24;
|
|
|
|
var_r31 = object->data;
|
|
var_r26 = var_r31->unk_3C->bmp->sizeX * arg8;
|
|
|
|
for (var_r30 = 0; var_r30 < var_r31->unk_3C->bmp->sizeY; var_r30++) {
|
|
for (var_r29 = var_r31->unk_5A; var_r29 < var_r26; var_r29++) {
|
|
if (!fn_1_607C(var_r31->unk_3C, var_r29, var_r30)) {
|
|
for (var_r27 = 0; var_r27 < (var_r31->unk_4C->bmp->sizeY / var_r31->unk_3C->bmp->sizeY); var_r27++) {
|
|
for (var_r28 = 0; var_r28 < (var_r31->unk_4C->bmp->sizeX / var_r31->unk_3C->bmp->sizeX); var_r28++) {
|
|
var_r25 = ((s32)var_r28) + var_r31->unk_4C->bmp->sizeX * var_r29 / var_r31->unk_3C->bmp->sizeX;
|
|
var_r24 = ((s32)var_r27) + var_r31->unk_4C->bmp->sizeY * var_r30 / var_r31->unk_3C->bmp->sizeY;
|
|
if (fn_1_607C(var_r31->unk_4C, var_r25, var_r24)) {
|
|
var_r31->unk_54++;
|
|
break;
|
|
}
|
|
}
|
|
if (var_r28 < var_r31->unk_4C->bmp->sizeX / var_r31->unk_3C->bmp->sizeX) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var_r31->unk_5A = var_r26;
|
|
return (var_r31->unk_54 * 100) / var_r31->unk_56;
|
|
}
|
|
|
|
void fn_1_1160(void)
|
|
{
|
|
s32 sp10[4];
|
|
u16 sp8[3] = { 28, 18, 29 };
|
|
s32 var_r31;
|
|
s32 var_r30;
|
|
UnkM404Struct3 *var_r29;
|
|
omObjData **var_r28;
|
|
s32 var_r27;
|
|
s32 var_r26;
|
|
UnkM404Struct3 *var_r25;
|
|
s16 var_r24;
|
|
|
|
var_r26 = 0;
|
|
var_r28 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
var_r29 = var_r28[var_r31]->data;
|
|
for (var_r27 = 0, var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
if (var_r31 != var_r30) {
|
|
var_r25 = var_r28[var_r30]->data;
|
|
if (var_r29->unk_58 < var_r25->unk_58) {
|
|
var_r27++;
|
|
}
|
|
}
|
|
}
|
|
sp10[var_r31] = var_r27;
|
|
if (var_r29->unk_58 > var_r26) {
|
|
var_r26 = var_r29->unk_58;
|
|
}
|
|
}
|
|
if (var_r26 > 30) {
|
|
for (var_r30 = 0, var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
if (!sp10[var_r31]) {
|
|
lbl_1_bss_38[var_r30] = var_r31;
|
|
lbl_1_bss_28[var_r30] = GWPlayerCfg[lbl_1_bss_38[var_r30]].character;
|
|
var_r30++;
|
|
}
|
|
var_r24 = sp10[var_r31];
|
|
GWPlayerCoinWinSet(var_r31, var_r24);
|
|
}
|
|
return;
|
|
}
|
|
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
|
GWPlayerCoinWinSet(var_r31, 3);
|
|
}
|
|
}
|
|
|
|
void fn_1_1344(omObjData *object)
|
|
{
|
|
UnkM404Struct3 *var_r31;
|
|
s32 var_r29;
|
|
float(*var_r28)[2];
|
|
s32 var_r24;
|
|
ModelData *var_r22;
|
|
|
|
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM404Struct3), MEMORY_DEFAULT_NUM);
|
|
object->data = var_r31;
|
|
memset(var_r31, 0, 484);
|
|
var_r31->unk_02 = lbl_1_bss_20++;
|
|
var_r31->unk_04 = GWPlayerCfg[var_r31->unk_02].pad_idx;
|
|
|
|
var_r31->unk_0C = var_r24 = GWPlayerCfg[var_r31->unk_02].character;
|
|
var_r31->unk_0E = GWPlayerCfg[var_r31->unk_02].diff;
|
|
var_r31->unk_10 = GWPlayerCfg[var_r31->unk_02].group;
|
|
object->model[0] = CharModelCreate(var_r24, 2);
|
|
Hu3DModelShadowSet(object->model[0]);
|
|
object->model[1] = Hu3DModelCreateFile(lbl_1_data_8B8[var_r24]);
|
|
Hu3DModelHookSet(object->model[0], "test11_tex_we-itemhook-r", object->model[1]);
|
|
var_r31->unk_2C = 0;
|
|
|
|
for (var_r29 = 0; var_r29 < (u32)5; var_r29++) {
|
|
if (!lbl_1_data_890[var_r29][1]) {
|
|
object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_0C, lbl_1_data_890[var_r29][0]);
|
|
}
|
|
else {
|
|
object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_0C, var_r31->unk_0C + lbl_1_data_890[var_r29][0]);
|
|
}
|
|
}
|
|
Hu3DMotionSet(object->model[0], object->motion[0]);
|
|
Hu3DModelAttrSet(object->model[0], 0x40000601);
|
|
CharModelVoiceEnableSet(var_r24, object->motion[1], 0);
|
|
object->trans.x = -90.0f;
|
|
object->trans.y = 0.0f;
|
|
object->trans.z = -450.0f + (300.0f * var_r31->unk_02);
|
|
object->rot.y = 90.0f;
|
|
object->model[2] = Hu3DHookFuncCreate(fn_1_58E4);
|
|
Hu3DModelPosSet(object->model[2], 0.0f, object->trans.y, object->trans.z);
|
|
var_r22 = &Hu3DData[object->model[2]];
|
|
var_r22->unk_120 = object;
|
|
var_r31->unk_4C = fn_1_5D64(960, 64, 1);
|
|
var_r31->unk_48 = 4096;
|
|
var_r31->unk_44 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_48, MEMORY_DEFAULT_NUM);
|
|
DCInvalidateRange(var_r31->unk_44, var_r31->unk_48);
|
|
var_r31->unk_48 = fn_1_6248(var_r31->unk_44, var_r31->unk_48);
|
|
var_r31->unk_3C = HuSprAnimReadFile(lbl_1_data_8FC[lbl_1_bss_1C][0]);
|
|
DCFlushRangeNoSync(var_r31->unk_3C->bmp->data, (var_r31->unk_3C->bmp->pixSize * (var_r31->unk_3C->bmp->sizeX * var_r31->unk_3C->bmp->sizeY)) / 8);
|
|
var_r31->unk_54 = 0;
|
|
var_r31->unk_56 = fn_1_ED4(object);
|
|
var_r31->unk_40 = HuSprAnimReadFile(lbl_1_data_8FC[lbl_1_bss_1C][1]);
|
|
var_r31->unk_50 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M404, 0x19));
|
|
DCFlushRangeNoSync(var_r31->unk_50->bmp->data, (var_r31->unk_50->bmp->pixSize * (var_r31->unk_50->bmp->sizeX * var_r31->unk_50->bmp->sizeY)) / 8);
|
|
Hu3DMotionOverlaySet(object->model[0], object->motion[2]);
|
|
object->trans.y = 1500.0f;
|
|
var_r31->unk_38 = var_r31->unk_02 * 60 / 2;
|
|
CharModelDataClose(var_r31->unk_0C);
|
|
if (GWPlayerCfg[var_r31->unk_02].iscom == 1) {
|
|
var_r28 = lbl_1_data_8E8[lbl_1_bss_1C];
|
|
var_r31->unk_6C = lbl_1_data_8F4[lbl_1_bss_1C];
|
|
var_r31->unk_70 = HuMemDirectMallocNum(HEAP_SYSTEM, (var_r31->unk_6C + 3) * 8, MEMORY_DEFAULT_NUM);
|
|
|
|
for (var_r29 = 0; var_r29 < var_r31->unk_6C; var_r29++, var_r28++) {
|
|
var_r31->unk_70[var_r29][0] = 3000.0f * var_r28[0][0];
|
|
var_r31->unk_70[var_r29][1] = object->trans.z - (200.0f * (var_r28[0][1] - 0.5f));
|
|
if (var_r29 && var_r29 < (var_r31->unk_6C - 1)) {
|
|
var_r31->unk_70[var_r29][0] += lbl_1_data_8D8[var_r31->unk_0E] * (s32)(frand() % 512 - 256) / 256;
|
|
var_r31->unk_70[var_r29][1] += lbl_1_data_8D8[var_r31->unk_0E] * (s32)(frand() % 512 - 256) / 256;
|
|
}
|
|
}
|
|
|
|
while (var_r29 < (var_r31->unk_6C + 3)) {
|
|
var_r31->unk_70[var_r29][0] = var_r31->unk_70[var_r31->unk_6C - 1][0];
|
|
var_r31->unk_70[var_r29][1] = var_r31->unk_70[var_r31->unk_6C - 1][1];
|
|
var_r29++;
|
|
}
|
|
var_r31->unk_64 = 0.0f;
|
|
var_r31->unk_68 = fn_1_2EBC(var_r31->unk_70[var_r31->unk_5E], 1.0f);
|
|
}
|
|
var_r31->unk_14 = 90.0f;
|
|
var_r31->unk_74 = -1;
|
|
object->func = fn_1_1AFC;
|
|
}
|
|
|
|
void fn_1_1AFC(omObjData *object)
|
|
{
|
|
UnkM404Struct3 *var_r31;
|
|
|
|
var_r31 = object->data;
|
|
if (fn_1_38C() >= 1) {
|
|
if (var_r31->unk_00_field2) {
|
|
if (var_r31->unk_38 != 0) {
|
|
if (--var_r31->unk_38 == 0) {
|
|
HuAudFXPlay(1327);
|
|
}
|
|
}
|
|
if (object->trans.y > 0.0f) {
|
|
var_r31->unk_24 = var_r31->unk_24 - 1.0000001f;
|
|
object->trans.y += var_r31->unk_24;
|
|
if (object->trans.y < 0.0f) {
|
|
object->trans.y = 0.0f;
|
|
omVibrate(var_r31->unk_02, 12, 6, 6);
|
|
HuAudFXPlay(1326);
|
|
}
|
|
}
|
|
if (fn_1_38C() != 2) {
|
|
return;
|
|
}
|
|
var_r31->unk_24 = 0.0f;
|
|
object->func = fn_1_44A0;
|
|
return;
|
|
}
|
|
if (var_r31->unk_38 == 0) {
|
|
var_r31->unk_00_field2 = 1;
|
|
var_r31->unk_38 = 30;
|
|
return;
|
|
}
|
|
var_r31->unk_38--;
|
|
}
|
|
}
|
|
|
|
float fn_1_1C80(float arg8, float arg9, float argA, float argB, float argC)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
var_f31 = 1.0f - arg8;
|
|
var_f30 = var_f31 * var_f31;
|
|
var_f29 = var_f31 * var_f31 * var_f31;
|
|
return (arg8 * arg8 * arg8 * argC) + (3.0f * var_f31 * arg8 * arg8 * argB + (var_f29 * arg9 + 3.0f * var_f30 * arg8 * argA));
|
|
}
|
|
|
|
float fn_1_1D28(float arg8, float arg9, float argA, float argB, float argC)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
|
|
var_f31 = 3.0f * (-arg9 + argC + (3.0f * (argA - argB)));
|
|
var_f30 = 2.0f * ((3.0f * (arg9 + argB)) - (6.0f * argA));
|
|
var_f29 = 3.0f * (-arg9 + argA);
|
|
return var_f31 * arg8 * arg8 + var_f30 * arg8 + var_f29;
|
|
}
|
|
|
|
float fn_1_1DF8(float arg0[], float arg8)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
var_f31 = fn_1_1D28(arg8, arg0[0], arg0[2], arg0[4], arg0[6]);
|
|
var_f30 = fn_1_1D28(arg8, arg0[1], arg0[3], arg0[7], arg0[7]);
|
|
|
|
return sqrtf(var_f31 * var_f31 + var_f30 * var_f30);
|
|
}
|
|
|
|
float fn_1_2184(float arg0[], float arg8)
|
|
{
|
|
float sp158[1];
|
|
float var_f31;
|
|
float var_f26;
|
|
float var_f21;
|
|
float var_f20;
|
|
float var_f19;
|
|
s32 var_r31;
|
|
|
|
var_f26 = 0.0f;
|
|
var_f19 = 16.0f;
|
|
var_f20 = (arg8 - var_f26) / var_f19;
|
|
sp158[0] = var_f20 + var_f20;
|
|
|
|
var_f21 = fn_1_1DF8(arg0, var_f26) + fn_1_1DF8(arg0, arg8);
|
|
|
|
for (var_r31 = 1, var_f31 = var_f26 + var_f20; var_r31 < var_f19; var_r31 += 2, var_f31 += sp158[0]) {
|
|
var_f21 += 4.0f * fn_1_1DF8(arg0, var_f31);
|
|
}
|
|
|
|
for (var_r31 = 2, var_f31 = var_f26 + sp158[0]; var_r31 < var_f19; var_r31 += 2, var_f31 += sp158[0]) {
|
|
var_f21 += 2.0f * fn_1_1DF8(arg0, var_f31);
|
|
}
|
|
return (var_f20 / 3.0f) * var_f21;
|
|
}
|
|
|
|
float fn_1_2EBC(float arg0[], float arg8)
|
|
{
|
|
float spF8;
|
|
float var_f31;
|
|
float var_f27;
|
|
float var_f22;
|
|
float var_f23;
|
|
|
|
s32 var_r31;
|
|
s32 var_r30;
|
|
s32 var_r29;
|
|
|
|
var_r29 = 32;
|
|
var_f31 = 0.0f;
|
|
spF8 = 0.0f;
|
|
|
|
var_f27 = arg8 - var_f31;
|
|
var_f22 = var_f27 * (fn_1_1DF8(arg0, var_f31) + fn_1_1DF8(arg0, arg8)) / 2;
|
|
|
|
for (var_r30 = 1; var_r30 <= var_r29; var_r30 *= 2) {
|
|
for (var_f23 = 0.0f, var_r31 = 1; var_r31 <= var_r30; var_r31++) {
|
|
var_f23 += fn_1_1DF8(arg0, var_f31 + var_f27 * (var_r31 - 0.5f));
|
|
}
|
|
var_f23 *= var_f27;
|
|
spF8 = (var_f22 + (2.0f * var_f23)) / 3.0f;
|
|
var_f27 /= 2;
|
|
var_f22 = (var_f22 + var_f23) / 2;
|
|
}
|
|
return spF8;
|
|
}
|
|
|
|
float fn_1_3A38(float arg0[], float arg8, float arg9)
|
|
{
|
|
volatile float sp40;
|
|
volatile float sp3C;
|
|
float var_f24;
|
|
float var_f18;
|
|
s32 var_r30;
|
|
|
|
sp3C = 0.00001f;
|
|
var_r30 = 0;
|
|
do {
|
|
var_f18 = fn_1_2EBC(arg0, arg8) - arg9;
|
|
if (fabs(var_f24 = fn_1_1DF8(arg0, arg8)) < sp3C) {
|
|
var_f24 = 1.0f;
|
|
}
|
|
sp40 = arg8;
|
|
arg8 -= var_f18 / var_f24;
|
|
var_r30++;
|
|
} while (arg8 != sp40 && var_r30 < 16);
|
|
return arg8;
|
|
}
|
|
|
|
float fn_1_3E2C(float arg8, float arg9, float argA) // same as in REL/m402Dll
|
|
{
|
|
float var_f30;
|
|
float var_f31;
|
|
|
|
var_f31 = fmod(arg9 - arg8, 360.0);
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
if (var_f31 > 180.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
var_f30 = fmod(arg8 + (argA * var_f31), 360.0);
|
|
if (var_f30 < 0.0f) {
|
|
var_f30 += 360.0f;
|
|
}
|
|
return var_f30;
|
|
}
|
|
|
|
void fn_1_3F30(omObjData *object)
|
|
{
|
|
float var_f24;
|
|
float var_f23;
|
|
|
|
UnkM404Struct3 *var_r31;
|
|
float *var_r30;
|
|
|
|
var_r31 = object->data;
|
|
if (var_r31->unk_5E < (var_r31->unk_6C - 1)) {
|
|
if ((3.0f + var_r31->unk_64) >= var_r31->unk_68) {
|
|
var_r31->unk_64 = 3.0f - (var_r31->unk_68 - var_r31->unk_64);
|
|
var_r31->unk_5E += 3;
|
|
var_r31->unk_68 = fn_1_2EBC(var_r31->unk_70[var_r31->unk_5E], 1.0f);
|
|
}
|
|
else {
|
|
var_r31->unk_64 += 3.0f;
|
|
}
|
|
var_r31->unk_60 = fn_1_3A38(var_r31->unk_70[var_r31->unk_5E], var_r31->unk_60, var_r31->unk_64);
|
|
var_r30 = var_r31->unk_70[var_r31->unk_5E];
|
|
var_f24 = fn_1_1C80(var_r31->unk_60, var_r30[0], var_r30[2], var_r30[4], var_r30[6]) - 90.0f;
|
|
var_f23 = fn_1_1C80(var_r31->unk_60, var_r30[1], var_r30[3], var_r30[5], var_r30[7]);
|
|
var_r31->unk_14 = fn_1_3E2C(var_r31->unk_14, atan2d(var_f24 - object->trans.x, -(var_f23 - object->trans.z)), 0.1f);
|
|
var_r31->unk_06 = (u8)(20.0 * sind(var_r31->unk_14));
|
|
var_r31->unk_07 = (u8)(20.0 * cosd(var_r31->unk_14));
|
|
}
|
|
else {
|
|
var_r31->unk_06 = 20;
|
|
var_r31->unk_07 = 0;
|
|
}
|
|
}
|
|
|
|
void fn_1_445C(s32 arg0, s16 arg1)
|
|
{
|
|
UnkMsmStruct_01 sp8;
|
|
|
|
sp8.unk00 = 1;
|
|
sp8.unk04 = arg1;
|
|
msmSeSetParam(arg0, &sp8);
|
|
}
|
|
|
|
void fn_1_44A0(omObjData *object)
|
|
{
|
|
Vec sp8;
|
|
float var_f31;
|
|
|
|
UnkM404Struct3 *var_r31;
|
|
ModelData *var_r29;
|
|
s32 var_r28;
|
|
s16 var_r27;
|
|
|
|
var_r31 = object->data;
|
|
var_r28 = -1;
|
|
if (fn_1_38C() == 6) {
|
|
object->func = fn_1_4C7C;
|
|
}
|
|
if (fn_1_38C() == 3 && !var_r31->unk_00_field0) {
|
|
switch (var_r31->unk_12) {
|
|
case 0:
|
|
if (GWPlayerCfg[var_r31->unk_02].iscom == 0) {
|
|
var_r31->unk_06 = HuPadStkX[var_r31->unk_04];
|
|
var_r31->unk_07 = HuPadStkY[var_r31->unk_04];
|
|
var_r31->unk_08 = HuPadBtn[var_r31->unk_04];
|
|
var_r31->unk_0A = HuPadBtnDown[var_r31->unk_04];
|
|
}
|
|
else {
|
|
var_r31->unk_08 = var_r31->unk_0A = 0;
|
|
var_r31->unk_06 = var_r31->unk_07 = 0;
|
|
fn_1_3F30(object);
|
|
}
|
|
if (((var_r31->unk_06 * var_r31->unk_06) + (var_r31->unk_07 * var_r31->unk_07)) > 16.0f) {
|
|
var_f31 = atan2d(var_r31->unk_06, -var_r31->unk_07);
|
|
var_r31->unk_20 = 3.0f * sind(var_f31);
|
|
var_r31->unk_28 = 3.0f * cosd(var_f31);
|
|
var_r28 = 1;
|
|
if (var_r31->unk_20 > 0.0f) {
|
|
CharModelMotionSpeedSet(var_r31->unk_0C, 0.5f);
|
|
}
|
|
else {
|
|
CharModelMotionSpeedSet(var_r31->unk_0C, -0.5f);
|
|
}
|
|
Hu3DMotionOverlaySpeedSet(object->model[0], Hu3DData[object->model[0]].unk_68);
|
|
if (var_r31->unk_2C == 0) {
|
|
Hu3DModelAttrReset(object->model[0], 0x40000400);
|
|
Hu3DMotionOverlayTimeSet(object->model[0], 0.0f);
|
|
}
|
|
}
|
|
else {
|
|
var_r31->unk_20 = var_r31->unk_28 = 0.0f;
|
|
var_r28 = 0;
|
|
CharModelMotionSpeedSet(var_r31->unk_0C, 1.0f);
|
|
Hu3DMotionOverlayTimeSet(object->model[0], 0.0f);
|
|
Hu3DModelAttrSet(object->model[0], 0x40000400);
|
|
}
|
|
sp8.x = object->trans.x;
|
|
sp8.z = object->trans.z;
|
|
object->trans.x += var_r31->unk_20;
|
|
object->trans.z += var_r31->unk_28;
|
|
if (object->trans.x < -90.0f) {
|
|
object->trans.x = -90.0f;
|
|
}
|
|
if (object->trans.x < (Center.x - 500.0f)) {
|
|
object->trans.x = Center.x - 500.0f;
|
|
}
|
|
else if (object->trans.x > (550.0f + Center.x)) {
|
|
object->trans.x = 550.0f + Center.x;
|
|
}
|
|
if ((object->trans.x != sp8.x) || (object->trans.z != sp8.z)) {
|
|
if (var_r31->unk_74 < 0) {
|
|
var_r31->unk_74 = HuAudFXPlay(0x52B);
|
|
}
|
|
}
|
|
else if (var_r31->unk_74 >= 0) {
|
|
HuAudFXStop(var_r31->unk_74);
|
|
var_r31->unk_74 = -1;
|
|
}
|
|
var_r29 = &Hu3DData[object->model[2]];
|
|
if (object->trans.z < (var_r29->pos.z - 100.0f)) {
|
|
object->trans.z = var_r29->pos.z - 100.0f;
|
|
}
|
|
else if (object->trans.z > ((100.0f + var_r29->pos.z) - 1.0f)) {
|
|
object->trans.z = (100.0f + var_r29->pos.z) - 1.0f;
|
|
}
|
|
if ((90.0f + object->trans.x) > 3000.0f) {
|
|
object->trans.x = 2910.0f;
|
|
var_r31->unk_12++;
|
|
var_r31->unk_2C = -1;
|
|
var_r28 = 1;
|
|
CharModelMotionSpeedSet(var_r31->unk_0C, 1.0f);
|
|
Hu3DMotionOverlayReset(object->model[0]);
|
|
Hu3DModelAttrSet(object->model[1], 1);
|
|
if (var_r31->unk_74 >= 0) {
|
|
HuAudFXStop(var_r31->unk_74);
|
|
var_r31->unk_74 = -1;
|
|
}
|
|
}
|
|
fn_1_5278(object);
|
|
if (var_r31->unk_74 >= 0) {
|
|
var_r27 = 64.0f + ((64.0f * (object->trans.x - Center.x)) / 500.0f);
|
|
if (var_r27 < 0) {
|
|
var_r27 = 0;
|
|
}
|
|
else if (var_r27 > 127) {
|
|
var_r27 = 127;
|
|
}
|
|
HuAudFXPanning(var_r31->unk_74, var_r27);
|
|
}
|
|
break;
|
|
case 1:
|
|
var_r28 = 1;
|
|
object->trans.x += 4.0000005f;
|
|
if (object->trans.x >= 3200.0f) {
|
|
var_r31->unk_12++;
|
|
var_r31->unk_38 = 0x3C;
|
|
}
|
|
break;
|
|
case 2:
|
|
var_r28 = 0;
|
|
object->rot.y += 0.1f * -object->rot.y;
|
|
if (--var_r31->unk_38 == 0) {
|
|
var_r31->unk_00_field0 = 1;
|
|
}
|
|
break;
|
|
}
|
|
if (var_r28 >= 0 && var_r28 != var_r31->unk_2C) {
|
|
var_r31->unk_2C = var_r28;
|
|
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 5.0f, 0x40000001);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_4C7C(omObjData *object)
|
|
{
|
|
UnkM404Struct3 *var_r30;
|
|
|
|
var_r30 = object->data;
|
|
object->trans.x = 3200.0f;
|
|
object->trans.z = -450.0f + (300.0f * var_r30->unk_02);
|
|
object->rot.y = 0.0f;
|
|
var_r30->unk_2C = -1;
|
|
CharModelMotionShiftSet(var_r30->unk_0C, *object->motion, 0.0f, 5.0f, 0x40000001);
|
|
var_r30->unk_5A = 0;
|
|
var_r30->unk_5C = fn_1_F70(object, 1.0f);
|
|
var_r30->unk_5A = 0;
|
|
var_r30->unk_54 = 0;
|
|
var_r30->unk_74 = -1;
|
|
object->func = fn_1_4F4C;
|
|
}
|
|
|
|
void fn_1_4F4C(omObjData *object)
|
|
{
|
|
UnkM404Struct3 *var_r30;
|
|
s32 var_r29;
|
|
u16 var_r23;
|
|
|
|
var_r30 = object->data;
|
|
if (fn_1_38C() == 7) {
|
|
var_r23 = fn_1_F70(object, (Center.x - lbl_1_data_738[1].unk_04) / (3000.0f - lbl_1_data_738[1].unk_04));
|
|
if (!var_r30->unk_00_field1 && var_r23 == var_r30->unk_5C) {
|
|
var_r30->unk_00_field1 = 1;
|
|
}
|
|
var_r30->unk_58 = var_r23;
|
|
}
|
|
if (fn_1_38C() == 9 && var_r30->unk_2C < 0) {
|
|
for (var_r29 = 0; var_r29 < 4; var_r29++) {
|
|
if (var_r30->unk_02 == lbl_1_bss_38[var_r29]) {
|
|
break;
|
|
}
|
|
}
|
|
if (var_r29 < 4) {
|
|
var_r30->unk_2C = 3;
|
|
}
|
|
else {
|
|
var_r30->unk_2C = 4;
|
|
}
|
|
CharModelMotionShiftSet(var_r30->unk_0C, object->motion[var_r30->unk_2C], 0.0f, 5.0f, 0);
|
|
}
|
|
}
|
|
|
|
void fn_1_5278(omObjData *object)
|
|
{
|
|
float var_f31;
|
|
UnkM404Struct3 *var_r31;
|
|
float var_f30;
|
|
ModelData *var_r27;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
u16 var_r26;
|
|
u16 var_r25;
|
|
|
|
var_r31 = object->data;
|
|
var_r27 = &Hu3DData[object->model[2]];
|
|
var_f31 = ((90.0f + object->trans.x) - var_r27->pos.x) / 3000.0f;
|
|
var_f30 = (object->trans.z - (var_r27->pos.z - 100.0f)) / 200.0f;
|
|
|
|
for (var_r29 = 0; var_r29 < var_r31->unk_50->bmp->sizeY; var_r29++) {
|
|
for (var_r28 = 0; var_r28 < var_r31->unk_50->bmp->sizeX; var_r28++) {
|
|
var_r26 = (var_r28 + (var_f31 * var_r31->unk_4C->bmp->sizeX)) - var_r31->unk_50->bmp->sizeX / 2;
|
|
var_r25 = (var_r29 + (var_f30 * var_r31->unk_4C->bmp->sizeY)) - var_r31->unk_50->bmp->sizeY / 2;
|
|
if (var_r26 < var_r31->unk_4C->bmp->sizeX && var_r25 < var_r31->unk_4C->bmp->sizeY) {
|
|
fn_1_5E74(var_r31->unk_4C, var_r26, var_r25, fn_1_607C(var_r31->unk_50, var_r28, var_r29));
|
|
}
|
|
}
|
|
}
|
|
DCFlushRangeNoSync(var_r31->unk_4C->bmp->data, var_r31->unk_4C->bmp->dataSize);
|
|
}
|
|
|
|
void fn_1_553C(omObjData *object)
|
|
{
|
|
UnkM404Struct3 *var_r30;
|
|
|
|
var_r30 = object->data;
|
|
if (object->data != NULL) {
|
|
HuMemDirectFree(var_r30->unk_44);
|
|
HuMemDirectFree(object->data);
|
|
object->data = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_5598(Process *arg0)
|
|
{
|
|
omMakeGroupEx(arg0, 1, 1);
|
|
omAddObjEx(arg0, 10, 7, 0, 1, fn_1_55F4);
|
|
}
|
|
|
|
void fn_1_55F0(void) { }
|
|
|
|
s32 lbl_1_data_930[] = { DATA_MAKE_NUM(DATADIR_M404, 0x0B), DATA_MAKE_NUM(DATADIR_M404, 0x0C), DATA_MAKE_NUM(DATADIR_M404, 0x0D),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x0E), DATA_MAKE_NUM(DATADIR_M404, 0x0F), DATA_MAKE_NUM(DATADIR_M404, 0x10), DATA_MAKE_NUM(DATADIR_M404, 0x11),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x12) };
|
|
|
|
s32 lbl_1_data_950[] = { DATA_MAKE_NUM(DATADIR_M404, 0x1A), DATA_MAKE_NUM(DATADIR_M404, 0x1B), DATA_MAKE_NUM(DATADIR_M404, 0x1C),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x1D), DATA_MAKE_NUM(DATADIR_M404, 0x1E), DATA_MAKE_NUM(DATADIR_M404, 0x1F), DATA_MAKE_NUM(DATADIR_M404, 0x20),
|
|
DATA_MAKE_NUM(DATADIR_M404, 0x21) };
|
|
|
|
char *lbl_1_data_98C[] = { "kari00", "kari01", "kari02", "kari03" };
|
|
|
|
float lbl_1_data_99C[] = { -450, -150, 150, 450 };
|
|
|
|
s32 lbl_1_data_9AC[][2] = { { 8, 4 }, { 7, 8 }, { 6, 8 }, { 5, 16 }, { 2, 16 }, { 2, 16 } };
|
|
|
|
s32 lbl_1_data_9DC[] = { 8, 8, 8, 4, 4, 4 };
|
|
s32 lbl_1_data_9F4[] = { 8, 8, 8, 4, 4, 4 };
|
|
|
|
void fn_1_55F4(omObjData *object)
|
|
{
|
|
s32 var_r30;
|
|
|
|
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M404, 0x09));
|
|
object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M404, 0x0A));
|
|
Hu3DModelAttrSet(object->model[1], 0x40000001);
|
|
object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M404, 0x00));
|
|
Hu3DModelShadowMapSet(object->model[2]);
|
|
|
|
for (var_r30 = 0; var_r30 < 4; var_r30++) {
|
|
object->model[var_r30 + 3] = Hu3DModelCreateFile(lbl_1_data_930[GWPlayerCfg[var_r30].character]);
|
|
Hu3DModelPosSet(object->model[var_r30 + 3], 0.0f, 0.0f, lbl_1_data_99C[var_r30]);
|
|
Hu3DAnimCreate(HuSprAnimReadFile(lbl_1_data_950[GWPlayerCfg[var_r30].character]), object->model[2], lbl_1_data_98C[var_r30]);
|
|
}
|
|
object->func = fn_1_57A0;
|
|
}
|
|
|
|
void fn_1_57A0(omObjData *object) { }
|
|
|
|
void fn_1_57A4(s32 arg0, GXColor *arg1)
|
|
{
|
|
GXColor sp8[8] = { { 227, 67, 67, 255 }, { 68, 67, 227, 255 }, { 241, 158, 220, 255 }, { 67, 228, 68, 255 }, { 138, 60, 180, 255 },
|
|
{ 146, 85, 55, 255 }, { 227, 200, 20, 255 }, { 40, 40, 40, 255 } };
|
|
|
|
*arg1 = sp8[arg0];
|
|
}
|
|
|
|
void fn_1_58E4(ModelData *modelData, Mtx arg1)
|
|
{
|
|
GXTexObj sp3C;
|
|
UnkM404Struct3 *var_r31;
|
|
omObjData *var_r30;
|
|
s32 var_r29;
|
|
|
|
var_r30 = modelData->unk_120;
|
|
var_r31 = var_r30->data;
|
|
{
|
|
GXColor sp18 = { 255, 0, 0, 255 };
|
|
GXColor sp14 = { 255, 255, 255, 192 };
|
|
GXLoadPosMtxImm(arg1, 0);
|
|
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
|
GXSetNumTexGens(1);
|
|
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
|
|
HuSprTexLoad(var_r31->unk_40, 0, 0, GX_CLAMP, GX_CLAMP, GX_LINEAR);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_DIVIDE_2, GX_TRUE, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_TEXA, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
|
|
var_r29 = var_r31->unk_0C;
|
|
fn_1_57A4(var_r29, &sp18);
|
|
|
|
GXSetChanMatColor(GX_COLOR0A0, sp18);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXSetBlendMode(GX_DECAL, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
|
GXSetCullMode(GX_CULL_BACK);
|
|
GXCallDisplayList(var_r31->unk_44, var_r31->unk_48);
|
|
GXInitTexObj(&sp3C, var_r31->unk_4C->bmp->data, var_r31->unk_4C->bmp->sizeX, var_r31->unk_4C->bmp->sizeY, 1, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
|
GXLoadTexObj(&sp3C, GX_TEXMAP0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
|
|
GXSetTevColor(GX_TEVREG0, sp14);
|
|
GXCallDisplayList(var_r31->unk_44, var_r31->unk_48);
|
|
}
|
|
}
|
|
|
|
AnimData *fn_1_5D64(u16 sizeX, u16 sizeY, s32 arg2)
|
|
{
|
|
AnimBmpData *bmp;
|
|
AnimData *anim;
|
|
|
|
anim = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(AnimBmpData), MEMORY_DEFAULT_NUM);
|
|
bmp = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(AnimData), MEMORY_DEFAULT_NUM);
|
|
anim->bmp = bmp;
|
|
bmp->sizeX = sizeX;
|
|
bmp->sizeY = sizeY;
|
|
bmp->dataFmt = lbl_1_data_9AC[arg2][0];
|
|
bmp->pixSize = lbl_1_data_9AC[arg2][1];
|
|
bmp->dataSize = (bmp->pixSize * (bmp->sizeX * bmp->sizeY)) / 8;
|
|
bmp->data = HuMemDirectMallocNum(HEAP_SYSTEM, bmp->dataSize, MEMORY_DEFAULT_NUM);
|
|
memset(bmp->data, 0, bmp->dataSize);
|
|
DCFlushRangeNoSync(bmp->data, bmp->dataSize);
|
|
return anim;
|
|
}
|
|
|
|
void fn_1_5E74(AnimData *arg0, u16 arg1, u16 arg2, u16 arg3)
|
|
{
|
|
u8 *var_r31;
|
|
u16 var_r30;
|
|
u16 var_r29;
|
|
s32 var_r28;
|
|
s32 temp_r0_2;
|
|
s32 temp_r7;
|
|
u8 temp_r0;
|
|
|
|
switch (arg0->bmp->pixSize) {
|
|
case 4:
|
|
var_r30 = lbl_1_data_9DC[0]; // 8
|
|
var_r29 = lbl_1_data_9DC[1]; // 8
|
|
break;
|
|
case 8:
|
|
var_r30 = lbl_1_data_9DC[2]; // 8
|
|
var_r29 = lbl_1_data_9DC[3]; // 4
|
|
break;
|
|
case 16:
|
|
var_r30 = lbl_1_data_9DC[4]; // 4
|
|
var_r29 = lbl_1_data_9DC[5]; // 4
|
|
break;
|
|
}
|
|
|
|
var_r31 = (void *)(((arg1 / var_r30) * 32) + (((arg1 % 8) * arg0->bmp->pixSize) / 8)
|
|
+ (((arg0->bmp->sizeX / var_r30) * ((arg2 / var_r29) << 5)) + ((u32)arg0->bmp->data) + ((arg0->bmp->pixSize * ((arg2 % var_r29) * 8)) / 8)));
|
|
|
|
switch (arg0->bmp->pixSize) {
|
|
case 4:
|
|
if ((arg1 & 1) == 0) {
|
|
*var_r31 &= 0xF;
|
|
*var_r31 |= arg3 << 4;
|
|
break;
|
|
}
|
|
*var_r31 &= 0xF0;
|
|
*var_r31 |= arg3;
|
|
break;
|
|
case 8:
|
|
*var_r31 |= arg3;
|
|
break;
|
|
case 16:
|
|
*((u16 *)var_r31) = arg3;
|
|
break;
|
|
}
|
|
}
|
|
|
|
u16 fn_1_607C(AnimData *arg0, u16 arg1, u16 arg2)
|
|
{
|
|
u16 var_r31;
|
|
u16 var_r30;
|
|
u8 *var_r29;
|
|
s32 var_r28;
|
|
u32 temp_r0_2;
|
|
u32 temp_r6;
|
|
u8 temp_r0;
|
|
u8 temp_r0_3;
|
|
|
|
switch (arg0->bmp->pixSize) {
|
|
case 4:
|
|
var_r31 = lbl_1_data_9F4[0];
|
|
var_r30 = lbl_1_data_9F4[1];
|
|
break;
|
|
case 8:
|
|
var_r31 = lbl_1_data_9F4[2];
|
|
var_r30 = lbl_1_data_9F4[3];
|
|
break;
|
|
case 16:
|
|
var_r31 = lbl_1_data_9F4[4];
|
|
var_r30 = lbl_1_data_9F4[5];
|
|
break;
|
|
}
|
|
var_r29 = (void *)(((arg1 / var_r31) * 32) + (((arg1 % 8) * arg0->bmp->pixSize) / 8)
|
|
+ (((arg0->bmp->sizeX / var_r31) * ((arg2 / var_r30) << 5)) + ((u32)arg0->bmp->data) + ((arg0->bmp->pixSize * ((arg2 % var_r30) * 8)) / 8)));
|
|
|
|
(void)var_r31;
|
|
(void)var_r31;
|
|
(void)var_r31;
|
|
(void)var_r30;
|
|
(void)var_r30;
|
|
(void)var_r30;
|
|
|
|
switch (arg0->bmp->pixSize) {
|
|
case 4:
|
|
if ((arg1 & 1) == 0) {
|
|
var_r28 = *var_r29 >> 4;
|
|
}
|
|
else {
|
|
var_r28 = *var_r29 & 0xF;
|
|
}
|
|
return var_r28;
|
|
case 8:
|
|
return *var_r29;
|
|
case 16:
|
|
return *((u16 *)var_r29);
|
|
}
|
|
}
|
|
|
|
s32 fn_1_6248(void *arg0, s32 arg1)
|
|
{
|
|
s32 var_r31;
|
|
|
|
GXBeginDisplayList(arg0, arg1);
|
|
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 4);
|
|
|
|
GXPosition3f32(0.0f, 1.5f, 100.0f);
|
|
GXTexCoord2f32(0.0f, 1.0f);
|
|
GXPosition3f32(0.0f, 1.5f, -100.0f);
|
|
GXTexCoord2f32(0.0f, 0.0f);
|
|
GXPosition3f32(3000.0f, 1.5f, 100.0f);
|
|
GXTexCoord2f32(1.0f, 1.0f);
|
|
GXPosition3f32(3000.0f, 1.5f, -100.0f);
|
|
GXTexCoord2f32(1.0f, 0.0f);
|
|
|
|
var_r31 = GXEndDisplayList();
|
|
DCFlushRangeNoSync(arg0, var_r31);
|
|
return var_r31;
|
|
}
|
|
|
|
void fn_1_6440(omObjData *object)
|
|
{
|
|
fn_1_648C(0, 0, 0.0f);
|
|
object->func = fn_1_66DC;
|
|
}
|
|
|
|
void fn_1_648C(s32 arg0, s32 arg1, float arg8)
|
|
{
|
|
CZoom = lbl_1_data_738[arg0].unk_00 + arg8 * (lbl_1_data_738[arg1].unk_00 - lbl_1_data_738[arg0].unk_00);
|
|
Center.x = lbl_1_data_738[arg0].unk_04 + arg8 * (lbl_1_data_738[arg1].unk_04 - lbl_1_data_738[arg0].unk_04);
|
|
Center.y = lbl_1_data_738[arg0].unk_08 + arg8 * (lbl_1_data_738[arg1].unk_08 - lbl_1_data_738[arg0].unk_08);
|
|
Center.z = lbl_1_data_738[arg0].unk_0C + arg8 * (lbl_1_data_738[arg1].unk_0C - lbl_1_data_738[arg0].unk_0C);
|
|
CRot.x = lbl_1_data_738[arg0].unk_10 + arg8 * (lbl_1_data_738[arg1].unk_10 - lbl_1_data_738[arg0].unk_10);
|
|
CRot.y = lbl_1_data_738[arg0].unk_14 + arg8 * (lbl_1_data_738[arg1].unk_14 - lbl_1_data_738[arg0].unk_14);
|
|
CRot.z = lbl_1_data_738[arg0].unk_18 + arg8 * (lbl_1_data_738[arg1].unk_18 - lbl_1_data_738[arg0].unk_18);
|
|
}
|
|
|
|
void fn_1_66DC(omObjData *object)
|
|
{
|
|
CameraData *var_r31;
|
|
|
|
var_r31 = Hu3DCamera;
|
|
switch (fn_1_38C()) {
|
|
case 1:
|
|
fn_1_648C(0, 1, 1.0 - cosd(90.0f * lbl_1_bss_4));
|
|
if (lbl_1_bss_4 < 1.0f) {
|
|
lbl_1_bss_4 += 0.007999999f;
|
|
if (lbl_1_bss_4 > 1.0f) {
|
|
lbl_1_bss_4 = 1.0f;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
Center.x += 2.0000002f;
|
|
Hu3DShadowData.unk_14.x = 1000.0f + var_r31->pos.x;
|
|
Hu3DShadowData.unk_20.x = Hu3DShadowData.unk_14.x - 1500.0f;
|
|
break;
|
|
case 6:
|
|
fn_1_648C(1, 1, 0.0f);
|
|
break;
|
|
case 7:
|
|
if (Center.x < 3000.0f) {
|
|
Center.x += 25.0f;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|