From 7d6baef056ffe5e4a7dac8b1d85b2cac3fef2a7b Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 17 Mar 2020 18:40:02 +1000 Subject: [PATCH] Decompile hudmsgRemoveByPlayer --- src/game/game_0b63b0.c | 2 +- src/game/game_0dcdb0.c | 53 +++++++++------------------------- src/include/constants.h | 3 ++ src/include/game/game_0dcdb0.h | 2 +- src/include/types.h | 8 +++-- 5 files changed, 24 insertions(+), 44 deletions(-) diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index e48f706e1..19c48f12d 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -12115,7 +12115,7 @@ void currentPlayerDieByShooter(u32 shooter, bool force) func0f0f8120(); g_MpPlayerNum = prevplayernum; - func0f0dfa50(g_Vars.currentplayernum); + hudmsgRemoveByPlayer(g_Vars.currentplayernum); if (g_Vars.mplayerisrunning) { func0f0b09f4(shooter, g_Vars.currentplayernum); diff --git a/src/game/game_0dcdb0.c b/src/game/game_0dcdb0.c index 7fcc001a0..6393cd7de 100644 --- a/src/game/game_0dcdb0.c +++ b/src/game/game_0dcdb0.c @@ -1145,7 +1145,7 @@ void func0f0ddd44(s32 value) for (i = 0; i < g_NumHudMessages; i++) { if (g_HudMessages[i].active && g_HudMessages[i].unk1b0 == value) { - g_HudMessages[i].unk1c4 |= 2; + g_HudMessages[i].flags |= HUDMSGFLAG_00000002; break; } } @@ -3106,44 +3106,19 @@ void currentPlayerSetFlag(u32 flag) g_Vars.currentplayer->flags |= flag; } -GLOBAL_ASM( -glabel func0f0dfa50 -/* f0dfa50: 3c038007 */ lui $v1,%hi(g_NumHudMessages) -/* f0dfa54: 8c630fe8 */ lw $v1,%lo(g_NumHudMessages)($v1) -/* f0dfa58: 00803025 */ or $a2,$a0,$zero -/* f0dfa5c: 00002025 */ or $a0,$zero,$zero -/* f0dfa60: 18600019 */ blez $v1,.L0f0dfac8 -/* f0dfa64: 00001025 */ or $v0,$zero,$zero -/* f0dfa68: 3c078007 */ lui $a3,%hi(g_HudMessages) -/* f0dfa6c: 24e70fec */ addiu $a3,$a3,%lo(g_HudMessages) -.L0f0dfa70: -/* f0dfa70: 8cee0000 */ lw $t6,0x0($a3) -/* f0dfa74: 24420001 */ addiu $v0,$v0,0x1 -/* f0dfa78: 01c42821 */ addu $a1,$t6,$a0 -/* f0dfa7c: 90af0000 */ lbu $t7,0x0($a1) -/* f0dfa80: 51e0000f */ beqzl $t7,.L0f0dfac0 -/* f0dfa84: 0043082a */ slt $at,$v0,$v1 -/* f0dfa88: 8cb801c0 */ lw $t8,0x1c0($a1) -/* f0dfa8c: 54d8000c */ bnel $a2,$t8,.L0f0dfac0 -/* f0dfa90: 0043082a */ slt $at,$v0,$v1 -/* f0dfa94: 8cb901c4 */ lw $t9,0x1c4($a1) -/* f0dfa98: 33280001 */ andi $t0,$t9,0x1 -/* f0dfa9c: 51000008 */ beqzl $t0,.L0f0dfac0 -/* f0dfaa0: 0043082a */ slt $at,$v0,$v1 -/* f0dfaa4: a0a00000 */ sb $zero,0x0($a1) -/* f0dfaa8: 8ce90000 */ lw $t1,0x0($a3) -/* f0dfaac: 3c038007 */ lui $v1,%hi(g_NumHudMessages) -/* f0dfab0: 01245021 */ addu $t2,$t1,$a0 -/* f0dfab4: a5400006 */ sh $zero,0x6($t2) -/* f0dfab8: 8c630fe8 */ lw $v1,%lo(g_NumHudMessages)($v1) -/* f0dfabc: 0043082a */ slt $at,$v0,$v1 -.L0f0dfac0: -/* f0dfac0: 1420ffeb */ bnez $at,.L0f0dfa70 -/* f0dfac4: 248401dc */ addiu $a0,$a0,0x1dc -.L0f0dfac8: -/* f0dfac8: 03e00008 */ jr $ra -/* f0dfacc: 00000000 */ sll $zero,$zero,0x0 -); +void hudmsgRemoveByPlayer(s32 playernum) +{ + s32 i; + + for (i = 0; i < g_NumHudMessages; i++) { + if (g_HudMessages[i].active + && g_HudMessages[i].playernum == playernum + && (g_HudMessages[i].flags & HUDMSGFLAG_00000001)) { + g_HudMessages[i].active = false; + g_HudMessages[i].unk006 = 0; + } + } +} GLOBAL_ASM( glabel func0f0dfad0 diff --git a/src/include/constants.h b/src/include/constants.h index 90256acfe..75283029e 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -556,6 +556,9 @@ #define GAILIST_INIT_SEARCH 0x002c // unused #define GAILIST_INVINCIBLE_AND_IDLE 0x002d +#define HUDMSGFLAG_00000001 0x00000001 +#define HUDMSGFLAG_00000002 0x00000002 + #define IDLEACTION_STANDING 0x01 #define IDLEACTION_SITTING_TYPING 0x02 #define IDLEACTION_SITTING_DORMANT 0x03 diff --git a/src/include/game/game_0dcdb0.h b/src/include/game/game_0dcdb0.h index 8743e2b63..ea4ce6645 100644 --- a/src/include/game/game_0dcdb0.h +++ b/src/include/game/game_0dcdb0.h @@ -25,7 +25,7 @@ u32 hudmsgCreate(char *text, s32 confignum, u8 conf00, u8 conf01, u8 conf02, void func0f0df364(void); void currentPlayerUnsetFlag(u32 flag); void currentPlayerSetFlag(u32 flag); -void func0f0dfa50(u32 playernum); +void hudmsgRemoveByPlayer(s32 playernum); u32 func0f0dfad0(void); void hudmsgsReset(void); diff --git a/src/include/types.h b/src/include/types.h index 902531a0a..1c6eaf4c1 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5274,7 +5274,9 @@ struct hudmessageconfig { struct hudmessage { /*0x000*/ u8 active; - /*0x004*/ u32 unk004; + /*0x002*/ u16 unk002; + /*0x004*/ u16 unk004; + /*0x006*/ u16 unk006; /*0x008*/ u32 unk008; /*0x00c*/ u32 unk00c; /*0x010*/ u32 unk010; @@ -5385,8 +5387,8 @@ struct hudmessage { /*0x1b4*/ u32 unk1b4; /*0x1b8*/ s32 unk1b8; /*0x1bc*/ u32 unk1bc; - /*0x1c0*/ u32 unk1c0; - /*0x1c4*/ u32 unk1c4; + /*0x1c0*/ u32 playernum; + /*0x1c4*/ u32 flags; /*0x1c8*/ u32 unk1c8; /*0x1cc*/ u32 unk1cc; /*0x1d0*/ u32 unk1d0;