Compare commits

..

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

11 changed files with 331 additions and 295 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,7 +1,7 @@
[manifest] [manifest]
version = "1.0.0" version = "1.0.0"
dump_lua = true dump_lua = true
priority = 115 priority = 114
[[patches]] [[patches]]
[patches.pattern] [patches.pattern]
@ -16,7 +16,9 @@ match_indent = true
target = "globals.lua" target = "globals.lua"
pattern = "EDITION = {1,1,1,1}," pattern = "EDITION = {1,1,1,1},"
position = "before" position = "before"
payload = "jane_RGB = {1,1,1,1}," payload = '''jane_RGB = {0,0,0,1},
jane_RGB_HUE = 0,
almighty = {0,0,1,1},'''
match_indent = true match_indent = true
[[patches]] [[patches]]
@ -45,20 +47,16 @@ payload = '''if Jane and
G.ARGS.score_intensity.required_score:to_number() or G.ARGS.score_intensity.required_score:to_number() or
G.ARGS.score_intensity.required_score) ~= 0 then G.ARGS.score_intensity.required_score) ~= 0 then
local break_infinity = ((Talisman or {}).config_file or {}).break_infinity local break_infinity = ((Talisman or {}).config_file or {}).break_infinity
local small = function (x) return type(x) == "table" and x:to_number() or x end
local big = (break_infinity == "" or break_infinity == nil) and function (x) return x end or to_big local big = (break_infinity == "" or break_infinity == nil) and function (x) return x end or to_big
local base = Cryptid and 2 or G.ARGS.score_intensity.required_score local base = Cryptid and 2 or G.ARGS.score_intensity.required_score
local expo = Cryptid and G.ARGS.score_intensity.required_score or 2 local expo = Cryptid and G.ARGS.score_intensity.required_score or 2
local ratio = G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo)) local ratio = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number()
Jane.sinister = small(ratio) > 1 Jane.sinister = ratio > 1
G.ARGS.score_intensity.ambientSurreal4 = G.ARGS.score_intensity.ambientSurreal4 =
(break_infinity and (break_infinity and
SMODS.Mods.Amulet and SMODS.Mods.Amulet and
G.ARGS.score_intensity.earned_score >= (SMODS.Mods.Amulet G.ARGS.score_intensity.earned_score >= Bakery_API.parse_hyper_e("e10#10##10000")) and 1 or 0
and Big:new { 1.7976931348623157e308, 1, [1.7975e308] = 1 }
or Bakery_API.parse_hyper_e 'e10#10##100000'
)) and 1 or 0
G.ARGS.score_intensity.ambientSurreal3 = G.ARGS.score_intensity.ambientSurreal3 =
(G.ARGS.score_intensity.ambientSurreal4 == 0 and (G.ARGS.score_intensity.ambientSurreal4 == 0 and
@ -67,14 +65,14 @@ payload = '''if Jane and
G.ARGS.score_intensity.ambientSurreal2 = G.ARGS.score_intensity.ambientSurreal2 =
(G.ARGS.score_intensity.ambientSurreal3 == 0 and (G.ARGS.score_intensity.ambientSurreal3 == 0 and
G.ARGS.score_intensity.ambientSurreal4 == 0 and G.ARGS.score_intensity.ambientSurreal4 == 0 and
small(G.ARGS.score_intensity.earned_score / (G.ARGS.score_intensity.earned_score /
(Cryptid and (Cryptid and
big(G.ARGS.score_intensity.required_score) ^ big(G.ARGS.score_intensity.required_score) ^
big(G.ARGS.score_intensity.required_score) ^ big(G.ARGS.score_intensity.required_score) ^
big(G.ARGS.score_intensity.required_score) or big(G.ARGS.score_intensity.required_score) or
big(2) ^ big(G.ARGS.score_intensity.required_score) big(2) ^ big(G.ARGS.score_intensity.required_score)
) )
) > 1 ):to_number() > 1
) and 1 or 0 ) and 1 or 0
G.ARGS.score_intensity.ambientSurreal1 = G.ARGS.score_intensity.ambientSurreal1 =
@ -160,6 +158,7 @@ target = "functions/state_events.lua"
pattern = '''hand_chips\*mult\)''' pattern = '''hand_chips\*mult\)'''
position = "at" position = "at"
payload = "Jane.get_chipmult_sum(hand_chips, mult))" payload = "Jane.get_chipmult_sum(hand_chips, mult))"
match_indent = true
[[patches]] [[patches]]
[patches.pattern] [patches.pattern]

View file

@ -9,7 +9,7 @@
"prefix": "jane", "prefix": "jane",
"main_file": "src/main.lua", "main_file": "src/main.lua",
"badge_colour": "3c3cff", "badge_colour": "3c3cff",
"priority": 115, "priority": 114,
"dependencies": [ "dependencies": [
"Steamodded (>=1.0.0~BETA-1606b)", "Steamodded (>=1.0.0~BETA-1606b)",
"Lovely (>=0.6)", "Lovely (>=0.6)",
@ -18,5 +18,5 @@
"conflicts": [ "conflicts": [
"Jen" "Jen"
], ],
"version": "1.11.28" "version": "1.11.5"
} }

View file

