From e9ae99e14e545e52539bc8ad8e326a4031543177 Mon Sep 17 00:00:00 2001 From: Emik Date: Sat, 3 Oct 2026 22:29:43 +0200 Subject: [PATCH] Rebalance new cards --- assets/shaders/polygloss.fs | 2 +- manifest.json | 2 +- src/edition.lua | 2 +- src/omega.lua | 225 +++++++++++++++++++++++------------- 4 files changed, 148 insertions(+), 83 deletions(-) diff --git a/assets/shaders/polygloss.fs b/assets/shaders/polygloss.fs index 51db689..86827d8 100644 --- a/assets/shaders/polygloss.fs +++ b/assets/shaders/polygloss.fs @@ -207,7 +207,7 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords vec4 tex = Texel(texture, texture_coords); vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba; - // Dummy, doesn't do anything but at least it makes the shader useable + // Doesn't do anything it makes the shader useable if (uv.x > uv.x * 2.){ uv = polygloss; } diff --git a/manifest.json b/manifest.json index bb86304..e92f5be 100644 --- a/manifest.json +++ b/manifest.json @@ -16,5 +16,5 @@ "Bakery (>=3.0.0~*)" ], "conflicts": [], - "version": "1.12.2" + "version": "1.12.3" } \ No newline at end of file diff --git a/src/edition.lua b/src/edition.lua index 4d37dbe..e8f8168 100644 --- a/src/edition.lua +++ b/src/edition.lua @@ -126,7 +126,7 @@ SMODS.Edition({ "{X:dark_edition,C:white}^#2#{} Mult", }, }, - config = {e_chips = 0.8, e_mult = 1.2}, + config = {e_chips = 0.75, e_mult = 1.25}, sound = {sound = "jane_e_moire", per = 1, vol = 0.7}, weight = 0, extra_cost = 10, diff --git a/src/omega.lua b/src/omega.lua index d9285da..0bd9e7d 100644 --- a/src/omega.lua +++ b/src/omega.lua @@ -108,7 +108,7 @@ local function omega_level_up(hand, number, card) } ) - delay(2) + delay(1) update_hand_text( {sound = "button", volume = 0.7, pitch = 0.8, delay = 1}, @@ -233,7 +233,7 @@ SMODS.Consumable { set = "jane_omegaconsumable", loc_txt = { name = "Ankh {C:dark_edition}Omega", - text = {"Create {C:attention}4{} copies of", "a {C:attention}selected Joker"}, + text = {"Create {C:attention}3{} copies of", "a {C:attention}selected Joker"}, }, pos = {x = 0, y = 0}, soul_pos = {x = 1, y = 0}, @@ -242,35 +242,35 @@ SMODS.Consumable { hidden = true, atlas = "janeomegaspectrals", can_use = function() - return Jane.can_use() and ((G.jokers or {}).highlighted or {})[1] + return Jane.can_use() and + G.jokers.highlighted[1] and + #G.jokers.cards + 3 <= G.jokers.config.card_limit 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] + local joker = G.jokers.highlighted[1] if not joker then return end - for _ = 1, 4 * number do + for _ = 1, 3 * 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", + "Apply {C:dark_edition}Crystal {}to all", + "{C:attention}selected Jokers {}and", + "{C:attention}playing cards", }, }, pos = {x = 0, y = 1}, @@ -281,21 +281,36 @@ SMODS.Consumable { 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() + if not Jane.can_use() then + return false + end + for _, v in ipairs(G.jokers.highlighted) do if not v.edition then - v:set_edition({[editions[pseudorandom("auraexrandom", 1, #editions)]] = true}) + return 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}) + return true + end + end + + return false + end, + use = function() + for _, v in ipairs(G.jokers.highlighted) 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}) end end end, @@ -346,6 +361,7 @@ for _, v in ipairs({ text = { "Apply a {C:attention}" .. v.s .. " Seal{} to", "{C:attention}all playing cards", + "{C:inactive}(Can override seals)", }, }, pos = {x = 0, y = v.y}, @@ -363,7 +379,7 @@ for _, v in ipairs({ card:set_seal(v.s, i > 50, i > 50) end - for _, card in pairs(G.deck.cards) do + for _, card in pairs(G.playing_cards) do card:set_seal(v.s, true, true) end end, @@ -387,7 +403,17 @@ SMODS.Consumable { info_queue[#info_queue + 1] = G.P_CENTERS.e_negative end, can_use = function() - return Jane.can_use() and next(G.jokers.cards) + if not Jane.can_use() then + return false + end + + for _, v in ipairs(G.jokers.cards) do + if not v.edition then + return true + end + end + + return false end, use = function() for k, v in ipairs(G.jokers.cards) do @@ -467,8 +493,8 @@ SMODS.Consumable { 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", + "Apply {C:dark_edition,E:1}Moire {}to", + "all {C:attention}Jokers", }, }, pos = {x = 0, y = 7}, @@ -478,16 +504,25 @@ 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] = G.P_CENTERS.e_jane_moire end, can_use = function() - return Jane.can_use() and next(G.jokers.cards) + if not Jane.can_use() then + return false + end + + for _, v in ipairs(G.jokers.cards) do + if not v.edition then + return true + end + end + + return false 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}) + v:set_edition({jane_moire = true}) end end end, @@ -499,9 +534,10 @@ SMODS.Consumable { loc_txt = { name = "Immolate {C:dark_edition}Omega", text = { - "{C:red}Destroys{} {C:attention}selected playing cards", - "Each card destroyed multiplies", + "{C:money}Sells{} all cards {C:attention}in hand", + "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, }, }, pos = {x = 0, y = 8}, @@ -510,15 +546,23 @@ SMODS.Consumable { soul_rate = 0, hidden = true, atlas = "janeomegaspectrals", - can_use = function() - return Jane.can_use() and next(G.hand.highlighted) + loc_vars = function(_, info_queue) + return {vars = {2000}} 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 + can_use = function() + return Jane.can_use() and next(G.hand.cards) + end, + use = function() + ---@diagnostic disable-next-line: deprecated + local copy = {unpack(G.hand.cards)} - SMODS.destroy_cards(G.hand.highlighted) + for _, v in pairs(copy) do + Jane.q(function() + v:sell_card() + local amount = (v:norank() and 1 or v:get_id()) * G.GAME.dollars - G.GAME.dollars + ease_dollars(Jane.cry and amount or math.min(amount, 2000)) + end) + end end, } @@ -567,9 +611,10 @@ SMODS.Consumable { 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", + "{C:attention}Playing cards {}whose", + "rank doesn't match any", + "of the {C:attention}selected cards", + "will be {C:red}destroyed", }, }, pos = {x = 0, y = 11}, @@ -586,6 +631,8 @@ SMODS.Consumable { return end + local destroy = {} + for _, c in pairs(G.playing_cards) do local safe = c.highlighted @@ -600,9 +647,11 @@ SMODS.Consumable { end if not safe then - c:sell_card() + destroy[#destroy + 1] = c end end + + SMODS.destroy_cards(destroy) end, } @@ -612,9 +661,10 @@ SMODS.Consumable { 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", + "{C:attention}Playing cards {}whose", + "suit doesn't match any", + "of the {C:attention}selected cards", + "will be {C:red}destroyed", }, }, pos = {x = 0, y = 12}, @@ -626,6 +676,8 @@ SMODS.Consumable { return Jane.can_use() and next(G.hand.highlighted) end, use = function() + local destroy = {} + if not next(G.hand.highlighted) then return end @@ -645,9 +697,11 @@ SMODS.Consumable { end if not safe then - c:sell_card() + destroy[#destroy + 1] = c end end + + SMODS.destroy_cards(destroy) end, } @@ -677,7 +731,7 @@ SMODS.Consumable { end, use = function(self) for _, v in ipairs(self.jokers()) do - SMODS.add_card {key = v.key, set = "Joker"} + SMODS.add_card({key = v.key, set = "Joker"}) end end, jokers = function() @@ -704,7 +758,7 @@ SMODS.Consumable { name = "The Fool {C:dark_edition}Omega", text = { "Create {C:attention}2{} random", - "{C:red,E:1}Omega{} cards", + "{C:jane_RGB,E:1}Omega{} cards", }, }, pos = {x = 0, y = 0}, @@ -715,25 +769,17 @@ SMODS.Consumable { 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"}) + 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 end end end, } -local omega_copyamount = 10 - for _, v in ipairs({ { b = "magician", @@ -816,8 +862,7 @@ for _, v in ipairs({ 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", + "{C:attention}Duplicate {}each card {C:attention}10 times", }, }, pos = {x = 0, y = v.omega}, @@ -871,17 +916,17 @@ for _, v in ipairs({ 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 - + -- Removing all other cards is too strong. + -- 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 + for _ = 1, 10 do SMODS.copy_card(h):start_materialize() end end @@ -973,8 +1018,9 @@ SMODS.Consumable { 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#)", + "Gain {X:money,C:dark_edition}+$^2", + "{C:inactive}(Currently {C:money}+$#1#{C:inactive})", + not Jane.cry and "{C:inactive}(Max of {C:money}$#2#{C:inactive})" or nil, }, }, pos = {x = 0, y = 9}, @@ -984,11 +1030,15 @@ SMODS.Consumable { hidden = true, atlas = "janeomegatarots", can_use = Jane.can_use, - loc_vars = function() - return {vars = {((G.GAME or {}).dollars or 0) ^ 2}} + loc_vars = function(self) + return {vars = {self.money(), 20000}} end, - use = function() - ease_dollars(G.GAME.dollars ^ 2) + use = function(self) + ease_dollars(self.money()) + end, + money = function() + return not (G.GAME or {}).dollars and 0 or + (Jane.cry and G.GAME.dollars ^ 2 or math.min(G.GAME.dollars ^ 2, 20000)) end, } @@ -1000,7 +1050,7 @@ SMODS.Consumable { text = { "Create {C:dark_edition,E:1}50 {C:attention}consumables", "{C:inactive}(Adds a temporary Showman)", - "{C:inactive}(Does not require room)", + "{C:inactive}(Doesn't require room)", }, }, pos = {x = 0, y = 10}, @@ -1031,7 +1081,8 @@ for _, vv in pairs({ 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", + "to {C:dark_edition,E:1}Crystal{}, {C:dark_edition,E:1}Moire{},", + "or {C:dark_edition,E:1}Polygloss", }, }, pos = {x = 0, y = vv.o}, @@ -1043,13 +1094,28 @@ for _, vv in pairs({ 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 + info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_polygloss + end, + can_use = function() + if not Jane.can_use() then + return false + end + + for _, v in ipairs(G.playing_cards) do + if v:is_suit(vv.s) and not v.edition and not v:nosuit() then + return true + end + end + + return false end, - can_use = Jane.can_use, use = function() + local editions = {"jane_crystal", "jane_moire", "jane_polygloss"} + 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:is_suit(vv.s) and not v.edition and not v:nosuit() then if v.area == G.hand then Jane.q(function() v:set_edition({[editions[pseudorandom("auraexrandom", 1, #editions)]] = true}) @@ -1066,7 +1132,7 @@ for _, vv in pairs({ end local function obfuscated_text(length) - local chars = "ABCDEFGHIJKLMNOPQRSTU,VWXYZ abcdefghijklmnopq,rstuvwxyz0123456789+-?!,$%[]()" + local chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-?!,$%[]()" local ret = "" for _ = 0, length do @@ -1115,19 +1181,20 @@ SMODS.Consumable { 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.destroy_cards(G.jokers.cards, {bypass_eternal = true}) + G.jokers:change_size(1 - G.jokers.config.card_limits.base) SMODS.add_card { set = "Joker", + no_edition = true, key = "j_Bakery_Lua", force_stickers = {"eternal", "rental"}, } + play_sound("jane_enchant", 0.75, 1) 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, } @@ -1150,9 +1217,7 @@ end 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 + if G.STATE ~= G.STATES.SMODS_BOOSTER_OPENED or not card.gc then return card end