diff --git a/src/game/data/data_020df0.c b/src/game/data/data_020df0.c index 31faf3616..818c83a44 100644 --- a/src/game/data/data_020df0.c +++ b/src/game/data/data_020df0.c @@ -7091,7 +7091,7 @@ bool g_PortalStack[20] = {0}; s32 g_PortalStackIndex = 0x00000000; u32 g_PortalMode = 0x00000000; u32 var8007fcb0 = 0x00000190; -u32 var8007fcb4 = 0x00000000; +f32 var8007fcb4 = 0; u32 var8007fcb8 = 0x00000000; u32 var8007fcbc = 0x00000000; diff --git a/src/game/game_157db0.c b/src/game/game_157db0.c index 688dae2a7..26686cda7 100644 --- a/src/game/game_157db0.c +++ b/src/game/game_157db0.c @@ -15873,6 +15873,44 @@ glabel var7f1b76c4 /* f164f98: 27bd0048 */ addiu $sp,$sp,0x48 ); +// regalloc in callee-save registers +// The empty if-statements below narrow it down to just two swapped registers +//s32 func0f164e8c(struct coord *arg0, struct coord *arg1) +//{ +// s32 bestportalnum = -1; +// s32 count = 0; +// f32 bestthing = F32_MAX; +// f32 thisthing; +// s32 i; +// +// for (i = 0; g_Portals[i].unk00; i++) { +// if (func00017e30(i, arg0, arg1)) { +// thisthing = var8007fcb4; +// +// if (thisthing < 0) { +// thisthing = -thisthing; +// } +// +// if (thisthing < bestthing) { +// bestportalnum = i; +// bestthing = thisthing; +// count++; +// +// if (i); +// if (bestportalnum); +// } +// } +// +// if (i); +// if (bestportalnum); +// } +// +// if (count); +// if (bestportalnum); +// +// return bestportalnum; +//} + GLOBAL_ASM( glabel func0f164f9c /* f164f9c: 00001825 */ or $v1,$zero,$zero diff --git a/src/include/constants.h b/src/include/constants.h index ca412317a..e8a15608d 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -8,6 +8,7 @@ #define osSyncPrintf +#define F32_MAX 3.4028234663853E+38 // 7f7fffff #define S32_MAX 2147483647 #define U32_MAX 4294967295 diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index a8fa54f79..b624bdc57 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -280,7 +280,7 @@ extern bool g_PortalStack[20]; extern s32 g_PortalStackIndex; extern u32 g_PortalMode; extern u32 var8007fcb0; -extern u32 var8007fcb4; +extern f32 var8007fcb4; extern struct stagetableentry g_Stages[61]; extern u32 var80081018; extern u32 var80081058; diff --git a/src/include/lib/lib_16110.h b/src/include/lib/lib_16110.h index 9a42f4812..47285b886 100644 --- a/src/include/lib/lib_16110.h +++ b/src/include/lib/lib_16110.h @@ -40,7 +40,7 @@ u32 func00017c2c(void); u32 func00017cbc(void); u32 func00017ce0(void); u32 func00017dc4(void); -u32 func00017e30(void); +bool func00017e30(s32 portalnum, struct coord *arg1, struct coord *arg2); u32 func00018148(void); void func000185d0(struct defaultobj *obj, s32 arg1); u32 func00018680(void);