From 8d3dbb69be79f03ed4afdd83517dc34131283518 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 31 Aug 2024 08:15:24 -0500 Subject: [PATCH] Bootstrap m432Dll, m450Dll, and m461Dll --- configure.py | 1 - src/REL/m432Dll/main.c | 480 +++++++++++++++++++++++++++++++++++++++++ src/REL/m450Dll/main.c | 480 +++++++++++++++++++++++++++++++++++++++++ src/REL/m461Dll/main.c | 480 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1440 insertions(+), 1 deletion(-) create mode 100644 src/REL/m432Dll/main.c create mode 100644 src/REL/m450Dll/main.c create mode 100644 src/REL/m461Dll/main.c diff --git a/configure.py b/configure.py index 60ec67c4..5f6490b3 100644 --- a/configure.py +++ b/configure.py @@ -1296,7 +1296,6 @@ config.libs = [ Rel( "m461Dll", # Bob-omb X-ing objects={ - Object(Matching, "REL/executor.c"), Object(NonMatching, "REL/m461Dll/main.c"), }, ), diff --git a/src/REL/m432Dll/main.c b/src/REL/m432Dll/main.c new file mode 100644 index 00000000..117d8d64 --- /dev/null +++ b/src/REL/m432Dll/main.c @@ -0,0 +1,480 @@ +#include "REL/executor.h" +#include "game/chrman.h" +#include "game/frand.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" + +#include "game/gamework_data.h" + +#include "game/mapspace.h" +#include "game/pad.h" +#include "game/printfunc.h" + +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/esprite.h" +#include "game/sprite.h" + +#include "ext_math.h" +#include "rel_sqrt_consts.h" + +#undef ABS +#define ABS(x) ((0 > (x)) ? -(x) : (x)) + +typedef struct unk_bss_5D0_struct { + /* 0x00 */ u16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ struct unk_bss_5D0_struct *unk04; + /* 0x08 */ struct unk_bss_5D0_struct *unk08; +} UnkBss5D0Struct; // Size 0xC + +typedef struct unk_bss_5B8_struct { + /* 0x00 */ HsfanimStruct00 *unk00; + /* 0x04 */ s32 *unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ struct unk_bss_5B8_struct *unk10; + /* 0x14 */ struct unk_bss_5B8_struct *unk14; +} UnkBss5B8Struct; // Size 0x18 + +typedef struct { + /* 0x00 */ u32 unk00; + /* 0x04 */ s16 unk04; +} UnkBss428Struct; // Size 8 + +UnkBss5D0Struct lbl_1_bss_5D0; +UnkBss5B8Struct lbl_1_bss_5B8; +Process *lbl_1_bss_5B4; +Vec lbl_1_bss_5A8; +Vec lbl_1_bss_59C; +Vec lbl_1_bss_590; +Vec lbl_1_bss_584; +u32 lbl_1_bss_580; +s32 lbl_1_bss_57C; +u32 lbl_1_bss_578; +s16 lbl_1_bss_576; +s16 lbl_1_bss_574; +s32 lbl_1_bss_570; +s32 lbl_1_bss_56C; +float lbl_1_bss_568; +s32 lbl_1_bss_528[16]; +UnkBss428Struct lbl_1_bss_428[32]; + +void fn_1_0(void) +{ + lbl_1_bss_5D0.unk04 = NULL; + lbl_1_bss_5D0.unk08 = NULL; +} + +void fn_1_24(u16 arg0, s16 arg1) +{ + UnkBss5D0Struct *temp_r31; + UnkBss5D0Struct *temp_r30; + UnkBss5D0Struct *temp_r29; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r31), MEMORY_DEFAULT_NUM); + temp_r31->unk00 = arg0; + temp_r31->unk02 = arg1; + temp_r30 = &lbl_1_bss_5D0; + temp_r29 = temp_r30->unk08; + temp_r30->unk08 = temp_r31; + if (NULL != temp_r29) { + temp_r29->unk04 = temp_r31; + } + temp_r31->unk04 = temp_r30; + temp_r31->unk08 = temp_r29; +} + +s16 fn_1_AC(s16 arg0) +{ + UnkBss5D0Struct *var_r31; + UnkBss5D0Struct *temp_r29; + UnkBss5D0Struct *temp_r30; + s16 temp_r28; + + var_r31 = lbl_1_bss_5D0.unk08; + while (NULL != var_r31) { + if (arg0 == var_r31->unk00) { + temp_r28 = var_r31->unk02; + temp_r29 = var_r31->unk04; + temp_r30 = var_r31->unk08; + temp_r29->unk08 = temp_r30; + if (NULL != temp_r30) { + temp_r30->unk04 = temp_r29; + } + HuMemDirectFree(var_r31); + return temp_r28; + } + var_r31 = var_r31->unk08; + } + return -1; +} + +void fn_1_150(void) +{ + lbl_1_bss_5B8.unk10 = NULL; + lbl_1_bss_5B8.unk14 = NULL; +} + +void fn_1_174(s16 arg0, HsfanimStruct00 *arg1, s32 arg2, s32 arg3, s32 arg4, Vec *arg5, u8 arg6) +{ + UnkBss5B8Struct *temp_r27; + UnkBss5B8Struct *var_r31; + UnkBss5B8Struct *temp_r28; + s32 i; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*var_r31), MEMORY_DEFAULT_NUM); + var_r31->unk00 = arg1; + var_r31->unk08 = arg3; + var_r31->unk0C = arg4; + var_r31->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, arg4 * sizeof(*var_r31->unk04), MEMORY_DEFAULT_NUM); + for (i = 0; i < arg4; i++, arg5++) { + var_r31->unk04[i] = Hu3DParManLink(arg0, arg1); + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrReset(var_r31->unk04[i], 1); + Hu3DParManPosSet(var_r31->unk04[i], arg5->x, arg5->y, arg5->z); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg6); + Hu3DModelLayerSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg2); + } + } + temp_r28 = &lbl_1_bss_5B8; + temp_r27 = temp_r28->unk14; + temp_r28->unk14 = var_r31; + if (NULL != temp_r27) { + temp_r27->unk10 = var_r31; + } + var_r31->unk10 = temp_r28; + var_r31->unk14 = temp_r27; +} + +void fn_1_2D8(void) +{ + UnkBss5B8Struct *var_r31; + UnkBss5B8Struct *temp_r28; + UnkBss5B8Struct *temp_r29; + s32 i; + + var_r31 = lbl_1_bss_5B8.unk14; + while (NULL != var_r31) { + var_r31->unk08--; + if (var_r31->unk08 == 0) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrSet(var_r31->unk04[i], 1); + } + } + } + temp_r28 = var_r31->unk10; + temp_r29 = var_r31->unk14; + if (-var_r31->unk00->unk00 > var_r31->unk08) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManKill(var_r31->unk04[i]); + } + } + temp_r28->unk14 = temp_r29; + if (NULL != temp_r29) { + temp_r29->unk10 = temp_r28; + } + HuMemDirectFree(var_r31->unk04); + HuMemDirectFree(var_r31); + } + var_r31 = temp_r29; + } +} + +void fn_1_414(void) +{ + s32 i; + + for (i = 0; i < 32; i++) { + lbl_1_bss_428[i].unk00 = 0; + lbl_1_bss_428[i].unk04 = -1; + } +} + +s16 fn_1_46C(s32 arg0) +{ + s32 i; + + for (i = 0; i < 32; i++) { + if (arg0 == lbl_1_bss_428[i].unk00) { + return Hu3DModelLink(lbl_1_bss_428[i].unk04); + } + } + for (i = 0; i < 32; i++) { + if (lbl_1_bss_428[i].unk00 == 0) { + lbl_1_bss_428[i].unk00 = arg0; + lbl_1_bss_428[i].unk04 = Hu3DModelCreateFile(arg0); + return lbl_1_bss_428[i].unk04; + } + } + return Hu3DModelCreateFile(arg0); +} + +void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) +{ + s32 var_r30; + + espBankSet(arg0[arg1 + 1], 10); + espBankSet(arg0[arg1 + 4], 11); + if (36000 <= arg2) { + arg2 = 35999; + } + var_r30 = arg2 / 3600; + arg2 -= var_r30 * 3600; + if (var_r30 > 9) { + var_r30 = 9; + } + espBankSet(arg0[arg1], var_r30); + var_r30 = arg2 / 60; + arg2 -= var_r30 * 60; + espBankSet(arg0[arg1 + 2], var_r30 / 10); + espBankSet(arg0[arg1 + 3], var_r30 % 10); + var_r30 = 101.5f * arg2 / 60.0f; + espBankSet(arg0[arg1 + 5], var_r30 / 10); + espBankSet(arg0[arg1 + 6], var_r30 % 10); +} + +void fn_1_798(s32 arg0) +{ + lbl_1_bss_568 = 0.0f; + lbl_1_bss_578 = lbl_1_bss_57C; + GWMGRecordSet(arg0, lbl_1_bss_578); + fn_1_580(lbl_1_bss_528, 7, lbl_1_bss_57C); +} + +void fn_1_9EC(void) +{ + s32 i; + + for (i = 0; i < 16; i++) { + espDispOn(lbl_1_bss_528[i]); + } +} + +void fn_1_A40(void) +{ + float temp_f31; + s32 i; + + if (0.0f <= lbl_1_bss_568) { + lbl_1_bss_568 += 16.0f; + temp_f31 = 1.0 + 0.2f * sind(lbl_1_bss_568); + for (i = 7; i <= 14; i++) { + espScaleSet(lbl_1_bss_528[i], temp_f31, temp_f31); + } + } +} + +void fn_1_B4C(float arg0, s32 arg1) +{ + float temp_f30; + float temp_f31; + s32 i; + + temp_f31 = 288.0f; + temp_f30 = arg0; + lbl_1_bss_528[15] = espEntry(arg1, 0, 0); + espTPLvlSet(lbl_1_bss_528[15], 0.5f); + espColorSet(lbl_1_bss_528[15], 0, 0, 0); + espPosSet(lbl_1_bss_528[15], temp_f31, temp_f30); + temp_f31 = 248.0f; + temp_f30 = arg0 - 8.0f; + lbl_1_bss_528[14] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 55), 0, 0); + espPosSet(lbl_1_bss_528[14], temp_f31 - 18.0f, temp_f30); + for (i = 7; i <= 13; i++) { + lbl_1_bss_528[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 48), 0, 0); + espPosSet(lbl_1_bss_528[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_528, 7, lbl_1_bss_578); + temp_f31 = 248.0f; + temp_f30 = arg0 + 8.0f; + for (i = 0; i <= 6; i++) { + lbl_1_bss_528[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 49), 0, 0); + espPosSet(lbl_1_bss_528[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_528, 0, 0); + for (i = 0; i < 16; i++) { + espDrawNoSet(lbl_1_bss_528[i], 0); + espDispOff(lbl_1_bss_528[i]); + espAttrSet(lbl_1_bss_528[i], HUSPR_ATTR_NOANIM); + espPriSet(lbl_1_bss_528[i], 0x80 + i); + } +} + +void fn_1_11F4(float arg0, Vec *arg1, Vec *arg2, Vec *arg3) +{ + float temp_f31; + + if (1.0f < arg0) { + arg0 = 1.0f; + } + temp_f31 = sind(90.0f * arg0) * sind(90.0f * arg0); + arg3->x = arg1->x + temp_f31 * (arg2->x - arg1->x); + arg3->y = arg1->y + temp_f31 * (arg2->y - arg1->y); + arg3->z = arg1->z + temp_f31 * (arg2->z - arg1->z); +} + +void fn_1_1350(Vec *arg0, Vec *arg1, Vec *arg2) +{ + Hu3DCameraPosSetV(1, arg0, arg1, arg2); + lbl_1_bss_5A8 = *arg0; + lbl_1_bss_590 = *arg2; +} + +s32 fn_1_13DC(float arg0, Vec *arg1) +{ + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_5A8, &lbl_1_bss_59C, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_590, &lbl_1_bss_584, &spC); + Hu3DCameraPosSetV(1, &sp18, arg1, &spC); + if (1.0f <= arg0) { + return 1; + } + else { + lbl_1_bss_56C = 1; + return 0; + } +} + +void fn_1_1710(float arg0, Vec *arg1) +{ + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_5A8, &lbl_1_bss_59C, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_590, &lbl_1_bss_584, &spC); + fn_1_1350(&sp18, arg1, &spC); + lbl_1_bss_56C = 1; +} + +void fn_1_1A60(Vec *arg0, s16 arg1, Vec *arg2) +{ + Mtx sp1C; + Vec sp10; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f31; + CameraData *temp_r31; + s32 i; + + for (i = 0; i < 16; i++) { + if (arg1 & (1 << i)) { + break; + } + } + temp_r31 = &Hu3DCamera[i]; + MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target); + MTXMultVec(sp1C, arg0, &sp10); + temp_f30 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * temp_r31->aspect; + temp_f29 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)); + temp_f28 = 0.9f * temp_r31->viewport_x; + temp_f31 = 0.9f * temp_r31->viewport_w; + arg2->x = temp_f31 / 2 + sp10.x * ((temp_f31 / 2) / -temp_f30) + temp_f28; + arg2->y = temp_r31->viewport_h / 2 + sp10.y * ((temp_r31->viewport_h / 2) / temp_f29) + temp_r31->viewport_y; + arg2->z = 0.0f; +} + +void fn_1_1D18(s16 arg0, char *arg1, Vec *arg2) +{ + Mtx sp10; + + Hu3DModelObjMtxGet(arg0, arg1, sp10); + arg2->x = sp10[0][3]; + arg2->y = sp10[1][3]; + arg2->z = sp10[2][3]; +} + +void fn_1_1D70(s16 arg0, char *arg1, Vec *arg2, Mtx arg3) +{ + Mtx spC; + ModelData *var_r30; + + var_r30 = &Hu3DData[arg0]; + Hu3DModelObjMtxGet(arg0, arg1, spC); + PSMTXConcat(var_r30->unk_F0, spC, spC); + if (NULL != arg3) { + PSMTXCopy(spC, arg3); + } + arg2->x = spC[0][3]; + arg2->y = spC[1][3]; + arg2->z = spC[2][3]; +} + +float fn_1_1E20(float arg0, float arg1, float arg2) +{ + float var_f31; + float var_f30; + + var_f31 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} + +void fn_1_1F24(s32 arg0) +{ + lbl_1_bss_570 = HuAudSeqPlay((s32)arg0); +} + +void fn_1_1F58(s32 arg0) +{ + if (lbl_1_bss_570 >= 0) { + if (arg0 < 0) { + arg0 = 1000; + } + HuAudSeqFadeOut(lbl_1_bss_570, arg0); + } + lbl_1_bss_570 = -1; +} + +void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3) +{ + Vec sp18; + float var_f28; + s32 var_r30; + + sp18.x = 0.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + sp18.x = arg2 / 4.0f; + sp18.z = -(float)arg3 / 4.0f; + var_r30 = 0; + var_f28 = VECMagXZ(&sp18); + if (0.5f <= var_f28) { + if (10.0f <= var_f28) { + sp18.x /= var_f28; + sp18.z /= var_f28; + var_f28 = 10.0f; + sp18.x = 10.0f * sp18.x; + sp18.z = 10.0f * sp18.z; + } + *arg1 = fn_1_1E20(*arg1, atan2d(sp18.x, sp18.z), 0.4f); + if (8.0f <= var_f28) { + var_r30 = 2; + } + else { + var_r30 = 1; + } + } + VECAdd((Vec *)&arg0, &sp18, (Vec *)&arg0); +} \ No newline at end of file diff --git a/src/REL/m450Dll/main.c b/src/REL/m450Dll/main.c new file mode 100644 index 00000000..c60c4a31 --- /dev/null +++ b/src/REL/m450Dll/main.c @@ -0,0 +1,480 @@ +#include "REL/executor.h" +#include "game/chrman.h" +#include "game/frand.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" + +#include "game/gamework_data.h" + +#include "game/mapspace.h" +#include "game/pad.h" +#include "game/printfunc.h" + +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/esprite.h" +#include "game/sprite.h" + +#include "ext_math.h" +#include "rel_sqrt_consts.h" + +#undef ABS +#define ABS(x) ((0 > (x)) ? -(x) : (x)) + +typedef struct unk_bss_358_struct { + /* 0x00 */ u16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ struct unk_bss_358_struct *unk04; + /* 0x08 */ struct unk_bss_358_struct *unk08; +} UnkBss358Struct; // Size 0xC + +typedef struct unk_bss_340_struct { + /* 0x00 */ HsfanimStruct00 *unk00; + /* 0x04 */ s32 *unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ struct unk_bss_340_struct *unk10; + /* 0x14 */ struct unk_bss_340_struct *unk14; +} UnkBss340Struct; // Size 0x18 + +typedef struct { + /* 0x00 */ u32 unk00; + /* 0x04 */ s16 unk04; +} UnkBss1B0Struct; // Size 8 + +UnkBss358Struct lbl_1_bss_358; +UnkBss340Struct lbl_1_bss_340; +Process *lbl_1_bss_33C; +Vec lbl_1_bss_330; +Vec lbl_1_bss_324; +Vec lbl_1_bss_318; +Vec lbl_1_bss_30C; +u32 lbl_1_bss_308; +s32 lbl_1_bss_304; +u32 lbl_1_bss_300; +s16 lbl_1_bss_2FE; +s16 lbl_1_bss_2FC; +s32 lbl_1_bss_2F8; +s32 lbl_1_bss_2F4; +float lbl_1_bss_2F0; +s32 lbl_1_bss_2B0[16]; +UnkBss1B0Struct lbl_1_bss_1B0[32]; + +void fn_1_0(void) +{ + lbl_1_bss_358.unk04 = NULL; + lbl_1_bss_358.unk08 = NULL; +} + +void fn_1_24(u16 arg0, s16 arg1) +{ + UnkBss358Struct *temp_r31; + UnkBss358Struct *temp_r30; + UnkBss358Struct *temp_r29; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r31), MEMORY_DEFAULT_NUM); + temp_r31->unk00 = arg0; + temp_r31->unk02 = arg1; + temp_r30 = &lbl_1_bss_358; + temp_r29 = temp_r30->unk08; + temp_r30->unk08 = temp_r31; + if (NULL != temp_r29) { + temp_r29->unk04 = temp_r31; + } + temp_r31->unk04 = temp_r30; + temp_r31->unk08 = temp_r29; +} + +s16 fn_1_AC(s16 arg0) +{ + UnkBss358Struct *var_r31; + UnkBss358Struct *temp_r29; + UnkBss358Struct *temp_r30; + s16 temp_r28; + + var_r31 = lbl_1_bss_358.unk08; + while (NULL != var_r31) { + if (arg0 == var_r31->unk00) { + temp_r28 = var_r31->unk02; + temp_r29 = var_r31->unk04; + temp_r30 = var_r31->unk08; + temp_r29->unk08 = temp_r30; + if (NULL != temp_r30) { + temp_r30->unk04 = temp_r29; + } + HuMemDirectFree(var_r31); + return temp_r28; + } + var_r31 = var_r31->unk08; + } + return -1; +} + +void fn_1_150(void) +{ + lbl_1_bss_340.unk10 = NULL; + lbl_1_bss_340.unk14 = NULL; +} + +void fn_1_174(s16 arg0, HsfanimStruct00 *arg1, s32 arg2, s32 arg3, s32 arg4, Vec *arg5, u8 arg6) +{ + UnkBss340Struct *temp_r27; + UnkBss340Struct *var_r31; + UnkBss340Struct *temp_r28; + s32 i; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*var_r31), MEMORY_DEFAULT_NUM); + var_r31->unk00 = arg1; + var_r31->unk08 = arg3; + var_r31->unk0C = arg4; + var_r31->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, arg4 * sizeof(*var_r31->unk04), MEMORY_DEFAULT_NUM); + for (i = 0; i < arg4; i++, arg5++) { + var_r31->unk04[i] = Hu3DParManLink(arg0, arg1); + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrReset(var_r31->unk04[i], 1); + Hu3DParManPosSet(var_r31->unk04[i], arg5->x, arg5->y, arg5->z); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg6); + Hu3DModelLayerSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg2); + } + } + temp_r28 = &lbl_1_bss_340; + temp_r27 = temp_r28->unk14; + temp_r28->unk14 = var_r31; + if (NULL != temp_r27) { + temp_r27->unk10 = var_r31; + } + var_r31->unk10 = temp_r28; + var_r31->unk14 = temp_r27; +} + +void fn_1_2D8(void) +{ + UnkBss340Struct *var_r31; + UnkBss340Struct *temp_r28; + UnkBss340Struct *temp_r29; + s32 i; + + var_r31 = lbl_1_bss_340.unk14; + while (NULL != var_r31) { + var_r31->unk08--; + if (var_r31->unk08 == 0) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrSet(var_r31->unk04[i], 1); + } + } + } + temp_r28 = var_r31->unk10; + temp_r29 = var_r31->unk14; + if (-var_r31->unk00->unk00 > var_r31->unk08) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManKill(var_r31->unk04[i]); + } + } + temp_r28->unk14 = temp_r29; + if (NULL != temp_r29) { + temp_r29->unk10 = temp_r28; + } + HuMemDirectFree(var_r31->unk04); + HuMemDirectFree(var_r31); + } + var_r31 = temp_r29; + } +} + +void fn_1_414(void) +{ + s32 i; + + for (i = 0; i < 32; i++) { + lbl_1_bss_1B0[i].unk00 = 0; + lbl_1_bss_1B0[i].unk04 = -1; + } +} + +s16 fn_1_46C(s32 arg0) +{ + s32 i; + + for (i = 0; i < 32; i++) { + if (arg0 == lbl_1_bss_1B0[i].unk00) { + return Hu3DModelLink(lbl_1_bss_1B0[i].unk04); + } + } + for (i = 0; i < 32; i++) { + if (lbl_1_bss_1B0[i].unk00 == 0) { + lbl_1_bss_1B0[i].unk00 = arg0; + lbl_1_bss_1B0[i].unk04 = Hu3DModelCreateFile(arg0); + return lbl_1_bss_1B0[i].unk04; + } + } + return Hu3DModelCreateFile(arg0); +} + +void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) +{ + s32 var_r30; + + espBankSet(arg0[arg1 + 1], 10); + espBankSet(arg0[arg1 + 4], 11); + if (36000 <= arg2) { + arg2 = 35999; + } + var_r30 = arg2 / 3600; + arg2 -= var_r30 * 3600; + if (var_r30 > 9) { + var_r30 = 9; + } + espBankSet(arg0[arg1], var_r30); + var_r30 = arg2 / 60; + arg2 -= var_r30 * 60; + espBankSet(arg0[arg1 + 2], var_r30 / 10); + espBankSet(arg0[arg1 + 3], var_r30 % 10); + var_r30 = 101.5f * arg2 / 60.0f; + espBankSet(arg0[arg1 + 5], var_r30 / 10); + espBankSet(arg0[arg1 + 6], var_r30 % 10); +} + +void fn_1_798(s32 arg0) +{ + lbl_1_bss_2F0 = 0.0f; + lbl_1_bss_300 = lbl_1_bss_304; + GWMGRecordSet(arg0, lbl_1_bss_300); + fn_1_580(lbl_1_bss_2B0, 7, lbl_1_bss_304); +} + +void fn_1_9EC(void) +{ + s32 i; + + for (i = 0; i < 16; i++) { + espDispOn(lbl_1_bss_2B0[i]); + } +} + +void fn_1_A40(void) +{ + float temp_f31; + s32 i; + + if (0.0f <= lbl_1_bss_2F0) { + lbl_1_bss_2F0 += 16.0f; + temp_f31 = 1.0 + 0.2f * sind(lbl_1_bss_2F0); + for (i = 7; i <= 14; i++) { + espScaleSet(lbl_1_bss_2B0[i], temp_f31, temp_f31); + } + } +} + +void fn_1_B4C(float arg0, s32 arg1) +{ + float temp_f30; + float temp_f31; + s32 i; + + temp_f31 = 288.0f; + temp_f30 = arg0; + lbl_1_bss_2B0[15] = espEntry(arg1, 0, 0); + espTPLvlSet(lbl_1_bss_2B0[15], 0.5f); + espColorSet(lbl_1_bss_2B0[15], 0, 0, 0); + espPosSet(lbl_1_bss_2B0[15], temp_f31, temp_f30); + temp_f31 = 248.0f; + temp_f30 = arg0 - 8.0f; + lbl_1_bss_2B0[14] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 55), 0, 0); + espPosSet(lbl_1_bss_2B0[14], temp_f31 - 18.0f, temp_f30); + for (i = 7; i <= 13; i++) { + lbl_1_bss_2B0[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 48), 0, 0); + espPosSet(lbl_1_bss_2B0[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_2B0, 7, lbl_1_bss_300); + temp_f31 = 248.0f; + temp_f30 = arg0 + 8.0f; + for (i = 0; i <= 6; i++) { + lbl_1_bss_2B0[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 49), 0, 0); + espPosSet(lbl_1_bss_2B0[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_2B0, 0, 0); + for (i = 0; i < 16; i++) { + espDrawNoSet(lbl_1_bss_2B0[i], 0); + espDispOff(lbl_1_bss_2B0[i]); + espAttrSet(lbl_1_bss_2B0[i], HUSPR_ATTR_NOANIM); + espPriSet(lbl_1_bss_2B0[i], 0x80 + i); + } +} + +void fn_1_11F4(float arg0, Vec *arg1, Vec *arg2, Vec *arg3) +{ + float temp_f31; + + if (1.0f < arg0) { + arg0 = 1.0f; + } + temp_f31 = sind(90.0f * arg0) * sind(90.0f * arg0); + arg3->x = arg1->x + temp_f31 * (arg2->x - arg1->x); + arg3->y = arg1->y + temp_f31 * (arg2->y - arg1->y); + arg3->z = arg1->z + temp_f31 * (arg2->z - arg1->z); +} + +void fn_1_1350(Vec *arg0, Vec *arg1, Vec *arg2) +{ + Hu3DCameraPosSetV(1, arg0, arg1, arg2); + lbl_1_bss_330 = *arg0; + lbl_1_bss_318 = *arg2; +} + +s32 fn_1_13DC(float arg0, Vec *arg1) +{ + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_330, &lbl_1_bss_324, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_318, &lbl_1_bss_30C, &spC); + Hu3DCameraPosSetV(1, &sp18, arg1, &spC); + if (1.0f <= arg0) { + return 1; + } + else { + lbl_1_bss_2F4 = 1; + return 0; + } +} + +void fn_1_1710(float arg0, Vec *arg1) +{ + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_330, &lbl_1_bss_324, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_318, &lbl_1_bss_30C, &spC); + fn_1_1350(&sp18, arg1, &spC); + lbl_1_bss_2F4 = 1; +} + +void fn_1_1A60(Vec *arg0, s16 arg1, Vec *arg2) +{ + Mtx sp1C; + Vec sp10; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f31; + CameraData *temp_r31; + s32 i; + + for (i = 0; i < 16; i++) { + if (arg1 & (1 << i)) { + break; + } + } + temp_r31 = &Hu3DCamera[i]; + MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target); + MTXMultVec(sp1C, arg0, &sp10); + temp_f30 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * temp_r31->aspect; + temp_f29 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)); + temp_f28 = 0.9f * temp_r31->viewport_x; + temp_f31 = 0.9f * temp_r31->viewport_w; + arg2->x = temp_f31 / 2 + sp10.x * ((temp_f31 / 2) / -temp_f30) + temp_f28; + arg2->y = temp_r31->viewport_h / 2 + sp10.y * ((temp_r31->viewport_h / 2) / temp_f29) + temp_r31->viewport_y; + arg2->z = 0.0f; +} + +void fn_1_1D18(s16 arg0, char *arg1, Vec *arg2) +{ + Mtx sp10; + + Hu3DModelObjMtxGet(arg0, arg1, sp10); + arg2->x = sp10[0][3]; + arg2->y = sp10[1][3]; + arg2->z = sp10[2][3]; +} + +void fn_1_1D70(s16 arg0, char *arg1, Vec *arg2, Mtx arg3) +{ + Mtx spC; + ModelData *var_r30; + + var_r30 = &Hu3DData[arg0]; + Hu3DModelObjMtxGet(arg0, arg1, spC); + PSMTXConcat(var_r30->unk_F0, spC, spC); + if (NULL != arg3) { + PSMTXCopy(spC, arg3); + } + arg2->x = spC[0][3]; + arg2->y = spC[1][3]; + arg2->z = spC[2][3]; +} + +float fn_1_1E20(float arg0, float arg1, float arg2) +{ + float var_f31; + float var_f30; + + var_f31 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} + +void fn_1_1F24(s32 arg0) +{ + lbl_1_bss_2F8 = HuAudSeqPlay((s32)arg0); +} + +void fn_1_1F58(s32 arg0) +{ + if (lbl_1_bss_2F8 >= 0) { + if (arg0 < 0) { + arg0 = 1000; + } + HuAudSeqFadeOut(lbl_1_bss_2F8, arg0); + } + lbl_1_bss_2F8 = -1; +} + +void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3) +{ + Vec sp18; + float var_f28; + s32 var_r30; + + sp18.x = 0.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + sp18.x = arg2 / 4.0f; + sp18.z = -(float)arg3 / 4.0f; + var_r30 = 0; + var_f28 = VECMagXZ(&sp18); + if (0.5f <= var_f28) { + if (10.0f <= var_f28) { + sp18.x /= var_f28; + sp18.z /= var_f28; + var_f28 = 10.0f; + sp18.x = 10.0f * sp18.x; + sp18.z = 10.0f * sp18.z; + } + *arg1 = fn_1_1E20(*arg1, atan2d(sp18.x, sp18.z), 0.4f); + if (8.0f <= var_f28) { + var_r30 = 2; + } + else { + var_r30 = 1; + } + } + VECAdd((Vec *)&arg0, &sp18, (Vec *)&arg0); +} diff --git a/src/REL/m461Dll/main.c b/src/REL/m461Dll/main.c new file mode 100644 index 00000000..4fe7f0b7 --- /dev/null +++ b/src/REL/m461Dll/main.c @@ -0,0 +1,480 @@ +#include "REL/executor.h" +#include "game/chrman.h" +#include "game/frand.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/wipe.h" + +#include "game/gamework_data.h" + +#include "game/mapspace.h" +#include "game/pad.h" +#include "game/printfunc.h" + +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/esprite.h" +#include "game/sprite.h" + +#include "ext_math.h" +#include "rel_sqrt_consts.h" + +#undef ABS +#define ABS(x) ((0 > (x)) ? -(x) : (x)) + +typedef struct unk_bss_358_struct { + /* 0x00 */ u16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ struct unk_bss_358_struct *unk04; + /* 0x08 */ struct unk_bss_358_struct *unk08; +} UnkBss254Struct; // Size 0xC + +typedef struct unk_bss_340_struct { + /* 0x00 */ HsfanimStruct00 *unk00; + /* 0x04 */ s32 *unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ struct unk_bss_340_struct *unk10; + /* 0x14 */ struct unk_bss_340_struct *unk14; +} UnkBss23CStruct; // Size 0x18 + +typedef struct { + /* 0x00 */ u32 unk00; + /* 0x04 */ s16 unk04; +} UnkBssACStruct; // Size 8 + +UnkBss254Struct lbl_1_bss_254; +UnkBss23CStruct lbl_1_bss_23C; +Process *lbl_1_bss_238; +Vec lbl_1_bss_22C; +Vec lbl_1_bss_220; +Vec lbl_1_bss_214; +Vec lbl_1_bss_208; +u32 lbl_1_bss_204; +s32 lbl_1_bss_200; +u32 lbl_1_bss_1FC; +s16 lbl_1_bss_1FA; +s16 lbl_1_bss_1F8; +s32 lbl_1_bss_1F4; +s32 lbl_1_bss_1F0; +float lbl_1_bss_1EC; +s32 lbl_1_bss_1AC[16]; +UnkBssACStruct lbl_1_bss_AC[32]; + +void fn_1_0(void) +{ + lbl_1_bss_254.unk04 = NULL; + lbl_1_bss_254.unk08 = NULL; +} + +void fn_1_24(u16 arg0, s16 arg1) +{ + UnkBss254Struct *temp_r31; + UnkBss254Struct *temp_r30; + UnkBss254Struct *temp_r29; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r31), MEMORY_DEFAULT_NUM); + temp_r31->unk00 = arg0; + temp_r31->unk02 = arg1; + temp_r30 = &lbl_1_bss_254; + temp_r29 = temp_r30->unk08; + temp_r30->unk08 = temp_r31; + if (NULL != temp_r29) { + temp_r29->unk04 = temp_r31; + } + temp_r31->unk04 = temp_r30; + temp_r31->unk08 = temp_r29; +} + +s16 fn_1_AC(s16 arg0) +{ + UnkBss254Struct *var_r31; + UnkBss254Struct *temp_r29; + UnkBss254Struct *temp_r30; + s16 temp_r28; + + var_r31 = lbl_1_bss_254.unk08; + while (NULL != var_r31) { + if (arg0 == var_r31->unk00) { + temp_r28 = var_r31->unk02; + temp_r29 = var_r31->unk04; + temp_r30 = var_r31->unk08; + temp_r29->unk08 = temp_r30; + if (NULL != temp_r30) { + temp_r30->unk04 = temp_r29; + } + HuMemDirectFree(var_r31); + return temp_r28; + } + var_r31 = var_r31->unk08; + } + return -1; +} + +void fn_1_150(void) +{ + lbl_1_bss_23C.unk10 = NULL; + lbl_1_bss_23C.unk14 = NULL; +} + +void fn_1_174(s16 arg0, HsfanimStruct00 *arg1, s32 arg2, s32 arg3, s32 arg4, Vec *arg5, u8 arg6) +{ + UnkBss23CStruct *temp_r27; + UnkBss23CStruct *var_r31; + UnkBss23CStruct *temp_r28; + s32 i; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*var_r31), MEMORY_DEFAULT_NUM); + var_r31->unk00 = arg1; + var_r31->unk08 = arg3; + var_r31->unk0C = arg4; + var_r31->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, arg4 * sizeof(*var_r31->unk04), MEMORY_DEFAULT_NUM); + for (i = 0; i < arg4; i++, arg5++) { + var_r31->unk04[i] = Hu3DParManLink(arg0, arg1); + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrReset(var_r31->unk04[i], 1); + Hu3DParManPosSet(var_r31->unk04[i], arg5->x, arg5->y, arg5->z); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg6); + Hu3DModelLayerSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg2); + } + } + temp_r28 = &lbl_1_bss_23C; + temp_r27 = temp_r28->unk14; + temp_r28->unk14 = var_r31; + if (NULL != temp_r27) { + temp_r27->unk10 = var_r31; + } + var_r31->unk10 = temp_r28; + var_r31->unk14 = temp_r27; +} + +void fn_1_2D8(void) +{ + UnkBss23CStruct *var_r31; + UnkBss23CStruct *temp_r28; + UnkBss23CStruct *temp_r29; + s32 i; + + var_r31 = lbl_1_bss_23C.unk14; + while (NULL != var_r31) { + var_r31->unk08--; + if (var_r31->unk08 == 0) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManAttrSet(var_r31->unk04[i], 1); + } + } + } + temp_r28 = var_r31->unk10; + temp_r29 = var_r31->unk14; + if (-var_r31->unk00->unk00 > var_r31->unk08) { + for (i = 0; i < var_r31->unk0C; i++) { + if (var_r31->unk04[i] >= 0) { + Hu3DParManKill(var_r31->unk04[i]); + } + } + temp_r28->unk14 = temp_r29; + if (NULL != temp_r29) { + temp_r29->unk10 = temp_r28; + } + HuMemDirectFree(var_r31->unk04); + HuMemDirectFree(var_r31); + } + var_r31 = temp_r29; + } +} + +void fn_1_414(void) +{ + s32 i; + + for (i = 0; i < 32; i++) { + lbl_1_bss_AC[i].unk00 = 0; + lbl_1_bss_AC[i].unk04 = -1; + } +} + +s16 fn_1_46C(s32 arg0) +{ + s32 i; + + for (i = 0; i < 32; i++) { + if (arg0 == lbl_1_bss_AC[i].unk00) { + return Hu3DModelLink(lbl_1_bss_AC[i].unk04); + } + } + for (i = 0; i < 32; i++) { + if (lbl_1_bss_AC[i].unk00 == 0) { + lbl_1_bss_AC[i].unk00 = arg0; + lbl_1_bss_AC[i].unk04 = Hu3DModelCreateFile(arg0); + return lbl_1_bss_AC[i].unk04; + } + } + return Hu3DModelCreateFile(arg0); +} + +void fn_1_580(s32 *arg0, s32 arg1, s32 arg2) +{ + s32 var_r30; + + espBankSet(arg0[arg1 + 1], 10); + espBankSet(arg0[arg1 + 4], 11); + if (36000 <= arg2) { + arg2 = 35999; + } + var_r30 = arg2 / 3600; + arg2 -= var_r30 * 3600; + if (var_r30 > 9) { + var_r30 = 9; + } + espBankSet(arg0[arg1], var_r30); + var_r30 = arg2 / 60; + arg2 -= var_r30 * 60; + espBankSet(arg0[arg1 + 2], var_r30 / 10); + espBankSet(arg0[arg1 + 3], var_r30 % 10); + var_r30 = 101.5f * arg2 / 60.0f; + espBankSet(arg0[arg1 + 5], var_r30 / 10); + espBankSet(arg0[arg1 + 6], var_r30 % 10); +} + +void fn_1_798(s32 arg0) +{ + lbl_1_bss_1EC = 0.0f; + lbl_1_bss_1FC = lbl_1_bss_200; + GWMGRecordSet(arg0, lbl_1_bss_1FC); + fn_1_580(lbl_1_bss_1AC, 7, lbl_1_bss_200); +} + +void fn_1_9EC(void) +{ + s32 i; + + for (i = 0; i < 16; i++) { + espDispOn(lbl_1_bss_1AC[i]); + } +} + +void fn_1_A40(void) +{ + float temp_f31; + s32 i; + + if (0.0f <= lbl_1_bss_1EC) { + lbl_1_bss_1EC += 16.0f; + temp_f31 = 1.0 + 0.2f * sind(lbl_1_bss_1EC); + for (i = 7; i <= 14; i++) { + espScaleSet(lbl_1_bss_1AC[i], temp_f31, temp_f31); + } + } +} + +void fn_1_B4C(float arg0, s32 arg1) +{ + float temp_f30; + float temp_f31; + s32 i; + + temp_f31 = 288.0f; + temp_f30 = arg0; + lbl_1_bss_1AC[15] = espEntry(arg1, 0, 0); + espTPLvlSet(lbl_1_bss_1AC[15], 0.5f); + espColorSet(lbl_1_bss_1AC[15], 0, 0, 0); + espPosSet(lbl_1_bss_1AC[15], temp_f31, temp_f30); + temp_f31 = 248.0f; + temp_f30 = arg0 - 8.0f; + lbl_1_bss_1AC[14] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 55), 0, 0); + espPosSet(lbl_1_bss_1AC[14], temp_f31 - 18.0f, temp_f30); + for (i = 7; i <= 13; i++) { + lbl_1_bss_1AC[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 48), 0, 0); + espPosSet(lbl_1_bss_1AC[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_1AC, 7, lbl_1_bss_1FC); + temp_f31 = 248.0f; + temp_f30 = arg0 + 8.0f; + for (i = 0; i <= 6; i++) { + lbl_1_bss_1AC[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 49), 0, 0); + espPosSet(lbl_1_bss_1AC[i], temp_f31, temp_f30); + temp_f31 += 16.0f; + } + fn_1_580(lbl_1_bss_1AC, 0, 0); + for (i = 0; i < 16; i++) { + espDrawNoSet(lbl_1_bss_1AC[i], 0); + espDispOff(lbl_1_bss_1AC[i]); + espAttrSet(lbl_1_bss_1AC[i], HUSPR_ATTR_NOANIM); + espPriSet(lbl_1_bss_1AC[i], 0x80 + i); + } +} + +void fn_1_11F4(float arg0, Vec *arg1, Vec *arg2, Vec *arg3) +{ + float temp_f31; + + if (1.0f < arg0) { + arg0 = 1.0f; + } + temp_f31 = sind(90.0f * arg0) * sind(90.0f * arg0); + arg3->x = arg1->x + temp_f31 * (arg2->x - arg1->x); + arg3->y = arg1->y + temp_f31 * (arg2->y - arg1->y); + arg3->z = arg1->z + temp_f31 * (arg2->z - arg1->z); +} + +void fn_1_1350(Vec *arg0, Vec *arg1, Vec *arg2) +{ + Hu3DCameraPosSetV(1, arg0, arg1, arg2); + lbl_1_bss_22C = *arg0; + lbl_1_bss_214 = *arg2; +} + +s32 fn_1_13DC(float arg0, Vec *arg1) +{ + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_22C, &lbl_1_bss_220, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_214, &lbl_1_bss_208, &spC); + Hu3DCameraPosSetV(1, &sp18, arg1, &spC); + if (1.0f <= arg0) { + return 1; + } + else { + lbl_1_bss_1F0 = 1; + return 0; + } +} + +void fn_1_1710(float arg0, Vec *arg1) +{ + Vec sp18; + Vec spC; + + fn_1_11F4(arg0, &lbl_1_bss_22C, &lbl_1_bss_220, &sp18); + fn_1_11F4(arg0, &lbl_1_bss_214, &lbl_1_bss_208, &spC); + fn_1_1350(&sp18, arg1, &spC); + lbl_1_bss_1F0 = 1; +} + +void fn_1_1A60(Vec *arg0, s16 arg1, Vec *arg2) +{ + Mtx sp1C; + Vec sp10; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f31; + CameraData *temp_r31; + s32 i; + + for (i = 0; i < 16; i++) { + if (arg1 & (1 << i)) { + break; + } + } + temp_r31 = &Hu3DCamera[i]; + MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target); + MTXMultVec(sp1C, arg0, &sp10); + temp_f30 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * temp_r31->aspect; + temp_f29 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)); + temp_f28 = 0.9f * temp_r31->viewport_x; + temp_f31 = 0.9f * temp_r31->viewport_w; + arg2->x = temp_f31 / 2 + sp10.x * ((temp_f31 / 2) / -temp_f30) + temp_f28; + arg2->y = temp_r31->viewport_h / 2 + sp10.y * ((temp_r31->viewport_h / 2) / temp_f29) + temp_r31->viewport_y; + arg2->z = 0.0f; +} + +void fn_1_1D18(s16 arg0, char *arg1, Vec *arg2) +{ + Mtx sp10; + + Hu3DModelObjMtxGet(arg0, arg1, sp10); + arg2->x = sp10[0][3]; + arg2->y = sp10[1][3]; + arg2->z = sp10[2][3]; +} + +void fn_1_1D70(s16 arg0, char *arg1, Vec *arg2, Mtx arg3) +{ + Mtx spC; + ModelData *var_r30; + + var_r30 = &Hu3DData[arg0]; + Hu3DModelObjMtxGet(arg0, arg1, spC); + PSMTXConcat(var_r30->unk_F0, spC, spC); + if (NULL != arg3) { + PSMTXCopy(spC, arg3); + } + arg2->x = spC[0][3]; + arg2->y = spC[1][3]; + arg2->z = spC[2][3]; +} + +float fn_1_1E20(float arg0, float arg1, float arg2) +{ + float var_f31; + float var_f30; + + var_f31 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} + +void fn_1_1F24(s32 arg0) +{ + lbl_1_bss_1F4 = HuAudSeqPlay((s32)arg0); +} + +void fn_1_1F58(s32 arg0) +{ + if (lbl_1_bss_1F4 >= 0) { + if (arg0 < 0) { + arg0 = 1000; + } + HuAudSeqFadeOut(lbl_1_bss_1F4, arg0); + } + lbl_1_bss_1F4 = -1; +} + +void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3) +{ + Vec sp18; + float var_f28; + s32 var_r30; + + sp18.x = 0.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + sp18.x = arg2 / 4.0f; + sp18.z = -(float)arg3 / 4.0f; + var_r30 = 0; + var_f28 = VECMagXZ(&sp18); + if (0.5f <= var_f28) { + if (10.0f <= var_f28) { + sp18.x /= var_f28; + sp18.z /= var_f28; + var_f28 = 10.0f; + sp18.x = 10.0f * sp18.x; + sp18.z = 10.0f * sp18.z; + } + *arg1 = fn_1_1E20(*arg1, atan2d(sp18.x, sp18.z), 0.4f); + if (8.0f <= var_f28) { + var_r30 = 2; + } + else { + var_r30 = 1; + } + } + VECAdd((Vec *)&arg0, &sp18, (Vec *)&arg0); +} \ No newline at end of file