Compare commits

..

No commits in common. "main" and "1.8.4" have entirely different histories.
main ... 1.8.4

9 changed files with 149 additions and 156 deletions

View file

@ -18,5 +18,5 @@
"conflicts": [ "conflicts": [
"Jen" "Jen"
], ],
"version": "1.11.0" "version": "1.8.4"
} }

View file

@ -153,7 +153,7 @@ local rain_world_jokers = {
"j_jane_monk", "j_jane_monk",
"j_jane_survivor", "j_jane_survivor",
"j_jane_spearmaster", "j_jane_spearmaster",
"j_jane_gourmand", "j_jane_rivulet",
"j_jane_saint", "j_jane_saint",
} }
@ -694,9 +694,9 @@ back {
G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1 G.GAME.starting_voucher_count = (G.GAME.starting_voucher_count or 0) + 1
Jane.q(function() Jane.q(function()
add_rain_world_joker()
local wee = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck") local wee = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_wee", "weeck")
G.jokers:emplace(wee) G.jokers:emplace(wee)
add_rain_world_joker()
G.GAME.tortoise = true G.GAME.tortoise = true
G.GAME.obsidian = true G.GAME.obsidian = true
G.GAME.mysterious = true G.GAME.mysterious = true
@ -715,7 +715,6 @@ back {
end end
end, end,
calculate = function(_, _, context) calculate = function(_, _, context)
rebalance_orrery()
G.GAME.mysterious = nil G.GAME.mysterious = nil
if Jane.is_end_of_ante(context) then if Jane.is_end_of_ante(context) then

View file

@ -10,36 +10,17 @@ local rain_world_jokers = {
"j_jane_rot", "j_jane_rot",
} }
local is_rain_world_joker, survival = {}, {} local is_rain_world_joker = {}
for _, v in pairs(rain_world_jokers) do for _, v in pairs(rain_world_jokers) do
is_rain_world_joker[v] = true is_rain_world_joker[v] = true
end end
Jane.q(function()
for gk, g in pairs(G.localization.descriptions) do
for ck, c in pairs((type(g) == "table" and not ({Back = true, Sleeve = true})[gk]) and g or {}) do
for _, text in pairs((type(c) == "table" and type(c.text) == "table" and G.P_CENTERS[ck]) and c.text or {}) do
if type(text) == "string" and (text:find("discard") or text:find("Discard")) then
survival[#survival + 1] = {id = ck}
break
end
end
end
end
end, nil, nil, nil, nil, false, true)
SMODS.Challenge {
key = "survival",
loc_txt = {name = "Survival"},
jokers = {{id = "j_jane_survivor"}},
rules = {modifiers = {{id = "discards", value = 0}}},
restrictions = {banned_cards = survival},
}
SMODS.Challenge { SMODS.Challenge {
key = "downpour", key = "downpour",
loc_txt = {name = "Downpour"}, loc_txt = {
name = "Downpour",
},
rules = {custom = {{id = "jane_downpour1"}, {id = "jane_downpour2"}, {id = "jane_downpour3"}}}, rules = {custom = {{id = "jane_downpour1"}, {id = "jane_downpour2"}, {id = "jane_downpour3"}}},
apply = function(_) apply = function(_)
for _, v in ipairs(rain_world_jokers) do for _, v in ipairs(rain_world_jokers) do

View file

@ -119,19 +119,12 @@ local jumbo = SMODS.Edition({
Jane.misprintize(card, {min = jumbo_modifier, max = jumbo_modifier}, nil, true) Jane.misprintize(card, {min = jumbo_modifier, max = jumbo_modifier}, nil, true)
if (card.ability or {}).bonus and (card.base or {}).nominal then
card.ability.bonus = card.ability.bonus + card.base.nominal
end
if card.added_to_deck then if card.added_to_deck then
card:add_to_deck() card:add_to_deck()
end end
Jane.resize(card, Jane.config.wee_sizemod) Jane.resize(card, Jane.config.wee_sizemod)
end, end,
on_load = function(card)
Jane.resize(card, Jane.config.wee_sizemod)
end,
on_remove = function(card) on_remove = function(card)
if not card.Jane_jumbo then if not card.Jane_jumbo then
return return
@ -146,10 +139,6 @@ local jumbo = SMODS.Edition({
Jane.misprintize(card, {min = 1 / jumbo_modifier, max = 1 / jumbo_modifier}, nil, true) Jane.misprintize(card, {min = 1 / jumbo_modifier, max = 1 / jumbo_modifier}, nil, true)
if (card.ability or {}).bonus and (card.base or {}).nominal then
card.ability.bonus = card.ability.bonus - card.base.nominal
end
if was_added then if was_added then
card:add_to_deck() card:add_to_deck()
end end
@ -158,7 +147,7 @@ local jumbo = SMODS.Edition({
end, end,
sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5}, sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5},
weight = 5, weight = 5,
extra_cost = 2, extra_cost = 5,
in_shop = true, in_shop = true,
shader = false, shader = false,
apply_to_float = false, apply_to_float = false,
@ -171,21 +160,13 @@ function Card:set_ability(...)
local is_jumbo = self.edition and self.edition.jane_jumbo local is_jumbo = self.edition and self.edition.jane_jumbo
if is_jumbo then if is_jumbo then
if Jane.cry then jumbo.on_remove(self)
jumbo.on_remove(self)
else
Jane.resize(self)
end
end end
local ret = orig_set_ability(self, ...) local ret = orig_set_ability(self, ...)
if is_jumbo then if is_jumbo then
if Jane.cry then jumbo.on_apply(self)
jumbo.on_apply(self)
else
Jane.resize(self, Jane.config.wee_sizemod)
end
end end
return ret return ret
@ -203,13 +184,14 @@ 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 = 1, weight = 2,
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 20 or 2) return G.GAME.edition_rate * self.weight * (allow_moire() and 1 or 0)
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

@ -256,7 +256,7 @@ local esc = SMODS.Joker {
end end
local tag_money = Jane.cry and G.GAME.dollars or math.min(G.GAME.dollars, extra.max) local tag_money = Jane.cry and G.GAME.dollars or math.min(G.GAME.dollars, extra.max)
local tag_times = Jane.cry and math.pow(extra.xmoney, xtimes) - 1 or xtimes local tag_times = Jane.cry and math.pow(extra.xmoney, xtimes) - 1 or xtimes + 1
ease_dollars(math.ceil(times * extra.money + tag_money * tag_times)) ease_dollars(math.ceil(times * extra.money + tag_money * tag_times))
end, end,
tag_threshold = 30, tag_threshold = 30,

View file

@ -199,14 +199,13 @@ function Jane.resize(card, mod)
end end
end end
function Jane.q(func, delay, timer, trigger, blockable, blocking, no_delete) function Jane.q(func, delay, timer, trigger, blockable, blocking)
G.E_MANAGER:add_event(Event({ G.E_MANAGER:add_event(Event({
delay = delay, delay = delay,
timer = timer, timer = timer,
trigger = (delay and not trigger) and "after" or trigger, trigger = (delay and not trigger) and "after" or trigger,
blocking = blocking, blocking = blocking,
blockable = blockable, blockable = blockable,
no_delete = no_delete,
func = function(...) func = function(...)
local ret = func(...) local ret = func(...)
return ret == nil and true or ret return ret == nil and true or ret
@ -214,20 +213,6 @@ function Jane.q(func, delay, timer, trigger, blockable, blocking, no_delete)
})) }))
end end
if false then
---@type table?
Big = Big
---@type { aliases: { [string]: string } }?
Cryptid = Cryptid
---@type { config_file: { break_infinity: boolean, disable_anims: boolean }? }?
Talisman = Talisman
---@type fun(any): boolean
_G.is_number = _G.is_number
end
local orig_can_highlight = CardArea.can_highlight local orig_can_highlight = CardArea.can_highlight
function CardArea:can_highlight(...) function CardArea:can_highlight(...)

View file

@ -137,7 +137,6 @@ function Jane.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack,
(k == "h_x_chips" and not Jane.cry) and not (k == "h_x_chips" and not Jane.cry) and not
(k == "id") and not (k == "id") and not
(k == "colour") and not (k == "colour") and not
(k == "nominal") and not
(k == "suit_nominal") and not (k == "suit_nominal") and not
(k == "base_nominal") and not (k == "base_nominal") and not
(k == "face_nominal") and not (k == "face_nominal") and not

View file

@ -275,16 +275,22 @@ SMODS.Joker {
atlas = "janegourmand", atlas = "janegourmand",
loc_txt = { loc_txt = {
name = "The Gourmand", name = "The Gourmand",
text = {"All cards are {C:dark_edition}Jumbo"}, text = {
"Values on {C:attention}consumables",
"are {C:attention}" .. (Jane.cry and "multiplied" or "added") .. "{} by {C:attention}#1#" .. (Jane.cry and "" or "{} when"),
(Jane.cry and "when " or "") .. "they are created",
"{C:inactive}(If possible)",
},
}, },
loc_vars = function(_, _, center)
return {vars = {center.ability.modifier}}
end,
config = {modifier = Jane.cry and 2 or 1},
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
blueprint_compat = false, blueprint_compat = false,
cost = 20, cost = 8,
rarity = 4, rarity = 3,
loc_vars = function(_, info_queue)
info_queue[#info_queue + 1] = G.P_CENTERS.e_jane_jumbo
end,
} }
local function add_to_consumable_ability_by(n) local function add_to_consumable_ability_by(n)
@ -338,14 +344,14 @@ local orig_set_ability = Card.set_ability
function Card:set_ability(center, initial, delay_sprites) function Card:set_ability(center, initial, delay_sprites)
orig_set_ability(self, center, initial, delay_sprites) orig_set_ability(self, center, initial, delay_sprites)
if next(SMODS.find_card("j_jane_rivulet")) and if next(SMODS.find_card("j_jane_gourmand")) and
self.gc and self.gc and
self:gc().key ~= "c_base" and self:gc().key ~= "c_base" and
string.sub(self:gc().key, 1, 2) == "c_" then string.sub(self:gc().key, 1, 2) == "c_" then
if Jane.cry or not ((SMODS.Mods.Roland or {}).qol or {})[1] then if Jane.cry or not ((SMODS.Mods.Roland or {}).qol or {})[1] then
local mod = 1 local mod = 1
for _, v in pairs(SMODS.find_card("j_jane_rivulet")) do for _, v in pairs(SMODS.find_card("j_jane_gourmand")) do
mod = mod * v.ability.modifier mod = mod * v.ability.modifier
end end
@ -353,7 +359,7 @@ function Card:set_ability(center, initial, delay_sprites)
else else
local mod = 0 local mod = 0
for _, v in pairs(SMODS.find_card("j_jane_rivulet")) do for _, v in pairs(SMODS.find_card("j_jane_gourmand")) do
mod = mod + v.ability.modifier mod = mod + v.ability.modifier
end end
@ -377,7 +383,6 @@ 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,
@ -516,21 +521,15 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "The Rivulet", name = "The Rivulet",
text = { text = {
"Values on {C:attention}consumables", "All cards are given",
"are {C:attention}" .. (Jane.cry and "multiplied" or "added") .. "{} by {C:attention}#1#" .. (Jane.cry and "" or "{} when"), "a random {C:dark_edition}Edition",
(Jane.cry and "when " or "") .. "they are created",
"{C:inactive}(If possible)",
}, },
}, },
config = {modifier = Jane.cry and 2 or 1},
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
blueprint_compat = false, blueprint_compat = false,
cost = 8, cost = 20,
rarity = 3, rarity = 4,
loc_vars = function(_, _, center)
return {vars = {center.ability.modifier}}
end,
} }
local orig_draw = Card.draw local orig_draw = Card.draw
@ -555,11 +554,11 @@ function Card:draw(layer)
if cen and if cen and
self.facing == "front" and self.facing == "front" and
self.config and self.config and
(self.added_to_deck or (self.area and self.area == G.hand)) and (self.added_to_deck or (self.area and self.area == G.hand)) and not
not self.edition and self.edition and
(self.area == G.consumeables or cen.set ~= "Booster") and (self.area == G.consumeables or cen.set ~= "Booster") and
next(SMODS.find_card("j_jane_gourmand")) then next(SMODS.find_card("j_jane_rivulet")) then
self:set_edition("e_jane_jumbo", true, true) self:set_edition(poll_edition("rivulet_edition", nil, true, true))
end end
orig_draw(self, layer) orig_draw(self, layer)
@ -576,28 +575,44 @@ 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 = {"{}", "#1#{C:jane_RGB,s:0.8}#2#", "{C:jane_RGB,s:1.6}#3#"}, name = "The Saint{C:jane_RGB}#1#",
text = { text = Jane.cry and {
"{C:attention}Use {}to toggle itself or", "{C:attention}Use {}to toggle {X:legendary,C:white}Eternal{} stickers to the left",
"other Jokers to its", "{C:spectral}Analog{}, {C:spectral}Ankh{}, {C:spectral}Gateway{}, and",
"left's {C:legendary}Eternal{} sticker", "{C:spectral,s:0.95}Summoning {s:0.95}will {C:attention,s:0.95}not destroy Jokers",
"{C:attention}#4#{}#5#{C:spectral}#6#{}#7#", "{C:jane_RGB}#2#{}#3#{X:black,C:jane_RGB,s:1.5}#4#{C:spectral}#5#{C:mult}#6#",
"{C:inactive,s:1.25}#8#{C:attention,s:1.25}#9#{C:inactive,s:1.25}#10#", "{C:inactive,s:1.25}#7#{C:attention,s:1.25}#8#{C:inactive,s:1.25}#9#{C:inactive}#10#",
Jane.cry and "{C:inactive}(Gateway has no downside)" or nil, } or {
"{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 = {changes_editions = false, jokers = Jane.cry and 10 or 1, karma = 0, max_karma = Jane.cry and 10 or 3}}, config = {extra = {karma = 0, max_karma = Jane.cry and 10 or 2}},
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
cost = 20, cost = 20,
rarity = 4, rarity = 4,
blueprint_compat = true, blueprint_compat = true,
loc_vars = function(_, info_queue, card) loc_vars = function(_, info_queue, card)
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or nil if Jane.cry then
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
@ -605,26 +620,36 @@ SMODS.Joker {
local attuned = karma >= max_karma local attuned = karma >= max_karma
return { return {
vars = { vars = Jane.cry and {
attuned and "" or "The Saint", attuned and " (Attuned)" or "",
attuned and "The" or "",
attuned and "Attuned" or "",
attuned and "" or "Attune ", attuned and "" or "Attune ",
attuned and "" or "at ", attuned and "" or "after using ",
attuned and (Jane.cry and "Gateways " or "Spectrals ") or attuned and "^^" .. attunement() or max_karma,
max_karma .. (Jane.cry and " Gateways" or " Spectrals"), attuned and "" or " Gateways",
attuned and "add Joker slots" or "", attuned and " Mult" or "",
attuned and "[Currently " or "[", attuned and "" or "[",
attuned and "+" .. karma or karma, attuned and "" or karma,
attuned and "]" or " / " .. max_karma .. "]", attuned and "" 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, _)
if card.edition and card.edition.Roland_frozen then card.debuff_immune = card.ability.extra.is_attuned
card:set_edition("e_base")
elseif card.children.floating_sprite then if card.added_to_deck and card.children.center and card.children.floating_sprite then
card.children.floating_sprite:set_sprite_pos({x = card.ability.extra.is_attuned and 2 or 1, y = 0}) local extra = card.ability.extra
card.children.floating_sprite:set_sprite_pos({x = extra.is_attuned and 2 or 1, y = 0})
end end
end, end,
calculate = function(_, card, context) calculate = function(_, card, context)
@ -666,9 +691,49 @@ SMODS.Joker {
end, 1) end, 1)
end end
if extra.karma >= max_karma then if extra.is_attuned then
local karma = (extra.is_attuning or extra.is_attuned) and 0 or extra.karma card.debuff = false
G.jokers:change_size(karma * extra.jokers)
if card.ability then
card.ability.perishable = false
card.ability.perish_tally = 1e9
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
ascend() ascend()
end end
@ -679,9 +744,9 @@ SMODS.Joker {
return return
end end
local gc = context.consumeable:gc() local key = context.consumeable:gc().key
if Jane.cry and gc.key ~= "c_cry_gateway" or not Jane.cry and gc.set ~= "Spectral" then if Jane.cry and key ~= "c_cry_gateway" or not Jane.cry and (key ~= "c_ankh" and key ~= "c_soul") then
return return
end end
@ -697,7 +762,7 @@ SMODS.Joker {
{message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN} {message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN}
) )
local _ = extra.karma <= max_karma and card_eval_status_text( card_eval_status_text(
card, card,
"extra", "extra",
nil, nil,
@ -710,49 +775,33 @@ SMODS.Joker {
return return
end end
G.jokers:change_size((extra.is_attuned and quota or extra.karma) * extra.jokers)
ascend() ascend()
end, end,
Bakery_can_use = function(_, card) Bakery_can_use = function(_, card)
return Jane.can_use() and not card.debuff return not card.debuff and Jane.can_use()
end, end,
Bakery_use_joker = function(_, card) Bakery_use_joker = function(self, card)
for joker_index = 1, math.max(card.rank - 1, 1) do if not self:Bakery_can_use(card) then
local joker = G.jokers.cards[joker_index] return
joker:set_eternal(not joker.ability.eternal) end
if joker.Roland_frozen_ability then for k, v in ipairs(G.jokers.cards) do
joker.Roland_frozen_ability.eternal = joker.ability.eternal if card == v then
end for i = 1, math.max(k - 1, 1) do
local joker = G.jokers.cards[i]
if not card.ability.extra.changes_editions or joker:set_eternal(not joker.ability.eternal)
not card.ability.extra.is_attuned or joker:juice_up()
joker.ability.eternal then
joker:juice_up()
goto continue
end
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
local next = edition < #G.P_CENTER_POOLS.Edition and edition + 1 or 1 return
joker:set_edition(G.P_CENTER_POOLS.Edition[next].key) end
::continue::
end end
end, end,
} }
if Cryptid and Cryptid.aliases then if Cryptid and Cryptid.aliases then
Cryptid.aliases["saint"] = "j_jane_saint" Cryptid.aliases["saint"] = "j_jane_saint"
Cryptid.aliases["attuned"] = "j_jane_saint"
Cryptid.aliases["the saint"] = "j_jane_saint" Cryptid.aliases["the saint"] = "j_jane_saint"
Cryptid.aliases["the attuned"] = "j_jane_saint"
end end
SMODS.Joker { SMODS.Joker {

View file

@ -115,9 +115,7 @@ for _, v in pairs({
can_divide = true, can_divide = true,
can_use = Jane.can_use, can_use = Jane.can_use,
in_pool = function(_, _) in_pool = function(_, _)
return G.GAME.used_vouchers.v_jane_token_voucher or return G.GAME.used_vouchers.v_jane_token_voucher or G.GAME.modifiers.Roland_alt_swapper_deck
G.GAME.used_vouchers.v_jane_token_voucher_plus or
G.GAME.modifiers.Roland_alt_swapper_deck
end, end,
use = function(_, _, _, _) use = function(_, _, _, _)
play_sound("jane_e_gilded", 1.25, 0.4) play_sound("jane_e_gilded", 1.25, 0.4)