Completely Rework Saint, Buff Moire, Fix Artificer

This commit is contained in:
Emik 2026-06-23 18:52:55 +02:00
parent f76e4fe160
commit b23ab743e3
Signed by: emik
GPG key ID: 6B0CD72A5E503BDF
3 changed files with 52 additions and 102 deletions

View file

@ -18,5 +18,5 @@
"conflicts": [ "conflicts": [
"Jen" "Jen"
], ],
"version": "1.8.9" "version": "1.9.0"
} }

View file

@ -184,14 +184,13 @@ SMODS.Edition({
}, },
config = {e_chips = Jane.cry and 0.8 or 0.9, e_mult = Jane.cry and 1.2 or 1.1}, config = {e_chips = Jane.cry and 0.8 or 0.9, e_mult = Jane.cry and 1.2 or 1.1},
sound = {sound = "jane_e_moire", per = 1, vol = 0.7}, sound = {sound = "jane_e_moire", per = 1, vol = 0.7},
weight = 2, weight = 1,
extra_cost = 10, extra_cost = 10,
in_shop = true, in_shop = true,
shader = "moire", shader = "moire",
in_pool = allow_moire,
apply_to_float = false, apply_to_float = false,
get_weight = function(self) get_weight = function(self)
return G.GAME.edition_rate * self.weight * (allow_moire() and 1 or 0) return G.GAME.edition_rate * self.weight * (allow_moire() and 20 or 2)
end, end,
loc_vars = function(self, _, _) loc_vars = function(self, _, _)
return {vars = {self.config.e_chips, self.config.e_mult}} return {vars = {self.config.e_chips, self.config.e_mult}}

View file

