Merge remote-tracking branch 'upstream/main'

This commit is contained in:
M0liusX 2024-04-01 10:21:21 -05:00
commit 299866766c
200 changed files with 51340 additions and 6907 deletions

View file

@ -1,5 +1,6 @@
#include "game/gamework_data.h"
#include "game/process.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/sprite.h"
#include "game/object.h"
@ -14,6 +15,8 @@
#include "math.h"
#include "rel_sqrt_consts.h"
#include "data_num/title.h"
#define HU_PAD_BTN_ALL (HuPadBtn[0] | HuPadBtn[1] | HuPadBtn[2] | HuPadBtn[3])
#define HU_PAD_BTNDOWN_ALL (HuPadBtnDown[0] | HuPadBtnDown[1] | HuPadBtnDown[2] | HuPadBtnDown[3])
#define HU_PAD_DSTK_ALL (HuPadDStkRep[0] | HuPadDStkRep[1] | HuPadDStkRep[2] | HuPadDStkRep[3])
@ -43,8 +46,6 @@ static BOOL TitleProc(void);
void *logoReadNintendo(void);
#define M_PI 3.141592653589793
void ModuleProlog(void)
{
omOvlHisData *history;
@ -83,14 +84,14 @@ static void BootProc(void)
sprite_nintendo = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 0, sprite_nintendo);
HuSprPosSet(group, 0, 288, 240);
HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF);
if(omovlevtno != 0) {
HuAudSndGrpSetSet(0);
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 1));
data = HuSprAnimReadFile(TITLE_HUDSON_ANM);
sprite_hudson = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 1, sprite_hudson);
HuSprPosSet(group, 1, 288, 240);
HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
HuWinInit(1);
TitleInit();
SystemInitF = 1;
@ -103,7 +104,7 @@ static void BootProc(void)
GWPlayerCfg[i].pad_idx = i;
}
repeat:
HuSprAttrReset(group, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(group, 0, HUSPR_ATTR_DISPOFF);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30);
while(WipeStatGet()) {
HuPrcVSleep();
@ -116,11 +117,11 @@ static void BootProc(void)
MGSeqInit();
HuWinInit(1);
TitleInit();
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 1));
data = HuSprAnimReadFile(TITLE_HUDSON_ANM);
sprite_hudson = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 1, sprite_hudson);
HuSprPosSet(group, 1, 288, 240);
HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 3000) {
HuPrcVSleep();
}
@ -136,8 +137,8 @@ static void BootProc(void)
while(WipeStatGet()) {
HuPrcVSleep();
}
HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(group, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF);
HuSprAttrReset(group, 1, HUSPR_ATTR_DISPOFF);
HuPrcSleep(60);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30);
while(WipeStatGet()) {
@ -172,8 +173,8 @@ static void BootProc(void)
while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 1000) {
HuPrcVSleep();
}
HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
group_thp = HuSprGrpCreate(1);
sprite_thp = HuTHPSprCreateVol("movie/opmov_a00.thp", 0, 100, 122);
HuSprGrpMemberSet(group_thp, 0, sprite_thp);
@ -287,19 +288,19 @@ static void ProgressiveProc(void)
VIFlush();
}
group = HuSprGrpCreate(3);
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 3));
data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM);
sprite = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 0, sprite);
HuSprPosSet(group, 0, 288, 240);
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 6));
data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM);
sprite = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 1, sprite);
HuSprPosSet(group, 1, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]);
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 7));
data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM);
sprite = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 2, sprite);
HuSprPosSet(group, 2, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]);
HuSprAttrSet(group, 2, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30);
while(WipeStatGet()) {
HuPrcVSleep();
@ -311,9 +312,9 @@ static void ProgressiveProc(void)
i=0;
}
if(HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) {
HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF);
HuSprPosSet(group, 2, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]);
HuSprAttrReset(group, 2, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF);
break;
}
HuPrcVSleep();
@ -333,9 +334,9 @@ static void ProgressiveProc(void)
HuSprGrpKill(group);
group = HuSprGrpCreate(1);
if(!option) {
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 4));
data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM);
} else {
data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 5));
data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM);
}
sprite = HuSprCreate(data, 0, 0);
HuSprGrpMemberSet(group, 0, sprite);
@ -452,38 +453,38 @@ static void TitleInit(void)
s16 model;
s16 sprite;
AnimData *sprite_data;
titleModel[0] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 11));
titleModel[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF);
Hu3DModelAttrSet(model, 1);
Hu3DModelAttrSet(model, 0x40000001);
titleModel[1] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 12));
titleModel[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF);
Hu3DModelAttrSet(model, 1);
Hu3DModelAttrSet(model, 0x40000001);
titleModel[2] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 13));
titleModel[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF);
Hu3DModelAttrSet(model, 1);
Hu3DModelAttrSet(model, 0x40000001);
Hu3DModelCameraInfoSet(model, 1);
Hu3DModelLightInfoSet(model, 1);
titleGroup = HuSprGrpCreate(4);
sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 8));
sprite_data = HuSprAnimReadFile(TITLE_BG_ANM);
sprite = HuSprCreate(sprite_data, 0, 0);
HuSprGrpMemberSet(titleGroup, 0, sprite);
HuSprAttrSet(titleGroup, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 0, HUSPR_ATTR_DISPOFF);
HuSprDrawNoSet(titleGroup, 0, 127);
HuSprPosSet(titleGroup, 0, 288, 240);
sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 10));
sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM);
sprite = HuSprCreate(sprite_data, 1, 0);
HuSprGrpMemberSet(titleGroup, 1, sprite);
HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 1, HUSPR_ATTR_DISPOFF);
HuSprPosSet(titleGroup, 1, 288, 420);
sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 2));
sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM);
sprite = HuSprCreate(sprite_data, 2, 0);
HuSprGrpMemberSet(titleGroup, 2, sprite);
HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR);
HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF|HUSPR_ATTR_LINEAR);
HuSprPosSet(titleGroup, 2, 288, 380);
sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 9));
sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM);
sprite = HuSprCreate(sprite_data, 0, 0);
HuSprGrpMemberSet(titleGroup, 3, sprite);
HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR);
HuSprAttrSet(titleGroup, 3, HUSPR_ATTR_DISPOFF|HUSPR_ATTR_LINEAR);
HuSprPosSet(titleGroup, 3, 288, 200);
}
@ -495,8 +496,8 @@ static BOOL TitleProc(void)
s16 i;
Hu3DModelAttrReset(titleModel[0], 1);
Hu3DModelAttrReset(titleModel[1], 1);
HuSprAttrReset(titleGroup, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(titleGroup, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(titleGroup, 0, HUSPR_ATTR_DISPOFF);
HuSprAttrReset(titleGroup, 1, HUSPR_ATTR_DISPOFF);
OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, y_offset));
OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0));
HuAudSStreamPlay(20);
@ -504,14 +505,14 @@ static BOOL TitleProc(void)
while(WipeStatGet()) {
HuPrcVSleep();
}
HuSprAttrReset(titleGroup, 3, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(titleGroup, 3, HUSPR_ATTR_DISPOFF);
for(i=1; i<=50; i++) {
scale = (cos((i*1.8)*M_PI/180.0)*10.0)+1.0;
HuSprScaleSet(titleGroup, 3, scale, scale);
HuSprTPLvlSet(titleGroup, 3, i/50.0);
HuPrcVSleep();
}
HuSprAttrReset(titleGroup, 2, SPRITE_ATTR_HIDDEN);
HuSprAttrReset(titleGroup, 2, HUSPR_ATTR_DISPOFF);
for(i=scale_time=0; i<1800; i++) {
if(i <= 10) {
HuSprTPLvlSet(titleGroup, 2, i/10.0);
@ -521,7 +522,7 @@ static BOOL TitleProc(void)
if(ret < 0) {
OSReport(">>>>>Error %d\n", ret);
}
HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF);
return 1;
}
scale = (sin((i*scale_time)*M_PI/180.0)*0.1)+0.9;
@ -540,10 +541,10 @@ static BOOL TitleProc(void)
Hu3DModelAttrSet(titleModel[0], 1);
Hu3DModelAttrSet(titleModel[1], 1);
Hu3DModelAttrSet(titleModel[2], 1);
HuSprAttrSet(titleGroup, 0, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN);
HuSprAttrSet(titleGroup, 0, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(titleGroup, 1, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF);
HuSprAttrSet(titleGroup, 3, HUSPR_ATTR_DISPOFF);
return 0;
}

1178
src/REL/instDll/main.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -220,8 +220,8 @@ void fn_2_C1C(unkStructBSS114* arg0) {
void fn_2_11D0(unkStructBSS114* arg0) {
unkStructBSS114* sp1C;
Vec3f sp18;
Vec3f spC;
Vec sp18;
Vec spC;
unkSubstructBSS114* sp8;
unkSubstructBSS114* temp_r31;
s32 i;
@ -341,9 +341,9 @@ void fn_2_1858(s16 arg0, s16 arg1) {
}
// void fn_2_1A38(unkStructBSS114* arg0) {
// Vec3f sp20;
// Vec3f sp14;
// Vec3f sp8;
// Vec sp20;
// Vec sp14;
// Vec sp8;
// unkStructBSS114 *temp;
// unkStructBSS114 *temp2;
@ -364,8 +364,8 @@ void fn_2_1858(s16 arg0, s16 arg1) {
// }
// void fn_2_1B80(unkStructBSS114* arg0) {
// Vec3f sp14;
// Vec3f sp8;
// Vec sp14;
// Vec sp8;
// unkStructBSS114* temp;
// unkStructBSS114* temp2;
@ -384,9 +384,9 @@ void fn_2_1858(s16 arg0, s16 arg1) {
// }
// void fn_2_1CF0(unkStructBSS114* arg0) {
// Vec3f sp20;
// Vec3f sp14;
// Vec3f sp8;
// Vec sp20;
// Vec sp14;
// Vec sp8;
// unkStructBSS114 *temp;
// temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[2]);
@ -404,10 +404,10 @@ void fn_2_1858(s16 arg0, s16 arg1) {
// }
// void fn_2_1DE8(unkStructBSS114* arg0) {
// Vec3f sp2C;
// Vec3f sp20;
// Vec3f sp14;
// Vec3f sp8;
// Vec sp2C;
// Vec sp20;
// Vec sp14;
// Vec sp8;
// unkStructBSS114 *temp2;
// unkStructBSS114 *temp;
@ -440,7 +440,7 @@ void fn_2_1858(s16 arg0, s16 arg1) {
// }
// void fn_2_20B0(omObjData* arg0) {
// Vec3f sp8;
// Vec sp8;
// omObjData* temp;
// temp = Hu3DModelObjPtrGet(arg0->model[0], lbl_2_data_124[4]);
@ -461,10 +461,10 @@ void fn_2_1858(s16 arg0, s16 arg1) {
// }
// void fn_2_21F8(omObjData* arg0) {
// Vec3f sp2C;
// Vec3f sp20;
// Vec3f sp14;
// Vec3f sp8;
// Vec sp2C;
// Vec sp20;
// Vec sp14;
// Vec sp8;
// s32 i;
// s32 var_r30_2;
// unkStructBSS114* temp;

View file

@ -1,7 +1,8 @@
#include "common.h"
#include "unsplit.h"
#include "REL/executor.h"
#include <dolphin/mtx.h>
#include "game/objsub.h"
#include "game/object.h"
// global data //
typedef struct unkStruct18FC10 {
@ -35,7 +36,7 @@ typedef struct unkStructBSS114 {
s32 unk_04;
char unk_08[0xC];
void *unk_14;
Vec3f unk_18;
Vec unk_18;
char unk_24[0x1C];
unkSubstructBSS114 *unk_40;
char unk_44[0x8];
@ -46,7 +47,7 @@ typedef struct unkStructBSS114 {
} unkStructBSS114;
typedef struct unkStruct18BFC0 {
char unk_00[0x14];
Vec3f unk_14;
Vec unk_14;
} unkStruct18BFC0;
typedef struct unkStruct18C8FC {
s16 unk_00;
@ -61,12 +62,12 @@ extern s16 lbl_801D3CC2;
extern void Hu3DModelAttrSet(s16, s32);
extern void Hu3DModelAttrReset(s16, s32);
extern omObjData* Hu3DModelObjPtrGet(s16, s32);
extern void Hu3DCameraPosSetV(s32, Vec3f*, Vec3f*, Vec3f*);
extern s16 Hu3DGLightCreateV(Vec3f*, Vec3f*, s32*);
extern void Hu3DCameraPosSetV(s32, Vec*, Vec*, Vec*);
extern s16 Hu3DGLightCreateV(Vec*, Vec*, s32*);
extern void Hu3DGLightInfinitytSet(s16);
extern void Hu3DReflectNoSet(s16);
extern void Hu3DShadowCreate(f32, f32, f32);
extern void Hu3DShadowPosSet(Vec3f*, Vec3f*, Vec3f*);
extern void Hu3DShadowPosSet(Vec*, Vec*, Vec*);
extern void Hu3DShadowTPLvlSet(f32);
extern void Hu3DFogSet(f32, f32, u8, u8, u8);
extern void omOvlReturnEx(s16, s16);
@ -80,7 +81,7 @@ extern void omSetSca(omObjData*, f32, f32, f32);
extern u8 frand(void);
extern s32 HuAudFXPlay(s32);
extern void HuAudFXStop(s32);
extern s32 HuAudFXEmiterPlay(s32, Vec3f*);
extern s32 HuAudFXEmiterPlay(s32, Vec*);
extern void HuAudFXListnerKill(void);
extern void HuAudSeqFadeOut(s32, s32);
extern s16 MGSeqCreate(s32, ...);
@ -95,11 +96,11 @@ extern void espBankSet(s16, s16);
extern void espDrawNoSet(s16, s16);
extern void WipeCreate(s16, s16, s16);
extern u8 WipeStatGet(void);
extern f32 PSVECNormalize(Vec3f*, Vec3f*);
extern f32 PSVECNormalize(Vec*, Vec*);
// local data //
typedef struct unkStructBSS54 {
Vec3f unk_00;
Vec unk_00;
} unkStructBSS54;
typedef struct unkStructBSS100 {
void *unk_00;
@ -108,12 +109,12 @@ typedef struct unkStructBSS100 {
extern f32 lbl_2_data_0 = -7.1875f;
extern s16 lbl_2_data_4[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
extern Vec3f lbl_2_data_14 = { 1500.0f, 2500.0f, 1500.0f };
extern Vec3f lbl_2_data_20 = { 0.0f, -1.0f, 0.0f };
extern Vec lbl_2_data_14 = { 1500.0f, 2500.0f, 1500.0f };
extern Vec lbl_2_data_20 = { 0.0f, -1.0f, 0.0f };
extern s32 lbl_2_data_2C = -1;
extern Vec3f lbl_2_data_30 = { 0.0f, 2500.0f, 0.0f };
extern Vec3f lbl_2_data_3C = { 0.0f, 1.0f, -1.0f };
extern Vec3f lbl_2_data_48 = { 0.0f, 0.0f, 0.0f };
extern Vec lbl_2_data_30 = { 0.0f, 2500.0f, 0.0f };
extern Vec lbl_2_data_3C = { 0.0f, 1.0f, -1.0f };
extern Vec lbl_2_data_48 = { 0.0f, 0.0f, 0.0f };
extern char lbl_2_data_6F[] = "winnercnt:%d";
extern s32 lbl_2_data_80[8] = { 0x610000, 0x610001, 0x610002, 0x610003, 0x610004, 0x610005, 0x610006, 0x610007 };
extern s32 lbl_2_data_124[5];
@ -121,13 +122,13 @@ extern s32 lbl_2_data_124[5];
extern s32 lbl_2_bss_8;
extern f32 lbl_2_bss_10;
extern unkStruct18FC10* lbl_2_bss_1C;
extern Vec3f lbl_2_bss_2C;
extern Vec3f lbl_2_bss_38;
extern Vec3f lbl_2_bss_44;
extern Vec lbl_2_bss_2C;
extern Vec lbl_2_bss_38;
extern Vec lbl_2_bss_44;
extern f32 lbl_2_bss_50;
extern unkStructBSS54 lbl_2_bss_54;
extern Vec3f lbl_2_bss_60;
extern Vec3f lbl_2_bss_6C;
extern Vec lbl_2_bss_60;
extern Vec lbl_2_bss_6C;
extern f32 lbl_2_bss_84;
extern f32 lbl_2_bss_88;
extern s32 lbl_2_bss_90[4];
@ -180,7 +181,7 @@ void fn_2_48A0(void*);
void fn_2_7CB4(void*);
void fn_2_8E74(void*);
void fn_2_95E4(void*);
void fn_2_91AC(void*, Vec3f*);
void fn_2_91AC(void*, Vec*);
void fn_2_9D00(void*);
void fn_2_BD90(void*);
void fn_2_C6DC(void*);
@ -188,10 +189,10 @@ void fn_2_C130(void);
void fn_2_D088(void*);
void fn_2_DBCC(s16);
void fn_2_E6BC(s32, f32, f32, f32, f32, f32);
unkStructBSS114* fn_2_FC40(s32, Vec3f*, Vec3f*, Vec3f*);
void fn_2_10240(Vec3f*, Vec3f*);
unkStructBSS114* fn_2_FC40(s32, Vec*, Vec*, Vec*);
void fn_2_10240(Vec*, Vec*);
void fn_2_1041C(void);
s32 fn_2_14640(void*);
void fn_2_10710(void);
s16 fn_2_1079C(void);
s32 fn_2_10A88(Vec3f*, s16);
s32 fn_2_10A88(Vec*, s16);

331
src/REL/messDll/main.c Executable file
View file

@ -0,0 +1,331 @@
#include "REL/executor.h"
#include "game/gamework_data.h"
#include "game/hsfman.h"
#include "game/object.h"
#include "game/pad.h"
#include "game/process.h"
#include "game/window.h"
#include "game/wipe.h"
#include "dolphin.h"
#include "math.h"
#include "rel_sqrt_consts.h"
extern s32 sprintf(char*, const char*, s32);
static void fn_1_2BC(omObjData *arg0);
static void fn_1_300(omObjData *arg0);
static void fn_1_E88(void);
static s32 fn_1_11B0(s16 arg0, s16 arg1);
static Process *lbl_1_bss_34;
static omObjData *lbl_1_bss_30;
static omObjData *lbl_1_bss_2C;
static u8 lbl_1_bss_C_pad[0x20];
static Process *lbl_1_bss_8;
static u8 lbl_1_bss_4_pad[4];
static s16 lbl_1_bss_2;
static s16 lbl_1_bss_0;
void ModuleProlog(void) {
OSReport("******* SAFObjectSetup *********\n");
lbl_1_bss_34 = omInitObjMan(0x32, 0x2000);
CRot.x = -20.0f;
CRot.y = 0.0f;
CRot.z = 0.0f;
Center.x = 0.0f;
Center.y = 120.0f;
Center.z = 0.0f;
CZoom = 500.0f;
Hu3DCameraCreate(1);
Hu3DCameraPerspectiveSet(1, 45.0f, 20.0f, 15000.0f, 1.2f);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
lbl_1_bss_30 = omAddObjEx(lbl_1_bss_34, 0, 0x40, 0, -1, fn_1_2BC);
lbl_1_bss_2C = omAddObjEx(lbl_1_bss_34, 0x7FDA, 0, 0, -1, omOutView);
HuWinInit(1);
lbl_1_bss_8 = HuPrcChildCreate(fn_1_E88, 100, 0x3000, 0, lbl_1_bss_34);
}
static void fn_1_2BC(omObjData *arg0) {
WipeCreate(1, 0, 10);
arg0->func = fn_1_300;
}
static void fn_1_300(omObjData *arg0) {
Vec sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
float temp_f31;
s8 temp_r31;
if (HuPadBtnDown[0] & 0x1000) {
GWSystem.mg_next = 1;
omOvlReturnEx(1, 1);
return;
}
CRot.x += -HuPadSubStkY[0] / 20;
CRot.y += HuPadSubStkX[0] / 20;
CZoom += HuPadTrigL[0] / 2;
CZoom -= HuPadTrigR[0] / 2;
sp2C.x = Center.x + CZoom * (sin(CRot.y * M_PI / 180.0) * cos(CRot.x * M_PI / 180.0));
sp2C.y = Center.y + CZoom * -sin(CRot.x * M_PI / 180.0);
sp2C.z = Center.z + CZoom * (cos(CRot.y * M_PI / 180.0) * cos(CRot.x * M_PI / 180.0));
sp20.x = Center.x - sp2C.x;
sp20.y = Center.y - sp2C.y;
sp20.z = Center.z - sp2C.z;
sp14.x = sin(CRot.y * M_PI / 180.0) * sin(CRot.x * M_PI / 180.0);
sp14.y = cos(CRot.x * M_PI / 180.0);
sp14.z = cos(CRot.y * M_PI / 180.0) * sin(CRot.x * M_PI / 180.0);
temp_f31 = CRot.z;
sp8.x = sp14.x * (sp20.x * sp20.x + (1.0f - sp20.x * sp20.x) * cos(temp_f31 * M_PI / 180.0))
+ sp14.y * (sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0))
+ sp14.z * (sp20.x * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.y * sin(temp_f31 * M_PI / 180.0));
sp8.y = sp14.x * (sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.z * sin(temp_f31 * M_PI / 180.0))
+ sp14.y * (sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cos(temp_f31 * M_PI / 180.0))
+ sp14.z * (sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.x * sin(temp_f31 * M_PI / 180.0));
sp8.z = sp14.x * (sp20.x * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.y * sin(temp_f31 * M_PI / 180.0))
+ sp14.y * (sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0))
+ sp14.z * (sp20.z * sp20.z + (1.0f - sp20.z * sp20.z) * cos(temp_f31 * M_PI / 180.0));
PSVECCrossProduct(&sp14, &sp20, &sp20);
PSVECNormalize(&sp20, &sp20);
temp_r31 = HuPadSubStkX[0] & 0xF8;
if (temp_r31 != 0) {
Center.x += sp20.x * temp_r31 * 0.05f;
Center.y += sp20.y * temp_r31 * 0.05f;
Center.z += sp20.z * temp_r31 * 0.05f;
}
PSVECNormalize(&sp8, &sp20);
temp_r31 = -(HuPadSubStkY[0] & 0xF8);
if (temp_r31 != 0) {
Center.x += sp20.x * temp_r31 * 0.05f;
Center.y += sp20.y * temp_r31 * 0.05f;
Center.z += sp20.z * temp_r31 * 0.05f;
}
}
static char *lbl_1_data_32C[] = {
"001_Character_Name_ss",
"002_Hidden_Block",
"003_Battle_M",
"004_Bowser_M",
"005_Warp_M",
"006_Mushroom_M",
"007_Lot_house",
"008_Boo_house",
"009_ItemName",
"010_Bord",
"011_RoundItem",
"012_Spaceamida",
"013_Star_M",
"014_RollerCoaster",
"015_Last5",
"016_ItemShop",
"017_System",
"018_ModeSelect",
"019_Item",
"020_Map2_event",
"021_Lucky_Minigame",
"022_Bord_Start",
"023_Map3_event",
"024_Minigame_Name",
"025_mg_446",
"026_debugmes",
"027_Party_Mode",
"028_SETUP",
"029_Miracle",
"030_mg_kuppa",
"031_Story_Mode",
"032_Bowser_Story",
"033_Map4_event",
"034_mg_inst",
"035_E3_only",
"036_saf",
"037_Mg_inst_sys_",
"038_Bord_Results",
"039_Bord_Results2",
"040_Map5_event",
"041_Mg_Mode",
"042_mg_445",
"043_mg_447",
"044_mg_448",
"045_mg_449",
"046_mg_450",
"047_tutorial",
"048_Option_Rooml",
"049_Map6_event",
"050_charley",
"051_Present_Room",
"052_Extra_Room",
"053_Staff_Post",
"054_Staff_Name",
"055_Opening_Demo",
"056_mgex_inst",
NULL
};
static s16 lbl_1_data_410 = -1;
static void fn_1_E88(void) {
s16 sp10[256]; // unknown size
char spC[4];
char sp8[4];
s16 temp_r3;
s16 var_r25;
s16 var_r27;
s16 var_r28;
s32 var_r30;
s32 var_r31;
s32 temp_r3_2;
char *var_r29;
var_r28 = var_r27 = 0;
while (lbl_1_data_32C[var_r28] != 0) {
var_r29 = lbl_1_data_32C[var_r28];
while (*var_r29 != 0) {
if (*var_r29 == '_') {
*var_r29 = 0x86;
}
var_r29++;
}
sp10[var_r28] = 0;
var_r30 = (var_r28 << 16);
var_r25 = 0;
while (1) {
if ((s32) MessData_MesPtrGet(messDataPtr, var_r30 + var_r25) == 0) {
break;
}
sp10[var_r28]++;
var_r25++;
}
var_r27++;
var_r28++;
}
temp_r3 = HuWinExCreateStyled(-10000.0f, 32.0f, 316, 40, -1, 0);
HuWinExAnimIn(temp_r3);
HuWinAttrSet(temp_r3, 0x800);
HuWinMesSpeedSet(temp_r3, 0);
HuWinMesSet(temp_r3, MAKE_MESSID_PTR(lbl_1_data_32C[0]));
lbl_1_bss_0 = HuWinCreate(460.0f, 32.0f, 100, 40, 0);
HuWinAttrSet(lbl_1_bss_0, 0x800);
HuWinMesSpeedSet(lbl_1_bss_0, 0);
HuWinMesSet(lbl_1_bss_0, MAKE_MESSID_PTR("\x1F\x01_\x1F\x02"));
var_r31 = 0;
var_r30 = 0;
while (1) {
HuWinHomeClear(lbl_1_bss_0);
sprintf(spC, "%03d", var_r30 + 1);
HuWinInsertMesSet(lbl_1_bss_0, MAKE_MESSID_PTR(spC), 0);
sprintf(sp8, "%03d", sp10[var_r31]);
HuWinInsertMesSet(lbl_1_bss_0, MAKE_MESSID_PTR(sp8), 1);
HuWinMesSet(lbl_1_bss_0, MAKE_MESSID_PTR("\x1F\x01_\x1F\x02"));
temp_r3_2 = fn_1_11B0(var_r31, var_r30);
if (temp_r3_2 & 0x20) {
var_r31++;
if (var_r31 >= var_r27) {
var_r31 = 0;
}
var_r30 = 0;
} else if (temp_r3_2 & 0x40) {
var_r31--;
if (var_r31 < 0) {
var_r31 = var_r27 - 1;
}
var_r30 = 0;
} else if (temp_r3_2 & 0x200) {
var_r30--;
if (var_r30 < 0) {
var_r31--;
if (var_r31 < 0) {
var_r31 = var_r27 - 1;
}
var_r30 = sp10[var_r31] - 1;
}
} else {
var_r30++;
if (var_r30 >= sp10[var_r31]) {
var_r31++;
if (var_r31 >= var_r27) {
var_r31 = 0;
}
var_r30 = 0;
}
}
HuPrcVSleep();
}
}
static char *lbl_1_data_440[] = {
"]1^",
"]2^",
"]3^",
"]4^",
"]5^",
"]6^",
"]7^",
"]8^"
};
static s32 fn_1_11B0(s16 arg0, s16 arg1) {
WindowData *temp_r30;
float sp10;
float spC;
s32 temp_r28;
s32 var_r27;
s32 var_r26;
u8 *var_r29;
s16 i;
var_r27 = 0;
var_r26 = 0;
HuWinHomeClear(lbl_1_bss_2);
HuWinMesSet(lbl_1_bss_2, MAKE_MESSID_PTR(lbl_1_data_32C[arg0]));
HuPrcVSleep();
if (lbl_1_data_410 != -1) {
HuWinKill(lbl_1_data_410);
}
temp_r28 = MAKE_MESSID(arg0, arg1);
for (i = 0; i < 8; i++) {
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(lbl_1_data_440[i]), (s16) i);
}
HuWinMesMaxSizeGet(1, &spC, temp_r28);
if (spC <= 16.0f) {
spC = 32.0f;
}
lbl_1_data_410 = HuWinCreate(-10000.0f, -10000.0f, spC, sp10, 0);
for (i = 0; i < 8; i++) {
HuWinInsertMesSet(lbl_1_data_410, MAKE_MESSID_PTR(lbl_1_data_440[i]), (s16) i);
}
temp_r30 = &winData[lbl_1_data_410];
temp_r30->push_key |= 0x360;
temp_r30->key_auto = 0x60;
HuWinMesSet(lbl_1_data_410, temp_r28);
var_r29 = MessData_MesPtrGet(messDataPtr, temp_r28);
while (*var_r29 != 0) {
if (*var_r29 == 0xF) {
var_r27 = 1;
}
if (*var_r29 == 0) {
var_r26 = 1;
}
var_r29++;
}
if (var_r27 != 0) {
HuWinMesWait(lbl_1_data_410);
HuWinChoiceGet(lbl_1_data_410, 0);
return temp_r30->key_down;
}
if (var_r26 == 0) {
while (!(HuPadBtnRep[0] & 0x360)) {
HuPrcVSleep();
}
return HuPadBtnRep[0];
}
while (temp_r30->stat != 0) {
if (HuPadBtnRep[0] & 0x60) {
return HuPadBtnDown[0];
}
HuPrcVSleep();
}
return temp_r30->key_down;
}

827
src/REL/modeltestDll/main.c Normal file
View file

@ -0,0 +1,827 @@
#include "math.h"
#include "game/chrman.h"
#include "game/object.h"
#include "game/wipe.h"
#include "game/pad.h"
#include "game/hsfanim.h"
#include "game/hsfmotion.h"
#include "game/hsfex.h"
#include "game/printfunc.h"
#include "game/window.h"
#include "game/gamework_data.h"
#include "game/sprite.h"
#include "REL/modeltestDll.h"
// -------------------------------------------------------------------------- //
s32 lbl_1_data_0[8] = {
0x005F001B,
0x005F0015,
0x005F0016,
0x005F0006,
0x005F0000,
0x005F0000,
0x005F0000,
0x005F0004,
};
const f64 unk_rodata_0 = 0.5;
const f64 unk_rodata_8 = 3.0;
omObjData * lbl_1_bss_9A4;
omObjData * lbl_1_bss_9A0;
// -------------------------------------------------------------------------- //
void fn_1_A0(void)
{
Process * prc;
OSReport("******* MODELTESTObjectSetup *********\n");
prc = omInitObjMan(0x32, 0x2000);
omGameSysInit(prc);
CRot.x = -30.0f;
CRot.y = 0.0f;
CRot.z = 0.0f;
Center.x = 0.0f;
Center.y = 0.0f;
Center.z = 0.0f;
CZoom = 800.0f;
Hu3DCameraCreate(1);
Hu3DCameraPerspectiveSet(1, 45.0f, 20.0f, 20000.0f, 1.2f);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
lbl_1_bss_9A4 = omAddObjEx(prc, 0, 0x20, 0x20, -1, fn_1_29C);
lbl_1_bss_9A0 = omAddObjEx(prc, 0x7FDA, 0, 0, -1, omOutView);
Hu3DBGColorSet(0x20U, 0x80U, 0x80U);
WipeCreate(1, 0, 0x1E);
}
// -------------------------------------------------------------------------- //
char * lbl_1_data_D8[16] = {
"target1A",
"target1B",
"target2A",
"target2B",
"target3A",
"target3B",
"target4A",
"target4B",
"target5A",
"target5B",
"target6A",
"target6B",
"target7A",
"target7B",
"target8A",
"target8B"
};
HsfanimStruct00 lbl_1_data_118 = {
/* unk00 */ 40,
/* unk02 */ {0, 0},
/* unk04 */ 50.0f,
/* unk08 */ 0.0f,
/* unk0C */ 90.0f,
/* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f},
/* unk1C */ 50.0f,
/* unk20 */ 0.800000011920929f,
/* unk24 */ 20.0f,
/* unk28 */ 0.9900000095367432f,
/* unk2C */ 4,
/* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}},
/* unk3E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}},
};
HsfanimStruct00 lbl_1_data_168[2] = {
{
/* unk00 */ 50,
/* unk02 */ {0, 0},
/* unk04 */ 5.0f,
/* unk08 */ 10.0f,
/* unk0C */ 10.0f,
/* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f},
/* unk1C */ 2.0f,
/* unk20 */ 1.0099999904632568f,
/* unk24 */ 30.0f,
/* unk28 */ 0.9900000095367432f,
/* unk2C */ 2,
/* unk2E */ {{ /* r */ 48, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 64, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
/* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
},
{
/* unk00 */ 30,
/* unk02 */ {0, 0},
/* unk04 */ 3.299999952316284f,
/* unk08 */ 10.0f,
/* unk0C */ 0.0f,
/* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f},
/* unk1C */ 2.0f,
/* unk20 */ 1.0f,
/* unk24 */ 20.0f,
/* unk28 */ 0.9800000190734863f,
/* unk2C */ 2,
/* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 64, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
/* unk3E */ {{ /* r */ 255, /* g */ 128, /* b */ 128, /* a */ 0}, { /* r */ 255, /* g */ 64, /* b */ 32, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
}};
HsfanimStruct00 lbl_1_data_208 = {
/* unk00 */ 40,
/* unk02 */ {0, 0},
/* unk04 */ 50.0f,
/* unk08 */ 0.0f,
/* unk0C */ 180.0f,
/* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f},
/* unk1C */ 30.0f,
/* unk20 */ 0.8999999761581421f,
/* unk24 */ 20.0f,
/* unk28 */ 0.9900000095367432f,
/* unk2C */ 4,
/* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}},
/* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
};
HsfanimStruct00 lbl_1_data_258 = {
/* unk00 */ 30,
/* unk02 */ {0, 0},
/* unk04 */ 50.0f,
/* unk08 */ 0.0f,
/* unk0C */ 90.0f,
/* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f},
/* unk1C */ 30.0f,
/* unk20 */ 0.949999988079071f,
/* unk24 */ 20.0f,
/* unk28 */ 0.9900000095367432f,
/* unk2C */ 2,
/* unk2E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
/* unk3E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}},
};
const Point3d lbl_1_rodata_38 = {0.0f, 0.0f, 0.0f};
const Point3d lbl_1_rodata_44 = {0.0f, 1.0f, 0.0f};
s16 lbl_1_bss_99C;
s16 lbl_1_bss_99A;
s16 lbl_1_bss_98A[8];
s16 lbl_1_bss_88A[8][16];
s16 lbl_1_bss_888;
s16 unk_bss_886;
s16 lbl_1_bss_884;
s16 lbl_1_bss_864[16];
s16 lbl_1_bss_664[256];
s16 lbl_1_bss_460[258];
s16 lbl_1_bss_45A[3];
s16 lbl_1_bss_458;
AnimData * lbl_1_bss_454;
s32 unk_bss_450;
HuObjUnk lbl_1_bss_40[20];
void * lbl_1_bss_30[4];
u8 lbl_1_bss_2C;
f32 lbl_1_bss_28;
s16 lbl_1_bss_24;
f32 lbl_1_bss_20;
Process * lbl_1_bss_18[2];
Process * lbl_1_bss_14;
Process * lbl_1_bss_10;
s32 lbl_1_bss_C;
f32 lbl_1_bss_8;
static u8 unk_bss[8];
// -------------------------------------------------------------------------- //
void fn_1_29C(omObjData * arg0)
{
Point3d sp20;
Point3d sp14;
Point3d sp8;
Mtx sp2C;
s16 var_r31;
s16 temp_r27;
u32 temp_r26;
s16 temp_r3;
void * temp_r29;
AnimData * temp_r28;
f32 temp_r5;
f32 temp_f30;
s16 chrIdx;
s32 temp_r0;
sp14 = lbl_1_rodata_38;
sp8 = lbl_1_rodata_44;
var_r31 = Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU);
Hu3DGLightInfinitytSet(var_r31);
Hu3DShadowCreate(45.0f, 500.0f, 8000.0f);
Hu3DShadowTPLvlSet(0.5f);
Hu3DShadowSizeSet(0xC0U);
sp20.x = -500.0f;
sp20.y = 1000.0f;
sp20.z = 1000.0f;
Hu3DShadowPosSet(&sp20, &sp8, &sp14);
for (var_r31 = 0; var_r31 < 1; ++var_r31)
{
chrIdx = 0;
lbl_1_bss_98A[var_r31] = CharModelCreate(chrIdx, 2);
if (var_r31 == 1) {
Hu3DModelLayerSet(lbl_1_bss_98A[var_r31], 1);
}
lbl_1_bss_88A[var_r31][0] = CharModelMotionCreate(chrIdx, lbl_1_data_0[0]);
lbl_1_bss_88A[var_r31][1] = CharModelMotionCreate(chrIdx, lbl_1_data_0[1]);
lbl_1_bss_88A[var_r31][2] = CharModelMotionCreate(chrIdx, lbl_1_data_0[2]);
lbl_1_bss_88A[var_r31][3] = CharModelMotionCreate(chrIdx, lbl_1_data_0[3]);
lbl_1_bss_88A[var_r31][4] = CharModelMotionCreate(chrIdx, lbl_1_data_0[4]);
lbl_1_bss_88A[var_r31][5] = CharModelMotionCreate(chrIdx, lbl_1_data_0[5]);
lbl_1_bss_88A[var_r31][6] = CharModelMotionCreate(chrIdx, lbl_1_data_0[6]);
lbl_1_bss_88A[var_r31][7] = CharModelMotionCreate(chrIdx, lbl_1_data_0[7]);
lbl_1_bss_88A[var_r31][0] = CharModelMotionCreate(chrIdx, 0x5F004D);
CharModelMotionSet(chrIdx, lbl_1_bss_88A[var_r31][0]);
Hu3DModelAttrSet(lbl_1_bss_98A[var_r31], 0x40000001U);
Hu3DModelPosSet(lbl_1_bss_98A[var_r31], (var_r31 / 4 * 0xC8) - 100, 0.0f, -(var_r31 % 4) * 0x96);
CharModelMotionDataClose(chrIdx);
}
temp_r26 = OSGetTick();
for (var_r31 = 0; var_r31 < 8; ++var_r31) {
Hu3DModelObjMtxGet(lbl_1_bss_98A[0], "test11_tex_we-ske_R_shoe1", sp2C);
}
temp_r5 = OSTicksToMicroseconds(OSGetTick() - temp_r26);
OSReport("time %f\n", US_TO_60TH_SEC(temp_r5));
var_r31 = Hu3DModelCreateFile(0x700024);
Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f);
Hu3DModelShadowMapSet(var_r31);
var_r31 = Hu3DModelCreateFile(0x26001E);
temp_r27 = Hu3DJointMotion(var_r31, HuDataSelHeapReadNum(0x26002F, 0x10000000, 2));
Hu3DMotionSet(var_r31, temp_r27);
Hu3DModelAttrSet(var_r31, 0x40000001U);
for (var_r31 = 0; var_r31 < 10; ++var_r31) {
if (var_r31 == 0) {
lbl_1_bss_664[var_r31] = Hu3DModelCreateFile(0x700019);
} else {
lbl_1_bss_664[var_r31] = Hu3DModelLink(lbl_1_bss_664[0]);
}
Hu3DModelShadowSet(lbl_1_bss_664[var_r31]);
Hu3DModelPosSet(lbl_1_bss_664[var_r31], ((( var_r31 / 5) * 0x1F4) + 0xC8), 0.0f, (-( var_r31 % 5) * 0x12C));
Hu3DModelAttrSet(lbl_1_bss_664[var_r31], 0x4000U);
Hu3DModelAttrSet(lbl_1_bss_664[var_r31], 0x40000001U);
}
temp_r29 = HuDataSelHeapReadNum(0x700013, 0x10000000, 2);
temp_r28 = HuSprAnimRead(temp_r29);
lbl_1_bss_99C = HuSprGrpCreate(0x14);
for (var_r31 = 0; var_r31 < 0x14; ++var_r31) {
lbl_1_bss_99A = HuSprCreate(temp_r28, 0, 0);
HuSprGrpMemberSet(lbl_1_bss_99C, var_r31, lbl_1_bss_99A);
HuSprPosSet(lbl_1_bss_99C, var_r31, 640.0f, 240.0f);
}
HuSprExecLayerSet(0x40, 1);
HuSprGrpDrawNoSet(lbl_1_bss_99C, 0x40);
lbl_1_bss_458 = 0x293;
lbl_1_bss_45A[0] = MGSeqCreate(1, lbl_1_bss_458 / 60, -1, -1);
temp_r29 = HuDataSelHeapReadNum(0x120001, 0x10000000, 2);
temp_r28 = HuSprAnimRead(temp_r29);
lbl_1_bss_888 = Hu3DParManCreate(temp_r28, 0x3E8, &lbl_1_data_208);
Hu3DParManAttrSet(lbl_1_bss_888, 0x45);
Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_888), 1U);
Hu3DParManRotSet(lbl_1_bss_888, 0.0f, 0.0f, 0.0f);
Hu3DParManVacumeSet(lbl_1_bss_888, 500.0f, 0.0f, 0.0f, 1.0f);
lbl_1_bss_884 = Hu3DParManLink(lbl_1_bss_888, &lbl_1_data_258);
Hu3DParManAttrSet(lbl_1_bss_884, 0x143);
Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_884), 1U);
Hu3DParManVecSet(lbl_1_bss_884, 0.0f, 1.0f, 0.0f);
Hu3DParManVacumeSet(lbl_1_bss_884, 500.0f, 0.0f, 0.0f, 1.0f);
Hu3DParManColorSet(lbl_1_bss_884, 0);
temp_r29 = HuDataSelHeapReadNum(0x120002, 0x10000000, 2);
temp_r28 = HuSprAnimRead(temp_r29);
for (var_r31 = 0; var_r31 < 10; ++var_r31) {
lbl_1_bss_864[var_r31] = Hu3DParManCreate(temp_r28, 0x1F4, &lbl_1_data_168[0]);
Hu3DParManAttrSet(lbl_1_bss_864[var_r31], 0x864);
Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_864[var_r31]), 1U);
Hu3DParManPosSet(lbl_1_bss_864[var_r31], (100.0 * sin((M_PI * (36.0f * var_r31)) / 180.0)), 0.0f, 100.0 * cos((M_PI * (36.0f * var_r31)) / 180.0));
Hu3DParManRotSet(lbl_1_bss_864[var_r31], -90.0f, 0.0f, 0.0f);
}
lbl_1_bss_C = 0;
Hu3DFogSet(5000.0f, 10000.0f, 0x20U, 0x10U, 0x30U);
arg0->func = fn_1_F9C;
}
// -------------------------------------------------------------------------- //
s32 unrefData[] = {
0,0,0
};
// -------------------------------------------------------------------------- //
void fn_1_F38(void)
{
f32 var_f31;
var_f31 = 0.0f;
while(TRUE) {
Hu3DModelRotSet(lbl_1_bss_460[0], 0.0f, var_f31, 0.0f);
var_f31 += 1.0f;
HuPrcVSleep();
}
}
// -------------------------------------------------------------------------- //
static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) {
s8 temp_r28;
temp_r28 = HuPadSubStkX[0] & 0xF8;
if (temp_r28 != 0) {
Center.x += 0.05f * (sp30->x * temp_r28);
Center.y += 0.05f * (sp30->y * temp_r28);
Center.z += 0.05f * (sp30->z * temp_r28);
}
PSVECNormalize(sp18, sp30);
temp_r28 = -(HuPadSubStkY[0] & 0xF8);
if (temp_r28 != 0) {
Center.x += 0.05f * (sp30->x * temp_r28);
Center.y += 0.05f * (sp30->y * temp_r28);
Center.z += 0.05f * (sp30->z * temp_r28);
}
}
// -------------------------------------------------------------------------- //
const HuUnkF9C2 lbl_1_rodata_B8 = {
{8, 6, 4, 7, 9, 10, 11}
};
// -------------------------------------------------------------------------- //
void fn_1_F9C(struct om_obj_data * omData)
{
Point3d sp3C;
Point3d sp30;
Point3d sp24;
Point3d sp18;
f32 temp_f31;
s32 var_r31;
s16 var_r30;
HuUnkF9C2 teropPatterns;
if (omSysExitReq != 0) {
if (lbl_1_bss_10 != 0) {
HuPrcKill(lbl_1_bss_10);
}
if (lbl_1_bss_14 != 0) {
HuPrcKill(lbl_1_bss_14);
}
if (lbl_1_bss_18[0] != 0) {
HuPrcKill(lbl_1_bss_18[0]);
}
CharModelKill(-1);
omOvlReturnEx(1, 1);
return;
}
CRot.y += 0.1f * HuPadStkX[0];
CRot.x += 0.1f * HuPadStkY[0];
CZoom += HuPadTrigL[0] / 2;
CZoom -= HuPadTrigR[0] / 2;
if (((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) && (lbl_1_data_118.unk0C < 360.0f)) {
lbl_1_data_118.unk0C += 1.0f;
}
if (((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) && (lbl_1_data_118.unk0C > 0.0f)) {
lbl_1_data_118.unk0C -= 1.0f;
}
if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) {
Hu3DParManAttrSet(lbl_1_bss_888, 0x81);
Hu3DParManAttrSet(lbl_1_bss_884, 0x81);
}
lbl_1_bss_20 += 2.0f;
if (lbl_1_bss_20 > 360.0f) {
lbl_1_bss_20 -= 360.0f;
}
for (var_r30 = 0; var_r30 < 10; ++var_r30) {
f32 temp_f30;
s32 var_r29;
s32 var_fake;
while (0) {
(void) temp_f30;
(void) temp_f30;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r31;
(void) var_r30;
(void) var_r30;
(void) var_r30;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_r29;
(void) var_fake;
(void) var_fake;
(void) var_fake;
(void) var_fake;
(void) var_fake;
(void) var_fake;
(void) var_fake;
(void) var_fake;
(void) var_fake;
}
}
if (lbl_1_bss_458 > 0) {
MGSeqParamSet(lbl_1_bss_45A[0], 1, lbl_1_bss_458 / 60);
--lbl_1_bss_458;
if (lbl_1_bss_458 <= 0) {
MGSeqParamSet(lbl_1_bss_45A[0], 2, -1);
}
}
sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)));
sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0)));
sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))));
sp30.x = Center.x - sp3C.x;
sp30.y = Center.y - sp3C.y;
sp30.z = Center.z - sp3C.z;
sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0));
sp24.y = cos((M_PI * CRot.x) / 180.0);
sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0));
temp_f31 = CRot.z;
sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0))
+ sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0))
+ sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0));
sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0))
+ sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0))
+ sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0));
sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0))
+ (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0))
+ sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0)));
PSVECCrossProduct(&sp24, &sp30, &sp30);
PSVECNormalize(&sp30, &sp30);
if (lbl_1_bss_C == 0) {
HuControlCamCenter(&sp18, &sp30);
}
teropPatterns = lbl_1_rodata_B8;
if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) {
++lbl_1_bss_24;
if (lbl_1_bss_24 >= 7) {
lbl_1_bss_24 = 0;
}
}
if ((HuPadBtnDown[0] & PAD_BUTTON_B) != 0) {
var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 0);
}
if ((HuPadBtnDown[0] & PAD_BUTTON_A) != 0) {
var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 2);
}
if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) {
var_r30 = MGSeqCreate(0xE, 0x3B);
}
if ((HuPadBtnDown[0] & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)) != 0) {
if ((HuPadBtnDown[0] & PAD_BUTTON_UP) != 0) {
MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, -1, -1, -1);
}
if ((HuPadBtnDown[0] & PAD_BUTTON_LEFT) != 0) {
MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, -1, -1);
}
if ((HuPadBtnDown[0] & PAD_BUTTON_DOWN) != 0) {
MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, -1);
}
if ((HuPadBtnDown[0] & PAD_BUTTON_RIGHT) != 0) {
MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, GWPlayerCfg[3].character);
}
}
fontcolor = 5;
print8(0x10, 0x190, 1.5f, "Terop Pattern%d", lbl_1_bss_24 + 1);
lbl_1_bss_8 += 5.0f;
if (lbl_1_bss_8 > 360.0f) {
lbl_1_bss_8 -= 360.0f;
}
}
// -------------------------------------------------------------------------- //
void fn_1_20F4(void)
{
s16 temp_r3;
s16 var_r29;
HsfObject * temp_r3_2;
HuObjUnk * temp_r31;
Mtx spC0;
Vec sp24;
Mtx sp90;
Mtx sp60;
Mtx sp30;
Vec sp18;
Vec spC;
f32 temp_f27;
f32 var_f29; // ! - uninitialized
s16 var_r27; // ! - uninitialized
s32 var_r26;
f32 temp_f30;
temp_r3 = Hu3DModelCreateFile(0x6C0000);
Hu3DModelPosSet(temp_r3, 0.0f, 0.0f, 100.0f);
for (var_r29 = 0; var_r29 < 16; ++var_r29)
{
OSReport("%s\n", lbl_1_data_D8[var_r29]);
temp_r3_2 = Hu3DModelObjPtrGet(temp_r3, lbl_1_data_D8[var_r29]);
lbl_1_bss_40[var_r29].obj = temp_r3_2;
Hu3DMotionNoMotSet(temp_r3, lbl_1_data_D8[var_r29], 0x380);
lbl_1_bss_40[var_r29].pos.x = temp_r3_2->data.base.pos.x;
lbl_1_bss_40[var_r29].pos.y = temp_r3_2->data.base.pos.y;
lbl_1_bss_40[var_r29].pos.z = temp_r3_2->data.base.pos.z;
lbl_1_bss_40[var_r29].rot.x = temp_r3_2->data.base.rot.x;
lbl_1_bss_40[var_r29].rot.y = temp_r3_2->data.base.rot.y;
lbl_1_bss_40[var_r29].rot.z = temp_r3_2->data.base.rot.z;
lbl_1_bss_40[var_r29].scale.x = temp_r3_2->data.base.scale.x;
lbl_1_bss_40[var_r29].scale.y = temp_r3_2->data.base.scale.y;
lbl_1_bss_40[var_r29].scale.z = temp_r3_2->data.base.scale.z;
OSReport(
"%d:(%3.2f,%3.2f,%3.2f),(%3.2f,%3.2f,%3.2f)\n",
var_r29,
temp_r3_2->data.base.pos.x,
temp_r3_2->data.base.pos.y,
temp_r3_2->data.base.pos.z,
temp_r3_2->data.base.rot.x,
temp_r3_2->data.base.rot.y,
temp_r3_2->data.base.rot.z
);
}
while (TRUE)
{
Hu3DModelObjMtxGet(temp_r3, "ske_skirt", sp30);
for (var_r29 = 0; var_r29 < 8; ++var_r29)
{
temp_r31 = &lbl_1_bss_40[var_r29 * 2];
temp_r31->obj->data.curr.rot.x = temp_r31->rot.x;
temp_r31->obj->data.curr.rot.y = temp_r31->rot.y;
temp_r31->obj->data.curr.rot.z = temp_r31->rot.z;
Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[var_r29 * 2], sp90);
temp_r31 = &lbl_1_bss_40[(var_r29 * 2) + 1];
temp_r31->obj->data.curr.rot.x = temp_r31->rot.x;
temp_r31->obj->data.curr.rot.y = temp_r31->rot.y;
temp_r31->obj->data.curr.rot.z = temp_r31->rot.z;
Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0);
Hu3DMtxTransGet(spC0, &sp18);
PSMTXInverse(sp30, sp60);
Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0);
Hu3DMtxTransGet(spC0, &sp18);
PSMTXMultVec(sp60, &sp18, &sp18);
temp_f27 = 180.0 * (atan2(sp18.z, sp18.x) / M_PI);
temp_r31 = &lbl_1_bss_40[var_r29 * 2];
temp_r31->obj->data.curr.rot.x = temp_r31->rot.x + (var_f29 * (2.0 * (sin((M_PI * temp_f27) / 180.0) * sin((M_PI * var_r27) / 180.0))));
temp_r31->obj->data.curr.rot.y = temp_r31->rot.y;
temp_r31->obj->data.curr.rot.z = temp_r31->rot.z + (var_f29 * cos((M_PI * var_r27) / 180.0));
Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0);
Hu3DMtxTransGet(spC0, &sp24);
fn_1_28F8(&sp24, &spC);
HuSprPosSet(lbl_1_bss_99C, var_r29, spC.x, spC.y);
}
var_r27 += 5;
if (var_r27 > 0x168) {
var_r27 -= 0x168;
}
if (HuPadSubStkX[1] < 0) {
var_r26 = -HuPadSubStkX[1];
} else {
var_r26 = HuPadSubStkX[1];
}
if (var_r26 < 0xA && ABS(HuPadSubStkY[1]) < 0xA) {
var_r27 = 0x168;
var_f29 = 0.0f;
} else {
var_r27 = 180.0 * (atan2(HuPadSubStkX[1], HuPadSubStkY[1]) / M_PI);
temp_f30 = (HuPadSubStkX[1] * HuPadSubStkX[1]) + (HuPadSubStkY[1] * HuPadSubStkY[1]);
var_f29 = sqrtf(temp_f30);
if (var_f29 > 80.0f) {
var_f29 = 80.0f;
}
}
HuPrcVSleep();
}
}
// -------------------------------------------------------------------------- //
void fn_1_28F8(Point3d * arg0, Point3d * arg1)
{
Point3d spC;
Mtx sp18;
CameraData * cam;
f32 temp_f31;
f32 temp_f30;
cam = &Hu3DCamera[0];
C_MTXLookAt(sp18, &cam->pos, &cam->up, &cam->target);
PSMTXMultVec(sp18, arg0, &spC);
temp_f31 = (1.2f * (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0)))));
temp_f30 = (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0))));
arg1->x = 288.0f + (spC.x * (288.0f / -temp_f31));
arg1->y = 240.0f + (spC.y * (240.0f / temp_f30));
}
void fn_1_2AFC(void) {
s16 temp_r3;
HuWinInit(1);
temp_r3 = HuWinCreate(-10000.0f, -10000.0f, 480, 0x80, 0);
HuWinMesSpeedSet(temp_r3, 3);
while (TRUE) {
HuWinMesSet(temp_r3, 0x200011);
HuWinMesWait(temp_r3);
}
}
// -------------------------------------------------------------------------- //
// unreferenced data
u8 lbl_1_data_322[54] = {
255, 255, 255, 255, 0, 0, 60, 68, 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 68, 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0,
};
// -------------------------------------------------------------------------- //
void fn_1_2B68(ModelData * mdl, Mtx arg1)
{
GXColor sp17;
Mtx sp150;
Mtx sp120;
Mtx spF0;
Mtx spC0;
Mtx sp90;
GXTexObj sp30;
f32 sp18[2][3];
Mtx44 sp50;
AnimBmpData * sp10;
f32 temp_f31;
f32 var_f30; // ! - uninitialized
f32 var_f29; // ! - uninitialized
f32 var_f28; // ! - uninitialized
f32 var_f27; // ! - uninitialized
if (!lbl_1_bss_30[0]) {
lbl_1_bss_30[0] = HuMemDirectMallocNum(HEAP_SYSTEM, FB_SIZE(640, 480), 0x10000000);
}
GXSetTexCopySrc(0, 0, 640, 480);
GXSetTexCopyDst(640, 480, GX_TF_RGB565, GX_FALSE);
GXCopyTex(lbl_1_bss_30[0], GX_FALSE);
DCFlushRangeNoSync(lbl_1_bss_30[0], FB_SIZE(640, 480));
C_MTXOrtho(sp50, 0.0f, 480.0f, 0.0f, 576.0f, 0.0f, 10.0f);
GXSetProjection(sp50, GX_ORTHOGRAPHIC);
GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
GXSetScissor(0, 0, 640, 480);
GXInvalidateTexAll();
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetVtxDesc(GX_VA_NRM, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0U);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0U);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0U);
GXSetCullMode(GX_CULL_NONE);
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
GXSetNumTexGens(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3CU, 0U, 0x7DU);
GXSetNumTevStages(1);
sp17.r =
sp17.g =
sp17.b =
sp17.a = 255;
GXSetChanMatColor(GX_COLOR0A0, sp17);
sp17.r =
sp17.g =
sp17.b = 128;
sp17.a = 255;
GXSetChanAmbColor(GX_COLOR0A0, sp17);
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
GXSetNumChans(1U);
GXSetChanCtrl(GX_COLOR0, 1U, GX_SRC_REG, GX_SRC_VTX, 1U, GX_DF_CLAMP, GX_AF_SPOT);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
GXSetAlphaCompare(GX_GEQUAL, 1U, GX_AOP_AND, GX_GEQUAL, 1U);
GXSetZCompLoc(0U);
PSMTXIdentity(arg1);
GXLoadPosMtxImm(arg1, 0U);
PSMTXInvXpose(arg1, sp90);
GXLoadNrmMtxImm(sp90, 0);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
sp10 = lbl_1_bss_454->bmp;
lbl_1_bss_2C += 1;
HuSprTexLoad(lbl_1_bss_454, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR);
PPCSync();
GXInitTexObj(&sp30, lbl_1_bss_30[0], 0x280U, 0x1E0U, 4U, GX_CLAMP, GX_CLAMP, 0U);
GXInitTexObjLOD(&sp30, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1);
GXLoadTexObj(&sp30, GX_TEXMAP0);
GXSetNumIndStages(1U);
PSMTXScale(sp150, 0.1f, 0.1f, 0.0f);
sp18[0][0] = sp150[0][0];
sp18[0][1] = sp150[0][1];
sp18[0][2] = 0.0f;
sp18[1][0] = sp150[1][0];
sp18[1][1] = sp150[1][1];
sp18[1][2] = 0.0f;
PSMTXRotRad(spF0, 0x58, -1.5707964f);
mtxRot(spF0, 0.0f, 0.0f, 0.0f);
temp_f31 = 0.0015625f;
PSMTXScale(sp120, temp_f31, temp_f31, temp_f31);
PSMTXConcat(sp120, spF0, sp150);
PSMTXTrans(spC0, 0.5f, 0.0f, 0.5f);
GXLoadTexMtxImm(sp150, 0x1EU, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1EU, 0U, 0x7DU);
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_4, GX_ITS_4);
GXSetIndTexMtx(GX_ITM_0, sp18, 0);
GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0);
lbl_1_bss_28 += 5.0f;
if (lbl_1_bss_28 > 360.0f) {
lbl_1_bss_28 -= 360.0f;
}
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(0.0f, 0.0f, 0.0f);
GXTexCoord2f32(0.0f, 1.0f);
GXNormal3f32(0.0f, var_f30 / 640.0f, var_f29 / 480.0f);
GXPosition3f32(640.0f, 0.0f, 0.0f);
GXTexCoord2f32(0.0f, 1.0f);
GXNormal3f32(0.0f, var_f28 / 640.0f, var_f29 / 480.0f);
GXPosition3f32(640.0f, 480.0f, 0.0f);
GXTexCoord2f32(0.0f, 1.0f);
GXNormal3f32(0.0f, var_f28 / 640.0f, var_f27 / 480.0f);
GXPosition3f32(0.0f, 480.0f, 0.0f);
GXTexCoord2f32(0.0f, 1.0f);
GXNormal3f32(0.0f, var_f30 / 640.0f, var_f27 / 480.0f);
GXEnd();
GXSetNumIndStages(0U);
GXSetTevDirect(GX_TEVSTAGE0);
GXSetTevDirect(GX_TEVSTAGE1);
}
// -------------------------------------------------------------------------- //

View file

@ -0,0 +1,234 @@
#include "math.h"
#include "game/chrman.h"
#include "game/wipe.h"
#include "game/pad.h"
#include "REL/modeltestDll.h"
// -------------------------------------------------------------------------- //
omObjData * unk_bss_9FC;
omObjData * lbl_1_bss_9F8;
omObjData * lbl_1_bss_9F4;
s16 lbl_1_bss_9EC[4];
s16 lbl_1_bss_9AC[4][8];
Process * lbl_1_bss_9A8;
u16 lbl_1_data_358[4] = {1, 2, 4, 8};
// -------------------------------------------------------------------------- //
void fn_1_34B0()
{
Process * temp_r30;
s16 var_r31;
OSReport("******* MODELTESTObjectSetup *********\n");
temp_r30 = omInitObjMan(0x32, 0x2000);
CRot.x = -22.0f;
CRot.y = 0.0f;
CRot.z = 0.0f;
Center.x = 0.0f;
Center.y = 60.0f;
Center.z = 0.0f;
CZoom = 400.0f;
for (var_r31 = 0; var_r31 < 4; ++var_r31)
{
Hu3DCameraCreate(lbl_1_data_358[var_r31]);
Hu3DCameraPerspectiveSet(lbl_1_data_358[var_r31], 45.0f, 20.0f, 20000.0f, 1.2f);
Hu3DCameraViewportSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, ((var_r31 & 2) != 0) ? 0xF0 : 0, 320.0f, 240.0f, 0.0f, 1.0f);
Hu3DCameraScissorSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, ((var_r31 & 2) != 0) ? 0xF0 : 0, 320, 240);
}
lbl_1_bss_9F4 = omAddObjEx(temp_r30, 0, 0x20U, 0x20U, -1, fn_1_37DC);
lbl_1_bss_9F8 = omAddObjEx(temp_r30, 0x7FDA, 0U, 0U, -1, fn_1_439C);
lbl_1_bss_9A8 = HuPrcCreate(fn_1_46F0, 0x64U, 0x2000U, 0);
Hu3DBGColorSet(0x20U, 0x80U, 0x80U);
WipeCreate(1, 0, 0x1E);
}
// -------------------------------------------------------------------------- //
static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) {
s8 temp_r28;
temp_r28 = HuPadSubStkX[0] & 0xF8;
if (temp_r28 != 0) {
Center.x += 0.05f * (sp30->x * temp_r28);
Center.y += 0.05f * (sp30->y * temp_r28);
Center.z += 0.05f * (sp30->z * temp_r28);
}
PSVECNormalize(sp18, sp30);
temp_r28 = -(HuPadSubStkY[0] & 0xF8);
if (temp_r28 != 0) {
Center.x += 0.05f * (sp30->x * temp_r28);
Center.y += 0.05f * (sp30->y * temp_r28);
Center.z += 0.05f * (sp30->z * temp_r28);
}
}
// -------------------------------------------------------------------------- //
void fn_1_37DC(omObjData *)
{
Point3d sp3C;
Point3d sp30;
Point3d sp24;
Point3d sp18;
float temp_f31;
if ((HuPadBtnDown[0] & PAD_BUTTON_START) != 0) {
if (lbl_1_bss_9A8) {
HuPrcKill(lbl_1_bss_9A8);
}
omOvlReturnEx(1, 1);
return;
}
if ((HuPadBtn[0] & PAD_BUTTON_UP) != 0) {
CRot.x += 2.0f;
}
if ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0) {
CRot.x -= 2.0f;
}
if ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) {
CRot.y += 2.0f;
}
if ((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) {
CRot.y -= 2.0f;
}
CZoom += HuPadTrigL[0] / 2;
CZoom -= HuPadTrigR[0] / 2;
sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)));
sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0)));
sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))));
sp30.x = Center.x - sp3C.x;
sp30.y = Center.y - sp3C.y;
sp30.z = Center.z - sp3C.z;
sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0));
sp24.y = cos((M_PI * CRot.x) / 180.0);
sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0));
temp_f31 = CRot.z;
sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0))
+ sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0))
+ sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0));
sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0))
+ sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0))
+ sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0));
sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0))
+ (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0))
+ sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0)));
PSVECCrossProduct(&sp24, &sp30, &sp30);
PSVECNormalize(&sp30, &sp30);
HuControlCamCenter(&sp18, &sp30);
}
// -------------------------------------------------------------------------- //
void fn_1_439C(omObjData * )
{
s16 var_r31;
f32 temp_f30;
f32 temp_f31;
f32 sp10;
Point3d sp2C;
Point3d sp20;
Point3d sp14;
for (var_r31 = 0; var_r31 < 4; ++var_r31)
{
temp_f31 = CRot.x;
temp_f30 = CRot.y + (var_r31 * 90);
sp10 = CRot.z;
sp2C.x = Center.x + (CZoom * (sin((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0))));
sp2C.y = Center.y + (CZoom * -sin((M_PI * temp_f31) / 180.0));
sp2C.z = Center.z + (CZoom * (cos((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0))));
sp20.x = Center.x;
sp20.y = Center.y;
sp20.z = Center.z;
sp14.x = sin((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0));
sp14.y = cos((M_PI * temp_f31) / 180.0);
sp14.z = cos((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0));
Hu3DCameraPosSet(lbl_1_data_358[var_r31], sp2C.x, sp2C.y, sp2C.z, sp14.x, sp14.y, sp14.z, sp20.x, sp20.y, sp20.z);
}
}
// -------------------------------------------------------------------------- //
const Point3d lbl_1_rodata_18C = {0.0f, 0.0f, 0.0f};
const Point3d lbl_1_rodata_198 = {0.0f, 1.0f, 0.0f};
// -------------------------------------------------------------------------- //
void fn_1_46F0(void)
{
Point3d sp20;
Point3d sp14;
Point3d sp8;
s16 var_r31;
s16 var_r30;
sp14 = lbl_1_rodata_18C;
sp8 = lbl_1_rodata_198;
Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU);
Hu3DShadowCreate(45.0f, 500.0f, 8000.0f);
Hu3DShadowTPLvlSet(0.5f);
Hu3DShadowSizeSet(0xC0U);
sp20.x = -500.0f;
sp20.y = 1000.0f;
sp20.z = 1000.0f;
Hu3DShadowPosSet(&sp20, &sp8, &sp14);
for (var_r31 = 0; var_r31 < 4; ++var_r31)
{
var_r30 = var_r31;
lbl_1_bss_9EC[var_r31] = CharModelCreate(var_r30, 8);
Hu3DModelShadowSet(lbl_1_bss_9EC[var_r31]);
lbl_1_bss_9AC[var_r31][0] = CharModelMotionCreate(var_r30, 0x5F0002);
CharModelMotionSet(var_r30, lbl_1_bss_9AC[var_r31][0]);
Hu3DModelAttrSet(lbl_1_bss_9EC[var_r31], 0x40000001U);
Hu3DModelCameraSet(lbl_1_bss_9EC[var_r31], lbl_1_data_358[var_r31]);
Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], ((( var_r31 / 4) * 200) - 100), 0.0f, (-( var_r31 % 4) * 150));
Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], 0.0f, 0.0f, 0.0f);
CharModelMotionDataClose(var_r30);
}
var_r31 = Hu3DModelCreateFile(0x700024);
Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f);
Hu3DModelShadowMapSet(var_r31);
while (TRUE)
{
if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) {
Hu3DCameraKill(2);
Hu3DCameraKill(4);
Hu3DCameraKill(8);
sp20.x =
sp20.z =
sp20.y = 0.0f;
sp20.y += 200.0f;
CharModelCoinEffectCreate(4, &sp20);
}
HuPrcVSleep();
}
}
// -------------------------------------------------------------------------- //
const Point3d lbl_1_rodata_1C8 = {0.0f, 0.0f, 0.0f};
const Point3d lbl_1_rodata_1D4 = {0.0f, 0.0f, -1.0f};
// -------------------------------------------------------------------------- //

View file

237
src/REL/option/camera.c Executable file
View file

@ -0,0 +1,237 @@
#include "REL/option.h"
#include "game/hsfman.h"
#include "game/memory.h"
#include "game/pad.h"
#include "game/printfunc.h"
#include "game/process.h"
#include "dolphin.h"
#include "math.h"
typedef struct {
/* 0x00 */ Vec unk00;
/* 0x0C */ Vec unk0C;
/* 0x18 */ float unk18;
/* 0x1C */ float unk1C;
/* 0x20 */ float unk20;
/* 0x24 */ float unk24;
/* 0x28 */ float unk28;
/* 0x2C */ Vec unk2C;
/* 0x38 */ Vec unk38;
/* 0x44 */ char unk44[0xC];
/* 0x50 */ float unk50;
/* 0x54 */ float unk54;
/* 0x58 */ Vec unk58;
/* 0x64 */ Vec unk64;
/* 0x70 */ char unk70[0xC];
/* 0x7C */ float unk7C;
/* 0x80 */ float unk80;
/* 0x84 */ float unk84;
/* 0x88 */ float unk88;
/* 0x8C */ float unk8C;
/* 0x90 */ float unk90;
/* 0x94 */ float unk94;
/* 0x98 */ float unk98;
} UnkCameraDataStruct; // Size 0x9C
static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3);
static void fn_1_D44(omObjData *arg0);
static void fn_1_D6C(omObjData *arg0);
static void fn_1_12E4(omObjData *arg0);
static void fn_1_14E4(omObjData *arg0);
omObjData *lbl_1_bss_10;
static float pad_04_00000000_data[] = {
0.0f, 500.0f, 0.0f,
0.0f, -1.0f, 0.0f
};
static s32 pad_04_00000018_data = -1;
omObjData *fn_1_7F8(void) {
omObjData *var_r30;
UnkCameraDataStruct *temp_r31;
var_r30 = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, fn_1_D44);
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkCameraDataStruct), MEMORY_DEFAULT_NUM);
var_r30->data = temp_r31;
temp_r31->unk00.x = 0.0f;
temp_r31->unk00.y = 0.0f;
temp_r31->unk00.z = 0.0f;
temp_r31->unk0C.x = 0.0f;
temp_r31->unk0C.y = 0.0f;
temp_r31->unk0C.z = 0.0f;
temp_r31->unk18 = 0.0f;
temp_r31->unk1C = 1.0f;
temp_r31->unk20 = 0.0f;
temp_r31->unk24 = 0.0f;
temp_r31->unk28 = 0.0f;
temp_r31->unk8C = 1.0f;
temp_r31->unk84 = 1.0f;
temp_r31->unk94 = 1.0f;
Hu3DCameraCreate(1);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f);
fn_1_B74(var_r30, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(var_r30, 180.0f, 120.0f, 0.0f, 1);
return var_r30;
}
void fn_1_A3C(omObjData *arg0) {
HuMemDirectFree(arg0->data);
}
void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) {
UnkCameraDataStruct *temp_r31 = arg0->data;
temp_r31->unk58.x = arg1;
temp_r31->unk58.y = arg2;
temp_r31->unk58.z = arg3;
temp_r31->unk2C = temp_r31->unk00;
temp_r31->unk84 = 0.0f;
temp_r31->unk88 = 1.0f / arg4;
}
void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) {
UnkCameraDataStruct *temp_r31 = arg0->data;
temp_r31->unk64.x = arg1;
temp_r31->unk64.y = arg2;
temp_r31->unk64.z = arg3;
temp_r31->unk38 = temp_r31->unk0C;
temp_r31->unk8C = 0.0f;
temp_r31->unk90 = 1.0f / arg4;
}
void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) {
UnkCameraDataStruct *temp_r31 = arg0->data;
temp_r31->unk64.y = arg3;
temp_r31->unk7C = arg1;
temp_r31->unk80 = arg2;
temp_r31->unk38.y = temp_r31->unk0C.y;
temp_r31->unk50 = temp_r31->unk24;
temp_r31->unk54 = temp_r31->unk28;
temp_r31->unk94 = 0.0f;
temp_r31->unk98 = 1.0f / arg4;
}
float fn_1_BF8(omObjData *arg0) {
UnkCameraDataStruct *temp_r31 = arg0->data;
float temp_f31;
temp_f31 = temp_r31->unk24;
return temp_f31;
}
float fn_1_C28(omObjData *arg0) {
UnkCameraDataStruct *temp_r31 = arg0->data;
float temp_f31;
temp_f31 = temp_r31->unk28;
return temp_f31;
}
static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3) {
UnkCameraDataStruct *temp_r31 = arg0->data;
*arg1 = temp_r31->unk00.x;
*arg2 = temp_r31->unk00.y;
*arg3 = temp_r31->unk00.z;
}
void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3) {
UnkCameraDataStruct *temp_r31 = arg0->data;
*arg1 = temp_r31->unk0C.x;
*arg2 = temp_r31->unk0C.y;
*arg3 = temp_r31->unk0C.z;
}
s32 fn_1_CB8(omObjData *arg0) {
UnkCameraDataStruct *temp_r31 = arg0->data;
s32 var_r30 = 1;
s32 var_r29 = 1;
if (!(temp_r31->unk8C < 1.0f) && !(temp_r31->unk94 < 1.0f)) {
var_r29 = 0;
}
if (var_r29 == 0 && !(temp_r31->unk84 < 1.0f)) {
var_r30 = 0;
}
return var_r30;
}
static void fn_1_D44(omObjData *arg0) {
fn_1_D6C(arg0);
}
static void fn_1_D6C(omObjData *arg0) {
UnkCameraDataStruct *temp_r31 = arg0->data;
float temp_f28;
float temp_f31;
float temp_f30;
if (temp_r31->unk84 < 1.0f) {
temp_f28 = sin(90.0f * temp_r31->unk84 * M_PI / 180.0);
temp_r31->unk00.x = temp_r31->unk2C.x + temp_f28 * (temp_r31->unk58.x - temp_r31->unk2C.x);
temp_r31->unk00.y = temp_r31->unk2C.y + temp_f28 * (temp_r31->unk58.y - temp_r31->unk2C.y);
temp_r31->unk00.z = temp_r31->unk2C.z + temp_f28 * (temp_r31->unk58.z - temp_r31->unk2C.z);
if ((temp_r31->unk84 += temp_r31->unk88) >= 1.0f) {
temp_r31->unk00 = temp_r31->unk58;
}
}
if (temp_r31->unk8C < 1.0f) {
temp_f28 = sin(90.0f * temp_r31->unk8C * M_PI / 180.0);
temp_r31->unk0C.x = temp_r31->unk38.x + temp_f28 * (temp_r31->unk64.x - temp_r31->unk38.x);
temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y);
temp_r31->unk0C.z = temp_r31->unk38.z + temp_f28 * (temp_r31->unk64.z - temp_r31->unk38.z);
if ((temp_r31->unk8C += temp_r31->unk90) >= 1.0f) {
temp_r31->unk0C = temp_r31->unk64;
}
}
if (temp_r31->unk94 < 1.0f) {
temp_f28 = sin(90.0f * temp_r31->unk94 * M_PI / 180.0);
temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y);
temp_r31->unk24 = temp_r31->unk50 + temp_f28 * (temp_r31->unk7C - temp_r31->unk50);
temp_r31->unk28 = temp_r31->unk54 + temp_f28 * (temp_r31->unk80 - temp_r31->unk54);
if ((temp_r31->unk94 += temp_r31->unk98) >= 1.0f) {
temp_r31->unk0C.y = temp_r31->unk64.y;
temp_r31->unk24 = temp_r31->unk7C;
temp_r31->unk28 = temp_r31->unk80;
}
temp_r31->unk0C.x = temp_r31->unk24 * -sin(temp_r31->unk28 * M_PI / 180.0);
temp_r31->unk0C.z = temp_r31->unk24 * cos(temp_r31->unk28 * M_PI / 180.0);
}
temp_f31 = temp_r31->unk0C.x - temp_r31->unk00.x;
temp_f30 = temp_r31->unk0C.z - temp_r31->unk00.z;
temp_r31->unk24 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30);
temp_r31->unk28 = fmod(-(180.0 * (atan2(temp_f31, temp_f30) / M_PI)), 360.0);
if (temp_r31->unk28 < 0.0f) {
temp_r31->unk28 += 360.0f;
}
Hu3DCameraPosSet(1, temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z, temp_r31->unk18, temp_r31->unk1C, temp_r31->unk20, temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z);
}
static void fn_1_12E4(omObjData *arg0) {
UnkCameraDataStruct *temp_r31;
if (HuPadBtn[0] & 0xF) {
temp_r31 = arg0->data;
temp_r31->unk0C.x += 0.5f * HuPadStkX[0];
temp_r31->unk0C.y += 0.5f * HuPadStkY[0];
temp_r31->unk00.z += 0.5f * HuPadTrigL[0];
temp_r31->unk00.z -= 0.5f * HuPadTrigR[0];
temp_r31->unk00.x += 0.5f * HuPadSubStkY[0];
temp_r31->unk00.y += 0.5f * HuPadSubStkX[0];
}
}
static void fn_1_14E4(omObjData *arg0) {
UnkCameraDataStruct *temp_r31 = arg0->data;
print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z);
print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z);
print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", temp_r31->unk24, temp_r31->unk28);
}

230
src/REL/option/guide.c Executable file
View file

@ -0,0 +1,230 @@
#include "REL/option.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "dolphin.h"
#include "math.h"
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s16 unk04;
/* 0x06 */ char unk06[2];
/* 0x08 */ Vec unk08;
/* 0x14 */ Vec unk14;
/* 0x20 */ float unk20;
/* 0x24 */ float unk24;
/* 0x28 */ float unk28;
/* 0x2C */ float unk2C;
/* 0x30 */ float unk30;
/* 0x34 */ float unk34;
/* 0x38 */ float unk38;
/* 0x3C */ float unk3C;
/* 0x40 */ float unk40;
/* 0x44 */ float unk44;
/* 0x48 */ char unk48[0xC];
/* 0x54 */ float unk54;
/* 0x58 */ float unk58;
/* 0x5C */ s32 unk5C;
/* 0x60 */ s32 unk60;
} UnkGuideDataStruct; // Size 0x64
static void fn_1_24A8(omObjData *arg0, s32 arg1);
static s32 fn_1_24EC(omObjData *arg0);
static void fn_1_25AC(omObjData *arg0);
static void fn_1_2A18(omObjData *arg0);
static float fn_1_2D00(float arg0, float arg1, float arg2);
omObjData *lbl_1_bss_20;
static const s32 lbl_1_rodata_E0[] = {
DATA_MAKE_NUM(DATADIR_OPTION, 16),
DATA_MAKE_NUM(DATADIR_OPTION, 17),
DATA_MAKE_NUM(DATADIR_OPTION, 18)
};
static omObjFunc lbl_1_data_98[] = {
NULL,
fn_1_25AC
};
omObjData *fn_1_21F8(void) {
omObjData *var_r31;
UnkGuideDataStruct *temp_r30;
s32 i;
var_r31 = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL);
temp_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkGuideDataStruct), MEMORY_DEFAULT_NUM);
var_r31->data = temp_r30;
temp_r30->unk08.x = -298.59f;
temp_r30->unk08.z = 298.21f;
temp_r30->unk08.y = 0.0f;
temp_r30->unk20 = 0.0f;
temp_r30->unk24 = 134.42f;
temp_r30->unk28 = 0.0f;
temp_r30->unk2C = 0.0f;
temp_r30->unk34 = 0.0f;
temp_r30->unk30 = 0.0f;
var_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12));
Hu3DModelLayerSet(var_r31->model[0], 1);
for (i = 0; i < 3; i++) {
var_r31->motion[i] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA));
}
temp_r30->unk5C = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 0xC);
temp_r30->unk60 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 0xC);
CharModelLayerSetAll(1);
Hu3DModelShadowSet(var_r31->model[0]);
Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[0], 0.0f, 8.0f, 0x40000001);
fn_1_24A8(var_r31, 0);
fn_1_2A18(var_r31);
return var_r31;
}
void fn_1_241C(omObjData *arg0) {
UnkGuideDataStruct *temp_r29 = arg0->data;
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
for (i = 0; i < 3; i++) {
Hu3DMotionKill(arg0->motion[i]);
}
HuMemDirectFree(temp_r29);
}
static void fn_1_24A8(omObjData *arg0, s32 arg1) {
UnkGuideDataStruct *temp_r31 = arg0->data;
temp_r31->unk00 = arg1;
arg0->func = lbl_1_data_98[arg1];
arg0->unk10 = 0;
arg0->unk10 = 0;
}
static s32 fn_1_24EC(omObjData *arg0) {
UnkGuideDataStruct *temp_r31 = arg0->data;
return temp_r31->unk00;
}
void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3) {
UnkGuideDataStruct *temp_r31 = arg0->data;
temp_r31->unk40 = arg1;
temp_r31->unk44 = arg2;
temp_r31->unk54 = 0.0f;
temp_r31->unk58 = 1.0f / arg3;
temp_r31->unk04 = 0;
fn_1_24A8(arg0, 1);
}
static void fn_1_25AC(omObjData *arg0) {
UnkGuideDataStruct *temp_r31 = arg0->data;
float var_f31;
float var_f30;
switch (arg0->unk10) {
case 0:
temp_r31->unk3C = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0);
if (temp_r31->unk3C < 0.0f) {
temp_r31->unk3C += 360.0f;
}
arg0->unk10 = 1;
/* fallthrough */
case 1:
var_f30 = sin(90.0f * temp_r31->unk54 * M_PI / 180.0);
var_f31 = temp_r31->unk3C + var_f30 * (temp_r31->unk40 - temp_r31->unk3C);
temp_r31->unk14.x = temp_r31->unk44 * -sin(var_f31 * M_PI / 180.0);
temp_r31->unk14.z = temp_r31->unk44 * cos(var_f31 * M_PI / 180.0);
temp_r31->unk14.y = 0.0f;
temp_r31->unk2C = temp_r31->unk14.x - temp_r31->unk08.x;
temp_r31->unk34 = temp_r31->unk14.z - temp_r31->unk08.z;
if (temp_r31->unk54 <= 0.0f) {
temp_r31->unk2C = 0.0f;
temp_r31->unk34 = 0.0f;
temp_r31->unk08 = temp_r31->unk14;
}
if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) {
break;
}
var_f31 = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0);
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
temp_r31->unk14.x = 422.0 * -sin(var_f31 * M_PI / 180.0);
temp_r31->unk14.z = 422.0 * cos(var_f31 * M_PI / 180.0);
temp_r31->unk2C = (temp_r31->unk14.x - temp_r31->unk08.x) / 10.0f;
temp_r31->unk34 = (temp_r31->unk14.z - temp_r31->unk08.z) / 10.0f;
temp_r31->unk58 = 0.1f;
temp_r31->unk54 = 0.0f;
arg0->unk10 = 2;
/* fallthrough */
case 2:
if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) {
break;
}
arg0->unk10 = 3;
/* fallthrough */
case 3:
temp_r31->unk08 = temp_r31->unk14;
temp_r31->unk2C = 0.0f;
temp_r31->unk30 = 0.0f;
temp_r31->unk34 = 0.0f;
fn_1_2A18(arg0);
fn_1_24A8(arg0, 0);
break;
}
fn_1_2A18(arg0);
}
static void fn_1_2A18(omObjData *arg0) {
UnkGuideDataStruct *temp_r31 = arg0->data;
s16 var_r29;
var_r29 = 0;
temp_r31->unk38 = sqrtf(temp_r31->unk2C * temp_r31->unk2C + temp_r31->unk34 * temp_r31->unk34);
if (0.001f <= temp_r31->unk38) {
if (14.0f <= temp_r31->unk38) {
temp_r31->unk2C /= temp_r31->unk38;
temp_r31->unk34 /= temp_r31->unk38;
temp_r31->unk38 = 14.0f;
temp_r31->unk2C = 14.0f * temp_r31->unk2C;
temp_r31->unk34 = 14.0f * temp_r31->unk34;
}
temp_r31->unk24 = fn_1_2D00(temp_r31->unk24, 180.0 * (atan2(temp_r31->unk2C, temp_r31->unk34) / M_PI), 0.4f);
if (8.0f <= temp_r31->unk38) {
var_r29 = 2;
} else {
var_r29 = 1;
}
}
temp_r31->unk08.x += temp_r31->unk2C;
temp_r31->unk08.z += temp_r31->unk34;
if (temp_r31->unk04 != var_r29) {
Hu3DMotionShiftSet(*arg0->model, arg0->motion[var_r29], 0.0f, 8.0f, 0x40000001);
temp_r31->unk04 = var_r29;
}
omSetTra(arg0, temp_r31->unk08.x, temp_r31->unk08.y, temp_r31->unk08.z);
omSetRot(arg0, temp_r31->unk20, temp_r31->unk24, temp_r31->unk28);
}
static float fn_1_2D00(float arg0, float arg1, float arg2) {
float var_f30;
float var_f31;
var_f31 = fmod(arg1 - arg0, 360.0);
if (0.0f > var_f31) {
var_f31 += 360.0f;
}
if (180.0f < var_f31) {
var_f31 -= 360.0f;
}
var_f30 = fmod(arg0 + var_f31 * arg2, 360.0);
if (0.0f > var_f30) {
var_f30 += 360.0f;
}
return var_f30;
}

