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]
version = "1.0.0"
dump_lua = true
priority = 115
priority = 114
[[patches]]
[patches.pattern]
@ -16,7 +16,9 @@ match_indent = true
target = "globals.lua"
pattern = "EDITION = {1,1,1,1},"
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
[[patches]]
@ -45,20 +47,16 @@ payload = '''if Jane and
G.ARGS.score_intensity.required_score:to_number() or
G.ARGS.score_intensity.required_score) ~= 0 then
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 base = Cryptid and 2 or G.ARGS.score_intensity.required_score
local expo = Cryptid and G.ARGS.score_intensity.required_score or 2
local ratio = G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))
Jane.sinister = small(ratio) > 1
local ratio = (G.ARGS.score_intensity.earned_score / (big(base) ^ big(expo))):to_number()
Jane.sinister = ratio > 1
G.ARGS.score_intensity.ambientSurreal4 =
(break_infinity and
SMODS.Mods.Amulet and
G.ARGS.score_intensity.earned_score >= (SMODS.Mods.Amulet
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.earned_score >= Bakery_API.parse_hyper_e("e10#10##10000")) and 1 or 0
G.ARGS.score_intensity.ambientSurreal3 =
(G.ARGS.score_intensity.ambientSurreal4 == 0 and
@ -67,14 +65,14 @@ payload = '''if Jane and
G.ARGS.score_intensity.ambientSurreal2 =
(G.ARGS.score_intensity.ambientSurreal3 == 0 and
G.ARGS.score_intensity.ambientSurreal4 == 0 and
small(G.ARGS.score_intensity.earned_score /
(G.ARGS.score_intensity.earned_score /
(Cryptid and
big(G.ARGS.score_intensity.required_score) ^
big(G.ARGS.score_intensity.required_score) ^
big(G.ARGS.score_intensity.required_score) or
big(2) ^ big(G.ARGS.score_intensity.required_score)
)
) > 1
):to_number() > 1
) and 1 or 0
G.ARGS.score_intensity.ambientSurreal1 =
@ -160,6 +158,7 @@ target = "functions/state_events.lua"
pattern = '''hand_chips\*mult\)'''
position = "at"
payload = "Jane.get_chipmult_sum(hand_chips, mult))"
match_indent = true
[[patches]]
[patches.pattern]

View file

