946 lines
25 KiB
C
946 lines
25 KiB
C
#include "dolphin.h"
|
|
#include "REL/executor.h"
|
|
#include "game/process.h"
|
|
#include "game/data.h"
|
|
#include "game/gamework_data.h"
|
|
#include "REL/w03Dll.h"
|
|
#include "game/board/main.h"
|
|
#include "game/board/model.h"
|
|
#include "game/board/space.h"
|
|
#include "game/object.h"
|
|
#include "game/objsub.h"
|
|
#include "game/board/player.h"
|
|
#include "math.h"
|
|
#include "board_unsplit.h"
|
|
#include "game/hsfman.h"
|
|
#include "dolphin/os/OSFastCast.h"
|
|
|
|
double sin(double x);
|
|
double cos(double x);
|
|
double atan2(double y, double x);
|
|
|
|
#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0])))
|
|
|
|
typedef struct someBits {
|
|
/* 0x00 */ struct {
|
|
u8 unk00_bit0 : 1;
|
|
u8 unk00_bit1 : 3;
|
|
u8 unk00_bit4 : 2;
|
|
u8 unk00_bit6 : 1;
|
|
u8 unk00_bit7 : 1;
|
|
};
|
|
u8 unk1;
|
|
u8 unk2;
|
|
u8 unk3;
|
|
s16 unk4;
|
|
s16 unk_06[3];
|
|
} someBits;
|
|
|
|
typedef struct someBits2 {
|
|
/* 0x00 */ struct {
|
|
u8 unk00_bit0 : 1;
|
|
u8 unk00_bit1 : 3;
|
|
u8 unk00_bit4 : 2;
|
|
u8 unk00_bit6 : 1;
|
|
u8 unk00_bit7 : 1;
|
|
};
|
|
s8 unk1;
|
|
s8 unk2;
|
|
u8 unk3[3];
|
|
s16 unk_06[4];
|
|
} someBits2;
|
|
|
|
typedef struct w03UnkMG {
|
|
/* 0x00 */ char unk_00[0x10];
|
|
/* 0x10 */ s16 unk_10;
|
|
/* 0x12 */ s16 unk_12;
|
|
/* 0x14 */ s16 unk_14;
|
|
/* 0x16 */ s16 unk_16;
|
|
} w03UnkMG;
|
|
|
|
//external symbols
|
|
extern Process *boardMainProc;
|
|
extern s16 lbl_1_bss_C[14];
|
|
extern Process *boardObjMan;
|
|
extern u16 HuPadBtnDown[4];
|
|
|
|
//function signatures
|
|
s32 BoardVecDAngleCalcRange(float *value, float min, float range);
|
|
void BoardCameraQuakeSet(s32 duration, float strength);
|
|
s16 MGSeqCreate(s32, ...);
|
|
u8 MGSeqStatGet(s16);
|
|
s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist);
|
|
void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2);
|
|
s16 Hu3DMotionShiftIDGet(s16 arg0);
|
|
s32 frand(void);
|
|
|
|
void fn_1_BE30(s32 arg0, ParticleData* arg1);
|
|
void fn_1_BDAC(void);
|
|
void fn_1_BC7C(s16 arg0);
|
|
void fn_1_BBF8(void);
|
|
s32 fn_1_BBC4(void);
|
|
void fn_1_BB74(s8* arg0);
|
|
s32 fn_1_BB48(void);
|
|
void fn_1_B8E8(s32 arg0);
|
|
void fn_1_B748(omObjData* arg0, someBits2* arg1);
|
|
void fn_1_B688(omObjData* arg0, someBits2* arg1);
|
|
void fn_1_B4AC(omObjData* arg0, someBits2* arg1);
|
|
void fn_1_B350(omObjData* arg0);
|
|
void fn_1_B0A4(s32 arg0);
|
|
u32 fn_1_AF24(s32 arg0);
|
|
s32 fn_1_AE4C(s32 arg0, s8* arg1);
|
|
s32 fn_1_AE20(void);
|
|
void fn_1_ACD8(s32 arg0);
|
|
void fn_1_ABD0(omObjData* arg0, someBits* arg1);
|
|
void fn_1_AB18(omObjData* arg0, someBits* arg1);
|
|
void fn_1_A8AC(s32 arg0);
|
|
void fn_1_A7A0(s32 arg0);
|
|
void fn_1_A994(omObjData* arg0);
|
|
void fn_1_A5E0(s32 arg0);
|
|
void fn_1_A6B0(void);
|
|
void fn_1_A44C(s32 arg0);
|
|
void fn_1_9C8C(void);
|
|
void fn_1_9B30(void);
|
|
s32 fn_1_9CF4(s32 arg0);
|
|
void fn_1_9F78(void);
|
|
void fn_1_9FE4(void);
|
|
|
|
//DATA
|
|
s16 lbl_1_data_4D8 = -1;
|
|
s16 lbl_1_data_4DA = -1;
|
|
s16 lbl_1_data_4DC = -1;
|
|
s32 lbl_1_data_4E0 = -1;
|
|
s16 lbl_1_data_4E4 = -1;
|
|
s8 lbl_1_data_4E6[] = {1, 1, 3, 3, 2, 2, 2, 1, 2, 3, 0, 4, 5, 0};
|
|
|
|
char itemString[] = "item";
|
|
char item1String[] = "item1";
|
|
char item2String[] = "item2";
|
|
|
|
char* lbl_1_data_508[] = {
|
|
itemString, item1String, item2String
|
|
};
|
|
|
|
s32 lbl_1_data_514[] = {
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x6D),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x6E),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x6F),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x70),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x71),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x72),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x73),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x74),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x76),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x77),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x78),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x79),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x7A),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 0x7B),
|
|
};
|
|
|
|
//BSS
|
|
s8 lbl_1_bss_194[3];
|
|
AnimData* lbl_1_bss_190;
|
|
s8 lbl_1_bss_18C;
|
|
omObjData* lbl_1_bss_188;
|
|
omObjData* lbl_1_bss_184;
|
|
Process* lbl_1_bss_180;
|
|
|
|
void fn_1_9A7C(void) {
|
|
fn_1_BBF8();
|
|
}
|
|
|
|
void fn_1_9A9C(void) {
|
|
|
|
}
|
|
|
|
void fn_1_9AA0(void) {
|
|
BoardDiceDigit2DShowSet(0);
|
|
lbl_1_bss_180 = HuPrcChildCreate(fn_1_9C8C, 0x2003, 0x2000, 0, boardMainProc);
|
|
HuPrcDestructorSet2(lbl_1_bss_180, fn_1_9B30);
|
|
while (lbl_1_bss_180 != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardDiceDigit2DShowSet(1);
|
|
}
|
|
|
|
void fn_1_9B30(void) {
|
|
fn_1_BDAC();
|
|
if (lbl_1_bss_188) {
|
|
lbl_1_bss_188;
|
|
}
|
|
if (lbl_1_bss_184) {
|
|
OM_GET_WORK_PTR(lbl_1_bss_184, someBits2)->unk00_bit0 = 1;
|
|
}
|
|
if (lbl_1_data_4E0 != -1) {
|
|
HuAudFXStop(lbl_1_data_4E0);
|
|
lbl_1_data_4E0 = -1;
|
|
}
|
|
if (lbl_1_data_4DC != -1) {
|
|
BoardModelMotionKill(lbl_1_bss_C[11], lbl_1_data_4DC);
|
|
lbl_1_data_4DC = -1;
|
|
}
|
|
if (lbl_1_data_4DA != -1) {
|
|
BoardModelMotionKill(lbl_1_bss_C[11], lbl_1_data_4DA);
|
|
lbl_1_data_4DA = -1;
|
|
}
|
|
if (lbl_1_data_4D8 != -1) {
|
|
HuWinKill(lbl_1_data_4D8);
|
|
lbl_1_data_4D8 = -1;
|
|
}
|
|
lbl_1_bss_180 = 0U;
|
|
}
|
|
|
|
void fn_1_9C8C(void) {
|
|
s32 temp_r31;
|
|
|
|
temp_r31 = GWSystem.player_curr;
|
|
lbl_1_data_4E0 = -1;
|
|
if (fn_1_9CF4(temp_r31) != 0) {
|
|
fn_1_A44C(temp_r31);
|
|
fn_1_A5E0(temp_r31);
|
|
}
|
|
HuPrcEnd();
|
|
}
|
|
|
|
s32 fn_1_9CF4(s32 arg0) {
|
|
Vec sp38;
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
s16 spaceCur;
|
|
s16 temp_r29;
|
|
|
|
if (BoardPlayerItemCount(arg0) == 3) {
|
|
BoardWinCreate(2, 0x16001E, 2);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
return 0;
|
|
}
|
|
BoardWinCreateChoice(2, 0x16001A, 2, 0);
|
|
if (GWPlayer[arg0].com != 0) {
|
|
BoardComKeySetLeft();
|
|
}
|
|
BoardWinWait();
|
|
if (BoardWinChoiceGet() != 0) {
|
|
BoardWinCreate(2, 0x16001B, 2);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
return 0;
|
|
}
|
|
BoardWinKill();
|
|
sp14.x = 0.0f;
|
|
sp14.y = 200.0f;
|
|
sp14.z = 0.0f;
|
|
sp8.x = -10.0f;
|
|
sp8.y = 0.0f;
|
|
sp8.z = 0.0f;
|
|
BoardCameraMotionStartEx(lbl_1_bss_C[8], &sp8, &sp14, 1500.0f, -1.0f, 0x15);
|
|
spaceCur = GWPlayer[arg0].space_curr;
|
|
temp_r29 = BoardSpaceLinkFlagSearch(0, spaceCur, 0x02000000);
|
|
BoardPlayerPosGet(arg0, &sp2C);
|
|
BoardSpacePosGet(0, temp_r29, &sp38);
|
|
PSVECSubtract(&sp38, &sp2C, &sp20);
|
|
PSVECNormalize(&sp20, &sp20);
|
|
BoardPlayerRotYSet(arg0, (f32) (180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793)));
|
|
BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14);
|
|
while (GWPlayer[arg0].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardRotateDiceNumbers(arg0);
|
|
HuPrcSleep(0x3C);
|
|
fn_1_B0A4(arg0);
|
|
fn_1_9F78();
|
|
fn_1_9FE4();
|
|
fn_1_A8AC(arg0);
|
|
return 1;
|
|
}
|
|
|
|
void fn_1_9F78(void) {
|
|
lbl_1_data_4DA = BoardModelMotionCreate(lbl_1_bss_C[11], 0x770023);
|
|
lbl_1_data_4DC = BoardModelMotionCreate(lbl_1_bss_C[11], 0x770024);
|
|
}
|
|
|
|
void fn_1_9FE4(void) {
|
|
Vec sp30;
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
f32 sp8;
|
|
f32 temp_f30;
|
|
f32 var_f31;
|
|
|
|
BoardModelPosGet(lbl_1_bss_C[11], &sp24);
|
|
sp18.x = (-3179.800048828125 + (200.0 * sin(0.0)));
|
|
sp18.z = (-907.7000122070313 + 200.0 * cos(0.0));
|
|
sp18.y = sp24.y;
|
|
PSVECSubtract(&sp18, &sp24, &spC);
|
|
temp_f30 = (atan2(spC.z, spC.x) / 3.141592653589793 * 180.0);
|
|
sp8 = BoardModelRotYGet(lbl_1_bss_C[11]);
|
|
BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DA, 0.0f, 10.0, 0x40000001);
|
|
while (BoardDAngleCalcRange(&sp8, temp_f30, 10.0) == 0) {
|
|
BoardModelRotYSet(lbl_1_bss_C[11], sp8);
|
|
HuPrcVSleep();
|
|
}
|
|
BoardModelRotYSet(lbl_1_bss_C[11], temp_f30);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_C[11], 2.0f);
|
|
spC.x /= 20.0f;
|
|
spC.z /= 20.0f;
|
|
spC.y = 0.0f;
|
|
sp30 = sp24;
|
|
var_f31 = 0.0f;
|
|
while (var_f31 < 20.0f) {
|
|
PSVECAdd(&sp30, &spC, &sp30);
|
|
BoardModelPosSetV(lbl_1_bss_C[11], &sp30);
|
|
HuPrcVSleep();
|
|
var_f31 += 1.0f;
|
|
}
|
|
BoardAudSeqPause(0, 1, 0x3E8);
|
|
HuAudFXPlay(0x450);
|
|
HuAudFXPlay(0x362);
|
|
BoardCameraQuakeSet(3, 100.0f);
|
|
fn_1_B8E8(1);
|
|
BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DC, 0.0f, 10.0, 0x40000005);
|
|
PSVECSubtract(&sp24, &sp30, &spC);
|
|
spC.x /= 60.0f;
|
|
spC.z /= 60.0f;
|
|
spC.y = 0.0f;
|
|
var_f31 = 0.0f;
|
|
while (var_f31 < 60.0f) {
|
|
PSVECAdd(&sp30, &spC, &sp30);
|
|
BoardModelPosSetV(lbl_1_bss_C[11], &sp30);
|
|
HuPrcVSleep();
|
|
var_f31 += 1.0f;
|
|
}
|
|
temp_f30 = 0.0f;
|
|
sp8 = BoardModelRotYGet(lbl_1_bss_C[11]);
|
|
BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DA, 0.0f, 10.0, 0x40000001);
|
|
while (BoardDAngleCalcRange(&sp8, temp_f30, 10.0) == 0) {
|
|
BoardModelRotYSet(lbl_1_bss_C[11], sp8);
|
|
HuPrcVSleep();
|
|
}
|
|
BoardModelMotionShiftSet(lbl_1_bss_C[11], 1, 0.0f, 10.0, 0x40000001);
|
|
}
|
|
|
|
void fn_1_A44C(s32 arg0) {
|
|
s16 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
|
|
BoardMusStart(1, 0x17, 0x7F, 0);
|
|
temp_r30 = MGSeqCreate(3, 0);
|
|
while (MGSeqStatGet(temp_r30) != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
fn_1_A7A0(arg0);
|
|
fn_1_A6B0();
|
|
fn_1_ACD8(1);
|
|
while (fn_1_AE20() != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
temp_r29 = fn_1_BBC4() + 0x80000;
|
|
BoardWinCreate(2, 0x16001C, 2);
|
|
BoardWinInsertMesSet(temp_r29, 0);
|
|
BoardWinWait();
|
|
fn_1_B8E8(4);
|
|
while (fn_1_BB48() != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
omVibrate(arg0, 0xC, 6, 6);
|
|
BoardPlayerItemAdd(arg0, fn_1_BBC4());
|
|
fn_1_ACD8(3);
|
|
temp_r28 = HuAudSStreamPlay(2);
|
|
while (HuAudSStreamStatGet(temp_r28) != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardAudSeqPause(0, 0, 0x3E8);
|
|
while (lbl_1_bss_188) {
|
|
HuPrcVSleep();
|
|
}
|
|
HuPrcSleep(0x1E);
|
|
BoardWinCreate(2, 0x16001D, 2);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
}
|
|
|
|
void fn_1_A5E0(s32 arg0) {
|
|
Vec sp14;
|
|
Vec sp8;
|
|
s16 spaceCur;
|
|
|
|
spaceCur = GWPlayer[arg0].space_curr;
|
|
BoardPlayerPosGet(arg0, &sp14);
|
|
BoardSpacePosGet(0, spaceCur, &sp8);
|
|
BoardCameraTargetPlayerSet(arg0);
|
|
BoardCameraViewSet(1);
|
|
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14);
|
|
while (GWPlayer[arg0].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardModelRotYSet(lbl_1_bss_C[11], 0.0f);
|
|
BoardCameraMotionWait();
|
|
}
|
|
|
|
void fn_1_A6B0(void) {
|
|
f32 sp8[2];
|
|
f32 val1, val2;
|
|
|
|
HuWinMesMaxSizeGet(1, sp8, 0x16001F);
|
|
val1 = -10000.0f;
|
|
val2 = 392.0f;
|
|
lbl_1_data_4D8 = HuWinCreate(val1, val2, sp8[0], sp8[1], 0);
|
|
HuWinBGTPLvlSet(lbl_1_data_4D8, 0.0f);
|
|
HuWinMesSpeedSet(lbl_1_data_4D8, 0);
|
|
HuWinMesSet(lbl_1_data_4D8, 0x16001FU);
|
|
}
|
|
|
|
void fn_1_A7A0(s32 arg0) {
|
|
someBits* temp_r31;
|
|
omObjData* temp_r3;
|
|
|
|
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, (void*)fn_1_A994);
|
|
lbl_1_bss_188 = temp_r3;
|
|
temp_r31 = (someBits*)&temp_r3->work[0];
|
|
temp_r31->unk00_bit0 = 0;
|
|
temp_r31->unk00_bit6 = 0;
|
|
temp_r31->unk00_bit4 = arg0;
|
|
temp_r31->unk00_bit1 = 0;
|
|
temp_r31->unk1 = 5U;
|
|
temp_r31->unk2 = 0x3C;
|
|
temp_r31->unk4 = MGSeqCreate(1, temp_r31->unk1, 0x120, 0x40);
|
|
fn_1_BB74(lbl_1_bss_194);
|
|
lbl_1_bss_18C = fn_1_AE4C(arg0, lbl_1_bss_194);
|
|
}
|
|
|
|
void fn_1_A8AC(s32 arg0) {
|
|
Vec sp14;
|
|
Vec sp8;
|
|
f32 playerYRot;
|
|
|
|
BoardModelPosGet(lbl_1_bss_C[9], &sp8);
|
|
BoardPlayerPosGet(arg0, &sp14);
|
|
sp8.y = sp14.y;
|
|
BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14);
|
|
while (GWPlayer[arg0].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
playerYRot = BoardPlayerRotYGet(arg0) + 180.0f;
|
|
BoardPlayerMotBlendSet(arg0, playerYRot, 0xF);
|
|
while (BoardPlayerMotBlendCheck(arg0) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
void fn_1_A994(omObjData* arg0) {
|
|
s32 temp_r0;
|
|
someBits* temp_r31;
|
|
|
|
temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
|
|
if ((temp_r31->unk00_bit0 != 0)|| (BoardIsKill() != 0)) {
|
|
if (temp_r31->unk4 != -1) {
|
|
MGSeqParamSet(temp_r31->unk4, 2, -1U);
|
|
temp_r31->unk4 = -1;
|
|
}
|
|
lbl_1_bss_188 = NULL;
|
|
|
|
omDelObjEx(HuPrcCurrentGet(), arg0);
|
|
return;
|
|
}
|
|
if (temp_r31->unk00_bit6 == 0) {
|
|
if (temp_r31->unk2 != 0) {
|
|
temp_r31->unk2--;
|
|
} else {
|
|
if (temp_r31->unk1 != 0) {
|
|
temp_r31->unk1--;
|
|
} else {
|
|
fn_1_ACD8(2);
|
|
}
|
|
MGSeqParamSet(temp_r31->unk4, 1, temp_r31->unk1);
|
|
temp_r31->unk2 = 0x3CU;
|
|
}
|
|
}
|
|
switch (temp_r31->unk00_bit1) {
|
|
case 1:
|
|
fn_1_AB18(arg0, temp_r31);
|
|
return;
|
|
case 2:
|
|
fn_1_ABD0(arg0, temp_r31);
|
|
return;
|
|
case 3:
|
|
if (BoardPlayerMotionEndCheck(temp_r31->unk00_bit4) != 0) {
|
|
temp_r31->unk00_bit0 = 1;
|
|
}
|
|
case 0:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void fn_1_AB18(omObjData* arg0, someBits* arg1) {
|
|
u32 var_r31 = 0;
|
|
|
|
if (GWPlayer[arg1->unk00_bit4].com != 0) {
|
|
var_r31 = fn_1_AF24(arg1->unk00_bit4);
|
|
} else {
|
|
var_r31 = HuPadBtnDown[GWPlayer[arg1->unk00_bit4].port];
|
|
}
|
|
if (var_r31 == 0x100) {
|
|
fn_1_ACD8(2);
|
|
}
|
|
}
|
|
|
|
//TODO properly use inlines
|
|
void fn_1_ABD0(omObjData* arg0, someBits* arg1) {
|
|
s16 boardModelID;
|
|
PlayerState* playerStateCopy;
|
|
s32 bit;
|
|
PlayerState* playerState;
|
|
s16 temp, temp2;
|
|
|
|
bit = arg1->unk00_bit4;
|
|
playerState = &GWPlayer[bit];
|
|
playerStateCopy = playerState;
|
|
temp = boardPlayerMdl[playerStateCopy->player_idx];
|
|
temp2 = temp;
|
|
boardModelID = BoardModelIDGet(temp2);
|
|
|
|
if (Hu3DMotionShiftIDGet(boardModelID) == -1) {
|
|
if (!(arg1->unk00_bit7)) {
|
|
if (BoardPlayerMotionTimeGet(arg1->unk00_bit4) >= 27.0f) {
|
|
arg1->unk00_bit7 = 1;
|
|
BoardAudSeqFadeOut(1, 0x64);
|
|
fn_1_B8E8(2);
|
|
return;
|
|
}
|
|
}
|
|
if (BoardPlayerMotionEndCheck(arg1->unk00_bit4)) {
|
|
fn_1_ACD8(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_ACD8(s32 arg0) {
|
|
someBits* temp_r31;
|
|
|
|
temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
|
|
temp_r31->unk00_bit1 = arg0;
|
|
switch (arg0) {
|
|
case 0:
|
|
BoardRotateDiceNumbers(temp_r31->unk00_bit4);
|
|
return;
|
|
case 2:
|
|
temp_r31->unk00_bit6 = 1;
|
|
if (lbl_1_data_4D8 != -1) {
|
|
HuWinKill(lbl_1_data_4D8);
|
|
lbl_1_data_4D8 = -1;
|
|
}
|
|
if (temp_r31->unk4 != -1) {
|
|
MGSeqParamSet(temp_r31->unk4, 2, -1U);
|
|
temp_r31->unk4 = -1;
|
|
}
|
|
BoardPlayerMotionShiftSet(temp_r31->unk00_bit4, 0xB, 0.0f, 10.0f, 0);
|
|
return;
|
|
case 3:
|
|
BoardPlayerMotionShiftSet(temp_r31->unk00_bit4, 7, 0.0f, 10.0f, 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_AE20(void) {
|
|
someBits* temp_r31 = (someBits*)&lbl_1_bss_188->work[0];
|
|
return temp_r31->unk00_bit1;
|
|
}
|
|
|
|
s32 fn_1_AE4C(s32 arg0, s8* arg1) {
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
s32 var_r31;
|
|
|
|
temp_r29 = lbl_1_data_4E6[arg1[0]];
|
|
temp_r28 = lbl_1_data_4E6[arg1[1]];
|
|
temp_r30 = lbl_1_data_4E6[arg1[2]];
|
|
if (temp_r29 > temp_r28) {
|
|
if (temp_r29 > temp_r30) {
|
|
var_r31 = 0;
|
|
} else if (temp_r30 > temp_r28) {
|
|
var_r31 = 2;
|
|
} else {
|
|
var_r31 = 1;
|
|
}
|
|
} else if (temp_r28 > temp_r30) {
|
|
var_r31 = 1;
|
|
} else if (temp_r30 > temp_r29) {
|
|
var_r31 = 2;
|
|
} else {
|
|
var_r31 = 0;
|
|
}
|
|
return var_r31;
|
|
}
|
|
|
|
u32 fn_1_AF24(s32 arg0) {
|
|
s32 spC;
|
|
s32 sp8;
|
|
s16 temp_r31;
|
|
s16 var_r30;
|
|
s8 temp_r0_2;
|
|
|
|
spC = 0;
|
|
switch (GWPlayer[arg0].diff) {
|
|
case 3:
|
|
var_r30 = 0;
|
|
break;
|
|
case 2:
|
|
var_r30 = 5;
|
|
break;
|
|
case 1:
|
|
var_r30 = 15;
|
|
break;
|
|
case 0:
|
|
var_r30 = 40;
|
|
break;
|
|
}
|
|
if ((var_r30 != 0) && (BoardRandMod(100) < var_r30)) {
|
|
return 0x100U;
|
|
}
|
|
|
|
temp_r31 = BoardModelMotionTimeGet(lbl_1_bss_C[9]);
|
|
|
|
switch (lbl_1_bss_18C) {
|
|
case 0:
|
|
if ((temp_r31 < 33) || (temp_r31 > 35)) {
|
|
break;
|
|
}
|
|
return 0x100U;
|
|
case 1:
|
|
if (((temp_r31 >= 40) && (temp_r31 <= 42)) || ((temp_r31 >= 20) && (temp_r31 <= 22))) {
|
|
return 0x100U;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (temp_r31 >= 50) {
|
|
return 0x100U;
|
|
}
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void fn_1_B0A4(s32 arg0) {
|
|
Mtx sp18;
|
|
s32 spC[3];
|
|
s32 j;
|
|
s32 i;
|
|
s32 var_r31_2;
|
|
s32 temp_r29;
|
|
someBits2* temp_r30;
|
|
omObjData* temp_r3;
|
|
|
|
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, (void*)fn_1_B350);
|
|
lbl_1_bss_184 = (void*)temp_r3;
|
|
temp_r30 = (someBits2*)&temp_r3->work[0];
|
|
|
|
temp_r30->unk00_bit0 = 0;
|
|
temp_r30->unk00_bit1 = 0;
|
|
temp_r30->unk00_bit4 = arg0;
|
|
|
|
for (i = 0; i < 3;) {
|
|
spC[i] = BoardRandMod(14);
|
|
if ((spC[i] != 10) && (spC[i] != 13)) {
|
|
for (j = 0; j < i; j++) {
|
|
if (spC[i] == spC[j]) {
|
|
spC[i] = -1;
|
|
}
|
|
}
|
|
if (spC[i] == -1) {
|
|
continue;
|
|
}
|
|
} else {
|
|
continue;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
fn_1_BBF8();
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
temp_r29 = spC[i];
|
|
temp_r30->unk3[i] = temp_r29;
|
|
temp_r30->unk_06[i] = BoardModelCreate(lbl_1_data_514[temp_r29], NULL, 0);
|
|
BoardModelHookSet(lbl_1_bss_C[9], lbl_1_data_508[i], temp_r30->unk_06[i]);
|
|
BoardModelMotionSpeedSet(temp_r30->unk_06[i], 0.0f);
|
|
if (temp_r29 == 0xB) {
|
|
BoardModelMotionStart(temp_r30->unk_06[i], 0, 0x40000001);
|
|
}
|
|
if (temp_r29 == 5) {
|
|
PSMTXTrans(sp18, 0.0f, -50.0f, 0.0f);
|
|
BoardModelMtxSet(temp_r30->unk_06[i], &sp18);
|
|
}
|
|
if ((temp_r29 == 6) || (temp_r29 == 7)) {
|
|
PSMTXTrans(sp18, 0.0f, 0.0f, 8.0f);
|
|
BoardModelMtxSet(temp_r30->unk_06[i], &sp18);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_B350(omObjData* arg0) {
|
|
s32 i;
|
|
someBits2* temp_r31;
|
|
|
|
temp_r31 = (someBits2*)&arg0->work[0];
|
|
if ((temp_r31->unk00_bit0 != 0) || (BoardIsKill() != 0)) {
|
|
BoardModelHookReset(lbl_1_bss_C[9]);
|
|
for (i = 0; i < 3; i++) {
|
|
BoardModelKill(temp_r31->unk_06[i]);
|
|
}
|
|
fn_1_BBF8();
|
|
omDelObjEx(HuPrcCurrentGet(), arg0);
|
|
lbl_1_bss_184 = NULL;
|
|
return;
|
|
}
|
|
|
|
switch (temp_r31->unk00_bit1) {
|
|
case 1:
|
|
if (!(BoardModelMotionTimeGet(lbl_1_bss_C[9]) < 20.0f)) {
|
|
BoardModelMotionStartEndSet(lbl_1_bss_C[9], 0x14, 0x3A);
|
|
fn_1_B8E8(0);
|
|
return;
|
|
}
|
|
case 0:
|
|
break;
|
|
case 2:
|
|
fn_1_B4AC(arg0, temp_r31);
|
|
return;
|
|
case 3:
|
|
fn_1_B688(arg0, temp_r31);
|
|
return;
|
|
case 4:
|
|
fn_1_B748(arg0, temp_r31);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void fn_1_B4AC(omObjData* arg0, someBits2* arg1) {
|
|
Point3d sp20;
|
|
Point3d sp14;
|
|
Point3d sp8;
|
|
f32 temp_f31;
|
|
s8 temp_r0;
|
|
s32 i;
|
|
|
|
arg1->unk2 = -1;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[9]), lbl_1_data_508[i], &sp20);
|
|
BoardPlayerPosGet(arg1->unk00_bit4, &sp14);
|
|
sp14.y += 66.0f;
|
|
if (BoardVecMinDistCheck(&sp20, &sp14, 100.0f) != 0) {
|
|
sp8 = sp20;
|
|
arg1->unk2 = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
HuAudFXPlay(0x30C);
|
|
BoardModelHookObjReset(lbl_1_bss_C[9], lbl_1_data_508[arg1->unk2]);
|
|
temp_f31 = BoardModelMotionTimeGet(lbl_1_bss_C[9]);
|
|
BoardModelMotionShiftSet(lbl_1_bss_C[9], 0, 15.0f, 10.0f, 0x40000004U);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_C[9], 0.5f);
|
|
BoardModelMotionTimeSet(lbl_1_bss_C[9], temp_f31);
|
|
BoardModelPosSetV(arg1->unk_06[arg1->unk2], &sp8);
|
|
fn_1_B8E8(3);
|
|
fn_1_BC7C(arg1->unk_06[arg1->unk2]);
|
|
}
|
|
|
|
void fn_1_B688(omObjData* arg0, someBits2* arg1) {
|
|
Point3d sp8;
|
|
|
|
if (arg1->unk1-- != 0) {
|
|
BoardModelPosGet(arg1->unk_06[arg1->unk2], &sp8);
|
|
sp8.x = sp8.x + arg0->trans.x;
|
|
sp8.y += arg0->trans.y;
|
|
sp8.z = sp8.z + arg0->trans.z;
|
|
BoardModelPosSetV(arg1->unk_06[arg1->unk2], &sp8);
|
|
return;
|
|
}
|
|
|
|
fn_1_B8E8(0);
|
|
}
|
|
|
|
void fn_1_B748(omObjData* arg0, someBits2* arg1) {
|
|
Vec sp14;
|
|
Point3d sp8;
|
|
f32 temp_f0;
|
|
s16 temp_r29;
|
|
|
|
temp_r29 = arg1->unk_06[arg1->unk2];
|
|
|
|
if (arg1->unk1 == 0) {
|
|
HuAudFXPlay(781);
|
|
}
|
|
|
|
if (arg1->unk1 < 90) {
|
|
OSu8tof32((u8*)&arg1->unk1, &temp_f0);
|
|
BoardModelPosGet(temp_r29, &sp8);
|
|
sp8.y += arg0->trans.y;
|
|
BoardModelPosSetV(temp_r29, &sp8);
|
|
BoardModelRotYSet(temp_r29, 8.0f + BoardModelRotYGet(temp_r29));
|
|
BoardModelScaleGet(temp_r29, &sp14);
|
|
sp14.x = sp14.y = sp14.z = cos(3.141592653589793 * temp_f0 / 180.0);
|
|
BoardModelScaleSetV(temp_r29, &sp14);
|
|
arg1->unk1 += 4;
|
|
return;
|
|
}
|
|
|
|
if (lbl_1_data_4E0 != -1) {
|
|
HuAudFXStop(lbl_1_data_4E0);
|
|
lbl_1_data_4E0 = -1;
|
|
}
|
|
|
|
fn_1_B8E8(0);
|
|
}
|
|
|
|
void fn_1_B8E8(s32 arg0) {
|
|
Point3d sp14;
|
|
Point3d sp8;
|
|
f32 temp_f31;
|
|
someBits2* temp_r31;
|
|
f32 temp;
|
|
|
|
temp_r31 = (someBits2*)&lbl_1_bss_184->work[0];
|
|
temp_r31->unk00_bit1 = arg0;
|
|
switch (arg0) {
|
|
case 1:
|
|
temp_f31 = 0.31666666f;
|
|
BoardModelMotionStart(lbl_1_bss_C[9], 0, 0x40000001);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_C[9], temp_f31);
|
|
BoardModelMotionTimeSet(lbl_1_bss_C[9], 8.0f);
|
|
return;
|
|
case 2:
|
|
temp_r31->unk00_bit6 = 1;
|
|
return;
|
|
case 3:
|
|
lbl_1_data_4E0 = HuAudFXPlay(0x35F);
|
|
BoardModelPosGet(temp_r31->unk_06[temp_r31->unk2], &sp8);
|
|
BoardPlayerPosGet(temp_r31->unk00_bit4, &sp14);
|
|
temp = 50.0f + sp8.y;
|
|
lbl_1_bss_184->trans.x = (sp14.x - sp8.x) / 10.0f;
|
|
lbl_1_bss_184->trans.z = (sp14.z - sp8.z) / 10.0f;
|
|
lbl_1_bss_184->trans.y = (temp - sp8.y) / 10.0f;
|
|
temp_r31->unk1 = 10;
|
|
return;
|
|
case 4:
|
|
BoardPlayerPosGet(temp_r31->unk00_bit4, &sp14);
|
|
sp14.y += 30.000002f;
|
|
BoardModelPosGet(temp_r31->unk_06[temp_r31->unk2], &sp8);
|
|
lbl_1_bss_184->trans.y = (sp14.y - sp8.y) / 22.0f;
|
|
temp_r31->unk1 = 0;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_BB48(void) {
|
|
someBits2* temp = (someBits2*)&lbl_1_bss_184->work[0];
|
|
return temp->unk00_bit1;
|
|
}
|
|
|
|
void fn_1_BB74(s8* arg0) {
|
|
someBits2* bits = OM_GET_WORK_PTR(lbl_1_bss_184, someBits2);
|
|
s32 i;
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
arg0[i] = bits->unk3[i];
|
|
}
|
|
}
|
|
|
|
s32 fn_1_BBC4(void) {
|
|
someBits2* bits = OM_GET_WORK_PTR(lbl_1_bss_184, someBits2);
|
|
return bits->unk3[bits->unk2];
|
|
}
|
|
|
|
void fn_1_BBF8(void) {
|
|
BoardModelMotionStart(lbl_1_bss_C[9], 0, 0);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_C[9], 0.0f);
|
|
BoardModelMotionTimeSet(lbl_1_bss_C[9], 0.0f);
|
|
BoardModelAttrReset(lbl_1_bss_C[9], 0x40000004);
|
|
}
|
|
|
|
|
|
void fn_1_BC7C(s16 arg0) {
|
|
ParticleData* particle;
|
|
|
|
lbl_1_bss_190 = HuSprAnimRead(HuDataSelHeapReadNum(0x120000, 0x10000000, 2));
|
|
HuSprAnimLock(lbl_1_bss_190);
|
|
lbl_1_data_4E4 = Hu3DParticleCreate(lbl_1_bss_190, 100);
|
|
Hu3DParticleHookSet(lbl_1_data_4E4, fn_1_BE30);
|
|
Hu3DParticleColSet(lbl_1_data_4E4, 0xFF, 0xFF, 0);
|
|
Hu3DModelPosSet(lbl_1_data_4E4, 0.0f, 0.0f, 0.0f);
|
|
Hu3DParticleBlendModeSet(lbl_1_data_4E4, 1);
|
|
Hu3DModelLayerSet(lbl_1_data_4E4, 2);
|
|
particle = Hu3DData[lbl_1_data_4E4].unk_120;
|
|
particle->unk_02 = arg0;
|
|
}
|
|
|
|
void fn_1_BDAC(void) {
|
|
if (lbl_1_data_4E4 != -1) {
|
|
Hu3DModelKill(lbl_1_data_4E4);
|
|
lbl_1_data_4E4 = -1;
|
|
}
|
|
if (lbl_1_bss_190) {
|
|
HuSprAnimKill(lbl_1_bss_190);
|
|
lbl_1_bss_190 = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_BE30(s32 arg0, ParticleData* arg1) {
|
|
Point3d sp8;
|
|
|
|
f32 temp_f30;
|
|
f32 temp_f29;
|
|
f32 temp_f31;
|
|
HsfanimStruct01* var_r31;
|
|
s32 i, j;
|
|
|
|
if (arg1->unk_34 == 0U) {
|
|
var_r31 = arg1->unk_48;
|
|
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
|
var_r31->unk40.a = 0;
|
|
var_r31->unk2C = 0.0f;
|
|
}
|
|
arg1->unk_00 = 0;
|
|
}
|
|
|
|
BoardModelScaleGet(arg1->unk_02, &sp8);
|
|
temp_f31 = sp8.x;
|
|
BoardModelPosGet(arg1->unk_02, &sp8);
|
|
|
|
for (i = 0; i < 0x16; i++) {
|
|
var_r31 = arg1->unk_48;
|
|
for (j = 0; j < arg1->unk_30; j++, var_r31++) {
|
|
if (0.0f == var_r31->unk2C) {
|
|
break;
|
|
}
|
|
}
|
|
if (j != arg1->unk_30) {
|
|
temp_f30 = 360.0f * (0.003921569f * (frand() & 0xFF));
|
|
temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (frand() & 0xFF))));
|
|
var_r31->unk34.x = (sp8.x + (temp_f29 * sin((3.141592653589793 * temp_f30) / 180.0)));
|
|
var_r31->unk34.z = (sp8.z + (temp_f29 * cos((3.141592653589793 * temp_f30) / 180.0)));
|
|
var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * (0.003921569f * (frand() & 0xFF))))));
|
|
var_r31->unk08.x = (0.5f + (3.0f * (0.003921569f * (frand() & 0xFF))));
|
|
var_r31->unk08.y = (0.3f + (2.0f * (0.003921569f * (frand() & 0xFF))));
|
|
var_r31->unk40.a = 180;
|
|
var_r31->unk2C = (15.0f * temp_f31);
|
|
}
|
|
}
|
|
var_r31 = arg1->unk_48;
|
|
|
|
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
|
if (0.0f != var_r31->unk2C) {
|
|
var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x);
|
|
var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y);
|
|
if (var_r31->unk2C <= 0.0f) {
|
|
var_r31->unk2C = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|