794
src/REL/option/record.c Executable file
View file

@ -0,0 +1,794 @@
#include "REL/option.h"
#include "game/audio.h"
#include "game/data.h"
#include "game/esprite.h"
#include "game/gamework_data.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "game/window.h"
#include "dolphin.h"
#include "math.h"
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04[8];
/* 0x24 */ s32 unk24;
/* 0x28 */ s32 unk28;
} UnkRecordDataStruct00; // Size 0x2C
typedef struct {
/* 0x000 */ omObjData *unk00;
/* 0x004 */ omObjData *unk04;
/* 0x008 */ UnkWindowDataStruct *unk08[10];
/* 0x030 */ s32 unk30;
/* 0x034 */ s16 unk34[153];
/* 0x166 */ char unk166[6];
/* 0x16C */ s32 unk16C;
/* 0x170 */ s32 unk170;
/* 0x174 */ s32 unk174;
/* 0x178 */ UnkRecordDataStruct00 unk178[6];
/* 0x280 */ s32 unk280[6];
/* 0x298 */ s32 unk298;
/* 0x29C */ s32 unk29C;
} UnkRecordDataStruct01; // Size 0x2A0
static void fn_1_8310(omObjData *arg0);
static omObjData *fn_1_8A88(void);
static void fn_1_8B58(omObjData *arg0);
static void fn_1_8BAC(omObjData *arg0, s32 arg1);
static omObjData *fn_1_8C84(void);
static void fn_1_8D80(omObjData *arg0);
static void fn_1_8DD4(omObjData *arg0);
static void fn_1_8E98(omObjData *arg0);
static s32 fn_1_8EF8(s32 arg0, s32 arg1);
static void fn_1_8F38(omObjData *arg0, s32 arg1);
static void fn_1_96B4(omObjData *arg0);
static void fn_1_9750(omObjData *arg0);
static void fn_1_9A94(omObjData *arg0);
static void fn_1_9B10(omObjData *arg0, s32 arg1);
static void fn_1_A3B0(omObjData *arg0);
omObjData *lbl_1_bss_40;
static const s32 lbl_1_rodata_13C0[] = { 0, 1, 2, 3, 5, 10 };
static omObjFunc lbl_1_data_210[] = {
NULL,
fn_1_8310
};
omObjData *fn_1_80E4(void) {
omObjData *temp_r29;
UnkRecordDataStruct01 *temp_r3;
s32 i;
s32 j;
temp_r29 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRecordDataStruct01), MEMORY_DEFAULT_NUM);
temp_r29->data = temp_r3;
for (i = 0; i < 6; i++) {
temp_r3->unk178[i].unk00 = GWBoardPlayCountGet(i);
temp_r3->unk178[i].unk28 = GWBoardMaxStarsGet(i);
temp_r3->unk178[i].unk24 = GWBoardMaxCoinsGet(i);
for (j = 0; j < 8; j++) {
temp_r3->unk178[i].unk04[j] = GWBoardWinCountGet(j, i);
}
}
for (i = 0; i < 6; i++) {
temp_r3->unk280[i] = GWMGRecordGet(lbl_1_rodata_13C0[i]);
}
temp_r3->unk170 = 0;
temp_r3->unk174 = 0;
temp_r3->unk16C = 0;
temp_r3->unk00 = fn_1_8A88();
temp_r3->unk04 = fn_1_8C84();
fn_1_8DD4(temp_r29);
fn_1_82B0(temp_r29, 0);
return temp_r29;
}
void fn_1_825C(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
fn_1_8B58(temp_r31->unk00);
fn_1_8D80(temp_r31->unk04);
fn_1_8E98(arg0);
HuMemDirectFree(temp_r31);
}
void fn_1_82B0(omObjData *arg0, s32 arg1) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
temp_r31->unk30 = arg1;
arg0->func = lbl_1_data_210[arg1];
arg0->unk10 = 0;
arg0->unk10 = 0;
}
s32 fn_1_82F4(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
return temp_r31->unk30;
}
static void fn_1_8310(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
Vec sp8;
s32 i;
switch (arg0->unk10) {
case 0:
temp_r31->unk08[0] = fn_1_A44C(0);
temp_r31->unk08[1] = fn_1_A44C(1);
for (i = 0; i < 8; i++) {
temp_r31->unk08[i + 2] = fn_1_A44C(3);
}
fn_1_AF0(lbl_1_bss_10, 519.0f, 125.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, 308.98f, 125.0f, 178.74f, 0x28);
temp_r31->unk170 = 0;
temp_r31->unk174 = 0;
temp_r31->unk298 = 0;
arg0->unk10 = 1;
/* fallthrough */
case 1:
if (fn_1_CB8(lbl_1_bss_10) != 0) {
break;
}
fn_1_3D54(lbl_1_bss_30);
espBankSet(temp_r31->unk34[47], 0);
espBankSet(temp_r31->unk34[48], 2);
espPosSet(temp_r31->unk34[47], 46.0f, 240.0f);
espPosSet(temp_r31->unk34[48], 494.0f, 240.0f);
if (temp_r31->unk16C == 0) {
fn_1_160(temp_r31->unk34[47], 1, 10);
fn_1_160(temp_r31->unk34[48], 1, 10);
temp_r31->unk29C = 0;
}
arg0->unk10 = 2;
/* fallthrough */
case 2:
fn_1_96B4(arg0);
fn_1_A3B0(arg0);
fn_1_9A94(arg0);
switch (temp_r31->unk16C) {
case 0:
if (temp_r31->unk170 < 6) {
fn_1_8F38(arg0, temp_r31->unk170);
} else {
fn_1_9750(arg0);
}
fn_1_A6EC(temp_r31->unk08[0]);
fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 5));
break;
case 1:
fn_1_9B10(arg0, temp_r31->unk174);
fn_1_A6EC(temp_r31->unk08[0]);
fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 6));
break;
}
fn_1_A6EC(temp_r31->unk08[1]);
fn_1_A71C(temp_r31->unk08[1], MAKE_MESSID(47, 169));
if (temp_r31->unk298 == 0) {
Hu3DModelAttrReset(temp_r31->unk04->model[0], 1);
temp_r31->unk298 = 1;
}
sp8.x = 505.0 * -sin(305 * M_PI / 180.0);
sp8.z = 505.0 * cos(305 * M_PI / 180.0);
sp8.y = 144.0f - 14.0f * temp_r31->unk16C;
omSetTra(temp_r31->unk04, sp8.x, sp8.y, sp8.z);
arg0->unk10 = 3;
/* fallthrough */
case 3:
if (temp_r31->unk29C > 0) {
temp_r31->unk29C--;
break;
}
espBankSet(temp_r31->unk34[47], 0);
espBankSet(temp_r31->unk34[48], 2);
arg0->unk10 = 4;
/* fallthrough */
case 4:
if (temp_r31->unk08[1]->unk20 != 0) {
break;
}
if (fn_1_550(0x200) != 0) {
HuAudFXPlay(3);
arg0->unk10 = 5;
} else if (fn_1_584(8) != 0 && temp_r31->unk16C == 1) {
temp_r31->unk16C = 0;
temp_r31->unk170 = 0;
fn_1_8BAC(temp_r31->unk00, temp_r31->unk16C);
fn_1_160(temp_r31->unk34[47], 1, 5);
fn_1_160(temp_r31->unk34[48], 1, 5);
temp_r31->unk29C = 5;
HuAudFXPlay(0x83F);
arg0->unk10 = 2;
} else if (fn_1_584(4) != 0 && temp_r31->unk16C == 0) {
temp_r31->unk16C = 1;
temp_r31->unk174 = 0;
fn_1_8BAC(temp_r31->unk00, temp_r31->unk16C);
fn_1_160(temp_r31->unk34[47], 0, 5);
fn_1_160(temp_r31->unk34[48], 0, 5);
temp_r31->unk29C = 5;
HuAudFXPlay(0x83F);
arg0->unk10 = 2;
} else {
switch (temp_r31->unk16C) {
case 0:
if (fn_1_550(0x40) != 0) {
if (--temp_r31->unk170 < 0) {
temp_r31->unk170 = 6;
}
if (GWGameStat.open_w06 == 0 && temp_r31->unk170 == 5) {
temp_r31->unk170--;
}
HuAudFXPlay(0x840);
espBankSet(temp_r31->unk34[47], 1);
temp_r31->unk29C = 0xA;
arg0->unk10 = 2;
return;
}
if (fn_1_550(0x20) != 0) {
if (++temp_r31->unk170 >= 7) {
temp_r31->unk170 = 0;
}
if (GWGameStat.open_w06 == 0 && temp_r31->unk170 == 5) {
temp_r31->unk170++;
}
HuAudFXPlay(0x840);
espBankSet(temp_r31->unk34[48], 3);
temp_r31->unk29C = 0xA;
arg0->unk10 = 2;
}
break;
case 1:
break;
}
}
break;
case 5:
fn_1_3E1C(lbl_1_bss_30);
if (temp_r31->unk16C == 0) {
fn_1_160(temp_r31->unk34[47], 0, 10);
fn_1_160(temp_r31->unk34[48], 0, 10);
}
fn_1_A704(temp_r31->unk08[0]);
fn_1_A704(temp_r31->unk08[1]);
Hu3DModelAttrSet(temp_r31->unk04->model[0], 1);
arg0->unk10 = 6;
/* fallthrough */
case 6:
if (temp_r31->unk08[1]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) {
for (i = 0; i < 10; i++) {
fn_1_A6AC(temp_r31->unk08[i]);
}
fn_1_96B4(arg0);
fn_1_A3B0(arg0);
fn_1_9A94(arg0);
fn_1_AF0(lbl_1_bss_10, 519.62f, 120.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28);
fn_1_82B0(arg0, 0);
}
break;
}
}
static omObjData *fn_1_8A88(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002);
Hu3DModelLayerSet(temp_r31->model[0], 0);
Hu3DMotionStartEndSet(temp_r31->model[0], 0.0f, 6.0f);
Hu3DMotionTimeSet(temp_r31->model[0], 6.0f);
return temp_r31;
}
static void fn_1_8B58(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}
static void fn_1_8BAC(omObjData *arg0, s32 arg1) {
s16 temp_r31 = arg0->model[0];
switch (arg1) {
case 0:
Hu3DMotionStartEndSet(temp_r31, 0.0f, 6.0f);
Hu3DMotionTimeSet(temp_r31, 0.0f);
break;
case 1:
Hu3DMotionStartEndSet(temp_r31, 6.0f, 12.0f);
Hu3DMotionTimeSet(temp_r31, 6.0f);
break;
}
Hu3DModelAttrReset(arg0->model[0], 0x40000002);
}
static omObjData *fn_1_8C84(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14));
Hu3DModelLayerSet(temp_r31->model[0], 2);
Hu3DModelAttrSet(temp_r31->model[0], 0x40000001);
omSetRot(temp_r31, 30.0f, 190.0f, 0.0f);
omSetSca(temp_r31, 0.6f, 0.6f, 0.6f);
Hu3DModelAttrSet(temp_r31->model[0], 1);
return temp_r31;
}
static void fn_1_8D80(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}
static const s32 lbl_1_rodata_143C[153] = {
DATA_MAKE_NUM(DATADIR_OPTION, 55),
DATA_MAKE_NUM(DATADIR_OPTION, 56),
DATA_MAKE_NUM(DATADIR_OPTION, 57),
DATA_MAKE_NUM(DATADIR_OPTION, 58),
DATA_MAKE_NUM(DATADIR_OPTION, 59),
DATA_MAKE_NUM(DATADIR_OPTION, 60),
DATA_MAKE_NUM(DATADIR_OPTION, 61),
DATA_MAKE_NUM(DATADIR_OPTION, 62),
DATA_MAKE_NUM(DATADIR_OPTION, 50),
DATA_MAKE_NUM(DATADIR_OPTION, 51),
DATA_MAKE_NUM(DATADIR_OPTION, 66),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 52),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 53),
DATA_MAKE_NUM(DATADIR_OPTION, 49),
DATA_MAKE_NUM(DATADIR_OPTION, 49),
DATA_MAKE_NUM(DATADIR_OPTION, 19),
DATA_MAKE_NUM(DATADIR_OPTION, 20),
DATA_MAKE_NUM(DATADIR_OPTION, 21),
DATA_MAKE_NUM(DATADIR_OPTION, 22),
DATA_MAKE_NUM(DATADIR_OPTION, 23),
DATA_MAKE_NUM(DATADIR_OPTION, 24),
DATA_MAKE_NUM(DATADIR_OPTION, 25),
DATA_MAKE_NUM(DATADIR_OPTION, 26),
DATA_MAKE_NUM(DATADIR_OPTION, 27),
DATA_MAKE_NUM(DATADIR_OPTION, 28),
DATA_MAKE_NUM(DATADIR_OPTION, 29),
DATA_MAKE_NUM(DATADIR_OPTION, 30),
DATA_MAKE_NUM(DATADIR_OPTION, 31),
DATA_MAKE_NUM(DATADIR_OPTION, 32),
DATA_MAKE_NUM(DATADIR_OPTION, 33),
DATA_MAKE_NUM(DATADIR_OPTION, 34),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54),
DATA_MAKE_NUM(DATADIR_OPTION, 54)
};
static void fn_1_8DD4(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 i;
for (i = 0; i < 153; i++) {
temp_r31->unk34[i] = espEntry(lbl_1_rodata_143C[i], 0, 0);
espDrawNoSet(temp_r31->unk34[i], 0x40);
espDispOff(temp_r31->unk34[i]);
}
espBankSet(temp_r31->unk34[47], 0);
espBankSet(temp_r31->unk34[48], 2);
HuSprExecLayerSet(0x40, 1);
}
static void fn_1_8E98(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 i;
for (i = 0; i < 153; i++) {
espKill(temp_r31->unk34[i]);
}
}
static s32 fn_1_8EF8(s32 arg0, s32 arg1) {
s32 var_r31;
var_r31 = 1;
while (arg1-- != 0) {
var_r31 *= 10;
}
return (arg0 % (var_r31 * 10)) / var_r31;
}
static void fn_1_8F38(omObjData *arg0, s32 arg1) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 temp_r28;
s32 i;
s32 j;
espPosSet(temp_r31->unk34[arg1], 275.0f, 72.0f);
temp_r28 = temp_r31->unk178[temp_r31->unk170].unk00;
for (i = 0; i < 4; i++) {
espPosSet(temp_r31->unk34[i + 11], 323.0f + 20.0f * i, 116.0f);
if (temp_r28 > 999) {
espBankSet(temp_r31->unk34[i + 11], i + 10);
} else {
espBankSet(temp_r31->unk34[i + 11], fn_1_8EF8(temp_r28, 3 - i));
}
}
espPosSet(temp_r31->unk34[8], 416.0f, 120.0f);
temp_r28 = temp_r31->unk178[temp_r31->unk170].unk24;
for (i = 0; i < 4; i++) {
espPosSet(temp_r31->unk34[i + 15], 364.0f + 20.0f * i, 268.0f);
if (temp_r28 > 999) {
espBankSet(temp_r31->unk34[i + 15], i + 10);
} else {
espBankSet(temp_r31->unk34[i + 15], fn_1_8EF8(temp_r28, 3 - i));
}
}
espPosSet(temp_r31->unk34[9], 456.0f, 268.0f);
temp_r28 = temp_r31->unk178[temp_r31->unk170].unk28;
for (i = 0; i < 4; i++) {
espPosSet(temp_r31->unk34[i + 19], 364.0f + 20.0f * i, 312.0f);
if (temp_r28 > 999) {
espBankSet(temp_r31->unk34[i + 19], i + 10);
} else {
espBankSet(temp_r31->unk34[i + 19], fn_1_8EF8(temp_r28, 3 - i));
}
}
espPosSet(temp_r31->unk34[10], 456.0f, 312.0f);
for (i = 0; i < 8; i++) {
espPosSet(temp_r31->unk34[i + 49], 92.0f + 50.0f * i, 200.0f);
for (j = 0; j < 3; j++) {
espPosSet(temp_r31->unk34[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f);
espBankSet(temp_r31->unk34[i * 3 + 23 + j], fn_1_8EF8(temp_r31->unk178[temp_r31->unk170].unk04[i], 2 - j));
}
}
espPosSet(temp_r31->unk34[47], 48.0f, 240.0f);
espPosSet(temp_r31->unk34[48], 492.0f, 240.0f);
espDispOn(temp_r31->unk34[arg1]);
for (i = 0; i < 4; i++) {
espDispOn(temp_r31->unk34[i + 11]);
}
espDispOn(temp_r31->unk34[8]);
for (i = 0; i < 4; i++) {
espDispOn(temp_r31->unk34[i + 15]);
}
espDispOn(temp_r31->unk34[9]);
for (i = 0; i < 4; i++) {
espDispOn(temp_r31->unk34[i + 19]);
}
espDispOn(temp_r31->unk34[10]);
for (i = 0; i < 8; i++) {
espDispOn(temp_r31->unk34[i + 49]);
for (j = 0; j < 3; j++) {
espDispOn(temp_r31->unk34[i * 3 + 23 + j]);
}
}
for (i = 0; i < 4; i++) {
fn_1_A7F0(temp_r31->unk08[i + 2]);
}
fn_1_A7B0(temp_r31->unk08[2], 64.0f, 96.0f);
fn_1_A71C(temp_r31->unk08[2], MAKE_MESSID(47, 19));
fn_1_A7B0(temp_r31->unk08[3], 64.0f, 140.0f);
fn_1_A71C(temp_r31->unk08[3], MAKE_MESSID(47, 20));
fn_1_A7B0(temp_r31->unk08[4], 64.0f, 248.0f);
fn_1_A71C(temp_r31->unk08[4], MAKE_MESSID(47, 21));
fn_1_A7B0(temp_r31->unk08[5], 64.0f, 292.0f);
fn_1_A71C(temp_r31->unk08[5], MAKE_MESSID(47, 22));
}
static const s32 lbl_1_rodata_16F8[53] = {
0, 1, 2, 3, 4, 5, 49, 50, 51, 52,
53, 54, 55, 56, 8, 9, 10, 11, 12, 13,
14, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 38, 39, 40, 35, 36, 37, 41,
42, 43, 44, 45, 46, 15, 16, 17, 18, 19,
20, 21, 22
};
static void fn_1_96B4(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 i;
for (i = 0; i < 53; i++) {
espDispOff(temp_r31->unk34[lbl_1_rodata_16F8[i]]);
}
for (i = 0; i < 4; i++) {
fn_1_A828(temp_r31->unk08[i + 2]);
}
}
static void fn_1_9750(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 var_r27;
s32 i;
s32 j;
espPosSet(temp_r31->unk34[6], 275.0f, 72.0f);
for (i = 0; i < 8; i++) {
espPosSet(temp_r31->unk34[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4));
for (j = 0, var_r27 = 0; j < 6; j++) {
var_r27 += temp_r31->unk178[j].unk04[i];
}
for (j = 0; j < 3; j++) {
espPosSet(temp_r31->unk34[i * 3 + 65 + j], 132.0f + 80.0f * (i % 4) + 16.0f * j, 218.0f + 104.0f * (i / 4));
espBankSet(temp_r31->unk34[i * 3 + 65 + j], fn_1_8EF8(var_r27, 2 - j));
}
}
espDispOn(temp_r31->unk34[6]);
for (i = 0; i < 8; i++) {
espDispOn(temp_r31->unk34[i + 57]);
for (j = 0; j < 3; j++) {
espDispOn(temp_r31->unk34[i * 3 + 65 + j]);
}
}
fn_1_A7B0(temp_r31->unk08[2], 136.0f, 96.0f);
fn_1_A71C(temp_r31->unk08[2], MAKE_MESSID(47, 23));
fn_1_A7F0(temp_r31->unk08[2]);
}
static const s32 lbl_1_rodata_17E8[33] = {
6, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88
};
static void fn_1_9A94(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 i;
for (i = 0; i < 33; i++) {
espDispOff(temp_r31->unk34[lbl_1_rodata_17E8[i]]);
}
fn_1_A828(temp_r31->unk08[2]);
}
static const s32 lbl_1_rodata_186C[6][3] = {
{ 0x00000195, MAKE_MESSID(23, 5), 0 },
{ 0x00000197, MAKE_MESSID(23, 7), 1 },
{ 0x000001AB, MAKE_MESSID(23, 27), 0 },
{ 0x000001B0, MAKE_MESSID(23, 32), 0 },
{ 0x000001BB, MAKE_MESSID(23, 43), 0 },
{ 0x000001C8, MAKE_MESSID(23, 54), 0 }
};
static void fn_1_9B10(omObjData *arg0, s32 arg1) {
UnkRecordDataStruct01 *temp_r31 = arg0->data;
s32 temp_r25;
s32 temp_r27;
s32 var_r28;
s32 var_r26;
s32 var_r17;
s32 sp5C;
s32 sp58;
s32 sp54;
s32 sp50;
s32 sp4C;
s32 i;
s32 j;
espPosSet(temp_r31->unk34[7], 275.0f, 72.0f);
espPosSet(temp_r31->unk34[47], 48.0f, 240.0f);
espPosSet(temp_r31->unk34[48], 492.0f, 240.0f);
espDispOn(temp_r31->unk34[7]);
for (i = 0; i < 8; i++) {
sp50 = 0;
temp_r27 = i + arg1 * 8;
if (temp_r27 >= 6) {
break;
}
sp54 = GWMGAvailGet(lbl_1_rodata_186C[temp_r27][0]);
temp_r25 = temp_r31->unk280[temp_r27];
if (sp54 != 0) {
switch (lbl_1_rodata_186C[temp_r27][2]) {
case 1:
for (j = 0; j < 8; j++) {
var_r17 = fn_1_8EF8(temp_r25, 7 - j);
if (var_r17 != 0 || sp50 != 0 || j >= 7) {
espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i);
espBankSet(temp_r31->unk34[i * 8 + 89 + j], var_r17);
espDispOn(temp_r31->unk34[i * 8 + 89 + j]);
sp50 = 1;
}
}
break;
case 0:
sp5C = temp_r25 / 3600;
sp58 = (temp_r25 % 3600) / 60;
var_r26 = (temp_r25 % 3600) % 60;
if (lbl_1_rodata_186C[temp_r27][0] == 0x195 || lbl_1_rodata_186C[temp_r27][0] == 0x1B0) {
var_r26 *= 1.6916667f;
} else {
var_r26 *= 1.6666666f;
}
for (j = 1; j < 8; j++) {
espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i);
switch (j) {
case 0:
var_r28 = fn_1_8EF8(sp5C, 1);
break;
case 1:
var_r28 = fn_1_8EF8(sp5C, 0);
break;
case 3:
var_r28 = fn_1_8EF8(sp58, 1);
break;
case 4:
var_r28 = fn_1_8EF8(sp58, 0);
break;
case 6:
var_r28 = fn_1_8EF8(var_r26, 1);
break;
case 7:
var_r28 = fn_1_8EF8(var_r26, 0);
break;
case 2:
var_r28 = 11;
break;
case 5:
var_r28 = 12;
break;
}
espBankSet(temp_r31->unk34[i * 8 + 89 + j], var_r28);
espDispOn(temp_r31->unk34[i * 8 + 89 + j]);
}
break;
}
} else {
for (j = 0; j < 8; j++) {
espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i);
espBankSet(temp_r31->unk34[i * 8 + 89 + j], 0);
espDispOn(temp_r31->unk34[i * 8 + 89 + j]);
}
}
fn_1_A7B0(temp_r31->unk08[i + 2], 60.0f, 96.0f + 40.0f * i);
sp4C = (sp54 != 0) ? lbl_1_rodata_186C[temp_r27][1] : MAKE_MESSID(35, 0);
fn_1_A71C(temp_r31->unk08[i + 2], sp4C);
fn_1_A7F0(temp_r31->unk08[i + 2]);
}
}
static const s32 lbl_1_rodata_18C8[65] = {
7, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
148, 149, 150, 151, 152
};
static void fn_1_A3B0(omObjData *arg0) {
UnkRecordDataStruct01 *temp_r30 = arg0->data;
s32 i;
for (i = 0; i < 65; i++) {
espDispOff(temp_r30->unk34[lbl_1_rodata_18C8[i]]);
}
for (i = 0; i < 8; i++) {
fn_1_A828(temp_r30->unk08[i + 2]);
}
}

