diff --git a/manifest.json b/manifest.json index 220d2d8..c4daf20 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "author": [ "Emik" ], - "version": "2.7.2", + "version": "2.7.3", "badge_colour": "8BE9FD", "main_file": "src/main.lua", "badge_text_colour": "44475A", diff --git a/src/edition.lua b/src/edition.lua index 41e23fd..ddc6c67 100644 --- a/src/edition.lua +++ b/src/edition.lua @@ -12,6 +12,7 @@ local function frozen_sound(suffix) end frozen_sound "_click" +local frozen_blocklist = {CardSleeve = true} local frozen_sounds = f(4):map(frozen_sound):map("key"):table() local needs_chip_mult_override = { @@ -51,8 +52,13 @@ local function freeze(card) end):table() or x end + if frozen_blocklist[(card.ability or {}).name] then + return card.ability + end + card.Roland_frozen_ability = card.Roland_frozen_ability or copy(card.ability) card.ability = card.Roland_frozen_ability and copy(card.Roland_frozen_ability) or card.ability + card.Roland_frozen_probability = card.Roland_frozen_probability or SMODS.get_probability_vars(card, 1, 1) local ability, ret = card.ability, card.Roland_frozen_ability if type(ability) ~= "table" then @@ -80,18 +86,21 @@ SMODS.Edition { key = "frozen", shader = "frozen", sound = {sound = "Roland_frozen", per = 1, vol = 0.8}, - attributes = {"passive", "scaling"}, + attributes = {"passive", "scaling", "mod_chance"}, weight = 8, extra_cost = 4, in_shop = true, apply_to_float = false, - calculate = function(_, card) - freeze(card) + calculate = function(_, card, context) + if not context.fix_probability and not context.mod_probability then + freeze(card) + end end, on_remove = function(card) card.Roland_frozen_proxy = nil card.Roland_frozen_estate = nil card.Roland_frozen_ability = nil + card.Roland_frozen_probability = nil end, get_weight = function(self) return G.GAME.edition_rate * self.weight @@ -193,6 +202,13 @@ function Card:calculate_dollar_bonus(...) return orig_calculate_dollar_bonus(self, ...) end +local orig_get_probability_vars = SMODS.get_probability_vars + +function SMODS.get_probability_vars(trigger_obj, ...) + local numerator, denominator = orig_get_probability_vars(trigger_obj, ...) + return trigger_obj and trigger_obj.Roland_frozen_probability or numerator, denominator +end + q(function() local estate = G.P_CENTERS.j_Bakery_Estate diff --git a/src/joker.lua b/src/joker.lua index d4770a7..52224c3 100644 --- a/src/joker.lua +++ b/src/joker.lua @@ -668,8 +668,8 @@ joker { blueprint_compat = true, perishable_compat = true, loc_vars = function(_, _, card) - local normal = G.GAME.probabilities.normal local odds = card.ability.extra.odds + local normal = SMODS.get_probability_vars(card, 1, odds, "RolandMartingaleLoc") local vars = {normal} for i = 0, 7 do @@ -683,23 +683,24 @@ joker { return end - local g, extra, numerator, xmult = G.GAME, card.ability.extra, 1, 1 + local extra, numerator, xmult = card.ability.extra, 1, 1 - if g.blind.name == "bl_mp_nemesis" then + if G.GAME.blind.name == "bl_mp_nemesis" then return {card = card, xmult = extra.odds} end - for _ = 1, 64 do - local key = "RolandMartingale" .. tostring(g.modifiers.Roland_martingale_seed or "") + for _ = 1, 256 do + local key = "RolandMartingale" .. tostring(G.GAME.modifiers.Roland_martingale_seed or "") if SMODS.pseudorandom_probability(card, self.key, 1, extra.odds, key) then break end - numerator = numerator * (extra.odds - g.probabilities.normal) + local other_key = "RolandMartingaleNumerator" + numerator = numerator * (extra.odds - SMODS.get_probability_vars(card, 1, extra.odds, other_key)) + xmult = xmult * extra.odds local message = number_format(numerator) .. "/" .. number_format(xmult) SMODS.calculate_effect({card = card, repetitions = 1, message = message, message_card = card}, card) - xmult = xmult * extra.odds end SMODS.calculate_effect({card = card, xmult = xmult}, card)