1837 lines
61 KiB
C
1837 lines
61 KiB
C
#include "game/audio.h"
|
|
#include "game/chrman.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/sprite.h"
|
|
#include "game/wipe.h"
|
|
|
|
#include "ext_math.h"
|
|
|
|
#include "REL/m416Dll.h"
|
|
|
|
typedef struct camera_view_params {
|
|
float zoom;
|
|
Vec pos;
|
|
Vec rot;
|
|
} CameraViewParams;
|
|
|
|
CameraViewParams lbl_1_data_0[2] = { { 1676.6, { 0, 172, 123 }, { -18, 0, 0 } }, { 1200, { 0, 0, -600 }, { -24, 0, 0 } } };
|
|
|
|
GXColor lbl_1_data_38 = { 255, 255, 255, 255 };
|
|
GXColor lbl_1_data_3C = { 255, 160, 96, 255 };
|
|
|
|
typedef struct struct_bss_14 {
|
|
float unk0;
|
|
float unk4;
|
|
u8 unk8;
|
|
float unkC;
|
|
} StructBss14;
|
|
|
|
s32 lbl_1_bss_960;
|
|
s16 lbl_1_bss_95C;
|
|
omObjData *lbl_1_bss_958;
|
|
omObjData *lbl_1_bss_954;
|
|
omObjData *lbl_1_bss_950;
|
|
omObjData *lbl_1_bss_930[2][4];
|
|
s16 lbl_1_bss_92E;
|
|
s16 lbl_1_bss_92A[2];
|
|
s16 lbl_1_bss_928;
|
|
s16 lbl_1_bss_926;
|
|
s16 lbl_1_bss_924;
|
|
float lbl_1_bss_920;
|
|
s16 lbl_1_bss_91A[2];
|
|
s16 lbl_1_bss_918;
|
|
AnimData *lbl_1_bss_914;
|
|
StructBss14 lbl_1_bss_14[12][12];
|
|
s16 lbl_1_bss_12;
|
|
s16 lbl_1_bss_10;
|
|
s32 lbl_1_bss_4[3];
|
|
s32 lbl_1_bss_0;
|
|
|
|
void fn_1_458(omObjData *object);
|
|
void fn_1_4FC(omObjData *object);
|
|
|
|
void fn_1_1260(Process *objman);
|
|
void fn_1_6E5C(omObjData *object);
|
|
|
|
void ObjectSetup(void)
|
|
{
|
|
Process *objman;
|
|
Vec pos;
|
|
Vec up;
|
|
Vec target;
|
|
OSReport("******* M416ObjectSetup *********\n");
|
|
objman = omInitObjMan(50, 8192);
|
|
omGameSysInit(objman);
|
|
Hu3DCameraCreate(1);
|
|
Hu3DCameraPerspectiveSet(1, 30, 20, 25000, 1.2);
|
|
Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1);
|
|
lbl_1_bss_950 = omAddObjEx(objman, 32730, 0, 0, -1, omOutView);
|
|
lbl_1_bss_958 = omAddObjEx(objman, 0, 0, 0, -1, fn_1_458);
|
|
fn_1_1260(objman);
|
|
lbl_1_bss_954 = omAddObjEx(objman, 10, 0, 0, -1, fn_1_6E5C);
|
|
pos.x = 0;
|
|
pos.y = 3000;
|
|
pos.z = 1;
|
|
up.x = 0;
|
|
up.y = 1;
|
|
up.z = 0;
|
|
target.x = 0;
|
|
target.y = 0;
|
|
target.z = 0;
|
|
Hu3DShadowCreate(30, 20, 25000);
|
|
Hu3DShadowTPLvlSet(0.9f);
|
|
Hu3DShadowPosSet(&pos, &up, &target);
|
|
Hu3DLightAllKill();
|
|
lbl_1_bss_91A[0] = Hu3DGLightCreate(-700, 1200, 700, 0, -0.5, -1, lbl_1_data_38.r, lbl_1_data_38.g, lbl_1_data_38.b);
|
|
Hu3DGLightStaticSet(lbl_1_bss_91A[0], 1);
|
|
Hu3DGLightInfinitytSet(lbl_1_bss_91A[0]);
|
|
lbl_1_bss_91A[1] = Hu3DGLightCreate(0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
Hu3DGLightStaticSet(lbl_1_bss_91A[1], 1);
|
|
Hu3DGLightPointSet(lbl_1_bss_91A[1], 0, 0, 3);
|
|
lbl_1_bss_918 = 0;
|
|
HuAudSndGrpSet(41);
|
|
Hu3DBGColorSet(0, 0, 0);
|
|
fn_1_79D0(objman);
|
|
}
|
|
|
|
void fn_1_458(omObjData *object)
|
|
{
|
|
lbl_1_bss_928 = 30;
|
|
lbl_1_bss_926 = 60;
|
|
fn_1_1250(0);
|
|
lbl_1_bss_924 = -1;
|
|
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
|
|
lbl_1_bss_920 = 1;
|
|
fn_1_8FF4(1);
|
|
object->func = fn_1_4FC;
|
|
}
|
|
|
|
typedef struct bss_930_work_4c {
|
|
u8 field_0_bit0 : 1;
|
|
float unk4;
|
|
float unk8;
|
|
float unkC;
|
|
s16 unk10;
|
|
} Bss930Work4C;
|
|
|
|
typedef struct bss_930_work {
|
|
u8 field_0_bit0 : 1;
|
|
u8 field_0_bit1 : 1;
|
|
u8 field_0_bit2 : 1;
|
|
u8 field_0_bit3 : 1;
|
|
u8 field_0_bit4 : 1;
|
|
s16 unk02;
|
|
s16 unk04;
|
|
s8 unk06;
|
|
s8 unk07;
|
|
u16 unk08;
|
|
u16 unk0A;
|
|
s16 unk0C;
|
|
s16 unk0E;
|
|
s16 unk10;
|
|
s16 unk12;
|
|
s16 unk14;
|
|
float unk18;
|
|
Vec unk1C;
|
|
s32 unk28;
|
|
s32 unk2C;
|
|
u32 unk30;
|
|
u32 unk34;
|
|
float unk38;
|
|
u32 unk3C;
|
|
s16 unk40;
|
|
s16 unk42;
|
|
s16 unk44;
|
|
s16 unk46;
|
|
omObjFunc unk48;
|
|
Bss930Work4C *unk4C;
|
|
s16 unk50;
|
|
Vec unk54;
|
|
s16 unk60;
|
|
Vec unk64;
|
|
s16 unk70;
|
|
Vec unk74;
|
|
float unk80;
|
|
float unk84;
|
|
} Bss930Work;
|
|
|
|
s32 lbl_1_data_64 = -1;
|
|
|
|
void fn_1_11E8(omObjData *object);
|
|
s32 fn_1_14E8(void);
|
|
void fn_1_52BC(void);
|
|
|
|
void fn_1_4FC(omObjData *object)
|
|
{
|
|
Bss930Work *temp_r31;
|
|
s32 temp_r30;
|
|
s16 temp_r29;
|
|
Vec sp1C;
|
|
Vec sp10;
|
|
s16 sp8[4];
|
|
|
|
switch (fn_1_1240()) {
|
|
case 0:
|
|
if (!WipeStatGet()) {
|
|
HuAudFXPlay(1471);
|
|
fn_1_1250(1);
|
|
lbl_1_bss_95C = 30;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (--lbl_1_bss_95C == 0) {
|
|
fn_1_1250(2);
|
|
lbl_1_bss_95C = 84;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (lbl_1_bss_95C) {
|
|
if (--lbl_1_bss_95C == 0) {
|
|
HuAudFXPlay(1470);
|
|
}
|
|
}
|
|
else {
|
|
if (lbl_1_bss_920 > 0) {
|
|
lbl_1_bss_920 -= 0.020000001f;
|
|
if (lbl_1_bss_920 < 0) {
|
|
lbl_1_bss_920 = 0;
|
|
}
|
|
Hu3DGLightColorSet(
|
|
lbl_1_bss_91A[0], lbl_1_data_38.r * lbl_1_bss_920, lbl_1_data_38.g * lbl_1_bss_920, lbl_1_data_38.b * lbl_1_bss_920, 255);
|
|
}
|
|
if (lbl_1_bss_920 < 0.1f) {
|
|
if (lbl_1_bss_0 == 0) {
|
|
temp_r31 = lbl_1_bss_930[0][0]->data;
|
|
HuAudCharVoicePlay(temp_r31->unk0C, 296);
|
|
lbl_1_bss_0 = 1;
|
|
}
|
|
}
|
|
if (lbl_1_bss_920 <= 0.0f) {
|
|
fn_1_1250(3);
|
|
lbl_1_bss_95C = 60;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (--lbl_1_bss_95C == 0) {
|
|
fn_1_1250(4);
|
|
lbl_1_bss_95C = 60;
|
|
Hu3DGLightColorSet(lbl_1_bss_91A[1], lbl_1_data_3C.r, lbl_1_data_3C.g, lbl_1_data_3C.b, lbl_1_data_3C.a);
|
|
fn_1_8FF4(0.0625f);
|
|
Hu3DShadowData.unk_08.x = 135;
|
|
MTXLightPerspective(Hu3DShadowData.unk_68, Hu3DShadowData.unk_08.x, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f);
|
|
lbl_1_bss_918 = 1;
|
|
HuAudFXEmiterPlay(1464, &lbl_1_bss_930[0][0]->trans);
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (--lbl_1_bss_95C == 0) {
|
|
fn_1_1250(5);
|
|
lbl_1_bss_12 = MGSeqStartCreate();
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
if (MGSeqStatGet(lbl_1_bss_12) == 0) {
|
|
lbl_1_bss_10 = MGSeqTimerCreate(30);
|
|
fn_1_1250(6);
|
|
}
|
|
if (lbl_1_data_64 < 0 && (MGSeqStatGet(lbl_1_bss_12) & 0x10)) {
|
|
lbl_1_data_64 = HuAudSeqPlay(73);
|
|
}
|
|
break;
|
|
|
|
case 6:
|
|
if (--lbl_1_bss_926 == 0) {
|
|
lbl_1_bss_928--;
|
|
MGSeqParamSet(lbl_1_bss_10, 1, lbl_1_bss_928);
|
|
lbl_1_bss_926 = 60;
|
|
}
|
|
if (lbl_1_bss_928 == 0 || lbl_1_bss_924 >= 0) {
|
|
lbl_1_bss_12 = MGSeqFinishCreate();
|
|
fn_1_1250(7);
|
|
HuAudSeqAllFadeOut(100);
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
if (lbl_1_bss_10 >= 0) {
|
|
MGSeqParamSet(lbl_1_bss_10, 2, -1);
|
|
lbl_1_bss_10 = -1;
|
|
}
|
|
if (MGSeqStatGet(lbl_1_bss_12) == 0) {
|
|
lbl_1_bss_95C = 60;
|
|
fn_1_1250(8);
|
|
}
|
|
break;
|
|
|
|
case 8:
|
|
if (lbl_1_bss_95C) {
|
|
if (--lbl_1_bss_95C == 0) {
|
|
Hu3DShadowData.unk_08.x = 30;
|
|
MTXLightPerspective(Hu3DShadowData.unk_68, Hu3DShadowData.unk_08.x, 1.2f, 0.5f, -0.5f, 0.5f, 0.5f);
|
|
lbl_1_bss_918 = 0;
|
|
sp1C.x = 0;
|
|
sp1C.y = 3000;
|
|
sp1C.z = 1;
|
|
sp10.x = 0;
|
|
sp10.y = 0;
|
|
sp10.z = 0;
|
|
Hu3DShadowPosSet(&sp1C, &Hu3DShadowData.unk_2C, &sp10);
|
|
HuAudFXPlay(1470);
|
|
}
|
|
}
|
|
else {
|
|
lbl_1_bss_920 += 0.020000001f;
|
|
if (lbl_1_bss_920 >= 1.0f) {
|
|
lbl_1_bss_920 = 1.0f;
|
|
fn_1_1250(9);
|
|
lbl_1_bss_95C = 60;
|
|
fn_1_52BC();
|
|
}
|
|
fn_1_8FF4(lbl_1_bss_920);
|
|
Hu3DGLightColorSet(
|
|
lbl_1_bss_91A[0], lbl_1_data_38.r * lbl_1_bss_920, lbl_1_data_38.g * lbl_1_bss_920, lbl_1_data_38.b * lbl_1_bss_920, 255);
|
|
if (lbl_1_bss_91A[1] >= 0) {
|
|
Hu3DGLightColorSet(lbl_1_bss_91A[1], lbl_1_data_3C.r * (1.0f - lbl_1_bss_920), lbl_1_data_3C.g * (1.0f - lbl_1_bss_920),
|
|
lbl_1_data_3C.b * (1.0f - lbl_1_bss_920), lbl_1_data_3C.a * (1.0f - lbl_1_bss_920));
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 9:
|
|
if (fn_1_14E8()) {
|
|
if (--lbl_1_bss_95C == 0) {
|
|
fn_1_1250(10);
|
|
lbl_1_bss_95C = 210;
|
|
for (temp_r30 = 0; temp_r30 < 4; temp_r30++) {
|
|
sp8[temp_r30] = -1;
|
|
}
|
|
temp_r29 = 0;
|
|
if (lbl_1_bss_924 < 0) {
|
|
temp_r31 = lbl_1_bss_930[0][0]->data;
|
|
sp8[temp_r29++] = temp_r31->unk0C;
|
|
GWPlayerCoinWinSet(temp_r31->unk02, 10);
|
|
}
|
|
else {
|
|
for (temp_r30 = 0; temp_r30 < 3; temp_r30++) {
|
|
temp_r31 = lbl_1_bss_930[1][temp_r30]->data;
|
|
sp8[temp_r29++] = temp_r31->unk0C;
|
|
GWPlayerCoinWinSet(temp_r31->unk02, 10);
|
|
}
|
|
}
|
|
lbl_1_bss_12 = MGSeqWinCreate(sp8[0], sp8[1], sp8[2], sp8[3]);
|
|
HuAudSStreamPlay(1);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
if (--lbl_1_bss_95C == 0) {
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_11E8;
|
|
}
|
|
break;
|
|
}
|
|
if (omSysExitReq && !WipeStatGet()) {
|
|
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
|
|
object->func = fn_1_11E8;
|
|
}
|
|
fn_1_8F60(lbl_1_bss_920);
|
|
}
|
|
|
|
void fn_1_11E8(omObjData *object)
|
|
{
|
|
if (!WipeStatGet()) {
|
|
MGSeqKillAll();
|
|
HuAudFadeOut(1);
|
|
fn_1_7A54();
|
|
omOvlReturnEx(1, 1);
|
|
OSReport("******* M416Exit *********\n");
|
|
}
|
|
}
|
|
|
|
s32 fn_1_1240(void)
|
|
{
|
|
return lbl_1_bss_960;
|
|
}
|
|
|
|
void fn_1_1250(s32 arg0)
|
|
{
|
|
lbl_1_bss_960 = arg0;
|
|
}
|
|
|
|
void fn_1_156C(omObjData *object);
|
|
void fn_1_2930(omObjData *object);
|
|
|
|
void fn_1_1260(Process *objman)
|
|
{
|
|
s32 i;
|
|
s32 j;
|
|
|
|
lbl_1_bss_92E = 0;
|
|
lbl_1_bss_92A[0] = lbl_1_bss_92A[1] = 0;
|
|
omMakeGroupEx(objman, 0, 4);
|
|
for (i = 0; i < 4; i++) {
|
|
omAddObjEx(objman, 5, 5, 50, 0, fn_1_156C);
|
|
}
|
|
lbl_1_bss_914 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M416, 0x05));
|
|
memset(lbl_1_bss_14, 0, sizeof(lbl_1_bss_14));
|
|
for (i = 0; i < 10; i++) {
|
|
for (j = 0; j < 10; j++) {
|
|
lbl_1_bss_14[i + 1][j + 1].unk0 = ((0.5f + (j - 5)) * 1100) / 9;
|
|
lbl_1_bss_14[i + 1][j + 1].unk4 = ((0.5f + (i - 5)) * 1100) / 9;
|
|
}
|
|
}
|
|
omAddObjEx(objman, 6, 0, 0, -1, fn_1_2930);
|
|
}
|
|
|
|
void fn_1_5D18(omObjData *object);
|
|
|
|
void fn_1_1480(void)
|
|
{
|
|
s32 i;
|
|
omObjData **group;
|
|
group = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
if (group == NULL) {
|
|
return;
|
|
}
|
|
for (i = 0; i < 4; i++) {
|
|
fn_1_5D18(group[i]);
|
|
}
|
|
}
|
|
|
|
s32 fn_1_14E8(void)
|
|
{
|
|
s32 i;
|
|
omObjData **group;
|
|
group = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (i = 0; i < 4; i++) {
|
|
Bss930Work *work = group[i]->data;
|
|
if (!work->field_0_bit3) {
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
void fn_1_1964(omObjData *object);
|
|
void fn_1_1ADC(omObjData *object);
|
|
void fn_1_1D84(omObjData *object);
|
|
|
|
void fn_1_6AE8(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
|
|
float lbl_1_data_B0[4][4] = { 0, 0, -400, 0, -340, 0, 200, 155, 0, 0, 400, 180, 340, 0, 200, 205 };
|
|
|
|
void fn_1_156C(omObjData *object)
|
|
{
|
|
Bss930Work *work;
|
|
s32 player;
|
|
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss930Work), MEMORY_DEFAULT_NUM);
|
|
object->data = work;
|
|
memset(work, 0, sizeof(Bss930Work));
|
|
work->unk02 = lbl_1_bss_92E++;
|
|
work->unk04 = GWPlayerCfg[work->unk02].pad_idx;
|
|
work->unk0C = GWPlayerCfg[work->unk02].character;
|
|
work->unk0E = GWPlayerCfg[work->unk02].diff;
|
|
work->unk10 = GWPlayerCfg[work->unk02].group;
|
|
object->model[0] = CharModelCreate(work->unk0C, 4);
|
|
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
|
|
Hu3DModelShadowSet(object->model[0]);
|
|
work->field_0_bit2 = 1;
|
|
work->field_0_bit4 = 1;
|
|
work->unk28 = 0;
|
|
work->unk2C = -1;
|
|
work->unk34 = HU3D_MOTATTR_NONE;
|
|
work->unk38 = 50;
|
|
if (!work->unk10) {
|
|
fn_1_1964(object);
|
|
lbl_1_bss_930[0][lbl_1_bss_92A[0]] = object;
|
|
player = lbl_1_bss_92A[0];
|
|
work->unk12 = lbl_1_bss_92A[0];
|
|
lbl_1_bss_92A[0]++;
|
|
}
|
|
else {
|
|
fn_1_1ADC(object);
|
|
lbl_1_bss_930[1][lbl_1_bss_92A[1]] = object;
|
|
player = lbl_1_bss_92A[1] + 1;
|
|
work->unk12 = lbl_1_bss_92A[1];
|
|
lbl_1_bss_92A[1]++;
|
|
}
|
|
Hu3DModelHookSet(object->model[0], "test11_tex_we-itemhook-r", object->model[1]);
|
|
Hu3DModelShadowSet(object->model[1]);
|
|
Hu3DModelLayerSet(object->model[0], 3);
|
|
Hu3DModelLayerSet(object->model[1], 3);
|
|
fn_1_8EB4(object->model[0]);
|
|
fn_1_8EB4(object->model[1]);
|
|
Hu3DMotionSet(object->model[0], object->motion[0]);
|
|
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
|
|
CharModelMotionIndexSet(work->unk0C, object->motion[1], DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02));
|
|
CharModelMotionIndexSet(work->unk0C, object->motion[2], DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02));
|
|
CharModelMotionDataClose(work->unk0C);
|
|
object->model[4] = Hu3DParticleCreate(lbl_1_bss_914, 2);
|
|
Hu3DParticleHookSet(object->model[4], fn_1_6AE8);
|
|
Hu3DParticleBlendModeSet(object->model[4], 1);
|
|
Hu3DModelLayerSet(object->model[4], 6);
|
|
Hu3DModelAttrSet(object->model[4], HU3D_ATTR_DISPOFF);
|
|
object->trans.x = lbl_1_data_B0[player][0];
|
|
object->trans.y = lbl_1_data_B0[player][1];
|
|
object->trans.z = lbl_1_data_B0[player][2];
|
|
object->rot.y = lbl_1_data_B0[player][3];
|
|
object->rot.x = object->rot.z = 0;
|
|
object->scale.x = object->scale.y = object->scale.z = 1;
|
|
work->unk84 = object->rot.y;
|
|
object->func = fn_1_1D84;
|
|
}
|
|
|
|
u32 lbl_1_data_10C[9][2] = {
|
|
DATA_MAKE_NUM(DATADIR_M416, 0x08),
|
|
1,
|
|
DATA_MAKE_NUM(DATADIR_M416, 0x10),
|
|
1,
|
|
DATA_MAKE_NUM(DATADIR_M416, 0x18),
|
|
1,
|
|
DATA_MAKE_NUM(DATADIR_M416, 0x20),
|
|
1,
|
|
0,
|
|
0,
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00),
|
|
0,
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17),
|
|
0,
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x18),
|
|
0,
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02),
|
|
0,
|
|
};
|
|
|
|
void fn_1_29DC(omObjData *object);
|
|
|
|
void fn_1_1964(omObjData *object)
|
|
{
|
|
Bss930Work *work;
|
|
s32 i;
|
|
work = object->data;
|
|
for (i = 0; i < 9; i++) {
|
|
if (!lbl_1_data_10C[i][1]) {
|
|
object->motion[i] = CharModelMotionCreate(work->unk0C, lbl_1_data_10C[i][0]);
|
|
}
|
|
else {
|
|
object->motion[i] = CharModelMotionCreate(work->unk0C, work->unk0C + lbl_1_data_10C[i][0]);
|
|
}
|
|
}
|
|
object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M416, 0x03));
|
|
object->model[2] = Hu3DParticleCreate(HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_M416, 0x06)), 100);
|
|
Hu3DParticleHookSet(object->model[2], fn_1_613C);
|
|
Hu3DParticleBlendModeSet(object->model[2], 1);
|
|
Hu3DModelLayerSet(object->model[2], 6);
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_ZWRITE_OFF);
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
work->unk44 = 5;
|
|
work->unk48 = fn_1_29DC;
|
|
}
|
|
|
|
void fn_1_2EA4(omObjData *object);
|
|
void fn_1_6640(ModelData *model, ParticleData *particle, Mtx matrix);
|
|
void fn_1_6DEC(s16 arg0, u32 arg1);
|
|
|
|
s32 lbl_1_data_154[9] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x30), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x31), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x32),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x2D), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x2E), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x00),
|
|
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x17), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x18), DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x02) };
|
|
|
|
void fn_1_1ADC(omObjData *object)
|
|
{
|
|
Bss930Work *work;
|
|
s32 i;
|
|
work = object->data;
|
|
for (i = 0; i < 9; i++) {
|
|
object->motion[i] = CharModelMotionCreate(work->unk0C, lbl_1_data_154[i]);
|
|
}
|
|
object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M416, 0x04));
|
|
object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M416, 0x02));
|
|
Hu3DModelLayerSet(object->model[2], 3);
|
|
fn_1_6DEC(object->model[2], 16);
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DMotionSpeedSet(object->model[2], 0);
|
|
Hu3DAnimCreate(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M416, 0x07), MEMORY_DEFAULT_NUM), object->model[2], "sb00");
|
|
object->model[3] = Hu3DParticleCreate(lbl_1_bss_914, 50);
|
|
Hu3DParticleHookSet(object->model[3], fn_1_6640);
|
|
Hu3DModelLayerSet(object->model[3], 3);
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
work->unk4C = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss930Work4C), MEMORY_DEFAULT_NUM);
|
|
memset(work->unk4C, 0, sizeof(Bss930Work4C));
|
|
|
|
work->unk48 = fn_1_2EA4;
|
|
}
|
|
|
|
float fn_1_1C80(float arg1, float arg2, float arg3)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
temp_f31 = fmod(arg2 - arg1, 360);
|
|
if (temp_f31 < 0.0f) {
|
|
temp_f31 += 360.0f;
|
|
}
|
|
if (temp_f31 > 180.0f) {
|
|
temp_f31 -= 360.0f;
|
|
}
|
|
temp_f30 = fmod(arg1 + (arg3 * temp_f31), 360);
|
|
if (temp_f30 < 0.0f) {
|
|
temp_f30 += 360.0f;
|
|
}
|
|
return temp_f30;
|
|
}
|
|
|
|
void fn_1_389C(omObjData *object);
|
|
s32 fn_1_5530(omObjData *arg0, Vec *arg1, Vec *arg2);
|
|
|
|
void fn_1_1D84(omObjData *object)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
float temp_f28;
|
|
float temp_f27;
|
|
float temp_f23;
|
|
Bss930Work *temp_r31;
|
|
s32 temp_r29;
|
|
u32 temp_r28;
|
|
s32 temp_r27;
|
|
Vec sp40;
|
|
Vec sp34;
|
|
temp_r31 = object->data;
|
|
temp_r29 = temp_r31->unk28;
|
|
temp_r28 = temp_r31->unk30;
|
|
switch (temp_r31->unk14) {
|
|
case 0:
|
|
if (fn_1_1240() >= 6) {
|
|
if (fn_1_1240() == 7) {
|
|
temp_r31->unk14 = 1;
|
|
temp_r31->unk40 = 60;
|
|
temp_r31->unk08 = temp_r31->unk0A = 0;
|
|
temp_r31->unk06 = temp_r31->unk07 = 0;
|
|
}
|
|
else {
|
|
if (!GWPlayerCfg[temp_r31->unk02].iscom) {
|
|
temp_r31->unk06 = HuPadStkX[temp_r31->unk04];
|
|
temp_r31->unk07 = HuPadStkY[temp_r31->unk04];
|
|
temp_r31->unk08 = HuPadBtn[temp_r31->unk04];
|
|
temp_r31->unk0A = HuPadBtnDown[temp_r31->unk04];
|
|
}
|
|
else {
|
|
temp_r31->unk08 = temp_r31->unk0A = 0;
|
|
temp_r31->unk06 = temp_r31->unk07 = 0;
|
|
fn_1_389C(object);
|
|
}
|
|
temp_f31 = temp_r31->unk06;
|
|
temp_f30 = -(float)temp_r31->unk07;
|
|
if (temp_r31->field_0_bit1) {
|
|
temp_f31 = temp_f30 = 0;
|
|
}
|
|
temp_f28 = sqrtf((temp_f31 * temp_f31) + (temp_f30 * temp_f30));
|
|
if (temp_f28 > 0) {
|
|
temp_f31 /= temp_f28;
|
|
temp_f30 /= temp_f28;
|
|
if (temp_f28 > 72) {
|
|
temp_f28 = 72;
|
|
}
|
|
temp_r31->unk18 = (10 * temp_f28) / 72;
|
|
temp_r31->unk1C.x = temp_f31 * temp_r31->unk18;
|
|
temp_r31->unk1C.z = temp_f30 * temp_r31->unk18;
|
|
object->rot.y = fn_1_1C80(object->rot.y, atan2d(temp_r31->unk1C.x, temp_r31->unk1C.z), 0.4f);
|
|
if (temp_r31->unk18 < 7.5f) {
|
|
temp_r29 = 1;
|
|
}
|
|
else {
|
|
temp_r29 = 2;
|
|
}
|
|
temp_r28 = HU3D_MOTATTR_LOOP;
|
|
}
|
|
else {
|
|
temp_r31->unk1C.x = temp_r31->unk1C.z = 0;
|
|
temp_r29 = 0;
|
|
temp_r28 = HU3D_MOTATTR_LOOP;
|
|
}
|
|
object->trans.x += temp_r31->unk1C.x;
|
|
object->trans.z += temp_r31->unk1C.z;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (fn_1_1240() == 9) {
|
|
if (--temp_r31->unk40 == 0) {
|
|
temp_r31->unk14 = 2;
|
|
temp_r31->unk40 = 300;
|
|
temp_r31->unk2C = -1;
|
|
}
|
|
}
|
|
if (!temp_r31->field_0_bit2) {
|
|
temp_r29 = 5;
|
|
}
|
|
else {
|
|
temp_r29 = 0;
|
|
}
|
|
temp_r28 = HU3D_MOTATTR_LOOP;
|
|
break;
|
|
|
|
case 2:
|
|
if (fn_1_1240() == 10) {
|
|
temp_r31->unk14 = 3;
|
|
}
|
|
else {
|
|
VECSubtract(&temp_r31->unk64, &object->trans, &sp34);
|
|
temp_f28 = VECMag(&sp34);
|
|
if (temp_f28 < 20 || temp_r31->unk40 == 0) {
|
|
temp_r29 = 5;
|
|
temp_r28 = HU3D_MOTATTR_LOOP;
|
|
object->rot.y = fn_1_1C80(object->rot.y, 0, 0.2f);
|
|
temp_r31->field_0_bit3 = 1;
|
|
}
|
|
else {
|
|
if (!temp_r31->field_0_bit3) {
|
|
temp_r27 = fn_1_5530(object, &temp_r31->unk64, &sp40);
|
|
}
|
|
else {
|
|
sp40.x = temp_r31->unk64.x;
|
|
sp40.y = temp_r31->unk64.y;
|
|
sp40.z = temp_r31->unk64.z;
|
|
temp_r27 = 0;
|
|
}
|
|
VECSubtract(&sp40, &object->trans, &sp34);
|
|
object->rot.y = fn_1_1C80(object->rot.y, atan2d(sp34.x, sp34.z), 0.2f);
|
|
if (!temp_r27) {
|
|
if (temp_f28 < 100.0f) {
|
|
temp_f23 = 7.5f * (temp_f28 / 100.0f);
|
|
}
|
|
else {
|
|
temp_f23 = 7.5f;
|
|
}
|
|
}
|
|
else {
|
|
temp_f23 = 3.75f;
|
|
}
|
|
temp_r31->unk1C.x = temp_f23 * sind(object->rot.y);
|
|
temp_r31->unk1C.z = temp_f23 * cosd(object->rot.y);
|
|
object->trans.x += temp_r31->unk1C.x;
|
|
object->trans.z += temp_r31->unk1C.z;
|
|
temp_r29 = 8;
|
|
temp_r28 = HU3D_MOTATTR_LOOP;
|
|
}
|
|
if (temp_r31->unk40) {
|
|
temp_r31->unk40--;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (fn_1_1240() < 10) {
|
|
temp_r29 = 0;
|
|
temp_r28 = HU3D_MOTATTR_LOOP;
|
|
}
|
|
else {
|
|
if ((!temp_r31->unk10 && lbl_1_bss_924 < 0) || (temp_r31->unk10 && lbl_1_bss_924 >= 0)) {
|
|
temp_r29 = 6;
|
|
}
|
|
else {
|
|
temp_r29 = 7;
|
|
}
|
|
temp_r28 = HU3D_MOTATTR_NONE;
|
|
object->rot.y = fn_1_1C80(object->rot.y, 0, 0.2f);
|
|
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP);
|
|
}
|
|
break;
|
|
}
|
|
if (temp_r31->unk2C >= 0) {
|
|
temp_r29 = temp_r31->unk2C;
|
|
temp_r28 = temp_r31->unk34;
|
|
}
|
|
if ((temp_r29 >= 0 && temp_r29 != temp_r31->unk28) || temp_r28 != temp_r31->unk30) {
|
|
temp_r31->unk28 = temp_r29;
|
|
temp_r31->unk30 = temp_r28;
|
|
CharModelMotionShiftSet(temp_r31->unk0C, object->motion[temp_r31->unk28], 0, 8, temp_r28);
|
|
}
|
|
}
|
|
|
|
void fn_1_5004(void);
|
|
|
|
void fn_1_361C(omObjData *object);
|
|
|
|
void fn_1_2930(omObjData *object)
|
|
{
|
|
Bss930Work *temp_r31;
|
|
s32 temp_r30;
|
|
omObjData *temp_r29;
|
|
omObjData **temp_r28;
|
|
temp_r28 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
fn_1_5004();
|
|
for (temp_r30 = 0; temp_r30 < 4; temp_r30++) {
|
|
temp_r29 = temp_r28[temp_r30];
|
|
temp_r31 = temp_r29->data;
|
|
if (temp_r31->unk48 != NULL) {
|
|
temp_r31->unk48(temp_r29);
|
|
}
|
|
if (temp_r31->field_0_bit4) {
|
|
fn_1_361C(temp_r29);
|
|
}
|
|
}
|
|
}
|
|
|
|
float lbl_1_data_180[6] = { 0, 0.3, 0.7, 1.0, 1.3, 1.6 };
|
|
|
|
float lbl_1_data_198[6][2] = { 100.0f, 0.75f, 110.0f, 0.8f, 120.000008f, 0.85f, 130.0f, 0.9f, 140.0f, 0.95f, 150.0f, 0.99f };
|
|
|
|
void fn_1_29DC(omObjData *object)
|
|
{
|
|
Mtx sp50;
|
|
Mtx sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
Bss930Work *temp_r31;
|
|
ModelData *temp_r29;
|
|
temp_r31 = object->data;
|
|
if (temp_r31->unk44 > 0 && temp_r31->field_0_bit0) {
|
|
if (--temp_r31->unk44 == 0) {
|
|
lbl_1_bss_924 = 1;
|
|
Hu3DGLightKill(lbl_1_bss_91A[1]);
|
|
lbl_1_bss_91A[1] = -1;
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
HuAudFXEmiterPlay(1469, &object->trans);
|
|
HuAudCharVoicePlay(temp_r31->unk0C, 291);
|
|
}
|
|
else {
|
|
HuAudFXEmiterPlay(1466, &object->trans);
|
|
HuAudCharVoicePlay(temp_r31->unk0C, 296);
|
|
}
|
|
temp_r31->field_0_bit0 = 0;
|
|
temp_r31->field_0_bit1 = 1;
|
|
temp_r31->unk2C = 3;
|
|
temp_r31->unk34 = HU3D_MOTATTR_NONE;
|
|
temp_r31->unk46 = 60;
|
|
temp_r31->unk60 = 30;
|
|
omVibrate(temp_r31->unk02, 12, 6, 6);
|
|
}
|
|
if (temp_r31->unk46 > 0) {
|
|
if (temp_r31->unk60) {
|
|
if (--temp_r31->unk60 == 0) {
|
|
temp_r31->unk2C = -1;
|
|
temp_r31->field_0_bit1 = 0;
|
|
}
|
|
}
|
|
else {
|
|
if ((temp_r31->unk46 & 0x2) == 0) {
|
|
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
|
|
}
|
|
else {
|
|
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
|
|
}
|
|
temp_r31->unk46--;
|
|
}
|
|
}
|
|
if (temp_r31->field_0_bit2) {
|
|
Hu3DModelObjMtxGet(object->model[0], "test11_tex_we-itemhook-r", sp50);
|
|
MTXTrans(sp20, 0, 52, 0);
|
|
MTXConcat(sp50, sp20, sp50);
|
|
Hu3DModelPosSet(object->model[2], sp50[0][3], sp50[1][3], sp50[2][3]);
|
|
Hu3DModelScaleSet(object->model[2], lbl_1_data_180[temp_r31->unk44], lbl_1_data_180[temp_r31->unk44], lbl_1_data_180[temp_r31->unk44]);
|
|
}
|
|
if (fn_1_1240() >= 4 && fn_1_1240() <= 8 && lbl_1_bss_91A[1] >= 0) {
|
|
Hu3DGLightPointSet(
|
|
lbl_1_bss_91A[1], (15 * sind(object->work[0])) + lbl_1_data_198[temp_r31->unk44][0], lbl_1_data_198[temp_r31->unk44][1], 3);
|
|
temp_r29 = &Hu3DData[object->model[2]];
|
|
sp8 = temp_r29->pos;
|
|
sp14 = sp8;
|
|
sp14.y = 800;
|
|
sp8.y = 0;
|
|
sp14.z += 1;
|
|
Hu3DGLightPosSet(lbl_1_bss_91A[1], temp_r29->pos.x, 140, temp_r29->pos.z, 0, 1, 0);
|
|
if (lbl_1_bss_918) {
|
|
Hu3DShadowPosSet(&sp14, &Hu3DShadowData.unk_2C, &sp8);
|
|
}
|
|
object->work[0] += 10.0f;
|
|
Hu3DModelAttrReset(object->model[2], HU3D_ATTR_DISPOFF);
|
|
}
|
|
else {
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
}
|
|
}
|
|
|
|
void fn_1_5C34(omObjData *object);
|
|
|
|
void fn_1_2EA4(omObjData *object)
|
|
{
|
|
Bss930Work *temp_r30;
|
|
Bss930Work4C *temp_r29;
|
|
ParticleData *temp_r28;
|
|
ModelData *temp_r27;
|
|
Mtx sp3C;
|
|
Mtx spC;
|
|
temp_r30 = object->data;
|
|
temp_r29 = temp_r30->unk4C;
|
|
switch (temp_r30->unk50) {
|
|
case 0:
|
|
if (temp_r30->unk0A & PAD_BUTTON_A) {
|
|
temp_r30->field_0_bit1 = 1;
|
|
temp_r30->unk50 = 1;
|
|
temp_r30->unk60 = 15;
|
|
temp_r30->unk2C = 3;
|
|
temp_r30->unk34 = HU3D_MOTATTR_NONE;
|
|
HuAudFXEmiterPlay(1465, &object->trans);
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (--temp_r30->unk60 == 0) {
|
|
Hu3DModelObjMtxGet(object->model[0], "test11_tex_we-itemhook-r", sp3C);
|
|
MTXTrans(spC, 0, 2, 50);
|
|
MTXConcat(sp3C, spC, sp3C);
|
|
Hu3DModelPosSet(object->model[2], sp3C[0][3], sp3C[1][3], sp3C[2][3]);
|
|
Hu3DModelScaleSet(object->model[2], 0.5f, 0.5f, 0.5f);
|
|
Hu3DModelAttrReset(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DMotionTimeSet(object->model[2], 0);
|
|
Hu3DMotionSpeedSet(object->model[2], 2.0f);
|
|
Hu3DModelRotSet(object->model[2], 0, 180.0f + object->rot.y, 0);
|
|
Hu3DData[object->model[2]].unk_94 = 0;
|
|
Hu3DData[object->model[2]].unk_98 = 2;
|
|
Hu3DModelAttrReset(object->model[3], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelPosSet(object->model[3], sp3C[0][3], sp3C[1][3], sp3C[2][3]);
|
|
temp_r27 = &Hu3DData[object->model[3]];
|
|
temp_r28 = temp_r27->unk_120;
|
|
temp_r28->unk_00 = 0;
|
|
temp_r28->unk_04.x = sp3C[0][3];
|
|
temp_r28->unk_04.y = sp3C[1][3];
|
|
temp_r28->unk_04.z = sp3C[2][3];
|
|
temp_r28->unk_10.x = object->rot.y;
|
|
temp_r28->unk_3C = 30 - (sqrtf((2.0f * temp_r28->unk_04.y) / 1.0000001f) / 2.0f);
|
|
temp_r29->field_0_bit0 = 1;
|
|
temp_r30->unk50 = 2;
|
|
temp_r30->unk60 = 20;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (--temp_r30->unk60 == 0) {
|
|
temp_r30->unk2C = 4;
|
|
temp_r30->unk34 = HU3D_MOTATTR_NONE;
|
|
temp_r29->field_0_bit0 = 0;
|
|
temp_r30->unk50 = 3;
|
|
temp_r30->unk60 = 30;
|
|
}
|
|
Hu3DModelObjMtxGet(object->model[0], "test11_tex_we-itemhook-r", sp3C);
|
|
MTXTrans(spC, 0, 2, 50);
|
|
MTXConcat(sp3C, spC, sp3C);
|
|
Hu3DModelPosSet(object->model[2], sp3C[0][3], sp3C[1][3], sp3C[2][3]);
|
|
Hu3DModelPosSet(object->model[3], sp3C[0][3], sp3C[1][3], sp3C[2][3]);
|
|
fn_1_5C34(object);
|
|
break;
|
|
|
|
case 3:
|
|
if (--temp_r30->unk60 == 0) {
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DData[object->model[2]].unk_0E = -1;
|
|
temp_r30->field_0_bit1 = 0;
|
|
temp_r30->unk2C = -1;
|
|
temp_r30->unk50 = 0;
|
|
}
|
|
break;
|
|
}
|
|
if (temp_r30->unk50 && fn_1_1240() > 6 && lbl_1_bss_924 < 0) {
|
|
temp_r29->field_0_bit0 = 0;
|
|
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
|
|
}
|
|
if (temp_r29->field_0_bit0) {
|
|
temp_r29->unk4 = object->trans.x + (((float)temp_r29->unk10 * (200 * sind(object->rot.y))) / 4);
|
|
temp_r29->unk8 = 75;
|
|
temp_r29->unkC = object->trans.z + (((float)temp_r29->unk10 * (200 * cosd(object->rot.y))) / 4);
|
|
temp_r29->unk4 = object->trans.x + (200.0 * sind(object->rot.y));
|
|
temp_r29->unk8 = 120.00001f;
|
|
temp_r29->unkC = object->trans.z + (200.0 * cosd(object->rot.y));
|
|
if (temp_r29->unk10 < 4) {
|
|
temp_r29->unk10++;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_361C(omObjData *object)
|
|
{
|
|
Bss930Work *temp_r30;
|
|
ModelData *temp_r29;
|
|
temp_r30 = object->data;
|
|
if (temp_r30->field_0_bit2) {
|
|
if (fn_1_1240() == 9) {
|
|
temp_r30->field_0_bit2 = 0;
|
|
temp_r30->unk48 = 0;
|
|
temp_r30->unk54.x = 6 * sind(object->rot.y);
|
|
temp_r30->unk54.y = 20;
|
|
temp_r30->unk54.z = 6 * cosd(object->rot.y);
|
|
temp_r30->unk60 = 30;
|
|
temp_r29 = &Hu3DData[object->model[1]];
|
|
temp_r29->rot.y = object->rot.y;
|
|
Hu3DModelObjPosGet(object->model[0], "test11_tex_we-itemhook-r", &temp_r29->pos);
|
|
Hu3DModelHookReset(object->model[0]);
|
|
Hu3DModelAttrReset(object->model[1], HU3D_ATTR_HOOK);
|
|
Hu3DModelShadowReset(object->model[1]);
|
|
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
|
|
}
|
|
}
|
|
else {
|
|
temp_r29 = &Hu3DData[object->model[1]];
|
|
temp_r29->pos.x += temp_r30->unk54.x;
|
|
temp_r29->pos.y += temp_r30->unk54.y;
|
|
temp_r29->pos.z += temp_r30->unk54.z;
|
|
temp_r30->unk54.y += -1.0000001f;
|
|
temp_r29->rot.x += 30.0f;
|
|
if (--temp_r30->unk60 == 0) {
|
|
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
|
|
Hu3DModelPosSet(object->model[4], temp_r29->pos.x, temp_r29->pos.y, temp_r29->pos.z);
|
|
Hu3DModelAttrReset(object->model[4], HU3D_ATTR_DISPOFF);
|
|
if (!temp_r30->unk10) {
|
|
HuAudFXPlay(1468);
|
|
}
|
|
temp_r30->field_0_bit4 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_38F0(omObjData *object);
|
|
void fn_1_49C4(omObjData *object);
|
|
|
|
void fn_1_389C(omObjData *object)
|
|
{
|
|
Bss930Work *temp_r30;
|
|
temp_r30 = object->data;
|
|
if (!temp_r30->unk10) {
|
|
fn_1_38F0(object);
|
|
}
|
|
else {
|
|
fn_1_49C4(object);
|
|
}
|
|
}
|
|
|
|
typedef struct unkstruct_38F0 {
|
|
s16 unk0;
|
|
s16 unk2;
|
|
} UnkStruct38F0;
|
|
|
|
UnkStruct38F0 lbl_1_data_1C8[8] = { -1, -1, 0, -1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, -1, 0 };
|
|
|
|
void fn_1_38F0(omObjData *object)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
float temp_f26;
|
|
float temp_f25;
|
|
float temp_f22;
|
|
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
Bss930Work *temp_r29;
|
|
s16 temp_r27;
|
|
s32 temp_r26;
|
|
s16 temp_r25;
|
|
s16 temp_r24;
|
|
u8 temp_r23;
|
|
|
|
UnkStruct38F0 sp80[100];
|
|
UnkStruct38F0 sp58[10];
|
|
UnkStruct38F0 sp30[10];
|
|
UnkStruct38F0 sp20[4];
|
|
|
|
temp_r29 = object->data;
|
|
temp_f25 = 1;
|
|
sp20[3].unk0 = 1 + (5 + ((9 * object->trans.x) / 1100));
|
|
sp20[3].unk2 = 1 + (5 + ((9 * object->trans.z) / 1100));
|
|
for (temp_r31 = 1; temp_r31 < 11; temp_r31++) {
|
|
for (temp_r30 = 1; temp_r30 < 11; temp_r30++) {
|
|
lbl_1_bss_14[temp_r31][temp_r30].unk8 = 0;
|
|
temp_f22 = VECMagPoint(lbl_1_bss_14[temp_r31][temp_r30].unk0, lbl_1_bss_14[temp_r31][temp_r30].unk4, 0);
|
|
if (temp_f22 <= 550) {
|
|
lbl_1_bss_14[temp_r31][temp_r30].unkC = 0;
|
|
for (temp_r26 = 0; temp_r26 < lbl_1_bss_92A[1]; temp_r26++) {
|
|
temp_f31 = lbl_1_bss_14[temp_r31][temp_r30].unk0 - lbl_1_bss_930[1][temp_r26]->trans.x;
|
|
temp_f30 = lbl_1_bss_14[temp_r31][temp_r30].unk4 - lbl_1_bss_930[1][temp_r26]->trans.z;
|
|
temp_f22 = VECMagPoint(temp_f31, temp_f30, 0);
|
|
if (temp_f22 <= 1100) {
|
|
temp_f26 = cosd(90 * (temp_f22 / 1100));
|
|
temp_f26 = temp_f26 * temp_f26;
|
|
if (temp_f26 > lbl_1_bss_14[temp_r31][temp_r30].unkC) {
|
|
lbl_1_bss_14[temp_r31][temp_r30].unkC = temp_f26;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
lbl_1_bss_14[temp_r31][temp_r30].unkC = -1;
|
|
}
|
|
}
|
|
}
|
|
lbl_1_bss_14[sp20[3].unk2][sp20[3].unk0].unk8 = 1;
|
|
sp80[0] = sp20[3];
|
|
temp_r27 = 0;
|
|
temp_r25 = 1;
|
|
do {
|
|
for (temp_r31 = 0; temp_r31 < 8u; temp_r31++) {
|
|
sp20[2].unk0 = sp80[temp_r27].unk0 + lbl_1_data_1C8[temp_r31].unk0;
|
|
sp20[2].unk2 = sp80[temp_r27].unk2 + lbl_1_data_1C8[temp_r31].unk2;
|
|
if (sp20[2].unk0 < 1 || sp20[2].unk0 >= 11 || sp20[2].unk2 < 1 || sp20[2].unk2 >= 11) {
|
|
continue;
|
|
}
|
|
if (lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unk8) {
|
|
continue;
|
|
}
|
|
if (lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unkC >= 0) {
|
|
lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unk8 = lbl_1_bss_14[sp80[temp_r27].unk2][sp80[temp_r27].unk0].unk8 + 1;
|
|
sp80[temp_r25].unk0 = sp20[2].unk0;
|
|
sp80[temp_r25].unk2 = sp20[2].unk2;
|
|
temp_r25++;
|
|
}
|
|
}
|
|
temp_r27++;
|
|
} while (temp_r27 != temp_r25);
|
|
temp_f25 = 1.0f;
|
|
sp20[0].unk0 = -1;
|
|
for (temp_r31 = 1; temp_r31 < 11; temp_r31++) {
|
|
for (temp_r30 = 1; temp_r30 < 11; temp_r30++) {
|
|
if (lbl_1_bss_14[temp_r31][temp_r30].unk8 == 0 || lbl_1_bss_14[temp_r31][temp_r30].unk8 > 5) {
|
|
continue;
|
|
}
|
|
if (lbl_1_bss_14[temp_r31][temp_r30].unkC >= 0.0f && lbl_1_bss_14[temp_r31][temp_r30].unkC < temp_f25) {
|
|
temp_f25 = lbl_1_bss_14[temp_r31][temp_r30].unkC;
|
|
sp20[0].unk0 = temp_r30;
|
|
sp20[0].unk2 = temp_r31;
|
|
}
|
|
}
|
|
}
|
|
temp_r23 = lbl_1_bss_14[sp20[0].unk2][sp20[0].unk0].unk8;
|
|
if (temp_r23 == 1) {
|
|
if (lbl_1_bss_14[sp20[3].unk2][sp20[3].unk0].unkC > 0.8f) {
|
|
temp_f25 = 1.0f;
|
|
for (temp_r31 = 0; temp_r31 < 8u; temp_r31++) {
|
|
sp20[2].unk0 = sp20[3].unk0 + lbl_1_data_1C8[temp_r31].unk0;
|
|
sp20[2].unk2 = sp20[3].unk2 + lbl_1_data_1C8[temp_r31].unk2;
|
|
if (lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unkC >= 0.0f && lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unkC < temp_f25) {
|
|
temp_f25 = lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unkC;
|
|
sp20[1] = sp20[2];
|
|
}
|
|
}
|
|
sp30[1].unk0 = sp20[1].unk0;
|
|
sp30[1].unk2 = sp20[1].unk2;
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
for (temp_r31 = 1; temp_r31 < 11; temp_r31++) {
|
|
for (temp_r30 = 1; temp_r30 < 11; temp_r30++) {
|
|
if (lbl_1_bss_14[temp_r31][temp_r30].unk8 >= temp_r23) {
|
|
lbl_1_bss_14[temp_r31][temp_r30].unk8 = 0;
|
|
}
|
|
}
|
|
}
|
|
lbl_1_bss_14[sp20[0].unk2][sp20[0].unk0].unk8 = temp_r23;
|
|
sp80[0] = sp20[3];
|
|
temp_r24 = 1;
|
|
temp_f25 = 1.0f;
|
|
do {
|
|
sp20[1] = sp80[--temp_r24];
|
|
sp58[lbl_1_bss_14[sp20[1].unk2][sp20[1].unk0].unk8 - 1] = sp20[1];
|
|
if (sp20[1].unk0 == sp20[0].unk0 && sp20[1].unk2 == sp20[0].unk2) {
|
|
temp_f26 = 0;
|
|
for (temp_r31 = 1; temp_r31 < temp_r23; temp_r31++) {
|
|
if (lbl_1_bss_14[sp58[temp_r31].unk2][sp58[temp_r31].unk0].unkC > temp_f26) {
|
|
temp_f26 = lbl_1_bss_14[sp58[temp_r31].unk2][sp58[temp_r31].unk0].unkC;
|
|
}
|
|
}
|
|
if (temp_f26 < temp_f25) {
|
|
temp_f25 = temp_f26;
|
|
memcpy(sp30, sp58, temp_r23 * sizeof(UnkStruct38F0));
|
|
}
|
|
continue;
|
|
}
|
|
for (temp_r31 = 0; temp_r31 < 8u; temp_r31++) {
|
|
sp20[2].unk0 = sp20[1].unk0 + lbl_1_data_1C8[temp_r31].unk0;
|
|
sp20[2].unk2 = sp20[1].unk2 + lbl_1_data_1C8[temp_r31].unk2;
|
|
if (lbl_1_bss_14[sp20[2].unk2][sp20[2].unk0].unk8 - 1 == lbl_1_bss_14[sp20[1].unk2][sp20[1].unk0].unk8) {
|
|
sp80[temp_r24++] = sp20[2];
|
|
}
|
|
}
|
|
} while (temp_r24);
|
|
}
|
|
if (sp20[0].unk0 >= 0) {
|
|
temp_f31 = lbl_1_bss_14[sp30[1].unk2][sp30[1].unk0].unk0 - object->trans.x;
|
|
temp_f30 = lbl_1_bss_14[sp30[1].unk2][sp30[1].unk0].unk4 - object->trans.z;
|
|
temp_f22 = VECMagPoint(temp_f31, temp_f30, 0);
|
|
if (temp_f22 >= 50.0f) {
|
|
temp_r29->unk84 = fn_1_1C80(temp_r29->unk84, atan2d(temp_f31, temp_f30), 0.1f);
|
|
temp_r29->unk06 = (69.0f + temp_r29->unk0E) * sind(temp_r29->unk84);
|
|
temp_r29->unk07 = (69.0f + temp_r29->unk0E) * -cosd(temp_r29->unk84);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_49C4(omObjData *object)
|
|
{
|
|
float temp_f31;
|
|
float temp_f28;
|
|
float temp_f27;
|
|
Vec sp2C;
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
|
|
Bss930Work *temp_r31;
|
|
omObjData *temp_r30;
|
|
Bss930Work *temp_r28;
|
|
temp_r30 = lbl_1_bss_930[0][0];
|
|
temp_r31 = object->data;
|
|
temp_r28 = temp_r30->data;
|
|
if (temp_r31->field_0_bit1) {
|
|
return;
|
|
}
|
|
switch (temp_r31->unk70) {
|
|
case 0:
|
|
temp_f28 = (frand16() * 360) >> 16;
|
|
temp_f31 = (frand16() * 550) >> 16;
|
|
temp_r31->unk74.x = temp_f31 * sind(temp_f28);
|
|
temp_r31->unk74.y = 0;
|
|
temp_r31->unk74.z = temp_f31 * cosd(temp_f28);
|
|
temp_r31->unk70 = 1;
|
|
temp_r31->unk80 = 0;
|
|
|
|
case 1:
|
|
sp20.x = temp_r30->trans.x + ((60.0f * temp_r28->unk1C.x) / 4.0f);
|
|
sp20.z = temp_r30->trans.z + ((60.0f * temp_r28->unk1C.z) / 4.0f);
|
|
sp2C.x = temp_r31->unk74.x + (temp_r31->unk80 * (sp20.x - temp_r31->unk74.x));
|
|
sp2C.y = 0;
|
|
sp2C.z = temp_r31->unk74.z + (temp_r31->unk80 * (sp20.z - temp_r31->unk74.z));
|
|
VECSubtract(&sp2C, &object->trans, &sp14);
|
|
temp_f31 = VECMag(&sp14);
|
|
if (temp_f31 > 0.0f) {
|
|
if (temp_r31->unk80 < 1.0f) {
|
|
if (temp_f31 < 10.0f) {
|
|
temp_r31->unk80 += (10.0f / temp_f31);
|
|
}
|
|
else {
|
|
temp_r31->unk80 += (2.0f / temp_f31);
|
|
}
|
|
if (temp_r31->unk80 > 1.0f) {
|
|
temp_r31->unk80 = 1.0f;
|
|
}
|
|
}
|
|
else {
|
|
if (((s32)frand() & 0x1F) == 0) {
|
|
temp_r31->unk70 = 0;
|
|
}
|
|
}
|
|
}
|
|
temp_f27 = 60.0f + (2.0f * temp_r31->unk0E);
|
|
temp_r31->unk84 = fn_1_1C80(temp_r31->unk84, atan2d(sp14.x, sp14.z), 0.1f);
|
|
temp_r31->unk06 = temp_f27 * sind(temp_r31->unk84);
|
|
temp_r31->unk07 = temp_f27 * -cosd(temp_r31->unk84);
|
|
VECSubtract(&temp_r30->trans, &object->trans, &sp14);
|
|
if (VECMag(&sp14) < 200.0f) {
|
|
VECNormalize(&sp14, &sp14);
|
|
sp8.x = sind(object->rot.y);
|
|
sp8.y = 0;
|
|
sp8.z = cosd(object->rot.y);
|
|
if (VECDotProduct(&sp14, &sp8) >= 0.8f) {
|
|
temp_r31->unk0A |= PAD_BUTTON_A;
|
|
temp_r31->unk70 = 0;
|
|
}
|
|
}
|
|
if (((s32)frand() & 0x3FF) < 4 - temp_r31->unk0E) {
|
|
temp_r31->unk0A |= PAD_BUTTON_A;
|
|
temp_r31->unk70 = 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_5058(void);
|
|
|
|
void fn_1_5004(void)
|
|
{
|
|
s32 i = 0;
|
|
omObjData **sp8 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
while (fn_1_5058() && i < 50) {
|
|
i++;
|
|
}
|
|
}
|
|
|
|
s32 fn_1_5058(void)
|
|
{
|
|
Vec sp14[4];
|
|
Vec sp8;
|
|
float temp_f31;
|
|
float temp_f30;
|
|
s32 temp_r31;
|
|
omObjData *temp_r30;
|
|
s32 temp_r29;
|
|
omObjData **temp_r28;
|
|
s32 temp_r27;
|
|
omObjData *temp_r26;
|
|
omObjData *temp_r25;
|
|
temp_r27 = 0;
|
|
temp_r28 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
for (temp_r31 = 0; temp_r31 < 4; temp_r31++) {
|
|
sp14[temp_r31].x = sp14[temp_r31].y = sp14[temp_r31].z = 0;
|
|
}
|
|
for (temp_r31 = 0; temp_r31 < 3; temp_r31++) {
|
|
temp_r26 = temp_r28[temp_r31];
|
|
for (temp_r29 = temp_r31 + 1; temp_r29 < 4; temp_r29++) {
|
|
temp_r25 = temp_r28[temp_r29];
|
|
VECSubtract(&temp_r26->trans, &temp_r25->trans, &sp8);
|
|
temp_f31 = VECMag(&sp8);
|
|
if (temp_f31 < 100.0) {
|
|
VECNormalize(&sp8, &sp8);
|
|
temp_f30 = 0.0001f + (0.5f * (100.0 - temp_f31));
|
|
VECScale(&sp8, &sp8, temp_f30);
|
|
VECAdd(&sp14[temp_r31], &sp8, &sp14[temp_r31]);
|
|
VECSubtract(&sp14[temp_r29], &sp8, &sp14[temp_r29]);
|
|
temp_r27++;
|
|
}
|
|
}
|
|
}
|
|
for (temp_r31 = 0; temp_r31 < 4; temp_r31++) {
|
|
temp_r30 = temp_r28[temp_r31];
|
|
VECAdd(&temp_r30->trans, &sp14[temp_r31], &temp_r30->trans);
|
|
sp8.x = temp_r30->trans.x;
|
|
sp8.y = 0;
|
|
sp8.z = temp_r30->trans.z;
|
|
temp_f31 = VECMag(&sp8);
|
|
if (temp_f31 > 500.0) {
|
|
VECNormalize(&sp8, &sp8);
|
|
temp_r30->trans.x = 500.0 * sp8.x;
|
|
temp_r30->trans.z = 500.0 * sp8.z;
|
|
}
|
|
}
|
|
return temp_r27;
|
|
}
|
|
|
|
Vec lbl_1_data_1E8 = { 0, 0, 200 };
|
|
Vec lbl_1_data_1F4[3] = { { -300, 0, -200 }, { 0, 0, -200 }, { 300, 0, -200 } };
|
|
s32 lbl_1_data_218[6][3] = { { 0, 1, 2 }, { 0, 2, 1 }, { 1, 0, 2 }, { 1, 2, 0 }, { 2, 0, 1 }, { 2, 1, 0 } };
|
|
|
|
void fn_1_52BC(void)
|
|
{
|
|
float sp14[3];
|
|
Vec sp8;
|
|
float temp_f31;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f28;
|
|
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
Bss930Work *temp_r29;
|
|
s32 temp_r28;
|
|
temp_r29 = lbl_1_bss_930[0][0]->data;
|
|
temp_r29->unk64 = lbl_1_data_1E8;
|
|
temp_f29 = -1;
|
|
for (temp_r30 = 0; temp_r30 < 6; temp_r30++) {
|
|
temp_f31 = 0;
|
|
for (temp_r31 = 0; temp_r31 < 3; temp_r31++) {
|
|
VECSubtract(&lbl_1_data_1F4[temp_r31], &lbl_1_bss_930[1][lbl_1_data_218[temp_r30][temp_r31]]->trans, &sp8);
|
|
sp14[temp_r31] = VECMag(&sp8);
|
|
temp_f31 += sp14[temp_r31];
|
|
}
|
|
temp_f28 = temp_f31 / 3;
|
|
temp_f30 = 0;
|
|
for (temp_r31 = 0; temp_r31 < 3; temp_r31++) {
|
|
temp_f30 += fabs(sp14[temp_r31] - temp_f28);
|
|
}
|
|
if (temp_f29 < 0 || temp_f30 + temp_f31 < temp_f29) {
|
|
temp_f29 = temp_f30 + temp_f31;
|
|
temp_r28 = temp_r30;
|
|
}
|
|
}
|
|
for (temp_r30 = 0; temp_r30 < 3; temp_r30++) {
|
|
temp_r29 = lbl_1_bss_930[1][lbl_1_data_218[temp_r28][temp_r30]]->data;
|
|
temp_r29->unk64 = lbl_1_data_1F4[temp_r30];
|
|
}
|
|
}
|
|
|
|
typedef struct unkstruct_5530 {
|
|
s32 unk0;
|
|
float unk4;
|
|
float unk8;
|
|
Vec unkC;
|
|
} UnkStruct5530;
|
|
|
|
s32 fn_1_5530(omObjData *arg0, Vec *arg1, Vec *arg2)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f28;
|
|
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
omObjData *temp_r28;
|
|
s32 temp_r27;
|
|
|
|
omObjData **temp_r24;
|
|
s32 temp_r23;
|
|
|
|
UnkStruct5530 spB4[4];
|
|
Mtx sp84;
|
|
Vec sp78;
|
|
Vec sp6C;
|
|
Vec sp60;
|
|
Vec sp54;
|
|
Vec sp48;
|
|
Vec sp3C;
|
|
Vec sp30;
|
|
Vec sp24;
|
|
s32 sp14[4];
|
|
float spC[2];
|
|
Bss930Work *sp8;
|
|
sp8 = arg0->data;
|
|
temp_r24 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0);
|
|
temp_r23 = 0;
|
|
sp54.x = arg1->x;
|
|
sp54.y = arg1->y;
|
|
sp54.z = arg1->z;
|
|
VECSubtract(&sp54, &arg0->trans, &sp48);
|
|
temp_f30 = VECMag(&sp48);
|
|
for (temp_r30 = 0; temp_r30 < 4; temp_r30++) {
|
|
sp14[temp_r30] = 0;
|
|
}
|
|
while (1) {
|
|
for (temp_r30 = 0, temp_r29 = 0; temp_r30 < 4; temp_r30++) {
|
|
temp_r28 = temp_r24[temp_r30];
|
|
if (arg0 == temp_r28 || sp14[temp_r30]) {
|
|
continue;
|
|
}
|
|
temp_f31 = ((temp_r28->trans.x * sp48.x) - (arg0->trans.x * sp48.x) + (temp_r28->trans.y * sp48.y) - (arg0->trans.y * sp48.y)
|
|
+ (temp_r28->trans.z * sp48.z) - (arg0->trans.z * sp48.z))
|
|
/ VECMag2Point(&sp48);
|
|
if (temp_f31 < 0.0f || temp_f31 >= 1.0f) {
|
|
continue;
|
|
}
|
|
VECSubtract(&temp_r28->trans, &arg0->trans, &sp3C);
|
|
VECCrossProduct(&sp48, &sp3C, &sp24);
|
|
sp60.x = (temp_f31 * sp48.x) + arg0->trans.x;
|
|
sp60.y = (temp_f31 * sp48.y) + arg0->trans.y;
|
|
sp60.z = (temp_f31 * sp48.z) + arg0->trans.z;
|
|
spB4[temp_r29].unkC = sp60;
|
|
VECSubtract(&temp_r28->trans, &sp60, &sp3C);
|
|
if (sp24.y < 0.0f) {
|
|
spB4[temp_r29].unk8 = VECMag(&sp3C);
|
|
}
|
|
else {
|
|
spB4[temp_r29].unk8 = -VECMag(&sp3C);
|
|
}
|
|
VECSubtract(&sp60, &arg0->trans, &sp3C);
|
|
spB4[temp_r29].unk4 = VECMag(&sp3C);
|
|
spB4[temp_r29].unk0 = temp_r30;
|
|
temp_r29++;
|
|
}
|
|
if (temp_r29 == 0) {
|
|
break;
|
|
}
|
|
for (temp_r30 = 0; temp_r30 < temp_r29 - 1; temp_r30++) {
|
|
for (temp_r27 = temp_r30 + 1; temp_r27 < temp_r29; temp_r27++) {
|
|
if (spB4[temp_r30].unk4 > spB4[temp_r27].unk4) {
|
|
spB4[3] = spB4[temp_r30];
|
|
spB4[temp_r30] = spB4[temp_r27];
|
|
spB4[temp_r27] = spB4[3];
|
|
}
|
|
}
|
|
}
|
|
for (temp_r30 = 0; temp_r30 < temp_r29; temp_r30++) {
|
|
if (fabs(spB4[temp_r30].unk8) < 100.0 && spB4[temp_r30].unk4 > 50.0) {
|
|
sp14[spB4[temp_r30].unk0] = 1;
|
|
VECSubtract(&temp_r24[spB4[temp_r30].unk0]->trans, &arg0->trans, &sp3C);
|
|
temp_f28 = VECMag(&sp3C);
|
|
if (0.0f != temp_f28) {
|
|
VECNormalize(&sp3C, &sp3C);
|
|
temp_f31 = 100.0 / temp_f28;
|
|
if (temp_f31 < 0.0f) {
|
|
temp_f31 = 0.0f;
|
|
}
|
|
else if (temp_f31 > 1.0f) {
|
|
temp_f31 = 1.0f;
|
|
}
|
|
temp_f29 = asinf(temp_f31);
|
|
MTXRotRad(sp84, 'Y', -temp_f29);
|
|
MTXMultVec(sp84, &sp3C, &sp30);
|
|
sp6C.x = arg0->trans.x + (sp30.x * temp_f30);
|
|
sp6C.y = arg0->trans.y + (sp30.y * temp_f30);
|
|
sp6C.z = arg0->trans.z + (sp30.z * temp_f30);
|
|
VECSubtract(&sp54, &sp6C, &sp30);
|
|
spC[0] = VECMag(&sp30);
|
|
MTXRotRad(sp84, 'Y', temp_f29);
|
|
MTXMultVec(sp84, &sp3C, &sp30);
|
|
sp78.x = arg0->trans.x + (sp30.x * temp_f30);
|
|
sp78.y = arg0->trans.y + (sp30.y * temp_f30);
|
|
sp78.z = arg0->trans.z + (sp30.z * temp_f30);
|
|
VECSubtract(&sp54, &sp78, &sp30);
|
|
spC[1] = VECMag(&sp30);
|
|
if (spC[0] < spC[1]) {
|
|
sp54 = sp6C;
|
|
}
|
|
else {
|
|
sp54 = sp78;
|
|
}
|
|
temp_r23 = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (temp_r30 >= temp_r29) {
|
|
break;
|
|
}
|
|
VECSubtract(&sp54, &arg0->trans, &sp48);
|
|
}
|
|
arg2->x = sp54.x;
|
|
arg2->y = sp54.y;
|
|
arg2->z = sp54.z;
|
|
return temp_r23;
|
|
}
|
|
|
|
float fn_1_5D78(float arg8, float arg9, float argA, float argB, float argC, float argD, float argE);
|
|
|
|
void fn_1_5C34(omObjData *object)
|
|
{
|
|
float temp_f31;
|
|
omObjData *temp_r31;
|
|
Bss930Work4C *temp_r30;
|
|
Bss930Work *temp_r28;
|
|
Bss930Work *temp_r27;
|
|
temp_r31 = lbl_1_bss_930[0][0];
|
|
temp_r27 = object->data;
|
|
temp_r28 = temp_r31->data;
|
|
temp_r30 = temp_r27->unk4C;
|
|
if (temp_r28->unk46 > 0 || !temp_r30->field_0_bit0) {
|
|
return;
|
|
}
|
|
temp_f31 = fn_1_5D78(object->trans.x, object->trans.z, temp_r30->unk4, temp_r30->unkC, temp_r31->trans.x, temp_r31->trans.z, 50.0f);
|
|
if (temp_f31 >= 0.0f && temp_f31 < 1.0f) {
|
|
temp_r28->field_0_bit0 = 1;
|
|
}
|
|
}
|
|
|
|
void fn_1_5D18(omObjData *object)
|
|
{
|
|
Bss930Work *temp_r31;
|
|
temp_r31 = object->data;
|
|
CharModelKill(temp_r31->unk0C);
|
|
if (temp_r31->unk4C != NULL) {
|
|
HuMemDirectFree(temp_r31->unk4C);
|
|
}
|
|
HuMemDirectFree(temp_r31);
|
|
temp_r31 = NULL;
|
|
}
|
|
|
|
float fn_1_5D78(float arg8, float arg9, float argA, float argB, float argC, float argD, float argE)
|
|
{
|
|
float spC;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f28;
|
|
float temp_f27;
|
|
float temp_f26;
|
|
float temp_f25;
|
|
temp_f26 = (arg9 * arg9) + (((argB * argB) + ((arg8 * arg8) + ((argA * argA) - (2.0f * arg8 * argA)))) - (2.0f * arg9 * argB));
|
|
temp_f27 = 2.0f
|
|
* (((arg9 * argD) + (((arg9 * argB) + (((arg8 * argC) + ((arg8 * argA) - (argA * argC))) - (arg8 * arg8))) - (argB * argD))) - (arg9 * arg9));
|
|
temp_f25 = ((argD * argD) + (((arg9 * arg9) + ((argC * argC) + ((arg8 * arg8) - (2.0f * arg8 * argC)))) - (2.0f * arg9 * argD))) - (argE * argE);
|
|
if (0.0f == temp_f26) {
|
|
if (0.0f != temp_f27) {
|
|
return -temp_f25 / temp_f27;
|
|
}
|
|
else {
|
|
return -1;
|
|
}
|
|
}
|
|
else {
|
|
temp_f30 = (temp_f27 * temp_f27) - (4.0f * temp_f26 * temp_f25);
|
|
if (temp_f30 < 0.0) {
|
|
return -1;
|
|
}
|
|
temp_f30 = sqrtf(temp_f30);
|
|
temp_f29 = (-temp_f27 + temp_f30) / (2.0f * temp_f26);
|
|
temp_f28 = (-temp_f27 - temp_f30) / (2.0f * temp_f26);
|
|
if (temp_f29 < temp_f28) {
|
|
if (temp_f29 >= 0.0f && temp_f29 < 1.0f) {
|
|
return temp_f29;
|
|
}
|
|
else {
|
|
if (temp_f28 >= 0.0f && temp_f28 < 1.0f) {
|
|
return temp_f28;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (temp_f28 >= 0.0f && temp_f28 < 1.0f) {
|
|
return temp_f28;
|
|
}
|
|
else {
|
|
if (temp_f29 >= 0.0f && temp_f29 < 1.0f) {
|
|
return temp_f29;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
void fn_1_613C(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f28;
|
|
HsfanimStruct01 *temp_r31;
|
|
s32 temp_r29;
|
|
|
|
if (!particle->unk_00) {
|
|
particle->unk_00 = 1;
|
|
temp_r31 = particle->unk_48;
|
|
for (temp_r29 = 0; temp_r29 < particle->unk_30; temp_r31++, temp_r29++) {
|
|
temp_r31->unk08.x = (4.0f * ((1.0f / 256.0f) * frand8())) + 8;
|
|
temp_r31->unk34.x = (4.0f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1));
|
|
temp_r31->unk34.y = (64.0f * ((1.0f / 256.0f) * frand8()));
|
|
temp_r31->unk34.z = (4.0f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1));
|
|
temp_r31->unk30 = 360.0f * ((1.0f / 256.0f) * frand8());
|
|
temp_r31->unk00 = frand8();
|
|
temp_r31->unk02 = (frand() & 0x3) + 4;
|
|
}
|
|
temp_f29 = temp_f28 = 0;
|
|
}
|
|
else {
|
|
temp_f29 = (particle->unk_04.x - model->pos.x);
|
|
temp_f28 = (particle->unk_04.z - model->pos.z);
|
|
}
|
|
temp_r31 = particle->unk_48;
|
|
for (temp_r29 = 0; temp_r29 < particle->unk_30; temp_r31++, temp_r29++) {
|
|
temp_f30 = temp_r31->unk00 / 255.0f;
|
|
temp_f31 = temp_f30 * temp_f30;
|
|
temp_r31->unk34.x += temp_f29 * temp_f31;
|
|
temp_r31->unk34.y = 60.0f * temp_f30;
|
|
temp_r31->unk34.z += temp_f28 * temp_f31;
|
|
temp_r31->unk40.a = 255.0f * (1.0f - temp_f30);
|
|
temp_f31 = 0.5 * (1 + sind(270.0f * temp_f30));
|
|
temp_r31->unk2C = temp_f31 * (temp_r31->unk08.x * temp_f31);
|
|
temp_r31->unk00 += temp_r31->unk02;
|
|
if (temp_r31->unk00 > 255) {
|
|
temp_r31->unk34.x = (4.0f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1));
|
|
temp_r31->unk34.y = 0;
|
|
temp_r31->unk34.z = (4.0f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1));
|
|
temp_r31->unk00 = 0;
|
|
}
|
|
}
|
|
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
|
|
particle->unk_04.x = model->pos.x;
|
|
particle->unk_04.z = model->pos.z;
|
|
}
|
|
|
|
void fn_1_6640(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
float temp_f29;
|
|
float temp_f28;
|
|
HsfanimStruct01 *temp_r31;
|
|
s32 temp_r28;
|
|
s32 temp_r27;
|
|
GXColor sp8 = { 0, 0, 0, 255 };
|
|
if (!particle->unk_00) {
|
|
particle->unk_00 = 1;
|
|
temp_r31 = particle->unk_48;
|
|
for (temp_r28 = 0; temp_r28 < particle->unk_30; temp_r31++, temp_r28++) {
|
|
temp_r31->unk2C = 15;
|
|
temp_r31->unk34.x = temp_r31->unk34.y = temp_r31->unk34.z = 0;
|
|
temp_f31 = particle->unk_10.x + (10.0f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1.0f));
|
|
temp_f30 = 100.0f * (0.1f * ((1.0f / 256.0f) * ((s32)frand() & 0xFF))) + 10;
|
|
temp_r31->unk08.x = temp_f30 * sind(temp_f31);
|
|
temp_r31->unk08.y = 100.0f * (0.02f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1.0f));
|
|
temp_r31->unk08.z = temp_f30 * cosd(temp_f31);
|
|
temp_r31->unk40.r = temp_r31->unk40.g = temp_r31->unk40.b = 255;
|
|
temp_r31->unk40.a = 0;
|
|
temp_r31->unk00 = ((float)particle->unk_3C) * ((float)temp_r28 / (float)particle->unk_30);
|
|
}
|
|
}
|
|
else {
|
|
temp_f29 = (particle->unk_04.x - model->pos.x);
|
|
temp_f28 = (particle->unk_04.z - model->pos.z);
|
|
}
|
|
temp_r27 = 0;
|
|
temp_r31 = particle->unk_48;
|
|
for (temp_r28 = 0; temp_r28 < particle->unk_30; temp_r31++, temp_r28++) {
|
|
if (temp_r31->unk00 >= 0) {
|
|
if (temp_r31->unk00 == 0) {
|
|
temp_r31->unk34.x += temp_r31->unk08.x + temp_f29;
|
|
temp_r31->unk34.y += temp_r31->unk08.y;
|
|
temp_r31->unk34.z += temp_r31->unk08.z + temp_f28;
|
|
temp_r31->unk08.y += -1.0000001f;
|
|
if (temp_r31->unk40.a) {
|
|
if (--temp_r31->unk40.a == 0) {
|
|
temp_r31->unk00 = -1;
|
|
}
|
|
}
|
|
if (temp_r31->unk34.y < 0.0f) {
|
|
temp_r31->unk34.y = 0;
|
|
temp_r31->unk00 = -1;
|
|
temp_r31->unk40.a = 0;
|
|
}
|
|
}
|
|
else {
|
|
if (--temp_r31->unk00 == 0) {
|
|
temp_r31->unk40.a = 255;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
temp_r27++;
|
|
}
|
|
}
|
|
if (temp_r27 == particle->unk_30) {
|
|
model->attr |= 0x1;
|
|
}
|
|
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
|
|
particle->unk_04.x = model->pos.x;
|
|
particle->unk_04.z = model->pos.z;
|
|
}
|
|
|
|
void fn_1_6AE8(ModelData *model, ParticleData *particle, Mtx matrix)
|
|
{
|
|
HsfanimStruct01 *temp_r31;
|
|
s32 temp_r29;
|
|
s16 temp_r28;
|
|
s32 temp_r27; // ! - uninitialized
|
|
|
|
if (!particle->unk_00) {
|
|
particle->unk_00 = 1;
|
|
temp_r31 = particle->unk_48;
|
|
for (temp_r29 = 0; temp_r29 < particle->unk_30; temp_r31++, temp_r29++) {
|
|
temp_r31->unk2C = 50;
|
|
temp_r31->unk34.x = 0;
|
|
temp_r31->unk34.y = 0;
|
|
temp_r31->unk34.z = 0;
|
|
temp_r31->unk08.x = 100.0f * (0.05f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1.0f));
|
|
temp_r31->unk08.y = 100.0f * (0.05f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1.0f));
|
|
temp_r31->unk08.z = 100.0f * (0.05f * (((1.0f / 256.0f) * ((s32)frand() & 0x1FF)) - 1.0f));
|
|
temp_r31->unk40.a = 128;
|
|
temp_r31->unk00 = 0;
|
|
}
|
|
}
|
|
temp_r31 = particle->unk_48;
|
|
for (temp_r29 = 0; temp_r29 < particle->unk_30; temp_r29++, temp_r31++) {
|
|
if (temp_r31->unk00 < 0) {
|
|
temp_r27++;
|
|
continue;
|
|
}
|
|
temp_r31->unk34.x += temp_r31->unk08.x;
|
|
temp_r31->unk34.y += temp_r31->unk08.y;
|
|
temp_r31->unk34.z += temp_r31->unk08.z;
|
|
temp_r31->unk08.x *= 0.92f;
|
|
temp_r31->unk08.y *= 0.92f;
|
|
temp_r31->unk08.z *= 0.92f;
|
|
temp_r28 = temp_r31->unk40.a;
|
|
temp_r28 -= 4;
|
|
if (temp_r28 < 0) {
|
|
temp_r31->unk00 = -1;
|
|
temp_r28 = 0;
|
|
}
|
|
temp_r31->unk40.a = temp_r28;
|
|
}
|
|
if (temp_r27 == particle->unk_30) {
|
|
model->attr |= 0x1;
|
|
}
|
|
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
|
|
}
|
|
|
|
void fn_1_6DEC(s16 arg0, u32 arg1)
|
|
{
|
|
HsfData *temp_r31;
|
|
HsfMaterial *temp_r30;
|
|
s32 temp_r29;
|
|
ModelData *temp_r28;
|
|
temp_r28 = &Hu3DData[arg0];
|
|
temp_r31 = temp_r28->hsfData;
|
|
temp_r30 = temp_r31->material;
|
|
for (temp_r29 = 0; temp_r29 < temp_r31->materialCnt; temp_r29++, temp_r30++) {
|
|
temp_r30->flags |= arg1;
|
|
}
|
|
}
|
|
|
|
void fn_1_709C(s32 arg0, s32 arg1, float arg2);
|
|
|
|
void fn_1_72EC(omObjData *object);
|
|
|
|
void fn_1_6E5C(omObjData *object)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
|
|
fn_1_709C(0, 0, 0);
|
|
sp14.x = (((sind(CRot.y) * cosd(CRot.x)) * CZoom) + Center.x);
|
|
sp14.y = (-sind(CRot.x) * CZoom) + Center.y;
|
|
sp14.z = ((cosd(CRot.y) * cosd(CRot.x)) * CZoom) + Center.z;
|
|
VECSubtract(&Center, &sp14, &sp8);
|
|
VECNormalize(&sp8, &sp8);
|
|
HuAudFXListnerSetEX(&sp14, &sp8, 10000, 566.6667, 0, 300, 300);
|
|
object->func = fn_1_72EC;
|
|
}
|
|
|
|
void fn_1_709C(s32 arg0, s32 arg1, float arg2)
|
|
{
|
|
CZoom = lbl_1_data_0[arg0].zoom + (arg2 * (lbl_1_data_0[arg1].zoom - lbl_1_data_0[arg0].zoom));
|
|
Center.x = lbl_1_data_0[arg0].pos.x + (arg2 * (lbl_1_data_0[arg1].pos.x - lbl_1_data_0[arg0].pos.x));
|
|
Center.y = lbl_1_data_0[arg0].pos.y + (arg2 * (lbl_1_data_0[arg1].pos.y - lbl_1_data_0[arg0].pos.y));
|
|
Center.z = lbl_1_data_0[arg0].pos.z + (arg2 * (lbl_1_data_0[arg1].pos.z - lbl_1_data_0[arg0].pos.z));
|
|
CRot.x = lbl_1_data_0[arg0].rot.x + (arg2 * (lbl_1_data_0[arg1].rot.x - lbl_1_data_0[arg0].rot.x));
|
|
CRot.y = lbl_1_data_0[arg0].rot.y + (arg2 * (lbl_1_data_0[arg1].rot.y - lbl_1_data_0[arg0].rot.y));
|
|
CRot.z = lbl_1_data_0[arg0].rot.z + (arg2 * (lbl_1_data_0[arg1].rot.z - lbl_1_data_0[arg0].rot.z));
|
|
}
|
|
|
|
float lbl_1_data_260[2] = { 0, 0 };
|
|
|
|
void fn_1_72EC(omObjData *object)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
switch (fn_1_1240()) {
|
|
case 2:
|
|
fn_1_709C(0, 1, sind(90.0f * lbl_1_data_260[0]));
|
|
if (lbl_1_data_260[0] < 1.0f) {
|
|
lbl_1_data_260[0] += 5.0f / 240.0f;
|
|
if (lbl_1_data_260[0] > 1.0f) {
|
|
lbl_1_data_260[0] = 1.0f;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
fn_1_709C(1, 0, sind(90.0f * lbl_1_data_260[1]));
|
|
if (lbl_1_data_260[1] < 1.0f) {
|
|
lbl_1_data_260[1] += 10.0f / 360.0f;
|
|
if (lbl_1_data_260[1] > 1.0f) {
|
|
lbl_1_data_260[1] = 1.0f;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
sp14.x = (((sind(CRot.y) * cosd(CRot.x)) * CZoom) + Center.x);
|
|
sp14.y = (-sind(CRot.x) * CZoom) + Center.y;
|
|
sp14.z = ((cosd(CRot.y) * cosd(CRot.x)) * CZoom) + Center.z;
|
|
VECSubtract(&Center, &sp14, &sp8);
|
|
VECNormalize(&sp8, &sp8);
|
|
HuAudFXListnerUpdate(&sp14, &sp8);
|
|
}
|