Fix Frozen on various jokers

This commit is contained in:
Emik 2026-03-21 21:42:04 +01:00
parent f77dbe3ac8
commit 51ad870d8c
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
3 changed files with 36 additions and 8 deletions

View file

@ -6,7 +6,7 @@
"author": [
"Emik"
],
"version": "2.2.0",
"version": "2.2.1",
"badge_colour": "8BE9FD",
"main_file": "src/main.lua",
"badge_text_colour": "44475A",

View file

@ -83,6 +83,7 @@ SMODS.Edition {
freeze(card)
end,
on_remove = function(card)
card.Roland_frozen_proxy = nil
card.Roland_frozen_estate = nil
card.Roland_frozen_ability = nil
end,
@ -125,6 +126,11 @@ local orig_calculate_joker = Card.calculate_joker
function Card:calculate_joker(context, ...)
local is_frozen = self.edition and self.edition.Roland_frozen
if is_frozen and self.ability.name == "Loyalty Card" then
return (context.joker_main and self.ability.loyalty_remaining == 0) and
{xmult = self.ability.extra.Xmult} or nil
end
if is_frozen and self.ability.name == "Turtle Bean" then
return
end
@ -188,6 +194,7 @@ q(function()
return
end
---@param card Card|{ Roland_frozen_estate: integer }
local function estate_pos(card)
if card.area ~= G.jokers and card.area.config.type ~= "title" then
return 1
@ -204,7 +211,6 @@ q(function()
local orig_calculate = estate.calculate
---@param card Card|{ Roland_frozen_ability: table, Roland_frozen_estate: integer }
function estate:calculate(card, context, ...)
if not card or not card.edition or not card.edition.Roland_frozen then
return orig_calculate(self, card, context, ...)
@ -239,25 +245,25 @@ q(function()
return
end
---@param card Card|{ Roland_frozen_proxy: number }
local function get_proxied_joker(card)
if not G.jokers or not G.jokers.cards then
return
end
local ability = freeze(card)
card.Roland_frozen_proxy = card.Roland_frozen_proxy or
(Bakery_API.get_proxied_joker() or card).unique_val
---@param v Card
local function eq(v)
return v.unique_val == ability.Roland_frozen_proxy
return v.unique_val == card.Roland_frozen_proxy
end
ability.Roland_frozen_proxy = (Bakery_API.get_proxied_joker() or card).unique_val
return f(G.jokers.cards):any(eq) ---@type Card?
end
local orig_calculate = proxy.calculate
---@param card Card|{ Roland_frozen_ability: table }
function proxy:calculate(card, context, ...)
if not card or not card.edition or not card.edition.Roland_frozen then
return orig_calculate(self, card, context, ...)
@ -284,3 +290,17 @@ q(function()
return {vars = {var}}
end
end)
q(function()
local orig_flip_double_sided = (Bakery_API or {}).flip_double_sided
if not orig_flip_double_sided then
return
end
function Bakery_API.flip_double_sided(card, ...)
if not card.edition or not card.edition.Roland_frozen then
return orig_flip_double_sided(card, ...)
end
end
end)

View file

@ -588,8 +588,16 @@ joker {
}
function SMODS.current_mod.reset_game_globals()
local immutable = f(SMODS.find_card "j_Roland_suitable"):any(is_frozen)
local suitable = {suit = "Spades"}
G.GAME.current_round.Roland_suitable = suitable
G.GAME.current_round.Roland_suitable = immutable and
G.GAME.current_round.Roland_suitable or suitable
if immutable then
return
end
local suits = f(G.playing_cards):where(SMODS.has_no_suit, false):table()
local card = pseudorandom_element(suits, "Roland_suitable" .. G.GAME.round_resets.ante)
suitable.suit = card and card.base.suit or suitable.suit
@ -680,7 +688,7 @@ joker {
eternal_compat = true,
blueprint_compat = true,
perishable_compat = true,
loc_vars = function(self, card, _)
loc_vars = function(self, _, card)
return {vars = {self:xmult_frozen(card)}}
end,
calculate = function(self, card, context)