Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

numerator flexibility #352

Merged
merged 3 commits into from
Jan 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cryptid.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
--- MOD_DESCRIPTION: Adds unbalanced ideas to Balatro.
--- BADGE_COLOUR: 708b91
--- DEPENDENCIES: [Talisman>=2.0.0-beta8, Steamodded>=1.0.0~ALPHA-1225a]
--- VERSION: 0.5.3b
--- VERSION: 0.5.3c
--- PRIORITY: 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

----------------------------------------------
Expand Down
12 changes: 6 additions & 6 deletions Items/CodeCards.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1475,7 +1475,7 @@ local alttab = {
can_bulk_use = true,
loc_vars = function(self, info_queue, card)
local ret = localize("k_none")
if G.GAME and G.GAME.blind then
if G.GAME and G.GAME.blind and G.GAME.blind.in_blind then
if G.GAME.blind:get_type() == 'Small' then
ret = localize{type = 'name_text', key = G.GAME.round_resets.blind_tags.Small, set = 'Tag'}
elseif G.GAME.blind:get_type() == 'Big' then
Expand All @@ -1487,7 +1487,7 @@ local alttab = {
return { vars = { ret } }
end,
can_use = function(self, card)
return G.GAME and G.GAME.blind
return G.GAME.blind and G.GAME.blind.in_blind
end,
use = function(self, card, area, copier)
local used_consumable = copier or card
Expand Down Expand Up @@ -1774,13 +1774,13 @@ local copypaste = {
pos = { x = 3, y = 4 },
order = 110,
immune_to_chemach = true,
config = { extra = { odds = 2, ckt = 0 } },
config = { extra = { odds = 2, ckt = 0 } }, -- what is a ckt
rarity = "cry_epic",
cost = 14,
blueprint_compat = true,
loc_vars = function(self, info_queue, center)
loc_vars = function(self, info_queue, card)
return {
vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), math.max(2, (center and center.ability.extra.odds or 2)) },
vars = { cry_prob(math.min(card.ability.extra.odds/2, card.ability.cry_prob), card.ability.extra.odds, card.ability.cry_rigged), card.ability.extra.odds }, -- this effectively prevents a copypaste from ever initially misprinting at above 50% odds. still allows rigging/oops
}
end,
atlas = "atlasepic",
Expand All @@ -1791,7 +1791,7 @@ local copypaste = {
and not context.consumeable.beginning_end
then
if #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit then
if pseudorandom("cry_copypaste_joker") < G.GAME.probabilities.normal / math.max(2, card.ability.extra.odds) then
if pseudorandom("cry_copypaste_joker") < cry_prob(math.min(card.ability.extra.odds/2, card.ability.cry_prob), card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds then
G.E_MANAGER:add_event(Event({
func = function()
local cards = copy_card(context.consumeable)
Expand Down
30 changes: 15 additions & 15 deletions Items/EpicJokers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,12 @@ local googol_play = {
blueprint_compat = true,
atlas = "atlasepic",
soul_pos = { x = 10, y = 0, extra = { x = 4, y = 0 } },
loc_vars = function(self, info_queue, center)
loc_vars = function(self, info_queue, card)
return {
vars = {
"" .. (G.GAME and G.GAME.probabilities.normal or 1),
center.ability.extra.odds,
center.ability.extra.Xmult,
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
card.ability.extra.odds,
card.ability.extra.Xmult,
},
}
end,
Expand All @@ -116,7 +116,7 @@ local googol_play = {
context.cardarea == G.jokers
and not context.before
and not context.after
and pseudorandom("cry_googol_play") < G.GAME.probabilities.normal / card.ability.extra.odds
and pseudorandom("cry_googol_play") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
then
return {
message = localize({ type = "variable", key = "a_xmult", vars = { card.ability.extra.Xmult } }),
Expand Down Expand Up @@ -540,13 +540,13 @@ local boredom = {
order = 32,
cost = 14,
blueprint_compat = true,
loc_vars = function(self, info_queue, center)
return { vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), center.ability.extra.odds } }
loc_vars = function(self, info_queue, card)
return { vars = { cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), card.ability.extra.odds } }
end,
atlas = "atlasepic",
calculate = function(self, card, context)
if context.retrigger_joker_check and not context.retrigger_joker and context.other_card ~= self then
if pseudorandom("cry_boredom_joker") < G.GAME.probabilities.normal / card.ability.extra.odds then
if pseudorandom("cry_boredom_joker") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds then
return {
message = localize("k_again_ex"),
repetitions = 1,
Expand All @@ -559,7 +559,7 @@ local boredom = {
if
context.repetition
and context.cardarea == G.play
and pseudorandom("cry_boredom_card") < G.GAME.probabilities.normal / card.ability.extra.odds
and pseudorandom("cry_boredom_card") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
then
return {
message = localize("k_again_ex"),
Expand Down Expand Up @@ -1010,16 +1010,16 @@ local bonusjoker = {
order = 75,
blueprint_compat = true,
enhancement_gate = "m_bonus",
loc_vars = function(self, info_queue, center)
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.m_bonus
return { vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), center.ability.extra.odds, center.ability.extra.add } }
return { vars = { cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), card.ability.extra.odds, card.ability.extra.add } }
end,
atlas = "atlasepic",
calculate = function(self, card, context)
if context.individual and context.cardarea == G.play then
if context.other_card.ability.effect == "Bonus Card" then
if
pseudorandom("bonusjoker") < G.GAME.probabilities.normal / math.min(1e8, card.ability.extra.odds)
pseudorandom("bonusjoker") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
and card.ability.extra.check < 2
and not context.retrigger_joker
then
Expand Down Expand Up @@ -1081,10 +1081,10 @@ local multjoker = {
cost = 11,
blueprint_compat = true,
enhancement_gate = "m_mult",
loc_vars = function(self, info_queue, center)
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.m_mult
info_queue[#info_queue + 1] = G.P_CENTERS.c_cryptid
return { vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), center.ability.extra.odds } }
return { vars = { cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), card.ability.extra.odds } }
end,
atlas = "atlasepic",
calculate = function(self, card, context)
Expand All @@ -1093,7 +1093,7 @@ local multjoker = {
context.other_card.ability.effect == "Mult Card"
and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit
then
if pseudorandom("multjoker") < G.GAME.probabilities.normal / card.ability.extra.odds then
if pseudorandom("multjoker") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds then
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
G.E_MANAGER:add_event(Event({
func = function()
Expand Down
24 changes: 12 additions & 12 deletions Items/M.lua
Original file line number Diff line number Diff line change
Expand Up @@ -413,20 +413,20 @@ local notebook = {
rarity = 3,
cost = 9,
perishable_compat = false,
loc_vars = function(self, info_queue, center)
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = {
set = "Joker",
key = "j_jolly",
specific_vars = { self.config.jolly.t_mult, localize(self.config.jolly.type, "poker_hands") },
}
return {
vars = {
"" .. (G.GAME and G.GAME.probabilities.normal or 1),
center.ability.extra.odds,
center.ability.extra.slot,
center.ability.extra.active,
center.ability.extra.jollies,
center.ability.extra.add,
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
card.ability.extra.odds,
card.ability.extra.slot,
card.ability.extra.active,
card.ability.extra.jollies,
card.ability.extra.add,
},
}
end,
Expand All @@ -448,7 +448,7 @@ local notebook = {
end
if
jollycount >= card.ability.extra.jollies --if there are 5 or more jolly jokers
or pseudorandom("cry_notebook") < G.GAME.probabilities.normal / card.ability.extra.odds
or pseudorandom("cry_notebook") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
then
card.ability.extra.slot = card.ability.extra.slot + card.ability.extra.add
G.jokers.config.card_limit = G.jokers.config.card_limit + card.ability.extra.add
Expand Down Expand Up @@ -657,20 +657,20 @@ local scrabble = {
cost = 8,
blueprint_compat = true,
atlas = "atlasone",
loc_vars = function(self, info_queue, center)
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = G.P_CENTERS.e_cry_m
return { vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), center.ability.extra.odds } }
return { vars = { cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), card.ability.extra.odds } }
end,
calculate = function(self, card, context)
if context.cardarea == G.jokers and context.before and not context.retrigger_joker then
local check = false
--if pseudorandom('scrabble') < G.GAME.probabilities.normal/card.ability.extra.odds then
--if pseudorandom('scrabble') < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged)/card.ability.extra.odds then
--check = true
--local card = create_card('Joker', G.jokers, nil, nil, nil, nil, 'j_jolly')
--card:add_to_deck()
--G.jokers:emplace(card)
--end
if pseudorandom("scrabbleother") < G.GAME.probabilities.normal / card.ability.extra.odds then
if pseudorandom("scrabbleother") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds then
check = true
local card = create_card("Joker", G.jokers, nil, 0.9, nil, nil, nil, "scrabbletile")
card:set_edition({ cry_m = true })
Expand Down
6 changes: 3 additions & 3 deletions Items/Misc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -956,8 +956,8 @@ local echo = {
atlas = "cry_misc",
pos = { x = 2, y = 0 },
config = { retriggers = 2, extra = 2 },
loc_vars = function(self, info_queue)
return { vars = { self.config.retriggers, G.GAME.probabilities.normal, self.config.extra } }
loc_vars = function(self, info_queue, card)
return { vars = { self.config.retriggers, card and cry_prob(card.ability.cry_prob, card.ability.extra, card.ability.cry_rigged) or 1, self.config.extra } } -- idk how this works
end,
}
local eclipse = {
Expand Down Expand Up @@ -1605,7 +1605,7 @@ return {
local total_repetitions = ret and ret.repetitions or 0

if self.config.center == G.P_CENTERS.m_cry_echo then
if pseudorandom("echo") < G.GAME.probabilities.normal / (self.ability.extra or 2) then --hacky crash fix
if pseudorandom("echo") < cry_prob(self.ability.cry_prob, self.ability.extra or 2, self.ability.cry_rigged) / (self.ability.extra or 2) then --hacky crash fix
total_repetitions = total_repetitions + self.ability.retriggers
end
end
Expand Down
32 changes: 16 additions & 16 deletions Items/MiscJokers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3393,7 +3393,7 @@ local rnjoker = {
or (card.ability.extra and card.ability.extra.value)
or 0,
card.ability.extra and card.ability.extra.cond_value or 0,
G.GAME and G.GAME.probabilities.normal or 1,
cry_prob(card.ability.cry_prob, card.ability.extra and card.ability.extra.cond_value or 0, card.ability.cry_rigged),
},
}
if card.ability.extra and card.ability.extra.color then
Expand Down Expand Up @@ -3626,7 +3626,7 @@ local rnjoker = {
elseif j.cond == "odds" then
if
pseudorandom("rnj")
< ((G.GAME and G.GAME.probabilities.normal or 1) / card.ability.extra.cond_value)
< (cry_prob(card.ability.cry_prob, card.ability.extra.cond_value, card.ability.cry_rigged) / card.ability.extra.cond_value)
then
cond_passed = true
end
Expand Down Expand Up @@ -3903,7 +3903,7 @@ local rnjoker = {
elseif j.cond == "odds" then
if
pseudorandom("rnj")
< ((G.GAME and G.GAME.probabilities.normal or 1) / card.ability.extra.cond_value)
< (cry_prob(card.ability.cry_prob, card.ability.extra.cond_value, card.ability.cry_rigged) / card.ability.extra.cond_value)
then
cond_passed = true
end
Expand Down Expand Up @@ -3987,7 +3987,7 @@ local rnjoker = {
elseif j.cond == "odds" then
if
pseudorandom("rnj")
< ((G.GAME and G.GAME.probabilities.normal or 1) / card.ability.extra.cond_value)
< (cry_prob(card.ability.cry_prob, card.ability.extra.cond_value, card.ability.cry_rigged) / card.ability.extra.cond_value)
then
cond_passed = true
end
Expand Down Expand Up @@ -4555,7 +4555,7 @@ local filler = {
key = "filler",
pos = { x = 0, y = 1 },
pools = {["Meme"] = true},
config = { Xmult = 1.00000000000002, type = "High Card" },
config = { Xmult = 1.00000000000003, type = "High Card" },
loc_vars = function(self, info_queue, card)
return { vars = { card.ability.x_mult, localize(card.ability.type, "poker_hands") } }
end,
Expand Down Expand Up @@ -5440,7 +5440,7 @@ local oldblueprint = {
loc_vars = function(self, info_queue, card)
card.ability.blueprint_compat_ui = card.ability.blueprint_compat_ui or ''; card.ability.blueprint_compat_check = nil
return {
vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), card.ability.extra.odds },
vars = { cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged), card.ability.extra.odds },
main_end = (card.area and card.area == G.jokers) and {
{n=G.UIT.C, config={align = "bm", minh = 0.4}, nodes={
{n=G.UIT.C, config={ref_table = card, align = "m", colour = G.C.JOKER_GREY, r = 0.05, padding = 0.06, func = 'blueprint_compat'}, nodes={
Expand All @@ -5461,7 +5461,7 @@ local oldblueprint = {
and not context.blueprint
and not context.retrigger_joker
then
if pseudorandom("oldblueprint") < G.GAME.probabilities.normal / card.ability.extra.odds then
if pseudorandom("oldblueprint") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds then
G.E_MANAGER:add_event(Event({
func = function()
play_sound("tarot1")
Expand Down Expand Up @@ -5631,15 +5631,15 @@ local busdriver = {
order = 46,
atlas = "atlasthree",
blueprint_compat = true,
loc_vars = function(self, info_queue, center)
local prob = (G.GAME and G.GAME.probabilities.normal or 1)
local oddy = math.max(1, center.ability.extra.odds)
loc_vars = function(self, info_queue, card)
local prob = cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged)
local oddy = math.max(1, card.ability.extra.odds)
return {
vars = {
"" .. ( oddy - 1/prob ),
center.ability.extra.mult,
( oddy - 1/prob ),
card.ability.extra.mult,
oddy,
"" .. ( 1/prob ),
( 1/prob ),
},
}
end,
Expand All @@ -5651,7 +5651,7 @@ local busdriver = {
and not context.after
then
local oddy = math.max(1, card.ability.extra.odds)
if pseudorandom("busdriver") < 1-(1/(G.GAME.probabilities.normal*oddy)) then
if pseudorandom("busdriver") < 1-(1/(cry_prob(card.ability.cry_prob, card.ability.extra.cond_value, card.ability.cry_rigged)*oddy)) then
return {
message = localize({ type = "variable", key = "a_mult", vars = { card.ability.extra.mult } }),
mult_mod = card.ability.extra.mult,
Expand Down Expand Up @@ -6770,7 +6770,7 @@ local digitalhallucinations = {
order = 130,
config = { odds = 2 },
loc_vars = function(self, info_queue, card)
return { vars = { G.GAME and G.GAME.probabilities.normal or 1, card.ability.odds } }
return { vars = { cry_prob(card.ability.cry_prob, card.ability.odds, card.ability.cry_rigged), card.ability.odds } }
end,
atlas = "atlasthree",
rarity = 2,
Expand All @@ -6781,7 +6781,7 @@ local digitalhallucinations = {
-- you know, i was totally ready to do something smart here but vanilla hardcodes this stuff, so i will too
-- some cards need to be handled slightly differently anyway, adding mod support can't really be automatic in some circumstances

if context.open_booster and (pseudorandom("digi") < G.GAME.probabilities.normal/card.ability.odds) then
if context.open_booster and (pseudorandom("digi") < cry_prob(card.ability.cry_prob, card.ability.extra.cond_value, card.ability.cry_rigged)/card.ability.odds) then
local boosty = context.card
local consums = {'Arcana', 'Celestial', 'Spectral'}
local short1 = {'tarot', 'planet', 'spectral'}
Expand Down
10 changes: 5 additions & 5 deletions Items/Planets.lua
Original file line number Diff line number Diff line change
Expand Up @@ -344,15 +344,15 @@ local planetlua = {
aurinko = true,
atlas = "atlasnotjokers",
order = 1,
loc_vars = function(self, info_queue, center)
return { vars = { "" .. (G.GAME and G.GAME.probabilities.normal or 1), self.config.extra.odds } }
loc_vars = function(self, info_queue, card)
return { vars = { card and cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) or 1, card and card.ability.extra.odds or self.config.extra.odds} }
end,
can_use = function(self, card)
return true
end,
use = function(self, card, area, copier)
local used_consumable = copier or card
if pseudorandom("planetlua") < G.GAME.probabilities.normal / card.ability.extra.odds then --Code "borrowed" from black hole
if pseudorandom("planetlua") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds then --Code "borrowed" from black hole
update_hand_text(
{ sound = "button", volume = 0.7, pitch = 0.8, delay = 0.3 },
{ handname = localize("k_all_hands"), chips = "...", mult = "...", level = "" }
Expand Down Expand Up @@ -495,7 +495,7 @@ local planetlua = {
else
for i = 1, number do
quota = quota
+ (pseudorandom("planetlua") < G.GAME.probabilities.normal / card.ability.extra.odds and 1 or 0)
+ (pseudorandom("planetlua") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds and 1 or 0)
end
if quota > 0 then
update_hand_text(
Expand Down Expand Up @@ -593,7 +593,7 @@ local planetlua = {
calculate = function(self, card, context) --Observatory effect: (G.GAME.probabilities.normal) in (odds) chance for (G.P_CENTERS.v_observatory.config.extra) Mult
if
G.GAME.used_vouchers.v_observatory
and (pseudorandom("nstar") < G.GAME.probabilities.normal / card.ability.extra.odds)
and (pseudorandom("nstar") < cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds)
then
local value = G.P_CENTERS.v_observatory.config.extra
return {
Expand Down
Loading