Commit Graph

7 Commits

Author SHA1 Message Date
funman300 4a86a3e1ff Give Perkeo its consumable wants; make theme fragility a decision
Perkeo duplicates a RANDOM held consumable (card.lua:2788), so Spectral
and Planet supply feed it exactly like Tarot supply always did - and the
spectral_gen theme gains the third member it needed (the Seance +
Perkeo negative-spectral archetype, now discoverable three ways).

The other five two-member themes (diamonds, hearts, four_kind, gold_gen,
stone_gen) are vanilla reality: no third joker exists. They get
FRAGILE_OK verdicts in audit.lua, rendered in AUDIT.md, and the audit
now fails on a fragile theme with no verdict - or a stale verdict for a
theme that grew - the same discipline as the silent-joker list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 19:46:41 -07:00
funman300 b88fd0ea07 Pair Burglar with Card Sharp; caution the two hand-cost jokers
Card Sharp's x3 needs the same hand twice in ONE round -- it checks
played_this_round > 1 (card.lua:4465) and that counter resets each
round (state_events.lua:252). Burglar's +3 hands makes the replay
routine, so it gets the famous pair plus a hands_up want, same shape
as Burglar + Acrobat. The old verdict rejecting the Obelisk clash
stands; the audit entry now records both decisions.

Troubadour and Merry Andy join the cautions: their buried costs (one
fewer hand every round, one hand size) are the same shape as
Stuntman's existing warning.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 18:59:16 -07:00
funman300 53907424b0 Fix four tag gaps and a contradiction found by the full-database audit
Cross-checked all 150 jokers' tags against JOKER_EFFECTS.md and the dump:

- Drop the Vampire + Marble clash: Vampire gains xMult from any non-base
  scoring card (card.lua:3907), Stones included, so Marble feeds it --
  the same shape as the Midas Mask pair. The data even scored the duo
  as a combo while warning against it. Stone-build harm stays covered
  by the Vampire + Stone Joker line.
- Delayed Gratification wants discards_up: it pays per unused discard,
  same shape as Banner.
- The Idol wants suit_flex: it checks is_suit (card.lua:3530), so
  Smeared doubles its eligible cards, like Ancient Joker.
- 8 Ball wants retrig_scoring: the 1-in-4 rolls per scored 8 in the
  individual pass (card.lua:3507), so retriggers re-roll it.
- Reword the suit give phrasings: nothing vanilla turns cards into a
  suit, so 'turns cards into Spades' was a lie whenever Blackboard sat
  across from a one-sided giver like Wrathful or Arrowhead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 18:51:49 -07:00
funman300 c4a3847c6a Stop calling DNA a Pair enabler
DNA only fires on the round's first hand and only for a single played
card (dump/card.lua:3956) - sacrificing a full hand to enable the
easiest hand in the game is not a synergy. Its trips/quads enabling
stays; that is what the one-copy-per-round loop actually builds toward.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 18:36:30 -07:00
funman300 ff71a8ef12 Split rank-limited retriggers so Hack stops courting face payoffs
Business Card claimed a synergy with Hack, but Hack only retriggers
2s-5s and Business Card only pays on faces. The single retrig_scoring
tag lumped every retriggerer with every retrigger payoff.

retrig_scoring now means rank-agnostic (Dusk, Seltzer, Hanging Chad,
Splash). Hack gives retrig_low; Sock and Buskin gives retrig_faces.
Payoffs want only the scopes their ranks can reach: low-rank payoffs
(Even Steven, Odd Todd, Walkie Talkie, Fibonacci, Wee) add retrig_low,
face payoffs (Scary Face, Business, Photograph, Triboulet) add
retrig_faces, rank-agnostic ones (Hiker, the suit gems, The Idol) add
both. Scholar keeps only retrig_scoring - no retriggerer targets Aces.

This also kills Hack+Scholar, Hack+Scary Face, Hack+Photograph,
Hack+Triboulet, and Sock and Buskin vs every low-rank payoff.

Both new tags are full themes (catalog page, label, teaching line) so
Hack and Sock and Buskin stay visible in the Engine tab.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 13:30:20 -07:00
funman300 8ce5619273 Chase the audit's leads: verify, implement, or reject
Every lead in AUDIT.md, traced to the running source and then settled.

Ceremonial Dagger DESTROYS the joker to its right at blind select
(card.lua:2945) and skips Eternals. The card says so; what it cannot say
is WHICH of your jokers is about to die. JCA.dagger_victim names it in
the tooltip -- "WILL DESTROY Baron at the next blind" -- while there is
still time to reorder, and stays quiet when the neighbour is Eternal.

Four jokers that scored 0 against all 150 now have partners, all verified
in card.lua rather than recalled:
* Burglar + Ramen: Ramen decays per discarded card and is DESTROYED at x1
  (SMODS.destroy_cards). Burglar zeroes discards, so it never decays and
  never dies. Same for Burglar + Green Joker, which is only punished by
  discarding.
* Trading Card + Erosion: Erosion pays per card MISSING from the deck,
  and Trading Card permanently destroys the card it discards.
* Chaos the Clown + Flash Card: a free reroll every shop, and a joker
  that grows per reroll. Both were inert.

Erosion is the mirror of card_gen, so it now clashes with every joker
that permanently adds a card: DNA, Marble, Certificate.

Rejected, with the reasoning recorded so nobody "fixes" it later:
Card Sharp and Supernova reward replaying a hand and Obelisk punishes it,
but neither destroys the other's precondition -- the player's hand choice
does. That is an opposed incentive, not an opposed effect. The clash list
only earns trust while every entry is mechanical.

The audit's own silent-check was wrong: it flagged Square Joker, which
has been paired with Four Fingers all along, and I duplicated that pair
before the suite caught it. Silence now means no tags AND no famous pair.

711 pass locally, 10 in-game.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 12:36:01 -07:00
funman300 96a00d0d0c Add audit.lua: the map that test.lua is not
test.lua is the gate -- it fails on what is broken. This is the map: it
reports what is merely suspicious, and (the actual point) it REMEMBERS.

32 jokers score ~0 against all 150: they give nothing but engine roles
and want nothing, so the advisor has nothing to say about them. For most
that is the correct answer, but I have now worked that question out from
scratch twice, and the reasoning evaporated both times. VERDICTS records
the conclusion for each one, so an audit only surfaces what is new.

It preserves the traps: Steel Joker and Glass Joker look exactly like
Blue Joker and Abstract Joker did, but they want Steel/Glass cards
specifically, and the only enhance_gen givers make Gold and Stone -- so
"fixing" them would invent a synergy that does not exist. That is written
down now instead of being rediscovered.

It also preserves the leads not yet chased (Ceremonial Dagger's
positional destroy, Erosion vs the card-adders, Burglar + Ramen and Green
Joker, Chaos + Flash Card), marked candidate because they are unverified.

A newly-silent joker lands in "never looked at" and fails the audit until
someone decides. AUDIT.md is committed so the map is readable without
running anything.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 12:28:46 -07:00