Starship/src/main/5A20.c

171 lines
3.9 KiB
C
Raw Normal View History

2023-10-06 15:57:30 +03:00
#include "common.h"
2023-10-07 09:58:07 +03:00
extern f32 D_800C80FC;
2023-10-07 10:29:27 +03:00
extern f32 D_800C80D8;
extern f32 D_800C80DC;
extern f32 D_800C80E0;
extern f32 D_800C80E4;
2023-10-07 09:58:07 +03:00
extern f32 D_800C8100;
2023-10-07 09:24:29 +03:00
extern s32 D_8013B3A0;
2023-10-07 09:28:35 +03:00
extern s32 D_8013B3A4;
extern s32 D_8013B3A8;
extern s32 D_8013B3AC;
2023-10-07 09:24:29 +03:00
extern s32 D_8013B3B0;
extern s32 D_8013B3B4;
2023-10-07 09:49:29 +03:00
extern void func_80005680(s32, s32);
2023-10-07 09:58:07 +03:00
extern f32 func_8001FBE8(f32);
2023-10-07 09:28:35 +03:00
extern u64 func_80023000(void);
2023-10-07 09:24:29 +03:00
2023-10-07 09:17:19 +03:00
f32 func_80004E20(f32 arg0, f32 arg1) {
return arg0 - ((s32)(arg0 / arg1) * arg1);
}
2023-10-06 15:57:30 +03:00
2023-10-07 09:28:35 +03:00
void func_80004E4C(void) {
D_8013B3A4 = (s32)func_80023000() % 30000;
D_8013B3A8 = (s32)func_80023000() % 30000;
D_8013B3AC = (s32)func_80023000() % 30000;
}
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80004EB0.s")
2023-10-07 09:17:19 +03:00
void func_80004FC8(s32 arg0, s32 arg1, s32 arg2) {
D_8013B3B0 = arg0;
D_8013B3B4 = arg1;
D_8013B3A0 = arg2;
}
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80004FE8.s")
2023-10-07 10:29:27 +03:00
f32 func_80005100(f32 arg0, f32 arg1) {
if ((arg0 == 0.0f) && (arg1 == 0.0f)) {
return 0.0f;
}
if (arg1 == 0.0f) {
if (arg0 < 0.0f) {
return D_800C80D8;
} else {
return D_800C80DC;
}
}
if (arg1 < 0.0f) {
if (arg0 < 0.0f) {
2023-10-07 11:00:23 +03:00
return -(D_800C80E0 - func_8001FBE8(fabs(arg0 / arg1)));
2023-10-07 10:29:27 +03:00
} else {
2023-10-07 11:00:23 +03:00
return D_800C80E4 - func_8001FBE8(fabs(arg0 / arg1));
2023-10-07 10:29:27 +03:00
}
} else {
return func_8001FBE8(arg0 / arg1);
}
}
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_800051F8.s")
2023-10-07 09:58:07 +03:00
f32 func_80005320(f32 arg0, f32 arg1) {
if ((arg0 == 0.0f) && (arg1 == 0.0f)) {
return 0.0f;
}
2023-10-07 10:38:28 +03:00
2023-10-07 09:58:07 +03:00
if (arg0 == 0.0f) {
if (arg1 < 0.0f) {
return D_800C80FC;
}
return D_800C8100;
}
2023-10-07 10:38:28 +03:00
2023-10-07 09:58:07 +03:00
if (arg1 == 0.0f) {
return 0.0f;
}
return -func_8001FBE8(arg0 / arg1);
}
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_800053C8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_800054C8.s")
2023-10-07 09:21:36 +03:00
f32 func_800055DC(f32 arg0, s32 arg1) {
f32 var_fv1 = 1.0f;
2023-10-07 10:38:28 +03:00
2023-10-07 09:21:36 +03:00
while (arg1 > 0) {
arg1--;
var_fv1 *= arg0;
}
return var_fv1;
}
2023-10-06 15:57:30 +03:00
2023-10-07 09:40:47 +03:00
void func_80005604(s32* arg0, s32* arg1, s32 arg2, s32 arg3, s32 arg4) {
if (arg2 < arg3) {
if (arg3 < arg4) {
*arg0 = arg2;
*arg1 = arg4;
return;
}
*arg1 = arg3;
2023-10-07 10:38:28 +03:00
2023-10-07 09:40:47 +03:00
if (arg2 < arg4) {
*arg0 = arg2;
return;
}
*arg0 = arg4;
return;
}
2023-10-07 10:38:28 +03:00
2023-10-07 09:40:47 +03:00
if (arg2 < arg4) {
*arg0 = arg3;
*arg1 = arg4;
return;
}
*arg1 = arg2;
2023-10-07 10:38:28 +03:00
2023-10-07 09:40:47 +03:00
if (arg3 < arg4) {
*arg0 = arg3;
return;
}
*arg0 = arg4;
}
2023-10-06 15:57:30 +03:00
2023-10-07 09:58:07 +03:00
// https://decomp.me/scratch/8H8k4 100%
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005680.s")
2023-10-07 09:24:29 +03:00
void func_80005708(s32* arg0) {
2023-10-07 09:49:29 +03:00
func_80005680(*arg0 + 64, *arg0);
2023-10-07 09:24:29 +03:00
*arg0 += 0x40;
}
2023-10-06 15:57:30 +03:00
2023-10-07 09:12:38 +03:00
void func_80005740(s32* arg0) {
*arg0 -= 64;
}
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005754.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005B00.s")
2023-10-07 10:59:38 +03:00
// https://decomp.me/scratch/v4KEJ 91%
2023-10-06 15:57:30 +03:00
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005C34.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005D44.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005E90.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80005FE0.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_8000612C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006500.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_8000671C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006970.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006A20.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006AB8.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006C7C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006E3C.s")
#pragma GLOBAL_ASM("asm/us/nonmatchings/main/5A20/func_80006EB8.s")