Add probability freezing
This commit is contained in:
parent
2ff6b0a88e
commit
a142f2c4cc
3 changed files with 28 additions and 11 deletions
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue