local pink = {
	object_type = "Stake",
	name = "cry-Pink Stake",
	key = "pink",
	pos = { x = 0, y = 0 },
	atlas = "stake",
	applied_stakes = { "gold" },
	prefix_config = { applied_stakes = { mod = false } },
	modifiers = function()
		G.GAME.modifiers.scaling = (G.GAME.modifiers.scaling or 1) + 1
	end,
	order = 9,
	colour = HEX("ff5ee6"),
}
local brown = {
	object_type = "Stake",
	name = "cry-Brown Stake",
	key = "brown",
	pos = { x = 1, y = 0 },
	atlas = "stake",
	applied_stakes = { "cry_pink" },
	modifiers = function()
		G.GAME.modifiers.cry_eternal_perishable_compat = true
	end,
	order = 10,
	colour = HEX("883200"),
}
local yellow = {
	object_type = "Stake",
	name = "cry-Yellow Stake",
	key = "yellow",
	pos = { x = 2, y = 0 },
	atlas = "stake",
	applied_stakes = { "cry_brown" },
	modifiers = function()
		G.GAME.modifiers.cry_any_stickers = true
	end,
	order = 11,
	colour = HEX("f7ff1f"),
}
local jade = {
	object_type = "Stake",
	name = "cry-Jade Stake",
	key = "jade",
	pos = { x = 3, y = 0 },
	atlas = "stake",
	applied_stakes = { "cry_yellow" },
	modifiers = function()
		G.GAME.modifiers.flipped_cards = 20
	end,
	shiny = true,
	order = 12,
	colour = HEX("78953c"),
}
local cyan = {
	object_type = "Stake",
	name = "cry-Cyan Stake",
	key = "cyan",
	pos = { x = 4, y = 0 },
	atlas = "stake",
	applied_stakes = { "cry_jade" },
	modifiers = function()
		G.GAME.modifiers.cry_rarer_jokers = true
		-- Note that this is not the exact rarity as the old lovely patch might be nerf/buff to the stake
		G.GAME.uncommon_mod = 0.8
		G.GAME.rare_mod = 0.8
	end,
	order = 13,
	colour = HEX("39ffcc"),
}
local gray = {
	object_type = "Stake",
	name = "cry-Gray Stake",
	key = "gray",
	pos = { x = 0, y = 1 },
	atlas = "stake",
	applied_stakes = { "cry_cyan" },
	modifiers = function()
		G.GAME.modifiers.cry_reroll_scaling = 2
	end,
	order = 14,
	colour = HEX("999999"),
}
local crimson = {
	object_type = "Stake",
	name = "cry-Crimson Stake",
	key = "crimson",
	pos = { x = 1, y = 1 },
	atlas = "stake",
	applied_stakes = { "cry_gray" },
	modifiers = function()
		G.GAME.modifiers.cry_voucher_restock_antes = 2
	end,
	order = 15,
	colour = HEX("800000"),
}
local diamond = {
	object_type = "Stake",
	name = "cry-Diamond Stake",
	key = "diamond",
	pos = { x = 2, y = 1 },
	atlas = "stake",
	applied_stakes = { "cry_crimson" },
	modifiers = function()
		G.GAME.win_ante = 10
	end,
	shiny = true,
	order = 16,
	colour = HEX("88e5d9"),
}
local amber = {
	object_type = "Stake",
	name = "cry-Amber Stake",
	key = "amber",
	pos = { x = 3, y = 1 },
	atlas = "stake",
	applied_stakes = { "cry_diamond" },
	modifiers = function()
		G.GAME.modifiers.cry_booster_packs = 1
	end,
	shiny = true,
	order = 17,
	colour = HEX("feb900"),
}
local bronze = {
	object_type = "Stake",
	name = "cry-Bronze Stake",
	key = "bronze",
	pos = { x = 4, y = 1 },
	atlas = "stake",
	applied_stakes = { "cry_amber" },
	modifiers = function()
		G.GAME.modifiers.cry_voucher_price_hike = 1.5
	end,
	shiny = true,
	order = 18,
	colour = HEX("d27c37"),
}
local quartz = {
	object_type = "Stake",
	name = "cry-Quartz Stake",
	key = "quartz",
	pos = { x = 0, y = 2 },
	atlas = "stake",
	applied_stakes = { "cry_bronze" },
	modifiers = function()
		G.GAME.modifiers.cry_enable_pinned_in_shop = true
	end,
	shiny = true,
	order = 19,
	colour = HEX("e8e8e8"),
}
local ruby = {
	object_type = "Stake",
	name = "cry-Ruby Stake",
	key = "ruby",
	pos = { x = 1, y = 2 },
	atlas = "stake",
	applied_stakes = { "cry_quartz" },
	modifiers = function()
		G.GAME.modifiers.cry_big_boss_rate = 0.3
	end,
	shiny = true,
	order = 20,
	colour = HEX("fc5f55"),
}
local glass = {
	object_type = "Stake",
	name = "cry-Glass Stake",
	key = "glass",
	pos = { x = 2, y = 2 },
	atlas = "stake",
	applied_stakes = { "cry_ruby" },
	modifiers = function()
		G.GAME.modifiers.cry_shatter_rate = 30
	end,
	shiny = true,
	order = 21,
	colour = HEX("ffffff8f"),
}
local sapphire = {
	object_type = "Stake",
	name = "cry-Sapphire Stake",
	key = "sapphire",
	pos = { x = 3, y = 2 },
	atlas = "stake",
	applied_stakes = { "cry_glass" },
	modifiers = function()
		G.GAME.modifiers.cry_ante_tax = 0.25
		G.GAME.modifiers.cry_ante_tax_max = 10
	end,
	shiny = true,
	order = 22,
	colour = HEX("3551fc"),
}
local emerald = {
	object_type = "Stake",
	name = "cry-Emerald Stake",
	key = "emerald",
	pos = { x = 4, y = 2 },
	atlas = "stake",
	applied_stakes = { "cry_sapphire" },
	modifiers = function()
		G.GAME.modifiers.cry_enable_flipped_in_shop = true
	end,
	shiny = true,
	order = 23,
	colour = HEX("06fc2c"),
}
local platinum = {
	object_type = "Stake",
	name = "cry-Platinum Stake",
	key = "platinum",
	pos = { x = 0, y = 3 },
	atlas = "stake",
	applied_stakes = { "cry_emerald" },
	modifiers = function()
		G.GAME.modifiers.cry_no_small_blind = true
		G.GAME.round_resets.blind_states["Small"] = "Hide"
	end,
	shiny = true,
	order = 24,
	colour = HEX("b0f6ff"),
}
--init colors so they have references
G.C.CRY_TWILIGHT = { 0, 0, 0, 0 }
G.C.CRY_VERDANT = { 0, 0, 0, 0 }
G.C.CRY_EMBER = { 0, 0, 0, 0 }
G.C.CRY_DAWN = { 0, 0, 0, 0 }
G.C.CRY_HORIZON = { 0, 0, 0, 0 }
G.C.CRY_BLOSSOM = { 0, 0, 0, 0 }
G.C.CRY_AZURE = { 0, 0, 0, 0 }
G.C.CRY_ASCENDANT = { 0, 0, 0, 0 }
local twilight = {
	object_type = "Stake",
	name = "cry-Twilight Stake",
	key = "twilight",
	pos = { x = 1, y = 3 },
	atlas = "stake",
	applied_stakes = { "cry_platinum" },
	modifiers = function()
		G.GAME.modifiers.enable_banana = true
	end,
	shiny = true,
	order = 25,
	colour = G.C.CRY_TWILIGHT,
}
local banana = {
	object_type = "Sticker",
	badge_colour = HEX("e8c500"),
	prefix_config = { key = false },
	key = "banana",
	atlas = "sticker",
	pos = { x = 5, y = 2 },
	should_apply = false,
	loc_vars = function(self, info_queue, card)
		if card.ability.consumeable then
			return { key = "cry_banana_consumeable", vars = { G.GAME.probabilities.normal or 1, 4 } }
		elseif card.ability.set == "Voucher" then
			return { key = "cry_banana_voucher", vars = { G.GAME.probabilities.normal or 1, 12 } }
		elseif card.ability.set == "Booster" then
			return { key = "cry_banana_booster" }
		else
			return { vars = { G.GAME.probabilities.normal or 1, 10 } }
		end
	end,
}
local verdant = {
	object_type = "Stake",
	name = "cry-Verdant Stake",
	key = "verdant",
	pos = { x = 2, y = 3 },
	atlas = "stake",
	applied_stakes = { "cry_twilight" },
	modifiers = function()
		G.GAME.modifiers.scaling = (G.GAME.modifiers.scaling or 1) + 1
	end,
	shiny = true,
	order = 26,
	colour = G.C.CRY_VERDANT,
}
local ember = {
	object_type = "Stake",
	name = "cry-Ember Stake",
	key = "ember",
	pos = { x = 3, y = 3 },
	atlas = "stake",
	applied_stakes = { "cry_verdant" },
	modifiers = function()
		G.GAME.modifiers.cry_no_sell_value = true
	end,
	shiny = true,
	order = 27,
	colour = G.C.CRY_EMBER,
}
local dawn = {
	object_type = "Stake",
	name = "cry-Dawn Stake",
	key = "dawn",
	pos = { x = 4, y = 3 },
	atlas = "stake",
	applied_stakes = { "cry_ember" },
	modifiers = function()
		G.GAME.modifiers.cry_consumable_reduce = true
	end,
	shiny = true,
	order = 28,
	colour = G.C.CRY_DAWN,
}
local horizon = {
	object_type = "Stake",
	name = "cry-Horizon Stake",
	key = "horizon",
	pos = { x = 0, y = 4 },
	atlas = "stake",
	applied_stakes = { "cry_dawn" },
	modifiers = function()
		G.GAME.modifiers.cry_card_each_round = true
	end,
	shiny = true,
	order = 29,
	colour = G.C.CRY_HORIZON,
}
local blossom = {
	object_type = "Stake",
	name = "cry-Blossom Stake",
	key = "blossom",
	pos = { x = 1, y = 4 },
	atlas = "stake",
	applied_stakes = { "cry_horizon" },
	modifiers = function()
		G.GAME.modifiers.cry_big_showdown = true
	end,
	shiny = true,
	order = 30,
	colour = G.C.CRY_BLOSSOM,
}
local azure = {
	object_type = "Stake",
	name = "cry-Azure Stake",
	key = "azure",
	pos = { x = 2, y = 4 },
	atlas = "stake",
	applied_stakes = { "cry_blossom" },
	modifiers = function()
		G.GAME.modifiers.cry_jkr_misprint_mod = 0.8
	end,
	shiny = true,
	order = 31,
	colour = G.C.CRY_AZURE,
}
local ascendant = {
	object_type = "Stake",
	name = "cry-Ascendant Stake",
	key = "ascendant",
	pos = { x = 3, y = 4 },
	atlas = "stake",
	applied_stakes = { "cry_azure" },
	modifiers = function()
		change_shop_size(-1)
	end,
	shiny = true,
	order = 32,
	colour = G.C.CRY_ASCENDANT,
}
local stake_atlas = { object_type = "Atlas", key = "stake", 
path = "stake_cry.png", px = 29, py = 29 }
return {
	name = "More Stakes",
	init = function(self)
		-- Disallow use of Debuffed Perishable consumables
		local cuc = Card.can_use_consumeable
		function Card:can_use_consumeable(any_state, skip_check)
			if self.ability.perish_tally == nil then
				self.ability.perish_tally = G.GAME.perishable_rounds or 5
			end
			if self.ability.perishable and self.ability.perish_tally <= 0 then
				return false
			end
			return cuc(self, any_state, skip_check)
		end
		-- Overriding Steamodded's registering of Incantation/Familiar/Grim
		local function random_destroy(used_tarot)
			local destroyed_cards = {}
			local temp_hand = {}
			local hasHand = false
			for k, v in ipairs(G.hand.cards) do
				if not v.ability.eternal then
					temp_hand[#temp_hand + 1] = v
					hasHand = true
				end
			end
			if hasHand then
				destroyed_cards[#destroyed_cards + 1] = pseudorandom_element(temp_hand, pseudoseed("random_destroy"))
			end
			G.E_MANAGER:add_event(Event({
				trigger = "after",
				delay = 0.4,
				func = function()
					play_sound("tarot1")
					if used_tarot and used_tarot.juice_up then
						used_tarot:juice_up(0.3, 0.5)
					end
					return true
				end,
			}))
			G.E_MANAGER:add_event(Event({
				trigger = "after",
				delay = 0.1,
				func = function()
					for i = #destroyed_cards, 1, -1 do
						local card = destroyed_cards[i]
						if card.ability.name == "Glass Card" then
							card:shatter()
						else
							card:start_dissolve(nil, i ~= #destroyed_cards)
						end
					end
					return true
				end,
			}))
			return destroyed_cards
		end
		SMODS.Consumable:take_ownership("grim", {
			use = function(self, card, area, copier)
				local used_tarot = copier or card
				local destroyed_cards = random_destroy(used_tarot)
				G.E_MANAGER:add_event(Event({
					trigger = "after",
					delay = 0.7,
					func = function()
						local cards = {}
						for i = 1, card.ability.extra do
							cards[i] = true
							local suit_list = {}
							for i = #SMODS.Suit.obj_buffer, 1, -1 do
								suit_list[#suit_list + 1] = SMODS.Suit.obj_buffer[i]
							end
							local _suit, _rank =
								SMODS.Suits[pseudorandom_element(suit_list, pseudoseed("grim_create"))].card_key, "A"
							local cen_pool = {}
							for k, v in pairs(G.P_CENTER_POOLS["Enhanced"]) do
								if v.key ~= "m_stone" then
									cen_pool[#cen_pool + 1] = v
								end
							end
							create_playing_card({
								front = G.P_CARDS[_suit .. "_" .. _rank],
								center = pseudorandom_element(cen_pool, pseudoseed("spe_card")),
							}, G.hand, nil, i ~= 1, { G.C.SECONDARY_SET.Spectral })
						end
						playing_card_joker_effects(cards)
						return true
					end,
				}))
				delay(0.3)
				for i = 1, #G.jokers.cards do
					G.jokers.cards[i]:calculate_joker({ remove_playing_cards = true, removed = destroyed_cards })
				end
			end,
		}, true)
		SMODS.Consumable:take_ownership("familiar", {
			use = function(self, card, area, copier)
				local used_tarot = copier or card
				local destroyed_cards = random_destroy(used_tarot)
				G.E_MANAGER:add_event(Event({
					trigger = "after",
					delay = 0.7,
					func = function()
						local cards = {}
						for i = 1, card.ability.extra do
							cards[i] = true
							local suit_list = {}
							for i = #SMODS.Suit.obj_buffer, 1, -1 do
								suit_list[#suit_list + 1] = SMODS.Suit.obj_buffer[i]
							end
							local faces = {}
							for _, v in ipairs(SMODS.Rank.obj_buffer) do
								local r = SMODS.Ranks[v]
								if r.face then
									table.insert(faces, r.card_key)
								end
							end
							local _suit, _rank =
								SMODS.Suits[pseudorandom_element(suit_list, pseudoseed("familiar_create"))].card_key,
								pseudorandom_element(faces, pseudoseed("familiar_create"))
							local cen_pool = {}
							for k, v in pairs(G.P_CENTER_POOLS["Enhanced"]) do
								if v.key ~= "m_stone" then
									cen_pool[#cen_pool + 1] = v
								end
							end
							create_playing_card({
								front = G.P_CARDS[_suit .. "_" .. _rank],
								center = pseudorandom_element(cen_pool, pseudoseed("spe_card")),
							}, G.hand, nil, i ~= 1, { G.C.SECONDARY_SET.Spectral })
						end
						playing_card_joker_effects(cards)
						return true
					end,
				}))
				delay(0.3)
				for i = 1, #G.jokers.cards do
					G.jokers.cards[i]:calculate_joker({ remove_playing_cards = true, removed = destroyed_cards })
				end
			end,
		}, true)
		SMODS.Consumable:take_ownership("incantation", {
			use = function(self, card, area, copier)
				local used_tarot = copier or card
				local destroyed_cards = random_destroy(used_tarot)
				G.E_MANAGER:add_event(Event({
					trigger = "after",
					delay = 0.7,
					func = function()
						local cards = {}
						for i = 1, card.ability.extra do
							cards[i] = true
							local suit_list = {}
							for i = #SMODS.Suit.obj_buffer, 1, -1 do
								suit_list[#suit_list + 1] = SMODS.Suit.obj_buffer[i]
							end
							local numbers = {}
							for _RELEASE_MODE, v in ipairs(SMODS.Rank.obj_buffer) do
								local r = SMODS.Ranks[v]
								if v ~= "Ace" and not r.face then
									table.insert(numbers, r.card_key)
								end
							end
							local _suit, _rank =
								SMODS.Suits[pseudorandom_element(suit_list, pseudoseed("incantation_create"))].card_key,
								pseudorandom_element(numbers, pseudoseed("incantation_create"))
							local cen_pool = {}
							for k, v in pairs(G.P_CENTER_POOLS["Enhanced"]) do
								if v.key ~= "m_stone" then
									cen_pool[#cen_pool + 1] = v
								end
							end
							create_playing_card({
								front = G.P_CARDS[_suit .. "_" .. _rank],
								center = pseudorandom_element(cen_pool, pseudoseed("spe_card")),
							}, G.hand, nil, i ~= 1, { G.C.SECONDARY_SET.Spectral })
						end
						playing_card_joker_effects(cards)
						return true
					end,
				}))
				delay(0.3)
				for i = 1, #G.jokers.cards do
					G.jokers.cards[i]:calculate_joker({ remove_playing_cards = true, removed = destroyed_cards })
				end
			end,
		}, true)

		local sc = Card.set_cost
		function Card:set_cost()
			sc(self)
			if self.ability.set == "Voucher" and G.GAME.modifiers.cry_voucher_price_hike then
				self.cost = math.floor(self.cost * G.GAME.modifiers.cry_voucher_price_hike)
				--Update related costs
				self.sell_cost = math.max(1, math.floor(self.cost / 2)) + (self.ability.extra_value or 0)
				if
					self.area
					and self.ability.couponed
					and (self.area == G.shop_jokers or self.area == G.shop_booster)
				then
					self.cost = 0
				end
				self.sell_cost_label = self.facing == "back" and "?" or self.sell_cost
			end
		end
		for _, v in pairs(self.items) do
			if v.object_type == "Stake" then
				v.sticker_pos = v.pos
				v.sticker_atlas = "sticker"
			end
		end
	end,
	items = {
		stake_atlas,
		pink,
		brown,
		yellow,
		jade,
		cyan,
		gray,
		crimson,
		diamond,
		amber,
		bronze,
		quartz,
		ruby,
		glass,
		sapphire,
		emerald,
		platinum,
		twilight,
		verdant,
		ember,
		dawn,
		horizon,
		blossom,
		azure,
		ascendant,
		banana,
	},
}