246
src/REL/option/room.c Executable file
View file

@ -0,0 +1,246 @@
#include "REL/option.h"
#include "game/audio.h"
#include "game/hsfman.h"
#include "game/memory.h"
#include "game/process.h"
#include "game/window.h"
typedef struct {
/* 0x00 */ omObjData *unk00;
/* 0x04 */ omObjData *unk04;
/* 0x08 */ omObjData *unk08;
/* 0x0C */ omObjData *unk0C;
/* 0x10 */ UnkWindowDataStruct *unk10;
/* 0x14 */ UnkWindowDataStruct *unk14;
/* 0x18 */ s32 unk18;
/* 0x1C */ s32 unk1C;
/* 0x20 */ s16 unk20;
/* 0x22 */ char unk22[6];
/* 0x28 */ s32 unk28;
} UnkRoomDataStruct; // Size 0x2C
static void fn_1_1844(omObjData *arg0, s32 arg1);
static void fn_1_1A8C(omObjData *arg0);
static omObjData *fn_1_2088(void);
static void fn_1_2110(omObjData *arg0);
static omObjData *fn_1_2144(void);
static void fn_1_21C4(omObjData *arg0);
omObjData *lbl_1_bss_18;
static omObjFunc lbl_1_data_68[] = {
NULL,
fn_1_1A8C
};
omObjData *fn_1_15A4(void) {
omObjData *var_r30;
UnkRoomDataStruct *temp_r31;
var_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRoomDataStruct), MEMORY_DEFAULT_NUM);
var_r30->data = temp_r31;
temp_r31->unk18 = 0;
temp_r31->unk20 = -1;
temp_r31->unk28 = 0;
fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1);
temp_r31->unk00 = fn_1_2088();
lbl_1_bss_38 = fn_1_4028();
lbl_1_bss_40 = fn_1_80E4();
lbl_1_bss_30 = fn_1_3158();
lbl_1_bss_20 = fn_1_21F8();
temp_r31->unk04 = fn_1_2144();
temp_r31->unk08 = fn_1_2144();
temp_r31->unk0C = fn_1_2144();
omSetRot(temp_r31->unk04, 0.0f, 0.0f, 0.0f);
omSetRot(temp_r31->unk08, 0.0f, 120.0f, 0.0f);
omSetRot(temp_r31->unk0C, 0.0f, 240.0f, 0.0f);
temp_r31->unk10 = fn_1_A44C(0);
temp_r31->unk14 = fn_1_A44C(1);
return var_r30;
}
void fn_1_1798(omObjData *arg0) {
UnkRoomDataStruct *temp_r31 = arg0->data;
fn_1_2110(temp_r31->unk00);
fn_1_42DC(lbl_1_bss_38);
fn_1_322C(lbl_1_bss_30);
fn_1_825C(lbl_1_bss_40);
fn_1_241C(lbl_1_bss_20);
fn_1_21C4(temp_r31->unk04);
fn_1_21C4(temp_r31->unk08);
fn_1_21C4(temp_r31->unk0C);
fn_1_A6AC(temp_r31->unk10);
fn_1_A6AC(temp_r31->unk14);
HuMemDirectFree(temp_r31);
}
static const float lbl_1_rodata_BC[3] = { 45.0f, 165.0f, 285.0f };
static void fn_1_1844(omObjData *arg0, s32 arg1) {
UnkRoomDataStruct *temp_r31 = arg0->data;
float sp10;
float spC;
float sp8;
float var_f31;
temp_r31->unk18 += (arg1 == 0) ? -1 : 1;
if (temp_r31->unk18 < 0) {
temp_r31->unk18 = 2;
} else if (temp_r31->unk18 >= 3) {
temp_r31->unk18 = 0;
}
fn_1_C88(lbl_1_bss_10, &sp10, &spC, &sp8);
fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (arg1 == 0 ? -120.0f : 120.0f), spC, 0x60);
if (temp_r31->unk18 == 2 && arg1 == 0) {
var_f31 = lbl_1_rodata_BC[2] - 360.0f;
} else if (temp_r31->unk18 == 0 && arg1 == 1) {
var_f31 = 360.0f + lbl_1_rodata_BC[0];
} else {
var_f31 = lbl_1_rodata_BC[temp_r31->unk18];
}
fn_1_2508(lbl_1_bss_20, var_f31, 430.0f, 0x60);
}
void fn_1_1A2C(omObjData *arg0, s32 arg1) {
UnkRoomDataStruct *temp_r31 = arg0->data;
temp_r31->unk1C = arg1;
arg0->func = lbl_1_data_68[arg1];
arg0->unk10 = 0;
arg0->unk10 = 0;
}
s32 fn_1_1A70(omObjData *arg0) {
UnkRoomDataStruct *temp_r31 = arg0->data;
return temp_r31->unk1C;
}
static const s32 lbl_1_rodata_D4[] = {
MAKE_MESSID(47, 1),
MAKE_MESSID(47, 7),
MAKE_MESSID(47, 4)
};
static void fn_1_1A8C(omObjData *arg0) {
UnkRoomDataStruct *temp_r31 = arg0->data;
switch (arg0->unk10) {
case 0:
if (temp_r31->unk28 == 0) {
fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1);
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1);
temp_r31->unk28 = 1;
}
arg0->unk10 = 1;
/* fallthrough */
case 1:
if (fn_1_CB8(lbl_1_bss_10) != 0) {
break;
}
fn_1_A6EC(temp_r31->unk10);
fn_1_A71C(temp_r31->unk10, lbl_1_rodata_D4[temp_r31->unk18]);
fn_1_A6EC(temp_r31->unk14);
fn_1_A71C(temp_r31->unk14, MAKE_MESSID(47, 14));
arg0->unk10 = 2;
/* fallthrough */
case 2:
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) {
if (fn_1_550(0x200) != 0) {
HuAudFXPlay(3);
arg0->unk10 = 7;
} else if (fn_1_584(1) != 0) {
fn_1_1844(arg0, 0);
fn_1_A704(temp_r31->unk10);
fn_1_A704(temp_r31->unk14);
HuAudFXPlay(0);
arg0->unk10 = 1;
} else if (fn_1_584(2) != 0) {
fn_1_1844(arg0, 1);
fn_1_A704(temp_r31->unk10);
fn_1_A704(temp_r31->unk14);
HuAudFXPlay(0);
arg0->unk10 = 1;
} else if (fn_1_550(0x100) != 0) {
fn_1_A704(temp_r31->unk10);
fn_1_A704(temp_r31->unk14);
HuAudFXPlay(2);
arg0->unk10 = 3;
}
}
break;
case 3:
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) {
switch (temp_r31->unk18) {
case 0:
fn_1_3290(lbl_1_bss_30, 1);
arg0->unk10 = 4;
break;
case 1:
fn_1_4388(lbl_1_bss_38, 1);
arg0->unk10 = 5;
break;
case 2:
fn_1_82B0(lbl_1_bss_40, 1);
arg0->unk10 = 6;
break;
}
}
break;
case 4:
if (fn_1_32D4(lbl_1_bss_30) == 0) {
arg0->unk10 = 1;
}
break;
case 5:
if (fn_1_43CC(lbl_1_bss_38) == 0) {
arg0->unk10 = 1;
}
break;
case 6:
if (fn_1_82F4(lbl_1_bss_40) == 0) {
arg0->unk10 = 1;
}
break;
case 7:
fn_1_A704(temp_r31->unk10);
fn_1_A704(temp_r31->unk14);
arg0->unk10 = 8;
/* fallthrough */
case 8:
if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) {
fn_1_1A2C(arg0, 0);
}
break;
}
}
static omObjData *fn_1_2088(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0));
Hu3DModelLayerSet(temp_r31->model[0], 0);
Hu3DModelShadowMapSet(temp_r31->model[0]);
return temp_r31;
}
static void fn_1_2110(omObjData *arg0) {
Hu3DModelKill(arg0->model[0]);
}
static omObjData *fn_1_2144(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
Hu3DModelLayerSet(temp_r31->model[0], 0);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6));
return temp_r31;
}
static void fn_1_21C4(omObjData *arg0) {
Hu3DModelKill(arg0->model[0]);
}

336
src/REL/option/rumble.c Executable file
View file

@ -0,0 +1,336 @@
#include "REL/option.h"
#include "game/audio.h"
#include "game/gamework_data.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "game/pad.h"
#include "game/window.h"
typedef struct {
/* 0x00 */ omObjData *unk00;
/* 0x04 */ omObjData *unk04;
/* 0x08 */ omObjData *unk08;
/* 0x0C */ omObjData *unk0C;
/* 0x10 */ omObjData *unk10;
/* 0x14 */ UnkWindowDataStruct *unk14[2];
/* 0x20 */ s32 unk1C;
/* 0x20 */ s32 unk20;
/* 0x24 */ s32 unk24;
/* 0x28 */ s32 unk28;
} UnkRumbleDataStruct; // Size 0x2C
static void fn_1_32F0(omObjData *arg0);
static omObjData *fn_1_37AC(void);
static void fn_1_3868(omObjData *arg0);
static omObjData *fn_1_38BC(void);
static void fn_1_398C(omObjData *arg0);
static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2);
static omObjData *fn_1_3B08(void);
static void fn_1_3B8C(omObjData *arg0);
static void fn_1_3BE0(omObjData *arg0, s32 arg1);
static omObjData *fn_1_3C6C(void);
static void fn_1_3D00(omObjData *arg0);
static omObjData *fn_1_3F28(void);
static void fn_1_3FD4(omObjData *arg0);
omObjData *lbl_1_bss_30;
static omObjFunc lbl_1_data_108[] = {
NULL,
fn_1_32F0
};
omObjData *fn_1_3158(void) {
omObjData *temp_r30;
UnkRumbleDataStruct *temp_r3;
temp_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL);
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRumbleDataStruct), MEMORY_DEFAULT_NUM);
temp_r30->data = temp_r3;
temp_r3->unk20 = GWGameStat.rumble;
temp_r3->unk00 = fn_1_38BC();
fn_1_39E0(temp_r3->unk00, temp_r3->unk20, 0);
temp_r3->unk04 = fn_1_3B08();
fn_1_3BE0(temp_r3->unk04, temp_r3->unk20);
temp_r3->unk08 = fn_1_3C6C();
temp_r3->unk10 = fn_1_3F28();
temp_r3->unk0C = fn_1_37AC();
fn_1_3290(temp_r30, 0);
return temp_r30;
}
void fn_1_322C(omObjData *arg0) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
fn_1_3868(temp_r31->unk0C);
fn_1_398C(temp_r31->unk00);
fn_1_3B8C(temp_r31->unk04);
fn_1_3FD4(temp_r31->unk10);
fn_1_3D00(temp_r31->unk08);
HuMemDirectFree(temp_r31);
}
void fn_1_3290(omObjData *arg0, s32 arg1) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
temp_r31->unk1C = arg1;
arg0->func = lbl_1_data_108[arg1];
arg0->unk10 = 0;
arg0->unk10 = 0;
}
s32 fn_1_32D4(omObjData *arg0) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
return temp_r31->unk1C;
}
static void fn_1_32F0(omObjData *arg0) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
s32 i;
switch (arg0->unk10) {
case 0:
temp_r31->unk14[0] = fn_1_A44C(0);
temp_r31->unk14[1] = fn_1_A44C(1);
fn_1_AF0(lbl_1_bss_10, -519.62f, 135.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, -315.64f, 135.0f, 182.25f, 0x28);
fn_1_3D54(arg0);
Hu3DModelLayerSet(temp_r31->unk08->model[0], 1);
temp_r31->unk24 = 0;
arg0->unk10 = 1;
/* fallthrough */
case 1:
if (fn_1_CB8(lbl_1_bss_10) != 0) {
break;
}
if (temp_r31->unk24 == 0) {
Hu3DModelAttrReset(temp_r31->unk0C->model[0], 1);
temp_r31->unk24 = 1;
Hu3DModelHookSet(temp_r31->unk00->model[0], "target", temp_r31->unk0C->model[0]);
}
fn_1_A6EC(temp_r31->unk14[1]);
fn_1_A71C(temp_r31->unk14[1], MAKE_MESSID(47, 15));
fn_1_A6EC(temp_r31->unk14[0]);
if (temp_r31->unk20 != 0) {
fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 2));
} else {
fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 3));
}
arg0->unk10 = 2;
/* fallthrough */
case 2:
if (temp_r31->unk14[0]->unk20 == 0 && temp_r31->unk14[1]->unk20 == 0) {
if (fn_1_550(0x200) != 0) {
HuAudFXPlay(3);
arg0->unk10 = 4;
} else if (fn_1_584(8) != 0 && temp_r31->unk20 == 0) {
fn_1_39E0(temp_r31->unk00, 1, 1);
temp_r31->unk20 = 1;
temp_r31->unk28 = 0;
GWGameStat.rumble = 1;
arg0->unk10 = 3;
} else if (fn_1_584(4) != 0 && temp_r31->unk20 != 0) {
fn_1_39E0(temp_r31->unk00, 0, 1);
temp_r31->unk20 = 0;
temp_r31->unk28 = 0;
GWGameStat.rumble = 0;
HuPadRumbleAllStop();
arg0->unk10 = 3;
}
}
break;
case 3:
if (temp_r31->unk28++ >= 60) {
HuAudFXPlay(0x83C);
fn_1_3BE0(temp_r31->unk04, temp_r31->unk20);
if (temp_r31->unk20 != 0) {
HuPadRumbleSet(0, 0x3C, 0xA, 5);
Hu3DMotionTimeSet(temp_r31->unk10->model[0], 0.0f);
Hu3DModelAttrReset(temp_r31->unk10->model[0], 1);
} else {
Hu3DModelAttrSet(temp_r31->unk10->model[0], 1);
}
arg0->unk10 = 1;
}
break;
case 4:
fn_1_A704(temp_r31->unk14[1]);
fn_1_A704(temp_r31->unk14[0]);
Hu3DModelAttrSet(temp_r31->unk0C->model[0], 1);
fn_1_3E1C(arg0);
arg0->unk10 = 5;
/* fallthrough */
case 5:
if (temp_r31->unk14[1]->unk20 == 0 && temp_r31->unk14[0]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) {
for (i = 0; i < 2; i++) {
fn_1_A6AC(temp_r31->unk14[i]);
}
Hu3DModelHookReset(temp_r31->unk00->model[0]);
fn_1_AF0(lbl_1_bss_10, -519.62f, 120.0f, 300.0f, 0x28);
fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28);
fn_1_3290(arg0, 0);
}
break;
}
}
static omObjData *fn_1_37AC(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15));
Hu3DModelLayerSet(temp_r31->model[0], 3);
omSetRot(temp_r31, 0.0f, 180.0f, 0.0f);
Hu3DModelAttrSet(temp_r31->model[0], 1);
return temp_r31;
}
static void fn_1_3868(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}
static omObjData *fn_1_38BC(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002);
if (GWGameStat.rumble != 0) {
Hu3DMotionTimeSet(temp_r31->model[0], 60.0f);
} else {
Hu3DMotionTimeSet(temp_r31->model[0], 0.0f);
}
return temp_r31;
}
static void fn_1_398C(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}
static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2) {
s16 temp_r31 = arg0->model[0];
Hu3DModelAttrReset(arg0->model[0], 0x40000002);
Hu3DModelAttrReset(arg0->model[0], 0x40000001);
if (arg1 != 0) {
Hu3DMotionStartEndSet(temp_r31, 60.0f, 120.0f);
if (arg2 != 0) {
Hu3DMotionTimeSet(temp_r31, 60.0f);
} else {
Hu3DMotionTimeSet(temp_r31, 119.0f);
}
} else {
Hu3DMotionStartEndSet(temp_r31, 0.0f, 60.0f);
if (arg2 != 0) {
Hu3DMotionTimeSet(temp_r31, 0.0f);
} else {
Hu3DMotionTimeSet(temp_r31, 59.0f);
}
}
}
static omObjData *fn_1_3B08(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000001);
return temp_r31;
}
static void fn_1_3B8C(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}
static void fn_1_3BE0(omObjData *arg0, s32 arg1) {
if (arg1 != 0) {
Hu3DModelAttrReset(arg0->model[0], 0x40000002);
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
} else {
Hu3DModelAttrSet(arg0->model[0], 0x40000002);
Hu3DModelAttrReset(arg0->model[0], 0x40000001);
}
}
static omObjData *fn_1_3C6C(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10));
Hu3DModelAttrSet(temp_r31->model[0], 0x40000002);
Hu3DModelLayerSet(temp_r31->model[0], 2);
return temp_r31;
}
static void fn_1_3D00(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}
void fn_1_3D54(omObjData *arg0) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
s16 temp_r30 = temp_r31->unk08->model[0];
Hu3DMotionStartEndSet(temp_r30, 0.0f, 40.0f);
Hu3DMotionTimeSet(temp_r30, 0.0f);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001);
Hu3DModelLayerSet(temp_r31->unk08->model[0], 2);
HuAudFXPlay(0x83D);
}
void fn_1_3E1C(omObjData *arg0) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
s16 temp_r30 = temp_r31->unk08->model[0];
Hu3DMotionStartEndSet(temp_r30, 40.0f, 80.0f);
Hu3DMotionTimeSet(temp_r30, 40.0f);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002);
Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001);
HuAudFXPlay(0x83E);
}
s32 fn_1_3ED0(omObjData *arg0) {
UnkRumbleDataStruct *temp_r31 = arg0->data;
s16 temp_r30 = temp_r31->unk08->model[0];
return !Hu3DMotionEndCheck(temp_r30);
}
static omObjData *fn_1_3F28(void) {
omObjData *temp_r31;
temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL);
temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11));
if (GWGameStat.rumble != 0) {
Hu3DModelAttrReset(temp_r31->model[0], 1);
} else {
Hu3DModelAttrSet(temp_r31->model[0], 1);
}
return temp_r31;
}
static void fn_1_3FD4(omObjData *arg0) {
s32 i;
for (i = 0; i < 1; i++) {
Hu3DModelKill(arg0->model[i]);
}
}

206
src/REL/option/scene.c Executable file
View file

@ -0,0 +1,206 @@
#include "REL/option.h"
#include "REL/executor.h"
#include "game/audio.h"
#include "game/esprite.h"
#include "game/gamework_data.h"
#include "game/hsfman.h"
#include "game/memory.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/process.h"
#include "game/saveload.h"
#include "game/sprite.h"
#include "game/wipe.h"
#include "rel_sqrt_consts.h"
typedef struct {
/* 0x00 */ s16 unk00;
/* 0x02 */ char unk02[2];
/* 0x04 */ float unk04;
/* 0x08 */ float unk08;
} UnkSceneDataStruct; // Size 0xC
static void fn_1_270(void);
static void fn_1_354(s16 arg0, s32 arg1, s32 arg2);
static void fn_1_468(void);
static void fn_1_5EC(omObjData *arg0);
static void fn_1_6E8(void);
Process *lbl_1_bss_8;
static omObjData *lbl_1_bss_4;
static s32 lbl_1_bss_0;
void ModuleProlog(void) {
lbl_1_bss_8 = omInitObjMan(0x40, 0x2000);
omGameSysInit(lbl_1_bss_8);
HuWinInit(1);
lbl_1_bss_0 = GWGameStat.rumble;
lbl_1_bss_4 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, fn_1_5EC);
lbl_1_bss_4->unk10 = 0;
lbl_1_bss_28 = fn_1_2E04();
}
void fn_1_160(s16 arg0, s32 arg1, s32 arg2) {
UnkSceneDataStruct *temp_r31;
Process *temp_r30;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM);
temp_r31->unk00 = arg0;
temp_r31->unk08 = 1.0f / arg2;
if (arg1 != 0) {
temp_r31->unk08 = temp_r31->unk08;
temp_r31->unk04 = 0.0f;
} else {
temp_r31->unk08 = -temp_r31->unk08;
temp_r31->unk04 = 1.0f;
}
espDispOn(temp_r31->unk00);
espTPLvlSet(temp_r31->unk00, temp_r31->unk04);
temp_r30 = HuPrcChildCreate(fn_1_270, 0x3000, 0x1500, 0, HuPrcCurrentGet());
temp_r30->user_data = temp_r31;
}
static void fn_1_270(void) {
UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data;
while (1) {
temp_r31->unk04 += temp_r31->unk08;
if (temp_r31->unk04 > 1.0f) {
temp_r31->unk04 = 1.0f;
break;
}
if (temp_r31->unk04 < 0.0f) {
temp_r31->unk04 = 0.0f;
break;
}
espTPLvlSet(temp_r31->unk00, temp_r31->unk04);
HuPrcVSleep();
}
espTPLvlSet(temp_r31->unk00, temp_r31->unk04);
if (temp_r31->unk04 <= 0.0f) {
espDispOff(temp_r31->unk00);
}
HuMemDirectFree(temp_r31);
HuPrcEnd();
}
static void fn_1_354(s16 arg0, s32 arg1, s32 arg2) {
UnkSceneDataStruct *temp_r31;
Process *temp_r30;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM);
temp_r31->unk00 = arg0;
temp_r31->unk08 = 1.0f / arg2;
if (arg1 != 0) {
temp_r31->unk08 = temp_r31->unk08;
temp_r31->unk04 = 0.0f;
} else {
temp_r31->unk08 = -temp_r31->unk08;
temp_r31->unk04 = 1.0f;
}
Hu3DModelAttrReset(temp_r31->unk00, 1);
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04);
temp_r30 = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet());
temp_r30->user_data = temp_r31;
}
static void fn_1_468(void) {
UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data;
while (1) {
temp_r31->unk04 += temp_r31->unk08;
if (temp_r31->unk04 > 1.0f) {
temp_r31->unk04 = 1.0f;
break;
}
if (temp_r31->unk04 < 0.0f) {
temp_r31->unk04 = 0.0f;
break;
}
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04);
HuPrcVSleep();
}
Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04);
if (temp_r31->unk04 <= 0.0f) {
Hu3DModelAttrSet(temp_r31->unk00, 1);
}
HuMemDirectFree(temp_r31);
HuPrcEnd();
}
s32 fn_1_550(u16 arg0) {
u32 temp_r31 = HuPadBtnDown[0] & arg0;
return (temp_r31 != 0);
}
s32 fn_1_584(u16 arg0) {
u32 temp_r31 = HuPadDStkRep[0] & arg0;
return (temp_r31 != 0);
}
s32 fn_1_5B8(u16 arg0) {
u32 temp_r31 = HuPadDStk[0] & arg0;
return (temp_r31 != 0);
}
static void fn_1_5EC(omObjData *arg0) {
switch (arg0->unk10) {
case 0:
arg0->unk10 = 1;
/* fallthrough */
case 1:
if (omSysExitReq == 0) {
break;
}
arg0->unk10 = 2;
/* fallthrough */
case 2:
WipeCreate(2, 0, 0x3C);
HuAudFadeOut(1000);
arg0->unk10 = 3;
/* fallthrough */
case 3:
if (WipeStatGet() == 0) {
fn_1_2F4C(lbl_1_bss_28);
if (lbl_1_bss_0 != GWGameStat.rumble) {
omSysExitReq = 0;
fn_1_6E8();
}
omOvlReturnEx(1, 1);
}
break;
}
}
static void fn_1_6E8(void) {
s16 temp_r31;
if (SLSaveFlagGet() == 0) {
return;
}
Hu3DAllKill();
HuSprClose();
HuSprInit();
espInit();
HuPrcVSleep();
temp_r31 = espEntry(0x860020, 0x1388, 0);
espPosSet(temp_r31, 288.0f, 240.0f);
espAttrReset(temp_r31, 4);
Hu3DBGColorSet(0, 0, 0);
WipeCreate(1, 0, 0xA);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
SLCommonSet();
if (SLSave() == 0) {
GWSystem.save_mode = 1;
}
WipeCreate(2, 0, 0x14);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
}

1654
src/REL/option/sound.c Executable file

File diff suppressed because it is too large Load diff

126
src/REL/option/state.c Executable file
View file

@ -0,0 +1,126 @@
#include "REL/option.h"
#include "game/hsfman.h"
#include "game/memory.h"
#include "game/window.h"
#include "game/wipe.h"
#include "dolphin.h"
typedef struct {
/* 0x00 */ UnkWindowDataStruct *unk00;
/* 0x04 */ s32 unk04;
/* 0x08 */ s16 unk08;
/* 0x0A */ char unk0A[2];
} UnkStateDataStruct; // Size 0xC
typedef struct {
Vec unk00;
Vec unk0C;
GXColor unk18;
} UnkLightDataStruct; // Size 0x1C
static void fn_1_2FB0(omObjData *arg0);
omObjData *lbl_1_bss_28;
static UnkLightDataStruct lbl_1_data_A0 = {
{ 0.0f, 300.0f, 0.0f },
{ 0.0f, -300.0f, -600.0f },
{ 0xFF, 0xFF, 0xFF, 0xFF }
};
static Vec lbl_1_data_BC[3] = {
{ 0.0f, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f }
};
omObjData *fn_1_2E04(void) {
omObjData *var_r30;
UnkStateDataStruct *temp_r3;
LightData *sp8;
var_r30 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, fn_1_2FB0);
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkStateDataStruct), MEMORY_DEFAULT_NUM);
var_r30->data = temp_r3;
lbl_1_bss_10 = fn_1_7F8();
lbl_1_bss_18 = fn_1_15A4();
temp_r3->unk00 = fn_1_A44C(0);
Hu3DLighInit();
temp_r3->unk08 = Hu3DGLightCreateV(&lbl_1_data_A0.unk00, &lbl_1_data_A0.unk0C, &lbl_1_data_A0.unk18);
Hu3DGLightInfinitytSet(temp_r3->unk08);
sp8 = &Hu3DGlobalLight[temp_r3->unk08];
Hu3DShadowCreate(30.0f, 20.0f, 5000.0f);
Hu3DShadowTPLvlSet(0.45f);
Hu3DShadowPosSet(&lbl_1_data_BC[0], &lbl_1_data_BC[1], &lbl_1_data_BC[2]);
return var_r30;
}
void fn_1_2F4C(omObjData *arg0) {
UnkStateDataStruct *temp_r31 = arg0->data;
fn_1_A3C(lbl_1_bss_10);
fn_1_1798(lbl_1_bss_18);
fn_1_A6AC(temp_r31->unk00);
HuMemDirectFree(temp_r31);
}
static void fn_1_2FB0(omObjData *arg0) {
UnkStateDataStruct *temp_r31 = arg0->data;
switch (arg0->unk10) {
case 0:
arg0->unk10 = 1;
/* fallthrough */
case 1:
WipeCreate(1, -1, 0x3C);
arg0->unk10 = 2;
break;
case 2:
if (WipeStatGet() != 0 || temp_r31->unk00->unk20 != 0) {
break;
}
fn_1_1A2C(lbl_1_bss_18, 1);
arg0->unk10 = 3;
/* fallthrough */
case 3:
if (fn_1_1A70(lbl_1_bss_18) != 0) {
break;
}
arg0->unk10 = 4;
/* fallthrough */
case 4:
fn_1_A6EC(temp_r31->unk00);
fn_1_A71C(temp_r31->unk00, MAKE_MESSID(47, 167));
arg0->unk10 = 5;
/* fallthrough */
case 5:
if (temp_r31->unk00->unk20 != 0) {
break;
}
fn_1_A880(temp_r31->unk00, 1);
arg0->unk10 = 6;
/* fallthrough */
case 6:
if (temp_r31->unk00->unk20 != 0) {
break;
}
fn_1_A704(temp_r31->unk00);
if (temp_r31->unk00->unk1C == 0) {
temp_r31->unk04 = 0;
arg0->unk10 = 7;
} else {
arg0->unk10 = 2;
}
break;
case 7:
arg0->unk10 = 8;
temp_r31->unk04 = 0;
/* fallthrough */
case 8:
if (temp_r31->unk00->unk20 == 0 && temp_r31->unk04++ >= 60) {
omSysExitReq = 1;
}
break;
}
}

148
src/REL/option/window.c Executable file
View file

@ -0,0 +1,148 @@
#include "REL/option.h"
#include "game/esprite.h"
#include "game/memory.h"
#include "game/process.h"
#include "game/sprite.h"
#include "game/window.h"
static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2);
static void fn_1_A860(UnkWindowDataStruct *arg0);
static void fn_1_A8A4(void);
UnkWindowDataStruct *fn_1_A44C(s32 arg0) {
UnkWindowDataStruct *temp_r31;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM);
temp_r31->unk18 = 0;
temp_r31->unk10 = 0;
temp_r31->unk14 = 0;
temp_r31->unk20 = 0;
temp_r31->unk00 = HuPrcChildCreate(fn_1_A8A4, 0x2000, 0x2000, 0, lbl_1_bss_8);
temp_r31->unk00->user_data = temp_r31;
temp_r31->unk08 = arg0;
switch (temp_r31->unk08) {
case 0:
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1);
HuWinBGTPLvlSet(temp_r31->unk04, 0.8f);
HuWinMesSpeedSet(temp_r31->unk04, 0);
HuWinMesPalSet(temp_r31->unk04, 7, 0, 0, 0);
break;
case 1:
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0);
HuWinAttrSet(temp_r31->unk04, 0x800);
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f);
HuWinMesSpeedSet(temp_r31->unk04, 0);
break;
case 2:
temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0);
HuWinAttrSet(temp_r31->unk04, 0x800);
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f);
HuWinMesSpeedSet(temp_r31->unk04, 0);
break;
case 3:
temp_r31->unk04 = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0);
HuWinBGTPLvlSet(temp_r31->unk04, 0.0f);
HuWinMesSpeedSet(temp_r31->unk04, 0);
break;
}
HuWinDrawNoSet(temp_r31->unk04, 0x3F);
fn_1_A828(temp_r31);
HuSprExecLayerSet(0x3F, 2);
return temp_r31;
}
void fn_1_A6AC(UnkWindowDataStruct *arg0) {
HuWinExCleanup(arg0->unk04);
HuPrcKill(arg0->unk00);
HuMemDirectFree(arg0);
}
void fn_1_A6EC(UnkWindowDataStruct *arg0) {
if (arg0->unk0C == 0) {
arg0->unk20 = 1;
}
}
void fn_1_A704(UnkWindowDataStruct *arg0) {
if (arg0->unk0C != 0) {
arg0->unk20 = 2;
}
}
void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1) {
if (arg0->unk20 == 0) {
HuWinMesSet(arg0->unk04, arg1);
} else {
arg0->unk18 = arg1;
}
}
static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2) {
HuWinInsertMesSet(arg0->unk04, arg1, arg2);
}
void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2) {
HuWinPosSet(arg0->unk04, arg1, arg2);
}
void fn_1_A7F0(UnkWindowDataStruct *arg0) {
HuWinDispOn(arg0->unk04);
arg0->unk0C = 1;
}
void fn_1_A828(UnkWindowDataStruct *arg0) {
HuWinDispOff(arg0->unk04);
arg0->unk0C = 0;
}
static void fn_1_A860(UnkWindowDataStruct *arg0) {
if (arg0->unk20 == 0) {
arg0->unk20 = 3;
}
arg0->unk10 = 1;
}
void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1) {
if (arg0->unk20 == 0) {
arg0->unk20 = 4;
}
arg0->unk14 = 1;
arg0->unk1C = arg1;
}
static void fn_1_A8A4(void) {
UnkWindowDataStruct *temp_r31 = HuPrcCurrentGet()->user_data;
while (1) {
switch (temp_r31->unk20) {
case 1:
fn_1_A7F0(temp_r31);
HuWinExAnimIn(temp_r31->unk04);
break;
case 2:
HuWinExAnimOut(temp_r31->unk04);
fn_1_A828(temp_r31);
break;
case 3:
HuWinMesWait(temp_r31->unk04);
temp_r31->unk10 = 0;
break;
case 4:
temp_r31->unk1C = HuWinChoiceGet(temp_r31->unk04, temp_r31->unk1C);
temp_r31->unk14 = 0;
break;
}
if (temp_r31->unk18 != 0) {
HuWinMesSet(temp_r31->unk04, temp_r31->unk18);
temp_r31->unk18 = 0;
}
temp_r31->unk20 = 0;
if (temp_r31->unk10 != 0) {
temp_r31->unk20 = 3;
}
if (temp_r31->unk14 != 0) {
temp_r31->unk20 = 4;
}
HuPrcVSleep();
}
}

View file

