diff --git a/manifest.json b/manifest.json index 7f22cd2..ad2f9c2 100644 --- a/manifest.json +++ b/manifest.json @@ -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", diff --git a/src/edition.lua b/src/edition.lua index f739abd..62a0a1c 100644 --- a/src/edition.lua +++ b/src/edition.lua @@ -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) diff --git a/src/joker.lua b/src/joker.lua index bb7d8c4..9fb61cf 100644 --- a/src/joker.lua +++ b/src/joker.lua @@ -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)