From a3d60de25bf04829a5bab7e2906a75a820e86e6c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 17 Mar 2020 18:31:45 +1000 Subject: [PATCH] Decompile func0f0ddeac --- src/game/game_0dcdb0.c | 59 ++++++++++++---------------------- src/include/game/game_0dcdb0.h | 2 +- src/include/types.h | 4 +-- 3 files changed, 24 insertions(+), 41 deletions(-) diff --git a/src/game/game_0dcdb0.c b/src/game/game_0dcdb0.c index c10b5a3d9..7fcc001a0 100644 --- a/src/game/game_0dcdb0.c +++ b/src/game/game_0dcdb0.c @@ -1144,7 +1144,7 @@ void func0f0ddd44(s32 value) s32 i; for (i = 0; i < g_NumHudMessages; i++) { - if (g_HudMessages[i].unk000 && g_HudMessages[i].unk1b0 == value) { + if (g_HudMessages[i].active && g_HudMessages[i].unk1b0 == value) { g_HudMessages[i].unk1c4 |= 2; break; } @@ -1212,45 +1212,28 @@ void hudmsgRemoveAll(void) s32 i; for (i = 0; i < g_NumHudMessages; i++) { - g_HudMessages[i].unk000 = 0; + g_HudMessages[i].active = false; } } -GLOBAL_ASM( -glabel func0f0ddeac -/* f0ddeac: 3c068007 */ lui $a2,%hi(g_NumHudMessages) -/* f0ddeb0: 8cc60fe8 */ lw $a2,%lo(g_NumHudMessages)($a2) -/* f0ddeb4: 00803825 */ or $a3,$a0,$zero -/* f0ddeb8: 2402ffff */ addiu $v0,$zero,-1 -/* f0ddebc: 2403ffff */ addiu $v1,$zero,-1 -/* f0ddec0: 18c00014 */ blez $a2,.L0f0ddf14 -/* f0ddec4: 00002825 */ or $a1,$zero,$zero -/* f0ddec8: 3c048007 */ lui $a0,%hi(var800701dc) -/* f0ddecc: 8c840fec */ lw $a0,0xfec($a0) -.L0f0dded0: -/* f0dded0: 908e0000 */ lbu $t6,0x0($a0) -/* f0dded4: 51c0000c */ beqzl $t6,.L0f0ddf08 -/* f0dded8: 24a50001 */ addiu $a1,$a1,0x1 -/* f0ddedc: 8c8801b8 */ lw $t0,0x1b8($a0) -/* f0ddee0: 00e8082a */ slt $at,$a3,$t0 -/* f0ddee4: 50200008 */ beqzl $at,.L0f0ddf08 -/* f0ddee8: 24a50001 */ addiu $a1,$a1,0x1 -/* f0ddeec: 04400003 */ bltz $v0,.L0f0ddefc -/* f0ddef0: 0102082a */ slt $at,$t0,$v0 -/* f0ddef4: 50200004 */ beqzl $at,.L0f0ddf08 -/* f0ddef8: 24a50001 */ addiu $a1,$a1,0x1 -.L0f0ddefc: -/* f0ddefc: 00a01825 */ or $v1,$a1,$zero -/* f0ddf00: 01001025 */ or $v0,$t0,$zero -/* f0ddf04: 24a50001 */ addiu $a1,$a1,0x1 -.L0f0ddf08: -/* f0ddf08: 00a6082a */ slt $at,$a1,$a2 -/* f0ddf0c: 1420fff0 */ bnez $at,.L0f0dded0 -/* f0ddf10: 248401dc */ addiu $a0,$a0,%lo(var800701dc) -.L0f0ddf14: -/* f0ddf14: 03e00008 */ jr $ra -/* f0ddf18: 00601025 */ or $v0,$v1,$zero -); +s32 func0f0ddeac(s32 arg0) +{ + s32 bestvalue = -1; + s32 bestindex = -1; + s32 i; + + // Finding the smallest unk1b8 that is greater than arg0 + for (i = 0; i < g_NumHudMessages; i++) { + if (g_HudMessages[i].active && g_HudMessages[i].unk1b8 > arg0) { + if (bestvalue < 0 || g_HudMessages[i].unk1b8 < bestvalue) { + bestindex = i; + bestvalue = g_HudMessages[i].unk1b8; + } + } + } + + return bestindex; +} void hudmsgCreateViaPreset(char *text, s32 confignum) { @@ -4025,6 +4008,6 @@ void hudmsgsReset(void) s32 i; for (i = 0; i < g_NumHudMessages; i++) { - g_HudMessages[i].unk000 = 0; + g_HudMessages[i].active = false; } } diff --git a/src/include/game/game_0dcdb0.h b/src/include/game/game_0dcdb0.h index 047bd9b52..8743e2b63 100644 --- a/src/include/game/game_0dcdb0.h +++ b/src/include/game/game_0dcdb0.h @@ -12,7 +12,7 @@ u32 func0f0ddb1c(void); void func0f0ddd44(s32 value); void func0f0ddda0(void); void hudmsgRemoveAll(void); -u32 func0f0ddeac(void); +s32 func0f0ddeac(s32 param_1); void hudmsgCreateViaPreset(char *text, s32 confignum); void func0f0ddfa4(char *text, s32 confignum, s32 arg2); void hudmsgCreateViaPresetWithColour(char *text, s32 confignum, u8 colour); diff --git a/src/include/types.h b/src/include/types.h index 8eb3b5616..902531a0a 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5273,7 +5273,7 @@ struct hudmessageconfig { }; struct hudmessage { - /*0x000*/ u8 unk000; + /*0x000*/ u8 active; /*0x004*/ u32 unk004; /*0x008*/ u32 unk008; /*0x00c*/ u32 unk00c; @@ -5383,7 +5383,7 @@ struct hudmessage { /*0x1ac*/ u32 unk1ac; /*0x1b0*/ u32 unk1b0; /*0x1b4*/ u32 unk1b4; - /*0x1b8*/ u32 unk1b8; + /*0x1b8*/ s32 unk1b8; /*0x1bc*/ u32 unk1bc; /*0x1c0*/ u32 unk1c0; /*0x1c4*/ u32 unk1c4;