@ -1,12 +1,63 @@
#include "common.h"
#include "REL/executor.h"
#include "dolphin.h"
#include "game/hsfman.h"
#include "game/gamework_data.h"
#include "game/printfunc.h"
#include "game/pad.h"
#include "rel_sqrt_consts.h"
void fn_1_0(void) {
s32 lbl_1_data_0 = 100;
s32 lbl_1_bss_0[192];
void fn_1_0(void)
{
}
//fn_1_4
// https://decomp.me/scratch/Ii0sV
void safMarioEyeDim(s16 id)
{
ModelData *model = &Hu3DData[id];
HsfData *hsf = model->hsfData;
HsfMaterial *material = hsf->material;
s16 i, j;
for(i=0; i<hsf->materialCnt; i++, material++) {
for(j=0; j<material->numAttrs; j++) {
HsfAttribute *attr = &hsf->attribute[material->attrs[j]];
if(strcmp(attr->bitmap->name, "s3c000m1_eyes") == 0 || strcmp(attr->bitmap->name, "mario_eyes") == 0) {
break;
}
}
if(j == material->numAttrs) {
material->color[0] *= 0.6f;
material->color[1] *= 0.3f;
material->color[2] *= 0.3f;
material->litColor[0] *= 0.6f;
material->litColor[1] *= 0.3f;
material->litColor[2] *= 0.3f;
}
}
}
// fn_1_288
// https://decomp.me/scratch/VQ3CT
void safSaveTest(void)
{
OSTick time_write;
OSTick time_read;
s16 character = GWPlayerCfg[0].character;
SLLoad();
time_write = time_read = 0;
while(1) {
print8(16, 420, 1.5f, "READ TIME %d", OSTicksToMilliseconds(time_read));
print8(16, 430, 1.5f, "WRITE TIME %d", OSTicksToMilliseconds(time_write));
HuPrcVSleep();
if(HuPadBtnDown[0] & PAD_BUTTON_Y) {
HuAudCharVoicePlayEntry(character, 282);
time_write = OSGetTick();
SLSave();
time_write = OSGetTick()-time_write;
}
if(HuPadBtnDown[0] & PAD_BUTTON_X) {
time_read = OSGetTick();
SLLoad();
time_read = OSGetTick()-time_read;
}
}
}

1076
src/REL/selmenuDll/main.c Normal file

File diff suppressed because it is too large Load diff

2558
src/REL/w01Dll/main.c Executable file

File diff suppressed because it is too large Load diff

1072
src/REL/w01Dll/mg_coin.c Executable file

File diff suppressed because it is too large Load diff

947
src/REL/w01Dll/mg_item.c Executable file
View file

@ -0,0 +1,947 @@
#include "REL/w01Dll.h"
#include "game/audio.h"
#include "game/data.h"
#include "game/gamework_data.h"
#include "game/hsfanim.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/minigame_seq.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/process.h"
#include "game/sprite.h"
#include "game/window.h"
#include "game/board/audio.h"
#include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/board/ui.h"
#include "game/board/window.h"
#include "dolphin.h"
#include "math.h"
static void fn_1_E100(void);
static void fn_1_E154(void);
static void fn_1_E2B8(omObjData *arg0);
static void fn_1_E44C(omObjData *arg0);
static void fn_1_E914(omObjData *arg0);
static void fn_1_ECD4(omObjData *arg0);
static void fn_1_EEA0(omObjData *arg0, u16 *arg1);
static void fn_1_EED8(omObjData *arg0);
static void fn_1_F09C(omObjData *arg0);
static void fn_1_F348(omObjData *arg0);
static void fn_1_F3F8(omObjData *arg0);
static void fn_1_F6E8(omObjData *arg0);
static void fn_1_F890(omObjData *arg0);
static void fn_1_FA1C(omObjData *arg0);
static void fn_1_FABC(omObjData *arg0);
static void fn_1_FB58(void);
static void fn_1_FC3C(omObjData *arg0);
static void fn_1_FCEC(void);
static void fn_1_FD3C(omObjData *arg0);
static void fn_1_FE44(omObjData *arg0);
static void fn_1_FED0(omObjData *arg0);
static s16 fn_1_1001C(u32 arg0);
static void fn_1_101B8(s16 arg0);
static void fn_1_10664(omObjData *arg0);
static void fn_1_10820(omObjData *arg0);
static void fn_1_10AE8(omObjData *arg0);
static float fn_1_10BB0(u32 arg0);
static void fn_1_10CF0(u32 arg0);
static float fn_1_10EB8(Vec *arg0);
static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix);
static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix);
static void *lbl_1_bss_818;
static Vec lbl_1_bss_80C;
static omObjData *lbl_1_bss_7FC[4];
static omObjData *lbl_1_bss_7F8;
static omObjData *lbl_1_bss_7F4;
static omObjData *lbl_1_bss_7F0;
static float lbl_1_bss_7EC;
static float lbl_1_bss_7E8;
static s32 lbl_1_bss_7E4;
static Vec lbl_1_bss_7D8;
static s16 lbl_1_bss_7D6;
static s16 lbl_1_bss_7D4;
static s16 lbl_1_bss_7D2;
static s16 lbl_1_bss_7D0;
static Vec lbl_1_bss_7C4;
static s32 lbl_1_bss_7C0_pad;
static s32 lbl_1_bss_7BC;
static s32 lbl_1_bss_7B8;
static s16 lbl_1_bss_7B4;
static s32 lbl_1_bss_7B0_pad;
static s32 lbl_1_bss_7AC;
static s16 lbl_1_bss_7AA;
static s16 lbl_1_bss_7A8;
static s32 lbl_1_bss_7A4;
static AnimData *lbl_1_bss_7A0;
static s32 lbl_1_data_F08[] = {
DATA_MAKE_NUM(DATADIR_BOARD, 109),
DATA_MAKE_NUM(DATADIR_BOARD, 110),
DATA_MAKE_NUM(DATADIR_BOARD, 111),
DATA_MAKE_NUM(DATADIR_BOARD, 112),
DATA_MAKE_NUM(DATADIR_BOARD, 113),
DATA_MAKE_NUM(DATADIR_BOARD, 114),
DATA_MAKE_NUM(DATADIR_BOARD, 115),
DATA_MAKE_NUM(DATADIR_BOARD, 116),
DATA_MAKE_NUM(DATADIR_BOARD, 118),
DATA_MAKE_NUM(DATADIR_BOARD, 119),
DATA_MAKE_NUM(DATADIR_BOARD, 120),
DATA_MAKE_NUM(DATADIR_BOARD, 121),
DATA_MAKE_NUM(DATADIR_BOARD, 122),
DATA_MAKE_NUM(DATADIR_BOARD, 123)
};
static s32 lbl_1_data_F40[8] = {
DATA_MAKE_NUM(DATADIR_MARIOMOT, 23),
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 23),
DATA_MAKE_NUM(DATADIR_PEACHMOT, 23),
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 23),
DATA_MAKE_NUM(DATADIR_WARIOMOT, 23),
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 23),
DATA_MAKE_NUM(DATADIR_DAISYMOT, 23),
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 23)
};
static s32 lbl_1_data_F60[8] = {
DATA_MAKE_NUM(DATADIR_MARIOMOT, 64),
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 64),
DATA_MAKE_NUM(DATADIR_PEACHMOT, 64),
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 64),
DATA_MAKE_NUM(DATADIR_WARIOMOT, 64),
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 64),
DATA_MAKE_NUM(DATADIR_DAISYMOT, 64),
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 64)
};
void fn_1_D740(s16 *arg0) {
s16 sp10[14];
s16 sp8[4];
float temp_f30;
float temp_f29;
float var_f31;
s32 var_r28;
s32 var_r30;
s32 i;
s32 j;
lbl_1_bss_818 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_W01, 28), MEMORY_DEFAULT_NUM, HEAP_DATA);
BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C);
sp8[0] = BoardModelIDGet(lbl_1_bss_6C4[19]);
BoardModelVisibilitySet(lbl_1_bss_6C4[19], 1);
for (i = 1; i < 4; i++) {
sp8[i] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 24));
}
var_r30 = 0;
for (i = 0; i < 4; i++) {
lbl_1_bss_7FC[i] = omAddObjEx(boardObjMan, 0x165, 2, 0, -1, NULL);
if (arg0[i] != -1) {
lbl_1_bss_7FC[var_r30++]->work[1] = arg0[i];
}
}
while (var_r30 != 4) {
var_r28 = 0;
for (i = 0; i < 14; i++) {
for (j = 0; j < var_r30; j++) {
if (i == lbl_1_bss_7FC[j]->work[1]) {
break;
}
}
if (j == var_r30) {
sp10[var_r28++] = i;
}
}
lbl_1_bss_7FC[var_r30++]->work[1] = sp10[rand8() % var_r28];
}
temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]);
temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
for (i = 0; i < 4; i++) {
lbl_1_bss_7FC[i]->model[0] = sp8[i];
lbl_1_bss_7FC[i]->model[1] = Hu3DModelCreateFile(lbl_1_data_F08[lbl_1_bss_7FC[i]->work[1]]);
if (lbl_1_bss_7FC[i]->work[1] == 5) {
Hu3DData[lbl_1_bss_7FC[i]->model[1]].unk_F0[1][3] = -50.0f;
}
if (lbl_1_bss_7FC[i]->work[1] == 11) {
Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], 0x40000001);
}
if (lbl_1_bss_7FC[i]->work[1] == 4) {
Hu3DMotionSpeedSet(lbl_1_bss_7FC[i]->model[1], 0.0f);
}
Hu3DModelAttrReset(sp8[i], 1);
Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], 1);
Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], 0x40000002);
omSetTra(lbl_1_bss_7FC[i], lbl_1_bss_80C.x, lbl_1_bss_80C.y + 66.0f, lbl_1_bss_80C.z);
var_f31 = 90.0f - 90.0f * i + 360.0f * (temp_f30 / temp_f29);
if (var_f31 >= 360.0f) {
var_f31 -= 360.0f;
}
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
omSetRot(lbl_1_bss_7FC[i], 0.0f, var_f31, 0.0f);
lbl_1_bss_7FC[i]->work[0] = Hu3DAnimCreate(lbl_1_bss_818, lbl_1_bss_7FC[i]->model[0], "item01");
Hu3DAnimAttrSet(lbl_1_bss_7FC[i]->work[0], 1);
lbl_1_bss_7FC[i]->work[2] = i;
}
for (i = 0; i < 4; i++) {
Hu3DAnmNoSet(lbl_1_bss_7FC[i]->work[0], lbl_1_bss_7FC[i]->work[1]);
}
}
void fn_1_DD84(void) {
s32 i;
for (i = 0; i < 4; i++) {
if (i != 0) {
Hu3DModelKill(lbl_1_bss_7FC[i]->model[0]);
} else {
BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0);
Hu3DAnimKill(lbl_1_bss_7FC[i]->work[0]);
}
Hu3DModelKill(lbl_1_bss_7FC[i]->model[1]);
omDelObjEx(boardObjMan, lbl_1_bss_7FC[i]);
}
if (lbl_1_bss_7A0) {
HuSprAnimKill(lbl_1_bss_7A0);
lbl_1_bss_7A0 = NULL;
}
}
void fn_1_DE94(void) {
s32 i;
BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C);
for (i = 0; i < 4; i++) {
lbl_1_bss_7FC[i]->func = fn_1_FED0;
}
lbl_1_bss_7F4 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_E2B8);
lbl_1_bss_7F8 = omAddObjEx(boardObjMan, 0x133, 0, 0, -1, fn_1_E44C);
lbl_1_bss_7F8->work[3] = rand8() % 200 + 10;
lbl_1_bss_7E4 = GWSystem.player_curr;
BoardPlayerPosGet(lbl_1_bss_7E4, &lbl_1_bss_7C4);
lbl_1_bss_7EC = 1.0f;
lbl_1_bss_7E8 = 1.0f;
lbl_1_bss_7AA = 0;
lbl_1_bss_7BC = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F40[GWPlayer[lbl_1_bss_7E4].character]);
lbl_1_bss_7B8 = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F60[GWPlayer[lbl_1_bss_7E4].character]);
lbl_1_bss_7A0 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0));
HuSprAnimLock(lbl_1_bss_7A0);
lbl_1_bss_7B4 = 0;
}
static void fn_1_E100(void) {
lbl_1_bss_7AA = 1;
BoardMGExit();
HuAudFXPlay(0x40F);
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004);
}
static void fn_1_E154(void) {
fn_1_DD84();
BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7BC);
BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7B8);
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
BoardMGDoneFlagSet(0);
}
static void fn_1_E2B8(omObjData *arg0) {
if (lbl_1_bss_7AA == 1 && BoardMGDoneFlagGet() == 1) {
fn_1_E154();
omDelObjEx(HuPrcCurrentGet(), arg0);
}
}
static char *lbl_1_data_F9C[] = {
"uma1", "uma2", "uma3", "uma4"
};
static void fn_1_E44C(omObjData *arg0) {
Vec sp18;
Vec spC;
float temp_f27;
float var_f29;
float temp_f28;
float var_f26;
float var_f24;
s32 i;
temp_f28 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
var_f29 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
if (var_f29 >= temp_f28) {
var_f29 -= temp_f28;
}
var_f24 = fmod(var_f29, temp_f28 / 4);
if (var_f24 >= temp_f28 / 4 - 30.0f && lbl_1_bss_7B4 == 0) {
lbl_1_bss_7B4 = 1;
lbl_1_bss_7A8 = 90;
}
if (lbl_1_bss_7B4 != 0) {
lbl_1_bss_7EC *= 0.97f;
lbl_1_bss_7A8--;
}
if (lbl_1_bss_7EC != 1.0f && lbl_1_bss_7A8 == 0) {
lbl_1_bss_7EC = 0.0f;
BoardAudSeqPause(0, 1, 1000);
BoardPlayerPosGet(lbl_1_bss_7E4, &sp18);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[0], &spC);
var_f26 = PSVECSquareDistance(&sp18, &spC);
arg0->work[2] = 0;
for (i = 1; i < 4; i++) {
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[i], &spC);
temp_f27 = PSVECSquareDistance(&sp18, &spC);
if (temp_f27 < var_f26) {
var_f26 = temp_f27;
arg0->work[2] = i;
}
}
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0->work[2]], &lbl_1_bss_7D8);
PSVECSubtract(&lbl_1_bss_7D8, &sp18, &spC);
PSVECNormalize(&spC, &spC);
arg0->trans.x = spC.x;
arg0->trans.y = spC.y;
arg0->trans.z = spC.z;
arg0->rot.x = sqrtf((lbl_1_bss_7D8.x - sp18.x) * (lbl_1_bss_7D8.x - sp18.x) + (lbl_1_bss_7D8.z - sp18.z) * (lbl_1_bss_7D8.z - sp18.z));
arg0->rot.y = 10.0f;
arg0->rot.z = sp18.y;
arg0->scale.x = 0.0f;
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, 0);
arg0->func = fn_1_E914;
}
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC);
}
static void fn_1_E914(omObjData *arg0) {
Vec spC;
s32 i;
BoardPlayerPosGet(lbl_1_bss_7E4, &spC);
spC.x += arg0->trans.x * arg0->rot.x / 32.760002f;
spC.z += arg0->trans.z * arg0->rot.x / 32.760002f;
spC.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x;
arg0->scale.x += 1.0f;
if (sqrtf((lbl_1_bss_7D8.x - spC.x) * (lbl_1_bss_7D8.x - spC.x) + (lbl_1_bss_7D8.z - spC.z) * (lbl_1_bss_7D8.z - spC.z)) < 2.0f) {
spC = lbl_1_bss_7D8;
BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10BB0(arg0->work[2]), 0.0f);
lbl_1_bss_7EC = 0.05f;
lbl_1_bss_7E8 = 0.05f;
BoardModelAttrReset(lbl_1_bss_6C4[18], 0x40000002);
BoardModelAttrSet(lbl_1_bss_6C4[18], 0x40000001);
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f);
for (i = 0; i < 4; i++) {
lbl_1_bss_7FC[i]->func = fn_1_FED0;
}
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7B8, 0.0f, 5.0f, 0x40000001);
lbl_1_bss_7D6 = MGSeqCreate(3, 0);
BoardMusStart(1, 0xE, 0x7F, 0);
arg0->func = fn_1_ECD4;
}
BoardPlayerPosSetV(lbl_1_bss_7E4, &spC);
}
static void fn_1_ECD4(omObjData *arg0) {
lbl_1_bss_7EC *= 1.05f;
lbl_1_bss_7E8 *= 1.05f;
if (lbl_1_bss_7EC > 2.0f) {
lbl_1_bss_7EC = 2.0f;
}
if (lbl_1_bss_7E8 > 4.0f) {
lbl_1_bss_7E8 = 4.0f;
}
if (MGSeqStatGet(lbl_1_bss_7D6) == 0) {
lbl_1_bss_7EC = 2.0f;
lbl_1_bss_7E8 = 4.0f;
arg0->func = fn_1_EED8;
lbl_1_bss_7D2 = 5;
lbl_1_bss_7D0 = 60;
lbl_1_bss_7D4 = MGSeqCreate(1, lbl_1_bss_7D2, 0x120, 0x40);
}
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC);
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8);
fn_1_10CF0(arg0->work[2]);
}
static void fn_1_EEA0(omObjData *arg0, u16 *arg1) {
*arg1 = 0;
if (arg0->work[3] != 0) {
arg0->work[3]--;
} else {
*arg1 |= 0x100;
}
}
static void fn_1_EED8(omObjData *arg0) {
s16 temp_r29;
u16 var_r30;
fn_1_10CF0(arg0->work[2]);
temp_r29 = GWPlayer[lbl_1_bss_7E4].port;
if ((lbl_1_bss_7D0 -= 1) == 0) {
if ((lbl_1_bss_7D2 -= 1) >= 0) {
MGSeqParamSet(lbl_1_bss_7D4, 1, lbl_1_bss_7D2);
}
lbl_1_bss_7D0 = 60;
}
if (GWPlayerCfg[lbl_1_bss_7E4].iscom == 1) {
fn_1_EEA0(arg0, &var_r30);
} else {
var_r30 = HuPadBtnDown[temp_r29];
}
if (lbl_1_bss_7D2 < 0 || (var_r30 & 0x100)) {
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 0.0f);
MGSeqParamSet(lbl_1_bss_7D4, 2, -1);
arg0->scale.y = 0.0f;
arg0->func = fn_1_F09C;
}
}
static void fn_1_F09C(omObjData *arg0) {
float temp_f31;
float var_f30;
temp_f31 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
arg0->scale.y += lbl_1_bss_7E8;
if (arg0->scale.y >= temp_f31 - 150.0f) {
lbl_1_bss_7E8 *= 0.9745f;
if (lbl_1_bss_7E8 < 0.08f) {
lbl_1_bss_7E8 = 0.08f;
}
}
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8);
if (arg0->scale.y >= temp_f31) {
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f);
var_f30 = arg0->scale.y - temp_f31 + BoardModelMotionTimeGet(lbl_1_bss_6C4[18]);
if (var_f30 > temp_f31) {
var_f30 -= temp_f31;
}
BoardModelMotionTimeSet(lbl_1_bss_6C4[18], var_f30);
arg0->work[0] = fn_1_1001C(arg0->work[2]);
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1);
BoardModelPosSet(lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->trans.x, lbl_1_bss_7FC[arg0->work[0]]->trans.y + 1.0f, lbl_1_bss_7FC[arg0->work[0]]->trans.z);
BoardModelRotSet(lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->rot.x, lbl_1_bss_7FC[arg0->work[0]]->rot.y + 1.0f, lbl_1_bss_7FC[arg0->work[0]]->rot.z);
arg0->work[1] = 60;
BoardAudSeqFadeOut(1, 100);
arg0->func = fn_1_F348;
HuAudFXPlay(0x40A);
}
}
static void fn_1_F348(omObjData *arg0) {
if ((arg0->work[1] / 4) & 1) {
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
} else {
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1);
}
if ((arg0->work[1] -= 1) == 0) {
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
fn_1_101B8(arg0->work[0]);
HuAudFXPlay(0x310);
arg0->func = fn_1_F3F8;
}
}
static void fn_1_F3F8(omObjData *arg0) {
Vec sp18;
Vec spC;
if (lbl_1_bss_7F0->work[0] != 1) {
return;
}
BoardPlayerPosGet(lbl_1_bss_7E4, &sp18);
PSVECSubtract(&lbl_1_bss_7C4, &sp18, &spC);
PSVECNormalize(&spC, &spC);
arg0->trans.x = spC.x;
arg0->trans.y = spC.y;
arg0->trans.z = spC.z;
arg0->rot.x = sqrtf((lbl_1_bss_7C4.x - sp18.x) * (lbl_1_bss_7C4.x - sp18.x) + (lbl_1_bss_7C4.z - sp18.z) * (lbl_1_bss_7C4.z - sp18.z));
arg0->scale.y = 20.0f + 40.0f * (arg0->rot.x / 445.0f);
arg0->rot.y = 0.016666668f * (arg0->scale.y / 2) * (arg0->scale.y / 2);
arg0->rot.z = sp18.y;
arg0->scale.x = 0.0f;
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, 0);
PSVECSubtract(&lbl_1_bss_7C4, &sp18, &spC);
PSVECNormalize(&spC, &spC);
BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10EB8(&spC), 0.0f);
arg0->func = fn_1_F6E8;
}
static void fn_1_F6E8(omObjData *arg0) {
Vec sp8;
BoardPlayerPosGet(lbl_1_bss_7E4, &sp8);
sp8.x += arg0->trans.x * arg0->rot.x / arg0->scale.y;
sp8.z += arg0->trans.z * arg0->rot.x / arg0->scale.y;
sp8.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x;
arg0->scale.x += 1.0f;
if (sp8.y < lbl_1_bss_80C.y || arg0->scale.x >= arg0->scale.y) {
sp8.y = lbl_1_bss_80C.y;
BoardCameraMotionStart(BoardPlayerModelGet(lbl_1_bss_7E4), NULL, 700.0f, -1.0f);
BoardPlayerMotionStart(lbl_1_bss_7E4, 2, 0x40000001);
arg0->func = fn_1_F890;
}
BoardPlayerPosSetV(lbl_1_bss_7E4, &sp8);
}
static void fn_1_F890(omObjData *arg0) {
Vec sp8;
BoardPlayerRotGet(lbl_1_bss_7E4, &sp8);
if (sp8.y == 0.0f) {
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, 0x40000001);
lbl_1_bss_7F0->work[0] = 0;
lbl_1_bss_7F0->func = fn_1_10820;
arg0->func = fn_1_FA1C;
} else if (sp8.y > 180.0f) {
if (360.0f - sp8.y < 3.0f) {
sp8.y = 0.0f;
} else {
sp8.y += 3.0f;
}
} else {
if (sp8.y < 3.0f) {
sp8.y = 0.0f;
} else {
sp8.y -= 3.0f;
}
}
BoardPlayerRotSetV(lbl_1_bss_7E4, &sp8);
}
static void fn_1_FA1C(omObjData *arg0) {
if (lbl_1_bss_7F0->work[0] == 1) {
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7BC, 0.0f, 10.0f, 0);
arg0->work[0] = 30;
lbl_1_bss_7A4 = HuAudSStreamPlay(2);
arg0->func = fn_1_FABC;
}
}
static void fn_1_FABC(omObjData *arg0) {
Process *var_r30;
if (arg0->work[0] == 0) {
if (HuAudSStreamStatGet(lbl_1_bss_7A4) == 0) {
var_r30 = HuPrcCreate(fn_1_FB58, 0x2004, 0x1000, 0);
var_r30->user_data = arg0;
BoardAudSeqPause(0, 0, 1000);
arg0->func = NULL;
}
} else {
arg0->work[0]--;
}
}
static void fn_1_FB58(void) {
omObjData *temp_r31;
BoardWinCreate(2, MAKE_MESSID(10, 6), 0);
BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_bss_7F0->work[1]), 0);
BoardWinWait();
BoardWinKill();
temp_r31 = HuPrcCurrentGet()->user_data;
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, 0);
lbl_1_bss_7F0->work[0] = 0;
HuAudFXPlay(0x30D);
HuAudFXFadeOut(lbl_1_bss_7AC, 1000);
lbl_1_bss_7F0->func = fn_1_10AE8;
temp_r31->func = fn_1_FC3C;
HuPrcKill(NULL);
while (TRUE) {
HuPrcVSleep();
}
}
static void fn_1_FC3C(omObjData *arg0) {
Process *var_r31;
if (lbl_1_bss_7F0->work[0] == 1) {
BoardPlayerItemAdd(lbl_1_bss_7E4, lbl_1_bss_7F0->work[1]);
omVibrate(lbl_1_bss_7E4, 12, 6, 6);
var_r31 = HuPrcCreate(fn_1_FCEC, 0x2004, 0x1000, 0);
var_r31->user_data = arg0;
arg0->func = NULL;
}
}
static void fn_1_FCEC(void) {
omObjData *var_r31;
BoardWinCreate(2, MAKE_MESSID(10, 7), 0);
BoardWinWait();
BoardWinKill();
var_r31 = HuPrcCurrentGet()->user_data;
var_r31->func = fn_1_FD3C;
HuPrcKill(NULL);
while (TRUE) {
HuPrcVSleep();
}
}
static void fn_1_FD3C(omObjData *arg0) {
BoardStatusShowSetAll(1);
BoardCameraTargetModelSet(lbl_1_bss_6C4[21]);
BoardCameraOffsetSet(0.0f, 0.0f, 0.0f);
BoardCameraXRotZoomSet(1200.0f, -45.0f);
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 1.0f);
Hu3DModelKill(lbl_1_bss_7F0->model[0]);
Hu3DModelKill(lbl_1_bss_7F0->model[1]);
Hu3DModelKill(lbl_1_bss_7F0->model[2]);
omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_7F0);
arg0->func = fn_1_FE44;
}
static void fn_1_FE44(omObjData *arg0) {
if (BoardStatusStopCheck(lbl_1_bss_7E4) && BoardCameraMotionIsDone()) {
lbl_1_bss_7AA = 1;
BoardMGExit();
HuAudFXPlay(0x40F);
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004);
arg0->func = NULL;
}
}
static void fn_1_FED0(omObjData *arg0) {
float temp_f30;
float var_f31;
float var_f29;
temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]);
var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
var_f31 = 90.0f - 90.0f * arg0->work[2] + 360.0f * (temp_f30 / var_f29);
if (var_f31 >= 360.0f) {
var_f31 -= 360.0f;
}
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
omSetRot(arg0, 0.0f, var_f31, 0.0f);
}
static s16 fn_1_1001C(u32 arg0) {
float var_f29;
float var_f28;
float temp_f27;
float temp_f26;
float var_f31;
float var_f30;
temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
temp_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26);
var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
var_f30 = var_f30 - (var_f29 / 4) * arg0;
if (var_f30 < 0.0f) {
var_f30 += var_f29;
}
var_f28 = 360.0f * (var_f30 / var_f29);
var_f31 = var_f28 - temp_f27;
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
var_f31 /= 90.0f;
return var_f31;
}
static void fn_1_101B8(s16 arg0) {
omObjData *var_r31;
float *var_r30;
float var_f27;
float temp_f26;
float temp_f30;
float temp_f29;
float temp_f28;
float var_f31;
var_r31 = lbl_1_bss_7F0 = omAddObjEx(boardObjMan, 0x165, 3, 0, -1, fn_1_10664);
var_r31->model[0] = lbl_1_bss_7FC[arg0]->model[1];
Hu3DModelAttrReset(var_r31->model[0], 1);
lbl_1_bss_7F0->work[1] = lbl_1_bss_7FC[arg0]->work[1];
lbl_1_bss_7F0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 3 * sizeof(float), MEMORY_DEFAULT_NUM);
var_r30 = lbl_1_bss_7F0->data;
omSetRot(var_r31, 0.0f, 0.0f, 0.0f);
omSetSca(var_r31, 0.0f, 0.0f, 0.0f);
temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
var_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26);
var_f31 = 45.0f + var_f27 + 90.0f * arg0;
if (var_f31 >= 360.0f) {
var_f31 -= 360.0f;
}
temp_f30 = lbl_1_bss_80C.x - 100.0 * cos(var_f31 * M_PI / 180.0);
temp_f28 = lbl_1_bss_80C.z - 100.0 * sin(var_f31 * M_PI / 180.0);
temp_f29 = lbl_1_bss_80C.y + 66.0f + 1.0f;
omSetTra(var_r31, temp_f30, temp_f29, temp_f28);
var_r31->work[0] = 0;
var_r30[0] = 0.1f;
var_r30[2] = 20.0f;
var_r30[1] = 0.0f;
var_r31->model[1] = Hu3DParticleCreate(lbl_1_bss_7A0, 200);
var_r31->model[2] = Hu3DParticleCreate(lbl_1_bss_7A0, 100);
Hu3DParticleHookSet(var_r31->model[1], fn_1_11064);
Hu3DParticleHookSet(var_r31->model[2], fn_1_11484);
Hu3DParticleColSet(var_r31->model[1], 0xFF, 0xFF, 0);
Hu3DParticleColSet(var_r31->model[2], 0xFF, 0xFF, 0);
Hu3DModelPosSet(var_r31->model[1], 0.0f, 0.0f, 0.0f);
Hu3DModelPosSet(var_r31->model[2], temp_f30, temp_f29, temp_f28);
Hu3DParticleBlendModeSet(var_r31->model[1], 1);
Hu3DParticleBlendModeSet(var_r31->model[2], 1);
Hu3DModelLayerSet(var_r31->model[1], 3);
Hu3DModelLayerSet(var_r31->model[2], 3);
lbl_1_bss_7AC = HuAudFXPlay(0x35F);
}
static void fn_1_10664(omObjData *arg0) {
float *temp_r31;
float var_f31;
temp_r31 = arg0->data;
var_f31 = temp_r31[0];
if (arg0->work[0] == 0) {
if (var_f31 > 1.0f) {
var_f31 = 1.0f;
} else {
temp_r31[0] += 0.025f;
}
arg0->trans.y += temp_r31[2];
temp_r31[2] -= 1.0f;
if (temp_r31[2] < 0.0f && arg0->trans.y < lbl_1_bss_80C.y + 66.0f + 1.0f + 90.0f) {
arg0->work[0] = 1;
}
omSetSca(arg0, var_f31, var_f31, var_f31);
} else {
arg0->trans.y += sin(temp_r31[1] * M_PI / 180.0);
temp_r31[1] += 4.0f;
if (temp_r31[1] >= 360.0f) {
temp_r31[1] -= 360.0f;
}
}
}
static void fn_1_10820(omObjData *arg0) {
Vec sp24;
Vec sp18;
Vec spC;
float var_f28;
float *temp_r30;
temp_r30 = arg0->data;
if (arg0->work[0] == 0) {
BoardPlayerPosGet(lbl_1_bss_7E4, &sp24);
sp18.x = arg0->trans.x;
sp18.y = 0.0f;
sp18.z = arg0->trans.z;
sp24.y = 0.0f;
PSVECSubtract(&sp24, &sp18, &spC);
PSVECNormalize(&spC, &spC);
var_f28 = sqrtf((sp24.x - sp18.x) * (sp24.x - sp18.x) + (sp24.z - sp18.z) * (sp24.z - sp18.z));
if (var_f28 < 8.0f) {
arg0->trans.x = sp24.x;
arg0->trans.z = sp24.z;
arg0->work[0] = 1;
} else {
arg0->trans.x += 8.0f * spC.x;
arg0->trans.z += 8.0f * spC.z;
}
}
arg0->trans.y += sin(temp_r30[1] * M_PI / 180.0);
temp_r30[1] += 4.0f;
if (temp_r30[1] >= 360.0f) {
temp_r30[1] -= 360.0f;
}
}
static void fn_1_10AE8(omObjData *arg0) {
float *temp_r31;
temp_r31 = arg0->data;
if (arg0->work[0] == 0) {
temp_r31[0] -= 0.016666668f;
if (temp_r31[0] <= 0.0f) {
temp_r31[0] = 0.0f;
arg0->work[0] = 1;
HuAudFXStop(lbl_1_bss_7AC);
}
arg0->trans.y -= 2.1666667f;
}
omSetSca(arg0, temp_r31[0], temp_r31[0], temp_r31[0]);
}
static float fn_1_10BB0(u32 arg0) {
float var_f30;
float temp_f29;
float var_f31;
var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
var_f30 = var_f30 - (temp_f29 / 4) * arg0;
if (var_f30 < 0.0f) {
var_f30 += temp_f29;
}
var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29);
if (var_f31 >= 360.0f) {
var_f31 -= 360.0f;
}
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
return var_f31;
}
static void fn_1_10CF0(u32 arg0) {
float var_f30;
float temp_f29;
float var_f31;
float var_f28;
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0], &lbl_1_bss_7D8);
BoardPlayerPosSetV(lbl_1_bss_7E4, &lbl_1_bss_7D8);
var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
var_f30 = var_f30 - (temp_f29 / 4) * arg0;
if (var_f30 < 0.0f) {
var_f30 += temp_f29;
}
var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29);
if (var_f31 >= 360.0f) {
var_f31 -= 360.0f;
}
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
var_f28 = var_f31;
BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, var_f28, 0.0f);
}
static float fn_1_10EB8(Vec *arg0) {
float var_f31;
if (arg0->x || arg0->z) {
if (arg0->x == 0.0f) {
if (arg0->z > 0.0f) {
return 0.0f;
} else {
return 180.0f;
}
}
if (arg0->z == 0.0f) {
if (arg0->x > 0.0f) {
return 90.0f;
} else {
return 270.0f;
}
}
var_f31 = 180.0 * (atan2(arg0->z, arg0->x) / M_PI);
if (arg0->z < 0.0f) {
var_f31 = 90.0f - var_f31;
} else {
var_f31 = 90.0f - var_f31;
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
}
return var_f31;
}
return -1.0f;
}
static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix) {
HsfanimStruct01 *var_r31;
float temp_f30;
float temp_f29;
float temp_f31;
s32 var_r28;
s32 i;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk40.a = 0;
var_r31->unk2C = 0.0f;
}
particle->unk_00 = 0;
}
temp_f31 = lbl_1_bss_7F0->scale.x;
for (i = 0; i < 30; i++) {
var_r31 = particle->unk_48;
for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) {
if (var_r31->unk2C == 0.0f) {
break;
}
}
if (var_r28 != particle->unk_30) {
temp_f30 = 0.003921569f * (frand() & 0xFF) * 360.0f;
temp_f29 = 0.003921569f * (frand() & 0xFF) * 70.0f * temp_f31;
var_r31->unk34.x = lbl_1_bss_7F0->trans.x + temp_f29 * sin(temp_f30 * M_PI / 180.0);
var_r31->unk34.z = lbl_1_bss_7F0->trans.z + temp_f29 * cos(temp_f30 * M_PI / 180.0);
var_r31->unk34.y = lbl_1_bss_7F0->trans.y + temp_f31 * (-30.0f + 0.003921569f * (frand() & 0xFF) * 60.0f);
var_r31->unk08.x = 0.5f + 0.003921569f * (frand() & 0xFF) * 3.0f;
var_r31->unk08.y = 0.3f + 0.003921569f * (frand() & 0xFF) * 2.0f;
var_r31->unk40.a = 0xB4;
var_r31->unk2C = 15.0f * temp_f31;
}
}
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C != 0.0f) {
var_r31->unk34.y -= var_r31->unk08.x;
var_r31->unk2C -= var_r31->unk08.y;
if (var_r31->unk2C <= 0.0f) {
var_r31->unk2C = 0.0f;
}
}
}
}
static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix) {
HsfanimStruct01 *var_r31;
float temp_f29;
float temp_f30;
float temp_f31;
s32 var_r28;
s32 var_r29;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
var_r31->unk40.a = 0;
var_r31->unk2C = 0.0f;
}
particle->unk_00 = 0;
}
if (particle->unk_00 == 0) {
var_r31 = particle->unk_48;
for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) {
temp_f30 = 0.003921569f * (frand() & 0xFF) * 360.0f;
temp_f31 = 0.003921569f * (frand() & 0xFF) * 50.0f;
var_r31->unk08.x = temp_f31 * cos(temp_f30 * M_PI / 180.0);
var_r31->unk08.y = 2.0f + 0.003921569f * (frand() & 0xFF) * 4.0f;
var_r31->unk08.z = temp_f31 * sin(temp_f30 * M_PI / 180.0);
temp_f29 = 60.0f + 20.0f * (frand() & 0xFF) * 0.003921569f;
temp_f31 = 4.0f + 5.0f * (frand() & 0xFF) * 0.003921569f;
var_r31->unk14.x = temp_f31 * sin(temp_f30 * M_PI / 180.0) * cos(temp_f29 * M_PI / 180.0);
var_r31->unk14.y = temp_f31 * sin(temp_f29 * M_PI / 180.0);
var_r31->unk14.z = temp_f31 * cos(temp_f30 * M_PI / 180.0) * cos(temp_f29 * M_PI / 180.0);
var_r31->unk20 = 1.0f;
var_r31->unk40.a = 0xB4;
var_r31->unk2C = 9.0f + 0.003921569f * (frand() & 0xFF) * 4.0f;
}
particle->unk_00 = 1;
}
var_r31 = particle->unk_48;
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
if (var_r31->unk2C != 0.0f) {
var_r31->unk34.x = var_r31->unk08.x + var_r31->unk14.x * var_r31->unk20;
var_r31->unk34.z = var_r31->unk08.z + var_r31->unk14.z * var_r31->unk20;
var_r31->unk34.y = var_r31->unk08.y + var_r31->unk14.y * var_r31->unk20 - 0.2f * var_r31->unk20 * var_r31->unk20;
var_r31->unk2C -= 0.25f;
var_r31->unk20 += 1.0f;
if (var_r31->unk2C <= 0.0f) {
var_r31->unk2C = 0.0f;
}
}
}
}