@ -527,11 +527,8 @@ local function apply_weeck()
for _, v in pairs(G.playing_cards) do for _, v in pairs(G.playing_cards) do
if v.base.id == 2 then if v.base.id == 2 then
if Jane.cry then
v.ability.cry_absolute = true v.ability.cry_absolute = true
v.ability.eternal = true v.ability.eternal = true
end
add[#add + 1] = v add[#add + 1] = v
else else
v:start_dissolve(nil, true) v:start_dissolve(nil, true)
@ -542,7 +539,7 @@ local function apply_weeck()
local dupe = copy_card(v) local dupe = copy_card(v)
dupe:start_materialize() dupe:start_materialize()
dupe:add_to_deck() dupe:add_to_deck()
G.deck:emplace(dupe) G.hand:emplace(dupe)
G.playing_card = (G.playing_card and G.playing_card + 1) or 1 G.playing_card = (G.playing_card and G.playing_card + 1) or 1
table.insert(G.playing_cards, dupe) table.insert(G.playing_cards, dupe)
end end
@ -716,8 +713,6 @@ back {
end end
end end
end end
G.hand.config.card_limit = math.max(G.hand.config.card_limit or 12, 12)
end, end,
calculate = function(_, _, context) calculate = function(_, _, context)
rebalance_orrery() rebalance_orrery()

View file

@ -108,10 +108,6 @@ SMODS.Blind {
pos = {x = 0, y = 3}, pos = {x = 0, y = 3},
vars = {}, vars = {},
dollars = Jane.cry and 2 or 5, dollars = Jane.cry and 2 or 5,
in_pool = function()
return (G.GAME or {}).selected_sleeve ~= "sleeve_Bakery_United" and
((((G.GAME or {}).selected_back or {}).effect or {}).center or {}).key ~= "b_Bakery_LoneStar"
end,
disable = function(self) disable = function(self)
self.disabled = true self.disabled = true
end, end,

View file

@ -4,10 +4,18 @@ SMODS.Sound({key = "e_jumbo", path = "e_jumbo.ogg"})
SMODS.Sound({key = "e_moire", path = "e_moire.ogg"}) SMODS.Sound({key = "e_moire", path = "e_moire.ogg"})
SMODS.Sound({key = "e_polygloss", path = "e_polygloss.ogg"}) SMODS.Sound({key = "e_polygloss", path = "e_polygloss.ogg"})
local function allow_moire()
for _, v in pairs(SMODS.find_card("j_jane_saint")) do
if v.ability.extra.is_attuned then
return true
end
end
return false
end
local function get_weight(self) local function get_weight(self)
return self.weight * return G.GAME.edition_rate * self.weight
G.GAME.edition_rate *
(next(SMODS.find_card "j_jane_saint") and 10 or 1)
end end
SMODS.Edition({ SMODS.Edition({
@ -17,7 +25,7 @@ SMODS.Edition({
label = "Polygloss", label = "Polygloss",
text = Jane.cry and { text = Jane.cry and {
"{C:chips}+#1#{} Chips", "{C:chips}+#1#{} Chips",
"{C:mult}+#2#{}, {X:mult,C:white}X#3#{}, & {X:dark_edition,C:white}^#4#{} Mult", "{C:mult}+#2#{}, {X:mult,C:white}X#3#{}, & {X:mult,C:dark_edition}^#4#{} Mult",
"{C:money}$#5# {}when scored", "{C:money}$#5# {}when scored",
} or { } or {
"{C:chips}+#1#{} Chips", "{C:chips}+#1#{} Chips",
@ -27,7 +35,7 @@ SMODS.Edition({
}, },
config = { config = {
mult = 2, mult = 2,
chips = 22, chips = 12,
x_mult = 1.2, x_mult = 1.2,
p_dollars = 1, p_dollars = 1,
e_mult = Jane.cry and 1.02 or nil, e_mult = Jane.cry and 1.02 or nil,
@ -36,7 +44,7 @@ SMODS.Edition({
weight = 10, weight = 10,
extra_cost = 2, extra_cost = 2,
in_shop = true, in_shop = true,
shader = "jane_polygloss", shader = "polygloss",
apply_to_float = false, apply_to_float = false,
loc_vars = function(self, _, _) loc_vars = function(self, _, _)
local vars = {self.config.chips} local vars = {self.config.chips}
@ -71,46 +79,13 @@ SMODS.Edition({
get_weight = get_weight, get_weight = get_weight,
}) })
local moire = SMODS.Edition({ local orig_draw_shader = Sprite.draw_shader
key = "moire",
loc_txt = {
name = "Moire",
label = "Moire",
text = {
"{X:dark_edition,C:white}^#1#{} Chips",
"{X:dark_edition,C:white}^#2#{} Mult",
},
},
config = {e_chips = 0.8, e_mult = 1.2},
sound = {sound = "jane_e_moire", per = 1, vol = 0.7},
weight = 1,
extra_cost = 10,
in_shop = true,
shader = "jane_moire",
apply_to_float = false,
get_weight = get_weight,
loc_vars = function(self, _, _)
return {vars = {self.config.e_chips, self.config.e_mult}}
end,
calculate = function(self, card, context)
if not context.post_joker and (not context.main_scoring or context.cardarea ~= G.play) then
return
end
return { function Sprite:draw_shader(_shader, ...)
extra = { if _shader ~= "jane_jumbo" then
card = card, return orig_draw_shader(self, _shader, ...)
colour = G.C.jane_RGB, end
e_chips = self.config.e_chips, end
extra = {
card = card,
colour = G.C.jane_RGB,
e_mult = self.config.e_mult,
},
},
}
end,
})
local jumbo_modifier = Jane.cry and 100 or 2 local jumbo_modifier = Jane.cry and 100 or 2
@ -195,8 +170,8 @@ local jumbo = 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 = 6, 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,
@ -229,16 +204,32 @@ function Card:set_ability(...)
return ret return ret
end end
local orig_draw_shader = Sprite.draw_shader SMODS.Edition({
key = "moire",
function Sprite:draw_shader(_shader, ...) loc_txt = {
if _shader == "jane_jumbo" then name = "Moire",
return label = "Moire",
end text = {
"{X:chips,C:dark_edition}^#1#{C:chips} Chips",
if _shader == "jane_moire" then "{X:mult,C:dark_edition}^#2#{C:mult} Mult",
G.P_CENTERS.j_jane_saint:draw() },
end },
config = {e_chips = Jane.cry and 0.8 or 0.9, e_mult = Jane.cry and 1.2 or 1.1},
return orig_draw_shader(self, _shader, ...) sound = {sound = "jane_e_moire", per = 1, vol = 0.7},
weight = 1,
extra_cost = 10,
in_shop = true,
shader = "moire",
apply_to_float = false,
get_weight = function(self)
return G.GAME.edition_rate * self.weight * (allow_moire() and 20 or 2)
end,
loc_vars = function(self, _, _)
return {vars = {self.config.e_chips, self.config.e_mult}}
end,
calculate = function(self, _, context)
if context.post_joker or context.main_scoring and context.cardarea == G.play then
return {e_chips = self.config.e_chips, e_mult = self.config.e_mult}
end end
end,
})

View file

@ -1,4 +1,4 @@
for _, v in pairs({"7granddad", "betmma", "escapey", "honey", "oxy", "maxie"}) do for _, v in pairs({"7granddad", "betmma", "escapey", "honey", "oxy", "maxie", Jane.cry and "peppino" or nil}) do
SMODS.Atlas { SMODS.Atlas {
px = 71, px = 71,
py = 95, py = 95,
@ -15,12 +15,63 @@ SMODS.Sound({key = "corrupt_milestone", path = "corrupt_milestone.ogg"})
SMODS.Sound({key = "corrupt_untick", path = "corrupt_untick.ogg"}) SMODS.Sound({key = "corrupt_untick", path = "corrupt_untick.ogg"})
SMODS.Sound({key = "corrupt_tick", path = "corrupt_tick.ogg"}) SMODS.Sound({key = "corrupt_tick", path = "corrupt_tick.ogg"})
local granddad_palette = {HEX("155fd9"), HEX("ff8170"), HEX("ffffff"), HEX("6c0700")} local exotic = Jane.cry and "cry_exotic" or 4
local food = {
"j_gros_michel",
"j_egg",
"j_ice_cream",
"j_cavendish",
"j_turtle_bean",
"j_diet_cola",
"j_popcorn",
"j_ramen",
"j_selzer",
"j_cry_pickle",
"j_cry_chili_pepper",
"j_cry_oldcandy",
"j_cry_caramel",
"j_cry_foodm",
"j_cry_cotton_candy",
"j_cry_wrapped",
"j_cry_candy_cane",
"j_cry_candy_buttons",
"j_cry_jawbreaker",
"j_cry_mellowcreme",
"j_cry_brittle",
}
local granddad_palette = {
HEX("155fd9"),
HEX("ff8170"),
HEX("ffffff"),
HEX("6c0700"),
}
local function destructible(card) local function destructible(card)
return card.ability.consumeable and not card.highlighted and not (card.ability or {}).eternal return card.ability.consumeable and not card.highlighted and not (card.ability or {}).eternal
end end
local function food_jokers_count()
if not G.jokers or not next(G.jokers.cards) then
return 0
end
local amount = 0
if G.jokers.cards[1] and G.jokers.cards[1].has_attribute then
for _, v in pairs(G.jokers.cards) do
amount = amount + (v:has_attribute "food" and 1 or 0)
end
else
for _, v in pairs(food) do
amount = amount + #SMODS.find_card(v)
end
end
return amount
end
local function grand_dad(card) local function grand_dad(card)
if ((Talisman or {}).config_file or {}).disable_anims then if ((Talisman or {}).config_file or {}).disable_anims then
return return
@ -130,8 +181,8 @@ local esc = SMODS.Joker {
loc_vars = function(_, _, card) loc_vars = function(_, _, card)
local extra = card.ability.extra local extra = card.ability.extra
local normal = Jane.sinister and {"", ""} or local normal = Jane.sinister and "" or
pseudorandom_element(escapey_quotes.normal, pseudoseed "EscapeyQuotes") or {"", ""} pseudorandom_element(escapey_quotes.normal, pseudoseed "EscapeyQuotes") or ""
local scared = not Jane.sinister and "" or local scared = not Jane.sinister and "" or
pseudorandom_element(escapey_quotes.scared, pseudoseed "EscapeyQuotes") or "" pseudorandom_element(escapey_quotes.scared, pseudoseed "EscapeyQuotes") or ""
@ -249,7 +300,7 @@ SMODS.Joker {
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},
blueprint_compat = false, blueprint_compat = true,
cost = 6, cost = 6,
rarity = 2, rarity = 2,
loc_vars = function(_, _, card) loc_vars = function(_, _, card)
@ -266,7 +317,7 @@ SMODS.Joker {
local _ = context.starting_shop and self:add_to_deck(card, false) local _ = context.starting_shop and self:add_to_deck(card, false)
end, end,
add_to_deck = function(_, card, from_debuff) add_to_deck = function(_, card, from_debuff)
if from_debuff or G.STATE ~= G.STATES.SHOP and G.STATE ~= G.STATES.SMODS_BOOSTER_OPENED then if from_debuff then
return return
end end
@ -279,9 +330,9 @@ SMODS.Joker {
end, end,
} }
function Jane.check_honey() function Jane.update_honey()
if not G.GAME then if not G.GAME then
return true return
end end
local honey = SMODS.find_card("j_jane_honey") local honey = SMODS.find_card("j_jane_honey")
@ -351,7 +402,6 @@ SMODS.Joker {
blueprint_compat = false, blueprint_compat = false,
cost = 8, cost = 8,
rarity = 3, rarity = 3,
add_to_deck = Jane.check_honey,
loc_vars = function(_, _, card) loc_vars = function(_, _, card)
local level = tonumber(card.ability.extra.level) or 1 local level = tonumber(card.ability.extra.level) or 1
@ -394,10 +444,8 @@ SMODS.Joker {
}, },
} }
end, end,
draw = function(_, card) update = function(_, card, _)
if card.added_to_deck and if card.added_to_deck and card.children.center and card.children.floating_sprite then
card.children.center and
card.children.floating_sprite then
local extra = card.ability.extra or {} local extra = card.ability.extra or {}
local y = (tonumber(extra.level) or 1) > 1 and 1 or 0 local y = (tonumber(extra.level) or 1) > 1 and 1 or 0
card.children.center:set_sprite_pos({x = 0, y = y}) card.children.center:set_sprite_pos({x = 0, y = y})
@ -487,7 +535,7 @@ SMODS.Joker {
name = "Oxy{C:dark_edition}#1#", name = "Oxy{C:dark_edition}#1#",
text = { text = {
"{C:attention}Scored steel {}cards", "{C:attention}Scored steel {}cards",
"give {X:mult,C:white}X#2#{} {}Mult", "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#",
@ -518,7 +566,7 @@ SMODS.Joker {
is_corrupted and "Purifies " or "", is_corrupted and "Purifies " or "",
is_corrupted and "in " or "", is_corrupted and "in " or "",
is_corrupted and "" or "Destroying ", is_corrupted and "" or "Destroying ",
effective .. (is_corrupted and " round" or " steel card") .. plural, effective .. (is_corrupted and " ante" or " steel card") .. plural,
is_corrupted and "" or "corrupts ", is_corrupted and "" or "corrupts ",
is_corrupted and "Destroying steel cards" or "this Joker", is_corrupted and "Destroying steel cards" or "this Joker",
is_corrupted and "prolongs the " or "", is_corrupted and "prolongs the " or "",
@ -531,7 +579,7 @@ SMODS.Joker {
}, },
} }
end, end,
draw = function(_, card) update = function(_, card, _)
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 or {} local extra = card.ability.extra or {}
local y = extra.is_corrupted and 1 or 0 local y = extra.is_corrupted and 1 or 0
@ -543,7 +591,7 @@ SMODS.Joker {
local extra = card.ability.extra or {} local extra = card.ability.extra or {}
Jane.oxy(card, context.removed) Jane.oxy(card, context.removed)
if context.end_of_round and if context.ante_end and context.ante_change and
extra.progress > 0 and not extra.progress > 0 and not
context.individual and not context.individual and not
context.repetition and not context.repetition and not
@ -598,7 +646,7 @@ if Cryptid and Cryptid.aliases then
end end
local operator = Jane.cry and "^" or "X" local operator = Jane.cry and "^" or "X"
local operator_prefix = Jane.cry and "{X:dark_edition,C:white}" or "{X:mult,C:white}" local operator_prefix = Jane.cry and "{X:dark_edition,C:mult}" or "{X:mult,C:white}"
SMODS.Joker { SMODS.Joker {
key = "betmma", key = "betmma",
@ -606,7 +654,7 @@ SMODS.Joker {
loc_txt = { loc_txt = {
name = "Betmma", name = "Betmma",
text = { text = {
operator_prefix .. "+" .. operator .. "#1#{} Mult for every", operator_prefix .. "+" .. operator .. "#1#{C:mult} Mult{} for every",
"{C:attention}" .. (Jane.cry and "Unique " or "") .. "Voucher{} redeemed", "{C:attention}" .. (Jane.cry and "Unique " or "") .. "Voucher{} redeemed",
"{C:inactive}(Currently " .. operator_prefix .. operator .. "#2#{C:inactive})", "{C:inactive}(Currently " .. operator_prefix .. operator .. "#2#{C:inactive})",
}, },
@ -633,12 +681,17 @@ SMODS.Joker {
return { return {
card = card, card = card,
colour = Jane.cry and G.C.jane_RGB or nil, colour = Jane.cry and G.C.jane_RGB or nil,
[Jane.cry and "emult" or "xmult"] = num, message = Jane.cry and (operator .. number_format(num)) or nil,
[Jane.cry and "e_mult" or "x_mult"] = num,
}, true }, true
end end
end, end,
} }
if not Jane.cry then
return
end
SMODS.Joker { SMODS.Joker {
key = "7granddad", key = "7granddad",
loc_txt = { loc_txt = {
@ -648,70 +701,99 @@ SMODS.Joker {
"{C:jane_RGB,E:1}reaction {}to scored {C:attention}7{}s", "{C:jane_RGB,E:1}reaction {}to scored {C:attention}7{}s",
}, },
}, },
config = {extra = {}}, config = {},
pos = {x = 0, y = 0}, pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0}, soul_pos = {x = 1, y = 0},
atlas = "jane7granddad", atlas = "jane7granddad",
blueprint_compat = true, blueprint_compat = true,
cost = 7, cost = Jane.cry and 49 or 7,
rarity = 3, rarity = Jane.cry and exotic or 3,
loc_vars = function(_, _, center)
return {vars = {center.ability.shopslots}}
end,
add_to_deck = function(_, card, _) add_to_deck = function(_, card, _)
grand_dad(card) grand_dad(card)
end, end,
remove_from_deck = function(_, card, _) remove_from_deck = function(_, card, _)
grand_dad(card) grand_dad(card)
end, end,
draw = function()
G.P_CENTERS.j_jane_saint:draw()
end,
calculate = function(_, card, context) calculate = function(_, card, context)
if context.cardarea ~= G.play or if context.cardarea == G.play then
not context.individual or local function scj(c)
not context.other_card or return c.cardarea and c.cardarea == G.play and not c.before and not c.after and not c.repetition
context.other_card:get_id() ~= 7 then
return
end end
local palette = granddad_palette[math.random(#granddad_palette)] if context.other_card and context.other_card:get_id() == 7 and scj(context) then
local cycle = ((card.ability.extra.cycle or -1) + 1) % 5
cycle = cycle == 2 and not Jane.cry and 3 or cycle
card.ability.extra.cycle = cycle
if cycle == (Jane.cry and 2 or 3) then
grand_dad(card) grand_dad(card)
end local palette = granddad_palette[math.random(#granddad_palette)]
local rnd = pseudorandom(pseudoseed("granddad"), 1, Jane.cry and 5 or 4)
if cycle == 0 then if rnd == 1 then
return { return {
chips = 177, message = Jane.cry and "+777" or "+77",
chips = Jane.cry and 777 or 77,
colour = palette, colour = palette,
card = card, card = card,
}, true }, true
elseif cycle == 1 then elseif rnd == 2 then
return { return {
message = Jane.cry and "+777 Mult" or "+77 Mult",
mult = Jane.cry and 777 or 77,
colour = palette,
card = card,
}, true
elseif rnd == 3 then
return {
message = "+$7",
dollars = 7, dollars = 7,
colour = palette, colour = palette,
card = card, card = card,
}, true }, true
elseif cycle == 2 then elseif rnd == 4 then
return { return {
emult = 1.17, message = Jane.cry and "X7 Mult" or "X1.77 Mult",
x_mult = Jane.cry and 7 or 1.77,
colour = palette, colour = palette,
card = card, card = card,
}, true }, true
elseif cycle == 3 then else
return { return {
xmult = 1.77, message = "^1.77 Mult",
colour = palette, e_mult = 1.77,
card = card,
}, true
elseif cycle == 4 then
return {
mult = 77,
colour = palette, colour = palette,
card = card, card = card,
}, true }, true
end end
end
end
end,
}
SMODS.Joker {
key = "peppino",
atlas = "janepeppino",
loc_txt = {
name = "Peppino Spaghetti",
text = {
operator_prefix .. operator .. "2{C:mult} Mult{} per {C:attention}Food Joker",
"{C:inactive}(Currently " .. operator_prefix .. operator .. "#1#{C:mult} Mult{C:inactive})",
},
},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
config = {extra = {base = 2}},
cost = Jane.cry and 20 or 8,
rarity = Jane.cry and 4 or 3,
blueprint_compat = true,
loc_vars = function(_, _, card)
return {vars = {card.ability.extra.base ^ food_jokers_count()}}
end,
calculate = function(_, card, context)
local count = food_jokers_count()
if context.joker_main and count > 0 then
return {[Jane.cry and "e_mult" or "x_mult"] = card.ability.extra.base ^ count}
end
end, end,
} }

View file

@ -1,5 +1,5 @@
Jane = { Jane = {
cry = SMODS.Mods.Cryptid and not SMODS.Mods.Cryptid.disabled, cry = not not G.P_CENTERS.j_cry_m,
config = { config = {
texture_pack = "default", texture_pack = "default",
wee_sizemod = math.sqrt(2), wee_sizemod = math.sqrt(2),
@ -7,7 +7,7 @@ Jane = {
}, },
} }
Jane.rarity_ids = Jane.cry and {1, 2, 3, "cry_epic", 4, "cry_exotic", "jane_junk"} or {1, 2, 3, "jane_junk"} Jane.rarity_ids = Jane.cry and {1, 2, 3, "cry_epic", 4, "cry_exotic", "jane_junk"} or {1, 2, 3, 4, "jane_junk"}
Jane.rarity_names = Jane.cry and {"Common", "Uncommon", "Rare", "Epic", "Legendary", "Exotic", "Junk"} or Jane.rarity_names = Jane.cry and {"Common", "Uncommon", "Rare", "Epic", "Legendary", "Exotic", "Junk"} or
{"Common", "Uncommon", "Rare", "Legendary", "Junk"} {"Common", "Uncommon", "Rare", "Legendary", "Junk"}
@ -155,33 +155,6 @@ function Jane.hidden(card)
(type(card) == "table" and (card.name == "Black Hole" or card.name == "The Soul") or card.hidden) (type(card) == "table" and (card.name == "Black Hole" or card.name == "The Soul") or card.hidden)
end end
function Jane.hsv(h, s, v)
if s <= 0 then
return v, v, v
end
h = h * 6
local c = v * s
local x = (1 - math.abs((h % 2) - 1)) * c
local m, r, g, b = (v - c), 0, 0, 0
if h < 1 then
r, g, b = c, x, 0
elseif h < 2 then
r, g, b = x, c, 0
elseif h < 3 then
r, g, b = 0, c, x
elseif h < 4 then
r, g, b = 0, x, c
elseif h < 5 then
r, g, b = x, 0, c
else
r, g, b = c, 0, x
end
return r + m, g + m, b + m
end
function Jane.is_end_of_ante(context, card) function Jane.is_end_of_ante(context, card)
return not context.individual and not return not context.individual and not
context.repetition and not context.repetition and not
@ -298,17 +271,75 @@ function Game:main_menu(change_context)
orig_menu(self, change_context) orig_menu(self, change_context)
end end
local orig_start_run = Game.start_run local orig_update = Game.update
function Game:start_run(...) function Game:update(dt)
orig_start_run(self, ...) local function delete_hardbans()
if not Jane.config.disable_bans then
if self.GAME.banned_keys then
for _, v in pairs(Jane.config.bans) do for _, v in pairs(Jane.config.bans) do
self.GAME.banned_keys[v] = true local e = SMODS.Center:get_obj(v)
if e then
e:delete()
end end
end end
end end
end
local function hsv(h, s, v)
if s <= 0 then
return v, v, v
end
h = h * 6
local c = v * s
local x = (1 - math.abs((h % 2) - 1)) * c
local m, r, g, b = (v - c), 0, 0, 0
if h < 1 then
r, g, b = c, x, 0
elseif h < 2 then
r, g, b = x, c, 0
elseif h < 3 then
r, g, b = 0, c, x
elseif h < 4 then
r, g, b = 0, x, c
elseif h < 5 then
r, g, b = x, 0, c
else
r, g, b = c, 0, x
end
return r + m, g + m, b + m
end
orig_update(self, dt)
local ante = G.GAME.round_resets.ante
local blind = get_blind_amount((ante >= 1 and ante <= 8) and math.floor(ante) or ante)
G.P_BLINDS["bl_jane_wee"].mult = 22 / blind
G.P_BLINDS["bl_jane_descending"].mult = math.ceil(8 * math.sqrt(blind)) / blind
Jane.update_honey()
if not Jane.bans_done then
Jane.bans_done = true
delete_hardbans()
end
if (G.GAME or {}).banned_keys then
for _, v in pairs(Jane.config.bans) do
G.GAME.banned_keys[v] = true
end
end
if G.ARGS.LOC_COLOURS then
local r, g, b = hsv(self.C.jane_RGB_HUE / 360, .5, 1)
self.C.jane_RGB[1] = r
self.C.jane_RGB[3] = g
self.C.jane_RGB[2] = b
self.C.jane_RGB_HUE = (self.C.jane_RGB_HUE + 0.5) % 360
G.ARGS.LOC_COLOURS.jane_RGB = self.C.jane_RGB
end
end
local orig_draw_card = draw_card local orig_draw_card = draw_card
@ -319,20 +350,6 @@ function draw_card(a, b, c, d, e, f, ...)
end end
end end
local orig_reset_blinds = reset_blinds
---@diagnostic disable-next-line: lowercase-global
function reset_blinds(...)
orig_reset_blinds(...)
local ante = G.GAME.round_resets.ante
local blind = get_blind_amount((ante >= 1 and ante <= 8) and math.floor(ante) or ante)
G.P_BLINDS["bl_jane_wee"].mult = 22 / blind
G.P_BLINDS["bl_jane_descending"].mult = math.ceil(8 * math.sqrt(blind)) / blind
end
loc_colour()
G.ARGS.LOC_COLOURS.jane_RGB = G.C.jane_RGB
SMODS.Atlas { SMODS.Atlas {
px = 34, px = 34,
py = 34, py = 34,

View file

@ -127,8 +127,6 @@ function Jane.misprintize_val(val, override, big)
end end
function Jane.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack, big) function Jane.misprintize_tbl(name, ref_tbl, ref_value, clear, override, stack, big)
local is_number = _G.is_number or function(x) return type(x) == "number" end
if name and ref_tbl and ref_value then if name and ref_tbl and ref_value then
local tbl = deep_copy(ref_tbl[ref_value]) local tbl = deep_copy(ref_tbl[ref_value])

View file

@ -63,25 +63,9 @@ local exotic = Jane.cry and "cry_exotic" or 4
SMODS.Rarity { SMODS.Rarity {
key = "junk", key = "junk",
default_weight = 0, default_weight = 1e-9,
pools = {Joker = true},
loc_txt = {name = "Junk"}, loc_txt = {name = "Junk"},
badge_colour = G.C.JOKER_GREY, badge_colour = G.C.JOKER_GREY,
get_weight = function()
local rarity = 0.05
if next(SMODS.find_card("j_jane_rot")) then
return rarity
end
for _, v in pairs(SMODS.find_card("j_jane_honey")) do
if tonumber(v.ability.extra.level) == #Jane.rarity_ids - 1 then
return rarity
end
end
return 0
end,
} }
local monk_limit = 25 local monk_limit = 25
@ -196,7 +180,7 @@ SMODS.Joker {
}, },
} }
end, end,
draw = function(_, card) update = function(_, card, _)
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
for k, v in ipairs(hunter) do for k, v in ipairs(hunter) do
if card.ability.extra.rounds_left <= v then if card.ability.extra.rounds_left <= v then
@ -216,12 +200,11 @@ SMODS.Joker {
Jane.card_status_text(card, "Dead!", nil, 0.05 * card.T.h, G.C.BLACK, 2, 0, 0, nil, "bm", "jane_gore6") Jane.card_status_text(card, "Dead!", nil, 0.05 * card.T.h, G.C.BLACK, 2, 0, 0, nil, "bm", "jane_gore6")
Jane.q(function() Jane.q(function()
local rot = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_jane_rot", "hunter_rot_death") local card2 = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_jane_rot", "hunter_rot_death")
rot:add_to_deck() card2:add_to_deck()
G.jokers:emplace(rot) G.jokers:emplace(card2)
card:set_eternal(nil) card:set_eternal(nil)
rot:set_eternal(true) card2:set_eternal(true)
rot:set_edition(card.edition)
play_sound("jane_gore5") play_sound("jane_gore5")
end) end)
@ -412,13 +395,13 @@ SMODS.Joker {
return not card.debuff and Jane.can_use() and next(G.hand.highlighted) return not card.debuff and Jane.can_use() and next(G.hand.highlighted)
end, end,
Bakery_use_joker = function(_, card) Bakery_use_joker = function(_, card)
local removed = {unpack(G.hand.highlighted)} for _, v in pairs(SMODS.find_card("j_jane_oxy")) do
Jane.oxy(v, G.hand.highlighted)
for _, v in pairs(removed) do
v:start_dissolve()
end end
SMODS.calculate_context {remove_playing_cards = true, removed = removed} for _, v in pairs(G.hand.highlighted) do
v:start_dissolve()
end
if Jane.cry then if Jane.cry then
return return
@ -588,7 +571,7 @@ local orig_debuff = Card.set_debuff
function Card:set_debuff(should_debuff) function Card:set_debuff(should_debuff)
if should_debuff and ((self.config or {}).center or {}).debuff_immune then if should_debuff and ((self.config or {}).center or {}).debuff_immune then
Jane.card_status_text(self, "Immune!", nil, 0.05 * self.T.h, G.C.RED, nil, 0.6, nil, nil, "bm", "cancel", 1, 0.9) Jane.card_status_text(self, "Immune", nil, 0.05 * self.T.h, G.C.RED, nil, 0.6, nil, nil, "bm", "cancel", 1, 0.9)
return false return false
else else
orig_debuff(self, should_debuff) orig_debuff(self, should_debuff)
@ -604,25 +587,24 @@ SMODS.Joker {
"{C:attention}Use {}to toggle itself or", "{C:attention}Use {}to toggle itself or",
"other Jokers to its", "other Jokers to its",
"left's {C:legendary}Eternal{} sticker", "left's {C:legendary}Eternal{} sticker",
"{C:attention}#4#{}#5#{C:spectral}#6#{C:planet}#7#{}#8#", "{C:attention}#4#{}#5#{C:spectral}#6#{}#7#",
"{C:inactive,s:1.25}#9#{C:attention,s:1.25}#10#{C:inactive,s:1.25}#11#", "{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 = {changes_editions = false, jokers = 1, karma = -10}}, 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,
debuff_immune = true, blueprint_compat = true,
eternal_compat = true, loc_vars = function(_, info_queue, card)
blueprint_compat = false,
perishable_compat = true,
loc_vars = function(self, info_queue, card)
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or nil 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 attuned = extra.karma >= 0 local karma = extra.karma
local max_karma = extra.max_karma
local attuned = karma >= max_karma
return { return {
vars = { vars = {
@ -632,30 +614,25 @@ SMODS.Joker {
attuned and "" or "Attune ", attuned and "" or "Attune ",
attuned and "" or "at ", attuned and "" or "at ",
attuned and (Jane.cry and "Gateways " or "Spectrals ") or attuned and (Jane.cry and "Gateways " or "Spectrals ") or
(Jane.cry and -self.config.extra.karma .. " Gateways" or ""), max_karma .. (Jane.cry and " Gateways" or " Spectrals"),
(attuned or Jane.cry) and "" or -self.config.extra.karma .. " Planets",
attuned and "add Joker slots" or "", attuned and "add Joker slots" or "",
attuned and "[Currently " or "[", attuned and "[Currently " or "[",
attuned and "+" .. extra.karma or extra.karma - self.config.extra.karma, attuned and "+" .. karma or karma,
attuned and "]" or " / " .. -self.config.extra.karma .. "]", attuned and "]" or " / " .. max_karma .. "]",
}, },
} }
end, end,
draw = function(_, card) update = function(_, card, _)
local rgb = G.C.jane_RGB
rgb[1], rgb[2], rgb[3] = Jane.hsv(1 - (G.TIMERS.REAL / 3 % 1), math.sin(G.TIMERS.REAL) / 10 + 0.6, 1)
local _ = card and
card.children.floating_sprite and
card.children.floating_sprite:set_sprite_pos({x = card.ability.extra.is_attuned and 2 or 1, y = 0})
end,
calculate = function(self, card, context)
if card.edition and card.edition.Roland_frozen then if card.edition and card.edition.Roland_frozen then
card:set_edition("e_base", true) card:set_edition("e_base")
elseif card.children.floating_sprite then
card.children.floating_sprite:set_sprite_pos({x = card.ability.extra.is_attuned and 2 or 1, y = 0})
end end
end,
calculate = function(_, card, context)
local extra = card.ability.extra local extra = card.ability.extra
extra.is_attuned = extra.is_attuned and extra.karma >= 0 local max_karma = extra.max_karma
extra.is_attuned = extra.is_attuned and extra.karma >= max_karma
local function ascend() local function ascend()
if extra.is_attuning then if extra.is_attuning then
@ -689,15 +666,10 @@ SMODS.Joker {
play_sound("card1") play_sound("card1")
extra.is_attuned = true extra.is_attuned = true
end, 1) end, 1)
Jane.q(function()
extra.karma = Jane.cry and extra.karma + extra.jokers or extra.jokers
G.jokers:change_size(extra.jokers)
end, 1)
end end
if extra.karma >= 0 then if extra.karma >= max_karma then
local karma = extra.is_attuning and 0 or (extra.is_attuned and 1 or extra.karma) local karma = (extra.is_attuning or extra.is_attuned) and 0 or extra.karma
G.jokers:change_size(karma * extra.jokers) G.jokers:change_size(karma * extra.jokers)
ascend() ascend()
end end
@ -711,8 +683,7 @@ SMODS.Joker {
local gc = context.consumeable:gc() local gc = context.consumeable:gc()
if Jane.cry and gc.key ~= "c_cry_gateway" or if Jane.cry and gc.key ~= "c_cry_gateway" or not Jane.cry and gc.set ~= "Spectral" then
not Jane.cry and gc.set ~= (extra.karma > 0 and "Spectral" or "Planet") then
return return
end end
@ -728,41 +699,22 @@ SMODS.Joker {
{message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN} {message = "+" .. quota .. " Karma", colour = G.C.PALE_GREEN}
) )
local _ = extra.karma <= 0 and card_eval_status_text( local _ = extra.karma <= max_karma and card_eval_status_text(
card, card,
"extra", "extra",
nil, nil,
nil, nil,
nil, nil,
{ {message = extra.karma .. " / " .. max_karma, colour = G.C.GREEN}
message = (extra.karma - self.config.extra.karma) ..
" / " ..
-self.config.extra.karma,
colour = G.C.GREEN,
}
) )
if extra.karma < 0 then if extra.karma < max_karma then
return return
end end
G.jokers:change_size((extra.is_attuned and quota or (Jane.cry and extra.karma or 0)) * extra.jokers) G.jokers:change_size((extra.is_attuned and quota or extra.karma) * extra.jokers)
ascend() ascend()
end, end,
add_to_deck = function(_, card)
local extra = card.ability.extra
local _ = extra.karma > 0 and
(extra.is_attuning or extra.is_attuned) and
G.jokers:change_size(extra.karma * extra.jokers)
end,
remove_from_deck = function(_, card)
local extra = card.ability.extra
local _ = extra.karma > 0 and
(extra.is_attuning or extra.is_attuned) and
G.jokers:change_size(-extra.karma * extra.jokers)
end,
Bakery_can_use = function(_, card) Bakery_can_use = function(_, card)
return Jane.can_use() and not card.debuff return Jane.can_use() and not card.debuff
end, end,
@ -818,10 +770,16 @@ SMODS.Joker {
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,
cost = 2, cost = 1,
rarity = "jane_junk", rarity = "jane_junk",
in_pool = function() in_pool = function(_, _)
return true, {allow_duplicates = true} for _, v in pairs(SMODS.find_card("j_jane_honey")) do
if tonumber(v.ability.extra.level) == #Jane.rarity_ids - 1 then
return true
end
end
return not not next(SMODS.find_card("j_jane_rot"))
end, end,
calculate = Jane.cry and function(_, card, context) calculate = Jane.cry and function(_, card, context)
local function has_room() local function has_room()