Cap generic mult/xmult bonus per candidate; opt Stencil out of it

Any xMult joker used to pulse 'recommended' on a board of four unrelated
+Mult/+Chips jokers: the generic engine-complement +1 in JCA.score
accumulated once per owned joker in partners_for, reaching the threshold
of 4 with zero listable partners (pairwise scores never hit 2), so the
card pulsed while its own tooltip said 'No synergy with your jokers.'

- partners_for now counts the generic +1 once per candidate. Tag/pair
  scores are even, so the generic bonus can no longer flip a
  recommendation at all; a pulsing card always has a nameable partner.
- Joker Stencil is the one xMult joker the generic rule actively
  misreads (its multiplier grows with EMPTY slots), so entries support
  {no_generic = true} which suppresses the rule in score() and the
  generic fallback lines in explain(). Stencil also gains copy_target:
  its real famous synergy is being copied by Blueprint/Brainstorm.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-07-10 13:48:20 -07:00
parent b588444304
commit e37b56471b
3 changed files with 43 additions and 18 deletions
+6 -3
View File
@@ -24,8 +24,9 @@
--- Jokers not in this table (e.g. from other mods) simply score 0.
local J = {}
local function j(key, gives, wants)
J[key] = { gives = gives or {}, wants = wants or {} }
local function j(key, gives, wants, opts)
J[key] = { gives = gives or {}, wants = wants or {},
no_generic = opts and opts.no_generic or nil }
end
-- Common jokers ------------------------------------------------------------
@@ -100,7 +101,9 @@ j('j_hanging_chad', {'retrig_scoring'})
j('j_shoot_the_moon', {'mult'}, {'retrig_held','hand_size'})
-- Uncommon jokers ----------------------------------------------------------
j('j_stencil', {'xmult'})
-- Stencil's xMult shrinks as slots fill, so the generic "+Mult feeds the
-- multiplier" rule is backwards for it; its real synergy is being copied.
j('j_stencil', {'xmult','copy_target'}, nil, {no_generic = true})
j('j_four_fingers', {'straight','flush'})
j('j_mime', {'retrig_held','copy_target'})
j('j_ceremonial', {'mult'})