@ -383,6 +383,7 @@ SMODS.Joker {
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
config = {extra = {uses = 2}}, config = {extra = {uses = 2}},
eternal_compat = false,
blueprint_compat = false, blueprint_compat = false,
cost = Jane.cry and 50 or 7, cost = Jane.cry and 50 or 7,
rarity = Jane.cry and exotic or 3, rarity = Jane.cry and exotic or 3,
@ -575,25 +576,18 @@ function Card:set_debuff(should_debuff)
end end
end end
local function attunement()
return (G.GAME or {}).weeckweeck and 2 or (Jane.cry and 1.002 or 1.25)
end
SMODS.Joker { SMODS.Joker {
key = "saint", key = "saint",
atlas = "janesaint", atlas = "janesaint",
loc_txt = { loc_txt = {
name = "The Saint{C:jane_RGB}#1#", name = {"{}", "#1#{C:jane_RGB,s:0.8}#2#", "{C:jane_RGB,s:1.6}#3#"},
text = Jane.cry and { text = {
"{C:attention}Use {}to toggle {X:legendary,C:white}Eternal{} stickers to the left", "{C:attention}Use {}to toggle itself or",
"{C:spectral}Analog{}, {C:spectral}Ankh{}, {C:spectral}Gateway{}, and", "other Jokers to its",
"{C:spectral,s:0.95}Summoning {s:0.95}will {C:attention,s:0.95}not destroy Jokers", "left's {X:legendary,C:white}Eternal{} sticker",
"{C:jane_RGB}#2#{}#3#{X:black,C:jane_RGB,s:1.5}#4#{C:spectral}#5#{C:mult}#6#", "{C:attention}#4#{}#5#{X:black,C:jane_RGB}#6#{C:spectral}#7#",
"{C:inactive,s:1.25}#7#{C:attention,s:1.25}#8#{C:inactive,s:1.25}#9#{C:inactive}#10#", "{C:inactive}#8#{C:attention}#9#{C:inactive}#10#",
} or { Jane.cry and "{C:inactive}(Gateway has no downside)" or nil,
"{C:attention}Use {}to toggle {X:legendary,C:white}Eternal{} stickers to the left",
"{C:jane_RGB}#2#{}#3#{C:dark_edition}#4#{C:spectral}#5#",
"{C:inactive,s:1.25}#6#{C:attention,s:1.25}#7#{C:inactive,s:1.25}#8#{C:inactive}#9#",
}, },
}, },
config = {extra = {karma = 0, max_karma = Jane.cry and 10 or 2}}, config = {extra = {karma = 0, max_karma = Jane.cry and 10 or 2}},
@ -603,16 +597,7 @@ SMODS.Joker {
rarity = 4, rarity = 4,
blueprint_compat = true, blueprint_compat = true,
loc_vars = function(_, info_queue, card) loc_vars = function(_, info_queue, card)
if Jane.cry then info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or G.P_CENTERS.c_ankh
info_queue[#info_queue + 1] = G.P_CENTERS.c_cry_analog
end
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_ankh or nil
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or G.P_CENTERS.c_soul
if Jane.cry then
info_queue[#info_queue + 1] = G.P_CENTERS.c_cry_summoning
end
local extra = card.ability.extra local extra = card.ability.extra
local karma = extra.karma local karma = extra.karma
@ -620,35 +605,25 @@ SMODS.Joker {
local attuned = karma >= max_karma local attuned = karma >= max_karma
return { return {
vars = Jane.cry and { vars = {
attuned and " (Attuned)" or "", attuned and "" or "The Saint",
attuned and "The" or "",
attuned and "Attuned" or "",
attuned and "" or "Attune ", attuned and "" or "Attune ",
attuned and "" or "after using ", attuned and "alongside its " or "after ",
attuned and "^^" .. attunement() or max_karma, attuned and "Edition" or max_karma,
attuned and "" or " Gateways", attuned and "" or (Jane.cry and " Gateways" or " Ankhs"),
attuned and " Mult" or "",
attuned and "" or "[", attuned and "" or "[",
attuned and "" or karma, attuned and "" or karma,
attuned and "" or " / " .. max_karma .. "]", attuned and "(Cannot be debuffed)" or " / " .. max_karma .. "]",
attuned and "(Cannot be debuffed)" or "",
} or {
attuned and " (Attuned)" or "",
attuned and "" or "Attune ",
attuned and "Boosts cards with " or "after using ",
attuned and "editions" or max_karma,
attuned and "" or " Ankh or Soul Cards",
attuned and "" or "[",
attuned and "" or karma,
attuned and "" or " / " .. max_karma .. "]",
attuned and "(Cannot be debuffed)" or "",
}, },
} }
end, end,
update = function(_, card, _) update = function(_, card, _)
card.debuff_immune = card.ability.extra.is_attuned
if card.added_to_deck and card.children.center and card.children.floating_sprite then
local extra = card.ability.extra local extra = card.ability.extra
card.debuff_immune = extra.is_attuned
if card.children.floating_sprite then
card.children.floating_sprite:set_sprite_pos({x = extra.is_attuned and 2 or 1, y = 0}) card.children.floating_sprite:set_sprite_pos({x = extra.is_attuned and 2 or 1, y = 0})
end end
end, end,
@ -698,41 +673,6 @@ SMODS.Joker {
card.ability.perishable = false card.ability.perishable = false
card.ability.perish_tally = 1e9 card.ability.perish_tally = 1e9
end end
if Jane.cry and not context.joker_main then
return
end
if not Jane.cry and not context.other_joker and (not context.individual or context.cardarea ~= G.play) then
return
end
local attune = attunement()
local trigger = ({
e_holo = {mult = 50},
e_foil = {chips = 250},
e_polychrome = {x_mult = 2.5},
e_jane_polygloss = {
mult = 10,
x_mult = 2,
chips = 100,
p_dollars = 10,
},
e_jane_moire = {
colour = G.C.jane_RGB,
sound = "talisman_eeechip",
EEchip_mod = Jane.cry and attune or nil,
[Jane.cry and "EEmult_mod" or "Emult_mod"] = attune,
message = (Jane.cry and "^^" or "^") .. attune .. (Jane.cry and " Chips & Mult" or ""),
},
})[Jane.cry and "e_jane_moire" or ((context.other_card or context.other_joker or {}).edition or {}).key]
if trigger then
trigger.card = card
end
return trigger
elseif extra.karma >= max_karma then elseif extra.karma >= max_karma then
ascend() ascend()
end end
@ -746,7 +686,7 @@ SMODS.Joker {
local key = context.consumeable:gc().key local key = context.consumeable:gc().key
if Jane.cry and key ~= "c_cry_gateway" or not Jane.cry and (key ~= "c_ankh" and key ~= "c_soul") then if Jane.cry and key ~= "c_cry_gateway" or not Jane.cry and key ~= "c_ankh" then
return return
end end
@ -777,25 +717,36 @@ SMODS.Joker {
ascend() ascend()
end, end,
Bakery_can_use = function(_, card) Bakery_can_use = Jane.can_use,
return not card.debuff and Jane.can_use() Bakery_use_joker = function(_, card)
end, for joker_index = 1, math.max(card.rank - 1, 1) do
Bakery_use_joker = function(self, card) local joker = G.jokers.cards[joker_index]
if not self:Bakery_can_use(card) then
return if card.ability.extra.is_attuned and joker.Roland_frozen then
goto edition_only
end end
for k, v in ipairs(G.jokers.cards) do
if card == v then
for i = 1, math.max(k - 1, 1) do
local joker = G.jokers.cards[i]
joker:set_eternal(not joker.ability.eternal) joker:set_eternal(not joker.ability.eternal)
if not card.ability.extra.is_attuned or joker.ability.eternal then
joker:juice_up() joker:juice_up()
goto no_edition
end end
return ::edition_only::
local edition = 1
for ii, vv in ipairs(joker.edition and G.P_CENTER_POOLS.Edition or {}) do
if vv.key == joker.edition.key then
edition = ii
break
end end
end end
local next = edition < #G.P_CENTER_POOLS.Edition and edition + 1 or 1
joker:set_edition(G.P_CENTER_POOLS.Edition[next].key)
::no_edition::
end
end, end,
} }