Rebalance and retheme the mino-series

This commit is contained in:
Emik 2026-02-13 20:34:17 +01:00
parent f126815f0c
commit e76fee417e
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
2 changed files with 76 additions and 52 deletions

View file

@ -101,34 +101,34 @@ return {
}, },
j_Roland_phytoestrogens = { j_Roland_phytoestrogens = {
name = "Phytoestrogens", name = "Phytoestrogens",
text = {"{C:mult}+(Chips/#1#){} Mult"}, text = {"{C:mult}+Chips#1#{} Mult"},
}, },
j_Roland_hexagon = { j_Roland_monomino = {
name = "Hexagon", name = "Monomino",
text = { text = {
"Gains {C:money}$#1#{} of", "Gains {C:money}$#1#{} of",
"{C:attention}sell value{} if", "{C:attention}sell value{} if",
"played hand is a", "played hand is a",
"{C:attention}Four of a Kind", "{C:attention}#2#",
}, },
}, },
j_Roland_hexagoner = { j_Roland_domino = {
name = "Hexagoner", name = "Domino",
text = { text = {
"This Joker gains the", "This Joker gains {C:mult}+#1# {}Mult",
"rank of {C:attention}unscored cards",
"to Mult if played hand",
"is a {C:attention}Four of a Kind",
"{C:inactive}(Currently {C:red}+#1#{C:inactive} Mult)",
},
},
j_Roland_hexagonest = {
name = "Hexagonest",
text = {
"{C:attention}Unscored cards{} add a",
"permanent copy to deck",
"if played hand is a", "if played hand is a",
"{C:attention}Four of a Kind", "{C:attention}#2#",
"{C:inactive}(Currently {C:red}+#3#{C:inactive} Mult)",
},
},
j_Roland_trimino = {
name = "Trimino",
text = {
"Copies {C:attention}#1# {C:green}random",
"scoring cards and",
"{C:red,E:1}self-destructs {}if",
"played hand is a",
"{C:attention}#2#",
}, },
}, },
j_Roland_misfortune = { j_Roland_misfortune = {

View file

@ -1,5 +1,9 @@
local f, q, u = unpack(... or require "src.functional") local f, q, u = unpack(... or require "src.functional")
if false then
Cryptid = Cryptid -- Suppresses warnings about the global.
end
local joker = (function() local joker = (function()
local z = 0 local z = 0
@ -282,14 +286,15 @@ joker {
joker { joker {
key = "phytoestrogens", key = "phytoestrogens",
pronouns = "she_her", pronouns = "she_her",
config = {extra = {division = 4}}, config = {extra = {division = Cryptid and 1 or 4}},
cost = 8, cost = 8,
rarity = 3, rarity = 3,
eternal_compat = true, eternal_compat = true,
blueprint_compat = true, blueprint_compat = true,
perishable_compat = true, perishable_compat = true,
loc_vars = function(_, _, card) loc_vars = function(_, _, card)
return {vars = {card.ability.extra.division}} local division = card.ability.extra.division
return {vars = {division == 1 and "" or "/" .. number_format(division)}}
end, end,
calculate = function(_, card, context) calculate = function(_, card, context)
return context.joker_main and {mult = hand_chips / card.ability.extra.division} or nil return context.joker_main and {mult = hand_chips / card.ability.extra.division} or nil
@ -297,85 +302,104 @@ joker {
} }
joker { joker {
key = "hexagon", key = "monomino",
pronouns = "it_its", pronouns = "it_its",
config = {extra = {price = 6}}, config = {extra = {price = 4, hand_name = "Four of a Kind"}},
cost = 6, cost = 4,
rarity = 1, rarity = 1,
eternal_compat = true, eternal_compat = true,
blueprint_compat = true, blueprint_compat = true,
perishable_compat = true, perishable_compat = true,
loc_vars = function(_, _, card) loc_vars = function(_, _, card)
return {vars = {card.ability.extra.price}} local extra = card.ability.extra
return {vars = {extra.price, localize(extra.hand_name, "poker_hands")}}
end, end,
calculate = function(_, card, context) calculate = function(_, card, context)
if not context.joker_main or local extra = card.ability.extra
context.scoring_name ~= "Four of a Kind" then
if not context.before or context.scoring_name ~= extra.hand_name then
return return
end end
card.ability.extra_value = card.ability.extra_value + card.ability.extra.price card.ability.extra_value = card.ability.extra_value + extra.price
card:set_cost() card:set_cost()
return {message = localize "k_val_up", colour = G.C.MONEY} return {message = localize "k_val_up", colour = G.C.MONEY}
end, end,
} }
joker { joker {
key = "hexagoner", key = "domino",
pronouns = "it_its", pronouns = "it_its",
config = {extra = {mult = 0}}, config = {extra = {mult_gain = 4, hand_name = "Four of a Kind", mult = 0}},
cost = 6, cost = 4,
rarity = 2, rarity = 2,
eternal_compat = true, eternal_compat = true,
blueprint_compat = true, blueprint_compat = true,
perishable_compat = false, perishable_compat = false,
loc_vars = function(_, _, card) loc_vars = function(_, _, card)
return {vars = {card.ability.extra.mult}} local extra = card.ability.extra
return {vars = {extra.mult_gain, localize(extra.hand_name, "poker_hands"), extra.mult}}
end, end,
calculate = function(_, card, context) calculate = function(_, card, context)
local extra = card.ability.extra
if context.joker_main then if context.joker_main then
return {mult = card.ability.extra.mult} return {mult = extra.mult}
end end
if context.individual and if not context.before or context.scoring_name ~= extra.hand_name then
context.cardarea == "unscored" and return
context.scoring_name == "Four of a Kind" then
card.ability.extra.mult = card.ability.extra.mult + context.other_card.base.nominal
return {message = localize "k_upgrade_ex", colour = G.C.RED, message_card = card}
end end
extra.mult = extra.mult + extra.mult_gain
return {message = localize "k_upgrade_ex", colour = G.C.RED, message_card = card}
end, end,
} }
joker { joker {
key = "hexagonest", key = "trimino",
pronouns = "it_its", pronouns = "it_its",
config = {extra = {mult = 0}}, config = {extra = {times = 4, hand_name = "Four of a Kind"}},
cost = 6, cost = 8,
rarity = 3, rarity = 3,
eternal_compat = true, eternal_compat = false,
blueprint_compat = true, blueprint_compat = true,
perishable_compat = true, perishable_compat = true,
loc_vars = function(_, _, card)
local extra = card.ability.extra
return {vars = {extra.times, localize(extra.hand_name, "poker_hands")}}
end,
calculate = function(_, card, context) calculate = function(_, card, context)
if not context.individual or local extra = card.ability.extra
context.cardarea ~= "unscored" or
context.scoring_name ~= "Four of a Kind" then if not context.before or card.getting_sliced or context.scoring_name ~= extra.hand_name then
return return
end end
card.getting_sliced = true
q(function() q(function()
f(G.play.cards):filter(function(v) local scored_cards = f(G.play.cards):filter(function(v)
return not v.highlighted return v.highlighted
end):foreach(function(v) end):into()
local copied = {}
for _ = 1, extra.times do
G.playing_card = (G.playing_card or 0) + 1 G.playing_card = (G.playing_card or 0) + 1
G.deck.config.card_limit = G.deck.config.card_limit + 1 G.deck.config.card_limit = G.deck.config.card_limit + 1
local copy = copy_card(v, nil, nil, G.playing_card) local chosen = pseudorandom_element(scored_cards, pseudoseed "Roland_trimino")
local copy = copy_card(chosen, nil, nil, G.playing_card)
copy:add_to_deck() copy:add_to_deck()
G.hand:emplace(copy) G.hand:emplace(copy)
copy:start_materialize() copy:start_materialize()
table.insert(copied, copy)
table.insert(G.playing_cards, copy) table.insert(G.playing_cards, copy)
playing_card_joker_effects({copy}) end
card:juice_up()
end) SMODS.calculate_effect({{message = localize "k_copied_ex", message_card = card}}, card)
playing_card_joker_effects(copied)
card:start_dissolve()
end) end)
end, end,
} }