marioparty4/src/REL/w01Dll/main.c
dbalatoni13 accaf2085f
Port m426Dll to PAL, match m428Dll and remove PS prefixes (#537)
* Port m426Dll to PAL

* Remove PS prefix from mtx function usages

* Match m428Dll
2025-01-18 22:31:11 -06:00

2651 lines
78 KiB
C
Executable file

#include "game/board/main.h"
#include "REL/board_executor.h"
#include "REL/w01Dll.h"
#include "game/audio.h"
#include "game/board/audio.h"
#include "game/board/boo_house.h"
#include "game/board/com.h"
#include "game/board/lottery.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 "game/board/ui.h"
#include "game/board/view.h"
#include "game/board/window.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/gamework_data.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/process.h"
#include "game/window.h"
#include "game/wipe.h"
#include "dolphin.h"
#include "ext_math.h"
typedef struct {
struct {
u8 unk00_field0 : 1;
};
} Bss10Work;
typedef struct {
struct {
u8 unk00_field0 : 1;
u8 unk00_field1 : 3;
u8 unk00_field2 : 1;
u8 unk00_field3 : 1;
};
u8 unk01;
u8 unk02;
char unk03[1];
s16 unk04;
char unk06[2];
float unk08;
} Bss18Work;
typedef struct {
/* 0x00 */ s8 unk00;
/* 0x01 */ s8 unk01;
/* 0x02 */ s16 unk02;
/* 0x04 */ s16 unk04;
/* 0x06 */ s16 unk06;
/* 0x08 */ float unk08;
/* 0x0C */ char unk0C[4];
/* 0x10 */ float unk10;
/* 0x14 */ Vec unk14;
/* 0x20 */ Mtx unk20;
} BssCData; // Size 0x50
typedef struct {
struct {
u8 unk00_field0 : 1;
};
s8 unk01;
char unk02[2];
BssCData *unk04;
} BssCWork;
typedef struct {
/* 0x00 */ s16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ float unk04;
/* 0x08 */ Vec unk08;
/* 0x14 */ Vec unk14;
} Bss20Data; // Size 0x20
typedef struct {
struct {
u8 unk00_field0 : 1;
};
u8 unk01;
char unk02[2];
Bss20Data *unk04;
} Bss20Work;
static void fn_1_730(void);
static void fn_1_774(void);
static s32 fn_1_778(void);
static s32 fn_1_814(void);
static void fn_1_9E8(void);
static void fn_1_D00(void);
static void fn_1_D04(void);
static void fn_1_1254(void);
static void fn_1_128C(void);
static void fn_1_130C(void);
static s32 fn_1_157C(void);
static void fn_1_1670(void);
static void fn_1_1700(void);
static void fn_1_1990(void);
static void fn_1_1AD8(BoardCameraData *camera);
static void fn_1_1B3C(void);
static void fn_1_1EE4(void);
static void fn_1_1F2C(omObjData *arg0);
static void fn_1_1FA4(void);
static float fn_1_2524(void);
static void fn_1_276C(void);
static void fn_1_2F18(void);
static void fn_1_3350(void);
static void fn_1_3514(s32 arg0);
static void fn_1_35B4(s32 arg0);
static void fn_1_3624(void);
static void fn_1_45F4(void);
static void fn_1_4774(void);
static void fn_1_4864(void);
static s32 fn_1_48B4(void);
static void fn_1_4E14(void);
static void fn_1_4FA8(void);
static void fn_1_4FD8(void);
static void fn_1_50D4(void);
static void fn_1_53B8(void);
static void fn_1_543C(void);
static void fn_1_5694(s32 arg0);
static void fn_1_586C(s32 arg0, s32 arg1);
static void fn_1_592C(void);
static void fn_1_5B2C(void);
static void fn_1_5B40(void);
static BOOL fn_1_5CD0(void);
static void fn_1_5D08(void);
static void fn_1_6098(omObjData *arg0);
static void fn_1_6194(Bss18Work *arg0, omObjData *arg1);
static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1);
static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1);
static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1);
static void fn_1_6FB4(Bss18Work *arg0, omObjData *arg1);
static void fn_1_7528(s32 arg0, s32 arg1);
static void fn_1_77EC(s32 arg0, s32 arg1);
static void fn_1_7894(void);
static void fn_1_7A64(void);
static void fn_1_852C(void);
static void fn_1_87AC(void);
static void fn_1_87E0(omObjData *arg0);
static void fn_1_8988(BssCData *arg0, omObjData *arg1);
static void fn_1_8A50(BssCData *arg0, omObjData *arg1);
static void fn_1_8B6C(BssCData *arg0, omObjData *arg1);
static void fn_1_8DDC(BssCData *arg0, omObjData *arg1);
static void fn_1_918C(BssCData *arg0, omObjData *arg1);
static void fn_1_927C(BssCData *arg0, omObjData *arg1);
static void fn_1_932C(BssCData *arg0);
static s32 fn_1_94A8(BssCData *arg0);
static void fn_1_95F4(BssCData *arg0);
static void fn_1_97F4(void);
static void fn_1_98EC(void);
static void fn_1_9920(omObjData *arg0);
static void fn_1_9A24(Bss20Work *arg0);
static void fn_1_9BBC(Bss20Work *arg0);
static 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_W01, 8) },
{ { 0.0f, 700.0f, 300.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 9) },
{ { -2025.0f, 100.0f, 1950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) },
{ { 1725.0f, 200.0f, -1650.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) },
{ { 2757.974f, 200.0f, -536.781f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) },
{ { -2750.0f, 300.0f, -2150.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 12) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 13) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 14) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 15) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 17) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) },
{ { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 21) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 22) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 23) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 24) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 25) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 26) },
{ { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 27) },
{ { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) },
{ { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) },
{ { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) },
{ { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) },
{ { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) },
{ { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) },
{ { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) },
{ { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) },
{ { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) },
{ { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) } };
s16 lbl_1_bss_6C4[MAPOBJ_MAX];
static s32 *lbl_1_bss_6C0;
static s16 lbl_1_bss_6B6[5];
static s8 lbl_1_bss_6B4;
static s8 lbl_1_bss_6B3;
static s8 lbl_1_bss_6B2;
static s8 lbl_1_bss_6B1;
static s8 lbl_1_bss_6B0;
static s16 lbl_1_bss_6AE;
static s16 lbl_1_bss_6AC;
static float lbl_1_bss_6A8;
static Mtx lbl_1_bss_678;
static float lbl_1_bss_674;
static float lbl_1_bss_670;
static float lbl_1_bss_66C;
static Vec lbl_1_bss_660;
static Vec lbl_1_bss_654;
static Vec lbl_1_bss_648;
static float lbl_1_bss_644;
static float lbl_1_bss_640;
static float lbl_1_bss_63C;
static Vec lbl_1_bss_630;
static Vec lbl_1_bss_624;
static Vec lbl_1_bss_618;
static s8 lbl_1_bss_600[24];
static s16 lbl_1_bss_5D0[24];
static s16 lbl_1_bss_5CC[2];
static s8 lbl_1_bss_2C[1440];
static s8 lbl_1_bss_2A[2]; // padding
static s8 lbl_1_bss_29;
static s8 lbl_1_bss_28;
static s16 lbl_1_bss_26;
static s16 lbl_1_bss_24;
static omObjData *lbl_1_bss_20;
static s8 lbl_1_bss_1C;
static omObjData *lbl_1_bss_18;
static Process *lbl_1_bss_14;
static omObjData *lbl_1_bss_10;
static omObjData *lbl_1_bss_C;
static Process *lbl_1_bss_8;
static Process *lbl_1_bss_4;
UnkBoardDataStruct *lbl_1_bss_0;
static s16 lbl_1_data_528 = -1;
static s16 lbl_1_data_52A = -1;
static s16 lbl_1_data_52C = -1;
static s16 lbl_1_data_52E = -1;
static s16 lbl_1_data_530 = -1;
static s32 lbl_1_data_534[] = { DATA_MAKE_NUM(DATADIR_W01, 30), -1 };
static s32 lbl_1_data_53C[] = { DATA_MAKE_NUM(DATADIR_BGUEST, 1), -1 };
void BoardCreate(void)
{
BoardMapObject *temp_r30;
s32 sp8;
s32 i;
sp8 = GWBoardGet();
lbl_1_bss_0 = (UnkBoardDataStruct *)GWSystem.board_data;
BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W01, 0));
lbl_1_data_528 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 1), NULL, 0);
fn_8006DDE8(lbl_1_data_528, -1.0f);
BoardModelPosSet(lbl_1_data_528, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_528, 0, 0x40000001);
lbl_1_data_52A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 2), NULL, 0);
fn_8006DDE8(lbl_1_data_52A, -1.0f);
BoardModelPosSet(lbl_1_data_52A, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_52A, 0, 0x40000001);
lbl_1_data_52C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 29), lbl_1_data_534, 0);
BoardModelPosSet(lbl_1_data_52C, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_52C, 1, 0x40000001);
lbl_1_data_52E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 0), lbl_1_data_53C, 0);
BoardModelPosSet(lbl_1_data_52E, 0.0f, 0.0f, 0.0f);
BoardModelMotionStart(lbl_1_data_52E, 1, 0x40000001);
lbl_1_data_530 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 11), NULL, 0);
BoardModelMotionStart(lbl_1_data_530, 0, 0x40000001);
BoardLightHookSet(fn_1_730, fn_1_774);
for (i = 0; i < MAPOBJ_MAX; i++) {
temp_r30 = &lbl_1_data_0[i];
if (temp_r30->data_num != -1) {
if (i == 2 || i == 3 || i == 4 || i == 5) {
lbl_1_bss_6C0 = lbl_1_data_53C;
}
else {
lbl_1_bss_6C0 = NULL;
}
lbl_1_bss_6C4[i] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_6C0, 0);
BoardModelPosSetV(lbl_1_bss_6C4[i], &temp_r30->pos);
BoardModelRotSetV(lbl_1_bss_6C4[i], &temp_r30->rot);
BoardModelScaleSetV(lbl_1_bss_6C4[i], &temp_r30->scale);
BoardModelVisibilitySet(lbl_1_bss_6C4[i], 1);
}
}
BoardModelMotionStart(lbl_1_bss_6C4[2], 1, 0x40000001);
BoardModelMotionStart(lbl_1_bss_6C4[3], 1, 0x40000001);
BoardModelMotionStart(lbl_1_bss_6C4[4], 1, 0x40000001);
BoardModelMotionStart(lbl_1_bss_6C4[5], 1, 0x40000001);
fn_1_543C();
fn_1_9E8();
fn_1_1700();
BoardSpaceWalkEventFuncSet(fn_1_814);
BoardSpaceWalkMiniEventFuncSet(fn_1_157C);
BoardSpaceLandEventFuncSet(fn_1_778);
BoardStarHostSet(lbl_1_data_52C);
BoardBooHouseHostSet(lbl_1_data_52E);
BoardLotteryHostSet(lbl_1_data_52E);
BoardShopHostSet(lbl_1_data_52E);
BoardJunctionMaskSet(0xC000);
BoardJunctionMaskSet(0x3000);
}
void BoardDestroy(void)
{
s32 i;
fn_1_4864();
fn_1_D00();
for (i = 0; i < 33; i++) {
if (lbl_1_bss_6C4[i] != 0) {
BoardModelKill(lbl_1_bss_6C4[i]);
lbl_1_bss_6C4[i] = 0;
}
}
if (lbl_1_data_530 != -1) {
BoardModelKill(lbl_1_data_530);
lbl_1_data_530 = -1;
}
if (lbl_1_data_52E != -1) {
BoardModelKill(lbl_1_data_52E);
lbl_1_data_52E = -1;
}
if (lbl_1_data_52C != -1) {
BoardModelKill(lbl_1_data_52C);
lbl_1_data_52C = -1;
}
if (lbl_1_data_528 != -1) {
BoardModelKill(lbl_1_data_528);
lbl_1_data_528 = -1;
}
if (lbl_1_data_52A != -1) {
BoardModelKill(lbl_1_data_52A);
lbl_1_data_52A = -1;
}
BoardSpaceDestroy();
}
static void fn_1_730(void)
{
s16 var_r31;
var_r31 = BoardModelIDGet(lbl_1_data_528);
Hu3DModelLightInfoSet(var_r31, 1);
}
static void fn_1_774(void) { }
static s32 fn_1_778(void)
{
s32 temp_r31;
s32 temp_r30;
u32 temp_r29;
temp_r31 = GWSystem.player_curr;
temp_r30 = GWPlayer[temp_r31].space_curr;
temp_r29 = BoardSpaceFlagGet(0, temp_r30);
if (temp_r29 & 0x800) {
fn_1_77EC(temp_r31, temp_r30);
}
else if (temp_r29 & 0x400) {
fn_1_7528(temp_r31, temp_r30);
}
}
static s32 fn_1_814(void)
{
s32 temp_r27;
s32 var_r30;
s32 var_r29;
s32 var_r26;
BoardSpace *temp_r31;
BoardSpace *temp_r28;
temp_r27 = GWSystem.player_curr;
temp_r31 = BoardSpaceGet(0, GWPlayer[temp_r27].space_curr);
if (temp_r31->flag & 0x3000) {
if (BoardPlayerSizeGet(temp_r27) == 2 || GWPlayer[temp_r27].bowser_suit) {
return 0;
}
if (temp_r31->flag & 0x2000) {
if (lbl_1_bss_0->unk00_field0 != 0) {
return 0;
}
}
else if (temp_r31->flag & 0x1000) {
if (lbl_1_bss_0->unk00_field0 != 1) {
return 0;
}
}
fn_1_4FD8();
return 1;
}
var_r29 = -1;
for (var_r30 = 0; var_r30 < temp_r31->link_cnt; var_r30++) {
if (temp_r31->link[var_r30] != -1) {
temp_r28 = BoardSpaceGet(0, temp_r31->link[var_r30]);
if (temp_r28->flag & 0x8000) {
var_r29 = 0;
var_r26 = temp_r31->link[var_r30];
break;
}
else if (temp_r28->flag & 0x4000) {
var_r29 = 1;
var_r26 = temp_r31->link[var_r30];
break;
}
}
}
if (var_r29 != -1) {
fn_1_586C(var_r29, var_r26);
return 1;
}
return 0;
}
static void fn_1_9E8(void)
{
BoardModelVisibilitySet(lbl_1_bss_6C4[6], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[7], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[8], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[9], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[10], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[11], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[12], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[13], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[14], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[15], 1);
BoardModelMotionStart(lbl_1_bss_6C4[6], 0, 0);
BoardModelMotionSpeedSet(lbl_1_bss_6C4[6], 0.0f);
BoardModelMotionStart(lbl_1_bss_6C4[14], 0, 0x40000001);
BoardModelMotionStart(lbl_1_bss_6C4[15], 0, 0x40000001);
BoardModelHookSet(lbl_1_bss_6C4[6], "amida_ban_07-sirenr", lbl_1_bss_6C4[14]);
BoardModelHookSet(lbl_1_bss_6C4[6], "amida_ban_07-sirenl", lbl_1_bss_6C4[15]);
BoardModelVisibilitySet(lbl_1_bss_6C4[16], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[17], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[18], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[21], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[22], 1);
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0);
BoardModelMotionSpeedSet(lbl_1_bss_6C4[21], 0.0f);
BoardModelMotionStart(lbl_1_bss_6C4[18], 0, 0);
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f);
BoardModelExistDupe(lbl_1_bss_6C4[16], 0);
BoardModelMotionStart(lbl_1_bss_6C4[16], 0, 0x40000001);
BoardModelMotionStart(lbl_1_bss_6C4[17], 0, 0x40000001);
BoardModelMotionStart(lbl_1_bss_6C4[22], 0, 0x40000001);
BoardModelHookSet(lbl_1_bss_6C4[21], "m_goraund_01-flag1", lbl_1_bss_6C4[22]);
}
static void fn_1_D00(void) { }
static void fn_1_D04(void)
{
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
Vec spC;
s8 sp8[4];
s32 temp_r28;
s32 temp_r3;
s32 var_r26;
s32 var_r25;
s32 temp_r30;
s32 i;
s32 j;
temp_r30 = GWSystem.player_curr;
var_r26 = 0;
if (BoardPlayerItemCount(temp_r30) == 3) {
BoardWinCreate(0, MAKE_MESSID(10, 9), 0);
BoardWinWait();
BoardWinKill();
HuPrcEnd();
}
lbl_1_bss_6B6[0] = 0;
i = 1;
while (i < 4) {
lbl_1_bss_6B6[i] = frandmod(14);
if (lbl_1_bss_6B6[i] != 10 && lbl_1_bss_6B6[i] != 13) {
for (j = 0; j < i; j++) {
if (lbl_1_bss_6B6[i] == lbl_1_bss_6B6[j]) {
lbl_1_bss_6B6[i] = -1;
}
}
if (lbl_1_bss_6B6[i] != -1) {
i++;
}
}
}
fn_1_D740(lbl_1_bss_6B6);
for (i = 0; i < 4; i++) {
sp8[i] = lbl_1_bss_6B6[i];
}
if (BoardComPreferItemGet(temp_r30, sp8, 4) != -1) {
var_r26 = 1;
}
HuAudFXPlay(0x40D);
HuAudFXPlay(0x40E);
BoardModelAttrReset(lbl_1_bss_6C4[21], 0x40000004);
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0);
temp_r28 = GWPlayer[temp_r30].space_curr;
temp_r3 = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000);
BoardSpacePosGet(0, temp_r3, &sp3C);
sp30.x = 150.0f;
sp30.y = 0.0f;
sp30.z = 0.0f;
sp24.x = -45.0f;
sp24.y = 0.0f;
sp24.z = 0.0f;
BoardCameraMotionStartEx(lbl_1_bss_6C4[4], &sp24, &sp30, 1880.0f, -1.0f, 21);
BoardCameraMotionWait();
BoardWinCreateChoice(2, MAKE_MESSID(10, 0), 0, 0);
if (GWPlayer[temp_r30].com) {
if (var_r26 != 0) {
BoardComKeySetLeft();
}
else {
BoardComKeySetRight();
}
}
BoardWinWait();
BoardWinKill();
var_r25 = BoardWinChoiceGet();
if (var_r25 != 0) {
BoardWinCreate(2, MAKE_MESSID(10, 4), 0);
BoardWinWait();
BoardWinKill();
BoardMGExit();
HuAudFXPlay(0x40F);
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004);
while (!BoardModelMotionEndCheck(lbl_1_bss_6C4[21])) {
HuPrcVSleep();
}
BoardModelMotionSpeedSet(lbl_1_bss_6C4[21], 0.0f);
BoardModelAttrReset(lbl_1_bss_6C4[21], 0x40000004);
while (BoardMGDoneFlagGet() != 1) {
HuPrcVSleep();
}
BoardMGDoneFlagSet(0);
fn_1_DD84();
HuPrcEnd();
}
BoardPlayerMoveBetween(temp_r30, temp_r28, temp_r3);
while (GWPlayer[temp_r30].moving) {
HuPrcVSleep();
}
BoardPlayerMotionStart(temp_r30, 1, 0x40000001);
sp18.x = 0.0f;
sp18.y = 0.0f;
sp18.z = 0.0f;
spC.x = -45.0f;
spC.y = 0.0f;
spC.z = 0.0f;
BoardCameraMotionStartEx(lbl_1_bss_6C4[21], &spC, &sp18, 1200.0f, -1.0f, 21);
BoardCameraMotionWait();
fn_1_DE94();
while (BoardEventFlagGet() != 0) {
HuPrcVSleep();
}
BoardCameraMotionWait();
BoardAudSeqPause(0, 0, 1000);
while (GWPlayer[temp_r30].moving) {
HuPrcVSleep();
}
BoardPlayerMotionStart(temp_r30, 1, 0x40000001);
HuPrcEnd();
}
static void fn_1_1254(void)
{
BoardWinKill();
CharModelDataClose(-1);
lbl_1_bss_4 = NULL;
}
static void fn_1_128C(void)
{
lbl_1_bss_4 = HuPrcChildCreate(fn_1_D04, 0x2003, 0x2000, 0, boardMainProc);
HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1254);
while (lbl_1_bss_4) {
HuPrcVSleep();
}
}
static void fn_1_130C(void)
{
Vec sp20;
Vec sp14;
Vec sp8;
s32 temp_r31;
s32 var_r28;
s32 temp_r30;
s32 temp_r3;
temp_r31 = GWSystem.player_curr;
BoardWinCreateChoice(2, MAKE_MESSID(11, 0), 0, 0);
if (GWPlayer[temp_r31].com) {
BoardComKeySetLeft();
}
BoardWinWait();
BoardWinKill();
var_r28 = BoardWinChoiceGet();
if (var_r28 != 0) {
BoardWinCreate(2, MAKE_MESSID(11, 4), 0);
BoardWinWait();
BoardWinKill();
BoardMGExit();
return;
}
BoardModelMotionStart(lbl_1_bss_6C4[6], 0, 0);
sp14.x = 0.0f;
sp14.y = 0.0f;
sp14.z = 0.0f;
sp8.x = 0.0f;
sp8.y = 170.0f;
sp8.z = 0.0f;
BoardCameraMotionStartEx(lbl_1_bss_6C4[6], &sp14, &sp8, 1200.0f, 25.0f, 21);
temp_r30 = GWPlayer[temp_r31].space_curr;
temp_r3 = BoardSpaceLinkFlagSearch(0, temp_r30, 0x02000000);
BoardSpacePosGet(0, temp_r3, &sp20);
BoardPlayerMoveBetween(temp_r31, temp_r30, temp_r3);
BoardPlayerMotionStart(temp_r31, 1, 0x40000001);
BoardAudSeqPause(0, 1, 1000);
fn_1_9DD8();
while (GWPlayer[temp_r31].moving) {
HuPrcVSleep();
}
while (BoardEventFlagGet() != 0) {
HuPrcVSleep();
}
BoardAudSeqPause(0, 0, 1000);
while (GWPlayer[temp_r31].moving) {
HuPrcVSleep();
}
BoardPlayerMotionStart(temp_r31, 1, 0x40000001);
}
static s32 fn_1_157C(void)
{
s32 temp_r31;
s16 temp_curr;
temp_curr = GWPlayer[GWSystem.player_curr].space_curr;
temp_r31 = BoardSpaceFlagGet(0, temp_curr) & 0x600000;
BoardRollDispSet(0);
if (temp_r31 == 0x200000) {
fn_1_130C();
}
else if (temp_r31 == 0x400000) {
fn_1_128C();
}
BoardRollDispSet(1);
}
static void fn_1_1670(void)
{
if (lbl_1_bss_0->unk00_field0 == 0) {
BoardModelVisibilitySet(lbl_1_bss_6C4[2], 1);
BoardModelVisibilitySet(lbl_1_bss_6C4[3], 0);
}
else {
BoardModelVisibilitySet(lbl_1_bss_6C4[2], 0);
BoardModelVisibilitySet(lbl_1_bss_6C4[3], 1);
}
}
static void fn_1_1700(void)
{
Vec sp8;
Mtx sp14;
lbl_1_bss_6B1 = 0;
lbl_1_bss_6AE = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0);
lbl_1_bss_644 = BoardModelMotionMaxTimeGet(lbl_1_bss_6AE);
BoardModelVisibilitySet(lbl_1_bss_6AE, 0);
memset(lbl_1_bss_2C, 0, sizeof(lbl_1_bss_2C));
if (BoardSpaceRead(1, DATA_MAKE_NUM(DATADIR_W01, 6)) == 0) {
if (lbl_1_bss_0->unk00_field0 == 0) {
BoardSpaceFlagPosGet(1, 0x2000, &sp8);
BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644);
lbl_1_bss_63C = -90.0f;
}
else {
BoardSpaceFlagPosGet(1, 0x1000, &sp8);
BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f);
lbl_1_bss_63C = 90.0f;
}
lbl_1_bss_654 = sp8;
BoardModelPosSetV(lbl_1_bss_6C4[0], &sp8);
BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, lbl_1_bss_63C, 0.0f);
BoardModelExistDupe(lbl_1_bss_6C4[0], 1);
BoardModelExistDupe(lbl_1_bss_6C4[1], 1);
fn_8006DDE8(lbl_1_bss_6C4[1], 500.0f);
MTXIdentity(sp14);
BoardModelMtxSet(lbl_1_bss_6C4[0], &sp14);
fn_1_1670();
}
}
static void fn_1_1990(void)
{
Vec sp10;
float var_f31;
s32 var_r29;
s32 var_r30;
s16 sp8[3];
BoardSpace *temp_r31;
BoardSpace *temp_r3;
var_r29 = lbl_1_bss_6AC;
var_f31 = 0.0f;
while (TRUE) {
temp_r31 = BoardSpaceGet(1, var_r29);
if (lbl_1_bss_0->unk00_field0 == 0) {
var_r30 = temp_r31->link[0];
}
else {
BoardSpaceLinkTargetListGet(1, var_r29, sp8);
var_r30 = sp8[0];
}
if (var_r30 == 0) {
break;
}
temp_r3 = BoardSpaceGet(1, var_r30);
if (!temp_r3) {
temp_r3 = temp_r31;
break;
}
VECSubtract(&temp_r3->pos, &temp_r31->pos, &sp10);
var_f31 += VECMag(&sp10);
if (var_f31 >= lbl_1_bss_640) {
break;
}
var_r29 = var_r30;
}
if (temp_r31->flag & 8) {
lbl_1_bss_6B3 = 1;
}
else {
lbl_1_bss_6B3 = 0;
}
}
static void fn_1_1AD8(BoardCameraData *camera)
{
camera->pos = lbl_1_bss_630;
camera->up = lbl_1_bss_624;
camera->target = lbl_1_bss_618;
}
static void fn_1_1B3C(void)
{
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
Vec spC;
Mtx sp48;
VECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp30);
if (lbl_1_bss_6B3 != 0) {
BoardModelPosGet(lbl_1_bss_6C4[1], &sp3C);
VECSubtract(&sp3C, &lbl_1_bss_654, &sp18);
VECNormalize(&sp18, &sp18);
sp24 = lbl_1_bss_648;
spC = lbl_1_bss_654;
BoardMTXCalcLookAt(sp48, &spC, &sp18, &sp24);
MTXTranspose(sp48, lbl_1_bss_678);
MTXRotRad(sp48, 'z', MTXDegToRad(lbl_1_bss_660.z));
MTXConcat(lbl_1_bss_678, sp48, lbl_1_bss_678);
}
else {
if (sp30.z != 0.0f || sp30.x != 0.0f) {
lbl_1_bss_660.y = atan2d(sp30.x, sp30.z);
lbl_1_bss_660.x = -atan2d(sp30.y, VECMagXZ(&sp30));
}
else {
lbl_1_bss_660.x = lbl_1_bss_660.y = 0.0f;
}
MTXRotRad(lbl_1_bss_678, 'z', MTXDegToRad(lbl_1_bss_660.z));
MTXRotRad(sp48, 'x', MTXDegToRad(lbl_1_bss_660.x));
MTXConcat(sp48, lbl_1_bss_678, lbl_1_bss_678);
MTXRotRad(sp48, 'y', MTXDegToRad(lbl_1_bss_660.y));
MTXConcat(sp48, lbl_1_bss_678, lbl_1_bss_678);
}
}
static void fn_1_1EE4(void)
{
Bss10Work *temp_r31;
if (lbl_1_bss_10) {
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_10, Bss10Work);
temp_r31->unk00_field0 = 1;
}
}
static void fn_1_1F2C(omObjData *arg0)
{
Bss10Work *temp_r31 = OM_GET_WORK_PTR(arg0, Bss10Work);
if (temp_r31->unk00_field0 != 0 || BoardIsKill()) {
omDelObjEx(HuPrcCurrentGet(), arg0);
lbl_1_bss_10 = NULL;
return;
}
fn_1_1FA4();
}
static void fn_1_1FA4(void)
{
Vec sp18;
Vec spC;
float temp_f28;
float temp_f29;
float var_f27;
spC.x = lbl_1_bss_648.x;
spC.y = lbl_1_bss_648.y + 200.0f;
spC.z = lbl_1_bss_648.z;
VECSubtract(&spC, &lbl_1_bss_618, &spC);
VECScale(&spC, &spC, 0.08f);
VECAdd(&spC, &lbl_1_bss_618, &lbl_1_bss_618);
VECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &spC);
if (spC.x != 0.0f || spC.z != 0.0f) {
temp_f29 = atan2f(spC.y, VECMagXZ(&spC));
temp_f28 = atan2f(-spC.x, -spC.z);
}
else {
temp_f29 = temp_f28 = 0.0f;
return;
}
temp_f29 += -0.27925268f;
if (lbl_1_bss_6B3 != 0) {
if (lbl_1_bss_66C < 0.08f) {
lbl_1_bss_66C -= 0.00033333333f;
}
BoardModelPosGet(lbl_1_bss_6C4[1], &sp18);
if (lbl_1_bss_0->unk00_field0 == 0) {
var_f27 = -2500.0f;
}
else {
var_f27 = 2500.0f;
}
sp18.x = sp18.x + var_f27 * sin(1.4137166738510132); // TODO: should be sind(81)
sp18.y = sp18.y + -150.0f;
sp18.z = sp18.z + var_f27 * cos(1.4137166738510132); // TODO: should be cosd(81)
VECSubtract(&sp18, &lbl_1_bss_630, &spC);
VECScale(&spC, &spC, lbl_1_bss_66C);
VECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630);
}
else {
if (lbl_1_bss_66C < 0.08f) {
lbl_1_bss_66C += 0.00066666666f;
}
spC.x = 400.0 * (sin(temp_f28) * cos(temp_f29));
spC.y = 400.0 * -sin(temp_f29);
spC.z = 400.0 * (cos(temp_f28) * cos(temp_f29));
VECAdd(&lbl_1_bss_618, &spC, &spC);
VECSubtract(&spC, &lbl_1_bss_630, &spC);
VECScale(&spC, &spC, lbl_1_bss_66C);
VECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630);
}
}
static float fn_1_2524(void)
{
Vec sp24;
Vec sp18;
Vec spC;
float var_f30;
s16 sp8;
s32 var_r29;
s32 i;
sp24 = lbl_1_bss_654;
if (GWPlayer[lbl_1_bss_6B4].com) {
if (lbl_1_bss_6B3 != 0) {
return 0.0f;
}
for (i = 0; i < 24; i++) {
if (lbl_1_bss_600[i] == 0) {
BoardModelPosGet(lbl_1_bss_5D0[i], &sp18);
VECSubtract(&sp18, &sp24, &spC);
if (!(VECMag(&spC) > 400.0f)) {
break;
}
}
}
if (i == 24) {
return 0.0f;
}
VECSubtract(&sp18, &sp24, &spC);
var_f30 = atan2d(spC.x, spC.z);
if (var_f30 > 0.0f) {
var_f30 = 45.0f;
}
else {
var_f30 = -45.0f;
}
}
else {
var_r29 = GWPlayer[lbl_1_bss_6B4].port;
sp8 = HuPadStkX[var_r29];
OSs16tof32(&sp8, &var_f30);
var_f30 = var_f30 * 0.625f;
}
return var_f30;
}
static void fn_1_276C(void)
{
Vec sp58;
Vec sp40;
Vec sp34;
Vec sp28;
Vec sp1C;
float temp_f26;
float var_f27;
Mtx sp70;
fn_1_1B3C();
if (lbl_1_bss_6B1 != 0) {
lbl_1_bss_660.z = 0.0f;
return;
}
var_f27 = fn_1_2524();
BoardDAngleCalcRange(&lbl_1_bss_660.z, var_f27, 5.0f);
temp_f26 = 6.0f + 6.0f * (lbl_1_bss_660.z / 45.0f) - 1.0f;
if (lbl_1_bss_660.z > 22.5f) {
BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[1], 0);
BoardPlayerMotionTimeSet(lbl_1_bss_6B4, temp_f26);
}
else if (lbl_1_bss_660.z < -22.5f) {
BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[1], 0);
BoardPlayerMotionTimeSet(lbl_1_bss_6B4, temp_f26);
}
else {
BoardPlayerMotionShiftSet(lbl_1_bss_6B4, lbl_1_bss_5CC[0], 0.0f, 10.0f, HU3D_MOTATTR_LOOP);
}
fn_1_2F18();
}
static void fn_1_2F18(void)
{
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
Vec spC;
float var_f29;
Mtx spD8;
Mtx spA8;
Mtx sp78;
Mtx sp48;
s32 i;
if (lbl_1_bss_6B3 == 0) {
var_f29 = lbl_1_bss_660.z;
if (var_f29 > 180.0f) {
var_f29 -= 360.0f;
}
BoardModelPosGet(lbl_1_bss_6C4[0], &spC);
VECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp18);
if (sp18.z != 0.0f || sp18.x != 0.0f) {
sp24.y = atan2d(sp18.x, sp18.z);
sp24.x = -atan2d(sp18.y, VECMagXZ(&sp18));
}
else {
sp24.x = sp24.y = 0.0f;
}
MTXTrans(spD8, 0.0f, 180.0f, 0.0f);
MTXRotRad(spA8, 'x', MTXDegToRad(sp24.x));
MTXRotRad(sp78, 'y', MTXDegToRad(sp24.y));
MTXRotRad(sp48, 'z', MTXDegToRad(var_f29));
MTXConcat(spA8, sp48, sp48);
MTXConcat(sp78, sp48, sp48);
MTXConcat(sp48, spD8, spD8);
sp30.x = spD8[0][3];
sp30.y = spD8[1][3];
sp30.z = spD8[2][3];
VECAdd(&sp30, &spC, &sp30);
if (var_f29 < 27.000002f && var_f29 > -27.000002f) {
return;
}
for (i = 0; i < 24; i++) {
if (lbl_1_bss_600[i] == 0) {
BoardModelPosGet(lbl_1_bss_5D0[i], &sp3C);
if (BoardVecMaxDistXZCheck(&sp3C, &sp30, 180.0f)) {
CharModelLayerSetAll(2);
CharModelCoinEffectCreate(1, &sp3C);
BoardModelVisibilitySet(lbl_1_bss_5D0[i], 0);
BoardPlayerCoinsAdd(lbl_1_bss_6B4, 1);
HuAudFXPlay(7);
lbl_1_bss_600[i] = 1;
break;
}
}
}
}
}
static s16 lbl_1_data_580 = -1;
static void fn_1_3350(void)
{
Vec sp8;
s16 temp_r3;
ModelData *temp_r30;
HsfObject *temp_r31;
lbl_1_bss_674 += 0.002f;
if (lbl_1_bss_670 > 0.18f) {
lbl_1_bss_670 = 0.18f;
}
else if (lbl_1_bss_670 < 0.18f) {
lbl_1_bss_670 += lbl_1_bss_674;
}
temp_r3 = BoardModelIDGet(lbl_1_bss_6AE);
temp_r30 = &Hu3DData[temp_r3];
Hu3DMotionExec(temp_r3, temp_r30->unk_08, temp_r30->unk_64, 0);
temp_r31 = Hu3DModelObjPtrGet(temp_r3, "looppath-cube1");
lbl_1_bss_648 = lbl_1_bss_654;
lbl_1_bss_654.x = temp_r31->data.curr.pos.x;
lbl_1_bss_654.y = temp_r31->data.curr.pos.y;
lbl_1_bss_654.z = temp_r31->data.curr.pos.z;
VECSubtract(&lbl_1_bss_648, &lbl_1_bss_654, &sp8);
lbl_1_bss_640 += VECMag(&sp8);
}
static s32 lbl_1_data_594[8][2]
= { { DATA_MAKE_NUM(DATADIR_W01, 34), DATA_MAKE_NUM(DATADIR_W01, 42) }, { DATA_MAKE_NUM(DATADIR_W01, 35), DATA_MAKE_NUM(DATADIR_W01, 43) },
{ DATA_MAKE_NUM(DATADIR_W01, 36), DATA_MAKE_NUM(DATADIR_W01, 44) }, { DATA_MAKE_NUM(DATADIR_W01, 37), DATA_MAKE_NUM(DATADIR_W01, 45) },
{ DATA_MAKE_NUM(DATADIR_W01, 38), DATA_MAKE_NUM(DATADIR_W01, 46) }, { DATA_MAKE_NUM(DATADIR_W01, 39), DATA_MAKE_NUM(DATADIR_W01, 47) },
{ DATA_MAKE_NUM(DATADIR_W01, 40), DATA_MAKE_NUM(DATADIR_W01, 48) }, { DATA_MAKE_NUM(DATADIR_W01, 41), DATA_MAKE_NUM(DATADIR_W01, 49) } };
static void fn_1_3514(s32 arg0)
{
s32 temp_r30;
s32 i;
temp_r30 = GWPlayer[arg0].character;
for (i = 0; i < 2; i++) {
lbl_1_bss_5CC[i] = BoardPlayerMotionCreate(arg0, lbl_1_data_594[temp_r30][i]);
}
}
static void fn_1_35B4(s32 arg0)
{
s32 i;
for (i = 0; i < 2; i++) {
BoardPlayerMotionKill(arg0, lbl_1_bss_5CC[i]);
lbl_1_bss_5CC[i] = -1;
}
}
static void fn_1_3624(void)
{
Mtx sp48;
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
float temp_f28;
float var_f30;
float var_f29;
s32 temp_r19;
Bss10Work *temp_r18;
s16 sp10;
s16 var_r25;
s16 i;
lbl_1_bss_674 = lbl_1_bss_670 = 0.0f;
lbl_1_bss_640 = 0.0f;
lbl_1_bss_660.x = 0.0f;
lbl_1_bss_660.y = 0.0f;
lbl_1_bss_660.z = 0.0f;
lbl_1_bss_6A8 = 0.0f;
lbl_1_bss_6B3 = 0;
lbl_1_bss_624.x = 0.0f;
lbl_1_bss_624.z = 0.0f;
lbl_1_bss_624.y = 1.0f;
lbl_1_bss_66C = 0.08f;
fn_1_3514(lbl_1_bss_6B4);
BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[0], 0x40000001);
BoardSpaceAttrSet(0, 1);
fn_1_97F4();
BoardModelMotionStart(lbl_1_bss_6AE, 0, 0);
if (lbl_1_bss_0->unk00_field0 == 0) {
BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644);
lbl_1_bss_63C = -90.0f;
lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x2000, &sp3C);
var_r25 = BoardSpaceFlagSearch(0, 0x1000);
var_f30 = -1.0f;
}
else {
BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f);
lbl_1_bss_63C = 90.0f;
lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x1000, &sp3C);
var_r25 = BoardSpaceFlagSearch(0, 0x2000);
var_f30 = 1.0f;
}
lbl_1_bss_654 = sp3C;
lbl_1_bss_648 = lbl_1_bss_654;
BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670);
BoardPlayerPosSetV(lbl_1_bss_6B4, &lbl_1_bss_654);
BoardCameraPosCalcFuncSet(fn_1_1AD8);
lbl_1_bss_10 = omAddObjEx(boardObjMan, 0x7E02, 0, 0, -1, fn_1_1F2C);
temp_r18 = OM_GET_WORK_PTR(lbl_1_bss_10, Bss10Work);
temp_r18->unk00_field0 = 0;
sp30.x = -40.0f;
sp30.z = 0.0f;
sp30.y = -lbl_1_bss_63C;
BoardCameraMotionStartEx(lbl_1_bss_6C4[0], &sp30, NULL, 150.0f, -1.0f, 2);
BoardCameraMotionWait();
BoardModelPosGet(lbl_1_bss_6C4[0], &lbl_1_bss_618);
lbl_1_bss_630.x = lbl_1_bss_618.x + 1000.0 * (sind(sp30.y) * cosd(sp30.x));
lbl_1_bss_630.y = lbl_1_bss_618.y + 1000.0 * -sind(sp30.x);
lbl_1_bss_630.z = lbl_1_bss_618.z + 1000.0 * (cosd(sp30.y) * cosd(sp30.x));
MTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C));
BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678);
BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678);
BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f);
BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, 0.0f, 0.0f);
BoardPlayerExistCheck(lbl_1_bss_6B4, 0);
BoardMusStart(1, 0x10, 0x7F, 0);
fn_1_50D4();
BoardStatusShowSetForce(lbl_1_bss_6B4);
BoardStatusShowSet(lbl_1_bss_6B4, 1);
while (!BoardStatusStopCheck(lbl_1_bss_6B4)) {
HuPrcVSleep();
}
temp_r19 = HuAudFXPlay(0x40C);
fn_1_4774();
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1);
lbl_1_bss_6B0 = 1;
HuAudFXPlay(0x413);
while (TRUE) {
fn_1_1990();
fn_1_3350();
fn_1_276C();
BoardModelPosSetV(lbl_1_bss_6C4[0], &lbl_1_bss_654);
BoardPlayerPosSetV(lbl_1_bss_6B4, &lbl_1_bss_654);
if (BoardPlayerSizeGet(lbl_1_bss_6B4) != 1) {
MTXTrans(sp48, 0.0f, 30.0f, 0.0f);
}
else {
MTXTrans(sp48, 0.0f, 400.0f, 250.0f);
}
BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678);
MTXConcat(lbl_1_bss_678, sp48, sp48);
BoardPlayerMtxSet(lbl_1_bss_6B4, &sp48);
if (lbl_1_bss_0->unk00_field0 == 0) {
var_f29 = -lbl_1_bss_670;
}
else {
var_f29 = lbl_1_bss_670;
}
BoardModelMotionSpeedSet(lbl_1_bss_6AE, var_f29);
if (lbl_1_bss_0->unk00_field0 == 0) {
if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 0.0f) {
break;
}
}
else {
if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644) {
break;
}
}
HuPrcVSleep();
}
MTXIdentity(lbl_1_bss_678);
fn_1_4864();
HuAudFXStop(temp_r19);
fn_1_1EE4();
fn_1_98EC();
if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 1) {
MTXTrans(sp48, 0.0f, 400.0f, 250.0f);
}
else {
MTXTrans(sp48, 0.0f, 30.0f, 0.0f);
}
BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678);
BoardPlayerMtxSet(lbl_1_bss_6B4, &sp48);
lbl_1_bss_660.x = lbl_1_bss_660.z = 0.0f;
BoardAudSeqFadeOut(1, 1000);
WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
HuAudFXPlay(0x401);
temp_f28 = (-lbl_1_bss_63C - lbl_1_bss_660.y) / 30.0f;
for (i = 0; i < 30; i++) {
BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660);
BoardPlayerRotSetV(lbl_1_bss_6B4, &lbl_1_bss_660);
lbl_1_bss_660.y += temp_f28 * var_f30;
HuPrcVSleep();
}
lbl_1_bss_660.y = -lbl_1_bss_63C;
BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660);
BoardPlayerRotSetV(lbl_1_bss_6B4, &lbl_1_bss_660);
BoardStatusShowSet(lbl_1_bss_6B4, 0);
BoardSpaceAttrReset(0, 1);
fn_1_53B8();
BoardCameraMoveSet(0);
BoardCameraTargetPlayerSet(lbl_1_bss_6B4);
BoardCameraViewSet(1);
BoardCameraMotionWait();
do {
HuPrcVSleep();
} while (WipeStatGet() != 0);
BoardPlayerIdleSet(lbl_1_bss_6B4);
BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678);
BoardCameraPosCalcFuncSet(NULL);
BoardPlayerExistCheck(lbl_1_bss_6B4, 1);
BoardSpacePosGet(0, var_r25, &sp3C);
GWPlayer[lbl_1_bss_6B4].space_curr = var_r25;
BoardPlayerPosSetV(lbl_1_bss_6B4, &sp3C);
fn_1_35B4(lbl_1_bss_6B4);
lbl_1_bss_6B2 = 1;
}
static void fn_1_45F4(void)
{
if (lbl_1_bss_6B2 != 0) {
if (lbl_1_bss_0->unk00_field0 == 0) {
lbl_1_bss_0->unk00_field0 = 1;
}
else {
lbl_1_bss_0->unk00_field0 = 0;
}
lbl_1_bss_6B2 = 0;
fn_1_1670();
}
fn_1_87AC();
while (lbl_1_bss_C) {
HuPrcVSleep();
}
BoardAudSeqPause(0, 0, 1000);
BoardCameraMoveSet(1);
BoardCameraMotionWait();
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
BoardStatusShowSetAll(1);
}
static void fn_1_4774(void)
{
float sp8[2];
float var_f31;
float var_f30;
HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(13, 5));
var_f31 = -10000.0f;
var_f30 = 352.0f;
lbl_1_data_580 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0);
HuWinBGTPLvlSet(lbl_1_data_580, 0.0f);
HuWinMesSpeedSet(lbl_1_data_580, 0);
HuWinMesSet(lbl_1_data_580, MAKE_MESSID(13, 5));
}
static void fn_1_4864(void)
{
if (lbl_1_data_580 != -1) {
HuWinKill(lbl_1_data_580);
lbl_1_data_580 = -1;
}
}
static s32 fn_1_48B4(void)
{
Vec sp20;
Vec sp14;
Vec sp8;
float var_f31;
u32 var_r31;
s32 i;
s32 temp_r28;
s32 temp_r30;
var_r31 = 0;
lbl_1_bss_6B0 = 0;
lbl_1_bss_6B1 = 0;
lbl_1_bss_6B2 = 0;
lbl_1_bss_6B4 = GWSystem.player_curr;
temp_r30 = GWPlayer[lbl_1_bss_6B4].space_curr;
BoardPlayerMotionShiftSet(lbl_1_bss_6B4, 1, 0.0f, 14.0f, HU3D_MOTATTR_LOOP);
BoardWinCreateChoice(0, MAKE_MESSID(13, 0), -1, 0);
if (GWPlayer[lbl_1_bss_6B4].com) {
fn_1_9D00(lbl_1_bss_6B4);
}
BoardWinWait();
if (BoardWinChoiceGet() != 0) {
return 0;
}
BoardWinCreate(2, 0xD0006, 0);
BoardWinWait();
temp_r28 = BoardSpaceLinkFlagSearch(0, temp_r30, 0x02000000);
BoardSpacePosGet(0, temp_r30, &sp20);
BoardSpacePosGet(0, temp_r28, &sp14);
VECSubtract(&sp14, &sp20, &sp8);
VECNormalize(&sp8, &sp8);
var_f31 = atan2d(-sp8.x, -sp8.z);
BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f);
BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r30, temp_r28);
while (GWPlayer[lbl_1_bss_6B4].moving) {
HuPrcVSleep();
}
BoardPlayerIdleSet(lbl_1_bss_6B4);
while (TRUE) {
BoardWinCreateChoice(1, MAKE_MESSID(13, 1), 0, 0);
BoardWinAttrSet(0x10);
if (GWPlayer[lbl_1_bss_6B4].com) {
if (BoardPlayerCoinsGet(lbl_1_bss_6B4) >= 5) {
BoardComKeySetUp();
}
else {
BoardComKeySetDown();
}
}
BoardWinWait();
if (BoardWinChoiceGet() == 1) {
var_r31 = MAKE_MESSID(13, 3);
break;
}
if (BoardWinChoiceGet() == 2) {
BoardViewMapExec(lbl_1_bss_6B4);
continue;
}
if (BoardPlayerCoinsGet(lbl_1_bss_6B4) < 5) {
var_r31 = MAKE_MESSID(13, 4);
break;
}
for (i = 0; i < 5; i++) {
BoardPlayerCoinsAdd(lbl_1_bss_6B4, -1);
HuAudFXPlay(0xE);
HuPrcSleep(6);
}
HuAudFXPlay(0xF);
BoardWinCreate(2, MAKE_MESSID(13, 2), 0);
BoardWinWait();
BoardWinKill();
BoardAudSeqPause(0, 1, 1000);
HuAudFXPlay(0x402);
BoardStatusShowSetAll(0);
WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
fn_1_852C();
return 1;
}
if (var_r31 != 0) {
BoardWinCreate(1, var_r31, 0);
BoardWinWait();
BoardWinKill();
}
BoardCameraTargetPlayerSet(lbl_1_bss_6B4);
VECSubtract(&sp20, &sp14, &sp8);
VECNormalize(&sp8, &sp8);
var_f31 = atan2d(-sp8.x, -sp8.z);
BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f);
BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r28, temp_r30);
while (GWPlayer[lbl_1_bss_6B4].moving) {
HuPrcVSleep();
}
return 0;
}
static void fn_1_4E14(void)
{
if (fn_1_48B4() != 0) {
fn_1_3624();
fn_1_45F4();
}
HuPrcEnd();
}
static void fn_1_4FA8(void)
{
BoardWinKill();
lbl_1_bss_8 = NULL;
}
static void fn_1_4FD8(void)
{
lbl_1_bss_6B4 = GWSystem.player_curr;
BoardRollDispSet(0);
if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 2 || GWPlayer[lbl_1_bss_6B4].bowser_suit) {
return;
}
lbl_1_bss_8 = HuPrcChildCreate(fn_1_4E14, 0x2003, 0x2000, 0, boardMainProc);
HuPrcDestructorSet2(lbl_1_bss_8, fn_1_4FA8);
while (lbl_1_bss_8) {
HuPrcVSleep();
}
BoardRollDispSet(1);
}
static void fn_1_50D4(void)
{
Vec sp20;
Vec sp14;
Vec sp8;
float temp_f30;
float var_f31;
BoardSpace *temp_r31;
s32 var_r27;
s32 var_r26;
s32 var_r29;
s32 var_r28;
s32 i;
for (i = 0; i < 24; i++) {
lbl_1_bss_5D0[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 9), NULL, 0);
BoardModelVisibilitySet(lbl_1_bss_5D0[i], 0);
BoardModelMotionStart(lbl_1_bss_5D0[i], 0, 0x40000001);
lbl_1_bss_600[i] = 0;
}
temp_f30 = 180.0f;
var_r28 = BoardSpaceFlagPosGet(1, 0x2000, &sp20);
var_r27 = BoardRand() & 1;
var_r29 = i = 0;
while (i < 24) {
temp_r31 = BoardSpaceGet(1, var_r28);
var_r28 = temp_r31->link[0];
if (var_r28 == -1 || temp_r31->link_cnt == 0) {
break;
}
if (!(temp_r31->flag & 0x80)) {
sp14 = temp_r31->pos;
}
else {
if (var_r29 >= 3) {
if (BoardRandFloat() < 0.5f) {
var_r26 = 1;
}
else {
var_r26 = 0;
}
var_r27 = var_r26;
var_r29 = 0;
}
VECSubtract(&sp14, &temp_r31->pos, &sp8);
VECNormalize(&sp8, &sp8);
var_f31 = atan2d(sp8.z, sp8.x);
if (var_r27 != 0) {
var_f31 += 180.0f;
}
sp20.x = temp_r31->pos.x + temp_f30 * sind(var_f31);
sp20.y = temp_r31->pos.y + 80.0f;
sp20.z = temp_r31->pos.z + temp_f30 * cosd(var_f31);
BoardModelPosSetV(lbl_1_bss_5D0[i], &sp20);
BoardModelVisibilitySet(lbl_1_bss_5D0[i], 1);
sp14 = temp_r31->pos;
i++;
var_r29++;
}
}
}
static void fn_1_53B8(void)
{
s32 i;
for (i = 0; i < 24; i++) {
if (lbl_1_bss_5D0[i] != -1) {
BoardModelKill(lbl_1_bss_5D0[i]);
lbl_1_bss_5D0[i] = -1;
}
}
}
static s32 lbl_1_data_5D4 = -1;
static s32 lbl_1_data_5D8 = -1;
static s16 lbl_1_data_5DC[2][4] = { { 24, 25, 26, 27 }, { 29, 30, 31, 32 } };
static char *lbl_1_data_604[] = { "chara1", "chara2", "chara3" };
static float lbl_1_data_610[2][2] = { { 90.0f, 0.0f }, { 0.0f, 270.0f } };
static void fn_1_543C(void)
{
float var_f31;
s16 temp_r28;
s16 temp_r29;
s32 i;
s32 j;
char *sp10[] = { "cup1", "cup2", "cup3", "ya1" };
s32 sp8[] = { 23, 28 };
for (i = 0; i < 2; i++) {
temp_r28 = lbl_1_bss_6C4[sp8[i]];
BoardModelMotionStart(temp_r28, 0, 0x40000001);
BoardModelExistDupe(temp_r28, 0);
for (j = 0; j < 4; j++) {
temp_r29 = lbl_1_bss_6C4[lbl_1_data_5DC[i][j]];
BoardModelExistDupe(temp_r29, 1);
BoardModelHookSet(temp_r28, sp10[j], temp_r29);
BoardModelMotionStart(temp_r29, 0, 0x40000001);
BoardModelRotSet(temp_r29, 0.0f, 360.0f * BoardRandFloat(), 0.0f);
}
}
if (lbl_1_bss_0->unk01[0] != 0) {
var_f31 = 0.0f;
}
else {
var_f31 = 90.0f;
}
BoardModelRotSet(lbl_1_bss_6C4[27], 0.0f, var_f31, 0.0f);
if (lbl_1_bss_0->unk01[1] != 0) {
var_f31 = -90.0f;
}
else {
var_f31 = 0.0f;
}
BoardModelRotSet(lbl_1_bss_6C4[32], 0.0f, var_f31, 0.0f);
}
static void fn_1_5694(s32 arg0)
{
s16 temp_r29;
s16 temp_r30;
s16 i;
s32 spC[] = { 23, 28 };
temp_r29 = lbl_1_bss_6C4[spC[lbl_1_bss_29]];
if (arg0 != 0) {
BoardModelMotionSpeedSet(temp_r29, 1.0f);
BoardModelAttrReset(temp_r29, 0x40000002);
for (i = 0; i < 3; i++) {
temp_r30 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]];
BoardModelMotionSpeedSet(temp_r30, 1.0f);
BoardModelAttrReset(temp_r30, 0x40000002);
}
}
else {
BoardModelMotionSpeedSet(temp_r29, 0.0f);
BoardModelAttrSet(temp_r29, 0x40000002);
for (i = 0; i < 3; i++) {
temp_r30 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]];
BoardModelMotionSpeedSet(temp_r30, 0.0f);
BoardModelAttrSet(temp_r30, 0x40000002);
}
}
}
static void fn_1_586C(s32 arg0, s32 arg1)
{
lbl_1_bss_29 = arg0;
lbl_1_bss_26 = arg1;
BoardRollDispSet(0);
lbl_1_bss_14 = HuPrcChildCreate(fn_1_592C, 0x2003, 0x2000, 0, boardMainProc);
HuPrcDestructorSet2(lbl_1_bss_14, fn_1_5B2C);
while (lbl_1_bss_14) {
HuPrcVSleep();
}
BoardRollDispSet(1);
}
static void fn_1_592C(void)
{
s16 temp_r30;
s16 var_r28;
lbl_1_data_5D4 = -1;
lbl_1_data_5D8 = -1;
BoardPlayerIdleSet(GWSystem.player_curr);
if (lbl_1_bss_29 == 0) {
var_r28 = lbl_1_bss_6C4[23];
}
else {
var_r28 = lbl_1_bss_6C4[28];
}
BoardCameraTargetModelSet(var_r28);
BoardCameraOffsetSet(0.0f, 0.0f, 0.0f);
fn_1_5D08();
while (!fn_1_5CD0()) {
HuPrcVSleep();
}
fn_1_5B40();
fn_1_5694(1);
BoardCameraTargetPlayerSet(GWSystem.player_curr);
BoardCameraViewSet(1);
BoardCameraMotionWait();
HuPrcEnd();
}
static void fn_1_5B2C(void)
{
lbl_1_bss_14 = NULL;
}
static void fn_1_5B40(void)
{
s16 spC[] = { 27, 32 };
s16 temp_r30;
s32 temp_r31;
float sp8;
float temp_f31;
temp_r31 = lbl_1_bss_0->unk01[lbl_1_bss_29];
lbl_1_bss_0->unk01[lbl_1_bss_29] ^= 1;
temp_r30 = lbl_1_bss_6C4[spC[lbl_1_bss_29]];
sp8 = lbl_1_data_610[lbl_1_bss_29][temp_r31];
temp_f31 = lbl_1_data_610[lbl_1_bss_29][temp_r31 ^ 1];
HuAudFXPlay(0x403);
while (TRUE) {
HuPrcVSleep();
if (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) != 0) {
break;
}
BoardModelRotSet(temp_r30, 0.0f, sp8, 0.0f);
}
}
static BOOL fn_1_5CD0(void)
{
return lbl_1_bss_18 ? FALSE : TRUE;
}
static void fn_1_5D08(void)
{
Bss18Work *temp_r31;
float var_f30;
float var_f31;
s16 var_r28;
s16 var_r25;
s32 i;
if (lbl_1_bss_29 == 0) {
var_r28 = lbl_1_bss_6C4[23];
}
else {
var_r28 = lbl_1_bss_6C4[28];
}
while (TRUE) {
var_f30 = BoardModelMotionTimeGet(var_r28);
if (var_f30 >= 209.0f && var_f30 <= 211.0f) {
break;
}
if (var_f30 >= 129.0f && var_f30 <= 131.0f) {
break;
}
if (var_f30 >= 49.0f && var_f30 <= 51.0f) {
break;
}
HuPrcVSleep();
}
var_f31 = 1.0f;
while (var_f31 > 0.01f) {
var_f31 *= 0.9f;
if (var_f31 <= 0.01f) {
var_f31 = 0.0f;
}
BoardModelMotionSpeedSet(var_r28, var_f31);
for (i = 0; i < 3; i++) {
var_r25 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]];
BoardModelMotionSpeedSet(var_r25, var_f31);
}
HuPrcVSleep();
}
fn_1_5694(0);
lbl_1_bss_18 = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, fn_1_6098);
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_18, Bss18Work);
temp_r31->unk00_field0 = 0;
temp_r31->unk01 = 0;
temp_r31->unk02 = 0;
temp_r31->unk00_field2 = 0;
temp_r31->unk04 = var_r28;
if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) {
temp_r31->unk00_field3 = 1;
}
else {
temp_r31->unk00_field3 = 0;
}
}
static void fn_1_6098(omObjData *arg0)
{
Bss18Work *temp_r31 = OM_GET_WORK_PTR(arg0, Bss18Work);
s32 temp_r0;
if (temp_r31->unk00_field0 != 0 || BoardIsKill()) {
lbl_1_bss_18 = NULL;
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (temp_r31->unk02 != 0) {
temp_r31->unk02--;
return;
}
switch (temp_r31->unk00_field1) {
case 0:
fn_1_6194(temp_r31, arg0);
break;
case 2:
fn_1_63F0(temp_r31, arg0);
break;
case 3:
fn_1_6BC0(temp_r31, arg0);
break;
case 1:
fn_1_6FB4(temp_r31, arg0);
break;
}
}
static void fn_1_6194(Bss18Work *arg0, omObjData *arg1)
{
Mtx sp38;
Vec sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
float temp_f31;
float var_f30;
s32 var_r28;
s32 i;
BoardPlayerPosGet(GWSystem.player_curr, &sp20);
var_f30 = 1000000.0f;
for (i = 0; i < 3; i++) {
Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[i], &sp8);
temp_f31 = VECSquareDistance(&sp8, &sp20);
if (temp_f31 < var_f30) {
var_f30 = temp_f31;
lbl_1_bss_28 = i;
sp2C = sp8;
}
}
Hu3DModelObjMtxGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], sp38);
Hu3DMtxRotGet(&sp38, &sp14);
sp14.y = 180.0f;
VECSubtract(&sp2C, &sp20, &sp8);
arg1->trans.x = sp8.x / 25.0f;
arg1->trans.z = sp8.z / 25.0f;
var_r28 = BoardPlayerRotYGet(GWSystem.player_curr);
arg1->trans.y = BoardDAngleCalc(sp14.y - var_r28) / 25.0f;
arg1->scale.x = sp2C.x;
arg1->scale.y = sp2C.y;
arg1->scale.z = sp2C.z;
BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, HU3D_MOTATTR_NONE);
arg0->unk00_field1 = 2;
arg0->unk01 = 0;
}
static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1)
{
Vec sp10;
float temp_f29;
float var_f27;
float var_f28;
s16 var_r24;
if (arg0->unk01 >= 55) {
BoardPlayerRotSet(GWSystem.player_curr, 0.0f, 0.0f, 0.0f);
BoardPlayerIdleSet(GWSystem.player_curr);
if (GWPlayer[GWSystem.player_curr].bowser_suit) {
BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardBowserSuitModelGet());
}
else {
BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardPlayerModelGet(GWSystem.player_curr));
}
var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]];
if (arg0->unk00_field3 != 0) {
BoardModelScaleSet(var_r24, 1.0f, 0.1f, 1.0f);
}
fn_1_5694(1);
lbl_1_data_5D4 = HuAudFXPlay(0x410);
arg0->unk01 = 0;
arg0->unk00_field1 = 1;
return;
}
if (arg0->unk01 == 25) {
BoardPlayerPosSet(GWSystem.player_curr, arg1->scale.x, arg1->scale.y, arg1->scale.z);
BoardPlayerMotionShiftSet(GWSystem.player_curr, 5, 0.0f, 8.0f, HU3D_MOTATTR_NONE);
}
if (arg0->unk01 < 25) {
OSu8tof32(&arg0->unk01, &temp_f29);
BoardPlayerPosGet(GWSystem.player_curr, &sp10);
sp10.x += arg1->trans.x;
sp10.z += arg1->trans.z;
sp10.y += 15.0f + -0.08166667f * temp_f29 * temp_f29;
if (sp10.y <= arg1->scale.y) {
sp10.y = arg1->scale.y;
}
var_f27 = arg1->trans.y + BoardPlayerRotYGet(GWSystem.player_curr);
BoardPlayerRotYSet(GWSystem.player_curr, var_f27);
BoardPlayerPosSetV(GWSystem.player_curr, &sp10);
if (arg0->unk01 > 12 && arg0->unk00_field3 != 0) {
if (lbl_1_data_5D8 == -1) {
lbl_1_data_5D8 = HuAudFXPlay(0x411);
}
OSu8tof32(&arg0->unk01, &temp_f29);
temp_f29 -= 12.0f;
temp_f29 = 90.0f * (temp_f29 / 12.5f);
var_f28 = cosd(temp_f29);
if (var_f28 < 0.1f) {
var_f28 = 0.1f;
}
var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]];
BoardModelScaleSet(var_r24, 1.0f, var_f28, 1.0f);
}
}
arg0->unk01++;
}
static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1)
{
Vec sp20;
Vec sp14;
Vec sp8;
BoardModelHookObjReset(arg0->unk04, lbl_1_data_604[lbl_1_bss_28]);
Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], &sp14);
BoardPlayerPosSetV(GWSystem.player_curr, &sp14);
BoardSpacePosGet(0, lbl_1_bss_24, &sp20);
VECSubtract(&sp20, &sp14, &sp8);
arg1->trans.x = sp8.x / 25.0f;
arg1->trans.z = sp8.z / 25.0f;
arg1->scale.x = sp20.x;
arg1->scale.y = sp20.y;
arg1->scale.z = sp20.z;
BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, HU3D_MOTATTR_NONE);
BoardPlayerRotYSet(GWSystem.player_curr, atan2d(sp8.x, sp8.z));
arg0->unk00_field1 = 3;
arg0->unk01 = 0;
}
static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1)
{
Vec sp14;
Vec sp8;
float var_f28;
float temp_f29;
s16 var_r27;
if (arg0->unk01 >= 55) {
BoardSpacePosGet(0, lbl_1_bss_24, &sp8);
GWPlayer[GWSystem.player_curr].space_curr = lbl_1_bss_24;
BoardPlayerPosSetV(GWSystem.player_curr, &sp8);
BoardPlayerIdleSet(GWSystem.player_curr);
var_r27 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]];
if (arg0->unk00_field3 != 0) {
BoardModelScaleSet(var_r27, 1.0f, 1.0f, 1.0f);
}
arg0->unk00_field0 = 1;
}
if (arg0->unk01 == 25) {
BoardPlayerPosSet(GWSystem.player_curr, arg1->scale.x, arg1->scale.y, arg1->scale.z);
BoardPlayerMotionShiftSet(GWSystem.player_curr, 5, 0.0f, 8.0f, HU3D_MOTATTR_NONE);
}
if (arg0->unk01 < 25) {
OSu8tof32(&arg0->unk01, &temp_f29);
BoardPlayerPosGet(GWSystem.player_curr, &sp14);
sp14.x += arg1->trans.x;
sp14.z += arg1->trans.z;
sp14.y += 15.0f + -0.08166667f * temp_f29 * temp_f29;
if (sp14.y <= arg1->scale.y) {
sp14.y = arg1->scale.y;
}
BoardPlayerPosSetV(GWSystem.player_curr, &sp14);
if (arg0->unk01 > 12 && arg0->unk00_field3 != 0) {
OSu8tof32(&arg0->unk01, &temp_f29);
temp_f29 -= 12.0f;
temp_f29 = 90.0f * (temp_f29 / 12.5f);
var_f28 = sind(temp_f29);
if (var_f28 < 0.1f) {
var_f28 = 0.1f;
}
var_r27 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]];
BoardModelScaleSet(var_r27, 1.0f, var_f28, 1.0f);
}
}
arg0->unk01++;
}
static void fn_1_6FB4(Bss18Work *arg0, omObjData *arg1)
{
Vec sp40;
Vec sp34;
Vec sp28;
Vec sp1C;
Vec sp10;
float var_f31;
BoardSpace *temp_r29;
s16 var_r22;
u32 temp_r3;
s32 var_r24;
s32 i;
if (arg0->unk00_field2 != 0) {
arg0->unk08 *= 0.9f;
if (arg0->unk08 <= 0.01f) {
arg0->unk08 = 0.0f;
fn_1_5694(0);
if (lbl_1_data_5D4 != -1) {
HuAudFXStop(lbl_1_data_5D4);
lbl_1_data_5D4 = -1;
}
fn_1_6A14(arg0, arg1);
}
BoardModelMotionSpeedSet(arg0->unk04, arg0->unk08);
for (i = 0; i < 3; i++) {
var_r22 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]];
BoardModelMotionSpeedSet(var_r22, arg0->unk08);
}
return;
}
if (lbl_1_bss_29 == 0) {
var_r24 = lbl_1_bss_0->unk01[lbl_1_bss_29] ^ 1;
}
else {
var_r24 = lbl_1_bss_0->unk01[lbl_1_bss_29];
}
temp_r29 = BoardSpaceGet(0, lbl_1_bss_26);
lbl_1_bss_24 = -1;
for (i = 0; i < temp_r29->link_cnt; i++) {
if (temp_r29->link[i] != -1) {
temp_r3 = BoardSpaceFlagGet(0, temp_r29->link[i]);
if ((temp_r3 & 0x200) && var_r24 == 0) {
lbl_1_bss_24 = temp_r29->link[i];
}
if ((temp_r3 & 0x100) && var_r24 != 0) {
lbl_1_bss_24 = temp_r29->link[i];
}
}
}
BoardSpacePosGet(0, lbl_1_bss_24, &sp40);
Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], &sp34);
var_f31 = BoardVecDistXZCalc(&sp40, &sp34);
if (var_f31 <= 300.0f) {
arg0->unk00_field2 = 1;
arg0->unk08 = 1.0f;
}
}
static void fn_1_7528(s32 arg0, s32 arg1)
{
Vec sp30;
Vec sp24;
Vec sp18;
float temp_f31;
float temp_f30;
s16 sp14[] = { 23, 28 };
BoardPlayerIdleSet(GWSystem.player_curr);
BoardSpacePosGet(0, arg1, &sp30);
BoardModelPosGet(lbl_1_bss_6C4[23], &sp24);
BoardModelPosGet(lbl_1_bss_6C4[28], &sp18);
temp_f31 = VECDistance(&sp24, &sp30);
temp_f30 = VECDistance(&sp18, &sp30);
if (temp_f31 < temp_f30) {
lbl_1_bss_29 = 0;
}
else {
lbl_1_bss_29 = 1;
}
BoardCameraTargetModelSet(lbl_1_bss_6C4[sp14[lbl_1_bss_29]]);
BoardCameraMotionWait();
HuPrcSleep(42);
fn_1_5B40();
BoardCameraTargetPlayerSet(GWSystem.player_curr);
BoardCameraMotionWait();
HuPrcSleep(12);
}
static void fn_1_77EC(s32 arg0, s32 arg1)
{
lbl_1_bss_6B4 = arg0;
lbl_1_bss_6B0 = 0;
lbl_1_bss_8 = HuPrcChildCreate(fn_1_7894, 0x2003, 0x2000, 0, boardMainProc);
HuPrcDestructorSet2(lbl_1_bss_8, fn_1_4FA8);
while (lbl_1_bss_8) {
HuPrcVSleep();
}
}
static void fn_1_7894(void)
{
lbl_1_bss_6B1 = 1;
WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
fn_1_7A64();
fn_1_45F4();
HuPrcEnd();
}
static void fn_1_7A64(void)
{
Vec sp34;
Vec sp28;
Vec sp1C;
Vec sp10;
float var_f30;
s16 var_r20;
s32 temp_r19;
s32 var_r28;
var_r28 = 0;
lbl_1_bss_674 = lbl_1_bss_670 = 0.18f;
lbl_1_bss_640 = 0.0f;
lbl_1_bss_660.x = 0.0f;
lbl_1_bss_660.y = 0.0f;
lbl_1_bss_660.z = 0.0f;
lbl_1_bss_6A8 = 0.0f;
lbl_1_bss_6B3 = 0;
lbl_1_bss_624.x = 0.0f;
lbl_1_bss_624.z = 0.0f;
lbl_1_bss_624.y = 1.0f;
lbl_1_bss_66C = 0.04f;
BoardSpaceAttrSet(0, 1);
fn_1_97F4();
BoardModelMotionStart(lbl_1_bss_6AE, 0, 0);
if (lbl_1_bss_0->unk00_field0 == 0) {
BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644);
lbl_1_bss_63C = -90.0f;
lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x2000, &sp34);
var_r20 = BoardSpaceFlagSearch(1, 0x1000);
}
else {
BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f);
lbl_1_bss_63C = 90.0f;
lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x1000, &sp34);
var_r20 = BoardSpaceFlagSearch(1, 0x2000);
}
lbl_1_bss_654 = sp34;
BoardCameraMotionStartEx(lbl_1_bss_6C4[0], NULL, NULL, 2400.0f, -1.0f, 2);
MTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C));
BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678);
BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f);
fn_1_3350();
lbl_1_bss_648 = lbl_1_bss_654;
lbl_1_bss_618 = lbl_1_bss_654;
lbl_1_bss_630 = lbl_1_bss_654;
fn_1_852C();
BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670);
BoardCameraMotionWait();
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1);
lbl_1_bss_6B0 = 1;
temp_r19 = HuAudFXPlay(0x412);
while (TRUE) {
fn_1_1990();
fn_1_3350();
fn_1_276C();
BoardModelPosSetV(lbl_1_bss_6C4[0], &lbl_1_bss_654);
BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678);
if (lbl_1_bss_0->unk00_field0 == 0) {
var_f30 = -lbl_1_bss_670;
}
else {
var_f30 = lbl_1_bss_670;
}
BoardModelMotionSpeedSet(lbl_1_bss_6AE, var_f30);
if (lbl_1_bss_0->unk00_field0 == 0) {
if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 20.0f && var_r28 == 0) {
WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
var_r28 = 1;
}
}
else {
if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644 - 20.0f && var_r28 == 0) {
WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
var_r28 = 1;
}
}
if (var_r28 != 0 && WipeStatGet() == 0) {
break;
}
HuPrcVSleep();
}
HuAudFXStop(temp_r19);
fn_1_98EC();
fn_1_87AC();
while (lbl_1_bss_C) {
HuPrcVSleep();
}
MTXIdentity(lbl_1_bss_678);
BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678);
lbl_1_bss_660.x = 0.0f;
lbl_1_bss_660.z = 0.0f;
lbl_1_bss_660.y = -lbl_1_bss_63C;
BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660);
BoardSpacePosGet(1, var_r20, &sp34);
BoardModelPosSetV(lbl_1_bss_6C4[0], &sp34);
BoardSpaceAttrReset(0, 1);
BoardCameraMoveSet(0);
BoardCameraTargetPlayerSet(lbl_1_bss_6B4);
BoardCameraViewSet(1);
BoardCameraMotionWait();
lbl_1_bss_6B2 = 1;
}
static s8 lbl_1_data_633 = -1;
static void fn_1_852C(void)
{
BssCWork *temp_r30;
BssCData *temp_r31;
Vec spC;
float temp_f31;
s16 sp8;
s16 var_r28;
s16 i;
u32 var_r27;
lbl_1_bss_C = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, fn_1_87E0);
temp_r30 = OM_GET_WORK_PTR(lbl_1_bss_C, BssCWork);
temp_r30->unk00_field0 = 0;
temp_r30->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(BssCData), MEMORY_DEFAULT_NUM);
memset(temp_r30->unk04, 0, 4 * sizeof(BssCData));
lbl_1_data_633 = -1;
lbl_1_bss_1C = 0;
for (temp_r30->unk01 = i = 0; i < 4; i++) {
temp_r31 = &temp_r30->unk04[temp_r30->unk01];
var_r28 = GWPlayer[i].space_curr;
sp8 = GWPlayer[i].character;
var_r27 = BoardSpaceFlagGet(0, var_r28);
if (!(var_r27 & 1)) {
temp_r31->unk00 = -1;
continue;
}
temp_r31->unk00 = 0;
temp_r31->unk01 = i;
temp_r31->unk02 = 0;
BoardPlayerPosGet(temp_r31->unk01, &spC);
temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0);
temp_f31 = BoardModelMotionMaxTimeGet(temp_r31->unk04);
BoardModelVisibilitySet(temp_r31->unk04, 0);
fn_1_95F4(temp_r31);
BoardModelMotionStart(temp_r31->unk04, 0, 0);
BoardModelMotionSpeedSet(temp_r31->unk04, 0.0f);
if (lbl_1_bss_0->unk00_field0 == 0) {
temp_r31->unk08 = -0.18f;
BoardModelMotionTimeSet(temp_r31->unk04, temp_f31);
}
else {
temp_r31->unk08 = 0.18f;
BoardModelMotionTimeSet(temp_r31->unk04, 0.0f);
}
fn_1_932C(temp_r31);
temp_r30->unk01++;
}
BoardCameraMoveSet(1);
BoardCameraTargetModelSet(lbl_1_bss_6C4[0]);
}
static void fn_1_87AC(void)
{
if (lbl_1_bss_C) {
OM_GET_WORK_PTR(lbl_1_bss_C, BssCWork)->unk00_field0 = 1;
}
}
static void fn_1_87E0(omObjData *arg0)
{
BssCWork *temp_r30 = OM_GET_WORK_PTR(arg0, BssCWork);
BssCData *temp_r31;
s32 i;
if (temp_r30->unk00_field0 != 0 || BoardIsKill()) {
for (i = 0; i < temp_r30->unk01; i++) {
temp_r31 = &temp_r30->unk04[i];
}
HuMemDirectFree(temp_r30->unk04);
lbl_1_bss_C = NULL;
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (lbl_1_bss_6B0 == 0) {
return;
}
for (i = 0; i < temp_r30->unk01; i++) {
temp_r31 = &temp_r30->unk04[i];
if (temp_r31->unk02 != 0) {
temp_r31->unk02--;
}
else {
switch (temp_r31->unk00) {
case 0:
fn_1_8988(temp_r31, arg0);
break;
case 1:
fn_1_8A50(temp_r31, arg0);
break;
case 2:
fn_1_8B6C(temp_r31, arg0);
break;
case 3:
fn_1_8DDC(temp_r31, arg0);
break;
case 4:
fn_1_918C(temp_r31, arg0);
break;
case 5:
fn_1_927C(temp_r31, arg0);
break;
}
}
}
}
static void fn_1_8988(BssCData *arg0, omObjData *arg1)
{
Vec sp20;
Vec sp14;
Vec sp8;
if (arg0->unk10 - lbl_1_bss_640 > 900.0f) {
return;
}
BoardModelPosGet(*lbl_1_bss_6C4, &sp20);
BoardPlayerPosGet(arg0->unk01, &sp14);
VECSubtract(&sp20, &sp14, &sp8);
BoardPlayerRotYSet(arg0->unk01, atan2d(sp8.x, sp8.z));
arg0->unk00 = 1;
}
static s32 lbl_1_data_634[8] = { 0x00000123, 0x00000163, 0x000001A3, 0x000001E3, 0x00000223, 0x00000263, 0x000002A3, 0x000002E3 };
static void fn_1_8A50(BssCData *arg0, omObjData *arg1)
{
if (lbl_1_data_633 == -1) {
BoardCameraTargetPlayerSet(arg0->unk01);
lbl_1_data_633 = arg0->unk01;
}
HuAudFXPlay(lbl_1_data_634[GWPlayer[arg0->unk01].character]);
BoardPlayerMotionStart(arg0->unk01, 9, 0);
BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f);
arg0->unk02 = lbl_1_bss_1C * 3 + 9;
arg0->unk00 = 2;
lbl_1_bss_1C++;
omVibrate(arg0->unk01, 12, 4, 2);
}
static void fn_1_8B6C(BssCData *arg0, omObjData *arg1)
{
ModelData *temp_r29;
HsfObject *var_r30;
Vec sp20;
Vec sp14;
Vec sp8;
float temp_f30;
float var_f31;
s16 var_r28;
BoardPlayerPosGet(arg0->unk01, &arg0->unk14);
BoardModelPosGet(lbl_1_bss_6C4[0], &sp20);
VECSubtract(&sp20, &arg0->unk14, &sp14);
BoardPlayerRotYSet(arg0->unk01, -atan2d(sp14.x, sp14.z));
BoardPlayerMotionStart(arg0->unk01, 3, 0x40000001);
BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f);
temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6AE);
var_r28 = BoardModelIDGet(lbl_1_bss_6AE);
temp_r29 = &Hu3DData[var_r28];
Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0);
var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1");
sp8.x = var_r30->data.curr.pos.x;
sp8.y = var_r30->data.curr.pos.y;
sp8.z = var_r30->data.curr.pos.z;
var_f31 = lbl_1_bss_640;
while (TRUE) {
Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0);
var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1");
sp14.x = sp8.x - var_r30->data.curr.pos.x;
sp14.y = sp8.y - var_r30->data.curr.pos.y;
sp14.z = sp8.z - var_r30->data.curr.pos.z;
var_f31 += VECMag(&sp14);
if (var_f31 >= arg0->unk10) {
break;
}
sp8.x = var_r30->data.curr.pos.x;
sp8.y = var_r30->data.curr.pos.y;
sp8.z = var_r30->data.curr.pos.z;
temp_r29->unk_64 += arg0->unk08;
}
BoardModelMotionStart(arg0->unk04, 0, 0);
BoardModelMotionTimeSet(arg0->unk04, temp_r29->unk_64);
BoardModelMotionSpeedSet(arg0->unk04, temp_r29->unk_68);
arg0->unk00 = 3;
BoardModelMotionTimeSet(lbl_1_bss_6AE, temp_f30);
}
static void fn_1_8DDC(BssCData *arg0, omObjData *arg1)
{
ModelData *temp_r29;
HsfObject *var_r30;
Vec *var_r27;
Vec *var_r26;
Vec sp48;
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
Vec spC;
Mtx sp54;
s16 var_r28;
var_r28 = BoardModelIDGet(arg0->unk04);
temp_r29 = &Hu3DData[var_r28];
Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0);
var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1");
sp30.x = var_r30->data.curr.pos.x;
sp30.y = var_r30->data.curr.pos.y;
sp30.z = var_r30->data.curr.pos.z;
VECSubtract(&sp30, &arg0->unk14, &sp24);
if (fn_1_94A8(arg0) != 0) {
BoardModelPosGet(lbl_1_bss_6C4[1], &sp18);
VECSubtract(&sp18, &sp30, &sp48);
VECNormalize(&sp48, &sp48);
var_r27 = &arg0->unk14;
var_r26 = &sp30;
BoardMTXCalcLookAt(sp54, var_r26, &sp48, var_r27);
MTXTranspose(sp54, arg0->unk20);
}
else {
if (sp24.z != 0.0f || sp24.x != 0.0f) {
sp3C.y = atan2d(sp24.x, sp24.z);
sp3C.x = -atan2d(sp24.y, VECMagXZ(&sp24));
}
else {
sp3C.x = sp3C.y = 0.0f;
}
MTXRotRad(sp54, 'x', MTXDegToRad(sp3C.x));
MTXRotRad(arg0->unk20, 'y', MTXDegToRad(sp3C.y));
MTXConcat(arg0->unk20, sp54, arg0->unk20);
}
BoardPlayerPosSetV(arg0->unk01, &sp30);
BoardPlayerRotSet(arg0->unk01, 0.0f, 0.0f, 0.0f);
BoardPlayerMtxSet(arg0->unk01, &arg0->unk20);
arg0->unk14 = sp30;
BoardSpacePosGet(0, arg0->unk06, &spC);
if (BoardVecMaxDistXZCheck(&spC, &sp30, 200.0f)) {
arg0->unk00 = 4;
}
}
static void fn_1_918C(BssCData *arg0, omObjData *arg1)
{
Vec sp20;
Vec sp14;
Vec sp8;
s32 var_r30;
MTXIdentity(arg0->unk20);
var_r30 = BoardSpaceLinkFlagSearch(0, arg0->unk06, 0x40);
BoardSpacePosGet(0, var_r30, &sp20);
BoardPlayerPosGet(arg0->unk01, &sp14);
BoardPlayerMtxSet(arg0->unk01, &arg0->unk20);
VECSubtract(&sp20, &sp14, &sp8);
BoardPlayerRotYSet(arg0->unk01, atan2d(-sp8.z, -sp8.x));
BoardPlayerPosLerpStart(arg0->unk01, &sp14, &sp20, 20);
arg0->unk00 = 5;
}
static void fn_1_927C(BssCData *arg0, omObjData *arg1)
{
s32 temp_r3;
if (!GWPlayer[arg0->unk01].moving) {
BoardPlayerIdleSet(arg0->unk01);
temp_r3 = BoardSpaceLinkFlagSearch(0, arg0->unk06, 0x40);
GWPlayer[arg0->unk01].space_curr = temp_r3;
arg0->unk00 = -1;
BoardPlayerMoveAwayStartCurr(temp_r3, 0);
}
}
static void fn_1_932C(BssCData *arg0)
{
BoardSpace *temp_r30;
BoardSpace *var_r26;
Vec sp20[2];
Vec sp14;
float spC[2];
s16 sp8[2];
s32 var_r29;
s32 var_r28;
s32 i;
for (var_r28 = i = 0; i < BoardSpaceCountGet(0); i++) {
temp_r30 = BoardSpaceGet(0, i + 1);
for (var_r29 = 0; var_r29 < temp_r30->link_cnt; var_r29++) {
var_r26 = BoardSpaceGet(0, temp_r30->link[var_r29]);
if (var_r26->flag & 0x40) {
sp8[var_r28] = i + 1;
BoardSpacePosGet(0, temp_r30->link[var_r29], &sp20[var_r28]);
var_r28++;
}
}
if (var_r28 >= 2) {
break;
}
}
if (lbl_1_bss_0->unk00_field0 == 0) {
BoardSpaceFlagPosGet(0, 0x1000, &sp14);
}
else {
BoardSpaceFlagPosGet(0, 0x2000, &sp14);
}
for (i = 0; i < 2; i++) {
spC[i] = VECSquareDistance(&sp14, &sp20[i]);
}
if (spC[0] < spC[1]) {
arg0->unk06 = sp8[0];
}
else {
arg0->unk06 = sp8[1];
}
}
static s32 fn_1_94A8(BssCData *arg0)
{
Vec sp14;
s16 spC[4];
float sp8;
s32 var_r30;
s32 var_r29;
s32 var_r26;
BoardSpace *var_r31;
BoardSpace *var_r27;
BoardSpace *var_r28;
BoardPlayerPosGet(arg0->unk01, &sp14);
var_r28 = NULL;
var_r26 = -1;
var_r30 = lbl_1_bss_6AC;
sp8 = 0.0f;
while (TRUE) {
var_r31 = BoardSpaceGet(1, var_r30);
if (lbl_1_bss_0->unk00_field0 == 0) {
var_r29 = var_r31->link[0];
}
else {
BoardSpaceLinkTargetListGet(1, var_r30, spC);
var_r29 = spC[0];
}
var_r27 = BoardSpaceGet(1, var_r29);
if (!var_r27) {
var_r27 = var_r31;
break;
}
if (BoardVecMaxDistXZCheck(&var_r31->pos, &sp14, 200.0f)) {
if (BoardVecMaxDistXZCheck(&var_r31->pos, &sp14, 100.0f)) {
break;
}
if (var_r28) {
var_r31 = var_r28;
break;
}
else {
var_r28 = var_r31;
}
}
var_r26 = var_r30;
var_r30 = var_r29;
}
if (var_r31->flag & 8) {
return 1;
}
else {
return 0;
}
}
static void fn_1_95F4(BssCData *arg0)
{
HsfObject *var_r30;
ModelData *temp_r29;
Vec sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
float temp_f30;
float var_f31;
s16 var_r28;
temp_f30 = BoardModelMotionMaxTimeGet(arg0->unk04);
if (lbl_1_bss_0->unk00_field0 == 0) {
BoardModelMotionTimeSet(arg0->unk04, temp_f30);
BoardModelMotionSpeedSet(arg0->unk04, -0.18f);
}
else {
BoardModelMotionTimeSet(arg0->unk04, 0.0f);
BoardModelMotionSpeedSet(arg0->unk04, 0.18f);
}
BoardPlayerPosGet(arg0->unk01, &sp14);
var_r28 = BoardModelIDGet(arg0->unk04);
temp_r29 = &Hu3DData[var_r28];
Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0);
var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1");
sp20.x = var_r30->data.curr.pos.x;
sp20.y = var_r30->data.curr.pos.y;
sp20.z = var_r30->data.curr.pos.z;
var_f31 = 0.0f;
while (TRUE) {
Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0);
var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1");
sp2C.x = var_r30->data.curr.pos.x;
sp2C.y = var_r30->data.curr.pos.y;
sp2C.z = var_r30->data.curr.pos.z;
VECSubtract(&sp2C, &sp20, &sp8);
var_f31 += VECMag(&sp8);
if (BoardVecMinDistCheck(&sp14, &sp2C, 150.0f)) {
break;
}
sp20 = sp2C;
temp_r29->unk_64 += temp_r29->unk_68;
}
arg0->unk10 = var_f31;
}
static void fn_1_97F4(void)
{
Bss20Work *temp_r30;
Bss20Data *var_r31;
s32 i;
if (lbl_1_bss_20) {
return;
}
lbl_1_bss_20 = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_9920);
temp_r30 = OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work);
temp_r30->unk00_field0 = 0;
temp_r30->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, 20 * sizeof(Bss20Data), MEMORY_DEFAULT_NUM);
var_r31 = temp_r30->unk04;
for (i = 0; i < 20; var_r31++, i++) {
var_r31->unk00 = -1;
var_r31->unk02 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 7), NULL, 0);
BoardModelVisibilitySet(var_r31->unk02, 0);
}
}
static void fn_1_98EC(void)
{
if (lbl_1_bss_20) {
OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work)->unk00_field0 = 1;
}
}
static void fn_1_9920(omObjData *arg0)
{
Bss20Work *temp_r31;
s32 i;
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work);
if (temp_r31->unk00_field0 != 0 || BoardIsKill()) {
for (i = 0; i < 20; i++) {
BoardModelKill(temp_r31->unk04[i].unk02);
}
HuMemDirectFree(temp_r31->unk04);
lbl_1_bss_20 = 0;
omDelObjEx(HuPrcCurrentGet(), arg0);
return;
}
if (lbl_1_bss_640 < 10.0f) {
return;
}
if (temp_r31->unk01 != 0) {
temp_r31->unk01--;
}
else {
temp_r31->unk01 = 2;
fn_1_9A24(temp_r31);
}
fn_1_9BBC(temp_r31);
}
static void fn_1_9A24(Bss20Work *arg0)
{
Bss20Data *temp_r31;
Mtx sp8;
s32 i;
s32 j;
if (lbl_1_bss_6B1 != 0) {
MTXTrans(sp8, 0.0f, 50.0f, -100.0f);
}
else {
MTXTrans(sp8, 0.0f, 70.0f, -100.0f);
}
MTXConcat(lbl_1_bss_678, sp8, sp8);
for (i = 0; i < 4; i++) {
for (j = 0; j < 20; j++) {
temp_r31 = &arg0->unk04[j];
if (temp_r31->unk00 == -1) {
temp_r31->unk00 = 10;
Hu3DMtxTransGet(sp8, &temp_r31->unk08);
VECAdd(&lbl_1_bss_654, &temp_r31->unk08, &temp_r31->unk08);
temp_r31->unk14.x = 0.0f;
temp_r31->unk14.y = 0.0f;
temp_r31->unk14.z = 0.001f;
temp_r31->unk04 = 1.0f;
BoardModelVisibilitySet(temp_r31->unk02, 1);
BoardModelLayerSet(temp_r31->unk02, 2);
BoardModelPosSetV(temp_r31->unk02, &temp_r31->unk08);
break;
}
}
}
}
static void fn_1_9BBC(Bss20Work *arg0)
{
Bss20Data *temp_r31;
s32 i;
for (i = 0; i < 20; i++) {
temp_r31 = &arg0->unk04[i];
if (temp_r31->unk00 == -1) {
continue;
}
temp_r31->unk00--;
if (temp_r31->unk00 == 0) {
temp_r31->unk00 = -1;
BoardModelVisibilitySet(temp_r31->unk02, 0);
}
else {
if (temp_r31->unk00 <= 3) {
temp_r31->unk04 = sind(30.0f * temp_r31->unk00);
}
VECAdd(&temp_r31->unk08, &temp_r31->unk14, &temp_r31->unk08);
BoardModelMtxSet(temp_r31->unk02, &lbl_1_bss_678);
BoardModelPosSetV(temp_r31->unk02, &temp_r31->unk08);
BoardModelScaleSet(temp_r31->unk02, temp_r31->unk04, temp_r31->unk04, temp_r31->unk04);
}
}
}