From 040ca60419d0a921b7d0ecf80a52bf6c98a488c8 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 26 Aug 2025 12:33:58 +0200 Subject: [PATCH 1/2] low-health sound cheat --- .gitignore | 1 + genhooks | 1 + lib/liboot-1.0.a | 3 +++ lib/liboot-1.1.a | 3 +++ lib/liboot-1.2.a | 3 +++ lib/liboot-ce-j.a | 3 +++ lib/liboot-gc-j.a | 3 +++ lib/liboot-gc-u.a | 3 +++ lib/liboot-mq-j.a | 3 +++ lib/liboot-mq-u.a | 3 +++ src/gz/gz.c | 14 ++++++++++++++ src/gz/gz_cheats.c | 1 + src/gz/settings.h | 2 ++ 13 files changed, 43 insertions(+) diff --git a/.gitignore b/.gitignore index 8adee9aa..ca5e8ac2 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 6d755e49..38d8afbc 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 1ec1b898..90d1cf2a 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 63611051..0d5b5fd5 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 f67c76fc..e54b0d45 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 2453f8f9..0688cef3 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 c14f5596..3c3bf4ae 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 99a41fa2..81f38644 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-mq-j.a b/lib/liboot-mq-j.a index 5a502ecd..b32ed8f5 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 31a3cde1..20735de9 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 4ad09d1f..a7fdb784 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 5f093b56..bd7b77da 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 194b52d1..8340d280 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 From 106469995e0fb6f01dab91880e5e09b01751a792 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Tue, 26 Aug 2025 13:37:26 +0200 Subject: [PATCH 2/2] add addresses for iQue --- lib/liboot-ique-cn.a | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/liboot-ique-cn.a b/lib/liboot-ique-cn.a index 22305f7e..4703e6c4 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 ;