Rebalance new cards

This commit is contained in:
Emik 2026-10-03 22:29:43 +02:00
parent 5d90c1b11d
commit 9474e85826
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
4 changed files with 147 additions and 82 deletions

View file

@ -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;
}

View file

@ -16,5 +16,5 @@
"Bakery (>=3.0.0~*)"
],
"conflicts": [],
"version": "1.12.2"
"version": "1.12.3"
}

View file

@ -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,

View file

@ -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