SMODS.Sound({key = "omegacard", path = "omega_card.ogg"}) SMODS.Sound({key = "enchant", path = "enchant.ogg"}) SMODS.Sound({key = "chime", path = "chime.ogg"}) SMODS.Sound({key = "pop", path = "pop.ogg"}) for i = 1, 4 do SMODS.Sound({key = "boost" .. i, path = "boost" .. i .. ".ogg"}) end SMODS.Atlas { key = "janeomegaplanets", px = 71, py = 95, path = Jane.config.texture_pack .. "/c_jane_omegaplanets.png", } SMODS.Atlas { key = "janeomegaspectrals", px = 71, py = 95, path = Jane.config.texture_pack .. "/c_jane_omegaspectrals.png", } SMODS.Atlas { key = "janeomegatarots", px = 71, py = 95, path = Jane.config.texture_pack .. "/c_jane_omegatarots.png", } SMODS.ConsumableType { key = "jane_omegaconsumable", loc_txt = {collection = "Omega Cards", name = "Omega"}, default = "c_jane_pluto_omega", secondary_colour = G.C.jane_RGB, primary_colour = G.C.BLACK, collection_rows = {6, 6}, shop_rate = 0, } local function create_card_set(needle, edition, amount) for k, v in pairs(G.P_CARDS) do if string.find(k, needle) then for _ = 1, amount do Jane.q(function() SMODS.add_card({set = "Base", rank = v.value, suit = v.suit}) :set_edition(edition, true, true) play_sound("card1") end, 0.1) end end end end ---@param hand string? ---@param number number ---@param card Card local function omega_level_up(hand, number, card) local factor = 3 ^ number update_hand_text( {sound = "button", volume = 0.7, pitch = 0.8, delay = 0.3}, { handname = localize(hand or "k_all_hands", hand and "poker_hands"), chips = hand and G.GAME.hands[hand].l_chips, mult = hand and G.GAME.hands[hand].l_mult, level = hand and G.GAME.hands[hand].level, } ) for _, v in pairs(hand and {G.GAME.hands[hand]} or G.GAME.hands) do v.l_chips = v.l_chips * factor v.l_mult = v.l_mult * factor end Jane.q(function() play_sound("jane_boost1", 1, 0.4) card:juice_up(0.8, 0.5) end, 1, nil, "after") update_hand_text({delay = 1}, {chips = "X" .. factor, StatusText = true}) Jane.q(function() play_sound("jane_boost2", 1, 0.4) card:juice_up(0.8, 0.5) end, 1, nil, "after") update_hand_text({delay = 1}, {mult = "X" .. factor, StatusText = true}) update_hand_text( {sound = "button", volume = 0.7, pitch = 1, delay = 1}, { chips = hand and G.GAME.hands[hand].l_chips, mult = hand and G.GAME.hands[hand].l_mult, } ) delay(2) update_hand_text( {sound = "button", volume = 0.7, pitch = 0.8, delay = 1}, { chips = hand and G.GAME.hands[hand].chips, mult = hand and G.GAME.hands[hand].mult, } ) for _, v in pairs(hand and {G.GAME.hands[hand]} or G.GAME.hands) do v.chips = v.chips * factor v.mult = v.mult * factor end Jane.q(function() play_sound("jane_boost3", 1, 0.4) card:juice_up(0.8, 0.5) end, 1, nil, "after") update_hand_text({delay = 1}, {chips = "X" .. factor, StatusText = true}) Jane.q(function() play_sound("jane_boost4", 1, 0.4) card:juice_up(0.8, 0.5) end, 1, nil, "after") update_hand_text({delay = 1}, {mult = "X" .. factor, StatusText = true}) update_hand_text( {sound = "button", volume = 0.7, pitch = 1, delay = 1}, { chips = hand and G.GAME.hands[hand].chips, mult = hand and G.GAME.hands[hand].mult, } ) for k, v in pairs(hand and {[hand] = G.GAME.hands[hand]} or G.GAME.hands) do SMODS.upgrade_poker_hands({ hands = {k}, level_up = v.level * (factor - 1), }) end end for _, v in ipairs({ {n = "Pluto", c = "pluto", h = "High Card", y = 9}, {n = "Mercury", c = "mercury", h = "Pair", y = 6}, {n = "Uranus", c = "uranus", h = "Two Pair", y = 11}, {n = "Venus", c = "venus", h = "Three of a Kind", y = 12}, {n = "Saturn", c = "saturn", h = "Straight", y = 10}, {n = "Jupiter", c = "jupiter", h = "Flush", y = 4}, {n = "Earth", c = "earth", h = "Full House", y = 2}, {n = "Mars", c = "mars", h = "Four of a Kind", y = 5}, {n = "Neptune", c = "neptune", h = "Straight Flush", y = 7}, {n = "Planet X", c = "planet_x", h = "Five of a Kind", y = 8}, {n = "Ceres", c = "ceres", h = "Flush House", y = 1}, {n = "Eris", c = "eris", h = "Flush Five", y = 3}, }) do SMODS.Consumable { key = v.c .. "_omega", loc_txt = { name = v.n .. " {C:dark_edition}Omega", text = { "{C:attention}Triples {C:chips}Chips{}, {C:chips}Level Chips{},", "{C:mult}Mult{}, {C:mult}Level Mult{}, and", "{C:planet}planet level {}of {C:attention}" .. v.h, }, }, set = "jane_omegaconsumable", pos = {x = 0, y = v.y}, soul_pos = {x = 1, y = v.y}, cost = 15, soul_rate = 0, atlas = "janeomegaplanets", hidden = true, can_stack = true, can_divide = true, can_bulk_use = true, can_mass_use = true, can_use = Jane.can_use, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, card, _, _, number) omega_level_up(v.h, number, card) end, } end SMODS.Consumable { key = "black_hole_omega", loc_txt = { name = "{C:dark_edition}Sagittarius A*", text = { "{C:attention}Nonuples {C:chips}Chips{}, {C:chips}Level Chips{},", "{C:mult}Mult{}, {C:mult}Level Mult{}, and", "{C:planet}planet level {}of {C:attention}all hands", }, }, set = "jane_omegaconsumable", pos = {x = 0, y = 0}, soul_pos = {x = 1, y = 0}, cost = 15, soul_rate = 0, atlas = "janeomegaplanets", hidden = true, can_stack = true, can_divide = true, can_bulk_use = true, can_mass_use = true, can_use = Jane.can_use, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, card, _, _, number) omega_level_up(nil, number * 2, card) end, } SMODS.Consumable { key = "ankh_omega", set = "jane_omegaconsumable", loc_txt = { name = "Ankh {C:dark_edition}Omega", text = {"Create {C:attention}4{} copies of", "a {C:attention}selected Joker"}, }, pos = {x = 0, y = 0}, soul_pos = {x = 1, y = 0}, cost = 20, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", can_use = function() return Jane.can_use() and ((G.jokers or {}).highlighted or {})[1] end, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, _, _, _, number) local joker = ((G.jokers or {}).highlighted or {})[1] if not joker then return end for _ = 1, 4 * number do SMODS.copy_card(joker):start_materialize() end end, } local editions = {"jane_crystal", "jane_moire"} SMODS.Consumable { key = "aura_omega", set = "jane_omegaconsumable", loc_txt = { name = "Aura {C:dark_edition}Omega", text = { "Apply {C:dark_edition}Crystal {}or {C:dark_edition}Moire", "to all {C:attention}selected Jokers", "and {C:attention}playing cards", }, }, pos = {x = 0, y = 1}, soul_pos = {x = 1, y = 1}, cost = 20, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_crystal info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_moire end, can_use = function() return Jane.can_use() and (next(G.jokers.highlighted) or next(G.hand.highlighted)) end, use = function() for _, v in ipairs(G.jokers.highlighted) do if not v.edition then v:set_edition({[editions[pseudorandom("auraexrandom", 1, #editions)]] = true}) end end for _, v in ipairs(G.hand.highlighted) do if not v.edition then v:set_edition({[editions[pseudorandom("auraexrandom", 1, #editions)]] = true}) end end end, } SMODS.Consumable { key = "cryptid_omega", set = "jane_omegaconsumable", loc_txt = { name = "Cryptid {C:dark_edition}Omega", text = { "Create {C:attention}20{} copies of", "{C:attention}selected playing cards", }, }, pos = {x = 0, y = 2}, soul_pos = {x = 1, y = 2}, cost = 20, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", can_use = function() return Jane.can_use() and next(G.hand.highlighted) end, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, _, _, _, number) for _, v in ipairs(G.hand.highlighted) do for _ = 1, 20 * number do SMODS.copy_card(v):start_materialize() end end end, } for _, v in ipairs({ {n = "Deja Vu", c = "deja_vu", s = "Red", y = 3}, {n = "Medium", c = "medium", s = "Purple", y = 10}, {n = "Talisman", c = "talisman", s = "Gold", y = 13}, {n = "Trance", c = "trance", s = "Blue", y = 14}, }) do SMODS.Consumable { key = v.c .. "_omega", set = "jane_omegaconsumable", loc_txt = { name = v.n .. " {C:dark_edition}Omega", text = { "Apply a {C:attention}" .. v.s .. " Seal{} to", "{C:attention}all playing cards", }, }, pos = {x = 0, y = v.y}, soul_pos = {x = 1, y = v.y}, atlas = "janeomegaspectrals", soul_rate = 0, hidden = true, cost = 20, loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_SEALS[v.s] end, can_use = Jane.can_use, use = function() for i, card in pairs(G.hand.cards) do card:set_seal(v.s, i > 50, i > 50) end for _, card in pairs(G.deck.cards) do card:set_seal(v.s, true, true) end end, } end SMODS.Consumable { key = "ectoplasm_omega", set = "jane_omegaconsumable", loc_txt = { name = "Ectoplasm {C:dark_edition}Omega", text = {"Apply {C:dark_edition}Negative", "to {C:attention}all Jokers"}, }, pos = {x = 0, y = 4}, soul_pos = {x = 1, y = 4}, cost = 100, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_negative end, can_use = function() return Jane.can_use() and next(G.jokers.cards) end, use = function() for k, v in ipairs(G.jokers.cards) do if not v.edition then v:set_edition({negative = true}, k > 50, k > 50) end end end, } SMODS.Consumable { key = "familiar_omega", set = "jane_omegaconsumable", loc_txt = { name = "Familiar {C:dark_edition}Omega", text = { "Add a {C:attention}full set{} of", "{C:dark_edition,E:1}Moire {C:attention}Kings{}, {C:dark_edition,E:1}Crystal", "{C:attention}Queens{}, and {C:dark_edition,E:1}Polygloss", "{C:attention}Jacks {}to your deck", }, }, pos = {x = 0, y = 5}, soul_pos = {x = 1, y = 5}, cost = 100, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_moire info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_crystal info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_polygloss end, can_use = Jane.can_use, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, _, _, _, number) create_card_set("_K", "e_jane_moire", number) create_card_set("_Q", "e_jane_crystal", number) create_card_set("_J", "e_jane_polygloss", number) end, } SMODS.Consumable { key = "grim_omega", set = "jane_omegaconsumable", loc_txt = { name = "Grim {C:dark_edition}Omega", text = { "Add 2 {C:attention}full sets", "of {C:dark_edition,E:1}Moire {C:attention}Aces", "to your deck", }, }, pos = {x = 0, y = 6}, soul_pos = {x = 1, y = 6}, cost = 80, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_moire end, can_use = Jane.can_use, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, _, _, _, number) create_card_set("_A", "e_jane_moire", number * 2) end, } SMODS.Consumable { key = "hex_omega", set = "jane_omegaconsumable", loc_txt = { name = "Hex {C:dark_edition}Omega", text = { "Apply {C:dark_edition,E:1}Crystal {}or", "{C:dark_edition,E:1}Moire {}to all {C:attention}Jokers", }, }, pos = {x = 0, y = 7}, soul_pos = {x = 1, y = 7}, cost = 150, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_crystal info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_moire end, can_use = function() return Jane.can_use() and next(G.jokers.cards) end, use = function() for _, v in ipairs(G.jokers.cards) do if not v.edition then v:set_edition({[editions[pseudorandom("hexexrandom", 1, #editions)]] = true}) end end end, } SMODS.Consumable { key = "immolate_omega", set = "jane_omegaconsumable", loc_txt = { name = "Immolate {C:dark_edition}Omega", text = { "{C:red}Destroys{} {C:attention}selected playing cards", "Each card destroyed multiplies", "{C:money}money{} by its {C:attention}rank", }, }, pos = {x = 0, y = 8}, soul_pos = {x = 1, y = 8}, cost = 200, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", can_use = function() return Jane.can_use() and next(G.hand.highlighted) end, use = function(self, card, area, copier) for _, v in pairs(G.hand.highlighted) do ease_dollars((v:norank() and 1 or v:get_id()) * G.GAME.dollars - G.GAME.dollars) end SMODS.destroy_cards(G.hand.highlighted) end, } SMODS.Consumable { key = "incantation_omega", set = "jane_omegaconsumable", loc_txt = { name = "Incantation {C:dark_edition}Omega", text = { "Add a {C:attention}full set{} of cards", "{C:attention}2{} through {C:attention}10 {}to your deck", "{C:dark_edition,E:1}Polygloss{} on {C:attention}odd ranks", "{C:dark_edition,E:1}Crystal{} on {C:attention}even ranks", }, }, pos = {x = 0, y = 9}, soul_pos = {x = 1, y = 9}, cost = 175, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_polygloss info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_crystal end, can_use = Jane.can_use, use = function(self, card, area, copier) self:bulk_use(card, area, copier, 1) end, bulk_use = function(_, _, _, _, number) create_card_set("_2", "e_jane_crystal", number) create_card_set("_3", "e_jane_polygloss", number) create_card_set("_4", "e_jane_crystal", number) create_card_set("_5", "e_jane_polygloss", number) create_card_set("_6", "e_jane_crystal", number) create_card_set("_7", "e_jane_polygloss", number) create_card_set("_8", "e_jane_crystal", number) create_card_set("_9", "e_jane_polygloss", number) create_card_set("_T", "e_jane_crystal", number) end, } SMODS.Consumable { key = "ouija_omega", set = "jane_omegaconsumable", loc_txt = { name = "Ouija {C:dark_edition}Omega", text = { "{C:attention}Playing cards {}whose rank", "does not match any of the", "{C:attention}selected cards {}will be {C:money}sold", }, }, pos = {x = 0, y = 11}, soul_pos = {x = 1, y = 11}, cost = 175, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", can_use = function() return Jane.can_use() and next(G.hand.highlighted) end, use = function() if not next(G.hand.highlighted) then return end for _, c in pairs(G.playing_cards) do local safe = c.highlighted if not safe then for _, h in pairs(G.hand.highlighted) do if h:get_id() == c:get_id() or (h:norank() and c:norank()) then safe = true break end end end if not safe then c:sell_card() end end end, } SMODS.Consumable { key = "sigil_omega", set = "jane_omegaconsumable", loc_txt = { name = "Sigil {C:dark_edition}Omega", text = { "{C:attention}Playing cards {}whose suit", "does not match any of the", "{C:attention}selected {C:attention}cards {}will be {C:money}sold", }, }, pos = {x = 0, y = 12}, soul_pos = {x = 1, y = 12}, soul_rate = 0, cost = 175, atlas = "janeomegaspectrals", can_use = function() return Jane.can_use() and next(G.hand.highlighted) end, use = function() if not next(G.hand.highlighted) then return end for _, c in pairs(G.playing_cards) do local safe = c.highlighted if not safe then for _, h in pairs(G.hand.highlighted) do if SMODS.has_any_suit(h) or h.base.suit == c.base.suit or (h:norank() and c:norank()) then safe = true break end end end if not safe then c:sell_card() end end end, } SMODS.Consumable { key = "wraith_omega", set = "jane_omegaconsumable", loc_txt = { name = "Wraith {C:dark_edition}Omega", text = { "Create all {C:legendary,E:1}Legendary", "{C:dark_edition,E:1}Jane {C:attention}Jokers", }, }, pos = {x = 0, y = 15}, soul_pos = {x = 1, y = 15}, cost = 175, soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", loc_vars = function(self, info_queue) for _, v in ipairs(self.jokers()) do info_queue[#info_queue + 1] = v end end, can_use = function(self) return Jane.can_use() and #G.jokers.cards + #self.jokers() <= G.jokers.config.card_limit end, use = function(self) for _, v in ipairs(self.jokers()) do SMODS.add_card {key = v.key, set = "Joker"} end end, jokers = function() local out = {} for _, v in pairs(G.P_CENTERS) do if v.set == "Joker" and v.mod and v.mod.id == "jane" and type(v.rarity) == "number" and v.rarity == 4 then out[#out + 1] = v end end return out end, } SMODS.Consumable { key = "fool_omega", set = "jane_omegaconsumable", loc_txt = { name = "The Fool {C:dark_edition}Omega", text = { "Create {C:attention}2{} random", "{C:red,E:1}Omega{} cards", }, }, pos = {x = 0, y = 0}, soul_pos = {x = 1, y = 0}, cost = 175, soul_rate = 0, hidden = true, atlas = "janeomegatarots", can_use = Jane.can_use, use = function() local omega_consumables = { "pluto", "mercury", "uranus", "venus", "saturn", "jupiter", "earth", "mars", "neptune", "planet_x", "ceres", "eris", "black_hole", "ankh", "aura", "cryptid", "deja_vu", "medium", "talisman", "trance", "ectoplasm", "familiar", "grim", "hex", "immolate", "incantation", "ouija", "sigil", "wraith", "fool", "magician", "empress", "hierophant", "lovers", "chariot", "justice", "devil", "tower", "high_priestess", "emperor", "hermit", "wheel_of_fortune", "star", "moon", "sun", "world", "soul", } for _ = 1, 2 do if G.consumeables.config.card_limit > #G.consumeables.cards then local key = "c_jane_" .. pseudorandom_element(omega_consumables, pseudoseed("fool_omega")) .. "_omega" SMODS.add_card({key = key, set = "jane_omegaconsumable"}) end end end, } local omega_copyamount = 10 for _, v in ipairs({ { b = "magician", n = "The Scientist", o = "The Magician", c = "Lucky", e = G.P_CENTERS.m_lucky, p = {x = 8, y = 2}, omega = 1, }, { b = "empress", n = "The Peasant", o = "The Empress", c = "Mult", e = G.P_CENTERS.m_mult, p = {x = 6, y = 2}, omega = 3, }, { b = "hierophant", n = "The Adversary", o = "The Hierophant", c = "Bonus", e = G.P_CENTERS.m_bonus, p = {x = 4, y = 2}, omega = 5, }, { b = "lovers", n = "The Rivals", o = "The Lovers", c = "Wild", e = G.P_CENTERS.m_wild, p = {x = 3, y = 2}, omega = 6, }, { b = "chariot", n = "The Hitchhiker", o = "The Chariot", c = "Steel", e = G.P_CENTERS.m_steel, p = {x = 2, y = 2}, omega = 7, }, { b = "justice", n = "Injustice", o = "Justice", c = "Glass", e = G.P_CENTERS.m_glass, p = {x = 1, y = 2}, omega = 8, }, { b = "devil", n = "The Angel", o = "The Devil", c = "Gold", e = G.P_CENTERS.m_gold, p = {x = 4, y = 1}, omega = 15, }, { b = "tower", n = "The Collapse", o = "The Tower", c = "Stone", e = G.P_CENTERS.m_stone, p = {x = 3, y = 1}, omega = 16, }, }) do SMODS.Consumable { key = v.b .. "_omega", set = "jane_omegaconsumable", loc_txt = { name = v.o .. " {C:dark_edition}Omega", text = { "Enhance {C:attention}selected playing", "{C:attention}cards {}to {C:attention}" .. v.c .. "{} cards,", "{C:red}Destroy{} all other cards", "{C:attention}Duplicate {}each card {C:attention}" .. omega_copyamount .. " times", }, }, pos = {x = 0, y = v.omega}, soul_pos = {x = 1, y = v.omega}, cost = 35, soul_rate = 0, hidden = true, atlas = "janeomegatarots", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = v.e end, can_use = function() return Jane.can_use() and next(G.hand.highlighted) end, use = function(_, card) if not next(G.hand.highlighted) then return end Jane.q(function() play_sound("tarot1") card:juice_up(0.3, 0.5) end, 0.4, nil, "after") local to_copy = {} for i = 1, #G.hand.highlighted do local percent = 1.15 - (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3 local h = G.hand.highlighted[i] table.insert(to_copy, h) Jane.q(function() h:flip() play_sound("card1", percent) h:juice_up(0.3, 0.3) end, 0.15, nil, "after") end delay(0.2) for i = 1, #G.hand.highlighted do local percent = 0.85 + (i - 0.999) / (#G.hand.highlighted - 0.998) * 0.3 local h = G.hand.highlighted[i] Jane.q(function() G.hand:remove_from_highlighted(h) h:flip() h:set_ability(v.e, true, nil) play_sound("tarot2", percent) h:juice_up(0.3, 0.3) end, 0.15, nil, "after") end for _, c in ipairs(G.playing_cards) do if not c.highlighted then SMODS.destroy_cards({c}) end end delay(1) Jane.q(function() for _, h in ipairs(to_copy) do for _ = 1, omega_copyamount do SMODS.copy_card(h):start_materialize() end end end) end, } end SMODS.Consumable { key = "high_priestess_omega", set = "jane_omegaconsumable", loc_txt = { name = "The High Priestess {C:dark_edition}Omega", text = { "Every {C:attention}Joker{}, {C:attention}consumable{},", "and {C:attention}playing card{} will", "trigger {C:spectral}Black Hole", }, }, pos = {x = 0, y = 2}, soul_pos = {x = 1, y = 2}, cost = 200, soul_rate = 0, hidden = true, atlas = "janeomegatarots", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.c_black_hole end, can_use = Jane.can_use, use = function() SMODS.upgrade_poker_hands({ hands = G.handlist, level_up = #G.jokers.cards + #G.consumeables.cards + #G.playing_cards, }) end, } local function create_many(set, count, rarity) local showman = SMODS.add_card({key = "j_ring_master", set = "Joker"}) showman:set_perishable(true) for _ = 1, count do Jane.q(function() SMODS.add_card({set = set, rarity = rarity, key_append = "jane_" .. set}):juice_up(0.3, 0.5) play_sound("timpani") end, 0.4, nil, "after") end Jane.q(function() SMODS.destroy_cards({showman}) end) end SMODS.Consumable { key = "emperor_omega", set = "jane_omegaconsumable", loc_txt = { name = "The Emperor {C:dark_edition}Omega", text = { "Create a random {C:red}Rare", "{C:attention}Joker {}for every {C:attention}King", "in your deck", "{C:inactive}(Adds a temporary Showman)", }, }, pos = {x = 0, y = 4}, soul_pos = {x = 1, y = 4}, cost = 300, soul_rate = 0, hidden = true, atlas = "janeomegatarots", can_use = Jane.can_use, use = function() local count = 0 for _, v in pairs(G.playing_cards) do if not v:norank() and v:get_id() == 13 then count = count + 1 end end create_many("Joker", count, "Rare") end, } SMODS.Consumable { key = "hermit_omega", set = "jane_omegaconsumable", loc_txt = { name = "The Hermit {C:dark_edition}Omega", text = { "Gain {X:money,C:dark_edition,s:1.25}+$^2", "{C:inactive,s:0.75}(+$#1#)", }, }, pos = {x = 0, y = 9}, soul_pos = {x = 1, y = 9}, cost = 50, soul_rate = 0, hidden = true, atlas = "janeomegatarots", can_use = Jane.can_use, loc_vars = function() return {vars = {((G.GAME or {}).dollars or 0) ^ 2}} end, use = function() ease_dollars(G.GAME.dollars ^ 2) end, } SMODS.Consumable { key = "wheel_of_fortune_omega", set = "jane_omegaconsumable", loc_txt = { name = "The Wheel of Fortune {C:dark_edition}Omega", text = { "Create {C:dark_edition,E:1}50 {C:attention}consumables", "{C:inactive}(Adds a temporary Showman)", "{C:inactive}(Does not require room)", }, }, pos = {x = 0, y = 10}, soul_pos = {x = 1, y = 10}, cost = 50, soul_rate = 0, hidden = true, atlas = "janeomegatarots", can_use = Jane.can_use, loc_vars = function() return {vars = {((G.GAME or {}).dollars or 0) ^ 2}} end, use = function() create_many("Consumeables", 50, "Rare") end, } for _, vv in pairs({ {b = "star", n = "The Flash", s = "Diamonds", p = {x = 2, y = 1}, o = 17}, {b = "moon", n = "The Eclipse", s = "Clubs", p = {x = 1, y = 1}, o = 18}, {b = "sun", n = "The Darkness", s = "Hearts", p = {x = 0, y = 1}, o = 19}, {b = "world", n = "Desolate", s = "Spades", p = {x = 8, y = 0}, o = 21}, }) do SMODS.Consumable { key = vv.b .. "_omega", set = "jane_omegaconsumable", loc_txt = { name = "The " .. string.upper(string.sub(vv.b, 1, 1)) .. string.sub(vv.b, 2, string.len(vv.b)) .. " {C:dark_edition}Omega", text = { "Convert {C:attention}all {C:" .. string.lower(vv.s) .. "}" .. vv.s, "to {C:dark_edition,E:1}Crystal {}or {C:dark_edition,E:1}Moire", }, }, pos = {x = 0, y = vv.o}, soul_pos = {x = 1, y = vv.o}, cost = 250, soul_rate = 0, hidden = true, atlas = "janeomegatarots", loc_vars = function(_, info_queue) info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_crystal info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_moire end, can_use = Jane.can_use, use = function() play_sound("jane_pop") for _, v in ipairs(G.playing_cards) do if v:is_suit(vv.s) and not v:nosuit() then if v.area == G.hand then Jane.q(function() v:set_edition({[editions[pseudorandom("auraexrandom", 1, #editions)]] = true}) play_sound("jane_pop") v:juice_up(1, 0.5) end, 0.75) else v:set_edition({[editions[pseudorandom("auraexrandom", 1, #editions)]] = true}) end end end end, } end local function obfuscated_text(length) local chars = "ABCDEFGHIJKLMNOPQRSTU,VWXYZ abcdefghijklmnopq,rstuvwxyz0123456789+-?!,$%[]()" local ret = "" for _ = 0, length do local r = math.random(#chars) ret = ret .. chars:sub(r, r + 1) end return ret end SMODS.Consumable { key = "soul_omega", set = "jane_omegaconsumable", loc_txt = { name = "{C:red,s:3}Balatro\'s Soul", text = {"{C:red,s:5,E:1}?????"}, }, pos = {x = 0, y = 22}, soul_pos = {x = 1, y = 22, extra = {x = 2, y = 22}}, cost = 0, soul_rate = 0, hidden = true, atlas = "janeomegatarots", can_use = Jane.can_use, use = function(_, card) Jane.q(function() end, 0.25, "REAL", "after") for i = 1, 60 do Jane.card_status_text( card, obfuscated_text(math.random(6 * (i / 15), 18 * (i / 15))), nil, card.T.h * 0.05, G.C.RED, 0.6, 0.5 - (i / 125), 0.4, 0.4, "bm", "generic1" ) end if not G.P_CENTERS.j_Bakery_Lua then return end Jane.q(function() SMODS.destroy_cards(G.jokers.cards, {bypass_eternal = true}) G.jokers:change_size(1 - G.jokers.config.card_limit) G.GAME.banned_keys.j_Bakery_Lua = nil SMODS.add_card { set = "Joker", key = "j_Bakery_Lua", force_stickers = {"eternal", "rental"}, } G.GAME.banned_keys.j_Bakery_Lua = true G.GAME.banned_keys.c_jane_soul_omega = true play_sound("jane_enchant", 0.75, 1) end, 0.75, "REAL", "after") end, } local orig_can_reroll = G.FUNCS.can_reroll local orig_create_card = create_card function G.FUNCS.can_reroll(e, ...) if Talisman and Talisman.config_file and Talisman.config_file.disable_anims or not G.GAME.modifiers.omegas_found or G.GAME.modifiers.omegas_found <= 0 then return orig_can_reroll(e, ...) end e.config.colour = G.C.UI.BACKGROUND_INACTIVE e.config.button = nil end ---@diagnostic disable-next-line: lowercase-global function create_card(...) local card = orig_create_card(...) if not card.gc or G.STATE == G.STATES.MENU or G.STATE ~= G.STATES.SHOP and card:gc().set ~= "Spectral" then return card end for _, v in pairs(G.P_CENTER_POOLS.jane_omegaconsumable) do local key = v.key if not G.GAME.banned_keys[key] and card:gc().key:sub(2) == key:sub(#"c_jane_", #key - #"_omega") and pseudorandom("omega_replacement") < G.GAME.modifiers.omega_replacement then local copy = G.GAME.modifiers.omegas_found G.GAME.modifiers.omegas_found = (G.GAME.modifiers.omegas_found or 0) + 1 Jane.q(function() card:set_ability(G.P_CENTERS[key]) card:juice_up(1.5, 1.5) card:set_cost() if not copy or copy <= 0 then local pitch = math.pow(2 ^ (1 / 6), G.GAME.modifiers.omegas_found - 1) play_sound("jane_omegacard", pitch, 0.4) Jane.q(function() Jane.q(function() local handy_speed = ((Handy or {}).speed_multiplier or {}).value or 1 local text = "Omega!" .. (G.GAME.modifiers.omegas_found > 1 and (" X" .. number_format(G.GAME.modifiers.omegas_found)) or "") attention_text({ text = text, scale = 1.4, align = "cm", major = G.play, colour = G.C.jane_RGB, offset = {x = 0, y = -2.7}, hold = G.SETTINGS.GAMESPEED * handy_speed * 2, }) end) if key == "c_jane_soul_omega" then play_sound("jane_chime", 1, 0.65) end local anims = Talisman and Talisman.config_file and Talisman.config_file.disable_anims or G.GAME.modifiers.omega_replacement >= 1 / 13 or nil Jane.q(function() G.GAME.modifiers.omegas_found = 0 end, anims and 1, anims and "REAL", anims and "after") end) end end, nil, nil, "after", false, false) break end end return card end