Compare commits

...

18 commits
1.5.4 ... main

11 changed files with 205 additions and 138 deletions

View file

@ -20,11 +20,11 @@ continuation_indent = 4
# this mean utf8 length , if this is 'unset' then the line width is no longer checked # this mean utf8 length , if this is 'unset' then the line width is no longer checked
# this option decides when to chopdown the code # this option decides when to chopdown the code
max_line_length = lf max_line_length = 120
# optional crlf/lf/cr/auto, if it is 'auto', in windows it is crlf other platforms are lf # optional crlf/lf/cr/auto, if it is 'auto', in windows it is crlf other platforms are lf
# in neovim the value 'auto' is not a valid option, please use 'unset' # in neovim the value 'auto' is not a valid option, please use 'unset'
end_of_line = auto end_of_line = lf
# none/ comma / semicolon / only_kv_colon # none/ comma / semicolon / only_kv_colon
table_separator_style = none table_separator_style = none

View file

@ -48,6 +48,7 @@ payload = '''if Jane and (type(G.ARGS.score_intensity.required_score) == "table"
local base = Cryptid and 10 or G.ARGS.score_intensity.required_score local base = Cryptid and 10 or G.ARGS.score_intensity.required_score
local expo = Cryptid and G.ARGS.score_intensity.required_score or 10 local expo = Cryptid and G.ARGS.score_intensity.required_score or 10
Jane.sinister = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number() > 1 Jane.sinister = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number() > 1
G.escapey_sinister = Jane.sinister
end''' end'''
match_indent = true match_indent = true
@ -57,10 +58,15 @@ target = "functions/state_events.lua"
pattern = "for _, v in ipairs(SMODS.get_card_areas('playing_cards')) do" pattern = "for _, v in ipairs(SMODS.get_card_areas('playing_cards')) do"
position = "after" position = "after"
payload = '''if v == G.hand and not (G.GAME.blind and G.GAME.blind.name == "The Card" and not G.GAME.blind.disabled) and next(SMODS.find_card("j_jane_survivor")) then payload = '''if v == G.hand and not (G.GAME.blind and G.GAME.blind.name == "The Card" and not G.GAME.blind.disabled) and next(SMODS.find_card("j_jane_survivor")) then
for _, v in ipairs(G.hand.cards) do if Cryptid then
local area = {cards = {v}} for _, v in ipairs(G.hand.cards) do
SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, area.cards) local area = {cards = {v}}
SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, nil) SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, area.cards)
SMODS.calculate_main_scoring({cardarea = area, full_hand = area.cards, scoring_hand = area.cards, scoring_name = text, poker_hands = poker_hands}, nil)
end
else
SMODS.calculate_main_scoring({cardarea = G.hand, full_hand = G.hand.cards, scoring_hand = G.hand.cards, scoring_name = text, poker_hands = poker_hands}, G.hand.cards)
SMODS.calculate_main_scoring({cardarea = G.hand, full_hand = G.hand.cards, scoring_hand = G.hand.cards, scoring_name = text, poker_hands = poker_hands}, nil)
end end
else''' else'''
match_indent = true match_indent = true
@ -123,6 +129,14 @@ position = "at"
payload = "Jane.get_chipmult_sum(hand_chips, mult))" payload = "Jane.get_chipmult_sum(hand_chips, mult))"
match_indent = true match_indent = true
[[patches]]
[patches.pattern]
target = '=[SMODS Cryptid "items/spectral.lua"]'
pattern = "local _first_dissolve = nil"
position = "after"
payload = 'deletable_jokers = next(SMODS.find_card("j_jane_saint")) and {} or deletable_jokers'
match_indent = true
[[patches]] [[patches]]
[patches.pattern] [patches.pattern]
target = '=[SMODS Cryptid "items/exotic.lua"]' target = '=[SMODS Cryptid "items/exotic.lua"]'

View file

@ -17,5 +17,5 @@
"conflicts": [ "conflicts": [
"Jen" "Jen"
], ],
"version": "1.5.4" "version": "1.5.19"
} }

1
refs/CardSleeves Symbolic link
View file

@ -0,0 +1 @@
../../CardSleeves/

View file

@ -95,8 +95,6 @@ local function back(x)
} }
end end
local eternal_text = Cryptid and "Absolute" or "Eternal"
back { back {
key = "nitro", key = "nitro",
atlas = "janedecks", atlas = "janedecks",
@ -151,7 +149,7 @@ back {
end, end,
} }
local rain_world_jokers = { Jane.rain_world_jokers = {
"j_jane_monk", "j_jane_monk",
"j_jane_survivor", "j_jane_survivor",
"j_jane_hunter", "j_jane_hunter",
@ -163,12 +161,6 @@ local rain_world_jokers = {
"j_jane_rot", "j_jane_rot",
} }
local is_rain_world_joker = {}
for _, v in pairs(rain_world_jokers) do
is_rain_world_joker[v] = true
end
local function add_rain_world_joker() local function add_rain_world_joker()
if not G.jokers then if not G.jokers then
return return
@ -176,13 +168,14 @@ local function add_rain_world_joker()
local unobtained = {} local unobtained = {}
for _, v in pairs(rain_world_jokers) do for _, v in pairs(Jane.rain_world_jokers) do
if not next(SMODS.find_card(v, true)) then if not next(SMODS.find_card(v, true)) then
unobtained[#unobtained + 1] = v unobtained[#unobtained + 1] = v
end end
end end
local chosen = pseudorandom_element(next(unobtained) and unobtained or rain_world_jokers, pseudoseed("karma_deck")) local chosen = pseudorandom_element(next(unobtained) and unobtained or Jane.rain_world_jokers,
pseudoseed("karma_deck"))
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, chosen, "karma_deck_next") local card = create_card("Joker", G.jokers, nil, nil, nil, nil, chosen, "karma_deck_next")
card:add_to_deck() card:add_to_deck()
card:start_materialize() card:start_materialize()
@ -196,65 +189,24 @@ back {
loc_txt = { loc_txt = {
name = "Karma Deck", name = "Karma Deck",
text = { text = {
"Start with a {C:legendary}Rain World Joker", "Start with a",
"Create another when", "{C:legendary}Rain World Joker",
"{C:attention}Boss Blind {}is defeated",
}, },
}, },
alt_loc_txt = { alt_loc_txt = {
name = "Ascension Sleeve", name = "Ascension Sleeve",
text = { text = {
"Start with all {C:legendary}Rain World Jokers {}instead", "Create a {C:legendary}Rain World Joker",
"Destroy a random {C:legendary}Rain World Joker {}when", "when {C:attention}Boss Blind {}is defeated",
"{C:attention}Boss Blind {}is defeated, or {C:red}lose",
}, },
}, },
alt_apply = function(_) alt_apply = function(_)
for _, v in ipairs(rain_world_jokers) do Jane.q(add_rain_world_joker)
Jane.q(function()
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, v, "karma_deck_next")
card:add_to_deck()
card:start_materialize()
G.jokers:emplace(card)
play_sound("timpani")
end, 0.2)
end
end, end,
apply = function(_) apply = function(_)
Jane.q(add_rain_world_joker) Jane.q(add_rain_world_joker)
end, end,
alt_calculate = function(_, _, context) alt_calculate = function(_, _, context)
local function l()
if G.STAGE == G.STAGES.RUN then
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
end
end
if not Jane.is_end_of_ante(context) then
return
end
local destructible_jokers = {}
for _, v in pairs(G.jokers.cards) do
if is_rain_world_joker[v.config.center.key] and not ((v.ability or {}).eternal or (v.ability or {}).cry_absolute) then
destructible_jokers[#destructible_jokers + 1] = v
end
end
if not next(destructible_jokers) then
return l()
end
local chosen = pseudorandom_element(destructible_jokers, pseudoseed("karma_deck"))
if chosen then
chosen.getting_sliced = true
chosen:start_dissolve()
end
end,
calculate = function(_, _, context)
if Jane.is_end_of_ante(context) then if Jane.is_end_of_ante(context) then
add_rain_world_joker() add_rain_world_joker()
end end
@ -351,6 +303,7 @@ back {
local orig_get_current_pool = get_current_pool local orig_get_current_pool = get_current_pool
---@diagnostic disable-next-line: lowercase-global
function get_current_pool(_type, ...) function get_current_pool(_type, ...)
local pool, pool_key = orig_get_current_pool(_type, ...) local pool, pool_key = orig_get_current_pool(_type, ...)
@ -608,17 +561,23 @@ local function two(x)
end end
end end
local eternal_text = Cryptid and "Absolute" or "Eternal"
back { back {
key = "weeck", key = "weeck",
atlas = "janedecks", atlas = "janedecks",
pos = {x = 4, y = 1}, pos = {x = 4, y = 1},
loc_txt = { loc_txt = {
name = "Weeck", name = "Weeck",
text = { text = Cryptid and {
"Start with an {C:purple,E:1}" .. eternal_text, "Start with an {C:purple,E:1}" .. eternal_text,
"{C:attention}Wee Joker {}and a deck", "{C:attention}Wee Joker {}and a deck",
"containing {C:attention}2 {C:purple,E:1}" .. eternal_text, "containing {C:attention}2 {C:purple,E:1}" .. eternal_text,
"{C:attention}2's {}of {C:attention}each suit", "{C:attention}2's {}of {C:attention}each suit",
} or {
"Start with an {C:purple,E:1}" .. eternal_text,
"{C:attention}Wee Joker {}and a deck",
"of {C:attention}2 2's {}of {C:attention}each suit",
}, },
}, },
alt_loc_txt = { alt_loc_txt = {

78
src/challenge.lua Normal file
View file

@ -0,0 +1,78 @@
local is_rain_world_joker = {}
for _, v in pairs(Jane.rain_world_jokers) do
is_rain_world_joker[v] = true
end
SMODS.Challenge {
key = "downpour",
loc_txt = {
name = "Downpour",
},
rules = {custom = {
{id = "jane_downpour1"},
{id = "jane_downpour2"},
{id = "jane_downpour3"},
{id = "jane_downpour4"},
}},
apply = function(_)
G.GAME.win_ante = 16
for _, v in ipairs(Jane.rain_world_jokers) do
Jane.q(function()
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, v, "karma_deck_next")
card:add_to_deck()
card:start_materialize()
G.jokers:emplace(card)
play_sound("timpani")
end, 0.2)
end
end,
calculate = function(_, context)
local function l()
if G.STAGE == G.STAGES.RUN then
G.STATE = G.STATES.GAME_OVER
G.STATE_COMPLETE = false
end
end
if not Jane.is_end_of_ante(context) then
return
end
local destructible_jokers = {}
for _, v in pairs(G.jokers.cards) do
if is_rain_world_joker[v.config.center.key] and not ((v.ability or {}).eternal or (v.ability or {}).cry_absolute) then
destructible_jokers[#destructible_jokers + 1] = v
end
end
if not next(destructible_jokers) then
return l()
end
local chosen = pseudorandom_element(destructible_jokers, pseudoseed("karma_deck"))
if chosen then
chosen.getting_sliced = true
chosen:start_dissolve()
end
end,
}
G.localization.misc.v_text["ch_c_jane_downpour1"] = {
"Start with all {C:legendary}Rain World Jokers",
}
G.localization.misc.v_text["ch_c_jane_downpour2"] = {
"Destroy a random {C:legendary}Rain World Joker {}when",
}
G.localization.misc.v_text["ch_c_jane_downpour3"] = {
"{C:attention}Boss Blind {}is defeated, or {C:red}lose",
}
G.localization.misc.v_text["ch_c_jane_downpour4"] = {
"Win on {C:attention}Ante 16",
}

View file

@ -10,7 +10,7 @@ local function allow_moire()
end end
for _, v in pairs(SMODS.find_card("j_jane_saint")) do for _, v in pairs(SMODS.find_card("j_jane_saint")) do
if v.is_attuned then if v.ability.extra.is_attuned then
return true return true
end end
end end
@ -28,23 +28,21 @@ SMODS.Edition({
name = "Polygloss", name = "Polygloss",
label = "Polygloss", label = "Polygloss",
text = Cryptid and { text = Cryptid and {
"{C:chips}+#1#{}, {X:chips,C:white}x#2#{} & {X:chips,C:dark_edition}^#3#{} Chips", "{C:chips}+#1#{} Chips",
"{C:mult}+#4#{}, {X:mult,C:white}x#5#{} & {X:mult,C:dark_edition}^#6#{} Mult", "{C:mult}+#2#{}, {X:mult,C:white}X#3#{}, & {X:mult,C:dark_edition}^#4#{} Mult",
"{C:money}$#7# {}when scored",
} or {
"{C:chips}+#1#{} & {X:chips,C:white}x#2#{}",
"{C:mult}+#3#{} & {X:mult,C:white}x#4#{}",
"{C:money}$#5# {}when scored", "{C:money}$#5# {}when scored",
} or {
"{C:chips}+#1#{} Chips",
"{C:mult}+#2#{} & {X:mult,C:white}X#3#{} Mult",
"{C:money}$#4# {}when scored",
}, },
}, },
config = { config = {
mult = 1, mult = 2,
chips = 1, chips = 12,
x_mult = 1.1, x_mult = 1.2,
x_chips = 1.1,
p_dollars = 1, p_dollars = 1,
e_chips = Cryptid and 1.01 or nil, e_mult = Cryptid and 1.02 or nil,
e_mult = Cryptid and 1.01 or nil,
}, },
sound = {sound = "jane_e_polygloss", per = 1.2, vol = 0.4}, sound = {sound = "jane_e_polygloss", per = 1.2, vol = 0.4},
weight = 8, weight = 8,
@ -53,8 +51,7 @@ SMODS.Edition({
shader = "polygloss", shader = "polygloss",
apply_to_float = false, apply_to_float = false,
loc_vars = function(self, _, _) loc_vars = function(self, _, _)
local vars = {self.config.chips, self.config.x_chips} local vars = {self.config.chips}
vars[#vars + 1] = self.config.e_chips
vars[#vars + 1] = self.config.mult vars[#vars + 1] = self.config.mult
vars[#vars + 1] = self.config.x_mult vars[#vars + 1] = self.config.x_mult
vars[#vars + 1] = self.config.e_mult vars[#vars + 1] = self.config.e_mult
@ -71,8 +68,6 @@ SMODS.Edition({
return { return {
e_mult = card.edition.e_mult, e_mult = card.edition.e_mult,
x_mult = card.edition.x_mult, x_mult = card.edition.x_mult,
e_chips = card.edition.e_chips,
x_chips = card.edition.x_chips,
p_dollars = card.edition.p_dollars, p_dollars = card.edition.p_dollars,
} }
elseif context.main_scoring and context.cardarea == G.play then elseif context.main_scoring and context.cardarea == G.play then
@ -81,8 +76,6 @@ SMODS.Edition({
chips = card.edition.chips, chips = card.edition.chips,
e_mult = card.edition.e_mult, e_mult = card.edition.e_mult,
x_mult = card.edition.x_mult, x_mult = card.edition.x_mult,
e_chips = card.edition.e_chips,
x_chips = card.edition.x_chips,
p_dollars = card.edition.p_dollars, p_dollars = card.edition.p_dollars,
} }
end end
@ -151,7 +144,7 @@ SMODS.Edition({
end end
end, end,
sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5}, sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5},
weight = 3, weight = 4,
extra_cost = 5, extra_cost = 5,
in_shop = true, in_shop = true,
shader = false, shader = false,
@ -164,11 +157,14 @@ SMODS.Edition({
loc_txt = { loc_txt = {
name = "Moire", name = "Moire",
label = "Moire", label = "Moire",
text = {"{X:chips,C:dark_edition}^#1#{C:chips} Chips{}, {X:mult,C:dark_edition}^#2#{C:mult} Mult"}, text = {
"{X:chips,C:dark_edition}^#1#{C:chips} Chips",
"{X:mult,C:dark_edition}^#2#{C:mult} Mult",
},
}, },
config = {e_chips = Cryptid and 0.8 or 0.9, e_mult = Cryptid and 1.2 or 1.1}, config = {e_chips = Cryptid and 0.8 or 0.9, e_mult = Cryptid 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 = 6, extra_cost = 6,
in_shop = true, in_shop = true,
shader = "moire", shader = "moire",

View file

@ -362,7 +362,7 @@ function Jane.oxy(card, removed)
end end
end end
local steel = 1.5 local steel = 2
SMODS.Joker { SMODS.Joker {
key = "oxy", key = "oxy",
@ -370,15 +370,15 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "Oxy{C:dark_edition}#1#", name = "Oxy{C:dark_edition}#1#",
text = { text = {
"{C:attention}Scored steel {}cards give", "{C:attention}Scored steel {}cards",
"{X:mult,C:white}x#2#{} {C:mult}Mult {}and {X:chips,C:white}x#2#{} {C:chips}Chips", "give {X:mult,C:white}X#2#{} {C:mult}Mult",
"{C:dark_edition,E:1}#3#{}#4#{C:red}#5#{C:attention}#6#", "{C:dark_edition,E:1}#3#{}#4#{C:red}#5#{C:attention}#6#",
"{C:dark_edition,E:1}#7#{}#8#", "{C:dark_edition,E:1}#7#{}#8#",
"#9#{C:dark_edition,E:1}#10#", "#9#{C:dark_edition,E:1}#10#",
"{C:inactive,s:0.75,E:1}#11#{C:red,s:1.5,E:1}#12#", "{C:inactive,s:0.75,E:1}#11#{C:red,s:1.5,E:1}#12#",
}, },
}, },
config = {extra = {corrupted_steel = 2.5, is_corrupted = false, milestone = 3, progress = 0}}, config = {extra = {corrupted_steel = 6, is_corrupted = false, milestone = 3, progress = 0}},
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
sinis = {x = 2, y = 0}, sinis = {x = 2, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
@ -472,7 +472,7 @@ SMODS.Joker {
context.cardarea == G.play and context.cardarea == G.play and
context.other_card.ability.name == "Steel Card" then context.other_card.ability.name == "Steel Card" then
local amount = extra.is_corrupted and extra.corrupted_steel or steel local amount = extra.is_corrupted and extra.corrupted_steel or steel
return {x_chips = amount, x_mult = amount, colour = G.C.PURPLE, card = card}, true return {x_mult = amount, colour = G.C.PURPLE, card = card}, true
end end
end, end,
} }
@ -482,6 +482,7 @@ if Cryptid then
end end
local operator = Cryptid and "^" or "X" local operator = Cryptid and "^" or "X"
local operator_prefix = Cryptid and "{X:dark_edition,C:mult}" or "{X:mult,C:white}"
SMODS.Joker { SMODS.Joker {
key = "betmma", key = "betmma",
@ -489,12 +490,12 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "Betmma", name = "Betmma",
text = { text = {
"{X:dark_edition,C:chips}+" .. operator .. "#1#{C:chips} Chips{} for every", operator_prefix .. "+" .. operator .. "#1#{C:mult} Mult{} for every",
"{C:attention}unique Voucher redeemed", "{C:attention}unique Voucher redeemed",
"{C:inactive}(Currently {X:dark_edition,C:chips}" .. operator .. "#2#{C:inactive})", "{C:inactive}(Currently " .. operator_prefix .. operator .. "#2#{C:inactive})",
}, },
}, },
config = {extra = {tet = Cryptid and 0.1 or 0.25}}, config = {extra = {tet = Cryptid and 0.25 or 0.5}},
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
blueprint_compat = true, blueprint_compat = true,
@ -517,7 +518,7 @@ SMODS.Joker {
card = card, card = card,
colour = G.C.jane_RGB, colour = G.C.jane_RGB,
message = operator .. number_format(num), message = operator .. number_format(num),
[Cryptid and "e_chips" or "x_chips"] = num, [Cryptid and "e_mult" or "x_mult"] = num,
}, true }, true
end end
end, end,
@ -557,7 +558,7 @@ SMODS.Joker {
if context.other_card and context.other_card:get_id() == 7 and scj(context) then if context.other_card and context.other_card:get_id() == 7 and scj(context) then
grand_dad(card) grand_dad(card)
local palette = granddad_palette[math.random(#granddad_palette)] local palette = granddad_palette[math.random(#granddad_palette)]
local rnd = pseudorandom(pseudoseed("granddad"), 1, Cryptid and 7 or 5) local rnd = pseudorandom(pseudoseed("granddad"), 1, Cryptid and 5 or 4)
if rnd == 1 then if rnd == 1 then
return { return {
@ -582,25 +583,11 @@ SMODS.Joker {
}, true }, true
elseif rnd == 4 then elseif rnd == 4 then
return { return {
message = Cryptid and "x7" or "x1.77", message = Cryptid and "X7 Mult" or "X1.77 Mult",
x_chips = Cryptid and 7 or 1.77,
colour = palette,
card = card,
}, true
elseif rnd == 5 then
return {
message = Cryptid and "x7 Mult" or "x1.77 Mult",
x_mult = Cryptid and 7 or 1.77, x_mult = Cryptid and 7 or 1.77,
colour = palette, colour = palette,
card = card, card = card,
}, true }, true
elseif rnd == 6 then
return {
message = "^1.77",
e_chips = 1.77,
colour = palette,
card = card,
}, true
else else
return { return {
message = "^1.77 Mult", message = "^1.77 Mult",
@ -620,10 +607,10 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "Peppino Spaghetti", name = "Peppino Spaghetti",
text = { text = {
"{X:dark_edition,C:red}" .. operator .. "2^x{C:red} Mult{} for every", operator_prefix .. operator .. "2^x{C:red} Mult{} for every",
"{C:attention}food or Peppino Joker", "{C:attention}food or Peppino Joker",
"in your possession", "in your possession",
"{C:inactive}(Currently {X:dark_edition,C:red}" .. operator .. "#1#{C:red} Mult{C:inactive})", "{C:inactive}(Currently " .. operator_prefix .. operator .. "#1#{C:red} Mult{C:inactive})",
}, },
}, },
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},

View file

@ -313,6 +313,7 @@ for _, v in ipairs({
"back", "back",
"blind", "blind",
"booster", "booster",
"challenge",
"edition", "edition",
"joker", "joker",
"slugcat", "slugcat",

View file

@ -125,9 +125,9 @@ SMODS.Joker {
name = "The Survivor", name = "The Survivor",
text = { text = {
"All cards held in hand", "All cards held in hand",
"{C:attention}contribute to scoring {}and", "{C:attention}contribute to scoring" .. (Cryptid and " {}and" or ""),
"are all considered as", Cryptid and "are all considered as" or nil,
"the {C:attention}first played card", Cryptid and "the {C:attention}first played card" or nil,
}, },
}, },
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
@ -156,7 +156,7 @@ SMODS.Joker {
eternal_compat = false, eternal_compat = false,
perishable_compat = false, perishable_compat = false,
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
cost = Cryptid and 20 or 8, cost = Cryptid and 15 or 8,
rarity = Cryptid and epic or 3, rarity = Cryptid and epic or 3,
loc_vars = function(_, info_queue, card) loc_vars = function(_, info_queue, card)
local function rounds(amount) local function rounds(amount)
@ -469,7 +469,7 @@ function Card:set_debuff(should_debuff)
end end
local function attunement() local function attunement()
return (G.GAME or {}).weeckweeck and 2 or (Cryptid and 1.001 or 1.2) return (G.GAME or {}).weeckweeck and 2 or (Cryptid and 1.002 or 1.2)
end end
SMODS.Joker { SMODS.Joker {
@ -478,9 +478,10 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "The Saint{C:jane_RGB}#1#", name = "The Saint{C:jane_RGB}#1#",
text = Cryptid and { text = Cryptid and {
"{C:spectral}Ankh and Gateway {}will {C:attention}not destroy Jokers", "{C:spectral}Analog{}, {C:spectral}Ankh{}, {C:spectral}Gateway{}, and",
"{C:jane_RGB}#2#{}#3#{X:black,C:jane_RGB,s:1.5}#4#{C:spectral}#5#{C:chips}#6#{}#7#{C:mult}#8#", "{C:spectral,s:0.95}Summoning {s:0.95}will {C:attention,s:0.95}not destroy Jokers",
"{C:inactive,s:1.25}#9#{C:attention,s:1.25}#10#{C:inactive,s:1.25}#11#{C:inactive}#12#", "{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}#7#{C:attention,s:1.25}#8#{C:inactive,s:1.25}#9#{C:inactive}#10#",
} or { } or {
"{C:spectral}Ankh {}will {C:attention}not destroy Jokers", "{C:spectral}Ankh {}will {C:attention}not destroy Jokers",
"{C:jane_RGB}#2#{}#3#{C:dark_edition}#4#{C:spectral}#5#", "{C:jane_RGB}#2#{}#3#{C:dark_edition}#4#{C:spectral}#5#",
@ -494,8 +495,17 @@ 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 Cryptid then
info_queue[#info_queue + 1] = G.P_CENTERS.c_cry_analog
end
info_queue[#info_queue + 1] = G.P_CENTERS.c_ankh info_queue[#info_queue + 1] = G.P_CENTERS.c_ankh
info_queue[#info_queue + 1] = Cryptid and G.P_CENTERS.c_cry_gateway or G.P_CENTERS.c_soul info_queue[#info_queue + 1] = Cryptid and G.P_CENTERS.c_cry_gateway or G.P_CENTERS.c_soul
if Cryptid 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
local max_karma = extra.max_karma local max_karma = extra.max_karma
@ -508,9 +518,7 @@ SMODS.Joker {
attuned and "" or "after using ", attuned and "" or "after using ",
attuned and "^^" .. attunement() or max_karma, attuned and "^^" .. attunement() or max_karma,
attuned and "" or " Gateways", attuned and "" or " Gateways",
attuned and " Chips " or "", attuned and " Mult" or "",
attuned and "& " or "",
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 "" or " / " .. max_karma .. "]",
@ -518,7 +526,7 @@ SMODS.Joker {
} or { } or {
attuned and " (Attuned)" or "", attuned and " (Attuned)" or "",
attuned and "" or "Attune ", attuned and "" or "Attune ",
attuned and "Fires on cards with " or "after using ", attuned and "Boosts cards with " or "after using ",
attuned and "editions" or max_karma, attuned and "editions" or max_karma,
attuned and "" or " Ankh or Soul Cards", attuned and "" or " Ankh or Soul Cards",
attuned and "" or "[", attuned and "" or "[",
@ -529,6 +537,8 @@ SMODS.Joker {
} }
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 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.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})
@ -581,21 +591,24 @@ SMODS.Joker {
card.ability.perish_tally = 1e9 card.ability.perish_tally = 1e9
end end
if ({[false] = context.repetition, [true] = not context.joker_main})[not not Cryptid] then if Cryptid and not context.joker_main then
return
end
if not Cryptid and not context.other_joker and (not context.individual or context.cardarea ~= G.play) then
return return
end end
local attune = attunement() local attune = attunement()
local trigger = ({ local trigger = ({
e_holo = {mult_mod = 50}, e_holo = {mult = 50},
e_foil = {chip_mod = 250}, e_foil = {chips = 250},
e_polychrome = {xmult_mod = 2.5}, e_polychrome = {x_mult = 2.5},
e_jane_polygloss = { e_jane_polygloss = {
mult = 10, mult = 10,
chips = 10,
x_mult = 2, x_mult = 2,
x_chips = 2, chips = 100,
p_dollars = 10, p_dollars = 10,
}, },
e_jane_moire = { e_jane_moire = {
@ -605,7 +618,7 @@ SMODS.Joker {
[Cryptid and "EEmult_mod" or "Emult_mod"] = attune, [Cryptid and "EEmult_mod" or "Emult_mod"] = attune,
message = (Cryptid and "^^" or "^") .. attune .. " Chips & Mult", message = (Cryptid and "^^" or "^") .. attune .. " Chips & Mult",
}, },
})[Cryptid and "e_jane_moire" or ((context.other_card or {}).edition or {}).key] })[Cryptid and "e_jane_moire" or ((context.other_card or context.other_joker or {}).edition or {}).key]
if trigger then if trigger then
trigger.card = card trigger.card = card
@ -693,6 +706,10 @@ SMODS.Joker {
end end
local function spawn() local function spawn()
if card.cloned then
return
end
local rot = copy_card(card) local rot = copy_card(card)
rot.cloned = true rot.cloned = true
rot:add_to_deck() rot:add_to_deck()
@ -703,9 +720,7 @@ SMODS.Joker {
if has_room() and not card.cloned and Jane.is_end_of_ante(context, card) then if has_room() and not card.cloned and Jane.is_end_of_ante(context, card) then
Jane.q(spawn, 0.5) Jane.q(spawn, 0.5)
else else
Jane.q(function() card.cloned = false
card.cloned = false
end, 5)
end end
end, end,
} }

View file

@ -2,6 +2,13 @@ local function j()
return G.GAME.used_vouchers.v_jane_jolly_voucher and "j_jolly" or "j_joker" return G.GAME.used_vouchers.v_jane_jolly_voucher and "j_jolly" or "j_joker"
end end
local required = 2
local function get_uses()
G.GAME.joker_in_a_tarot = G.GAME.joker_in_a_tarot or 0
return G.GAME.joker_in_a_tarot
end
local blurbs = { local blurbs = {
"M!", "M!",
"Hey! Pick me!", "Hey! Pick me!",
@ -38,7 +45,8 @@ SMODS.Consumable {
name = "#1#-in-a-Tarot", name = "#1#-in-a-Tarot",
text = { text = {
"Create a {C:dark_edition}Negative {C:attention}#2#", "Create a {C:dark_edition}Negative {C:attention}#2#",
"{C:inactive,E:1}#3#{}", "after {C:attention}#3# {}uses {C:inactive}(#4# left)",
"{C:inactive,E:1}#5#{}",
}, },
}, },
loc_vars = function(_, info_queue, card) loc_vars = function(_, info_queue, card)
@ -54,12 +62,20 @@ SMODS.Consumable {
local desc = is_jolly and "Jolly Joker" or "default Joker" local desc = is_jolly and "Jolly Joker" or "default Joker"
local name = is_jolly and "Jolly" or "Joker" local name = is_jolly and "Jolly" or "Joker"
return {vars = {name, desc, card.blurb}} return {vars = {name, desc, required, required - get_uses(), card.blurb}}
end, end,
pos = {x = 0, y = 1}, pos = {x = 0, y = 1},
cost = 4, cost = 4,
can_use = Jane.can_use, can_use = Jane.can_use,
use = function(_, _, _, _) use = function(_, _, _, _)
local uses = get_uses() + 1
if uses < required then
G.GAME.joker_in_a_tarot = uses
return
end
G.GAME.joker_in_a_tarot = 0
local card = create_card("Joker", G.jokers, nil, nil, nil, nil, j(), "jokerfromatarot") local card = create_card("Joker", G.jokers, nil, nil, nil, nil, j(), "jokerfromatarot")
card:set_edition({negative = true}, true) card:set_edition({negative = true}, true)
card.cost = 1 card.cost = 1