Fix a backwards clash, and add 19 verified traps

Every entry here was checked against the running Steamodded source in
Mods/lovely/dump, not from memory.

The headline is a correction: the shipped CLASHES table warned that
Smeared Joker + Flower Pot "cannot make all four" suits. It is backwards.
Flower Pot fills its four suit slots with a greedy if/elseif chain
(card.lua:4256) and SMODS.smeared_check makes Hearts answer for Diamonds
and Spades for Clubs, so the second Heart falls through into the Diamond
slot: any two red + two black cards fill the pot. It is one of the
strongest combos in the game and the mod was steering players away from
it -- while simultaneously scoring the pair +2 via suit_flex, which
should have been the tell. It is now a famous pair.

New clashes (4 -> 22), all traced to the mechanism:
* Burglar zeroes discards_left on blind select (card.lua:2905), which
  switches off every discard-gated joker for the rest of the run: Banner,
  Delayed Gratification, Castle, Yorick, Hit the Road, Burnt, Mail-In
  Rebate, Faceless, Trading Card, and it wipes the discards Drunkard and
  Merry Andy hand you. Delayed Gratification is the cruellest -- "no
  discards used" reads like a synergy, but the code also requires
  discards_left > 0, so it pays exactly $0.
* Vampire strips enhancements in the `before` pass, ahead of the
  per-card `individual` pass where enhancement payoffs are read, so it
  eats what Golden Ticket, Glass, Stone Joker, Marble and Driver's
  License are counting.
* Joker Stencil scales on EMPTY slots, so Riff-Raff and Abstract Joker
  fight it.
* Splash makes every played card score, so a face card that used to be a
  harmless kicker now resets Ride the Bus.

New cautions (3 -> 15): the positional traps (Blueprint dead in the
rightmost slot, Brainstorm in the leftmost), Mime doing nothing without a
held-card payoff, and the decay timers, whose numbers are exact from
game.lua (Ice Cream 100/5 = 20 hands, Popcorn 20/4 = 5 rounds).

Also corrects the stale game path in CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
funman300
2026-07-14 11:22:35 -07:00
parent 07cada9e49
commit 47721d1acf
2 changed files with 76 additions and 6 deletions
+62 -3
View File
@@ -229,6 +229,12 @@ local PAIRS = {
{'j_bull', 'j_to_the_moon', 'interest piles up, chips follow'},
{'j_marble', 'j_hologram', 'every added Stone grows Hologram'},
{'j_egg', 'j_campfire', 'sell the grown Egg for xMult'},
-- Flower Pot fills its four suit slots with a greedy if/elseif chain
-- (card.lua:4256) and Smeared makes Hearts answer for Diamonds and Spades
-- for Clubs, so the second Heart falls through into the Diamond slot: any
-- two red + two black cards fill the pot. It is a top-tier combo, and this
-- mod used to warn against it.
{'j_smeared', 'j_flower_pot', 'any 2 red + 2 black fill it'},
}
-- Known traps: pairs that actively hurt each other. Warning-only — they
@@ -236,9 +242,40 @@ local PAIRS = {
-- a red "Clashes" line. Keep warnings under ~34 chars (one tooltip row).
local CLASHES = {
{'j_ride_the_bus', 'j_pareidolia', 'every card counts as a face'},
{'j_vampire', 'j_steel_joker', 'drains the Steel it counts'},
{'j_vampire', 'j_lucky_cat', 'strips Lucky cards before they pay'},
{'j_smeared', 'j_flower_pot', 'merged suits cannot make all four'},
-- Burglar sets discards_left to 0 when the blind is selected
-- (`ease_discard(-discards_left)`, card.lua:2905), so every joker that
-- reads a discard is switched off for the whole run.
{'j_burglar', 'j_banner', 'no discards left to count'},
{'j_burglar', 'j_delayed_grat', 'pays per discard; you get 0'},
{'j_burglar', 'j_castle', 'no discards, never grows'},
{'j_burglar', 'j_yorick', 'no discards, never grows'},
{'j_burglar', 'j_hit_the_road', 'no discards, never grows'},
{'j_burglar', 'j_burnt', 'no discards to level a hand'},
{'j_burglar', 'j_mail', 'no discards, no rebate'},
{'j_burglar', 'j_faceless', 'no discards, no payout'},
{'j_burglar', 'j_trading', 'no discards to trade in'},
{'j_burglar', 'j_drunkard', 'its extra discards get wiped'},
{'j_burglar', 'j_merry_andy', 'its extra discards get wiped'},
-- Vampire strips enhancements in the `before` pass (card.lua:3851/3906),
-- which runs ahead of the per-card `individual` pass where the enhancement
-- payoffs are read — so it eats the cards they are counting, permanently.
{'j_vampire', 'j_steel_joker', 'drains the Steel it counts'},
{'j_vampire', 'j_lucky_cat', 'strips Lucky cards before they pay'},
{'j_vampire', 'j_ticket', 'eats Gold before Ticket pays'},
{'j_vampire', 'j_glass', 'strips Glass before it shatters'},
{'j_vampire', 'j_drivers_license', 'strips the 16 enhanced cards'},
{'j_vampire', 'j_stone', 'eats the Stone cards it counts'},
{'j_vampire', 'j_marble', 'eats the Stones Marble adds'},
-- Joker Stencil's xMult is the count of EMPTY joker slots.
{'j_stencil', 'j_riff_raff', 'fills the slots Stencil needs'},
{'j_stencil', 'j_abstract', 'one wants jokers, one wants slots'},
-- Splash makes every played card score, so a face card that used to be a
-- harmless kicker now lands in the scoring hand and resets the counter.
{'j_splash', 'j_ride_the_bus', 'any played face card resets it'},
}
-- Per-joker cautions for the buy-area tooltip: the joker is fine on its
@@ -248,6 +285,28 @@ local CAUTIONS = {
j_ceremonial = 'eats the joker to its right',
j_madness = 'destroys a random joker each blind',
j_stencil = 'xMult grows with EMPTY joker slots',
-- Positional traps: both copy a neighbour, and neither says so on the card.
j_blueprint = 'dead in the rightmost slot',
j_brainstorm = 'dead in the leftmost slot',
j_riff_raff = 'needs free joker slots',
-- Does nothing on its own: Mime retriggers held-card abilities, so with no
-- Steel/Gold cards and no Baron/Shoot the Moon it retriggers nothing.
j_mime = 'dead without held-card payoffs',
-- Board-wide side effects the card text buries.
j_burglar = 'wipes ALL discards each blind',
j_vampire = 'permanently eats enhancements',
j_obelisk = 'resets on your most played hand',
j_stuntman = 'costs you 2 hand size',
-- Decay: the numbers are exact (chips 100 / chip_mod 5, mult 20 / extra 4,
-- h_size 5 / h_mod 1, odds 6 -- all from game.lua).
j_ice_cream = 'melts to nothing in 20 hands',
j_popcorn = 'decays to nothing in 5 rounds',
j_turtle_bean = 'hand size shrinks back each round',
j_gros_michel = '1 in 6 to self-destruct each round',
}
-- How to phrase a tag link in the tooltip, from the partner's perspective: