649 lines
26 KiB
C
649 lines
26 KiB
C
#include "game/hsfdraw.h"
|
|
#include "game/hsfload.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/object.h"
|
|
#include "game/printfunc.h"
|
|
|
|
#include "game/hsfmotion.h"
|
|
|
|
#include "game/audio.h"
|
|
#include "game/gamework_data.h"
|
|
#include "game/msm.h"
|
|
#include "game/pad.h"
|
|
#include "game/process.h"
|
|
#include "game/wipe.h"
|
|
|
|
#include "ext_math.h"
|
|
#include "math.h"
|
|
|
|
typedef struct unk_bss_a18 {
|
|
u32 unk0;
|
|
Vec unk4;
|
|
Vec unk10;
|
|
u8 unk1C[0x88];
|
|
} UnkBssA18;
|
|
|
|
omObjData *lbl_1_bss_AC4;
|
|
omObjData *lbl_1_bss_AC0;
|
|
omObjData *lbl_1_bss_ABC;
|
|
UnkBssA18 lbl_1_bss_A18;
|
|
s32 lbl_1_bss_A14;
|
|
float lbl_1_bss_A10;
|
|
float lbl_1_bss_A0C;
|
|
s16 lbl_1_bss_A08;
|
|
Process *lbl_1_bss_A04;
|
|
Process *lbl_1_bss_A00;
|
|
|
|
void fn_1_4DF8(omObjData *object);
|
|
void fn_1_5A60(omObjData *object);
|
|
void fn_1_5DA8(void);
|
|
void fn_1_6AE0(ModelData *model, Mtx mtx);
|
|
void fn_1_83B4(void);
|
|
|
|
static const Vec lbl_1_rodata_1C8 = { 0.0f, 0.0f, 0.0f };
|
|
static const Vec lbl_1_rodata_1D4 = { 0.0f, 0.0f, -1.0f };
|
|
|
|
void fn_1_4AC8(void)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
Process *objman;
|
|
OSReport("******* MODELTESTObjectSetup *********\n");
|
|
objman = omInitObjMan(50, 8192);
|
|
CRot.x = -22;
|
|
CRot.y = 0;
|
|
CRot.z = 0;
|
|
Center.x = 0;
|
|
Center.y = 100;
|
|
Center.z = 0;
|
|
CZoom = 400;
|
|
Hu3DCameraCreate(1);
|
|
lbl_1_bss_A0C = 45;
|
|
Hu3DCameraPerspectiveSet(1, lbl_1_bss_A0C, 20, 5000, 1.2f);
|
|
Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1);
|
|
Hu3DCameraScissorSet(1, 0, 0, 640, 480);
|
|
lbl_1_bss_ABC = omAddObjEx(objman, 0, 32, 32, -1, fn_1_4DF8);
|
|
lbl_1_bss_AC0 = omAddObjEx(objman, 32730, 0, 0, -1, fn_1_5A60);
|
|
lbl_1_bss_A00 = HuPrcCreate(fn_1_5DA8, 100, 8192, 0);
|
|
Hu3DBGColorSet(16, 16, 16);
|
|
Hu3DHookFuncCreate(fn_1_6AE0);
|
|
HuPrcChildCreate(fn_1_83B4, 100, 12288, 0, objman);
|
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30);
|
|
sp14 = lbl_1_rodata_1C8;
|
|
sp8 = lbl_1_rodata_1D4;
|
|
lbl_1_bss_A18.unk0 = 64;
|
|
lbl_1_bss_A18.unk10.x = 0;
|
|
lbl_1_bss_A18.unk10.y = 0;
|
|
lbl_1_bss_A18.unk10.z = 0;
|
|
msmSeSetListener(&sp14, &sp8, 2000, 1000, 0);
|
|
}
|
|
|
|
void fn_1_4DF8(omObjData *object)
|
|
{
|
|
float temp_f31;
|
|
Vec pos;
|
|
Vec offset;
|
|
Vec dir;
|
|
Vec y_offset;
|
|
|
|
s8 temp_r31;
|
|
|
|
if (HuPadBtnDown[0] & PAD_BUTTON_START) {
|
|
if (lbl_1_bss_A00) {
|
|
HuPrcKill(lbl_1_bss_A00);
|
|
}
|
|
if (lbl_1_bss_A04) {
|
|
HuPrcKill(lbl_1_bss_A04);
|
|
}
|
|
HuAudFXListnerKill();
|
|
omOvlReturnEx(1, 1);
|
|
return;
|
|
}
|
|
CRot.y += 0.1f * HuPadStkX[0];
|
|
CRot.x += 0.1f * HuPadStkY[0];
|
|
CZoom += HuPadTrigL[0] / 2;
|
|
CZoom -= HuPadTrigR[0] / 2;
|
|
if (CZoom < 100) {
|
|
CZoom = 100;
|
|
}
|
|
if (CZoom > 2000) {
|
|
CZoom = 2000;
|
|
}
|
|
pos.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x)));
|
|
pos.y = (Center.y + (CZoom * -sind(CRot.x)));
|
|
pos.z = (Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x))));
|
|
offset.x = Center.x - pos.x;
|
|
offset.y = Center.y - pos.y;
|
|
offset.z = Center.z - pos.z;
|
|
dir.x = (sind(CRot.y) * sind(CRot.x));
|
|
dir.y = cosd(CRot.x);
|
|
dir.z = (cosd(CRot.y) * sind(CRot.x));
|
|
temp_f31 = CRot.z;
|
|
y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(temp_f31))
|
|
+ dir.y * (offset.x * offset.y * (1.0f - cosd(temp_f31)) - offset.z * sind(temp_f31))
|
|
+ dir.z * (offset.x * offset.z * (1.0f - cosd(temp_f31)) + offset.y * sind(temp_f31));
|
|
|
|
y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(temp_f31))
|
|
+ dir.x * (offset.x * offset.y * (1.0f - cosd(temp_f31)) + offset.z * sind(temp_f31))
|
|
+ dir.z * (offset.y * offset.z * (1.0f - cosd(temp_f31)) - offset.x * sind(temp_f31));
|
|
|
|
y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(temp_f31))
|
|
+ (dir.x * (offset.x * offset.z * (1.0 - cosd(temp_f31)) - offset.y * sind(temp_f31))
|
|
+ dir.y * (offset.y * offset.z * (1.0 - cosd(temp_f31)) + offset.x * sind(temp_f31)));
|
|
VECCrossProduct(&dir, &offset, &offset);
|
|
VECNormalize(&offset, &offset);
|
|
temp_r31 = (HuPadSubStkX[0] & 0xF8);
|
|
if (temp_r31 != 0) {
|
|
Center.x += 0.05f * (offset.x * temp_r31);
|
|
Center.y += 0.05f * (offset.y * temp_r31);
|
|
Center.z += 0.05f * (offset.z * temp_r31);
|
|
}
|
|
VECNormalize(&y_offset, &offset);
|
|
temp_r31 = -(HuPadSubStkY[0] & 0xF8);
|
|
if (temp_r31 != 0) {
|
|
Center.x += 0.05f * (offset.x * temp_r31);
|
|
Center.y += 0.05f * (offset.y * temp_r31);
|
|
Center.z += 0.05f * (offset.z * temp_r31);
|
|
}
|
|
Hu3DCameraPerspectiveSet(1, lbl_1_bss_A0C, 20, 5000, 1.2f);
|
|
}
|
|
|
|
void fn_1_5A60(omObjData *object)
|
|
{
|
|
Mtx rotAxis;
|
|
Vec pos, target, up;
|
|
float x, y, z;
|
|
|
|
x = CRot.x;
|
|
y = CRot.y;
|
|
z = CRot.z;
|
|
|
|
pos.x = (((sind(y) * cosd(x)) * CZoom) + Center.x);
|
|
pos.y = (-sind(x) * CZoom) + Center.y;
|
|
pos.z = ((cosd(y) * cosd(x)) * CZoom) + Center.z;
|
|
target.x = Center.x;
|
|
target.y = Center.y;
|
|
target.z = Center.z;
|
|
up.x = sind(y) * sind(x);
|
|
up.y = cosd(x);
|
|
up.z = cosd(y) * sind(x);
|
|
Hu3DCameraPosSet(1, pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z);
|
|
MTXRotDeg(rotAxis, 'y', -y);
|
|
MTXMultVec(rotAxis, &pos, &up);
|
|
VECSubtract(&target, &pos, &up);
|
|
VECNormalize(&up, &up);
|
|
HuAudFXListnerUpdate(&pos, &up);
|
|
}
|
|
|
|
u32 lbl_1_data_3B0[] = { DATA_MAKE_NUM(DATADIR_MARIOMDL0, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_MARIOMDL1, 0x00), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_MARIOMDL1, 0x01), 0x00000000, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x06), 0x00000001, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00),
|
|
0x00000001, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02), 0x00000001, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x03), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x05), 0x00000000, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17), 0x00000000, DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x18),
|
|
0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_408[] = { DATA_MAKE_NUM(DATADIR_LUIGI, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_LUIGI, 0x02), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_LUIGI, 0x03), 0x00000000, DATA_MAKE_NUM(DATADIR_LUIGI, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_LUIGI, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_LUIGI, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_LUIGI, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_LUIGI, 0x0C), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_LUIGI, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_LUIGI, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_460[] = { DATA_MAKE_NUM(DATADIR_PEACH, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_PEACH, 0x02), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_PEACH, 0x03), 0x00000000, DATA_MAKE_NUM(DATADIR_PEACH, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_PEACH, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_PEACH, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_PEACH, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_PEACH, 0x0C), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_PEACH, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_PEACH, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_4B8[] = { DATA_MAKE_NUM(DATADIR_YOSHI, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_YOSHI, 0x02), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_YOSHI, 0x03), 0x00000000, DATA_MAKE_NUM(DATADIR_YOSHI, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_YOSHI, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_YOSHI, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_YOSHI, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_YOSHI, 0x0C), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_YOSHI, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_YOSHI, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_510[] = { DATA_MAKE_NUM(DATADIR_WARIO, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_WARIO, 0x02), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_WARIO, 0x03), 0x00000000, DATA_MAKE_NUM(DATADIR_WARIO, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_WARIO, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_WARIO, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_WARIO, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_WARIO, 0x0C), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_WARIO, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_WARIO, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_568[] = { DATA_MAKE_NUM(DATADIR_DONKEY, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_DONKEY, 0x02), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_DONKEY, 0x03), 0x00000000, DATA_MAKE_NUM(DATADIR_DONKEY, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_DONKEY, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_DONKEY, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_DONKEY, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_DONKEY, 0x0C), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_DONKEY, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_DONKEY, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_5C0[] = { DATA_MAKE_NUM(DATADIR_DAISY, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_DAISY, 0x02), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_DAISY, 0x03), 0x00000000, DATA_MAKE_NUM(DATADIR_DAISY, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_DAISY, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_DAISY, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_DAISY, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_DAISY, 0x0C), 0x00000000,
|
|
DATA_MAKE_NUM(DATADIR_DAISY, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_DAISY, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 lbl_1_data_618[]
|
|
= { DATA_MAKE_NUM(DATADIR_WALUIGI, 0x00), 0x00000000, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x02), 0x00000000, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x03),
|
|
0x00000000, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x0D), 0x00000001, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x05), 0x00000001,
|
|
DATA_MAKE_NUM(DATADIR_WALUIGI, 0x07), 0x00000001, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x08), 0x00000001, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x0C),
|
|
0x00000000, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x28), 0x00000000, DATA_MAKE_NUM(DATADIR_WALUIGI, 0x29), 0x00000000, 0x00000000, 0x00000000 };
|
|
|
|
u32 *lbl_1_data_670[]
|
|
= { lbl_1_data_3B0, lbl_1_data_408, lbl_1_data_460, lbl_1_data_4B8, lbl_1_data_510, lbl_1_data_568, lbl_1_data_5C0, lbl_1_data_618 };
|
|
|
|
void fn_1_69C8(s16 arg0, s16 arg1, s16 arg2);
|
|
|
|
void fn_1_5DA8(void)
|
|
{
|
|
u32 *temp_r31;
|
|
s16 temp_r30;
|
|
s16 temp_r29;
|
|
s16 temp_r28;
|
|
s16 temp_r27;
|
|
s16 temp_r26;
|
|
s16 temp_r25;
|
|
|
|
s32 temp_r24 = 0;
|
|
s16 sp40[3][32];
|
|
Vec sp34;
|
|
|
|
Vec sp28 = { 0, 0, 0 };
|
|
Vec sp1C = { 0, 1, 0 };
|
|
s16 sp16[3];
|
|
s16 sp10[3];
|
|
float spC;
|
|
s16 sp8 = 0;
|
|
Hu3DGLightCreate(0, 500, 1000, 0, -0.5, -1, 255, 255, 255);
|
|
temp_r28 = GWPlayerCfg[0].character;
|
|
temp_r31 = lbl_1_data_670[temp_r28];
|
|
sp16[0] = Hu3DModelCreateFile(temp_r31[0]);
|
|
sp16[1] = Hu3DModelCreateFile(temp_r31[2]);
|
|
sp16[2] = Hu3DModelCreateFile(temp_r31[4]);
|
|
HuDataDirClose(temp_r31[0]);
|
|
HuDataDirClose(temp_r31[2]);
|
|
HuDataDirClose(temp_r31[4]);
|
|
temp_r27 = 0;
|
|
temp_r29 = 0;
|
|
while (1) {
|
|
if (temp_r31[(temp_r29 * 2) + 8] == 0) {
|
|
if (temp_r27 == 0) {
|
|
temp_r27 = temp_r29;
|
|
}
|
|
break;
|
|
}
|
|
if (temp_r31[(temp_r29 * 2) + 8] == 0xFFFFFFFF) {
|
|
temp_r27 = temp_r29;
|
|
}
|
|
else {
|
|
sp40[0][temp_r29] = Hu3DJointMotionFile(sp16[0], temp_r31[(temp_r29 * 2) + 8]);
|
|
sp40[1][temp_r29] = Hu3DJointMotionFile(sp16[1], temp_r31[(temp_r29 * 2) + 8]);
|
|
sp40[2][temp_r29] = Hu3DJointMotionFile(sp16[2], temp_r31[(temp_r29 * 2) + 8]);
|
|
}
|
|
temp_r29++;
|
|
}
|
|
sp10[0] = Hu3DJointMotionFile(sp16[0], temp_r31[6]);
|
|
sp10[1] = Hu3DJointMotionFile(sp16[1], temp_r31[6]);
|
|
sp10[2] = Hu3DJointMotionFile(sp16[2], temp_r31[6]);
|
|
temp_r26 = 0;
|
|
temp_r30 = 0;
|
|
Hu3DMotionSet(sp16[0], sp40[0][temp_r30]);
|
|
Hu3DModelAttrSet(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DMotionSet(sp16[1], sp40[1][temp_r30]);
|
|
Hu3DModelAttrSet(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DMotionSet(sp16[2], sp40[2][temp_r30]);
|
|
Hu3DModelAttrSet(sp16[2], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[1], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(sp16[2], HU3D_ATTR_DISPOFF);
|
|
while (1) {
|
|
temp_r25 = 0;
|
|
if (HuPadBtnDown[0] & PAD_BUTTON_X) {
|
|
temp_r30++;
|
|
if (temp_r30 >= temp_r27) {
|
|
temp_r30 = 0;
|
|
}
|
|
Hu3DMotionSet(sp16[0], sp40[0][temp_r30]);
|
|
Hu3DMotionSet(sp16[1], sp40[1][temp_r30]);
|
|
Hu3DMotionSet(sp16[2], sp40[2][temp_r30]);
|
|
if (temp_r31[(temp_r30 * 2) + 9] != 0) {
|
|
Hu3DModelAttrSet(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[2], HU3D_MOTATTR_LOOP);
|
|
}
|
|
else {
|
|
Hu3DModelAttrReset(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[2], HU3D_MOTATTR_LOOP);
|
|
}
|
|
fn_1_69C8(temp_r28, sp16[0], 0);
|
|
fn_1_69C8(temp_r28, sp16[1], 1);
|
|
fn_1_69C8(temp_r28, sp16[2], 2);
|
|
temp_r25 = 1;
|
|
}
|
|
if (HuPadBtnDown[0] & PAD_BUTTON_Y) {
|
|
temp_r30--;
|
|
if (temp_r30 < 0) {
|
|
temp_r30 = temp_r27 - 1;
|
|
}
|
|
Hu3DMotionSet(sp16[0], sp40[0][temp_r30]);
|
|
Hu3DMotionSet(sp16[1], sp40[1][temp_r30]);
|
|
Hu3DMotionSet(sp16[2], sp40[2][temp_r30]);
|
|
if (temp_r31[(temp_r30 * 2) + 9] != 0) {
|
|
Hu3DModelAttrSet(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[2], HU3D_MOTATTR_LOOP);
|
|
}
|
|
else {
|
|
Hu3DModelAttrReset(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[2], HU3D_MOTATTR_LOOP);
|
|
}
|
|
fn_1_69C8(temp_r28, sp16[0], 0);
|
|
fn_1_69C8(temp_r28, sp16[1], 1);
|
|
fn_1_69C8(temp_r28, sp16[2], 2);
|
|
temp_r25 = 1;
|
|
}
|
|
if (temp_r31[(temp_r30 * 2) + 9] == 0) {
|
|
if (HuPadBtn[0] & PAD_BUTTON_A) {
|
|
Hu3DModelAttrSet(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrSet(sp16[2], HU3D_MOTATTR_LOOP);
|
|
temp_r25 = 1;
|
|
}
|
|
else {
|
|
if (temp_r30 != 3 && temp_r30 != 2) {
|
|
Hu3DModelAttrReset(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[2], HU3D_MOTATTR_LOOP);
|
|
}
|
|
}
|
|
}
|
|
if (temp_r25 != 0) {
|
|
if (temp_r30 == 3) {
|
|
Hu3DMotionSet(sp16[0], sp40[0][temp_r30]);
|
|
Hu3DMotionSet(sp16[1], sp40[1][temp_r30]);
|
|
Hu3DMotionSet(sp16[2], sp40[2][temp_r30]);
|
|
Hu3DModelAttrReset(sp16[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[1], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelAttrReset(sp16[2], HU3D_MOTATTR_LOOP);
|
|
for (temp_r29 = 0; temp_r29 <= 30; temp_r29++) {
|
|
Hu3DModelPosSet(sp16[0], 0, sind(temp_r29 * 6.0f) * 150, 0);
|
|
Hu3DModelPosSet(sp16[1], 0, sind(temp_r29 * 6.0f) * 150, 0);
|
|
Hu3DModelPosSet(sp16[2], 0, sind(temp_r29 * 6.0f) * 150, 0);
|
|
if (temp_r29 == 25) {
|
|
Hu3DMotionSet(sp16[0], sp10[0]);
|
|
Hu3DMotionSet(sp16[1], sp10[1]);
|
|
Hu3DMotionSet(sp16[2], sp10[2]);
|
|
}
|
|
HuPrcVSleep();
|
|
}
|
|
while (!Hu3DMotionEndCheck(sp16[0])) {
|
|
HuPrcVSleep();
|
|
}
|
|
fn_1_69C8(temp_r28, sp16[0], 0);
|
|
fn_1_69C8(temp_r28, sp16[1], 1);
|
|
fn_1_69C8(temp_r28, sp16[2], 2);
|
|
Hu3DMotionShiftSet(sp16[0], sp40[0][0], 0, 16, HU3D_MOTATTR_LOOP);
|
|
Hu3DMotionShiftSet(sp16[1], sp40[1][0], 0, 16, HU3D_MOTATTR_LOOP);
|
|
Hu3DMotionShiftSet(sp16[2], sp40[2][0], 0, 16, HU3D_MOTATTR_LOOP);
|
|
}
|
|
temp_r24 = 0;
|
|
}
|
|
sp34.x = Center.x + (CZoom * (sind(CRot.y) * cosd(CRot.x)));
|
|
sp34.y = (Center.y + (CZoom * -sind(CRot.x)));
|
|
sp34.z = (Center.z + (CZoom * (cosd(CRot.y) * cosd(CRot.x))));
|
|
|
|
spC = VECMag(&sp34);
|
|
if (HuPadBtnDown[0] & PAD_BUTTON_B) {
|
|
temp_r26++;
|
|
if (temp_r26 >= 3) {
|
|
temp_r26 = 0;
|
|
}
|
|
}
|
|
Hu3DModelAttrSet(sp16[0], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(sp16[1], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(sp16[2], HU3D_ATTR_DISPOFF);
|
|
switch (temp_r26) {
|
|
case 0:
|
|
Hu3DModelAttrReset(sp16[0], HU3D_ATTR_DISPOFF);
|
|
break;
|
|
|
|
case 1:
|
|
Hu3DModelAttrReset(sp16[1], HU3D_ATTR_DISPOFF);
|
|
break;
|
|
|
|
case 2:
|
|
Hu3DModelAttrReset(sp16[2], HU3D_ATTR_DISPOFF);
|
|
break;
|
|
}
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
char *lbl_1_data_6F4[] = {
|
|
"s3_mario_eyes_1",
|
|
"mario_eyes_2",
|
|
"mario_eyes_2",
|
|
"S3c001m0_eye",
|
|
"S3c001m1_eye",
|
|
"c001m3_eye",
|
|
"GC-eyes",
|
|
"s3tc_GC-eyes_2",
|
|
"s3tc_GC-eyes_2",
|
|
"S3c003m1",
|
|
"S3c003m1",
|
|
"S3c003m1",
|
|
"GC-eyes",
|
|
"s3tc_GC-eyes_2",
|
|
"s3tc_GC-eyes_2",
|
|
"GC-eyes",
|
|
"s3tc_GC-eyes_2",
|
|
"s3tc_GC-eyes_2",
|
|
"GC-eyes",
|
|
"s3tc_GC-eyes_2",
|
|
"s3tc_GC-eyes_2",
|
|
"GC-eyes",
|
|
"s3tc_GC-eyes_2",
|
|
"s3tc_GC-eyes_2",
|
|
};
|
|
|
|
void fn_1_69C8(s16 arg0, s16 arg1, s16 arg2)
|
|
{
|
|
HsfdrawStruct01 *temp_r31;
|
|
HsfAttribute *temp_r30;
|
|
ModelData *temp_r29;
|
|
s16 temp_r28;
|
|
char *temp_r27;
|
|
temp_r29 = &Hu3DData[arg1];
|
|
temp_r30 = temp_r29->hsfData->attribute;
|
|
temp_r27 = MakeObjectName(lbl_1_data_6F4[arg2 + (arg0 * 3)]);
|
|
for (temp_r28 = 0; temp_r28 < temp_r29->hsfData->attributeCnt; temp_r28++, temp_r30++) {
|
|
if (temp_r30->bitmap->name[0] == temp_r27[0] && strcmp(temp_r30->bitmap->name, temp_r27) == 0 && temp_r30->unk04) {
|
|
temp_r31 = temp_r30->unk04;
|
|
temp_r31->unk08 = temp_r31->unk0C = temp_r31->unk10 = 0;
|
|
temp_r31->unk14 = temp_r31->unk18 = temp_r31->unk1C = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 lbl_1_data_754 = 20;
|
|
|
|
void fn_1_6AE0(ModelData *model, Mtx mtx)
|
|
{
|
|
s32 temp_r31;
|
|
u8 temp_r30, temp_r29, temp_r28;
|
|
s32 sp84 = 0;
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGB, GX_RGB8, 0);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXLoadPosMtxImm(mtx, GX_PNMTX0);
|
|
GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754 + 1) * 4);
|
|
for (temp_r31 = 0; temp_r31 <= lbl_1_data_754; temp_r31++) {
|
|
temp_r30 = temp_r29 = temp_r28 = 255;
|
|
GXPosition3f32((temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100), 0, (-(lbl_1_data_754 / 2)) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100), 0, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, 0, (temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100));
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, 0, (temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100));
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
}
|
|
GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754 + 1) * 4);
|
|
for (temp_r31 = 0; temp_r31 <= lbl_1_data_754; temp_r31++) {
|
|
temp_r30 = temp_r29 = temp_r28 = 255;
|
|
GXPosition3f32((temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100), lbl_1_data_754 * 100, (-(lbl_1_data_754 / 2)) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100), 0, -(lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, temp_r31 * 100, -(lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, temp_r31 * 100, -(lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
}
|
|
GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754 + 1) * 4);
|
|
for (temp_r31 = 0; temp_r31 <= lbl_1_data_754; temp_r31++) {
|
|
temp_r30 = temp_r29 = temp_r28 = 255;
|
|
GXPosition3f32((temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100), lbl_1_data_754 * 100, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100), 0, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, temp_r31 * 100, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, temp_r31 * 100, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
}
|
|
GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754 + 1) * 4);
|
|
for (temp_r31 = 0; temp_r31 <= lbl_1_data_754; temp_r31++) {
|
|
temp_r30 = temp_r29 = temp_r28 = 255;
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, lbl_1_data_754 * 100, (temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100));
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, 0, (temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100));
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, temp_r31 * 100, -(lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32((lbl_1_data_754 / 2) * 100, temp_r31 * 100, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
}
|
|
GXBegin(GX_LINES, GX_VTXFMT0, (lbl_1_data_754 + 1) * 4);
|
|
for (temp_r31 = 0; temp_r31 <= lbl_1_data_754; temp_r31++) {
|
|
temp_r30 = temp_r29 = temp_r28 = 255;
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, lbl_1_data_754 * 100, (temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100));
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, 0, (temp_r31 * 100) - ((lbl_1_data_754 / 2) * 100));
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, temp_r31 * 100, -(lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
GXPosition3f32(-(lbl_1_data_754 / 2) * 100, temp_r31 * 100, (lbl_1_data_754 / 2) * 100);
|
|
GXColor3u8(temp_r30, temp_r29, temp_r28);
|
|
}
|
|
}
|
|
|
|
s16 lbl_1_data_758[] = { 1, 3, 2, 13, 14, 15, 16, 68, -1 };
|
|
|
|
s16 lbl_1_data_76A[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, -1 };
|
|
|
|
void fn_1_814C(void)
|
|
{
|
|
s16 temp_r31 = 0;
|
|
s16 temp_r30 = 0;
|
|
s16 temp_r29 = 0;
|
|
s16 temp_r28;
|
|
Vec sp8 = { 0, 0, 0 };
|
|
while (1) {
|
|
lbl_1_bss_A14 = HuAudFXEmiterPlay(1282, &sp8);
|
|
HuPrcSleep(60);
|
|
if (HuPadBtnDown[1] & PAD_BUTTON_A) {
|
|
HuAudSeqFadeOut(temp_r28, 60);
|
|
temp_r28 = HuAudSeqPlay(lbl_1_data_758[temp_r31]);
|
|
temp_r31++;
|
|
if (lbl_1_data_758[temp_r31] == -1) {
|
|
temp_r31 = 0;
|
|
}
|
|
temp_r29 = 30;
|
|
}
|
|
if (HuPadBtnDown[1] & PAD_BUTTON_B) {
|
|
HuAudFXPlay(lbl_1_data_76A[temp_r30]);
|
|
temp_r30++;
|
|
if (lbl_1_data_76A[temp_r30] == -1) {
|
|
temp_r30 = 0;
|
|
}
|
|
temp_r29 = 30;
|
|
}
|
|
if (temp_r29) {
|
|
temp_r29--;
|
|
print8(16, 430, 2.0f, "MusicNo:%d SENo:%d", temp_r31, temp_r30);
|
|
}
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
s16 lbl_1_data_7AC = -1;
|
|
|
|
u32 fn_1_82C8(void)
|
|
{
|
|
s16 temp_r31;
|
|
temp_r31 = HuPadBtn[0];
|
|
if (lbl_1_bss_A08) {
|
|
lbl_1_bss_A08--;
|
|
if (!temp_r31) {
|
|
lbl_1_bss_A08 = 0;
|
|
}
|
|
else {
|
|
temp_r31 = 0;
|
|
}
|
|
}
|
|
else if (temp_r31) {
|
|
if (lbl_1_data_7AC == temp_r31) {
|
|
lbl_1_bss_A08 = 3;
|
|
}
|
|
else {
|
|
lbl_1_bss_A08 = 20;
|
|
}
|
|
lbl_1_data_7AC = temp_r31;
|
|
}
|
|
else {
|
|
lbl_1_data_7AC = 0;
|
|
}
|
|
return temp_r31;
|
|
}
|
|
|
|
void fn_1_83B4(void)
|
|
{
|
|
u32 temp_r29;
|
|
Process *temp_r28;
|
|
temp_r28 = HuPrcCurrentGet();
|
|
HuPrcSetStat(temp_r28, 0xC);
|
|
while (1) {
|
|
temp_r29 = fn_1_82C8();
|
|
if (HuPadBtn[0] & PAD_BUTTON_RIGHT) {
|
|
while (1) {
|
|
temp_r29 = fn_1_82C8();
|
|
if (HuPadBtn[0] & PAD_BUTTON_LEFT) {
|
|
break;
|
|
}
|
|
if (!temp_r29) {
|
|
HuPrcAllPause(1);
|
|
Hu3DPauseSet(1);
|
|
}
|
|
else {
|
|
HuPrcAllPause(0);
|
|
Hu3DPauseSet(0);
|
|
}
|
|
HuPrcVSleep();
|
|
}
|
|
HuPrcAllPause(0);
|
|
Hu3DPauseSet(0);
|
|
}
|
|
if (temp_r29 & PAD_BUTTON_UP) {
|
|
if (lbl_1_bss_A0C < 120.0f) {
|
|
lbl_1_bss_A0C++;
|
|
}
|
|
}
|
|
if (temp_r29 & PAD_BUTTON_DOWN) {
|
|
if (lbl_1_bss_A0C > 5.0f) {
|
|
lbl_1_bss_A0C--;
|
|
}
|
|
}
|
|
HuPrcVSleep();
|
|
}
|
|
}
|