commit
de29ef2cf8
4 changed files with 1112 additions and 0 deletions
47
include/REL/w02Dll.h
Normal file
47
include/REL/w02Dll.h
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#ifndef W02DLL
|
||||
#define W02DLL
|
||||
|
||||
#include "math.h"
|
||||
#include "dolphin.h"
|
||||
#include "game/process.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/board/model.h"
|
||||
#include "game/board/space.h"
|
||||
#include "game/board/main.h"
|
||||
#include "game/board/player.h"
|
||||
#include "game/board/window.h"
|
||||
#include "game/board/map_object.h"
|
||||
|
||||
extern s16 lbl_1_bss_30[0x10]; // Model List
|
||||
|
||||
// main.c
|
||||
extern void fn_1_770();
|
||||
extern void fn_1_72C();
|
||||
extern s32 fn_1_774();
|
||||
extern s32 fn_1_800();
|
||||
extern void fn_1_92C();
|
||||
extern s32 fn_1_1128();
|
||||
extern void fn_1_121C(u32);
|
||||
|
||||
// roulette.c
|
||||
extern void fn_1_D3AC();
|
||||
extern s32 fn_1_D8C4();
|
||||
extern void fn_1_DF48();
|
||||
// unorganized
|
||||
extern void fn_1_394C(s32);
|
||||
extern void fn_1_3BF4();
|
||||
extern void fn_1_39F4();
|
||||
extern void fn_1_5CF8();
|
||||
extern void fn_1_5D28();
|
||||
extern void fn_1_5F90();
|
||||
extern void fn_1_79BC(s16* itemList);
|
||||
extern void fn_1_8244(s32);
|
||||
extern void fn_1_9250();
|
||||
extern void fn_1_93C8(s32 spaceFlag);
|
||||
extern void fn_1_BC1C();
|
||||
extern s32 fn_1_BE88();
|
||||
extern s32 fn_1_C108(s32);
|
||||
extern void fn_1_CD04(s32);
|
||||
extern void fn_1_E41C();
|
||||
|
||||
#endif //W02DLL
|
||||
24
src/REL/w02Dll/gamble.c
Normal file
24
src/REL/w02Dll/gamble.c
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#include "REL/w02Dll.h"
|
||||
|
||||
Process* lbl_1_bss_50;
|
||||
s32 lbl_1_bss_54;
|
||||
|
||||
void fn_1_2D04();
|
||||
|
||||
|
||||
void fn_1_3938(void) {
|
||||
lbl_1_bss_50 = NULL;
|
||||
}
|
||||
|
||||
|
||||
void fn_1_394C(s32 arg0) {
|
||||
s32 currPlayer;
|
||||
currPlayer = GWSystem.player_curr;
|
||||
|
||||
lbl_1_bss_54 = arg0;
|
||||
lbl_1_bss_50 = HuPrcChildCreate(fn_1_2D04, 0x2003U, 0x2000U, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_50, fn_1_3938);
|
||||
while (lbl_1_bss_50) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
457
src/REL/w02Dll/main.c
Normal file
457
src/REL/w02Dll/main.c
Normal file
|
|
@ -0,0 +1,457 @@
|
|||
#include "REL/w02Dll.h"
|
||||
|
||||
// Temporary defines
|
||||
#define BOARD_ITEM_MINI 0x0
|
||||
#define BOARD_ITEM_MEGA 0x1
|
||||
#define BOARD_ITEM_SUPERMINI 0x2
|
||||
#define BOARD_ITEM_SUPERMEGA 0x3
|
||||
#define BOARD_ITEM_HAMMER 0x4
|
||||
#define BOARD_ITEM_PIPE 0x5
|
||||
#define BOARD_ITEM_CARD 0x6
|
||||
#define BOARD_ITEM_SPARKY 0x7
|
||||
#define BOARD_ITEM_GADDLIGHT 0x8
|
||||
#define BOARD_ITEM_CHOMPCALL 0x9
|
||||
#define BOARD_ITEM_SUIT 0xA
|
||||
#define BOARD_ITEM_BOO 0xB
|
||||
#define BOARD_ITEM_LAMP 0xC
|
||||
#define BOARD_ITEM_BAG 0xD
|
||||
#define BOARD_ITEM_MAX 0xE
|
||||
#define BOARD_ITEM_NONE -1
|
||||
|
||||
/* BSS */
|
||||
s16 lbl_1_bss_30[0x10]; // Model List
|
||||
s16 lbl_1_bss_2E;
|
||||
s16 lbl_1_bss_2C;
|
||||
Point3d lbl_1_bss_20;
|
||||
Point3d lbl_1_bss_14;
|
||||
s32* lbl_1_bss_10;
|
||||
s16 lbl_1_bss_8[4]; // Item List
|
||||
Process* lbl_1_bss_4;
|
||||
u8* lbl_1_bss_0;
|
||||
|
||||
/* DATA */
|
||||
static BoardMapObject lbl_1_data_0[0x10] = {
|
||||
{{2550.0f, 0.0f, -450.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000C)},
|
||||
{{-3150.0f, 0.0f, -1350.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000D)},
|
||||
{{-3150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000E)},
|
||||
{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0008)},
|
||||
{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0009)},
|
||||
{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000A)},
|
||||
{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000B)},
|
||||
{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0011)},
|
||||
{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0012)},
|
||||
{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0015)},
|
||||
{{-300.0f, 0.0f, -900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0016)},
|
||||
{{1175.0f, 0.0f, -125.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)},
|
||||
{{-525.0f, 0.0f, -825.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)},
|
||||
{{-2225.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)},
|
||||
{{1925.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)},
|
||||
{{150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)}
|
||||
};
|
||||
|
||||
// Special Models
|
||||
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[] = {
|
||||
DATA_MAKE_NUM(0x0076, 0x0004),
|
||||
DATA_NUM_LISTEND
|
||||
};
|
||||
s32 lbl_1_data_290[] = {
|
||||
DATA_MAKE_NUM(0x0076, 0x0004),
|
||||
DATA_MAKE_NUM(0x0076, 0x0004),
|
||||
DATA_MAKE_NUM(0x0076, 0x0004),
|
||||
DATA_MAKE_NUM(0x0076, 0x0004),
|
||||
DATA_NUM_LISTEND,
|
||||
0x00000000 // Padding
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
//Actual externs
|
||||
extern void BoardMusStart(s32, s32, s32, s32);
|
||||
extern void BoardAudSeqPause(s32, s32, s32);
|
||||
s8 BoardComPreferItemCheck(s32, s8, s8, s8);
|
||||
extern void BoardComKeySetLeft();
|
||||
extern void BoardComKeySetRight();
|
||||
extern void CharModelDataClose(s16);
|
||||
extern u32 frand();
|
||||
extern u32 frandmod(u32);
|
||||
|
||||
// function is probably global. only inlined in rels?
|
||||
inline s32 get_current_board(void) {
|
||||
return GWSystem.board;
|
||||
}
|
||||
|
||||
void BoardCreate(void) {
|
||||
s32 i, boardData;
|
||||
BoardMapObject* modelTransform;
|
||||
|
||||
boardData = get_current_board();
|
||||
lbl_1_bss_0 = GWSystem.board_data;
|
||||
BoardSpaceInit(0x760000);
|
||||
lbl_1_data_280 = BoardModelCreate(0x760001, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_280, -1.0f);
|
||||
BoardModelPosSet(lbl_1_data_280, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_280, 0, 0x40000001);
|
||||
BoardModelMotionSpeedSet(lbl_1_data_280, 0.1f);
|
||||
lbl_1_data_282 = BoardModelCreate(0x760002, NULL, 0);
|
||||
fn_8006DDE8(lbl_1_data_282, -1.0f);
|
||||
BoardModelPosSet(lbl_1_data_282, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_282, 0, 0x40000001);
|
||||
lbl_1_data_284 = BoardModelCreate(0x760003, lbl_1_data_288, 0);
|
||||
BoardModelPosSet(lbl_1_data_284, 0.0f, 0.0f, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_data_284, 1, 0x40000001);
|
||||
lbl_1_data_286 = BoardModelCreate(0x20005, lbl_1_data_290, 0);
|
||||
BoardModelMotionStart(lbl_1_data_286, 1, 0x40000001);
|
||||
BoardLightHookSet(fn_1_72C, fn_1_770);
|
||||
|
||||
for(i = 0; i < 0x10; i++) {
|
||||
modelTransform = &lbl_1_data_0[i];
|
||||
if (modelTransform->data_num != -1) {
|
||||
if ((i == 0xB) || (i == 0xC) || (i == 0xD) || (i == 0xE) || (i == 0xF)) {
|
||||
lbl_1_bss_10 = lbl_1_data_290;
|
||||
} else {
|
||||
lbl_1_bss_10 = NULL;
|
||||
}
|
||||
lbl_1_bss_30[i] = BoardModelCreate(modelTransform->data_num, lbl_1_bss_10, 0);
|
||||
BoardModelPosSetV(lbl_1_bss_30[i], &modelTransform->pos);
|
||||
BoardModelRotSetV(lbl_1_bss_30[i], &modelTransform->rot);
|
||||
BoardModelScaleSetV(lbl_1_bss_30[i], &modelTransform->scale);
|
||||
BoardModelVisibilitySet(lbl_1_bss_30[i], 1);
|
||||
if (lbl_1_bss_10 != NULL) {
|
||||
BoardModelMotionStart(lbl_1_bss_30[i], 1, 0x40000001);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BoardModelAttrSet(lbl_1_bss_30[0], 0x40000002);
|
||||
BoardModelAttrSet(lbl_1_bss_30[1], 0x40000002);
|
||||
BoardModelAttrSet(lbl_1_bss_30[2], 0x40000002);
|
||||
fn_1_BC1C();
|
||||
fn_1_92C();
|
||||
BoardModelPosGet(lbl_1_bss_30[13], &lbl_1_bss_20);
|
||||
BoardModelPosGet(lbl_1_bss_30[14], &lbl_1_bss_14);
|
||||
lbl_1_bss_2E = BoardModelCreate(0x760010, NULL, 1);
|
||||
lbl_1_bss_2C = BoardModelCreate(0x760010, NULL, 1);
|
||||
fn_1_9250();
|
||||
BoardSpaceWalkEventFuncSet(fn_1_800);
|
||||
BoardSpaceWalkMiniEventFuncSet(fn_1_1128);
|
||||
BoardSpaceLandEventFuncSet(fn_1_774);
|
||||
BoardStarHostSet(lbl_1_data_284);
|
||||
BoardBooHouseHostSet(lbl_1_data_286);
|
||||
BoardLotteryHostSet(lbl_1_data_286);
|
||||
BoardShopHostSet(lbl_1_data_286);
|
||||
BoardJunctionMaskSet(0xE);
|
||||
BoardJunctionMaskSet(0x30);
|
||||
}
|
||||
|
||||
void BoardDestroy(void) {
|
||||
/* Kill Model List */
|
||||
s32 i;
|
||||
for (i = 0; i < 0x10; i++) {
|
||||
if (lbl_1_bss_30[i] != 0) {
|
||||
BoardModelKill(lbl_1_bss_30[i]);
|
||||
lbl_1_bss_30[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Kill Special Models */
|
||||
if (lbl_1_data_286 != -1) {
|
||||
BoardModelKill(lbl_1_data_286);
|
||||
lbl_1_data_286 = -1;
|
||||
}
|
||||
if (lbl_1_data_284 != -1) {
|
||||
BoardModelKill(lbl_1_data_284);
|
||||
lbl_1_data_284 = -1;
|
||||
}
|
||||
if (lbl_1_data_280 != -1) {
|
||||
BoardModelKill(lbl_1_data_280);
|
||||
lbl_1_data_280 = -1;
|
||||
}
|
||||
if (lbl_1_data_282 != -1) {
|
||||
BoardModelKill(lbl_1_data_282);
|
||||
lbl_1_data_282 = -1;
|
||||
}
|
||||
BoardSpaceDestroy();
|
||||
}
|
||||
|
||||
void fn_1_72C(void) {
|
||||
s16 var = BoardModelIDGet(lbl_1_data_280);
|
||||
Hu3DModelLightInfoSet(var, 1);
|
||||
}
|
||||
|
||||
void fn_1_770(void) {
|
||||
|
||||
}
|
||||
|
||||
/* Decrement current space's [UNKNOWN] flag */
|
||||
s32 fn_1_774(void) {
|
||||
u32 unkFlag;
|
||||
u32 currPlayer;
|
||||
u32 currSpace;
|
||||
u32 spaceFlags;
|
||||
currPlayer = GWSystem.player_curr;
|
||||
currSpace = GWPlayer[currPlayer].space_curr;
|
||||
spaceFlags = BoardSpaceFlagGet(0, currSpace);
|
||||
//temp_r31 = (temp_r)
|
||||
unkFlag = (spaceFlags & 0x1C0) >> 6;
|
||||
if (unkFlag != 0) {
|
||||
unkFlag--;
|
||||
fn_1_93C8(unkFlag);
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if can iteract with board object? */
|
||||
s32 fn_1_800(void) {
|
||||
BoardSpace* currSpace;
|
||||
s32 currPlayer;
|
||||
s32 var_r29;
|
||||
|
||||
currPlayer = GWSystem.player_curr;
|
||||
currSpace = BoardSpaceGet(0, GWPlayer[currPlayer].space_curr);
|
||||
if ((currSpace->flag & 0x30) != 0) {
|
||||
|
||||
|
||||
// If mega mushroom state return
|
||||
if (BoardPlayerSizeGet(currPlayer) == 2) {
|
||||
return 0;
|
||||
}
|
||||
// If using the bowser suit return
|
||||
if (GWPlayer[currPlayer].bowser_suit) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((currSpace->flag & 0x20) != 0 && (currSpace->flag & 0x10) != 0) {
|
||||
var_r29 = 2;
|
||||
} else if ((currSpace->flag & 0x20) != 0) {
|
||||
var_r29 = 1;
|
||||
} else {
|
||||
var_r29 = 0;
|
||||
}
|
||||
fn_1_394C(var_r29);
|
||||
return 1;
|
||||
}
|
||||
if ((currSpace->flag & 1) != 0) {
|
||||
fn_1_E41C();
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fn_1_92C(void) {
|
||||
fn_1_39F4();
|
||||
fn_1_5CF8();
|
||||
}
|
||||
|
||||
void fn_1_950(void) {
|
||||
|
||||
}
|
||||
|
||||
void fn_1_954(void) {
|
||||
HuPrcSleep(0x3C);
|
||||
BoardMusStart(1, 0x12, 0x7F, 0);
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
void fn_1_990(void) {
|
||||
Vec rotation;
|
||||
Vec offset;
|
||||
Vec boardSpacePos;
|
||||
|
||||
s32 textChoice;
|
||||
s32 currPlayer;
|
||||
s32 currSpace;
|
||||
s32 spaceLinkFlag;
|
||||
|
||||
|
||||
currPlayer = GWSystem.player_curr;
|
||||
BoardWinCreateChoice(2, 0x130011U, 4, 0);
|
||||
if (GWPlayer[currPlayer].com) {
|
||||
if ((s32) (frand() & 1) != 0) {
|
||||
BoardComKeySetLeft();
|
||||
} else {
|
||||
BoardComKeySetRight();
|
||||
}
|
||||
}
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
textChoice = BoardWinChoiceGet();
|
||||
if ((textChoice == 1) || (textChoice == -1)) {
|
||||
BoardWinCreate(2, 0x130012U, 4);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
BoardMGExit();
|
||||
while (BoardMGDoneFlagGet() != 1) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardMGDoneFlagSet(0);
|
||||
return;
|
||||
}
|
||||
BoardAudSeqPause(0, 1, 0x3E8);
|
||||
HuPrcChildCreate(fn_1_954, 0x2003U, 0x1000U, 0, boardMainProc);
|
||||
rotation.x = 0.0f;
|
||||
rotation.y = rotation.z = 0.0f;
|
||||
offset.y = 135.0f;
|
||||
offset.x = offset.z = 0.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_30[8], &rotation, &offset, 1200.0f, 25.0f, 0x15);
|
||||
currSpace = GWPlayer[currPlayer].space_curr;
|
||||
spaceLinkFlag = BoardSpaceLinkFlagSearch(0, currSpace, 0x02000000U);
|
||||
BoardSpacePosGet(0, spaceLinkFlag, &boardSpacePos);
|
||||
BoardPlayerMoveBetween(currPlayer, currSpace, spaceLinkFlag);
|
||||
while (GWPlayer[currPlayer].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardPlayerMotionStart(currPlayer, 1, 0x40000001);
|
||||
fn_1_3BF4();
|
||||
|
||||
while (GWPlayer[currPlayer].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
while (BoardEventFlagGet() != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
while (GWPlayer[currPlayer].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardPlayerMotionStart(currPlayer, 1, 0x40000001);
|
||||
}
|
||||
|
||||
void fn_1_C50(void) {
|
||||
Vec rotation;
|
||||
Vec offset;
|
||||
s32 currSpace;
|
||||
s32 spaceLinkFlags;
|
||||
s32 textChoice;
|
||||
s32 currPlayer;
|
||||
s32 i, j;
|
||||
|
||||
currPlayer = GWSystem.player_curr;
|
||||
if (BoardPlayerItemCount((s32) currPlayer) == 3) {
|
||||
BoardWinCreate(2, 0x13001A, 4);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
HuPrcEnd();
|
||||
}
|
||||
BoardCameraTargetModelSet(lbl_1_bss_30[10]);
|
||||
BoardCameraMotionWait();
|
||||
|
||||
/* Generate three random unique items where
|
||||
the first item is MINI_MUSHROOM and the
|
||||
other two are not BOWSER_SUIT or ITEM_BAG.
|
||||
*/
|
||||
lbl_1_bss_8[0] = BOARD_ITEM_MINI;
|
||||
for (i = 1; i < 3;) {
|
||||
lbl_1_bss_8[i] = frandmod(BOARD_ITEM_MAX);
|
||||
if (lbl_1_bss_8[i] != BOARD_ITEM_SUIT && lbl_1_bss_8[i] != BOARD_ITEM_BAG) {
|
||||
for (j = 0; j < i; j++) {
|
||||
if (lbl_1_bss_8[i] == lbl_1_bss_8[j]) {
|
||||
lbl_1_bss_8[i] = BOARD_ITEM_NONE;
|
||||
}
|
||||
}
|
||||
if (lbl_1_bss_8[i] != BOARD_ITEM_NONE) {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
fn_1_79BC(lbl_1_bss_8);
|
||||
|
||||
HuAudFXPlay(0x43);
|
||||
BoardWinCreateChoice(2, 0x130016, 4, 0);
|
||||
if (GWPlayer[currPlayer].com) {
|
||||
if (BoardComPreferItemCheck(currPlayer, lbl_1_bss_8[0], lbl_1_bss_8[1], lbl_1_bss_8[2]) != -1) {
|
||||
BoardComKeySetLeft();
|
||||
} else {
|
||||
BoardComKeySetRight();
|
||||
}
|
||||
}
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
textChoice = BoardWinChoiceGet();
|
||||
if ((textChoice == 1) || (textChoice == -1)) {
|
||||
HuAudFXPlay(0x44);
|
||||
BoardWinCreate(2, 0x130017, 4);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
BoardMGExit();
|
||||
fn_1_8244(1);
|
||||
while (BoardMGDoneFlagGet() != 1) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardMGDoneFlagSet(0);
|
||||
fn_1_5F90();
|
||||
HuPrcEnd();
|
||||
}
|
||||
rotation.x = -30.0f;
|
||||
rotation.y = rotation.z = 0.0f;
|
||||
offset.x = 0.0f;
|
||||
offset.y = 0.0f;
|
||||
offset.z = -250.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_30[10], (Point3d* ) &rotation, (Point3d* ) &offset, 1500.0f, 25.0f, 0x15);
|
||||
currSpace = GWPlayer[currPlayer].space_curr;
|
||||
spaceLinkFlags = BoardSpaceLinkFlagSearch(0, currSpace, 0x02000000U);
|
||||
BoardPlayerMoveBetween(currPlayer, currSpace, spaceLinkFlags);
|
||||
while (GWPlayer[currPlayer].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardPlayerMotionStart((s32) currPlayer, 1, 0x40000001);
|
||||
BoardPlayerMotBlendSet(currPlayer, 0xB4, 0xF);
|
||||
while (BoardPlayerMotBlendCheck(currPlayer) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardCameraMotionWait();
|
||||
fn_1_5D28();
|
||||
while (BoardEventFlagGet() != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
fn_1_8244(0);
|
||||
while (GWPlayer[currPlayer].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
fn_1_5F90();
|
||||
BoardPlayerMotionStart((s32) currPlayer, 1, 0x40000001);
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
void fn_1_1070(void) {
|
||||
BoardWinKill();
|
||||
CharModelDataClose(-1);
|
||||
lbl_1_bss_4 = 0;
|
||||
}
|
||||
|
||||
void fn_1_10A8(void) {
|
||||
lbl_1_bss_4 = HuPrcChildCreate(fn_1_C50, 0x2003U, 0x2000U, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1070);
|
||||
while (lbl_1_bss_4) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
s32 fn_1_1128(void) {
|
||||
u32 spaceFlags;
|
||||
s16 currSpace;
|
||||
currSpace = GWPlayer[GWSystem.player_curr].space_curr;
|
||||
spaceFlags = BoardSpaceFlagGet(0, currSpace) & 0x600000;
|
||||
BoardDiceDigit2DShowSet(0);
|
||||
|
||||
if (spaceFlags & 0x200000) {
|
||||
fn_1_990();
|
||||
} else if (spaceFlags & 0x400000) {
|
||||
lbl_1_bss_4 = HuPrcChildCreate(fn_1_C50, 0x2003U, 0x2000U, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1070);
|
||||
while (lbl_1_bss_4) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
BoardDiceDigit2DShowSet(1);
|
||||
}
|
||||
|
||||
void fn_1_121C(u32 mesg) {
|
||||
BoardWinCreate(2, mesg, 4);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
}
|
||||
|
||||
f32 const padMain = 0.0f;
|
||||
584
src/REL/w02Dll/roulette.c
Normal file
584
src/REL/w02Dll/roulette.c
Normal file
|
|
@ -0,0 +1,584 @@
|
|||
#include "REL/w02Dll.h"
|
||||
#include "game/audio.h"
|
||||
|
||||
#define ROULETTE_CHOICE_YES 0
|
||||
#define ROULETTE_CHOICE_NO 1
|
||||
#define ROULETTE_CHOICE_MAP 2
|
||||
|
||||
#define BRIBE_CHOICE_20 0
|
||||
#define BRIBE_CHOICE_10 1
|
||||
#define BRIBE_CHOICE_5 2
|
||||
#define BRIBE_CHOICE_NVM 3
|
||||
#define BRIBE_CHOICE_INVALID -1
|
||||
|
||||
/* RODATA */
|
||||
extern f32 lbl_1_rodata_408;
|
||||
extern f32 lbl_1_rodata_40C;
|
||||
extern f32 lbl_1_rodata_410;
|
||||
extern f32 lbl_1_rodata_414;
|
||||
extern f32 lbl_1_rodata_418;
|
||||
extern f32 lbl_1_rodata_41C;
|
||||
extern f32 lbl_1_rodata_420;
|
||||
extern f32 lbl_1_rodata_424;
|
||||
extern f32 lbl_1_rodata_428;
|
||||
extern f32 lbl_1_rodata_42C;
|
||||
extern f32 lbl_1_rodata_430;
|
||||
extern f32 lbl_1_rodata_434;
|
||||
extern f32 lbl_1_rodata_438;
|
||||
extern f32 lbl_1_rodata_43C;
|
||||
extern f32 lbl_1_rodata_440;
|
||||
extern f32 lbl_1_rodata_444;
|
||||
extern f32 lbl_1_rodata_448;
|
||||
extern f64 lbl_1_rodata_450;
|
||||
extern f64 lbl_1_rodata_458;
|
||||
extern f32 lbl_1_rodata_460;
|
||||
extern f32 lbl_1_rodata_464;
|
||||
extern f32 lbl_1_rodata_468;
|
||||
extern f32 lbl_1_rodata_46C;
|
||||
extern f32 lbl_1_rodata_470;
|
||||
extern f32 lbl_1_rodata_474;
|
||||
extern f32 lbl_1_rodata_478;
|
||||
extern f32 lbl_1_rodata_47C;
|
||||
extern f64 lbl_1_rodata_480;
|
||||
extern f64 lbl_1_rodata_488;
|
||||
extern f32 lbl_1_rodata_490;
|
||||
extern f32 lbl_1_rodata_494;
|
||||
extern f64 lbl_1_rodata_498;
|
||||
extern f64 lbl_1_rodata_4A0;
|
||||
extern f32 lbl_1_rodata_4A8;
|
||||
extern f32 lbl_1_rodata_4AC;
|
||||
extern f32 lbl_1_rodata_4B0;
|
||||
extern f32 lbl_1_rodata_4B8;
|
||||
extern f32 lbl_1_rodata_4C0;
|
||||
extern f32 lbl_1_rodata_4C4;
|
||||
extern f32 lbl_1_rodata_4C8;
|
||||
extern f32 lbl_1_rodata_4CC;
|
||||
extern f64 lbl_1_rodata_4D0;
|
||||
extern f32 lbl_1_rodata_4D8;
|
||||
extern f32 lbl_1_rodata_4DC;
|
||||
|
||||
/* DATA */
|
||||
extern s32 lbl_1_data_4D0[];
|
||||
|
||||
/* BSS */
|
||||
extern s32 lbl_1_bss_38C;
|
||||
extern s16 lbl_1_bss_388;
|
||||
extern s32 lbl_1_bss_384;
|
||||
extern f32 lbl_1_bss_380;
|
||||
|
||||
//Function Externs
|
||||
extern s16 BoardBowserSuitModelGet();
|
||||
extern s16 BoardBowserSuitPlayerModelGet();
|
||||
extern void BoardComKeySetDown();
|
||||
extern void BoardComKeySetUp();
|
||||
extern void omVibrate(s16 player, s16 duration, s16 off, s16 on);
|
||||
extern u32 frand();
|
||||
|
||||
//Local Functions
|
||||
s32 fn_1_E2AC(void);
|
||||
void fn_1_E310(f32);
|
||||
|
||||
// Unknown Structures
|
||||
typedef struct UnkPoint {
|
||||
f32 unk00;
|
||||
Vec point;
|
||||
} UnkPoint;
|
||||
|
||||
|
||||
/* FUNCTIONS */
|
||||
void fn_1_BC1C(void) {
|
||||
Point3d sp8;
|
||||
|
||||
BoardModelPosGet(lbl_1_bss_30[15], &sp8);
|
||||
sp8.z -= lbl_1_rodata_408;
|
||||
sp8.y += lbl_1_rodata_40C;
|
||||
BoardModelPosSetV(lbl_1_bss_30[6], &sp8);
|
||||
BoardModelAttrSet(lbl_1_bss_30[5], 0x40000002);
|
||||
BoardModelMotionTimeSet(lbl_1_bss_30[5], lbl_1_rodata_410);
|
||||
BoardModelRotGet(lbl_1_bss_30[15], &sp8);
|
||||
sp8.y = lbl_1_rodata_410;
|
||||
BoardModelRotSetV(lbl_1_bss_30[15], &sp8);
|
||||
}
|
||||
|
||||
void fn_1_BCFC(void) {
|
||||
s32 spaceLinkFlags;
|
||||
s32 temp_r30;
|
||||
s32 temp_r29;
|
||||
|
||||
BoardDiceDigit2DShowSet(0);
|
||||
spaceLinkFlags = BoardSpaceLinkFlagSearch(0, (s32) GWPlayer[lbl_1_bss_388].space_curr, 2U);
|
||||
BoardPlayerMoveToAsync(lbl_1_bss_388, spaceLinkFlags);
|
||||
while (GWPlayer[lbl_1_bss_388].moving) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardRotateDiceNumbers((s32) lbl_1_bss_388);
|
||||
BoardCameraViewSet(2);
|
||||
BoardCameraMotionWait();
|
||||
BoardPlayerMotBlendSet((s32) lbl_1_bss_388, 0x5A, 0xF);
|
||||
while (BoardPlayerMotBlendCheck((s32) lbl_1_bss_388) == 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelRotYSet(lbl_1_bss_30[15], lbl_1_rodata_414);
|
||||
fn_1_121C(0x130000);
|
||||
HuAudFXPlay(0x44);
|
||||
temp_r29 = fn_1_BE88();
|
||||
BoardStatusShowSetAll(0);
|
||||
fn_1_121C(0x130001);
|
||||
temp_r30 = fn_1_C108(temp_r29);
|
||||
fn_1_CD04(temp_r30);
|
||||
BoardCameraViewSet(1);
|
||||
BoardStatusShowSetAll(1);
|
||||
BoardCameraMotionWait();
|
||||
BoardDiceDigit2DShowSet(1);
|
||||
HuPrcKill(NULL);
|
||||
while(TRUE) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
s32 fn_1_BE74(void) {
|
||||
lbl_1_bss_38C = 0;
|
||||
}
|
||||
|
||||
s32 fn_1_BE88(void) {
|
||||
s32 coinAmount;
|
||||
s32 var_r30;
|
||||
s16 playerCoinRegion;
|
||||
s32 bribeChoice;
|
||||
s32 i;
|
||||
s32 rouletteChoice;
|
||||
s32 mesg;
|
||||
|
||||
var_r30 = -1;
|
||||
coinAmount = BoardPlayerCoinsGet((s32) lbl_1_bss_388);
|
||||
if (coinAmount < 5) {
|
||||
return var_r30;
|
||||
}
|
||||
fn_1_121C(0x130002);
|
||||
|
||||
do {
|
||||
BoardWinCreateChoice(2, 0x13001DU, 4, 0);
|
||||
/* COM has 50% to bribe goomba */
|
||||
if (GWPlayer[lbl_1_bss_388].com) {
|
||||
if (frand() & 1) {
|
||||
BoardComKeySetRight();
|
||||
} else {
|
||||
BoardComKeySetLeft();
|
||||
}
|
||||
}
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
rouletteChoice = BoardWinChoiceGet();
|
||||
// If chose to play roulette
|
||||
if (rouletteChoice == ROULETTE_CHOICE_YES) {
|
||||
BoardWinCreateChoice(1, 0x130003U, 4, 0);
|
||||
playerCoinRegion = 3;
|
||||
if (coinAmount < 0x14) {
|
||||
BoardWinChoiceDisable(0);
|
||||
playerCoinRegion--;
|
||||
}
|
||||
if (coinAmount < 0xA) {
|
||||
BoardWinChoiceDisable(1);
|
||||
playerCoinRegion--;
|
||||
}
|
||||
/* COM always bribes max unless it has 20 or
|
||||
more coins. Then 50% max, 50% 10 coin bribe. */
|
||||
if (GWPlayer[lbl_1_bss_388].com) {
|
||||
if (playerCoinRegion < 2) {
|
||||
BoardComKeySetUp();
|
||||
} else if (frand() & 1) {
|
||||
BoardComKeySetUp();
|
||||
} else {
|
||||
BoardComKeySetDown();
|
||||
}
|
||||
}
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
bribeChoice = BoardWinChoiceGet();
|
||||
if (bribeChoice == BRIBE_CHOICE_INVALID ||
|
||||
bribeChoice == BRIBE_CHOICE_NVM) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Coin amount is now the bribe amount in coins
|
||||
switch (bribeChoice) {
|
||||
case BRIBE_CHOICE_20:
|
||||
mesg = 0x130004;
|
||||
coinAmount = 0x14;
|
||||
var_r30 = 0x5A; // 90%
|
||||
break;
|
||||
case BRIBE_CHOICE_10:
|
||||
mesg = 0x130005;
|
||||
coinAmount = 0xA;
|
||||
var_r30 = 0x3C; // 60%
|
||||
break;
|
||||
case BRIBE_CHOICE_5:
|
||||
mesg = 0x130006;
|
||||
coinAmount = 5;
|
||||
var_r30 = 0x1E; // 30%
|
||||
break;
|
||||
}
|
||||
fn_1_121C(mesg);
|
||||
|
||||
|
||||
for (i = 0; i < coinAmount; i++) {
|
||||
BoardPlayerCoinsAdd(lbl_1_bss_388, -1);
|
||||
HuAudFXPlay(0xE);
|
||||
HuPrcSleep(6);
|
||||
}
|
||||
HuAudFXPlay(0xF);
|
||||
// If chose to view map
|
||||
} else if (rouletteChoice == ROULETTE_CHOICE_MAP) {
|
||||
BoardViewMapExec(lbl_1_bss_388);
|
||||
}
|
||||
} while (rouletteChoice == ROULETTE_CHOICE_MAP); // While viewing map
|
||||
if (var_r30 == -1) {
|
||||
fn_1_121C(0x130007);
|
||||
}
|
||||
return var_r30;
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/rctvo
|
||||
s32 fn_1_C108(s32 arg0) {
|
||||
Vec sp34;
|
||||
Vec sp28;
|
||||
Vec sp1C;
|
||||
UnkPoint spC;
|
||||
|
||||
|
||||
f32 var_f27;
|
||||
f32 var_f26;
|
||||
f32 var_f25;
|
||||
f32 var_f28;
|
||||
f32 var_f29;
|
||||
f64 var_f30;
|
||||
f32 var_f31;
|
||||
|
||||
s32 var_r26;
|
||||
s32 var_r27;
|
||||
s16 var_r28;
|
||||
s32 var_r30;
|
||||
s32 var_r29;
|
||||
s32 i;
|
||||
|
||||
if ((s32) frandmod(0x64U) < arg0) {
|
||||
s32 temp_r25 = fn_1_E2AC();
|
||||
var_r27 = 4;
|
||||
var_r29 = frandmod(3U);
|
||||
if ((s32) frandmod(0x64U) < 0x14) {
|
||||
var_r29 += 1;
|
||||
}
|
||||
var_r29 = var_r29 + (3 - temp_r25) * 4;
|
||||
} else {
|
||||
var_r29 = frandmod(0x10U);
|
||||
var_r27 = frandmod(4U);
|
||||
}
|
||||
BoardModelPosGet(lbl_1_bss_30[4], &spC.point);
|
||||
BoardCameraViewSet(1);
|
||||
BoardCameraMotionWait();
|
||||
var_r26 = BoardSpaceFlagSearch(0, 0x800U);
|
||||
BoardCameraTargetSpaceSet(var_r26);
|
||||
BoardPlayerMotBlendSet(lbl_1_bss_388, 0xB4, 0xF);
|
||||
BoardModelRotGet(lbl_1_bss_30[15], &sp34);
|
||||
|
||||
for (i = 0; i < 0xF; i++) {
|
||||
sp34.y -= lbl_1_rodata_418;
|
||||
BoardModelRotSetV(lbl_1_bss_30[15], &sp34);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
sp34.y = lbl_1_rodata_41C;
|
||||
BoardModelRotSetV(lbl_1_bss_30[15], &sp34);
|
||||
BoardCameraMotionWait();
|
||||
lbl_1_bss_384 = HuAudFXPlay(0x41D);
|
||||
var_r28 = -0x1FFF;
|
||||
var_f29 = lbl_1_rodata_410;
|
||||
for (i = 0; i < 0x3C; i++) {
|
||||
var_f29 -= lbl_1_rodata_420;
|
||||
fn_1_E310(var_f29);
|
||||
var_r28 = (s16) ((f32) (s16) var_r28 + lbl_1_rodata_424);
|
||||
HuAudFXPitchSet(lbl_1_bss_384, var_r28);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
var_f29 = lbl_1_rodata_428;
|
||||
HuAudFXPitchSet(lbl_1_bss_384, 0);
|
||||
BoardModelMotionStart(lbl_1_bss_30[15], 2, 0x40000001);
|
||||
BoardModelPosGet(lbl_1_bss_30[15], &sp34);
|
||||
|
||||
for (i = 0; i < 0x1E; i++) {
|
||||
sp34.z += lbl_1_rodata_42C;
|
||||
BoardModelPosSetV(lbl_1_bss_30[15], &sp34);
|
||||
fn_1_E310(var_f29);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelMotionStart(lbl_1_bss_30[15], 1, 0x40000001);
|
||||
while (var_r29) {
|
||||
fn_1_E310(var_f29);
|
||||
HuPrcVSleep();
|
||||
var_r29 -= 1;
|
||||
}
|
||||
BoardModelMotionStart(lbl_1_bss_30[15], 3, 0x40000001);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_30[15], lbl_1_rodata_430);
|
||||
|
||||
for (i = 0; i < 0xA; i++) {
|
||||
sp34.z -= lbl_1_rodata_434;
|
||||
BoardModelPosSetV(lbl_1_bss_30[15], &sp34);
|
||||
fn_1_E310(var_f29);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelMotionStart(lbl_1_bss_30[15], 1, 0x40000001);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_30[15], lbl_1_rodata_438);
|
||||
HuAudFXPlay(0x41F);
|
||||
HuAudFXPlay(0x42D);
|
||||
omVibrate(lbl_1_bss_388, 0xC, 6, 6);
|
||||
var_f31 = lbl_1_rodata_410;
|
||||
var_f27 = lbl_1_rodata_43C;
|
||||
sp1C.x = lbl_1_rodata_410;
|
||||
sp1C.z = lbl_1_rodata_440;
|
||||
|
||||
// Roulette motion and ball ?
|
||||
while(TRUE) {
|
||||
sp1C.y = var_f27 - (lbl_1_rodata_444 * (lbl_1_rodata_448 * (var_f31 * var_f31)));
|
||||
var_f31 += lbl_1_rodata_438;
|
||||
BoardModelPosGet(lbl_1_bss_30[6], &sp28);
|
||||
PSVECAdd(&sp28, &sp1C, &sp28);
|
||||
var_f28 = (sp28.x - spC.point.x) * (sp28.x - spC.point.x) + ((sp28.z - spC.point.z) * (sp28.z - spC.point.z));
|
||||
if (var_f28 > lbl_1_rodata_410) {
|
||||
var_f30 = __frsqrte(var_f28);
|
||||
var_f30 = lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - ((f64) var_f28 * (var_f30 * var_f30)));
|
||||
var_f30 = lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - ((f64) var_f28 * (var_f30 * var_f30)));
|
||||
var_f30 = (lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - (var_f28 * (var_f30 * var_f30))));
|
||||
spC.unk00 = (var_f28 * var_f30);
|
||||
var_f26 = spC.unk00;
|
||||
} else {
|
||||
var_f26 = var_f28;
|
||||
}
|
||||
|
||||
var_f25 = var_f26;
|
||||
if (var_f25 >= lbl_1_rodata_460) {
|
||||
if (sp28.y <= (lbl_1_rodata_464 + spC.point.y)) {
|
||||
PSVECSubtract(&sp28, &spC.point, (Vec* ) &sp1C);
|
||||
PSVECNormalize((Vec* ) &sp1C, (Vec* ) &sp1C);
|
||||
sp1C.y = lbl_1_rodata_410;
|
||||
PSVECScale((Vec* ) &sp1C, (Vec* ) &sp1C, lbl_1_rodata_468);
|
||||
PSVECAdd((Vec* ) &sp1C, &spC.point, (Vec* ) &sp1C);
|
||||
sp28.x = sp1C.x;
|
||||
sp28.z = sp1C.z;
|
||||
sp1C.x = lbl_1_rodata_46C;
|
||||
sp1C.z = lbl_1_rodata_470;
|
||||
}
|
||||
}
|
||||
|
||||
if (sp28.y < spC.point.y) {
|
||||
sp28.y = spC.point.y;
|
||||
if (var_r27 >= 3) {
|
||||
break;
|
||||
}
|
||||
//var_f31 = (lbl_1_rodata_474 * (lbl_1_rodata_418 * (s32) (u8) frand()));
|
||||
var_f27 = lbl_1_rodata_418 + (lbl_1_rodata_474 * (lbl_1_rodata_418 * (s32) (u8) frand()));
|
||||
var_f31 = lbl_1_rodata_438;
|
||||
var_r27 += 1;
|
||||
//var_f31 = (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand()));
|
||||
sp1C.x = lbl_1_rodata_478 + (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand()));
|
||||
sp1C.z = lbl_1_rodata_478 + (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand()));
|
||||
HuAudFXPlay(0x41E);
|
||||
}
|
||||
|
||||
BoardModelPosSetV(lbl_1_bss_30[6], (Vec* ) &sp28);
|
||||
fn_1_E310(var_f29);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
HuAudFXPlay(0x41E);
|
||||
PSVECSubtract(&sp28, &spC.point, (Vec* ) &sp1C);
|
||||
PSVECNormalize((Vec* ) &sp1C, (Vec* ) &sp1C);
|
||||
var_f31 = (f32) (lbl_1_rodata_480 * (atan2((f64) -sp1C.z, (f64) sp1C.x) / lbl_1_rodata_488));
|
||||
BoardModelRotGet(lbl_1_bss_30[4], &sp34);
|
||||
var_f31 = var_f31 - sp34.y;
|
||||
if (var_f31 < lbl_1_rodata_410) {
|
||||
var_f31 += lbl_1_rodata_490;
|
||||
}
|
||||
var_r30 = (s32) (var_f31 / lbl_1_rodata_494);
|
||||
if (fmod(var_f31, lbl_1_rodata_498) > lbl_1_rodata_4A0) {
|
||||
var_r30 += 1;
|
||||
}
|
||||
if (var_r30 >= 0x10) {
|
||||
var_r30 -= 0x10;
|
||||
}
|
||||
sp1C.y = lbl_1_rodata_410;
|
||||
|
||||
while(TRUE) {
|
||||
fn_1_E310(var_f29);
|
||||
BoardModelRotGet(lbl_1_bss_30[4], &sp34);
|
||||
var_f31 = (lbl_1_rodata_494 * var_r30) + sp34.y; // TODO: Update rodata for asm change
|
||||
sp1C.x= cos((lbl_1_rodata_488 * var_f31) / lbl_1_rodata_480);
|
||||
sp1C.z = -sin((lbl_1_rodata_488 * var_f31) / lbl_1_rodata_480);
|
||||
PSVECScale(&sp1C, &sp1C, lbl_1_rodata_468);
|
||||
PSVECAdd(&sp1C, &spC.point, &sp1C);
|
||||
sp28.x = sp1C.x;
|
||||
sp28.z = sp1C.z;
|
||||
BoardModelPosSetV(lbl_1_bss_30[6], &sp28);
|
||||
if (sp34.y >= lbl_1_rodata_4A8 &&
|
||||
sp34.y < lbl_1_rodata_4AC) {
|
||||
break;
|
||||
}
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
for (i = 0; i < 0x3C; i++) {
|
||||
var_f29 += lbl_1_rodata_420;
|
||||
fn_1_E310(var_f29);
|
||||
BoardModelRotGet(lbl_1_bss_30[4], &sp34);
|
||||
var_f31 = (lbl_1_rodata_494 * (f32) var_r30) + sp34.y; // TODO: Update rodata for asm change
|
||||
sp1C.x = (f32) cos((lbl_1_rodata_488 * (f64) var_f31) / lbl_1_rodata_480);
|
||||
sp1C.z = (f32) -sin((lbl_1_rodata_488 * (f64) var_f31) / lbl_1_rodata_480);
|
||||
PSVECScale(&sp1C, &sp1C, lbl_1_rodata_468);
|
||||
PSVECAdd((Vec* ) &sp1C, &spC.point, (Vec* ) &sp1C);
|
||||
sp28.x = sp1C.x;
|
||||
sp28.z = sp1C.z;
|
||||
BoardModelPosSetV(lbl_1_bss_30[6], (Vec* ) &sp28);
|
||||
var_r28 = var_r28 + lbl_1_rodata_4B0; // TODO: Weird extra rodata
|
||||
HuAudFXPitchSet(lbl_1_bss_384, var_r28);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelRotYSet(lbl_1_bss_30[4], lbl_1_rodata_410);
|
||||
HuAudFXStop(lbl_1_bss_384);
|
||||
return lbl_1_data_4D0[var_r30];
|
||||
}
|
||||
|
||||
// Place player on space post roulette?
|
||||
void fn_1_CD04(s32 arg0) {
|
||||
Vec sp24;
|
||||
Vec sp18;
|
||||
Vec spC;
|
||||
|
||||
f32 temp_f30;
|
||||
f32 temp_f29;
|
||||
f32 var_f31;
|
||||
|
||||
s16 var_r25;
|
||||
u32 var_r26;
|
||||
s32 var_r27;
|
||||
s32 var_r29;
|
||||
s32 var_r28;
|
||||
s32 var_r30;
|
||||
BoardSpace* temp_r31;
|
||||
|
||||
if (arg0 < 0) {
|
||||
fn_1_D3AC();
|
||||
arg0 = fn_1_D8C4();
|
||||
}
|
||||
temp_r31 = BoardSpaceGet(0, BoardSpaceFlagSearch(0, 0x800));
|
||||
|
||||
for (var_r28 = 0; var_r28 < temp_r31->link_cnt; var_r28++) {
|
||||
var_r29 = temp_r31->link[var_r28];
|
||||
var_r26 = ( (BoardSpaceFlagGet(0, var_r29) & 0xE) >> 1U);
|
||||
if ( var_r26 == (arg0 + 2)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
BoardSpacePosGet(0, var_r29, &sp24);
|
||||
BoardModelAttrReset(lbl_1_bss_30[5], 0x40000002);
|
||||
HuAudFXPlay(0x420);
|
||||
if (BoardPlayerSizeGet(lbl_1_bss_388) == 2) {
|
||||
while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardPlayerScaleGet(lbl_1_bss_388, &spC);
|
||||
|
||||
while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C4) {
|
||||
spC.x -= lbl_1_rodata_448;
|
||||
spC.y -= lbl_1_rodata_448;
|
||||
//temp_f1 = spC.z;
|
||||
spC.z = spC.z - lbl_1_rodata_448;
|
||||
BoardPlayerScaleSetV(lbl_1_bss_388, &spC);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
spC.x = spC.y = spC.z = lbl_1_rodata_4C8;
|
||||
BoardPlayerScaleSetV(lbl_1_bss_388, &spC);
|
||||
}
|
||||
|
||||
while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C4) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
if (GWPlayer[lbl_1_bss_388].bowser_suit) {
|
||||
BoardModelVisibilitySet(BoardBowserSuitModelGet(), 0);
|
||||
BoardModelVisibilitySet(BoardBowserSuitPlayerModelGet(), 0);
|
||||
} else {
|
||||
BoardModelVisibilitySet(BoardPlayerModelGet(lbl_1_bss_388), 0);
|
||||
}
|
||||
HuAudFXPlay(0x421);
|
||||
omVibrate(lbl_1_bss_388, 0xC, 4, 2);
|
||||
|
||||
while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4CC) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
|
||||
BoardModelPosGet(lbl_1_bss_30[5], &sp18);
|
||||
temp_f30 = (f32) ((lbl_1_rodata_480 * (atan2(sp24.x - sp18.x, sp24.z - sp18.z) / lbl_1_rodata_488)) / lbl_1_rodata_4D0);
|
||||
|
||||
while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_408) {
|
||||
BoardModelRotYSet(lbl_1_bss_30[5], temp_f30 + BoardModelRotYGet(lbl_1_bss_30[5]));
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelRotYSet(lbl_1_bss_30[5], (f32) (lbl_1_rodata_480 * (atan2(sp24.x - sp18.x, sp24.z - sp18.z) / lbl_1_rodata_488)));
|
||||
omVibrate(lbl_1_bss_388, 0xC, 4, 2);
|
||||
if (GWPlayer[lbl_1_bss_388].bowser_suit) {
|
||||
|
||||
BoardModelVisibilitySet(BoardBowserSuitModelGet(),1);
|
||||
BoardModelVisibilitySet(BoardBowserSuitPlayerModelGet(),1);
|
||||
} else {
|
||||
BoardModelVisibilitySet(BoardPlayerModelGet(lbl_1_bss_388), 1);
|
||||
}
|
||||
GWPlayer[lbl_1_bss_388].space_curr =(s16) var_r29;
|
||||
BoardPlayerPosSetV(lbl_1_bss_388, &sp24);
|
||||
temp_r31 = BoardSpaceGet(0, var_r29);
|
||||
|
||||
for ( var_r30 = 0; var_r30 < (s32) temp_r31->link_cnt; var_r30++) {
|
||||
if (BoardSpaceTypeGet(0, temp_r31->link[var_r30])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (var_r30 != (s32) temp_r31->link_cnt) {
|
||||
BoardSpacePosGet(0, temp_r31->link[var_r30], &sp18);
|
||||
BoardPlayerRotYSet(lbl_1_bss_388, (f32) (lbl_1_rodata_480 * (atan2(sp18.x - sp24.x, sp18.z - sp24.z) / lbl_1_rodata_488)));
|
||||
}
|
||||
if (BoardPlayerSizeGet(lbl_1_bss_388) == 2) {
|
||||
var_f31 = spC.x;
|
||||
|
||||
while (var_f31 < lbl_1_rodata_4DC) {
|
||||
var_f31 += lbl_1_rodata_4D8;
|
||||
if (var_f31 > lbl_1_rodata_4DC) {
|
||||
var_f31 = lbl_1_rodata_4DC;
|
||||
}
|
||||
spC.z = var_f31;
|
||||
spC.y = var_f31;
|
||||
spC.x = var_f31;
|
||||
BoardPlayerScaleSetV(lbl_1_bss_388, &spC);
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
HuAudFXPlay(0x42A);
|
||||
while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < BoardModelMotionMaxTimeGet(lbl_1_bss_30[5])) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
HuPrcCreate(&fn_1_DF48, 0x2004, 0x1000, 0);
|
||||
}
|
||||
|
||||
/* Rotate (yaw) of model 4 */
|
||||
void fn_1_E310(f32 degrees) {
|
||||
Point3d spC;
|
||||
lbl_1_bss_380 += degrees;
|
||||
if (lbl_1_bss_380 >= lbl_1_rodata_490) {
|
||||
lbl_1_bss_380 -= lbl_1_rodata_490;
|
||||
}
|
||||
if (lbl_1_bss_380 < lbl_1_rodata_410) {
|
||||
lbl_1_bss_380 += lbl_1_rodata_490;
|
||||
}
|
||||
BoardModelRotGet(lbl_1_bss_30[4], &spC);
|
||||
spC.y = lbl_1_bss_380;
|
||||
BoardModelRotSetV(lbl_1_bss_30[4], &spC);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue