1086 lines
30 KiB
C
1086 lines
30 KiB
C
#include "ext_math.h"
|
|
#include "game/audio.h"
|
|
#include "game/chrman.h"
|
|
#include "game/flag.h"
|
|
#include "game/frand.h"
|
|
#include "game/hsfanim.h"
|
|
#include "game/hsfdraw.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/sprite.h"
|
|
#include "math.h"
|
|
#include "string.h"
|
|
|
|
#include "REL/m453Dll.h"
|
|
|
|
typedef struct M453MapUnkStruct {
|
|
struct {
|
|
u8 unk_00_field0 : 1;
|
|
};
|
|
s32 unk_04;
|
|
float unk_08;
|
|
s32 unk_0C[6];
|
|
s32 unk_24[0xC];
|
|
} M453MapUnkStruct; /* size = 0x54 */
|
|
|
|
void fn_1_6768(omObjData *object);
|
|
void fn_1_67EC(omObjData *object);
|
|
void fn_1_67F0(omObjData *object);
|
|
void fn_1_695C(omObjData *object);
|
|
void fn_1_6C74(omObjData *object);
|
|
void fn_1_6EB4(omObjData *object);
|
|
void fn_1_6FC4(omObjData *object);
|
|
void fn_1_73C4(omObjData *object);
|
|
void fn_1_7978(void);
|
|
void fn_1_7A74(s16 arg0);
|
|
|
|
Vec lbl_1_data_158[0x10] = {
|
|
{ 92.39f, 0.0f, 38.27f },
|
|
{ 100.0f, 0.0f, 0.0f },
|
|
{ 92.39f, 0.0f, -38.27f },
|
|
{ 70.71f, 0.0f, -70.71f },
|
|
{ 38.27f, 0.0f, -92.39f },
|
|
{ 0.0f, 0.0f, -100.0f },
|
|
{ -38.27f, 0.0f, -92.39f },
|
|
{ -70.71f, 0.0f, -70.71f },
|
|
{ -92.39f, 0.0f, -38.27f },
|
|
{ -100.0f, 0.0f, 0.0f },
|
|
{ -92.39f, 0.0f, 38.27f },
|
|
{ -70.71f, 0.0f, 70.71f },
|
|
{ -38.27f, 0.0f, 92.39f },
|
|
{ 0.0f, 0.0f, 100.0f },
|
|
{ 38.27f, 0.0f, 92.39f },
|
|
{ 70.71f, 0.0f, 70.71f },
|
|
};
|
|
|
|
Vec lbl_1_data_218[0x10] = {
|
|
{ 55.43f, 0.0f, 22.96f },
|
|
{ 60.0f, 0.0f, 0.0f },
|
|
{ 55.43f, 0.0f, -22.96f },
|
|
{ 42.43f, 0.0f, -42.43f },
|
|
{ 22.96f, 0.0f, -55.43f },
|
|
{ 0.0f, 0.0f, -60.0f },
|
|
{ -22.96f, 0.0f, -55.43f },
|
|
{ -42.43f, 0.0f, -42.43f },
|
|
{ -55.43f, 0.0f, -22.96f },
|
|
{ -60.0f, 0.0f, 0.0f },
|
|
{ -55.43f, 0.0f, 22.96f },
|
|
{ -42.43f, 0.0f, 42.43f },
|
|
{ -22.96f, 0.0f, 55.43f },
|
|
{ 0.0f, 0.0f, 60.0f },
|
|
{ 22.96f, 0.0f, 55.43f },
|
|
{ 42.43f, 0.0f, 42.43f },
|
|
};
|
|
|
|
Vec lbl_1_data_2D8[0xA] = {
|
|
{ 38.79f, 0.0f, -53.4f },
|
|
{ 0.0f, 0.0f, -120.0f },
|
|
{ -38.79f, 0.0f, -53.4f },
|
|
{ -114.13f, 0.0f, -37.08f },
|
|
{ -62.77f, 0.0f, 20.4f },
|
|
{ -70.53f, 0.0f, 97.08f },
|
|
{ 0.0f, 0.0f, 66.0f },
|
|
{ 70.53f, 0.0f, 97.08f },
|
|
{ 62.77f, 0.0f, 20.4f },
|
|
{ 114.13f, 0.0f, -37.08f },
|
|
};
|
|
|
|
Vec lbl_1_data_350[0xA] = {
|
|
{ 21.34f, 0.0f, -29.37f },
|
|
{ 0.0f, 0.0f, -66.0f },
|
|
{ -21.34f, 0.0f, -29.37f },
|
|
{ -62.77f, 0.0f, -20.4f },
|
|
{ -34.52f, 0.0f, 11.22f },
|
|
{ -38.79f, 0.0f, 53.4f },
|
|
{ 0.0f, 0.0f, 36.3f },
|
|
{ 38.79f, 0.0f, 53.4f },
|
|
{ 34.52f, 0.0f, 11.22f },
|
|
{ 62.77f, 0.0f, -20.4f },
|
|
};
|
|
|
|
Vec lbl_1_data_3C8[0x10] = {
|
|
{ 110.87f, 0.0f, 45.92f },
|
|
{ 120.0f, 0.0f, 0.0f },
|
|
{ 110.87f, 0.0f, -45.92f },
|
|
{ 84.85f, 0.0f, -84.85f },
|
|
{ 45.92f, 0.0f, -110.87f },
|
|
{ 0.0f, 0.0f, -120.0f },
|
|
{ -45.92f, 0.0f, -110.87f },
|
|
{ -84.85f, 0.0f, -84.85f },
|
|
{ -110.87f, 0.0f, -45.92f },
|
|
{ -120.0f, 0.0f, 0.0f },
|
|
{ -110.87f, 0.0f, 45.92f },
|
|
{ -84.85f, 0.0f, 84.85f },
|
|
{ -45.92f, 0.0f, 110.87f },
|
|
{ 0.0f, 0.0f, 120.0f },
|
|
{ 45.92f, 0.0f, 110.87f },
|
|
{ 84.85f, 0.0f, 84.85f },
|
|
};
|
|
|
|
Vec lbl_1_data_488[0x10] = {
|
|
{ 73.17f, 0.0f, 30.31f },
|
|
{ 79.2f, 0.0f, 0.0f },
|
|
{ 73.17f, 0.0f, -30.31f },
|
|
{ 56.0f, 0.0f, -56.0f },
|
|
{ 30.31f, 0.0f, -73.17f },
|
|
{ 0.0f, 0.0f, -79.2f },
|
|
{ -30.31f, 0.0f, -73.17f },
|
|
{ -56.0f, 0.0f, -56.0f },
|
|
{ -73.17f, 0.0f, -30.31f },
|
|
{ -79.2f, 0.0f, 0.0f },
|
|
{ -73.17f, 0.0f, 30.31f },
|
|
{ -56.0f, 0.0f, 56.0f },
|
|
{ -30.31f, 0.0f, 73.17f },
|
|
{ 0.0f, 0.0f, 79.2f },
|
|
{ 30.31f, 0.0f, 73.17f },
|
|
{ 56.0f, 0.0f, 56.0f },
|
|
};
|
|
|
|
Vec lbl_1_data_548[0xA] = {
|
|
{ 48.49f, 0.0f, -66.74f },
|
|
{ 0.0f, 0.0f, -150.0f },
|
|
{ -48.49f, 0.0f, -66.74f },
|
|
{ -142.66f, 0.0f, -46.35f },
|
|
{ -78.46f, 0.0f, 25.49f },
|
|
{ -88.17f, 0.0f, 121.35f },
|
|
{ 0.0f, 0.0f, 82.5f },
|
|
{ 88.17f, 0.0f, 121.35f },
|
|
{ 78.46f, 0.0f, 25.49f },
|
|
{ 142.66f, 0.0f, -46.35f },
|
|
};
|
|
|
|
Vec lbl_1_data_5C0[0xA] = {
|
|
{ 29.09f, 0.0f, -40.05f },
|
|
{ 0.0f, 0.0f, -90.0f },
|
|
{ -29.09f, 0.0f, -40.05f },
|
|
{ -85.59f, 0.0f, -27.81f },
|
|
{ -47.08f, 0.0f, 15.3f },
|
|
{ -52.9f, 0.0f, 72.81f },
|
|
{ 0.0f, 0.0f, 49.5f },
|
|
{ 52.9f, 0.0f, 72.81f },
|
|
{ 47.08f, 0.0f, 15.3f },
|
|
{ 85.59f, 0.0f, -27.81f },
|
|
};
|
|
|
|
Vec lbl_1_data_638[0x16] = {
|
|
{ 129.1f, 0.0f, 54.6f },
|
|
{ 140.0f, 0.0f, 0.0f },
|
|
{ 129.3f, 0.0f, -53.6f },
|
|
{ 99.0f, 0.0f, -99.0f },
|
|
{ 53.6f, 0.0f, -129.3f },
|
|
{ 0.0f, 0.0f, -140.0f },
|
|
{ -53.6f, 0.0f, -129.3f },
|
|
{ -99.0f, 0.0f, -99.0f },
|
|
{ -129.4f, 0.0f, -53.5f },
|
|
{ -140.0f, 0.0f, 0.0f },
|
|
{ -136.0f, 0.0f, 20.4f },
|
|
{ -102.1f, 0.0f, -7.6f },
|
|
{ -70.0f, 0.0f, -14.0f },
|
|
{ -37.8f, 0.0f, -7.6f },
|
|
{ -10.6f, 0.0f, 10.6f },
|
|
{ 7.6f, 0.0f, 37.8f },
|
|
{ 14.0f, 0.0f, 70.0f },
|
|
{ 7.6f, 0.0f, 102.2f },
|
|
{ -20.4f, 0.0f, 136.0f },
|
|
{ 0.1f, 0.0f, 140.1f },
|
|
{ 53.9f, 0.0f, 129.5f },
|
|
{ 99.5f, 0.0f, 99.0f },
|
|
};
|
|
|
|
Vec lbl_1_data_740[0x16] = {
|
|
{ 95.9f, 0.0f, 42.9f },
|
|
{ 106.6f, 0.0f, 0.4f },
|
|
{ 98.4f, 0.0f, -37.2f },
|
|
{ 81.7f, 0.0f, -65.9f },
|
|
{ 55.4f, 0.0f, -89.6f },
|
|
{ 11.5f, 0.0f, -101.7f },
|
|
{ -24.5f, 0.0f, -99.9f },
|
|
{ -60.9f, 0.0f, -88.6f },
|
|
{ -98.7f, 0.0f, -64.4f },
|
|
{ -110.4f, 0.0f, -41.5f },
|
|
{ -110.4f, 0.0f, -30.8f },
|
|
{ -90.4f, 0.0f, -42.3f },
|
|
{ -53.8f, 0.0f, -48.5f },
|
|
{ -14.6f, 0.0f, -40.5f },
|
|
{ 17.1f, 0.0f, -16.3f },
|
|
{ 35.8f, 0.0f, 28.2f },
|
|
{ 35.8f, 0.0f, 65.6f },
|
|
{ 24.7f, 0.0f, 101.6f },
|
|
{ 19.6f, 0.0f, 114.6f },
|
|
{ 34.9f, 0.0f, 114.5f },
|
|
{ 62.9f, 0.0f, 99.0f },
|
|
{ 83.0f, 0.0f, 73.2f },
|
|
};
|
|
|
|
Vec lbl_1_data_848[0x16] = {
|
|
{ 110.9f, 0.0f, 45.9f },
|
|
{ 120.0f, 0.0f, 0.0f },
|
|
{ 110.9f, 0.0f, -45.8f },
|
|
{ 84.8f, 0.0f, -84.9f },
|
|
{ 45.9f, 0.0f, -110.9f },
|
|
{ 0.0f, 0.0f, -120.0f },
|
|
{ -45.9f, 0.0f, -110.9f },
|
|
{ -84.9f, 0.0f, -84.8f },
|
|
{ -110.9f, 0.0f, -45.9f },
|
|
{ -120.0f, 0.0f, 0.0f },
|
|
{ -116.5f, 0.0f, 17.5f },
|
|
{ -87.6f, 0.0f, -6.6f },
|
|
{ -60.0f, 0.0f, -12.0f },
|
|
{ -32.4f, 0.0f, -6.5f },
|
|
{ -9.1f, 0.0f, 9.1f },
|
|
{ 6.5f, 0.0f, 32.5f },
|
|
{ 12.0f, 0.0f, 60.0f },
|
|
{ 6.5f, 0.0f, 87.6f },
|
|
{ -17.5f, 0.0f, 116.5f },
|
|
{ 0.0f, 0.0f, 120.0f },
|
|
{ 45.9f, 0.0f, 110.9f },
|
|
{ 84.8f, 0.0f, 84.9f },
|
|
};
|
|
|
|
Vec lbl_1_data_950[0x16] = {
|
|
{ 80.0f, 0.0f, 31.0f },
|
|
{ 83.9f, 0.0f, -0.1f },
|
|
{ 77.2f, 0.0f, -31.7f },
|
|
{ 60.4f, 0.0f, -56.8f },
|
|
{ 35.6f, 0.0f, -77.4f },
|
|
{ -0.5f, 0.0f, -84.1f },
|
|
{ -31.5f, 0.0f, -82.9f },
|
|
{ -58.9f, 0.0f, -71.4f },
|
|
{ -86.3f, 0.0f, -49.4f },
|
|
{ -91.5f, 0.0f, -36.4f },
|
|
{ -91.5f, 0.0f, -27.3f },
|
|
{ -82.1f, 0.0f, -29.8f },
|
|
{ -54.7f, 0.0f, -36.2f },
|
|
{ -21.9f, 0.0f, -30.9f },
|
|
{ 13.3f, 0.0f, -10.2f },
|
|
{ 28.3f, 0.0f, 18.3f },
|
|
{ 33.4f, 0.0f, 58.4f },
|
|
{ 28.0f, 0.0f, 81.6f },
|
|
{ 20.7f, 0.0f, 93.3f },
|
|
{ 30.4f, 0.0f, 93.3f },
|
|
{ 55.4f, 0.0f, 82.2f },
|
|
{ 70.4f, 0.0f, 59.3f },
|
|
};
|
|
|
|
s32 lbl_1_data_A58[0xC] = {
|
|
0x220004,
|
|
0x220005,
|
|
0x220006,
|
|
0x220009,
|
|
0x22000C,
|
|
0x22000F,
|
|
0x220007,
|
|
0x220008,
|
|
0x22000A,
|
|
0x22000B,
|
|
0x22000D,
|
|
0x22000E,
|
|
};
|
|
|
|
Vec lbl_1_data_A88[6] = {
|
|
{ -400.0f, 0.0f, 300.0f },
|
|
{ 0.0f, 0.0f, 300.0f },
|
|
{ 400.0f, 0.0f, 300.0f },
|
|
{ -400.0f, 0.0f, 700.0f },
|
|
{ 0.0f, 0.0f, 700.0f },
|
|
{ 400.0f, 0.0f, 700.0f },
|
|
};
|
|
|
|
s32 lbl_1_data_AD0[3] = { 6, 8, 0xA };
|
|
|
|
s32 lbl_1_data_ADC[3] = { 7, 9, 0xB };
|
|
|
|
s32 lbl_1_data_AE8[5] = { 1, 2, 3, 4, 5 };
|
|
|
|
Vec *lbl_1_data_AFC[6] = {
|
|
lbl_1_data_3C8,
|
|
lbl_1_data_158,
|
|
lbl_1_data_548,
|
|
lbl_1_data_2D8,
|
|
lbl_1_data_638,
|
|
lbl_1_data_848,
|
|
};
|
|
|
|
s32 lbl_1_data_B14[6] = { 0x10, 0x10, 0xA, 0xA, 0x16, 0x16 };
|
|
|
|
Vec lbl_1_data_B2C[6] = {
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 0.0f, 0.0f, -20.0f },
|
|
{ 0.0f, 0.0f, -20.0f },
|
|
{ 40.0f, 0.0f, -20.0f },
|
|
{ 40.0f, 0.0f, -20.0f },
|
|
};
|
|
|
|
Vec *lbl_1_data_B74[6][2] = {
|
|
{ lbl_1_data_3C8, lbl_1_data_488 },
|
|
{ lbl_1_data_158, lbl_1_data_218 },
|
|
{ lbl_1_data_548, lbl_1_data_5C0 },
|
|
{ lbl_1_data_2D8, lbl_1_data_350 },
|
|
{ lbl_1_data_638, lbl_1_data_740 },
|
|
{ lbl_1_data_848, lbl_1_data_950 },
|
|
};
|
|
|
|
s32 lbl_1_data_BA4[6] = { 0x10, 0x10, 0xA, 0xA, 0x16, 0x16 };
|
|
|
|
omObjData *lbl_1_bss_BC;
|
|
omObjData *lbl_1_bss_B8;
|
|
omObjData *lbl_1_bss_A4[5];
|
|
s32 lbl_1_bss_A0;
|
|
s32 lbl_1_bss_9C;
|
|
s32 lbl_1_bss_98;
|
|
s32 lbl_1_bss_94;
|
|
s32 lbl_1_bss_90;
|
|
s32 lbl_1_bss_8C;
|
|
float lbl_1_bss_88;
|
|
s32 lbl_1_bss_84;
|
|
s32 lbl_1_bss_80;
|
|
s32 lbl_1_bss_7C;
|
|
s32 lbl_1_bss_78;
|
|
s32 lbl_1_bss_60[6];
|
|
|
|
void fn_1_64E8(Process *process)
|
|
{
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
s32 var_r31;
|
|
|
|
sp20.x = 0.0f;
|
|
sp20.y = 3000.0f;
|
|
sp20.z = 50.0f;
|
|
sp14.x = 0.0f;
|
|
sp14.y = 1.0f;
|
|
sp14.z = 0.0f;
|
|
sp8.x = 0.0f;
|
|
sp8.y = 0.0f;
|
|
sp8.z = 0.0f;
|
|
lbl_1_bss_BC = omAddObjEx(process, 0xA, 2, 0, -1, fn_1_6768);
|
|
lbl_1_bss_B8 = omAddObjEx(process, 0xC, 4, 0, -1, fn_1_67F0);
|
|
for (var_r31 = 0; var_r31 < 5; var_r31++) {
|
|
lbl_1_bss_A4[var_r31] = omAddObjEx(process, 0xE, 7, 0, -1, fn_1_6C74);
|
|
}
|
|
Hu3DShadowCreate(30.0f, 20.0f, 25000.0f);
|
|
Hu3DShadowTPLvlSet(0.65f);
|
|
Hu3DShadowPosSet(&sp20, &sp14, &sp8);
|
|
lbl_1_bss_A0 = 0;
|
|
lbl_1_bss_9C = lbl_1_bss_98 = 2;
|
|
lbl_1_bss_8C = 0;
|
|
lbl_1_bss_90 = 0;
|
|
lbl_1_bss_88 = 0.75f;
|
|
lbl_1_bss_7C = 3;
|
|
lbl_1_bss_78 = 0;
|
|
lbl_1_bss_84 = 0;
|
|
lbl_1_bss_80 = 0;
|
|
memset(lbl_1_bss_60, 0, 0x18);
|
|
}
|
|
|
|
void fn_1_6748(void)
|
|
{
|
|
fn_1_7978();
|
|
}
|
|
|
|
void fn_1_6768(omObjData *object)
|
|
{
|
|
object->stat |= 0x100;
|
|
object->model[0] = Hu3DModelCreateFile(0x220010);
|
|
object->model[1] = Hu3DModelCreateFile(0x220011);
|
|
object->func = fn_1_67EC;
|
|
}
|
|
|
|
void fn_1_67EC(omObjData *object) { }
|
|
|
|
void fn_1_67F0(omObjData *object)
|
|
{
|
|
object->stat |= 0x100;
|
|
object->model[0] = Hu3DModelCreateFile(0x220000);
|
|
object->model[1] = Hu3DModelCreateFile(0x220003);
|
|
object->model[2] = Hu3DModelCreateFile(0x220001);
|
|
object->model[3] = Hu3DModelCreateFile(0x220002);
|
|
Hu3DMotionSpeedSet(object->model[2], 0.0f);
|
|
Hu3DModelShadowSet(object->model[1]);
|
|
Hu3DModelPosSet(object->model[1], 0.0f, 0.0f, -500.0f);
|
|
Hu3DData[object->model[3]].unk_94 = 0.0f;
|
|
Hu3DData[object->model[3]].unk_98 = 2.0f;
|
|
object->work[3] = 0x1E;
|
|
object->func = fn_1_695C;
|
|
}
|
|
|
|
void fn_1_695C(omObjData *object)
|
|
{
|
|
ModelData *var_r30;
|
|
M453MapUnkStruct *var_r29;
|
|
|
|
if (lbl_1_bss_84 != 0) {
|
|
if (lbl_1_bss_80 == 0) {
|
|
if (object->work[0] < 60.0f) {
|
|
object->work[0] += 1;
|
|
var_r30 = &Hu3DData[object->model[1]];
|
|
var_r30->rot.x = (-120.0f * object->work[0]) / 60.0f;
|
|
}
|
|
else {
|
|
lbl_1_bss_80 ^= 1;
|
|
lbl_1_bss_84 = 0;
|
|
}
|
|
}
|
|
else if (object->work[0] != 0) {
|
|
object->work[0] -= 1;
|
|
var_r30 = &Hu3DData[object->model[1]];
|
|
var_r30->rot.x = (-120.0f * object->work[0]) / 60.0f;
|
|
}
|
|
else {
|
|
lbl_1_bss_80 ^= 1;
|
|
lbl_1_bss_84 = 0;
|
|
}
|
|
}
|
|
var_r29 = lbl_1_bss_A4[lbl_1_bss_9C]->data;
|
|
if (lbl_1_bss_94 != 0) {
|
|
lbl_1_bss_94 = 0;
|
|
lbl_1_bss_90 = 1;
|
|
}
|
|
if (lbl_1_bss_9C != lbl_1_bss_98) {
|
|
lbl_1_bss_90 = 0;
|
|
lbl_1_bss_8C = 0;
|
|
}
|
|
lbl_1_bss_98 = lbl_1_bss_9C;
|
|
if (var_r29->unk_00_field0) {
|
|
lbl_1_bss_9C = (lbl_1_bss_9C + 1) % 5;
|
|
lbl_1_bss_8C = 1;
|
|
}
|
|
if (object->work[3] != 0) {
|
|
if (--object->work[3] == 0) {
|
|
HuAudFXPlay(0x521);
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_6C74(omObjData *object)
|
|
{
|
|
s32 var_r31;
|
|
M453MapUnkStruct *var_r29;
|
|
|
|
var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x54, 0x10000000);
|
|
object->data = var_r29;
|
|
memset(object->data, 0, 0x54);
|
|
for (var_r31 = 0; var_r31 < 0xC; var_r31++) {
|
|
var_r29->unk_24[var_r31] = -1;
|
|
}
|
|
for (var_r31 = 0; (u32)var_r31 < 0xC; var_r31++) {
|
|
var_r29->unk_24[var_r31] = Hu3DModelCreateFile(lbl_1_data_A58[var_r31]);
|
|
Hu3DModelAttrSet(var_r29->unk_24[var_r31], HU3D_ATTR_DISPOFF);
|
|
}
|
|
object->model[0] = var_r29->unk_24[0];
|
|
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
|
|
var_r29->unk_00_field0 = 0;
|
|
var_r29->unk_04 = 4 - lbl_1_bss_A0;
|
|
fn_1_6FC4(object);
|
|
object->trans.y = 5.0f;
|
|
object->trans.z = -500.0f;
|
|
switch (var_r29->unk_04) {
|
|
case 0:
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
for (var_r31 = 0; var_r31 < 7; var_r31++) {
|
|
Hu3DModelShadowSet(object->model[var_r31]);
|
|
}
|
|
break;
|
|
case 3:
|
|
for (var_r31 = 0; var_r31 < 7; var_r31++) {
|
|
Hu3DModelShadowMapSet(object->model[var_r31]);
|
|
}
|
|
object->trans.y = 2.5f;
|
|
break;
|
|
case 4:
|
|
for (var_r31 = 0; var_r31 < 7; var_r31++) {
|
|
Hu3DModelShadowMapSet(object->model[var_r31]);
|
|
}
|
|
object->trans.y = 0.0f;
|
|
break;
|
|
}
|
|
fn_1_6EB4(object);
|
|
lbl_1_bss_A0++;
|
|
object->func = fn_1_73C4;
|
|
}
|
|
|
|
void fn_1_6EB4(omObjData *object)
|
|
{
|
|
Mtx sp38;
|
|
Mtx sp8;
|
|
s32 var_r30;
|
|
|
|
MTXTrans(sp38, object->trans.x, object->trans.y, object->trans.z);
|
|
mtxRot(sp8, object->rot.x, object->rot.y, object->rot.z);
|
|
MTXConcat(sp38, sp8, sp38);
|
|
for (var_r30 = 0; var_r30 < 6; var_r30++) {
|
|
MTXTrans(sp8, lbl_1_data_A88[var_r30].x, lbl_1_data_A88[var_r30].y, lbl_1_data_A88[var_r30].z);
|
|
MTXConcat(sp38, sp8, sp8);
|
|
Hu3DModelPosSet(object->model[var_r30 + 1], sp8[0][3], sp8[1][3], sp8[2][3]);
|
|
Hu3DModelRotSet(object->model[var_r30 + 1], object->rot.x, object->rot.y, object->rot.z);
|
|
}
|
|
}
|
|
|
|
void fn_1_6FC4(omObjData *object)
|
|
{
|
|
s32 sp8[6];
|
|
|
|
s32 var_r31;
|
|
M453MapUnkStruct *var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
s32 var_r26;
|
|
s32 var_r25;
|
|
s32 var_r24;
|
|
|
|
var_r30 = object->data;
|
|
for (var_r31 = 0; var_r31 < 0x64; var_r31++) {
|
|
var_r29 = ((u8)frand() * 3) >> 8;
|
|
var_r28 = ((u8)frand() * 3) >> 8;
|
|
var_r26 = lbl_1_data_AD0[var_r29];
|
|
lbl_1_data_AD0[var_r29] = lbl_1_data_AD0[var_r28];
|
|
lbl_1_data_AD0[var_r28] = var_r26;
|
|
var_r29 = ((u8)frand() * 3) >> 8;
|
|
var_r28 = ((u8)frand() * 3) >> 8;
|
|
var_r26 = lbl_1_data_ADC[var_r29];
|
|
lbl_1_data_ADC[var_r29] = lbl_1_data_ADC[var_r28];
|
|
lbl_1_data_ADC[var_r28] = var_r26;
|
|
var_r29 = ((u8)frand() * 5) >> 8;
|
|
var_r28 = ((u8)frand() * 5) >> 8;
|
|
var_r26 = lbl_1_data_AE8[var_r29];
|
|
lbl_1_data_AE8[var_r29] = lbl_1_data_AE8[var_r28];
|
|
lbl_1_data_AE8[var_r28] = var_r26;
|
|
}
|
|
var_r25 = 0;
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
if (lbl_1_bss_60[var_r31] < 6) {
|
|
sp8[var_r25++] = var_r31;
|
|
}
|
|
}
|
|
for (var_r31 = 0; var_r31 < 0x64; var_r31++) {
|
|
var_r29 = (var_r25 * (u8)frand()) >> 8;
|
|
var_r28 = (var_r25 * (u8)frand()) >> 8;
|
|
var_r26 = sp8[var_r29];
|
|
sp8[var_r29] = sp8[var_r28];
|
|
sp8[var_r28] = var_r26;
|
|
}
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
var_r30->unk_0C[var_r31] = 0;
|
|
}
|
|
for (var_r31 = 0; var_r31 < lbl_1_bss_78; var_r31++) {
|
|
var_r30->unk_0C[sp8[var_r31]] = lbl_1_data_ADC[var_r31];
|
|
}
|
|
while (var_r31 < lbl_1_bss_7C) {
|
|
var_r30->unk_0C[sp8[var_r31]] = lbl_1_data_AD0[var_r31];
|
|
var_r31++;
|
|
}
|
|
var_r24 = 0;
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
if (var_r30->unk_0C[var_r31] == 0) {
|
|
var_r30->unk_0C[var_r31] = lbl_1_data_AE8[var_r24++];
|
|
}
|
|
}
|
|
memcpy(lbl_1_bss_60, &var_r30->unk_0C, 0x18);
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
if (object->model[var_r31 + 1] >= 0) {
|
|
Hu3DModelAttrSet(object->model[var_r31 + 1], HU3D_ATTR_DISPOFF);
|
|
}
|
|
}
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
object->model[var_r31 + 1] = var_r30->unk_24[var_r30->unk_0C[var_r31]];
|
|
Hu3DModelAttrReset(object->model[var_r31 + 1], HU3D_ATTR_DISPOFF);
|
|
}
|
|
}
|
|
|
|
void fn_1_73C4(omObjData *object)
|
|
{
|
|
Mtx sp38;
|
|
Mtx sp8;
|
|
M453MapUnkStruct *var_r30;
|
|
s32 var_r29;
|
|
s32 var_r28;
|
|
ModelData *var_r27;
|
|
|
|
var_r30 = object->data;
|
|
if (lbl_1_bss_90 == 0) {
|
|
if ((lbl_1_bss_84 != 0) && (var_r30->unk_04 < 3)) {
|
|
var_r27 = &Hu3DData[lbl_1_bss_B8->model[1]];
|
|
object->rot.x = var_r27->rot.x;
|
|
switch (var_r30->unk_04) {
|
|
case 0:
|
|
object->trans.z = -500.0f + ((2.5f * lbl_1_bss_B8->work[0]) / 60.0f);
|
|
break;
|
|
case 1:
|
|
object->trans.z = -500.0f + ((5.0f * lbl_1_bss_B8->work[0]) / 60.0f);
|
|
break;
|
|
case 2:
|
|
object->trans.z = -500.0f + ((7.5f * lbl_1_bss_B8->work[0]) / 60.0f);
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
switch (var_r30->unk_04) {
|
|
case 0:
|
|
if (lbl_1_bss_8C != 0) {
|
|
object->trans.z = -495.0f;
|
|
var_r30->unk_04++;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (lbl_1_bss_8C != 0) {
|
|
object->trans.z = -492.5f;
|
|
var_r30->unk_00_field0 = 0;
|
|
var_r30->unk_04++;
|
|
var_r30->unk_08 = 0.0f;
|
|
for (var_r29 = 0; var_r29 < 7; var_r29++) {
|
|
Hu3DModelShadowSet(object->model[var_r29]);
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (lbl_1_bss_8C != 0) {
|
|
var_r30->unk_04 = var_r30->unk_04 + 1;
|
|
object->trans.y = 2.5f;
|
|
for (var_r29 = 0; var_r29 < 7; var_r29++) {
|
|
Hu3DModelShadowReset(object->model[var_r29]);
|
|
Hu3DModelShadowMapSet(object->model[var_r29]);
|
|
}
|
|
}
|
|
else {
|
|
var_r30->unk_08 = var_r30->unk_08 + lbl_1_bss_88;
|
|
if (var_r30->unk_08 > 90.0f) {
|
|
var_r30->unk_00_field0 = 1;
|
|
var_r30->unk_08 = 90.0f;
|
|
HuAudFXPlay(0x522);
|
|
}
|
|
object->rot.x = -120.0 * cosd(var_r30->unk_08);
|
|
object->trans.z = -500.0 + (7.5 * cosd(var_r30->unk_08));
|
|
}
|
|
break;
|
|
case 3:
|
|
if (lbl_1_bss_8C != 0) {
|
|
var_r30->unk_04++;
|
|
object->trans.y = 0.0f;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (lbl_1_bss_8C != 0) {
|
|
var_r30->unk_04 = 0;
|
|
object->trans.y = 5.0f;
|
|
object->trans.z = -497.5f;
|
|
object->rot.x = -120.0f;
|
|
for (var_r29 = 0; var_r29 < 7; var_r29++) {
|
|
fn_1_7A74(object->model[var_r29]);
|
|
}
|
|
fn_1_6FC4(object);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
MTXTrans(sp8, object->trans.x, object->trans.y, object->trans.z);
|
|
mtxRot(sp38, object->rot.x, object->rot.y, object->rot.z);
|
|
MTXConcat(sp8, sp38, sp8);
|
|
for (var_r28 = 0; var_r28 < 6; var_r28++) {
|
|
MTXTrans(sp38, lbl_1_data_A88[var_r28].x, lbl_1_data_A88[var_r28].y, lbl_1_data_A88[var_r28].z);
|
|
MTXConcat(sp8, sp38, sp38);
|
|
Hu3DModelPosSet(object->model[var_r28 + 1], sp38[0][3], sp38[1][3], sp38[2][3]);
|
|
Hu3DModelRotSet(object->model[var_r28 + 1], object->rot.x, object->rot.y, object->rot.z);
|
|
}
|
|
}
|
|
|
|
void fn_1_7978(void)
|
|
{
|
|
s32 var_r31;
|
|
omObjData *var_r30;
|
|
M453MapUnkStruct *var_r29;
|
|
s32 var_r28;
|
|
|
|
for (var_r31 = 0; var_r31 < 5; var_r31++) {
|
|
var_r30 = lbl_1_bss_A4[var_r31];
|
|
var_r29 = var_r30->data;
|
|
if (var_r29 != NULL) {
|
|
for (var_r28 = 0; var_r28 < 0xC; var_r28++) {
|
|
if (var_r29->unk_24[var_r28] >= 0) {
|
|
Hu3DModelKill(var_r29->unk_24[var_r28]);
|
|
}
|
|
}
|
|
HuMemDirectFree(var_r29);
|
|
lbl_1_bss_A4[var_r31]->data = NULL;
|
|
}
|
|
for (var_r31 = 0; var_r31 < var_r30->mdlcnt; var_r31++) {
|
|
var_r30->model[var_r31] = -1;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_7A74(s16 arg0)
|
|
{
|
|
HsfData *var_r31;
|
|
HsfObject *var_r30;
|
|
s16 var_r29;
|
|
HsfObject *var_r28;
|
|
HsfConstData *var_r27;
|
|
|
|
var_r31 = Hu3DData[arg0].hsfData;
|
|
for (var_r28 = var_r31->object, var_r29 = 0; var_r29 < var_r31->objectCnt; var_r29++, var_r28++) {
|
|
var_r30 = var_r28;
|
|
if (var_r30->constData) {
|
|
var_r27 = var_r30->constData;
|
|
var_r27->flags &= 0xFFFFFFF7;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_7AFC(float arg8, float arg9)
|
|
{
|
|
s32 var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r31 = (600.0f + arg8) / 400.0f;
|
|
var_r30 = (400.0f + arg9) / 400.0f;
|
|
if (var_r31 < 0) {
|
|
var_r31 = 0;
|
|
}
|
|
else if (var_r31 > 2) {
|
|
var_r31 = 2;
|
|
}
|
|
if (var_r30 < 0) {
|
|
var_r30 = 0;
|
|
}
|
|
else if (var_r30 > 1) {
|
|
var_r30 = 1;
|
|
}
|
|
return var_r31 + (var_r30 * 3);
|
|
}
|
|
|
|
void fn_1_7BB0(s32 arg0, Vec *arg1)
|
|
{
|
|
arg1->x = lbl_1_data_A88[arg0].x;
|
|
arg1->y = lbl_1_data_A88[arg0].y;
|
|
arg1->z = lbl_1_data_A88[arg0].z;
|
|
}
|
|
|
|
s32 fn_1_7BFC(M453MapUnkStruct *arg0, s32 arg1)
|
|
{
|
|
return arg0->unk_0C[arg1];
|
|
}
|
|
|
|
void fn_1_7C0C(float arg8)
|
|
{
|
|
lbl_1_bss_94 = 1;
|
|
lbl_1_bss_88 = arg8;
|
|
}
|
|
|
|
void fn_1_7C2C(s32 arg0)
|
|
{
|
|
lbl_1_bss_7C = arg0;
|
|
}
|
|
|
|
void fn_1_7C3C(void)
|
|
{
|
|
float var_f31;
|
|
float var_f30;
|
|
|
|
lbl_1_bss_84 = 1;
|
|
if (lbl_1_bss_80 == 0) {
|
|
var_f31 = 1.6666666f;
|
|
}
|
|
else {
|
|
var_f31 = -1.6666666f;
|
|
}
|
|
var_f30 = var_f31;
|
|
Hu3DMotionSpeedSet(lbl_1_bss_B8->model[2], var_f30);
|
|
HuAudFXPlay(0x524);
|
|
}
|
|
|
|
s32 fn_1_7CE0(float arg8, float arg9, Vec *arg0)
|
|
{
|
|
Mtx sp4C;
|
|
Mtx sp1C;
|
|
Vec sp10;
|
|
|
|
omObjData *var_r31;
|
|
Vec *var_r30;
|
|
s32 var_r28;
|
|
s32 var_r27;
|
|
s32 var_r24;
|
|
s32 var_r23;
|
|
M453MapUnkStruct *var_r22;
|
|
|
|
var_r31 = lbl_1_bss_A4[lbl_1_bss_9C];
|
|
var_r22 = var_r31->data;
|
|
var_r27 = fn_1_7AFC(arg8, arg9);
|
|
var_r28 = fn_1_7BFC(var_r22, var_r27);
|
|
if (var_r28 < 6) {
|
|
return 0;
|
|
}
|
|
var_r28 -= 6;
|
|
fn_1_7BB0(var_r27, &sp10);
|
|
sp10 = lbl_1_data_A88[var_r27];
|
|
MTXTrans(sp4C, var_r31->trans.x, var_r31->trans.y, var_r31->trans.z);
|
|
mtxRot(sp1C, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z);
|
|
MTXConcat(sp4C, sp1C, sp4C);
|
|
MTXTrans(sp1C, sp10.x, sp10.y, sp10.z);
|
|
MTXConcat(sp4C, sp1C, sp4C);
|
|
var_r30 = lbl_1_data_AFC[var_r28];
|
|
var_r23 = lbl_1_data_B14[var_r28];
|
|
for (var_r24 = 0; var_r24 < var_r23; var_r24++) {
|
|
MTXTrans(sp1C, var_r30->x, var_r30->y, var_r30->z);
|
|
MTXConcat(sp4C, sp1C, sp1C);
|
|
arg0->x = sp1C[0][3];
|
|
arg0->y = sp1C[1][3];
|
|
arg0->z = sp1C[2][3];
|
|
arg0++;
|
|
var_r30++;
|
|
}
|
|
return var_r23;
|
|
}
|
|
|
|
float fn_1_7F54(float arg8, float arg9)
|
|
{
|
|
float var_f31;
|
|
|
|
omObjData *var_r31 = lbl_1_bss_A4[lbl_1_bss_9C];
|
|
float var_f30 = -(arg9 - var_r31->trans.z);
|
|
if (cosd(var_r31->rot.x) <= 0.0) {
|
|
var_f31 = 9999.0f;
|
|
}
|
|
else {
|
|
var_f31 = (var_f30 * sind(var_r31->rot.x)) / cosd(var_r31->rot.x);
|
|
if (var_f31 > 9999.0f) {
|
|
var_f31 = 9999.0f;
|
|
}
|
|
}
|
|
return var_f31;
|
|
}
|
|
|
|
float fn_1_80B0(Vec *arg0, float arg8)
|
|
{
|
|
return fn_1_7F54(0.0f, arg0->z - arg8);
|
|
}
|
|
|
|
s32 fn_1_8230(void)
|
|
{
|
|
return lbl_1_bss_84;
|
|
}
|
|
|
|
s32 fn_1_8240(void)
|
|
{
|
|
return lbl_1_bss_90;
|
|
}
|
|
|
|
s32 fn_1_8250(M453MapUnkStruct *arg0, s32 *arg1)
|
|
{
|
|
s32 var_r31;
|
|
s32 var_r30;
|
|
|
|
var_r30 = 0;
|
|
for (var_r31 = 0; var_r31 < 6; var_r31++) {
|
|
if (arg0->unk_0C[var_r31] >= 6) {
|
|
arg1[var_r30++] = var_r31;
|
|
}
|
|
}
|
|
return var_r30;
|
|
}
|
|
|
|
s32 fn_1_82AC(Vec *arg0)
|
|
{
|
|
s32 sp8[6];
|
|
|
|
omObjData *var_r31;
|
|
s32 var_r30;
|
|
M453MapUnkStruct *var_r28;
|
|
s32 var_r27;
|
|
s32 var_r24;
|
|
|
|
var_r31 = lbl_1_bss_A4[lbl_1_bss_9C];
|
|
var_r28 = var_r31->data;
|
|
var_r24 = fn_1_8250(var_r28, sp8);
|
|
for (var_r30 = 0; var_r30 < var_r24; var_r30++) {
|
|
fn_1_7BB0(sp8[var_r30], arg0);
|
|
var_r27 = fn_1_7BFC(var_r28, sp8[var_r30]) - 6;
|
|
arg0->x += var_r31->trans.x + lbl_1_data_B2C[var_r27].x;
|
|
arg0->y += var_r31->trans.y + lbl_1_data_B2C[var_r27].y;
|
|
arg0->z += var_r31->trans.z + lbl_1_data_B2C[var_r27].z;
|
|
arg0++;
|
|
}
|
|
return var_r24;
|
|
}
|
|
|
|
s32 fn_1_844C(Vec *arg0)
|
|
{
|
|
Mtx sp50;
|
|
Mtx sp20;
|
|
s32 sp8[6];
|
|
|
|
omObjData *var_r30;
|
|
s32 var_r29;
|
|
M453MapUnkStruct *var_r27;
|
|
s32 var_r26;
|
|
s32 var_r23;
|
|
|
|
var_r30 = lbl_1_bss_A4[lbl_1_bss_9C];
|
|
var_r27 = var_r30->data;
|
|
var_r23 = fn_1_8250(var_r27, sp8);
|
|
MTXTrans(sp50, var_r30->trans.x, var_r30->trans.y, var_r30->trans.z);
|
|
mtxRot(sp20, var_r30->rot.x, var_r30->rot.y, var_r30->rot.z);
|
|
MTXConcat(sp50, sp20, sp50);
|
|
for (var_r29 = 0; var_r29 < var_r23; var_r29++) {
|
|
fn_1_7BB0(sp8[var_r29], arg0);
|
|
var_r26 = fn_1_7BFC(var_r27, sp8[var_r29]) - 6;
|
|
arg0->x += lbl_1_data_B2C[var_r26].x;
|
|
arg0->y += lbl_1_data_B2C[var_r26].y;
|
|
arg0->z += lbl_1_data_B2C[var_r26].z;
|
|
MTXTrans(sp20, arg0->x, arg0->y, arg0->z);
|
|
MTXConcat(sp50, sp20, sp20);
|
|
arg0->x = sp20[0][3];
|
|
arg0->y = sp20[1][3];
|
|
arg0->z = sp20[2][3];
|
|
arg0++;
|
|
}
|
|
return var_r23;
|
|
}
|
|
|
|
void fn_1_864C(s32 arg0)
|
|
{
|
|
if (arg0 > lbl_1_bss_7C) {
|
|
arg0 = lbl_1_bss_7C;
|
|
}
|
|
lbl_1_bss_78 = arg0;
|
|
}
|
|
|
|
s32 fn_1_867C(Vec *arg0, Vec *arg1)
|
|
{
|
|
Vec sp48;
|
|
Vec sp3C;
|
|
Vec sp30;
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
|
|
float var_f31;
|
|
float var_f30;
|
|
float var_f29;
|
|
float var_f28;
|
|
float var_f27;
|
|
float var_f26;
|
|
float var_f25;
|
|
float var_f24;
|
|
|
|
s32 var_r31;
|
|
Vec *var_r30;
|
|
Vec *var_r29;
|
|
omObjData *var_r28;
|
|
s32 var_r27;
|
|
s32 var_r24;
|
|
s32 var_r21;
|
|
s32 var_r20;
|
|
s32 var_r19;
|
|
M453MapUnkStruct *var_r18;
|
|
|
|
var_r28 = lbl_1_bss_A4[lbl_1_bss_9C];
|
|
var_r18 = var_r28->data;
|
|
if ((var_r28->rot.x > 0.0f) || (var_r28->rot.x <= -90.0f)) {
|
|
return 0;
|
|
}
|
|
VECSubtract(arg0, &var_r28->trans, &sp3C);
|
|
sp3C.z = sp3C.z / cosd(var_r28->rot.x);
|
|
var_f24 = arg0->z;
|
|
var_f25 = arg0->x;
|
|
var_r19 = fn_1_7AFC(var_f25, var_f24);
|
|
var_r24 = fn_1_7BFC(var_r18, var_r19);
|
|
if (var_r24 < 6) {
|
|
return 0;
|
|
}
|
|
var_r24 -= 6;
|
|
sp48 = lbl_1_data_A88[var_r19];
|
|
VECSubtract(&sp3C, &sp48, &sp3C);
|
|
var_r30 = lbl_1_data_B74[var_r24][0];
|
|
var_r29 = lbl_1_data_B74[var_r24][1];
|
|
var_r21 = lbl_1_data_BA4[var_r24];
|
|
for (var_r31 = 0; var_r31 < var_r21; var_r31++) {
|
|
var_r27 = (var_r31 + 1) % var_r21;
|
|
VECSubtract(var_r30 + var_r27, var_r30 + var_r31, &sp24);
|
|
VECSubtract(&sp3C, var_r30 + var_r27, &sp18);
|
|
VECCrossProduct(&sp24, &sp18, &spC);
|
|
if (!(spC.y < 0.0f)) {
|
|
VECSubtract(var_r29 + var_r27, var_r30 + var_r27, &sp24);
|
|
VECSubtract(&sp3C, var_r29 + var_r27, &sp18);
|
|
VECCrossProduct(&sp24, &sp18, &spC);
|
|
if (!(spC.y < 0.0f)) {
|
|
VECSubtract(var_r29 + var_r31, var_r29 + var_r27, &sp24);
|
|
VECSubtract(&sp3C, var_r29 + var_r31, &sp18);
|
|
VECCrossProduct(&sp24, &sp18, &spC);
|
|
if (!(spC.y < 0.0f)) {
|
|
VECSubtract(var_r30 + var_r31, var_r29 + var_r31, &sp24);
|
|
VECSubtract(&sp3C, var_r30 + var_r31, &sp18);
|
|
VECCrossProduct(&sp24, &sp18, &spC);
|
|
if (!(spC.y < 0.0f)) {
|
|
VECSubtract(var_r30 + var_r27, var_r30 + var_r31, &sp24);
|
|
var_f30 = (((sp3C.z * sp24.z)
|
|
+ (((sp3C.y * sp24.y) + ((sp3C.x * sp24.x) - (sp24.x * var_r30[var_r31].x))) - (sp24.y * var_r30[var_r31].y)))
|
|
- (sp24.z * var_r30[var_r31].z))
|
|
/ ((sp24.z * sp24.z) + ((sp24.x * sp24.x) + (sp24.y * sp24.y)));
|
|
sp30.x = var_r30[var_r31].x + (var_f30 * sp24.x);
|
|
sp30.y = var_r30[var_r31].y + (var_f30 * sp24.y);
|
|
sp30.z = var_r30[var_r31].z + (var_f30 * sp24.z);
|
|
VECSubtract(&sp30, &sp3C, &spC);
|
|
var_f28 = VECMag(&spC);
|
|
VECSubtract(var_r29 + var_r27, var_r29 + var_r31, &sp18);
|
|
var_f29 = (((sp3C.z * sp18.z)
|
|
+ (((sp3C.y * sp18.y) + ((sp3C.x * sp18.x) - (sp18.x * var_r29[var_r31].x))) - (sp18.y * var_r29[var_r31].y)))
|
|
- (sp18.z * var_r29[var_r31].z))
|
|
/ ((sp18.z * sp18.z) + ((sp18.x * sp18.x) + (sp18.y * sp18.y)));
|
|
sp30.x = var_r29[var_r31].x + (var_f29 * sp18.x);
|
|
sp30.y = var_r29[var_r31].y + (var_f29 * sp18.y);
|
|
sp30.z = var_r29[var_r31].z + (var_f29 * sp18.z);
|
|
VECSubtract(&sp30, &sp3C, &spC);
|
|
var_f27 = VECMag(&spC);
|
|
if (var_f28 == 0.0f) {
|
|
var_f31 = var_f30;
|
|
}
|
|
else if (var_f27 == 0.0f) {
|
|
var_f31 = var_f29;
|
|
}
|
|
else {
|
|
var_f26 = 1.0f - (var_f28 / (var_f28 + var_f27));
|
|
var_f31 = (var_f30 * var_f26) + (var_f29 * (1.0f - var_f26));
|
|
}
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 = 0.0f;
|
|
}
|
|
else if (var_f31 > 1.0f) {
|
|
var_f31 = 1.0f;
|
|
}
|
|
sp3C.x = var_r29[var_r31].x + (var_f31 * sp18.x);
|
|
sp3C.y = var_r29[var_r31].y + (var_f31 * sp18.y);
|
|
sp3C.z = var_r29[var_r31].z + (var_f31 * sp18.z);
|
|
arg1->x = sp3C.x + (var_r28->trans.x + sp48.x);
|
|
arg1->y = sp3C.y + (var_r28->trans.y + sp48.y);
|
|
arg1->z = var_r28->trans.z + ((sp48.z + sp3C.z) * cosd(var_r28->rot.x));
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var_r20 = 0;
|
|
for (var_r31 = 0; var_r31 < var_r21; var_r31++) {
|
|
var_r27 = (var_r31 + 1) % var_r21;
|
|
var_f31 = (sp3C.z - var_r30[var_r31].z) / (var_r30[var_r27].z - var_r30[var_r31].z);
|
|
spC.x = var_r30[var_r31].x + (var_f31 * (var_r30[var_r27].x - var_r30[var_r31].x));
|
|
if ((var_f31 >= 0.0f) && (var_f31 < 1.0f) && (spC.x > sp3C.x)) {
|
|
var_r20++;
|
|
}
|
|
}
|
|
if ((var_r20 & 1) != 0) {
|
|
arg1->x = arg0->x;
|
|
arg1->y = arg0->y;
|
|
arg1->z = arg0->z;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|