Compare commits

..

20 commits
1.8.9 ... main

5 changed files with 113 additions and 143 deletions

View file

@ -18,5 +18,5 @@
"conflicts": [ "conflicts": [
"Jen" "Jen"
], ],
"version": "1.8.9" "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
@ -184,14 +203,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

@ -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
@ -383,6 +377,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,
@ -521,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
@ -554,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)
@ -575,44 +576,28 @@ 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 {C:legendary}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#{C:spectral}#6#{}#7#",
"{C:inactive,s:1.25}#7#{C:attention,s:1.25}#8#{C:inactive,s:1.25}#9#{C:inactive}#10#", "{C:inactive,s:1.25}#8#{C:attention,s:1.25}#9#{C:inactive,s:1.25}#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 = {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)
if Jane.cry then info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or nil
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,36 +605,26 @@ 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 "" or "at ",
attuned and "^^" .. attunement() or max_karma, attuned and (Jane.cry and "Gateways " or "Spectrals ") or
attuned and "" or " Gateways", max_karma .. (Jane.cry and " Gateways" or " Spectrals"),
attuned and " Mult" or "", attuned and "add Joker slots" or "",
attuned and "" or "[", attuned and "[Currently " or "[",
attuned and "" or karma, attuned and "+" .. karma 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, _)
card.debuff_immune = card.ability.extra.is_attuned if card.edition and card.edition.Roland_frozen then
card:set_edition("e_base")
if card.added_to_deck and card.children.center and card.children.floating_sprite then elseif card.children.floating_sprite then
local extra = card.ability.extra 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)
@ -691,49 +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
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
@ -744,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" and key ~= "c_soul") then if Jane.cry and gc.key ~= "c_cry_gateway" or not Jane.cry and gc.set ~= "Spectral" then
return return
end end
@ -762,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,
@ -775,33 +710,49 @@ 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 not card.debuff and Jane.can_use() return Jane.can_use() and not card.debuff
end, end,
Bakery_use_joker = function(self, card) Bakery_use_joker = function(_, card)
if not self:Bakery_can_use(card) then for joker_index = 1, math.max(card.rank - 1, 1) do
return local joker = G.jokers.cards[joker_index]
end joker:set_eternal(not joker.ability.eternal)
for k, v in ipairs(G.jokers.cards) do if joker.Roland_frozen_ability then
if card == v then joker.Roland_frozen_ability.eternal = joker.ability.eternal
for i = 1, math.max(k - 1, 1) do
local joker = G.jokers.cards[i]
joker:set_eternal(not joker.ability.eternal)
joker:juice_up()
end
return
end end
if not card.ability.extra.changes_editions or
not card.ability.extra.is_attuned or
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
local next = edition < #G.P_CENTER_POOLS.Edition and edition + 1 or 1
joker:set_edition(G.P_CENTER_POOLS.Edition[next].key)
::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 {