@ -9,7 +9,7 @@
"prefix": "jane",
"main_file": "src/main.lua",
"badge_colour": "3c3cff",
"priority": 115,
"priority": 114,
"dependencies": [
"Steamodded (>=1.0.0~BETA-1606b)",
"Lovely (>=0.6)",
@ -18,5 +18,5 @@
"conflicts": [
"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
if v.base.id == 2 then
if Jane.cry then
v.ability.cry_absolute = true
v.ability.eternal = true
end
add[#add + 1] = v
else
v:start_dissolve(nil, true)
@ -542,7 +539,7 @@ local function apply_weeck()
local dupe = copy_card(v)
dupe:start_materialize()
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
table.insert(G.playing_cards, dupe)
end
@ -716,8 +713,6 @@ back {
end
end
end
G.hand.config.card_limit = math.max(G.hand.config.card_limit or 12, 12)
end,
calculate = function(_, _, context)
rebalance_orrery()

View file

@ -108,10 +108,6 @@ SMODS.Blind {
pos = {x = 0, y = 3},
vars = {},
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)
self.disabled = true
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_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)
return self.weight *
G.GAME.edition_rate *
(next(SMODS.find_card "j_jane_saint") and 10 or 1)
return G.GAME.edition_rate * self.weight
end
SMODS.Edition({
@ -17,7 +25,7 @@ SMODS.Edition({
label = "Polygloss",
text = Jane.cry and {
"{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",
} or {
"{C:chips}+#1#{} Chips",
@ -27,7 +35,7 @@ SMODS.Edition({
},
config = {
mult = 2,
chips = 22,
chips = 12,
x_mult = 1.2,
p_dollars = 1,
e_mult = Jane.cry and 1.02 or nil,
@ -36,7 +44,7 @@ SMODS.Edition({
weight = 10,
extra_cost = 2,
in_shop = true,
shader = "jane_polygloss",
shader = "polygloss",
apply_to_float = false,
loc_vars = function(self, _, _)
local vars = {self.config.chips}
@ -71,46 +79,13 @@ SMODS.Edition({
get_weight = get_weight,
})
local moire = SMODS.Edition({
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
local orig_draw_shader = Sprite.draw_shader
return {
extra = {
card = card,
colour = G.C.jane_RGB,
e_chips = self.config.e_chips,
extra = {
card = card,
colour = G.C.jane_RGB,
e_mult = self.config.e_mult,
},
},
}
end,
})
function Sprite:draw_shader(_shader, ...)
if _shader ~= "jane_jumbo" then
return orig_draw_shader(self, _shader, ...)
end
end
local jumbo_modifier = Jane.cry and 100 or 2
@ -195,8 +170,8 @@ local jumbo = SMODS.Edition({
end
end,
sound = {sound = "jane_e_jumbo", per = 1, vol = 0.5},
weight = 6,
extra_cost = 5,
weight = 5,
extra_cost = 2,
in_shop = true,
shader = false,
apply_to_float = false,
@ -229,16 +204,32 @@ function Card:set_ability(...)
return ret
end
local orig_draw_shader = Sprite.draw_shader
function Sprite:draw_shader(_shader, ...)
if _shader == "jane_jumbo" then
return
SMODS.Edition({
key = "moire",
loc_txt = {
name = "Moire",
label = "Moire",
text = {
"{X:chips,C:dark_edition}^#1#{C:chips} Chips",
"{X:mult,C:dark_edition}^#2#{C:mult} Mult",
},
},
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},
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
if _shader == "jane_moire" then
G.P_CENTERS.j_jane_saint:draw()
end
return orig_draw_shader(self, _shader, ...)
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 {
px = 71,
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_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)
return card.ability.consumeable and not card.highlighted and not (card.ability or {}).eternal
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)
if ((Talisman or {}).config_file or {}).disable_anims then
return
@ -130,8 +181,8 @@ local esc = SMODS.Joker {
loc_vars = function(_, _, card)
local extra = card.ability.extra
local normal = Jane.sinister and {"", ""} or
pseudorandom_element(escapey_quotes.normal, pseudoseed "EscapeyQuotes") or {"", ""}
local normal = Jane.sinister and "" or
pseudorandom_element(escapey_quotes.normal, pseudoseed "EscapeyQuotes") or ""
local scared = not Jane.sinister and "" or
pseudorandom_element(escapey_quotes.scared, pseudoseed "EscapeyQuotes") or ""
@ -249,7 +300,7 @@ SMODS.Joker {
pos = {x = 0, y = 0},
sinis = {x = 2, y = 0},
soul_pos = {x = 1, y = 0},
blueprint_compat = false,
blueprint_compat = true,
cost = 6,
rarity = 2,
loc_vars = function(_, _, card)
@ -266,7 +317,7 @@ SMODS.Joker {
local _ = context.starting_shop and self:add_to_deck(card, false)
end,
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
end
@ -279,9 +330,9 @@ SMODS.Joker {
end,
}
function Jane.check_honey()
function Jane.update_honey()
if not G.GAME then
return true
return
end
local honey = SMODS.find_card("j_jane_honey")
@ -351,7 +402,6 @@ SMODS.Joker {
blueprint_compat = false,
cost = 8,
rarity = 3,
add_to_deck = Jane.check_honey,
loc_vars = function(_, _, card)
local level = tonumber(card.ability.extra.level) or 1
@ -394,10 +444,8 @@ SMODS.Joker {
},
}
end,
draw = function(_, card)
if card.added_to_deck and
card.children.center and
card.children.floating_sprite then
update = function(_, card, _)
if card.added_to_deck and card.children.center and card.children.floating_sprite then
local extra = card.ability.extra or {}
local y = (tonumber(extra.level) or 1) > 1 and 1 or 0
card.children.center:set_sprite_pos({x = 0, y = y})
@ -487,7 +535,7 @@ SMODS.Joker {
name = "Oxy{C:dark_edition}#1#",
text = {
"{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}#7#{}#8#",
"#9#{C:dark_edition,E:1}#10#",
@ -518,7 +566,7 @@ SMODS.Joker {
is_corrupted and "Purifies " or "",
is_corrupted and "in " or "",
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 "Destroying steel cards" or "this Joker",
is_corrupted and "prolongs the " or "",
@ -531,7 +579,7 @@ SMODS.Joker {
},
}
end,
draw = function(_, card)
update = function(_, card, _)
if card.added_to_deck and card.children.center and card.children.floating_sprite then
local extra = card.ability.extra or {}
local y = extra.is_corrupted and 1 or 0
@ -543,7 +591,7 @@ SMODS.Joker {
local extra = card.ability.extra or {}
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
context.individual and not
context.repetition and not
@ -598,7 +646,7 @@ if Cryptid and Cryptid.aliases then
end
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 {
key = "betmma",
@ -606,7 +654,7 @@ SMODS.Joker {
loc_txt = {
name = "Betmma",
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:inactive}(Currently " .. operator_prefix .. operator .. "#2#{C:inactive})",
},
@ -633,12 +681,17 @@ SMODS.Joker {
return {
card = card,
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
end
end,
}
if not Jane.cry then
return
end
SMODS.Joker {
key = "7granddad",
loc_txt = {
@ -648,70 +701,99 @@ SMODS.Joker {
"{C:jane_RGB,E:1}reaction {}to scored {C:attention}7{}s",
},
},
config = {extra = {}},
config = {},
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
atlas = "jane7granddad",
blueprint_compat = true,
cost = 7,
rarity = 3,
cost = Jane.cry and 49 or 7,
rarity = Jane.cry and exotic or 3,
loc_vars = function(_, _, center)
return {vars = {center.ability.shopslots}}
end,
add_to_deck = function(_, card, _)
grand_dad(card)
end,
remove_from_deck = function(_, card, _)
grand_dad(card)
end,
draw = function()
G.P_CENTERS.j_jane_saint:draw()
end,
calculate = function(_, card, context)
if context.cardarea ~= G.play or
not context.individual or
not context.other_card or
context.other_card:get_id() ~= 7 then
return
if context.cardarea == G.play then
local function scj(c)
return c.cardarea and c.cardarea == G.play and not c.before and not c.after and not c.repetition
end
local palette = granddad_palette[math.random(#granddad_palette)]
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
if context.other_card and context.other_card:get_id() == 7 and scj(context) then
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 {
chips = 177,
message = Jane.cry and "+777" or "+77",
chips = Jane.cry and 777 or 77,
colour = palette,
card = card,
}, true
elseif cycle == 1 then
elseif rnd == 2 then
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,
colour = palette,
card = card,
}, true
elseif cycle == 2 then
elseif rnd == 4 then
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,
card = card,
}, true
elseif cycle == 3 then
else
return {
xmult = 1.77,
colour = palette,
card = card,
}, true
elseif cycle == 4 then
return {
mult = 77,
message = "^1.77 Mult",
e_mult = 1.77,
colour = palette,
card = card,
}, true
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,
}

View file

@ -1,5 +1,5 @@
Jane = {
cry = SMODS.Mods.Cryptid and not SMODS.Mods.Cryptid.disabled,
cry = not not G.P_CENTERS.j_cry_m,
config = {
texture_pack = "default",
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
{"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)
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)
return not context.individual and not
context.repetition and not
@ -298,16 +271,74 @@ function Game:main_menu(change_context)
orig_menu(self, change_context)
end
local orig_start_run = Game.start_run
local orig_update = Game.update
function Game:start_run(...)
orig_start_run(self, ...)
if self.GAME.banned_keys then
function Game:update(dt)
local function delete_hardbans()
if not Jane.config.disable_bans then
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
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
@ -319,20 +350,6 @@ function draw_card(a, b, c, d, e, f, ...)
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 {
px = 34,
py = 34,

View file

@ -127,8 +127,6 @@ function Jane.misprintize_val(val, override, big)
end
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
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 {
key = "junk",
default_weight = 0,
pools = {Joker = true},
default_weight = 1e-9,
loc_txt = {name = "Junk"},
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
@ -196,7 +180,7 @@ SMODS.Joker {
},
}
end,
draw = function(_, card)
update = function(_, card, _)
if card.added_to_deck and card.children.center and card.children.floating_sprite then
for k, v in ipairs(hunter) do
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.q(function()
local rot = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_jane_rot", "hunter_rot_death")
rot:add_to_deck()
G.jokers:emplace(rot)
local card2 = create_card("Joker", G.jokers, nil, nil, nil, nil, "j_jane_rot", "hunter_rot_death")
card2:add_to_deck()
G.jokers:emplace(card2)
card:set_eternal(nil)
rot:set_eternal(true)
rot:set_edition(card.edition)
card2:set_eternal(true)
play_sound("jane_gore5")
end)
@ -412,13 +395,13 @@ SMODS.Joker {
return not card.debuff and Jane.can_use() and next(G.hand.highlighted)
end,
Bakery_use_joker = function(_, card)
local removed = {unpack(G.hand.highlighted)}
for _, v in pairs(removed) do
v:start_dissolve()
for _, v in pairs(SMODS.find_card("j_jane_oxy")) do
Jane.oxy(v, G.hand.highlighted)
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
return
@ -588,7 +571,7 @@ local orig_debuff = Card.set_debuff
function Card:set_debuff(should_debuff)
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
else
orig_debuff(self, should_debuff)
@ -604,25 +587,24 @@ SMODS.Joker {
"{C:attention}Use {}to toggle itself or",
"other Jokers to its",
"left's {C:legendary}Eternal{} sticker",
"{C:attention}#4#{}#5#{C:spectral}#6#{C:planet}#7#{}#8#",
"{C:inactive,s:1.25}#9#{C:attention,s:1.25}#10#{C:inactive,s:1.25}#11#",
"{C:attention}#4#{}#5#{C:spectral}#6#{}#7#",
"{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,
},
},
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},
soul_pos = {x = 1, y = 0},
cost = 20,
rarity = 4,
debuff_immune = true,
eternal_compat = true,
blueprint_compat = false,
perishable_compat = true,
loc_vars = function(self, info_queue, card)
blueprint_compat = true,
loc_vars = function(_, info_queue, card)
info_queue[#info_queue + 1] = Jane.cry and G.P_CENTERS.c_cry_gateway or nil
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 {
vars = {
@ -632,30 +614,25 @@ SMODS.Joker {
attuned and "" or "Attune ",
attuned and "" or "at ",
attuned and (Jane.cry and "Gateways " or "Spectrals ") or
(Jane.cry and -self.config.extra.karma .. " Gateways" or ""),
(attuned or Jane.cry) and "" or -self.config.extra.karma .. " Planets",
max_karma .. (Jane.cry and " Gateways" or " Spectrals"),
attuned and "add Joker slots" or "",
attuned and "[Currently " or "[",
attuned and "+" .. extra.karma or extra.karma - self.config.extra.karma,
attuned and "]" or " / " .. -self.config.extra.karma .. "]",
attuned and "+" .. karma or karma,
attuned and "]" or " / " .. max_karma .. "]",
},
}
end,
draw = 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)
update = function(_, card, _)
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,
calculate = function(_, card, context)
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()
if extra.is_attuning then
@ -689,15 +666,10 @@ SMODS.Joker {
play_sound("card1")
extra.is_attuned = true
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
if extra.karma >= 0 then
local karma = extra.is_attuning and 0 or (extra.is_attuned and 1 or extra.karma)
if extra.karma >= max_karma then
local karma = (extra.is_attuning or extra.is_attuned) and 0 or extra.karma
G.jokers:change_size(karma * extra.jokers)
ascend()
end
@ -711,8 +683,7 @@ SMODS.Joker {
local gc = context.consumeable:gc()
if Jane.cry and gc.key ~= "c_cry_gateway" or
not Jane.cry and gc.set ~= (extra.karma > 0 and "Spectral" or "Planet") then
if Jane.cry and gc.key ~= "c_cry_gateway" or not Jane.cry and gc.set ~= "Spectral" then
return
end
@ -728,41 +699,22 @@ SMODS.Joker {
{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,
"extra",
nil,
nil,
nil,
{
message = (extra.karma - self.config.extra.karma) ..
" / " ..
-self.config.extra.karma,
colour = G.C.GREEN,
}
{message = extra.karma .. " / " .. max_karma, colour = G.C.GREEN}
)
if extra.karma < 0 then
if extra.karma < max_karma then
return
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()
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)
return Jane.can_use() and not card.debuff
end,
@ -818,10 +770,16 @@ SMODS.Joker {
pos = {x = 0, y = 0},
soul_pos = {x = 1, y = 0},
blueprint_compat = true,
cost = 2,
cost = 1,
rarity = "jane_junk",
in_pool = function()
return true, {allow_duplicates = true}
in_pool = function(_, _)
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,
calculate = Jane.cry and function(_, card, context)
local function has_room()