Compare commits
No commits in common. "main" and "2.2.1" have entirely different histories.
3
.gitignore
vendored
|
|
@ -38,6 +38,3 @@ luac.out
|
||||||
*.i*86
|
*.i*86
|
||||||
*.x86_64
|
*.x86_64
|
||||||
*.hex
|
*.hex
|
||||||
|
|
||||||
# Syncthing
|
|
||||||
.stfolder
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 611 B |
|
|
@ -6,5 +6,4 @@ return {
|
||||||
import_funky = false,
|
import_funky = false,
|
||||||
no_highlight_limit = true,
|
no_highlight_limit = true,
|
||||||
no_wild_debuff = true,
|
no_wild_debuff = true,
|
||||||
scribable_basket = false,
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,14 @@ return {
|
||||||
"that are {C:dark_edition}debuffed #1# times",
|
"that are {C:dark_edition}debuffed #1# times",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
b_Roland_go = {
|
||||||
|
name = "Pass GO Deck",
|
||||||
|
text = {
|
||||||
|
"Start with a {C:attention}Credit Card",
|
||||||
|
"Set money to {C:money}$0 {}when",
|
||||||
|
"entering the shop",
|
||||||
|
},
|
||||||
|
},
|
||||||
b_Roland_swapper = {
|
b_Roland_swapper = {
|
||||||
name = "Swapper Deck",
|
name = "Swapper Deck",
|
||||||
text = {
|
text = {
|
||||||
|
|
@ -29,7 +37,7 @@ return {
|
||||||
BakeryCharm_Roland_fat = {
|
BakeryCharm_Roland_fat = {
|
||||||
name = "fat i phone",
|
name = "fat i phone",
|
||||||
text = {
|
text = {
|
||||||
"{C:attention}+#1# Booster Pack {}slots",
|
-- "{C:attention}+#1# Booster Pack {}slots",
|
||||||
"All {C:attention}Booster Packs {}are {C:attention}Mega",
|
"All {C:attention}Booster Packs {}are {C:attention}Mega",
|
||||||
"{C:inactive}(Whenever applicable)",
|
"{C:inactive}(Whenever applicable)",
|
||||||
},
|
},
|
||||||
|
|
@ -229,14 +237,6 @@ return {
|
||||||
name = "Ms. Joker",
|
name = "Ms. Joker",
|
||||||
text = {"{C:chips}+#1#{} Chips"},
|
text = {"{C:chips}+#1#{} Chips"},
|
||||||
},
|
},
|
||||||
j_Roland_nilly = {
|
|
||||||
name = "Nilly",
|
|
||||||
text = {
|
|
||||||
"Toggleable {X:mult,C:white}X0{} Mult",
|
|
||||||
"{C:inactive}(Currently {C:attention}#1#{C:inactive})",
|
|
||||||
"{C:inactive,s:0.75,E:1}Wait... what?",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
j_Roland_oops = {
|
j_Roland_oops = {
|
||||||
name = "Oops! All 7s",
|
name = "Oops! All 7s",
|
||||||
text = {
|
text = {
|
||||||
|
|
@ -320,10 +320,25 @@ return {
|
||||||
name = "Efflorescent Sleeve",
|
name = "Efflorescent Sleeve",
|
||||||
text = {
|
text = {
|
||||||
"{C:attention}Blinds{} are {C:dark_edition}debuffed",
|
"{C:attention}Blinds{} are {C:dark_edition}debuffed",
|
||||||
"{C:dark_edition}({X:dark_edition,C:white}(ante * #2#){C:dark_edition}) times",
|
"{C:dark_edition}({X:dark_edition,C:white}ante{} {X:dark_edition,C:white}number{C:dark_edition}) times",
|
||||||
"{C:inactive}(Instead of #1#)",
|
"{C:inactive}(Instead of #1#)",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
sleeve_Roland_go = {
|
||||||
|
name = "Pass GO Sleeve",
|
||||||
|
text = {
|
||||||
|
"Start with a {C:attention}Credit Card",
|
||||||
|
"Set money to {C:money}$0 {}when",
|
||||||
|
"entering the shop",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sleeve_Roland_go_alt = {
|
||||||
|
name = "Free Parking Sleeve",
|
||||||
|
text = {
|
||||||
|
"Start with an additional",
|
||||||
|
"{X:attention,C:white}#1#{C:attention} Credit Cards",
|
||||||
|
},
|
||||||
|
},
|
||||||
sleeve_Roland_swapper = {
|
sleeve_Roland_swapper = {
|
||||||
name = "Swapper Sleeve",
|
name = "Swapper Sleeve",
|
||||||
text = {
|
text = {
|
||||||
|
|
@ -381,12 +396,6 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Tag = {
|
|
||||||
tag_Roland_invisible = {
|
|
||||||
name = "Invisible Tag",
|
|
||||||
text = {"{C:attention}Duplicate {}a random Joker", "{C:inactive}(Must have room)"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
misc = {
|
misc = {
|
||||||
challenge_names = {
|
challenge_names = {
|
||||||
|
|
@ -395,7 +404,6 @@ return {
|
||||||
c_Roland_Eternally_Crimson = "Eternally Crimson",
|
c_Roland_Eternally_Crimson = "Eternally Crimson",
|
||||||
c_Roland_Eternally_Verdant = "Eternally Verdant",
|
c_Roland_Eternally_Verdant = "Eternally Verdant",
|
||||||
c_Roland_Eternally_Violet = "Eternally Violet",
|
c_Roland_Eternally_Violet = "Eternally Violet",
|
||||||
c_Roland_Go = "Pass GO",
|
|
||||||
c_Roland_Jokerful = "Jokerful",
|
c_Roland_Jokerful = "Jokerful",
|
||||||
c_Roland_Ornate = "Ornate",
|
c_Roland_Ornate = "Ornate",
|
||||||
c_Roland_Pastries = "Sweet Pastries",
|
c_Roland_Pastries = "Sweet Pastries",
|
||||||
|
|
@ -403,8 +411,6 @@ return {
|
||||||
},
|
},
|
||||||
v_dictionary = {
|
v_dictionary = {
|
||||||
b_Roland_bye = "Bye!",
|
b_Roland_bye = "Bye!",
|
||||||
b_Roland_disabled = "Disabled",
|
|
||||||
b_Roland_enabled = "Enabled",
|
|
||||||
b_Roland_comma = ", ",
|
b_Roland_comma = ", ",
|
||||||
b_Roland_debuffed = "DEBUFFED",
|
b_Roland_debuffed = "DEBUFFED",
|
||||||
b_Roland_entering_shop = "Entering shop!",
|
b_Roland_entering_shop = "Entering shop!",
|
||||||
|
|
@ -412,7 +418,6 @@ return {
|
||||||
b_Roland_fuse = "FUSE",
|
b_Roland_fuse = "FUSE",
|
||||||
b_Roland_equinox_assist = "Assist: Only hide text (Equinox)",
|
b_Roland_equinox_assist = "Assist: Only hide text (Equinox)",
|
||||||
b_Roland_fusable_escapey = "Fusable Escapey (overpowered)",
|
b_Roland_fusable_escapey = "Fusable Escapey (overpowered)",
|
||||||
b_Roland_scribable_basket = "Scribable Basket (overpowered)",
|
|
||||||
b_Roland_harsh_ante_scaling = "Harsh ante scaling (Ante 40+)",
|
b_Roland_harsh_ante_scaling = "Harsh ante scaling (Ante 40+)",
|
||||||
b_Roland_illusion_seal = "Allow seals from Illusion voucher",
|
b_Roland_illusion_seal = "Allow seals from Illusion voucher",
|
||||||
b_Roland_import_funky = "Debug: Import funky.lua",
|
b_Roland_import_funky = "Debug: Import funky.lua",
|
||||||
|
|
@ -421,7 +426,6 @@ return {
|
||||||
b_Roland_no_wild_debuff = "No wild card debuffs",
|
b_Roland_no_wild_debuff = "No wild card debuffs",
|
||||||
b_Roland_na = "N/A",
|
b_Roland_na = "N/A",
|
||||||
b_Roland_of = " of ",
|
b_Roland_of = " of ",
|
||||||
b_Roland_toggle = "TOGGLE",
|
|
||||||
},
|
},
|
||||||
labels = {
|
labels = {
|
||||||
Roland_frozen = "Frozen",
|
Roland_frozen = "Frozen",
|
||||||
|
|
@ -433,7 +437,6 @@ return {
|
||||||
ch_c_Roland_Eternally_Crimson = {"{C:attention}Crimson Heart{}'s effect is active every blind"},
|
ch_c_Roland_Eternally_Crimson = {"{C:attention}Crimson Heart{}'s effect is active every blind"},
|
||||||
ch_c_Roland_Eternally_Verdant = {"{C:attention}Verdant Leaf{}'s effect is active every blind"},
|
ch_c_Roland_Eternally_Verdant = {"{C:attention}Verdant Leaf{}'s effect is active every blind"},
|
||||||
ch_c_Roland_Eternally_Violet = {"{C:attention}Violet Vessel{}'s effect is active every blind"},
|
ch_c_Roland_Eternally_Violet = {"{C:attention}Violet Vessel{}'s effect is active every blind"},
|
||||||
ch_c_Roland_Go = {"Set money to {C:money}$0 {}when entering the shop"},
|
|
||||||
ch_c_Roland_Jokerful = {"The only jokers are {C:mult}Joker{} and {C:chips}Ms. Joker"},
|
ch_c_Roland_Jokerful = {"The only jokers are {C:mult}Joker{} and {C:chips}Ms. Joker"},
|
||||||
ch_c_Roland_Ornate = {"Anything vanilla is banned"},
|
ch_c_Roland_Ornate = {"Anything vanilla is banned"},
|
||||||
ch_c_Roland_Pastries = {"All blinds, cards, and tags are of {C:gold}Bakery{} or {C:blue}Roland"},
|
ch_c_Roland_Pastries = {"All blinds, cards, and tags are of {C:gold}Bakery{} or {C:blue}Roland"},
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
"author": [
|
"author": [
|
||||||
"Emik"
|
"Emik"
|
||||||
],
|
],
|
||||||
"version": "2.2.12",
|
"version": "2.2.1",
|
||||||
"badge_colour": "8BE9FD",
|
"badge_colour": "8BE9FD",
|
||||||
"main_file": "src/main.lua",
|
"main_file": "src/main.lua",
|
||||||
"badge_text_colour": "44475A",
|
"badge_text_colour": "44475A",
|
||||||
|
|
@ -15,8 +15,8 @@
|
||||||
"provides": [],
|
"provides": [],
|
||||||
"conflicts": [],
|
"conflicts": [],
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"Steamodded (>=1.0~*)",
|
"Steamodded (>=1.*)",
|
||||||
"Lovely (>=0.6)",
|
"Lovely (>=0.6)",
|
||||||
"Bakery (>=0.1.26~*)"
|
"Bakery (>=1.3.2~*)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
52
src/back.lua
|
|
@ -74,9 +74,8 @@ back {
|
||||||
key = "blossom",
|
key = "blossom",
|
||||||
pronouns = "any_all",
|
pronouns = "any_all",
|
||||||
config = {extra = {times = 2}},
|
config = {extra = {times = 2}},
|
||||||
attributes = {"boss_blind"},
|
|
||||||
loc_vars = function(self, _, _)
|
loc_vars = function(self, _, _)
|
||||||
return {vars = {self.config.extra.times, self.config.extra.alt_times}}
|
return {vars = {self.config.extra.times}}
|
||||||
end,
|
end,
|
||||||
apply = function(_, _)
|
apply = function(_, _)
|
||||||
G.GAME.modifiers.Roland_blossom_deck = true
|
G.GAME.modifiers.Roland_blossom_deck = true
|
||||||
|
|
@ -92,11 +91,9 @@ back {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local count = self:is_alt() and
|
local count = self:is_alt() and G.GAME.round_resets.ante or self.config.extra.times
|
||||||
G.GAME.round_resets.ante * self.config.extra.alt_times or
|
|
||||||
self.config.extra.times
|
|
||||||
|
|
||||||
f(count):each(function()
|
for _ = 1, count do
|
||||||
G.GAME.blind:disable()
|
G.GAME.blind:disable()
|
||||||
|
|
||||||
q {
|
q {
|
||||||
|
|
@ -107,20 +104,59 @@ back {
|
||||||
play_sound "timpani"
|
play_sound "timpani"
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
back {
|
||||||
|
key = "go",
|
||||||
|
pronouns = "he_him",
|
||||||
|
config = {extra = {times = 1, alt_times = 5}},
|
||||||
|
loc_vars = function(self, info_queue, _)
|
||||||
|
local _ = info_queue and table.insert(info_queue, G.P_CENTERS.j_credit_card)
|
||||||
|
return {vars = {self.config.extra.alt_times - self.config.extra.times}}
|
||||||
|
end,
|
||||||
|
apply = function(self)
|
||||||
|
q(function()
|
||||||
|
local count = self:is_alt() and self.config.extra.alt_times or self.config.extra.times
|
||||||
|
|
||||||
|
for _ = 1, count do
|
||||||
|
local c = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_credit_card", "Roland_go")
|
||||||
|
c:add_to_deck()
|
||||||
|
c:start_materialize()
|
||||||
|
G.jokers:emplace(c)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
|
calculate = function(_, card, context)
|
||||||
|
if not context.starting_shop then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
ease_dollars(-G.GAME.dollars)
|
||||||
|
|
||||||
|
attention_text {
|
||||||
|
text = localize "k_nope_ex",
|
||||||
|
backdrop_colour = G.C.MONEY,
|
||||||
|
offset = {x = 0, y = 0},
|
||||||
|
silent = true,
|
||||||
|
major = card,
|
||||||
|
align = "cm",
|
||||||
|
scale = 1.3,
|
||||||
|
hold = 1.4,
|
||||||
|
}
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
back {
|
back {
|
||||||
key = "swapper",
|
key = "swapper",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
attributes = {"spectral", "tarot"},
|
|
||||||
apply = function(self)
|
apply = function(self)
|
||||||
local modifiers = G.GAME.modifiers
|
local modifiers = G.GAME.modifiers
|
||||||
modifiers.Roland_swapper_deck = true
|
modifiers.Roland_swapper_deck = true
|
||||||
modifiers.Roland_alt_swapper_deck = modifiers.Roland_alt_swapper_deck or self:is_alt()
|
modifiers.Roland_alt_swapper_deck = modifiers.Roland_alt_swapper_deck or self:is_alt()
|
||||||
end,
|
end,
|
||||||
calculate = f().noop,
|
calculate = function() end,
|
||||||
}
|
}
|
||||||
|
|
||||||
local swapper = {Spectral = "Tarot", Tarot = "Spectral"}
|
local swapper = {Spectral = "Tarot", Tarot = "Spectral"}
|
||||||
|
|
|
||||||
|
|
@ -337,8 +337,6 @@ function SMODS.current_mod:calculate(context)
|
||||||
modifiers.Roland_martingale_seed = (modifiers.Roland_martingale_seed or 0) + 1
|
modifiers.Roland_martingale_seed = (modifiers.Roland_martingale_seed or 0) + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
local _ = type(G.calccontext) == "function" and G.calccontext(context)
|
|
||||||
local _ = type(G.calckeys) == "function" and G.calckeys(f(context):keys())
|
|
||||||
local _ = type(G.calc) == "function" and G.calc(f(context):keys():string())
|
local _ = type(G.calc) == "function" and G.calc(f(context):keys():string())
|
||||||
local improbable, orig = G.GAME.modifiers.Roland_improbable, G.GAME.probabilities
|
local improbable, orig = G.GAME.modifiers.Roland_improbable, G.GAME.probabilities
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,29 +52,6 @@ end
|
||||||
local jokerful, vanillas, pastries, amber, cerulean, crimson, verdant, violet, final
|
local jokerful, vanillas, pastries, amber, cerulean, crimson, verdant, violet, final
|
||||||
= bans(), bans(), bans(), bans(), bans(), bans(), bans(), bans(), bans()
|
= bans(), bans(), bans(), bans(), bans(), bans(), bans(), bans(), bans()
|
||||||
|
|
||||||
SMODS.Challenge {
|
|
||||||
key = "Go",
|
|
||||||
rules = {custom = {{id = "Roland_Go"}}},
|
|
||||||
jokers = {{id = "j_credit_card"}},
|
|
||||||
pronouns = "he_him",
|
|
||||||
calculate = function(self, context)
|
|
||||||
if context.starting_shop then
|
|
||||||
ease_dollars(-G.GAME.dollars)
|
|
||||||
|
|
||||||
attention_text {
|
|
||||||
text = localize "k_nope_ex",
|
|
||||||
backdrop_colour = G.C.MONEY,
|
|
||||||
offset = {x = 0, y = 0},
|
|
||||||
silent = true,
|
|
||||||
major = self,
|
|
||||||
align = "cm",
|
|
||||||
scale = 1.3,
|
|
||||||
hold = 1.4,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
SMODS.Challenge {
|
SMODS.Challenge {
|
||||||
key = "Jokerful",
|
key = "Jokerful",
|
||||||
rules = {custom = {{id = "Roland_Jokerful"}}},
|
rules = {custom = {{id = "Roland_Jokerful"}}},
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,6 @@ end
|
||||||
charm {
|
charm {
|
||||||
key = "wii",
|
key = "wii",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
attributes = {"skip"},
|
|
||||||
calculate = function(_, card, context)
|
calculate = function(_, card, context)
|
||||||
if not context.skip_blind then
|
if not context.skip_blind then
|
||||||
return
|
return
|
||||||
|
|
@ -117,17 +116,16 @@ end
|
||||||
charm {
|
charm {
|
||||||
key = "fat",
|
key = "fat",
|
||||||
pronouns = "he_they",
|
pronouns = "he_they",
|
||||||
attributes = {"passive"},
|
-- config = {extra = {mod = 1}},
|
||||||
config = {extra = {mod = 1}},
|
-- loc_vars = function(_, _, card)
|
||||||
loc_vars = function(_, _, card)
|
-- return {vars = {card.ability.extra.mod}}
|
||||||
return {vars = {card.ability.extra.mod}}
|
-- end,
|
||||||
end,
|
-- equip = function(_, card)
|
||||||
equip = function(_, card)
|
-- SMODS.change_booster_limit(card.ability.extra.mod)
|
||||||
SMODS.change_booster_limit(card.ability.extra.mod)
|
-- end,
|
||||||
end,
|
-- unequip = function(card)
|
||||||
unequip = function(card)
|
-- SMODS.change_booster_limit(-card.ability.extra.mod)
|
||||||
SMODS.change_booster_limit(-card.ability.extra.mod)
|
-- end,
|
||||||
end,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local orig_init = Card.init
|
local orig_init = Card.init
|
||||||
|
|
@ -162,7 +160,6 @@ end
|
||||||
charm {
|
charm {
|
||||||
key = "cocacola",
|
key = "cocacola",
|
||||||
pronouns = "he_they",
|
pronouns = "he_they",
|
||||||
attributes = {"passive", "tarot", "spectral"},
|
|
||||||
equip = function()
|
equip = function()
|
||||||
f(G.consumeables.cards):each(add_to_consumable_ability_by(1))
|
f(G.consumeables.cards):each(add_to_consumable_ability_by(1))
|
||||||
end,
|
end,
|
||||||
|
|
@ -187,7 +184,6 @@ charm {
|
||||||
key = "hand",
|
key = "hand",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
config = {extra = {hands = -2, hand_size = 5}},
|
config = {extra = {hands = -2, hand_size = 5}},
|
||||||
attributes = {"hands", "hand_size", "passive"},
|
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
local extra = card.ability.extra
|
local extra = card.ability.extra
|
||||||
return {vars = {extra.hand_size, extra.hands}}
|
return {vars = {extra.hand_size, extra.hands}}
|
||||||
|
|
|
||||||
|
|
@ -53,15 +53,10 @@ local function freeze(card)
|
||||||
|
|
||||||
card.Roland_frozen_ability = card.Roland_frozen_ability or copy(card.ability)
|
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.ability = card.Roland_frozen_ability and copy(card.Roland_frozen_ability) or card.ability
|
||||||
local ability, ret = card.ability, card.Roland_frozen_ability
|
local ret = card.Roland_frozen_ability
|
||||||
|
local ability = card.ability
|
||||||
|
|
||||||
if type(ability) ~= "table" then
|
if type(ability) ~= "table" or not ability.name or not G.GAME.current_round then
|
||||||
return ret
|
|
||||||
end
|
|
||||||
|
|
||||||
ability.seal = ability.seal or {}
|
|
||||||
|
|
||||||
if not ability.name or not G.GAME.current_round then
|
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -80,7 +75,6 @@ SMODS.Edition {
|
||||||
key = "frozen",
|
key = "frozen",
|
||||||
shader = "frozen",
|
shader = "frozen",
|
||||||
sound = {sound = "Roland_frozen", per = 1, vol = 0.8},
|
sound = {sound = "Roland_frozen", per = 1, vol = 0.8},
|
||||||
attributes = {"passive", "scaling"},
|
|
||||||
weight = 8,
|
weight = 8,
|
||||||
extra_cost = 4,
|
extra_cost = 4,
|
||||||
in_shop = true,
|
in_shop = true,
|
||||||
|
|
|
||||||
101
src/joker.lua
|
|
@ -12,19 +12,13 @@ local joker = (function()
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param tbl SMODS.Joker|{artist?: string, sinis?: boolean|{x: number, y: number}, soul_pos?: boolean|{x: number, y: number}, attributes?: Attributes[]}
|
---@param tbl SMODS.Joker|{artist?: string, sinis?: boolean|{x: number, y: number}, soul_pos?: boolean|{x: number, y: number}}
|
||||||
return function(tbl)
|
return function(tbl)
|
||||||
tbl.pos = inc()
|
tbl.pos = inc()
|
||||||
tbl.atlas = "joker"
|
tbl.atlas = "joker"
|
||||||
tbl.artist = tbl.artist and "Roland_" .. tbl.artist or nil
|
tbl.artist = tbl.artist and "Roland_" .. tbl.artist or nil
|
||||||
tbl.soul_pos = tbl.soul_pos and inc() or nil
|
tbl.soul_pos = tbl.soul_pos and inc() or nil
|
||||||
tbl.sinis = tbl.sinis and inc() or nil
|
tbl.sinis = tbl.sinis and inc() or nil
|
||||||
|
|
||||||
if ((tbl.config or {}).extra or {}).flipped ~= nil then
|
|
||||||
tbl.config.extra.front_pos = tbl.pos
|
|
||||||
tbl.config.extra.back_pos = inc()
|
|
||||||
end
|
|
||||||
|
|
||||||
local joker = SMODS.Joker(tbl)
|
local joker = SMODS.Joker(tbl)
|
||||||
|
|
||||||
q(function()
|
q(function()
|
||||||
|
|
@ -95,16 +89,10 @@ SMODS.Atlas {
|
||||||
py = 95,
|
py = 95,
|
||||||
}
|
}
|
||||||
|
|
||||||
SMODS.Sound {
|
|
||||||
key = "nilly",
|
|
||||||
path = "nilly.ogg",
|
|
||||||
}
|
|
||||||
|
|
||||||
joker {
|
joker {
|
||||||
key = "escapey",
|
key = "escapey",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
config = {extra = {hands = 2}},
|
config = {extra = {hands = 2}},
|
||||||
attributes = {"destroy_card", "tarot", "planet", "spectral", "tag"},
|
|
||||||
cost = 4,
|
cost = 4,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
sinis = true,
|
sinis = true,
|
||||||
|
|
@ -135,9 +123,6 @@ joker {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
calculate = function(self, card, context)
|
|
||||||
return context.forcetrigger and self.proc(card) or nil
|
|
||||||
end,
|
|
||||||
Bakery_can_use = function(self, card)
|
Bakery_can_use = function(self, card)
|
||||||
return not card.debuff and u() and (self.exchangable() or self.fusable(card))
|
return not card.debuff and u() and (self.exchangable() or self.fusable(card))
|
||||||
end,
|
end,
|
||||||
|
|
@ -149,6 +134,9 @@ joker {
|
||||||
"b_Roland_fuse" or "b_Roland_escape"),
|
"b_Roland_fuse" or "b_Roland_escape"),
|
||||||
}
|
}
|
||||||
end,
|
end,
|
||||||
|
calculate = function(self, card, context)
|
||||||
|
return context.forcetrigger and self.proc(card) or nil
|
||||||
|
end,
|
||||||
Bakery_use_joker = function(self, card)
|
Bakery_use_joker = function(self, card)
|
||||||
if card.debuff then
|
if card.debuff then
|
||||||
return
|
return
|
||||||
|
|
@ -248,7 +236,6 @@ joker {
|
||||||
blueprint_compat = true,
|
blueprint_compat = true,
|
||||||
perishable_compat = true,
|
perishable_compat = true,
|
||||||
config = {extra = {chips = 30}},
|
config = {extra = {chips = 30}},
|
||||||
attributes = {"chips"},
|
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
return {vars = {card.ability.extra.chips}}
|
return {vars = {card.ability.extra.chips}}
|
||||||
end,
|
end,
|
||||||
|
|
@ -263,7 +250,6 @@ joker {
|
||||||
pronouns = "she_her",
|
pronouns = "she_her",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
config = {extra = {xmult = 4, requirement = 4}},
|
config = {extra = {xmult = 4, requirement = 4}},
|
||||||
attributes = {"xmult"},
|
|
||||||
cost = G.P_CENTERS.j_mr_bones.cost - 1,
|
cost = G.P_CENTERS.j_mr_bones.cost - 1,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = false,
|
eternal_compat = false,
|
||||||
|
|
@ -298,7 +284,6 @@ joker {
|
||||||
key = "phytoestrogens",
|
key = "phytoestrogens",
|
||||||
pronouns = "she_her",
|
pronouns = "she_her",
|
||||||
config = {extra = {xmult = 0.25}},
|
config = {extra = {xmult = 0.25}},
|
||||||
attributes = {"mult", "xmult"},
|
|
||||||
cost = 8,
|
cost = 8,
|
||||||
rarity = 3,
|
rarity = 3,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -322,7 +307,6 @@ joker {
|
||||||
pronouns = "it_its",
|
pronouns = "it_its",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
config = {extra = {price = 4, hand_name = "Four of a Kind"}},
|
config = {extra = {price = 4, hand_name = "Four of a Kind"}},
|
||||||
attributes = {"sell_value", "scaling", "economy", "hand_type"},
|
|
||||||
cost = 4,
|
cost = 4,
|
||||||
rarity = 1,
|
rarity = 1,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -351,7 +335,6 @@ joker {
|
||||||
pronouns = "it_its",
|
pronouns = "it_its",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
config = {extra = {mult_gain = 4, hand_name = "Four of a Kind", mult = 0}},
|
config = {extra = {mult_gain = 4, hand_name = "Four of a Kind", mult = 0}},
|
||||||
attributes = {"mult", "scaling", "hand_type"},
|
|
||||||
cost = 4,
|
cost = 4,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -382,7 +365,6 @@ joker {
|
||||||
pronouns = "it_its",
|
pronouns = "it_its",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
config = {extra = {times = 4, hand_name = "Four of a Kind"}},
|
config = {extra = {times = 4, hand_name = "Four of a Kind"}},
|
||||||
attributes = {"generation", "hand_type"},
|
|
||||||
cost = 8,
|
cost = 8,
|
||||||
rarity = 3,
|
rarity = 3,
|
||||||
eternal_compat = false,
|
eternal_compat = false,
|
||||||
|
|
@ -410,7 +392,7 @@ joker {
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
f(extra.times):each(function()
|
for _ = 1, extra.times do
|
||||||
G.playing_card = (G.playing_card or 0) + 1
|
G.playing_card = (G.playing_card or 0) + 1
|
||||||
G.deck.config.card_limit = G.deck.config.card_limit + 1
|
G.deck.config.card_limit = G.deck.config.card_limit + 1
|
||||||
local chosen = pseudorandom_element(scored_cards, pseudoseed "Roland_trimino")
|
local chosen = pseudorandom_element(scored_cards, pseudoseed "Roland_trimino")
|
||||||
|
|
@ -420,7 +402,7 @@ joker {
|
||||||
copy:start_materialize()
|
copy:start_materialize()
|
||||||
table.insert(copied, copy)
|
table.insert(copied, copy)
|
||||||
table.insert(G.playing_cards, copy)
|
table.insert(G.playing_cards, copy)
|
||||||
end)
|
end
|
||||||
|
|
||||||
SMODS.calculate_effect({{message = localize "k_copied_ex", message_card = card}}, card)
|
SMODS.calculate_effect({{message = localize "k_copied_ex", message_card = card}}, card)
|
||||||
playing_card_joker_effects(copied)
|
playing_card_joker_effects(copied)
|
||||||
|
|
@ -436,7 +418,6 @@ joker {
|
||||||
key = "sunny",
|
key = "sunny",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
attributes = {"food", "on_sell"},
|
|
||||||
cost = 2,
|
cost = 2,
|
||||||
rarity = 1,
|
rarity = 1,
|
||||||
eternal_compat = false,
|
eternal_compat = false,
|
||||||
|
|
@ -496,7 +477,6 @@ joker {
|
||||||
joker {
|
joker {
|
||||||
key = "hardboiled",
|
key = "hardboiled",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
attributes = {"food", "editions", "modify_card", "on_sell"},
|
|
||||||
cost = 5,
|
cost = 5,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = false,
|
eternal_compat = false,
|
||||||
|
|
@ -520,7 +500,6 @@ joker {
|
||||||
joker {
|
joker {
|
||||||
key = "basket",
|
key = "basket",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
attributes = {"food", "generation", "on_sell"},
|
|
||||||
cost = 8,
|
cost = 8,
|
||||||
rarity = 3,
|
rarity = 3,
|
||||||
eternal_compat = false,
|
eternal_compat = false,
|
||||||
|
|
@ -546,7 +525,6 @@ joker {
|
||||||
key = "sapling",
|
key = "sapling",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
attributes = {"mult", "suit"},
|
|
||||||
cost = 4,
|
cost = 4,
|
||||||
rarity = 1,
|
rarity = 1,
|
||||||
config = {extra = {mult = 15, suits = 3}},
|
config = {extra = {mult = 15, suits = 3}},
|
||||||
|
|
@ -580,7 +558,6 @@ joker {
|
||||||
key = "yard",
|
key = "yard",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
config = {extra = {money = 2}},
|
config = {extra = {money = 2}},
|
||||||
attributes = {"economy"},
|
|
||||||
cost = 4,
|
cost = 4,
|
||||||
rarity = 1,
|
rarity = 1,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -598,7 +575,6 @@ joker {
|
||||||
joker {
|
joker {
|
||||||
key = "suitable",
|
key = "suitable",
|
||||||
pronouns = "she_they",
|
pronouns = "she_they",
|
||||||
attributes = {"suit", "passive", "hearts", "diamonds", "spades", "clubs"},
|
|
||||||
cost = 4,
|
cost = 4,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -609,12 +585,6 @@ joker {
|
||||||
local suit = (G.GAME.current_round.Roland_suitable or {}).suit or "Spades"
|
local suit = (G.GAME.current_round.Roland_suitable or {}).suit or "Spades"
|
||||||
return {vars = {localize(suit, "suits_plural"), colours = {G.C.SUITS[suit]}}}
|
return {vars = {localize(suit, "suits_plural"), colours = {G.C.SUITS[suit]}}}
|
||||||
end,
|
end,
|
||||||
add_to_deck = function()
|
|
||||||
G.GAME.modifiers.Roland_suitable = (G.GAME.modifiers.Roland_suitable or 0) + 1
|
|
||||||
end,
|
|
||||||
remove_from_deck = function()
|
|
||||||
G.GAME.modifiers.Roland_suitable = (G.GAME.modifiers.Roland_suitable or 0) - 1
|
|
||||||
end,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function SMODS.current_mod.reset_game_globals()
|
function SMODS.current_mod.reset_game_globals()
|
||||||
|
|
@ -636,9 +606,8 @@ end
|
||||||
local orig_get_enhancements = SMODS.get_enhancements
|
local orig_get_enhancements = SMODS.get_enhancements
|
||||||
|
|
||||||
function SMODS.get_enhancements(card, ...)
|
function SMODS.get_enhancements(card, ...)
|
||||||
if (G.GAME.modifiers.Roland_suitable or 0) <= 0 or
|
if not next(SMODS.find_card "j_Roland_suitable") or
|
||||||
card.base.suit ~= G.GAME.current_round.Roland_suitable.suit or
|
card.base.suit ~= G.GAME.current_round.Roland_suitable.suit then
|
||||||
(card.area ~= G.hand and card.area ~= G.play) then
|
|
||||||
return orig_get_enhancements(card, ...)
|
return orig_get_enhancements(card, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -651,7 +620,6 @@ joker {
|
||||||
key = "misfortune",
|
key = "misfortune",
|
||||||
pronouns = "she_they",
|
pronouns = "she_they",
|
||||||
artist = "char",
|
artist = "char",
|
||||||
attributes = {"discard", "generation", "seals"},
|
|
||||||
cost = 6,
|
cost = 6,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -671,8 +639,7 @@ joker {
|
||||||
joker {
|
joker {
|
||||||
key = "temple",
|
key = "temple",
|
||||||
pronouns = "any_all",
|
pronouns = "any_all",
|
||||||
config = {extra = {xmult = 2}},
|
config = {extra = {xmult = 1.5}},
|
||||||
attributes = {"xmult", "enhancements"},
|
|
||||||
cost = 6,
|
cost = 6,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -699,7 +666,6 @@ joker {
|
||||||
key = "jokersr",
|
key = "jokersr",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
config = {extra = {xmult = 1.25}},
|
config = {extra = {xmult = 1.25}},
|
||||||
attributes = {"xmult"},
|
|
||||||
cost = 2,
|
cost = 2,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -717,7 +683,6 @@ joker {
|
||||||
joker {
|
joker {
|
||||||
key = "bulldozer",
|
key = "bulldozer",
|
||||||
pronouns = "it_its",
|
pronouns = "it_its",
|
||||||
attributes = {"xmult"},
|
|
||||||
cost = 6,
|
cost = 6,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -756,7 +721,6 @@ joker {
|
||||||
key = "martingale",
|
key = "martingale",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
config = {extra = {odds = 2}},
|
config = {extra = {odds = 2}},
|
||||||
attributes = {"xmult", "chance"},
|
|
||||||
cost = 8,
|
cost = 8,
|
||||||
rarity = 2,
|
rarity = 2,
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
|
|
@ -805,7 +769,6 @@ joker {
|
||||||
cost = 7,
|
cost = 7,
|
||||||
rarity = 3,
|
rarity = 3,
|
||||||
config = {extra = {probability = 1, probability_mult = 2, reset = 1}},
|
config = {extra = {probability = 1, probability_mult = 2, reset = 1}},
|
||||||
attributes = {"hands", "mod_chance", "scaling"},
|
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
blueprint_compat = false,
|
blueprint_compat = false,
|
||||||
perishable_compat = true,
|
perishable_compat = true,
|
||||||
|
|
@ -836,58 +799,12 @@ joker {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
joker {
|
|
||||||
key = "nilly",
|
|
||||||
pronouns = "any_all",
|
|
||||||
config = {extra = {flipped = false}},
|
|
||||||
attributes = {"xmult"},
|
|
||||||
cost = 0,
|
|
||||||
rarity = 3,
|
|
||||||
eternal_compat = true,
|
|
||||||
blueprint_compat = true,
|
|
||||||
perishable_compat = true,
|
|
||||||
loc_vars = function(_, _, card)
|
|
||||||
return {
|
|
||||||
vars = {localize {
|
|
||||||
type = "variable",
|
|
||||||
key = card.ability.extra.flipped and "b_Roland_enabled" or "b_Roland_disabled",
|
|
||||||
}},
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
inject = function(...)
|
|
||||||
SMODS.Joker.inject(...)
|
|
||||||
Bakery_API.double_sided_jokers.j_Roland_nilly = true
|
|
||||||
end,
|
|
||||||
calculate = function(_, card, context)
|
|
||||||
if (not context.joker_main or not card.ability.extra.flipped) and not context.forcetrigger then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
mult = mod_mult(0)
|
|
||||||
update_hand_text({delay = 0}, {chips = hand_chips, mult = mult})
|
|
||||||
return {sound = "Roland_nilly", message = "0X " .. localize "k_mult", colour = G.C.MULT, card = card}
|
|
||||||
end,
|
|
||||||
Bakery_can_use = function(_, card)
|
|
||||||
return not card.debuff
|
|
||||||
end,
|
|
||||||
Bakery_use_button_text = function(_, card)
|
|
||||||
return localize {
|
|
||||||
type = "variable",
|
|
||||||
key = card.debuff and "b_Roland_debuffed" or "b_Roland_toggle",
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
Bakery_use_joker = function(_, card)
|
|
||||||
local _ = card.debuff or Bakery_API.flip_double_sided(card)
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
joker {
|
joker {
|
||||||
key = "arctic",
|
key = "arctic",
|
||||||
pronouns = "it_its",
|
pronouns = "it_its",
|
||||||
cost = 10,
|
cost = 10,
|
||||||
rarity = 3,
|
rarity = 3,
|
||||||
config = {extra = {repetitions = 1}},
|
config = {extra = {repetitions = 1}},
|
||||||
attributes = {"retrigger", "editions"},
|
|
||||||
eternal_compat = true,
|
eternal_compat = true,
|
||||||
blueprint_compat = true,
|
blueprint_compat = true,
|
||||||
perishable_compat = true,
|
perishable_compat = true,
|
||||||
|
|
|
||||||
|
|
@ -441,7 +441,7 @@ end
|
||||||
---@param func F|fun(v: V, k: K): boolean
|
---@param func F|fun(v: V, k: K): boolean
|
||||||
---@return boolean|V
|
---@return boolean|V
|
||||||
---@nodiscard
|
---@nodiscard
|
||||||
---@overload fun(self: F|{ [K]: V }, func: string?): boolean|V
|
---@overload fun(self: F|{ [K]: V }, func: string): boolean|V
|
||||||
function f:any(func)
|
function f:any(func)
|
||||||
func = type(func) == "string" and f.index(func) or func
|
func = type(func) == "string" and f.index(func) or func
|
||||||
|
|
||||||
|
|
@ -459,7 +459,7 @@ end
|
||||||
---@param func F|fun(v: V, k: K): boolean
|
---@param func F|fun(v: V, k: K): boolean
|
||||||
---@return boolean|V
|
---@return boolean|V
|
||||||
---@nodiscard
|
---@nodiscard
|
||||||
---@overload fun(self: F|{ [K]: V }, func: string?): boolean|V
|
---@overload fun(self: F|{ [K]: V }, func: string): boolean|V
|
||||||
function f:all(func)
|
function f:all(func)
|
||||||
func = type(func) == "string" and f.index(func) or func
|
func = type(func) == "string" and f.index(func) or func
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ local function protect_ev(fun)
|
||||||
return fun
|
return fun
|
||||||
end
|
end
|
||||||
|
|
||||||
---@alias Attributes "mult"|"chips"|"xmult"|"xchips"|"score"|"xscore"|"blindsize"|"xblindsize"|"balance"|"swap"|"retrigger"|"scaling"|"reset"|"suit"|"diamonds"|"hearts"|"spades"|"clubs"|"hand_type"|"rank"|"ace"|"two"|"three"|"four"|"five"|"six"|"seven"|"eight"|"nine"|"ten"|"jack"|"queen"|"king"|"face"|"economy"|"generation"|"destroy_card"|"hands"|"discard"|"hand_size"|"chance"|"joker_slot"|"mod_chance"|"copying"|"full_deck"|"passive"|"joker"|"tarot"|"planet"|"spectral"|"enhancements"|"seals"|"editions"|"tag"|"skip"|"modify_card"|"perma_bonus"|"prevents_death"|"boss_blind"|"reroll"|"on_sell"|"sell_value"|"food"|"space"
|
|
||||||
if false then
|
if false then
|
||||||
-- This allows for better type inference.
|
-- This allows for better type inference.
|
||||||
SMODS.Mods.Roland.config = require "config"
|
SMODS.Mods.Roland.config = require "config"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
local qol = assert(SMODS.load_file "src/lib/shared.lua")() or require "lib.shared"
|
local qol = assert(SMODS.load_file "src/lib/shared.lua")() or require "lib.shared"
|
||||||
local f, q = unpack(qol)
|
local f, q = unpack(qol)
|
||||||
|
|
||||||
f {"challenge", "spectral", "edition", "tweaks", "blind", "charm", "joker", "back", "seal", "tag"}:each(function(v)
|
f {"challenge", "spectral", "edition", "tweaks", "blind", "charm", "joker", "back", "seal"}:each(function(v)
|
||||||
assert(SMODS.load_file("src/" .. v .. ".lua"))(qol)
|
assert(SMODS.load_file("src/" .. v .. ".lua"))(qol)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
@ -61,7 +61,6 @@ function SMODS.current_mod.config_tab()
|
||||||
toggle "no_highlight_limit",
|
toggle "no_highlight_limit",
|
||||||
_G["Talisman"] and toggle "harsh_ante_scaling",
|
_G["Talisman"] and toggle "harsh_ante_scaling",
|
||||||
toggle "fusable_escapey",
|
toggle "fusable_escapey",
|
||||||
G.P_CENTERS.c_Bakery_Scribe and toggle "scribable_basket",
|
|
||||||
toggle "equinox_assist",
|
toggle "equinox_assist",
|
||||||
SMODS.Mods.DebugPlus and toggle "import_funky",
|
SMODS.Mods.DebugPlus and toggle "import_funky",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ SMODS.Seal {
|
||||||
key = "glass",
|
key = "glass",
|
||||||
atlas = "seal",
|
atlas = "seal",
|
||||||
pos = {x = 0, y = 0},
|
pos = {x = 0, y = 0},
|
||||||
attributes = {"destroy_card", "tag"},
|
|
||||||
badge_colour = HEX "a6a6a6ff",
|
badge_colour = HEX "a6a6a6ff",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
calculate = function(_, card, context)
|
calculate = function(_, card, context)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
local f, q, u = unpack(... or require "lib.shared")
|
local f, q, u = unpack(... or require "lib.shared")
|
||||||
|
|
||||||
|
local negative = {key = "e_negative_consumable", set = "Edition", config = {extra = 1}}
|
||||||
|
|
||||||
local spectral = (function()
|
local spectral = (function()
|
||||||
local x = 0
|
local x = 0
|
||||||
|
|
||||||
|
|
@ -38,10 +40,9 @@ spectral {
|
||||||
key = "afterimage",
|
key = "afterimage",
|
||||||
pronouns = "he_they",
|
pronouns = "he_they",
|
||||||
artist = "aster",
|
artist = "aster",
|
||||||
attributes = {"editions", "modify_card", "hand_size", "spectral"},
|
|
||||||
config = {extra = {amount = 1, hand = -2}},
|
config = {extra = {amount = 1, hand = -2}},
|
||||||
loc_vars = function(_, info_queue, card)
|
loc_vars = function(_, info_queue, card)
|
||||||
table.insert(info_queue, {key = "e_negative_playing_card", set = "Edition", config = {extra = 1}})
|
table.insert(info_queue, negative)
|
||||||
return {vars = {card.ability.extra.amount, card.ability.extra.hand}}
|
return {vars = {card.ability.extra.amount, card.ability.extra.hand}}
|
||||||
end,
|
end,
|
||||||
can_use = function(_, card)
|
can_use = function(_, card)
|
||||||
|
|
@ -70,7 +71,6 @@ spectral {
|
||||||
spectral {
|
spectral {
|
||||||
key = "coolheaded",
|
key = "coolheaded",
|
||||||
config = {extra = {amount = 1}},
|
config = {extra = {amount = 1}},
|
||||||
attributes = {"editions", "modify_card", "spectral"},
|
|
||||||
loc_vars = function(_, info_queue, card)
|
loc_vars = function(_, info_queue, card)
|
||||||
table.insert(info_queue, G.P_CENTERS.e_Roland_frozen)
|
table.insert(info_queue, G.P_CENTERS.e_Roland_frozen)
|
||||||
return {vars = {card.ability.extra.amount}}
|
return {vars = {card.ability.extra.amount}}
|
||||||
|
|
@ -96,7 +96,6 @@ spectral {
|
||||||
key = "dual",
|
key = "dual",
|
||||||
pronouns = "they_them",
|
pronouns = "they_them",
|
||||||
config = {extra = {amount = 2}},
|
config = {extra = {amount = 2}},
|
||||||
attributes = {"seal", "modify_card", "spectral"},
|
|
||||||
loc_vars = function(_, _, card)
|
loc_vars = function(_, _, card)
|
||||||
return {vars = {card.ability.extra.amount}}
|
return {vars = {card.ability.extra.amount}}
|
||||||
end,
|
end,
|
||||||
|
|
@ -110,7 +109,7 @@ spectral {
|
||||||
f(cards):take(card.ability.extra.amount):each(function(v)
|
f(cards):take(card.ability.extra.amount):each(function(v)
|
||||||
local seal
|
local seal
|
||||||
|
|
||||||
for _ = 1, 64 do
|
for _ = 1, 31 do
|
||||||
seal = SMODS.poll_seal {guaranteed = true}
|
seal = SMODS.poll_seal {guaranteed = true}
|
||||||
|
|
||||||
if seal ~= "Roland_glass" then
|
if seal ~= "Roland_glass" then
|
||||||
|
|
@ -127,7 +126,6 @@ spectral {
|
||||||
key = "mirror",
|
key = "mirror",
|
||||||
pronouns = "he_him",
|
pronouns = "he_him",
|
||||||
config = {extra = {amount = 1}},
|
config = {extra = {amount = 1}},
|
||||||
attributes = {"seal", "modify_card", "spectral"},
|
|
||||||
loc_vars = function(_, info_queue, card)
|
loc_vars = function(_, info_queue, card)
|
||||||
table.insert(info_queue, G.P_SEALS.Roland_glass)
|
table.insert(info_queue, G.P_SEALS.Roland_glass)
|
||||||
return {vars = {card.ability.extra.amount}}
|
return {vars = {card.ability.extra.amount}}
|
||||||
|
|
@ -149,9 +147,8 @@ local void = spectral {
|
||||||
soul_rate = 0.003,
|
soul_rate = 0.003,
|
||||||
soul_set = "Spectral",
|
soul_set = "Spectral",
|
||||||
config = {extra = {amount = 2}},
|
config = {extra = {amount = 2}},
|
||||||
attributes = {"destroy_card", "generation", "spectral"},
|
|
||||||
loc_vars = function(_, info_queue, card)
|
loc_vars = function(_, info_queue, card)
|
||||||
table.insert(info_queue, {key = "e_negative_consumable", set = "Edition", config = {extra = 1}})
|
table.insert(info_queue, negative)
|
||||||
table.insert(info_queue, G.P_CENTERS.c_cryptid)
|
table.insert(info_queue, G.P_CENTERS.c_cryptid)
|
||||||
return {vars = {card.ability.extra.amount}}
|
return {vars = {card.ability.extra.amount}}
|
||||||
end,
|
end,
|
||||||
|
|
@ -182,12 +179,12 @@ local void = spectral {
|
||||||
f(cards):each(destroy)
|
f(cards):each(destroy)
|
||||||
f(G.jokers.cards):each(calculate_joker)
|
f(G.jokers.cards):each(calculate_joker)
|
||||||
|
|
||||||
f(card.ability.extra.amount):each(function()
|
for _ = 1, card.ability.extra.amount do
|
||||||
local cryptid = create_card(nil, G.consumeables, nil, nil, nil, nil, "c_cryptid", "void")
|
local cryptid = create_card(nil, G.consumeables, nil, nil, nil, nil, "c_cryptid", "void")
|
||||||
cryptid:set_edition({negative = true}, true)
|
cryptid:set_edition({negative = true}, true)
|
||||||
cryptid:add_to_deck()
|
cryptid:add_to_deck()
|
||||||
G.consumeables:emplace(cryptid)
|
G.consumeables:emplace(cryptid)
|
||||||
end)
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
play_sound("Roland_void", 1, 0.7)
|
play_sound("Roland_void", 1, 0.7)
|
||||||
|
|
|
||||||
34
src/tag.lua
|
|
@ -1,34 +0,0 @@
|
||||||
SMODS.Atlas {
|
|
||||||
px = 34,
|
|
||||||
py = 34,
|
|
||||||
key = "tag",
|
|
||||||
path = "tag.png",
|
|
||||||
}
|
|
||||||
|
|
||||||
SMODS.Tag {
|
|
||||||
key = "invisible",
|
|
||||||
atlas = "tag",
|
|
||||||
min_ante = 2,
|
|
||||||
pos = {x = 0, y = 0},
|
|
||||||
apply = function(_, tag)
|
|
||||||
local modifiers = G.GAME.modifiers
|
|
||||||
|
|
||||||
if tag.triggered or
|
|
||||||
not next(G.jokers.cards) or
|
|
||||||
#G.jokers.cards + (modifiers.Roland_invisible or 0) >= G.jokers.config.card_limit then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
tag.triggered = true
|
|
||||||
modifiers.Roland_invisible = (modifiers.Roland_invisible or 0) + 1
|
|
||||||
|
|
||||||
tag:yep("!", G.C.GREY, function()
|
|
||||||
local copied = pseudorandom_element(G.jokers.cards, pseudoseed "Roland_invisible")
|
|
||||||
local copy = copy_card(copied)
|
|
||||||
G.jokers:emplace(copy)
|
|
||||||
copy:add_to_deck()
|
|
||||||
modifiers.Roland_invisible = (modifiers.Roland_invisible or 0) - 1
|
|
||||||
return true
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
@ -17,7 +17,9 @@ function CardArea:can_highlight(...)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Card:set_debuff(...)
|
function Card:set_debuff(...)
|
||||||
if SMODS.get_enhancements(self).m_wild and SMODS.Mods.Roland.config.no_wild_debuff then
|
if self.config and
|
||||||
|
self.config.center_key == "m_wild" and
|
||||||
|
SMODS.Mods.Roland.config.no_wild_debuff then
|
||||||
self.debuff = false
|
self.debuff = false
|
||||||
else
|
else
|
||||||
orig_set_debuff(self, ...)
|
orig_set_debuff(self, ...)
|
||||||
|
|
@ -114,7 +116,7 @@ end
|
||||||
local orig_get_blind_amount = get_blind_amount
|
local orig_get_blind_amount = get_blind_amount
|
||||||
|
|
||||||
---@param ante number
|
---@param ante number
|
||||||
---@return table|number
|
---@return number
|
||||||
local function blind(ante)
|
local function blind(ante)
|
||||||
return ante == 39 and 1e294 or (_G["to_number"] or f().id)(orig_get_blind_amount(ante))
|
return ante == 39 and 1e294 or (_G["to_number"] or f().id)(orig_get_blind_amount(ante))
|
||||||
end
|
end
|
||||||
|
|
@ -135,25 +137,10 @@ function get_blind_amount(ante, ...)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @type { constants?: { TEN: table }, new: (fun(self: self, arr?: number[], sign?: number, noNormalize?: boolean): table), pow: (fun(x: number, y: number): number) }
|
--- @type { constants?: { TEN: table }, new: (fun(self: self, arr?: number[], sign?: number, noNormalize?: boolean): table), pow: (fun(x: number, y: number): number) }
|
||||||
local big, rem = _G["Big"], tonumber(blind((ante % loop) + 1))
|
local big, rem = _G["Big"], (ante % loop) + 1
|
||||||
|
|
||||||
return ante / 15 >= loop and big:new(f(blind(ante - (loop * 15))):map(f().const(10)):table()) or
|
return ante / 15 >= loop and big:new(f(blind(ante - (loop * 15))):map(f().const(10)):table()) or
|
||||||
(ante / 9 >= loop and big:new(f(ante / loop - 8):map(f().const(10)):concat {rem}:table()) or
|
(ante / 9 >= loop and big:new(f(ante / loop - 8):map(f().const(10)):concat {blind(rem)}:table()) or
|
||||||
(ante / 2 >= loop and big:new {rem, ante / loop} or
|
(ante / 2 >= loop and big:new {blind(rem), ante / loop} or
|
||||||
(big.constants and big.constants.TEN or big:new {10}):pow(rem)))
|
(big.constants and big.constants.TEN or big:new {10}):pow(blind(rem))))
|
||||||
end
|
end
|
||||||
|
|
||||||
q(function()
|
|
||||||
if not G.P_CENTERS.c_Bakery_Scribe then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local orig_can_use = G.P_CENTERS.c_Bakery_Scribe.can_use
|
|
||||||
|
|
||||||
function G.P_CENTERS.c_Bakery_Scribe.can_use(...)
|
|
||||||
return orig_can_use(...) and
|
|
||||||
(SMODS.Mods.Roland.config.scribable_basket or f(G.jokers.highlighted):all(function(v)
|
|
||||||
return v.config.center.key ~= "j_Roland_basket"
|
|
||||||
end))
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
|
||||||