773 lines
25 KiB
C
773 lines
25 KiB
C
#include "game/audio.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/hsfmotion.h"
|
|
#include "game/object.h"
|
|
#include "game/objsub.h"
|
|
|
|
#include "REL/m434Dll.h"
|
|
#include "ext_math.h"
|
|
#include "version.h"
|
|
|
|
#ifndef __MWERKS__
|
|
#include "game/frand.h"
|
|
#endif
|
|
|
|
typedef struct bss_7480_struct {
|
|
s32 unk0;
|
|
s32 unk4;
|
|
s32 unk8;
|
|
float unkC;
|
|
float unk10;
|
|
Vec unk14;
|
|
} Bss7480Struct;
|
|
|
|
omObjData *lbl_1_bss_7880;
|
|
Bss7480Struct lbl_1_bss_7480[32];
|
|
float lbl_1_bss_6480[1024];
|
|
u8 lbl_1_bss_6080[1024];
|
|
u16 lbl_1_bss_5880[1024];
|
|
|
|
s32 lbl_1_data_2C0[] = { 0x410005, 0x410006 };
|
|
|
|
void fn_1_6A88(omObjData *object);
|
|
|
|
void fn_1_6860(Process *objman)
|
|
{
|
|
float temp_f31;
|
|
Vec spC;
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
omObjData *temp_r28;
|
|
for (temp_r31 = 0; temp_r31 < 32; temp_r31++) {
|
|
lbl_1_bss_7480[temp_r31].unk4 = lbl_1_bss_7480[temp_r31].unk0 = 0;
|
|
lbl_1_bss_7480[temp_r31].unkC = lbl_1_bss_7480[temp_r31].unk10 = 0;
|
|
lbl_1_bss_7480[temp_r31].unk8 = -1;
|
|
}
|
|
spC.y = 0;
|
|
spC.z = -650;
|
|
for (temp_r31 = 0; temp_r31 < 32; temp_r31++) {
|
|
temp_r30 = temp_r31 * 32;
|
|
spC.x = -650.0f;
|
|
for (temp_r29 = 0; temp_r29 < 32; temp_r29++, temp_r30++) {
|
|
lbl_1_bss_6480[temp_r30] = 0;
|
|
lbl_1_bss_6080[temp_r30] = 0;
|
|
lbl_1_bss_5880[temp_r30] = 0;
|
|
temp_f31 = VECMag(&spC);
|
|
if (temp_f31 < 522.0f) {
|
|
lbl_1_bss_6080[temp_r30] = 1;
|
|
}
|
|
spC.x += (1300.0f / 32.0f);
|
|
}
|
|
spC.z += (1300.0f / 32.0f);
|
|
}
|
|
temp_r28 = lbl_1_bss_7880 = omAddObjEx(objman, 30, 1, 0, -1, fn_1_6A88);
|
|
temp_r28->work[0] = 0;
|
|
}
|
|
|
|
void fn_1_6A84(void) { }
|
|
|
|
typedef struct work_6A88 {
|
|
s16 unk0;
|
|
s16 unk2;
|
|
s16 unk4;
|
|
s16 unk6;
|
|
s16 unk8;
|
|
s16 unkA;
|
|
s16 unkC;
|
|
s16 unkE;
|
|
s32 unk10;
|
|
s32 unk14;
|
|
s32 unk18;
|
|
Vec unk1C;
|
|
Vec unk28;
|
|
Vec unk34;
|
|
Vec unk40;
|
|
float unk4C;
|
|
} Work6A88;
|
|
|
|
void fn_1_6D7C(ModelData *model, Mtx mtx);
|
|
void fn_1_6DB8(omObjData *object);
|
|
|
|
s32 fn_1_8254(s32 arg0, Vec *arg1);
|
|
|
|
void fn_1_6A88(omObjData *object)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
s16 sp8[2];
|
|
Work6A88 *temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r28;
|
|
Work6A88 *temp_r27;
|
|
temp_r27 = HuMemDirectMallocNum(HEAP_SYSTEM, 20 * sizeof(Work6A88), MEMORY_DEFAULT_NUM);
|
|
object->data = temp_r27;
|
|
memset(temp_r27, 0, 20 * sizeof(Work6A88));
|
|
for (temp_r30 = 0; temp_r30 < 2; temp_r30++) {
|
|
sp8[temp_r30] = Hu3DModelCreateFile(lbl_1_data_2C0[temp_r30]);
|
|
}
|
|
temp_r31 = temp_r27;
|
|
for (temp_r30 = 0; temp_r30 < 20; temp_r30++, temp_r31++) {
|
|
temp_r28 = 0;
|
|
if (temp_r30 >= 15) {
|
|
temp_r28++;
|
|
}
|
|
temp_r31->unk0 = temp_r28 + 1;
|
|
temp_r31->unk2 = Hu3DModelLink(sp8[temp_r28]);
|
|
Hu3DModelCameraSet(temp_r31->unk2, 4);
|
|
Hu3DModelLayerSet(temp_r31->unk2, 4);
|
|
temp_f31 = frandmod(360);
|
|
temp_f30 = frandmod(464);
|
|
temp_r31->unk4C = temp_f31;
|
|
temp_r31->unk1C.x = temp_f30 * sind(temp_f31);
|
|
temp_r31->unk1C.y = -50.0f;
|
|
temp_r31->unk1C.z = temp_f30 * cosd(temp_f31);
|
|
temp_r31->unk34.z = frandmod(360);
|
|
temp_r31->unk40.y = 1.0f;
|
|
temp_r31->unk40.z = 0;
|
|
temp_r31->unk10 = 1;
|
|
temp_r31->unk14 = 0;
|
|
temp_r31->unkE = -1;
|
|
temp_r31->unkC = 0;
|
|
temp_r31->unk18 = fn_1_8254(-1, &temp_r31->unk1C);
|
|
temp_r31->unkA = 20;
|
|
}
|
|
for (temp_r30 = 0; temp_r30 < 2; temp_r30++) {
|
|
if (sp8[temp_r30] > 0) {
|
|
Hu3DModelKill(sp8[temp_r30]);
|
|
}
|
|
}
|
|
object->work[1] = 140;
|
|
object->model[0] = Hu3DHookFuncCreate(fn_1_6D7C);
|
|
Hu3DModelCameraSet(object->model[0], 8);
|
|
Hu3DModelLayerSet(object->model[0], 7);
|
|
object->func = fn_1_6DB8;
|
|
}
|
|
|
|
void fn_1_6DBC(omObjData *object);
|
|
|
|
void fn_1_6D7C(ModelData *model, Mtx mtx)
|
|
{
|
|
if (!omPauseChk()) {
|
|
fn_1_6DBC(lbl_1_bss_7880);
|
|
}
|
|
}
|
|
|
|
void fn_1_6DB8(omObjData *object) { }
|
|
|
|
void fn_1_7DF0(void);
|
|
s32 fn_1_84D0(Work6A88 *arg0);
|
|
void fn_1_85C4(Work6A88 *arg0, Vec *arg1);
|
|
|
|
void fn_1_6DBC(omObjData *object)
|
|
{
|
|
Vec sp8;
|
|
float temp_f31;
|
|
float temp_f30;
|
|
Work6A88 *temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r27;
|
|
s32 temp_r26;
|
|
s32 temp_r25;
|
|
s32 temp_r24;
|
|
Work6A88 *temp_r23;
|
|
temp_r23 = object->data;
|
|
fn_1_7DF0();
|
|
if (object->work[1]) {
|
|
object->work[1]--;
|
|
return;
|
|
}
|
|
temp_r26 = 0;
|
|
temp_r31 = temp_r23;
|
|
for (temp_r27 = 0; temp_r27 < 20; temp_r27++, temp_r31++) {
|
|
temp_r30 = 0;
|
|
temp_r24 = 0;
|
|
switch (temp_r31->unk4) {
|
|
case 0:
|
|
if (temp_r31->unkC == 0) {
|
|
temp_r24 = fn_1_84D0(temp_r31);
|
|
if (temp_r24) {
|
|
temp_r30 = 1;
|
|
temp_r31->unkC = 60;
|
|
}
|
|
}
|
|
else {
|
|
temp_r31->unkC--;
|
|
}
|
|
if (temp_r31->unkC == 0 && temp_r31->unk40.y > temp_r31->unk40.z) {
|
|
temp_r30 = 1;
|
|
}
|
|
else {
|
|
VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8);
|
|
temp_f31 = VECMag(&sp8);
|
|
if (temp_f31 < 50.0f) {
|
|
temp_r30 = 1;
|
|
}
|
|
}
|
|
if (temp_r30) {
|
|
if (temp_r31->unkC == 0) {
|
|
temp_f31 = frandmod(1000);
|
|
temp_f30 = frandmod(1000);
|
|
if (temp_f31 > temp_f30) {
|
|
temp_f30 = temp_f31;
|
|
}
|
|
temp_f30 = 0.53f * temp_f30;
|
|
temp_f31 = temp_r31->unk4C + ((0.06f * frandmod(1000)) - 30);
|
|
temp_r31->unk4C = temp_f31;
|
|
temp_r31->unk28.x = temp_f30 * sind(temp_f31);
|
|
temp_r31->unk28.z = temp_f30 * cosd(temp_f31);
|
|
}
|
|
else {
|
|
fn_1_85C4(temp_r31, &temp_r31->unk28);
|
|
}
|
|
temp_r31->unk28.y = temp_r31->unk1C.y;
|
|
temp_r31->unk40.y = 0;
|
|
temp_r31->unk40.z = frandmod(200) + 100.0f;
|
|
temp_r31->unk34.y = 200;
|
|
if (temp_r31->unkC) {
|
|
temp_r31->unk34.y *= 2.0f;
|
|
}
|
|
}
|
|
VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8);
|
|
temp_r31->unk40.x = atan2d(sp8.x, sp8.z);
|
|
if (temp_r31->unkC != 0) {
|
|
temp_r31->unk34.z = fn_1_6690(temp_r31->unk34.z, temp_r31->unk40.x, 0.15f);
|
|
temp_r31->unk4C = atan2d(temp_r31->unk28.x, temp_r31->unk28.z);
|
|
}
|
|
else {
|
|
temp_r31->unk34.z = fn_1_6690(temp_r31->unk34.z, temp_r31->unk40.x, 0.07f);
|
|
}
|
|
if (temp_r31->unkC != 0) {
|
|
temp_r31->unk34.y += (300.0f - temp_r31->unk34.y) * 0.02f;
|
|
}
|
|
else {
|
|
temp_r31->unk34.y += (75.0f - temp_r31->unk34.y) * 0.02f;
|
|
}
|
|
temp_r31->unk34.x += (temp_r31->unk34.y - temp_r31->unk34.x) * 0.2f;
|
|
temp_r31->unk1C.x += sind(temp_r31->unk34.z) * ((1.0f / REFRESH_RATE) * temp_r31->unk34.x);
|
|
temp_r31->unk1C.z += cosd(temp_r31->unk34.z) * ((1.0f / REFRESH_RATE) * temp_r31->unk34.x);
|
|
temp_r31->unk40.y += (1.0f / REFRESH_RATE) * temp_r31->unk34.x;
|
|
temp_r31->unk18 = fn_1_8254(temp_r31->unk18, &temp_r31->unk1C);
|
|
Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C);
|
|
Hu3DModelRotSet(temp_r31->unk2, 0, temp_r31->unk34.z, 0);
|
|
break;
|
|
|
|
case 1:
|
|
temp_r31->unk34.z += 1.0f / REFRESH_RATE * 180.0f;
|
|
Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C);
|
|
Hu3DModelRotSet(temp_r31->unk2, 0, temp_r31->unk34.z, 0);
|
|
if (fn_1_1D54() == 4) {
|
|
Hu3DModelAttrSet(temp_r31->unk2, HU3D_ATTR_DISPOFF);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (temp_r31->unk14) {
|
|
if (temp_r31->unk8 == 0) {
|
|
sp8.x = (0.1f * frandmod(1000) + 500.0f) - 50.0f;
|
|
sp8.y = temp_r31->unk1C.y;
|
|
sp8.z = (0.1f * frandmod(1000) + 500.0f) - 50.0f;
|
|
if (temp_r31->unk1C.x < 0.0f) {
|
|
sp8.x = -sp8.x;
|
|
}
|
|
VECSubtract(&sp8, &temp_r31->unk1C, &sp8);
|
|
temp_r31->unk40.x = temp_r31->unk34.z = atan2d(sp8.x, sp8.z);
|
|
temp_r31->unk28.x = (1.0f / REFRESH_RATE) * sp8.x;
|
|
temp_r31->unk28.y = VERSION_NTSC ? 6.666667f : 8.0f;
|
|
temp_r31->unk28.z = (1.0f / REFRESH_RATE) * sp8.z;
|
|
temp_r31->unk8++;
|
|
HuAudFXPlay(1734);
|
|
}
|
|
temp_r29 = 0;
|
|
if (temp_r31->unk1C.y <= -15.000001f) {
|
|
temp_r29 = 1;
|
|
}
|
|
temp_r31->unk28.y += VERSION_NTSC ? -0.27222225f : -0.392f;
|
|
VECAdd(&temp_r31->unk1C, &temp_r31->unk28, &temp_r31->unk1C);
|
|
if (!temp_r29 && temp_r31->unk1C.y <= -15.000001f) {
|
|
fn_1_43AC(&temp_r31->unk1C);
|
|
if (temp_r31->unkE >= 0) {
|
|
omVibrate(temp_r31->unkE, 12, 6, 6);
|
|
temp_r31->unkE = -1;
|
|
}
|
|
HuAudFXPlay(1741);
|
|
}
|
|
sp8 = temp_r31->unk28;
|
|
sp8.y = 0;
|
|
temp_f31 = VECMag(&sp8);
|
|
temp_f31 = atan2d(temp_r31->unk28.y, temp_f31);
|
|
Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C);
|
|
Hu3DModelRotSet(temp_r31->unk2, -temp_f31, temp_r31->unk34.z, 0);
|
|
if (temp_r31->unk1C.y <= -50.0) {
|
|
temp_r31->unk14 = 0;
|
|
temp_r31->unk40.z = 0;
|
|
temp_r31->unk40.y = 1;
|
|
temp_r31->unk4++;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
if (temp_r31->unk40.y > temp_r31->unk40.z) {
|
|
temp_r30 = 1;
|
|
}
|
|
VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8);
|
|
temp_f31 = VECMag(&sp8);
|
|
if (temp_f31 < 30.000002f) {
|
|
temp_r30 = 1;
|
|
}
|
|
if (temp_r30) {
|
|
temp_f31 = frandmod(360);
|
|
temp_f30 = (0.08f * frandmod(1000)) + 20;
|
|
temp_r31->unk28.x = temp_f30 * sind(temp_f31);
|
|
temp_r31->unk28.z = temp_f30 * cosd(temp_f31);
|
|
temp_r31->unk28.y = -50;
|
|
temp_r31->unk1C.y = temp_r31->unk28.y;
|
|
temp_r31->unk28.x += 480.00003f;
|
|
temp_r31->unk28.z += 480.00003f;
|
|
if (temp_r31->unk1C.x < 0.0f) {
|
|
temp_r31->unk28.x *= -1.0f;
|
|
}
|
|
temp_r31->unk40.y = 0;
|
|
temp_r31->unk40.z = frandmod(100) + 100.0f;
|
|
temp_r31->unk34.y = 100;
|
|
if (frandmod(100) < 5) {
|
|
temp_r31->unk4++;
|
|
temp_r31->unk8 = 0;
|
|
HuAudFXPlay(1740);
|
|
}
|
|
}
|
|
VECSubtract(&temp_r31->unk28, &temp_r31->unk1C, &sp8);
|
|
temp_r31->unk40.x = atan2d(sp8.x, sp8.z);
|
|
temp_r31->unk34.z = fn_1_6690(temp_r31->unk34.z, temp_r31->unk40.x, 0.07f);
|
|
temp_r31->unk34.y += (50.0f - temp_r31->unk34.y) * 0.02f;
|
|
temp_r31->unk34.x += (temp_r31->unk34.y - temp_r31->unk34.x) * 0.2f;
|
|
temp_r31->unk1C.x += sind(temp_r31->unk34.z) * ((1.0f / REFRESH_RATE) * temp_r31->unk34.x);
|
|
temp_r31->unk1C.z += cosd(temp_r31->unk34.z) * ((1.0f / REFRESH_RATE) * temp_r31->unk34.x);
|
|
temp_r31->unk40.y += (1.0f / REFRESH_RATE) * temp_r31->unk34.x;
|
|
Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C);
|
|
Hu3DModelRotSet(temp_r31->unk2, 0, temp_r31->unk34.z, 0);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
if (temp_r31->unk8 == 0) {
|
|
sp8.x = (0.1f * frandmod(1000) + 480.00003f) - 50.0f;
|
|
sp8.y = temp_r31->unk1C.y;
|
|
sp8.z = (0.1f * frandmod(1000) + 480.00003f) - 50.0f;
|
|
if (temp_r31->unk1C.x < 0) {
|
|
sp8.x = -sp8.x;
|
|
}
|
|
VECSubtract(&sp8, &temp_r31->unk1C, &sp8);
|
|
temp_r31->unk40.x = temp_r31->unk34.z = atan2d(sp8.x, sp8.z);
|
|
temp_r31->unk28.x = (1.0f / REFRESH_RATE) * sp8.x;
|
|
temp_r31->unk28.y = VERSION_NTSC ? 6.666667f : 8.0f;
|
|
temp_r31->unk28.z = (1.0f / REFRESH_RATE) * sp8.z;
|
|
temp_r31->unk8++;
|
|
}
|
|
temp_r29 = temp_r25 = 0;
|
|
if (temp_r31->unk1C.y <= -15.000001f) {
|
|
temp_r29 = 1;
|
|
}
|
|
temp_r31->unk28.y += VERSION_NTSC ? -0.27222225f : -0.392f;
|
|
VECAdd(&temp_r31->unk1C, &temp_r31->unk28, &temp_r31->unk1C);
|
|
if (temp_r31->unk1C.y <= -15.000001f) {
|
|
temp_r25 = 1;
|
|
}
|
|
if (temp_r29 != temp_r25) {
|
|
fn_1_43AC(&temp_r31->unk1C);
|
|
if (temp_r31->unk28.y < 0.0f) {
|
|
HuAudFXPlay(1741);
|
|
}
|
|
}
|
|
sp8 = temp_r31->unk28;
|
|
sp8.y = 0;
|
|
temp_f31 = VECMag(&sp8);
|
|
temp_f31 = atan2d(temp_r31->unk28.y * 0.3f, temp_f31);
|
|
Hu3DModelPosSetV(temp_r31->unk2, &temp_r31->unk1C);
|
|
Hu3DModelRotSet(temp_r31->unk2, -temp_f31, temp_r31->unk34.z, 0);
|
|
if (temp_r31->unk1C.y <= -50.0) {
|
|
temp_r31->unk40.z = 0;
|
|
temp_r31->unk40.y = 1;
|
|
temp_r31->unk4--;
|
|
}
|
|
break;
|
|
}
|
|
if (temp_r31->unk4 < 2) {
|
|
temp_r26++;
|
|
}
|
|
}
|
|
if (temp_r26 == 0) {
|
|
fn_1_1D9C();
|
|
}
|
|
}
|
|
|
|
void fn_1_7DF0(void)
|
|
{
|
|
Vec sp14;
|
|
Vec sp8;
|
|
float temp_f31;
|
|
float temp_f30;
|
|
|
|
Bss7480Struct *temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
s32 temp_r27;
|
|
s32 temp_r26;
|
|
s32 temp_r25;
|
|
s32 temp_r24;
|
|
|
|
temp_r31 = lbl_1_bss_7480;
|
|
temp_r31 = lbl_1_bss_7480;
|
|
for (temp_r30 = 0; temp_r30 < 32; temp_r30++, temp_r31++) {
|
|
if (temp_r31->unk0 == 0) {
|
|
continue;
|
|
}
|
|
temp_r31->unk0--;
|
|
if (temp_r31->unk4) {
|
|
temp_r31->unk4--;
|
|
temp_r31->unkC += (temp_r31->unk10 - temp_r31->unkC) * 0.2f;
|
|
}
|
|
else {
|
|
if (temp_r31->unk0 < 100.0f) {
|
|
temp_r31->unkC *= 0.98f;
|
|
}
|
|
}
|
|
}
|
|
for (temp_r30 = 0; temp_r30 < 1024; temp_r30++) {
|
|
lbl_1_bss_6480[temp_r30] = 0;
|
|
}
|
|
temp_r31 = lbl_1_bss_7480;
|
|
for (temp_r30 = 0; temp_r30 < 32; temp_r30++, temp_r31++) {
|
|
if (temp_r31->unk0 == 0) {
|
|
continue;
|
|
}
|
|
temp_r28 = (16.0f / 650.0f) * (650.0f + (temp_r31->unk14.x - temp_r31->unkC));
|
|
temp_r25 = 1.0f + (temp_r28 + ((16.0f / 650.0f) * (2.0f * temp_r31->unkC)));
|
|
temp_r29 = (16.0f / 650.0f) * (650.0f + (temp_r31->unk14.z - temp_r31->unkC));
|
|
temp_r24 = 1.0f + (temp_r29 + ((16.0f / 650.0f) * (2.0f * temp_r31->unkC)));
|
|
if (temp_r28 < 0) {
|
|
temp_r28 = 0;
|
|
}
|
|
if (temp_r25 > 32) {
|
|
temp_r25 = 32;
|
|
}
|
|
if (temp_r29 < 0) {
|
|
temp_r29 = 0;
|
|
}
|
|
if (temp_r24 > 32) {
|
|
temp_r24 = 32;
|
|
}
|
|
temp_f30 = 1.0f / temp_r31->unkC;
|
|
sp14.y = 0;
|
|
sp14.z = ((1300.0f / 32.0f) * temp_r29) - 650.0f;
|
|
while (temp_r29 < temp_r24) {
|
|
sp14.x = ((1300.0f / 32.0f) * temp_r28) - 650.0f;
|
|
temp_r26 = temp_r28 + (32 * temp_r29);
|
|
for (temp_r27 = temp_r28; temp_r27 < temp_r25; temp_r27++, temp_r26++) {
|
|
VECSubtract(&temp_r31->unk14, &sp14, &sp8);
|
|
temp_f31 = 1.0f - (temp_f30 * VECMag(&sp8));
|
|
if (temp_f31 > 0.0f) {
|
|
lbl_1_bss_6480[temp_r26] += temp_f31;
|
|
}
|
|
sp14.x += (1300.0f / 32.0f);
|
|
}
|
|
sp14.z += (1300.0f / 32.0f);
|
|
temp_r29++;
|
|
}
|
|
}
|
|
}
|
|
|
|
void fn_1_83C8(s32 arg0);
|
|
|
|
s32 fn_1_8254(s32 arg0, Vec *arg1)
|
|
{
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
s32 temp_r27;
|
|
s32 sp8[9][2] = { -1, -1, 0, -1, 1, -1, -1, 0, 0, 0, 1, 0, -1, 1, 0, 1, 1, 1 };
|
|
fn_1_83C8(arg0);
|
|
arg0 = -1;
|
|
temp_r29 = (16.0f / 650.0f) * (650.0f + arg1->x);
|
|
temp_r30 = (16.0f / 650.0f) * (650.0f + arg1->z);
|
|
if (temp_r29 >= 0 && temp_r29 < 32 && temp_r30 >= 0 && temp_r30 < 32) {
|
|
arg0 = temp_r29 + (32 * temp_r30);
|
|
for (temp_r31 = 0; temp_r31 < 9; temp_r31++) {
|
|
temp_r28 = temp_r29 + sp8[temp_r31][0];
|
|
temp_r27 = temp_r30 + sp8[temp_r31][1];
|
|
if (temp_r28 >= 0 && temp_r28 < 32 && temp_r27 >= 0 && temp_r27 < 32) {
|
|
lbl_1_bss_5880[temp_r28 + (32 * temp_r27)]++;
|
|
}
|
|
}
|
|
}
|
|
return arg0;
|
|
}
|
|
|
|
void fn_1_83C8(s32 arg0)
|
|
{
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
s32 temp_r27;
|
|
s32 sp8[9][2] = { -1, -1, 0, -1, 1, -1, -1, 0, 0, 0, 1, 0, -1, 1, 0, 1, 1, 1 };
|
|
if (arg0 < 0 || arg0 >= 1024) {
|
|
return;
|
|
}
|
|
temp_r28 = arg0 % 32;
|
|
temp_r27 = (arg0 - temp_r28) / 32;
|
|
for (temp_r31 = 0; temp_r31 < 9; temp_r31++) {
|
|
temp_r30 = temp_r28 + sp8[temp_r31][0];
|
|
temp_r29 = temp_r27 + sp8[temp_r31][1];
|
|
if (temp_r30 >= 0 && temp_r30 < 32 && temp_r29 >= 0 && temp_r29 < 32) {
|
|
lbl_1_bss_5880[temp_r30 + (32 * temp_r29)]--;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_84D0(Work6A88 *arg0)
|
|
{
|
|
float temp_f31;
|
|
Vec spC;
|
|
Bss7480Struct *temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
temp_r31 = lbl_1_bss_7480;
|
|
temp_r28 = 0;
|
|
temp_r31 = lbl_1_bss_7480;
|
|
for (temp_r29 = 0; temp_r29 < 32; temp_r29++, temp_r31++) {
|
|
if (temp_r31->unk0 == 0) {
|
|
continue;
|
|
}
|
|
VECSubtract(&temp_r31->unk14, &arg0->unk1C, &spC);
|
|
temp_f31 = 1.0f - (VECMag(&spC) / temp_r31->unkC);
|
|
if (temp_f31 < 0.3f) {
|
|
continue;
|
|
}
|
|
temp_r30 = 1;
|
|
if (temp_r31->unk4) {
|
|
temp_r30++;
|
|
}
|
|
if (temp_r28 < temp_r30) {
|
|
temp_r28 = temp_r30;
|
|
}
|
|
}
|
|
return temp_r28;
|
|
}
|
|
|
|
void fn_1_85C4(Work6A88 *arg0, Vec *arg1)
|
|
{
|
|
Vec sp24;
|
|
Vec sp18;
|
|
Vec spC;
|
|
float temp_f31;
|
|
float temp_f30;
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
sp18.x = sp18.y = sp18.z = 0;
|
|
temp_f30 = 5000;
|
|
sp24.y = 0;
|
|
sp24.z = -650;
|
|
for (temp_r30 = 0; temp_r30 < 32; temp_r30++) {
|
|
temp_r31 = 32 * temp_r30;
|
|
sp24.x = -650;
|
|
for (temp_r29 = 0; temp_r29 < 32; temp_r29++, temp_r31++) {
|
|
if (lbl_1_bss_6480[temp_r31] < 0.15f && lbl_1_bss_6080[temp_r31]) {
|
|
VECSubtract(&arg0->unk1C, &sp24, &spC);
|
|
temp_f31 = VECMag(&spC);
|
|
if (temp_f31 > 81.25f) {
|
|
temp_f31 += 162.5f * lbl_1_bss_5880[temp_r31];
|
|
if (temp_f31 < temp_f30) {
|
|
temp_f30 = temp_f31;
|
|
sp18 = sp24;
|
|
}
|
|
}
|
|
}
|
|
sp24.x += (1300.0f / 32.0f);
|
|
}
|
|
sp24.z += (1300.0f / 32.0f);
|
|
}
|
|
sp18.x += ((1300.0f / 32000.0f) * frandmod(1000)) - (1300.0f / 64.0f);
|
|
sp18.z += ((1300.0f / 32000.0f) * frandmod(1000)) - (1300.0f / 64.0f);
|
|
*arg1 = sp18;
|
|
}
|
|
|
|
s32 fn_1_8884(Vec *arg0, float arg1, float arg2, float arg3, float arg4, float arg5, s32 arg6, s32 arg7)
|
|
{
|
|
float temp_f31;
|
|
float temp_f30;
|
|
Vec sp24;
|
|
Work6A88 *temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r28;
|
|
Work6A88 *temp_r23;
|
|
temp_r23 = lbl_1_bss_7880->data;
|
|
temp_r30 = -1;
|
|
temp_r31 = temp_r23;
|
|
for (temp_r28 = 0; temp_r28 < 20; temp_r28++, temp_r31++) {
|
|
if (temp_r31->unk10 == 0) {
|
|
continue;
|
|
}
|
|
VECSubtract(&temp_r31->unk1C, arg0, &sp24);
|
|
temp_f30 = VECMag(&sp24);
|
|
if (temp_f30 < arg1 || temp_f30 > arg2) {
|
|
continue;
|
|
}
|
|
temp_f31 = atan2d(sp24.x, sp24.z);
|
|
temp_f31 = fn_1_67AC(arg3, temp_f31);
|
|
if (temp_f31 < arg4 || temp_f31 > arg5) {
|
|
continue;
|
|
}
|
|
temp_r30++;
|
|
if (arg6) {
|
|
temp_r31->unk14 = 1;
|
|
temp_r31->unk10 = 0;
|
|
temp_r31->unk4 = 1;
|
|
fn_1_83C8(temp_r31->unk18);
|
|
temp_r31->unk18 = -1;
|
|
temp_r31->unkE = arg7;
|
|
HuAudFXPlay(1733);
|
|
temp_r30 = temp_r28;
|
|
break;
|
|
}
|
|
}
|
|
if (!arg6) {
|
|
temp_r30++;
|
|
}
|
|
return temp_r30;
|
|
}
|
|
|
|
void fn_1_8AEC(s16 arg0, Vec *arg1)
|
|
{
|
|
Work6A88 *temp_r31;
|
|
Work6A88 *temp_r30 = lbl_1_bss_7880->data;
|
|
if (arg0 < 0 || arg0 >= 20) {
|
|
return;
|
|
}
|
|
temp_r31 = &temp_r30[arg0];
|
|
temp_r31->unk1C = *arg1;
|
|
}
|
|
|
|
void fn_1_8B58(s16 arg0)
|
|
{
|
|
Work6A88 *temp_r31;
|
|
s32 temp_r30;
|
|
Work6A88 *temp_r28 = lbl_1_bss_7880->data;
|
|
if (arg0 < 0 || arg0 >= 20) {
|
|
return;
|
|
}
|
|
temp_r31 = &temp_r28[arg0];
|
|
temp_r31->unk4 = 2;
|
|
temp_r31->unk8 = 0;
|
|
if (temp_r31->unk1C.x >= 0.0f) {
|
|
temp_r30 = 1;
|
|
}
|
|
else {
|
|
temp_r30 = 0;
|
|
}
|
|
fn_1_1C44(temp_r30, temp_r31->unk0);
|
|
}
|
|
|
|
void fn_1_8C14(s32 arg0, Vec *arg1, float arg2)
|
|
{
|
|
Bss7480Struct *temp_r31;
|
|
s32 temp_r30;
|
|
temp_r31 = lbl_1_bss_7480;
|
|
for (temp_r30 = 0; temp_r30 < 32; temp_r30++, temp_r31++) {
|
|
if (temp_r31->unk0 && temp_r31->unk8 == arg0) {
|
|
temp_r31->unk0 *= 0.8f;
|
|
}
|
|
}
|
|
temp_r31 = lbl_1_bss_7480;
|
|
for (temp_r30 = 0; temp_r30 < 32; temp_r30++, temp_r31++) {
|
|
if (!temp_r31->unk0) {
|
|
temp_r31->unk4 = 0.5 * REFRESH_RATE;
|
|
temp_r31->unk0 = (REFRESH_RATE * (3.0f * arg2)) + 2.5f * REFRESH_RATE;
|
|
temp_r31->unk8 = arg0;
|
|
temp_r31->unk14 = *arg1;
|
|
temp_r31->unkC = 0;
|
|
temp_r31->unk10 = 150.0f + (250.0f * arg2);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fn_1_8D78(Vec *arg0)
|
|
{
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29 = -1;
|
|
temp_r31 = (16.0f / 650.0f) * (670.3125f + arg0->x);
|
|
temp_r30 = (16.0f / 650.0f) * (670.3125f + arg0->z);
|
|
if (temp_r31 >= 0 && temp_r31 < 32 && temp_r30 >= 0 && temp_r30 < 32) {
|
|
temp_r29 = temp_r31 + (32 * temp_r30);
|
|
}
|
|
return temp_r29;
|
|
}
|
|
|
|
s32 fn_1_8E2C(s32 arg0, Vec *arg1)
|
|
{
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
if (arg0 < 0 || arg0 >= 1024) {
|
|
arg1->x = arg1->y = arg1->z = 0;
|
|
return 0;
|
|
}
|
|
temp_r31 = arg0 % 32;
|
|
temp_r30 = (arg0 - temp_r31) / 32;
|
|
arg1->x = ((1300.0f / 32.0f) * temp_r31) - 670.3125f;
|
|
arg1->y = 0;
|
|
arg1->z = ((1300.0f / 32.0f) * temp_r30) - 670.3125f;
|
|
return 1;
|
|
}
|
|
|
|
s32 fn_1_8F3C(s32 arg0)
|
|
{
|
|
s32 sp8[9][2] = { -1, -1, 0, -1, 1, -1, -1, 0, 0, 0, 1, 0, -1, 1, 0, 1, 1, 1 };
|
|
if (arg0 < 0 || arg0 >= 1024) {
|
|
return 0;
|
|
}
|
|
return lbl_1_bss_5880[arg0];
|
|
}
|
|
|
|
s32 fn_1_8FA0(Vec *arg0)
|
|
{
|
|
s32 sp24[9][2] = { -1, -1, 0, -1, 1, -1, -1, 0, 0, 0, 1, 0, -1, 1, 0, 1, 1, 1 };
|
|
Vec sp18;
|
|
Vec spC;
|
|
s32 temp_r31;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r28;
|
|
s32 temp_r27 = -1;
|
|
float temp_f31;
|
|
float temp_f30 = 5000;
|
|
sp18.y = 0;
|
|
sp18.z = -650;
|
|
for (temp_r31 = 0; temp_r31 < 32; temp_r31++) {
|
|
temp_r30 = temp_r31 * 32;
|
|
sp18.x = -650;
|
|
for (temp_r29 = 0; temp_r29 < 32; temp_r29++, temp_r30++) {
|
|
temp_r28 = lbl_1_bss_5880[temp_r30];
|
|
if (temp_r28 > 0) {
|
|
VECSubtract(arg0, &sp18, &spC);
|
|
temp_f31 = VECMag(&spC) + (0.2f * frandmod(1000));
|
|
temp_f31 -= 50.0f * temp_r28;
|
|
if (temp_f31 < temp_f30) {
|
|
temp_f30 = temp_f31;
|
|
temp_r27 = temp_r30;
|
|
}
|
|
}
|
|
sp18.x += (1300.0f / 32.0f);
|
|
}
|
|
sp18.z += (1300.0f / 32.0f);
|
|
}
|
|
return temp_r27;
|
|
}
|