Merge branch 'main' into main
This commit is contained in:
commit
83df5dfe18
110 changed files with 11426 additions and 1767 deletions
|
|
@ -1,4 +1,4 @@
|
|||
#include "common.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/process.h"
|
||||
#include "game/data.h"
|
||||
#include "game/sprite.h"
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
extern int SystemInitF;
|
||||
|
||||
static Process *objman;
|
||||
static Process *objman[2];
|
||||
Vec lbl_1_bss_3C[2];
|
||||
Vec lbl_1_bss_24[2];
|
||||
float lbl_1_bss_1C[2];
|
||||
|
|
@ -42,11 +42,13 @@ static BOOL TitleProc(void);
|
|||
|
||||
void *logoReadNintendo(void);
|
||||
|
||||
#define M_PI 3.141592653589793
|
||||
|
||||
void ModuleProlog(void)
|
||||
{
|
||||
omOvlHisData *history;
|
||||
OSReport("******* Boot ObjectSetup *********\n");
|
||||
objman = omInitObjMan(50, 8192);
|
||||
objman[0] = omInitObjMan(50, 8192);
|
||||
lbl_1_bss_3C[0].x = -67;
|
||||
lbl_1_bss_3C[0].y = 40;
|
||||
lbl_1_bss_3C[0].z = 0;
|
||||
|
|
@ -384,9 +386,62 @@ void fn_1_1178(void)
|
|||
}
|
||||
}
|
||||
|
||||
void fn_1_152C(void)
|
||||
{
|
||||
|
||||
//NON_MATCHING, only one in file
|
||||
void fn_1_152C(void) {
|
||||
Point3d temp_f0;
|
||||
Point3d temp_f0_4;
|
||||
Point3d temp_f0_7;
|
||||
Point3d sp8;
|
||||
|
||||
f32 temp_f31;
|
||||
s32 var_r30;
|
||||
s8 temp_r31;
|
||||
|
||||
if ((HuPadBtnDown[0] & 0x800)) {
|
||||
if (lbl_1_bss_0 != 0) {
|
||||
var_r30 = 0;
|
||||
} else {
|
||||
var_r30 = 1;
|
||||
}
|
||||
lbl_1_bss_0 = var_r30;
|
||||
}
|
||||
if (lbl_1_bss_0 != 0) {
|
||||
lbl_1_bss_3C->y += 0.1f * HuPadStkX[0];
|
||||
lbl_1_bss_3C->x += 0.1f * HuPadStkY[0];
|
||||
*lbl_1_bss_1C += HuPadTrigL[0] / 2;
|
||||
*lbl_1_bss_1C -= HuPadTrigR[0] / 2;
|
||||
if (*lbl_1_bss_1C < 100.0f) {
|
||||
*lbl_1_bss_1C = 100.0f;
|
||||
}
|
||||
temp_f0.x = lbl_1_bss_24->x + (*lbl_1_bss_1C * (sin((M_PI * lbl_1_bss_3C->y) / 180.0) * cos((M_PI * lbl_1_bss_3C->x) / 180.0)));
|
||||
temp_f0.y = (lbl_1_bss_24->y + (*lbl_1_bss_1C * -sin((M_PI * lbl_1_bss_3C->x) / 180.0)));
|
||||
temp_f0.z = (lbl_1_bss_24->z + (*lbl_1_bss_1C * (cos((M_PI * lbl_1_bss_3C->y) / 180.0) * cos((M_PI * lbl_1_bss_3C->x) / 180.0))));
|
||||
temp_f0_4.x = lbl_1_bss_24->x - temp_f0.x;
|
||||
temp_f0_4.y = lbl_1_bss_24->y - temp_f0.y;
|
||||
temp_f0_4.z = lbl_1_bss_24->z - temp_f0.z;
|
||||
temp_f0_7.x = (sin((M_PI * lbl_1_bss_3C->y) / 180.0) * sin((M_PI * lbl_1_bss_3C->x) / 180.0));
|
||||
temp_f0_7.y = cos((M_PI * lbl_1_bss_3C->x) / 180.0);
|
||||
temp_f0_7.z = (cos((M_PI * lbl_1_bss_3C->y) / 180.0) * sin((M_PI * lbl_1_bss_3C->x) / 180.0));
|
||||
temp_f31 = lbl_1_bss_3C->z;
|
||||
sp8.x = ((temp_f0_7.x * ((temp_f0_4.x * temp_f0_4.x) + ((1.0f - (temp_f0_4.x * temp_f0_4.x)) * cos((M_PI * temp_f31) / 180.0)))) + temp_f0_7.y * (((temp_f0_4.x * temp_f0_4.y) * (1.0 - cos((M_PI * temp_f31) / 180.0))) - temp_f0_4.z * sin((M_PI * temp_f31) / 180.0)) + temp_f0_7.z * (((temp_f0_4.x * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) + temp_f0_4.y * sin((M_PI * temp_f31) / 180.0)));
|
||||
sp8.y = ((temp_f0_7.y * ((temp_f0_4.y * temp_f0_4.y) + ((1.0f - (temp_f0_4.y * temp_f0_4.y)) * cos((M_PI * temp_f31) / 180.0)))) + temp_f0_7.x * (((temp_f0_4.x * temp_f0_4.y) * (1.0 - cos((M_PI * temp_f31) / 180.0))) + temp_f0_4.z * sin((M_PI * temp_f31) / 180.0)) + temp_f0_7.z * (((temp_f0_4.y * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) - temp_f0_4.x * sin((M_PI * temp_f31) / 180.0)));
|
||||
sp8.z = ((temp_f0_7.z * (temp_f0_4.z * temp_f0_4.z + ((1.0f - (temp_f0_4.z * temp_f0_4.z)) * cos((M_PI * temp_f31) / 180.0)))) + (temp_f0_7.x * (((temp_f0_4.x * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) - temp_f0_4.y * sin((M_PI * temp_f31) / 180.0))) + temp_f0_7.y * (((temp_f0_4.y * temp_f0_4.z) * (1.0 - cos((M_PI * temp_f31) / 180.0))) + temp_f0_4.x * sin((M_PI * temp_f31) / 180.0)));
|
||||
PSVECCrossProduct(&temp_f0_7, &temp_f0_4, &temp_f0_4);
|
||||
PSVECNormalize(&temp_f0_4, &temp_f0_4);
|
||||
temp_r31 = (HuPadSubStkX[0] & 0xF8);
|
||||
if (temp_r31 != 0) {
|
||||
lbl_1_bss_24->x += 0.05f * (temp_f0_4.x * temp_r31);
|
||||
lbl_1_bss_24->y += 0.05f * (temp_f0_4.y * temp_r31);
|
||||
lbl_1_bss_24->z += 0.05f * (temp_f0_4.z * temp_r31);
|
||||
}
|
||||
PSVECNormalize(&sp8, &temp_f0_4);
|
||||
temp_r31 = -(HuPadSubStkY[0] & 0xF8);
|
||||
if (temp_r31 != 0) {
|
||||
lbl_1_bss_24->x += 0.05f * (temp_f0_4.x * temp_r31);
|
||||
lbl_1_bss_24->y += 0.05f * (temp_f0_4.y * temp_r31);
|
||||
lbl_1_bss_24->z += 0.05f * (temp_f0_4.z * temp_r31);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void TitleInit(void)
|
||||
|
|
@ -486,5 +541,6 @@ static BOOL TitleProc(void)
|
|||
HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN);
|
||||
HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN);
|
||||
HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN);
|
||||
fn_1_152C();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
#include "common.h"
|
||||
#include "game/audio.h"
|
||||
#include "game/object.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/printfunc.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/wipe.h"
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
#include "common.h"
|
||||
#include "dolphin.h"
|
||||
#include "REL/executor.h"
|
||||
#include "game/process.h"
|
||||
#include "game/data.h"
|
||||
|
||||
//DATA file1
|
||||
s16 lbl_1_data_280 = -1;
|
||||
s16 lbl_1_data_282 = -1;
|
||||
s16 lbl_1_data_284 = -1;
|
||||
s16 lbl_1_data_286 = -1;
|
||||
s32 lbl_1_data_288 = -1;
|
||||
|
||||
//char lbl_1_data_28C[] = "%d";
|
||||
|
||||
//shouldn't use MAKE_DATA_NUM
|
||||
s32 lbl_1_data_290[] = {
|
||||
MAKE_DATA_NUM(0x005F, 0x0062),
|
||||
MAKE_DATA_NUM(0x001A, 0x0062),
|
||||
MAKE_DATA_NUM(0x006D, 0x0062),
|
||||
MAKE_DATA_NUM(0x008A, 0x0062),
|
||||
MAKE_DATA_NUM(0x0085, 0x0062),
|
||||
MAKE_DATA_NUM(0x0011, 0x0062),
|
||||
MAKE_DATA_NUM(0x000D, 0x0062),
|
||||
MAKE_DATA_NUM(0x0081, 0x0062),
|
||||
};
|
||||
|
||||
//shouldn't use MAKE_DATA_NUM
|
||||
s32 lbl_1_data_2B0[] = {
|
||||
MAKE_DATA_NUM(0x005F, 0x0033),
|
||||
MAKE_DATA_NUM(0x001A, 0x0033),
|
||||
MAKE_DATA_NUM(0x006D, 0x0033),
|
||||
MAKE_DATA_NUM(0x008A, 0x0033),
|
||||
MAKE_DATA_NUM(0x0085, 0x0033),
|
||||
MAKE_DATA_NUM(0x0011, 0x0033),
|
||||
MAKE_DATA_NUM(0x000D, 0x0033),
|
||||
MAKE_DATA_NUM(0x0081, 0x0033),
|
||||
};
|
||||
|
||||
s32 lbl_1_data_2D0[] = {
|
||||
0x125, 0x165, 0x1A5, 0x1E5, 0x225, 0x265, 0x2A5, 0x2E5
|
||||
};
|
||||
|
||||
s32 lbl_1_data_2F0[] = {
|
||||
0x12E, 0x16E, 0x1AE, 0x1EE, 0x22E, 0x26E, 0x2AE, 0x2EE
|
||||
};
|
||||
|
||||
s16 lbl_1_data_310 = -1;
|
||||
s16 lbl_1_data_312 = -1;
|
||||
s16 lbl_1_data_314 = -1;
|
||||
s16 lbl_1_data_316 = -1;
|
||||
|
||||
|
||||
s32 lbl_1_data_318[] = {
|
||||
MAKE_DATA_NUM(0x0077, 0x0016),
|
||||
MAKE_DATA_NUM(0x0077, 0x0017),
|
||||
MAKE_DATA_NUM(0x0077, 0x0018),
|
||||
MAKE_DATA_NUM(0x0077, 0x0019),
|
||||
MAKE_DATA_NUM(0x0077, 0x001A),
|
||||
DATA_NUM_LISTEND
|
||||
};
|
||||
|
||||
char lbl_1_data_330[] = "itemhook_oya";
|
||||
char lbl_1_data_33D[] = "jyanA";
|
||||
char lbl_1_data_343[] = "jyanB";
|
||||
|
||||
char* lbl_1_data_34C[] = {
|
||||
&lbl_1_data_33D, &lbl_1_data_343
|
||||
};
|
||||
|
||||
char lbl_1_data_354[] = "coin";
|
||||
|
||||
char* lbl_1_data_35C[] = {
|
||||
&lbl_1_data_33D, &lbl_1_data_343
|
||||
};
|
||||
|
|
@ -1,38 +1,52 @@
|
|||
#include "common.h"
|
||||
#include "dolphin.h"
|
||||
#include "REL/executor.h"
|
||||
#include "game/process.h"
|
||||
#include "game/data.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "REL/w03Dll.h"
|
||||
#include "game/board/space.h"
|
||||
#include "game/object.h"
|
||||
#include "game/board/player.h"
|
||||
#include "math.h"
|
||||
#include "board_unsplit.h"
|
||||
#include "game/hsfman.h"
|
||||
|
||||
void BoardModelPosSet(s16, f32, f32, f32);
|
||||
s32 BoardModelMotionStart(s16, s32, s32);
|
||||
|
||||
void fn_8005B150(void*, void*);
|
||||
void fn_1_740(void);
|
||||
void fn_1_E0(void);
|
||||
void fn_1_2930(void);
|
||||
void fn_1_884(void);
|
||||
void fn_1_8F0(void);
|
||||
s32 fn_1_910(void);
|
||||
s32 fn_1_A74(void);
|
||||
void fn_1_AF8(void);
|
||||
void fn_1_DEC(void);
|
||||
void fn_1_10B0(void);
|
||||
s32 fn_1_12C8(void);
|
||||
void fn_8006DDE8(s16, f32);
|
||||
void fn_1_10E4(omObjData* arg0);
|
||||
extern Process *boardObjMan;
|
||||
typedef void (*VoidFunc)(void);
|
||||
extern const VoidFunc _ctors[];
|
||||
extern const VoidFunc _dtors[];
|
||||
|
||||
typedef struct w03StructUnk0 {
|
||||
/* 0x00 */ Vec unk_00;
|
||||
/* 0x0C */ Vec unk_0C;
|
||||
/* 0x18 */ Vec unk_18;
|
||||
/* 0x24 */ s32 datanum;
|
||||
} w03StructUnk0;
|
||||
|
||||
typedef struct w03State {
|
||||
s8 unk0;
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
s8 unk3;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
s16 unk8;
|
||||
} w03State;
|
||||
f32 BoardModelMotionTimeGet(s16);
|
||||
s16 BoardModelCreate(s32, void*, s32);
|
||||
void BoardModelKill(s16);
|
||||
void BoardModelMotionStartEndSet(s16, s32, s32);
|
||||
void Hu3DFogSet(f32, f32, u8, u8, u8);
|
||||
void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6);
|
||||
u8 WipeStatGet(void);
|
||||
|
||||
//DATA
|
||||
w03StructUnk0 lbl_1_data_0[] = {
|
||||
{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0004)},
|
||||
{{145.099f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0005)},
|
||||
{{-2004.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0006)},
|
||||
{{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0005)},
|
||||
{{-1548.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0006)},
|
||||
{{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000B)},
|
||||
{{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000B)},
|
||||
{{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000A)},
|
||||
|
|
@ -44,11 +58,11 @@ w03StructUnk0 lbl_1_data_0[] = {
|
|||
{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)},
|
||||
};
|
||||
|
||||
s16 lbl_1_data_1E0 = 1;
|
||||
s16 lbl_1_data_1E2 = 1;
|
||||
s16 lbl_1_data_1E4 = 1;
|
||||
s16 lbl_1_data_1E6 = 1;
|
||||
s16 lbl_1_data_1E8 = 1;
|
||||
s16 lbl_1_data_1E0 = -1;
|
||||
s16 lbl_1_data_1E2 = -1;
|
||||
s16 lbl_1_data_1E4 = -1;
|
||||
s16 lbl_1_data_1E6 = -1;
|
||||
s16 lbl_1_data_1E8 = -1;
|
||||
|
||||
typedef struct w03StructUnk1 {
|
||||
f32 unk_00;
|
||||
|
|
@ -65,12 +79,12 @@ w03StructUnk1 lbl_1_data_1EC = {
|
|||
0.0f, 118.0f, 120.0f, 180.0f, 180.0f, 240.0f, 240.0f, 300.0f
|
||||
};
|
||||
|
||||
s32 lbl_1_data_20C = {
|
||||
s32 lbl_1_data_20C[] = {
|
||||
MAKE_DATA_NUM(0x0077, 0x001C),
|
||||
DATA_NUM_LISTEND
|
||||
};
|
||||
|
||||
s32 lbl_1_data_214 = {
|
||||
s32 lbl_1_data_214[] = {
|
||||
MAKE_DATA_NUM(0x0002, 0x000E),
|
||||
DATA_NUM_LISTEND
|
||||
};
|
||||
|
|
@ -94,35 +108,18 @@ s32 lbl_1_data_26C[] = {
|
|||
0x0000044C, 0x0000043A, 0x0000043A, 0x0000044E
|
||||
};
|
||||
|
||||
s32 pad_27C[] = {0};
|
||||
|
||||
//BSS
|
||||
s16 lbl_1_bss_C[14];
|
||||
s32 lbl_1_bss_8;
|
||||
omObjData* lbl_1_bss_4;
|
||||
w03State* lbl_1_bss_0;
|
||||
|
||||
void fn_1_CF4(void);
|
||||
|
||||
void fn_1_0(void) {
|
||||
fn_8005B150(&fn_1_E0, &fn_1_740);
|
||||
}
|
||||
|
||||
int _prolog(void) {
|
||||
const VoidFunc* ctors = _ctors;
|
||||
while (*ctors != 0) {
|
||||
(**ctors)();
|
||||
ctors++;
|
||||
}
|
||||
fn_8005B150(&fn_1_E0, &fn_1_740);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void _epilog(void) {
|
||||
const VoidFunc* dtors = _dtors;
|
||||
while (*dtors != 0) {
|
||||
(**dtors)();
|
||||
dtors++;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_E0(void) {
|
||||
Vec* var_r29;
|
||||
void BoardCreate(void) {
|
||||
s32* var_r29;
|
||||
f32 var_f30;
|
||||
f32 var_f31;
|
||||
s32 var_r31;
|
||||
|
|
@ -132,62 +129,62 @@ void fn_1_E0(void) {
|
|||
|
||||
lbl_1_bss_0 = (w03State*)&GWSystem.board_data;
|
||||
lbl_1_bss_0->unk3 = 0;
|
||||
fn_800772EC(0x770000);
|
||||
lbl_1_data_1E0 = fn_8006D9A4(0x770001, NULL, 0);
|
||||
BoardSpaceInit(0x770000);
|
||||
lbl_1_data_1E0 = BoardModelCreate(0x770001, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_1E0, -1.0f);
|
||||
fn_8006F1A8(lbl_1_data_1E0, 0.0f, 0.0f, 0.0f);
|
||||
fn_8006E2B8(lbl_1_data_1E0, 0, 0x40000001);
|
||||
lbl_1_data_1E8 = fn_8006D9A4(0x770003, NULL, 0);
|
||||
BoardModelPosSet(lbl_1_data_1E0, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_1E0, 0, 0x40000001);
|
||||
lbl_1_data_1E8 = BoardModelCreate(0x770003, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_1E8, -1.0f);
|
||||
fn_8006F1A8(lbl_1_data_1E8, 0.0f, 0.0f, 0.0f);
|
||||
fn_8006F61C(lbl_1_data_1E8, 2);
|
||||
lbl_1_data_1E2 = fn_8006D9A4(0x770002, NULL, 0);
|
||||
BoardModelPosSet(lbl_1_data_1E8, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelLayerSet(lbl_1_data_1E8, 2);
|
||||
lbl_1_data_1E2 = BoardModelCreate(0x770002, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_1E2, -1.0f);
|
||||
fn_8006F1A8(lbl_1_data_1E2, 0.0f, 0.0f, 0.0f);
|
||||
fn_8006E2B8(lbl_1_data_1E2, 0, 0x40000001);
|
||||
lbl_1_data_1E4 = fn_8006D9A4(0x77001B, &lbl_1_data_20C, 0);
|
||||
fn_8006F1A8(lbl_1_data_1E4, 0.0f, 0.0f, 0.0f);
|
||||
fn_8006E2B8(lbl_1_data_1E4, 1, 0x40000001);
|
||||
lbl_1_data_1E6 = fn_8006D9A4(0x2000D, &lbl_1_data_214, 0);
|
||||
fn_8006F1A8(lbl_1_data_1E6, 0.0f, 0.0f, 0.0f);
|
||||
fn_8006E2B8(lbl_1_data_1E6, 1, 0x40000001);
|
||||
BoardModelPosSet(lbl_1_data_1E2, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_1E2, 0, 0x40000001);
|
||||
lbl_1_data_1E4 = BoardModelCreate(0x77001B, &lbl_1_data_20C, 0);
|
||||
BoardModelPosSet(lbl_1_data_1E4, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_1E4, 1, 0x40000001);
|
||||
lbl_1_data_1E6 = BoardModelCreate(0x2000D, &lbl_1_data_214, 0);
|
||||
BoardModelPosSet(lbl_1_data_1E6, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_1E6, 1, 0x40000001);
|
||||
|
||||
for (i = 0; i < 0xC; i++) {
|
||||
for (i = 0; i < 12; i++) {
|
||||
temp_r30 = &lbl_1_data_0[i];
|
||||
if (temp_r30->datanum != -1) {
|
||||
if ((i == 10) || (i == 11)) {
|
||||
var_r29 = &lbl_1_data_214;
|
||||
var_r29 = lbl_1_data_214;
|
||||
} else {
|
||||
var_r29 = NULL;
|
||||
}
|
||||
lbl_1_bss_C[i]= fn_8006D9A4(temp_r30->datanum, var_r29, 0);
|
||||
fn_8006F158(lbl_1_bss_C[i], temp_r30);
|
||||
fn_8006F220(lbl_1_bss_C[i], &temp_r30->unk_0C);
|
||||
fn_8006F2E8(lbl_1_bss_C[i], &temp_r30->unk_18);
|
||||
fn_8006F50C(lbl_1_bss_C[i], 1);
|
||||
lbl_1_bss_C[i]= BoardModelCreate(temp_r30->datanum, var_r29, 0);
|
||||
BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->unk_00);
|
||||
BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->unk_0C);
|
||||
BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->unk_18);
|
||||
BoardModelVisibilitySet(lbl_1_bss_C[i], 1);
|
||||
}
|
||||
}
|
||||
fn_8006E2B8(lbl_1_bss_C[10], 1, 0x40000001);
|
||||
fn_8006E2B8(lbl_1_bss_C[11], 1, 0x40000001);
|
||||
fn_8006E2B8(lbl_1_bss_C[7], 0, 0x40000002);
|
||||
fn_8006E2B8(lbl_1_bss_C[9], 0, 0x40000002);
|
||||
fn_8006E2B8(lbl_1_bss_C[1], 0, 0x40000002);
|
||||
BoardModelMotionStart(lbl_1_bss_C[10], 1, 0x40000001);
|
||||
BoardModelMotionStart(lbl_1_bss_C[11], 1, 0x40000001);
|
||||
BoardModelMotionStart(lbl_1_bss_C[7], 0, 0x40000002);
|
||||
BoardModelMotionStart(lbl_1_bss_C[9], 0, 0x40000002);
|
||||
BoardModelMotionStart(lbl_1_bss_C[1], 0, 0x40000002);
|
||||
fn_1_3058();
|
||||
fn_1_6494();
|
||||
fn_1_7ABC();
|
||||
fn_1_9A7C();
|
||||
fn_8005D10C(&fn_1_884, &fn_1_8F0);
|
||||
fn_80073FF4(&fn_1_910);
|
||||
fn_80073FFC(&fn_1_A74);
|
||||
fn_80074004(&fn_1_AF8);
|
||||
fn_80083EDC(lbl_1_data_1E4);
|
||||
fn_800A4F6C(lbl_1_data_1E6);
|
||||
fn_8007A83C(lbl_1_data_1E6);
|
||||
fn_80077AAC(lbl_1_data_1E6);
|
||||
fn_80064D84(0x0000C000);
|
||||
fn_80064D84(0x3000);
|
||||
BoardLightHookSet(&fn_1_884, &fn_1_8F0);
|
||||
BoardSpaceWalkEventFuncSet(&fn_1_910);
|
||||
BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_A74);
|
||||
BoardSpaceLandEventFuncSet((void*)&fn_1_AF8);
|
||||
BoardStarHostSet(lbl_1_data_1E4);
|
||||
BoardBooHouseHostSet(lbl_1_data_1E6);
|
||||
BoardLotteryHostSet(lbl_1_data_1E6);
|
||||
BoardShopHostSet(lbl_1_data_1E6);
|
||||
BoardJunctionMaskSet(0x0000C000);
|
||||
BoardJunctionMaskSet(0x3000);
|
||||
fn_1_CF4();
|
||||
fn_8006E2B8(lbl_1_bss_C[0], 0, 0x40000001);
|
||||
BoardModelMotionStart(lbl_1_bss_C[0], 0, 0x40000001);
|
||||
if (lbl_1_bss_0->unk0 != 0) {
|
||||
var_f30 = lbl_1_data_1EC.unk_10;
|
||||
var_f31 = lbl_1_data_1EC.unk_14;
|
||||
|
|
@ -197,14 +194,14 @@ void fn_1_E0(void) {
|
|||
var_f31 = lbl_1_data_1EC.unk_04;
|
||||
fn_1_63F4(1);
|
||||
}
|
||||
fn_8006E0B0(lbl_1_bss_C[0], var_f30, var_f31);
|
||||
fn_8006E2B8(lbl_1_bss_C[2], 0, 0x40000001);
|
||||
fn_8006E0B0(lbl_1_bss_C[2], 1, 0x64);
|
||||
BoardModelMotionStartEndSet(lbl_1_bss_C[0], var_f30, var_f31);
|
||||
BoardModelMotionStart(lbl_1_bss_C[2], 0, 0x40000001);
|
||||
BoardModelMotionStartEndSet(lbl_1_bss_C[2], 1, 0x64);
|
||||
fn_1_785C();
|
||||
if (lbl_1_bss_0->unk2 != 0) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
if ((lbl_1_bss_0->unk2 & (1 << i)) != 0) {
|
||||
fn_80064338(i, &fn_1_2930);
|
||||
BoardPlayerPreTurnHookSet(i, &fn_1_2930);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -212,41 +209,38 @@ void fn_1_E0(void) {
|
|||
fn_1_DEC();
|
||||
}
|
||||
|
||||
void fn_1_740(void) {
|
||||
void BoardDestroy(void) {
|
||||
s32 i;
|
||||
|
||||
fn_1_10B0();
|
||||
fn_1_9A9C();
|
||||
fn_1_7B58();
|
||||
for (i = 0; i < 0x0C; i++) {
|
||||
fn_8006DB90(lbl_1_bss_C[i]);
|
||||
BoardModelKill(lbl_1_bss_C[i]);
|
||||
lbl_1_bss_C[i] = -1;
|
||||
}
|
||||
if (lbl_1_data_1E6 != -1) {
|
||||
fn_8006DB90(lbl_1_data_1E6);
|
||||
BoardModelKill(lbl_1_data_1E6);
|
||||
lbl_1_data_1E6 = -1;
|
||||
}
|
||||
if (lbl_1_data_1E4 != -1) {
|
||||
fn_8006DB90(lbl_1_data_1E4);
|
||||
BoardModelKill(lbl_1_data_1E4);
|
||||
lbl_1_data_1E4 = -1;
|
||||
}
|
||||
if (lbl_1_data_1E0 != -1) {
|
||||
fn_8006DB90(lbl_1_data_1E0);
|
||||
BoardModelKill(lbl_1_data_1E0);
|
||||
lbl_1_data_1E0 = -1;
|
||||
}
|
||||
if (lbl_1_data_1E2 != -1) {
|
||||
fn_8006DB90(lbl_1_data_1E2);
|
||||
BoardModelKill(lbl_1_data_1E2);
|
||||
lbl_1_data_1E2 = -1;
|
||||
}
|
||||
}
|
||||
|
||||
extern f32 lbl_1_rodata_18;
|
||||
extern f32 lbl_1_rodata_1C;
|
||||
|
||||
void fn_1_884(void) {
|
||||
s32 var = fn_8006DBD4(lbl_1_data_1E0);
|
||||
s16 var = BoardModelIDGet(lbl_1_data_1E0);
|
||||
Hu3DModelLightInfoSet(var, 1);
|
||||
Hu3DFogSet(lbl_1_rodata_18, lbl_1_rodata_1C, 0xE4U, 0xF0U, 0xFFU);
|
||||
Hu3DFogSet(5000.0f, 30000.0f, 0xE4U, 0xF0U, 0xFFU);
|
||||
}
|
||||
|
||||
void fn_1_8F0(void) {
|
||||
|
|
@ -256,13 +250,13 @@ void fn_1_8F0(void) {
|
|||
s32 fn_1_910(void) {
|
||||
u32 temp_r3;
|
||||
s32 cur_player_index;
|
||||
s32 unkC;
|
||||
s32 space;
|
||||
|
||||
cur_player_index = GWSystem.player_curr;
|
||||
unkC = GWPlayer[cur_player_index].unkC;
|
||||
temp_r3 = fn_80074138(0, unkC);
|
||||
space = GWPlayer[cur_player_index].space_curr;
|
||||
temp_r3 = BoardSpaceFlagGet(0, space);
|
||||
if (temp_r3 & 0xC000) {
|
||||
if ((fn_8006413C(cur_player_index) == 2) || ((u8) (( GWPlayer[cur_player_index].placement >> 4U) & 1))) {
|
||||
if ((BoardPlayerSizeGet(cur_player_index) == 2) || ((u8) (( GWPlayer[cur_player_index].bowser_suit)))) {
|
||||
return 0;
|
||||
}
|
||||
if (temp_r3 & 0x4000) {
|
||||
|
|
@ -277,7 +271,7 @@ s32 fn_1_910(void) {
|
|||
return fn_1_309C();
|
||||
}
|
||||
if (temp_r3 & 0x200) {
|
||||
if ((fn_8006413C(cur_player_index) == 2) || ((u8) ((GWPlayer[cur_player_index].placement >> 4U) & 1) != 0)) {
|
||||
if ((BoardPlayerSizeGet(cur_player_index) == 2) || ((u8) ((GWPlayer[cur_player_index].bowser_suit)) != 0)) {
|
||||
return 0;
|
||||
}
|
||||
return fn_1_675C();
|
||||
|
|
@ -285,9 +279,9 @@ s32 fn_1_910(void) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void fn_1_A74(void) {
|
||||
s16 temp = GWPlayer[GWSystem.player_curr].unkC;
|
||||
u32 var = fn_80074138(0, temp) & 0x600000;
|
||||
s32 fn_1_A74(void) {
|
||||
s16 space = GWPlayer[GWSystem.player_curr].space_curr;
|
||||
u32 var = BoardSpaceFlagGet(0, space) & 0x600000;
|
||||
if (var + -0x200000 == 0) {
|
||||
fn_1_7BA8();
|
||||
return;
|
||||
|
|
@ -298,8 +292,8 @@ void fn_1_A74(void) {
|
|||
}
|
||||
|
||||
void fn_1_AF8(void) {
|
||||
if ((fn_8006413C(GWSystem.player_curr) == 0) && (fn_1_12C8() != 0) && (lbl_1_bss_0->unk2 != 0)) {
|
||||
fn_80064D84(0xC00);
|
||||
if ((BoardPlayerSizeGet(GWSystem.player_curr) == 0) && (fn_1_12C8() != 0) && (lbl_1_bss_0->unk2 != 0)) {
|
||||
BoardJunctionMaskSet(0xC00);
|
||||
}
|
||||
}
|
||||
void fn_1_B5C(s32 arg0) {
|
||||
|
|
@ -322,38 +316,38 @@ void fn_1_B5C(s32 arg0) {
|
|||
var_f28 = lbl_1_data_1EC.unk_04;
|
||||
fn_1_63F4(1);
|
||||
}
|
||||
fn_8006E2B8(lbl_1_bss_C[0], 0, 0);
|
||||
fn_8006E674(lbl_1_bss_C[0], var_f30);
|
||||
BoardModelMotionStart(lbl_1_bss_C[0], 0, 0);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f30);
|
||||
while (1) {
|
||||
temp = fn_8006E6F8(lbl_1_bss_C[0]);
|
||||
temp = BoardModelMotionTimeGet(lbl_1_bss_C[0]);
|
||||
if (temp >= var_f29) {
|
||||
break;
|
||||
}
|
||||
HuPrcVSleep();
|
||||
}
|
||||
fn_8006E5C4(lbl_1_bss_C[0], 0x40000001);
|
||||
fn_8006E674(lbl_1_bss_C[0], var_f31);
|
||||
fn_8006E0B0(lbl_1_bss_C[0], (s32) var_f31, (s32) var_f28);
|
||||
BoardModelAttrSet(lbl_1_bss_C[0], 0x40000001);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f31);
|
||||
BoardModelMotionStartEndSet(lbl_1_bss_C[0], (s32) var_f31, (s32) var_f28);
|
||||
}
|
||||
|
||||
void fn_1_CF4(void) {
|
||||
s16 var;
|
||||
s32 i, j;
|
||||
spaceData* temp_r28;
|
||||
spaceData* temp_r31;
|
||||
BoardSpace* temp_r28;
|
||||
BoardSpace* temp_r31;
|
||||
|
||||
for (i = 0; i < fn_800740B4(0); i++) {
|
||||
for (i = 0; i < BoardSpaceCountGet(0); i++) {
|
||||
var = i + 1;
|
||||
temp_r31 = fn_800740C4(0, var);
|
||||
for (j = 0; j < temp_r31->num_links; j++) {
|
||||
if (fn_80074138(0, temp_r31->links[j]) & 0xC00) {
|
||||
temp_r28 = fn_800740C4(0, temp_r31->links[j]);
|
||||
temp_r31 = BoardSpaceGet(0, var);
|
||||
for (j = 0; j < temp_r31->link_cnt; j++) {
|
||||
if (BoardSpaceFlagGet(0, temp_r31->link[j]) & 0xC00) {
|
||||
temp_r28 = BoardSpaceGet(0, temp_r31->link[j]);
|
||||
if (lbl_1_bss_0->unk0 != 0) {
|
||||
temp_r28->flag |= 0x04000000;
|
||||
fn_80064D84(0xC00);
|
||||
BoardJunctionMaskSet(0xC00);
|
||||
} else {
|
||||
temp_r28->flag &= ~0x04000000;
|
||||
fn_80064D94(0xC00);
|
||||
BoardJunctionMaskReset(0xC00);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -370,14 +364,14 @@ void fn_1_DEC(void) {
|
|||
w03UnkStruct2* temp_r29;
|
||||
s32 i;
|
||||
|
||||
temp_r3 = omAddObjEx(lbl_801D3ED4, 0x101, 0, 0, -1, &fn_1_10E4);
|
||||
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, &fn_1_10E4);
|
||||
lbl_1_bss_4 = temp_r3;
|
||||
temp_r29 = (w03UnkStruct2*)&temp_r3->work[0];
|
||||
temp_r29 = OM_GET_WORK_PTR(temp_r3, w03UnkStruct2);
|
||||
temp_r29->unk0 = 0;
|
||||
lbl_1_bss_8 = 0;
|
||||
fn_8005D530(&sp20);
|
||||
fn_8005D628(&sp14);
|
||||
HuAudFXListnerSetEX(&sp20, &sp14, 1200.0f, 4800.0f, 36000.0f, 0.0f, 1200.0f);
|
||||
BoardCameraPosGet(&sp20);
|
||||
BoardCameraDirGet(&sp14);
|
||||
HuAudFXListnerSetEX(&sp20, &sp14, 4800.0f, 36000.0f, 0.0f, 1200.0f, 1200.0f);
|
||||
for (i = 0; i < 4; i++) {
|
||||
sp8.x = lbl_1_data_22C[i].x - 3600.0f;
|
||||
sp8.y = lbl_1_data_22C[i].y;
|
||||
|
|
@ -410,7 +404,7 @@ void fn_1_DEC(void) {
|
|||
|
||||
void fn_1_10B0(void) {
|
||||
if (lbl_1_bss_4) {
|
||||
((w03UnkStruct2*)&lbl_1_bss_4->work[0])->unk0 = 1;
|
||||
OM_GET_WORK_PTR(lbl_1_bss_4, w03UnkStruct2)->unk0 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -420,9 +414,9 @@ void fn_1_10E4(omObjData* arg0) {
|
|||
s32 i;
|
||||
w03UnkStruct2* temp_r29;
|
||||
|
||||
temp_r29 = (w03UnkStruct2*)&arg0->work[0];
|
||||
if (temp_r29->unk0 != 0 || (fn_8005B6A8() != 0)) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
temp_r29 = OM_GET_WORK_PTR(arg0, w03UnkStruct2);
|
||||
if (temp_r29->unk0 != 0 || (BoardIsKill() != 0)) {
|
||||
for (i = 0; i < ARRAY_COUNT(lbl_1_data_21C); i++) {
|
||||
if (lbl_1_data_21C[i] != -1) {
|
||||
HuAudFXFadeOut(lbl_1_data_21C[i], 100);
|
||||
}
|
||||
|
|
@ -432,8 +426,8 @@ void fn_1_10E4(omObjData* arg0) {
|
|||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
fn_8005D628(&sp8);
|
||||
fn_8005D578(&sp14);
|
||||
BoardCameraDirGet(&sp8);
|
||||
BoardCameraTargetGet(&sp14);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if ((WipeStatGet() != 0) || (_CheckFlag(0x1001C) != 0)) {
|
||||
|
|
@ -454,4 +448,6 @@ void fn_1_10E4(omObjData* arg0) {
|
|||
lbl_1_bss_8 = 0;
|
||||
}
|
||||
HuAudFXListnerUpdate(&sp14, &sp8);
|
||||
}
|
||||
}
|
||||
|
||||
f32 const padMain = 0.0f;
|
||||
956
src/REL/w03Dll/mg_item.c
Normal file
956
src/REL/w03Dll/mg_item.c
Normal file
|
|
@ -0,0 +1,956 @@
|
|||
#include "dolphin.h"
|
||||
#include "REL/executor.h"
|
||||
#include "game/process.h"
|
||||
#include "game/data.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "REL/w03Dll.h"
|
||||
#include "game/board/space.h"
|
||||
#include "game/object.h"
|
||||
#include "game/board/player.h"
|
||||
// #include "math.h"
|
||||
#include "board_unsplit.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "dolphin/os/OSFastCast.h"
|
||||
|
||||
double sin(double x);
|
||||
double cos(double x);
|
||||
double atan2(double y, double x);
|
||||
|
||||
#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0])))
|
||||
|
||||
typedef struct someBits {
|
||||
/* 0x00 */ struct {
|
||||
u8 unk00_bit0 : 1;
|
||||
u8 unk00_bit1 : 3;
|
||||
u8 unk00_bit4 : 2;
|
||||
u8 unk00_bit6 : 1;
|
||||
u8 unk00_bit7 : 1;
|
||||
};
|
||||
u8 unk1;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
s16 unk4;
|
||||
s16 unk_06[3];
|
||||
} someBits;
|
||||
|
||||
typedef struct someBits2 {
|
||||
/* 0x00 */ struct {
|
||||
u8 unk00_bit0 : 1;
|
||||
u8 unk00_bit1 : 3;
|
||||
u8 unk00_bit4 : 2;
|
||||
u8 unk00_bit6 : 1;
|
||||
u8 unk00_bit7 : 1;
|
||||
};
|
||||
s8 unk1;
|
||||
s8 unk2;
|
||||
u8 unk3[3];
|
||||
s16 unk_06[3];
|
||||
} someBits2;
|
||||
|
||||
typedef struct w03UnkMG {
|
||||
/* 0x00 */ char unk_00[0x10];
|
||||
/* 0x10 */ s16 unk_10;
|
||||
/* 0x12 */ s16 unk_12;
|
||||
/* 0x14 */ s16 unk_14;
|
||||
/* 0x16 */ s16 unk_16;
|
||||
} w03UnkMG;
|
||||
|
||||
//external symbols
|
||||
extern Process *boardMainProc;
|
||||
extern s16 lbl_1_bss_C[14];
|
||||
extern Process *boardObjMan;
|
||||
extern u16 HuPadBtnDown[4];
|
||||
|
||||
//function signatures
|
||||
s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32);
|
||||
s32 BoardVecDAngleCalcRange(float *value, float min, float range);
|
||||
void BoardCameraQuakeSet(s32 duration, float strength);
|
||||
s16 MGSeqCreate(s32, ...);
|
||||
u8 MGSeqGetStat(s16);
|
||||
void omVibrate(s16, s16, s16, s16);
|
||||
void BoardPlayerMotBlendSet(s32, s32, s32);
|
||||
f32 BoardPlayerRotYGet(s32);
|
||||
f32 BoardModelMotionTimeGet(s16);
|
||||
s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist);
|
||||
s32 BoardModelScaleGet(s16 model, Vec *dst);
|
||||
s32 BoardModelMotionTimeSet(s16 model, float time);
|
||||
s32 BoardDAngleCalcRange(float *value, float min, float range);
|
||||
u32 BoardRandMod(u32 value);
|
||||
void BoardModelMotionStartEndSet(s16, s32, s32);
|
||||
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
|
||||
s32 BoardModelPosGet(s16 model, Vec *dst);
|
||||
s16 Hu3DMotionShiftIDGet(s16 arg0);
|
||||
f32 BoardPlayerMotionTimeGet(s32);
|
||||
s32 frand(void);
|
||||
|
||||
void fn_1_BE30(s32 arg0, ParticleData* arg1);
|
||||
void fn_1_BDAC(void);
|
||||
void fn_1_BC7C(s16 arg0);
|
||||
void fn_1_BBF8(void);
|
||||
s32 fn_1_BBC4(void);
|
||||
void fn_1_BB74(s8* arg0);
|
||||
s32 fn_1_BB48(void);
|
||||
void fn_1_B8E8(s32 arg0);
|
||||
void fn_1_B748(omObjData* arg0, someBits2* arg1);
|
||||
void fn_1_B688(omObjData* arg0, someBits2* arg1);
|
||||
void fn_1_B4AC(omObjData* arg0, someBits2* arg1);
|
||||
void fn_1_B350(omObjData* arg0);
|
||||
void fn_1_B0A4(s32 arg0);
|
||||
u32 fn_1_AF24(s32 arg0);
|
||||
s32 fn_1_AE4C(s32 arg0, s8* arg1);
|
||||
s32 fn_1_AE20(void);
|
||||
void fn_1_ACD8(s32 arg0);
|
||||
void fn_1_ABD0(omObjData* arg0, someBits* arg1);
|
||||
void fn_1_AB18(omObjData* arg0, someBits* arg1);
|
||||
void fn_1_A8AC(s32 arg0);
|
||||
void fn_1_A7A0(s32 arg0);
|
||||
void fn_1_A994(omObjData* arg0);
|
||||
void fn_1_A5E0(s32 arg0);
|
||||
void fn_1_A6B0(void);
|
||||
void fn_1_A44C(s32 arg0);
|
||||
void fn_1_9C8C(void);
|
||||
void fn_1_9B30(void);
|
||||
s32 fn_1_9CF4(s32 arg0);
|
||||
void fn_1_9F78(void);
|
||||
void fn_1_9FE4(void);
|
||||
|
||||
//DATA
|
||||
s16 lbl_1_data_4D8 = -1;
|
||||
s16 lbl_1_data_4DA = -1;
|
||||
s16 lbl_1_data_4DC = -1;
|
||||
s32 lbl_1_data_4E0 = -1;
|
||||
s16 lbl_1_data_4E4 = -1;
|
||||
s8 lbl_1_data_4E6[] = {1, 1, 3, 3, 2, 2, 2, 1, 2, 3, 0, 4, 5, 0};
|
||||
|
||||
char itemString[] = "item";
|
||||
char item1String[] = "item1";
|
||||
char item2String[] = "item2";
|
||||
|
||||
char* lbl_1_data_508[] = {
|
||||
itemString, item1String, item2String
|
||||
};
|
||||
|
||||
s32 lbl_1_data_514[] = {
|
||||
MAKE_DATA_NUM(7, 0x6D),
|
||||
MAKE_DATA_NUM(7, 0x6E),
|
||||
MAKE_DATA_NUM(7, 0x6F),
|
||||
MAKE_DATA_NUM(7, 0x70),
|
||||
MAKE_DATA_NUM(7, 0x71),
|
||||
MAKE_DATA_NUM(7, 0x72),
|
||||
MAKE_DATA_NUM(7, 0x73),
|
||||
MAKE_DATA_NUM(7, 0x74),
|
||||
MAKE_DATA_NUM(7, 0x76),
|
||||
MAKE_DATA_NUM(7, 0x77),
|
||||
MAKE_DATA_NUM(7, 0x78),
|
||||
MAKE_DATA_NUM(7, 0x79),
|
||||
MAKE_DATA_NUM(7, 0x7A),
|
||||
MAKE_DATA_NUM(7, 0x7B),
|
||||
};
|
||||
|
||||
//BSS
|
||||
s8 lbl_1_bss_194[3];
|
||||
AnimData* lbl_1_bss_190;
|
||||
s8 lbl_1_bss_18C;
|
||||
omObjData* lbl_1_bss_188;
|
||||
omObjData* lbl_1_bss_184;
|
||||
Process* lbl_1_bss_180;
|
||||
|
||||
void fn_1_9A7C(void) {
|
||||
fn_1_BBF8();
|
||||
}
|
||||
|
||||
void fn_1_9A9C(void) {
|
||||
|
||||
}
|
||||
|
||||
void fn_1_9AA0(void) {
|
||||
BoardDiceDigit2DShowSet(0);
|
||||
lbl_1_bss_180 = HuPrcChildCreate(fn_1_9C8C, 0x2003, 0x2000, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_180, fn_1_9B30);
|
||||
while (lbl_1_bss_180 != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardDiceDigit2DShowSet(1);
|
||||
}
|
||||
|
||||
void fn_1_9B30(void) {
|
||||
fn_1_BDAC();
|
||||
if (lbl_1_bss_188) {
|
||||
lbl_1_bss_188;
|
||||
}
|
||||
if (lbl_1_bss_184) {
|
||||
OM_GET_WORK_PTR(lbl_1_bss_184, someBits2)->unk00_bit0 = 1;
|
||||
}
|
||||
if (lbl_1_data_4E0 != -1) {
|
||||
HuAudFXStop(lbl_1_data_4E0);
|
||||
lbl_1_data_4E0 = -1;
|
||||
}
|
||||
if (lbl_1_data_4DC != -1) {
|
||||
BoardModelMotionKill(lbl_1_bss_C[11], lbl_1_data_4DC);
|
||||
lbl_1_data_4DC = -1;
|
||||
}
|
||||
if (lbl_1_data_4DA != -1) {
|
||||
BoardModelMotionKill(lbl_1_bss_C[11], lbl_1_data_4DA);
|
||||
lbl_1_data_4DA = -1;
|
||||
}
|
||||
if (lbl_1_data_4D8 != -1) {
|
||||
HuWinKill(lbl_1_data_4D8);
|
||||
lbl_1_data_4D8 = -1;
|
||||
}
|
||||
lbl_1_bss_180 = 0U;
|
||||
}
|
||||
|
||||
void fn_1_9C8C(void) {
|
||||
s32 temp_r31;
|
||||
|
||||
temp_r31 = GWSystem.player_curr;
|
||||
lbl_1_data_4E0 = -1;
|
||||
if (fn_1_9CF4(temp_r31) != 0) {
|
||||
fn_1_A44C(temp_r31);
|
||||
fn_1_A5E0(temp_r31);
|
||||
}
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
s32 fn_1_9CF4(s32 arg0) {
|
||||
Vec sp38;
|
||||
Vec sp2C;
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
s16 spaceCur;
|
||||
s16 temp_r29;
|
||||
|
||||
if (BoardPlayerItemCount(arg0) == 3) {
|
||||
BoardWinCreate(2, 0x16001E, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
return 0;
|
||||
}
|
||||
BoardWinCreateChoice(2, 0x16001A, 2, 0);
|
||||
if (GWPlayer[arg0].com != 0) {
|
||||
BoardComKeySetLeft();
|
||||
}
|
||||
BoardWinWait();
|
||||
if (BoardWinChoiceGet() != 0) {
|
||||
BoardWinCreate(2, 0x16001B, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
return 0;
|
||||
}
|
||||
BoardWinKill();
|
||||
sp14.x = 0.0f;
|
||||
sp14.y = 200.0f;
|
||||
sp14.z = 0.0f;
|
||||
sp8.x = -10.0f;
|
||||
sp8.y = 0.0f;
|
||||
sp8.z = 0.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_C[8], &sp8, &sp14, 1500.0f, -1.0f, 0x15);
|
||||
spaceCur = GWPlayer[arg0].space_curr;
|
||||
temp_r29 = BoardSpaceLinkFlagSearch(0, spaceCur, 0x02000000);
|
||||
BoardPlayerPosGet(arg0, &sp2C);
|
||||
BoardSpacePosGet(0, temp_r29, &sp38);
|
||||
PSVECSubtract(&sp38, &sp2C, &sp20);
|
||||
PSVECNormalize(&sp20, &sp20);
|
||||
BoardPlayerRotYSet(arg0, (f32) (180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793)));
|
||||
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14);
|
||||
while (GWPlayer[arg0].moving != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
HuPrcSleep(0x3C);
|
||||
fn_1_B0A4(arg0);
|
||||
fn_1_9F78();
|
||||
fn_1_9FE4();
|
||||
fn_1_A8AC(arg0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void fn_1_9F78(void) {
|
||||
lbl_1_data_4DA = BoardModelMotionCreate(lbl_1_bss_C[11], 0x770023);
|
||||
lbl_1_data_4DC = BoardModelMotionCreate(lbl_1_bss_C[11], 0x770024);
|
||||
}
|
||||
|
||||
void fn_1_9FE4(void) {
|
||||
Vec sp30;
|
||||
Vec sp24;
|
||||
Vec sp18;
|
||||
Vec spC;
|
||||
f32 sp8;
|
||||
f32 temp_f30;
|
||||
f32 var_f31;
|
||||
|
||||
BoardModelPosGet(lbl_1_bss_C[11], &sp24);
|
||||
sp18.x = (-3179.800048828125 + (200.0 * sin(0.0)));
|
||||
sp18.z = (-907.7000122070313 + 200.0 * cos(0.0));
|
||||
sp18.y = sp24.y;
|
||||
PSVECSubtract(&sp18, &sp24, &spC);
|
||||
temp_f30 = (atan2(spC.z, spC.x) / 3.141592653589793 * 180.0);
|
||||
sp8 = BoardModelRotYGet(lbl_1_bss_C[11]);
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DA, 0.0f, 10.0, 0x40000001);
|
||||
while (BoardDAngleCalcRange(&sp8, temp_f30, 10.0) == 0) {
|
||||
BoardModelRotYSet(lbl_1_bss_C[11], sp8);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelRotYSet(lbl_1_bss_C[11], temp_f30);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[11], 2.0f);
|
||||
spC.x /= 20.0f;
|
||||
spC.z /= 20.0f;
|
||||
spC.y = 0.0f;
|
||||
sp30 = sp24;
|
||||
var_f31 = 0.0f;
|
||||
while (var_f31 < 20.0f) {
|
||||
PSVECAdd(&sp30, &spC, &sp30);
|
||||
BoardModelPosSetV(lbl_1_bss_C[11], &sp30);
|
||||
HuPrcVSleep();
|
||||
var_f31 += 1.0f;
|
||||
}
|
||||
BoardAudSeqPause(0, 1, 0x3E8);
|
||||
HuAudFXPlay(0x450);
|
||||
HuAudFXPlay(0x362);
|
||||
BoardCameraQuakeSet(3, 100.0f);
|
||||
fn_1_B8E8(1);
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DC, 0.0f, 10.0, 0x40000005);
|
||||
PSVECSubtract(&sp24, &sp30, &spC);
|
||||
spC.x /= 60.0f;
|
||||
spC.z /= 60.0f;
|
||||
spC.y = 0.0f;
|
||||
var_f31 = 0.0f;
|
||||
while (var_f31 < 60.0f) {
|
||||
PSVECAdd(&sp30, &spC, &sp30);
|
||||
BoardModelPosSetV(lbl_1_bss_C[11], &sp30);
|
||||
HuPrcVSleep();
|
||||
var_f31 += 1.0f;
|
||||
}
|
||||
temp_f30 = 0.0f;
|
||||
sp8 = BoardModelRotYGet(lbl_1_bss_C[11]);
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DA, 0.0f, 10.0, 0x40000001);
|
||||
while (BoardDAngleCalcRange(&sp8, temp_f30, 10.0) == 0) {
|
||||
BoardModelRotYSet(lbl_1_bss_C[11], sp8);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[11], 1, 0.0f, 10.0, 0x40000001);
|
||||
}
|
||||
|
||||
void fn_1_A44C(s32 arg0) {
|
||||
s16 temp_r30;
|
||||
s32 temp_r29;
|
||||
s32 temp_r28;
|
||||
|
||||
BoardMusStart(1, 0x17, 0x7F, 0);
|
||||
temp_r30 = MGSeqCreate(3, 0U);
|
||||
while (MGSeqGetStat(temp_r30) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
fn_1_A7A0(arg0);
|
||||
fn_1_A6B0();
|
||||
fn_1_ACD8(1);
|
||||
while (fn_1_AE20() != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
temp_r29 = fn_1_BBC4() + 0x80000;
|
||||
BoardWinCreate(2, 0x16001C, 2);
|
||||
BoardWinInsertMesSet(temp_r29, 0);
|
||||
BoardWinWait();
|
||||
fn_1_B8E8(4);
|
||||
while (fn_1_BB48() != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
omVibrate(arg0, 0xC, 6, 6);
|
||||
BoardPlayerItemAdd(arg0, fn_1_BBC4());
|
||||
fn_1_ACD8(3);
|
||||
temp_r28 = HuAudSStreamPlay(2);
|
||||
while (HuAudSStreamStatGet(temp_r28) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardAudSeqPause(0, 0, 0x3E8);
|
||||
while (lbl_1_bss_188) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
HuPrcSleep(0x1E);
|
||||
BoardWinCreate(2, 0x16001D, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
}
|
||||
|
||||
void fn_1_A5E0(s32 arg0) {
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
s16 spaceCur;
|
||||
|
||||
spaceCur = GWPlayer[arg0].space_curr;
|
||||
BoardPlayerPosGet(arg0, &sp14);
|
||||
BoardSpacePosGet(0, spaceCur, &sp8);
|
||||
BoardCameraTargetPlayerSet(arg0);
|
||||
BoardCameraViewSet(1);
|
||||
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14);
|
||||
while (GWPlayer[arg0].moving != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelRotYSet(lbl_1_bss_C[11], 0.0f);
|
||||
BoardCameraMotionWait();
|
||||
}
|
||||
|
||||
void fn_1_A6B0(void) {
|
||||
f32 sp8[2];
|
||||
f32 val1, val2;
|
||||
|
||||
HuWinMesMaxSizeGet(1, sp8, 0x16001F);
|
||||
val1 = -10000.0f;
|
||||
val2 = 392.0f;
|
||||
lbl_1_data_4D8 = HuWinCreate(val1, val2, sp8[0], sp8[1], 0);
|
||||
HuWinBGTPLvlSet(lbl_1_data_4D8, 0.0f);
|
||||
HuWinMesSpeedSet(lbl_1_data_4D8, 0);
|
||||
HuWinMesSet(lbl_1_data_4D8, 0x16001FU);
|
||||
}
|
||||
|
||||
void fn_1_A7A0(s32 arg0) {
|
||||
someBits* temp_r31;
|
||||
omObjData* temp_r3;
|
||||
|
||||
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, (void*)fn_1_A994);
|
||||
lbl_1_bss_188 = temp_r3;
|
||||
temp_r31 = (someBits*)&temp_r3->work[0];
|
||||
temp_r31->unk00_bit0 = 0;
|
||||
temp_r31->unk00_bit6 = 0;
|
||||
temp_r31->unk00_bit4 = arg0;
|
||||
temp_r31->unk00_bit1 = 0;
|
||||
temp_r31->unk1 = 5U;
|
||||
temp_r31->unk2 = 0x3C;
|
||||
temp_r31->unk4 = MGSeqCreate(1, temp_r31->unk1, 0x120, 0x40);
|
||||
fn_1_BB74(lbl_1_bss_194);
|
||||
lbl_1_bss_18C = fn_1_AE4C(arg0, lbl_1_bss_194);
|
||||
}
|
||||
|
||||
void fn_1_A8AC(s32 arg0) {
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
f32 playerYRot;
|
||||
|
||||
BoardModelPosGet(lbl_1_bss_C[9], &sp8);
|
||||
BoardPlayerPosGet(arg0, &sp14);
|
||||
sp8.y = sp14.y;
|
||||
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14);
|
||||
while (GWPlayer[arg0].moving != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
playerYRot = BoardPlayerRotYGet(arg0) + 180.0f;
|
||||
BoardPlayerMotBlendSet(arg0, playerYRot, 0xF);
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_A994(omObjData* arg0) {
|
||||
s32 temp_r0;
|
||||
someBits* temp_r31;
|
||||
|
||||
temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
|
||||
if ((temp_r31->unk00_bit0 != 0)|| (BoardIsKill() != 0)) {
|
||||
if (temp_r31->unk4 != -1) {
|
||||
MGSeqSetParam(temp_r31->unk4, 2, -1U);
|
||||
temp_r31->unk4 = -1;
|
||||
}
|
||||
lbl_1_bss_188 = NULL;
|
||||
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
if (temp_r31->unk00_bit6 == 0) {
|
||||
if (temp_r31->unk2 != 0) {
|
||||
temp_r31->unk2--;
|
||||
} else {
|
||||
if (temp_r31->unk1 != 0) {
|
||||
temp_r31->unk1--;
|
||||
} else {
|
||||
fn_1_ACD8(2);
|
||||
}
|
||||
MGSeqSetParam(temp_r31->unk4, 1, temp_r31->unk1);
|
||||
temp_r31->unk2 = 0x3CU;
|
||||
}
|
||||
}
|
||||
switch (temp_r31->unk00_bit1) {
|
||||
case 1:
|
||||
fn_1_AB18(arg0, temp_r31);
|
||||
return;
|
||||
case 2:
|
||||
fn_1_ABD0(arg0, temp_r31);
|
||||
return;
|
||||
case 3:
|
||||
if (BoardPlayerMotionEndCheck(temp_r31->unk00_bit4) != 0) {
|
||||
temp_r31->unk00_bit0 = 1;
|
||||
}
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_AB18(omObjData* arg0, someBits* arg1) {
|
||||
u32 var_r31 = 0;
|
||||
|
||||
if (GWPlayer[arg1->unk00_bit4].com != 0) {
|
||||
var_r31 = fn_1_AF24(arg1->unk00_bit4);
|
||||
} else {
|
||||
var_r31 = HuPadBtnDown[GWPlayer[arg1->unk00_bit4].port];
|
||||
}
|
||||
if (var_r31 == 0x100) {
|
||||
fn_1_ACD8(2);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO properly use inlines
|
||||
void fn_1_ABD0(omObjData* arg0, someBits* arg1) {
|
||||
s16 boardModelID;
|
||||
PlayerState* playerStateCopy;
|
||||
s32 bit;
|
||||
PlayerState* playerState;
|
||||
s16 temp, temp2;
|
||||
|
||||
bit = arg1->unk00_bit4;
|
||||
playerState = &GWPlayer[bit];
|
||||
playerStateCopy = playerState;
|
||||
temp = boardPlayerMdl[playerStateCopy->player_idx];
|
||||
temp2 = temp;
|
||||
boardModelID = BoardModelIDGet(temp2);
|
||||
|
||||
if (Hu3DMotionShiftIDGet(boardModelID) == -1) {
|
||||
if (!(arg1->unk00_bit7)) {
|
||||
if (BoardPlayerMotionTimeGet(arg1->unk00_bit4) >= 27.0f) {
|
||||
arg1->unk00_bit7 = 1;
|
||||
BoardAudSeqFadeOut(1, 0x64);
|
||||
fn_1_B8E8(2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (BoardPlayerMotionEndCheck(arg1->unk00_bit4)) {
|
||||
fn_1_ACD8(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_ACD8(s32 arg0) {
|
||||
someBits* temp_r31;
|
||||
|
||||
temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
|
||||
temp_r31->unk00_bit1 = arg0;
|
||||
switch (arg0) {
|
||||
case 0:
|
||||
BoardRotateDiceNumbers(temp_r31->unk00_bit4);
|
||||
return;
|
||||
case 2:
|
||||
temp_r31->unk00_bit6 = 1;
|
||||
if (lbl_1_data_4D8 != -1) {
|
||||
HuWinKill(lbl_1_data_4D8);
|
||||
lbl_1_data_4D8 = -1;
|
||||
}
|
||||
if (temp_r31->unk4 != -1) {
|
||||
MGSeqSetParam(temp_r31->unk4, 2, -1U);
|
||||
temp_r31->unk4 = -1;
|
||||
}
|
||||
BoardPlayerMotionShiftSet(temp_r31->unk00_bit4, 0xB, 0.0f, 10.0f, 0);
|
||||
return;
|
||||
case 3:
|
||||
BoardPlayerMotionShiftSet(temp_r31->unk00_bit4, 7, 0.0f, 10.0f, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
s32 fn_1_AE20(void) {
|
||||
someBits* temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
|
||||
return temp_r31->unk00_bit1;
|
||||
}
|
||||
|
||||
s32 fn_1_AE4C(s32 arg0, s8* arg1) {
|
||||
s32 temp_r30;
|
||||
s32 temp_r29;
|
||||
s32 temp_r28;
|
||||
s32 var_r31;
|
||||
|
||||
temp_r29 = lbl_1_data_4E6[arg1[0]];
|
||||
temp_r28 = lbl_1_data_4E6[arg1[1]];
|
||||
temp_r30 = lbl_1_data_4E6[arg1[2]];
|
||||
if (temp_r29 > temp_r28) {
|
||||
if (temp_r29 > temp_r30) {
|
||||
var_r31 = 0;
|
||||
} else if (temp_r30 > temp_r28) {
|
||||
var_r31 = 2;
|
||||
} else {
|
||||
var_r31 = 1;
|
||||
}
|
||||
} else if (temp_r28 > temp_r30) {
|
||||
var_r31 = 1;
|
||||
} else if (temp_r30 > temp_r29) {
|
||||
var_r31 = 2;
|
||||
} else {
|
||||
var_r31 = 0;
|
||||
}
|
||||
return var_r31;
|
||||
}
|
||||
|
||||
u32 fn_1_AF24(s32 arg0) {
|
||||
s32 spC;
|
||||
s32 sp8;
|
||||
s16 temp_r31;
|
||||
s16 var_r30;
|
||||
s8 temp_r0_2;
|
||||
|
||||
spC = 0;
|
||||
switch (GWPlayer[arg0].diff) {
|
||||
case 3:
|
||||
var_r30 = 0;
|
||||
break;
|
||||
case 2:
|
||||
var_r30 = 5;
|
||||
break;
|
||||
case 1:
|
||||
var_r30 = 15;
|
||||
break;
|
||||
case 0:
|
||||
var_r30 = 40;
|
||||
break;
|
||||
}
|
||||
if ((var_r30 != 0) && (BoardRandMod(100) < var_r30)) {
|
||||
return 0x100U;
|
||||
}
|
||||
|
||||
temp_r31 = BoardModelMotionTimeGet(lbl_1_bss_C[9]);
|
||||
|
||||
switch (lbl_1_bss_18C) {
|
||||
case 0:
|
||||
if ((temp_r31 < 33) || (temp_r31 > 35)) {
|
||||
break;
|
||||
}
|
||||
return 0x100U;
|
||||
case 1:
|
||||
if (((temp_r31 >= 40) && (temp_r31 <= 42)) || ((temp_r31 >= 20) && (temp_r31 <= 22))) {
|
||||
return 0x100U;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (temp_r31 >= 50) {
|
||||
return 0x100U;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fn_1_B0A4(s32 arg0) {
|
||||
Mtx sp18;
|
||||
s32 spC[3];
|
||||
s32 j;
|
||||
s32 i;
|
||||
s32 var_r31_2;
|
||||
s32 temp_r29;
|
||||
someBits2* temp_r30;
|
||||
omObjData* temp_r3;
|
||||
|
||||
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, (void*)fn_1_B350);
|
||||
lbl_1_bss_184 = (void*)temp_r3;
|
||||
temp_r30 = (someBits2*)&temp_r3->work[0];
|
||||
|
||||
temp_r30->unk00_bit0 = 0;
|
||||
temp_r30->unk00_bit1 = 0;
|
||||
temp_r30->unk00_bit4 = arg0;
|
||||
|
||||
for (i = 0; i < 3;) {
|
||||
spC[i] = BoardRandMod(14);
|
||||
if ((spC[i] != 10) && (spC[i] != 13)) {
|
||||
for (j = 0; j < i; j++) {
|
||||
if (spC[i] == spC[j]) {
|
||||
spC[i] = -1;
|
||||
}
|
||||
}
|
||||
if (spC[i] == -1) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
fn_1_BBF8();
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
temp_r29 = spC[i];
|
||||
temp_r30->unk3[i] = temp_r29;
|
||||
temp_r30->unk_06[i] = BoardModelCreate(lbl_1_data_514[temp_r29], NULL, 0);
|
||||
BoardModelHookSet(lbl_1_bss_C[9], lbl_1_data_508[i], temp_r30->unk_06[i]);
|
||||
BoardModelMotionSpeedSet(temp_r30->unk_06[i], 0.0f);
|
||||
if (temp_r29 == 0xB) {
|
||||
BoardModelMotionStart(temp_r30->unk_06[i], 0, 0x40000001);
|
||||
}
|
||||
if (temp_r29 == 5) {
|
||||
PSMTXTrans(sp18, 0.0f, -50.0f, 0.0f);
|
||||
BoardModelMtxSet(temp_r30->unk_06[i], &sp18);
|
||||
}
|
||||
if ((temp_r29 == 6) || (temp_r29 == 7)) {
|
||||
PSMTXTrans(sp18, 0.0f, 0.0f, 8.0f);
|
||||
BoardModelMtxSet(temp_r30->unk_06[i], &sp18);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_B350(omObjData* arg0) {
|
||||
s32 i;
|
||||
someBits2* temp_r31;
|
||||
|
||||
temp_r31 = (someBits2*)&arg0->work[0];
|
||||
if ((temp_r31->unk00_bit0 != 0) || (BoardIsKill() != 0)) {
|
||||
BoardModelHookReset(lbl_1_bss_C[9]);
|
||||
for (i = 0; i < 3; i++) {
|
||||
BoardModelKill(temp_r31->unk_06[i]);
|
||||
}
|
||||
fn_1_BBF8();
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
lbl_1_bss_184 = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (temp_r31->unk00_bit1) {
|
||||
case 1:
|
||||
if (!(BoardModelMotionTimeGet(lbl_1_bss_C[9]) < 20.0f)) {
|
||||
BoardModelMotionStartEndSet(lbl_1_bss_C[9], 0x14, 0x3A);
|
||||
fn_1_B8E8(0);
|
||||
return;
|
||||
}
|
||||
case 0:
|
||||
break;
|
||||
case 2:
|
||||
fn_1_B4AC(arg0, temp_r31);
|
||||
return;
|
||||
case 3:
|
||||
fn_1_B688(arg0, temp_r31);
|
||||
return;
|
||||
case 4:
|
||||
fn_1_B748(arg0, temp_r31);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_B4AC(omObjData* arg0, someBits2* arg1) {
|
||||
Point3d sp20;
|
||||
Point3d sp14;
|
||||
Point3d sp8;
|
||||
f32 temp_f31;
|
||||
s8 temp_r0;
|
||||
s32 i;
|
||||
|
||||
arg1->unk2 = -1;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[9]), lbl_1_data_508[i], &sp20);
|
||||
BoardPlayerPosGet(arg1->unk00_bit4, &sp14);
|
||||
sp14.y += 66.0f;
|
||||
if (BoardVecMinDistCheck(&sp20, &sp14, 100.0f) != 0) {
|
||||
sp8 = sp20;
|
||||
arg1->unk2 = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HuAudFXPlay(0x30C);
|
||||
BoardModelHookObjReset(lbl_1_bss_C[9], lbl_1_data_508[arg1->unk2]);
|
||||
temp_f31 = BoardModelMotionTimeGet(lbl_1_bss_C[9]);
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[9], 0, 15.0f, 10.0f, 0x40000004U);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[9], 0.5f);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_C[9], temp_f31);
|
||||
BoardModelPosSetV(arg1->unk_06[arg1->unk2], &sp8);
|
||||
fn_1_B8E8(3);
|
||||
fn_1_BC7C(arg1->unk_06[arg1->unk2]);
|
||||
}
|
||||
|
||||
void fn_1_B688(omObjData* arg0, someBits2* arg1) {
|
||||
Point3d sp8;
|
||||
|
||||
if (arg1->unk1-- != 0) {
|
||||
BoardModelPosGet(arg1->unk_06[arg1->unk2], &sp8);
|
||||
sp8.x = sp8.x + arg0->trans.x;
|
||||
sp8.y += arg0->trans.y;
|
||||
sp8.z = sp8.z + arg0->trans.z;
|
||||
BoardModelPosSetV(arg1->unk_06[arg1->unk2], &sp8);
|
||||
return;
|
||||
}
|
||||
|
||||
fn_1_B8E8(0);
|
||||
}
|
||||
|
||||
void fn_1_B748(omObjData* arg0, someBits2* arg1) {
|
||||
Vec sp14;
|
||||
Point3d sp8;
|
||||
f32 temp_f0;
|
||||
s16 temp_r29;
|
||||
|
||||
temp_r29 = arg1->unk_06[arg1->unk2];
|
||||
|
||||
if (arg1->unk1 == 0) {
|
||||
HuAudFXPlay(781);
|
||||
}
|
||||
|
||||
if (arg1->unk1 < 90) {
|
||||
f32 temp;
|
||||
temp_f0 = __OSu8tof32((u8*)&arg1->unk1);
|
||||
BoardModelPosGet(temp_r29, &sp8);
|
||||
sp8.y += arg0->trans.y;
|
||||
BoardModelPosSetV(temp_r29, &sp8);
|
||||
BoardModelRotYSet(temp_r29, 8.0f + BoardModelRotYGet(temp_r29));
|
||||
BoardModelScaleGet(temp_r29, &sp14);
|
||||
sp14.x = sp14.y = sp14.z = cos(3.141592653589793 * temp_f0 / 180.0);
|
||||
BoardModelScaleSetV(temp_r29, &sp14);
|
||||
arg1->unk1 += 4;
|
||||
return;
|
||||
}
|
||||
|
||||
if (lbl_1_data_4E0 != -1) {
|
||||
HuAudFXStop(lbl_1_data_4E0);
|
||||
lbl_1_data_4E0 = -1;
|
||||
}
|
||||
|
||||
fn_1_B8E8(0);
|
||||
}
|
||||
|
||||
void fn_1_B8E8(s32 arg0) {
|
||||
Point3d sp14;
|
||||
Point3d sp8;
|
||||
f32 temp_f31;
|
||||
someBits2* temp_r31;
|
||||
f32 temp;
|
||||
|
||||
temp_r31 = (someBits2*)&lbl_1_bss_184->work[0];
|
||||
temp_r31->unk00_bit1 = arg0;
|
||||
switch (arg0) {
|
||||
case 1:
|
||||
temp_f31 = 0.31666666f;
|
||||
BoardModelMotionStart(lbl_1_bss_C[9], 0, 0x40000001);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[9], temp_f31);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_C[9], 8.0f);
|
||||
return;
|
||||
case 2:
|
||||
temp_r31->unk00_bit6 = 1;
|
||||
return;
|
||||
case 3:
|
||||
lbl_1_data_4E0 = HuAudFXPlay(0x35F);
|
||||
BoardModelPosGet(temp_r31->unk_06[temp_r31->unk2], &sp8);
|
||||
BoardPlayerPosGet(temp_r31->unk00_bit4, &sp14);
|
||||
temp = 50.0f + sp8.y;
|
||||
lbl_1_bss_184->trans.x = (sp14.x - sp8.x) / 10.0f;
|
||||
lbl_1_bss_184->trans.z = (sp14.z - sp8.z) / 10.0f;
|
||||
lbl_1_bss_184->trans.y = (temp - sp8.y) / 10.0f;
|
||||
temp_r31->unk1 = 10;
|
||||
return;
|
||||
case 4:
|
||||
BoardPlayerPosGet(temp_r31->unk00_bit4, &sp14);
|
||||
sp14.y += 30.000002f;
|
||||
BoardModelPosGet(temp_r31->unk_06[temp_r31->unk2], &sp8);
|
||||
lbl_1_bss_184->trans.y = (sp14.y - sp8.y) / 22.0f;
|
||||
temp_r31->unk1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
s32 fn_1_BB48(void) {
|
||||
someBits2* temp = (someBits2*)&lbl_1_bss_184->work[0];
|
||||
return temp->unk00_bit1;
|
||||
}
|
||||
|
||||
void fn_1_BB74(s8* arg0) {
|
||||
someBits2* bits = OM_GET_WORK_PTR(lbl_1_bss_184, someBits2);
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
arg0[i] = bits->unk3[i];
|
||||
}
|
||||
}
|
||||
|
||||
s32 fn_1_BBC4(void) {
|
||||
someBits2* bits = OM_GET_WORK_PTR(lbl_1_bss_184, someBits2);
|
||||
return bits->unk3[bits->unk2];
|
||||
}
|
||||
|
||||
void fn_1_BBF8(void) {
|
||||
BoardModelMotionStart(lbl_1_bss_C[9], 0, 0);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[9], 0.0f);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_C[9], 0.0f);
|
||||
BoardModelAttrReset(lbl_1_bss_C[9], 0x40000004);
|
||||
}
|
||||
|
||||
|
||||
void fn_1_BC7C(s16 arg0) {
|
||||
ParticleData* particle;
|
||||
|
||||
lbl_1_bss_190 = HuSprAnimRead(HuDataSelHeapReadNum(0x120000, 0x10000000, 2));
|
||||
HuSprAnimLock(lbl_1_bss_190);
|
||||
lbl_1_data_4E4 = Hu3DParticleCreate(lbl_1_bss_190, 100);
|
||||
Hu3DParticleHookSet(lbl_1_data_4E4, fn_1_BE30);
|
||||
Hu3DParticleColSet(lbl_1_data_4E4, 0xFF, 0xFF, 0);
|
||||
Hu3DModelPosSet(lbl_1_data_4E4, 0.0f, 0.0f, 0.0f);
|
||||
Hu3DParticleBlendModeSet(lbl_1_data_4E4, 1);
|
||||
Hu3DModelLayerSet(lbl_1_data_4E4, 2);
|
||||
particle = Hu3DData[lbl_1_data_4E4].unk_120;
|
||||
particle->unk_02 = arg0;
|
||||
}
|
||||
|
||||
void fn_1_BDAC(void) {
|
||||
if (lbl_1_data_4E4 != -1) {
|
||||
Hu3DModelKill(lbl_1_data_4E4);
|
||||
lbl_1_data_4E4 = -1;
|
||||
}
|
||||
if (lbl_1_bss_190) {
|
||||
HuSprAnimKill(lbl_1_bss_190);
|
||||
lbl_1_bss_190 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_BE30(s32 arg0, ParticleData* arg1) {
|
||||
Point3d sp8;
|
||||
|
||||
f32 temp_f30;
|
||||
f32 temp_f29;
|
||||
f32 temp_f31;
|
||||
HsfanimStruct01* var_r31;
|
||||
s32 i, j;
|
||||
|
||||
if (arg1->unk_34 == 0U) {
|
||||
var_r31 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
var_r31->unk40.a = 0;
|
||||
var_r31->unk2C = 0.0f;
|
||||
}
|
||||
arg1->unk_00 = 0;
|
||||
}
|
||||
|
||||
BoardModelScaleGet(arg1->unk_02, &sp8);
|
||||
temp_f31 = sp8.x;
|
||||
BoardModelPosGet(arg1->unk_02, &sp8);
|
||||
|
||||
for (i = 0; i < 0x16; i++) {
|
||||
var_r31 = arg1->unk_48;
|
||||
for (j = 0; j < arg1->unk_30; j++, var_r31++) {
|
||||
if (0.0f == var_r31->unk2C) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j != arg1->unk_30) {
|
||||
temp_f30 = 360.0f * (0.003921569f * (frand() & 0xFF));
|
||||
temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (frand() & 0xFF))));
|
||||
var_r31->unk34.x = (sp8.x + (temp_f29 * sin((3.141592653589793 * temp_f30) / 180.0)));
|
||||
var_r31->unk34.z = (sp8.z + (temp_f29 * cos((3.141592653589793 * temp_f30) / 180.0)));
|
||||
var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * (0.003921569f * (frand() & 0xFF))))));
|
||||
var_r31->unk08.x = (0.5f + (3.0f * (0.003921569f * (frand() & 0xFF))));
|
||||
var_r31->unk08.y = (0.3f + (2.0f * (0.003921569f * (frand() & 0xFF))));
|
||||
var_r31->unk40.a = 180;
|
||||
var_r31->unk2C = (15.0f * temp_f31);
|
||||
}
|
||||
}
|
||||
var_r31 = arg1->unk_48;
|
||||
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
if (0.0f != var_r31->unk2C) {
|
||||
var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x);
|
||||
var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y);
|
||||
if (var_r31->unk2C <= 0.0f) {
|
||||
var_r31->unk2C = 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
477
src/REL/w03Dll/river.c
Normal file
477
src/REL/w03Dll/river.c
Normal file
|
|
@ -0,0 +1,477 @@
|
|||
#include "dolphin.h"
|
||||
#include "game/object.h"
|
||||
#include "REL/w03Dll.h"
|
||||
#include "board_unsplit.h"
|
||||
#include "game/board/main.h"
|
||||
|
||||
double sin(double x);
|
||||
double cos(double x);
|
||||
double atan2(double y, double x);
|
||||
s16 BoardModelIDGet(s16 model);
|
||||
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
|
||||
void BoardPlayerMotBlendSet(s32, s32, s32);
|
||||
float BoardModelMotionTimeGet(s16 model);
|
||||
s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr);
|
||||
void BoardPlayerPosSet(s32, f32, f32, f32);
|
||||
s32 BoardModelHookSet(s16 model, char *name, s16 hook);
|
||||
void BoardPlayerMotionShiftSet(s32, s32, f32, f32, s32);
|
||||
|
||||
|
||||
#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0])))
|
||||
|
||||
extern s16 lbl_1_bss_C[14];
|
||||
extern s16 boardPlayerMdl[4];
|
||||
|
||||
char lbl_1_bss_130[8];
|
||||
omObjData* lbl_1_bss_12C;
|
||||
s16 lbl_1_bss_128;
|
||||
s32 lbl_1_bss_124;
|
||||
Process* lbl_1_bss_120;
|
||||
|
||||
//function signatures
|
||||
void fn_1_67F8(void);
|
||||
void fn_1_6884(void);
|
||||
void fn_1_767C(omObjData* arg0);
|
||||
s32 fn_1_6898(s32 arg0);
|
||||
void fn_1_6B98(s32 arg0);
|
||||
void fn_1_6F9C(s32 arg0);
|
||||
void fn_1_767C(omObjData* arg0);
|
||||
void fn_1_735C(s32 arg0);
|
||||
void fn_1_77E4(s32 arg0);
|
||||
|
||||
typedef struct unkWorkStruct {
|
||||
struct {
|
||||
u8 temp1 : 1;
|
||||
};
|
||||
s8 unk_01[3];
|
||||
f32 unk_04;
|
||||
} unkWorkStruct;
|
||||
|
||||
//DATA
|
||||
s32 lbl_1_data_368[] = {
|
||||
0x00000105, 0x00000145, 0x00000185,
|
||||
0x000001C5, 0x00000205, 0x00000245,
|
||||
0x00000285, 0x000002C5
|
||||
};
|
||||
|
||||
s16 lbl_1_data_388 = -1;
|
||||
s16 lbl_1_data_38A = -1;
|
||||
s16 lbl_1_data_38C = -1;
|
||||
s32 lbl_1_data_390[] = {
|
||||
0x00770026,
|
||||
0x00770027,
|
||||
0x00770028,
|
||||
-1
|
||||
};
|
||||
|
||||
char itemhook_RString[] = "itemhook_R";
|
||||
char hei01String[] = "hei01";
|
||||
char ikadaString[] = "ikada";
|
||||
|
||||
typedef struct unkPos {
|
||||
s32 x;
|
||||
s32 y;
|
||||
s32 z;
|
||||
} unkPos;
|
||||
|
||||
unkPos lbl_1_data_3B8[6] = {
|
||||
{5, 20, 5},
|
||||
{21, 35, 7},
|
||||
{31, 50, 10},
|
||||
{51, 80, 15},
|
||||
{81, 100, 17},
|
||||
{101, 999, 20},
|
||||
};
|
||||
|
||||
void fn_1_63F4(s32 arg0) {
|
||||
Vec spC;
|
||||
unkWorkStruct* work = OM_GET_WORK_PTR(lbl_1_bss_12C, unkWorkStruct);
|
||||
|
||||
work->unk_04 = 0.0f;
|
||||
BoardModelPosGet(lbl_1_data_388, &spC);
|
||||
if (arg0 != 0) {
|
||||
spC.y = -185.0f;
|
||||
} else {
|
||||
spC.y = 10.0f;
|
||||
}
|
||||
BoardModelPosSetV(lbl_1_data_388, &spC);
|
||||
}
|
||||
|
||||
void fn_1_6494(void) {
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
unkWorkStruct* temp_r31;
|
||||
|
||||
lbl_1_data_388 = BoardModelCreate(0x77000E, NULL, 0);
|
||||
lbl_1_data_38C = BoardModelCreate(0x77000F, NULL, 0);
|
||||
lbl_1_data_38A = BoardModelCreate(0x2000D, &lbl_1_data_390[0], 0);
|
||||
BoardModelMotionStart(lbl_1_data_38A, 1, 0x40000001);
|
||||
BoardModelHookSet(lbl_1_data_38A, itemhook_RString, lbl_1_data_38C);
|
||||
BoardModelHookSet(lbl_1_data_388, hei01String, lbl_1_data_38A);
|
||||
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), ikadaString, &sp14);
|
||||
BoardSpaceFlagPosGet(0, 0x200, &sp8);
|
||||
sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966));
|
||||
sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966));
|
||||
BoardModelPosSetV(lbl_1_data_388, &sp14);
|
||||
lbl_1_bss_12C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, (void*)fn_1_767C);
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_12C, unkWorkStruct);
|
||||
temp_r31->temp1 = 0;
|
||||
temp_r31->unk_04 = 0.0f;
|
||||
lbl_1_bss_124 = 0;
|
||||
}
|
||||
|
||||
s32 fn_1_6698(void) {
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), ikadaString, &sp14);
|
||||
BoardSpaceFlagPosGet(0, 0x200, &sp8);
|
||||
sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966));
|
||||
sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966));
|
||||
BoardModelPosSetV(lbl_1_data_388, (Point3d* ) &sp14);
|
||||
return 1;
|
||||
}
|
||||
|
||||
s16 fn_1_675C(void) {
|
||||
BoardDiceDigit2DShowSet(0);
|
||||
lbl_1_bss_120 = HuPrcChildCreate(fn_1_67F8, 0x2003, 0x2000, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_120, fn_1_6884);
|
||||
while ((u32) lbl_1_bss_120 != 0U) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardDiceDigit2DShowSet(1);
|
||||
return lbl_1_bss_128;
|
||||
}
|
||||
|
||||
void fn_1_67F8(void) {
|
||||
s32 temp_r31;
|
||||
|
||||
temp_r31 = GWSystem.player_curr;
|
||||
lbl_1_bss_128 = 0;
|
||||
if (fn_1_6898(temp_r31) != 0) {
|
||||
fn_1_6F9C(temp_r31);
|
||||
fn_1_6B98(temp_r31);
|
||||
fn_1_735C(temp_r31);
|
||||
lbl_1_bss_128 = 1;
|
||||
}
|
||||
BoardCameraViewSet(1);
|
||||
BoardCameraMotionWait();
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
void fn_1_6884(void) {
|
||||
lbl_1_bss_120 = 0;
|
||||
}
|
||||
|
||||
s32 fn_1_6898(s32 arg0) {
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
f32 temp_f31;
|
||||
s32 var_r27;
|
||||
s32 temp_r3;
|
||||
s32 i, j;
|
||||
s32 temp, temp2;
|
||||
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
BoardCameraViewSet(2);
|
||||
BoardCameraMotionWait();
|
||||
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), hei01String, &sp20);
|
||||
BoardPlayerPosGet(arg0, &sp14);
|
||||
PSVECSubtract(&sp20, &sp14, &sp8);
|
||||
temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / 3.141592653589793);
|
||||
BoardCameraTargetModelSet(lbl_1_data_388);
|
||||
BoardPlayerMotBlendSet(arg0, temp_f31, 0xF);
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardCameraTargetModelSet(-1);
|
||||
BoardWinCreate(2, 0x160009, 2);
|
||||
BoardWinWait();
|
||||
temp_r3 = BoardPlayerCoinsGet(arg0);
|
||||
if (temp_r3 < 5) {
|
||||
BoardWinCreate(2, 0x16000A, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (var_r27 = i = 0; i < 6; i++) {
|
||||
temp = lbl_1_data_3B8[i].x;
|
||||
temp2 = lbl_1_data_3B8[i].y;
|
||||
if (temp_r3 >= temp) {
|
||||
if (temp_r3 <= temp2) {
|
||||
var_r27 = lbl_1_data_3B8[i].z;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
sprintf(lbl_1_bss_130, "%d", var_r27);
|
||||
j = 0;
|
||||
while (j == 0) {
|
||||
BoardWinCreateChoice(2, 0x16000B, 2, 0);
|
||||
BoardWinInsertMesSet(lbl_1_bss_130, 2);
|
||||
BoardWinAttrSet(0x10);
|
||||
if (GWPlayer[arg0].com != 0) {
|
||||
fn_1_77E4(arg0);
|
||||
}
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
switch (BoardWinChoiceGet()) {
|
||||
case 0:
|
||||
j = 1;
|
||||
break;
|
||||
case 1:
|
||||
case -1:
|
||||
BoardWinCreate(2, 0x16000E, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
return 0;
|
||||
default:
|
||||
BoardViewMapExec(arg0);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < var_r27; i++) {
|
||||
BoardPlayerCoinsAdd(arg0, -1);
|
||||
HuAudFXPlay(0xE);
|
||||
HuPrcSleep(6);
|
||||
}
|
||||
HuAudFXPlay(0xF);
|
||||
BoardWinCreate(2, 0x0016000C, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
return 1;
|
||||
}
|
||||
|
||||
float BoardModelRotYGet(s16 model);
|
||||
s32 BoardDAngleCalcRange(float *value, float min, float range);
|
||||
float BoardModelRotYGet(s16 model);
|
||||
|
||||
void fn_1_6B98(s32 arg0) {
|
||||
Vec sp30;
|
||||
Point3d sp24;
|
||||
Vec sp18;
|
||||
Point3d spC;
|
||||
f32 sp8;
|
||||
f32 temp_f1;
|
||||
f32 temp_f31;
|
||||
s16 var_r31;
|
||||
s16 i;
|
||||
|
||||
BoardModelMotionShiftSet(lbl_1_data_38A, 2, 0.0f, 10.0f, 0);
|
||||
sp8 = BoardModelRotYGet(lbl_1_data_38A);
|
||||
temp_f31 = sp8 + 180.0f;
|
||||
while (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) == 0) {
|
||||
BoardModelRotYSet(lbl_1_data_38A, sp8);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
while (BoardModelMotionEndCheck(lbl_1_data_38A) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelPosGet(lbl_1_data_388, &sp24);
|
||||
BoardSpaceFlagPosGet(0, 0x100, &sp30);
|
||||
sp18.x = sp30.x + (400.0 * sin(1.5707963267948966));
|
||||
sp18.z = sp30.z + (400.0 * cos(1.5707963267948966));
|
||||
sp18.y = sp24.y;
|
||||
PSVECSubtract(&sp18, &sp24, &spC);
|
||||
spC.x = spC.x / 120.0f;
|
||||
spC.y /= 120.0f;
|
||||
spC.z = spC.z / 120.0f;
|
||||
BoardCameraTargetModelSet(lbl_1_data_388);
|
||||
BoardModelMotionShiftSet(lbl_1_data_38A, 3, 0.0f, 4.0f, 0x40000001U);
|
||||
HuPrcSleep(4);
|
||||
var_r31 = 0;
|
||||
for (i = 0; i < 0x78U; i++) {
|
||||
PSVECAdd(&spC, &sp24, &sp24);
|
||||
temp_f1 = BoardModelMotionTimeGet(lbl_1_data_38A);
|
||||
if ((temp_f1 >= 5.0f) && (temp_f1 < 15.0f) && ((s16) var_r31 == 0)) {
|
||||
HuAudFXPlay(0x451);
|
||||
var_r31 = 1;
|
||||
}
|
||||
if ((BoardModelMotionTimeGet(lbl_1_data_38A) >= 21.0f) && ((s16) var_r31 != 0)) {
|
||||
var_r31 = 0;
|
||||
}
|
||||
BoardModelPosSetV(lbl_1_data_388, &sp24);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardModelPosSetV(lbl_1_data_388, &sp18);
|
||||
BoardCameraTargetModelSet(-1);
|
||||
BoardModelMotionShiftSet(lbl_1_data_38A, 2, 0.0f, 10.0f, 0x40000004U);
|
||||
sp8 = BoardModelRotYGet(lbl_1_data_38A);
|
||||
temp_f31 = 0.0f;
|
||||
while (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) == 0) {
|
||||
BoardModelRotYSet(lbl_1_data_38A, sp8);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
while (BoardModelMotionEndCheck(lbl_1_data_38A) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelMotionShiftSet(lbl_1_data_38A, 1, 0.0f, 10.0f, 0x40000001U);
|
||||
}
|
||||
|
||||
extern s32 lbl_1_data_368[];
|
||||
extern w03State* lbl_1_bss_0;
|
||||
|
||||
static inline PlayerState *BoardPlayerGet(s32 player) {
|
||||
return &GWPlayer[player];
|
||||
}
|
||||
|
||||
static inline s16 BoardPlayerModelGet(s32 player) {
|
||||
PlayerState *player_ptr = BoardPlayerGet(player);
|
||||
return boardPlayerMdl[player_ptr->player_idx];
|
||||
}
|
||||
|
||||
void fn_1_6F9C(s32 arg0) {
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
f32 var_f30;
|
||||
f32 var_f29;
|
||||
f32 var_f31;
|
||||
s32 temp_r4;
|
||||
s32 var_r30;
|
||||
s16 model;
|
||||
|
||||
BoardPlayerPosGet(arg0, &sp14);
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "chara01", &sp20);
|
||||
PSVECSubtract(&sp20, &sp14, &sp8);
|
||||
sp8.x /= 60.0f;
|
||||
sp8.z /= 60.0f;
|
||||
sp8.y = 0.0f;
|
||||
if (lbl_1_bss_0->unk0 != 0) {
|
||||
var_f30 = 10.0f;
|
||||
var_f29 = 0.21f;
|
||||
sp14.y += sp20.y;
|
||||
} else {
|
||||
var_f30 = 0.0f;
|
||||
var_f29 = 0.15f;
|
||||
}
|
||||
lbl_1_bss_124 = 1;
|
||||
HuAudFXPlay(lbl_1_data_368[GWPlayer[arg0].character]);
|
||||
BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0U);
|
||||
for (var_r30 = 0, var_f31 = 0.0f; var_f31 < 60.0f; var_f31 += 1.0f) {
|
||||
PSVECAdd(&sp14, &sp8, &sp14);
|
||||
sp14.y += 10.0f + var_f30 + (var_f29 * (-0.08166667f * var_f31 * var_f31));
|
||||
if (sp14.y <= sp20.y) {
|
||||
sp14.y = sp20.y;
|
||||
if (var_r30 == 0) {
|
||||
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U);
|
||||
var_r30 = 1;
|
||||
}
|
||||
}
|
||||
BoardPlayerPosSetV(arg0, &sp14);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U);
|
||||
HuPrcSleep(10);
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
if (GWPlayer[arg0].bowser_suit != 0) {
|
||||
BoardModelHookSet(lbl_1_data_388, "chara01", BoardPlayerModelGet(arg0));
|
||||
} else {
|
||||
BoardModelHookSet(lbl_1_data_388, "chara01", BoardPlayerModelGet(arg0));
|
||||
}
|
||||
BoardPlayerPosSet(arg0, 0.0f, 0.0f, 0.0f);
|
||||
lbl_1_bss_124 = 0;
|
||||
}
|
||||
|
||||
void fn_1_735C(s32 arg0) {
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Point3d sp8;
|
||||
f32 temp_f1;
|
||||
f32 var_f30;
|
||||
f32 var_f31;
|
||||
s32 temp_r29;
|
||||
s32 temp_r4;
|
||||
s32 var_r30;
|
||||
|
||||
temp_r29 = BoardSpaceFlagPosGet(0, 0x100, &sp20);
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "chara01", &sp14);
|
||||
BoardPlayerPosSetV(arg0, &sp14);
|
||||
BoardModelHookObjReset(lbl_1_data_388, "chara01");
|
||||
PSVECSubtract(&sp20, &sp14, &sp8);
|
||||
|
||||
sp8.x = sp8.x / 60.0f;
|
||||
sp8.z = sp8.z / 60.0f;
|
||||
sp8.y = 0.0f;
|
||||
|
||||
HuAudFXPlay(lbl_1_data_368[GWPlayer[arg0].character]);
|
||||
BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0U);
|
||||
if (lbl_1_bss_0->unk0 != 0) {
|
||||
var_f30 = 0.25f;
|
||||
} else {
|
||||
var_f30 = 0.2f;
|
||||
}
|
||||
|
||||
for (var_r30 = 0, var_f31 = 0.0f; var_f31 < 60.0f; var_f31 += 1.0f) {
|
||||
PSVECAdd(&sp14, &sp8, &sp14);
|
||||
sp14.y += 20.0f + (var_f30 * (-0.08166667f * var_f31 * var_f31));
|
||||
if (sp14.y <= sp20.y && var_f31 > 48.0f) {
|
||||
sp14.y = sp20.y;
|
||||
if (var_r30 == 0) {
|
||||
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U);
|
||||
var_r30 = 1;
|
||||
}
|
||||
}
|
||||
BoardPlayerPosSetV(arg0, &sp14);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardPlayerPosSetV(arg0, &sp20);
|
||||
HuPrcSleep(0xA);
|
||||
BoardPlayerMotBlendSet(arg0, 0, 0xF);
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
GWPlayer[arg0].space_curr = temp_r29;
|
||||
GWPlayer[arg0].space_prev = -1;
|
||||
BoardPlayerPostTurnHookSet(arg0, fn_1_6698);
|
||||
BoardWinCreate(2, 0x16000D, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
}
|
||||
|
||||
|
||||
void fn_1_767C(omObjData* arg0) {
|
||||
Point3d sp8;
|
||||
s32 temp_r30;
|
||||
unkWorkStruct* temp_r31;
|
||||
|
||||
temp_r31 = OM_GET_WORK_PTR(arg0, unkWorkStruct);
|
||||
if ( (temp_r31->temp1 != 0) || (BoardIsKill() != 0)) {
|
||||
lbl_1_bss_12C = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
if ((lbl_1_data_388 != -1) && (lbl_1_bss_124 == 0)) {
|
||||
temp_r31->unk_04 += 3.0f;
|
||||
if (temp_r31->unk_04 >= 360.0f) {
|
||||
temp_r31->unk_04 = (f32) (temp_r31->unk_04 - 360.0f);
|
||||
}
|
||||
BoardModelPosGet(lbl_1_data_388, &sp8);
|
||||
sp8.y = (f32) ((f64) sp8.y + (0.25 * (2.0 * sin((3.141592653589793 * (f64) temp_r31->unk_04) / 180.0))));
|
||||
BoardModelPosSetV(lbl_1_data_388, &sp8);
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_77E4(s32 arg0) {
|
||||
s32 boardIndex;
|
||||
s32 var_r30 = 0;
|
||||
|
||||
boardIndex = GWSystem.star_pos;
|
||||
if ((boardIndex == 1) || (boardIndex == 2) || (boardIndex == 3) || (boardIndex == 4)) {
|
||||
var_r30 = 1;
|
||||
}
|
||||
if (var_r30 != 0) {
|
||||
BoardComKeySetLeft();
|
||||
return;
|
||||
}
|
||||
BoardComKeySetRight();
|
||||
}
|
||||
|
||||
char padRiver[] = "\0\0\0\0";
|
||||
83
src/REL/w03Dll/smoke.c
Normal file
83
src/REL/w03Dll/smoke.c
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#include "dolphin.h"
|
||||
#include "game/object.h"
|
||||
#include "REL/w03Dll.h"
|
||||
#include "board_unsplit.h"
|
||||
#include "game/board/main.h"
|
||||
|
||||
typedef struct w03UnkWorkStruct {
|
||||
s16 unk_00[5];
|
||||
char unk_0A[2];
|
||||
f32 unk_0C;
|
||||
} w03UnkWorkStruct;
|
||||
|
||||
extern w03State* lbl_1_bss_0;
|
||||
omObjData* lbl_1_bss_138[2];
|
||||
extern Process *boardObjMan;
|
||||
extern s16 lbl_1_data_1E0;
|
||||
|
||||
void fn_1_79E0(omObjData* arg0);
|
||||
f32 BoardModelMotionMaxTimeGet(s16);
|
||||
|
||||
char kemuri1[] = "kemuri1";
|
||||
char kemuri2[] = "kemuri2";
|
||||
char kemuri3[] = "kemuri3";
|
||||
char kemuri4[] = "kemuri4";
|
||||
char kemuri5[] = "kemuri5";
|
||||
|
||||
char* kemuri_strings[] = {
|
||||
kemuri1, kemuri2, kemuri3,
|
||||
kemuri4, kemuri5
|
||||
};
|
||||
|
||||
void fn_1_785C(void) {
|
||||
f32 var_f31;
|
||||
s32 i;
|
||||
w03UnkWorkStruct* temp_r31;
|
||||
char* temp_r29;
|
||||
|
||||
lbl_1_bss_138[0] = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_79E0);
|
||||
temp_r31 = (w03UnkWorkStruct*)&lbl_1_bss_138[0]->work[0];
|
||||
for (i = 0; i < 5; i++) {
|
||||
temp_r31->unk_00[i] = BoardModelCreate(0x770008, NULL, 0);
|
||||
temp_r29 = kemuri_strings[i];
|
||||
if (0.0f == temp_r31->unk_0C) {
|
||||
temp_r31->unk_0C = BoardModelMotionMaxTimeGet(temp_r31->unk_00[i]);
|
||||
}
|
||||
var_f31 = temp_r31->unk_0C * BoardRandFloat();
|
||||
if (var_f31 < 1.0f) {
|
||||
var_f31 = 1.0f;
|
||||
}
|
||||
BoardModelHookSet(lbl_1_data_1E0, temp_r29, temp_r31->unk_00[i]);
|
||||
BoardModelMotionStart(temp_r31->unk_00[i], 0, 0x40000001);
|
||||
BoardModelMotionTimeSet(temp_r31->unk_00[i], var_f31);
|
||||
BoardModelLayerSet(temp_r31->unk_00[i], 2);
|
||||
BoardModelPassSet(temp_r31->unk_00[i], 0);
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_79E0(omObjData* arg0) {
|
||||
s32 var_r29;
|
||||
s32 i;
|
||||
w03UnkWorkStruct* temp_r30;
|
||||
|
||||
temp_r30 = (w03UnkWorkStruct*)&arg0->work[0];
|
||||
|
||||
if (BoardIsKill() != 0) {
|
||||
for (i = 0; i < 5; i++) {
|
||||
BoardModelKill(temp_r30->unk_00[i]);
|
||||
}
|
||||
lbl_1_bss_138[0] = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
if (lbl_1_bss_0->unk3 != 0) {
|
||||
var_r29 = 0;
|
||||
} else {
|
||||
var_r29 = 1;
|
||||
}
|
||||
for (i = 0; i < 5; i++) {
|
||||
BoardModelVisibilitySet(temp_r30->unk_00[i], var_r29);
|
||||
}
|
||||
}
|
||||
|
||||
char pad[4] = "\0\0\0\0";
|
||||
651
src/REL/w03Dll/statue.c
Normal file
651
src/REL/w03Dll/statue.c
Normal file
|
|
@ -0,0 +1,651 @@
|
|||
#include "dolphin.h"
|
||||
#include "REL/executor.h"
|
||||
#include "game/process.h"
|
||||
#include "game/data.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "REL/w03Dll.h"
|
||||
#include "game/audio.h"
|
||||
#include "game/board/space.h"
|
||||
#include "game/board/player.h"
|
||||
#include "board_unsplit.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/board/main.h"
|
||||
|
||||
void fn_1_1358(void);
|
||||
void fn_1_152C(void);
|
||||
s32 fn_1_15E8(void);
|
||||
s32 fn_1_1650(s32 arg0);
|
||||
void fn_1_19DC(s32 arg0, s32 arg1);
|
||||
s32 fn_1_1D1C(void);
|
||||
void fn_1_1ED4(s32 arg0);
|
||||
void fn_1_20E0(s32 arg0);
|
||||
void fn_1_26E0(s32 arg0);
|
||||
void fn_1_2AC0(void);
|
||||
void fn_1_2818(void);
|
||||
void fn_1_2A40(void);
|
||||
void fn_1_2B44(void);
|
||||
s32 BoardDAngleCalcRange(f32*, f32, f32);
|
||||
s32 BoardPlayerMotBlendCheck(s32);
|
||||
void BoardPlayerMotBlendSet(s32, s32, s32);
|
||||
f32 BoardPlayerRotYGet(s32);
|
||||
void BoardConfettiCreate(Point3d*, s16, f32);
|
||||
double atan2(double y, double x);
|
||||
void omVibrate(s16, s16, s16, s16);
|
||||
f32 BoardModelMotionTimeGet(s16);
|
||||
|
||||
//DATA
|
||||
s16 lbl_1_data_280 = -1;
|
||||
s16 lbl_1_data_282 = -1;
|
||||
s16 lbl_1_data_284 = -1;
|
||||
s16 lbl_1_data_286 = -1;
|
||||
s32 lbl_1_data_288 = -1;
|
||||
|
||||
char lbl_1_data_28C[] = "%d";
|
||||
|
||||
s32 lbl_1_data_290[] = { //TODO: make sure this actually uses MAKE_DATA_NUM macro
|
||||
MAKE_DATA_NUM(0x5F, 0x62),
|
||||
MAKE_DATA_NUM(0x1A, 0x62),
|
||||
MAKE_DATA_NUM(0x6D, 0x62),
|
||||
MAKE_DATA_NUM(0x8A, 0x62),
|
||||
MAKE_DATA_NUM(0x85, 0x62),
|
||||
MAKE_DATA_NUM(0x11, 0x62),
|
||||
MAKE_DATA_NUM(0x0D, 0x62),
|
||||
MAKE_DATA_NUM(0x81, 0x62),
|
||||
};
|
||||
|
||||
s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses MAKE_DATA_NUM macro
|
||||
MAKE_DATA_NUM(0x5F, 0x33),
|
||||
MAKE_DATA_NUM(0x1A, 0x33),
|
||||
MAKE_DATA_NUM(0x6D, 0x33),
|
||||
MAKE_DATA_NUM(0x8A, 0x33),
|
||||
MAKE_DATA_NUM(0x85, 0x33),
|
||||
MAKE_DATA_NUM(0x11, 0x33),
|
||||
MAKE_DATA_NUM(0x0D, 0x33),
|
||||
MAKE_DATA_NUM(0x81, 0x33),
|
||||
};
|
||||
|
||||
s32 lbl_1_data_2D0[] = {
|
||||
0x00000125, 0x00000165, 0x000001A5,
|
||||
0x000001E5, 0x00000225, 0x00000265,
|
||||
0x000002A5, 0x000002E5
|
||||
};
|
||||
|
||||
s32 lbl_1_data_2F0[] = {
|
||||
0x0000012E, 0x0000016E, 0x000001AE,
|
||||
0x000001EE, 0x0000022E, 0x0000026E,
|
||||
0x000002AE, 0x000002EE
|
||||
};
|
||||
|
||||
//BSS Extern
|
||||
extern w03State* lbl_1_bss_0;
|
||||
extern Process *boardMainProc;
|
||||
extern s16 lbl_1_bss_C[14];
|
||||
|
||||
//BSS
|
||||
s8 lbl_1_bss_6F;
|
||||
s8 lbl_1_bss_6E;
|
||||
s16 lbl_1_bss_6C;
|
||||
s16 lbl_1_bss_6A;
|
||||
s16 lbl_1_bss_68;
|
||||
GXTexObj lbl_1_bss_48;
|
||||
char lbl_1_bss_44[4];
|
||||
char lbl_1_bss_38[12];
|
||||
void* lbl_1_bss_34;
|
||||
f32 lbl_1_bss_30;
|
||||
s8 lbl_1_bss_2C;
|
||||
Process* lbl_1_bss_28;
|
||||
|
||||
s32 fn_1_12C8(void) {
|
||||
BoardDiceDigit2DShowSet(0);
|
||||
lbl_1_bss_28 = HuPrcChildCreate(&fn_1_1358, 0x2003, 0x2000, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_28, &fn_1_152C);
|
||||
|
||||
while (lbl_1_bss_28) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
return BoardDiceDigit2DShowSet(1);
|
||||
}
|
||||
|
||||
void fn_1_1358(void) {
|
||||
s32 cur_player_index;
|
||||
s32 unkC;
|
||||
|
||||
cur_player_index = GWSystem.player_curr;
|
||||
unkC = GWPlayer[cur_player_index].space_curr;
|
||||
lbl_1_bss_2C = 0;
|
||||
if ((BoardSpaceFlagGet(0, GWPlayer[cur_player_index].space_curr) & 0x2000)) {
|
||||
lbl_1_bss_6E = 0;
|
||||
lbl_1_bss_6C = lbl_1_bss_C[3];
|
||||
} else {
|
||||
lbl_1_bss_6E = 1;
|
||||
lbl_1_bss_6C = lbl_1_bss_C[4];
|
||||
}
|
||||
if (fn_1_1650(cur_player_index) != 0) {
|
||||
if (fn_1_1D1C() != 0) {
|
||||
fn_1_1ED4(cur_player_index);
|
||||
} else {
|
||||
fn_1_20E0(cur_player_index);
|
||||
}
|
||||
if (lbl_1_bss_2C) {
|
||||
sprintf(lbl_1_bss_44, lbl_1_data_28C, lbl_1_bss_2C);
|
||||
BoardWinCreate(0, 0x160006, -1);
|
||||
BoardWinInsertMesSet((s32)lbl_1_bss_44, 0);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
lbl_1_bss_0->unk2 = 1 << cur_player_index;
|
||||
lbl_1_bss_0->unk0 = lbl_1_bss_2C;
|
||||
fn_1_CF4();
|
||||
}
|
||||
fn_1_26E0(cur_player_index);
|
||||
BoardStatusShowSetAll(1);
|
||||
}
|
||||
BoardPlayerPostTurnHookSet(cur_player_index, &fn_1_15E8);
|
||||
BoardWinKill();
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
void fn_1_152C(void) {
|
||||
BoardConfettiKill();
|
||||
if (lbl_1_data_282 != -1) {
|
||||
BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_282);
|
||||
lbl_1_data_282 = -1;
|
||||
}
|
||||
if (lbl_1_data_280 != -1) {
|
||||
BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_280);
|
||||
lbl_1_data_280 = -1;
|
||||
}
|
||||
fn_1_2AC0();
|
||||
lbl_1_bss_28 = NULL;
|
||||
}
|
||||
|
||||
s32 fn_1_15E8(void) {
|
||||
BoardModelVisibilitySet(lbl_1_bss_6C, 1);
|
||||
if (lbl_1_data_284 != -1) {
|
||||
BoardModelKill(lbl_1_data_284);
|
||||
lbl_1_data_284 = -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 fn_1_1650(s32 arg0) {
|
||||
Point3d sp38;
|
||||
Point3d sp2C;
|
||||
Point3d sp20;
|
||||
Point3d sp14;
|
||||
Point3d sp8;
|
||||
f32 temp;
|
||||
s32 temp2;
|
||||
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
|
||||
if (lbl_1_bss_0->unk2) {
|
||||
BoardWinCreate(0, 0x160000, -1);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
return 0;
|
||||
}
|
||||
|
||||
temp2 = BoardSpaceLinkFlagSearch(0, GWPlayer[arg0].space_curr, 0x02000000);
|
||||
BoardSpacePosGet(0, temp2, &sp38);
|
||||
BoardPlayerPosGet(arg0, &sp2C);
|
||||
PSVECSubtract(&sp38, &sp2C, &sp20);
|
||||
temp = (atan2(-sp20.x, -sp20.z) / 3.141592653589793) * 180.0f;
|
||||
BoardPlayerRotYSet(arg0, temp);
|
||||
sp14.x = 0.0f;
|
||||
sp14.y = 100.0f;
|
||||
sp14.z = 0.0f;
|
||||
sp8.x = -20.0f;
|
||||
sp8.y = 0.0f;
|
||||
sp8.z = 0.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_6C, &sp8, &sp14, 1360.0f, -1.0f, 0x15);
|
||||
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x28);
|
||||
|
||||
while (GWPlayer[arg0].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardStatusShowSetAll(0);
|
||||
BoardPlayerMotBlendSet(arg0, 0xB4, 0xF);
|
||||
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
BoardWinCreate(2, 0x160001, 2);
|
||||
BoardWinWait();
|
||||
BoardWinCreateChoice(0, 0x160002, -1, 0);
|
||||
BoardWinAttrSet(0x10);
|
||||
if (GWPlayer[arg0].com) {
|
||||
if (BoardRandMod(0x64) > 0x32U) {
|
||||
BoardComKeySetLeft();
|
||||
} else {
|
||||
BoardComKeySetRight();
|
||||
}
|
||||
}
|
||||
BoardWinWait();
|
||||
lbl_1_bss_6F = BoardWinChoiceGet();
|
||||
BoardWinKill();
|
||||
fn_1_19DC(arg0, lbl_1_bss_6F);
|
||||
BoardFilterFadeInit(0x1E, 0xA0);
|
||||
BoardMusStart(1, 0x19, 0x7F, 0);
|
||||
HuAudFXPlay(0x435);
|
||||
sp8.y = BoardModelRotYGet(lbl_1_bss_6C);
|
||||
|
||||
while (BoardDAngleCalcRange(&sp8.y, 180.0f, 2.0f) == 0) {
|
||||
BoardModelRotYSet(lbl_1_bss_6C, sp8.y);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
HuAudFXPlay(0x445);
|
||||
BoardModelRotYSet(lbl_1_bss_6C, 180.0f);
|
||||
|
||||
while (BoardMusStatusGet(1) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void fn_1_19DC(s32 arg0, s32 arg1) {
|
||||
s32 temp_r30;
|
||||
s32 temp_r5;
|
||||
s32 temp_r5_2;
|
||||
s32 var_r29;
|
||||
f32 temp;
|
||||
|
||||
temp_r30 = GWPlayer[arg0].character;
|
||||
if (arg1 != 0) {
|
||||
lbl_1_data_282 = BoardPlayerMotionCreate(arg0, lbl_1_data_2B0[temp_r30]);
|
||||
lbl_1_bss_6A = 8;
|
||||
lbl_1_bss_68 = lbl_1_data_282;
|
||||
var_r29 = lbl_1_data_2F0[GWPlayer[arg0].character];
|
||||
} else {
|
||||
lbl_1_bss_6A = 7;
|
||||
lbl_1_bss_68 = 1;
|
||||
var_r29 = lbl_1_data_2D0[GWPlayer[arg0].character];
|
||||
}
|
||||
lbl_1_data_280 = BoardPlayerMotionCreate(arg0, lbl_1_data_290[temp_r30]);
|
||||
temp = (180.0f + BoardPlayerRotYGet(arg0));
|
||||
BoardPlayerMotBlendSet(arg0, temp, 0xF);
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
HuAudFXPlay(var_r29);
|
||||
BoardPlayerVoiceEnableSet(arg0, lbl_1_bss_6A, 0);
|
||||
BoardPlayerMotionShiftSet(arg0, lbl_1_bss_6A, 0.0f, 8.0f, 0);
|
||||
HuPrcSleep(9);
|
||||
|
||||
while (BoardPlayerMotionEndCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
|
||||
}
|
||||
HuPrcSleep(0x3C);
|
||||
|
||||
if (arg1 != 0) {
|
||||
BoardPlayerMotionShiftSet(arg0, lbl_1_bss_68, 0.0f, 8.0f, 0);
|
||||
HuPrcSleep(9);
|
||||
while (BoardPlayerMotionEndCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
HuPrcSleep(0x14);
|
||||
temp = (180.0f + BoardPlayerRotYGet(arg0));
|
||||
BoardPlayerMotBlendSet(arg0, temp, 0xF);
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardAudSeqPause(0, 1, 0x3E8);
|
||||
BoardPlayerMotionShiftSet(arg0, lbl_1_data_280, 0.0f, 10.0f, 0);
|
||||
HuPrcSleep(0xB);
|
||||
while (BoardPlayerMotionEndCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
s32 fn_1_1D1C(void) {
|
||||
s32 sp34;
|
||||
s32 sp30;
|
||||
s32 sp2C;
|
||||
s32 sp28;
|
||||
s32 sp24;
|
||||
s32 sp20;
|
||||
s32 modRand2;
|
||||
s32 var_r31;
|
||||
s32 temp2;
|
||||
s32 modRand;
|
||||
s32 prevTurn;
|
||||
s32 maxTurn;
|
||||
|
||||
s32 sp8[3] = { 70, 50, 45 };
|
||||
s32 sp14[3][3] = {
|
||||
{3, 5, 22},
|
||||
{5, 10, 35},
|
||||
{5, 15, 35}
|
||||
};
|
||||
|
||||
while (BoardMusStatusGet(1) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardWinCreate(2, 0x160003, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
prevTurn = GWSystem.turn - 1;
|
||||
maxTurn = GWSystem.max_turn;
|
||||
var_r31 = prevTurn / (maxTurn / 3);
|
||||
if (var_r31 >= 3) {
|
||||
var_r31 = 2;
|
||||
}
|
||||
modRand = BoardRandMod(100);
|
||||
if (modRand < sp8[var_r31] ) {
|
||||
return 1;
|
||||
}
|
||||
modRand2 = BoardRandMod(100 - sp8[var_r31]);
|
||||
if (modRand2 < sp14[var_r31][0]) {
|
||||
lbl_1_bss_2C = 3;
|
||||
} else if (modRand2 < sp14[var_r31][1]) {
|
||||
lbl_1_bss_2C = 2;
|
||||
} else {
|
||||
lbl_1_bss_2C = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fn_1_1ED4(s32 arg0) {
|
||||
Point3d spC;
|
||||
f32 sp8;
|
||||
|
||||
lbl_1_data_284 = BoardModelCreate(0x77000C, NULL, 0);
|
||||
BoardModelVisibilitySet(lbl_1_data_284, 0);
|
||||
BoardModelVisibilitySet(lbl_1_bss_6C, 0);
|
||||
BoardModelPosGet(lbl_1_bss_6C, &spC);
|
||||
BoardModelVisibilitySet(lbl_1_data_284, 1);
|
||||
BoardModelPosSetV(lbl_1_data_284, &spC);
|
||||
BoardFilterFadeOut(0x1E);
|
||||
BoardPlayerPosGet(arg0, &spC);
|
||||
spC.y += 700.0f;
|
||||
BoardConfettiCreate(&spC, 0x64, 300.0f);
|
||||
sp8 = BoardModelRotYGet(lbl_1_bss_6C);
|
||||
|
||||
while (BoardDAngleCalcRange(&sp8, 0.0f, 30.0f) == 0) {
|
||||
BoardModelRotYSet(lbl_1_data_284, sp8);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
omVibrate(arg0, 0xC, 4, 2);
|
||||
BoardMusStart(1, 0x1A, 0x7F, 0);
|
||||
BoardModelRotYSet(lbl_1_data_284, 0.0f);
|
||||
BoardModelRotYSet(lbl_1_bss_6C, 0.0f);
|
||||
|
||||
while (BoardFilterFadePauseCheck() == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
|
||||
while (BoardMusStatusGet(1) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardAudSeqPause(0, 0, 1000);
|
||||
BoardWinCreate(2, 0x160004, 2);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
BoardConfettiStop();
|
||||
}
|
||||
|
||||
void fn_1_20E0(s32 arg0) {
|
||||
Point3d sp24;
|
||||
Point3d sp18;
|
||||
Point3d spC;
|
||||
f32 sp8;
|
||||
f32 var_f31;
|
||||
s32 i;
|
||||
|
||||
lbl_1_data_284 = BoardModelCreate(0x77000D, NULL, 0);
|
||||
BoardModelVisibilitySet(lbl_1_data_284, 0);
|
||||
BoardModelVisibilitySet(lbl_1_bss_6C, 0);
|
||||
BoardModelPosGet(lbl_1_bss_6C, &spC);
|
||||
BoardModelVisibilitySet(lbl_1_data_284, 1);
|
||||
BoardModelPosSetV(lbl_1_data_284, &spC);
|
||||
BoardFilterFadeOut(0x1E);
|
||||
sp8 = BoardModelRotYGet(lbl_1_bss_6C);
|
||||
while (BoardDAngleCalcRange(&sp8, 0.0f, 30.0f) == 0) {
|
||||
BoardModelRotYSet(lbl_1_data_284, sp8);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
omVibrate(arg0, 0xC, 4, 2);
|
||||
BoardModelRotYSet(lbl_1_data_284, 0.0f);
|
||||
BoardModelRotYSet(lbl_1_bss_6C, 0.0f);
|
||||
|
||||
while (BoardFilterFadePauseCheck() == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardMusStart(1, 0x1B, 0x7F, 0);
|
||||
HuAudFXPlay(0x44A);
|
||||
fn_1_2A40();
|
||||
lbl_1_bss_30 = 0.0f;
|
||||
|
||||
while (lbl_1_bss_30 < 128.0f) {
|
||||
HuPrcVSleep();
|
||||
lbl_1_bss_30 += 12.0f;
|
||||
}
|
||||
|
||||
if (lbl_1_bss_30 > 128.0f) {
|
||||
lbl_1_bss_30 = 128.0f;
|
||||
}
|
||||
HuPrcSleep(0x28);
|
||||
lbl_1_bss_30 = 128.0f;
|
||||
|
||||
while (lbl_1_bss_30 > 0.0f) {
|
||||
HuPrcVSleep();
|
||||
lbl_1_bss_30 -= 12.0f;
|
||||
}
|
||||
if (lbl_1_bss_30 < 0.0f) {
|
||||
lbl_1_bss_30 = 0.0f;
|
||||
}
|
||||
fn_1_2AC0();
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
BoardCameraMotionStartEx(-1, NULL, 0, 680.0f, -1.0f, 0xD);
|
||||
BoardCameraMotionWait();
|
||||
BoardCameraMotionStartEx(-1, NULL, 0, 1360.0f, -1.0f, 0xD);
|
||||
BoardCameraMotionWait();
|
||||
}
|
||||
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
while (BoardMusStatusGet(1) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardAudSeqPause(0, 0, 1000);
|
||||
BoardWinCreate(2, 0x160005, 2);
|
||||
BoardWinWait();
|
||||
BoardCameraQuakeSet(0x8CA0, 100.0f);
|
||||
omVibrate(arg0, 0xE10, 4, 2);
|
||||
lbl_1_data_288 = HuAudFXPlay(0x436);
|
||||
BoardCameraViewSet(1);
|
||||
HuPrcSleep(0x3C);
|
||||
BoardCameraMotionWait();
|
||||
sp24.x = 0.0f;
|
||||
sp24.y = 100.0f;
|
||||
sp24.z = 0.0f;
|
||||
sp18.x = -20.0f;
|
||||
sp18.y = 0.0f;
|
||||
sp18.z = 0.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp18, &sp24, 3000.0f, -1.0f, 0x3C);
|
||||
BoardCameraMotionWait();
|
||||
omVibrate(arg0, 0x1E, 6, 6);
|
||||
HuPrcSleep(0x1E);
|
||||
|
||||
for (var_f31 = 100.0f; var_f31 > 0.0f; var_f31 -= 2.0f) {
|
||||
BoardCameraQuakeSet(0xA, var_f31);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardCameraQuakeReset();
|
||||
if (lbl_1_data_288 != 0) {
|
||||
HuAudFXStop(lbl_1_data_288);
|
||||
lbl_1_data_288 = -1;
|
||||
}
|
||||
|
||||
fn_1_2818();
|
||||
omVibrate(arg0, 0xC, 0xC, 0);
|
||||
HuAudFXPlay(0x438);
|
||||
fn_1_B5C(1);
|
||||
HuPrcSleep(0x3C);
|
||||
sp24.x = 0.0f;
|
||||
sp24.y = 100.0f;
|
||||
sp24.z = 0.0f;
|
||||
sp18.x = -20.0f;
|
||||
sp18.y = 0.0f;
|
||||
sp18.z = 0.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_6C, &sp18, &sp24, 1360.0f, -1.0f, 0x3C);
|
||||
BoardCameraMotionWait();
|
||||
HuPrcSleep(0x3C);
|
||||
}
|
||||
|
||||
void fn_1_26E0(s32 arg0) {
|
||||
Point3d sp20;
|
||||
Point3d sp14;
|
||||
Point3d sp8;
|
||||
f32 temp;
|
||||
|
||||
BoardSpacePosGet(0, GWPlayer[arg0].space_curr, &sp20);
|
||||
BoardPlayerPosGet(arg0, &sp14);
|
||||
PSVECSubtract(&sp20, &sp14, &sp8);
|
||||
PSVECNormalize(&sp8, &sp8);
|
||||
temp = (180.0f * (atan2(-sp8.x, -sp8.z) / 3.141592653589793));
|
||||
BoardPlayerRotYSet(arg0, temp);
|
||||
BoardCameraViewSet(1);
|
||||
BoardCameraTargetPlayerSet(arg0);
|
||||
BoardPlayerPosLerpStart(arg0, &sp14, &sp20, 0x28);
|
||||
while (GWPlayer[arg0].moving != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardCameraMotionWait();
|
||||
BoardModelMotionStart(lbl_1_bss_C[1], 0, 0);
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
}
|
||||
|
||||
void fn_1_2818(void) {
|
||||
s16 temp_r29;
|
||||
s16 temp_r30;
|
||||
s16 j;
|
||||
s16 sp8[3] = {0x0002, 0x003E, 0x007A};
|
||||
|
||||
temp_r29 = (4 - lbl_1_bss_2C) * 0x3C;
|
||||
BoardModelMotionStart(lbl_1_bss_C[1], 0, 0);
|
||||
while (1) {
|
||||
temp_r30 = BoardModelMotionTimeGet(lbl_1_bss_C[1]);
|
||||
if (temp_r29 > temp_r30) {
|
||||
for (j = 0; j < ARRAY_COUNT(sp8); j++) {
|
||||
if (temp_r30 == sp8[j]) {
|
||||
HuAudFXPlay(0x446);
|
||||
}
|
||||
}
|
||||
HuPrcVSleep();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BoardModelAttrSet(lbl_1_bss_C[1], 0x40000002);
|
||||
HuPrcSleep(0x3C);
|
||||
}
|
||||
|
||||
s32 fn_1_2930(s32 arg0) {
|
||||
lbl_1_bss_0->unk0--;
|
||||
if (lbl_1_bss_0->unk0 <= 0) {
|
||||
lbl_1_bss_0->unk2 = 0;
|
||||
lbl_1_bss_0->unk0 = 0;
|
||||
fn_1_B5C(0);
|
||||
BoardWinCreate(0, 0x160008, -1);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
fn_1_CF4();
|
||||
return 1;
|
||||
}
|
||||
sprintf(lbl_1_bss_38, lbl_1_data_28C, lbl_1_bss_0->unk0);
|
||||
BoardWinCreate(0, 0x160007, -1);
|
||||
BoardWinInsertMesSet((s32)lbl_1_bss_38, 1);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
fn_1_CF4();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fn_1_2A40(void) {
|
||||
lbl_1_bss_30 = 0.0f;
|
||||
lbl_1_bss_34 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x96000, 0x10000000U);
|
||||
lbl_1_data_286 = Hu3DHookFuncCreate((void*)&fn_1_2B44);
|
||||
Hu3DModelLayerSet(lbl_1_data_286, 3);
|
||||
}
|
||||
|
||||
void fn_1_2AC0(void) {
|
||||
if (lbl_1_bss_34) {
|
||||
HuMemDirectFree(lbl_1_bss_34);
|
||||
lbl_1_bss_34 = NULL;
|
||||
}
|
||||
if (lbl_1_data_286 != -1) {
|
||||
Hu3DModelKill(lbl_1_data_286);
|
||||
lbl_1_data_286 = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_2B44(void) {
|
||||
Mtx44 sp50;
|
||||
Mtx sp20;
|
||||
GXColor sp14;
|
||||
GXColor sp10;
|
||||
GXColor spC;
|
||||
u8 sp8;
|
||||
GXColor sp1C = {0xFF, 0xFF, 0xFF, 0xFF};
|
||||
GXColor sp18 = {0xFF, 0xFF, 0xFF, 0xFF};
|
||||
|
||||
f32 temp_f28 = 0.0f;
|
||||
f32 temp_f30 = 640.0f;
|
||||
f32 temp_f27 = 0.0f;
|
||||
f32 temp_f29 = 480.0f;
|
||||
|
||||
sp18.a = __OSf32tou8(lbl_1_bss_30);
|
||||
GXInvalidateTexAll();
|
||||
GXLoadTexObj(&lbl_1_bss_48, GX_TEXMAP0);
|
||||
C_MTXOrtho(sp50, temp_f27, temp_f29, temp_f28, temp_f30, 0.0f, 10.0f);
|
||||
GXSetProjection(sp50, GX_ORTHOGRAPHIC);
|
||||
PSMTXIdentity(sp20);
|
||||
GXLoadPosMtxImm(sp20, 0);
|
||||
GXSetCurrentMtx(0);
|
||||
GXSetViewport(0.0f, 0.0f, temp_f30, 1.0f + temp_f29, 0.0f, 1.0f);
|
||||
GXSetScissor(0, 0, temp_f30, (1.0f + temp_f29));
|
||||
GXClearVtxDesc();
|
||||
GXSetNumTexGens(0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetNumChans(1);
|
||||
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
||||
GXSetChanCtrl(GX_COLOR0, 1, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE);
|
||||
GXSetChanCtrl(GX_ALPHA0, 0, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_NONE, GX_AF_NONE);
|
||||
GXSetChanAmbColor(GX_COLOR0A0, sp18);
|
||||
GXSetChanMatColor(GX_COLOR0A0, sp18);
|
||||
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_INVDSTCLR, GX_BL_SRCALPHA, GX_LO_NOOP);
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_S, GX_RGBX8, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0);
|
||||
GXSetZMode(1, GX_LEQUAL, 0);
|
||||
GXSetAlphaUpdate(1);
|
||||
GXSetColorUpdate(1);
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition2u16(temp_f28, temp_f27);
|
||||
GXPosition2f32(0.0f, 0.0f);
|
||||
GXPosition2u16(temp_f30, temp_f27);
|
||||
GXPosition2f32(1.0f, 0.0f);
|
||||
GXPosition2u16(temp_f30, temp_f29);
|
||||
GXPosition2f32(1.0f, 1.0f);
|
||||
GXPosition2u16(temp_f28, temp_f29);
|
||||
GXPosition2f32(0.0f, 1.0f);
|
||||
GXSetChanMatColor(GX_COLOR0A0, sp1C);
|
||||
}
|
||||
|
||||
f32 const padStatue = 0.0f;
|
||||
|
|
@ -56,7 +56,7 @@ void fn_1_C20(void) {
|
|||
BoardModelPosSetV(lbl_1_bss_1E, &sp14);
|
||||
BoardCameraRotGet(&sp8);
|
||||
PSMTXRotRad(sp20, 'y', 0.2617994f);
|
||||
BoardModelMtxSet(lbl_1_bss_1E, sp20);
|
||||
BoardModelMtxSet(lbl_1_bss_1E, &sp20);
|
||||
BoardModelRotSet(lbl_1_bss_1E, sp8.x, 0.0f, 0.0f);
|
||||
BoardModelScaleSet(lbl_1_bss_1E, 0.2f, 0.2f, 0.2f);
|
||||
HuPrcVSleep();
|
||||
|
|
|
|||
|
|
@ -124,13 +124,13 @@ void BoardCreate(void) {
|
|||
BoardModelVisibilitySet(lbl_1_bss_10[0], 0);
|
||||
lbl_1_bss_0->unk8 = BoardModelCreate(0x7000A, NULL, 0);
|
||||
BoardModelVisibilitySet(lbl_1_bss_0->unk8, 0);
|
||||
BoardSpaceWalkEventFuncSet(&fn_1_90C);
|
||||
BoardSpaceWalkMiniEventFuncSet(&fn_1_91C);
|
||||
BoardSpaceLandEventFuncSet(&fn_1_908);
|
||||
fn_80083EDC(lbl_1_data_2C);
|
||||
fn_800A4F6C(lbl_1_data_32);
|
||||
fn_80077AAC(lbl_1_data_2E);
|
||||
fn_8007A83C(lbl_1_data_30);
|
||||
BoardSpaceWalkEventFuncSet((void*)&fn_1_90C);
|
||||
BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_91C);
|
||||
BoardSpaceLandEventFuncSet((void*)&fn_1_908);
|
||||
BoardStarHostSet(lbl_1_data_2C);
|
||||
BoardBooHouseHostSet(lbl_1_data_32);
|
||||
BoardShopHostSet(lbl_1_data_2E);
|
||||
BoardLotteryHostSet(lbl_1_data_30);
|
||||
HuWinMesMaxSizeGet(1, spC, 0x2E003A);
|
||||
lbl_1_bss_E = HuWinCreate(-10000.0f, 390.0f, spC[0], spC[1], 1);
|
||||
HuWinMesSet(lbl_1_bss_E, 0x2E003A);
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ void fn_1_1134(void) {
|
|||
fn_1_1E3C(7, 0x122, 0x8C);
|
||||
fn_1_BA0(0x2E0017);
|
||||
fn_1_1FB0();
|
||||
fn_80082AAC(1);
|
||||
BoardCharWheelSetTarget(1);
|
||||
}
|
||||
|
||||
void fn_1_1178(void) {
|
||||
|
|
@ -176,7 +176,7 @@ void fn_1_13A4(void) {
|
|||
for (i = 0; i < 4; i++) {
|
||||
GWPlayer[i].color = 1;
|
||||
}
|
||||
fn_800A4C88();
|
||||
BoardMGSetupTutorialExec();
|
||||
BoardStatusShowSetAll(0);
|
||||
fn_1_C10(0);
|
||||
fn_1_BA0(0x2E002B);
|
||||
|
|
@ -188,7 +188,7 @@ void fn_1_13A4(void) {
|
|||
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
|
||||
BoardCameraMotionWait();
|
||||
fn_1_BA0(0x2E002C);
|
||||
fn_8007A360(temp_r3_2);
|
||||
BoardShopTutorialExec(temp_r3_2);
|
||||
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
|
||||
BoardCameraMotionWait();
|
||||
temp_r3_2 = BoardSpaceFlagSearch(0, 0x10000000);
|
||||
|
|
@ -197,7 +197,7 @@ void fn_1_13A4(void) {
|
|||
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
|
||||
BoardCameraMotionWait();
|
||||
fn_1_BA0(0x2E002E);
|
||||
fn_8007F894();
|
||||
BoardLotteryTutorialExec();
|
||||
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
|
||||
BoardCameraMotionWait();
|
||||
temp_r3_2 = BoardSpaceFlagSearch(0, 0x08000000);
|
||||
|
|
@ -206,7 +206,7 @@ void fn_1_13A4(void) {
|
|||
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
|
||||
BoardCameraMotionWait();
|
||||
fn_1_BA0(0x2E0030);
|
||||
fn_800A6B10();
|
||||
BoardBooHouseTutorialExec();
|
||||
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
|
||||
BoardCameraMotionWait();
|
||||
fn_1_BA0(0x2E0032);
|
||||
|
|
@ -227,7 +227,7 @@ void fn_1_13A4(void) {
|
|||
fn_1_BA0(0x2E0039);
|
||||
if (lbl_1_bss_C == 0) {
|
||||
lbl_1_bss_C = 1;
|
||||
fn_80070EE8(0, 0x1F3);
|
||||
BoardAudSeqFadeOut(0, 0x1F3);
|
||||
BoardKill();
|
||||
}
|
||||
BoardTutorialHookSet(NULL);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "REL/w10Dll.h"
|
||||
#include "game/esprite.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/data.h"
|
||||
#include "game/wipe.h"
|
||||
|
|
@ -152,7 +153,7 @@ void fn_1_1984(void) {
|
|||
if (i != 4) {
|
||||
lbl_1_bss_C = 1;
|
||||
OSReport(lbl_1_data_98);
|
||||
fn_80070EE8(0, 0x1F3);
|
||||
BoardAudSeqFadeOut(0, 0x1F3);
|
||||
BoardKill();
|
||||
BoardTutorialHookSet(NULL);
|
||||
}
|
||||
|
|
@ -181,7 +182,7 @@ int fn_1_1AAC(s16 arg0, s32 arg1) {
|
|||
if (i != 4) {
|
||||
lbl_1_bss_C = 1;
|
||||
OSReport(lbl_1_data_98);
|
||||
fn_80070EE8(0, 0x1F3);
|
||||
BoardAudSeqFadeOut(0, 0x1F3);
|
||||
BoardKill();
|
||||
BoardTutorialHookSet(NULL);
|
||||
}
|
||||
|
|
@ -197,7 +198,7 @@ int fn_1_1AAC(s16 arg0, s32 arg1) {
|
|||
lbl_1_bss_0->unk0, arg0, arg1, lbl_1_bss_0->unk4, lbl_1_bss_0->unk6);
|
||||
if (lbl_1_data_108[lbl_1_bss_0->unk0].unk0 != -1) {
|
||||
if (arg0 == 5) {
|
||||
fn_8008831C(&lbl_1_data_C6[lbl_1_bss_0->unk4++]);
|
||||
BoardRollTutorialSet(&lbl_1_data_C6[lbl_1_bss_0->unk4++]);
|
||||
}
|
||||
if (arg0 == lbl_1_data_108[lbl_1_bss_0->unk0].unk0) {
|
||||
void (*temp_r3_3)() = lbl_1_data_108[lbl_1_bss_0->unk0++].unk4;
|
||||
|
|
|
|||
174
src/game/ClusterExec.c
Normal file
174
src/game/ClusterExec.c
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
#include "game/ClusterExec.h"
|
||||
#include "game/EnvelopeExec.h"
|
||||
#include "game/hsfmotion.h"
|
||||
|
||||
float GetClusterCurve(HsfTrack *arg0, float arg1) {
|
||||
float *var_r30;
|
||||
|
||||
switch (arg0->curveType) {
|
||||
case 1:
|
||||
return GetLinear(arg0->numKeyframes, arg0->data, arg1);
|
||||
case 2:
|
||||
return GetBezier(arg0->numKeyframes, arg0, arg1);
|
||||
case 4:
|
||||
var_r30 = &arg0->value;
|
||||
return *var_r30;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
float GetClusterWeightCurve(HsfTrack *arg0, float arg1) {
|
||||
float *var_r30;
|
||||
|
||||
switch (arg0->curveType) {
|
||||
case 1:
|
||||
return GetLinear(arg0->numKeyframes, arg0->data, arg1);
|
||||
case 2:
|
||||
return GetBezier(arg0->numKeyframes, arg0, arg1);
|
||||
case 4:
|
||||
var_r30 = &arg0->value;
|
||||
return *var_r30;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void SetClusterMain(HsfCluster *arg0) {
|
||||
float var_f30;
|
||||
float var_f31;
|
||||
s32 temp_r24;
|
||||
s32 temp_r29;
|
||||
u16 *var_r28;
|
||||
s32 var_r23;
|
||||
s32 i;
|
||||
s32 j;
|
||||
HsfBuffer *temp_r25;
|
||||
HsfPart *temp_r27;
|
||||
HsfBuffer *temp_r30;
|
||||
|
||||
temp_r27 = arg0->part;
|
||||
if (arg0->vertexCnt != 0) {
|
||||
if (arg0->type == 2) {
|
||||
var_r28 = temp_r27->vertex;
|
||||
temp_r30 = *arg0->vertex;
|
||||
var_f30 = 0.0f;
|
||||
for (i = 0; i < arg0->vertexCnt; i++) {
|
||||
var_f30 += arg0->unk14[i];
|
||||
}
|
||||
for (i = 0; i < temp_r27->count; i++, var_r28++) {
|
||||
temp_r29 = *var_r28;
|
||||
Vertextop[temp_r29].x = ((Vec*) temp_r30->data)[i].x;
|
||||
Vertextop[temp_r29].y = ((Vec*) temp_r30->data)[i].y;
|
||||
Vertextop[temp_r29].z = ((Vec*) temp_r30->data)[i].z;
|
||||
}
|
||||
for (i = 1; i < arg0->vertexCnt; i++) {
|
||||
temp_r30 = arg0->vertex[i];
|
||||
var_r28 = temp_r27->vertex;
|
||||
var_f31 = arg0->unk14[i];
|
||||
if (var_f31 < 0.0f) {
|
||||
var_f31 = 0.0f;
|
||||
} else if (var_f30 > 1.0f) {
|
||||
var_f31 /= var_f30;
|
||||
}
|
||||
for (j = 0; j < temp_r27->count; j++, var_r28++) {
|
||||
temp_r29 = *var_r28;
|
||||
Vertextop[temp_r29].x += var_f31 * (((Vec*) temp_r30->data)[j].x - Vertextop[temp_r29].x);
|
||||
Vertextop[temp_r29].y += var_f31 * (((Vec*) temp_r30->data)[j].y - Vertextop[temp_r29].y);
|
||||
Vertextop[temp_r29].z += var_f31 * (((Vec*) temp_r30->data)[j].z - Vertextop[temp_r29].z);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
temp_r24 = arg0->unk10;
|
||||
var_r23 = temp_r24 + 1;
|
||||
if (var_r23 >= arg0->vertexCnt) {
|
||||
var_r23 = temp_r24;
|
||||
}
|
||||
var_f31 = arg0->unk10 - temp_r24;
|
||||
temp_r30 = arg0->vertex[temp_r24];
|
||||
temp_r25 = arg0->vertex[var_r23];
|
||||
var_r28 = temp_r27->vertex;
|
||||
for (i = 0; i < temp_r27->count; i++, var_r28++) {
|
||||
temp_r29 = *var_r28;
|
||||
Vertextop[temp_r29].x = ((Vec*) temp_r30->data)[i].x + var_f31 * (((Vec*) temp_r25->data)[i].x - ((Vec*) temp_r30->data)[i].x);
|
||||
Vertextop[temp_r29].y = ((Vec*) temp_r30->data)[i].y + var_f31 * (((Vec*) temp_r25->data)[i].y - ((Vec*) temp_r30->data)[i].y);
|
||||
Vertextop[temp_r29].z = ((Vec*) temp_r30->data)[i].z + var_f31 * (((Vec*) temp_r25->data)[i].z - ((Vec*) temp_r30->data)[i].z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClusterProc(ModelData *arg0) {
|
||||
s32 temp_r24;
|
||||
s32 i;
|
||||
s32 j;
|
||||
s32 k;
|
||||
HsfData *temp_r27;
|
||||
HsfData *temp_r23;
|
||||
MotionData *temp_r22;
|
||||
HsfCluster *var_r29;
|
||||
HsfObject *temp_r31;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
temp_r24 = arg0->unk_10[i];
|
||||
if (temp_r24 != -1) {
|
||||
temp_r22 = &Hu3DMotion[temp_r24];
|
||||
temp_r27 = temp_r22->unk_04;
|
||||
temp_r23 = arg0->hsfData;
|
||||
var_r29 = temp_r27->cluster;
|
||||
for (j = 0; j < temp_r27->clusterCnt; j++, var_r29++) {
|
||||
if (var_r29->target != -1) {
|
||||
temp_r31 = temp_r23->object;
|
||||
temp_r31 += var_r29->target;
|
||||
Vertextop = temp_r31->data.vertex->data;
|
||||
if (temp_r31->data.hook) {
|
||||
for (k = 0; k < temp_r31->data.vertex->count; k++) {
|
||||
Vertextop[k].x = ((Vec*) temp_r31->data.file[0])[k].x;
|
||||
Vertextop[k].y = ((Vec*) temp_r31->data.file[0])[k].y;
|
||||
Vertextop[k].z = ((Vec*) temp_r31->data.file[0])[k].z;
|
||||
}
|
||||
}
|
||||
SetClusterMain(var_r29);
|
||||
DCStoreRangeNoSync(Vertextop, temp_r31->data.vertex->count * sizeof(Vec));
|
||||
temp_r31->data.unk120[0]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClusterMotionExec(ModelData *arg0) {
|
||||
float temp_f31;
|
||||
s32 i;
|
||||
s32 j;
|
||||
s16 var_r20;
|
||||
HsfCluster *temp_r26;
|
||||
HsfData *temp_r28;
|
||||
HsfMotion *temp_r27;
|
||||
HsfTrack *var_r31;
|
||||
HsfTrack *var_r30;
|
||||
MotionData *var_r23;
|
||||
|
||||
var_r31 = temp_r27->track;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (arg0->unk_10[i] != -1) {
|
||||
var_r20 = arg0->unk_10[i];
|
||||
var_r23 = &Hu3DMotion[var_r20];
|
||||
temp_r28 = var_r23->unk_04;
|
||||
temp_r27 = temp_r28->motion;
|
||||
var_r31 = temp_r27->track;
|
||||
temp_f31 = arg0->unk_A4[i];
|
||||
for (j = 0; j < temp_r27->numTracks; j++, var_r31++) {
|
||||
switch (var_r31->type) {
|
||||
case 5:
|
||||
temp_r26 = &temp_r28->cluster[var_r31->target_s16];
|
||||
temp_r26->unk10 = GetClusterCurve(var_r31, temp_f31);
|
||||
break;
|
||||
case 6:
|
||||
var_r30 = var_r31;
|
||||
temp_r26 = &temp_r28->cluster[var_r30->target_s16];
|
||||
temp_r26->unk14[var_r30->unk04] = GetClusterCurve(var_r30, temp_f31);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
463
src/game/EnvelopeExec.c
Normal file
463
src/game/EnvelopeExec.c
Normal file
|
|
@ -0,0 +1,463 @@
|
|||
#include "game/EnvelopeExec.h"
|
||||
#include "game/hsfex.h"
|
||||
|
||||
#include "string.h"
|
||||
|
||||
static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2);
|
||||
static void SetEnvelopMain(HsfData *arg0);
|
||||
static void SetEnvelop(HsfCenv *arg0);
|
||||
static void SetMtx(HsfObject *arg0, Mtx arg1);
|
||||
static void SetRevMtx(void);
|
||||
static HsfSkeleton *SearchSklenton(char *arg0);
|
||||
|
||||
Vec *Vertextop;
|
||||
Mtx *MtxTop;
|
||||
static u32 nObj;
|
||||
static u32 nMesh;
|
||||
static HsfObject *objtop;
|
||||
static HsfData *CurHsf;
|
||||
static Vec *vtxenv;
|
||||
static Vec *normenv;
|
||||
static Vec *normtop;
|
||||
static s32 Meshcnt;
|
||||
static s32 Meshno;
|
||||
|
||||
void InitEnvelope(HsfData *arg0) {
|
||||
HsfBuffer *spC;
|
||||
HsfBuffer *sp8;
|
||||
HsfMatrix *temp_r28;
|
||||
HsfObject *var_r31;
|
||||
HsfSkeleton *var_r30;
|
||||
Mtx sp10;
|
||||
s32 i;
|
||||
s32 j;
|
||||
|
||||
if (arg0->cenvCnt != 0) {
|
||||
var_r31 = arg0->object;
|
||||
for (Meshcnt = i = 0; i < arg0->objectCnt; i++, var_r31++) {
|
||||
if (var_r31->type == 2) {
|
||||
if (var_r31->data.file[0]) {
|
||||
spC = var_r31->data.vertex;
|
||||
sp8 = var_r31->data.normal;
|
||||
Meshcnt++;
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
var_r30 = arg0->skeleton;
|
||||
for (j = 0; j < arg0->skeletonCnt; j++, var_r30++) {
|
||||
if (strcmp(var_r31->name, var_r30->name) == 0) {
|
||||
var_r31->data.base.pos.x = var_r30->transform.pos.x;
|
||||
var_r31->data.base.pos.y = var_r30->transform.pos.y;
|
||||
var_r31->data.base.pos.z = var_r30->transform.pos.z;
|
||||
var_r31->data.base.rot.x = var_r30->transform.rot.x;
|
||||
var_r31->data.base.rot.y = var_r30->transform.rot.y;
|
||||
var_r31->data.base.rot.z = var_r30->transform.rot.z;
|
||||
var_r31->data.base.scale.x = var_r30->transform.scale.x;
|
||||
var_r31->data.base.scale.y = var_r30->transform.scale.y;
|
||||
var_r31->data.base.scale.z = var_r30->transform.scale.z;
|
||||
}
|
||||
}
|
||||
var_r31->data.curr.pos.x = var_r31->data.base.pos.x;
|
||||
var_r31->data.curr.pos.y = var_r31->data.base.pos.y;
|
||||
var_r31->data.curr.pos.z = var_r31->data.base.pos.z;
|
||||
var_r31->data.curr.rot.x = var_r31->data.base.rot.x;
|
||||
var_r31->data.curr.rot.y = var_r31->data.base.rot.y;
|
||||
var_r31->data.curr.rot.z = var_r31->data.base.rot.z;
|
||||
var_r31->data.curr.scale.x = var_r31->data.base.scale.x;
|
||||
var_r31->data.curr.scale.y = var_r31->data.base.scale.y;
|
||||
var_r31->data.curr.scale.z = var_r31->data.base.scale.z;
|
||||
}
|
||||
CurHsf = arg0;
|
||||
objtop = arg0->object;
|
||||
temp_r28 = CurHsf->matrix;
|
||||
if (temp_r28) {
|
||||
MtxTop = temp_r28->data;
|
||||
nObj = temp_r28->count;
|
||||
nMesh = temp_r28->base_idx;
|
||||
}
|
||||
PSMTXIdentity(sp10);
|
||||
SetMtx(arg0->root, sp10);
|
||||
SetRevMtx();
|
||||
}
|
||||
}
|
||||
|
||||
static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) {
|
||||
Mtx sp6C;
|
||||
Mtx sp3C;
|
||||
Mtx spC;
|
||||
s32 var_r29;
|
||||
s32 i;
|
||||
|
||||
PSMTXTrans(spC, arg1->data.curr.pos.x, arg1->data.curr.pos.y, arg1->data.curr.pos.z);
|
||||
PSMTXConcat(arg2, spC, sp3C);
|
||||
if (arg1->data.curr.rot.z) {
|
||||
PSMTXRotRad(sp6C, 'z', MTXDegToRad(arg1->data.curr.rot.z));
|
||||
PSMTXConcat(sp3C, sp6C, sp3C);
|
||||
}
|
||||
if (arg1->data.curr.rot.y) {
|
||||
PSMTXRotRad(sp6C, 'y', MTXDegToRad(arg1->data.curr.rot.y));
|
||||
PSMTXConcat(sp3C, sp6C, sp3C);
|
||||
}
|
||||
if (arg1->data.curr.rot.x) {
|
||||
PSMTXRotRad(sp6C, 'x', MTXDegToRad(arg1->data.curr.rot.x));
|
||||
PSMTXConcat(sp3C, sp6C, sp3C);
|
||||
}
|
||||
if (arg1->data.curr.scale.x != 1.0f) {
|
||||
sp3C[0][0] *= arg1->data.curr.scale.x;
|
||||
sp3C[1][0] *= arg1->data.curr.scale.x;
|
||||
sp3C[2][0] *= arg1->data.curr.scale.x;
|
||||
}
|
||||
if (arg1->data.curr.scale.y != 1.0f) {
|
||||
sp3C[0][1] *= arg1->data.curr.scale.y;
|
||||
sp3C[1][1] *= arg1->data.curr.scale.y;
|
||||
sp3C[2][1] *= arg1->data.curr.scale.y;
|
||||
}
|
||||
if (arg1->data.curr.scale.z != 1.0f) {
|
||||
sp3C[0][2] *= arg1->data.curr.scale.z;
|
||||
sp3C[1][2] *= arg1->data.curr.scale.z;
|
||||
sp3C[2][2] *= arg1->data.curr.scale.z;
|
||||
}
|
||||
var_r29 = arg1 - arg0;
|
||||
PSMTXCopy(sp3C, MtxTop[nMesh + var_r29]);
|
||||
for (i = 0; i < arg1->data.childrenCount; i++) {
|
||||
SetEnvelopMtx(arg0, arg1->data.children[i], sp3C);
|
||||
}
|
||||
}
|
||||
|
||||
void EnvelopeProc(HsfData *arg0) {
|
||||
HsfMatrix *temp_r31;
|
||||
HsfObject *temp_r29;
|
||||
Mtx sp8;
|
||||
|
||||
CurHsf = arg0;
|
||||
temp_r31 = CurHsf->matrix;
|
||||
MtxTop = temp_r31->data;
|
||||
nObj = temp_r31->count;
|
||||
nMesh = temp_r31->base_idx;
|
||||
temp_r29 = arg0->root;
|
||||
PSMTXIdentity(sp8);
|
||||
SetEnvelopMtx(arg0->object, temp_r29, sp8);
|
||||
SetEnvelopMain(arg0);
|
||||
}
|
||||
|
||||
void InitVtxParm(HsfData *arg0) {
|
||||
HsfObject *var_r31;
|
||||
s32 i;
|
||||
|
||||
var_r31 = arg0->object;
|
||||
for (i = 0; i < arg0->objectCnt; i++, var_r31++) {
|
||||
if (var_r31->type == 2) {
|
||||
var_r31->data.unk120[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SetEnvelopMain(HsfData *arg0) {
|
||||
void *sp10;
|
||||
void *spC;
|
||||
void *sp8;
|
||||
HsfBuffer *temp_r28;
|
||||
HsfBuffer *temp_r30;
|
||||
HsfObject *var_r31;
|
||||
s32 i;
|
||||
s32 j;
|
||||
HsfCenv *var_r25;
|
||||
|
||||
var_r31 = arg0->object;
|
||||
for (Meshno = i = 0; i < arg0->objectCnt; i++, var_r31++) {
|
||||
if (var_r31->type == 2) {
|
||||
PSMTXInverse(MtxTop[&var_r31[nMesh] - arg0->object], MtxTop[Meshno]);
|
||||
temp_r30 = var_r31->data.vertex;
|
||||
temp_r28 = var_r31->data.normal;
|
||||
if (var_r31->data.unk120[0] != 0) {
|
||||
Vertextop = temp_r30->data;
|
||||
} else {
|
||||
Vertextop = var_r31->data.file[0];
|
||||
}
|
||||
vtxenv = temp_r30->data;
|
||||
normtop = var_r31->data.file[1];
|
||||
normenv = temp_r28->data;
|
||||
var_r25 = var_r31->data.cenv;
|
||||
for (j = 0; j < var_r31->data.hook; j++, var_r25++) {
|
||||
SetEnvelop(var_r25);
|
||||
}
|
||||
sp10 = temp_r30->data;
|
||||
spC = var_r31->data.file[0];
|
||||
sp8 = temp_r30->data;
|
||||
DCStoreRangeNoSync(normenv, temp_r28->count * sizeof(Vec));
|
||||
DCStoreRangeNoSync(vtxenv, temp_r30->count * sizeof(Vec));
|
||||
Meshno++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SetEnvelop(HsfCenv *arg0) {
|
||||
Vec sp44;
|
||||
Vec sp38;
|
||||
Vec sp2C;
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
s32 sp10;
|
||||
u32 spC;
|
||||
u32 sp8;
|
||||
HsfCenvDual *var_r20;
|
||||
HsfCenvDualWeight *var_r30;
|
||||
HsfCenvMulti *var_r19;
|
||||
HsfCenvMultiWeight *var_r25;
|
||||
HsfCenvSingle *var_r27;
|
||||
Vec *temp_r22;
|
||||
Vec *temp_r26;
|
||||
Vec *temp_r28;
|
||||
Vec *temp_r31;
|
||||
float temp_f31;
|
||||
MtxPtr var_r29;
|
||||
s32 temp_r18;
|
||||
s32 temp_r21;
|
||||
s32 i;
|
||||
s32 j;
|
||||
Mtx sp1A0;
|
||||
Mtx sp170;
|
||||
Mtx sp140;
|
||||
Mtx sp110;
|
||||
Mtx spE0;
|
||||
Mtx spB0;
|
||||
Mtx sp80;
|
||||
Mtx sp50;
|
||||
|
||||
var_r27 = arg0->singleData;
|
||||
for (i = 0; i < arg0->singleCount; i++, var_r27++) {
|
||||
temp_r18 = var_r27->normal;
|
||||
temp_r21 = var_r27->pos;
|
||||
temp_r28 = &vtxenv[temp_r21];
|
||||
temp_r31 = &Vertextop[temp_r21];
|
||||
temp_r22 = &normenv[temp_r18];
|
||||
temp_r26 = &normtop[temp_r18];
|
||||
PSMTXConcat(MtxTop[nMesh + var_r27->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r27->target], sp140);
|
||||
PSMTXConcat(MtxTop[Meshno], sp140, sp1A0);
|
||||
Hu3DMtxScaleGet(&sp1A0[0], &sp14);
|
||||
if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) {
|
||||
PSMTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
|
||||
PSMTXConcat(spE0, sp1A0, sp170);
|
||||
PSMTXInvXpose(sp170, sp170);
|
||||
} else {
|
||||
PSMTXInvXpose(sp1A0, sp170);
|
||||
}
|
||||
if (var_r27->posCnt == 1) {
|
||||
PSMTXMultVec(sp1A0, temp_r31, temp_r28);
|
||||
PSMTXMultVec(sp170, temp_r26, temp_r22);
|
||||
} else if (var_r27->posCnt <= 6) {
|
||||
PSMTXMultVecArray(sp1A0, temp_r31, temp_r28, var_r27->posCnt);
|
||||
PSMTXMultVecArray(sp170, temp_r26, temp_r22, var_r27->normalCnt);
|
||||
} else {
|
||||
PSMTXReorder(sp1A0, (ROMtxPtr) sp140);
|
||||
PSMTXReorder(sp170, (ROMtxPtr) sp110);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r27->posCnt);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp110, temp_r26, temp_r22, var_r27->normalCnt);
|
||||
}
|
||||
}
|
||||
var_r20 = arg0->dualData;
|
||||
for (i = 0; i < arg0->dualCount; i++, var_r20++) {
|
||||
spC = var_r20->target1;
|
||||
sp8 = var_r20->target2;
|
||||
PSMTXConcat(MtxTop[nMesh + spC], MtxTop[nMesh + nObj + nObj * Meshno + spC], sp140);
|
||||
PSMTXConcat(MtxTop[Meshno], sp140, sp1A0);
|
||||
PSMTXConcat(MtxTop[nMesh + sp8], MtxTop[nMesh + nObj + nObj * Meshno + sp8], sp140);
|
||||
PSMTXConcat(MtxTop[Meshno], sp140, (float (*)[4]) &spB0[0]);
|
||||
var_r30 = var_r20->weight;
|
||||
for (j = 0; j < var_r20->weightCnt; j++, var_r30++) {
|
||||
temp_r18 = var_r30->normal;
|
||||
temp_r21 = var_r30->pos;
|
||||
temp_r28 = &vtxenv[temp_r21];
|
||||
temp_r31 = &Vertextop[temp_r21];
|
||||
temp_r22 = &normenv[temp_r18];
|
||||
temp_r26 = &normtop[temp_r18];
|
||||
temp_f31 = var_r30->weight;
|
||||
sp140[0][0] = sp1A0[0][0] * temp_f31;
|
||||
sp140[1][0] = sp1A0[1][0] * temp_f31;
|
||||
sp140[2][0] = sp1A0[2][0] * temp_f31;
|
||||
sp140[0][1] = sp1A0[0][1] * temp_f31;
|
||||
sp140[1][1] = sp1A0[1][1] * temp_f31;
|
||||
sp140[2][1] = sp1A0[2][1] * temp_f31;
|
||||
sp140[0][2] = sp1A0[0][2] * temp_f31;
|
||||
sp140[1][2] = sp1A0[1][2] * temp_f31;
|
||||
sp140[2][2] = sp1A0[2][2] * temp_f31;
|
||||
sp140[0][3] = sp1A0[0][3] * temp_f31;
|
||||
sp140[1][3] = sp1A0[1][3] * temp_f31;
|
||||
sp140[2][3] = sp1A0[2][3] * temp_f31;
|
||||
temp_f31 = 1.0f - var_r30->weight;
|
||||
sp110[0][0] = spB0[0][0] * temp_f31;
|
||||
sp110[1][0] = spB0[1][0] * temp_f31;
|
||||
sp110[2][0] = spB0[2][0] * temp_f31;
|
||||
sp110[0][1] = spB0[0][1] * temp_f31;
|
||||
sp110[1][1] = spB0[1][1] * temp_f31;
|
||||
sp110[2][1] = spB0[2][1] * temp_f31;
|
||||
sp110[0][2] = spB0[0][2] * temp_f31;
|
||||
sp110[1][2] = spB0[1][2] * temp_f31;
|
||||
sp110[2][2] = spB0[2][2] * temp_f31;
|
||||
sp110[0][3] = spB0[0][3] * temp_f31;
|
||||
sp110[1][3] = spB0[1][3] * temp_f31;
|
||||
sp110[2][3] = spB0[2][3] * temp_f31;
|
||||
if (sp80 == sp110 || sp80 == sp140) {
|
||||
var_r29 = sp50;
|
||||
} else {
|
||||
var_r29 = sp80;
|
||||
}
|
||||
var_r29[0][0] = sp110[0][0] + sp140[0][0];
|
||||
var_r29[0][1] = sp110[0][1] + sp140[0][1];
|
||||
var_r29[0][2] = sp110[0][2] + sp140[0][2];
|
||||
var_r29[0][3] = sp110[0][3] + sp140[0][3];
|
||||
var_r29[1][0] = sp110[1][0] + sp140[1][0];
|
||||
var_r29[1][1] = sp110[1][1] + sp140[1][1];
|
||||
var_r29[1][2] = sp110[1][2] + sp140[1][2];
|
||||
var_r29[1][3] = sp110[1][3] + sp140[1][3];
|
||||
var_r29[2][0] = sp110[2][0] + sp140[2][0];
|
||||
var_r29[2][1] = sp110[2][1] + sp140[2][1];
|
||||
var_r29[2][2] = sp110[2][2] + sp140[2][2];
|
||||
var_r29[2][3] = sp110[2][3] + sp140[2][3];
|
||||
if (var_r29 == sp50) {
|
||||
PSMTXCopy(sp50, sp80);
|
||||
}
|
||||
Hu3DMtxScaleGet(&sp80[0], &sp14);
|
||||
if (sp14.x != 1.0f || sp14.y != 1.0f || sp14.z != 1.0f) {
|
||||
PSMTXScale(spE0, 1.0 / sp14.x, 1.0 / sp14.y, 1.0 / sp14.z);
|
||||
PSMTXConcat(spE0, sp80, sp110);
|
||||
PSMTXInvXpose(sp110, sp110);
|
||||
} else {
|
||||
PSMTXInvXpose(sp80, sp110);
|
||||
}
|
||||
if (var_r30->posCnt == 1) {
|
||||
PSMTXMultVec(sp80, temp_r31, temp_r28);
|
||||
} else if (var_r30->posCnt <= 6) {
|
||||
PSMTXMultVecArray(sp80, temp_r31, temp_r28, var_r30->posCnt);
|
||||
} else {
|
||||
PSMTXReorder(sp80, (ROMtxPtr) sp140);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r31, temp_r28, var_r30->posCnt);
|
||||
}
|
||||
if (var_r30->normalCnt != 0) {
|
||||
if (var_r30->normalCnt == 1) {
|
||||
PSMTXMultVec(sp110, temp_r26, temp_r22);
|
||||
} else if (var_r30->normalCnt <= 6) {
|
||||
PSMTXMultVecArray(sp110, temp_r26, temp_r22, var_r30->normalCnt);
|
||||
} else {
|
||||
PSMTXReorder(sp110, (ROMtxPtr) sp140);
|
||||
PSMTXROMultVecArray((ROMtxPtr) sp140, temp_r26, temp_r22, var_r30->normalCnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var_r19 = arg0->multiData;
|
||||
for (i = 0; i < arg0->multiCount; i++, var_r19++) {
|
||||
var_r25 = var_r19->weight;
|
||||
temp_r18 = var_r19->normal;
|
||||
temp_r21 = var_r19->pos;
|
||||
temp_r28 = &vtxenv[temp_r21];
|
||||
temp_r31 = &Vertextop[temp_r21];
|
||||
temp_r22 = &normenv[temp_r18];
|
||||
temp_r26 = &normtop[temp_r18];
|
||||
sp38.x = sp38.y = sp38.z = 0.0f;
|
||||
sp20.x = sp20.y = sp20.z = 0.0f;
|
||||
sp10 = 0;
|
||||
for (j = 0; j < var_r19->weightCnt; j++, var_r25++) {
|
||||
PSMTXConcat(MtxTop[nMesh + var_r25->target], MtxTop[nMesh + nObj + nObj * Meshno + var_r25->target], sp1A0);
|
||||
PSMTXConcat(MtxTop[Meshno], sp1A0, sp1A0);
|
||||
PSMTXInvXpose(sp1A0, sp170);
|
||||
PSMTXMultVec(sp1A0, temp_r31, &sp44);
|
||||
PSMTXMultVec(sp170, temp_r26, &sp2C);
|
||||
sp44.x = var_r25->value * (sp44.x - temp_r31->x);
|
||||
sp44.y = var_r25->value * (sp44.y - temp_r31->y);
|
||||
sp44.z = var_r25->value * (sp44.z - temp_r31->z);
|
||||
PSVECAdd(&sp38, &sp44, &sp38);
|
||||
sp2C.x = var_r25->value * (sp2C.x - temp_r26->x);
|
||||
sp2C.y = var_r25->value * (sp2C.y - temp_r26->y);
|
||||
sp2C.z = var_r25->value * (sp2C.z - temp_r26->z);
|
||||
PSVECAdd(&sp20, &sp2C, &sp20);
|
||||
}
|
||||
temp_r28->x = temp_r31->x + sp38.x;
|
||||
temp_r28->y = temp_r31->y + sp38.y;
|
||||
temp_r28->z = temp_r31->z + sp38.z;
|
||||
temp_r22->x = temp_r26->x + sp20.x;
|
||||
temp_r22->y = temp_r26->y + sp20.y;
|
||||
temp_r22->z = temp_r26->z + sp20.z;
|
||||
}
|
||||
temp_r21 = arg0->vtxCount;
|
||||
temp_r28 = &vtxenv[temp_r21];
|
||||
temp_r31 = &Vertextop[temp_r21];
|
||||
for (i = 0; i < arg0->copyCount; i++, temp_r28++, temp_r31++) {
|
||||
temp_r28->x = temp_r31->x;
|
||||
temp_r28->y = temp_r31->y;
|
||||
temp_r28->z = temp_r31->z;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetMtx(HsfObject *arg0, Mtx arg1) {
|
||||
HsfSkeleton *temp_r3;
|
||||
Mtx spFC;
|
||||
Mtx spCC;
|
||||
Mtx sp9C;
|
||||
s32 temp_r25;
|
||||
s32 i;
|
||||
|
||||
temp_r3 = SearchSklenton(arg0->name);
|
||||
if (temp_r3) {
|
||||
arg0->data.base.pos.x = temp_r3->transform.pos.x;
|
||||
arg0->data.base.pos.y = temp_r3->transform.pos.y;
|
||||
arg0->data.base.pos.z = temp_r3->transform.pos.z;
|
||||
arg0->data.base.rot.x = temp_r3->transform.rot.x;
|
||||
arg0->data.base.rot.y = temp_r3->transform.rot.y;
|
||||
arg0->data.base.rot.z = temp_r3->transform.rot.z;
|
||||
arg0->data.base.scale.x = temp_r3->transform.scale.x;
|
||||
arg0->data.base.scale.y = temp_r3->transform.scale.y;
|
||||
arg0->data.base.scale.z = temp_r3->transform.scale.z;
|
||||
}
|
||||
PSMTXTrans(spFC, arg0->data.base.pos.x, arg0->data.base.pos.y, arg0->data.base.pos.z);
|
||||
PSMTXScale(spCC, arg0->data.base.scale.x, arg0->data.base.scale.y, arg0->data.base.scale.z);
|
||||
PSMTXConcat(arg1, spFC, spFC);
|
||||
PSMTXRotRad(sp9C, 'z', MTXDegToRad(arg0->data.base.rot.z));
|
||||
PSMTXConcat(spFC, sp9C, spFC);
|
||||
PSMTXRotRad(sp9C, 'y', MTXDegToRad(arg0->data.base.rot.y));
|
||||
PSMTXConcat(spFC, sp9C, spFC);
|
||||
PSMTXRotRad(sp9C, 'x', MTXDegToRad(arg0->data.base.rot.x));
|
||||
PSMTXConcat(spFC, sp9C, spFC);
|
||||
PSMTXConcat(spFC, spCC, spFC);
|
||||
temp_r25 = arg0 - objtop;
|
||||
PSMTXCopy(spFC, MtxTop[nMesh + temp_r25]);
|
||||
for (i = 0; i < arg0->data.childrenCount; i++) {
|
||||
SetMtx(arg0->data.children[i], spFC);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetRevMtx(void) {
|
||||
HsfObject *var_r29;
|
||||
s32 var_r28;
|
||||
s32 i;
|
||||
s32 var_r30;
|
||||
Mtx sp38;
|
||||
Mtx sp8;
|
||||
|
||||
var_r29 = CurHsf->object;
|
||||
for (var_r28 = i = 0; i < CurHsf->objectCnt; i++, var_r29++) {
|
||||
if (var_r29->type == 2) {
|
||||
PSMTXCopy(MtxTop[nMesh + i], sp8);
|
||||
for (var_r30 = 0; var_r30 < CurHsf->objectCnt; var_r30++) {
|
||||
PSMTXInverse(MtxTop[nMesh + var_r30], sp38);
|
||||
PSMTXConcat(sp38, sp8, MtxTop[nMesh + nObj + nObj * var_r28 + var_r30]);
|
||||
}
|
||||
PSMTXInverse(MtxTop[nMesh + i], sp8);
|
||||
var_r28++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static HsfSkeleton *SearchSklenton(char *arg0) {
|
||||
HsfSkeleton *var_r31;
|
||||
s32 i;
|
||||
|
||||
var_r31 = CurHsf->skeleton;
|
||||
for (i = 0; i < CurHsf->skeletonCnt; i++, var_r31++) {
|
||||
if (strcmp(arg0, var_r31->name) == 0) {
|
||||
return var_r31;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
69
src/game/ShapeExec.c
Executable file
69
src/game/ShapeExec.c
Executable file
|
|
@ -0,0 +1,69 @@
|
|||
#include "game/ShapeExec.h"
|
||||
#include "game/EnvelopeExec.h"
|
||||
|
||||
static void SetShapeMain(HsfObject *arg0) {
|
||||
HsfBuffer *temp_r28;
|
||||
HsfBuffer *temp_r30;
|
||||
float var_f30;
|
||||
float var_f31;
|
||||
s32 temp_r27;
|
||||
s32 var_r29;
|
||||
s32 var_r26;
|
||||
s32 i;
|
||||
|
||||
if (arg0->data.shapeType == 2) {
|
||||
var_f30 = 0.0f;
|
||||
for (i = 0; i < arg0->data.vertexShapeCnt; i++) {
|
||||
var_f30 += arg0->data.mesh.morphWeight[i];
|
||||
}
|
||||
temp_r30 = *arg0->data.vertexShape;
|
||||
for (i = 0; i < temp_r30->count; i++) {
|
||||
Vertextop[i].x = ((Vec*) temp_r30->data)[i].x;
|
||||
Vertextop[i].y = ((Vec*) temp_r30->data)[i].y;
|
||||
Vertextop[i].z = ((Vec*) temp_r30->data)[i].z;
|
||||
}
|
||||
for (i = 0; i < arg0->data.vertexShapeCnt; i++) {
|
||||
temp_r30 = arg0->data.vertexShape[i];
|
||||
var_f31 = arg0->data.mesh.morphWeight[i];
|
||||
if (var_f31 < 0.0f) {
|
||||
var_f31 = 0.0f;
|
||||
} else if (var_f30 > 1.0f) {
|
||||
var_f31 /= var_f30;
|
||||
}
|
||||
for (var_r29 = 0; var_r29 < temp_r30->count; var_r29++) {
|
||||
Vertextop[var_r29].x += var_f31 * (((Vec*) temp_r30->data)[var_r29].x - Vertextop[var_r29].x);
|
||||
Vertextop[var_r29].y += var_f31 * (((Vec*) temp_r30->data)[var_r29].y - Vertextop[var_r29].y);
|
||||
Vertextop[var_r29].z += var_f31 * (((Vec*) temp_r30->data)[var_r29].z - Vertextop[var_r29].z);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
temp_r27 = arg0->data.mesh.baseMorph;
|
||||
var_r26 = temp_r27 + 1;
|
||||
if (var_r26 >= arg0->data.vertexShapeCnt) {
|
||||
var_r26 = temp_r27;
|
||||
}
|
||||
var_f31 = arg0->data.mesh.baseMorph - temp_r27;
|
||||
temp_r30 = arg0->data.vertexShape[temp_r27];
|
||||
temp_r28 = arg0->data.vertexShape[var_r26];
|
||||
for (i = 0; i < temp_r30->count; i++) {
|
||||
Vertextop[i].x = ((Vec*) temp_r30->data)[i].x + var_f31 * (((Vec*) temp_r28->data)[i].x - ((Vec*) temp_r30->data)[i].x);
|
||||
Vertextop[i].y = ((Vec*) temp_r30->data)[i].y + var_f31 * (((Vec*) temp_r28->data)[i].y - ((Vec*) temp_r30->data)[i].y);
|
||||
Vertextop[i].z = ((Vec*) temp_r30->data)[i].z + var_f31 * (((Vec*) temp_r28->data)[i].z - ((Vec*) temp_r30->data)[i].z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShapeProc(HsfData *arg0) {
|
||||
HsfObject *var_r31;
|
||||
s32 i;
|
||||
|
||||
var_r31 = arg0->object;
|
||||
for (i = 0; i < arg0->objectCnt; i++, var_r31++) {
|
||||
if (var_r31->type == 2 && var_r31->data.vertexShapeCnt != 0) {
|
||||
Vertextop = var_r31->data.vertex->data;
|
||||
SetShapeMain(var_r31);
|
||||
DCStoreRange(Vertextop, var_r31->data.vertex->count * sizeof(Vec));
|
||||
var_r31->data.unk120[0]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
109
src/game/THPDraw.c
Executable file
109
src/game/THPDraw.c
Executable file
|
|
@ -0,0 +1,109 @@
|
|||
#include "game/THPDraw.h"
|
||||
|
||||
void THPGXRestore(void) {
|
||||
GXSetZMode(GX_TRUE, GX_ALWAYS, GX_FALSE);
|
||||
GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetNumChans(0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE1, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE2, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE3, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA);
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA);
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_1);
|
||||
GXSetTevKAlphaSel(GX_TEVSTAGE1, GX_TEV_KASEL_1);
|
||||
}
|
||||
|
||||
void THPGXYuv2RgbSetup(GXRenderModeObj *obj, GXColor *arg1, Mtx arg2) {
|
||||
s32 sp2C = obj->fbWidth;
|
||||
s32 sp28 = obj->efbHeight;
|
||||
|
||||
GXLoadPosMtxImm(arg2, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
||||
GXSetColorUpdate(GX_TRUE);
|
||||
GXSetAlphaUpdate(GX_FALSE);
|
||||
GXSetNumChans(0);
|
||||
GXSetNumTexGens(2);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
|
||||
GXInvalidateTexAll();
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT7, GX_VA_POS, GX_TEX_ST, GX_RGBA4, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT7, GX_VA_TEX0, GX_TEX_ST, GX_RGBX8, 0);
|
||||
GXSetNumTevStages(5);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_KONST, GX_CC_C0);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_KONST, GX_CA_A0);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_SUB, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
|
||||
GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0);
|
||||
GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_K0_A);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP2, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_KONST, GX_CC_CPREV);
|
||||
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_2, GX_FALSE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_KONST, GX_CA_APREV);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_SUB, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV);
|
||||
GXSetTevKColorSel(GX_TEVSTAGE1, GX_TEV_KCSEL_K1);
|
||||
GXSetTevKAlphaSel(GX_TEVSTAGE1, GX_TEV_KASEL_K1_A);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE1, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ONE, GX_CC_CPREV);
|
||||
GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE2, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_APREV, GX_CC_CPREV, GX_CC_KONST, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE3, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevKColorSel(GX_TEVSTAGE3, GX_TEV_KCSEL_K2);
|
||||
GXSetTevColor(GX_TEVREG1, *arg1);
|
||||
GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE4, GX_CC_ZERO, GX_CC_CPREV, GX_CC_C1, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE4, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A1);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevColorS10(GX_TEVREG0, (GXColorS10) { 0xFFA6, 0, 0xFF8E, 0x0087 });
|
||||
GXSetTevKColor(GX_KCOLOR0, (GXColor) { 0, 0, 0xE2, 0x58 });
|
||||
GXSetTevKColor(GX_KCOLOR1, (GXColor) { 0xB3, 0, 0, 0xB6 });
|
||||
GXSetTevKColor(GX_KCOLOR2, (GXColor) { 0xFF, 0, 0xFF, 0x80 });
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
}
|
||||
|
||||
void THPGXYuv2RgbDraw(u32 *yImage, u32 *uImage, u32 *vImage, s16 x, s16 y, s16 texWidth, s16 texHeight, s16 polyWidth, s16 polyHeight) {
|
||||
GXTexObj sp54;
|
||||
GXTexObj sp34;
|
||||
GXTexObj sp14;
|
||||
|
||||
GXInitTexObj(&sp54, yImage, texWidth, texHeight, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&sp54, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
GXLoadTexObj(&sp54, GX_TEXMAP0);
|
||||
GXInitTexObj(&sp34, uImage, texWidth >> 1, texHeight >> 1, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&sp34, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
GXLoadTexObj(&sp34, GX_TEXMAP1);
|
||||
GXInitTexObj(&sp14, vImage, texWidth >> 1, texHeight >> 1, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&sp14, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
GXLoadTexObj(&sp14, GX_TEXMAP2);
|
||||
GXBegin(GX_QUADS, GX_VTXFMT7, 4);
|
||||
GXPosition3s16(x, y, 0);
|
||||
GXTexCoord2s16(0, 0);
|
||||
GXPosition3s16(x + polyWidth, y, 0);
|
||||
GXTexCoord2s16(1, 0);
|
||||
GXPosition3s16(x + polyWidth, y + polyHeight, 0);
|
||||
GXTexCoord2s16(1, 1);
|
||||
GXPosition3s16(x, y + polyHeight, 0);
|
||||
GXTexCoord2s16(0, 1);
|
||||
GXEnd();
|
||||
}
|
||||
657
src/game/THPSimple.c
Executable file
657
src/game/THPSimple.c
Executable file
|
|
@ -0,0 +1,657 @@
|
|||
#include "game/THPSimple.h"
|
||||
#include "game/THPDraw.h"
|
||||
|
||||
#define ALIGN32(val) (((val) + 0x1F) & ~0x1F)
|
||||
|
||||
static void __THPSimpleDVDCallback(s32 result, DVDFileInfo *fileInfo);
|
||||
static s32 VideoDecode(void *arg0);
|
||||
static void THPAudioMixCallback(void);
|
||||
|
||||
UnkThpStruct10 SimpleControl;
|
||||
static u8 SoundBuffer[2][0x280];
|
||||
static u8 WorkBuffer[0x40];
|
||||
|
||||
static s32 SoundBufferIndex;
|
||||
static void *LastAudioBuffer;
|
||||
static void *CurAudioBuffer;
|
||||
static s32 bufIdx;
|
||||
static s32 AudioSystem;
|
||||
static void (*OldAIDCallback)();
|
||||
static s32 Initialized;
|
||||
|
||||
s32 THPSimpleInit(s32 arg0) {
|
||||
s32 temp_r31;
|
||||
|
||||
memset(&SimpleControl, 0, sizeof(SimpleControl));
|
||||
LCEnable();
|
||||
if (THPInit() == 0) {
|
||||
return 0;
|
||||
}
|
||||
temp_r31 = OSDisableInterrupts();
|
||||
AudioSystem = arg0;
|
||||
SoundBufferIndex = 0;
|
||||
LastAudioBuffer = NULL;
|
||||
CurAudioBuffer = NULL;
|
||||
OldAIDCallback = AIRegisterDMACallback(THPAudioMixCallback);
|
||||
if (OldAIDCallback == NULL && AudioSystem != 0) {
|
||||
AIRegisterDMACallback(NULL);
|
||||
OSRestoreInterrupts(temp_r31);
|
||||
return 0;
|
||||
}
|
||||
OSRestoreInterrupts(temp_r31);
|
||||
if (AudioSystem == 0) {
|
||||
memset(SoundBuffer, 0, sizeof(SoundBuffer));
|
||||
DCFlushRange(SoundBuffer, sizeof(SoundBuffer));
|
||||
AIInitDMA((u32) &SoundBuffer[SoundBufferIndex], sizeof(SoundBuffer[0]));
|
||||
AIStartDMA();
|
||||
}
|
||||
Initialized = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void THPSimpleQuit(void) {
|
||||
s32 temp_r31;
|
||||
|
||||
LCDisable();
|
||||
temp_r31 = OSDisableInterrupts();
|
||||
if (OldAIDCallback) {
|
||||
AIRegisterDMACallback(OldAIDCallback);
|
||||
}
|
||||
OSRestoreInterrupts(temp_r31);
|
||||
Initialized = 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleOpen(char *arg0) {
|
||||
s32 var_r31;
|
||||
s32 i;
|
||||
|
||||
if (Initialized == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (SimpleControl.unk98 != 0) {
|
||||
return 0;
|
||||
}
|
||||
memset(&SimpleControl.unk80, 0, sizeof(SimpleControl.unk80));
|
||||
memset(SimpleControl.unk88, 0, sizeof(SimpleControl.unk88));
|
||||
if (DVDOpen(arg0, &SimpleControl.unk00) == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (DVDReadPrio(&SimpleControl.unk00, &WorkBuffer, 0x40, 0, 2) < 0) {
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 0;
|
||||
}
|
||||
memcpy(&SimpleControl.unk3C, &WorkBuffer, sizeof(SimpleControl.unk3C));
|
||||
if (strcmp(SimpleControl.unk3C.mMagic, "THP") != 0) {
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 0;
|
||||
}
|
||||
if (SimpleControl.unk3C.mVersion != 0x10000) {
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 0;
|
||||
}
|
||||
var_r31 = SimpleControl.unk3C.mCompInfoDataOffsets;
|
||||
if (DVDReadPrio(&SimpleControl.unk00, &WorkBuffer, 0x20, var_r31, 2) < 0) {
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 0;
|
||||
}
|
||||
memcpy(&SimpleControl.unk6C, &WorkBuffer, sizeof(SimpleControl.unk6C));
|
||||
var_r31 += sizeof(SimpleControl.unk6C);
|
||||
SimpleControl.unk9F = 0;
|
||||
for (i = 0; i < SimpleControl.unk6C.mNumComponents; i++) {
|
||||
switch (SimpleControl.unk6C.mFrameComp[i]) {
|
||||
case 0:
|
||||
if (DVDReadPrio(&SimpleControl.unk00, &WorkBuffer, 0x20, var_r31, 2) < 0) {
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 0;
|
||||
}
|
||||
memcpy(&SimpleControl.unk80, &WorkBuffer, sizeof(SimpleControl.unk80));
|
||||
var_r31 += sizeof(SimpleControl.unk80);
|
||||
break;
|
||||
case 1:
|
||||
if (DVDReadPrio(&SimpleControl.unk00, &WorkBuffer, 0x20, var_r31, 2) < 0) {
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 0;
|
||||
}
|
||||
memcpy(SimpleControl.unk88, &WorkBuffer, sizeof(SimpleControl.unk88));
|
||||
SimpleControl.unk9F = 1;
|
||||
var_r31 += sizeof(SimpleControl.unk88);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
SimpleControl.unkA0 = SimpleControl.unk3C.mMovieDataOffsets;
|
||||
SimpleControl.unkB4 = SimpleControl.unk3C.mFirstFrameSize;
|
||||
SimpleControl.unkB0 = 0;
|
||||
SimpleControl.unkB8 = 0;
|
||||
SimpleControl.unkA4 = 0;
|
||||
SimpleControl.unk144[0].unk0C = -1;
|
||||
SimpleControl.unkAC = 0;
|
||||
SimpleControl.unk194 = 0;
|
||||
SimpleControl.unk198 = 0;
|
||||
SimpleControl.unk9C = 0;
|
||||
SimpleControl.unk9D = 0;
|
||||
SimpleControl.unk9E = 0;
|
||||
SimpleControl.unk98 = 1;
|
||||
SimpleControl.unkC0 = SimpleControl.unkBC;
|
||||
SimpleControl.unkC8 = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
s32 THPSimpleClose(void) {
|
||||
if (SimpleControl.unk98 != 0 && SimpleControl.unk9C == 0) {
|
||||
if (SimpleControl.unk9F != 0) {
|
||||
if (SimpleControl.unk9D == 1) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
SimpleControl.unk9D = 0;
|
||||
}
|
||||
if (SimpleControl.unkA8 == 0) {
|
||||
SimpleControl.unk98 = 0;
|
||||
DVDClose(&SimpleControl.unk00);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleCalcNeedMemory(void) {
|
||||
s32 var_r31;
|
||||
|
||||
if (SimpleControl.unk98 != 0) {
|
||||
var_r31 = ALIGN32(SimpleControl.unk3C.mBufferSize) * 10;
|
||||
var_r31 += ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04);
|
||||
var_r31 += ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04 / 4);
|
||||
var_r31 += ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04 / 4);
|
||||
var_r31 += ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04);
|
||||
var_r31 += ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04 / 4);
|
||||
var_r31 += ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04 / 4);
|
||||
if (SimpleControl.unk9F != 0) {
|
||||
var_r31 += ALIGN32(SimpleControl.unk3C.mAudioMaxSamples * 4) * 4;
|
||||
}
|
||||
var_r31 += 0x1000;
|
||||
return var_r31;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleSetBuffer(void *arg0) {
|
||||
u8 *var_r31;
|
||||
u32 temp_r28;
|
||||
u32 temp_r29;
|
||||
u32 i;
|
||||
|
||||
if (SimpleControl.unk98 != 0 && SimpleControl.unk9C == 0) {
|
||||
if (SimpleControl.unk9D == 1) {
|
||||
return 0;
|
||||
}
|
||||
temp_r28 = ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04);
|
||||
temp_r29 = ALIGN32(SimpleControl.unk80.unk00 * SimpleControl.unk80.unk04 / 4);
|
||||
var_r31 = arg0;
|
||||
for (i = 0; i < 2; i++) {
|
||||
SimpleControl.unk144[i].unk00 = var_r31;
|
||||
DCInvalidateRange(var_r31, temp_r28);
|
||||
var_r31 += temp_r28;
|
||||
SimpleControl.unk144[i].unk04 = var_r31;
|
||||
DCInvalidateRange(var_r31, temp_r29);
|
||||
var_r31 += temp_r29;
|
||||
SimpleControl.unk144[i].unk08 = var_r31;
|
||||
DCInvalidateRange(var_r31, temp_r29);
|
||||
var_r31 += temp_r29;
|
||||
}
|
||||
for (i = 0; i < 10; i++) {
|
||||
SimpleControl.unkCC[i].unk00 = (s32*) var_r31;
|
||||
var_r31 += ALIGN32(SimpleControl.unk3C.mBufferSize);
|
||||
SimpleControl.unkCC[i].unk08 = 0;
|
||||
}
|
||||
if (SimpleControl.unk9F != 0) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
SimpleControl.unk164[i].unk00 = var_r31;
|
||||
SimpleControl.unk164[i].unk04 = var_r31;
|
||||
SimpleControl.unk164[i].unk08 = 0;
|
||||
var_r31 += ALIGN32(SimpleControl.unk3C.mAudioMaxSamples * 4);
|
||||
}
|
||||
}
|
||||
SimpleControl.unk94 = var_r31;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void THPSimpleInlineFunc(void) {
|
||||
if (SimpleControl.unkB8 > SimpleControl.unk3C.mNumFrames - 1) {
|
||||
if (SimpleControl.unk9E != 1) {
|
||||
return;
|
||||
}
|
||||
SimpleControl.unkB8 = 0;
|
||||
SimpleControl.unkA0 = SimpleControl.unk3C.mMovieDataOffsets;
|
||||
SimpleControl.unkB4 = SimpleControl.unk3C.mFirstFrameSize;
|
||||
}
|
||||
SimpleControl.unkA8 = 1;
|
||||
if (DVDReadAsyncPrio(&SimpleControl.unk00, SimpleControl.unkCC[SimpleControl.unkB0].unk00, SimpleControl.unkB4, SimpleControl.unkA0, __THPSimpleDVDCallback, 2) != 1) {
|
||||
SimpleControl.unkA8 = 0;
|
||||
SimpleControl.unkA4 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void __THPSimpleDVDCallback(s32 result, DVDFileInfo *fileInfo) {
|
||||
s32 var_r31;
|
||||
|
||||
if (result == -1) {
|
||||
SimpleControl.unkA4 = 1;
|
||||
return;
|
||||
}
|
||||
if (result != -3) {
|
||||
SimpleControl.unkA8 = 0;
|
||||
SimpleControl.unkCC[SimpleControl.unkB0].unk04 = SimpleControl.unkB8;
|
||||
SimpleControl.unkB8++;
|
||||
SimpleControl.unkCC[SimpleControl.unkB0].unk08 = 1;
|
||||
SimpleControl.unkA0 += SimpleControl.unkB4;
|
||||
SimpleControl.unkB4 = *SimpleControl.unkCC[SimpleControl.unkB0].unk00;
|
||||
if (SimpleControl.unkB0 + 1 >= 10) {
|
||||
var_r31 = 0;
|
||||
} else {
|
||||
var_r31 = SimpleControl.unkB0 + 1;
|
||||
}
|
||||
SimpleControl.unkB0 = var_r31;
|
||||
if (SimpleControl.unkCC[SimpleControl.unkB0].unk08 == 0 && SimpleControl.unkA4 == 0 && SimpleControl.unk9C == 1) {
|
||||
THPSimpleInlineFunc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 THPSimplePreLoad(s32 arg0) {
|
||||
u32 var_r30;
|
||||
s32 var_r29;
|
||||
s32 i;
|
||||
|
||||
if (SimpleControl.unk98 != 0 && SimpleControl.unk9C == 0) {
|
||||
var_r30 = 10;
|
||||
if (arg0 == 0 && SimpleControl.unk3C.mNumFrames < 10) {
|
||||
var_r30 = SimpleControl.unk3C.mNumFrames;
|
||||
}
|
||||
for (i = 0; i < var_r30; i++) {
|
||||
if (DVDReadPrio(&SimpleControl.unk00, SimpleControl.unkCC[SimpleControl.unkB0].unk00, SimpleControl.unkB4, SimpleControl.unkA0, 2) < 0) {
|
||||
SimpleControl.unkA4 = 1;
|
||||
return 0;
|
||||
}
|
||||
SimpleControl.unkA0 += SimpleControl.unkB4;
|
||||
SimpleControl.unkB4 = *SimpleControl.unkCC[SimpleControl.unkB0].unk00;
|
||||
SimpleControl.unkCC[SimpleControl.unkB0].unk08 = 1;
|
||||
SimpleControl.unkCC[SimpleControl.unkB0].unk04 = SimpleControl.unkB8;
|
||||
if (SimpleControl.unkB0 + 1 >= 10) {
|
||||
var_r29 = 0;
|
||||
} else {
|
||||
var_r29 = SimpleControl.unkB0 + 1;
|
||||
}
|
||||
SimpleControl.unkB0 = var_r29;
|
||||
SimpleControl.unkB8++;
|
||||
if (SimpleControl.unkB8 > SimpleControl.unk3C.mNumFrames - 1 && SimpleControl.unk9E == 1) {
|
||||
SimpleControl.unkB8 = 0;
|
||||
SimpleControl.unkA0 = SimpleControl.unk3C.mMovieDataOffsets;
|
||||
SimpleControl.unkB4 = SimpleControl.unk3C.mFirstFrameSize;
|
||||
}
|
||||
}
|
||||
SimpleControl.unk9E = arg0;
|
||||
SimpleControl.unk9C = 1;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void THPSimpleAudioStart(void) {
|
||||
SimpleControl.unk9D = 1;
|
||||
}
|
||||
|
||||
void THPSimpleAudioStop(void) {
|
||||
SimpleControl.unk9D = 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleLoadStop(void) {
|
||||
s32 i;
|
||||
|
||||
if (SimpleControl.unk98 != 0 && SimpleControl.unk9D == 0) {
|
||||
SimpleControl.unk9C = 0;
|
||||
if (SimpleControl.unkA8 != 0) {
|
||||
DVDCancel(&SimpleControl.unk00.cb);
|
||||
SimpleControl.unkA8 = 0;
|
||||
}
|
||||
for (i = 0; i < 10; i++) {
|
||||
SimpleControl.unkCC[i].unk08 = 0;
|
||||
}
|
||||
for (i = 0; i < 4; i++) {
|
||||
SimpleControl.unk164[i].unk08 = 0;
|
||||
}
|
||||
SimpleControl.unk144[0].unk0C = -1;
|
||||
SimpleControl.unkA0 = SimpleControl.unk3C.mMovieDataOffsets;
|
||||
SimpleControl.unkB4 = SimpleControl.unk3C.mFirstFrameSize;
|
||||
SimpleControl.unkB0 = 0;
|
||||
SimpleControl.unkB8 = 0;
|
||||
SimpleControl.unkA4 = 0;
|
||||
SimpleControl.unkAC = 0;
|
||||
SimpleControl.unk194 = 0;
|
||||
SimpleControl.unk198 = 0;
|
||||
SimpleControl.unkBC = SimpleControl.unkC0;
|
||||
SimpleControl.unkC8 = 0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleDecode(void) {
|
||||
u8 *var_r29;
|
||||
s32 *var_r30;
|
||||
s32 temp_r27;
|
||||
s32 temp_r26;
|
||||
s32 temp_r25;
|
||||
s32 var_r28;
|
||||
s32 i;
|
||||
|
||||
if (SimpleControl.unkCC[SimpleControl.unkAC].unk08 != 0) {
|
||||
var_r30 = SimpleControl.unkCC[SimpleControl.unkAC].unk00 + 2;
|
||||
var_r29 = (u8*) (&SimpleControl.unkCC[SimpleControl.unkAC].unk00[SimpleControl.unk6C.mNumComponents] + 2);
|
||||
if (SimpleControl.unk9F != 0) {
|
||||
if (SimpleControl.unk164[SimpleControl.unk194].unk08 == 0) {
|
||||
for (i = 0; i < SimpleControl.unk6C.mNumComponents; var_r29 += *var_r30, var_r30++, i++) {
|
||||
switch (SimpleControl.unk6C.mFrameComp[i]) {
|
||||
case 0:
|
||||
if (VideoDecode(var_r29) == 0) {
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
temp_r26 = THPAudioDecode(SimpleControl.unk164[SimpleControl.unk194].unk00, var_r29, 0);
|
||||
temp_r27 = OSDisableInterrupts();
|
||||
SimpleControl.unk164[SimpleControl.unk194].unk08 = temp_r26;
|
||||
SimpleControl.unk164[SimpleControl.unk194].unk04 = SimpleControl.unk164[SimpleControl.unk194].unk00;
|
||||
OSRestoreInterrupts(temp_r27);
|
||||
SimpleControl.unk194++;
|
||||
if (SimpleControl.unk194 >= 4) {
|
||||
SimpleControl.unk194 = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return 3;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < SimpleControl.unk6C.mNumComponents; var_r29 += *var_r30, var_r30++, i++) {
|
||||
if ((s32) SimpleControl.unk6C.mFrameComp[i] != 0) {
|
||||
(void) i; // required to match. Optimized out unreachable code?
|
||||
} else if (VideoDecode(var_r29) == 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
SimpleControl.unkCC[SimpleControl.unkAC].unk08 = 0;
|
||||
if (SimpleControl.unkAC + 1 >= 10) {
|
||||
var_r28 = 0;
|
||||
} else {
|
||||
var_r28 = SimpleControl.unkAC + 1;
|
||||
}
|
||||
SimpleControl.unkAC = var_r28;
|
||||
temp_r25 = OSDisableInterrupts();
|
||||
if (SimpleControl.unkCC[SimpleControl.unkB0].unk08 == 0 && SimpleControl.unkA8 == 0 && SimpleControl.unkA4 == 0 && SimpleControl.unk9C == 1) {
|
||||
THPSimpleInlineFunc();
|
||||
}
|
||||
OSRestoreInterrupts(temp_r25);
|
||||
return 0;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 VideoDecode(void *arg0) {
|
||||
s32 temp_r31;
|
||||
|
||||
bufIdx = (bufIdx + 1) & 1;
|
||||
temp_r31 = THPVideoDecode(arg0, SimpleControl.unk144[bufIdx].unk00, SimpleControl.unk144[bufIdx].unk04, SimpleControl.unk144[bufIdx].unk08, SimpleControl.unk94);
|
||||
if (temp_r31 == 0) {
|
||||
SimpleControl.unk144[0].unk0C = SimpleControl.unkCC[SimpleControl.unkAC].unk04;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleDrawCurrentFrame(GXRenderModeObj *arg0, GXColor *arg1, Mtx arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) {
|
||||
if (SimpleControl.unk144[0].unk0C >= 0) {
|
||||
THPGXYuv2RgbSetup(arg0, arg1, arg2);
|
||||
THPGXYuv2RgbDraw(SimpleControl.unk144[bufIdx].unk00, SimpleControl.unk144[bufIdx].unk04, SimpleControl.unk144[bufIdx].unk08, arg3, arg4, SimpleControl.unk80.unk00, SimpleControl.unk80.unk04, arg5, arg6);
|
||||
THPGXRestore();
|
||||
return SimpleControl.unk144[0].unk0C;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static u16 VolumeTable[] = {
|
||||
0x0000, 0x0002, 0x0008, 0x0012, 0x0020, 0x0032, 0x0049, 0x0063,
|
||||
0x0082, 0x00A4, 0x00CB, 0x00F5, 0x0124, 0x0157, 0x018E, 0x01C9,
|
||||
0x0208, 0x024B, 0x0292, 0x02DD, 0x032C, 0x037F, 0x03D7, 0x0432,
|
||||
0x0492, 0x04F5, 0x055D, 0x05C9, 0x0638, 0x06AC, 0x0724, 0x07A0,
|
||||
0x0820, 0x08A4, 0x092C, 0x09B8, 0x0A48, 0x0ADD, 0x0B75, 0x0C12,
|
||||
0x0CB2, 0x0D57, 0x0DFF, 0x0EAC, 0x0F5D, 0x1012, 0x10CA, 0x1187,
|
||||
0x1248, 0x130D, 0x13D7, 0x14A4, 0x1575, 0x164A, 0x1724, 0x1801,
|
||||
0x18E3, 0x19C8, 0x1AB2, 0x1BA0, 0x1C91, 0x1D87, 0x1E81, 0x1F7F,
|
||||
0x2081, 0x2187, 0x2291, 0x239F, 0x24B2, 0x25C8, 0x26E2, 0x2801,
|
||||
0x2923, 0x2A4A, 0x2B75, 0x2CA3, 0x2DD6, 0x2F0D, 0x3048, 0x3187,
|
||||
0x32CA, 0x3411, 0x355C, 0x36AB, 0x37FF, 0x3956, 0x3AB1, 0x3C11,
|
||||
0x3D74, 0x3EDC, 0x4048, 0x41B7, 0x432B, 0x44A3, 0x461F, 0x479F,
|
||||
0x4923, 0x4AAB, 0x4C37, 0x4DC7, 0x4F5C, 0x50F4, 0x5290, 0x5431,
|
||||
0x55D6, 0x577E, 0x592B, 0x5ADC, 0x5C90, 0x5E49, 0x6006, 0x61C7,
|
||||
0x638C, 0x6555, 0x6722, 0x68F4, 0x6AC9, 0x6CA2, 0x6E80, 0x7061,
|
||||
0x7247, 0x7430, 0x761E, 0x7810, 0x7A06, 0x7C00, 0x7DFE, 0x8000
|
||||
};
|
||||
|
||||
static void MixAudio(void *arg0, void *arg1, u32 arg2) {
|
||||
s32 var_r31;
|
||||
u32 var_r27;
|
||||
u32 var_r28;
|
||||
s32 i;
|
||||
u16 temp_r24;
|
||||
s16 *var_r26;
|
||||
s16 *var_r30;
|
||||
s16 *var_r29;
|
||||
|
||||
if (arg1) {
|
||||
if (SimpleControl.unk98 != 0 && SimpleControl.unk9D == 1 && SimpleControl.unk9F != 0) {
|
||||
var_r28 = arg2;
|
||||
var_r30 = arg0;
|
||||
var_r26 = arg1;
|
||||
while (1) {
|
||||
if (SimpleControl.unk164[SimpleControl.unk198].unk08 == 0) {
|
||||
break;
|
||||
}
|
||||
if (SimpleControl.unk164[SimpleControl.unk198].unk08 >= var_r28) {
|
||||
var_r27 = var_r28;
|
||||
} else {
|
||||
var_r27 = SimpleControl.unk164[SimpleControl.unk198].unk08;
|
||||
}
|
||||
var_r29 = SimpleControl.unk164[SimpleControl.unk198].unk04;
|
||||
for (i = 0; i < var_r27; i++) {
|
||||
if (SimpleControl.unkC8 != 0) {
|
||||
SimpleControl.unkC8--;
|
||||
SimpleControl.unkBC += SimpleControl.unkC4;
|
||||
} else {
|
||||
SimpleControl.unkBC = SimpleControl.unkC0;
|
||||
}
|
||||
temp_r24 = VolumeTable[(s32) SimpleControl.unkBC];
|
||||
var_r31 = *var_r26 + ((temp_r24 * *var_r29) >> 0xF);
|
||||
if (var_r31 < -0x8000) {
|
||||
var_r31 = -0x8000;
|
||||
}
|
||||
if (var_r31 > 0x7FFF) {
|
||||
var_r31 = 0x7FFF;
|
||||
}
|
||||
*var_r30 = var_r31;
|
||||
var_r30++;
|
||||
var_r26++;
|
||||
var_r29++;
|
||||
var_r31 = *var_r26 + ((temp_r24 * *var_r29) >> 0xF);
|
||||
if (var_r31 < -0x8000) {
|
||||
var_r31 = -0x8000;
|
||||
}
|
||||
if (var_r31 > 0x7FFF) {
|
||||
var_r31 = 0x7FFF;
|
||||
}
|
||||
*var_r30 = var_r31;
|
||||
var_r30++;
|
||||
var_r26++;
|
||||
var_r29++;
|
||||
}
|
||||
var_r28 -= var_r27;
|
||||
SimpleControl.unk164[SimpleControl.unk198].unk08 -= var_r27;
|
||||
SimpleControl.unk164[SimpleControl.unk198].unk04 = var_r29;
|
||||
if (SimpleControl.unk164[SimpleControl.unk198].unk08 == 0) {
|
||||
SimpleControl.unk198++;
|
||||
if (SimpleControl.unk198 >= 4) {
|
||||
SimpleControl.unk198 = 0;
|
||||
}
|
||||
}
|
||||
if (var_r28 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
memcpy(var_r30, var_r26, var_r28 * 4);
|
||||
} else {
|
||||
memcpy(arg0, arg1, arg2 * 4);
|
||||
}
|
||||
} else if (SimpleControl.unk98 != 0 && SimpleControl.unk9D == 1 && SimpleControl.unk9F != 0) {
|
||||
var_r28 = arg2;
|
||||
var_r30 = arg0;
|
||||
while (1) {
|
||||
if (SimpleControl.unk164[SimpleControl.unk198].unk08 == 0) {
|
||||
break;
|
||||
}
|
||||
if (SimpleControl.unk164[SimpleControl.unk198].unk08 >= var_r28) {
|
||||
var_r27 = var_r28;
|
||||
} else {
|
||||
var_r27 = SimpleControl.unk164[SimpleControl.unk198].unk08;
|
||||
}
|
||||
var_r29 = SimpleControl.unk164[SimpleControl.unk198].unk04;
|
||||
for (i = 0; i < var_r27; i++) {
|
||||
if (SimpleControl.unkC8 != 0) {
|
||||
SimpleControl.unkC8--;
|
||||
SimpleControl.unkBC += SimpleControl.unkC4;
|
||||
} else {
|
||||
SimpleControl.unkBC = SimpleControl.unkC0;
|
||||
}
|
||||
temp_r24 = VolumeTable[(s32) SimpleControl.unkBC];
|
||||
var_r31 = (temp_r24 * *var_r29) >> 0xF;
|
||||
if (var_r31 < -0x8000) {
|
||||
var_r31 = -0x8000;
|
||||
}
|
||||
if (var_r31 > 0x7FFF) {
|
||||
var_r31 = 0x7FFF;
|
||||
}
|
||||
*var_r30 = var_r31;
|
||||
var_r30++;
|
||||
var_r29++;
|
||||
var_r31 = (temp_r24 * *var_r29) >> 0xF;
|
||||
if (var_r31 < -0x8000) {
|
||||
var_r31 = -0x8000;
|
||||
}
|
||||
if (var_r31 > 0x7FFF) {
|
||||
var_r31 = 0x7FFF;
|
||||
}
|
||||
*var_r30 = var_r31;
|
||||
var_r30++;
|
||||
var_r29++;
|
||||
}
|
||||
var_r28 -= var_r27;
|
||||
SimpleControl.unk164[SimpleControl.unk198].unk08 -= var_r27;
|
||||
SimpleControl.unk164[SimpleControl.unk198].unk04 = var_r29;
|
||||
if (SimpleControl.unk164[SimpleControl.unk198].unk08 == 0) {
|
||||
SimpleControl.unk198++;
|
||||
if (SimpleControl.unk198 >= 4) {
|
||||
SimpleControl.unk198 = 0;
|
||||
}
|
||||
}
|
||||
if (var_r28 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
memset(var_r30, 0, var_r28 * 4);
|
||||
} else {
|
||||
memset(arg0, 0, arg2 * 4);
|
||||
}
|
||||
}
|
||||
|
||||
s32 THPSimpleGetVideoInfo(UnkThpStruct04 *arg0) {
|
||||
if (SimpleControl.unk98 != 0) {
|
||||
memcpy(arg0, &SimpleControl.unk80, 8);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 THPSimpleGetTotalFrame(void) {
|
||||
if (SimpleControl.unk98 != 0) {
|
||||
return SimpleControl.unk3C.mNumFrames;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void THPAudioMixCallback(void) {
|
||||
s32 temp_r31;
|
||||
|
||||
if (AudioSystem == 0) {
|
||||
SoundBufferIndex ^= 1;
|
||||
AIInitDMA((u32) SoundBuffer[SoundBufferIndex], sizeof(SoundBuffer[0]));
|
||||
temp_r31 = OSEnableInterrupts();
|
||||
MixAudio(SoundBuffer[SoundBufferIndex], 0, 0xA0);
|
||||
DCFlushRange(SoundBuffer[SoundBufferIndex], sizeof(SoundBuffer[0]));
|
||||
OSRestoreInterrupts(temp_r31);
|
||||
} else {
|
||||
if (AudioSystem == 1) {
|
||||
if (LastAudioBuffer) {
|
||||
CurAudioBuffer = LastAudioBuffer;
|
||||
}
|
||||
OldAIDCallback();
|
||||
LastAudioBuffer = (u8*) AIGetDMAStartAddr() + 0x80000000;
|
||||
} else {
|
||||
OldAIDCallback();
|
||||
CurAudioBuffer = (u8*) AIGetDMAStartAddr() + 0x80000000;
|
||||
}
|
||||
SoundBufferIndex ^= 1;
|
||||
AIInitDMA((u32) SoundBuffer[SoundBufferIndex], sizeof(SoundBuffer[0]));
|
||||
temp_r31 = OSEnableInterrupts();
|
||||
if (CurAudioBuffer) {
|
||||
DCInvalidateRange(CurAudioBuffer, sizeof(SoundBuffer[0]));
|
||||
}
|
||||
MixAudio(SoundBuffer[SoundBufferIndex], CurAudioBuffer, 0xA0);
|
||||
DCFlushRange(SoundBuffer[SoundBufferIndex], sizeof(SoundBuffer[0]));
|
||||
OSRestoreInterrupts(temp_r31);
|
||||
}
|
||||
}
|
||||
|
||||
s32 THPSimpleSetVolume(s32 left, s32 right) {
|
||||
s32 temp_r29;
|
||||
|
||||
if (SimpleControl.unk98 != 0 && SimpleControl.unk9F != 0) {
|
||||
if (left > 127) {
|
||||
left = 127;
|
||||
}
|
||||
if (left < 0) {
|
||||
left = 0;
|
||||
}
|
||||
if (right > 60000) {
|
||||
right = 60000;
|
||||
}
|
||||
if (right < 0) {
|
||||
right = 0;
|
||||
}
|
||||
temp_r29 = OSDisableInterrupts();
|
||||
SimpleControl.unkC0 = left;
|
||||
if (right != 0) {
|
||||
SimpleControl.unkC8 = (right << 5);
|
||||
SimpleControl.unkC4 = (SimpleControl.unkC0 - SimpleControl.unkBC) / SimpleControl.unkC8;
|
||||
} else {
|
||||
SimpleControl.unkC8 = 0;
|
||||
SimpleControl.unkBC = SimpleControl.unkC0;
|
||||
}
|
||||
OSRestoreInterrupts(temp_r29);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -160,7 +160,7 @@ void HuAudFXPanning(s32 arg0, s16 arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
void HuAudFXListnerSet(s32 arg0, s32 arg1, float arg2, float arg3) {
|
||||
void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3) {
|
||||
if (omSysExitReq == 0) {
|
||||
HuAudFXListnerSetEX(arg0, arg1,
|
||||
arg2 + Snd3DDistOffset,
|
||||
|
|
@ -171,7 +171,7 @@ void HuAudFXListnerSet(s32 arg0, s32 arg1, float arg2, float arg3) {
|
|||
}
|
||||
}
|
||||
|
||||
void HuAudFXListnerSetEX(s32 arg0, s32 arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6) {
|
||||
void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6) {
|
||||
UnkMsmStruct_02 sp1C;
|
||||
|
||||
if (omSysExitReq == 0) {
|
||||
|
|
|
|||
|
|
@ -41,8 +41,8 @@ extern void BoardPlayerMotionEndWait(s32);
|
|||
extern void BoardPlayerMotionShiftSet(s32, s32, f32, f32, s32);
|
||||
extern void BoardPlayerCoinsAdd(s32, s32);
|
||||
extern void BoardRotateDiceNumbers(s32);
|
||||
extern void BoardCameraAnimBlendSet(s32, s16, s16);
|
||||
extern s32 BoardPlayerAnimBlendCheck(s32);
|
||||
extern void BoardCameraMotBlendSet(s32, s16, s16);
|
||||
extern s32 BoardPlayerMotBlendCheck(s32);
|
||||
|
||||
static omObjData *coinChgObj[4] = {
|
||||
NULL,
|
||||
|
|
@ -64,7 +64,7 @@ static s32 coinDigitMdl[10] = {
|
|||
MAKE_DATA_NUM(DATADIR_BOARD, 21),
|
||||
};
|
||||
|
||||
void BoardLandBlueExec(s32 player, s16 space) {
|
||||
void BoardLandBlueExec(s32 player, s32 space) {
|
||||
Vec pos;
|
||||
s32 i;
|
||||
s8 coin_chg;
|
||||
|
|
@ -72,8 +72,8 @@ void BoardLandBlueExec(s32 player, s16 space) {
|
|||
|
||||
|
||||
BoardCameraViewSet(2);
|
||||
BoardPlayerAnimBlendSet(player, 0, 15);
|
||||
while (BoardPlayerAnimBlendCheck(player) == 0) {
|
||||
BoardPlayerMotBlendSet(player, 0, 15);
|
||||
while (BoardPlayerMotBlendCheck(player) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
if (_CheckFlag(FLAG_ID_MAKE(1, 11)) != 0) {
|
||||
|
|
@ -105,7 +105,7 @@ void BoardLandBlueExec(s32 player, s16 space) {
|
|||
BoardRotateDiceNumbers(player);
|
||||
}
|
||||
|
||||
void BoardLandRedExec(s32 player, s16 space) {
|
||||
void BoardLandRedExec(s32 player, s32 space) {
|
||||
Vec pos;
|
||||
s32 i;
|
||||
s8 coin_chg;
|
||||
|
|
@ -113,8 +113,8 @@ void BoardLandRedExec(s32 player, s16 space) {
|
|||
|
||||
BoardCameraViewSet(2);
|
||||
omVibrate(player, 12, 6, 6);
|
||||
BoardPlayerAnimBlendSet(player, 0, 15);
|
||||
while (BoardPlayerAnimBlendCheck(player) == 0) {
|
||||
BoardPlayerMotBlendSet(player, 0, 15);
|
||||
while (BoardPlayerMotBlendCheck(player) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
if (_CheckFlag(FLAG_ID_MAKE(1, 11)) != 0) {
|
||||
|
|
@ -162,7 +162,7 @@ s8 BoardCoinChgCreate(Vec *pos, s8 value) {
|
|||
|
||||
obj = omAddObjEx(boardObjMan, 266, 0, 0, -1, &UpdateCoinChg);
|
||||
coinChgObj[i] = obj;
|
||||
coin_chg = (coinChg *)obj->work;
|
||||
coin_chg = OM_GET_WORK_PTR(obj, coinChg);
|
||||
coin_chg->hide = 0;
|
||||
coin_chg->update = 0;
|
||||
coin_chg->minus = (value < 0) ? 1 : 0;
|
||||
|
|
@ -189,7 +189,7 @@ s32 BoardCoinChgExist(s32 index) {
|
|||
return index;
|
||||
}
|
||||
if (coinChgObj[index - 1] != 0) {
|
||||
coin_chg = (coinChg *)coinChgObj[index - 1]->work;
|
||||
coin_chg = OM_GET_WORK_PTR(coinChgObj[index - 1], coinChg);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
|
|
@ -201,7 +201,7 @@ void BoardCoinChgHide(s32 index) {
|
|||
return;
|
||||
}
|
||||
if (coinChgObj[index - 1] != 0) {
|
||||
((coinChg *)coinChgObj[index - 1]->work)->hide = 1;
|
||||
OM_GET_WORK_PTR(coinChgObj[index - 1], coinChg)->hide = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ static void CreateCoinChg(coinChg *coin_chg, Vec *pos) {
|
|||
static void UpdateCoinChg(omObjData *object) {
|
||||
coinChg *coin_chg;
|
||||
|
||||
coin_chg = (coinChg *)object->work;
|
||||
coin_chg = OM_GET_WORK_PTR(object, coinChg);
|
||||
if ((coin_chg->hide != 0) || (BoardIsKill() != 0)) {
|
||||
if (coin_chg->coin_model != -1) {
|
||||
BoardModelKill(coin_chg->coin_model);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
1183
src/game/board/model.c
Normal file
1183
src/game/board/model.c
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -41,7 +41,7 @@ extern void BoardModelMotionCreate(s16, s32);
|
|||
extern void BoardModelMotionKill(s16, s32);
|
||||
extern s32 BoardModelMotionEndCheck(s16);
|
||||
extern s32 BoardModelMotionStart(s16, s32, s32);
|
||||
extern s32 BoardModelMotionShiftSet(s16, s32, f32, f32, s32);
|
||||
extern s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32);
|
||||
extern void BoardModelMotionSpeedSet(s16, f32);
|
||||
extern void BoardModelMotionTimeSet(s16, f32);
|
||||
extern f32 BoardModelMotionTimeGet(s16);
|
||||
|
|
@ -52,16 +52,16 @@ extern void BoardModelAttrReset(s16, s32);
|
|||
//// #include "game/board/tutorial.h"
|
||||
extern BoardTutorialHookExec(s16, s32);
|
||||
//// #include "game/board/com.h"
|
||||
extern void fn_8007185C(s32, s32);
|
||||
extern void BoardComUseItemSet(s32, s32);
|
||||
//// #include "game/board/overhead.h"
|
||||
extern void fn_800729A4(s32);
|
||||
extern void fn_80072DA8(s32);
|
||||
//// #include "game/board/dice_roll.h"
|
||||
extern void BoardViewOverheadExec(s32);
|
||||
extern void BoardViewMapExec(s32);
|
||||
//// #include "game/board/roll.h"
|
||||
extern s32 fn_80085CC8(s32);
|
||||
extern void fn_80085EB4(void);
|
||||
//// #include "game/chrman.h"
|
||||
extern void CharModelKillIndex(s16);
|
||||
extern void CharModelSetStepType(s16, s32);
|
||||
extern void CharModelDataClose(s16);
|
||||
extern void CharModelStepTypeSet(s16, s32);
|
||||
////
|
||||
|
||||
static void UpdateJunctionGfx(omObjData*);
|
||||
|
|
@ -82,7 +82,7 @@ s32 DoDebugMove(s32, s16*);
|
|||
s32 DoSparkSpace(s32, s16*);
|
||||
s32 ExecJunction(s32, s16*);
|
||||
s32 MegaPlayerPassFunc(s32, s16);
|
||||
s32 BoardPlayerAnimBlendCheck(s32);
|
||||
s32 BoardPlayerMotBlendCheck(s32);
|
||||
|
||||
typedef struct bitcopy {
|
||||
struct {
|
||||
|
|
@ -115,7 +115,7 @@ static s16 suitPlayerMdl = -1;
|
|||
static s16 suitCurrMot = -1;
|
||||
|
||||
static s32 diceJumpObj[4] = {0, 0, 0, 0};
|
||||
static s32 animDoneF[4] = {0, 0, 0, 0};
|
||||
static s32 motDoneF[4] = {0, 0, 0, 0};
|
||||
static s16 bowserSuitMot[5] = {-1, -1, -1, -1, -1};
|
||||
char* lbl_8013993C[] = {
|
||||
"eye1",
|
||||
|
|
@ -179,7 +179,7 @@ void BoardPlayerInit(void) {
|
|||
|
||||
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
||||
GWPlayer[var_r31].space_curr = temp_r30;
|
||||
fn_80062D90(var_r31);
|
||||
BoardPlayerCornerPosSet(var_r31);
|
||||
BoardPlayerSizeSet(var_r31, 0);
|
||||
GWPlayer[var_r31].color = 0;
|
||||
GWPlayer[var_r31].bowser_suit = 0;
|
||||
|
|
@ -190,7 +190,7 @@ void BoardPlayerInit(void) {
|
|||
}
|
||||
|
||||
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
||||
fn_80062D90(var_r31);
|
||||
BoardPlayerCornerPosSet(var_r31);
|
||||
if (BoardPlayerAutoSizeGet(var_r31) != 0) {
|
||||
BoardPlayerAutoSizeSet(var_r31, BoardPlayerAutoSizeGet(var_r31));
|
||||
BoardStatusHammerShowSet(var_r31, 0);
|
||||
|
|
@ -227,7 +227,7 @@ void BoardPlayerModelInit(void) {
|
|||
for (var_r31 = 0; var_r31 < 4; var_r31++) {
|
||||
preTurnHook[var_r31] = 0;
|
||||
postTurnHook[var_r31] = 0;
|
||||
animDoneF[var_r31] = 0;
|
||||
motDoneF[var_r31] = 0;
|
||||
diceJumpObj[var_r31] = 0;
|
||||
temp_r22 = &GWPlayer[var_r31];
|
||||
temp_r27 = temp_r22;
|
||||
|
|
@ -266,7 +266,7 @@ void BoardPlayerModelInit(void) {
|
|||
GWPlayer[var_r31].diff = GWPlayerCfg[var_r31].diff;
|
||||
GWPlayerCfg[var_r31].diff = GWPlayerCfg[var_r31].diff;
|
||||
temp_r27->space_prev = -1;
|
||||
CharModelKillIndex(GWPlayer[var_r31].character);
|
||||
CharModelDataClose(GWPlayer[var_r31].character);
|
||||
}
|
||||
CharModelLayerSetAll(2);
|
||||
}
|
||||
|
|
@ -375,14 +375,14 @@ s32 BoardPlayerItemCount(s32 arg0) {
|
|||
return var_r30;
|
||||
}
|
||||
|
||||
void fn_80062D90(s32 arg0) {
|
||||
void BoardPlayerCornerPosSet(s32 arg0) {
|
||||
Vec sp8;
|
||||
|
||||
BoardPlayerCurrSpacePosDirGet(arg0, &sp8);
|
||||
BoardPlayerCornerPosGet(arg0, &sp8);
|
||||
BoardPlayerPosSetV(arg0, &sp8);
|
||||
}
|
||||
|
||||
void BoardPlayerCurrSpacePosDirGet(s32 arg0, Point3d* arg1) {
|
||||
void BoardPlayerCornerPosGet(s32 arg0, Point3d* arg1) {
|
||||
s32 var_r31;
|
||||
s32 var_r30;
|
||||
s32 var_r29;
|
||||
|
|
@ -400,7 +400,7 @@ void BoardPlayerCurrSpacePosDirGet(s32 arg0, Point3d* arg1) {
|
|||
var_r29 += 1;
|
||||
}
|
||||
}
|
||||
BoardSpaceDirPosGet(temp_r28, var_r29, arg1);
|
||||
BoardSpaceCornerPosGet(temp_r28, var_r29, arg1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -531,7 +531,7 @@ void BoardPlayerMotionStart(s32 arg0, s32 arg1, s32 arg2) {
|
|||
}
|
||||
}
|
||||
|
||||
void BoardPlayerMotionShiftSet(s32 arg0, s32 arg1, f32 arg8, f32 arg9, s32 arg2) {
|
||||
void BoardPlayerMotionShiftSet(s32 arg0, s32 arg1, f32 arg8, f32 arg9, u32 arg2) {
|
||||
PlayerState* player;
|
||||
s32 temp_r29;
|
||||
|
||||
|
|
@ -607,11 +607,11 @@ void BoardPlayerSizeSet(s32 arg0, s32 arg1) {
|
|||
temp_r27 = BoardPlayerGet(arg0);
|
||||
temp_r27->size = arg1;
|
||||
if (arg1 == 2) {
|
||||
CharModelSetStepType(GWPlayer[arg0].character, 4);
|
||||
CharModelStepTypeSet(GWPlayer[arg0].character, 4);
|
||||
} else if (arg1 == 1) {
|
||||
CharModelSetStepType(GWPlayer[arg0].character, 5);
|
||||
CharModelStepTypeSet(GWPlayer[arg0].character, 5);
|
||||
} else {
|
||||
CharModelSetStepType(GWPlayer[arg0].character, 0);
|
||||
CharModelStepTypeSet(GWPlayer[arg0].character, 0);
|
||||
}
|
||||
BoardModelScaleSetV(BoardPlayerModelGet(arg0), &temp_r4[arg1]);
|
||||
}
|
||||
|
|
@ -682,7 +682,7 @@ void BoardPlayerPostTurnHookSet(s32 arg0, s32 (*arg1)()) {
|
|||
|
||||
void BoardPlayerTurnExec(s32 arg0) {
|
||||
BoardPauseEnableSet(1);
|
||||
fn_8007185C(arg0, -1);
|
||||
BoardComUseItemSet(arg0, -1);
|
||||
GWSystem.field31_bit4 = 0xF;
|
||||
_ClearFlag(0x10016);
|
||||
_ClearFlag(0x1000E);
|
||||
|
|
@ -741,11 +741,11 @@ void BoardPlayerTurnRollExec(s32 arg0) {
|
|||
break;
|
||||
case -3:
|
||||
fn_80085EB4();
|
||||
fn_80072DA8(arg0);
|
||||
BoardViewMapExec(arg0);
|
||||
break;
|
||||
case -4:
|
||||
fn_80085EB4();
|
||||
fn_800729A4(arg0);
|
||||
BoardViewOverheadExec(arg0);
|
||||
break;
|
||||
}
|
||||
} while (temp_r30 <= 0);
|
||||
|
|
@ -918,10 +918,10 @@ void BoardPlayerZoomRestore(s32 arg0) {
|
|||
var_r31 = (var_r31 + 1) & 3;
|
||||
(void)var_r29; //
|
||||
}
|
||||
BoardSpaceDirPosGet(temp_r27, var_r29, &sp18);
|
||||
BoardPlayerAnimBlendSet(arg0, 0, 0xF);
|
||||
BoardSpaceCornerPosGet(temp_r27, var_r29, &sp18);
|
||||
BoardPlayerMotBlendSet(arg0, 0, 0xF);
|
||||
|
||||
while (BoardPlayerAnimBlendCheck(arg0) == 0) {
|
||||
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardRotateDiceNumbers(arg0);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,39 @@
|
|||
#include "game/gamework_data.h"
|
||||
#include "game/flag.h"
|
||||
#include "game/board/main.h"
|
||||
#include "game/board/player.h"
|
||||
#include "game/board/space.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/data.h"
|
||||
#include "game/sprite.h"
|
||||
|
||||
#include "math.h"
|
||||
#include "string.h"
|
||||
|
||||
extern void omVibrate(s16, s16, s16, s16);
|
||||
|
||||
|
||||
extern s16 BoardStarHostMdlGet(void);
|
||||
extern void BoardModelPosSetV(s16 model, Vec *pos);
|
||||
extern s16 BoardModelCreate(s32 file, s32 *data, s32 arg3);
|
||||
extern s16 BoardModelIDGet(s16 model);
|
||||
|
||||
|
||||
static BoardSpace spaceData[2][256];
|
||||
s16 boardSpaceStarTbl[8];
|
||||
static GXTexObj spaceHiliteTex;
|
||||
static GXTexObj spaceTex;
|
||||
s16 boardSpaceStarTbl[8];
|
||||
static BoardSpace spaceData[2][256];
|
||||
|
||||
static s8 spaceImgIdx[12] = {
|
||||
0, 1, 2, 7,
|
||||
6, 5, 3, 4,
|
||||
9, 10, 11, 0
|
||||
};
|
||||
|
||||
static s8 spaceHiliteImgIdx[12] = {
|
||||
-1, 0, 1, 1,
|
||||
2, 2, 2, 2,
|
||||
-1, 3, -1, -1
|
||||
};
|
||||
|
||||
static s16 spaceCnt[2];
|
||||
static u32 spaceAttr[2];
|
||||
|
|
@ -28,11 +49,13 @@ static s32 spaceDrawCnt;
|
|||
static s16 spaceDrawF;
|
||||
|
||||
static s16 spaceDrawMdl = -1;
|
||||
static s16 starMdl = -1;
|
||||
static s16 starPlatMdl = -1;
|
||||
|
||||
static s32 ExecPipeSpace(s32 player, s32 space);
|
||||
|
||||
extern s8 boardTutorialBlockF;
|
||||
extern s32 boardTutorialBlockPos;
|
||||
|
||||
s32 BoardSpaceRotGet(s32 layer, s32 index, Vec *rot);
|
||||
s32 BoardSpaceStarGet(s32 index);
|
||||
s32 BoardSpaceStarGetCurr(void);
|
||||
|
||||
void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func)
|
||||
{
|
||||
|
|
@ -69,7 +92,7 @@ s32 BoardSpaceWalkMiniEventExec(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
s16 BoardSpaceCountGet(s32 layer)
|
||||
s32 BoardSpaceCountGet(s32 layer)
|
||||
{
|
||||
return spaceCnt[layer];
|
||||
}
|
||||
|
|
@ -281,7 +304,7 @@ s32 BoardSpaceLinkTransformGet(s32 flag, Vec *pos, Vec *rot, Vec *scale)
|
|||
return -1;
|
||||
}
|
||||
|
||||
void BoardSpaceStarSet(s32 space)
|
||||
void BoardSpaceHostSet(s32 space)
|
||||
{
|
||||
s16 host_space;
|
||||
Vec pos;
|
||||
|
|
@ -292,9 +315,9 @@ void BoardSpaceStarSet(s32 space)
|
|||
BoardModelPosSetV(BoardStarHostMdlGet(), &pos);
|
||||
}
|
||||
|
||||
static inline s16 BoardStarMdlGet(void)
|
||||
static inline s16 StarPlatGetMdl(void)
|
||||
{
|
||||
return starMdl;
|
||||
return starPlatMdl;
|
||||
}
|
||||
|
||||
static inline s32 BoardStarSpaceTypeGet(s16 index)
|
||||
|
|
@ -311,13 +334,13 @@ void BoardSpaceStarSetIndex(s32 index)
|
|||
BoardSpaceTypeSet(0, boardSpaceStarTbl[GWSystem.star_pos], 1);
|
||||
}
|
||||
GWSystem.star_pos = index & 0x7;
|
||||
BoardSpaceStarSet(BoardSpaceStarGetCurr());
|
||||
BoardSpaceHostSet(BoardSpaceStarGetCurr());
|
||||
space = BoardSpaceLinkFlagSearch(0, BoardSpaceStarGetCurr(), 0x04000000);
|
||||
BoardSpacePosGet(0, space, &pos);
|
||||
BoardModelPosSetV(BoardStarMdlGet(), &pos);
|
||||
BoardModelPosSetV(StarPlatGetMdl(), &pos);
|
||||
BoardSpaceRotGet(0, space, &rot);
|
||||
BoardModelRotYSet(BoardStarMdlGet(), rot.y);
|
||||
BoardModelVisibilitySet(BoardStarMdlGet(), 1);
|
||||
BoardModelRotYSet(StarPlatGetMdl(), rot.y);
|
||||
BoardModelVisibilitySet(StarPlatGetMdl(), 1);
|
||||
}
|
||||
|
||||
s32 BoardSpaceStarGetNext(void)
|
||||
|
|
@ -550,8 +573,8 @@ void BoardSpaceLandExec(s32 player, s32 space)
|
|||
if(_CheckFlag(FLAG_ID_MAKE(1, 11))) {
|
||||
HuAudFXPlay(842);
|
||||
BoardCameraViewSet(2);
|
||||
BoardPlayerAnimBlendSet(player, 0, 15);
|
||||
while(!BoardPlayerAnimBlendCheck(player)) {
|
||||
BoardPlayerMotBlendSet(player, 0, 15);
|
||||
while(!BoardPlayerMotBlendCheck(player)) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardCameraMotionWait();
|
||||
|
|
@ -586,4 +609,492 @@ void BoardSpaceLandExec(s32 player, s32 space)
|
|||
BoardStarExec(player, space);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
s32 BoardSpaceWalkExec(s32 player, s32 space)
|
||||
{
|
||||
s32 is_star;
|
||||
BoardSpace *space_ptr;
|
||||
BoardSpace *star_space;
|
||||
if(_CheckFlag(FLAG_ID_MAKE(1, 11))) {
|
||||
space_ptr = BoardSpaceGet(0, space);
|
||||
if(space_ptr->flag & 0x180000) {
|
||||
BoardTutorialHookExec(25, 0);
|
||||
}
|
||||
}
|
||||
if(BoardPlayerSizeGet(player) == 2 || GWPlayer[player].bowser_suit) {
|
||||
return 0;
|
||||
}
|
||||
space_ptr = BoardSpaceGet(0, space);
|
||||
if(BoardCurrGet() == 7 || BoardCurrGet() == 8) {
|
||||
is_star = 0;
|
||||
} else {
|
||||
star_space = BoardSpaceGet(0, boardSpaceStarTbl[GWSystem.star_pos]);
|
||||
if(space_ptr == star_space) {
|
||||
is_star = 1;
|
||||
} else {
|
||||
is_star = 0;
|
||||
}
|
||||
}
|
||||
if(is_star) {
|
||||
BoardStarExec(player, space);
|
||||
return 1;
|
||||
}
|
||||
if(space_ptr->flag & 0x600000) {
|
||||
u16 mg_param = GWSystem.unk_38;
|
||||
if(BoardPlayerSizeGet(player) == 1) {
|
||||
BoardRotateDiceNumbers(player);
|
||||
BoardMGCreate(mg_param);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if(space_ptr->flag & 0x180000) {
|
||||
BoardShopExec(player, space);
|
||||
return 1;
|
||||
}
|
||||
if(space_ptr->flag & 0x08000000) {
|
||||
BoardBooHouseExec(player, space);
|
||||
return 1;
|
||||
}
|
||||
if(space_ptr->flag & 0x10000000) {
|
||||
BoardLotteryExec();
|
||||
return 1;
|
||||
}
|
||||
if(space_ptr->flag & 0x20000000) {
|
||||
ExecPipeSpace(player, space);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 BoardSpaceBlockExec(s32 player, s32 space)
|
||||
{
|
||||
s32 event_exec;
|
||||
BoardSpace *space_ptr;
|
||||
event_exec = 0;
|
||||
if(BoardPlayerSizeGet(player) == 2 || GWPlayer[player].bowser_suit) {
|
||||
return 0;
|
||||
}
|
||||
space_ptr = BoardSpaceGet(0, space);
|
||||
event_exec = 0;
|
||||
if(space == GWSystem.block_pos) {
|
||||
event_exec = 1;
|
||||
}
|
||||
if((int)GWSystem.bonus_star == 0 && BoardPartyFlagGet() == 1 && !_CheckFlag(FLAG_ID_MAKE(1, 11))) {
|
||||
event_exec = 0;
|
||||
}
|
||||
if(BoardCurrGet() == 7 || BoardCurrGet() == 8) {
|
||||
event_exec = 0;
|
||||
}
|
||||
if(event_exec) {
|
||||
BoardBlockExec(player, space);
|
||||
if(_CheckFlag(FLAG_ID_MAKE(1, 11))) {
|
||||
BoardBlockExec(player, space);
|
||||
}
|
||||
BoardSpaceBlockPosSet();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static s32 ExecPipeSpace(s32 player, s32 space)
|
||||
{
|
||||
Vec pos_link;
|
||||
Vec pos;
|
||||
Vec dir;
|
||||
float radius, y_vel;
|
||||
s32 mot_disable;
|
||||
BoardSpace *space_ptr;
|
||||
mot_disable = 0;
|
||||
if(BoardPlayerSizeGet(player) != 1) {
|
||||
return 0;
|
||||
}
|
||||
BoardPlayerPosGet(player, &pos);
|
||||
pos.y += 200.0f;
|
||||
space_ptr = BoardSpaceGet(0, space);
|
||||
BoardSpacePosGet(0, space_ptr->link[0], &pos_link);
|
||||
VECSubtract(&pos_link, &pos, &dir);
|
||||
VECNormalize(&dir, &dir);
|
||||
BoardPlayerRotYSet(player, 90-((atan2(dir.z, dir.x)/M_PI)*180));
|
||||
radius = 0.75f*BoardVecDistXZCalc(&pos_link, &pos);
|
||||
BoardPlayerMotionStart(player, 4, 0);
|
||||
y_vel = 0;
|
||||
while(1) {
|
||||
if(BoardVecDistXZCalc(&pos_link, &pos) < 2) {
|
||||
break;
|
||||
}
|
||||
pos.x += (dir.x*radius)/60.0f;
|
||||
pos.z += (dir.z*radius)/60.0f;
|
||||
if(pos.y <= pos_link.y) {
|
||||
pos.y = pos_link.y;
|
||||
if(!mot_disable) {
|
||||
BoardPlayerMotionShiftSet(player, 3, 0, 4, 0x40000001);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
pos.y += 10.0f+(-((1/2399.99f)+(1/50.0f))*y_vel*y_vel);
|
||||
y_vel += 1.0f;
|
||||
}
|
||||
BoardPlayerPosSetV(player, &pos);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BoardSpaceTypeForce(u16 from, u16 to)
|
||||
{
|
||||
s32 i;
|
||||
for(i=0; i<spaceCnt[0]; i++) {
|
||||
BoardSpace *space = &spaceData[0][i];
|
||||
if(space->type == from) {
|
||||
space->type = to;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BoardSpaceHide(s32 value)
|
||||
{
|
||||
if(value) {
|
||||
Hu3DModelAttrSet(spaceDrawMdl, 1);
|
||||
} else {
|
||||
Hu3DModelAttrReset(spaceDrawMdl, 1);
|
||||
}
|
||||
}
|
||||
|
||||
//Some stack allocation issues. code around BoardPlayerGetCurr is incorrect too
|
||||
static void DrawSpaces(ModelData *model, Mtx matrix)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
Vec player_pos;
|
||||
Vec target;
|
||||
Vec pos;
|
||||
|
||||
Mtx lookat, final, rot_x, rot_y, rot_z, scale;
|
||||
Mtx44 proj;
|
||||
BoardCameraData *camera;
|
||||
if(!spaceDrawF) {
|
||||
return;
|
||||
}
|
||||
spaceDrawCnt = 0;
|
||||
camera = &boardCamera;
|
||||
BoardCameraPosGet(&pos);
|
||||
BoardCameraTargetGet(&target);
|
||||
MTXPerspective(proj, camera->fov, camera->aspect, camera->near, camera->far);
|
||||
GXSetProjection(proj, GX_PERSPECTIVE);
|
||||
MTXLookAt(lookat, &pos, &camera->up, &target);
|
||||
GXSetViewport(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h, camera->viewport_near, camera->viewport_far);
|
||||
GXSetScissor(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h);
|
||||
{
|
||||
GXColor color = { 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
BoardSpace *space_curr;
|
||||
BoardSpace *space_hilite;
|
||||
PlayerState *player;
|
||||
PlayerState *player_temp;
|
||||
s16 player_mdl;
|
||||
float y_dist;
|
||||
s32 space_img;
|
||||
u16 space_type;
|
||||
float uv_x, uv_y, uv_size;
|
||||
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
|
||||
GXInvalidateTexAll();
|
||||
GXLoadTexObj(&spaceTex, GX_TEXMAP0);
|
||||
GXSetNumTexGens(1);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevColor(GX_TEVREG0, color);
|
||||
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
||||
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
|
||||
GXSetNumChans(1);
|
||||
GXSetChanAmbColor(GX_COLOR0A0, color);
|
||||
GXSetChanMatColor(GX_COLOR0A0, color);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
||||
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_SPOT);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
||||
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
|
||||
GXSetCullMode(GX_CULL_BACK);
|
||||
player = player_temp = BoardPlayerGetCurr();
|
||||
BoardPlayerPosGet(GWSystem.player_curr, &player_pos);
|
||||
player_mdl = BoardModelIDGet(BoardPlayerModelGetCurr());
|
||||
space_curr = &spaceData[0][0];
|
||||
space_hilite = NULL;
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
||||
for(i=0; i<spaceCnt[0]; i++, space_curr++) {
|
||||
if(space_curr->type == 0) {
|
||||
continue;
|
||||
}
|
||||
if(!BoardCameraCullCheck(&space_curr->pos, 200.0f) || (space_curr->flag & spaceAttr[0])) {
|
||||
continue;
|
||||
}
|
||||
if(!space_hilite) {
|
||||
if(player_pos.x > space_curr->pos.x-100.0f
|
||||
&& player_pos.z > space_curr->pos.z-100.0f
|
||||
&& player_pos.x < space_curr->pos.x+100.0f
|
||||
&& player_pos.z < space_curr->pos.z+100.0f) {
|
||||
if(player_pos.y-space_curr->pos.y < 0.0f) {
|
||||
y_dist = -(player_pos.y-space_curr->pos.y);
|
||||
} else {
|
||||
y_dist = player_pos.y-space_curr->pos.y;
|
||||
}
|
||||
if(y_dist < 10.0f) {
|
||||
space_hilite = space_curr;
|
||||
}
|
||||
}
|
||||
}
|
||||
space_type = space_curr->type;
|
||||
space_img = spaceImgIdx[space_type]-1;
|
||||
uv_x = (float)(space_img%4)/4.0f;
|
||||
uv_y = (float)(space_img/4)/4.0f;
|
||||
uv_size = 63.0f/256.0f;
|
||||
MTXRotRad(rot_z, 'z', MTXDegToRad(space_curr->rot.y));
|
||||
MTXRotRad(rot_y, 'y', MTXDegToRad(space_curr->rot.z));
|
||||
MTXRotRad(rot_x, 'x', MTXDegToRad(space_curr->rot.x+90.0f));
|
||||
MTXTrans(final, space_curr->pos.x, 3.0f+space_curr->pos.y, space_curr->pos.z);
|
||||
MTXConcat(rot_x, rot_y, rot_y);
|
||||
MTXConcat(rot_y, rot_z, rot_z);
|
||||
MTXConcat(final, rot_z, final);
|
||||
MTXConcat(lookat, final, final);
|
||||
GXLoadPosMtxImm(final, GX_PNMTX0);
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition3f32(-100, -100, 0);
|
||||
GXTexCoord2f32(uv_x, uv_y);
|
||||
GXPosition3f32(100, -100, 0);
|
||||
GXTexCoord2f32(uv_x+uv_size, uv_y);
|
||||
GXPosition3f32(100, 100, 0);
|
||||
GXTexCoord2f32(uv_x+uv_size, uv_y+uv_size+(1.5f/256.0f));
|
||||
GXPosition3f32(-100, 100, 0);
|
||||
GXTexCoord2f32(uv_x, uv_y+uv_size+(1.5f/256.0f));
|
||||
GXEnd();
|
||||
spaceDrawCnt++;
|
||||
}
|
||||
if(space_hilite) {
|
||||
space_curr = space_hilite;
|
||||
space_type = space_curr->type;
|
||||
if(player->show_next && space_type != 0 && (space_img = spaceHiliteImgIdx[space_type]) >= 0) {
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
|
||||
GXLoadTexObj(&spaceHiliteTex, GX_TEXMAP0);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP);
|
||||
uv_x = (float)(space_img%4)/4.0f;
|
||||
uv_y = (float)(space_img/4)/4.0f;
|
||||
uv_size = 63.0f/256.0f;
|
||||
MTXScale(scale, 1.5f, 1.5f, 1.5f);
|
||||
MTXRotRad(rot_z, 'z', MTXDegToRad(space_curr->rot.y));
|
||||
MTXRotRad(rot_y, 'y', MTXDegToRad(space_curr->rot.z));
|
||||
MTXRotRad(rot_x, 'x', MTXDegToRad(space_curr->rot.x+90.0f));
|
||||
MTXTrans(final, space_curr->pos.x, 3.5f+space_curr->pos.y, space_curr->pos.z);
|
||||
MTXConcat(scale, rot_x, rot_x);
|
||||
MTXConcat(rot_x, rot_y, rot_y);
|
||||
MTXConcat(rot_y, rot_z, rot_z);
|
||||
MTXConcat(final, rot_z, final);
|
||||
MTXConcat(lookat, final, final);
|
||||
GXLoadPosMtxImm(final, GX_PNMTX0);
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
GXPosition3f32(-100, -100, 0);
|
||||
GXTexCoord2f32(uv_x, uv_y);
|
||||
GXPosition3f32(100, -100, 0);
|
||||
GXTexCoord2f32(uv_x+uv_size, uv_y);
|
||||
GXPosition3f32(100, 100, 0);
|
||||
GXTexCoord2f32(uv_x+uv_size, uv_y+uv_size);
|
||||
GXPosition3f32(-100, 100, 0);
|
||||
GXTexCoord2f32(uv_x, uv_y+uv_size);
|
||||
GXEnd();
|
||||
spaceDrawCnt++;
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
s32 BoardSpaceRead(s32 layer, s32 data_num)
|
||||
{
|
||||
int j;
|
||||
int i;
|
||||
BoardSpace *space;
|
||||
u8 *data;
|
||||
s32 star_idx;
|
||||
u8 *data_base;
|
||||
data_base = data = HuDataSelHeapReadNum(data_num, MEMORY_DEFAULT_NUM, HEAP_DATA);
|
||||
spaceCnt[layer] = *(u32 *)data;
|
||||
data += sizeof(u32);
|
||||
space = &spaceData[layer][0];
|
||||
for(i=0; i<spaceCnt[layer]; i++, space++) {
|
||||
memcpy(&space->pos, data, sizeof(Vec));
|
||||
data += sizeof(Vec);
|
||||
memcpy(&space->rot, data, sizeof(Vec));
|
||||
data += sizeof(Vec);
|
||||
memcpy(&space->scale, data, sizeof(Vec));
|
||||
data += sizeof(Vec);
|
||||
space->flag = *(u32 *)data;
|
||||
data += sizeof(u32);
|
||||
space->type = *(u16 *)data;
|
||||
data += sizeof(u16);
|
||||
space->link_cnt = *(u16 *)data;
|
||||
data += sizeof(u16);
|
||||
for(j=0; j<space->link_cnt; j++) {
|
||||
space->link[j] = (*(u16 *)data)+1;
|
||||
data += sizeof(u16);
|
||||
}
|
||||
if(space->type == 8) {
|
||||
|
||||
space->type = 1;
|
||||
star_idx = (space->flag & 0x70000) >> 16;
|
||||
boardSpaceStarTbl[star_idx] = i+1;
|
||||
}
|
||||
}
|
||||
HuDataClose(data_base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BoardSpaceCameraSet(u16 mask)
|
||||
{
|
||||
Hu3DModelCameraSet(spaceDrawMdl, mask);
|
||||
}
|
||||
|
||||
void BoardSpaceBlockPosSet(void)
|
||||
{
|
||||
BoardSpace *space;
|
||||
s32 block_pos;
|
||||
begin:
|
||||
if(boardTutorialBlockF) {
|
||||
GWSystem.block_pos = boardTutorialBlockPos;
|
||||
return;
|
||||
}
|
||||
block_pos = BoardRandMod(spaceCnt[0])+1;
|
||||
if(block_pos == GWSystem.block_pos) {
|
||||
goto begin;
|
||||
}
|
||||
space = BoardSpaceGet(0, block_pos);
|
||||
if(space->type != 1) {
|
||||
goto begin;
|
||||
}
|
||||
GWSystem.block_pos = block_pos;
|
||||
}
|
||||
|
||||
void BoardSpaceInit(s32 data_num)
|
||||
{
|
||||
s32 board;
|
||||
BoardJunctionMaskZero();
|
||||
memset(spaceData, 0, sizeof(spaceData));
|
||||
memset(spaceAttr, 0, sizeof(spaceAttr));
|
||||
lbl_801D3FC4[0] = lbl_801D3FC4[1] = lbl_801D3FC4[2] = lbl_801D3FC4[3] = -1;
|
||||
spaceDrawF = 0;
|
||||
board = BoardCurrGet();
|
||||
{
|
||||
AnimBmpData *bmp;
|
||||
AnimData *data;
|
||||
void *data_base;
|
||||
s32 size;
|
||||
data = data_base = HuDataSelHeapReadNum(MAKE_DATA_NUM(DATADIR_BOARD, 29), MEMORY_DEFAULT_NUM, HEAP_DATA);
|
||||
data->bmp = (void *)((u32)data_base+(u32)data->bmp);
|
||||
data->pat = (void *)((u32)data_base+(u32)data->pat);
|
||||
data->bank = (void *)((u32)data_base+(u32)data->bank);
|
||||
bmp = data->bmp;
|
||||
size = bmp->sizeX;
|
||||
spaceHiliteTexFmt = -1;
|
||||
switch(bmp->dataFmt) {
|
||||
case SPRITE_BMP_RGBA8:
|
||||
spaceHiliteTexFmt = GX_TF_RGBA8;
|
||||
break;
|
||||
|
||||
case SPRITE_BMP_RGB5A3_DUPE:
|
||||
spaceHiliteTexFmt = GX_TF_RGB5A3;
|
||||
break;
|
||||
|
||||
case SPRITE_BMP_CMPR:
|
||||
spaceHiliteTexFmt = GX_TF_CMPR;
|
||||
break;
|
||||
}
|
||||
spaceHiliteTexData = HuMemDirectMallocNum(HEAP_SYSTEM, bmp->dataSize, MEMORY_DEFAULT_NUM);
|
||||
bmp->data = (void *)((u32)bmp->data+(u32)data_base);
|
||||
memcpy(spaceHiliteTexData, bmp->data, bmp->dataSize);
|
||||
HuDataClose(data_base);
|
||||
GXInitTexObj(&spaceHiliteTex, spaceHiliteTexData, size, size, spaceHiliteTexFmt, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&spaceHiliteTex, GX_LINEAR, GX_LINEAR, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
}
|
||||
{
|
||||
AnimBmpData *bmp;
|
||||
AnimData *data;
|
||||
void *data_base;
|
||||
s32 size;
|
||||
data = data_base = HuDataSelHeapReadNum(MAKE_DATA_NUM(DATADIR_BOARD, 28), MEMORY_DEFAULT_NUM, HEAP_DATA);
|
||||
data->bmp = (void *)((u32)data_base+(u32)data->bmp);
|
||||
data->pat = (void *)((u32)data_base+(u32)data->pat);
|
||||
data->bank = (void *)((u32)data_base+(u32)data->bank);
|
||||
bmp = data->bmp;
|
||||
size = bmp->sizeX;
|
||||
spaceTexFmt = -1;
|
||||
switch(bmp->dataFmt) {
|
||||
case SPRITE_BMP_RGBA8:
|
||||
spaceTexFmt = GX_TF_RGBA8;
|
||||
break;
|
||||
|
||||
case SPRITE_BMP_RGB5A3_DUPE:
|
||||
spaceTexFmt = GX_TF_RGB5A3;
|
||||
break;
|
||||
|
||||
case SPRITE_BMP_CMPR:
|
||||
spaceTexFmt = GX_TF_CMPR;
|
||||
break;
|
||||
}
|
||||
spaceTexData = HuMemDirectMallocNum(HEAP_SYSTEM, bmp->dataSize, MEMORY_DEFAULT_NUM);
|
||||
bmp->data = (void *)((u32)bmp->data+(u32)data_base);
|
||||
memcpy(spaceTexData, bmp->data, bmp->dataSize);
|
||||
HuDataClose(data_base);
|
||||
GXInitTexObj(&spaceTex, spaceTexData, size, size, spaceTexFmt, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||
GXInitTexObjLOD(&spaceTex, GX_LINEAR, GX_LINEAR, 0, 0, 0, GX_FALSE, GX_FALSE, GX_ANISO_1);
|
||||
}
|
||||
BoardSpaceRead(0, data_num);
|
||||
spaceDrawMdl = Hu3DHookFuncCreate(DrawSpaces);
|
||||
if(!BoardStartCheck() && !_CheckFlag(FLAG_ID_MAKE(1, 1))) {
|
||||
BoardSpaceBlockPosSet();
|
||||
GWSystem.star_total = 0;
|
||||
GWSystem.star_flag = 0;
|
||||
}
|
||||
if(BoardCurrGet() != 7 && BoardCurrGet() != 8) {
|
||||
starPlatMdl = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BOARD, 6), NULL, 0);
|
||||
BoardModelMotionStart(starPlatMdl, 0, 0x40000001);
|
||||
BoardModelVisibilitySet(starPlatMdl, 0);
|
||||
if(_CheckFlag(FLAG_ID_MAKE(1, 1))) {
|
||||
Vec pos;
|
||||
Vec rot;
|
||||
s16 space;
|
||||
BoardModelVisibilitySet(starPlatMdl, 1);
|
||||
GWSystem.star_flag |= (u8)(1 << GWSystem.star_pos);
|
||||
BoardSpaceTypeSet(0, boardSpaceStarTbl[GWSystem.star_pos], 8);
|
||||
{
|
||||
int space;
|
||||
BoardSpace *space_plat;
|
||||
space = BoardSpaceLinkFlagSearch(0, BoardSpaceStarGetCurr(), 0x04000000);
|
||||
BoardSpacePosGet(0, space, &pos);
|
||||
BoardModelPosSetV(StarPlatGetMdl(), &pos);
|
||||
BoardSpaceRotGet(0, space, &rot);
|
||||
BoardModelRotYSet(StarPlatGetMdl(), rot.y);
|
||||
}
|
||||
}
|
||||
}
|
||||
spaceDrawF = 1;
|
||||
}
|
||||
|
||||
void BoardSpaceDestroy(void)
|
||||
{
|
||||
if(spaceDrawMdl >= 0) {
|
||||
Hu3DModelKill(spaceDrawMdl);
|
||||
spaceDrawMdl = -1;
|
||||
}
|
||||
if(spaceHiliteTexData) {
|
||||
HuMemDirectFree(spaceHiliteTexData);
|
||||
spaceHiliteTexData = NULL;
|
||||
}
|
||||
if(spaceTexData) {
|
||||
HuMemDirectFree(spaceTexData);
|
||||
spaceTexData = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -3,8 +3,8 @@
|
|||
#include "game/board/player.h"
|
||||
#include "game/wipe.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/hsfex.h"
|
||||
#include "board_unsplit.h"
|
||||
#include "unsplit.h"
|
||||
#include "math.h"
|
||||
|
||||
static void WarpInit(s32);
|
||||
|
|
@ -15,10 +15,10 @@ static void WarpImpact(s32);
|
|||
|
||||
|
||||
extern void omVibrate(s16, s16, s16, s16);
|
||||
extern void fn_800816CC(s32, s32);
|
||||
extern void fn_80081884(f32);
|
||||
extern void fn_8008181C(void);
|
||||
extern s32 fn_8008186C(void);
|
||||
extern void BoardCharWheelInit(s32, s32);
|
||||
extern void BoardCharWheelSpeedSet(f32);
|
||||
extern void BoardCharWheelWait(void);
|
||||
extern s32 BoardCharWheelResultGet(void);
|
||||
extern f32 BoardModelMotionTimeGet(s16);
|
||||
extern void BoardModelHookReset(s16);
|
||||
extern s32 BoardModelHookSet(s16, char*, s16);
|
||||
|
|
@ -46,7 +46,7 @@ static s8 warpImpactPlayer[4] = {-1, -1, -1, -1};
|
|||
static void WarpProcess(void);
|
||||
static void WarpKill(void);
|
||||
|
||||
void BoardWarpExec(s32 player, s16 space) {
|
||||
void BoardWarpExec(s32 player, s32 space) {
|
||||
omVibrate(player, 12, 4, 2);
|
||||
warpProcess = HuPrcChildCreate(WarpProcess, 8195, 14336, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(warpProcess, WarpKill);
|
||||
|
|
@ -66,9 +66,9 @@ void WarpProcess(void) {
|
|||
HuAudFXPlay(842);
|
||||
BoardCameraViewSet(3);
|
||||
BoardCameraMotionWait();
|
||||
BoardPlayerAnimBlendSet(curr_player, 0, 15);
|
||||
BoardPlayerMotBlendSet(curr_player, 0, 15);
|
||||
|
||||
while (BoardPlayerAnimBlendCheck(curr_player) == 0) {
|
||||
while (BoardPlayerMotBlendCheck(curr_player) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
|
|
@ -77,10 +77,10 @@ void WarpProcess(void) {
|
|||
BoardTutorialHookExec(18, 0);
|
||||
boardTutorialData[0] = 0;
|
||||
}
|
||||
fn_800816CC(curr_player, 3);
|
||||
fn_80081884(18.0f);
|
||||
fn_8008181C();
|
||||
warpTarget = fn_8008186C();
|
||||
BoardCharWheelInit(curr_player, 3);
|
||||
BoardCharWheelSpeedSet(18.0f);
|
||||
BoardCharWheelWait();
|
||||
warpTarget = BoardCharWheelResultGet();
|
||||
BoardCameraViewSet(1);
|
||||
BoardCameraMotionWait();
|
||||
WarpInit(curr_player);
|
||||
|
|
@ -232,7 +232,7 @@ static void WarpImpact(s32 player) {
|
|||
BoardModelMotionStart(warpImpactMdl, 0, 0x40000001);
|
||||
|
||||
for (i = 0; i < warpImpactCnt; i++) {
|
||||
s32 player = warpImpactPlayer[i];
|
||||
s16 player = warpImpactPlayer[i];
|
||||
omVibrate(player, 0xC, 4, 2);
|
||||
BoardPlayerMotionStart(player, 6, 0x40000001);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,7 +182,6 @@ void BoardWinPause(void) {
|
|||
|
||||
void BoardWinCreateChoice(s32 pos, u32 mess, s32 portrait, s32 choice) {
|
||||
s32 i;
|
||||
s32 speed;
|
||||
|
||||
|
||||
winPosIdx = pos;
|
||||
|
|
@ -213,13 +212,11 @@ void BoardWinCreateChoice(s32 pos, u32 mess, s32 portrait, s32 choice) {
|
|||
if (GWSystem.mess_speed == 3) {
|
||||
GWSystem.mess_speed = 1;
|
||||
}
|
||||
speed = GWSystem.mess_speed;
|
||||
BoardWinSpeedSet(speed);
|
||||
BoardWinSpeedSet(GWMessSpeedGet());
|
||||
BoardWinPlayerSet(GWSystem.player_curr);
|
||||
}
|
||||
|
||||
void BoardWinCreate(s32 pos, u32 mess, s32 portrait) {
|
||||
s32 speed;
|
||||
s32 i;
|
||||
|
||||
winPosIdx = pos;
|
||||
|
|
@ -250,8 +247,7 @@ void BoardWinCreate(s32 pos, u32 mess, s32 portrait) {
|
|||
if (GWSystem.mess_speed == 3) {
|
||||
GWSystem.mess_speed = 1;
|
||||
}
|
||||
speed = GWSystem.mess_speed;
|
||||
BoardWinSpeedSet(speed);
|
||||
BoardWinSpeedSet(GWMessSpeedGet());
|
||||
BoardWinPlayerSet(GWSystem.player_curr);
|
||||
autoPickF = 0;
|
||||
}
|
||||
|
|
@ -281,14 +277,14 @@ void BoardWinKill(void) {
|
|||
}
|
||||
}
|
||||
|
||||
void BoardWinSetAttr(s32 attr) {
|
||||
void BoardWinAttrSet(s32 attr) {
|
||||
winAttr |= attr;
|
||||
if (windowID >= 0) {
|
||||
HuWinAttrSet(windowID, winAttr);
|
||||
}
|
||||
}
|
||||
|
||||
void BoardWinResetAttr(s32 attr) {
|
||||
void BoardWinAttrReset(s32 attr) {
|
||||
winAttr &= ~attr;
|
||||
if (windowID >= 0) {
|
||||
HuWinAttrSet(windowID, winAttr);
|
||||
|
|
@ -381,7 +377,7 @@ void BoardWinPlayerSet(s32 player) {
|
|||
|
||||
void BoardWinStartComKeySet(void) {
|
||||
s32 comkey[4];
|
||||
s32 speed;
|
||||
s32 delay;
|
||||
s32 waitnum;
|
||||
s32 i;
|
||||
|
||||
|
|
@ -410,12 +406,12 @@ void BoardWinStartComKeySet(void) {
|
|||
}
|
||||
}
|
||||
}
|
||||
speed = GWMessSpeedGet();
|
||||
delay = GWMessDelayGet();
|
||||
waitnum = HuWinKeyWaitNumGet(winMess);
|
||||
if (waitnum != 0) {
|
||||
HuWinComKeyReset();
|
||||
for (i = 0; i < waitnum; i++) {
|
||||
HuWinComKeyWait(comkey[0], comkey[1], comkey[2], comkey[3], speed);
|
||||
HuWinComKeyWait(comkey[0], comkey[1], comkey[2], comkey[3], delay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
145
src/game/esprite.c
Executable file
145
src/game/esprite.c
Executable file
|
|
@ -0,0 +1,145 @@
|
|||
#include "game/esprite.h"
|
||||
#include "game/data.h"
|
||||
#include "game/sprite.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u32 unk00;
|
||||
/* 0x04 */ u16 unk04;
|
||||
/* 0x06 */ char unk06[2];
|
||||
/* 0x08 */ AnimData *unk08;
|
||||
} UnkEspriteStruct01; // Size 0xC
|
||||
|
||||
s16 esprite[0x180][2];
|
||||
UnkEspriteStruct01 espanim[0x180];
|
||||
|
||||
static s16 gid;
|
||||
|
||||
void espInit(void) {
|
||||
s32 i;
|
||||
|
||||
gid = HuSprGrpCreate(0x180);
|
||||
for (i = 0; i < 0x180; i++) {
|
||||
esprite[i][0] = i;
|
||||
esprite[i][1] = -1;
|
||||
}
|
||||
for (i = 0; i < 0x180; i++) {
|
||||
espanim[i].unk04 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
s16 espEntry(s32 arg0, s16 arg1, s16 arg2) {
|
||||
UnkEspriteStruct01 *var_r30;
|
||||
UnkEspriteStruct01 *var_r31;
|
||||
s16 (*var_r29)[2];
|
||||
void *temp_r26;
|
||||
s16 temp_r25;
|
||||
s16 var_r28;
|
||||
s32 var_r27;
|
||||
|
||||
var_r29 = esprite;
|
||||
for (var_r28 = 0; var_r28 < 0x180; var_r29++, var_r28++) {
|
||||
if (var_r29[0][1] == -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (var_r28 == 0x180) {
|
||||
return -1;
|
||||
}
|
||||
var_r31 = espanim;
|
||||
var_r30 = NULL;
|
||||
for (var_r27 = 0; var_r27 < 0x180; var_r31++, var_r27++) {
|
||||
if (var_r31->unk04 != 0) {
|
||||
if (var_r31->unk00 == arg0) {
|
||||
var_r30 = NULL;
|
||||
break;
|
||||
}
|
||||
} else if (var_r30 == NULL) {
|
||||
var_r30 = var_r31;
|
||||
}
|
||||
}
|
||||
if (var_r27 == 0x180) {
|
||||
if (var_r30 == NULL) {
|
||||
return -1;
|
||||
}
|
||||
temp_r26 = HuDataSelHeapReadNum(arg0, MEMORY_DEFAULT_NUM, HEAP_DATA);
|
||||
if (temp_r26 == NULL) {
|
||||
return -1;
|
||||
}
|
||||
var_r30->unk00 = arg0;
|
||||
var_r30->unk08 = HuSprAnimRead(temp_r26);
|
||||
var_r31 = var_r30;
|
||||
}
|
||||
temp_r25 = HuSprCreate(var_r31->unk08, arg1, arg2);
|
||||
if (temp_r25 == -1) {
|
||||
if (var_r30 != NULL) {
|
||||
HuSprAnimKill(var_r31->unk08);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
var_r31->unk04++;
|
||||
var_r29[0][1] = var_r31 - espanim;
|
||||
HuSprGrpMemberSet(gid, var_r29[0][0], temp_r25);
|
||||
return var_r28;
|
||||
}
|
||||
|
||||
void espKill(s16 arg0) {
|
||||
HuSprGrpMemberKill(gid, esprite[arg0][0]);
|
||||
espanim[esprite[arg0][1]].unk04--;
|
||||
esprite[arg0][1] = -1;
|
||||
}
|
||||
|
||||
s16 espGrpIDGet(void) {
|
||||
return gid;
|
||||
}
|
||||
|
||||
void espDispOn(s16 arg0) {
|
||||
HuSprAttrReset(gid, esprite[arg0][0], 4);
|
||||
}
|
||||
|
||||
void espDispOff(s16 arg0) {
|
||||
HuSprAttrSet(gid, esprite[arg0][0], 4);
|
||||
}
|
||||
|
||||
void espAttrSet(s16 arg0, u16 arg1) {
|
||||
HuSprAttrSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espAttrReset(s16 arg0, u16 arg1) {
|
||||
HuSprAttrReset(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espPosSet(s16 arg0, float arg1, float arg2) {
|
||||
HuSprPosSet(gid, esprite[arg0][0], arg1, arg2);
|
||||
}
|
||||
|
||||
void espScaleSet(s16 arg0, float arg1, float arg2) {
|
||||
HuSprScaleSet(gid, esprite[arg0][0], arg1, arg2);
|
||||
}
|
||||
|
||||
void espZRotSet(s16 arg0, float arg1) {
|
||||
HuSprZRotSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espTPLvlSet(s16 arg0, float arg1) {
|
||||
HuSprTPLvlSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espColorSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3) {
|
||||
HuSprColorSet(gid, esprite[arg0][0], arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
void espSpeedSet(s16 arg0, float arg1) {
|
||||
HuSprSpeedSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espBankSet(s16 arg0, s16 arg1) {
|
||||
HuSprBankSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espDrawNoSet(s16 arg0, s16 arg1) {
|
||||
HuSprDrawNoSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
||||
void espPriSet(s16 arg0, s16 arg1) {
|
||||
HuSprPriSet(gid, esprite[arg0][0], arg1);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "common.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "stdarg.h"
|
||||
#include "stdio.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,26 +2,25 @@
|
|||
|
||||
static u32 frand_seed;
|
||||
|
||||
static inline u32 frandom(void)
|
||||
static inline u32 frandom(u32 param)
|
||||
{
|
||||
u32 rand = frand_seed;
|
||||
s32 rand2, rand3;
|
||||
|
||||
if (rand == 0) {
|
||||
rand = rand8();
|
||||
rand = rand ^ (s64)OSGetTime();
|
||||
rand ^= 0xD826BC89;
|
||||
if (param == 0) {
|
||||
param = rand8();
|
||||
param = param ^ (s64)OSGetTime();
|
||||
param ^= 0xD826BC89;
|
||||
}
|
||||
|
||||
rand2 = rand / (u32)0x1F31D;
|
||||
rand3 = rand - (rand2 * 0x1F31D);
|
||||
rand = rand2 * 0xB14;
|
||||
rand = rand - rand3 * 0x41A7;
|
||||
return rand;
|
||||
rand2 = param / (u32)0x1F31D;
|
||||
rand3 = param - (rand2 * 0x1F31D);
|
||||
param = rand2 * 0xB14;
|
||||
param = param - rand3 * 0x41A7;
|
||||
return param;
|
||||
}
|
||||
|
||||
u32 frand(void) {
|
||||
return frand_seed = frandom();
|
||||
return frand_seed = frandom(frand_seed);
|
||||
}
|
||||
|
||||
f32 frandf(void) {
|
||||
|
|
@ -34,7 +33,7 @@ f32 frandf(void) {
|
|||
|
||||
u32 frandmod(u32 arg0) {
|
||||
u32 ret;
|
||||
frand_seed = frandom();
|
||||
frand_seed = frandom(frand_seed);
|
||||
ret = (frand_seed & 0x7FFFFFFF)%arg0;
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -134,7 +134,7 @@ void GWGameStatReset(void)
|
|||
ResetBoardSettings();
|
||||
}
|
||||
|
||||
s32 GWMessSpeedGet(void)
|
||||
s32 GWMessDelayGet(void)
|
||||
{
|
||||
if(GWSystem.mess_delay > 48) {
|
||||
GWSystem.mess_speed = 1;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "game/hsfanim.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/init.h"
|
||||
#include "game/memory.h"
|
||||
#include "game/process.h"
|
||||
|
||||
|
|
@ -34,13 +35,6 @@ Hu3DTexAnimDataStruct Hu3DTexAnimData[256];
|
|||
Hu3DTexScrDataStruct Hu3DTexScrData[16];
|
||||
static Process *parManProc[64];
|
||||
|
||||
// TODO: move to GXVert
|
||||
static inline void GXUnknownu16(const u16 x, const u16 y, const u16 z) {
|
||||
GXWGFifo.u16 = x;
|
||||
GXWGFifo.u16 = y;
|
||||
GXWGFifo.u16 = z;
|
||||
}
|
||||
|
||||
void Hu3DAnimInit(void) {
|
||||
Hu3DTexAnimDataStruct *var_r30;
|
||||
Hu3DTexScrDataStruct *var_r29;
|
||||
|
|
@ -536,10 +530,18 @@ s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1) {
|
|||
GXBeginDisplayList(temp_r24, 0x20000);
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, arg1 * 4);
|
||||
for (i = 0; i < arg1; i++) {
|
||||
GXUnknownu16(i * 4, i, 0);
|
||||
GXUnknownu16(i * 4 + 1, i, 1);
|
||||
GXUnknownu16(i * 4 + 2, i, 2);
|
||||
GXUnknownu16(i * 4 + 3, i, 3);
|
||||
GXPosition1x16(i*4);
|
||||
GXColor1x16(i);
|
||||
GXTexCoord1x16(0);
|
||||
GXPosition1x16((i*4)+1);
|
||||
GXColor1x16(i);
|
||||
GXTexCoord1x16(1);
|
||||
GXPosition1x16((i*4)+2);
|
||||
GXColor1x16(i);
|
||||
GXTexCoord1x16(2);
|
||||
GXPosition1x16((i*4)+3);
|
||||
GXColor1x16(i);
|
||||
GXTexCoord1x16(3);
|
||||
}
|
||||
temp_r31->unk_40 = GXEndDisplayList();
|
||||
return temp_r25;
|
||||
|
|
|
|||
|
|
@ -16,27 +16,6 @@ typedef struct {
|
|||
/* 0x3C */ Vec unk3C;
|
||||
} HsfdrawStruct00; // Size 0x48
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16 unk00;
|
||||
/* 0x02 */ s16 unk02;
|
||||
/* 0x04 */ s16 unk04;
|
||||
/* 0x06 */ char unk06[2];
|
||||
/* 0x08 */ float unk08;
|
||||
/* 0x0C */ float unk0C;
|
||||
/* 0x10 */ float unk10;
|
||||
/* 0x14 */ float unk14;
|
||||
/* 0x18 */ float unk18;
|
||||
/* 0x1C */ float unk1C;
|
||||
/* 0x20 */ float unk20;
|
||||
/* 0x24 */ float unk24;
|
||||
/* 0x28 */ float unk28;
|
||||
/* 0x2C */ float unk2C;
|
||||
/* 0x30 */ float unk30;
|
||||
/* 0x34 */ float unk34;
|
||||
/* 0x38 */ float unk38;
|
||||
/* 0x3C */ HsfBitmap *unk3C;
|
||||
} HsfdrawStruct01; // Size unknown
|
||||
|
||||
typedef struct {
|
||||
s32 unk00;
|
||||
s32 unk04;
|
||||
|
|
|
|||
572
src/game/hsfex.c
Normal file
572
src/game/hsfex.c
Normal file
|
|
@ -0,0 +1,572 @@
|
|||
#include "game/hsfex.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/hsfmotion.h"
|
||||
|
||||
#include "math.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ float unk00;
|
||||
/* 0x04 */ float unk04;
|
||||
/* 0x08 */ Vec unk08;
|
||||
/* 0x14 */ Vec unk14;
|
||||
/* 0x20 */ Vec unk20;
|
||||
} HsfexStruct02; // Size 0x2C
|
||||
|
||||
static void SetObjCamMotion(s16 arg0, HsfTrack *arg1, float arg2, HsfexStruct02 *arg3);
|
||||
|
||||
void CamMotionEx2(s16 arg0, s16 arg1, float arg2, s16 arg3) {
|
||||
CameraData *temp_r30;
|
||||
s16 i;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (arg1 & (1 << i)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
temp_r30 = &Hu3DCamera[i];
|
||||
CamMotionEx(arg0, arg1, &temp_r30->pos, &temp_r30->up, &temp_r30->target, arg2, arg3);
|
||||
}
|
||||
|
||||
void CamMotionEx(s16 arg0, s16 arg1, Vec *arg2, Vec *arg3, Vec *arg4, float arg5, s16 arg6) {
|
||||
Vec sp3C;
|
||||
float sp2C[4];
|
||||
float sp1C[4];
|
||||
float temp_f29;
|
||||
float var_f27;
|
||||
float var_f26;
|
||||
float var_f30;
|
||||
float var_f31;
|
||||
s16 sp1A;
|
||||
s16 var_r25;
|
||||
s16 var_r29;
|
||||
s16 var_r30;
|
||||
HsfexStruct02 *var_r31;
|
||||
CameraData *temp_r27;
|
||||
ModelData *temp_r23;
|
||||
HsfData *temp_r22;
|
||||
MotionData *temp_r19;
|
||||
HsfData *temp_r18;
|
||||
HsfObject *temp_r24;
|
||||
HsfTrack *temp_r20;
|
||||
HsfMotion *temp_r26;
|
||||
HsfexStruct02 *temp_r21;
|
||||
HsfTrack *var_r28;
|
||||
|
||||
temp_r23 = &Hu3DData[arg0];
|
||||
temp_r19 = &Hu3DMotion[temp_r23->unk_08];
|
||||
temp_r22 = temp_r23->hsfData;
|
||||
temp_r18 = temp_r19->unk_04;
|
||||
temp_r26 = temp_r18->motion;
|
||||
for (var_r25 = 0; var_r25 < 16; var_r25++) {
|
||||
if (arg1 & (1 << var_r25)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
temp_r27 = &Hu3DCamera[var_r25];
|
||||
temp_f29 = temp_r26->len;
|
||||
sp1A = 0.5f + (temp_f29 / 6.0f) + 1.0f;
|
||||
var_r31 = temp_r21 = HuMemDirectMallocNum(HEAP_SYSTEM, (sp1A + 1) * sizeof(HsfexStruct02), MEMORY_DEFAULT_NUM);
|
||||
var_r31->unk00 = 0.0f;
|
||||
var_r31->unk08 = *arg2;
|
||||
var_r31->unk20 = *arg4;
|
||||
var_r31->unk14 = *arg3;
|
||||
var_r31++;
|
||||
for (var_r29 = 1, var_f31 = 0.0f; var_f31 <= temp_f29; var_r31++, var_r29++) {
|
||||
var_r31->unk00 = var_f31;
|
||||
var_r28 = temp_r26->track;
|
||||
temp_r20 = &var_r28[temp_r26->numTracks];
|
||||
while (var_r28 < temp_r20) {
|
||||
if (var_r28->type == 2) {
|
||||
temp_r24 = &temp_r22->object[var_r28->target];
|
||||
if (temp_r24->type == 7) {
|
||||
SetObjCamMotion(arg0, var_r28, GetCurve(var_r28, var_f31), var_r31);
|
||||
}
|
||||
}
|
||||
var_r28++;
|
||||
}
|
||||
var_f31 += 6.0f;
|
||||
}
|
||||
if (var_f31 != temp_f29) {
|
||||
var_r31->unk00 = temp_f29;
|
||||
var_r28 = temp_r26->track;
|
||||
temp_r20 = &var_r28[temp_r26->numTracks];
|
||||
while (var_r28 < temp_r20) {
|
||||
if (var_r28->type == 2) {
|
||||
temp_r24 = &temp_r22->object[var_r28->target];
|
||||
if (temp_r24->type == 7) {
|
||||
SetObjCamMotion(arg0, var_r28, GetCurve(var_r28, temp_f29), var_r31);
|
||||
}
|
||||
}
|
||||
var_r28++;
|
||||
}
|
||||
var_r29++;
|
||||
}
|
||||
var_r31 = temp_r21;
|
||||
var_r31->unk04 = 0.0f;
|
||||
var_f26 = 0.0f;
|
||||
for (var_f31 = var_f26; var_f31 < var_r29 - 1; var_f31 += 1.0f, var_r31++) {
|
||||
PSVECSubtract(&var_r31[1].unk08, &var_r31[0].unk08, &sp3C);
|
||||
var_r31[1].unk04 = PSVECMag(&sp3C);
|
||||
var_f26 += var_r31[1].unk04;
|
||||
}
|
||||
var_r31 = temp_r21;
|
||||
var_f27 = 0.0f;
|
||||
var_f31 = var_f27;
|
||||
while (var_f31 < var_r29) {
|
||||
var_f27 += var_r31->unk04;
|
||||
var_r31->unk00 = arg5 * (var_f27 / var_f26);
|
||||
var_f31 += 1.0f;
|
||||
var_r31++;
|
||||
}
|
||||
var_f31 = 0.0f;
|
||||
while (var_f31 <= arg5) {
|
||||
switch (arg6) {
|
||||
case 0:
|
||||
var_f30 = var_f31;
|
||||
break;
|
||||
case 1:
|
||||
var_f30 = arg5 * sin(90.0f * (var_f31 / arg5) * M_PI / 180.0);
|
||||
break;
|
||||
case 2:
|
||||
var_f30 = arg5 * (1.0 - cos(90.0f * (var_f31 / arg5) * M_PI / 180.0));
|
||||
break;
|
||||
}
|
||||
var_r31 = temp_r21;
|
||||
for (var_r30 = 0; var_r30 < var_r29; var_r30++, var_r31++) {
|
||||
if (var_r31->unk00 <= var_f30 && var_r31[1].unk00 > var_f30) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (var_r30 != var_r29) {
|
||||
if (var_r30 == 0) {
|
||||
sp1C[0] = -1.0f;
|
||||
} else {
|
||||
sp1C[0] = var_r31[-1].unk00;
|
||||
}
|
||||
sp1C[1] = var_r31->unk00;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp1C[2] = 1.0f + var_r31->unk00;
|
||||
}
|
||||
sp1C[2] = var_r31[1].unk00;
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp1C[3] = 1.0f + sp1C[2];
|
||||
} else {
|
||||
sp1C[3] = var_r31[2].unk00;
|
||||
}
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31[0].unk08.x;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk08.x;
|
||||
}
|
||||
sp2C[1] = var_r31[0].unk08.x;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk08.x;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk08.x;
|
||||
}
|
||||
temp_r27->pos.x = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31[0].unk08.y;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk08.y;
|
||||
}
|
||||
sp2C[1] = var_r31[0].unk08.y;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk08.y;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk08.y;
|
||||
}
|
||||
temp_r27->pos.y = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31[0].unk08.z;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk08.z;
|
||||
}
|
||||
sp2C[1] = var_r31[0].unk08.z;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk08.z;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk08.z;
|
||||
}
|
||||
temp_r27->pos.z = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31[0].unk20.x;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk20.x;
|
||||
}
|
||||
sp2C[1] = var_r31[0].unk20.x;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk20.x;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk20.x;
|
||||
}
|
||||
temp_r27->target.x = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31->unk20.y;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk20.y;
|
||||
}
|
||||
sp2C[1] = var_r31->unk20.y;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk20.y;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk20.y;
|
||||
}
|
||||
temp_r27->target.y = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31->unk20.z;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk20.z;
|
||||
}
|
||||
sp2C[1] = var_r31->unk20.z;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk20.z;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk20.z;
|
||||
}
|
||||
temp_r27->target.z = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31->unk14.x;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk14.x;
|
||||
}
|
||||
sp2C[1] = var_r31->unk14.x;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk14.x;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk14.x;
|
||||
}
|
||||
temp_r27->up.x = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31->unk14.y;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk14.y;
|
||||
}
|
||||
sp2C[1] = var_r31->unk14.y;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk14.y;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk14.y;
|
||||
}
|
||||
temp_r27->up.y = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
if (var_r30 == 0) {
|
||||
sp2C[0] = var_r31->unk14.z;
|
||||
} else {
|
||||
sp2C[0] = var_r31[-1].unk14.z;
|
||||
}
|
||||
sp2C[1] = var_r31->unk14.z;
|
||||
if (var_r30 >= var_r29 - 1) {
|
||||
sp2C[2] = sp2C[1];
|
||||
} else {
|
||||
sp2C[2] = var_r31[1].unk14.z;
|
||||
}
|
||||
if (var_r30 >= var_r29 - 2) {
|
||||
sp2C[3] = sp2C[2];
|
||||
} else {
|
||||
sp2C[3] = var_r31[2].unk14.z;
|
||||
}
|
||||
temp_r27->up.z = InterpolateBMLine(sp2C, sp1C, var_f30);
|
||||
HuPrcVSleep();
|
||||
var_f31 += 1.0f;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
HuMemDirectFree(temp_r21);
|
||||
}
|
||||
|
||||
static void SetObjCamMotion(s16 arg0, HsfTrack *arg1, float arg2, HsfexStruct02 *arg3) {
|
||||
ModelData *temp_r31 = &Hu3DData[arg0];
|
||||
Vec sp18;
|
||||
Vec spC;
|
||||
|
||||
switch (arg1->channel) {
|
||||
case 8:
|
||||
arg3->unk08.x = temp_r31->scale.x * (arg2 + temp_r31->pos.x);
|
||||
break;
|
||||
case 9:
|
||||
arg3->unk08.y = temp_r31->scale.y * (arg2 + temp_r31->pos.y);
|
||||
break;
|
||||
case 10:
|
||||
arg3->unk08.z = temp_r31->scale.z * (arg2 + temp_r31->pos.z);
|
||||
break;
|
||||
case 11:
|
||||
arg3->unk20.x = temp_r31->scale.x * (arg2 + temp_r31->pos.x);
|
||||
break;
|
||||
case 12:
|
||||
arg3->unk20.y = temp_r31->scale.y * (arg2 + temp_r31->pos.y);
|
||||
break;
|
||||
case 13:
|
||||
arg3->unk20.z = temp_r31->scale.z * (arg2 + temp_r31->pos.z);
|
||||
break;
|
||||
case 14:
|
||||
PSVECSubtract(&arg3->unk08, &arg3->unk20, &spC);
|
||||
PSVECNormalize(&spC, &spC);
|
||||
sp18.x = spC.x * spC.y * (1.0 - cos(M_PI * arg2 / 180.0)) - spC.z * sin(M_PI * arg2 / 180.0);
|
||||
sp18.y = spC.y * spC.y + (1.0f - spC.y * spC.y) * cos(M_PI * arg2 / 180.0);
|
||||
sp18.z = spC.y * spC.z * (1.0 - cos(M_PI * arg2 / 180.0)) + spC.x * sin(M_PI * arg2 / 180.0);
|
||||
PSVECNormalize(&sp18, &arg3->unk14);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float InterpolateBMLine(float *arg0, float *arg1, float arg2) {
|
||||
float sp8[2];
|
||||
float temp_f22;
|
||||
float var_f21;
|
||||
float temp_f20;
|
||||
float temp_f29;
|
||||
float temp_f31;
|
||||
float var_f28;
|
||||
float var_f27;
|
||||
float var_f26;
|
||||
float var_f25;
|
||||
float var_f24;
|
||||
float var_f23;
|
||||
float var_f30;
|
||||
s32 var_r30;
|
||||
s32 var_r29;
|
||||
s32 i;
|
||||
|
||||
if (arg0[0] == arg0[1] && arg0[0] == arg0[2] && arg0[0] == arg0[3]) {
|
||||
return arg0[0];
|
||||
}
|
||||
for (i = 1; i <= 2; i++) {
|
||||
sp8[i - 1] = 0.5f * ((arg0[i] - arg0[i - 1]) / (arg1[i] - arg1[i - 1]) + (arg0[i + 1] - arg0[i]) / (arg1[i + 1] - arg1[i]));
|
||||
}
|
||||
temp_f29 = 0.5f * (arg1[2] + arg1[1]);
|
||||
var_r30 = 0;
|
||||
if (sp8[1] - sp8[0] != 0.0f) {
|
||||
temp_f22 = (sp8[1] * arg1[2] - sp8[0] * arg1[1] - (arg0[2] - arg0[1])) / (sp8[1] - sp8[0]);
|
||||
var_r29 = 0;
|
||||
if (arg1[1] <= temp_f22 && temp_f22 <= arg1[2]) {
|
||||
var_r29 = 1;
|
||||
}
|
||||
var_r30 = (var_r29 != 0) ? 1 : 0;
|
||||
}
|
||||
if (var_r30 == 1) {
|
||||
temp_f31 = temp_f29 - arg1[1];
|
||||
temp_f20 = (arg0[2] - arg0[1]) / (arg1[2] - arg1[1]) - (sp8[1] - sp8[0]) / 2;
|
||||
var_f28 = temp_f20 * temp_f31 + ((sp8[1] - sp8[0]) / (2.0f * (arg1[2] - arg1[1]))) * temp_f31 * temp_f31 + arg0[1];
|
||||
var_f27 = temp_f20 + temp_f31 * ((sp8[1] - sp8[0]) / (arg1[2] - arg1[1]));
|
||||
} else {
|
||||
temp_f31 = temp_f29 - arg1[1];
|
||||
var_f28 = (arg0[2] + arg0[1]) * (temp_f31 / (arg1[2] - arg1[1]));
|
||||
var_f27 = 2.0f * (arg0[2] - arg0[1]) / (arg1[2] - arg1[1]) - (sp8[1] + sp8[0]) * (temp_f31 / (arg1[2] - arg1[1]));
|
||||
}
|
||||
if (arg2 < temp_f29) {
|
||||
var_f30 = arg1[1];
|
||||
var_f26 = arg0[1];
|
||||
var_f25 = sp8[0];
|
||||
var_f24 = temp_f29;
|
||||
var_f21 = var_f28;
|
||||
var_f23 = var_f27;
|
||||
} else {
|
||||
var_f30 = temp_f29;
|
||||
var_f26 = var_f28;
|
||||
var_f25 = var_f27;
|
||||
var_f24 = arg1[2];
|
||||
var_f21 = arg0[2];
|
||||
var_f23 = sp8[1];
|
||||
}
|
||||
return ((var_f23 - var_f25) / (2.0f * (var_f24 - var_f30))) * (arg2 - var_f30) * (arg2 - var_f30) + (arg2 - var_f30) * ((var_f21 - var_f26) / (var_f24 - var_f30) - (var_f23 - var_f25) / 2) + var_f26;
|
||||
}
|
||||
|
||||
void Hu3D2Dto3D(Vec *arg0, s16 arg1, Vec *arg2) {
|
||||
CameraData *temp_r31;
|
||||
float temp_f31;
|
||||
float temp_f30;
|
||||
float temp_f29;
|
||||
float temp_f28;
|
||||
float temp_f27;
|
||||
s16 i;
|
||||
Mtx spC;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (arg1 & (1 << i)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
temp_r31 = &Hu3DCamera[i];
|
||||
temp_f30 = sin((temp_r31->fov / 2) * M_PI / 180.0) / cos((temp_r31->fov / 2) * M_PI / 180.0);
|
||||
temp_f31 = temp_f30 * arg0->z * 2.0f;
|
||||
temp_f29 = temp_f31 * 1.2f;
|
||||
temp_f28 = arg0->x / 576.0f;
|
||||
temp_f27 = arg0->y / 480.0f;
|
||||
arg2->x = (temp_f28 - 0.5) * temp_f29;
|
||||
arg2->y = -(temp_f27 - 0.5) * temp_f31;
|
||||
arg2->z = -arg0->z;
|
||||
C_MTXLookAt(spC, &temp_r31->pos, &temp_r31->up, &temp_r31->target);
|
||||
PSMTXInverse(spC, spC);
|
||||
PSMTXMultVec(spC, arg2, arg2);
|
||||
}
|
||||
|
||||
void Hu3D3Dto2D(Vec *arg0, s16 arg1, Vec *arg2) {
|
||||
Vec sp10;
|
||||
CameraData *temp_r31;
|
||||
float temp_f31;
|
||||
float temp_f30;
|
||||
s16 i;
|
||||
Mtx sp1C;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (arg1 & (1 << i)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
temp_r31 = &Hu3DCamera[i];
|
||||
C_MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target);
|
||||
PSMTXMultVec(sp1C, arg0, &sp10);
|
||||
temp_f31 = (sin((temp_r31->fov / 2) * M_PI / 180.0) / cos((temp_r31->fov / 2) * M_PI / 180.0)) * sp10.z * 1.2000000476837158;
|
||||
temp_f30 = (sin((temp_r31->fov / 2) * M_PI / 180.0) / cos((temp_r31->fov / 2) * M_PI / 180.0)) * sp10.z;
|
||||
arg2->x = 288.0f + sp10.x * (288.0f / -temp_f31);
|
||||
arg2->y = 240.0f + sp10.y * (240.0f / temp_f30);
|
||||
arg2->z = 0.0f;
|
||||
}
|
||||
|
||||
void Hu3DMtxTransGet(Mtx arg0, Vec *arg1) {
|
||||
arg1->x = arg0[0][3];
|
||||
arg1->y = arg0[1][3];
|
||||
arg1->z = arg0[2][3];
|
||||
}
|
||||
|
||||
static inline float GetAngleXY(float arg0, float arg1) {
|
||||
if (arg1 == 0.0f) {
|
||||
if (arg0 >= 0.0f) {
|
||||
return M_PI / 2;
|
||||
} else {
|
||||
return -(M_PI / 2);
|
||||
}
|
||||
} else {
|
||||
return atan2f(arg0, arg1);
|
||||
}
|
||||
}
|
||||
|
||||
void Hu3DMtxRotGet(Mtx arg0, Vec *arg1) {
|
||||
float sp48;
|
||||
float sp44;
|
||||
float sp3C;
|
||||
float sp34;
|
||||
float temp_f28;
|
||||
float temp_f27;
|
||||
float temp_f26;
|
||||
float var_f25;
|
||||
float temp_f24;
|
||||
|
||||
temp_f28 = arg0[0][0] * arg0[0][0] + arg0[1][0] * arg0[1][0] + arg0[2][0] * arg0[2][0];
|
||||
sp44 = sqrtf(temp_f28);
|
||||
if (!(sp44 < 0.00000001f)) {
|
||||
temp_f27 = arg0[0][1] * arg0[0][1] + arg0[1][1] * arg0[1][1] + arg0[2][1] * arg0[2][1];
|
||||
sp3C = sqrtf(temp_f27);
|
||||
if (!(sp3C < 0.00000001f)) {
|
||||
temp_f26 = arg0[0][2] * arg0[0][2] + arg0[1][2] * arg0[1][2] + arg0[2][2] * arg0[2][2];
|
||||
sp34 = sqrtf(temp_f26);
|
||||
if (!(sp34 < 0.00000001f)) {
|
||||
temp_f24 = -arg0[2][0] / sp44;
|
||||
if (temp_f24 >= 1.0f) {
|
||||
var_f25 = M_PI / 2;
|
||||
} else if (temp_f24 <= -1.0f) {
|
||||
var_f25 = -(M_PI / 2);
|
||||
} else {
|
||||
var_f25 = asinf(temp_f24);
|
||||
}
|
||||
arg1->y = var_f25;
|
||||
sp48 = cos(arg1->y);
|
||||
if (sp48 >= 0.00000001f) {
|
||||
arg1->x = GetAngleXY(arg0[2][1] / sp3C, arg0[2][2] / sp34);
|
||||
arg1->z = GetAngleXY(arg0[1][0], arg0[0][0]);
|
||||
} else {
|
||||
arg1->x = GetAngleXY(arg0[0][1], arg0[1][1]);
|
||||
arg1->z = 0.0f;
|
||||
}
|
||||
arg1->x = MTXRadToDeg(arg1->x);
|
||||
arg1->y = MTXRadToDeg(arg1->y);
|
||||
arg1->z = MTXRadToDeg(arg1->z);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
arg1->x = 0.0f;
|
||||
arg1->y = 0.0f;
|
||||
arg1->z = 0.0f;
|
||||
}
|
||||
|
||||
void Hu3DMtxScaleGet(Mtx arg0, Vec *arg1) {
|
||||
Vec sp38;
|
||||
Vec sp2C;
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
|
||||
sp2C.x = arg0[0][0];
|
||||
sp2C.y = arg0[1][0];
|
||||
sp2C.z = arg0[2][0];
|
||||
arg1->x = PSVECMag(&sp2C);
|
||||
PSVECNormalize(&sp2C, &sp2C);
|
||||
sp20.x = arg0[0][1];
|
||||
sp20.y = arg0[1][1];
|
||||
sp20.z = arg0[2][1];
|
||||
sp38.x = PSVECDotProduct(&sp2C, &sp20);
|
||||
PSVECScale(&sp2C, &sp8, sp38.x);
|
||||
PSVECSubtract(&sp20, &sp8, &sp20);
|
||||
arg1->y = PSVECMag(&sp20);
|
||||
PSVECNormalize(&sp20, &sp20);
|
||||
sp38.x /= arg1->y;
|
||||
sp14.x = arg0[0][2];
|
||||
sp14.y = arg0[1][2];
|
||||
sp14.z = arg0[2][2];
|
||||
sp38.z = PSVECDotProduct(&sp20, &sp14);
|
||||
PSVECScale(&sp20, &sp8, sp38.z);
|
||||
PSVECSubtract(&sp14, &sp8, &sp14);
|
||||
sp38.y = PSVECDotProduct(&sp2C, &sp14);
|
||||
PSVECScale(&sp2C, &sp8, sp38.y);
|
||||
PSVECSubtract(&sp14, &sp8, &sp14);
|
||||
arg1->z = PSVECMag(&sp14);
|
||||
PSVECNormalize(&sp14, &sp14);
|
||||
PSVECCrossProduct(&sp20, &sp14, &sp8);
|
||||
if (PSVECDotProduct(&sp2C, &sp8) < 0.0) {
|
||||
arg1->x *= -1.0;
|
||||
arg1->y *= -1.0;
|
||||
arg1->z *= -1.0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,18 @@
|
|||
#include "game/hsfman.h"
|
||||
#include "game/ClusterExec.h"
|
||||
#include "game/data.h"
|
||||
#include "game/EnvelopeExec.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/hsfload.h"
|
||||
#include "game/hsfmotion.h"
|
||||
#include "game/init.h"
|
||||
#include "game/memory.h"
|
||||
#include "game/perf.h"
|
||||
#include "game/ShapeExec.h"
|
||||
#include "game/sprite.h"
|
||||
#include "dolphin/gx/GXVert.h"
|
||||
|
||||
#include "math.h"
|
||||
|
||||
ModelData Hu3DData[0x200];
|
||||
CameraData Hu3DCamera[0x10];
|
||||
|
|
@ -335,7 +348,7 @@ s16 Hu3DModelCreate(void *arg0) {
|
|||
var_r31->motion_attr = 0;
|
||||
var_r31->unk_02 = 0;
|
||||
MakeDisplayList(var_r30, (HsfData* ) var_r31->unk_48);
|
||||
var_r31->unk_68.x = 1.0f;
|
||||
var_r31->unk_68 = 1.0f;
|
||||
for (i = 0; i < 4; i++) {
|
||||
var_r31->unk_10[i] = -1;
|
||||
}
|
||||
|
|
@ -356,8 +369,8 @@ s16 Hu3DModelCreate(void *arg0) {
|
|||
if (var_r31->hsfData->shapeCnt != 0) {
|
||||
Hu3DMotionShapeSet(var_r30, var_r31->unk_08);
|
||||
}
|
||||
var_r31->unk_68.y = 0.0f;
|
||||
var_r31->unk_68.z = Hu3DMotionMaxTimeGet(var_r30);
|
||||
var_r31->unk_6C = 0.0f;
|
||||
var_r31->unk_70 = Hu3DMotionMaxTimeGet(var_r30);
|
||||
} else {
|
||||
var_r31->unk_20 = var_r31->unk_08 = -1;
|
||||
}
|
||||
|
|
@ -426,8 +439,8 @@ s16 Hu3DModelLink(s16 arg0) {
|
|||
var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 1.0f;
|
||||
var_r31->unk_08 = temp_r30->unk_08;
|
||||
if (var_r31->unk_08 != -1) {
|
||||
var_r31->unk_68.y = 0.0f;
|
||||
var_r31->unk_68.z = Hu3DMotionMaxTimeGet(var_r28);
|
||||
var_r31->unk_6C = 0.0f;
|
||||
var_r31->unk_70 = Hu3DMotionMaxTimeGet(var_r28);
|
||||
}
|
||||
var_r31->unk_0C = var_r31->unk_0A = var_r31->unk_0E = -1;
|
||||
for (i = 0; i < 4; i++) {
|
||||
|
|
@ -438,7 +451,7 @@ s16 Hu3DModelLink(s16 arg0) {
|
|||
}
|
||||
}
|
||||
var_r31->unk_64 = temp_r30->unk_64;
|
||||
var_r31->unk_68.x = temp_r30->unk_68.x;
|
||||
var_r31->unk_68 = temp_r30->unk_68;
|
||||
var_r31->unk_20 = temp_r30->unk_20;
|
||||
var_r31->camera = -1;
|
||||
var_r31->layer = 0;
|
||||
|
|
@ -458,7 +471,7 @@ s16 Hu3DModelLink(s16 arg0) {
|
|||
return var_r28;
|
||||
}
|
||||
|
||||
s16 Hu3DHookFuncCreate(HsfData* arg0) {
|
||||
s16 Hu3DHookFuncCreate(ModelHookFunc hook) {
|
||||
HsfData* sp8;
|
||||
ModelData* var_r31;
|
||||
s16 var_r29;
|
||||
|
|
@ -473,8 +486,8 @@ s16 Hu3DHookFuncCreate(HsfData* arg0) {
|
|||
if (var_r29 == 0x200) {
|
||||
return -1;
|
||||
}
|
||||
var_r31->hsfData = arg0;
|
||||
var_r31->unk_48 = (HsfData *)(var_r29 + 0x2710);
|
||||
var_r31->hook = hook;
|
||||
var_r31->unk_48 = (HsfData *)(var_r29 + 10000);
|
||||
var_r31->attr = 0x10;
|
||||
var_r31->motion_attr = 0;
|
||||
var_r31->pos.x = var_r31->pos.y = var_r31->pos.z = 0.0f;
|
||||
|
|
@ -486,7 +499,7 @@ s16 Hu3DHookFuncCreate(HsfData* arg0) {
|
|||
var_r31->unk_10[i] = -1;
|
||||
}
|
||||
var_r31->unk_64 = 0.0f;
|
||||
var_r31->unk_68.x = 1.0f;
|
||||
var_r31->unk_68 = 1.0f;
|
||||
var_r31->unk_20 = -1;
|
||||
var_r31->camera = -1;
|
||||
var_r31->layer = 0;
|
||||
|
|
@ -628,11 +641,11 @@ void Hu3DModelPosSet(s16 index, f32 x, f32 y, f32 z) {
|
|||
temp_r31->pos.z = z;
|
||||
}
|
||||
|
||||
void Hu3DModelPosSetV(s16 arg0, Vec arg1) {
|
||||
void Hu3DModelPosSetV(s16 arg0, Vec *arg1) {
|
||||
ModelData* temp_r31;
|
||||
|
||||
temp_r31 = &Hu3DData[arg0];
|
||||
temp_r31->pos = arg1;
|
||||
temp_r31->pos = *arg1;
|
||||
}
|
||||
|
||||
void Hu3DModelRotSet(s16 index, f32 x, f32 y, f32 z) {
|
||||
|
|
@ -644,11 +657,11 @@ void Hu3DModelRotSet(s16 index, f32 x, f32 y, f32 z) {
|
|||
temp_r31->rot.z = z;
|
||||
}
|
||||
|
||||
void Hu3DModelRotSetV(s16 arg0, Vec arg1) {
|
||||
void Hu3DModelRotSetV(s16 arg0, Vec *arg1) {
|
||||
ModelData* temp_r31;
|
||||
|
||||
temp_r31 = &Hu3DData[arg0];
|
||||
temp_r31->rot = arg1;
|
||||
temp_r31->rot = *arg1;
|
||||
}
|
||||
|
||||
void Hu3DModelScaleSet(s16 index, f32 x, f32 y, f32 z) {
|
||||
|
|
@ -660,11 +673,11 @@ void Hu3DModelScaleSet(s16 index, f32 x, f32 y, f32 z) {
|
|||
temp_r31->scale.z = z;
|
||||
}
|
||||
|
||||
void Hu3DModelScaleSetV(s16 arg0, Vec arg1) {
|
||||
void Hu3DModelScaleSetV(s16 arg0, Vec *arg1) {
|
||||
ModelData* temp_r31;
|
||||
|
||||
temp_r31 = &Hu3DData[arg0];
|
||||
temp_r31->scale = arg1;
|
||||
temp_r31->scale = *arg1;
|
||||
}
|
||||
|
||||
void Hu3DModelAttrSet(s16 arg0, u32 arg1) {
|
||||
|
|
@ -1289,7 +1302,7 @@ s16 Hu3DModelCameraCreate(s16 arg0, u16 arg1) {
|
|||
ModelData* temp_r31;
|
||||
s16 temp_r3;
|
||||
|
||||
temp_r3 = Hu3DHookFuncCreate((HsfData* )-1);
|
||||
temp_r3 = Hu3DHookFuncCreate((ModelHookFunc)-1);
|
||||
temp_r31 = &Hu3DData[(s16) temp_r3];
|
||||
temp_r31->attr &= ~0x10;
|
||||
temp_r31->attr |= 0x10000 | 0x2000;
|
||||
|
|
|
|||
1430
src/game/hsfmotion.c
Normal file
1430
src/game/hsfmotion.c
Normal file
File diff suppressed because it is too large
Load diff
74
src/game/jmp.c
Executable file
74
src/game/jmp.c
Executable file
|
|
@ -0,0 +1,74 @@
|
|||
#include "game/jmp.h"
|
||||
|
||||
int gcsetjmp(register jmp_buf *jump) {
|
||||
// clang-format off
|
||||
asm {
|
||||
mflr r5
|
||||
mfcr r6
|
||||
stw r5, jump->lr
|
||||
stw r6, jump->cr
|
||||
stw r1, jump->sp
|
||||
stw r2, jump->r2
|
||||
stmw r13, jump->regs[0]
|
||||
mffs f0
|
||||
stfd f14, jump->flt_regs[0]
|
||||
stfd f15, jump->flt_regs[1]
|
||||
stfd f16, jump->flt_regs[2]
|
||||
stfd f17, jump->flt_regs[3]
|
||||
stfd f18, jump->flt_regs[4]
|
||||
stfd f19, jump->flt_regs[5]
|
||||
stfd f20, jump->flt_regs[6]
|
||||
stfd f21, jump->flt_regs[7]
|
||||
stfd f22, jump->flt_regs[8]
|
||||
stfd f23, jump->flt_regs[9]
|
||||
stfd f24, jump->flt_regs[10]
|
||||
stfd f25, jump->flt_regs[11]
|
||||
stfd f26, jump->flt_regs[12]
|
||||
stfd f27, jump->flt_regs[13]
|
||||
stfd f28, jump->flt_regs[14]
|
||||
stfd f29, jump->flt_regs[15]
|
||||
stfd f30, jump->flt_regs[16]
|
||||
stfd f31, jump->flt_regs[17]
|
||||
stfd f0, jump->flt_regs[18]
|
||||
}
|
||||
// clang-format on
|
||||
return 0;
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
asm int gclongjmp(register jmp_buf *jump, register int status) {
|
||||
nofralloc
|
||||
lwz r5, jump->lr
|
||||
lwz r6, jump->cr
|
||||
mtlr r5
|
||||
mtcrf 255, r6
|
||||
lwz r1, jump->sp
|
||||
lwz r2, jump->r2
|
||||
lmw r13, jump->regs[0]
|
||||
lfd f14, jump->flt_regs[0]
|
||||
lfd f15, jump->flt_regs[1]
|
||||
lfd f16, jump->flt_regs[2]
|
||||
lfd f17, jump->flt_regs[3]
|
||||
lfd f18, jump->flt_regs[4]
|
||||
lfd f19, jump->flt_regs[5]
|
||||
lfd f20, jump->flt_regs[6]
|
||||
lfd f21, jump->flt_regs[7]
|
||||
lfd f22, jump->flt_regs[8]
|
||||
lfd f23, jump->flt_regs[9]
|
||||
lfd f24, jump->flt_regs[10]
|
||||
lfd f25, jump->flt_regs[11]
|
||||
lfd f26, jump->flt_regs[12]
|
||||
lfd f27, jump->flt_regs[13]
|
||||
lfd f28, jump->flt_regs[14]
|
||||
lfd f29, jump->flt_regs[15]
|
||||
lfd f30, jump->flt_regs[16]
|
||||
lfd f0, jump->flt_regs[18]
|
||||
lfd f31, jump->flt_regs[17]
|
||||
cmpwi status, 0
|
||||
mr r3, status
|
||||
mtfsf 255, f0
|
||||
bnelr
|
||||
li r3, 1
|
||||
blr
|
||||
}
|
||||
// clang-format on
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
#include "game/audio.h"
|
||||
#include "game/esprite.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/printfunc.h"
|
||||
#include "game/object.h"
|
||||
|
|
@ -140,7 +142,7 @@ void omOvlReturnEx(s16 level, s16 arg2)
|
|||
|
||||
void omOvlKill(s16 arg)
|
||||
{
|
||||
CharModelKillAll(-1);
|
||||
CharModelKill(-1);
|
||||
MGSeqKillAll();
|
||||
Hu3DAllKill();
|
||||
HuWinAllKill();
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@
|
|||
|
||||
#define PROCESS_MEMORY_RETADDR 0xA5A5A5A5
|
||||
|
||||
extern int gcsetjmp(jmp_buf *jump);
|
||||
extern void gclongjmp(jmp_buf *jump, int status);
|
||||
|
||||
#define EXEC_NORMAL 0
|
||||
#define EXEC_SLEEP 1
|
||||
#define EXEC_CHILDWATCH 2
|
||||
|
|
|
|||
252
src/game/thpmain.c
Executable file
252
src/game/thpmain.c
Executable file
|
|
@ -0,0 +1,252 @@
|
|||
#include "game/thpmain.h"
|
||||
#include "game/hsfdraw.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/init.h"
|
||||
#include "game/process.h"
|
||||
#include "game/sprite.h"
|
||||
#include "game/THPSimple.h"
|
||||
|
||||
#include "string.h"
|
||||
|
||||
static void THPTestProc(void);
|
||||
static void THPViewFunc(ModelData *arg0, Mtx arg1);
|
||||
static void THPViewSprFunc(SpriteData *arg0);
|
||||
static void THPDecodeFunc(void *param);
|
||||
|
||||
static char THPFileName[64];
|
||||
|
||||
static UnkThpStruct04 audioTrack;
|
||||
static s32 decodeRate;
|
||||
static u8 *decodeStackP;
|
||||
static OSThread *decodeThread;
|
||||
static s16 THPLoopF;
|
||||
static s16 THPStat;
|
||||
static u32 THPFrame;
|
||||
static s16 THPStart;
|
||||
Process *THPProc;
|
||||
|
||||
s16 HuTHPSprCreateVol(char *path, s16 loop, s16 prio, float volume) {
|
||||
s16 temp_r31;
|
||||
|
||||
if (THPProc) {
|
||||
return -1;
|
||||
}
|
||||
THPStart = 0;
|
||||
THPProc = HuPrcCreate(THPTestProc, 0x64, 0x3000, 0);
|
||||
if (THPProc == 0) {
|
||||
return -1;
|
||||
}
|
||||
temp_r31 = HuSprFuncCreate(THPViewSprFunc, prio);
|
||||
if (temp_r31 == -1) {
|
||||
return -1;
|
||||
}
|
||||
THPSimpleInit(2);
|
||||
SimpleControl.unk19C = 0;
|
||||
SimpleControl.unk19E = temp_r31;
|
||||
SimpleControl.unkBC = volume;
|
||||
strcpy(THPFileName, path);
|
||||
THPLoopF = loop;
|
||||
THPStat = 0;
|
||||
THPFrame = 0;
|
||||
return temp_r31;
|
||||
}
|
||||
|
||||
s16 HuTHPSprCreate(char *path, s16 loop, s16 prio) {
|
||||
return HuTHPSprCreateVol(path, loop, prio, 110.0f);
|
||||
}
|
||||
|
||||
s16 HuTHP3DCreateVol(char *path, s16 loop, float volume) {
|
||||
s16 temp_r31;
|
||||
|
||||
if (THPProc) {
|
||||
return;
|
||||
}
|
||||
THPStart = 0;
|
||||
THPProc = HuPrcCreate(THPTestProc, 0x64, 0x3000, 0);
|
||||
if (THPProc == 0) {
|
||||
return -1;
|
||||
}
|
||||
THPSimpleInit(2);
|
||||
SimpleControl.unk19C = 1;
|
||||
temp_r31 = Hu3DHookFuncCreate(&THPViewFunc);
|
||||
SimpleControl.unk19E = temp_r31;
|
||||
SimpleControl.unkBC = volume;
|
||||
strcpy(THPFileName, path);
|
||||
THPLoopF = loop;
|
||||
THPStat = 0;
|
||||
THPFrame = 0;
|
||||
Hu3DModelAttrSet(SimpleControl.unk19E, 1);
|
||||
return temp_r31;
|
||||
}
|
||||
|
||||
s16 HuTHP3DCreate(char *path, s16 loop) {
|
||||
return HuTHP3DCreateVol(path, loop, 110.0f);
|
||||
}
|
||||
|
||||
void HuTHPStop(void) {
|
||||
THPStat = 1;
|
||||
}
|
||||
|
||||
void HuTHPClose(void) {
|
||||
THPStat = 2;
|
||||
}
|
||||
|
||||
void HuTHPRestart(void) {
|
||||
THPStat = 3;
|
||||
}
|
||||
|
||||
BOOL HuTHPEndCheck(void) {
|
||||
s32 temp_r31;
|
||||
|
||||
temp_r31 = THPSimpleGetTotalFrame() - 1;
|
||||
if (temp_r31 <= 0) {
|
||||
return FALSE;
|
||||
}
|
||||
return (temp_r31 <= THPFrame);
|
||||
}
|
||||
|
||||
s32 HuTHPFrameGet(void) {
|
||||
return THPFrame;
|
||||
}
|
||||
|
||||
s32 HuTHPTotalFrameGet(void) {
|
||||
return THPSimpleGetTotalFrame();
|
||||
}
|
||||
|
||||
void HuTHPSetVolume(s32 left, s32 right) {
|
||||
THPSimpleSetVolume(left, right);
|
||||
}
|
||||
|
||||
static void THPTestProc(void) {
|
||||
s32 temp_r29;
|
||||
u32 var_r28;
|
||||
void *temp_r30;
|
||||
|
||||
while (THPSimpleOpen(THPFileName) == 0) {
|
||||
OSReport("THPSimpleOpen fail");
|
||||
HuPrcVSleep();
|
||||
}
|
||||
THPSimpleGetVideoInfo(&audioTrack);
|
||||
temp_r29 = THPSimpleCalcNeedMemory();
|
||||
OSReport("Size %x\n", temp_r29);
|
||||
temp_r30 = HuMemDirectMalloc(HEAP_DATA, temp_r29);
|
||||
memset(temp_r30, 0, temp_r29);
|
||||
DCFlushRange(temp_r30, temp_r29);
|
||||
if (temp_r30 == 0) {
|
||||
OSReport("Can't allocate the memory\n");
|
||||
}
|
||||
THPSimpleSetBuffer(temp_r30);
|
||||
while (THPSimplePreLoad(THPLoopF) == 0) {
|
||||
OSReport("THPSimplePreLoad fail");
|
||||
HuPrcVSleep();
|
||||
}
|
||||
HuPrcVSleep();
|
||||
decodeStackP = HuMemDirectMalloc(HEAP_SYSTEM, 0x2000);
|
||||
decodeThread = OSSetIdleFunction(THPDecodeFunc, NULL, decodeStackP + 0x2000, 0x2000);
|
||||
decodeRate = 0;
|
||||
THPStart = 1;
|
||||
if (SimpleControl.unk19C == 1) {
|
||||
Hu3DModelAttrReset(SimpleControl.unk19E, 1);
|
||||
} else {
|
||||
HuSprAttrReset(SimpleControl.unk19E, 0, 4);
|
||||
}
|
||||
while (1) {
|
||||
if (THPStat == 2) {
|
||||
break;
|
||||
}
|
||||
switch (THPStat) {
|
||||
case 0:
|
||||
var_r28 = 1;
|
||||
THPStat = 4;
|
||||
break;
|
||||
case 1:
|
||||
THPSimpleAudioStop();
|
||||
THPSimpleLoadStop();
|
||||
break;
|
||||
case 3:
|
||||
THPSimpleAudioStop();
|
||||
THPSimpleLoadStop();
|
||||
while (THPSimplePreLoad(THPLoopF) == 0) {
|
||||
OSReport("THPSimplePreLoad fail");
|
||||
HuPrcVSleep();
|
||||
}
|
||||
THPStat = 0;
|
||||
var_r28 = 1;
|
||||
break;
|
||||
}
|
||||
if (var_r28 != 0) {
|
||||
THPSimpleAudioStart();
|
||||
var_r28 = 0;
|
||||
}
|
||||
HuPrcVSleep();
|
||||
}
|
||||
if (SimpleControl.unk19C == 1) {
|
||||
Hu3DModelKill(SimpleControl.unk19E);
|
||||
} else {
|
||||
HuSprKill(SimpleControl.unk19E);
|
||||
}
|
||||
OSCancelThread(decodeThread);
|
||||
HuMemDirectFree(decodeStackP);
|
||||
THPSimpleAudioStop();
|
||||
THPSimpleLoadStop();
|
||||
THPSimpleClose();
|
||||
HuMemDirectFree(temp_r30);
|
||||
THPSimpleQuit();
|
||||
THPProc = NULL;
|
||||
HuPrcKill(HuPrcCurrentGet());
|
||||
while (1) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
static void THPViewFunc(ModelData *arg0, Mtx arg1) {
|
||||
GXColor spC = { 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
|
||||
if (THPStart != 0) {
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
THPFrame = THPSimpleDrawCurrentFrame(RenderMode, &spC, arg1, -audioTrack.unk00 / 2, audioTrack.unk04 / 2, audioTrack.unk00, -audioTrack.unk04);
|
||||
THPSimpleAudioStart();
|
||||
}
|
||||
}
|
||||
|
||||
static void THPViewSprFunc(SpriteData *arg0) {
|
||||
Vec spC = { 0.0f, 0.0f, 1.0f };
|
||||
GXColor sp8;
|
||||
s32 temp_r30;
|
||||
s32 temp_r29;
|
||||
Mtx sp48;
|
||||
Mtx sp18;
|
||||
|
||||
if (THPStart != 0) {
|
||||
sp8.r = arg0->r;
|
||||
sp8.g = arg0->g;
|
||||
sp8.b = arg0->b;
|
||||
sp8.a = arg0->a;
|
||||
if (arg0->z_rot != 0.0f) {
|
||||
PSMTXRotAxisRad(sp18, &spC, MTXDegToRad(arg0->z_rot));
|
||||
PSMTXScale(sp48, arg0->scale_x, arg0->scale_y, 1.0f);
|
||||
PSMTXConcat(sp18, sp48, sp48);
|
||||
} else {
|
||||
PSMTXScale(sp48, arg0->scale_x, arg0->scale_y, 1.0f);
|
||||
}
|
||||
mtxTransCat(sp48, arg0->x, arg0->y, 0.0f);
|
||||
PSMTXConcat(*arg0->group_mtx, sp48, sp48);
|
||||
temp_r30 = -((s32) audioTrack.unk00 / 2);
|
||||
temp_r29 = -((s32) audioTrack.unk04 / 2);
|
||||
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
|
||||
THPFrame = THPSimpleDrawCurrentFrame(RenderMode, &sp8, sp48, temp_r30, temp_r29, audioTrack.unk00, audioTrack.unk04);
|
||||
}
|
||||
}
|
||||
|
||||
static void THPDecodeFunc(void *param) {
|
||||
while (1) {
|
||||
if (THPStat == 2) {
|
||||
break;
|
||||
}
|
||||
if (THPSimpleDecode() == 1) {
|
||||
OSReport("Fail to decode video data");
|
||||
}
|
||||
VIWaitForRetrace();
|
||||
}
|
||||
}
|
||||
|
|
@ -201,14 +201,12 @@ void HuWindowInit(void) {
|
|||
void HuWinInit(s32 mess_data_no) {
|
||||
s16 i;
|
||||
void *anim_data;
|
||||
s8 language;
|
||||
|
||||
if (!winProc) {
|
||||
HuAR_ARAMtoMRAM(winAMemP);
|
||||
winProc = HuPrcCreate(HuWinProc, 0x64, 0x1000, 0);
|
||||
HuPrcSetStat(winProc, 0xC);
|
||||
language = GWGameStat.language;
|
||||
LanguageNo = language;
|
||||
LanguageNo = GWLanguageGet();
|
||||
messDataNo = mess_data_no;
|
||||
fontWidthP = (LanguageNo == 0) ? charWJTbl : charWETbl;
|
||||
HuWinMesRead(mess_data_no);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue