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(G.cry_edeck_center and self or {}) } 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(G.cry_edeck_center and self or {}) 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({}) 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) if not G.SETTINGS.paused and 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 and not G.SETTINGS.paused 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 not G.SETTINGS.paused 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 not G.SETTINGS.paused 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 G.cry_edeck_select = true G.cry_edeck_center = Galdur and self.config.center or G.GAME.viewed_back.effect.center Cryptid.enhancement_config_UI(Galdur and self.config.center or G.GAME.viewed_back.effect.center, 1) 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 G.cry_edeck_center = nil end end end function Cryptid.enhancement_config_UI(center, actual_page) local count_per_page = 6 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 i, v in pairs(pool_table[center.edeck_type]) do if v.key ~= "e_base" and not v.no_edeck then editions[#editions + 1] = { index = i, center = (center.edeck_type == "edition" and v.key:sub(3)) or v.key } end end local page = (actual_page and actual_page * count_per_page or count_per_page) - (count_per_page - 1) local max_pages = math.floor(#editions / count_per_page) if max_pages * count_per_page < #editions then --idk why this is needed but it is max_pages = max_pages + 1 end local modification_options = {} for i = 1, max_pages do table.insert( modification_options, localize("k_page") .. " " .. tostring(i) .. "/" .. tostring(max_pages) ) end for i = page, math.min(page + count_per_page - 1, #editions) do local _center = Cryptid.deep_copy(center) _center.config["cry_force_" .. center.edeck_type] = editions[i].center Cryptid.edeck_atlas_update(_center) local card = Cryptid.generic_card(_center) card.edeck_select = editions[i].center 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 }, }, { n = G.UIT.R, config = { align = "cm" }, nodes = { create_option_cycle({ options = modification_options, w = 4.5, cycle_shoulders = true, opt_callback = "edeck_page", current_option = actual_page, colour = G.C.RED, no_pips = true, focus_args = { snap_to = true, nav = "wide" }, }), }, }, }, }) G.FUNCS.overlay_menu({ definition = t, }) end G.FUNCS.edeck_page = function(args) Cryptid.enhancement_config_UI(G.cry_edeck_center, args.cycle_config.current_option) end end, items = { e_deck, et_deck, sk_deck, st_deck, sl_deck, atlasedition }, }