Merge branch 'main' of github.com:Rainchus/marioparty4
This commit is contained in:
commit
3385656853
8 changed files with 938 additions and 178 deletions
757
src/REL/w06Dll/mg_coin.c
Executable file
757
src/REL/w06Dll/mg_coin.c
Executable file
|
|
@ -0,0 +1,757 @@
|
|||
#include "REL/w06Dll.h"
|
||||
#include "game/audio.h"
|
||||
#include "game/chrman.h"
|
||||
#include "game/data.h"
|
||||
#include "game/gamework_data.h"
|
||||
#include "game/minigame_seq.h"
|
||||
#include "game/object.h"
|
||||
#include "game/objsub.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/process.h"
|
||||
#include "game/window.h"
|
||||
#include "game/board/audio.h"
|
||||
#include "game/board/com.h"
|
||||
#include "game/board/main.h"
|
||||
#include "game/board/model.h"
|
||||
#include "game/board/player.h"
|
||||
#include "game/board/space.h"
|
||||
#include "game/board/window.h"
|
||||
|
||||
#include "dolphin.h"
|
||||
#include "math.h"
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
u8 unk00_field0 : 1;
|
||||
u8 unk00_field1 : 4;
|
||||
u8 unk00_field2 : 1;
|
||||
};
|
||||
u8 unk01;
|
||||
u8 unk02;
|
||||
char unk03[1];
|
||||
s16 unk04;
|
||||
} Bss4CWork;
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
u8 unk00_field0 : 1;
|
||||
u8 unk00_field1 : 2;
|
||||
u8 unk00_field2 : 4;
|
||||
};
|
||||
u8 unk01;
|
||||
s16 unk02;
|
||||
s16 unk04;
|
||||
} Bss50Work;
|
||||
|
||||
// Seems to be the same struct used in w03Dll/mg_coin (unkTemp)
|
||||
typedef struct {
|
||||
/* 0x00 */ s8 unk00;
|
||||
/* 0x01 */ u8 unk01;
|
||||
/* 0x02 */ s16 unk02;
|
||||
/* 0x04 */ float unk04;
|
||||
/* 0x08 */ Vec unk08;
|
||||
} Bss54WorkData; // Size 0x14
|
||||
|
||||
// Seems to be the same struct used in w03Dll/mg_coin (unkTemp2)
|
||||
typedef struct {
|
||||
struct {
|
||||
u8 unk00_field0 : 1;
|
||||
};
|
||||
char unk01[3];
|
||||
s8 unk04;
|
||||
char unk05[3];
|
||||
float unk08;
|
||||
Bss54WorkData *unk0C;
|
||||
} Bss54Work;
|
||||
|
||||
static void fn_1_4B00(void);
|
||||
static void fn_1_4BA0(void);
|
||||
static s32 fn_1_4BF8(s32 arg0);
|
||||
static void fn_1_4FB8(s32 arg0);
|
||||
static void fn_1_519C(s32 arg0);
|
||||
static void fn_1_53A0(void);
|
||||
static void fn_1_5490(s32 arg0);
|
||||
static void fn_1_56CC(omObjData *arg0);
|
||||
static void fn_1_57DC(omObjData *arg0, Bss4CWork *arg1);
|
||||
static void fn_1_587C(omObjData *arg0, Bss4CWork *arg1);
|
||||
static void fn_1_58FC(omObjData *arg0, Bss4CWork *arg1);
|
||||
static void fn_1_5968(Vec *arg0);
|
||||
static void fn_1_59D0(s32 arg0);
|
||||
static s32 fn_1_5B0C(void);
|
||||
static void fn_1_5B54(s32 arg0);
|
||||
static void fn_1_5CE4(s32 arg0);
|
||||
static s32 fn_1_5EBC(void);
|
||||
static void fn_1_5EFC(Vec *arg0);
|
||||
static void fn_1_5F58(s32 arg0, u32 *arg1);
|
||||
static void fn_1_606C(omObjData *arg0);
|
||||
static void fn_1_6A0C(omObjData *arg0);
|
||||
static void fn_1_6C4C(s32 arg0);
|
||||
static void fn_1_6E90(Bss54Work *arg0);
|
||||
|
||||
static s32 lbl_1_bss_8C;
|
||||
static char lbl_1_bss_5B[49];
|
||||
static s8 lbl_1_bss_5A;
|
||||
static s8 lbl_1_bss_59;
|
||||
static s8 lbl_1_bss_58;
|
||||
static omObjData *lbl_1_bss_54;
|
||||
static omObjData *lbl_1_bss_50;
|
||||
static omObjData *lbl_1_bss_4C;
|
||||
static Process *lbl_1_bss_48;
|
||||
|
||||
static const u8 lbl_1_rodata_F0[] = {
|
||||
20, 15, 10, 5, 1
|
||||
};
|
||||
|
||||
static const u8 lbl_1_rodata_F5[] = {
|
||||
10, 7, 5, 3, 0, 0, 0
|
||||
};
|
||||
|
||||
static s16 lbl_1_data_1D8 = -1;
|
||||
static s16 lbl_1_data_1DA = -1;
|
||||
static s16 lbl_1_data_1DC = -1;
|
||||
|
||||
void fn_1_4878(void) {
|
||||
Vec sp8;
|
||||
float temp_f31;
|
||||
|
||||
lbl_1_data_1DC = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 7), NULL, 0);
|
||||
temp_f31 = 0.3f;
|
||||
BoardModelPosGet(lbl_1_bss_C[0], &sp8);
|
||||
sp8.x += 115.0 * sin(M_PI);
|
||||
sp8.z += 115.0 * cos(M_PI);
|
||||
sp8.x -= 225.0f;
|
||||
BoardModelPosSetV(lbl_1_data_1DC, &sp8);
|
||||
BoardModelRotYSet(lbl_1_data_1DC, 90.0f);
|
||||
BoardModelScaleSet(lbl_1_data_1DC, temp_f31, temp_f31, temp_f31);
|
||||
BoardModelMotionStart(lbl_1_data_1DC, 0, 0);
|
||||
BoardModelMotionSpeedSet(lbl_1_data_1DC, 0.0f);
|
||||
BoardModelMotionStart(lbl_1_bss_C[0], 0, 0);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[0], 0.0f);
|
||||
}
|
||||
|
||||
void fn_1_4A10(void) {
|
||||
if (lbl_1_data_1DC != -1) {
|
||||
BoardModelKill(lbl_1_data_1DC);
|
||||
lbl_1_data_1DC = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void fn_1_4A60(void) {
|
||||
lbl_1_bss_8C = 0;
|
||||
BoardDiceDigit2DShowSet(0);
|
||||
lbl_1_bss_48 = HuPrcChildCreate(fn_1_4BA0, 0x2003, 0x3800, 0, boardMainProc);
|
||||
HuPrcDestructorSet2(lbl_1_bss_48, fn_1_4B00);
|
||||
while (lbl_1_bss_48) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardDiceDigit2DShowSet(1);
|
||||
}
|
||||
|
||||
static void fn_1_4B00(void) {
|
||||
if (lbl_1_data_1DA != -1) {
|
||||
BoardModelMotionKill(lbl_1_bss_C[5], lbl_1_data_1DA);
|
||||
lbl_1_data_1DA = -1;
|
||||
}
|
||||
if (lbl_1_data_1D8 != -1) {
|
||||
HuWinKill(lbl_1_data_1D8);
|
||||
lbl_1_data_1D8 = -1;
|
||||
}
|
||||
lbl_1_bss_48 = NULL;
|
||||
}
|
||||
|
||||
static void fn_1_4BA0(void) {
|
||||
s32 temp_r31;
|
||||
|
||||
temp_r31 = GWSystem.player_curr;
|
||||
if (fn_1_4BF8(temp_r31) != 0) {
|
||||
fn_1_4FB8(temp_r31);
|
||||
}
|
||||
fn_1_519C(temp_r31);
|
||||
HuPrcEnd();
|
||||
}
|
||||
|
||||
static s32 fn_1_4BF8(s32 arg0) {
|
||||
Vec sp38;
|
||||
Vec sp2C;
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
|
||||
BoardWinCreateChoice(2, MAKE_MESSID(48, 26), 6, 0);
|
||||
if (GWPlayer[arg0].com) {
|
||||
BoardComKeySetLeft();
|
||||
}
|
||||
BoardWinWait();
|
||||
if (BoardWinChoiceGet() != 0) {
|
||||
BoardWinCreate(2, MAKE_MESSID(48, 27), 6);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
lbl_1_bss_8C = 1;
|
||||
return 0;
|
||||
}
|
||||
BoardWinKill();
|
||||
sp14.x = 0.0f;
|
||||
sp14.y = 120.0f;
|
||||
sp14.z = 0.0f;
|
||||
sp8.x = -32.0f;
|
||||
sp8.y = 0.0f;
|
||||
sp8.z = 0.0f;
|
||||
BoardCameraMotionStartEx(lbl_1_bss_C[0], &sp8, &sp14, 1330.0f, -1.0f, 21);
|
||||
lbl_1_data_1DA = BoardModelMotionCreate(lbl_1_bss_C[5], DATA_MAKE_NUM(DATADIR_W06, 22));
|
||||
BoardCameraMotionWait();
|
||||
BoardPlayerPosGet(arg0, &sp2C);
|
||||
BoardModelPosGet(lbl_1_bss_C[0], &sp38);
|
||||
sp38.x += 115.0 * sin(M_PI);
|
||||
sp38.z += 115.0 * cos(M_PI);
|
||||
PSVECSubtract(&sp38, &sp2C, &sp20);
|
||||
PSVECNormalize(&sp20, &sp20);
|
||||
BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI));
|
||||
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 40);
|
||||
BoardModelPosGet(lbl_1_bss_C[5], &sp2C);
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[5], lbl_1_data_1DA, 0.0f, 8.0f, 0x40000001);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[5], 2.0f);
|
||||
while (GWPlayer[arg0].moving) {
|
||||
BoardPlayerPosGet(arg0, &sp38);
|
||||
PSVECSubtract(&sp38, &sp2C, &sp20);
|
||||
BoardModelRotYSet(lbl_1_bss_C[5], 180.0 * (atan2(sp20.x, sp20.z) / M_PI));
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[5], 1, 0.0f, 8.0f, 0x40000001);
|
||||
BoardPlayerIdleSet(arg0);
|
||||
BoardPlayerRotYSet(arg0, -90.0f);
|
||||
BoardAudSeqPause(0, 1, 1000);
|
||||
HuPrcSleep(60);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void fn_1_4FB8(s32 arg0) {
|
||||
s16 temp_r30;
|
||||
|
||||
BoardMusStart(1, 0x27, 0x7F, 0);
|
||||
temp_r30 = MGSeqCreate(3, 0);
|
||||
while (MGSeqStatGet(temp_r30) != 0) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
fn_1_53A0();
|
||||
fn_1_5490(arg0);
|
||||
fn_1_5B54(arg0);
|
||||
while (TRUE) {
|
||||
if (fn_1_5EBC() == 4 && fn_1_5B0C() == 4) {
|
||||
break;
|
||||
}
|
||||
HuPrcVSleep();
|
||||
}
|
||||
HuWinDispOff(lbl_1_data_1D8);
|
||||
BoardAudSeqFadeOut(1, 1000);
|
||||
HuPrcSleep(30);
|
||||
lbl_1_bss_58 = lbl_1_rodata_F0[lbl_1_bss_5A - 1];
|
||||
sprintf(lbl_1_bss_5B, "%d", lbl_1_bss_58);
|
||||
BoardAudSeqPause(0, 0, 1000);
|
||||
BoardWinCreate(2, MAKE_MESSID(48, 28), 6);
|
||||
BoardWinInsertMesSet(MAKE_MESSID_PTR(lbl_1_bss_5B), 0);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
fn_1_6C4C(arg0);
|
||||
while (lbl_1_bss_54) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, 0);
|
||||
HuPrcSleep(8);
|
||||
while (!BoardPlayerMotionEndCheck(arg0)) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardWinCreate(2, MAKE_MESSID(48, 29), 6);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
}
|
||||
|
||||
static void fn_1_519C(s32 arg0) {
|
||||
Vec sp20;
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
s16 temp_r30;
|
||||
|
||||
if (lbl_1_bss_8C == 0) {
|
||||
temp_r30 = GWPlayer[arg0].space_curr;
|
||||
BoardPlayerPosGet(arg0, &sp20);
|
||||
BoardSpacePosGet(0, temp_r30, &sp14);
|
||||
}
|
||||
BoardCameraTargetPlayerSet(arg0);
|
||||
BoardCameraViewSet(1);
|
||||
if (lbl_1_bss_8C == 0) {
|
||||
BoardPlayerPosLerpStart(arg0, &sp20, &sp14, 40);
|
||||
BoardModelPosGet(lbl_1_bss_C[5], &sp20);
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[5], lbl_1_data_1DA, 0.0f, 8.0f, 0x40000001);
|
||||
BoardModelMotionSpeedSet(lbl_1_bss_C[5], 2.0f);
|
||||
while (GWPlayer[arg0].moving) {
|
||||
BoardPlayerPosGet(arg0, &sp14);
|
||||
PSVECSubtract(&sp14, &sp20, &sp8);
|
||||
BoardModelRotYSet(lbl_1_bss_C[5], 180.0 * (atan2(sp8.x, sp8.z) / M_PI));
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardModelMotionShiftSet(lbl_1_bss_C[5], 1, 0.0f, 8.0f, 0x40000001);
|
||||
}
|
||||
BoardModelRotYSet(lbl_1_bss_C[5], 0.0f);
|
||||
BoardCameraMotionWait();
|
||||
fn_1_59D0(5);
|
||||
fn_1_5CE4(5);
|
||||
}
|
||||
|
||||
static void fn_1_53A0(void) {
|
||||
float sp8[2];
|
||||
float var_f31;
|
||||
float var_f30;
|
||||
|
||||
HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(48, 30));
|
||||
var_f31 = -10000.0f;
|
||||
var_f30 = 328.0f;
|
||||
lbl_1_data_1D8 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0);
|
||||
HuWinBGTPLvlSet(lbl_1_data_1D8, 0.0f);
|
||||
HuWinMesSpeedSet(lbl_1_data_1D8, 0);
|
||||
HuWinMesSet(lbl_1_data_1D8, MAKE_MESSID(48, 30));
|
||||
}
|
||||
|
||||
static void fn_1_5490(s32 arg0) {
|
||||
Vec sp3C;
|
||||
Vec sp30;
|
||||
Vec sp24;
|
||||
Vec sp18;
|
||||
float temp_f31;
|
||||
omObjData *temp_r3;
|
||||
Bss4CWork *temp_r31;
|
||||
s32 spC[] = {
|
||||
DATA_MAKE_NUM(DATADIR_W06, 28),
|
||||
DATA_MAKE_NUM(DATADIR_W06, 29),
|
||||
-1
|
||||
};
|
||||
|
||||
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_56CC);
|
||||
lbl_1_bss_4C = temp_r3;
|
||||
temp_r31 = OM_GET_WORK_PTR(temp_r3, Bss4CWork);
|
||||
temp_r31->unk00_field0 = 0;
|
||||
temp_r31->unk02 = 0;
|
||||
temp_r31->unk00_field2 = 0;
|
||||
temp_r31->unk00_field1 = 2;
|
||||
BoardModelPosGet(lbl_1_data_1DC, &sp3C);
|
||||
sp3C.x += 50.0f;
|
||||
BoardPlayerPosGet(arg0, &sp30);
|
||||
sp30.x -= 10.0f;
|
||||
PSVECSubtract(&sp30, &sp3C, &sp24);
|
||||
PSVECNormalize(&sp24, &sp18);
|
||||
temp_r3->trans.x = sp24.x / 60.0f;
|
||||
temp_r3->trans.y = sp24.y / 60.0f;
|
||||
temp_r3->trans.z = sp24.z / 60.0f;
|
||||
temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 27), spC, 0);
|
||||
temp_f31 = 0.3f;
|
||||
BoardModelPosSetV(temp_r31->unk04, &sp3C);
|
||||
BoardModelScaleSet(temp_r31->unk04, temp_f31, temp_f31, temp_f31);
|
||||
BoardModelVisibilitySet(temp_r31->unk04, 0);
|
||||
BoardModelRotYSet(temp_r31->unk04, 180.0 * (atan2(sp18.x, sp18.z) / M_PI));
|
||||
BoardModelMotionStart(temp_r31->unk04, 1, 0x40000001);
|
||||
BoardModelMotionStart(lbl_1_data_1DC, 0, 0);
|
||||
}
|
||||
|
||||
static void fn_1_56CC(omObjData *arg0) {
|
||||
Bss4CWork *temp_r31;
|
||||
|
||||
temp_r31 = OM_GET_WORK_PTR(arg0, Bss4CWork);
|
||||
if (temp_r31->unk00_field0 != 0 || BoardIsKill()) {
|
||||
BoardModelKill(temp_r31->unk04);
|
||||
lbl_1_bss_4C = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
if (temp_r31->unk02 != 0) {
|
||||
temp_r31->unk02--;
|
||||
return;
|
||||
}
|
||||
switch (temp_r31->unk00_field1) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
fn_1_57DC(arg0, temp_r31);
|
||||
break;
|
||||
case 4:
|
||||
fn_1_58FC(arg0, temp_r31);
|
||||
break;
|
||||
case 2:
|
||||
fn_1_587C(arg0, temp_r31);
|
||||
break;
|
||||
case 5:
|
||||
temp_r31->unk00_field0 = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_57DC(omObjData *arg0, Bss4CWork *arg1) {
|
||||
Vec sp8;
|
||||
|
||||
if (arg1->unk01 == 0) {
|
||||
fn_1_59D0(3);
|
||||
return;
|
||||
}
|
||||
BoardModelPosGet(arg1->unk04, &sp8);
|
||||
sp8.x += arg0->trans.x;
|
||||
sp8.y += arg0->trans.y;
|
||||
sp8.z += arg0->trans.z;
|
||||
BoardModelPosSetV(arg1->unk04, &sp8);
|
||||
arg1->unk01--;
|
||||
}
|
||||
|
||||
static void fn_1_587C(omObjData *arg0, Bss4CWork *arg1) {
|
||||
if (BoardModelMotionTimeGet(lbl_1_data_1DC) < 32.0f) {
|
||||
return;
|
||||
}
|
||||
arg1->unk00_field1 = 1;
|
||||
arg1->unk01 = 60;
|
||||
HuAudFXPlayVolPan(0x49E, 0x7F, 0x20);
|
||||
BoardModelVisibilitySet(arg1->unk04, 1);
|
||||
}
|
||||
|
||||
static void fn_1_58FC(omObjData *arg0, Bss4CWork *arg1) {
|
||||
if (arg1->unk00_field2 == 0) {
|
||||
HuAudFXPlay(0x49F);
|
||||
arg1->unk00_field2 = 1;
|
||||
}
|
||||
if (BoardModelMotionEndCheck(arg1->unk04)) {
|
||||
fn_1_59D0(0);
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_5968(Vec *arg0) {
|
||||
Bss4CWork *temp_r31;
|
||||
|
||||
if (lbl_1_bss_4C && arg0) {
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_4C, Bss4CWork);
|
||||
BoardModelPosGet(temp_r31->unk04, arg0);
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_59D0(s32 arg0) {
|
||||
Bss4CWork *temp_r31;
|
||||
|
||||
if (!lbl_1_bss_4C) {
|
||||
return;
|
||||
}
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_4C, Bss4CWork);
|
||||
temp_r31->unk00_field1 = arg0;
|
||||
if (arg0 == 1) {
|
||||
lbl_1_bss_4C->trans.x = 0.96666666f * sin(90 * M_PI / 180.0);
|
||||
lbl_1_bss_4C->trans.z = 0.96666666f * cos(90 * M_PI / 180.0);
|
||||
temp_r31->unk01 = 60;
|
||||
return;
|
||||
}
|
||||
if (arg0 == 0) {
|
||||
BoardPlayerMotionSpeedSet(temp_r31->unk04, 1.0f);
|
||||
return;
|
||||
}
|
||||
if (arg0 == 4) {
|
||||
BoardModelMotionShiftSet(temp_r31->unk04, 2, 0.0f, 8.0f, 0);
|
||||
temp_r31->unk02 = 10;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 fn_1_5B0C(void) {
|
||||
Bss4CWork *temp_r31;
|
||||
|
||||
if (lbl_1_bss_4C) {
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_4C, Bss4CWork);
|
||||
return temp_r31->unk00_field1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static s32 lbl_1_data_1E4[8] = {
|
||||
DATA_MAKE_NUM(DATADIR_MARIOMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_PEACHMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_WARIOMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_DAISYMOT, 126),
|
||||
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 126)
|
||||
};
|
||||
|
||||
static void fn_1_5B54(s32 arg0) {
|
||||
Vec sp8;
|
||||
float var_f31;
|
||||
omObjData *temp_r3;
|
||||
Bss50Work *temp_r31;
|
||||
|
||||
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_606C);
|
||||
lbl_1_bss_50 = temp_r3;
|
||||
temp_r31 = OM_GET_WORK_PTR(temp_r3, Bss50Work);
|
||||
temp_r31->unk00_field0 = 0;
|
||||
temp_r31->unk00_field1 = arg0;
|
||||
temp_r31->unk01 = 0;
|
||||
temp_r31->unk00_field2 = 1;
|
||||
temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 13), NULL, 0);
|
||||
temp_r31->unk02 = BoardPlayerMotionCreate(arg0, lbl_1_data_1E4[GWPlayer[arg0].character]);
|
||||
var_f31 = 0.3f;
|
||||
BoardModelScaleSet(temp_r31->unk04, var_f31, var_f31, var_f31);
|
||||
BoardPlayerPosGet(temp_r31->unk00_field1, &sp8);
|
||||
BoardModelPosSetV(temp_r31->unk04, &sp8);
|
||||
BoardModelVisibilitySet(temp_r31->unk04, 0);
|
||||
temp_r3->trans.x = sp8.x;
|
||||
temp_r3->trans.y = sp8.y;
|
||||
temp_r3->trans.z = sp8.z;
|
||||
lbl_1_bss_59 = 0;
|
||||
lbl_1_bss_5A = 0;
|
||||
}
|
||||
|
||||
static void fn_1_5CE4(s32 arg0) {
|
||||
Vec sp14;
|
||||
Vec sp8;
|
||||
Bss50Work *temp_r31;
|
||||
|
||||
if (!lbl_1_bss_50) {
|
||||
return;
|
||||
}
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_50, Bss50Work);
|
||||
temp_r31->unk00_field2 = arg0;
|
||||
if (arg0 == 2) {
|
||||
temp_r31->unk01 = 60;
|
||||
BoardPlayerPosGet(temp_r31->unk00_field1, &sp8);
|
||||
if (lbl_1_bss_5A >= 1) {
|
||||
BoardModelVisibilitySet(temp_r31->unk04, 1);
|
||||
}
|
||||
BoardModelMotionStart(temp_r31->unk04, 0, 0x40000001);
|
||||
BoardPlayerMotionStart(temp_r31->unk00_field1, temp_r31->unk02, 0x40000001);
|
||||
omVibrate(temp_r31->unk00_field1, 12, 4, 2);
|
||||
fn_1_5968(&sp14);
|
||||
sp8.x = sp14.x + 18.0 * sin(90 * M_PI / 180.0);
|
||||
sp8.z = sp14.z + 18.0 * cos(90 * M_PI / 180.0);
|
||||
BoardPlayerPosSetV(temp_r31->unk00_field1, &sp8);
|
||||
BoardModelPosSetV(temp_r31->unk04, &sp8);
|
||||
return;
|
||||
}
|
||||
if (arg0 == 3) {
|
||||
BoardModelVisibilitySet(temp_r31->unk04, 0);
|
||||
BoardPlayerMotionStart(temp_r31->unk00_field1, temp_r31->unk02, 0x40000001);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 fn_1_5EBC(void) {
|
||||
Bss50Work *temp_r31;
|
||||
|
||||
if (!lbl_1_bss_50) {
|
||||
return;
|
||||
}
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_50, Bss50Work);
|
||||
return temp_r31->unk00_field2;
|
||||
}
|
||||
|
||||
static void fn_1_5EFC(Vec *arg0) {
|
||||
Bss50Work *temp_r31;
|
||||
|
||||
if (lbl_1_bss_50) {
|
||||
temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_50, Bss50Work);
|
||||
BoardPlayerPosGet(temp_r31->unk00_field1, arg0);
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_5F58(s32 arg0, u32 *arg1) {
|
||||
u32 var_r31;
|
||||
s32 var_r28;
|
||||
s32 temp_r30;
|
||||
|
||||
var_r31 = 0;
|
||||
var_r28 = GWPlayer[arg0].port;
|
||||
if (GWPlayer[arg0].com) {
|
||||
temp_r30 = BoardRandMod(100);
|
||||
switch (GWPlayer[arg0].diff) {
|
||||
case 0:
|
||||
if (temp_r30 < 12) {
|
||||
var_r31 = 0x100;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (temp_r30 < 22) {
|
||||
var_r31 = 0x100;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (temp_r30 < 50) {
|
||||
var_r31 = 0x100;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
var_r31 = 0x100;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
var_r31 = HuPadBtnDown[var_r28] & 0x100;
|
||||
}
|
||||
*arg1 = var_r31;
|
||||
}
|
||||
|
||||
static void fn_1_606C(omObjData *arg0) {
|
||||
Vec sp64;
|
||||
Vec sp58;
|
||||
u32 var_r18;
|
||||
Bss50Work *temp_r31;
|
||||
|
||||
var_r18 = 0;
|
||||
temp_r31 = OM_GET_WORK_PTR(arg0, Bss50Work);
|
||||
if (temp_r31->unk00_field0 != 0 || BoardIsKill()) {
|
||||
BoardPlayerMotionKill(temp_r31->unk00_field1, temp_r31->unk02);
|
||||
BoardModelKill(temp_r31->unk04);
|
||||
lbl_1_bss_50 = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
switch (temp_r31->unk00_field2) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
if (fn_1_5B0C() == 3) {
|
||||
fn_1_5CE4(2);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (temp_r31->unk01 == 0) {
|
||||
if (lbl_1_bss_5A >= 5) {
|
||||
fn_1_5CE4(4);
|
||||
fn_1_59D0(4);
|
||||
} else {
|
||||
fn_1_5CE4(3);
|
||||
fn_1_59D0(1);
|
||||
lbl_1_bss_59 = 0;
|
||||
lbl_1_bss_5A++;
|
||||
}
|
||||
} else {
|
||||
fn_1_5F58(temp_r31->unk00_field1, &var_r18);
|
||||
if (var_r18 == 0x100) {
|
||||
lbl_1_bss_59++;
|
||||
if (lbl_1_bss_5A != 0 && lbl_1_bss_59 >= lbl_1_rodata_F5[lbl_1_bss_5A - 1]) {
|
||||
fn_1_5CE4(4);
|
||||
fn_1_59D0(4);
|
||||
}
|
||||
BoardPlayerMotionStart(temp_r31->unk00_field1, temp_r31->unk02, 0x40000001);
|
||||
}
|
||||
temp_r31->unk01--;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (fn_1_5B0C() == 3) {
|
||||
fn_1_5CE4(2);
|
||||
return;
|
||||
}
|
||||
fn_1_5968(&sp64);
|
||||
BoardPlayerPosGet(temp_r31->unk00_field1, &sp58);
|
||||
sp58.x = sp64.x + 18.0 * sin(90 * M_PI / 180.0);
|
||||
sp58.z = sp64.z + 18.0 * cos(90 * M_PI / 180.0);
|
||||
BoardPlayerPosSetV(temp_r31->unk00_field1, &sp58);
|
||||
BoardModelPosSetV(temp_r31->unk04, &sp58);
|
||||
BoardModelRotYSet(temp_r31->unk04, BoardPlayerRotYGet(temp_r31->unk00_field1));
|
||||
break;
|
||||
case 5:
|
||||
temp_r31->unk00_field0 = 1;
|
||||
/* fallthrough */
|
||||
case 4:
|
||||
BoardPlayerIdleSet(temp_r31->unk00_field1);
|
||||
BoardPlayerRotYSet(temp_r31->unk00_field1, 0.0f);
|
||||
BoardModelVisibilitySet(temp_r31->unk04, 0);
|
||||
fn_1_5CE4(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_6A0C(omObjData *arg0) {
|
||||
float temp_f31;
|
||||
Bss54Work *temp_r29;
|
||||
Bss54WorkData *var_r30;
|
||||
s32 var_r26;
|
||||
s32 var_r27;
|
||||
s32 i;
|
||||
|
||||
temp_r29 = OM_GET_WORK_PTR(arg0, Bss54Work);
|
||||
if (temp_r29->unk00_field0 != 0 || BoardIsKill()) {
|
||||
fn_1_6E90(temp_r29);
|
||||
HuMemDirectFree(temp_r29->unk0C);
|
||||
lbl_1_bss_54 = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), arg0);
|
||||
return;
|
||||
}
|
||||
var_r30 = temp_r29->unk0C;
|
||||
for (var_r27 = i = 0; i < 20; i++, var_r30++) {
|
||||
if (var_r30->unk00 == 0) {
|
||||
var_r27++;
|
||||
}
|
||||
}
|
||||
if (var_r27 == 20) {
|
||||
temp_r29->unk00_field0 = 1;
|
||||
return;
|
||||
}
|
||||
var_r26 = 0;
|
||||
for (i = 0; i < 20; i++) {
|
||||
var_r30 = &temp_r29->unk0C[i];
|
||||
if (var_r30->unk00 == 1 && var_r26 == 0) {
|
||||
var_r30->unk00 = 2;
|
||||
var_r26 = 1;
|
||||
}
|
||||
if (var_r30->unk00 == 2) {
|
||||
var_r30->unk01++;
|
||||
OSu8tof32(&var_r30->unk01, &temp_f31);
|
||||
var_r30->unk04 += 45.0f;
|
||||
var_r30->unk08.y += -0.08166667f * temp_f31 * temp_f31 * 0.75f;
|
||||
if (var_r30->unk08.y < temp_r29->unk08) {
|
||||
var_r30->unk08.y = temp_r29->unk08;
|
||||
CharModelCoinEffectCreate(1, &var_r30->unk08);
|
||||
BoardModelVisibilitySet(var_r30->unk02, 0);
|
||||
HuAudFXPlay(7);
|
||||
BoardPlayerCoinsAdd(temp_r29->unk04, 1);
|
||||
omVibrate(temp_r29->unk04, 12, 6, 6);
|
||||
var_r30->unk00 = 0;
|
||||
}
|
||||
BoardModelPosSetV(var_r30->unk02, &var_r30->unk08);
|
||||
BoardModelRotYSet(var_r30->unk02, var_r30->unk04);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_6C4C(s32 arg0) {
|
||||
Vec sp8;
|
||||
float var_f31;
|
||||
omObjData *temp_r3;
|
||||
Bss54Work *temp_r30;
|
||||
Bss54WorkData *temp_r31;
|
||||
s32 i;
|
||||
|
||||
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_6A0C);
|
||||
lbl_1_bss_54 = temp_r3;
|
||||
temp_r30 = OM_GET_WORK_PTR(temp_r3, Bss54Work);
|
||||
temp_r30->unk00_field0 = 0;
|
||||
temp_r30->unk04 = arg0;
|
||||
temp_r30->unk0C = HuMemDirectMallocNum(HEAP_SYSTEM, 20 * sizeof(Bss54WorkData), MEMORY_DEFAULT_NUM);
|
||||
BoardPlayerPosGet(arg0, &sp8);
|
||||
temp_r30->unk08 = sp8.y + 80.0f;
|
||||
memset(temp_r30->unk0C, 0, 20 * sizeof(Bss54WorkData));
|
||||
for (i = 0; i < lbl_1_bss_58; i++) {
|
||||
if (i == 0) {
|
||||
var_f31 = 0.0f;
|
||||
} else {
|
||||
var_f31 = BoardRandFloat();
|
||||
}
|
||||
temp_r31 = &temp_r30->unk0C[i];
|
||||
temp_r31->unk00 = 1;
|
||||
temp_r31->unk08.x = sp8.x + 50.0 * sin(360.0f * var_f31 * M_PI / 180.0);
|
||||
temp_r31->unk08.z = sp8.z + 50.0 * cos(360.0f * var_f31 * M_PI / 180.0);
|
||||
temp_r31->unk08.y = sp8.y + 600.0f + 500.0f * BoardRandFloat();
|
||||
temp_r31->unk01 = 0;
|
||||
temp_r31->unk04 = 360.0f * BoardRandFloat();
|
||||
temp_r31->unk02 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void fn_1_6E90(Bss54Work *arg0) {
|
||||
Bss54WorkData *var_r30;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
var_r30 = &arg0->unk0C[i];
|
||||
BoardModelKill(var_r30->unk02);
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
#include "game/hsfanim.h"
|
||||
#include "game/hsfman.h"
|
||||
#include "game/minigame_seq.h"
|
||||
#include "game/object.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/process.h"
|
||||
#include "game/sprite.h"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue