Skip to content

Commit 7c810cc

Browse files
authored
Merge pull request #754 from SpectralPack/probability-stuff
Pre-emptive SMODS Probability Changes
2 parents f1ffe1c + 804455f commit 7c810cc

File tree

9 files changed

+223
-434
lines changed

9 files changed

+223
-434
lines changed

items/epic.lua

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,12 @@ local googol_play = {
210210
},
211211
},
212212
loc_vars = function(self, info_queue, card)
213+
local num, denom =
214+
SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds)
213215
return {
214216
vars = {
215-
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
216-
card.ability.extra.odds,
217+
num,
218+
denom,
217219
number_format(card.ability.extra.Xmult),
218220
number_format(card.ability.extra.Xmult_payout),
219221
},
@@ -222,9 +224,13 @@ local googol_play = {
222224
calculate = function(self, card, context)
223225
if context.joker_main then
224226
if
225-
pseudorandom("cry_googol_play")
226-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged)
227-
/ card.ability.extra.odds
227+
context.joker_main
228+
and SMODS.pseudorandom_probability(
229+
card,
230+
"cry_googol_play",
231+
1,
232+
card and card.ability.extra.odds or self.config.extra.odds
233+
)
228234
then
229235
return {
230236
message = localize({
@@ -883,10 +889,12 @@ local boredom = {
883889
cost = 14,
884890
blueprint_compat = true,
885891
loc_vars = function(self, info_queue, card)
892+
local num, denom =
893+
SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds)
886894
return {
887895
vars = {
888-
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
889-
card.ability.extra.odds,
896+
num,
897+
denom,
890898
},
891899
}
892900
end,
@@ -912,9 +920,12 @@ local boredom = {
912920
and card.cry_boredom_marked == context.other_card
913921
then
914922
if
915-
pseudorandom("cry_boredom_joker")
916-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged)
917-
/ card.ability.extra.odds
923+
SMODS.pseudorandom_element(
924+
card,
925+
"cry_boredom_joker",
926+
1,
927+
card and card.ability.extra.odds or self.config.extra.odds
928+
)
918929
then
919930
return {
920931
message = localize("k_again_ex"),
@@ -928,8 +939,12 @@ local boredom = {
928939
if
929940
context.repetition
930941
and context.cardarea == G.play
931-
and pseudorandom("cry_boredom_card")
932-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
942+
and SMODS.pseudorandom_element(
943+
card,
944+
"cry_boredom_card",
945+
1,
946+
card and card.ability.extra.odds or self.config.extra.odds
947+
)
933948
then
934949
return {
935950
message = localize("k_again_ex"),
@@ -1482,10 +1497,12 @@ local bonusjoker = {
14821497
enhancement_gate = "m_bonus",
14831498
loc_vars = function(self, info_queue, card)
14841499
info_queue[#info_queue + 1] = G.P_CENTERS.m_bonus
1500+
local num, denom =
1501+
SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds)
14851502
return {
14861503
vars = {
1487-
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
1488-
card.ability.extra.odds,
1504+
num,
1505+
denom,
14891506
number_format(math.min(card.ability.extra.add, card.ability.immutable.max)),
14901507
},
14911508
}
@@ -1495,8 +1512,12 @@ local bonusjoker = {
14951512
if context.individual and context.cardarea == G.play then
14961513
if SMODS.has_enhancement(context.other_card, "m_bonus") then
14971514
if
1498-
pseudorandom("bonusjoker")
1499-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
1515+
SMODS.pseudorandom_probability(
1516+
card,
1517+
"bonusjoker",
1518+
1,
1519+
card and card.ability.extra.odds or self.config.extra.odds
1520+
)
15001521
and card.ability.immutable.check < 2
15011522
and not context.retrigger_joker
15021523
then
@@ -1599,10 +1620,12 @@ local multjoker = {
15991620
loc_vars = function(self, info_queue, card)
16001621
info_queue[#info_queue + 1] = G.P_CENTERS.m_mult
16011622
info_queue[#info_queue + 1] = G.P_CENTERS.c_cryptid
1623+
local num, denom =
1624+
SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds)
16021625
return {
16031626
vars = {
1604-
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
1605-
card.ability.extra.odds,
1627+
num,
1628+
denom,
16061629
},
16071630
}
16081631
end,
@@ -1614,9 +1637,12 @@ local multjoker = {
16141637
and #G.consumeables.cards + G.GAME.consumeable_buffer < G.consumeables.config.card_limit
16151638
then
16161639
if
1617-
pseudorandom("multjoker")
1618-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged)
1619-
/ card.ability.extra.odds
1640+
SMODS.pseudorandom_probability(
1641+
card,
1642+
"multjoker",
1643+
1,
1644+
card and card.ability.extra.odds or self.config.extra.odds
1645+
)
16201646
then
16211647
G.GAME.consumeable_buffer = G.GAME.consumeable_buffer + 1
16221648
G.E_MANAGER:add_event(Event({

items/m.lua

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -538,10 +538,12 @@ local notebook = {
538538
demicoloncompat = true,
539539
loc_vars = function(self, info_queue, card)
540540
info_queue[#info_queue + 1] = G.P_CENTERS.j_jolly
541+
local num, denom =
542+
SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds)
541543
return {
542544
vars = {
543-
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
544-
card.ability.extra.odds,
545+
num,
546+
denom,
545547
number_format(card.ability.immutable.slots),
546548
number_format(card.ability.extra.active),
547549
number_format(card.ability.extra.jollies),
@@ -565,8 +567,12 @@ local notebook = {
565567
end
566568
if
567569
to_number(jollycount) >= to_number(card.ability.extra.jollies) --if there are 5 or more jolly jokers
568-
or pseudorandom("cry_notebook")
569-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged) / card.ability.extra.odds
570+
or SMODS.pseudorandom_element(
571+
card,
572+
"cry_notebook",
573+
1,
574+
card and card.ability.extra.odds or self.config.extra.odds
575+
)
570576
then
571577
card.ability.immutable.slots = to_number(
572578
math.min(
@@ -831,20 +837,25 @@ local scrabble = {
831837
if Cryptid.enabled("e_cry_m") == true then
832838
info_queue[#info_queue + 1] = G.P_CENTERS.e_cry_m
833839
end
840+
local num, denom =
841+
SMODS.get_probability_vars(card, 1, card and card.ability.extra.odds or self.config.extra.odds)
834842
return {
835843
vars = {
836-
cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged),
837-
card.ability.extra.odds,
844+
num,
845+
denom,
838846
},
839847
}
840848
end,
841849
calculate = function(self, card, context)
842850
if context.cardarea == G.jokers and context.before and not context.retrigger_joker then
843851
local check = false
844852
if
845-
pseudorandom("scrabbleother")
846-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds, card.ability.cry_rigged)
847-
/ card.ability.extra.odds
853+
SMODS.pseudorandom_element(
854+
card,
855+
"scrabbleother",
856+
1,
857+
card and card.ability.extra.odds or self.config.extra.odds
858+
)
848859
then
849860
if #G.jokers.cards + G.GAME.joker_buffer < G.jokers.config.card_limit then
850861
check = true

items/misc.lua

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ local echo = {
2424
pos = { x = 2, y = 0 },
2525
config = { retriggers = 2, extra = 2 },
2626
loc_vars = function(self, info_queue, card)
27+
local num, denom = SMODS.get_probability_vars(card, 1, card and card.ability.extra or self.config.extra)
2728
return {
2829
vars = {
2930
card and card.ability.retriggers or self.config.retriggers,
30-
card and cry_prob(card.ability.cry_prob or 1, card.ability.extra, card.ability.cry_rigged) or 1,
31-
card and card.ability.extra or self.config.extra,
31+
num,
32+
denom,
3233
},
33-
} -- note that the check for (card.ability.cry_prob or 1) is probably unnecessary due to cards being initialised with ability.cry_prob
34+
}
3435
end,
3536
calculate = function(self, card, context)
3637
if
3738
context.repetition
38-
and pseudorandom("echo")
39-
< cry_prob(card.ability.cry_prob or 1, card.ability.extra or 2, card.ability.cry_rigged) / (card.ability.extra or 2)
39+
and SMODS.pseudorandom_element(card, "cry_echo", 1, card and card.ability.extra or self.config.extra)
4040
then
4141
return {
4242
message = localize("k_again_ex"),
@@ -210,13 +210,23 @@ local abstract = {
210210
config = { extra = { Emult = 1.15, odds_after_play = 2, odds_after_round = 4, marked = false, survive = false } },
211211
--#1# emult, #2# in #3# chance card is destroyed after play, #4# in #5$ chance card is destroyed at end of round (even discarded or in deck)
212212
loc_vars = function(self, info_queue, card)
213+
local num1, denom1 = SMODS.get_probability_vars(
214+
card,
215+
1,
216+
card and card.ability.extra.odds_after_play or self.config.extra.odds_after_play
217+
)
218+
local num2, denom2 = SMODS.get_probability_vars(
219+
card,
220+
1,
221+
card and card.ability.extra.odds_after_round or self.config.extra.odds_after_round
222+
)
213223
return {
214224
vars = {
215225
card.ability.extra.Emult,
216-
cry_prob(card.ability.cry_prob, card.ability.extra.odds_after_play, card.ability.cry_rigged),
217-
card.ability.extra.odds_after_play,
218-
cry_prob(card.ability.cry_prob, card.ability.extra.odds_after_round, card.ability.cry_rigged),
219-
card.ability.extra.odds_after_round,
226+
num1,
227+
denom1,
228+
num2,
229+
denom2,
220230
},
221231
}
222232
end,
@@ -228,8 +238,12 @@ local abstract = {
228238
and not card.ability.extra.marked
229239
and not card.ability.eternal
230240
and not card.ability.extra.survive --this presvents repitition of shatter chance by shutting it out once it confirms to "survive"
231-
and pseudorandom("cry_abstract_destroy")
232-
< cry_prob(card.ability.cry_prob, card.ability.extra.odds_after_play, card.ability.cry_rigged) / card.ability.extra.odds_after_play
241+
and SMODS.pseudorandom_probability(
242+
card,
243+
"cry_abstract_destroy",
244+
1,
245+
card and card.ability.extra.odds_after_play or self.config.extra.odds_after_play
246+
)
233247
then -- the 'card.area' part makes sure the card has a chance to survive if in the play area
234248
card.ability.extra.marked = true
235249
elseif context.cardarea == G.play and not card.ability.extra.marked then
@@ -2534,9 +2548,12 @@ return {
25342548
function Card:calculate_abstract_break()
25352549
if self.config.center_key == "m_cry_abstract" and not self.ability.extra.marked then
25362550
if
2537-
pseudorandom("cry_abstract_destroy2")
2538-
< cry_prob(self.ability.cry_prob, self.ability.extra.odds_after_round, self.ability.cry_rigged)
2539-
/ self.ability.extra.odds_after_round
2551+
SMODS.pseudorandom_probability(
2552+
card,
2553+
"cry_abstract_destroy2",
2554+
1,
2555+
card and card.ability.extra.odds_after_round or self.config.extra.odds_after_round
2556+
)
25402557
then
25412558
self.ability.extra.marked = true
25422559
--KUFMO HAS abstract!!!!111!!!

0 commit comments

Comments
 (0)