972 lines
30 KiB
C
Executable file
972 lines
30 KiB
C
Executable file
#include "REL/w01Dll.h"
|
|
#include "game/audio.h"
|
|
#include "game/data.h"
|
|
#include "game/frand.h"
|
|
#include "game/gamework_data.h"
|
|
#include "game/hsfanim.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/minigame_seq.h"
|
|
#include "game/object.h"
|
|
#include "game/objsub.h"
|
|
#include "game/pad.h"
|
|
#include "game/process.h"
|
|
#include "game/sprite.h"
|
|
|
|
#include "game/board/audio.h"
|
|
#include "game/board/main.h"
|
|
#include "game/board/model.h"
|
|
#include "game/board/player.h"
|
|
#include "game/board/ui.h"
|
|
#include "game/board/window.h"
|
|
#include "game/window.h"
|
|
|
|
#include "dolphin.h"
|
|
#include "ext_math.h"
|
|
|
|
static void fn_1_E100(void);
|
|
static void fn_1_E154(void);
|
|
static void fn_1_E2B8(omObjData *arg0);
|
|
static void fn_1_E44C(omObjData *arg0);
|
|
static void fn_1_E914(omObjData *arg0);
|
|
static void fn_1_ECD4(omObjData *arg0);
|
|
static void fn_1_EEA0(omObjData *arg0, u16 *arg1);
|
|
static void fn_1_EED8(omObjData *arg0);
|
|
static void fn_1_F09C(omObjData *arg0);
|
|
static void fn_1_F348(omObjData *arg0);
|
|
static void fn_1_F3F8(omObjData *arg0);
|
|
static void fn_1_F6E8(omObjData *arg0);
|
|
static void fn_1_F890(omObjData *arg0);
|
|
static void fn_1_FA1C(omObjData *arg0);
|
|
static void fn_1_FABC(omObjData *arg0);
|
|
static void fn_1_FB58(void);
|
|
static void fn_1_FC3C(omObjData *arg0);
|
|
static void fn_1_FCEC(void);
|
|
static void fn_1_FD3C(omObjData *arg0);
|
|
static void fn_1_FE44(omObjData *arg0);
|
|
static void fn_1_FED0(omObjData *arg0);
|
|
static s16 fn_1_1001C(u32 arg0);
|
|
static void fn_1_101B8(s16 arg0);
|
|
static void fn_1_10664(omObjData *arg0);
|
|
static void fn_1_10820(omObjData *arg0);
|
|
static void fn_1_10AE8(omObjData *arg0);
|
|
static float fn_1_10BB0(u32 arg0);
|
|
static void fn_1_10CF0(u32 arg0);
|
|
static float fn_1_10EB8(Vec *arg0);
|
|
static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
|
|
static void *lbl_1_bss_818;
|
|
static Vec lbl_1_bss_80C;
|
|
static omObjData *lbl_1_bss_7FC[4];
|
|
static omObjData *lbl_1_bss_7F8;
|
|
static omObjData *lbl_1_bss_7F4;
|
|
static omObjData *lbl_1_bss_7F0;
|
|
static float lbl_1_bss_7EC;
|
|
static float lbl_1_bss_7E8;
|
|
static s32 lbl_1_bss_7E4;
|
|
static Vec lbl_1_bss_7D8;
|
|
static s16 lbl_1_bss_7D6;
|
|
static s16 lbl_1_bss_7D4;
|
|
static s16 lbl_1_bss_7D2;
|
|
static s16 lbl_1_bss_7D0;
|
|
static Vec lbl_1_bss_7C4;
|
|
static s32 lbl_1_bss_7C0_pad;
|
|
static s32 lbl_1_bss_7BC;
|
|
static s32 lbl_1_bss_7B8;
|
|
static s16 lbl_1_bss_7B4;
|
|
static s32 lbl_1_bss_7B0_pad;
|
|
static s32 lbl_1_bss_7AC;
|
|
static s16 lbl_1_bss_7AA;
|
|
static s16 lbl_1_bss_7A8;
|
|
static s32 lbl_1_bss_7A4;
|
|
static AnimData *lbl_1_bss_7A0;
|
|
|
|
static s32 lbl_1_data_F08[] = { DATA_MAKE_NUM(DATADIR_BOARD, 109), DATA_MAKE_NUM(DATADIR_BOARD, 110), DATA_MAKE_NUM(DATADIR_BOARD, 111),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 112), DATA_MAKE_NUM(DATADIR_BOARD, 113), DATA_MAKE_NUM(DATADIR_BOARD, 114), DATA_MAKE_NUM(DATADIR_BOARD, 115),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 116), DATA_MAKE_NUM(DATADIR_BOARD, 118), DATA_MAKE_NUM(DATADIR_BOARD, 119), DATA_MAKE_NUM(DATADIR_BOARD, 120),
|
|
DATA_MAKE_NUM(DATADIR_BOARD, 121), DATA_MAKE_NUM(DATADIR_BOARD, 122), DATA_MAKE_NUM(DATADIR_BOARD, 123) };
|
|
|
|
static s32 lbl_1_data_F40[8] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 23), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 23), DATA_MAKE_NUM(DATADIR_PEACHMOT, 23),
|
|
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 23), DATA_MAKE_NUM(DATADIR_WARIOMOT, 23), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 23),
|
|
DATA_MAKE_NUM(DATADIR_DAISYMOT, 23), DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 23) };
|
|
|
|
static s32 lbl_1_data_F60[8] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 64), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 64), DATA_MAKE_NUM(DATADIR_PEACHMOT, 64),
|
|
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 64), DATA_MAKE_NUM(DATADIR_WARIOMOT, 64), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 64),
|
|
DATA_MAKE_NUM(DATADIR_DAISYMOT, 64), DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 64) };
|
|
|
|
void fn_1_D740(s16 *arg0)
|
|
{
|
|
s16 sp10[14];
|
|
s16 sp8[4];
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float var_f31;
|
|
s32 var_r28;
|
|
s32 var_r30;
|
|
s32 i;
|
|
s32 j;
|
|
|
|
lbl_1_bss_818 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_W01, 28), MEMORY_DEFAULT_NUM, HEAP_DATA);
|
|
BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C);
|
|
sp8[0] = BoardModelIDGet(lbl_1_bss_6C4[19]);
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[19], 1);
|
|
for (i = 1; i < 4; i++) {
|
|
sp8[i] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 24));
|
|
}
|
|
var_r30 = 0;
|
|
for (i = 0; i < 4; i++) {
|
|
lbl_1_bss_7FC[i] = omAddObjEx(boardObjMan, 0x165, 2, 0, -1, NULL);
|
|
if (arg0[i] != -1) {
|
|
lbl_1_bss_7FC[var_r30++]->work[1] = arg0[i];
|
|
}
|
|
}
|
|
while (var_r30 != 4) {
|
|
var_r28 = 0;
|
|
for (i = 0; i < 14; i++) {
|
|
for (j = 0; j < var_r30; j++) {
|
|
if (i == lbl_1_bss_7FC[j]->work[1]) {
|
|
break;
|
|
}
|
|
}
|
|
if (j == var_r30) {
|
|
sp10[var_r28++] = i;
|
|
}
|
|
}
|
|
lbl_1_bss_7FC[var_r30++]->work[1] = sp10[rand8() % var_r28];
|
|
}
|
|
temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]);
|
|
temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
|
|
for (i = 0; i < 4; i++) {
|
|
lbl_1_bss_7FC[i]->model[0] = sp8[i];
|
|
lbl_1_bss_7FC[i]->model[1] = Hu3DModelCreateFile(lbl_1_data_F08[lbl_1_bss_7FC[i]->work[1]]);
|
|
if (lbl_1_bss_7FC[i]->work[1] == 5) {
|
|
Hu3DData[lbl_1_bss_7FC[i]->model[1]].unk_F0[1][3] = -50.0f;
|
|
}
|
|
if (lbl_1_bss_7FC[i]->work[1] == 11) {
|
|
Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], HU3D_MOTATTR_LOOP);
|
|
}
|
|
if (lbl_1_bss_7FC[i]->work[1] == 4) {
|
|
Hu3DMotionSpeedSet(lbl_1_bss_7FC[i]->model[1], 0.0f);
|
|
}
|
|
Hu3DModelAttrReset(sp8[i], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], HU3D_MOTATTR_PAUSE);
|
|
omSetTra(lbl_1_bss_7FC[i], lbl_1_bss_80C.x, lbl_1_bss_80C.y + 66.0f, lbl_1_bss_80C.z);
|
|
var_f31 = 90.0f - 90.0f * i + 360.0f * (temp_f30 / temp_f29);
|
|
if (var_f31 >= 360.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
omSetRot(lbl_1_bss_7FC[i], 0.0f, var_f31, 0.0f);
|
|
lbl_1_bss_7FC[i]->work[0] = Hu3DAnimCreate(lbl_1_bss_818, lbl_1_bss_7FC[i]->model[0], "item01");
|
|
Hu3DAnimAttrSet(lbl_1_bss_7FC[i]->work[0], 1);
|
|
lbl_1_bss_7FC[i]->work[2] = i;
|
|
}
|
|
for (i = 0; i < 4; i++) {
|
|
Hu3DAnmNoSet(lbl_1_bss_7FC[i]->work[0], lbl_1_bss_7FC[i]->work[1]);
|
|
}
|
|
}
|
|
|
|
void fn_1_DD84(void)
|
|
{
|
|
s32 i;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
if (i != 0) {
|
|
Hu3DModelKill(lbl_1_bss_7FC[i]->model[0]);
|
|
}
|
|
else {
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0);
|
|
Hu3DAnimKill(lbl_1_bss_7FC[i]->work[0]);
|
|
}
|
|
Hu3DModelKill(lbl_1_bss_7FC[i]->model[1]);
|
|
omDelObjEx(boardObjMan, lbl_1_bss_7FC[i]);
|
|
}
|
|
if (lbl_1_bss_7A0) {
|
|
HuSprAnimKill(lbl_1_bss_7A0);
|
|
lbl_1_bss_7A0 = NULL;
|
|
}
|
|
}
|
|
|
|
void fn_1_DE94(void)
|
|
{
|
|
s32 i;
|
|
|
|
BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C);
|
|
for (i = 0; i < 4; i++) {
|
|
lbl_1_bss_7FC[i]->func = fn_1_FED0;
|
|
}
|
|
lbl_1_bss_7F4 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_E2B8);
|
|
lbl_1_bss_7F8 = omAddObjEx(boardObjMan, 0x133, 0, 0, -1, fn_1_E44C);
|
|
lbl_1_bss_7F8->work[3] = rand8() % 200 + 10;
|
|
lbl_1_bss_7E4 = GWSystem.player_curr;
|
|
BoardPlayerPosGet(lbl_1_bss_7E4, &lbl_1_bss_7C4);
|
|
lbl_1_bss_7EC = 1.0f;
|
|
lbl_1_bss_7E8 = 1.0f;
|
|
lbl_1_bss_7AA = 0;
|
|
lbl_1_bss_7BC = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F40[GWPlayer[lbl_1_bss_7E4].character]);
|
|
lbl_1_bss_7B8 = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F60[GWPlayer[lbl_1_bss_7E4].character]);
|
|
lbl_1_bss_7A0 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0));
|
|
HuSprAnimLock(lbl_1_bss_7A0);
|
|
lbl_1_bss_7B4 = 0;
|
|
}
|
|
|
|
static void fn_1_E100(void)
|
|
{
|
|
lbl_1_bss_7AA = 1;
|
|
BoardMGExit();
|
|
HuAudFXPlay(0x40F);
|
|
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004);
|
|
}
|
|
|
|
static void fn_1_E154(void)
|
|
{
|
|
fn_1_DD84();
|
|
BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7BC);
|
|
BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7B8);
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
|
|
BoardMGDoneFlagSet(0);
|
|
}
|
|
|
|
static void fn_1_E2B8(omObjData *arg0)
|
|
{
|
|
if (lbl_1_bss_7AA == 1 && BoardMGDoneFlagGet() == 1) {
|
|
fn_1_E154();
|
|
omDelObjEx(HuPrcCurrentGet(), arg0);
|
|
}
|
|
}
|
|
|
|
static char *lbl_1_data_F9C[] = { "uma1", "uma2", "uma3", "uma4" };
|
|
|
|
static void fn_1_E44C(omObjData *arg0)
|
|
{
|
|
Vec sp18;
|
|
Vec spC;
|
|
float temp_f27;
|
|
float var_f29;
|
|
float temp_f28;
|
|
float var_f26;
|
|
float var_f24;
|
|
s32 i;
|
|
|
|
temp_f28 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
|
|
var_f29 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
|
|
if (var_f29 >= temp_f28) {
|
|
var_f29 -= temp_f28;
|
|
}
|
|
var_f24 = fmod(var_f29, temp_f28 / 4);
|
|
if (var_f24 >= temp_f28 / 4 - 30.0f && lbl_1_bss_7B4 == 0) {
|
|
lbl_1_bss_7B4 = 1;
|
|
lbl_1_bss_7A8 = 90;
|
|
}
|
|
if (lbl_1_bss_7B4 != 0) {
|
|
lbl_1_bss_7EC *= 0.97f;
|
|
lbl_1_bss_7A8--;
|
|
}
|
|
if (lbl_1_bss_7EC != 1.0f && lbl_1_bss_7A8 == 0) {
|
|
lbl_1_bss_7EC = 0.0f;
|
|
BoardAudSeqPause(0, 1, 1000);
|
|
BoardPlayerPosGet(lbl_1_bss_7E4, &sp18);
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[0], &spC);
|
|
var_f26 = VECSquareDistance(&sp18, &spC);
|
|
arg0->work[2] = 0;
|
|
for (i = 1; i < 4; i++) {
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[i], &spC);
|
|
temp_f27 = VECSquareDistance(&sp18, &spC);
|
|
if (temp_f27 < var_f26) {
|
|
var_f26 = temp_f27;
|
|
arg0->work[2] = i;
|
|
}
|
|
}
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0->work[2]], &lbl_1_bss_7D8);
|
|
VECSubtract(&lbl_1_bss_7D8, &sp18, &spC);
|
|
VECNormalize(&spC, &spC);
|
|
arg0->trans.x = spC.x;
|
|
arg0->trans.y = spC.y;
|
|
arg0->trans.z = spC.z;
|
|
arg0->rot.x = VECDistanceXZ(&lbl_1_bss_7D8, &sp18);
|
|
arg0->rot.y = 10.0f;
|
|
arg0->rot.z = sp18.y;
|
|
arg0->scale.x = 0.0f;
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, HU3D_MOTATTR_NONE);
|
|
arg0->func = fn_1_E914;
|
|
}
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC);
|
|
}
|
|
|
|
static void fn_1_E914(omObjData *arg0)
|
|
{
|
|
Vec spC;
|
|
s32 i;
|
|
|
|
BoardPlayerPosGet(lbl_1_bss_7E4, &spC);
|
|
spC.x += arg0->trans.x * arg0->rot.x / 32.760002f;
|
|
spC.z += arg0->trans.z * arg0->rot.x / 32.760002f;
|
|
spC.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x;
|
|
arg0->scale.x += 1.0f;
|
|
if (VECDistanceXZ(&lbl_1_bss_7D8, &spC) < 2.0f) {
|
|
spC = lbl_1_bss_7D8;
|
|
BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10BB0(arg0->work[2]), 0.0f);
|
|
lbl_1_bss_7EC = 0.05f;
|
|
lbl_1_bss_7E8 = 0.05f;
|
|
BoardModelAttrReset(lbl_1_bss_6C4[18], 0x40000002);
|
|
BoardModelAttrSet(lbl_1_bss_6C4[18], 0x40000001);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f);
|
|
for (i = 0; i < 4; i++) {
|
|
lbl_1_bss_7FC[i]->func = fn_1_FED0;
|
|
}
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7B8, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
|
|
lbl_1_bss_7D6 = MGSeqStartCreate();
|
|
BoardMusStart(1, 0xE, 0x7F, 0);
|
|
arg0->func = fn_1_ECD4;
|
|
}
|
|
BoardPlayerPosSetV(lbl_1_bss_7E4, &spC);
|
|
}
|
|
|
|
static void fn_1_ECD4(omObjData *arg0)
|
|
{
|
|
lbl_1_bss_7EC *= 1.05f;
|
|
lbl_1_bss_7E8 *= 1.05f;
|
|
if (lbl_1_bss_7EC > 2.0f) {
|
|
lbl_1_bss_7EC = 2.0f;
|
|
}
|
|
if (lbl_1_bss_7E8 > 4.0f) {
|
|
lbl_1_bss_7E8 = 4.0f;
|
|
}
|
|
if (MGSeqStatGet(lbl_1_bss_7D6) == 0) {
|
|
lbl_1_bss_7EC = 2.0f;
|
|
lbl_1_bss_7E8 = 4.0f;
|
|
arg0->func = fn_1_EED8;
|
|
lbl_1_bss_7D2 = 5;
|
|
lbl_1_bss_7D0 = 60;
|
|
lbl_1_bss_7D4 = MGSeqTimerCreateXY(lbl_1_bss_7D2, 288, 64);
|
|
}
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8);
|
|
fn_1_10CF0(arg0->work[2]);
|
|
}
|
|
|
|
static void fn_1_EEA0(omObjData *arg0, u16 *arg1)
|
|
{
|
|
*arg1 = 0;
|
|
if (arg0->work[3] != 0) {
|
|
arg0->work[3]--;
|
|
}
|
|
else {
|
|
*arg1 |= 0x100;
|
|
}
|
|
}
|
|
|
|
static void fn_1_EED8(omObjData *arg0)
|
|
{
|
|
s16 temp_r29;
|
|
u16 var_r30;
|
|
|
|
fn_1_10CF0(arg0->work[2]);
|
|
temp_r29 = GWPlayer[lbl_1_bss_7E4].port;
|
|
if ((lbl_1_bss_7D0 -= 1) == 0) {
|
|
if ((lbl_1_bss_7D2 -= 1) >= 0) {
|
|
MGSeqParamSet(lbl_1_bss_7D4, 1, lbl_1_bss_7D2);
|
|
}
|
|
lbl_1_bss_7D0 = 60;
|
|
}
|
|
if (GWPlayerCfg[lbl_1_bss_7E4].iscom == 1) {
|
|
fn_1_EEA0(arg0, &var_r30);
|
|
}
|
|
else {
|
|
var_r30 = HuPadBtnDown[temp_r29];
|
|
}
|
|
if (lbl_1_bss_7D2 < 0 || (var_r30 & 0x100)) {
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 0.0f);
|
|
MGSeqParamSet(lbl_1_bss_7D4, 2, -1);
|
|
arg0->scale.y = 0.0f;
|
|
arg0->func = fn_1_F09C;
|
|
}
|
|
}
|
|
|
|
static void fn_1_F09C(omObjData *arg0)
|
|
{
|
|
float temp_f31;
|
|
float var_f30;
|
|
|
|
temp_f31 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
|
|
arg0->scale.y += lbl_1_bss_7E8;
|
|
if (arg0->scale.y >= temp_f31 - 150.0f) {
|
|
lbl_1_bss_7E8 *= 0.9745f;
|
|
if (lbl_1_bss_7E8 < 0.08f) {
|
|
lbl_1_bss_7E8 = 0.08f;
|
|
}
|
|
}
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8);
|
|
if (arg0->scale.y >= temp_f31) {
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f);
|
|
var_f30 = arg0->scale.y - temp_f31 + BoardModelMotionTimeGet(lbl_1_bss_6C4[18]);
|
|
if (var_f30 > temp_f31) {
|
|
var_f30 -= temp_f31;
|
|
}
|
|
BoardModelMotionTimeSet(lbl_1_bss_6C4[18], var_f30);
|
|
arg0->work[0] = fn_1_1001C(arg0->work[2]);
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1);
|
|
BoardModelPosSet(lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->trans.x, lbl_1_bss_7FC[arg0->work[0]]->trans.y + 1.0f,
|
|
lbl_1_bss_7FC[arg0->work[0]]->trans.z);
|
|
BoardModelRotSet(
|
|
lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->rot.x, lbl_1_bss_7FC[arg0->work[0]]->rot.y + 1.0f, lbl_1_bss_7FC[arg0->work[0]]->rot.z);
|
|
arg0->work[1] = 60;
|
|
BoardAudSeqFadeOut(1, 100);
|
|
arg0->func = fn_1_F348;
|
|
HuAudFXPlay(0x40A);
|
|
}
|
|
}
|
|
|
|
static void fn_1_F348(omObjData *arg0)
|
|
{
|
|
if ((arg0->work[1] / 4) & 1) {
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
|
|
}
|
|
else {
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1);
|
|
}
|
|
if ((arg0->work[1] -= 1) == 0) {
|
|
BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0);
|
|
fn_1_101B8(arg0->work[0]);
|
|
HuAudFXPlay(0x310);
|
|
arg0->func = fn_1_F3F8;
|
|
}
|
|
}
|
|
|
|
static void fn_1_F3F8(omObjData *arg0)
|
|
{
|
|
Vec sp18;
|
|
Vec spC;
|
|
|
|
if (lbl_1_bss_7F0->work[0] != 1) {
|
|
return;
|
|
}
|
|
BoardPlayerPosGet(lbl_1_bss_7E4, &sp18);
|
|
VECSubtract(&lbl_1_bss_7C4, &sp18, &spC);
|
|
VECNormalize(&spC, &spC);
|
|
arg0->trans.x = spC.x;
|
|
arg0->trans.y = spC.y;
|
|
arg0->trans.z = spC.z;
|
|
arg0->rot.x = VECDistanceXZ(&lbl_1_bss_7C4, &sp18);
|
|
arg0->scale.y = 20.0f + 40.0f * (arg0->rot.x / 445.0f);
|
|
arg0->rot.y = 0.016666668f * (arg0->scale.y / 2) * (arg0->scale.y / 2);
|
|
arg0->rot.z = sp18.y;
|
|
arg0->scale.x = 0.0f;
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, HU3D_MOTATTR_NONE);
|
|
VECSubtract(&lbl_1_bss_7C4, &sp18, &spC);
|
|
VECNormalize(&spC, &spC);
|
|
BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10EB8(&spC), 0.0f);
|
|
arg0->func = fn_1_F6E8;
|
|
}
|
|
|
|
static void fn_1_F6E8(omObjData *arg0)
|
|
{
|
|
Vec sp8;
|
|
|
|
BoardPlayerPosGet(lbl_1_bss_7E4, &sp8);
|
|
sp8.x += arg0->trans.x * arg0->rot.x / arg0->scale.y;
|
|
sp8.z += arg0->trans.z * arg0->rot.x / arg0->scale.y;
|
|
sp8.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x;
|
|
arg0->scale.x += 1.0f;
|
|
if (sp8.y < lbl_1_bss_80C.y || arg0->scale.x >= arg0->scale.y) {
|
|
sp8.y = lbl_1_bss_80C.y;
|
|
BoardCameraMotionStart(BoardPlayerModelGet(lbl_1_bss_7E4), NULL, 700.0f, -1.0f);
|
|
BoardPlayerMotionStart(lbl_1_bss_7E4, 2, 0x40000001);
|
|
arg0->func = fn_1_F890;
|
|
}
|
|
BoardPlayerPosSetV(lbl_1_bss_7E4, &sp8);
|
|
}
|
|
|
|
static void fn_1_F890(omObjData *arg0)
|
|
{
|
|
Vec sp8;
|
|
|
|
BoardPlayerRotGet(lbl_1_bss_7E4, &sp8);
|
|
if (sp8.y == 0.0f) {
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP);
|
|
lbl_1_bss_7F0->work[0] = 0;
|
|
lbl_1_bss_7F0->func = fn_1_10820;
|
|
arg0->func = fn_1_FA1C;
|
|
}
|
|
else if (sp8.y > 180.0f) {
|
|
if (360.0f - sp8.y < 3.0f) {
|
|
sp8.y = 0.0f;
|
|
}
|
|
else {
|
|
sp8.y += 3.0f;
|
|
}
|
|
}
|
|
else {
|
|
if (sp8.y < 3.0f) {
|
|
sp8.y = 0.0f;
|
|
}
|
|
else {
|
|
sp8.y -= 3.0f;
|
|
}
|
|
}
|
|
BoardPlayerRotSetV(lbl_1_bss_7E4, &sp8);
|
|
}
|
|
|
|
static void fn_1_FA1C(omObjData *arg0)
|
|
{
|
|
if (lbl_1_bss_7F0->work[0] == 1) {
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7BC, 0.0f, 10.0f, HU3D_MOTATTR_NONE);
|
|
arg0->work[0] = 30;
|
|
lbl_1_bss_7A4 = HuAudSStreamPlay(2);
|
|
arg0->func = fn_1_FABC;
|
|
}
|
|
}
|
|
|
|
static void fn_1_FABC(omObjData *arg0)
|
|
{
|
|
Process *var_r30;
|
|
|
|
if (arg0->work[0] == 0) {
|
|
if (HuAudSStreamStatGet(lbl_1_bss_7A4) == 0) {
|
|
var_r30 = HuPrcCreate(fn_1_FB58, 0x2004, 0x1000, 0);
|
|
var_r30->user_data = arg0;
|
|
BoardAudSeqPause(0, 0, 1000);
|
|
arg0->func = NULL;
|
|
}
|
|
}
|
|
else {
|
|
arg0->work[0]--;
|
|
}
|
|
}
|
|
|
|
static void fn_1_FB58(void)
|
|
{
|
|
omObjData *temp_r31;
|
|
|
|
BoardWinCreate(2, MAKE_MESSID(10, 6), 0);
|
|
BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_bss_7F0->work[1]), 0);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
temp_r31 = HuPrcCurrentGet()->user_data;
|
|
BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, HU3D_MOTATTR_NONE);
|
|
lbl_1_bss_7F0->work[0] = 0;
|
|
HuAudFXPlay(0x30D);
|
|
HuAudFXFadeOut(lbl_1_bss_7AC, 1000);
|
|
lbl_1_bss_7F0->func = fn_1_10AE8;
|
|
temp_r31->func = fn_1_FC3C;
|
|
HuPrcKill(NULL);
|
|
while (TRUE) {
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
static void fn_1_FC3C(omObjData *arg0)
|
|
{
|
|
Process *var_r31;
|
|
|
|
if (lbl_1_bss_7F0->work[0] == 1) {
|
|
BoardPlayerItemAdd(lbl_1_bss_7E4, lbl_1_bss_7F0->work[1]);
|
|
omVibrate(lbl_1_bss_7E4, 12, 6, 6);
|
|
var_r31 = HuPrcCreate(fn_1_FCEC, 0x2004, 0x1000, 0);
|
|
var_r31->user_data = arg0;
|
|
arg0->func = NULL;
|
|
}
|
|
}
|
|
|
|
static void fn_1_FCEC(void)
|
|
{
|
|
omObjData *var_r31;
|
|
|
|
BoardWinCreate(2, MAKE_MESSID(10, 7), 0);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
var_r31 = HuPrcCurrentGet()->user_data;
|
|
var_r31->func = fn_1_FD3C;
|
|
HuPrcKill(NULL);
|
|
while (TRUE) {
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
static void fn_1_FD3C(omObjData *arg0)
|
|
{
|
|
BoardStatusShowSetAll(1);
|
|
BoardCameraTargetModelSet(lbl_1_bss_6C4[21]);
|
|
BoardCameraOffsetSet(0.0f, 0.0f, 0.0f);
|
|
BoardCameraXRotZoomSet(1200.0f, -45.0f);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 1.0f);
|
|
Hu3DModelKill(lbl_1_bss_7F0->model[0]);
|
|
Hu3DModelKill(lbl_1_bss_7F0->model[1]);
|
|
Hu3DModelKill(lbl_1_bss_7F0->model[2]);
|
|
omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_7F0);
|
|
arg0->func = fn_1_FE44;
|
|
}
|
|
|
|
static void fn_1_FE44(omObjData *arg0)
|
|
{
|
|
if (BoardStatusStopCheck(lbl_1_bss_7E4) && BoardCameraMotionIsDone()) {
|
|
lbl_1_bss_7AA = 1;
|
|
BoardMGExit();
|
|
HuAudFXPlay(0x40F);
|
|
BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004);
|
|
arg0->func = NULL;
|
|
}
|
|
}
|
|
|
|
static void fn_1_FED0(omObjData *arg0)
|
|
{
|
|
float temp_f30;
|
|
float var_f31;
|
|
float var_f29;
|
|
|
|
temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]);
|
|
var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
|
|
var_f31 = 90.0f - 90.0f * arg0->work[2] + 360.0f * (temp_f30 / var_f29);
|
|
if (var_f31 >= 360.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
omSetRot(arg0, 0.0f, var_f31, 0.0f);
|
|
}
|
|
|
|
static s16 fn_1_1001C(u32 arg0)
|
|
{
|
|
float var_f29;
|
|
float var_f28;
|
|
float temp_f27;
|
|
float temp_f26;
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
|
|
temp_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26);
|
|
var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
|
|
var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
|
|
var_f30 = var_f30 - (var_f29 / 4) * arg0;
|
|
if (var_f30 < 0.0f) {
|
|
var_f30 += var_f29;
|
|
}
|
|
var_f28 = 360.0f * (var_f30 / var_f29);
|
|
var_f31 = var_f28 - temp_f27;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
var_f31 /= 90.0f;
|
|
return var_f31;
|
|
}
|
|
|
|
static void fn_1_101B8(s16 arg0)
|
|
{
|
|
omObjData *var_r31;
|
|
float *var_r30;
|
|
float var_f27;
|
|
float temp_f26;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f28;
|
|
float var_f31;
|
|
|
|
var_r31 = lbl_1_bss_7F0 = omAddObjEx(boardObjMan, 0x165, 3, 0, -1, fn_1_10664);
|
|
var_r31->model[0] = lbl_1_bss_7FC[arg0]->model[1];
|
|
Hu3DModelAttrReset(var_r31->model[0], HU3D_ATTR_DISPOFF);
|
|
lbl_1_bss_7F0->work[1] = lbl_1_bss_7FC[arg0]->work[1];
|
|
lbl_1_bss_7F0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 3 * sizeof(float), MEMORY_DEFAULT_NUM);
|
|
var_r30 = lbl_1_bss_7F0->data;
|
|
omSetRot(var_r31, 0.0f, 0.0f, 0.0f);
|
|
omSetSca(var_r31, 0.0f, 0.0f, 0.0f);
|
|
temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]);
|
|
var_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26);
|
|
var_f31 = 45.0f + var_f27 + 90.0f * arg0;
|
|
if (var_f31 >= 360.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
temp_f30 = lbl_1_bss_80C.x - 100.0 * cosd(var_f31);
|
|
temp_f28 = lbl_1_bss_80C.z - 100.0 * sind(var_f31);
|
|
temp_f29 = lbl_1_bss_80C.y + 66.0f + 1.0f;
|
|
omSetTra(var_r31, temp_f30, temp_f29, temp_f28);
|
|
var_r31->work[0] = 0;
|
|
var_r30[0] = 0.1f;
|
|
var_r30[2] = 20.0f;
|
|
var_r30[1] = 0.0f;
|
|
var_r31->model[1] = Hu3DParticleCreate(lbl_1_bss_7A0, 200);
|
|
var_r31->model[2] = Hu3DParticleCreate(lbl_1_bss_7A0, 100);
|
|
Hu3DParticleHookSet(var_r31->model[1], fn_1_11064);
|
|
Hu3DParticleHookSet(var_r31->model[2], fn_1_11484);
|
|
Hu3DParticleColSet(var_r31->model[1], 0xFF, 0xFF, 0);
|
|
Hu3DParticleColSet(var_r31->model[2], 0xFF, 0xFF, 0);
|
|
Hu3DModelPosSet(var_r31->model[1], 0.0f, 0.0f, 0.0f);
|
|
Hu3DModelPosSet(var_r31->model[2], temp_f30, temp_f29, temp_f28);
|
|
Hu3DParticleBlendModeSet(var_r31->model[1], 1);
|
|
Hu3DParticleBlendModeSet(var_r31->model[2], 1);
|
|
Hu3DModelLayerSet(var_r31->model[1], 3);
|
|
Hu3DModelLayerSet(var_r31->model[2], 3);
|
|
lbl_1_bss_7AC = HuAudFXPlay(0x35F);
|
|
}
|
|
|
|
static void fn_1_10664(omObjData *arg0)
|
|
{
|
|
float *temp_r31;
|
|
float var_f31;
|
|
|
|
temp_r31 = arg0->data;
|
|
var_f31 = temp_r31[0];
|
|
if (arg0->work[0] == 0) {
|
|
if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
else {
|
|
temp_r31[0] += 0.025f;
|
|
}
|
|
arg0->trans.y += temp_r31[2];
|
|
temp_r31[2] -= 1.0f;
|
|
if (temp_r31[2] < 0.0f && arg0->trans.y < lbl_1_bss_80C.y + 66.0f + 1.0f + 90.0f) {
|
|
arg0->work[0] = 1;
|
|
}
|
|
omSetSca(arg0, var_f31, var_f31, var_f31);
|
|
}
|
|
else {
|
|
arg0->trans.y += sind(temp_r31[1]);
|
|
temp_r31[1] += 4.0f;
|
|
if (temp_r31[1] >= 360.0f) {
|
|
temp_r31[1] -= 360.0f;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void fn_1_10820(omObjData *arg0)
|
|
{
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
float var_f28;
|
|
float *temp_r30;
|
|
|
|
temp_r30 = arg0->data;
|
|
if (arg0->work[0] == 0) {
|
|
BoardPlayerPosGet(lbl_1_bss_7E4, &sp24);
|
|
sp18.x = arg0->trans.x;
|
|
sp18.y = 0.0f;
|
|
sp18.z = arg0->trans.z;
|
|
sp24.y = 0.0f;
|
|
VECSubtract(&sp24, &sp18, &spC);
|
|
VECNormalize(&spC, &spC);
|
|
var_f28 = VECDistanceXZ(&sp24, &sp18);
|
|
if (var_f28 < 8.0f) {
|
|
arg0->trans.x = sp24.x;
|
|
arg0->trans.z = sp24.z;
|
|
arg0->work[0] = 1;
|
|
}
|
|
else {
|
|
arg0->trans.x += 8.0f * spC.x;
|
|
arg0->trans.z += 8.0f * spC.z;
|
|
}
|
|
}
|
|
arg0->trans.y += sind(temp_r30[1]);
|
|
temp_r30[1] += 4.0f;
|
|
if (temp_r30[1] >= 360.0f) {
|
|
temp_r30[1] -= 360.0f;
|
|
}
|
|
}
|
|
|
|
static void fn_1_10AE8(omObjData *arg0)
|
|
{
|
|
float *temp_r31;
|
|
|
|
temp_r31 = arg0->data;
|
|
if (arg0->work[0] == 0) {
|
|
temp_r31[0] -= 0.016666668f;
|
|
if (temp_r31[0] <= 0.0f) {
|
|
temp_r31[0] = 0.0f;
|
|
arg0->work[0] = 1;
|
|
HuAudFXStop(lbl_1_bss_7AC);
|
|
}
|
|
arg0->trans.y -= 2.1666667f;
|
|
}
|
|
omSetSca(arg0, temp_r31[0], temp_r31[0], temp_r31[0]);
|
|
}
|
|
|
|
static float fn_1_10BB0(u32 arg0)
|
|
{
|
|
float var_f30;
|
|
float temp_f29;
|
|
float var_f31;
|
|
|
|
var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
|
|
temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
|
|
var_f30 = var_f30 - (temp_f29 / 4) * arg0;
|
|
if (var_f30 < 0.0f) {
|
|
var_f30 += temp_f29;
|
|
}
|
|
var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29);
|
|
if (var_f31 >= 360.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
return var_f31;
|
|
}
|
|
|
|
static void fn_1_10CF0(u32 arg0)
|
|
{
|
|
float var_f30;
|
|
float temp_f29;
|
|
float var_f31;
|
|
float var_f28;
|
|
|
|
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0], &lbl_1_bss_7D8);
|
|
BoardPlayerPosSetV(lbl_1_bss_7E4, &lbl_1_bss_7D8);
|
|
var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]);
|
|
temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]);
|
|
var_f30 = var_f30 - (temp_f29 / 4) * arg0;
|
|
if (var_f30 < 0.0f) {
|
|
var_f30 += temp_f29;
|
|
}
|
|
var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29);
|
|
if (var_f31 >= 360.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
var_f28 = var_f31;
|
|
BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, var_f28, 0.0f);
|
|
}
|
|
|
|
static float fn_1_10EB8(Vec *arg0)
|
|
{
|
|
float var_f31;
|
|
|
|
if (arg0->x || arg0->z) {
|
|
if (arg0->x == 0.0f) {
|
|
if (arg0->z > 0.0f) {
|
|
return 0.0f;
|
|
}
|
|
else {
|
|
return 180.0f;
|
|
}
|
|
}
|
|
if (arg0->z == 0.0f) {
|
|
if (arg0->x > 0.0f) {
|
|
return 90.0f;
|
|
}
|
|
else {
|
|
return 270.0f;
|
|
}
|
|
}
|
|
var_f31 = atan2d(arg0->z, arg0->x);
|
|
if (arg0->z < 0.0f) {
|
|
var_f31 = 90.0f - var_f31;
|
|
}
|
|
else {
|
|
var_f31 = 90.0f - var_f31;
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
}
|
|
return var_f31;
|
|
}
|
|
return -1.0f;
|
|
}
|
|
|
|
static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
HsfanimStruct01 *var_r31;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f31;
|
|
s32 var_r28;
|
|
s32 i;
|
|
|
|
if (particle->unk_34 == 0) {
|
|
var_r31 = particle->unk_48;
|
|
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
|
var_r31->unk40.a = 0;
|
|
var_r31->unk2C = 0.0f;
|
|
}
|
|
particle->unk_00 = 0;
|
|
}
|
|
temp_f31 = lbl_1_bss_7F0->scale.x;
|
|
for (i = 0; i < 30; i++) {
|
|
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 = 0.003921569f * frand8() * 360.0f;
|
|
temp_f29 = 0.003921569f * frand8() * 70.0f * temp_f31;
|
|
var_r31->unk34.x = lbl_1_bss_7F0->trans.x + temp_f29 * sind(temp_f30);
|
|
var_r31->unk34.z = lbl_1_bss_7F0->trans.z + temp_f29 * cosd(temp_f30);
|
|
var_r31->unk34.y = lbl_1_bss_7F0->trans.y + temp_f31 * (-30.0f + 0.003921569f * frand8() * 60.0f);
|
|
var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f;
|
|
var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f;
|
|
var_r31->unk40.a = 0xB4;
|
|
var_r31->unk2C = 15.0f * temp_f31;
|
|
}
|
|
}
|
|
var_r31 = particle->unk_48;
|
|
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
|
if (var_r31->unk2C != 0.0f) {
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
HsfanimStruct01 *var_r31;
|
|
float temp_f29;
|
|
float temp_f30;
|
|
float 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;
|
|
}
|
|
if (particle->unk_00 == 0) {
|
|
var_r31 = particle->unk_48;
|
|
for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) {
|
|
temp_f30 = 0.003921569f * frand8() * 360.0f;
|
|
temp_f31 = 0.003921569f * frand8() * 50.0f;
|
|
var_r31->unk08.x = temp_f31 * cosd(temp_f30);
|
|
var_r31->unk08.y = 2.0f + 0.003921569f * frand8() * 4.0f;
|
|
var_r31->unk08.z = temp_f31 * sind(temp_f30);
|
|
temp_f29 = 60.0f + 20.0f * frand8() * 0.003921569f;
|
|
temp_f31 = 4.0f + 5.0f * frand8() * 0.003921569f;
|
|
var_r31->unk14.x = temp_f31 * sind(temp_f30) * cosd(temp_f29);
|
|
var_r31->unk14.y = temp_f31 * sind(temp_f29);
|
|
var_r31->unk14.z = temp_f31 * cosd(temp_f30) * cosd(temp_f29);
|
|
var_r31->unk20 = 1.0f;
|
|
var_r31->unk40.a = 0xB4;
|
|
var_r31->unk2C = 9.0f + 0.003921569f * frand8() * 4.0f;
|
|
}
|
|
particle->unk_00 = 1;
|
|
}
|
|
var_r31 = particle->unk_48;
|
|
for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) {
|
|
if (var_r31->unk2C != 0.0f) {
|
|
var_r31->unk34.x = var_r31->unk08.x + var_r31->unk14.x * var_r31->unk20;
|
|
var_r31->unk34.z = var_r31->unk08.z + var_r31->unk14.z * var_r31->unk20;
|
|
var_r31->unk34.y = var_r31->unk08.y + var_r31->unk14.y * var_r31->unk20 - 0.2f * var_r31->unk20 * var_r31->unk20;
|
|
var_r31->unk2C -= 0.25f;
|
|
var_r31->unk20 += 1.0f;
|
|
if (var_r31->unk2C <= 0.0f) {
|
|
var_r31->unk2C = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|