473 lines
14 KiB
Lua
473 lines
14 KiB
Lua
--Move all the stuff in here into atlasdeck.png later
|
|
--Also a lot of the edition decks have wrong proportions so those also need to get fixed
|
|
local atlasedition = {
|
|
object_type = "Atlas",
|
|
key = "atlaseditiondeck",
|
|
path = "atlaseditiondeck.png",
|
|
px = 71,
|
|
py = 95,
|
|
}
|
|
|
|
Cryptid.edeck_sprites = {
|
|
edition = {
|
|
order = 1,
|
|
default = { atlas = "cry_placeholders", pos = { x = 4, y = 2 } },
|
|
foil = { atlas = "cry_atlaseditiondeck", pos = { x = 0, y = 0 } },
|
|
holo = { atlas = "cry_atlaseditiondeck", pos = { x = 1, y = 0 } },
|
|
polychrome = { atlas = "cry_atlaseditiondeck", pos = { x = 2, y = 0 } },
|
|
negative = { atlas = "cry_atlaseditiondeck", pos = { x = 3, y = 0 } },
|
|
cry_glitched = { atlas = "cry_atlaseditiondeck", pos = { x = 4, y = 0 } },
|
|
cry_mosaic = { atlas = "cry_atlaseditiondeck", pos = { x = 0, y = 1 } },
|
|
cry_oversat = { atlas = "cry_atlaseditiondeck", pos = { x = 1, y = 1 } },
|
|
cry_glass = { atlas = "cry_atlaseditiondeck", pos = { x = 2, y = 1 } },
|
|
cry_gold = { atlas = "cry_atlaseditiondeck", pos = { x = 3, y = 1 } },
|
|
cry_blur = { atlas = "cry_atlaseditiondeck", pos = { x = 0, y = 2 } },
|
|
cry_noisy = { atlas = "cry_atlaseditiondeck", pos = { x = 1, y = 2 } },
|
|
cry_astral = { atlas = "cry_atlaseditiondeck", pos = { x = 2, y = 2 } },
|
|
cry_m = { atlas = "cry_atlaseditiondeck", pos = { x = 3, y = 2 } },
|
|
},
|
|
enhancement = {
|
|
order = 2,
|
|
default = { atlas = "cry_placeholders", pos = { x = 4, y = 2 } },
|
|
m_bonus = { atlas = "cry_atlasdeck", pos = { x = 3, y = 3 } },
|
|
m_mult = { atlas = "cry_atlasdeck", pos = { x = 2, y = 3 } },
|
|
m_wild = { atlas = "cry_atlasdeck", pos = { x = 5, y = 3 } },
|
|
m_glass = { atlas = "cry_atlasdeck", pos = { x = 4, y = 3 } },
|
|
m_steel = { atlas = "cry_atlasdeck", pos = { x = 8, y = 4 } },
|
|
m_stone = { atlas = "cry_atlasdeck", pos = { x = 6, y = 4 } },
|
|
m_gold = { atlas = "cry_atlasdeck", pos = { x = 7, y = 4 } },
|
|
m_lucky = { atlas = "cry_atlasdeck", pos = { x = 6, y = 3 } },
|
|
m_cry_echo = { atlas = "cry_atlasdeck", pos = { x = 1, y = 5 } },
|
|
m_cry_light = { atlas = "cry_atlasdeck", pos = { x = 7, y = 3 } },
|
|
},
|
|
sticker = {
|
|
order = 3,
|
|
default = { atlas = "cry_placeholders", pos = { x = 4, y = 2 } },
|
|
eternal = { atlas = "cry_atlasdeck", pos = { x = 6, y = 0 } },
|
|
perishable = { atlas = "cry_atlasdeck", pos = { x = 7, y = 0 } },
|
|
rental = { atlas = "cry_atlasdeck", pos = { x = 8, y = 0 } },
|
|
pinned = { atlas = "cry_atlasdeck", pos = { x = 7, y = 1 } },
|
|
banana = { atlas = "cry_atlasdeck", pos = { x = 6, y = 1 } },
|
|
cry_rigged = { atlas = "cry_atlasdeck", pos = { x = 8, y = 1 } },
|
|
cry_absolute = { atlas = "cry_atlasdeck", pos = { x = 8, y = 2 } },
|
|
cry_possessed = { atlas = "cry_atlasdeck", pos = { x = 7, y = 2 } },
|
|
cry_flickering = { atlas = "cry_atlasdeck", pos = { x = 6, y = 2 } },
|
|
},
|
|
suit = {
|
|
order = 4,
|
|
default = { atlas = "cry_placeholders", pos = { x = 4, y = 2 } },
|
|
Diamonds = { atlas = "cry_atlasdeck", pos = { x = 2, y = 1 } },
|
|
Hearts = { atlas = "cry_atlasdeck", pos = { x = 3, y = 1 } },
|
|
Spades = { atlas = "cry_atlasdeck", pos = { x = 4, y = 1 } },
|
|
Clubs = { atlas = "cry_atlasdeck", pos = { x = 5, y = 1 } },
|
|
},
|
|
seal = {
|
|
order = 5,
|
|
default = { atlas = "cry_placeholders", pos = { x = 4, y = 2 } },
|
|
Gold = { atlas = "cry_atlasdeck", pos = { x = 3, y = 2 } },
|
|
Red = { atlas = "cry_atlasdeck", pos = { x = 0, y = 2 } },
|
|
Blue = { atlas = "cry_atlasdeck", pos = { x = 2, y = 2 } },
|
|
Purple = { atlas = "cry_atlasdeck", pos = { x = 1, y = 2 } },
|
|
cry_azure = { atlas = "cry_atlasdeck", pos = { x = 8, y = 3 } },
|
|
cry_green = { atlas = "cry_atlasdeck", pos = { x = 3, y = 5 } },
|
|
},
|
|
}
|
|
|
|
Cryptid.edeck_atlas_update = function(self)
|
|
local sprite = Cryptid.edeck_sprites[self.edeck_type]
|
|
if not sprite then
|
|
error(self.edeck_type)
|
|
end
|
|
local enh_info = { Cryptid.enhanced_deck_info(self) }
|
|
sprite = sprite[enh_info[sprite.order]] or sprite.default
|
|
self.atlas, self.pos = sprite.atlas, sprite.pos
|
|
return sprite
|
|
end
|
|
|
|
local e_deck = {
|
|
object_type = "Back",
|
|
dependencies = {
|
|
items = {
|
|
"set_cry_deck",
|
|
},
|
|
},
|
|
name = "cry-Edition Deck",
|
|
key = "e_deck",
|
|
order = 17,
|
|
pos = { x = 5, y = 2 },
|
|
loc_vars = function(self, info_queue, center)
|
|
local aaa = Cryptid.enhanced_deck_info(self)
|
|
return { vars = { localize({ type = "name_text", set = "Edition", key = "e_" .. aaa }) } }
|
|
end,
|
|
edeck_type = "edition",
|
|
config = { cry_no_edition_price = true },
|
|
apply = function(self)
|
|
local aaa = Cryptid.enhanced_deck_info(self)
|
|
G.GAME.modifiers.cry_force_edition = aaa
|
|
--Ban Edition tags (They will never redeem)
|
|
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
|
|
G.playing_cards[c]:set_edition(aaa, true, true)
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end,
|
|
unlocked = false,
|
|
check_for_unlock = function(self, args)
|
|
if args.type == "discover_amount" then
|
|
if G.DISCOVER_TALLIES.editions.tally / G.DISCOVER_TALLIES.editions.of >= 1 then
|
|
unlock_card(self)
|
|
end
|
|
end
|
|
if args.type == "cry_lock_all" then
|
|
lock_card(self)
|
|
end
|
|
if args.type == "cry_unlock_all" then
|
|
unlock_card(self)
|
|
end
|
|
end,
|
|
}
|
|
local et_deck = {
|
|
object_type = "Back",
|
|
dependencies = {
|
|
items = {
|
|
"set_cry_deck",
|
|
},
|
|
},
|
|
name = "cry-Enhancement Deck",
|
|
key = "et_deck",
|
|
order = 18,
|
|
pos = { x = 5, y = 2 },
|
|
edeck_type = "enhancement",
|
|
config = {},
|
|
loc_vars = function(self, info_queue, center)
|
|
local _, bbb = Cryptid.enhanced_deck_info(self)
|
|
return { vars = { localize({ type = "name_text", set = "Enhanced", key = bbb }) } }
|
|
end,
|
|
apply = function(self)
|
|
local aaa, bbb = Cryptid.enhanced_deck_info(self)
|
|
G.GAME.modifiers.cry_force_enhancement = bbb
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
G.playing_cards[c]:set_ability(G.P_CENTERS[bbb])
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end,
|
|
draw = cry_edeck_draw,
|
|
unlocked = false,
|
|
check_for_unlock = function(self, args)
|
|
if args.cry_used_consumable == "c_cry_vacuum" then
|
|
unlock_card(self)
|
|
end
|
|
if args.type == "cry_lock_all" then
|
|
lock_card(self)
|
|
end
|
|
if args.type == "cry_unlock_all" then
|
|
unlock_card(self)
|
|
end
|
|
end,
|
|
}
|
|
local sk_deck = {
|
|
object_type = "Back",
|
|
dependencies = {
|
|
items = {
|
|
"set_cry_deck",
|
|
},
|
|
},
|
|
name = "cry-Sticker Deck",
|
|
key = "sk_deck",
|
|
order = 19,
|
|
pos = { x = 5, y = 2 },
|
|
edeck_type = "sticker",
|
|
config = {},
|
|
loc_vars = function(self, info_queue, center)
|
|
local _, _, ccc = Cryptid.enhanced_deck_info(self)
|
|
if ccc == "pinned" then
|
|
ccc = "pinned_left"
|
|
end
|
|
return { vars = { localize({ type = "name_text", set = "Other", key = ccc }) } }
|
|
end,
|
|
apply = function(self)
|
|
local aaa, bbb, ccc = Cryptid.enhanced_deck_info(self)
|
|
G.GAME.modifiers.cry_force_sticker = ccc
|
|
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[ccc] and SMODS.Stickers[ccc].apply then
|
|
SMODS.Stickers[ccc]:apply(G.playing_cards[c], true)
|
|
else
|
|
G.playing_cards[c]["set_" .. ccc](G.playing_cards[c], true)
|
|
end
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end,
|
|
unlocked = false,
|
|
check_for_unlock = function(self, args)
|
|
if args.cry_used_consumable == "c_cry_lock" then
|
|
unlock_card(self)
|
|
end
|
|
if args.type == "cry_lock_all" then
|
|
lock_card(self)
|
|
end
|
|
if args.type == "cry_unlock_all" then
|
|
unlock_card(self)
|
|
end
|
|
end,
|
|
}
|
|
local st_deck = {
|
|
object_type = "Back",
|
|
dependencies = {
|
|
items = {
|
|
"set_cry_deck",
|
|
},
|
|
},
|
|
name = "cry-Suit Deck",
|
|
key = "st_deck",
|
|
config = {},
|
|
order = 20,
|
|
pos = { x = 5, y = 2 },
|
|
edeck_type = "suit",
|
|
loc_vars = function(self, info_queue, center)
|
|
local _, _, _, ddd = Cryptid.enhanced_deck_info(self)
|
|
return { vars = { localize(ddd, "suits_plural") } }
|
|
end,
|
|
apply = function(self)
|
|
local aaa, bbb, ccc, ddd = Cryptid.enhanced_deck_info(self)
|
|
if ddd == "Spades" then
|
|
G.GAME.bosses_used["bl_goad"] = 1e308
|
|
elseif ddd == "Hearts" then
|
|
G.GAME.bosses_used["bl_head"] = 1e308
|
|
elseif ddd == "Clubs" then
|
|
G.GAME.bosses_used["bl_club"] = 1e308
|
|
elseif ddd == "Diamonds" then
|
|
G.GAME.bosses_used["bl_window"] = 1e308
|
|
end
|
|
G.GAME.modifiers.cry_force_suit = ddd
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
G.playing_cards[c]:change_suit(ddd)
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end,
|
|
unlocked = false,
|
|
check_for_unlock = function(self, args)
|
|
if args.cry_used_consumable == "c_cry_replica" then
|
|
unlock_card(self)
|
|
end
|
|
if args.type == "cry_lock_all" then
|
|
lock_card(self)
|
|
end
|
|
if args.type == "cry_unlock_all" then
|
|
unlock_card(self)
|
|
end
|
|
end,
|
|
}
|
|
local sl_deck = {
|
|
object_type = "Back",
|
|
dependencies = {
|
|
items = {
|
|
"set_cry_deck",
|
|
},
|
|
},
|
|
name = "cry-Seal Deck",
|
|
key = "sl_deck",
|
|
order = 21,
|
|
pos = { x = 5, y = 2 },
|
|
config = {},
|
|
edeck_type = "seal",
|
|
loc_vars = function(self, info_queue, center)
|
|
local _, _, _, _, eee = Cryptid.enhanced_deck_info(self)
|
|
return { vars = { localize({ type = "name_text", set = "Other", key = eee:lower() .. "_seal" }) } }
|
|
end,
|
|
apply = function(self)
|
|
local aaa, bbb, ccc, ddd, eee = Cryptid.enhanced_deck_info(self)
|
|
G.GAME.modifiers.cry_force_seal = eee
|
|
G.E_MANAGER:add_event(Event({
|
|
func = function()
|
|
for c = #G.playing_cards, 1, -1 do
|
|
G.playing_cards[c]:set_seal(eee, true)
|
|
end
|
|
return true
|
|
end,
|
|
}))
|
|
end,
|
|
unlocked = false,
|
|
check_for_unlock = function(self, args)
|
|
if args.cry_used_consumable == "c_cry_typhoon" then
|
|
unlock_card(self)
|
|
end
|
|
if args.type == "cry_lock_all" then
|
|
lock_card(self)
|
|
end
|
|
if args.type == "cry_unlock_all" then
|
|
unlock_card(self)
|
|
end
|
|
end,
|
|
}
|
|
|
|
return {
|
|
name = "Enhanced Decks",
|
|
init = function()
|
|
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
|
|
and center.name
|
|
== ("Fortune Teller" or "Shoot the Moon" or "Riff-raff" or "Chaos the Clown" or "Dusk" or "Mime" or "Hack" or "Sock and Buskin" or "Invisible Joker" or "Swashbuckler" or "Smeared Joker" or "Certificate" or "Mr. Bones" or "Diet Cola" or "Luchador" or "Midas Mask" or "Shortcut" or "Seance" or "Superposition" or "Sixth Sense" or "DNA" or "Splash" or "Supernova" or "Pareidolia" or "Raised Fist" or "Marble Joker" or "Four Fingers" or "Joker Stencil" or "Showman" or "Blueprint" or "Oops! All 6s" or "Brainstorm" or "Cartomancer" or "Astronomer" or "Burnt Joker" or "Chicot" or "Perkeo")
|
|
then
|
|
self.config.center.immutable = true
|
|
end
|
|
if Cryptid.safe_get(center, "name") == "Default Base" then -- scuffed
|
|
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 ccl = Card.click
|
|
function Card:click()
|
|
ccl(self)
|
|
if
|
|
Galdur
|
|
and Cryptid.safe_get(Galdur, "run_setup", "current_page") == 1
|
|
and (self.edeck_select or (self.area == Cryptid.safe_get(Galdur, "run_setup", "selected_deck_area") and Cryptid.safe_get(
|
|
self,
|
|
"config",
|
|
"center",
|
|
"edeck_type"
|
|
)))
|
|
or not Galdur
|
|
and (Cryptid.safe_get(G.GAME, "viewed_back", "effect", "center", "edeck_type") and (self.back == "viewed_back" or self.edeck_select))
|
|
then
|
|
if not G.cry_edeck_select then
|
|
Cryptid.enhancement_config_UI(Galdur and self.config.center or G.GAME.viewed_back.effect.center)
|
|
G.cry_edeck_select = true
|
|
else
|
|
if self.edeck_select then
|
|
G.PROFILES[G.SETTINGS.profile]["cry_edeck_" .. self.config.center.edeck_type] =
|
|
self.edeck_select
|
|
end
|
|
G.FUNCS.overlay_menu({
|
|
definition = G.UIDEF.run_setup("main_menu_play"),
|
|
})
|
|
G.cry_edeck_select = nil
|
|
end
|
|
end
|
|
end
|
|
function Cryptid.enhancement_config_UI(center)
|
|
if not center.edeck_type then
|
|
return
|
|
end
|
|
G.SETTINGS.paused = true
|
|
G.your_collection = {}
|
|
G.your_collection[1] = CardArea(
|
|
G.ROOM.T.x + 0.2 * G.ROOM.T.w / 2,
|
|
G.ROOM.T.h,
|
|
5.3 * G.CARD_W,
|
|
1.03 * G.CARD_H,
|
|
{ card_limit = 5, type = "title", highlight_limit = 0, collection = true }
|
|
)
|
|
local deck_tables = {
|
|
n = G.UIT.R,
|
|
config = { align = "cm", padding = 0, no_fill = true },
|
|
nodes = {
|
|
{ n = G.UIT.O, config = { object = G.your_collection[1] } },
|
|
},
|
|
}
|
|
|
|
local pool_table = {
|
|
edition = G.P_CENTER_POOLS.Edition,
|
|
enhancement = G.P_CENTER_POOLS.Enhanced,
|
|
sticker = SMODS.Stickers,
|
|
suit = SMODS.Suits,
|
|
seal = G.P_SEALS,
|
|
}
|
|
local editions = {}
|
|
for _, v in pairs(pool_table[center.edeck_type]) do
|
|
if v.key ~= "e_base" and not v.no_edeck then
|
|
editions[#editions + 1] = (center.edeck_type == "edition" and v.key:sub(3)) or v.key
|
|
end
|
|
end
|
|
|
|
for i = 1, #editions do
|
|
local _center = Cryptid.deep_copy(center)
|
|
_center.config["cry_force_" .. center.edeck_type] = editions[i]
|
|
Cryptid.edeck_atlas_update(_center)
|
|
local card = Cryptid.generic_card(_center)
|
|
card.edeck_select = editions[i]
|
|
G.your_collection[1]:emplace(card)
|
|
end
|
|
|
|
INIT_COLLECTION_CARD_ALERTS()
|
|
|
|
local t = create_UIBox_generic_options({
|
|
--infotip = localize("cry_gameset_explanation"),
|
|
back_func = "setup_run",
|
|
snap_back = true,
|
|
contents = {
|
|
{
|
|
n = G.UIT.R,
|
|
config = { align = "cm", minw = 2.5, padding = 0.1, r = 0.1, colour = G.C.BLACK, emboss = 0.05 },
|
|
nodes = { deck_tables },
|
|
},
|
|
},
|
|
})
|
|
G.FUNCS.overlay_menu({
|
|
definition = t,
|
|
})
|
|
end
|
|
end,
|
|
items = { e_deck, et_deck, sk_deck, st_deck, sl_deck, atlasedition },
|
|
}
|