diff --git a/.gitignore b/.gitignore index 8adee9a..ca5e8ac 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ hooks/ *.n64 *.v64 *.wad +*.iso # Windows image file caches Thumbs.db diff --git a/genhooks b/genhooks index 6d755e4..38d8afb 100755 --- a/genhooks +++ b/genhooks @@ -58,3 +58,4 @@ asmgsc "$sym_z64_metronome_check_2" "jal $sym_metronome_check_hook;" asmgsc "$sym_z64_metronome_check_3" "jal $sym_metronome_check_hook;" asmgsc "$sym_z64_metronome_check_4" "jal $sym_metronome_check_hook;" asmgsc "$sym_z64_bombchu_floor_poly_hook" "jal $sym_bombchu_floor_poly_hook;" +asmgsc "$sym_Health_UpdateBeatingHeart_hook" "jal $sym_beep_hook;" diff --git a/lib/liboot-1.0.a b/lib/liboot-1.0.a index 1ec1b89..90d1cf2 100644 --- a/lib/liboot-1.0.a +++ b/lib/liboot-1.0.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809CE9F0 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x80065A14 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x800646F0 ; diff --git a/lib/liboot-1.1.a b/lib/liboot-1.1.a index 6361105..0d5b5fd 100644 --- a/lib/liboot-1.1.a +++ b/lib/liboot-1.1.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809CEB40 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x80065A14 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x800646F0 ; diff --git a/lib/liboot-1.2.a b/lib/liboot-1.2.a index f67c76f..e54b0d4 100644 --- a/lib/liboot-1.2.a +++ b/lib/liboot-1.2.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809CEDC0 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x800660D4 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x80064DB0 ; diff --git a/lib/liboot-ce-j.a b/lib/liboot-ce-j.a index 2453f8f..0688cef 100644 --- a/lib/liboot-ce-j.a +++ b/lib/liboot-ce-j.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809B3280 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x800656B0 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x80064390 ; diff --git a/lib/liboot-gc-j.a b/lib/liboot-gc-j.a index c14f559..3c3bf4a 100644 --- a/lib/liboot-gc-j.a +++ b/lib/liboot-gc-j.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809B32B0 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x800656D0 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x800643B0 ; diff --git a/lib/liboot-gc-u.a b/lib/liboot-gc-u.a index 99a41fa..81f3864 100644 --- a/lib/liboot-gc-u.a +++ b/lib/liboot-gc-u.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809B3290 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x800656B0 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x80064390 ; diff --git a/lib/liboot-ique-cn.a b/lib/liboot-ique-cn.a index 22305f7..4703e6c 100644 --- a/lib/liboot-ique-cn.a +++ b/lib/liboot-ique-cn.a @@ -187,3 +187,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809CFA90 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x8006C570 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x8006B250 ; diff --git a/lib/liboot-mq-j.a b/lib/liboot-mq-j.a index 5a502ec..b32ed8f 100644 --- a/lib/liboot-mq-j.a +++ b/lib/liboot-mq-j.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809B3230 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x800656D0 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x800643B0 ; diff --git a/lib/liboot-mq-u.a b/lib/liboot-mq-u.a index 31a3cde..20735de 100644 --- a/lib/liboot-mq-u.a +++ b/lib/liboot-mq-u.a @@ -184,3 +184,6 @@ z64_metronome_check_3 = ovl_En_Skj + 0x2A3C ; z64_metronome_check_4 = ovl_En_Skj + 0x2AC4 ; ovl_En_Bom_Chu = 0x809B3210 ; z64_bombchu_floor_poly_hook = ovl_En_Bom_Chu + 0x654 ; +Health_UpdateBeatingHeart = 0x800656B0 ; +Health_UpdateBeatingHeart_hook = Health_UpdateBeatingHeart + 0xA0 ; +Sfx_PlaySfxCentered = 0x80064390 ; diff --git a/src/gz/gz.c b/src/gz/gz.c index 4ad09d1..a7fdb78 100644 --- a/src/gz/gz.c +++ b/src/gz/gz.c @@ -168,6 +168,8 @@ static void main_hook(void) if (settings->cheats & (1 << CHEAT_NOHUD)) z64_file.hud_flag = 0x001; + settings->bits.disable_health_beep = settings->cheats & (1 << CHEAT_NOHEALTHBEEP) ? 1 : 0; + /* handle commands */ for (int i = 0; i < COMMAND_MAX; ++i) { _Bool active = 0; @@ -1088,6 +1090,18 @@ HOOK void bombchu_floor_poly_hook(z64_game_t *game, z64_actor_t *actor, } } +extern void Sfx_PlaySfxCentered(uint16_t sfxId); + +/** + * Replaces call to Sfx_PlaySfxCentered in Health_UpdateBeatingHeart to + * allow the low-health sound to play if the cheat is disabled. + */ +HOOK void beep_hook(uint16_t sfxId) { + if (!settings->bits.disable_health_beep) { + Sfx_PlaySfxCentered(sfxId); + } +} + static void main_return_proc(struct menu_item *item, void *data) { gz_hide_menu(); diff --git a/src/gz/gz_cheats.c b/src/gz/gz_cheats.c index 5f093b5..bd7b77d 100644 --- a/src/gz/gz_cheats.c +++ b/src/gz/gz_cheats.c @@ -22,6 +22,7 @@ static const char *cheat_names[] = "isg", "quick text", "no hud", + "no health beep", }; static int cheat_proc(struct menu_item *item, diff --git a/src/gz/settings.h b/src/gz/settings.h index 194b52d..8340d28 100644 --- a/src/gz/settings.h +++ b/src/gz/settings.h @@ -48,6 +48,7 @@ enum cheats CHEAT_ISG, CHEAT_QUICKTEXT, CHEAT_NOHUD, + CHEAT_NOHEALTHBEEP, CHEAT_MAX, }; @@ -139,6 +140,7 @@ struct settings_bits uint32_t watches_visible : 1; uint32_t gc_oob_chu : 1; uint32_t ignore_state_rng : 1; + uint32_t disable_health_beep : 1; }; struct settings_data