485 lines
16 KiB
Lua
485 lines
16 KiB
Lua
-- Enhanced has to be loaded near-last because of Jolly edition
|
|
-- Not localized for now - will be rewritten later
|
|
|
|
local atlasenhanced = {
|
|
object_type = "Atlas",
|
|
key = "atlasenhanced",
|
|
path = "atlasdeck.png",
|
|
px = 71,
|
|
py = 95,
|
|
}
|
|
|
|
packs_to_add = { atlasenhanced }
|
|
|
|
local typed_decks = {
|
|
-- {'mod_prefix', 'Type', 'Name of Deck', 'Name of Object', 'Object Key', 'Shader Name', 'Atlas', 'posX', 'posY', 'Flavour Text', 'Add Price Increase'},
|
|
-- eg. 'cry_' for Edition, Leave nil to construct Usually matches Leave nil to use All three of these are used Small subtext underneath If true, editions
|
|
-- Cryptid cards Enhancement, automatically from name object key as name for custom deck backs main text affect the price of
|
|
-- Leave empty Seal, object name Used instead for Should be nil for Leave nil to use default cards in shop
|
|
-- for vanilla Sticker, banned boss blind non-shader objects fallback
|
|
-- Suit on Suit decks
|
|
-- For stickers ONLY,
|
|
-- prefix must be included
|
|
-- if you use one
|
|
--
|
|
-- Vanilla
|
|
{ "", "Enhancement", "The Hierophant's Deck", "Bonus", "bonus", nil, "atlasenhanced", 3, 3, "" },
|
|
{ "", "Enhancement", "The Empress' Deck", "Mult", "mult", nil, "atlasenhanced", 2, 3, "" },
|
|
{ "", "Enhancement", "The Lovers' Deck", "Wild", "wild", nil, "atlasenhanced", 5, 3, "" },
|
|
{ "", "Enhancement", "Deck of Justice", "Glass", "glass", nil, "atlasenhanced", 4, 3, "" },
|
|
{ "", "Enhancement", "The Chariot's Deck", "Steel", "steel", nil, nil, 6, 1, "" },
|
|
{ "", "Enhancement", "Stoner's Deck", "Stone", "stone", nil, nil, 5, 0, "" },
|
|
{ "", "Enhancement", "The Devil's Deck", "Gold", "gold", nil, nil, 6, 0, "" },
|
|
{ "", "Enhancement", "The Magician's Deck", "Lucky", "lucky", nil, nil, 4, 1, "" },
|
|
|
|
{ "", "Edition", "Deck of Chips", "Foil", "foil", nil, nil, 0, 2, "" },
|
|
{ "", "Edition", "Deck of Mult", "Holographic", "holo", nil, nil, 0, 0, "" },
|
|
{ "", "Edition", "Deck of XMult", "Polychrome", "polychrome", nil, nil, 5, 2, "" },
|
|
{ "", "Edition", nil, "Negative", "negative", nil, nil, 5, 2, "" },
|
|
|
|
{ "", "Seal", "Talisman Deck", "Gold", "Gold", nil, nil, 1, 2, "" },
|
|
{ "", "Seal", "Déja Vu Deck", "Red", "Red", nil, nil, 0, 0, "" },
|
|
{ "", "Seal", "Trance Deck", "Blue", "Blue", nil, "atlasenhanced", 2, 2, "" },
|
|
{ "", "Seal", "Medium Deck", "Purple", "Purple", nil, "atlasenhanced", 1, 2, "" },
|
|
|
|
{ "", "Sticker", nil, "Eternal", "eternal", nil, "atlasenhanced", 5, 2, "" },
|
|
{ "", "Sticker", nil, "Perishable", "perishable", nil, "atlasenhanced", 0, 3, "" },
|
|
{ "", "Sticker", nil, "Rental", "rental", nil, "atlasenhanced", 1, 3, "" },
|
|
{ "", "Sticker", nil, "Pinned", "pinned", nil, "atlasenhanced", 0, 5, "" },
|
|
|
|
{ "", "Suit", "Deck of the Stars", "Diamonds", "window", nil, "atlasenhanced", 2, 1, "" },
|
|
{ "", "Suit", "Deck of the Sun", "Hearts", "head", nil, "atlasenhanced", 3, 1, "" },
|
|
{ "", "Suit", "Deck of the World", "Spades", "goad", nil, "atlasenhanced", 4, 1, "" },
|
|
{ "", "Suit", "Deck of the Moon", "Clubs", "club", nil, "atlasenhanced", 5, 1, "" },
|
|
|
|
-- Cryptid
|
|
-- todo: work with mod config better here
|
|
|
|
{ "cry", "Enhancement", "The Eclipse's Deck", "Echo", "echo", nil, "atlasenhanced", 1, 5, "" },
|
|
|
|
{ "cry", "Edition", nil, "Fragile", "glass", nil, nil, 5, 2, "" },
|
|
{ "cry", "Edition", nil, "Golden", "gold", nil, nil, 5, 2, "" },
|
|
{ "cry", "Edition", nil, "Noisy", "noisy", nil, nil, 5, 2, "" },
|
|
{ "cry", "Edition", nil, "Astral", "astral", nil, nil, 5, 2, "" },
|
|
{ "cry", "Edition", nil, "Blurred", "blur", nil, nil, 0, 0, "" },
|
|
{ "cry", "Edition", nil, "Mosaic", "mosaic", nil, nil, 5, 2, "" },
|
|
{ "cry", "Edition", nil, "Oversaturated", "oversat", nil, nil, 5, 2, "" },
|
|
{
|
|
"cry",
|
|
"Edition",
|
|
nil,
|
|
"Glitched",
|
|
"glitched",
|
|
nil,
|
|
nil,
|
|
5,
|
|
2,
|
|
"Wait, isn't this just Misprint Deck?",
|
|
},
|
|
|
|
{ "cry", "Seal", "Typhoon Deck", "Azure", "azure", nil, nil, 0, 2, "" },
|
|
|
|
{ "cry", "Sticker", nil, "Banana", "banana", nil, "atlasenhanced", 5, 4, "" },
|
|
}
|
|
|
|
if Cryptid.enabled["M Jokers"] then -- Crashes the game if M jokers are disabled if we don't add this separately
|
|
table.insert(typed_decks, 31, { "cry", "Edition", "Meck", "Jolly", "m", nil, nil, 5, 2, "" })
|
|
end
|
|
|
|
for i = 1, #typed_decks do
|
|
local deck = typed_decks[i]
|
|
|
|
local shader = nil
|
|
if deck[6] then
|
|
shader = deck[1] .. "_" .. deck[6]
|
|
if deck.no_prefix then
|
|
shader = deck[6]
|
|
end
|
|
end
|
|
|
|
local deck_name = deck[3]
|
|
if not deck_name then
|
|
deck_name = deck[4] .. " Deck"
|
|
end
|
|
|
|
local deck_internal_name = ""
|
|
if deck[1] == "cry" then -- don't register eg. 'cry-cry-Typhoon Deck'
|
|
deck_internal_name = "cry-" .. deck_name
|
|
else -- eg. 'cry-jen-Blood Deck'
|
|
deck_internal_name = "cry-" .. deck[1] .. "-" .. deck_name
|
|
end
|
|
|
|
local deck_key = ""
|
|
if deck[1] == "cry" then
|
|
deck_key = "cry" .. (deck[5] or deck[4]) .. "_deck"
|
|
else
|
|
deck_key = "cry" .. deck[1] .. "-" .. (deck[5] or deck[4]) .. "_deck"
|
|
end
|
|
|
|
local object_key = ""
|
|
if deck[1] == "" or deck.no_prefix then -- vanilla doesn't have a prefix, don't add the _
|
|
object_key = deck[5] or deck[4]
|
|
else
|
|
object_key = deck[1] .. "_" .. (deck[5] or deck[4])
|
|
end
|
|
|
|
local suit_key = ""
|
|
if deck[1] == "" or deck.no_prefix then
|
|
suit_key = deck[4]
|
|
else
|
|
suit_key = deck[1] .. "_" .. deck[4]
|
|
end
|
|
|
|
if deck[2] == "Edition" then
|
|
local obj = {
|
|
object_type = "Back",
|
|
name = deck_internal_name,
|
|
key = deck_key,
|
|
config = { cry_force_edition = object_key, cry_force_edition_shader = shader },
|
|
pos = { x = deck[8], y = deck[9] },
|
|
loc_txt = {
|
|
name = deck_name,
|
|
text = {
|
|
"All cards are {C:dark_edition,T:" .. object_key .. "}" .. deck[4] .. " Cards{}",
|
|
"Cards cannot change editions",
|
|
"{s:0.8,C:inactive}" .. deck[10],
|
|
},
|
|
},
|
|
}
|
|
if deck[7] then
|
|
obj.atlas = deck[7]
|
|
if string.find(deck[7], "_") then
|
|
obj.prefix_config = { atlas = false }
|
|
end
|
|
end
|
|
if not deck[11] then
|
|
obj.config.cry_no_edition_price = true
|
|
end
|
|
packs_to_add[#packs_to_add + 1] = obj
|
|
elseif deck[2] == "Enhancement" then
|
|
local obj = {
|
|
object_type = "Back",
|
|
name = deck_internal_name,
|
|
key = deck_key,
|
|
config = { cry_force_enhancement = "m_" .. object_key },
|
|
pos = { x = deck[8], y = deck[9] },
|
|
loc_txt = {
|
|
name = deck_name,
|
|
text = {
|
|
"All {C:attention}playing cards{}",
|
|
"are {C:attention,T:m_" .. object_key .. "}" .. deck[4] .. " Cards{}",
|
|
"Cards cannot change enhancements",
|
|
"{s:0.8,C:inactive}" .. deck[10],
|
|
},
|
|
},
|
|
}
|
|
|
|
if deck[7] then
|
|
obj.atlas = deck[7]
|
|
if string.find(deck[7], "_") then
|
|
obj.prefix_config = { atlas = false }
|
|
end
|
|
end
|
|
packs_to_add[#packs_to_add + 1] = obj
|
|
elseif deck[2] == "Seal" then
|
|
local obj = {
|
|
object_type = "Back",
|
|
name = deck_internal_name,
|
|
key = deck_key,
|
|
config = { cry_force_seal = object_key },
|
|
pos = { x = deck[8], y = deck[9] },
|
|
loc_txt = {
|
|
name = deck_name,
|
|
text = {
|
|
"All cards have a {C:dark_edition}" .. deck[4] .. " Seal{}",
|
|
"Cards cannot change seals",
|
|
"{s:0.8,C:inactive}" .. deck[10],
|
|
},
|
|
},
|
|
}
|
|
|
|
if deck[7] then
|
|
obj.atlas = deck[7]
|
|
if string.find(deck[7], "_") then
|
|
obj.prefix_config = { atlas = false }
|
|
end
|
|
end
|
|
packs_to_add[#packs_to_add + 1] = obj
|
|
elseif deck[2] == "Sticker" then
|
|
local obj = {
|
|
object_type = "Back",
|
|
name = deck_internal_name,
|
|
key = deck_key,
|
|
config = { cry_force_sticker = deck[5] }, -- stickers DON'T use object_key for SOME reason
|
|
pos = { x = deck[8], y = deck[9] },
|
|
loc_txt = {
|
|
name = deck_name,
|
|
text = {
|
|
"All cards are {C:attention}" .. deck[4] .. "{}",
|
|
"{s:0.8,C:inactive}" .. deck[10],
|
|
},
|
|
},
|
|
}
|
|
|
|
if deck[7] then
|
|
obj.atlas = deck[7]
|
|
if string.find(deck[7], "_") then
|
|
obj.prefix_config = { atlas = false }
|
|
end
|
|
end
|
|
packs_to_add[#packs_to_add + 1] = obj
|
|
elseif deck[2] == "Suit" then
|
|
local obj = {
|
|
object_type = "Back",
|
|
name = deck_internal_name,
|
|
key = deck_key,
|
|
config = { cry_force_suit = suit_key, cry_boss_blocked = deck[5] and { "bl_" .. object_key } },
|
|
pos = { x = deck[8], y = deck[9] },
|
|
loc_txt = {
|
|
name = deck_name,
|
|
text = {
|
|
"All playing cards are {C:dark_edition}" .. deck[4] .. "{}",
|
|
"and cannot change suits",
|
|
deck[10] or "{s:0}",
|
|
deck[5] and "{C:attention}The " .. string.upper(string.sub(deck[5], 1, 1)) .. string.sub(
|
|
deck[5],
|
|
2
|
|
) .. "{} cannot appear", -- UGLY hack
|
|
},
|
|
},
|
|
}
|
|
|
|
if deck[7] then
|
|
obj.atlas = deck[7]
|
|
if string.find(deck[7], "_") then
|
|
obj.prefix_config = { atlas = false }
|
|
end
|
|
end
|
|
packs_to_add[#packs_to_add + 1] = obj
|
|
end
|
|
end
|
|
|
|
return {
|
|
name = "Enhanced Decks",
|
|
init = function()
|
|
local Backapply_to_runRef = Back.apply_to_run
|
|
function Back.apply_to_run(self)
|
|
Backapply_to_runRef(self)
|
|
|
|
if self.effect.config.cry_force_enhancement then
|
|
if self.effect.config.cry_force_enhancement ~= "random" then
|
|
G.GAME.modifiers.cry_force_enhancement = self.effect.config.cry_force_enhancement
|
|
end
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
if self.effect.config.cry_force_enhancement == "random" then
|
|
local enh = {}
|
|
for i = 1, #G.P_CENTER_POOLS.Enhanced do
|
|
enh[#enh + 1] = G.P_CENTER_POOLS.Enhanced[i]
|
|
end
|
|
enh[#enh + 1] = "CCD"
|
|
local random_enhancement = pseudorandom_element(enh, pseudoseed("cry_ant_enhancement"))
|
|
if random_enhancement.key and G.P_CENTERS[random_enhancement.key] then
|
|
G.playing_cards[c]:set_ability(G.P_CENTERS[random_enhancement.key])
|
|
else
|
|
G.playing_cards[c]:set_ability(get_random_consumable("cry_ant_ccd", nil, true))
|
|
end
|
|
else
|
|
G.playing_cards[c]:set_ability(G.P_CENTERS[self.effect.config.cry_force_enhancement])
|
|
end
|
|
end
|
|
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
if self.effect.config.cry_force_edition then
|
|
if self.effect.config.cry_force_edition ~= "random" then
|
|
G.GAME.modifiers.cry_force_edition = self.effect.config.cry_force_edition
|
|
else
|
|
G.GAME.modifiers.cry_force_random_edition = true
|
|
end
|
|
for k, v in pairs(G.P_TAGS) do
|
|
if v.config and v.config.edition then
|
|
G.GAME.banned_keys[k] = true
|
|
end
|
|
end
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
local ed_table = {}
|
|
if self.effect.config.cry_force_edition == "random" then
|
|
local random_edition =
|
|
pseudorandom_element(G.P_CENTER_POOLS.Edition, pseudoseed("cry_ant_edition"))
|
|
while random_edition.key == "e_base" do
|
|
random_edition =
|
|
pseudorandom_element(G.P_CENTER_POOLS.Edition, pseudoseed("cry_ant_edition"))
|
|
end
|
|
ed_table[random_edition.key:sub(3)] = true
|
|
G.playing_cards[c]:set_edition(ed_table, true, true)
|
|
else
|
|
ed_table[self.effect.config.cry_force_edition] = true
|
|
G.playing_cards[c]:set_edition(ed_table, true, true)
|
|
end
|
|
end
|
|
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
if self.effect.config.cry_force_seal then
|
|
if self.effect.config.cry_force_seal ~= "random" then
|
|
G.GAME.modifiers.cry_force_seal = self.effect.config.cry_force_seal
|
|
end
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
if self.effect.config.cry_force_seal == "random" then
|
|
local random_seal =
|
|
pseudorandom_element(G.P_CENTER_POOLS.Seal, pseudoseed("cry_ant_seal"))
|
|
G.playing_cards[c]:set_seal(random_seal.key, true)
|
|
else
|
|
G.playing_cards[c]:set_seal(self.effect.config.cry_force_seal, true)
|
|
end
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
if self.effect.config.cry_force_sticker then
|
|
G.GAME.modifiers.cry_force_sticker = self.effect.config.cry_force_sticker
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
G.playing_cards[c].config.center.eternal_compat = true
|
|
G.playing_cards[c].config.center.perishable_compat = true
|
|
if
|
|
SMODS.Stickers[self.effect.config.cry_force_sticker]
|
|
and SMODS.Stickers[self.effect.config.cry_force_sticker].apply
|
|
then
|
|
SMODS.Stickers[self.effect.config.cry_force_sticker]:apply(G.playing_cards[c], true)
|
|
else
|
|
G.playing_cards[c]["set_" .. self.effect.config.cry_force_sticker](
|
|
G.playing_cards[c],
|
|
true
|
|
)
|
|
end
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
if self.effect.config.cry_force_suit then
|
|
G.GAME.modifiers.cry_force_suit = self.effect.config.cry_force_suit
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
G.playing_cards[c]:change_suit(self.effect.config.cry_force_suit)
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end
|
|
if self.effect.config.cry_boss_blocked then
|
|
for _, v in pairs(self.effect.config.cry_boss_blocked) do
|
|
G.GAME.bosses_used[v] = 1e308
|
|
end
|
|
end
|
|
if self.effect.config.cry_no_edition_price then
|
|
G.GAME.modifiers.cry_no_edition_price = true
|
|
end
|
|
end
|
|
local sa = Card.set_ability
|
|
function Card:set_ability(center, y, z)
|
|
--adding immutable to cards because
|
|
-- A they are hardcoded and unaffected by misprintize but still have a description that changes because of it
|
|
-- B so they ignore misprintize in order to keep vanilla descripton accurate (ex hack shouldn't be able to trigger more than once)
|
|
-- C so Gemini doesn't say they are compatible when they are not
|
|
-- D Invisible Joker
|
|
|
|
if center.name == "Fortune Teller"
|
|
or center.name == "Shoot the Moon"
|
|
or center.name == "Riff-raff"
|
|
or center.name == "Business Card"
|
|
or center.name == "Chaos the Clown"
|
|
or center.name == "Dusk"
|
|
or center.name == "Mime"
|
|
or center.name == "Hack"
|
|
or center.name == "Sock and Buskin"
|
|
or center.name == "Invisible Joker"
|
|
or center.name == "Swashbuckler"
|
|
or center.name == "Smeared Joker"
|
|
or center.name == "Certificate"
|
|
or center.name == "Mr. Bones"
|
|
or center.name == "Diet Cola"
|
|
or center.name == "Luchador"
|
|
or center.name == "Midas Mask"
|
|
or center.name == "Shortcut"
|
|
or center.name == "Seance"
|
|
or center.name == "Superposition"
|
|
or center.name == "Sixth Sense"
|
|
or center.name == "DNA"
|
|
or center.name == "Splash"
|
|
or center.name == "Supernova"
|
|
or center.name == "Pareidolia"
|
|
or center.name == "Raised Fist"
|
|
or center.name == "Marble Joker"
|
|
or center.name == "Four Fingers"
|
|
or center.name == "Joker Stencil"
|
|
or center.name == "Showman"
|
|
or center.name == "Blueprint"
|
|
or center.name == "Oops! All 6s"
|
|
or center.name == "Brainstorm"
|
|
or center.name == "Cartomancer"
|
|
or center.name == "Astronomer"
|
|
or center.name == "Burnt Joker"
|
|
or center.name == "Chicot"
|
|
or center.name == "Perkeo"
|
|
then
|
|
self.config.center.immutable = true
|
|
end
|
|
|
|
if center and center.set == "Enhanced" then
|
|
return sa(
|
|
self,
|
|
(not self.no_forced_enhancement and G.GAME.modifiers.cry_force_enhancement) and G.P_CENTERS[G.GAME.modifiers.cry_force_enhancement]
|
|
or center,
|
|
y,
|
|
z
|
|
)
|
|
else
|
|
return sa(self, center, y, z)
|
|
end
|
|
end
|
|
local se = Card.set_edition
|
|
function Card:set_edition(edition, y, z, force)
|
|
if not force then
|
|
return se(self, (not self.no_forced_edition and G.GAME.modifiers.cry_force_edition) and { [G.GAME.modifiers.cry_force_edition] = true } or edition, y, z)
|
|
end
|
|
return se(self, edition, y, z)
|
|
end
|
|
local ss = Card.set_seal
|
|
function Card:set_seal(seal, y, z)
|
|
return ss(self, not self.no_forced_seal and G.GAME.modifiers.cry_force_seal or seal, y, z)
|
|
end
|
|
local cs = Card.change_suit
|
|
function Card:change_suit(new_suit)
|
|
return cs(self, not self.no_forced_suit and G.GAME.modifiers.cry_force_suit or new_suit)
|
|
end
|
|
local sc = Card.set_cost
|
|
function Card:set_cost()
|
|
if self.edition and G.GAME.modifiers.cry_no_edition_price then
|
|
local m = cry_deep_copy(self.edition)
|
|
self.edition = nil
|
|
sc(self)
|
|
self.edition = m
|
|
else
|
|
sc(self)
|
|
end
|
|
end
|
|
end,
|
|
order = 1000000,
|
|
items = packs_to_add,
|
|
}
|