feat(mods): expose battle UI visibility hooks

This commit is contained in:
AverageConsumer
2026-08-09 15:46:33 +02:00
parent 943ba5dcbf
commit b9e3c4a689
6 changed files with 70 additions and 5 deletions
+18 -3
View File
@@ -127,6 +127,18 @@ function BattleState:sgbPalettes()
return nil
end
function BattleState:bottomUIVisible()
if not Runtime.wantsHook("battle.bottom_ui_visible") then return true end
return Runtime.call("battle.bottom_ui_visible", function() return true end,
self) ~= false
end
function BattleState:statusHUDVisible()
if not Runtime.wantsHook("battle.status_hud_visible") then return true end
return Runtime.call("battle.status_hud_visible", function() return true end,
self) ~= false
end
local Rulesets = {
gen1_faithful = require("src.battle.rulesets.gen1_faithful"),
modern_clean = require("src.battle.rulesets.modern_clean"),
@@ -5347,7 +5359,7 @@ function BattleState:drawPicsLayer(slide, sx, sy, onlySide, skipMenuClip)
-- .mimicmenu) wipes rows 7+. The port draws pics above the menu
-- layer in the colorized pipeline, so clip them to the visible rows.
local g = love.graphics
local clipY = not skipMenuClip
local clipY = not skipMenuClip and self:bottomUIVisible()
and (self.phase == "mimicSelect" and 56
or self.phase == "moveSelect" and 64)
or nil
@@ -5459,6 +5471,7 @@ function BattleState:drawHUDs(slide)
-- per-pixel tint (grayFill) -- otherwise GREENBAR's red-channel-0 fill
-- double-applies and the zone shade shader maps the whole bar to black (#229).
local grayFill = self:colorMode()
local showStatus = self:statusHUDVisible()
local barData = self.data
local fx = self.fx
local hudShake = (fx and fx.hudShakeX) or 0
@@ -5468,7 +5481,8 @@ function BattleState:drawHUDs(slide)
-- DrawEnemyHUDAndHPBar is called from _InitBattleCommon (core.asm:6763)
-- AFTER PrintBeginningBattleText returns, so "Wild X appeared!" shows the
-- player's ball row with no enemy HUD beside it (#317)
if self.enemy and not self.showEnemyTrainer and not self.enemySendingOut
if showStatus and self.enemy and not self.showEnemyTrainer
and not self.enemySendingOut
and not self:growInScale(self.enemy) and slide == 0
and not self.introBalls and not self.enemy.fainted then
-- enemy HUD (DrawEnemyHUDAndHPBar): name row 0, <LV>+level (4,1),
@@ -5555,7 +5569,7 @@ function BattleState:drawHUDs(slide)
self:drawBallRow(self.playerParty or self.game.save.party, 88, 80, 8)
end
local hidePlayer = self.safari or self.demo
if self.player and not hidePlayer and not self.showPlayerBack
if showStatus and self.player and not hidePlayer and not self.showPlayerBack
and slide == 0 then
-- player HUD (DrawPlayerHUDAndHPBar): name (10,7), <LV>+level
-- (14,8), HP bar (10,9), HP numbers row 10, underline row 11 with
@@ -5580,6 +5594,7 @@ function BattleState:drawHUDs(slide)
end
function BattleState:drawTextArea()
if not self:bottomUIVisible() then return end
Font.drawBox(0, 12, 20, 6)
love.graphics.setColor(0, 0, 0, 1)
if self.phase == "messages"