Teach the boss cautions two silencers beyond the card killers

The Water removes every discard at blind start (blind.lua:208, returned
only after the fight), idling discard granters and payoffs alike; The
Eye blocks a repeated hand type outright (blind.lua:189/577), giving a
one-hand build exactly one shot. BOSS_KILLS entries now carry a tag SET
and their own factual phrase, since "debuffs X" stopped being the only
true sentence. The Arm and The Ox were chased and rejected -- level
drain does not touch the planet jokers, and The Ox fires on the
player's own hand choice, the same reasoning that rejected the Card
Sharp/Obelisk clash -- recorded in the BOSS_KILLS comment so nobody
re-adds them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-07-14 15:23:16 -07:00
parent 43e1ea2bc6
commit 9364603db1
2 changed files with 76 additions and 24 deletions
+29 -6
View File
@@ -504,18 +504,41 @@ eq(deck_total, 0, 'no deck (menus, tests) reads as an empty deck')
section('Engine: boss-blind cautions know who the boss silences')
--------------------------------------------------------------------------------
-- The five class-killer bosses, verbatim from game.lua's P_BLINDS debuff
-- configs. Every tag they reference must exist in the database, or the
-- caution can never fire.
-- The class-killer bosses, verbatim from game.lua's P_BLINDS configs and the
-- blind.lua effects. Every tag they reference must exist in the database,
-- or the caution can never fire.
for boss, kill in pairs(JCA.boss_kills) do
ok(JCA.tag_label[kill.tag], ('boss %s kills a real catalog tag (%s)'):format(boss, kill.tag))
local n = 0
for tag in pairs(kill.tags) do
n = n + 1
ok(JCA.tag_label[tag], ('boss %s kills a real catalog tag (%s)'):format(boss, tag))
end
ok(n > 0, ('boss %s kills at least one tag'):format(boss))
ok(type(kill.what) == 'string' and #kill.what > 0,
('boss %s carries its tooltip phrase'):format(boss))
end
-- The Plant debuffs faces: it must catch both the payoff (Business Card
-- wants faces) and the enabler (Pareidolia turns every card into one).
local plant = JCA.boss_kills.bl_plant
ok(JCA.db.j_business.wants[plant.tag], 'The Plant caution catches face payoffs')
ok(JCA.db.j_pareidolia.gives[plant.tag], 'and face enablers, whose conversion kills the deck')
ok(JCA.db.j_business.wants.faces and plant.tags.faces,
'The Plant caution catches face payoffs')
ok(JCA.db.j_pareidolia.gives.faces, 'and face enablers, whose conversion kills the deck')
-- The Water removes every discard for the fight (blind.lua:208): both the
-- granters (Drunkard) and the payoffs (Hit the Road) must be caught.
local water = JCA.boss_kills.bl_water
ok(water.tags.discards_up and JCA.db.j_drunkard.gives.discards_up,
'The Water caution catches discard granters')
ok(JCA.db.j_hit_the_road.wants.discards_up, 'and discard payoffs')
-- The Eye blocks repeat hand types (blind.lua:577): every hand-type cluster
-- tag must be covered, so a one-hand build always hears about it.
local eye = JCA.boss_kills.bl_eye
for _, t in ipairs({'pair', 'two_pair', 'three_kind', 'four_kind', 'straight', 'flush'}) do
ok(eye.tags[t], ('The Eye covers the %s cluster'):format(t))
end
ok(not eye.tags.hearts, 'but The Eye does not touch suit tags (suits repeat fine)')
-- Upcoming-boss reading: warn while the boss is ahead, stay quiet once it
-- is dealt with.