diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index eb66b7e17..e18c14cb2 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -5724,131 +5724,46 @@ glabel func0f0bb5ec /* f0bb698: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0f0bb69c -.late_rodata -glabel var7f1ad634 -.word func0f0bb69c+0x38 # f0bb6d4 -glabel var7f1ad638 -.word func0f0bb69c+0xa4 # f0bb740 -glabel var7f1ad63c -.word func0f0bb69c+0xa4 # f0bb740 -glabel var7f1ad640 -.word func0f0bb69c+0x60 # f0bb6fc -glabel var7f1ad644 -.word func0f0bb69c+0x60 # f0bb6fc -glabel var7f1ad648 -.word func0f0bb69c+0x80 # f0bb71c -glabel var7f1ad64c -.word func0f0bb69c+0xc4 # f0bb760 -glabel var7f1ad650 -.word func0f0bb69c+0x168 # f0bb804 -glabel var7f1ad654 -.word func0f0bb69c+0x168 # f0bb804 -glabel var7f1ad658 -.word func0f0bb69c+0xdc # f0bb778 -glabel var7f1ad65c -.word func0f0bb69c+0xdc # f0bb778 -glabel var7f1ad660 -.word func0f0bb69c+0x118 # f0bb7b4 -.text -/* f0bb69c: 3c04800a */ lui $a0,%hi(g_Vars) -/* f0bb6a0: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) -/* f0bb6a4: 8c820284 */ lw $v0,0x284($a0) -/* f0bb6a8: 27bdffe8 */ addiu $sp,$sp,-24 -/* f0bb6ac: afbf0014 */ sw $ra,0x14($sp) -/* f0bb6b0: 8c4300fc */ lw $v1,0xfc($v0) -/* f0bb6b4: 2c610006 */ sltiu $at,$v1,0x6 -/* f0bb6b8: 10200021 */ beqz $at,.L0f0bb740 -/* f0bb6bc: 00037080 */ sll $t6,$v1,0x2 -/* f0bb6c0: 3c017f1b */ lui $at,%hi(var7f1ad634) -/* f0bb6c4: 002e0821 */ addu $at,$at,$t6 -/* f0bb6c8: 8c2ed634 */ lw $t6,%lo(var7f1ad634)($at) -/* f0bb6cc: 01c00008 */ jr $t6 -/* f0bb6d0: 00000000 */ nop -/* f0bb6d4: c44400dc */ lwc1 $f4,0xdc($v0) -/* f0bb6d8: 0fc30869 */ jal func0f0c21a4 -/* f0bb6dc: e44400e4 */ swc1 $f4,0xe4($v0) -/* f0bb6e0: 3c04800a */ lui $a0,%hi(g_Vars) -/* f0bb6e4: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) -/* f0bb6e8: 8c8f0284 */ lw $t7,0x284($a0) -/* f0bb6ec: e5e000e8 */ swc1 $f0,0xe8($t7) -/* f0bb6f0: 8c820284 */ lw $v0,0x284($a0) -/* f0bb6f4: 10000012 */ b .L0f0bb740 -/* f0bb6f8: 8c4300fc */ lw $v1,0xfc($v0) -/* f0bb6fc: c44600ec */ lwc1 $f6,0xec($v0) -/* f0bb700: e44600e4 */ swc1 $f6,0xe4($v0) -/* f0bb704: 8c820284 */ lw $v0,0x284($a0) -/* f0bb708: c44800f0 */ lwc1 $f8,0xf0($v0) -/* f0bb70c: e44800e8 */ swc1 $f8,0xe8($v0) -/* f0bb710: 8c820284 */ lw $v0,0x284($a0) -/* f0bb714: 1000000a */ b .L0f0bb740 -/* f0bb718: 8c4300fc */ lw $v1,0xfc($v0) -/* f0bb71c: c44a00dc */ lwc1 $f10,0xdc($v0) -/* f0bb720: 0fc30869 */ jal func0f0c21a4 -/* f0bb724: e44a00e4 */ swc1 $f10,0xe4($v0) -/* f0bb728: 3c04800a */ lui $a0,%hi(g_Vars) -/* f0bb72c: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) -/* f0bb730: 8c980284 */ lw $t8,0x284($a0) -/* f0bb734: e70000e8 */ swc1 $f0,0xe8($t8) -/* f0bb738: 8c820284 */ lw $v0,0x284($a0) -/* f0bb73c: 8c4300fc */ lw $v1,0xfc($v0) -.L0f0bb740: -/* f0bb740: 2c610006 */ sltiu $at,$v1,0x6 -/* f0bb744: 1020002f */ beqz $at,.L0f0bb804 -/* f0bb748: 0003c880 */ sll $t9,$v1,0x2 -/* f0bb74c: 3c017f1b */ lui $at,%hi(var7f1ad64c) -/* f0bb750: 00390821 */ addu $at,$at,$t9 -/* f0bb754: 8c39d64c */ lw $t9,%lo(var7f1ad64c)($at) -/* f0bb758: 03200008 */ jr $t9 -/* f0bb75c: 00000000 */ nop -/* f0bb760: 44808000 */ mtc1 $zero,$f16 -/* f0bb764: 24080001 */ addiu $t0,$zero,0x1 -/* f0bb768: e45000f8 */ swc1 $f16,0xf8($v0) -/* f0bb76c: 8c890284 */ lw $t1,0x284($a0) -/* f0bb770: 10000024 */ b .L0f0bb804 -/* f0bb774: ad2800fc */ sw $t0,0xfc($t1) -/* f0bb778: 8c4a1924 */ lw $t2,0x1924($v0) -/* f0bb77c: 3c0c8007 */ lui $t4,%hi(g_HealthDamageTypes+0x4) -/* f0bb780: 240d0003 */ addiu $t5,$zero,0x3 -/* f0bb784: 000a5880 */ sll $t3,$t2,0x2 -/* f0bb788: 016a5821 */ addu $t3,$t3,$t2 -/* f0bb78c: 000b5880 */ sll $t3,$t3,0x2 -/* f0bb790: 018b6021 */ addu $t4,$t4,$t3 -/* f0bb794: 8d8c0928 */ lw $t4,%lo(g_HealthDamageTypes+0x4)($t4) -/* f0bb798: 448c9000 */ mtc1 $t4,$f18 -/* f0bb79c: 00000000 */ nop -/* f0bb7a0: 46809120 */ cvt.s.w $f4,$f18 -/* f0bb7a4: e44400f8 */ swc1 $f4,0xf8($v0) -/* f0bb7a8: 8c8e0284 */ lw $t6,0x284($a0) -/* f0bb7ac: 10000015 */ b .L0f0bb804 -/* f0bb7b0: adcd00fc */ sw $t5,0xfc($t6) -/* f0bb7b4: 0fc305bd */ jal currentPlayerGetHealthBarHeightFrac -/* f0bb7b8: 00000000 */ nop -/* f0bb7bc: 3c04800a */ lui $a0,%hi(g_Vars) -/* f0bb7c0: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) -/* f0bb7c4: 8c820284 */ lw $v0,0x284($a0) -/* f0bb7c8: 3c198007 */ lui $t9,%hi(g_HealthDamageTypes) -/* f0bb7cc: 24080001 */ addiu $t0,$zero,0x1 -/* f0bb7d0: 8c4f1924 */ lw $t7,0x1924($v0) -/* f0bb7d4: 000fc080 */ sll $t8,$t7,0x2 -/* f0bb7d8: 030fc021 */ addu $t8,$t8,$t7 -/* f0bb7dc: 0018c080 */ sll $t8,$t8,0x2 -/* f0bb7e0: 0338c821 */ addu $t9,$t9,$t8 -/* f0bb7e4: 8f390924 */ lw $t9,%lo(g_HealthDamageTypes)($t9) -/* f0bb7e8: 44993000 */ mtc1 $t9,$f6 -/* f0bb7ec: 00000000 */ nop -/* f0bb7f0: 46803220 */ cvt.s.w $f8,$f6 -/* f0bb7f4: 46080282 */ mul.s $f10,$f0,$f8 -/* f0bb7f8: e44a00f8 */ swc1 $f10,0xf8($v0) -/* f0bb7fc: 8c890284 */ lw $t1,0x284($a0) -/* f0bb800: ad2800fc */ sw $t0,0xfc($t1) -.L0f0bb804: -/* f0bb804: 8fbf0014 */ lw $ra,0x14($sp) -/* f0bb808: 27bd0018 */ addiu $sp,$sp,0x18 -/* f0bb80c: 03e00008 */ jr $ra -/* f0bb810: 00000000 */ nop -); +void func0f0bb69c(void) +{ + switch (g_Vars.currentplayer->healthshowmode) { + case HEALTHSHOWMODE_HIDDEN: + g_Vars.currentplayer->oldhealth = g_Vars.currentplayer->bondhealth; + g_Vars.currentplayer->oldarmour = func0f0c21a4(); + break; + case HEALTHSHOWMODE_OPENING: + case HEALTHSHOWMODE_PREVIOUS: + break; + case HEALTHSHOWMODE_UPDATING: + case HEALTHSHOWMODE_CURRENT: + g_Vars.currentplayer->oldhealth = g_Vars.currentplayer->apparenthealth; + g_Vars.currentplayer->oldarmour = g_Vars.currentplayer->apparentarmour; + break; + case HEALTHSHOWMODE_CLOSING: + g_Vars.currentplayer->oldhealth = g_Vars.currentplayer->bondhealth; + g_Vars.currentplayer->oldarmour = func0f0c21a4(); + break; + } + + switch (g_Vars.currentplayer->healthshowmode) { + case HEALTHSHOWMODE_HIDDEN: + g_Vars.currentplayer->healthshowtime = 0; + g_Vars.currentplayer->healthshowmode = HEALTHSHOWMODE_OPENING; + break; + case HEALTHSHOWMODE_OPENING: + case HEALTHSHOWMODE_PREVIOUS: + break; + case HEALTHSHOWMODE_UPDATING: + case HEALTHSHOWMODE_CURRENT: + g_Vars.currentplayer->healthshowtime = g_HealthDamageTypes[g_Vars.currentplayer->healthdamagetype].unk04; + g_Vars.currentplayer->healthshowmode = HEALTHSHOWMODE_UPDATING; + break; + case HEALTHSHOWMODE_CLOSING: + g_Vars.currentplayer->healthshowtime = g_HealthDamageTypes[g_Vars.currentplayer->healthdamagetype].openduration * currentPlayerGetHealthBarHeightFrac(); + g_Vars.currentplayer->healthshowmode = HEALTHSHOWMODE_OPENING; + break; + } +} GLOBAL_ASM( glabel func0f0bb814 @@ -12827,10 +12742,10 @@ Gfx *func0f0c07c8(Gfx *gdl) // Back to the player who died setCurrentPlayerNum(prevplayernum); g_Vars.currentplayer->dostartnewlife = true; - g_Vars.currentplayer->unk00e4 = 0; - g_Vars.currentplayer->unk00e8 = 0; - g_Vars.currentplayer->unk00ec = 0; - g_Vars.currentplayer->unk00f0 = 0; + g_Vars.currentplayer->oldhealth = 0; + g_Vars.currentplayer->oldarmour = 0; + g_Vars.currentplayer->apparenthealth = 0; + g_Vars.currentplayer->apparentarmour = 0; g_Vars.currentplayer->stealhealth = stealhealth; } else { setCurrentPlayerNum(prevplayernum); @@ -12857,10 +12772,10 @@ Gfx *func0f0c07c8(Gfx *gdl) // Back to the player who died setCurrentPlayerNum(prevplayernum); g_Vars.currentplayer->dostartnewlife = true; - g_Vars.currentplayer->unk00e4 = 0; - g_Vars.currentplayer->unk00e8 = 0; - g_Vars.currentplayer->unk00ec = 0; - g_Vars.currentplayer->unk00f0 = 0; + g_Vars.currentplayer->oldhealth = 0; + g_Vars.currentplayer->oldarmour = 0; + g_Vars.currentplayer->apparenthealth = 0; + g_Vars.currentplayer->apparentarmour = 0; g_Vars.currentplayer->stealhealth = stealhealth; } else { setCurrentPlayerNum(prevplayernum); diff --git a/src/include/game/game_0b63b0.h b/src/include/game/game_0b63b0.h index 7d79b6f30..0fb968cd3 100644 --- a/src/include/game/game_0b63b0.h +++ b/src/include/game/game_0b63b0.h @@ -78,7 +78,7 @@ u32 func0f0c1f08(void); void func0f0c1ff4(void); void propPlayerGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); f32 currentPlayerGetHealth(void); -u32 func0f0c21a4(void); +f32 func0f0c21a4(void); void func0f0c2210(f32 shield); s32 getMissionTime(void); u32 func0f0c228c(struct prop *prop); diff --git a/src/include/types.h b/src/include/types.h index 31d0cd206..dbe4b89db 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2042,11 +2042,11 @@ struct player { /*0x00d8*/ bool isdead; /*0x00dc*/ f32 bondhealth; /*0x00e0*/ u32 unk00e0; - /*0x00e4*/ f32 unk00e4; - /*0x00e8*/ f32 unk00e8; - /*0x00ec*/ f32 unk00ec; - /*0x00f0*/ f32 unk00f0; - /*0x00f4*/ u32 unk00f4; + /*0x00e4*/ f32 oldhealth; + /*0x00e8*/ f32 oldarmour; + /*0x00ec*/ f32 apparenthealth; + /*0x00f0*/ f32 apparentarmour; + /*0x00f4*/ u32 damageshowtime; /*0x00f8*/ f32 healthshowtime; /*0x00fc*/ u32 healthshowmode; /*0x0100*/ bool docentreupdown;