445 lines
13 KiB
Lua
445 lines
13 KiB
Lua
local atlasenhanced = {
|
|
object_type = "Atlas",
|
|
key = "atlasenhanced",
|
|
path = "atlasdeck.png",
|
|
px = 71,
|
|
py = 95,
|
|
}
|
|
local atlasedition = {
|
|
object_type = "Atlas",
|
|
key = "atlaseditiondeck",
|
|
path = "atlaseditiondeck.png",
|
|
px = 71,
|
|
py = 95,
|
|
}
|
|
|
|
Cryptid.edeck_sprites = {
|
|
edition = {
|
|
order = 1,
|
|
default = { atlas = "centers", pos = { x = 5, 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_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 = "centers", pos = { x = 5, y = 2 } },
|
|
m_bonus = { atlas = "cry_atlasenhanced", pos = { x = 3, y = 3 } },
|
|
m_mult = { atlas = "cry_atlasenhanced", pos = { x = 2, y = 3 } },
|
|
m_wild = { atlas = "cry_atlasenhanced", pos = { x = 5, y = 3 } },
|
|
m_glass = { atlas = "cry_atlasenhanced", pos = { x = 4, y = 3 } },
|
|
m_steel = { atlas = "centers", pos = { x = 6, y = 1 } },
|
|
m_stone = { atlas = "centers", pos = { x = 5, y = 0 } },
|
|
m_gold = { atlas = "centers", pos = { x = 6, y = 0 } },
|
|
m_lucky = { atlas = "centers", pos = { x = 4, y = 1 } },
|
|
m_cry_echo = { atlas = "cry_atlasenhanced", pos = { x = 1, y = 5 } },
|
|
m_cry_light = { atlas = "cry_misc", pos = { x = 0, y = 3 } },
|
|
},
|
|
sticker = {
|
|
order = 3,
|
|
default = { atlas = "centers", pos = { x = 5, y = 2 } },
|
|
eternal = { atlas = "cry_atlasenhanced", pos = { x = 5, y = 2 } },
|
|
perishable = { atlas = "cry_atlasenhanced", pos = { x = 0, y = 3 } },
|
|
rental = { atlas = "cry_atlasenhanced", pos = { x = 1, y = 3 } },
|
|
pinned = { atlas = "cry_atlasenhanced", pos = { x = 0, y = 5 } },
|
|
banana = { atlas = "cry_atlasenhanced", pos = { x = 5, y = 4 } },
|
|
},
|
|
suit = {
|
|
order = 4,
|
|
default = { atlas = "centers", pos = { x = 5, y = 2 } },
|
|
Diamonds = { atlas = "cry_atlasenhanced", pos = { x = 2, y = 1 } },
|
|
Hearts = { atlas = "cry_atlasenhanced", pos = { x = 3, y = 1 } },
|
|
Spades = { atlas = "cry_atlasenhanced", pos = { x = 4, y = 1 } },
|
|
Clubs = { atlas = "cry_atlasenhanced", pos = { x = 5, y = 1 } },
|
|
},
|
|
seal = {
|
|
order = 5,
|
|
default = { atlas = "centers", pos = { x = 5, y = 2 } },
|
|
Gold = { atlas = "centers", pos = { x = 1, y = 2 } },
|
|
Red = { atlas = "centers", pos = { x = 0, y = 0 } },
|
|
Blue = { atlas = "cry_atlasenhanced", pos = { x = 2, y = 2 } },
|
|
Purple = { atlas = "cry_atlasenhanced", pos = { x = 1, y = 2 } },
|
|
cry_azure = { atlas = "centers", pos = { x = 0, y = 2 } },
|
|
cry_green = { atlas = "cry_atlasenhanced", pos = { x = 3, y = 5 } },
|
|
},
|
|
}
|
|
|
|
cry_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 = { cry_get_enchanced_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 = cry_get_enchanced_deck_info(self)
|
|
return { vars = { localize({ type = "name_text", set = "Edition", key = "e_" .. aaa }) } }
|
|
end,
|
|
edeck_type = "edition",
|
|
config = {},
|
|
apply = function(self)
|
|
local aaa = cry_get_enchanced_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,
|
|
}
|
|
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 = cry_get_enchanced_deck_info(self)
|
|
return { vars = { localize({ type = "name_text", set = "Enhanced", key = bbb }) } }
|
|
end,
|
|
apply = function(self)
|
|
local aaa, bbb = cry_get_enchanced_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,
|
|
}
|
|
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 = cry_get_enchanced_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 = cry_get_enchanced_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,
|
|
}
|
|
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 = cry_get_enchanced_deck_info(self)
|
|
return { vars = { localize(ddd, "suits_plural") } }
|
|
end,
|
|
apply = function(self)
|
|
local aaa, bbb, ccc, ddd = cry_get_enchanced_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,
|
|
}
|
|
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 = cry_get_enchanced_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 = cry_get_enchanced_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,
|
|
}
|
|
|
|
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.name == "Fortune Teller"
|
|
or center.name == "Shoot the Moon"
|
|
or center.name == "Riff-raff"
|
|
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 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 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
|
|
local ccl = Card.click
|
|
function Card:click()
|
|
ccl(self)
|
|
if
|
|
Galdur
|
|
and (self.edeck_select or (self.area == safe_get(Galdur, "run_setup", "selected_deck_area") and safe_get(
|
|
self,
|
|
"config",
|
|
"center",
|
|
"edeck_type"
|
|
)))
|
|
or (
|
|
safe_get(G.GAME, "viewed_back", "effect", "center", "edeck_type")
|
|
and (self.back == "viewed_back" or self.edeck_select)
|
|
)
|
|
then
|
|
if self.edeck_select then
|
|
G.PROFILES[G.SETTINGS.profile]["cry_edeck_" .. self.config.center.edeck_type] = self.edeck_select
|
|
end
|
|
cry_enhancement_config_UI(Galdur and self.config.center or G.GAME.viewed_back.effect.center)
|
|
end
|
|
end
|
|
function cry_enhancement_config_UI(center)
|
|
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 = cry_deep_copy(center)
|
|
_center.config["cry_force_" .. center.edeck_type] = editions[i]
|
|
cry_edeck_atlas_update(_center)
|
|
local card = create_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, atlasenhanced, atlasedition },
|
|
}
|