Compare commits

...

18 commits
1.9.1 ... main

5 changed files with 86 additions and 67 deletions

View file

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

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_rivulet", "j_jane_gourmand",
"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

View file

@ -119,12 +119,19 @@ 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
@ -139,6 +146,10 @@ 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
@ -147,7 +158,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 = 5, extra_cost = 2,
in_shop = true, in_shop = true,
shader = false, shader = false,
apply_to_float = false, apply_to_float = false,
@ -160,13 +171,21 @@ 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
jumbo.on_remove(self) if Jane.cry then
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
jumbo.on_apply(self) if Jane.cry then
jumbo.on_apply(self)
else
Jane.resize(self, Jane.config.wee_sizemod)
end
end end
return ret return ret

View file

@ -137,6 +137,7 @@ 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,22 +275,16 @@ SMODS.Joker {
atlas = "janegourmand", atlas = "janegourmand",
loc_txt = { loc_txt = {
name = "The Gourmand", name = "The Gourmand",
text = { text = {"All cards are {C:dark_edition}Jumbo"},
"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 = 8, cost = 20,
rarity = 3, rarity = 4,
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)
@ -344,14 +338,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_gourmand")) and if next(SMODS.find_card("j_jane_rivulet")) 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_gourmand")) do for _, v in pairs(SMODS.find_card("j_jane_rivulet")) do
mod = mod * v.ability.modifier mod = mod * v.ability.modifier
end end
@ -359,7 +353,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_gourmand")) do for _, v in pairs(SMODS.find_card("j_jane_rivulet")) do
mod = mod + v.ability.modifier mod = mod + v.ability.modifier
end end
@ -522,15 +516,21 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "The Rivulet", name = "The Rivulet",
text = { text = {
"All cards are given", "Values on {C:attention}consumables",
"a random {C:dark_edition}Edition", "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)",
}, },
}, },
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(_, _, center)
return {vars = {center.ability.modifier}}
end,
} }
local orig_draw = Card.draw local orig_draw = Card.draw
@ -555,11 +555,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 not (self.added_to_deck or (self.area and self.area == G.hand)) and
self.edition and not 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_rivulet")) then next(SMODS.find_card("j_jane_gourmand")) then
self:set_edition(poll_edition("rivulet_edition", nil, true, true)) self:set_edition("e_jane_jumbo", true, true)
end end
orig_draw(self, layer) orig_draw(self, layer)
@ -584,20 +584,20 @@ SMODS.Joker {
text = { text = {
"{C:attention}Use {}to toggle itself or", "{C:attention}Use {}to toggle itself or",
"other Jokers to its", "other Jokers to its",
"left's {X:legendary,C:white}Eternal{} sticker", "left's {C:legendary}Eternal{} sticker",
"{C:attention}#4#{}#5#{X:black,C:jane_RGB}#6#{C:spectral}#7#", "{C:attention}#4#{}#5#{C:spectral}#6#{}#7#",
"{C:inactive}#8#{C:attention}#9#{C:inactive}#10#", "{C:inactive,s:1.25}#8#{C:attention,s:1.25}#9#{C:inactive,s:1.25}#10#",
Jane.cry and "{C:inactive}(Gateway has no downside)" or nil, Jane.cry and "{C:inactive}(Gateway has no downside)" or nil,
}, },
}, },
config = {extra = {karma = 0, max_karma = Jane.cry and 20 or 5}}, config = {extra = {changes_editions = false, jokers = Jane.cry and 10 or 1, karma = 0, max_karma = Jane.cry and 10 or 3}},
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 G.P_CENTERS.c_ankh info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or nil
local extra = card.ability.extra local extra = card.ability.extra
local karma = extra.karma local karma = extra.karma
@ -610,28 +610,27 @@ SMODS.Joker {
attuned and "The" or "", attuned and "The" or "",
attuned and "Attuned" or "", attuned and "Attuned" or "",
attuned and "" or "Attune ", attuned and "" or "Attune ",
attuned and "alongside its " or "after ", attuned and "" or "at ",
attuned and "Edition" or max_karma, attuned and (Jane.cry and "Gateways " or "Spectrals ") or
attuned and "" or (Jane.cry and " Gateways" or " Ankhs"), max_karma .. (Jane.cry and " Gateways" or " Spectrals"),
attuned and "" or "[", attuned and "add Joker slots" or "",
attuned and "" or karma, attuned and "[Currently " or "[",
attuned and "(Cannot be debuffed)" or " / " .. max_karma .. "]", attuned and "+" .. karma or karma,
attuned and "]" or " / " .. max_karma .. "]",
}, },
} }
end, end,
update = function(_, card, _) update = function(_, card, _)
local extra = card.ability.extra if card.edition and card.edition.Roland_frozen then
card.debuff_immune = extra.is_attuned card:set_edition("e_base")
elseif card.children.floating_sprite then
if card.children.floating_sprite then card.children.floating_sprite:set_sprite_pos({x = card.ability.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,
calculate = function(_, card, context) calculate = function(_, card, context)
local extra = card.ability.extra local extra = card.ability.extra
local max_karma = extra.max_karma local max_karma = extra.max_karma
extra.is_attuned = extra.is_attuned and extra.karma >= max_karma extra.is_attuned = extra.is_attuned and extra.karma >= max_karma
G.GAME.spectral_rate = math.max(G.GAME.spectral_rate, extra.is_attuned and 20 or 2)
local function ascend() local function ascend()
if extra.is_attuning then if extra.is_attuning then
@ -667,14 +666,9 @@ SMODS.Joker {
end, 1) end, 1)
end end
if extra.is_attuned then if extra.karma >= max_karma then
card.debuff = false local karma = (extra.is_attuning or extra.is_attuned) and 0 or extra.karma
G.jokers:change_size(karma * extra.jokers)
if card.ability then
card.ability.perishable = false
card.ability.perish_tally = 1e9
end
elseif extra.karma >= max_karma then
ascend() ascend()
end end
@ -685,9 +679,9 @@ SMODS.Joker {
return return
end end
local key = context.consumeable:gc().key local gc = context.consumeable:gc()
if Jane.cry and key ~= "c_cry_gateway" or not Jane.cry and key ~= "c_ankh" then if Jane.cry and gc.key ~= "c_cry_gateway" or not Jane.cry and gc.set ~= "Spectral" then
return return
end end
@ -703,7 +697,7 @@ SMODS.Joker {
{message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN} {message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN}
) )
card_eval_status_text( local _ = extra.karma <= max_karma and card_eval_status_text(
card, card,
"extra", "extra",
nil, nil,
@ -716,25 +710,28 @@ 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 = Jane.can_use, Bakery_can_use = function(_, card)
return Jane.can_use() and not card.debuff
end,
Bakery_use_joker = function(_, card) Bakery_use_joker = function(_, card)
for joker_index = 1, math.max(card.rank - 1, 1) do for joker_index = 1, math.max(card.rank - 1, 1) do
local joker = G.jokers.cards[joker_index] local joker = G.jokers.cards[joker_index]
if card.ability.extra.is_attuned and joker.Roland_frozen then
goto edition_only
end
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 if joker.Roland_frozen_ability then
joker.Roland_frozen_ability.eternal = joker.ability.eternal
end
if not card.ability.extra.changes_editions or
not card.ability.extra.is_attuned or
joker.ability.eternal then
joker:juice_up() joker:juice_up()
goto no_edition goto continue
end end
::edition_only::
local edition = 1 local edition = 1
for ii, vv in ipairs(joker.edition and G.P_CENTER_POOLS.Edition or {}) do for ii, vv in ipairs(joker.edition and G.P_CENTER_POOLS.Edition or {}) do
@ -746,14 +743,16 @@ SMODS.Joker {
local next = edition < #G.P_CENTER_POOLS.Edition and edition + 1 or 1 local next = edition < #G.P_CENTER_POOLS.Edition and edition + 1 or 1
joker:set_edition(G.P_CENTER_POOLS.Edition[next].key) joker:set_edition(G.P_CENTER_POOLS.Edition[next].key)
::no_edition:: ::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 {