diff --git a/manifest.json b/manifest.json index 9d0d527..460593b 100644 --- a/manifest.json +++ b/manifest.json @@ -16,5 +16,5 @@ "Bakery (>=3.0.0~*)" ], "conflicts": [], - "version": "1.12.6" + "version": "1.12.7" } \ No newline at end of file diff --git a/src/back.lua b/src/back.lua index 5ffb665..0e25605 100644 --- a/src/back.lua +++ b/src/back.lua @@ -750,7 +750,7 @@ back { end, calculate = function(_, _, context) if Jane.is_end_of_ante(context) then - G.GAME.modifiers.omega_replacement = G.GAME.modifiers.omega_replacement ^ 0.765 + G.GAME.modifiers.omega_replacement = G.GAME.modifiers.omega_replacement ^ 0.9 Jane.q(Jane.display_omega_odds) end end, diff --git a/src/main.lua b/src/main.lua index 77e20e7..b190c3b 100644 --- a/src/main.lua +++ b/src/main.lua @@ -34,17 +34,14 @@ local function update_omega_from_collection() return end - local flag - for i = 1, #buffer do if buffer[i] == "jane_omegaconsumable" then table.remove(buffer, i) - flag = true i = i - 1 end end - if not flag and G.GAME.modifiers.omega_replacement then + if G.GAME.modifiers.omega_replacement then buffer[#buffer + 1] = "jane_omegaconsumable" end end @@ -292,6 +289,13 @@ end local orig_can_highlight = CardArea.can_highlight function CardArea:can_highlight(...) + for _, v in pairs(type(self.cards) == "table" and self.cards or {}) do + if (((v or {}).config or {}).center or {}).key == "c_jane_fool_omega" then + self.config.highlighted_limit = math.max(self.config.highlighted_limit, 2) + return true + end + end + if self ~= G.consumeables then return orig_can_highlight(self, ...) end diff --git a/src/omega.lua b/src/omega.lua index 7f13793..f9086d1 100644 --- a/src/omega.lua +++ b/src/omega.lua @@ -66,7 +66,7 @@ local function create_card_set(needle, edition, amount) end local function omega_level_up(hand, number, card) - local factor = 3 ^ number + local factor = 2 ^ number update_hand_text( {sound = "button", volume = 0.7, pitch = 0.8, delay = 0.3}, @@ -173,9 +173,9 @@ for _, v in ipairs({ loc_txt = { name = v.n .. " {C:dark_edition}Omega", text = { - "{C:attention}Triples {C:chips}Chips{}, {C:chips}Level Chips{},", + "{C:attention}Doubles {C:chips}Chips{}, {C:chips}Level Chips{},", "{C:mult}Mult{}, {C:mult}Level Mult{}, and", - "{C:planet}planet level {}of {C:attention}" .. v.h, + "{C:planet}Level {}of {C:attention}" .. v.h, }, }, set = "jane_omegaconsumable", @@ -204,9 +204,8 @@ SMODS.Consumable { loc_txt = { name = "{C:dark_edition}Sagittarius A*", 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}every hand", + "{C:attention}Double {}the {C:planet}Level", + "of played hand", }, }, set = "jane_omegaconsumable", @@ -215,17 +214,20 @@ SMODS.Consumable { cost = 15, soul_rate = 0, atlas = "janeomegaplanets", + pronouns = "any_all", 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) + can_use = function(_, card) + return Jane.can_use() and card.area ~= G.consumeables end, - bulk_use = function(_, card, _, _, number) - omega_level_up(nil, number, card) + use = function(self) + SMODS.add_card({key = self.key, area = G.consumeables, set = self.set}) + end, + calculate = function(_, card, context) + return context.before and G.GAME.hands[context.scoring_name] and { + card = card, + message = localize("k_level_up_ex"), + level_up = G.GAME.hands[context.scoring_name].level, + } or nil end, } @@ -269,9 +271,8 @@ SMODS.Consumable { loc_txt = { name = "Aura {C:dark_edition}Omega", text = { - "Apply {C:dark_edition}Crystal {}to all", - "{C:attention}selected Jokers {}and", - "{C:attention}playing cards", + "Apply {C:dark_edition}Negative {}to", + "{C:attention}all playing cards", }, }, pos = {x = 0, y = 1}, @@ -281,20 +282,14 @@ SMODS.Consumable { 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] = {key = "e_negative_playing_card", set = "Edition", config = {extra = 1}} end, can_use = function() if not Jane.can_use() then return false end - for _, v in ipairs(G.jokers.highlighted) do - if not v.edition then - return true - end - end - - for _, v in ipairs(G.hand.highlighted) do + for _, v in ipairs(G.playing_cards) do if not v.edition then return true end @@ -303,15 +298,9 @@ SMODS.Consumable { return false end, use = function() - for _, v in ipairs(G.jokers.highlighted) do + for _, v in ipairs(G.playing_cards) do if not v.edition then - v:set_edition({jane_crystal = true}) - end - end - - for _, v in ipairs(G.hand.highlighted) do - if not v.edition then - v:set_edition({jane_crystal = true}) + v:set_edition({negative = true}) end end end, @@ -323,8 +312,8 @@ SMODS.Consumable { loc_txt = { name = "Cryptid {C:dark_edition}Omega", text = { - "Create {C:attention}20{} copies of", - "{C:attention}selected playing cards", + "Create {C:attention}52{} copies of a", + "{C:attention}selected playing card", }, }, pos = {x = 0, y = 2}, @@ -334,16 +323,14 @@ SMODS.Consumable { hidden = true, atlas = "janeomegaspectrals", can_use = function() - return Jane.can_use() and next(G.hand.highlighted) + return Jane.can_use() and #G.hand.highlighted == 1 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 + for _ = 1, 52 * number do + SMODS.copy_card(G.hand.highlighted[1]):start_materialize() end end, } @@ -535,7 +522,8 @@ SMODS.Consumable { loc_txt = { name = "Immolate {C:dark_edition}Omega", text = { - "{C:money}Sells{} all cards {C:attention}in hand", + "{C:money}Sells{} all remaining", + "cards in the deck", "Each card {C:money}sold {}multiplies", "{C:money}money{} by its {C:attention}rank", not Jane.cry and "{C:inactive}(Max of {C:money}$#1#{C:inactive} each)" or nil, @@ -551,10 +539,10 @@ SMODS.Consumable { return {vars = {200}} end, can_use = function() - return Jane.can_use() and next(G.hand.cards) + return Jane.can_use() and next(G.deck.cards) end, use = function() - for _, v in pairs(G.hand.cards) do + for _, v in pairs(G.deck.cards) do Jane.q(function() v:sell_card() local amount = (v:norank() and 1 or v:get_id()) * G.GAME.dollars - G.GAME.dollars @@ -609,10 +597,9 @@ SMODS.Consumable { loc_txt = { name = "Ouija {C:dark_edition}Omega", text = { - "{C:attention}Playing cards {}whose", - "rank doesn't match any", - "of the {C:attention}selected cards", - "will be {C:red}destroyed", + "Converts all playing", + "cards' {C:attention}rank {}to the", + "{C:attention}selected card", }, }, pos = {x = 0, y = 11}, @@ -622,34 +609,44 @@ SMODS.Consumable { hidden = true, atlas = "janeomegaspectrals", can_use = function() - return Jane.can_use() and next(G.hand.highlighted) + return Jane.can_use() and + #G.hand.highlighted == 1 and + not SMODS.has_no_suit(G.hand.highlighted[1]) and + not SMODS.has_no_rank(G.hand.highlighted[1]) end, - use = function() - if not next(G.hand.highlighted) then - return + use = function(_, card) + Jane.q(function() + play_sound("tarot1") + card:juice_up(0.3, 0.5) + end, 0.4, nil, "after") + + for i = 1, #G.hand.cards do + local percent = 1.15 - (i - 0.999) / (#G.hand.cards - 0.998) * 0.3 + + Jane.q(function() + G.hand.cards[i]:flip() + play_sound("card1", percent) + G.hand.cards[i]:juice_up(0.3, 0.3) + end, 0.15, nil, "after") end - local destroy = {} + local rank = G.hand.highlighted[1].base.value 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 - destroy[#destroy + 1] = c - end + Jane.q(function() + assert(SMODS.change_base(c, nil, rank)) + end) end - SMODS.destroy_cards(destroy) + for i = 1, #G.hand.cards do + local percent = 0.85 + (i - 0.999) / (#G.hand.cards - 0.998) * 0.3 + + Jane.q(function() + G.hand.cards[i]:flip() + play_sound("tarot2", percent, 0.6) + G.hand.cards[i]:juice_up(0.3, 0.3) + end, 0.15, nil, "after") + end end, } @@ -659,58 +656,94 @@ SMODS.Consumable { loc_txt = { name = "Sigil {C:dark_edition}Omega", text = { - "{C:attention}Playing cards {}whose", - "suit doesn't match any", - "of the {C:attention}selected cards", - "will be {C:red}destroyed", + "Converts all playing", + "cards' {C:attention}suit {}to the", + "{C:attention}selected card", }, }, pos = {x = 0, y = 12}, soul_pos = {x = 1, y = 12}, - soul_rate = 0, cost = 175, + soul_rate = 0, + hidden = true, atlas = "janeomegaspectrals", can_use = function() - return Jane.can_use() and next(G.hand.highlighted) + return Jane.can_use() and + #G.hand.highlighted == 1 and + not SMODS.has_no_suit(G.hand.highlighted[1]) and + not SMODS.has_no_rank(G.hand.highlighted[1]) end, - use = function() - local destroy = {} + use = function(_, card) + Jane.q(function() + play_sound("tarot1") + card:juice_up(0.3, 0.5) + end, 0.4, nil, "after") - if not next(G.hand.highlighted) then - return + for i = 1, #G.hand.cards do + local percent = 1.15 - (i - 0.999) / (#G.hand.cards - 0.998) * 0.3 + + Jane.q(function() + G.hand.cards[i]:flip() + play_sound("card1", percent) + G.hand.cards[i]:juice_up(0.3, 0.3) + end, 0.15, nil, "after") end + local suit = G.hand.highlighted[1].base.suit + 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 - destroy[#destroy + 1] = c - end + Jane.q(function() + assert(SMODS.change_base(c, suit)) + end) end - SMODS.destroy_cards(destroy) + for i = 1, #G.hand.cards do + local percent = 0.85 + (i - 0.999) / (#G.hand.cards - 0.998) * 0.3 + + Jane.q(function() + G.hand.cards[i]:flip() + play_sound("tarot2", percent, 0.6) + G.hand.cards[i]:juice_up(0.3, 0.3) + end, 0.15, nil, "after") + end end, } +local function create_many(set, count, rarity) + local showman = SMODS.add_card({key = "j_ring_master", set = "Joker"}) + showman:set_perishable(true) + local ban = {} + + for _, v in pairs(G.P_CENTER_POOLS.jane_omegaconsumable) do + ban[v.key] = G.GAME.banned_keys[v.key] + G.GAME.banned_keys[v.key] = true + end + + 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}) + + for _, v in pairs(G.P_CENTER_POOLS.jane_omegaconsumable) do + G.GAME.banned_keys[v.key] = ban[v.key] + 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", + "Fill all {C:attention}Joker Slots", + "with random {C:red}Rare {C:attention}Jokers", + "{C:inactive}(Adds a temporary Showman)", }, }, pos = {x = 0, y = 15}, @@ -719,33 +752,11 @@ SMODS.Consumable { 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 + can_use = function() + return Jane.can_use() and #G.jokers.cards < G.jokers.config.card_limit 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 + use = function() + create_many("Joker", #G.jokers.cards - G.jokers.config.card_limit, "Rare") end, } @@ -754,10 +765,7 @@ SMODS.Consumable { set = "jane_omegaconsumable", loc_txt = { name = "The Fool {C:dark_edition}Omega", - text = { - "Create {C:attention}2{} random", - "{C:jane_RGB,E:1}Omega{} cards", - }, + text = {"Clone {C:attention}any {}selected card"}, }, pos = {x = 0, y = 0}, soul_pos = {x = 1, y = 0}, @@ -765,18 +773,46 @@ SMODS.Consumable { soul_rate = 0, hidden = true, atlas = "janeomegatarots", - can_use = function() - return Jane.can_use() and #G.consumeables.cards < G.consumeables.config.card_limit + can_use = function(self, card) + if not Jane.can_use() then + return false + end + + local cards = self:highlighted(card) + + if #cards ~= 1 then + return false + end + + local area = cards[1].area + + if not area or not area.config then + return false + end + + if area == G.hand then + return true + end + + local limits = area.config.card_limits + local free = card.area == area and 1 or 0 + return not limits or not limits.extra_slots_used or #area.cards < area.config.card_limit + free end, - use = function() - for _ = 1, 2 do - if #G.consumeables.cards < G.consumeables.config.card_limit then - local orig = G.GAME.banned_keys.c_jane_soul_omega - G.GAME.banned_keys.c_jane_soul_omega = true - SMODS.add_card({set = "jane_omegaconsumable"}) - G.GAME.banned_keys.c_jane_soul_omega = orig + use = function(self, card) + SMODS.copy_card(self:highlighted(card)[1]) + end, + highlighted = function(_, card) + local cards = {} + + for _, v in pairs(G.I.CARDAREA) do + for _, vv in pairs(v.highlighted) do + if vv ~= card then + table.insert(cards, vv) + end end end + + return cards end, } @@ -862,7 +898,7 @@ for _, v in ipairs({ text = { "Enhance {C:attention}selected playing", "{C:attention}cards {}to {C:attention}" .. v.c .. "{} cards", - "{C:attention}Duplicate {}each card {C:attention}10 times", + "{C:attention}Duplicate {}each card {C:attention}3 times", }, }, pos = {x = 0, y = v.omega}, @@ -926,7 +962,7 @@ for _, v in ipairs({ Jane.q(function() for _, h in ipairs(to_copy) do - for _ = 1, 10 do + for _ = 1, 3 do SMODS.copy_card(h):start_materialize() end end @@ -941,8 +977,7 @@ SMODS.Consumable { loc_txt = { name = "The High Priestess {C:dark_edition}Omega", text = { - "Every {C:attention}Joker{}, {C:attention}consumable{},", - "and {C:attention}playing card{} will", + "All {C:attention}playing cards", "trigger {C:spectral}Black Hole", }, }, @@ -957,50 +992,18 @@ SMODS.Consumable { 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, - }) + SMODS.upgrade_poker_hands({hands = G.handlist, level_up = #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) - local ban = {} - - for _, v in pairs(G.P_CENTER_POOLS.jane_omegaconsumable) do - ban[v.key] = G.GAME.banned_keys[v.key] - G.GAME.banned_keys[v.key] = true - end - - 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}) - - for _, v in pairs(G.P_CENTER_POOLS.jane_omegaconsumable) do - G.GAME.banned_keys[v.key] = ban[v.key] - end - 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}(Currently #1#)", - "{C:inactive}(Adds a temporary Showman)", + "Create {C:attention}2{} random", + "{C:jane_RGB,E:1}Omega{} cards", }, }, pos = {x = 0, y = 4}, @@ -1009,44 +1012,31 @@ SMODS.Consumable { soul_rate = 0, hidden = true, atlas = "janeomegatarots", - loc_vars = function() - if not G.playing_cards then - return - end - - 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 - - return {vars = {count}} - end, can_use = function() - if not Jane.can_use() then - return false - end - - for _, v in pairs(G.playing_cards) do - if not v:norank() and v:get_id() == 13 then - return true - end - end - - return false + return Jane.can_use() and #G.consumeables.cards < G.consumeables.config.card_limit end, use = function() - local count = 0 + for _ = 1, 2 do + if #G.consumeables.cards < G.consumeables.config.card_limit then + local banned, soul, black_hole = + G.GAME.banned_keys, "c_jane_soul_omega", "c_jane_black_hole_omega" - for _, v in pairs(G.playing_cards) do - if not v:norank() and v:get_id() == 13 then - count = count + 1 + local orig_soul, orig_black_hole = banned[soul], banned[black_hole] + banned[soul], banned[black_hole] = true, true + + SMODS.add_card( + { + set = "jane_omegaconsumable", + key = pseudorandom_element( + G.P_CENTER_POOLS.jane_omegaconsumable, + pseudoseed("emperor_omega") + ).key, + } + ) + + banned[soul], banned[black_hole] = orig_soul, orig_black_hole end end - - create_many("Joker", count, "Rare") end, } @@ -1188,6 +1178,7 @@ SMODS.Consumable { cost = 0, soul_rate = 0, hidden = true, + pronouns = "any_all", atlas = "janeomegatarots", can_use = Jane.can_use, use = function(_, card) @@ -1319,7 +1310,7 @@ function create_card(...) }) end) - if key == "c_jane_soul_omega" then + if ({c_jane_soul_omega = true, c_jane_black_hole_omega = true})[key] then play_sound("jane_chime", 1, 0.65) end end