826 lines
24 KiB
C
826 lines
24 KiB
C
#include "REL/w05Dll.h"
|
|
|
|
#include "game/audio.h"
|
|
#include "game/chrman.h"
|
|
#include "game/frand.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/objsub.h"
|
|
#include "game/pad.h"
|
|
|
|
#include "game/board/audio.h"
|
|
#include "game/board/model.h"
|
|
#include "game/board/window.h"
|
|
|
|
// data
|
|
s32 lbl_1_data_310[2] = { 0x79, 0x7A };
|
|
char *lbl_1_data_330[3] = { "suika1", "suika2", "suika3" };
|
|
|
|
// bss
|
|
s16 lbl_1_bss_B6;
|
|
s16 lbl_1_bss_B0[3];
|
|
s16 lbl_1_bss_AA[3];
|
|
s16 lbl_1_bss_A4[3];
|
|
s16 lbl_1_bss_A2;
|
|
s16 lbl_1_bss_9E[2];
|
|
s16 lbl_1_bss_9C;
|
|
Process *lbl_1_bss_98;
|
|
omObjData *lbl_1_bss_94;
|
|
omObjData *lbl_1_bss_90;
|
|
omObjData *lbl_1_bss_8C;
|
|
s32 lbl_1_bss_88;
|
|
s32 lbl_1_bss_7C[3];
|
|
AnimData *lbl_1_bss_78;
|
|
|
|
void fn_1_6B28(void)
|
|
{
|
|
BoardModelAttrSet(*lbl_1_bss_14, 0x40000002U);
|
|
lbl_1_bss_98 = NULL;
|
|
lbl_1_bss_78 = NULL;
|
|
}
|
|
|
|
void fn_1_6B7C(void)
|
|
{
|
|
Vec sp1C;
|
|
Vec sp10;
|
|
s32 spC;
|
|
s32 var_r31;
|
|
|
|
lbl_1_bss_B6 = GWSystem.player_curr;
|
|
spC = GWPlayer[lbl_1_bss_B6].character;
|
|
|
|
for (var_r31 = 0; var_r31 < 2; var_r31++) {
|
|
lbl_1_bss_9E[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_B6, lbl_1_data_310[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_B6].character]);
|
|
}
|
|
lbl_1_bss_A2 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W05, 0x13), NULL, 0);
|
|
BoardModelVisibilitySet(lbl_1_bss_A2, 0);
|
|
sp1C.x = sp1C.y = sp1C.z = 3.33333f;
|
|
BoardModelScaleSetV(lbl_1_bss_A2, &sp1C);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), "chara1", &sp1C);
|
|
BoardPlayerPosGet(lbl_1_bss_B6, &sp10);
|
|
BoardPlayerPosLerpStart(lbl_1_bss_B6, &sp10, &sp1C, 0x1E);
|
|
|
|
while (GWPlayer[lbl_1_bss_B6].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardPlayerMotBlendSet(lbl_1_bss_B6, 0, 0xF);
|
|
|
|
while (BoardPlayerMotBlendCheck(lbl_1_bss_B6) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
|
|
HuPrcSleep(0x3C);
|
|
BoardAudSeqPause(0, 1, 0x3E8);
|
|
HuAudFXPlay(0x30D);
|
|
fn_1_88B8();
|
|
HuAudFXPlay(0x491);
|
|
omVibrate(lbl_1_bss_B6, 0x7FFF, 6, 6);
|
|
BoardModelHookSet(lbl_1_bss_14[0], "chara1", BoardPlayerModelGet(lbl_1_bss_B6));
|
|
BoardModelMotionStartEndSet(lbl_1_bss_14[0], 0x1E, 0x5A);
|
|
BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002);
|
|
BoardMusStart(1, 0x22, 0x7F, 0);
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_B6, lbl_1_bss_9E[0], 0.0f, 30.0f, HU3D_MOTATTR_LOOP);
|
|
HuPrcSleep(0x1E);
|
|
BoardModelVisibilitySet(lbl_1_bss_A2, 1);
|
|
BoardModelHookSet(BoardPlayerModelGet(lbl_1_bss_B6), "a-itemhook-r", lbl_1_bss_A2);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(*lbl_1_bss_14), "chara1", &sp10);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(BoardPlayerModelGet(lbl_1_bss_B6)), "a-itemhook-r", &sp1C);
|
|
VECAdd(&sp1C, &sp10, &sp1C);
|
|
sp1C.y += 25.0f;
|
|
CharModelLayerSetAll(7);
|
|
CharModelEffectCreate(-1, &sp1C);
|
|
HuPadRumbleStop(GWPlayer[lbl_1_bss_B6].port);
|
|
BoardModelAttrSet(lbl_1_bss_14[0], 0x40000002);
|
|
HuPrcSleep(0x1E);
|
|
BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002);
|
|
omVibrate(lbl_1_bss_B6, 0x7FFF, 6, 6);
|
|
HuAudFXPlay(0x492);
|
|
|
|
while (BoardModelMotionTimeGet(lbl_1_bss_14[0]) < 90.0f) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardModelMotionTimeSet(lbl_1_bss_14[0], 90.0f);
|
|
HuPadRumbleStop(GWPlayer[lbl_1_bss_B6].port);
|
|
BoardModelHookReset(lbl_1_bss_14[0]);
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
BoardModelHookSet(lbl_1_bss_14[0], lbl_1_data_330[var_r31], lbl_1_bss_AA[var_r31]);
|
|
}
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), "chara1", &sp10);
|
|
BoardPlayerPosSetV(lbl_1_bss_B6, &sp10);
|
|
HuPrcSleep(0x3C);
|
|
lbl_1_bss_94 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_7284);
|
|
lbl_1_bss_8C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_78A0);
|
|
lbl_1_bss_90 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL);
|
|
lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14, MEMORY_DEFAULT_NUM);
|
|
if (lbl_1_bss_78 == NULL) {
|
|
lbl_1_bss_78 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0x00));
|
|
HuSprAnimLock(lbl_1_bss_78);
|
|
}
|
|
lbl_1_bss_9C = 0;
|
|
}
|
|
|
|
void fn_1_7284(omObjData *arg0)
|
|
{
|
|
if ((lbl_1_bss_9C != 0) && (BoardMGDoneFlagGet() == 1)) {
|
|
fn_1_77B0();
|
|
fn_1_7314();
|
|
fn_1_73C0();
|
|
omDelObjEx(boardObjMan, arg0);
|
|
}
|
|
}
|
|
|
|
void fn_1_72E4(void)
|
|
{
|
|
lbl_1_bss_9C = 1;
|
|
BoardMGExit();
|
|
}
|
|
|
|
void fn_1_7314(void)
|
|
{
|
|
s32 var_r31;
|
|
|
|
BoardModelHookReset(lbl_1_bss_14[0]);
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
BoardModelKill(lbl_1_bss_A4[var_r31]);
|
|
BoardModelKill(lbl_1_bss_AA[var_r31]);
|
|
}
|
|
if (lbl_1_bss_78 != 0) {
|
|
HuSprAnimKill(lbl_1_bss_78);
|
|
lbl_1_bss_78 = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_73C0(void)
|
|
{
|
|
omDelObjEx(boardObjMan, lbl_1_bss_90);
|
|
BoardMGDoneFlagSet(0);
|
|
}
|
|
|
|
void fn_1_7400(void)
|
|
{
|
|
|
|
while (BoardModelMotionTimeGet(lbl_1_bss_14[0]) < 30.0f) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardModelAttrSet(lbl_1_bss_14[0], 0x40000002U);
|
|
BoardModelMotionTimeSet(lbl_1_bss_14[0], 30.0f);
|
|
lbl_1_bss_98 = HuPrcCreate(fn_1_896C, 0x2004, 0x1000, 0);
|
|
HuPrcDestructorSet2(lbl_1_bss_98, fn_1_91DC);
|
|
lbl_1_bss_98->user_data = (void *)7;
|
|
HuPrcEnd();
|
|
}
|
|
|
|
s32 lbl_1_data_350[14] = {
|
|
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),
|
|
};
|
|
|
|
s16 lbl_1_data_388[92] = { 0, 1, -1, 2, 0, -1, 1, 2, 0, -1, 2, 1, 0, 2, -1, 1, 0, 2, 1, -1, 1, 2, -1, 0, 1, 2, 0, -1, 1, -1, 0, 2, 1, -1, 2, 0, 1, 0,
|
|
2, -1, 1, 0, -1, 2, 2, -1, 0, 1, 2, -1, 1, 0, 2, 0, 1, -1, 2, 0, -1, 1, 2, 1, -1, 0, 2, 1, 0, -1, -1, 0, 1, 2, -1, 0, 2, 1, -1, 1, 2, 0, -1, 1, 0,
|
|
2, -1, 2, 0, 1, -1, 2, 1, 0 };
|
|
|
|
f32 lbl_1_data_440[3] = { -90.0f, 0.0f, 90.0f };
|
|
|
|
void fn_1_74D0(s16 arg0[3])
|
|
{
|
|
f32 temp_f31;
|
|
s32 var_r31;
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
lbl_1_bss_B0[var_r31] = arg0[var_r31];
|
|
}
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
lbl_1_bss_A4[var_r31] = BoardModelCreate(lbl_1_data_350[lbl_1_bss_B0[var_r31]], NULL, 0);
|
|
if (lbl_1_bss_B0[var_r31] == 0xB) {
|
|
BoardModelAttrSet(lbl_1_bss_A4[var_r31], 0x40000001U);
|
|
}
|
|
if (lbl_1_bss_B0[var_r31] == 5) {
|
|
temp_f31 = -50.0f;
|
|
Hu3DData[BoardModelIDGet(lbl_1_bss_A4[var_r31])].unk_F0[1][3] = temp_f31;
|
|
}
|
|
if (lbl_1_bss_B0[var_r31] == 4) {
|
|
BoardModelMotionSpeedSet(lbl_1_bss_A4[var_r31], 0.0f);
|
|
}
|
|
BoardModelVisibilitySet(lbl_1_bss_A4[var_r31], 0);
|
|
}
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
lbl_1_bss_AA[var_r31] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W05, 0x12), NULL, 1);
|
|
BoardModelHookSet(lbl_1_bss_14[0], lbl_1_data_330[var_r31], lbl_1_bss_AA[var_r31]);
|
|
BoardModelAttrSet(lbl_1_bss_AA[var_r31], 0x40000002);
|
|
BoardModelMotionTimeSet(lbl_1_bss_AA[var_r31], 10.0f);
|
|
}
|
|
|
|
HuAudFXPlay(0x488);
|
|
BoardModelMotionTimeSet(lbl_1_bss_14[0], 0.0f);
|
|
BoardModelMotionStartEndSet(lbl_1_bss_14[0], 0, 0x1E);
|
|
BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002);
|
|
HuPrcCreate(fn_1_7400, 0x2004, 0x1000, 0);
|
|
}
|
|
|
|
void fn_1_77B0(void)
|
|
{
|
|
HuAudFXPlay(0x489);
|
|
BoardModelMotionStartEndSet(lbl_1_bss_14[0], 0x5A, 0x78);
|
|
BoardModelMotionTimeSet(lbl_1_bss_14[0], 90.0f);
|
|
BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002);
|
|
|
|
while (BoardModelMotionEndCheck(lbl_1_bss_14[0]) == 0) {
|
|
fn_1_1208(lbl_1_bss_14[6], 0.0f, 6.0f);
|
|
HuPrcVSleep();
|
|
}
|
|
|
|
while (fn_1_1208(lbl_1_bss_14[6], 0.0f, 6.0f) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
void fn_1_78A0(omObjData *arg0)
|
|
{
|
|
if (arg0->work[0] == 0) {
|
|
arg0->work[0] = MGSeqCreate(3, 0);
|
|
return;
|
|
}
|
|
if (MGSeqStatGet(arg0->work[0]) == 0) {
|
|
arg0->func = NULL;
|
|
lbl_1_bss_90->func = fn_1_7F04;
|
|
}
|
|
}
|
|
|
|
void fn_1_7928(omObjData *arg0)
|
|
{
|
|
Process *temp;
|
|
if (((u32)lbl_1_bss_98->user_data & 0x10) != 0) {
|
|
temp = HuPrcCreate(fn_1_799C, 0x2004, 0x1800, 0);
|
|
temp->user_data = arg0;
|
|
arg0->func = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_799C(void)
|
|
{
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
f32 temp_f29;
|
|
f32 temp_f30;
|
|
f32 var_f31;
|
|
s32 temp_r27;
|
|
s32 temp_r31;
|
|
s32 var_r28;
|
|
s32 var_r29;
|
|
omObjData *temp_r30;
|
|
|
|
temp_r30 = HuPrcCurrentGet()->user_data;
|
|
BoardPlayerPosGet(lbl_1_bss_B6, &sp2C);
|
|
temp_r31 = temp_r30->work[0];
|
|
BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20);
|
|
sp2C.y = sp20.y = 0.0f;
|
|
VECSubtract(&sp2C, &sp20, &sp14);
|
|
temp_f30 = VECMag(&sp14);
|
|
VECScale(&sp14, &sp14, 0.016666668);
|
|
|
|
for (var_r29 = 0; var_r29 < 0x3C; var_r29++) {
|
|
BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20);
|
|
VECAdd(&sp20, &sp14, &sp20);
|
|
BoardModelPosSetV(lbl_1_bss_A4[temp_r31], &sp20);
|
|
HuPrcVSleep();
|
|
}
|
|
BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20);
|
|
sp20.x = sp2C.x;
|
|
sp20.z = sp2C.z;
|
|
BoardModelPosSetV(lbl_1_bss_A4[temp_r31], &sp20);
|
|
BoardPlayerMotBlendSet(lbl_1_bss_B6, 0, 0xF);
|
|
|
|
while (BoardPlayerMotBlendCheck(lbl_1_bss_B6) == 0) {
|
|
fn_1_1208(lbl_1_bss_14[6], 90.0f, 6.0f);
|
|
HuPrcVSleep();
|
|
}
|
|
|
|
while (fn_1_1208(lbl_1_bss_14[6], 90.0f, 6.0f) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardWinCreate(2, MAKE_MESSID(39, 12), 7);
|
|
BoardWinInsertMesSet(lbl_1_bss_B0[temp_r31] + 0x80000, 0);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
HuPrcKill(lbl_1_bss_98);
|
|
lbl_1_bss_98 = NULL;
|
|
HuPrcVSleep();
|
|
HuAudFXPlay(0x30D);
|
|
BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20);
|
|
BoardModelScaleGet(lbl_1_bss_A4[temp_r31], &sp8);
|
|
var_f31 = sp8.x;
|
|
temp_f29 = -0.075f;
|
|
temp_f30 = (sp2C.y - sp20.y) / 30.0f;
|
|
var_r28 = 0;
|
|
HuAudFXFadeOut(lbl_1_bss_88, 0x1F3);
|
|
while (var_r28 == 0) {
|
|
sp20.y += temp_f30;
|
|
var_f31 += temp_f29;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 = 0.0f;
|
|
var_r28 = 1;
|
|
}
|
|
sp8.x = sp8.y = sp8.z = var_f31;
|
|
BoardModelPosSetV(lbl_1_bss_A4[temp_r31], &sp20);
|
|
BoardModelScaleSetV(lbl_1_bss_A4[temp_r31], &sp8);
|
|
HuPrcVSleep();
|
|
}
|
|
HuAudFXStop(lbl_1_bss_88);
|
|
BoardModelVisibilitySet(lbl_1_bss_A4[temp_r31], 0);
|
|
BoardPlayerItemAdd(lbl_1_bss_B6, lbl_1_bss_B0[temp_r31]);
|
|
omVibrate(lbl_1_bss_B6, 0xC, 6, 6);
|
|
temp_r27 = HuAudSStreamPlay(2);
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_B6, 7, 0.0f, 5.0f, HU3D_MOTATTR_NONE);
|
|
|
|
while (BoardPlayerMotionEndCheck(lbl_1_bss_B6) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
HuPrcSleep(0x1E);
|
|
|
|
while (HuAudSStreamStatGet(temp_r27) != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardAudSeqPause(0, 0, 0x3E8);
|
|
BoardWinCreate(2, MAKE_MESSID(39, 13), 7);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
temp_r30->func = &fn_1_7E4C;
|
|
HuPrcEnd();
|
|
}
|
|
|
|
void fn_1_7E4C(omObjData *arg0)
|
|
{
|
|
lbl_1_bss_9C = 1;
|
|
BoardMGExit();
|
|
omDelObjEx(boardObjMan, arg0);
|
|
}
|
|
|
|
void fn_1_7E94(dataCopy *arg0)
|
|
{
|
|
if (--arg0->unk_02 == 0) {
|
|
arg0->unk_02 = 0x3C;
|
|
if (--arg0->unk_00 >= 0) {
|
|
MGSeqParamSet(arg0->unk_04, 1, arg0->unk_00);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_7F04(omObjData *arg0)
|
|
{
|
|
f32 sp8[2];
|
|
s32 var_r30;
|
|
s32 var_r28;
|
|
dataCopy *temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
temp_r31->unk_00 = 5;
|
|
temp_r31->unk_02 = 0x3C;
|
|
temp_r31->unk_04 = MGSeqCreate(1, temp_r31->unk_00, 0x120, 0x40);
|
|
HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(0x27, 0x0E));
|
|
temp_r31->unk_06 = HuWinCreate(-10000.0f, 344.0f, sp8[0], sp8[1], 0);
|
|
HuWinMesSet(temp_r31->unk_06, MAKE_MESSID(0x27, 0x0E));
|
|
HuWinBGTPLvlSet(temp_r31->unk_06, 0.0f);
|
|
HuWinMesSpeedSet(temp_r31->unk_06, 0);
|
|
temp_r31->unk_08 = 1;
|
|
|
|
for (var_r30 = 0; var_r30 < 3; var_r30++) {
|
|
temp_r31->unk_0A[var_r30] = -1;
|
|
}
|
|
|
|
for (var_r30 = 0; var_r30 < 2; var_r30++) {
|
|
do {
|
|
var_r28 = frandmod(3);
|
|
} while (temp_r31->unk_0A[var_r28] != -1);
|
|
temp_r31->unk_0A[var_r28] = var_r30;
|
|
}
|
|
|
|
for (var_r30 = 0; var_r30 < 3; var_r30++) {
|
|
if (temp_r31->unk_0A[var_r30] == -1) {
|
|
temp_r31->unk_0A[var_r30] = 2;
|
|
}
|
|
}
|
|
temp_r31->unk_12 = frandmod(5);
|
|
temp_r31->unk_10 = (frandmod(0x1E) + 0xF);
|
|
arg0->func = fn_1_80D8;
|
|
}
|
|
|
|
void fn_1_80D8(omObjData *arg0)
|
|
{
|
|
s32 sp10;
|
|
s32 spC;
|
|
s32 sp8;
|
|
f32 var_f31;
|
|
s32 temp_r30;
|
|
s32 var_r29;
|
|
dataCopy *temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
fn_1_7E94(temp_r31);
|
|
temp_r30 = GWPlayer[lbl_1_bss_B6].port;
|
|
if (GWPlayer[lbl_1_bss_B6].com != 0) {
|
|
fn_1_8798(temp_r31, &sp10, &spC, &sp8);
|
|
}
|
|
else {
|
|
sp10 = HuPadStkX[temp_r30];
|
|
spC = HuPadStkY[temp_r30];
|
|
sp8 = HuPadBtnDown[temp_r30];
|
|
}
|
|
|
|
if (((sp8 & 0x100) != 0) || (temp_r31->unk_00 < 0)) {
|
|
MGSeqParamSet(temp_r31->unk_04, 2, -1);
|
|
HuWinKill(temp_r31->unk_06);
|
|
BoardPlayerMotionStart(lbl_1_bss_B6, lbl_1_bss_9E[1], 0);
|
|
arg0->func = fn_1_8410;
|
|
return;
|
|
}
|
|
if ((spC != 0) || (sp10 != 0)) {
|
|
var_r29 = -1;
|
|
var_f31 = (180.0 * (atan2(spC, sp10) / M_PI));
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
|
|
if ((var_f31 > 170.0f) && (var_f31 < 190.0f)) {
|
|
var_r29 = 0;
|
|
}
|
|
else if ((var_f31 > 260.0f) && (var_f31 < 280.0f)) {
|
|
var_r29 = 1;
|
|
}
|
|
else if ((var_f31 < 10.0f) || (var_f31 > 350.0f)) {
|
|
var_r29 = 2;
|
|
}
|
|
if (var_r29 != -1) {
|
|
temp_r31->unk_08 = temp_r31->unk_0A[var_r29];
|
|
BoardPlayerRotYSet(lbl_1_bss_B6, lbl_1_data_440[temp_r31->unk_08]);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_8410(omObjData *arg0)
|
|
{
|
|
s32 temp_r30;
|
|
dataCopy *temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
if (BoardPlayerMotionTimeGet(lbl_1_bss_B6) >= 30.0f) {
|
|
BoardAudSeqFadeOut(1, 0x64);
|
|
HuAudFXPlay(0x486);
|
|
HuAudFXPlay(0x487);
|
|
temp_r30 = (1 << temp_r31->unk_08);
|
|
temp_r30 |= 0x1C0;
|
|
lbl_1_bss_98 = HuPrcCreate(fn_1_896C, 0x2004, 0x4000, 0);
|
|
HuPrcDestructorSet2(lbl_1_bss_98, fn_1_91DC);
|
|
lbl_1_bss_98->user_data = (void *)temp_r30;
|
|
lbl_1_bss_8C->work[0] = temp_r31->unk_08;
|
|
arg0->func = fn_1_850C;
|
|
}
|
|
}
|
|
|
|
void fn_1_850C(omObjData *arg0)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
f32 temp_f31;
|
|
|
|
temp_f31 = BoardPlayerMotionMaxTimeGet(lbl_1_bss_B6);
|
|
if (BoardPlayerMotionTimeGet(lbl_1_bss_B6) >= temp_f31) {
|
|
BoardPlayerMotionStart(lbl_1_bss_B6, lbl_1_bss_9E[0], 0x40000001);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), "chara1", &sp8);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(BoardPlayerModelGet(lbl_1_bss_B6)), "a-itemhook-r", &sp14);
|
|
VECAdd(&sp14, &sp8, &sp14);
|
|
sp14.y += 25.0f;
|
|
CharModelLayerSetAll(7);
|
|
CharModelEffectCreate(-1, &sp14);
|
|
arg0->work[0] = 0xA;
|
|
arg0->func = fn_1_8668;
|
|
}
|
|
}
|
|
|
|
void fn_1_8668(omObjData *arg0)
|
|
{
|
|
s32 var_r30;
|
|
|
|
if (arg0->work[0] == 0) {
|
|
BoardModelHookReset(BoardPlayerModelGet(lbl_1_bss_B6));
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_B6, 1, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
|
|
arg0->func = NULL;
|
|
lbl_1_bss_8C->func = fn_1_7928;
|
|
BoardModelKill(lbl_1_bss_A2);
|
|
|
|
for (var_r30 = 0; var_r30 < 2; var_r30++) {
|
|
BoardPlayerMotionKill(lbl_1_bss_B6, lbl_1_bss_9E[var_r30]);
|
|
}
|
|
return;
|
|
}
|
|
arg0->work[0] -= 1;
|
|
}
|
|
|
|
void fn_1_8798(dataCopy *arg0, s32 *arg1, s32 *arg2, s32 *arg3)
|
|
{
|
|
*arg1 = *arg2 = *arg3 = 0;
|
|
if (arg0->unk_10 != 0) {
|
|
arg0->unk_10 -= 1;
|
|
return;
|
|
}
|
|
arg0->unk_10 = frandmod(0xF) + 10;
|
|
if (arg0->unk_12 == 0) {
|
|
*arg3 = 0x100;
|
|
return;
|
|
}
|
|
arg0->unk_12 -= 1;
|
|
if (frandBool() != 0) {
|
|
*arg1 = (frandBool() * 0x8C) - 0x46;
|
|
return;
|
|
}
|
|
*arg2 = (frandBool() * 0x8C) - 0x46;
|
|
}
|
|
|
|
void *fn_1_8884(void)
|
|
{
|
|
if (lbl_1_bss_98 == NULL) {
|
|
return NULL;
|
|
}
|
|
return lbl_1_bss_98->user_data;
|
|
}
|
|
|
|
void fn_1_88B8(void)
|
|
{
|
|
s32 userData = (s32)lbl_1_bss_98->user_data;
|
|
userData |= 8;
|
|
lbl_1_bss_98->user_data = (void *)(userData);
|
|
|
|
while (((u32)fn_1_8884() & 0x20) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
HuPrcKill(lbl_1_bss_98);
|
|
lbl_1_bss_98 = NULL;
|
|
}
|
|
|
|
void fn_1_896C(void)
|
|
{
|
|
Vec sp18;
|
|
Vec spC;
|
|
f32 sp8;
|
|
f32 temp_f29;
|
|
f32 var_f30;
|
|
f32 var_f31;
|
|
u32 temp_r30;
|
|
s32 var_r28;
|
|
s32 var_r31;
|
|
s32 var_r29;
|
|
ParticleData *var_r27;
|
|
|
|
temp_r30 = (u32)HuPrcCurrentGet()->user_data;
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
BoardModelAttrReset(lbl_1_bss_AA[var_r31], 0x40000002);
|
|
if ((temp_r30 & 0x80) != 0) {
|
|
BoardModelMotionStartEndSet(lbl_1_bss_AA[var_r31], 0, 0x28);
|
|
BoardModelMotionTimeSet(lbl_1_bss_AA[var_r31], 0.0f);
|
|
}
|
|
else {
|
|
BoardModelMotionStartEndSet(lbl_1_bss_AA[var_r31], 0xA, 0x28);
|
|
BoardModelMotionTimeSet(lbl_1_bss_AA[var_r31], 10.0f);
|
|
}
|
|
}
|
|
}
|
|
if ((temp_r30 & 0x80) != 0) {
|
|
HuPrcSleep(0x19);
|
|
}
|
|
else {
|
|
HuPrcSleep(0xF);
|
|
}
|
|
spC.x = spC.y = spC.z = 0.0f;
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
BoardModelVisibilitySet(lbl_1_bss_A4[var_r31], 1);
|
|
BoardModelScaleSetV(lbl_1_bss_A4[var_r31], &spC);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), lbl_1_data_330[var_r31], &sp18);
|
|
BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18);
|
|
if ((temp_r30 & 0x40) != 0) {
|
|
lbl_1_bss_7C[var_r31] = Hu3DParticleCreate(lbl_1_bss_78, 0x64);
|
|
var_r27 = Hu3DData[lbl_1_bss_7C[var_r31]].unk_120;
|
|
var_r27->unk_02 = lbl_1_bss_A4[var_r31];
|
|
Hu3DParticleHookSet(lbl_1_bss_7C[var_r31], fn_1_9268);
|
|
Hu3DParticleColSet(lbl_1_bss_7C[var_r31], 0xFF, 0xFF, 0);
|
|
Hu3DModelPosSet(lbl_1_bss_7C[var_r31], 0.0f, 0.0f, 0.0f);
|
|
Hu3DParticleBlendModeSet(lbl_1_bss_7C[var_r31], 1);
|
|
Hu3DModelLayerSet(lbl_1_bss_7C[var_r31], 2);
|
|
}
|
|
if ((temp_r30 & 0x100) != 0) {
|
|
lbl_1_bss_88 = HuAudFXPlay(0x35F);
|
|
HuAudFXPlay(0x310);
|
|
}
|
|
else {
|
|
HuAudFXPlay(0x362);
|
|
}
|
|
}
|
|
}
|
|
temp_f29 = 150.0f + sp18.y;
|
|
sp8 = 0.0f;
|
|
var_f31 = 12.0f;
|
|
|
|
while (1) {
|
|
for (var_r28 = 0, var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
var_r28++;
|
|
sp8 += 0.1f;
|
|
if (sp8 > 1.0f) {
|
|
sp8 = 1.0f;
|
|
}
|
|
|
|
spC.x = spC.y = spC.z = sp8;
|
|
BoardModelScaleSetV(lbl_1_bss_A4[var_r31], (Vec *)&sp8); //!
|
|
BoardModelPosGet(lbl_1_bss_A4[var_r31], &sp18);
|
|
sp18.y += var_f31;
|
|
if (sp18.y >= temp_f29) {
|
|
sp18.y = temp_f29;
|
|
var_r28 -= 1;
|
|
}
|
|
BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18);
|
|
}
|
|
}
|
|
var_f31 *= 0.95f;
|
|
if (var_r28 > 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
spC.x = spC.y = spC.z = 1.0f;
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
BoardModelScaleSetV(lbl_1_bss_A4[var_r31], &spC);
|
|
}
|
|
}
|
|
temp_r30 = (u32)HuPrcCurrentGet()->user_data | 0x10;
|
|
HuPrcCurrentGet()->user_data = (void *)temp_r30;
|
|
var_f30 = 0.0f;
|
|
|
|
while (1) {
|
|
temp_r30 = (u32)HuPrcCurrentGet()->user_data;
|
|
if ((temp_r30 & 8) == 0) {
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
BoardModelPosGet(lbl_1_bss_A4[var_r31], &sp18);
|
|
sp18.y = (sp18.y + (0.25 * sin((M_PI * var_f30) / 180.0)));
|
|
BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18);
|
|
}
|
|
}
|
|
var_f30 += 5.0f;
|
|
if (var_f30 >= 360.0f) {
|
|
var_f30 -= 360.0f;
|
|
}
|
|
HuPrcVSleep();
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
BoardModelMotionStartEndSet(lbl_1_bss_AA[var_r31], 0x28, 0x46);
|
|
}
|
|
HuPrcSleep(13);
|
|
var_f31 = -8.0f;
|
|
while (1) {
|
|
for (var_r28 = 0, var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
var_r28++;
|
|
sp8 -= 0.02f;
|
|
if (sp8 < 0.0f) {
|
|
sp8 = 0.0f;
|
|
}
|
|
spC.x = spC.y = spC.z = sp8;
|
|
BoardModelScaleSetV(lbl_1_bss_A4[var_r31], (Vec *)&sp8); //!
|
|
BoardModelPosGet(lbl_1_bss_A4[var_r31], &sp18);
|
|
sp18.y += var_f31;
|
|
if (sp18.y <= (temp_f29 - 150.0f)) {
|
|
sp18.y = temp_f29 - 150.0f;
|
|
}
|
|
if (BoardModelMotionTimeGet(lbl_1_bss_AA[var_r31]) >= 70.0f) {
|
|
var_r28--;
|
|
}
|
|
BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18);
|
|
}
|
|
}
|
|
var_f31 *= 0.98f;
|
|
if (var_r28 > 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
spC.x = spC.y = spC.z = 1.0f;
|
|
BoardModelScaleSetV(lbl_1_bss_A4[var_r31], &spC);
|
|
BoardModelVisibilitySet(lbl_1_bss_A4[var_r31], 0);
|
|
}
|
|
}
|
|
temp_r30 = (u32)HuPrcCurrentGet()->user_data;
|
|
temp_r30 |= 0x20;
|
|
HuPrcCurrentGet()->user_data = (void *)temp_r30;
|
|
while (1) {
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
void fn_1_91DC(void)
|
|
{
|
|
u32 temp_r30;
|
|
s32 var_r29;
|
|
s32 var_r31;
|
|
|
|
temp_r30 = (u32)HuPrcCurrentGet()->user_data;
|
|
if ((temp_r30 & 0x40) != 0) {
|
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
|
var_r29 = (1 << var_r31);
|
|
if ((temp_r30 & var_r29) != 0) {
|
|
Hu3DModelKill(lbl_1_bss_7C[var_r31]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_9268(ModelData *model, ParticleData *particle, f32 (*matrix)[4])
|
|
{
|
|
Vec sp8;
|
|
HsfanimStruct01 *var_r31;
|
|
f32 temp_f30;
|
|
f32 temp_f29;
|
|
f32 temp_f31;
|
|
s32 var_r28;
|
|
s32 var_r29;
|
|
|
|
if (particle->unk_34 == 0) {
|
|
var_r31 = particle->unk_48;
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
|
|
var_r31->unk40.a = 0;
|
|
var_r31->unk2C = 0.0f;
|
|
}
|
|
particle->unk_00 = 0;
|
|
}
|
|
BoardModelScaleGet(particle->unk_02, &sp8);
|
|
temp_f31 = sp8.x;
|
|
BoardModelPosGet(particle->unk_02, &sp8);
|
|
|
|
for (var_r29 = 0; var_r29 < 0x16; var_r29++) {
|
|
var_r31 = particle->unk_48;
|
|
|
|
for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) {
|
|
if (var_r31->unk2C == 0.0f)
|
|
break;
|
|
}
|
|
if (var_r28 != particle->unk_30) {
|
|
temp_f30 = 360.0f * (0.003921569f * (s32)(frand() & 0xFF));
|
|
temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (s32)(frand() & 0xFF))));
|
|
var_r31->unk34.x = sp8.x + (temp_f29 * sin((M_PI * temp_f30) / 180.0));
|
|
var_r31->unk34.z = sp8.z + (temp_f29 * cos((M_PI * temp_f30) / 180.0));
|
|
var_r31->unk34.y = sp8.y + (temp_f31 * (-30.0f + (40.0f * (0.003921569f * (s32)(frand() & 0xFF)))));
|
|
var_r31->unk08.x = 0.5f + (3.0f * (0.003921569f * (s32)(frand() & 0xFF)));
|
|
var_r31->unk08.y = 0.3f + (2.0f * (0.003921569f * (s32)(frand() & 0xFF)));
|
|
var_r31->unk40.a = 0xB4;
|
|
var_r31->unk2C = 15.0f * temp_f31;
|
|
}
|
|
}
|
|
var_r31 = particle->unk_48;
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
|
|
if (0.0f != var_r31->unk2C) {
|
|
var_r31->unk34.y -= var_r31->unk08.x;
|
|
var_r31->unk2C -= var_r31->unk08.y;
|
|
if (var_r31->unk2C <= 0.0f) {
|
|
var_r31->unk2C = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|