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>
This commit is contained in:
@@ -140,10 +140,17 @@ section('Engine: scoring tiers')
|
||||
eq(JCA.score('j_baron', 'j_mime'), 6, 'famous pair + shared tags = 6')
|
||||
eq(JCA.score('j_blueprint', 'j_brainstorm'), 4, 'famous pair alone = 4')
|
||||
eq(JCA.score('j_jolly', 'j_sly'), 4, 'hand-type cluster (2 + 2) = 4')
|
||||
-- Hack gives retrig_scoring, which The Idol wants; neither side triggers the
|
||||
-- generic complement (Hack adds no Mult or Chips), so this is a clean 2.
|
||||
-- Hack gives retrig_low, which The Idol wants (the Idol card can roll any
|
||||
-- rank); neither side triggers the generic complement (Hack adds no Mult or
|
||||
-- Chips), so this is a clean 2.
|
||||
eq(JCA.score('j_hack', 'j_idol'), 2, 'single tag match = 2')
|
||||
eq(JCA.score('j_8_ball', 'j_scary_face'), 0, 'unrelated jokers = 0')
|
||||
-- Rank-limited retriggers must not claim payoffs their ranks cannot reach:
|
||||
-- Hack replays only 2s-5s, so it never feeds a face or Ace payoff; Sock and
|
||||
-- Buskin replays only faces, so Wee's 2s mean nothing to it.
|
||||
eq(JCA.score('j_hack', 'j_business'), 0, 'Hack cannot retrigger Business Card faces')
|
||||
eq(JCA.score('j_hack', 'j_scholar'), 0, 'Hack cannot retrigger Scholar Aces')
|
||||
eq(JCA.score('j_sock_and_buskin', 'j_wee'), 0, 'Sock and Buskin cannot retrigger 2s')
|
||||
-- The generic complement stacks on top of a tag match: Gluttonous gives clubs
|
||||
-- (Blackboard wants them) AND feeds Blackboard's xMult, so 2 + 1.
|
||||
eq(JCA.score('j_gluttenous_joker', 'j_blackboard'), 3, 'tag match + generic complement = 3')
|
||||
@@ -505,7 +512,7 @@ JCA.register('j_mod_test', {'mult', 'bogus_tag'}, {'retrig_scoring'})
|
||||
ok(JCA.db.j_mod_test, 'JCA.register adds a joker')
|
||||
ok(JCA.db.j_mod_test.gives.mult, 'known tags survive registration')
|
||||
ok(not JCA.db.j_mod_test.gives.bogus_tag, 'unknown tags are dropped, not fatal')
|
||||
ok(JCA.score('j_mod_test', 'j_hack') >= 2, 'a registered joker scores against vanilla')
|
||||
ok(JCA.score('j_mod_test', 'j_dusk') >= 2, 'a registered joker scores against vanilla')
|
||||
local before = JCA.score('j_mod_test', 'j_baron')
|
||||
JCA.register_pair('j_mod_test', 'j_baron', 'test blurb')
|
||||
eq(JCA.score('j_mod_test', 'j_baron') - before, 4, 'JCA.register_pair adds the +4 pair bonus')
|
||||
|
||||
Reference in New Issue
Block a user