1148
src/REL/w03Dll/condor.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,61 +1,60 @@
#include "dolphin.h"
#include "REL/executor.h"
#include "game/process.h"
#include "game/audio.h"
#include "game/data.h"
#include "game/gamework_data.h"
#include "game/process.h"
#include "game/wipe.h"
#include "REL/w03Dll.h"
#include "game/board/lottery.h"
#include "game/board/boo_house.h"
#include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/shop.h"
#include "game/board/space.h"
#include "game/board/star.h"
#include "game/object.h"
#include "game/board/player.h"
#include "game/board/map_object.h"
#include "math.h"
#include "board_unsplit.h"
#include "game/hsfman.h"
s32 BoardModelPosSet(s16, f32, f32, f32);
s32 BoardModelMotionStart(s16, s32, u32);
void fn_8005B150(void*, void*);
void fn_1_740(void);
//function signatures
void fn_1_E0(void);
s32 fn_1_2930(s32 arg0);
void fn_1_884(void);
void fn_1_740(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);
s32 fn_8006DDE8(s16, f32);
void fn_1_10E4(omObjData* arg0);
extern Process *boardObjMan;
s32 fn_1_12C8(void);
s32 fn_1_2930(s32 arg0);
typedef void (*VoidFunc)(void);
extern const VoidFunc _ctors[];
extern const VoidFunc _dtors[];
//Map Objects
s16 lbl_1_bss_C[MAPOBJ_MAX];
f32 BoardModelMotionTimeGet(s16);
s16 BoardModelCreate(s32, s32*, 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.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)},
{{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000A)},
{{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0010)},
{{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0011)},
{{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0012)},
{{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)},
{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)},
BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = {
{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 4)},
{{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 5)},
{{-1548.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 6)},
{{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 11)},
{{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 11)},
{{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 10)},
{{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 10)},
{{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 16)},
{{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 17)},
{{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 18)},
{{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 13)},
{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 13)},
};
s16 lbl_1_data_1E0 = -1;
@ -80,12 +79,12 @@ w03StructUnk1 lbl_1_data_1EC = {
};
s32 lbl_1_data_20C[] = {
MAKE_DATA_NUM(0x0077, 0x001C),
DATA_MAKE_NUM(DATADIR_W03, 0x001C),
DATA_NUM_LISTEND
};
s32 lbl_1_data_214[] = {
MAKE_DATA_NUM(0x0002, 0x000E),
DATA_MAKE_NUM(DATADIR_BGUEST, 0x000E),
DATA_NUM_LISTEND
};
@ -108,10 +107,7 @@ 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;
@ -124,55 +120,63 @@ void BoardCreate(void) {
f32 var_f31;
s32 var_r31;
s32 var_r31_2;
w03StructUnk0* temp_r30;
BoardMapObject* temp_r30;
s32 i;
lbl_1_bss_0 = (w03State*)&GWSystem.board_data;
lbl_1_bss_0->unk3 = 0;
BoardSpaceInit(0x770000);
lbl_1_data_1E0 = BoardModelCreate(0x770001, NULL, 0);
fn_8006DDE8(lbl_1_data_1E0, -1.0f);
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);
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);
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 < 12; i++) {
for (i = 0; i < MAPOBJ_MAX; i++) {
temp_r30 = &lbl_1_data_0[i];
if (temp_r30->datanum != -1) {
if (temp_r30->data_num != -1) {
if ((i == 10) || (i == 11)) {
var_r29 = lbl_1_data_214;
} else {
var_r29 = NULL;
}
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);
lbl_1_bss_C[i]= BoardModelCreate(temp_r30->data_num, var_r29, 0);
BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->pos);
BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->rot);
BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->scale);
BoardModelVisibilitySet(lbl_1_bss_C[i], 1);
}
}
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();
BoardLightHookSet(&fn_1_884, &fn_1_8F0);
BoardSpaceWalkEventFuncSet(&fn_1_910);
BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_A74);
@ -185,6 +189,7 @@ void BoardCreate(void) {
BoardJunctionMaskSet(0x3000);
fn_1_CF4();
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;
@ -194,10 +199,12 @@ void BoardCreate(void) {
var_f31 = lbl_1_data_1EC.unk_04;
fn_1_63F4(1);
}
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);
BoardModelMotionStartEndSet(lbl_1_bss_C[2], 1, 100);
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) {
@ -206,6 +213,7 @@ void BoardCreate(void) {
}
}
}
fn_1_DEC();
}
@ -215,22 +223,27 @@ void BoardDestroy(void) {
fn_1_10B0();
fn_1_9A9C();
fn_1_7B58();
for (i = 0; i < 0x0C; i++) {
BoardModelKill(lbl_1_bss_C[i]);
lbl_1_bss_C[i] = -1;
}
if (lbl_1_data_1E6 != -1) {
BoardModelKill(lbl_1_data_1E6);
lbl_1_data_1E6 = -1;
}
if (lbl_1_data_1E4 != -1) {
BoardModelKill(lbl_1_data_1E4);
lbl_1_data_1E4 = -1;
}
if (lbl_1_data_1E0 != -1) {
BoardModelKill(lbl_1_data_1E0);
lbl_1_data_1E0 = -1;
}
if (lbl_1_data_1E2 != -1) {
BoardModelKill(lbl_1_data_1E2);
lbl_1_data_1E2 = -1;
@ -255,6 +268,7 @@ s32 fn_1_910(void) {
cur_player_index = GWSystem.player_curr;
space = GWPlayer[cur_player_index].space_curr;
temp_r3 = BoardSpaceFlagGet(0, space);
if (temp_r3 & 0xC000) {
if ((BoardPlayerSizeGet(cur_player_index) == 2) || ((u8) (( GWPlayer[cur_player_index].bowser_suit)))) {
return 0;
@ -270,18 +284,21 @@ s32 fn_1_910(void) {
return fn_1_309C();
}
if (temp_r3 & 0x200) {
if ((BoardPlayerSizeGet(cur_player_index) == 2) || ((u8) ((GWPlayer[cur_player_index].bowser_suit)) != 0)) {
return 0;
}
return fn_1_675C();
}
return 0;
}
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;
@ -316,8 +333,10 @@ void fn_1_B5C(s32 arg0) {
var_f28 = lbl_1_data_1EC.unk_04;
fn_1_63F4(1);
}
BoardModelMotionStart(lbl_1_bss_C[0], 0, 0);
BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f30);
while (1) {
temp = BoardModelMotionTimeGet(lbl_1_bss_C[0]);
if (temp >= var_f29) {
@ -325,9 +344,10 @@ void fn_1_B5C(s32 arg0) {
}
HuPrcVSleep();
}
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);
BoardModelMotionStartEndSet(lbl_1_bss_C[0], var_f31, var_f28);
}
void fn_1_CF4(void) {
@ -372,7 +392,8 @@ void fn_1_DEC(void) {
BoardCameraPosGet(&sp20);
BoardCameraDirGet(&sp14);
HuAudFXListnerSetEX(&sp20, &sp14, 4800.0f, 36000.0f, 0.0f, 1200.0f, 1200.0f);
for (i = 0; i < 4; i++) {
for (i = 0; i < ARRAY_COUNT(lbl_1_data_22C); i++) {
sp8.x = lbl_1_data_22C[i].x - 3600.0f;
sp8.y = lbl_1_data_22C[i].y;
sp8.z = lbl_1_data_22C[i].z - 3600.0f;
@ -415,6 +436,7 @@ void fn_1_10E4(omObjData* arg0) {
w03UnkStruct2* temp_r29;
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) {
@ -426,6 +448,7 @@ void fn_1_10E4(omObjData* arg0) {
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
BoardCameraDirGet(&sp8);
BoardCameraTargetGet(&sp14);
@ -438,6 +461,7 @@ void fn_1_10E4(omObjData* arg0) {
}
sp14.y += 2000.0f;
if (_CheckFlag(0x10010) == 0) {
if (lbl_1_bss_8 == 0) {
HuAudFXPauseAll(1);
@ -447,7 +471,6 @@ void fn_1_10E4(omObjData* arg0) {
HuAudFXPauseAll(0);
lbl_1_bss_8 = 0;
}
HuAudFXListnerUpdate(&sp14, &sp8);
}
f32 const padMain = 0.0f;
}

View file

@ -1,13 +1,16 @@
#include "dolphin.h"
#include "game/chrman.h"
#include "game/object.h"
#include "REL/w03Dll.h"
#include "board_unsplit.h"
#include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/board/space.h"
#include "game/minigame_seq.h"
#include "game/hsfdraw.h"
#include "game/pad.h"
extern u16 HuPadBtnDown[4];
extern s16 lbl_1_bss_C[14];
//structs
typedef struct someBits3 { //make sure this is defined correctly
/* 0x00 */ struct {
u8 unk00_bit0 : 1;
@ -61,56 +64,12 @@ void fn_1_9474(s32 arg0);
void fn_1_97F8(s32 arg0);
void fn_1_9A1C(unkTemp2* arg0);
double sin(double x);
double cos(double x);
double atan2(double y, double x);
extern s16 MGSeqCreate(s32, ...);
u8 MGSeqStatGet(s16);
float BoardModelMotionTimeGet(s16 model);
float BoardModelMotionMaxTimeGet(s16 model);
s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr);
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
//DATA
//data
s32 lbl_1_data_450 = -1;
s16 lbl_1_data_454 = -1;
s16 lbl_1_data_456 = -1;
s16 lbl_1_data_458 = -1;
s32 lbl_1_data_45C[] = {0x00770021, 0x00770022, -1};
char phei_str[] = "phei";
s32 lbl_1_data_470[] = {
0x005F0066,
0x001A0066,
0x006D0066,
0x008A0066,
0x00850066,
0x00110066,
0x000D0066,
0x00810066
};
s32 lbl_1_data_490[] = {
0x005F0067,
0x001A0067,
0x006D0067,
0x008A0067,
0x00850067,
0x00110067,
0x000D0067,
0x00810067
};
s8 lbl_1_data_4B0 = -1;
s32 lbl_1_data_4B4[] = {
0x00000440,
0x00000441,
0x00000442,
0x00000443,
0x00000444
};
s8 lbl_1_data_4C8[] = {1, 5, 10, 15, 20, 20};
//BSS
char lbl_1_bss_150[0x30];
@ -120,10 +79,9 @@ omObjData* lbl_1_bss_148;
omObjData* lbl_1_bss_144;
Process* lbl_1_bss_140;
void fn_1_7ABC(void) {
lbl_1_data_456 = BoardModelCreate(0x770020, lbl_1_data_45C, 0);
BoardModelHookSet(lbl_1_bss_C[7], phei_str, lbl_1_data_456);
BoardModelHookSet(lbl_1_bss_C[7], "phei", lbl_1_data_456);
BoardModelMotionStart(lbl_1_data_456, 2, 0x40000002);
BoardModelRotYSet(lbl_1_data_456, -45.0f);
}
@ -180,56 +138,69 @@ s32 fn_1_7D18(s32 arg0) {
f32 arctan;
BoardWinCreateChoice(2, 0x160015, 2, 0);
if (GWPlayer[arg0].com != 0) {
BoardComKeySetLeft();
}
BoardWinWait();
BoardWinKill();
if (BoardWinChoiceGet() != 0) {
BoardWinCreate(2, 0x160018, 2);
BoardWinWait();
BoardWinKill();
return 0;
}
BoardAudSeqPause(0, 1, 1000);
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[7], &sp8, &sp14, 1500.0f, -1.0f, 0x15);
BoardCameraMotionStartEx(lbl_1_bss_C[7], &sp8, &sp14, 1500.0f, -1.0f, 21);
space = GWPlayer[arg0].space_curr;
temp_r28 = BoardSpaceLinkFlagSearch(0, space, 0x02000000);
BoardPlayerPosGet(arg0, &sp2C);
BoardSpacePosGet(0, temp_r28, &sp38);
PSVECSubtract(&sp38, &sp2C, &sp20);
PSVECNormalize(&sp20, &sp20);
BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793));
BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI));
HuPrcSleep(0x1E);
model = BoardModelIDGet(lbl_1_bss_C[7]);
Hu3DModelObjPosGet(model, phei_str, &sp38);
Hu3DModelObjPosGet(model, "phei", &sp38);
if (GWPlayer[arg0].character == 5) {
var_f31 = 54.000004f;
} else {
var_f31 = 39.0f;
}
sp38.x = sp38.x + (var_f31 * sin((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0));
sp38.z = sp38.z + (var_f31 * cos((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0));
sp38.x = sp38.x + (var_f31 * sin((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0));
sp38.z = sp38.z + (var_f31 * cos((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0));
BoardPlayerPosGet(arg0, &sp2C);
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14);
while (GWPlayer[arg0].moving != 0) {
BoardModelPosGet(lbl_1_bss_C[10], &sp2C);
BoardPlayerPosGet(arg0, &sp38);
PSVECSubtract(&sp38, &sp2C, &sp20);
arctan = atan2(sp20.x, sp20.z) / 3.141592653589793 * 180.0;
arctan = atan2(sp20.x, sp20.z) / M_PI * 180.0;
BoardModelRotYSet(lbl_1_bss_C[10], arctan);
HuPrcVSleep();
}
BoardPlayerMotBlendSet(arg0, -0x2D, 7);
while (BoardPlayerMotBlendCheck(arg0) == 0) {
HuPrcVSleep();
}
return 1;
}
@ -239,17 +210,43 @@ void fn_1_8140(s32 arg0) {
fn_1_81E0(arg0);
BoardMusStart(1, 0x16, 0x7F, 0);
temp_r31 = MGSeqCreate(3, 0);
while (MGSeqStatGet(temp_r31)) {
HuPrcVSleep();
}
fn_1_9384();
fn_1_84A8(0);
while (lbl_1_bss_144) {
HuPrcVSleep();
}
fn_1_91B8();
}
s32 lbl_1_data_470[] = {
0x005F0066,
0x001A0066,
0x006D0066,
0x008A0066,
0x00850066,
0x00110066,
0x000D0066,
0x00810066
};
s32 lbl_1_data_490[] = {
0x005F0067,
0x001A0067,
0x006D0067,
0x008A0067,
0x00850067,
0x00110067,
0x000D0067,
0x00810067
};
void fn_1_81E0(s32 arg0) {
Point3d sp8;
omObjData* temp_r3;
@ -337,10 +334,12 @@ void fn_1_8530(omObjData* arg0) {
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (temp_r31->unk1 != 0) {
temp_r31->unk1--;
return;
}
switch (temp_r31->unk00_bit1) {
case 0:
fn_1_8698(arg0, temp_r31);
@ -376,13 +375,15 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) {
arg1->unk_04 = -1;
arg1->unk00_bit1 = 1;
temp = BoardModelMotionTimeGet(lbl_1_bss_C[7]);
if (temp == 0.0f) {
temp = 1.0f;
}
if (lbl_1_bss_14E > 30) {
lbl_1_bss_14E = 30;
}
//temp2 =
OSu16tof32((u16*)&lbl_1_bss_14E, &arg0->rot.x); //??
BoardModelAttrReset(lbl_1_data_456, 0x40000002);
BoardModelAttrReset(lbl_1_bss_C[7], 0x40000002);
@ -399,9 +400,10 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) {
arg0->rot.y = 16.666666f * arg0->rot.x;
arg0->scale.x = BoardModelMotionMaxTimeGet(lbl_1_bss_C[7]);
HuWinDispOff(lbl_1_data_454);
BoardCameraMotionStartEx(-1, 0, 0, 1900.0f, -1.0f, 0x15);
BoardCameraMotionStartEx(-1, NULL, NULL, 1900.0f, -1.0f, 21);
return;
}
MGSeqParamSet(arg1->unk_04, 1, arg1->unk2);
arg1->unk3 = 60;
}
@ -409,8 +411,10 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) {
var_r26 = GWPlayer[arg1->unk00_bit5].port;
var_r28 = 0;
if ((GWPlayer[arg1->unk00_bit5].com) != 0) {
temp_r27 = BoardRandMod(100);
switch (GWPlayer[arg1->unk00_bit5].diff) {
case 0:
if (temp_r27 < 12) {
@ -434,6 +438,7 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) {
} else {
var_r28 = HuPadBtnDown[var_r26] & 0x100;
}
if ((var_r28 & 0x100)) {
arg0->trans.y += 0.5f;
if (arg0->trans.y > 2.0f) {
@ -456,17 +461,30 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) {
}
}
}
if ((lbl_1_data_450 != -1) && (HuAudFXStatusGet(lbl_1_data_450) == 0)) {
lbl_1_data_450 = -1;
}
arg0->trans.x += arg0->trans.y;
if (arg0->trans.x > 3.0f) {
arg0->trans.x = 3.0f;
}
BoardPlayerMotionSpeedSet(arg1->unk00_bit5, arg0->trans.x);
BoardModelMotionSpeedSet(lbl_1_data_456, arg0->trans.x);
}
s8 lbl_1_data_4B0 = -1;
s32 lbl_1_data_4B4[] = {
0x00000440,
0x00000441,
0x00000442,
0x00000443,
0x00000444
};
void fn_1_8C08(omObjData* arg0, someBits3* arg1) {
Point3d spC;
f32 temp_f31;
@ -475,24 +493,28 @@ void fn_1_8C08(omObjData* arg0, someBits3* arg1) {
BoardModelPosGet(lbl_1_data_456, &spC);
spC.y += 1.6666666f;
if (spC.y >= (arg0->trans.z + arg0->rot.y)) {
spC.y = arg0->trans.z + arg0->rot.y;
BoardModelMotionSpeedSet(lbl_1_bss_C[10], 0.0f);
BoardPlayerMotionSpeedSet(arg1->unk00_bit5, 0.0f);
BoardModelAttrSet(lbl_1_bss_C[7], 0x40000002);
BoardModelAttrSet(lbl_1_data_456, 0x40000002);
arg1->unk00_bit1 = 2;
arg1->unk00_bit1 = 2;
arg1->unk1 = 0x3C;
arg1->unk2 = 0;
}
BoardModelPosSetV(lbl_1_data_456, &spC);
temp_f30 = arg0->scale.x * ((spC.y - arg0->trans.z) / 500.0f);
OSf32tos8(&temp_f30, &temp_r27);
temp_r27 = temp_r27 / 30;
if (lbl_1_data_4B0 != temp_r27) {
lbl_1_data_4B0 = temp_r27;
HuAudFXPlay(lbl_1_data_4B4[temp_r27]);
}
BoardModelMotionTimeSet(lbl_1_bss_C[7], temp_f30);
BoardModelMotionTimeSet(lbl_1_bss_C[10], 0.2f * temp_f30);
BoardPlayerMotionTimeSet(arg1->unk00_bit5, 2.0f * temp_f30);
@ -512,9 +534,12 @@ void fn_1_8E44(omObjData* arg0, someBits3* arg1) {
}
BoardAudSeqFadeOut(1, 0x3E8);
}
OSu8tof32(&arg1->unk2, &temp_f31);
BoardModelPosGet(lbl_1_data_456, &sp8);
sp8.y = (sp8.y + (-0.08166666666666668 * temp_f31 * temp_f31));
if (sp8.y < arg0->trans.z) {
sp8.y = arg0->trans.z;
arg1->unk00_bit1 = 3;
@ -528,6 +553,7 @@ void fn_1_8E44(omObjData* arg0, someBits3* arg1) {
HuAudFXPlay(0x449);
BoardAudSeqPause(0, 0, 0x3E8);
}
arg1->unk2 += 1;
BoardModelPosSetV(lbl_1_data_456, &sp8);
}
@ -537,27 +563,32 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) {
BoardModelRotGet(lbl_1_data_456, &sp8);
arg0->trans.y = BoardDAngleCalc(arg0->trans.y + arg0->trans.z);
if (arg0->trans.y <= 2.0f) {
if (arg0->trans.y >= -2.0) {
arg0->trans.x *= 0.5f;
if (arg0->trans.x <= 1.0f) {
arg0->trans.y = 0.0f;
BoardRotateDiceNumbers(arg1->unk00_bit5);
BoardPlayerIdleSet(arg1->unk00_bit5);
BoardModelMotionShiftSet(lbl_1_bss_C[10], 1, 0.0f, 10.0f, 0x40000001U);
arg1->unk00_bit0 = 1;
}
}
}
sp8.z = arg0->trans.x * sin((3.141592653589793 * arg0->trans.y) / 180.0);
sp8.z = arg0->trans.x * sin((M_PI * arg0->trans.y) / 180.0);
BoardModelRotSetV(lbl_1_data_456, &sp8);
}
s8 lbl_1_data_4C8[] = {1, 5, 10, 15, 20, 20};
void fn_1_91B8(void) {
s8 temp_r3;
if (lbl_1_bss_14E == 0) {
lbl_1_bss_14E = 1;
}
temp_r3 = lbl_1_bss_14E / 6;
lbl_1_bss_14C = lbl_1_data_4C8[temp_r3];
}
@ -575,14 +606,16 @@ void fn_1_9230(s32 arg0) {
BoardCameraTargetPlayerSet(arg0);
BoardCameraViewSet(1);
BoardPlayerPosLerpStart(arg0, &sp20, &sp14, 0x14);
while (GWPlayer[arg0].moving != 0) {
BoardModelPosGet(lbl_1_bss_C[10], &sp20);
BoardPlayerPosGet(arg0, &sp14);
PSVECSubtract(&sp14, &sp20, &sp8);
rotY = atan2(sp8.x, sp8.z) / 3.141592653589793 * 180.0;
rotY = atan2(sp8.x, sp8.z) / M_PI * 180.0;
BoardModelRotYSet(lbl_1_bss_C[10], rotY);
HuPrcVSleep();
}
BoardModelRotYSet(lbl_1_bss_C[10], 0.0f);
BoardCameraMotionWait();
}
@ -607,18 +640,24 @@ void fn_1_9474(s32 arg0) {
BoardWinWait();
BoardWinKill();
BoardPlayerMotBlendSet(arg0, 0, 0xF);
while (BoardPlayerMotBlendCheck(arg0) == 0) {
HuPrcVSleep();
}
fn_1_97F8(arg0);
while (lbl_1_bss_148) {
HuPrcVSleep();
}
BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, 0U);
HuPrcSleep(8);
while (BoardPlayerMotionEndCheck(arg0) == 0) {
HuPrcVSleep();
}
BoardWinCreate(2, 0x160018U, 2);
BoardWinWait();
BoardWinKill();
@ -637,6 +676,7 @@ void fn_1_95B8(omObjData* arg0) {
s32 temp;
temp_r29 = OM_GET_WORK_PTR(arg0, unkTemp2);
if ((temp_r29->unk00_bit0 != 0) || (BoardIsKill() != 0)) {
fn_1_9A1C(temp_r29);
HuMemDirectFree((void*)temp_r29->unk_0C);
@ -644,6 +684,7 @@ void fn_1_95B8(omObjData* arg0) {
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
var_r30 = temp_r29->unk_0C;
for (var_r27 = i = 0; i < 20; i++, var_r30++) {
@ -656,6 +697,7 @@ void fn_1_95B8(omObjData* arg0) {
temp_r29->unk00_bit0 = 1;
return;
}
var_r25 = 0;
for (i = 0; i < 20; i++) {
var_r30 = &temp_r29->unk_0C[i];
@ -670,7 +712,7 @@ void fn_1_95B8(omObjData* arg0) {
var_r30->unk8.y += -0.08166667f * temp_f31 * temp_f31 * 0.75f;
if (var_r30->unk8.y < temp_r29->unk8) {
var_r30->unk8.y = temp_r29->unk8;
CharModelCreateCoinParticle(1, &var_r30->unk8);
CharModelCoinEffectCreate(1, &var_r30->unk8);
BoardModelVisibilitySet(var_r30->unk_02, 0);
HuAudFXPlay(7);
BoardPlayerCoinsAdd(temp_r29->unk4, 1);
@ -703,6 +745,7 @@ void fn_1_97F8(s32 arg0) {
BoardPlayerPosGet(arg0, &sp8);
temp_r30->unk8 = (80.0f + sp8.y);
memset(temp_r30->unk_0C, 0, 0x190);
for (i = 0; i < lbl_1_bss_14C; i++) {
if (i == 0) {
var_f31 = 0.0f;
@ -711,8 +754,8 @@ void fn_1_97F8(s32 arg0) {
}
temp_r31 = &temp_r30->unk_0C[i];
temp_r31->unk0 = 1;
temp_r31->unk8.x = sp8.x + (50.0f * sin((3.141592653589793 * var_f31) / 180.0));
temp_r31->unk8.z = sp8.z + (50.0f * cos((3.141592653589793 * var_f31) / 180.0));
temp_r31->unk8.x = sp8.x + (50.0f * sin((M_PI * var_f31) / 180.0));
temp_r31->unk8.z = sp8.z + (50.0f * cos((M_PI * var_f31) / 180.0));
temp_r31->unk8.y = 600.0f + sp8.y + (500.0f * BoardRandFloat());
temp_r31->unk1 = 0;
temp_r31->unk4 = BoardRandFloat() * 360.0f;
@ -729,5 +772,3 @@ void fn_1_9A1C(unkTemp2* arg0) {
BoardModelKill(temp->unk_02);
}
}
char mg_pad[] = "\0\0\0\0\0\0";

View file

@ -4,20 +4,20 @@
#include "game/data.h"
#include "game/gamework_data.h"
#include "REL/w03Dll.h"
#include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/space.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/sprite.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])))
#include "game/minigame_seq.h"
#include "game/hsfdraw.h"
#include "game/hsfmotion.h"
#include "game/pad.h"
typedef struct someBits {
/* 0x00 */ struct {
@ -53,36 +53,18 @@ typedef struct w03UnkMG {
/* 0x10 */ s16 unk_10;
/* 0x12 */ s16 unk_12;
/* 0x14 */ s16 unk_14;
/* 0x16 */ s16 unk_16;
/* 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 MGSeqStatGet(s16);
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_BE30(ModelData *model, ParticleData *particle, Mtx matrix);
void fn_1_BDAC(void);
void fn_1_BC7C(s16 arg0);
void fn_1_BBF8(void);
@ -113,7 +95,7 @@ s32 fn_1_9CF4(s32 arg0);
void fn_1_9F78(void);
void fn_1_9FE4(void);
//DATA
//data
s16 lbl_1_data_4D8 = -1;
s16 lbl_1_data_4DA = -1;
s16 lbl_1_data_4DC = -1;
@ -121,29 +103,25 @@ 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
"item", "item1", "item2"
};
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),
DATA_MAKE_NUM(DATADIR_BOARD, 0x6D),
DATA_MAKE_NUM(DATADIR_BOARD, 0x6E),
DATA_MAKE_NUM(DATADIR_BOARD, 0x6F),
DATA_MAKE_NUM(DATADIR_BOARD, 0x70),
DATA_MAKE_NUM(DATADIR_BOARD, 0x71),
DATA_MAKE_NUM(DATADIR_BOARD, 0x72),
DATA_MAKE_NUM(DATADIR_BOARD, 0x73),
DATA_MAKE_NUM(DATADIR_BOARD, 0x74),
DATA_MAKE_NUM(DATADIR_BOARD, 0x76),
DATA_MAKE_NUM(DATADIR_BOARD, 0x77),
DATA_MAKE_NUM(DATADIR_BOARD, 0x78),
DATA_MAKE_NUM(DATADIR_BOARD, 0x79),
DATA_MAKE_NUM(DATADIR_BOARD, 0x7A),
DATA_MAKE_NUM(DATADIR_BOARD, 0x7B),
};
//BSS
@ -166,37 +144,46 @@ 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;
lbl_1_bss_180 = 0;
}
void fn_1_9C8C(void) {
@ -204,10 +191,12 @@ void fn_1_9C8C(void) {
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();
}
@ -226,37 +215,46 @@ s32 fn_1_9CF4(s32 arg0) {
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);
BoardCameraMotionStartEx(lbl_1_bss_C[8], &sp8, &sp14, 1500.0f, -1.0f, 21);
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)));
BoardPlayerRotYSet(arg0, (f32) (180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)));
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14);
while (GWPlayer[arg0].moving != 0) {
HuPrcVSleep();
}
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
HuPrcSleep(0x3C);
fn_1_B0A4(arg0);
fn_1_9F78();
@ -284,26 +282,31 @@ void fn_1_9FE4(void) {
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);
temp_f30 = (atan2(spC.z, spC.x) / M_PI * 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);
@ -311,23 +314,28 @@ void fn_1_9FE4(void) {
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);
}
@ -338,34 +346,44 @@ void fn_1_A44C(s32 arg0) {
BoardMusStart(1, 0x17, 0x7F, 0);
temp_r30 = MGSeqCreate(3, 0);
while (MGSeqStatGet(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);
BoardAudSeqPause(0, 0, 1000);
while (lbl_1_bss_188) {
HuPrcVSleep();
}
HuPrcSleep(0x1E);
BoardWinCreate(2, 0x16001D, 2);
BoardWinWait();
@ -382,7 +400,7 @@ void fn_1_A5E0(s32 arg0) {
BoardSpacePosGet(0, spaceCur, &sp8);
BoardCameraTargetPlayerSet(arg0);
BoardCameraViewSet(1);
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14);
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 20);
while (GWPlayer[arg0].moving != 0) {
HuPrcVSleep();
}
@ -400,7 +418,7 @@ void fn_1_A6B0(void) {
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);
HuWinMesSet(lbl_1_data_4D8, 0x16001F);
}
void fn_1_A7A0(s32 arg0) {
@ -429,12 +447,15 @@ void fn_1_A8AC(s32 arg0) {
BoardModelPosGet(lbl_1_bss_C[9], &sp8);
BoardPlayerPosGet(arg0, &sp14);
sp8.y = sp14.y;
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14);
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 20);
while (GWPlayer[arg0].moving != 0) {
HuPrcVSleep();
}
playerYRot = BoardPlayerRotYGet(arg0) + 180.0f;
BoardPlayerMotBlendSet(arg0, playerYRot, 0xF);
BoardPlayerMotBlendSet(arg0, playerYRot, 15);
while (BoardPlayerMotBlendCheck(arg0) == 0) {
HuPrcVSleep();
}
@ -455,6 +476,7 @@ void fn_1_A994(omObjData* arg0) {
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (temp_r31->unk00_bit6 == 0) {
if (temp_r31->unk2 != 0) {
temp_r31->unk2--;
@ -468,6 +490,7 @@ void fn_1_A994(omObjData* arg0) {
temp_r31->unk2 = 0x3CU;
}
}
switch (temp_r31->unk00_bit1) {
case 1:
fn_1_AB18(arg0, temp_r31);
@ -532,9 +555,10 @@ void fn_1_ACD8(s32 arg0) {
temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
temp_r31->unk00_bit1 = arg0;
switch (arg0) {
case 0:
BoardRotateDiceNumbers(temp_r31->unk00_bit4);
BoardPlayerIdleSet(temp_r31->unk00_bit4);
return;
case 2:
temp_r31->unk00_bit6 = 1;
@ -568,6 +592,7 @@ s32 fn_1_AE4C(s32 arg0, s8* arg1) {
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;
@ -583,6 +608,7 @@ s32 fn_1_AE4C(s32 arg0, s8* arg1) {
} else {
var_r31 = 0;
}
return var_r31;
}
@ -594,6 +620,7 @@ u32 fn_1_AF24(s32 arg0) {
s8 temp_r0_2;
spC = 0;
switch (GWPlayer[arg0].diff) {
case 3:
var_r30 = 0;
@ -652,8 +679,8 @@ void fn_1_B0A4(s32 arg0) {
temp_r30->unk00_bit1 = 0;
temp_r30->unk00_bit4 = arg0;
for (i = 0; i < 3;) {
spC[i] = BoardRandMod(14);
for (i = 0; i < ARRAY_COUNT(spC);) {
spC[i] = BoardRandMod(14);
if ((spC[i] != 10) && (spC[i] != 13)) {
for (j = 0; j < i; j++) {
if (spC[i] == spC[j]) {
@ -671,19 +698,22 @@ void fn_1_B0A4(s32 arg0) {
fn_1_BBF8();
for (i = 0; i < 3; i++) {
for (i = 0; i < ARRAY_COUNT(spC); 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) {
if (temp_r29 == 11) {
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);
@ -696,6 +726,7 @@ void fn_1_B350(omObjData* arg0) {
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++) {
@ -794,7 +825,7 @@ void fn_1_B748(omObjData* arg0, someBits2* arg1) {
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);
sp14.x = sp14.y = sp14.z = cos(M_PI * temp_f0 / 180.0);
BoardModelScaleSetV(temp_r29, &sp14);
arg1->unk1 += 4;
return;
@ -817,6 +848,7 @@ void fn_1_B8E8(s32 arg0) {
temp_r31 = (someBits2*)&lbl_1_bss_184->work[0];
temp_r31->unk00_bit1 = arg0;
switch (arg0) {
case 1:
temp_f31 = 0.31666666f;
@ -855,7 +887,7 @@ 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++) {
for (i = 0; i < ARRAY_COUNT(bits->unk3); i++) {
arg0[i] = bits->unk3[i];
}
}
@ -876,7 +908,7 @@ void fn_1_BBF8(void) {
void fn_1_BC7C(s16 arg0) {
ParticleData* particle;
lbl_1_bss_190 = HuSprAnimRead(HuDataSelHeapReadNum(0x120000, 0x10000000, 2));
lbl_1_bss_190 = HuSprAnimReadFile(0x120000);
HuSprAnimLock(lbl_1_bss_190);
lbl_1_data_4E4 = Hu3DParticleCreate(lbl_1_bss_190, 100);
Hu3DParticleHookSet(lbl_1_data_4E4, fn_1_BE30);
@ -899,40 +931,39 @@ void fn_1_BDAC(void) {
}
}
void fn_1_BE30(s32 arg0, ParticleData* arg1) {
void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) {
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++) {
if (particle->unk_34 == 0U) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk40.a = 0;
var_r31->unk2C = 0.0f;
}
arg1->unk_00 = 0;
particle->unk_00 = 0;
}
BoardModelScaleGet(arg1->unk_02, &sp8);
BoardModelScaleGet(particle->unk_02, &sp8);
temp_f31 = sp8.x;
BoardModelPosGet(arg1->unk_02, &sp8);
BoardModelPosGet(particle->unk_02, &sp8);
for (i = 0; i < 0x16; i++) {
var_r31 = arg1->unk_48;
for (j = 0; j < arg1->unk_30; j++, var_r31++) {
var_r31 = particle->unk_48;
for (j = 0; j < particle->unk_30; j++, var_r31++) {
if (0.0f == var_r31->unk2C) {
break;
}
}
if (j != arg1->unk_30) {
if (j != particle->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.x = (sp8.x + (temp_f29 * sin((M_PI * temp_f30) / 180.0)));
var_r31->unk34.z = (sp8.z + (temp_f29 * cos((M_PI * 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))));
@ -940,9 +971,10 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) {
var_r31->unk2C = (15.0f * temp_f31);
}
}
var_r31 = arg1->unk_48;
var_r31 = particle->unk_48;
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
for (i = 0; i < particle->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);

View file

@ -1,26 +1,12 @@
#include "dolphin.h"
#include "game/object.h"
#include "REL/w03Dll.h"
#include "board_unsplit.h"
#include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/hsfdraw.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);
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);
#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0])))
extern s16 lbl_1_bss_C[14];
extern s16 boardPlayerMdl[4];
//BSS
char lbl_1_bss_130[8];
omObjData* lbl_1_bss_12C;
s16 lbl_1_bss_128;
@ -46,7 +32,7 @@ typedef struct unkWorkStruct {
f32 unk_04;
} unkWorkStruct;
//DATA
//data
s32 lbl_1_data_368[] = {
0x00000105, 0x00000145, 0x00000185,
0x000001C5, 0x00000205, 0x00000245,
@ -63,9 +49,91 @@ s32 lbl_1_data_390[] = {
-1
};
char itemhook_RString[] = "itemhook_R";
char hei01String[] = "hei01";
char ikadaString[] = "ikada";
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_R", lbl_1_data_38C);
BoardModelHookSet(lbl_1_data_388, "hei01", lbl_1_data_38A);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), "ikada", &sp14);
BoardSpaceFlagPosGet(0, 0x200, &sp8);
sp14.x = sp8.x + (400.0 * sin(-(M_PI / 2)));
sp14.z = sp8.z + (400.0 * cos(-(M_PI / 2)));
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]), "ikada", &sp14);
BoardSpaceFlagPosGet(0, 0x200, &sp8);
sp14.x = sp8.x + (400.0 * sin(-(M_PI / 2)));
sp14.z = sp8.z + (400.0 * cos(-(M_PI / 2)));
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 (lbl_1_bss_120 != 0) {
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;
}
typedef struct unkPos {
s32 x;
@ -82,87 +150,6 @@ unkPos lbl_1_data_3B8[6] = {
{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;
@ -173,23 +160,26 @@ s32 fn_1_6898(s32 arg0) {
s32 i, j;
s32 temp, temp2;
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
BoardCameraViewSet(2);
BoardCameraMotionWait();
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), hei01String, &sp20);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "hei01", &sp20);
BoardPlayerPosGet(arg0, &sp14);
PSVECSubtract(&sp20, &sp14, &sp8);
temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / 3.141592653589793);
temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / M_PI);
BoardCameraTargetModelSet(lbl_1_data_388);
BoardPlayerMotBlendSet(arg0, temp_f31, 0xF);
BoardPlayerMotBlendSet(arg0, temp_f31, 15);
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();
@ -197,7 +187,7 @@ s32 fn_1_6898(s32 arg0) {
return 0;
}
for (var_r27 = i = 0; i < 6; i++) {
for (var_r27 = i = 0; i < ARRAY_COUNT(lbl_1_data_3B8); i++) {
temp = lbl_1_data_3B8[i].x;
temp2 = lbl_1_data_3B8[i].y;
if (temp_r3 >= temp) {
@ -207,17 +197,22 @@ s32 fn_1_6898(s32 arg0) {
}
}
}
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;
@ -232,11 +227,13 @@ s32 fn_1_6898(s32 arg0) {
BoardViewMapExec(arg0);
}
}
for (i = 0; i < var_r27; i++) {
BoardPlayerCoinsAdd(arg0, -1);
HuAudFXPlay(0xE);
HuPrcSleep(6);
}
HuAudFXPlay(0xF);
BoardWinCreate(2, 0x0016000C, 2);
BoardWinWait();
@ -244,9 +241,7 @@ s32 fn_1_6898(s32 arg0) {
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;
@ -262,17 +257,20 @@ void fn_1_6B98(s32 arg0) {
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.x = sp30.x + (400.0 * sin(M_PI / 2));
sp18.z = sp30.z + (400.0 * cos(M_PI / 2));
sp18.y = sp24.y;
PSVECSubtract(&sp18, &sp24, &spC);
spC.x = spC.x / 120.0f;
@ -281,17 +279,21 @@ void fn_1_6B98(s32 arg0) {
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();
}
@ -301,18 +303,21 @@ void fn_1_6B98(s32 arg0) {
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;
// extern w03State* lbl_1_bss_0;
void fn_1_6F9C(s32 arg0) {
Vec sp20;
@ -328,9 +333,11 @@ void fn_1_6F9C(s32 arg0) {
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;
@ -339,16 +346,18 @@ void fn_1_6F9C(s32 arg0) {
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);
BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0);
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);
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0);
var_r30 = 1;
}
}
@ -356,14 +365,16 @@ void fn_1_6F9C(s32 arg0) {
HuPrcVSleep();
}
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U);
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0);
HuPrcSleep(10);
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(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;
}
@ -390,7 +401,7 @@ void fn_1_735C(s32 arg0) {
sp8.y = 0.0f;
HuAudFXPlay(lbl_1_data_368[GWPlayer[arg0].character]);
BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0U);
BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0);
if (lbl_1_bss_0->unk0 != 0) {
var_f30 = 0.25f;
} else {
@ -403,7 +414,7 @@ void fn_1_735C(s32 arg0) {
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);
BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0);
var_r30 = 1;
}
}
@ -413,11 +424,13 @@ void fn_1_735C(s32 arg0) {
BoardPlayerPosSetV(arg0, &sp20);
HuPrcSleep(0xA);
BoardPlayerMotBlendSet(arg0, 0, 0xF);
BoardPlayerMotBlendSet(arg0, 0, 15);
while (BoardPlayerMotBlendCheck(arg0) == 0) {
HuPrcVSleep();
}
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
GWPlayer[arg0].space_curr = temp_r29;
GWPlayer[arg0].space_prev = -1;
BoardPlayerPostTurnHookSet(arg0, fn_1_6698);
@ -433,18 +446,20 @@ void fn_1_767C(omObjData* arg0) {
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))));
sp8.y = (f32) ((f64) sp8.y + (0.25 * (2.0 * sin((M_PI * (f64) temp_r31->unk_04) / 180.0))));
BoardModelPosSetV(lbl_1_data_388, &sp8);
}
}
@ -454,14 +469,15 @@ void fn_1_77E4(s32 arg0) {
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";

View file

@ -1,8 +1,8 @@
#include "dolphin.h"
#include "game/object.h"
#include "REL/w03Dll.h"
#include "board_unsplit.h"
#include "game/board/main.h"
#include "game/board/model.h"
typedef struct w03UnkWorkStruct {
s16 unk_00[5];
@ -16,17 +16,10 @@ 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
"kemuri1", "kemuri2", "kemuri3",
"kemuri4", "kemuri5"
};
void fn_1_785C(void) {
@ -37,16 +30,20 @@ void fn_1_785C(void) {
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++) {
for (i = 0; i < ARRAY_COUNT(temp_r31->unk_00); 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);
@ -70,14 +67,14 @@ void fn_1_79E0(omObjData* arg0) {
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (lbl_1_bss_0->unk3 != 0) {
var_r29 = 0;
} else {
var_r29 = 1;
}
for (i = 0; i < 5; i++) {
for (i = 0; i < ARRAY_COUNT(temp_r30->unk_00); i++) {
BoardModelVisibilitySet(temp_r30->unk_00[i], var_r29);
}
}
char pad[4] = "\0\0\0\0";

View file

@ -5,9 +5,10 @@
#include "game/gamework_data.h"
#include "REL/w03Dll.h"
#include "game/audio.h"
#include "game/board/space.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "board_unsplit.h"
#include "game/board/space.h"
#include "game/board/ui.h"
#include "game/hsfman.h"
#include "game/board/main.h"
#include "game/objsub.h"
@ -25,60 +26,17 @@ 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);
f32 BoardPlayerRotYGet(s32);
void BoardConfettiCreate(Point3d*, s16, f32);
double atan2(double y, double x);
f32 BoardModelMotionTimeGet(s16);
//DATA
//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;
@ -102,6 +60,7 @@ void fn_1_12C8(void) {
while (lbl_1_bss_28) {
HuPrcVSleep();
}
BoardDiceDigit2DShowSet(1);
}
@ -112,6 +71,7 @@ void fn_1_1358(void) {
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];
@ -119,6 +79,7 @@ void fn_1_1358(void) {
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);
@ -126,7 +87,7 @@ void fn_1_1358(void) {
fn_1_20E0(cur_player_index);
}
if (lbl_1_bss_2C) {
sprintf(lbl_1_bss_44, lbl_1_data_28C, lbl_1_bss_2C);
sprintf(lbl_1_bss_44, "%d", lbl_1_bss_2C);
BoardWinCreate(0, 0x160006, -1);
BoardWinInsertMesSet((s32)lbl_1_bss_44, 0);
BoardWinWait();
@ -138,6 +99,7 @@ void fn_1_1358(void) {
fn_1_26E0(cur_player_index);
BoardStatusShowSetAll(1);
}
BoardPlayerPostTurnHookSet(cur_player_index, &fn_1_15E8);
BoardWinKill();
HuPrcEnd();
@ -145,24 +107,29 @@ void fn_1_1358(void) {
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;
}
@ -175,7 +142,7 @@ s32 fn_1_1650(s32 arg0) {
f32 temp;
s32 temp2;
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
if (lbl_1_bss_0->unk2) {
BoardWinCreate(0, 0x160000, -1);
@ -188,7 +155,7 @@ s32 fn_1_1650(s32 arg0) {
BoardSpacePosGet(0, temp2, &sp38);
BoardPlayerPosGet(arg0, &sp2C);
PSVECSubtract(&sp38, &sp2C, &sp20);
temp = (atan2(-sp20.x, -sp20.z) / 3.141592653589793) * 180.0f;
temp = (atan2(-sp20.x, -sp20.z) / M_PI) * 180.0f;
BoardPlayerRotYSet(arg0, temp);
sp14.x = 0.0f;
sp14.y = 100.0f;
@ -196,7 +163,7 @@ s32 fn_1_1650(s32 arg0) {
sp8.x = -20.0f;
sp8.y = 0.0f;
sp8.z = 0.0f;
BoardCameraMotionStartEx(lbl_1_bss_6C, &sp8, &sp14, 1360.0f, -1.0f, 0x15);
BoardCameraMotionStartEx(lbl_1_bss_6C, &sp8, &sp14, 1360.0f, -1.0f, 21);
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x28);
while (GWPlayer[arg0].moving) {
@ -210,11 +177,12 @@ s32 fn_1_1650(s32 arg0) {
HuPrcVSleep();
}
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
BoardWinCreate(2, 0x160001, 2);
BoardWinWait();
BoardWinCreateChoice(0, 0x160002, -1, 0);
BoardWinAttrSet(0x10);
if (GWPlayer[arg0].com) {
if (BoardRandMod(0x64) > 0x32U) {
BoardComKeySetLeft();
@ -222,6 +190,7 @@ s32 fn_1_1650(s32 arg0) {
BoardComKeySetRight();
}
}
BoardWinWait();
lbl_1_bss_6F = BoardWinChoiceGet();
BoardWinKill();
@ -245,6 +214,40 @@ s32 fn_1_1650(s32 arg0) {
return 1;
}
s32 lbl_1_data_290[] = {
DATA_MAKE_NUM(DATADIR_MARIOMOT, 98),
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 98),
DATA_MAKE_NUM(DATADIR_PEACHMOT, 98),
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 98),
DATA_MAKE_NUM(DATADIR_WARIOMOT, 98),
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 98),
DATA_MAKE_NUM(DATADIR_DAISYMOT, 98),
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 98)
};
s32 lbl_1_data_2B0[] = {
DATA_MAKE_NUM(DATADIR_MARIOMOT, 51),
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 51),
DATA_MAKE_NUM(DATADIR_PEACHMOT, 51),
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 51),
DATA_MAKE_NUM(DATADIR_WARIOMOT, 51),
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 51),
DATA_MAKE_NUM(DATADIR_DAISYMOT, 51),
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 51)
};
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
};
void fn_1_19DC(s32 arg0, s32 arg1) {
s32 temp_r30;
s32 temp_r5;
@ -253,6 +256,7 @@ void fn_1_19DC(s32 arg0, s32 arg1) {
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;
@ -263,12 +267,15 @@ void fn_1_19DC(s32 arg0, s32 arg1) {
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);
BoardPlayerMotBlendSet(arg0, temp, 15);
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);
@ -278,7 +285,8 @@ void fn_1_19DC(s32 arg0, s32 arg1) {
HuPrcVSleep();
}
HuPrcSleep(0x3C);
HuPrcSleep(60);
if (arg1 != 0) {
BoardPlayerMotionShiftSet(arg0, lbl_1_bss_68, 0.0f, 8.0f, 0);
@ -287,16 +295,20 @@ void fn_1_19DC(s32 arg0, s32 arg1) {
HuPrcVSleep();
}
}
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
HuPrcSleep(0x14);
temp = (180.0f + BoardPlayerRotYGet(arg0));
BoardPlayerMotBlendSet(arg0, temp, 0xF);
BoardPlayerMotBlendSet(arg0, temp, 15);
while (BoardPlayerMotBlendCheck(arg0) == 0) {
HuPrcVSleep();
}
BoardAudSeqPause(0, 1, 0x3E8);
BoardAudSeqPause(0, 1, 1000);
BoardPlayerMotionShiftSet(arg0, lbl_1_data_280, 0.0f, 10.0f, 0);
HuPrcSleep(0xB);
HuPrcSleep(11);
while (BoardPlayerMotionEndCheck(arg0) == 0) {
HuPrcVSleep();
}
@ -329,16 +341,20 @@ s32 fn_1_1D1C(void) {
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;
@ -347,6 +363,7 @@ s32 fn_1_1D1C(void) {
} else {
lbl_1_bss_2C = 1;
}
return 0;
}
@ -379,11 +396,13 @@ void fn_1_1ED4(s32 arg0) {
while (BoardFilterFadePauseCheck() == 0) {
HuPrcVSleep();
}
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
while (BoardMusStatusGet(1) != 0) {
HuPrcVSleep();
}
BoardAudSeqPause(0, 0, 1000);
BoardWinCreate(2, 0x160004, 2);
BoardWinWait();
@ -407,10 +426,12 @@ void fn_1_20E0(s32 arg0) {
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);
@ -432,26 +453,30 @@ void fn_1_20E0(s32 arg0) {
if (lbl_1_bss_30 > 128.0f) {
lbl_1_bss_30 = 128.0f;
}
HuPrcSleep(0x28);
HuPrcSleep(40);
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);
BoardCameraMotionStartEx(-1, NULL, NULL, 680.0f, -1.0f, 13);
BoardCameraMotionWait();
BoardCameraMotionStartEx(-1, NULL, 0, 1360.0f, -1.0f, 0xD);
BoardCameraMotionStartEx(-1, NULL, NULL, 1360.0f, -1.0f, 13);
BoardCameraMotionWait();
}
BoardRotateDiceNumbers(arg0);
BoardPlayerIdleSet(arg0);
while (BoardMusStatusGet(1) != 0) {
HuPrcVSleep();
}
@ -471,7 +496,7 @@ void fn_1_20E0(s32 arg0) {
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);
BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp18, &sp24, 3000.0f, -1.0f, 60);
BoardCameraMotionWait();
omVibrate(arg0, 0x1E, 6, 6);
HuPrcSleep(0x1E);
@ -482,6 +507,7 @@ void fn_1_20E0(s32 arg0) {
}
BoardCameraQuakeReset();
if (lbl_1_data_288 != 0) {
HuAudFXStop(lbl_1_data_288);
lbl_1_data_288 = -1;
@ -498,7 +524,7 @@ void fn_1_20E0(s32 arg0) {
sp18.x = -20.0f;
sp18.y = 0.0f;
sp18.z = 0.0f;
BoardCameraMotionStartEx(lbl_1_bss_6C, &sp18, &sp24, 1360.0f, -1.0f, 0x3C);
BoardCameraMotionStartEx(lbl_1_bss_6C, &sp18, &sp24, 1360.0f, -1.0f, 60);
BoardCameraMotionWait();
HuPrcSleep(0x3C);
}
@ -513,17 +539,19 @@ void fn_1_26E0(s32 arg0) {
BoardPlayerPosGet(arg0, &sp14);
PSVECSubtract(&sp20, &sp14, &sp8);
PSVECNormalize(&sp8, &sp8);
temp = (180.0f * (atan2(-sp8.x, -sp8.z) / 3.141592653589793));
temp = (180.0f * (atan2(-sp8.x, -sp8.z) / M_PI));
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);
BoardPlayerIdleSet(arg0);
}
void fn_1_2818(void) {
@ -532,8 +560,9 @@ void fn_1_2818(void) {
s16 j;
s16 sp8[3] = {0x0002, 0x003E, 0x007A};
temp_r29 = (4 - lbl_1_bss_2C) * 0x3C;
temp_r29 = (4 - lbl_1_bss_2C) * 60;
BoardModelMotionStart(lbl_1_bss_C[1], 0, 0);
while (1) {
temp_r30 = BoardModelMotionTimeGet(lbl_1_bss_C[1]);
if (temp_r29 > temp_r30) {
@ -554,6 +583,7 @@ void fn_1_2818(void) {
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;
@ -564,7 +594,8 @@ s32 fn_1_2930(s32 arg0) {
fn_1_CF4();
return 1;
}
sprintf(lbl_1_bss_38, lbl_1_data_28C, lbl_1_bss_0->unk0);
sprintf(lbl_1_bss_38, "%d", lbl_1_bss_0->unk0);
BoardWinCreate(0, 0x160007, -1);
BoardWinInsertMesSet((s32)lbl_1_bss_38, 1);
BoardWinWait();
@ -585,6 +616,7 @@ void fn_1_2AC0(void) {
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;
@ -646,5 +678,3 @@ void fn_1_2B44(void) {
GXPosition2f32(0.0f, 1.0f);
GXSetChanMatColor(GX_COLOR0A0, sp1C);
}
f32 const padStatue = 0.0f;

325
src/REL/w06Dll/main.c Executable file
View file

@ -0,0 +1,325 @@
#include "REL/w06Dll.h"
#include "REL/board_executor.h"
#include "game/audio.h"
#include "game/data.h"
#include "game/flag.h"
#include "game/hsfman.h"
#include "game/object.h"
#include "game/process.h"
#include "game/board/boo_house.h"
#include "game/board/lottery.h"
#include "game/board/main.h"
#include "game/board/map_object.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/board/shop.h"
#include "game/board/space.h"
#include "game/board/star.h"
#include "dolphin.h"
typedef struct {
struct {
u8 unk00_field0 : 1;
};
s8 unk01[10];
} Bss8Work;
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ Vec unk04;
} Data108Struct; // Size 0x10
static void fn_1_730(void);
static void fn_1_79C(void);
static s32 fn_1_7BC(void);
static s32 fn_1_900(void);
static s32 fn_1_984(void);
static void fn_1_9C0(void);
static void fn_1_B28(void);
static void fn_1_B5C(omObjData *arg0);
s16 lbl_1_bss_C[MAPOBJ_MAX];
static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = {
{ { 450.0f, 200.0f, -2950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 6) },
{ { -1650.0f, 0.0f, 2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 8) },
{ { 2700.0f, 100.0f, -1950.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 5) },
{ { -3000.0f, 0.0f, 2550.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 5) },
{ { -1800.0f, 0.0f, 2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 33) },
{ { 300.0f, 200.0f, -2850.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 33) }
};
static omObjData *lbl_1_bss_8;
static s32 lbl_1_bss_4;
void *lbl_1_bss_0;
static s16 lbl_1_data_F0 = -1;
static s16 lbl_1_data_F2 = -1;
static s16 lbl_1_data_F4 = -1;
static s16 lbl_1_data_F6 = -1;
static s32 lbl_1_data_F8[] = {
DATA_MAKE_NUM(DATADIR_W06, 18),
-1
};
static s32 lbl_1_data_100[] = {
DATA_MAKE_NUM(DATADIR_BGUEST, 34),
-1
};
static Data108Struct lbl_1_data_108[] = {
0x00000002, { -3359.9998f, 170.0f, -3559.9998f },
0x0000002A, { 3540.0002f, 170.0f, 1320.0f },
0x00000052, { -710.0f, 170.0f, -4580.0f },
0x0000007A, { -3670.0f, 170.0f, 1020.0f },
0x000000A2, { 1970.0001f, 170.0f, -3840.0002f },
0x000000CA, { -3160.0f, 170.0f, -3770.0f },
0x000000F2, { -3500.0f, 170.0f, -2340.0f },
0x0000011A, { -3700.0f, 170.0f, -810.00005f },
0x00000142, { 100.0f, 170.0f, -4100.0f },
0x0000016A, { 3290.0002f, 170.0f, -340.0f }
};
void BoardCreate(void) {
BoardMapObject *temp_r30;
s32 *var_r29;
s32 i;
lbl_1_bss_0 = GWSystem.board_data;
BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W06, 0));
lbl_1_data_F0 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 1), NULL, 0);
fn_8006DDE8(lbl_1_data_F0, -1.0f);
BoardModelMotionStart(lbl_1_data_F0, 0, 0x40000001);
lbl_1_data_F2 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 2), NULL, 0);
fn_8006DDE8(lbl_1_data_F2, -1.0f);
BoardModelPosSet(lbl_1_data_F2, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_F2, 0, 0x40000001);
lbl_1_data_F4 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 17), lbl_1_data_F8, 0);
BoardModelPosSet(lbl_1_data_F4, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_F4, 1, 0x40000001);
lbl_1_data_F6 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 33), lbl_1_data_100, 0);
BoardModelPosSet(lbl_1_data_F6, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_F6, 1, 0x40000001);
for (i = 0; i < MAPOBJ_MAX; i++) {
temp_r30 = &lbl_1_data_0[i];
if (temp_r30->data_num != -1) {
if (i == 4 || i == 5) {
var_r29 = lbl_1_data_100;
} else {
var_r29 = NULL;
}
lbl_1_bss_C[i] = BoardModelCreate(temp_r30->data_num, var_r29, 0);
BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->pos);
BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->rot);
BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->scale);
BoardModelVisibilitySet(lbl_1_bss_C[i], 1);
}
}
BoardModelMotionStart(lbl_1_bss_C[4], 1, 0x40000001);
BoardModelMotionStart(lbl_1_bss_C[5], 1, 0x40000001);
BoardModelMotionStart(lbl_1_bss_C[2], 0, 0);
BoardModelMotionSpeedSet(lbl_1_bss_C[2], 0.0f);
BoardModelLayerSet(lbl_1_bss_C[2], 1);
BoardModelMotionStart(lbl_1_bss_C[3], 0, 0);
BoardModelMotionSpeedSet(lbl_1_bss_C[3], 0.0f);
BoardModelLayerSet(lbl_1_bss_C[3], 1);
fn_1_D70();
fn_1_4878();
fn_1_7BB0();
fn_1_8F20();
BoardLightHookSet(fn_1_730, fn_1_79C);
BoardSpaceWalkEventFuncSet(fn_1_7BC);
BoardSpaceWalkMiniEventFuncSet(fn_1_900);
BoardSpaceLandEventFuncSet(fn_1_984);
BoardStarHostSet(lbl_1_data_F4);
BoardBooHouseHostSet(lbl_1_data_F6);
BoardLotteryHostSet(lbl_1_data_F6);
BoardShopHostSet(lbl_1_data_F6);
BoardJunctionMaskSet(0x3000);
boardTurnFunc = fn_1_C2B4;
boardStarShowNextHook = fn_1_CD0C;
boardTurnStartFunc = fn_1_9294;
boardStarGiveHook = fn_1_CC90;
boardBowserHook = fn_1_C108;
fn_1_9C0();
}
void BoardDestroy(void) {
s32 i;
fn_1_B28();
boardTurnFunc
= (void*) boardStarShowNextHook
= (void*) boardTurnStartFunc
= (void*) boardStarGiveHook
= (void*) boardBowserHook = NULL;
fn_1_91D8();
fn_1_7F3C();
fn_1_F6C();
fn_1_4A10();
for (i = 0; i < MAPOBJ_MAX; i++) {
BoardModelKill(lbl_1_bss_C[i]);
lbl_1_bss_C[i] = -1;
}
if (lbl_1_data_F6 != -1) {
BoardModelKill(lbl_1_data_F6);
lbl_1_data_F6 = -1;
}
if (lbl_1_data_F4 != -1) {
BoardModelKill(lbl_1_data_F4);
lbl_1_data_F4 = -1;
}
if (lbl_1_data_F0 != -1) {
BoardModelKill(lbl_1_data_F0);
lbl_1_data_F0 = -1;
}
if (lbl_1_data_F2 != -1) {
BoardModelKill(lbl_1_data_F2);
lbl_1_data_F2 = -1;
}
}
static void fn_1_730(void) {
s16 var_r31;
var_r31 = BoardModelIDGet(lbl_1_data_F0);
Hu3DModelLightInfoSet(var_r31, 1);
Hu3DFogSet(4200.0f, 30000.0f, 0xF8, 0x30, 0);
}
static void fn_1_79C(void) {
Hu3DFogClear();
}
static s32 fn_1_7BC(void) {
s32 sp10[] = { 0, 1 };
s32 sp8[] = { 0x300, 0xC0 };
BoardSpace *temp_r31;
s16 temp_r28;
s32 temp_r27;
s32 i;
s32 j;
temp_r27 = GWSystem.player_curr;
temp_r28 = GWPlayer[temp_r27].space_curr;
if (fn_1_92D8(temp_r27, temp_r28) != 0) {
return 1;
}
for (i = 0; i < 2; i++) {
if (BoardSpaceLinkFlagSearch(0, temp_r28, sp8[i]) == -1) {
continue;
}
temp_r31 = BoardSpaceGet(0, temp_r28);
for (j = 0; j < temp_r31->link_cnt; j++) {
if ((BoardSpaceFlagGet(0, temp_r31->link[j]) & 0x04000000) == 0) {
fn_1_8264(sp10[i], temp_r31->link[j]);
return 1;
}
}
}
return 0;
}
static s32 fn_1_900(void) {
s16 var_r30;
s32 temp_r31;
var_r30 = GWPlayer[GWSystem.player_curr].space_curr;
temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000;
if (temp_r31 == 0x200000) {
fn_1_1054(); // TODO: return?
} else if (temp_r31 == 0x400000) {
fn_1_4A60(); // TODO: return?
}
}
static s32 fn_1_984(void) {
if (BoardPlayerSizeGet(GWSystem.player_curr) != 2) {
fn_1_6EF0(); // TODO: return?
}
}
static void fn_1_9C0(void) {
Vec sp14;
Vec sp8;
omObjData *temp_r3;
Bss8Work *temp_r30;
s32 i;
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B5C);
lbl_1_bss_8 = temp_r3;
temp_r30 = OM_GET_WORK_PTR(temp_r3, Bss8Work);
temp_r30->unk00_field0 = 0;
BoardCameraPosGet(&sp14);
BoardCameraDirGet(&sp8);
HuAudFXListnerSetEX(&sp14, &sp8, 6600.0f, 36000.0f, 0.0f, 1650.0f, 1650.0f);
for (i = 0; i < 10; i++) {
temp_r30->unk01[i] = 0;
}
if (!_CheckFlag(0x10010)) {
if (lbl_1_bss_4 == 0) {
HuAudFXPauseAll(1);
lbl_1_bss_4 = 1;
}
} else if (lbl_1_bss_4 != 0) {
HuAudFXPauseAll(0);
lbl_1_bss_4 = 0;
}
}
static void fn_1_B28(void) {
if (lbl_1_bss_8) {
OM_GET_WORK_PTR(lbl_1_bss_8, Bss8Work)->unk00_field0 = 1;
}
}
static void fn_1_B5C(omObjData *arg0) {
Bss8Work *temp_r30;
Vec sp14;
Vec sp8;
s16 temp_r28;
s16 var_r29;
s16 i;
temp_r30 = OM_GET_WORK_PTR(arg0, Bss8Work);
if (temp_r30->unk00_field0 != 0 || BoardIsKill()) {
HuAudFXListnerKill();
lbl_1_bss_8 = NULL;
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
temp_r28 = BoardModelMotionTimeGet(lbl_1_data_F0);
BoardCameraDirGet(&sp8);
BoardCameraTargetGet(&sp14);
sp14.y += 2000.0f;
if (!_CheckFlag(0x10010)) {
if (lbl_1_bss_4 == 0) {
HuAudFXPauseAll(1);
lbl_1_bss_4 = 1;
}
} else if (lbl_1_bss_4 != 0) {
HuAudFXPauseAll(0);
lbl_1_bss_4 = 0;
}
if (!_CheckFlag(0x1001C)) {
for (var_r29 = i = 0; i < 10; i++) {
if (temp_r30->unk01[i] != 0) {
var_r29++;
} else if (temp_r28 == lbl_1_data_108[i].unk00) {
HuAudFXEmiterPlay(0x4A1, &lbl_1_data_108[i].unk04);
temp_r30->unk01[i] = 1;
goto block_20;
}
}
if (var_r29 < 10) {
return;
}
for (i = 0; i < 10; i++) {
temp_r30->unk01[i] = 0;
}
}
block_20:
HuAudFXListnerUpdate(&sp14, &sp8);
}

View file

@ -1,64 +1,73 @@
#include "REL/w10Dll.h"
#include "game/data.h"
#include "game/board/model.h"
#include "game/board/tutorial.h"
#include "game/board/window.h"
s32 lbl_1_data_78[2] = {
MAKE_DATA_NUM(DATADIR_W10, 16),
static s16 hostMdl;
static s16 hostPos;
static Process *hostProc;
static s32 hostMot[2] = {
DATA_MAKE_NUM(DATADIR_W10, 16),
-1
};
Vec lbl_1_data_80[2] = {
static Vec hostPosTbl[2] = {
{70.0f, 355.0f, 200.f},
{70.0f, 175.0f, 200.f},
};
void fn_1_AEC(void) {
lbl_1_bss_1C = 0;
lbl_1_bss_1E = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 15), lbl_1_data_78, 0);
BoardModelMotionStart(lbl_1_bss_1E, 1, 0x40000001);
BoardTutorialHostSet(lbl_1_bss_1E);
BoardModelLayerSet(lbl_1_bss_1E, 6);
lbl_1_bss_18 = HuPrcCreate(fn_1_C20, 0x1FFF, 0x1800, 0);
static void UpdateHost(void);
void HostCreate(void) {
hostPos = 0;
hostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 15), hostMot, 0);
BoardModelMotionStart(hostMdl, 1, 0x40000001);
BoardTutorialHostSet(hostMdl);
BoardModelLayerSet(hostMdl, 6);
hostProc = HuPrcCreate(UpdateHost, 0x1FFF, 0x1800, 0);
}
void fn_1_BA0(s32 arg0) {
s16 var_r31;
void HostWinExec(s32 arg0) {
s16 pos;
switch (lbl_1_bss_1C) {
switch (hostPos) {
case 0:
var_r31 = 5;
pos = 5;
break;
case 1:
var_r31 = 6;
pos = 6;
break;
}
BoardWinCreate(var_r31, arg0, -1);
BoardWinCreate(pos, arg0, -1);
BoardWinWait();
BoardWinKill();
}
void fn_1_C10(s16 arg0) {
lbl_1_bss_1C = arg0;
void HostPosSet(s16 arg0) {
hostPos = arg0;
}
void fn_1_C20(void) {
Mtx sp20;
void UpdateHost(void) {
Mtx rot;
Vec sp14;
Vec sp8;
while (1) {
if (BoardIsKill() != 0) {
BoardModelKill(lbl_1_bss_1E);
BoardModelKill(hostMdl);
BoardTutorialHostSet(-1);
HuPrcEnd();
}
Hu3D2Dto3D(&lbl_1_data_80[lbl_1_bss_1C], 1, &sp14);
BoardModelPosSetV(lbl_1_bss_1E, &sp14);
Hu3D2Dto3D(&hostPosTbl[hostPos], 1, &sp14);
BoardModelPosSetV(hostMdl, &sp14);
BoardCameraRotGet(&sp8);
PSMTXRotRad(sp20, 'y', 0.2617994f);
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);
PSMTXRotRad(rot, 'y', 0.2617994f);
BoardModelMtxSet(hostMdl, &rot);
BoardModelRotSet(hostMdl, sp8.x, 0.0f, 0.0f);
BoardModelScaleSet(hostMdl, 0.2f, 0.2f, 0.2f);
HuPrcVSleep();
}
}

View file

@ -1,204 +1,220 @@
#include "include/REL/w10Dll.h"
#include "game/data.h"
#include "game/hsfman.h"
#include "game/board/lottery.h"
#include "game/board/model.h"
#include "game/board/shop.h"
#include "game/board/space.h"
#include "game/board/star.h"
#include "game/board/tutorial.h"
#include "game/board/main.h"
#include "game/board/boo_house.h"
#include "game/board/map_object.h"
#include "math.h"
//BSS
s16 lbl_1_bss_22[11];
s16 lbl_1_bss_20;
s16 lbl_1_bss_1E;
s16 lbl_1_bss_1C;
Process* lbl_1_bss_18;
s16 lbl_1_bss_10[4];
s16 lbl_1_bss_E;
s16 lbl_1_bss_C;
void* lbl_1_bss_8;
s32 lbl_1_bss_4_pad;
W10State* lbl_1_bss_0;
//DATA
unkw10Dll lbl_1_data_0[1] = {
//Map Objects
static BoardMapObject mapObjTbl[MAPOBJ_MAX] = {
3300.0f, 100.0f, -900.0f,
0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 1.0f,
MAKE_DATA_NUM(DATADIR_W10, 3)
DATA_MAKE_NUM(DATADIR_W10, 3)
};
s16 boardMapObjMdl[MAPOBJ_MAX];
s16 lbl_1_data_28 = -1;
s16 lbl_1_data_2A = -1;
s16 lbl_1_data_2C = -1;
s16 lbl_1_data_2E = -1;
s16 lbl_1_data_30 = -1;
s16 lbl_1_data_32 = -1;
s16 tutorialExitWin;
s16 tutorialDoneF;
static s32 *motTbl;
s32 lbl_1_bss_4;
W10BoardWork *boardWork;
//unused?
s32 lbl_1_data_34[] = {
0x005F0000, 0x001A0000,
0x006D0000, 0x008A0000,
0x00850000, 0x00110000,
0x000D0000, 0x00810000,
static s16 bgMdl = -1;
static s16 fgMdl = -1;
s16 boardStarHostMdl = -1;
s16 boardShopHostMdl = -1;
s16 boardLotteryHostMdl = -1;
s16 boardBooHouseHostMdl = -1;
static s32 charMotDirTbl[] = {
DATADIR_MARIOMOT, DATADIR_LUIGIMOT,
DATADIR_PEACHMOT, DATADIR_YOSHIMOT,
DATADIR_WARIOMOT, DATADIR_DONKEYMOT,
DATADIR_DAISYMOT, DATADIR_WALUIGIMOT,
};
s32 lbl_1_data_54[2] = {
MAKE_DATA_NUM(DATADIR_W10, 18),
static s32 starHostMot[2] = {
DATA_MAKE_NUM(DATADIR_W10, 18),
DATA_NUM_LISTEND
};
s32 lbl_1_data_5C[2] = {
MAKE_DATA_NUM(DATADIR_BGUEST, 9),
static s32 shopHostMot[2] = {
DATA_MAKE_NUM(DATADIR_BGUEST, 9),
DATA_NUM_LISTEND
};
s32 lbl_1_data_64[2] = {
MAKE_DATA_NUM(DATADIR_BGUEST, 24),
static s32 lotteryHostMot[2] = {
DATA_MAKE_NUM(DATADIR_BGUEST, 24),
DATA_NUM_LISTEND
};
s32 lbl_1_data_6C[2] = {
MAKE_DATA_NUM(DATADIR_BGUEST, 14),
static s32 booHouseHostMot[2] = {
DATA_MAKE_NUM(DATADIR_BGUEST, 14),
DATA_NUM_LISTEND
};
// function is probably global. only inlined in rels?
inline s32 get_current_board(void) {
return GWSystem.board;
}
static void LightSetHook(void);
static void LightResetHook(void);
static s32 WalkEvent(void);
static s32 WalkMiniEvent(void);
static s32 LandEvent(void);
void BoardCreate(void) {
f32 sp10;
f32 spC[2];
s32 sp8;
void BoardCreate(void)
{
float size[2];
s32 i;
unkw10Dll* temp_r30;
s32 temp;
s32 temp2;
BoardMapObject *temp_r30;
s32 space;
s32 board;
temp2 = get_current_board();
lbl_1_bss_0 = (W10State *)&GWSystem.board_data;
lbl_1_bss_0->unk0 = 0;
lbl_1_bss_0->unk4 = 0;
lbl_1_bss_0->unk6 = 0;
BoardTutorialHookSet(&fn_1_1AAC);
fn_1_AEC();
fn_1_1D68();
lbl_1_bss_C = 0;
BoardSpaceInit(MAKE_DATA_NUM(DATADIR_W10, 0));
temp = BoardSpaceFlagSearch(0, 1);
BoardTutorialBlockSetPos(temp, 1);
lbl_1_data_28 = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 1), NULL, 0);
fn_8006DDE8(lbl_1_data_28, -1.0f);
BoardModelPosSet(lbl_1_data_28, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_28, 0, 0x40000001);
BoardModelMotionSpeedSet(lbl_1_data_28, 1.0f);
lbl_1_data_2A = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 2), NULL, 0);
fn_8006DDE8(lbl_1_data_2A, -1.0f);
BoardModelPosSet(lbl_1_data_2A, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_2A, 0, 0x40000001);
lbl_1_data_2C = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 17), lbl_1_data_54, 0);
BoardModelPosSet(lbl_1_data_2C, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_2C, 1, 0x40000001);
lbl_1_data_2E = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BGUEST, 5), lbl_1_data_5C, 0);
BoardModelMotionStart(lbl_1_data_2E, 1, 0x40000001);
lbl_1_data_32 = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BGUEST, 18), lbl_1_data_64, 0);
BoardModelMotionStart(lbl_1_data_32, 1, 0x40000001);
lbl_1_data_30 = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BGUEST, 13), lbl_1_data_6C, 0);
BoardModelMotionStart(lbl_1_data_30, 1, 0x40000001);
BoardLightHookSet(&fn_1_8C0, &fn_1_904);
for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) {
temp_r30 = &lbl_1_data_0[i];
if (temp_r30->unk24 != -1) {
lbl_1_bss_8 = NULL;
lbl_1_bss_10[i] = BoardModelCreate(temp_r30->unk24, lbl_1_bss_8, 0);
BoardModelPosSetV(lbl_1_bss_10[i], &temp_r30->unk0);
BoardModelRotSetV(lbl_1_bss_10[i], &temp_r30->unk0C);
BoardModelScaleSetV(lbl_1_bss_10[i], &temp_r30->unk18);
BoardModelVisibilitySet(lbl_1_bss_10[i], 1);
if (lbl_1_bss_8 != NULL) {
BoardModelMotionStart(lbl_1_bss_10[i], 0, 0x40000001);
board = GWBoardGet();
boardWork = (W10BoardWork *)&GWSystem.board_data[0];
boardWork->scene = 0;
boardWork->dice = 0;
boardWork->msg = 0;
BoardTutorialHookSet(TutorialHookExec);
HostCreate();
TutorialSprCreate();
tutorialDoneF = 0;
BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W10, 0));
space = BoardSpaceFlagSearch(0, 1);
BoardTutorialBlockSetPos(space, 1);
bgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 1), NULL, 0);
fn_8006DDE8(bgMdl, -1.0f);
BoardModelPosSet(bgMdl, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(bgMdl, 0, 0x40000001);
BoardModelMotionSpeedSet(bgMdl, 1.0f);
fgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 2), NULL, 0);
fn_8006DDE8(fgMdl, -1.0f);
BoardModelPosSet(fgMdl, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(fgMdl, 0, 0x40000001);
boardStarHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 17), starHostMot, 0);
BoardModelPosSet(boardStarHostMdl, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(boardStarHostMdl, 1, 0x40000001);
boardShopHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 5), shopHostMot, 0);
BoardModelMotionStart(boardShopHostMdl, 1, 0x40000001);
boardBooHouseHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), lotteryHostMot, 0);
BoardModelMotionStart(boardBooHouseHostMdl, 1, 0x40000001);
boardLotteryHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 13), booHouseHostMot, 0);
BoardModelMotionStart(boardLotteryHostMdl, 1, 0x40000001);
BoardLightHookSet(LightSetHook, LightResetHook);
for (i = 0; i < MAPOBJ_MAX; i++) {
temp_r30 = &mapObjTbl[i];
if (temp_r30->data_num != -1) {
motTbl = NULL;
boardMapObjMdl[i] = BoardModelCreate(temp_r30->data_num, motTbl, 0);
BoardModelPosSetV(boardMapObjMdl[i], &temp_r30->pos);
BoardModelRotSetV(boardMapObjMdl[i], &temp_r30->rot);
BoardModelScaleSetV(boardMapObjMdl[i], &temp_r30->scale);
BoardModelVisibilitySet(boardMapObjMdl[i], 1);
if (motTbl != NULL) {
BoardModelMotionStart(boardMapObjMdl[i], 0, 0x40000001);
}
}
}
BoardModelVisibilitySet(lbl_1_bss_10[0], 0);
lbl_1_bss_0->unk8 = BoardModelCreate(0x7000A, NULL, 0);
BoardModelVisibilitySet(lbl_1_bss_0->unk8, 0);
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);
HuWinMesSpeedSet(lbl_1_bss_E, 0);
HuWinPriSet(lbl_1_bss_E, 1);
HuWinMesPalSet(lbl_1_bss_E, 7, 0, 0, 0);
BoardModelVisibilitySet(boardMapObjMdl[MAPOBJ_MELON], 0);
boardWork->focus_mdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0);
BoardModelVisibilitySet(boardWork->focus_mdl, 0);
BoardSpaceWalkEventFuncSet(WalkEvent);
BoardSpaceWalkMiniEventFuncSet(WalkMiniEvent);
BoardSpaceLandEventFuncSet(LandEvent);
BoardStarHostSet(boardStarHostMdl);
BoardBooHouseHostSet(boardBooHouseHostMdl);
BoardShopHostSet(boardShopHostMdl);
BoardLotteryHostSet(boardLotteryHostMdl);
HuWinMesMaxSizeGet(1, size, 0x2E003A);
tutorialExitWin = HuWinCreate(-10000.0f, 390.0f, size[0], size[1], 1);
HuWinMesSet(tutorialExitWin, 0x2E003A);
HuWinMesSpeedSet(tutorialExitWin, 0);
HuWinPriSet(tutorialExitWin, 1);
HuWinMesPalSet(tutorialExitWin, 7, 0, 0, 0);
}
void BoardDestroy(void) {
void BoardDestroy(void)
{
s32 i;
for (i = 0; i < 1; i++) {
if (lbl_1_bss_10[i] != 0) {
BoardModelKill(lbl_1_bss_10[i]);
lbl_1_bss_10[i] = 0;
if (boardMapObjMdl[i] != 0) {
BoardModelKill(boardMapObjMdl[i]);
boardMapObjMdl[i] = 0;
}
}
if (lbl_1_data_32 != -1) {
BoardModelKill(lbl_1_data_32);
lbl_1_data_32 = -1;
if (boardBooHouseHostMdl != -1) {
BoardModelKill(boardBooHouseHostMdl);
boardBooHouseHostMdl = -1;
}
if (lbl_1_data_2E != -1) {
BoardModelKill(lbl_1_data_2E);
lbl_1_data_2E = -1;
if (boardShopHostMdl != -1) {
BoardModelKill(boardShopHostMdl);
boardShopHostMdl = -1;
}
if (lbl_1_data_30 != -1) {
BoardModelKill(lbl_1_data_30);
lbl_1_data_30 = -1;
if (boardLotteryHostMdl != -1) {
BoardModelKill(boardLotteryHostMdl);
boardLotteryHostMdl = -1;
}
if (lbl_1_data_2C != -1) {
BoardModelKill(lbl_1_data_2C);
lbl_1_data_2C = -1;
if (boardStarHostMdl != -1) {
BoardModelKill(boardStarHostMdl);
boardStarHostMdl = -1;
}
if (lbl_1_data_28 != -1) {
BoardModelKill(lbl_1_data_28);
lbl_1_data_28 = -1;
if (bgMdl != -1) {
BoardModelKill(bgMdl);
bgMdl = -1;
}
if (lbl_1_data_2A != -1) {
BoardModelKill(lbl_1_data_2A);
lbl_1_data_2A = -1;
if (fgMdl != -1) {
BoardModelKill(fgMdl);
fgMdl = -1;
}
BoardModelKill(lbl_1_bss_0->unk8);
fn_1_1DEC();
HuWinKill(lbl_1_bss_E);
BoardModelKill(boardWork->focus_mdl);
TutorialSprKill();
HuWinKill(tutorialExitWin);
BoardSpaceDestroy();
}
void fn_1_8C0(void) {
s16 temp = BoardModelIDGet(lbl_1_data_28);
Hu3DModelLightInfoSet(temp, 1);
static void LightSetHook(void)
{
s16 id = BoardModelIDGet(bgMdl);
Hu3DModelLightInfoSet(id, 1);
}
void fn_1_904(void) {
static void LightResetHook(void)
{
}
void fn_1_908(void) {
static s32 LandEvent(void)
{
}
s32 fn_1_90C(void) {
static s32 WalkEvent(void)
{
return 0;
}
void fn_1_914(void) {
void fn_1_914(void)
{
}
void fn_1_918(void) {
void fn_1_918(void)
{
}
void fn_1_91C(void) {
static s32 WalkMiniEvent(void)
{
}
s32 fn_1_920(s16 arg0, f32 arg8, f32 arg9) {

View file

@ -1,232 +1,243 @@
#include "include/REL/w10Dll.h"
#include "game/board/char_wheel.h"
#include "game/board/lottery.h"
#include "game/board/main.h"
#include "game/board/model.h"
#include "game/board/shop.h"
#include "game/board/space.h"
#include "game/board/star.h"
#include "game/board/tutorial.h"
#include "game/board/ui.h"
#include "game/board/boo_house.h"
#include "game/board/mg_setup.h"
void fn_1_D2C(void) {
fn_1_BA0(0x2E0001);
void TutorialStartExec(void) {
HostWinExec(0x2E0001);
}
void fn_1_D54(void) {
fn_1_BA0(0x2E0002);
void TutorialPreRollExec(void) {
HostWinExec(0x2E0002);
}
void fn_1_D7C(void) {
fn_1_BA0(0x2E0003);
void TutorialOrderExec(void) {
HostWinExec(0x2E0003);
}
void fn_1_DA4(void) {
fn_1_BA0(0x2E0004);
void TutorialP1StartExec(void) {
HostWinExec(0x2E0004);
}
void fn_1_DCC(void) {
fn_1_BA0(0x2E0005);
void TutorialP2StartExec(void) {
HostWinExec(0x2E0005);
}
void fn_1_DF4(void) {
fn_1_BA0(0x2E0006);
void TutorialP3StartExec(void) {
HostWinExec(0x2E0006);
}
void fn_1_E1C(void) {
fn_1_BA0(0x2E0007);
void TutorialP4StartExec(void) {
HostWinExec(0x2E0007);
}
void fn_1_E44(void) {
fn_1_BA0(0x2E0008);
fn_1_BA0(0x2E0009);
void TutorialGameStartExec(void) {
HostWinExec(0x2E0008);
HostWinExec(0x2E0009);
BoardSpaceStarSetIndex(0);
BoardModelVisibilitySet(lbl_1_data_2C, 1);
BoardModelVisibilitySet(boardStarHostMdl, 1);
}
void fn_1_E94(void) {
fn_1_BA0(0x2E000A);
void TutorialRollExec(void) {
HostWinExec(0x2E000A);
}
void fn_1_EBC(void) {
fn_1_BA0(0x2E000B);
void TutorialMoveExec(void) {
HostWinExec(0x2E000B);
}
void fn_1_EE4(void) {
void TutorialLandExec(void) {
}
void fn_1_EE8(void) {
fn_1_1E3C(0, 0x122, 0x8C);
fn_1_BA0(0x2E000C);
fn_1_BA0(0x2E000D);
fn_1_1FB0();
void TutorialLandBlueExec(void) {
TutorialSpaceShow(0, 0x122, 0x8C);
HostWinExec(0x2E000C);
HostWinExec(0x2E000D);
TutorialSpaceHide();
}
void fn_1_F30(void) {
fn_1_1E3C(1, 0x122, 0x8C);
fn_1_BA0(0x2E000E);
fn_1_1FB0();
void TutorialLandRedExec(void) {
TutorialSpaceShow(1, 0x122, 0x8C);
HostWinExec(0x2E000E);
TutorialSpaceHide();
}
void fn_1_F6C(void) {
fn_1_1E3C(2, 0x122, 0x8C);
fn_1_BA0(0x2E000F);
fn_1_1FB0();
void TutorialLandHappenExec(void) {
TutorialSpaceShow(2, 0x122, 0x8C);
HostWinExec(0x2E000F);
TutorialSpaceHide();
BoardTutorialDirInputSet(0, 0x50, 1);
}
void fn_1_FB8(void) {
fn_1_1E3C(3, 0x122, 0x8C);
fn_1_BA0(0x2E0010);
fn_1_1FB0();
fn_1_BA0(0x2E0011);
void TutorialLandFortuneExec(void) {
TutorialSpaceShow(3, 0x122, 0x8C);
HostWinExec(0x2E0010);
TutorialSpaceHide();
HostWinExec(0x2E0011);
BoardTutorialDirInputSet(-0x50, 0, 1);
}
void fn_1_1010(void) {
fn_1_1E3C(4, 0x122, 0x8C);
fn_1_BA0(0x2E0012);
fn_1_1FB0();
void TutorialLandBowserExec(void) {
TutorialSpaceShow(4, 0x122, 0x8C);
HostWinExec(0x2E0012);
TutorialSpaceHide();
BoardTutorialDirInputSet(0, 0x50, 1);
}
void fn_1_105C(void) {
fn_1_1E3C(5, 0x122, 0x8C);
fn_1_BA0(0x2E0013);
fn_1_1FB0();
void TutorialLandMushroomExec(void) {
TutorialSpaceShow(5, 0x122, 0x8C);
HostWinExec(0x2E0013);
TutorialSpaceHide();
}
void fn_1_1098(void) {
fn_1_BA0(0x2E0014);
void TutorialMushroomMegaExec(void) {
HostWinExec(0x2E0014);
}
void fn_1_10C0(void) {
fn_1_BA0(0x2E0015);
void TutorialMushroomMiniExec(void) {
HostWinExec(0x2E0015);
BoardTutorialDirInputSet(-0x50, 0, 1);
}
void fn_1_10F8(void) {
fn_1_1E3C(6, 0x122, 0x8C);
fn_1_BA0(0x2E0016);
fn_1_1FB0();
void TutorialLandBattleExec(void) {
TutorialSpaceShow(6, 0x122, 0x8C);
HostWinExec(0x2E0016);
TutorialSpaceHide();
}
void fn_1_1134(void) {
fn_1_1E3C(7, 0x122, 0x8C);
fn_1_BA0(0x2E0017);
fn_1_1FB0();
BoardCharWheelSetTarget(1);
void TutorialLandWarpExec(void) {
TutorialSpaceShow(7, 0x122, 0x8C);
HostWinExec(0x2E0017);
TutorialSpaceHide();
BoardCharWheelTargetSet(1);
}
void fn_1_1178(void) {
fn_1_BA0(0x2E0018);
void TutorialWarpDecideExec(void) {
HostWinExec(0x2E0018);
}
void fn_1_11A0(void) {
s32 temp;
void TutorialBlockStarExec(void) {
s32 space;
fn_1_BA0(0x2E0019);
temp = BoardSpaceFlagSearch(0, 1);
BoardTutorialBlockSetPos(temp, 0);
HostWinExec(0x2E0019);
space = BoardSpaceFlagSearch(0, 1);
BoardTutorialBlockSetPos(space, 0);
}
void fn_1_11EC(void) {
s32 temp;
void TutorialBlockCoinExec(void) {
s32 space;
fn_1_BA0(0x2E001A);
temp = BoardSpaceFlagSearch(0, 1);
BoardTutorialBlockSetPos(temp, 0);
HostWinExec(0x2E001A);
space = BoardSpaceFlagSearch(0, 1);
BoardTutorialBlockSetPos(space, 0);
BoardTutorialItemSet(0);
}
void fn_1_1240(void) {
fn_1_BA0(0x2E001B);
void TutorialMiniMegaExec(void) {
HostWinExec(0x2E001B);
BoardTutorialDirInputSet(0x50, 0, 1);
}
void fn_1_1278(void) {
fn_1_BA0(0x2E001C);
void TutorialMiniUseExec(void) {
HostWinExec(0x2E001C);
}
void fn_1_12A0(void) {
fn_1_BA0(0x2E001D);
void TutorialMiniStopExec(void) {
HostWinExec(0x2E001D);
BoardPlayerItemAdd(2, 1);
BoardTutorialItemSet(1);
}
void fn_1_12DC(void) {
fn_1_BA0(0x2E001E);
void TutorialMegaUseExec(void) {
HostWinExec(0x2E001E);
}
void fn_1_1304(void) {
fn_1_BA0(0x2E001F);
void TutorialMegaDiceExec(void) {
HostWinExec(0x2E001F);
}
void fn_1_132C(void) {
fn_1_BA0(0x2E0020);
void TutorialMegaStompExec(void) {
HostWinExec(0x2E0020);
}
void fn_1_1354(void) {
fn_1_BA0(0x2E0021);
void TutorialMegaEventExec(void) {
HostWinExec(0x2E0021);
}
void fn_1_137C(void) {
fn_1_BA0(0x2E0022);
void TutorialMegaStopExec(void) {
HostWinExec(0x2E0022);
}
void fn_1_13A4(void) {
void TutorialEndExec(void) {
s32 i;
Vec sp14;
Vec sp8;
s32 temp_r3_2;
Vec pos;
Vec offset;
s32 space;
fn_1_BA0(0x2E0023);
HostWinExec(0x2E0023);
for (i = 0; i < 4; i++) {
GWPlayer[i].color = 1;
}
BoardMGSetupTutorialExec();
BoardStatusShowSetAll(0);
fn_1_C10(0);
fn_1_BA0(0x2E002B);
sp8.x = -33.0f;
sp8.y = sp8.z = 0.0f;
temp_r3_2 = BoardSpaceFlagSearch(0, 0x80000);
BoardSpacePosGet(0, temp_r3_2, &sp14);
BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14);
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
HostPosSet(0);
HostWinExec(0x2E002B);
offset.x = -33.0f;
offset.y = offset.z = 0.0f;
space = BoardSpaceFlagSearch(0, 0x80000);
BoardSpacePosGet(0, space, &pos);
BoardModelPosSetV(boardWork->focus_mdl, &pos);
BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionWait();
fn_1_BA0(0x2E002C);
BoardShopTutorialExec(temp_r3_2);
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
HostWinExec(0x2E002C);
BoardShopTutorialExec(space);
BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionWait();
temp_r3_2 = BoardSpaceFlagSearch(0, 0x10000000);
BoardSpacePosGet(0, temp_r3_2, &sp14);
BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14);
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
space = BoardSpaceFlagSearch(0, 0x10000000);
BoardSpacePosGet(0, space, &pos);
BoardModelPosSetV(boardWork->focus_mdl, &pos);
BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionWait();
fn_1_BA0(0x2E002E);
HostWinExec(0x2E002E);
BoardLotteryTutorialExec();
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionWait();
temp_r3_2 = BoardSpaceFlagSearch(0, 0x08000000);
BoardSpacePosGet(0, temp_r3_2, &sp14);
BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14);
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
space = BoardSpaceFlagSearch(0, 0x08000000);
BoardSpacePosGet(0, space, &pos);
BoardModelPosSetV(boardWork->focus_mdl, &pos);
BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionWait();
fn_1_BA0(0x2E0030);
HostWinExec(0x2E0030);
BoardBooHouseTutorialExec();
BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30);
BoardCameraMotionWait();
fn_1_BA0(0x2E0032);
HostWinExec(0x2E0032);
BoardCameraTargetModelSet(BoardStarHostMdlGet());
BoardCameraMotionWait();
fn_1_BA0(0x2E0033);
fn_1_BA0(0x2E0034);
fn_1_1E3C(8, 0x122, 0x8C);
fn_1_BA0(0x2E0035);
fn_1_1FB0();
fn_1_1E3C(9, 0x122, 0x8C);
fn_1_BA0(0x2E0036);
fn_1_1FB0();
fn_1_1E3C(0xA, 0x122, 0x8C);
fn_1_BA0(0x2E0037);
fn_1_1FB0();
fn_1_BA0(0x2E0038);
fn_1_BA0(0x2E0039);
if (lbl_1_bss_C == 0) {
lbl_1_bss_C = 1;
HostWinExec(0x2E0033);
HostWinExec(0x2E0034);
TutorialSpaceShow(8, 0x122, 0x8C);
HostWinExec(0x2E0035);
TutorialSpaceHide();
TutorialSpaceShow(9, 0x122, 0x8C);
HostWinExec(0x2E0036);
TutorialSpaceHide();
TutorialSpaceShow(0xA, 0x122, 0x8C);
HostWinExec(0x2E0037);
TutorialSpaceHide();
HostWinExec(0x2E0038);
HostWinExec(0x2E0039);
if (tutorialDoneF == 0) {
tutorialDoneF = 1;
BoardAudSeqFadeOut(0, 0x1F3);
BoardKill();
}
@ -235,3 +246,50 @@ void fn_1_13A4(void) {
HuPrcVSleep();
}
}
void TutorialMGStatusExec(void) {
HostPosSet(1);
HostWinExec(0x2E0024);
}
void TutorialMG4PExec(void) {
HostWinExec(0x2E0025);
GWPlayer[1].color = 2;
GWPlayer[3].color = 2;
}
void TutorialMG2Vs2Exec(void) {
HostWinExec(0x2E0026);
GWPlayer[0].color = 2;
}
void TutorialMG1Vs3Exec(void) {
HostWinExec(0x2E0027);
GWPlayer[0].color = 1;
GWPlayer[1].color = 1;
GWPlayer[2].color = 1;
GWPlayer[3].color = 2;
}
void TutorialMG1Vs3AltExec(void) {
HostWinExec(0x2E0028);
HostWinExec(0x2E0029);
boardTutorialData[0] = 0;
BoardStatusItemSet(0);
}
void TutorialShopExec(void) {
HostWinExec(0x2E002D);
}
void TutorialLotteryExec(void) {
HostWinExec(0x2E002F);
}
void TutorialBooHouseExec(void) {
HostWinExec(0x2E0031);
}
void TutorialNullExec(void) {
}

View file

@ -3,156 +3,36 @@
#include "game/pad.h"
#include "game/data.h"
#include "game/wipe.h"
#include "game/board/ui.h"
char lbl_1_data_98[] = "@@@@@@@@@@@@@@ Tutorial Exit @@@@@@@@@@@@@@\n\000";
static s16 sprList[11];
static s16 sprCurr;
w10DllUnk03 lbl_1_data_C6[11] = {
1, -1, -1,
2, -1, -1,
4, -1, -1,
5, -1, -1,
5, -1, -1,
4, -1, -1,
1, -1, -1,
3, -1, -1,
2, -1, -1,
4, -1, -1,
5, 6, -1,
};
w10DllUnk04 lbl_1_data_108[42] = {
{0x0000, 0000, fn_1_D2C},
{0x0001, 0000, fn_1_D54},
{0x0002, 0000, fn_1_D7C},
{0x0003, 0000, fn_1_DA4},
{0x0003, 0000, fn_1_DCC},
{0x0003, 0000, fn_1_DF4},
{0x0003, 0000, fn_1_E1C},
{0x0004, 0000, fn_1_E44},
{0x0005, 0000, fn_1_E94},
{0x0006, 0000, fn_1_EBC},
{0x0007, 0000, fn_1_EE4},
{0x000A, 0000, fn_1_EE8},
{0x000B, 0000, fn_1_F30},
{0x0010, 0000, fn_1_F6C},
{0x0011, 0000, fn_1_FB8},
{0x000C, 0000, fn_1_1010},
{0x000D, 0000, fn_1_105C},
{0x000E, 0000, fn_1_1098},
{0x000E, 0000, fn_1_10C0},
{0x000F, 0000, fn_1_10F8},
{0x0012, 0000, fn_1_1134},
{0x0014, 0000, fn_1_1178},
{0x0015, 0000, fn_1_11A0},
{0x0016, 0000, fn_1_11EC},
{0x0005, 0000, fn_1_1240},
{0x0017, 0000, fn_1_1278},
{0x0007, 0000, fn_1_12A0},
{0x0005, 0000, fn_1_12DC},
{0x0017, 0000, fn_1_1304},
{0x0018, 0000, fn_1_132C},
{0x0019, 0000, fn_1_1354},
{0x0008, 0000, fn_1_137C},
{0x0009, 0000, fn_1_13A4},
{0x001A, 0000, fn_1_176C},
{0x001B, 0000, fn_1_179C},
{0x001B, 0000, fn_1_17F4},
{0x001B, 0000, fn_1_1834},
{0x001B, 0000, fn_1_18BC},
{0x001C, 0000, fn_1_1908},
{0x001C, 0000, fn_1_1930},
{0x001C, 0000, fn_1_1958},
{-1, 0, 0},
};
char lbl_1_data_258[] = "Tutorial Hook P0:%d P1:%d P2:%d P3:%d SCEN:%d CUE:%d PRM:%d DICE:%d MSG:%d\n";
s32 lbl_1_data_2A8[11] = {
MAKE_DATA_NUM(DATADIR_W10, 4),
MAKE_DATA_NUM(DATADIR_W10, 5),
MAKE_DATA_NUM(DATADIR_W10, 6),
MAKE_DATA_NUM(DATADIR_W10, 7),
MAKE_DATA_NUM(DATADIR_W10, 8),
MAKE_DATA_NUM(DATADIR_W10, 9),
MAKE_DATA_NUM(DATADIR_W10, 10),
MAKE_DATA_NUM(DATADIR_W10, 11),
MAKE_DATA_NUM(DATADIR_W10, 12),
MAKE_DATA_NUM(DATADIR_W10, 13),
MAKE_DATA_NUM(DATADIR_W10, 14)
};
void fn_1_176C(void) {
fn_1_C10(1);
fn_1_BA0(0x2E0024);
}
void fn_1_179C(void) {
fn_1_BA0(0x2E0025);
GWPlayer[1].color = 2;
GWPlayer[3].color = 2;
}
void fn_1_17F4(void) {
fn_1_BA0(0x2E0026);
GWPlayer[0].color = 2;
}
void fn_1_1834(void) {
fn_1_BA0(0x2E0027);
GWPlayer[0].color = 1;
GWPlayer[1].color = 1;
GWPlayer[2].color = 1;
GWPlayer[3].color = 2;
}
void fn_1_18BC(void) {
fn_1_BA0(0x2E0028);
fn_1_BA0(0x2E0029);
boardTutorialData = 0;
BoardStatusItemSet(0);
}
void fn_1_1908(void) {
fn_1_BA0(0x2E002D);
}
void fn_1_1930(void) {
fn_1_BA0(0x2E002F);
}
void fn_1_1958(void) {
fn_1_BA0(0x2E0031);
}
void fn_1_1980(void) {
}
void fn_1_1984(void) {
s32 contPortIndex;
static void CloseTutorial(void) {
s32 port;
s32 i;
if (lbl_1_bss_C == 0) {
if (tutorialDoneF == 0) {
if (WipeStatGet() != 0) {
HuWinDispOff(lbl_1_bss_E);
HuWinDispOff(tutorialExitWin);
return;
}
HuWinDispOn(lbl_1_bss_E);
HuWinDispOn(tutorialExitWin);
if (BoardIsKill() != 0) {
return;
}
for (i = 0; i < ARRAY_COUNT(GWPlayer); i++) {
contPortIndex = GWPlayer[i].port;
if (contPortIndex == -1) {
for (i = 0; i < 4; i++) {
port = GWPlayer[i].port;
if (port == -1) {
continue;
}
if (HuPadStatGet(contPortIndex) == 0 && HuPadBtnDown[contPortIndex] & PAD_BUTTON_START) {
if (HuPadStatGet(port) == 0 && HuPadBtnDown[port] & PAD_BUTTON_START) {
break;
}
}
if (i != 4) {
lbl_1_bss_C = 1;
OSReport(lbl_1_data_98);
tutorialDoneF = 1;
OSReport("@@@@@@@@@@@@@@ Tutorial Exit @@@@@@@@@@@@@@\n");
BoardAudSeqFadeOut(0, 0x1F3);
BoardKill();
BoardTutorialHookSet(NULL);
@ -160,93 +40,138 @@ void fn_1_1984(void) {
}
}
int fn_1_1AAC(s16 arg0, s32 arg1) {
s32 i;
if (arg0 == 0x1E) {
if (lbl_1_bss_C == 0) {
if (WipeStatGet() != 0) {
HuWinDispOff(lbl_1_bss_E);
} else {
HuWinDispOn(lbl_1_bss_E);
if (BoardIsKill() == 0) {
s32 contPortIndex;
for (i = 0; i < ARRAY_COUNT(GWPlayer); i++) {
contPortIndex = GWPlayer[i].port;
if (contPortIndex == -1) {
continue;
}
if (HuPadStatGet(contPortIndex) == 0 && HuPadBtnDown[contPortIndex] & 0x1000) {
break;
}
}
if (i != 4) {
lbl_1_bss_C = 1;
OSReport(lbl_1_data_98);
BoardAudSeqFadeOut(0, 0x1F3);
BoardKill();
BoardTutorialHookSet(NULL);
}
}
}
}
static s16 rollDataTbl[11][3] = {
1, -1, -1,
2, -1, -1,
4, -1, -1,
5, -1, -1,
5, -1, -1,
4, -1, -1,
1, -1, -1,
3, -1, -1,
2, -1, -1,
4, -1, -1,
5, 6, -1,
};
static TutorialScene sceneTbl[42] = {
{0, TutorialStartExec},
{1, TutorialPreRollExec},
{2, TutorialOrderExec},
{3, TutorialP1StartExec},
{3, TutorialP2StartExec},
{3, TutorialP3StartExec},
{3, TutorialP4StartExec},
{4, TutorialGameStartExec},
{5, TutorialRollExec},
{6, TutorialMoveExec},
{7, TutorialLandExec},
{10, TutorialLandBlueExec},
{11, TutorialLandRedExec},
{16, TutorialLandHappenExec},
{17, TutorialLandFortuneExec},
{12, TutorialLandBowserExec},
{13, TutorialLandMushroomExec},
{14, TutorialMushroomMegaExec},
{14, TutorialMushroomMiniExec},
{15, TutorialLandBattleExec},
{18, TutorialLandWarpExec},
{20, TutorialWarpDecideExec},
{21, TutorialBlockStarExec},
{22, TutorialBlockCoinExec},
{5, TutorialMiniMegaExec},
{23, TutorialMiniUseExec},
{7, TutorialMiniStopExec},
{5, TutorialMegaUseExec},
{23, TutorialMegaDiceExec},
{24, TutorialMegaStompExec},
{25, TutorialMegaEventExec},
{8, TutorialMegaStopExec},
{9, TutorialEndExec},
{26, TutorialMGStatusExec},
{27, TutorialMG4PExec},
{27, TutorialMG2Vs2Exec},
{27, TutorialMG1Vs3Exec},
{27, TutorialMG1Vs3AltExec},
{28, TutorialShopExec},
{28, TutorialLotteryExec},
{28, TutorialBooHouseExec},
{-1, NULL },
};
int TutorialHookExec(s16 arg0, s32 arg1) {
if (arg0 == 30) {
CloseTutorial();
return;
}
if (arg0 != 0x1D) {
OSReport(lbl_1_data_258,
if (arg0 != 29) {
OSReport("Tutorial Hook P0:%d P1:%d P2:%d P3:%d SCEN:%d CUE:%d PRM:%d DICE:%d MSG:%d\n",
GWPlayer[0].com, GWPlayer[1].com,
GWPlayer[2].com, GWPlayer[3].com,
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) {
boardWork->scene, arg0, arg1, boardWork->dice, boardWork->msg);
if (sceneTbl[boardWork->scene].cue != -1) {
if (arg0 == 5) {
BoardRollTutorialSet(&lbl_1_data_C6[lbl_1_bss_0->unk4++]);
BoardRollTutorialSet(&rollDataTbl[boardWork->dice++][0]);
}
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;
temp_r3_3();
if (arg0 == sceneTbl[boardWork->scene].cue) {
TutorialSceneFunc func = sceneTbl[boardWork->scene++].func;
func();
}
}
}
}
void fn_1_1D68(void) {
s32 temp_r4;
s32 temp_r5;
static s32 tutorialSprTbl[11] = {
DATA_MAKE_NUM(DATADIR_W10, 4),
DATA_MAKE_NUM(DATADIR_W10, 5),
DATA_MAKE_NUM(DATADIR_W10, 6),
DATA_MAKE_NUM(DATADIR_W10, 7),
DATA_MAKE_NUM(DATADIR_W10, 8),
DATA_MAKE_NUM(DATADIR_W10, 9),
DATA_MAKE_NUM(DATADIR_W10, 10),
DATA_MAKE_NUM(DATADIR_W10, 11),
DATA_MAKE_NUM(DATADIR_W10, 12),
DATA_MAKE_NUM(DATADIR_W10, 13),
DATA_MAKE_NUM(DATADIR_W10, 14)
};
void TutorialSprCreate(void) {
s32 i;
for (i = 0; i < 11; i++) {
lbl_1_bss_22[i] = espEntry(lbl_1_data_2A8[i], 0, 0);
espDispOff(lbl_1_bss_22[i]);
sprList[i] = espEntry(tutorialSprTbl[i], 0, 0);
espDispOff(sprList[i]);
}
}
void fn_1_1DEC(void) {
void TutorialSprKill(void) {
s32 i;
for (i = 0; i < 11; i++) {
espKill(lbl_1_bss_22[i]);
espKill(sprList[i]);
}
}
void fn_1_1E3C(s16 arg0, s16 arg1, s16 arg2) {
void TutorialSpaceShow(s16 arg0, s16 arg1, s16 arg2) {
f32 var_f31;
f32 var_f30;
u32 i;
lbl_1_bss_20 = lbl_1_bss_22[arg0];
espPosSet(lbl_1_bss_20, arg1, arg2);
sprCurr = sprList[arg0];
espPosSet(sprCurr, arg1, arg2);
var_f31 = 0.0f;
var_f30 = 0.0f;
espDispOn(lbl_1_bss_20);
espDispOn(sprCurr);
for (i = 0; i < 15; i++) {
var_f31 += 0.06666667f;
var_f30 += 0.06666667f;
espScaleSet(lbl_1_bss_20, var_f31, var_f30);
espScaleSet(sprCurr, var_f31, var_f30);
HuPrcVSleep();
}
espScaleSet(lbl_1_bss_20, 1.0f, 1.0f);
espScaleSet(sprCurr, 1.0f, 1.0f);
}
void fn_1_1FB0(void) {
void TutorialSpaceHide(void) {
f32 var_f31;
f32 var_f30;
u32 i;
@ -256,8 +181,8 @@ void fn_1_1FB0(void) {
for (i = 0; i < 15; i++) {
var_f31 -= 0.06666667f;
var_f30 -= 0.06666667f;
espScaleSet(lbl_1_bss_20, var_f31, var_f30);
espScaleSet(sprCurr, var_f31, var_f30);
HuPrcVSleep();
}
espDispOff(lbl_1_bss_20);
espDispOff(sprCurr);
}

85
src/REL/w21Dll/main.c Normal file
View file

@ -0,0 +1,85 @@
#include "game/board/space.h"
#include "game/board/model.h"
#include "game/board/main.h"
#include "game/board/star.h"
#include "game/board/shop.h"
#include "game/data.h"
static s16 bgMdl = -1;
static s16 fgMdl = -1;
static s16 hostMdl = -1;
static s32 hostMotTbl[] = {
DATA_MAKE_NUM(DATADIR_BGUEST, 42),
-1
};
static void LightSetHook(void);
static void LightResetHook(void);
static s32 WalkEvent(void);
static s32 WalkMiniEvent(void);
static s32 LandEvent(void);
void BoardCreate(void)
{
BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W21, 0));
bgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W21, 1), NULL, 0);
fn_8006DDE8(bgMdl, -1.0f);
BoardModelMotionStart(bgMdl, 0, 0x40000001);
fgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W21, 2), NULL, 0);
fn_8006DDE8(fgMdl, -1.0f);
BoardModelPosSet(fgMdl, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(fgMdl, 0, 0x40000001);
hostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 41), hostMotTbl, 0);
BoardModelPosSet(hostMdl, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(hostMdl, 1, 0x40000001);
BoardLightHookSet(LightSetHook, LightResetHook);
BoardSpaceWalkEventFuncSet(WalkEvent);
BoardSpaceWalkMiniEventFuncSet(WalkMiniEvent);
BoardSpaceLandEventFuncSet(LandEvent);
BoardStarHostSet(hostMdl);
BoardShopHostSet(hostMdl);
}
void BoardDestroy(void)
{
if(hostMdl != -1) {
BoardModelKill(hostMdl);
hostMdl = -1;
}
if(bgMdl != -1) {
BoardModelKill(bgMdl);
bgMdl = -1;
}
if(fgMdl != -1) {
BoardModelKill(fgMdl);
fgMdl = -1;
}
}
static void LightSetHook(void)
{
s16 id = BoardModelIDGet(bgMdl);
Hu3DModelLightInfoSet(id, 1);
}
static void LightResetHook(void)
{
Hu3DFogClear();
}
static s32 WalkEvent(void)
{
return 0;
}
static s32 WalkMiniEvent(void)
{
}
static s32 LandEvent(void)
{
}